ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCmluZGV4IDdhODAzN2YuLjA2YjBjNTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQpAQCAtODQsNyArODQsNyBAQAogIwogCiBpZmRlZiBBU0NJSURPQzgKLUFTQ0lJRE9DX0VYVFJBICs9IC1hIGFzY2lpZG9jN2NvbXBhdGlibGUKK0FTQ0lJRE9DX0VYVFJBICs9IC1hIGFzY2lpZG9jN2NvbXBhdGlibGUgLWEgbm8taW5saW5lLWxpdGVyYWwKIGVuZGlmCiBpZmRlZiBET0NCT09LX1hTTF8xNzIKIEFTQ0lJRE9DX0VYVFJBICs9IC1hIGdpdC1hc2NpaWRvYy1uby1yb2ZmCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi40LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDM5ZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNC4xLnR4dApAQCAtMCwwICsxLDQ2IEBACitHSVQgdjEuNi40LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gdW5xdW90ZWQgdmFsdWUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hlbiBpdCBjb250YWlucyBtb3JlIHRoYW4KKyAgIG9uZSB3aGl0ZXNwYWNlcyBpbiBhIHJvdywgZ290IHRoZW0gcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4KKworICogImdpdCBhbSIgdXNlZCB0byBhY2NlcHQgYSBzaW5nbGUgcGllY2Ugb2YgZS1tYWlsIHBlciBmaWxlIChub3QgYSBtYm94KQorICAgYXMgaXRzIGlucHV0LCBidXQgbXVsdGlwbGUgaW5wdXQgZm9ybWF0IHN1cHBvcnQgaW4gdjEuNi40IGJyb2tlIGl0LgorICAgQXBwYXJlbnRseSBtYW55IHBlb3BsZSBoYXZlIGJlZW4gZGVwZW5kaW5nIG9uIHRoaXMgZmVhdHVyZS4KKworICogVGhlIHNob3J0IGhlbHAgdGV4dCBmb3IgImdpdCBmaWx0ZXItYnJhbmNoIiBjb21tYW5kIHdhcyBhIHNpbmdsZSBsb25nCisgICBsaW5lLCB3cmFwcGVkIGJ5IHRlcm1pbmFscywgYW5kIHdhcyBoYXJkIHRvIHJlYWQuCisKKyAqIFRoZSAicmVjdXJzaXZlIiBzdHJhdGVneSBvZiAiZ2l0IG1lcmdlIiBzZWdmYXVsdGVkIHdoZW4gYSBtZXJnZSBoYXMKKyAgIG1vcmUgdGhhbiBvbmUgbWVyZ2UtYmFzZXMsIGFuZCBtZXJnaW5nIG9mIHRoZXNlIG1lcmdlLWJhc2VzIGludm9sdmVzCisgICBhIHJlbmFtZS9yZW5hbWUgb3IgYSByZW5hbWUvYWRkIGNvbmZsaWN0LgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIGRpZCBub3QgdXNlIHRoZSByaWdodCBmb3JrIHBvaW50IHdoZW4gdGhlCisgICByZXBvc2l0b3J5IGhhcyBhbHJlYWR5IGZldGNoZWQgZnJvbSB0aGUgdXBzdHJlYW0gdGhhdCByZXdpbmRzIHRoZQorICAgYnJhbmNoIGl0IGlzIGJhc2VkIG9uIGluIGFuIGVhcmxpZXIgZmV0Y2guCisKKyAqIEV4cGxhaW4gdGhlIGNvbmNlcHQgb2YgZmFzdC1mb3J3YXJkIG1vcmUgZnVsbHkgaW4gImdpdCBwdXNoIgorICAgZG9jdW1lbnRhdGlvbiwgYW5kIGhpbnQgdG8gcmVmZXIgdG8gaXQgZnJvbSBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdGhlCisgICBjb21tYW5kIHJlZnVzZXMgYW4gdXBkYXRlIHRvIHByb3RlY3QgdGhlIHVzZXIuCisKKyAqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBwYWNrLmRlbHRhY2FjaGVzaXplLCB1c2VkIGJ5ICJnaXQgcmVwYWNrIiwgaXMgbm93CisgICAyNTZNLCBpbnN0ZWFkIG9mIHVuYm91bmRlZC4gIE90aGVyd2lzZSBhIHJlcGFjayBvZiBhIG1vZGVyYXRlbHkgc2l6ZWQKKyAgIHJlcG9zaXRvcnkgd291bGQgbmVlZGxlc3NseSBlYXQgaW50byBzd2FwLgorCisgKiBEb2N1bWVudCBob3cgImdpdCByZXBhY2siIChoZW5jZSAiZ2l0IGdjIikgaW50ZXJhY3RzIHdpdGggYSByZXBvc2l0b3J5CisgICB0aGF0IGJvcnJvd3MgaXRzIG9iamVjdHMgZnJvbSBvdGhlciByZXBvc2l0b3JpZXMgKGUuZy4gb25lcyBjcmVhdGVkIGJ5CisgICAiZ2l0IGNsb25lIC1zIikuCisKKyAqICJnaXQgc2hvdyIgb24gYW4gYW5ub3RhdGVkIHRhZyBsYWNrZWQgYSBkZWxpbWl0aW5nIGJsYW5rIGxpbmUgYmV0d2VlbgorICAgdGhlIHRhZyBpdHNlbGYgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0IGl0IHRhZ3MuCisKKyAqICJnaXQgdmVyaWZ5LXBhY2sgLXYiIGVycm9uZW91c2x5IHJlcG9ydGVkIG51bWJlciBvZiBvYmplY3RzIHdpdGggdG9vCisgICBkZWVwIGRlbHRhIGRlcHRocyBhcyAiY2hhaW4gbGVuZ3RoIDAiIG9iamVjdHMuCisKKyAqIExvbmcgbmFtZXMgb2YgYXV0aG9ycyBhbmQgY29tbWl0dGVycyBvdXRzaWRlIFVTLUFTQ0lJIHdlcmUgc29tZXRpbWVzCisgICBpbmNvcnJlY3RseSBzaG93biBpbiAiZ2l0d2ViIi4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjQuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi40LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWVjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi40LjIudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dJVCB2MS42LjQuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjQuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAtLWRhdGU9cmVsYXRpdmUgb3V0cHV0IGJldHdlZW4gMSBhbmQgNSB5ZWFycyBhZ28gcm91bmRlZCB0aGUgbnVtYmVyIG9mCisgICAgeWVhcnMgd2hlbiBzYXlpbmcgWCB5ZWFycyBZIG1vbnRocyBhZ28sIGluc3RlYWQgb2Ygcm91bmRpbmcgaXQgZG93bi4KKworKiAiZ2l0IGFkZCAtcCIgZGlkIG5vdCBoYW5kbGUgY2hhbmdlcyBpbiBleGVjdXRhYmxlIGJpdHMgY29ycmVjdGx5CisgIChhIHJlZ3Jlc3Npb24gYXJvdW5kIDEuNi4zKS4KKworKiAiZ2l0IGFwcGx5IiBkaWQgbm90IGhvbm9yIEdOVSBkaWZmJ3MgY29udmVudGlvbiB0byBtYXJrIHRoZSBjcmVhdGlvbi9kZWxldGlvbgorICBldmVudCB3aXRoIFVOSVggZXBvY2ggdGltZXN0YW1wIG9uIG1pc3Npbmcgc2lkZS4KKworKiAiZ2l0IGNoZWNrb3V0IiBpbmNvcnJlY3RseSByZW1vdmVkIGZpbGVzIGluIGEgZGlyZWN0b3J5IHBvaW50ZWQgYnkgYQorICBzeW1ib2xpYyBsaW5rIGR1cmluZyBhIGJyYW5jaCBzd2l0Y2ggdGhhdCByZXBsYWNlcyBhIGRpcmVjdG9yeSB3aXRoCisgIGEgc3ltYm9saWMgbGluay4KKworKiAiZ2l0IGNsZWFuIC1kIC1mIiBoYXBwaWx5IGRlc2NlbmRlZCBpbnRvIGEgc3ViZGlyZWN0b3J5IHRoYXQgaXMgbWFuYWdlZCBieSBhCisgIHNlcGFyYXRlIGdpdCByZXBvc2l0b3J5LiAgSXQgbm93IHJlcXVpcmVzIHR3byAtZiBvcHRpb25zIGZvciBzYWZldHkuCisKKyogImdpdCBmZXRjaC9wdXNoIiBvdmVyIGh0dHAgdHJhbnNwb3J0cyBoYWQgdHdvIHJhdGhlciBncmF2ZSBidWdzLgorCisqICJnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIiBkaWQgbm90IHByZXBhcmUgdGhlIGNvdmVyIGxldHRlciBmaWxlCisgIGZvciB1c2Ugd2l0aCBub24tQVNDSUkgc3RyaW5ncyB3aGVuIHRoZXJlIGFyZSB0aGUgc2VyaWVzIGNvbnRyaWJ1dG9ycyB3aXRoCisgIG5vbi1BU0NJSSBuYW1lcy4KKworKiAiZ2l0IHB1bGwgb3JpZ2luIGJyYW5jaCIgYW5kICJnaXQgZmV0Y2ggb3JpZ2luICYmIGdpdCBtZXJnZSBvcmlnaW4vYnJhbmNoIgorICBsZWZ0IGRpZmZlcmVudCBtZXJnZSBtZXNzYWdlcyBpbiB0aGUgcmVzdWx0aW5nIGNvbW1pdC4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi40LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjliYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi40LjMudHh0CkBAIC0wLDAgKzEsMjkgQEAKK0dJVCB2MS42LjQuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjQuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGNsb25lIiBmcm9tIGFuIGVtcHR5IHJlcG9zaXRvcnkgZ2F2ZSB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlLAorICBldmVuIHRob3VnaCBpdCBkaWQgZXZlcnl0aGluZyBlbHNlIGNvcnJlY3RseS4KKworKiAiZ2l0IGN2c3NlcnZlciIgaW52b2tlZCBnaXQgY29tbWFuZHMgdmlhICJnaXQtZm9vIiBzdHlsZSwgd2hpY2ggaGFzIGxvbmcKKyAgYmVlbiBkZXByZWNhdGVkLgorCisqICJnaXQgZmV0Y2giIGFuZCAiZ2l0IGNsb25lIiBoYWQgYW4gZXh0cmEgc2FuaXR5IGNoZWNrIHRvIHZlcmlmeSB0aGUKKyAgcHJlc2Vuc2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgKi5wYWNrIGZpbGUgYmVmb3JlIGRvd25sb2FkaW5nICouaWR4CisgIGZpbGUgYnkgaXNzdWluZyBhIEhFQUQgcmVxdWVzdC4gIEdpdGh1YiBzZXJ2ZXIgaG93ZXZlciBzb21ldGltZXMKKyAgZ2F2ZSA1MDAgKEludGVybmFsIHNlcnZlciBlcnJvcikgcmVzcG9uc2UgdG8gSEVBRCBldmVuIGlmIGEgR0VUCisgIHJlcXVlc3QgZm9yICoucGFjayBmaWxlIHRvIHRoZSBzYW1lIFVSTCB3b3VsZCBoYXZlIHN1Y2NlZWRlZCwgYW5kIGJyb2tlCisgIGNsb25lIG92ZXIgSFRUUCBmcm9tIHNvbWUgb2YgdGhlaXIgcmVwb3NpdG9yaWVzLiAgQXMgYSB3b3JrYXJvdW5kLCB0aGlzCisgIHZlcmlmaWNhdGlvbiBoYXMgYmVlbiByZW1vdmVkIChhcyBpdCBpcyBub3QgYWJzb2x1dGVseSBuZWNlc3NhcnkpLgorCisqICJnaXQgZ3JlcCIgZGlkIG5vdCBsaWtlIHJlbGF0aXZlIHBhdGhuYW1lIHRvIHJlZmVyIG91dHNpZGUgdGhlIGN1cnJlbnQKKyAgZGlyZWN0b3J5IHdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyogYW4gZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgcHVzaCIgd2FzIGZvcm1hdHRlZCBpbiBhIHZlcnkgdWdseSB3YXkuCisKKyogImdpdCBzdm4iIGRpZCBub3QgcXVvdGUgdGhlIHN1YnZlcnNpb24gdXNlciBuYW1lIGNvcnJlY3RseSB3aGVuCisgIHJ1bm5pbmcgaXRzIGF1dGhvci1wcm9nIGhlbHBlciBwcm9ncmFtLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTkwNDQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNC50eHQKQEAgLTAsMCArMSwxNDcgQEAKK0dJVCB2MS42LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1dpdGggdGhlIG5leHQgbWFqb3IgcmVsZWFzZSwgImdpdCBwdXNoIiBpbnRvIGEgYnJhbmNoIHRoYXQgaXMKK2N1cnJlbnRseSBjaGVja2VkIG91dCB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4gIFlvdSBjYW4gY2hvb3NlCit3aGF0IHNob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeS4KKworVG8gZWFzZSB0aGUgdHJhbnNpdGlvbiBwbGFuLCB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgb2Ygc3VjaCBhCitwdXNoIHJ1bm5pbmcgdGhpcyByZWxlYXNlIHdpbGwgaXNzdWUgYSBiaWcgd2FybmluZyB3aGVuIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBtaXNzaW5nLiAgUGxlYXNlIHJlZmVyIHRvOgorCisgIGh0dHA6Ly9naXQub3IuY3ovZ2l0d2lraS9HaXRGYXEjbm9uLWJhcmUKKyAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzEwNzc1OC9mb2N1cz0xMDgwMDcKKworZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQordHJhbnNpdGlvbiBwbGFuLgorCitGb3IgYSBzaW1pbGFyIHJlYXNvbiwgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2gKKyRraWxsZWQgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSAkdGhlcmUsIGlmICRraWxsZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50CiticmFuY2ggcG9pbnRlZCBhdCBieSBpdHMgSEVBRCwgZ2V0cyBhIGxhcmdlIHdhcm5pbmcuICBZb3UgY2FuIGNob29zZSB3aGF0CitzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKKworVXBkYXRlcyBzaW5jZSB2MS42LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisgKiBnaXR3ZWIgUGVybCBzdHlsZSBjbGVhbi11cC4KKworICogZ2l0LXN2biB1cGRhdGVzLCBpbmNsdWRpbmcgYSBuZXcgLS1hdXRob3JzLXByb2cgb3B0aW9uIHRvIG1hcCBhdXRob3IKKyAgIG5hbWVzIGJ5IGludm9raW5nIGFuIGV4dGVybmFsIHByb2dyYW0sICdnaXQgc3ZuIHJlc2V0JyB0byB1bndpbmQKKyAgICdnaXQgc3ZuIGZldGNoJywgc3VwcG9ydCBmb3IgbW9yZSB0aGFuIG9uZSBicmFuY2hlcywgZG9jdW1lbnRpbmcKKyAgIG9mIHRoZSB1c2VmdWwgLS1taW5pbWl6ZS11cmwgZmVhdHVyZSwgbmV3ICJnaXQgc3ZuIGdjIiBjb21tYW5kLCBldGMuCisKKyhwb3J0YWJpbGl0eSkKKworICogV2UgZmVlZCBpY29udiB3aXRoICJVVEYtOCIgaW5zdGVhZCBvZiAidXRmOCI7IHRoZSBmb3JtZXIgaXMKKyAgIHVuZGVyc3Rvb2QgbW9yZSB3aWRlbHkuICBTaW1pbGFybHkgdXBkYXRlZCB0ZXN0IHNjcmlwdHMgdG8gdXNlCisgICBlbmNvZGluZyBuYW1lcyBtb3JlIHdpZGVseSB1bmRlcnN0b29kIChlLmcuIHVzZSAiSVNPODg1OS0xIiBpbnN0ZWFkCisgICBvZiAiSVNPLTg4NTktMSIpLgorCisgKiBWYXJpb3VzIHBvcnRhYmlsaXR5IGZpeGVzL3dvcmthcm91bmRzIGZvciBkaWZmZXJlbnQgdmludGFnZXMgb2YKKyAgIFN1bk9TLCBJUklYLCBhbmQgV2luZG93cy4KKworICogR2l0LW92ZXItc3NoIHRyYW5zcG9ydCBvbiBXaW5kb3dzIHN1cHBvcnRzIFB1VFRZIHBsaW5rIGFuZCBUb3J0b2lzZVBsaW5rLgorCisocGVyZm9ybWFuY2UpCisKKyAqIE1hbnkgcmVwZWF0ZWQgdXNlIG9mIGxzdGF0KCkgYXJlIG9wdGltaXplZCBvdXQgaW4gImNoZWNrb3V0IiBjb2RlcGF0aC4KKworICogZ2l0LXN0YXR1cyAoYW5kIHVuZGVybHlpbmcgZ2l0LWRpZmYtaW5kZXggLS1jYWNoZWQpIGFyZSBvcHRpbWl6ZWQKKyAgIHRvIHRha2UgYWR2YW50YWdlIG9mIGNhY2hlLXRyZWUgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4LgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyAqICJnaXQgYWRkIC0tZWRpdCIgbGV0cyB1c2VycyBlZGl0IHRoZSB3aG9sZSBwYXRjaCB0ZXh0IHRvIGZpbmUtdHVuZSB3aGF0CisgICBpcyBhZGRlZCB0byB0aGUgaW5kZXguCisKKyAqICJnaXQgYW0iIGFjY2VwdHMgU3RHSVQgc2VyaWVzIGZpbGUgYXMgaXRzIGlucHV0LgorCisgKiAiZ2l0IGJpc2VjdCBza2lwIiBza2lwcyB0byBhIG1vcmUgcmFuZG9tbHkgY2hvc2VuIHBsYWNlIGluIHRoZSBob3BlCisgICB0byBhdm9pZCB0ZXN0aW5nIGEgY29tbWl0IHRoYXQgaXMgdG9vIGNsb3NlIHRvIGEgY29tbWl0IHRoYXQgaXMKKyAgIGFscmVhZHkga25vd24gdG8gYmUgdW50ZXN0YWJsZS4KKworICogImdpdCBjdnNleHBvcnRjb21taXQiIGxlYXJuZWQgLWsgb3B0aW9uIHRvIHN0b3AgQ1ZTIGtleXdvcmRzIGV4cGFuc2lvbgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBsZWFybmVkIHRvIGhhbmRsZSBoaXN0b3J5IHNpbXBsaWZpY2F0aW9uIG1vcmUKKyAgIGdyYWNlZnVsbHkuCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGxlYXJuZWQgYW4gb3B0aW9uIC0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdCB0byBoYW5kbGUKKyAgIGRhbmdsaW5nIHRhZ3MgcmVzdWx0aW5nIGZyb20gaGlzdG9yeSBzaW1wbGlmaWNhdGlvbiBtb3JlIHVzZWZ1bGx5LgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgLXAgb3B0aW9uIHRvIHNob3cgdGhlIGxvY2F0aW9uIG9mIHRoZSBtYXRjaCB1c2luZyB0aGUKKyAgIHNhbWUgY29udGV4dCBodW5rIG1hcmtlciAiZ2l0IGRpZmYiIHVzZXMuCisKKyAqIGh0dHBzIHRyYW5zcG9ydCBjYW4gb3B0aW9uYWxseSBiZSB0b2xkIHRoYXQgdGhlIHVzZWQgY2xpZW50CisgICBjZXJ0aWZpY2F0ZSBpcyBwYXNzd29yZCBwcm90ZWN0ZWQsIGluIHdoaWNoIGNhc2UgaXQgYXNrcyB0aGUKKyAgIHBhc3N3b3JkIG9ubHkgb25jZS4KKworICogImdpdCBpbWFwLXNlbmQiIGlzIElQdjYgYXdhcmUuCisKKyAqICJnaXQgbG9nIC0tZ3JhcGgiIGRyYXdzIGdyYXBocyBtb3JlIGNvbXBhY3RseSBieSB1c2luZyBob3Jpem9udGFsIGxpbmVzCisgICB3aGVuIGFibGUuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIHNob3dzIHNob3J0ZXIgcmVmbmFtZXMgYnkgc3RyaXBwaW5nIHdlbGwta25vd24KKyAgIHJlZnMvKiBwcmVmaXguCisKKyAqICJnaXQgcHVzaCAkbmFtZSIgaG9ub3JzIHJlbW90ZS4kbmFtZS5wdXNodXJsIGlmIHByZXNlbnQgYmVmb3JlCisgICB1c2luZyByZW1vdGUuJG5hbWUudXJsLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBVUkwgdXNlZCBmb3IgZmV0Y2hpbmcKKyAgIGFuZCBwdXNoaW5nIGNhbiBiZSBkaWZmZXJlbnQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgdW5kZXJzdGFuZHMgcXVvdGVkIGFsaWFzZXMgaW4gLm1haWxyYyBmaWxlcyAobWlnaHQKKyAgIGhhdmUgdG8gYmUgYmFja3BvcnRlZCB0byAxLjYuMy5YKS4KKworICogImdpdCBzZW5kLWVtYWlsIiBjYW4gZmV0Y2ggdGhlIHNlbmRlciBhZGRyZXNzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlICJzZW5kbWFpbC5mcm9tIiAoYW5kICJzZW5kbWFpbC48aWRlbnRpdHk+LmZyb20iKS4KKworICogImdpdCBzaG93LWJyYW5jaCIgY2FuIGNvbG9yIGl0cyBvdXRwdXQuCisKKyAqICJhZGQiIGFuZCAidXBkYXRlIiBzdWJjb21tYW5kcyB0byAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCAtLXJlZmVyZW5jZQorICAgb3B0aW9uIHRvIHVzZSBsb2NhbCBjbG9uZSB3aXRoIHJlZmVyZW5jZXMuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgbGVhcm5lZCAtLXJlYmFzZSBvcHRpb24gdG8gdXBkYXRlIGNoZWNrZWQKKyAgIG91dCBzdWJtb2R1bGVzIGJ5IHJlYmFzaW5nIHRoZSBsb2NhbCBjaGFuZ2VzLgorCisgKiAiZ2l0d2ViIiBjYW4gb3B0aW9uYWxseSB1c2UgZ3JhdmF0YXIgdG8gYWRvcm4gYXV0aG9yL2NvbW1pdHRlciBuYW1lcy4KKworKGRldmVsb3BlcnMpCisKKyAqIEEgbWFqb3IgcGFydCBvZiB0aGUgImdpdCBiaXNlY3QiIHdyYXBwZXIgaGFzIG1vdmVkIHRvIEMuCisKKyAqIEZvcm1hdHRpbmcgd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgQXNjaWlEb2MgOC40LjEgaXMgbm93IHN1cHBvcnRlZC4KKworRml4ZXMgc2luY2UgdjEuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjMuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKK0hlcmUgYXJlIGZpeGVzIHRoYXQgdGhpcyByZWxlYXNlIGhhcywgYnV0IGhhdmUgbm90IGJlZW4gYmFja3BvcnRlZCB0bwordjEuNi4zLlggc2VyaWVzLgorCisgKiAiZ2l0IGRpZmYtdHJlZSAtciAtdCIgdXNlZCB0byBvbWl0IG5ldyBvciByZW1vdmVkIGRpcmVjdG9yaWVzIGZyb20KKyAgIHRoZSBvdXRwdXQuICBkZjUzM2YzIChkaWZmLXRyZWUgLXIgLXQ6IGluY2x1ZGUgYWRkZWQvcmVtb3ZlZAorICAgZGlyZWN0b3JpZXMgaW4gdGhlIG91dHB1dCwgMjAwOS0wNi0xMykgbWF5IG5lZWQgdG8gYmUgY2hlcnJ5LXBpY2tlZAorICAgdG8gYmFja3BvcnQgdGhpcyBmaXguCisKKyAqIFRoZSB3YXkgR2l0LnBtIHNldHMgdXAgYSBSZXBvc2l0b3J5IG9iamVjdCB3YXMgbm90IGZyaWVuZGx5IHRvIGNhbGxlcnMKKyAgIHRoYXQgY2hkaXIgYXJvdW5kLiAgSXQgbm93IGludGVybmFsbHkgcmVjb3JkcyB0aGUgcmVwb3NpdG9yeSBsb2NhdGlvbgorICAgYXMgYW4gYWJzb2x1dGUgcGF0aCB3aGVuIGF1dG9kZXRlY3RlZC4KKworICogUmVtb3ZpbmcgYSBzZWN0aW9uIHdpdGggImdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiIsIHdoZW4gaXRzCisgICBzZWN0aW9uIGhlYWRlciBoYXMgYSB2YXJpYWJsZSBkZWZpbml0aW9uIG9uIHRoZSBzYW1lIGxpbmUsIGxvc3QKKyAgIHRoYXQgdmFyaWFibGUgZGVmaW5pdGlvbi4KKworICogImdpdCByZWJhc2UgLXAgLS1vbnRvIiB1c2VkIHRvIGFsd2F5cyBsZWF2ZSBzaWRlIGJyYW5jaGVzIG9mIGEgbWVyZ2UKKyAgIGludGFjdCwgZXZlbiB3aGVuIGJvdGggYnJhbmNoZXMgYXJlIHN1YmplY3QgdG8gcmV3cml0aW5nLgorCisgKiAiZ2l0IHJlcGFjayIgdXNlZCB0byBmYWl0aGZ1bGx5IGZvbGxvdyBncmFmdHMgYW5kIGNvbnNpZGVyZWQgdHJ1ZQorICAgcGFyZW50cyByZWNvcmRlZCBpbiB0aGUgY29tbWl0IG9iamVjdCB1bnJlYWNoYWJsZSBmcm9tIHRoZSBjb21taXQuCisgICBBZnRlciBzdWNoIGEgcmVwYWNraW5nLCB5b3UgY2Fubm90IHJlbW92ZSBncmFmdHMgd2l0aG91dCBjb3JydXB0aW5nCisgICB0aGUgcmVwb3NpdG9yeS4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IGRldGVjdCBlcnJvbmVvdXMgbG9vcHMgaW4gYWxpYXMgZXhwYW5zaW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CmluZGV4IDE4MWMyZjkuLjI2MzJjNTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKQEAgLTQ5LDcgKzQ5LDggQEAKIEluIHRoaXMgc3ludGF4LCBzdWJzZWN0aW9uIG5hbWVzIGZvbGxvdyB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMgZm9yIHNlY3Rpb24KIG5hbWVzLgogCi1BbGwgdGhlIG90aGVyIGxpbmVzIGFyZSByZWNvZ25pemVkIGFzIHNldHRpbmcgdmFyaWFibGVzLCBpbiB0aGUgZm9ybQorQWxsIHRoZSBvdGhlciBsaW5lcyAoYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGxpbmUgYWZ0ZXIgdGhlIHNlY3Rpb24KK2hlYWRlcikgYXJlIHJlY29nbml6ZWQgYXMgc2V0dGluZyB2YXJpYWJsZXMsIGluIHRoZSBmb3JtCiAnbmFtZSA9IHZhbHVlJy4gIElmIHRoZXJlIGlzIG5vIGVxdWFsIHNpZ24gb24gdGhlIGxpbmUsIHRoZSBlbnRpcmUgbGluZQogaXMgdGFrZW4gYXMgJ25hbWUnIGFuZCB0aGUgdmFyaWFibGUgaXMgcmVjb2duaXplZCBhcyBib29sZWFuICJ0cnVlIi4KIFRoZSB2YXJpYWJsZSBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgb25seSBhbHBoYW51bWVyaWMKQEAgLTYxMSw2ICs2MTIsMTIgQEAKIAlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3JlZCBvdXRwdXQgd2hlbiB0aGUgcGFnZXIgaXMgaW4KIAl1c2UgKGRlZmF1bHQgaXMgdHJ1ZSkuCiAKK2NvbG9yLnNob3dicmFuY2g6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvciBpbiB0aGUgb3V0cHV0IG9mCisJbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0uIE1heSBiZSBzZXQgdG8gYGFsd2F5c2AsCisJYGZhbHNlYCAob3IgYG5ldmVyYCkgb3IgYGF1dG9gIChvciBgdHJ1ZWApLCBpbiB3aGljaCBjYXNlIGNvbG9ycyBhcmUgdXNlZAorCW9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIHRvIGEgdGVybWluYWwuIERlZmF1bHRzIHRvIGZhbHNlLgorCiBjb2xvci5zdGF0dXM6OgogCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvciBpbiB0aGUgb3V0cHV0IG9mCiAJbGlua2dpdDpnaXQtc3RhdHVzWzFdLiBNYXkgYmUgc2V0IHRvIGBhbHdheXNgLApAQCAtMTAzOSw2ICsxMDQ2LDEyIEBACiAJb3ZlciBIVFRQUy4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfU1NMX0tFWScgZW52aXJvbm1lbnQKIAl2YXJpYWJsZS4KIAoraHR0cC5zc2xDZXJ0UGFzc3dvcmRQcm90ZWN0ZWQ6OgorCUVuYWJsZSBnaXQncyBwYXNzd29yZCBwcm9tcHQgZm9yIHRoZSBTU0wgY2VydGlmaWNhdGUuICBPdGhlcndpc2UKKwlPcGVuU1NMIHdpbGwgcHJvbXB0IHRoZSB1c2VyLCBwb3NzaWJseSBtYW55IHRpbWVzLCBpZiB0aGUKKwljZXJ0aWZpY2F0ZSBvciBwcml2YXRlIGtleSBpcyBlbmNyeXB0ZWQuICBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUKKwknR0lUX1NTTF9DRVJUX1BBU1NXT1JEX1BST1RFQ1RFRCcgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKIGh0dHAuc3NsQ0FJbmZvOjoKIAlGaWxlIGNvbnRhaW5pbmcgdGhlIGNlcnRpZmljYXRlcyB0byB2ZXJpZnkgdGhlIHBlZXIgd2l0aCB3aGVuCiAJZmV0Y2hpbmcgb3IgcHVzaGluZyBvdmVyIEhUVFBTLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUKQEAgLTEyMDUsMTIgKzEyMTgsMjAgQEAKIAogcGFjay5kZWx0YUNhY2hlU2l6ZTo6CiAJVGhlIG1heGltdW0gbWVtb3J5IGluIGJ5dGVzIHVzZWQgZm9yIGNhY2hpbmcgZGVsdGFzIGluCi0JbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLgotCUEgdmFsdWUgb2YgMCBtZWFucyBubyBsaW1pdC4gRGVmYXVsdHMgdG8gMC4KKwlsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0gYmVmb3JlIHdyaXRpbmcgdGhlbSBvdXQgdG8gYSBwYWNrLgorCVRoaXMgY2FjaGUgaXMgdXNlZCB0byBzcGVlZCB1cCB0aGUgd3JpdGluZyBvYmplY3QgcGhhc2UgYnkgbm90CisJaGF2aW5nIHRvIHJlY29tcHV0ZSB0aGUgZmluYWwgZGVsdGEgcmVzdWx0IG9uY2UgdGhlIGJlc3QgbWF0Y2gKKwlmb3IgYWxsIG9iamVjdHMgaXMgZm91bmQuICBSZXBhY2tpbmcgbGFyZ2UgcmVwb3NpdG9yaWVzIG9uIG1hY2hpbmVzCisJd2hpY2ggYXJlIHRpZ2h0IHdpdGggbWVtb3J5IG1pZ2h0IGJlIGJhZGx5IGltcGFjdGVkIGJ5IHRoaXMgdGhvdWdoLAorCWVzcGVjaWFsbHkgaWYgdGhpcyBjYWNoZSBwdXNoZXMgdGhlIHN5c3RlbSBpbnRvIHN3YXBwaW5nLgorCUEgdmFsdWUgb2YgMCBtZWFucyBubyBsaW1pdC4gVGhlIHNtYWxsZXN0IHNpemUgb2YgMSBieXRlIG1heSBiZQorCXVzZWQgdG8gdmlydHVhbGx5IGRpc2FibGUgdGhpcyBjYWNoZS4gRGVmYXVsdHMgdG8gMjU2IE1pQi4KIAogcGFjay5kZWx0YUNhY2hlTGltaXQ6OgogCVRoZSBtYXhpbXVtIHNpemUgb2YgYSBkZWx0YSwgdGhhdCBpcyBjYWNoZWQgaW4KLQlsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0uIERlZmF1bHRzIHRvIDEwMDAuCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLiBUaGlzIGNhY2hlIGlzIHVzZWQgdG8gc3BlZWQgdXAgdGhlCisJd3JpdGluZyBvYmplY3QgcGhhc2UgYnkgbm90IGhhdmluZyB0byByZWNvbXB1dGUgdGhlIGZpbmFsIGRlbHRhCisJcmVzdWx0IG9uY2UgdGhlIGJlc3QgbWF0Y2ggZm9yIGFsbCBvYmplY3RzIGlzIGZvdW5kLiBEZWZhdWx0cyB0byAxMDAwLgogCiBwYWNrLnRocmVhZHM6OgogCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gc3Bhd24gd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QKQEAgLTEzMTUsNiArMTMzNiw5IEBACiAJVGhlIFVSTCBvZiBhIHJlbW90ZSByZXBvc2l0b3J5LiAgU2VlIGxpbmtnaXQ6Z2l0LWZldGNoWzFdIG9yCiAJbGlua2dpdDpnaXQtcHVzaFsxXS4KIAorcmVtb3RlLjxuYW1lPi5wdXNodXJsOjoKKwlUaGUgcHVzaCBVUkwgb2YgYSByZW1vdGUgcmVwb3NpdG9yeS4gIFNlZSBsaW5rZ2l0OmdpdC1wdXNoWzFdLgorCiByZW1vdGUuPG5hbWU+LnByb3h5OjoKIAlGb3IgcmVtb3RlcyB0aGF0IHJlcXVpcmUgY3VybCAoaHR0cCwgaHR0cHMgYW5kIGZ0cCksIHRoZSBVUkwgdG8KIAl0aGUgcHJveHkgdG8gdXNlIGZvciB0aGF0IHJlbW90ZS4gIFNldCB0byB0aGUgZW1wdHkgc3RyaW5nIHRvCkBAIC0xMzcyLDYgKzEzOTYsNTAgQEAKIAlkZWZhdWx0IGVuYWJsZWQgaWYgeW91IGNyZWF0ZSBgcnItY2FjaGVgIGRpcmVjdG9yeSB1bmRlcgogCWAkR0lUX0RJUmAsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGlzIG9wdGlvbiB0byBmYWxzZS4KIAorc2VuZGVtYWlsLmlkZW50aXR5OjoKKwlBIGNvbmZpZ3VyYXRpb24gaWRlbnRpdHkuIFdoZW4gZ2l2ZW4sIGNhdXNlcyB2YWx1ZXMgaW4gdGhlCisJJ3NlbmRlbWFpbC48aWRlbnRpdHk+JyBzdWJzZWN0aW9uIHRvIHRha2UgcHJlY2VkZW5jZSBvdmVyCisJdmFsdWVzIGluIHRoZSAnc2VuZGVtYWlsJyBzZWN0aW9uLiBUaGUgZGVmYXVsdCBpZGVudGl0eSBpcworCXRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLmlkZW50aXR5Jy4KKworc2VuZGVtYWlsLnNtdHBlbmNyeXB0aW9uOjoKKwlTZWUgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXSBmb3IgZGVzY3JpcHRpb24uICBOb3RlIHRoYXQgdGhpcworCXNldHRpbmcgaXMgbm90IHN1YmplY3QgdG8gdGhlICdpZGVudGl0eScgbWVjaGFuaXNtLgorCitzZW5kZW1haWwuc210cHNzbDo6CisJRGVwcmVjYXRlZCBhbGlhcyBmb3IgJ3NlbmRlbWFpbC5zbXRwZW5jcnlwdGlvbiA9IHNzbCcuCisKK3NlbmRlbWFpbC48aWRlbnRpdHk+Lio6OgorCUlkZW50aXR5LXNwZWNpZmljIHZlcnNpb25zIG9mIHRoZSAnc2VuZGVtYWlsLionIHBhcmFtZXRlcnMKKwlmb3VuZCBiZWxvdywgdGFraW5nIHByZWNlZGVuY2Ugb3ZlciB0aG9zZSB3aGVuIHRoZSB0aGlzCisJaWRlbnRpdHkgaXMgc2VsZWN0ZWQsIHRocm91Z2ggY29tbWFuZC1saW5lIG9yCisJJ3NlbmRlbWFpbC5pZGVudGl0eScuCisKK3NlbmRlbWFpbC5hbGlhc2VzZmlsZTo6CitzZW5kZW1haWwuYWxpYXNmaWxldHlwZTo6CitzZW5kZW1haWwuYmNjOjoKK3NlbmRlbWFpbC5jYzo6CitzZW5kZW1haWwuY2NjbWQ6Ogorc2VuZGVtYWlsLmNoYWlucmVwbHl0bzo6CitzZW5kZW1haWwuY29uZmlybTo6CitzZW5kZW1haWwuZW52ZWxvcGVzZW5kZXI6Ogorc2VuZGVtYWlsLmZyb206Ogorc2VuZGVtYWlsLm11bHRpZWRpdDo6CitzZW5kZW1haWwuc2lnbmVkb2ZmYnljYzo6CitzZW5kZW1haWwuc210cHBhc3M6Ogorc2VuZGVtYWlsLnN1cHByZXNzY2M6Ogorc2VuZGVtYWlsLnN1cHByZXNzZnJvbTo6CitzZW5kZW1haWwudG86Ogorc2VuZGVtYWlsLnNtdHBzZXJ2ZXI6Ogorc2VuZGVtYWlsLnNtdHBzZXJ2ZXJwb3J0OjoKK3NlbmRlbWFpbC5zbXRwdXNlcjo6CitzZW5kZW1haWwudGhyZWFkOjoKK3NlbmRlbWFpbC52YWxpZGF0ZTo6CisJU2VlIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0gZm9yIGRlc2NyaXB0aW9uLgorCitzZW5kZW1haWwuc2lnbmVkb2ZmY2M6OgorCURlcHJlY2F0ZWQgYWxpYXMgZm9yICdzZW5kZW1haWwuc2lnbmVkb2ZmYnljYycuCisKIHNob3dicmFuY2guZGVmYXVsdDo6CiAJVGhlIGRlZmF1bHQgc2V0IG9mIGJyYW5jaGVzIGZvciBsaW5rZ2l0OmdpdC1zaG93LWJyYW5jaFsxXS4KIAlTZWUgbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CmluZGV4IDFlZWIxYzcuLmI3MTcxMjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CkBAIC0xLDQgKzEsNyBAQAotVGhlIG91dHB1dCBmb3JtYXQgZnJvbSAiZ2l0LWRpZmYtaW5kZXgiLCAiZ2l0LWRpZmYtdHJlZSIsCitSYXcgb3V0cHV0IGZvcm1hdAorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJhdyBvdXRwdXQgZm9ybWF0IGZyb20gImdpdC1kaWZmLWluZGV4IiwgImdpdC1kaWZmLXRyZWUiLAogImdpdC1kaWZmLWZpbGVzIiBhbmQgImdpdCBkaWZmIC0tcmF3IiBhcmUgdmVyeSBzaW1pbGFyLgogCiBUaGVzZSBjb21tYW5kcyBhbGwgY29tcGFyZSB0d28gc2V0cyBvZiB0aGluZ3M7IHdoYXQgaXMKQEAgLTE2LDYgKzE5LDkgQEAKIGdpdC1kaWZmLWZpbGVzIFs8cGF0dGVybj4uLi5dOjoKICAgICAgICAgY29tcGFyZXMgdGhlIGluZGV4IGFuZCB0aGUgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0uCiAKK1RoZSAiZ2l0LWRpZmYtdHJlZSIgY29tbWFuZCBiZWdpbnMgaXRzIG91cHV0IGJ5IHByaW50aW5nIHRoZSBoYXNoIG9mCit3aGF0IGlzIGJlaW5nIGNvbXBhcmVkLiBBZnRlciB0aGF0LCBhbGwgdGhlIGNvbW1hbmRzIHByaW50IG9uZSBvdXRwdXQKK2xpbmUgcGVyIGNoYW5nZWQgZmlsZS4KIAogQW4gb3V0cHV0IGxpbmUgaXMgZm9ybWF0dGVkIHRoaXMgd2F5OgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dAppbmRleCBlYTNiMWJjLi41ZWIyYjBlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKQEAgLTEsMyArMSw0IEBACitpZm5kZWY6OmdpdC1wdWxsW10KIC1xOjoKIC0tcXVpZXQ6OgogCVBhc3MgLS1xdWlldCB0byBnaXQtZmV0Y2gtcGFjayBhbmQgc2lsZW5jZSBhbnkgb3RoZXIgaW50ZXJuYWxseQpAQCAtNiw2ICs3LDcgQEAKIC12OjoKIC0tdmVyYm9zZTo6CiAJQmUgdmVyYm9zZS4KK2VuZGlmOjpnaXQtcHVsbFtdCiAKIC1hOjoKIC0tYXBwZW5kOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hZGQudHh0CmluZGV4IGQ5MzhiNDIuLmU2N2I3ZTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dApAQCAtOSw4ICs5LDggQEAKIC0tLS0tLS0tCiBbdmVyc2VdCiAnZ2l0IGFkZCcgWy1uXSBbLXZdIFstLWZvcmNlIHwgLWZdIFstLWludGVyYWN0aXZlIHwgLWldIFstLXBhdGNoIHwgLXBdCi0JICBbLS1hbGwgfCBbLS11cGRhdGUgfCAtdV1dIFstLWludGVudC10by1hZGQgfCAtTl0KLQkgIFstLXJlZnJlc2hdIFstLWlnbm9yZS1lcnJvcnNdIFstLV0gPGZpbGVwYXR0ZXJuPi4uLgorCSAgWy0tZWRpdCB8IC1lXSBbLS1hbGwgfCBbLS11cGRhdGUgfCAtdV1dIFstLWludGVudC10by1hZGQgfCAtTl0KKwkgIFstLXJlZnJlc2hdIFstLWlnbm9yZS1lcnJvcnNdIFstLV0gWzxmaWxlcGF0dGVybj4uLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtNzYsNiArNzYsMTUgQEAKIAlieXBhc3NlZCBhbmQgdGhlICdwYXRjaCcgc3ViY29tbWFuZCBpcyBpbnZva2VkIHVzaW5nIGVhY2ggb2YKIAl0aGUgc3BlY2lmaWVkIGZpbGVwYXR0ZXJucyBiZWZvcmUgZXhpdGluZy4KIAorLWUsIFwtLWVkaXQ6OgorCU9wZW4gdGhlIGRpZmYgdnMuIHRoZSBpbmRleCBpbiBhbiBlZGl0b3IgYW5kIGxldCB0aGUgdXNlcgorCWVkaXQgaXQuICBBZnRlciB0aGUgZWRpdG9yIHdhcyBjbG9zZWQsIGFkanVzdCB0aGUgaHVuayBoZWFkZXJzCisJYW5kIGFwcGx5IHRoZSBwYXRjaCB0byB0aGUgaW5kZXguCisrCisqTk9URSo6IE9idmlvdXNseSwgaWYgeW91IGNoYW5nZSBhbnl0aGluZyBlbHNlIHRoYW4gdGhlIGZpcnN0IGNoYXJhY3Rlcgorb24gbGluZXMgYmVnaW5uaW5nIHdpdGggYSBzcGFjZSBvciBhIG1pbnVzLCB0aGUgcGF0Y2ggd2lsbCBubyBsb25nZXIKK2FwcGx5LgorCiAtdTo6CiAtLXVwZGF0ZTo6CiAJVXBkYXRlIG9ubHkgZmlsZXMgdGhhdCBnaXQgYWxyZWFkeSBrbm93cyBhYm91dCwgc3RhZ2luZyBtb2RpZmllZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0CmluZGV4IDZkOTJjYmUuLjMyZTY4OWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKQEAgLTEzLDcgKzEzLDcgQEAKIAkgWy0tM3dheV0gWy0taW50ZXJhY3RpdmVdIFstLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlXQogCSBbLS1pZ25vcmUtZGF0ZV0KIAkgWy0td2hpdGVzcGFjZT08b3B0aW9uPl0gWy1DPG4+XSBbLXA8bj5dIFstLWRpcmVjdG9yeT08ZGlyPl0KLQkgWy0tcmVqZWN0XQorCSBbLS1yZWplY3RdIFstcSB8IC0tcXVpZXRdCiAJIFs8bWJveD4gfCA8TWFpbGRpcj4uLi5dCiAnZ2l0IGFtJyAoLS1za2lwIHwgLS1yZXNvbHZlZCB8IC0tYWJvcnQpCiAKQEAgLTM5LDYgKzM5LDEwIEBACiAtLWtlZXA6OgogCVBhc3MgYC1rYCBmbGFnIHRvICdnaXQtbWFpbGluZm8nIChzZWUgbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgogCistcTo6CistLXF1aWV0OjoKKwlCZSBxdWlldC4gT25seSBwcmludCBlcnJvciBtZXNzYWdlcy4KKwogLXU6OgogLS11dGY4OjoKIAlQYXNzIGAtdWAgZmxhZyB0byAnZ2l0LW1haWxpbmZvJyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dAppbmRleCA5ZTViYWEyLi43MzUzNzRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtYXBwbHkgLSBBcHBseSBhIHBhdGNoIG9uIGEgZ2l0IGluZGV4IGZpbGUgYW5kIGEgd29ya2luZyB0cmVlCitnaXQtYXBwbHkgLSBBcHBseSBhIHBhdGNoIG9uIGEgZ2l0IGluZGV4IGZpbGUgYW5kL29yIGEgd29ya2luZyB0cmVlCiAKIAogU1lOT1BTSVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpdmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGl2ZS50eHQKaW5kZXggYmMxMzJjOC4uOTI0NDRkZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGl2ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGl2ZS50eHQKQEAgLTksNyArOSw3IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgYXJjaGl2ZScgLS1mb3JtYXQ9PGZtdD4gWy0tbGlzdF0gWy0tcHJlZml4PTxwcmVmaXg+L10gWzxleHRyYT5dCisnZ2l0IGFyY2hpdmUnIFstLWZvcm1hdD08Zm10Pl0gWy0tbGlzdF0gWy0tcHJlZml4PTxwcmVmaXg+L10gWzxleHRyYT5dCiAJICAgICAgWy0tb3V0cHV0PTxmaWxlPl0gWy0td29ya3RyZWUtYXR0cmlidXRlc10KIAkgICAgICBbLS1yZW1vdGU9PHJlcG8+IFstLWV4ZWM9PGdpdC11cGxvYWQtYXJjaGl2ZT5dXSA8dHJlZS1pc2g+CiAJICAgICAgW3BhdGguLi5dCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dAppbmRleCBmZmMwMmM3Li42M2U3YTQyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKQEAgLTE2NCw5ICsxNjQsOCBAQAogJCBnaXQgYmlzZWN0IHNraXAgICAgICAgICAgICAgICAgICMgQ3VycmVudCB2ZXJzaW9uIGNhbm5vdCBiZSB0ZXN0ZWQKIC0tLS0tLS0tLS0tLQogCi1CdXQgY29tcHV0aW5nIHRoZSBjb21taXQgdG8gdGVzdCBtYXkgYmUgc2xvd2VyIGFmdGVyd2FyZHMgYW5kIGdpdCBtYXkKLWV2ZW50dWFsbHkgbm90IGJlIGFibGUgdG8gdGVsbCB0aGUgZmlyc3QgYmFkIGNvbW1pdCBhbW9uZyBhIGJhZCBjb21taXQKLWFuZCBvbmUgb3IgbW9yZSBza2lwcGVkIGNvbW1pdHMuCitCdXQgZ2l0IG1heSBldmVudHVhbGx5IGJlIHVuYWJsZSB0byB0ZWxsIHRoZSBmaXJzdCBiYWQgY29tbWl0IGFtb25nCithIGJhZCBjb21taXQgYW5kIG9uZSBvciBtb3JlIHNraXBwZWQgY29tbWl0cy4KIAogWW91IGNhbiBldmVuIHNraXAgYSByYW5nZSBvZiBjb21taXRzLCBpbnN0ZWFkIG9mIGp1c3Qgb25lIGNvbW1pdCwKIHVzaW5nIHRoZSAiJzxjb21taXQxPicuLic8Y29tbWl0Mj4nIiBub3RhdGlvbi4gRm9yIGV4YW1wbGU6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYnJhbmNoLnR4dAppbmRleCBjYmQ0Mjc1Li5hZTIwMWRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKQEAgLTExMSw2ICsxMTEsNyBAQAogLS1uby1hYmJyZXY6OgogCURpc3BsYXkgdGhlIGZ1bGwgc2hhMXMgaW4gdGhlIG91dHB1dCBsaXN0aW5nIHJhdGhlciB0aGFuIGFiYnJldmlhdGluZyB0aGVtLgogCistdDo6CiAtLXRyYWNrOjoKIAlXaGVuIGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgc2V0IHVwIGNvbmZpZ3VyYXRpb24gdG8gbWFyayB0aGUKIAlzdGFydC1wb2ludCBicmFuY2ggYXMgInVwc3RyZWFtIiBmcm9tIHRoZSBuZXcgYnJhbmNoLiBUaGlzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CmluZGV4IGMxY2UyNjguLjBiNzk4MmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CkBAIC0yNSw2ICsyNSwxMCBAQAogICBncm91cGluZywgYnV0IG5vIHNsYXNoLXNlcGFyYXRlZCBjb21wb25lbnQgY2FuIGJlZ2luIHdpdGggYQogICBkb3QgYC5gLgogCisuIFRoZXkgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBgL2AuIFRoaXMgZW5mb3JjZXMgdGhlIHByZXNlbmNlIG9mIGEKKyAgY2F0ZWdvcnkgbGlrZSBgaGVhZHMvYCwgYHRhZ3MvYCBldGMuIGJ1dCB0aGUgYWN0dWFsIG5hbWVzIGFyZSBub3QKKyAgcmVzdHJpY3RlZC4KKwogLiBUaGV5IGNhbm5vdCBoYXZlIHR3byBjb25zZWN1dGl2ZSBkb3RzIGAuLmAgYW55d2hlcmUuCiAKIC4gVGhleSBjYW5ub3QgaGF2ZSBBU0NJSSBjb250cm9sIGNoYXJhY3RlcnMgKGkuZS4gYnl0ZXMgd2hvc2UKQEAgLTM4LDYgKzQyLDggQEAKIAogLiBUaGV5IGNhbm5vdCBjb250YWluIGEgc2VxdWVuY2UgYEB7YC4KIAorLSBUaGV5IGNhbm5vdCBjb250YWluIGEgYFxcYC4KKwogVGhlc2UgcnVsZXMgbWFrZSBpdCBlYXN5IGZvciBzaGVsbCBzY3JpcHQgYmFzZWQgdG9vbHMgdG8gcGFyc2UKIHJlZmVyZW5jZSBuYW1lcywgcGF0aG5hbWUgZXhwYW5zaW9uIGJ5IHRoZSBzaGVsbCB3aGVuIGEgcmVmZXJlbmNlIG5hbWUgaXMgdXNlZAogdW5xdW90ZWQgKGJ5IG1pc3Rha2UpLCBhbmQgYWxzbyBhdm9pZHMgYW1iaWd1aXRpZXMgaW4gY2VydGFpbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2xlYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2xlYW4udHh0CmluZGV4IGJlODk0YWYuLmFlODkzOGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQKQEAgLTI3LDYgKzI3LDkgQEAKIC0tLS0tLS0KIC1kOjoKIAlSZW1vdmUgdW50cmFja2VkIGRpcmVjdG9yaWVzIGluIGFkZGl0aW9uIHRvIHVudHJhY2tlZCBmaWxlcy4KKwlJZiBhbiB1bnRyYWNrZWQgZGlyZWN0b3J5IGlzIG1hbmFnZWQgYnkgYSBkaWZmZXJlbnQgZ2l0CisJcmVwb3NpdG9yeSwgaXQgaXMgbm90IHJlbW92ZWQgYnkgZGVmYXVsdC4gIFVzZSAtZiBvcHRpb24gdHdpY2UKKwlpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHN1Y2ggYSBkaXJlY3RvcnkuCiAKIC1mOjoKIAlJZiB0aGUgZ2l0IGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIGNsZWFuLnJlcXVpcmVGb3JjZSBhcyB0cnVlLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CmluZGV4IGIxNGRlNmMuLjE3MDlhMmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKQEAgLTcyLDExICs3MiwxOSBAQAogd2hpY2ggYXV0b21hdGljYWxseSBjYWxsIGBnaXQgZ2MgLS1hdXRvYC4gKFNlZSBsaW5rZ2l0OmdpdC1nY1sxXS4pCiBJZiB0aGVzZSBvYmplY3RzIGFyZSByZW1vdmVkIGFuZCB3ZXJlIHJlZmVyZW5jZWQgYnkgdGhlIGNsb25lZCByZXBvc2l0b3J5LAogdGhlbiB0aGUgY2xvbmVkIHJlcG9zaXRvcnkgd2lsbCBiZWNvbWUgY29ycnVwdC4KLQotCisrCitOb3RlIHRoYXQgcnVubmluZyBgZ2l0IHJlcGFja2Agd2l0aG91dCB0aGUgYC1sYCBvcHRpb24gaW4gYSByZXBvc2l0b3J5CitjbG9uZWQgd2l0aCBgLXNgIHdpbGwgY29weSBvYmplY3RzIGZyb20gdGhlIHNvdXJjZSByZXBvc2l0b3J5IGludG8gYSBwYWNrCitpbiB0aGUgY2xvbmVkIHJlcG9zaXRvcnksIHJlbW92aW5nIHRoZSBkaXNrIHNwYWNlIHNhdmluZ3Mgb2YgYGNsb25lIC1zYC4KK0l0IGlzIHNhZmUsIGhvd2V2ZXIsIHRvIHJ1biBgZ2l0IGdjYCwgd2hpY2ggdXNlcyB0aGUgYC1sYCBvcHRpb24gYnkKK2RlZmF1bHQuCisrCitJZiB5b3Ugd2FudCB0byBicmVhayB0aGUgZGVwZW5kZW5jeSBvZiBhIHJlcG9zaXRvcnkgY2xvbmVkIHdpdGggYC1zYCBvbgoraXRzIHNvdXJjZSByZXBvc2l0b3J5LCB5b3UgY2FuIHNpbXBseSBydW4gYGdpdCByZXBhY2sgLWFgIHRvIGNvcHkgYWxsCitvYmplY3RzIGZyb20gdGhlIHNvdXJjZSByZXBvc2l0b3J5IGludG8gYSBwYWNrIGluIHRoZSBjbG9uZWQgcmVwb3NpdG9yeS4KIAogLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+OjoKLQlJZiB0aGUgcmVmZXJlbmNlIHJlcG9zaXRvcnkgaXMgb24gdGhlIGxvY2FsIG1hY2hpbmUKKwlJZiB0aGUgcmVmZXJlbmNlIHJlcG9zaXRvcnkgaXMgb24gdGhlIGxvY2FsIG1hY2hpbmUsCiAJYXV0b21hdGljYWxseSBzZXR1cCAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIHRvCiAJb2J0YWluIG9iamVjdHMgZnJvbSB0aGUgcmVmZXJlbmNlIHJlcG9zaXRvcnkuICBVc2luZwogCWFuIGFscmVhZHkgZXhpc3RpbmcgcmVwb3NpdG9yeSBhcyBhbiBhbHRlcm5hdGUgd2lsbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3ZzZXhwb3J0Y29tbWl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2V4cG9ydGNvbW1pdC50eHQKaW5kZXggMmRhODU4OC4uYWJhYWYyNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY3ZzZXhwb3J0Y29tbWl0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNleHBvcnRjb21taXQudHh0CkBAIC02Myw2ICs2MywxMCBAQAogLXU6OgogCVVwZGF0ZSBhZmZlY3RlZCBmaWxlcyBmcm9tIENWUyByZXBvc2l0b3J5IGJlZm9yZSBhdHRlbXB0aW5nIGV4cG9ydC4KIAorLWs6OgorCVJldmVyc2UgQ1ZTIGtleXdvcmQgZXhwYW5zaW9uIChlLmcuICRSZXZpc2lvbjogMS4yLjMuNCQKKwliZWNvbWVzICRSZXZpc2lvbiQpIGluIHdvcmtpbmcgQ1ZTIGNoZWNrb3V0IGJlZm9yZSBhcHBseWluZyBwYXRjaC4KKwogLXc6OgogCVNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBDVlMgY2hlY2tvdXQgdG8gdXNlIGZvciB0aGUgZXhwb3J0LiBUaGlzCiAJb3B0aW9uIGRvZXMgbm90IHJlcXVpcmUgR0lUX0RJUiB0byBiZSBzZXQgYmVmb3JlIGV4ZWN1dGlvbiBpZiB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1maWxlcy50eHQKaW5kZXggYzUyNjE0MS4uNGVmMDM1NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1maWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1maWxlcy50eHQKQEAgLTQzLDggKzQzLDcgQEAKIC1xOjoKIAlSZW1haW4gc2lsZW50IGV2ZW4gb24gbm9uZXhpc3RlbnQgZmlsZXMKIAotT3V0cHV0IGZvcm1hdAotLS0tLS0tLS0tLS0tLQorCiBpbmNsdWRlOjpkaWZmLWZvcm1hdC50eHRbXQogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1pbmRleC50eHQKaW5kZXggMjY5MjBkNC4uOGI5ZWQyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1pbmRleC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1pbmRleC50eHQKQEAgLTM0LDggKzM0LDYgQEAKIAknZ2l0LWRpZmYtaW5kZXgnIHNheSB0aGF0IGFsbCBub24tY2hlY2tlZC1vdXQgZmlsZXMgYXJlIHVwCiAJdG8gZGF0ZS4KIAotT3V0cHV0IGZvcm1hdAotLS0tLS0tLS0tLS0tLQogaW5jbHVkZTo6ZGlmZi1mb3JtYXQudHh0W10KIAogT3BlcmF0aW5nIE1vZGVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi10cmVlLnR4dAppbmRleCAyM2I3YWJkLi5mMmNlZjEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQKQEAgLTE1OSw4ICsxNTksNyBAQAogCiBpbiBjYXNlIHlvdSBjYXJlKS4KIAotT3V0cHV0IGZvcm1hdAotLS0tLS0tLS0tLS0tLQorCiBpbmNsdWRlOjpkaWZmLWZvcm1hdC50eHRbXQogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQKaW5kZXggYTJmMTkyZi4uMGFjNzExMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQKQEAgLTg0LDggKzg0LDcgQEAKIAl0aGUgZGlmZiB0byB0aGUgbmFtZWQgcGF0aHMgKHlvdSBjYW4gZ2l2ZSBkaXJlY3RvcnkKIAluYW1lcyBhbmQgZ2V0IGRpZmYgZm9yIGFsbCBmaWxlcyB1bmRlciB0aGVtKS4KIAotT3V0cHV0IGZvcm1hdAotLS0tLS0tLS0tLS0tLQorCiBpbmNsdWRlOjpkaWZmLWZvcm1hdC50eHRbXQogCiBFWEFNUExFUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZnRvb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZnRvb2wudHh0CmluZGV4IDE1YjI0N2IuLjk2YTZjNTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmZ0b29sLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmdG9vbC50eHQKQEAgLTMxLDcgKzMxLDcgQEAKIAlVc2UgdGhlIGRpZmYgdG9vbCBzcGVjaWZpZWQgYnkgPHRvb2w+LgogCVZhbGlkIG1lcmdlIHRvb2xzIGFyZToKIAlrZGlmZjMsIGtvbXBhcmUsIHRrZGlmZiwgbWVsZCwgeHhkaWZmLCBlbWVyZ2UsIHZpbWRpZmYsIGd2aW1kaWZmLAotCWVjbWVyZ2UsIGRpZmZ1c2UgYW5kIG9wZW5kaWZmCisJZWNtZXJnZSwgZGlmZnVzZSwgb3BlbmRpZmYgYW5kIGFyYXhpcy4KICsKIElmIGEgZGlmZiB0b29sIGlzIG5vdCBzcGVjaWZpZWQsICdnaXQtZGlmZnRvb2wnCiB3aWxsIHVzZSB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgZGlmZi50b29sYC4gIElmIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0CmluZGV4IDBjOWViNTYuLmFmMjMyOGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQKQEAgLTM2LDYgKzM2LDE3IEBACiB1bnNpZ25lZCwgd2l0aCAndmVyYmF0aW0nLCB0aGV5IHdpbGwgYmUgc2lsZW50bHkgZXhwb3J0ZWQKIGFuZCB3aXRoICd3YXJuJywgdGhleSB3aWxsIGJlIGV4cG9ydGVkLCBidXQgeW91IHdpbGwgc2VlIGEgd2FybmluZy4KIAorLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PShhYm9ydHxkcm9wfHJld3JpdGUpOjoKKwlTcGVjaWZ5IGhvdyB0byBoYW5kbGUgdGFncyB3aG9zZSB0YWdnZWQgb2JqZWN0aXMgZmlsdGVyZWQgb3V0LgorCVNpbmNlIHJldmlzaW9ucyBhbmQgZmlsZXMgdG8gZXhwb3J0IGNhbiBiZSBsaW1pdGVkIGJ5IHBhdGgsCisJdGFnZ2VkIG9iamVjdHMgbWF5IGJlIGZpbHRlcmVkIGNvbXBsZXRlbHkuCisrCitXaGVuIGFza2luZyB0byAnYWJvcnQnICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIHRoaXMgcHJvZ3JhbSB3aWxsIGRpZQord2hlbiBlbmNvdW50ZXJpbmcgc3VjaCBhIHRhZy4gIFdpdGggJ2Ryb3AnIGl0IHdpbGwgb21pdCBzdWNoIHRhZ3MgZnJvbQordGhlIG91dHB1dC4gIFdpdGggJ3Jld3JpdGUnLCBpZiB0aGUgdGFnZ2VkIG9iamVjdCBpcyBhIGNvbW1pdCwgaXQgd2lsbAorcmV3cml0ZSB0aGUgdGFnIHRvIHRhZyBhbiBhbmNlc3RvciBjb21taXQgKHZpYSBwYXJlbnQgcmV3cml0aW5nOyBzZWUKK2xpbmtnaXQ6Z2l0LXJldi1saXN0WzFdKQorCiAtTTo6CiAtQzo6CiAJUGVyZm9ybSBtb3ZlIGFuZC9vciBjb3B5IGRldGVjdGlvbiwgYXMgZGVzY3JpYmVkIGluIHRoZQpAQCAtNzEsNiArODIsMTIgQEAKIAlhbGxvdyB0aGF0LiAgU28gZmFrZSBhIHRhZ2dlciB0byBiZSBhYmxlIHRvIGZhc3QtaW1wb3J0IHRoZQogCW91dHB1dC4KIAorW2dpdC1yZXYtbGlzdC1hcmdzLi4uXTo6CisgICAgICAgQSBsaXN0IG9mIGFyZ3VtZW50cywgYWNjZXB0YWJsZSB0byAnZ2l0LXJldi1wYXJzZScgYW5kCisgICAgICAgJ2dpdC1yZXYtbGlzdCcsIHRoYXQgc3BlY2lmaWVzIHRoZSBzcGVjaWZpYyBvYmplY3RzIGFuZCByZWZlcmVuY2VzCisgICAgICAgdG8gZXhwb3J0LiAgRm9yIGV4YW1wbGUsIGBtYXN0ZXJcfjEwLi5tYXN0ZXJgIGNhdXNlcyB0aGUKKyAgICAgICBjdXJyZW50IG1hc3RlciByZWZlcmVuY2UgdG8gYmUgZXhwb3J0ZWQgYWxvbmcgd2l0aCBhbGwgb2JqZWN0cworICAgICAgIGFkZGVkIHNpbmNlIGl0cyAxMHRoIGFuY2VzdG9yIGNvbW1pdC4KIAogRVhBTVBMRVMKIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CmluZGV4IGFiNTI3YjUuLjMyZWE4NTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CkBAIC0zMDUsNiArMzA1LDE2IEBACiBwb2ludCB0byB0aGUgdG9wLW1vc3QgcmV2aXNpb24gdGhhdCBhICdnaXQtcmV2LWxpc3QnIG9mIHRoaXMgcmFuZ2UKIHdpbGwgcHJpbnQuCiAKK0lmIHlvdSBuZWVkIHRvIGFkZCAnQWNrZWQtYnknIGxpbmVzIHRvLCBzYXksIHRoZSBsYXN0IDEwIGNvbW1pdHMgKG5vbmUKK29mIHdoaWNoIGlzIGEgbWVyZ2UpLCB1c2UgdGhpcyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS1tc2ctZmlsdGVyICcKKwljYXQgJiYKKwllY2hvICJBY2tlZC1ieTogQnVncyBCdW5ueSA8YnVubnlAYnVnemlsbGEub3JnPiIKKycgSEVBRH4xMC4uSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogKk5PVEUqIHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhlIGNvbW1pdHMsIGFuZCB3aGljaCBhcmUgbm90IHJldmVydGVkCiBieSBzdWJzZXF1ZW50IGNvbW1pdHMsIHdpbGwgc3RpbGwgYmUgaW4gdGhlIHJld3JpdHRlbiBicmFuY2guIElmIHlvdSB3YW50CiB0byB0aHJvdyBvdXQgX2NoYW5nZXNfIHRvZ2V0aGVyIHdpdGggdGhlIGNvbW1pdHMsIHlvdSBzaG91bGQgdXNlIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKaW5kZXggNmYxZmM4MC4uNjg3ZTY2NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CkBAIC0xMCw3ICsxMCw3IEBACiAtLS0tLS0tLQogW3ZlcnNlXQogJ2dpdCBmb3JtYXQtcGF0Y2gnIFsta10gWygtb3wtLW91dHB1dC1kaXJlY3RvcnkpIDxkaXI+IHwgLS1zdGRvdXRdCi0JCSAgIFstLXRocmVhZFs9PHN0eWxlPl1dCisJCSAgIFstLW5vLXRocmVhZCB8IC0tdGhyZWFkWz08c3R5bGU+XV0KIAkJICAgWygtLWF0dGFjaHwtLWlubGluZSlbPTxib3VuZGFyeT5dIHwgLS1uby1hdHRhY2hdCiAJCSAgIFstcyB8IC0tc2lnbm9mZl0KIAkJICAgWy1uIHwgLS1udW1iZXJlZCB8IC1OIHwgLS1uby1udW1iZXJlZF0KQEAgLTEyNCwxNyArMTI0LDI1IEBACiAJc2Vjb25kIHBhcnQsIHdpdGggIkNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZSIuCiAKIC0tdGhyZWFkWz08c3R5bGU+XTo6Ci0JQWRkIEluLVJlcGx5LVRvIGFuZCBSZWZlcmVuY2VzIGhlYWRlcnMgdG8gbWFrZSB0aGUgc2Vjb25kIGFuZAotCXN1YnNlcXVlbnQgbWFpbHMgYXBwZWFyIGFzIHJlcGxpZXMgdG8gdGhlIGZpcnN0LiAgQWxzbyBnZW5lcmF0ZXMKLQl0aGUgTWVzc2FnZS1JZCBoZWFkZXIgdG8gcmVmZXJlbmNlLgorLS1uby10aHJlYWQ6OgorCUNvbnRyb2xzIGFkZGl0aW9uIG9mIEluLVJlcGx5LVRvIGFuZCBSZWZlcmVuY2VzIGhlYWRlcnMgdG8KKwltYWtlIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgbWFpbHMgYXBwZWFyIGFzIHJlcGxpZXMgdG8gdGhlCisJZmlyc3QuICBBbHNvIGNvbnRyb2xzIGdlbmVyYXRpb24gb2YgdGhlIE1lc3NhZ2UtSWQgaGVhZGVyIHRvCisJcmVmZXJlbmNlLgogKwogVGhlIG9wdGlvbmFsIDxzdHlsZT4gYXJndW1lbnQgY2FuIGJlIGVpdGhlciBgc2hhbGxvd2Agb3IgYGRlZXBgLgogJ3NoYWxsb3cnIHRocmVhZGluZyBtYWtlcyBldmVyeSBtYWlsIGEgcmVwbHkgdG8gdGhlIGhlYWQgb2YgdGhlCiBzZXJpZXMsIHdoZXJlIHRoZSBoZWFkIGlzIGNob3NlbiBmcm9tIHRoZSBjb3ZlciBsZXR0ZXIsIHRoZQogYFwtLWluLXJlcGx5LXRvYCwgYW5kIHRoZSBmaXJzdCBwYXRjaCBtYWlsLCBpbiB0aGlzIG9yZGVyLiAgJ2RlZXAnCi10aHJlYWRpbmcgbWFrZXMgZXZlcnkgbWFpbCBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cyBvbmUuICBJZiBub3QKLXNwZWNpZmllZCwgZGVmYXVsdHMgdG8gdGhlICdmb3JtYXQudGhyZWFkJyBjb25maWd1cmF0aW9uLCBvciBgc2hhbGxvd2AKLWlmIHRoYXQgaXMgbm90IHNldC4KK3RocmVhZGluZyBtYWtlcyBldmVyeSBtYWlsIGEgcmVwbHkgdG8gdGhlIHByZXZpb3VzIG9uZS4KKysKK1RoZSBkZWZhdWx0IGlzIC0tbm8tdGhyZWFkLCB1bmxlc3MgdGhlICdmb3JtYXQudGhyZWFkJyBjb25maWd1cmF0aW9uCitpcyBzZXQuICBJZiAtLXRocmVhZCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhIHN0eWxlLCBpdCBkZWZhdWx0cyB0byB0aGUKK3N0eWxlIHNwZWNpZmllZCBieSAnZm9ybWF0LnRocmVhZCcgaWYgYW55LCBvciBlbHNlIGBzaGFsbG93YC4KKysKK0Jld2FyZSB0aGF0IHRoZSBkZWZhdWx0IGZvciAnZ2l0IHNlbmQtZW1haWwnIGlzIHRvIHRocmVhZCBlbWFpbHMKK2l0c2VsZi4gIElmIHlvdSB3YW50ICdnaXQgZm9ybWF0LXBhdGNoJyB0byB0YWtlIGNhcmUgb2YgaHJlYWRpbmcsIHlvdQord2lsbCB3YW50IHRvIGVuc3VyZSB0aGF0IHRocmVhZGluZyBpcyBkaXNhYmxlZCBmb3IgJ2dpdCBzZW5kLWVtYWlsJy4KIAogLS1pbi1yZXBseS10bz1NZXNzYWdlLUlkOjoKIAlNYWtlIHRoZSBmaXJzdCBtYWlsIChvciBhbGwgdGhlIG1haWxzIHdpdGggLS1uby10aHJlYWQpIGFwcGVhciBhcyBhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1nYy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1nYy50eHQKaW5kZXggYjI5MmU5OC4uZGNhYzhjOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dApAQCAtNjEsNyArNjEsNyBAQAogCiAtLXBydW5lPTxkYXRlPjo6CiAJUHJ1bmUgbG9vc2Ugb2JqZWN0cyBvbGRlciB0aGFuIGRhdGUgKGRlZmF1bHQgaXMgMiB3ZWVrcyBhZ28sCi0Jb3ZlcnJpZGVhYmxlIGJ5IHRoZSBjb25maWcgdmFyaWFibGUgYGdjLnBydW5lRXhwaXJlYCkuICBUaGlzCisJb3ZlcnJpZGFibGUgYnkgdGhlIGNvbmZpZyB2YXJpYWJsZSBgZ2MucHJ1bmVFeHBpcmVgKS4gIFRoaXMKIAlvcHRpb24gaXMgb24gYnkgZGVmYXVsdC4KIAogLS1uby1wcnVuZTo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CmluZGV4IGZjY2I4MmQuLmI3NTNjOWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CkBAIC0xMjIsNiArMTIyLDE0IEBACiAtPG51bT46OgogCUEgc2hvcnRjdXQgZm9yIHNwZWNpZnlpbmcgLUM8bnVtPi4KIAorLXA6OgorLS1zaG93LWZ1bmN0aW9uOjoKKwlTaG93IHRoZSBwcmVjZWRpbmcgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBuYW1lIG9mCisJdGhlIG1hdGNoLCB1bmxlc3MgdGhlIG1hdGNoaW5nIGxpbmUgaXMgYSBmdW5jdGlvbiBuYW1lIGl0c2VsZi4KKwlUaGUgbmFtZSBpcyBkZXRlcm1pbmVkIGluIHRoZSBzYW1lIHdheSBhcyAnZ2l0IGRpZmYnIHdvcmtzIG91dAorCXBhdGNoIGh1bmsgaGVhZGVycyAoc2VlICdEZWZpbmluZyBhIGN1c3RvbSBodW5rLWhlYWRlcicgaW4KKwlsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0pLgorCiAtZiA8ZmlsZT46OgogCVJlYWQgcGF0dGVybnMgZnJvbSA8ZmlsZT4sIG9uZSBwZXIgbGluZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQKaW5kZXggMzRjZjRlNS4uM2Q3OWRlMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0CkBAIC0zNyw4ICszNywxMiBAQAogCWFuZCA8dW50aWw+LCBzZWUgIlNQRUNJRllJTkcgUkVWSVNJT05TIiBzZWN0aW9uIGluCiAJbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdLgogCi0tLWRlY29yYXRlOjoKLQlQcmludCBvdXQgdGhlIHJlZiBuYW1lcyBvZiBhbnkgY29tbWl0cyB0aGF0IGFyZSBzaG93bi4KKy0tZGVjb3JhdGVbPXNob3J0fGZ1bGxdOjoKKwlQcmludCBvdXQgdGhlIHJlZiBuYW1lcyBvZiBhbnkgY29tbWl0cyB0aGF0IGFyZSBzaG93bi4gSWYgJ3Nob3J0JyBpcworCXNwZWNpZmllZCwgdGhlIHJlZiBuYW1lIHByZWZpeGVzICdyZWZzL2hlYWRzLycsICdyZWZzL3RhZ3MvJyBhbmQKKwkncmVmcy9yZW1vdGVzLycgd2lsbCBub3QgYmUgcHJpbnRlZC4gSWYgJ2Z1bGwnIGlzIHNwZWNpZmllZCwgdGhlCisJZnVsbCByZWYgbmFtZSAoaW5jbHVkaW5nIHByZWZpeCkgd2lsbCBiZSBwcmludGVkLiBUaGUgZGVmYXVsdCBvcHRpb24KKwlpcyAnc2hvcnQnLgogCiAtLXNvdXJjZTo6CiAJUHJpbnQgb3V0IHRoZSByZWYgbmFtZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGJ5IHdoaWNoIGVhY2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZXRvb2wudHh0CmluZGV4IGZmOTcwMGQuLjY4ZWQ2YzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLnR4dApAQCAtMjcsNyArMjcsNyBAQAogCVVzZSB0aGUgbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtIHNwZWNpZmllZCBieSA8dG9vbD4uCiAJVmFsaWQgbWVyZ2UgdG9vbHMgYXJlOgogCWtkaWZmMywgdGtkaWZmLCBtZWxkLCB4eGRpZmYsIGVtZXJnZSwgdmltZGlmZiwgZ3ZpbWRpZmYsIGVjbWVyZ2UsCi0JZGlmZnVzZSwgdG9ydG9pc2VtZXJnZSBhbmQgb3BlbmRpZmYKKwlkaWZmdXNlLCB0b3J0b2lzZW1lcmdlLCBvcGVuZGlmZiBhbmQgYXJheGlzLgogKwogSWYgYSBtZXJnZSByZXNvbHV0aW9uIHByb2dyYW0gaXMgbm90IHNwZWNpZmllZCwgJ2dpdC1tZXJnZXRvb2wnCiB3aWxsIHVzZSB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgbWVyZ2UudG9vbGAuICBJZiB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1rdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ta3RyZWUudHh0CmluZGV4IGFmMTlmMDYuLjgxZTMzMjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1rdHJlZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0cmVlLnR4dApAQCAtOCwxMiArOCwxMyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQgbWt0cmVlJyBbLXpdCisnZ2l0IG1rdHJlZScgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1SZWFkcyBzdGFuZGFyZCBpbnB1dCBpbiBub24tcmVjdXJzaXZlIGBscy10cmVlYCBvdXRwdXQgZm9ybWF0LAotYW5kIGNyZWF0ZXMgYSB0cmVlIG9iamVjdC4gIFRoZSBvYmplY3QgbmFtZSBvZiB0aGUgdHJlZSBvYmplY3QKK1JlYWRzIHN0YW5kYXJkIGlucHV0IGluIG5vbi1yZWN1cnNpdmUgYGxzLXRyZWVgIG91dHB1dCBmb3JtYXQsIGFuZCBjcmVhdGVzCithIHRyZWUgb2JqZWN0LiAgVGhlIG9yZGVyIG9mIHRoZSB0cmVlIGVudHJpZXMgaXMgbm9ybWFsaXNlZCBieSBta3RyZWUgc28KK3ByZS1zb3J0aW5nIHRoZSBpbnB1dCBpcyBub3QgcmVxdWlyZWQuICBUaGUgb2JqZWN0IG5hbWUgb2YgdGhlIHRyZWUgb2JqZWN0CiBidWlsdCBpcyB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAKIE9QVElPTlMKQEAgLTIxLDYgKzIyLDE4IEBACiAtejo6CiAJUmVhZCB0aGUgTlVMLXRlcm1pbmF0ZWQgYGxzLXRyZWUgLXpgIG91dHB1dCBpbnN0ZWFkLgogCistLW1pc3Npbmc6OgorCUFsbG93IG1pc3Npbmcgb2JqZWN0cy4gIFRoZSBkZWZhdWx0IGJlaGF2aW91ciAod2l0aG91dCB0aGlzIG9wdGlvbikKKwlpcyB0byB2ZXJpZnkgdGhhdCBlYWNoIHRyZWUgZW50cnkncyBzaGExIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcKKwlvYmplY3QuICBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSB0cmVhdG1lbnQgb2YgZ2l0bGluayBlbnRyaWVzCisJKGFrYSAic3VibW9kdWxlcyIpIHdoaWNoIGFyZSBhbHdheXMgYWxsb3dlZCB0byBiZSBtaXNzaW5nLgorCistLWJhdGNoOjoKKwlBbGxvdyBidWlsZGluZyBvZiBtb3JlIHRoYW4gb25lIHRyZWUgb2JqZWN0IGJlZm9yZSBleGl0aW5nLiAgRWFjaAorCXRyZWUgaXMgc2VwYXJhdGVkIGJ5IGFzIHNpbmdsZSBibGFuayBsaW5lLiBUaGUgZmluYWwgbmV3LWxpbmUgaXMKKwlvcHRpb25hbC4gIE5vdGUgLSBpZiB0aGUgJy16JyBvcHRpb24gaXMgdXNlZCwgbGluZXMgYXJlIHRlcm1pbmF0ZWQKKwl3aXRoIE5VTC4KKwogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stb2JqZWN0cy50eHQKaW5kZXggN2Q0YzFhNy4uMmU0OTkyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0CkBAIC0xMSw3ICsxMSw4IEBACiBbdmVyc2VdCiAnZ2l0IHBhY2stb2JqZWN0cycgWy1xXSBbLS1uby1yZXVzZS1kZWx0YV0gWy0tZGVsdGEtYmFzZS1vZmZzZXRdIFstLW5vbi1lbXB0eV0KIAlbLS1sb2NhbF0gWy0taW5jcmVtZW50YWxdIFstLXdpbmRvdz1OXSBbLS1kZXB0aD1OXSBbLS1hbGwtcHJvZ3Jlc3NdCi0JWy0tcmV2cyBbLS11bnBhY2tlZCB8IC0tYWxsXSpdIFstLXN0ZG91dCB8IGJhc2UtbmFtZV0gPCBvYmplY3QtbGlzdAorCVstLXJldnMgWy0tdW5wYWNrZWQgfCAtLWFsbF0qXSBbLS1zdGRvdXQgfCBiYXNlLW5hbWVdCisJWy0ta2VlcC10cnVlLXBhcmVudHNdIDwgb2JqZWN0LWxpc3QKIAogCiBERVNDUklQVElPTgpAQCAtMTk3LDYgKzE5OCwxMCBAQAogCXRvIGZvcmNlIHRoZSB2ZXJzaW9uIGZvciB0aGUgZ2VuZXJhdGVkIHBhY2sgaW5kZXgsIGFuZCB0byBmb3JjZQogCTY0LWJpdCBpbmRleCBlbnRyaWVzIG9uIG9iamVjdHMgbG9jYXRlZCBhYm92ZSB0aGUgZ2l2ZW4gb2Zmc2V0LgogCistLWtlZXAtdHJ1ZS1wYXJlbnRzOjoKKwlXaXRoIHRoaXMgb3B0aW9uLCBwYXJlbnRzIHRoYXQgYXJlIGhpZGRlbiBieSBncmFmdHMgYXJlIHBhY2tlZAorCW5ldmVydGhlbGVzcy4KKwogCiBBdXRob3IKIC0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGFyc2UtcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQKaW5kZXggY2Q0MzA2OS4uMzlkOWRhYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcGFyc2UtcmVtb3RlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXJzZS1yZW1vdGUudHh0CkBAIC0xNywyNiArMTcsNiBAQAogJEdJVF9ESVIvYnJhbmNoZXMvIGFuZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0aGF0IGFyZSByZWxhdGVkCiB0byBmZXRjaGluZywgcHVsbGluZyBhbmQgcHVzaGluZy4KIAotVGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGFyZToKLQotZ2V0X3JlbW90ZV9yZWZzX2Zvcl9mZXRjaDo6Ci0JR2l2ZW4gdGhlIGxpc3Qgb2YgdXNlci1zdXBwbGllZCBgPHJlcG8+IDxyZWZzcGVjPi4uLmAsCi0JcmV0dXJuIHRoZSBsaXN0IG9mIHJlZnMgdG8gZmV0Y2ggYWZ0ZXIgY2Fub25pY2FsaXppbmcKLQl0aGVtIGludG8gYCRHSVRfRElSYCByZWxhdGl2ZSBwYXRocwotCShlLmcuIGByZWZzL2hlYWRzL2Zvb2ApLiAgV2hlbiBgPHJlZnNwZWM+Li4uYCBpcyBlbXB0eQotCXRoZSByZXR1cm5lZCBsaXN0IG9mIHJlZnMgY29uc2lzdHMgb2YgdGhlIGRlZmF1bHRzCi0JZm9yIHRoZSBnaXZlbiBgPHJlcG8+YCwgaWYgc3BlY2lmaWVkIGluCi0JYCRHSVRfRElSL3JlbW90ZXMvYCwgYCRHSVRfRElSL2JyYW5jaGVzL2AsIG9yIGByZW1vdGUuKi5mZXRjaGAKLQljb25maWd1cmF0aW9uLgotCi1nZXRfcmVtb3RlX3JlZnNfZm9yX3B1c2g6OgotCUdpdmVuIHRoZSBsaXN0IG9mIHVzZXItc3VwcGxpZWQgYDxyZXBvPiA8cmVmc3BlYz4uLi5gLAotCXJldHVybiB0aGUgbGlzdCBvZiByZWZzIHRvIHB1c2ggaW4gYSBmb3JtIHN1aXRhYmxlIHRvIGJlCi0JZmVkIHRvIHRoZSAnZ2l0LXNlbmQtcGFjaycgY29tbWFuZC4gIFdoZW4gYDxyZWZzcGVjPi4uLmAKLQlpcyBlbXB0eSB0aGUgcmV0dXJuZWQgbGlzdCBvZiByZWZzIGNvbnNpc3RzIG9mIHRoZQotCWRlZmF1bHRzIGZvciB0aGUgZ2l2ZW4gYDxyZXBvPmAsIGlmIHNwZWNpZmllZCBpbgotCWAkR0lUX0RJUi9yZW1vdGVzL2AuCi0KIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dAppbmRleCBmZDUzYzQ5Li41OGQyYmQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dApAQCAtODUsNiArODUsMTEgQEAKIC0tZHJ5LXJ1bjo6CiAJRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgc2VuZCB0aGUgdXBkYXRlcy4KIAorLS1wb3JjZWxhaW46OgorCVByb2R1Y2UgbWFjaGluZS1yZWFkYWJsZSBvdXRwdXQuICBUaGUgb3V0cHV0IHN0YXR1cyBsaW5lIGZvciBlYWNoIHJlZgorCXdpbGwgYmUgdGFiLXNlcGFyYXRlZCBhbmQgc2VudCB0byBzdGRvdXQgaW5zdGVhZCBvZiBzdGRlcnIuICBUaGUgZnVsbAorCXN5bWJvbGljIG5hbWVzIG9mIHRoZSByZWZzIHdpbGwgYmUgZ2l2ZW4uCisKIC0tdGFnczo6CiAJQWxsIHJlZnMgdW5kZXIgYCRHSVRfRElSL3JlZnMvdGFnc2AgYXJlIHB1c2hlZCwgaW4KIAlhZGRpdGlvbiB0byByZWZzcGVjcyBleHBsaWNpdGx5IGxpc3RlZCBvbiB0aGUgY29tbWFuZApAQCAtMTQ4LDYgKzE1MywxMiBAQAogIDxmbGFnPiA8c3VtbWFyeT4gPGZyb20+IC0+IDx0bz4gKDxyZWFzb24+KQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitJZiAtLXBvcmNlbGFpbiBpcyB1c2VkLCB0aGVuIGVhY2ggbGluZSBvZiB0aGUgb3V0cHV0IGlzIG9mIHRoZSBmb3JtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgPGZsYWc+IFx0IDxmcm9tPjo8dG8+IFx0IDxzdW1tYXJ5PiAoPHJlYXNvbj4pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIGZsYWc6OgogCUEgc2luZ2xlIGNoYXJhY3RlciBpbmRpY2F0aW5nIHRoZSBzdGF0dXMgb2YgdGhlIHJlZi4gVGhpcyBpcwogCWJsYW5rIGZvciBhIHN1Y2Nlc3NmdWxseSBwdXNoZWQgcmVmLCBgIWAgZm9yIGEgcmVmIHRoYXQgd2FzCkBAIC0xODQsNiArMTk1LDkyIEBACiAJcmVmcywgbm8gZXhwbGFuYXRpb24gaXMgbmVlZGVkLiBGb3IgYSBmYWlsZWQgcmVmLCB0aGUgcmVhc29uIGZvcgogCWZhaWx1cmUgaXMgZGVzY3JpYmVkLgogCitOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGFuIHVwZGF0ZSBjaGFuZ2VzIGEgYnJhbmNoIChvciBtb3JlIGluIGdlbmVyYWwsIGEgcmVmKSB0aGF0IHVzZWQgdG8KK3BvaW50IGF0IGNvbW1pdCBBIHRvIHBvaW50IGF0IGFub3RoZXIgY29tbWl0IEIsIGl0IGlzIGNhbGxlZCBhCitmYXN0LWZvcndhcmQgdXBkYXRlIGlmIGFuZCBvbmx5IGlmIEIgaXMgYSBkZXNjZW5kYW50IG9mIEEuCisKK0luIGEgZmFzdC1mb3J3YXJkIHVwZGF0ZSBmcm9tIEEgdG8gQiwgdGhlIHNldCBvZiBjb21taXRzIHRoYXQgdGhlIG9yaWdpbmFsCitjb21taXQgQSBidWlsdCBvbiB0b3Agb2YgaXMgYSBzdWJzZXQgb2YgdGhlIGNvbW1pdHMgdGhlIG5ldyBjb21taXQgQgorYnVpbGRzIG9uIHRvcCBvZi4gIEhlbmNlLCBpdCBkb2VzIG5vdCBsb3NlIGFueSBoaXN0b3J5LgorCitJbiBjb250cmFzdCwgYSBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZSB3aWxsIGxvc2UgaGlzdG9yeS4gIEZvciBleGFtcGxlLAorc3VwcG9zZSB5b3UgYW5kIHNvbWVib2R5IGVsc2Ugc3RhcnRlZCBhdCB0aGUgc2FtZSBjb21taXQgWCwgYW5kIHlvdSBidWlsdAorYSBoaXN0b3J5IGxlYWRpbmcgdG8gY29tbWl0IEIgd2hpbGUgdGhlIG90aGVyIHBlcnNvbiBidWlsdCBhIGhpc3RvcnkKK2xlYWRpbmcgdG8gY29tbWl0IEEuICBUaGUgaGlzdG9yeSBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgQgorICAgICAvCisgLS0tWC0tLUEKKworLS0tLS0tLS0tLS0tLS0tLQorCitGdXJ0aGVyIHN1cHBvc2UgdGhhdCB0aGUgb3RoZXIgcGVyc29uIGFscmVhZHkgcHVzaGVkIGNoYW5nZXMgbGVhZGluZyB0byBBCitiYWNrIHRvIHRoZSBvcmlnaW5hbCByZXBvc2l0b3J5IHlvdSB0d28gb2J0YWluZWQgdGhlIG9yaWdpbmFsIGNvbW1pdCBYLgorCitUaGUgcHVzaCBkb25lIGJ5IHRoZSBvdGhlciBwZXJzb24gdXBkYXRlZCB0aGUgYnJhbmNoIHRoYXQgdXNlZCB0byBwb2ludCBhdAorY29tbWl0IFggdG8gcG9pbnQgYXQgY29tbWl0IEEuICBJdCBpcyBhIGZhc3QtZm9yd2FyZC4KKworQnV0IGlmIHlvdSB0cnkgdG8gcHVzaCwgeW91IHdpbGwgYXR0ZW1wdCB0byB1cGRhdGUgdGhlIGJyYW5jaCAodGhhdAorbm93IHBvaW50cyBhdCBBKSB3aXRoIGNvbW1pdCBCLiAgVGhpcyBkb2VzIF9ub3RfIGZhc3QtZm9yd2FyZC4gIElmIHlvdSBkaWQKK3NvLCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBBIHdpbGwgYmUgbG9zdCwgYmVjYXVzZSBldmVyeWJvZHkKK3dpbGwgbm93IHN0YXJ0IGJ1aWxkaW5nIG9uIHRvcCBvZiBCLgorCitUaGUgY29tbWFuZCBieSBkZWZhdWx0IGRvZXMgbm90IGFsbG93IGFuIHVwZGF0ZSB0aGF0IGlzIG5vdCBhIGZhc3QtZm9yd2FyZAordG8gcHJldmVudCBzdWNoIGxvc3Mgb2YgaGlzdG9yeS4KKworSWYgeW91IGRvIG5vdCB3YW50IHRvIGxvc2UgeW91ciB3b3JrIChoaXN0b3J5IGZyb20gWCB0byBCKSBub3IgdGhlIHdvcmsgYnkKK3RoZSBvdGhlciBwZXJzb24gKGhpc3RvcnkgZnJvbSBYIHRvIEEpLCB5b3Ugd291bGQgbmVlZCB0byBmaXJzdCBmZXRjaCB0aGUKK2hpc3RvcnkgZnJvbSB0aGUgcmVwb3NpdG9yeSwgY3JlYXRlIGEgaGlzdG9yeSB0aGF0IGNvbnRhaW5zIGNoYW5nZXMgZG9uZQorYnkgYm90aCBwYXJ0aWVzLCBhbmQgcHVzaCB0aGUgcmVzdWx0IGJhY2suCisKK1lvdSBjYW4gcGVyZm9ybSAiZ2l0IHB1bGwiLCByZXNvbHZlIHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCAiZ2l0IHB1c2giCit0aGUgcmVzdWx0LiAgQSAiZ2l0IHB1bGwiIHdpbGwgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IEMgYmV0d2VlbiBjb21taXRzIEEKK2FuZCBCLgorCistLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgIEItLS1DCisgICAgIC8gICAvCisgLS0tWC0tLUEKKworLS0tLS0tLS0tLS0tLS0tLQorCitVcGRhdGluZyBBIHdpdGggdGhlIHJlc3VsdGluZyBtZXJnZSBjb21taXQgd2lsbCBmYXN0LWZvcndhcmQgYW5kIHlvdXIKK3B1c2ggd2lsbCBiZSBhY2NlcHRlZC4KKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiByZWJhc2UgeW91ciBjaGFuZ2UgYmV0d2VlbiBYIGFuZCBCIG9uIHRvcCBvZiBBLAord2l0aCAiZ2l0IHB1bGwgLS1yZWJhc2UiLCBhbmQgcHVzaCB0aGUgcmVzdWx0IGJhY2suICBUaGUgcmViYXNlIHdpbGwKK2NyZWF0ZSBhIG5ldyBjb21taXQgRCB0aGF0IGJ1aWxkcyB0aGUgY2hhbmdlIGJldHdlZW4gWCBhbmQgQiBvbiB0b3Agb2YKK0EuCisKKy0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgQiAgIEQKKyAgICAgLyAgIC8KKyAtLS1YLS0tQQorCistLS0tLS0tLS0tLS0tLS0tCisKK0FnYWluLCB1cGRhdGluZyBBIHdpdGggdGhpcyBjb21taXQgd2lsbCBmYXN0LWZvcndhcmQgYW5kIHlvdXIgcHVzaCB3aWxsIGJlCithY2NlcHRlZC4KKworVGhlcmUgaXMgYW5vdGhlciBjb21tb24gc2l0dWF0aW9uIHdoZXJlIHlvdSBtYXkgZW5jb3VudGVyIG5vbi1mYXN0LWZvcndhcmQKK3JlamVjdGlvbiB3aGVuIHlvdSB0cnkgdG8gcHVzaCwgYW5kIGl0IGlzIHBvc3NpYmxlIGV2ZW4gd2hlbiB5b3UgYXJlCitwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5IG5vYm9keSBlbHNlIHB1c2hlcyBpbnRvLiBBZnRlciB5b3UgcHVzaCBjb21taXQKK0EgeW91cnNlbGYgKGluIHRoZSBmaXJzdCBwaWN0dXJlIGluIHRoaXMgc2VjdGlvbiksIHJlcGxhY2UgaXQgd2l0aCAiZ2l0Citjb21taXQgLS1hbWVuZCIgdG8gcHJvZHVjZSBjb21taXQgQiwgYW5kIHlvdSB0cnkgdG8gcHVzaCBpdCBvdXQsIGJlY2F1c2UKK2ZvcmdvdCB0aGF0IHlvdSBoYXZlIHB1c2hlZCBBIG91dCBhbHJlYWR5LiBJbiBzdWNoIGEgY2FzZSwgYW5kIG9ubHkgaWYKK3lvdSBhcmUgY2VydGFpbiB0aGF0IG5vYm9keSBpbiB0aGUgbWVhbnRpbWUgZmV0Y2hlZCB5b3VyIGVhcmxpZXIgY29tbWl0IEEKKyhhbmQgc3RhcnRlZCBidWlsZGluZyBvbiB0b3Agb2YgaXQpLCB5b3UgY2FuIHJ1biAiZ2l0IHB1c2ggLS1mb3JjZSIgdG8KK292ZXJ3cml0ZSBpdC4gSW4gb3RoZXIgd29yZHMsICJnaXQgcHVzaCAtLWZvcmNlIiBpcyBhIG1ldGhvZCByZXNlcnZlZCBmb3IKK2EgY2FzZSB3aGVyZSB5b3UgZG8gbWVhbiB0byBsb3NlIGhpc3RvcnkuCisKKwogRXhhbXBsZXMKIC0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0CmluZGV4IDNkNWEwNjYuLmRiMWI3MWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dApAQCAtMjMxLDEyICsyMzEsMTUgQEAKIAogLXMgPHN0cmF0ZWd5Pjo6CiAtLXN0cmF0ZWd5PTxzdHJhdGVneT46OgotCVVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3k7IGNhbiBiZSBzdXBwbGllZCBtb3JlIHRoYW4KLQlvbmNlIHRvIHNwZWNpZnkgdGhlbSBpbiB0aGUgb3JkZXIgdGhleSBzaG91bGQgYmUgdHJpZWQuCisJVXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneS4KIAlJZiB0aGVyZSBpcyBubyBgLXNgIG9wdGlvbiwgYSBidWlsdC1pbiBsaXN0IG9mIHN0cmF0ZWdpZXMKIAlpcyB1c2VkIGluc3RlYWQgKCdnaXQtbWVyZ2UtcmVjdXJzaXZlJyB3aGVuIG1lcmdpbmcgYSBzaW5nbGUKIAloZWFkLCAnZ2l0LW1lcmdlLW9jdG9wdXMnIG90aGVyd2lzZSkuICBUaGlzIGltcGxpZXMgLS1tZXJnZS4KIAorLXE6OgorLS1xdWlldDo6CisJQmUgcXVpZXQuIEltcGxpZXMgLS1uby1zdGF0LgorCiAtdjo6CiAtLXZlcmJvc2U6OgogCUJlIHZlcmJvc2UuIEltcGxpZXMgLS1zdGF0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGFjay50eHQKaW5kZXggYWFhODg1Mi4uYzkyNTdhMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0CkBAIC0zMSwxMSArMzEsMTQgQEAKIAlJbnN0ZWFkIG9mIGluY3JlbWVudGFsbHkgcGFja2luZyB0aGUgdW5wYWNrZWQgb2JqZWN0cywKIAlwYWNrIGV2ZXJ5dGhpbmcgcmVmZXJlbmNlZCBpbnRvIGEgc2luZ2xlIHBhY2suCiAJRXNwZWNpYWxseSB1c2VmdWwgd2hlbiBwYWNraW5nIGEgcmVwb3NpdG9yeSB0aGF0IGlzIHVzZWQKLQlmb3IgcHJpdmF0ZSBkZXZlbG9wbWVudCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byB3b3JyeQotCWFib3V0IHBlb3BsZSBmZXRjaGluZyB2aWEgZHVtYiBwcm90b2NvbHMgZnJvbSBpdC4gIFVzZQorCWZvciBwcml2YXRlIGRldmVsb3BtZW50LiBVc2UKIAl3aXRoICctZCcuICBUaGlzIHdpbGwgY2xlYW4gdXAgdGhlIG9iamVjdHMgdGhhdCBgZ2l0IHBydW5lYAogCWxlYXZlcyBiZWhpbmQsIGJ1dCBgZ2l0IGZzY2sgLS1mdWxsYCBzaG93cyBhcwogCWRhbmdsaW5nLgorKworTm90ZSB0aGF0IHVzZXJzIGZldGNoaW5nIG92ZXIgZHVtYiBwcm90b2NvbHMgd2lsbCBoYXZlIHRvIGZldGNoIHRoZQord2hvbGUgbmV3IHBhY2sgaW4gb3JkZXIgdG8gZ2V0IGFueSBjb250YWluZWQgb2JqZWN0LCBubyBtYXR0ZXIgaG93IG1hbnkKK290aGVyIG9iamVjdHMgaW4gdGhhdCBwYWNrIHRoZXkgYWxyZWFkeSBoYXZlIGxvY2FsbHkuCiAKIC1BOjoKIAlTYW1lIGFzIGAtYWAsIHVubGVzcyAnLWQnIGlzIHVzZWQuICBUaGVuIGFueSB1bnJlYWNoYWJsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVyZXJlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcmVyZS50eHQKaW5kZXggYTUzYzNjZC4uN2RkNTE1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVyZXJlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0CkBAIC0yMyw3ICsyMyw3IEBACiBoYW5kIHJlc29sdXRpb25zIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgYXV0b21lcmdlIHJlc3VsdHMuCiAKIFtOT1RFXQotWW91IG5lZWQgdG8gc2V0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHJlcmVyZS5lbmFibGVkIHRvCitZb3UgbmVlZCB0byBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgcmVyZXJlLmVuYWJsZWQgaW4gb3JkZXIgdG8KIGVuYWJsZSB0aGlzIGNvbW1hbmQuCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0CmluZGV4IGFlMTE4NmUuLjk3NGQ5ZjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQKQEAgLTE0LDYgKzE0LDcgQEAKIAkgICAgIFsgXC0tbWF4LWFnZT10aW1lc3RhbXAgXQogCSAgICAgWyBcLS1taW4tYWdlPXRpbWVzdGFtcCBdCiAJICAgICBbIFwtLXNwYXJzZSBdCisJICAgICBbIFwtLW1lcmdlcyBdCiAJICAgICBbIFwtLW5vLW1lcmdlcyBdCiAJICAgICBbIFwtLWZpcnN0LXBhcmVudCBdCiAJICAgICBbIFwtLXJlbW92ZS1lbXB0eSBdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dAppbmRleCA1MmMzNTNlLi44MjA0NWEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKQEAgLTMwLDYgKzMwLDE2IEBACiAJT25seSBtZWFuaW5nZnVsIGluIGAtLXBhcnNlb3B0YCBtb2RlLiBUZWxscyB0aGUgb3B0aW9uIHBhcnNlciB0byBlY2hvCiAJb3V0IHRoZSBmaXJzdCBgLS1gIG1ldCBpbnN0ZWFkIG9mIHNraXBwaW5nIGl0LgogCistLXN0b3AtYXQtbm9uLW9wdGlvbjo6CisJT25seSBtZWFuaW5nZnVsIGluIGAtLXBhcnNlb3B0YCBtb2RlLiAgTGV0cyB0aGUgb3B0aW9uIHBhcnNlciBzdG9wIGF0CisJdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHBhcnNlIHN1Yi1jb21tYW5kcworCXRoYXQgdGFrZSBvcHRpb25zIHRoZW1zZWxmLgorCistLXNxLXF1b3RlOjoKKwlVc2UgJ2dpdC1yZXYtcGFyc2UnIGluIHNoZWxsIHF1b3RpbmcgbW9kZSAoc2VlIFNRLVFVT1RFCisJc2VjdGlvbiBiZWxvdykuIEluIGNvbnRyYXN0IHRvIHRoZSBgLS1zcWAgb3B0aW9uIGJlbG93LCB0aGlzCisJbW9kZSBkb2VzIG9ubHkgcXVvdGluZy4gTm90aGluZyBlbHNlIGlzIGRvbmUgdG8gY29tbWFuZCBpbnB1dC4KKwogLS1yZXZzLW9ubHk6OgogCURvIG5vdCBvdXRwdXQgZmxhZ3MgYW5kIHBhcmFtZXRlcnMgbm90IG1lYW50IGZvcgogCSdnaXQtcmV2LWxpc3QnIGNvbW1hbmQuCkBAIC02NCw3ICs3NCw4IEBACiAJcHJvcGVybHkgcXVvdGVkIGZvciBjb25zdW1wdGlvbiBieSBzaGVsbC4gIFVzZWZ1bCB3aGVuCiAJeW91IGV4cGVjdCB5b3VyIHBhcmFtZXRlciB0byBjb250YWluIHdoaXRlc3BhY2VzIGFuZAogCW5ld2xpbmVzIChlLmcuIHdoZW4gdXNpbmcgcGlja2F4ZSBgLVNgIHdpdGgKLQknZ2l0LWRpZmYtXConKS4KKwknZ2l0LWRpZmYtXConKS4gSW4gY29udHJhc3QgdG8gdGhlIGAtLXNxLXF1b3RlYCBvcHRpb24sCisJdGhlIGNvbW1hbmQgaW5wdXQgaXMgc3RpbGwgaW50ZXJwcmV0ZWQgYXMgdXN1YWwuCiAKIC0tbm90OjoKIAlXaGVuIHNob3dpbmcgb2JqZWN0IG5hbWVzLCBwcmVmaXggdGhlbSB3aXRoICd7Y2FyZXR9JyBhbmQKQEAgLTQwNiw2ICs0MTcsMzMgQEAKIGV2YWwgYGVjaG8gIiRPUFRTX1NQRUMiIHwgZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tICIkQCIgfHwgZWNobyBleGl0ICQ/YAogLS0tLS0tLS0tLS0tCiAKK1NRLVFVT1RFCistLS0tLS0tLQorCitJbiBgLS1zcS1xdW90ZWAgbW9kZSwgJ2dpdC1yZXYtcGFyc2UnIGVjaG9lcyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0IGEKK3NpbmdsZSBsaW5lIHN1aXRhYmxlIGZvciBgc2goMSlgIGBldmFsYC4gVGhpcyBsaW5lIGlzIG1hZGUgYnkKK25vcm1hbGl6aW5nIHRoZSBhcmd1bWVudHMgZm9sbG93aW5nIGAtLXNxLXF1b3RlYC4gTm90aGluZyBvdGhlciB0aGFuCitxdW90aW5nIHRoZSBhcmd1bWVudHMgaXMgZG9uZS4KKworSWYgeW91IHdhbnQgY29tbWFuZCBpbnB1dCB0byBzdGlsbCBiZSBpbnRlcnByZXRlZCBhcyB1c3VhbCBieQorJ2dpdC1yZXYtcGFyc2UnIGJlZm9yZSB0aGUgb3V0cHV0IGlzIHNoZWxsIHF1b3RlZCwgc2VlIHRoZSBgLS1zcWAKK29wdGlvbi4KKworRXhhbXBsZQorfn5+fn5+fgorCistLS0tLS0tLS0tLS0KKyQgY2F0ID55b3VyLWdpdC1zY3JpcHQuc2ggPDxcRU9GCisjIS9iaW4vc2gKK2FyZ3M9JChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRAIikgICAjIHF1b3RlIHVzZXItc3VwcGxpZWQgYXJndW1lbnRzCitjb21tYW5kPSJnaXQgZnJvdHogLW4yNCAkYXJncyIgICAgICAgICAgIyBhbmQgdXNlIGl0IGluc2lkZSBhIGhhbmRjcmFmdGVkCisJCQkJCSMgY29tbWFuZCBsaW5lCitldmFsICIkY29tbWFuZCIKK0VPRgorCiskIHNoIHlvdXItZ2l0LXNjcmlwdC5zaCAiYSBiJ2MiCistLS0tLS0tLS0tLS0KKwogRVhBTVBMRVMKIC0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtZW1haWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKaW5kZXggYTI4MjE5MC4uZDZiMTkyYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKQEAgLTQzLDYgKzQzLDEwIEBACiBDb21wb3NpbmcKIH5+fn5+fn5+fgogCistLWFubm90YXRlOjoKKwlSZXZpZXcgYW5kIGVkaXQgZWFjaCBwYXRjaCB5b3UncmUgYWJvdXQgdG8gc2VuZC4gU2VlIHRoZQorCUNPTkZJR1VSQVRJT04gc2VjdGlvbiBmb3IgJ3NlbmRlbWFpbC5tdWx0aWVkaXQnLgorCiAtLWJjYz08YWRkcmVzcz46OgogCVNwZWNpZnkgYSAiQmNjOiIgdmFsdWUgZm9yIGVhY2ggZW1haWwuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mCiAJJ3NlbmRlbWFpbC5iY2MnLgpAQCAtNTUsMTEgKzU5LDYgQEAKICsKIFRoZSAtLWNjIG9wdGlvbiBtdXN0IGJlIHJlcGVhdGVkIGZvciBlYWNoIHVzZXIgeW91IHdhbnQgb24gdGhlIGNjIGxpc3QuCiAKLS0tYW5ub3RhdGU6OgotCVJldmlldyBlYWNoIHBhdGNoIHlvdSdyZSBhYm91dCB0byBzZW5kIGluIGFuIGVkaXRvci4gVGhlIHNldHRpbmcKLQknc2VuZGVtYWlsLm11bHRpZWRpdCcgZGVmaW5lcyBpZiB0aGlzIHdpbGwgc3Bhd24gb25lIGVkaXRvciBwZXIgcGF0Y2gKLQlvciBvbmUgZm9yIGFsbCBvZiB0aGVtIGF0IG9uY2UuCi0KIC0tY29tcG9zZTo6CiAJVXNlICRHSVRfRURJVE9SLCBjb3JlLmVkaXRvciwgJFZJU1VBTCwgb3IgJEVESVRPUiB0byBlZGl0IGFuCiAJaW50cm9kdWN0b3J5IG1lc3NhZ2UgZm9yIHRoZSBwYXRjaCBzZXJpZXMuCkBAIC03MSwxMSArNzAsMTYgQEAKIGFuZCBJbi1SZXBseS1UbyBoZWFkZXJzIHdpbGwgYmUgdXNlZCB1bmxlc3MgdGhleSBhcmUgcmVtb3ZlZC4KICsKIE1pc3NpbmcgRnJvbSBvciBJbi1SZXBseS1UbyBoZWFkZXJzIHdpbGwgYmUgcHJvbXB0ZWQgZm9yLgorKworU2VlIHRoZSBDT05GSUdVUkFUSU9OIHNlY3Rpb24gZm9yICdzZW5kZW1haWwubXVsdGllZGl0Jy4KIAogLS1mcm9tPTxhZGRyZXNzPjo6Ci0JU3BlY2lmeSB0aGUgc2VuZGVyIG9mIHRoZSBlbWFpbHMuICBUaGlzIHdpbGwgZGVmYXVsdCB0bwotCXRoZSB2YWx1ZSBHSVRfQ09NTUlUVEVSX0lERU5ULCBhcyByZXR1cm5lZCBieSAiZ2l0IHZhciAtbCIuCi0JVGhlIHVzZXIgd2lsbCBzdGlsbCBiZSBwcm9tcHRlZCB0byBjb25maXJtIHRoaXMgZW50cnkuCisJU3BlY2lmeSB0aGUgc2VuZGVyIG9mIHRoZSBlbWFpbHMuICBJZiBub3Qgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsCisJdGhlIHZhbHVlIG9mIHRoZSAnc2VuZGVtYWlsLmZyb20nIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHVzZWQuICBJZgorCW5laXRoZXIgdGhlIGNvbW1hbmQgbGluZSBvcHRpb24gbm9yICdzZW5kZW1haWwuZnJvbScgYXJlIHNldCwgdGhlbiB0aGUKKwl1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgZm9yIHRoZSB2YWx1ZS4gIFRoZSBkZWZhdWx0IGZvciB0aGUgcHJvbXB0IHdpbGwgYmUKKwl0aGUgdmFsdWUgb2YgR0lUX0FVVEhPUl9JREVOVCwgb3IgR0lUX0NPTU1JVFRFUl9JREVOVCBpZiB0aGF0IGlzIG5vdAorCXNldCwgYXMgcmV0dXJuZWQgYnkgImdpdCB2YXIgLWwiLgogCiAtLWluLXJlcGx5LXRvPTxpZGVudGlmaWVyPjo6CiAJU3BlY2lmeSB0aGUgY29udGVudHMgb2YgdGhlIGZpcnN0IEluLVJlcGx5LVRvIGhlYWRlci4KQEAgLTEzOSw3ICsxNDMsOSBAQAogLS1zbXRwLXNlcnZlci1wb3J0PTxwb3J0Pjo6CiAJU3BlY2lmaWVzIGEgcG9ydCBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCBwb3J0IChTTVRQCiAJc2VydmVycyB0eXBpY2FsbHkgbGlzdGVuIHRvIHNtdHAgcG9ydCAyNSBhbmQgc3NtdHAgcG9ydAotCTQ2NSkuIFRoaXMgY2FuIGJlIHNldCB3aXRoICdzZW5kZW1haWwuc210cHNlcnZlcnBvcnQnLgorCTQ2NSk7IHN5bWJvbGljIHBvcnQgbmFtZXMgKGUuZy4gInN1Ym1pc3Npb24iIGluc3RlYWQgb2YgNDY1KQorCWFyZSBhbHNvIGFjY2VwdGVkLiBUaGUgcG9ydCBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUKKwknc2VuZGVtYWlsLnNtdHBzZXJ2ZXJwb3J0JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgogCiAtLXNtdHAtc3NsOjoKIAlMZWdhY3kgYWxpYXMgZm9yICctLXNtdHAtZW5jcnlwdGlvbiBzc2wnLgpAQCAtMTU5LDcgKzE2NSw3IEBACiAJT3V0cHV0IG9mIHRoaXMgY29tbWFuZCBtdXN0IGJlIHNpbmdsZSBlbWFpbCBhZGRyZXNzIHBlciBsaW5lLgogCURlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuY2NjbWQnIGNvbmZpZ3VyYXRpb24gdmFsdWUuCiAKLS0tW25vLV1jaGFpbi1yZXBseS10bz08aWRlbnRpZmllcj46OgorLS1bbm8tXWNoYWluLXJlcGx5LXRvOjoKIAlJZiB0aGlzIGlzIHNldCwgZWFjaCBlbWFpbCB3aWxsIGJlIHNlbnQgYXMgYSByZXBseSB0byB0aGUgcHJldmlvdXMKIAllbWFpbCBzZW50LiAgSWYgZGlzYWJsZWQgd2l0aCAiLS1uby1jaGFpbi1yZXBseS10byIsIGFsbCBlbWFpbHMgYWZ0ZXIKIAl0aGUgZmlyc3Qgd2lsbCBiZSBzZW50IGFzIHJlcGxpZXMgdG8gdGhlIGZpcnN0IGVtYWlsIHNlbnQuICBXaGVuIHVzaW5nCkBAIC0xODcsMTIgKzE5MywxMiBAQAogLSAnc2VsZicgd2lsbCBhdm9pZCBpbmNsdWRpbmcgdGhlIHNlbmRlcgogLSAnY2MnIHdpbGwgYXZvaWQgaW5jbHVkaW5nIGFueW9uZSBtZW50aW9uZWQgaW4gQ2MgbGluZXMgaW4gdGhlIHBhdGNoIGhlYWRlcgogICBleGNlcHQgZm9yIHNlbGYgKHVzZSAnc2VsZicgZm9yIHRoYXQpLgotLSAnY2Nib2R5JyB3aWxsIGF2b2lkIGluY2x1ZGluZyBhbnlvbmUgbWVudGlvbmVkIGluIENjIGxpbmVzIGluIHRoZQorLSAnYm9keWNjJyB3aWxsIGF2b2lkIGluY2x1ZGluZyBhbnlvbmUgbWVudGlvbmVkIGluIENjIGxpbmVzIGluIHRoZQogICBwYXRjaCBib2R5IChjb21taXQgbWVzc2FnZSkgZXhjZXB0IGZvciBzZWxmICh1c2UgJ3NlbGYnIGZvciB0aGF0KS4KIC0gJ3NvYicgd2lsbCBhdm9pZCBpbmNsdWRpbmcgYW55b25lIG1lbnRpb25lZCBpbiBTaWduZWQtb2ZmLWJ5IGxpbmVzIGV4Y2VwdAogICAgZm9yIHNlbGYgKHVzZSAnc2VsZicgZm9yIHRoYXQpLgogLSAnY2NjbWQnIHdpbGwgYXZvaWQgcnVubmluZyB0aGUgLS1jYy1jbWQuCi0tICdib2R5JyBpcyBlcXVpdmFsZW50IHRvICdzb2InICsgJ2NjYm9keScKKy0gJ2JvZHknIGlzIGVxdWl2YWxlbnQgdG8gJ3NvYicgKyAnYm9keWNjJwogLSAnYWxsJyB3aWxsIHN1cHByZXNzIGFsbCBhdXRvIGNjIHZhbHVlcy4KIC0tCiArCkBAIC0yMDYsMTAgKzIxMiwyMiBAQAogCXZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvIC0tbm8tc3VwcHJlc3MtZnJvbS4KIAogLS1bbm8tXXRocmVhZDo6Ci0JSWYgdGhpcyBpcyBzZXQsIHRoZSBJbi1SZXBseS1UbyBoZWFkZXIgd2lsbCBiZSBzZXQgb24gZWFjaCBlbWFpbCBzZW50LgotCUlmIGRpc2FibGVkIHdpdGggIi0tbm8tdGhyZWFkIiwgbm8gZW1haWxzIHdpbGwgaGF2ZSB0aGUgSW4tUmVwbHktVG8KLQloZWFkZXIgc2V0LiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUgJ3NlbmRlbWFpbC50aHJlYWQnIGNvbmZpZ3VyYXRpb24KLQl2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAtLXRocmVhZC4KKwlJZiB0aGlzIGlzIHNldCwgdGhlIEluLVJlcGx5LVRvIGFuZCBSZWZlcmVuY2VzIGhlYWRlcnMgd2lsbCBiZQorCWFkZGVkIHRvIGVhY2ggZW1haWwgc2VudC4gIFdoZXRoZXIgZWFjaCBtYWlsIHJlZmVycyB0byB0aGUKKwlwcmV2aW91cyBlbWFpbCAoYGRlZXBgIHRocmVhZGluZyBwZXIgJ2dpdCBmb3JtYXQtcGF0Y2gnCisJd29yZGluZykgb3IgdG8gdGhlIGZpcnN0IGVtYWlsIChgc2hhbGxvd2AgdGhyZWFkaW5nKSBpcworCWdvdmVybmVkIGJ5ICItLVtuby1dY2hhaW4tcmVwbHktdG8iLgorKworSWYgZGlzYWJsZWQgd2l0aCAiLS1uby10aHJlYWQiLCB0aG9zZSBoZWFkZXJzIHdpbGwgbm90IGJlIGFkZGVkCisodW5sZXNzIHNwZWNpZmllZCB3aXRoIC0taW4tcmVwbHktdG8pLiAgRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgdGhlCisnc2VuZGVtYWlsLnRocmVhZCcgY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwKK2RlZmF1bHQgdG8gLS10aHJlYWQuCisrCitJdCBpcyB1cCB0byB0aGUgdXNlciB0byBlbnN1cmUgdGhhdCBubyBJbi1SZXBseS1UbyBoZWFkZXIgYWxyZWFkeQorZXhpc3RzIHdoZW4gJ2dpdCBzZW5kLWVtYWlsJyBpcyBhc2tlZCB0byBhZGQgaXQgKGVzcGVjaWFsbHkgbm90ZSB0aGF0CisnZ2l0IGZvcm1hdC1wYXRjaCcgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZG8gdGhlIHRocmVhZGluZyBpdHNlbGYpLgorRmFpbHVyZSB0byBkbyBzbyBtYXkgbm90IHByb2R1Y2UgdGhlIGV4cGVjdGVkIHJlc3VsdCBpbiB0aGUKK3JlY2lwaWVudCdzIE1VQS4KIAogCiBBZG1pbmlzdGVyaW5nCkBAIC0yMzQsNiArMjUyLDEyIEBACiAtLWRyeS1ydW46OgogCURvIGV2ZXJ5dGhpbmcgZXhjZXB0IGFjdHVhbGx5IHNlbmQgdGhlIGVtYWlscy4KIAorLS1bbm8tXWZvcm1hdC1wYXRjaDo6CisJV2hlbiBhbiBhcmd1bWVudCBtYXkgYmUgdW5kZXJzdG9vZCBlaXRoZXIgYXMgYSByZWZlcmVuY2Ugb3IgYXMgYSBmaWxlIG5hbWUsCisJY2hvb3NlIHRvIHVuZGVyc3RhbmQgaXQgYXMgYSBmb3JtYXQtcGF0Y2ggYXJndW1lbnQgKCctLWZvcm1hdC1wYXRjaCcpCisJb3IgYXMgYSBmaWxlIG5hbWUgKCctLW5vLWZvcm1hdC1wYXRjaCcpLiBCeSBkZWZhdWx0LCB3aGVuIHN1Y2ggYSBjb25mbGljdAorCW9jY3VycywgZ2l0IHNlbmQtZW1haWwgd2lsbCBmYWlsLgorCiAtLXF1aWV0OjoKIAlNYWtlIGdpdC1zZW5kLWVtYWlsIGxlc3MgdmVyYm9zZS4gIE9uZSBsaW5lIHBlciBlbWFpbCBzaG91bGQgYmUKIAlhbGwgdGhhdCBpcyBvdXRwdXQuCkBAIC0yNTAsMTIgKzI3NCw2IEBACiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLnZhbGlkYXRlJzsgaWYgdGhpcyBpcyBub3Qgc2V0LAogZGVmYXVsdCB0byAnLS12YWxpZGF0ZScuCiAKLS0tW25vLV1mb3JtYXQtcGF0Y2g6OgotCVdoZW4gYW4gYXJndW1lbnQgbWF5IGJlIHVuZGVyc3Rvb2QgZWl0aGVyIGFzIGEgcmVmZXJlbmNlIG9yIGFzIGEgZmlsZSBuYW1lLAotCWNob29zZSB0byB1bmRlcnN0YW5kIGl0IGFzIGEgZm9ybWF0LXBhdGNoIGFyZ3VtZW50ICgnLS1mb3JtYXQtcGF0Y2gnKQotCW9yIGFzIGEgZmlsZSBuYW1lICgnLS1uby1mb3JtYXQtcGF0Y2gnKS4gQnkgZGVmYXVsdCwgd2hlbiBzdWNoIGEgY29uZmxpY3QKLQlvY2N1cnMsIGdpdCBzZW5kLWVtYWlsIHdpbGwgZmFpbC4KLQogCiBDT05GSUdVUkFUSU9OCiAtLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQKaW5kZXggNTFhNGU5ZC4uODllYzUzNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctYnJhbmNoLnR4dApAQCAtOCw5ICs4LDExIEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgc2hvdy1icmFuY2gnIFstLWFsbF0gWy0tcmVtb3Rlc10gWy0tdG9wby1vcmRlcl0gWy0tY3VycmVudF0KKydnaXQgc2hvdy1icmFuY2gnIFstLWFsbF0gWy0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl0KKwkJWy0tY3VycmVudF0gWy0tY29sb3IgfCAtLW5vLWNvbG9yXQogCQlbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdCi0JCVstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbPHJldj4gfCA8Z2xvYj5dLi4uCisJCVstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXQorCQlbPHJldj4gfCA8Z2xvYj5dLi4uCiAnZ2l0IHNob3ctYnJhbmNoJyAoLWd8LS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0KIAogREVTQ1JJUFRJT04KQEAgLTU3LDYgKzU5LDExIEBACiAgICAgICAgIGFwcGVhciBpbiB0b3BvbG9naWNhbCBvcmRlciAoaS5lLiwgZGVzY2VuZGFudCBjb21taXRzCiAgICAgICAgIGFyZSBzaG93biBiZWZvcmUgdGhlaXIgcGFyZW50cykuCiAKKy0tZGF0ZS1vcmRlcjo6CisJVGhpcyBvcHRpb24gaXMgc2ltaWxhciB0byAnLS10b3BvLW9yZGVyJyBpbiB0aGUgc2Vuc2UgdGhhdCBubworCXBhcmVudCBjb21lcyBiZWZvcmUgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYnV0IG90aGVyd2lzZSBjb21taXRzCisJYXJlIG9yZGVyZWQgYWNjb3JkaW5nIHRvIHRoZWlyIGNvbW1pdCBkYXRlLgorCiAtLXNwYXJzZTo6CiAJQnkgZGVmYXVsdCwgdGhlIG91dHB1dCBvbWl0cyBtZXJnZXMgdGhhdCBhcmUgcmVhY2hhYmxlCiAJZnJvbSBvbmx5IG9uZSB0aXAgYmVpbmcgc2hvd24uICBUaGlzIG9wdGlvbiBtYWtlcyB0aGVtCkBAIC0xMDcsNiArMTE0LDE0IEBACiAJV2hlbiBubyBleHBsaWNpdCA8cmVmPiBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvIHRoZQogCWN1cnJlbnQgYnJhbmNoIChvciBgSEVBRGAgaWYgaXQgaXMgZGV0YWNoZWQpLgogCistLWNvbG9yOjoKKwlDb2xvciB0aGUgc3RhdHVzIHNpZ24gKG9uZSBvZiB0aGVzZTogYCpgIGAhYCBgK2AgYC1gKSBvZiBlYWNoIGNvbW1pdAorCWNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCBpdCdzIGluLgorCistLW5vLWNvbG9yOjoKKwlUdXJuIG9mZiBjb2xvcmVkIG91dHB1dCwgZXZlbiB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZ2l2ZXMgdGhlCisJZGVmYXVsdCB0byBjb2xvciBvdXRwdXQuCisKIE5vdGUgdGhhdCAtLW1vcmUsIC0tbGlzdCwgLS1pbmRlcGVuZGVudCBhbmQgLS1tZXJnZS1iYXNlIG9wdGlvbnMKIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dAppbmRleCA5OGUyOTRhLi5mNDQyOWJkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LXJlZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1yZWYudHh0CkBAIC05LDggKzksOSBAQAogLS0tLS0tLS0KIFt2ZXJzZV0KICdnaXQgc2hvdy1yZWYnIFstcXwtLXF1aWV0XSBbLS12ZXJpZnldIFstaHwtLWhlYWRdIFstZHwtLWRlcmVmZXJlbmNlXQotCSAgICAgWy1zfC0taGFzaF0gWy0tYWJicmV2XSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSA8cGF0dGVybj4uLi4KLSdnaXQgc2hvdy1yZWYnIC0tZXhjbHVkZS1leGlzdGluZ1s9cGF0dGVybl0KKwkgICAgIFstc3wtLWhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10KKwkgICAgIFstLWhlYWRzXSBbLS1dIDxwYXR0ZXJuPi4uLgorJ2dpdCBzaG93LXJlZicgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIDwgcmVmLWxpc3QKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC00OCw3ICs0OSw3IEBACiAJYXBwZW5kZWQuCiAKIC1zOjoKLS0taGFzaDo6CistLWhhc2hbPTxuPl06OgogCiAJT25seSBzaG93IHRoZSBTSEExIGhhc2gsIG5vdCB0aGUgcmVmZXJlbmNlIG5hbWUuIFdoZW4gY29tYmluZWQgd2l0aAogCS0tZGVyZWZlcmVuY2UgdGhlIGRlcmVmZXJlbmNlZCB0YWcgd2lsbCBzdGlsbCBiZSBzaG93biBhZnRlciB0aGUgU0hBMS4KQEAgLTU5LDExICs2MCwxMCBAQAogCUFzaWRlIGZyb20gcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgb2YgMSwgaXQgd2lsbCBhbHNvIHByaW50IGFuIGVycm9yCiAJbWVzc2FnZSBpZiAnLS1xdWlldCcgd2FzIG5vdCBzcGVjaWZpZWQuCiAKLS0tYWJicmV2OjoKLS0tYWJicmV2PWxlbjo6CistLWFiYnJldls9PG4+XTo6CiAKIAlBYmJyZXZpYXRlIHRoZSBvYmplY3QgbmFtZS4gIFdoZW4gdXNpbmcgYC0taGFzaGAsIHlvdSBkbwotCW5vdCBoYXZlIHRvIHNheSBgLS1oYXNoIC0tYWJicmV2YDsgYC0taGFzaD1sZW5gIHdvdWxkIGRvLgorCW5vdCBoYXZlIHRvIHNheSBgLS1oYXNoIC0tYWJicmV2YDsgYC0taGFzaD1uYCB3b3VsZCBkby4KIAogLXE6OgogLS1xdWlldDo6CkBAIC03MSw4ICs3MSw3IEBACiAJRG8gbm90IHByaW50IGFueSByZXN1bHRzIHRvIHN0ZG91dC4gV2hlbiBjb21iaW5lZCB3aXRoICctLXZlcmlmeScgdGhpcwogCWNhbiBiZSB1c2VkIHRvIHNpbGVudGx5IGNoZWNrIGlmIGEgcmVmZXJlbmNlIGV4aXN0cy4KIAotLS1leGNsdWRlLWV4aXN0aW5nOjoKLS0tZXhjbHVkZS1leGlzdGluZz1wYXR0ZXJuOjoKKy0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XTo6CiAKIAlNYWtlICdnaXQtc2hvdy1yZWYnIGFjdCBhcyBhIGZpbHRlciB0aGF0IHJlYWRzIHJlZnMgZnJvbSBzdGRpbiBvZiB0aGUKIAlmb3JtICJeKD86PGFueXRoaW5nPlxzKT88cmVmbmFtZT4oPzpcXlx7XH0pPyQiIGFuZCBwZXJmb3JtcyB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dAppbmRleCAxY2MyNGNjLi4xYzY0YTAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zdGFzaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0CkBAIC05LDEwICs5LDExIEBACiAtLS0tLS0tLQogW3ZlcnNlXQogJ2dpdCBzdGFzaCcgbGlzdCBbPG9wdGlvbnM+XQotJ2dpdCBzdGFzaCcgKHNob3cgfCBkcm9wIHwgcG9wICkgWzxzdGFzaD5dCi0nZ2l0IHN0YXNoJyBhcHBseSBbLS1pbmRleF0gWzxzdGFzaD5dCisnZ2l0IHN0YXNoJyBzaG93IFs8c3Rhc2g+XQorJ2dpdCBzdGFzaCcgZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dCisnZ2l0IHN0YXNoJyAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KICdnaXQgc3Rhc2gnIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dCi0nZ2l0IHN0YXNoJyBbc2F2ZSBbLS1rZWVwLWluZGV4XSBbPG1lc3NhZ2U+XV0KKydnaXQgc3Rhc2gnIFtzYXZlIFstLWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XSBbPG1lc3NhZ2U+XV0KICdnaXQgc3Rhc2gnIGNsZWFyCiAnZ2l0IHN0YXNoJyBjcmVhdGUKIApAQCAtNDEsNyArNDIsNyBAQAogT1BUSU9OUwogLS0tLS0tLQogCi1zYXZlIFstLWtlZXAtaW5kZXhdIFs8bWVzc2FnZT5dOjoKK3NhdmUgWy0ta2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdIFs8bWVzc2FnZT5dOjoKIAogCVNhdmUgeW91ciBsb2NhbCBtb2RpZmljYXRpb25zIHRvIGEgbmV3ICdzdGFzaCcsIGFuZCBydW4gYGdpdCByZXNldAogCS0taGFyZGAgdG8gcmV2ZXJ0IHRoZW0uICBUaGlzIGlzIHRoZSBkZWZhdWx0IGFjdGlvbiB3aGVuIG5vCkBAIC03NSw3ICs3Niw3IEBACiAJaXQgd2lsbCBhY2NlcHQgYW55IGZvcm1hdCBrbm93biB0byAnZ2l0LWRpZmYnIChlLmcuLCBgZ2l0IHN0YXNoIHNob3cKIAktcCBzdGFzaEBcezF9YCB0byB2aWV3IHRoZSBzZWNvbmQgbW9zdCByZWNlbnQgc3Rhc2ggaW4gcGF0Y2ggZm9ybSkuCiAKLXBvcCBbPHN0YXNoPl06OgorcG9wIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dOjoKIAogCVJlbW92ZSBhIHNpbmdsZSBzdGFzaGVkIHN0YXRlIGZyb20gdGhlIHN0YXNoIGxpc3QgYW5kIGFwcGx5IGl0CiAJb24gdG9wIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgdHJlZSBzdGF0ZSwgaS5lLiwgZG8gdGhlIGludmVyc2UKQEAgLTg2LDE2ICs4NywxNiBAQAogcmVtb3ZlZCBmcm9tIHRoZSBzdGFzaCBsaXN0LiBZb3UgbmVlZCB0byByZXNvbHZlIHRoZSBjb25mbGljdHMgYnkgaGFuZAogYW5kIGNhbGwgYGdpdCBzdGFzaCBkcm9wYCBtYW51YWxseSBhZnRlcndhcmRzLgogKwotV2hlbiBubyBgPHN0YXNoPmAgaXMgZ2l2ZW4sIGBzdGFzaEBcezB9YCBpcyBhc3N1bWVkLiBTZWUgYWxzbyBgYXBwbHlgLgotCi1hcHBseSBbLS1pbmRleF0gWzxzdGFzaD5dOjoKLQotCUxpa2UgYHBvcGAsIGJ1dCBkbyBub3QgcmVtb3ZlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzdGFzaCBsaXN0LgotKwogSWYgdGhlIGAtLWluZGV4YCBvcHRpb24gaXMgdXNlZCwgdGhlbiB0cmllcyB0byByZWluc3RhdGUgbm90IG9ubHkgdGhlIHdvcmtpbmcKIHRyZWUncyBjaGFuZ2VzLCBidXQgYWxzbyB0aGUgaW5kZXgncyBvbmVzLiBIb3dldmVyLCB0aGlzIGNhbiBmYWlsLCB3aGVuIHlvdQogaGF2ZSBjb25mbGljdHMgKHdoaWNoIGFyZSBzdG9yZWQgaW4gdGhlIGluZGV4LCB3aGVyZSB5b3UgdGhlcmVmb3JlIGNhbiBubwogbG9uZ2VyIGFwcGx5IHRoZSBjaGFuZ2VzIGFzIHRoZXkgd2VyZSBvcmlnaW5hbGx5KS4KKysKK1doZW4gbm8gYDxzdGFzaD5gIGlzIGdpdmVuLCBgc3Rhc2hAXHswfWAgaXMgYXNzdW1lZC4KKworYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl06OgorCisJTGlrZSBgcG9wYCwgYnV0IGRvIG5vdCByZW1vdmUgdGhlIHN0YXRlIGZyb20gdGhlIHN0YXNoIGxpc3QuCiAKIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dOjoKIApAQCAtMTE1LDcgKzExNiw3IEBACiAJUmVtb3ZlIGFsbCB0aGUgc3Rhc2hlZCBzdGF0ZXMuIE5vdGUgdGhhdCB0aG9zZSBzdGF0ZXMgd2lsbCB0aGVuCiAJYmUgc3ViamVjdCB0byBwcnVuaW5nLCBhbmQgbWF5IGJlIGRpZmZpY3VsdCBvciBpbXBvc3NpYmxlIHRvIHJlY292ZXIuCiAKLWRyb3AgWzxzdGFzaD5dOjoKK2Ryb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XTo6CiAKIAlSZW1vdmUgYSBzaW5nbGUgc3Rhc2hlZCBzdGF0ZSBmcm9tIHRoZSBzdGFzaCBsaXN0LiBXaGVuIG5vIGA8c3Rhc2g+YAogCWlzIGdpdmVuLCBpdCByZW1vdmVzIHRoZSBsYXRlc3Qgb25lLiBpLmUuIGBzdGFzaEBcezB9YApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQKaW5kZXggMTViMzRkMy4uN2RkNzNhZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0CkBAIC05LDExICs5LDEzIEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gYWRkIFstYiBicmFuY2hdIFstLV0gPHJlcG9zaXRvcnk+IDxwYXRoPgorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBhZGQgWy1iIGJyYW5jaF0KKwkgICAgICBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1dIDxyZXBvc2l0b3J5PiA8cGF0aD4KICdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3RhdHVzIFstLWNhY2hlZF0gWy0tXSBbPHBhdGg+Li4uXQogJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBpbml0IFstLV0gWzxwYXRoPi4uLl0KLSdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gdXBkYXRlIFstLWluaXRdIFstTnwtLW5vLWZldGNoXSBbLS1dIFs8cGF0aD4uLi5dCi0nZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHN1bW1hcnkgWy0tc3VtbWFyeS1saW1pdCA8bj5dIFtjb21taXRdIFstLV0gWzxwYXRoPi4uLl0KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gdXBkYXRlIFstLWluaXRdIFstTnwtLW5vLWZldGNoXSBbLS1yZWJhc2VdCisJICAgICAgWy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pl0gWy0tbWVyZ2VdIFstLV0gWzxwYXRoPi4uLl0KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3VtbWFyeSBbLS1jYWNoZWRdIFstLXN1bW1hcnktbGltaXQgPG4+XSBbY29tbWl0XSBbLS1dIFs8cGF0aD4uLi5dCiAnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGZvcmVhY2ggPGNvbW1hbmQ+CiAnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHN5bmMgWy0tXSBbPHBhdGg+Li4uXQogCkBAIC0xMTMsNyArMTE1LDkgQEAKIHVwZGF0ZTo6CiAJVXBkYXRlIHRoZSByZWdpc3RlcmVkIHN1Ym1vZHVsZXMsIGkuZS4gY2xvbmUgbWlzc2luZyBzdWJtb2R1bGVzIGFuZAogCWNoZWNrb3V0IHRoZSBjb21taXQgc3BlY2lmaWVkIGluIHRoZSBpbmRleCBvZiB0aGUgY29udGFpbmluZyByZXBvc2l0b3J5LgotCVRoaXMgd2lsbCBtYWtlIHRoZSBzdWJtb2R1bGVzIEhFQUQgYmUgZGV0YWNoZWQuCisJVGhpcyB3aWxsIG1ha2UgdGhlIHN1Ym1vZHVsZXMgSEVBRCBiZSBkZXRhY2hlZCB1bmxlc3MgJy0tcmViYXNlJyBvcgorCSctLW1lcmdlJyBpcyBzcGVjaWZpZWQgb3IgdGhlIGtleSBgc3VibW9kdWxlLiRuYW1lLnVwZGF0ZWAgaXMgc2V0IHRvCisJYHJlYmFzZWAgb3IgYG1lcmdlYC4KICsKIElmIHRoZSBzdWJtb2R1bGUgaXMgbm90IHlldCBpbml0aWFsaXplZCwgYW5kIHlvdSBqdXN0IHdhbnQgdG8gdXNlIHRoZQogc2V0dGluZyBhcyBzdG9yZWQgaW4gLmdpdG1vZHVsZXMsIHlvdSBjYW4gYXV0b21hdGljYWxseSBpbml0aWFsaXplIHRoZQpAQCAtMTc4LDYgKzE4MiwzMyBAQAogCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KIAlEb24ndCBmZXRjaCBuZXcgb2JqZWN0cyBmcm9tIHRoZSByZW1vdGUgc2l0ZS4KIAorLS1tZXJnZTo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLgorCU1lcmdlIHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaAorCW9mIHRoZSBzdWJtb2R1bGUuIElmIHRoaXMgb3B0aW9uIGlzIGdpdmVuLCB0aGUgc3VibW9kdWxlJ3MgSEVBRCB3aWxsCisJbm90IGJlIGRldGFjaGVkLiBJZiBhIG1lcmdlIGZhaWx1cmUgcHJldmVudHMgdGhpcyBwcm9jZXNzLCB5b3Ugd2lsbAorCWhhdmUgdG8gcmVzb2x2ZSB0aGUgcmVzdWx0aW5nIGNvbmZsaWN0cyB3aXRoaW4gdGhlIHN1Ym1vZHVsZSB3aXRoIHRoZQorCXVzdWFsIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMuCisJSWYgdGhlIGtleSBgc3VibW9kdWxlLiRuYW1lLnVwZGF0ZWAgaXMgc2V0IHRvIGBtZXJnZWAsIHRoaXMgb3B0aW9uIGlzCisJaW1wbGljaXQuCisKKy0tcmViYXNlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuCisJUmViYXNlIHRoZSBjdXJyZW50IGJyYW5jaCBvbnRvIHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlCisJc3VwZXJwcm9qZWN0LiBJZiB0aGlzIG9wdGlvbiBpcyBnaXZlbiwgdGhlIHN1Ym1vZHVsZSdzIEhFQUQgd2lsbCBub3QKKwliZSBkZXRhY2hlZC4gSWYgYSBhIG1lcmdlIGZhaWx1cmUgcHJldmVudHMgdGhpcyBwcm9jZXNzLCB5b3Ugd2lsbCBoYXZlCisJdG8gcmVzb2x2ZSB0aGVzZSBmYWlsdXJlcyB3aXRoIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXS4KKwlJZiB0aGUga2V5IGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCBpcyBzZXQgdG8gYHJlYmFzZWAsIHRoaXMgb3B0aW9uIGlzCisJaW1wbGljaXQuCisKKy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pjo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYWRkIGFuZCB1cGRhdGUgY29tbWFuZHMuICBUaGVzZQorCWNvbW1hbmRzIHNvbWV0aW1lcyBuZWVkIHRvIGNsb25lIGEgcmVtb3RlIHJlcG9zaXRvcnkuIEluIHRoaXMgY2FzZSwKKwl0aGlzIG9wdGlvbiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbGlua2dpdDpnaXQtY2xvbmVbMV0gY29tbWFuZC4KKysKKypOT1RFKjogRG8gKm5vdCogdXNlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgaGF2ZSByZWFkIHRoZSBub3RlCitmb3IgbGlua2dpdDpnaXQtY2xvbmVbMV0ncyAtLXJlZmVyZW5jZSBhbmQgLS1zaGFyZWQgb3B0aW9ucyBjYXJlZnVsbHkuCisKIDxwYXRoPi4uLjo6CiAJUGF0aHMgdG8gc3VibW9kdWxlKHMpLiBXaGVuIHNwZWNpZmllZCB0aGlzIHdpbGwgcmVzdHJpY3QgdGhlIGNvbW1hbmQKIAl0byBvbmx5IG9wZXJhdGUgb24gdGhlIHN1Ym1vZHVsZXMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBwYXRocy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0CmluZGV4IDc0YmU4NDMuLjIyYTAzODkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LXN2biAtIEJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBzaW5nbGUgU3VidmVyc2lvbiBicmFuY2ggYW5kIGdpdAorZ2l0LXN2biAtIEJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIGdpdAogCiBTWU5PUFNJUwogLS0tLS0tLS0KQEAgLTExLDI3ICsxMSwyNSBAQAogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLSdnaXQtc3ZuJyBpcyBhIHNpbXBsZSBjb25kdWl0IGZvciBjaGFuZ2VzZXRzIGJldHdlZW4gU3VidmVyc2lvbiBhbmQgZ2l0LgorJ2dpdCBzdm4nIGlzIGEgc2ltcGxlIGNvbmR1aXQgZm9yIGNoYW5nZXNldHMgYmV0d2VlbiBTdWJ2ZXJzaW9uIGFuZCBnaXQuCiBJdCBwcm92aWRlcyBhIGJpZGlyZWN0aW9uYWwgZmxvdyBvZiBjaGFuZ2VzIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIGFuZCBhIGdpdAogcmVwb3NpdG9yeS4KIAotJ2dpdC1zdm4nIGNhbiB0cmFjayBhIHNpbmdsZSBTdWJ2ZXJzaW9uIGJyYW5jaCBzaW1wbHkgYnkgdXNpbmcgYQotVVJMIHRvIHRoZSBicmFuY2gsIGZvbGxvdyBicmFuY2hlcyBsYWlkIG91dCBpbiB0aGUgU3VidmVyc2lvbiByZWNvbW1lbmRlZAotbWV0aG9kICh0cnVuaywgYnJhbmNoZXMsIHRhZ3MgZGlyZWN0b3JpZXMpIHdpdGggdGhlIC0tc3RkbGF5b3V0IG9wdGlvbiwgb3IKLWZvbGxvdyBicmFuY2hlcyBpbiBhbnkgbGF5b3V0IHdpdGggdGhlIC1ULy10Ly1iIG9wdGlvbnMgKHNlZSBvcHRpb25zIHRvCi0naW5pdCcgYmVsb3csIGFuZCBhbHNvIHRoZSAnY2xvbmUnIGNvbW1hbmQpLgorJ2dpdCBzdm4nIGNhbiB0cmFjayBhIHN0YW5kYXJkIFN1YnZlcnNpb24gcmVwb3NpdG9yeSwKK2ZvbGxvd2luZyB0aGUgY29tbW9uICJ0cnVuay9icmFuY2hlcy90YWdzIiBsYXlvdXQsIHdpdGggdGhlIC0tc3RkbGF5b3V0IG9wdGlvbi4KK0l0IGNhbiBhbHNvIGZvbGxvdyBicmFuY2hlcyBhbmQgdGFncyBpbiBhbnkgbGF5b3V0IHdpdGggdGhlIC1ULy10Ly1iIG9wdGlvbnMKKyhzZWUgb3B0aW9ucyB0byAnaW5pdCcgYmVsb3csIGFuZCBhbHNvIHRoZSAnY2xvbmUnIGNvbW1hbmQpLgogCi1PbmNlIHRyYWNraW5nIGEgU3VidmVyc2lvbiBicmFuY2ggKHdpdGggYW55IG9mIHRoZSBhYm92ZSBtZXRob2RzKSwgdGhlIGdpdAorT25jZSB0cmFja2luZyBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSAod2l0aCBhbnkgb2YgdGhlIGFib3ZlIG1ldGhvZHMpLCB0aGUgZ2l0CiByZXBvc2l0b3J5IGNhbiBiZSB1cGRhdGVkIGZyb20gU3VidmVyc2lvbiBieSB0aGUgJ2ZldGNoJyBjb21tYW5kIGFuZAogU3VidmVyc2lvbiB1cGRhdGVkIGZyb20gZ2l0IGJ5IHRoZSAnZGNvbW1pdCcgY29tbWFuZC4KIAogQ09NTUFORFMKIC0tLS0tLS0tCi0tLQogCiAnaW5pdCc6OgogCUluaXRpYWxpemVzIGFuIGVtcHR5IGdpdCByZXBvc2l0b3J5IHdpdGggYWRkaXRpb25hbAotCW1ldGFkYXRhIGRpcmVjdG9yaWVzIGZvciAnZ2l0LXN2bicuICBUaGUgU3VidmVyc2lvbiBVUkwKKwltZXRhZGF0YSBkaXJlY3RvcmllcyBmb3IgJ2dpdCBzdm4nLiAgVGhlIFN1YnZlcnNpb24gVVJMCiAJbWF5IGJlIHNwZWNpZmllZCBhcyBhIGNvbW1hbmQtbGluZSBhcmd1bWVudCwgb3IgYXMgZnVsbAogCVVSTCBhcmd1bWVudHMgdG8gLVQvLXQvLWIuICBPcHRpb25hbGx5LCB0aGUgdGFyZ2V0CiAJZGlyZWN0b3J5IHRvIG9wZXJhdGUgb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIHNlY29uZApAQCAtNDgsOCArNDYsMTEgQEAKIC0tc3RkbGF5b3V0OzsKIAlUaGVzZSBhcmUgb3B0aW9uYWwgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGluaXQuICBFYWNoIG9mCiAJdGhlc2UgZmxhZ3MgY2FuIHBvaW50IHRvIGEgcmVsYXRpdmUgcmVwb3NpdG9yeSBwYXRoCi0JKC0tdGFncz1wcm9qZWN0L3RhZ3MnKSBvciBhIGZ1bGwgdXJsCi0JKC0tdGFncz1odHRwczovL2Zvby5vcmcvcHJvamVjdC90YWdzKS4gVGhlIG9wdGlvbiAtLXN0ZGxheW91dCBpcworCSgtLXRhZ3M9cHJvamVjdC90YWdzKSBvciBhIGZ1bGwgdXJsCisJKC0tdGFncz1odHRwczovL2Zvby5vcmcvcHJvamVjdC90YWdzKS4KKwlZb3UgY2FuIHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLXRhZ3MgYW5kL29yIC0tYnJhbmNoZXMgb3B0aW9ucywgaW4gY2FzZQorCXlvdXIgU3VidmVyc2lvbiByZXBvc2l0b3J5IHBsYWNlcyB0YWdzIG9yIGJyYW5jaGVzIHVuZGVyIG11bHRpcGxlIHBhdGhzLgorCVRoZSBvcHRpb24gLS1zdGRsYXlvdXQgaXMKIAlhIHNob3J0aGFuZCB3YXkgb2Ygc2V0dGluZyB0cnVuayx0YWdzLGJyYW5jaGVzIGFzIHRoZSByZWxhdGl2ZSBwYXRocywKIAl3aGljaCBpcyB0aGUgU3VidmVyc2lvbiBkZWZhdWx0LiBJZiBhbnkgb2YgdGhlIG90aGVyIG9wdGlvbnMgYXJlIGdpdmVuCiAJYXMgd2VsbCwgdGhleSB0YWtlIHByZWNlZGVuY2UuCkBAIC02MSwxNiArNjIsNiBAQAogCVNldCB0aGUgJ3VzZVN2bnN5bmNQcm9wcycgb3B0aW9uIGluIHRoZSBbc3ZuLXJlbW90ZV0gY29uZmlnLgogLS1yZXdyaXRlLXJvb3Q9PFVSTD47OwogCVNldCB0aGUgJ3Jld3JpdGVSb290JyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCi0tLXVzZS1sb2ctYXV0aG9yOzsKLQlXaGVuIHJldHJpZXZpbmcgc3ZuIGNvbW1pdHMgaW50byBnaXQgKGFzIHBhcnQgb2YgZmV0Y2gsIHJlYmFzZSwgb3IKLQlkY29tbWl0IG9wZXJhdGlvbnMpLCBsb29rIGZvciB0aGUgZmlyc3QgRnJvbTogb3IgU2lnbmVkLW9mZi1ieTogbGluZQotCWluIHRoZSBsb2cgbWVzc2FnZSBhbmQgdXNlIHRoYXQgYXMgdGhlIGF1dGhvciBzdHJpbmcuCi0tLWFkZC1hdXRob3ItZnJvbTs7Ci0JV2hlbiBjb21taXR0aW5nIHRvIHN2biBmcm9tIGdpdCAoYXMgcGFydCBvZiBjb21taXQgb3IgZGNvbW1pdAotCW9wZXJhdGlvbnMpLCBpZiB0aGUgZXhpc3RpbmcgbG9nIG1lc3NhZ2UgZG9lc24ndCBhbHJlYWR5IGhhdmUgYQotCUZyb206IG9yIFNpZ25lZC1vZmYtYnk6IGxpbmUsIGFwcGVuZCBhIEZyb206IGxpbmUgYmFzZWQgb24gdGhlCi0JZ2l0IGNvbW1pdCdzIGF1dGhvciBzdHJpbmcuICBJZiB5b3UgdXNlIHRoaXMsIHRoZW4gLS11c2UtbG9nLWF1dGhvcgotCXdpbGwgcmV0cmlldmUgYSB2YWxpZCBhdXRob3Igc3RyaW5nIGZvciBhbGwgY29tbWl0cy4KIC0tdXNlcm5hbWU9PFVTRVI+OzsKIAlGb3IgdHJhbnNwb3J0cyB0aGF0IFNWTiBoYW5kbGVzIGF1dGhlbnRpY2F0aW9uIGZvciAoaHR0cCwKIAlodHRwcywgYW5kIHBsYWluIHN2biksIHNwZWNpZnkgdGhlIHVzZXJuYW1lLiAgRm9yIG90aGVyCkBAIC04OSw2ICs4MCwxNyBAQAogCVdoZW4gcGFzc2VkIHRvICdpbml0JyBvciAnY2xvbmUnIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwKIAliZSBwcmVzZXJ2ZWQgYXMgYSBjb25maWcga2V5LiAgU2VlICdmZXRjaCcgZm9yIGEgZGVzY3JpcHRpb24KIAlvZiAnLS1pZ25vcmUtcGF0aHMnLgorLS1uby1taW5pbWl6ZS11cmw7OworCVdoZW4gdHJhY2tpbmcgbXVsdGlwbGUgZGlyZWN0b3JpZXMgKHVzaW5nIC0tc3RkbGF5b3V0LAorCS0tYnJhbmNoZXMsIG9yIC0tdGFncyBvcHRpb25zKSwgZ2l0IHN2biB3aWxsIGF0dGVtcHQgdG8gY29ubmVjdAorCXRvIHRoZSByb290IChvciBoaWdoZXN0IGFsbG93ZWQgbGV2ZWwpIG9mIHRoZSBTdWJ2ZXJzaW9uCisJcmVwb3NpdG9yeS4gIFRoaXMgZGVmYXVsdCBhbGxvd3MgYmV0dGVyIHRyYWNraW5nIG9mIGhpc3RvcnkgaWYKKwllbnRpcmUgcHJvamVjdHMgYXJlIG1vdmVkIHdpdGhpbiBhIHJlcG9zaXRvcnksIGJ1dCBtYXkgY2F1c2UKKwlpc3N1ZXMgb24gcmVwb3NpdG9yaWVzIHdoZXJlIHJlYWQgYWNjZXNzIHJlc3RyaWN0aW9ucyBhcmUgaW4KKwlwbGFjZS4gIFBhc3NpbmcgJy0tbm8tbWluaW1pemUtdXJsJyB3aWxsIGFsbG93IGdpdCBzdm4gdG8KKwlhY2NlcHQgVVJMcyBhcy1pcyB3aXRob3V0IGF0dGVtcHRpbmcgdG8gY29ubmVjdCB0byBhIGhpZ2hlcgorCWxldmVsIGRpcmVjdG9yeS4gIFRoaXMgb3B0aW9uIGlzIG9mZiBieSBkZWZhdWx0IHdoZW4gb25seQorCW9uZSBVUkwvYnJhbmNoIGlzIHRyYWNrZWQgKGl0IHdvdWxkIGRvIGxpdHRsZSBnb29kKS4KIAogJ2ZldGNoJzo6CiAJRmV0Y2ggdW5mZXRjaGVkIHJldmlzaW9ucyBmcm9tIHRoZSBTdWJ2ZXJzaW9uIHJlbW90ZSB3ZSBhcmUKQEAgLTk4LDEyICsxMDAsMTIgQEAKIAogLS1sb2NhbHRpbWU7OwogCVN0b3JlIEdpdCBjb21taXQgdGltZXMgaW4gdGhlIGxvY2FsIHRpbWV6b25lIGluc3RlYWQgb2YgVVRDLiAgVGhpcwotCW1ha2VzICdnaXQtbG9nJyAoZXZlbiB3aXRob3V0IC0tZGF0ZT1sb2NhbCkgc2hvdyB0aGUgc2FtZSB0aW1lcworCW1ha2VzICdnaXQgbG9nJyAoZXZlbiB3aXRob3V0IC0tZGF0ZT1sb2NhbCkgc2hvdyB0aGUgc2FtZSB0aW1lcwogCXRoYXQgYHN2biBsb2dgIHdvdWxkIGluIHRoZSBsb2NhbCB0aW1lem9uZS4KIAogLS1wYXJlbnQ7OwogCUZldGNoIG9ubHkgZnJvbSB0aGUgU1ZOIHBhcmVudCBvZiB0aGUgY3VycmVudCBIRUFELgotCisrCiBUaGlzIGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggaW50ZXJvcGVyYXRpbmcgd2l0aCB0aGUgU3VidmVyc2lvbgogcmVwb3NpdG9yeSB5b3UgY2xvbmVkIGZyb20sIGJ1dCBpZiB5b3Ugd2lzaCBmb3IgeW91ciBsb2NhbCBHaXQKIHJlcG9zaXRvcnkgdG8gYmUgYWJsZSB0byBpbnRlcm9wZXJhdGUgd2l0aCBzb21lb25lIGVsc2UncyBsb2NhbCBHaXQKQEAgLTExNiwyMCArMTE4LDM5IEBACiAJVGhlICctLWlnbm9yZS1wYXRocycgb3B0aW9uIHNob3VsZCBtYXRjaCBmb3IgZXZlcnkgJ2ZldGNoJwogCShpbmNsdWRpbmcgYXV0b21hdGljIGZldGNoZXMgZHVlIHRvICdjbG9uZScsICdkY29tbWl0JywKIAkncmViYXNlJywgZXRjKSBvbiBhIGdpdmVuIHJlcG9zaXRvcnkuCi0KKysKK1t2ZXJzZV0KIGNvbmZpZyBrZXk6IHN2bi1yZW1vdGUuPG5hbWU+Lmlnbm9yZS1wYXRocwotCi0JSWYgdGhlIGlnbm9yZS1wYXRocyBjb25maWcga2V5IGlzIHNldCBhbmQgdGhlIGNvbW1hbmQKLQlsaW5lIG9wdGlvbiBpcyBhbHNvIGdpdmVuLCBib3RoIHJlZ3VsYXIgZXhwcmVzc2lvbnMKLQl3aWxsIGJlIHVzZWQuCi0KKysKK0lmIHRoZSBpZ25vcmUtcGF0aHMgY29uZmlnIGtleSBpcyBzZXQgYW5kIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIGlzCithbHNvIGdpdmVuLCBib3RoIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2lsbCBiZSB1c2VkLgorKwogRXhhbXBsZXM6CisrCistLQorU2tpcCAiZG9jKiIgZGlyZWN0b3J5IGZvciBldmVyeSBmZXRjaDs7CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0taWdub3JlLXBhdGhzPSJeZG9jIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQktLWlnbm9yZS1wYXRocz0iXmRvYyIgLSBza2lwICJkb2MqIiBkaXJlY3RvcnkgZm9yIGV2ZXJ5Ci0JICAgIGZldGNoLgorU2tpcCAiYnJhbmNoZXMiIGFuZCAidGFncyIgb2YgZmlyc3QgbGV2ZWwgZGlyZWN0b3JpZXM7OworKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLWlnbm9yZS1wYXRocz0iXlteL10rLyg/OmJyYW5jaGVzfHRhZ3MpIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLQogCi0JLS1pZ25vcmUtcGF0aHM9Il5bXi9dKy8oPzpicmFuY2hlc3x0YWdzKSIgLSBza2lwCi0JICAgICJicmFuY2hlcyIgYW5kICJ0YWdzIiBvZiBmaXJzdCBsZXZlbCBkaXJlY3Rvcmllcy4KKy0tdXNlLWxvZy1hdXRob3I7OworCVdoZW4gcmV0cmlldmluZyBzdm4gY29tbWl0cyBpbnRvIGdpdCAoYXMgcGFydCBvZiBmZXRjaCwgcmViYXNlLCBvcgorCWRjb21taXQgb3BlcmF0aW9ucyksIGxvb2sgZm9yIHRoZSBmaXJzdCBGcm9tOiBvciBTaWduZWQtb2ZmLWJ5OiBsaW5lCisJaW4gdGhlIGxvZyBtZXNzYWdlIGFuZCB1c2UgdGhhdCBhcyB0aGUgYXV0aG9yIHN0cmluZy4KKy0tYWRkLWF1dGhvci1mcm9tOzsKKwlXaGVuIGNvbW1pdHRpbmcgdG8gc3ZuIGZyb20gZ2l0IChhcyBwYXJ0IG9mIGNvbW1pdCBvciBkY29tbWl0CisJb3BlcmF0aW9ucyksIGlmIHRoZSBleGlzdGluZyBsb2cgbWVzc2FnZSBkb2Vzbid0IGFscmVhZHkgaGF2ZSBhCisJRnJvbTogb3IgU2lnbmVkLW9mZi1ieTogbGluZSwgYXBwZW5kIGEgRnJvbTogbGluZSBiYXNlZCBvbiB0aGUKKwlnaXQgY29tbWl0J3MgYXV0aG9yIHN0cmluZy4gIElmIHlvdSB1c2UgdGhpcywgdGhlbiAtLXVzZS1sb2ctYXV0aG9yCisJd2lsbCByZXRyaWV2ZSBhIHZhbGlkIGF1dGhvciBzdHJpbmcgZm9yIGFsbCBjb21taXRzLgogCiAnY2xvbmUnOjoKIAlSdW5zICdpbml0JyBhbmQgJ2ZldGNoJy4gIEl0IHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYQpAQCAtMTM3LDI5ICsxNTgsMjkgQEAKIAlvciBpZiBhIHNlY29uZCBhcmd1bWVudCBpcyBwYXNzZWQ7IGl0IHdpbGwgY3JlYXRlIGEgZGlyZWN0b3J5CiAJYW5kIHdvcmsgd2l0aGluIHRoYXQuICBJdCBhY2NlcHRzIGFsbCBhcmd1bWVudHMgdGhhdCB0aGUKIAknaW5pdCcgYW5kICdmZXRjaCcgY29tbWFuZHMgYWNjZXB0OyB3aXRoIHRoZSBleGNlcHRpb24gb2YKLQknLS1mZXRjaC1hbGwnLiAgIEFmdGVyIGEgcmVwb3NpdG9yeSBpcyBjbG9uZWQsIHRoZSAnZmV0Y2gnCi0JY29tbWFuZCB3aWxsIGJlIGFibGUgdG8gdXBkYXRlIHJldmlzaW9ucyB3aXRob3V0IGFmZmVjdGluZwotCXRoZSB3b3JraW5nIHRyZWU7IGFuZCB0aGUgJ3JlYmFzZScgY29tbWFuZCB3aWxsIGJlIGFibGUKLQl0byB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB3aXRoIHRoZSBsYXRlc3QgY2hhbmdlcy4KKwknLS1mZXRjaC1hbGwnIGFuZCAnLS1wYXJlbnQnLiAgQWZ0ZXIgYSByZXBvc2l0b3J5IGlzIGNsb25lZCwKKwl0aGUgJ2ZldGNoJyBjb21tYW5kIHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgcmV2aXNpb25zIHdpdGhvdXQKKwlhZmZlY3RpbmcgdGhlIHdvcmtpbmcgdHJlZTsgYW5kIHRoZSAncmViYXNlJyBjb21tYW5kIHdpbGwgYmUKKwlhYmxlIHRvIHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlIHdpdGggdGhlIGxhdGVzdCBjaGFuZ2VzLgogCiAncmViYXNlJzo6CiAJVGhpcyBmZXRjaGVzIHJldmlzaW9ucyBmcm9tIHRoZSBTVk4gcGFyZW50IG9mIHRoZSBjdXJyZW50IEhFQUQKIAlhbmQgcmViYXNlcyB0aGUgY3VycmVudCAodW5jb21taXR0ZWQgdG8gU1ZOKSB3b3JrIGFnYWluc3QgaXQuCi0KLVRoaXMgd29ya3Mgc2ltaWxhcmx5IHRvIGBzdm4gdXBkYXRlYCBvciAnZ2l0LXB1bGwnIGV4Y2VwdCB0aGF0Ci1pdCBwcmVzZXJ2ZXMgbGluZWFyIGhpc3Rvcnkgd2l0aCAnZ2l0LXJlYmFzZScgaW5zdGVhZCBvZgotJ2dpdC1tZXJnZScgZm9yIGVhc2Ugb2YgZGNvbW1pdHRpbmcgd2l0aCAnZ2l0LXN2bicuCi0KLVRoaXMgYWNjZXB0cyBhbGwgb3B0aW9ucyB0aGF0ICdnaXQtc3ZuIGZldGNoJyBhbmQgJ2dpdC1yZWJhc2UnCisrCitUaGlzIHdvcmtzIHNpbWlsYXJseSB0byBgc3ZuIHVwZGF0ZWAgb3IgJ2dpdCBwdWxsJyBleGNlcHQgdGhhdAoraXQgcHJlc2VydmVzIGxpbmVhciBoaXN0b3J5IHdpdGggJ2dpdCByZWJhc2UnIGluc3RlYWQgb2YKKydnaXQgbWVyZ2UnIGZvciBlYXNlIG9mIGRjb21taXR0aW5nIHdpdGggJ2dpdCBzdm4nLgorKworVGhpcyBhY2NlcHRzIGFsbCBvcHRpb25zIHRoYXQgJ2dpdCBzdm4gZmV0Y2gnIGFuZCAnZ2l0IHJlYmFzZScKIGFjY2VwdC4gIEhvd2V2ZXIsICctLWZldGNoLWFsbCcgb25seSBmZXRjaGVzIGZyb20gdGhlIGN1cnJlbnQKIFtzdm4tcmVtb3RlXSwgYW5kIG5vdCBhbGwgW3N2bi1yZW1vdGVdIGRlZmluaXRpb25zLgotCi1MaWtlICdnaXQtcmViYXNlJzsgdGhpcyByZXF1aXJlcyB0aGF0IHRoZSB3b3JraW5nIHRyZWUgYmUgY2xlYW4KKysKK0xpa2UgJ2dpdCByZWJhc2UnOyB0aGlzIHJlcXVpcmVzIHRoYXQgdGhlIHdvcmtpbmcgdHJlZSBiZSBjbGVhbgogYW5kIGhhdmUgbm8gdW5jb21taXR0ZWQgY2hhbmdlcy4KIAogLWw7OwogLS1sb2NhbDs7Ci0JRG8gbm90IGZldGNoIHJlbW90ZWx5OyBvbmx5IHJ1biAnZ2l0LXJlYmFzZScgYWdhaW5zdCB0aGUKKwlEbyBub3QgZmV0Y2ggcmVtb3RlbHk7IG9ubHkgcnVuICdnaXQgcmViYXNlJyBhZ2FpbnN0IHRoZQogCWxhc3QgZmV0Y2hlZCBjb21taXQgZnJvbSB0aGUgdXBzdHJlYW0gU1ZOLgogCiAnZGNvbW1pdCc6OgpAQCAtMTY3LDExICsxODgsMTIgQEAKIAlyZXBvc2l0b3J5LCBhbmQgdGhlbiByZWJhc2Ugb3IgcmVzZXQgKGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yCiAJbm90IHRoZXJlIGlzIGEgZGlmZiBiZXR3ZWVuIFNWTiBhbmQgaGVhZCkuICBUaGlzIHdpbGwgY3JlYXRlCiAJYSByZXZpc2lvbiBpbiBTVk4gZm9yIGVhY2ggY29tbWl0IGluIGdpdC4KLQlJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBydW4gJ2dpdC1zdm4nIGZldGNoIGFuZCByZWJhc2UgKG5vdAorCUl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHJ1biAnZ2l0IHN2bicgZmV0Y2ggYW5kIHJlYmFzZSAobm90CiAJcHVsbCBvciBtZXJnZSkgeW91ciBjb21taXRzIGFnYWluc3QgdGhlIGxhdGVzdCBjaGFuZ2VzIGluIHRoZQogCVNWTiByZXBvc2l0b3J5LgotCUFuIG9wdGlvbmFsIGNvbW1hbmQtbGluZSBhcmd1bWVudCBtYXkgYmUgc3BlY2lmaWVkIGFzIGFuCi0JYWx0ZXJuYXRpdmUgdG8gSEVBRC4KKwlBbiBvcHRpb25hbCByZXZpc2lvbiBvciBicmFuY2ggYXJndW1lbnQgbWF5IGJlIHNwZWNpZmllZCwgYW5kCisJY2F1c2VzICdnaXQgc3ZuJyB0byBkbyBhbGwgd29yayBvbiB0aGF0IHJldmlzaW9uL2JyYW5jaAorCWluc3RlYWQgb2YgSEVBRC4KIAlUaGlzIGlzIGFkdmFudGFnZW91cyBvdmVyICdzZXQtdHJlZScgKGJlbG93KSBiZWNhdXNlIGl0IHByb2R1Y2VzCiAJY2xlYW5lciwgbW9yZSBsaW5lYXIgaGlzdG9yeS4KICsKQEAgLTE3OSwxOCArMjAxLDE3IEBACiAJQWZ0ZXIgY29tbWl0dGluZywgZG8gbm90IHJlYmFzZSBvciByZXNldC4KIC0tY29tbWl0LXVybCA8VVJMPjs7CiAJQ29tbWl0IHRvIHRoaXMgU1ZOIFVSTCAodGhlIGZ1bGwgcGF0aCkuICBUaGlzIGlzIGludGVuZGVkIHRvCi0JYWxsb3cgZXhpc3RpbmcgZ2l0LXN2biByZXBvc2l0b3JpZXMgY3JlYXRlZCB3aXRoIG9uZSB0cmFuc3BvcnQKKwlhbGxvdyBleGlzdGluZyAnZ2l0IHN2bicgcmVwb3NpdG9yaWVzIGNyZWF0ZWQgd2l0aCBvbmUgdHJhbnNwb3J0CiAJbWV0aG9kIChlLmcuIGBzdm46Ly9gIG9yIGBodHRwOi8vYCBmb3IgYW5vbnltb3VzIHJlYWQpIHRvIGJlCiAJcmV1c2VkIGlmIGEgdXNlciBpcyBsYXRlciBnaXZlbiBhY2Nlc3MgdG8gYW4gYWx0ZXJuYXRlIHRyYW5zcG9ydAogCW1ldGhvZCAoZS5nLiBgc3ZuK3NzaDovL2Agb3IgYGh0dHBzOi8vYCkgZm9yIGNvbW1pdC4KLQorKworW3ZlcnNlXQogY29uZmlnIGtleTogc3ZuLXJlbW90ZS48bmFtZT4uY29tbWl0dXJsCi0KIGNvbmZpZyBrZXk6IHN2bi5jb21taXR1cmwgKG92ZXJ3cml0ZXMgYWxsIHN2bi1yZW1vdGUuPG5hbWU+LmNvbW1pdHVybCBvcHRpb25zKQotCi0JVXNpbmcgdGhpcyBvcHRpb24gZm9yIGFueSBvdGhlciBwdXJwb3NlIChkb24ndCBhc2spCi0JaXMgdmVyeSBzdHJvbmdseSBkaXNjb3VyYWdlZC4KLS0tCisrCitVc2luZyB0aGlzIG9wdGlvbiBmb3IgYW55IG90aGVyIHB1cnBvc2UgKGRvbid0IGFzaykgaXMgdmVyeSBzdHJvbmdseQorZGlzY291cmFnZWQuCiAKICdicmFuY2gnOjoKIAlDcmVhdGUgYSBicmFuY2ggaW4gdGhlIFNWTiByZXBvc2l0b3J5LgpAQCAtMjA0LDYgKzIyNSwyMCBAQAogCUNyZWF0ZSBhIHRhZyBieSB1c2luZyB0aGUgdGFnc19zdWJkaXIgaW5zdGVhZCBvZiB0aGUgYnJhbmNoZXNfc3ViZGlyCiAJc3BlY2lmaWVkIGR1cmluZyBnaXQgc3ZuIGluaXQuCiAKKy1kOzsKKy0tZGVzdGluYXRpb247OworCUlmIG1vcmUgdGhhbiBvbmUgLS1icmFuY2hlcyAob3IgLS10YWdzKSBvcHRpb24gd2FzIGdpdmVuIHRvIHRoZSAnaW5pdCcKKwlvciAnY2xvbmUnIGNvbW1hbmQsIHlvdSBtdXN0IHByb3ZpZGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBicmFuY2ggKG9yCisJdGFnKSB5b3Ugd2lzaCB0byBjcmVhdGUgaW4gdGhlIFNWTiByZXBvc2l0b3J5LiAgVGhlIHZhbHVlIG9mIHRoaXMKKwlvcHRpb24gbXVzdCBtYXRjaCBvbmUgb2YgdGhlIHBhdGhzIHNwZWNpZmllZCBieSBhIC0tYnJhbmNoZXMgKG9yCisJLS10YWdzKSBvcHRpb24uICBZb3UgY2FuIHNlZSB0aGVzZSBwYXRocyB3aXRoIHRoZSBjb21tYW5kcworKworCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuPG5hbWU+LmJyYW5jaGVzCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc3ZuLXJlbW90ZS48bmFtZT4udGFncworKword2hlcmUgPG5hbWU+IGlzIHRoZSBuYW1lIG9mIHRoZSBTVk4gcmVwb3NpdG9yeSBhcyBzcGVjaWZpZWQgYnkgdGhlIC1SIG9wdGlvbiB0bworJ2luaXQnIChvciAic3ZuIiBieSBkZWZhdWx0KS4KKwogJ3RhZyc6OgogCUNyZWF0ZSBhIHRhZyBpbiB0aGUgU1ZOIHJlcG9zaXRvcnkuIFRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yCiAJJ2JyYW5jaCAtdCcuCkBAIC0yMTUsMTAgKzI1MCwxMiBAQAogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBmcm9tIGBzdm4gbG9nJyBhcmUgc3VwcG9ydGVkOgogKwogLS0KKy1yIDxuPls6PG4+XTs7CiAtLXJldmlzaW9uPTxuPls6PG4+XTs7CiAJaXMgc3VwcG9ydGVkLCBub24tbnVtZXJpYyBhcmdzIGFyZSBub3Q6CiAJSEVBRCwgTkVYVCwgQkFTRSwgUFJFViwgZXRjIC4uLgotLXYvLS12ZXJib3NlOzsKKy12OzsKKy0tdmVyYm9zZTs7CiAJaXQncyBub3QgY29tcGxldGVseSBjb21wYXRpYmxlIHdpdGggdGhlIC0tdmVyYm9zZQogCW91dHB1dCBpbiBzdm4gbG9nLCBidXQgcmVhc29uYWJseSBjbG9zZS4KIC0tbGltaXQ9PG4+OzsKQEAgLTI0MSw3ICsyNzgsNyBAQAogY2xpZW50IGNvbnZlcnRzIHRoZSBVVEMgdGltZSB0byB0aGUgbG9jYWwgdGltZSAob3IgYmFzZWQgb24gdGhlIFRaPQogZW52aXJvbm1lbnQpLiBUaGlzIGNvbW1hbmQgaGFzIHRoZSBzYW1lIGJlaGF2aW91ci4KICsKLUFueSBvdGhlciBhcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0LWxvZycKK0FueSBvdGhlciBhcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IGxvZycKIAogJ2JsYW1lJzo6CiAgICAgICAgU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlLiBUaGUKQEAgLTI0OSwxNSArMjg2LDE0IEBACiAgICAgICAgYHN2biBibGFtZScgYnkgZGVmYXVsdC4gTGlrZSB0aGUgU1ZOIGJsYW1lIGNvbW1hbmQsCiAgICAgICAgbG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB0aGUgd29ya2luZyBjb3B5IGFyZSBpZ25vcmVkOwogICAgICAgIHRoZSB2ZXJzaW9uIG9mIHRoZSBmaWxlIGluIHRoZSBIRUFEIHJldmlzaW9uIGlzIGFubm90YXRlZC4gVW5rbm93bgotICAgICAgIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQtYmxhbWUnLgorICAgICAgIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgYmxhbWUnLgogKwogLS1naXQtZm9ybWF0OzsKLQlQcm9kdWNlIG91dHB1dCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgJ2dpdC1ibGFtZScsIGJ1dCB3aXRoCisJUHJvZHVjZSBvdXRwdXQgaW4gdGhlIHNhbWUgZm9ybWF0IGFzICdnaXQgYmxhbWUnLCBidXQgd2l0aAogCVNWTiByZXZpc2lvbiBudW1iZXJzIGluc3RlYWQgb2YgZ2l0IGNvbW1pdCBoYXNoZXMuIEluIHRoaXMgbW9kZSwKIAljaGFuZ2VzIHRoYXQgaGF2ZW4ndCBiZWVuIGNvbW1pdHRlZCB0byBTVk4gKGluY2x1ZGluZyBsb2NhbAogCXdvcmtpbmctY29weSBlZGl0cykgYXJlIHNob3duIGFzIHJldmlzaW9uIDAuCiAKLS0tCiAnZmluZC1yZXYnOjoKIAlXaGVuIGdpdmVuIGFuIFNWTiByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGZvcm0gJ3JOJywgcmV0dXJucyB0aGUKIAljb3JyZXNwb25kaW5nIGdpdCBjb21taXQgaGFzaCAodGhpcyBjYW4gb3B0aW9uYWxseSBiZSBmb2xsb3dlZCBieSBhCkBAIC0yNzEsNyArMzA3LDcgQEAKIAlhYnNvbHV0ZWx5IG5vIGF0dGVtcHRzIHRvIGRvIHBhdGNoaW5nIHdoZW4gY29tbWl0dGluZyB0byBTVk4sIGl0CiAJc2ltcGx5IG92ZXJ3cml0ZXMgZmlsZXMgd2l0aCB0aG9zZSBzcGVjaWZpZWQgaW4gdGhlIHRyZWUgb3IKIAljb21taXQuICBBbGwgbWVyZ2luZyBpcyBhc3N1bWVkIHRvIGhhdmUgdGFrZW4gcGxhY2UKLQlpbmRlcGVuZGVudGx5IG9mICdnaXQtc3ZuJyBmdW5jdGlvbnMuCisJaW5kZXBlbmRlbnRseSBvZiAnZ2l0IHN2bicgZnVuY3Rpb25zLgogCiAnY3JlYXRlLWlnbm9yZSc6OgogCVJlY3Vyc2l2ZWx5IGZpbmRzIHRoZSBzdm46aWdub3JlIHByb3BlcnR5IG9uIGRpcmVjdG9yaWVzIGFuZApAQCAtMjg2LDEyICszMjIsMTIgQEAKIAogJ2NvbW1pdC1kaWZmJzo6CiAJQ29tbWl0cyB0aGUgZGlmZiBvZiB0d28gdHJlZS1pc2ggYXJndW1lbnRzIGZyb20gdGhlCi0JY29tbWFuZC1saW5lLiAgVGhpcyBjb21tYW5kIGRvZXMgbm90IHJlbHkgb24gYmVpbmcgaW5zaWRlIGFuIGBnaXQtc3ZuCisJY29tbWFuZC1saW5lLiAgVGhpcyBjb21tYW5kIGRvZXMgbm90IHJlbHkgb24gYmVpbmcgaW5zaWRlIGFuIGBnaXQgc3ZuCiAJaW5pdGAtZWQgcmVwb3NpdG9yeS4gIFRoaXMgY29tbWFuZCB0YWtlcyB0aHJlZSBhcmd1bWVudHMsIChhKSB0aGUKIAlvcmlnaW5hbCB0cmVlIHRvIGRpZmYgYWdhaW5zdCwgKGIpIHRoZSBuZXcgdHJlZSByZXN1bHQsIChjKSB0aGUKIAlVUkwgb2YgdGhlIHRhcmdldCBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuICBUaGUgZmluYWwgYXJndW1lbnQKLQkoVVJMKSBtYXkgYmUgb21pdHRlZCBpZiB5b3UgYXJlIHdvcmtpbmcgZnJvbSBhICdnaXQtc3ZuJy1hd2FyZQotCXJlcG9zaXRvcnkgKHRoYXQgaGFzIGJlZW4gYGluaXRgLWVkIHdpdGggJ2dpdC1zdm4nKS4KKwkoVVJMKSBtYXkgYmUgb21pdHRlZCBpZiB5b3UgYXJlIHdvcmtpbmcgZnJvbSBhICdnaXQgc3ZuJy1hd2FyZQorCXJlcG9zaXRvcnkgKHRoYXQgaGFzIGJlZW4gYGluaXRgLWVkIHdpdGggJ2dpdCBzdm4nKS4KIAlUaGUgLXI8cmV2aXNpb24+IG9wdGlvbiBpcyByZXF1aXJlZCBmb3IgdGhpcy4KIAogJ2luZm8nOjoKQEAgLTMxMywxMDggKzM0OSwxNzAgQEAKIAlTaG93cyB0aGUgU3VidmVyc2lvbiBleHRlcm5hbHMuICBVc2UgLXIvLS1yZXZpc2lvbiB0byBzcGVjaWZ5IGEKIAlzcGVjaWZpYyByZXZpc2lvbi4KIAotLS0KKydnYyc6OgorCUNvbXByZXNzICRHSVRfRElSL3N2bi88cmVmbmFtZT4vdW5oYW5kbGVkLmxvZyBmaWxlcyBpbiAuZ2l0L3N2bgorCWFuZCByZW1vdmUgJEdJVF9ESVIvc3ZuLzxyZWZuYW1lPmluZGV4IGZpbGVzIGluIC5naXQvc3ZuLgorCisncmVzZXQnOjoKKwlVbmRvZXMgdGhlIGVmZmVjdHMgb2YgJ2ZldGNoJyBiYWNrIHRvIHRoZSBzcGVjaWZpZWQgcmV2aXNpb24uCisJVGhpcyBhbGxvd3MgeW91IHRvIHJlLSdmZXRjaCcgYW4gU1ZOIHJldmlzaW9uLiAgTm9ybWFsbHkgdGhlCisJY29udGVudHMgb2YgYW4gU1ZOIHJldmlzaW9uIHNob3VsZCBuZXZlciBjaGFuZ2UgYW5kICdyZXNldCcKKwlzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4gIEhvd2V2ZXIsIGlmIFNWTiBwZXJtaXNzaW9ucyBjaGFuZ2UsCisJb3IgaWYgeW91IGFsdGVyIHlvdXIgLS1pZ25vcmUtcGF0aHMgb3B0aW9uLCBhICdmZXRjaCcgbWF5IGZhaWwKKwl3aXRoICJub3QgZm91bmQgaW4gY29tbWl0IiAoZmlsZSBub3QgcHJldmlvdXNseSB2aXNpYmxlKSBvcgorCSJjaGVja3N1bSBtaXNtYXRjaCIgKG1pc3NlZCBhIG1vZGlmaWNhdGlvbikuICBJZiB0aGUgcHJvYmxlbQorCWZpbGUgY2Fubm90IGJlIGlnbm9yZWQgZm9yZXZlciAod2l0aCAtLWlnbm9yZS1wYXRocykgdGhlIG9ubHkKKwl3YXkgdG8gcmVwYWlyIHRoZSByZXBvIGlzIHRvIHVzZSAncmVzZXQnLgorKworT25seSB0aGUgcmV2X21hcCBhbmQgcmVmcy9yZW1vdGVzL2dpdC1zdm4gYXJlIGNoYW5nZWQuICBGb2xsb3cgJ3Jlc2V0Jword2l0aCBhICdmZXRjaCcgYW5kIHRoZW4gJ2dpdCByZXNldCcgb3IgJ2dpdCByZWJhc2UnIHRvIG1vdmUgbG9jYWwKK2JyYW5jaGVzIG9udG8gdGhlIG5ldyB0cmVlLgorCistciA8bj47OworLS1yZXZpc2lvbj08bj47OworCVNwZWNpZnkgdGhlIG1vc3QgcmVjZW50IHJldmlzaW9uIHRvIGtlZXAuICBBbGwgbGF0ZXIgcmV2aXNpb25zCisJYXJlIGRpc2NhcmRlZC4KKy1wOzsKKy0tcGFyZW50OzsKKwlEaXNjYXJkIHRoZSBzcGVjaWZpZWQgcmV2aXNpb24gYXMgd2VsbCwga2VlcGluZyB0aGUgbmVhcmVzdAorCXBhcmVudCBpbnN0ZWFkLgorRXhhbXBsZTo7OworQXNzdW1lIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgaW4gIm1hc3RlciIsIGJ1dCB5b3UgbmVlZCB0byByZWZldGNoICJyMiIuCisrCistLS0tLS0tLS0tLS0KKyAgICByMS0tLXIyLS0tcjMgcmVtb3Rlcy9naXQtc3ZuCisgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICBBLS0tQiBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorKworRml4IHRoZSBpZ25vcmUtcGF0aHMgb3IgU1ZOIHBlcm1pc3Npb25zIHByb2JsZW0gdGhhdCBjYXVzZWQgInIyIiB0bworYmUgaW5jb21wbGV0ZSBpbiB0aGUgZmlyc3QgcGxhY2UuICBUaGVuOgorKworW3ZlcnNlXQorZ2l0IHN2biByZXNldCAtcjIgLXAKK2dpdCBzdm4gZmV0Y2gKKysKKy0tLS0tLS0tLS0tLQorICAgIHIxLS0tcjInLS1yMycgcmVtb3Rlcy9naXQtc3ZuCisgICAgICBcCisgICAgICAgcjItLS1yMy0tLUEtLS1CIG1hc3RlcgorLS0tLS0tLS0tLS0tCisrCitUaGVuIGZpeHVwICJtYXN0ZXIiIHdpdGggJ2dpdCByZWJhc2UnLgorRG8gTk9UIHVzZSAnZ2l0IG1lcmdlJyBvciB5b3VyIGhpc3Rvcnkgd2lsbCBub3QgYmUgY29tcGF0aWJsZSB3aXRoIGEKK2Z1dHVyZSAnZGNvbW1pdCchCisrCitbdmVyc2VdCitnaXQgcmViYXNlIC0tb250byByZW1vdGVzL2dpdC1zdm4gQV4gbWFzdGVyCisrCistLS0tLS0tLS0tLS0KKyAgICByMS0tLXIyJy0tcjMnIHJlbW90ZXMvZ2l0LXN2bgorICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgQSctLUInIG1hc3RlcgorLS0tLS0tLS0tLS0tCiAKIE9QVElPTlMKIC0tLS0tLS0KLS0tCiAKIC0tc2hhcmVkWz17ZmFsc2V8dHJ1ZXx1bWFza3xncm91cHxhbGx8d29ybGR8ZXZlcnlib2R5fV06OgogLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pjo6CiAJT25seSB1c2VkIHdpdGggdGhlICdpbml0JyBjb21tYW5kLgotCVRoZXNlIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdC1pbml0Jy4KKwlUaGVzZSBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgaW5pdCcuCiAKIC1yIDxBUkc+OjoKIC0tcmV2aXNpb24gPEFSRz46OgotCi1Vc2VkIHdpdGggdGhlICdmZXRjaCcgY29tbWFuZC4KLQorCSAgIFVzZWQgd2l0aCB0aGUgJ2ZldGNoJyBjb21tYW5kLgorKwogVGhpcyBhbGxvd3MgcmV2aXNpb24gcmFuZ2VzIGZvciBwYXJ0aWFsL2NhdXRlcml6ZWQgaGlzdG9yeQogdG8gYmUgc3VwcG9ydGVkLiAgJE5VTUJFUiwgJE5VTUJFUjE6JE5VTUJFUjIgKG51bWVyaWMgcmFuZ2VzKSwKICROVU1CRVI6SEVBRCwgYW5kIEJBU0U6JE5VTUJFUiBhcmUgYWxsIHN1cHBvcnRlZC4KLQorKwogVGhpcyBjYW4gYWxsb3cgeW91IHRvIG1ha2UgcGFydGlhbCBtaXJyb3JzIHdoZW4gcnVubmluZyBmZXRjaDsKIGJ1dCBpcyBnZW5lcmFsbHkgbm90IHJlY29tbWVuZGVkIGJlY2F1c2UgaGlzdG9yeSB3aWxsIGJlIHNraXBwZWQKIGFuZCBsb3N0LgogCiAtOjoKIC0tc3RkaW46OgotCi1Pbmx5IHVzZWQgd2l0aCB0aGUgJ3NldC10cmVlJyBjb21tYW5kLgotCisJT25seSB1c2VkIHdpdGggdGhlICdzZXQtdHJlZScgY29tbWFuZC4KKysKIFJlYWQgYSBsaXN0IG9mIGNvbW1pdHMgZnJvbSBzdGRpbiBhbmQgY29tbWl0IHRoZW0gaW4gcmV2ZXJzZQogb3JkZXIuICBPbmx5IHRoZSBsZWFkaW5nIHNoYTEgaXMgcmVhZCBmcm9tIGVhY2ggbGluZSwgc28KLSdnaXQtcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZScgb3V0cHV0IGNhbiBiZSB1c2VkLgorJ2dpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lJyBvdXRwdXQgY2FuIGJlIHVzZWQuCiAKIC0tcm1kaXI6OgotCi1Pbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAnc2V0LXRyZWUnIGFuZCAnY29tbWl0LWRpZmYnIGNvbW1hbmRzLgotCisJT25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3NldC10cmVlJyBhbmQgJ2NvbW1pdC1kaWZmJyBjb21tYW5kcy4KKysKIFJlbW92ZSBkaXJlY3RvcmllcyBmcm9tIHRoZSBTVk4gdHJlZSBpZiB0aGVyZSBhcmUgbm8gZmlsZXMgbGVmdAogYmVoaW5kLiAgU1ZOIGNhbiB2ZXJzaW9uIGVtcHR5IGRpcmVjdG9yaWVzLCBhbmQgdGhleSBhcmUgbm90CiByZW1vdmVkIGJ5IGRlZmF1bHQgaWYgdGhlcmUgYXJlIG5vIGZpbGVzIGxlZnQgaW4gdGhlbS4gIGdpdAogY2Fubm90IHZlcnNpb24gZW1wdHkgZGlyZWN0b3JpZXMuICBFbmFibGluZyB0aGlzIGZsYWcgd2lsbCBtYWtlCiB0aGUgY29tbWl0IHRvIFNWTiBhY3QgbGlrZSBnaXQuCi0KKysKK1t2ZXJzZV0KIGNvbmZpZyBrZXk6IHN2bi5ybWRpcgogCiAtZTo6CiAtLWVkaXQ6OgotCi1Pbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAnc2V0LXRyZWUnIGFuZCAnY29tbWl0LWRpZmYnIGNvbW1hbmRzLgotCisJT25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3NldC10cmVlJyBhbmQgJ2NvbW1pdC1kaWZmJyBjb21tYW5kcy4KKysKIEVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIHRvIFNWTi4gIFRoaXMgaXMgb2ZmIGJ5CiBkZWZhdWx0IGZvciBvYmplY3RzIHRoYXQgYXJlIGNvbW1pdHMsIGFuZCBmb3JjZWQgb24gd2hlbiBjb21taXR0aW5nCiB0cmVlIG9iamVjdHMuCi0KKysKK1t2ZXJzZV0KIGNvbmZpZyBrZXk6IHN2bi5lZGl0CiAKIC1sPG51bT46OgogLS1maW5kLWNvcGllcy1oYXJkZXI6OgotCi1Pbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAnc2V0LXRyZWUnIGFuZCAnY29tbWl0LWRpZmYnIGNvbW1hbmRzLgotCi1UaGV5IGFyZSBib3RoIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0LWRpZmYtdHJlZSc7IHNlZQorCU9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdzZXQtdHJlZScgYW5kICdjb21taXQtZGlmZicgY29tbWFuZHMuCisrCitUaGV5IGFyZSBib3RoIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IGRpZmYtdHJlZSc7IHNlZQogbGlua2dpdDpnaXQtZGlmZi10cmVlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgotCisrCiBbdmVyc2VdCiBjb25maWcga2V5OiBzdm4ubAogY29uZmlnIGtleTogc3ZuLmZpbmRjb3BpZXNoYXJkZXIKIAogLUE8ZmlsZW5hbWU+OjoKIC0tYXV0aG9ycy1maWxlPTxmaWxlbmFtZT46OgotCi1TeW50YXggaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBmaWxlIHVzZWQgYnkgJ2dpdC1jdnNpbXBvcnQnOgotCisJU3ludGF4IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZmlsZSB1c2VkIGJ5ICdnaXQgY3ZzaW1wb3J0JzoKKysKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCWxvZ2lubmFtZSA9IEpvZSBVc2VyIDx1c2VyQGV4YW1wbGUuY29tPgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCBhbmQgJ2dpdC1zdm4nIGVuY291bnRlcnMgYW4gU1ZOCi1jb21taXR0ZXIgbmFtZSB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBhdXRob3JzLWZpbGUsICdnaXQtc3ZuJworKworSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkIGFuZCAnZ2l0IHN2bicgZW5jb3VudGVycyBhbiBTVk4KK2NvbW1pdHRlciBuYW1lIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGF1dGhvcnMtZmlsZSwgJ2dpdCBzdm4nCiB3aWxsIGFib3J0IG9wZXJhdGlvbi4gVGhlIHVzZXIgd2lsbCB0aGVuIGhhdmUgdG8gYWRkIHRoZQotYXBwcm9wcmlhdGUgZW50cnkuICBSZS1ydW5uaW5nIHRoZSBwcmV2aW91cyAnZ2l0LXN2bicgY29tbWFuZAorYXBwcm9wcmlhdGUgZW50cnkuICBSZS1ydW5uaW5nIHRoZSBwcmV2aW91cyAnZ2l0IHN2bicgY29tbWFuZAogYWZ0ZXIgdGhlIGF1dGhvcnMtZmlsZSBpcyBtb2RpZmllZCBzaG91bGQgY29udGludWUgb3BlcmF0aW9uLgotCisrCitbdmVyc2VdCiBjb25maWcga2V5OiBzdm4uYXV0aG9yc2ZpbGUKIAorLS1hdXRob3JzLXByb2c9PGZpbGVuYW1lPjo6CisJSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLCBmb3IgZWFjaCBTVk4gY29tbWl0dGVyIG5hbWUgdGhhdAorCWRvZXMgbm90IGV4aXN0IGluIHRoZSBhdXRob3JzIGZpbGUsIHRoZSBnaXZlbiBmaWxlIGlzIGV4ZWN1dGVkCisJd2l0aCB0aGUgY29tbWl0dGVyIG5hbWUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHByb2dyYW0gaXMKKwlleHBlY3RlZCB0byByZXR1cm4gYSBzaW5nbGUgbGluZSBvZiB0aGUgZm9ybSAiTmFtZSA8ZW1haWw+IiwKKwl3aGljaCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaW5jbHVkZWQgaW4gdGhlIGF1dGhvcnMgZmlsZS4KKwogLXE6OgogLS1xdWlldDo6Ci0JTWFrZSAnZ2l0LXN2bicgbGVzcyB2ZXJib3NlLiBTcGVjaWZ5IGEgc2Vjb25kIHRpbWUgdG8gbWFrZSBpdAorCU1ha2UgJ2dpdCBzdm4nIGxlc3MgdmVyYm9zZS4gU3BlY2lmeSBhIHNlY29uZCB0aW1lIHRvIG1ha2UgaXQKIAlldmVuIGxlc3MgdmVyYm9zZS4KIAogLS1yZXBhY2tbPTxuPl06OgogLS1yZXBhY2stZmxhZ3M9PGZsYWdzPjo6Ci0KLVRoZXNlIHNob3VsZCBoZWxwIGtlZXAgZGlzayB1c2FnZSBzYW5lIGZvciBsYXJnZSBmZXRjaGVzCi13aXRoIG1hbnkgcmV2aXNpb25zLgotCisJVGhlc2Ugc2hvdWxkIGhlbHAga2VlcCBkaXNrIHVzYWdlIHNhbmUgZm9yIGxhcmdlIGZldGNoZXMgd2l0aAorCW1hbnkgcmV2aXNpb25zLgorKwogLS1yZXBhY2sgdGFrZXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgZm9yIHRoZSBudW1iZXIgb2YgcmV2aXNpb25zCiB0byBmZXRjaCBiZWZvcmUgcmVwYWNraW5nLiAgVGhpcyBkZWZhdWx0cyB0byByZXBhY2tpbmcgZXZlcnkKIDEwMDAgY29tbWl0cyBmZXRjaGVkIGlmIG5vIGFyZ3VtZW50IGlzIHNwZWNpZmllZC4KLQotLS1yZXBhY2stZmxhZ3MgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0LXJlcGFjaycuCi0KKysKKy0tcmVwYWNrLWZsYWdzIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdCByZXBhY2snLgorKwogW3ZlcnNlXQogY29uZmlnIGtleTogc3ZuLnJlcGFjawogY29uZmlnIGtleTogc3ZuLnJlcGFja2ZsYWdzCkBAIC00MjMsNDEgKzUyMSwzNiBAQAogLS1tZXJnZTo6CiAtczxzdHJhdGVneT46OgogLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKLQotVGhlc2UgYXJlIG9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcgYW5kICdyZWJhc2UnIGNvbW1hbmRzLgotCi1QYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdC1yZWJhc2UnIHdoZW4gdXNpbmcgJ2Rjb21taXQnIGlmIGEKLSdnaXQtcmVzZXQnIGNhbm5vdCBiZSB1c2VkIChzZWUgJ2Rjb21taXQnKS4KKwlUaGVzZSBhcmUgb25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JyBhbmQgJ3JlYmFzZScgY29tbWFuZHMuCisrCitQYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdCByZWJhc2UnIHdoZW4gdXNpbmcgJ2Rjb21taXQnIGlmIGEKKydnaXQgcmVzZXQnIGNhbm5vdCBiZSB1c2VkIChzZWUgJ2Rjb21taXQnKS4KIAogLW46OgogLS1kcnktcnVuOjoKLQotVGhpcyBjYW4gYmUgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdyZWJhc2UnLCAnYnJhbmNoJyBhbmQgJ3RhZycKLWNvbW1hbmRzLgotCisJVGhpcyBjYW4gYmUgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdyZWJhc2UnLCAnYnJhbmNoJyBhbmQKKwkndGFnJyBjb21tYW5kcy4KKysKIEZvciAnZGNvbW1pdCcsIHByaW50IG91dCB0aGUgc2VyaWVzIG9mIGdpdCBhcmd1bWVudHMgdGhhdCB3b3VsZCBzaG93CiB3aGljaCBkaWZmcyB3b3VsZCBiZSBjb21taXR0ZWQgdG8gU1ZOLgotCisrCiBGb3IgJ3JlYmFzZScsIGRpc3BsYXkgdGhlIGxvY2FsIGJyYW5jaCBhc3NvY2lhdGVkIHdpdGggdGhlIHVwc3RyZWFtIHN2bgogcmVwb3NpdG9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCB0aGUgVVJMIG9mIHN2bgogcmVwb3NpdG9yeSB0aGF0IHdpbGwgYmUgZmV0Y2hlZCBmcm9tLgotCisrCiBGb3IgJ2JyYW5jaCcgYW5kICd0YWcnLCBkaXNwbGF5IHRoZSB1cmxzIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBjb3B5aW5nIHdoZW4KIGNyZWF0aW5nIHRoZSBicmFuY2ggb3IgdGFnLgogCi0tLQogCiBBRFZBTkNFRCBPUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tCi0tLQogCiAtaTxHSVRfU1ZOX0lEPjo6CiAtLWlkIDxHSVRfU1ZOX0lEPjo6Ci0KLVRoaXMgc2V0cyBHSVRfU1ZOX0lEIChpbnN0ZWFkIG9mIHVzaW5nIHRoZSBlbnZpcm9ubWVudCkuICBUaGlzCi1hbGxvd3MgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcmVmbmFtZSB0byBmZXRjaCBmcm9tCi13aGVuIHRyYWNraW5nIGEgc2luZ2xlIFVSTC4gIFRoZSAnbG9nJyBhbmQgJ2Rjb21taXQnIGNvbW1hbmRzCi1ubyBsb25nZXIgcmVxdWlyZSB0aGlzIHN3aXRjaCBhcyBhbiBhcmd1bWVudC4KKwlUaGlzIHNldHMgR0lUX1NWTl9JRCAoaW5zdGVhZCBvZiB1c2luZyB0aGUgZW52aXJvbm1lbnQpLiAgVGhpcworCWFsbG93cyB0aGUgdXNlciB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCByZWZuYW1lIHRvIGZldGNoIGZyb20KKwl3aGVuIHRyYWNraW5nIGEgc2luZ2xlIFVSTC4gIFRoZSAnbG9nJyBhbmQgJ2Rjb21taXQnIGNvbW1hbmRzCisJbm8gbG9uZ2VyIHJlcXVpcmUgdGhpcyBzd2l0Y2ggYXMgYW4gYXJndW1lbnQuCiAKIC1SPHJlbW90ZSBuYW1lPjo6CiAtLXN2bi1yZW1vdGUgPHJlbW90ZSBuYW1lPjo6CkBAIC00NzEsMzMgKzU2NCwzMCBAQAogCXN0YXJ0ZWQgdHJhY2tpbmcgYSBicmFuY2ggYW5kIG5ldmVyIHRyYWNrZWQgdGhlIHRydW5rIGl0IHdhcwogCWRlc2NlbmRlZCBmcm9tLiBUaGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB1c2UKIAktLW5vLWZvbGxvdy1wYXJlbnQgdG8gZGlzYWJsZSBpdC4KLQorKworW3ZlcnNlXQogY29uZmlnIGtleTogc3ZuLmZvbGxvd3BhcmVudAogCi0tLQogQ09ORklHIEZJTEUtT05MWSBPUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tCiAKIHN2bi5ub01ldGFkYXRhOjoKIHN2bi1yZW1vdGUuPG5hbWU+Lm5vTWV0YWRhdGE6OgotCi1UaGlzIGdldHMgcmlkIG9mIHRoZSAnZ2l0LXN2bi1pZDonIGxpbmVzIGF0IHRoZSBlbmQgb2YgZXZlcnkgY29tbWl0LgotCi1JZiB5b3UgbG9zZSB5b3VyIC5naXQvc3ZuL2dpdC1zdm4vLnJldl9kYiBmaWxlLCAnZ2l0LXN2bicgd2lsbCBub3QKKwlUaGlzIGdldHMgcmlkIG9mIHRoZSAnZ2l0LXN2bi1pZDonIGxpbmVzIGF0IHRoZSBlbmQgb2YgZXZlcnkgY29tbWl0LgorKworSWYgeW91IGxvc2UgeW91ciAuZ2l0L3N2bi9naXQtc3ZuLy5yZXZfZGIgZmlsZSwgJ2dpdCBzdm4nIHdpbGwgbm90CiBiZSBhYmxlIHRvIHJlYnVpbGQgaXQgYW5kIHlvdSB3b24ndCBiZSBhYmxlIHRvIGZldGNoIGFnYWluLAogZWl0aGVyLiAgVGhpcyBpcyBmaW5lIGZvciBvbmUtc2hvdCBpbXBvcnRzLgotCi1UaGUgJ2dpdC1zdm4gbG9nJyBjb21tYW5kIHdpbGwgbm90IHdvcmsgb24gcmVwb3NpdG9yaWVzIHVzaW5nCisrCitUaGUgJ2dpdCBzdm4gbG9nJyBjb21tYW5kIHdpbGwgbm90IHdvcmsgb24gcmVwb3NpdG9yaWVzIHVzaW5nCiB0aGlzLCBlaXRoZXIuICBVc2luZyB0aGlzIGNvbmZsaWN0cyB3aXRoIHRoZSAndXNlU3ZtUHJvcHMnCiBvcHRpb24gZm9yIChob3BlZnVsbHkpIG9idmlvdXMgcmVhc29ucy4KIAogc3ZuLnVzZVN2bVByb3BzOjoKIHN2bi1yZW1vdGUuPG5hbWU+LnVzZVN2bVByb3BzOjoKLQotVGhpcyBhbGxvd3MgJ2dpdC1zdm4nIHRvIHJlLW1hcCByZXBvc2l0b3J5IFVSTHMgYW5kIFVVSURzIGZyb20KLW1pcnJvcnMgY3JlYXRlZCB1c2luZyBTVk46Ok1pcnJvciAob3Igc3ZrKSBmb3IgbWV0YWRhdGEuCi0KKwlUaGlzIGFsbG93cyAnZ2l0IHN2bicgdG8gcmUtbWFwIHJlcG9zaXRvcnkgVVJMcyBhbmQgVVVJRHMgZnJvbQorCW1pcnJvcnMgY3JlYXRlZCB1c2luZyBTVk46Ok1pcnJvciAob3Igc3ZrKSBmb3IgbWV0YWRhdGEuCisrCiBJZiBhbiBTVk4gcmV2aXNpb24gaGFzIGEgcHJvcGVydHksICJzdm06aGVhZHJldiIsIGl0IGlzIGxpa2VseQogdGhhdCB0aGUgcmV2aXNpb24gd2FzIGNyZWF0ZWQgYnkgU1ZOOjpNaXJyb3IgKGFsc28gdXNlZCBieSBTVkspLgogVGhlIHByb3BlcnR5IGNvbnRhaW5zIGEgcmVwb3NpdG9yeSBVVUlEIGFuZCBhIHJldmlzaW9uLiAgV2Ugd2FudApAQCAtNTE0LDIzICs2MDQsMjIgQEAKIAogc3ZuLXJlbW90ZS48bmFtZT4ucmV3cml0ZVJvb3Q6OgogCVRoaXMgYWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSByZXBvc2l0b3JpZXMgZnJvbSBhbHRlcm5hdGUKLQlVUkxzLiAgRm9yIGV4YW1wbGUsIGFuIGFkbWluaXN0cmF0b3IgY291bGQgcnVuICdnaXQtc3ZuJyBvbiB0aGUKKwlVUkxzLiAgRm9yIGV4YW1wbGUsIGFuIGFkbWluaXN0cmF0b3IgY291bGQgcnVuICdnaXQgc3ZuJyBvbiB0aGUKIAlzZXJ2ZXIgbG9jYWxseSAoYWNjZXNzaW5nIHZpYSBmaWxlOi8vKSBidXQgd2lzaCB0byBkaXN0cmlidXRlCiAJdGhlIHJlcG9zaXRvcnkgd2l0aCBhIHB1YmxpYyBodHRwOi8vIG9yIHN2bjovLyBVUkwgaW4gdGhlCiAJbWV0YWRhdGEgc28gdXNlcnMgb2YgaXQgd2lsbCBzZWUgdGhlIHB1YmxpYyBVUkwuCiAKIHN2bi5icm9rZW5TeW1saW5rV29ya2Fyb3VuZDo6Ci1UaGlzIGRpc2FibGVzIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBjaGVja3MgdG8gd29ya2Fyb3VuZCBicm9rZW4gc3ltbGlua3MKLWNoZWNrZWQgaW50byBTVk4gYnkgYnJva2VuIGNsaWVudHMuICBTZXQgdGhpcyBvcHRpb24gdG8gImZhbHNlIiBpZiB5b3UKLXRyYWNrIGEgU1ZOIHJlcG9zaXRvcnkgd2l0aCBtYW55IGVtcHR5IGJsb2JzIHRoYXQgYXJlIG5vdCBzeW1saW5rcy4KLVRoaXMgb3B0aW9uIG1heSBiZSBjaGFuZ2VkIHdoaWxlICJnaXQtc3ZuIiBpcyBydW5uaW5nIGFuZCB0YWtlIGVmZmVjdCBvbgotdGhlIG5leHQgcmV2aXNpb24gZmV0Y2hlZC4gIElmIHVuc2V0LCBnaXQtc3ZuIGFzc3VtZXMgdGhpcyBvcHRpb24gdG8gYmUKLSJ0cnVlIi4KLQotLS0KKwlUaGlzIGRpc2FibGVzIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBjaGVja3MgdG8gd29ya2Fyb3VuZAorCWJyb2tlbiBzeW1saW5rcyBjaGVja2VkIGludG8gU1ZOIGJ5IGJyb2tlbiBjbGllbnRzLiAgU2V0IHRoaXMKKwlvcHRpb24gdG8gImZhbHNlIiBpZiB5b3UgdHJhY2sgYSBTVk4gcmVwb3NpdG9yeSB3aXRoIG1hbnkKKwllbXB0eSBibG9icyB0aGF0IGFyZSBub3Qgc3ltbGlua3MuICBUaGlzIG9wdGlvbiBtYXkgYmUgY2hhbmdlZAorCXdoaWxlICdnaXQgc3ZuJyBpcyBydW5uaW5nIGFuZCB0YWtlIGVmZmVjdCBvbiB0aGUgbmV4dAorCXJldmlzaW9uIGZldGNoZWQuICBJZiB1bnNldCwgJ2dpdCBzdm4nIGFzc3VtZXMgdGhpcyBvcHRpb24gdG8KKwliZSAidHJ1ZSIuCiAKIFNpbmNlIHRoZSBub01ldGFkYXRhLCByZXdyaXRlUm9vdCwgdXNlU3Zuc3luY1Byb3BzIGFuZCB1c2VTdm1Qcm9wcwotb3B0aW9ucyBhbGwgYWZmZWN0IHRoZSBtZXRhZGF0YSBnZW5lcmF0ZWQgYW5kIHVzZWQgYnkgJ2dpdC1zdm4nOyB0aGV5CitvcHRpb25zIGFsbCBhZmZlY3QgdGhlIG1ldGFkYXRhIGdlbmVyYXRlZCBhbmQgdXNlZCBieSAnZ2l0IHN2bic7IHRoZXkKICptdXN0KiBiZSBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBiZWZvcmUgYW55IGhpc3RvcnkgaXMgaW1wb3J0ZWQKIGFuZCB0aGVzZSBzZXR0aW5ncyBzaG91bGQgbmV2ZXIgYmUgY2hhbmdlZCBvbmNlIHRoZXkgYXJlIHNldC4KIApAQCAtNTQ4LDcgKzYzNyw3IEBACiAJZ2l0IHN2biBjbG9uZSBodHRwOi8vc3ZuLmV4YW1wbGUuY29tL3Byb2plY3QvdHJ1bmsKICMgRW50ZXIgdGhlIG5ld2x5IGNsb25lZCBkaXJlY3Rvcnk6CiAJY2QgdHJ1bmsKLSMgWW91IHNob3VsZCBiZSBvbiBtYXN0ZXIgYnJhbmNoLCBkb3VibGUtY2hlY2sgd2l0aCBnaXQtYnJhbmNoCisjIFlvdSBzaG91bGQgYmUgb24gbWFzdGVyIGJyYW5jaCwgZG91YmxlLWNoZWNrIHdpdGggJ2dpdCBicmFuY2gnCiAJZ2l0IGJyYW5jaAogIyBEbyBzb21lIHdvcmsgYW5kIGNvbW1pdCBsb2NhbGx5IHRvIGdpdDoKIAlnaXQgY29tbWl0IC4uLgpAQCAtNTc5LDEyICs2NjgsMTIgQEAKICMgb2YgZGNvbW1pdC9yZWJhc2Uvc2hvdy1pZ25vcmUgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGFib3ZlLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBpbml0aWFsICdnaXQtc3ZuIGNsb25lJyBjYW4gYmUgcXVpdGUgdGltZS1jb25zdW1pbmcKK1RoZSBpbml0aWFsICdnaXQgc3ZuIGNsb25lJyBjYW4gYmUgcXVpdGUgdGltZS1jb25zdW1pbmcKIChlc3BlY2lhbGx5IGZvciBsYXJnZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcmllcykuIElmIG11bHRpcGxlCiBwZW9wbGUgKG9yIG9uZSBwZXJzb24gd2l0aCBtdWx0aXBsZSBtYWNoaW5lcykgd2FudCB0byB1c2UKLSdnaXQtc3ZuJyB0byBpbnRlcmFjdCB3aXRoIHRoZSBzYW1lIFN1YnZlcnNpb24gcmVwb3NpdG9yeSwgeW91IGNhbgotZG8gdGhlIGluaXRpYWwgJ2dpdC1zdm4gY2xvbmUnIHRvIGEgcmVwb3NpdG9yeSBvbiBhIHNlcnZlciBhbmQKLWhhdmUgZWFjaCBwZXJzb24gY2xvbmUgdGhhdCByZXBvc2l0b3J5IHdpdGggJ2dpdC1jbG9uZSc6CisnZ2l0IHN2bicgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc2FtZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnksIHlvdSBjYW4KK2RvIHRoZSBpbml0aWFsICdnaXQgc3ZuIGNsb25lJyB0byBhIHJlcG9zaXRvcnkgb24gYSBzZXJ2ZXIgYW5kCitoYXZlIGVhY2ggcGVyc29uIGNsb25lIHRoYXQgcmVwb3NpdG9yeSB3aXRoICdnaXQgY2xvbmUnOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRG8gdGhlIGluaXRpYWwgaW1wb3J0IG9uIGEgc2VydmVyCkBAIC01OTgsNyArNjg3LDcgQEAKIAlnaXQgZmV0Y2gKICMgQ3JlYXRlIGEgbG9jYWwgYnJhbmNoIGZyb20gb25lIG9mIHRoZSBicmFuY2hlcyBqdXN0IGZldGNoZWQKIAlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyIEZFVENIX0hFQUQKLSMgSW5pdGlhbGl6ZSBnaXQtc3ZuIGxvY2FsbHkgKGJlIHN1cmUgdG8gdXNlIHRoZSBzYW1lIFVSTCBhbmQgLVQvLWIvLXQgb3B0aW9ucyBhcyB3ZXJlIHVzZWQgb24gc2VydmVyKQorIyBJbml0aWFsaXplICdnaXQgc3ZuJyBsb2NhbGx5IChiZSBzdXJlIHRvIHVzZSB0aGUgc2FtZSBVUkwgYW5kIC1ULy1iLy10IG9wdGlvbnMgYXMgd2VyZSB1c2VkIG9uIHNlcnZlcikKIAlnaXQgc3ZuIGluaXQgaHR0cDovL3N2bi5leGFtcGxlLmNvbS9wcm9qZWN0CiAjIFB1bGwgdGhlIGxhdGVzdCBjaGFuZ2VzIGZyb20gU3VidmVyc2lvbgogCWdpdCBzdm4gcmViYXNlCkBAIC02MDcsNyArNjk2LDcgQEAKIFJFQkFTRSBWUy4gUFVMTC9NRVJHRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU9yaWdpbmFsbHksICdnaXQtc3ZuJyByZWNvbW1lbmRlZCB0aGF0IHRoZSAncmVtb3Rlcy9naXQtc3ZuJyBicmFuY2ggYmUKK09yaWdpbmFsbHksICdnaXQgc3ZuJyByZWNvbW1lbmRlZCB0aGF0IHRoZSAncmVtb3Rlcy9naXQtc3ZuJyBicmFuY2ggYmUKIHB1bGxlZCBvciBtZXJnZWQgZnJvbS4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgYXV0aG9yIGZhdm9yZWQKIGBnaXQgc3ZuIHNldC10cmVlIEJgIHRvIGNvbW1pdCBhIHNpbmdsZSBoZWFkIHJhdGhlciB0aGFuIHRoZQogYGdpdCBzdm4gc2V0LXRyZWUgQS4uQmAgbm90YXRpb24gdG8gY29tbWl0IG11bHRpcGxlIGNvbW1pdHMuCkBAIC02MjIsNyArNzExLDcgQEAKIERFU0lHTiBQSElMT1NPUEhZCiAtLS0tLS0tLS0tLS0tLS0tLQogTWVyZ2UgdHJhY2tpbmcgaW4gU3VidmVyc2lvbiBpcyBsYWNraW5nIGFuZCBkb2luZyBicmFuY2hlZCBkZXZlbG9wbWVudAotd2l0aCBTdWJ2ZXJzaW9uIGNhbiBiZSBjdW1iZXJzb21lIGFzIGEgcmVzdWx0LiAgV2hpbGUgJ2dpdC1zdm4nIGNhbiB0cmFjaword2l0aCBTdWJ2ZXJzaW9uIGNhbiBiZSBjdW1iZXJzb21lIGFzIGEgcmVzdWx0LiAgV2hpbGUgJ2dpdCBzdm4nIGNhbiB0cmFjawogY29weSBoaXN0b3J5IChpbmNsdWRpbmcgYnJhbmNoZXMgYW5kIHRhZ3MpIGZvciByZXBvc2l0b3JpZXMgYWRvcHRpbmcgYQogc3RhbmRhcmQgbGF5b3V0LCBpdCBjYW5ub3QgeWV0IHJlcHJlc2VudCBtZXJnZSBoaXN0b3J5IHRoYXQgaGFwcGVuZWQKIGluc2lkZSBnaXQgYmFjayB1cHN0cmVhbSB0byBTVk4gdXNlcnMuICBUaGVyZWZvcmUgaXQgaXMgYWR2aXNlZCB0aGF0CkBAIC02MzMsMjUgKzcyMiwyNSBAQAogLS0tLS0tLQogCiBGb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eSBhbmQgaW50ZXJvcGVyYXRpbmcgd2l0aCBhIGxlc3MtY2FwYWJsZSBzeXN0ZW0KLShTVk4pLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFsbCAnZ2l0LXN2bicgdXNlcnMgY2xvbmUsIGZldGNoIGFuZCBkY29tbWl0Ci1kaXJlY3RseSBmcm9tIHRoZSBTVk4gc2VydmVyLCBhbmQgYXZvaWQgYWxsICdnaXQtY2xvbmUnLydwdWxsJy8nbWVyZ2UnLydwdXNoJworKFNWTiksIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYWxsICdnaXQgc3ZuJyB1c2VycyBjbG9uZSwgZmV0Y2ggYW5kIGRjb21taXQKK2RpcmVjdGx5IGZyb20gdGhlIFNWTiBzZXJ2ZXIsIGFuZCBhdm9pZCBhbGwgJ2dpdCBjbG9uZScvJ3B1bGwnLydtZXJnZScvJ3B1c2gnCiBvcGVyYXRpb25zIGJldHdlZW4gZ2l0IHJlcG9zaXRvcmllcyBhbmQgYnJhbmNoZXMuICBUaGUgcmVjb21tZW5kZWQKIG1ldGhvZCBvZiBleGNoYW5naW5nIGNvZGUgYmV0d2VlbiBnaXQgYnJhbmNoZXMgYW5kIHVzZXJzIGlzCi0nZ2l0LWZvcm1hdC1wYXRjaCcgYW5kICdnaXQtYW0nLCBvciBqdXN0ICdkY29tbWl0J2luZyB0byB0aGUgU1ZOIHJlcG9zaXRvcnkuCisnZ2l0IGZvcm1hdC1wYXRjaCcgYW5kICdnaXQgYW0nLCBvciBqdXN0ICdkY29tbWl0J2luZyB0byB0aGUgU1ZOIHJlcG9zaXRvcnkuCiAKLVJ1bm5pbmcgJ2dpdC1tZXJnZScgb3IgJ2dpdC1wdWxsJyBpcyBOT1QgcmVjb21tZW5kZWQgb24gYSBicmFuY2ggeW91CitSdW5uaW5nICdnaXQgbWVyZ2UnIG9yICdnaXQgcHVsbCcgaXMgTk9UIHJlY29tbWVuZGVkIG9uIGEgYnJhbmNoIHlvdQogcGxhbiB0byAnZGNvbW1pdCcgZnJvbS4gIFN1YnZlcnNpb24gZG9lcyBub3QgcmVwcmVzZW50IG1lcmdlcyBpbiBhbnkKIHJlYXNvbmFibGUgb3IgdXNlZnVsIGZhc2hpb247IHNvIHVzZXJzIHVzaW5nIFN1YnZlcnNpb24gY2Fubm90IHNlZSBhbnkKIG1lcmdlcyB5b3UndmUgbWFkZS4gIEZ1cnRoZXJtb3JlLCBpZiB5b3UgbWVyZ2Ugb3IgcHVsbCBmcm9tIGEgZ2l0IGJyYW5jaAogdGhhdCBpcyBhIG1pcnJvciBvZiBhbiBTVk4gYnJhbmNoLCAnZGNvbW1pdCcgbWF5IGNvbW1pdCB0byB0aGUgd3JvbmcKIGJyYW5jaC4KIAotJ2dpdC1jbG9uZScgZG9lcyBub3QgY2xvbmUgYnJhbmNoZXMgdW5kZXIgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IG9yCi1hbnkgJ2dpdC1zdm4nIG1ldGFkYXRhLCBvciBjb25maWcuICBTbyByZXBvc2l0b3JpZXMgY3JlYXRlZCBhbmQgbWFuYWdlZCB3aXRoCi11c2luZyAnZ2l0LXN2bicgc2hvdWxkIHVzZSAncnN5bmMnIGZvciBjbG9uaW5nLCBpZiBjbG9uaW5nIGlzIHRvIGJlIGRvbmUKKydnaXQgY2xvbmUnIGRvZXMgbm90IGNsb25lIGJyYW5jaGVzIHVuZGVyIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSBvcgorYW55ICdnaXQgc3ZuJyBtZXRhZGF0YSwgb3IgY29uZmlnLiAgU28gcmVwb3NpdG9yaWVzIGNyZWF0ZWQgYW5kIG1hbmFnZWQgd2l0aAordXNpbmcgJ2dpdCBzdm4nIHNob3VsZCB1c2UgJ3JzeW5jJyBmb3IgY2xvbmluZywgaWYgY2xvbmluZyBpcyB0byBiZSBkb25lCiBhdCBhbGwuCiAKLVNpbmNlICdkY29tbWl0JyB1c2VzIHJlYmFzZSBpbnRlcm5hbGx5LCBhbnkgZ2l0IGJyYW5jaGVzIHlvdSAnZ2l0LXB1c2gnIHRvCitTaW5jZSAnZGNvbW1pdCcgdXNlcyByZWJhc2UgaW50ZXJuYWxseSwgYW55IGdpdCBicmFuY2hlcyB5b3UgJ2dpdCBwdXNoJyB0bwogYmVmb3JlICdkY29tbWl0JyBvbiB3aWxsIHJlcXVpcmUgZm9yY2luZyBhbiBvdmVyd3JpdGUgb2YgdGhlIGV4aXN0aW5nIHJlZgogb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiAgVGhpcyBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBiYWQgcHJhY3RpY2UsCiBzZWUgdGhlIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KQEAgLTY2MSw2ICs3NTAsMTYgQEAKIHlvdSd2ZSBhbHJlYWR5IHB1c2hlZCB0byBhIHJlbW90ZSByZXBvc2l0b3J5IGZvciBvdGhlciB1c2VycywgYW5kCiBkY29tbWl0IHdpdGggU1ZOIGlzIGFuYWxvZ291cyB0byB0aGF0LgogCitXaGVuIHVzaW5nIG11bHRpcGxlIC0tYnJhbmNoZXMgb3IgLS10YWdzLCAnZ2l0IHN2bicgZG9lcyBub3QgYXV0b21hdGljYWxseQoraGFuZGxlIG5hbWUgY29sbGlzaW9ucyAoZm9yIGV4YW1wbGUsIGlmIHR3byBicmFuY2hlcyBmcm9tIGRpZmZlcmVudCBwYXRocyBoYXZlCit0aGUgc2FtZSBuYW1lLCBvciBpZiBhIGJyYW5jaCBhbmQgYSB0YWcgaGF2ZSB0aGUgc2FtZSBuYW1lKS4gIEluIHRoZXNlIGNhc2VzLAordXNlICdpbml0JyB0byBzZXQgdXAgeW91ciBnaXQgcmVwb3NpdG9yeSB0aGVuLCBiZWZvcmUgeW91ciBmaXJzdCAnZmV0Y2gnLCBlZGl0Cit0aGUgLmdpdC9jb25maWcgZmlsZSBzbyB0aGF0IHRoZSBicmFuY2hlcyBhbmQgdGFncyBhcmUgYXNzb2NpYXRlZCB3aXRoCitkaWZmZXJlbnQgbmFtZSBzcGFjZXMuICBGb3IgZXhhbXBsZToKKworCWJyYW5jaGVzID0gc3RhYmxlLyo6cmVmcy9yZW1vdGVzL3N2bi9zdGFibGUvKgorCWJyYW5jaGVzID0gZGVidWcvKjpyZWZzL3JlbW90ZXMvc3ZuL2RlYnVnLyoKKwogQlVHUwogLS0tLQogCkBAIC02NzcsNyArNzc2LDcgQEAKIENPTkZJR1VSQVRJT04KIC0tLS0tLS0tLS0tLS0KIAotJ2dpdC1zdm4nIHN0b3JlcyBbc3ZuLXJlbW90ZV0gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpbiB0aGUKKydnaXQgc3ZuJyBzdG9yZXMgW3N2bi1yZW1vdGVdIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlCiByZXBvc2l0b3J5IC5naXQvY29uZmlnIGZpbGUuICBJdCBpcyBzaW1pbGFyIHRoZSBjb3JlIGdpdAogW3JlbW90ZV0gc2VjdGlvbnMgZXhjZXB0ICdmZXRjaCcga2V5cyBkbyBub3QgYWNjZXB0IGdsb2IKIGFyZ3VtZW50czsgYnV0IHRoZXkgYXJlIGluc3RlYWQgaGFuZGxlZCBieSB0aGUgJ2JyYW5jaGVzJwpAQCAtNjk4LDcgKzc5Nyw3IEBACiBob3dldmVyIHRoZSByZW1vdGUgd2lsZGNhcmQgbWF5IGJlIGFueXdoZXJlIGFzIGxvbmcgYXMgaXQncyBhbgogaW5kZXBlbmRlbnQgcGF0aCBjb21wb25lbnQgKHN1cnJvdW5kZWQgYnkgJy8nIG9yIEVPTCkuICAgVGhpcwogdHlwZSBvZiBjb25maWd1cmF0aW9uIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgJ2luaXQnIGFuZAotc2hvdWxkIGJlIG1hbnVhbGx5IGVudGVyZWQgd2l0aCBhIHRleHQtZWRpdG9yIG9yIHVzaW5nICdnaXQtY29uZmlnJy4KK3Nob3VsZCBiZSBtYW51YWxseSBlbnRlcmVkIHdpdGggYSB0ZXh0LWVkaXRvciBvciB1c2luZyAnZ2l0IGNvbmZpZycuCiAKIFNFRSBBTFNPCiAtLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtd3JpdGUtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dAppbmRleCAyNmQzODUwLi5jODg5OWQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dApAQCAtMTIsNyArMTIsOCBAQAogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLUNyZWF0ZXMgYSB0cmVlIG9iamVjdCB1c2luZyB0aGUgY3VycmVudCBpbmRleC4KK0NyZWF0ZXMgYSB0cmVlIG9iamVjdCB1c2luZyB0aGUgY3VycmVudCBpbmRleC4gVGhlIG5hbWUgb2YgdGhlIG5ldwordHJlZSBvYmplY3QgaXMgcHJpbnRlZCB0byBzdGFuZGFyZCBvdXRwdXQuCiAKIFRoZSBpbmRleCBtdXN0IGJlIGluIGEgZnVsbHkgbWVyZ2VkIHN0YXRlLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKaW5kZXggOGZiZTE4Ny4uZjkxY2FiYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dApAQCAtNDMsNyArNDMsMjIgQEAKIGJyYW5jaCBvZiB0aGUgYGdpdC5naXRgIHJlcG9zaXRvcnkuCiBEb2N1bWVudGF0aW9uIGZvciBvbGRlciByZWxlYXNlcyBhcmUgYXZhaWxhYmxlIGhlcmU6CiAKLSogbGluazp2MS42LjMvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjYuM10KKyogbGluazp2MS42LjQuMy9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNi40LjNdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy0xLjYuNC4zLnR4dFsxLjYuNC4zXSwKKyAgbGluazpSZWxOb3Rlcy0xLjYuNC4yLnR4dFsxLjYuNC4yXSwKKyAgbGluazpSZWxOb3Rlcy0xLjYuNC4xLnR4dFsxLjYuNC4xXSwKKyAgbGluazpSZWxOb3Rlcy0xLjYuNC50eHRbMS42LjRdLgorCisqIGxpbms6djEuNi4zLjQvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjYuMy40XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMtMS42LjMuNC50eHRbMS42LjMuNF0sCisgIGxpbms6UmVsTm90ZXMtMS42LjMuMy50eHRbMS42LjMuM10sCisgIGxpbms6UmVsTm90ZXMtMS42LjMuMi50eHRbMS42LjMuMl0sCisgIGxpbms6UmVsTm90ZXMtMS42LjMuMS50eHRbMS42LjMuMV0sCisgIGxpbms6UmVsTm90ZXMtMS42LjMudHh0WzEuNi4zXS4KIAogKiByZWxlYXNlIG5vdGVzIGZvcgogICBsaW5rOlJlbE5vdGVzLTEuNi4yLjUudHh0WzEuNi4yLjVdLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dAppbmRleCAxYzczNjczLi5hY2M0MDhkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dApAQCAtMjYsOCArMjYsMTEgQEAKIAogVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGN1cnJlbnRseSBkZWZpbmVkIGhvb2tzLgogCitIT09LUworLS0tLS0KKwogYXBwbHlwYXRjaC1tc2cKLS0tLS0tLS0tLS0tLS0tCit+fn5+fn5+fn5+fn5+fgogCiBUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0LWFtJyBzY3JpcHQuICBJdCB0YWtlcyBhIHNpbmdsZQogcGFyYW1ldGVyLCB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGhvbGRzIHRoZSBwcm9wb3NlZCBjb21taXQKQEAgLTQzLDcgKzQ2LDcgQEAKICdjb21taXQtbXNnJyBob29rLCBpZiB0aGUgbGF0dGVyIGlzIGVuYWJsZWQuCiAKIHByZS1hcHBseXBhdGNoCi0tLS0tLS0tLS0tLS0tLQorfn5+fn5+fn5+fn5+fn4KIAogVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1hbScuICBJdCB0YWtlcyBubyBwYXJhbWV0ZXIsIGFuZCBpcwogaW52b2tlZCBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZCwgYnV0IGJlZm9yZSBhIGNvbW1pdCBpcyBtYWRlLgpAQCAtNTgsNyArNjEsNyBAQAogJ3ByZS1jb21taXQnIGhvb2ssIGlmIHRoZSBsYXR0ZXIgaXMgZW5hYmxlZC4KIAogcG9zdC1hcHBseXBhdGNoCi0tLS0tLS0tLS0tLS0tLS0KK35+fn5+fn5+fn5+fn5+fgogCiBUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0LWFtJy4gIEl0IHRha2VzIG5vIHBhcmFtZXRlciwKIGFuZCBpcyBpbnZva2VkIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkIGFuZCBhIGNvbW1pdCBpcyBtYWRlLgpAQCAtNjcsNyArNzAsNyBAQAogdGhlIG91dGNvbWUgb2YgJ2dpdC1hbScuCiAKIHByZS1jb21taXQKLS0tLS0tLS0tLS0KK35+fn5+fn5+fn4KIAogVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1jb21taXQnLCBhbmQgY2FuIGJlIGJ5cGFzc2VkCiB3aXRoIGBcLS1uby12ZXJpZnlgIG9wdGlvbi4gIEl0IHRha2VzIG5vIHBhcmFtZXRlciwgYW5kIGlzCkBAIC04NCw3ICs4Nyw3IEBACiB0byBtb2RpZnkgdGhlIGNvbW1pdCBtZXNzYWdlLgogCiBwcmVwYXJlLWNvbW1pdC1tc2cKLS0tLS0tLS0tLS0tLS0tLS0tLQorfn5+fn5+fn5+fn5+fn5+fn5+CiAKIFRoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQtY29tbWl0JyByaWdodCBhZnRlciBwcmVwYXJpbmcgdGhlCiBkZWZhdWx0IGxvZyBtZXNzYWdlLCBhbmQgYmVmb3JlIHRoZSBlZGl0b3IgaXMgc3RhcnRlZC4KQEAgLTEwOSw3ICsxMTIsNyBAQAogb3V0IHRoZSBgQ29uZmxpY3RzOmAgcGFydCBvZiBhIG1lcmdlJ3MgY29tbWl0IG1lc3NhZ2UuCiAKIGNvbW1pdC1tc2cKLS0tLS0tLS0tLS0KK35+fn5+fn5+fn4KIAogVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1jb21taXQnLCBhbmQgY2FuIGJlIGJ5cGFzc2VkCiB3aXRoIGBcLS1uby12ZXJpZnlgIG9wdGlvbi4gIEl0IHRha2VzIGEgc2luZ2xlIHBhcmFtZXRlciwgdGhlCkBAIC0xMjYsNyArMTI5LDcgQEAKICJTaWduZWQtb2ZmLWJ5IiBsaW5lcywgYW5kIGFib3J0cyB0aGUgY29tbWl0IGlmIG9uZSBpcyBmb3VuZC4KIAogcG9zdC1jb21taXQKLS0tLS0tLS0tLS0tCit+fn5+fn5+fn5+fgogCiBUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0LWNvbW1pdCcuICBJdCB0YWtlcyBubwogcGFyYW1ldGVyLCBhbmQgaXMgaW52b2tlZCBhZnRlciBhIGNvbW1pdCBpcyBtYWRlLgpAQCAtMTM1LDE0ICsxMzgsMTQgQEAKIHRoZSBvdXRjb21lIG9mICdnaXQtY29tbWl0Jy4KIAogcHJlLXJlYmFzZQotLS0tLS0tLS0tLQorfn5+fn5+fn5+fgogCiBUaGlzIGhvb2sgaXMgY2FsbGVkIGJ5ICdnaXQtcmViYXNlJyBhbmQgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBhIGJyYW5jaAogZnJvbSBnZXR0aW5nIHJlYmFzZWQuCiAKIAogcG9zdC1jaGVja291dAotLS0tLS0tLS0tLS0KK35+fn5+fn5+fn5+fn4KIAogVGhpcyBob29rIGlzIGludm9rZWQgd2hlbiBhICdnaXQtY2hlY2tvdXQnIGlzIHJ1biBhZnRlciBoYXZpbmcgdXBkYXRlZCB0aGUKIHdvcmt0cmVlLiAgVGhlIGhvb2sgaXMgZ2l2ZW4gdGhyZWUgcGFyYW1ldGVyczogdGhlIHJlZiBvZiB0aGUgcHJldmlvdXMgSEVBRCwKQEAgLTE2MCw3ICsxNjMsNyBAQAogcHJvcGVydGllcy4KIAogcG9zdC1tZXJnZQotLS0tLS0tLS0tLS0KK35+fn5+fn5+fn4KIAogVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1tZXJnZScsIHdoaWNoIGhhcHBlbnMgd2hlbiBhICdnaXQtcHVsbCcKIGlzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5LiAgVGhlIGhvb2sgdGFrZXMgYSBzaW5nbGUgcGFyYW1ldGVyLCBhIHN0YXR1cwpAQCAtMTc1LDcgKzE3OCw3IEBACiAKIFtbcHJlLXJlY2VpdmVdXQogcHJlLXJlY2VpdmUKLS0tLS0tLS0tLS0tCit+fn5+fn5+fn5+fgogCiBUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0LXJlY2VpdmUtcGFjaycgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5LAogd2hpY2ggaGFwcGVucyB3aGVuIGEgJ2dpdC1wdXNoJyBpcyBkb25lIG9uIGEgbG9jYWwgcmVwb3NpdG9yeS4KQEAgLTIwNCw3ICsyMDcsNyBAQAogCiBbW3VwZGF0ZV1dCiB1cGRhdGUKLS0tLS0tLQorfn5+fn5+CiAKIFRoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQtcmVjZWl2ZS1wYWNrJyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksCiB3aGljaCBoYXBwZW5zIHdoZW4gYSAnZ2l0LXB1c2gnIGlzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5LgpAQCAtMjQ3LDcgKzI1MCw3IEBACiAKIFtbcG9zdC1yZWNlaXZlXV0KIHBvc3QtcmVjZWl2ZQotLS0tLS0tLS0tLS0tCit+fn5+fn5+fn5+fn4KIAogVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1yZWNlaXZlLXBhY2snIG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwKIHdoaWNoIGhhcHBlbnMgd2hlbiBhICdnaXQtcHVzaCcgaXMgZG9uZSBvbiBhIGxvY2FsIHJlcG9zaXRvcnkuCkBAIC0yNzcsNyArMjgwLDcgQEAKIAogW1twb3N0LXVwZGF0ZV1dCiBwb3N0LXVwZGF0ZQotLS0tLS0tLS0tLS0KK35+fn5+fn5+fn5+CiAKIFRoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQtcmVjZWl2ZS1wYWNrJyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksCiB3aGljaCBoYXBwZW5zIHdoZW4gYSAnZ2l0LXB1c2gnIGlzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5LgpAQCAtMzA4LDcgKzMxMSw3IEBACiBmb3IgdGhlIHVzZXIuCiAKIHByZS1hdXRvLWdjCi0tLS0tLS0tLS0tLQorfn5+fn5+fn5+fn4KIAogVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1nYyAtLWF1dG8nLiBJdCB0YWtlcyBubyBwYXJhbWV0ZXIsIGFuZAogZXhpdGluZyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBmcm9tIHRoaXMgc2NyaXB0IGNhdXNlcyB0aGUgJ2dpdC1nYyAtLWF1dG8nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdG1vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dAppbmRleCBkMWExN2UyLi41ZGFmNzUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdG1vZHVsZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQKQEAgLTMwLDYgKzMwLDE3IEBACiBzdWJtb2R1bGUuPG5hbWU+LnVybDo6CiAJRGVmaW5lcyBhbiB1cmwgZnJvbSB3aGVyZSB0aGUgc3VibW9kdWxlIHJlcG9zaXRvcnkgY2FuIGJlIGNsb25lZC4KIAorc3VibW9kdWxlLjxuYW1lPi51cGRhdGU6OgorCURlZmluZXMgd2hhdCB0byBkbyB3aGVuIHRoZSBzdWJtb2R1bGUgaXMgdXBkYXRlZCBieSB0aGUgc3VwZXJwcm9qZWN0LgorCUlmICdjaGVja291dCcgKHRoZSBkZWZhdWx0KSwgdGhlIG5ldyBjb21taXQgc3BlY2lmaWVkIGluIHRoZQorCXN1cGVycHJvamVjdCB3aWxsIGJlIGNoZWNrZWQgb3V0IGluIHRoZSBzdWJtb2R1bGUgb24gYSBkZXRhY2hlZCBIRUFELgorCUlmICdyZWJhc2UnLCB0aGUgY3VycmVudCBicmFuY2ggb2YgdGhlIHN1Ym1vZHVsZSB3aWxsIGJlIHJlYmFzZWQgb250bworCXRoZSBjb21taXQgc3BlY2lmaWVkIGluIHRoZSBzdXBlcnByb2plY3QuIElmICdtZXJnZScsIHRoZSBjb21taXQKKwlzcGVjaWZpZWQgaW4gdGhlIHN1cGVycHJvamVjdCB3aWxsIGJlIG1lcmdlZCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaAorCWluIHRoZSBzdWJtb2R1bGUuCisJVGhpcyBjb25maWcgb3B0aW9uIGlzIG92ZXJyaWRkZW4gaWYgJ2dpdCBzdWJtb2R1bGUgdXBkYXRlJyBpcyBnaXZlbgorCXRoZSAnLS1tZXJnZScgb3IgJy0tcmViYXNlJyBvcHRpb25zLgorCiAKIEVYQU1QTEVTCiAtLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1jb25maWcudHh0CmluZGV4IDQ4MzJiYzcuLmMwZjk2ZTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVyZ2UtY29uZmlnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lcmdlLWNvbmZpZy50eHQKQEAgLTIzLDcgKzIzLDcgQEAKIAlDb250cm9scyB3aGljaCBtZXJnZSByZXNvbHV0aW9uIHByb2dyYW0gaXMgdXNlZCBieQogCWxpbmtnaXQ6Z2l0LW1lcmdldG9vbFsxXS4gIFZhbGlkIGJ1aWx0LWluIHZhbHVlcyBhcmU6ICJrZGlmZjMiLAogCSJ0a2RpZmYiLCAibWVsZCIsICJ4eGRpZmYiLCAiZW1lcmdlIiwgInZpbWRpZmYiLCAiZ3ZpbWRpZmYiLAotCSJkaWZmdXNlIiwgImVjbWVyZ2UiLCAidG9ydG9pc2VtZXJnZSIsIGFuZAorCSJkaWZmdXNlIiwgImVjbWVyZ2UiLCAidG9ydG9pc2VtZXJnZSIsICJhcmF4aXMiLCBhbmQKIAkib3BlbmRpZmYiLiAgQW55IG90aGVyIHZhbHVlIGlzIHRyZWF0ZWQgaXMgY3VzdG9tIG1lcmdlIHRvb2wKIAlhbmQgdGhlcmUgbXVzdCBiZSBhIGNvcnJlc3BvbmRpbmcgbWVyZ2V0b29sLjx0b29sPi5jbWQgb3B0aW9uLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dAppbmRleCAxMWVlYzk0Li5iZjY2MTE2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQKQEAgLTIwMSw2ICsyMDEsMTAgQEAKIAogCVN0b3Agd2hlbiBhIGdpdmVuIHBhdGggZGlzYXBwZWFycyBmcm9tIHRoZSB0cmVlLgogCistLW1lcmdlczo6CisKKwlQcmludCBvbmx5IG1lcmdlIGNvbW1pdHMuCisKIC0tbm8tbWVyZ2VzOjoKIAogCURvIG5vdCBwcmludCBjb21taXRzIHdpdGggbW9yZSB0aGFuIG9uZSBwYXJlbnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGFyc2Utb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGFyc2Utb3B0aW9ucy50eHQKaW5kZXggZTMwYzYwMi4uNTBmOWU5YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1wYXJzZS1vcHRpb25zLnR4dApAQCAtNjAsMTMgKzYwLDEzIEBACiAuIGluIGBjbWRfZm9vKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KWAKICAgY2FsbAogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9mb29fb3B0aW9ucywgYnVpbHRpbl9mb29fdXNhZ2UsIGZsYWdzKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fZm9vX29wdGlvbnMsIGJ1aWx0aW5fZm9vX3VzYWdlLCBmbGFncyk7CiArCiBgcGFyc2Vfb3B0aW9ucygpYCB3aWxsIGZpbHRlciBvdXQgdGhlIHByb2Nlc3NlZCBvcHRpb25zIG9mIGBhcmd2W11gIGFuZCBsZWF2ZSB0aGUKIG5vbi1vcHRpb24gYXJndW1lbnRzIGluIGBhcmd2W11gLgogYGFyZ2NgIGlzIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSBiZWNhdXNlIG9mIHRoZSBhc3NpZ25tZW50LgogKwotWW91IGNhbiBhbHNvIHBhc3MgTlVMTCBpbnN0ZWFkIG9mIGEgdXNhZ2UgYXJyYXkgYXMgZm91cnRoIHBhcmFtZXRlciBvZgorWW91IGNhbiBhbHNvIHBhc3MgTlVMTCBpbnN0ZWFkIG9mIGEgdXNhZ2UgYXJyYXkgYXMgdGhlIGZpZnRoIHBhcmFtZXRlciBvZgogcGFyc2Vfb3B0aW9ucygpLCB0byBhdm9pZCBkaXNwbGF5aW5nIGEgaGVscCBzY3JlZW4gd2l0aCB1c2FnZSBpbmZvIGFuZAogb3B0aW9uIGxpc3QuICBUaGlzIHNob3VsZCBvbmx5IGJlIGRvbmUgaWYgbmVjZXNzYXJ5LCBlLmcuIHRvIGltcGxlbWVudAogYSBsaW1pdGVkIHBhcnNlciBmb3Igb25seSBhIHN1YnNldCBvZiB0aGUgb3B0aW9ucyB0aGF0IG5lZWRzIHRvIGJlIHJ1bgpAQCAtMTM3LDYgKzEzNywxMCBAQAogCUludHJvZHVjZSBhIGJvb2xlYW4gb3B0aW9uLgogCUlmIHVzZWQsIGBpbnRfdmFyYCBpcyBiaXR3aXNlLW9yZWQgd2l0aCBgbWFza2AuCiAKK2BPUFRfTkVHQklUKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24sIG1hc2spYDo6CisJSW50cm9kdWNlIGEgYm9vbGVhbiBvcHRpb24uCisJSWYgdXNlZCwgYGludF92YXJgIGlzIGJpdHdpc2UtYW5kZWQgd2l0aCB0aGUgaW52ZXJ0ZWQgYG1hc2tgLgorCiBgT1BUX1NFVF9JTlQoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbiwgaW50ZWdlcilgOjoKIAlJbnRyb2R1Y2UgYSBib29sZWFuIG9wdGlvbi4KIAlJZiB1c2VkLCBzZXQgYGludF92YXJgIHRvIGBpbnRlZ2VyYC4KQEAgLTE2Myw5ICsxNjcsMjIgQEAKIAlhbmQgdGhlIHJlc3VsdCB3aWxsIGJlIHB1dCBpbnRvIGB2YXJgLgogCVNlZSAnT3B0aW9uIENhbGxiYWNrcycgYmVsb3cgZm9yIGEgbW9yZSBlbGFib3JhdGUgZGVzY3JpcHRpb24uCiAKK2BPUFRfRklMRU5BTUUoc2hvcnQsIGxvbmcsICZ2YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gd2l0aCBhIGZpbGVuYW1lIGFyZ3VtZW50LgorCVRoZSBmaWxlbmFtZSB3aWxsIGJlIHByZWZpeGVkIGJ5IHBhc3NpbmcgdGhlIGZpbGVuYW1lIGFsb25nIHdpdGgKKwl0aGUgcHJlZml4IGFyZ3VtZW50IG9mIGBwYXJzZV9vcHRpb25zKClgIHRvIGBwcmVmaXhfZmlsZW5hbWUoKWAuCisKIGBPUFRfQVJHVU1FTlQobG9uZywgZGVzY3JpcHRpb24pYDo6CiAJSW50cm9kdWNlIGEgbG9uZy1vcHRpb24gYXJndW1lbnQgdGhhdCB3aWxsIGJlIGtlcHQgaW4gYGFyZ3ZbXWAuCiAKK2BPUFRfTlVNQkVSX0NBTExCQUNLKCZ2YXIsIGRlc2NyaXB0aW9uLCBmdW5jX3B0cilgOjoKKwlSZWNvZ25pemUgbnVtZXJpY2FsIG9wdGlvbnMgbGlrZSAtMTIzIGFuZCBmZWVkIHRoZSBpbnRlZ2VyIGFzCisJaWYgaXQgd2FzIGFuIGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbiBnaXZlbiBieSBgZnVuY19wdHJgLgorCVRoZSByZXN1bHQgd2lsbCBiZSBwdXQgaW50byBgdmFyYC4gIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzdWNoCisJb3B0aW9uIGRlZmluaXRpb24uICBJdCBjYW5ub3QgYmUgbmVnYXRlZCBhbmQgaXQgdGFrZXMgbm8KKwlhcmd1bWVudHMuICBTaG9ydCBvcHRpb25zIHRoYXQgaGFwcGVuIHRvIGJlIGRpZ2l0cyB0YWtlCisJcHJlY2VkZW5jZSBvdmVyIGl0LgorCiAKIFRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IG11c3QgYmUgYE9QVF9FTkQoKWAuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJlbW90ZS50eHQKaW5kZXggMDczYjIyYi4uYzU0YjE3ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJlbW90ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJlbW90ZS50eHQKQEAgLTE4LDYgKzE4LDEwIEBACiAKIAlBbiBhcnJheSBvZiBhbGwgb2YgdGhlIHVybF9uciBVUkxzIGNvbmZpZ3VyZWQgZm9yIHRoZSByZW1vdGUKIAorYHB1c2h1cmxgOjoKKworCUFuIGFycmF5IG9mIGFsbCBvZiB0aGUgcHVzaHVybF9uciBwdXNoIFVSTHMgY29uZmlndXJlZCBmb3IgdGhlIHJlbW90ZQorCiBgcHVzaGA6OgogCiAJIEFuIGFycmF5IG9mIHJlZnNwZWNzIGNvbmZpZ3VyZWQgZm9yIHB1c2hpbmcsIHdpdGgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXJscy1yZW1vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vdXJscy1yZW1vdGVzLnR4dAppbmRleCA0MWVjNzc3Li4yYTBlN2I4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VybHMtcmVtb3Rlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91cmxzLXJlbW90ZXMudHh0CkBAIC0yNywxMCArMjcsMTMgQEAKIC0tLS0tLS0tLS0tLQogCVtyZW1vdGUgIjxuYW1lPiJdCiAJCXVybCA9IDx1cmw+CisJCXB1c2h1cmwgPSA8cHVzaHVybD4KIAkJcHVzaCA9IDxyZWZzcGVjPgogCQlmZXRjaCA9IDxyZWZzcGVjPgogLS0tLS0tLS0tLS0tCiAKK1RoZSBgPHB1c2h1cmw+YCBpcyB1c2VkIGZvciBwdXNoZXMgb25seS4gSXQgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzCit0byBgPHVybD5gLgogCiBOYW1lZCBmaWxlIGluIGAkR0lUX0RJUi9yZW1vdGVzYAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CmRpZmYgLS1naXQgYS9HSVQtVkVSU0lPTi1HRU4gYi9HSVQtVkVSU0lPTi1HRU4KaW5kZXggYTU2ZGNiMi4uNzk1NmJjOSAxMDA3NTUKLS0tIGEvR0lULVZFUlNJT04tR0VOCisrKyBiL0dJVC1WRVJTSU9OLUdFTgpAQCAtMSw3ICsxLDcgQEAKICMhL2Jpbi9zaAogCiBHVkY9R0lULVZFUlNJT04tRklMRQotREVGX1ZFUj12MS42LjMuNAorREVGX1ZFUj12MS42LjQuMwogCiBMRj0nCiAnCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGY4OGVkM2UuLmRhZjQyOTYgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0zLDYgKzMsMTEgQEAKIAogIyBEZWZpbmUgVj0xIHRvIGhhdmUgYSBtb3JlIHZlcmJvc2UgY29tcGlsZS4KICMKKyMgRGVmaW5lIFNIRUxMX1BBVEggdG8gYSBQT1NJWCBzaGVsbCBpZiB5b3VyIC9iaW4vc2ggaXMgYnJva2VuLgorIworIyBEZWZpbmUgU0FORV9UT09MX1BBVEggdG8gYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocyB0byBwcmVwZW5kCisjIHRvIFBBVEggaWYgeW91ciB0b29scyBpbiAvdXNyL2JpbiBhcmUgYnJva2VuLgorIwogIyBEZWZpbmUgU05QUklOVEZfUkVUVVJOU19CT0dVUyBpZiB5b3VyIGFyZSBvbiBhIHN5c3RlbSB3aGljaCBzbnByaW50ZigpCiAjIG9yIHZzbnByaW50ZigpIHJldHVybiAtMSBpbnN0ZWFkIG9mIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkCiAjIGhhdmUgYmVlbiB3cml0dGVuIHRvIHRoZSBmaW5hbCBzdHJpbmcgaWYgZW5vdWdoIHNwYWNlIGhhZCBiZWVuIGF2YWlsYWJsZS4KQEAgLTUyLDYgKzU3LDEyIEBACiAjCiAjIERlZmluZSBOT19NS0RURU1QIGlmIHlvdSBkb24ndCBoYXZlIG1rZHRlbXAgaW4gdGhlIEMgbGlicmFyeS4KICMKKyMgRGVmaW5lIE5PX01LU1RFTVBTIGlmIHlvdSBkb24ndCBoYXZlIG1rc3RlbXBzIGluIHRoZSBDIGxpYnJhcnkuCisjCisjIERlZmluZSBOT19MSUJHRU5fSCBpZiB5b3UgZG9uJ3QgaGF2ZSBsaWJnZW4uaC4KKyMKKyMgRGVmaW5lIE5FRURTX0xJQkdFTiBpZiB5b3VyIGxpYmdlbiBuZWVkcyAtbGdlbiB3aGVuIGxpbmtpbmcKKyMKICMgRGVmaW5lIE5PX1NZU19TRUxFQ1RfSCBpZiB5b3UgZG9uJ3QgaGF2ZSBzeXMvc2VsZWN0LmguCiAjCiAjIERlZmluZSBOT19TWU1MSU5LX0hFQUQgaWYgeW91IG5ldmVyIHdhbnQgLmdpdC9IRUFEIHRvIGJlIGEgc3ltYm9saWMgbGluay4KQEAgLTkxLDYgKzEwMiwxMCBAQAogIyBEZWZpbmUgTkVFRFNfU09DS0VUIGlmIGxpbmtpbmcgd2l0aCBsaWJjIGlzIG5vdCBlbm91Z2ggKFN1bk9TLAogIyBQYXRyaWNrIE1hdXJpdHopLgogIworIyBEZWZpbmUgTkVFRFNfUkVTT0xWIGlmIGxpbmtpbmcgd2l0aCAtbG5zbCBhbmQvb3IgLWxzb2NrZXQgaXMgbm90IGVub3VnaC4KKyMgTm90YWJseSBvbiBTb2xhcmlzIGhzdHJlcnJvciByZXNpZGVzIGluIGxpYnJlc29sdiBhbmQgb24gU29sYXJpcyA3CisjIGluZXRfbnRvcCBhbmQgaW5ldF9wdG9uIGFkZGl0aW9uYWxseSByZXNpZGUgdGhlcmUuCisjCiAjIERlZmluZSBOT19NTUFQIGlmIHlvdSB3YW50IHRvIGF2b2lkIG1tYXAuCiAjCiAjIERlZmluZSBOT19QVEhSRUFEUyBpZiB5b3UgZG8gbm90IGhhdmUgb3IgZG8gbm90IHdhbnQgdG8gdXNlIFB0aHJlYWRzLgpAQCAtMTc4LDYgKzE5MywxMSBAQAogIwogIyBEZWZpbmUgTk9fQ1JPU1NfRElSRUNUT1JZX0hBUkRMSU5LUyBpZiB5b3UgcGxhbiB0byBkaXN0cmlidXRlIHRoZSBpbnN0YWxsZWQKICMgcHJvZ3JhbXMgYXMgYSB0YXIsIHdoZXJlIGJpbi8gYW5kIGxpYmV4ZWMvIG1pZ2h0IGJlIG9uIGRpZmZlcmVudCBmaWxlIHN5c3RlbXMuCisjCisjIERlZmluZSBVU0VfTkVEX0FMTE9DQVRPUiBpZiB5b3Ugd2FudCB0byByZXBsYWNlIHRoZSBwbGF0Zm9ybXMgZGVmYXVsdAorIyBtZW1vcnkgYWxsb2NhdG9ycyB3aXRoIHRoZSBuZWRtYWxsb2MgYWxsb2NhdG9yIHdyaXR0ZW4gYnkgTmlhbGwgRG91Z2xhcy4KKyMKKyMgRGVmaW5lIE5PX1JFR0VYIGlmIHlvdSBoYXZlIG5vIG9yIGluZmVyaW9yIHJlZ2V4IHN1cHBvcnQgaW4geW91ciBDIGxpYnJhcnkuCiAKIEdJVC1WRVJTSU9OLUZJTEU6IC5GT1JDRS1HSVQtVkVSU0lPTi1GSUxFCiAJQCQoU0hFTExfUEFUSCkgLi9HSVQtVkVSU0lPTi1HRU4KQEAgLTIyOCw2ICsyNDgsNyBAQAogZW5kaWYKIGxpYiA9IGxpYgogIyBERVNURElSPQorcGF0aHNlcCA9IDoKIAogIyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGdpdHdlYgogR0lUV0VCX0NPTkZJRyA9IGdpdHdlYl9jb25maWcucGVybApAQCAtMzM1LDcgKzM1Niw2IEBACiBQUk9HUkFNUyArPSBnaXQtbWVyZ2UtaW5kZXgkWAogUFJPR1JBTVMgKz0gZ2l0LW1lcmdlLXRyZWUkWAogUFJPR1JBTVMgKz0gZ2l0LW1rdGFnJFgKLVBST0dSQU1TICs9IGdpdC1ta3RyZWUkWAogUFJPR1JBTVMgKz0gZ2l0LXBhY2stcmVkdW5kYW50JFgKIFBST0dSQU1TICs9IGdpdC1wYXRjaC1pZCRYCiBQUk9HUkFNUyArPSBnaXQtc2hlbGwkWApAQCAtNTg5LDYgKzYwOSw3IEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1tZXJnZS1maWxlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLW1lcmdlLW91cnMubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tbWVyZ2UtcmVjdXJzaXZlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLW1rdHJlZS5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1tdi5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1uYW1lLXJldi5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1wYWNrLW9iamVjdHMubwpAQCAtNjM1LDEwICs2NTYsMTIgQEAKIAogaWZlcSAoJCh1bmFtZV9TKSxMaW51eCkKIAlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKIAlUSFJFQURFRF9ERUxUQV9TRUFSQ0ggPSBZZXNQbGVhc2UKIGVuZGlmCiBpZmVxICgkKHVuYW1lX1MpLEdOVS9rRnJlZUJTRCkKIAlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKIAlUSFJFQURFRF9ERUxUQV9TRUFSQ0ggPSBZZXNQbGVhc2UKIGVuZGlmCiBpZmVxICgkKHVuYW1lX1MpLFVuaXhXYXJlKQpAQCAtNjUwLDYgKzY3Myw3IEBACiAJU0hFTExfUEFUSCA9IC91c3IvbG9jYWwvYmluL2Jhc2gKIAlOT19JUFY2ID0gWWVzUGxlYXNlCiAJTk9fSFNUUkVSUk9SID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKIAlCQVNJQ19DRkxBR1MgKz0gLUt0aHJlYWQKIAlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUKIAlCQVNJQ19MREZMQUdTICs9IC1ML3Vzci9sb2NhbC9saWIKQEAgLTY3Myw2ICs2OTcsNyBAQAogCVNIRUxMX1BBVEggPSAvdXNyL2Jpbi9iYXNoCiAJTk9fSVBWNiA9IFllc1BsZWFzZQogCU5PX0hTVFJFUlJPUiA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCiAJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCiAJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCiAJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQpAQCAtNjk3LDEyICs3MjIsMjMgQEAKIAlORUVEU19TT0NLRVQgPSBZZXNQbGVhc2UKIAlORUVEU19OU0wgPSBZZXNQbGVhc2UKIAlTSEVMTF9QQVRIID0gL2Jpbi9iYXNoCisJU0FORV9UT09MX1BBVEggPSAvdXNyL3hwZzYvYmluOi91c3IveHBnNC9iaW4KIAlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCiAJTk9fTUVNTUVNID0gWWVzUGxlYXNlCi0JTk9fSFNUUkVSUk9SID0gWWVzUGxlYXNlCiAJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQotCU9MRF9JQ09OViA9IFVuZm9ydHVuYXRlbHlZZXMKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorCU5PX1JFR0VYID0gWWVzUGxlYXNlCiAJTk9fRVhURVJOQUxfR1JFUCA9IFllc1BsZWFzZQorCWlmZXEgKCQodW5hbWVfUiksNS43KQorCQlORUVEU19SRVNPTFYgPSBZZXNQbGVhc2UKKwkJTk9fSVBWNiA9IFllc1BsZWFzZQorCQlOT19TT0NLQUREUl9TVE9SQUdFID0gWWVzUGxlYXNlCisJCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCQlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJCU5PX0M5OV9GT1JNQVQgPSBZZXNQbGVhc2UKKwkJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJZW5kaWYKIAlpZmVxICgkKHVuYW1lX1IpLDUuOCkKIAkJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKIAkJTk9fU0VURU5WID0gWWVzUGxlYXNlCkBAIC03MTUsMTUgKzc1MSwxOSBAQAogCQlOT19DOTlfRk9STUFUID0gWWVzUGxlYXNlCiAJCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQogCWVuZGlmCi0JSU5TVEFMTCA9IGdpbnN0YWxsCisJaWZkZWYgTk9fSVBWNgorCQlORUVEU19SRVNPTFYgPSBZZXNQbGVhc2UKKwllbmRpZgorCUlOU1RBTEwgPSAvdXNyL3VjYi9pbnN0YWxsCiAJVEFSID0gZ3RhcgotCUJBU0lDX0NGTEFHUyArPSAtRF9fRVhURU5TSU9OU19fCisJQkFTSUNfQ0ZMQUdTICs9IC1EX19FWFRFTlNJT05TX18gLURfX3N1bl9fIC1ESEFWRV9BTExPQ0FfSAogZW5kaWYKIGlmZXEgKCQodW5hbWVfTyksQ3lnd2luKQogCU5PX0RfVFlQRV9JTl9ESVJFTlQgPSBZZXNQbGVhc2UKIAlOT19EX0lOT19JTl9ESVJFTlQgPSBZZXNQbGVhc2UKIAlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCiAJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKIAlOT19TWU1MSU5LX0hFQUQgPSBZZXNQbGVhc2UKIAlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQogCU5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkgPSBVbmZvcnR1bmF0ZWx5WWVzCkBAIC03NjcsMTEgKzgwNywxMyBAQAogCUJBU0lDX0xERkxBR1MgKz0gLUwvdXNyL3BrZy9saWIgJChDQ19MRF9EWU5QQVRIKS91c3IvcGtnL2xpYgogCVRIUkVBREVEX0RFTFRBX1NFQVJDSCA9IFllc1BsZWFzZQogCVVTRV9TVF9USU1FU1BFQyA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCiBlbmRpZgogaWZlcSAoJCh1bmFtZV9TKSxBSVgpCiAJTk9fU1RSQ0FTRVNUUj1ZZXNQbGVhc2UKIAlOT19NRU1NRU0gPSBZZXNQbGVhc2UKIAlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKIAlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCiAJTk9fTlNFQyA9IFllc1BsZWFzZQogCUZSRUFEX1JFQURTX0RJUkVDVE9SSUVTID0gVW5mb3J0dW5hdGVseVllcwpAQCAtNzg3LDI0ICs4MjksNDAgQEAKIGlmZXEgKCQodW5hbWVfUyksR05VKQogCSMgR05VL0h1cmQKIAlOT19TVFJMQ1BZPVllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxJUklYKQorCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX01NQVAgPSBZZXNQbGVhc2UKKwlOT19FWFRFUk5BTF9HUkVQID0gVW5mb3J0dW5hdGVseVllcworCVNOUFJJTlRGX1JFVFVSTlNfQk9HVVMgPSBZZXNQbGVhc2UKKwlTSEVMTF9QQVRIID0gL3Vzci9nbnUvYmluL2Jhc2gKKwlORUVEU19MSUJHRU4gPSBZZXNQbGVhc2UKIGVuZGlmCiBpZmVxICgkKHVuYW1lX1MpLElSSVg2NCkKLQlOT19JUFY2PVllc1BsZWFzZQogCU5PX1NFVEVOVj1ZZXNQbGVhc2UKKwlOT19VTlNFVEVOViA9IFllc1BsZWFzZQogCU5PX1NUUkNBU0VTVFI9WWVzUGxlYXNlCiAJTk9fTUVNTUVNID0gWWVzUGxlYXNlCi0JTk9fU1RSTENQWSA9IFllc1BsZWFzZQotCU5PX1NPQ0tBRERSX1NUT1JBR0U9WWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJTk9fTU1BUCA9IFllc1BsZWFzZQorCU5PX0VYVEVSTkFMX0dSRVAgPSBVbmZvcnR1bmF0ZWx5WWVzCisJU05QUklOVEZfUkVUVVJOU19CT0dVUyA9IFllc1BsZWFzZQogCVNIRUxMX1BBVEg9L3Vzci9nbnUvYmluL2Jhc2gKLQlCQVNJQ19DRkxBR1MgKz0gLURQQVRIX01BWD0xMDI0Ci0JIyBmb3Igbm93LCBidWlsZCAzMi1iaXQgdmVyc2lvbgotCUJBU0lDX0xERkxBR1MgKz0gLUwvdXNyL2xpYjMyCisJTkVFRFNfTElCR0VOID0gWWVzUGxlYXNlCiBlbmRpZgogaWZlcSAoJCh1bmFtZV9TKSxIUC1VWCkKIAlOT19JUFY2PVllc1BsZWFzZQogCU5PX1NFVEVOVj1ZZXNQbGVhc2UKIAlOT19TVFJDQVNFU1RSPVllc1BsZWFzZQogCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCiAJTk9fU1RSTENQWSA9IFllc1BsZWFzZQogCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKIAlOT19VTlNFVEVOViA9IFllc1BsZWFzZQpAQCAtODE3LDkgKzg3NSwxMCBAQAogCVVOUkVMSUFCTEVfRlNUQVQgPSBVbmZvcnR1bmF0ZWx5WWVzCiBlbmRpZgogaWZuZXEgKCwkKGZpbmRzdHJpbmcgTUlOR1csJCh1bmFtZV9TKSkpCisJcGF0aHNlcCA9IDsKIAlOT19QUkVBRCA9IFllc1BsZWFzZQogCU5PX09QRU5TU0wgPSBZZXNQbGVhc2UKLQlOT19DVVJMID0gWWVzUGxlYXNlCisJTk9fTElCR0VOX0ggPSBZZXNQbGVhc2UKIAlOT19TWU1MSU5LX0hFQUQgPSBZZXNQbGVhc2UKIAlOT19JUFY2ID0gWWVzUGxlYXNlCiAJTk9fU0VURU5WID0gWWVzUGxlYXNlCkBAIC04MjcsMTIgKzg4NiwxMiBAQAogCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKIAlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCiAJTk9fTUVNTUVNID0gWWVzUGxlYXNlCi0JTk9fUFRIUkVBRFMgPSBZZXNQbGVhc2UKIAlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQogCU9MRF9JQ09OViA9IFllc1BsZWFzZQogCU5PX0M5OV9GT1JNQVQgPSBZZXNQbGVhc2UKIAlOT19TVFJUT1VNQVggPSBZZXNQbGVhc2UKIAlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKIAlTTlBSSU5URl9SRVRVUk5TX0JPR1VTID0gWWVzUGxlYXNlCiAJTk9fU1ZOX1RFU1RTID0gWWVzUGxlYXNlCiAJTk9fUEVSTF9NQUtFTUFLRVIgPSBZZXNQbGVhc2UKQEAgLTg0MSwyMiArOTAwLDQ0IEBACiAJTk9fU1RfQkxPQ0tTX0lOX1NUUlVDVF9TVEFUID0gWWVzUGxlYXNlCiAJTk9fTlNFQyA9IFllc1BsZWFzZQogCVVTRV9XSU4zMl9NTUFQID0gWWVzUGxlYXNlCisJVVNFX05FRF9BTExPQ0FUT1IgPSBZZXNQbGVhc2UKIAlVTlJFTElBQkxFX0ZTVEFUID0gVW5mb3J0dW5hdGVseVllcwogCU9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMgPSBVbmZvcnR1bmF0ZWx5TmVlZHNUbwotCUNPTVBBVF9DRkxBR1MgKz0gLURfX1VTRV9NSU5HV19BQ0NFU1MgLUROT0dESSAtSWNvbXBhdCAtSWNvbXBhdC9yZWdleCAtSWNvbXBhdC9mbm1hdGNoCi0JQ09NUEFUX0NGTEFHUyArPSAtRFNOUFJJTlRGX1NJWkVfQ09SUj0xCisJTk9fUkVHRVggPSBZZXNQbGVhc2UKKwlDT01QQVRfQ0ZMQUdTICs9IC1EX19VU0VfTUlOR1dfQUNDRVNTIC1ETk9HREkgLUljb21wYXQgLUljb21wYXQvZm5tYXRjaAogCUNPTVBBVF9DRkxBR1MgKz0gLURTVFJJUF9FWFRFTlNJT049XCIuZXhlXCIKLQlDT01QQVRfT0JKUyArPSBjb21wYXQvbWluZ3cubyBjb21wYXQvZm5tYXRjaC9mbm1hdGNoLm8gY29tcGF0L3JlZ2V4L3JlZ2V4Lm8gY29tcGF0L3dpbmFuc2kubworCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9taW5ndy5vIGNvbXBhdC9mbm1hdGNoL2ZubWF0Y2gubyBjb21wYXQvd2luYW5zaS5vCiAJRVhUTElCUyArPSAtbHdzMl8zMgogCVggPSAuZXhlCitpZm5lcSAoLCQod2lsZGNhcmQgLi4vVEhJU19JU19NU1lTR0lUKSkKKwlodG1sZGlyPWRvYy9naXQvaHRtbC8KKwlwcmVmaXggPQorCUlOU1RBTEwgPSAvYmluL2luc3RhbGwKKwlFWFRMSUJTICs9IC9taW5ndy9saWIvbGliei5hCisJTk9fUl9UT19HQ0NfTElOS0VSID0gWWVzUGxlYXNlCisJSU5URVJOQUxfUVNPUlQgPSBZZXNQbGVhc2UKKwlUSFJFQURFRF9ERUxUQV9TRUFSQ0ggPSBZZXNQbGVhc2UKK2Vsc2UKKwlOT19DVVJMID0gWWVzUGxlYXNlCisJTk9fUFRIUkVBRFMgPSBZZXNQbGVhc2UKK2VuZGlmCiBlbmRpZgogaWZuZXEgKCwkKGZpbmRzdHJpbmcgYXJtLCQodW5hbWVfTSkpKQogCUFSTV9TSEExID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKIGVuZGlmCiAKIC1pbmNsdWRlIGNvbmZpZy5tYWsuYXV0b2dlbgogLWluY2x1ZGUgY29uZmlnLm1hawogCitpZmRlZiBTQU5FX1RPT0xfUEFUSAorU0FORV9UT09MX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNBTkVfVE9PTF9QQVRIKSkKK0JST0tFTl9QQVRIX0ZJWCA9ICdzfF5cIyBAQEJST0tFTl9QQVRIX0ZJWEBAJCR8Z2l0X2Jyb2tlbl9wYXRoX2ZpeCAkKFNBTkVfVE9PTF9QQVRIX1NRKXwnCitQQVRIIDo9ICQoU0FORV9UT09MX1BBVEgpOiR7UEFUSH0KK2Vsc2UKK0JST0tFTl9QQVRIX0ZJWCA9ICcvXlwjIEBAQlJPS0VOX1BBVEhfRklYQEAkJC9kJworZW5kaWYKKwogaWZlcSAoJCh1bmFtZV9TKSxEYXJ3aW4pCiAJaWZuZGVmIE5PX0ZJTksKIAkJaWZlcSAoJChzaGVsbCB0ZXN0IC1kIC9zdy9saWIgJiYgZWNobyB5KSx5KQpAQCAtODgzLDYgKzk2NCwxMSBAQAogCWVuZGlmCiBlbmRpZgogCitpZmRlZiBOT19MSUJHRU5fSAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19MSUJHRU5fSAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9iYXNlbmFtZS5vCitlbmRpZgorCiBpZmRlZiBOT19DVVJMCiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fQ1VSTAogZWxzZQpAQCAtOTQ5LDEyICsxMDM1LDE4IEBACiAJZW5kaWYKIAlFWFRMSUJTICs9ICQoSUNPTlZfTElOSykgLWxpY29udgogZW5kaWYKK2lmZGVmIE5FRURTX0xJQkdFTgorCUVYVExJQlMgKz0gLWxnZW4KK2VuZGlmCiBpZmRlZiBORUVEU19TT0NLRVQKIAlFWFRMSUJTICs9IC1sc29ja2V0CiBlbmRpZgogaWZkZWYgTkVFRFNfTlNMCiAJRVhUTElCUyArPSAtbG5zbAogZW5kaWYKK2lmZGVmIE5FRURTX1JFU09MVgorCUVYVExJQlMgKz0gLWxyZXNvbHYKK2VuZGlmCiBpZmRlZiBOT19EX1RZUEVfSU5fRElSRU5UCiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fRF9UWVBFX0lOX0RJUkVOVAogZW5kaWYKQEAgLTEwMTAsNiArMTEwMiwxMCBAQAogCUNPTVBBVF9DRkxBR1MgKz0gLUROT19NS0RURU1QCiAJQ09NUEFUX09CSlMgKz0gY29tcGF0L21rZHRlbXAubwogZW5kaWYKK2lmZGVmIE5PX01LU1RFTVBTCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX01LU1RFTVBTCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L21rc3RlbXBzLm8KK2VuZGlmCiBpZmRlZiBOT19VTlNFVEVOVgogCUNPTVBBVF9DRkxBR1MgKz0gLUROT19VTlNFVEVOVgogCUNPTVBBVF9PQkpTICs9IGNvbXBhdC91bnNldGVudi5vCkBAIC0xMTI3LDYgKzEyMjMsMTUgQEAKIGlmZGVmIFVOUkVMSUFCTEVfRlNUQVQKIAlCQVNJQ19DRkxBR1MgKz0gLURVTlJFTElBQkxFX0ZTVEFUCiBlbmRpZgoraWZkZWYgTk9fUkVHRVgKKwlDT01QQVRfQ0ZMQUdTICs9IC1JY29tcGF0L3JlZ2V4CisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3JlZ2V4L3JlZ2V4Lm8KK2VuZGlmCisKK2lmZGVmIFVTRV9ORURfQUxMT0NBVE9SCisgICAgICAgQ09NUEFUX0NGTEFHUyArPSAtRFVTRV9ORURfQUxMT0NBVE9SIC1ET1ZFUlJJREVfU1RSRFVQIC1ETkRFQlVHIC1EUkVQTEFDRV9TWVNURU1fQUxMT0NBVE9SIC1JY29tcGF0L25lZG1hbGxvYworICAgICAgIENPTVBBVF9PQkpTICs9IGNvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLm8KK2VuZGlmCiAKIGlmZXEgKCQoVENMVEtfUEFUSCksKQogTk9fVENMVEs9Tm9UaGFua3MKQEAgLTEyMDIsNyArMTMwNyw3IEBACiAKIGFsbDo6IHNoZWxsX2NvbXBhdGliaWxpdHlfdGVzdCAkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpICQoT1RIRVJfUFJPR1JBTVMpIEdJVC1CVUlMRC1PUFRJT05TCiBpZm5lcSAoLCRYKQotCSQoZm9yZWFjaCBwLCQocGF0c3Vic3QgJSRYLCUsJChmaWx0ZXIgJSRYLCQoQUxMX1BST0dSQU1TKSAkKEJVSUxUX0lOUykgZ2l0JFgpKSwgdGVzdCAnJHAnIC1lZiAnJHAkWCcgfHwgJChSTSkgJyRwJzspCisJJChRVUlFVF9CVUlMVF9JTikkKGZvcmVhY2ggcCwkKHBhdHN1YnN0ICUkWCwlLCQoZmlsdGVyICUkWCwkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpIGdpdCRYKSksIHRlc3QgJyRwJyAtZWYgJyRwJFgnIHx8ICQoUk0pICckcCc7KQogZW5kaWYKIAogYWxsOjoKQEAgLTEyNTMsOSArMTM1OCw5IEBACiAJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKIAlzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAogCSAgICAtZSAnc3xAU0hFTExfUEFUSEB8JChTSEVMTF9QQVRIX1NRKXwnIFwKLQkgICAgLWUgJ3N8QEBQRVJMQEB8JChQRVJMX1BBVEhfU1EpfGcnIFwKIAkgICAgLWUgJ3MvQEBHSVRfVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnIFwKIAkgICAgLWUgJ3MvQEBOT19DVVJMQEAvJChOT19DVVJMKS9nJyBcCisJICAgIC1lICQoQlJPS0VOX1BBVEhfRklYKSBcCiAJICAgICRALnNoID4kQCsgJiYgXAogCWNobW9kICt4ICRAKyAmJiBcCiAJbXYgJEArICRACkBAIC0xMjcyLDcgKzEzNzcsNyBAQAogCXNlZCAtZSAnMXsnIFwKIAkgICAgLWUgJwlzfCMhLipwZXJsfCMhJChQRVJMX1BBVEhfU1EpfCcgXAogCSAgICAtZSAnCWgnIFwKLQkgICAgLWUgJwlzPS4qPXVzZSBsaWIgKHNwbGl0KC86LywgJCRFTlZ7R0lUUEVSTExJQn0gfHwgIkBASU5TVExJQkRJUkBAIikpOz0nIFwKKwkgICAgLWUgJwlzPS4qPXVzZSBsaWIgKHNwbGl0KC8kKHBhdGhzZXApLywgJCRFTlZ7R0lUUEVSTExJQn0gfHwgIkBASU5TVExJQkRJUkBAIikpOz0nIFwKIAkgICAgLWUgJwlIJyBcCiAJICAgIC1lICcJeCcgXAogCSAgICAtZSAnfScgXApAQCAtMTQ5NSw2ICsxNjAwLDggQEAKIAogdGVzdC1wYXJzZS1vcHRpb25zJFg6IHBhcnNlLW9wdGlvbnMubwogCit0ZXN0LXBhcnNlLW9wdGlvbnMubzogcGFyc2Utb3B0aW9ucy5oCisKIC5QUkVDSU9VUzogJChwYXRzdWJzdCB0ZXN0LSUkWCx0ZXN0LSUubywkKFRFU1RfUFJPR1JBTVMpKQogCiB0ZXN0LSUkWDogdGVzdC0lLm8gJChHSVRMSUJTKQpAQCAtMTU1MywxNSArMTY2MCwxNiBAQAogZW5kaWYKIAliaW5kaXI9JCQoY2QgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknICYmIHB3ZCkgJiYgXAogCWV4ZWNkaXI9JCQoY2QgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknICYmIHB3ZCkgJiYgXAotCXsgJChSTSkgIiQkZXhlY2Rpci9naXQtYWRkJFgiICYmIFwKKwl7IHRlc3QgIiQkYmluZGlyLyIgPSAiJCRleGVjZGlyLyIgfHwgXAorCQl7ICQoUk0pICIkJGV4ZWNkaXIvZ2l0JFgiICYmIFwKIAkJdGVzdCAteiAiJChOT19DUk9TU19ESVJFQ1RPUllfSEFSRExJTktTKSIgJiYgXAotCQlsbiAiJCRiaW5kaXIvZ2l0JFgiICIkJGV4ZWNkaXIvZ2l0LWFkZCRYIiAyPi9kZXYvbnVsbCB8fCBcCi0JCWNwICIkJGJpbmRpci9naXQkWCIgIiQkZXhlY2Rpci9naXQtYWRkJFgiOyB9ICYmIFwKLQl7IGZvciBwIGluICQoZmlsdGVyLW91dCBnaXQtYWRkJFgsJChCVUlMVF9JTlMpKTsgZG8gXAorCQlsbiAiJCRiaW5kaXIvZ2l0JFgiICIkJGV4ZWNkaXIvZ2l0JFgiIDI+L2Rldi9udWxsIHx8IFwKKwkJY3AgIiQkYmluZGlyL2dpdCRYIiAiJCRleGVjZGlyL2dpdCRYIjsgfSA7IH0gJiYgXAorCXsgZm9yIHAgaW4gJChCVUlMVF9JTlMpOyBkbyBcCiAJCSQoUk0pICIkJGV4ZWNkaXIvJCRwIiAmJiBcCi0JCWxuICIkJGV4ZWNkaXIvZ2l0LWFkZCRYIiAiJCRleGVjZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAotCQlsbiAtcyAiZ2l0LWFkZCRYIiAiJCRleGVjZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAotCQljcCAiJCRleGVjZGlyL2dpdC1hZGQkWCIgIiQkZXhlY2Rpci8kJHAiIHx8IGV4aXQ7IFwKKwkJbG4gIiQkZXhlY2Rpci9naXQkWCIgIiQkZXhlY2Rpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJbG4gLXMgImdpdCRYIiAiJCRleGVjZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAorCQljcCAiJCRleGVjZGlyL2dpdCRYIiAiJCRleGVjZGlyLyQkcCIgfHwgZXhpdDsgXAogCSAgZG9uZTsgfSAmJiBcCiAJLi9jaGVja19iaW5kaXIgInokJGJpbmRpciIgInokJGV4ZWNkaXIiICIkJGJpbmRpci9naXQtYWRkJFgiCiAKQEAgLTE2NDIsNyArMTc1MCw3IEBACiAJJChSTSkgY29uZmlndXJlCiAKIGNsZWFuOgotCSQoUk0pICoubyBtb3ppbGxhLXNoYTEvKi5vIGFybS8qLm8gcHBjLyoubyBjb21wYXQvKi5vIHhkaWZmLyoubyBcCisJJChSTSkgKi5vIG1vemlsbGEtc2hhMS8qLm8gYXJtLyoubyBwcGMvKi5vIGNvbXBhdC8qLm8gY29tcGF0LyovKi5vIHhkaWZmLyoubyBcCiAJCSQoTElCX0ZJTEUpICQoWERJRkZfTElCKQogCSQoUk0pICQoQUxMX1BST0dSQU1TKSAkKEJVSUxUX0lOUykgZ2l0JFgKIAkkKFJNKSAkKFRFU1RfUFJPR1JBTVMpCmRpZmYgLS1naXQgYS9SZWxOb3RlcyBiL1JlbE5vdGVzCmluZGV4IDAzYzk5NmQuLmVkOTg0ZTMgMTIwMDAwCi0tLSBhL1JlbE5vdGVzCisrKyBiL1JlbE5vdGVzCkBAIC0xICsxIEBACi1Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4zLjQudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNC4zLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Fic3BhdGguYyBiL2Fic3BhdGguYwppbmRleCA2NDlmMzRmLi40YmVlMGJhIDEwMDY0NAotLS0gYS9hYnNwYXRoLmMKKysrIGIvYWJzcGF0aC5jCkBAIC00MSwxMyArNDEsMTMgQEAKIAogCQlpZiAoKmJ1ZikgewogCQkJaWYgKCEqY3dkICYmICFnZXRjd2QoY3dkLCBzaXplb2YoY3dkKSkpCi0JCQkJZGllICgiQ291bGQgbm90IGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CisJCQkJZGllX2Vycm5vICgiQ291bGQgbm90IGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CiAKIAkJCWlmIChjaGRpcihidWYpKQotCQkJCWRpZSAoIkNvdWxkIG5vdCBzd2l0Y2ggdG8gJyVzJyIsIGJ1Zik7CisJCQkJZGllX2Vycm5vICgiQ291bGQgbm90IHN3aXRjaCB0byAnJXMnIiwgYnVmKTsKIAkJfQogCQlpZiAoIWdldGN3ZChidWYsIFBBVEhfTUFYKSkKLQkJCWRpZSAoIkNvdWxkIG5vdCBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOworCQkJZGllX2Vycm5vICgiQ291bGQgbm90IGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CiAKIAkJaWYgKGxhc3RfZWxlbSkgewogCQkJaW50IGxlbiA9IHN0cmxlbihidWYpOwpAQCAtNjMsNyArNjMsNyBAQAogCQlpZiAoIWxzdGF0KGJ1ZiwgJnN0KSAmJiBTX0lTTE5LKHN0LnN0X21vZGUpKSB7CiAJCQlsZW4gPSByZWFkbGluayhidWYsIG5leHRfYnVmLCBQQVRIX01BWCk7CiAJCQlpZiAobGVuIDwgMCkKLQkJCQlkaWUgKCJJbnZhbGlkIHN5bWxpbms6ICVzIiwgYnVmKTsKKwkJCQlkaWVfZXJybm8gKCJJbnZhbGlkIHN5bWxpbmsgJyVzJyIsIGJ1Zik7CiAJCQlpZiAoUEFUSF9NQVggPD0gbGVuKQogCQkJCWRpZSgic3ltYm9saWMgbGluayB0b28gbG9uZzogJXMiLCBidWYpOwogCQkJbmV4dF9idWZbbGVuXSA9ICdcMCc7CkBAIC03NSw3ICs3NSw3IEBACiAJfQogCiAJaWYgKCpjd2QgJiYgY2hkaXIoY3dkKSkKLQkJZGllICgiQ291bGQgbm90IGNoYW5nZSBiYWNrIHRvICclcyciLCBjd2QpOworCQlkaWVfZXJybm8gKCJDb3VsZCBub3QgY2hhbmdlIGJhY2sgdG8gJyVzJyIsIGN3ZCk7CiAKIAlyZXR1cm4gYnVmOwogfQpAQCAtMTA5LDcgKzEwOSw3IEBACiAJfSBlbHNlIHsKIAkJY29uc3QgY2hhciAqY3dkID0gZ2V0X3B3ZF9jd2QoKTsKIAkJaWYgKCFjd2QpCi0JCQlkaWUoIkNhbm5vdCBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKKwkJCWRpZV9lcnJubygiQ2Fubm90IGRldGVybWluZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOwogCQlpZiAoc25wcmludGYoYnVmLCBQQVRIX01BWCwgIiVzLyVzIiwgY3dkLCBwYXRoKSA+PSBQQVRIX01BWCkKIAkJCWRpZSgiVG9vIGxvbmcgcGF0aDogJS4qcyIsIDYwLCBwYXRoKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoaXZlLmMgYi9hcmNoaXZlLmMKaW5kZXggYjJiOTBkMy4uMGJjYTljYSAxMDA2NDQKLS0tIGEvYXJjaGl2ZS5jCisrKyBiL2FyY2hpdmUuYwpAQCAtMzA5LDcgKzMwOSw3IEBACiAJCU9QVF9FTkQoKQogCX07CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRzLCBhcmNoaXZlX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRzLCBhcmNoaXZlX3VzYWdlLCAwKTsKIAogCWlmIChyZW1vdGUpCiAJCWRpZSgiVW5leHBlY3RlZCBvcHRpb24gLS1yZW1vdGUiKTsKZGlmZiAtLWdpdCBhL2Jpc2VjdC5jIGIvYmlzZWN0LmMKaW5kZXggNThmN2U2Zi4uZGMxOGRiOCAxMDA2NDQKLS0tIGEvYmlzZWN0LmMKKysrIGIvYmlzZWN0LmMKQEAgLTYsMTUgKzYsMzAgQEAKICNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKICNpbmNsdWRlICJxdW90ZS5oIgogI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgogI2luY2x1ZGUgImJpc2VjdC5oIgogCi1zdGF0aWMgdW5zaWduZWQgY2hhciAoKnNraXBwZWRfc2hhMSlbMjBdOwotc3RhdGljIGludCBza2lwcGVkX3NoYTFfbnI7Ci1zdGF0aWMgaW50IHNraXBwZWRfc2hhMV9hbGxvYzsKK3N0cnVjdCBzaGExX2FycmF5IHsKKwl1bnNpZ25lZCBjaGFyICgqc2hhMSlbMjBdOworCWludCBzaGExX25yOworCWludCBzaGExX2FsbG9jOworCWludCBzb3J0ZWQ7Cit9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqKnJldl9hcmd2Owotc3RhdGljIGludCByZXZfYXJndl9ucjsKLXN0YXRpYyBpbnQgcmV2X2FyZ3ZfYWxsb2M7CitzdGF0aWMgc3RydWN0IHNoYTFfYXJyYXkgZ29vZF9yZXZzOworc3RhdGljIHN0cnVjdCBzaGExX2FycmF5IHNraXBwZWRfcmV2czsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1cnJlbnRfYmFkX3NoYTE7CisKK3N0cnVjdCBhcmd2X2FycmF5IHsKKwljb25zdCBjaGFyICoqYXJndjsKKwlpbnQgYXJndl9ucjsKKwlpbnQgYXJndl9hbGxvYzsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICphcmd2X2NoZWNrb3V0W10gPSB7ImNoZWNrb3V0IiwgIi1xIiwgTlVMTCwgIi0tIiwgTlVMTH07CitzdGF0aWMgY29uc3QgY2hhciAqYXJndl9zaG93X2JyYW5jaFtdID0geyJzaG93LWJyYW5jaCIsIE5VTEwsIE5VTEx9OwogCiAvKiBiaXRzICMwLTE1IGluIHJldmlzaW9uLmggKi8KIApAQCAtMzk4LDIzICs0MTMsMzcgQEAKIAlyZXR1cm4gYmVzdDsKIH0KIAorc3RhdGljIHZvaWQgYXJndl9hcnJheV9wdXNoKHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSwgY29uc3QgY2hhciAqc3RyaW5nKQoreworCUFMTE9DX0dST1coYXJyYXktPmFyZ3YsIGFycmF5LT5hcmd2X25yICsgMSwgYXJyYXktPmFyZ3ZfYWxsb2MpOworCWFycmF5LT5hcmd2W2FycmF5LT5hcmd2X25yKytdID0gc3RyaW5nOworfQorCitzdGF0aWMgdm9pZCBhcmd2X2FycmF5X3B1c2hfc2hhMShzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXksCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJIGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZidWYsIGZvcm1hdCwgc2hhMV90b19oZXgoc2hhMSkpOworCWFyZ3ZfYXJyYXlfcHVzaChhcnJheSwgc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTFfYXJyYXlfcHVzaChzdHJ1Y3Qgc2hhMV9hcnJheSAqYXJyYXksCisJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlBTExPQ19HUk9XKGFycmF5LT5zaGExLCBhcnJheS0+c2hhMV9uciArIDEsIGFycmF5LT5zaGExX2FsbG9jKTsKKwloYXNoY3B5KGFycmF5LT5zaGExW2FycmF5LT5zaGExX25yKytdLCBzaGExKTsKK30KKwogc3RhdGljIGludCByZWdpc3Rlcl9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKIAkJCWludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKIHsKIAlpZiAoIXN0cmNtcChyZWZuYW1lLCAiYmFkIikpIHsKLQkJQUxMT0NfR1JPVyhyZXZfYXJndiwgcmV2X2FyZ3ZfbnIgKyAxLCByZXZfYXJndl9hbGxvYyk7Ci0JCXJldl9hcmd2W3Jldl9hcmd2X25yKytdID0geHN0cmR1cChzaGExX3RvX2hleChzaGExKSk7CisJCWN1cnJlbnRfYmFkX3NoYTEgPSBzaGExOwogCX0gZWxzZSBpZiAoIXByZWZpeGNtcChyZWZuYW1lLCAiZ29vZC0iKSkgewotCQljb25zdCBjaGFyICpoZXggPSBzaGExX3RvX2hleChzaGExKTsKLQkJY2hhciAqZ29vZCA9IHhtYWxsb2Moc3RybGVuKGhleCkgKyAyKTsKLQkJKmdvb2QgPSAnXic7Ci0JCW1lbWNweShnb29kICsgMSwgaGV4LCBzdHJsZW4oaGV4KSArIDEpOwotCQlBTExPQ19HUk9XKHJldl9hcmd2LCByZXZfYXJndl9uciArIDEsIHJldl9hcmd2X2FsbG9jKTsKLQkJcmV2X2FyZ3ZbcmV2X2FyZ3ZfbnIrK10gPSBnb29kOworCQlzaGExX2FycmF5X3B1c2goJmdvb2RfcmV2cywgc2hhMSk7CiAJfSBlbHNlIGlmICghcHJlZml4Y21wKHJlZm5hbWUsICJza2lwLSIpKSB7Ci0JCUFMTE9DX0dST1coc2tpcHBlZF9zaGExLCBza2lwcGVkX3NoYTFfbnIgKyAxLAotCQkJICAgc2tpcHBlZF9zaGExX2FsbG9jKTsKLQkJaGFzaGNweShza2lwcGVkX3NoYTFbc2tpcHBlZF9zaGExX25yKytdLCBzaGExKTsKKwkJc2hhMV9hcnJheV9wdXNoKCZza2lwcGVkX3JldnMsIHNoYTEpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDI1LDE0ICs0NTQsMTQgQEAKIAlyZXR1cm4gZm9yX2VhY2hfcmVmX2luKCJyZWZzL2Jpc2VjdC8iLCByZWdpc3Rlcl9yZWYsIE5VTEwpOwogfQogCi12b2lkIHJlYWRfYmlzZWN0X3BhdGhzKHZvaWQpCitzdGF0aWMgdm9pZCByZWFkX2Jpc2VjdF9wYXRocyhzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXkpCiB7CiAJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKIAljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJCSVNFQ1RfTkFNRVMiKTsKIAlGSUxFICpmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwogCiAJaWYgKCFmcCkKLQkJZGllKCJDb3VsZCBub3Qgb3BlbiBmaWxlICclcyc6ICVzIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiQ291bGQgbm90IG9wZW4gZmlsZSAnJXMnIiwgZmlsZW5hbWUpOwogCiAJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZzdHIsIGZwLCAnXG4nKSAhPSBFT0YpIHsKIAkJY2hhciAqcXVvdGVkOwpAQCAtNDQwLDggKzQ2OSw4IEBACiAKIAkJc3RyYnVmX3RyaW0oJnN0cik7CiAJCXF1b3RlZCA9IHN0cmJ1Zl9kZXRhY2goJnN0ciwgTlVMTCk7Ci0JCXJlcyA9IHNxX2RlcXVvdGVfdG9fYXJndihxdW90ZWQsICZyZXZfYXJndiwKLQkJCQkJICZyZXZfYXJndl9uciwgJnJldl9hcmd2X2FsbG9jKTsKKwkJcmVzID0gc3FfZGVxdW90ZV90b19hcmd2KHF1b3RlZCwgJmFycmF5LT5hcmd2LAorCQkJCQkgJmFycmF5LT5hcmd2X25yLCAmYXJyYXktPmFyZ3ZfYWxsb2MpOwogCQlpZiAocmVzKQogCQkJZGllKCJCYWRseSBxdW90ZWQgY29udGVudCBpbiBmaWxlICclcyc6ICVzIiwKIAkJCSAgICBmaWxlbmFtZSwgcXVvdGVkKTsKQEAgLTQ1MSwxMDYgKzQ4MCw1MjcgQEAKIAlmY2xvc2UoZnApOwogfQogCi1zdGF0aWMgaW50IHNraXBjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3N0YXRpYyBpbnQgYXJyYXlfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiB7CiAJcmV0dXJuIGhhc2hjbXAoYSwgYik7CiB9CiAKLXN0YXRpYyB2b2lkIHByZXBhcmVfc2tpcHBlZCh2b2lkKQorc3RhdGljIHZvaWQgc29ydF9zaGExX2FycmF5KHN0cnVjdCBzaGExX2FycmF5ICphcnJheSkKIHsKLQlxc29ydChza2lwcGVkX3NoYTEsIHNraXBwZWRfc2hhMV9uciwgc2l6ZW9mKCpza2lwcGVkX3NoYTEpLCBza2lwY21wKTsKKwlxc29ydChhcnJheS0+c2hhMSwgYXJyYXktPnNoYTFfbnIsIHNpemVvZigqYXJyYXktPnNoYTEpLCBhcnJheV9jbXApOworCisJYXJyYXktPnNvcnRlZCA9IDE7CiB9CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpza2lwcGVkX3NoYTFfYWNjZXNzKHNpemVfdCBpbmRleCwgdm9pZCAqdGFibGUpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMV9hY2Nlc3Moc2l6ZV90IGluZGV4LCB2b2lkICp0YWJsZSkKIHsKLQl1bnNpZ25lZCBjaGFyICgqc2tpcHBlZClbMjBdID0gdGFibGU7Ci0JcmV0dXJuIHNraXBwZWRbaW5kZXhdOworCXVuc2lnbmVkIGNoYXIgKCphcnJheSlbMjBdID0gdGFibGU7CisJcmV0dXJuIGFycmF5W2luZGV4XTsKIH0KIAotc3RhdGljIGludCBsb29rdXBfc2tpcHBlZCh1bnNpZ25lZCBjaGFyICpzaGExKQorc3RhdGljIGludCBsb29rdXBfc2hhMV9hcnJheShzdHJ1Y3Qgc2hhMV9hcnJheSAqYXJyYXksCisJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7Ci0JcmV0dXJuIHNoYTFfcG9zKHNoYTEsIHNraXBwZWRfc2hhMSwgc2tpcHBlZF9zaGExX25yLAotCQkJc2tpcHBlZF9zaGExX2FjY2Vzcyk7CisJaWYgKCFhcnJheS0+c29ydGVkKQorCQlzb3J0X3NoYTFfYXJyYXkoYXJyYXkpOworCisJcmV0dXJuIHNoYTFfcG9zKHNoYTEsIGFycmF5LT5zaGExLCBhcnJheS0+c2hhMV9uciwgc2hhMV9hY2Nlc3MpOwogfQogCitzdGF0aWMgY2hhciAqam9pbl9zaGExX2FycmF5X2hleChzdHJ1Y3Qgc2hhMV9hcnJheSAqYXJyYXksIGNoYXIgZGVsaW0pCit7CisJc3RydWN0IHN0cmJ1ZiBqb2luZWRfaGV4cyA9IFNUUkJVRl9JTklUOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFycmF5LT5zaGExX25yOyBpKyspIHsKKwkJc3RyYnVmX2FkZHN0cigmam9pbmVkX2hleHMsIHNoYTFfdG9faGV4KGFycmF5LT5zaGExW2ldKSk7CisJCWlmIChpICsgMSA8IGFycmF5LT5zaGExX25yKQorCQkJc3RyYnVmX2FkZGNoKCZqb2luZWRfaGV4cywgZGVsaW0pOworCX0KKworCXJldHVybiBzdHJidWZfZGV0YWNoKCZqb2luZWRfaGV4cywgTlVMTCk7Cit9CisKKy8qCisgKiBJbiB0aGlzIGZ1bmN0aW9uLCBwYXNzaW5nIGEgbm90IE5VTEwgc2tpcHBlZF9maXJzdCBpcyB2ZXJ5IHNwZWNpYWwuCisgKiBJdCBtZWFucyB0aGF0IHdlIHdhbnQgdG8ga25vdyBpZiB0aGUgZmlyc3QgY29tbWl0IGluIHRoZSBsaXN0IGlzCisgKiBza2lwcGVkIGJlY2F1c2Ugd2Ugd2lsbCB3YW50IHRvIHRlc3QgYSBjb21taXQgYXdheSBmcm9tIGl0IGlmIGl0IGlzCisgKiBpbmRlZWQgc2tpcHBlZC4KKyAqIFNvIGlmIHRoZSBmaXJzdCBjb21taXQgaXMgc2tpcHBlZCwgd2UgY2Fubm90IHRha2UgdGhlIHNob3J0Y3V0IHRvCisgKiBqdXN0ICJyZXR1cm4gbGlzdCIgd2hlbiB3ZSBmaW5kIHRoZSBmaXJzdCBub24gc2tpcHBlZCBjb21taXQsIHdlCisgKiBoYXZlIHRvIHJldHVybiBhIGZ1bGx5IGZpbHRlcmVkIGxpc3QuCisgKgorICogV2UgdXNlICgqc2tpcHBlZF9maXJzdCA9PSAtMSkgdG8gbWVhbiAiaXQgaGFzIGJlZW4gZm91bmQgdGhhdCB0aGUKKyAqIGZpcnN0IGNvbW1pdCBpcyBub3Qgc2tpcHBlZCIuIEluIHRoaXMgY2FzZSAqc2tpcHBlZF9maXJzdCBpcyBzZXQgYmFjaworICogdG8gMCBqdXN0IGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKyAqLwogc3RydWN0IGNvbW1pdF9saXN0ICpmaWx0ZXJfc2tpcHBlZChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCiAJCQkJICAgc3RydWN0IGNvbW1pdF9saXN0ICoqdHJpZWQsCi0JCQkJICAgaW50IHNob3dfYWxsKQorCQkJCSAgIGludCBzaG93X2FsbCwKKwkJCQkgICBpbnQgKmNvdW50LAorCQkJCSAgIGludCAqc2tpcHBlZF9maXJzdCkKIHsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpbHRlcmVkID0gTlVMTCwgKipmID0gJmZpbHRlcmVkOwogCiAJKnRyaWVkID0gTlVMTDsKIAotCWlmICghc2tpcHBlZF9zaGExX25yKQotCQlyZXR1cm4gbGlzdDsKKwlpZiAoc2tpcHBlZF9maXJzdCkKKwkJKnNraXBwZWRfZmlyc3QgPSAwOworCWlmIChjb3VudCkKKwkJKmNvdW50ID0gMDsKIAotCXByZXBhcmVfc2tpcHBlZCgpOworCWlmICghc2tpcHBlZF9yZXZzLnNoYTFfbnIpCisJCXJldHVybiBsaXN0OwogCiAJd2hpbGUgKGxpc3QpIHsKIAkJc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0ID0gbGlzdC0+bmV4dDsKIAkJbGlzdC0+bmV4dCA9IE5VTEw7Ci0JCWlmICgwIDw9IGxvb2t1cF9za2lwcGVkKGxpc3QtPml0ZW0tPm9iamVjdC5zaGExKSkgeworCQlpZiAoMCA8PSBsb29rdXBfc2hhMV9hcnJheSgmc2tpcHBlZF9yZXZzLAorCQkJCQkgICBsaXN0LT5pdGVtLT5vYmplY3Quc2hhMSkpIHsKKwkJCWlmIChza2lwcGVkX2ZpcnN0ICYmICEqc2tpcHBlZF9maXJzdCkKKwkJCQkqc2tpcHBlZF9maXJzdCA9IDE7CiAJCQkvKiBNb3ZlIGN1cnJlbnQgdG8gdHJpZWQgbGlzdCAqLwogCQkJKnRyaWVkID0gbGlzdDsKIAkJCXRyaWVkID0gJmxpc3QtPm5leHQ7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoIXNob3dfYWxsKQotCQkJCXJldHVybiBsaXN0OworCQkJaWYgKCFzaG93X2FsbCkgeworCQkJCWlmICghc2tpcHBlZF9maXJzdCB8fCAhKnNraXBwZWRfZmlyc3QpCisJCQkJCXJldHVybiBsaXN0OworCQkJfSBlbHNlIGlmIChza2lwcGVkX2ZpcnN0ICYmICEqc2tpcHBlZF9maXJzdCkgeworCQkJCS8qIFRoaXMgbWVhbnMgd2Uga25vdyBpdCdzIG5vdCBza2lwcGVkICovCisJCQkJKnNraXBwZWRfZmlyc3QgPSAtMTsKKwkJCX0KIAkJCS8qIE1vdmUgY3VycmVudCB0byBmaWx0ZXJlZCBsaXN0ICovCiAJCQkqZiA9IGxpc3Q7CiAJCQlmID0gJmxpc3QtPm5leHQ7CisJCQlpZiAoY291bnQpCisJCQkJKCpjb3VudCkrKzsKIAkJfQogCQlsaXN0ID0gbmV4dDsKIAl9CiAKKwlpZiAoc2tpcHBlZF9maXJzdCAmJiAqc2tpcHBlZF9maXJzdCA9PSAtMSkKKwkJKnNraXBwZWRfZmlyc3QgPSAwOworCiAJcmV0dXJuIGZpbHRlcmVkOwogfQogCi1zdGF0aWMgdm9pZCBiaXNlY3RfcmV2X3NldHVwKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqcHJlZml4KQorI2RlZmluZSBQUk5fTU9EVUxPIDMyNzY4CisKKy8qCisgKiBUaGlzIGlzIGEgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGJhc2VkIG9uICJtYW4gMyByYW5kIi4KKyAqIEl0IGlzIG5vdCB1c2VkIHByb3Blcmx5IGJlY2F1c2UgdGhlIHNlZWQgaXMgdGhlIGFyZ3VtZW50IGFuZCBpdAorICogaXMgaW5jcmVhc2VkIGJ5IG9uZSBiZXR3ZWVuIGVhY2ggY2FsbCwgYnV0IHRoYXQgc2hvdWxkIG5vdCBtYXR0ZXIKKyAqIGZvciB0aGlzIGFwcGxpY2F0aW9uLgorICovCitpbnQgZ2V0X3BybihpbnQgY291bnQpIHsKKwljb3VudCA9IGNvdW50ICogMTEwMzUxNTI0NSArIDEyMzQ1OworCXJldHVybiAoKHVuc2lnbmVkKShjb3VudC82NTUzNikgJSBQUk5fTU9EVUxPKTsKK30KKworLyoKKyAqIEN1c3RvbSBpbnRlZ2VyIHNxdWFyZSByb290IGZyb20KKyAqIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZWdlcl9zcXVhcmVfcm9vdAorICovCitzdGF0aWMgaW50IHNxcnRpKGludCB2YWwpCiB7CisJZmxvYXQgZCwgeCA9IHZhbDsKKworCWlmICh2YWwgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlkbyB7CisJCWZsb2F0IHkgPSAoeCArIChmbG9hdCl2YWwgLyB4KSAvIDI7CisJCWQgPSAoeSA+IHgpID8geSAtIHggOiB4IC0geTsKKwkJeCA9IHk7CisJfSB3aGlsZSAoZCA+PSAwLjUpOworCisJcmV0dXJuIChpbnQpeDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqc2tpcF9hd2F5KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwgaW50IGNvdW50KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqY3VyLCAqcHJldmlvdXM7CisJaW50IHBybiwgaW5kZXgsIGk7CisKKwlwcm4gPSBnZXRfcHJuKGNvdW50KTsKKwlpbmRleCA9IChjb3VudCAqIHBybiAvIFBSTl9NT0RVTE8pICogc3FydGkocHJuKSAvIHNxcnRpKFBSTl9NT0RVTE8pOworCisJY3VyID0gbGlzdDsKKwlwcmV2aW91cyA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBjdXI7IGN1ciA9IGN1ci0+bmV4dCwgaSsrKSB7CisJCWlmIChpID09IGluZGV4KSB7CisJCQlpZiAoaGFzaGNtcChjdXItPml0ZW0tPm9iamVjdC5zaGExLCBjdXJyZW50X2JhZF9zaGExKSkKKwkJCQlyZXR1cm4gY3VyOworCQkJaWYgKHByZXZpb3VzKQorCQkJCXJldHVybiBwcmV2aW91czsKKwkJCXJldHVybiBsaXN0OworCQl9CisJCXByZXZpb3VzID0gY3VyOworCX0KKworCXJldHVybiBsaXN0OworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICptYW5hZ2VkX3NraXBwZWQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCQkgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKip0cmllZCkKK3sKKwlpbnQgY291bnQsIHNraXBwZWRfZmlyc3Q7CisKKwkqdHJpZWQgPSBOVUxMOworCisJaWYgKCFza2lwcGVkX3JldnMuc2hhMV9ucikKKwkJcmV0dXJuIGxpc3Q7CisKKwlsaXN0ID0gZmlsdGVyX3NraXBwZWQobGlzdCwgdHJpZWQsIDAsICZjb3VudCwgJnNraXBwZWRfZmlyc3QpOworCisJaWYgKCFza2lwcGVkX2ZpcnN0KQorCQlyZXR1cm4gbGlzdDsKKworCXJldHVybiBza2lwX2F3YXkobGlzdCwgY291bnQpOworfQorCitzdGF0aWMgdm9pZCBiaXNlY3RfcmV2X3NldHVwKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICBjb25zdCBjaGFyICpiYWRfZm9ybWF0LCBjb25zdCBjaGFyICpnb29kX2Zvcm1hdCwKKwkJCSAgICAgaW50IHJlYWRfcGF0aHMpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgcmV2X2FyZ3YgPSB7IE5VTEwsIDAsIDAgfTsKKwlpbnQgaTsKKwogCWluaXRfcmV2aXNpb25zKHJldnMsIHByZWZpeCk7CiAJcmV2cy0+YWJicmV2ID0gMDsKIAlyZXZzLT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfVU5TUEVDSUZJRUQ7CiAKLQkvKiBhcmd2WzBdIHdpbGwgYmUgaWdub3JlZCBieSBzZXR1cF9yZXZpc2lvbnMgKi8KLQlBTExPQ19HUk9XKHJldl9hcmd2LCByZXZfYXJndl9uciArIDEsIHJldl9hcmd2X2FsbG9jKTsKLQlyZXZfYXJndltyZXZfYXJndl9ucisrXSA9IHhzdHJkdXAoImJpc2VjdF9yZXZfc2V0dXAiKTsKKwkvKiByZXZfYXJndi5hcmd2WzBdIHdpbGwgYmUgaWdub3JlZCBieSBzZXR1cF9yZXZpc2lvbnMgKi8KKwlhcmd2X2FycmF5X3B1c2goJnJldl9hcmd2LCB4c3RyZHVwKCJiaXNlY3RfcmV2X3NldHVwIikpOworCWFyZ3ZfYXJyYXlfcHVzaF9zaGExKCZyZXZfYXJndiwgY3VycmVudF9iYWRfc2hhMSwgYmFkX2Zvcm1hdCk7CisJZm9yIChpID0gMDsgaSA8IGdvb2RfcmV2cy5zaGExX25yOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaF9zaGExKCZyZXZfYXJndiwgZ29vZF9yZXZzLnNoYTFbaV0sCisJCQkJICAgICBnb29kX2Zvcm1hdCk7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfYXJndiwgeHN0cmR1cCgiLS0iKSk7CisJaWYgKHJlYWRfcGF0aHMpCisJCXJlYWRfYmlzZWN0X3BhdGhzKCZyZXZfYXJndik7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfYXJndiwgTlVMTCk7CisKKwlzZXR1cF9yZXZpc2lvbnMocmV2X2FyZ3YuYXJndl9uciwgcmV2X2FyZ3YuYXJndiwgcmV2cywgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGJpc2VjdF9jb21tb24oc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwlpZiAocmV2cy0+dHJlZV9vYmplY3RzKQorCQltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcocmV2cy0+Y29tbWl0cywgcmV2cywgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4aXRfaWZfc2tpcHBlZF9jb21taXRzKHN0cnVjdCBjb21taXRfbGlzdCAqdHJpZWQsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhZCkKK3sKKwlpZiAoIXRyaWVkKQorCQlyZXR1cm47CisKKwlwcmludGYoIlRoZXJlIGFyZSBvbmx5ICdza2lwJ3BlZCBjb21taXRzIGxlZnQgdG8gdGVzdC5cbiIKKwkgICAgICAgIlRoZSBmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZjpcbiIpOworCXByaW50X2NvbW1pdF9saXN0KHRyaWVkLCAiJXNcbiIsICIlc1xuIik7CisJaWYgKGJhZCkKKwkJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgoYmFkKSk7CisJcHJpbnRmKCJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iKTsKKwlleGl0KDIpOworfQorCitzdGF0aWMgaW50IGlzX2V4cGVjdGVkX3Jldihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGgoIkJJU0VDVF9FWFBFQ1RFRF9SRVYiKTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgc3RyYnVmIHN0ciA9IFNUUkJVRl9JTklUOworCUZJTEUgKmZwOworCWludCByZXMgPSAwOworCisJaWYgKHN0YXQoZmlsZW5hbWUsICZzdCkgfHwgIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCXJldHVybiAwOworCisJZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJidWZfZ2V0bGluZSgmc3RyLCBmcCwgJ1xuJykgIT0gRU9GKQorCQlyZXMgPSAhc3RyY21wKHN0ci5idWYsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzdHIpOworCWZjbG9zZShmcCk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2V4cGVjdGVkX3JldihjaGFyICpiaXNlY3RfcmV2X2hleCkKK3sKKwlpbnQgbGVuID0gc3RybGVuKGJpc2VjdF9yZXZfaGV4KTsKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJCSVNFQ1RfRVhQRUNURURfUkVWIik7CisJaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSwgMDYwMCk7CisKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIiwgZmlsZW5hbWUpOworCisJYmlzZWN0X3Jldl9oZXhbbGVuXSA9ICdcbic7CisJd3JpdGVfb3JfZGllKGZkLCBiaXNlY3RfcmV2X2hleCwgbGVuICsgMSk7CisJYmlzZWN0X3Jldl9oZXhbbGVuXSA9ICdcMCc7CisKKwlpZiAoY2xvc2UoZmQpIDwgMCkKKwkJZGllKCJjbG9zaW5nIGZpbGUgJXM6ICVzIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7Cit9CisKK3N0YXRpYyBpbnQgYmlzZWN0X2NoZWNrb3V0KGNoYXIgKmJpc2VjdF9yZXZfaGV4KQoreworCWludCByZXM7CisKKwltYXJrX2V4cGVjdGVkX3JldihiaXNlY3RfcmV2X2hleCk7CisKKwlhcmd2X2NoZWNrb3V0WzJdID0gYmlzZWN0X3Jldl9oZXg7CisJcmVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9jaGVja291dCwgUlVOX0dJVF9DTUQpOworCWlmIChyZXMpCisJCWV4aXQocmVzKTsKKworCWFyZ3Zfc2hvd19icmFuY2hbMV0gPSBiaXNlY3RfcmV2X2hleDsKKwlyZXR1cm4gcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9zaG93X2JyYW5jaCwgUlVOX0dJVF9DTUQpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqZ2V0X2NvbW1pdF9yZWZlcmVuY2UoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpyID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisJaWYgKCFyKQorCQlkaWUoIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCXJldHVybiByOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqKmdldF9iYWRfYW5kX2dvb2RfY29tbWl0cyhpbnQgKnJldl9ucikKK3sKKwlpbnQgbGVuID0gMSArIGdvb2RfcmV2cy5zaGExX25yOworCXN0cnVjdCBjb21taXQgKipyZXYgPSB4bWFsbG9jKGxlbiAqIHNpemVvZigqcmV2KSk7CisJaW50IGksIG4gPSAwOworCisJcmV2W24rK10gPSBnZXRfY29tbWl0X3JlZmVyZW5jZShjdXJyZW50X2JhZF9zaGExKTsKKwlmb3IgKGkgPSAwOyBpIDwgZ29vZF9yZXZzLnNoYTFfbnI7IGkrKykKKwkJcmV2W24rK10gPSBnZXRfY29tbWl0X3JlZmVyZW5jZShnb29kX3JldnMuc2hhMVtpXSk7CisJKnJldl9uciA9IG47CisKKwlyZXR1cm4gcmV2OworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYmFkX21lcmdlX2Jhc2Uodm9pZCkKK3sKKwlpZiAoaXNfZXhwZWN0ZWRfcmV2KGN1cnJlbnRfYmFkX3NoYTEpKSB7CisJCWNoYXIgKmJhZF9oZXggPSBzaGExX3RvX2hleChjdXJyZW50X2JhZF9zaGExKTsKKwkJY2hhciAqZ29vZF9oZXggPSBqb2luX3NoYTFfYXJyYXlfaGV4KCZnb29kX3JldnMsICcgJyk7CisKKwkJZnByaW50ZihzdGRlcnIsICJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBiYWQuXG4iCisJCQkiVGhpcyBtZWFucyB0aGUgYnVnIGhhcyBiZWVuIGZpeGVkICIKKwkJCSJiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIiwKKwkJCWJhZF9oZXgsIGJhZF9oZXgsIGdvb2RfaGV4KTsKKworCQlleGl0KDMpOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiU29tZSBnb29kIHJldnMgYXJlIG5vdCBhbmNlc3RvciBvZiB0aGUgYmFkIHJldi5cbiIKKwkJImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorCQkiTWF5YmUgeW91IG1pc3Rha2UgZ29vZCBhbmQgYmFkIHJldnM/XG4iKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfc2tpcHBlZF9tZXJnZV9iYXNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1iKQoreworCWNoYXIgKm1iX2hleCA9IHNoYTFfdG9faGV4KG1iKTsKKwljaGFyICpiYWRfaGV4ID0gc2hhMV90b19oZXgoY3VycmVudF9iYWRfc2hhMSk7CisJY2hhciAqZ29vZF9oZXggPSBqb2luX3NoYTFfYXJyYXlfaGV4KCZnb29kX3JldnMsICcgJyk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IHRoZSBtZXJnZSBiYXNlIGJldHdlZW4gJXMgYW5kIFslc10gIgorCQkibXVzdCBiZSBza2lwcGVkLlxuIgorCQkiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0IGJhZCBjb21taXQgaXMgIgorCQkiYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisJCSJXZSBjb250aW51ZSBhbnl3YXkuXG4iLAorCQliYWRfaGV4LCBnb29kX2hleCwgbWJfaGV4LCBiYWRfaGV4KTsKKwlmcmVlKGdvb2RfaGV4KTsKK30KKworLyoKKyAqICJjaGVja19tZXJnZV9iYXNlcyIgY2hlY2tzIHRoYXQgbWVyZ2UgYmFzZXMgYXJlIG5vdCAiYmFkIi4KKyAqCisgKiAtIElmIG9uZSBpcyAiYmFkIiwgaXQgbWVhbnMgdGhlIHVzZXIgYXNzdW1lZCBzb21ldGhpbmcgd3JvbmcKKyAqIGFuZCB3ZSBtdXN0IGV4aXQgd2l0aCBhIG5vbiAwIGVycm9yIGNvZGUuCisgKiAtIElmIG9uZSBpcyAiZ29vZCIsIHRoYXQncyBnb29kLCB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgKiAtIElmIG9uZSBpcyAic2tpcHBlZCIsIHdlIGNhbid0IGtub3cgYnV0IHdlIHNob3VsZCB3YXJuLgorICogLSBJZiB3ZSBkb24ndCBrbm93LCB3ZSBzaG91bGQgY2hlY2sgaXQgb3V0IGFuZCBhc2sgdGhlIHVzZXIgdG8gdGVzdC4KKyAqLworc3RhdGljIHZvaWQgY2hlY2tfbWVyZ2VfYmFzZXModm9pZCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdDsKKwlpbnQgcmV2X25yOworCXN0cnVjdCBjb21taXQgKipyZXYgPSBnZXRfYmFkX2FuZF9nb29kX2NvbW1pdHMoJnJldl9ucik7CisKKwlyZXN1bHQgPSBnZXRfbWVyZ2VfYmFzZXNfbWFueShyZXZbMF0sIHJldl9uciAtIDEsIHJldiArIDEsIDApOworCisJZm9yICg7IHJlc3VsdDsgcmVzdWx0ID0gcmVzdWx0LT5uZXh0KSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm1iID0gcmVzdWx0LT5pdGVtLT5vYmplY3Quc2hhMTsKKwkJaWYgKCFoYXNoY21wKG1iLCBjdXJyZW50X2JhZF9zaGExKSkgeworCQkJaGFuZGxlX2JhZF9tZXJnZV9iYXNlKCk7CisJCX0gZWxzZSBpZiAoMCA8PSBsb29rdXBfc2hhMV9hcnJheSgmZ29vZF9yZXZzLCBtYikpIHsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKDAgPD0gbG9va3VwX3NoYTFfYXJyYXkoJnNraXBwZWRfcmV2cywgbWIpKSB7CisJCQloYW5kbGVfc2tpcHBlZF9tZXJnZV9iYXNlKG1iKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIpOworCQkJZXhpdChiaXNlY3RfY2hlY2tvdXQoc2hhMV90b19oZXgobWIpKSk7CisJCX0KKwl9CisKKwlmcmVlKHJldik7CisJZnJlZV9jb21taXRfbGlzdChyZXN1bHQpOworfQorCitzdGF0aWMgaW50IGNoZWNrX2FuY2VzdG9ycyhjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IG9iamVjdF9hcnJheSBwZW5kaW5nX2NvcHk7CisJaW50IGksIHJlczsKKworCWJpc2VjdF9yZXZfc2V0dXAoJnJldnMsIHByZWZpeCwgIl4lcyIsICIlcyIsIDApOworCisJLyogU2F2ZSBwZW5kaW5nIG9iamVjdHMsIHNvIHRoZXkgY2FuIGJlIGNsZWFuZWQgdXAgbGF0ZXIuICovCisJbWVtc2V0KCZwZW5kaW5nX2NvcHksIDAsIHNpemVvZihwZW5kaW5nX2NvcHkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy5wZW5kaW5nLm5yOyBpKyspCisJCWFkZF9vYmplY3RfYXJyYXkocmV2cy5wZW5kaW5nLm9iamVjdHNbaV0uaXRlbSwKKwkJCQkgcmV2cy5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSwKKwkJCQkgJnBlbmRpbmdfY29weSk7CisKKwliaXNlY3RfY29tbW9uKCZyZXZzKTsKKwlyZXMgPSAocmV2cy5jb21taXRzICE9IE5VTEwpOworCisJLyogQ2xlYW4gdXAgb2JqZWN0cyB1c2VkLCBhcyB0aGV5IHdpbGwgYmUgcmV1c2VkLiAqLworCWZvciAoaSA9IDA7IGkgPCBwZW5kaW5nX2NvcHkubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGVuZGluZ19jb3B5Lm9iamVjdHNbaV0uaXRlbTsKKwkJY2xlYXJfY29tbWl0X21hcmtzKChzdHJ1Y3QgY29tbWl0ICopbywgQUxMX1JFVl9GTEFHUyk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqICJjaGVja19nb29kX2FyZV9hbmNlc3RvcnNfb2ZfYmFkIiBjaGVja3MgdGhhdCBhbGwgImdvb2QiIHJldnMgYXJlCisgKiBhbmNlc3RvciBvZiB0aGUgImJhZCIgcmV2LgorICoKKyAqIElmIHRoYXQncyBub3QgdGhlIGNhc2UsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIG1lcmdlIGJhc2VzLgorICogSWYgYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIGJ5IHRoZSB1c2VyLCBpdHMgc291cmNlIGNvZGUgd2lsbCBiZQorICogY2hlY2tlZCBvdXQgdG8gYmUgdGVzdGVkIGJ5IHRoZSB1c2VyIGFuZCB3ZSB3aWxsIGV4aXQuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX2dvb2RfYXJlX2FuY2VzdG9yc19vZl9iYWQoY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGgoIkJJU0VDVF9BTkNFU1RPUlNfT0siKTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgZmQ7CisKKwlpZiAoIWN1cnJlbnRfYmFkX3NoYTEpCisJCWRpZSgiYSBiYWQgcmV2aXNpb24gaXMgbmVlZGVkIik7CisKKwkvKiBDaGVjayBpZiBmaWxlIEJJU0VDVF9BTkNFU1RPUlNfT0sgZXhpc3RzLiAqLworCWlmICghc3RhdChmaWxlbmFtZSwgJnN0KSAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKQorCQlyZXR1cm47CisKKwkvKiBCaXNlY3Rpbmcgd2l0aCBubyBnb29kIHJldiBpcyBvay4gKi8KKwlpZiAoZ29vZF9yZXZzLnNoYTFfbnIgPT0gMCkKKwkJcmV0dXJuOworCisJLyogQ2hlY2sgaWYgYWxsIGdvb2QgcmV2cyBhcmUgYW5jZXN0b3Igb2YgdGhlIGJhZCByZXYuICovCisJaWYgKGNoZWNrX2FuY2VzdG9ycyhwcmVmaXgpKQorCQljaGVja19tZXJnZV9iYXNlcygpOworCisJLyogQ3JlYXRlIGZpbGUgQklTRUNUX0FOQ0VTVE9SU19PSy4gKi8KKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9OTFksIDA2MDApOworCWlmIChmZCA8IDApCisJCXdhcm5pbmcoImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnOiAlcyIsCisJCQlmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwllbHNlCisJCWNsb3NlKGZkKTsKK30KKworLyoKKyAqIFRoaXMgZG9lcyAiZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSBDT01NSVQiIHdpdGhvdXQgb25lIGZvcmsrZXhlYy4KKyAqLworc3RhdGljIHZvaWQgc2hvd19kaWZmX3RyZWUoY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHJldl9pbmZvIG9wdDsKKworCS8qIGRpZmYtdHJlZSBpbml0ICovCisJaW5pdF9yZXZpc2lvbnMoJm9wdCwgcHJlZml4KTsKKwlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZywgTlVMTCk7IC8qIG5vICJkaWZmIiBVSSBvcHRpb25zICovCisJb3B0LmFiYnJldiA9IDA7CisJb3B0LmRpZmYgPSAxOworCisJLyogVGhpcyBpcyB3aGF0ICItLXByZXR0eSIgZG9lcyAqLworCW9wdC52ZXJib3NlX2hlYWRlciA9IDE7CisJb3B0LnVzZV90ZXJtaW5hdG9yID0gMDsKKwlvcHQuY29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX0RFRkFVTFQ7CisKKwkvKiBkaWZmLXRyZWUgaW5pdCAqLworCWlmICghb3B0LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKKwkJb3B0LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1JBVzsKKworCWxvZ190cmVlX2NvbW1pdCgmb3B0LCBjb21taXQpOworfQorCisvKgorICogV2UgdXNlIHRoZSBjb252ZW50aW9uIHRoYXQgZXhpdGluZyB3aXRoIGFuIGV4aXQgY29kZSAxMCBtZWFucyB0aGF0CisgKiB0aGUgYmlzZWN0aW9uIHByb2Nlc3MgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LgorICogSW4gdGhpcyBjYXNlIHRoZSBjYWxsaW5nIHNoZWxsIHNjcmlwdCBzaG91bGQgZXhpdCAwLgorICovCitpbnQgYmlzZWN0X25leHRfYWxsKGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnRyaWVkOworCWludCByZWFjaGVzID0gMCwgYWxsID0gMCwgbnI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYmlzZWN0X3JldjsKKwljaGFyIGJpc2VjdF9yZXZfaGV4WzQxXTsKIAogCWlmIChyZWFkX2Jpc2VjdF9yZWZzKCkpCiAJCWRpZSgicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiKTsKIAotCUFMTE9DX0dST1cocmV2X2FyZ3YsIHJldl9hcmd2X25yICsgMSwgcmV2X2FyZ3ZfYWxsb2MpOwotCXJldl9hcmd2W3Jldl9hcmd2X25yKytdID0geHN0cmR1cCgiLS0iKTsKKwljaGVja19nb29kX2FyZV9hbmNlc3RvcnNfb2ZfYmFkKHByZWZpeCk7CiAKLQlyZWFkX2Jpc2VjdF9wYXRocygpOworCWJpc2VjdF9yZXZfc2V0dXAoJnJldnMsIHByZWZpeCwgIiVzIiwgIl4lcyIsIDEpOworCXJldnMubGltaXRlZCA9IDE7CiAKLQlBTExPQ19HUk9XKHJldl9hcmd2LCByZXZfYXJndl9uciArIDEsIHJldl9hcmd2X2FsbG9jKTsKLQlyZXZfYXJndltyZXZfYXJndl9ucisrXSA9IE5VTEw7Ci0KLQlzZXR1cF9yZXZpc2lvbnMocmV2X2FyZ3ZfbnIsIHJldl9hcmd2LCByZXZzLCBOVUxMKTsKLQotCXJldnMtPmxpbWl0ZWQgPSAxOwotfQotCi1pbnQgYmlzZWN0X25leHRfdmFycyhjb25zdCBjaGFyICpwcmVmaXgpCi17Ci0Jc3RydWN0IHJldl9pbmZvIHJldnM7Ci0Jc3RydWN0IHJldl9saXN0X2luZm8gaW5mbzsKLQlpbnQgcmVhY2hlcyA9IDAsIGFsbCA9IDA7Ci0KLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0JaW5mby5yZXZzID0gJnJldnM7Ci0JaW5mby5iaXNlY3Rfc2hvd19mbGFncyA9IEJJU0VDVF9TSE9XX1RSSUVEIHwgQklTRUNUX1NIT1dfU1RSSU5HRUQ7Ci0KLQliaXNlY3RfcmV2X3NldHVwKCZyZXZzLCBwcmVmaXgpOwotCi0JaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCi0JCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKLQlpZiAocmV2cy50cmVlX29iamVjdHMpCi0JCW1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZyhyZXZzLmNvbW1pdHMsICZyZXZzLCBOVUxMKTsKKwliaXNlY3RfY29tbW9uKCZyZXZzKTsKIAogCXJldnMuY29tbWl0cyA9IGZpbmRfYmlzZWN0aW9uKHJldnMuY29tbWl0cywgJnJlYWNoZXMsICZhbGwsCi0JCQkJICAgICAgISFza2lwcGVkX3NoYTFfbnIpOworCQkJCSAgICAgICAhIXNraXBwZWRfcmV2cy5zaGExX25yKTsKKwlyZXZzLmNvbW1pdHMgPSBtYW5hZ2VkX3NraXBwZWQocmV2cy5jb21taXRzLCAmdHJpZWQpOwogCi0JcmV0dXJuIHNob3dfYmlzZWN0X3ZhcnMoJmluZm8sIHJlYWNoZXMsIGFsbCk7CisJaWYgKCFyZXZzLmNvbW1pdHMpIHsKKwkJLyoKKwkJICogV2Ugc2hvdWxkIGV4aXQgaGVyZSBvbmx5IGlmIHRoZSAiYmFkIgorCQkgKiBjb21taXQgaXMgYWxzbyBhICJza2lwIiBjb21taXQuCisJCSAqLworCQlleGl0X2lmX3NraXBwZWRfY29tbWl0cyh0cmllZCwgTlVMTCk7CisKKwkJcHJpbnRmKCIlcyB3YXMgYm90aCBnb29kIGFuZCBiYWRcbiIsCisJCSAgICAgICBzaGExX3RvX2hleChjdXJyZW50X2JhZF9zaGExKSk7CisJCWV4aXQoMSk7CisJfQorCisJYmlzZWN0X3JldiA9IHJldnMuY29tbWl0cy0+aXRlbS0+b2JqZWN0LnNoYTE7CisJbWVtY3B5KGJpc2VjdF9yZXZfaGV4LCBzaGExX3RvX2hleChiaXNlY3RfcmV2KSwgNDEpOworCisJaWYgKCFoYXNoY21wKGJpc2VjdF9yZXYsIGN1cnJlbnRfYmFkX3NoYTEpKSB7CisJCWV4aXRfaWZfc2tpcHBlZF9jb21taXRzKHRyaWVkLCBjdXJyZW50X2JhZF9zaGExKTsKKwkJcHJpbnRmKCIlcyBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdFxuIiwgYmlzZWN0X3Jldl9oZXgpOworCQlzaG93X2RpZmZfdHJlZShwcmVmaXgsIHJldnMuY29tbWl0cy0+aXRlbSk7CisJCS8qIFRoaXMgbWVhbnMgdGhlIGJpc2VjdGlvbiBwcm9jZXNzIHN1Y2NlZWRlZC4gKi8KKwkJZXhpdCgxMCk7CisJfQorCisJbnIgPSBhbGwgLSByZWFjaGVzIC0gMTsKKwlwcmludGYoIkJpc2VjdGluZzogJWQgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICIKKwkgICAgICAgIihyb3VnaGx5ICVkIHN0ZXBzKVxuIiwgbnIsIGVzdGltYXRlX2Jpc2VjdF9zdGVwcyhhbGwpKTsKKworCXJldHVybiBiaXNlY3RfY2hlY2tvdXQoYmlzZWN0X3Jldl9oZXgpOwogfQorCmRpZmYgLS1naXQgYS9iaXNlY3QuaCBiL2Jpc2VjdC5oCmluZGV4IGZkYmE5MTMuLjgyZjhmYzEgMTAwNjQ0Ci0tLSBhL2Jpc2VjdC5oCisrKyBiL2Jpc2VjdC5oCkBAIC03LDEyICs3LDE3IEBACiAKIGV4dGVybiBzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpbHRlcl9za2lwcGVkKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKIAkJCQkJICBzdHJ1Y3QgY29tbWl0X2xpc3QgKip0cmllZCwKLQkJCQkJICBpbnQgc2hvd19hbGwpOworCQkJCQkgIGludCBzaG93X2FsbCwKKwkJCQkJICBpbnQgKmNvdW50LAorCQkJCQkgIGludCAqc2tpcHBlZF9maXJzdCk7CisKK2V4dGVybiB2b2lkIHByaW50X2NvbW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdF9jdXIsCisJCQkgICAgICBjb25zdCBjaGFyICpmb3JtYXRfbGFzdCk7CiAKIC8qIGJpc2VjdF9zaG93X2ZsYWdzIGZsYWdzIGluIHN0cnVjdCByZXZfbGlzdF9pbmZvICovCiAjZGVmaW5lIEJJU0VDVF9TSE9XX0FMTAkJKDE8PDApCiAjZGVmaW5lIEJJU0VDVF9TSE9XX1RSSUVECSgxPDwxKQotI2RlZmluZSBCSVNFQ1RfU0hPV19TVFJJTkdFRAkoMTw8MikKIAogc3RydWN0IHJldl9saXN0X2luZm8gewogCXN0cnVjdCByZXZfaW5mbyAqcmV2czsKQEAgLTI0LDYgKzI5LDggQEAKIAogZXh0ZXJuIGludCBzaG93X2Jpc2VjdF92YXJzKHN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvLCBpbnQgcmVhY2hlcywgaW50IGFsbCk7CiAKLWV4dGVybiBpbnQgYmlzZWN0X25leHRfdmFycyhjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBiaXNlY3RfbmV4dF9hbGwoY29uc3QgY2hhciAqcHJlZml4KTsKKworZXh0ZXJuIGludCBlc3RpbWF0ZV9iaXNlY3Rfc3RlcHMoaW50IGFsbCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYnJhbmNoLmMgYi9icmFuY2guYwppbmRleCA2MjAzMGFmLi4wNWVmM2Y1IDEwMDY0NAotLS0gYS9icmFuY2guYworKysgYi9icmFuY2guYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIAlsb2NrID0gbG9ja19hbnlfcmVmX2Zvcl91cGRhdGUocmVmLmJ1ZiwgTlVMTCwgMCk7CiAJaWYgKCFsb2NrKQotCQlkaWUoIkZhaWxlZCB0byBsb2NrIHJlZiBmb3IgdXBkYXRlOiAlcy4iLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIkZhaWxlZCB0byBsb2NrIHJlZiBmb3IgdXBkYXRlIik7CiAKIAlpZiAocmVmbG9nKQogCQlsb2dfYWxsX3JlZl91cGRhdGVzID0gMTsKQEAgLTE4OCw3ICsxODgsNyBAQAogCQlzZXR1cF90cmFja2luZyhuYW1lLCByZWFsX3JlZiwgdHJhY2spOwogCiAJaWYgKHdyaXRlX3JlZl9zaGExKGxvY2ssIHNoYTEsIG1zZykgPCAwKQotCQlkaWUoIkZhaWxlZCB0byB3cml0ZSByZWY6ICVzLiIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiRmFpbGVkIHRvIHdyaXRlIHJlZiIpOwogCiAJc3RyYnVmX3JlbGVhc2UoJnJlZik7CiAJZnJlZShyZWFsX3JlZik7CmRpZmYgLS1naXQgYS9idWlsdGluLWFkZC5jIGIvYnVpbHRpbi1hZGQuYwppbmRleCBkNmFkNTdiLi41ODFhMmExIDEwMDY0NAotLS0gYS9idWlsdGluLWFkZC5jCisrKyBiL2J1aWx0aW4tYWRkLmMKQEAgLTEwLDEyICsxMCwxNCBAQAogI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgogI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2FkZF91c2FnZVtdID0gewogCSJnaXQgYWRkIFtvcHRpb25zXSBbLS1dIDxmaWxlcGF0dGVybj4uLi4iLAogCU5VTEwKIH07Ci1zdGF0aWMgaW50IHBhdGNoX2ludGVyYWN0aXZlLCBhZGRfaW50ZXJhY3RpdmU7CitzdGF0aWMgaW50IHBhdGNoX2ludGVyYWN0aXZlLCBhZGRfaW50ZXJhY3RpdmUsIGVkaXRfaW50ZXJhY3RpdmU7CiBzdGF0aWMgaW50IHRha2Vfd29ya3RyZWVfY2hhbmdlczsKIAogc3RhdGljIHZvaWQgZmlsbF9wYXRoc3BlY19tYXRjaGVzKGNvbnN0IGNoYXIgKipwYXRoc3BlYywgY2hhciAqc2VlbiwgaW50IHNwZWNzKQpAQCAtOTUsMzUgKzk3LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGZpbGxfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKipwYXRoc3BlYywKLQkJaW50IGlnbm9yZWRfdG9vKQotewotCWNvbnN0IGNoYXIgKnBhdGgsICpiYXNlOwotCWludCBiYXNlbGVuOwotCi0JLyogU2V0IHVwIHRoZSBkZWZhdWx0IGdpdCBwb3JjZWxhaW4gZXhjbHVkZXMgKi8KLQltZW1zZXQoZGlyLCAwLCBzaXplb2YoKmRpcikpOwotCWlmICghaWdub3JlZF90b28pIHsKLQkJZGlyLT5mbGFncyB8PSBESVJfQ09MTEVDVF9JR05PUkVEOwotCQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcyhkaXIpOwotCX0KLQotCS8qCi0JICogQ2FsY3VsYXRlIGNvbW1vbiBwcmVmaXggZm9yIHRoZSBwYXRoc3BlYywgYW5kCi0JICogdXNlIHRoYXQgdG8gb3B0aW1pemUgdGhlIGRpcmVjdG9yeSB3YWxrCi0JICovCi0JYmFzZWxlbiA9IGNvbW1vbl9wcmVmaXgocGF0aHNwZWMpOwotCXBhdGggPSAiLiI7Ci0JYmFzZSA9ICIiOwotCWlmIChiYXNlbGVuKQotCQlwYXRoID0gYmFzZSA9IHhtZW1kdXB6KCpwYXRoc3BlYywgYmFzZWxlbik7Ci0KLQkvKiBSZWFkIHRoZSBkaXJlY3RvcnkgYW5kIHBydW5lIGl0ICovCi0JcmVhZF9kaXJlY3RvcnkoZGlyLCBwYXRoLCBiYXNlLCBiYXNlbGVuLCBwYXRoc3BlYyk7Ci0JaWYgKHBhdGhzcGVjKQotCQlwcnVuZV9kaXJlY3RvcnkoZGlyLCBwYXRoc3BlYywgYmFzZWxlbik7Ci19Ci0KIHN0YXRpYyB2b2lkIHJlZnJlc2goaW50IHZlcmJvc2UsIGNvbnN0IGNoYXIgKipwYXRoc3BlYykKIHsKIAljaGFyICpzZWVuOwpAQCAtMTg3LDYgKzE2MCw1MSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgZWRpdF9wYXRjaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljaGFyICpmaWxlID0geHN0cmR1cChnaXRfcGF0aCgiQUREX0VESVQucGF0Y2giKSk7CisJY29uc3QgY2hhciAqYXBwbHlfYXJndltdID0geyAiYXBwbHkiLCAiLS1yZWNvdW50IiwgIi0tY2FjaGVkIiwKKwkJZmlsZSwgTlVMTCB9OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkOworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJaW50IG91dDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWdpdF9jb25maWcoZ2l0X2RpZmZfYmFzaWNfY29uZmlnLCBOVUxMKTsgLyogbm8gImRpZmYiIFVJIG9wdGlvbnMgKi8KKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUgKCJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiKTsKKworCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7CisJcmV2LmRpZmZvcHQuY29udGV4dCA9IDc7CisKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsIE5VTEwpOworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9QQVRDSDsKKwlvdXQgPSBvcGVuKGZpbGUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY0NCk7CisJaWYgKG91dCA8IDApCisJCWRpZSAoIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIiwgZmlsZSk7CisJcmV2LmRpZmZvcHQuZmlsZSA9IGZkb3BlbihvdXQsICJ3Iik7CisJcmV2LmRpZmZvcHQuY2xvc2VfZmlsZSA9IDE7CisJaWYgKHJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApKQorCQlkaWUgKCJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giKTsKKworCWxhdW5jaF9lZGl0b3IoZmlsZSwgTlVMTCwgTlVMTCk7CisKKwlpZiAoc3RhdChmaWxlLCAmc3QpKQorCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBzdGF0ICclcyciLCBmaWxlKTsKKwlpZiAoIXN0LnN0X3NpemUpCisJCWRpZSgiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIik7CisKKwltZW1zZXQoJmNoaWxkLCAwLCBzaXplb2YoY2hpbGQpKTsKKwljaGlsZC5naXRfY21kID0gMTsKKwljaGlsZC5hcmd2ID0gYXBwbHlfYXJndjsKKwlpZiAocnVuX2NvbW1hbmQoJmNoaWxkKSkKKwkJZGllICgiQ291bGQgbm90IGFwcGx5ICclcyciLCBmaWxlKTsKKworCXVubGluayhmaWxlKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlOwogCiBzdGF0aWMgY29uc3QgY2hhciBpZ25vcmVfZXJyb3JbXSA9CkBAIC0yMDEsNiArMjE5LDcgQEAKIAlPUFRfR1JPVVAoIiIpLAogCU9QVF9CT09MRUFOKCdpJywgImludGVyYWN0aXZlIiwgJmFkZF9pbnRlcmFjdGl2ZSwgImludGVyYWN0aXZlIHBpY2tpbmciKSwKIAlPUFRfQk9PTEVBTigncCcsICJwYXRjaCIsICZwYXRjaF9pbnRlcmFjdGl2ZSwgImludGVyYWN0aXZlIHBhdGNoaW5nIiksCisJT1BUX0JPT0xFQU4oJ2UnLCAiZWRpdCIsICZlZGl0X2ludGVyYWN0aXZlLCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IiksCiAJT1BUX0JPT0xFQU4oJ2YnLCAiZm9yY2UiLCAmaWdub3JlZF90b28sICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiKSwKIAlPUFRfQk9PTEVBTigndScsICJ1cGRhdGUiLCAmdGFrZV93b3JrdHJlZV9jaGFuZ2VzLCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiKSwKIAlPUFRfQk9PTEVBTignTicsICJpbnRlbnQtdG8tYWRkIiwgJmludGVudF90b19hZGQsICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiKSwKQEAgLTI1MiwxMiArMjcxLDE3IEBACiAKIAlnaXRfY29uZmlnKGFkZF9jb25maWcsIE5VTEwpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9hZGRfb3B0aW9ucywKLQkJCSAgYnVpbHRpbl9hZGRfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9hZGRfb3B0aW9ucywKKwkJCSAgYnVpbHRpbl9hZGRfdXNhZ2UsIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKIAlpZiAocGF0Y2hfaW50ZXJhY3RpdmUpCiAJCWFkZF9pbnRlcmFjdGl2ZSA9IDE7CiAJaWYgKGFkZF9pbnRlcmFjdGl2ZSkKLQkJZXhpdChpbnRlcmFjdGl2ZV9hZGQoYXJnYywgYXJndiwgcHJlZml4KSk7CisJCWV4aXQoaW50ZXJhY3RpdmVfYWRkKGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4KSk7CisKKwlpZiAoZWRpdF9pbnRlcmFjdGl2ZSkKKwkJcmV0dXJuKGVkaXRfcGF0Y2goYXJnYywgYXJndiwgcHJlZml4KSk7CisJYXJnYy0tOworCWFyZ3YrKzsKIAogCWlmIChhZGRyZW1vdmUgJiYgdGFrZV93b3JrdHJlZV9jaGFuZ2VzKQogCQlkaWUoIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIik7CkBAIC0yOTAsOSArMzE0LDIxIEBACiAJCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7CiAJdHJlYXRfZ2l0bGlua3MocGF0aHNwZWMpOwogCi0JaWYgKGFkZF9uZXdfZmlsZXMpCisJaWYgKGFkZF9uZXdfZmlsZXMpIHsKKwkJaW50IGJhc2VsZW47CisKKwkJLyogU2V0IHVwIHRoZSBkZWZhdWx0IGdpdCBwb3JjZWxhaW4gZXhjbHVkZXMgKi8KKwkJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwkJaWYgKCFpZ25vcmVkX3RvbykgeworCQkJZGlyLmZsYWdzIHw9IERJUl9DT0xMRUNUX0lHTk9SRUQ7CisJCQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKwkJfQorCiAJCS8qIFRoaXMgcGlja3MgdXAgdGhlIHBhdGhzIHRoYXQgYXJlIG5vdCB0cmFja2VkICovCi0JCWZpbGxfZGlyZWN0b3J5KCZkaXIsIHBhdGhzcGVjLCBpZ25vcmVkX3Rvbyk7CisJCWJhc2VsZW4gPSBmaWxsX2RpcmVjdG9yeSgmZGlyLCBwYXRoc3BlYyk7CisJCWlmIChwYXRoc3BlYykKKwkJCXBydW5lX2RpcmVjdG9yeSgmZGlyLCBwYXRoc3BlYywgYmFzZWxlbik7CisJfQogCiAJaWYgKHJlZnJlc2hfb25seSkgewogCQlyZWZyZXNoKHZlcmJvc2UsIHBhdGhzcGVjKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYXBwbHkuYyBiL2J1aWx0aW4tYXBwbHkuYwppbmRleCBhNDBiOTgyLi4zOWRjOTZhIDEwMDY0NAotLS0gYS9idWlsdGluLWFwcGx5LmMKKysrIGIvYnVpbHRpbi1hcHBseS5jCkBAIC0yODAsNyArMjgwLDcgQEAKIHN0YXRpYyB2b2lkIHJlYWRfcGF0Y2hfZmlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IGZkKQogewogCWlmIChzdHJidWZfcmVhZChzYiwgZmQsIDApIDwgMCkKLQkJZGllKCJnaXQgYXBwbHk6IHJlYWQgcmV0dXJuZWQgJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImdpdCBhcHBseTogZmFpbGVkIHRvIHJlYWQiKTsKIAogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBzb21lIHNsb3AgaW4gdGhlIGJ1ZmZlcgpAQCAtMzIwLDYgKzMyMCwyMCBAQAogCXJldHVybiAxOwogfQogCisvKiByZW1vdmUgZG91YmxlIHNsYXNoZXMgdG8gbWFrZSAtLWluZGV4IHdvcmsgd2l0aCBzdWNoIGZpbGVuYW1lcyAqLworc3RhdGljIGNoYXIgKnNxdWFzaF9zbGFzaChjaGFyICpuYW1lKQoreworCWludCBpID0gMCwgaiA9IDA7CisKKwl3aGlsZSAobmFtZVtpXSkgeworCQlpZiAoKG5hbWVbaisrXSA9IG5hbWVbaSsrXSkgPT0gJy8nKQorCQkJd2hpbGUgKG5hbWVbaV0gPT0gJy8nKQorCQkJCWkrKzsKKwl9CisJbmFtZVtqXSA9ICdcMCc7CisJcmV0dXJuIG5hbWU7Cit9CisKIHN0YXRpYyBjaGFyICpmaW5kX25hbWUoY29uc3QgY2hhciAqbGluZSwgY2hhciAqZGVmLCBpbnQgcF92YWx1ZSwgaW50IHRlcm1pbmF0ZSkKIHsKIAlpbnQgbGVuOwpAQCAtMzQ5LDcgKzM2Myw3IEBACiAJCQkJZnJlZShkZWYpOwogCQkJCWlmIChyb290KQogCQkJCQlzdHJidWZfaW5zZXJ0KCZuYW1lLCAwLCByb290LCByb290X2xlbik7Ci0JCQkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJm5hbWUsIE5VTEwpOworCQkJCXJldHVybiBzcXVhc2hfc2xhc2goc3RyYnVmX2RldGFjaCgmbmFtZSwgTlVMTCkpOwogCQkJfQogCQl9CiAJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKQEAgLTM2OSwxMCArMzgzLDEwIEBACiAJCQlzdGFydCA9IGxpbmU7CiAJfQogCWlmICghc3RhcnQpCi0JCXJldHVybiBkZWY7CisJCXJldHVybiBzcXVhc2hfc2xhc2goZGVmKTsKIAlsZW4gPSBsaW5lIC0gc3RhcnQ7CiAJaWYgKCFsZW4pCi0JCXJldHVybiBkZWY7CisJCXJldHVybiBzcXVhc2hfc2xhc2goZGVmKTsKIAogCS8qCiAJICogR2VuZXJhbGx5IHdlIHByZWZlciB0aGUgc2hvcnRlciBuYW1lLCBlc3BlY2lhbGx5CkBAIC0zODMsNyArMzk3LDcgQEAKIAlpZiAoZGVmKSB7CiAJCWludCBkZWZsZW4gPSBzdHJsZW4oZGVmKTsKIAkJaWYgKGRlZmxlbiA8IGxlbiAmJiAhc3RybmNtcChzdGFydCwgZGVmLCBkZWZsZW4pKQotCQkJcmV0dXJuIGRlZjsKKwkJCXJldHVybiBzcXVhc2hfc2xhc2goZGVmKTsKIAkJZnJlZShkZWYpOwogCX0KIApAQCAtMzkyLDEwICs0MDYsMTAgQEAKIAkJc3RyY3B5KHJldCwgcm9vdCk7CiAJCW1lbWNweShyZXQgKyByb290X2xlbiwgc3RhcnQsIGxlbik7CiAJCXJldFtyb290X2xlbiArIGxlbl0gPSAnXDAnOwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gc3F1YXNoX3NsYXNoKHJldCk7CiAJfQogCi0JcmV0dXJuIHhtZW1kdXB6KHN0YXJ0LCBsZW4pOworCXJldHVybiBzcXVhc2hfc2xhc2goeG1lbWR1cHooc3RhcnQsIGxlbikpOwogfQogCiBzdGF0aWMgaW50IGNvdW50X3NsYXNoZXMoY29uc3QgY2hhciAqY3ApCkBAIC00NDQsNiArNDU4LDc2IEBACiB9CiAKIC8qCisgKiBEb2VzIHRoZSAtLS0vKysrIGxpbmUgaGFzIHRoZSBQT1NJWCB0aW1lc3RhbXAgYWZ0ZXIgdGhlIGxhc3QgSFQ/CisgKiBHTlUgZGlmZiBwdXRzIGVwb2NoIHRoZXJlIHRvIHNpZ25hbCBhIGNyZWF0aW9uL2RlbGV0aW9uIGV2ZW50LiAgSXMKKyAqIHRoaXMgc3VjaCBhIHRpbWVzdGFtcD8KKyAqLworc3RhdGljIGludCBoYXNfZXBvY2hfdGltZXN0YW1wKGNvbnN0IGNoYXIgKm5hbWVsaW5lKQoreworCS8qCisJICogV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBlcG9jaCB0aW1lc3RhbXA7IGFueSBub24temVybworCSAqIGZyYWN0aW9uIGNhbm5vdCBiZSBvbmUsIGhlbmNlICIoXC4wKyk/IiBpbiB0aGUgcmVnZXhwIGJlbG93LgorCSAqIEZvciB0aGUgc2FtZSByZWFzb24sIHRoZSBkYXRlIG11c3QgYmUgZWl0aGVyIDE5NjktMTItMzEgb3IKKwkgKiAxOTcwLTAxLTAxLCBhbmQgdGhlIHNlY29uZHMgcGFydCBtdXN0IGJlICIwMCIuCisJICovCisJY29uc3QgY2hhciBzdGFtcF9yZWdleHBbXSA9CisJCSJeKDE5NjktMTItMzF8MTk3MC0wMS0wMSkiCisJCSIgIgorCQkiWzAtMl1bMC05XTpbMC01XVswLTldOjAwKFxcLjArKT8iCisJCSIgIgorCQkiKFstK11bMC0yXVswLTldWzAtNV1bMC05XSlcbiI7CisJY29uc3QgY2hhciAqdGltZXN0YW1wID0gTlVMTCwgKmNwOworCXN0YXRpYyByZWdleF90ICpzdGFtcDsKKwlyZWdtYXRjaF90IG1bMTBdOworCWludCB6b25lb2Zmc2V0OworCWludCBob3VybWludXRlOworCWludCBzdGF0dXM7CisKKwlmb3IgKGNwID0gbmFtZWxpbmU7ICpjcCAhPSAnXG4nOyBjcCsrKSB7CisJCWlmICgqY3AgPT0gJ1x0JykKKwkJCXRpbWVzdGFtcCA9IGNwICsgMTsKKwl9CisJaWYgKCF0aW1lc3RhbXApCisJCXJldHVybiAwOworCWlmICghc3RhbXApIHsKKwkJc3RhbXAgPSB4bWFsbG9jKHNpemVvZigqc3RhbXApKTsKKwkJaWYgKHJlZ2NvbXAoc3RhbXAsIHN0YW1wX3JlZ2V4cCwgUkVHX0VYVEVOREVEKSkgeworCQkJd2FybmluZygiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIsCisJCQkJc3RhbXBfcmVnZXhwKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJc3RhdHVzID0gcmVnZXhlYyhzdGFtcCwgdGltZXN0YW1wLCBBUlJBWV9TSVpFKG0pLCBtLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWlmIChzdGF0dXMgIT0gUkVHX05PTUFUQ0gpCisJCQl3YXJuaW5nKCJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiLAorCQkJCXN0YXR1cywgdGltZXN0YW1wKTsKKwkJcmV0dXJuIDA7CisJfQorCisJem9uZW9mZnNldCA9IHN0cnRvbCh0aW1lc3RhbXAgKyBtWzNdLnJtX3NvICsgMSwgTlVMTCwgMTApOworCXpvbmVvZmZzZXQgPSAoem9uZW9mZnNldCAvIDEwMCkgKiA2MCArICh6b25lb2Zmc2V0ICUgMTAwKTsKKwlpZiAodGltZXN0YW1wW21bM10ucm1fc29dID09ICctJykKKwkJem9uZW9mZnNldCA9IC16b25lb2Zmc2V0OworCisJLyoKKwkgKiBZWVlZLU1NLUREIGhoOm1tOnNzIG11c3QgYmUgZnJvbSBlaXRoZXIgMTk2OS0xMi0zMQorCSAqICh3ZXN0IG9mIEdNVCkgb3IgMTk3MC0wMS0wMSAoZWFzdCBvZiBHTVQpCisJICovCisJaWYgKCh6b25lb2Zmc2V0IDwgMCAmJiBtZW1jbXAodGltZXN0YW1wLCAiMTk2OS0xMi0zMSIsIDEwKSkgfHwKKwkgICAgKDAgPD0gem9uZW9mZnNldCAmJiBtZW1jbXAodGltZXN0YW1wLCAiMTk3MC0wMS0wMSIsIDEwKSkpCisJCXJldHVybiAwOworCisJaG91cm1pbnV0ZSA9IChzdHJ0b2wodGltZXN0YW1wICsgMTEsIE5VTEwsIDEwKSAqIDYwICsKKwkJICAgICAgc3RydG9sKHRpbWVzdGFtcCArIDE0LCBOVUxMLCAxMCkgLQorCQkgICAgICB6b25lb2Zmc2V0KTsKKworCXJldHVybiAoKHpvbmVvZmZzZXQgPCAwICYmIGhvdXJtaW51dGUgPT0gMTQ0MCkgfHwKKwkJKDAgPD0gem9uZW9mZnNldCAmJiAhaG91cm1pbnV0ZSkpOworfQorCisvKgogICogR2V0IHRoZSBuYW1lIGV0YyBpbmZvIGZyb20gdGhlIC0tLS8rKysgbGluZXMgb2YgYSB0cmFkaXRpb25hbCBwYXRjaCBoZWFkZXIKICAqCiAgKiBGSVhNRSEgVGhlIGVuZC1vZi1maWxlbmFtZSBoZXVyaXN0aWNzIGFyZSBraW5kIG9mIHNjcmV3eS4gRm9yIGV4aXN0aW5nCkBAIC00NzksNyArNTYzLDE3IEBACiAJfSBlbHNlIHsKIAkJbmFtZSA9IGZpbmRfbmFtZShmaXJzdCwgTlVMTCwgcF92YWx1ZSwgVEVSTV9TUEFDRSB8IFRFUk1fVEFCKTsKIAkJbmFtZSA9IGZpbmRfbmFtZShzZWNvbmQsIG5hbWUsIHBfdmFsdWUsIFRFUk1fU1BBQ0UgfCBURVJNX1RBQik7Ci0JCXBhdGNoLT5vbGRfbmFtZSA9IHBhdGNoLT5uZXdfbmFtZSA9IG5hbWU7CisJCWlmIChoYXNfZXBvY2hfdGltZXN0YW1wKGZpcnN0KSkgeworCQkJcGF0Y2gtPmlzX25ldyA9IDE7CisJCQlwYXRjaC0+aXNfZGVsZXRlID0gMDsKKwkJCXBhdGNoLT5uZXdfbmFtZSA9IG5hbWU7CisJCX0gZWxzZSBpZiAoaGFzX2Vwb2NoX3RpbWVzdGFtcChzZWNvbmQpKSB7CisJCQlwYXRjaC0+aXNfbmV3ID0gMDsKKwkJCXBhdGNoLT5pc19kZWxldGUgPSAxOworCQkJcGF0Y2gtPm9sZF9uYW1lID0gbmFtZTsKKwkJfSBlbHNlIHsKKwkJCXBhdGNoLT5vbGRfbmFtZSA9IHBhdGNoLT5uZXdfbmFtZSA9IG5hbWU7CisJCX0KIAl9CiAJaWYgKCFuYW1lKQogCQlkaWUoInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiLCBsaW5lbnIpOwpAQCAtMjYwMCw3ICsyNjk0LDcgQEAKIHN0YXRpYyB2b2lkIGJ1aWxkX2Zha2VfYW5jZXN0b3Ioc3RydWN0IHBhdGNoICpsaXN0LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKIAlzdHJ1Y3QgcGF0Y2ggKnBhdGNoOwotCXN0cnVjdCBpbmRleF9zdGF0ZSByZXN1bHQgPSB7IDAgfTsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgcmVzdWx0ID0geyBOVUxMIH07CiAJaW50IGZkOwogCiAJLyogT25jZSB3ZSBzdGFydCBzdXBwb3J0aW5nIHRoZSByZXZlcnNlIHBhdGNoLCBpdCBtYXkgYmUKQEAgLTI4MDksOCArMjkwMyw4IEBACiAJfSBlbHNlIHsKIAkJaWYgKCFjYWNoZWQpIHsKIAkJCWlmIChsc3RhdChwYXRoLCAmc3QpIDwgMCkKLQkJCQlkaWUoInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIsCi0JCQkJICAgIHBhdGgpOworCQkJCWRpZV9lcnJubygidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciLAorCQkJCQkgIHBhdGgpOwogCQkJZmlsbF9zdGF0X2NhY2hlX2luZm8oY2UsICZzdCk7CiAJCX0KIAkJaWYgKHdyaXRlX3NoYTFfZmlsZShidWYsIHNpemUsIGJsb2JfdHlwZSwgY2UtPnNoYTEpIDwgMCkKQEAgLTI4NTAsNyArMjk0NCw3IEBACiAJc3RyYnVmX3JlbGVhc2UoJm5idWYpOwogCiAJaWYgKGNsb3NlKGZkKSA8IDApCi0JCWRpZSgiY2xvc2luZyBmaWxlICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiY2xvc2luZyBmaWxlICclcyciLCBwYXRoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg5OSw3ICsyOTkzLDcgQEAKIAkJCSsrbnI7CiAJCX0KIAl9Ci0JZGllKCJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyBtb2RlICVvIiwgcGF0aCwgbW9kZSk7CisJZGllX2Vycm5vKCJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iLCBwYXRoLCBtb2RlKTsKIH0KIAogc3RhdGljIHZvaWQgY3JlYXRlX2ZpbGUoc3RydWN0IHBhdGNoICpwYXRjaCkKQEAgLTMyNjMsOSArMzM1NywxMSBAQAogCQlPUFRfQk9PTEVBTigwLCAic3RhdCIsICZkaWZmc3RhdCwKIAkJCSJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiKSwKIAkJeyBPUFRJT05fQk9PTEVBTiwgMCwgImFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCIsICZiaW5hcnksCi0JCSAgTlVMTCwgIm9sZCBvcHRpb24sIG5vdyBuby1vcCIsIFBBUlNFX09QVF9ISURERU4gfSwKKwkJICBOVUxMLCAib2xkIG9wdGlvbiwgbm93IG5vLW9wIiwKKwkJICBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PQVJHIH0sCiAJCXsgT1BUSU9OX0JPT0xFQU4sIDAsICJiaW5hcnkiLCAmYmluYXJ5LAotCQkgIE5VTEwsICJvbGQgb3B0aW9uLCBub3cgbm8tb3AiLCBQQVJTRV9PUFRfSElEREVOIH0sCisJCSAgTlVMTCwgIm9sZCBvcHRpb24sIG5vdyBuby1vcCIsCisJCSAgUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT0FSRyB9LAogCQlPUFRfQk9PTEVBTigwLCAibnVtc3RhdCIsICZudW1zdGF0LAogCQkJInNob3dzIG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIiksCiAJCU9QVF9CT09MRUFOKDAsICJzdW1tYXJ5IiwgJnN1bW1hcnksCkBAIC0zMjc4LDcgKzMzNzQsNyBAQAogCQkJImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIiksCiAJCU9QVF9CT09MRUFOKDAsICJhcHBseSIsICZmb3JjZV9hcHBseSwKIAkJCSJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIpLAotCQlPUFRfU1RSSU5HKDAsICJidWlsZC1mYWtlLWFuY2VzdG9yIiwgJmZha2VfYW5jZXN0b3IsICJmaWxlIiwKKwkJT1BUX0ZJTEVOQU1FKDAsICJidWlsZC1mYWtlLWFuY2VzdG9yIiwgJmZha2VfYW5jZXN0b3IsCiAJCQkiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iKSwKIAkJeyBPUFRJT05fQ0FMTEJBQ0ssICd6JywgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCSJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIsCkBAIC0zMzEzLDExICszNDA5LDggQEAKIAlpZiAoYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlKQogCQlwYXJzZV93aGl0ZXNwYWNlX29wdGlvbihhcHBseV9kZWZhdWx0X3doaXRlc3BhY2UpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9hcHBseV9vcHRpb25zLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9hcHBseV9vcHRpb25zLAogCQkJYXBwbHlfdXNhZ2UsIDApOwotCWZha2VfYW5jZXN0b3IgPSBwYXJzZV9vcHRpb25zX2ZpeF9maWxlbmFtZShwcmVmaXgsIGZha2VfYW5jZXN0b3IpOwotCWlmIChmYWtlX2FuY2VzdG9yKQotCQlmYWtlX2FuY2VzdG9yID0geHN0cmR1cChmYWtlX2FuY2VzdG9yKTsKIAogCWlmIChhcHBseV93aXRoX3JlamVjdCkKIAkJYXBwbHkgPSBhcHBseV92ZXJib3NlbHkgPSAxOwpAQCAtMzM0Myw3ICszNDM2LDcgQEAKIAogCQlmZCA9IG9wZW4oYXJnLCBPX1JET05MWSk7CiAJCWlmIChmZCA8IDApCi0JCQlkaWUoImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiLCBhcmcsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImNhbid0IG9wZW4gcGF0Y2ggJyVzJyIsIGFyZyk7CiAJCXJlYWRfc3RkaW4gPSAwOwogCQlzZXRfZGVmYXVsdF93aGl0ZXNwYWNlX21vZGUod2hpdGVzcGFjZV9vcHRpb24pOwogCQllcnJzIHw9IGFwcGx5X3BhdGNoKGZkLCBhcmcsIG9wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1hcmNoaXZlLmMgYi9idWlsdGluLWFyY2hpdmUuYwppbmRleCBhYjUwY2ViLi5mOWE0YmVhIDEwMDY0NAotLS0gYS9idWlsdGluLWFyY2hpdmUuYworKysgYi9idWlsdGluLWFyY2hpdmUuYwpAQCAtMTMsMTAgKzEzLDEwIEBACiB7CiAJaW50IG91dHB1dF9mZCA9IG9wZW4ob3V0cHV0X2ZpbGUsIE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJVTkMsIDA2NjYpOwogCWlmIChvdXRwdXRfZmQgPCAwKQotCQlkaWUoImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlOiAlcyAiLCBvdXRwdXRfZmlsZSk7CisJCWRpZV9lcnJubygiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIsIG91dHB1dF9maWxlKTsKIAlpZiAob3V0cHV0X2ZkICE9IDEpIHsKIAkJaWYgKGR1cDIob3V0cHV0X2ZkLCAxKSA8IDApCi0JCQlkaWUoImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIpOwogCQllbHNlCiAJCQljbG9zZShvdXRwdXRfZmQpOwogCX0KQEAgLTgwLDcgKzgwLDggQEAKIAkJT1BUX0VORCgpCiAJfTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGxvY2FsX29wdHMsIE5VTEwsIFBBUlNFX09QVF9LRUVQX0FMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBsb2NhbF9vcHRzLCBOVUxMLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BTEwpOwogCiAJaWYgKG91dHB1dCkKIAkJY3JlYXRlX291dHB1dF9maWxlKG91dHB1dCk7CmRpZmYgLS1naXQgYS9idWlsdGluLWJpc2VjdC0taGVscGVyLmMgYi9idWlsdGluLWJpc2VjdC0taGVscGVyLmMKaW5kZXggOGZlNzc4Ny4uNWIyMjYzOSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1iaXNlY3QtLWhlbHBlci5jCisrKyBiL2J1aWx0aW4tYmlzZWN0LS1oZWxwZXIuYwpAQCAtNCwyNCArNCwyNSBAQAogI2luY2x1ZGUgImJpc2VjdC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9iaXNlY3RfaGVscGVyX3VzYWdlW10gPSB7Ci0JImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtdmFycyIsCisJImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIiwKIAlOVUxMCiB9OwogCiBpbnQgY21kX2Jpc2VjdF9faGVscGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewotCWludCBuZXh0X3ZhcnMgPSAwOworCWludCBuZXh0X2FsbCA9IDA7CiAJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7Ci0JCU9QVF9CT09MRUFOKDAsICJuZXh0LXZhcnMiLCAmbmV4dF92YXJzLAotCQkJICAgICJvdXRwdXQgbmV4dCBiaXNlY3Qgc3RlcCB2YXJpYWJsZXMiKSwKKwkJT1BUX0JPT0xFQU4oMCwgIm5leHQtYWxsIiwgJm5leHRfYWxsLAorCQkJICAgICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIiksCiAJCU9QVF9FTkQoKQogCX07CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBnaXRfYmlzZWN0X2hlbHBlcl91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfYmlzZWN0X2hlbHBlcl91c2FnZSwgMCk7CiAKLQlpZiAoIW5leHRfdmFycykKKwlpZiAoIW5leHRfYWxsKQogCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X2Jpc2VjdF9oZWxwZXJfdXNhZ2UsIG9wdGlvbnMpOwogCi0JLyogbmV4dC12YXJzICovCi0JcmV0dXJuIGJpc2VjdF9uZXh0X3ZhcnMocHJlZml4KTsKKwkvKiBuZXh0LWFsbCAqLworCXJldHVybiBiaXNlY3RfbmV4dF9hbGwocHJlZml4KTsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tYmxhbWUuYyBiL2J1aWx0aW4tYmxhbWUuYwppbmRleCAwYWZkYjE2Li5mZDZjYTUxIDEwMDY0NAotLS0gYS9idWlsdGluLWJsYW1lLmMKKysrIGIvYnVpbHRpbi1ibGFtZS5jCkBAIC0yMDA4LDIzICsyMDA4LDIzIEBACiAKIAkJaWYgKGNvbnRlbnRzX2Zyb20pIHsKIAkJCWlmIChzdGF0KGNvbnRlbnRzX2Zyb20sICZzdCkgPCAwKQotCQkJCWRpZSgiQ2Fubm90IHN0YXQgJXMiLCBjb250ZW50c19mcm9tKTsKKwkJCQlkaWVfZXJybm8oIkNhbm5vdCBzdGF0ICclcyciLCBjb250ZW50c19mcm9tKTsKIAkJCXJlYWRfZnJvbSA9IGNvbnRlbnRzX2Zyb207CiAJCX0KIAkJZWxzZSB7CiAJCQlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCi0JCQkJZGllKCJDYW5ub3QgbHN0YXQgJXMiLCBwYXRoKTsKKwkJCQlkaWVfZXJybm8oIkNhbm5vdCBsc3RhdCAnJXMnIiwgcGF0aCk7CiAJCQlyZWFkX2Zyb20gPSBwYXRoOwogCQl9CiAJCW1vZGUgPSBjYW5vbl9tb2RlKHN0LnN0X21vZGUpOwogCQlzd2l0Y2ggKHN0LnN0X21vZGUgJiBTX0lGTVQpIHsKIAkJY2FzZSBTX0lGUkVHOgogCQkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1ZiwgcmVhZF9mcm9tLCBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplKQotCQkJCWRpZSgiY2Fubm90IG9wZW4gb3IgcmVhZCAlcyIsIHJlYWRfZnJvbSk7CisJCQkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBvciByZWFkICclcyciLCByZWFkX2Zyb20pOwogCQkJYnJlYWs7CiAJCWNhc2UgU19JRkxOSzoKIAkJCWlmIChzdHJidWZfcmVhZGxpbmsoJmJ1ZiwgcmVhZF9mcm9tLCBzdC5zdF9zaXplKSA8IDApCi0JCQkJZGllKCJjYW5ub3QgcmVhZGxpbmsgJXMiLCByZWFkX2Zyb20pOworCQkJCWRpZV9lcnJubygiY2Fubm90IHJlYWRsaW5rICclcyciLCByZWFkX2Zyb20pOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlkaWUoInVuc3VwcG9ydGVkIGZpbGUgdHlwZSAlcyIsIHJlYWRfZnJvbSk7CkBAIC0yMDM1LDcgKzIwMzUsNyBAQAogCQljb250ZW50c19mcm9tID0gInN0YW5kYXJkIGlucHV0IjsKIAkJbW9kZSA9IDA7CiAJCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCAwKSA8IDApCi0JCQlkaWUoInJlYWQgZXJyb3IgJXMgZnJvbSBzdGRpbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImZhaWxlZCB0byByZWFkIGZyb20gc3RkaW4iKTsKIAl9CiAJY29udmVydF90b19naXQocGF0aCwgYnVmLmJ1ZiwgYnVmLmxlbiwgJmJ1ZiwgMCk7CiAJb3JpZ2luLT5maWxlLnB0ciA9IGJ1Zi5idWY7CkBAIC0yMjM5LDcgKzIyMzksNyBAQAogCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CiAJZGFzaGRhc2hfcG9zID0gMDsKIAotCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfAorCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgcHJlZml4LCBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCB8CiAJCQkgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjApOwogCWZvciAoOzspIHsKIAkJc3dpdGNoIChwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywgYmxhbWVfb3B0X3VzYWdlKSkgewpAQCAtMjI2MSw4ICsyMjYxLDcgQEAKIAlhcmdjID0gcGFyc2Vfb3B0aW9uc19lbmQoJmN0eCk7CiAKIAlpZiAocmV2c19maWxlICYmIHJlYWRfYW5jZXN0cnkocmV2c19maWxlKSkKLQkJZGllKCJyZWFkaW5nIGdyYWZ0IGZpbGUgJXMgZmFpbGVkOiAlcyIsCi0JCSAgICByZXZzX2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygicmVhZGluZyBncmFmdCBmaWxlICclcycgZmFpbGVkIiwgcmV2c19maWxlKTsKIAogCWlmIChjbWRfaXNfYW5ub3RhdGUpIHsKIAkJb3V0cHV0X29wdGlvbiB8PSBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUOwpAQCAtMjM1MCw3ICsyMzQ5LDcgQEAKIAogCQlzZXR1cF93b3JrX3RyZWUoKTsKIAkJaWYgKCFoYXNfc3RyaW5nX2luX3dvcmtfdHJlZShwYXRoKSkKLQkJCWRpZSgiY2Fubm90IHN0YXQgcGF0aCAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJjYW5ub3Qgc3RhdCBwYXRoICclcyciLCBwYXRoKTsKIAl9CiAKIAlzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldnMsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1icmFuY2guYyBiL2J1aWx0aW4tYnJhbmNoLmMKaW5kZXggODg3ZmE2MC4uMWEwM2Q1ZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1icmFuY2guYworKysgYi9idWlsdGluLWJyYW5jaC5jCkBAIC01NTksNyArNTU5LDcgQEAKIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAkJT1BUX0dST1VQKCJHZW5lcmljIG9wdGlvbnMiKSwKIAkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlKSwKLQkJT1BUX1NFVF9JTlQoIDAgLCAidHJhY2siLCAgJnRyYWNrLCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiLAorCQlPUFRfU0VUX0lOVCgndCcsICJ0cmFjayIsICAmdHJhY2ssICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIsCiAJCQlCUkFOQ0hfVFJBQ0tfRVhQTElDSVQpLAogCQlPUFRfQk9PTEVBTiggMCAsICJjb2xvciIsICAmYnJhbmNoX3VzZV9jb2xvciwgInVzZSBjb2xvcmVkIG91dHB1dCIpLAogCQlPUFRfU0VUX0lOVCgncicsIE5VTEwsICAgICAma2luZHMsICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIiwKQEAgLTYyMiw3ICs2MjIsOCBAQAogCX0KIAloYXNoY3B5KG1lcmdlX2ZpbHRlcl9yZWYsIGhlYWRfc2hhMSk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBidWlsdGluX2JyYW5jaF91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBidWlsdGluX2JyYW5jaF91c2FnZSwKKwkJCSAgICAgMCk7CiAJaWYgKCEhZGVsZXRlICsgISFyZW5hbWUgKyAhIWZvcmNlX2NyZWF0ZSA+IDEpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2JyYW5jaF91c2FnZSwgb3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tY2F0LWZpbGUuYyBiL2J1aWx0aW4tY2F0LWZpbGUuYwppbmRleCA0M2ZmZTdmLi41OTA2ODQyIDEwMDY0NAotLS0gYS9idWlsdGluLWNhdC1maWxlLmMKKysrIGIvYnVpbHRpbi1jYXQtZmlsZS5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlpZiAoYXJnYyAhPSAzICYmIGFyZ2MgIT0gMikKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNhdF9maWxlX3VzYWdlLCBvcHRpb25zKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGNhdF9maWxlX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGNhdF9maWxlX3VzYWdlLCAwKTsKIAogCWlmIChvcHQpIHsKIAkJaWYgKGFyZ2MgPT0gMSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4tY2hlY2stYXR0ci5jIGIvYnVpbHRpbi1jaGVjay1hdHRyLmMKaW5kZXggMTVhMDRiNy4uOGJkMDQzMCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jaGVjay1hdHRyLmMKKysrIGIvYnVpbHRpbi1jaGVjay1hdHRyLmMKQEAgLTY5LDggKzY5LDggQEAKIAlpbnQgY250LCBpLCBkb3VibGVkYXNoOwogCWNvbnN0IGNoYXIgKmVycnN0ciA9IE5VTEw7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBjaGVja19hdHRyX29wdGlvbnMsIGNoZWNrX2F0dHJfdXNhZ2UsCi0JCVBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGNoZWNrX2F0dHJfb3B0aW9ucywKKwkJCSAgICAgY2hlY2tfYXR0cl91c2FnZSwgUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOwogCWlmICghYXJnYykKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNoZWNrX2F0dHJfdXNhZ2UsIGNoZWNrX2F0dHJfb3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tY2hlY2tvdXQtaW5kZXguYyBiL2J1aWx0aW4tY2hlY2tvdXQtaW5kZXguYwppbmRleCBhZmUzNWUyLi5hN2E1ZWUxIDEwMDY0NAotLS0gYS9idWlsdGluLWNoZWNrb3V0LWluZGV4LmMKKysrIGIvYnVpbHRpbi1jaGVja291dC1pbmRleC5jCkBAIC0yNDksNyArMjQ5LDcgQEAKIAkJZGllKCJpbnZhbGlkIGNhY2hlIik7CiAJfQogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9jaGVja291dF9pbmRleF9vcHRpb25zLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9jaGVja291dF9pbmRleF9vcHRpb25zLAogCQkJYnVpbHRpbl9jaGVja291dF9pbmRleF91c2FnZSwgMCk7CiAJc3RhdGUuZm9yY2UgPSBmb3JjZTsKIAlzdGF0ZS5xdWlldCA9IHF1aWV0OwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jaGVja291dC5jIGIvYnVpbHRpbi1jaGVja291dC5jCmluZGV4IDE0MDE2OGMuLmM2ZDZhYzkgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY2hlY2tvdXQuYworKysgYi9idWlsdGluLWNoZWNrb3V0LmMKQEAgLTU5OSw3ICs1OTksNyBAQAogCiAJb3B0cy50cmFjayA9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRDsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGNoZWNrb3V0X3VzYWdlLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgY2hlY2tvdXRfdXNhZ2UsCiAJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKIAogCS8qIC0tdHJhY2sgd2l0aG91dCAtYiBzaG91bGQgRFdJTSAqLwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jbGVhbi5jIGIvYnVpbHRpbi1jbGVhbi5jCmluZGV4IGM1YWQzM2QuLjA1Yzc2M2MgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY2xlYW4uYworKysgYi9idWlsdGluLWNsZWFuLmMKQEAgLTMxLDkgKzMxLDkgQEAKIAlpbnQgaTsKIAlpbnQgc2hvd19vbmx5ID0gMCwgcmVtb3ZlX2RpcmVjdG9yaWVzID0gMCwgcXVpZXQgPSAwLCBpZ25vcmVkID0gMDsKIAlpbnQgaWdub3JlZF9vbmx5ID0gMCwgYmFzZWxlbiA9IDAsIGNvbmZpZ19zZXQgPSAwLCBlcnJvcnMgPSAwOworCWludCBybV9mbGFncyA9IFJFTU9WRV9ESVJfS0VFUF9ORVNURURfR0lUOwogCXN0cnVjdCBzdHJidWYgZGlyZWN0b3J5ID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOwotCWNvbnN0IGNoYXIgKnBhdGgsICpiYXNlOwogCXN0YXRpYyBjb25zdCBjaGFyICoqcGF0aHNwZWM7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAljb25zdCBjaGFyICpxbmFtZTsKQEAgLTU2LDcgKzU2LDggQEAKIAllbHNlCiAJCWNvbmZpZ19zZXQgPSAxOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgYnVpbHRpbl9jbGVhbl91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBidWlsdGluX2NsZWFuX3VzYWdlLAorCQkJICAgICAwKTsKIAogCW1lbXNldCgmZGlyLCAwLCBzaXplb2YoZGlyKSk7CiAJaWYgKGlnbm9yZWRfb25seSkKQEAgLTY5LDYgKzcwLDkgQEAKIAkJZGllKCJjbGVhbi5yZXF1aXJlRm9yY2UlcyBzZXQgYW5kIC1uIG9yIC1mIG5vdCBnaXZlbjsgIgogCQkgICAgInJlZnVzaW5nIHRvIGNsZWFuIiwgY29uZmlnX3NldCA/ICIiIDogIiBub3QiKTsKIAorCWlmIChmb3JjZSA+IDEpCisJCXJtX2ZsYWdzID0gMDsKKwogCWRpci5mbGFncyB8PSBESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUzsKIAogCWlmICghaWdub3JlZCkKQEAgLTc3LDE2ICs4MSw3IEBACiAJcGF0aHNwZWMgPSBnZXRfcGF0aHNwZWMocHJlZml4LCBhcmd2KTsKIAlyZWFkX2NhY2hlKCk7CiAKLQkvKgotCSAqIENhbGN1bGF0ZSBjb21tb24gcHJlZml4IGZvciB0aGUgcGF0aHNwZWMsIGFuZAotCSAqIHVzZSB0aGF0IHRvIG9wdGltaXplIHRoZSBkaXJlY3Rvcnkgd2FsawotCSAqLwotCWJhc2VsZW4gPSBjb21tb25fcHJlZml4KHBhdGhzcGVjKTsKLQlwYXRoID0gIi4iOwotCWJhc2UgPSAiIjsKLQlpZiAoYmFzZWxlbikKLQkJcGF0aCA9IGJhc2UgPSB4bWVtZHVweigqcGF0aHNwZWMsIGJhc2VsZW4pOwotCXJlYWRfZGlyZWN0b3J5KCZkaXIsIHBhdGgsIGJhc2UsIGJhc2VsZW4sIHBhdGhzcGVjKTsKKwlmaWxsX2RpcmVjdG9yeSgmZGlyLCBwYXRoc3BlYyk7CiAKIAlpZiAocGF0aHNwZWMpCiAJCXNlZW4gPSB4bWFsbG9jKGFyZ2MgPiAwID8gYXJnYyA6IDEpOwpAQCAtMTQwLDcgKzEzNSw4IEBACiAJCQkJICAgKG1hdGNoZXMgPT0gTUFUQ0hFRF9FWEFDVExZKSkgewogCQkJCWlmICghcXVpZXQpCiAJCQkJCXByaW50ZigiUmVtb3ZpbmcgJXNcbiIsIHFuYW1lKTsKLQkJCQlpZiAocmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmZGlyZWN0b3J5LCAwKSAhPSAwKSB7CisJCQkJaWYgKHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJmRpcmVjdG9yeSwKKwkJCQkJCQkgICBybV9mbGFncykgIT0gMCkgewogCQkJCQl3YXJuaW5nKCJmYWlsZWQgdG8gcmVtb3ZlICclcyciLCBxbmFtZSk7CiAJCQkJCWVycm9ycysrOwogCQkJCX0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tY2xvbmUuYyBiL2J1aWx0aW4tY2xvbmUuYwppbmRleCBiYTI4NmUwLi5lNTE5NzhhIDEwMDY0NAotLS0gYS9idWlsdGluLWNsb25lLmMKKysrIGIvYnVpbHRpbi1jbG9uZS5jCkBAIC0xMDQsMTEgKzEwNCwxMiBAQAogc3RhdGljIGNoYXIgKmd1ZXNzX2Rpcl9uYW1lKGNvbnN0IGNoYXIgKnJlcG8sIGludCBpc19idW5kbGUsIGludCBpc19iYXJlKQogewogCWNvbnN0IGNoYXIgKmVuZCA9IHJlcG8gKyBzdHJsZW4ocmVwbyksICpzdGFydDsKKwljaGFyICpkaXI7CiAKIAkvKgotCSAqIFN0cmlwIHRyYWlsaW5nIHNsYXNoZXMgYW5kIC8uZ2l0CisJICogU3RyaXAgdHJhaWxpbmcgc3BhY2VzLCBzbGFzaGVzIGFuZCAvLmdpdAogCSAqLwotCXdoaWxlIChyZXBvIDwgZW5kICYmIGlzX2Rpcl9zZXAoZW5kWy0xXSkpCisJd2hpbGUgKHJlcG8gPCBlbmQgJiYgKGlzX2Rpcl9zZXAoZW5kWy0xXSkgfHwgaXNzcGFjZShlbmRbLTFdKSkpCiAJCWVuZC0tOwogCWlmIChlbmQgLSByZXBvID4gNSAmJiBpc19kaXJfc2VwKGVuZFstNV0pICYmCiAJICAgICFzdHJuY21wKGVuZCAtIDQsICIuZ2l0IiwgNCkpIHsKQEAgLTE0MCwxMCArMTQxLDMzIEBACiAJaWYgKGlzX2JhcmUpIHsKIAkJc3RydWN0IHN0cmJ1ZiByZXN1bHQgPSBTVFJCVUZfSU5JVDsKIAkJc3RyYnVmX2FkZGYoJnJlc3VsdCwgIiUuKnMuZ2l0IiwgKGludCkoZW5kIC0gc3RhcnQpLCBzdGFydCk7Ci0JCXJldHVybiBzdHJidWZfZGV0YWNoKCZyZXN1bHQsIDApOworCQlkaXIgPSBzdHJidWZfZGV0YWNoKCZyZXN1bHQsIE5VTEwpOworCX0gZWxzZQorCQlkaXIgPSB4c3RybmR1cChzdGFydCwgZW5kIC0gc3RhcnQpOworCS8qCisJICogUmVwbGFjZSBzZXF1ZW5jZXMgb2YgJ2NvbnRyb2wnIGNoYXJhY3RlcnMgYW5kIHdoaXRlc3BhY2UKKwkgKiB3aXRoIG9uZSBhc2NpaSBzcGFjZSwgcmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcy4KKwkgKi8KKwlpZiAoKmRpcikgeworCQljaGFyICpvdXQgPSBkaXI7CisJCWludCBwcmV2X3NwYWNlID0gMSAvKiBzdHJpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi87CisJCWZvciAoZW5kID0gZGlyOyAqZW5kOyArK2VuZCkgeworCQkJY2hhciBjaCA9ICplbmQ7CisJCQlpZiAoKHVuc2lnbmVkIGNoYXIpY2ggPCAnXHgyMCcpCisJCQkJY2ggPSAnXHgyMCc7CisJCQlpZiAoaXNzcGFjZShjaCkpIHsKKwkJCQlpZiAocHJldl9zcGFjZSkKKwkJCQkJY29udGludWU7CisJCQkJcHJldl9zcGFjZSA9IDE7CisJCQl9IGVsc2UKKwkJCQlwcmV2X3NwYWNlID0gMDsKKwkJCSpvdXQrKyA9IGNoOworCQl9CisJCSpvdXQgPSAnXDAnOworCQlpZiAob3V0ID4gZGlyICYmIHByZXZfc3BhY2UpCisJCQlvdXRbLTFdID0gJ1wwJzsKIAl9Ci0KLQlyZXR1cm4geHN0cm5kdXAoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKwlyZXR1cm4gZGlyOwogfQogCiBzdGF0aWMgdm9pZCBzdHJpcF90cmFpbGluZ19zbGFzaGVzKGNoYXIgKmRpcikKQEAgLTE5NiwxMyArMjIwLDEzIEBACiAKIAlkaXIgPSBvcGVuZGlyKHNyYy0+YnVmKTsKIAlpZiAoIWRpcikKLQkJZGllKCJmYWlsZWQgdG8gb3BlbiAlcyIsIHNyYy0+YnVmKTsKKwkJZGllX2Vycm5vKCJmYWlsZWQgdG8gb3BlbiAnJXMnIiwgc3JjLT5idWYpOwogCiAJaWYgKG1rZGlyKGRlc3QtPmJ1ZiwgMDc3NykpIHsKIAkJaWYgKGVycm5vICE9IEVFWElTVCkKLQkJCWRpZSgiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiLCBkZXN0LT5idWYpOworCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIiwgZGVzdC0+YnVmKTsKIAkJZWxzZSBpZiAoc3RhdChkZXN0LT5idWYsICZidWYpKQotCQkJZGllKCJmYWlsZWQgdG8gc3RhdCAlcyIsIGRlc3QtPmJ1Zik7CisJCQlkaWVfZXJybm8oImZhaWxlZCB0byBzdGF0ICclcyciLCBkZXN0LT5idWYpOwogCQllbHNlIGlmICghU19JU0RJUihidWYuc3RfbW9kZSkpCiAJCQlkaWUoIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IiwgZGVzdC0+YnVmKTsKIAl9CkBAIC0yMjgsMTcgKzI1MiwxNiBAQAogCQl9CiAKIAkJaWYgKHVubGluayhkZXN0LT5idWYpICYmIGVycm5vICE9IEVOT0VOVCkKLQkJCWRpZSgiZmFpbGVkIHRvIHVubGluayAlczogJXMiLAotCQkJICAgIGRlc3QtPmJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiZmFpbGVkIHRvIHVubGluayAnJXMnIiwgZGVzdC0+YnVmKTsKIAkJaWYgKCFvcHRpb25fbm9faGFyZGxpbmtzKSB7CiAJCQlpZiAoIWxpbmsoc3JjLT5idWYsIGRlc3QtPmJ1ZikpCiAJCQkJY29udGludWU7CiAJCQlpZiAob3B0aW9uX2xvY2FsKQotCQkJCWRpZSgiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICVzIiwgZGVzdC0+YnVmKTsKKwkJCQlkaWVfZXJybm8oImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIiwgZGVzdC0+YnVmKTsKIAkJCW9wdGlvbl9ub19oYXJkbGlua3MgPSAxOwogCQl9CiAJCWlmIChjb3B5X2ZpbGUoZGVzdC0+YnVmLCBzcmMtPmJ1ZiwgMDY2NikpCi0JCQlkaWUoImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJXMiLCBkZXN0LT5idWYpOworCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciLCBkZXN0LT5idWYpOwogCX0KIAljbG9zZWRpcihkaXIpOwogfQpAQCAtMzM2LDcgKzM1OSw3IEBACiAKIAlqdW5rX3BpZCA9IGdldHBpZCgpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9jbG9uZV9vcHRpb25zLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9jbG9uZV9vcHRpb25zLAogCQkJICAgICBidWlsdGluX2Nsb25lX3VzYWdlLCAwKTsKIAogCWlmIChhcmdjID09IDApCkBAIC0zOTYsMTEgKzQxOSwxMSBAQAogCWlmICghb3B0aW9uX2JhcmUpIHsKIAkJanVua193b3JrX3RyZWUgPSB3b3JrX3RyZWU7CiAJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHdvcmtfdHJlZSkgPCAwKQotCQkJZGllKCJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJzogJXMiLAotCQkJCQl3b3JrX3RyZWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIiwKKwkJCQkgIHdvcmtfdHJlZSk7CiAJCWlmICghZGVzdF9leGlzdHMgJiYgbWtkaXIod29ya190cmVlLCAwNzU1KSkKLQkJCWRpZSgiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyc6ICVzLiIsCi0JCQkJCXdvcmtfdHJlZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcycuIiwKKwkJCQkgIHdvcmtfdHJlZSk7CiAJCXNldF9naXRfd29ya190cmVlKHdvcmtfdHJlZSk7CiAJfQogCWp1bmtfZ2l0X2RpciA9IGdpdF9kaXI7CkBAIC01NTEsOCArNTc0LDEwIEBACiAJCW9wdGlvbl9ub19jaGVja291dCA9IDE7CiAJfQogCi0JaWYgKHRyYW5zcG9ydCkKKwlpZiAodHJhbnNwb3J0KSB7CiAJCXRyYW5zcG9ydF91bmxvY2tfcGFjayh0cmFuc3BvcnQpOworCQl0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpOworCX0KIAogCWlmICghb3B0aW9uX25vX2NoZWNrb3V0KSB7CiAJCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tY29tbWl0LXRyZWUuYyBiL2J1aWx0aW4tY29tbWl0LXRyZWUuYwppbmRleCAwNDUzNDI1Li42NDY3MDc3IDEwMDY0NAotLS0gYS9idWlsdGluLWNvbW1pdC10cmVlLmMKKysrIGIvYnVpbHRpbi1jb21taXQtdHJlZS5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAl9CiAKIAlpZiAoc3RyYnVmX3JlYWQoJmJ1ZmZlciwgMCwgMCkgPCAwKQotCQlkaWUoImdpdCBjb21taXQtdHJlZTogcmVhZCByZXR1cm5lZCAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCIpOwogCiAJaWYgKCFjb21taXRfdHJlZShidWZmZXIuYnVmLCB0cmVlX3NoYTEsIHBhcmVudHMsIGNvbW1pdF9zaGExLCBOVUxMKSkgewogCQlwcmludGYoIiVzXG4iLCBzaGExX3RvX2hleChjb21taXRfc2hhMSkpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jb21taXQuYyBiL2J1aWx0aW4tY29tbWl0LmMKaW5kZXggYmFhYTc1Yy4uNGJjY2UwNiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jb21taXQuYworKysgYi9idWlsdGluLWNvbW1pdC5jCkBAIC04OCwxMyArODgsMTMgQEAKIAlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UpLAogCU9QVF9HUk9VUCgiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIpLAogCi0JT1BUX1NUUklORygnRicsICJmaWxlIiwgJmxvZ2ZpbGUsICJGSUxFIiwgInJlYWQgbG9nIGZyb20gZmlsZSIpLAorCU9QVF9GSUxFTkFNRSgnRicsICJmaWxlIiwgJmxvZ2ZpbGUsICJyZWFkIGxvZyBmcm9tIGZpbGUiKSwKIAlPUFRfU1RSSU5HKDAsICJhdXRob3IiLCAmZm9yY2VfYXV0aG9yLCAiQVVUSE9SIiwgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IiksCiAJT1BUX0NBTExCQUNLKCdtJywgIm1lc3NhZ2UiLCAmbWVzc2FnZSwgIk1FU1NBR0UiLCAic3BlY2lmeSBjb21taXQgbWVzc2FnZSIsIG9wdF9wYXJzZV9tKSwKIAlPUFRfU1RSSU5HKCdjJywgInJlZWRpdC1tZXNzYWdlIiwgJmVkaXRfbWVzc2FnZSwgIkNPTU1JVCIsICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCAiKSwKIAlPUFRfU1RSSU5HKCdDJywgInJldXNlLW1lc3NhZ2UiLCAmdXNlX21lc3NhZ2UsICJDT01NSVQiLCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiKSwKIAlPUFRfQk9PTEVBTigncycsICJzaWdub2ZmIiwgJnNpZ25vZmYsICJhZGQgU2lnbmVkLW9mZi1ieToiKSwKLQlPUFRfU1RSSU5HKCd0JywgInRlbXBsYXRlIiwgJnRlbXBsYXRlX2ZpbGUsICJGSUxFIiwgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIpLAorCU9QVF9GSUxFTkFNRSgndCcsICJ0ZW1wbGF0ZSIsICZ0ZW1wbGF0ZV9maWxlLCAidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIiksCiAJT1BUX0JPT0xFQU4oJ2UnLCAiZWRpdCIsICZlZGl0X2ZsYWcsICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIpLAogCiAJT1BUX0dST1VQKCJDb21taXQgY29udGVudHMgb3B0aW9ucyIpLApAQCAtNDM0LDEyICs0MzQsMTIgQEAKIAkJaWYgKGlzYXR0eSgwKSkKIAkJCWZwcmludGYoc3RkZXJyLCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIpOwogCQlpZiAoc3RyYnVmX3JlYWQoJnNiLCAwLCAwKSA8IDApCi0JCQlkaWUoImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0Iik7CisJCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0Iik7CiAJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKIAl9IGVsc2UgaWYgKGxvZ2ZpbGUpIHsKIAkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBsb2dmaWxlLCAwKSA8IDApCi0JCQlkaWUoImNvdWxkIG5vdCByZWFkIGxvZyBmaWxlICclcyc6ICVzIiwKLQkJCSAgICBsb2dmaWxlLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIiwKKwkJCQkgIGxvZ2ZpbGUpOwogCQlob29rX2FyZzEgPSAibWVzc2FnZSI7CiAJfSBlbHNlIGlmICh1c2VfbWVzc2FnZSkgewogCQlidWZmZXIgPSBzdHJzdHIodXNlX21lc3NhZ2VfYnVmZmVyLCAiXG5cbiIpOwpAQCAtNDUwLDE2ICs0NTAsMTUgQEAKIAkJaG9va19hcmcyID0gdXNlX21lc3NhZ2U7CiAJfSBlbHNlIGlmICghc3RhdChnaXRfcGF0aCgiTUVSR0VfTVNHIiksICZzdGF0YnVmKSkgewogCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGdpdF9wYXRoKCJNRVJHRV9NU0ciKSwgMCkgPCAwKQotCQkJZGllKCJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0c6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIik7CiAJCWhvb2tfYXJnMSA9ICJtZXJnZSI7CiAJfSBlbHNlIGlmICghc3RhdChnaXRfcGF0aCgiU1FVQVNIX01TRyIpLCAmc3RhdGJ1ZikpIHsKIAkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBnaXRfcGF0aCgiU1FVQVNIX01TRyIpLCAwKSA8IDApCi0JCQlkaWUoImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0c6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIpOwogCQlob29rX2FyZzEgPSAic3F1YXNoIjsKIAl9IGVsc2UgaWYgKHRlbXBsYXRlX2ZpbGUgJiYgIXN0YXQodGVtcGxhdGVfZmlsZSwgJnN0YXRidWYpKSB7CiAJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgdGVtcGxhdGVfZmlsZSwgMCkgPCAwKQotCQkJZGllKCJjb3VsZCBub3QgcmVhZCAlczogJXMiLAotCQkJICAgIHRlbXBsYXRlX2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkICclcyciLCB0ZW1wbGF0ZV9maWxlKTsKIAkJaG9va19hcmcxID0gInRlbXBsYXRlIjsKIAl9CiAKQEAgLTQ3Miw4ICs0NzEsNyBAQAogCiAJZnAgPSBmb3BlbihnaXRfcGF0aChjb21taXRfZWRpdG1zZyksICJ3Iik7CiAJaWYgKGZwID09IE5VTEwpCi0JCWRpZSgiY291bGQgbm90IG9wZW4gJXM6ICVzIiwKLQkJICAgIGdpdF9wYXRoKGNvbW1pdF9lZGl0bXNnKSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjb3VsZCBub3Qgb3BlbiAnJXMnIiwgZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpKTsKIAogCWlmIChjbGVhbnVwX21vZGUgIT0gQ0xFQU5VUF9OT05FKQogCQlzdHJpcHNwYWNlKCZzYiwgMCk7CkBAIC00OTcsNyArNDk1LDcgQEAKIAl9CiAKIAlpZiAoZndyaXRlKHNiLmJ1ZiwgMSwgc2IubGVuLCBmcCkgPCBzYi5sZW4pCi0JCWRpZSgiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiKTsKIAogCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CiAKQEAgLTY5NywxMyArNjk1LDggQEAKIHsKIAlpbnQgZiA9IDA7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX2NvbW1pdF9vcHRpb25zLCB1c2FnZSwgMCk7Ci0JbG9nZmlsZSA9IHBhcnNlX29wdGlvbnNfZml4X2ZpbGVuYW1lKHByZWZpeCwgbG9nZmlsZSk7Ci0JaWYgKGxvZ2ZpbGUpCi0JCWxvZ2ZpbGUgPSB4c3RyZHVwKGxvZ2ZpbGUpOwotCXRlbXBsYXRlX2ZpbGUgPSBwYXJzZV9vcHRpb25zX2ZpeF9maWxlbmFtZShwcmVmaXgsIHRlbXBsYXRlX2ZpbGUpOwotCWlmICh0ZW1wbGF0ZV9maWxlKQotCQl0ZW1wbGF0ZV9maWxlID0geHN0cmR1cCh0ZW1wbGF0ZV9maWxlKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fY29tbWl0X29wdGlvbnMsIHVzYWdlLAorCQkJICAgICAwKTsKIAogCWlmIChmb3JjZV9hdXRob3IgJiYgIXN0cmNocihmb3JjZV9hdXRob3IsICc+JykpCiAJCWZvcmNlX2F1dGhvciA9IGZpbmRfYXV0aG9yX2J5X25pY2tuYW1lKGZvcmNlX2F1dGhvcik7CkBAIC05NDUsOCArOTM4LDggQEAKIAkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQobG9va3VwX2NvbW1pdChoZWFkX3NoYTEpLCBwcHRyKS0+bmV4dDsKIAkJZnAgPSBmb3BlbihnaXRfcGF0aCgiTUVSR0VfSEVBRCIpLCAiciIpOwogCQlpZiAoZnAgPT0gTlVMTCkKLQkJCWRpZSgiY291bGQgbm90IG9wZW4gJXMgZm9yIHJlYWRpbmc6ICVzIiwKLQkJCSAgICBnaXRfcGF0aCgiTUVSR0VfSEVBRCIpLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIiwKKwkJCQkgIGdpdF9wYXRoKCJNRVJHRV9IRUFEIikpOwogCQl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJm0sIGZwLCAnXG4nKSAhPSBFT0YpIHsKIAkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJCQlpZiAoZ2V0X3NoYTFfaGV4KG0uYnVmLCBzaGExKSA8IDApCkBAIC05NTcsOCArOTUwLDcgQEAKIAkJc3RyYnVmX3JlbGVhc2UoJm0pOwogCQlpZiAoIXN0YXQoZ2l0X3BhdGgoIk1FUkdFX01PREUiKSwgJnN0YXRidWYpKSB7CiAJCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGdpdF9wYXRoKCJNRVJHRV9NT0RFIiksIDApIDwgMCkKLQkJCQlkaWUoImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREU6ICVzIiwKLQkJCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIik7CiAJCQlpZiAoIXN0cmNtcChzYi5idWYsICJuby1mZiIpKQogCQkJCWFsbG93X2Zhc3RfZm9yd2FyZCA9IDA7CiAJCX0KQEAgLTk3Miw4ICs5NjQsOSBAQAogCS8qIEZpbmFsbHksIGdldCB0aGUgY29tbWl0IG1lc3NhZ2UgKi8KIAlzdHJidWZfcmVzZXQoJnNiKTsKIAlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGdpdF9wYXRoKGNvbW1pdF9lZGl0bXNnKSwgMCkgPCAwKSB7CisJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOwogCQlyb2xsYmFja19pbmRleF9maWxlcygpOwotCQlkaWUoImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIik7CisJCWRpZSgiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIiwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKIAl9CiAKIAkvKiBUcnVuY2F0ZSB0aGUgbWVzc2FnZSBqdXN0IGJlZm9yZSB0aGUgZGlmZiwgaWYgYW55LiAqLwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jb25maWcuYyBiL2J1aWx0aW4tY29uZmlnLmMKaW5kZXggYTgxYmM4Yi4uYTJkNjU2ZSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jb25maWcuYworKysgYi9idWlsdGluLWNvbmZpZy5jCkBAIC0zMTYsNyArMzE2LDggQEAKIAogCWNvbmZpZ19leGNsdXNpdmVfZmlsZW5hbWUgPSBnZXRlbnYoQ09ORklHX0VOVklST05NRU5UKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fY29uZmlnX29wdGlvbnMsIGJ1aWx0aW5fY29uZmlnX3VzYWdlLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9jb25maWdfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9jb25maWdfdXNhZ2UsCiAJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwogCiAJaWYgKHVzZV9nbG9iYWxfY29uZmlnICsgdXNlX3N5c3RlbV9jb25maWcgKyAhIWdpdmVuX2NvbmZpZ19maWxlID4gMSkgewpAQCAtMzgyLDggKzM4Myw4IEBACiAJCWNoZWNrX2FyZ2MoYXJnYywgMCwgMCk7CiAJCWlmIChnaXRfY29uZmlnKHNob3dfYWxsX2NvbmZpZywgTlVMTCkgPCAwKSB7CiAJCQlpZiAoY29uZmlnX2V4Y2x1c2l2ZV9maWxlbmFtZSkKLQkJCQlkaWUoInVuYWJsZSB0byByZWFkIGNvbmZpZyBmaWxlICVzOiAlcyIsCi0JCQkJICAgIGNvbmZpZ19leGNsdXNpdmVfZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIiwKKwkJCQkJICBjb25maWdfZXhjbHVzaXZlX2ZpbGVuYW1lKTsKIAkJCWVsc2UKIAkJCQlkaWUoImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiKTsKIAkJfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jb3VudC1vYmplY3RzLmMgYi9idWlsdGluLWNvdW50LW9iamVjdHMuYwppbmRleCBiODE0ZmU1Li4xYjBiNmM4IDEwMDY0NAotLS0gYS9idWlsdGluLWNvdW50LW9iamVjdHMuYworKysgYi9idWlsdGluLWNvdW50LW9iamVjdHMuYwpAQCAtODMsNyArODMsNyBAQAogCQlPUFRfRU5EKCksCiAJfTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdHMsIGNvdW50X29iamVjdHNfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgY291bnRfb2JqZWN0c191c2FnZSwgMCk7CiAJLyogd2UgZG8gbm90IHRha2UgYXJndW1lbnRzIG90aGVyIHRoYW4gZmxhZ3MgZm9yIG5vdyAqLwogCWlmIChhcmdjKQogCQl1c2FnZV93aXRoX29wdGlvbnMoY291bnRfb2JqZWN0c191c2FnZSwgb3B0cyk7CmRpZmYgLS1naXQgYS9idWlsdGluLWRlc2NyaWJlLmMgYi9idWlsdGluLWRlc2NyaWJlLmMKaW5kZXggNjNjNmExOS4uN2E2NjI5OCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1kZXNjcmliZS5jCisrKyBiL2J1aWx0aW4tZGVzY3JpYmUuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJCU9QVF9FTkQoKSwKIAl9OwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgZGVzY3JpYmVfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZGVzY3JpYmVfdXNhZ2UsIDApOwogCWlmIChtYXhfY2FuZGlkYXRlcyA8IDApCiAJCW1heF9jYW5kaWRhdGVzID0gMDsKIAllbHNlIGlmIChtYXhfY2FuZGlkYXRlcyA+IE1BWF9UQUdTKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1kaWZmLmMgYi9idWlsdGluLWRpZmYuYwppbmRleCBkNzVkNjliLi4yZTUxZjQwIDEwMDY0NAotLS0gYS9idWlsdGluLWRpZmYuYworKysgYi9idWlsdGluLWRpZmYuYwpAQCAtNzAsNyArNzAsNyBAQAogCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOwogCiAJaWYgKGxzdGF0KHBhdGgsICZzdCkpCi0JCWRpZSgiJyVzJzogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImZhaWxlZCB0byBzdGF0ICclcyciLCBwYXRoKTsKIAlpZiAoIShTX0lTUkVHKHN0LnN0X21vZGUpIHx8IFNfSVNMTksoc3Quc3RfbW9kZSkpKQogCQlkaWUoIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIiwgcGF0aCk7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZmFzdC1leHBvcnQuYyBiL2J1aWx0aW4tZmFzdC1leHBvcnQuYwppbmRleCA5MDkxNDgxLi5jNDhjMThkIDEwMDY0NAotLS0gYS9idWlsdGluLWZhc3QtZXhwb3J0LmMKKysrIGIvYnVpbHRpbi1mYXN0LWV4cG9ydC5jCkBAIC0yMyw3ICsyMyw4IEBACiB9OwogCiBzdGF0aWMgaW50IHByb2dyZXNzOwotc3RhdGljIGVudW0geyBWRVJCQVRJTSwgV0FSTiwgU1RSSVAsIEFCT1JUIH0gc2lnbmVkX3RhZ19tb2RlID0gQUJPUlQ7CitzdGF0aWMgZW51bSB7IEFCT1JULCBWRVJCQVRJTSwgV0FSTiwgU1RSSVAgfSBzaWduZWRfdGFnX21vZGUgPSBBQk9SVDsKK3N0YXRpYyBlbnVtIHsgRVJST1IsIERST1AsIFJFV1JJVEUgfSB0YWdfb2ZfZmlsdGVyZWRfbW9kZSA9IEFCT1JUOwogc3RhdGljIGludCBmYWtlX21pc3NpbmdfdGFnZ2VyOwogCiBzdGF0aWMgaW50IHBhcnNlX29wdF9zaWduZWRfdGFnX21vZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LApAQCAtNDIsNiArNDMsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwYXJzZV9vcHRfdGFnX29mX2ZpbHRlcmVkX21vZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCB8fCAhc3RyY21wKGFyZywgImFib3J0IikpCisJCXRhZ19vZl9maWx0ZXJlZF9tb2RlID0gQUJPUlQ7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkcm9wIikpCisJCXRhZ19vZl9maWx0ZXJlZF9tb2RlID0gRFJPUDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInJld3JpdGUiKSkKKwkJdGFnX29mX2ZpbHRlcmVkX21vZGUgPSBSRVdSSVRFOworCWVsc2UKKwkJcmV0dXJuIGVycm9yKCJVbmtub3duIHRhZy1vZi1maWx0ZXJlZCBtb2RlOiAlcyIsIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZGVjb3JhdGlvbiBpZG51bXM7CiBzdGF0aWMgdWludDMyX3QgbGFzdF9pZG51bTsKIApAQCAtMTE5LDcgKzEzNCw3IEBACiAKIAlwcmludGYoImJsb2Jcbm1hcmsgOiUiUFJJdTMyIlxuZGF0YSAlbHVcbiIsIGxhc3RfaWRudW0sIHNpemUpOwogCWlmIChzaXplICYmIGZ3cml0ZShidWYsIHNpemUsIDEsIHN0ZG91dCkgIT0gMSkKLQkJZGllICgiQ291bGQgbm90IHdyaXRlIGJsb2IgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCB3cml0ZSBibG9iICclcyciLCBzaGExX3RvX2hleChzaGExKSk7CiAJcHJpbnRmKCJcbiIpOwogCiAJc2hvd19wcm9ncmVzcygpOwpAQCAtMjg5LDYgKzMwNCwyMyBAQAogCWNoYXIgKmJ1ZjsKIAljb25zdCBjaGFyICp0YWdnZXIsICp0YWdnZXJfZW5kLCAqbWVzc2FnZTsKIAlzaXplX3QgbWVzc2FnZV9zaXplID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0ICp0YWdnZWQ7CisJaW50IHRhZ2dlZF9tYXJrOworCXN0cnVjdCBjb21taXQgKnA7CisKKwkvKiBUcmVlcyBoYXZlIG5vIGlkZW50aWZlciBpbiBmYXN0LWV4cG9ydCBvdXRwdXQsIHRodXMgd2UgaGF2ZSBubyB3YXkKKwkgKiB0byBvdXRwdXQgdGFncyBvZiB0cmVlcywgdGFncyBvZiB0YWdzIG9mIHRyZWVzLCBldGMuICBTaW1wbHkgb21pdAorCSAqIHN1Y2ggdGFncy4KKwkgKi8KKwl0YWdnZWQgPSB0YWctPnRhZ2dlZDsKKwl3aGlsZSAodGFnZ2VkLT50eXBlID09IE9CSl9UQUcpIHsKKwkJdGFnZ2VkID0gKChzdHJ1Y3QgdGFnICopdGFnZ2VkKS0+dGFnZ2VkOworCX0KKwlpZiAodGFnZ2VkLT50eXBlID09IE9CSl9UUkVFKSB7CisJCXdhcm5pbmcoIk9taXR0aW5nIHRhZyAlcyxcbnNpbmNlIHRhZ3Mgb2YgdHJlZXMgKG9yIHRhZ3Mgb2YgdGFncyBvZiB0cmVlcywgZXRjLikgYXJlIG5vdCBzdXBwb3J0ZWQuIiwKKwkJCXNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKKwkJcmV0dXJuOworCX0KIAogCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHRhZy0+b2JqZWN0LnNoYTEsICZ0eXBlLCAmc2l6ZSk7CiAJaWYgKCFidWYpCkBAIC0zMzMsMTAgKzM2NSw0NSBAQAogCQkJfQogCX0KIAorCS8qIGhhbmRsZSB0YWctPnRhZ2dlZCBoYXZpbmcgYmVlbiBmaWx0ZXJlZCBvdXQgZHVlIHRvIHBhdGhzIHNwZWNpZmllZCAqLworCXRhZ2dlZCA9IHRhZy0+dGFnZ2VkOworCXRhZ2dlZF9tYXJrID0gZ2V0X29iamVjdF9tYXJrKHRhZ2dlZCk7CisJaWYgKCF0YWdnZWRfbWFyaykgeworCQlzd2l0Y2godGFnX29mX2ZpbHRlcmVkX21vZGUpIHsKKwkJY2FzZSBBQk9SVDoKKwkJCWRpZSAoIlRhZyAlcyB0YWdzIHVuZXhwb3J0ZWQgb2JqZWN0OyB1c2UgIgorCQkJICAgICAiLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PTxtb2RlPiB0byBoYW5kbGUgaXQuIiwKKwkJCSAgICAgc2hhMV90b19oZXgodGFnLT5vYmplY3Quc2hhMSkpOworCQljYXNlIERST1A6CisJCQkvKiBJZ25vcmUgdGhpcyB0YWcgYWx0b2dldGhlciAqLworCQkJcmV0dXJuOworCQljYXNlIFJFV1JJVEU6CisJCQlpZiAodGFnZ2VkLT50eXBlICE9IE9CSl9DT01NSVQpIHsKKwkJCQlkaWUgKCJUYWcgJXMgdGFncyB1bmV4cG9ydGVkICVzISIsCisJCQkJICAgICBzaGExX3RvX2hleCh0YWctPm9iamVjdC5zaGExKSwKKwkJCQkgICAgIHR5cGVuYW1lKHRhZ2dlZC0+dHlwZSkpOworCQkJfQorCQkJcCA9IChzdHJ1Y3QgY29tbWl0ICopdGFnZ2VkOworCQkJZm9yICg7OykgeworCQkJCWlmIChwLT5wYXJlbnRzICYmIHAtPnBhcmVudHMtPm5leHQpCisJCQkJCWJyZWFrOworCQkJCWlmIChwLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJCQlicmVhazsKKwkJCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkpCisJCQkJCWJyZWFrOworCQkJCWlmICghcC0+cGFyZW50cykKKwkJCQkJZGllICgiQ2FuJ3QgZmluZCByZXBsYWNlbWVudCBjb21taXQgZm9yIHRhZyAlc1xuIiwKKwkJCQkJICAgICBzaGExX3RvX2hleCh0YWctPm9iamVjdC5zaGExKSk7CisJCQkJcCA9IHAtPnBhcmVudHMtPml0ZW07CisJCQl9CisJCQl0YWdnZWRfbWFyayA9IGdldF9vYmplY3RfbWFyaygmcC0+b2JqZWN0KTsKKwkJfQorCX0KKwogCWlmICghcHJlZml4Y21wKG5hbWUsICJyZWZzL3RhZ3MvIikpCiAJCW5hbWUgKz0gMTA7CiAJcHJpbnRmKCJ0YWcgJXNcbmZyb20gOiVkXG4lLipzJXNkYXRhICVkXG4lLipzXG4iLAotCSAgICAgICBuYW1lLCBnZXRfb2JqZWN0X21hcmsodGFnLT50YWdnZWQpLAorCSAgICAgICBuYW1lLCB0YWdnZWRfbWFyaywKIAkgICAgICAgKGludCkodGFnZ2VyX2VuZCAtIHRhZ2dlciksIHRhZ2dlciwKIAkgICAgICAgdGFnZ2VyID09IHRhZ2dlcl9lbmQgPyAiIiA6ICJcbiIsCiAJICAgICAgIChpbnQpbWVzc2FnZV9zaXplLCAoaW50KW1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSA/IG1lc3NhZ2UgOiAiIik7CkBAIC00NTcsNyArNTI0LDcgQEAKIAljaGFyIGxpbmVbNTEyXTsKIAlGSUxFICpmID0gZm9wZW4oaW5wdXRfZmlsZSwgInIiKTsKIAlpZiAoIWYpCi0JCWRpZSgiY2Fubm90IHJlYWQgJXM6ICVzIiwgaW5wdXRfZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjYW5ub3QgcmVhZCAnJXMnIiwgaW5wdXRfZmlsZSk7CiAKIAl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkgewogCQl1aW50MzJfdCBtYXJrOwpAQCAtNTA0LDYgKzU3MSw5IEBACiAJCU9QVF9DQUxMQkFDSygwLCAic2lnbmVkLXRhZ3MiLCAmc2lnbmVkX3RhZ19tb2RlLCAibW9kZSIsCiAJCQkgICAgICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiLAogCQkJICAgICBwYXJzZV9vcHRfc2lnbmVkX3RhZ19tb2RlKSwKKwkJT1BUX0NBTExCQUNLKDAsICJ0YWctb2YtZmlsdGVyZWQtb2JqZWN0IiwgJnRhZ19vZl9maWx0ZXJlZF9tb2RlLCAibW9kZSIsCisJCQkgICAgICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIiwKKwkJCSAgICAgcGFyc2Vfb3B0X3RhZ19vZl9maWx0ZXJlZF9tb2RlKSwKIAkJT1BUX1NUUklORygwLCAiZXhwb3J0LW1hcmtzIiwgJmV4cG9ydF9maWxlbmFtZSwgIkZJTEUiLAogCQkJICAgICAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiKSwKIAkJT1BUX1NUUklORygwLCAiaW1wb3J0LW1hcmtzIiwgJmltcG9ydF9maWxlbmFtZSwgIkZJTEUiLApAQCAtNTIwLDggKzU5MCwxMSBAQAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCWluaXRfcmV2aXNpb25zKCZyZXZzLCBwcmVmaXgpOworCXJldnMudG9wb19vcmRlciA9IDE7CisJcmV2cy5zaG93X3NvdXJjZSA9IDE7CisJcmV2cy5yZXdyaXRlX3BhcmVudHMgPSAxOwogCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldnMsIE5VTEwpOwotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGZhc3RfZXhwb3J0X3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGZhc3RfZXhwb3J0X3VzYWdlLCAwKTsKIAlpZiAoYXJnYyA+IDEpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyAoZmFzdF9leHBvcnRfdXNhZ2UsIG9wdGlvbnMpOwogCkBAIC01MzAsMTggKzYwMywxMyBAQAogCiAJZ2V0X3RhZ3NfYW5kX2R1cGxpY2F0ZXMoJnJldnMucGVuZGluZywgJmV4dHJhX3JlZnMpOwogCi0JcmV2cy50b3BvX29yZGVyID0gMTsKIAlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKIAkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOwogCXJldnMuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSBzaG93X2ZpbGVtb2RpZnk7CiAJRElGRl9PUFRfU0VUKCZyZXZzLmRpZmZvcHQsIFJFQ1VSU0lWRSk7CiAJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oJnJldnMpKSkgewogCQlpZiAoaGFzX3Vuc2hvd25fcGFyZW50KGNvbW1pdCkpIHsKLQkJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOwogCQkJYWRkX29iamVjdF9hcnJheSgmY29tbWl0LT5vYmplY3QsIE5VTEwsICZjb21taXRzKTsKLQkJCWZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkKLQkJCQlpZiAoIXBhcmVudC0+aXRlbS0+dXRpbCkKLQkJCQkJcGFyZW50LT5pdGVtLT51dGlsID0gY29tbWl0LT51dGlsOwogCQl9CiAJCWVsc2UgewogCQkJaGFuZGxlX2NvbW1pdChjb21taXQsICZyZXZzKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZmV0Y2gtLXRvb2wuYyBiL2J1aWx0aW4tZmV0Y2gtLXRvb2wuYwppbmRleCAyOTM1NmQyLi4zZGJkZjdhIDEwMDY0NAotLS0gYS9idWlsdGluLWZldGNoLS10b29sLmMKKysrIGIvYnVpbHRpbi1mZXRjaC0tdG9vbC5jCkBAIC04LDcgKzgsNyBAQAogewogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDEwMjQpIDwgMCkgewotCQlkaWUoImVycm9yIHJlYWRpbmcgc3RhbmRhcmQgaW5wdXQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJlcnJvciByZWFkaW5nIHN0YW5kYXJkIGlucHV0Iik7CiAJfQogCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1mZXRjaC5jIGIvYnVpbHRpbi1mZXRjaC5jCmluZGV4IDFmN2EzZjEuLjgxN2RkNmIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZmV0Y2guYworKysgYi9idWlsdGluLWZldGNoLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCXN0cnVjdCBjb21taXQgKmN1cnJlbnQgPSBOVUxMLCAqdXBkYXRlZDsKIAllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJc3RydWN0IGJyYW5jaCAqY3VycmVudF9icmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOwotCWNvbnN0IGNoYXIgKnByZXR0eV9yZWYgPSBwcmV0dGlmeV9yZWYocmVmKTsKKwljb25zdCBjaGFyICpwcmV0dHlfcmVmID0gcHJldHRpZnlfcmVmbmFtZShyZWYtPm5hbWUpOwogCiAJKmRpc3BsYXkgPSAwOwogCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHJlZi0+bmV3X3NoYTEsIE5VTEwpOwpAQCAtMjk0LDcgKzI5NCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHN0b3JlX3VwZGF0ZWRfcmVmcyhjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKnJlbW90ZV9uYW1lLAorc3RhdGljIGludCBzdG9yZV91cGRhdGVkX3JlZnMoY29uc3QgY2hhciAqcmF3X3VybCwgY29uc3QgY2hhciAqcmVtb3RlX25hbWUsCiAJCXN0cnVjdCByZWYgKnJlZl9tYXApCiB7CiAJRklMRSAqZnA7CkBAIC0zMDMsMTEgKzMwMywxMyBAQAogCWNoYXIgbm90ZVsxMDI0XTsKIAljb25zdCBjaGFyICp3aGF0LCAqa2luZDsKIAlzdHJ1Y3QgcmVmICpybTsKLQljaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJGRVRDSF9IRUFEIik7CisJY2hhciAqdXJsLCAqZmlsZW5hbWUgPSBnaXRfcGF0aCgiRkVUQ0hfSEVBRCIpOwogCiAJZnAgPSBmb3BlbihmaWxlbmFtZSwgImEiKTsKIAlpZiAoIWZwKQogCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBvcGVuICVzOiAlc1xuIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisKKwl1cmwgPSB0cmFuc3BvcnRfYW5vbnltaXplX3VybChyYXdfdXJsKTsKIAlmb3IgKHJtID0gcmVmX21hcDsgcm07IHJtID0gcm0tPm5leHQpIHsKIAkJc3RydWN0IHJlZiAqcmVmID0gTlVMTDsKIApAQCAtMzU4LDEyICszNjAsMTggQEAKIAkJCQkJCSAgICBraW5kKTsKIAkJCW5vdGVfbGVuICs9IHNwcmludGYobm90ZSArIG5vdGVfbGVuLCAiJyVzJyBvZiAiLCB3aGF0KTsKIAkJfQotCQlub3RlX2xlbiArPSBzcHJpbnRmKG5vdGUgKyBub3RlX2xlbiwgIiUuKnMiLCB1cmxfbGVuLCB1cmwpOwotCQlmcHJpbnRmKGZwLCAiJXNcdCVzXHQlc1xuIiwKKwkJbm90ZVtub3RlX2xlbl0gPSAnXDAnOworCQlmcHJpbnRmKGZwLCAiJXNcdCVzXHQlcyIsCiAJCQlzaGExX3RvX2hleChjb21taXQgPyBjb21taXQtPm9iamVjdC5zaGExIDoKIAkJCQkgICAgcm0tPm9sZF9zaGExKSwKIAkJCXJtLT5tZXJnZSA/ICIiIDogIm5vdC1mb3ItbWVyZ2UiLAogCQkJbm90ZSk7CisJCWZvciAoaSA9IDA7IGkgPCB1cmxfbGVuOyArK2kpCisJCQlpZiAoJ1xuJyA9PSB1cmxbaV0pCisJCQkJZnB1dHMoIlxcbiIsIGZwKTsKKwkJCWVsc2UKKwkJCQlmcHV0Yyh1cmxbaV0sIGZwKTsKKwkJZnB1dGMoJ1xuJywgZnApOwogCiAJCWlmIChyZWYpCiAJCQlyYyB8PSB1cGRhdGVfbG9jYWxfcmVmKHJlZiwgd2hhdCwgbm90ZSk7CkBAIC0zODEsNiArMzg5LDcgQEAKIAkJCQlmcHJpbnRmKHN0ZGVyciwgIiAlc1xuIiwgbm90ZSk7CiAJCX0KIAl9CisJZnJlZSh1cmwpOwogCWZjbG9zZShmcCk7CiAJaWYgKHJjICYgU1RPUkVfUkVGX0VSUk9SX0RGX0NPTkZMSUNUKQogCQllcnJvcigic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgpAQCAtMzkxLDE0ICs0MDAsMTQgQEAKIAogLyoKICAqIFdlIHdvdWxkIHdhbnQgdG8gYnlwYXNzIHRoZSBvYmplY3QgdHJhbnNmZXIgYWx0b2dldGhlciBpZgotICogZXZlcnl0aGluZyB3ZSBhcmUgZ29pbmcgdG8gZmV0Y2ggYWxyZWFkeSBleGlzdHMgYW5kIGNvbm5lY3RlZAorICogZXZlcnl0aGluZyB3ZSBhcmUgZ29pbmcgdG8gZmV0Y2ggYWxyZWFkeSBleGlzdHMgYW5kIGlzIGNvbm5lY3RlZAogICogbG9jYWxseS4KICAqCi0gKiBUaGUgcmVmcyB3ZSBhcmUgZ29pbmcgdG8gZmV0Y2ggYXJlIGluIHRvX2ZldGNoIChucl9oZWFkcyBpbgotICogdG90YWwpLiAgSWYgcnVubmluZworICogVGhlIHJlZnMgd2UgYXJlIGdvaW5nIHRvIGZldGNoIGFyZSBpbiByZWZfbWFwLiAgSWYgcnVubmluZwogICoKLSAqICAkIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgdG9fZmV0Y2hbMF0gdG9fZmV0Y2hbMV0gLi4uIC0tbm90IC0tYWxsCisgKiAgJCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tc3RkaW4gLS1ub3QgLS1hbGwKICAqCisgKiAoZmVlZGluZyBhbGwgdGhlIHJlZnMgaW4gcmVmX21hcCBvbiBpdHMgc3RhbmRhcmQgaW5wdXQpCiAgKiBkb2VzIG5vdCBlcnJvciBvdXQsIHRoYXQgbWVhbnMgZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSB0aGUKICAqIHJlZnMgd2UgYXJlIGdvaW5nIHRvIGZldGNoIGV4aXN0cyBhbmQgaXMgY29ubmVjdGVkIHRvIHNvbWUgb2YKICAqIG91ciBleGlzdGluZyByZWZzLgpAQCAtNDA3LDggKzQxNiw5IEBACiB7CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcmV2bGlzdDsKIAlzdHJ1Y3QgcmVmICpyZWY7Ci0JY2hhciAqKmFyZ3Y7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsicmV2LWxpc3QiLAorCQkiLS1xdWlldCIsICItLW9iamVjdHMiLCAiLS1zdGRpbiIsICItLW5vdCIsICItLWFsbCIsIE5VTEx9OwogCiAJLyoKIAkgKiBJZiB3ZSBhcmUgZGVlcGVuaW5nIGEgc2hhbGxvdyBjbG9uZSB3ZSBhbHJlYWR5IGhhdmUgdGhlc2UKQEAgLTQyMCwzNCArNDMwLDQ2IEBACiAJaWYgKGRlcHRoKQogCQlyZXR1cm4gLTE7CiAKLQlmb3IgKGkgPSAwLCByZWYgPSByZWZfbWFwOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKLQkJaSsrOwotCWlmICghaSkKKwlpZiAoIXJlZl9tYXApCiAJCXJldHVybiAwOwogCi0JYXJndiA9IHhtYWxsb2Moc2l6ZW9mKCphcmd2KSAqIChpICsgNikpOwotCWkgPSAwOwotCWFyZ3ZbaSsrXSA9IHhzdHJkdXAoInJldi1saXN0Iik7Ci0JYXJndltpKytdID0geHN0cmR1cCgiLS1xdWlldCIpOwotCWFyZ3ZbaSsrXSA9IHhzdHJkdXAoIi0tb2JqZWN0cyIpOwotCWZvciAocmVmID0gcmVmX21hcDsgcmVmOyByZWYgPSByZWYtPm5leHQpCi0JCWFyZ3ZbaSsrXSA9IHhzdHJkdXAoc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSkpOwotCWFyZ3ZbaSsrXSA9IHhzdHJkdXAoIi0tbm90Iik7Ci0JYXJndltpKytdID0geHN0cmR1cCgiLS1hbGwiKTsKLQlhcmd2W2krK10gPSBOVUxMOwotCiAJbWVtc2V0KCZyZXZsaXN0LCAwLCBzaXplb2YocmV2bGlzdCkpOwotCXJldmxpc3QuYXJndiA9IChjb25zdCBjaGFyKiopYXJndjsKKwlyZXZsaXN0LmFyZ3YgPSBhcmd2OwogCXJldmxpc3QuZ2l0X2NtZCA9IDE7Ci0JcmV2bGlzdC5ub19zdGRpbiA9IDE7CiAJcmV2bGlzdC5ub19zdGRvdXQgPSAxOwogCXJldmxpc3Qubm9fc3RkZXJyID0gMTsKLQllcnIgPSBydW5fY29tbWFuZCgmcmV2bGlzdCk7CisJcmV2bGlzdC5pbiA9IC0xOwogCi0JZm9yIChpID0gMDsgYXJndltpXTsgaSsrKQotCQlmcmVlKGFyZ3ZbaV0pOwotCWZyZWUoYXJndik7Ci0JcmV0dXJuIGVycjsKKwllcnIgPSBzdGFydF9jb21tYW5kKCZyZXZsaXN0KTsKKwlpZiAoZXJyKSB7CisJCWVycm9yKCJjb3VsZCBub3QgcnVuIHJldi1saXN0Iik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyoKKwkgKiBJZiByZXYtbGlzdCAtLXN0ZGluIGVuY291bnRlcnMgYW4gdW5rbm93biBjb21taXQsIGl0IHRlcm1pbmF0ZXMsCisJICogd2hpY2ggd2lsbCBjYXVzZSBTSUdQSVBFIGluIHRoZSB3cml0ZSBsb29wIGJlbG93LgorCSAqLworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7CisKKwlmb3IgKHJlZiA9IHJlZl9tYXA7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICh3cml0ZV9pbl9mdWxsKHJldmxpc3QuaW4sIHNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpLCA0MCkgPCAwIHx8CisJCSAgICB3cml0ZV9pbl9mdWxsKHJldmxpc3QuaW4sICJcbiIsIDEpIDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVQSVBFICYmIGVycm5vICE9IEVJTlZBTCkKKwkJCQllcnJvcigiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQllcnIgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGNsb3NlKHJldmxpc3QuaW4pKSB7CisJCWVycm9yKCJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbjogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQllcnIgPSAtMTsKKwl9CisKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisKKwlyZXR1cm4gZmluaXNoX2NvbW1hbmQoJnJldmxpc3QpIHx8IGVycjsKIH0KIAogc3RhdGljIGludCBmZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmX21hcCkKQEAgLTYzMCw3ICs2NTIsNyBAQAogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCiAJCXN0cmJ1Zl9hZGRmKCZkZWZhdWx0X3JsYSwgIiAlcyIsIGFyZ3ZbaV0pOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsCiAJCQkgICAgIGJ1aWx0aW5fZmV0Y2hfb3B0aW9ucywgYnVpbHRpbl9mZXRjaF91c2FnZSwgMCk7CiAKIAlpZiAoYXJnYyA9PSAwKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1mbXQtbWVyZ2UtbXNnLmMgYi9idWlsdGluLWZtdC1tZXJnZS1tc2cuYwppbmRleCBmYWUxNDgyLi45ZDUyNDAwIDEwMDY0NAotLS0gYS9idWlsdGluLWZtdC1tZXJnZS1tc2cuYworKysgYi9idWlsdGluLWZtdC1tZXJnZS1tc2cuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAJCU9QVF9CT09MRUFOKDAsICJsb2ciLCAgICAgJm1lcmdlX3N1bW1hcnksICJwb3B1bGF0ZSBsb2cgd2l0aCB0aGUgc2hvcnRsb2ciKSwKIAkJT1BUX0JPT0xFQU4oMCwgInN1bW1hcnkiLCAmbWVyZ2Vfc3VtbWFyeSwgImFsaWFzIGZvciAtLWxvZyIpLAotCQlPUFRfU1RSSU5HKCdGJywgImZpbGUiLCAgICZpbnBhdGgsICJmaWxlIiwgImZpbGUgdG8gcmVhZCBmcm9tIiksCisJCU9QVF9GSUxFTkFNRSgnRicsICJmaWxlIiwgJmlucGF0aCwgImZpbGUgdG8gcmVhZCBmcm9tIiksCiAJCU9QVF9FTkQoKQogCX07CiAKQEAgLTM2MCwyMCArMzYwLDE5IEBACiAJaW50IHJldDsKIAogCWdpdF9jb25maWcoZm10X21lcmdlX21zZ19jb25maWcsIE5VTEwpOwotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGZtdF9tZXJnZV9tc2dfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZm10X21lcmdlX21zZ191c2FnZSwKKwkJCSAgICAgMCk7CiAJaWYgKGFyZ2MgPiAwKQogCQl1c2FnZV93aXRoX29wdGlvbnMoZm10X21lcmdlX21zZ191c2FnZSwgb3B0aW9ucyk7Ci0JaW5wYXRoID0gcGFyc2Vfb3B0aW9uc19maXhfZmlsZW5hbWUocHJlZml4LCBpbnBhdGgpOwogCiAJaWYgKGlucGF0aCAmJiBzdHJjbXAoaW5wYXRoLCAiLSIpKSB7CiAJCWluID0gZm9wZW4oaW5wYXRoLCAiciIpOwogCQlpZiAoIWluKQotCQkJZGllKCJjYW5ub3Qgb3BlbiAlcyIsIGlucGF0aCk7CisJCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuICclcyciLCBpbnBhdGgpOwogCX0KIAogCWlmIChzdHJidWZfcmVhZCgmaW5wdXQsIGZpbGVubyhpbiksIDApIDwgMCkKLQkJZGllKCJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQorCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUiKTsKIAlyZXQgPSBmbXRfbWVyZ2VfbXNnKG1lcmdlX3N1bW1hcnksICZpbnB1dCwgJm91dHB1dCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZm9yLWVhY2gtcmVmLmMgYi9idWlsdGluLWZvci1lYWNoLXJlZi5jCmluZGV4IDE5MTFjZGEuLmQ3Y2M4Y2EgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZm9yLWVhY2gtcmVmLmMKKysrIGIvYnVpbHRpbi1mb3ItZWFjaC1yZWYuYwpAQCAtOTEzLDcgKzkxMyw3IEBACiAJCU9QVF9FTkQoKSwKIAl9OwogCi0JcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRzLCBmb3JfZWFjaF9yZWZfdXNhZ2UsIDApOworCXBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCBmb3JfZWFjaF9yZWZfdXNhZ2UsIDApOwogCWlmIChtYXhjb3VudCA8IDApIHsKIAkJZXJyb3IoImludmFsaWQgLS1jb3VudCBhcmd1bWVudDogYCVkJyIsIG1heGNvdW50KTsKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGZvcl9lYWNoX3JlZl91c2FnZSwgb3B0cyk7CmRpZmYgLS1naXQgYS9idWlsdGluLWZzY2suYyBiL2J1aWx0aW4tZnNjay5jCmluZGV4IDY0MzZiYzIuLmIzZDM4ZmEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZnNjay5jCisrKyBiL2J1aWx0aW4tZnNjay5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogc3RhdGljIHZvaWQgbWFya19vYmplY3RfcmVhY2hhYmxlKHN0cnVjdCBvYmplY3QgKm9iaikKIHsKLQltYXJrX29iamVjdChvYmosIE9CSl9BTlksIDApOworCW1hcmtfb2JqZWN0KG9iaiwgT0JKX0FOWSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgdHJhdmVyc2Vfb25lX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCBvYmplY3QgKnBhcmVudCkKQEAgLTIxNyw3ICsyMTcsNyBAQAogCQkJCXJldHVybjsKIAkJCX0KIAkJCWlmICghKGYgPSBmb3BlbihmaWxlbmFtZSwgInciKSkpCi0JCQkJZGllKCJDb3VsZCBub3Qgb3BlbiAlcyIsIGZpbGVuYW1lKTsKKwkJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBvcGVuICclcyciLCBmaWxlbmFtZSk7CiAJCQlpZiAob2JqLT50eXBlID09IE9CSl9CTE9CKSB7CiAJCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKQEAgLTIyNSwxNSArMjI1LDE1IEBACiAJCQkJCQkmdHlwZSwgJnNpemUpOwogCQkJCWlmIChidWYpIHsKIAkJCQkJaWYgKGZ3cml0ZShidWYsIHNpemUsIDEsIGYpICE9IDEpCi0JCQkJCQlkaWUoIkNvdWxkIG5vdCB3cml0ZSAlczogJXMiLAotCQkJCQkJICAgIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgd3JpdGUgJyVzJyIsCisJCQkJCQkJICBmaWxlbmFtZSk7CiAJCQkJCWZyZWUoYnVmKTsKIAkJCQl9CiAJCQl9IGVsc2UKIAkJCQlmcHJpbnRmKGYsICIlc1xuIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CiAJCQlpZiAoZmNsb3NlKGYpKQotCQkJCWRpZSgiQ291bGQgbm90IGZpbmlzaCAlczogJXMiLAotCQkJCSAgICBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBmaW5pc2ggJyVzJyIsCisJCQkJCSAgZmlsZW5hbWUpOwogCQl9CiAJCXJldHVybjsKIAl9CkBAIC0yOTIsNyArMjkyLDcgQEAKIAkJZnByaW50ZihzdGRlcnIsICJDaGVja2luZyAlcyAlc1xuIiwKIAkJCXR5cGVuYW1lKG9iai0+dHlwZSksIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOwogCi0JaWYgKGZzY2tfd2FsayhvYmosIG1hcmtfdXNlZCwgMCkpCisJaWYgKGZzY2tfd2FsayhvYmosIG1hcmtfdXNlZCwgTlVMTCkpCiAJCW9iamVycm9yKG9iaiwgImJyb2tlbiBsaW5rcyIpOwogCWlmIChmc2NrX29iamVjdChvYmosIGNoZWNrX3N0cmljdCwgZnNja19lcnJvcl9mdW5jKSkKIAkJcmV0dXJuIC0xOwpAQCAtNTkwLDcgKzU5MCw3IEBACiAKIAllcnJvcnNfZm91bmQgPSAwOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgZnNja19vcHRzLCBmc2NrX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGZzY2tfb3B0cywgZnNja191c2FnZSwgMCk7CiAJaWYgKHdyaXRlX2xvc3RfYW5kX2ZvdW5kKSB7CiAJCWNoZWNrX2Z1bGwgPSAxOwogCQlpbmNsdWRlX3JlZmxvZ3MgPSAwOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1nYy5jIGIvYnVpbHRpbi1nYy5jCmluZGV4IGZjNTU2ZWQuLjdkM2U5Y2MgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZ2MuYworKysgYi9idWlsdGluLWdjLmMKQEAgLTE5NCw3ICsxOTQsOCBAQAogCWlmIChwYWNrX3JlZnMgPCAwKQogCQlwYWNrX3JlZnMgPSAhaXNfYmFyZV9yZXBvc2l0b3J5KCk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX2djX29wdGlvbnMsIGJ1aWx0aW5fZ2NfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9nY19vcHRpb25zLAorCQkJICAgICBidWlsdGluX2djX3VzYWdlLCAwKTsKIAlpZiAoYXJnYyA+IDApCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2djX3VzYWdlLCBidWlsdGluX2djX29wdGlvbnMpOwogCmRpZmYgLS1naXQgYS9idWlsdGluLWdyZXAuYyBiL2J1aWx0aW4tZ3JlcC5jCmluZGV4IGY4OGE5MTIuLmZkNDUwYmMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZ3JlcC5jCisrKyBiL2J1aWx0aW4tZ3JlcC5jCkBAIC0xMCw3ICsxMCwxMCBAQAogI2luY2x1ZGUgInRhZy5oIgogI2luY2x1ZGUgInRyZWUtd2Fsay5oIgogI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKICNpbmNsdWRlICJncmVwLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKIAogI2lmbmRlZiBOT19FWFRFUk5BTF9HUkVQCiAjaWZkZWYgX191bml4X18KQEAgLTIwLDEyICsyMywyMSBAQAogI2VuZGlmCiAjZW5kaWYKIAotc3RhdGljIGludCBidWlsdGluX2dyZXA7CitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGdyZXBfdXNhZ2VbXSA9IHsKKwkiZ2l0IGdyZXAgW29wdGlvbnNdIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gcGF0aC4uLl0iLAorCU5VTEwKK307CiAKIHN0YXRpYyBpbnQgZ3JlcF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJc3RydWN0IGdyZXBfb3B0ICpvcHQgPSBjYjsKIAorCXN3aXRjaCAodXNlcmRpZmZfY29uZmlnKHZhciwgdmFsdWUpKSB7CisJY2FzZSAwOiBicmVhazsKKwljYXNlIC0xOiByZXR1cm4gLTE7CisJZGVmYXVsdDogcmV0dXJuIDA7CisJfQorCiAJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuZ3JlcCIpKSB7CiAJCW9wdC0+Y29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlLCAtMSk7CiAJCXJldHVybiAwOwpAQCAtMTE0LDggKzEyNiw4IEBACiAJdW5zaWduZWQgbG9uZyBzaXplOwogCWNoYXIgKmRhdGE7CiAJZW51bSBvYmplY3RfdHlwZSB0eXBlOwotCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOwogCWludCBoaXQ7CisJc3RydWN0IHN0cmJ1ZiBwYXRoYnVmID0gU1RSQlVGX0lOSVQ7CiAKIAlkYXRhID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKIAlpZiAoIWRhdGEpIHsKQEAgLTEyMywyNiArMTM1LDEzIEBACiAJCXJldHVybiAwOwogCX0KIAlpZiAob3B0LT5yZWxhdGl2ZSAmJiBvcHQtPnByZWZpeF9sZW5ndGgpIHsKLQkJc3RhdGljIGNoYXIgbmFtZV9idWZbUEFUSF9NQVhdOwotCQljaGFyICpjcDsKLQkJaW50IG5hbWVfbGVuID0gc3RybGVuKG5hbWUpIC0gb3B0LT5wcmVmaXhfbGVuZ3RoICsgMTsKLQotCQlpZiAoIXRyZWVfbmFtZV9sZW4pCi0JCQluYW1lICs9IG9wdC0+cHJlZml4X2xlbmd0aDsKLQkJZWxzZSB7Ci0JCQlpZiAoQVJSQVlfU0laRShuYW1lX2J1ZikgPD0gbmFtZV9sZW4pCi0JCQkJY3AgPSB0b19mcmVlID0geG1hbGxvYyhuYW1lX2xlbik7Ci0JCQllbHNlCi0JCQkJY3AgPSBuYW1lX2J1ZjsKLQkJCW1lbWNweShjcCwgbmFtZSwgdHJlZV9uYW1lX2xlbik7Ci0JCQlzdHJjcHkoY3AgKyB0cmVlX25hbWVfbGVuLAotCQkJICAgICAgIG5hbWUgKyB0cmVlX25hbWVfbGVuICsgb3B0LT5wcmVmaXhfbGVuZ3RoKTsKLQkJCW5hbWUgPSBjcDsKLQkJfQorCQlxdW90ZV9wYXRoX3JlbGF0aXZlKG5hbWUgKyB0cmVlX25hbWVfbGVuLCAtMSwgJnBhdGhidWYsIG9wdC0+cHJlZml4KTsKKwkJc3RyYnVmX2luc2VydCgmcGF0aGJ1ZiwgMCwgbmFtZSwgdHJlZV9uYW1lX2xlbik7CisJCW5hbWUgPSBwYXRoYnVmLmJ1ZjsKIAl9CiAJaGl0ID0gZ3JlcF9idWZmZXIob3B0LCBuYW1lLCBkYXRhLCBzaXplKTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0aGJ1Zik7CiAJZnJlZShkYXRhKTsKLQlmcmVlKHRvX2ZyZWUpOwogCXJldHVybiBoaXQ7CiB9CiAKQEAgLTE1Miw2ICsxNTEsNyBAQAogCWludCBpOwogCWNoYXIgKmRhdGE7CiAJc2l6ZV90IHN6OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAKIAlpZiAobHN0YXQoZmlsZW5hbWUsICZzdCkgPCAwKSB7CiAJZXJyX3JldDoKQEAgLTE3Niw4ICsxNzYsOSBAQAogCX0KIAljbG9zZShpKTsKIAlpZiAob3B0LT5yZWxhdGl2ZSAmJiBvcHQtPnByZWZpeF9sZW5ndGgpCi0JCWZpbGVuYW1lICs9IG9wdC0+cHJlZml4X2xlbmd0aDsKKwkJZmlsZW5hbWUgPSBxdW90ZV9wYXRoX3JlbGF0aXZlKGZpbGVuYW1lLCAtMSwgJmJ1Ziwgb3B0LT5wcmVmaXgpOwogCWkgPSBncmVwX2J1ZmZlcihvcHQsIGZpbGVuYW1lLCBkYXRhLCBzeik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAJZnJlZShkYXRhKTsKIAlyZXR1cm4gaTsKIH0KQEAgLTI3NCw2ICsyNzUsMTcgQEAKIAkJYXJnYyAtPSAyOwogCX0KIAorCWlmIChvcHQtPnByZV9jb250ZXh0IHx8IG9wdC0+cG9zdF9jb250ZXh0KSB7CisJCS8qCisJCSAqIGdyZXAgaGFuZGxlcyBodW5rIG1hcmtzIGJldHdlZW4gZmlsZXMsIGJ1dCB3ZSBuZWVkIHRvCisJCSAqIGRvIHRoYXQgb3Vyc2VsdmVzIGJldHdlZW4gbXVsdGlwbGUgY2FsbHMuCisJCSAqLworCQlpZiAob3B0LT5zaG93X2h1bmtfbWFyaykKKwkJCXdyaXRlX29yX2RpZSgxLCAiLS1cbiIsIDMpOworCQllbHNlCisJCQlvcHQtPnNob3dfaHVua19tYXJrID0gMTsKKwl9CisKIAlzdGF0dXMgPSBleGVjX2dyZXAoYXJnYywgYXJndik7CiAKIAlpZiAoa2VwdF8wKSB7CkBAIC00MzIsNyArNDQ0LDggQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGdyZXBfY2FjaGUoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKipwYXRocywgaW50IGNhY2hlZCkKK3N0YXRpYyBpbnQgZ3JlcF9jYWNoZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqKnBhdGhzLCBpbnQgY2FjaGVkLAorCQkgICAgICBpbnQgZXh0ZXJuYWxfZ3JlcF9hbGxvd2VkKQogewogCWludCBoaXQgPSAwOwogCWludCBucjsKQEAgLTQ0NCwxMCArNDU3LDExIEBACiAJICogd2UgZ3JlcCB0aHJvdWdoIHRoZSBjaGVja2VkLW91dCBmaWxlcy4gSXQgdGVuZHMgdG8KIAkgKiBiZSBhIGxvdCBtb3JlIG9wdGltaXplZAogCSAqLwotCWlmICghY2FjaGVkICYmICFidWlsdGluX2dyZXApIHsKKwlpZiAoIWNhY2hlZCAmJiBleHRlcm5hbF9ncmVwX2FsbG93ZWQpIHsKIAkJaGl0ID0gZXh0ZXJuYWxfZ3JlcChvcHQsIHBhdGhzLCBjYWNoZWQpOwogCQlpZiAoaGl0ID49IDApCiAJCQlyZXR1cm4gaGl0OworCQloaXQgPSAwOwogCX0KICNlbmRpZgogCkBAIC01NjAsMjcgKzU3NCwxODcgQEAKIAlkaWUoInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiLCB0eXBlbmFtZShvYmotPnR5cGUpKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9ncmVwX3VzYWdlW10gPQotImdpdCBncmVwIDxvcHRpb24+KiBbLWVdIDxwYXR0ZXJuPiA8cmV2PiogW1stLV0gPHBhdGg+Li4uXSI7CitzdGF0aWMgaW50IGNvbnRleHRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCWludCB2YWx1ZTsKKwljb25zdCBjaGFyICplbmRwOwogCi1zdGF0aWMgY29uc3QgY2hhciBlbXNnX2ludmFsaWRfY29udGV4dF9sZW5bXSA9Ci0iJXM6IGludmFsaWQgY29udGV4dCBsZW5ndGggYXJndW1lbnQiOwotc3RhdGljIGNvbnN0IGNoYXIgZW1zZ19taXNzaW5nX2NvbnRleHRfbGVuW10gPQotIm1pc3NpbmcgY29udGV4dCBsZW5ndGggYXJndW1lbnQiOwotc3RhdGljIGNvbnN0IGNoYXIgZW1zZ19taXNzaW5nX2FyZ3VtZW50W10gPQotIm9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtJXMiOworCWlmICh1bnNldCkgeworCQlncmVwX29wdC0+cHJlX2NvbnRleHQgPSBncmVwX29wdC0+cG9zdF9jb250ZXh0ID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCXZhbHVlID0gc3RydG9sKGFyZywgKGNoYXIgKiopJmVuZHAsIDEwKTsKKwlpZiAoKmVuZHApIHsKKwkJcmV0dXJuIGVycm9yKCJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIiwKKwkJCSAgICAgb3B0LT5zaG9ydF9uYW1lKTsKKwl9CisJZ3JlcF9vcHQtPnByZV9jb250ZXh0ID0gZ3JlcF9vcHQtPnBvc3RfY29udGV4dCA9IHZhbHVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbGVfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlGSUxFICpwYXR0ZXJuczsKKwlpbnQgbG5vID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiOworCisJcGF0dGVybnMgPSBmb3BlbihhcmcsICJyIik7CisJaWYgKCFwYXR0ZXJucykKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiAnJXMnIiwgYXJnKTsKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJnNiLCBwYXR0ZXJucywgJ1xuJykgPT0gMCkgeworCQkvKiBpZ25vcmUgZW1wdHkgbGluZSBsaWtlIGdyZXAgZG9lcyAqLworCQlpZiAoc2IubGVuID09IDApCisJCQljb250aW51ZTsKKwkJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpLCBhcmcsCisJCQkJICAgICsrbG5vLCBHUkVQX1BBVFRFUk4pOworCX0KKwlmY2xvc2UocGF0dGVybnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbm90X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgIi0tbm90IiwgImNvbW1hbmQgbGluZSIsIDAsIEdSRVBfTk9UKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbmRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKGdyZXBfb3B0LCAiLS1hbmQiLCAiY29tbWFuZCBsaW5lIiwgMCwgR1JFUF9BTkQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wZW5fY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKGdyZXBfb3B0LCAiKCIsICJjb21tYW5kIGxpbmUiLCAwLCBHUkVQX09QRU5fUEFSRU4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsb3NlX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgIikiLCAiY29tbWFuZCBsaW5lIiwgMCwgR1JFUF9DTE9TRV9QQVJFTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGF0dGVybl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgYXJnLCAiLWUgb3B0aW9uIiwgMCwgR1JFUF9QQVRURVJOKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZWxwX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIC0xOworfQogCiBpbnQgY21kX2dyZXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJaW50IGhpdCA9IDA7CiAJaW50IGNhY2hlZCA9IDA7CisJaW50IGV4dGVybmFsX2dyZXBfYWxsb3dlZCA9IDE7CiAJaW50IHNlZW5fZGFzaGRhc2ggPSAwOwogCXN0cnVjdCBncmVwX29wdCBvcHQ7CiAJc3RydWN0IG9iamVjdF9hcnJheSBsaXN0ID0geyAwLCAwLCBOVUxMIH07CiAJY29uc3QgY2hhciAqKnBhdGhzID0gTlVMTDsKIAlpbnQgaTsKKwlpbnQgZHVtbXk7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKDAsICJjYWNoZWQiLCAmY2FjaGVkLAorCQkJInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0JPT0xFQU4oJ3YnLCAiaW52ZXJ0LW1hdGNoIiwgJm9wdC5pbnZlcnQsCisJCQkic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiKSwKKwkJT1BUX0JJVCgnaScsICJpZ25vcmUtY2FzZSIsICZvcHQucmVnZmxhZ3MsCisJCQkiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIsIFJFR19JQ0FTRSksCisJCU9QVF9CT09MRUFOKCd3JywgIndvcmQtcmVnZXhwIiwgJm9wdC53b3JkX3JlZ2V4cCwKKwkJCSJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIpLAorCQlPUFRfU0VUX0lOVCgnYScsICJ0ZXh0IiwgJm9wdC5iaW5hcnksCisJCQkicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIsIEdSRVBfQklOQVJZX1RFWFQpLAorCQlPUFRfU0VUX0lOVCgnSScsIE5VTEwsICZvcHQuYmluYXJ5LAorCQkJImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIsCisJCQlHUkVQX0JJTkFSWV9OT01BVENIKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0JJVCgnRScsICJleHRlbmRlZC1yZWdleHAiLCAmb3B0LnJlZ2ZsYWdzLAorCQkJInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIiwgUkVHX0VYVEVOREVEKSwKKwkJT1BUX05FR0JJVCgnRycsICJiYXNpYy1yZWdleHAiLCAmb3B0LnJlZ2ZsYWdzLAorCQkJInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIsCisJCQlSRUdfRVhURU5ERUQpLAorCQlPUFRfQk9PTEVBTignRicsICJmaXhlZC1zdHJpbmdzIiwgJm9wdC5maXhlZCwKKwkJCSJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQk9PTEVBTignbicsIE5VTEwsICZvcHQubGluZW51bSwgInNob3cgbGluZSBudW1iZXJzIiksCisJCU9QVF9ORUdCSVQoJ2gnLCBOVUxMLCAmb3B0LnBhdGhuYW1lLCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiLCAxKSwKKwkJT1BUX0JJVCgnSCcsIE5VTEwsICZvcHQucGF0aG5hbWUsICJzaG93IGZpbGVuYW1lcyIsIDEpLAorCQlPUFRfTkVHQklUKDAsICJmdWxsLW5hbWUiLCAmb3B0LnJlbGF0aXZlLAorCQkJInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiLCAxKSwKKwkJT1BUX0JPT0xFQU4oJ2wnLCAiZmlsZXMtd2l0aC1tYXRjaGVzIiwgJm9wdC5uYW1lX29ubHksCisJCQkic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIiksCisJCU9QVF9CT09MRUFOKDAsICJuYW1lLW9ubHkiLCAmb3B0Lm5hbWVfb25seSwKKwkJCSJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIpLAorCQlPUFRfQk9PTEVBTignTCcsICJmaWxlcy13aXRob3V0LW1hdGNoIiwKKwkJCSZvcHQudW5tYXRjaF9uYW1lX29ubHksCisJCQkic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIiksCisJCU9QVF9CT09MRUFOKCd6JywgIm51bGwiLCAmb3B0Lm51bGxfZm9sbG93aW5nX25hbWUsCisJCQkicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIpLAorCQlPUFRfQk9PTEVBTignYycsICJjb3VudCIsICZvcHQuY291bnQsCisJCQkic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIpLAorCQlPUFRfU0VUX0lOVCgwLCAiY29sb3IiLCAmb3B0LmNvbG9yLCAiaGlnaGxpZ2h0IG1hdGNoZXMiLCAxKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0NBTExCQUNLKCdDJywgTlVMTCwgJm9wdCwgIm4iLAorCQkJInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIiwKKwkJCWNvbnRleHRfY2FsbGJhY2spLAorCQlPUFRfSU5URUdFUignQicsIE5VTEwsICZvcHQucHJlX2NvbnRleHQsCisJCQkic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIpLAorCQlPUFRfSU5URUdFUignQScsIE5VTEwsICZvcHQucG9zdF9jb250ZXh0LAorCQkJInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIpLAorCQlPUFRfTlVNQkVSX0NBTExCQUNLKCZvcHQsICJzaG9ydGN1dCBmb3IgLUMgTlVNIiwKKwkJCWNvbnRleHRfY2FsbGJhY2spLAorCQlPUFRfQk9PTEVBTigncCcsICJzaG93LWZ1bmN0aW9uIiwgJm9wdC5mdW5jbmFtZSwKKwkJCSJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIiksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9DQUxMQkFDSygnZicsIE5VTEwsICZvcHQsICJmaWxlIiwKKwkJCSJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIsIGZpbGVfY2FsbGJhY2spLAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ2UnLCBOVUxMLCAmb3B0LCAicGF0dGVybiIsCisJCQkibWF0Y2ggPHBhdHRlcm4+IiwgUEFSU0VfT1BUX05PTkVHLCBwYXR0ZXJuX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiYW5kIiwgJm9wdCwgTlVMTCwKKwkJICAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIsCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBhbmRfY2FsbGJhY2sgfSwKKwkJT1BUX0JPT0xFQU4oMCwgIm9yIiwgJmR1bW15LCAiIiksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAibm90IiwgJm9wdCwgTlVMTCwgIiIsCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBub3RfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICcoJywgTlVMTCwgJm9wdCwgTlVMTCwgIiIsCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PREFTSCwKKwkJICBvcGVuX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnKScsIE5VTEwsICZvcHQsIE5VTEwsICIiLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9OT0RBU0gsCisJCSAgY2xvc2VfY2FsbGJhY2sgfSwKKwkJT1BUX0JPT0xFQU4oMCwgImFsbC1tYXRjaCIsICZvcHQuYWxsX21hdGNoLAorCQkJInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiKSwKKwkJT1BUX0dST1VQKCIiKSwKKyNpZiBOT19FWFRFUk5BTF9HUkVQCisJCU9QVF9CT09MRUFOKDAsICJleHQtZ3JlcCIsICZleHRlcm5hbF9ncmVwX2FsbG93ZWQsCisJCQkiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIiksCisjZWxzZQorCQlPUFRfQk9PTEVBTigwLCAiZXh0LWdyZXAiLCAmZXh0ZXJuYWxfZ3JlcF9hbGxvd2VkLAorCQkJImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoZGVmYXVsdCkiKSwKKyNlbmRpZgorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImhlbHAtYWxsIiwgJm9wdGlvbnMsIE5VTEwsICJzaG93IHVzYWdlIiwKKwkJICBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PQVJHLCBoZWxwX2NhbGxiYWNrIH0sCisJCU9QVF9FTkQoKQorCX07CiAKIAltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCW9wdC5wcmVmaXggPSBwcmVmaXg7CiAJb3B0LnByZWZpeF9sZW5ndGggPSAocHJlZml4ICYmICpwcmVmaXgpID8gc3RybGVuKHByZWZpeCkgOiAwOwogCW9wdC5yZWxhdGl2ZSA9IDE7CiAJb3B0LnBhdGhuYW1lID0gMTsKQEAgLTYwMywyMjcgKzc3NywyMSBAQAogCSAqIHVucmVjb2duaXplZCBub24gb3B0aW9uIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlZnMgbGlzdAogCSAqIHRoYXQgY29udGludWVzIHVwIHRvIHRoZSAtLSAoaWYgZXhpc3RzKSwgYW5kIHRoZW4gcGF0aHMuCiAJICovCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBncmVwX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCB8CisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04gfAorCQkJICAgICBQQVJTRV9PUFRfTk9fSU5URVJOQUxfSEVMUCk7CiAKLQl3aGlsZSAoMSA8IGFyZ2MpIHsKLQkJY29uc3QgY2hhciAqYXJnID0gYXJndlsxXTsKLQkJYXJnYy0tOyBhcmd2Kys7Ci0JCWlmICghc3RyY21wKCItLWNhY2hlZCIsIGFyZykpIHsKLQkJCWNhY2hlZCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLS1uby1leHQtZ3JlcCIsIGFyZykpIHsKLQkJCWJ1aWx0aW5fZ3JlcCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLWEiLCBhcmcpIHx8Ci0JCSAgICAhc3RyY21wKCItLXRleHQiLCBhcmcpKSB7Ci0JCQlvcHQuYmluYXJ5ID0gR1JFUF9CSU5BUllfVEVYVDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItaSIsIGFyZykgfHwKLQkJICAgICFzdHJjbXAoIi0taWdub3JlLWNhc2UiLCBhcmcpKSB7Ci0JCQlvcHQucmVnZmxhZ3MgfD0gUkVHX0lDQVNFOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1JIiwgYXJnKSkgewotCQkJb3B0LmJpbmFyeSA9IEdSRVBfQklOQVJZX05PTUFUQ0g7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLXYiLCBhcmcpIHx8Ci0JCSAgICAhc3RyY21wKCItLWludmVydC1tYXRjaCIsIGFyZykpIHsKLQkJCW9wdC5pbnZlcnQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1FIiwgYXJnKSB8fAotCQkgICAgIXN0cmNtcCgiLS1leHRlbmRlZC1yZWdleHAiLCBhcmcpKSB7Ci0JCQlvcHQucmVnZmxhZ3MgfD0gUkVHX0VYVEVOREVEOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1GIiwgYXJnKSB8fAotCQkgICAgIXN0cmNtcCgiLS1maXhlZC1zdHJpbmdzIiwgYXJnKSkgewotCQkJb3B0LmZpeGVkID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItRyIsIGFyZykgfHwKLQkJICAgICFzdHJjbXAoIi0tYmFzaWMtcmVnZXhwIiwgYXJnKSkgewotCQkJb3B0LnJlZ2ZsYWdzICY9IH5SRUdfRVhURU5ERUQ7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLW4iLCBhcmcpKSB7Ci0JCQlvcHQubGluZW51bSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLWgiLCBhcmcpKSB7Ci0JCQlvcHQucGF0aG5hbWUgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1IIiwgYXJnKSkgewotCQkJb3B0LnBhdGhuYW1lID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItbCIsIGFyZykgfHwKLQkJICAgICFzdHJjbXAoIi0tbmFtZS1vbmx5IiwgYXJnKSB8fAotCQkgICAgIXN0cmNtcCgiLS1maWxlcy13aXRoLW1hdGNoZXMiLCBhcmcpKSB7Ci0JCQlvcHQubmFtZV9vbmx5ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItTCIsIGFyZykgfHwKLQkJICAgICFzdHJjbXAoIi0tZmlsZXMtd2l0aG91dC1tYXRjaCIsIGFyZykpIHsKLQkJCW9wdC51bm1hdGNoX25hbWVfb25seSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLXoiLCBhcmcpIHx8Ci0JCSAgICAhc3RyY21wKCItLW51bGwiLCBhcmcpKSB7Ci0JCQlvcHQubnVsbF9mb2xsb3dpbmdfbmFtZSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLWMiLCBhcmcpIHx8Ci0JCSAgICAhc3RyY21wKCItLWNvdW50IiwgYXJnKSkgewotCQkJb3B0LmNvdW50ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItdyIsIGFyZykgfHwKLQkJICAgICFzdHJjbXAoIi0td29yZC1yZWdleHAiLCBhcmcpKSB7Ci0JCQlvcHQud29yZF9yZWdleHAgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLUEiKSB8fAotCQkgICAgIXByZWZpeGNtcChhcmcsICItQiIpIHx8Ci0JCSAgICAhcHJlZml4Y21wKGFyZywgIi1DIikgfHwKLQkJICAgIChhcmdbMF0gPT0gJy0nICYmICcxJyA8PSBhcmdbMV0gJiYgYXJnWzFdIDw9ICc5JykpIHsKLQkJCXVuc2lnbmVkIG51bTsKLQkJCWNvbnN0IGNoYXIgKnNjYW47Ci0JCQlzd2l0Y2ggKGFyZ1sxXSkgewotCQkJY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzoKLQkJCQlpZiAoIWFyZ1syXSkgewotCQkJCQlpZiAoYXJnYyA8PSAxKQotCQkJCQkJZGllKGVtc2dfbWlzc2luZ19jb250ZXh0X2xlbik7Ci0JCQkJCXNjYW4gPSAqKythcmd2OwotCQkJCQlhcmdjLS07Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQkJc2NhbiA9IGFyZyArIDI7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXNjYW4gPSBhcmcgKyAxOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKHN0cnRvdWxfdWkoc2NhbiwgMTAsICZudW0pKQotCQkJCWRpZShlbXNnX2ludmFsaWRfY29udGV4dF9sZW4sIHNjYW4pOwotCQkJc3dpdGNoIChhcmdbMV0pIHsKLQkJCWNhc2UgJ0EnOgotCQkJCW9wdC5wb3N0X2NvbnRleHQgPSBudW07Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJY2FzZSAnQyc6Ci0JCQkJb3B0LnBvc3RfY29udGV4dCA9IG51bTsKLQkJCWNhc2UgJ0InOgotCQkJCW9wdC5wcmVfY29udGV4dCA9IG51bTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItZiIsIGFyZykpIHsKLQkJCUZJTEUgKnBhdHRlcm5zOwotCQkJaW50IGxubyA9IDA7Ci0JCQljaGFyIGJ1ZlsxMDI0XTsKLQkJCWlmIChhcmdjIDw9IDEpCi0JCQkJZGllKGVtc2dfbWlzc2luZ19hcmd1bWVudCwgYXJnKTsKLQkJCXBhdHRlcm5zID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLQkJCWlmICghcGF0dGVybnMpCi0JCQkJZGllKCInJXMnOiAlcyIsIGFyZ3ZbMV0sIHN0cmVycm9yKGVycm5vKSk7Ci0JCQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgcGF0dGVybnMpKSB7Ci0JCQkJaW50IGxlbiA9IHN0cmxlbihidWYpOwotCQkJCWlmIChsZW4gJiYgYnVmW2xlbi0xXSA9PSAnXG4nKQotCQkJCQlidWZbbGVuLTFdID0gMDsKLQkJCQkvKiBpZ25vcmUgZW1wdHkgbGluZSBsaWtlIGdyZXAgZG9lcyAqLwotCQkJCWlmICghYnVmWzBdKQotCQkJCQljb250aW51ZTsKLQkJCQlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZvcHQsIHhzdHJkdXAoYnVmKSwKLQkJCQkJCSAgICBhcmd2WzFdLCArK2xubywKLQkJCQkJCSAgICBHUkVQX1BBVFRFUk4pOwotCQkJfQotCQkJZmNsb3NlKHBhdHRlcm5zKTsKLQkJCWFyZ3YrKzsKLQkJCWFyZ2MtLTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItLW5vdCIsIGFyZykpIHsKLQkJCWFwcGVuZF9ncmVwX3BhdHRlcm4oJm9wdCwgYXJnLCAiY29tbWFuZCBsaW5lIiwgMCwKLQkJCQkJICAgIEdSRVBfTk9UKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItLWFuZCIsIGFyZykpIHsKLQkJCWFwcGVuZF9ncmVwX3BhdHRlcm4oJm9wdCwgYXJnLCAiY29tbWFuZCBsaW5lIiwgMCwKLQkJCQkJICAgIEdSRVBfQU5EKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItLW9yIiwgYXJnKSkKLQkJCWNvbnRpbnVlOyAvKiBuby1vcCAqLwotCQlpZiAoIXN0cmNtcCgiKCIsIGFyZykpIHsKLQkJCWFwcGVuZF9ncmVwX3BhdHRlcm4oJm9wdCwgYXJnLCAiY29tbWFuZCBsaW5lIiwgMCwKLQkJCQkJICAgIEdSRVBfT1BFTl9QQVJFTik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiKSIsIGFyZykpIHsKLQkJCWFwcGVuZF9ncmVwX3BhdHRlcm4oJm9wdCwgYXJnLCAiY29tbWFuZCBsaW5lIiwgMCwKLQkJCQkJICAgIEdSRVBfQ0xPU0VfUEFSRU4pOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi0tYWxsLW1hdGNoIiwgYXJnKSkgewotCQkJb3B0LmFsbF9tYXRjaCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLWUiLCBhcmcpKSB7Ci0JCQlpZiAoMSA8IGFyZ2MpIHsKLQkJCQlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZvcHQsIGFyZ3ZbMV0sCi0JCQkJCQkgICAgIi1lIG9wdGlvbiIsIDAsCi0JCQkJCQkgICAgR1JFUF9QQVRURVJOKTsKLQkJCQlhcmd2Kys7Ci0JCQkJYXJnYy0tOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJZGllKGVtc2dfbWlzc2luZ19hcmd1bWVudCwgYXJnKTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLS1mdWxsLW5hbWUiLCBhcmcpKSB7Ci0JCQlvcHQucmVsYXRpdmUgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi0tY29sb3IiLCBhcmcpKSB7Ci0JCQlvcHQuY29sb3IgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi0tbm8tY29sb3IiLCBhcmcpKSB7Ci0JCQlvcHQuY29sb3IgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi0tIiwgYXJnKSkgewotCQkJLyogbGF0ZXIgcHJvY2Vzc2luZyB3YW50cyB0byBoYXZlIHRoaXMgYXQgYXJndlsxXSAqLwotCQkJYXJndi0tOwotCQkJYXJnYysrOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCphcmcgPT0gJy0nKQotCQkJdXNhZ2UoYnVpbHRpbl9ncmVwX3VzYWdlKTsKLQotCQkvKiBGaXJzdCB1bnJlY29nbml6ZWQgbm9uLW9wdGlvbiB0b2tlbiAqLwotCQlpZiAoIW9wdC5wYXR0ZXJuX2xpc3QpIHsKLQkJCWFwcGVuZF9ncmVwX3BhdHRlcm4oJm9wdCwgYXJnLCAiY29tbWFuZCBsaW5lIiwgMCwKLQkJCQkJICAgIEdSRVBfUEFUVEVSTik7Ci0JCQlicmVhazsKLQkJfQotCQllbHNlIHsKLQkJCS8qIFdlIGFyZSBsb29raW5nIGF0IHRoZSBmaXJzdCBwYXRoIG9yIHJldjsKLQkJCSAqIGl0IGlzIGZvdW5kIGF0IGFyZ3ZbMV0gYWZ0ZXIgbGVhdmluZyB0aGUKLQkJCSAqIGxvb3AuCi0JCQkgKi8KLQkJCWFyZ2MrKzsgYXJndi0tOwotCQkJYnJlYWs7Ci0JCX0KKwkvKiBGaXJzdCB1bnJlY29nbml6ZWQgbm9uLW9wdGlvbiB0b2tlbiAqLworCWlmIChhcmdjID4gMCAmJiAhb3B0LnBhdHRlcm5fbGlzdCkgeworCQlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZvcHQsIGFyZ3ZbMF0sICJjb21tYW5kIGxpbmUiLCAwLAorCQkJCSAgICBHUkVQX1BBVFRFUk4pOworCQlhcmd2Kys7CisJCWFyZ2MtLTsKIAl9CiAKLQlpZiAob3B0LmNvbG9yICYmICFvcHQuY29sb3JfZXh0ZXJuYWwpCi0JCWJ1aWx0aW5fZ3JlcCA9IDE7CisJaWYgKChvcHQuY29sb3IgJiYgIW9wdC5jb2xvcl9leHRlcm5hbCkgfHwgb3B0LmZ1bmNuYW1lKQorCQlleHRlcm5hbF9ncmVwX2FsbG93ZWQgPSAwOwogCWlmICghb3B0LnBhdHRlcm5fbGlzdCkKIAkJZGllKCJubyBwYXR0ZXJuIGdpdmVuLiIpOwogCWlmICgob3B0LnJlZ2ZsYWdzICE9IFJFR19ORVdMSU5FKSAmJiBvcHQuZml4ZWQpCkBAIC04MzEsNyArNzk5LDcgQEAKIAljb21waWxlX2dyZXBfcGF0dGVybnMoJm9wdCk7CiAKIAkvKiBDaGVjayByZXZzIGFuZCB0aGVuIHBhdGhzICovCi0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKIAkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAkJLyogSXMgaXQgYSByZXY/ICovCkBAIC04NTYsMTUgKzgyNCw4IEBACiAJCQl2ZXJpZnlfZmlsZW5hbWUocHJlZml4LCBhcmd2W2pdKTsKIAl9CiAKLQlpZiAoaSA8IGFyZ2MpIHsKKwlpZiAoaSA8IGFyZ2MpCiAJCXBhdGhzID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndiArIGkpOwotCQlpZiAob3B0LnByZWZpeF9sZW5ndGggJiYgb3B0LnJlbGF0aXZlKSB7Ci0JCQkvKiBNYWtlIHN1cmUgd2UgZG8gbm90IGdldCBvdXRzaWRlIG9mIHBhdGhzICovCi0JCQlmb3IgKGkgPSAwOyBwYXRoc1tpXTsgaSsrKQotCQkJCWlmIChzdHJuY21wKHByZWZpeCwgcGF0aHNbaV0sIG9wdC5wcmVmaXhfbGVuZ3RoKSkKLQkJCQkJZGllKCJnaXQgZ3JlcDogY2Fubm90IGdlbmVyYXRlIHJlbGF0aXZlIGZpbGVuYW1lcyBjb250YWluaW5nICcuLiciKTsKLQkJfQotCX0KIAllbHNlIGlmIChwcmVmaXgpIHsKIAkJcGF0aHMgPSB4Y2FsbG9jKDIsIHNpemVvZihjb25zdCBjaGFyICopKTsKIAkJcGF0aHNbMF0gPSBwcmVmaXg7CkBAIC04NzQsNyArODM1LDcgQEAKIAlpZiAoIWxpc3QubnIpIHsKIAkJaWYgKCFjYWNoZWQpCiAJCQlzZXR1cF93b3JrX3RyZWUoKTsKLQkJcmV0dXJuICFncmVwX2NhY2hlKCZvcHQsIHBhdGhzLCBjYWNoZWQpOworCQlyZXR1cm4gIWdyZXBfY2FjaGUoJm9wdCwgcGF0aHMsIGNhY2hlZCwgZXh0ZXJuYWxfZ3JlcF9hbGxvd2VkKTsKIAl9CiAKIAlpZiAoY2FjaGVkKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1oZWxwLmMgYi9idWlsdGluLWhlbHAuYwppbmRleCA2N2RkYTNlLi5lMWViYTc3IDEwMDY0NAotLS0gYS9idWlsdGluLWhlbHAuYworKysgYi9idWlsdGluLWhlbHAuYwpAQCAtODAsMTAgKzgwLDkgQEAKIAllY19wcm9jZXNzLmFyZ3YgPSBhcmd2X2VjOwogCWVjX3Byb2Nlc3MuZXJyID0gLTE7CiAJZWNfcHJvY2Vzcy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKLQlpZiAoc3RhcnRfY29tbWFuZCgmZWNfcHJvY2VzcykpIHsKLQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KKwlpZiAoc3RhcnRfY29tbWFuZCgmZWNfcHJvY2VzcykpCisJCXJldHVybiBlcnJvcigiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIpOworCiAJc3RyYnVmX3JlYWQoJmJ1ZmZlciwgZWNfcHJvY2Vzcy5lcnIsIDIwKTsKIAljbG9zZShlY19wcm9jZXNzLmVycik7CiAKQEAgLTk0LDIwICs5MywxNyBAQAogCWZpbmlzaF9jb21tYW5kKCZlY19wcm9jZXNzKTsKIAogCWlmIChwcmVmaXhjbXAoYnVmZmVyLmJ1ZiwgImVtYWNzY2xpZW50IikpIHsKLQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi5cbiIpOwogCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gZXJyb3IoIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIpOwogCX0KIAogCXN0cmJ1Zl9yZW1vdmUoJmJ1ZmZlciwgMCwgc3RybGVuKCJlbWFjc2NsaWVudCIpKTsKIAl2ZXJzaW9uID0gYXRvaShidWZmZXIuYnVmKTsKIAogCWlmICh2ZXJzaW9uIDwgMjIpIHsKLQkJZnByaW50ZihzdGRlcnIsCi0JCQkiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLlxuIiwKLQkJCXZlcnNpb24pOwogCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gZXJyb3IoImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iLAorCQkJdmVyc2lvbik7CiAJfQogCiAJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CkBAIC0zOTgsNyArMzk0LDcgQEAKICAqIEhUTUwuCiAgKi8KICNpZm5kZWYgb3Blbl9odG1sCi12b2lkIG9wZW5faHRtbChjb25zdCBjaGFyICpwYXRoKQorc3RhdGljIHZvaWQgb3Blbl9odG1sKGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJZXhlY2xfZ2l0X2NtZCgid2ViLS1icm93c2UiLCAiLWMiLCAiaGVscC5icm93c2VyIiwgcGF0aCwgTlVMTCk7CiB9CkBAIC00MjMsNyArNDE5LDcgQEAKIAlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKIAlnaXRfY29uZmlnKGdpdF9oZWxwX2NvbmZpZywgTlVMTCk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX2hlbHBfb3B0aW9ucywKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5faGVscF9vcHRpb25zLAogCQkJYnVpbHRpbl9oZWxwX3VzYWdlLCAwKTsKIAogCWlmIChzaG93X2FsbCkgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1pbml0LWRiLmMgYi9idWlsdGluLWluaXQtZGIuYwppbmRleCBkMWZhMTJhLi40YTU2MDA2IDEwMDY0NAotLS0gYS9idWlsdGluLWluaXQtZGIuYworKysgYi9idWlsdGluLWluaXQtZGIuYwpAQCAtNjEsMjAgKzYxLDIwIEBACiAJCW1lbWNweSh0ZW1wbGF0ZSArIHRlbXBsYXRlX2Jhc2VsZW4sIGRlLT5kX25hbWUsIG5hbWVsZW4rMSk7CiAJCWlmIChsc3RhdChwYXRoLCAmc3RfZ2l0KSkgewogCQkJaWYgKGVycm5vICE9IEVOT0VOVCkKLQkJCQlkaWUoImNhbm5vdCBzdGF0ICVzIiwgcGF0aCk7CisJCQkJZGllX2Vycm5vKCJjYW5ub3Qgc3RhdCAnJXMnIiwgcGF0aCk7CiAJCX0KIAkJZWxzZQogCQkJZXhpc3RzID0gMTsKIAogCQlpZiAobHN0YXQodGVtcGxhdGUsICZzdF90ZW1wbGF0ZSkpCi0JCQlkaWUoImNhbm5vdCBzdGF0IHRlbXBsYXRlICVzIiwgdGVtcGxhdGUpOworCQkJZGllX2Vycm5vKCJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIiwgdGVtcGxhdGUpOwogCiAJCWlmIChTX0lTRElSKHN0X3RlbXBsYXRlLnN0X21vZGUpKSB7CiAJCQlESVIgKnN1YmRpciA9IG9wZW5kaXIodGVtcGxhdGUpOwogCQkJaW50IGJhc2VsZW5fc3ViID0gYmFzZWxlbiArIG5hbWVsZW47CiAJCQlpbnQgdGVtcGxhdGVfYmFzZWxlbl9zdWIgPSB0ZW1wbGF0ZV9iYXNlbGVuICsgbmFtZWxlbjsKIAkJCWlmICghc3ViZGlyKQotCQkJCWRpZSgiY2Fubm90IG9wZW5kaXIgJXMiLCB0ZW1wbGF0ZSk7CisJCQkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbmRpciAnJXMnIiwgdGVtcGxhdGUpOwogCQkJcGF0aFtiYXNlbGVuX3N1YisrXSA9CiAJCQkJdGVtcGxhdGVbdGVtcGxhdGVfYmFzZWxlbl9zdWIrK10gPSAnLyc7CiAJCQlwYXRoW2Jhc2VsZW5fc3ViXSA9CkBAIC05MSwxNiArOTEsMTcgQEAKIAkJCWludCBsZW47CiAJCQlsZW4gPSByZWFkbGluayh0ZW1wbGF0ZSwgbG5rLCBzaXplb2YobG5rKSk7CiAJCQlpZiAobGVuIDwgMCkKLQkJCQlkaWUoImNhbm5vdCByZWFkbGluayAlcyIsIHRlbXBsYXRlKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCByZWFkbGluayAnJXMnIiwgdGVtcGxhdGUpOwogCQkJaWYgKHNpemVvZihsbmspIDw9IGxlbikKIAkJCQlkaWUoImluc2FuZWx5IGxvbmcgc3ltbGluayAlcyIsIHRlbXBsYXRlKTsKIAkJCWxua1tsZW5dID0gMDsKIAkJCWlmIChzeW1saW5rKGxuaywgcGF0aCkpCi0JCQkJZGllKCJjYW5ub3Qgc3ltbGluayAlcyAlcyIsIGxuaywgcGF0aCk7CisJCQkJZGllX2Vycm5vKCJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciLCBsbmssIHBhdGgpOwogCQl9CiAJCWVsc2UgaWYgKFNfSVNSRUcoc3RfdGVtcGxhdGUuc3RfbW9kZSkpIHsKIAkJCWlmIChjb3B5X2ZpbGUocGF0aCwgdGVtcGxhdGUsIHN0X3RlbXBsYXRlLnN0X21vZGUpKQotCQkJCWRpZSgiY2Fubm90IGNvcHkgJXMgdG8gJXMiLCB0ZW1wbGF0ZSwgcGF0aCk7CisJCQkJZGllX2Vycm5vKCJjYW5ub3QgY29weSAnJXMnIHRvICclcyciLCB0ZW1wbGF0ZSwKKwkJCQkJICBwYXRoKTsKIAkJfQogCQllbHNlCiAJCQllcnJvcigiaWdub3JpbmcgdGVtcGxhdGUgJXMiLCB0ZW1wbGF0ZSk7CkBAIC0zNTAsNyArMzUxLDcgQEAKIAlpZiAoIXN0cmNtcCgiLiIsIGdpdF9kaXIpKQogCQlyZXR1cm4gMTsKIAlpZiAoIWdldGN3ZChjd2QsIHNpemVvZihjd2QpKSkKLQkJZGllKCJjYW5ub3QgdGVsbCBjd2QiKTsKKwkJZGllX2Vycm5vKCJjYW5ub3QgdGVsbCBjd2QiKTsKIAlpZiAoIXN0cmNtcChnaXRfZGlyLCBjd2QpKQogCQlyZXR1cm4gMTsKIAkvKgpAQCAtNDQwLDExICs0NDEsMTEgQEAKIAkJaWYgKCFnaXRfd29ya190cmVlX2NmZykgewogCQkJZ2l0X3dvcmtfdHJlZV9jZmcgPSB4Y2FsbG9jKFBBVEhfTUFYLCAxKTsKIAkJCWlmICghZ2V0Y3dkKGdpdF93b3JrX3RyZWVfY2ZnLCBQQVRIX01BWCkpCi0JCQkJZGllICgiQ2Fubm90IGFjY2VzcyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiIpOworCQkJCWRpZV9lcnJubyAoIkNhbm5vdCBhY2Nlc3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOwogCQl9CiAJCWlmIChhY2Nlc3MoZ2V0X2dpdF93b3JrX3RyZWUoKSwgWF9PSykpCi0JCQlkaWUgKCJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIiwKLQkJCSAgICAgZ2V0X2dpdF93b3JrX3RyZWUoKSk7CisJCQlkaWVfZXJybm8gKCJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIiwKKwkJCQkgICBnZXRfZ2l0X3dvcmtfdHJlZSgpKTsKIAl9CiAKIAlzZXRfZ2l0X2RpcihtYWtlX2Fic29sdXRlX3BhdGgoZ2l0X2RpcikpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1sb2cuYyBiL2J1aWx0aW4tbG9nLmMKaW5kZXggZjEwY2ZlYi4uOGQ5M2MxYSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1sb2cuYworKysgYi9idWlsdGluLWxvZy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAic2hvcnRsb2cuaCIKICNpbmNsdWRlICJyZW1vdGUuaCIKICNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAogLyogU2V0IGEgZGVmYXVsdCBkYXRlLXRpbWUgZm9ybWF0IGZvciBnaXQgbG9nICgibG9nLmRhdGUiIGNvbmZpZyB2YXJpYWJsZSkgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X2RhdGVfbW9kZSA9IE5VTEw7CkBAIC0zMCw2ICszMSw3IEBACiAJCSAgICAgIHN0cnVjdCByZXZfaW5mbyAqcmV2KQogewogCWludCBpOworCWludCBkZWNvcmF0aW9uX3N0eWxlID0gMDsKIAogCXJldi0+YWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CiAJcmV2LT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfREVGQVVMVDsKQEAgLTU2LDEzICs1OCwyNCBAQAogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKIAkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kZWNvcmF0ZSIpKSB7Ci0JCQlsb2FkX3JlZl9kZWNvcmF0aW9ucygpOwotCQkJcmV2LT5zaG93X2RlY29yYXRpb25zID0gMTsKKwkJCWRlY29yYXRpb25fc3R5bGUgPSBERUNPUkFURV9TSE9SVF9SRUZTOworCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1kZWNvcmF0ZT0iKSkgeworCQkJY29uc3QgY2hhciAqdiA9IHNraXBfcHJlZml4KGFyZywgIi0tZGVjb3JhdGU9Iik7CisJCQlpZiAoIXN0cmNtcCh2LCAiZnVsbCIpKQorCQkJCWRlY29yYXRpb25fc3R5bGUgPSBERUNPUkFURV9GVUxMX1JFRlM7CisJCQllbHNlIGlmICghc3RyY21wKHYsICJzaG9ydCIpKQorCQkJCWRlY29yYXRpb25fc3R5bGUgPSBERUNPUkFURV9TSE9SVF9SRUZTOworCQkJZWxzZQorCQkJCWRpZSgiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiLCBhcmcpOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zb3VyY2UiKSkgewogCQkJcmV2LT5zaG93X3NvdXJjZSA9IDE7CiAJCX0gZWxzZQogCQkJZGllKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiwgYXJnKTsKIAl9CisJaWYgKGRlY29yYXRpb25fc3R5bGUpIHsKKwkJcmV2LT5zaG93X2RlY29yYXRpb25zID0gMTsKKwkJbG9hZF9yZWZfZGVjb3JhdGlvbnMoZGVjb3JhdGlvbl9zdHlsZSk7CisJfQogfQogCiAvKgpAQCAtOTMsNyArMTA2LDcgQEAKIAlwcmludGYoIkZpbmFsIG91dHB1dDogJWQgJXNcbiIsIG5yLCBzdGFnZSk7CiB9CiAKLXN0cnVjdCBpdGltZXJ2YWwgZWFybHlfb3V0cHV0X3RpbWVyOworc3RhdGljIHN0cnVjdCBpdGltZXJ2YWwgZWFybHlfb3V0cHV0X3RpbWVyOwogCiBzdGF0aWMgdm9pZCBsb2dfc2hvd19lYXJseShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKIHsKQEAgLTI1Niw3ICsyNjksNyBAQAogCXBwX3VzZXJfaW5mbygiVGFnZ2VyIiwgcmV2LT5jb21taXRfZm9ybWF0LCAmb3V0LCBidWYsIHJldi0+ZGF0ZV9tb2RlLAogCQlnaXRfbG9nX291dHB1dF9lbmNvZGluZyA/CiAJCWdpdF9sb2dfb3V0cHV0X2VuY29kaW5nOiBnaXRfY29tbWl0X2VuY29kaW5nKTsKLQlwcmludGYoIiVzXG4iLCBvdXQuYnVmKTsKKwlwcmludGYoIiVzIiwgb3V0LmJ1Zik7CiAJc3RyYnVmX3JlbGVhc2UoJm91dCk7CiB9CiAKQEAgLTMyOCwxMSArMzQxLDE0IEBACiAJCWNhc2UgT0JKX1RBRzogewogCQkJc3RydWN0IHRhZyAqdCA9IChzdHJ1Y3QgdGFnICopbzsKIAorCQkJaWYgKHJldi5zaG93bl9vbmUpCisJCQkJcHV0Y2hhcignXG4nKTsKIAkJCXByaW50ZigiJXN0YWcgJXMlc1xuIiwKIAkJCQkJZGlmZl9nZXRfY29sb3Jfb3B0KCZyZXYuZGlmZm9wdCwgRElGRl9DT01NSVQpLAogCQkJCQl0LT50YWcsCiAJCQkJCWRpZmZfZ2V0X2NvbG9yX29wdCgmcmV2LmRpZmZvcHQsIERJRkZfUkVTRVQpKTsKIAkJCXJldCA9IHNob3dfb2JqZWN0KG8tPnNoYTEsIDEsICZyZXYpOworCQkJcmV2LnNob3duX29uZSA9IDE7CiAJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCQkJbyA9IHBhcnNlX29iamVjdCh0LT50YWdnZWQtPnNoYTEpOwpAQCAtMzQ0LDEyICszNjAsMTUgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgT0JKX1RSRUU6CisJCQlpZiAocmV2LnNob3duX29uZSkKKwkJCQlwdXRjaGFyKCdcbicpOwogCQkJcHJpbnRmKCIlc3RyZWUgJXMlc1xuXG4iLAogCQkJCQlkaWZmX2dldF9jb2xvcl9vcHQoJnJldi5kaWZmb3B0LCBESUZGX0NPTU1JVCksCiAJCQkJCW5hbWUsCiAJCQkJCWRpZmZfZ2V0X2NvbG9yX29wdCgmcmV2LmRpZmZvcHQsIERJRkZfUkVTRVQpKTsKIAkJCXJlYWRfdHJlZV9yZWN1cnNpdmUoKHN0cnVjdCB0cmVlICopbywgIiIsIDAsIDAsIE5VTEwsCiAJCQkJCXNob3dfdHJlZV9vYmplY3QsIE5VTEwpOworCQkJcmV2LnNob3duX29uZSA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBPQkpfQ09NTUlUOgogCQkJcmV2LnBlbmRpbmcubnIgPSByZXYucGVuZGluZy5hbGxvYyA9IDA7CkBAIC02MTksNyArNjM4LDcgQEAKIAlzdHJ1Y3Qgc2hvcnRsb2cgbG9nOwogCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKIAlpbnQgaTsKLQljb25zdCBjaGFyICplbmNvZGluZyA9ICJ1dGYtOCI7CisJY29uc3QgY2hhciAqZW5jb2RpbmcgPSAiVVRGLTgiOwogCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKIAlpbnQgbmVlZF84Yml0X2N0ZSA9IDA7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gTlVMTDsKQEAgLTY1Nyw2ICs2NzYsMTAgQEAKIAlsb2dfd3JpdGVfZW1haWxfaGVhZGVycyhyZXYsIGhlYWQsICZzdWJqZWN0X3N0YXJ0LCAmZXh0cmFfaGVhZGVycywKIAkJCQkmbmVlZF84Yml0X2N0ZSk7CiAKKwlmb3IgKGkgPSAwOyAhbmVlZF84Yml0X2N0ZSAmJiBpIDwgbnI7IGkrKykKKwkJaWYgKGhhc19ub25fYXNjaWkobGlzdFtpXS0+YnVmZmVyKSkKKwkJCW5lZWRfOGJpdF9jdGUgPSAxOworCiAJbXNnID0gYm9keTsKIAlwcF91c2VyX2luZm8oTlVMTCwgQ01JVF9GTVRfRU1BSUwsICZzYiwgY29tbWl0dGVyLCBEQVRFX1JGQzI4MjIsCiAJCSAgICAgZW5jb2RpbmcpOwpAQCAtNzQwLDI3ICs3NjMsMTc5IEBACiAJCQkJICAgICAgIG91dHB1dF9kaXJlY3RvcnkpKTsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2Zvcm1hdF9wYXRjaF91c2FnZVtdID0geworCSJnaXQgZm9ybWF0LXBhdGNoIFtvcHRpb25zXSBbPHNpbmNlPiB8IDxyZXZpc2lvbiByYW5nZT5dIiwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGtlZXBfc3ViamVjdCA9IDA7CisKK3N0YXRpYyBpbnQga2VlcF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCSgoc3RydWN0IHJldl9pbmZvICopb3B0LT52YWx1ZSktPnRvdGFsID0gLTE7CisJa2VlcF9zdWJqZWN0ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJqZWN0X3ByZWZpeCA9IDA7CisKK3N0YXRpYyBpbnQgc3ViamVjdF9wcmVmaXhfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgaW50IHVuc2V0KQoreworCXN1YmplY3RfcHJlZml4ID0gMTsKKwkoKHN0cnVjdCByZXZfaW5mbyAqKW9wdC0+dmFsdWUpLT5zdWJqZWN0X3ByZWZpeCA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudW1iZXJlZF9jbWRsaW5lX29wdCA9IDA7CisKK3N0YXRpYyBpbnQgbnVtYmVyZWRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgIGludCB1bnNldCkKK3sKKwkqKGludCAqKW9wdC0+dmFsdWUgPSBudW1iZXJlZF9jbWRsaW5lX29wdCA9IHVuc2V0ID8gMCA6IDE7CisJaWYgKHVuc2V0KQorCQlhdXRvX251bWJlciA9ICAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vX251bWJlcmVkX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCWludCB1bnNldCkKK3sKKwlyZXR1cm4gbnVtYmVyZWRfY2FsbGJhY2sob3B0LCBhcmcsIDEpOworfQorCitzdGF0aWMgaW50IG91dHB1dF9kaXJlY3RvcnlfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgICBpbnQgdW5zZXQpCit7CisJY29uc3QgY2hhciAqKmRpciA9IChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWU7CisJaWYgKCpkaXIpCisJCWRpZSgiVHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iKTsKKwkqZGlyID0gYXJnOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRocmVhZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqdGhyZWFkID0gKGludCAqKW9wdC0+dmFsdWU7CisJaWYgKHVuc2V0KQorCQkqdGhyZWFkID0gMDsKKwllbHNlIGlmICghYXJnIHx8ICFzdHJjbXAoYXJnLCAic2hhbGxvdyIpKQorCQkqdGhyZWFkID0gVEhSRUFEX1NIQUxMT1c7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkZWVwIikpCisJCSp0aHJlYWQgPSBUSFJFQURfREVFUDsKKwllbHNlCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0dGFjaF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCByZXZfaW5mbyAqcmV2ID0gKHN0cnVjdCByZXZfaW5mbyAqKW9wdC0+dmFsdWU7CisJaWYgKHVuc2V0KQorCQlyZXYtPm1pbWVfYm91bmRhcnkgPSBOVUxMOworCWVsc2UgaWYgKGFyZykKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gYXJnOworCWVsc2UKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gZ2l0X3ZlcnNpb25fc3RyaW5nOworCXJldi0+bm9faW5saW5lID0gdW5zZXQgPyAwIDogMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbmxpbmVfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldiA9IChzdHJ1Y3QgcmV2X2luZm8gKilvcHQtPnZhbHVlOworCWlmICh1bnNldCkKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gTlVMTDsKKwllbHNlIGlmIChhcmcpCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IGFyZzsKKwllbHNlCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKKwlyZXYtPm5vX2lubGluZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGVhZGVyX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJYWRkX2hlYWRlcihhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJQUxMT0NfR1JPVyhleHRyYV9jYywgZXh0cmFfY2NfbnIgKyAxLCBleHRyYV9jY19hbGxvYyk7CisJZXh0cmFfY2NbZXh0cmFfY2NfbnIrK10gPSB4c3RyZHVwKGFyZyk7CisJcmV0dXJuIDA7Cit9CisKIGludCBjbWRfZm9ybWF0X3BhdGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKIAlzdHJ1Y3QgY29tbWl0ICoqbGlzdCA9IE5VTEw7CiAJc3RydWN0IHJldl9pbmZvIHJldjsKLQlpbnQgbnIgPSAwLCB0b3RhbCwgaSwgajsKKwlpbnQgbnIgPSAwLCB0b3RhbCwgaTsKIAlpbnQgdXNlX3N0ZG91dCA9IDA7CiAJaW50IHN0YXJ0X251bWJlciA9IC0xOwotCWludCBrZWVwX3N1YmplY3QgPSAwOwogCWludCBudW1iZXJlZF9maWxlcyA9IDA7CQkvKiBfanVzdF8gbnVtYmVycyAqLwotCWludCBzdWJqZWN0X3ByZWZpeCA9IDA7CiAJaW50IGlnbm9yZV9pZl9pbl91cHN0cmVhbSA9IDA7CiAJaW50IGNvdmVyX2xldHRlciA9IDA7CiAJaW50IGJvdW5kYXJ5X2NvdW50ID0gMDsKIAlpbnQgbm9fYmluYXJ5X2RpZmYgPSAwOwotCWludCBudW1iZXJlZF9jbWRsaW5lX29wdCA9IDA7CiAJc3RydWN0IGNvbW1pdCAqb3JpZ2luID0gTlVMTCwgKmhlYWQgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmluX3JlcGx5X3RvID0gTlVMTDsKIAlzdHJ1Y3QgcGF0Y2hfaWRzIGlkczsKIAljaGFyICphZGRfc2lnbm9mZiA9IE5VTEw7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fZm9ybWF0X3BhdGNoX29wdGlvbnNbXSA9IHsKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICduJywgIm51bWJlcmVkIiwgJm51bWJlcmVkLCBOVUxMLAorCQkJICAgICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIiwKKwkJCSAgICBQQVJTRV9PUFRfTk9BUkcsIG51bWJlcmVkX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnTicsICJuby1udW1iZXJlZCIsICZudW1iZXJlZCwgTlVMTCwKKwkJCSAgICAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiLAorCQkJICAgIFBBUlNFX09QVF9OT0FSRywgbm9fbnVtYmVyZWRfY2FsbGJhY2sgfSwKKwkJT1BUX0JPT0xFQU4oJ3MnLCAic2lnbm9mZiIsICZkb19zaWdub2ZmLCAiYWRkIFNpZ25lZC1vZmYtYnk6IiksCisJCU9QVF9CT09MRUFOKDAsICJzdGRvdXQiLCAmdXNlX3N0ZG91dCwKKwkJCSAgICAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiKSwKKwkJT1BUX0JPT0xFQU4oMCwgImNvdmVyLWxldHRlciIsICZjb3Zlcl9sZXR0ZXIsCisJCQkgICAgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIiksCisJCU9QVF9CT09MRUFOKDAsICJudW1iZXJlZC1maWxlcyIsICZudW1iZXJlZF9maWxlcywKKwkJCSAgICAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIiksCisJCU9QVF9TVFJJTkcoMCwgInN1ZmZpeCIsICZmbXRfcGF0Y2hfc3VmZml4LCAic2Z4IiwKKwkJCSAgICAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciKSwKKwkJT1BUX0lOVEVHRVIoMCwgInN0YXJ0LW51bWJlciIsICZzdGFydF9udW1iZXIsCisJCQkgICAgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJzdWJqZWN0LXByZWZpeCIsICZyZXYsICJwcmVmaXgiLAorCQkJICAgICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iLAorCQkJICAgIFBBUlNFX09QVF9OT05FRywgc3ViamVjdF9wcmVmaXhfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdvJywgIm91dHB1dC1kaXJlY3RvcnkiLCAmb3V0cHV0X2RpcmVjdG9yeSwKKwkJCSAgICAiZGlyIiwgInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIsCisJCQkgICAgUEFSU0VfT1BUX05PTkVHLCBvdXRwdXRfZGlyZWN0b3J5X2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnaycsICJrZWVwLXN1YmplY3QiLCAmcmV2LCBOVUxMLAorCQkJICAgICJkb24ndCBzdHJpcC9hZGQgW1BBVENIXSIsCisJCQkgICAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBrZWVwX2NhbGxiYWNrIH0sCisJCU9QVF9CT09MRUFOKDAsICJuby1iaW5hcnkiLCAmbm9fYmluYXJ5X2RpZmYsCisJCQkgICAgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiKSwKKwkJT1BUX0JPT0xFQU4oMCwgImlnbm9yZS1pZi1pbi11cHN0cmVhbSIsICZpZ25vcmVfaWZfaW5fdXBzdHJlYW0sCisJCQkgICAgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIpLAorCQlPUFRfR1JPVVAoIk1lc3NhZ2luZyIpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImFkZC1oZWFkZXIiLCBOVUxMLCAiaGVhZGVyIiwKKwkJCSAgICAiYWRkIGVtYWlsIGhlYWRlciIsIFBBUlNFX09QVF9OT05FRywKKwkJCSAgICBoZWFkZXJfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJjYyIsIE5VTEwsICJlbWFpbCIsICJhZGQgQ2M6IGhlYWRlciIsCisJCQkgICAgUEFSU0VfT1BUX05PTkVHLCBjY19jYWxsYmFjayB9LAorCQlPUFRfU1RSSU5HKDAsICJpbi1yZXBseS10byIsICZpbl9yZXBseV90bywgIm1lc3NhZ2UtaWQiLAorCQkJICAgICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJhdHRhY2giLCAmcmV2LCAiYm91bmRhcnkiLAorCQkJICAgICJhdHRhY2ggdGhlIHBhdGNoIiwgUEFSU0VfT1BUX09QVEFSRywKKwkJCSAgICBhdHRhY2hfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpbmxpbmUiLCAmcmV2LCAiYm91bmRhcnkiLAorCQkJICAgICJpbmxpbmUgdGhlIHBhdGNoIiwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJICAgIGlubGluZV9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInRocmVhZCIsICZ0aHJlYWQsICJzdHlsZSIsCisJCQkgICAgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIiwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHLCB0aHJlYWRfY2FsbGJhY2sgfSwKKwkJT1BUX0VORCgpCisJfTsKIAogCWdpdF9jb25maWcoZ2l0X2Zvcm1hdF9jb25maWcsIE5VTEwpOwogCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7CkBAIC03ODMsMTAyICs5NTgsOSBAQAogCSAqIGxpa2UgImdpdCBmb3JtYXQtcGF0Y2ggLW8gYTEyMyBIRUFEXi4uIiBtYXkgZmFpbDsgYTEyMyBpcwogCSAqIHBvc3NpYmx5IGEgdmFsaWQgU0hBMS4KIAkgKi8KLQlmb3IgKGkgPSAxLCBqID0gMTsgaSA8IGFyZ2M7IGkrKykgewotCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1zdGRvdXQiKSkKLQkJCXVzZV9zdGRvdXQgPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItbiIpIHx8Ci0JCQkJIXN0cmNtcChhcmd2W2ldLCAiLS1udW1iZXJlZCIpKSB7Ci0JCQludW1iZXJlZCA9IDE7Ci0JCQludW1iZXJlZF9jbWRsaW5lX29wdCA9IDE7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLU4iKSB8fAotCQkJCSFzdHJjbXAoYXJndltpXSwgIi0tbm8tbnVtYmVyZWQiKSkgewotCQkJbnVtYmVyZWQgPSAwOwotCQkJYXV0b19udW1iZXIgPSAwOwotCQl9Ci0JCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJndltpXSwgIi0tc3RhcnQtbnVtYmVyPSIpKQotCQkJc3RhcnRfbnVtYmVyID0gc3RydG9sKGFyZ3ZbaV0gKyAxNSwgTlVMTCwgMTApOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLW51bWJlcmVkLWZpbGVzIikpCi0JCQludW1iZXJlZF9maWxlcyA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tc3RhcnQtbnVtYmVyIikpIHsKLQkJCWkrKzsKLQkJCWlmIChpID09IGFyZ2MpCi0JCQkJZGllKCJOZWVkIGEgbnVtYmVyIGZvciAtLXN0YXJ0LW51bWJlciIpOwotCQkJc3RhcnRfbnVtYmVyID0gc3RydG9sKGFyZ3ZbaV0sIE5VTEwsIDEwKTsKLQkJfQotCQllbHNlIGlmICghcHJlZml4Y21wKGFyZ3ZbaV0sICItLWNjPSIpKSB7Ci0JCQlBTExPQ19HUk9XKGV4dHJhX2NjLCBleHRyYV9jY19uciArIDEsIGV4dHJhX2NjX2FsbG9jKTsKLQkJCWV4dHJhX2NjW2V4dHJhX2NjX25yKytdID0geHN0cmR1cChhcmd2W2ldICsgNSk7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLWsiKSB8fAotCQkJCSFzdHJjbXAoYXJndltpXSwgIi0ta2VlcC1zdWJqZWN0IikpIHsKLQkJCWtlZXBfc3ViamVjdCA9IDE7Ci0JCQlyZXYudG90YWwgPSAtMTsKLQkJfQotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLW91dHB1dC1kaXJlY3RvcnkiKSB8fAotCQkJICFzdHJjbXAoYXJndltpXSwgIi1vIikpIHsKLQkJCWkrKzsKLQkJCWlmIChhcmdjIDw9IGkpCi0JCQkJZGllKCJXaGljaCBkaXJlY3Rvcnk/Iik7Ci0JCQlpZiAob3V0cHV0X2RpcmVjdG9yeSkKLQkJCQlkaWUoIlR3byBvdXRwdXQgZGlyZWN0b3JpZXM/Iik7Ci0JCQlvdXRwdXRfZGlyZWN0b3J5ID0gYXJndltpXTsKLQkJfQotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLXNpZ25vZmYiKSB8fAotCQkJICFzdHJjbXAoYXJndltpXSwgIi1zIikpIHsKLQkJCWRvX3NpZ25vZmYgPSAxOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tYXR0YWNoIikpIHsKLQkJCXJldi5taW1lX2JvdW5kYXJ5ID0gZ2l0X3ZlcnNpb25fc3RyaW5nOwotCQkJcmV2Lm5vX2lubGluZSA9IDE7Ci0JCX0KLQkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmd2W2ldLCAiLS1hdHRhY2g9IikpIHsKLQkJCXJldi5taW1lX2JvdW5kYXJ5ID0gYXJndltpXSArIDk7Ci0JCQlyZXYubm9faW5saW5lID0gMTsKLQkJfQotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLW5vLWF0dGFjaCIpKSB7Ci0JCQlyZXYubWltZV9ib3VuZGFyeSA9IE5VTEw7Ci0JCQlyZXYubm9faW5saW5lID0gMDsKLQkJfQotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLWlubGluZSIpKSB7Ci0JCQlyZXYubWltZV9ib3VuZGFyeSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKLQkJCXJldi5ub19pbmxpbmUgPSAwOwotCQl9Ci0JCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJndltpXSwgIi0taW5saW5lPSIpKSB7Ci0JCQlyZXYubWltZV9ib3VuZGFyeSA9IGFyZ3ZbaV0gKyA5OwotCQkJcmV2Lm5vX2lubGluZSA9IDA7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0iKSkKLQkJCWlnbm9yZV9pZl9pbl91cHN0cmVhbSA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tdGhyZWFkIikKLQkJCXx8ICFzdHJjbXAoYXJndltpXSwgIi0tdGhyZWFkPXNoYWxsb3ciKSkKLQkJCXRocmVhZCA9IFRIUkVBRF9TSEFMTE9XOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLXRocmVhZD1kZWVwIikpCi0JCQl0aHJlYWQgPSBUSFJFQURfREVFUDsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1uby10aHJlYWQiKSkKLQkJCXRocmVhZCA9IDA7Ci0JCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJndltpXSwgIi0taW4tcmVwbHktdG89IikpCi0JCQlpbl9yZXBseV90byA9IGFyZ3ZbaV0gKyAxNDsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1pbi1yZXBseS10byIpKSB7Ci0JCQlpKys7Ci0JCQlpZiAoaSA9PSBhcmdjKQotCQkJCWRpZSgiTmVlZCBhIE1lc3NhZ2UtSWQgZm9yIC0taW4tcmVwbHktdG8iKTsKLQkJCWluX3JlcGx5X3RvID0gYXJndltpXTsKLQkJfSBlbHNlIGlmICghcHJlZml4Y21wKGFyZ3ZbaV0sICItLXN1YmplY3QtcHJlZml4PSIpKSB7Ci0JCQlzdWJqZWN0X3ByZWZpeCA9IDE7Ci0JCQlyZXYuc3ViamVjdF9wcmVmaXggPSBhcmd2W2ldICsgMTc7Ci0JCX0gZWxzZSBpZiAoIXByZWZpeGNtcChhcmd2W2ldLCAiLS1zdWZmaXg9IikpCi0JCQlmbXRfcGF0Y2hfc3VmZml4ID0gYXJndltpXSArIDk7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tY292ZXItbGV0dGVyIikpCi0JCQljb3Zlcl9sZXR0ZXIgPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLW5vLWJpbmFyeSIpKQotCQkJbm9fYmluYXJ5X2RpZmYgPSAxOwotCQllbHNlIGlmICghcHJlZml4Y21wKGFyZ3ZbaV0sICItLWFkZC1oZWFkZXI9IikpCi0JCQlhZGRfaGVhZGVyKGFyZ3ZbaV0gKyAxMyk7Ci0JCWVsc2UKLQkJCWFyZ3ZbaisrXSA9IGFyZ3ZbaV07Ci0JfQotCWFyZ2MgPSBqOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9mb3JtYXRfcGF0Y2hfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9mb3JtYXRfcGF0Y2hfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwIHwgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTik7CiAKIAlpZiAoZG9fc2lnbm9mZikgewogCQljb25zdCBjaGFyICpjb21taXR0ZXI7CkBAIC05MTcsNyArOTk5LDcgQEAKIAkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOwogCX0KIAotCXJldi5leHRyYV9oZWFkZXJzID0gc3RyYnVmX2RldGFjaCgmYnVmLCAwKTsKKwlyZXYuZXh0cmFfaGVhZGVycyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CiAKIAlpZiAoc3RhcnRfbnVtYmVyIDwgMCkKIAkJc3RhcnRfbnVtYmVyID0gMTsKQEAgLTk1Myw4ICsxMDM1LDggQEAKIAkJaWYgKHVzZV9zdGRvdXQpCiAJCQlkaWUoInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/Iik7CiAJCWlmIChta2RpcihvdXRwdXRfZGlyZWN0b3J5LCAwNzc3KSA8IDAgJiYgZXJybm8gIT0gRUVYSVNUKQotCQkJZGllKCJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAlcyIsCi0JCQkgICAgb3V0cHV0X2RpcmVjdG9yeSk7CisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciLAorCQkJCSAgb3V0cHV0X2RpcmVjdG9yeSk7CiAJfQogCiAJaWYgKHJldi5wZW5kaW5nLm5yID09IDEpIHsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tbHMtZmlsZXMuYyBiL2J1aWx0aW4tbHMtZmlsZXMuYwppbmRleCBkYTJkYWY0Li5mNDczMjIwIDEwMDY0NAotLS0gYS9idWlsdGluLWxzLWZpbGVzLmMKKysrIGIvYnVpbHRpbi1scy1maWxlcy5jCkBAIC0xNjEsMTIgKzE2MSw3IEBACiAKIAkvKiBGb3IgY2FjaGVkL2RlbGV0ZWQgZmlsZXMgd2UgZG9uJ3QgbmVlZCB0byBldmVuIGRvIHRoZSByZWFkZGlyICovCiAJaWYgKHNob3dfb3RoZXJzIHx8IHNob3dfa2lsbGVkKSB7Ci0JCWNvbnN0IGNoYXIgKnBhdGggPSAiLiIsICpiYXNlID0gIiI7Ci0JCWludCBiYXNlbGVuID0gcHJlZml4X2xlbjsKLQotCQlpZiAoYmFzZWxlbikKLQkJCXBhdGggPSBiYXNlID0gcHJlZml4OwotCQlyZWFkX2RpcmVjdG9yeShkaXIsIHBhdGgsIGJhc2UsIGJhc2VsZW4sIHBhdGhzcGVjKTsKKwkJZmlsbF9kaXJlY3RvcnkoZGlyLCBwYXRoc3BlYyk7CiAJCWlmIChzaG93X290aGVycykKIAkJCXNob3dfb3RoZXJfZmlsZXMoZGlyKTsKIAkJaWYgKHNob3dfa2lsbGVkKQpAQCAtNDU0LDcgKzQ0OSw3IEBACiAJCU9QVF9CSVQoMCwgImRpcmVjdG9yeSIsICZkaXIuZmxhZ3MsCiAJCQkic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lIG9ubHkiLAogCQkJRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVMpLAotCQlPUFRfQklUKDAsICJuby1lbXB0eS1kaXJlY3RvcnkiLCAmZGlyLmZsYWdzLAorCQlPUFRfTkVHQklUKDAsICJlbXB0eS1kaXJlY3RvcnkiLCAmZGlyLmZsYWdzLAogCQkJImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiLAogCQkJRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVMpLAogCQlPUFRfQk9PTEVBTigndScsICJ1bm1lcmdlZCIsICZzaG93X3VubWVyZ2VkLApAQCAtNDg2LDcgKzQ4MSw3IEBACiAJCXByZWZpeF9vZmZzZXQgPSBzdHJsZW4ocHJlZml4KTsKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX2xzX2ZpbGVzX29wdGlvbnMsCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2xzX2ZpbGVzX29wdGlvbnMsCiAJCQlsc19maWxlc191c2FnZSwgMCk7CiAJaWYgKHNob3dfdGFnIHx8IHNob3dfdmFsaWRfYml0KSB7CiAJCXRhZ19jYWNoZWQgPSAiSCAiOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCmluZGV4IDFlZWViNGQuLjkyNjM3YWMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbWFpbGluZm8uYworKysgYi9idWlsdGluLW1haWxpbmZvLmMKQEAgLTE5Myw4ICsxOTMsNyBAQAogCQkqY29udGVudF90b3AgPSBib3VuZGFyeTsKIAkJYm91bmRhcnkgPSBOVUxMOwogCX0KLQlpZiAoc2x1cnBfYXR0cihsaW5lLT5idWYsICJjaGFyc2V0PSIsICZjaGFyc2V0KSkKLQkJc3RyYnVmX3RvbG93ZXIoJmNoYXJzZXQpOworCXNsdXJwX2F0dHIobGluZS0+YnVmLCAiY2hhcnNldD0iLCAmY2hhcnNldCk7CiAKIAlpZiAoYm91bmRhcnkpIHsKIAkJc3RyYnVmX3JlbGVhc2UoYm91bmRhcnkpOwpAQCAtNDgxLDcgKzQ4MCw3IEBACiAJCWlmIChpc191dGY4KGxpbmUtPmJ1ZikpCiAJCQlyZXR1cm4gTlVMTDsKIAl9Ci0JcmV0dXJuICJsYXRpbjEiOworCXJldHVybiAiSVNPODg1OS0xIjsKIH0KIAogc3RhdGljIHZvaWQgY29udmVydF90b191dGY4KHN0cnVjdCBzdHJidWYgKmxpbmUsIGNvbnN0IGNoYXIgKmNoYXJzZXQpCkBAIC00OTQsNyArNDkzLDcgQEAKIAkJCXJldHVybjsKIAl9CiAKLQlpZiAoIXN0cmNtcChtZXRhaW5mb19jaGFyc2V0LCBjaGFyc2V0KSkKKwlpZiAoIXN0cmNhc2VjbXAobWV0YWluZm9fY2hhcnNldCwgY2hhcnNldCkpCiAJCXJldHVybjsKIAlvdXQgPSByZWVuY29kZV9zdHJpbmcobGluZS0+YnVmLCBtZXRhaW5mb19jaGFyc2V0LCBjaGFyc2V0KTsKIAlpZiAoIW91dCkKQEAgLTU1MCw3ICs1NDksNiBAQAogCQlpZiAoY3AgKyAzIC0gaXQtPmJ1ZiA+IGl0LT5sZW4pCiAJCQlnb3RvIGRlY29kZV9oZWFkZXJfYnFfb3V0OwogCQlzdHJidWZfYWRkKCZjaGFyc2V0X3EsIGVwLCBjcCAtIGVwKTsKLQkJc3RyYnVmX3RvbG93ZXIoJmNoYXJzZXRfcSk7CiAKIAkJZW5jb2RpbmcgPSBjcFsxXTsKIAkJaWYgKCFlbmNvZGluZyB8fCBjcFsyXSAhPSAnPycpCkBAIC05NDQsNyArOTQyLDcgQEAKIAkgKi8KIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKLQlkZWZfY2hhcnNldCA9IChnaXRfY29tbWl0X2VuY29kaW5nID8gZ2l0X2NvbW1pdF9lbmNvZGluZyA6ICJ1dGYtOCIpOworCWRlZl9jaGFyc2V0ID0gKGdpdF9jb21taXRfZW5jb2RpbmcgPyBnaXRfY29tbWl0X2VuY29kaW5nIDogIlVURi04Iik7CiAJbWV0YWluZm9fY2hhcnNldCA9IGRlZl9jaGFyc2V0OwogCiAJd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CmRpZmYgLS1naXQgYS9idWlsdGluLW1haWxzcGxpdC5jIGIvYnVpbHRpbi1tYWlsc3BsaXQuYwppbmRleCA3MWYzYjNiLi5hZDVmNmI1IDEwMDY0NAotLS0gYS9idWlsdGluLW1haWxzcGxpdC5jCisrKyBiL2J1aWx0aW4tbWFpbHNwbGl0LmMKQEAgLTgxLDcgKzgxLDcgQEAKIAogCWZkID0gb3BlbihuYW1lLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOwogCWlmIChmZCA8IDApCi0JCWRpZSgiY2Fubm90IG9wZW4gb3V0cHV0IGZpbGUgJXMiLCBuYW1lKTsKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBvdXRwdXQgZmlsZSAnJXMnIiwgbmFtZSk7CiAJb3V0cHV0ID0gZmRvcGVuKGZkLCAidyIpOwogCiAJLyogQ29weSBpdCBvdXQsIHdoaWxlIHNlYXJjaGluZyBmb3IgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGgKQEAgLTkxLDcgKzkxLDcgQEAKIAkJaW50IGlzX3BhcnRpYWwgPSBsZW4gJiYgYnVmW2xlbi0xXSAhPSAnXG4nOwogCiAJCWlmIChmd3JpdGUoYnVmLCAxLCBsZW4sIG91dHB1dCkgIT0gbGVuKQotCQkJZGllKCJjYW5ub3Qgd3JpdGUgb3V0cHV0Iik7CisJCQlkaWVfZXJybm8oImNhbm5vdCB3cml0ZSBvdXRwdXQiKTsKIAogCQlsZW4gPSByZWFkX2xpbmVfd2l0aF9udWwoYnVmLCBzaXplb2YoYnVmKSwgbWJveCk7CiAJCWlmIChsZW4gPT0gMCkgewpAQCAtOTksNyArOTksNyBAQAogCQkJCXN0YXR1cyA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlkaWUoImNhbm5vdCByZWFkIG1ib3giKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IHJlYWQgbWJveCIpOwogCQl9CiAJCWlmICghaXNfcGFydGlhbCAmJiAhaXNfYmFyZSAmJiBpc19mcm9tX2xpbmUoYnVmLCBsZW4pKQogCQkJYnJlYWs7IC8qIGRvbmUgd2l0aCBvbmUgbWVzc2FnZSAqLwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tZXJnZS1iYXNlLmMgYi9idWlsdGluLW1lcmdlLWJhc2UuYwppbmRleCAwM2ZjMWMyLi5hNmVjMmY3IDEwMDY0NAotLS0gYS9idWlsdGluLW1lcmdlLWJhc2UuYworKysgYi9idWlsdGluLW1lcmdlLWJhc2UuYwpAQCAtNTMsNyArNTMsNyBAQAogCX07CiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7Ci0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgbWVyZ2VfYmFzZV91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBtZXJnZV9iYXNlX3VzYWdlLCAwKTsKIAlpZiAoYXJnYyA8IDIpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhtZXJnZV9iYXNlX3VzYWdlLCBvcHRpb25zKTsKIAlyZXYgPSB4bWFsbG9jKGFyZ2MgKiBzaXplb2YoKnJldikpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tZXJnZS1maWxlLmMgYi9idWlsdGluLW1lcmdlLWZpbGUuYwppbmRleCA5NmVkYjk3Li5hZmQyZWE3IDEwMDY0NAotLS0gYS9idWlsdGluLW1lcmdlLWZpbGUuYworKysgYi9idWlsdGluLW1lcmdlLWZpbGUuYwpAQCAtNDgsNyArNDgsNyBAQAogCQkJbWVyZ2Vfc3R5bGUgPSBnaXRfeG1lcmdlX3N0eWxlOwogCX0KIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIG1lcmdlX2ZpbGVfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgbWVyZ2VfZmlsZV91c2FnZSwgMCk7CiAJaWYgKGFyZ2MgIT0gMykKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKG1lcmdlX2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOwogCWlmIChxdWlldCkgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tZXJnZS1yZWN1cnNpdmUuYyBiL2J1aWx0aW4tbWVyZ2UtcmVjdXJzaXZlLmMKaW5kZXggNzAzMDQ1Yi4uZDI2YTk2ZSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1tZXJnZS1yZWN1cnNpdmUuYworKysgYi9idWlsdGluLW1lcmdlLXJlY3Vyc2l2ZS5jCkBAIC00NSw4ICs0NSw5IEBACiAJCQliYXNlc1tiYXNlc19jb3VudCsrXSA9IHNoYTsKIAkJfQogCQllbHNlCi0JCQl3YXJuaW5nKCJDYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlenUgYmFzZXMuICIKLQkJCQkiSWdub3JpbmcgJXMuIiwgQVJSQVlfU0laRShiYXNlcyktMSwgYXJndltpXSk7CisJCQl3YXJuaW5nKCJDYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlcy4gIgorCQkJCSJJZ25vcmluZyAlcy4iLAorCQkJCShpbnQpQVJSQVlfU0laRShiYXNlcyktMSwgYXJndltpXSk7CiAJfQogCWlmIChhcmdjIC0gaSAhPSAzKSAvKiAiLS0iICI8aGVhZD4iICI8cmVtb3RlPiIgKi8KIAkJZGllKCJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIik7CmRpZmYgLS1naXQgYS9idWlsdGluLW1lcmdlLmMgYi9idWlsdGluLW1lcmdlLmMKaW5kZXggOWU5YmQ1Mi4uZjRkZTczZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1tZXJnZS5jCisrKyBiL2J1aWx0aW4tbWVyZ2UuYwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJcHJpbnRmKCJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iKTsKIAlmZCA9IG9wZW4oZ2l0X3BhdGgoIlNRVUFTSF9NU0ciKSwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKIAlpZiAoZmQgPCAwKQotCQlkaWUoIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIsIGdpdF9wYXRoKCJTUVVBU0hfTVNHIikpOworCQlkaWVfZXJybm8oIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiwgZ2l0X3BhdGgoIlNRVUFTSF9NU0ciKSk7CiAKIAlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKIAlyZXYuaWdub3JlX21lcmdlcyA9IDE7CkBAIC0yOTQsOSArMjk0LDkgQEAKIAkJCU5VTEwsIE5VTEwsIHJldi5kYXRlX21vZGUsIDApOwogCX0KIAlpZiAod3JpdGUoZmQsIG91dC5idWYsIG91dC5sZW4pIDwgMCkKLQkJZGllKCJXcml0aW5nIFNRVUFTSF9NU0c6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJXcml0aW5nIFNRVUFTSF9NU0ciKTsKIAlpZiAoY2xvc2UoZmQpKQotCQlkaWUoIkZpbmlzaGluZyBTUVVBU0hfTVNHOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiRmluaXNoaW5nIFNRVUFTSF9NU0ciKTsKIAlzdHJidWZfcmVsZWFzZSgmb3V0KTsKIH0KIApAQCAtMzU4LDYgKzM1OCw3IEBACiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3Qgc3RyYnVmIGJuYW1lID0gU1RSQlVGX0lOSVQ7CiAJY29uc3QgY2hhciAqcHRyOworCWNoYXIgKmZvdW5kX3JlZjsKIAlpbnQgbGVuLCBlYXJseTsKIAogCXN0cmJ1Zl9icmFuY2huYW1lKCZibmFtZSwgcmVtb3RlKTsKQEAgLTM2OCwxNCArMzY5LDE3IEBACiAJaWYgKCFyZW1vdGVfaGVhZCkKIAkJZGllKCInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IiwgcmVtb3RlKTsKIAotCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgInJlZnMvaGVhZHMvIik7Ci0Jc3RyYnVmX2FkZHN0cigmYnVmLCByZW1vdGUpOwotCXJlc29sdmVfcmVmKGJ1Zi5idWYsIGJyYW5jaF9oZWFkLCAwLCAwKTsKLQotCWlmICghaGFzaGNtcChyZW1vdGVfaGVhZC0+c2hhMSwgYnJhbmNoX2hlYWQpKSB7Ci0JCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXHRcdGJyYW5jaCAnJXMnIG9mIC5cbiIsCi0JCQlzaGExX3RvX2hleChicmFuY2hfaGVhZCksIHJlbW90ZSk7Ci0JCWdvdG8gY2xlYW51cDsKKwlpZiAoZHdpbV9yZWYocmVtb3RlLCBzdHJsZW4ocmVtb3RlKSwgYnJhbmNoX2hlYWQsICZmb3VuZF9yZWYpID4gMCkgeworCQlpZiAoIXByZWZpeGNtcChmb3VuZF9yZWYsICJyZWZzL2hlYWRzLyIpKSB7CisJCQlzdHJidWZfYWRkZihtc2csICIlc1x0XHRicmFuY2ggJyVzJyBvZiAuXG4iLAorCQkJCSAgICBzaGExX3RvX2hleChicmFuY2hfaGVhZCksIHJlbW90ZSk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJaWYgKCFwcmVmaXhjbXAoZm91bmRfcmVmLCAicmVmcy9yZW1vdGVzLyIpKSB7CisJCQlzdHJidWZfYWRkZihtc2csICIlc1x0XHRyZW1vdGUgYnJhbmNoICclcycgb2YgLlxuIiwKKwkJCQkgICAgc2hhMV90b19oZXgoYnJhbmNoX2hlYWQpLCByZW1vdGUpOworCQkJZ290byBjbGVhbnVwOworCQl9CiAJfQogCiAJLyogU2VlIGlmIHJlbW90ZSBtYXRjaGVzIDxuYW1lPl5eXi4uIG9yIDxuYW1lPn48bnVtYmVyPiAqLwpAQCAtNDA5LDcgKzQxMyw3IEBACiAJCXN0cmJ1Zl9hZGRzdHIoJnRydW5hbWUsICJyZWZzL2hlYWRzLyIpOwogCQlzdHJidWZfYWRkc3RyKCZ0cnVuYW1lLCByZW1vdGUpOwogCQlzdHJidWZfc2V0bGVuKCZ0cnVuYW1lLCB0cnVuYW1lLmxlbiAtIGxlbik7Ci0JCWlmIChyZXNvbHZlX3JlZih0cnVuYW1lLmJ1ZiwgYnVmX3NoYSwgMCwgMCkpIHsKKwkJaWYgKHJlc29sdmVfcmVmKHRydW5hbWUuYnVmLCBidWZfc2hhLCAwLCBOVUxMKSkgewogCQkJc3RyYnVmX2FkZGYobXNnLAogCQkJCSAgICAiJXNcdFx0YnJhbmNoICclcyclcyBvZiAuXG4iLAogCQkJCSAgICBzaGExX3RvX2hleChyZW1vdGVfaGVhZC0+c2hhMSksCkBAIC00MjgsOCArNDMyLDggQEAKIAogCQlmcCA9IGZvcGVuKGdpdF9wYXRoKCJGRVRDSF9IRUFEIiksICJyIik7CiAJCWlmICghZnApCi0JCQlkaWUoImNvdWxkIG5vdCBvcGVuICVzIGZvciByZWFkaW5nOiAlcyIsCi0JCQkJZ2l0X3BhdGgoIkZFVENIX0hFQUQiKSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIsCisJCQkJICBnaXRfcGF0aCgiRkVUQ0hfSEVBRCIpKTsKIAkJc3RyYnVmX2dldGxpbmUoJmxpbmUsIGZwLCAnXG4nKTsKIAkJZmNsb3NlKGZwKTsKIAkJcHRyID0gc3Ryc3RyKGxpbmUuYnVmLCAiXHRub3QtZm9yLW1lcmdlXHQiKTsKQEAgLTQ2Miw3ICs0NjYsNyBAQAogCQlhcmd2ID0geHJlYWxsb2MoYXJndiwgc2l6ZW9mKCphcmd2KSAqIChhcmdjICsgMikpOwogCQltZW1tb3ZlKGFyZ3YgKyAxLCBhcmd2LCBzaXplb2YoKmFyZ3YpICogKGFyZ2MgKyAxKSk7CiAJCWFyZ2MrKzsKLQkJcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX21lcmdlX29wdGlvbnMsCisJCXBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgYnVpbHRpbl9tZXJnZV9vcHRpb25zLAogCQkJICAgICAgYnVpbHRpbl9tZXJnZV91c2FnZSwgMCk7CiAJCWZyZWUoYnVmKTsKIAl9CkBAIC03NjQsNyArNzY4LDggQEAKIAogCWZwID0gZm9wZW4oZ2l0X3BhdGgoIk1FUkdFX01TRyIpLCAiYSIpOwogCWlmICghZnApCi0JCWRpZSgiQ291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRpbmciLCBnaXRfcGF0aCgiTUVSR0VfTVNHIikpOworCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciLAorCQkJICBnaXRfcGF0aCgiTUVSR0VfTVNHIikpOwogCWZwcmludGYoZnAsICJcbkNvbmZsaWN0czpcbiIpOwogCWZvciAocG9zID0gMDsgcG9zIDwgYWN0aXZlX25yOyBwb3MrKykgewogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CkBAIC04NTgsNyArODYzLDcgQEAKIAlpZiAoZGlmZl91c2VfY29sb3JfZGVmYXVsdCA9PSAtMSkKIAkJZGlmZl91c2VfY29sb3JfZGVmYXVsdCA9IGdpdF91c2VfY29sb3JfZGVmYXVsdDsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fbWVyZ2Vfb3B0aW9ucywKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fbWVyZ2Vfb3B0aW9ucywKIAkJCWJ1aWx0aW5fbWVyZ2VfdXNhZ2UsIDApOwogCWlmICh2ZXJib3NpdHkgPCAwKQogCQlzaG93X2RpZmZzdGF0ID0gMDsKQEAgLTExODksMjcgKzExOTQsMjkgQEAKIAkJCQlzaGExX3RvX2hleChqLT5pdGVtLT5vYmplY3Quc2hhMSkpOwogCQlmZCA9IG9wZW4oZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKIAkJaWYgKGZkIDwgMCkKLQkJCWRpZSgiQ291bGQgb3BlbiAlcyBmb3Igd3JpdGluZyIsCi0JCQkJZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSk7CisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciLAorCQkJCSAgZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSk7CiAJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYuYnVmLCBidWYubGVuKSAhPSBidWYubGVuKQotCQkJZGllKCJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiLCBnaXRfcGF0aCgiTUVSR0VfSEVBRCIpKTsKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IHdyaXRlIHRvICclcyciLCBnaXRfcGF0aCgiTUVSR0VfSEVBRCIpKTsKIAkJY2xvc2UoZmQpOwogCQlzdHJidWZfYWRkY2goJm1lcmdlX21zZywgJ1xuJyk7CiAJCWZkID0gb3BlbihnaXRfcGF0aCgiTUVSR0VfTVNHIiksIE9fV1JPTkxZIHwgT19DUkVBVCwgMDY2Nik7CiAJCWlmIChmZCA8IDApCi0JCQlkaWUoIkNvdWxkIG9wZW4gJXMgZm9yIHdyaXRpbmciLCBnaXRfcGF0aCgiTUVSR0VfTVNHIikpOworCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiwKKwkJCQkgIGdpdF9wYXRoKCJNRVJHRV9NU0ciKSk7CiAJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBtZXJnZV9tc2cuYnVmLCBtZXJnZV9tc2cubGVuKSAhPQogCQkJbWVyZ2VfbXNnLmxlbikKLQkJCWRpZSgiQ291bGQgbm90IHdyaXRlIHRvICVzIiwgZ2l0X3BhdGgoIk1FUkdFX01TRyIpKTsKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IHdyaXRlIHRvICclcyciLCBnaXRfcGF0aCgiTUVSR0VfTVNHIikpOwogCQljbG9zZShmZCk7CiAJCWZkID0gb3BlbihnaXRfcGF0aCgiTUVSR0VfTU9ERSIpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjY2KTsKIAkJaWYgKGZkIDwgMCkKLQkJCWRpZSgiQ291bGQgb3BlbiAlcyBmb3Igd3JpdGluZyIsIGdpdF9wYXRoKCJNRVJHRV9NT0RFIikpOworCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiwKKwkJCQkgIGdpdF9wYXRoKCJNRVJHRV9NT0RFIikpOwogCQlzdHJidWZfcmVzZXQoJmJ1Zik7CiAJCWlmICghYWxsb3dfZmFzdF9mb3J3YXJkKQogCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIm5vLWZmIik7CiAJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYuYnVmLCBidWYubGVuKSAhPSBidWYubGVuKQotCQkJZGllKCJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiLCBnaXRfcGF0aCgiTUVSR0VfTU9ERSIpKTsKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IHdyaXRlIHRvICclcyciLCBnaXRfcGF0aCgiTUVSR0VfTU9ERSIpKTsKIAkJY2xvc2UoZmQpOwogCX0KIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi1ta3RyZWUuYyBiL2J1aWx0aW4tbWt0cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4Mzk1ZgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4tbWt0cmVlLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBHSVQgLSB0aGUgc3R1cGlkIGNvbnRlbnQgdHJhY2tlcgorICoKKyAqIENvcHlyaWdodCAoYykgSnVuaW8gQyBIYW1hbm8sIDIwMDYsIDIwMDkKKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdHJlZWVudCB7CisJdW5zaWduZWQgbW9kZTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBsZW47CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfSAqKmVudHJpZXM7CitzdGF0aWMgaW50IGFsbG9jLCB1c2VkOworCitzdGF0aWMgdm9pZCBhcHBlbmRfdG9fdHJlZSh1bnNpZ25lZCBtb2RlLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICpwYXRoKQoreworCXN0cnVjdCB0cmVlZW50ICplbnQ7CisJaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAoc3RyY2hyKHBhdGgsICcvJykpCisJCWRpZSgicGF0aCAlcyBjb250YWlucyBzbGFzaCIsIHBhdGgpOworCisJaWYgKGFsbG9jIDw9IHVzZWQpIHsKKwkJYWxsb2MgPSBhbGxvY19ucih1c2VkKTsKKwkJZW50cmllcyA9IHhyZWFsbG9jKGVudHJpZXMsIHNpemVvZigqZW50cmllcykgKiBhbGxvYyk7CisJfQorCWVudCA9IGVudHJpZXNbdXNlZCsrXSA9IHhtYWxsb2Moc2l6ZW9mKCoqZW50cmllcykgKyBsZW4gKyAxKTsKKwllbnQtPm1vZGUgPSBtb2RlOworCWVudC0+bGVuID0gbGVuOworCWhhc2hjcHkoZW50LT5zaGExLCBzaGExKTsKKwltZW1jcHkoZW50LT5uYW1lLCBwYXRoLCBsZW4rMSk7Cit9CisKK3N0YXRpYyBpbnQgZW50X2NvbXBhcmUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCB0cmVlZW50ICphID0gKihzdHJ1Y3QgdHJlZWVudCAqKilhXzsKKwlzdHJ1Y3QgdHJlZWVudCAqYiA9ICooc3RydWN0IHRyZWVlbnQgKiopYl87CisJcmV0dXJuIGJhc2VfbmFtZV9jb21wYXJlKGEtPm5hbWUsIGEtPmxlbiwgYS0+bW9kZSwKKwkJCQkgYi0+bmFtZSwgYi0+bGVuLCBiLT5tb2RlKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBzdHJidWYgYnVmOworCXNpemVfdCBzaXplOworCWludCBpOworCisJcXNvcnQoZW50cmllcywgdXNlZCwgc2l6ZW9mKCplbnRyaWVzKSwgZW50X2NvbXBhcmUpOworCWZvciAoc2l6ZSA9IGkgPSAwOyBpIDwgdXNlZDsgaSsrKQorCQlzaXplICs9IDMyICsgZW50cmllc1tpXS0+bGVuOworCisJc3RyYnVmX2luaXQoJmJ1Ziwgc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IHVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgdHJlZWVudCAqZW50ID0gZW50cmllc1tpXTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVvICVzJWMiLCBlbnQtPm1vZGUsIGVudC0+bmFtZSwgJ1wwJyk7CisJCXN0cmJ1Zl9hZGQoJmJ1ZiwgZW50LT5zaGExLCAyMCk7CisJfQorCisJd3JpdGVfc2hhMV9maWxlKGJ1Zi5idWYsIGJ1Zi5sZW4sIHRyZWVfdHlwZSwgc2hhMSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpta3RyZWVfdXNhZ2VbXSA9IHsKKwkiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIsCisJTlVMTAorfTsKKworc3RhdGljIHZvaWQgbWt0cmVlX2xpbmUoY2hhciAqYnVmLCBzaXplX3QgbGVuLCBpbnQgbGluZV90ZXJtaW5hdGlvbiwgaW50IGFsbG93X21pc3NpbmcpCit7CisJY2hhciAqcHRyLCAqbnRyOworCXVuc2lnbmVkIG1vZGU7CisJZW51bSBvYmplY3RfdHlwZSBtb2RlX3R5cGU7IC8qIG9iamVjdCB0eXBlIGRlcml2ZWQgZnJvbSBtb2RlICovCisJZW51bSBvYmplY3RfdHlwZSBvYmpfdHlwZTsgLyogb2JqZWN0IHR5cGUgZGVyaXZlZCBmcm9tIHNoYSAqLworCWNoYXIgKnBhdGg7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCXB0ciA9IGJ1ZjsKKwkvKgorCSAqIFJlYWQgbm9uLXJlY3Vyc2l2ZSBscy10cmVlIG91dHB1dCBmb3JtYXQ6CisJICogICAgIG1vZGUgU1AgdHlwZSBTUCBzaGExIFRBQiBuYW1lCisJICovCisJbW9kZSA9IHN0cnRvdWwocHRyLCAmbnRyLCA4KTsKKwlpZiAocHRyID09IG50ciB8fCAhbnRyIHx8ICpudHIgIT0gJyAnKQorCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogJXMiLCBidWYpOworCXB0ciA9IG50ciArIDE7IC8qIHR5cGUgKi8KKwludHIgPSBzdHJjaHIocHRyLCAnICcpOworCWlmICghbnRyIHx8IGJ1ZiArIGxlbiA8PSBudHIgKyA0MCB8fAorCSAgICBudHJbNDFdICE9ICdcdCcgfHwKKwkgICAgZ2V0X3NoYTFfaGV4KG50ciArIDEsIHNoYTEpKQorCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogJXMiLCBidWYpOworCisJLyogSXQgaXMgcGVyZmVjdGx5IG5vcm1hbCBpZiB3ZSBkbyBub3QgaGF2ZSBhIGNvbW1pdCBmcm9tIGEgc3VibW9kdWxlICovCisJaWYgKFNfSVNHSVRMSU5LKG1vZGUpKQorCQlhbGxvd19taXNzaW5nID0gMTsKKworCisJKm50cisrID0gMDsgLyogbm93IGF0IHRoZSBiZWdpbm5pbmcgb2YgU0hBMSAqLworCisJcGF0aCA9IG50ciArIDQxOyAgLyogYXQgdGhlIGJlZ2lubmluZyBvZiBuYW1lICovCisJaWYgKGxpbmVfdGVybWluYXRpb24gJiYgcGF0aFswXSA9PSAnIicpIHsKKwkJc3RydWN0IHN0cmJ1ZiBwX3VxID0gU1RSQlVGX0lOSVQ7CisJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnBfdXEsIHBhdGgsIE5VTEwpKQorCQkJZGllKCJpbnZhbGlkIHF1b3RpbmciKTsKKwkJcGF0aCA9IHN0cmJ1Zl9kZXRhY2goJnBfdXEsIE5VTEwpOworCX0KKworCS8qCisJICogT2JqZWN0IHR5cGUgaXMgcmVkdW5kYW50bHkgZGVyaXZhYmxlIHRocmVlIHdheXMuCisJICogVGhlc2Ugc2hvdWxkIGFsbCBhZ3JlZS4KKwkgKi8KKwltb2RlX3R5cGUgPSBvYmplY3RfdHlwZShtb2RlKTsKKwlpZiAobW9kZV90eXBlICE9IHR5cGVfZnJvbV9zdHJpbmcocHRyKSkgeworCQlkaWUoImVudHJ5ICclcycgb2JqZWN0IHR5cGUgKCVzKSBkb2Vzbid0IG1hdGNoIG1vZGUgdHlwZSAoJXMpIiwKKwkJCXBhdGgsIHB0ciwgdHlwZW5hbWUobW9kZV90eXBlKSk7CisJfQorCisJLyogQ2hlY2sgdGhlIHR5cGUgb2Ygb2JqZWN0IGlkZW50aWZpZWQgYnkgc2hhMSAqLworCW9ial90eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwlpZiAob2JqX3R5cGUgPCAwKSB7CisJCWlmIChhbGxvd19taXNzaW5nKSB7CisJCQk7IC8qIG5vIHByb2JsZW0gLSBtaXNzaW5nIG9iamVjdHMgYXJlIHByZXN1bWVkIHRvIGJlIG9mIHRoZSByaWdodCB0eXBlICovCisJCX0gZWxzZSB7CisJCQlkaWUoImVudHJ5ICclcycgb2JqZWN0ICVzIGlzIHVuYXZhaWxhYmxlIiwgcGF0aCwgc2hhMV90b19oZXgoc2hhMSkpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG9ial90eXBlICE9IG1vZGVfdHlwZSkgeworCQkJLyoKKwkJCSAqIFRoZSBvYmplY3QgZXhpc3RzIGJ1dCBpcyBvZiB0aGUgd3JvbmcgdHlwZS4KKwkJCSAqIFRoaXMgaXMgYSBwcm9ibGVtIHJlZ2FyZGxlc3Mgb2YgYWxsb3dfbWlzc2luZworCQkJICogYmVjYXVzZSB0aGUgbmV3IHRyZWUgZW50cnkgd2lsbCBuZXZlciBiZSBjb3JyZWN0LgorCQkJICovCisJCQlkaWUoImVudHJ5ICclcycgb2JqZWN0ICVzIGlzIGEgJXMgYnV0IHNwZWNpZmllZCB0eXBlIHdhcyAoJXMpIiwKKwkJCQlwYXRoLCBzaGExX3RvX2hleChzaGExKSwgdHlwZW5hbWUob2JqX3R5cGUpLCB0eXBlbmFtZShtb2RlX3R5cGUpKTsKKwkJfQorCX0KKworCWFwcGVuZF90b190cmVlKG1vZGUsIHNoYTEsIHBhdGgpOworfQorCitpbnQgY21kX21rdHJlZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwlpbnQgYWxsb3dfbWlzc2luZyA9IDA7CisJaW50IGlzX2JhdGNoX21vZGUgPSAwOworCWludCBnb3RfZW9mID0gMDsKKworCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uW10gPSB7CisJCU9QVF9TRVRfSU5UKCd6JywgTlVMTCwgJmxpbmVfdGVybWluYXRpb24sICJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIsICdcMCcpLAorCQlPUFRfU0VUX0lOVCggMCAsICJtaXNzaW5nIiwgJmFsbG93X21pc3NpbmcsICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiLCAxKSwKKwkJT1BUX1NFVF9JTlQoIDAgLCAiYmF0Y2giLCAmaXNfYmF0Y2hfbW9kZSwgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIsIDEpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYWMgPSBwYXJzZV9vcHRpb25zKGFjLCBhdiwgcHJlZml4LCBvcHRpb24sIG1rdHJlZV91c2FnZSwgMCk7CisKKwl3aGlsZSAoIWdvdF9lb2YpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCWlmIChzdHJidWZfZ2V0bGluZSgmc2IsIHN0ZGluLCBsaW5lX3Rlcm1pbmF0aW9uKSA9PSBFT0YpIHsKKwkJCQlnb3RfZW9mID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzYi5idWZbMF0gPT0gJ1wwJykgeworCQkJCS8qIGVtcHR5IGxpbmVzIGRlbm90ZSB0cmVlIGJvdW5kYXJpZXMgaW4gYmF0Y2ggbW9kZSAqLworCQkJCWlmIChpc19iYXRjaF9tb2RlKQorCQkJCQlicmVhazsKKwkJCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogKGJsYW5rIGxpbmUgb25seSB2YWxpZCBpbiBiYXRjaCBtb2RlKSIpOworCQkJfQorCQkJbWt0cmVlX2xpbmUoc2IuYnVmLCBzYi5sZW4sIGxpbmVfdGVybWluYXRpb24sIGFsbG93X21pc3NpbmcpOworCQl9CisJCWlmIChpc19iYXRjaF9tb2RlICYmIGdvdF9lb2YgJiYgdXNlZCA8IDEpIHsKKwkJCS8qCisJCQkgKiBFeGVjdXRpb24gZ2V0cyBoZXJlIGlmIHRoZSBsYXN0IHRyZWUgZW50cnkgaXMgdGVybWluYXRlZCB3aXRoIGEKKwkJCSAqIG5ldy1saW5lLiAgVGhlIGZpbmFsIG5ldy1saW5lIGhhcyBiZWVuIG1hZGUgb3B0aW9uYWwgdG8gYmUKKwkJCSAqIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3JpZ2luYWwgbm9uLWJhdGNoIGJlaGF2aW91ciBvZiBta3RyZWUuCisJCQkgKi8KKwkJCTsgLyogc2tpcCBjcmVhdGluZyBhbiBlbXB0eSB0cmVlICovCisJCX0gZWxzZSB7CisJCQl3cml0ZV90cmVlKHNoYTEpOworCQkJcHV0cyhzaGExX3RvX2hleChzaGExKSk7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfQorCQl1c2VkPTA7IC8qIHJlc2V0IHRyZWUgZW50cnkgYnVmZmVyIGZvciByZS11c2UgaW4gYmF0Y2ggbW9kZSAqLworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluLW12LmMgYi9idWlsdGluLW12LmMKaW5kZXggMDEyNzBmZS4uYjU5MmMzNiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1tdi5jCisrKyBiL2J1aWx0aW4tbXYuYwpAQCAtMjQsMTQgKzI0LDEwIEBACiAJcmVzdWx0W2NvdW50XSA9IE5VTEw7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaW50IGxlbmd0aCA9IHN0cmxlbihyZXN1bHRbaV0pOwotCQlpZiAobGVuZ3RoID4gMCAmJiByZXN1bHRbaV1bbGVuZ3RoIC0gMV0gPT0gJy8nKSB7CisJCWlmIChsZW5ndGggPiAwICYmIGlzX2Rpcl9zZXAocmVzdWx0W2ldW2xlbmd0aCAtIDFdKSkKIAkJCXJlc3VsdFtpXSA9IHhtZW1kdXB6KHJlc3VsdFtpXSwgbGVuZ3RoIC0gMSk7Ci0JCX0KLQkJaWYgKGJhc2VfbmFtZSkgewotCQkJY29uc3QgY2hhciAqbGFzdF9zbGFzaCA9IHN0cnJjaHIocmVzdWx0W2ldLCAnLycpOwotCQkJaWYgKGxhc3Rfc2xhc2gpCi0JCQkJcmVzdWx0W2ldID0gbGFzdF9zbGFzaCArIDE7Ci0JCX0KKwkJaWYgKGJhc2VfbmFtZSkKKwkJCXJlc3VsdFtpXSA9IGJhc2VuYW1lKChjaGFyICopcmVzdWx0W2ldKTsKIAl9CiAJcmV0dXJuIGdldF9wYXRoc3BlYyhwcmVmaXgsIHJlc3VsdCk7CiB9CkBAIC03Miw3ICs2OCw4IEBACiAJaWYgKHJlYWRfY2FjaGUoKSA8IDApCiAJCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX212X29wdGlvbnMsIGJ1aWx0aW5fbXZfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9tdl9vcHRpb25zLAorCQkJICAgICBidWlsdGluX212X3VzYWdlLCAwKTsKIAlpZiAoLS1hcmdjIDwgMSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fbXZfdXNhZ2UsIGJ1aWx0aW5fbXZfb3B0aW9ucyk7CiAKQEAgLTIwOCw3ICsyMDUsNyBAQAogCQkJcHJpbnRmKCJSZW5hbWluZyAlcyB0byAlc1xuIiwgc3JjLCBkc3QpOwogCQlpZiAoIXNob3dfb25seSAmJiBtb2RlICE9IElOREVYICYmCiAJCQkJcmVuYW1lKHNyYywgZHN0KSA8IDAgJiYgIWlnbm9yZV9lcnJvcnMpCi0JCQlkaWUgKCJyZW5hbWluZyAlcyBmYWlsZWQ6ICVzIiwgc3JjLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vICgicmVuYW1pbmcgJyVzJyBmYWlsZWQiLCBzcmMpOwogCiAJCWlmIChtb2RlID09IFdPUktJTkdfRElSRUNUT1JZKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9idWlsdGluLW5hbWUtcmV2LmMgYi9idWlsdGluLW5hbWUtcmV2LmMKaW5kZXggMDhjOGFhYi4uMDZhMzhhYyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1uYW1lLXJldi5jCisrKyBiL2J1aWx0aW4tbmFtZS1yZXYuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJfTsKIAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRzLCBuYW1lX3Jldl91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCBuYW1lX3Jldl91c2FnZSwgMCk7CiAJaWYgKCEhYWxsICsgISF0cmFuc2Zvcm1fc3RkaW4gKyAhIWFyZ2MgPiAxKSB7CiAJCWVycm9yKCJTcGVjaWZ5IGVpdGhlciBhIGxpc3QsIG9yIC0tYWxsLCBub3QgYm90aCEiKTsKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKG5hbWVfcmV2X3VzYWdlLCBvcHRzKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcGFjay1vYmplY3RzLmMgYi9idWlsdGluLXBhY2stb2JqZWN0cy5jCmluZGV4IDk0MWNjMmQuLjljYzhhODQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcGFjay1vYmplY3RzLmMKKysrIGIvYnVpbHRpbi1wYWNrLW9iamVjdHMuYwpAQCAtODYsNyArODYsNyBAQAogc3RhdGljIGludCBwYWNrX2NvbXByZXNzaW9uX3NlZW47CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbHRhX2NhY2hlX3NpemUgPSAwOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X2RlbHRhX2NhY2hlX3NpemUgPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X2RlbHRhX2NhY2hlX3NpemUgPSAyNTYgKiAxMDI0ICogMTAyNDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhY2hlX21heF9zbWFsbF9kZWx0YV9zaXplID0gMTAwMDsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgd2luZG93X21lbW9yeV9saW1pdCA9IDA7CkBAIC01MzYsMTEgKzUzNiw5IEBACiAJCQkJIGJhc2VfbmFtZSwgc2hhMV90b19oZXgoc2hhMSkpOwogCQkJZnJlZV9wYWNrX2J5X25hbWUodG1wbmFtZSk7CiAJCQlpZiAoYWRqdXN0X3Blcm0ocGFja190bXBfbmFtZSwgbW9kZSkpCi0JCQkJZGllKCJ1bmFibGUgdG8gbWFrZSB0ZW1wb3JhcnkgcGFjayBmaWxlIHJlYWRhYmxlOiAlcyIsCi0JCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gbWFrZSB0ZW1wb3JhcnkgcGFjayBmaWxlIHJlYWRhYmxlIik7CiAJCQlpZiAocmVuYW1lKHBhY2tfdG1wX25hbWUsIHRtcG5hbWUpKQotCQkJCWRpZSgidW5hYmxlIHRvIHJlbmFtZSB0ZW1wb3JhcnkgcGFjayBmaWxlOiAlcyIsCi0JCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVuYW1lIHRlbXBvcmFyeSBwYWNrIGZpbGUiKTsKIAogCQkJLyoKIAkJCSAqIFBhY2tzIGFyZSBydW50aW1lIGFjY2Vzc2VkIGluIHRoZWlyIG10aW1lCkBAIC01NjYsMTEgKzU2NCw5IEBACiAJCQlzbnByaW50Zih0bXBuYW1lLCBzaXplb2YodG1wbmFtZSksICIlcy0lcy5pZHgiLAogCQkJCSBiYXNlX25hbWUsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAkJCWlmIChhZGp1c3RfcGVybShpZHhfdG1wX25hbWUsIG1vZGUpKQotCQkJCWRpZSgidW5hYmxlIHRvIG1ha2UgdGVtcG9yYXJ5IGluZGV4IGZpbGUgcmVhZGFibGU6ICVzIiwKLQkJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oInVuYWJsZSB0byBtYWtlIHRlbXBvcmFyeSBpbmRleCBmaWxlIHJlYWRhYmxlIik7CiAJCQlpZiAocmVuYW1lKGlkeF90bXBfbmFtZSwgdG1wbmFtZSkpCi0JCQkJZGllKCJ1bmFibGUgdG8gcmVuYW1lIHRlbXBvcmFyeSBpbmRleCBmaWxlOiAlcyIsCi0JCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVuYW1lIHRlbXBvcmFyeSBpbmRleCBmaWxlIik7CiAKIAkJCWZyZWUoaWR4X3RtcF9uYW1lKTsKIAkJCWZyZWUocGFja190bXBfbmFtZSk7CkBAIC0xODc5LDcgKzE4NzUsNyBAQAogCQkJaWYgKCFmZXJyb3Ioc3RkaW4pKQogCQkJCWRpZSgiZmdldHMgcmV0dXJuZWQgTlVMTCwgbm90IEVPRiwgbm90IGVycm9yISIpOwogCQkJaWYgKGVycm5vICE9IEVJTlRSKQotCQkJCWRpZSgiZmdldHM6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oImZnZXRzIik7CiAJCQljbGVhcmVycihzdGRpbik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjI1OSw2ICsyMjU1LDEwIEBACiAJCQkJZGllKCJiYWQgJXMiLCBhcmcpOwogCQkJY29udGludWU7CiAJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1rZWVwLXRydWUtcGFyZW50cyIpKSB7CisJCQlncmFmdHNfcmVwbGFjZV9wYXJlbnRzID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CiAJCXVzYWdlKHBhY2tfdXNhZ2UpOwogCX0KIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi1wYWNrLXJlZnMuYyBiL2J1aWx0aW4tcGFjay1yZWZzLmMKaW5kZXggMzQyNDZkZi4uMDkxODYwYiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1wYWNrLXJlZnMuYworKysgYi9idWlsdGluLXBhY2stcmVmcy5jCkBAIC0xNSw3ICsxNSw3IEBACiAJCU9QVF9CSVQoMCwgInBydW5lIiwgJmZsYWdzLCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiLCBQQUNLX1JFRlNfUFJVTkUpLAogCQlPUFRfRU5EKCksCiAJfTsKLQlpZiAocGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRzLCBwYWNrX3JlZnNfdXNhZ2UsIDApKQorCWlmIChwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgcGFja19yZWZzX3VzYWdlLCAwKSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHBhY2tfcmVmc191c2FnZSwgb3B0cyk7CiAJcmV0dXJuIHBhY2tfcmVmcyhmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLXBydW5lLmMgYi9idWlsdGluLXBydW5lLmMKaW5kZXggMTQ1YmE4My4uMGVkOWNjZSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1wcnVuZS5jCisrKyBiL2J1aWx0aW4tcHJ1bmUuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKIAlpbml0X3JldmlzaW9ucygmcmV2cywgcHJlZml4KTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHBydW5lX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHBydW5lX3VzYWdlLCAwKTsKIAl3aGlsZSAoYXJnYy0tKSB7CiAJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJCWNvbnN0IGNoYXIgKm5hbWUgPSAqYXJndisrOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1wdXNoLmMgYi9idWlsdGluLXB1c2guYwppbmRleCAyZWFiY2QzLi5mODM3NmNmIDEwMDY0NAotLS0gYS9idWlsdGluLXB1c2guYworKysgYi9idWlsdGluLXB1c2guYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwdXNoX3VzYWdlW10gPSB7Ci0JImdpdCBwdXNoIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS10YWdzXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XSBbLS1yZXBvPTxyZXBvc2l0b3J5Pl0gWy1mIHwgLS1mb3JjZV0gWy12XSBbPHJlcG9zaXRvcnk+IDxyZWZzcGVjPi4uLl0iLAorCSJnaXQgcHVzaCBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tcG9yY2VsYWluXSBbLS10YWdzXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XSBbLS1yZXBvPTxyZXBvc2l0b3J5Pl0gWy1mIHwgLS1mb3JjZV0gWy12XSBbPHJlcG9zaXRvcnk+IDxyZWZzcGVjPi4uLl0iLAogCU5VTEwsCiB9OwogCkBAIC02NCwzNiArNjQsMTEgQEAKIAlhZGRfcmVmc3BlYyhyZWZzcGVjLmJ1Zik7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICp3YXJuX3VuY29uZmlndXJlZF9wdXNoX21zZ1tdID0gewotCSJZb3UgZGlkIG5vdCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgdGhlIGN1cnJlbnQgcmVtb3RlIiwKLQkiaGFzIG5vdCBjb25maWd1cmVkIGFueSBwdXNoIHJlZnNwZWNzLiBUaGUgZGVmYXVsdCBhY3Rpb24gaW4gdGhpcyIsCi0JImNhc2UgaXMgdG8gcHVzaCBhbGwgbWF0Y2hpbmcgcmVmc3BlY3MsIHRoYXQgaXMsIGFsbCBicmFuY2hlcyIsCi0JInRoYXQgZXhpc3QgYm90aCBsb2NhbGx5IGFuZCByZW1vdGVseSB3aWxsIGJlIHVwZGF0ZWQuICBUaGlzIG1heSIsCi0JIm5vdCBuZWNlc3NhcmlseSBiZSB3aGF0IHlvdSB3YW50IHRvIGhhcHBlbi4iLAotCSIiLAotCSJZb3UgY2FuIHNwZWNpZnkgd2hhdCBhY3Rpb24geW91IHdhbnQgdG8gdGFrZSBpbiB0aGlzIGNhc2UsIGFuZCIsCi0JImF2b2lkIHNlZWluZyB0aGlzIG1lc3NhZ2UgYWdhaW4sIGJ5IGNvbmZpZ3VyaW5nICdwdXNoLmRlZmF1bHQnIHRvOiIsCi0JIiAgJ25vdGhpbmcnICA6IERvIG5vdCBwdXNoIGFueXRoaW5nIiwKLQkiICAnbWF0Y2hpbmcnIDogUHVzaCBhbGwgbWF0Y2hpbmcgYnJhbmNoZXMgKGRlZmF1bHQpIiwKLQkiICAndHJhY2tpbmcnIDogUHVzaCB0aGUgY3VycmVudCBicmFuY2ggdG8gd2hhdGV2ZXIgaXQgaXMgdHJhY2tpbmciLAotCSIgICdjdXJyZW50JyAgOiBQdXNoIHRoZSBjdXJyZW50IGJyYW5jaCIKLX07Ci0KLXN0YXRpYyB2b2lkIHdhcm5fdW5jb25maWd1cmVkX3B1c2godm9pZCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3YXJuX3VuY29uZmlndXJlZF9wdXNoX21zZyk7IGkrKykKLQkJd2FybmluZygiJXMiLCB3YXJuX3VuY29uZmlndXJlZF9wdXNoX21zZ1tpXSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldHVwX2RlZmF1bHRfcHVzaF9yZWZzcGVjcyh2b2lkKQogewogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAlzd2l0Y2ggKHB1c2hfZGVmYXVsdCkgewotCWNhc2UgUFVTSF9ERUZBVUxUX1VOU1BFQ0lGSUVEOgotCQl3YXJuX3VuY29uZmlndXJlZF9wdXNoKCk7Ci0JCS8qIGZhbGx0aHJvdWdoICovCi0KKwlkZWZhdWx0OgogCWNhc2UgUFVTSF9ERUZBVUxUX01BVENISU5HOgogCQlhZGRfcmVmc3BlYygiOiIpOwogCQlicmVhazsKQEAgLTExNyw2ICs5Miw4IEBACiB7CiAJaW50IGksIGVycnM7CiAJc3RydWN0IHJlbW90ZSAqcmVtb3RlID0gcmVtb3RlX2dldChyZXBvKTsKKwljb25zdCBjaGFyICoqdXJsOworCWludCB1cmxfbnI7CiAKIAlpZiAoIXJlbW90ZSkgewogCQlpZiAocmVwbykKQEAgLTE1MiwxMCArMTI5LDE4IEBACiAJCQlzZXR1cF9kZWZhdWx0X3B1c2hfcmVmc3BlY3MoKTsKIAl9CiAJZXJycyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHJlbW90ZS0+dXJsX25yOyBpKyspIHsKKwlpZiAocmVtb3RlLT5wdXNodXJsX25yKSB7CisJCXVybCA9IHJlbW90ZS0+cHVzaHVybDsKKwkJdXJsX25yID0gcmVtb3RlLT5wdXNodXJsX25yOworCX0gZWxzZSB7CisJCXVybCA9IHJlbW90ZS0+dXJsOworCQl1cmxfbnIgPSByZW1vdGUtPnVybF9ucjsKKwl9CisJZm9yIChpID0gMDsgaSA8IHVybF9ucjsgaSsrKSB7CiAJCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCA9Ci0JCQl0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgcmVtb3RlLT51cmxbaV0pOworCQkJdHJhbnNwb3J0X2dldChyZW1vdGUsIHVybFtpXSk7CiAJCWludCBlcnI7CisJCWludCBub25mYXN0Zm9yd2FyZDsKIAkJaWYgKHJlY2VpdmVwYWNrKQogCQkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LAogCQkJCQkgICAgIFRSQU5TX09QVF9SRUNFSVZFUEFDSywgcmVjZWl2ZXBhY2spOwpAQCAtMTYzLDE0ICsxNDgsMjAgQEAKIAkJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX1RISU4sICJ5ZXMiKTsKIAogCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9WRVJCT1NFKQotCQkJZnByaW50ZihzdGRlcnIsICJQdXNoaW5nIHRvICVzXG4iLCByZW1vdGUtPnVybFtpXSk7Ci0JCWVyciA9IHRyYW5zcG9ydF9wdXNoKHRyYW5zcG9ydCwgcmVmc3BlY19uciwgcmVmc3BlYywgZmxhZ3MpOworCQkJZnByaW50ZihzdGRlcnIsICJQdXNoaW5nIHRvICVzXG4iLCB1cmxbaV0pOworCQllcnIgPSB0cmFuc3BvcnRfcHVzaCh0cmFuc3BvcnQsIHJlZnNwZWNfbnIsIHJlZnNwZWMsIGZsYWdzLAorCQkJCSAgICAgJm5vbmZhc3Rmb3J3YXJkKTsKIAkJZXJyIHw9IHRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCk7CiAKIAkJaWYgKCFlcnIpCiAJCQljb250aW51ZTsKIAotCQllcnJvcigiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciLCByZW1vdGUtPnVybFtpXSk7CisJCWVycm9yKCJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIsIHVybFtpXSk7CisJCWlmIChub25mYXN0Zm9yd2FyZCkgeworCQkJcHJpbnRmKCJUbyBwcmV2ZW50IHlvdSBmcm9tIGxvc2luZyBoaXN0b3J5LCBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMgd2VyZSByZWplY3RlZFxuIgorCQkJICAgICAgICJNZXJnZSB0aGUgcmVtb3RlIGNoYW5nZXMgYmVmb3JlIHB1c2hpbmcgYWdhaW4uICBTZWUgdGhlICdub24tZmFzdCBmb3J3YXJkJ1xuIgorCQkJICAgICAgICJzZWN0aW9uIG9mICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLlxuIik7CisJCX0KIAkJZXJycysrOwogCX0KIAlyZXR1cm4gISFlcnJzOwpAQCAtMTkxLDYgKzE4Miw3IEBACiAJCQkgICAgKFRSQU5TUE9SVF9QVVNIX01JUlJPUnxUUkFOU1BPUlRfUFVTSF9GT1JDRSkpLAogCQlPUFRfQk9PTEVBTiggMCAsICJ0YWdzIiwgJnRhZ3MsICJwdXNoIHRhZ3MiKSwKIAkJT1BUX0JJVCggMCAsICJkcnktcnVuIiwgJmZsYWdzLCAiZHJ5IHJ1biIsIFRSQU5TUE9SVF9QVVNIX0RSWV9SVU4pLAorCQlPUFRfQklUKCAwLCAgInBvcmNlbGFpbiIsICZmbGFncywgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IiwgVFJBTlNQT1JUX1BVU0hfUE9SQ0VMQUlOKSwKIAkJT1BUX0JJVCgnZicsICJmb3JjZSIsICZmbGFncywgImZvcmNlIHVwZGF0ZXMiLCBUUkFOU1BPUlRfUFVTSF9GT1JDRSksCiAJCU9QVF9CT09MRUFOKCAwICwgInRoaW4iLCAmdGhpbiwgInVzZSB0aGluIHBhY2siKSwKIAkJT1BUX1NUUklORyggMCAsICJyZWNlaXZlLXBhY2siLCAmcmVjZWl2ZXBhY2ssICJyZWNlaXZlLXBhY2siLCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iKSwKQEAgLTE5OCw3ICsxOTAsNyBAQAogCQlPUFRfRU5EKCkKIAl9OwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgcHVzaF91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBwdXNoX3VzYWdlLCAwKTsKIAogCWlmICh0YWdzKQogCQlhZGRfcmVmc3BlYygicmVmcy90YWdzLyoiKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmVjZWl2ZS1wYWNrLmMgYi9idWlsdGluLXJlY2VpdmUtcGFjay5jCmluZGV4IDBiMDhkYTkuLjZlYzFkMDUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcmVjZWl2ZS1wYWNrLmMKKysrIGIvYnVpbHRpbi1yZWNlaXZlLXBhY2suYwpAQCAtMTIzLDI3ICsxMjMsMjcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIHByZV9yZWNlaXZlX2hvb2tbXSA9ICJob29rcy9wcmUtcmVjZWl2ZSI7CiBzdGF0aWMgY29uc3QgY2hhciBwb3N0X3JlY2VpdmVfaG9va1tdID0gImhvb2tzL3Bvc3QtcmVjZWl2ZSI7CiAKLXN0YXRpYyBpbnQgaG9va19zdGF0dXMoaW50IGNvZGUsIGNvbnN0IGNoYXIgKmhvb2tfbmFtZSkKK3N0YXRpYyBpbnQgcnVuX3N0YXR1cyhpbnQgY29kZSwgY29uc3QgY2hhciAqY21kX25hbWUpCiB7CiAJc3dpdGNoIChjb2RlKSB7CiAJY2FzZSAwOgogCQlyZXR1cm4gMDsKIAljYXNlIC1FUlJfUlVOX0NPTU1BTkRfRk9SSzoKLQkJcmV0dXJuIGVycm9yKCJob29rIGZvcmsgZmFpbGVkIik7CisJCXJldHVybiBlcnJvcigiZm9yayBvZiAlcyBmYWlsZWQiLCBjbWRfbmFtZSk7CiAJY2FzZSAtRVJSX1JVTl9DT01NQU5EX0VYRUM6Ci0JCXJldHVybiBlcnJvcigiaG9vayBleGVjdXRlIGZhaWxlZCIpOworCQlyZXR1cm4gZXJyb3IoImV4ZWN1dGUgb2YgJXMgZmFpbGVkIiwgY21kX25hbWUpOwogCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9QSVBFOgotCQlyZXR1cm4gZXJyb3IoImhvb2sgcGlwZSBmYWlsZWQiKTsKKwkJcmV0dXJuIGVycm9yKCJwaXBlIGZhaWxlZCIpOwogCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEOgogCQlyZXR1cm4gZXJyb3IoIndhaXRwaWQgZmFpbGVkIik7CiAJY2FzZSAtRVJSX1JVTl9DT01NQU5EX1dBSVRQSURfV1JPTkdfUElEOgogCQlyZXR1cm4gZXJyb3IoIndhaXRwaWQgaXMgY29uZnVzZWQiKTsKIAljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRF9TSUdOQUw6Ci0JCXJldHVybiBlcnJvcigiJXMgZGllZCBvZiBzaWduYWwiLCBob29rX25hbWUpOworCQlyZXR1cm4gZXJyb3IoIiVzIGRpZWQgb2Ygc2lnbmFsIiwgY21kX25hbWUpOwogCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX05PRVhJVDoKLQkJcmV0dXJuIGVycm9yKCIlcyBkaWVkIHN0cmFuZ2VseSIsIGhvb2tfbmFtZSk7CisJCXJldHVybiBlcnJvcigiJXMgZGllZCBzdHJhbmdlbHkiLCBjbWRfbmFtZSk7CiAJZGVmYXVsdDoKLQkJZXJyb3IoIiVzIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJWQiLCBob29rX25hbWUsIC1jb2RlKTsKKwkJZXJyb3IoIiVzIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJWQiLCBjbWRfbmFtZSwgLWNvZGUpOwogCQlyZXR1cm4gLWNvZGU7CiAJfQogfQpAQCAtMTc0LDcgKzE3NCw3IEBACiAKIAljb2RlID0gc3RhcnRfY29tbWFuZCgmcHJvYyk7CiAJaWYgKGNvZGUpCi0JCXJldHVybiBob29rX3N0YXR1cyhjb2RlLCBob29rX25hbWUpOworCQlyZXR1cm4gcnVuX3N0YXR1cyhjb2RlLCBob29rX25hbWUpOwogCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CiAJCWlmICghY21kLT5lcnJvcl9zdHJpbmcpIHsKIAkJCXNpemVfdCBuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzICVzICVzXG4iLApAQCAtMTg2LDEzICsxODYsMTIgQEAKIAkJfQogCX0KIAljbG9zZShwcm9jLmluKTsKLQlyZXR1cm4gaG9va19zdGF0dXMoZmluaXNoX2NvbW1hbmQoJnByb2MpLCBob29rX25hbWUpOworCXJldHVybiBydW5fc3RhdHVzKGZpbmlzaF9jb21tYW5kKCZwcm9jKSwgaG9va19uYW1lKTsKIH0KIAogc3RhdGljIGludCBydW5fdXBkYXRlX2hvb2soc3RydWN0IGNvbW1hbmQgKmNtZCkKIHsKIAlzdGF0aWMgY29uc3QgY2hhciB1cGRhdGVfaG9va1tdID0gImhvb2tzL3VwZGF0ZSI7Ci0Jc3RydWN0IGNoaWxkX3Byb2Nlc3MgcHJvYzsKIAljb25zdCBjaGFyICphcmd2WzVdOwogCiAJaWYgKGFjY2Vzcyh1cGRhdGVfaG9vaywgWF9PSykgPCAwKQpAQCAtMjA0LDEyICsyMDMsOSBAQAogCWFyZ3ZbM10gPSBzaGExX3RvX2hleChjbWQtPm5ld19zaGExKTsKIAlhcmd2WzRdID0gTlVMTDsKIAotCW1lbXNldCgmcHJvYywgMCwgc2l6ZW9mKHByb2MpKTsKLQlwcm9jLmFyZ3YgPSBhcmd2OwotCXByb2Mubm9fc3RkaW4gPSAxOwotCXByb2Muc3Rkb3V0X3RvX3N0ZGVyciA9IDE7Ci0KLQlyZXR1cm4gaG9va19zdGF0dXMocnVuX2NvbW1hbmQoJnByb2MpLCB1cGRhdGVfaG9vayk7CisJcmV0dXJuIHJ1bl9zdGF0dXMocnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX0NPTU1BTkRfTk9fU1RESU4gfAorCQkJCQlSVU5fQ09NTUFORF9TVERPVVRfVE9fU1RERVJSKSwKKwkJCXVwZGF0ZV9ob29rKTsKIH0KIAogc3RhdGljIGludCBpc19yZWZfY2hlY2tlZF9vdXQoY29uc3QgY2hhciAqcmVmKQpAQCAtMzk4LDcgKzM5NCw3IEBACiBzdGF0aWMgdm9pZCBydW5fdXBkYXRlX3Bvc3RfaG9vayhzdHJ1Y3QgY29tbWFuZCAqY21kKQogewogCXN0cnVjdCBjb21tYW5kICpjbWRfcDsKLQlpbnQgYXJnYzsKKwlpbnQgYXJnYywgc3RhdHVzOwogCWNvbnN0IGNoYXIgKiphcmd2OwogCiAJZm9yIChhcmdjID0gMCwgY21kX3AgPSBjbWQ7IGNtZF9wOyBjbWRfcCA9IGNtZF9wLT5uZXh0KSB7CkBAIC00MjEsOCArNDE3LDkgQEAKIAkJYXJnYysrOwogCX0KIAlhcmd2W2FyZ2NdID0gTlVMTDsKLQlydW5fY29tbWFuZF92X29wdChhcmd2LCBSVU5fQ09NTUFORF9OT19TVERJTgotCQl8IFJVTl9DT01NQU5EX1NURE9VVF9UT19TVERFUlIpOworCXN0YXR1cyA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9DT01NQU5EX05PX1NURElOCisJCQl8IFJVTl9DT01NQU5EX1NURE9VVF9UT19TVERFUlIpOworCXJ1bl9zdGF0dXMoc3RhdHVzLCB1cGRhdGVfcG9zdF9ob29rKTsKIH0KIAogc3RhdGljIHZvaWQgZXhlY3V0ZV9jb21tYW5kcyhjb25zdCBjaGFyICp1bnBhY2tlcl9lcnJvcikKQEAgLTUzOCwyNCArNTM1LDEwIEBACiAJCXVucGFja2VyW2krK10gPSBoZHJfYXJnOwogCQl1bnBhY2tlcltpKytdID0gTlVMTDsKIAkJY29kZSA9IHJ1bl9jb21tYW5kX3Zfb3B0KHVucGFja2VyLCBSVU5fR0lUX0NNRCk7Ci0JCXN3aXRjaCAoY29kZSkgewotCQljYXNlIDA6CisJCWlmICghY29kZSkKIAkJCXJldHVybiBOVUxMOwotCQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfRk9SSzoKLQkJCXJldHVybiAidW5wYWNrIGZvcmsgZmFpbGVkIjsKLQkJY2FzZSAtRVJSX1JVTl9DT01NQU5EX0VYRUM6Ci0JCQlyZXR1cm4gInVucGFjayBleGVjdXRlIGZhaWxlZCI7Ci0JCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEOgotCQkJcmV0dXJuICJ3YWl0cGlkIGZhaWxlZCI7Ci0JCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX1dST05HX1BJRDoKLQkJCXJldHVybiAid2FpdHBpZCBpcyBjb25mdXNlZCI7Ci0JCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX1NJR05BTDoKLQkJCXJldHVybiAidW5wYWNrZXIgZGllZCBvZiBzaWduYWwiOwotCQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRF9OT0VYSVQ6Ci0JCQlyZXR1cm4gInVucGFja2VyIGRpZWQgc3RyYW5nZWx5IjsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAidW5wYWNrZXIgZXhpdGVkIHdpdGggZXJyb3IgY29kZSI7Ci0JCX0KKwkJcnVuX3N0YXR1cyhjb2RlLCB1bnBhY2tlclswXSk7CisJCXJldHVybiAidW5wYWNrLW9iamVjdHMgYWJub3JtYWwgZXhpdCI7CiAJfSBlbHNlIHsKIAkJY29uc3QgY2hhciAqa2VlcGVyWzddOwogCQlpbnQgcywgc3RhdHVzLCBpID0gMDsKQEAgLTU3OCw4ICs1NjEsMTEgQEAKIAkJaXAuYXJndiA9IGtlZXBlcjsKIAkJaXAub3V0ID0gLTE7CiAJCWlwLmdpdF9jbWQgPSAxOwotCQlpZiAoc3RhcnRfY29tbWFuZCgmaXApKQorCQlzdGF0dXMgPSBzdGFydF9jb21tYW5kKCZpcCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCXJ1bl9zdGF0dXMoc3RhdHVzLCBrZWVwZXJbMF0pOwogCQkJcmV0dXJuICJpbmRleC1wYWNrIGZvcmsgZmFpbGVkIjsKKwkJfQogCQlwYWNrX2xvY2tmaWxlID0gaW5kZXhfcGFja19sb2NrZmlsZShpcC5vdXQpOwogCQljbG9zZShpcC5vdXQpOwogCQlzdGF0dXMgPSBmaW5pc2hfY29tbWFuZCgmaXApOwpAQCAtNTg3LDYgKzU3Myw3IEBACiAJCQlyZXByZXBhcmVfcGFja2VkX2dpdCgpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KKwkJcnVuX3N0YXR1cyhzdGF0dXMsIGtlZXBlclswXSk7CiAJCXJldHVybiAiaW5kZXgtcGFjayBhYm5vcm1hbCBleGl0IjsKIAl9CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLXJlbW90ZS5jIGIvYnVpbHRpbi1yZW1vdGUuYwppbmRleCA3Njg1Y2ZjLi4wMDhhYmZlIDEwMDY0NAotLS0gYS9idWlsdGluLXJlbW90ZS5jCisrKyBiL2J1aWx0aW4tcmVtb3RlLmMKQEAgLTc5LDcgKzc5LDggQEAKIAkJT1BUX0VORCgpCiAJfTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwKKwkJCSAgICAgMCk7CiAKIAlpZiAoYXJnYyA8IDIpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV91c2FnZSwgb3B0aW9ucyk7CkBAIC0yOTQsMTcgKzI5NSwxNCBAQAogCXN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMpCiB7CiAJc3RydWN0IHJlbW90ZSAqcmVtb3RlID0gc3RhdGVzLT5yZW1vdGU7Ci0Jc3RydWN0IHJlZiAqcmVmLCAqbG9jYWxfcmVmcywgKnB1c2hfbWFwLCAqKnB1c2hfdGFpbDsKKwlzdHJ1Y3QgcmVmICpyZWYsICpsb2NhbF9yZWZzLCAqcHVzaF9tYXA7CiAJaWYgKHJlbW90ZS0+bWlycm9yKQogCQlyZXR1cm4gMDsKIAogCWxvY2FsX3JlZnMgPSBnZXRfbG9jYWxfaGVhZHMoKTsKIAlwdXNoX21hcCA9IGNvcHlfcmVmX2xpc3QocmVtb3RlX3JlZnMpOwogCi0JcHVzaF90YWlsID0gJnB1c2hfbWFwOwotCXdoaWxlICgqcHVzaF90YWlsKQotCQlwdXNoX3RhaWwgPSAmKCgqcHVzaF90YWlsKS0+bmV4dCk7Ci0JbWF0Y2hfcmVmcyhsb2NhbF9yZWZzLCBwdXNoX21hcCwgJnB1c2hfdGFpbCwgcmVtb3RlLT5wdXNoX3JlZnNwZWNfbnIsCisJbWF0Y2hfcmVmcyhsb2NhbF9yZWZzLCAmcHVzaF9tYXAsIHJlbW90ZS0+cHVzaF9yZWZzcGVjX25yLAogCQkgICByZW1vdGUtPnB1c2hfcmVmc3BlYywgTUFUQ0hfUkVGU19OT05FKTsKIAogCXN0YXRlcy0+cHVzaC5zdHJkdXBfc3RyaW5ncyA9IDE7CkBAIC03NDIsNyArNzQwLDcgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIGNsZWFyX3B1c2hfaW5mbyh2b2lkICp1dGlsLCBjb25zdCBjaGFyICpzdHJpbmcpCitzdGF0aWMgdm9pZCBjbGVhcl9wdXNoX2luZm8odm9pZCAqdXRpbCwgY29uc3QgY2hhciAqc3RyaW5nKQogewogCXN0cnVjdCBwdXNoX2luZm8gKmluZm8gPSB1dGlsOwogCWZyZWUoaW5mby0+ZGVzdCk7CkBAIC04MTcsNyArODE1LDcgQEAKIAlpbnQgYW55X3JlYmFzZTsKIH07CiAKLWludCBhZGRfcmVtb3RlX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3N0YXRpYyBpbnQgYWRkX3JlbW90ZV90b19zaG93X2luZm8oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCiB7CiAJc3RydWN0IHNob3dfaW5mbyAqaW5mbyA9IGNiX2RhdGE7CiAJaW50IG4gPSBzdHJsZW4oaXRlbS0+c3RyaW5nKTsKQEAgLTgyNyw3ICs4MjUsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc2hvd19yZW1vdGVfaW5mb19pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQorc3RhdGljIGludCBzaG93X3JlbW90ZV9pbmZvX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCiB7CiAJc3RydWN0IHNob3dfaW5mbyAqaW5mbyA9IGNiX2RhdGE7CiAJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcyA9IGluZm8tPnN0YXRlczsKQEAgLTg1NCw3ICs4NTIsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYWRkX2xvY2FsX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqYnJhbmNoX2l0ZW0sIHZvaWQgKmNiX2RhdGEpCitzdGF0aWMgaW50IGFkZF9sb2NhbF90b19zaG93X2luZm8oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmJyYW5jaF9pdGVtLCB2b2lkICpjYl9kYXRhKQogewogCXN0cnVjdCBzaG93X2luZm8gKnNob3dfaW5mbyA9IGNiX2RhdGE7CiAJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcyA9IHNob3dfaW5mby0+c3RhdGVzOwpAQCAtODc2LDcgKzg3NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzaG93X2xvY2FsX2luZm9faXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3N0YXRpYyBpbnQgc2hvd19sb2NhbF9pbmZvX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCiB7CiAJc3RydWN0IHNob3dfaW5mbyAqc2hvd19pbmZvID0gY2JfZGF0YTsKIAlzdHJ1Y3QgYnJhbmNoX2luZm8gKmJyYW5jaF9pbmZvID0gaXRlbS0+dXRpbDsKQEAgLTkwOCw3ICs5MDYsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYWRkX3B1c2hfdG9fc2hvd19pbmZvKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpwdXNoX2l0ZW0sIHZvaWQgKmNiX2RhdGEpCitzdGF0aWMgaW50IGFkZF9wdXNoX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcHVzaF9pdGVtLCB2b2lkICpjYl9kYXRhKQogewogCXN0cnVjdCBzaG93X2luZm8gKnNob3dfaW5mbyA9IGNiX2RhdGE7CiAJc3RydWN0IHB1c2hfaW5mbyAqcHVzaF9pbmZvID0gcHVzaF9pdGVtLT51dGlsOwpAQCAtOTM3LDcgKzkzNSw3IEBACiAJcmV0dXJuIGNtcCA/IGNtcCA6IHN0cmNtcChhX3B1c2gtPmRlc3QsIGJfcHVzaC0+ZGVzdCk7CiB9CiAKLWludCBzaG93X3B1c2hfaW5mb19pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQorc3RhdGljIGludCBzaG93X3B1c2hfaW5mb19pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQogewogCXN0cnVjdCBzaG93X2luZm8gKnNob3dfaW5mbyA9IGNiX2RhdGE7CiAJc3RydWN0IHB1c2hfaW5mbyAqcHVzaF9pbmZvID0gaXRlbS0+dXRpbDsKQEAgLTk4Niw3ICs5ODQsOCBAQAogCXN0cnVjdCBzdHJpbmdfbGlzdCBpbmZvX2xpc3QgPSB7IE5VTEwsIDAsIDAsIDAgfTsKIAlzdHJ1Y3Qgc2hvd19pbmZvIGluZm87CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfdXNhZ2UsCisJCQkgICAgIDApOwogCiAJaWYgKGFyZ2MgPCAxKQogCQlyZXR1cm4gc2hvd19hbGwoKTsKQEAgLTEwMDAsMTUgKzk5OSwyNSBAQAogCWluZm8ubGlzdCA9ICZpbmZvX2xpc3Q7CiAJZm9yICg7IGFyZ2M7IGFyZ2MtLSwgYXJndisrKSB7CiAJCWludCBpOworCQljb25zdCBjaGFyICoqdXJsOworCQlpbnQgdXJsX25yOwogCiAJCWdldF9yZW1vdGVfcmVmX3N0YXRlcygqYXJndiwgJnN0YXRlcywgcXVlcnlfZmxhZyk7CiAKIAkJcHJpbnRmKCIqIHJlbW90ZSAlc1xuIiwgKmFyZ3YpOwotCQlpZiAoc3RhdGVzLnJlbW90ZS0+dXJsX25yKSB7Ci0JCQlmb3IgKGk9MDsgaSA8IHN0YXRlcy5yZW1vdGUtPnVybF9ucjsgaSsrKQotCQkJCXByaW50ZigiICBVUkw6ICVzXG4iLCBzdGF0ZXMucmVtb3RlLT51cmxbaV0pOwotCQl9IGVsc2UKLQkJCXByaW50ZigiICBVUkw6ICVzXG4iLCAiKG5vIFVSTCkiKTsKKwkJcHJpbnRmKCIgIEZldGNoIFVSTDogJXNcbiIsIHN0YXRlcy5yZW1vdGUtPnVybF9uciA+IDAgPworCQkJc3RhdGVzLnJlbW90ZS0+dXJsWzBdIDogIihubyBVUkwpIik7CisJCWlmIChzdGF0ZXMucmVtb3RlLT5wdXNodXJsX25yKSB7CisJCQl1cmwgPSBzdGF0ZXMucmVtb3RlLT5wdXNodXJsOworCQkJdXJsX25yID0gc3RhdGVzLnJlbW90ZS0+cHVzaHVybF9ucjsKKwkJfSBlbHNlIHsKKwkJCXVybCA9IHN0YXRlcy5yZW1vdGUtPnVybDsKKwkJCXVybF9uciA9IHN0YXRlcy5yZW1vdGUtPnVybF9ucjsKKwkJfQorCQlmb3IgKGk9MDsgaSA8IHVybF9ucjsgaSsrKQorCQkJcHJpbnRmKCIgIFB1c2ggIFVSTDogJXNcbiIsIHVybFtpXSk7CisJCWlmICghaSkKKwkJCXByaW50ZigiICBQdXNoICBVUkw6ICVzXG4iLCAiKG5vIFVSTCkiKTsKIAkJaWYgKG5vX3F1ZXJ5KQogCQkJcHJpbnRmKCIgIEhFQUQgYnJhbmNoOiAobm90IHF1ZXJpZWQpXG4iKTsKIAkJZWxzZSBpZiAoIXN0YXRlcy5oZWFkcy5ucikKQEAgLTEwNzksNyArMTA4OCw4IEBACiAJCQkgICAgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiKSwKIAkJT1BUX0VORCgpCiAJfTsKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfdXNhZ2UsCisJCQkgICAgIDApOwogCWlmIChhcmdjKQogCQlzdHJidWZfYWRkZigmYnVmLCAicmVmcy9yZW1vdGVzLyVzL0hFQUQiLCBhcmd2WzBdKTsKIApAQCAtMTEzMyw3ICsxMTQzLDggQEAKIAkJT1BUX0VORCgpCiAJfTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwKKwkJCSAgICAgMCk7CiAKIAlpZiAoYXJnYyA8IDEpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV91c2FnZSwgb3B0aW9ucyk7CkBAIC0xMTg2LDcgKzExOTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcmVtb3RlX2dyb3VwIHsKK3N0YXRpYyBzdHJ1Y3QgcmVtb3RlX2dyb3VwIHsKIAljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdDsKIH0gcmVtb3RlX2dyb3VwOwpAQCAtMTIyMyw3ICsxMjM0LDcgQEAKIAkJT1BUX0VORCgpCiAJfTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3VzYWdlLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3VzYWdlLAogCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CiAJaWYgKGFyZ2MgPCAyKSB7CiAJCWFyZ2MgPSAyOwpAQCAtMTI2NSwxNCArMTI3NiwyOSBAQAogc3RhdGljIGludCBnZXRfb25lX2VudHJ5KHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgdm9pZCAqcHJpdikKIHsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QgPSBwcml2OworCXN0cnVjdCBzdHJidWYgdXJsX2J1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKip1cmw7CisJaW50IGksIHVybF9ucjsKIAogCWlmIChyZW1vdGUtPnVybF9uciA+IDApIHsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHJlbW90ZS0+dXJsX25yOyBpKyspCi0JCQlzdHJpbmdfbGlzdF9hcHBlbmQocmVtb3RlLT5uYW1lLCBsaXN0KS0+dXRpbCA9ICh2b2lkICopcmVtb3RlLT51cmxbaV07CisJCXN0cmJ1Zl9hZGRmKCZ1cmxfYnVmLCAiJXMgKGZldGNoKSIsIHJlbW90ZS0+dXJsWzBdKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKHJlbW90ZS0+bmFtZSwgbGlzdCktPnV0aWwgPQorCQkJCXN0cmJ1Zl9kZXRhY2goJnVybF9idWYsIE5VTEwpOwogCX0gZWxzZQogCQlzdHJpbmdfbGlzdF9hcHBlbmQocmVtb3RlLT5uYW1lLCBsaXN0KS0+dXRpbCA9IE5VTEw7CisJaWYgKHJlbW90ZS0+cHVzaHVybF9ucikgeworCQl1cmwgPSByZW1vdGUtPnB1c2h1cmw7CisJCXVybF9uciA9IHJlbW90ZS0+cHVzaHVybF9ucjsKKwl9IGVsc2UgeworCQl1cmwgPSByZW1vdGUtPnVybDsKKwkJdXJsX25yID0gcmVtb3RlLT51cmxfbnI7CisJfQorCWZvciAoaSA9IDA7IGkgPCB1cmxfbnI7IGkrKykKKwl7CisJCXN0cmJ1Zl9hZGRmKCZ1cmxfYnVmLCAiJXMgKHB1c2gpIiwgdXJsW2ldKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKHJlbW90ZS0+bmFtZSwgbGlzdCktPnV0aWwgPQorCQkJCXN0cmJ1Zl9kZXRhY2goJnVybF9idWYsIE5VTEwpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTI4MCw3ICsxMzA2LDEwIEBACiBzdGF0aWMgaW50IHNob3dfYWxsKHZvaWQpCiB7CiAJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSB7IE5VTEwsIDAsIDAgfTsKLQlpbnQgcmVzdWx0ID0gZm9yX2VhY2hfcmVtb3RlKGdldF9vbmVfZW50cnksICZsaXN0KTsKKwlpbnQgcmVzdWx0OworCisJbGlzdC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJcmVzdWx0ID0gZm9yX2VhY2hfcmVtb3RlKGdldF9vbmVfZW50cnksICZsaXN0KTsKIAogCWlmICghcmVzdWx0KSB7CiAJCWludCBpOwpAQCAtMTI5OCw2ICsxMzI3LDcgQEAKIAkJCX0KIAkJfQogCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMSk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTMwOSw3ICsxMzM5LDcgQEAKIAl9OwogCWludCByZXN1bHQ7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3VzYWdlLAogCQlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAogCWlmIChhcmdjIDwgMSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmVzZXQuYyBiL2J1aWx0aW4tcmVzZXQuYwppbmRleCA3ZTdlYmFiLi41ZmExNzg5IDEwMDY0NAotLS0gYS9idWlsdGluLXJlc2V0LmMKKysrIGIvYnVpbHRpbi1yZXNldC5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF9yZXNldF91c2FnZSwKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF9yZXNldF91c2FnZSwKIAkJCQkJCVBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKIAlyZWZsb2dfYWN0aW9uID0gYXJnc190b19zdHIoYXJndik7CiAJc2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIsIHJlZmxvZ19hY3Rpb24sIDApOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZXYtbGlzdC5jIGIvYnVpbHRpbi1yZXYtbGlzdC5jCmluZGV4IDM4YThmMjMuLjRiYTFjMTIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcmV2LWxpc3QuYworKysgYi9idWlsdGluLXJldi1saXN0LmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogICoKICAqIGFuZCBQKDJebiArIHgpIDwgMC41IG1lYW5zIDJebiA8IDN4CiAgKi8KLXN0YXRpYyBpbnQgZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGludCBhbGwpCitpbnQgZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGludCBhbGwpCiB7CiAJaW50IG4sIHgsIGU7CiAKQEAgLTIyNSwyNyArMjI1LDQ2IEBACiAJcmV0dXJuIChlIDwgMyAqIHgpID8gbiA6IG4gLSAxOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X3RyaWVkX3JldnMoc3RydWN0IGNvbW1pdF9saXN0ICp0cmllZCwgaW50IHN0cmluZ2VkKQordm9pZCBwcmludF9jb21taXRfbGlzdChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCisJCSAgICAgICBjb25zdCBjaGFyICpmb3JtYXRfY3VyLAorCQkgICAgICAgY29uc3QgY2hhciAqZm9ybWF0X2xhc3QpCit7CisJZm9yICggOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQljb25zdCBjaGFyICpmb3JtYXQgPSBsaXN0LT5uZXh0ID8gZm9ybWF0X2N1ciA6IGZvcm1hdF9sYXN0OworCQlwcmludGYoZm9ybWF0LCBzaGExX3RvX2hleChsaXN0LT5pdGVtLT5vYmplY3Quc2hhMSkpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd190cmllZF9yZXZzKHN0cnVjdCBjb21taXRfbGlzdCAqdHJpZWQpCiB7CiAJcHJpbnRmKCJiaXNlY3RfdHJpZWQ9JyIpOwotCWZvciAoO3RyaWVkOyB0cmllZCA9IHRyaWVkLT5uZXh0KSB7Ci0JCWNoYXIgKmZvcm1hdCA9IHRyaWVkLT5uZXh0ID8gIiVzfCIgOiAiJXMiOwotCQlwcmludGYoZm9ybWF0LCBzaGExX3RvX2hleCh0cmllZC0+aXRlbS0+b2JqZWN0LnNoYTEpKTsKLQl9Ci0JcHJpbnRmKHN0cmluZ2VkID8gIicgJiZcbiIgOiAiJ1xuIik7CisJcHJpbnRfY29tbWl0X2xpc3QodHJpZWQsICIlc3wiLCAiJXMiKTsKKwlwcmludGYoIidcbiIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF92YXJfc3RyKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsKQoreworCXByaW50ZigiJXM9JyVzJ1xuIiwgdmFyLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBwcmludF92YXJfaW50KGNvbnN0IGNoYXIgKnZhciwgaW50IHZhbCkKK3sKKwlwcmludGYoIiVzPSVkXG4iLCB2YXIsIHZhbCk7CiB9CiAKIGludCBzaG93X2Jpc2VjdF92YXJzKHN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvLCBpbnQgcmVhY2hlcywgaW50IGFsbCkKIHsKIAlpbnQgY250LCBmbGFncyA9IGluZm8tPmJpc2VjdF9zaG93X2ZsYWdzOwotCWNoYXIgaGV4WzQxXSA9ICIiLCAqZm9ybWF0OworCWNoYXIgaGV4WzQxXSA9ICIiOwogCXN0cnVjdCBjb21taXRfbGlzdCAqdHJpZWQ7CiAJc3RydWN0IHJldl9pbmZvICpyZXZzID0gaW5mby0+cmV2czsKIAogCWlmICghcmV2cy0+Y29tbWl0cyAmJiAhKGZsYWdzICYgQklTRUNUX1NIT1dfVFJJRUQpKQogCQlyZXR1cm4gMTsKIAotCXJldnMtPmNvbW1pdHMgPSBmaWx0ZXJfc2tpcHBlZChyZXZzLT5jb21taXRzLCAmdHJpZWQsIGZsYWdzICYgQklTRUNUX1NIT1dfQUxMKTsKKwlyZXZzLT5jb21taXRzID0gZmlsdGVyX3NraXBwZWQocmV2cy0+Y29tbWl0cywgJnRyaWVkLAorCQkJCSAgICAgICBmbGFncyAmIEJJU0VDVF9TSE9XX0FMTCwKKwkJCQkgICAgICAgTlVMTCwgTlVMTCk7CiAKIAkvKgogCSAqIHJldnMtPmNvbW1pdHMgY2FuIHJlYWNoICJyZWFjaGVzIiBjb21taXRzIGFtb25nCkBAIC0yNjksMjggKzI4OCwxNCBAQAogCX0KIAogCWlmIChmbGFncyAmIEJJU0VDVF9TSE9XX1RSSUVEKQotCQlzaG93X3RyaWVkX3JldnModHJpZWQsIGZsYWdzICYgQklTRUNUX1NIT1dfU1RSSU5HRUQpOwotCWZvcm1hdCA9IChmbGFncyAmIEJJU0VDVF9TSE9XX1NUUklOR0VEKSA/Ci0JCSJiaXNlY3RfcmV2PSVzICYmXG4iCi0JCSJiaXNlY3RfbnI9JWQgJiZcbiIKLQkJImJpc2VjdF9nb29kPSVkICYmXG4iCi0JCSJiaXNlY3RfYmFkPSVkICYmXG4iCi0JCSJiaXNlY3RfYWxsPSVkICYmXG4iCi0JCSJiaXNlY3Rfc3RlcHM9JWRcbiIKLQkJOgotCQkiYmlzZWN0X3Jldj0lc1xuIgotCQkiYmlzZWN0X25yPSVkXG4iCi0JCSJiaXNlY3RfZ29vZD0lZFxuIgotCQkiYmlzZWN0X2JhZD0lZFxuIgotCQkiYmlzZWN0X2FsbD0lZFxuIgotCQkiYmlzZWN0X3N0ZXBzPSVkXG4iOwotCXByaW50Zihmb3JtYXQsCi0JICAgICAgIGhleCwKLQkgICAgICAgY250IC0gMSwKLQkgICAgICAgYWxsIC0gcmVhY2hlcyAtIDEsCi0JICAgICAgIHJlYWNoZXMgLSAxLAotCSAgICAgICBhbGwsCi0JICAgICAgIGVzdGltYXRlX2Jpc2VjdF9zdGVwcyhhbGwpKTsKKwkJc2hvd190cmllZF9yZXZzKHRyaWVkKTsKKworCXByaW50X3Zhcl9zdHIoImJpc2VjdF9yZXYiLCBoZXgpOworCXByaW50X3Zhcl9pbnQoImJpc2VjdF9uciIsIGNudCAtIDEpOworCXByaW50X3Zhcl9pbnQoImJpc2VjdF9nb29kIiwgYWxsIC0gcmVhY2hlcyAtIDEpOworCXByaW50X3Zhcl9pbnQoImJpc2VjdF9iYWQiLCByZWFjaGVzIC0gMSk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X2FsbCIsIGFsbCk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X3N0ZXBzIiwgZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGFsbCkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLXJldi1wYXJzZS5jIGIvYnVpbHRpbi1yZXYtcGFyc2UuYwppbmRleCAyMmM2ZDZhLi40NWJlYWQ2IDEwMDY0NAotLS0gYS9idWlsdGluLXJldi1wYXJzZS5jCisrKyBiL2J1aWx0aW4tcmV2LXBhcnNlLmMKQEAgLTMwMSw3ICszMDEsNyBAQAogCiBzdGF0aWMgaW50IGNtZF9wYXJzZW9wdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLQlzdGF0aWMgaW50IGtlZXBfZGFzaGRhc2ggPSAwOworCXN0YXRpYyBpbnQga2VlcF9kYXNoZGFzaCA9IDAsIHN0b3BfYXRfbm9uX29wdGlvbiA9IDA7CiAJc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBwYXJzZW9wdF91c2FnZVtdID0gewogCQkiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFtvcHRpb25zXSAtLSBbPGFyZ3M+Li4uXSIsCiAJCU5VTEwKQEAgLTMwOSw2ICszMDksOSBAQAogCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIHBhcnNlb3B0X29wdHNbXSA9IHsKIAkJT1BUX0JPT0xFQU4oMCwgImtlZXAtZGFzaGRhc2giLCAma2VlcF9kYXNoZGFzaCwKIAkJCQkJImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIpLAorCQlPUFRfQk9PTEVBTigwLCAic3RvcC1hdC1ub24tb3B0aW9uIiwgJnN0b3BfYXRfbm9uX29wdGlvbiwKKwkJCQkJInN0b3AgcGFyc2luZyBhZnRlciB0aGUgIgorCQkJCQkiZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIpLAogCQlPUFRfRU5EKCksCiAJfTsKIApAQCAtMzE4LDcgKzMyMSw3IEBACiAJaW50IG9uYiA9IDAsIG9zeiA9IDAsIHVuYiA9IDAsIHVzeiA9IDA7CiAKIAlzdHJidWZfYWRkc3RyKCZwYXJzZWQsICJzZXQgLS0iKTsKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwYXJzZW9wdF9vcHRzLCBwYXJzZW9wdF91c2FnZSwKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIHBhcnNlb3B0X29wdHMsIHBhcnNlb3B0X3VzYWdlLAogCSAgICAgICAgICAgICAgICAgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKIAlpZiAoYXJnYyA8IDEgfHwgc3RyY21wKGFyZ3ZbMF0sICItLSIpKQogCQl1c2FnZV93aXRoX29wdGlvbnMocGFyc2VvcHRfdXNhZ2UsIHBhcnNlb3B0X29wdHMpOwpAQCAtMzkzLDggKzM5Niw5IEBACiAJLyogcHV0IGFuIE9QVF9FTkQoKSAqLwogCUFMTE9DX0dST1cob3B0cywgb25iICsgMSwgb3N6KTsKIAltZW1zZXQob3B0cyArIG9uYiwgMCwgc2l6ZW9mKG9wdHNbb25iXSkpOwotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdHMsIHVzYWdlLAotCSAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGFzaGRhc2ggPyBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCA6IDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgdXNhZ2UsCisJCQlrZWVwX2Rhc2hkYXNoID8gUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggOiAwIHwKKwkJCXN0b3BfYXRfbm9uX29wdGlvbiA/IFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04gOiAwKTsKIAogCXN0cmJ1Zl9hZGRmKCZwYXJzZWQsICIgLS0iKTsKIAlzcV9xdW90ZV9hcmd2KCZwYXJzZWQsIGFyZ3YsIDApOwpAQCAtNDAyLDYgKzQwNiwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNtZF9zcV9xdW90ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChhcmdjKQorCQlzcV9xdW90ZV9hcmd2KCZidWYsIGFyZ3YsIDApOworCXByaW50ZigiJXNcbiIsIGJ1Zi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGRpZV9ub19zaW5nbGVfcmV2KGludCBxdWlldCkKIHsKIAlpZiAocXVpZXQpCkBAIC00MTksNiArNDM1LDkgQEAKIAlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCgiLS1wYXJzZW9wdCIsIGFyZ3ZbMV0pKQogCQlyZXR1cm4gY21kX3BhcnNlb3B0KGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4KTsKIAorCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKCItLXNxLXF1b3RlIiwgYXJndlsxXSkpCisJCXJldHVybiBjbWRfc3FfcXVvdGUoYXJnYyAtIDIsIGFyZ3YgKyAyKTsKKwogCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewpAQCAtNTc3LDcgKzU5Niw3IEBACiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCQlpZiAoIWdldGN3ZChjd2QsIFBBVEhfTUFYKSkKLQkJCQkJZGllKCJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKKwkJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKIAkJCQlwcmludGYoIiVzLy5naXRcbiIsIGN3ZCk7CiAJCQkJY29udGludWU7CiAJCQl9CmRpZmYgLS1naXQgYS9idWlsdGluLXJldmVydC5jIGIvYnVpbHRpbi1yZXZlcnQuYwppbmRleCAzZjI2MTRlLi4xNTFhYTZhIDEwMDY0NAotLS0gYS9idWlsdGluLXJldmVydC5jCisrKyBiL2J1aWx0aW4tcmV2ZXJ0LmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkJT1BUX0VORCgpLAogCX07CiAKLQlpZiAocGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCB1c2FnZV9zdHIsIDApICE9IDEpCisJaWYgKHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdXNhZ2Vfc3RyLCAwKSAhPSAxKQogCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2Vfc3RyLCBvcHRpb25zKTsKIAlhcmcgPSBhcmd2WzBdOwogCkBAIC0xMzUsNyArMTM1LDcgQEAKIHsKIAlpbnQgbGVuID0gc3RybGVuKHN0cmluZyk7CiAJaWYgKHdyaXRlX2luX2Z1bGwobXNnX2ZkLCBzdHJpbmcsIGxlbikgPCAwKQotCQlkaWUgKCJDb3VsZCBub3Qgd3JpdGUgdG8gTUVSR0VfTVNHIik7CisJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCB3cml0ZSB0byBNRVJHRV9NU0ciKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkX21lc3NhZ2VfdG9fbXNnKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCkBAIC0zMjMsOSArMzIzLDkgQEAKIAogCWVuY29kaW5nID0gZ2V0X2VuY29kaW5nKG1lc3NhZ2UpOwogCWlmICghZW5jb2RpbmcpCi0JCWVuY29kaW5nID0gInV0Zi04IjsKKwkJZW5jb2RpbmcgPSAiVVRGLTgiOwogCWlmICghZ2l0X2NvbW1pdF9lbmNvZGluZykKLQkJZ2l0X2NvbW1pdF9lbmNvZGluZyA9ICJ1dGYtOCI7CisJCWdpdF9jb21taXRfZW5jb2RpbmcgPSAiVVRGLTgiOwogCWlmICgocmVlbmNvZGVkX21lc3NhZ2UgPSByZWVuY29kZV9zdHJpbmcobWVzc2FnZSwKIAkJCQkJZ2l0X2NvbW1pdF9lbmNvZGluZywgZW5jb2RpbmcpKSkKIAkJbWVzc2FnZSA9IHJlZW5jb2RlZF9tZXNzYWdlOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1ybS5jIGIvYnVpbHRpbi1ybS5jCmluZGV4IDI2OWQ2MDguLjU3OTc1ZGIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcm0uYworKysgYi9idWlsdGluLXJtLmMKQEAgLTE1Nyw3ICsxNTcsOCBAQAogCiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9ybV9vcHRpb25zLCBidWlsdGluX3JtX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fcm1fb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9ybV91c2FnZSwgMCk7CiAJaWYgKCFhcmdjKQogCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9ybV91c2FnZSwgYnVpbHRpbl9ybV9vcHRpb25zKTsKIApAQCAtMjU2LDcgKzI1Nyw3IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIXJlbW92ZWQpCi0JCQkJZGllKCJnaXQgcm06ICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJnaXQgcm06ICclcyciLCBwYXRoKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi1zZW5kLXBhY2suYyBiL2J1aWx0aW4tc2VuZC1wYWNrLmMKaW5kZXggNDczYTNkZS4uNDdmYjlmNyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1zZW5kLXBhY2suYworKysgYi9idWlsdGluLXNlbmQtcGFjay5jCkBAIC01OSw3ICs1OSw3IEBACiAJcG8ub3V0ID0gZmQ7CiAJcG8uZ2l0X2NtZCA9IDE7CiAJaWYgKHN0YXJ0X2NvbW1hbmQoJnBvKSkKLQkJZGllKCJnaXQgcGFjay1vYmplY3RzIGZhaWxlZCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJnaXQgcGFjay1vYmplY3RzIGZhaWxlZCIpOwogCiAJLyoKIAkgKiBXZSBmZWVkIHRoZSBwYWNrLW9iamVjdHMgd2UganVzdCBzcGF3bmVkIHdpdGggcmV2aXNpb24KQEAgLTE3OCw5ICsxNzgsOSBAQAogewogCWZwcmludGYoc3RkZXJyLCAiICVjICUtKnMgIiwgZmxhZywgU1VNTUFSWV9XSURUSCwgc3VtbWFyeSk7CiAJaWYgKGZyb20pCi0JCWZwcmludGYoc3RkZXJyLCAiJXMgLT4gJXMiLCBwcmV0dGlmeV9yZWYoZnJvbSksIHByZXR0aWZ5X3JlZih0bykpOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIC0+ICVzIiwgcHJldHRpZnlfcmVmbmFtZShmcm9tLT5uYW1lKSwgcHJldHRpZnlfcmVmbmFtZSh0by0+bmFtZSkpOwogCWVsc2UKLQkJZnB1dHMocHJldHRpZnlfcmVmKHRvKSwgc3RkZXJyKTsKKwkJZnB1dHMocHJldHRpZnlfcmVmbmFtZSh0by0+bmFtZSksIHN0ZGVycik7CiAJaWYgKG1zZykgewogCQlmcHV0cygiICgiLCBzdGRlcnIpOwogCQlmcHV0cyhtc2csIHN0ZGVycik7CkBAIC00NzMsNyArNDczLDcgQEAKIAlpbnQgZmRbMl07CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm47CiAJc3RydWN0IGV4dHJhX2hhdmVfb2JqZWN0cyBleHRyYV9oYXZlOwotCXN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCAqKnJlbW90ZV90YWlsLCAqbG9jYWxfcmVmczsKKwlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgKmxvY2FsX3JlZnM7CiAJaW50IHJldDsKIAlpbnQgc2VuZF9hbGwgPSAwOwogCWNvbnN0IGNoYXIgKnJlY2VpdmVwYWNrID0gImdpdC1yZWNlaXZlLXBhY2siOwpAQCAtNTY3LDEzICs1NjcsOCBAQAogCQlmbGFncyB8PSBNQVRDSF9SRUZTX01JUlJPUjsKIAogCS8qIG1hdGNoIHRoZW0gdXAgKi8KLQlyZW1vdGVfdGFpbCA9ICZyZW1vdGVfcmVmczsKLQl3aGlsZSAoKnJlbW90ZV90YWlsKQotCQlyZW1vdGVfdGFpbCA9ICYoKCpyZW1vdGVfdGFpbCktPm5leHQpOwotCWlmIChtYXRjaF9yZWZzKGxvY2FsX3JlZnMsIHJlbW90ZV9yZWZzLCAmcmVtb3RlX3RhaWwsCi0JCSAgICAgICBucl9yZWZzcGVjcywgcmVmc3BlY3MsIGZsYWdzKSkgeworCWlmIChtYXRjaF9yZWZzKGxvY2FsX3JlZnMsICZyZW1vdGVfcmVmcywgbnJfcmVmc3BlY3MsIHJlZnNwZWNzLCBmbGFncykpCiAJCXJldHVybiAtMTsKLQl9CiAKIAlyZXQgPSBzZW5kX3BhY2soJmFyZ3MsIGZkLCBjb25uLCByZW1vdGVfcmVmcywgJmV4dHJhX2hhdmUpOwogCmRpZmYgLS1naXQgYS9idWlsdGluLXNob3J0bG9nLmMgYi9idWlsdGluLXNob3J0bG9nLmMKaW5kZXggYjI4MDkxYi4uNmEzODEyZSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1zaG9ydGxvZy5jCisrKyBiL2J1aWx0aW4tc2hvcnRsb2cuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCXNob3J0bG9nX2luaXQoJmxvZyk7CiAJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKLQlwYXJzZV9vcHRpb25zX3N0YXJ0KCZjdHgsIGFyZ2MsIGFyZ3YsIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwKKwlwYXJzZV9vcHRpb25zX3N0YXJ0KCZjdHgsIGFyZ2MsIGFyZ3YsIHByZWZpeCwgUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfAogCQkJICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKIAogCWZvciAoOzspIHsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tc2hvdy1icmFuY2guYyBiL2J1aWx0aW4tc2hvdy1icmFuY2guYwppbmRleCBjM2FmYWJiLi4wMWJlYTNiIDEwMDY0NAotLS0gYS9idWlsdGluLXNob3ctYnJhbmNoLmMKKysrIGIvYnVpbHRpbi1zaG93LWJyYW5jaC5jCkBAIC0yLDExICsyLDI2IEBACiAjaW5jbHVkZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAicmVmcy5oIgogI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAotc3RhdGljIGNvbnN0IGNoYXIgc2hvd19icmFuY2hfdXNhZ2VbXSA9Ci0iZ2l0IHNob3ctYnJhbmNoIFstLXNwYXJzZV0gWy0tY3VycmVudF0gWy0tYWxsXSBbLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyXSBbLS1tb3JlPWNvdW50IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZSBdIFstLXRvcGljc10gWzxyZWZzPi4uLl0gfCAtLXJlZmxvZ1s9blssYl1dIDxicmFuY2g+IjsKLXN0YXRpYyBjb25zdCBjaGFyIHNob3dfYnJhbmNoX3VzYWdlX3JlZmxvZ1tdID0KLSItLXJlZmxvZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSI7CitzdGF0aWMgY29uc3QgY2hhciogc2hvd19icmFuY2hfdXNhZ2VbXSA9IHsKKyAgICAiZ2l0IHNob3ctYnJhbmNoIFstLXNwYXJzZV0gWy0tY3VycmVudF0gWy0tYWxsXSBbLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyXSBbLS1tb3JlPWNvdW50IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV0gWy0tdG9waWNzXSBbLS1jb2xvcl0gWzxyZWZzPi4uLl0iLAorICAgICItLXJlZmxvZ1s9blssYl1dIFstLWxpc3RdIFstLWNvbG9yXSA8YnJhbmNoPiIsCisgICAgTlVMTAorfTsKKworc3RhdGljIGludCBzaG93YnJhbmNoX3VzZV9jb2xvciA9IC0xOworc3RhdGljIGNoYXIgY29sdW1uX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CisJR0lUX0NPTE9SX1JFRCwKKwlHSVRfQ09MT1JfR1JFRU4sCisJR0lUX0NPTE9SX1lFTExPVywKKwlHSVRfQ09MT1JfQkxVRSwKKwlHSVRfQ09MT1JfTUFHRU5UQSwKKwlHSVRfQ09MT1JfQ1lBTiwKK307CisKKyNkZWZpbmUgQ09MVU1OX0NPTE9SU19NQVggKEFSUkFZX1NJWkUoY29sdW1uX2NvbG9ycykpCiAKIHN0YXRpYyBpbnQgZGVmYXVsdF9udW07CiBzdGF0aWMgaW50IGRlZmF1bHRfYWxsb2M7CkBAIC0xOSw2ICszNCwyMCBAQAogCiAjZGVmaW5lIERFRkFVTFRfUkVGTE9HCTQKIAorc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9jb2RlKGludCBpZHgpCit7CisJaWYgKHNob3dicmFuY2hfdXNlX2NvbG9yKQorCQlyZXR1cm4gY29sdW1uX2NvbG9yc1tpZHhdOworCXJldHVybiAiIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9yZXNldF9jb2RlKHZvaWQpCit7CisJaWYgKHNob3dicmFuY2hfdXNlX2NvbG9yKQorCQlyZXR1cm4gR0lUX0NPTE9SX1JFU0VUOworCXJldHVybiAiIjsKK30KKwogc3RhdGljIHN0cnVjdCBjb21taXQgKmludGVyZXN0aW5nKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKIHsKIAl3aGlsZSAobGlzdCkgewpAQCAtNTQ1LDcgKzU3NCwxMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5zaG93YnJhbmNoIikpIHsKKwkJc2hvd2JyYW5jaF91c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlLCAtMSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBzdGF0aWMgaW50IG9taXRfaW5fZGVuc2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0ICoqcmV2LCBpbnQgbikKQEAgLTU2OSwxOCArNjAzLDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlX3JlZmxvZ19wYXJhbShjb25zdCBjaGFyICphcmcsIGludCAqY250LCBjb25zdCBjaGFyICoqYmFzZSkKK3N0YXRpYyBpbnQgcmVmbG9nID0gMDsKKworc3RhdGljIGludCBwYXJzZV9yZWZsb2dfcGFyYW0oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgICBpbnQgdW5zZXQpCiB7CiAJY2hhciAqZXA7Ci0JKmNudCA9IHN0cnRvdWwoYXJnLCAmZXAsIDEwKTsKKwljb25zdCBjaGFyICoqYmFzZSA9IChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWU7CisJaWYgKCFhcmcpCisJCWFyZyA9ICIiOworCXJlZmxvZyA9IHN0cnRvdWwoYXJnLCAmZXAsIDEwKTsKIAlpZiAoKmVwID09ICcsJykKIAkJKmJhc2UgPSBlcCArIDE7CiAJZWxzZSBpZiAoKmVwKQotCQlkaWUoInVucmVjb2duaXplZCByZWZsb2cgcGFyYW0gJyVzJyIsIGFyZyk7CisJCXJldHVybiBlcnJvcigidW5yZWNvZ25pemVkIHJlZmxvZyBwYXJhbSAnJXMnIiwgYXJnKTsKIAllbHNlCiAJCSpiYXNlID0gTlVMTDsKLQlpZiAoKmNudCA8PSAwKQotCQkqY250ID0gREVGQVVMVF9SRUZMT0c7CisJaWYgKHJlZmxvZyA8PSAwKQorCQlyZWZsb2cgPSBERUZBVUxUX1JFRkxPRzsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGNtZF9zaG93X2JyYW5jaChpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQpAQCAtNjA2LDcwICs2NDcsNjcgQEAKIAlpbnQgaGVhZF9hdCA9IC0xOwogCWludCB0b3BpY3MgPSAwOwogCWludCBkZW5zZSA9IDE7Ci0JaW50IHJlZmxvZyA9IDA7CiAJY29uc3QgY2hhciAqcmVmbG9nX2Jhc2UgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9zaG93X2JyYW5jaF9vcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKCdhJywgImFsbCIsICZhbGxfaGVhZHMsCisJCQkgICAgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIpLAorCQlPUFRfQk9PTEVBTigncicsICJyZW1vdGVzIiwgJmFsbF9yZW1vdGVzLAorCQkJICAgICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIpLAorCQlPUFRfQk9PTEVBTigwLCAiY29sb3IiLCAmc2hvd2JyYW5jaF91c2VfY29sb3IsCisJCQkgICAgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giKSwKKwkJeyBPUFRJT05fSU5URUdFUiwgMCwgIm1vcmUiLCAmZXh0cmEsICJuIiwKKwkJCSAgICAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkxIH0sCisJCU9QVF9TRVRfSU5UKDAsICJsaXN0IiwgJmV4dHJhLCAic3lub255bSB0byBtb3JlPS0xIiwgLTEpLAorCQlPUFRfQk9PTEVBTigwLCAibm8tbmFtZSIsICZub19uYW1lLCAic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiKSwKKwkJT1BUX0JPT0xFQU4oMCwgImN1cnJlbnQiLCAmd2l0aF9jdXJyZW50X2JyYW5jaCwKKwkJCSAgICAiaW5jbHVkZSB0aGUgY3VycmVudCBicmFuY2giKSwKKwkJT1BUX0JPT0xFQU4oMCwgInNoYTEtbmFtZSIsICZzaGExX25hbWUsCisJCQkgICAgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIpLAorCQlPUFRfQk9PTEVBTigwLCAibWVyZ2UtYmFzZSIsICZtZXJnZV9iYXNlLAorCQkJICAgICJhY3QgbGlrZSBnaXQgbWVyZ2UtYmFzZSAtYSIpLAorCQlPUFRfQk9PTEVBTigwLCAiaW5kZXBlbmRlbnQiLCAmaW5kZXBlbmRlbnQsCisJCQkgICAgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiKSwKKwkJT1BUX0JPT0xFQU4oMCwgInRvcG8tb3JkZXIiLCAmbGlmbywKKwkJCSAgICAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIiksCisJCU9QVF9CT09MRUFOKDAsICJ0b3BpY3MiLCAmdG9waWNzLAorCQkJICAgICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIpLAorCQlPUFRfU0VUX0lOVCgwLCAic3BhcnNlIiwgJmRlbnNlLAorCQkJICAgICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiLCAwKSwKKwkJT1BUX1NFVF9JTlQoMCwgImRhdGUtb3JkZXIiLCAmbGlmbywKKwkJCSAgICAic2hvdyBjb21taXRzIHdoZXJlIG5vIHBhcmVudCBjb21lcyBiZWZvcmUgaXRzICIKKwkJCSAgICAiY2hpbGRyZW4iLCAwKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdnJywgInJlZmxvZyIsICZyZWZsb2dfYmFzZSwgIjxuPlssPGJhc2U+XSIsCisJCQkgICAgInNob3cgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBzdGFydGluZyBhdCAiCisJCQkgICAgImJhc2UiLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcgfCBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQLAorCQkJICAgIHBhcnNlX3JlZmxvZ19wYXJhbSB9LAorCQlPUFRfRU5EKCkKKwl9OwogCiAJZ2l0X2NvbmZpZyhnaXRfc2hvd19icmFuY2hfY29uZmlnLCBOVUxMKTsKIAorCWlmIChzaG93YnJhbmNoX3VzZV9jb2xvciA9PSAtMSkKKwkJc2hvd2JyYW5jaF91c2VfY29sb3IgPSBnaXRfdXNlX2NvbG9yX2RlZmF1bHQ7CisKIAkvKiBJZiBub3RoaW5nIGlzIHNwZWNpZmllZCwgdHJ5IHRoZSBkZWZhdWx0IGZpcnN0ICovCiAJaWYgKGFjID09IDEgJiYgZGVmYXVsdF9udW0pIHsKIAkJYWMgPSBkZWZhdWx0X251bSArIDE7CiAJCWF2ID0gZGVmYXVsdF9hcmcgLSAxOyAvKiBpY2s7IHdlIHdvdWxkIG5vdCBhZGRyZXNzIGF2WzBdICovCiAJfQogCi0Jd2hpbGUgKDEgPCBhYyAmJiBhdlsxXVswXSA9PSAnLScpIHsKLQkJY29uc3QgY2hhciAqYXJnID0gYXZbMV07Ci0JCWlmICghc3RyY21wKGFyZywgIi0tIikpIHsKLQkJCWFjLS07IGF2Kys7Ci0JCQlicmVhazsKLQkJfQotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tYWxsIikgfHwgIXN0cmNtcChhcmcsICItYSIpKQotCQkJYWxsX2hlYWRzID0gYWxsX3JlbW90ZXMgPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmVtb3RlcyIpIHx8ICFzdHJjbXAoYXJnLCAiLXIiKSkKLQkJCWFsbF9yZW1vdGVzID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW1vcmUiKSkKLQkJCWV4dHJhID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWxpc3QiKSkKLQkJCWV4dHJhID0gLTE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1uYW1lIikpCi0JCQlub19uYW1lID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWN1cnJlbnQiKSkKLQkJCXdpdGhfY3VycmVudF9icmFuY2ggPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hhMS1uYW1lIikpCi0JCQlzaGExX25hbWUgPSAxOwotCQllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tbW9yZT0iKSkKLQkJCWV4dHJhID0gYXRvaShhcmcgKyA3KTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW1lcmdlLWJhc2UiKSkKLQkJCW1lcmdlX2Jhc2UgPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0taW5kZXBlbmRlbnQiKSkKLQkJCWluZGVwZW5kZW50ID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXRvcG8tb3JkZXIiKSkKLQkJCWxpZm8gPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tdG9waWNzIikpCi0JCQl0b3BpY3MgPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tc3BhcnNlIikpCi0JCQlkZW5zZSA9IDA7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1kYXRlLW9yZGVyIikpCi0JCQlsaWZvID0gMDsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlZmxvZyIpIHx8ICFzdHJjbXAoYXJnLCAiLWciKSkgewotCQkJcmVmbG9nID0gREVGQVVMVF9SRUZMT0c7Ci0JCX0KLQkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLXJlZmxvZz0iKSkKLQkJCXBhcnNlX3JlZmxvZ19wYXJhbShhcmcgKyA5LCAmcmVmbG9nLCAmcmVmbG9nX2Jhc2UpOwotCQllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi1nPSIpKQotCQkJcGFyc2VfcmVmbG9nX3BhcmFtKGFyZyArIDMsICZyZWZsb2csICZyZWZsb2dfYmFzZSk7Ci0JCWVsc2UKLQkJCXVzYWdlKHNob3dfYnJhbmNoX3VzYWdlKTsKLQkJYWMtLTsgYXYrKzsKLQl9Ci0JYWMtLTsgYXYrKzsKKwlhYyA9IHBhcnNlX29wdGlvbnMoYWMsIGF2LCBwcmVmaXgsIGJ1aWx0aW5fc2hvd19icmFuY2hfb3B0aW9ucywKKwkJCSAgIHNob3dfYnJhbmNoX3VzYWdlLCBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwlpZiAoYWxsX2hlYWRzKQorCQlhbGxfcmVtb3RlcyA9IDE7CiAKIAlpZiAoZXh0cmEgfHwgcmVmbG9nKSB7CiAJCS8qICJsaXN0aW5nIiBtb2RlIGlzIGluY29tcGF0aWJsZSB3aXRoCiAJCSAqIGluZGVwZW5kZW50IG5vciBtZXJnZS1iYXNlIG1vZGVzLgogCQkgKi8KIAkJaWYgKGluZGVwZW5kZW50IHx8IG1lcmdlX2Jhc2UpCi0JCQl1c2FnZShzaG93X2JyYW5jaF91c2FnZSk7CisJCQl1c2FnZV93aXRoX29wdGlvbnMoc2hvd19icmFuY2hfdXNhZ2UsCisJCQkJCSAgIGJ1aWx0aW5fc2hvd19icmFuY2hfb3B0aW9ucyk7CiAJCWlmIChyZWZsb2cgJiYgKCgwIDwgZXh0cmEpIHx8IGFsbF9oZWFkcyB8fCBhbGxfcmVtb3RlcykpCiAJCQkvKgogCQkJICogQXNraW5nIGZvciAtLW1vcmUgaW4gcmVmbG9nIG1vZGUgZG9lcyBub3QKQEAgLTY3Nyw3ICs3MTUsOCBAQAogCQkJICoKIAkJCSAqIEFsc28gLS1hbGwgYW5kIC0tcmVtb3RlcyBkbyBub3QgbWFrZSBzZW5zZSBlaXRoZXIuCiAJCQkgKi8KLQkJCXVzYWdlKHNob3dfYnJhbmNoX3VzYWdlX3JlZmxvZyk7CisJCQlkaWUoIi0tcmVmbG9nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLXJlbW90ZXMsICIKKwkJCSAgICAiLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiKTsKIAl9CiAKIAkvKiBJZiBub3RoaW5nIGlzIHNwZWNpZmllZCwgc2hvdyBhbGwgYnJhbmNoZXMgYnkgZGVmYXVsdCAqLwpAQCAtODQzLDggKzg4MiwxMCBAQAogCQkJZWxzZSB7CiAJCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKIAkJCQkJcHV0Y2hhcignICcpOwotCQkJCXByaW50ZigiJWMgWyVzXSAiLAotCQkJCSAgICAgICBpc19oZWFkID8gJyonIDogJyEnLCByZWZfbmFtZVtpXSk7CisJCQkJcHJpbnRmKCIlcyVjJXMgWyVzXSAiLAorCQkJCSAgICAgICBnZXRfY29sb3JfY29kZShpICUgQ09MVU1OX0NPTE9SU19NQVgpLAorCQkJCSAgICAgICBpc19oZWFkID8gJyonIDogJyEnLAorCQkJCSAgICAgICBnZXRfY29sb3JfcmVzZXRfY29kZSgpLCByZWZfbmFtZVtpXSk7CiAJCQl9CiAKIAkJCWlmICghcmVmbG9nKSB7CkBAIC05MDMsNyArOTQ0LDkgQEAKIAkJCQkJbWFyayA9ICcqJzsKIAkJCQllbHNlCiAJCQkJCW1hcmsgPSAnKyc7Ci0JCQkJcHV0Y2hhcihtYXJrKTsKKwkJCQlwcmludGYoIiVzJWMlcyIsCisJCQkJICAgICAgIGdldF9jb2xvcl9jb2RlKGkgJSBDT0xVTU5fQ09MT1JTX01BWCksCisJCQkJICAgICAgIG1hcmssIGdldF9jb2xvcl9yZXNldF9jb2RlKCkpOwogCQkJfQogCQkJcHV0Y2hhcignICcpOwogCQl9CmRpZmYgLS1naXQgYS9idWlsdGluLXNob3ctcmVmLmMgYi9idWlsdGluLXNob3ctcmVmLmMKaW5kZXggZGM3NmM1MC4uYzQ2NTUwYyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1zaG93LXJlZi5jCisrKyBiL2J1aWx0aW4tc2hvdy1yZWYuYwpAQCAtNCwxMiArNCwxOCBAQAogI2luY2x1ZGUgIm9iamVjdC5oIgogI2luY2x1ZGUgInRhZy5oIgogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgogCi1zdGF0aWMgY29uc3QgY2hhciBzaG93X3JlZl91c2FnZVtdID0gImdpdCBzaG93LXJlZiBbLXF8LS1xdWlldF0gWy0tdmVyaWZ5XSBbLWh8LS1oZWFkXSBbLWR8LS1kZXJlZmVyZW5jZV0gWy1zfC0taGFzaFs9PGxlbmd0aD5dXSBbLS1hYmJyZXZbPTxsZW5ndGg+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gW3BhdHRlcm4qXSA8IHJlZi1saXN0IjsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2hvd19yZWZfdXNhZ2VbXSA9IHsKKwkiZ2l0IHNob3ctcmVmIFstcXwtLXF1aWV0XSBbLS12ZXJpZnldIFstaHwtLWhlYWRdIFstZHwtLWRlcmVmZXJlbmNlXSBbLXN8LS1oYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFtwYXR0ZXJuKl0gIiwKKwkiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9cGF0dGVybl0gPCByZWYtbGlzdCIsCisJTlVMTAorfTsKIAotc3RhdGljIGludCBkZXJlZl90YWdzID0gMCwgc2hvd19oZWFkID0gMCwgdGFnc19vbmx5ID0gMCwgaGVhZHNfb25seSA9IDAsCi0JZm91bmRfbWF0Y2ggPSAwLCB2ZXJpZnkgPSAwLCBxdWlldCA9IDAsIGhhc2hfb25seSA9IDAsIGFiYnJldiA9IDA7CitzdGF0aWMgaW50IGRlcmVmX3RhZ3MsIHNob3dfaGVhZCwgdGFnc19vbmx5LCBoZWFkc19vbmx5LCBmb3VuZF9tYXRjaCwgdmVyaWZ5LAorCSAgIHF1aWV0LCBoYXNoX29ubHksIGFiYnJldiwgZXhjbHVkZV9hcmc7CiBzdGF0aWMgY29uc3QgY2hhciAqKnBhdHRlcm47CitzdGF0aWMgY29uc3QgY2hhciAqZXhjbHVkZV9leGlzdGluZ19hcmc7CiAKIHN0YXRpYyB2b2lkIHNob3dfb25lKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CkBAIC0xNTAsNzkgKzE1Niw2MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGhhc2hfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwloYXNoX29ubHkgPSAxOworCS8qIFVzZSBmdWxsIGxlbmd0aCBTSEExIGlmIG5vIGFyZ3VtZW50ICovCisJaWYgKCFhcmcpCisJCXJldHVybiAwOworCXJldHVybiBwYXJzZV9vcHRfYWJicmV2X2NiKG9wdCwgYXJnLCB1bnNldCk7Cit9CisKK3N0YXRpYyBpbnQgZXhjbHVkZV9leGlzdGluZ19jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCQkgICAgIGludCB1bnNldCkKK3sKKwlleGNsdWRlX2FyZyA9IDE7CisJKihjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUgPSBhcmc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGVscF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXJldHVybiAtMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gc2hvd19yZWZfb3B0aW9uc1tdID0geworCU9QVF9CT09MRUFOKDAsICJ0YWdzIiwgJnRhZ3Nfb25seSwgIm9ubHkgc2hvdyB0YWdzIChjYW4gYmUgY29tYmluZWQgd2l0aCBoZWFkcykiKSwKKwlPUFRfQk9PTEVBTigwLCAiaGVhZHMiLCAmaGVhZHNfb25seSwgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiKSwKKwlPUFRfQk9PTEVBTigwLCAidmVyaWZ5IiwgJnZlcmlmeSwgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgIgorCQkgICAgInJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIiksCisJT1BUX0JPT0xFQU4oJ2gnLCAiaGVhZCIsICZzaG93X2hlYWQsICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSIpLAorCU9QVF9CT09MRUFOKCdkJywgImRlcmVmZXJlbmNlIiwgJmRlcmVmX3RhZ3MsCisJCSAgICAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiKSwKKwl7IE9QVElPTl9DQUxMQkFDSywgJ3MnLCAiaGFzaCIsICZhYmJyZXYsICJuIiwKKwkgICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiLAorCSAgUEFSU0VfT1BUX09QVEFSRywgJmhhc2hfY2FsbGJhY2sgfSwKKwlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwlPUFRfX1FVSUVUKCZxdWlldCksCisJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJleGNsdWRlLWV4aXN0aW5nIiwgJmV4Y2x1ZGVfZXhpc3RpbmdfYXJnLAorCSAgInBhdHRlcm4iLCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIsCisJICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBleGNsdWRlX2V4aXN0aW5nX2NhbGxiYWNrIH0sCisJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJoZWxwLWFsbCIsIE5VTEwsIE5VTEwsICJzaG93IHVzYWdlIiwKKwkgIFBBUlNFX09QVF9ISURERU4gfCBQQVJTRV9PUFRfTk9BUkcsIGhlbHBfY2FsbGJhY2sgfSwKKwlPUFRfRU5EKCkKK307CisKIGludCBjbWRfc2hvd19yZWYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7Ci0JaW50IGk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBzaG93X3JlZl9vcHRpb25zLAorCQkJICAgICBzaG93X3JlZl91c2FnZSwgUEFSU0VfT1BUX05PX0lOVEVSTkFMX0hFTFApOwogCi0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewotCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwotCQlpZiAoKmFyZyAhPSAnLScpIHsKLQkJCXBhdHRlcm4gPSBhcmd2ICsgaTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tIikpIHsKLQkJCXBhdHRlcm4gPSBhcmd2ICsgaSArIDE7Ci0JCQlpZiAoISpwYXR0ZXJuKQotCQkJCXBhdHRlcm4gPSBOVUxMOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLXEiKSB8fCAhc3RyY21wKGFyZywgIi0tcXVpZXQiKSkgewotCQkJcXVpZXQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLWgiKSB8fCAhc3RyY21wKGFyZywgIi0taGVhZCIpKSB7Ci0JCQlzaG93X2hlYWQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLWQiKSB8fCAhc3RyY21wKGFyZywgIi0tZGVyZWZlcmVuY2UiKSkgewotCQkJZGVyZWZfdGFncyA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItcyIpIHx8ICFzdHJjbXAoYXJnLCAiLS1oYXNoIikpIHsKLQkJCWhhc2hfb25seSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWhhc2g9IikgfHwKLQkJICAgICghcHJlZml4Y21wKGFyZywgIi0tYWJicmV2IikgJiYKLQkJICAgICAoYXJnWzhdID09ICc9JyB8fCBhcmdbOF0gPT0gJ1wwJykpKSB7Ci0JCQlpZiAoYXJnWzJdICE9ICdoJyAmJiAhYXJnWzhdKQotCQkJCS8qIC0tYWJicmV2IG9ubHkgKi8KLQkJCQlhYmJyZXYgPSBERUZBVUxUX0FCQlJFVjsKLQkJCWVsc2UgewotCQkJCS8qIC0taGFzaD0gb3IgLS1hYmJyZXY9ICovCi0JCQkJY2hhciAqZW5kOwotCQkJCWlmIChhcmdbMl0gPT0gJ2gnKSB7Ci0JCQkJCWhhc2hfb25seSA9IDE7Ci0JCQkJCWFyZyArPSA3OwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCWFyZyArPSA5OwotCQkJCWFiYnJldiA9IHN0cnRvdWwoYXJnLCAmZW5kLCAxMCk7Ci0JCQkJaWYgKCplbmQgfHwgYWJicmV2ID4gNDApCi0JCQkJCXVzYWdlKHNob3dfcmVmX3VzYWdlKTsKLQkJCQlpZiAoYWJicmV2IDwgTUlOSU1VTV9BQkJSRVYpCi0JCQkJCWFiYnJldiA9IE1JTklNVU1fQUJCUkVWOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJpZnkiKSkgewotCQkJdmVyaWZ5ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tdGFncyIpKSB7Ci0JCQl0YWdzX29ubHkgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1oZWFkcyIpKSB7Ci0JCQloZWFkc19vbmx5ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tZXhjbHVkZS1leGlzdGluZyIpKQotCQkJcmV0dXJuIGV4Y2x1ZGVfZXhpc3RpbmcoTlVMTCk7Ci0JCWlmICghcHJlZml4Y21wKGFyZywgIi0tZXhjbHVkZS1leGlzdGluZz0iKSkKLQkJCXJldHVybiBleGNsdWRlX2V4aXN0aW5nKGFyZyArIDE5KTsKLQkJdXNhZ2Uoc2hvd19yZWZfdXNhZ2UpOwotCX0KKwlpZiAoZXhjbHVkZV9hcmcpCisJCXJldHVybiBleGNsdWRlX2V4aXN0aW5nKGV4Y2x1ZGVfZXhpc3RpbmdfYXJnKTsKKworCXBhdHRlcm4gPSBhcmd2OworCWlmICghKnBhdHRlcm4pCisJCXBhdHRlcm4gPSBOVUxMOwogCiAJaWYgKHZlcmlmeSkgewogCQlpZiAoIXBhdHRlcm4pCmRpZmYgLS1naXQgYS9idWlsdGluLXN0cmlwc3BhY2UuYyBiL2J1aWx0aW4tc3RyaXBzcGFjZS5jCmluZGV4IGQ2ZTM4OTYuLjFmZDIyMDUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tc3RyaXBzcGFjZS5jCisrKyBiL2J1aWx0aW4tc3RyaXBzcGFjZS5jCkBAIC03OCw3ICs3OCw3IEBACiAJCXN0cmlwX2NvbW1lbnRzID0gMTsKIAogCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCAxMDI0KSA8IDApCi0JCWRpZSgiY291bGQgbm90IHJlYWQgdGhlIGlucHV0Iik7CisJCWRpZV9lcnJubygiY291bGQgbm90IHJlYWQgdGhlIGlucHV0Iik7CiAKIAlzdHJpcHNwYWNlKCZidWYsIHN0cmlwX2NvbW1lbnRzKTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi1zeW1ib2xpYy1yZWYuYyBiL2J1aWx0aW4tc3ltYm9saWMtcmVmLmMKaW5kZXggNmFlNmJjYy4uY2E4NTVhNSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1zeW1ib2xpYy1yZWYuYworKysgYi9idWlsdGluLXN5bWJvbGljLXJlZi5jCkBAIC0zNiw3ICszNiw4IEBACiAJfTsKIAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBnaXRfc3ltYm9saWNfcmVmX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9zeW1ib2xpY19yZWZfdXNhZ2UsIDApOwogCWlmIChtc2cgJiYhKm1zZykKIAkJZGllKCJSZWZ1c2luZyB0byBwZXJmb3JtIHVwZGF0ZSB3aXRoIGVtcHR5IG1lc3NhZ2UiKTsKIAlzd2l0Y2ggKGFyZ2MpIHsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdGFnLmMgYi9idWlsdGluLXRhZy5jCmluZGV4IGU1NDQ0MzAuLmE1MWE2ZDEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdGFnLmMKKysrIGIvYnVpbHRpbi10YWcuYwpAQCAtMzA4LDggKzMwOCw3IEBACiAJCXBhdGggPSBnaXRfcGF0aGR1cCgiVEFHX0VESVRNU0ciKTsKIAkJZmQgPSBvcGVuKHBhdGgsIE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9OTFksIDA2MDApOwogCQlpZiAoZmQgPCAwKQotCQkJZGllKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJzogJXMiLAotCQkJCQkJcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciLCBwYXRoKTsKIAogCQlpZiAoIWlzX251bGxfc2hhMShwcmV2KSkKIAkJCXdyaXRlX3RhZ19ib2R5KGZkLCBwcmV2KTsKQEAgLTM3Niw4ICszNzUsOCBAQAogCXN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQgPSBOVUxMOwogCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCQlPUFRfQk9PTEVBTignbCcsIE5VTEwsICZsaXN0LCAibGlzdCB0YWcgbmFtZXMiKSwKLQkJeyBPUFRJT05fSU5URUdFUiwgJ24nLCBOVUxMLCAmbGluZXMsIE5VTEwsCi0JCQkJInByaW50IG4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIsCisJCXsgT1BUSU9OX0lOVEVHRVIsICduJywgTlVMTCwgJmxpbmVzLCAibiIsCisJCQkJInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIiwKIAkJCQlQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAxIH0sCiAJCU9QVF9CT09MRUFOKCdkJywgTlVMTCwgJmRlbGV0ZSwgImRlbGV0ZSB0YWdzIiksCiAJCU9QVF9CT09MRUFOKCd2JywgTlVMTCwgJnZlcmlmeSwgInZlcmlmeSB0YWdzIiksCkBAIC0zODcsNyArMzg2LDcgQEAKIAkJCQkJImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIpLAogCQlPUFRfQ0FMTEJBQ0soJ20nLCBOVUxMLCAmbXNnLCAibXNnIiwKIAkJCSAgICAgIm1lc3NhZ2UgZm9yIHRoZSB0YWciLCBwYXJzZV9tc2dfYXJnKSwKLQkJT1BUX1NUUklORygnRicsIE5VTEwsICZtc2dmaWxlLCAiZmlsZSIsICJtZXNzYWdlIGluIGEgZmlsZSIpLAorCQlPUFRfRklMRU5BTUUoJ0YnLCBOVUxMLCAmbXNnZmlsZSwgIm1lc3NhZ2UgaW4gYSBmaWxlIiksCiAJCU9QVF9CT09MRUFOKCdzJywgTlVMTCwgJnNpZ24sICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIiksCiAJCU9QVF9TVFJJTkcoJ3UnLCBOVUxMLCAma2V5aWQsICJrZXktaWQiLAogCQkJCQkidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIpLApAQCAtNDA1LDggKzQwNCw3IEBACiAKIAlnaXRfY29uZmlnKGdpdF90YWdfY29uZmlnLCBOVUxMKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF90YWdfdXNhZ2UsIDApOwotCW1zZ2ZpbGUgPSBwYXJzZV9vcHRpb25zX2ZpeF9maWxlbmFtZShwcmVmaXgsIG1zZ2ZpbGUpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X3RhZ191c2FnZSwgMCk7CiAKIAlpZiAoa2V5aWQpIHsKIAkJc2lnbiA9IDE7CkBAIC00NDQsMTEgKzQ0MiwxMSBAQAogCQllbHNlIHsKIAkJCWlmICghc3RyY21wKG1zZ2ZpbGUsICItIikpIHsKIAkJCQlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMTAyNCkgPCAwKQotCQkJCQlkaWUoImNhbm5vdCByZWFkICVzIiwgbXNnZmlsZSk7CisJCQkJCWRpZV9lcnJubygiY2Fubm90IHJlYWQgJyVzJyIsIG1zZ2ZpbGUpOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCBtc2dmaWxlLCAxMDI0KSA8IDApCi0JCQkJCWRpZSgiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnOiAlcyIsCi0JCQkJCQltc2dmaWxlLCBzdHJlcnJvcihlcnJubykpOworCQkJCQlkaWVfZXJybm8oImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIsCisJCQkJCQltc2dmaWxlKTsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tdGFyLXRyZWUuYyBiL2J1aWx0aW4tdGFyLXRyZWUuYwppbmRleCBmODhlNzIxLi44YjNhMzVlIDEwMDY0NAotLS0gYS9idWlsdGluLXRhci10cmVlLmMKKysrIGIvYnVpbHRpbi10YXItdHJlZS5jCkBAIC05MSw3ICs5MSw3IEBACiAKIAluID0gd3JpdGVfaW5fZnVsbCgxLCBjb250ZW50ICsgMTEsIDQxKTsKIAlpZiAobiA8IDQxKQotCQlkaWUoImdpdCBnZXQtdGFyLWNvbW1pdC1pZDogd3JpdGUgZXJyb3IiKTsKKwkJZGllX2Vycm5vKCJnaXQgZ2V0LXRhci1jb21taXQtaWQ6IHdyaXRlIGVycm9yIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tdW5wYWNrLW9iamVjdHMuYyBiL2J1aWx0aW4tdW5wYWNrLW9iamVjdHMuYwppbmRleCA4ZTgzMWJlLi41NTcxNDhhIDEwMDY0NAotLS0gYS9idWlsdGluLXVucGFjay1vYmplY3RzLmMKKysrIGIvYnVpbHRpbi11bnBhY2stb2JqZWN0cy5jCkBAIC02OCw3ICs2OCw3IEBACiAJCWlmIChyZXQgPD0gMCkgewogCQkJaWYgKCFyZXQpCiAJCQkJZGllKCJlYXJseSBFT0YiKTsKLQkJCWRpZSgicmVhZCBlcnJvciBvbiBpbnB1dDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJyZWFkIGVycm9yIG9uIGlucHV0Iik7CiAJCX0KIAkJbGVuICs9IHJldDsKIAl9IHdoaWxlIChsZW4gPCBtaW4pOwpAQCAtMTU4LDcgKzE1OCw3IEBACiAjZGVmaW5lIEZMQUdfV1JJVFRFTiAoMXU8PDIxKQogCiBzdGF0aWMgc3RydWN0IG9ial9pbmZvICpvYmpfbGlzdDsKLXVuc2lnbmVkIG5yX29iamVjdHM7CitzdGF0aWMgdW5zaWduZWQgbnJfb2JqZWN0czsKIAogLyoKICAqIENhbGxlZCBvbmx5IGZyb20gY2hlY2tfb2JqZWN0KCkgYWZ0ZXIgaXQgdmVyaWZpZWQgdGhpcyBvYmplY3QKQEAgLTIwMCw3ICsyMDAsNyBAQAogCiAJaWYgKGZzY2tfb2JqZWN0KG9iaiwgMSwgZnNja19lcnJvcl9mdW5jdGlvbikpCiAJCWRpZSgiRXJyb3IgaW4gb2JqZWN0Iik7Ci0JaWYgKCFmc2NrX3dhbGsob2JqLCBjaGVja19vYmplY3QsIDApKQorCWlmICghZnNja193YWxrKG9iaiwgY2hlY2tfb2JqZWN0LCBOVUxMKSkKIAkJZGllKCJFcnJvciBvbiByZWFjaGFibGUgb2JqZWN0cyBvZiAlcyIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOwogCXdyaXRlX2NhY2hlZF9vYmplY3Qob2JqKTsKIAlyZXR1cm4gMTsKQEAgLTIxMCw3ICsyMTAsNyBAQAogewogCXVuc2lnbmVkIGk7CiAJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykKLQkJY2hlY2tfb2JqZWN0KG9ial9saXN0W2ldLm9iaiwgT0JKX0FOWSwgMCk7CisJCWNoZWNrX29iamVjdChvYmpfbGlzdFtpXS5vYmosIE9CSl9BTlksIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRlZF9vYmplY3QodW5zaWduZWQgbnIsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdXBkYXRlLXJlZi5jIGIvYnVpbHRpbi11cGRhdGUtcmVmLmMKaW5kZXggMzc4ZGMxYi4uNzZiYTFkNSAxMDA2NDQKLS0tIGEvYnVpbHRpbi11cGRhdGUtcmVmLmMKKysrIGIvYnVpbHRpbi11cGRhdGUtcmVmLmMKQEAgLTIzLDcgKzIzLDggQEAKIAl9OwogCiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF91cGRhdGVfcmVmX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF91cGRhdGVfcmVmX3VzYWdlLAorCQkJICAgICAwKTsKIAlpZiAobXNnICYmICEqbXNnKQogCQlkaWUoIlJlZnVzaW5nIHRvIHBlcmZvcm0gdXBkYXRlIHdpdGggZW1wdHkgbWVzc2FnZS4iKTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi13cml0ZS10cmVlLmMgYi9idWlsdGluLXdyaXRlLXRyZWUuYwppbmRleCA5ZDY0MDUwLi4zYTI0Y2U4IDEwMDY0NAotLS0gYS9idWlsdGluLXdyaXRlLXRyZWUuYworKysgYi9idWlsdGluLXdyaXRlLXRyZWUuYwpAQCAtMTMsNyArMTMsNyBAQAogCiBpbnQgY21kX3dyaXRlX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICp1bnVzZWRfcHJlZml4KQogewotCWludCBtaXNzaW5nX29rID0gMCwgcmV0OworCWludCBmbGFncyA9IDAsIHJldDsKIAljb25zdCBjaGFyICpwcmVmaXggPSBOVUxMOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJY29uc3QgY2hhciAqbWUgPSAiZ2l0LXdyaXRlLXRyZWUiOwpAQCAtMjIsOSArMjIsMTUgQEAKIAl3aGlsZSAoMSA8IGFyZ2MpIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndlsxXTsKIAkJaWYgKCFzdHJjbXAoYXJnLCAiLS1taXNzaW5nLW9rIikpCi0JCQltaXNzaW5nX29rID0gMTsKKwkJCWZsYWdzIHw9IFdSSVRFX1RSRUVfTUlTU0lOR19PSzsKIAkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLXByZWZpeD0iKSkKIAkJCXByZWZpeCA9IGFyZyArIDk7CisJCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1pZ25vcmUtY2FjaGUtdHJlZSIpKQorCQkJLyoKKwkJCSAqIFRoaXMgaXMgb25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZywgc28gSQorCQkJICogZG8gbm90IGJvdGhlciBkb2N1bWVudGluZyBpdC4KKwkJCSAqLworCQkJZmxhZ3MgfD0gV1JJVEVfVFJFRV9JR05PUkVfQ0FDSEVfVFJFRTsKIAkJZWxzZQogCQkJdXNhZ2Uod3JpdGVfdHJlZV91c2FnZSk7CiAJCWFyZ2MtLTsgYXJndisrOwpAQCAtMzMsNyArMzksNyBAQAogCWlmIChhcmdjID4gMikKIAkJZGllKCJ0b28gbWFueSBvcHRpb25zIik7CiAKLQlyZXQgPSB3cml0ZV9jYWNoZV9hc190cmVlKHNoYTEsIG1pc3Npbmdfb2ssIHByZWZpeCk7CisJcmV0ID0gd3JpdGVfY2FjaGVfYXNfdHJlZShzaGExLCBmbGFncywgcHJlZml4KTsKIAlzd2l0Y2ggKHJldCkgewogCWNhc2UgMDoKIAkJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi5oIGIvYnVpbHRpbi5oCmluZGV4IDQyNWZmOGUuLjIwNDI3ZDIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4uaAorKysgYi9idWlsdGluLmgKQEAgLTcyLDYgKzcyLDcgQEAKIGV4dGVybiBpbnQgY21kX21lcmdlX291cnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfbWVyZ2VfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9tZXJnZV9yZWN1cnNpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbWt0cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX212KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX25hbWVfcmV2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3BhY2tfb2JqZWN0cyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CmRpZmYgLS1naXQgYS9idW5kbGUuYyBiL2J1bmRsZS5jCmluZGV4IGQwZGQ4MTguLmU0YjJhYTkgMTAwNjQ0Ci0tLSBhL2J1bmRsZS5jCisrKyBiL2J1bmRsZS5jCkBAIC05OCw3ICs5OCw3IEBACiAJICovCiAJc3RydWN0IHJlZl9saXN0ICpwID0gJmhlYWRlci0+cHJlcmVxdWlzaXRlczsKIAlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKLQljb25zdCBjaGFyICphcmd2W10gPSB7TlVMTCwgIi0tYWxsIn07CisJY29uc3QgY2hhciAqYXJndltdID0ge05VTEwsICItLWFsbCIsIE5VTEx9OwogCXN0cnVjdCBvYmplY3RfYXJyYXkgcmVmczsKIAlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiAJaW50IGksIHJldCA9IDAsIHJlcV9ucjsKZGlmZiAtLWdpdCBhL2NhY2hlLXRyZWUuYyBiL2NhY2hlLXRyZWUuYwppbmRleCAzN2JmMzVlLi5kOTE3NDM3IDEwMDY0NAotLS0gYS9jYWNoZS10cmVlLmMKKysrIGIvY2FjaGUtdHJlZS5jCkBAIC0zMjksNyArMzI5LDggQEAKIAkJCWVudGxlbiA9IHBhdGhsZW4gLSBiYXNlbGVuOwogCQl9CiAJCWlmIChtb2RlICE9IFNfSUZHSVRMSU5LICYmICFtaXNzaW5nX29rICYmICFoYXNfc2hhMV9maWxlKHNoYTEpKQotCQkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCXJldHVybiBlcnJvcigiaW52YWxpZCBvYmplY3QgJTA2byAlcyBmb3IgJyUuKnMnIiwKKwkJCQltb2RlLCBzaGExX3RvX2hleChzaGExKSwgZW50bGVuK2Jhc2VsZW4sIHBhdGgpOwogCiAJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpCiAJCQljb250aW51ZTsgLyogZW50cnkgYmVpbmcgcmVtb3ZlZCAqLwpAQCAtNTE0LDYgKzUxNSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2FjaGVfdHJlZSAqY2FjaGVfdHJlZV9maW5kKHN0cnVjdCBjYWNoZV90cmVlICppdCwgY29uc3QgY2hhciAqcGF0aCkKIHsKKwlpZiAoIWl0KQorCQlyZXR1cm4gTlVMTDsKIAl3aGlsZSAoKnBhdGgpIHsKIAkJY29uc3QgY2hhciAqc2xhc2g7CiAJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqc3ViOwpAQCAtNTM4LDI4ICs1NDEsMzIgQEAKIAlyZXR1cm4gaXQ7CiB9CiAKLWludCB3cml0ZV9jYWNoZV9hc190cmVlKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBtaXNzaW5nX29rLCBjb25zdCBjaGFyICpwcmVmaXgpCitpbnQgd3JpdGVfY2FjaGVfYXNfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlpbnQgZW50cmllcywgd2FzX3ZhbGlkLCBuZXdmZDsKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrX2ZpbGU7CiAKIAkvKgogCSAqIFdlIGNhbid0IGZyZWUgdGhpcyBtZW1vcnksIGl0IGJlY29tZXMgcGFydCBvZiBhIGxpbmtlZCBsaXN0CiAJICogcGFyc2VkIGF0ZXhpdCgpCiAJICovCi0Jc3RydWN0IGxvY2tfZmlsZSAqbG9ja19maWxlID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOworCWxvY2tfZmlsZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKIAogCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgobG9ja19maWxlLCAxKTsKIAogCWVudHJpZXMgPSByZWFkX2NhY2hlKCk7CiAJaWYgKGVudHJpZXMgPCAwKQogCQlyZXR1cm4gV1JJVEVfVFJFRV9VTlJFQURBQkxFX0lOREVYOworCWlmIChmbGFncyAmIFdSSVRFX1RSRUVfSUdOT1JFX0NBQ0hFX1RSRUUpCisJCWNhY2hlX3RyZWVfZnJlZSgmKGFjdGl2ZV9jYWNoZV90cmVlKSk7CiAKIAlpZiAoIWFjdGl2ZV9jYWNoZV90cmVlKQogCQlhY3RpdmVfY2FjaGVfdHJlZSA9IGNhY2hlX3RyZWUoKTsKIAogCXdhc192YWxpZCA9IGNhY2hlX3RyZWVfZnVsbHlfdmFsaWQoYWN0aXZlX2NhY2hlX3RyZWUpOwotCiAJaWYgKCF3YXNfdmFsaWQpIHsKKwkJaW50IG1pc3Npbmdfb2sgPSBmbGFncyAmIFdSSVRFX1RSRUVfTUlTU0lOR19PSzsKKwogCQlpZiAoY2FjaGVfdHJlZV91cGRhdGUoYWN0aXZlX2NhY2hlX3RyZWUsCiAJCQkJICAgICAgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIsCiAJCQkJICAgICAgbWlzc2luZ19vaywgMCkgPCAwKQpAQCAtNjI1LDMgKzYzMiwzNSBAQAogCSppdCA9IGNhY2hlX3RyZWUoKTsKIAlwcmltZV9jYWNoZV90cmVlX3JlYygqaXQsIHRyZWUpOwogfQorCisvKgorICogZmluZCB0aGUgY2FjaGVfdHJlZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IGxldmVsIHdpdGhvdXQKKyAqIGV4cGxvZGluZyB0aGUgZnVsbCBwYXRoIGludG8gdGV4dHVhbCBmb3JtLiAgVGhlIHJvb3Qgb2YgdGhlCisgKiBjYWNoZSB0cmVlIGlzIGdpdmVuIGFzICJyb290IiwgYW5kIG91ciBjdXJyZW50IGxldmVsIGlzICJpbmZvIi4KKyAqICgxKSBXaGVuIGF0IHJvb3QgbGV2ZWwsIGluZm8tPnByZXYgaXMgTlVMTCwgc28gaXQgaXMgInJvb3QiIGl0c2VsZi4KKyAqICgyKSBPdGhlcndpc2UsIGZpbmQgdGhlIGNhY2hlX3RyZWUgdGhhdCBjb3JyZXNwb25kcyB0byBvbmUgbGV2ZWwKKyAqICAgICBhYm92ZSB1cywgYW5kIGZpbmQgb3Vyc2VsdmVzIGluIHRoZXJlLgorICovCitzdGF0aWMgc3RydWN0IGNhY2hlX3RyZWUgKmZpbmRfY2FjaGVfdHJlZV9mcm9tX3RyYXZlcnNhbChzdHJ1Y3QgY2FjaGVfdHJlZSAqcm9vdCwKKwkJCQkJCQkgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNhY2hlX3RyZWUgKm91cl9wYXJlbnQ7CisKKwlpZiAoIWluZm8tPnByZXYpCisJCXJldHVybiByb290OworCW91cl9wYXJlbnQgPSBmaW5kX2NhY2hlX3RyZWVfZnJvbV90cmF2ZXJzYWwocm9vdCwgaW5mby0+cHJldik7CisJcmV0dXJuIGNhY2hlX3RyZWVfZmluZChvdXJfcGFyZW50LCBpbmZvLT5uYW1lLnBhdGgpOworfQorCitpbnQgY2FjaGVfdHJlZV9tYXRjaGVzX3RyYXZlcnNhbChzdHJ1Y3QgY2FjaGVfdHJlZSAqcm9vdCwKKwkJCQkgc3RydWN0IG5hbWVfZW50cnkgKmVudCwKKwkJCQkgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNhY2hlX3RyZWUgKml0OworCisJaXQgPSBmaW5kX2NhY2hlX3RyZWVfZnJvbV90cmF2ZXJzYWwocm9vdCwgaW5mbyk7CisJaXQgPSBjYWNoZV90cmVlX2ZpbmQoaXQsIGVudC0+cGF0aCk7CisJaWYgKGl0ICYmIGl0LT5lbnRyeV9jb3VudCA+IDAgJiYgIWhhc2hjbXAoZW50LT5zaGExLCBpdC0+c2hhMSkpCisJCXJldHVybiBpdC0+ZW50cnlfY291bnQ7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jYWNoZS10cmVlLmggYi9jYWNoZS10cmVlLmgKaW5kZXggZTk1ODgzNS4uM2RmNjQxZiAxMDA2NDQKLS0tIGEvY2FjaGUtdHJlZS5oCisrKyBiL2NhY2hlLXRyZWUuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgQ0FDSEVfVFJFRV9ICiAKICNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCiAKIHN0cnVjdCBjYWNoZV90cmVlOwogc3RydWN0IGNhY2hlX3RyZWVfc3ViIHsKQEAgLTMwLDExICszMSwxOCBAQAogaW50IGNhY2hlX3RyZWVfZnVsbHlfdmFsaWQoc3RydWN0IGNhY2hlX3RyZWUgKik7CiBpbnQgY2FjaGVfdHJlZV91cGRhdGUoc3RydWN0IGNhY2hlX3RyZWUgKiwgc3RydWN0IGNhY2hlX2VudHJ5ICoqLCBpbnQsIGludCwgaW50KTsKIAorLyogYml0bWFza3MgdG8gd3JpdGVfY2FjaGVfYXNfdHJlZSBmbGFncyAqLworI2RlZmluZSBXUklURV9UUkVFX01JU1NJTkdfT0sgMQorI2RlZmluZSBXUklURV9UUkVFX0lHTk9SRV9DQUNIRV9UUkVFIDIKKworLyogZXJyb3IgcmV0dXJuIGNvZGVzICovCiAjZGVmaW5lIFdSSVRFX1RSRUVfVU5SRUFEQUJMRV9JTkRFWCAoLTEpCiAjZGVmaW5lIFdSSVRFX1RSRUVfVU5NRVJHRURfSU5ERVggKC0yKQogI2RlZmluZSBXUklURV9UUkVFX1BSRUZJWF9FUlJPUiAoLTMpCiAKLWludCB3cml0ZV9jYWNoZV9hc190cmVlKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBtaXNzaW5nX29rLCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IHdyaXRlX2NhY2hlX2FzX3RyZWUodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWdzLCBjb25zdCBjaGFyICpwcmVmaXgpOwogdm9pZCBwcmltZV9jYWNoZV90cmVlKHN0cnVjdCBjYWNoZV90cmVlICoqLCBzdHJ1Y3QgdHJlZSAqKTsKIAorZXh0ZXJuIGludCBjYWNoZV90cmVlX21hdGNoZXNfdHJhdmVyc2FsKHN0cnVjdCBjYWNoZV90cmVlICosIHN0cnVjdCBuYW1lX2VudHJ5ICplbnQsIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9jYWNoZS5oIGIvY2FjaGUuaAppbmRleCBiODUwM2FkLi4yYzJmMDVjIDEwMDY0NAotLS0gYS9jYWNoZS5oCisrKyBiL2NhY2hlLmgKQEAgLTQ2OCw2ICs0NjgsOSBAQAogZXh0ZXJuIGludCBpbmRleF9wYXRoKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpzdCwgaW50IHdyaXRlX29iamVjdCk7CiBleHRlcm4gdm9pZCBmaWxsX3N0YXRfY2FjaGVfaW5mbyhzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpOwogCisvKiAiY2FyZWZ1bCBsc3RhdCgpIiAqLworZXh0ZXJuIGludCBjaGVja19wYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIHN0cnVjdCBzdGF0ICpzdCwgaW50IHNraXBsZW4pOworCiAjZGVmaW5lIFJFRlJFU0hfUkVBTExZCQkweDAwMDEJLyogaWdub3JlX3ZhbGlkICovCiAjZGVmaW5lIFJFRlJFU0hfVU5NRVJHRUQJMHgwMDAyCS8qIGFsbG93IHVubWVyZ2VkICovCiAjZGVmaW5lIFJFRlJFU0hfUVVJRVQJCTB4MDAwNAkvKiBiZSBxdWlldCBhYm91dCBpdCAqLwpAQCAtNTQzLDcgKzU0Niw2IEBACiB9OwogCiBlbnVtIHB1c2hfZGVmYXVsdF90eXBlIHsKLQlQVVNIX0RFRkFVTFRfVU5TUEVDSUZJRUQgPSAtMSwKIAlQVVNIX0RFRkFVTFRfTk9USElORyA9IDAsCiAJUFVTSF9ERUZBVUxUX01BVENISU5HLAogCVBVU0hfREVGQVVMVF9UUkFDS0lORywKQEAgLTU2MSw2ICs1NjMsOCBAQAogCiBleHRlcm4gZW51bSBvYmplY3RfY3JlYXRpb25fbW9kZSBvYmplY3RfY3JlYXRpb25fbW9kZTsKIAorZXh0ZXJuIGludCBncmFmdHNfcmVwbGFjZV9wYXJlbnRzOworCiAjZGVmaW5lIEdJVF9SRVBPX1ZFUlNJT04gMAogZXh0ZXJuIGludCByZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uOwogZXh0ZXJuIGludCBjaGVja19yZXBvc2l0b3J5X2Zvcm1hdCh2b2lkKTsKQEAgLTYxNCw2ICs2MTgsOCBAQAogCiBpbnQgZ2l0X21rc3RlbXAoY2hhciAqcGF0aCwgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKnRlbXBsYXRlKTsKIAoraW50IGdpdF9ta3N0ZW1wcyhjaGFyICpwYXRoLCBzaXplX3QgbiwgY29uc3QgY2hhciAqdGVtcGxhdGUsIGludCBzdWZmaXhfbGVuKTsKKwogLyoKICAqIE5PVEUgTk9URSBOT1RFISEKICAqCkBAIC03NDIsNyArNzQ4LDE3IEBACiB9OwogCiBleHRlcm4gaW50IGNoZWNrb3V0X2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IHN0cnVjdCBjaGVja291dCAqc3RhdGUsIGNoYXIgKnRvcGF0aCk7CisKK3N0cnVjdCBjYWNoZV9kZWYgeworCWNoYXIgcGF0aFtQQVRIX01BWCArIDFdOworCWludCBsZW47CisJaW50IGZsYWdzOworCWludCB0cmFja19mbGFnczsKKwlpbnQgcHJlZml4X2xlbl9zdGF0X2Z1bmM7Cit9OworCiBleHRlcm4gaW50IGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgdGhyZWFkZWRfaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogZXh0ZXJuIGludCBoYXNfc3ltbGlua19vcl9ub2VudF9sZWFkaW5nX3BhdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CiBleHRlcm4gaW50IGhhc19kaXJzX29ubHlfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgcHJlZml4X2xlbik7CiBleHRlcm4gdm9pZCBpbnZhbGlkYXRlX2xzdGF0X2NhY2hlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pOwpkaWZmIC0tZ2l0IGEvY29tYmluZS1kaWZmLmMgYi9jb21iaW5lLWRpZmYuYwppbmRleCAxYTZmOWQxLi41YjYzYWYxIDEwMDY0NAotLS0gYS9jb21iaW5lLWRpZmYuYworKysgYi9jb21iaW5lLWRpZmYuYwpAQCAtNzQ1LDcgKzc0NSw3IEBACiAKIAkJCWRvbmUgPSByZWFkX2luX2Z1bGwoZmQsIHJlc3VsdCwgbGVuKTsKIAkJCWlmIChkb25lIDwgMCkKLQkJCQlkaWUoInJlYWQgZXJyb3IgJyVzJyIsIGVsZW0tPnBhdGgpOworCQkJCWRpZV9lcnJubygicmVhZCBlcnJvciAnJXMnIiwgZWxlbS0+cGF0aCk7CiAJCQllbHNlIGlmIChkb25lIDwgbGVuKQogCQkJCWRpZSgiZWFybHkgRU9GICclcyciLCBlbGVtLT5wYXRoKTsKIApkaWZmIC0tZ2l0IGEvY29tbWl0LmMgYi9jb21taXQuYwppbmRleCBhYTNiMzViLi5lMmJjYmU4IDEwMDY0NAotLS0gYS9jb21taXQuYworKysgYi9jb21taXQuYwpAQCAtNTAsNyArNTAsNiBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwYXJzZV9jb21taXRfZGF0ZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKnRhaWwpCiB7Ci0JdW5zaWduZWQgbG9uZyBkYXRlOwogCWNvbnN0IGNoYXIgKmRhdGVwdHI7CiAKIAlpZiAoYnVmICsgNiA+PSB0YWlsKQpAQCAtNzMsMTAgKzcyLDcgQEAKIAlpZiAoYnVmID49IHRhaWwpCiAJCXJldHVybiAwOwogCS8qIGRhdGVwdHIgPCBidWYgJiYgYnVmWy0xXSA9PSAnXG4nLCBzbyBzdHJ0b3VsIHdpbGwgc3RvcCBhdCBidWYtMSAqLwotCWRhdGUgPSBzdHJ0b3VsKGRhdGVwdHIsIE5VTEwsIDEwKTsKLQlpZiAoZGF0ZSA9PSBVTE9OR19NQVgpCi0JCWRhdGUgPSAwOwotCXJldHVybiBkYXRlOworCXJldHVybiBzdHJ0b3VsKGRhdGVwdHIsIE5VTEwsIDEwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb21taXRfZ3JhZnQgKipjb21taXRfZ3JhZnQ7CkBAIC0yNjYsNyArMjYyLDExIEBACiAJCSAgICBidWZwdHJbNDddICE9ICdcbicpCiAJCQlyZXR1cm4gZXJyb3IoImJhZCBwYXJlbnRzIGluIGNvbW1pdCAlcyIsIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CiAJCWJ1ZnB0ciArPSA0ODsKLQkJaWYgKGdyYWZ0KQorCQkvKgorCQkgKiBUaGUgY2xvbmUgaXMgc2hhbGxvdyBpZiBucl9wYXJlbnQgPCAwLCBhbmQgd2UgbXVzdAorCQkgKiBub3QgdHJhdmVyc2UgaXRzIHJlYWwgcGFyZW50cyBldmVuIHdoZW4gd2UgdW5oaWRlIHRoZW0uCisJCSAqLworCQlpZiAoZ3JhZnQgJiYgKGdyYWZ0LT5ucl9wYXJlbnQgPCAwIHx8IGdyYWZ0c19yZXBsYWNlX3BhcmVudHMpKQogCQkJY29udGludWU7CiAJCW5ld19wYXJlbnQgPSBsb29rdXBfY29tbWl0KHBhcmVudCk7CiAJCWlmIChuZXdfcGFyZW50KQpkaWZmIC0tZ2l0IGEvY29tbWl0LmggYi9jb21taXQuaAppbmRleCBiYTlmNjM4Li40ODg2NTQ0IDEwMDY0NAotLS0gYS9jb21taXQuaAorKysgYi9jb21taXQuaApAQCAtNjQsNiArNjQsNyBAQAogfTsKIAogZXh0ZXJuIGludCBub25fYXNjaWkoaW50KTsKK2V4dGVybiBpbnQgaGFzX25vbl9hc2NpaShjb25zdCBjaGFyICp0ZXh0KTsKIHN0cnVjdCByZXZfaW5mbzsgLyogaW4gcmV2aXNpb24uaCwgaXQgY2lyY3VsYXJseSB1c2VzIGVudW0gY21pdF9mbXQgKi8KIGV4dGVybiBjaGFyICpyZWVuY29kZV9jb21taXRfbWVzc2FnZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCiAJCQkJICAgICBjb25zdCBjaGFyICoqZW5jb2RpbmdfcCk7CmRpZmYgLS1naXQgYS9jb21wYXQvYmFzZW5hbWUuYyBiL2NvbXBhdC9iYXNlbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZjhhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvYmFzZW5hbWUuYwpAQCAtMCwwICsxLDE1IEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKKy8qIEFkYXB0ZWQgZnJvbSBsaWJpYmVydHkncyBiYXNlbmFtZS5jLiAgKi8KK2NoYXIgKmdpdGJhc2VuYW1lIChjaGFyICpwYXRoKQoreworCWNvbnN0IGNoYXIgKmJhc2U7CisJLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworCWlmIChoYXNfZG9zX2RyaXZlX3ByZWZpeChwYXRoKSkKKwkJcGF0aCArPSAyOworCWZvciAoYmFzZSA9IHBhdGg7ICpwYXRoOyBwYXRoKyspIHsKKwkJaWYgKGlzX2Rpcl9zZXAoKnBhdGgpKQorCQkJYmFzZSA9IHBhdGggKyAxOworCX0KKwlyZXR1cm4gKGNoYXIgKiliYXNlOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L21pbmd3LmMgYi9jb21wYXQvbWluZ3cuYwppbmRleCBjZGVkYTFkLi5iZWQ0MTc4IDEwMDY0NAotLS0gYS9jb21wYXQvbWluZ3cuYworKysgYi9jb21wYXQvbWluZ3cuYwpAQCAtMSw1ICsxLDYgQEAKICNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKICNpbmNsdWRlICJ3aW4zMi5oIgorI2luY2x1ZGUgPGNvbmlvLmg+CiAjaW5jbHVkZSAiLi4vc3RyYnVmLmgiCiAKIHVuc2lnbmVkIGludCBfQ1JUX2Ztb2RlID0gX09fQklOQVJZOwpAQCAtNTI1LDggKzUyNiw4IEBACiAJaWYgKGJ1ZlswXSAhPSAnIycgfHwgYnVmWzFdICE9ICchJykKIAkJcmV0dXJuIE5VTEw7CiAJYnVmW25dID0gJ1wwJzsKLQlwID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7Ci0JaWYgKCFwKQorCXAgPSBidWYgKyBzdHJjc3BuKGJ1ZiwgIlxyXG4iKTsKKwlpZiAoISpwKQogCQlyZXR1cm4gTlVMTDsKIAogCSpwID0gJ1wwJzsKQEAgLTExNTYsMyArMTE1Nyw3NyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKworY2hhciAqZ2V0cGFzcyhjb25zdCBjaGFyICpwcm9tcHQpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWZwdXRzKHByb21wdCwgc3RkZXJyKTsKKwlmb3IgKDs7KSB7CisJCWNoYXIgYyA9IF9nZXRjaCgpOworCQlpZiAoYyA9PSAnXHInIHx8IGMgPT0gJ1xuJykKKwkJCWJyZWFrOworCQlzdHJidWZfYWRkY2goJmJ1ZiwgYyk7CisJfQorCWZwdXRzKCJcbiIsIHN0ZGVycik7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKKyNpZm5kZWYgTk9fTUlOR1dfUkVQTEFDRV9SRUFERElSCisvKiBNaW5HVyByZWFkZGlyIGltcGxlbWVudGF0aW9uIHRvIGF2b2lkIGV4dHJhIGxzdGF0cyBmb3IgR2l0ICovCitzdHJ1Y3QgbWluZ3dfRElSCit7CisJc3RydWN0IF9maW5kZGF0YV90CWRkX2R0YTsJCS8qIGRpc2sgdHJhbnNmZXIgYXJlYSBmb3IgdGhpcyBkaXIgKi8KKwlzdHJ1Y3QgbWluZ3dfZGlyZW50CWRkX2RpcjsJCS8qIE91ciBvd24gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBkX3R5cGUgKi8KKwlsb25nCQkJZGRfaGFuZGxlOwkvKiBfZmluZG5leHQgaGFuZGxlICovCisJaW50CQkJZGRfc3RhdDsgCS8qIDAgPSBuZXh0IGVudHJ5IHRvIHJlYWQgaXMgZmlyc3QgZW50cnksIC0xID0gb2ZmIHRoZSBlbmQsIHBvc2l0aXZlID0gMCBiYXNlZCBpbmRleCBvZiBuZXh0IGVudHJ5ICovCisJY2hhcgkJCWRkX25hbWVbMV07IAkvKiBnaXZlbiBwYXRoIGZvciBkaXIgd2l0aCBzZWFyY2ggcGF0dGVybiAoc3RydWN0IGlzIGV4dGVuZGVkKSAqLworfTsKKworc3RydWN0IGRpcmVudCAqbWluZ3dfcmVhZGRpcihESVIgKmRpcikKK3sKKwlXSU4zMl9GSU5EX0RBVEFBIGJ1ZjsKKwlIQU5ETEUgaGFuZGxlOworCXN0cnVjdCBtaW5nd19ESVIgKm1kaXIgPSAoc3RydWN0IG1pbmd3X0RJUiopZGlyOworCisJaWYgKCFkaXItPmRkX2hhbmRsZSkgeworCQllcnJubyA9IEVCQURGOyAvKiBObyBzZXRfZXJybm8gZm9yIG1pbmd3ICovCisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChkaXItPmRkX2hhbmRsZSA9PSAobG9uZylJTlZBTElEX0hBTkRMRV9WQUxVRSAmJiBkaXItPmRkX3N0YXQgPT0gMCkKKwl7CisJCWhhbmRsZSA9IEZpbmRGaXJzdEZpbGVBKGRpci0+ZGRfbmFtZSwgJmJ1Zik7CisJCURXT1JEIGxhc3RlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKwkJZGlyLT5kZF9oYW5kbGUgPSAobG9uZyloYW5kbGU7CisJCWlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUgJiYgKGxhc3RlcnIgIT0gRVJST1JfTk9fTU9SRV9GSUxFUykpIHsKKwkJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChsYXN0ZXJyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlIGlmIChkaXItPmRkX2hhbmRsZSA9PSAobG9uZylJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgaWYgKCFGaW5kTmV4dEZpbGVBKChIQU5ETEUpZGlyLT5kZF9oYW5kbGUsICZidWYpKSB7CisJCURXT1JEIGxhc3RlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKwkJRmluZENsb3NlKChIQU5ETEUpZGlyLT5kZF9oYW5kbGUpOworCQlkaXItPmRkX2hhbmRsZSA9IChsb25nKUlOVkFMSURfSEFORExFX1ZBTFVFOworCQkvKiBQT1NJWCBzYXlzIHlvdSBzaG91bGRuJ3Qgc2V0IGVycm5vIHdoZW4gcmVhZGRpciBjYW4ndAorCQkgICBmaW5kIGFueSBtb3JlIGZpbGVzOyBzbywgaWYgYW5vdGhlciBlcnJvciB3ZSBsZWF2ZSBpdCBzZXQuICovCisJCWlmIChsYXN0ZXJyICE9IEVSUk9SX05PX01PUkVfRklMRVMpCisJCQllcnJubyA9IGVycl93aW5fdG9fcG9zaXgobGFzdGVycik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIFdlIGdldCBoZXJlIGlmIGBidWYnIGNvbnRhaW5zIHZhbGlkIGRhdGEuICAqLworCXN0cmNweShkaXItPmRkX2Rpci5kX25hbWUsIGJ1Zi5jRmlsZU5hbWUpOworCSsrZGlyLT5kZF9zdGF0OworCisJLyogU2V0IGZpbGUgdHlwZSwgYmFzZWQgb24gV0lOMzJfRklORF9EQVRBICovCisJbWRpci0+ZGRfZGlyLmRfdHlwZSA9IDA7CisJaWYgKGJ1Zi5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorCQltZGlyLT5kZF9kaXIuZF90eXBlIHw9IERUX0RJUjsKKwllbHNlCisJCW1kaXItPmRkX2Rpci5kX3R5cGUgfD0gRFRfUkVHOworCisJcmV0dXJuIChzdHJ1Y3QgZGlyZW50KikmZGlyLT5kZF9kaXI7Cit9CisjZW5kaWYgLy8gIU5PX01JTkdXX1JFUExBQ0VfUkVBRERJUgpkaWZmIC0tZ2l0IGEvY29tcGF0L21pbmd3LmggYi9jb21wYXQvbWluZ3cuaAppbmRleCA3NjJlYjE0Li5jMTg1OWM1IDEwMDY0NAotLS0gYS9jb21wYXQvbWluZ3cuaAorKysgYi9jb21wYXQvbWluZ3cuaApAQCAtMzgsNiArMzgsOCBAQAogCWNoYXIgKnB3X2RpcjsKIH07CiAKK2V4dGVybiBjaGFyICpnZXRwYXNzKGNvbnN0IGNoYXIgKnByb21wdCk7CisKIHN0cnVjdCBwb2xsZmQgewogCWludCBmZDsgICAgICAgICAgIC8qIGZpbGUgZGVzY3JpcHRvciAqLwogCXNob3J0IGV2ZW50czsgICAgIC8qIHJlcXVlc3RlZCBldmVudHMgKi8KQEAgLTkwLDYgKzkyLDggQEAKIAllcnJubyA9IEVJTlZBTDsKIAlyZXR1cm4gLTE7CiB9CisvKiBiYXNoIGNhbm5vdCByZWxpYWJseSBkZXRlY3QgbmVnYXRpdmUgcmV0dXJuIGNvZGVzIGFzIGZhaWx1cmUgKi8KKyNkZWZpbmUgZXhpdChjb2RlKSBleGl0KChjb2RlKSAmIDB4ZmYpCiAKIC8qCiAgKiBzaW1wbGUgYWRhcHRvcnMKQEAgLTEwOSw3ICsxMTMsNyBAQAogfQogI2RlZmluZSB1bmxpbmsgbWluZ3dfdW5saW5rCiAKLXN0YXRpYyBpbmxpbmUgaW50IHdhaXRwaWQocGlkX3QgcGlkLCB1bnNpZ25lZCAqc3RhdHVzLCB1bnNpZ25lZCBvcHRpb25zKQorc3RhdGljIGlubGluZSBpbnQgd2FpdHBpZChwaWRfdCBwaWQsIGludCAqc3RhdHVzLCB1bnNpZ25lZCBvcHRpb25zKQogewogCWlmIChvcHRpb25zID09IDApCiAJCXJldHVybiBfY3dhaXQoc3RhdHVzLCBwaWQsIDApOwpAQCAtMjMzLDMgKzIzNywzMiBAQAogCXJldHVybiBtaW5nd19tYWluKGFyZ2MsIGFyZ3YpOyBcCiB9IFwKIHN0YXRpYyBpbnQgbWluZ3dfbWFpbihjLHYpCisKKyNpZm5kZWYgTk9fTUlOR1dfUkVQTEFDRV9SRUFERElSCisvKgorICogQSByZXBsYWNlbWVudCBvZiByZWFkZGlyLCB0byBlbnN1cmUgdGhhdCBpdCByZWFkcyB0aGUgZmlsZSB0eXBlIGF0CisgKiB0aGUgc2FtZSB0aW1lLiBUaGlzIGF2b2lkIGV4dHJhIHVubmVlZGVkIGxzdGF0cyBpbiBnaXQgb24gTWluR1cKKyAqLworI3VuZGVmIERUX1VOS05PV04KKyN1bmRlZiBEVF9ESVIKKyN1bmRlZiBEVF9SRUcKKyN1bmRlZiBEVF9MTksKKyNkZWZpbmUgRFRfVU5LTk9XTgkwCisjZGVmaW5lIERUX0RJUgkJMQorI2RlZmluZSBEVF9SRUcJCTIKKyNkZWZpbmUgRFRfTE5LCQkzCisKK3N0cnVjdCBtaW5nd19kaXJlbnQKK3sKKwlsb25nCQlkX2lubzsJCQkvKiBBbHdheXMgemVyby4gKi8KKwl1bmlvbiB7CisJCXVuc2lnbmVkIHNob3J0CWRfcmVjbGVuOwkvKiBBbHdheXMgemVyby4gKi8KKwkJdW5zaWduZWQgY2hhciAgIGRfdHlwZTsJCS8qIFJlaW1wbGVtZW50YXRpb24gYWRkcyB0aGlzICovCisJfTsKKwl1bnNpZ25lZCBzaG9ydAlkX25hbWxlbjsJCS8qIExlbmd0aCBvZiBuYW1lIGluIGRfbmFtZS4gKi8KKwljaGFyCQlkX25hbWVbRklMRU5BTUVfTUFYXTsJLyogRmlsZSBuYW1lLiAqLworfTsKKyNkZWZpbmUgZGlyZW50IG1pbmd3X2RpcmVudAorI2RlZmluZSByZWFkZGlyKHgpIG1pbmd3X3JlYWRkaXIoeCkKK3N0cnVjdCBkaXJlbnQgKm1pbmd3X3JlYWRkaXIoRElSICpkaXIpOworI2VuZGlmIC8vICFOT19NSU5HV19SRVBMQUNFX1JFQURESVIKZGlmZiAtLWdpdCBhL2NvbXBhdC9ta3N0ZW1wcy5jIGIvY29tcGF0L21rc3RlbXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxNzljOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9ta3N0ZW1wcy5jCkBAIC0wLDAgKzEsNzAgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworLyogQWRhcHRlZCBmcm9tIGxpYmliZXJ0eSdzIG1rc3RlbXAuYy4gKi8KKworI3VuZGVmIFRNUF9NQVgKKyNkZWZpbmUgVE1QX01BWCAxNjM4NAorCitpbnQgZ2l0bWtzdGVtcHMoY2hhciAqcGF0dGVybiwgaW50IHN1ZmZpeF9sZW4pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgbGV0dGVyc1tdID0KKwkJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorCQkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisJCSIwMTIzNDU2Nzg5IjsKKwlzdGF0aWMgY29uc3QgaW50IG51bV9sZXR0ZXJzID0gNjI7CisJdWludDY0X3QgdmFsdWU7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJY2hhciAqdGVtcGxhdGU7CisJc2l6ZV90IGxlbjsKKwlpbnQgZmQsIGNvdW50OworCisJbGVuID0gc3RybGVuKHBhdHRlcm4pOworCisJaWYgKGxlbiA8IDYgKyBzdWZmaXhfbGVuKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHN0cm5jbXAoJnBhdHRlcm5bbGVuIC0gNiAtIHN1ZmZpeF9sZW5dLCAiWFhYWFhYIiwgNikpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFJlcGxhY2UgcGF0dGVybidzIFhYWFhYWCBjaGFyYWN0ZXJzIHdpdGggcmFuZG9tbmVzcy4KKwkgKiBUcnkgVE1QX01BWCBkaWZmZXJlbnQgZmlsZW5hbWVzLgorCSAqLworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCXZhbHVlID0gKChzaXplX3QpKHR2LnR2X3VzZWMgPDwgMTYpKSBeIHR2LnR2X3NlYyBeIGdldHBpZCgpOworCXRlbXBsYXRlID0gJnBhdHRlcm5bbGVuIC0gNiAtIHN1ZmZpeF9sZW5dOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IFRNUF9NQVg7ICsrY291bnQpIHsKKwkJdWludDY0X3QgdiA9IHZhbHVlOworCQkvKiBGaWxsIGluIHRoZSByYW5kb20gYml0cy4gKi8KKwkJdGVtcGxhdGVbMF0gPSBsZXR0ZXJzW3YgJSBudW1fbGV0dGVyc107IHYgLz0gbnVtX2xldHRlcnM7CisJCXRlbXBsYXRlWzFdID0gbGV0dGVyc1t2ICUgbnVtX2xldHRlcnNdOyB2IC89IG51bV9sZXR0ZXJzOworCQl0ZW1wbGF0ZVsyXSA9IGxldHRlcnNbdiAlIG51bV9sZXR0ZXJzXTsgdiAvPSBudW1fbGV0dGVyczsKKwkJdGVtcGxhdGVbM10gPSBsZXR0ZXJzW3YgJSBudW1fbGV0dGVyc107IHYgLz0gbnVtX2xldHRlcnM7CisJCXRlbXBsYXRlWzRdID0gbGV0dGVyc1t2ICUgbnVtX2xldHRlcnNdOyB2IC89IG51bV9sZXR0ZXJzOworCQl0ZW1wbGF0ZVs1XSA9IGxldHRlcnNbdiAlIG51bV9sZXR0ZXJzXTsgdiAvPSBudW1fbGV0dGVyczsKKworCQlmZCA9IG9wZW4ocGF0dGVybiwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiwgMDYwMCk7CisJCWlmIChmZCA+IDApCisJCQlyZXR1cm4gZmQ7CisJCS8qCisJCSAqIEZhdGFsIGVycm9yIChFUEVSTSwgRU5PU1BDIGV0YykuCisJCSAqIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBsb29wLgorCQkgKi8KKwkJaWYgKGVycm5vICE9IEVFWElTVCkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBUaGlzIGlzIGEgcmFuZG9tIHZhbHVlLiAgSXQgaXMgb25seSBuZWNlc3NhcnkgdGhhdAorCQkgKiB0aGUgbmV4dCBUTVBfTUFYIHZhbHVlcyBnZW5lcmF0ZWQgYnkgYWRkaW5nIDc3NzcgdG8KKwkJICogVkFMVUUgYXJlIGRpZmZlcmVudCB3aXRoIChtb2R1bGUgMl4zMikuCisJCSAqLworCQl2YWx1ZSArPSA3Nzc3OworCX0KKwkvKiBXZSByZXR1cm4gdGhlIG51bGwgc3RyaW5nIGlmIHdlIGNhbid0IGZpbmQgYSB1bmlxdWUgZmlsZSBuYW1lLiAgKi8KKwlwYXR0ZXJuWzBdID0gJ1wwJzsKKwllcnJubyA9IEVJTlZBTDsKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL0xpY2Vuc2UudHh0IGIvY29tcGF0L25lZG1hbGxvYy9MaWNlbnNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmI3Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9MaWNlbnNlLnR4dApAQCAtMCwwICsxLDIzIEBACitCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Cit0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKK2V4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bworZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCit0aGUgYWJvdmUgbGljZW5zZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kCithbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCit3b3JrcyBhcmUgc29sZWx5IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYnkKK2Egc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQorRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCitBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKK0RFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvUmVhZG1lLnR4dCBiL2NvbXBhdC9uZWRtYWxsb2MvUmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzYzNjU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9SZWFkbWUudHh0CkBAIC0wLDAgKzEsMTM2IEBACituZWRhbGxvYyB2MS4wNSAxNXRoIEp1bmUgMjAwODoKKy09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPQorCitieSBOaWFsbCBEb3VnbGFzIChodHRwOi8vd3d3Lm5lZHByb2QuY29tL3Byb2dyYW1zL3BvcnRhYmxlL25lZG1hbGxvYy8pCisKK0VuY2xvc2VkIGlzIG5lZGFsbG9jLCBhbiBhbHRlcm5hdGl2ZSBtYWxsb2MgaW1wbGVtZW50YXRpb24gZm9yIG11bHRpcGxlCit0aHJlYWRzIHdpdGhvdXQgbG9jayBjb250ZW50aW9uIGJhc2VkIG9uIGRsbWFsbG9jIHYyLjguNC4gSXQgaXMgbW9yZQorb3IgbGVzcyBhIG5ld2VyIGltcGxlbWVudGF0aW9uIG9mIHB0bWFsbG9jMiwgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpbgorTGludXggKHdoaWNoIGlzIGJhc2VkIG9uIGRsbWFsbG9jIHYyLjcuMCkgYnV0IGFsc28gY29udGFpbnMgYSBwZXItdGhyZWFkCitjYWNoZSBmb3IgbWF4aW11bSBDUFUgc2NhbGFiaWxpdHkuCisKK0l0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIHdoaWNoIGJhc2ljYWxseSBtZWFucworeW91IGNhbiBkbyBhbnl0aGluZyB5b3UgbGlrZSB3aXRoIGl0LiBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBtYWxsb2MuYy5oCitmaWxlIHdoaWNoIHJlbWFpbnMgY29weXJpZ2h0IHRvIG90aGVycy4KKworSXQgaGFzIGJlZW4gdGVzdGVkIG9uIHdpbjMyICh4ODYpLCB3aW42NCAoeDY0KSwgTGludXggKHg2NCksIEZyZWVCU0QgKHg2NCkKK2FuZCBBcHBsZSBNYWNPUyBYICh4ODYpLiBJdCB3b3JrcyB2ZXJ5IHdlbGwgb24gYWxsIG9mIHRoZXNlIGFuZCBpcyB2ZXJ5CitzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIHRoZSBzeXN0ZW0gYWxsb2NhdG9yIG9uIGFsbCBvZiB0aGVzZSBwbGF0Zm9ybXMuCisKK0J5IGxpdGVyYWxseSBkcm9wcGluZyBpbiB0aGlzIGFsbG9jYXRvciBhcyBhIHJlcGxhY2VtZW50IGZvciB5b3VyIHN5c3RlbQorYWxsb2NhdG9yLCB5b3UgY2FuIHNlZSByZWFsIHdvcmxkIGltcHJvdmVtZW50cyBvZiB1cCB0byB0aHJlZSB0aW1lcyBpbiBub3JtYWwKK2NvZGUhCisKK1RvIHVzZToKKy09LT0tPS0KK0Ryb3AgaW4gbmVkbWFsbG9jLmgsIG5lZG1hbGxvYy5jIGFuZCBtYWxsb2MuYy5oIGludG8geW91ciBwcm9qZWN0LgorQ29uZmlndXJlIHVzaW5nIHRoZSBpbnN0cnVjdGlvbnMgaW4gbmVkbWFsbG9jLmguIFJ1biBhbmQgZW5qb3kuCisKK1RvIHRlc3QsIGNvbXBpbGUgdGVzdC5jLiBJdCB3aWxsIHJ1biBhIGNvbXBhcmlzb24gYmV0d2VlbiB5b3VyIHN5c3RlbQorYWxsb2NhdG9yIGFuZCBuZWRhbGxvYyBhbmQgdGVsbCB5b3UgaG93IG11Y2ggZmFzdGVyIG5lZGFsbG9jIGlzLiBJdCBhbHNvCitzZXJ2ZXMgYXMgYW4gZXhhbXBsZSBvZiB1c2FnZS4KKworTm90ZXM6CistPS09LT0KK0lmIHlvdSB3YW50IHRoZSB2ZXJ5IGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgYWxsb2NhdG9yLCBnZXQgaXQgZnJvbSB0aGUKK1RuRk9YIFNWTiByZXBvc2l0b3J5IGF0IHN2bjovL3N2bi5iZXJsaW9zLmRlL3ZpZXdjdnMvdG5mb3gvdHJ1bmsvc3JjL25lZG1hbGxvYworCitCZWNhdXNlIG9mIGhvdyBuZWRhbGxvYyBhbGxvY2F0ZXMgYW4gbXNwYWNlIHBlciB0aHJlYWQsIGl0IGNhbiBjYXVzZQorc2V2ZXJlIGJsb2F0aW5nIG9mIG1lbW9yeSB1c2FnZSB1bmRlciBjZXJ0YWluIGFsbG9jYXRpb24gcGF0dGVybnMuCitZb3UgY2FuIHN1YnN0YW50aWFsbHkgcmVkdWNlIHRoaXMgd2FzdGFnZSBieSBzZXR0aW5nIE1BWFRIUkVBRFNJTlBPT0wKK29yIHRoZSB0aHJlYWRzIHBhcmFtZXRlciB0byBuZWRjcmVhdGVwb29sKCkgdG8gYSBmcmFjdGlvbiBvZiB0aGUgbnVtYmVyIG9mCit0aHJlYWRzIHdoaWNoIHdvdWxkIG5vcm1hbGx5IGJlIGluIGEgcG9vbCBhdCBvbmNlLiBUaGlzIHdpbGwgcmVkdWNlCitibG9hdGluZyBhdCB0aGUgY29zdCBvZiBhbiBpbmNyZWFzZSBpbiBsb2NrIGNvbnRlbnRpb24uIElmIGFsbG9jYXRlZCBzaXplCitpcyBsZXNzIHRoYW4gVEhSRUFEQ0FDSEVNQVgsIGxvY2tpbmcgaXMgYXZvaWRlZCA5MC05OSUgb2YgdGhlIHRpbWUgYW5kCitpZiBtb3N0IG9mIHlvdXIgYWxsb2NhdGlvbnMgYXJlIGJlbG93IHRoaXMgdmFsdWUsIHlvdSBjYW4gc2FmZWx5IHNldAorTUFYVEhSRUFEU0lOUE9PTCB0byBvbmUuCisKK1lvdSB3aWxsIHN1ZmZlciBtZW1vcnkgbGVha2FnZSB1bmxlc3MgeW91IGNhbGwgbmVkZGlzYWJsZXRocmVhZGNhY2hlKCkKK3BlciBwb29sIGZvciBldmVyeSB0aHJlYWQgd2hpY2ggZXhpdHMuIFRoaXMgaXMgYmVjYXVzZSBuZWRhbGxvYyBjYW5ub3QKK3BvcnRhYmx5IGtub3cgd2hlbiBhIHRocmVhZCBleGl0cyBhbmQgdGh1cyB3aGVuIGl0cyB0aHJlYWQgY2FjaGUgY2FuCitiZSByZXR1cm5lZCBmb3IgdXNlIGJ5IG90aGVyIGNvZGUuIERvbid0IGZvcmdldCBwb29sIHplcm8sIHRoZSBzeXN0ZW0gcG9vbC4KKworRm9yIEMrKyB0eXBlIGFsbG9jYXRpb24gcGF0dGVybnMgKHdoZXJlIHRoZSBzYW1lIHNpemVzIG9mIG1lbW9yeSBhcmUKK3JlZ3VsYXJseSBhbGxvY2F0ZWQgYW5kIGRlYWxsb2NhdGVkIGFzIG9iamVjdHMgYXJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCksCit0aGUgdGhyZWFkY2FjaGUgYWx3YXlzIGJlbmVmaXRzIHBlcmZvcm1hbmNlLiBJZiBob3dldmVyIHlvdXIgYWxsb2NhdGlvbgorcGF0dGVybnMgYXJlIGRpZmZlcmVudCwgc2VhcmNoaW5nIHRoZSB0aHJlYWRjYWNoZSBtYXkgc2lnbmlmaWNhbnRseSBzbG93Citkb3duIHlvdXIgY29kZSAtIGFzIGEgcnVsZSBvZiB0aHVtYiwgaWYgY2FjaGUgdXRpbGlzYXRpb24gaXMgYmVsb3cgODAlCisoc2VlIHRoZSBzb3VyY2UgZm9yIG5lZGRpc2FibGV0aHJlYWRjYWNoZSgpIGZvciBob3cgdG8gZW5hYmxlIGRlYnVnCitwcmludGluZyBpbiByZWxlYXNlIG1vZGUpIHRoZW4geW91IHNob3VsZCBkaXNhYmxlIHRoZSB0aHJlYWQgY2FjaGUgZm9yCit0aGF0IHRocmVhZC4gWW91IGNhbiBjb21waWxlIG91dCB0aGUgdGhyZWFkY2FjaGUgY29kZSBieSBzZXR0aW5nCitUSFJFQURDQUNIRU1BWCB0byB6ZXJvLgorCitTcGVlZCBjb21wYXJpc29uczoKKy09LT0tPS09LT0tPS09LT0tPQorU2VlIEJlbmNobWFya3MueGxzIGZvciBkZXRhaWxzLgorCitUaGUgZW5jbG9zZWQgdGVzdC5jIGNhbiBkbyB0d28gdGhpbmdzOiBpdCBjYW4gYmUgYSB0b3J0dXJlIHRlc3Qgb3IgYSBzcGVlZAordGVzdC4gVGhlIHNwZWVkIHRlc3QgaXMgZGVzaWduZWQgdG8gYmUgYSByZXByZXNlbnRhdGl2ZSBzeW50aGV0aWMKK21lbW9yeSBhbGxvY2F0b3IgdGVzdC4gSXQgd29ya3MgYnkgcmFuZG9tbHkgbWl4aW5nIGFsbG9jYXRpb25zIHdpdGggZnJlZXMKK3dpdGggaGFsZiBvZiB0aGUgYWxsb2NhdGlvbiBzaXplcyBiZWluZyBhIHR3byBwb3dlciBtdWx0aXBsZSBsZXNzIHRoYW4KKzUxMiBieXRlcyAodG8gbWltaWMgQysrIHN0YWNrIGluc3RhbnRpYXRlZCBvYmplY3RzKSBhbmQgdGhlIG90aGVyIGhhbGYKK2JlaW5nIGEgc2ltcGxlIHJhbmRvbSB2YWx1ZSBsZXNzIHRoYW4gMTZLYi4KKworVGhlIHJlYWwgd29ybGQgY29kZSByZXN1bHRzIGFyZSBmcm9tIFRuJ3MgVGVzdElPIGJlbmNobWFyay4gVGhpcyBpcyBhCitoZWF2aWx5IG11bHRpdGhyZWFkZWQgYW5kIG1lbW9yeSBpbnRlbnNpdmUgYmVuY2htYXJrIHdpdGggYSBsb3Qgb2YgYnJhbmNoaW5nCithbmQgb3RoZXIgc3R1ZmYgbW9kZXJuIHByb2Nlc3NvcnMgZG9uJ3QgbGlrZSBzbyBtdWNoLiBBcyB5b3UnbGwgbm90ZSwgdGhlCit0ZXN0IGRvZXNuJ3Qgc2hvdyB0aGUgYmVuZWZpdHMgb2YgdGhlIHRocmVhZGNhY2hlIG1vc3RseSBkdWUgdG8gdGhlIHNhdHVyYXRpb24KK29mIHRoZSBtZW1vcnkgYnVzIGJlaW5nIHRoZSBsaW1pdGluZyBmYWN0b3IuCisKK0NoYW5nZUxvZzoKKy09LT0tPS09LT0KK3YxLjA1IDE1dGggSnVuZSAyMDA4OgorICogeyAxMDQyIH0gQWRkZWQgZXJyb3IgY2hlY2sgZm9yIFRMU1NFVCgpIGFuZCBUTFNGUkVFKCkgbWFjcm9zLiBUaGFua3MgdG8KK01hcmt1cyBFbGZyaW5nIGZvciByZXBvcnRpbmcgdGhpcy4KKyAqIHsgMTA0MyB9IEZpeGVkIGEgc2VnZmF1bHQgd2hlbiBmcmVlaW5nIG1lbW9yeSBhbGxvY2F0ZWQgdXNpbmcKK25lZGluZGVwZW5kZW50X2NvbWFsbG9jKCkuIFRoYW5rcyB0byBQYXZlbCBWb3plbmlsZWsgZm9yIHJlcG9ydGluZyB0aGlzLgorCit2MS4wNCAxNHRoIEp1bHkgMjAwNzoKKyAqIEZpeGVkIGEgYnVnIHdpdGggdGhlIG5ldyBvcHRpbWlzZWQgaW1wbGVtZW50YXRpb24gdGhhdCBmYWlsZWQgdG8gbG9jaworb24gYSByZWFsbG9jIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKyAqIEZpeGVkIGxhY2sgb2YgdGhyZWFkIHN5bmNocm9uaXNhdGlvbiBpbiBJbml0UG9vbCgpIGNhdXNpbmcgcG9vbCBjb3JydXB0aW9uCisgKiBGaXhlZCBhIG1lbW9yeSBsZWFrIG9mIHRocmVhZCBjYWNoZSBjb250ZW50cyBvbiBkaXNhYmxpbmcuIFRoYW5rcyB0byBFYXJsCitDaGV3IGZvciByZXBvcnRpbmcgdGhpcy4KKyAqIEFkZGVkIGEgc2FuaXR5IGNoZWNrIGZvciBmcmVlZCBibG9ja3MgYmVpbmcgdmFsaWQuCisgKiBSZXdvcmtlZCB0ZXN0LmMgaW50byBiZWluZyBhIHRvcnR1cmUgdGVzdC4KKyAqIEZpeGVkIEdDQyBhc3NlbWJsZXIgb3B0aW1pc2F0aW9uIG1pc3NwZWNpZmljYXRpb24KKwordjEuMDRhbHBoYV9zdm45MTUgN3RoIE9jdG9iZXIgMjAwNjoKKyAqIEZpeGVkIGZhaWx1cmUgdG8gdW5sb2NrIHRocmVhZCBjYWNoZSBsaXN0IGlmIGFsbG9jYXRpbmcgYSBuZXcgbGlzdCBmYWlsZWQuCitUaGFua3MgdG8gRG1pdHJ5IENoaWNoa292IGZvciByZXBvcnRpbmcgdGhpcy4gRnV0aGVyIHRoYW5rcyB0byBBbGVrc2V5IFNhbmluLgorICogRml4ZWQgcmVhbGxvYygwLCA8c2l6ZT4pIHNlZ2ZhdWx0aW5nLiBUaGFua3MgdG8gRG1pdHJ5IENoaWNoa292IGZvcgorcmVwb3J0aW5nIHRoaXMuCisgKiBNYWRlIGNvbmZpZyBkZWZpbmVzICNpZm5kZWYgc28gdGhleSBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCitUaGFua3MgdG8gQWxla3NleSBTYW5pbiBmb3Igc3VnZ2VzdGluZyB0aGlzLgorICogRml4ZWQgZGVhZGxvY2sgaW4gbmVkcHJlYWxsb2MoKSBkdWUgdG8gdW5uZWNlc3NhcnkgbG9ja2luZyBvZiBwcmVmZXJyZWQKK3RocmVhZCBtc3BhY2Ugd2hlbiBtc3BhY2VfcmVhbGxvYygpIGFsd2F5cyB1c2VzIHRoZSBvcmlnaW5hbCBibG9jaydzIG1zcGFjZQorYW55d2F5LiBUaGFua3MgdG8gQWxla3NleSBTYW5pbiBmb3IgcmVwb3J0aW5nIHRoaXMuCisgKiBNYWRlIHNvbWUgc3BlZWQgaW1wcm92ZW1lbnRzIGJ5IGhhY2tpbmcgbXNwYWNlX21hbGxvYygpIHRvIG5vIGxvbmdlciBsb2NrCitpdHMgbXNwYWNlLCB0aHVzIGFsbG93aW5nIHRoZSByZWN1cnNpdmUgbXV0ZXggaW1wbGVtZW50YXRpb24gdG8gYmUgcmVtb3ZlZAord2l0aCBhbiBhc3NvY2lhdGVkIHNwZWVkIGluY3JlYXNlLiBUaGFua3MgdG8gQWxla3NleSBTYW5pbiBmb3Igc3VnZ2VzdGluZyB0aGlzLgorICogRml4ZWQgYSBidWcgd2hlcmUgYWxsb2NhdGluZyBtc3BhY2VzIG92ZXJyYW4gaXRzIG1heCBsaW1pdC4gVGhhbmtzIHRvCitBbGVrc2V5IFNhbmluIGZvciByZXBvcnRpbmcgdGhpcy4KKwordjEuMDMgMTB0aCBKdWx5IDIwMDY6CisgKiBGaXhlZCBtZW1vcnkgY29ycnVwdGlvbiBidWcgaW4gdGhyZWFkY2FjaGUgY29kZSB3aGljaCBvbmx5IGFwcGVhcmVkIHdpdGggPjQKK3RocmVhZHMgYW5kIGluIGhlYXZ5IHVzZSBvZiB0aGUgdGhyZWFkY2FjaGUuCisKK3YxLjAyIDE1dGggTWF5IDIwMDY6CisgKiBJbnRlZ3JhdGVkIGRsbWFsbG9jIHYyLjguNCwgZml4aW5nIHRoZSB3aW4zMiBtZW1vcnkgcmVsZWFzZSBwcm9ibGVtIGFuZAoraW1wcm92aW5nIHBlcmZvcm1hbmNlIHN0aWxsIGZ1cnRoZXIuIFNwZWVkIGlzIG5vdyB1cCB0byB0d2ljZSB0aGUgc3BlZWQgb2YgdjEuMDEKKyhhdmVyYWdlIGlzIDY3JSBmYXN0ZXIpLgorICogRml4ZWQgd2luMzIgY3JpdGljYWwgc2VjdGlvbiBpbXBsZW1lbnRhdGlvbi4gVGhhbmtzIHRvIFBhdmVsIEt1em5ldHNvdgorZm9yIHJlcG9ydGluZyB0aGlzLgorICogV2Fzbid0IGxvY2tpbmcgbXNwYWNlIGlmIGFsbCBtc3BhY2VzIHdlcmUgbG9ja2VkLiBUaGFua3MgdG8gUGF2ZWwgS3V6bmV0c292Citmb3IgcmVwb3J0aW5nIHRoaXMuCisgKiBBZGRlZCBBcHBsZSBNYWMgT1MgWCBzdXBwb3J0LgorCit2MS4wMSAyNHRoIEZlYnJ1YXJ5IDIwMDY6CisgKiBGaXhlZCBtdWx0aXByb2Nlc3NvciBzY2FsaW5nIHByb2JsZW1zIGJ5IHJlbW92aW5nIHNvdXJjZXMgb2YgY2FjaGUgc2xvc2hpbmcKKyAqIEVhcmwgQ2hldyA8ZWFybF9jaGV3IDxhdD4gYWdpbGVudCA8ZG90PiBjb20+IHNlbnQgcGF0Y2hlcyBmb3IgdGhlIGZvbGxvd2luZzoKKyAgIDEuIHNpemUyYmluaWR4KCkgd2Fzbid0IHdvcmtpbmcgZm9yIGRlZmF1bHQgY29kZSBwYXRoIChub24geDg2KQorICAgMi4gRml4ZWQgZmFpbHVyZSB0byByZWxlYXNlIG1zcGFjZSBsb2NrIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB3aGljaAorICAgICAgY2F1c2VkIGEgZGVhZGxvY2sKKwordjEuMDAgMXN0IEphbnVhcnkgMjAwNjoKKyAqIEZpcnN0IHJlbGVhc2UKZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvbWFsbG9jLmMuaCBiL2NvbXBhdC9uZWRtYWxsb2MvbWFsbG9jLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGM0MmUzCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oCkBAIC0wLDAgKzEsNTc1MiBAQAorLyoKKyAgVGhpcyBpcyBhIHZlcnNpb24gKGFrYSBkbG1hbGxvYykgb2YgbWFsbG9jL2ZyZWUvcmVhbGxvYyB3cml0dGVuIGJ5CisgIERvdWcgTGVhIGFuZCByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiwgYXMgZXhwbGFpbmVkIGF0CisgIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL3B1YmxpY2RvbWFpbi4gIFNlbmQgcXVlc3Rpb25zLAorICBjb21tZW50cywgY29tcGxhaW50cywgcGVyZm9ybWFuY2UgZGF0YSwgZXRjIHRvIGRsQGNzLm9zd2Vnby5lZHUKKworKiBWZXJzaW9uIHByZS0yLjguNCBNb24gTm92IDI3IDExOjIyOjM3IDIwMDYgICAgKGRsIGF0IGdlZSkKKworICAgTm90ZTogVGhlcmUgbWF5IGJlIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGlzIG1hbGxvYyBvYnRhaW5hYmxlIGF0CisJICAgZnRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLmMKKwkgQ2hlY2sgYmVmb3JlIGluc3RhbGxpbmchCisKKyogUXVpY2tzdGFydAorCisgIFRoaXMgbGlicmFyeSBpcyBhbGwgaW4gb25lIGZpbGUgdG8gc2ltcGxpZnkgdGhlIG1vc3QgY29tbW9uIHVzYWdlOgorICBmdHAgaXQsIGNvbXBpbGUgaXQgKC1PMyksIGFuZCBsaW5rIGl0IGludG8gYW5vdGhlciBwcm9ncmFtLiBBbGwgb2YKKyAgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIGRlZmF1bHQgdG8gcmVhc29uYWJsZSB2YWx1ZXMgZm9yIHVzZSBvbgorICBtb3N0IHBsYXRmb3Jtcy4gIFlvdSBtaWdodCBsYXRlciB3YW50IHRvIHN0ZXAgdGhyb3VnaCB2YXJpb3VzCisgIGNvbXBpbGUtdGltZSBhbmQgZHluYW1pYyB0dW5pbmcgb3B0aW9ucy4KKworICBGb3IgY29udmVuaWVuY2UsIGFuIGluY2x1ZGUgZmlsZSBmb3IgY29kZSB1c2luZyB0aGlzIG1hbGxvYyBpcyBhdDoKKyAgICAgZnRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLTIuOC40LmgKKyAgWW91IGRvbid0IHJlYWxseSBuZWVkIHRoaXMgLmggZmlsZSB1bmxlc3MgeW91IGNhbGwgZnVuY3Rpb25zIG5vdAorICBkZWZpbmVkIGluIHlvdXIgc3lzdGVtIGluY2x1ZGUgZmlsZXMuICBUaGUgLmggZmlsZSBjb250YWlucyBvbmx5IHRoZQorICBleGNlcnB0cyBmcm9tIHRoaXMgZmlsZSBuZWVkZWQgZm9yIHVzaW5nIHRoaXMgbWFsbG9jIG9uIEFOU0kgQy9DKysKKyAgc3lzdGVtcywgc28gbG9uZyBhcyB5b3UgaGF2ZW4ndCBjaGFuZ2VkIGNvbXBpbGUtdGltZSBvcHRpb25zIGFib3V0CisgIG5hbWluZyBhbmQgdHVuaW5nIHBhcmFtZXRlcnMuICBJZiB5b3UgZG8sIHRoZW4geW91IGNhbiBjcmVhdGUgeW91cgorICBvd24gbWFsbG9jLmggdGhhdCBkb2VzIGluY2x1ZGUgYWxsIHNldHRpbmdzIGJ5IGN1dHRpbmcgYXQgdGhlIHBvaW50CisgIGluZGljYXRlZCBiZWxvdy4gTm90ZSB0aGF0IHlvdSBtYXkgYWxyZWFkeSBieSBkZWZhdWx0IGJlIHVzaW5nIGEgQworICBsaWJyYXJ5IGNvbnRhaW5pbmcgYSBtYWxsb2MgdGhhdCBpcyBiYXNlZCBvbiBzb21lIHZlcnNpb24gb2YgdGhpcworICBtYWxsb2MgKGZvciBleGFtcGxlIGluIGxpbnV4KS4gWW91IG1pZ2h0IHN0aWxsIHdhbnQgdG8gdXNlIHRoZSBvbmUKKyAgaW4gdGhpcyBmaWxlIHRvIGN1c3RvbWl6ZSBzZXR0aW5ncyBvciB0byBhdm9pZCBvdmVyaGVhZHMgYXNzb2NpYXRlZAorICB3aXRoIGxpYnJhcnkgdmVyc2lvbnMuCisKKyogVml0YWwgc3RhdGlzdGljczoKKworICBTdXBwb3J0ZWQgcG9pbnRlci9zaXplX3QgcmVwcmVzZW50YXRpb246ICAgICAgIDQgb3IgOCBieXRlcworICAgICAgIHNpemVfdCBNVVNUIGJlIGFuIHVuc2lnbmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMKKyAgICAgICBwb2ludGVycy4gKElmIHlvdSBhcmUgdXNpbmcgYW4gYW5jaWVudCBzeXN0ZW0gdGhhdCBkZWNsYXJlcworICAgICAgIHNpemVfdCBhcyBhIHNpZ25lZCB0eXBlLCBvciBuZWVkIGl0IHRvIGJlIGEgZGlmZmVyZW50IHdpZHRoCisgICAgICAgdGhhbiBwb2ludGVycywgeW91IGNhbiB1c2UgYSBwcmV2aW91cyByZWxlYXNlIG9mIHRoaXMgbWFsbG9jCisgICAgICAgKGUuZy4gMi43LjIpIHN1cHBvcnRpbmcgdGhlc2UuKQorCisgIEFsaWdubWVudDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyAoZGVmYXVsdCkKKyAgICAgICBUaGlzIHN1ZmZpY2VzIGZvciBuZWFybHkgYWxsIGN1cnJlbnQgbWFjaGluZXMgYW5kIEMgY29tcGlsZXJzLgorICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgdG8gYmUgd2lkZXIgdGhhbiB0aGlzCisgICAgICAgaWYgbmVjZXNzYXJ5ICh1cCB0byAxMjhieXRlcyksIGF0IHRoZSBleHBlbnNlIG9mIHVzaW5nIG1vcmUgc3BhY2UuCisKKyAgTWluaW11bSBvdmVyaGVhZCBwZXIgYWxsb2NhdGVkIGNodW5rOiAgIDQgb3IgIDggYnl0ZXMgKGlmIDRieXRlIHNpemVzKQorCQkJCQkgIDggb3IgMTYgYnl0ZXMgKGlmIDhieXRlIHNpemVzKQorICAgICAgIEVhY2ggbWFsbG9jZWQgY2h1bmsgaGFzIGEgaGlkZGVuIHdvcmQgb2Ygb3ZlcmhlYWQgaG9sZGluZyBzaXplCisgICAgICAgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiwgYW5kIGFkZGl0aW9uYWwgY3Jvc3MtY2hlY2sgd29yZAorICAgICAgIGlmIEZPT1RFUlMgaXMgZGVmaW5lZC4KKworICBNaW5pbXVtIGFsbG9jYXRlZCBzaXplOiA0LWJ5dGUgcHRyczogIDE2IGJ5dGVzICAgIChpbmNsdWRpbmcgb3ZlcmhlYWQpCisJCQkgIDgtYnl0ZSBwdHJzOiAgMzIgYnl0ZXMgICAgKGluY2x1ZGluZyBvdmVyaGVhZCkKKworICAgICAgIEV2ZW4gYSByZXF1ZXN0IGZvciB6ZXJvIGJ5dGVzIChpLmUuLCBtYWxsb2MoMCkpIHJldHVybnMgYQorICAgICAgIHBvaW50ZXIgdG8gc29tZXRoaW5nIG9mIHRoZSBtaW5pbXVtIGFsbG9jYXRhYmxlIHNpemUuCisgICAgICAgVGhlIG1heGltdW0gb3ZlcmhlYWQgd2FzdGFnZSAoaS5lLiwgbnVtYmVyIG9mIGV4dHJhIGJ5dGVzCisgICAgICAgYWxsb2NhdGVkIHRoYW4gd2VyZSByZXF1ZXN0ZWQgaW4gbWFsbG9jKSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwKKyAgICAgICB0byB0aGUgbWluaW11bSBzaXplLCBleGNlcHQgZm9yIHJlcXVlc3RzID49IG1tYXBfdGhyZXNob2xkIHRoYXQKKyAgICAgICBhcmUgc2VydmljZWQgdmlhIG1tYXAoKSwgd2hlcmUgdGhlIHdvcnN0IGNhc2Ugd2FzdGFnZSBpcyBhYm91dAorICAgICAgIDMyIGJ5dGVzIHBsdXMgdGhlIHJlbWFpbmRlciBmcm9tIGEgc3lzdGVtIHBhZ2UgKHRoZSBtaW5pbWFsCisgICAgICAgbW1hcCB1bml0KTsgdHlwaWNhbGx5IDQwOTYgb3IgODE5MiBieXRlcy4KKworICBTZWN1cml0eTogc3RhdGljLXNhZmU7IG9wdGlvbmFsbHkgbW9yZSBvciBsZXNzCisgICAgICAgVGhlICJzZWN1cml0eSIgb2YgbWFsbG9jIHJlZmVycyB0byB0aGUgYWJpbGl0eSBvZiBtYWxpY2lvdXMKKyAgICAgICBjb2RlIHRvIGFjY2VudHVhdGUgdGhlIGVmZmVjdHMgb2YgZXJyb3JzIChmb3IgZXhhbXBsZSwgZnJlZWluZworICAgICAgIHNwYWNlIHRoYXQgaXMgbm90IGN1cnJlbnRseSBtYWxsb2MnZWQgb3Igb3ZlcndyaXRpbmcgcGFzdCB0aGUKKyAgICAgICBlbmRzIG9mIGNodW5rcykgaW4gY29kZSB0aGF0IGNhbGxzIG1hbGxvYy4gIFRoaXMgbWFsbG9jCisgICAgICAgZ3VhcmFudGVlcyBub3QgdG8gbW9kaWZ5IGFueSBtZW1vcnkgbG9jYXRpb25zIGJlbG93IHRoZSBiYXNlIG9mCisgICAgICAgaGVhcCwgaS5lLiwgc3RhdGljIHZhcmlhYmxlcywgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YgdXNhZ2UKKyAgICAgICBlcnJvcnMuICBUaGUgcm91dGluZXMgYWRkaXRpb25hbGx5IGRldGVjdCBtb3N0IGltcHJvcGVyIGZyZWVzCisgICAgICAgYW5kIHJlYWxsb2NzLiAgQWxsIHRoaXMgaG9sZHMgYXMgbG9uZyBhcyB0aGUgc3RhdGljIGJvb2trZWVwaW5nCisgICAgICAgZm9yIG1hbGxvYyBpdHNlbGYgaXMgbm90IGNvcnJ1cHRlZCBieSBzb21lIG90aGVyIG1lYW5zLiAgVGhpcworICAgICAgIGlzIG9ubHkgb25lIGFzcGVjdCBvZiBzZWN1cml0eSAtLSB0aGVzZSBjaGVja3MgZG8gbm90LCBhbmQKKyAgICAgICBjYW5ub3QsIGRldGVjdCBhbGwgcG9zc2libGUgcHJvZ3JhbW1pbmcgZXJyb3JzLgorCisgICAgICAgSWYgRk9PVEVSUyBpcyBkZWZpbmVkIG5vbnplcm8sIHRoZW4gZWFjaCBhbGxvY2F0ZWQgY2h1bmsKKyAgICAgICBjYXJyaWVzIGFuIGFkZGl0aW9uYWwgY2hlY2sgd29yZCB0byB2ZXJpZnkgdGhhdCBpdCB3YXMgbWFsbG9jZWQKKyAgICAgICBmcm9tIGl0cyBzcGFjZS4gIFRoZXNlIGNoZWNrIHdvcmRzIGFyZSB0aGUgc2FtZSB3aXRoaW4gZWFjaAorICAgICAgIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0gdXNpbmcgbWFsbG9jLCBidXQgZGlmZmVyIGFjcm9zcworICAgICAgIGV4ZWN1dGlvbnMsIHNvIGV4dGVybmFsbHkgY3JhZnRlZCBmYWtlIGNodW5rcyBjYW5ub3QgYmUKKyAgICAgICBmcmVlZC4gVGhpcyBpbXByb3ZlcyBzZWN1cml0eSBieSByZWplY3RpbmcgZnJlZXMvcmVhbGxvY3MgdGhhdAorICAgICAgIGNvdWxkIGNvcnJ1cHQgaGVhcCBtZW1vcnksIGluIGFkZGl0aW9uIHRvIHRoZSBjaGVja3MgcHJldmVudGluZworICAgICAgIHdyaXRlcyB0byBzdGF0aWNzIHRoYXQgYXJlIGFsd2F5cyBvbi4gIFRoaXMgbWF5IGZ1cnRoZXIgaW1wcm92ZQorICAgICAgIHNlY3VyaXR5IGF0IHRoZSBleHBlbnNlIG9mIHRpbWUgYW5kIHNwYWNlIG92ZXJoZWFkLiAgKE5vdGUgdGhhdAorICAgICAgIEZPT1RFUlMgbWF5IGFsc28gYmUgd29ydGggdXNpbmcgd2l0aCBNU1BBQ0VTLikKKworICAgICAgIEJ5IGRlZmF1bHQgZGV0ZWN0ZWQgZXJyb3JzIGNhdXNlIHRoZSBwcm9ncmFtIHRvIGFib3J0IChjYWxsaW5nCisgICAgICAgImFib3J0KCkiKS4gWW91IGNhbiBvdmVycmlkZSB0aGlzIHRvIGluc3RlYWQgcHJvY2VlZCBwYXN0CisgICAgICAgZXJyb3JzIGJ5IGRlZmluaW5nIFBST0NFRURfT05fRVJST1IuICBJbiB0aGlzIGNhc2UsIGEgYmFkIGZyZWUKKyAgICAgICBoYXMgbm8gZWZmZWN0LCBhbmQgYSBtYWxsb2MgdGhhdCBlbmNvdW50ZXJzIGEgYmFkIGFkZHJlc3MKKyAgICAgICBjYXVzZWQgYnkgdXNlciBvdmVyd3JpdGVzIHdpbGwgaWdub3JlIHRoZSBiYWQgYWRkcmVzcyBieQorICAgICAgIGRyb3BwaW5nIHBvaW50ZXJzIGFuZCBpbmRpY2VzIHRvIGFsbCBrbm93biBtZW1vcnkuIFRoaXMgbWF5CisgICAgICAgYmUgYXBwcm9wcmlhdGUgZm9yIHByb2dyYW1zIHRoYXQgc2hvdWxkIGNvbnRpbnVlIGlmIGF0IGFsbAorICAgICAgIHBvc3NpYmxlIGluIHRoZSBmYWNlIG9mIHByb2dyYW1taW5nIGVycm9ycywgYWx0aG91Z2ggdGhleSBtYXkKKyAgICAgICBydW4gb3V0IG9mIG1lbW9yeSBiZWNhdXNlIGRyb3BwZWQgbWVtb3J5IGlzIG5ldmVyIHJlY2xhaW1lZC4KKworICAgICAgIElmIHlvdSBkb24ndCBsaWtlIGVpdGhlciBvZiB0aGVzZSBvcHRpb25zLCB5b3UgY2FuIGRlZmluZQorICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OIGFuZCBVU0FHRV9FUlJPUl9BQ1RJT04gdG8gZG8gYW55dGhpbmcKKyAgICAgICBlbHNlLiBBbmQgaWYgaWYgeW91IGFyZSBzdXJlIHRoYXQgeW91ciBwcm9ncmFtIHVzaW5nIG1hbGxvYyBoYXMKKyAgICAgICBubyBlcnJvcnMgb3IgdnVsbmVyYWJpbGl0aWVzLCB5b3UgY2FuIGRlZmluZSBJTlNFQ1VSRSB0byAxLAorICAgICAgIHdoaWNoIG1pZ2h0IChvciBtaWdodCBub3QpIHByb3ZpZGUgYSBzbWFsbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKworICBUaHJlYWQtc2FmZXR5OiBOT1QgdGhyZWFkLXNhZmUgdW5sZXNzIFVTRV9MT0NLUyBkZWZpbmVkCisgICAgICAgV2hlbiBVU0VfTE9DS1MgaXMgZGVmaW5lZCwgZWFjaCBwdWJsaWMgY2FsbCB0byBtYWxsb2MsIGZyZWUsCisgICAgICAgZXRjIGlzIHN1cnJvdW5kZWQgd2l0aCBlaXRoZXIgYSBwdGhyZWFkIG11dGV4IG9yIGEgd2luMzIKKyAgICAgICBzcGlubG9jayAoZGVwZW5kaW5nIG9uIFdJTjMyKS4gVGhpcyBpcyBub3QgZXNwZWNpYWxseSBmYXN0LCBhbmQKKyAgICAgICBjYW4gYmUgYSBtYWpvciBib3R0bGVuZWNrLiAgSXQgaXMgZGVzaWduZWQgb25seSB0byBwcm92aWRlCisgICAgICAgbWluaW1hbCBwcm90ZWN0aW9uIGluIGNvbmN1cnJlbnQgZW52aXJvbm1lbnRzLCBhbmQgdG8gcHJvdmlkZSBhCisgICAgICAgYmFzaXMgZm9yIGV4dGVuc2lvbnMuICBJZiB5b3UgYXJlIHVzaW5nIG1hbGxvYyBpbiBhIGNvbmN1cnJlbnQKKyAgICAgICBwcm9ncmFtLCBjb25zaWRlciBpbnN0ZWFkIHVzaW5nIG5lZG1hbGxvYworICAgICAgIChodHRwOi8vd3d3Lm5lZHByb2QuY29tL3Byb2dyYW1zL3BvcnRhYmxlL25lZG1hbGxvYy8pIG9yCisgICAgICAgcHRtYWxsb2MgKFNlZSBodHRwOi8vd3d3Lm1hbGxvYy5kZSksIHdoaWNoIGFyZSBkZXJpdmVkCisgICAgICAgZnJvbSB2ZXJzaW9ucyBvZiB0aGlzIG1hbGxvYy4KKworICBTeXN0ZW0gcmVxdWlyZW1lbnRzOiBBbnkgY29tYmluYXRpb24gb2YgTU9SRUNPUkUgYW5kL29yIE1NQVAvTVVOTUFQCisgICAgICAgVGhpcyBtYWxsb2MgY2FuIHVzZSB1bml4IHNicmsgb3IgYW55IGVtdWxhdGlvbiAoaW52b2tlZCB1c2luZworICAgICAgIHRoZSBDQUxMX01PUkVDT1JFIG1hY3JvKSBhbmQvb3IgbW1hcC9tdW5tYXAgb3IgYW55IGVtdWxhdGlvbgorICAgICAgIChpbnZva2VkIHVzaW5nIENBTExfTU1BUC9DQUxMX01VTk1BUCkgdG8gZ2V0IGFuZCByZWxlYXNlIHN5c3RlbQorICAgICAgIG1lbW9yeS4gIE9uIG1vc3QgdW5peCBzeXN0ZW1zLCBpdCB0ZW5kcyB0byB3b3JrIGJlc3QgaWYgYm90aAorICAgICAgIE1PUkVDT1JFIGFuZCBNTUFQIGFyZSBlbmFibGVkLiAgT24gV2luMzIsIGl0IHVzZXMgZW11bGF0aW9ucworICAgICAgIGJhc2VkIG9uIFZpcnR1YWxBbGxvYy4gSXQgYWxzbyB1c2VzIGNvbW1vbiBDIGxpYnJhcnkgZnVuY3Rpb25zCisgICAgICAgbGlrZSBtZW1zZXQuCisKKyAgQ29tcGxpYW5jZTogSSBiZWxpZXZlIGl0IGlzIGNvbXBsaWFudCB3aXRoIHRoZSBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uCisgICAgICAgKFNlZSBodHRwOi8vd3d3LnVuaXgub3JnKS4gQWxzbyBTVklEL1hQRywgQU5TSSBDLCBhbmQgcHJvYmFibHkKKyAgICAgICBvdGhlcnMgYXMgd2VsbC4KKworKiBPdmVydmlldyBvZiBhbGdvcml0aG1zCisKKyAgVGhpcyBpcyBub3QgdGhlIGZhc3Rlc3QsIG1vc3Qgc3BhY2UtY29uc2VydmluZywgbW9zdCBwb3J0YWJsZSwgb3IKKyAgbW9zdCB0dW5hYmxlIG1hbGxvYyBldmVyIHdyaXR0ZW4uIEhvd2V2ZXIgaXQgaXMgYW1vbmcgdGhlIGZhc3Rlc3QKKyAgd2hpbGUgYWxzbyBiZWluZyBhbW9uZyB0aGUgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBwb3J0YWJsZSBhbmQKKyAgdHVuYWJsZS4gIENvbnNpc3RlbnQgYmFsYW5jZSBhY3Jvc3MgdGhlc2UgZmFjdG9ycyByZXN1bHRzIGluIGEgZ29vZAorICBnZW5lcmFsLXB1cnBvc2UgYWxsb2NhdG9yIGZvciBtYWxsb2MtaW50ZW5zaXZlIHByb2dyYW1zLgorCisgIEluIG1vc3Qgd2F5cywgdGhpcyBtYWxsb2MgaXMgYSBiZXN0LWZpdCBhbGxvY2F0b3IuIEdlbmVyYWxseSwgaXQKKyAgY2hvb3NlcyB0aGUgYmVzdC1maXR0aW5nIGV4aXN0aW5nIGNodW5rIGZvciBhIHJlcXVlc3QsIHdpdGggdGllcworICBicm9rZW4gaW4gYXBwcm94aW1hdGVseSBsZWFzdC1yZWNlbnRseS11c2VkIG9yZGVyLiAoVGhpcyBzdHJhdGVneQorICBub3JtYWxseSBtYWludGFpbnMgbG93IGZyYWdtZW50YXRpb24uKSBIb3dldmVyLCBmb3IgcmVxdWVzdHMgbGVzcworICB0aGFuIDI1NmJ5dGVzLCBpdCBkZXZpYXRlcyBmcm9tIGJlc3QtZml0IHdoZW4gdGhlcmUgaXMgbm90IGFuCisgIGV4YWN0bHkgZml0dGluZyBhdmFpbGFibGUgY2h1bmsgYnkgcHJlZmVycmluZyB0byB1c2Ugc3BhY2UgYWRqYWNlbnQKKyAgdG8gdGhhdCB1c2VkIGZvciB0aGUgcHJldmlvdXMgc21hbGwgcmVxdWVzdCwgYXMgd2VsbCBhcyBieSBicmVha2luZworICB0aWVzIGluIGFwcHJveGltYXRlbHkgbW9zdC1yZWNlbnRseS11c2VkIG9yZGVyLiAoVGhlc2UgZW5oYW5jZQorICBsb2NhbGl0eSBvZiBzZXJpZXMgb2Ygc21hbGwgYWxsb2NhdGlvbnMuKSAgQW5kIGZvciB2ZXJ5IGxhcmdlIHJlcXVlc3RzCisgICg+PSAyNTZLYiBieSBkZWZhdWx0KSwgaXQgcmVsaWVzIG9uIHN5c3RlbSBtZW1vcnkgbWFwcGluZworICBmYWNpbGl0aWVzLCBpZiBzdXBwb3J0ZWQuICAoVGhpcyBoZWxwcyBhdm9pZCBjYXJyeWluZyBhcm91bmQgYW5kCisgIHBvc3NpYmx5IGZyYWdtZW50aW5nIG1lbW9yeSB1c2VkIG9ubHkgZm9yIGxhcmdlIGNodW5rcy4pCisKKyAgQWxsIG9wZXJhdGlvbnMgKGV4Y2VwdCBtYWxsb2Nfc3RhdHMgYW5kIG1hbGxpbmZvKSBoYXZlIGV4ZWN1dGlvbgorICB0aW1lcyB0aGF0IGFyZSBib3VuZGVkIGJ5IGEgY29uc3RhbnQgZmFjdG9yIG9mIHRoZSBudW1iZXIgb2YgYml0cyBpbgorICBhIHNpemVfdCwgbm90IGNvdW50aW5nIGFueSBjbGVhcmluZyBpbiBjYWxsb2Mgb3IgY29weWluZyBpbiByZWFsbG9jLAorICBvciBhY3Rpb25zIHN1cnJvdW5kaW5nIE1PUkVDT1JFIGFuZCBNTUFQIHRoYXQgaGF2ZSB0aW1lcworICBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBub24tY29udGlndW91cyByZWdpb25zIHJldHVybmVkIGJ5CisgIHN5c3RlbSBhbGxvY2F0aW9uIHJvdXRpbmVzLCB3aGljaCBpcyBvZnRlbiBqdXN0IDEuIEluIHJlYWwtdGltZQorICBhcHBsaWNhdGlvbnMsIHlvdSBjYW4gb3B0aW9uYWxseSBzdXBwcmVzcyBzZWdtZW50IHRyYXZlcnNhbHMgdXNpbmcKKyAgTk9fU0VHTUVOVF9UUkFWRVJTQUwsIHdoaWNoIGFzc3VyZXMgYm91bmRlZCBleGVjdXRpb24gZXZlbiB3aGVuCisgIHN5c3RlbSBhbGxvY2F0b3JzIHJldHVybiBub24tY29udGlndW91cyBzcGFjZXMsIGF0IHRoZSB0eXBpY2FsCisgIGV4cGVuc2Ugb2YgY2FycnlpbmcgYXJvdW5kIG1vcmUgbWVtb3J5IGFuZCBpbmNyZWFzZWQgZnJhZ21lbnRhdGlvbi4KKworICBUaGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHZlcnkgbW9kdWxhciBhbmQgc2VyaW91c2x5IG92ZXJ1c2VzCisgIG1hY3Jvcy4gUGVyaGFwcyBzb21lZGF5IGFsbCBDIGNvbXBpbGVycyB3aWxsIGRvIGFzIGdvb2QgYSBqb2IKKyAgaW5saW5pbmcgbW9kdWxhciBjb2RlIGFzIGNhbiBub3cgYmUgZG9uZSBieSBicnV0ZS1mb3JjZSBleHBhbnNpb24sCisgIGJ1dCBub3csIGVub3VnaCBvZiB0aGVtIHNlZW0gbm90IHRvLgorCisgIFNvbWUgY29tcGlsZXJzIGlzc3VlIGEgbG90IG9mIHdhcm5pbmdzIGFib3V0IGNvZGUgdGhhdCBpcworICBkZWFkL3VucmVhY2hhYmxlIG9ubHkgb24gc29tZSBwbGF0Zm9ybXMsIGFuZCBhbHNvIGFib3V0IGludGVudGlvbmFsCisgIHVzZXMgb2YgbmVnYXRpb24gb24gdW5zaWduZWQgdHlwZXMuIEFsbCBrbm93biBjYXNlcyBvZiBlYWNoIGNhbiBiZQorICBpZ25vcmVkLgorCisgIEZvciBhIGxvbmdlciBidXQgb3V0IG9mIGRhdGUgaGlnaC1sZXZlbCBkZXNjcmlwdGlvbiwgc2VlCisgICAgIGh0dHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9kbC9odG1sL21hbGxvYy5odG1sCisKKyogTVNQQUNFUworICBJZiBNU1BBQ0VTIGlzIGRlZmluZWQsIHRoZW4gaW4gYWRkaXRpb24gdG8gbWFsbG9jLCBmcmVlLCBldGMuLAorICB0aGlzIGZpbGUgYWxzbyBkZWZpbmVzIG1zcGFjZV9tYWxsb2MsIG1zcGFjZV9mcmVlLCBldGMuIFRoZXNlCisgIGFyZSB2ZXJzaW9ucyBvZiBtYWxsb2Mgcm91dGluZXMgdGhhdCB0YWtlIGFuICJtc3BhY2UiIGFyZ3VtZW50CisgIG9idGFpbmVkIHVzaW5nIGNyZWF0ZV9tc3BhY2UsIHRvIGNvbnRyb2wgYWxsIGludGVybmFsIGJvb2trZWVwaW5nLgorICBJZiBPTkxZX01TUEFDRVMgaXMgZGVmaW5lZCwgb25seSB0aGVzZSB2ZXJzaW9ucyBhcmUgY29tcGlsZWQuCisgIFNvIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0aGlzIGFsbG9jYXRvciBmb3Igb25seSBzb21lIGFsbG9jYXRpb25zLAorICBhbmQgeW91ciBzeXN0ZW0gbWFsbG9jIGZvciBvdGhlcnMsIHlvdSBjYW4gY29tcGlsZSB3aXRoCisgIE9OTFlfTVNQQUNFUyBhbmQgdGhlbiBkbyBzb21ldGhpbmcgbGlrZS4uLgorICAgIHN0YXRpYyBtc3BhY2UgbXltc3BhY2UgPSBjcmVhdGVfbXNwYWNlKDAsMCk7IC8vIGZvciBleGFtcGxlCisgICAgI2RlZmluZSBteW1hbGxvYyhieXRlcykgIG1zcGFjZV9tYWxsb2MobXltc3BhY2UsIGJ5dGVzKQorCisgIChOb3RlOiBJZiB5b3Ugb25seSBuZWVkIG9uZSBpbnN0YW5jZSBvZiBhbiBtc3BhY2UsIHlvdSBjYW4gaW5zdGVhZAorICB1c2UgIlVTRV9ETF9QUkVGSVgiIHRvIHJlbGFiZWwgdGhlIGdsb2JhbCBtYWxsb2MuKQorCisgIFlvdSBjYW4gc2ltaWxhcmx5IGNyZWF0ZSB0aHJlYWQtbG9jYWwgYWxsb2NhdG9ycyBieSBzdG9yaW5nCisgIG1zcGFjZXMgYXMgdGhyZWFkLWxvY2Fscy4gRm9yIGV4YW1wbGU6CisgICAgc3RhdGljIF9fdGhyZWFkIG1zcGFjZSB0bG1zID0gMDsKKyAgICB2b2lkKiAgdGxtYWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgICAgICBpZiAodGxtcyA9PSAwKSB0bG1zID0gY3JlYXRlX21zcGFjZSgwLCAwKTsKKyAgICAgIHJldHVybiBtc3BhY2VfbWFsbG9jKHRsbXMsIGJ5dGVzKTsKKyAgICB9CisgICAgdm9pZCAgdGxmcmVlKHZvaWQqIG1lbSkgeyBtc3BhY2VfZnJlZSh0bG1zLCBtZW0pOyB9CisKKyAgVW5sZXNzIEZPT1RFUlMgaXMgZGVmaW5lZCwgZWFjaCBtc3BhY2UgaXMgY29tcGxldGVseSBpbmRlcGVuZGVudC4KKyAgWW91IGNhbm5vdCBhbGxvY2F0ZSBmcm9tIG9uZSBhbmQgZnJlZSB0byBhbm90aGVyIChhbHRob3VnaAorICBjb25mb3JtYW5jZSBpcyBvbmx5IHdlYWtseSBjaGVja2VkLCBzbyB1c2FnZSBlcnJvcnMgYXJlIG5vdCBhbHdheXMKKyAgY2F1Z2h0KS4gSWYgRk9PVEVSUyBpcyBkZWZpbmVkLCB0aGVuIGVhY2ggY2h1bmsgY2FycmllcyBhcm91bmQgYSB0YWcKKyAgaW5kaWNhdGluZyBpdHMgb3JpZ2luYXRpbmcgbXNwYWNlLCBhbmQgZnJlZXMgYXJlIGRpcmVjdGVkIHRvIHRoZWlyCisgIG9yaWdpbmF0aW5nIHNwYWNlcy4KKworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENvbXBpbGUtdGltZSBvcHRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZSBjYXJlZnVsIGluIHNldHRpbmcgI2RlZmluZSB2YWx1ZXMgZm9yIG51bWVyaWNhbCBjb25zdGFudHMgb2YgdHlwZQorc2l6ZV90LiBPbiBzb21lIHN5c3RlbXMsIGxpdGVyYWwgdmFsdWVzIGFyZSBub3QgYXV0b21hdGljYWxseSBleHRlbmRlZAordG8gc2l6ZV90IHByZWNpc2lvbiB1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSBjYXN0ZWQuIFlvdSBjYW4gYWxzbwordXNlIHRoZSBzeW1ib2xpYyB2YWx1ZXMgTUFYX1NJWkVfVCwgU0laRV9UX09ORSwgZXRjIGJlbG93LgorCitXSU4zMiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmaW5lZCBpZiBfV0lOMzIgZGVmaW5lZAorICBEZWZpbmluZyBXSU4zMiBzZXRzIHVwIGRlZmF1bHRzIGZvciBNUyBlbnZpcm9ubWVudCBhbmQgY29tcGlsZXJzLgorICBPdGhlcndpc2UgZGVmYXVsdHMgYXJlIGZvciB1bml4LiBCZXdhcmUgdGhhdCB0aGVyZSBzZWVtIHRvIGJlIHNvbWUKKyAgY2FzZXMgd2hlcmUgdGhpcyBtYWxsb2MgbWlnaHQgbm90IGJlIGEgcHVyZSBkcm9wLWluIHJlcGxhY2VtZW50IGZvcgorICBXaW4zMiBtYWxsb2M6IFJhbmRvbS1sb29raW5nIGZhaWx1cmVzIGZyb20gV2luMzIgR0RJIEFQSSdzIChlZzsKKyAgU2V0RElCaXRzKCkpIG1heSBiZSBkdWUgdG8gYnVncyBpbiBzb21lIHZpZGVvIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMKKyAgd2hlbiBwaXhlbCBidWZmZXJzIGFyZSBtYWxsb2MoKWVkLCBhbmQgdGhlIHJlZ2lvbiBzcGFucyBtb3JlIHRoYW4KKyAgb25lIFZpcnR1YWxBbGxvYygpZWQgcmVnaW9uLiBCZWNhdXNlIGRsbWFsbG9jIHVzZXMgYSBzbWFsbCAoNjRLYikKKyAgZGVmYXVsdCBncmFudWxhcml0eSwgcGl4ZWwgYnVmZmVycyBtYXkgc3RyYWRkbGUgdmlydHVhbCBhbGxvY2F0aW9uCisgIHJlZ2lvbnMgbW9yZSBvZnRlbiB0aGFuIHdoZW4gdXNpbmcgdGhlIE1pY3Jvc29mdCBhbGxvY2F0b3IuICBZb3UgY2FuCisgIGF2b2lkIHRoaXMgYnkgdXNpbmcgVmlydHVhbEFsbG9jKCkgYW5kIFZpcnR1YWxGcmVlKCkgZm9yIGFsbCBwaXhlbAorICBidWZmZXJzIHJhdGhlciB0aGFuIHVzaW5nIG1hbGxvYygpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsCisgIHJlY29tcGlsZSB0aGlzIG1hbGxvYyB3aXRoIGEgbGFyZ2VyIERFRkFVTFRfR1JBTlVMQVJJVFkuCisKK01BTExPQ19BTElHTk1FTlQgICAgICAgICBkZWZhdWx0OiAoc2l6ZV90KTgKKyAgQ29udHJvbHMgdGhlIG1pbmltdW0gYWxpZ25tZW50IGZvciBtYWxsb2MnZWQgY2h1bmtzLiAgSXQgbXVzdCBiZSBhCisgIHBvd2VyIG9mIHR3byBhbmQgYXQgbGVhc3QgOCwgZXZlbiBvbiBtYWNoaW5lcyBmb3Igd2hpY2ggc21hbGxlcgorICBhbGlnbm1lbnRzIHdvdWxkIHN1ZmZpY2UuIEl0IG1heSBiZSBkZWZpbmVkIGFzIGxhcmdlciB0aGFuIHRoaXMKKyAgdGhvdWdoLiBOb3RlIGhvd2V2ZXIgdGhhdCBjb2RlIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXJlIG9wdGltaXplZCBmb3IKKyAgdGhlIGNhc2Ugb2YgOC1ieXRlIGFsaWdubWVudC4KKworTVNQQUNFUyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQorICBJZiB0cnVlLCBjb21waWxlIGluIHN1cHBvcnQgZm9yIGluZGVwZW5kZW50IGFsbG9jYXRpb24gc3BhY2VzLgorICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGlmIEhBVkVfTU1BUCBpcyB0cnVlLgorCitPTkxZX01TUEFDRVMgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIElmIHRydWUsIG9ubHkgY29tcGlsZSBpbiBtc3BhY2UgdmVyc2lvbnMsIG5vdCByZWd1bGFyIHZlcnNpb25zLgorCitVU0VfTE9DS1MgICAgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIENhdXNlcyBlYWNoIGNhbGwgdG8gZWFjaCBwdWJsaWMgcm91dGluZSB0byBiZSBzdXJyb3VuZGVkIHdpdGgKKyAgcHRocmVhZCBvciBXSU4zMiBtdXRleCBsb2NrL3VubG9jay4gKElmIHNldCB0cnVlLCB0aGlzIGNhbiBiZQorICBvdmVycmlkZGVuIG9uIGEgcGVyLW1zcGFjZSBiYXNpcyBmb3IgbXNwYWNlIHZlcnNpb25zLikgSWYgc2V0IHRvIGEKKyAgbm9uLXplcm8gdmFsdWUgb3RoZXIgdGhhbiAxLCBsb2NrcyBhcmUgdXNlZCwgYnV0IHRoZWlyCisgIGltcGxlbWVudGF0aW9uIGlzIGxlZnQgb3V0LCBzbyBsb2NrIGZ1bmN0aW9ucyBtdXN0IGJlIHN1cHBsaWVkIG1hbnVhbGx5LgorCitVU0VfU1BJTl9MT0NLUyAgICAgICAgICAgZGVmYXVsdDogMSBpZmYgVVNFX0xPQ0tTIGFuZCBvbiB4ODYgdXNpbmcgZ2NjIG9yIE1TQworICBJZiB0cnVlLCB1c2VzIGN1c3RvbSBzcGluIGxvY2tzIGZvciBsb2NraW5nLiBUaGlzIGlzIGN1cnJlbnRseQorICBzdXBwb3J0ZWQgb25seSBmb3IgeDg2IHBsYXRmb3JtcyB1c2luZyBnY2Mgb3IgcmVjZW50IE1TIGNvbXBpbGVycy4KKyAgT3RoZXJ3aXNlLCBwb3NpeCBsb2NrcyBvciB3aW4zMiBjcml0aWNhbCBzZWN0aW9ucyBhcmUgdXNlZC4KKworRk9PVEVSUyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgdHJ1ZSwgcHJvdmlkZSBleHRyYSBjaGVja2luZyBhbmQgZGlzcGF0Y2hpbmcgYnkgcGxhY2luZworICBpbmZvcm1hdGlvbiBpbiB0aGUgZm9vdGVycyBvZiBhbGxvY2F0ZWQgY2h1bmtzLiBUaGlzIGFkZHMKKyAgc3BhY2UgYW5kIHRpbWUgb3ZlcmhlYWQuCisKK0lOU0VDVVJFICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIHRydWUsIG9taXQgY2hlY2tzIGZvciB1c2FnZSBlcnJvcnMgYW5kIGhlYXAgc3BhY2Ugb3ZlcndyaXRlcy4KKworVVNFX0RMX1BSRUZJWCAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIENhdXNlcyBjb21waWxlciB0byBwcmVmaXggYWxsIHB1YmxpYyByb3V0aW5lcyB3aXRoIHRoZSBzdHJpbmcgJ2RsJy4KKyAgVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4geW91IG9ubHkgd2FudCB0byB1c2UgdGhpcyBtYWxsb2MgaW4gb25lIHBhcnQKKyAgb2YgYSBwcm9ncmFtLCB1c2luZyB5b3VyIHJlZ3VsYXIgc3lzdGVtIG1hbGxvYyBlbHNld2hlcmUuCisKK0FCT1JUICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGFzIGFib3J0KCkKKyAgRGVmaW5lcyBob3cgdG8gYWJvcnQgb24gZmFpbGVkIGNoZWNrcy4gIE9uIG1vc3Qgc3lzdGVtcywgYSBmYWlsZWQKKyAgY2hlY2sgY2Fubm90IGRpZSB3aXRoIGFuICJhc3NlcnQiIG9yIGV2ZW4gcHJpbnQgYW4gaW5mb3JtYXRpdmUKKyAgbWVzc2FnZSwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBwcmludCByb3V0aW5lcyBpbiB0dXJuIGNhbGwgbWFsbG9jLAorICB3aGljaCB3aWxsIGZhaWwgYWdhaW4uICBHZW5lcmFsbHksIHRoZSBiZXN0IHBvbGljeSBpcyB0byBzaW1wbHkgY2FsbAorICBhYm9ydCgpLiBJdCdzIG5vdCB2ZXJ5IHVzZWZ1bCB0byBkbyBtb3JlIHRoYW4gdGhpcyBiZWNhdXNlIG1hbnkKKyAgZXJyb3JzIGR1ZSB0byBvdmVyd3JpdGluZyB3aWxsIHNob3cgdXAgYXMgYWRkcmVzcyBmYXVsdHMgKG51bGwsIG9kZAorICBhZGRyZXNzZXMgZXRjKSByYXRoZXIgdGhhbiBtYWxsb2MtdHJpZ2dlcmVkIGNoZWNrcywgc28gd2lsbCBhbHNvCisgIGFib3J0LiAgQWxzbywgbW9zdCBjb21waWxlcnMga25vdyB0aGF0IGFib3J0KCkgZG9lcyBub3QgcmV0dXJuLCBzbworICBjYW4gYmV0dGVyIG9wdGltaXplIGNvZGUgY29uZGl0aW9uYWxseSBjYWxsaW5nIGl0LgorCitQUk9DRUVEX09OX0VSUk9SICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGFzIDAgKGZhbHNlKQorICBDb250cm9scyB3aGV0aGVyIGRldGVjdGVkIGJhZCBhZGRyZXNzZXMgY2F1c2UgdGhlbSB0byBieXBhc3NlZAorICByYXRoZXIgdGhhbiBhYm9ydGluZy4gSWYgc2V0LCBkZXRlY3RlZCBiYWQgYXJndW1lbnRzIHRvIGZyZWUgYW5kCisgIHJlYWxsb2MgYXJlIGlnbm9yZWQuIEFuZCBhbGwgYm9va2tlZXBpbmcgaW5mb3JtYXRpb24gaXMgemVyb2VkIG91dAorICB1cG9uIGEgZGV0ZWN0ZWQgb3ZlcndyaXRlIG9mIGZyZWVkIGhlYXAgc3BhY2UsIHRodXMgbG9zaW5nIHRoZQorICBhYmlsaXR5IHRvIGV2ZXIgcmV0dXJuIGl0IGZyb20gbWFsbG9jIGFnYWluLCBidXQgZW5hYmxpbmcgdGhlCisgIGFwcGxpY2F0aW9uIHRvIHByb2NlZWQuIElmIFBST0NFRURfT05fRVJST1IgaXMgZGVmaW5lZCwgdGhlCisgIHN0YXRpYyB2YXJpYWJsZSBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudCBpcyBjb21waWxlZCBpbgorICBhbmQgY2FuIGJlIGV4YW1pbmVkIHRvIHNlZSBpZiBlcnJvcnMgaGF2ZSBvY2N1cnJlZC4gVGhpcyBvcHRpb24KKyAgZ2VuZXJhdGVzIHNsb3dlciBjb2RlIHRoYW4gdGhlIGRlZmF1bHQgYWJvcnQgcG9saWN5LgorCitERUJVRyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgVGhlIERFQlVHIHNldHRpbmcgaXMgbWFpbmx5IGludGVuZGVkIGZvciBwZW9wbGUgdHJ5aW5nIHRvIG1vZGlmeQorICB0aGlzIGNvZGUgb3IgZGlhZ25vc2UgcHJvYmxlbXMgd2hlbiBwb3J0aW5nIHRvIG5ldyBwbGF0Zm9ybXMuCisgIEhvd2V2ZXIsIGl0IG1heSBhbHNvIGJlIGFibGUgdG8gYmV0dGVyIGlzb2xhdGUgdXNlciBlcnJvcnMgdGhhbiBqdXN0CisgIHVzaW5nIHJ1bnRpbWUgY2hlY2tzLiAgVGhlIGFzc2VydGlvbnMgaW4gdGhlIGNoZWNrIHJvdXRpbmVzIHNwZWxsCisgIG91dCBpbiBtb3JlIGRldGFpbCB0aGUgYXNzdW1wdGlvbnMgYW5kIGludmFyaWFudHMgdW5kZXJseWluZyB0aGUKKyAgYWxnb3JpdGhtcy4gIFRoZSBjaGVja2luZyBpcyBmYWlybHkgZXh0ZW5zaXZlLCBhbmQgd2lsbCBzbG93IGRvd24KKyAgZXhlY3V0aW9uIG5vdGljZWFibHkuIENhbGxpbmcgbWFsbG9jX3N0YXRzIG9yIG1hbGxpbmZvIHdpdGggREVCVUcKKyAgc2V0IHdpbGwgYXR0ZW1wdCB0byBjaGVjayBldmVyeSBub24tbW1hcHBlZCBhbGxvY2F0ZWQgYW5kIGZyZWUgY2h1bmsKKyAgaW4gdGhlIGNvdXJzZSBvZiBjb21wdXRpbmcgdGhlIHN1bW1hcmllcy4KKworQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgICBkZWZhdWx0OiBkZWZpbmVkIGFzIDEgKHRydWUpCisgIERlYnVnZ2luZyBhc3NlcnRpb24gZmFpbHVyZXMgY2FuIGJlIG5lYXJseSBpbXBvc3NpYmxlIGlmIHlvdXIKKyAgdmVyc2lvbiBvZiB0aGUgYXNzZXJ0IG1hY3JvIGNhdXNlcyBtYWxsb2MgdG8gYmUgY2FsbGVkLCB3aGljaCB3aWxsCisgIGxlYWQgdG8gYSBjYXNjYWRlIG9mIGZ1cnRoZXIgZmFpbHVyZXMsIGJsb3dpbmcgdGhlIHJ1bnRpbWUgc3RhY2suCisgIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFIGNhdXNlIGFzc2VydGlvbnMgZmFpbHVyZXMgdG8gY2FsbCBhYm9ydCgpLAorICB3aGljaCB3aWxsIHVzdWFsbHkgbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLgorCitNQUxMT0NfRkFJTFVSRV9BQ1RJT04gICAgIGRlZmF1bHQ6IHNldHMgZXJybm8gdG8gRU5PTUVNLCBvciBuby1vcCBvbiB3aW4zMgorICBUaGUgYWN0aW9uIHRvIHRha2UgYmVmb3JlICJyZXR1cm4gMCIgd2hlbiBtYWxsb2MgZmFpbHMgdG8gYmUgYWJsZSB0bworICByZXR1cm4gbWVtb3J5IGJlY2F1c2UgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUuCisKK0hBVkVfTU9SRUNPUkUgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkgdW5sZXNzIHdpbjMyIG9yIE9OTFlfTVNQQUNFUworICBUcnVlIGlmIHRoaXMgc3lzdGVtIHN1cHBvcnRzIHNicmsgb3IgYW4gZW11bGF0aW9uIG9mIGl0LgorCitNT1JFQ09SRSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHNicmsKKyAgVGhlIG5hbWUgb2YgdGhlIHNicmstc3R5bGUgc3lzdGVtIHJvdXRpbmUgdG8gY2FsbCB0byBvYnRhaW4gbW9yZQorICBtZW1vcnkuICBTZWUgYmVsb3cgZm9yIGd1aWRhbmNlIG9uIHdyaXRpbmcgY3VzdG9tIE1PUkVDT1JFCisgIGZ1bmN0aW9ucy4gVGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IHRvIHNicmsvTU9SRUNPUkUgdmFyaWVzIGFjcm9zcworICBzeXN0ZW1zLiAgSXQgY2Fubm90IGJlIHNpemVfdCwgYmVjYXVzZSBpdCBzdXBwb3J0cyBuZWdhdGl2ZQorICBhcmd1bWVudHMsIHNvIGl0IGlzIG5vcm1hbGx5IHRoZSBzaWduZWQgdHlwZSBvZiB0aGUgc2FtZSB3aWR0aCBhcworICBzaXplX3QgKHNvbWV0aW1lcyBkZWNsYXJlZCBhcyAiaW50cHRyX3QiKS4gIEl0IGRvZXNuJ3QgbXVjaCBtYXR0ZXIKKyAgdGhvdWdoLiBJbnRlcm5hbGx5LCB3ZSBvbmx5IGNhbGwgaXQgd2l0aCBhcmd1bWVudHMgbGVzcyB0aGFuIGhhbGYKKyAgdGhlIG1heCB2YWx1ZSBvZiBhIHNpemVfdCwgd2hpY2ggc2hvdWxkIHdvcmsgYWNyb3NzIGFsbCByZWFzb25hYmxlCisgIHBvc3NpYmlsaXRpZXMsIGFsdGhvdWdoIHNvbWV0aW1lcyBnZW5lcmF0aW5nIGNvbXBpbGVyIHdhcm5pbmdzLgorCitNT1JFQ09SRV9DT05USUdVT1VTICAgICAgIGRlZmF1bHQ6IDEgKHRydWUpIGlmIEhBVkVfTU9SRUNPUkUKKyAgSWYgdHJ1ZSwgdGFrZSBhZHZhbnRhZ2Ugb2YgZmFjdCB0aGF0IGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFCisgIHdpdGggcG9zaXRpdmUgYXJndW1lbnRzIGFsd2F5cyByZXR1cm4gY29udGlndW91cyBpbmNyZWFzaW5nCisgIGFkZHJlc3Nlcy4gIFRoaXMgaXMgdHJ1ZSBvZiB1bml4IHNicmsuIEl0IGRvZXMgbm90IGh1cnQgdG9vIG11Y2ggdG8KKyAgc2V0IGl0IHRydWUgYW55d2F5LCBzaW5jZSBtYWxsb2MgY29wZXMgd2l0aCBub24tY29udGlndWl0aWVzLgorICBTZXR0aW5nIGl0IGZhbHNlIHdoZW4gZGVmaW5pdGVseSBub24tY29udGlndW91cyBzYXZlcyB0aW1lCisgIGFuZCBwb3NzaWJseSB3YXN0ZWQgc3BhY2UgaXQgd291bGQgdGFrZSB0byBkaXNjb3ZlciB0aGlzIHRob3VnaC4KKworTU9SRUNPUkVfQ0FOTk9UX1RSSU0gICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBUcnVlIGlmIE1PUkVDT1JFIGNhbm5vdCByZWxlYXNlIHNwYWNlIGJhY2sgdG8gdGhlIHN5c3RlbSB3aGVuIGdpdmVuCisgIG5lZ2F0aXZlIGFyZ3VtZW50cy4gVGhpcyBpcyBnZW5lcmFsbHkgbmVjZXNzYXJ5IG9ubHkgaWYgeW91IGFyZQorICB1c2luZyBhIGhhbmQtY3JhZnRlZCBNT1JFQ09SRSBmdW5jdGlvbiB0aGF0IGNhbm5vdCBoYW5kbGUgbmVnYXRpdmUKKyAgYXJndW1lbnRzLgorCitOT19TRUdNRU5UX1RSQVZFUlNBTCAgICAgICBkZWZhdWx0OiAwCisgIElmIG5vbi16ZXJvLCBzdXBwcmVzc2VzIHRyYXZlcnNhbHMgb2YgbWVtb3J5IHNlZ21lbnRzCisgIHJldHVybmVkIGJ5IGVpdGhlciBNT1JFQ09SRSBvciBDQUxMX01NQVAuIFRoaXMgZGlzYWJsZXMKKyAgbWVyZ2luZyBvZiBzZWdtZW50cyB0aGF0IGFyZSBjb250aWd1b3VzLCBhbmQgc2VsZWN0aXZlbHkKKyAgcmVsZWFzaW5nIHRoZW0gdG8gdGhlIE9TIGlmIHVudXNlZCwgYnV0IGJvdW5kcyBleGVjdXRpb24gdGltZXMuCisKK0hBVkVfTU1BUCAgICAgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkKKyAgVHJ1ZSBpZiB0aGlzIHN5c3RlbSBzdXBwb3J0cyBtbWFwIG9yIGFuIGVtdWxhdGlvbiBvZiBpdC4gIElmIHNvLCBhbmQKKyAgSEFWRV9NT1JFQ09SRSBpcyBub3QgdHJ1ZSwgTU1BUCBpcyB1c2VkIGZvciBhbGwgc3lzdGVtCisgIGFsbG9jYXRpb24uIElmIHNldCBhbmQgSEFWRV9NT1JFQ09SRSBpcyB0cnVlIGFzIHdlbGwsIE1NQVAgaXMKKyAgcHJpbWFyaWx5IHVzZWQgdG8gZGlyZWN0bHkgYWxsb2NhdGUgdmVyeSBsYXJnZSBibG9ja3MuIEl0IGlzIGFsc28KKyAgdXNlZCBhcyBhIGJhY2t1cCBzdHJhdGVneSBpbiBjYXNlcyB3aGVyZSBNT1JFQ09SRSBmYWlscyB0byBwcm92aWRlCisgIHNwYWNlIGZyb20gc3lzdGVtLiBOb3RlOiBBIHNpbmdsZSBjYWxsIHRvIE1VTk1BUCBpcyBhc3N1bWVkIHRvIGJlCisgIGFibGUgdG8gdW5tYXAgbWVtb3J5IHRoYXQgbWF5IGhhdmUgYmUgYWxsb2NhdGVkIHVzaW5nIG11bHRpcGxlIGNhbGxzCisgIHRvIE1NQVAsIHNvIGxvbmcgYXMgdGhleSBhcmUgYWRqYWNlbnQuCisKK0hBVkVfTVJFTUFQICAgICAgICAgICAgICAgZGVmYXVsdDogMSBvbiBsaW51eCwgZWxzZSAwCisgIElmIHRydWUgcmVhbGxvYygpIHVzZXMgbXJlbWFwKCkgdG8gcmUtYWxsb2NhdGUgbGFyZ2UgYmxvY2tzIGFuZAorICBleHRlbmQgb3Igc2hyaW5rIGFsbG9jYXRpb24gc3BhY2VzLgorCitNTUFQX0NMRUFSUyAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgZXhjZXB0IG9uIFdJTkNFLgorICBUcnVlIGlmIG1tYXAgY2xlYXJzIG1lbW9yeSBzbyBjYWxsb2MgZG9lc24ndCBuZWVkIHRvLiBUaGlzIGlzIHRydWUKKyAgZm9yIHN0YW5kYXJkIHVuaXggbW1hcCB1c2luZyAvZGV2L3plcm8gYW5kIG9uIFdJTjMyIGV4Y2VwdCBmb3IgV0lOQ0UuCisKK1VTRV9CVUlMVElOX0ZGUyAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGkuZS4sIG5vdCB1c2VkKQorICBDYXVzZXMgbWFsbG9jIHRvIHVzZSB0aGUgYnVpbHRpbiBmZnMoKSBmdW5jdGlvbiB0byBjb21wdXRlIGluZGljZXMuCisgIFNvbWUgY29tcGlsZXJzIG1heSByZWNvZ25pemUgYW5kIGludHJpbnNpZnkgZmZzIHRvIGJlIGZhc3RlciB0aGFuIHRoZQorICBzdXBwbGllZCBDIHZlcnNpb24uIEFsc28sIHRoZSBjYXNlIG9mIHg4NiB1c2luZyBnY2MgaXMgc3BlY2lhbC1jYXNlZAorICB0byBhbiBhc20gaW5zdHJ1Y3Rpb24sIHNvIGlzIGFscmVhZHkgYXMgZmFzdCBhcyBpdCBjYW4gYmUsIGFuZCBzbworICB0aGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdC4gU2ltaWxhcmx5IGZvciBXaW4zMiB1bmRlciByZWNlbnQgTVMgY29tcGlsZXJzLgorICAoT24gbW9zdCB4ODZzLCB0aGUgYXNtIHZlcnNpb24gaXMgb25seSBzbGlnaHRseSBmYXN0ZXIgdGhhbiB0aGUgQyB2ZXJzaW9uLikKKworbWFsbG9jX2dldHBhZ2VzaXplICAgICAgICAgZGVmYXVsdDogZGVyaXZlIGZyb20gc3lzdGVtIGluY2x1ZGVzLCBvciA0MDk2LgorICBUaGUgc3lzdGVtIHBhZ2Ugc2l6ZS4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhpcyBtYWxsb2MgbWFuYWdlcworICBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtIGluIHBhZ2Utc2l6ZSB1bml0cy4gIFRoaXMgbWF5IGJlIChhbmQKKyAgdXN1YWxseSBpcykgYSBmdW5jdGlvbiByYXRoZXIgdGhhbiBhIGNvbnN0YW50LiBUaGlzIGlzIGlnbm9yZWQKKyAgaWYgV0lOMzIsIHdoZXJlIHBhZ2Ugc2l6ZSBpcyBkZXRlcm1pbmVkIHVzaW5nIGdldFN5c3RlbUluZm8gZHVyaW5nCisgIGluaXRpYWxpemF0aW9uLgorCitVU0VfREVWX1JBTkRPTSAgICAgICAgICAgICBkZWZhdWx0OiAwIChpLmUuLCBub3QgdXNlZCkKKyAgQ2F1c2VzIG1hbGxvYyB0byB1c2UgL2Rldi9yYW5kb20gdG8gaW5pdGlhbGl6ZSBzZWN1cmUgbWFnaWMgc2VlZCBmb3IKKyAgc3RhbXBpbmcgZm9vdGVycy4gT3RoZXJ3aXNlLCB0aGUgY3VycmVudCB0aW1lIGlzIHVzZWQuCisKK05PX01BTExJTkZPICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgZGVmaW5lZCwgZG9uJ3QgY29tcGlsZSAibWFsbGluZm8iLiBUaGlzIGNhbiBiZSBhIHNpbXBsZSB3YXkKKyAgb2YgZGVhbGluZyB3aXRoIG1pc21hdGNoZXMgYmV0d2VlbiBzeXN0ZW0gZGVjbGFyYXRpb25zIGFuZAorICB0aG9zZSBpbiB0aGlzIGZpbGUuCisKK01BTExJTkZPX0ZJRUxEX1RZUEUgICAgICAgIGRlZmF1bHQ6IHNpemVfdAorICBUaGUgdHlwZSBvZiB0aGUgZmllbGRzIGluIHRoZSBtYWxsaW5mbyBzdHJ1Y3QuIFRoaXMgd2FzIG9yaWdpbmFsbHkKKyAgZGVmaW5lZCBhcyAiaW50IiBpbiBTVklEIGV0YywgYnV0IGlzIG1vcmUgdXNlZnVsbHkgZGVmaW5lZCBhcworICBzaXplX3QuIFRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgaWYgIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggaXMgbm90IHNldAorCitSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgICAgZGVmYXVsdDogbm90IGRlZmluZWQKKyAgVGhpcyBzaG91bGQgYmUgc2V0IGlmIGEgY2FsbCB0byByZWFsbG9jIHdpdGggemVybyBieXRlcyBzaG91bGQKKyAgYmUgdGhlIHNhbWUgYXMgYSBjYWxsIHRvIGZyZWUuIFNvbWUgcGVvcGxlIHRoaW5rIGl0IHNob3VsZC4gT3RoZXJ3aXNlLAorICBzaW5jZSB0aGlzIG1hbGxvYyByZXR1cm5zIGEgdW5pcXVlIHBvaW50ZXIgZm9yIG1hbGxvYygwKSwgc28gZG9lcworICByZWFsbG9jKHAsIDApLgorCitMQUNLU19VTklTVERfSCwgTEFDS1NfRkNOVExfSCwgTEFDS1NfU1lTX1BBUkFNX0gsIExBQ0tTX1NZU19NTUFOX0gKK0xBQ0tTX1NUUklOR1NfSCwgTEFDS1NfU1RSSU5HX0gsIExBQ0tTX1NZU19UWVBFU19ILCAgTEFDS1NfRVJSTk9fSAorTEFDS1NfU1RETElCX0ggICAgICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQgdW5sZXNzIG9uIFdJTjMyCisgIERlZmluZSB0aGVzZSBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoZXNlIGhlYWRlciBmaWxlcy4KKyAgWW91IG1pZ2h0IG5lZWQgdG8gbWFudWFsbHkgaW5zZXJ0IHNvbWUgb2YgdGhlIGRlY2xhcmF0aW9ucyB0aGV5IHByb3ZpZGUuCisKK0RFRkFVTFRfR1JBTlVMQVJJVFkgICAgICAgIGRlZmF1bHQ6IHBhZ2Ugc2l6ZSBpZiBNT1JFQ09SRV9DT05USUdVT1VTLAorCQkJCXN5c3RlbV9pbmZvLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5IGluIFdJTjMyLAorCQkJCW90aGVyd2lzZSA2NEsuCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgeCkKKyAgVGhlIHVuaXQgZm9yIGFsbG9jYXRpbmcgYW5kIGRlYWxsb2NhdGluZyBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLiAgT24KKyAgbW9zdCBzeXN0ZW1zIHdpdGggY29udGlndW91cyBNT1JFQ09SRSwgdGhlcmUgaXMgbm8gcmVhc29uIHRvCisgIG1ha2UgdGhpcyBtb3JlIHRoYW4gYSBwYWdlLiBIb3dldmVyLCBzeXN0ZW1zIHdpdGggTU1BUCB0ZW5kIHRvCisgIGVpdGhlciByZXF1aXJlIG9yIGVuY291cmFnZSBsYXJnZXIgZ3JhbnVsYXJpdGllcy4gIFlvdSBjYW4gaW5jcmVhc2UKKyAgdGhpcyB2YWx1ZSB0byBwcmV2ZW50IHN5c3RlbSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgc28KKyAgb2Z0ZW4sIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgc2xvdy4gIFRoZSB2YWx1ZSBtdXN0IGJlIGF0IGxlYXN0IG9uZQorICBwYWdlIGFuZCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiAgU2V0dGluZyB0byAwIGNhdXNlcyBpbml0aWFsaXphdGlvbgorICB0byBlaXRoZXIgcGFnZSBzaXplIG9yIHdpbjMyIHJlZ2lvbiBzaXplLiAgKE5vdGU6IEluIHByZXZpb3VzCisgIHZlcnNpb25zIG9mIG1hbGxvYywgdGhlIGVxdWl2YWxlbnQgb2YgdGhpcyBvcHRpb24gd2FzIGNhbGxlZAorICAiVE9QX1BBRCIpCisKK0RFRkFVTFRfVFJJTV9USFJFU0hPTEQgICAgZGVmYXVsdDogMk1CCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9UUklNX1RIUkVTSE9MRCwgeCkKKyAgVGhlIG1heGltdW0gYW1vdW50IG9mIHVudXNlZCB0b3AtbW9zdCBtZW1vcnkgdG8ga2VlcCBiZWZvcmUKKyAgcmVsZWFzaW5nIHZpYSBtYWxsb2NfdHJpbSBpbiBmcmVlKCkuICBBdXRvbWF0aWMgdHJpbW1pbmcgaXMgbWFpbmx5CisgIHVzZWZ1bCBpbiBsb25nLWxpdmVkIHByb2dyYW1zIHVzaW5nIGNvbnRpZ3VvdXMgTU9SRUNPUkUuICBCZWNhdXNlCisgIHRyaW1taW5nIHZpYSBzYnJrIGNhbiBiZSBzbG93IG9uIHNvbWUgc3lzdGVtcywgYW5kIGNhbiBzb21ldGltZXMgYmUKKyAgd2FzdGVmdWwgKGluIGNhc2VzIHdoZXJlIHByb2dyYW1zIGltbWVkaWF0ZWx5IGFmdGVyd2FyZCBhbGxvY2F0ZQorICBtb3JlIGxhcmdlIGNodW5rcykgdGhlIHZhbHVlIHNob3VsZCBiZSBoaWdoIGVub3VnaCBzbyB0aGF0IHlvdXIKKyAgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2Ugd291bGQgaW1wcm92ZSBieSByZWxlYXNpbmcgdGhpcyBtdWNoCisgIG1lbW9yeS4gIEFzIGEgcm91Z2ggZ3VpZGUsIHlvdSBtaWdodCBzZXQgdG8gYSB2YWx1ZSBjbG9zZSB0byB0aGUKKyAgYXZlcmFnZSBzaXplIG9mIGEgcHJvY2VzcyAocHJvZ3JhbSkgcnVubmluZyBvbiB5b3VyIHN5c3RlbS4KKyAgUmVsZWFzaW5nIHRoaXMgbXVjaCBtZW1vcnkgd291bGQgYWxsb3cgc3VjaCBhIHByb2Nlc3MgdG8gcnVuIGluCisgIG1lbW9yeS4gIEdlbmVyYWxseSwgaXQgaXMgd29ydGggdHVuaW5nIHRyaW0gdGhyZXNob2xkcyB3aGVuIGEKKyAgcHJvZ3JhbSB1bmRlcmdvZXMgcGhhc2VzIHdoZXJlIHNldmVyYWwgbGFyZ2UgY2h1bmtzIGFyZSBhbGxvY2F0ZWQKKyAgYW5kIHJlbGVhc2VkIGluIHdheXMgdGhhdCBjYW4gcmV1c2UgZWFjaCBvdGhlcidzIHN0b3JhZ2UsIHBlcmhhcHMKKyAgbWl4ZWQgd2l0aCBwaGFzZXMgd2hlcmUgdGhlcmUgYXJlIG5vIHN1Y2ggY2h1bmtzIGF0IGFsbC4gVGhlIHRyaW0KKyAgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gcGFnZSBzaXplIHRvIGhhdmUgYW55IHVzZWZ1bCBlZmZlY3QuICBUbworICBkaXNhYmxlIHRyaW1taW5nIGNvbXBsZXRlbHksIHlvdSBjYW4gc2V0IHRvIE1BWF9TSVpFX1QuIE5vdGUgdGhhdCB0aGUgdHJpY2sKKyAgc29tZSBwZW9wbGUgdXNlIG9mIG1hbGxvY2luZyBhIGh1Z2Ugc3BhY2UgYW5kIHRoZW4gZnJlZWluZyBpdCBhdAorICBwcm9ncmFtIHN0YXJ0dXAsIGluIGFuIGF0dGVtcHQgdG8gcmVzZXJ2ZSBzeXN0ZW0gbWVtb3J5LCBkb2Vzbid0CisgIGhhdmUgdGhlIGludGVuZGVkIGVmZmVjdCB1bmRlciBhdXRvbWF0aWMgdHJpbW1pbmcsIHNpbmNlIHRoYXQgbWVtb3J5CisgIHdpbGwgaW1tZWRpYXRlbHkgYmUgcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4KKworREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAgICAgICBkZWZhdWx0OiAyNTZLCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9NTUFQX1RIUkVTSE9MRCwgeCkKKyAgVGhlIHJlcXVlc3Qgc2l6ZSB0aHJlc2hvbGQgZm9yIHVzaW5nIE1NQVAgdG8gZGlyZWN0bHkgc2VydmljZSBhCisgIHJlcXVlc3QuIFJlcXVlc3RzIG9mIGF0IGxlYXN0IHRoaXMgc2l6ZSB0aGF0IGNhbm5vdCBiZSBhbGxvY2F0ZWQKKyAgdXNpbmcgYWxyZWFkeS1leGlzdGluZyBzcGFjZSB3aWxsIGJlIHNlcnZpY2VkIHZpYSBtbWFwLiAgKElmIGVub3VnaAorICBub3JtYWwgZnJlZWQgc3BhY2UgYWxyZWFkeSBleGlzdHMgaXQgaXMgdXNlZCBpbnN0ZWFkLikgIFVzaW5nIG1tYXAKKyAgc2VncmVnYXRlcyByZWxhdGl2ZWx5IGxhcmdlIGNodW5rcyBvZiBtZW1vcnkgc28gdGhhdCB0aGV5IGNhbiBiZQorICBpbmRpdmlkdWFsbHkgb2J0YWluZWQgYW5kIHJlbGVhc2VkIGZyb20gdGhlIGhvc3Qgc3lzdGVtLiBBIHJlcXVlc3QKKyAgc2VydmljZWQgdGhyb3VnaCBtbWFwIGlzIG5ldmVyIHJldXNlZCBieSBhbnkgb3RoZXIgcmVxdWVzdCAoYXQgbGVhc3QKKyAgbm90IGRpcmVjdGx5OyB0aGUgc3lzdGVtIG1heSBqdXN0IHNvIGhhcHBlbiB0byByZW1hcCBzdWNjZXNzaXZlCisgIHJlcXVlc3RzIHRvIHRoZSBzYW1lIGxvY2F0aW9ucykuICBTZWdyZWdhdGluZyBzcGFjZSBpbiB0aGlzIHdheSBoYXMKKyAgdGhlIGJlbmVmaXRzIHRoYXQ6IE1tYXBwZWQgc3BhY2UgY2FuIGFsd2F5cyBiZSBpbmRpdmlkdWFsbHkgcmVsZWFzZWQKKyAgYmFjayB0byB0aGUgc3lzdGVtLCB3aGljaCBoZWxwcyBrZWVwIHRoZSBzeXN0ZW0gbGV2ZWwgbWVtb3J5IGRlbWFuZHMKKyAgb2YgYSBsb25nLWxpdmVkIHByb2dyYW0gbG93LiAgQWxzbywgbWFwcGVkIG1lbW9yeSBkb2Vzbid0IGJlY29tZQorICBgbG9ja2VkJyBiZXR3ZWVuIG90aGVyIGNodW5rcywgYXMgY2FuIGhhcHBlbiB3aXRoIG5vcm1hbGx5IGFsbG9jYXRlZAorICBjaHVua3MsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiB0cmltbWluZyB2aWEgbWFsbG9jX3RyaW0gd291bGQgbm90CisgIHJlbGVhc2UgdGhlbS4gIEhvd2V2ZXIsIGl0IGhhcyB0aGUgZGlzYWR2YW50YWdlIHRoYXQgdGhlIHNwYWNlCisgIGNhbm5vdCBiZSByZWNsYWltZWQsIGNvbnNvbGlkYXRlZCwgYW5kIHRoZW4gdXNlZCB0byBzZXJ2aWNlIGxhdGVyCisgIHJlcXVlc3RzLCBhcyBoYXBwZW5zIHdpdGggbm9ybWFsIGNodW5rcy4gIFRoZSBhZHZhbnRhZ2VzIG9mIG1tYXAKKyAgbmVhcmx5IGFsd2F5cyBvdXR3ZWlnaCBkaXNhZHZhbnRhZ2VzIGZvciAibGFyZ2UiIGNodW5rcywgYnV0IHRoZQorICB2YWx1ZSBvZiAibGFyZ2UiIG1heSB2YXJ5IGFjcm9zcyBzeXN0ZW1zLiAgVGhlIGRlZmF1bHQgaXMgYW4KKyAgZW1waXJpY2FsbHkgZGVyaXZlZCB2YWx1ZSB0aGF0IHdvcmtzIHdlbGwgaW4gbW9zdCBzeXN0ZW1zLiBZb3UgY2FuCisgIGRpc2FibGUgbW1hcCBieSBzZXR0aW5nIHRvIE1BWF9TSVpFX1QuCisKK01BWF9SRUxFQVNFX0NIRUNLX1JBVEUgICBkZWZhdWx0OiA0MDk1IHVubGVzcyBub3QgSEFWRV9NTUFQCisgIFRoZSBudW1iZXIgb2YgY29uc29saWRhdGVkIGZyZWVzIGJldHdlZW4gY2hlY2tzIHRvIHJlbGVhc2UKKyAgdW51c2VkIHNlZ21lbnRzIHdoZW4gZnJlZWluZy4gV2hlbiB1c2luZyBub24tY29udGlndW91cyBzZWdtZW50cywKKyAgZXNwZWNpYWxseSB3aXRoIG11bHRpcGxlIG1zcGFjZXMsIGNoZWNraW5nIG9ubHkgZm9yIHRvcG1vc3Qgc3BhY2UKKyAgZG9lc24ndCBhbHdheXMgc3VmZmljZSB0byB0cmlnZ2VyIHRyaW1taW5nLiBUbyBjb21wZW5zYXRlIGZvciB0aGlzLAorICBmcmVlKCkgd2lsbCwgd2l0aCBhIHBlcmlvZCBvZiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFIChvciB0aGUKKyAgY3VycmVudCBudW1iZXIgb2Ygc2VnbWVudHMsIGlmIGdyZWF0ZXIpIHRyeSB0byByZWxlYXNlIHVudXNlZAorICBzZWdtZW50cyB0byB0aGUgT1Mgd2hlbiBmcmVlaW5nIGNodW5rcyB0aGF0IHJlc3VsdCBpbgorICBjb25zb2xpZGF0aW9uLiBUaGUgYmVzdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgYSBjb21wcm9taXNlCisgIGJldHdlZW4gc2xvd2luZyBkb3duIGZyZWVzIHdpdGggcmVsYXRpdmVseSBjb3N0bHkgY2hlY2tzIHRoYXQKKyAgcmFyZWx5IHRyaWdnZXIgdmVyc3VzIGhvbGRpbmcgb24gdG8gdW51c2VkIG1lbW9yeS4gVG8gZWZmZWN0aXZlbHkKKyAgZGlzYWJsZSwgc2V0IHRvIE1BWF9TSVpFX1QuIFRoaXMgbWF5IGxlYWQgdG8gYSB2ZXJ5IHNsaWdodCBzcGVlZAorICBpbXByb3ZlbWVudCBhdCB0aGUgZXhwZW5zZSBvZiBjYXJyeWluZyBhcm91bmQgbW9yZSBtZW1vcnkuCisqLworCisvKiBWZXJzaW9uIGlkZW50aWZpZXIgdG8gYWxsb3cgcGVvcGxlIHRvIHN1cHBvcnQgbXVsdGlwbGUgdmVyc2lvbnMgKi8KKyNpZm5kZWYgRExNQUxMT0NfVkVSU0lPTgorI2RlZmluZSBETE1BTExPQ19WRVJTSU9OIDIwODA0CisjZW5kaWYgLyogRExNQUxMT0NfVkVSU0lPTiAqLworCisjaWZuZGVmIFdJTjMyCisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIFdJTjMyIDEKKyNlbmRpZiAgLyogX1dJTjMyICovCisjaWZkZWYgX1dJTjMyX1dDRQorI2RlZmluZSBMQUNLU19GQ05UTF9ICisjZGVmaW5lIFdJTjMyIDEKKyNlbmRpZiAvKiBfV0lOMzJfV0NFICovCisjZW5kaWYgIC8qIFdJTjMyICovCisjaWZkZWYgV0lOMzIKKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBfV0lOMzJfV0lOTlQgMHg0MDMKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZGVmaW5lIEhBVkVfTU1BUCAxCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2RlZmluZSBMQUNLU19VTklTVERfSAorI2RlZmluZSBMQUNLU19TWVNfUEFSQU1fSAorI2RlZmluZSBMQUNLU19TWVNfTU1BTl9ICisjZGVmaW5lIExBQ0tTX1NUUklOR19ICisjZGVmaW5lIExBQ0tTX1NUUklOR1NfSAorI2RlZmluZSBMQUNLU19TWVNfVFlQRVNfSAorI2RlZmluZSBMQUNLU19FUlJOT19ICisjaWZuZGVmIE1BTExPQ19GQUlMVVJFX0FDVElPTgorI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNlbmRpZiAvKiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8KKyNpZmRlZiBfV0lOMzJfV0NFIC8qIFdJTkNFIHJlcG9ydGVkbHkgZG9lcyBub3QgY2xlYXIgKi8KKyNkZWZpbmUgTU1BUF9DTEVBUlMgMAorI2Vsc2UKKyNkZWZpbmUgTU1BUF9DTEVBUlMgMQorI2VuZGlmIC8qIF9XSU4zMl9XQ0UgKi8KKyNlbmRpZiAgLyogV0lOMzIgKi8KKworI2lmIGRlZmluZWQoREFSV0lOKSB8fCBkZWZpbmVkKF9EQVJXSU4pCisvKiBNYWMgT1NYIGRvY3MgYWR2aXNlIG5vdCB0byB1c2Ugc2JyazsgaXQgc2VlbXMgYmV0dGVyIHRvIHVzZSBtbWFwICovCisjaWZuZGVmIEhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCisjZGVmaW5lIEhBVkVfTU1BUCAxCisvKiBPU1ggYWxsb2NhdG9ycyBwcm92aWRlIDE2IGJ5dGUgYWxpZ25tZW50ICovCisjaWZuZGVmIE1BTExPQ19BTElHTk1FTlQKKyNkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCAoKHNpemVfdCkxNlUpCisjZW5kaWYKKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLworI2VuZGlmICAvKiBEQVJXSU4gKi8KKworI2lmbmRlZiBMQUNLU19TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgLyogRm9yIHNpemVfdCAqLworI2VuZGlmICAvKiBMQUNLU19TWVNfVFlQRVNfSCAqLworCisvKiBUaGUgbWF4aW11bSBwb3NzaWJsZSBzaXplX3QgdmFsdWUgaGFzIGFsbCBiaXRzIHNldCAqLworI2RlZmluZSBNQVhfU0laRV9UICAgICAgICAgICAofihzaXplX3QpMCkKKworI2lmbmRlZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgT05MWV9NU1BBQ0VTIDAgICAgIC8qIGRlZmluZSB0byBhIHZhbHVlICovCisjZWxzZQorI2RlZmluZSBPTkxZX01TUEFDRVMgMQorI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8KKyNpZm5kZWYgTVNQQUNFUworI2lmIE9OTFlfTVNQQUNFUworI2RlZmluZSBNU1BBQ0VTIDEKKyNlbHNlICAgLyogT05MWV9NU1BBQ0VTICovCisjZGVmaW5lIE1TUEFDRVMgMAorI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8KKyNlbmRpZiAgLyogTVNQQUNFUyAqLworI2lmbmRlZiBNQUxMT0NfQUxJR05NRU5UCisjZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgKChzaXplX3QpOFUpCisjZW5kaWYgIC8qIE1BTExPQ19BTElHTk1FTlQgKi8KKyNpZm5kZWYgRk9PVEVSUworI2RlZmluZSBGT09URVJTIDAKKyNlbmRpZiAgLyogRk9PVEVSUyAqLworI2lmbmRlZiBBQk9SVAorI2RlZmluZSBBQk9SVCAgYWJvcnQoKQorI2VuZGlmICAvKiBBQk9SVCAqLworI2lmbmRlZiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRQorI2RlZmluZSBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAxCisjZW5kaWYgIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisjaWZuZGVmIFBST0NFRURfT05fRVJST1IKKyNkZWZpbmUgUFJPQ0VFRF9PTl9FUlJPUiAwCisjZW5kaWYgIC8qIFBST0NFRURfT05fRVJST1IgKi8KKyNpZm5kZWYgVVNFX0xPQ0tTCisjZGVmaW5lIFVTRV9MT0NLUyAwCisjZW5kaWYgIC8qIFVTRV9MT0NLUyAqLworI2lmbmRlZiBVU0VfU1BJTl9MT0NLUworI2lmIFVTRV9MT0NLUyAmJiAoZGVmaW5lZChfX0dOVUNfXykgJiYgKChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKSkpIHx8IChkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMxMCkKKyNkZWZpbmUgVVNFX1NQSU5fTE9DS1MgMQorI2Vsc2UKKyNkZWZpbmUgVVNFX1NQSU5fTE9DS1MgMAorI2VuZGlmIC8qIFVTRV9MT0NLUyAmJiAuLi4gKi8KKyNlbmRpZiAvKiBVU0VfU1BJTl9MT0NLUyAqLworI2lmbmRlZiBJTlNFQ1VSRQorI2RlZmluZSBJTlNFQ1VSRSAwCisjZW5kaWYgIC8qIElOU0VDVVJFICovCisjaWZuZGVmIEhBVkVfTU1BUAorI2RlZmluZSBIQVZFX01NQVAgMQorI2VuZGlmICAvKiBIQVZFX01NQVAgKi8KKyNpZm5kZWYgTU1BUF9DTEVBUlMKKyNkZWZpbmUgTU1BUF9DTEVBUlMgMQorI2VuZGlmICAvKiBNTUFQX0NMRUFSUyAqLworI2lmbmRlZiBIQVZFX01SRU1BUAorI2lmZGVmIGxpbnV4CisjZGVmaW5lIEhBVkVfTVJFTUFQIDEKKyNlbHNlICAgLyogbGludXggKi8KKyNkZWZpbmUgSEFWRV9NUkVNQVAgMAorI2VuZGlmICAvKiBsaW51eCAqLworI2VuZGlmICAvKiBIQVZFX01SRU1BUCAqLworI2lmbmRlZiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICBlcnJubyA9IEVOT01FTTsKKyNlbmRpZiAgLyogTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjaWZuZGVmIEhBVkVfTU9SRUNPUkUKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLworI2RlZmluZSBIQVZFX01PUkVDT1JFIDEKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNpZiAhSEFWRV9NT1JFQ09SRQorI2RlZmluZSBNT1JFQ09SRV9DT05USUdVT1VTIDAKKyNlbHNlICAgLyogIUhBVkVfTU9SRUNPUkUgKi8KKyNkZWZpbmUgTU9SRUNPUkVfREVGQVVMVCBzYnJrCisjaWZuZGVmIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAxCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLworI2lmbmRlZiBERUZBVUxUX0dSQU5VTEFSSVRZCisjaWYgKE1PUkVDT1JFX0NPTlRJR1VPVVMgfHwgZGVmaW5lZChXSU4zMikpCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKDApICAvKiAwIG1lYW5zIHRvIGNvbXB1dGUgaW4gaW5pdF9tcGFyYW1zICovCisjZWxzZSAgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyNkZWZpbmUgREVGQVVMVF9HUkFOVUxBUklUWSAoKHNpemVfdCk2NFUgKiAoc2l6ZV90KTEwMjRVKQorI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZW5kaWYgIC8qIERFRkFVTFRfR1JBTlVMQVJJVFkgKi8KKyNpZm5kZWYgREVGQVVMVF9UUklNX1RIUkVTSE9MRAorI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQorI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEICgoc2l6ZV90KTJVICogKHNpemVfdCkxMDI0VSAqIChzaXplX3QpMTAyNFUpCisjZWxzZSAgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZGVmaW5lIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgTUFYX1NJWkVfVAorI2VuZGlmICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworI2VuZGlmICAvKiBERUZBVUxUX1RSSU1fVEhSRVNIT0xEICovCisjaWZuZGVmIERFRkFVTFRfTU1BUF9USFJFU0hPTEQKKyNpZiBIQVZFX01NQVAKKyNkZWZpbmUgREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAoKHNpemVfdCkyNTZVICogKHNpemVfdCkxMDI0VSkKKyNlbHNlICAgLyogSEFWRV9NTUFQICovCisjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgTUFYX1NJWkVfVAorI2VuZGlmICAvKiBIQVZFX01NQVAgKi8KKyNlbmRpZiAgLyogREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAqLworI2lmbmRlZiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFCisjaWYgSEFWRV9NTUFQCisjZGVmaW5lIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgNDA5NQorI2Vsc2UKKyNkZWZpbmUgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSBNQVhfU0laRV9UCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisjZW5kaWYgLyogTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSAqLworI2lmbmRlZiBVU0VfQlVJTFRJTl9GRlMKKyNkZWZpbmUgVVNFX0JVSUxUSU5fRkZTIDAKKyNlbmRpZiAgLyogVVNFX0JVSUxUSU5fRkZTICovCisjaWZuZGVmIFVTRV9ERVZfUkFORE9NCisjZGVmaW5lIFVTRV9ERVZfUkFORE9NIDAKKyNlbmRpZiAgLyogVVNFX0RFVl9SQU5ET00gKi8KKyNpZm5kZWYgTk9fTUFMTElORk8KKyNkZWZpbmUgTk9fTUFMTElORk8gMAorI2VuZGlmICAvKiBOT19NQUxMSU5GTyAqLworI2lmbmRlZiBNQUxMSU5GT19GSUVMRF9UWVBFCisjZGVmaW5lIE1BTExJTkZPX0ZJRUxEX1RZUEUgc2l6ZV90CisjZW5kaWYgIC8qIE1BTExJTkZPX0ZJRUxEX1RZUEUgKi8KKyNpZm5kZWYgTk9fU0VHTUVOVF9UUkFWRVJTQUwKKyNkZWZpbmUgTk9fU0VHTUVOVF9UUkFWRVJTQUwgMAorI2VuZGlmIC8qIE5PX1NFR01FTlRfVFJBVkVSU0FMICovCisKKy8qCisgIG1hbGxvcHQgdHVuaW5nIG9wdGlvbnMuICBTVklEL1hQRyBkZWZpbmVzIGZvdXIgc3RhbmRhcmQgcGFyYW1ldGVyCisgIG51bWJlcnMgZm9yIG1hbGxvcHQsIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBOb25lIG9mIHRoZXNlCisgIGFyZSB1c2VkIGluIHRoaXMgbWFsbG9jLCBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMKKyAgbWFsbG9jIGRvZXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIG9wdGlvbnMuCisqLworCisjZGVmaW5lIE1fVFJJTV9USFJFU0hPTEQgICAgICgtMSkKKyNkZWZpbmUgTV9HUkFOVUxBUklUWSAgICAgICAgKC0yKQorI2RlZmluZSBNX01NQVBfVEhSRVNIT0xEICAgICAoLTMpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWxsaW5mbyBkZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIFRoaXMgdmVyc2lvbiBvZiBtYWxsb2Mgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIFNWSUQvWFBHIG1hbGxpbmZvCisgIHJvdXRpbmUgdGhhdCByZXR1cm5zIGEgc3RydWN0IGNvbnRhaW5pbmcgdXNhZ2UgcHJvcGVydGllcyBhbmQKKyAgc3RhdGlzdGljcy4gSXQgc2hvdWxkIHdvcmsgb24gYW55IHN5c3RlbSB0aGF0IGhhcyBhCisgIC91c3IvaW5jbHVkZS9tYWxsb2MuaCBkZWZpbmluZyBzdHJ1Y3QgbWFsbGluZm8uICBUaGUgbWFpbgorICBkZWNsYXJhdGlvbiBuZWVkZWQgaXMgdGhlIG1hbGxpbmZvIHN0cnVjdCB0aGF0IGlzIHJldHVybmVkIChieS1jb3B5KQorICBieSBtYWxsaW5mbygpLiAgVGhlIG1hbGxvaW5mbyBzdHJ1Y3QgY29udGFpbnMgYSBidW5jaCBvZiBmaWVsZHMgdGhhdAorICBhcmUgbm90IGV2ZW4gbWVhbmluZ2Z1bCBpbiB0aGlzIHZlcnNpb24gb2YgbWFsbG9jLiAgVGhlc2UgZmllbGRzIGFyZQorICBhcmUgaW5zdGVhZCBmaWxsZWQgYnkgbWFsbGluZm8oKSB3aXRoIG90aGVyIG51bWJlcnMgdGhhdCBtaWdodCBiZSBvZgorICBpbnRlcmVzdC4KKworICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IIHNob3VsZCBiZSBzZXQgaWYgeW91IGhhdmUgYQorICAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZmlsZSB0aGF0IGluY2x1ZGVzIGEgZGVjbGFyYXRpb24gb2Ygc3RydWN0CisgIG1hbGxpbmZvLiAgSWYgc28sIGl0IGlzIGluY2x1ZGVkOyBlbHNlIGEgY29tcGxpYW50IHZlcnNpb24gaXMKKyAgZGVjbGFyZWQgYmVsb3cuICBUaGVzZSBtdXN0IGJlIHByZWNpc2VseSB0aGUgc2FtZSBmb3IgbWFsbGluZm8oKSB0bworICB3b3JrLiAgVGhlIG9yaWdpbmFsIFNWSUQgdmVyc2lvbiBvZiB0aGlzIHN0cnVjdCwgZGVmaW5lZCBvbiBtb3N0CisgIHN5c3RlbXMgd2l0aCBtYWxsaW5mbywgZGVjbGFyZXMgYWxsIGZpZWxkcyBhcyBpbnRzLiBCdXQgc29tZSBvdGhlcnMKKyAgZGVmaW5lIGFzIHVuc2lnbmVkIGxvbmcuIElmIHlvdXIgc3lzdGVtIGRlZmluZXMgdGhlIGZpZWxkcyB1c2luZyBhCisgIHR5cGUgb2YgZGlmZmVyZW50IHdpZHRoIHRoYW4gbGlzdGVkIGhlcmUsIHlvdSBNVVNUICNpbmNsdWRlIHlvdXIKKyAgc3lzdGVtIHZlcnNpb24gYW5kICNkZWZpbmUgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSC4KKyovCisKKy8qICNkZWZpbmUgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworCisjaWZkZWYgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSAorI2luY2x1ZGUgIi91c3IvaW5jbHVkZS9tYWxsb2MuaCIKKyNlbHNlIC8qIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KKyNpZm5kZWYgU1RSVUNUX01BTExJTkZPX0RFQ0xBUkVECisjZGVmaW5lIFNUUlVDVF9NQUxMSU5GT19ERUNMQVJFRCAxCitzdHJ1Y3QgbWFsbGluZm8geworICBNQUxMSU5GT19GSUVMRF9UWVBFIGFyZW5hOyAgICAvKiBub24tbW1hcHBlZCBzcGFjZSBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0gKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBvcmRibGtzOyAgLyogbnVtYmVyIG9mIGZyZWUgY2h1bmtzICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgc21ibGtzOyAgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa3M7ICAgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa2hkOyAgIC8qIHNwYWNlIGluIG1tYXBwZWQgcmVnaW9ucyAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHVzbWJsa3M7ICAvKiBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGZzbWJsa3M7ICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHVvcmRibGtzOyAvKiB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBmb3JkYmxrczsgLyogdG90YWwgZnJlZSBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGtlZXBjb3N0OyAvKiByZWxlYXNhYmxlICh2aWEgbWFsbG9jX3RyaW0pIHNwYWNlICovCit9OworI2VuZGlmIC8qIFNUUlVDVF9NQUxMSU5GT19ERUNMQVJFRCAqLworI2VuZGlmIC8qIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCisvKgorICBUcnkgdG8gcGVyc3VhZGUgY29tcGlsZXJzIHRvIGlubGluZS4gVGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb25zIGZvcgorICBpbmxpbmluZyBhcmUgZGVmaW5lZCBhcyBtYWNyb3MsIHNvIHRoZXNlIGFyZW4ndCB1c2VkIGZvciB0aGVtLgorKi8KKworI2lmbmRlZiBGT1JDRUlOTElORQorICAjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNkZWZpbmUgRk9SQ0VJTkxJTkUgX19pbmxpbmUgX19hdHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKQorICAjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgRk9SQ0VJTkxJTkUgX19mb3JjZWlubGluZQorICAjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBOT0lOTElORQorICAjaWYgZGVmaW5lZChfX0dOVUNfXykKKyAgICAjZGVmaW5lIE5PSU5MSU5FIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCisgICNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisgICAgI2RlZmluZSBOT0lOTElORSBfX2RlY2xzcGVjKG5vaW5saW5lKQorICAjZWxzZQorICAgICNkZWZpbmUgTk9JTkxJTkUKKyAgI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNpZm5kZWYgRk9SQ0VJTkxJTkUKKyAjZGVmaW5lIEZPUkNFSU5MSU5FIGlubGluZQorI2VuZGlmCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyNpZm5kZWYgRk9SQ0VJTkxJTkUKKyAjZGVmaW5lIEZPUkNFSU5MSU5FCisjZW5kaWYKKworI2lmICFPTkxZX01TUEFDRVMKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWNsYXJhdGlvbnMgb2YgcHVibGljIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBVU0VfRExfUFJFRklYCisjZGVmaW5lIGRsY2FsbG9jICAgICAgICAgICAgICAgY2FsbG9jCisjZGVmaW5lIGRsZnJlZSAgICAgICAgICAgICAgICAgZnJlZQorI2RlZmluZSBkbG1hbGxvYyAgICAgICAgICAgICAgIG1hbGxvYworI2RlZmluZSBkbG1lbWFsaWduICAgICAgICAgICAgIG1lbWFsaWduCisjZGVmaW5lIGRscmVhbGxvYyAgICAgICAgICAgICAgcmVhbGxvYworI2RlZmluZSBkbHZhbGxvYyAgICAgICAgICAgICAgIHZhbGxvYworI2RlZmluZSBkbHB2YWxsb2MgICAgICAgICAgICAgIHB2YWxsb2MKKyNkZWZpbmUgZGxtYWxsaW5mbyAgICAgICAgICAgICBtYWxsaW5mbworI2RlZmluZSBkbG1hbGxvcHQgICAgICAgICAgICAgIG1hbGxvcHQKKyNkZWZpbmUgZGxtYWxsb2NfdHJpbSAgICAgICAgICBtYWxsb2NfdHJpbQorI2RlZmluZSBkbG1hbGxvY19zdGF0cyAgICAgICAgIG1hbGxvY19zdGF0cworI2RlZmluZSBkbG1hbGxvY191c2FibGVfc2l6ZSAgIG1hbGxvY191c2FibGVfc2l6ZQorI2RlZmluZSBkbG1hbGxvY19mb290cHJpbnQgICAgIG1hbGxvY19mb290cHJpbnQKKyNkZWZpbmUgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCBtYWxsb2NfbWF4X2Zvb3RwcmludAorI2RlZmluZSBkbGluZGVwZW5kZW50X2NhbGxvYyAgIGluZGVwZW5kZW50X2NhbGxvYworI2RlZmluZSBkbGluZGVwZW5kZW50X2NvbWFsbG9jIGluZGVwZW5kZW50X2NvbWFsbG9jCisjZW5kaWYgLyogVVNFX0RMX1BSRUZJWCAqLworCisKKy8qCisgIG1hbGxvYyhzaXplX3QgbikKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgY2h1bmsgb2YgYXQgbGVhc3QgbiBieXRlcywgb3IKKyAgbnVsbCBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2UgZXJybm8gaXMgc2V0IHRvIEVOT01FTQorICBvbiBBTlNJIEMgc3lzdGVtcy4KKworICBJZiBuIGlzIHplcm8sIG1hbGxvYyByZXR1cm5zIGEgbWluaW11bS1zaXplZCBjaHVuay4gKFRoZSBtaW5pbXVtCisgIHNpemUgaXMgMTYgYnl0ZXMgb24gbW9zdCAzMmJpdCBzeXN0ZW1zLCBhbmQgMzIgYnl0ZXMgb24gNjRiaXQKKyAgc3lzdGVtcy4pICBOb3RlIHRoYXQgc2l6ZV90IGlzIGFuIHVuc2lnbmVkIHR5cGUsIHNvIGNhbGxzIHdpdGgKKyAgYXJndW1lbnRzIHRoYXQgd291bGQgYmUgbmVnYXRpdmUgaWYgc2lnbmVkIGFyZSBpbnRlcnByZXRlZCBhcworICByZXF1ZXN0cyBmb3IgaHVnZSBhbW91bnRzIG9mIHNwYWNlLCB3aGljaCB3aWxsIG9mdGVuIGZhaWwuIFRoZQorICBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBvZiBuIGRpZmZlcnMgYWNyb3NzIHN5c3RlbXMsIGJ1dCBpcyBpbiBhbGwKKyAgY2FzZXMgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIHJlcHJlc2VudGFibGUgdmFsdWUgb2YgYSBzaXplX3QuCisqLwordm9pZCogZGxtYWxsb2Moc2l6ZV90KTsKKworLyoKKyAgZnJlZSh2b2lkKiBwKQorICBSZWxlYXNlcyB0aGUgY2h1bmsgb2YgbWVtb3J5IHBvaW50ZWQgdG8gYnkgcCwgdGhhdCBoYWQgYmVlbiBwcmV2aW91c2x5CisgIGFsbG9jYXRlZCB1c2luZyBtYWxsb2Mgb3IgYSByZWxhdGVkIHJvdXRpbmUgc3VjaCBhcyByZWFsbG9jLgorICBJdCBoYXMgbm8gZWZmZWN0IGlmIHAgaXMgbnVsbC4gSWYgcCB3YXMgbm90IG1hbGxvY2VkIG9yIGFscmVhZHkKKyAgZnJlZWQsIGZyZWUocCkgd2lsbCBieSBkZWZhdWx0IGNhdXNlIHRoZSBjdXJyZW50IHByb2dyYW0gdG8gYWJvcnQuCisqLwordm9pZCAgZGxmcmVlKHZvaWQqKTsKKworLyoKKyAgY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKTsKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gbl9lbGVtZW50cyAqIGVsZW1lbnRfc2l6ZSBieXRlcywgd2l0aCBhbGwgbG9jYXRpb25zCisgIHNldCB0byB6ZXJvLgorKi8KK3ZvaWQqIGRsY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsKKworLyoKKyAgcmVhbGxvYyh2b2lkKiBwLCBzaXplX3QgbikKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBjaHVuayBvZiBzaXplIG4gdGhhdCBjb250YWlucyB0aGUgc2FtZSBkYXRhCisgIGFzIGRvZXMgY2h1bmsgcCB1cCB0byB0aGUgbWluaW11bSBvZiAobiwgcCdzIHNpemUpIGJ5dGVzLCBvciBudWxsCisgIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZS4KKworICBUaGUgcmV0dXJuZWQgcG9pbnRlciBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyBwLiBUaGUgYWxnb3JpdGhtCisgIHByZWZlcnMgZXh0ZW5kaW5nIHAgaW4gbW9zdCBjYXNlcyB3aGVuIHBvc3NpYmxlLCBvdGhlcndpc2UgaXQKKyAgZW1wbG95cyB0aGUgZXF1aXZhbGVudCBvZiBhIG1hbGxvYy1jb3B5LWZyZWUgc2VxdWVuY2UuCisKKyAgSWYgcCBpcyBudWxsLCByZWFsbG9jIGlzIGVxdWl2YWxlbnQgdG8gbWFsbG9jLgorCisgIElmIHNwYWNlIGlzIG5vdCBhdmFpbGFibGUsIHJlYWxsb2MgcmV0dXJucyBudWxsLCBlcnJubyBpcyBzZXQgKGlmIG9uCisgIEFOU0kpIGFuZCBwIGlzIE5PVCBmcmVlZC4KKworICBpZiBuIGlzIGZvciBmZXdlciBieXRlcyB0aGFuIGFscmVhZHkgaGVsZCBieSBwLCB0aGUgbmV3bHkgdW51c2VkCisgIHNwYWNlIGlzIGxvcHBlZCBvZmYgYW5kIGZyZWVkIGlmIHBvc3NpYmxlLiAgcmVhbGxvYyB3aXRoIGEgc2l6ZQorICBhcmd1bWVudCBvZiB6ZXJvIChyZSlhbGxvY2F0ZXMgYSBtaW5pbXVtLXNpemVkIGNodW5rLgorCisgIFRoZSBvbGQgdW5peCByZWFsbG9jIGNvbnZlbnRpb24gb2YgYWxsb3dpbmcgdGhlIGxhc3QtZnJlZSdkIGNodW5rCisgIHRvIGJlIHVzZWQgYXMgYW4gYXJndW1lbnQgdG8gcmVhbGxvYyBpcyBub3Qgc3VwcG9ydGVkLgorKi8KKwordm9pZCogZGxyZWFsbG9jKHZvaWQqLCBzaXplX3QpOworCisvKgorICBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgbik7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIG4gYnl0ZXMsIGFsaWduZWQKKyAgaW4gYWNjb3JkIHdpdGggdGhlIGFsaWdubWVudCBhcmd1bWVudC4KKworICBUaGUgYWxpZ25tZW50IGFyZ3VtZW50IHNob3VsZCBiZSBhIHBvd2VyIG9mIHR3by4gSWYgdGhlIGFyZ3VtZW50IGlzCisgIG5vdCBhIHBvd2VyIG9mIHR3bywgdGhlIG5lYXJlc3QgZ3JlYXRlciBwb3dlciBpcyB1c2VkLgorICA4LWJ5dGUgYWxpZ25tZW50IGlzIGd1YXJhbnRlZWQgYnkgbm9ybWFsIG1hbGxvYyBjYWxscywgc28gZG9uJ3QKKyAgYm90aGVyIGNhbGxpbmcgbWVtYWxpZ24gd2l0aCBhbiBhcmd1bWVudCBvZiA4IG9yIGxlc3MuCisKKyAgT3ZlcnJlbGlhbmNlIG9uIG1lbWFsaWduIGlzIGEgc3VyZSB3YXkgdG8gZnJhZ21lbnQgc3BhY2UuCisqLwordm9pZCogZGxtZW1hbGlnbihzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIHZhbGxvYyhzaXplX3Qgbik7CisgIEVxdWl2YWxlbnQgdG8gbWVtYWxpZ24ocGFnZXNpemUsIG4pLCB3aGVyZSBwYWdlc2l6ZSBpcyB0aGUgcGFnZQorICBzaXplIG9mIHRoZSBzeXN0ZW0uIElmIHRoZSBwYWdlc2l6ZSBpcyB1bmtub3duLCA0MDk2IGlzIHVzZWQuCisqLwordm9pZCogZGx2YWxsb2Moc2l6ZV90KTsKKworLyoKKyAgbWFsbG9wdChpbnQgcGFyYW1ldGVyX251bWJlciwgaW50IHBhcmFtZXRlcl92YWx1ZSkKKyAgU2V0cyB0dW5hYmxlIHBhcmFtZXRlcnMgVGhlIGZvcm1hdCBpcyB0byBwcm92aWRlIGEKKyAgKHBhcmFtZXRlci1udW1iZXIsIHBhcmFtZXRlci12YWx1ZSkgcGFpci4gIG1hbGxvcHQgdGhlbiBzZXRzIHRoZQorICBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0byB0aGUgYXJndW1lbnQgdmFsdWUgaWYgaXQgY2FuIChpLmUuLCBzbworICBsb25nIGFzIHRoZSB2YWx1ZSBpcyBtZWFuaW5nZnVsKSwgYW5kIHJldHVybnMgMSBpZiBzdWNjZXNzZnVsIGVsc2UKKyAgMC4gIFRvIHdvcmthcm91bmQgdGhlIGZhY3QgdGhhdCBtYWxsb3B0IGlzIHNwZWNpZmllZCB0byB1c2UgaW50LAorICBub3Qgc2l6ZV90IHBhcmFtZXRlcnMsIHRoZSB2YWx1ZSAtMSBpcyBzcGVjaWFsbHkgdHJlYXRlZCBhcyB0aGUKKyAgbWF4aW11bSB1bnNpZ25lZCBzaXplX3QgdmFsdWUuCisKKyAgU1ZJRC9YUEcvQU5TSSBkZWZpbmVzIGZvdXIgc3RhbmRhcmQgcGFyYW0gbnVtYmVycyBmb3IgbWFsbG9wdCwKKyAgbm9ybWFsbHkgZGVmaW5lZCBpbiBtYWxsb2MuaC4gIE5vbmUgb2YgdGhlc2UgYXJlIHVzZSBpbiB0aGlzIG1hbGxvYywKKyAgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1dCB0aGlzIG1hbGxvYyBhbHNvIHN1cHBvcnRzIG90aGVyCisgIG9wdGlvbnMgaW4gbWFsbG9wdC4gU2VlIGJlbG93IGZvciBkZXRhaWxzLiAgQnJpZWZseSwgc3VwcG9ydGVkCisgIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3MgKGxpc3RlZCBkZWZhdWx0cyBhcmUgZm9yICJ0eXBpY2FsIgorICBjb25maWd1cmF0aW9ucykuCisKKyAgU3ltYm9sICAgICAgICAgICAgcGFyYW0gIyAgZGVmYXVsdCAgICBhbGxvd2VkIHBhcmFtIHZhbHVlcworICBNX1RSSU1fVEhSRVNIT0xEICAgICAtMSAgIDIqMTAyNCoxMDI0ICAgYW55ICAgKC0xIGRpc2FibGVzKQorICBNX0dSQU5VTEFSSVRZICAgICAgICAtMiAgICAgcGFnZSBzaXplICAgYW55IHBvd2VyIG9mIDIgPj0gcGFnZSBzaXplCisgIE1fTU1BUF9USFJFU0hPTEQgICAgIC0zICAgICAgMjU2KjEwMjQgICBhbnkgICAob3IgMCBpZiBubyBNTUFQIHN1cHBvcnQpCisqLworaW50IGRsbWFsbG9wdChpbnQsIGludCk7CisKKy8qCisgIG1hbGxvY19mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4gIFRoZSB0b3RhbAorICBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcworICB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkCisgIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZCBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLgorICBFdmVuIGlmIGxvY2tzIGFyZSBvdGhlcndpc2UgZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlbSwKKyAgc28gcmVzdWx0cyBtaWdodCBub3QgYmUgdXAgdG8gZGF0ZS4KKyovCitzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50KHZvaWQpOworCisvKgorICBtYWxsb2NfbWF4X2Zvb3RwcmludCgpOworICBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uIFRoaXMKKyAgdmFsdWUgd2lsbCBiZSBncmVhdGVyIHRoYW4gY3VycmVudCBmb290cHJpbnQgaWYgZGVhbGxvY2F0ZWQgc3BhY2UKKyAgaGFzIGJlZW4gcmVjbGFpbWVkIGJ5IHRoZSBzeXN0ZW0uIFRoZSBwZWFrIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQKKyAgYnkgbWFsbG9jLCByZWFsbG9jIGV0Yy4sIGlzIGxlc3MgdGhhbiB0aGlzIHZhbHVlLiBVbmxpa2UgbWFsbGluZm8sCisgIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvbmx5IGEgcHJlY29tcHV0ZWQgcmVzdWx0LCBzbyBjYW4gYmUgY2FsbGVkCisgIGZyZXF1ZW50bHkgdG8gbW9uaXRvciBtZW1vcnkgY29uc3VtcHRpb24uICBFdmVuIGlmIGxvY2tzIGFyZQorICBvdGhlcndpc2UgZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlbSwgc28gcmVzdWx0cyBtaWdodAorICBub3QgYmUgdXAgdG8gZGF0ZS4KKyovCitzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKTsKKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbWFsbGluZm8oKQorICBSZXR1cm5zIChieSBjb3B5KSBhIHN0cnVjdCBjb250YWluaW5nIHZhcmlvdXMgc3VtbWFyeSBzdGF0aXN0aWNzOgorCisgIGFyZW5hOiAgICAgY3VycmVudCB0b3RhbCBub24tbW1hcHBlZCBieXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KKyAgb3JkYmxrczogICB0aGUgbnVtYmVyIG9mIGZyZWUgY2h1bmtzCisgIHNtYmxrczogICAgYWx3YXlzIHplcm8uCisgIGhibGtzOiAgICAgY3VycmVudCBudW1iZXIgb2YgbW1hcHBlZCByZWdpb25zCisgIGhibGtoZDogICAgdG90YWwgYnl0ZXMgaGVsZCBpbiBtbWFwcGVkIHJlZ2lvbnMKKyAgdXNtYmxrczogICB0aGUgbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UuIFRoaXMgd2lsbCBiZSBncmVhdGVyCisJCXRoYW4gY3VycmVudCB0b3RhbCBpZiB0cmltbWluZyBoYXMgb2NjdXJyZWQuCisgIGZzbWJsa3M6ICAgYWx3YXlzIHplcm8KKyAgdW9yZGJsa3M6ICBjdXJyZW50IHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAobm9ybWFsIG9yIG1tYXBwZWQpCisgIGZvcmRibGtzOiAgdG90YWwgZnJlZSBzcGFjZQorICBrZWVwY29zdDogIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIGlkZWFsbHkgYmUgcmVsZWFzZWQKKwkgICAgICAgYmFjayB0byBzeXN0ZW0gdmlhIG1hbGxvY190cmltLiAoImlkZWFsbHkiIG1lYW5zIHRoYXQKKwkgICAgICAgaXQgaWdub3JlcyBwYWdlIHJlc3RyaWN0aW9ucyBldGMuKQorCisgIEJlY2F1c2UgdGhlc2UgZmllbGRzIGFyZSBpbnRzLCBidXQgaW50ZXJuYWwgYm9va2tlZXBpbmcgbWF5CisgIGJlIGtlcHQgYXMgbG9uZ3MsIHRoZSByZXBvcnRlZCB2YWx1ZXMgbWF5IHdyYXAgYXJvdW5kIHplcm8gYW5kCisgIHRodXMgYmUgaW5hY2N1cmF0ZS4KKyovCitzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKTsKKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCisvKgorICBpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUsIHZvaWQqIGNodW5rc1tdKTsKKworICBpbmRlcGVuZGVudF9jYWxsb2MgaXMgc2ltaWxhciB0byBjYWxsb2MsIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhCisgIHNpbmdsZSBjbGVhcmVkIHNwYWNlLCBpdCByZXR1cm5zIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIG5fZWxlbWVudHMKKyAgaW5kZXBlbmRlbnQgZWxlbWVudHMgdGhhdCBjYW4gaG9sZCBjb250ZW50cyBvZiBzaXplIGVsZW1fc2l6ZSwgZWFjaAorICBvZiB3aGljaCBzdGFydHMgb3V0IGNsZWFyZWQsIGFuZCBjYW4gYmUgaW5kZXBlbmRlbnRseSBmcmVlZCwKKyAgcmVhbGxvYydlZCBldGMuIFRoZSBlbGVtZW50cyBhcmUgZ3VhcmFudGVlZCB0byBiZSBhZGphY2VudGx5CisgIGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBvY2N1ciB3aXRoIG11bHRpcGxlIGNhbGxvY3Mgb3IKKyAgbWFsbG9jcyksIHdoaWNoIG1heSBhbHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkgaW4gc29tZQorICBhcHBsaWNhdGlvbnMuCisKKyAgVGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCwgd2hpY2ggaXMKKyAgcHJvYmFibHkgdGhlIG1vc3QgdHlwaWNhbCB1c2FnZSkuIElmIGl0IGlzIG51bGwsIHRoZSByZXR1cm5lZCBhcnJheQorICBpcyBpdHNlbGYgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgYWxzbyBiZSBmcmVlZCB3aGVuIGl0IGlzCisgIG5vIGxvbmdlciBuZWVkZWQuIE90aGVyd2lzZSwgdGhlIGNodW5rcyBhcnJheSBtdXN0IGJlIG9mIGF0IGxlYXN0CisgIG5fZWxlbWVudHMgaW4gbGVuZ3RoLiBJdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUgcG9pbnRlcnMgdG8gdGhlCisgIGNodW5rcy4KKworICBJbiBlaXRoZXIgY2FzZSwgaW5kZXBlbmRlbnRfY2FsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgImNodW5rcyIKKyAgaXMgbnVsbCwgaXQgcmV0dXJucyBhIGNodW5rIHJlcHJlc2VudGluZyBhbiBhcnJheSB3aXRoIHplcm8gZWxlbWVudHMKKyAgKHdoaWNoIHNob3VsZCBiZSBmcmVlZCBpZiBub3Qgd2FudGVkKS4KKworICBFYWNoIGVsZW1lbnQgbXVzdCBiZSBpbmRpdmlkdWFsbHkgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIKKyAgbmVlZGVkLiBJZiB5b3UnZCBsaWtlIHRvIGluc3RlYWQgYmUgYWJsZSB0byBmcmVlIGFsbCBhdCBvbmNlLCB5b3UKKyAgc2hvdWxkIGluc3RlYWQgdXNlIHJlZ3VsYXIgY2FsbG9jIGFuZCBhc3NpZ24gcG9pbnRlcnMgaW50byB0aGlzCisgIHNwYWNlIHRvIHJlcHJlc2VudCBlbGVtZW50cy4gIChJbiB0aGlzIGNhc2UgdGhvdWdoLCB5b3UgY2Fubm90CisgIGluZGVwZW5kZW50bHkgZnJlZSBlbGVtZW50cy4pCisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIHNpbXBsaWZpZXMgYW5kIHNwZWVkcyB1cCBpbXBsZW1lbnRhdGlvbnMgb2YgbWFueQorICBraW5kcyBvZiBwb29scy4gIEl0IG1heSBhbHNvIGJlIHVzZWZ1bCB3aGVuIGNvbnN0cnVjdGluZyBsYXJnZSBkYXRhCisgIHN0cnVjdHVyZXMgdGhhdCBpbml0aWFsbHkgaGF2ZSBhIGZpeGVkIG51bWJlciBvZiBmaXhlZC1zaXplZCBub2RlcywKKyAgYnV0IHRoZSBudW1iZXIgaXMgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZSwgYW5kIHNvbWUgb2YgdGhlIG5vZGVzCisgIG1heSBsYXRlciBuZWVkIHRvIGJlIGZyZWVkLiBGb3IgZXhhbXBsZToKKworICBzdHJ1Y3QgTm9kZSB7IGludCBpdGVtOyBzdHJ1Y3QgTm9kZSogbmV4dDsgfTsKKworICBzdHJ1Y3QgTm9kZSogYnVpbGRfbGlzdCgpIHsKKyAgICBzdHJ1Y3QgTm9kZSoqIHBvb2w7CisgICAgaW50IG4gPSByZWFkX251bWJlcl9vZl9ub2Rlc19uZWVkZWQoKTsKKyAgICBpZiAobiA8PSAwKSByZXR1cm4gMDsKKyAgICBwb29sID0gKHN0cnVjdCBOb2RlKiopKGluZGVwZW5kZW50X2NhbGxvYyhuLCBzaXplb2Yoc3RydWN0IE5vZGUpLCAwKTsKKyAgICBpZiAocG9vbCA9PSAwKSBkaWUoKTsKKyAgICAvLyBvcmdhbml6ZSBpbnRvIGEgbGlua2VkIGxpc3QuLi4KKyAgICBzdHJ1Y3QgTm9kZSogZmlyc3QgPSBwb29sWzBdOworICAgIGZvciAoaSA9IDA7IGkgPCBuLTE7ICsraSkKKyAgICAgIHBvb2xbaV0tPm5leHQgPSBwb29sW2krMV07CisgICAgZnJlZShwb29sKTsgICAgIC8vIENhbiBub3cgZnJlZSB0aGUgYXJyYXkgKG9yIG5vdCwgaWYgaXQgaXMgbmVlZGVkIGxhdGVyKQorICAgIHJldHVybiBmaXJzdDsKKyAgfQorKi8KK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3QsIHNpemVfdCwgdm9pZCoqKTsKKworLyoKKyAgaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKyAgaW5kZXBlbmRlbnRfY29tYWxsb2MgYWxsb2NhdGVzLCBhbGwgYXQgb25jZSwgYSBzZXQgb2Ygbl9lbGVtZW50cworICBjaHVua3Mgd2l0aCBzaXplcyBpbmRpY2F0ZWQgaW4gdGhlICJzaXplcyIgYXJyYXkuICAgIEl0IHJldHVybnMKKyAgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlc2UgZWxlbWVudHMsIGVhY2ggb2Ygd2hpY2ggY2FuIGJlCisgIGluZGVwZW5kZW50bHkgZnJlZWQsIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8KKyAgYmUgYWRqYWNlbnRseSBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aAorICBtdWx0aXBsZSBjYWxsb2NzIG9yIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5CisgIGluIHNvbWUgYXBwbGljYXRpb25zLgorCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwpLiBJZiBpdCBpcyBudWxsCisgIHRoZSByZXR1cm5lZCBhcnJheSBpcyBpdHNlbGYgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgYWxzbworICBiZSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuIE90aGVyd2lzZSwgdGhlIGNodW5rcyBhcnJheQorICBtdXN0IGJlIG9mIGF0IGxlYXN0IG5fZWxlbWVudHMgaW4gbGVuZ3RoLiBJdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUKKyAgcG9pbnRlcnMgdG8gdGhlIGNodW5rcy4KKworICBJbiBlaXRoZXIgY2FzZSwgaW5kZXBlbmRlbnRfY29tYWxsb2MgcmV0dXJucyB0aGlzIHBvaW50ZXIgYXJyYXksIG9yCisgIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9lbGVtZW50cyBpcyB6ZXJvIGFuZCBjaHVua3MgaXMKKyAgbnVsbCwgaXQgcmV0dXJucyBhIGNodW5rIHJlcHJlc2VudGluZyBhbiBhcnJheSB3aXRoIHplcm8gZWxlbWVudHMKKyAgKHdoaWNoIHNob3VsZCBiZSBmcmVlZCBpZiBub3Qgd2FudGVkKS4KKworICBFYWNoIGVsZW1lbnQgbXVzdCBiZSBpbmRpdmlkdWFsbHkgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIKKyAgbmVlZGVkLiBJZiB5b3UnZCBsaWtlIHRvIGluc3RlYWQgYmUgYWJsZSB0byBmcmVlIGFsbCBhdCBvbmNlLCB5b3UKKyAgc2hvdWxkIGluc3RlYWQgdXNlIGEgc2luZ2xlIHJlZ3VsYXIgbWFsbG9jLCBhbmQgYXNzaWduIHBvaW50ZXJzIGF0CisgIHBhcnRpY3VsYXIgb2Zmc2V0cyBpbiB0aGUgYWdncmVnYXRlIHNwYWNlLiAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91CisgIGNhbm5vdCBpbmRlcGVuZGVudGx5IGZyZWUgZWxlbWVudHMuKQorCisgIGluZGVwZW5kZW50X2NvbWFsbGFjIGRpZmZlcnMgZnJvbSBpbmRlcGVuZGVudF9jYWxsb2MgaW4gdGhhdCBlYWNoCisgIGVsZW1lbnQgbWF5IGhhdmUgYSBkaWZmZXJlbnQgc2l6ZSwgYW5kIGFsc28gdGhhdCBpdCBkb2VzIG5vdAorICBhdXRvbWF0aWNhbGx5IGNsZWFyIGVsZW1lbnRzLgorCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBiZSB1c2VkIHRvIHNwZWVkIHVwIGFsbG9jYXRpb24gaW4gY2FzZXMKKyAgd2hlcmUgc2V2ZXJhbCBzdHJ1Y3RzIG9yIG9iamVjdHMgbXVzdCBhbHdheXMgYmUgYWxsb2NhdGVkIGF0IHRoZQorICBzYW1lIHRpbWUuICBGb3IgZXhhbXBsZToKKworICBzdHJ1Y3QgSGVhZCB7IC4uLiB9CisgIHN0cnVjdCBGb290IHsgLi4uIH0KKworICB2b2lkIHNlbmRfbWVzc2FnZShjaGFyKiBtc2cpIHsKKyAgICBpbnQgbXNnbGVuID0gc3RybGVuKG1zZyk7CisgICAgc2l6ZV90IHNpemVzWzNdID0geyBzaXplb2Yoc3RydWN0IEhlYWQpLCBtc2dsZW4sIHNpemVvZihzdHJ1Y3QgRm9vdCkgfTsKKyAgICB2b2lkKiBjaHVua3NbM107CisgICAgaWYgKGluZGVwZW5kZW50X2NvbWFsbG9jKDMsIHNpemVzLCBjaHVua3MpID09IDApCisgICAgICBkaWUoKTsKKyAgICBzdHJ1Y3QgSGVhZCogaGVhZCA9IChzdHJ1Y3QgSGVhZCopKGNodW5rc1swXSk7CisgICAgY2hhciogICAgICAgIGJvZHkgPSAoY2hhciopKGNodW5rc1sxXSk7CisgICAgc3RydWN0IEZvb3QqIGZvb3QgPSAoc3RydWN0IEZvb3QqKShjaHVua3NbMl0pOworICAgIC8vIC4uLgorICB9CisKKyAgSW4gZ2VuZXJhbCB0aG91Z2gsIGluZGVwZW5kZW50X2NvbWFsbG9jIGlzIHdvcnRoIHVzaW5nIG9ubHkgZm9yCisgIGxhcmdlciB2YWx1ZXMgb2Ygbl9lbGVtZW50cy4gRm9yIHNtYWxsIHZhbHVlcywgeW91IHByb2JhYmx5IHdvbid0CisgIGRldGVjdCBlbm91Z2ggZGlmZmVyZW5jZSBmcm9tIHNlcmllcyBvZiBtYWxsb2MgY2FsbHMgdG8gYm90aGVyLgorCisgIE92ZXJ1c2Ugb2YgaW5kZXBlbmRlbnRfY29tYWxsb2MgY2FuIGluY3JlYXNlIG92ZXJhbGwgbWVtb3J5IHVzYWdlLAorICBzaW5jZSBpdCBjYW5ub3QgcmV1c2UgZXhpc3Rpbmcgbm9uY29udGlndW91cyBzbWFsbCBjaHVua3MgdGhhdAorICBtaWdodCBiZSBhdmFpbGFibGUgZm9yIHNvbWUgb2YgdGhlIGVsZW1lbnRzLgorKi8KK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCwgc2l6ZV90Kiwgdm9pZCoqKTsKKworCisvKgorICBwdmFsbG9jKHNpemVfdCBuKTsKKyAgRXF1aXZhbGVudCB0byB2YWxsb2MobWluaW11bS1wYWdlLXRoYXQtaG9sZHMobikpLCB0aGF0IGlzLAorICByb3VuZCB1cCBuIHRvIG5lYXJlc3QgcGFnZXNpemUuCisgKi8KK3ZvaWQqICBkbHB2YWxsb2Moc2l6ZV90KTsKKworLyoKKyAgbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCk7CisKKyAgSWYgcG9zc2libGUsIGdpdmVzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0gKHZpYSBuZWdhdGl2ZSBhcmd1bWVudHMKKyAgdG8gc2JyaykgaWYgdGhlcmUgaXMgdW51c2VkIG1lbW9yeSBhdCB0aGUgYGhpZ2gnIGVuZCBvZiB0aGUgbWFsbG9jCisgIHBvb2wgb3IgaW4gdW51c2VkIE1NQVAgc2VnbWVudHMuIFlvdSBjYW4gY2FsbCB0aGlzIGFmdGVyIGZyZWVpbmcKKyAgbGFyZ2UgYmxvY2tzIG9mIG1lbW9yeSB0byBwb3RlbnRpYWxseSByZWR1Y2UgdGhlIHN5c3RlbS1sZXZlbCBtZW1vcnkKKyAgcmVxdWlyZW1lbnRzIG9mIGEgcHJvZ3JhbS4gSG93ZXZlciwgaXQgY2Fubm90IGd1YXJhbnRlZSB0byByZWR1Y2UKKyAgbWVtb3J5LiBVbmRlciBzb21lIGFsbG9jYXRpb24gcGF0dGVybnMsIHNvbWUgbGFyZ2UgZnJlZSBibG9ja3Mgb2YKKyAgbWVtb3J5IHdpbGwgYmUgbG9ja2VkIGJldHdlZW4gdHdvIHVzZWQgY2h1bmtzLCBzbyB0aGV5IGNhbm5vdCBiZQorICBnaXZlbiBiYWNrIHRvIHRoZSBzeXN0ZW0uCisKKyAgVGhlIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmltIHJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBmcmVlCisgIHRyYWlsaW5nIHNwYWNlIHRvIGxlYXZlIHVudHJpbW1lZC4gSWYgdGhpcyBhcmd1bWVudCBpcyB6ZXJvLCBvbmx5CisgIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBtZW1vcnkgdG8gbWFpbnRhaW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzCisgIHdpbGwgYmUgbGVmdC4gTm9uLXplcm8gYXJndW1lbnRzIGNhbiBiZSBzdXBwbGllZCB0byBtYWludGFpbiBlbm91Z2gKKyAgdHJhaWxpbmcgc3BhY2UgdG8gc2VydmljZSBmdXR1cmUgZXhwZWN0ZWQgYWxsb2NhdGlvbnMgd2l0aG91dCBoYXZpbmcKKyAgdG8gcmUtb2J0YWluIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uCisKKyAgTWFsbG9jX3RyaW0gcmV0dXJucyAxIGlmIGl0IGFjdHVhbGx5IHJlbGVhc2VkIGFueSBtZW1vcnksIGVsc2UgMC4KKyovCitpbnQgIGRsbWFsbG9jX3RyaW0oc2l6ZV90KTsKKworLyoKKyAgbWFsbG9jX3N0YXRzKCk7CisgIFByaW50cyBvbiBzdGRlcnIgdGhlIGFtb3VudCBvZiBzcGFjZSBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0gKGJvdGgKKyAgdmlhIHNicmsgYW5kIG1tYXApLCB0aGUgbWF4aW11bSBhbW91bnQgKHdoaWNoIG1heSBiZSBtb3JlIHRoYW4KKyAgY3VycmVudCBpZiBtYWxsb2NfdHJpbSBhbmQvb3IgbXVubWFwIGdvdCBjYWxsZWQpLCBhbmQgdGhlIGN1cnJlbnQKKyAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCB2aWEgbWFsbG9jIChvciByZWFsbG9jLCBldGMpIGJ1dCBub3QgeWV0CisgIGZyZWVkLiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCwgbm90IHRoZQorICBudW1iZXIgcmVxdWVzdGVkLiBJdCB3aWxsIGJlIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkCisgIGJlY2F1c2Ugb2YgYWxpZ25tZW50IGFuZCBib29ra2VlcGluZyBvdmVyaGVhZC4gQmVjYXVzZSBpdCBpbmNsdWRlcworICBhbGlnbm1lbnQgd2FzdGFnZSBhcyBiZWluZyBpbiB1c2UsIHRoaXMgZmlndXJlIG1heSBiZSBncmVhdGVyIHRoYW4KKyAgemVybyBldmVuIHdoZW4gbm8gdXNlci1sZXZlbCBjaHVua3MgYXJlIGFsbG9jYXRlZC4KKworICBUaGUgcmVwb3J0ZWQgY3VycmVudCBhbmQgbWF4aW11bSBzeXN0ZW0gbWVtb3J5IGNhbiBiZSBpbmFjY3VyYXRlIGlmCisgIGEgcHJvZ3JhbSBtYWtlcyBvdGhlciBjYWxscyB0byBzeXN0ZW0gbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zCisgIChub3JtYWxseSBzYnJrKSBvdXRzaWRlIG9mIG1hbGxvYy4KKworICBtYWxsb2Nfc3RhdHMgcHJpbnRzIG9ubHkgdGhlIG1vc3QgY29tbW9ubHkgaW50ZXJlc3Rpbmcgc3RhdGlzdGljcy4KKyAgTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyBtYWxsaW5mby4KKyovCit2b2lkICBkbG1hbGxvY19zdGF0cyh2b2lkKTsKKworI2VuZGlmIC8qIE9OTFlfTVNQQUNFUyAqLworCisvKgorICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCk7CisKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluCisgIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaAorICBvZnRlbiBub3QpIGR1ZSB0byBhbGlnbm1lbnQgYW5kIG1pbmltdW0gc2l6ZSBjb25zdHJhaW50cy4KKyAgWW91IGNhbiB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQKKyAgb3ZlcndyaXRpbmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdyZWF0CisgIHByb2dyYW1taW5nIHByYWN0aWNlLiBtYWxsb2NfdXNhYmxlX3NpemUgY2FuIGJlIG1vcmUgdXNlZnVsIGluCisgIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6CisKKyAgcCA9IG1hbGxvYyhuKTsKKyAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYpOworKi8KK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKik7CisKKworI2lmIE1TUEFDRVMKKworLyoKKyAgbXNwYWNlIGlzIGFuIG9wYXF1ZSB0eXBlIHJlcHJlc2VudGluZyBhbiBpbmRlcGVuZGVudAorICByZWdpb24gb2Ygc3BhY2UgdGhhdCBzdXBwb3J0cyBtc3BhY2VfbWFsbG9jLCBldGMuCisqLwordHlwZWRlZiB2b2lkKiBtc3BhY2U7CisKKy8qCisgIGNyZWF0ZV9tc3BhY2UgY3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBpbmRlcGVuZGVudCBzcGFjZSB3aXRoIHRoZQorICBnaXZlbiBpbml0aWFsIGNhcGFjaXR5LCBvciwgaWYgMCwgdGhlIGRlZmF1bHQgZ3JhbnVsYXJpdHkgc2l6ZS4gIEl0CisgIHJldHVybnMgbnVsbCBpZiB0aGVyZSBpcyBubyBzeXN0ZW0gbWVtb3J5IGF2YWlsYWJsZSB0byBjcmVhdGUgdGhlCisgIHNwYWNlLiAgSWYgYXJndW1lbnQgbG9ja2VkIGlzIG5vbi16ZXJvLCB0aGUgc3BhY2UgdXNlcyBhIHNlcGFyYXRlCisgIGxvY2sgdG8gY29udHJvbCBhY2Nlc3MuIFRoZSBjYXBhY2l0eSBvZiB0aGUgc3BhY2Ugd2lsbCBncm93CisgIGR5bmFtaWNhbGx5IGFzIG5lZWRlZCB0byBzZXJ2aWNlIG1zcGFjZV9tYWxsb2MgcmVxdWVzdHMuICBZb3UgY2FuCisgIGNvbnRyb2wgdGhlIHNpemVzIG9mIGluY3JlbWVudGFsIGluY3JlYXNlcyBvZiB0aGlzIHNwYWNlIGJ5CisgIGNvbXBpbGluZyB3aXRoIGEgZGlmZmVyZW50IERFRkFVTFRfR1JBTlVMQVJJVFkgb3IgZHluYW1pY2FsbHkKKyAgc2V0dGluZyB3aXRoIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgdmFsdWUpLgorKi8KK21zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIGRlc3Ryb3lfbXNwYWNlIGRlc3Ryb3lzIHRoZSBnaXZlbiBzcGFjZSwgYW5kIGF0dGVtcHRzIHRvIHJldHVybiBhbGwKKyAgb2YgaXRzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0sIHJldHVybmluZyB0aGUgdG90YWwgbnVtYmVyIG9mCisgIGJ5dGVzIGZyZWVkLiBBZnRlciBkZXN0cnVjdGlvbiwgdGhlIHJlc3VsdHMgb2YgYWNjZXNzIHRvIGFsbCBtZW1vcnkKKyAgdXNlZCBieSB0aGUgc3BhY2UgYmVjb21lIHVuZGVmaW5lZC4KKyovCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCk7CisKKy8qCisgIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlIHVzZXMgdGhlIG1lbW9yeSBzdXBwbGllZCBhcyB0aGUgaW5pdGlhbCBiYXNlCisgIG9mIGEgbmV3IG1zcGFjZS4gUGFydCAobGVzcyB0aGFuIDEyOCpzaXplb2Yoc2l6ZV90KSBieXRlcykgb2YgdGhpcworICBzcGFjZSBpcyB1c2VkIGZvciBib29ra2VlcGluZywgc28gdGhlIGNhcGFjaXR5IG11c3QgYmUgYXQgbGVhc3QgdGhpcworICBsYXJnZS4gKE90aGVyd2lzZSAwIGlzIHJldHVybmVkLikgV2hlbiB0aGlzIGluaXRpYWwgc3BhY2UgaXMKKyAgZXhoYXVzdGVkLCBhZGRpdGlvbmFsIG1lbW9yeSB3aWxsIGJlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4KKyAgRGVzdHJveWluZyB0aGlzIHNwYWNlIHdpbGwgZGVhbGxvY2F0ZSBhbGwgYWRkaXRpb25hbGx5IGFsbG9jYXRlZAorICBzcGFjZSAoaWYgcG9zc2libGUpIGJ1dCBub3QgdGhlIGluaXRpYWwgYmFzZS4KKyovCittc3BhY2UgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2Uodm9pZCogYmFzZSwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKTsKKworLyoKKyAgbXNwYWNlX21tYXBfbGFyZ2VfY2h1bmtzIGNvbnRyb2xzIHdoZXRoZXIgcmVxdWVzdHMgZm9yIGxhcmdlIGNodW5rcworICBhcmUgYWxsb2NhdGVkIGluIHRoZWlyIG93biBtbWFwcGVkIHJlZ2lvbnMsIHNlcGFyYXRlIGZyb20gb3RoZXJzIGluCisgIHRoaXMgbXNwYWNlLiBCeSBkZWZhdWx0IHRoaXMgaXMgZW5hYmxlZCwgd2hpY2ggcmVkdWNlcworICBmcmFnbWVudGF0aW9uLiBIb3dldmVyLCBzdWNoIGNodW5rcyBhcmUgbm90IG5lY2Vzc2FyaWx5IHJlbGVhc2VkIHRvCisgIHRoZSBzeXN0ZW0gdXBvbiBkZXN0cm95X21zcGFjZS4gIERpc2FibGluZyBieSBzZXR0aW5nIHRvIGZhbHNlIG1heQorICBpbmNyZWFzZSBmcmFnbWVudGF0aW9uLCBidXQgYXZvaWRzIGxlYWthZ2Ugd2hlbiByZWx5aW5nIG9uCisgIGRlc3Ryb3lfbXNwYWNlIHRvIHJlbGVhc2UgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgdXNpbmcgdGhpcyBzcGFjZS4KKyovCitpbnQgbXNwYWNlX21tYXBfbGFyZ2VfY2h1bmtzKG1zcGFjZSBtc3AsIGludCBlbmFibGUpOworCisKKy8qCisgIG1zcGFjZV9tYWxsb2MgYmVoYXZlcyBhcyBtYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IGJ5dGVzKTsKKworLyoKKyAgbXNwYWNlX2ZyZWUgYmVoYXZlcyBhcyBmcmVlLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKworICBJZiBjb21waWxlZCB3aXRoIEZPT1RFUlM9PTEsIG1zcGFjZV9mcmVlIGlzIG5vdCBhY3R1YWxseSBuZWVkZWQuCisgIGZyZWUgbWF5IGJlIGNhbGxlZCBpbnN0ZWFkIG9mIG1zcGFjZV9mcmVlIGJlY2F1c2UgZnJlZWQgY2h1bmtzIGZyb20KKyAgYW55IHNwYWNlIGFyZSBoYW5kbGVkIGJ5IHRoZWlyIG9yaWdpbmF0aW5nIHNwYWNlcy4KKyovCit2b2lkIG1zcGFjZV9mcmVlKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSk7CisKKy8qCisgIG1zcGFjZV9yZWFsbG9jIGJlaGF2ZXMgYXMgcmVhbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisKKyAgSWYgY29tcGlsZWQgd2l0aCBGT09URVJTPT0xLCBtc3BhY2VfcmVhbGxvYyBpcyBub3QgYWN0dWFsbHkKKyAgbmVlZGVkLiAgcmVhbGxvYyBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX3JlYWxsb2MgYmVjYXVzZQorICByZWFsbG9jZWQgY2h1bmtzIGZyb20gYW55IHNwYWNlIGFyZSBoYW5kbGVkIGJ5IHRoZWlyIG9yaWdpbmF0aW5nCisgIHNwYWNlcy4KKyovCit2b2lkKiBtc3BhY2VfcmVhbGxvYyhtc3BhY2UgbXNwLCB2b2lkKiBtZW0sIHNpemVfdCBuZXdzaXplKTsKKworLyoKKyAgbXNwYWNlX2NhbGxvYyBiZWhhdmVzIGFzIGNhbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSk7CisKKy8qCisgIG1zcGFjZV9tZW1hbGlnbiBiZWhhdmVzIGFzIG1lbWFsaWduLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfbWVtYWxpZ24obXNwYWNlIG1zcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKTsKKworLyoKKyAgbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyBiZWhhdmVzIGFzIGluZGVwZW5kZW50X2NhbGxvYywgYnV0CisgIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisJCQkJIHNpemVfdCBlbGVtX3NpemUsIHZvaWQqIGNodW5rc1tdKTsKKworLyoKKyAgbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY29tYWxsb2MsIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisJCQkJICAgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKTsKKworLyoKKyAgbXNwYWNlX2Zvb3RwcmludCgpIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZQorICBzeXN0ZW0gZm9yIHRoaXMgc3BhY2UuCisqLworc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCk7CisKKy8qCisgIG1zcGFjZV9tYXhfZm9vdHByaW50KCkgcmV0dXJucyB0aGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfbWF4X2Zvb3RwcmludChtc3BhY2UgbXNwKTsKKworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBtc3BhY2VfbWFsbGluZm8gYmVoYXZlcyBhcyBtYWxsaW5mbywgYnV0IHJlcG9ydHMgcHJvcGVydGllcyBvZgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLworc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKTsKKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCisvKgorICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCkgYmVoYXZlcyB0aGUgc2FtZSBhcyBtYWxsb2NfdXNhYmxlX3NpemU7CisqLworICBzaXplX3QgbXNwYWNlX3VzYWJsZV9zaXplKHZvaWQqIG1lbSk7CisKKy8qCisgIG1zcGFjZV9tYWxsb2Nfc3RhdHMgYmVoYXZlcyBhcyBtYWxsb2Nfc3RhdHMsIGJ1dCByZXBvcnRzCisgIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQgbXNwYWNlX21hbGxvY19zdGF0cyhtc3BhY2UgbXNwKTsKKworLyoKKyAgbXNwYWNlX3RyaW0gYmVoYXZlcyBhcyBtYWxsb2NfdHJpbSwgYnV0CisgIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCisqLworaW50IG1zcGFjZV90cmltKG1zcGFjZSBtc3AsIHNpemVfdCBwYWQpOworCisvKgorICBBbiBhbGlhcyBmb3IgbWFsbG9wdC4KKyovCitpbnQgbXNwYWNlX21hbGxvcHQoaW50LCBpbnQpOworCisjZW5kaWYgLyogTVNQQUNFUyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK307ICAvKiBlbmQgb2YgZXh0ZXJuICJDIiAqLworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBUbyBtYWtlIGEgZnVsbHkgY3VzdG9taXphYmxlIG1hbGxvYy5oIGhlYWRlciBmaWxlLCBjdXQgZXZlcnl0aGluZworICBhYm92ZSB0aGlzIGxpbmUsIHB1dCBpbnRvIGZpbGUgbWFsbG9jLmgsIGVkaXQgdG8gc3VpdCwgYW5kICNpbmNsdWRlIGl0CisgIG9uIHRoZSBuZXh0IGxpbmUsIGFzIHdlbGwgYXMgaW4gcHJvZ3JhbXMgdGhhdCB1c2UgdGhpcyBtYWxsb2MuCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworLyogI2luY2x1ZGUgIm1hbGxvYy5oIiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbnRlcm5hbCAjaW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgV0lOMzIKKyNpZm5kZWYgX19HTlVDX18KKyNwcmFnbWEgd2FybmluZyggZGlzYWJsZSA6IDQxNDYgKSAvKiBubyAidW5zaWduZWQiIHdhcm5pbmdzICovCisjZW5kaWYKKyNlbmRpZiAvKiBXSU4zMiAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4gICAgICAgLyogZm9yIHByaW50aW5nIGluIG1hbGxvY19zdGF0cyAqLworCisjaWZuZGVmIExBQ0tTX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPiAgICAgICAvKiBmb3IgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjZW5kaWYgLyogTEFDS1NfRVJSTk9fSCAqLworI2lmIEZPT1RFUlMKKyNpbmNsdWRlIDx0aW1lLmg+ICAgICAgICAvKiBmb3IgbWFnaWMgaW5pdGlhbGl6YXRpb24gKi8KKyNlbmRpZiAvKiBGT09URVJTICovCisjaWZuZGVmIExBQ0tTX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+ICAgICAgLyogZm9yIGFib3J0KCkgKi8KKyNlbmRpZiAvKiBMQUNLU19TVERMSUJfSCAqLworI2lmZGVmIERFQlVHCisjaWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUKKyNkZWZpbmUgYXNzZXJ0KHgpIGlmKCEoeCkpIEFCT1JUCisjZWxzZSAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisjZWxzZSAgLyogREVCVUcgKi8KKyNpZm5kZWYgYXNzZXJ0CisjZGVmaW5lIGFzc2VydCh4KQorI2VuZGlmCisjZGVmaW5lIERFQlVHIDAKKyNlbmRpZiAvKiBERUJVRyAqLworI2lmbmRlZiBMQUNLU19TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgIC8qIGZvciBtZW1zZXQgZXRjICovCisjZW5kaWYgIC8qIExBQ0tTX1NUUklOR19IICovCisjaWYgVVNFX0JVSUxUSU5fRkZTCisjaWZuZGVmIExBQ0tTX1NUUklOR1NfSAorI2luY2x1ZGUgPHN0cmluZ3MuaD4gICAgIC8qIGZvciBmZnMgKi8KKyNlbmRpZiAvKiBMQUNLU19TVFJJTkdTX0ggKi8KKyNlbmRpZiAvKiBVU0VfQlVJTFRJTl9GRlMgKi8KKyNpZiBIQVZFX01NQVAKKyNpZm5kZWYgTEFDS1NfU1lTX01NQU5fSAorI2luY2x1ZGUgPHN5cy9tbWFuLmg+ICAgIC8qIGZvciBtbWFwICovCisjZW5kaWYgLyogTEFDS1NfU1lTX01NQU5fSCAqLworI2lmbmRlZiBMQUNLU19GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZiAvKiBMQUNLU19GQ05UTF9IICovCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisjaWZuZGVmIExBQ0tTX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAvKiBmb3Igc2Jyaywgc3lzY29uZiAqLworI2Vsc2UgLyogTEFDS1NfVU5JU1REX0ggKi8KKyNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19PcGVuQlNEX18pICYmICFkZWZpbmVkKF9fTmV0QlNEX18pCitleHRlcm4gdm9pZCogICAgIHNicmsocHRyZGlmZl90KTsKKyNlbmRpZiAvKiBGcmVlQlNEIGV0YyAqLworI2VuZGlmIC8qIExBQ0tTX1VOSVNURF9IICovCisKKy8qIERlY2xhcmF0aW9ucyBmb3IgbG9ja2luZyAqLworI2lmIFVTRV9MT0NLUworI2lmbmRlZiBXSU4zMgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpZiBkZWZpbmVkIChfX1NWUjQpICYmIGRlZmluZWQgKF9fc3VuKSAgLyogc29sYXJpcyAqLworI2luY2x1ZGUgPHRocmVhZC5oPgorI2VuZGlmIC8qIHNvbGFyaXMgKi8KKyNlbHNlCisjaWZuZGVmIF9NX0FNRDY0CisvKiBUaGVzZSBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIEFNRDY0IGJ1aWxkcyAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworI2lmbmRlZiBfX01JTkdXMzJfXworTE9ORyBfX2NkZWNsIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZShMT05HIHZvbGF0aWxlICpEZXN0LCBMT05HIEV4Y2hhbmdlLCBMT05HIENvbXApOworTE9ORyBfX2NkZWNsIF9JbnRlcmxvY2tlZEV4Y2hhbmdlKExPTkcgdm9sYXRpbGUgKlRhcmdldCwgTE9ORyBWYWx1ZSk7CisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX01fQU1ENjQgKi8KKyNpZm5kZWYgX19NSU5HVzMyX18KKyNwcmFnbWEgaW50cmluc2ljIChfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UpCisjcHJhZ21hIGludHJpbnNpYyAoX0ludGVybG9ja2VkRXhjaGFuZ2UpCisjZWxzZQorICAvKiAtLVsgc3RhcnQgR0NDIGNvbXBhdGliaWxpdHkgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICogQ29tcGF0aWJpbGl0eSA8aW50cmluX3g4Ni5oPiBoZWFkZXIgZm9yIEdDQyAtLSBHQ0MgZXF1aXZhbGVudHMgb2YgaW50cmluc2ljCisgICAqIE1pY3Jvc29mdCBWaXN1YWwgQysrIGZ1bmN0aW9ucy4gT3JpZ2luYWxseSBkZXZlbG9wZWQgZm9yIHRoZSBSZWFjdE9TCisgICAqICg8aHR0cDovL3d3dy5yZWFjdG9zLm9yZy8+KSBhbmQgVGlueUtybmwgKDxodHRwOi8vd3d3LnRpbnlrcm5sLm9yZy8+KQorICAgKiBwcm9qZWN0cy4KKyAgICoKKyAgICogQ29weXJpZ2h0IChjKSAyMDA2IEtKSzo6SHlwZXJpb24gPGhhY2tidW5ueUByZWFjdG9zLmNvbT4KKyAgICoKKyAgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAgICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICAgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAgICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgICAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgICAqCisgICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgICAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICAgKgorICAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICAgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAgICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgICAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAgICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAgICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAqLworCisgIC8qKiogQXRvbWljIG9wZXJhdGlvbnMgKioqLworICAjaWYgKF9fR05VQ19fICogMTAwMDAgKyBfX0dOVUNfTUlOT1JfXyAqIDEwMCArIF9fR05VQ19QQVRDSExFVkVMX18pID4gNDAxMDAKKyAgICAjZGVmaW5lIF9SZWFkV3JpdGVCYXJyaWVyKCkgX19zeW5jX3N5bmNocm9uaXplKCkKKyAgI2Vsc2UKKyAgICBzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgbG9uZyBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQodm9sYXRpbGUgbG9uZyAqIGNvbnN0IFRhcmdldCwgY29uc3QgbG9uZyBWYWx1ZSkKKyAgICB7CisgICAgICBsb25nIHJlczsKKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hnJXowICUyLCAlMCIgOiAiPWciICgqKFRhcmdldCkpLCAiPXIiIChyZXMpIDogIjEiIChWYWx1ZSkpOworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX01lbW9yeUJhcnJpZXIodm9pZCkKKyAgICB7CisgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIiA6IDogOiAibWVtb3J5Iik7CisgICAgfQorICAgICNkZWZpbmUgX1JlYWRXcml0ZUJhcnJpZXIoKSBfTWVtb3J5QmFycmllcigpCisgICNlbmRpZgorICAvKiBCVUdCVUc6IEdDQyBvbmx5IHN1cHBvcnRzIGZ1bGwgYmFycmllcnMgKi8KKyAgc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGxvbmcgX0ludGVybG9ja2VkRXhjaGFuZ2Uodm9sYXRpbGUgbG9uZyAqIGNvbnN0IFRhcmdldCwgY29uc3QgbG9uZyBWYWx1ZSkKKyAgeworICAgIC8qIE5PVEU6IF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCB3b3VsZCBiZSBhbiBhY3F1aXJlIGJhcnJpZXIsIHNvIHdlIGZvcmNlIGEgZnVsbCBiYXJyaWVyICovCisgICAgX1JlYWRXcml0ZUJhcnJpZXIoKTsKKyAgICByZXR1cm4gX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KFRhcmdldCwgVmFsdWUpOworICB9CisgIC8qIC0tWyBlbmQgR0NDIGNvbXBhdGliaWxpdHkgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNlbmRpZgorI2RlZmluZSBpbnRlcmxvY2tlZGNvbXBhcmVleGNoYW5nZSBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UKKyNkZWZpbmUgaW50ZXJsb2NrZWRleGNoYW5nZSBfSW50ZXJsb2NrZWRFeGNoYW5nZQorI2VuZGlmIC8qIFdpbjMyICovCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKy8qIERlY2xhcmF0aW9ucyBmb3IgYml0IHNjYW5uaW5nIG9uIHdpbjMyICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMDAKKyNpZm5kZWYgQml0U2NhbkZvcndhcmQJLyogVHJ5IHRvIGF2b2lkIHB1bGxpbmcgaW4gV2luTlQuaCAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwordW5zaWduZWQgY2hhciBfQml0U2NhbkZvcndhcmQodW5zaWduZWQgbG9uZyAqaW5kZXgsIHVuc2lnbmVkIGxvbmcgbWFzayk7Cit1bnNpZ25lZCBjaGFyIF9CaXRTY2FuUmV2ZXJzZSh1bnNpZ25lZCBsb25nICppbmRleCwgdW5zaWduZWQgbG9uZyBtYXNrKTsKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNkZWZpbmUgQml0U2NhbkZvcndhcmQgX0JpdFNjYW5Gb3J3YXJkCisjZGVmaW5lIEJpdFNjYW5SZXZlcnNlIF9CaXRTY2FuUmV2ZXJzZQorI3ByYWdtYSBpbnRyaW5zaWMoX0JpdFNjYW5Gb3J3YXJkKQorI3ByYWdtYSBpbnRyaW5zaWMoX0JpdFNjYW5SZXZlcnNlKQorI2VuZGlmIC8qIEJpdFNjYW5Gb3J3YXJkICovCisjZW5kaWYgLyogZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMDAgKi8KKworI2lmbmRlZiBXSU4zMgorI2lmbmRlZiBtYWxsb2NfZ2V0cGFnZXNpemUKKyMgIGlmZGVmIF9TQ19QQUdFU0laRSAgICAgICAgIC8qIHNvbWUgU1ZSNCBzeXN0ZW1zIG9taXQgYW4gdW5kZXJzY29yZSAqLworIyAgICBpZm5kZWYgX1NDX1BBR0VfU0laRQorIyAgICAgIGRlZmluZSBfU0NfUEFHRV9TSVpFIF9TQ19QQUdFU0laRQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9TQ19QQUdFX1NJWkUKKyMgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpCisjICBlbHNlCisjICAgIGlmIGRlZmluZWQoQlNEKSB8fCBkZWZpbmVkKERHVVgpIHx8IGRlZmluZWQoSEFWRV9HRVRQQUdFU0laRSkKKyAgICAgICBleHRlcm4gc2l6ZV90IGdldHBhZ2VzaXplKCk7CisjICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBXSU4zMiAvKiB1c2Ugc3VwcGxpZWQgZW11bGF0aW9uIG9mIGdldHBhZ2VzaXplICovCisjICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkKKyMgICAgICBlbHNlCisjICAgICAgICBpZm5kZWYgTEFDS1NfU1lTX1BBUkFNX0gKKyMgICAgICAgICAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICAgICAgICBlbmRpZgorIyAgICAgICAgaWZkZWYgRVhFQ19QQUdFU0laRQorIyAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIEVYRUNfUEFHRVNJWkUKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgaWZkZWYgTkJQRworIyAgICAgICAgICAgIGlmbmRlZiBDTFNJWkUKKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgTkJQRworIyAgICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKE5CUEcgKiBDTFNJWkUpCisjICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgIGlmZGVmIE5CUEMKKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgTkJQQworIyAgICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICAgIGlmZGVmIFBBR0VTSVpFCisjICAgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgUEFHRVNJWkUKKyMgICAgICAgICAgICAgIGVsc2UgLyoganVzdCBndWVzcyAqLworIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplICgoc2l6ZV90KTQwOTZVKQorIyAgICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgICBlbmRpZgorIyAgICAgICAgICBlbmRpZgorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIHNpemVfdCBhbmQgYWxpZ25tZW50IHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhlIGJ5dGUgYW5kIGJpdCBzaXplIG9mIGEgc2l6ZV90ICovCisjZGVmaW5lIFNJWkVfVF9TSVpFICAgICAgICAgKHNpemVvZihzaXplX3QpKQorI2RlZmluZSBTSVpFX1RfQklUU0laRSAgICAgIChzaXplb2Yoc2l6ZV90KSA8PCAzKQorCisvKiBTb21lIGNvbnN0YW50cyBjb2VyY2VkIHRvIHNpemVfdCAqLworLyogQW5ub3lpbmcgYnV0IG5lY2Vzc2FyeSB0byBhdm9pZCBlcnJvcnMgb24gc29tZSBwbGF0Zm9ybXMgKi8KKyNkZWZpbmUgU0laRV9UX1pFUk8gICAgICAgICAoKHNpemVfdCkwKQorI2RlZmluZSBTSVpFX1RfT05FICAgICAgICAgICgoc2l6ZV90KTEpCisjZGVmaW5lIFNJWkVfVF9UV08gICAgICAgICAgKChzaXplX3QpMikKKyNkZWZpbmUgU0laRV9UX0ZPVVIgICAgICAgICAoKHNpemVfdCk0KQorI2RlZmluZSBUV09fU0laRV9UX1NJWkVTICAgIChTSVpFX1RfU0laRTw8MSkKKyNkZWZpbmUgRk9VUl9TSVpFX1RfU0laRVMgICAoU0laRV9UX1NJWkU8PDIpCisjZGVmaW5lIFNJWF9TSVpFX1RfU0laRVMgICAgKEZPVVJfU0laRV9UX1NJWkVTK1RXT19TSVpFX1RfU0laRVMpCisjZGVmaW5lIEhBTEZfTUFYX1NJWkVfVCAgICAgKE1BWF9TSVpFX1QgLyAyVSkKKworLyogVGhlIGJpdCBtYXNrIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gTUFMTE9DX0FMSUdOTUVOVCAqLworI2RlZmluZSBDSFVOS19BTElHTl9NQVNLICAgIChNQUxMT0NfQUxJR05NRU5UIC0gU0laRV9UX09ORSkKKworLyogVHJ1ZSBpZiBhZGRyZXNzIGEgaGFzIGFjY2VwdGFibGUgYWxpZ25tZW50ICovCisjZGVmaW5lIGlzX2FsaWduZWQoQSkgICAgICAgKCgoc2l6ZV90KSgoQSkpICYgKENIVU5LX0FMSUdOX01BU0spKSA9PSAwKQorCisvKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG9mZnNldCBhbiBhZGRyZXNzIHRvIGFsaWduIGl0ICovCisjZGVmaW5lIGFsaWduX29mZnNldChBKVwKKyAoKCgoc2l6ZV90KShBKSAmIENIVU5LX0FMSUdOX01BU0spID09IDApPyAwIDpcCisgICgoTUFMTE9DX0FMSUdOTUVOVCAtICgoc2l6ZV90KShBKSAmIENIVU5LX0FMSUdOX01BU0spKSAmIENIVU5LX0FMSUdOX01BU0spKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNTUFQIHByZWxpbWluYXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICAgSWYgSEFWRV9NT1JFQ09SRSBvciBIQVZFX01NQVAgYXJlIGZhbHNlLCB3ZSBqdXN0IGRlZmluZSBjYWxscyBhbmQKKyAgIGNoZWNrcyB0byBmYWlsIHNvIGNvbXBpbGVyIG9wdGltaXplciBjYW4gZGVsZXRlIGNvZGUgcmF0aGVyIHRoYW4KKyAgIHVzaW5nIHNvIG1hbnkgIiNpZiJzLgorKi8KKworCisvKiBNT1JFQ09SRSBhbmQgTU1BUCBtdXN0IHJldHVybiBNRkFJTCBvbiBmYWlsdXJlICovCisjZGVmaW5lIE1GQUlMICAgICAgICAgICAgICAgICgodm9pZCopKE1BWF9TSVpFX1QpKQorI2RlZmluZSBDTUZBSUwgICAgICAgICAgICAgICAoKGNoYXIqKShNRkFJTCkpIC8qIGRlZmluZWQgZm9yIGNvbnZlbmllbmNlICovCisKKyNpZiBIQVZFX01NQVAKKworI2lmbmRlZiBXSU4zMgorI2RlZmluZSBNVU5NQVBfREVGQVVMVChhLCBzKSAgbXVubWFwKChhKSwgKHMpKQorI2RlZmluZSBNTUFQX1BST1QgICAgICAgICAgICAoUFJPVF9SRUFEfFBST1RfV1JJVEUpCisjaWYgIWRlZmluZWQoTUFQX0FOT05ZTU9VUykgJiYgZGVmaW5lZChNQVBfQU5PTikKKyNkZWZpbmUgTUFQX0FOT05ZTU9VUyAgICAgICAgTUFQX0FOT04KKyNlbmRpZiAvKiBNQVBfQU5PTiAqLworI2lmZGVmIE1BUF9BTk9OWU1PVVMKKyNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMpCisjZGVmaW5lIE1NQVBfREVGQVVMVChzKSAgICAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCAtMSwgMCkKKyNlbHNlIC8qIE1BUF9BTk9OWU1PVVMgKi8KKy8qCisgICBOZWFybHkgYWxsIHZlcnNpb25zIG9mIG1tYXAgc3VwcG9ydCBNQVBfQU5PTllNT1VTLCBzbyB0aGUgZm9sbG93aW5nCisgICBpcyB1bmxpa2VseSB0byBiZSBuZWVkZWQsIGJ1dCBpcyBzdXBwbGllZCBqdXN0IGluIGNhc2UuCisqLworI2RlZmluZSBNTUFQX0ZMQUdTICAgICAgICAgICAoTUFQX1BSSVZBVEUpCitzdGF0aWMgaW50IGRldl96ZXJvX2ZkID0gLTE7IC8qIENhY2hlZCBmaWxlIGRlc2NyaXB0b3IgZm9yIC9kZXYvemVyby4gKi8KKyNkZWZpbmUgTU1BUF9ERUZBVUxUKHMpICgoZGV2X3plcm9fZmQgPCAwKSA/IFwKKwkgICAoZGV2X3plcm9fZmQgPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpLCBcCisJICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIGRldl96ZXJvX2ZkLCAwKSkgOiBcCisJICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIGRldl96ZXJvX2ZkLCAwKSkKKyNlbmRpZiAvKiBNQVBfQU5PTllNT1VTICovCisKKyNkZWZpbmUgRElSRUNUX01NQVBfREVGQVVMVChzKSBNTUFQX0RFRkFVTFQocykKKworI2Vsc2UgLyogV0lOMzIgKi8KKworLyogV2luMzIgTU1BUCB2aWEgVmlydHVhbEFsbG9jICovCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCogd2luMzJtbWFwKHNpemVfdCBzaXplKSB7CisgIHZvaWQqIHB0ciA9IFZpcnR1YWxBbGxvYygwLCBzaXplLCBNRU1fUkVTRVJWRXxNRU1fQ09NTUlULCBQQUdFX1JFQURXUklURSk7CisgIHJldHVybiAocHRyICE9IDApPyBwdHI6IE1GQUlMOworfQorCisvKiBGb3IgZGlyZWN0IE1NQVAsIHVzZSBNRU1fVE9QX0RPV04gdG8gbWluaW1pemUgaW50ZXJmZXJlbmNlICovCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCogd2luMzJkaXJlY3RfbW1hcChzaXplX3Qgc2l6ZSkgeworICB2b2lkKiBwdHIgPSBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkV8TUVNX0NPTU1JVHxNRU1fVE9QX0RPV04sCisJCQkgICBQQUdFX1JFQURXUklURSk7CisgIHJldHVybiAocHRyICE9IDApPyBwdHI6IE1GQUlMOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIHJlbGVhc2luZyBjb2FsZXNlZCBzZWdtZW50cyAqLworc3RhdGljIEZPUkNFSU5MSU5FIGludCB3aW4zMm11bm1hcCh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSB7CisgIE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiBtaW5mbzsKKyAgY2hhciogY3B0ciA9IChjaGFyKilwdHI7CisgIHdoaWxlIChzaXplKSB7CisgICAgaWYgKFZpcnR1YWxRdWVyeShjcHRyLCAmbWluZm8sIHNpemVvZihtaW5mbykpID09IDApCisgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG1pbmZvLkJhc2VBZGRyZXNzICE9IGNwdHIgfHwgbWluZm8uQWxsb2NhdGlvbkJhc2UgIT0gY3B0ciB8fAorCW1pbmZvLlN0YXRlICE9IE1FTV9DT01NSVQgfHwgbWluZm8uUmVnaW9uU2l6ZSA+IHNpemUpCisgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFZpcnR1YWxGcmVlKGNwdHIsIDAsIE1FTV9SRUxFQVNFKSA9PSAwKQorICAgICAgcmV0dXJuIC0xOworICAgIGNwdHIgKz0gbWluZm8uUmVnaW9uU2l6ZTsKKyAgICBzaXplIC09IG1pbmZvLlJlZ2lvblNpemU7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTU1BUF9ERUZBVUxUKHMpICAgICAgICAgICAgIHdpbjMybW1hcChzKQorI2RlZmluZSBNVU5NQVBfREVGQVVMVChhLCBzKSAgICAgICAgd2luMzJtdW5tYXAoKGEpLCAocykpCisjZGVmaW5lIERJUkVDVF9NTUFQX0RFRkFVTFQocykgICAgICB3aW4zMmRpcmVjdF9tbWFwKHMpCisjZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKworI2lmIEhBVkVfTVJFTUFQCisjaWZuZGVmIFdJTjMyCisjZGVmaW5lIE1SRU1BUF9ERUZBVUxUKGFkZHIsIG9zeiwgbnN6LCBtdikgbXJlbWFwKChhZGRyKSwgKG9zeiksIChuc3opLCAobXYpKQorI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogSEFWRV9NUkVNQVAgKi8KKworCisvKioKKyAqIERlZmluZSBDQUxMX01PUkVDT1JFCisgKi8KKyNpZiBIQVZFX01PUkVDT1JFCisgICAgI2lmZGVmIE1PUkVDT1JFCisJI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgIE1PUkVDT1JFKFMpCisgICAgI2Vsc2UgIC8qIE1PUkVDT1JFICovCisJI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgIE1PUkVDT1JFX0RFRkFVTFQoUykKKyAgICAjZW5kaWYgLyogTU9SRUNPUkUgKi8KKyNlbHNlICAvKiBIQVZFX01PUkVDT1JFICovCisgICAgI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgICAgICBNRkFJTAorI2VuZGlmIC8qIEhBVkVfTU9SRUNPUkUgKi8KKworLyoqCisgKiBEZWZpbmUgQ0FMTF9NTUFQL0NBTExfTVVOTUFQL0NBTExfRElSRUNUX01NQVAKKyAqLworI2lmIEhBVkVfTU1BUAorICAgICNkZWZpbmUgSVNfTU1BUFBFRF9CSVQgICAgICAgICAgKFNJWkVfVF9PTkUpCisgICAgI2RlZmluZSBVU0VfTU1BUF9CSVQgICAgICAgICAgICAoU0laRV9UX09ORSkKKworICAgICNpZmRlZiBNTUFQCisJI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgIE1NQVAocykKKyAgICAjZWxzZSAvKiBNTUFQICovCisJI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgIE1NQVBfREVGQVVMVChzKQorICAgICNlbmRpZiAvKiBNTUFQICovCisgICAgI2lmZGVmIE1VTk1BUAorCSNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICBNVU5NQVAoKGEpLCAocykpCisgICAgI2Vsc2UgLyogTVVOTUFQICovCisJI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgIE1VTk1BUF9ERUZBVUxUKChhKSwgKHMpKQorICAgICNlbmRpZiAvKiBNVU5NQVAgKi8KKyAgICAjaWZkZWYgRElSRUNUX01NQVAKKwkjZGVmaW5lIENBTExfRElSRUNUX01NQVAocykgRElSRUNUX01NQVAocykKKyAgICAjZWxzZSAvKiBESVJFQ1RfTU1BUCAqLworCSNkZWZpbmUgQ0FMTF9ESVJFQ1RfTU1BUChzKSBESVJFQ1RfTU1BUF9ERUZBVUxUKHMpCisgICAgI2VuZGlmIC8qIERJUkVDVF9NTUFQICovCisjZWxzZSAgLyogSEFWRV9NTUFQICovCisgICAgI2RlZmluZSBJU19NTUFQUEVEX0JJVCAgICAgICAgICAoU0laRV9UX1pFUk8pCisgICAgI2RlZmluZSBVU0VfTU1BUF9CSVQgICAgICAgICAgICAoU0laRV9UX1pFUk8pCisKKyAgICAjZGVmaW5lIE1NQVAocykgICAgICAgICAgICAgICAgIE1GQUlMCisgICAgI2RlZmluZSBNVU5NQVAoYSwgcykgICAgICAgICAgICAoLTEpCisgICAgI2RlZmluZSBESVJFQ1RfTU1BUChzKSAgICAgICAgICBNRkFJTAorICAgICNkZWZpbmUgQ0FMTF9ESVJFQ1RfTU1BUChzKSAgICAgRElSRUNUX01NQVAocykKKyAgICAjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgICAgIE1NQVAocykKKyAgICAjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgICAgIE1VTk1BUCgoYSksIChzKSkKKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKworLyoqCisgKiBEZWZpbmUgQ0FMTF9NUkVNQVAKKyAqLworI2lmIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUAorICAgICNpZmRlZiBNUkVNQVAKKwkjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgTVJFTUFQKChhZGRyKSwgKG9zeiksIChuc3opLCAobXYpKQorICAgICNlbHNlIC8qIE1SRU1BUCAqLworCSNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSBNUkVNQVBfREVGQVVMVCgoYWRkciksIChvc3opLCAobnN6KSwgKG12KSkKKyAgICAjZW5kaWYgLyogTVJFTUFQICovCisjZWxzZSAgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovCisgICAgI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpICAgICBNRkFJTAorI2VuZGlmIC8qIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUCAqLworCisvKiBtc3RhdGUgYml0IHNldCBpZiBjb250aW5ndW91cyBtb3JlY29yZSBkaXNhYmxlZCBvciBmYWlsZWQgKi8KKyNkZWZpbmUgVVNFX05PTkNPTlRJR1VPVVNfQklUICg0VSkKKworLyogc2VnbWVudCBiaXQgc2V0IGluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlICovCisjZGVmaW5lIEVYVEVSTl9CSVQgICAgICAgICAgICAoOFUpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvY2sgcHJlbGltaW5hcmllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgV2hlbiBsb2NrcyBhcmUgZGVmaW5lZCwgdGhlcmUgaXMgb25lIGdsb2JhbCBsb2NrLCBwbHVzCisgIG9uZSBwZXItbXNwYWNlIGxvY2suCisKKyAgVGhlIGdsb2JhbCBsb2NrX2Vuc3VyZXMgdGhhdCBtcGFyYW1zLm1hZ2ljIGFuZCBvdGhlciB1bmlxdWUKKyAgbXBhcmFtcyB2YWx1ZXMgYXJlIGluaXRpYWxpemVkIG9ubHkgb25jZS4gSXQgYWxzbyBwcm90ZWN0cworICBzZXF1ZW5jZXMgb2YgY2FsbHMgdG8gTU9SRUNPUkUuICBJbiBtYW55IGNhc2VzIHN5c19hbGxvYyByZXF1aXJlcworICB0d28gY2FsbHMsIHRoYXQgc2hvdWxkIG5vdCBiZSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIGJ5IG90aGVyCisgIHRocmVhZHMuICBUaGlzIGRvZXMgbm90IHByb3RlY3QgYWdhaW5zdCBkaXJlY3QgY2FsbHMgdG8gTU9SRUNPUkUKKyAgYnkgb3RoZXIgdGhyZWFkcyBub3QgdXNpbmcgdGhpcyBsb2NrLCBzbyB0aGVyZSBpcyBzdGlsbCBjb2RlIHRvCisgIGNvcGUgdGhlIGJlc3Qgd2UgY2FuIG9uIGludGVyZmVyZW5jZS4KKworICBQZXItbXNwYWNlIGxvY2tzIHN1cnJvdW5kIGNhbGxzIHRvIG1hbGxvYywgZnJlZSwgZXRjLiAgVG8gZW5hYmxlIHVzZQorICBpbiBsYXllcmVkIGV4dGVuc2lvbnMsIHBlci1tc3BhY2UgbG9ja3MgYXJlIHJlZW50cmFudC4KKworICBCZWNhdXNlIGxvY2stcHJvdGVjdGVkIHJlZ2lvbnMgZ2VuZXJhbGx5IGhhdmUgYm91bmRlZCB0aW1lcywgaXQgaXMKKyAgT0sgdG8gdXNlIHRoZSBzdXBwbGllZCBzaW1wbGUgc3BpbmxvY2tzIGluIHRoZSBjdXN0b20gdmVyc2lvbnMgZm9yCisgIHg4Ni4KKworICBJZiBVU0VfTE9DS1MgaXMgPiAxLCB0aGUgZGVmaW5pdGlvbnMgb2YgbG9jayByb3V0aW5lcyBoZXJlIGFyZQorICBieXBhc3NlZCwgaW4gd2hpY2ggY2FzZSB5b3Ugd2lsbCBuZWVkIHRvIGRlZmluZSBhdCBsZWFzdAorICBJTklUSUFMX0xPQ0ssIEFDUVVJUkVfTE9DSywgUkVMRUFTRV9MT0NLIGFuZCBwb3NzaWJseSBUUllfTE9DSworICAod2hpY2ggaXMgbm90IHVzZWQgaW4gdGhpcyBtYWxsb2MsIGJ1dCBjb21tb25seSBuZWVkZWQgaW4KKyAgZXh0ZW5zaW9ucy4pCisqLworCisjaWYgVVNFX0xPQ0tTID09IDEKKworI2lmIFVTRV9TUElOX0xPQ0tTCisjaWZuZGVmIFdJTjMyCisKKy8qIEN1c3RvbSBwdGhyZWFkLXN0eWxlIHNwaW4gbG9ja3Mgb24geDg2IGFuZCB4NjQgZm9yIGdjYyAqLworc3RydWN0IHB0aHJlYWRfbWxvY2tfdCB7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsOworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYzsKKyAgdm9sYXRpbGUgcHRocmVhZF90IHRocmVhZGlkOworfTsKKyNkZWZpbmUgTUxPQ0tfVCBzdHJ1Y3QgICAgICAgIHB0aHJlYWRfbWxvY2tfdAorI2RlZmluZSBDVVJSRU5UX1RIUkVBRCAgICAgICAgcHRocmVhZF9zZWxmKCkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKHNsKSAgICAgIChtZW1zZXQoc2wsIDAsIHNpemVvZihNTE9DS19UKSksIDApCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhzbCkgICAgICBwdGhyZWFkX2FjcXVpcmVfbG9jayhzbCkKKyNkZWZpbmUgUkVMRUFTRV9MT0NLKHNsKSAgICAgIHB0aHJlYWRfcmVsZWFzZV9sb2NrKHNsKQorI2RlZmluZSBUUllfTE9DSyhzbCkgICAgICAgICAgcHRocmVhZF90cnlfbG9jayhzbCkKKyNkZWZpbmUgU1BJTlNfUEVSX1lJRUxEICAgICAgIDYzCisKK3N0YXRpYyBNTE9DS19UIG1hbGxvY19nbG9iYWxfbXV0ZXggPSB7IDAsIDAsIDB9OworCitzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHB0aHJlYWRfYWNxdWlyZV9sb2NrIChNTE9DS19UICpzbCkgeworICBpbnQgc3BpbnMgPSAwOworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQqIGxwID0gJnNsLT5sOworICBmb3IgKDs7KSB7CisgICAgaWYgKCpscCAhPSAwKSB7CisgICAgICBpZiAoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKSB7CisJKytzbC0+YzsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBwbGFjZSBhcmdzIHRvIGNtcHhjaGdsIGluIGxvY2FscyB0byBldmFkZSBvZGRpdGllcyBpbiBzb21lIGdjY3MgKi8KKyAgICAgIGludCBjbXAgPSAwOworICAgICAgaW50IHZhbCA9IDE7CisgICAgICBpbnQgcmV0OworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gICgibG9jazsgY21weGNoZ2wgJTEsICUyIgorCQkJICAgICA6ICI9YSIgKHJldCkKKwkJCSAgICAgOiAiciIgKHZhbCksICJtIiAoKihscCkpLCAiMCIoY21wKQorCQkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKKyAgICAgIGlmICghcmV0KSB7CisJYXNzZXJ0KCFzbC0+dGhyZWFkaWQpOworCXNsLT5jID0gMTsKKwlzbC0+dGhyZWFkaWQgPSBDVVJSRU5UX1RIUkVBRDsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKyAgICAgIGlmICgoKytzcGlucyAmIFNQSU5TX1BFUl9ZSUVMRCkgPT0gMCkgeworI2lmIGRlZmluZWQgKF9fU1ZSNCkgJiYgZGVmaW5lZCAoX19zdW4pIC8qIHNvbGFyaXMgKi8KKwl0aHJfeWllbGQoKTsKKyNlbHNlCisjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQorCXNjaGVkX3lpZWxkKCk7CisjZWxzZSAgLyogbm8tb3AgeWllbGQgb24gdW5rbm93biBzeXN0ZW1zICovCisJOworI2VuZGlmIC8qIF9fbGludXhfXyB8fCBfX0ZyZWVCU0RfXyB8fCBfX0FQUExFX18gKi8KKyNlbmRpZiAvKiBzb2xhcmlzICovCisgICAgICB9CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBGT1JDRUlOTElORSB2b2lkIHB0aHJlYWRfcmVsZWFzZV9sb2NrIChNTE9DS19UICpzbCkgeworICBhc3NlcnQoc2wtPmwgIT0gMCk7CisgIGFzc2VydChzbC0+dGhyZWFkaWQgPT0gQ1VSUkVOVF9USFJFQUQpOworICBpZiAoLS1zbC0+YyA9PSAwKSB7CisgICAgc2wtPnRocmVhZGlkID0gMDsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQqIGxwID0gJnNsLT5sOworICAgIGludCBwcmV2ID0gMDsKKyAgICBpbnQgcmV0OworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgeGNoZ2wgJTAsICUxIgorCQkJICA6ICI9ciIgKHJldCkKKwkJCSAgOiAibSIgKCoobHApKSwgIjAiKHByZXYpCisJCQkgIDogIm1lbW9yeSIpOworICB9Cit9CisKK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgcHRocmVhZF90cnlfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50KiBscCA9ICZzbC0+bDsKKyAgaWYgKCpscCAhPSAwKSB7CisgICAgICBpZiAoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKSB7CisJKytzbC0+YzsKKwlyZXR1cm4gMTsKKyAgICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBpbnQgY21wID0gMDsKKyAgICBpbnQgdmFsID0gMTsKKyAgICBpbnQgcmV0OworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICAoImxvY2s7IGNtcHhjaGdsICUxLCAlMiIKKwkJCSAgIDogIj1hIiAocmV0KQorCQkJICAgOiAiciIgKHZhbCksICJtIiAoKihscCkpLCAiMCIoY21wKQorCQkJICAgOiAibWVtb3J5IiwgImNjIik7CisgICAgaWYgKCFyZXQpIHsKKyAgICAgIGFzc2VydCghc2wtPnRocmVhZGlkKTsKKyAgICAgIHNsLT5jID0gMTsKKyAgICAgIHNsLT50aHJlYWRpZCA9IENVUlJFTlRfVEhSRUFEOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisKKyNlbHNlIC8qIFdJTjMyICovCisvKiBDdXN0b20gd2luMzItc3R5bGUgc3BpbiBsb2NrcyBvbiB4ODYgYW5kIHg2NCBmb3IgTVNDICovCitzdHJ1Y3Qgd2luMzJfbWxvY2tfdAoreworICB2b2xhdGlsZSBsb25nIGw7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjOworICB2b2xhdGlsZSBsb25nIHRocmVhZGlkOworfTsKKworI2RlZmluZSBNTE9DS19UICAgICAgICAgICAgICAgc3RydWN0IHdpbjMyX21sb2NrX3QKKyNkZWZpbmUgQ1VSUkVOVF9USFJFQUQgICAgICAgIHdpbjMyX2dldGN1cnJlbnR0aHJlYWRpZCgpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhzbCkgICAgICAobWVtc2V0KHNsLCAwLCBzaXplb2YoTUxPQ0tfVCkpLCAwKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0soc2wpICAgICAgd2luMzJfYWNxdWlyZV9sb2NrKHNsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0soc2wpICAgICAgd2luMzJfcmVsZWFzZV9sb2NrKHNsKQorI2RlZmluZSBUUllfTE9DSyhzbCkgICAgICAgICAgd2luMzJfdHJ5X2xvY2soc2wpCisjZGVmaW5lIFNQSU5TX1BFUl9ZSUVMRCAgICAgICA2MworCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0geyAwLCAwLCAwfTsKKworc3RhdGljIEZPUkNFSU5MSU5FIGxvbmcgd2luMzJfZ2V0Y3VycmVudHRocmVhZGlkKCkgeworI2lmZGVmIF9NU0NfVkVSCisjaWYgZGVmaW5lZChfTV9JWDg2KQorICBsb25nICp0aHJlYWRzdHJ1Y3Q9KGxvbmcgKilfX3JlYWRmc2R3b3JkKDB4MTgpOworICBsb25nIHRocmVhZGlkPXRocmVhZHN0cnVjdFsweDI0L3NpemVvZihsb25nKV07CisgIHJldHVybiB0aHJlYWRpZDsKKyNlbGlmIGRlZmluZWQoX01fWDY0KQorICAvKiB0b2RvICovCisgIHJldHVybiBHZXRDdXJyZW50VGhyZWFkSWQoKTsKKyNlbHNlCisgIHJldHVybiBHZXRDdXJyZW50VGhyZWFkSWQoKTsKKyNlbmRpZgorI2Vsc2UKKyAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOworI2VuZGlmCit9CisKK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgd2luMzJfYWNxdWlyZV9sb2NrIChNTE9DS19UICpzbCkgeworICBpbnQgc3BpbnMgPSAwOworICBmb3IgKDs7KSB7CisgICAgaWYgKHNsLT5sICE9IDApIHsKKyAgICAgIGlmIChzbC0+dGhyZWFkaWQgPT0gQ1VSUkVOVF9USFJFQUQpIHsKKwkrK3NsLT5jOworCXJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmICghaW50ZXJsb2NrZWRleGNoYW5nZSgmc2wtPmwsIDEpKSB7CisJYXNzZXJ0KCFzbC0+dGhyZWFkaWQpOworCQlzbC0+Yz1DVVJSRU5UX1RIUkVBRDsKKwlzbC0+dGhyZWFkaWQgPSBDVVJSRU5UX1RIUkVBRDsKKwlzbC0+YyA9IDE7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGlmICgoKytzcGlucyAmIFNQSU5TX1BFUl9ZSUVMRCkgPT0gMCkKKyAgICAgIFNsZWVwRXgoMCwgRkFMU0UpOworICB9Cit9CisKK3N0YXRpYyBGT1JDRUlOTElORSB2b2lkIHdpbjMyX3JlbGVhc2VfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgYXNzZXJ0KHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCk7CisgIGFzc2VydChzbC0+bCAhPSAwKTsKKyAgaWYgKC0tc2wtPmMgPT0gMCkgeworICAgIHNsLT50aHJlYWRpZCA9IDA7CisgICAgaW50ZXJsb2NrZWRleGNoYW5nZSAoJnNsLT5sLCAwKTsKKyAgfQorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHdpbjMyX3RyeV9sb2NrIChNTE9DS19UICpzbCkgeworICBpZihzbC0+bCAhPSAwKSB7CisgICAgICBpZiAoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKSB7CisJKytzbC0+YzsKKwlyZXR1cm4gMTsKKyAgICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBpZiAoIWludGVybG9ja2VkZXhjaGFuZ2UoJnNsLT5sLCAxKSl7CisgICAgICBhc3NlcnQoIXNsLT50aHJlYWRpZCk7CisgICAgICBzbC0+dGhyZWFkaWQgPSBDVVJSRU5UX1RIUkVBRDsKKyAgICAgIHNsLT5jID0gMTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIFdJTjMyICovCisjZWxzZSAvKiBVU0VfU1BJTl9MT0NLUyAqLworCisjaWZuZGVmIFdJTjMyCisvKiBwdGhyZWFkcy1iYXNlZCBsb2NrcyAqLworCisjZGVmaW5lIE1MT0NLX1QgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QKKyNkZWZpbmUgQ1VSUkVOVF9USFJFQUQgICAgICAgIHB0aHJlYWRfc2VsZigpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhzbCkgICAgICBwdGhyZWFkX2luaXRfbG9jayhzbCkKKyNkZWZpbmUgQUNRVUlSRV9MT0NLKHNsKSAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhzbCkKKyNkZWZpbmUgUkVMRUFTRV9MT0NLKHNsKSAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHNsKQorI2RlZmluZSBUUllfTE9DSyhzbCkgICAgICAgICAgKCFwdGhyZWFkX211dGV4X3RyeWxvY2soc2wpKQorCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKworLyogQ29wZSB3aXRoIG9sZC1zdHlsZSBsaW51eCByZWN1cnNpdmUgbG9jayBpbml0aWFsaXphdGlvbiBieSBhZGRpbmcgKi8KKy8qIHNraXBwZWQgaW50ZXJuYWwgZGVjbGFyYXRpb24gZnJvbSBwdGhyZWFkLmggKi8KKyNpZmRlZiBsaW51eAorI2lmbmRlZiBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRQorZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRraW5kX25wIF9fUCAoKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwKKwkJCQkJICAgaW50IF9fa2luZCkpOworI2RlZmluZSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUAorI2RlZmluZSBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKHgseSkgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCh4LHkpCisjZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgaW50IHB0aHJlYWRfaW5pdF9sb2NrIChNTE9DS19UICpzbCkgeworICBwdGhyZWFkX211dGV4YXR0cl90IGF0dHI7CisgIGlmIChwdGhyZWFkX211dGV4YXR0cl9pbml0KCZhdHRyKSkgcmV0dXJuIDE7CisgIGlmIChwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZhdHRyLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSkpIHJldHVybiAxOworICBpZiAocHRocmVhZF9tdXRleF9pbml0KHNsLCAmYXR0cikpIHJldHVybiAxOworICBpZiAocHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmYXR0cikpIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworI2Vsc2UgLyogV0lOMzIgKi8KKy8qIFdpbjMyIGNyaXRpY2FsIHNlY3Rpb25zICovCisjZGVmaW5lIE1MT0NLX1QgICAgICAgICAgICAgICBDUklUSUNBTF9TRUNUSU9OCisjZGVmaW5lIENVUlJFTlRfVEhSRUFEICAgICAgICBHZXRDdXJyZW50VGhyZWFkSWQoKQorI2RlZmluZSBJTklUSUFMX0xPQ0socykgICAgICAgKCFJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uQW5kU3BpbkNvdW50KChzKSwgMHg4MDAwMDAwMHw0MDAwKSkKKyNkZWZpbmUgQUNRVUlSRV9MT0NLKHMpICAgICAgIChFbnRlckNyaXRpY2FsU2VjdGlvbihzKSwgMCkKKyNkZWZpbmUgUkVMRUFTRV9MT0NLKHMpICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKHMpCisjZGVmaW5lIFRSWV9MT0NLKHMpICAgICAgICAgICBUcnlFbnRlckNyaXRpY2FsU2VjdGlvbihzKQorI2RlZmluZSBORUVEX0dMT0JBTF9MT0NLX0lOSVQKKworc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleDsKK3N0YXRpYyB2b2xhdGlsZSBsb25nIG1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzOworCisvKiBVc2Ugc3BpbiBsb29wIHRvIGluaXRpYWxpemUgZ2xvYmFsIGxvY2sgKi8KK3N0YXRpYyB2b2lkIGluaXRfbWFsbG9jX2dsb2JhbF9tdXRleCgpIHsKKyAgZm9yICg7OykgeworICAgIGxvbmcgc3RhdCA9IG1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzOworICAgIGlmIChzdGF0ID4gMCkKKyAgICAgIHJldHVybjsKKyAgICAvKiB0cmFuc2l0aW9uIHRvIDwgMCB3aGlsZSBpbml0aWFsaXppbmcsIHRoZW4gdG8gPiAwKSAqLworICAgIGlmIChzdGF0ID09IDAgJiYKKwlpbnRlcmxvY2tlZGNvbXBhcmVleGNoYW5nZSgmbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXMsIC0xLCAwKSA9PSAwKSB7CisgICAgICBJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZtYWxsb2NfZ2xvYmFsX211dGV4KTsKKyAgICAgIGludGVybG9ja2VkZXhjaGFuZ2UoJm1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzLDEpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTbGVlcEV4KDAsIEZBTFNFKTsKKyAgfQorfQorCisjZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBVU0VfU1BJTl9MT0NLUyAqLworI2VuZGlmIC8qIFVTRV9MT0NLUyA9PSAxICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVc2VyLWRlZmluZWQgbG9ja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBVU0VfTE9DS1MgPiAxCisvKiBEZWZpbmUgeW91ciBvd24gbG9jayBpbXBsZW1lbnRhdGlvbiBoZXJlICovCisvKiAjZGVmaW5lIElOSVRJQUxfTE9DSyhzbCkgIC4uLiAqLworLyogI2RlZmluZSBBQ1FVSVJFX0xPQ0soc2wpICAuLi4gKi8KKy8qICNkZWZpbmUgUkVMRUFTRV9MT0NLKHNsKSAgLi4uICovCisvKiAjZGVmaW5lIFRSWV9MT0NLKHNsKSAuLi4gKi8KKy8qIHN0YXRpYyBNTE9DS19UIG1hbGxvY19nbG9iYWxfbXV0ZXggPSAuLi4gKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgPiAxICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBMb2NrLWJhc2VkIHN0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgVVNFX0xPQ0tTCisjZGVmaW5lIFVTRV9MT0NLX0JJVCAgICAgICAgICAgICAgICgyVSkKKyNlbHNlICAvKiBVU0VfTE9DS1MgKi8KKyNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBJTklUSUFMX0xPQ0sobCkKKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKworI2lmIFVTRV9MT0NLUworI2RlZmluZSBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpICBBQ1FVSVJFX0xPQ0soJm1hbGxvY19nbG9iYWxfbXV0ZXgpOworI2RlZmluZSBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpICBSRUxFQVNFX0xPQ0soJm1hbGxvY19nbG9iYWxfbXV0ZXgpOworI2Vsc2UgIC8qIFVTRV9MT0NLUyAqLworI2RlZmluZSBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpCisjZGVmaW5lIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCkKKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ2h1bmsgcmVwcmVzZW50YXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICAoVGhlIGZvbGxvd2luZyBpbmNsdWRlcyBsaWdodGx5IGVkaXRlZCBleHBsYW5hdGlvbnMgYnkgQ29saW4gUGx1bWIuKQorCisgIFRoZSBtYWxsb2NfY2h1bmsgZGVjbGFyYXRpb24gYmVsb3cgaXMgbWlzbGVhZGluZyAoYnV0IGFjY3VyYXRlIGFuZAorICBuZWNlc3NhcnkpLiAgSXQgZGVjbGFyZXMgYSAidmlldyIgaW50byBtZW1vcnkgYWxsb3dpbmcgYWNjZXNzIHRvCisgIG5lY2Vzc2FyeSBmaWVsZHMgYXQga25vd24gb2Zmc2V0cyBmcm9tIGEgZ2l2ZW4gYmFzZS4KKworICBDaHVua3Mgb2YgbWVtb3J5IGFyZSBtYWludGFpbmVkIHVzaW5nIGEgYGJvdW5kYXJ5IHRhZycgbWV0aG9kIGFzCisgIG9yaWdpbmFsbHkgZGVzY3JpYmVkIGJ5IEtudXRoLiAgKFNlZSB0aGUgcGFwZXIgYnkgUGF1bCBXaWxzb24KKyAgZnRwOi8vZnRwLmNzLnV0ZXhhcy5lZHUvcHViL2dhcmJhZ2UvYWxsb2NzcnYucHMgZm9yIGEgc3VydmV5IG9mIHN1Y2gKKyAgdGVjaG5pcXVlcy4pICBTaXplcyBvZiBmcmVlIGNodW5rcyBhcmUgc3RvcmVkIGJvdGggaW4gdGhlIGZyb250IG9mCisgIGVhY2ggY2h1bmsgYW5kIGF0IHRoZSBlbmQuICBUaGlzIG1ha2VzIGNvbnNvbGlkYXRpbmcgZnJhZ21lbnRlZAorICBjaHVua3MgaW50byBiaWdnZXIgY2h1bmtzIGZhc3QuICBUaGUgaGVhZCBmaWVsZHMgYWxzbyBob2xkIGJpdHMKKyAgcmVwcmVzZW50aW5nIHdoZXRoZXIgY2h1bmtzIGFyZSBmcmVlIG9yIGluIHVzZS4KKworICBIZXJlIGFyZSBzb21lIHBpY3R1cmVzIHRvIG1ha2UgaXQgY2xlYXJlci4gIFRoZXkgYXJlICJleHBsb2RlZCIgdG8KKyAgc2hvdyB0aGF0IHRoZSBzdGF0ZSBvZiBhIGNodW5rIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGV4dGVuZGluZyBmcm9tCisgIHRoZSBoaWdoIDMxIGJpdHMgb2YgdGhlIGhlYWQgZmllbGQgb2YgaXRzIGhlYWRlciB0aHJvdWdoIHRoZQorICBwcmV2X2Zvb3QgYW5kIFBJTlVTRV9CSVQgYml0IG9mIHRoZSBmb2xsb3dpbmcgY2h1bmsgaGVhZGVyLgorCisgIEEgY2h1bmsgdGhhdCdzIGluIHVzZSBsb29rcyBsaWtlOgorCisgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgfCBTaXplIG9mIHByZXZpb3VzIGNodW5rIChpZiBQID0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfFB8CisJIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxfCArLSsKKyAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisJIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisJIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisJICstICAgICAgc2l6ZSAtIHNpemVvZihzaXplX3QpIGF2YWlsYWJsZSBwYXlsb2FkIGJ5dGVzICAgICAgICAgIC0rCisJIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgY2h1bmstPiArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8MXwKKyAgICAgICB8IFNpemUgb2YgbmV4dCBjaHVuayAobWF5IG9yIG1heSBub3QgYmUgaW4gdXNlKSAgICAgICAgICAgICAgIHwgKy0rCisgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworICAgIEFuZCBpZiBpdCdzIGZyZWUsIGl0IGxvb2tzIGxpa2UgdGhpczoKKworICAgY2h1bmstPiArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworCSAgIHwgVXNlciBwYXlsb2FkIChtdXN0IGJlIGluIHVzZSwgb3Igd2Ugd291bGQgaGF2ZSBtZXJnZWQhKSAgICAgICB8CisJICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHxQfAorCSB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHwgKy0rCisgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSB8IE5leHQgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSB8IFByZXYgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorCSArLSAgICAgIHNpemUgLSBzaXplb2Yoc3RydWN0IGNodW5rKSB1bnVzZWQgYnl0ZXMgICAgICAgICAgICAgICAtKworCSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfDB8CisgICAgICAgfCBTaXplIG9mIG5leHQgY2h1bmsgKG11c3QgYmUgaW4gdXNlLCBvciB3ZSB3b3VsZCBoYXZlIG1lcmdlZCl8ICstKworIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICArLSBVc2VyIHBheWxvYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkJCQkJCQkJICAgICB8MHwKKwkJCQkJCQkJICAgICArLSsKKyAgTm90ZSB0aGF0IHNpbmNlIHdlIGFsd2F5cyBtZXJnZSBhZGphY2VudCBmcmVlIGNodW5rcywgdGhlIGNodW5rcworICBhZGphY2VudCB0byBhIGZyZWUgY2h1bmsgbXVzdCBiZSBpbiB1c2UuCisKKyAgR2l2ZW4gYSBwb2ludGVyIHRvIGEgY2h1bmsgKHdoaWNoIGNhbiBiZSBkZXJpdmVkIHRyaXZpYWxseSBmcm9tIHRoZQorICBwYXlsb2FkIHBvaW50ZXIpIHdlIGNhbiwgaW4gTygxKSB0aW1lLCBmaW5kIG91dCB3aGV0aGVyIHRoZSBhZGphY2VudAorICBjaHVua3MgYXJlIGZyZWUsIGFuZCBpZiBzbywgdW5saW5rIHRoZW0gZnJvbSB0aGUgbGlzdHMgdGhhdCB0aGV5CisgIGFyZSBvbiBhbmQgbWVyZ2UgdGhlbSB3aXRoIHRoZSBjdXJyZW50IGNodW5rLgorCisgIENodW5rcyBhbHdheXMgYmVnaW4gb24gZXZlbiB3b3JkIGJvdW5kYXJpZXMsIHNvIHRoZSBtZW0gcG9ydGlvbgorICAod2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIpIGlzIGFsc28gb24gYW4gZXZlbiB3b3JkIGJvdW5kYXJ5LCBhbmQKKyAgdGh1cyBhdCBsZWFzdCBkb3VibGUtd29yZCBhbGlnbmVkLgorCisgIFRoZSBQIChQSU5VU0VfQklUKSBiaXQsIHN0b3JlZCBpbiB0aGUgdW51c2VkIGxvdy1vcmRlciBiaXQgb2YgdGhlCisgIGNodW5rIHNpemUgKHdoaWNoIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIHR3byB3b3JkcyksIGlzIGFuIGluLXVzZQorICBiaXQgZm9yIHRoZSAqcHJldmlvdXMqIGNodW5rLiAgSWYgdGhhdCBiaXQgaXMgKmNsZWFyKiwgdGhlbiB0aGUKKyAgd29yZCBiZWZvcmUgdGhlIGN1cnJlbnQgY2h1bmsgc2l6ZSBjb250YWlucyB0aGUgcHJldmlvdXMgY2h1bmsKKyAgc2l6ZSwgYW5kIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIGZyb250IG9mIHRoZSBwcmV2aW91cyBjaHVuay4KKyAgVGhlIHZlcnkgZmlyc3QgY2h1bmsgYWxsb2NhdGVkIGFsd2F5cyBoYXMgdGhpcyBiaXQgc2V0LCBwcmV2ZW50aW5nCisgIGFjY2VzcyB0byBub24tZXhpc3RlbnQgKG9yIG5vbi1vd25lZCkgbWVtb3J5LiBJZiBwaW51c2UgaXMgc2V0IGZvcgorICBhbnkgZ2l2ZW4gY2h1bmssIHRoZW4geW91IENBTk5PVCBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlCisgIHByZXZpb3VzIGNodW5rLCBhbmQgbWlnaHQgZXZlbiBnZXQgYSBtZW1vcnkgYWRkcmVzc2luZyBmYXVsdCB3aGVuCisgIHRyeWluZyB0byBkbyBzby4KKworICBUaGUgQyAoQ0lOVVNFX0JJVCkgYml0LCBzdG9yZWQgaW4gdGhlIHVudXNlZCBzZWNvbmQtbG93ZXN0IGJpdCBvZgorICB0aGUgY2h1bmsgc2l6ZSByZWR1bmRhbnRseSByZWNvcmRzIHdoZXRoZXIgdGhlIGN1cnJlbnQgY2h1bmsgaXMKKyAgaW51c2UuIFRoaXMgcmVkdW5kYW5jeSBlbmFibGVzIHVzYWdlIGNoZWNrcyB3aXRoaW4gZnJlZSBhbmQgcmVhbGxvYywKKyAgYW5kIHJlZHVjZXMgaW5kaXJlY3Rpb24gd2hlbiBmcmVlaW5nIGFuZCBjb25zb2xpZGF0aW5nIGNodW5rcy4KKworICBFYWNoIGZyZXNobHkgYWxsb2NhdGVkIGNodW5rIG11c3QgaGF2ZSBib3RoIGNpbnVzZSBhbmQgcGludXNlIHNldC4KKyAgVGhhdCBpcywgZWFjaCBhbGxvY2F0ZWQgY2h1bmsgYm9yZGVycyBlaXRoZXIgYSBwcmV2aW91c2x5IGFsbG9jYXRlZAorICBhbmQgc3RpbGwgaW4tdXNlIGNodW5rLCBvciB0aGUgYmFzZSBvZiBpdHMgbWVtb3J5IGFyZW5hLiBUaGlzIGlzCisgIGVuc3VyZWQgYnkgbWFraW5nIGFsbCBhbGxvY2F0aW9ucyBmcm9tIHRoZSB0aGUgYGxvd2VzdCcgcGFydCBvZiBhbnkKKyAgZm91bmQgY2h1bmsuICBGdXJ0aGVyLCBubyBmcmVlIGNodW5rIHBoeXNpY2FsbHkgYm9yZGVycyBhbm90aGVyIG9uZSwKKyAgc28gZWFjaCBmcmVlIGNodW5rIGlzIGtub3duIHRvIGJlIHByZWNlZGVkIGFuZCBmb2xsb3dlZCBieSBlaXRoZXIKKyAgaW51c2UgY2h1bmtzIG9yIHRoZSBlbmRzIG9mIG1lbW9yeS4KKworICBOb3RlIHRoYXQgdGhlIGBmb290JyBvZiB0aGUgY3VycmVudCBjaHVuayBpcyBhY3R1YWxseSByZXByZXNlbnRlZAorICBhcyB0aGUgcHJldl9mb290IG9mIHRoZSBORVhUIGNodW5rLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0bworICBkZWFsIHdpdGggYWxpZ25tZW50cyBldGMgYnV0IGNhbiBiZSB2ZXJ5IGNvbmZ1c2luZyB3aGVuIHRyeWluZworICB0byBleHRlbmQgb3IgYWRhcHQgdGhpcyBjb2RlLgorCisgIFRoZSBleGNlcHRpb25zIHRvIGFsbCB0aGlzIGFyZQorCisgICAgIDEuIFRoZSBzcGVjaWFsIGNodW5rIGB0b3AnIGlzIHRoZSB0b3AtbW9zdCBhdmFpbGFibGUgY2h1bmsgKGkuZS4sCisJdGhlIG9uZSBib3JkZXJpbmcgdGhlIGVuZCBvZiBhdmFpbGFibGUgbWVtb3J5KS4gSXQgaXMgdHJlYXRlZAorCXNwZWNpYWxseS4gIFRvcCBpcyBuZXZlciBpbmNsdWRlZCBpbiBhbnkgYmluLCBpcyB1c2VkIG9ubHkgaWYKKwlubyBvdGhlciBjaHVuayBpcyBhdmFpbGFibGUsIGFuZCBpcyByZWxlYXNlZCBiYWNrIHRvIHRoZQorCXN5c3RlbSBpZiBpdCBpcyB2ZXJ5IGxhcmdlIChzZWUgTV9UUklNX1RIUkVTSE9MRCkuICBJbiBlZmZlY3QsCisJdGhlIHRvcCBjaHVuayBpcyB0cmVhdGVkIGFzIGxhcmdlciAoYW5kIHRodXMgbGVzcyB3ZWxsCisJZml0dGluZykgdGhhbiBhbnkgb3RoZXIgYXZhaWxhYmxlIGNodW5rLiAgVGhlIHRvcCBjaHVuaworCWRvZXNuJ3QgdXBkYXRlIGl0cyB0cmFpbGluZyBzaXplIGZpZWxkIHNpbmNlIHRoZXJlIGlzIG5vIG5leHQKKwljb250aWd1b3VzIGNodW5rIHRoYXQgd291bGQgaGF2ZSB0byBpbmRleCBvZmYgaXQuIEhvd2V2ZXIsCisJc3BhY2UgaXMgc3RpbGwgYWxsb2NhdGVkIGZvciBpdCAoVE9QX0ZPT1RfU0laRSkgdG8gZW5hYmxlCisJc2VwYXJhdGlvbiBvciBtZXJnaW5nIHdoZW4gc3BhY2UgaXMgZXh0ZW5kZWQuCisKKyAgICAgMy4gQ2h1bmtzIGFsbG9jYXRlZCB2aWEgbW1hcCwgd2hpY2ggaGF2ZSB0aGUgbG93ZXN0LW9yZGVyIGJpdAorCShJU19NTUFQUEVEX0JJVCkgc2V0IGluIHRoZWlyIHByZXZfZm9vdCBmaWVsZHMsIGFuZCBkbyBub3Qgc2V0CisJUElOVVNFX0JJVCBpbiB0aGVpciBoZWFkIGZpZWxkcy4gIEJlY2F1c2UgdGhleSBhcmUgYWxsb2NhdGVkCisJb25lLWJ5LW9uZSwgZWFjaCBtdXN0IGNhcnJ5IGl0cyBvd24gcHJldl9mb290IGZpZWxkLCB3aGljaCBpcworCWFsc28gdXNlZCB0byBob2xkIHRoZSBvZmZzZXQgdGhpcyBjaHVuayBoYXMgd2l0aGluIGl0cyBtbWFwcGVkCisJcmVnaW9uLCB3aGljaCBpcyBuZWVkZWQgdG8gcHJlc2VydmUgYWxpZ25tZW50LiBFYWNoIG1tYXBwZWQKKwljaHVuayBpcyB0cmFpbGVkIGJ5IHRoZSBmaXJzdCB0d28gZmllbGRzIG9mIGEgZmFrZSBuZXh0LWNodW5rCisJZm9yIHNha2Ugb2YgdXNhZ2UgY2hlY2tzLgorCisqLworCitzdHJ1Y3QgbWFsbG9jX2NodW5rIHsKKyAgc2l6ZV90ICAgICAgICAgICAgICAgcHJldl9mb290OyAgLyogU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgZnJlZSkuICAqLworICBzaXplX3QgICAgICAgICAgICAgICBoZWFkOyAgICAgICAvKiBTaXplIGFuZCBpbnVzZSBiaXRzLiAqLworICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBmZDsgICAgICAgICAvKiBkb3VibGUgbGlua3MgLS0gdXNlZCBvbmx5IGlmIGZyZWUuICovCisgIHN0cnVjdCBtYWxsb2NfY2h1bmsqIGJrOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rICBtY2h1bms7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIG1jaHVua3B0cjsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogc2JpbnB0cjsgIC8qIFRoZSB0eXBlIG9mIGJpbnMgb2YgY2h1bmtzICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5kZXhfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGJpbm1hcF90OyAgICAgICAgIC8qIERlc2NyaWJlZCBiZWxvdyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxhZ190OyAgICAgICAgICAgLyogVGhlIHR5cGUgb2YgdmFyaW91cyBiaXQgZmxhZyBzZXRzICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gQ2h1bmtzIHNpemVzIGFuZCBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTUNIVU5LX1NJWkUgICAgICAgICAoc2l6ZW9mKG1jaHVuaykpCisKKyNpZiBGT09URVJTCisjZGVmaW5lIENIVU5LX09WRVJIRUFEICAgICAgKFRXT19TSVpFX1RfU0laRVMpCisjZWxzZSAvKiBGT09URVJTICovCisjZGVmaW5lIENIVU5LX09WRVJIRUFEICAgICAgKFNJWkVfVF9TSVpFKQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKworLyogTU1hcHBlZCBjaHVua3MgbmVlZCBhIHNlY29uZCB3b3JkIG9mIG92ZXJoZWFkIC4uLiAqLworI2RlZmluZSBNTUFQX0NIVU5LX09WRVJIRUFEIChUV09fU0laRV9UX1NJWkVTKQorLyogLi4uIGFuZCBhZGRpdGlvbmFsIHBhZGRpbmcgZm9yIGZha2UgbmV4dC1jaHVuayBhdCBmb290ICovCisjZGVmaW5lIE1NQVBfRk9PVF9QQUQgICAgICAgKEZPVVJfU0laRV9UX1NJWkVTKQorCisvKiBUaGUgc21hbGxlc3Qgc2l6ZSB3ZSBjYW4gbWFsbG9jIGlzIGFuIGFsaWduZWQgbWluaW1hbCBjaHVuayAqLworI2RlZmluZSBNSU5fQ0hVTktfU0laRVwKKyAgKChNQ0hVTktfU0laRSArIENIVU5LX0FMSUdOX01BU0spICYgfkNIVU5LX0FMSUdOX01BU0spCisKKy8qIGNvbnZlcnNpb24gZnJvbSBtYWxsb2MgaGVhZGVycyB0byB1c2VyIHBvaW50ZXJzLCBhbmQgYmFjayAqLworI2RlZmluZSBjaHVuazJtZW0ocCkgICAgICAgICgodm9pZCopKChjaGFyKikocCkgICAgICAgKyBUV09fU0laRV9UX1NJWkVTKSkKKyNkZWZpbmUgbWVtMmNodW5rKG1lbSkgICAgICAoKG1jaHVua3B0cikoKGNoYXIqKShtZW0pIC0gVFdPX1NJWkVfVF9TSVpFUykpCisvKiBjaHVuayBhc3NvY2lhdGVkIHdpdGggYWxpZ25lZCBhZGRyZXNzIEEgKi8KKyNkZWZpbmUgYWxpZ25fYXNfY2h1bmsoQSkgICAobWNodW5rcHRyKSgoQSkgKyBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKEEpKSkKKworLyogQm91bmRzIG9uIHJlcXVlc3QgKG5vdCBjaHVuaykgc2l6ZXMuICovCisjZGVmaW5lIE1BWF9SRVFVRVNUICAgICAgICAgKCgtTUlOX0NIVU5LX1NJWkUpIDw8IDIpCisjZGVmaW5lIE1JTl9SRVFVRVNUICAgICAgICAgKE1JTl9DSFVOS19TSVpFIC0gQ0hVTktfT1ZFUkhFQUQgLSBTSVpFX1RfT05FKQorCisvKiBwYWQgcmVxdWVzdCBieXRlcyBpbnRvIGEgdXNhYmxlIHNpemUgKi8KKyNkZWZpbmUgcGFkX3JlcXVlc3QocmVxKSBcCisgICAoKChyZXEpICsgQ0hVTktfT1ZFUkhFQUQgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQorCisvKiBwYWQgcmVxdWVzdCwgY2hlY2tpbmcgZm9yIG1pbmltdW0gKGJ1dCBub3QgbWF4aW11bSkgKi8KKyNkZWZpbmUgcmVxdWVzdDJzaXplKHJlcSkgXAorICAoKChyZXEpIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KHJlcSkpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gaGVhZCBhbmQgZm9vdCBmaWVsZHMgLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgVGhlIGhlYWQgZmllbGQgb2YgYSBjaHVuayBpcyBvcidlZCB3aXRoIFBJTlVTRV9CSVQgd2hlbiBwcmV2aW91cworICBhZGphY2VudCBjaHVuayBpbiB1c2UsIGFuZCBvcidlZCB3aXRoIENJTlVTRV9CSVQgaWYgdGhpcyBjaHVuayBpcyBpbgorICB1c2UuIElmIHRoZSBjaHVuayB3YXMgb2J0YWluZWQgd2l0aCBtbWFwLCB0aGUgcHJldl9mb290IGZpZWxkIGhhcworICBJU19NTUFQUEVEX0JJVCBzZXQsIG90aGVyd2lzZSBob2xkaW5nIHRoZSBvZmZzZXQgb2YgdGhlIGJhc2Ugb2YgdGhlCisgIG1tYXBwZWQgcmVnaW9uIHRvIHRoZSBiYXNlIG9mIHRoZSBjaHVuay4KKworICBGTEFHNF9CSVQgaXMgbm90IHVzZWQgYnkgdGhpcyBtYWxsb2MsIGJ1dCBtaWdodCBiZSB1c2VmdWwgaW4gZXh0ZW5zaW9ucy4KKyovCisKKyNkZWZpbmUgUElOVVNFX0JJVCAgICAgICAgICAoU0laRV9UX09ORSkKKyNkZWZpbmUgQ0lOVVNFX0JJVCAgICAgICAgICAoU0laRV9UX1RXTykKKyNkZWZpbmUgRkxBRzRfQklUICAgICAgICAgICAoU0laRV9UX0ZPVVIpCisjZGVmaW5lIElOVVNFX0JJVFMgICAgICAgICAgKFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkKKyNkZWZpbmUgRkxBR19CSVRTICAgICAgICAgICAoUElOVVNFX0JJVHxDSU5VU0VfQklUfEZMQUc0X0JJVCkKKworLyogSGVhZCB2YWx1ZSBmb3IgZmVuY2Vwb3N0cyAqLworI2RlZmluZSBGRU5DRVBPU1RfSEVBRCAgICAgIChJTlVTRV9CSVRTfFNJWkVfVF9TSVpFKQorCisvKiBleHRyYWN0aW9uIG9mIGZpZWxkcyBmcm9tIGhlYWQgd29yZHMgKi8KKyNkZWZpbmUgY2ludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgQ0lOVVNFX0JJVCkKKyNkZWZpbmUgcGludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgUElOVVNFX0JJVCkKKyNkZWZpbmUgY2h1bmtzaXplKHApICAgICAgICAoKHApLT5oZWFkICYgfihGTEFHX0JJVFMpKQorCisjZGVmaW5lIGNsZWFyX3BpbnVzZShwKSAgICAgKChwKS0+aGVhZCAmPSB+UElOVVNFX0JJVCkKKyNkZWZpbmUgY2xlYXJfY2ludXNlKHApICAgICAoKHApLT5oZWFkICY9IH5DSU5VU0VfQklUKQorCisvKiBUcmVhdCBzcGFjZSBhdCBwdHIgKy8tIG9mZnNldCBhcyBhIGNodW5rICovCisjZGVmaW5lIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHMpICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSkKKyNkZWZpbmUgY2h1bmtfbWludXNfb2Zmc2V0KHAsIHMpICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgLSAocykpKQorCisvKiBQdHIgdG8gbmV4dCBvciBwcmV2aW91cyBwaHlzaWNhbCBtYWxsb2NfY2h1bmsuICovCisjZGVmaW5lIG5leHRfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgKyAoKHApLT5oZWFkICYgfkZMQUdfQklUUykpKQorI2RlZmluZSBwcmV2X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpIC0gKChwKS0+cHJldl9mb290KSApKQorCisvKiBleHRyYWN0IG5leHQgY2h1bmsncyBwaW51c2UgYml0ICovCisjZGVmaW5lIG5leHRfcGludXNlKHApICAoKG5leHRfY2h1bmsocCktPmhlYWQpICYgUElOVVNFX0JJVCkKKworLyogR2V0L3NldCBzaXplIGF0IGZvb3RlciAqLworI2RlZmluZSBnZXRfZm9vdChwLCBzKSAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCkKKyNkZWZpbmUgc2V0X2Zvb3QocCwgcykgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QgPSAocykpCisKKy8qIFNldCBzaXplLCBwaW51c2UgYml0LCBhbmQgZm9vdCAqLworI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUKSwgc2V0X2Zvb3QocCwgcykpCisKKy8qIFNldCBzaXplLCBwaW51c2UgYml0LCBmb290LCBhbmQgY2xlYXIgbmV4dCBwaW51c2UgKi8KKyNkZWZpbmUgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcywgbilcCisgIChjbGVhcl9waW51c2UobiksIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBzKSkKKworI2RlZmluZSBpc19tbWFwcGVkKHApXAorICAoISgocCktPmhlYWQgJiBQSU5VU0VfQklUKSAmJiAoKHApLT5wcmV2X2Zvb3QgJiBJU19NTUFQUEVEX0JJVCkpCisKKy8qIEdldCB0aGUgaW50ZXJuYWwgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIGNodW5rIHAgKi8KKyNkZWZpbmUgb3ZlcmhlYWRfZm9yKHApXAorIChpc19tbWFwcGVkKHApPyBNTUFQX0NIVU5LX09WRVJIRUFEIDogQ0hVTktfT1ZFUkhFQUQpCisKKy8qIFJldHVybiB0cnVlIGlmIG1hbGxvY2VkIHNwYWNlIGlzIG5vdCBuZWNlc3NhcmlseSBjbGVhcmVkICovCisjaWYgTU1BUF9DTEVBUlMKKyNkZWZpbmUgY2FsbG9jX211c3RfY2xlYXIocCkgKCFpc19tbWFwcGVkKHApKQorI2Vsc2UgLyogTU1BUF9DTEVBUlMgKi8KKyNkZWZpbmUgY2FsbG9jX211c3RfY2xlYXIocCkgKDEpCisjZW5kaWYgLyogTU1BUF9DTEVBUlMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPdmVybGFpZCBkYXRhIHN0cnVjdHVyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgV2hlbiBjaHVua3MgYXJlIG5vdCBpbiB1c2UsIHRoZXkgYXJlIHRyZWF0ZWQgYXMgbm9kZXMgb2YgZWl0aGVyCisgIGxpc3RzIG9yIHRyZWVzLgorCisgICJTbWFsbCIgIGNodW5rcyBhcmUgc3RvcmVkIGluIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdHMsIGFuZCBsb29rCisgIGxpa2UgdGhpczoKKworICAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CisgICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIGluIGxpc3QgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAobWF5IGJlIDAgYnl0ZXMgbG9uZykgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgTGFyZ2VyIGNodW5rcyBhcmUga2VwdCBpbiBhIGZvcm0gb2YgYml0d2lzZSBkaWdpdGFsIHRyZWVzIChha2EKKyAgdHJpZXMpIGtleWVkIG9uIGNodW5rc2l6ZXMuICBCZWNhdXNlIG1hbGxvY190cmVlX2NodW5rcyBhcmUgb25seSBmb3IKKyAgZnJlZSBjaHVua3MgZ3JlYXRlciB0aGFuIDI1NiBieXRlcywgdGhlaXIgc2l6ZSBkb2Vzbid0IGltcG9zZSBhbnkKKyAgY29uc3RyYWludHMgb24gdXNlciBjaHVuayBzaXplcy4gIEVhY2ggbm9kZSBsb29rcyBsaWtlOgorCisgICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBoZWFkOicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICB8UHwKKyAgICAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgQmFjayBwb2ludGVyIHRvIHByZXZpb3VzIGNodW5rIG9mIHNhbWUgc2l6ZSAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byBsZWZ0IGNoaWxkIChjaGlsZFswXSkgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byByaWdodCBjaGlsZCAoY2hpbGRbMV0pICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byBwYXJlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgYmluIGluZGV4IG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCisJICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CituZXh0Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworICBFYWNoIHRyZWUgaG9sZGluZyB0cmVlbm9kZXMgaXMgYSB0cmVlIG9mIHVuaXF1ZSBjaHVuayBzaXplcy4gIENodW5rcworICBvZiB0aGUgc2FtZSBzaXplIGFyZSBhcnJhbmdlZCBpbiBhIGNpcmN1bGFybHktbGlua2VkIGxpc3QsIHdpdGggb25seQorICB0aGUgb2xkZXN0IGNodW5rICh0aGUgbmV4dCB0byBiZSB1c2VkLCBpbiBvdXIgRklGTyBvcmRlcmluZykKKyAgYWN0dWFsbHkgaW4gdGhlIHRyZWUuICAoVHJlZSBtZW1iZXJzIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IGEgbm9uLW51bGwKKyAgcGFyZW50IHBvaW50ZXIuKSAgSWYgYSBjaHVuayB3aXRoIHRoZSBzYW1lIHNpemUgYW4gYW4gZXhpc3Rpbmcgbm9kZQorICBpcyBpbnNlcnRlZCwgaXQgaXMgbGlua2VkIG9mZiB0aGUgZXhpc3Rpbmcgbm9kZSB1c2luZyBwb2ludGVycyB0aGF0CisgIHdvcmsgaW4gdGhlIHNhbWUgd2F5IGFzIGZkL2JrIHBvaW50ZXJzIG9mIHNtYWxsIGNodW5rcy4KKworICBFYWNoIHRyZWUgY29udGFpbnMgYSBwb3dlciBvZiAyIHNpemVkIHJhbmdlIG9mIGNodW5rIHNpemVzICh0aGUKKyAgc21hbGxlc3QgaXMgMHgxMDAgPD0geCA8IDB4MTgwKSwgd2hpY2ggaXMgaXMgZGl2aWRlZCBpbiBoYWxmIGF0IGVhY2gKKyAgdHJlZSBsZXZlbCwgd2l0aCB0aGUgY2h1bmtzIGluIHRoZSBzbWFsbGVyIGhhbGYgb2YgdGhlIHJhbmdlICgweDEwMAorICA8PSB4IDwgMHgxNDAgZm9yIHRoZSB0b3Agbm9zZSkgaW4gdGhlIGxlZnQgc3VidHJlZSBhbmQgdGhlIGxhcmdlcgorICBoYWxmICgweDE0MCA8PSB4IDwgMHgxODApIGluIHRoZSByaWdodCBzdWJ0cmVlLiAgVGhpcyBpcywgb2YgY291cnNlLAorICBkb25lIGJ5IGluc3BlY3RpbmcgaW5kaXZpZHVhbCBiaXRzLgorCisgIFVzaW5nIHRoZXNlIHJ1bGVzLCBlYWNoIG5vZGUncyBsZWZ0IHN1YnRyZWUgY29udGFpbnMgYWxsIHNtYWxsZXIKKyAgc2l6ZXMgdGhhbiBpdHMgcmlnaHQgc3VidHJlZS4gIEhvd2V2ZXIsIHRoZSBub2RlIGF0IHRoZSByb290IG9mIGVhY2gKKyAgc3VidHJlZSBoYXMgbm8gcGFydGljdWxhciBvcmRlcmluZyByZWxhdGlvbnNoaXAgdG8gZWl0aGVyLiAgKFRoZQorICBkaXZpZGluZyBsaW5lIGJldHdlZW4gdGhlIHN1YnRyZWUgc2l6ZXMgaXMgYmFzZWQgb24gdHJpZSByZWxhdGlvbi4pCisgIElmIHdlIHJlbW92ZSB0aGUgbGFzdCBjaHVuayBvZiBhIGdpdmVuIHNpemUgZnJvbSB0aGUgaW50ZXJpb3Igb2YgdGhlCisgIHRyZWUsIHdlIG5lZWQgdG8gcmVwbGFjZSBpdCB3aXRoIGEgbGVhZiBub2RlLiAgVGhlIHRyZWUgb3JkZXJpbmcKKyAgcnVsZXMgcGVybWl0IGEgbm9kZSB0byBiZSByZXBsYWNlZCBieSBhbnkgbGVhZiBiZWxvdyBpdC4KKworICBUaGUgc21hbGxlc3QgY2h1bmsgaW4gYSB0cmVlIChhIGNvbW1vbiBvcGVyYXRpb24gaW4gYSBiZXN0LWZpdAorICBhbGxvY2F0b3IpIGNhbiBiZSBmb3VuZCBieSB3YWxraW5nIGEgcGF0aCB0byB0aGUgbGVmdG1vc3QgbGVhZiBpbgorICB0aGUgdHJlZS4gIFVubGlrZSBhIHVzdWFsIGJpbmFyeSB0cmVlLCB3aGVyZSB3ZSBmb2xsb3cgbGVmdCBjaGlsZAorICBwb2ludGVycyB1bnRpbCB3ZSByZWFjaCBhIG51bGwsIGhlcmUgd2UgZm9sbG93IHRoZSByaWdodCBjaGlsZAorICBwb2ludGVyIGFueSB0aW1lIHRoZSBsZWZ0IG9uZSBpcyBudWxsLCB1bnRpbCB3ZSByZWFjaCBhIGxlYWYgd2l0aAorICBib3RoIGNoaWxkIHBvaW50ZXJzIG51bGwuIFRoZSBzbWFsbGVzdCBjaHVuayBpbiB0aGUgdHJlZSB3aWxsIGJlCisgIHNvbWV3aGVyZSBhbG9uZyB0aGF0IHBhdGguCisKKyAgVGhlIHdvcnN0IGNhc2UgbnVtYmVyIG9mIHN0ZXBzIHRvIGFkZCwgZmluZCwgb3IgcmVtb3ZlIGEgbm9kZSBpcworICBib3VuZGVkIGJ5IHRoZSBudW1iZXIgb2YgYml0cyBkaWZmZXJlbnRpYXRpbmcgY2h1bmtzIHdpdGhpbgorICBiaW5zLiBVbmRlciBjdXJyZW50IGJpbiBjYWxjdWxhdGlvbnMsIHRoaXMgcmFuZ2VzIGZyb20gNiB1cCB0byAyMQorICAoZm9yIDMyIGJpdCBzaXplcykgb3IgdXAgdG8gNTMgKGZvciA2NCBiaXQgc2l6ZXMpLiBUaGUgdHlwaWNhbCBjYXNlCisgIGlzIG9mIGNvdXJzZSBtdWNoIGJldHRlci4KKyovCisKK3N0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayB7CisgIC8qIFRoZSBmaXJzdCBmb3VyIGZpZWxkcyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCBtYWxsb2NfY2h1bmsgKi8KKyAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBwcmV2X2Zvb3Q7CisgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgaGVhZDsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBmZDsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBiazsKKworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGNoaWxkWzJdOworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHBhcmVudDsKKyAgYmluZGV4X3QgICAgICAgICAgICAgICAgICBpbmRleDsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rICB0Y2h1bms7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogdGNodW5rcHRyOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHRiaW5wdHI7IC8qIFRoZSB0eXBlIG9mIGJpbnMgb2YgdHJlZXMgKi8KKworLyogQSBsaXR0bGUgaGVscGVyIG1hY3JvIGZvciB0cmVlcyAqLworI2RlZmluZSBsZWZ0bW9zdF9jaGlsZCh0KSAoKHQpLT5jaGlsZFswXSAhPSAwPyAodCktPmNoaWxkWzBdIDogKHQpLT5jaGlsZFsxXSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2VnbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRWFjaCBtYWxsb2Mgc3BhY2UgbWF5IGluY2x1ZGUgbm9uLWNvbnRpZ3VvdXMgc2VnbWVudHMsIGhlbGQgaW4gYQorICBsaXN0IGhlYWRlZCBieSBhbiBlbWJlZGRlZCBtYWxsb2Nfc2VnbWVudCByZWNvcmQgcmVwcmVzZW50aW5nIHRoZQorICB0b3AtbW9zdCBzcGFjZS4gU2VnbWVudHMgYWxzbyBpbmNsdWRlIGZsYWdzIGhvbGRpbmcgcHJvcGVydGllcyBvZgorICB0aGUgc3BhY2UuIExhcmdlIGNodW5rcyB0aGF0IGFyZSBkaXJlY3RseSBhbGxvY2F0ZWQgYnkgbW1hcCBhcmUgbm90CisgIGluY2x1ZGVkIGluIHRoaXMgbGlzdC4gVGhleSBhcmUgaW5zdGVhZCBpbmRlcGVuZGVudGx5IGNyZWF0ZWQgYW5kCisgIGRlc3Ryb3llZCB3aXRob3V0IG90aGVyd2lzZSBrZWVwaW5nIHRyYWNrIG9mIHRoZW0uCisKKyAgU2VnbWVudCBtYW5hZ2VtZW50IG1haW5seSBjb21lcyBpbnRvIHBsYXkgZm9yIHNwYWNlcyBhbGxvY2F0ZWQgYnkKKyAgTU1BUC4gIEFueSBjYWxsIHRvIE1NQVAgbWlnaHQgb3IgbWlnaHQgbm90IHJldHVybiBtZW1vcnkgdGhhdCBpcworICBhZGphY2VudCB0byBhbiBleGlzdGluZyBzZWdtZW50LiAgTU9SRUNPUkUgbm9ybWFsbHkgY29udGlndW91c2x5CisgIGV4dGVuZHMgdGhlIGN1cnJlbnQgc3BhY2UsIHNvIHRoaXMgc3BhY2UgaXMgYWxtb3N0IGFsd2F5cyBhZGphY2VudCwKKyAgd2hpY2ggaXMgc2ltcGxlciBhbmQgZmFzdGVyIHRvIGRlYWwgd2l0aC4gKFRoaXMgaXMgd2h5IE1PUkVDT1JFIGlzCisgIHVzZWQgcHJlZmVyZW50aWFsbHkgdG8gTU1BUCB3aGVuIGJvdGggYXJlIGF2YWlsYWJsZSAtLSBzZWUKKyAgc3lzX2FsbG9jLikgIFdoZW4gYWxsb2NhdGluZyB1c2luZyBNTUFQLCB3ZSBkb24ndCB1c2UgYW55IG9mIHRoZQorICBoaW50aW5nIG1lY2hhbmlzbXMgKGluY29uc2lzdGVudGx5KSBzdXBwb3J0ZWQgaW4gdmFyaW91cworICBpbXBsZW1lbnRhdGlvbnMgb2YgdW5peCBtbWFwLCBvciBkaXN0aW5ndWlzaCByZXNlcnZpbmcgZnJvbQorICBjb21taXR0aW5nIG1lbW9yeS4gSW5zdGVhZCwgd2UganVzdCBhc2sgZm9yIHNwYWNlLCBhbmQgZXhwbG9pdAorICBjb250aWd1aXR5IHdoZW4gd2UgZ2V0IGl0LiAgSXQgaXMgcHJvYmFibHkgcG9zc2libGUgdG8gZG8KKyAgYmV0dGVyIHRoYW4gdGhpcyBvbiBzb21lIHN5c3RlbXMsIGJ1dCBubyBnZW5lcmFsIHNjaGVtZSBzZWVtcworICB0byBiZSBzaWduaWZpY2FudGx5IGJldHRlci4KKworICBNYW5hZ2VtZW50IGVudGFpbHMgYSBzaW1wbGVyIHZhcmlhbnQgb2YgdGhlIGNvbnNvbGlkYXRpb24gc2NoZW1lCisgIHVzZWQgZm9yIGNodW5rcyB0byByZWR1Y2UgZnJhZ21lbnRhdGlvbiAtLSBuZXcgYWRqYWNlbnQgbWVtb3J5IGlzCisgIG5vcm1hbGx5IHByZXBlbmRlZCBvciBhcHBlbmRlZCB0byBhbiBleGlzdGluZyBzZWdtZW50LiBIb3dldmVyLAorICB0aGVyZSBhcmUgbGltaXRhdGlvbnMgY29tcGFyZWQgdG8gY2h1bmsgY29uc29saWRhdGlvbiB0aGF0IG1vc3RseQorICByZWZsZWN0IHRoZSBmYWN0IHRoYXQgc2VnbWVudCBwcm9jZXNzaW5nIGlzIHJlbGF0aXZlbHkgaW5mcmVxdWVudAorICAob2NjdXJyaW5nIG9ubHkgd2hlbiBnZXR0aW5nIG1lbW9yeSBmcm9tIHN5c3RlbSkgYW5kIHRoYXQgd2UKKyAgZG9uJ3QgZXhwZWN0IHRvIGhhdmUgaHVnZSBudW1iZXJzIG9mIHNlZ21lbnRzOgorCisgICogU2VnbWVudHMgYXJlIG5vdCBpbmRleGVkLCBzbyB0cmF2ZXJzYWwgcmVxdWlyZXMgbGluZWFyIHNjYW5zLiAgKEl0CisgICAgd291bGQgYmUgcG9zc2libGUgdG8gaW5kZXggdGhlc2UsIGJ1dCBpcyBub3Qgd29ydGggdGhlIGV4dHJhCisgICAgb3ZlcmhlYWQgYW5kIGNvbXBsZXhpdHkgZm9yIG1vc3QgcHJvZ3JhbXMgb24gbW9zdCBwbGF0Zm9ybXMuKQorICAqIE5ldyBzZWdtZW50cyBhcmUgb25seSBhcHBlbmRlZCB0byBvbGQgb25lcyB3aGVuIGhvbGRpbmcgdG9wLW1vc3QKKyAgICBtZW1vcnk7IGlmIHRoZXkgY2Fubm90IGJlIHByZXBlbmRlZCB0byBvdGhlcnMsIHRoZXkgYXJlIGhlbGQgaW4KKyAgICBkaWZmZXJlbnQgc2VnbWVudHMuCisKKyAgRXhjZXB0IGZvciB0aGUgdG9wLW1vc3Qgc2VnbWVudCBvZiBhbiBtc3RhdGUsIGVhY2ggc2VnbWVudCByZWNvcmQKKyAgaXMga2VwdCBhdCB0aGUgdGFpbCBvZiBpdHMgc2VnbWVudC4gU2VnbWVudHMgYXJlIGFkZGVkIGJ5IHB1c2hpbmcKKyAgc2VnbWVudCByZWNvcmRzIG9udG8gdGhlIGxpc3QgaGVhZGVkIGJ5ICZtc3RhdGUuc2VnIGZvciB0aGUKKyAgY29udGFpbmluZyBtc3RhdGUuCisKKyAgU2VnbWVudCBmbGFncyBjb250cm9sIGFsbG9jYXRpb24vbWVyZ2UvZGVhbGxvY2F0aW9uIHBvbGljaWVzOgorICAqIElmIEVYVEVSTl9CSVQgc2V0LCB0aGVuIHdlIGRpZCBub3QgYWxsb2NhdGUgdGhpcyBzZWdtZW50LAorICAgIGFuZCBzbyBzaG91bGQgbm90IHRyeSB0byBkZWFsbG9jYXRlIG9yIG1lcmdlIHdpdGggb3RoZXJzLgorICAgIChUaGlzIGN1cnJlbnRseSBob2xkcyBvbmx5IGZvciB0aGUgaW5pdGlhbCBzZWdtZW50IHBhc3NlZAorICAgIGludG8gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UuKQorICAqIElmIElTX01NQVBQRURfQklUIHNldCwgdGhlIHNlZ21lbnQgbWF5IGJlIG1lcmdlZCB3aXRoCisgICAgb3RoZXIgc3Vycm91bmRpbmcgbW1hcHBlZCBzZWdtZW50cyBhbmQgdHJpbW1lZC9kZS1hbGxvY2F0ZWQKKyAgICB1c2luZyBtdW5tYXAuCisgICogSWYgbmVpdGhlciBiaXQgaXMgc2V0LCB0aGVuIHRoZSBzZWdtZW50IHdhcyBvYnRhaW5lZCB1c2luZworICAgIE1PUkVDT1JFIHNvIGNhbiBiZSBtZXJnZWQgd2l0aCBzdXJyb3VuZGluZyBNT1JFQ09SRSdkIHNlZ21lbnRzCisgICAgYW5kIGRlYWxsb2NhdGVkL3RyaW1tZWQgdXNpbmcgTU9SRUNPUkUgd2l0aCBuZWdhdGl2ZSBhcmd1bWVudHMuCisqLworCitzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQgeworICBjaGFyKiAgICAgICAgYmFzZTsgICAgICAgICAgICAgLyogYmFzZSBhZGRyZXNzICovCisgIHNpemVfdCAgICAgICBzaXplOyAgICAgICAgICAgICAvKiBhbGxvY2F0ZWQgc2l6ZSAqLworICBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQqIG5leHQ7ICAgLyogcHRyIHRvIG5leHQgc2VnbWVudCAqLworICBmbGFnX3QgICAgICAgc2ZsYWdzOyAgICAgICAgICAgLyogbW1hcCBhbmQgZXh0ZXJuIGZsYWcgKi8KK307CisKKyNkZWZpbmUgaXNfbW1hcHBlZF9zZWdtZW50KFMpICAoKFMpLT5zZmxhZ3MgJiBJU19NTUFQUEVEX0JJVCkKKyNkZWZpbmUgaXNfZXh0ZXJuX3NlZ21lbnQoUykgICAoKFMpLT5zZmxhZ3MgJiBFWFRFUk5fQklUKQorCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCAgbXNlZ21lbnQ7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCogbXNlZ21lbnRwdHI7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jX3N0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgICBBIG1hbGxvY19zdGF0ZSBob2xkcyBhbGwgb2YgdGhlIGJvb2trZWVwaW5nIGZvciBhIHNwYWNlLgorICAgVGhlIG1haW4gZmllbGRzIGFyZToKKworICBUb3AKKyAgICBUaGUgdG9wbW9zdCBjaHVuayBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzZWdtZW50LiBJdHMgc2l6ZSBpcworICAgIGNhY2hlZCBpbiB0b3BzaXplLiAgVGhlIGFjdHVhbCBzaXplIG9mIHRvcG1vc3Qgc3BhY2UgaXMKKyAgICB0b3BzaXplK1RPUF9GT09UX1NJWkUsIHdoaWNoIGluY2x1ZGVzIHNwYWNlIHJlc2VydmVkIGZvciBhZGRpbmcKKyAgICBmZW5jZXBvc3RzIGFuZCBzZWdtZW50IHJlY29yZHMgaWYgbmVjZXNzYXJ5IHdoZW4gZ2V0dGluZyBtb3JlCisgICAgc3BhY2UgZnJvbSB0aGUgc3lzdGVtLiAgVGhlIHNpemUgYXQgd2hpY2ggdG8gYXV0b3RyaW0gdG9wIGlzCisgICAgY2FjaGVkIGZyb20gbXBhcmFtcyBpbiB0cmltX2NoZWNrLCBleGNlcHQgdGhhdCBpdCBpcyBkaXNhYmxlZCBpZgorICAgIGFuIGF1dG90cmltIGZhaWxzLgorCisgIERlc2lnbmF0ZWQgdmljdGltIChkdikKKyAgICBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgY2h1bmsgZm9yIHNlcnZpY2luZyBzbWFsbCByZXF1ZXN0cyB0aGF0CisgICAgZG9uJ3QgaGF2ZSBleGFjdCBmaXRzLiAgSXQgaXMgbm9ybWFsbHkgdGhlIGNodW5rIHNwbGl0IG9mZiBtb3N0CisgICAgcmVjZW50bHkgdG8gc2VydmljZSBhbm90aGVyIHNtYWxsIHJlcXVlc3QuICBJdHMgc2l6ZSBpcyBjYWNoZWQgaW4KKyAgICBkdnNpemUuIFRoZSBsaW5rIGZpZWxkcyBvZiB0aGlzIGNodW5rIGFyZSBub3QgbWFpbnRhaW5lZCBzaW5jZSBpdAorICAgIGlzIG5vdCBrZXB0IGluIGEgYmluLgorCisgIFNtYWxsQmlucworICAgIEFuIGFycmF5IG9mIGJpbiBoZWFkZXJzIGZvciBmcmVlIGNodW5rcy4gIFRoZXNlIGJpbnMgaG9sZCBjaHVua3MKKyAgICB3aXRoIHNpemVzIGxlc3MgdGhhbiBNSU5fTEFSR0VfU0laRSBieXRlcy4gRWFjaCBiaW4gY29udGFpbnMKKyAgICBjaHVua3Mgb2YgYWxsIHRoZSBzYW1lIHNpemUsIHNwYWNlZCA4IGJ5dGVzIGFwYXJ0LiAgVG8gc2ltcGxpZnkKKyAgICB1c2UgaW4gZG91YmxlLWxpbmtlZCBsaXN0cywgZWFjaCBiaW4gaGVhZGVyIGFjdHMgYXMgYSBtYWxsb2NfY2h1bmsKKyAgICBwb2ludGluZyB0byB0aGUgcmVhbCBmaXJzdCBub2RlLCBpZiBpdCBleGlzdHMgKGVsc2UgcG9pbnRpbmcgdG8KKyAgICBpdHNlbGYpLiAgVGhpcyBhdm9pZHMgc3BlY2lhbC1jYXNpbmcgZm9yIGhlYWRlcnMuICBCdXQgdG8gYXZvaWQKKyAgICB3YXN0ZSwgd2UgYWxsb2NhdGUgb25seSB0aGUgZmQvYmsgcG9pbnRlcnMgb2YgYmlucywgYW5kIHRoZW4gdXNlCisgICAgcmVwb3NpdGlvbmluZyB0cmlja3MgdG8gdHJlYXQgdGhlc2UgYXMgdGhlIGZpZWxkcyBvZiBhIGNodW5rLgorCisgIFRyZWVCaW5zCisgICAgVHJlZWJpbnMgYXJlIHBvaW50ZXJzIHRvIHRoZSByb290cyBvZiB0cmVlcyBob2xkaW5nIGEgcmFuZ2Ugb2YKKyAgICBzaXplcy4gVGhlcmUgYXJlIDIgZXF1YWxseSBzcGFjZWQgdHJlZWJpbnMgZm9yIGVhY2ggcG93ZXIgb2YgdHdvCisgICAgZnJvbSBUUkVFX1NISUZUIHRvIFRSRUVfU0hJRlQrMTYuIFRoZSBsYXN0IGJpbiBob2xkcyBhbnl0aGluZworICAgIGxhcmdlci4KKworICBCaW4gbWFwcworICAgIFRoZXJlIGlzIG9uZSBiaXQgbWFwIGZvciBzbWFsbCBiaW5zICgic21hbGxtYXAiKSBhbmQgb25lIGZvcgorICAgIHRyZWViaW5zICgidHJlZW1hcCkuICBFYWNoIGJpbiBzZXRzIGl0cyBiaXQgd2hlbiBub24tZW1wdHksIGFuZAorICAgIGNsZWFycyB0aGUgYml0IHdoZW4gZW1wdHkuICBCaXQgb3BlcmF0aW9ucyBhcmUgdGhlbiB1c2VkIHRvIGF2b2lkCisgICAgYmluLWJ5LWJpbiBzZWFyY2hpbmcgLS0gbmVhcmx5IGFsbCAic2VhcmNoIiBpcyBkb25lIHdpdGhvdXQgZXZlcgorICAgIGxvb2tpbmcgYXQgYmlucyB0aGF0IHdvbid0IGJlIHNlbGVjdGVkLiAgVGhlIGJpdCBtYXBzCisgICAgY29uc2VydmF0aXZlbHkgdXNlIDMyIGJpdHMgcGVyIG1hcCB3b3JkLCBldmVuIGlmIG9uIDY0Yml0IHN5c3RlbS4KKyAgICBGb3IgYSBnb29kIGRlc2NyaXB0aW9uIG9mIHNvbWUgb2YgdGhlIGJpdC1iYXNlZCB0ZWNobmlxdWVzIHVzZWQKKyAgICBoZXJlLCBzZWUgSGVucnkgUy4gV2FycmVuIEpyJ3MgYm9vayAiSGFja2VyJ3MgRGVsaWdodCIgKGFuZAorICAgIHN1cHBsZW1lbnQgYXQgaHR0cDovL2hhY2tlcnNkZWxpZ2h0Lm9yZy8pLiBNYW55IG9mIHRoZXNlIGFyZQorICAgIGludGVuZGVkIHRvIHJlZHVjZSB0aGUgYnJhbmNoaW5lc3Mgb2YgcGF0aHMgdGhyb3VnaCBtYWxsb2MgZXRjLCBhcworICAgIHdlbGwgYXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbWVtb3J5IGxvY2F0aW9ucyByZWFkIG9yIHdyaXR0ZW4uCisKKyAgU2VnbWVudHMKKyAgICBBIGxpc3Qgb2Ygc2VnbWVudHMgaGVhZGVkIGJ5IGFuIGVtYmVkZGVkIG1hbGxvY19zZWdtZW50IHJlY29yZAorICAgIHJlcHJlc2VudGluZyB0aGUgaW5pdGlhbCBzcGFjZS4KKworICBBZGRyZXNzIGNoZWNrIHN1cHBvcnQKKyAgICBUaGUgbGVhc3RfYWRkciBmaWVsZCBpcyB0aGUgbGVhc3QgYWRkcmVzcyBldmVyIG9idGFpbmVkIGZyb20KKyAgICBNT1JFQ09SRSBvciBNTUFQLiBBdHRlbXB0ZWQgZnJlZXMgYW5kIHJlYWxsb2NzIG9mIGFueSBhZGRyZXNzIGxlc3MKKyAgICB0aGFuIHRoaXMgYXJlIHRyYXBwZWQgKHVubGVzcyBJTlNFQ1VSRSBpcyBkZWZpbmVkKS4KKworICBNYWdpYyB0YWcKKyAgICBBIGNyb3NzLWNoZWNrIGZpZWxkIHRoYXQgc2hvdWxkIGFsd2F5cyBob2xkIHNhbWUgdmFsdWUgYXMgbXBhcmFtcy5tYWdpYy4KKworICBGbGFncworICAgIEJpdHMgcmVjb3JkaW5nIHdoZXRoZXIgdG8gdXNlIE1NQVAsIGxvY2tzLCBvciBjb250aWd1b3VzIE1PUkVDT1JFCisKKyAgU3RhdGlzdGljcworICAgIEVhY2ggc3BhY2Uga2VlcHMgdHJhY2sgb2YgY3VycmVudCBhbmQgbWF4aW11bSBzeXN0ZW0gbWVtb3J5CisgICAgb2J0YWluZWQgdmlhIE1PUkVDT1JFIG9yIE1NQVAuCisKKyAgVHJpbSBzdXBwb3J0CisgICAgRmllbGRzIGhvbGRpbmcgdGhlIGFtb3VudCBvZiB1bnVzZWQgdG9wbW9zdCBtZW1vcnkgdGhhdCBzaG91bGQgdHJpZ2dlcgorICAgIHRpbW1pbmcsIGFuZCBhIGNvdW50ZXIgdG8gZm9yY2UgcGVyaW9kaWMgc2Nhbm5pbmcgdG8gcmVsZWFzZSB1bnVzZWQKKyAgICBub24tdG9wbW9zdCBzZWdtZW50cy4KKworICBMb2NraW5nCisgICAgSWYgVVNFX0xPQ0tTIGlzIGRlZmluZWQsIHRoZSAibXV0ZXgiIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkCisgICAgYXJvdW5kIGV2ZXJ5IHB1YmxpYyBjYWxsIHVzaW5nIHRoaXMgbXNwYWNlLgorCisgIEV4dGVuc2lvbiBzdXBwb3J0CisgICAgQSB2b2lkKiBwb2ludGVyIGFuZCBhIHNpemVfdCBmaWVsZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGhlbHAgaW1wbGVtZW50CisgICAgZXh0ZW5zaW9ucyB0byB0aGlzIG1hbGxvYy4KKyovCisKKy8qIEJpbiB0eXBlcywgd2lkdGhzIGFuZCBzaXplcyAqLworI2RlZmluZSBOU01BTExCSU5TICAgICAgICAoMzJVKQorI2RlZmluZSBOVFJFRUJJTlMgICAgICAgICAoMzJVKQorI2RlZmluZSBTTUFMTEJJTl9TSElGVCAgICAoM1UpCisjZGVmaW5lIFNNQUxMQklOX1dJRFRIICAgIChTSVpFX1RfT05FIDw8IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBUUkVFQklOX1NISUZUICAgICAoOFUpCisjZGVmaW5lIE1JTl9MQVJHRV9TSVpFICAgIChTSVpFX1RfT05FIDw8IFRSRUVCSU5fU0hJRlQpCisjZGVmaW5lIE1BWF9TTUFMTF9TSVpFICAgIChNSU5fTEFSR0VfU0laRSAtIFNJWkVfVF9PTkUpCisjZGVmaW5lIE1BWF9TTUFMTF9SRVFVRVNUIChNQVhfU01BTExfU0laRSAtIENIVU5LX0FMSUdOX01BU0sgLSBDSFVOS19PVkVSSEVBRCkKKworc3RydWN0IG1hbGxvY19zdGF0ZSB7CisgIGJpbm1hcF90ICAgc21hbGxtYXA7CisgIGJpbm1hcF90ICAgdHJlZW1hcDsKKyAgc2l6ZV90ICAgICBkdnNpemU7CisgIHNpemVfdCAgICAgdG9wc2l6ZTsKKyAgY2hhciogICAgICBsZWFzdF9hZGRyOworICBtY2h1bmtwdHIgIGR2OworICBtY2h1bmtwdHIgIHRvcDsKKyAgc2l6ZV90ICAgICB0cmltX2NoZWNrOworICBzaXplX3QgICAgIHJlbGVhc2VfY2hlY2tzOworICBzaXplX3QgICAgIG1hZ2ljOworICBtY2h1bmtwdHIgIHNtYWxsYmluc1soTlNNQUxMQklOUysxKSoyXTsKKyAgdGJpbnB0ciAgICB0cmVlYmluc1tOVFJFRUJJTlNdOworICBzaXplX3QgICAgIGZvb3RwcmludDsKKyAgc2l6ZV90ICAgICBtYXhfZm9vdHByaW50OworICBmbGFnX3QgICAgIG1mbGFnczsKKyNpZiBVU0VfTE9DS1MKKyAgTUxPQ0tfVCAgICBtdXRleDsgICAgIC8qIGxvY2F0ZSBsb2NrIGFtb25nIGZpZWxkcyB0aGF0IHJhcmVseSBjaGFuZ2UgKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKyAgbXNlZ21lbnQgICBzZWc7CisgIHZvaWQqICAgICAgZXh0cDsgICAgICAvKiBVbnVzZWQgYnV0IGF2YWlsYWJsZSBmb3IgZXh0ZW5zaW9ucyAqLworICBzaXplX3QgICAgIGV4dHM7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc3RhdGUqICAgIG1zdGF0ZTsKKworLyogLS0tLS0tLS0tLS0tLSBHbG9iYWwgbWFsbG9jX3N0YXRlIGFuZCBtYWxsb2NfcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgbWFsbG9jX3BhcmFtcyBob2xkcyBnbG9iYWwgcHJvcGVydGllcywgaW5jbHVkaW5nIHRob3NlIHRoYXQgY2FuIGJlCisgIGR5bmFtaWNhbGx5IHNldCB1c2luZyBtYWxsb3B0LiBUaGVyZSBpcyBhIHNpbmdsZSBpbnN0YW5jZSwgbXBhcmFtcywKKyAgaW5pdGlhbGl6ZWQgaW4gaW5pdF9tcGFyYW1zLiBOb3RlIHRoYXQgdGhlIG5vbi16ZXJvbmVzcyBvZiAibWFnaWMiCisgIGFsc28gc2VydmVzIGFzIGFuIGluaXRpYWxpemF0aW9uIGZsYWcuCisqLworCitzdHJ1Y3QgbWFsbG9jX3BhcmFtcyB7CisgIHZvbGF0aWxlIHNpemVfdCBtYWdpYzsKKyAgc2l6ZV90IHBhZ2Vfc2l6ZTsKKyAgc2l6ZV90IGdyYW51bGFyaXR5OworICBzaXplX3QgbW1hcF90aHJlc2hvbGQ7CisgIHNpemVfdCB0cmltX3RocmVzaG9sZDsKKyAgZmxhZ190IGRlZmF1bHRfbWZsYWdzOworfTsKKworc3RhdGljIHN0cnVjdCBtYWxsb2NfcGFyYW1zIG1wYXJhbXM7CisKKy8qIEVuc3VyZSBtcGFyYW1zIGluaXRpYWxpemVkICovCisjZGVmaW5lIGVuc3VyZV9pbml0aWFsaXphdGlvbigpICgodm9pZCkobXBhcmFtcy5tYWdpYyAhPSAwIHx8IGluaXRfbXBhcmFtcygpKSkKKworI2lmICFPTkxZX01TUEFDRVMKKworLyogVGhlIGdsb2JhbCBtYWxsb2Nfc3RhdGUgdXNlZCBmb3IgYWxsIG5vbi0ibXNwYWNlIiBjYWxscyAqLworc3RhdGljIHN0cnVjdCBtYWxsb2Nfc3RhdGUgX2dtXzsKKyNkZWZpbmUgZ20gICAgICAgICAgICAgICAgICgmX2dtXykKKyNkZWZpbmUgaXNfZ2xvYmFsKE0pICAgICAgICgoTSkgPT0gJl9nbV8pCisKKyNlbmRpZiAvKiAhT05MWV9NU1BBQ0VTICovCisKKyNkZWZpbmUgaXNfaW5pdGlhbGl6ZWQoTSkgICgoTSktPnRvcCAhPSAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzeXN0ZW0gYWxsb2Mgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBPcGVyYXRpb25zIG9uIG1mbGFncyAqLworCisjZGVmaW5lIHVzZV9sb2NrKE0pICAgICAgICAgICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9MT0NLX0JJVCkKKyNkZWZpbmUgZW5hYmxlX2xvY2soTSkgICAgICAgICgoTSktPm1mbGFncyB8PSAgVVNFX0xPQ0tfQklUKQorI2RlZmluZSBkaXNhYmxlX2xvY2soTSkgICAgICAgKChNKS0+bWZsYWdzICY9IH5VU0VfTE9DS19CSVQpCisKKyNkZWZpbmUgdXNlX21tYXAoTSkgICAgICAgICAgICgoTSktPm1mbGFncyAmICAgVVNFX01NQVBfQklUKQorI2RlZmluZSBlbmFibGVfbW1hcChNKSAgICAgICAgKChNKS0+bWZsYWdzIHw9ICBVU0VfTU1BUF9CSVQpCisjZGVmaW5lIGRpc2FibGVfbW1hcChNKSAgICAgICAoKE0pLT5tZmxhZ3MgJj0gflVTRV9NTUFQX0JJVCkKKworI2RlZmluZSB1c2Vfbm9uY29udGlndW91cyhNKSAgKChNKS0+bWZsYWdzICYgICBVU0VfTk9OQ09OVElHVU9VU19CSVQpCisjZGVmaW5lIGRpc2FibGVfY29udGlndW91cyhNKSAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9OT05DT05USUdVT1VTX0JJVCkKKworI2RlZmluZSBzZXRfbG9jayhNLEwpXAorICgoTSktPm1mbGFncyA9IChMKT9cCisgICgoTSktPm1mbGFncyB8IFVTRV9MT0NLX0JJVCkgOlwKKyAgKChNKS0+bWZsYWdzICYgflVTRV9MT0NLX0JJVCkpCisKKy8qIHBhZ2UtYWxpZ24gYSBzaXplICovCisjZGVmaW5lIHBhZ2VfYWxpZ24oUylcCisgKCgoUykgKyAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgJiB+KG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpCisKKy8qIGdyYW51bGFyaXR5LWFsaWduIGEgc2l6ZSAqLworI2RlZmluZSBncmFudWxhcml0eV9hbGlnbihTKVwKKyAgKCgoUykgKyAobXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKVwKKyAgICYgfihtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpCisKKworLyogRm9yIG1tYXAsIHVzZSBncmFudWxhcml0eSBhbGlnbm1lbnQgb24gd2luZG93cywgZWxzZSBwYWdlLWFsaWduICovCisjaWZkZWYgV0lOMzIKKyNkZWZpbmUgbW1hcF9hbGlnbihTKSBncmFudWxhcml0eV9hbGlnbihTKQorI2Vsc2UKKyNkZWZpbmUgbW1hcF9hbGlnbihTKSBwYWdlX2FsaWduKFMpCisjZW5kaWYKKworLyogRm9yIHN5c19hbGxvYywgZW5vdWdoIHBhZGRpbmcgdG8gZW5zdXJlIGNhbiBtYWxsb2MgcmVxdWVzdCBvbiBzdWNjZXNzICovCisjZGVmaW5lIFNZU19BTExPQ19QQURESU5HIChUT1BfRk9PVF9TSVpFICsgTUFMTE9DX0FMSUdOTUVOVCkKKworI2RlZmluZSBpc19wYWdlX2FsaWduZWQoUylcCisgICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpID09IDApCisjZGVmaW5lIGlzX2dyYW51bGFyaXR5X2FsaWduZWQoUylcCisgICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSkgPT0gMCkKKworLyogIFRydWUgaWYgc2VnbWVudCBTIGhvbGRzIGFkZHJlc3MgQSAqLworI2RlZmluZSBzZWdtZW50X2hvbGRzKFMsIEEpXAorICAoKGNoYXIqKShBKSA+PSBTLT5iYXNlICYmIChjaGFyKikoQSkgPCBTLT5iYXNlICsgUy0+c2l6ZSkKKworLyogUmV0dXJuIHNlZ21lbnQgaG9sZGluZyBnaXZlbiBhZGRyZXNzICovCitzdGF0aWMgbXNlZ21lbnRwdHIgc2VnbWVudF9ob2xkaW5nKG1zdGF0ZSBtLCBjaGFyKiBhZGRyKSB7CisgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgZm9yICg7OykgeworICAgIGlmIChhZGRyID49IHNwLT5iYXNlICYmIGFkZHIgPCBzcC0+YmFzZSArIHNwLT5zaXplKQorICAgICAgcmV0dXJuIHNwOworICAgIGlmICgoc3AgPSBzcC0+bmV4dCkgPT0gMCkKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIHNlZ21lbnQgY29udGFpbnMgYSBzZWdtZW50IGxpbmsgKi8KK3N0YXRpYyBpbnQgaGFzX3NlZ21lbnRfbGluayhtc3RhdGUgbSwgbXNlZ21lbnRwdHIgc3MpIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICBmb3IgKDs7KSB7CisgICAgaWYgKChjaGFyKilzcCA+PSBzcy0+YmFzZSAmJiAoY2hhciopc3AgPCBzcy0+YmFzZSArIHNzLT5zaXplKQorICAgICAgcmV0dXJuIDE7CisgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQorICAgICAgcmV0dXJuIDA7CisgIH0KK30KKworI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQorI2RlZmluZSBzaG91bGRfdHJpbShNLHMpICAoKHMpID4gKE0pLT50cmltX2NoZWNrKQorI2Vsc2UgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZGVmaW5lIHNob3VsZF90cmltKE0scykgICgwKQorI2VuZGlmIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisKKy8qCisgIFRPUF9GT09UX1NJWkUgaXMgcGFkZGluZyBhdCB0aGUgZW5kIG9mIGEgc2VnbWVudCwgaW5jbHVkaW5nIHNwYWNlCisgIHRoYXQgbWF5IGJlIG5lZWRlZCB0byBwbGFjZSBzZWdtZW50IHJlY29yZHMgYW5kIGZlbmNlcG9zdHMgd2hlbiBuZXcKKyAgbm9uY29udGlndW91cyBzZWdtZW50cyBhcmUgYWRkZWQuCisqLworI2RlZmluZSBUT1BfRk9PVF9TSVpFXAorICAoYWxpZ25fb2Zmc2V0KGNodW5rMm1lbSgwKSkrcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpK01JTl9DSFVOS19TSVpFKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEhvb2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFBSRUFDVElPTiBzaG91bGQgYmUgZGVmaW5lZCB0byByZXR1cm4gMCBvbiBzdWNjZXNzLCBhbmQgbm9uemVybyBvbgorICBmYWlsdXJlLiBJZiB5b3UgYXJlIG5vdCB1c2luZyBsb2NraW5nLCB5b3UgY2FuIHJlZGVmaW5lIHRoZXNlIHRvIGRvCisgIGFueXRoaW5nIHlvdSBsaWtlLgorKi8KKworI2lmIFVTRV9MT0NLUworCisjZGVmaW5lIFBSRUFDVElPTihNKSAgKCh1c2VfbG9jayhNKSk/IEFDUVVJUkVfTE9DSygmKE0pLT5tdXRleCkgOiAwKQorI2RlZmluZSBQT1NUQUNUSU9OKE0pIHsgaWYgKHVzZV9sb2NrKE0pKSBSRUxFQVNFX0xPQ0soJihNKS0+bXV0ZXgpOyB9CisjZWxzZSAvKiBVU0VfTE9DS1MgKi8KKworI2lmbmRlZiBQUkVBQ1RJT04KKyNkZWZpbmUgUFJFQUNUSU9OKE0pICgwKQorI2VuZGlmICAvKiBQUkVBQ1RJT04gKi8KKworI2lmbmRlZiBQT1NUQUNUSU9OCisjZGVmaW5lIFBPU1RBQ1RJT04oTSkKKyNlbmRpZiAgLyogUE9TVEFDVElPTiAqLworCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKy8qCisgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OIGlzIHRyaWdnZXJlZCB1cG9uIGRldGVjdGVkIGJhZCBhZGRyZXNzZXMuCisgIFVTQUdFX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgb24gZGV0ZWN0ZWQgYmFkIGZyZWVzIGFuZAorICByZWFsbG9jcy4gVGhlIGFyZ3VtZW50IHAgaXMgYW4gYWRkcmVzcyB0aGF0IG1pZ2h0IGhhdmUgdHJpZ2dlcmVkIHRoZQorICBmYXVsdC4gSXQgaXMgaWdub3JlZCBieSB0aGUgdHdvIHByZWRlZmluZWQgYWN0aW9ucywgYnV0IG1pZ2h0IGJlCisgIHVzZWZ1bCBpbiBjdXN0b20gYWN0aW9ucyB0aGF0IHRyeSB0byBoZWxwIGRpYWdub3NlIGVycm9ycy4KKyovCisKKyNpZiBQUk9DRUVEX09OX0VSUk9SCisKKy8qIEEgY291bnQgb2YgdGhlIG51bWJlciBvZiBjb3JydXB0aW9uIGVycm9ycyBjYXVzaW5nIHJlc2V0cyAqLworaW50IG1hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50OworCisvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICovCitzdGF0aWMgdm9pZCByZXNldF9vbl9lcnJvcihtc3RhdGUgbSk7CisKKyNkZWZpbmUgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgIHJlc2V0X29uX2Vycm9yKG0pCisjZGVmaW5lIFVTQUdFX0VSUk9SX0FDVElPTihtLCBwKQorCisjZWxzZSAvKiBQUk9DRUVEX09OX0VSUk9SICovCisKKyNpZm5kZWYgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04KKyNkZWZpbmUgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgQUJPUlQKKyNlbmRpZiAvKiBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiAqLworCisjaWZuZGVmIFVTQUdFX0VSUk9SX0FDVElPTgorI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSxwKSBBQk9SVAorI2VuZGlmIC8qIFVTQUdFX0VSUk9SX0FDVElPTiAqLworCisjZW5kaWYgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgISBERUJVRworCisjZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKQorI2RlZmluZSBjaGVja19tbWFwcGVkX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKE0pCisjZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApCisKKyNlbHNlIC8qIERFQlVHICovCisjZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKSAgICAgICBkb19jaGVja19mcmVlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfaW51c2VfY2h1bmsoTSxQKSAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfdG9wX2NodW5rKE0sUCkgICAgICAgIGRvX2NoZWNrX3RvcF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKSBkb19jaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikKKyNkZWZpbmUgY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApICAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoTSkgICAgICAgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKE0pCisKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RvcF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19tbWFwcGVkX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsobXN0YXRlIG0sIHZvaWQqIG1lbSwgc2l6ZV90IHMpOworc3RhdGljIHZvaWQgICBkb19jaGVja190cmVlKG1zdGF0ZSBtLCB0Y2h1bmtwdHIgdCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RyZWViaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOworc3RhdGljIHZvaWQgICBkb19jaGVja19zbWFsbGJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShtc3RhdGUgbSk7CitzdGF0aWMgaW50ICAgIGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCk7CitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSk7CisjZW5kaWYgLyogREVCVUcgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbmRleGluZyBCaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBpc19zbWFsbChzKSAgICAgICAgICgoKHMpID4+IFNNQUxMQklOX1NISUZUKSA8IE5TTUFMTEJJTlMpCisjZGVmaW5lIHNtYWxsX2luZGV4KHMpICAgICAgKChzKSAgPj4gU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIHNtYWxsX2luZGV4MnNpemUoaSkgKChpKSAgPDwgU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIE1JTl9TTUFMTF9JTkRFWCAgICAgKHNtYWxsX2luZGV4KE1JTl9DSFVOS19TSVpFKSkKKworLyogYWRkcmVzc2luZyBieSBpbmRleC4gU2VlIGFib3ZlIGFib3V0IHNtYWxsYmluIHJlcG9zaXRpb25pbmcgKi8KKyNkZWZpbmUgc21hbGxiaW5fYXQoTSwgaSkgICAoKHNiaW5wdHIpKChjaGFyKikmKChNKS0+c21hbGxiaW5zWyhpKTw8MV0pKSkKKyNkZWZpbmUgdHJlZWJpbl9hdChNLGkpICAgICAoJigoTSktPnRyZWViaW5zW2ldKSkKKworLyogYXNzaWduIHRyZWUgaW5kZXggZm9yIHNpemUgUyB0byB2YXJpYWJsZSBJLiBVc2UgeDg2IGFzbSBpZiBwb3NzaWJsZSAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgSztcCisgICAgX19hc21fXygiYnNybFx0JTEsICUwXG5cdCIgOiAiPXIiIChLKSA6ICJybSIgIChYKSk7XAorICAgIEkgPSAgKGJpbmRleF90KSgoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKSk7XAorICB9XAorfQorCisjZWxpZiBkZWZpbmVkIChfX0lOVEVMX0NPTVBJTEVSKQorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBLID0gX2JpdF9zY2FuX3JldmVyc2UgKFgpOyBcCisgICAgSSA9ICAoYmluZGV4X3QpKChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpKTtcCisgIH1cCit9CisKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisjZGVmaW5lIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKVwKK3tcCisgIHNpemVfdCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wKKyAgaWYgKFggPT0gMClcCisgICAgSSA9IDA7XAorICBlbHNlIGlmIChYID4gMHhGRkZGKVwKKyAgICBJID0gTlRSRUVCSU5TLTE7XAorICBlbHNlIHtcCisgICAgdW5zaWduZWQgaW50IEs7XAorICAgIF9CaXRTY2FuUmV2ZXJzZSgoRFdPUkQgKikgJkssIFgpO1wKKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wKKyAgfVwKK30KKworI2Vsc2UgLyogR05VQyAqLworI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBZID0gKHVuc2lnbmVkIGludClYO1wKKyAgICB1bnNpZ25lZCBpbnQgTiA9ICgoWSAtIDB4MTAwKSA+PiAxNikgJiA4O1wKKyAgICB1bnNpZ25lZCBpbnQgSyA9ICgoKFkgPDw9IE4pIC0gMHgxMDAwKSA+PiAxNikgJiA0O1wKKyAgICBOICs9IEs7XAorICAgIE4gKz0gSyA9ICgoKFkgPDw9IEspIC0gMHg0MDAwKSA+PiAxNikgJiAyO1wKKyAgICBLID0gMTQgLSBOICsgKChZIDw8PSBLKSA+PiAxNSk7XAorICAgIEkgPSAoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKTtcCisgIH1cCit9CisjZW5kaWYgLyogR05VQyAqLworCisvKiBCaXQgcmVwcmVzZW50aW5nIG1heGltdW0gcmVzb2x2ZWQgc2l6ZSBpbiBhIHRyZWViaW4gYXQgaSAqLworI2RlZmluZSBiaXRfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKGkgPT0gTlRSRUVCSU5TLTEpPyAoU0laRV9UX0JJVFNJWkUtMSkgOiAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKQorCisvKiBTaGlmdCBwbGFjaW5nIG1heGltdW0gcmVzb2x2ZWQgYml0IGluIGEgdHJlZWJpbiBhdCBpIGFzIHNpZ24gYml0ICovCisjZGVmaW5lIGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoKGkgPT0gTlRSRUVCSU5TLTEpPyAwIDogXAorICAgICgoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkgLSAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKSkpCisKKy8qIFRoZSBzaXplIG9mIHRoZSBzbWFsbGVzdCBjaHVuayBoZWxkIGluIGJpbiB3aXRoIGluZGV4IGkgKi8KKyNkZWZpbmUgbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoKFNJWkVfVF9PTkUgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUKSkgfCAgXAorICAgKCgoc2l6ZV90KSgoaSkgJiBTSVpFX1RfT05FKSkgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMSkpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGJpbiBtYXBzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGJpdCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGluZGV4ICovCisjZGVmaW5lIGlkeDJiaXQoaSkgICAgICAgICAgICAgICgoYmlubWFwX3QpKDEpIDw8IChpKSkKKworLyogTWFyay9DbGVhciBiaXRzIHdpdGggZ2l2ZW4gaW5kZXggKi8KKyNkZWZpbmUgbWFya19zbWFsbG1hcChNLGkpICAgICAgKChNKS0+c21hbGxtYXAgfD0gIGlkeDJiaXQoaSkpCisjZGVmaW5lIGNsZWFyX3NtYWxsbWFwKE0saSkgICAgICgoTSktPnNtYWxsbWFwICY9IH5pZHgyYml0KGkpKQorI2RlZmluZSBzbWFsbG1hcF9pc19tYXJrZWQoTSxpKSAoKE0pLT5zbWFsbG1hcCAmICAgaWR4MmJpdChpKSkKKworI2RlZmluZSBtYXJrX3RyZWVtYXAoTSxpKSAgICAgICAoKE0pLT50cmVlbWFwICB8PSAgaWR4MmJpdChpKSkKKyNkZWZpbmUgY2xlYXJfdHJlZW1hcChNLGkpICAgICAgKChNKS0+dHJlZW1hcCAgJj0gfmlkeDJiaXQoaSkpCisjZGVmaW5lIHRyZWVtYXBfaXNfbWFya2VkKE0saSkgICgoTSktPnRyZWVtYXAgICYgICBpZHgyYml0KGkpKQorCisvKiBpc29sYXRlIHRoZSBsZWFzdCBzZXQgYml0IG9mIGEgYml0bWFwICovCisjZGVmaW5lIGxlYXN0X2JpdCh4KSAgICAgICAgICgoeCkgJiAtKHgpKQorCisvKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBsZWFzdCBiaXQgb2YgeCBvbiAqLworI2RlZmluZSBsZWZ0X2JpdHMoeCkgICAgICAgICAoKHg8PDEpIHwgLSh4PDwxKSkKKworLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2Ygb3IgZXF1YWwgdG8gbGVhc3QgYml0IG9mIHggb24gKi8KKyNkZWZpbmUgc2FtZV9vcl9sZWZ0X2JpdHMoeCkgKCh4KSB8IC0oeCkpCisKKy8qIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gYml0LiBVc2UgeDg2IGFzbSBpZiBwb3NzaWJsZSAqLworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBKO1wKKyAgX19hc21fXygiYnNmbFx0JTEsICUwXG5cdCIgOiAiPXIiIChKKSA6ICJybSIgKFgpKTtcCisgIEkgPSAoYmluZGV4X3QpSjtcCit9CisKKyNlbGlmIGRlZmluZWQgKF9fSU5URUxfQ09NUElMRVIpCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBKO1wKKyAgSiA9IF9iaXRfc2Nhbl9mb3J3YXJkIChYKTsgXAorICBJID0gKGJpbmRleF90KUo7XAorfQorCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMAorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgSjtcCisgIF9CaXRTY2FuRm9yd2FyZCgoRFdPUkQgKikgJkosIFgpO1wKKyAgSSA9IChiaW5kZXhfdClKO1wKK30KKworI2VsaWYgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKSBJID0gZmZzKFgpLTEKKworI2Vsc2UKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IFkgPSBYIC0gMTtcCisgIHVuc2lnbmVkIGludCBLID0gWSA+PiAoMTYtNCkgJiAxNjtcCisgIHVuc2lnbmVkIGludCBOID0gSzsgICAgICAgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICg4LTMpICYgIDg7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoNC0yKSAmICA0OyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDItMSkgJiAgMjsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICgxLTApICYgIDE7ICBZID4+PSBLO1wKKyAgSSA9IChiaW5kZXhfdCkoTiArIFkpO1wKK30KKyNlbmRpZiAvKiBHTlVDICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUnVudGltZSBDaGVjayBTdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRm9yIHNlY3VyaXR5LCB0aGUgbWFpbiBpbnZhcmlhbnQgaXMgdGhhdCBtYWxsb2MvZnJlZS9ldGMgbmV2ZXIKKyAgd3JpdGVzIHRvIGEgc3RhdGljIGFkZHJlc3Mgb3RoZXIgdGhhbiBtYWxsb2Nfc3RhdGUsIHVubGVzcyBzdGF0aWMKKyAgbWFsbG9jX3N0YXRlIGl0c2VsZiBoYXMgYmVlbiBjb3JydXB0ZWQsIHdoaWNoIGNhbm5vdCBvY2N1ciB2aWEKKyAgbWFsbG9jIChiZWNhdXNlIG9mIHRoZXNlIGNoZWNrcykuIEluIGVzc2VuY2UgdGhpcyBtZWFucyB0aGF0IHdlCisgIGJlbGlldmUgYWxsIHBvaW50ZXJzLCBzaXplcywgbWFwcyBldGMgaGVsZCBpbiBtYWxsb2Nfc3RhdGUsIGJ1dAorICBjaGVjayBhbGwgb2YgdGhvc2UgbGlua2VkIG9yIG9mZnNldHRlZCBmcm9tIG90aGVyIGVtYmVkZGVkIGRhdGEKKyAgc3RydWN0dXJlcy4gIFRoZXNlIGNoZWNrcyBhcmUgaW50ZXJzcGVyc2VkIHdpdGggbWFpbiBjb2RlIGluIGEgd2F5CisgIHRoYXQgdGVuZHMgdG8gbWluaW1pemUgdGhlaXIgcnVuLXRpbWUgY29zdC4KKworICBXaGVuIEZPT1RFUlMgaXMgZGVmaW5lZCwgaW4gYWRkaXRpb24gdG8gcmFuZ2UgY2hlY2tpbmcsIHdlIGFsc28KKyAgdmVyaWZ5IGZvb3RlciBmaWVsZHMgb2YgaW51c2UgY2h1bmtzLCB3aGljaCBjYW4gYmUgdXNlZCBndWFyYW50ZWUKKyAgdGhhdCB0aGUgbXN0YXRlIGNvbnRyb2xsaW5nIG1hbGxvYy9mcmVlIGlzIGludGFjdC4gIFRoaXMgaXMgYQorICBzdHJlYW1saW5lZCB2ZXJzaW9uIG9mIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYnkgV2lsbGlhbSBSb2JlcnRzb24KKyAgZXQgYWwgaW4gIlJ1bi10aW1lIERldGVjdGlvbiBvZiBIZWFwLWJhc2VkIE92ZXJmbG93cyIgTElTQScwMworICBodHRwOi8vd3d3LnVzZW5peC5vcmcvZXZlbnRzL2xpc2EwMy90ZWNoL3JvYmVydHNvbi5odG1sIFRoZSBmb290ZXIKKyAgb2YgYW4gaW51c2UgY2h1bmsgaG9sZHMgdGhlIHhvciBvZiBpdHMgbXN0YXRlIGFuZCBhIHJhbmRvbSBzZWVkLAorICB0aGF0IGlzIGNoZWNrZWQgdXBvbiBjYWxscyB0byBmcmVlKCkgYW5kIHJlYWxsb2MoKS4gIFRoaXMgaXMKKyAgKHByb2JhYmxpc3RpY2FsbHkpIHVuZ3Vlc3NhYmxlIGZyb20gb3V0c2lkZSB0aGUgcHJvZ3JhbSwgYnV0IGNhbiBiZQorICBjb21wdXRlZCBieSBhbnkgY29kZSBzdWNjZXNzZnVsbHkgbWFsbG9jJ2luZyBhbnkgY2h1bmssIHNvIGRvZXMgbm90CisgIGl0c2VsZiBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBjb2RlIHRoYXQgaGFzIGFscmVhZHkgYnJva2VuCisgIHNlY3VyaXR5IHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gIFVubGlrZSBSb2JlcnRzb24gZXQgYWwsIHdlCisgIGFsd2F5cyBkeW5hbWljYWxseSBjaGVjayBhZGRyZXNzZXMgb2YgYWxsIG9mZnNldCBjaHVua3MgKHByZXZpb3VzLAorICBuZXh0LCBldGMpLiBUaGlzIHR1cm5zIG91dCB0byBiZSBjaGVhcGVyIHRoYW4gcmVseWluZyBvbiBoYXNoZXMuCisqLworCisjaWYgIUlOU0VDVVJFCisvKiBDaGVjayBpZiBhZGRyZXNzIGEgaXMgYXQgbGVhc3QgYXMgaGlnaCBhcyBhbnkgZnJvbSBNT1JFQ09SRSBvciBNTUFQICovCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKChjaGFyKikoYSkgPj0gKE0pLT5sZWFzdF9hZGRyKQorLyogQ2hlY2sgaWYgYWRkcmVzcyBvZiBuZXh0IGNodW5rIG4gaXMgaGlnaGVyIHRoYW4gYmFzZSBjaHVuayBwICovCisjZGVmaW5lIG9rX25leHQocCwgbikgICAgKChjaGFyKikocCkgPCAoY2hhciopKG4pKQorLyogQ2hlY2sgaWYgcCBoYXMgaXRzIGNpbnVzZSBiaXQgb24gKi8KKyNkZWZpbmUgb2tfY2ludXNlKHApICAgICBjaW51c2UocCkKKy8qIENoZWNrIGlmIHAgaGFzIGl0cyBwaW51c2UgYml0IG9uICovCisjZGVmaW5lIG9rX3BpbnVzZShwKSAgICAgcGludXNlKHApCisKKyNlbHNlIC8qICFJTlNFQ1VSRSAqLworI2RlZmluZSBva19hZGRyZXNzKE0sIGEpICgxKQorI2RlZmluZSBva19uZXh0KGIsIG4pICAgICgxKQorI2RlZmluZSBva19jaW51c2UocCkgICAgICgxKQorI2RlZmluZSBva19waW51c2UocCkgICAgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisjaWYgKEZPT1RFUlMgJiYgIUlOU0VDVVJFKQorLyogQ2hlY2sgaWYgKGFsbGVnZWQpIG1zdGF0ZSBtIGhhcyBleHBlY3RlZCBtYWdpYyBmaWVsZCAqLworI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgoTSktPm1hZ2ljID09IG1wYXJhbXMubWFnaWMpCisjZWxzZSAgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgxKQorI2VuZGlmIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKworCisvKiBJbiBnY2MsIHVzZSBfX2J1aWx0aW5fZXhwZWN0IHRvIG1pbmltaXplIGltcGFjdCBvZiBjaGVja3MgKi8KKyNpZiAhSU5TRUNVUkUKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCisjZGVmaW5lIFJUQ0hFQ0soZSkgIF9fYnVpbHRpbl9leHBlY3QoZSwgMSkKKyNlbHNlIC8qIEdOVUMgKi8KKyNkZWZpbmUgUlRDSEVDSyhlKSAgKGUpCisjZW5kaWYgLyogR05VQyAqLworI2Vsc2UgLyogIUlOU0VDVVJFICovCisjZGVmaW5lIFJUQ0hFQ0soZSkgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisvKiBtYWNyb3MgdG8gc2V0IHVwIGludXNlIGNodW5rcyB3aXRoIG9yIHdpdGhvdXQgZm9vdGVycyAqLworCisjaWYgIUZPT1RFUlMKKworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpCisKKy8qIFNldCBjaW51c2UgYml0IGFuZCBwaW51c2UgYml0IG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgY2ludXNlIGFuZCBwaW51c2Ugb2YgdGhpcyBjaHVuayBhbmQgcGludXNlIG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgc2l6ZSwgY2ludXNlIGFuZCBwaW51c2UgYml0IG9mIHRoaXMgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkpCisKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKworLyogU2V0IGZvb3Qgb2YgaW51c2UgY2h1bmsgdG8gYmUgeG9yIG9mIG1zdGF0ZSBhbmQgc2VlZCAqLworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpXAorICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290ID0gKChzaXplX3QpKE0pIF4gbXBhcmFtcy5tYWdpYykpCisKKyNkZWZpbmUgZ2V0X21zdGF0ZV9mb3IocClcCisgICgobXN0YXRlKSgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArXAorICAgIChjaHVua3NpemUocCkpKSktPnByZXZfZm9vdCBeIG1wYXJhbXMubWFnaWMpKQorCisjZGVmaW5lIHNldF9pbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpfHN8Q0lOVVNFX0JJVCksXAorICAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpLCBcCisgIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksXAorIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICBtYXJrX2ludXNlX2Zvb3QoTSwgcCwgcykpCisKKyNlbmRpZiAvKiAhRk9PVEVSUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNldHRpbmcgbXBhcmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbml0aWFsaXplIG1wYXJhbXMgKi8KK3N0YXRpYyBpbnQgaW5pdF9tcGFyYW1zKHZvaWQpIHsKKyNpZmRlZiBORUVEX0dMT0JBTF9MT0NLX0lOSVQKKyAgaWYgKG1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzIDw9IDApCisgICAgaW5pdF9tYWxsb2NfZ2xvYmFsX211dGV4KCk7CisjZW5kaWYKKworICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworICBpZiAobXBhcmFtcy5tYWdpYyA9PSAwKSB7CisgICAgc2l6ZV90IG1hZ2ljOworICAgIHNpemVfdCBwc2l6ZTsKKyAgICBzaXplX3QgZ3NpemU7CisKKyNpZm5kZWYgV0lOMzIKKyAgICBwc2l6ZSA9IG1hbGxvY19nZXRwYWdlc2l6ZTsKKyAgICBnc2l6ZSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKT8gREVGQVVMVF9HUkFOVUxBUklUWSA6IHBzaXplKTsKKyNlbHNlIC8qIFdJTjMyICovCisgICAgeworICAgICAgU1lTVEVNX0lORk8gc3lzdGVtX2luZm87CisgICAgICBHZXRTeXN0ZW1JbmZvKCZzeXN0ZW1faW5mbyk7CisgICAgICBwc2l6ZSA9IHN5c3RlbV9pbmZvLmR3UGFnZVNpemU7CisgICAgICBnc2l6ZSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKT8KKwkgICAgICAgREVGQVVMVF9HUkFOVUxBUklUWSA6IHN5c3RlbV9pbmZvLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5KTsKKyAgICB9CisjZW5kaWYgLyogV0lOMzIgKi8KKworICAgIC8qIFNhbml0eS1jaGVjayBjb25maWd1cmF0aW9uOgorICAgICAgIHNpemVfdCBtdXN0IGJlIHVuc2lnbmVkIGFuZCBhcyB3aWRlIGFzIHBvaW50ZXIgdHlwZS4KKyAgICAgICBpbnRzIG11c3QgYmUgYXQgbGVhc3QgNCBieXRlcy4KKyAgICAgICBhbGlnbm1lbnQgbXVzdCBiZSBhdCBsZWFzdCA4LgorICAgICAgIEFsaWdubWVudCwgbWluIGNodW5rIHNpemUsIGFuZCBwYWdlIHNpemUgbXVzdCBhbGwgYmUgcG93ZXJzIG9mIDIuCisgICAgKi8KKyAgICBpZiAoKHNpemVvZihzaXplX3QpICE9IHNpemVvZihjaGFyKikpIHx8CisJKE1BWF9TSVpFX1QgPCBNSU5fQ0hVTktfU0laRSkgIHx8CisJKHNpemVvZihpbnQpIDwgNCkgIHx8CisJKE1BTExPQ19BTElHTk1FTlQgPCAoc2l6ZV90KThVKSB8fAorCSgoTUFMTE9DX0FMSUdOTUVOVCAmIChNQUxMT0NfQUxJR05NRU5ULVNJWkVfVF9PTkUpKSAhPSAwKSB8fAorCSgoTUNIVU5LX1NJWkUgICAgICAmIChNQ0hVTktfU0laRS1TSVpFX1RfT05FKSkgICAgICAhPSAwKSB8fAorCSgoZ3NpemUgICAgICAgICAgICAmIChnc2l6ZS1TSVpFX1RfT05FKSkgICAgICAgICAgICAhPSAwKSB8fAorCSgocHNpemUgICAgICAgICAgICAmIChwc2l6ZS1TSVpFX1RfT05FKSkgICAgICAgICAgICAhPSAwKSkKKyAgICAgIEFCT1JUOworCisgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9IGdzaXplOworICAgIG1wYXJhbXMucGFnZV9zaXplID0gcHNpemU7CisgICAgbXBhcmFtcy5tbWFwX3RocmVzaG9sZCA9IERFRkFVTFRfTU1BUF9USFJFU0hPTEQ7CisgICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IERFRkFVTFRfVFJJTV9USFJFU0hPTEQ7CisjaWYgTU9SRUNPUkVfQ09OVElHVU9VUworICAgIG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3MgPSBVU0VfTE9DS19CSVR8VVNFX01NQVBfQklUOworI2Vsc2UgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUfFVTRV9NTUFQX0JJVHxVU0VfTk9OQ09OVElHVU9VU19CSVQ7CisjZW5kaWYgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworCisjaWYgIU9OTFlfTVNQQUNFUworICAgIC8qIFNldCB1cCBsb2NrIGZvciBtYWluIG1hbGxvYyBhcmVhICovCisgICAgZ20tPm1mbGFncyA9IG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3M7CisgICAgSU5JVElBTF9MT0NLKCZnbS0+bXV0ZXgpOworI2VuZGlmCisKKyNpZiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpCisgICAgeworI2lmIFVTRV9ERVZfUkFORE9NCisgICAgICBpbnQgZmQ7CisgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZltzaXplb2Yoc2l6ZV90KV07CisgICAgICAvKiBUcnkgdG8gdXNlIC9kZXYvdXJhbmRvbSwgZWxzZSBmYWxsIGJhY2sgb24gdXNpbmcgdGltZSAqLworICAgICAgaWYgKChmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKSkgPj0gMCAmJgorCSAgcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPT0gc2l6ZW9mKGJ1ZikpIHsKKwltYWdpYyA9ICooKHNpemVfdCAqKSBidWYpOworCWNsb3NlKGZkKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBVU0VfREVWX1JBTkRPTSAqLworI2lmZGVmIFdJTjMyCisJbWFnaWMgPSAoc2l6ZV90KShHZXRUaWNrQ291bnQoKSBeIChzaXplX3QpMHg1NTU1NTU1NVUpOworI2Vsc2UKKyAgICAgIG1hZ2ljID0gKHNpemVfdCkodGltZSgwKSBeIChzaXplX3QpMHg1NTU1NTU1NVUpOworI2VuZGlmCisgICAgICBtYWdpYyB8PSAoc2l6ZV90KThVOyAgICAvKiBlbnN1cmUgbm9uemVybyAqLworICAgICAgbWFnaWMgJj0gfihzaXplX3QpN1U7ICAgLyogaW1wcm92ZSBjaGFuY2VzIG9mIGZhdWx0IGZvciBiYWQgdmFsdWVzICovCisgICAgfQorI2Vsc2UgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworICAgIG1hZ2ljID0gKHNpemVfdCkweDU4NTg1ODU4VTsKKyNlbmRpZiAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisKKyAgICBtcGFyYW1zLm1hZ2ljID0gbWFnaWM7CisgIH0KKworICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworICByZXR1cm4gMTsKK30KKworLyogc3VwcG9ydCBmb3IgbWFsbG9wdCAqLworc3RhdGljIGludCBjaGFuZ2VfbXBhcmFtKGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgeworICBzaXplX3QgdmFsID0gKHZhbHVlID09IC0xKT8gTUFYX1NJWkVfVCA6IChzaXplX3QpdmFsdWU7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBzd2l0Y2gocGFyYW1fbnVtYmVyKSB7CisgIGNhc2UgTV9UUklNX1RIUkVTSE9MRDoKKyAgICBtcGFyYW1zLnRyaW1fdGhyZXNob2xkID0gdmFsOworICAgIHJldHVybiAxOworICBjYXNlIE1fR1JBTlVMQVJJVFk6CisgICAgaWYgKHZhbCA+PSBtcGFyYW1zLnBhZ2Vfc2l6ZSAmJiAoKHZhbCAmICh2YWwtMSkpID09IDApKSB7CisgICAgICBtcGFyYW1zLmdyYW51bGFyaXR5ID0gdmFsOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJldHVybiAwOworICBjYXNlIE1fTU1BUF9USFJFU0hPTEQ6CisgICAgbXBhcmFtcy5tbWFwX3RocmVzaG9sZCA9IHZhbDsKKyAgICByZXR1cm4gMTsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisjaWYgREVCVUcKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVidWdnaW5nIFN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgYW55IGNodW5rLCB3aGV0aGVyIGZyZWUsIGludXNlLCBtbWFwcGVkIGV0YyAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2FueV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiB0b3AgY2h1bmsgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RvcF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKXApOworICBzaXplX3QgIHN6ID0gcC0+aGVhZCAmIH5JTlVTRV9CSVRTOyAvKiB0aGlyZC1sb3dlc3QgYml0IGNhbiBiZSBzZXQhICovCisgIGFzc2VydChzcCAhPSAwKTsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKKyAgYXNzZXJ0KHN6ID09IG0tPnRvcHNpemUpOworICBhc3NlcnQoc3ogPiAwKTsKKyAgYXNzZXJ0KHN6ID09ICgoc3AtPmJhc2UgKyBzcC0+c2l6ZSkgLSAoY2hhciopcCkgLSBUT1BfRk9PVF9TSVpFKTsKKyAgYXNzZXJ0KHBpbnVzZShwKSk7CisgIGFzc2VydCghcGludXNlKGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KSkpOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIChpbnVzZSkgbW1hcHBlZCBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIHNpemVfdCAgc3ogPSBjaHVua3NpemUocCk7CisgIHNpemVfdCBsZW4gPSAoc3ogKyAocC0+cHJldl9mb290ICYgfklTX01NQVBQRURfQklUKSArIE1NQVBfRk9PVF9QQUQpOworICBhc3NlcnQoaXNfbW1hcHBlZChwKSk7CisgIGFzc2VydCh1c2VfbW1hcChtKSk7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7CisgIGFzc2VydCghaXNfc21hbGwoc3opKTsKKyAgYXNzZXJ0KChsZW4gJiAobXBhcmFtcy5wYWdlX3NpemUtU0laRV9UX09ORSkpID09IDApOworICBhc3NlcnQoY2h1bmtfcGx1c19vZmZzZXQocCwgc3opLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKTsKKyAgYXNzZXJ0KGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6K1NJWkVfVF9TSVpFKS0+aGVhZCA9PSAwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBpbnVzZSBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7CisgIGFzc2VydChjaW51c2UocCkpOworICBhc3NlcnQobmV4dF9waW51c2UocCkpOworICAvKiBJZiBub3QgcGludXNlIGFuZCBub3QgbW1hcHBlZCwgcHJldmlvdXMgY2h1bmsgaGFzIE9LIG9mZnNldCAqLworICBhc3NlcnQoaXNfbW1hcHBlZChwKSB8fCBwaW51c2UocCkgfHwgbmV4dF9jaHVuayhwcmV2X2NodW5rKHApKSA9PSBwKTsKKyAgaWYgKGlzX21tYXBwZWQocCkpCisgICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBmcmVlIGNodW5rcyAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfZnJlZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgc2l6ZV90IHN6ID0gY2h1bmtzaXplKHApOworICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KTsKKyAgZG9fY2hlY2tfYW55X2NodW5rKG0sIHApOworICBhc3NlcnQoIWNpbnVzZShwKSk7CisgIGFzc2VydCghbmV4dF9waW51c2UocCkpOworICBhc3NlcnQgKCFpc19tbWFwcGVkKHApKTsKKyAgaWYgKHAgIT0gbS0+ZHYgJiYgcCAhPSBtLT50b3ApIHsKKyAgICBpZiAoc3ogPj0gTUlOX0NIVU5LX1NJWkUpIHsKKyAgICAgIGFzc2VydCgoc3ogJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKTsKKyAgICAgIGFzc2VydChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpOworICAgICAgYXNzZXJ0KG5leHQtPnByZXZfZm9vdCA9PSBzeik7CisgICAgICBhc3NlcnQocGludXNlKHApKTsKKyAgICAgIGFzc2VydCAobmV4dCA9PSBtLT50b3AgfHwgY2ludXNlKG5leHQpKTsKKyAgICAgIGFzc2VydChwLT5mZC0+YmsgPT0gcCk7CisgICAgICBhc3NlcnQocC0+YmstPmZkID09IHApOworICAgIH0KKyAgICBlbHNlICAvKiBtYXJrZXJzIGFyZSBhbHdheXMgb2Ygc2l6ZSBTSVpFX1RfU0laRSAqLworICAgICAgYXNzZXJ0KHN6ID09IFNJWkVfVF9TSVpFKTsKKyAgfQorfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIG1hbGxvY2VkIGNodW5rcyBhdCB0aGUgcG9pbnQgdGhleSBhcmUgbWFsbG9jZWQgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkKiBtZW0sIHNpemVfdCBzKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisgICAgc2l6ZV90IHN6ID0gcC0+aGVhZCAmIH4oUElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBwKTsKKyAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7CisgICAgYXNzZXJ0KHN6ID49IE1JTl9DSFVOS19TSVpFKTsKKyAgICBhc3NlcnQoc3ogPj0gcyk7CisgICAgLyogdW5sZXNzIG1tYXBwZWQsIHNpemUgaXMgbGVzcyB0aGFuIE1JTl9DSFVOS19TSVpFIG1vcmUgdGhhbiByZXF1ZXN0ICovCisgICAgYXNzZXJ0KGlzX21tYXBwZWQocCkgfHwgc3ogPCAocyArIE1JTl9DSFVOS19TSVpFKSk7CisgIH0KK30KKworLyogQ2hlY2sgYSB0cmVlIGFuZCBpdHMgc3VidHJlZXMuICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfdHJlZShtc3RhdGUgbSwgdGNodW5rcHRyIHQpIHsKKyAgdGNodW5rcHRyIGhlYWQgPSAwOworICB0Y2h1bmtwdHIgdSA9IHQ7CisgIGJpbmRleF90IHRpbmRleCA9IHQtPmluZGV4OworICBzaXplX3QgdHNpemUgPSBjaHVua3NpemUodCk7CisgIGJpbmRleF90IGlkeDsKKyAgY29tcHV0ZV90cmVlX2luZGV4KHRzaXplLCBpZHgpOworICBhc3NlcnQodGluZGV4ID09IGlkeCk7CisgIGFzc2VydCh0c2l6ZSA+PSBNSU5fTEFSR0VfU0laRSk7CisgIGFzc2VydCh0c2l6ZSA+PSBtaW5zaXplX2Zvcl90cmVlX2luZGV4KGlkeCkpOworICBhc3NlcnQoKGlkeCA9PSBOVFJFRUJJTlMtMSkgfHwgKHRzaXplIDwgbWluc2l6ZV9mb3JfdHJlZV9pbmRleCgoaWR4KzEpKSkpOworCisgIGRvIHsgLyogdHJhdmVyc2UgdGhyb3VnaCBjaGFpbiBvZiBzYW1lLXNpemVkIG5vZGVzICovCisgICAgZG9fY2hlY2tfYW55X2NodW5rKG0sICgobWNodW5rcHRyKXUpKTsKKyAgICBhc3NlcnQodS0+aW5kZXggPT0gdGluZGV4KTsKKyAgICBhc3NlcnQoY2h1bmtzaXplKHUpID09IHRzaXplKTsKKyAgICBhc3NlcnQoIWNpbnVzZSh1KSk7CisgICAgYXNzZXJ0KCFuZXh0X3BpbnVzZSh1KSk7CisgICAgYXNzZXJ0KHUtPmZkLT5iayA9PSB1KTsKKyAgICBhc3NlcnQodS0+YmstPmZkID09IHUpOworICAgIGlmICh1LT5wYXJlbnQgPT0gMCkgeworICAgICAgYXNzZXJ0KHUtPmNoaWxkWzBdID09IDApOworICAgICAgYXNzZXJ0KHUtPmNoaWxkWzFdID09IDApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGFzc2VydChoZWFkID09IDApOyAvKiBvbmx5IG9uZSBub2RlIG9uIGNoYWluIGhhcyBwYXJlbnQgKi8KKyAgICAgIGhlYWQgPSB1OworICAgICAgYXNzZXJ0KHUtPnBhcmVudCAhPSB1KTsKKyAgICAgIGFzc2VydCAodS0+cGFyZW50LT5jaGlsZFswXSA9PSB1IHx8CisJICAgICAgdS0+cGFyZW50LT5jaGlsZFsxXSA9PSB1IHx8CisJICAgICAgKigodGJpbnB0ciopKHUtPnBhcmVudCkpID09IHUpOworICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDApIHsKKwlhc3NlcnQodS0+Y2hpbGRbMF0tPnBhcmVudCA9PSB1KTsKKwlhc3NlcnQodS0+Y2hpbGRbMF0gIT0gdSk7CisJZG9fY2hlY2tfdHJlZShtLCB1LT5jaGlsZFswXSk7CisgICAgICB9CisgICAgICBpZiAodS0+Y2hpbGRbMV0gIT0gMCkgeworCWFzc2VydCh1LT5jaGlsZFsxXS0+cGFyZW50ID09IHUpOworCWFzc2VydCh1LT5jaGlsZFsxXSAhPSB1KTsKKwlkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzFdKTsKKyAgICAgIH0KKyAgICAgIGlmICh1LT5jaGlsZFswXSAhPSAwICYmIHUtPmNoaWxkWzFdICE9IDApIHsKKwlhc3NlcnQoY2h1bmtzaXplKHUtPmNoaWxkWzBdKSA8IGNodW5rc2l6ZSh1LT5jaGlsZFsxXSkpOworICAgICAgfQorICAgIH0KKyAgICB1ID0gdS0+ZmQ7CisgIH0gd2hpbGUgKHUgIT0gdCk7CisgIGFzc2VydChoZWFkICE9IDApOworfQorCisvKiAgQ2hlY2sgYWxsIHRoZSBjaHVua3MgaW4gYSB0cmVlYmluLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RyZWViaW4obXN0YXRlIG0sIGJpbmRleF90IGkpIHsKKyAgdGJpbnB0ciogdGIgPSB0cmVlYmluX2F0KG0sIGkpOworICB0Y2h1bmtwdHIgdCA9ICp0YjsKKyAgaW50IGVtcHR5ID0gKG0tPnRyZWVtYXAgJiAoMVUgPDwgaSkpID09IDA7CisgIGlmICh0ID09IDApCisgICAgYXNzZXJ0KGVtcHR5KTsKKyAgaWYgKCFlbXB0eSkKKyAgICBkb19jaGVja190cmVlKG0sIHQpOworfQorCisvKiAgQ2hlY2sgYWxsIHRoZSBjaHVua3MgaW4gYSBzbWFsbGJpbi4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja19zbWFsbGJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSkgeworICBzYmlucHRyIGIgPSBzbWFsbGJpbl9hdChtLCBpKTsKKyAgbWNodW5rcHRyIHAgPSBiLT5iazsKKyAgdW5zaWduZWQgaW50IGVtcHR5ID0gKG0tPnNtYWxsbWFwICYgKDFVIDw8IGkpKSA9PSAwOworICBpZiAocCA9PSBiKQorICAgIGFzc2VydChlbXB0eSk7CisgIGlmICghZW1wdHkpIHsKKyAgICBmb3IgKDsgcCAhPSBiOyBwID0gcC0+YmspIHsKKyAgICAgIHNpemVfdCBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgbWNodW5rcHRyIHE7CisgICAgICAvKiBlYWNoIGNodW5rIGNsYWltcyB0byBiZSBmcmVlICovCisgICAgICBkb19jaGVja19mcmVlX2NodW5rKG0sIHApOworICAgICAgLyogY2h1bmsgYmVsb25ncyBpbiBiaW4gKi8KKyAgICAgIGFzc2VydChzbWFsbF9pbmRleChzaXplKSA9PSBpKTsKKyAgICAgIGFzc2VydChwLT5iayA9PSBiIHx8IGNodW5rc2l6ZShwLT5iaykgPT0gY2h1bmtzaXplKHApKTsKKyAgICAgIC8qIGNodW5rIGlzIGZvbGxvd2VkIGJ5IGFuIGludXNlIGNodW5rICovCisgICAgICBxID0gbmV4dF9jaHVuayhwKTsKKyAgICAgIGlmIChxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKQorCWRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHEpOworICAgIH0KKyAgfQorfQorCisvKiBGaW5kIHggaW4gYSBiaW4uIFVzZWQgaW4gb3RoZXIgY2hlY2sgZnVuY3Rpb25zLiAqLworc3RhdGljIGludCBiaW5fZmluZChtc3RhdGUgbSwgbWNodW5rcHRyIHgpIHsKKyAgc2l6ZV90IHNpemUgPSBjaHVua3NpemUoeCk7CisgIGlmIChpc19zbWFsbChzaXplKSkgeworICAgIGJpbmRleF90IHNpZHggPSBzbWFsbF9pbmRleChzaXplKTsKKyAgICBzYmlucHRyIGIgPSBzbWFsbGJpbl9hdChtLCBzaWR4KTsKKyAgICBpZiAoc21hbGxtYXBfaXNfbWFya2VkKG0sIHNpZHgpKSB7CisgICAgICBtY2h1bmtwdHIgcCA9IGI7CisgICAgICBkbyB7CisJaWYgKHAgPT0geCkKKwkgIHJldHVybiAxOworICAgICAgfSB3aGlsZSAoKHAgPSBwLT5mZCkgIT0gYik7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGJpbmRleF90IHRpZHg7CisgICAgY29tcHV0ZV90cmVlX2luZGV4KHNpemUsIHRpZHgpOworICAgIGlmICh0cmVlbWFwX2lzX21hcmtlZChtLCB0aWR4KSkgeworICAgICAgdGNodW5rcHRyIHQgPSAqdHJlZWJpbl9hdChtLCB0aWR4KTsKKyAgICAgIHNpemVfdCBzaXplYml0cyA9IHNpemUgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KHRpZHgpOworICAgICAgd2hpbGUgKHQgIT0gMCAmJiBjaHVua3NpemUodCkgIT0gc2l6ZSkgeworCXQgPSB0LT5jaGlsZFsoc2l6ZWJpdHMgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdOworCXNpemViaXRzIDw8PSAxOworICAgICAgfQorICAgICAgaWYgKHQgIT0gMCkgeworCXRjaHVua3B0ciB1ID0gdDsKKwlkbyB7CisJICBpZiAodSA9PSAodGNodW5rcHRyKXgpCisJICAgIHJldHVybiAxOworCX0gd2hpbGUgKCh1ID0gdS0+ZmQpICE9IHQpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogVHJhdmVyc2UgZWFjaCBjaHVuayBhbmQgY2hlY2sgaXQ7IHJldHVybiB0b3RhbCAqLworc3RhdGljIHNpemVfdCB0cmF2ZXJzZV9hbmRfY2hlY2sobXN0YXRlIG0pIHsKKyAgc2l6ZV90IHN1bSA9IDA7CisgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgIHN1bSArPSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRTsKKyAgICB3aGlsZSAocyAhPSAwKSB7CisgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworICAgICAgbWNodW5rcHRyIGxhc3RxID0gMDsKKyAgICAgIGFzc2VydChwaW51c2UocSkpOworICAgICAgd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKwkgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKwlzdW0gKz0gY2h1bmtzaXplKHEpOworCWlmIChjaW51c2UocSkpIHsKKwkgIGFzc2VydCghYmluX2ZpbmQobSwgcSkpOworCSAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7CisJfQorCWVsc2UgeworCSAgYXNzZXJ0KHEgPT0gbS0+ZHYgfHwgYmluX2ZpbmQobSwgcSkpOworCSAgYXNzZXJ0KGxhc3RxID09IDAgfHwgY2ludXNlKGxhc3RxKSk7IC8qIE5vdCAyIGNvbnNlY3V0aXZlIGZyZWUgKi8KKwkgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobSwgcSk7CisJfQorCWxhc3RxID0gcTsKKwlxID0gbmV4dF9jaHVuayhxKTsKKyAgICAgIH0KKyAgICAgIHMgPSBzLT5uZXh0OworICAgIH0KKyAgfQorICByZXR1cm4gc3VtOworfQorCisvKiBDaGVjayBhbGwgcHJvcGVydGllcyBvZiBtYWxsb2Nfc3RhdGUuICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pIHsKKyAgYmluZGV4X3QgaTsKKyAgc2l6ZV90IHRvdGFsOworICAvKiBjaGVjayBiaW5zICovCisgIGZvciAoaSA9IDA7IGkgPCBOU01BTExCSU5TOyArK2kpCisgICAgZG9fY2hlY2tfc21hbGxiaW4obSwgaSk7CisgIGZvciAoaSA9IDA7IGkgPCBOVFJFRUJJTlM7ICsraSkKKyAgICBkb19jaGVja190cmVlYmluKG0sIGkpOworCisgIGlmIChtLT5kdnNpemUgIT0gMCkgeyAvKiBjaGVjayBkdiBjaHVuayAqLworICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBtLT5kdik7CisgICAgYXNzZXJ0KG0tPmR2c2l6ZSA9PSBjaHVua3NpemUobS0+ZHYpKTsKKyAgICBhc3NlcnQobS0+ZHZzaXplID49IE1JTl9DSFVOS19TSVpFKTsKKyAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+ZHYpID09IDApOworICB9CisKKyAgaWYgKG0tPnRvcCAhPSAwKSB7ICAgLyogY2hlY2sgdG9wIGNodW5rICovCisgICAgZG9fY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgLyphc3NlcnQobS0+dG9wc2l6ZSA9PSBjaHVua3NpemUobS0+dG9wKSk7IHJlZHVuZGFudCAqLworICAgIGFzc2VydChtLT50b3BzaXplID4gMCk7CisgICAgYXNzZXJ0KGJpbl9maW5kKG0sIG0tPnRvcCkgPT0gMCk7CisgIH0KKworICB0b3RhbCA9IHRyYXZlcnNlX2FuZF9jaGVjayhtKTsKKyAgYXNzZXJ0KHRvdGFsIDw9IG0tPmZvb3RwcmludCk7CisgIGFzc2VydChtLT5mb290cHJpbnQgPD0gbS0+bWF4X2Zvb3RwcmludCk7Cit9CisjZW5kaWYgLyogREVCVUcgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhdGlzdGljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICFOT19NQUxMSU5GTworc3RhdGljIHN0cnVjdCBtYWxsaW5mbyBpbnRlcm5hbF9tYWxsaW5mbyhtc3RhdGUgbSkgeworICBzdHJ1Y3QgbWFsbGluZm8gbm0gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgc2l6ZV90IG5mcmVlID0gU0laRV9UX09ORTsgLyogdG9wIGFsd2F5cyBmcmVlICovCisgICAgICBzaXplX3QgbWZyZWUgPSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRTsKKyAgICAgIHNpemVfdCBzdW0gPSBtZnJlZTsKKyAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgd2hpbGUgKHMgIT0gMCkgeworCW1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisJd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKwkgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworCSAgc2l6ZV90IHN6ID0gY2h1bmtzaXplKHEpOworCSAgc3VtICs9IHN6OworCSAgaWYgKCFjaW51c2UocSkpIHsKKwkgICAgbWZyZWUgKz0gc3o7CisJICAgICsrbmZyZWU7CisJICB9CisJICBxID0gbmV4dF9jaHVuayhxKTsKKwl9CisJcyA9IHMtPm5leHQ7CisgICAgICB9CisKKyAgICAgIG5tLmFyZW5hICAgID0gc3VtOworICAgICAgbm0ub3JkYmxrcyAgPSBuZnJlZTsKKyAgICAgIG5tLmhibGtoZCAgID0gbS0+Zm9vdHByaW50IC0gc3VtOworICAgICAgbm0udXNtYmxrcyAgPSBtLT5tYXhfZm9vdHByaW50OworICAgICAgbm0udW9yZGJsa3MgPSBtLT5mb290cHJpbnQgLSBtZnJlZTsKKyAgICAgIG5tLmZvcmRibGtzID0gbWZyZWU7CisgICAgICBubS5rZWVwY29zdCA9IG0tPnRvcHNpemU7CisgICAgfQorCisgICAgUE9TVEFDVElPTihtKTsKKyAgfQorICByZXR1cm4gbm07Cit9CisjZW5kaWYgLyogIU5PX01BTExJTkZPICovCisKK3N0YXRpYyB2b2lkIGludGVybmFsX21hbGxvY19zdGF0cyhtc3RhdGUgbSkgeworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICBzaXplX3QgbWF4ZnAgPSAwOworICAgIHNpemVfdCBmcCA9IDA7CisgICAgc2l6ZV90IHVzZWQgPSAwOworICAgIGNoZWNrX21hbGxvY19zdGF0ZShtKTsKKyAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgbWF4ZnAgPSBtLT5tYXhfZm9vdHByaW50OworICAgICAgZnAgPSBtLT5mb290cHJpbnQ7CisgICAgICB1c2VkID0gZnAgLSAobS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkUpOworCisgICAgICB3aGlsZSAocyAhPSAwKSB7CisJbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKKwl3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorCSAgICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisJICBpZiAoIWNpbnVzZShxKSkKKwkgICAgdXNlZCAtPSBjaHVua3NpemUocSk7CisJICBxID0gbmV4dF9jaHVuayhxKTsKKwl9CisJcyA9IHMtPm5leHQ7CisgICAgICB9CisgICAgfQorCisgICAgZnByaW50ZihzdGRlcnIsICJtYXggc3lzdGVtIGJ5dGVzID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKShtYXhmcCkpOworICAgIGZwcmludGYoc3RkZXJyLCAic3lzdGVtIGJ5dGVzICAgICA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykoZnApKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImluIHVzZSBieXRlcyAgICAgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKHVzZWQpKTsKKworICAgIFBPU1RBQ1RJT04obSk7CisgIH0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBzbWFsbGJpbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgVmFyaW91cyBmb3JtcyBvZiBsaW5raW5nIGFuZCB1bmxpbmtpbmcgYXJlIGRlZmluZWQgYXMgbWFjcm9zLiAgRXZlbgorICB0aGUgb25lcyBmb3IgdHJlZXMsIHdoaWNoIGFyZSB2ZXJ5IGxvbmcgYnV0IGhhdmUgdmVyeSBzaG9ydCB0eXBpY2FsCisgIHBhdGhzLiAgVGhpcyBpcyB1Z2x5IGJ1dCByZWR1Y2VzIHJlbGlhbmNlIG9uIGlubGluaW5nIHN1cHBvcnQgb2YKKyAgY29tcGlsZXJzLgorKi8KKworLyogTGluayBhIGZyZWUgY2h1bmsgaW50byBhIHNtYWxsYmluICAqLworI2RlZmluZSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUykge1wKKyAgYmluZGV4X3QgSSAgPSBzbWFsbF9pbmRleChTKTtcCisgIG1jaHVua3B0ciBCID0gc21hbGxiaW5fYXQoTSwgSSk7XAorICBtY2h1bmtwdHIgRiA9IEI7XAorICBhc3NlcnQoUyA+PSBNSU5fQ0hVTktfU0laRSk7XAorICBpZiAoIXNtYWxsbWFwX2lzX21hcmtlZChNLCBJKSlcCisgICAgbWFya19zbWFsbG1hcChNLCBJKTtcCisgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBCLT5mZCkpKVwKKyAgICBGID0gQi0+ZmQ7XAorICBlbHNlIHtcCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICB9XAorICBCLT5mZCA9IFA7XAorICBGLT5iayA9IFA7XAorICBQLT5mZCA9IEY7XAorICBQLT5iayA9IEI7XAorfQorCisvKiBVbmxpbmsgYSBjaHVuayBmcm9tIGEgc21hbGxiaW4gICovCisjZGVmaW5lIHVubGlua19zbWFsbF9jaHVuayhNLCBQLCBTKSB7XAorICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wKKyAgbWNodW5rcHRyIEIgPSBQLT5iaztcCisgIGJpbmRleF90IEkgPSBzbWFsbF9pbmRleChTKTtcCisgIGFzc2VydChQICE9IEIpO1wKKyAgYXNzZXJ0KFAgIT0gRik7XAorICBhc3NlcnQoY2h1bmtzaXplKFApID09IHNtYWxsX2luZGV4MnNpemUoSSkpO1wKKyAgaWYgKEYgPT0gQilcCisgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKChGID09IHNtYWxsYmluX2F0KE0sSSkgfHwgb2tfYWRkcmVzcyhNLCBGKSkgJiZcCisJCSAgIChCID09IHNtYWxsYmluX2F0KE0sSSkgfHwgb2tfYWRkcmVzcyhNLCBCKSkpKSB7XAorICAgIEYtPmJrID0gQjtcCisgICAgQi0+ZmQgPSBGO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKK30KKworLyogVW5saW5rIHRoZSBmaXJzdCBjaHVuayBmcm9tIGEgc21hbGxiaW4gKi8KKyNkZWZpbmUgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKE0sIEIsIFAsIEkpIHtcCisgIG1jaHVua3B0ciBGID0gUC0+ZmQ7XAorICBhc3NlcnQoUCAhPSBCKTtcCisgIGFzc2VydChQICE9IEYpO1wKKyAgYXNzZXJ0KGNodW5rc2l6ZShQKSA9PSBzbWFsbF9pbmRleDJzaXplKEkpKTtcCisgIGlmIChCID09IEYpXAorICAgIGNsZWFyX3NtYWxsbWFwKE0sIEkpO1wKKyAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEYpKSkge1wKKyAgICBCLT5mZCA9IEY7XAorICAgIEYtPmJrID0gQjtcCisgIH1cCisgIGVsc2Uge1wKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIH1cCit9CisKKworCisvKiBSZXBsYWNlIGR2IG5vZGUsIGJpbm5pbmcgdGhlIG9sZCBvbmUgKi8KKy8qIFVzZWQgb25seSB3aGVuIGR2c2l6ZSBrbm93biB0byBiZSBzbWFsbCAqLworI2RlZmluZSByZXBsYWNlX2R2KE0sIFAsIFMpIHtcCisgIHNpemVfdCBEVlMgPSBNLT5kdnNpemU7XAorICBpZiAoRFZTICE9IDApIHtcCisgICAgbWNodW5rcHRyIERWID0gTS0+ZHY7XAorICAgIGFzc2VydChpc19zbWFsbChEVlMpKTtcCisgICAgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIERWLCBEVlMpO1wKKyAgfVwKKyAgTS0+ZHZzaXplID0gUztcCisgIE0tPmR2ID0gUDtcCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiB0cmVlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEluc2VydCBjaHVuayBpbnRvIHRyZWUgKi8KKyNkZWZpbmUgaW5zZXJ0X2xhcmdlX2NodW5rKE0sIFgsIFMpIHtcCisgIHRiaW5wdHIqIEg7XAorICBiaW5kZXhfdCBJO1wKKyAgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpO1wKKyAgSCA9IHRyZWViaW5fYXQoTSwgSSk7XAorICBYLT5pbmRleCA9IEk7XAorICBYLT5jaGlsZFswXSA9IFgtPmNoaWxkWzFdID0gMDtcCisgIGlmICghdHJlZW1hcF9pc19tYXJrZWQoTSwgSSkpIHtcCisgICAgbWFya190cmVlbWFwKE0sIEkpO1wKKyAgICAqSCA9IFg7XAorICAgIFgtPnBhcmVudCA9ICh0Y2h1bmtwdHIpSDtcCisgICAgWC0+ZmQgPSBYLT5iayA9IFg7XAorICB9XAorICBlbHNlIHtcCisgICAgdGNodW5rcHRyIFQgPSAqSDtcCisgICAgc2l6ZV90IEsgPSBTIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChJKTtcCisgICAgZm9yICg7Oykge1wKKyAgICAgIGlmIChjaHVua3NpemUoVCkgIT0gUykge1wKKwl0Y2h1bmtwdHIqIEMgPSAmKFQtPmNoaWxkWyhLID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXSk7XAorCUsgPDw9IDE7XAorCWlmICgqQyAhPSAwKVwKKwkgIFQgPSAqQztcCisJZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMpKSkge1wKKwkgICpDID0gWDtcCisJICBYLT5wYXJlbnQgPSBUO1wKKwkgIFgtPmZkID0gWC0+YmsgPSBYO1wKKwkgIGJyZWFrO1wKKwl9XAorCWVsc2Uge1wKKwkgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKwkgIGJyZWFrO1wKKwl9XAorICAgICAgfVwKKyAgICAgIGVsc2Uge1wKKwl0Y2h1bmtwdHIgRiA9IFQtPmZkO1wKKwlpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFQpICYmIG9rX2FkZHJlc3MoTSwgRikpKSB7XAorCSAgVC0+ZmQgPSBGLT5iayA9IFg7XAorCSAgWC0+ZmQgPSBGO1wKKwkgIFgtPmJrID0gVDtcCisJICBYLT5wYXJlbnQgPSAwO1wKKwkgIGJyZWFrO1wKKwl9XAorCWVsc2Uge1wKKwkgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKwkgIGJyZWFrO1wKKwl9XAorICAgICAgfVwKKyAgICB9XAorICB9XAorfQorCisvKgorICBVbmxpbmsgc3RlcHM6CisKKyAgMS4gSWYgeCBpcyBhIGNoYWluZWQgbm9kZSwgdW5saW5rIGl0IGZyb20gaXRzIHNhbWUtc2l6ZWQgZmQvYmsgbGlua3MKKyAgICAgYW5kIGNob29zZSBpdHMgYmsgbm9kZSBhcyBpdHMgcmVwbGFjZW1lbnQuCisgIDIuIElmIHggd2FzIHRoZSBsYXN0IG5vZGUgb2YgaXRzIHNpemUsIGJ1dCBub3QgYSBsZWFmIG5vZGUsIGl0IG11c3QKKyAgICAgYmUgcmVwbGFjZWQgd2l0aCBhIGxlYWYgbm9kZSAobm90IG1lcmVseSBvbmUgd2l0aCBhbiBvcGVuIGxlZnQgb3IKKyAgICAgcmlnaHQpLCB0byBtYWtlIHN1cmUgdGhhdCBsZWZ0cyBhbmQgcmlnaHRzIG9mIGRlc2NlbmRlbnRzCisgICAgIGNvcnJlc3BvbmQgcHJvcGVybHkgdG8gYml0IG1hc2tzLiAgV2UgdXNlIHRoZSByaWdodG1vc3QgZGVzY2VuZGVudAorICAgICBvZiB4LiAgV2UgY291bGQgdXNlIGFueSBvdGhlciBsZWFmLCBidXQgdGhpcyBpcyBlYXN5IHRvIGxvY2F0ZSBhbmQKKyAgICAgdGVuZHMgdG8gY291bnRlcmFjdCByZW1vdmFsIG9mIGxlZnRtb3N0cyBlbHNld2hlcmUsIGFuZCBzbyBrZWVwcworICAgICBwYXRocyBzaG9ydGVyIHRoYW4gbWluaW1hbGx5IGd1YXJhbnRlZWQuICBUaGlzIGRvZXNuJ3QgbG9vcCBtdWNoCisgICAgIGJlY2F1c2Ugb24gYXZlcmFnZSBhIG5vZGUgaW4gYSB0cmVlIGlzIG5lYXIgdGhlIGJvdHRvbS4KKyAgMy4gSWYgeCBpcyB0aGUgYmFzZSBvZiBhIGNoYWluIChpLmUuLCBoYXMgcGFyZW50IGxpbmtzKSByZWxpbmsKKyAgICAgeCdzIHBhcmVudCBhbmQgY2hpbGRyZW4gdG8geCdzIHJlcGxhY2VtZW50IChvciBudWxsIGlmIG5vbmUpLgorKi8KKworI2RlZmluZSB1bmxpbmtfbGFyZ2VfY2h1bmsoTSwgWCkge1wKKyAgdGNodW5rcHRyIFhQID0gWC0+cGFyZW50O1wKKyAgdGNodW5rcHRyIFI7XAorICBpZiAoWC0+YmsgIT0gWCkge1wKKyAgICB0Y2h1bmtwdHIgRiA9IFgtPmZkO1wKKyAgICBSID0gWC0+Yms7XAorICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgRikpKSB7XAorICAgICAgRi0+YmsgPSBSO1wKKyAgICAgIFItPmZkID0gRjtcCisgICAgfVwKKyAgICBlbHNlIHtcCisgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgfVwKKyAgfVwKKyAgZWxzZSB7XAorICAgIHRjaHVua3B0ciogUlA7XAorICAgIGlmICgoKFIgPSAqKFJQID0gJihYLT5jaGlsZFsxXSkpKSAhPSAwKSB8fFwKKwkoKFIgPSAqKFJQID0gJihYLT5jaGlsZFswXSkpKSAhPSAwKSkge1wKKyAgICAgIHRjaHVua3B0ciogQ1A7XAorICAgICAgd2hpbGUgKCgqKENQID0gJihSLT5jaGlsZFsxXSkpICE9IDApIHx8XAorCSAgICAgKCooQ1AgPSAmKFItPmNoaWxkWzBdKSkgIT0gMCkpIHtcCisJUiA9ICooUlAgPSBDUCk7XAorICAgICAgfVwKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgUlApKSlcCisJKlJQID0gMDtcCisgICAgICBlbHNlIHtcCisJQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgICAgfVwKKyAgICB9XAorICB9XAorICBpZiAoWFAgIT0gMCkge1wKKyAgICB0YmlucHRyKiBIID0gdHJlZWJpbl9hdChNLCBYLT5pbmRleCk7XAorICAgIGlmIChYID09ICpIKSB7XAorICAgICAgaWYgKCgqSCA9IFIpID09IDApIFwKKwljbGVhcl90cmVlbWFwKE0sIFgtPmluZGV4KTtcCisgICAgfVwKKyAgICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgWFApKSkge1wKKyAgICAgIGlmIChYUC0+Y2hpbGRbMF0gPT0gWCkgXAorCVhQLT5jaGlsZFswXSA9IFI7XAorICAgICAgZWxzZSBcCisJWFAtPmNoaWxkWzFdID0gUjtcCisgICAgfVwKKyAgICBlbHNlXAorICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIGlmIChSICE9IDApIHtcCisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFIpKSkge1wKKwl0Y2h1bmtwdHIgQzAsIEMxO1wKKwlSLT5wYXJlbnQgPSBYUDtcCisJaWYgKChDMCA9IFgtPmNoaWxkWzBdKSAhPSAwKSB7XAorCSAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDMCkpKSB7XAorCSAgICBSLT5jaGlsZFswXSA9IEMwO1wKKwkgICAgQzAtPnBhcmVudCA9IFI7XAorCSAgfVwKKwkgIGVsc2VcCisJICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKwl9XAorCWlmICgoQzEgPSBYLT5jaGlsZFsxXSkgIT0gMCkge1wKKwkgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQzEpKSkge1wKKwkgICAgUi0+Y2hpbGRbMV0gPSBDMTtcCisJICAgIEMxLT5wYXJlbnQgPSBSO1wKKwkgIH1cCisJICBlbHNlXAorCSAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisJfVwKKyAgICAgIH1cCisgICAgICBlbHNlXAorCUNPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICB9XAorICB9XAorfQorCisvKiBSZWxheXMgdG8gbGFyZ2UgdnMgc21hbGwgYmluIG9wZXJhdGlvbnMgKi8KKworI2RlZmluZSBpbnNlcnRfY2h1bmsoTSwgUCwgUylcCisgIGlmIChpc19zbWFsbChTKSkgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIFAsIFMpXAorICBlbHNlIHsgdGNodW5rcHRyIFRQID0gKHRjaHVua3B0cikoUCk7IGluc2VydF9sYXJnZV9jaHVuayhNLCBUUCwgUyk7IH0KKworI2RlZmluZSB1bmxpbmtfY2h1bmsoTSwgUCwgUylcCisgIGlmIChpc19zbWFsbChTKSkgdW5saW5rX3NtYWxsX2NodW5rKE0sIFAsIFMpXAorICBlbHNlIHsgdGNodW5rcHRyIFRQID0gKHRjaHVua3B0cikoUCk7IHVubGlua19sYXJnZV9jaHVuayhNLCBUUCk7IH0KKworCisvKiBSZWxheXMgdG8gaW50ZXJuYWwgY2FsbHMgdG8gbWFsbG9jL2ZyZWUgZnJvbSByZWFsbG9jLCBtZW1hbGlnbiBldGMgKi8KKworI2lmIE9OTFlfTVNQQUNFUworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYikgbXNwYWNlX21hbGxvYyhtLCBiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSkgbXNwYWNlX2ZyZWUobSxtZW0pOworI2Vsc2UgLyogT05MWV9NU1BBQ0VTICovCisjaWYgTVNQQUNFUworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYilcCisgICAobSA9PSBnbSk/IGRsbWFsbG9jKGIpIDogbXNwYWNlX21hbGxvYyhtLCBiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSlcCisgICBpZiAobSA9PSBnbSkgZGxmcmVlKG1lbSk7IGVsc2UgbXNwYWNlX2ZyZWUobSxtZW0pOworI2Vsc2UgLyogTVNQQUNFUyAqLworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYikgZGxtYWxsb2MoYikKKyNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pIGRsZnJlZShtZW0pCisjZW5kaWYgLyogTVNQQUNFUyAqLworI2VuZGlmIC8qIE9OTFlfTVNQQUNFUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRGlyZWN0LW1tYXBwaW5nIGNodW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBEaXJlY3RseSBtbWFwcGVkIGNodW5rcyBhcmUgc2V0IHVwIHdpdGggYW4gb2Zmc2V0IHRvIHRoZSBzdGFydCBvZgorICB0aGUgbW1hcHBlZCByZWdpb24gc3RvcmVkIGluIHRoZSBwcmV2X2Zvb3QgZmllbGQgb2YgdGhlIGNodW5rLiBUaGlzCisgIGFsbG93cyByZWNvbnN0cnVjdGlvbiBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnQgdG8gTVVOTUFQIHdoZW4gZnJlZWQsCisgIGFuZCBhbHNvIGFsbG93cyBhZGp1c3RtZW50IG9mIHRoZSByZXR1cm5lZCBjaHVuayB0byBtZWV0IGFsaWdubWVudAorICByZXF1aXJlbWVudHMgKGVzcGVjaWFsbHkgaW4gbWVtYWxpZ24pLiAgVGhlcmUgaXMgYWxzbyBlbm91Z2ggc3BhY2UKKyAgYWxsb2NhdGVkIHRvIGhvbGQgYSBmYWtlIG5leHQgY2h1bmsgb2Ygc2l6ZSBTSVpFX1RfU0laRSB0byBtYWludGFpbgorICB0aGUgUElOVVNFIGJpdCBzbyBmcmVlcyBjYW4gYmUgY2hlY2tlZC4KKyovCisKKy8qIE1hbGxvYyB1c2luZyBtbWFwICovCitzdGF0aWMgdm9pZCogbW1hcF9hbGxvYyhtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIHNpemVfdCBtbXNpemUgPSBtbWFwX2FsaWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworICBpZiAobW1zaXplID4gbmIpIHsgICAgIC8qIENoZWNrIGZvciB3cmFwIGFyb3VuZCAwICovCisgICAgY2hhciogbW0gPSAoY2hhciopKENBTExfRElSRUNUX01NQVAobW1zaXplKSk7CisgICAgaWYgKG1tICE9IENNRkFJTCkgeworICAgICAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0obW0pKTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IG1tc2l6ZSAtIG9mZnNldCAtIE1NQVBfRk9PVF9QQUQ7CisgICAgICBtY2h1bmtwdHIgcCA9IChtY2h1bmtwdHIpKG1tICsgb2Zmc2V0KTsKKyAgICAgIHAtPnByZXZfZm9vdCA9IG9mZnNldCB8IElTX01NQVBQRURfQklUOworICAgICAgKHApLT5oZWFkID0gKHBzaXplfENJTlVTRV9CSVQpOworICAgICAgbWFya19pbnVzZV9mb290KG0sIHAsIHBzaXplKTsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKS0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUrU0laRV9UX1NJWkUpLT5oZWFkID0gMDsKKworICAgICAgaWYgKG1tIDwgbS0+bGVhc3RfYWRkcikKKwltLT5sZWFzdF9hZGRyID0gbW07CisgICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBtbXNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKwltLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworICAgICAgYXNzZXJ0KGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSk7CisgICAgICBjaGVja19tbWFwcGVkX2NodW5rKG0sIHApOworICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIFJlYWxsb2MgdXNpbmcgbW1hcCAqLworc3RhdGljIG1jaHVua3B0ciBtbWFwX3Jlc2l6ZShtc3RhdGUgbSwgbWNodW5rcHRyIG9sZHAsIHNpemVfdCBuYikgeworICBzaXplX3Qgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKKyAgaWYgKGlzX3NtYWxsKG5iKSkgLyogQ2FuJ3Qgc2hyaW5rIG1tYXAgcmVnaW9ucyBiZWxvdyBzbWFsbCBzaXplICovCisgICAgcmV0dXJuIDA7CisgIC8qIEtlZXAgb2xkIGNodW5rIGlmIGJpZyBlbm91Z2ggYnV0IG5vdCB0b28gYmlnICovCisgIGlmIChvbGRzaXplID49IG5iICsgU0laRV9UX1NJWkUgJiYKKyAgICAgIChvbGRzaXplIC0gbmIpIDw9IChtcGFyYW1zLmdyYW51bGFyaXR5IDw8IDEpKQorICAgIHJldHVybiBvbGRwOworICBlbHNlIHsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gb2xkcC0+cHJldl9mb290ICYgfklTX01NQVBQRURfQklUOworICAgIHNpemVfdCBvbGRtbXNpemUgPSBvbGRzaXplICsgb2Zmc2V0ICsgTU1BUF9GT09UX1BBRDsKKyAgICBzaXplX3QgbmV3bW1zaXplID0gbW1hcF9hbGlnbihuYiArIFNJWF9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgICBjaGFyKiBjcCA9IChjaGFyKilDQUxMX01SRU1BUCgoY2hhciopb2xkcCAtIG9mZnNldCwKKwkJCQkgIG9sZG1tc2l6ZSwgbmV3bW1zaXplLCAxKTsKKyAgICBpZiAoY3AgIT0gQ01GQUlMKSB7CisgICAgICBtY2h1bmtwdHIgbmV3cCA9IChtY2h1bmtwdHIpKGNwICsgb2Zmc2V0KTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IG5ld21tc2l6ZSAtIG9mZnNldCAtIE1NQVBfRk9PVF9QQUQ7CisgICAgICBuZXdwLT5oZWFkID0gKHBzaXplfENJTlVTRV9CSVQpOworICAgICAgbWFya19pbnVzZV9mb290KG0sIG5ld3AsIHBzaXplKTsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIHBzaXplKS0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUrU0laRV9UX1NJWkUpLT5oZWFkID0gMDsKKworICAgICAgaWYgKGNwIDwgbS0+bGVhc3RfYWRkcikKKwltLT5sZWFzdF9hZGRyID0gY3A7CisgICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBuZXdtbXNpemUgLSBvbGRtbXNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKwltLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworICAgICAgY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBuZXdwKTsKKyAgICAgIHJldHVybiBuZXdwOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbXNwYWNlIG1hbmFnZW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSW5pdGlhbGl6ZSB0b3AgY2h1bmsgYW5kIGl0cyBzaXplICovCitzdGF0aWMgdm9pZCBpbml0X3RvcChtc3RhdGUgbSwgbWNodW5rcHRyIHAsIHNpemVfdCBwc2l6ZSkgeworICAvKiBFbnN1cmUgYWxpZ25tZW50ICovCisgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKHApKTsKKyAgcCA9IChtY2h1bmtwdHIpKChjaGFyKilwICsgb2Zmc2V0KTsKKyAgcHNpemUgLT0gb2Zmc2V0OworCisgIG0tPnRvcCA9IHA7CisgIG0tPnRvcHNpemUgPSBwc2l6ZTsKKyAgcC0+aGVhZCA9IHBzaXplIHwgUElOVVNFX0JJVDsKKyAgLyogc2V0IHNpemUgb2YgZmFrZSB0cmFpbGluZyBjaHVuayBob2xkaW5nIG92ZXJoZWFkIHNwYWNlIG9ubHkgb25jZSAqLworICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSktPmhlYWQgPSBUT1BfRk9PVF9TSVpFOworICBtLT50cmltX2NoZWNrID0gbXBhcmFtcy50cmltX3RocmVzaG9sZDsgLyogcmVzZXQgb24gZWFjaCB1cGRhdGUgKi8KK30KKworLyogSW5pdGlhbGl6ZSBiaW5zIGZvciBhIG5ldyBtc3RhdGUgdGhhdCBpcyBvdGhlcndpc2UgemVyb2VkIG91dCAqLworc3RhdGljIHZvaWQgaW5pdF9iaW5zKG1zdGF0ZSBtKSB7CisgIC8qIEVzdGFibGlzaCBjaXJjdWxhciBsaW5rcyBmb3Igc21hbGxiaW5zICovCisgIGJpbmRleF90IGk7CisgIGZvciAoaSA9IDA7IGkgPCBOU01BTExCSU5TOyArK2kpIHsKKyAgICBzYmlucHRyIGJpbiA9IHNtYWxsYmluX2F0KG0saSk7CisgICAgYmluLT5mZCA9IGJpbi0+YmsgPSBiaW47CisgIH0KK30KKworI2lmIFBST0NFRURfT05fRVJST1IKKworLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLworc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pIHsKKyAgaW50IGk7CisgICsrbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQ7CisgIC8qIFJlaW5pdGlhbGl6ZSBmaWVsZHMgdG8gZm9yZ2V0IGFib3V0IGFsbCBtZW1vcnkgKi8KKyAgbS0+c21hbGxiaW5zID0gbS0+dHJlZWJpbnMgPSAwOworICBtLT5kdnNpemUgPSBtLT50b3BzaXplID0gMDsKKyAgbS0+c2VnLmJhc2UgPSAwOworICBtLT5zZWcuc2l6ZSA9IDA7CisgIG0tPnNlZy5uZXh0ID0gMDsKKyAgbS0+dG9wID0gbS0+ZHYgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgTlRSRUVCSU5TOyArK2kpCisgICAgKnRyZWViaW5fYXQobSwgaSkgPSAwOworICBpbml0X2JpbnMobSk7Cit9CisjZW5kaWYgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisvKiBBbGxvY2F0ZSBjaHVuayBhbmQgcHJlcGVuZCByZW1haW5kZXIgd2l0aCBjaHVuayBpbiBzdWNjZXNzb3IgYmFzZS4gKi8KK3N0YXRpYyB2b2lkKiBwcmVwZW5kX2FsbG9jKG1zdGF0ZSBtLCBjaGFyKiBuZXdiYXNlLCBjaGFyKiBvbGRiYXNlLAorCQkJICAgc2l6ZV90IG5iKSB7CisgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsobmV3YmFzZSk7CisgIG1jaHVua3B0ciBvbGRmaXJzdCA9IGFsaWduX2FzX2NodW5rKG9sZGJhc2UpOworICBzaXplX3QgcHNpemUgPSAoY2hhciopb2xkZmlyc3QgLSAoY2hhciopcDsKKyAgbWNodW5rcHRyIHEgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgIHNpemVfdCBxc2l6ZSA9IHBzaXplIC0gbmI7CisgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgbmIpOworCisgIGFzc2VydCgoY2hhciopb2xkZmlyc3QgPiAoY2hhciopcSk7CisgIGFzc2VydChwaW51c2Uob2xkZmlyc3QpKTsKKyAgYXNzZXJ0KHFzaXplID49IE1JTl9DSFVOS19TSVpFKTsKKworICAvKiBjb25zb2xpZGF0ZSByZW1haW5kZXIgd2l0aCBmaXJzdCBjaHVuayBvZiBvbGQgYmFzZSAqLworICBpZiAob2xkZmlyc3QgPT0gbS0+dG9wKSB7CisgICAgc2l6ZV90IHRzaXplID0gbS0+dG9wc2l6ZSArPSBxc2l6ZTsKKyAgICBtLT50b3AgPSBxOworICAgIHEtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgY2hlY2tfdG9wX2NodW5rKG0sIHEpOworICB9CisgIGVsc2UgaWYgKG9sZGZpcnN0ID09IG0tPmR2KSB7CisgICAgc2l6ZV90IGRzaXplID0gbS0+ZHZzaXplICs9IHFzaXplOworICAgIG0tPmR2ID0gcTsKKyAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocSwgZHNpemUpOworICB9CisgIGVsc2UgeworICAgIGlmICghY2ludXNlKG9sZGZpcnN0KSkgeworICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG9sZGZpcnN0KTsKKyAgICAgIHVubGlua19jaHVuayhtLCBvbGRmaXJzdCwgbnNpemUpOworICAgICAgb2xkZmlyc3QgPSBjaHVua19wbHVzX29mZnNldChvbGRmaXJzdCwgbnNpemUpOworICAgICAgcXNpemUgKz0gbnNpemU7CisgICAgfQorICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHEsIHFzaXplLCBvbGRmaXJzdCk7CisgICAgaW5zZXJ0X2NodW5rKG0sIHEsIHFzaXplKTsKKyAgICBjaGVja19mcmVlX2NodW5rKG0sIHEpOworICB9CisKKyAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobSwgY2h1bmsybWVtKHApLCBuYik7CisgIHJldHVybiBjaHVuazJtZW0ocCk7Cit9CisKKy8qIEFkZCBhIHNlZ21lbnQgdG8gaG9sZCBhIG5ldyBub25jb250aWd1b3VzIHJlZ2lvbiAqLworc3RhdGljIHZvaWQgYWRkX3NlZ21lbnQobXN0YXRlIG0sIGNoYXIqIHRiYXNlLCBzaXplX3QgdHNpemUsIGZsYWdfdCBtbWFwcGVkKSB7CisgIC8qIERldGVybWluZSBsb2NhdGlvbnMgYW5kIHNpemVzIG9mIHNlZ21lbnQsIGZlbmNlcG9zdHMsIG9sZCB0b3AgKi8KKyAgY2hhciogb2xkX3RvcCA9IChjaGFyKiltLT50b3A7CisgIG1zZWdtZW50cHRyIG9sZHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIG9sZF90b3ApOworICBjaGFyKiBvbGRfZW5kID0gb2xkc3AtPmJhc2UgKyBvbGRzcC0+c2l6ZTsKKyAgc2l6ZV90IHNzaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpOworICBjaGFyKiByYXdzcCA9IG9sZF9lbmQgLSAoc3NpemUgKyBGT1VSX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShyYXdzcCkpOworICBjaGFyKiBhc3AgPSByYXdzcCArIG9mZnNldDsKKyAgY2hhciogY3NwID0gKGFzcCA8IChvbGRfdG9wICsgTUlOX0NIVU5LX1NJWkUpKT8gb2xkX3RvcCA6IGFzcDsKKyAgbWNodW5rcHRyIHNwID0gKG1jaHVua3B0ciljc3A7CisgIG1zZWdtZW50cHRyIHNzID0gKG1zZWdtZW50cHRyKShjaHVuazJtZW0oc3ApKTsKKyAgbWNodW5rcHRyIHRuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQoc3AsIHNzaXplKTsKKyAgbWNodW5rcHRyIHAgPSB0bmV4dDsKKyAgaW50IG5mZW5jZXMgPSAwOworCisgIC8qIHJlc2V0IHRvcCB0byBuZXcgc3BhY2UgKi8KKyAgaW5pdF90b3AobSwgKG1jaHVua3B0cil0YmFzZSwgdHNpemUgLSBUT1BfRk9PVF9TSVpFKTsKKworICAvKiBTZXQgdXAgc2VnbWVudCByZWNvcmQgKi8KKyAgYXNzZXJ0KGlzX2FsaWduZWQoc3MpKTsKKyAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBzcCwgc3NpemUpOworICAqc3MgPSBtLT5zZWc7IC8qIFB1c2ggY3VycmVudCByZWNvcmQgKi8KKyAgbS0+c2VnLmJhc2UgPSB0YmFzZTsKKyAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKKyAgbS0+c2VnLnNmbGFncyA9IG1tYXBwZWQ7CisgIG0tPnNlZy5uZXh0ID0gc3M7CisKKyAgLyogSW5zZXJ0IHRyYWlsaW5nIGZlbmNlcG9zdHMgKi8KKyAgZm9yICg7OykgeworICAgIG1jaHVua3B0ciBuZXh0cCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIFNJWkVfVF9TSVpFKTsKKyAgICBwLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgKytuZmVuY2VzOworICAgIGlmICgoY2hhciopKCYobmV4dHAtPmhlYWQpKSA8IG9sZF9lbmQpCisgICAgICBwID0gbmV4dHA7CisgICAgZWxzZQorICAgICAgYnJlYWs7CisgIH0KKyAgYXNzZXJ0KG5mZW5jZXMgPj0gMik7CisKKyAgLyogSW5zZXJ0IHRoZSByZXN0IG9mIG9sZCB0b3AgaW50byBhIGJpbiBhcyBhbiBvcmRpbmFyeSBmcmVlIGNodW5rICovCisgIGlmIChjc3AgIT0gb2xkX3RvcCkgeworICAgIG1jaHVua3B0ciBxID0gKG1jaHVua3B0cilvbGRfdG9wOworICAgIHNpemVfdCBwc2l6ZSA9IGNzcCAtIG9sZF90b3A7CisgICAgbWNodW5rcHRyIHRuID0gY2h1bmtfcGx1c19vZmZzZXQocSwgcHNpemUpOworICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHEsIHBzaXplLCB0bik7CisgICAgaW5zZXJ0X2NodW5rKG0sIHEsIHBzaXplKTsKKyAgfQorCisgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTeXN0ZW0gYWxsb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBHZXQgbWVtb3J5IGZyb20gc3lzdGVtIHVzaW5nIE1PUkVDT1JFIG9yIE1NQVAgKi8KK3N0YXRpYyB2b2lkKiBzeXNfYWxsb2MobXN0YXRlIG0sIHNpemVfdCBuYikgeworICBjaGFyKiB0YmFzZSA9IENNRkFJTDsKKyAgc2l6ZV90IHRzaXplID0gMDsKKyAgZmxhZ190IG1tYXBfZmxhZyA9IDA7CisKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisKKyAgLyogRGlyZWN0bHkgbWFwIGxhcmdlIGNodW5rcyAqLworICBpZiAodXNlX21tYXAobSkgJiYgbmIgPj0gbXBhcmFtcy5tbWFwX3RocmVzaG9sZCkgeworICAgIHZvaWQqIG1lbSA9IG1tYXBfYWxsb2MobSwgbmIpOworICAgIGlmIChtZW0gIT0gMCkKKyAgICAgIHJldHVybiBtZW07CisgIH0KKworICAvKgorICAgIFRyeSBnZXR0aW5nIG1lbW9yeSBpbiBhbnkgb2YgdGhyZWUgd2F5cyAoaW4gbW9zdC1wcmVmZXJyZWQgdG8KKyAgICBsZWFzdC1wcmVmZXJyZWQgb3JkZXIpOgorICAgIDEuIEEgY2FsbCB0byBNT1JFQ09SRSB0aGF0IGNhbiBub3JtYWxseSBjb250aWd1b3VzbHkgZXh0ZW5kIG1lbW9yeS4KKyAgICAgICAoZGlzYWJsZWQgaWYgbm90IE1PUkVDT1JFX0NPTlRJR1VPVVMgb3Igbm90IEhBVkVfTU9SRUNPUkUgb3IKKyAgICAgICBvciBtYWluIHNwYWNlIGlzIG1tYXBwZWQgb3IgYSBwcmV2aW91cyBjb250aWd1b3VzIGNhbGwgZmFpbGVkKQorICAgIDIuIEEgY2FsbCB0byBNTUFQIG5ldyBzcGFjZSAoZGlzYWJsZWQgaWYgbm90IEhBVkVfTU1BUCkuCisgICAgICAgTm90ZSB0aGF0IHVuZGVyIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBpZiBNT1JFQ09SRSBpcyB1bmFibGUgdG8KKyAgICAgICBmdWxmaWxsIGEgcmVxdWVzdCwgYW5kIEhBVkVfTU1BUCBpcyB0cnVlLCB0aGVuIG1tYXAgaXMKKyAgICAgICB1c2VkIGFzIGEgbm9uY29udGlndW91cyBzeXN0ZW0gYWxsb2NhdG9yLiBUaGlzIGlzIGEgdXNlZnVsIGJhY2t1cAorICAgICAgIHN0cmF0ZWd5IGZvciBzeXN0ZW1zIHdpdGggaG9sZXMgaW4gYWRkcmVzcyBzcGFjZXMgLS0gaW4gdGhpcyBjYXNlCisgICAgICAgc2JyayBjYW5ub3QgY29udGlndW91c2x5IGV4cGFuZCB0aGUgaGVhcCwgYnV0IG1tYXAgbWF5IGJlIGFibGUgdG8KKyAgICAgICBmaW5kIHNwYWNlLgorICAgIDMuIEEgY2FsbCB0byBNT1JFQ09SRSB0aGF0IGNhbm5vdCB1c3VhbGx5IGNvbnRpZ3VvdXNseSBleHRlbmQgbWVtb3J5LgorICAgICAgIChkaXNhYmxlZCBpZiBub3QgSEFWRV9NT1JFQ09SRSkKKworICAgSW4gYWxsIGNhc2VzLCB3ZSBuZWVkIHRvIHJlcXVlc3QgZW5vdWdoIGJ5dGVzIGZyb20gc3lzdGVtIHRvIGVuc3VyZQorICAgd2UgY2FuIG1hbGxvYyBuYiBieXRlcyB1cG9uIHN1Y2Nlc3MsIHNvIHBhZCB3aXRoIGVub3VnaCBzcGFjZSBmb3IKKyAgIHRvcF9mb290LCBwbHVzIGFsaWdubWVudC1wYWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGxvc2UgYnl0ZXMgaWYKKyAgIG5vdCBvbiBib3VuZGFyeSwgYW5kIHJvdW5kIHRoaXMgdXAgdG8gYSBncmFudWxhcml0eSB1bml0LgorICAqLworCisgIGlmIChNT1JFQ09SRV9DT05USUdVT1VTICYmICF1c2Vfbm9uY29udGlndW91cyhtKSkgeworICAgIGNoYXIqIGJyID0gQ01GQUlMOworICAgIG1zZWdtZW50cHRyIHNzID0gKG0tPnRvcCA9PSAwKT8gMCA6IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopbS0+dG9wKTsKKyAgICBzaXplX3QgYXNpemUgPSAwOworICAgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisKKyAgICBpZiAoc3MgPT0gMCkgeyAgLyogRmlyc3QgdGltZSB0aHJvdWdoIG9yIHJlY292ZXJ5ICovCisgICAgICBjaGFyKiBiYXNlID0gKGNoYXIqKUNBTExfTU9SRUNPUkUoMCk7CisgICAgICBpZiAoYmFzZSAhPSBDTUZBSUwpIHsKKwlhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcpOworCS8qIEFkanVzdCB0byBlbmQgb24gYSBwYWdlIGJvdW5kYXJ5ICovCisJaWYgKCFpc19wYWdlX2FsaWduZWQoYmFzZSkpCisJICBhc2l6ZSArPSAocGFnZV9hbGlnbigoc2l6ZV90KWJhc2UpIC0gKHNpemVfdCliYXNlKTsKKwkvKiBDYW4ndCBjYWxsIE1PUkVDT1JFIGlmIHNpemUgaXMgbmVnYXRpdmUgd2hlbiB0cmVhdGVkIGFzIHNpZ25lZCAqLworCWlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorCSAgICAoYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKSkgPT0gYmFzZSkgeworCSAgdGJhc2UgPSBiYXNlOworCSAgdHNpemUgPSBhc2l6ZTsKKwl9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogU3VidHJhY3Qgb3V0IGV4aXN0aW5nIGF2YWlsYWJsZSB0b3Agc3BhY2UgZnJvbSBNT1JFQ09SRSByZXF1ZXN0LiAqLworICAgICAgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiAtIG0tPnRvcHNpemUgKyBTWVNfQUxMT0NfUEFERElORyk7CisgICAgICAvKiBVc2UgbWVtIGhlcmUgb25seSBpZiBpdCBkaWQgY29udGludW91c2x5IGV4dGVuZCBvbGQgc3BhY2UgKi8KKyAgICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorCSAgKGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSkpID09IHNzLT5iYXNlK3NzLT5zaXplKSB7CisJdGJhc2UgPSBicjsKKwl0c2l6ZSA9IGFzaXplOworICAgICAgfQorICAgIH0KKworICAgIGlmICh0YmFzZSA9PSBDTUZBSUwpIHsgICAgLyogQ29wZSB3aXRoIHBhcnRpYWwgZmFpbHVyZSAqLworICAgICAgaWYgKGJyICE9IENNRkFJTCkgeyAgICAvKiBUcnkgdG8gdXNlL2V4dGVuZCB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLworCWlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorCSAgICBhc2l6ZSA8IG5iICsgU1lTX0FMTE9DX1BBRERJTkcpIHsKKwkgIHNpemVfdCBlc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcgLSBhc2l6ZSk7CisJICBpZiAoZXNpemUgPCBIQUxGX01BWF9TSVpFX1QpIHsKKwkgICAgY2hhciogZW5kID0gKGNoYXIqKUNBTExfTU9SRUNPUkUoZXNpemUpOworCSAgICBpZiAoZW5kICE9IENNRkFJTCkKKwkgICAgICBhc2l6ZSArPSBlc2l6ZTsKKwkgICAgZWxzZSB7ICAgICAgICAgICAgLyogQ2FuJ3QgdXNlOyB0cnkgdG8gcmVsZWFzZSAqLworCSAgICAgICh2b2lkKSBDQUxMX01PUkVDT1JFKC1hc2l6ZSk7CisJICAgICAgYnIgPSBDTUZBSUw7CisJICAgIH0KKwkgIH0KKwl9CisgICAgICB9CisgICAgICBpZiAoYnIgIT0gQ01GQUlMKSB7ICAgIC8qIFVzZSB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLworCXRiYXNlID0gYnI7CisJdHNpemUgPSBhc2l6ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKwlkaXNhYmxlX2NvbnRpZ3VvdXMobSk7IC8qIERvbid0IHRyeSBjb250aWd1b3VzIHBhdGggaW4gdGhlIGZ1dHVyZSAqLworICAgIH0KKworICAgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgIH0KKworICBpZiAoSEFWRV9NTUFQICYmIHRiYXNlID09IENNRkFJTCkgeyAgLyogVHJ5IE1NQVAgKi8KKyAgICBzaXplX3QgcnNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNZU19BTExPQ19QQURESU5HKTsKKyAgICBpZiAocnNpemUgPiBuYikgeyAvKiBGYWlsIGlmIHdyYXBzIGFyb3VuZCB6ZXJvICovCisgICAgICBjaGFyKiBtcCA9IChjaGFyKikoQ0FMTF9NTUFQKHJzaXplKSk7CisgICAgICBpZiAobXAgIT0gQ01GQUlMKSB7CisJdGJhc2UgPSBtcDsKKwl0c2l6ZSA9IHJzaXplOworCW1tYXBfZmxhZyA9IElTX01NQVBQRURfQklUOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChIQVZFX01PUkVDT1JFICYmIHRiYXNlID09IENNRkFJTCkgeyAvKiBUcnkgbm9uY29udGlndW91cyBNT1JFQ09SRSAqLworICAgIHNpemVfdCBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcpOworICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCkgeworICAgICAgY2hhciogYnIgPSBDTUZBSUw7CisgICAgICBjaGFyKiBlbmQgPSBDTUZBSUw7CisgICAgICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworICAgICAgYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKTsKKyAgICAgIGVuZCA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisgICAgICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworICAgICAgaWYgKGJyICE9IENNRkFJTCAmJiBlbmQgIT0gQ01GQUlMICYmIGJyIDwgZW5kKSB7CisJc2l6ZV90IHNzaXplID0gZW5kIC0gYnI7CisJaWYgKHNzaXplID4gbmIgKyBUT1BfRk9PVF9TSVpFKSB7CisJICB0YmFzZSA9IGJyOworCSAgdHNpemUgPSBzc2l6ZTsKKwl9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHRiYXNlICE9IENNRkFJTCkgeworCisgICAgaWYgKChtLT5mb290cHJpbnQgKz0gdHNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKyAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisKKyAgICBpZiAoIWlzX2luaXRpYWxpemVkKG0pKSB7IC8qIGZpcnN0LXRpbWUgaW5pdGlhbGl6YXRpb24gKi8KKyAgICAgIG0tPnNlZy5iYXNlID0gbS0+bGVhc3RfYWRkciA9IHRiYXNlOworICAgICAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKKyAgICAgIG0tPnNlZy5zZmxhZ3MgPSBtbWFwX2ZsYWc7CisgICAgICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7CisgICAgICBtLT5yZWxlYXNlX2NoZWNrcyA9IE1BWF9SRUxFQVNFX0NIRUNLX1JBVEU7CisgICAgICBpbml0X2JpbnMobSk7CisjaWYgIU9OTFlfTVNQQUNFUworICAgICAgaWYgKGlzX2dsb2JhbChtKSkKKwlpbml0X3RvcChtLCAobWNodW5rcHRyKXRiYXNlLCB0c2l6ZSAtIFRPUF9GT09UX1NJWkUpOworICAgICAgZWxzZQorI2VuZGlmCisgICAgICB7CisJLyogT2Zmc2V0IHRvcCBieSBlbWJlZGRlZCBtYWxsb2Nfc3RhdGUgKi8KKwltY2h1bmtwdHIgbW4gPSBuZXh0X2NodW5rKG1lbTJjaHVuayhtKSk7CisJaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyKiltbikgLVRPUF9GT09UX1NJWkUpOworICAgICAgfQorICAgIH0KKworICAgIGVsc2UgeworICAgICAgLyogVHJ5IHRvIG1lcmdlIHdpdGggYW4gZXhpc3Rpbmcgc2VnbWVudCAqLworICAgICAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICAgICAgLyogT25seSBjb25zaWRlciBtb3N0IHJlY2VudCBzZWdtZW50IGlmIHRyYXZlcnNhbCBzdXBwcmVzc2VkICovCisgICAgICB3aGlsZSAoc3AgIT0gMCAmJiB0YmFzZSAhPSBzcC0+YmFzZSArIHNwLT5zaXplKQorCXNwID0gKE5PX1NFR01FTlRfVFJBVkVSU0FMKSA/IDAgOiBzcC0+bmV4dDsKKyAgICAgIGlmIChzcCAhPSAwICYmCisJICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisJICAoc3AtPnNmbGFncyAmIElTX01NQVBQRURfQklUKSA9PSBtbWFwX2ZsYWcgJiYKKwkgIHNlZ21lbnRfaG9sZHMoc3AsIG0tPnRvcCkpIHsgLyogYXBwZW5kICovCisJc3AtPnNpemUgKz0gdHNpemU7CisJaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplICsgdHNpemUpOworICAgICAgfQorICAgICAgZWxzZSB7CisJaWYgKHRiYXNlIDwgbS0+bGVhc3RfYWRkcikKKwkgIG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKwlzcCA9ICZtLT5zZWc7CisJd2hpbGUgKHNwICE9IDAgJiYgc3AtPmJhc2UgIT0gdGJhc2UgKyB0c2l6ZSkKKwkgIHNwID0gKE5PX1NFR01FTlRfVFJBVkVSU0FMKSA/IDAgOiBzcC0+bmV4dDsKKwlpZiAoc3AgIT0gMCAmJgorCSAgICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisJICAgIChzcC0+c2ZsYWdzICYgSVNfTU1BUFBFRF9CSVQpID09IG1tYXBfZmxhZykgeworCSAgY2hhciogb2xkYmFzZSA9IHNwLT5iYXNlOworCSAgc3AtPmJhc2UgPSB0YmFzZTsKKwkgIHNwLT5zaXplICs9IHRzaXplOworCSAgcmV0dXJuIHByZXBlbmRfYWxsb2MobSwgdGJhc2UsIG9sZGJhc2UsIG5iKTsKKwl9CisJZWxzZQorCSAgYWRkX3NlZ21lbnQobSwgdGJhc2UsIHRzaXplLCBtbWFwX2ZsYWcpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuYiA8IG0tPnRvcHNpemUpIHsgLyogQWxsb2NhdGUgZnJvbSBuZXcgb3IgZXh0ZW5kZWQgdG9wIHNwYWNlICovCisgICAgICBzaXplX3QgcnNpemUgPSBtLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IG0tPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIG5iKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobSwgY2h1bmsybWVtKHApLCBuYik7CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorCisgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBzeXN0ZW0gZGVhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFVubWFwIGFuZCB1bmxpbmsgYW55IG1tYXBwZWQgc2VnbWVudHMgdGhhdCBkb24ndCBjb250YWluIHVzZWQgY2h1bmtzICovCitzdGF0aWMgc2l6ZV90IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG1zdGF0ZSBtKSB7CisgIHNpemVfdCByZWxlYXNlZCA9IDA7CisgIGludCBuc2VncyA9IDA7CisgIG1zZWdtZW50cHRyIHByZWQgPSAmbS0+c2VnOworICBtc2VnbWVudHB0ciBzcCA9IHByZWQtPm5leHQ7CisgIHdoaWxlIChzcCAhPSAwKSB7CisgICAgY2hhciogYmFzZSA9IHNwLT5iYXNlOworICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7CisgICAgbXNlZ21lbnRwdHIgbmV4dCA9IHNwLT5uZXh0OworICAgICsrbnNlZ3M7CisgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkgJiYgIWlzX2V4dGVybl9zZWdtZW50KHNwKSkgeworICAgICAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhiYXNlKTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIC8qIENhbiB1bm1hcCBpZiBmaXJzdCBjaHVuayBob2xkcyBlbnRpcmUgc2VnbWVudCBhbmQgbm90IHBpbm5lZCAqLworICAgICAgaWYgKCFjaW51c2UocCkgJiYgKGNoYXIqKXAgKyBwc2l6ZSA+PSBiYXNlICsgc2l6ZSAtIFRPUF9GT09UX1NJWkUpIHsKKwl0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7CisJYXNzZXJ0KHNlZ21lbnRfaG9sZHMoc3AsIChjaGFyKilzcCkpOworCWlmIChwID09IG0tPmR2KSB7CisJICBtLT5kdiA9IDA7CisJICBtLT5kdnNpemUgPSAwOworCX0KKwllbHNlIHsKKwkgIHVubGlua19sYXJnZV9jaHVuayhtLCB0cCk7CisJfQorCWlmIChDQUxMX01VTk1BUChiYXNlLCBzaXplKSA9PSAwKSB7CisJICByZWxlYXNlZCArPSBzaXplOworCSAgbS0+Zm9vdHByaW50IC09IHNpemU7CisJICAvKiB1bmxpbmsgb2Jzb2xldGVkIHJlY29yZCAqLworCSAgc3AgPSBwcmVkOworCSAgc3AtPm5leHQgPSBuZXh0OworCX0KKwllbHNlIHsgLyogYmFjayBvdXQgaWYgY2Fubm90IHVubWFwICovCisJICBpbnNlcnRfbGFyZ2VfY2h1bmsobSwgdHAsIHBzaXplKTsKKwl9CisgICAgICB9CisgICAgfQorICAgIGlmIChOT19TRUdNRU5UX1RSQVZFUlNBTCkgLyogc2NhbiBvbmx5IGZpcnN0IHNlZ21lbnQgKi8KKyAgICAgIGJyZWFrOworICAgIHByZWQgPSBzcDsKKyAgICBzcCA9IG5leHQ7CisgIH0KKyAgLyogUmVzZXQgY2hlY2sgY291bnRlciAqLworICBtLT5yZWxlYXNlX2NoZWNrcyA9ICgobnNlZ3MgPiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFKT8KKwkJICAgICAgIG5zZWdzIDogTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSk7CisgIHJldHVybiByZWxlYXNlZDsKK30KKworc3RhdGljIGludCBzeXNfdHJpbShtc3RhdGUgbSwgc2l6ZV90IHBhZCkgeworICBzaXplX3QgcmVsZWFzZWQgPSAwOworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgaWYgKHBhZCA8IE1BWF9SRVFVRVNUICYmIGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgcGFkICs9IFRPUF9GT09UX1NJWkU7IC8qIGVuc3VyZSBlbm91Z2ggcm9vbSBmb3Igc2VnbWVudCBvdmVyaGVhZCAqLworCisgICAgaWYgKG0tPnRvcHNpemUgPiBwYWQpIHsKKyAgICAgIC8qIFNocmluayB0b3Agc3BhY2UgaW4gZ3JhbnVsYXJpdHktc2l6ZSB1bml0cywga2VlcGluZyBhdCBsZWFzdCBvbmUgKi8KKyAgICAgIHNpemVfdCB1bml0ID0gbXBhcmFtcy5ncmFudWxhcml0eTsKKyAgICAgIHNpemVfdCBleHRyYSA9ICgobS0+dG9wc2l6ZSAtIHBhZCArICh1bml0IC0gU0laRV9UX09ORSkpIC8gdW5pdCAtCisJCSAgICAgIFNJWkVfVF9PTkUpICogdW5pdDsKKyAgICAgIG1zZWdtZW50cHRyIHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKiltLT50b3ApOworCisgICAgICBpZiAoIWlzX2V4dGVybl9zZWdtZW50KHNwKSkgeworCWlmIChpc19tbWFwcGVkX3NlZ21lbnQoc3ApKSB7CisJICBpZiAoSEFWRV9NTUFQICYmCisJICAgICAgc3AtPnNpemUgPj0gZXh0cmEgJiYKKwkgICAgICAhaGFzX3NlZ21lbnRfbGluayhtLCBzcCkpIHsgLyogY2FuJ3Qgc2hyaW5rIGlmIHBpbm5lZCAqLworCSAgICBzaXplX3QgbmV3c2l6ZSA9IHNwLT5zaXplIC0gZXh0cmE7CisJICAgIC8qIFByZWZlciBtcmVtYXAsIGZhbGwgYmFjayB0byBtdW5tYXAgKi8KKwkgICAgaWYgKChDQUxMX01SRU1BUChzcC0+YmFzZSwgc3AtPnNpemUsIG5ld3NpemUsIDApICE9IE1GQUlMKSB8fAorCQkoQ0FMTF9NVU5NQVAoc3AtPmJhc2UgKyBuZXdzaXplLCBleHRyYSkgPT0gMCkpIHsKKwkgICAgICByZWxlYXNlZCA9IGV4dHJhOworCSAgICB9CisJICB9CisJfQorCWVsc2UgaWYgKEhBVkVfTU9SRUNPUkUpIHsKKwkgIGlmIChleHRyYSA+PSBIQUxGX01BWF9TSVpFX1QpIC8qIEF2b2lkIHdyYXBwaW5nIG5lZ2F0aXZlICovCisJICAgIGV4dHJhID0gKEhBTEZfTUFYX1NJWkVfVCkgKyBTSVpFX1RfT05FIC0gdW5pdDsKKwkgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisJICB7CisJICAgIC8qIE1ha2Ugc3VyZSBlbmQgb2YgbWVtb3J5IGlzIHdoZXJlIHdlIGxhc3Qgc2V0IGl0LiAqLworCSAgICBjaGFyKiBvbGRfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworCSAgICBpZiAob2xkX2JyID09IHNwLT5iYXNlICsgc3AtPnNpemUpIHsKKwkgICAgICBjaGFyKiByZWxfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoLWV4dHJhKSk7CisJICAgICAgY2hhciogbmV3X2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKDApKTsKKwkgICAgICBpZiAocmVsX2JyICE9IENNRkFJTCAmJiBuZXdfYnIgPCBvbGRfYnIpCisJCXJlbGVhc2VkID0gb2xkX2JyIC0gbmV3X2JyOworCSAgICB9CisJICB9CisJICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworCX0KKyAgICAgIH0KKworICAgICAgaWYgKHJlbGVhc2VkICE9IDApIHsKKwlzcC0+c2l6ZSAtPSByZWxlYXNlZDsKKwltLT5mb290cHJpbnQgLT0gcmVsZWFzZWQ7CisJaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplIC0gcmVsZWFzZWQpOworCWNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICAgICAgfQorICAgIH0KKworICAgIC8qIFVubWFwIGFueSB1bnVzZWQgbW1hcHBlZCBzZWdtZW50cyAqLworICAgIGlmIChIQVZFX01NQVApCisgICAgICByZWxlYXNlZCArPSByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhtKTsKKworICAgIC8qIE9uIGZhaWx1cmUsIGRpc2FibGUgYXV0b3RyaW0gdG8gYXZvaWQgcmVwZWF0ZWQgZmFpbGVkIGZ1dHVyZSBjYWxscyAqLworICAgIGlmIChyZWxlYXNlZCA9PSAwICYmIG0tPnRvcHNpemUgPiBtLT50cmltX2NoZWNrKQorICAgICAgbS0+dHJpbV9jaGVjayA9IE1BWF9TSVpFX1Q7CisgIH0KKworICByZXR1cm4gKHJlbGVhc2VkICE9IDApPyAxIDogMDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBhbGxvY2F0ZSBhIGxhcmdlIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLworc3RhdGljIHZvaWQqIHRtYWxsb2NfbGFyZ2UobXN0YXRlIG0sIHNpemVfdCBuYikgeworICB0Y2h1bmtwdHIgdiA9IDA7CisgIHNpemVfdCByc2l6ZSA9IC1uYjsgLyogVW5zaWduZWQgbmVnYXRpb24gKi8KKyAgdGNodW5rcHRyIHQ7CisgIGJpbmRleF90IGlkeDsKKyAgY29tcHV0ZV90cmVlX2luZGV4KG5iLCBpZHgpOworICBpZiAoKHQgPSAqdHJlZWJpbl9hdChtLCBpZHgpKSAhPSAwKSB7CisgICAgLyogVHJhdmVyc2UgdHJlZSBmb3IgdGhpcyBiaW4gbG9va2luZyBmb3Igbm9kZSB3aXRoIHNpemUgPT0gbmIgKi8KKyAgICBzaXplX3Qgc2l6ZWJpdHMgPSBuYiA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoaWR4KTsKKyAgICB0Y2h1bmtwdHIgcnN0ID0gMDsgIC8qIFRoZSBkZWVwZXN0IHVudGFrZW4gcmlnaHQgc3VidHJlZSAqLworICAgIGZvciAoOzspIHsKKyAgICAgIHRjaHVua3B0ciBydDsKKyAgICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgICBpZiAodHJlbSA8IHJzaXplKSB7CisJdiA9IHQ7CisJaWYgKChyc2l6ZSA9IHRyZW0pID09IDApCisJICBicmVhazsKKyAgICAgIH0KKyAgICAgIHJ0ID0gdC0+Y2hpbGRbMV07CisgICAgICB0ID0gdC0+Y2hpbGRbKHNpemViaXRzID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXTsKKyAgICAgIGlmIChydCAhPSAwICYmIHJ0ICE9IHQpCisJcnN0ID0gcnQ7CisgICAgICBpZiAodCA9PSAwKSB7CisJdCA9IHJzdDsgLyogc2V0IHQgdG8gbGVhc3Qgc3VidHJlZSBob2xkaW5nIHNpemVzID4gbmIgKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIHNpemViaXRzIDw8PSAxOworICAgIH0KKyAgfQorICBpZiAodCA9PSAwICYmIHYgPT0gMCkgeyAvKiBzZXQgdCB0byByb290IG9mIG5leHQgbm9uLWVtcHR5IHRyZWViaW4gKi8KKyAgICBiaW5tYXBfdCBsZWZ0Yml0cyA9IGxlZnRfYml0cyhpZHgyYml0KGlkeCkpICYgbS0+dHJlZW1hcDsKKyAgICBpZiAobGVmdGJpdHMgIT0gMCkgeworICAgICAgYmluZGV4X3QgaTsKKyAgICAgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKyAgICAgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisgICAgICB0ID0gKnRyZWViaW5fYXQobSwgaSk7CisgICAgfQorICB9CisKKyAgd2hpbGUgKHQgIT0gMCkgeyAvKiBmaW5kIHNtYWxsZXN0IG9mIHRyZWUgb3Igc3VidHJlZSAqLworICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgcnNpemUgPSB0cmVtOworICAgICAgdiA9IHQ7CisgICAgfQorICAgIHQgPSBsZWZ0bW9zdF9jaGlsZCh0KTsKKyAgfQorCisgIC8qICBJZiBkdiBpcyBhIGJldHRlciBmaXQsIHJldHVybiAwIHNvIG1hbGxvYyB3aWxsIHVzZSBpdCAqLworICBpZiAodiAhPSAwICYmIHJzaXplIDwgKHNpemVfdCkobS0+ZHZzaXplIC0gbmIpKSB7CisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpIHsgLyogc3BsaXQgKi8KKyAgICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQodiwgbmIpOworICAgICAgYXNzZXJ0KGNodW5rc2l6ZSh2KSA9PSByc2l6ZSArIG5iKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKSB7CisJdW5saW5rX2xhcmdlX2NodW5rKG0sIHYpOworCWlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorCSAgc2V0X2ludXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsKKwllbHNlIHsKKwkgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOworCSAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwkgIGluc2VydF9jaHVuayhtLCByLCByc2l6ZSk7CisJfQorCXJldHVybiBjaHVuazJtZW0odik7CisgICAgICB9CisgICAgfQorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOworICB9CisgIHJldHVybiAwOworfQorCisvKiBhbGxvY2F0ZSBhIHNtYWxsIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLworc3RhdGljIHZvaWQqIHRtYWxsb2Nfc21hbGwobXN0YXRlIG0sIHNpemVfdCBuYikgeworICB0Y2h1bmtwdHIgdCwgdjsKKyAgc2l6ZV90IHJzaXplOworICBiaW5kZXhfdCBpOworICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChtLT50cmVlbWFwKTsKKyAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKyAgdiA9IHQgPSAqdHJlZWJpbl9hdChtLCBpKTsKKyAgcnNpemUgPSBjaHVua3NpemUodCkgLSBuYjsKKworICB3aGlsZSAoKHQgPSBsZWZ0bW9zdF9jaGlsZCh0KSkgIT0gMCkgeworICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgcnNpemUgPSB0cmVtOworICAgICAgdiA9IHQ7CisgICAgfQorICB9CisKKyAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpIHsKKyAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKKyAgICBhc3NlcnQoY2h1bmtzaXplKHYpID09IHJzaXplICsgbmIpOworICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKSB7CisgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7CisgICAgICBpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKwlzZXRfaW51c2VfYW5kX3BpbnVzZShtLCB2LCAocnNpemUgKyBuYikpOworICAgICAgZWxzZSB7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCB2LCBuYik7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwlyZXBsYWNlX2R2KG0sIHIsIHJzaXplKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBjaHVuazJtZW0odik7CisgICAgfQorICB9CisKKyAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSk7CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVhbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCogaW50ZXJuYWxfcmVhbGxvYyhtc3RhdGUgbSwgdm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKSB7CisgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICAgIHJldHVybiAwOworICB9CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgbWNodW5rcHRyIG9sZHAgPSBtZW0yY2h1bmsob2xkbWVtKTsKKyAgICBzaXplX3Qgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKKyAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZHAsIG9sZHNpemUpOworICAgIG1jaHVua3B0ciBuZXdwID0gMDsKKyAgICB2b2lkKiBleHRyYSA9IDA7CisKKyAgICAvKiBUcnkgdG8gZWl0aGVyIHNocmluayBvciBleHRlbmQgaW50byB0b3AuIEVsc2UgbWFsbG9jLWNvcHktZnJlZSAqLworCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCBvbGRwKSAmJiBva19jaW51c2Uob2xkcCkgJiYKKwkJb2tfbmV4dChvbGRwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisgICAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOworICAgICAgaWYgKGlzX21tYXBwZWQob2xkcCkpCisJbmV3cCA9IG1tYXBfcmVzaXplKG0sIG9sZHAsIG5iKTsKKyAgICAgIGVsc2UgaWYgKG9sZHNpemUgPj0gbmIpIHsgLyogYWxyZWFkeSBiaWcgZW5vdWdoICovCisJc2l6ZV90IHJzaXplID0gb2xkc2l6ZSAtIG5iOworCW5ld3AgPSBvbGRwOworCWlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgeworCSAgbWNodW5rcHRyIHJlbWFpbmRlciA9IGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIG5iKTsKKwkgIHNldF9pbnVzZShtLCBuZXdwLCBuYik7CisJICBzZXRfaW51c2UobSwgcmVtYWluZGVyLCByc2l6ZSk7CisJICBleHRyYSA9IGNodW5rMm1lbShyZW1haW5kZXIpOworCX0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG5leHQgPT0gbS0+dG9wICYmIG9sZHNpemUgKyBtLT50b3BzaXplID4gbmIpIHsKKwkvKiBFeHBhbmQgaW50byB0b3AgKi8KKwlzaXplX3QgbmV3c2l6ZSA9IG9sZHNpemUgKyBtLT50b3BzaXplOworCXNpemVfdCBuZXd0b3BzaXplID0gbmV3c2l6ZSAtIG5iOworCW1jaHVua3B0ciBuZXd0b3AgPSBjaHVua19wbHVzX29mZnNldChvbGRwLCBuYik7CisJc2V0X2ludXNlKG0sIG9sZHAsIG5iKTsKKwluZXd0b3AtPmhlYWQgPSBuZXd0b3BzaXplIHxQSU5VU0VfQklUOworCW0tPnRvcCA9IG5ld3RvcDsKKwltLT50b3BzaXplID0gbmV3dG9wc2l6ZTsKKwluZXdwID0gb2xkcDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKKyAgICAgIFBPU1RBQ1RJT04obSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQT1NUQUNUSU9OKG0pOworCisgICAgaWYgKG5ld3AgIT0gMCkgeworICAgICAgaWYgKGV4dHJhICE9IDApIHsKKwlpbnRlcm5hbF9mcmVlKG0sIGV4dHJhKTsKKyAgICAgIH0KKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG5ld3ApOworICAgICAgcmV0dXJuIGNodW5rMm1lbShuZXdwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB2b2lkKiBuZXdtZW0gPSBpbnRlcm5hbF9tYWxsb2MobSwgYnl0ZXMpOworICAgICAgaWYgKG5ld21lbSAhPSAwKSB7CisJc2l6ZV90IG9jID0gb2xkc2l6ZSAtIG92ZXJoZWFkX2ZvcihvbGRwKTsKKwltZW1jcHkobmV3bWVtLCBvbGRtZW0sIChvYyA8IGJ5dGVzKT8gb2MgOiBieXRlcyk7CisJaW50ZXJuYWxfZnJlZShtLCBvbGRtZW0pOworICAgICAgfQorICAgICAgcmV0dXJuIG5ld21lbTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZW1hbGlnbiBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkKiBpbnRlcm5hbF9tZW1hbGlnbihtc3RhdGUgbSwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FMSUdOTUVOVCkgICAgLyogQ2FuIGp1c3QgdXNlIG1hbGxvYyAqLworICAgIHJldHVybiBpbnRlcm5hbF9tYWxsb2MobSwgYnl0ZXMpOworICBpZiAoYWxpZ25tZW50IDwgIE1JTl9DSFVOS19TSVpFKSAvKiBtdXN0IGJlIGF0IGxlYXN0IGEgbWluaW11bSBjaHVuayBzaXplICovCisgICAgYWxpZ25tZW50ID0gTUlOX0NIVU5LX1NJWkU7CisgIGlmICgoYWxpZ25tZW50ICYgKGFsaWdubWVudC1TSVpFX1RfT05FKSkgIT0gMCkgey8qIEVuc3VyZSBhIHBvd2VyIG9mIDIgKi8KKyAgICBzaXplX3QgYSA9IE1BTExPQ19BTElHTk1FTlQgPDwgMTsKKyAgICB3aGlsZSAoYSA8IGFsaWdubWVudCkgYSA8PD0gMTsKKyAgICBhbGlnbm1lbnQgPSBhOworICB9CisKKyAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUIC0gYWxpZ25tZW50KSB7CisgICAgaWYgKG0gIT0gMCkgIHsgLyogVGVzdCBpc24ndCBuZWVkZWQgYnV0IGF2b2lkcyBjb21waWxlciB3YXJuaW5nICovCisgICAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgICAgfQorICB9CisgIGVsc2UgeworICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgc2l6ZV90IHJlcSA9IG5iICsgYWxpZ25tZW50ICsgTUlOX0NIVU5LX1NJWkUgLSBDSFVOS19PVkVSSEVBRDsKKyAgICBjaGFyKiBtZW0gPSAoY2hhciopaW50ZXJuYWxfbWFsbG9jKG0sIHJlcSk7CisgICAgaWYgKG1lbSAhPSAwKSB7CisgICAgICB2b2lkKiBsZWFkZXIgPSAwOworICAgICAgdm9pZCogdHJhaWxlciA9IDA7CisgICAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworCisgICAgICBpZiAoUFJFQUNUSU9OKG0pKSByZXR1cm4gMDsKKyAgICAgIGlmICgoKChzaXplX3QpKG1lbSkpICUgYWxpZ25tZW50KSAhPSAwKSB7IC8qIG1pc2FsaWduZWQgKi8KKwkvKgorCSAgRmluZCBhbiBhbGlnbmVkIHNwb3QgaW5zaWRlIGNodW5rLiAgU2luY2Ugd2UgbmVlZCB0byBnaXZlCisJICBiYWNrIGxlYWRpbmcgc3BhY2UgaW4gYSBjaHVuayBvZiBhdCBsZWFzdCBNSU5fQ0hVTktfU0laRSwgaWYKKwkgIHRoZSBmaXJzdCBjYWxjdWxhdGlvbiBwbGFjZXMgdXMgYXQgYSBzcG90IHdpdGggbGVzcyB0aGFuCisJICBNSU5fQ0hVTktfU0laRSBsZWFkZXIsIHdlIGNhbiBtb3ZlIHRvIHRoZSBuZXh0IGFsaWduZWQgc3BvdC4KKwkgIFdlJ3ZlIGFsbG9jYXRlZCBlbm91Z2ggdG90YWwgcm9vbSBzbyB0aGF0IHRoaXMgaXMgYWx3YXlzCisJICBwb3NzaWJsZS4KKwkqLworCWNoYXIqIGJyID0gKGNoYXIqKW1lbTJjaHVuaygoc2l6ZV90KSgoKHNpemVfdCkobWVtICsKKwkJCQkJCSAgICAgICBhbGlnbm1lbnQgLQorCQkJCQkJICAgICAgIFNJWkVfVF9PTkUpKSAmCisJCQkJCSAgICAgLWFsaWdubWVudCkpOworCWNoYXIqIHBvcyA9ICgoc2l6ZV90KShiciAtIChjaGFyKikocCkpID49IE1JTl9DSFVOS19TSVpFKT8KKwkgIGJyIDogYnIrYWxpZ25tZW50OworCW1jaHVua3B0ciBuZXdwID0gKG1jaHVua3B0cilwb3M7CisJc2l6ZV90IGxlYWRzaXplID0gcG9zIC0gKGNoYXIqKShwKTsKKwlzaXplX3QgbmV3c2l6ZSA9IGNodW5rc2l6ZShwKSAtIGxlYWRzaXplOworCisJaWYgKGlzX21tYXBwZWQocCkpIHsgLyogRm9yIG1tYXBwZWQgY2h1bmtzLCBqdXN0IGFkanVzdCBvZmZzZXQgKi8KKwkgIG5ld3AtPnByZXZfZm9vdCA9IHAtPnByZXZfZm9vdCArIGxlYWRzaXplOworCSAgbmV3cC0+aGVhZCA9IChuZXdzaXplfENJTlVTRV9CSVQpOworCX0KKwllbHNlIHsgLyogT3RoZXJ3aXNlLCBnaXZlIGJhY2sgbGVhZGVyLCB1c2UgdGhlIHJlc3QgKi8KKwkgIHNldF9pbnVzZShtLCBuZXdwLCBuZXdzaXplKTsKKwkgIHNldF9pbnVzZShtLCBwLCBsZWFkc2l6ZSk7CisJICBsZWFkZXIgPSBjaHVuazJtZW0ocCk7CisJfQorCXAgPSBuZXdwOworICAgICAgfQorCisgICAgICAvKiBHaXZlIGJhY2sgc3BhcmUgcm9vbSBhdCB0aGUgZW5kICovCisgICAgICBpZiAoIWlzX21tYXBwZWQocCkpIHsKKwlzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKwlpZiAoc2l6ZSA+IG5iICsgTUlOX0NIVU5LX1NJWkUpIHsKKwkgIHNpemVfdCByZW1haW5kZXJfc2l6ZSA9IHNpemUgLSBuYjsKKwkgIG1jaHVua3B0ciByZW1haW5kZXIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisJICBzZXRfaW51c2UobSwgcCwgbmIpOworCSAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUpOworCSAgdHJhaWxlciA9IGNodW5rMm1lbShyZW1haW5kZXIpOworCX0KKyAgICAgIH0KKworICAgICAgYXNzZXJ0IChjaHVua3NpemUocCkgPj0gbmIpOworICAgICAgYXNzZXJ0KCgoKHNpemVfdCkoY2h1bmsybWVtKHApKSkgJSBhbGlnbm1lbnQpID09IDApOworICAgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgcCk7CisgICAgICBQT1NUQUNUSU9OKG0pOworICAgICAgaWYgKGxlYWRlciAhPSAwKSB7CisJaW50ZXJuYWxfZnJlZShtLCBsZWFkZXIpOworICAgICAgfQorICAgICAgaWYgKHRyYWlsZXIgIT0gMCkgeworCWludGVybmFsX2ZyZWUobSwgdHJhaWxlcik7CisgICAgICB9CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbWFsbG9jL2NvYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqKiBpYWxsb2MobXN0YXRlIG0sCisJCSAgICAgc2l6ZV90IG5fZWxlbWVudHMsCisJCSAgICAgc2l6ZV90KiBzaXplcywKKwkJICAgICBpbnQgb3B0cywKKwkJICAgICB2b2lkKiBjaHVua3NbXSkgeworICAvKgorICAgIFRoaXMgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGluZGVwZW5kZW50X1ggcm91dGluZXMsIGhhbmRsaW5nCisgICAgYWxsIG9mIHRoZSBjb21iaW5hdGlvbnMgdGhhdCBjYW4gcmVzdWx0LgorCisgICAgVGhlIG9wdHMgYXJnIGhhczoKKyAgICBiaXQgMCBzZXQgaWYgYWxsIGVsZW1lbnRzIGFyZSBzYW1lIHNpemUgKHVzaW5nIHNpemVzWzBdKQorICAgIGJpdCAxIHNldCBpZiBlbGVtZW50cyBzaG91bGQgYmUgemVyb2VkCisgICovCisKKyAgc2l6ZV90ICAgIGVsZW1lbnRfc2l6ZTsgICAvKiBjaHVua3NpemUgb2YgZWFjaCBlbGVtZW50LCBpZiBhbGwgc2FtZSAqLworICBzaXplX3QgICAgY29udGVudHNfc2l6ZTsgIC8qIHRvdGFsIHNpemUgb2YgZWxlbWVudHMgKi8KKyAgc2l6ZV90ICAgIGFycmF5X3NpemU7ICAgICAvKiByZXF1ZXN0IHNpemUgb2YgcG9pbnRlciBhcnJheSAqLworICB2b2lkKiAgICAgbWVtOyAgICAgICAgICAgIC8qIG1hbGxvY2VkIGFnZ3JlZ2F0ZSBzcGFjZSAqLworICBtY2h1bmtwdHIgcDsgICAgICAgICAgICAgIC8qIGNvcnJlc3BvbmRpbmcgY2h1bmsgKi8KKyAgc2l6ZV90ICAgIHJlbWFpbmRlcl9zaXplOyAvKiByZW1haW5pbmcgYnl0ZXMgd2hpbGUgc3BsaXR0aW5nICovCisgIHZvaWQqKiAgICBtYXJyYXk7ICAgICAgICAgLyogZWl0aGVyICJjaHVua3MiIG9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLworICBtY2h1bmtwdHIgYXJyYXlfY2h1bms7ICAgIC8qIGNodW5rIGZvciBtYWxsb2NlZCBwdHIgYXJyYXkgKi8KKyAgZmxhZ190ICAgIHdhc19lbmFibGVkOyAgICAvKiB0byBkaXNhYmxlIG1tYXAgKi8KKyAgc2l6ZV90ICAgIHNpemU7CisgIHNpemVfdCAgICBpOworCisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICAvKiBjb21wdXRlIGFycmF5IGxlbmd0aCwgaWYgbmVlZGVkICovCisgIGlmIChjaHVua3MgIT0gMCkgeworICAgIGlmIChuX2VsZW1lbnRzID09IDApCisgICAgICByZXR1cm4gY2h1bmtzOyAvKiBub3RoaW5nIHRvIGRvICovCisgICAgbWFycmF5ID0gY2h1bmtzOworICAgIGFycmF5X3NpemUgPSAwOworICB9CisgIGVsc2UgeworICAgIC8qIGlmIGVtcHR5IHJlcSwgbXVzdCBzdGlsbCByZXR1cm4gY2h1bmsgcmVwcmVzZW50aW5nIGVtcHR5IGFycmF5ICovCisgICAgaWYgKG5fZWxlbWVudHMgPT0gMCkKKyAgICAgIHJldHVybiAodm9pZCoqKWludGVybmFsX21hbGxvYyhtLCAwKTsKKyAgICBtYXJyYXkgPSAwOworICAgIGFycmF5X3NpemUgPSByZXF1ZXN0MnNpemUobl9lbGVtZW50cyAqIChzaXplb2Yodm9pZCopKSk7CisgIH0KKworICAvKiBjb21wdXRlIHRvdGFsIGVsZW1lbnQgc2l6ZSAqLworICBpZiAob3B0cyAmIDB4MSkgeyAvKiBhbGwtc2FtZS1zaXplICovCisgICAgZWxlbWVudF9zaXplID0gcmVxdWVzdDJzaXplKCpzaXplcyk7CisgICAgY29udGVudHNfc2l6ZSA9IG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemU7CisgIH0KKyAgZWxzZSB7IC8qIGFkZCB1cCBhbGwgdGhlIHNpemVzICovCisgICAgZWxlbWVudF9zaXplID0gMDsKKyAgICBjb250ZW50c19zaXplID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpICE9IG5fZWxlbWVudHM7ICsraSkKKyAgICAgIGNvbnRlbnRzX3NpemUgKz0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsKKyAgfQorCisgIHNpemUgPSBjb250ZW50c19zaXplICsgYXJyYXlfc2l6ZTsKKworICAvKgorICAgICBBbGxvY2F0ZSB0aGUgYWdncmVnYXRlIGNodW5rLiAgRmlyc3QgZGlzYWJsZSBkaXJlY3QtbW1hcHBpbmcgc28KKyAgICAgbWFsbG9jIHdvbid0IHVzZSBpdCwgc2luY2Ugd2Ugd291bGQgbm90IGJlIGFibGUgdG8gbGF0ZXIKKyAgICAgZnJlZS9yZWFsbG9jIHNwYWNlIGludGVybmFsIHRvIGEgc2VncmVnYXRlZCBtbWFwIHJlZ2lvbi4KKyAgKi8KKyAgd2FzX2VuYWJsZWQgPSB1c2VfbW1hcChtKTsKKyAgZGlzYWJsZV9tbWFwKG0pOworICBtZW0gPSBpbnRlcm5hbF9tYWxsb2MobSwgc2l6ZSAtIENIVU5LX09WRVJIRUFEKTsKKyAgaWYgKHdhc19lbmFibGVkKQorICAgIGVuYWJsZV9tbWFwKG0pOworICBpZiAobWVtID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKFBSRUFDVElPTihtKSkgcmV0dXJuIDA7CisgIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgcmVtYWluZGVyX3NpemUgPSBjaHVua3NpemUocCk7CisKKyAgYXNzZXJ0KCFpc19tbWFwcGVkKHApKTsKKworICBpZiAob3B0cyAmIDB4MikgeyAgICAgICAvKiBvcHRpb25hbGx5IGNsZWFyIHRoZSBlbGVtZW50cyAqLworICAgIG1lbXNldCgoc2l6ZV90KiltZW0sIDAsIHJlbWFpbmRlcl9zaXplIC0gU0laRV9UX1NJWkUgLSBhcnJheV9zaXplKTsKKyAgfQorCisgIC8qIElmIG5vdCBwcm92aWRlZCwgYWxsb2NhdGUgdGhlIHBvaW50ZXIgYXJyYXkgYXMgZmluYWwgcGFydCBvZiBjaHVuayAqLworICBpZiAobWFycmF5ID09IDApIHsKKyAgICBzaXplX3QgIGFycmF5X2NodW5rX3NpemU7CisgICAgYXJyYXlfY2h1bmsgPSBjaHVua19wbHVzX29mZnNldChwLCBjb250ZW50c19zaXplKTsKKyAgICBhcnJheV9jaHVua19zaXplID0gcmVtYWluZGVyX3NpemUgLSBjb250ZW50c19zaXplOworICAgIG1hcnJheSA9ICh2b2lkKiopIChjaHVuazJtZW0oYXJyYXlfY2h1bmspKTsKKyAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIGFycmF5X2NodW5rLCBhcnJheV9jaHVua19zaXplKTsKKyAgICByZW1haW5kZXJfc2l6ZSA9IGNvbnRlbnRzX3NpemU7CisgIH0KKworICAvKiBzcGxpdCBvdXQgZWxlbWVudHMgKi8KKyAgZm9yIChpID0gMDsgOyArK2kpIHsKKyAgICBtYXJyYXlbaV0gPSBjaHVuazJtZW0ocCk7CisgICAgaWYgKGkgIT0gbl9lbGVtZW50cy0xKSB7CisgICAgICBpZiAoZWxlbWVudF9zaXplICE9IDApCisJc2l6ZSA9IGVsZW1lbnRfc2l6ZTsKKyAgICAgIGVsc2UKKwlzaXplID0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsKKyAgICAgIHJlbWFpbmRlcl9zaXplIC09IHNpemU7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIHNpemUpOworICAgICAgcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHNpemUpOworICAgIH0KKyAgICBlbHNlIHsgLyogdGhlIGZpbmFsIGVsZW1lbnQgYWJzb3JicyBhbnkgb3ZlcmFsbG9jYXRpb24gc2xvcCAqLworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCByZW1haW5kZXJfc2l6ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworI2lmIERFQlVHCisgIGlmIChtYXJyYXkgIT0gY2h1bmtzKSB7CisgICAgLyogZmluYWwgZWxlbWVudCBtdXN0IGhhdmUgZXhhY3RseSBleGhhdXN0ZWQgY2h1bmsgKi8KKyAgICBpZiAoZWxlbWVudF9zaXplICE9IDApIHsKKyAgICAgIGFzc2VydChyZW1haW5kZXJfc2l6ZSA9PSBlbGVtZW50X3NpemUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGFzc2VydChyZW1haW5kZXJfc2l6ZSA9PSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pKTsKKyAgICB9CisgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbWVtMmNodW5rKG1hcnJheSkpOworICB9CisgIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQorICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG1lbTJjaHVuayhtYXJyYXlbaV0pKTsKKworI2VuZGlmIC8qIERFQlVHICovCisKKyAgUE9TVEFDVElPTihtKTsKKyAgcmV0dXJuIG1hcnJheTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwdWJsaWMgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU9OTFlfTVNQQUNFUworCit2b2lkKiBkbG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgLyoKKyAgICAgQmFzaWMgYWxnb3JpdGhtOgorICAgICBJZiBhIHNtYWxsIHJlcXVlc3QgKDwgMjU2IGJ5dGVzIG1pbnVzIHBlci1jaHVuayBvdmVyaGVhZCk6CisgICAgICAgMS4gSWYgb25lIGV4aXN0cywgdXNlIGEgcmVtYWluZGVybGVzcyBjaHVuayBpbiBhc3NvY2lhdGVkIHNtYWxsYmluLgorCSAgKFJlbWFpbmRlcmxlc3MgbWVhbnMgdGhhdCB0aGVyZSBhcmUgdG9vIGZldyBleGNlc3MgYnl0ZXMgdG8KKwkgIHJlcHJlc2VudCBhcyBhIGNodW5rLikKKyAgICAgICAyLiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIGR2IGNodW5rLCB3aGljaCBpcyBub3JtYWxseSB0aGUKKwkgIGNodW5rIGFkamFjZW50IHRvIHRoZSBvbmUgdXNlZCBmb3IgdGhlIG1vc3QgcmVjZW50IHNtYWxsIHJlcXVlc3QuCisgICAgICAgMy4gSWYgb25lIGV4aXN0cywgc3BsaXQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBjaHVuayBpbiBhIGJpbiwKKwkgIHNhdmluZyByZW1haW5kZXIgaW4gZHYuCisgICAgICAgNC4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSB0b3AgY2h1bmsuCisgICAgICAgNS4gSWYgYXZhaWxhYmxlLCBnZXQgbWVtb3J5IGZyb20gc3lzdGVtIGFuZCB1c2UgaXQKKyAgICAgT3RoZXJ3aXNlLCBmb3IgYSBsYXJnZSByZXF1ZXN0OgorICAgICAgIDEuIEZpbmQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBiaW5uZWQgY2h1bmsgdGhhdCBmaXRzLCBhbmQgdXNlIGl0CisJICBpZiBpdCBpcyBiZXR0ZXIgZml0dGluZyB0aGFuIGR2IGNodW5rLCBzcGxpdHRpbmcgaWYgbmVjZXNzYXJ5LgorICAgICAgIDIuIElmIGJldHRlciBmaXR0aW5nIHRoYW4gYW55IGJpbm5lZCBjaHVuaywgdXNlIHRoZSBkdiBjaHVuay4KKyAgICAgICAzLiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIHRvcCBjaHVuay4KKyAgICAgICA0LiBJZiByZXF1ZXN0IHNpemUgPj0gbW1hcCB0aHJlc2hvbGQsIHRyeSB0byBkaXJlY3RseSBtbWFwIHRoaXMgY2h1bmsuCisgICAgICAgNS4gSWYgYXZhaWxhYmxlLCBnZXQgbWVtb3J5IGZyb20gc3lzdGVtIGFuZCB1c2UgaXQKKworICAgICBUaGUgdWdseSBnb3RvJ3MgaGVyZSBlbnN1cmUgdGhhdCBwb3N0YWN0aW9uIG9jY3VycyBhbG9uZyBhbGwgcGF0aHMuCisgICovCisKKyNpZiBVU0VfTE9DS1MKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7IC8qIGluaXRpYWxpemUgaW4gc3lzX2FsbG9jIGlmIG5vdCB1c2luZyBsb2NrcyAqLworI2VuZGlmCisKKyAgaWYgKCFQUkVBQ1RJT04oZ20pKSB7CisgICAgdm9pZCogbWVtOworICAgIHNpemVfdCBuYjsKKyAgICBpZiAoYnl0ZXMgPD0gTUFYX1NNQUxMX1JFUVVFU1QpIHsKKyAgICAgIGJpbmRleF90IGlkeDsKKyAgICAgIGJpbm1hcF90IHNtYWxsYml0czsKKyAgICAgIG5iID0gKGJ5dGVzIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlkeCA9IHNtYWxsX2luZGV4KG5iKTsKKyAgICAgIHNtYWxsYml0cyA9IGdtLT5zbWFsbG1hcCA+PiBpZHg7CisKKyAgICAgIGlmICgoc21hbGxiaXRzICYgMHgzVSkgIT0gMCkgeyAvKiBSZW1haW5kZXJsZXNzIGZpdCB0byBhIHNtYWxsYmluLiAqLworCW1jaHVua3B0ciBiLCBwOworCWlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8KKwliID0gc21hbGxiaW5fYXQoZ20sIGlkeCk7CisJcCA9IGItPmZkOworCWFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKwl1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoZ20sIGIsIHAsIGlkeCk7CisJc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisJbWVtID0gY2h1bmsybWVtKHApOworCWNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKwlnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKG5iID4gZ20tPmR2c2l6ZSkgeworCWlmIChzbWFsbGJpdHMgIT0gMCkgeyAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLworCSAgbWNodW5rcHRyIGIsIHAsIHI7CisJICBzaXplX3QgcnNpemU7CisJICBiaW5kZXhfdCBpOworCSAgYmlubWFwX3QgbGVmdGJpdHMgPSAoc21hbGxiaXRzIDw8IGlkeCkgJiBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKTsKKwkgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKwkgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisJICBiID0gc21hbGxiaW5fYXQoZ20sIGkpOworCSAgcCA9IGItPmZkOworCSAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGkpKTsKKwkgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhnbSwgYiwgcCwgaSk7CisJICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsKKwkgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNpemVzICovCisJICBpZiAoU0laRV9UX1NJWkUgIT0gNCAmJiByc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorCSAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7CisJICBlbHNlIHsKKwkgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOworCSAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworCSAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCSAgICByZXBsYWNlX2R2KGdtLCByLCByc2l6ZSk7CisJICB9CisJICBtZW0gPSBjaHVuazJtZW0ocCk7CisJICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorCisJZWxzZSBpZiAoZ20tPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19zbWFsbChnbSwgbmIpKSAhPSAwKSB7CisJICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkKKyAgICAgIG5iID0gTUFYX1NJWkVfVDsgLyogVG9vIGJpZyB0byBhbGxvY2F0ZS4gRm9yY2UgZmFpbHVyZSAoaW4gc3lzIGFsbG9jKSAqLworICAgIGVsc2UgeworICAgICAgbmIgPSBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZiAoZ20tPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19sYXJnZShnbSwgbmIpKSAhPSAwKSB7CisJY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworCWdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPD0gZ20tPmR2c2l6ZSkgeworICAgICAgc2l6ZV90IHJzaXplID0gZ20tPmR2c2l6ZSAtIG5iOworICAgICAgbWNodW5rcHRyIHAgPSBnbS0+ZHY7CisgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsgLyogc3BsaXQgZHYgKi8KKwltY2h1bmtwdHIgciA9IGdtLT5kdiA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKwlnbS0+ZHZzaXplID0gcnNpemU7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7CisgICAgICB9CisgICAgICBlbHNlIHsgLyogZXhoYXVzdCBkdiAqLworCXNpemVfdCBkdnMgPSBnbS0+ZHZzaXplOworCWdtLT5kdnNpemUgPSAwOworCWdtLT5kdiA9IDA7CisJc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIGR2cyk7CisgICAgICB9CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgZWxzZSBpZiAobmIgPCBnbS0+dG9wc2l6ZSkgeyAvKiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBnbS0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBnbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhnbSwgZ20tPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKGdtLCBuYik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyAgICByZXR1cm4gbWVtOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGxmcmVlKHZvaWQqIG1lbSkgeworICAvKgorICAgICBDb25zb2xpZGF0ZSBmcmVlZCBjaHVua3Mgd2l0aCBwcmVjZWVkaW5nIG9yIHN1Y2NlZWRpbmcgYm9yZGVyaW5nCisgICAgIGZyZWUgY2h1bmtzLCBpZiB0aGV5IGV4aXN0LCBhbmQgdGhlbiBwbGFjZSBpbiBhIGJpbi4gIEludGVybWl4ZWQKKyAgICAgd2l0aCBzcGVjaWFsIGNhc2VzIGZvciB0b3AsIGR2LCBtbWFwcGVkIGNodW5rcywgYW5kIHVzYWdlIGVycm9ycy4KKyAgKi8KKworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsKKyNpZiBGT09URVJTCisgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7CisgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBmbSBnbQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICBpZiAoIVBSRUFDVElPTihmbSkpIHsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHApICYmIG9rX2NpbnVzZShwKSkpIHsKKwlzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisJbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSk7CisJaWYgKCFwaW51c2UocCkpIHsKKwkgIHNpemVfdCBwcmV2c2l6ZSA9IHAtPnByZXZfZm9vdDsKKwkgIGlmICgocHJldnNpemUgJiBJU19NTUFQUEVEX0JJVCkgIT0gMCkgeworCSAgICBwcmV2c2l6ZSAmPSB+SVNfTU1BUFBFRF9CSVQ7CisJICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsKKwkgICAgaWYgKENBTExfTVVOTUFQKChjaGFyKilwIC0gcHJldnNpemUsIHBzaXplKSA9PSAwKQorCSAgICAgIGZtLT5mb290cHJpbnQgLT0gcHNpemU7CisJICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgIH0KKwkgIGVsc2UgeworCSAgICBtY2h1bmtwdHIgcHJldiA9IGNodW5rX21pbnVzX29mZnNldChwLCBwcmV2c2l6ZSk7CisJICAgIHBzaXplICs9IHByZXZzaXplOworCSAgICBwID0gcHJldjsKKwkgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcHJldikpKSB7IC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCisJICAgICAgaWYgKHAgIT0gZm0tPmR2KSB7CisJCXVubGlua19jaHVuayhmbSwgcCwgcHJldnNpemUpOworCSAgICAgIH0KKwkgICAgICBlbHNlIGlmICgobmV4dC0+aGVhZCAmIElOVVNFX0JJVFMpID09IElOVVNFX0JJVFMpIHsKKwkJZm0tPmR2c2l6ZSA9IHBzaXplOworCQlzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisJCWdvdG8gcG9zdGFjdGlvbjsKKwkgICAgICB9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICAgIGdvdG8gZXJyb3JhY3Rpb247CisJICB9CisJfQorCisJaWYgKFJUQ0hFQ0sob2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisJICBpZiAoIWNpbnVzZShuZXh0KSkgeyAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLworCSAgICBpZiAobmV4dCA9PSBmbS0+dG9wKSB7CisJICAgICAgc2l6ZV90IHRzaXplID0gZm0tPnRvcHNpemUgKz0gcHNpemU7CisJICAgICAgZm0tPnRvcCA9IHA7CisJICAgICAgcC0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKwkgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKwkJZm0tPmR2ID0gMDsKKwkJZm0tPmR2c2l6ZSA9IDA7CisJICAgICAgfQorCSAgICAgIGlmIChzaG91bGRfdHJpbShmbSwgdHNpemUpKQorCQlzeXNfdHJpbShmbSwgMCk7CisJICAgICAgZ290byBwb3N0YWN0aW9uOworCSAgICB9CisJICAgIGVsc2UgaWYgKG5leHQgPT0gZm0tPmR2KSB7CisJICAgICAgc2l6ZV90IGRzaXplID0gZm0tPmR2c2l6ZSArPSBwc2l6ZTsKKwkgICAgICBmbS0+ZHYgPSBwOworCSAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBkc2l6ZSk7CisJICAgICAgZ290byBwb3N0YWN0aW9uOworCSAgICB9CisJICAgIGVsc2UgeworCSAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsKKwkgICAgICBwc2l6ZSArPSBuc2l6ZTsKKwkgICAgICB1bmxpbmtfY2h1bmsoZm0sIG5leHQsIG5zaXplKTsKKwkgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcHNpemUpOworCSAgICAgIGlmIChwID09IGZtLT5kdikgeworCQlmbS0+ZHZzaXplID0gcHNpemU7CisJCWdvdG8gcG9zdGFjdGlvbjsKKwkgICAgICB9CisJICAgIH0KKwkgIH0KKwkgIGVsc2UKKwkgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworCisJICBpZiAoaXNfc21hbGwocHNpemUpKSB7CisJICAgIGluc2VydF9zbWFsbF9jaHVuayhmbSwgcCwgcHNpemUpOworCSAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKwkgIH0KKwkgIGVsc2UgeworCSAgICB0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7CisJICAgIGluc2VydF9sYXJnZV9jaHVuayhmbSwgdHAsIHBzaXplKTsKKwkgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisJICAgIGlmICgtLWZtLT5yZWxlYXNlX2NoZWNrcyA9PSAwKQorCSAgICAgIHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKGZtKTsKKwkgIH0KKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisgICAgICB9CisgICAgZXJyb3JhY3Rpb246CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgIHBvc3RhY3Rpb246CisgICAgICBQT1NUQUNUSU9OKGZtKTsKKyAgICB9CisgIH0KKyNpZiAhRk9PVEVSUworI3VuZGVmIGZtCisjZW5kaWYgLyogRk9PVEVSUyAqLworfQorCit2b2lkKiBkbGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgeworICB2b2lkKiBtZW07CisgIHNpemVfdCByZXEgPSAwOworICBpZiAobl9lbGVtZW50cyAhPSAwKSB7CisgICAgcmVxID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKKyAgICBpZiAoKChuX2VsZW1lbnRzIHwgZWxlbV9zaXplKSAmIH4oc2l6ZV90KTB4ZmZmZikgJiYKKwkocmVxIC8gbl9lbGVtZW50cyAhPSBlbGVtX3NpemUpKQorICAgICAgcmVxID0gTUFYX1NJWkVfVDsgLyogZm9yY2UgZG93bnN0cmVhbSBmYWlsdXJlIG9uIG92ZXJmbG93ICovCisgIH0KKyAgbWVtID0gZGxtYWxsb2MocmVxKTsKKyAgaWYgKG1lbSAhPSAwICYmIGNhbGxvY19tdXN0X2NsZWFyKG1lbTJjaHVuayhtZW0pKSkKKyAgICBtZW1zZXQobWVtLCAwLCByZXEpOworICByZXR1cm4gbWVtOworfQorCit2b2lkKiBkbHJlYWxsb2Modm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKG9sZG1lbSA9PSAwKQorICAgIHJldHVybiBkbG1hbGxvYyhieXRlcyk7CisjaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCisgIGlmIChieXRlcyA9PSAwKSB7CisgICAgZGxmcmVlKG9sZG1lbSk7CisgICAgcmV0dXJuIDA7CisgIH0KKyNlbmRpZiAvKiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgKi8KKyAgZWxzZSB7CisjaWYgISBGT09URVJTCisgICAgbXN0YXRlIG0gPSBnbTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgbSA9IGdldF9tc3RhdGVfZm9yKG1lbTJjaHVuayhvbGRtZW0pKTsKKyAgICBpZiAoIW9rX21hZ2ljKG0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgcmV0dXJuIGludGVybmFsX3JlYWxsb2MobSwgb2xkbWVtLCBieXRlcyk7CisgIH0KK30KKwordm9pZCogZGxtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgcmV0dXJuIGludGVybmFsX21lbWFsaWduKGdtLCBhbGlnbm1lbnQsIGJ5dGVzKTsKK30KKwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplLAorCQkJCSB2b2lkKiBjaHVua3NbXSkgeworICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkgKi8KKyAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgJnN6LCAzLCBjaHVua3MpOworfQorCit2b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sCisJCQkJICAgdm9pZCogY2h1bmtzW10pIHsKKyAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Cit9CisKK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCBieXRlcykgeworICBzaXplX3QgcGFnZXN6OworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgcGFnZXN6ID0gbXBhcmFtcy5wYWdlX3NpemU7CisgIHJldHVybiBkbG1lbWFsaWduKHBhZ2VzeiwgYnl0ZXMpOworfQorCit2b2lkKiBkbHB2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc3o7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBwYWdlc3ogPSBtcGFyYW1zLnBhZ2Vfc2l6ZTsKKyAgcmV0dXJuIGRsbWVtYWxpZ24ocGFnZXN6LCAoYnl0ZXMgKyBwYWdlc3ogLSBTSVpFX1RfT05FKSAmIH4ocGFnZXN6IC0gU0laRV9UX09ORSkpOworfQorCitpbnQgZGxtYWxsb2NfdHJpbShzaXplX3QgcGFkKSB7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBpbnQgcmVzdWx0ID0gMDsKKyAgaWYgKCFQUkVBQ1RJT04oZ20pKSB7CisgICAgcmVzdWx0ID0gc3lzX3RyaW0oZ20sIHBhZCk7CisgICAgUE9TVEFDVElPTihnbSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+Zm9vdHByaW50OworfQorCitzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+bWF4X2Zvb3RwcmludDsKK30KKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCkgeworICByZXR1cm4gaW50ZXJuYWxfbWFsbGluZm8oZ20pOworfQorI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKK3ZvaWQgZGxtYWxsb2Nfc3RhdHMoKSB7CisgIGludGVybmFsX21hbGxvY19zdGF0cyhnbSk7Cit9CisKK2ludCBkbG1hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOworfQorCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLworCitzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogbWVtKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisgICAgaWYgKGNpbnVzZShwKSkKKyAgICAgIHJldHVybiBjaHVua3NpemUocCkgLSBvdmVyaGVhZF9mb3IocCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHVzZXIgbXNwYWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBNU1BBQ0VTCisKK3N0YXRpYyBtc3RhdGUgaW5pdF91c2VyX21zdGF0ZShjaGFyKiB0YmFzZSwgc2l6ZV90IHRzaXplKSB7CisgIHNpemVfdCBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIG1jaHVua3B0ciBtbjsKKyAgbWNodW5rcHRyIG1zcCA9IGFsaWduX2FzX2NodW5rKHRiYXNlKTsKKyAgbXN0YXRlIG0gPSAobXN0YXRlKShjaHVuazJtZW0obXNwKSk7CisgIG1lbXNldChtLCAwLCBtc2l6ZSk7CisgIElOSVRJQUxfTE9DSygmbS0+bXV0ZXgpOworICBtc3AtPmhlYWQgPSAobXNpemV8UElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgIG0tPnNlZy5zaXplID0gbS0+Zm9vdHByaW50ID0gbS0+bWF4X2Zvb3RwcmludCA9IHRzaXplOworICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7CisgIG0tPnJlbGVhc2VfY2hlY2tzID0gTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURTsKKyAgbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsKKyAgbS0+ZXh0cCA9IDA7CisgIG0tPmV4dHMgPSAwOworICBkaXNhYmxlX2NvbnRpZ3VvdXMobSk7CisgIGluaXRfYmlucyhtKTsKKyAgbW4gPSBuZXh0X2NodW5rKG1lbTJjaHVuayhtKSk7CisgIGluaXRfdG9wKG0sIG1uLCAoc2l6ZV90KSgodGJhc2UgKyB0c2l6ZSkgLSAoY2hhciopbW4pIC0gVE9QX0ZPT1RfU0laRSk7CisgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICByZXR1cm4gbTsKK30KKworbXNwYWNlIGNyZWF0ZV9tc3BhY2Uoc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKSB7CisgIG1zdGF0ZSBtID0gMDsKKyAgc2l6ZV90IG1zaXplOworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBpZiAoY2FwYWNpdHkgPCAoc2l6ZV90KSAtKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkgeworICAgIHNpemVfdCBycyA9ICgoY2FwYWNpdHkgPT0gMCk/IG1wYXJhbXMuZ3JhbnVsYXJpdHkgOgorCQkgKGNhcGFjaXR5ICsgVE9QX0ZPT1RfU0laRSArIG1zaXplKSk7CisgICAgc2l6ZV90IHRzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24ocnMpOworICAgIGNoYXIqIHRiYXNlID0gKGNoYXIqKShDQUxMX01NQVAodHNpemUpKTsKKyAgICBpZiAodGJhc2UgIT0gQ01GQUlMKSB7CisgICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSh0YmFzZSwgdHNpemUpOworICAgICAgbS0+c2VnLnNmbGFncyA9IElTX01NQVBQRURfQklUOworICAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIChtc3BhY2UpbTsKK30KKworbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCkgeworICBtc3RhdGUgbSA9IDA7CisgIHNpemVfdCBtc2l6ZTsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsKKyAgaWYgKGNhcGFjaXR5ID4gbXNpemUgKyBUT1BfRk9PVF9TSVpFICYmCisgICAgICBjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUoKGNoYXIqKWJhc2UsIGNhcGFjaXR5KTsKKyAgICBtLT5zZWcuc2ZsYWdzID0gRVhURVJOX0JJVDsKKyAgICBzZXRfbG9jayhtLCBsb2NrZWQpOworICB9CisgIHJldHVybiAobXNwYWNlKW07Cit9CisKK2ludCBtc3BhY2VfbW1hcF9sYXJnZV9jaHVua3MobXNwYWNlIG1zcCwgaW50IGVuYWJsZSkgeworICBpbnQgcmV0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghUFJFQUNUSU9OKG1zKSkgeworICAgIGlmICh1c2VfbW1hcChtcykpCisgICAgICByZXQgPSAxOworICAgIGlmIChlbmFibGUpCisgICAgICBlbmFibGVfbW1hcChtcyk7CisgICAgZWxzZQorICAgICAgZGlzYWJsZV9tbWFwKG1zKTsKKyAgICBQT1NUQUNUSU9OKG1zKTsKKyAgfQorICByZXR1cm4gcmV0OworfQorCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCkgeworICBzaXplX3QgZnJlZWQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIG1zZWdtZW50cHRyIHNwID0gJm1zLT5zZWc7CisgICAgd2hpbGUgKHNwICE9IDApIHsKKyAgICAgIGNoYXIqIGJhc2UgPSBzcC0+YmFzZTsKKyAgICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7CisgICAgICBmbGFnX3QgZmxhZyA9IHNwLT5zZmxhZ3M7CisgICAgICBzcCA9IHNwLT5uZXh0OworICAgICAgaWYgKChmbGFnICYgSVNfTU1BUFBFRF9CSVQpICYmICEoZmxhZyAmIEVYVEVSTl9CSVQpICYmCisJICBDQUxMX01VTk1BUChiYXNlLCBzaXplKSA9PSAwKQorCWZyZWVkICs9IHNpemU7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIGZyZWVkOworfQorCisvKgorICBtc3BhY2UgdmVyc2lvbnMgb2Ygcm91dGluZXMgYXJlIG5lYXItY2xvbmVzIG9mIHRoZSBnbG9iYWwKKyAgdmVyc2lvbnMuIFRoaXMgaXMgbm90IHNvIG5pY2UgYnV0IGJldHRlciB0aGFuIHRoZSBhbHRlcm5hdGl2ZXMuCisqLworCisKK3ZvaWQqIG1zcGFjZV9tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IGJ5dGVzKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKCFQUkVBQ1RJT04obXMpKSB7CisgICAgdm9pZCogbWVtOworICAgIHNpemVfdCBuYjsKKyAgICBpZiAoYnl0ZXMgPD0gTUFYX1NNQUxMX1JFUVVFU1QpIHsKKyAgICAgIGJpbmRleF90IGlkeDsKKyAgICAgIGJpbm1hcF90IHNtYWxsYml0czsKKyAgICAgIG5iID0gKGJ5dGVzIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlkeCA9IHNtYWxsX2luZGV4KG5iKTsKKyAgICAgIHNtYWxsYml0cyA9IG1zLT5zbWFsbG1hcCA+PiBpZHg7CisKKyAgICAgIGlmICgoc21hbGxiaXRzICYgMHgzVSkgIT0gMCkgeyAvKiBSZW1haW5kZXJsZXNzIGZpdCB0byBhIHNtYWxsYmluLiAqLworCW1jaHVua3B0ciBiLCBwOworCWlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8KKwliID0gc21hbGxiaW5fYXQobXMsIGlkeCk7CisJcCA9IGItPmZkOworCWFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKwl1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXMsIGIsIHAsIGlkeCk7CisJc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisJbWVtID0gY2h1bmsybWVtKHApOworCWNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKwlnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKG5iID4gbXMtPmR2c2l6ZSkgeworCWlmIChzbWFsbGJpdHMgIT0gMCkgeyAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLworCSAgbWNodW5rcHRyIGIsIHAsIHI7CisJICBzaXplX3QgcnNpemU7CisJICBiaW5kZXhfdCBpOworCSAgYmlubWFwX3QgbGVmdGJpdHMgPSAoc21hbGxiaXRzIDw8IGlkeCkgJiBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKTsKKwkgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKwkgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisJICBiID0gc21hbGxiaW5fYXQobXMsIGkpOworCSAgcCA9IGItPmZkOworCSAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGkpKTsKKwkgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhtcywgYiwgcCwgaSk7CisJICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsKKwkgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNpemVzICovCisJICBpZiAoU0laRV9UX1NJWkUgIT0gNCAmJiByc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorCSAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7CisJICBlbHNlIHsKKwkgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOworCSAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworCSAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCSAgICByZXBsYWNlX2R2KG1zLCByLCByc2l6ZSk7CisJICB9CisJICBtZW0gPSBjaHVuazJtZW0ocCk7CisJICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorCisJZWxzZSBpZiAobXMtPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19zbWFsbChtcywgbmIpKSAhPSAwKSB7CisJICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkKKyAgICAgIG5iID0gTUFYX1NJWkVfVDsgLyogVG9vIGJpZyB0byBhbGxvY2F0ZS4gRm9yY2UgZmFpbHVyZSAoaW4gc3lzIGFsbG9jKSAqLworICAgIGVsc2UgeworICAgICAgbmIgPSBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZiAobXMtPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19sYXJnZShtcywgbmIpKSAhPSAwKSB7CisJY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworCWdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPD0gbXMtPmR2c2l6ZSkgeworICAgICAgc2l6ZV90IHJzaXplID0gbXMtPmR2c2l6ZSAtIG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtcy0+ZHY7CisgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsgLyogc3BsaXQgZHYgKi8KKwltY2h1bmtwdHIgciA9IG1zLT5kdiA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKwltcy0+ZHZzaXplID0gcnNpemU7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7CisgICAgICB9CisgICAgICBlbHNlIHsgLyogZXhoYXVzdCBkdiAqLworCXNpemVfdCBkdnMgPSBtcy0+ZHZzaXplOworCW1zLT5kdnNpemUgPSAwOworCW1zLT5kdiA9IDA7CisJc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIGR2cyk7CisgICAgICB9CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgZWxzZSBpZiAobmIgPCBtcy0+dG9wc2l6ZSkgeyAvKiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IG1zLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtcy0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBtcy0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhtcywgbXMtPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKG1zLCBuYik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKG1zKTsKKyAgICByZXR1cm4gbWVtOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOworI2lmIEZPT1RFUlMKKyAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgZm0gPSAobXN0YXRlKW1zcDsKKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghUFJFQUNUSU9OKGZtKSkgeworICAgICAgY2hlY2tfaW51c2VfY2h1bmsoZm0sIHApOworICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcCkgJiYgb2tfY2ludXNlKHApKSkgeworCXNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKwltY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKwlpZiAoIXBpbnVzZShwKSkgeworCSAgc2l6ZV90IHByZXZzaXplID0gcC0+cHJldl9mb290OworCSAgaWYgKChwcmV2c2l6ZSAmIElTX01NQVBQRURfQklUKSAhPSAwKSB7CisJICAgIHByZXZzaXplICY9IH5JU19NTUFQUEVEX0JJVDsKKwkgICAgcHNpemUgKz0gcHJldnNpemUgKyBNTUFQX0ZPT1RfUEFEOworCSAgICBpZiAoQ0FMTF9NVU5NQVAoKGNoYXIqKXAgLSBwcmV2c2l6ZSwgcHNpemUpID09IDApCisJICAgICAgZm0tPmZvb3RwcmludCAtPSBwc2l6ZTsKKwkgICAgZ290byBwb3N0YWN0aW9uOworCSAgfQorCSAgZWxzZSB7CisJICAgIG1jaHVua3B0ciBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsKKwkgICAgcHNpemUgKz0gcHJldnNpemU7CisJICAgIHAgPSBwcmV2OworCSAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwcmV2KSkpIHsgLyogY29uc29saWRhdGUgYmFja3dhcmQgKi8KKwkgICAgICBpZiAocCAhPSBmbS0+ZHYpIHsKKwkJdW5saW5rX2NodW5rKGZtLCBwLCBwcmV2c2l6ZSk7CisJICAgICAgfQorCSAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykgeworCQlmbS0+ZHZzaXplID0gcHNpemU7CisJCXNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKwkJZ290byBwb3N0YWN0aW9uOworCSAgICAgIH0KKwkgICAgfQorCSAgICBlbHNlCisJICAgICAgZ290byBlcnJvcmFjdGlvbjsKKwkgIH0KKwl9CisKKwlpZiAoUlRDSEVDSyhva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKKwkgIGlmICghY2ludXNlKG5leHQpKSB7ICAvKiBjb25zb2xpZGF0ZSBmb3J3YXJkICovCisJICAgIGlmIChuZXh0ID09IGZtLT50b3ApIHsKKwkgICAgICBzaXplX3QgdHNpemUgPSBmbS0+dG9wc2l6ZSArPSBwc2l6ZTsKKwkgICAgICBmbS0+dG9wID0gcDsKKwkgICAgICBwLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworCSAgICAgIGlmIChwID09IGZtLT5kdikgeworCQlmbS0+ZHYgPSAwOworCQlmbS0+ZHZzaXplID0gMDsKKwkgICAgICB9CisJICAgICAgaWYgKHNob3VsZF90cmltKGZtLCB0c2l6ZSkpCisJCXN5c190cmltKGZtLCAwKTsKKwkgICAgICBnb3RvIHBvc3RhY3Rpb247CisJICAgIH0KKwkgICAgZWxzZSBpZiAobmV4dCA9PSBmbS0+ZHYpIHsKKwkgICAgICBzaXplX3QgZHNpemUgPSBmbS0+ZHZzaXplICs9IHBzaXplOworCSAgICAgIGZtLT5kdiA9IHA7CisJICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIGRzaXplKTsKKwkgICAgICBnb3RvIHBvc3RhY3Rpb247CisJICAgIH0KKwkgICAgZWxzZSB7CisJICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG5leHQpOworCSAgICAgIHBzaXplICs9IG5zaXplOworCSAgICAgIHVubGlua19jaHVuayhmbSwgbmV4dCwgbnNpemUpOworCSAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBwc2l6ZSk7CisJICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisJCWZtLT5kdnNpemUgPSBwc2l6ZTsKKwkJZ290byBwb3N0YWN0aW9uOworCSAgICAgIH0KKwkgICAgfQorCSAgfQorCSAgZWxzZQorCSAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisKKwkgIGlmIChpc19zbWFsbChwc2l6ZSkpIHsKKwkgICAgaW5zZXJ0X3NtYWxsX2NodW5rKGZtLCBwLCBwc2l6ZSk7CisJICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOworCSAgfQorCSAgZWxzZSB7CisJICAgIHRjaHVua3B0ciB0cCA9ICh0Y2h1bmtwdHIpcDsKKwkgICAgaW5zZXJ0X2xhcmdlX2NodW5rKGZtLCB0cCwgcHNpemUpOworCSAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKwkgICAgaWYgKC0tZm0tPnJlbGVhc2VfY2hlY2tzID09IDApCisJICAgICAgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMoZm0pOworCSAgfQorCSAgZ290byBwb3N0YWN0aW9uOworCX0KKyAgICAgIH0KKyAgICBlcnJvcmFjdGlvbjoKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgcG9zdGFjdGlvbjoKKyAgICAgIFBPU1RBQ1RJT04oZm0pOworICAgIH0KKyAgfQorfQorCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7CisgIHZvaWQqIG1lbTsKKyAgc2l6ZV90IHJlcSA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKG5fZWxlbWVudHMgIT0gMCkgeworICAgIHJlcSA9IG5fZWxlbWVudHMgKiBlbGVtX3NpemU7CisgICAgaWYgKCgobl9lbGVtZW50cyB8IGVsZW1fc2l6ZSkgJiB+KHNpemVfdCkweGZmZmYpICYmCisJKHJlcSAvIG5fZWxlbWVudHMgIT0gZWxlbV9zaXplKSkKKyAgICAgIHJlcSA9IE1BWF9TSVpFX1Q7IC8qIGZvcmNlIGRvd25zdHJlYW0gZmFpbHVyZSBvbiBvdmVyZmxvdyAqLworICB9CisgIG1lbSA9IGludGVybmFsX21hbGxvYyhtcywgcmVxKTsKKyAgaWYgKG1lbSAhPSAwICYmIGNhbGxvY19tdXN0X2NsZWFyKG1lbTJjaHVuayhtZW0pKSkKKyAgICBtZW1zZXQobWVtLCAwLCByZXEpOworICByZXR1cm4gbWVtOworfQorCit2b2lkKiBtc3BhY2VfcmVhbGxvYyhtc3BhY2UgbXNwLCB2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgeworICBpZiAob2xkbWVtID09IDApCisgICAgcmV0dXJuIG1zcGFjZV9tYWxsb2MobXNwLCBieXRlcyk7CisjaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCisgIGlmIChieXRlcyA9PSAwKSB7CisgICAgbXNwYWNlX2ZyZWUobXNwLCBvbGRtZW0pOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYgLyogUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCisgIGVsc2UgeworI2lmIEZPT1RFUlMKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsob2xkbWVtKTsKKyAgICBtc3RhdGUgbXMgPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIGludGVybmFsX3JlYWxsb2MobXMsIG9sZG1lbSwgYnl0ZXMpOworICB9Cit9CisKK3ZvaWQqIG1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaW50ZXJuYWxfbWVtYWxpZ24obXMsIGFsaWdubWVudCwgYnl0ZXMpOworfQorCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKwkJCQkgc2l6ZV90IGVsZW1fc2l6ZSwgdm9pZCogY2h1bmtzW10pIHsKKyAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMgYXMgMS1lbGVtZW50IGFycmF5ICovCisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGlhbGxvYyhtcywgbl9lbGVtZW50cywgJnN6LCAzLCBjaHVua3MpOworfQorCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpYWxsb2MobXMsIG5fZWxlbWVudHMsIHNpemVzLCAwLCBjaHVua3MpOworfQorCitpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCkgeworICBpbnQgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICAgIHJlc3VsdCA9IHN5c190cmltKG1zLCBwYWQpOworICAgICAgUE9TVEFDVElPTihtcyk7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXMpOworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KK30KKworc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICByZXN1bHQgPSBtcy0+Zm9vdHByaW50OworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICByZXN1bHQgPSBtcy0+bWF4X2Zvb3RwcmludDsKKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIGludGVybmFsX21hbGxpbmZvKG1zKTsKK30KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCitzaXplX3QgbXNwYWNlX3VzYWJsZV9zaXplKHZvaWQqIG1lbSkgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgIGlmIChjaW51c2UocCkpCisgICAgICByZXR1cm4gY2h1bmtzaXplKHApIC0gb3ZlcmhlYWRfZm9yKHApOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgbXNwYWNlX21hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOworfQorCisjZW5kaWYgLyogTVNQQUNFUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBBbHRlcm5hdGl2ZSBNT1JFQ09SRSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBHdWlkZWxpbmVzIGZvciBjcmVhdGluZyBhIGN1c3RvbSB2ZXJzaW9uIG9mIE1PUkVDT1JFOgorCisgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIE1PUkVDT1JFIHNob3VsZCBhbGxvY2F0ZSBpbiBtdWx0aXBsZXMgb2YgcGFnZXNpemUuCisgICogTU9SRUNPUkUgbWF5IGFsbG9jYXRlIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkLiAoT3IgZXZlbiBsZXNzLAorICAgICAgYnV0IHRoaXMgd2lsbCB1c3VhbGx5IHJlc3VsdCBpbiBhIG1hbGxvYyBmYWlsdXJlLikKKyAgKiBNT1JFQ09SRSBtdXN0IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2hlbiBnaXZlbiBhcmd1bWVudCB6ZXJvLCBidXQKKyAgICAgIGluc3RlYWQgcmV0dXJuIG9uZSBwYXN0IHRoZSBlbmQgYWRkcmVzcyBvZiBtZW1vcnkgZnJvbSBwcmV2aW91cworICAgICAgbm9uemVybyBjYWxsLgorICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRSB3aXRoIHBvc2l0aXZlCisgICAgICBhcmd1bWVudHMgc2hvdWxkIHJldHVybiBpbmNyZWFzaW5nIGFkZHJlc3NlcywgaW5kaWNhdGluZyB0aGF0CisgICAgICBzcGFjZSBoYXMgYmVlbiBjb250aWd1b3VzbHkgZXh0ZW5kZWQuCisgICogRXZlbiB0aG91Z2ggY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgbmVlZCBub3QgcmV0dXJuIGNvbnRpZ3VvdXMKKyAgICAgIGFkZHJlc3NlcywgaXQgbXVzdCBiZSBPSyBmb3IgbWFsbG9jJ2VkIGNodW5rcyB0byBzcGFuIG11bHRpcGxlCisgICAgICByZWdpb25zIGluIHRob3NlIGNhc2VzIHdoZXJlIHRoZXkgZG8gaGFwcGVuIHRvIGJlIGNvbnRpZ3VvdXMuCisgICogTU9SRUNPUkUgbmVlZCBub3QgaGFuZGxlIG5lZ2F0aXZlIGFyZ3VtZW50cyAtLSBpdCBtYXkgaW5zdGVhZAorICAgICAganVzdCByZXR1cm4gTUZBSUwgd2hlbiBnaXZlbiBuZWdhdGl2ZSBhcmd1bWVudHMuCisgICAgICBOZWdhdGl2ZSBhcmd1bWVudHMgYXJlIGFsd2F5cyBtdWx0aXBsZXMgb2YgcGFnZXNpemUuIE1PUkVDT1JFCisgICAgICBtdXN0IG5vdCBtaXNpbnRlcnByZXQgbmVnYXRpdmUgYXJncyBhcyBsYXJnZSBwb3NpdGl2ZSB1bnNpZ25lZAorICAgICAgYXJncy4gWW91IGNhbiBzdXBwcmVzcyBhbGwgc3VjaCBjYWxscyBmcm9tIGV2ZW4gb2NjdXJyaW5nIGJ5IGRlZmluaW5nCisgICAgICBNT1JFQ09SRV9DQU5OT1RfVFJJTSwKKworICBBcyBhbiBleGFtcGxlIGFsdGVybmF0aXZlIE1PUkVDT1JFLCBoZXJlIGlzIGEgY3VzdG9tIGFsbG9jYXRvcgorICBraW5kbHkgY29udHJpYnV0ZWQgZm9yIHByZS1PU1ggbWFjT1MuICBJdCB1c2VzIHZpcnR1YWxseSBidXQgbm90CisgIG5lY2Vzc2FyaWx5IHBoeXNpY2FsbHkgY29udGlndW91cyBub24tcGFnZWQgbWVtb3J5IChsb2NrZWQgaW4sCisgIHByZXNlbnQgYW5kIHdvbid0IGdldCBzd2FwcGVkIG91dCkuICBZb3UgY2FuIHVzZSBpdCBieSB1bmNvbW1lbnRpbmcKKyAgdGhpcyBzZWN0aW9uLCBhZGRpbmcgc29tZSAjaW5jbHVkZXMsIGFuZCBzZXR0aW5nIHVwIHRoZSBhcHByb3ByaWF0ZQorICBkZWZpbmVzIGFib3ZlOgorCisgICAgICAjZGVmaW5lIE1PUkVDT1JFIG9zTW9yZUNvcmUKKworICBUaGVyZSBpcyBhbHNvIGEgc2h1dGRvd24gcm91dGluZSB0aGF0IHNob3VsZCBzb21laG93IGJlIGNhbGxlZCBmb3IKKyAgY2xlYW51cCB1cG9uIHByb2dyYW0gZXhpdC4KKworICAjZGVmaW5lIE1BWF9QT09MX0VOVFJJRVMgMTAwCisgICNkZWZpbmUgTUlOSU1VTV9NT1JFQ09SRV9TSVpFICAoNjQgKiAxMDI0VSkKKyAgc3RhdGljIGludCBuZXh0X29zX3Bvb2w7CisgIHZvaWQgKm91cl9vc19wb29sc1tNQVhfUE9PTF9FTlRSSUVTXTsKKworICB2b2lkICpvc01vcmVDb3JlKGludCBzaXplKQorICB7CisgICAgdm9pZCAqcHRyID0gMDsKKyAgICBzdGF0aWMgdm9pZCAqc2Jya190b3AgPSAwOworCisgICAgaWYgKHNpemUgPiAwKQorICAgIHsKKyAgICAgIGlmIChzaXplIDwgTUlOSU1VTV9NT1JFQ09SRV9TSVpFKQorCSBzaXplID0gTUlOSU1VTV9NT1JFQ09SRV9TSVpFOworICAgICAgaWYgKEN1cnJlbnRFeGVjdXRpb25MZXZlbCgpID09IGtUYXNrTGV2ZWwpCisJIHB0ciA9IFBvb2xBbGxvY2F0ZVJlc2lkZW50KHNpemUgKyBSTV9QQUdFX1NJWkUsIDApOworICAgICAgaWYgKHB0ciA9PSAwKQorICAgICAgeworCXJldHVybiAodm9pZCAqKSBNRkFJTDsKKyAgICAgIH0KKyAgICAgIC8vIHNhdmUgcHRycyBzbyB0aGV5IGNhbiBiZSBmcmVlZCBkdXJpbmcgY2xlYW51cAorICAgICAgb3VyX29zX3Bvb2xzW25leHRfb3NfcG9vbF0gPSBwdHI7CisgICAgICBuZXh0X29zX3Bvb2wrKzsKKyAgICAgIHB0ciA9ICh2b2lkICopICgoKChzaXplX3QpIHB0cikgKyBSTV9QQUdFX01BU0spICYgflJNX1BBR0VfTUFTSyk7CisgICAgICBzYnJrX3RvcCA9IChjaGFyICopIHB0ciArIHNpemU7CisgICAgICByZXR1cm4gcHRyOworICAgIH0KKyAgICBlbHNlIGlmIChzaXplIDwgMCkKKyAgICB7CisgICAgICAvLyB3ZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBzaHJpbmsgYmVoYXZpb3IKKyAgICAgIHJldHVybiAodm9pZCAqKSBNRkFJTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBzYnJrX3RvcDsKKyAgICB9CisgIH0KKworICAvLyBjbGVhbnVwIGFueSBhbGxvY2F0ZWQgbWVtb3J5IHBvb2xzCisgIC8vIGNhbGxlZCBhcyBsYXN0IHRoaW5nIGJlZm9yZSBzaHV0dGluZyBkb3duIGRyaXZlcgorCisgIHZvaWQgb3NDbGVhbnVwTWVtKHZvaWQpCisgIHsKKyAgICB2b2lkICoqcHRyOworCisgICAgZm9yIChwdHIgPSBvdXJfb3NfcG9vbHM7IHB0ciA8ICZvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107IHB0cisrKQorICAgICAgaWYgKCpwdHIpCisgICAgICB7CisJIFBvb2xEZWFsbG9jYXRlKCpwdHIpOworCSAqcHRyID0gMDsKKyAgICAgIH0KKyAgfQorCisqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIaXN0b3J5OgorICAgIFYyLjguNCAobm90IHlldCByZWxlYXNlZCkKKyAgICAgICogQWRkIG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rczsgdGhhbmtzIHRvIEplYW4gQnJvdXdlcnMKKyAgICAgICogRml4IGluc3VmZmljaWVudCBzeXNfYWxsb2MgcGFkZGluZyB3aGVuIHVzaW5nIDE2Ynl0ZSBhbGlnbm1lbnQKKyAgICAgICogRml4IGJhZCBlcnJvciBjaGVjayBpbiBtc3BhY2VfZm9vdHByaW50CisgICAgICAqIEFkYXB0YXRpb25zIGZvciBwdG1hbGxvYywgY291cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIuCisgICAgICAqIFJlZW50cmFudCBzcGluIGxvY2tzLCBjb3VydGVzeSBvZiBFYXJsIENoZXcgYW5kIG90aGVycworICAgICAgKiBXaW4zMiBpbXByb3ZlbWVudHMsIGNvdXJ0ZXN5IG9mIE5pYWxsIERvdWdsYXMgYW5kIEVhcmwgQ2hldworICAgICAgKiBBZGQgTk9fU0VHTUVOVF9UUkFWRVJTQUwgYW5kIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgb3B0aW9ucworICAgICAgKiBFeHRlbnNpb24gaG9vayBpbiBtYWxsb2Nfc3RhdGUKKyAgICAgICogVmFyaW91cyBzbWFsbCBhZGp1c3RtZW50cyB0byByZWR1Y2Ugd2FybmluZ3Mgb24gc29tZSBjb21waWxlcnMKKyAgICAgICogVmFyaW91cyBjb25maWd1cmF0aW9uIGV4dGVuc2lvbnMvY2hhbmdlcyBmb3IgbW9yZSBwbGF0Zm9ybXMuIFRoYW5rcworCSB0byBhbGwgd2hvIGNvbnRyaWJ1dGVkIHRoZXNlLgorCisgICAgVjIuOC4zIFRodSBTZXAgMjIgMTE6MTY6MzIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZCBtYXhfZm9vdHByaW50IGZ1bmN0aW9ucworICAgICAgKiBFbnN1cmUgYWxsIGFwcHJvcHJpYXRlIGxpdGVyYWxzIGFyZSBzaXplX3QKKyAgICAgICogRml4IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHByb2JsZW0gZm9yIHNvbWUgI2RlZmluZSBzZXR0aW5ncworICAgICAgKiBBdm9pZCBjb25jYXRlbmF0aW5nIHNlZ21lbnRzIHdpdGggdGhlIG9uZSBwcm92aWRlZAorCWluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlCisgICAgICAqIFJlbmFtZSBzb21lIHZhcmlhYmxlcyB0byBhdm9pZCBjb21waWxlciBzaGFkb3dpbmcgd2FybmluZ3MKKyAgICAgICogVXNlIGV4cGxpY2l0IGxvY2sgaW5pdGlhbGl6YXRpb24uCisgICAgICAqIEJldHRlciBoYW5kbGluZyBvZiBzYnJrIGludGVyZmVyZW5jZS4KKyAgICAgICogU2ltcGxpZnkgYW5kIGZpeCBzZWdtZW50IGluc2VydGlvbiwgdHJpbW1pbmcgYW5kIG1zcGFjZV9kZXN0cm95CisgICAgICAqIFJlaW5zdGF0ZSBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgb3B0aW9uIGZyb20gMi43LngKKyAgICAgICogVGhhbmtzIGVzcGVjaWFsbHkgdG8gRGVubmlzIEZsYW5hZ2FuIGZvciBoZWxwIG9uIHRoZXNlLgorCisgICAgVjIuOC4yIFN1biBKdW4gMTIgMTY6MDE6MTAgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeCBtZW1hbGlnbiBicmFjZSBlcnJvci4KKworICAgIFYyLjguMSBXZWQgSnVuICA4IDE2OjExOjQ2IDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggaW1wcm9wZXIgI2VuZGlmIG5lc3RpbmcgaW4gQysrCisgICAgICAqIEFkZCBleHBsaWNpdCBjYXN0cyBuZWVkZWQgZm9yIEMrKworCisgICAgVjIuOC4wIE1vbiBNYXkgMzAgMTQ6MDk6MDIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFVzZSB0cmVlcyBmb3IgbGFyZ2UgYmlucworICAgICAgKiBTdXBwb3J0IG1zcGFjZXMKKyAgICAgICogVXNlIHNlZ21lbnRzIHRvIHVuaWZ5IHNicmstYmFzZWQgYW5kIG1tYXAtYmFzZWQgc3lzdGVtIGFsbG9jYXRpb24sCisJcmVtb3ZpbmcgbmVlZCBmb3IgZW11bGF0aW9uIG9uIG1vc3QgcGxhdGZvcm1zIHdpdGhvdXQgc2Jyay4KKyAgICAgICogRGVmYXVsdCBzYWZldHkgY2hlY2tzCisgICAgICAqIE9wdGlvbmFsIGZvb3RlciBjaGVja3MuIFRoYW5rcyB0byBXaWxsaWFtIFJvYmVydHNvbiBmb3IgdGhlIGlkZWEuCisgICAgICAqIEludGVybmFsIGNvZGUgcmVmYWN0b3JpbmcKKyAgICAgICogSW5jb3Jwb3JhdGUgc3VnZ2VzdGlvbnMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIGNoYW5nZXMuCisJVGhhbmtzIHRvIERlbm5pcyBGbGFuYWdhbiwgQ29saW4gUGx1bWIsIE5pYWxsIERvdWdsYXMsCisJQWFyb24gQmFjaG1hbm4sICBFbWVyeSBCZXJnZXIsIGFuZCBvdGhlcnMuCisgICAgICAqIFNwZWVkIHVwIG5vbi1mYXN0YmluIHByb2Nlc3NpbmcgZW5vdWdoIHRvIHJlbW92ZSBmYXN0Ymlucy4KKyAgICAgICogUmVtb3ZlIHVzZWxlc3MgY2ZyZWUoKSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBhcHBzLgorICAgICAgKiBSZW1vdmUgaW50ZXJuYWwgbWVtY3B5LCBtZW1zZXQuIENvbXBpbGVycyBoYW5kbGUgYnVpbHRpbnMgYmV0dGVyLgorICAgICAgKiBSZW1vdmUgc29tZSBvcHRpb25zIHRoYXQgbm8gb25lIGV2ZXIgdXNlZCBhbmQgcmVuYW1lIG90aGVycy4KKworICAgIFYyLjcuMiBTYXQgQXVnIDE3IDA5OjA3OjMwIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggbWFsbG9jX3N0YXRlIGJpdG1hcCBhcnJheSBtaXNkZWNsYXJhdGlvbgorCisgICAgVjIuNy4xIFRodSBKdWwgMjUgMTA6NTg6MDMgMjAwMiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFsbG93IHR1bmluZyBvZiBGSVJTVF9TT1JURURfQklOX1NJWkUKKyAgICAgICogVXNlIFBUUl9VSU5UIGFzIHR5cGUgZm9yIGFsbCBwdHItPmludCBjYXN0cy4gVGhhbmtzIHRvIEpvaG4gQmVsbW9udGUuCisgICAgICAqIEJldHRlciBkZXRlY3Rpb24gYW5kIHN1cHBvcnQgZm9yIG5vbi1jb250aWd1b3VzbmVzcyBvZiBNT1JFQ09SRS4KKwlUaGFua3MgdG8gQW5kcmVhcyBNdWVsbGVyLCBDb25hbCBXYWxzaCwgYW5kIFdvbGZyYW0gR2xvZ2VyCisgICAgICAqIEJ5cGFzcyBtb3N0IG9mIG1hbGxvYyBpZiBubyBmcmVlcy4gVGhhbmtzIFRvIEVtZXJ5IEJlcmdlci4KKyAgICAgICogRml4IGZyZWVpbmcgb2Ygb2xkIHRvcCBub24tY29udGlndW91cyBjaHVuayBpbSBzeXNtYWxsb2MuCisgICAgICAqIFJhaXNlZCBkZWZhdWx0IHRyaW0gYW5kIG1hcCB0aHJlc2hvbGRzIHRvIDI1NksuCisgICAgICAqIEZpeCBtbWFwLXJlbGF0ZWQgI2RlZmluZXMuIFRoYW5rcyB0byBMdWJvcyBMdW5hay4KKyAgICAgICogRml4IGNvcHkgbWFjcm9zOyBhZGRlZCBMQUNLU19GQ05UTF9ILiBUaGFua3MgdG8gTmVhbCBXYWxmaWVsZC4KKyAgICAgICogQnJhbmNoLWZyZWUgYmluIGNhbGN1bGF0aW9uCisgICAgICAqIERlZmF1bHQgdHJpbSBhbmQgbW1hcCB0aHJlc2hvbGRzIG5vdyAyNTZLLgorCisgICAgVjIuNy4wIFN1biBNYXIgMTEgMTQ6MTQ6MDYgMjAwMSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEludHJvZHVjZSBpbmRlcGVuZGVudF9jb21hbGxvYyBhbmQgaW5kZXBlbmRlbnRfY2FsbG9jLgorCVRoYW5rcyB0byBNaWNoYWVsIFBhY2hvcyBmb3IgbW90aXZhdGlvbiBhbmQgaGVscC4KKyAgICAgICogTWFrZSBvcHRpb25hbCAuaCBmaWxlIGF2YWlsYWJsZQorICAgICAgKiBBbGxvdyA+IDJHQiByZXF1ZXN0cyBvbiAzMmJpdCBzeXN0ZW1zLgorICAgICAgKiBuZXcgV0lOMzIgc2JyaywgbW1hcCwgbXVubWFwLCBsb2NrIGNvZGUgZnJvbSA8V2FsdGVyQEdlTmVTeXMtZS5kZT4uCisJVGhhbmtzIGFsc28gdG8gQW5kcmVhcyBNdWVsbGVyIDxhLm11ZWxsZXIgYXQgcGFyYWRhdGVjLmRlPiwKKwlhbmQgQW5vbnltb3VzLgorICAgICAgKiBBbGxvdyBvdmVycmlkZSBvZiBNQUxMT0NfQUxJR05NRU5UIChUaGFua3MgdG8gUnV1ZCBXYWlqIGZvcgorCWhlbHBpbmcgdGVzdCB0aGlzLikKKyAgICAgICogbWVtYWxpZ246IGNoZWNrIGFsaWdubWVudCBhcmcKKyAgICAgICogcmVhbGxvYzogZG9uJ3QgdHJ5IHRvIHNoaWZ0IGNodW5rcyBiYWNrd2FyZHMsIHNpbmNlIHRoaXMKKwlsZWFkcyB0byAgbW9yZSBmcmFnbWVudGF0aW9uIGluIHNvbWUgcHJvZ3JhbXMgYW5kIGRvZXNuJ3QKKwlzZWVtIHRvIGhlbHAgaW4gYW55IG90aGVycy4KKyAgICAgICogQ29sbGVjdCBhbGwgY2FzZXMgaW4gbWFsbG9jIHJlcXVpcmluZyBzeXN0ZW0gbWVtb3J5IGludG8gc3lzbWFsbG9jCisgICAgICAqIFVzZSBtbWFwIGFzIGJhY2t1cCB0byBzYnJrCisgICAgICAqIFBsYWNlIGFsbCBpbnRlcm5hbCBzdGF0ZSBpbiBtYWxsb2Nfc3RhdGUKKyAgICAgICogSW50cm9kdWNlIGZhc3RiaW5zIChhbHRob3VnaCBzaW1pbGFyIHRvIDIuNS4xKQorICAgICAgKiBNYW55IG1pbm9yIHR1bmluZ3MgYW5kIGNvc21ldGljIGltcHJvdmVtZW50cworICAgICAgKiBJbnRyb2R1Y2UgVVNFX1BVQkxJQ19NQUxMT0NfV1JBUFBFUlMsIFVTRV9NQUxMT0NfTE9DSworICAgICAgKiBJbnRyb2R1Y2UgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OLCBNT1JFQ09SRV9DT05USUdVT1VTCisJVGhhbmtzIHRvIFRvbnkgRS4gQmVubmV0dCA8dGJlbm5ldHRAbnZpZGlhLmNvbT4gYW5kIG90aGVycy4KKyAgICAgICogSW5jbHVkZSBlcnJuby5oIHRvIHN1cHBvcnQgZGVmYXVsdCBmYWlsdXJlIGFjdGlvbi4KKworICAgIFYyLjYuNiBTdW4gRGVjICA1IDA3OjQyOjE5IDE5OTkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVnYXRpdmUgYXJndW1lbnRzCisgICAgICAqIEFkZGVkIFNldmVyYWwgV0lOMzIgY2xlYW51cHMgZnJvbSBNYXJ0aW4gQy4gRm9uZyA8bWNmb25nIGF0IHlhaG9vLmNvbT4KKwkgKiBBZGQgJ0xBQ0tTX1NZU19QQVJBTV9IJyBmb3IgdGhvc2Ugc3lzdGVtcyB3aXRob3V0ICdzeXMvcGFyYW0uaCcKKwkgIChlLmcuIFdJTjMyIHBsYXRmb3JtcykKKwkgKiBDbGVhbnVwIGhlYWRlciBmaWxlIGluY2x1c2lvbiBmb3IgV0lOMzIgcGxhdGZvcm1zCisJICogQ2xlYW51cCBjb2RlIHRvIGF2b2lkIE1pY3Jvc29mdCBWaXN1YWwgQysrIGNvbXBpbGVyIGNvbXBsYWludHMKKwkgKiBBZGQgJ1VTRV9ETF9QUkVGSVgnIHRvIHF1aWNrbHkgYWxsb3cgY28tZXhpc3RlbmNlIHdpdGggZXhpc3RpbmcKKwkgICBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcworCSAqIFNldCAnbWFsbG9jX2dldHBhZ2VzaXplJyBmb3IgV0lOMzIgcGxhdGZvcm1zIChuZWVkcyBtb3JlIHdvcmspCisJICogVXNlICdhc3NlcnQnIHJhdGhlciB0aGFuICdBU1NFUlQnIGluIFdJTjMyIGNvZGUgdG8gY29uZm9ybSB0bworCSAgIHVzYWdlIG9mICdhc3NlcnQnIGluIG5vbi1XSU4zMiBjb2RlCisJICogSW1wcm92ZSBXSU4zMiAnc2JyaygpJyBlbXVsYXRpb24ncyAnZmluZFJlZ2lvbigpJyByb3V0aW5lIHRvCisJICAgYXZvaWQgaW5maW5pdGUgbG9vcAorICAgICAgKiBBbHdheXMgY2FsbCAnZlJFZSgpJyByYXRoZXIgdGhhbiAnZnJlZSgpJworCisgICAgVjIuNi41IFdlZCBKdW4gMTcgMTU6NTc6MzEgMTk5OCAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeGVkIG9yZGVyaW5nIHByb2JsZW0gd2l0aCBib3VuZGFyeS1zdGFtcGluZworCisgICAgVjIuNi4zIFN1biBNYXkgMTkgMDg6MTc6NTggMTk5NiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZGVkIHB2YWxsb2MsIGFzIHJlY29tbWVuZGVkIGJ5IEguSi4gTGl1CisgICAgICAqIEFkZGVkIDY0Yml0IHBvaW50ZXIgc3VwcG9ydCBtYWlubHkgZnJvbSBXb2xmcmFtIEdsb2dlcgorICAgICAgKiBBZGRlZCBhbm9ueW1vdXNseSBkb25hdGVkIFdJTjMyIHNicmsgZW11bGF0aW9uCisgICAgICAqIE1hbGxvYywgY2FsbG9jLCBnZXRwYWdlc2l6ZTogYWRkIG9wdGltaXphdGlvbnMgZnJvbSBSYXltb25kIE5panNzZW4KKyAgICAgICogbWFsbG9jX2V4dGVuZF90b3A6IGZpeCBtYXNrIGVycm9yIHRoYXQgY2F1c2VkIHdhc3RhZ2UgYWZ0ZXIKKwlmb3JlaWduIHNicmtzCisgICAgICAqIEFkZCBsaW51eCBtcmVtYXAgc3VwcG9ydCBjb2RlIGZyb20gSEogTGl1CisKKyAgICBWMi42LjIgVHVlIERlYyAgNSAwNjo1Mjo1NSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogSW50ZWdyYXRlZCBtb3N0IGRvY3VtZW50YXRpb24gd2l0aCB0aGUgY29kZS4KKyAgICAgICogQWRkIHN1cHBvcnQgZm9yIG1tYXAsIHdpdGggaGVscCBmcm9tCisJV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKyAgICAgICogVXNlIGxhc3RfcmVtYWluZGVyIGluIG1vcmUgY2FzZXMuCisgICAgICAqIFBhY2sgYmlucyB1c2luZyBpZGVhIGZyb20gIGNvbGluQG55eDEwLmNzLmR1LmVkdQorICAgICAgKiBVc2Ugb3JkZXJlZCBiaW5zIGluc3RlYWQgb2YgYmVzdC1maXQgdGhyZXNoaG9sZAorICAgICAgKiBFbGltaW5hdGUgYmxvY2stbG9jYWwgZGVjbHMgdG8gc2ltcGxpZnkgdHJhY2luZyBhbmQgZGVidWdnaW5nLgorICAgICAgKiBTdXBwb3J0IGFub3RoZXIgY2FzZSBvZiByZWFsbG9jIHZpYSBtb3ZlIGludG8gdG9wCisgICAgICAqIEZpeCBlcnJvciBvY2N1cmluZyB3aGVuIGluaXRpYWwgc2Jya19iYXNlIG5vdCB3b3JkLWFsaWduZWQuCisgICAgICAqIFJlbHkgb24gcGFnZSBzaXplIGZvciB1bml0cyBpbnN0ZWFkIG9mIFNCUktfVU5JVCB0bworCWF2b2lkIHN1cnByaXNlcyBhYm91dCBzYnJrIGFsaWdubWVudCBjb252ZW50aW9ucy4KKyAgICAgICogQWRkIG1hbGxpbmZvLCBtYWxsb3B0LiBUaGFua3MgdG8gUmF5bW9uZCBOaWpzc2VuCisJKHJheW1vbmRAZXMuZWxlLnR1ZS5ubCkgZm9yIHRoZSBzdWdnZXN0aW9uLgorICAgICAgKiBBZGQgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3RyaW0gYW5kIHRvcF9wYWQgbWFsbG9wdCBwYXJhbWV0ZXIuCisgICAgICAqIE1vcmUgcHJlY2F1dGlvbnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywKKwljb3VydGVzeSBvZiBXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgorICAgICAgKiBBZGRlZCBtYWNyb3MgZXRjLiwgYWxsb3dpbmcgdXNlIGluIGxpbnV4IGxpYmMgZnJvbQorCUguSi4gTHUgKGhqbEBnbnUuYWkubWl0LmVkdSkKKyAgICAgICogSW52ZXJ0ZWQgdGhpcyBoaXN0b3J5IGxpc3QKKworICAgIFYyLjYuMSBTYXQgRGVjICAyIDE0OjEwOjU3IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBSZS10dW5lZCBhbmQgZml4ZWQgdG8gYmVoYXZlIG1vcmUgbmljZWx5IHdpdGggVjIuNi4wIGNoYW5nZXMuCisgICAgICAqIFJlbW92ZWQgYWxsIHByZWFsbG9jYXRpb24gY29kZSBzaW5jZSB1bmRlciBjdXJyZW50IHNjaGVtZQorCXRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKKwl0aGUgd29yayBzYXZlZCBpbiBnb29kIGNhc2VzIGZvciBtb3N0IHRlc3QgcHJvZ3JhbXMuCisgICAgICAqIE5vIGxvbmdlciB1c2UgcmV0dXJuIGxpc3Qgb3IgdW5jb25zb2xpZGF0ZWQgYmlucyBzaW5jZQorCW5vIHNjaGVtZSB1c2luZyB0aGVtIGNvbnNpc3RlbnRseSBvdXRwZXJmb3JtcyB0aG9zZSB0aGF0IGRvbid0CisJZ2l2ZW4gYWJvdmUgY2hhbmdlcy4KKyAgICAgICogVXNlIGJlc3QgZml0IGZvciB2ZXJ5IGxhcmdlIGNodW5rcyB0byBwcmV2ZW50IHNvbWUgd29yc3QtY2FzZXMuCisgICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nCisKKyAgICBWMi42LjAgU2F0IE5vdiAgNCAwNzowNToyMyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRoYW5rcyB0bworCVBhdWwgV2lsc29uICh3aWxzb25AY3MudGV4YXMuZWR1KSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKyAgICBWMi41LjQgV2VkIE5vdiAgMSAwNzo1NDo1MSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWRkZWQgbWFsbG9jX3RyaW0sIHdpdGggaGVscCBmcm9tIFdvbGZyYW0gR2xvZ2VyCisJKHdtZ2xvQERlbnQuTUVELlVuaS1NdWVuY2hlbi5ERSkuCisKKyAgICBWMi41LjMgVHVlIEFwciAyNiAxMDoxNjowMSAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpCisKKyAgICBWMi41LjIgVHVlIEFwciAgNSAxNjoyMDo0MCAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpCisgICAgICAqIHJlYWxsb2M6IHRyeSB0byBleHBhbmQgaW4gYm90aCBkaXJlY3Rpb25zCisgICAgICAqIG1hbGxvYzogc3dhcCBvcmRlciBvZiBjbGVhbi1iaW4gc3RyYXRlZ3k7CisgICAgICAqIHJlYWxsb2M6IG9ubHkgY29uZGl0aW9uYWxseSBleHBhbmQgYmFja3dhcmRzCisgICAgICAqIFRyeSBub3QgdG8gc2NhdmVuZ2UgdXNlZCBiaW5zCisgICAgICAqIFVzZSBiaW4gY291bnRzIGFzIGEgZ3VpZGUgdG8gcHJlYWxsb2NhdGlvbgorICAgICAgKiBPY2Nhc2lvbmFsbHkgYmluIHJldHVybiBsaXN0IGNodW5rcyBpbiBmaXJzdCBzY2FuCisgICAgICAqIEFkZCBhIGZldyBvcHRpbWl6YXRpb25zIGZyb20gY29saW5Abnl4MTAuY3MuZHUuZWR1CisKKyAgICBWMi41LjEgU2F0IEF1ZyAxNCAxNTo0MDo0MyAxOTkzICBEb3VnIExlYSAgKGRsIGF0IGcpCisgICAgICAqIGZhc3RlciBiaW4gY29tcHV0YXRpb24gJiBzbGlnaHRseSBkaWZmZXJlbnQgYmlubmluZworICAgICAgKiBtZXJnZWQgYWxsIGNvbnNvbGlkYXRpb25zIHRvIG9uZSBwYXJ0IG9mIG1hbGxvYyBwcm9wZXIKKwkgKGVsaW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFjZSAmIG1hbGxvY19jbGVhbl9iaW4pCisgICAgICAqIFNjYW4gMiByZXR1cm5zIGNodW5rcyAobm90IGp1c3QgMSkKKyAgICAgICogUHJvcGFnYXRlIGZhaWx1cmUgaW4gcmVhbGxvYyBpZiBtYWxsb2MgcmV0dXJucyAwCisgICAgICAqIEFkZCBzdHVmZiB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBub24tQU5TSSBjb21waWxlcnMKKwkgIGZyb20ga3B2QHJlc2VhcmNoLmF0dC5jb20KKworICAgIFYyLjUgU2F0IEF1ZyAgNyAwNzo0MTo1OSAxOTkzICBEb3VnIExlYSAgKGRsIGF0IGcub3N3ZWdvLmVkdSkKKyAgICAgICogcmVtb3ZlZCBwb3RlbnRpYWwgZm9yIG9kZCBhZGRyZXNzIGFjY2VzcyBpbiBwcmV2X2NodW5rCisgICAgICAqIHJlbW92ZWQgZGVwZW5kZW5jeSBvbiBnZXRwYWdlc2l6ZS5oCisgICAgICAqIG1pc2MgY29zbWV0aWNzIGFuZCBhIGJpdCBtb3JlIGludGVybmFsIGRvY3VtZW50YXRpb24KKyAgICAgICogYW50aWNvc21ldGljczogbWFuZ2xlZCBuYW1lcyBpbiBtYWNyb3MgdG8gZXZhZGUgZGVidWdnZXIgc3RyYW5nZW5lc3MKKyAgICAgICogdGVzdGVkIG9uIHNwYXJjLCBocC03MDAsIGRlYy1taXBzLCByczYwMDAKKwkgIHdpdGggZ2NjICYgbmF0aXZlIGNjIChocCwgZGVjIG9ubHkpIGFsbG93aW5nCisJICBEZXRsZWZzICYgWm9ybiBjb21wYXJpc29uIHN0dWR5IChpbiBTSUdQTEFOIE5vdGljZXMuKQorCisgICAgVHJpYWwgdmVyc2lvbiBGcmkgQXVnIDI4IDEzOjE0OjI5IDE5OTIgIERvdWcgTGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1KQorICAgICAgKiBCYXNlZCBsb29zZWx5IG9uIGxpYmcrKy0xLjJYIG1hbGxvYy4gKEl0IHJldGFpbnMgc29tZSBvZiB0aGUgb3ZlcmFsbAorCSBzdHJ1Y3R1cmUgb2Ygb2xkIHZlcnNpb24sICBidXQgbW9zdCBkZXRhaWxzIGRpZmZlci4pCisKKyovCisKKwpkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuYyBiL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhMTdhOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmMKQEAgLTAsMCArMSw5NjYgQEAKKy8qIEFsdGVybmF0aXZlIG1hbGxvYyBpbXBsZW1lbnRhdGlvbiBmb3IgbXVsdGlwbGUgdGhyZWFkcyB3aXRob3V0Citsb2NrIGNvbnRlbnRpb24gYmFzZWQgb24gZGxtYWxsb2MuIChDKSAyMDA1LTIwMDYgTmlhbGwgRG91Z2xhcworCitCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Cit0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKK2V4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bworZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCit0aGUgYWJvdmUgbGljZW5zZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kCithbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCit3b3JrcyBhcmUgc29sZWx5IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYnkKK2Egc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQorRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCitBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKK0RFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyovCisKKyNpZmRlZiBfTVNDX1ZFUgorLyogRW5hYmxlIGZ1bGwgYWxpYXNpbmcgb24gTVNWQyAqLworLyojcHJhZ21hIG9wdGltaXplKCJhIiwgb24pKi8KKyNlbmRpZgorCisvKiNkZWZpbmUgRlVMTFNBTklUWUNIRUNLUyovCisKKyNpbmNsdWRlICJuZWRtYWxsb2MuaCIKKyNpZiBkZWZpbmVkKFdJTjMyKQorICNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbmRpZgorI2RlZmluZSBNU1BBQ0VTIDEKKyNkZWZpbmUgT05MWV9NU1BBQ0VTIDEKKyNpZm5kZWYgVVNFX0xPQ0tTCisgI2RlZmluZSBVU0VfTE9DS1MgMQorI2VuZGlmCisjZGVmaW5lIEZPT1RFUlMgMSAgICAgICAgICAgLyogTmVlZCB0byBlbmFibGUgZm9vdGVycyBzbyBmcmVlcyBsb2NrIHRoZSByaWdodCBtc3BhY2UgKi8KKyN1bmRlZiBERUJVRwkJCQkvKiBkbG1hbGxvYyB3YW50cyBERUJVRyBlaXRoZXIgMCBvciAxICovCisjaWZkZWYgX0RFQlVHCisgI2RlZmluZSBERUJVRyAxCisjZWxzZQorICNkZWZpbmUgREVCVUcgMAorI2VuZGlmCisjaWZkZWYgTkRFQlVHICAgICAgICAgICAgICAgLyogRGlzYWJsZSBhc3NlcnQgY2hlY2tpbmcgb24gcmVsZWFzZSBidWlsZHMgKi8KKyAjdW5kZWYgREVCVUcKKyNlbmRpZgorLyogVGhlIGRlZmF1bHQgb2YgNjRLYiBtZWFucyB3ZSBzcGVuZCB0b28gbXVjaCB0aW1lIGtlcm5lbC1zaWRlICovCisjaWZuZGVmIERFRkFVTFRfR1JBTlVMQVJJVFkKKyNkZWZpbmUgREVGQVVMVF9HUkFOVUxBUklUWSAoMSoxMDI0KjEwMjQpCisjZW5kaWYKKy8qI2RlZmluZSBVU0VfU1BJTl9MT0NLUyAwKi8KKworCisvKiNkZWZpbmUgRk9SQ0VJTkxJTkUqLworI2luY2x1ZGUgIm1hbGxvYy5jLmgiCisjaWZkZWYgTkRFQlVHICAgICAgICAgICAgICAgLyogRGlzYWJsZSBhc3NlcnQgY2hlY2tpbmcgb24gcmVsZWFzZSBidWlsZHMgKi8KKyAjdW5kZWYgREVCVUcKKyNlbmRpZgorCisvKiBUaGUgbWF4aW11bSBjb25jdXJyZW50IHRocmVhZHMgaW4gYSBwb29sIHBvc3NpYmxlICovCisjaWZuZGVmIE1BWFRIUkVBRFNJTlBPT0wKKyNkZWZpbmUgTUFYVEhSRUFEU0lOUE9PTCAxNgorI2VuZGlmCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkY2FjaGVzIHdoaWNoIGNhbiBiZSBhbGxvY2F0ZWQgKi8KKyNpZm5kZWYgVEhSRUFEQ0FDSEVNQVhDQUNIRVMKKyNkZWZpbmUgVEhSRUFEQ0FDSEVNQVhDQUNIRVMgMjU2CisjZW5kaWYKKy8qIFRoZSBtYXhpbXVtIHNpemUgdG8gYmUgYWxsb2NhdGVkIGZyb20gdGhlIHRocmVhZCBjYWNoZSAqLworI2lmbmRlZiBUSFJFQURDQUNIRU1BWAorI2RlZmluZSBUSFJFQURDQUNIRU1BWCA4MTkyCisjZW5kaWYKKyNpZiAwCisvKiBUaGUgbnVtYmVyIG9mIGNhY2hlIGVudHJpZXMgZm9yIGZpbmVyIGdyYWluZWQgYmlucy4gVGhpcyBpcyAodG9wYml0cG9zKFRIUkVBRENBQ0hFTUFYKS00KSoyICovCisjZGVmaW5lIFRIUkVBRENBQ0hFTUFYQklOUyAoKDEzLTQpKjIpCisjZWxzZQorLyogVGhlIG51bWJlciBvZiBjYWNoZSBlbnRyaWVzLiBUaGlzIGlzICh0b3BiaXRwb3MoVEhSRUFEQ0FDSEVNQVgpLTQpICovCisjZGVmaW5lIFRIUkVBRENBQ0hFTUFYQklOUyAoMTMtNCkKKyNlbmRpZgorLyogUG9pbnQgYXQgd2hpY2ggdGhlIGZyZWUgc3BhY2UgaW4gYSB0aHJlYWQgY2FjaGUgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgKi8KKyNpZm5kZWYgVEhSRUFEQ0FDSEVNQVhGUkVFU1BBQ0UKKyNkZWZpbmUgVEhSRUFEQ0FDSEVNQVhGUkVFU1BBQ0UgKDUxMioxMDI0KQorI2VuZGlmCisKKworI2lmZGVmIFdJTjMyCisgI2RlZmluZSBUTFNWQVIJCQlEV09SRAorICNkZWZpbmUgVExTQUxMT0MoaykJKCooayk9VGxzQWxsb2MoKSwgVExTX09VVF9PRl9JTkRFWEVTPT0qKGspKQorICNkZWZpbmUgVExTRlJFRShrKQkJKCFUbHNGcmVlKGspKQorICNkZWZpbmUgVExTR0VUKGspCQlUbHNHZXRWYWx1ZShrKQorICNkZWZpbmUgVExTU0VUKGssIGEpCSghVGxzU2V0VmFsdWUoaywgYSkpCisgI2lmZGVmIERFQlVHCitzdGF0aWMgTFBWT0lEIENoa2VkVGxzR2V0VmFsdWUoRFdPUkQgaWR4KQoreworCUxQVk9JRCByZXQ9VGxzR2V0VmFsdWUoaWR4KTsKKwlhc3NlcnQoU19PSz09R2V0TGFzdEVycm9yKCkpOworCXJldHVybiByZXQ7Cit9CisgICN1bmRlZiBUTFNHRVQKKyAgI2RlZmluZSBUTFNHRVQoaykgQ2hrZWRUbHNHZXRWYWx1ZShrKQorICNlbmRpZgorI2Vsc2UKKyAjZGVmaW5lIFRMU1ZBUgkJCXB0aHJlYWRfa2V5X3QKKyAjZGVmaW5lIFRMU0FMTE9DKGspCXB0aHJlYWRfa2V5X2NyZWF0ZShrLCAwKQorICNkZWZpbmUgVExTRlJFRShrKQkJcHRocmVhZF9rZXlfZGVsZXRlKGspCisgI2RlZmluZSBUTFNHRVQoaykJCXB0aHJlYWRfZ2V0c3BlY2lmaWMoaykKKyAjZGVmaW5lIFRMU1NFVChrLCBhKQlwdGhyZWFkX3NldHNwZWNpZmljKGssIGEpCisjZW5kaWYKKworI2lmIDAKKy8qIE9ubHkgZW5hYmxlIGlmIHRlc3Rpbmcgd2l0aCB2YWxncmluZC4gQ2F1c2VzIG1pc29wZXJhdGlvbiAqLworI2RlZmluZSBtc3BhY2VfbWFsbG9jKHAsIHMpIG1hbGxvYyhzKQorI2RlZmluZSBtc3BhY2VfcmVhbGxvYyhwLCBtLCBzKSByZWFsbG9jKG0sIHMpCisjZGVmaW5lIG1zcGFjZV9jYWxsb2MocCwgbiwgcykgY2FsbG9jKG4sIHMpCisjZGVmaW5lIG1zcGFjZV9mcmVlKHAsIG0pIGZyZWUobSkKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2lmICFkZWZpbmVkKE5PX05FRF9OQU1FU1BBQ0UpCituYW1lc3BhY2UgbmVkYWxsb2MgeworI2Vsc2UKK2V4dGVybiAiQyIgeworI2VuZGlmCisjZW5kaWYKKworc2l6ZV90IG5lZGJsa3NpemUodm9pZCAqbWVtKSBUSFJPV1NQRUMKK3sKKyNpZiAwCisJLyogT25seSBlbmFibGUgaWYgdGVzdGluZyB3aXRoIHZhbGdyaW5kLiBDYXVzZXMgbWlzb3BlcmF0aW9uICovCisJcmV0dXJuIFRIUkVBRENBQ0hFTUFYOworI2Vsc2UKKwlpZihtZW0pCisJeworCQltY2h1bmtwdHIgcD1tZW0yY2h1bmsobWVtKTsKKwkJYXNzZXJ0KGNpbnVzZShwKSk7CS8qIElmIHRoaXMgZmFpbHMsIHNvbWVvbmUgdHJpZWQgdG8gZnJlZSBhIGJsb2NrIHR3aWNlICovCisJCWlmKGNpbnVzZShwKSkKKwkJCXJldHVybiBjaHVua3NpemUocCktb3ZlcmhlYWRfZm9yKHApOworCX0KKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCit2b2lkIG5lZHNldHZhbHVlKHZvaWQgKnYpIFRIUk9XU1BFQwkJCQkJeyBuZWRwc2V0dmFsdWUoMCwgdik7IH0KK3ZvaWQgKiBuZWRtYWxsb2Moc2l6ZV90IHNpemUpIFRIUk9XU1BFQwkJCQl7IHJldHVybiBuZWRwbWFsbG9jKDAsIHNpemUpOyB9Cit2b2lkICogbmVkY2FsbG9jKHNpemVfdCBubywgc2l6ZV90IHNpemUpIFRIUk9XU1BFQwl7IHJldHVybiBuZWRwY2FsbG9jKDAsIG5vLCBzaXplKTsgfQordm9pZCAqIG5lZHJlYWxsb2Modm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHByZWFsbG9jKDAsIG1lbSwgc2l6ZSk7IH0KK3ZvaWQgICBuZWRmcmVlKHZvaWQgKm1lbSkgVEhST1dTUEVDCQkJCQl7IG5lZHBmcmVlKDAsIG1lbSk7IH0KK3ZvaWQgKiBuZWRtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQyB7IHJldHVybiBuZWRwbWVtYWxpZ24oMCwgYWxpZ25tZW50LCBieXRlcyk7IH0KKyNpZiAhTk9fTUFMTElORk8KK3N0cnVjdCBtYWxsaW5mbyBuZWRtYWxsaW5mbyh2b2lkKSBUSFJPV1NQRUMJCQl7IHJldHVybiBuZWRwbWFsbGluZm8oMCk7IH0KKyNlbmRpZgoraW50ICAgIG5lZG1hbGxvcHQoaW50IHBhcm5vLCBpbnQgdmFsdWUpIFRIUk9XU1BFQwl7IHJldHVybiBuZWRwbWFsbG9wdCgwLCBwYXJubywgdmFsdWUpOyB9CitpbnQgICAgbmVkbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkgVEhST1dTUEVDCQkJeyByZXR1cm4gbmVkcG1hbGxvY190cmltKDAsIHBhZCk7IH0KK3ZvaWQgICBuZWRtYWxsb2Nfc3RhdHMoKSBUSFJPV1NQRUMJCQkJCXsgbmVkcG1hbGxvY19zdGF0cygwKTsgfQorc2l6ZV90IG5lZG1hbGxvY19mb290cHJpbnQoKSBUSFJPV1NQRUMJCQkJeyByZXR1cm4gbmVkcG1hbGxvY19mb290cHJpbnQoMCk7IH0KK3ZvaWQgKipuZWRpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IGVsZW1zbm8sIHNpemVfdCBlbGVtc2l6ZSwgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHBpbmRlcGVuZGVudF9jYWxsb2MoMCwgZWxlbXNubywgZWxlbXNpemUsIGNodW5rcyk7IH0KK3ZvaWQgKipuZWRpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QgZWxlbXMsIHNpemVfdCAqc2l6ZXMsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQwl7IHJldHVybiBuZWRwaW5kZXBlbmRlbnRfY29tYWxsb2MoMCwgZWxlbXMsIHNpemVzLCBjaHVua3MpOyB9CisKK3N0cnVjdCB0aHJlYWRjYWNoZWJsa190OwordHlwZWRlZiBzdHJ1Y3QgdGhyZWFkY2FjaGVibGtfdCB0aHJlYWRjYWNoZWJsazsKK3N0cnVjdCB0aHJlYWRjYWNoZWJsa190Cit7CS8qIEtlZXAgbGVzcyB0aGFuIDE2IGJ5dGVzIG9uIDMyIGJpdCBzeXN0ZW1zIGFuZCAzMiBieXRlcyBvbiA2NCBiaXQgc3lzdGVtcyAqLworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl1bnNpZ25lZCBpbnQgbWFnaWM7CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQgbGFzdFVzZWQsIHNpemU7CisJdGhyZWFkY2FjaGVibGsgKm5leHQsICpwcmV2OworfTsKK3R5cGVkZWYgc3RydWN0IHRocmVhZGNhY2hlX3QKK3sKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdW5zaWduZWQgaW50IG1hZ2ljMTsKKyNlbmRpZgorCWludCBteW1zcGFjZTsJCQkJCQkvKiBMYXN0IG1zcGFjZSBlbnRyeSB0aGlzIHRocmVhZCB1c2VkICovCisJbG9uZyB0aHJlYWRpZDsKKwl1bnNpZ25lZCBpbnQgbWFsbG9jcywgZnJlZXMsIHN1Y2Nlc3NlczsKKwlzaXplX3QgZnJlZUluQ2FjaGU7CQkJCQkvKiBIb3cgbXVjaCBmcmVlIHNwYWNlIGlzIHN0b3JlZCBpbiB0aGlzIGNhY2hlICovCisJdGhyZWFkY2FjaGVibGsgKmJpbnNbKFRIUkVBRENBQ0hFTUFYQklOUysxKSoyXTsKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdW5zaWduZWQgaW50IG1hZ2ljMjsKKyNlbmRpZgorfSB0aHJlYWRjYWNoZTsKK3N0cnVjdCBuZWRwb29sX3QKK3sKKwlNTE9DS19UIG11dGV4OworCXZvaWQgKnVzZXJ2YWx1ZTsKKwlpbnQgdGhyZWFkczsJCQkJCQkvKiBNYXggZW50cmllcyBpbiBtIHRvIHVzZSAqLworCXRocmVhZGNhY2hlICpjYWNoZXNbVEhSRUFEQ0FDSEVNQVhDQUNIRVNdOworCVRMU1ZBUiBteWNhY2hlOwkJCQkJCS8qIFRocmVhZCBjYWNoZSBmb3IgdGhpcyB0aHJlYWQuIDAgZm9yIHVuc2V0LCBuZWdhdGl2ZSBmb3IgdXNlIG1zcGFjZS0xIGRpcmVjdGx5LCBvdGhlcndpc2UgaXMgY2FjaGUtMSAqLworCW1zdGF0ZSBtW01BWFRIUkVBRFNJTlBPT0wrMV07CQkvKiBtc3BhY2UgZW50cmllcyBmb3IgdGhpcyBwb29sICovCit9Oworc3RhdGljIG5lZHBvb2wgc3lzcG9vbDsKKworc3RhdGljIEZPUkNFSU5MSU5FIHVuc2lnbmVkIGludCBzaXplMmJpbmlkeChzaXplX3QgX3NpemUpIFRIUk9XU1BFQworewkvKiA4PTEwMDAJMTY9MTAwMDAJMjA9MTAxMDAJMjQ9MTEwMDAJMzI9MTAwMDAwCTQ4PTExMDAwMAk0MDk2PTEwMDAwMDAwMDAwMDAgKi8KKwl1bnNpZ25lZCBpbnQgdG9wYml0LCBzaXplPSh1bnNpZ25lZCBpbnQpKF9zaXplPj40KTsKKwkvKiAxNj0xCQkyMD0xCTI0PTEJMzI9MTAJNDg9MTEJNjQ9MTAwCTk2PTExMAkxMjg9MTAwMAk0MDk2PTEwMDAwMDAwMCAqLworCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKwl0b3BiaXQgPSBzaXplb2Yoc2l6ZSkqX19DSEFSX0JJVF9fIC0gMSAtIF9fYnVpbHRpbl9jbHooc2l6ZSk7CisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMAorCXsKKwkgICAgdW5zaWduZWQgbG9uZyBic3JUb3BCaXQ7CisKKwkgICAgX0JpdFNjYW5SZXZlcnNlKCZic3JUb3BCaXQsIHNpemUpOworCisJICAgIHRvcGJpdCA9IGJzclRvcEJpdDsKKwl9CisjZWxzZQorI2lmIDAKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGFzSW50WzJdOworCQlkb3VibGUgYXNEb3VibGU7CisJfTsKKwlpbnQgbjsKKworCWFzRG91YmxlID0gKGRvdWJsZSlzaXplICsgMC41OworCXRvcGJpdCA9IChhc0ludFshRk9YX0JJR0VORElBTl0gPj4gMjApIC0gMTAyMzsKKyNlbHNlCisJeworCQl1bnNpZ25lZCBpbnQgeD1zaXplOworCQl4ID0geCB8ICh4ID4+IDEpOworCQl4ID0geCB8ICh4ID4+IDIpOworCQl4ID0geCB8ICh4ID4+IDQpOworCQl4ID0geCB8ICh4ID4+IDgpOworCQl4ID0geCB8ICh4ID4+MTYpOworCQl4ID0gfng7CisJCXggPSB4IC0gKCh4ID4+IDEpICYgMHg1NTU1NTU1NSk7CisJCXggPSAoeCAmIDB4MzMzMzMzMzMpICsgKCh4ID4+IDIpICYgMHgzMzMzMzMzMyk7CisJCXggPSAoeCArICh4ID4+IDQpKSAmIDB4MEYwRjBGMEY7CisJCXggPSB4ICsgKHggPDwgOCk7CisJCXggPSB4ICsgKHggPDwgMTYpOworCQl0b3BiaXQ9MzEgLSAoeCA+PiAyNCk7CisJfQorI2VuZGlmCisjZW5kaWYKKwlyZXR1cm4gdG9wYml0OworfQorCisKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCitzdGF0aWMgdm9pZCB0Y3Nhbml0eWNoZWNrKHRocmVhZGNhY2hlYmxrICoqcHRyKSBUSFJPV1NQRUMKK3sKKwlhc3NlcnQoKHB0clswXSAmJiBwdHJbMV0pIHx8ICghcHRyWzBdICYmICFwdHJbMV0pKTsKKwlpZihwdHJbMF0gJiYgcHRyWzFdKQorCXsKKwkJYXNzZXJ0KG5lZGJsa3NpemUocHRyWzBdKT49c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSk7CisJCWFzc2VydChuZWRibGtzaXplKHB0clsxXSk+PXNpemVvZih0aHJlYWRjYWNoZWJsaykpOworCQlhc3NlcnQoKih1bnNpZ25lZCBpbnQgKikgIk5FRE4iPT1wdHJbMF0tPm1hZ2ljKTsKKwkJYXNzZXJ0KCoodW5zaWduZWQgaW50ICopICJORUROIj09cHRyWzFdLT5tYWdpYyk7CisJCWFzc2VydCghcHRyWzBdLT5wcmV2KTsKKwkJYXNzZXJ0KCFwdHJbMV0tPm5leHQpOworCQlpZihwdHJbMF09PXB0clsxXSkKKwkJeworCQkJYXNzZXJ0KCFwdHJbMF0tPm5leHQpOworCQkJYXNzZXJ0KCFwdHJbMV0tPnByZXYpOworCQl9CisJfQorfQorc3RhdGljIHZvaWQgdGNmdWxsc2FuaXR5Y2hlY2sodGhyZWFkY2FjaGUgKnRjKSBUSFJPV1NQRUMKK3sKKwl0aHJlYWRjYWNoZWJsayAqKnRjYnB0cj10Yy0+YmluczsKKwlpbnQgbjsKKwlmb3Iobj0wOyBuPD1USFJFQURDQUNIRU1BWEJJTlM7IG4rKywgdGNicHRyKz0yKQorCXsKKwkJdGhyZWFkY2FjaGVibGsgKmIsICpvYj0wOworCQl0Y3Nhbml0eWNoZWNrKHRjYnB0cik7CisJCWZvcihiPXRjYnB0clswXTsgYjsgb2I9YiwgYj1iLT5uZXh0KQorCQl7CisJCQlhc3NlcnQoKih1bnNpZ25lZCBpbnQgKikgIk5FRE4iPT1iLT5tYWdpYyk7CisJCQlhc3NlcnQoIW9iIHx8IG9iLT5uZXh0PT1iKTsKKwkJCWFzc2VydCghb2IgfHwgYi0+cHJldj09b2IpOworCQl9CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBOT0lOTElORSB2b2lkIFJlbW92ZUNhY2hlRW50cmllcyhuZWRwb29sICpwLCB0aHJlYWRjYWNoZSAqdGMsIHVuc2lnbmVkIGludCBhZ2UpIFRIUk9XU1BFQworeworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKwlpZih0Yy0+ZnJlZUluQ2FjaGUpCisJeworCQl0aHJlYWRjYWNoZWJsayAqKnRjYnB0cj10Yy0+YmluczsKKwkJaW50IG47CisJCWZvcihuPTA7IG48PVRIUkVBRENBQ0hFTUFYQklOUzsgbisrLCB0Y2JwdHIrPTIpCisJCXsKKwkJCXRocmVhZGNhY2hlYmxrICoqdGNiPXRjYnB0cisxOwkJLyogY29tZSBmcm9tIG9sZGVzdCBlbmQgb2YgbGlzdCAqLworCQkJLyp0Y3Nhbml0eWNoZWNrKHRjYnB0cik7Ki8KKwkJCWZvcig7ICp0Y2IgJiYgdGMtPmZyZWVzLSgqdGNiKS0+bGFzdFVzZWQ+PWFnZTsgKQorCQkJeworCQkJCXRocmVhZGNhY2hlYmxrICpmPSp0Y2I7CisJCQkJc2l6ZV90IGJsa3NpemU9Zi0+c2l6ZTsgLypuZWRibGtzaXplKGYpOyovCisJCQkJYXNzZXJ0KGJsa3NpemU8PW5lZGJsa3NpemUoZikpOworCQkJCWFzc2VydChibGtzaXplKTsKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJCQkJYXNzZXJ0KCoodW5zaWduZWQgaW50ICopICJORUROIj09KCp0Y2IpLT5tYWdpYyk7CisjZW5kaWYKKwkJCQkqdGNiPSgqdGNiKS0+cHJldjsKKwkJCQlpZigqdGNiKQorCQkJCQkoKnRjYiktPm5leHQ9MDsKKwkJCQllbHNlCisJCQkJCSp0Y2JwdHI9MDsKKwkJCQl0Yy0+ZnJlZUluQ2FjaGUtPWJsa3NpemU7CisJCQkJYXNzZXJ0KChsb25nKSB0Yy0+ZnJlZUluQ2FjaGU+PTApOworCQkJCW1zcGFjZV9mcmVlKDAsIGYpOworCQkJCS8qdGNzYW5pdHljaGVjayh0Y2JwdHIpOyovCisJCQl9CisJCX0KKwl9CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorfQorc3RhdGljIHZvaWQgRGVzdHJveUNhY2hlcyhuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlpZihwLT5jYWNoZXMpCisJeworCQl0aHJlYWRjYWNoZSAqdGM7CisJCWludCBuOworCQlmb3Iobj0wOyBuPFRIUkVBRENBQ0hFTUFYQ0FDSEVTOyBuKyspCisJCXsKKwkJCWlmKCh0Yz1wLT5jYWNoZXNbbl0pKQorCQkJeworCQkJCXRjLT5mcmVlcysrOworCQkJCVJlbW92ZUNhY2hlRW50cmllcyhwLCB0YywgMCk7CisJCQkJYXNzZXJ0KCF0Yy0+ZnJlZUluQ2FjaGUpOworCQkJCXRjLT5teW1zcGFjZT0tMTsKKwkJCQl0Yy0+dGhyZWFkaWQ9MDsKKwkJCQltc3BhY2VfZnJlZSgwLCB0Yyk7CisJCQkJcC0+Y2FjaGVzW25dPTA7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyBOT0lOTElORSB0aHJlYWRjYWNoZSAqQWxsb2NDYWNoZShuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwl0aHJlYWRjYWNoZSAqdGM9MDsKKwlpbnQgbiwgZW5kOworCUFDUVVJUkVfTE9DSygmcC0+bXV0ZXgpOworCWZvcihuPTA7IG48VEhSRUFEQ0FDSEVNQVhDQUNIRVMgJiYgcC0+Y2FjaGVzW25dOyBuKyspOworCWlmKFRIUkVBRENBQ0hFTUFYQ0FDSEVTPT1uKQorCXsJLyogTGlzdCBleGhhdXN0ZWQsIHNvIGRpc2FibGUgZm9yIHRoaXMgdGhyZWFkICovCisJCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisJdGM9cC0+Y2FjaGVzW25dPSh0aHJlYWRjYWNoZSAqKSBtc3BhY2VfY2FsbG9jKHAtPm1bMF0sIDEsIHNpemVvZih0aHJlYWRjYWNoZSkpOworCWlmKCF0YykKKwl7CisJCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjLT5tYWdpYzE9Kih1bnNpZ25lZCBpbnQgKikiTkVETUFMQzEiOworCXRjLT5tYWdpYzI9Kih1bnNpZ25lZCBpbnQgKikiTkVETUFMQzIiOworI2VuZGlmCisJdGMtPnRocmVhZGlkPShsb25nKShzaXplX3QpQ1VSUkVOVF9USFJFQUQ7CisJZm9yKGVuZD0wOyBwLT5tW2VuZF07IGVuZCsrKTsKKwl0Yy0+bXltc3BhY2U9dGMtPnRocmVhZGlkICUgZW5kOworCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCWlmKFRMU1NFVChwLT5teWNhY2hlLCAodm9pZCAqKShzaXplX3QpKG4rMSkpKSBhYm9ydCgpOworCXJldHVybiB0YzsKK30KKworc3RhdGljIHZvaWQgKnRocmVhZGNhY2hlX21hbGxvYyhuZWRwb29sICpwLCB0aHJlYWRjYWNoZSAqdGMsIHNpemVfdCAqc2l6ZSkgVEhST1dTUEVDCit7CisJdm9pZCAqcmV0PTA7CisJdW5zaWduZWQgaW50IGJlc3RzaXplOworCXVuc2lnbmVkIGludCBpZHg9c2l6ZTJiaW5pZHgoKnNpemUpOworCXNpemVfdCBibGtzaXplPTA7CisJdGhyZWFkY2FjaGVibGsgKmJsaywgKipiaW5zcHRyOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKwkvKiBDYWxjdWxhdGUgYmVzdCBmaXQgYmluIHNpemUgKi8KKwliZXN0c2l6ZT0xPDwoaWR4KzQpOworI2lmIDAKKwkvKiBGaW5lciBncmFpbmVkIGJpbiBmaXQgKi8KKwlpZHg8PD0xOworCWlmKCpzaXplPmJlc3RzaXplKQorCXsKKwkJaWR4Kys7CisJCWJlc3RzaXplKz1iZXN0c2l6ZT4+MTsKKwl9CisJaWYoKnNpemU+YmVzdHNpemUpCisJeworCQlpZHgrKzsKKwkJYmVzdHNpemU9MTw8KDQrKGlkeD4+MSkpOworCX0KKyNlbHNlCisJaWYoKnNpemU+YmVzdHNpemUpCisJeworCQlpZHgrKzsKKwkJYmVzdHNpemU8PD0xOworCX0KKyNlbmRpZgorCWFzc2VydChiZXN0c2l6ZT49KnNpemUpOworCWlmKCpzaXplPGJlc3RzaXplKSAqc2l6ZT1iZXN0c2l6ZTsKKwlhc3NlcnQoKnNpemU8PVRIUkVBRENBQ0hFTUFYKTsKKwlhc3NlcnQoaWR4PD1USFJFQURDQUNIRU1BWEJJTlMpOworCWJpbnNwdHI9JnRjLT5iaW5zW2lkeCoyXTsKKwkvKiBUcnkgdG8gbWF0Y2ggY2xvc2UsIGJ1dCBtb3ZlIHVwIGEgYmluIGlmIG5lY2Vzc2FyeSAqLworCWJsaz0qYmluc3B0cjsKKwlpZighYmxrIHx8IGJsay0+c2l6ZTwqc2l6ZSkKKwl7CS8qIEJ1bXAgaXQgdXAgYSBiaW4gKi8KKwkJaWYoaWR4PFRIUkVBRENBQ0hFTUFYQklOUykKKwkJeworCQkJaWR4Kys7CisJCQliaW5zcHRyKz0yOworCQkJYmxrPSpiaW5zcHRyOworCQl9CisJfQorCWlmKGJsaykKKwl7CisJCWJsa3NpemU9YmxrLT5zaXplOyAvKm5lZGJsa3NpemUoYmxrKTsqLworCQlhc3NlcnQobmVkYmxrc2l6ZShibGspPj1ibGtzaXplKTsKKwkJYXNzZXJ0KGJsa3NpemU+PSpzaXplKTsKKwkJaWYoYmxrLT5uZXh0KQorCQkJYmxrLT5uZXh0LT5wcmV2PTA7CisJCSpiaW5zcHRyPWJsay0+bmV4dDsKKwkJaWYoISpiaW5zcHRyKQorCQkJYmluc3B0clsxXT0wOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwkJYmxrLT5tYWdpYz0wOworI2VuZGlmCisJCWFzc2VydChiaW5zcHRyWzBdIT1ibGsgJiYgYmluc3B0clsxXSE9YmxrKTsKKwkJYXNzZXJ0KG5lZGJsa3NpemUoYmxrKT49c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSAmJiBuZWRibGtzaXplKGJsayk8PVRIUkVBRENBQ0hFTUFYK0NIVU5LX09WRVJIRUFEKTsKKwkJLypwcmludGYoIm1hbGxvYzogJXAsICVwLCAlcCwgJWx1XG4iLCBwLCB0YywgYmxrLCAobG9uZykgc2l6ZSk7Ki8KKwkJcmV0PSh2b2lkICopIGJsazsKKwl9CisJKyt0Yy0+bWFsbG9jczsKKwlpZihyZXQpCisJeworCQlhc3NlcnQoYmxrc2l6ZT49KnNpemUpOworCQkrK3RjLT5zdWNjZXNzZXM7CisJCXRjLT5mcmVlSW5DYWNoZS09Ymxrc2l6ZTsKKwkJYXNzZXJ0KChsb25nKSB0Yy0+ZnJlZUluQ2FjaGU+PTApOworCX0KKyNpZiBkZWZpbmVkKERFQlVHKSAmJiAwCisJaWYoISh0Yy0+bWFsbG9jcyAmIDB4ZmZmKSkKKwl7CisJCXByaW50ZigiKioqIHRocmVhZGNhY2hlPSV1LCBtYWxsb2NzPSV1ICglZiksIGZyZWU9JXUgKCVmKSwgZnJlZUluQ2FjaGU9JXVcbiIsICh1bnNpZ25lZCBpbnQpIHRjLT50aHJlYWRpZCwgdGMtPm1hbGxvY3MsCisJCQkoZmxvYXQpIHRjLT5zdWNjZXNzZXMvdGMtPm1hbGxvY3MsIHRjLT5mcmVlcywgKGZsb2F0KSB0Yy0+c3VjY2Vzc2VzL3RjLT5mcmVlcywgKHVuc2lnbmVkIGludCkgdGMtPmZyZWVJbkNhY2hlKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KK3N0YXRpYyBOT0lOTElORSB2b2lkIFJlbGVhc2VGcmVlSW5DYWNoZShuZWRwb29sICpwLCB0aHJlYWRjYWNoZSAqdGMsIGludCBteW1zcGFjZSkgVEhST1dTUEVDCit7CisJdW5zaWduZWQgaW50IGFnZT1USFJFQURDQUNIRU1BWEZSRUVTUEFDRS84MTkyOworCS8qQUNRVUlSRV9MT0NLKCZwLT5tW215bXNwYWNlXS0+bXV0ZXgpOyovCisJd2hpbGUoYWdlICYmIHRjLT5mcmVlSW5DYWNoZT49VEhSRUFEQ0FDSEVNQVhGUkVFU1BBQ0UpCisJeworCQlSZW1vdmVDYWNoZUVudHJpZXMocCwgdGMsIGFnZSk7CisJCS8qcHJpbnRmKCIqKiogUmVtb3ZpbmcgY2FjaGUgZW50cmllcyBvbGRlciB0aGFuICV1ICgldSlcbiIsIGFnZSwgKHVuc2lnbmVkIGludCkgdGMtPmZyZWVJbkNhY2hlKTsqLworCQlhZ2U+Pj0xOworCX0KKwkvKlJFTEVBU0VfTE9DSygmcC0+bVtteW1zcGFjZV0tPm11dGV4KTsqLworfQorc3RhdGljIHZvaWQgdGhyZWFkY2FjaGVfZnJlZShuZWRwb29sICpwLCB0aHJlYWRjYWNoZSAqdGMsIGludCBteW1zcGFjZSwgdm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CisJdW5zaWduZWQgaW50IGJlc3RzaXplOworCXVuc2lnbmVkIGludCBpZHg9c2l6ZTJiaW5pZHgoc2l6ZSk7CisJdGhyZWFkY2FjaGVibGsgKipiaW5zcHRyLCAqdGNrPSh0aHJlYWRjYWNoZWJsayAqKSBtZW07CisJYXNzZXJ0KHNpemU+PXNpemVvZih0aHJlYWRjYWNoZWJsaykgJiYgc2l6ZTw9VEhSRUFEQ0FDSEVNQVgrQ0hVTktfT1ZFUkhFQUQpOworI2lmZGVmIERFQlVHCisJewkvKiBNYWtlIHN1cmUgdGhpcyBpcyBhIHZhbGlkIG1lbW9yeSBibG9jayAqLworCSAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsKKwkgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7CisJICAgIGlmICghb2tfbWFnaWMoZm0pKSB7CisJICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKwl9CisjZW5kaWYKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCisJLyogQ2FsY3VsYXRlIGJlc3QgZml0IGJpbiBzaXplICovCisJYmVzdHNpemU9MTw8KGlkeCs0KTsKKyNpZiAwCisJLyogRmluZXIgZ3JhaW5lZCBiaW4gZml0ICovCisJaWR4PDw9MTsKKwlpZihzaXplPmJlc3RzaXplKQorCXsKKwkJdW5zaWduZWQgaW50IGJpZ2dlcmJlc3RzaXplPWJlc3RzaXplK2Jlc3RzaXplPDwxOworCQlpZihzaXplPj1iaWdnZXJiZXN0c2l6ZSkKKwkJeworCQkJaWR4Kys7CisJCQliZXN0c2l6ZT1iaWdnZXJiZXN0c2l6ZTsKKwkJfQorCX0KKyNlbmRpZgorCWlmKGJlc3RzaXplIT1zaXplKQkvKiBkbG1hbGxvYyBjYW4gcm91bmQgdXAsIHNvIHdlIHJvdW5kIGRvd24gdG8gcHJlc2VydmUgaW5kZXhpbmcgKi8KKwkJc2l6ZT1iZXN0c2l6ZTsKKwliaW5zcHRyPSZ0Yy0+Ymluc1tpZHgqMl07CisJYXNzZXJ0KGlkeDw9VEhSRUFEQ0FDSEVNQVhCSU5TKTsKKwlpZih0Y2s9PSpiaW5zcHRyKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJBdHRlbXB0IHRvIGZyZWUgYWxyZWFkeSBmcmVlZCBtZW1vcnkgYmxvY2sgJXAgLSBhYm9ydGluZyFcbiIsIHRjayk7CisJCWFib3J0KCk7CisJfQorI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2stPm1hZ2ljPSoodW5zaWduZWQgaW50ICopICJORUROIjsKKyNlbmRpZgorCXRjay0+bGFzdFVzZWQ9Kyt0Yy0+ZnJlZXM7CisJdGNrLT5zaXplPSh1bnNpZ25lZCBpbnQpIHNpemU7CisJdGNrLT5uZXh0PSpiaW5zcHRyOworCXRjay0+cHJldj0wOworCWlmKHRjay0+bmV4dCkKKwkJdGNrLT5uZXh0LT5wcmV2PXRjazsKKwllbHNlCisJCWJpbnNwdHJbMV09dGNrOworCWFzc2VydCghKmJpbnNwdHIgfHwgKCpiaW5zcHRyKS0+c2l6ZT09dGNrLT5zaXplKTsKKwkqYmluc3B0cj10Y2s7CisJYXNzZXJ0KHRjaz09dGMtPmJpbnNbaWR4KjJdKTsKKwlhc3NlcnQodGMtPmJpbnNbaWR4KjIrMV09PXRjayB8fCBiaW5zcHRyWzBdLT5uZXh0LT5wcmV2PT10Y2spOworCS8qcHJpbnRmKCJmcmVlOiAlcCwgJXAsICVwLCAlbHVcbiIsIHAsIHRjLCBtZW0sIChsb25nKSBzaXplKTsqLworCXRjLT5mcmVlSW5DYWNoZSs9c2l6ZTsKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCisjaWYgMQorCWlmKHRjLT5mcmVlSW5DYWNoZT49VEhSRUFEQ0FDSEVNQVhGUkVFU1BBQ0UpCisJCVJlbGVhc2VGcmVlSW5DYWNoZShwLCB0YywgbXltc3BhY2UpOworI2VuZGlmCit9CisKKworCisKK3N0YXRpYyBOT0lOTElORSBpbnQgSW5pdFBvb2wobmVkcG9vbCAqcCwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgdGhyZWFkcykgVEhST1dTUEVDCit7CS8qIHRocmVhZHMgaXMgLTEgZm9yIHN5c3RlbSBwb29sICovCisJZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisJQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKwlpZihwLT50aHJlYWRzKSBnb3RvIGRvbmU7CisJaWYoSU5JVElBTF9MT0NLKCZwLT5tdXRleCkpIGdvdG8gZXJyOworCWlmKFRMU0FMTE9DKCZwLT5teWNhY2hlKSkgZ290byBlcnI7CisJaWYoIShwLT5tWzBdPShtc3RhdGUpIGNyZWF0ZV9tc3BhY2UoY2FwYWNpdHksIDEpKSkgZ290byBlcnI7CisJcC0+bVswXS0+ZXh0cD1wOworCXAtPnRocmVhZHM9KHRocmVhZHM8MSB8fCB0aHJlYWRzPk1BWFRIUkVBRFNJTlBPT0wpID8gTUFYVEhSRUFEU0lOUE9PTCA6IHRocmVhZHM7Citkb25lOgorCVJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisJcmV0dXJuIDE7CitlcnI6CisJaWYodGhyZWFkczwwKQorCQlhYm9ydCgpOwkJCS8qIElmIHlvdSBjYW4ndCBhbGxvY2F0ZSBmb3Igc3lzdGVtIHBvb2wsIHdlJ3JlIHNjcmV3ZWQgKi8KKwlEZXN0cm95Q2FjaGVzKHApOworCWlmKHAtPm1bMF0pCisJeworCQlkZXN0cm95X21zcGFjZShwLT5tWzBdKTsKKwkJcC0+bVswXT0wOworCX0KKwlpZihwLT5teWNhY2hlKQorCXsKKwkJaWYoVExTRlJFRShwLT5teWNhY2hlKSkgYWJvcnQoKTsKKwkJcC0+bXljYWNoZT0wOworCX0KKwlSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworCXJldHVybiAwOworfQorc3RhdGljIE5PSU5MSU5FIG1zdGF0ZSBGaW5kTVNwYWNlKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgaW50ICpsYXN0VXNlZCwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworewkvKiBHZXRzIGNhbGxlZCB3aGVuIHRocmVhZCdzIGxhc3QgdXNlZCBtc3BhY2UgaXMgaW4gdXNlLiBUaGUgc3RyYXRlZ3kKKwlpcyB0byBydW4gdGhyb3VnaCB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIG1zcGFjZXMgbG9va2luZyBmb3IgYW4KKwl1bmxvY2tlZCBvbmUgYW5kIGlmIHdlIGZhaWwsIHdlIGNyZWF0ZSBhIG5ldyBvbmUgc28gbG9uZyBhcyB3ZSBkb24ndAorCWV4Y2VlZCBwLT50aHJlYWRzICovCisJaW50IG4sIGVuZDsKKwlmb3Iobj1lbmQ9Kmxhc3RVc2VkKzE7IHAtPm1bbl07IGVuZD0rK24pCisJeworCQlpZihUUllfTE9DSygmcC0+bVtuXS0+bXV0ZXgpKSBnb3RvIGZvdW5kOworCX0KKwlmb3Iobj0wOyBuPCpsYXN0VXNlZCAmJiBwLT5tW25dOyBuKyspCisJeworCQlpZihUUllfTE9DSygmcC0+bVtuXS0+bXV0ZXgpKSBnb3RvIGZvdW5kOworCX0KKwlpZihlbmQ8cC0+dGhyZWFkcykKKwl7CisJCW1zdGF0ZSB0ZW1wOworCQlpZighKHRlbXA9KG1zdGF0ZSkgY3JlYXRlX21zcGFjZShzaXplLCAxKSkpCisJCQlnb3RvIGJhZGV4aXQ7CisJCS8qIE5vdyB3ZSdyZSByZWFkeSB0byBtb2RpZnkgdGhlIGxpc3RzLCB3ZSBsb2NrICovCisJCUFDUVVJUkVfTE9DSygmcC0+bXV0ZXgpOworCQl3aGlsZShwLT5tW2VuZF0gJiYgZW5kPHAtPnRocmVhZHMpCisJCQllbmQrKzsKKwkJaWYoZW5kPj1wLT50aHJlYWRzKQorCQl7CS8qIERyYXQsIG11c3QgZGVzdHJveSBpdCBub3cgKi8KKwkJCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCQkJZGVzdHJveV9tc3BhY2UoKG1zcGFjZSkgdGVtcCk7CisJCQlnb3RvIGJhZGV4aXQ7CisJCX0KKwkJLyogV2UgcmVhbGx5IHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgZ29lcyBpbnRvIG1lbW9yeSBub3cgYnV0IHdlCisJCWhhdmUgdG8gYmUgY2FyZWZ1bCBvZiBicmVha2luZyBhbGlhc2luZyBydWxlcywgc28gd3JpdGUgaXQgdHdpY2UgKi8KKwkJKigodm9sYXRpbGUgc3RydWN0IG1hbGxvY19zdGF0ZSAqKikgJnAtPm1bZW5kXSk9cC0+bVtlbmRdPXRlbXA7CisJCUFDUVVJUkVfTE9DSygmcC0+bVtlbmRdLT5tdXRleCk7CisJCS8qcHJpbnRmKCJDcmVhdGVkIG1zcGFjZSBpZHggJWRcbiIsIGVuZCk7Ki8KKwkJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJCW49ZW5kOworCQlnb3RvIGZvdW5kOworCX0KKwkvKiBMZXQgaXQgbG9jayBvbiB0aGUgbGFzdCBvbmUgaXQgdXNlZCAqLworYmFkZXhpdDoKKwlBQ1FVSVJFX0xPQ0soJnAtPm1bKmxhc3RVc2VkXS0+bXV0ZXgpOworCXJldHVybiBwLT5tWypsYXN0VXNlZF07Citmb3VuZDoKKwkqbGFzdFVzZWQ9bjsKKwlpZih0YykKKwkJdGMtPm15bXNwYWNlPW47CisJZWxzZQorCXsKKwkJaWYoVExTU0VUKHAtPm15Y2FjaGUsICh2b2lkICopKHNpemVfdCkoLShuKzEpKSkpIGFib3J0KCk7CisJfQorCXJldHVybiBwLT5tW25dOworfQorCituZWRwb29sICpuZWRjcmVhdGVwb29sKHNpemVfdCBjYXBhY2l0eSwgaW50IHRocmVhZHMpIFRIUk9XU1BFQworeworCW5lZHBvb2wgKnJldDsKKwlpZighKHJldD0obmVkcG9vbCAqKSBuZWRwY2FsbG9jKDAsIDEsIHNpemVvZihuZWRwb29sKSkpKSByZXR1cm4gMDsKKwlpZighSW5pdFBvb2wocmV0LCBjYXBhY2l0eSwgdGhyZWFkcykpCisJeworCQluZWRwZnJlZSgwLCByZXQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgbmVkZGVzdHJveXBvb2wobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJaW50IG47CisJQUNRVUlSRV9MT0NLKCZwLT5tdXRleCk7CisJRGVzdHJveUNhY2hlcyhwKTsKKwlmb3Iobj0wOyBwLT5tW25dOyBuKyspCisJeworCQlkZXN0cm95X21zcGFjZShwLT5tW25dKTsKKwkJcC0+bVtuXT0wOworCX0KKwlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwlpZihUTFNGUkVFKHAtPm15Y2FjaGUpKSBhYm9ydCgpOworCW5lZHBmcmVlKDAsIHApOworfQorCit2b2lkIG5lZHBzZXR2YWx1ZShuZWRwb29sICpwLCB2b2lkICp2KSBUSFJPV1NQRUMKK3sKKwlpZighcCkgeyBwPSZzeXNwb29sOyBpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOyB9CisJcC0+dXNlcnZhbHVlPXY7Cit9Cit2b2lkICpuZWRnZXR2YWx1ZShuZWRwb29sICoqcCwgdm9pZCAqbWVtKSBUSFJPV1NQRUMKK3sKKwluZWRwb29sICpucD0wOworCW1jaHVua3B0ciBtY3A9bWVtMmNodW5rKG1lbSk7CisJbXN0YXRlIGZtOworCWlmKCEoaXNfYWxpZ25lZChjaHVuazJtZW0obWNwKSkpICYmIG1jcC0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgcmV0dXJuIDA7CisJaWYoIWNpbnVzZShtY3ApKSByZXR1cm4gMDsKKwlpZighbmV4dF9waW51c2UobWNwKSkgcmV0dXJuIDA7CisJaWYoIWlzX21tYXBwZWQobWNwKSAmJiAhcGludXNlKG1jcCkpCisJeworCQlpZihuZXh0X2NodW5rKHByZXZfY2h1bmsobWNwKSkhPW1jcCkgcmV0dXJuIDA7CisJfQorCWZtPWdldF9tc3RhdGVfZm9yKG1jcCk7CisJaWYoIW9rX21hZ2ljKGZtKSkgcmV0dXJuIDA7CisJaWYoIW9rX2FkZHJlc3MoZm0sIG1jcCkpIHJldHVybiAwOworCWlmKCFmbS0+ZXh0cCkgcmV0dXJuIDA7CisJbnA9KG5lZHBvb2wgKikgZm0tPmV4dHA7CisJaWYocCkgKnA9bnA7CisJcmV0dXJuIG5wLT51c2VydmFsdWU7Cit9CisKK3ZvaWQgbmVkZGlzYWJsZXRocmVhZGNhY2hlKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCWludCBteWNhY2hlOworCWlmKCFwKQorCXsKKwkJcD0mc3lzcG9vbDsKKwkJaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsKKwl9CisJbXljYWNoZT0oaW50KShzaXplX3QpIFRMU0dFVChwLT5teWNhY2hlKTsKKwlpZighbXljYWNoZSkKKwl7CS8qIFNldCB0byBtc3BhY2UgMCAqLworCQlpZihUTFNTRVQocC0+bXljYWNoZSwgKHZvaWQgKiktMSkpIGFib3J0KCk7CisJfQorCWVsc2UgaWYobXljYWNoZT4wKQorCXsJLyogU2V0IHRvIGxhc3QgdXNlZCBtc3BhY2UgKi8KKwkJdGhyZWFkY2FjaGUgKnRjPXAtPmNhY2hlc1tteWNhY2hlLTFdOworI2lmIGRlZmluZWQoREVCVUcpCisJCXByaW50ZigiVGhyZWFkY2FjaGUgdXRpbGlzYXRpb246ICVsZiUlIGluIGNhY2hlIHdpdGggJWxmJSUgbG9zdCB0byBvdGhlciB0aHJlYWRzXG4iLAorCQkJMTAwLjAqdGMtPnN1Y2Nlc3Nlcy90Yy0+bWFsbG9jcywgMTAwLjAqKChkb3VibGUpIHRjLT5tYWxsb2NzLXRjLT5mcmVlcykvdGMtPm1hbGxvY3MpOworI2VuZGlmCisJCWlmKFRMU1NFVChwLT5teWNhY2hlLCAodm9pZCAqKShzaXplX3QpKC10Yy0+bXltc3BhY2UpKSkgYWJvcnQoKTsKKwkJdGMtPmZyZWVzKys7CisJCVJlbW92ZUNhY2hlRW50cmllcyhwLCB0YywgMCk7CisJCWFzc2VydCghdGMtPmZyZWVJbkNhY2hlKTsKKwkJdGMtPm15bXNwYWNlPS0xOworCQl0Yy0+dGhyZWFkaWQ9MDsKKwkJbXNwYWNlX2ZyZWUoMCwgcC0+Y2FjaGVzW215Y2FjaGUtMV0pOworCQlwLT5jYWNoZXNbbXljYWNoZS0xXT0wOworCX0KK30KKworI2RlZmluZSBHRVRNU1BBQ0UobSxwLHRjLG1zLHMsYWN0aW9uKSAgICAgICAgICAgXAorICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1zdGF0ZSBtID0gR2V0TVNwYWNlKChwKSwodGMpLChtcyksKHMpKTsgICAgXAorICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJFTEVBU0VfTE9DSygmbS0+bXV0ZXgpOyAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgbXN0YXRlIEdldE1TcGFjZShuZWRwb29sICpwLCB0aHJlYWRjYWNoZSAqdGMsIGludCBteW1zcGFjZSwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworewkvKiBSZXR1cm5zIGEgbG9ja2VkIGFuZCByZWFkeSBmb3IgdXNlIG1zcGFjZSAqLworCW1zdGF0ZSBtPXAtPm1bbXltc3BhY2VdOworCWFzc2VydChtKTsKKwlpZighVFJZX0xPQ0soJnAtPm1bbXltc3BhY2VdLT5tdXRleCkpIG09RmluZE1TcGFjZShwLCB0YywgJm15bXNwYWNlLCBzaXplKTtcCisJLyphc3NlcnQoSVNfTE9DS0VEKCZwLT5tW215bXNwYWNlXS0+bXV0ZXgpKTsqLworCXJldHVybiBtOworfQorc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQgR2V0VGhyZWFkQ2FjaGUobmVkcG9vbCAqKnAsIHRocmVhZGNhY2hlICoqdGMsIGludCAqbXltc3BhY2UsIHNpemVfdCAqc2l6ZSkgVEhST1dTUEVDCit7CisJaW50IG15Y2FjaGU7CisJaWYoc2l6ZSAmJiAqc2l6ZTxzaXplb2YodGhyZWFkY2FjaGVibGspKSAqc2l6ZT1zaXplb2YodGhyZWFkY2FjaGVibGspOworCWlmKCEqcCkKKwl7CisJCSpwPSZzeXNwb29sOworCQlpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOworCX0KKwlteWNhY2hlPShpbnQpKHNpemVfdCkgVExTR0VUKCgqcCktPm15Y2FjaGUpOworCWlmKG15Y2FjaGU+MCkKKwl7CisJCSp0Yz0oKnApLT5jYWNoZXNbbXljYWNoZS0xXTsKKwkJKm15bXNwYWNlPSgqdGMpLT5teW1zcGFjZTsKKwl9CisJZWxzZSBpZighbXljYWNoZSkKKwl7CisJCSp0Yz1BbGxvY0NhY2hlKCpwKTsKKwkJaWYoISp0YykKKwkJewkvKiBEaXNhYmxlICovCisJCQlpZihUTFNTRVQoKCpwKS0+bXljYWNoZSwgKHZvaWQgKiktMSkpIGFib3J0KCk7CisJCQkqbXltc3BhY2U9MDsKKwkJfQorCQllbHNlCisJCQkqbXltc3BhY2U9KCp0YyktPm15bXNwYWNlOworCX0KKwllbHNlCisJeworCQkqdGM9MDsKKwkJKm15bXNwYWNlPS1teWNhY2hlLTE7CisJfQorCWFzc2VydCgqbXltc3BhY2U+PTApOworCWFzc2VydCgobG9uZykoc2l6ZV90KUNVUlJFTlRfVEhSRUFEPT0oKnRjKS0+dGhyZWFkaWQpOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwlpZigqdGMpCisJeworCQlpZigqKHVuc2lnbmVkIGludCAqKSJORURNQUxDMSIhPSgqdGMpLT5tYWdpYzEgfHwgKih1bnNpZ25lZCBpbnQgKikiTkVETUFMQzIiIT0oKnRjKS0+bWFnaWMyKQorCQl7CisJCQlhYm9ydCgpOworCQl9CisJfQorI2VuZGlmCit9CisKK3ZvaWQgKiBuZWRwbWFsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sKKwl2b2lkICpyZXQ9MDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJnNpemUpOworI2lmIFRIUkVBRENBQ0hFTUFYCisJaWYodGMgJiYgc2l6ZTw9VEhSRUFEQ0FDSEVNQVgpCisJewkvKiBVc2UgdGhlIHRocmVhZCBjYWNoZSAqLworCQlyZXQ9dGhyZWFkY2FjaGVfbWFsbG9jKHAsIHRjLCAmc2l6ZSk7CisJfQorI2VuZGlmCisJaWYoIXJldCkKKwl7CS8qIFVzZSB0aGlzIHRocmVhZCdzIG1zcGFjZSAqLworCUdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIHNpemUsCisJCSAgcmV0PW1zcGFjZV9tYWxsb2MobSwgc2l6ZSkpOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCAqIG5lZHBjYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IG5vLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CisJc2l6ZV90IHJzaXplPXNpemUqbm87CisJdm9pZCAqcmV0PTA7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsICZyc2l6ZSk7CisjaWYgVEhSRUFEQ0FDSEVNQVgKKwlpZih0YyAmJiByc2l6ZTw9VEhSRUFEQ0FDSEVNQVgpCisJewkvKiBVc2UgdGhlIHRocmVhZCBjYWNoZSAqLworCQlpZigocmV0PXRocmVhZGNhY2hlX21hbGxvYyhwLCB0YywgJnJzaXplKSkpCisJCQltZW1zZXQocmV0LCAwLCByc2l6ZSk7CisJfQorI2VuZGlmCisJaWYoIXJldCkKKwl7CS8qIFVzZSB0aGlzIHRocmVhZCdzIG1zcGFjZSAqLworCUdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIHJzaXplLAorCQkgIHJldD1tc3BhY2VfY2FsbG9jKG0sIDEsIHJzaXplKSk7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkICogbmVkcHJlYWxsb2MobmVkcG9vbCAqcCwgdm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CisJdm9pZCAqcmV0PTA7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlpZighbWVtKSByZXR1cm4gbmVkcG1hbGxvYyhwLCBzaXplKTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsICZzaXplKTsKKyNpZiBUSFJFQURDQUNIRU1BWAorCWlmKHRjICYmIHNpemUgJiYgc2l6ZTw9VEhSRUFEQ0FDSEVNQVgpCisJewkvKiBVc2UgdGhlIHRocmVhZCBjYWNoZSAqLworCQlzaXplX3QgbWVtc2l6ZT1uZWRibGtzaXplKG1lbSk7CisJCWFzc2VydChtZW1zaXplKTsKKwkJaWYoKHJldD10aHJlYWRjYWNoZV9tYWxsb2MocCwgdGMsICZzaXplKSkpCisJCXsKKwkJCW1lbWNweShyZXQsIG1lbSwgbWVtc2l6ZTxzaXplID8gbWVtc2l6ZSA6IHNpemUpOworCQkJaWYobWVtc2l6ZTw9VEhSRUFEQ0FDSEVNQVgpCisJCQkJdGhyZWFkY2FjaGVfZnJlZShwLCB0YywgbXltc3BhY2UsIG1lbSwgbWVtc2l6ZSk7CisJCQllbHNlCisJCQkJbXNwYWNlX2ZyZWUoMCwgbWVtKTsKKwkJfQorCX0KKyNlbmRpZgorCWlmKCFyZXQpCisJewkvKiBSZWFsbG9jcyBhbHdheXMgaGFwcGVuIGluIHRoZSBtc3BhY2UgdGhleSBoYXBwZW5lZCBpbiwgc28gc2tpcAorCQlsb2NraW5nIHRoZSBwcmVmZXJyZWQgbXNwYWNlIGZvciB0aGlzIHRocmVhZCAqLworCQlyZXQ9bXNwYWNlX3JlYWxsb2MoMCwgbWVtLCBzaXplKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgICBuZWRwZnJlZShuZWRwb29sICpwLCB2b2lkICptZW0pIFRIUk9XU1BFQworewkvKiBGcmVlcyBhbHdheXMgaGFwcGVuIGluIHRoZSBtc3BhY2UgdGhleSBoYXBwZW5lZCBpbiwgc28gc2tpcAorCWxvY2tpbmcgdGhlIHByZWZlcnJlZCBtc3BhY2UgZm9yIHRoaXMgdGhyZWFkICovCisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlzaXplX3QgbWVtc2l6ZTsKKwlhc3NlcnQobWVtKTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsIDApOworI2lmIFRIUkVBRENBQ0hFTUFYCisJbWVtc2l6ZT1uZWRibGtzaXplKG1lbSk7CisJYXNzZXJ0KG1lbXNpemUpOworCWlmKG1lbSAmJiB0YyAmJiBtZW1zaXplPD0oVEhSRUFEQ0FDSEVNQVgrQ0hVTktfT1ZFUkhFQUQpKQorCQl0aHJlYWRjYWNoZV9mcmVlKHAsIHRjLCBteW1zcGFjZSwgbWVtLCBtZW1zaXplKTsKKwllbHNlCisjZW5kaWYKKwkJbXNwYWNlX2ZyZWUoMCwgbWVtKTsKK30KK3ZvaWQgKiBuZWRwbWVtYWxpZ24obmVkcG9vbCAqcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSBUSFJPV1NQRUMKK3sKKwl2b2lkICpyZXQ7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsICZieXRlcyk7CisJewkvKiBVc2UgdGhpcyB0aHJlYWQncyBtc3BhY2UgKi8KKwlHRVRNU1BBQ0UobSwgcCwgdGMsIG15bXNwYWNlLCBieXRlcywKKwkJICByZXQ9bXNwYWNlX21lbWFsaWduKG0sIGFsaWdubWVudCwgYnl0ZXMpKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNpZiAhTk9fTUFMTElORk8KK3N0cnVjdCBtYWxsaW5mbyBuZWRwbWFsbGluZm8obmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJaW50IG47CisJc3RydWN0IG1hbGxpbmZvIHJldD17MH07CisJaWYoIXApIHsgcD0mc3lzcG9vbDsgaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsgfQorCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCXN0cnVjdCBtYWxsaW5mbyB0PW1zcGFjZV9tYWxsaW5mbyhwLT5tW25dKTsKKwkJcmV0LmFyZW5hKz10LmFyZW5hOworCQlyZXQub3JkYmxrcys9dC5vcmRibGtzOworCQlyZXQuaGJsa2hkKz10LmhibGtoZDsKKwkJcmV0LnVzbWJsa3MrPXQudXNtYmxrczsKKwkJcmV0LnVvcmRibGtzKz10LnVvcmRibGtzOworCQlyZXQuZm9yZGJsa3MrPXQuZm9yZGJsa3M7CisJCXJldC5rZWVwY29zdCs9dC5rZWVwY29zdDsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgoraW50ICAgIG5lZHBtYWxsb3B0KG5lZHBvb2wgKnAsIGludCBwYXJubywgaW50IHZhbHVlKSBUSFJPV1NQRUMKK3sKKwlyZXR1cm4gbXNwYWNlX21hbGxvcHQocGFybm8sIHZhbHVlKTsKK30KK2ludCAgICBuZWRwbWFsbG9jX3RyaW0obmVkcG9vbCAqcCwgc2l6ZV90IHBhZCkgVEhST1dTUEVDCit7CisJaW50IG4sIHJldD0wOworCWlmKCFwKSB7IHA9JnN5c3Bvb2w7IGlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7IH0KKwlmb3Iobj0wOyBwLT5tW25dOyBuKyspCisJeworCQlyZXQrPW1zcGFjZV90cmltKHAtPm1bbl0sIHBhZCk7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkICAgbmVkcG1hbGxvY19zdGF0cyhuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlpbnQgbjsKKwlpZighcCkgeyBwPSZzeXNwb29sOyBpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOyB9CisJZm9yKG49MDsgcC0+bVtuXTsgbisrKQorCXsKKwkJbXNwYWNlX21hbGxvY19zdGF0cyhwLT5tW25dKTsKKwl9Cit9CitzaXplX3QgbmVkcG1hbGxvY19mb290cHJpbnQobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJc2l6ZV90IHJldD0wOworCWludCBuOworCWlmKCFwKSB7IHA9JnN5c3Bvb2w7IGlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7IH0KKwlmb3Iobj0wOyBwLT5tW25dOyBuKyspCisJeworCQlyZXQrPW1zcGFjZV9mb290cHJpbnQocC0+bVtuXSk7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkICoqbmVkcGluZGVwZW5kZW50X2NhbGxvYyhuZWRwb29sICpwLCBzaXplX3QgZWxlbXNubywgc2l6ZV90IGVsZW1zaXplLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUMKK3sKKwl2b2lkICoqcmV0OworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAmZWxlbXNpemUpOworICAgIEdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIGVsZW1zbm8qZWxlbXNpemUsCisJICAgICAgcmV0PW1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobSwgZWxlbXNubywgZWxlbXNpemUsIGNodW5rcykpOworCXJldHVybiByZXQ7Cit9Cit2b2lkICoqbmVkcGluZGVwZW5kZW50X2NvbWFsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBlbGVtcywgc2l6ZV90ICpzaXplcywgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDCit7CisJdm9pZCAqKnJldDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworICAgIHNpemVfdCBpLCAqYWRqdXN0ZWRzaXplcz0oc2l6ZV90ICopIGFsbG9jYShlbGVtcypzaXplb2Yoc2l6ZV90KSk7CisgICAgaWYoIWFkanVzdGVkc2l6ZXMpIHJldHVybiAwOworICAgIGZvcihpPTA7IGk8ZWxlbXM7IGkrKykKKwlhZGp1c3RlZHNpemVzW2ldPXNpemVzW2ldPHNpemVvZih0aHJlYWRjYWNoZWJsaykgPyBzaXplb2YodGhyZWFkY2FjaGVibGspIDogc2l6ZXNbaV07CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAwKTsKKwlHRVRNU1BBQ0UobSwgcCwgdGMsIG15bXNwYWNlLCAwLAorCSAgICAgIHJldD1tc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobSwgZWxlbXMsIGFkanVzdGVkc2l6ZXMsIGNodW5rcykpOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBPVkVSUklERV9TVFJEVVAKKy8qCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIHB1cmVseSB0aGVyZSB0byBvdmVycmlkZSB0aGUgbGliYyB2ZXJzaW9uLCB0bworICogYXZvaWQgYSBjcmFzaCBkdWUgdG8gYWxsb2NhdGlvbiBhbmQgZnJlZSBvbiBkaWZmZXJlbnQgJ2hlYXBzJy4KKyAqLworY2hhciAqc3RyZHVwKGNvbnN0IGNoYXIgKnMxKQoreworCWNoYXIgKnMyID0gMDsKKwlpZiAoczEpIHsKKwkJczIgPSBtYWxsb2Moc3RybGVuKHMxKSArIDEpOworCQlzdHJjcHkoczIsIHMxKTsKKwl9CisJcmV0dXJuIHMyOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5oIGIvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTYwZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuaApAQCAtMCwwICsxLDE4MCBAQAorLyogbmVkYWxsb2MsIGFuIGFsdGVybmF0aXZlIG1hbGxvYyBpbXBsZW1lbnRhdGlvbiBmb3IgbXVsdGlwbGUgdGhyZWFkcyB3aXRob3V0Citsb2NrIGNvbnRlbnRpb24gYmFzZWQgb24gZGxtYWxsb2MgdjIuOC4zLiAoQykgMjAwNSBOaWFsbCBEb3VnbGFzCisKK0Jvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKK3RoaXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKK1NvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCitkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKKworVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKK3RoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCittdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKK2FsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKK3dvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQorYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUgQkUgTElBQkxFCitGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKK0FSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorKi8KKworI2lmbmRlZiBORURNQUxMT0NfSAorI2RlZmluZSBORURNQUxMT0NfSAorCisKKy8qIFNlZSBtYWxsb2MuYy5oIGZvciB3aGF0IGVhY2ggZnVuY3Rpb24gZG9lcy4KKworUkVQTEFDRV9TWVNURU1fQUxMT0NBVE9SIGNhdXNlcyBuZWRhbGxvYydzIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgbWFsbG9jLAorZnJlZSBldGMuIGluc3RlYWQgb2YgbmVkbWFsbG9jLCBuZWRmcmVlIGV0Yy4gWW91IG1heSBvciBtYXkgbm90IHdhbnQgdGhpcy4KKworTk9fTkVEX05BTUVTUEFDRSBwcmV2ZW50cyB0aGUgZnVuY3Rpb25zIGZyb20gYmVpbmcgZGVmaW5lZCBpbiB0aGUgbmVkYWxsb2MKK25hbWVzcGFjZSB3aGVuIGluIEMrKyAodXNlcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSBpbnN0ZWFkKS4KKworRVhUU1BFQyBjYW4gYmUgZGVmaW5lZCB0byBiZSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgb3IKK19fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBvciB3aGF0ZXZlciB5b3UgbGlrZS4gSXQgZGVmYXVsdHMKK3RvIGV4dGVybi4KKworVVNFX0xPQ0tTIGNhbiBiZSAyIGlmIHlvdSB3YW50IHRvIGRlZmluZSB5b3VyIG93biBNTE9DS19ULCBJTklUSUFMX0xPQ0ssCitBQ1FVSVJFX0xPQ0ssIFJFTEVBU0VfTE9DSywgVFJZX0xPQ0ssIElTX0xPQ0tFRCBhbmQgTlVMTF9MT0NLX0lOSVRJQUxJWkVSLgorCisqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+ICAgLyogZm9yIHNpemVfdCAqLworCisjaWZuZGVmIEVYVFNQRUMKKyAjZGVmaW5lIEVYVFNQRUMgZXh0ZXJuCisjZW5kaWYKKworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xNDAwCisgI2RlZmluZSBNQUxMT0NBVFRSIF9fZGVjbHNwZWMocmVzdHJpY3QpCisjZW5kaWYKKyNpZmRlZiBfX0dOVUNfXworICNkZWZpbmUgTUFMTE9DQVRUUiBfX2F0dHJpYnV0ZV9fICgobWFsbG9jKSkKKyNlbmRpZgorI2lmbmRlZiBNQUxMT0NBVFRSCisgI2RlZmluZSBNQUxMT0NBVFRSCisjZW5kaWYKKworI2lmZGVmIFJFUExBQ0VfU1lTVEVNX0FMTE9DQVRPUgorICNkZWZpbmUgbmVkbWFsbG9jICAgICAgICAgICAgICAgbWFsbG9jCisgI2RlZmluZSBuZWRjYWxsb2MgICAgICAgICAgICAgICBjYWxsb2MKKyAjZGVmaW5lIG5lZHJlYWxsb2MgICAgICAgICAgICAgIHJlYWxsb2MKKyAjZGVmaW5lIG5lZGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyAjZGVmaW5lIG5lZG1lbWFsaWduICAgICAgICAgICAgIG1lbWFsaWduCisgI2RlZmluZSBuZWRtYWxsaW5mbyAgICAgICAgICAgICBtYWxsaW5mbworICNkZWZpbmUgbmVkbWFsbG9wdCAgICAgICAgICAgICAgbWFsbG9wdAorICNkZWZpbmUgbmVkbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0KKyAjZGVmaW5lIG5lZG1hbGxvY19zdGF0cyAgICAgICAgIG1hbGxvY19zdGF0cworICNkZWZpbmUgbmVkbWFsbG9jX2Zvb3RwcmludCAgICAgbWFsbG9jX2Zvb3RwcmludAorICNkZWZpbmUgbmVkaW5kZXBlbmRlbnRfY2FsbG9jICAgaW5kZXBlbmRlbnRfY2FsbG9jCisgI2RlZmluZSBuZWRpbmRlcGVuZGVudF9jb21hbGxvYyBpbmRlcGVuZGVudF9jb21hbGxvYworICNpZmRlZiBfTVNDX1ZFUgorICAjZGVmaW5lIG5lZGJsa3NpemUgICAgICAgICAgICAgIF9tc2l6ZQorICNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgTk9fTUFMTElORk8KKyNkZWZpbmUgTk9fTUFMTElORk8gMAorI2VuZGlmCisKKyNpZiAhTk9fTUFMTElORk8KK3N0cnVjdCBtYWxsaW5mbzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyAjaWYgIWRlZmluZWQoTk9fTkVEX05BTUVTUEFDRSkKK25hbWVzcGFjZSBuZWRhbGxvYyB7CisgI2Vsc2UKK2V4dGVybiAiQyIgeworICNlbmRpZgorICNkZWZpbmUgVEhST1dTUEVDIHRocm93KCkKKyNlbHNlCisgI2RlZmluZSBUSFJPV1NQRUMKKyNlbmRpZgorCisvKiBUaGVzZSBhcmUgdGhlIGdsb2JhbCBmdW5jdGlvbnMgKi8KKworLyogR2V0cyB0aGUgdXNhYmxlIHNpemUgb2YgYW4gYWxsb2NhdGVkIGJsb2NrLiBOb3RlIHRoaXMgd2lsbCBhbHdheXMgYmUgYmlnZ2VyIHRoYW4gd2hhdCB3YXMKK2Fza2VkIGZvciBkdWUgdG8gcm91bmRpbmcgZXRjLgorKi8KK0VYVFNQRUMgc2l6ZV90IG5lZGJsa3NpemUodm9pZCAqbWVtKSBUSFJPV1NQRUM7CisKK0VYVFNQRUMgdm9pZCBuZWRzZXR2YWx1ZSh2b2lkICp2KSBUSFJPV1NQRUM7CisKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkbWFsbG9jKHNpemVfdCBzaXplKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZGNhbGxvYyhzaXplX3Qgbm8sIHNpemVfdCBzaXplKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZHJlYWxsb2Modm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkZnJlZSh2b2lkICptZW0pIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSBUSFJPV1NQRUM7CisjaWYgIU5PX01BTExJTkZPCitFWFRTUEVDIHN0cnVjdCBtYWxsaW5mbyBuZWRtYWxsaW5mbyh2b2lkKSBUSFJPV1NQRUM7CisjZW5kaWYKK0VYVFNQRUMgaW50ICAgIG5lZG1hbGxvcHQoaW50IHBhcm5vLCBpbnQgdmFsdWUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgaW50ICAgIG5lZG1hbGxvY190cmltKHNpemVfdCBwYWQpIFRIUk9XU1BFQzsKK0VYVFNQRUMgdm9pZCAgIG5lZG1hbGxvY19zdGF0cyh2b2lkKSBUSFJPV1NQRUM7CitFWFRTUEVDIHNpemVfdCBuZWRtYWxsb2NfZm9vdHByaW50KHZvaWQpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICoqbmVkaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBlbGVtc25vLCBzaXplX3QgZWxlbXNpemUsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICoqbmVkaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IGVsZW1zLCBzaXplX3QgKnNpemVzLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUM7CisKKy8qIFRoZXNlIGFyZSB0aGUgcG9vbCBmdW5jdGlvbnMgKi8KK3N0cnVjdCBuZWRwb29sX3Q7Cit0eXBlZGVmIHN0cnVjdCBuZWRwb29sX3QgbmVkcG9vbDsKKworLyogQ3JlYXRlcyBhIG1lbW9yeSBwb29sIGZvciB1c2Ugd2l0aCB0aGUgbmVkcCogZnVuY3Rpb25zIGJlbG93LgorQ2FwYWNpdHkgaXMgaG93IG11Y2ggdG8gYWxsb2NhdGUgaW1tZWRpYXRlbHkgKGlmIHlvdSBrbm93IHlvdSdsbCBiZSBhbGxvY2F0aW5nIGEgbG90CitvZiBtZW1vcnkgdmVyeSBzb29uKSB3aGljaCB5b3UgY2FuIGxlYXZlIGF0IHplcm8uIFRocmVhZHMgc3BlY2lmaWVzIGhvdyBtYW55IHRocmVhZHMKK3dpbGwgKm5vcm1hbGx5KiBiZSBhY2Nlc3NpbmcgdGhlIHBvb2wgY29uY3VycmVudGx5LiBTZXR0aW5nIHRoaXMgdG8gemVybyBtZWFucyBpdAorZXh0ZW5kcyBvbiBkZW1hbmQsIGJ1dCBiZSBjYXJlZnVsIG9mIHRoaXMgYXMgaXQgY2FuIHJhcGlkbHkgY29uc3VtZSBzeXN0ZW0gcmVzb3VyY2VzCit3aGVyZSBidXJzdHMgb2YgY29uY3VycmVudCB0aHJlYWRzIHVzZSBhIHBvb2wgYXQgb25jZS4KKyovCitFWFRTUEVDIE1BTExPQ0FUVFIgbmVkcG9vbCAqbmVkY3JlYXRlcG9vbChzaXplX3QgY2FwYWNpdHksIGludCB0aHJlYWRzKSBUSFJPV1NQRUM7CisKKy8qIERlc3Ryb3lzIGEgbWVtb3J5IHBvb2wgcHJldmlvdXNseSBjcmVhdGVkIGJ5IG5lZGNyZWF0ZXBvb2woKS4KKyovCitFWFRTUEVDIHZvaWQgbmVkZGVzdHJveXBvb2wobmVkcG9vbCAqcCkgVEhST1dTUEVDOworCisvKiBTZXRzIGEgdmFsdWUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgcG9vbC4gWW91IGNhbiByZXRyaWV2ZSB0aGlzIHZhbHVlIGJ5IHBhc3NpbmcKK2FueSBtZW1vcnkgYmxvY2sgYWxsb2NhdGVkIGZyb20gdGhhdCBwb29sLgorKi8KK0VYVFNQRUMgdm9pZCBuZWRwc2V0dmFsdWUobmVkcG9vbCAqcCwgdm9pZCAqdikgVEhST1dTUEVDOworLyogR2V0cyBhIHByZXZpb3VzbHkgc2V0IHZhbHVlIHVzaW5nIG5lZHBzZXR2YWx1ZSgpIG9yIHplcm8gaWYgbWVtb3J5IGlzIHVua25vd24uCitPcHRpb25hbGx5IGNhbiBhbHNvIHJldHJpZXZlIHBvb2wuCisqLworRVhUU1BFQyB2b2lkICpuZWRnZXR2YWx1ZShuZWRwb29sICoqcCwgdm9pZCAqbWVtKSBUSFJPV1NQRUM7CisKKy8qIERpc2FibGVzIHRoZSB0aHJlYWQgY2FjaGUgZm9yIHRoZSBjYWxsaW5nIHRocmVhZCwgcmV0dXJuaW5nIGFueSBleGlzdGluZyBjYWNoZQorZGF0YSB0byB0aGUgY2VudHJhbCBwb29sLgorKi8KK0VYVFNQRUMgdm9pZCBuZWRkaXNhYmxldGhyZWFkY2FjaGUobmVkcG9vbCAqcCkgVEhST1dTUEVDOworCitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZHBtYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcGNhbGxvYyhuZWRwb29sICpwLCBzaXplX3Qgbm8sIHNpemVfdCBzaXplKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZHByZWFsbG9jKG5lZHBvb2wgKnAsIHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgdm9pZCAgIG5lZHBmcmVlKG5lZHBvb2wgKnAsIHZvaWQgKm1lbSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRwbWVtYWxpZ24obmVkcG9vbCAqcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSBUSFJPV1NQRUM7CisjaWYgIU5PX01BTExJTkZPCitFWFRTUEVDIHN0cnVjdCBtYWxsaW5mbyBuZWRwbWFsbGluZm8obmVkcG9vbCAqcCkgVEhST1dTUEVDOworI2VuZGlmCitFWFRTUEVDIGludCAgICBuZWRwbWFsbG9wdChuZWRwb29sICpwLCBpbnQgcGFybm8sIGludCB2YWx1ZSkgVEhST1dTUEVDOworRVhUU1BFQyBpbnQgICAgbmVkcG1hbGxvY190cmltKG5lZHBvb2wgKnAsIHNpemVfdCBwYWQpIFRIUk9XU1BFQzsKK0VYVFNQRUMgdm9pZCAgIG5lZHBtYWxsb2Nfc3RhdHMobmVkcG9vbCAqcCkgVEhST1dTUEVDOworRVhUU1BFQyBzaXplX3QgbmVkcG1hbGxvY19mb290cHJpbnQobmVkcG9vbCAqcCkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRwaW5kZXBlbmRlbnRfY2FsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBlbGVtc25vLCBzaXplX3QgZWxlbXNpemUsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICoqbmVkcGluZGVwZW5kZW50X2NvbWFsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBlbGVtcywgc2l6ZV90ICpzaXplcywgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDOworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisjdW5kZWYgTUFMTE9DQVRUUgorI3VuZGVmIEVYVFNQRUMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvc25wcmludGYuYyBiL2NvbXBhdC9zbnByaW50Zi5jCmluZGV4IDM1N2U3MzMuLjZjMGZiMDUgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9zbnByaW50Zi5jCisrKyBiL2NvbXBhdC9zbnByaW50Zi5jCkBAIC02LDggKzYsMTIgQEAKICAqIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHdyaXRlIHdpdGhvdXQgdGhlIHRyYWlsaW5nIE5VTC4KICAqLwogI2lmbmRlZiBTTlBSSU5URl9TSVpFX0NPUlIKKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA8IDQKKyNkZWZpbmUgU05QUklOVEZfU0laRV9DT1JSIDEKKyNlbHNlCiAjZGVmaW5lIFNOUFJJTlRGX1NJWkVfQ09SUiAwCiAjZW5kaWYKKyNlbmRpZgogCiAjdW5kZWYgdnNucHJpbnRmCiBpbnQgZ2l0X3ZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBtYXhzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXApCmRpZmYgLS1naXQgYS9jb21wYXQvd2luYW5zaS5jIGIvY29tcGF0L3dpbmFuc2kuYwppbmRleCA0NGRjMjkzLi45MjE3YzI0IDEwMDY0NAotLS0gYS9jb21wYXQvd2luYW5zaS5jCisrKyBiL2NvbXBhdC93aW5hbnNpLmMKQEAgLTgwLDYgKzgwLDcgQEAKIHN0YXRpYyB2b2lkIGVyYXNlX2luX2xpbmUodm9pZCkKIHsKIAlDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBzYmk7CisJRFdPUkQgZHVtbXk7IC8qIE5lZWRlZCBmb3IgV2luZG93cyA3IChvciBWaXN0YSkgcmVncmVzc2lvbiAqLwogCiAJaWYgKCFjb25zb2xlKQogCQlyZXR1cm47CkBAIC04Nyw3ICs4OCw3IEBACiAJR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8oY29uc29sZSwgJnNiaSk7CiAJRmlsbENvbnNvbGVPdXRwdXRDaGFyYWN0ZXJBKGNvbnNvbGUsICcgJywKIAkJc2JpLmR3U2l6ZS5YIC0gc2JpLmR3Q3Vyc29yUG9zaXRpb24uWCwgc2JpLmR3Q3Vyc29yUG9zaXRpb24sCi0JCU5VTEwpOworCQkmZHVtbXkpOwogfQogCiAKZGlmZiAtLWdpdCBhL2NvbmZpZy5jIGIvY29uZmlnLmMKaW5kZXggN2U1NTk0Yi4uZTg3ZWRlYSAxMDA2NDQKLS0tIGEvY29uZmlnLmMKKysrIGIvY29uZmlnLmMKQEAgLTExNzIsNyArMTE3Miw5IEBACiBzdGF0aWMgaW50IHNlY3Rpb25fbmFtZV9tYXRjaCAoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICpuYW1lKQogewogCWludCBpID0gMCwgaiA9IDAsIGRvdCA9IDA7Ci0JZm9yICg7IGJ1ZltpXSAmJiBidWZbaV0gIT0gJ10nOyBpKyspIHsKKwlpZiAoYnVmW2ldICE9ICdbJykKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMTsgYnVmW2ldICYmIGJ1ZltpXSAhPSAnXSc7IGkrKykgewogCQlpZiAoIWRvdCAmJiBpc3NwYWNlKGJ1ZltpXSkpIHsKIAkJCWRvdCA9IDE7CiAJCQlpZiAobmFtZVtqKytdICE9ICcuJykKQEAgLTExOTMsNyArMTE5NSwxNyBAQAogCQlpZiAoYnVmW2ldICE9IG5hbWVbaisrXSkKIAkJCWJyZWFrOwogCX0KLQlyZXR1cm4gKGJ1ZltpXSA9PSAnXScgJiYgbmFtZVtqXSA9PSAwKTsKKwlpZiAoYnVmW2ldID09ICddJyAmJiBuYW1lW2pdID09IDApIHsKKwkJLyoKKwkJICogV2UgbWF0Y2gsIG5vdyBqdXN0IGZpbmQgdGhlIHJpZ2h0IGxlbmd0aCBvZmZzZXQgYnkKKwkJICogZ29iYmxpbmcgdXAgYW55IHdoaXRlc3BhY2UgYWZ0ZXIgaXQsIGFzIHdlbGwKKwkJICovCisJCWkrKzsKKwkJZm9yICg7IGJ1ZltpXSAmJiBpc3NwYWNlKGJ1ZltpXSk7IGkrKykKKwkJCTsgLyogZG8gbm90aGluZyAqLworCQlyZXR1cm4gaTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIC8qIGlmIG5ld19uYW1lID09IE5VTEwsIHRoZSBzZWN0aW9uIGlzIHJlbW92ZWQgaW5zdGVhZCAqLwpAQCAtMTIyMywxMSArMTIzNSwxMyBAQAogCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBjb25maWdfZmlsZSkpIHsKIAkJaW50IGk7CiAJCWludCBsZW5ndGg7CisJCWNoYXIgKm91dHB1dCA9IGJ1ZjsKIAkJZm9yIChpID0gMDsgYnVmW2ldICYmIGlzc3BhY2UoYnVmW2ldKTsgaSsrKQogCQkJOyAvKiBkbyBub3RoaW5nICovCiAJCWlmIChidWZbaV0gPT0gJ1snKSB7CiAJCQkvKiBpdCdzIGEgc2VjdGlvbiAqLwotCQkJaWYgKHNlY3Rpb25fbmFtZV9tYXRjaCAoJmJ1ZltpKzFdLCBvbGRfbmFtZSkpIHsKKwkJCWludCBvZmZzZXQgPSBzZWN0aW9uX25hbWVfbWF0Y2goJmJ1ZltpXSwgb2xkX25hbWUpOworCQkJaWYgKG9mZnNldCA+IDApIHsKIAkJCQlyZXQrKzsKIAkJCQlpZiAobmV3X25hbWUgPT0gTlVMTCkgewogCQkJCQlyZW1vdmUgPSAxOwpAQCAtMTIzOCwxNCArMTI1MiwyOSBAQAogCQkJCQlyZXQgPSB3cml0ZV9lcnJvcihsb2NrLT5maWxlbmFtZSk7CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KLQkJCQljb250aW51ZTsKKwkJCQkvKgorCQkJCSAqIFdlIHdyb3RlIG91dCB0aGUgbmV3IHNlY3Rpb24sIHdpdGgKKwkJCQkgKiBhIG5ld2xpbmUsIG5vdyBza2lwIHRoZSBvbGQKKwkJCQkgKiBzZWN0aW9uJ3MgbGVuZ3RoCisJCQkJICovCisJCQkJb3V0cHV0ICs9IG9mZnNldCArIGk7CisJCQkJaWYgKHN0cmxlbihvdXRwdXQpID4gMCkgeworCQkJCQkvKgorCQkJCQkgKiBNb3JlIGNvbnRlbnQgbWVhbnMgdGhlcmUncworCQkJCQkgKiBhIGRlY2xhcmF0aW9uIHRvIHB1dCBvbiB0aGUKKwkJCQkJICogbmV4dCBsaW5lOyBpbmRlbnQgd2l0aCBhCisJCQkJCSAqIHRhYgorCQkJCQkgKi8KKwkJCQkJb3V0cHV0IC09IDE7CisJCQkJCW91dHB1dFswXSA9ICdcdCc7CisJCQkJfQogCQkJfQogCQkJcmVtb3ZlID0gMDsKIAkJfQogCQlpZiAocmVtb3ZlKQogCQkJY29udGludWU7Ci0JCWxlbmd0aCA9IHN0cmxlbihidWYpOwotCQlpZiAod3JpdGVfaW5fZnVsbChvdXRfZmQsIGJ1ZiwgbGVuZ3RoKSAhPSBsZW5ndGgpIHsKKwkJbGVuZ3RoID0gc3RybGVuKG91dHB1dCk7CisJCWlmICh3cml0ZV9pbl9mdWxsKG91dF9mZCwgb3V0cHV0LCBsZW5ndGgpICE9IGxlbmd0aCkgewogCQkJcmV0ID0gd3JpdGVfZXJyb3IobG9jay0+ZmlsZW5hbWUpOwogCQkJZ290byBvdXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2NvbmZpZy5tYWsuaW4gYi9jb25maWcubWFrLmluCmluZGV4IDdjY2UwYzEuLjY3YjEyZjcgMTAwNjQ0Ci0tLSBhL2NvbmZpZy5tYWsuaW4KKysrIGIvY29uZmlnLm1hay5pbgpAQCAtMzAsOCArMzAsMTEgQEAKIE5PX09QRU5TU0w9QE5PX09QRU5TU0xACiBOT19DVVJMPUBOT19DVVJMQAogTk9fRVhQQVQ9QE5PX0VYUEFUQAorTk9fTElCR0VOX0g9QE5PX0xJQkdFTl9IQAogTkVFRFNfTElCSUNPTlY9QE5FRURTX0xJQklDT05WQAogTkVFRFNfU09DS0VUPUBORUVEU19TT0NLRVRACitORUVEU19SRVNPTFY9QE5FRURTX1JFU09MVkAKK05FRURTX0xJQkdFTj1ATkVFRFNfTElCR0VOQAogTk9fU1lTX1NFTEVDVF9IPUBOT19TWVNfU0VMRUNUX0hACiBOT19EX0lOT19JTl9ESVJFTlQ9QE5PX0RfSU5PX0lOX0RJUkVOVEAKIE5PX0RfVFlQRV9JTl9ESVJFTlQ9QE5PX0RfVFlQRV9JTl9ESVJFTlRACkBAIC00Niw2ICs0OSw3IEBACiBOT19TRVRFTlY9QE5PX1NFVEVOVkAKIE5PX1VOU0VURU5WPUBOT19VTlNFVEVOVkAKIE5PX01LRFRFTVA9QE5PX01LRFRFTVBACitOT19NS1NURU1QUz1ATk9fTUtTVEVNUFNACiBOT19JQ09OVj1ATk9fSUNPTlZACiBPTERfSUNPTlY9QE9MRF9JQ09OVkAKIE5PX0RFRkxBVEVfQk9VTkQ9QE5PX0RFRkxBVEVfQk9VTkRACmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggMjVmYmUzYi4uM2YxOTIyZCAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMzQyLDkgKzM0Miw4IEBACiBBQ19DSEVDS19MSUIoW2NyeXB0b10sIFtTSEExX0luaXRdLAogW05FRURTX1NTTF9XSVRIX0NSWVBUTz1dLAogW0FDX0NIRUNLX0xJQihbc3NsXSwgW1NIQTFfSW5pdF0sCi0gW05FRURTX1NTTF9XSVRIX0NSWVBUTz1ZZXNQbGVhc2UKLSAgTkVFRFNfU1NMX1dJVEhfQ1JZUFRPPV0sCi0gW05PX09QRU5TU0w9WWVzUGxlYXNlXSldKQorIFtORUVEU19TU0xfV0lUSF9DUllQVE89WWVzUGxlYXNlXSwKKyBbTkVFRFNfU1NMX1dJVEhfQ1JZUFRPPSBOT19PUEVOU1NMPVllc1BsZWFzZV0pXSkKIAogR0lUX1VOU1RBU0hfRkxBR1MoJE9QRU5TU0xESVIpCiAKQEAgLTQ3NSw2ICs0NzQsMjEgQEAKIEFDX1NVQlNUKE5FRURTX1NPQ0tFVCkKIHRlc3QgLW4gIiRORUVEU19TT0NLRVQiICYmIExJQlM9IiRMSUJTIC1sc29ja2V0IgogCisjCisjIERlZmluZSBORUVEU19SRVNPTFYgaWYgbGlua2luZyB3aXRoIC1sbnNsIGFuZC9vciAtbHNvY2tldCBpcyBub3QgZW5vdWdoLgorIyBOb3RhYmx5IG9uIFNvbGFyaXMgaHN0cmVycm9yIHJlc2lkZXMgaW4gbGlicmVzb2x2IGFuZCBvbiBTb2xhcmlzIDcKKyMgaW5ldF9udG9wIGFuZCBpbmV0X3B0b24gYWRkaXRpb25hbGx5IHJlc2lkZSB0aGVyZS4KK0FDX0NIRUNLX0xJQihbY10sIFtoc3RyZXJyb3JdLAorW05FRURTX1JFU09MVj1dLAorW05FRURTX1JFU09MVj1ZZXNQbGVhc2VdKQorQUNfU1VCU1QoTkVFRFNfUkVTT0xWKQordGVzdCAtbiAiJE5FRURTX1JFU09MViIgJiYgTElCUz0iJExJQlMgLWxyZXNvbHYiCisKK0FDX0NIRUNLX0xJQihbY10sIFtiYXNlbmFtZV0sCitbTkVFRFNfTElCR0VOPV0sCitbTkVFRFNfTElCR0VOPVllc1BsZWFzZV0pCitBQ19TVUJTVChORUVEU19MSUJHRU4pCit0ZXN0IC1uICIkTkVFRFNfTElCR0VOIiAmJiBMSUJTPSIkTElCUyAtbGdlbiIKIAogIyMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCiBBQ19NU0dfTk9USUNFKFtDSEVDS1MgZm9yIGhlYWRlciBmaWxlc10pCkBAIC02MzUsNiArNjQ5LDEyIEBACiAjIyAoaW4gZGVmYXVsdCBDIGxpYnJhcnkgYW5kIGxpYnJhcmllcyBjaGVja2VkIGJ5IEFDX0NIRUNLX0xJQikKIEFDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgbGlicmFyeSBmdW5jdGlvbnNdKQogIworIyBEZWZpbmUgTk9fTElCR0VOX0ggaWYgeW91IGRvbid0IGhhdmUgbGliZ2VuLmguCitBQ19DSEVDS19IRUFERVIoW2xpYmdlbi5oXSwKK1tOT19MSUJHRU5fSD1dLAorW05PX0xJQkdFTl9IPVllc1BsZWFzZV0pCitBQ19TVUJTVChOT19MSUJHRU5fSCkKKyMKICMgRGVmaW5lIE5PX1NUUkNBU0VTVFIgaWYgeW91IGRvbid0IGhhdmUgc3RyY2FzZXN0ci4KIEdJVF9DSEVDS19GVU5DKHN0cmNhc2VzdHIsCiBbTk9fU1RSQ0FTRVNUUj1dLApAQCAtNjg1LDYgKzcwNSwxMyBAQAogW05PX01LRFRFTVA9WWVzUGxlYXNlXSkKIEFDX1NVQlNUKE5PX01LRFRFTVApCiAjCisjIERlZmluZSBOT19NS1NURU1QUyBpZiB5b3UgZG9uJ3QgaGF2ZSBta3N0ZW1wcyBpbiB0aGUgQyBsaWJyYXJ5LgorR0lUX0NIRUNLX0ZVTkMobWtzdGVtcHMsCitbTk9fTUtTVEVNUFM9XSwKK1tOT19NS1NURU1QUz1ZZXNQbGVhc2VdKQorQUNfU1VCU1QoTk9fTUtTVEVNUFMpCisjCisjCiAjIERlZmluZSBOT19NTUFQIGlmIHlvdSB3YW50IHRvIGF2b2lkIG1tYXAuCiAjCiAjIERlZmluZSBOT19JQ09OViBpZiB5b3VyIGxpYmMgZG9lcyBub3QgcHJvcGVybHkgc3VwcG9ydCBpY29udi4KZGlmZiAtLWdpdCBhL2Nvbm5lY3QuYyBiL2Nvbm5lY3QuYwppbmRleCA5NThjODMxLi43NmU1NDI3IDEwMDY0NAotLS0gYS9jb25uZWN0LmMKKysrIGIvY29ubmVjdC5jCkBAIC00NjQsNyArNDY0LDcgQEAKIAogI2RlZmluZSBNQVhfQ01EX0xFTiAxMDI0CiAKLWNoYXIgKmdldF9wb3J0KGNoYXIgKmhvc3QpCitzdGF0aWMgY2hhciAqZ2V0X3BvcnQoY2hhciAqaG9zdCkKIHsKIAljaGFyICplbmQ7CiAJY2hhciAqcCA9IHN0cmNocihob3N0LCAnOicpOwpAQCAtNjA1LDE0ICs2MDUsMTggQEAKIAkJZGllKCJjb21tYW5kIGxpbmUgdG9vIGxvbmciKTsKIAogCWNvbm4tPmluID0gY29ubi0+b3V0ID0gLTE7Ci0JY29ubi0+YXJndiA9IGFyZyA9IHhjYWxsb2MoNiwgc2l6ZW9mKCphcmcpKTsKKwljb25uLT5hcmd2ID0gYXJnID0geGNhbGxvYyg3LCBzaXplb2YoKmFyZykpOwogCWlmIChwcm90b2NvbCA9PSBQUk9UT19TU0gpIHsKIAkJY29uc3QgY2hhciAqc3NoID0gZ2V0ZW52KCJHSVRfU1NIIik7CisJCWludCBwdXR0eSA9IHNzaCAmJiBzdHJjYXNlc3RyKHNzaCwgInBsaW5rIik7CiAJCWlmICghc3NoKSBzc2ggPSAic3NoIjsKIAogCQkqYXJnKysgPSBzc2g7CisJCWlmIChwdXR0eSAmJiAhc3RyY2FzZXN0cihzc2gsICJ0b3J0b2lzZXBsaW5rIikpCisJCQkqYXJnKysgPSAiLWJhdGNoIjsKIAkJaWYgKHBvcnQpIHsKLQkJCSphcmcrKyA9ICItcCI7CisJCQkvKiBQIGlzIGZvciBQdVRUWSwgcCBpcyBmb3IgT3BlblNTSCAqLworCQkJKmFyZysrID0gcHV0dHkgPyAiLVAiIDogIi1wIjsKIAkJCSphcmcrKyA9IHBvcnQ7CiAJCX0KIAkJKmFyZysrID0gaG9zdDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKaW5kZXggZjQ0MTUyYy4uNzQ1YjVmYiAxMDA3NTUKLS0tIGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKQEAgLTQwLDYgKzQwLDE0IEBACiAjICAgICAgIHdpdGggdGhlIGJhc2guc2hvd0RpcnR5U3RhdGUgdmFyaWFibGUsIHdoaWNoIGRlZmF1bHRzIHRvIHRydWUKICMgICAgICAgb25jZSBHSVRfUFMxX1NIT1dESVJUWVNUQVRFIGlzIGVuYWJsZWQuCiAjCisjICAgICAgIFlvdSBjYW4gYWxzbyBzZWUgaWYgY3VycmVudGx5IHNvbWV0aGluZyBpcyBzdGFzaGVkLCBieSBzZXR0aW5nCisjICAgICAgIEdJVF9QUzFfU0hPV1NUQVNIU1RBVEUgdG8gYSBub25lbXB0eSB2YWx1ZS4gSWYgc29tZXRoaW5nIGlzIHN0YXNoZWQsCisjICAgICAgIHRoZW4gYSAnJCcgd2lsbCBiZSBzaG93biBuZXh0IHRvIHRoZSBicmFuY2ggbmFtZS4KKyMKKyMgICAgICAgSWYgeW91IHdvdWxkIGxpa2UgdG8gc2VlIGlmIHRoZXJlJ3JlIHVudHJhY2tlZCBmaWxlcywgdGhlbiB5b3UgY2FuCisjICAgICAgIHNldCBHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUyB0byBhIG5vbmVtcHR5IHZhbHVlLiBJZiB0aGVyZSdyZQorIyAgICAgICB1bnRyYWNrZWQgZmlsZXMsIHRoZW4gYSAnJScgd2lsbCBiZSBzaG93biBuZXh0IHRvIHRoZSBicmFuY2ggbmFtZS4KKyMKICMgVG8gc3VibWl0IHBhdGNoZXM6CiAjCiAjICAgICopIFJlYWQgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwpAQCAtODQsMjYgKzkyLDI0IEBACiAJaWYgWyAtbiAiJGciIF07IHRoZW4KIAkJbG9jYWwgcgogCQlsb2NhbCBiCi0JCWlmIFsgLWQgIiRnL3JlYmFzZS1hcHBseSIgXTsgdGhlbgotCQkJaWYgWyAtZiAiJGcvcmViYXNlLWFwcGx5L3JlYmFzaW5nIiBdOyB0aGVuCi0JCQkJcj0ifFJFQkFTRSIKLQkJZWxpZiBbIC1mICIkZy9yZWJhc2UtYXBwbHkvYXBwbHlpbmciIF07IHRoZW4KLQkJCQlyPSJ8QU0iCi0JCQllbHNlCi0JCQkJcj0ifEFNL1JFQkFTRSIKLQkJCWZpCi0JCQliPSIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPi9kZXYvbnVsbCkiCi0JCWVsaWYgWyAtZiAiJGcvcmViYXNlLW1lcmdlL2ludGVyYWN0aXZlIiBdOyB0aGVuCisJCWlmIFsgLWYgIiRnL3JlYmFzZS1tZXJnZS9pbnRlcmFjdGl2ZSIgXTsgdGhlbgogCQkJcj0ifFJFQkFTRS1pIgogCQkJYj0iJChjYXQgIiRnL3JlYmFzZS1tZXJnZS9oZWFkLW5hbWUiKSIKIAkJZWxpZiBbIC1kICIkZy9yZWJhc2UtbWVyZ2UiIF07IHRoZW4KIAkJCXI9InxSRUJBU0UtbSIKIAkJCWI9IiQoY2F0ICIkZy9yZWJhc2UtbWVyZ2UvaGVhZC1uYW1lIikiCiAJCWVsc2UKLQkJCWlmIFsgLWYgIiRnL01FUkdFX0hFQUQiIF07IHRoZW4KKwkJCWlmIFsgLWQgIiRnL3JlYmFzZS1hcHBseSIgXTsgdGhlbgorCQkJCWlmIFsgLWYgIiRnL3JlYmFzZS1hcHBseS9yZWJhc2luZyIgXTsgdGhlbgorCQkJCQlyPSJ8UkVCQVNFIgorCQkJCWVsaWYgWyAtZiAiJGcvcmViYXNlLWFwcGx5L2FwcGx5aW5nIiBdOyB0aGVuCisJCQkJCXI9InxBTSIKKwkJCQllbHNlCisJCQkJCXI9InxBTS9SRUJBU0UiCisJCQkJZmkKKwkJCWVsaWYgWyAtZiAiJGcvTUVSR0VfSEVBRCIgXTsgdGhlbgogCQkJCXI9InxNRVJHSU5HIgotCQkJZmkKLQkJCWlmIFsgLWYgIiRnL0JJU0VDVF9MT0ciIF07IHRoZW4KKwkJCWVsaWYgWyAtZiAiJGcvQklTRUNUX0xPRyIgXTsgdGhlbgogCQkJCXI9InxCSVNFQ1RJTkciCiAJCQlmaQogCkBAIC0xMjksNiArMTM1LDggQEAKIAogCQlsb2NhbCB3CiAJCWxvY2FsIGkKKwkJbG9jYWwgcworCQlsb2NhbCB1CiAJCWxvY2FsIGMKIAogCQlpZiBbICJ0cnVlIiA9ICIkKGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtZ2l0LWRpciAyPi9kZXYvbnVsbCkiIF07IHRoZW4KQEAgLTE1MCwxNCArMTU4LDIxIEBACiAJCQkJCWZpCiAJCQkJZmkKIAkJCWZpCisJCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV1NUQVNIU1RBVEUtfSIgXTsgdGhlbgorCQkJICAgICAgICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvc3Rhc2ggPi9kZXYvbnVsbCAyPiYxICYmIHM9IiQiCisJCQlmaQorCisJCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTLX0iIF07IHRoZW4KKwkJCSAgIGlmIFsgLW4gIiQoZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZS1zdGFuZGFyZCkiIF07IHRoZW4KKwkJCSAgICAgIHU9IiUiCisJCQkgICBmaQorCQkJZmkKIAkJZmkKIAotCQlpZiBbIC1uICIkYiIgXTsgdGhlbgotCQkJaWYgWyAtbiAiJHsxLX0iIF07IHRoZW4KLQkJCQlwcmludGYgIiQxIiAiJGMke2IjI3JlZnMvaGVhZHMvfSR3JGkkciIKLQkJCWVsc2UKLQkJCQlwcmludGYgIiAoJXMpIiAiJGMke2IjI3JlZnMvaGVhZHMvfSR3JGkkciIKLQkJCWZpCisJCWlmIFsgLW4gIiR7MS19IiBdOyB0aGVuCisJCQlwcmludGYgIiQxIiAiJGMke2IjI3JlZnMvaGVhZHMvfSR3JGkkcyR1JHIiCisJCWVsc2UKKwkJCXByaW50ZiAiICglcykiICIkYyR7YiMjcmVmcy9oZWFkcy99JHckaSRzJHUkciIKIAkJZmkKIAlmaQogfQpAQCAtOTIzLDcgKzkzOCw3IEBACiB9CiAKIF9fZ2l0X21lcmdldG9vbHNfY29tbW9uPSJkaWZmdXNlIGVjbWVyZ2UgZW1lcmdlIGtkaWZmMyBtZWxkIG9wZW5kaWZmCi0JCQl0a2RpZmYgdmltZGlmZiBndmltZGlmZiB4eGRpZmYKKwkJCXRrZGlmZiB2aW1kaWZmIGd2aW1kaWZmIHh4ZGlmZiBhcmF4aXMKICIKIAogX2dpdF9kaWZmdG9vbCAoKQpAQCAtMTExMCw3ICsxMTI1LDcgQEAKIF9fZ2l0X2xvZ19jb21tb25fb3B0aW9ucz0iCiAJLS1ub3QgLS1hbGwKIAktLWJyYW5jaGVzIC0tdGFncyAtLXJlbW90ZXMKLQktLWZpcnN0LXBhcmVudCAtLW5vLW1lcmdlcworCS0tZmlyc3QtcGFyZW50IC0tbWVyZ2VzIC0tbm8tbWVyZ2VzCiAJLS1tYXgtY291bnQ9CiAJLS1tYXgtYWdlPSAtLXNpbmNlPSAtLWFmdGVyPQogCS0tbWluLWFnZT0gLS11bnRpbD0gLS1iZWZvcmU9CkBAIC0xMTYxLDcgKzExNzYsNyBAQAogCQkJJF9fZ2l0X2xvZ19zaG9ydGxvZ19vcHRpb25zCiAJCQkkX19naXRfbG9nX2dpdGtfb3B0aW9ucwogCQkJLS1yb290IC0tdG9wby1vcmRlciAtLWRhdGUtb3JkZXIgLS1yZXZlcnNlCi0JCQktLWZvbGxvdworCQkJLS1mb2xsb3cgLS1mdWxsLWRpZmYKIAkJCS0tYWJicmV2LWNvbW1pdCAtLWFiYnJldj0KIAkJCS0tcmVsYXRpdmUtZGF0ZSAtLWRhdGU9CiAJCQktLXByZXR0eT0gLS1mb3JtYXQ9IC0tb25lbGluZQpAQCAtMTI5NSw3ICsxMzEwLDcgQEAKIH0KIAogX19naXRfc2VuZF9lbWFpbF9jb25maXJtX29wdGlvbnM9ImFsd2F5cyBuZXZlciBhdXRvIGNjIGNvbXBvc2UiCi1fX2dpdF9zZW5kX2VtYWlsX3N1cHByZXNzY2Nfb3B0aW9ucz0iYXV0aG9yIHNlbGYgY2MgY2Nib2R5IHNvYiBjY2NtZCBib2R5IGFsbCIKK19fZ2l0X3NlbmRfZW1haWxfc3VwcHJlc3NjY19vcHRpb25zPSJhdXRob3Igc2VsZiBjYyBib2R5Y2Mgc29iIGNjY21kIGJvZHkgYWxsIgogCiBfZ2l0X3NlbmRfZW1haWwgKCkKIHsKQEAgLTEzMzQsNiArMTM0OSwzNiBAQAogCUNPTVBSRVBMWT0oKQogfQogCitfX2dpdF9jb25maWdfZ2V0X3NldF92YXJpYWJsZXMgKCkKK3sKKwlsb2NhbCBwcmV2d29yZCB3b3JkIGNvbmZpZ19maWxlPSBjPSRDT01QX0NXT1JECisJd2hpbGUgWyAkYyAtZ3QgMSBdOyBkbworCQl3b3JkPSIke0NPTVBfV09SRFNbY119IgorCQljYXNlICIkd29yZCIgaW4KKwkJLS1nbG9iYWx8LS1zeXN0ZW18LS1maWxlPSopCisJCQljb25maWdfZmlsZT0iJHdvcmQiCisJCQlicmVhaworCQkJOzsKKwkJLWZ8LS1maWxlKQorCQkJY29uZmlnX2ZpbGU9IiR3b3JkICRwcmV2d29yZCIKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXByZXZ3b3JkPSR3b3JkCisJCWM9JCgoLS1jKSkKKwlkb25lCisKKwlnaXQgLS1naXQtZGlyPSIkKF9fZ2l0ZGlyKSIgY29uZmlnICRjb25maWdfZmlsZSAtLWxpc3QgMj4vZGV2L251bGwgfAorCXdoaWxlIHJlYWQgbGluZQorCWRvCisJCWNhc2UgIiRsaW5lIiBpbgorCQkqLio9KikKKwkJCWVjaG8gIiR7bGluZS89Ki99IgorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKwogX2dpdF9jb25maWcgKCkKIHsKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCkBAIC0xMzY1LDcgKzE0MTAsOCBAQAogCQlfX2dpdGNvbXAgIiQoX19naXRfbWVyZ2Vfc3RyYXRlZ2llcykiCiAJCXJldHVybgogCQk7OwotCWNvbG9yLmJyYW5jaHxjb2xvci5kaWZmfGNvbG9yLmludGVyYWN0aXZlfGNvbG9yLnN0YXR1c3xjb2xvci51aSkKKwljb2xvci5icmFuY2h8Y29sb3IuZGlmZnxjb2xvci5pbnRlcmFjdGl2ZXxcCisJY29sb3Iuc2hvd2JyYW5jaHxjb2xvci5zdGF0dXN8Y29sb3IudWkpCiAJCV9fZ2l0Y29tcCAiYWx3YXlzIG5ldmVyIGF1dG8iCiAJCXJldHVybgogCQk7OwpAQCAtMTQwMCw2ICsxNDQ2LDEwIEBACiAJCV9fZ2l0Y29tcCAiJF9fZ2l0X3NlbmRfZW1haWxfc3VwcHJlc3NjY19vcHRpb25zIgogCQlyZXR1cm4KIAkJOzsKKwktLWdldHwtLWdldC1hbGx8LS11bnNldHwtLXVuc2V0LWFsbCkKKwkJX19naXRjb21wICIkKF9fZ2l0X2NvbmZpZ19nZXRfc2V0X3ZhcmlhYmxlcykiCisJCXJldHVybgorCQk7OwogCSouKikKIAkJQ09NUFJFUExZPSgpCiAJCXJldHVybgpAQCAtMTQxOSw3ICsxNDY5LDcgQEAKIAlicmFuY2guKi4qKQogCQlsb2NhbCBwZng9IiR7Y3VyJS4qfS4iCiAJCWN1cj0iJHtjdXIjIyoufSIKLQkJX19naXRjb21wICJyZW1vdGUgbWVyZ2UgbWVyZ2VvcHRpb25zIiAiJHBmeCIgIiRjdXIiCisJCV9fZ2l0Y29tcCAicmVtb3RlIG1lcmdlIG1lcmdlb3B0aW9ucyByZWJhc2UiICIkcGZ4IiAiJGN1ciIKIAkJcmV0dXJuCiAJCTs7CiAJYnJhbmNoLiopCkBAIC0xNDY2LDcgKzE1MTYsNyBAQAogCQljdXI9IiR7Y3VyIyMqLn0iCiAJCV9fZ2l0Y29tcCAiCiAJCQl1cmwgcHJveHkgZmV0Y2ggcHVzaCBtaXJyb3Igc2tpcERlZmF1bHRVcGRhdGUKLQkJCXJlY2VpdmVwYWNrIHVwbG9hZHBhY2sgdGFnb3B0CisJCQlyZWNlaXZlcGFjayB1cGxvYWRwYWNrIHRhZ29wdCBwdXNodXJsCiAJCQkiICIkcGZ4IiAiJGN1ciIKIAkJcmV0dXJuCiAJCTs7CkBAIC0xNDg0LDYgKzE1MzQsNyBAQAogCQk7OwogCWVzYWMKIAlfX2dpdGNvbXAgIgorCQlhZGQuaWdub3JlLWVycm9ycwogCQlhbGlhcy4KIAkJYXBwbHkud2hpdGVzcGFjZQogCQlicmFuY2guYXV0b3NldHVwbWVyZ2UKQEAgLTE1MTAsNiArMTU2MSw3IEBACiAJCWNvbG9yLmludGVyYWN0aXZlLmhlbHAKIAkJY29sb3IuaW50ZXJhY3RpdmUucHJvbXB0CiAJCWNvbG9yLnBhZ2VyCisJCWNvbG9yLnNob3dicmFuY2gKIAkJY29sb3Iuc3RhdHVzCiAJCWNvbG9yLnN0YXR1cy5hZGRlZAogCQljb2xvci5zdGF0dXMuY2hhbmdlZApAQCAtMTgyMSw2ICsxODczLDcgQEAKIAkJX19naXRjb21wICIKIAkJCS0tYWxsIC0tcmVtb3RlcyAtLXRvcG8tb3JkZXIgLS1jdXJyZW50IC0tbW9yZT0KIAkJCS0tbGlzdCAtLWluZGVwZW5kZW50IC0tbWVyZ2UtYmFzZSAtLW5vLW5hbWUKKwkJCS0tY29sb3IgLS1uby1jb2xvcgogCQkJLS1zaGExLW5hbWUgLS1zcGFyc2UgLS10b3BpY3MgLS1yZWZsb2cKIAkJCSIKIAkJcmV0dXJuCkBAIC0xODQxLDEwICsxODk0LDEwIEBACiAJCXNhdmUsLS0qKQogCQkJX19naXRjb21wICItLWtlZXAtaW5kZXgiCiAJCQk7OwotCQlhcHBseSwtLSopCisJCWFwcGx5LC0tKnxwb3AsLS0qKQogCQkJX19naXRjb21wICItLWluZGV4IgogCQkJOzsKLQkJc2hvdywtLSp8ZHJvcCwtLSp8cG9wLC0tKnxicmFuY2gsLS0qKQorCQlzaG93LC0tKnxkcm9wLC0tKnxicmFuY2gsLS0qKQogCQkJQ09NUFJFUExZPSgpCiAJCQk7OwogCQlzaG93LCp8YXBwbHksKnxkcm9wLCp8cG9wLCp8YnJhbmNoLCopCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbCBiL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNjBjYmFiNi4uMmE2NjA2MwotLS0gYS9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbAorKysgYi9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbApAQCAtNDQsNiArNDQsMTAgQEAKICMgICAtLXByZXR0eSAlcyIsIGRpc3BsYXlpbmcgdGhlIGNvbW1pdCBpZCwgYXV0aG9yLCBkYXRlIGFuZCBsb2cKICMgICBtZXNzYWdlLiAgVG8gbGlzdCBmdWxsIHBhdGNoZXMgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgbGluZSwgeW91CiAjICAgY291bGQgc2V0IHRoaXMgdG8gImdpdCBzaG93IC1DICVzOyBlY2hvIi4KKyMgICBUbyBsaXN0IGEgZ2l0d2ViL2NnaXQgVVJMICphbmQqIGEgZnVsbCBwYXRjaCBmb3IgZWFjaCBjaGFuZ2Ugc2V0LCB1c2UgdGhpczoKKyMgICAgICJ0PSVzOyBwcmludGYgJ2h0dHA6Ly8uLi4vP2lkPSUlcycgXCR0OyBlY2hvO2VjaG87IGdpdCBzaG93IC1DIFwkdDsgZWNobyIKKyMgICBCZSBjYXJlZnVsIGlmICIuLi4iIGNvbnRhaW5zIHRoaW5ncyB0aGF0IHdpbGwgYmUgZXhwYW5kZWQgYnkgc2hlbGwgImV2YWwiCisjICAgb3IgcHJpbnRmLgogIwogIyBOb3RlcwogIyAtLS0tLQpkaWZmIC0tZ2l0IGEvY3N1bS1maWxlLmMgYi9jc3VtLWZpbGUuYwppbmRleCAyZGRiMTJhLi40ZDUwY2M1IDEwMDY0NAotLS0gYS9jc3VtLWZpbGUuYworKysgYi9jc3VtLWZpbGUuYwpAQCAtMjYsNyArMjYsNyBAQAogCQl9CiAJCWlmICghcmV0KQogCQkJZGllKCJzaGExIGZpbGUgJyVzJyB3cml0ZSBlcnJvci4gT3V0IG9mIGRpc2tzcGFjZSIsIGYtPm5hbWUpOwotCQlkaWUoInNoYTEgZmlsZSAnJXMnIHdyaXRlIGVycm9yICglcykiLCBmLT5uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oInNoYTEgZmlsZSAnJXMnIHdyaXRlIGVycm9yIiwgZi0+bmFtZSk7CiAJfQogfQogCkBAIC01NSw4ICs1NSw3IEBACiAJCWlmIChmbGFncyAmIENTVU1fRlNZTkMpCiAJCQlmc3luY19vcl9kaWUoZi0+ZmQsIGYtPm5hbWUpOwogCQlpZiAoY2xvc2UoZi0+ZmQpKQotCQkJZGllKCIlczogc2hhMSBmaWxlIGVycm9yIG9uIGNsb3NlICglcykiLAotCQkJICAgIGYtPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oIiVzOiBzaGExIGZpbGUgZXJyb3Igb24gY2xvc2UiLCBmLT5uYW1lKTsKIAkJZmQgPSAwOwogCX0gZWxzZQogCQlmZCA9IGYtPmZkOwpkaWZmIC0tZ2l0IGEvZGFlbW9uLmMgYi9kYWVtb24uYwppbmRleCBiMmJhYmNjLi4xYjVhZGE2IDEwMDY0NAotLS0gYS9kYWVtb24uYworKysgYi9kYWVtb24uYwpAQCAtMSw2ICsxLDggQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgInBrdC1saW5lLmgiCiAjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgogCiAjaW5jbHVkZSA8c3lzbG9nLmg+CiAKQEAgLTM0MywyOCArMzQ1LDY2IEBACiAJcmV0dXJuIHNlcnZpY2UtPmZuKCk7CiB9CiAKK3N0YXRpYyB2b2lkIGNvcHlfdG9fbG9nKGludCBmZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICpmcDsKKworCWZwID0gZmRvcGVuKGZkLCAiciIpOworCWlmIChmcCA9PSBOVUxMKSB7CisJCWxvZ2Vycm9yKCJmZG9wZW4gb2YgZXJyb3IgY2hhbm5lbCBmYWlsZWQiKTsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm47CisJfQorCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBmcCwgJ1xuJykgIT0gRU9GKSB7CisJCWxvZ2Vycm9yKCIlcyIsIGxpbmUuYnVmKTsKKwkJc3RyYnVmX3NldGxlbigmbGluZSwgMCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCWZjbG9zZShmcCk7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3NlcnZpY2VfY29tbWFuZChjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbGQ7CisKKwltZW1zZXQoJmNsZCwgMCwgc2l6ZW9mKGNsZCkpOworCWNsZC5hcmd2ID0gYXJndjsKKwljbGQuZ2l0X2NtZCA9IDE7CisJY2xkLmVyciA9IC0xOworCWlmIChzdGFydF9jb21tYW5kKCZjbGQpKQorCQlyZXR1cm4gLTE7CisKKwljbG9zZSgwKTsKKwljbG9zZSgxKTsKKworCWNvcHlfdG9fbG9nKGNsZC5lcnIpOworCisJcmV0dXJuIGZpbmlzaF9jb21tYW5kKCZjbGQpOworfQorCiBzdGF0aWMgaW50IHVwbG9hZF9wYWNrKHZvaWQpCiB7CiAJLyogVGltZW91dCBhcyBzdHJpbmcgKi8KIAljaGFyIHRpbWVvdXRfYnVmWzY0XTsKKwljb25zdCBjaGFyICphcmd2W10gPSB7ICJ1cGxvYWQtcGFjayIsICItLXN0cmljdCIsIHRpbWVvdXRfYnVmLCAiLiIsIE5VTEwgfTsKIAogCXNucHJpbnRmKHRpbWVvdXRfYnVmLCBzaXplb2YgdGltZW91dF9idWYsICItLXRpbWVvdXQ9JXUiLCB0aW1lb3V0KTsKLQotCS8qIGdpdC11cGxvYWQtcGFjayBvbmx5IGV2ZXIgcmVhZHMgc3R1ZmYsIHNvIHRoaXMgaXMgc2FmZSAqLwotCWV4ZWNsX2dpdF9jbWQoInVwbG9hZC1wYWNrIiwgIi0tc3RyaWN0IiwgdGltZW91dF9idWYsICIuIiwgTlVMTCk7Ci0JcmV0dXJuIC0xOworCXJldHVybiBydW5fc2VydmljZV9jb21tYW5kKGFyZ3YpOwogfQogCiBzdGF0aWMgaW50IHVwbG9hZF9hcmNoaXZlKHZvaWQpCiB7Ci0JZXhlY2xfZ2l0X2NtZCgidXBsb2FkLWFyY2hpdmUiLCAiLiIsIE5VTEwpOwotCXJldHVybiAtMTsKKwlzdGF0aWMgY29uc3QgY2hhciAqYXJndltdID0geyAidXBsb2FkLWFyY2hpdmUiLCAiLiIsIE5VTEwgfTsKKwlyZXR1cm4gcnVuX3NlcnZpY2VfY29tbWFuZChhcmd2KTsKIH0KIAogc3RhdGljIGludCByZWNlaXZlX3BhY2sodm9pZCkKIHsKLQlleGVjbF9naXRfY21kKCJyZWNlaXZlLXBhY2siLCAiLiIsIE5VTEwpOwotCXJldHVybiAtMTsKKwlzdGF0aWMgY29uc3QgY2hhciAqYXJndltdID0geyAicmVjZWl2ZS1wYWNrIiwgIi4iLCBOVUxMIH07CisJcmV0dXJuIHJ1bl9zZXJ2aWNlX2NvbW1hbmQoYXJndik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGFlbW9uX3NlcnZpY2UgZGFlbW9uX3NlcnZpY2VbXSA9IHsKQEAgLTQ1Myw3ICs0OTMsNyBAQAogCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKIAkJaGludHMuYWlfZmxhZ3MgPSBBSV9DQU5PTk5BTUU7CiAKLQkJZ2FpID0gZ2V0YWRkcmluZm8oaG9zdG5hbWUsIDAsICZoaW50cywgJmFpKTsKKwkJZ2FpID0gZ2V0YWRkcmluZm8oaG9zdG5hbWUsIE5VTEwsICZoaW50cywgJmFpKTsKIAkJaWYgKCFnYWkpIHsKIAkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luX2FkZHIgPSAodm9pZCAqKWFpLT5haV9hZGRyOwogCkBAIC04NjIsNyArOTAyLDcgQEAKIAkJCQkJY2FzZSBFQ09OTkFCT1JURUQ6CiAJCQkJCQljb250aW51ZTsKIAkJCQkJZGVmYXVsdDoKLQkJCQkJCWRpZSgiYWNjZXB0IHJldHVybmVkICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQkJCWRpZV9lcnJubygiYWNjZXB0IHJldHVybmVkIik7CiAJCQkJCX0KIAkJCQl9CiAJCQkJaGFuZGxlKGluY29taW5nLCAoc3RydWN0IHNvY2thZGRyICopJnNzLCBzc2xlbik7CkBAIC04NzgsNyArOTE4LDcgQEAKIAl3aGlsZSAoZmQgIT0gLTEgJiYgZmQgPCAyKQogCQlmZCA9IGR1cChmZCk7CiAJaWYgKGZkID09IC0xKQotCQlkaWUoIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkIik7CiAJaWYgKGZkID4gMikKIAkJY2xvc2UoZmQpOwogfQpAQCAtODg5LDEyICs5MjksMTIgQEAKIAkJY2FzZSAwOgogCQkJYnJlYWs7CiAJCWNhc2UgLTE6Ci0JCQlkaWUoImZvcmsgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImZvcmsgZmFpbGVkIik7CiAJCWRlZmF1bHQ6CiAJCQlleGl0KDApOwogCX0KIAlpZiAoc2V0c2lkKCkgPT0gLTEpCi0JCWRpZSgic2V0c2lkIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oInNldHNpZCBmYWlsZWQiKTsKIAljbG9zZSgwKTsKIAljbG9zZSgxKTsKIAljbG9zZSgyKTsKQEAgLTkwNSw5ICs5NDUsOSBAQAogewogCUZJTEUgKmYgPSBmb3BlbihwYXRoLCAidyIpOwogCWlmICghZikKLQkJZGllKCJjYW5ub3Qgb3BlbiBwaWQgZmlsZSAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuIHBpZCBmaWxlICclcyciLCBwYXRoKTsKIAlpZiAoZnByaW50ZihmLCAiJSJQUkl1TUFYIlxuIiwgKHVpbnRtYXhfdCkgZ2V0cGlkKCkpIDwgMCB8fCBmY2xvc2UoZikgIT0gMCkKLQkJZGllKCJmYWlsZWQgdG8gd3JpdGUgcGlkIGZpbGUgJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJmYWlsZWQgdG8gd3JpdGUgcGlkIGZpbGUgJyVzJyIsIHBhdGgpOwogfQogCiBzdGF0aWMgaW50IHNlcnZlKGNoYXIgKmxpc3Rlbl9hZGRyLCBpbnQgbGlzdGVuX3BvcnQsIHN0cnVjdCBwYXNzd2QgKnBhc3MsIGdpZF90IGdpZCkKQEAgLTExMDcsOCArMTE0Nyw3IEBACiAJCXNvY2tsZW5fdCBzbGVuID0gc2l6ZW9mKHNzKTsKIAogCQlpZiAoIWZyZW9wZW4oIi9kZXYvbnVsbCIsICJ3Iiwgc3RkZXJyKSkKLQkJCWRpZSgiZmFpbGVkIHRvIHJlZGlyZWN0IHN0ZGVyciB0byAvZGV2L251bGw6ICVzIiwKLQkJCSAgICBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gcmVkaXJlY3Qgc3RkZXJyIHRvIC9kZXYvbnVsbCIpOwogCiAJCWlmIChnZXRwZWVybmFtZSgwLCBwZWVyLCAmc2xlbikpCiAJCQlwZWVyID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RhdGUuYyBiL2RhdGUuYwppbmRleCA0MDlhMTdkLi5mMDExNjkyIDEwMDY0NAotLS0gYS9kYXRlLmMKKysrIGIvZGF0ZS5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAkJfQogCQkvKiBHaXZlIHllYXJzIGFuZCBtb250aHMgZm9yIDUgeWVhcnMgb3Igc28gKi8KIAkJaWYgKGRpZmYgPCAxODI1KSB7Ci0JCQl1bnNpZ25lZCBsb25nIHllYXJzID0gKGRpZmYgKyAxODMpIC8gMzY1OworCQkJdW5zaWduZWQgbG9uZyB5ZWFycyA9IGRpZmYgLyAzNjU7CiAJCQl1bnNpZ25lZCBsb25nIG1vbnRocyA9IChkaWZmICUgMzY1ICsgMTUpIC8gMzA7CiAJCQlpbnQgbjsKIAkJCW4gPSBzbnByaW50Zih0aW1lYnVmLCBzaXplb2YodGltZWJ1ZiksICIlbHUgeWVhciVzIiwKZGlmZiAtLWdpdCBhL2RlY29yYXRlLmMgYi9kZWNvcmF0ZS5jCmluZGV4IGU2ZmQ4YTcuLjJmOGE2M2UgMTAwNjQ0Ci0tLSBhL2RlY29yYXRlLmMKKysrIGIvZGVjb3JhdGUuYwpAQCAtMTgsNyArMTgsNyBAQAogewogCWludCBzaXplID0gbi0+c2l6ZTsKIAlzdHJ1Y3Qgb2JqZWN0X2RlY29yYXRpb24gKmhhc2ggPSBuLT5oYXNoOwotCWludCBqID0gaGFzaF9vYmooYmFzZSwgc2l6ZSk7CisJdW5zaWduZWQgaW50IGogPSBoYXNoX29iaihiYXNlLCBzaXplKTsKIAogCXdoaWxlIChoYXNoW2pdLmJhc2UpIHsKIAkJaWYgKGhhc2hbal0uYmFzZSA9PSBiYXNlKSB7CkBAIC03MCw3ICs3MCw3IEBACiAvKiBMb29rdXAgYSBkZWNvcmF0aW9uIHBvaW50ZXIgKi8KIHZvaWQgKmxvb2t1cF9kZWNvcmF0aW9uKHN0cnVjdCBkZWNvcmF0aW9uICpuLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCiB7Ci0JaW50IGo7CisJdW5zaWduZWQgaW50IGo7CiAKIAkvKiBub3RoaW5nIHRvIGxvb2t1cCAqLwogCWlmICghbi0+c2l6ZSkKZGlmZiAtLWdpdCBhL2RpZmYtbGliLmMgYi9kaWZmLWxpYi5jCmluZGV4IDBhYmE2Y2QuLmFkMmE0Y2QgMTAwNjQ0Ci0tLSBhL2RpZmYtbGliLmMKKysrIGIvZGlmZi1saWIuYwpAQCAtNDQ2LDYgKzQ0Niw4IEBACiAJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOwogCW9wdHMuaGVhZF9pZHggPSAxOwogCW9wdHMuaW5kZXhfb25seSA9IGNhY2hlZDsKKwlvcHRzLmRpZmZfaW5kZXhfY2FjaGVkID0gKGNhY2hlZCAmJgorCQkJCSAgIURJRkZfT1BUX1RTVCgmcmV2cy0+ZGlmZm9wdCwgRklORF9DT1BJRVNfSEFSREVSKSk7CiAJb3B0cy5tZXJnZSA9IDE7CiAJb3B0cy5mbiA9IG9uZXdheV9kaWZmOwogCW9wdHMudW5wYWNrX2RhdGEgPSByZXZzOwpAQCAtNTAyLDYgKzUwNCw3IEBACiAJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOwogCW9wdHMuaGVhZF9pZHggPSAxOwogCW9wdHMuaW5kZXhfb25seSA9IDE7CisJb3B0cy5kaWZmX2luZGV4X2NhY2hlZCA9ICFESUZGX09QVF9UU1Qob3B0LCBGSU5EX0NPUElFU19IQVJERVIpOwogCW9wdHMubWVyZ2UgPSAxOwogCW9wdHMuZm4gPSBvbmV3YXlfZGlmZjsKIAlvcHRzLnVucGFja19kYXRhID0gJnJldnM7CmRpZmYgLS1naXQgYS9kaWZmLmMgYi9kaWZmLmMKaW5kZXggZjBiNTgwYy4uY2QzNWUwYyAxMDA2NDQKLS0tIGEvZGlmZi5jCisrKyBiL2RpZmYuYwpAQCAtODM5LDEwICs4MzksOSBAQAogfQogCiBzdGF0aWMgdm9pZCBzaG93X25hbWUoRklMRSAqZmlsZSwKLQkJICAgICAgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAotCQkgICAgICBjb25zdCBjaGFyICpyZXNldCwgY29uc3QgY2hhciAqc2V0KQorCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCiB7Ci0JZnByaW50ZihmaWxlLCAiICVzJXMlLSpzJXMgfCIsIHNldCwgcHJlZml4LCBsZW4sIG5hbWUsIHJlc2V0KTsKKwlmcHJpbnRmKGZpbGUsICIgJXMlLSpzIHwiLCBwcmVmaXgsIGxlbiwgbmFtZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNob3dfZ3JhcGgoRklMRSAqZmlsZSwgY2hhciBjaCwgaW50IGNudCwgY29uc3QgY2hhciAqc2V0LCBjb25zdCBjaGFyICpyZXNldCkKQEAgLTk1Niw3ICs5NTUsNyBAQAogCQl9CiAKIAkJaWYgKGRhdGEtPmZpbGVzW2ldLT5pc19iaW5hcnkpIHsKLQkJCXNob3dfbmFtZShvcHRpb25zLT5maWxlLCBwcmVmaXgsIG5hbWUsIGxlbiwgcmVzZXQsIHNldCk7CisJCQlzaG93X25hbWUob3B0aW9ucy0+ZmlsZSwgcHJlZml4LCBuYW1lLCBsZW4pOwogCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiICBCaW4gIik7CiAJCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICIlcyVkJXMiLCBkZWxfYywgZGVsZXRlZCwgcmVzZXQpOwogCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiIC0+ICIpOwpAQCAtOTY2LDcgKzk2NSw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCQllbHNlIGlmIChkYXRhLT5maWxlc1tpXS0+aXNfdW5tZXJnZWQpIHsKLQkJCXNob3dfbmFtZShvcHRpb25zLT5maWxlLCBwcmVmaXgsIG5hbWUsIGxlbiwgcmVzZXQsIHNldCk7CisJCQlzaG93X25hbWUob3B0aW9ucy0+ZmlsZSwgcHJlZml4LCBuYW1lLCBsZW4pOwogCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiICBVbm1lcmdlZFxuIik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtOTg4LDcgKzk4Nyw3IEBACiAJCQlhZGQgPSBzY2FsZV9saW5lYXIoYWRkLCB3aWR0aCwgbWF4X2NoYW5nZSk7CiAJCQlkZWwgPSBzY2FsZV9saW5lYXIoZGVsLCB3aWR0aCwgbWF4X2NoYW5nZSk7CiAJCX0KLQkJc2hvd19uYW1lKG9wdGlvbnMtPmZpbGUsIHByZWZpeCwgbmFtZSwgbGVuLCByZXNldCwgc2V0KTsKKwkJc2hvd19uYW1lKG9wdGlvbnMtPmZpbGUsIHByZWZpeCwgbmFtZSwgbGVuKTsKIAkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiJTVkJXMiLCBhZGRlZCArIGRlbGV0ZWQsCiAJCQkJYWRkZWQgKyBkZWxldGVkID8gIiAiIDogIiIpOwogCQlzaG93X2dyYXBoKG9wdGlvbnMtPmZpbGUsICcrJywgYWRkLCBhZGRfYywgcmVzZXQpOwpAQCAtOTk2LDggKzk5NSw4IEBACiAJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIlxuIik7CiAJfQogCWZwcmludGYob3B0aW9ucy0+ZmlsZSwKLQkgICAgICAgIiVzICVkIGZpbGVzIGNoYW5nZWQsICVkIGluc2VydGlvbnMoKyksICVkIGRlbGV0aW9ucygtKSVzXG4iLAotCSAgICAgICBzZXQsIHRvdGFsX2ZpbGVzLCBhZGRzLCBkZWxzLCByZXNldCk7CisJICAgICAgICIgJWQgZmlsZXMgY2hhbmdlZCwgJWQgaW5zZXJ0aW9ucygrKSwgJWQgZGVsZXRpb25zKC0pXG4iLAorCSAgICAgICB0b3RhbF9maWxlcywgYWRkcywgZGVscyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNob3dfc2hvcnRzdGF0cyhzdHJ1Y3QgZGlmZnN0YXRfdCogZGF0YSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKQEAgLTE2MDQsNiArMTYwMyw3IEBACiAJCQlmcmVlKG1mMS5wdHIpOwogCQlpZiAodGV4dGNvbnZfdHdvKQogCQkJZnJlZShtZjIucHRyKTsKKwkJeGRpZmZfY2xlYXJfZmluZF9mdW5jKCZ4ZWNmZyk7CiAJfQogCiAgZnJlZV9hYl9hbmRfcmV0dXJuOgpAQCAtMTk2NSwyMyArMTk2NSwzMyBAQAogewogCWludCBmZDsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgdGVtcGxhdGUgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpwYXRoX2R1cCA9IHhzdHJkdXAocGF0aCk7CisJY29uc3QgY2hhciAqYmFzZSA9IGJhc2VuYW1lKHBhdGhfZHVwKTsKIAotCWZkID0gZ2l0X21rc3RlbXAodGVtcC0+dG1wX3BhdGgsIFBBVEhfTUFYLCAiLmRpZmZfWFhYWFhYIik7CisJLyogR2VuZXJhdGUgIlhYWFhYWF9iYXNlbmFtZS5leHQiICovCisJc3RyYnVmX2FkZHN0cigmdGVtcGxhdGUsICJYWFhYWFhfIik7CisJc3RyYnVmX2FkZHN0cigmdGVtcGxhdGUsIGJhc2UpOworCisJZmQgPSBnaXRfbWtzdGVtcHModGVtcC0+dG1wX3BhdGgsIFBBVEhfTUFYLCB0ZW1wbGF0ZS5idWYsCisJCQlzdHJsZW4oYmFzZSkgKyAxKTsKIAlpZiAoZmQgPCAwKQotCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgdGVtcC1maWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wLWZpbGUiKTsKIAlpZiAoY29udmVydF90b193b3JraW5nX3RyZWUocGF0aCwKIAkJCShjb25zdCBjaGFyICopYmxvYiwgKHNpemVfdClzaXplLCAmYnVmKSkgewogCQlibG9iID0gYnVmLmJ1ZjsKIAkJc2l6ZSA9IGJ1Zi5sZW47CiAJfQogCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBibG9iLCBzaXplKSAhPSBzaXplKQotCQlkaWUoInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gd3JpdGUgdGVtcC1maWxlIik7CiAJY2xvc2UoZmQpOwogCXRlbXAtPm5hbWUgPSB0ZW1wLT50bXBfcGF0aDsKIAlzdHJjcHkodGVtcC0+aGV4LCBzaGExX3RvX2hleChzaGExKSk7CiAJdGVtcC0+aGV4WzQwXSA9IDA7CiAJc3ByaW50Zih0ZW1wLT5tb2RlLCAiJTA2byIsIG1vZGUpOwogCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZ0ZW1wbGF0ZSk7CisJZnJlZShwYXRoX2R1cCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGlmZl90ZW1wZmlsZSAqcHJlcGFyZV90ZW1wX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwKQEAgLTIwMTIsMjEgKzIwMjIsMTggQEAKIAkJaWYgKGxzdGF0KG5hbWUsICZzdCkgPCAwKSB7CiAJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQogCQkJCWdvdG8gbm90X2FfdmFsaWRfZmlsZTsKLQkJCWRpZSgic3RhdCglcyk6ICVzIiwgbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygic3RhdCglcykiLCBuYW1lKTsKIAkJfQogCQlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgewotCQkJaW50IHJldDsKLQkJCWNoYXIgYnVmW1BBVEhfTUFYICsgMV07IC8qIG91Z2h0IHRvIGJlIFNZTUxJTktfTUFYICovCi0JCQlyZXQgPSByZWFkbGluayhuYW1lLCBidWYsIHNpemVvZihidWYpKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCWRpZSgicmVhZGxpbmsoJXMpIiwgbmFtZSk7Ci0JCQlpZiAocmV0ID09IHNpemVvZihidWYpKQotCQkJCWRpZSgic3ltbGluayB0b28gbG9uZzogJXMiLCBuYW1lKTsKLQkJCXByZXBfdGVtcF9ibG9iKG5hbWUsIHRlbXAsIGJ1ZiwgcmV0LAorCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQkJaWYgKHN0cmJ1Zl9yZWFkbGluaygmc2IsIG5hbWUsIHN0LnN0X3NpemUpIDwgMCkKKwkJCQlkaWVfZXJybm8oInJlYWRsaW5rKCVzKSIsIG5hbWUpOworCQkJcHJlcF90ZW1wX2Jsb2IobmFtZSwgdGVtcCwgc2IuYnVmLCBzYi5sZW4sCiAJCQkJICAgICAgIChvbmUtPnNoYTFfdmFsaWQgPwogCQkJCQlvbmUtPnNoYTEgOiBudWxsX3NoYTEpLAogCQkJCSAgICAgICAob25lLT5zaGExX3ZhbGlkID8KIAkJCQkJb25lLT5tb2RlIDogU19JRkxOSykpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKIAkJfQogCQllbHNlIHsKIAkJCS8qIHdlIGNhbiBib3Jyb3cgZnJvbSB0aGUgZmlsZSBpbiB0aGUgd29yayB0cmVlICovCkBAIC0yMjEzLDcgKzIyMjAsNyBAQAogCQkJCXJldHVybjsKIAkJCX0KIAkJCWlmIChsc3RhdChvbmUtPnBhdGgsICZzdCkgPCAwKQotCQkJCWRpZSgic3RhdCAlcyIsIG9uZS0+cGF0aCk7CisJCQkJZGllX2Vycm5vKCJzdGF0ICclcyciLCBvbmUtPnBhdGgpOwogCQkJaWYgKGluZGV4X3BhdGgob25lLT5zaGExLCBvbmUtPnBhdGgsICZzdCwgMCkpCiAJCQkJZGllKCJjYW5ub3QgaGFzaCAlcyIsIG9uZS0+cGF0aCk7CiAJCX0KZGlmZiAtLWdpdCBhL2Rpci5jIGIvZGlyLmMKaW5kZXggMGU2Yjc1Mi4uZDA5OTliYSAxMDA2NDQKLS0tIGEvZGlyLmMKKysrIGIvZGlyLmMKQEAgLTE0LDEyICsxNCwxMSBAQAogCWNvbnN0IGNoYXIgKnBhdGg7CiB9OwogCi1zdGF0aWMgaW50IHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAotCWNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorc3RhdGljIGludCByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwKIAlpbnQgY2hlY2tfb25seSwgY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KTsKLXN0YXRpYyBpbnQgZ2V0X2R0eXBlKHN0cnVjdCBkaXJlbnQgKmRlLCBjb25zdCBjaGFyICpwYXRoKTsKK3N0YXRpYyBpbnQgZ2V0X2R0eXBlKHN0cnVjdCBkaXJlbnQgKmRlLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuKTsKIAotaW50IGNvbW1vbl9wcmVmaXgoY29uc3QgY2hhciAqKnBhdGhzcGVjKQorc3RhdGljIGludCBjb21tb25fcHJlZml4KGNvbnN0IGNoYXIgKipwYXRoc3BlYykKIHsKIAljb25zdCBjaGFyICpwYXRoLCAqc2xhc2gsICpuZXh0OwogCWludCBwcmVmaXg7CkBAIC01Miw2ICs1MSwyNiBAQAogCXJldHVybiBwcmVmaXg7CiB9CiAKK2ludCBmaWxsX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwlpbnQgbGVuOworCisJLyoKKwkgKiBDYWxjdWxhdGUgY29tbW9uIHByZWZpeCBmb3IgdGhlIHBhdGhzcGVjLCBhbmQKKwkgKiB1c2UgdGhhdCB0byBvcHRpbWl6ZSB0aGUgZGlyZWN0b3J5IHdhbGsKKwkgKi8KKwlsZW4gPSBjb21tb25fcHJlZml4KHBhdGhzcGVjKTsKKwlwYXRoID0gIiI7CisKKwlpZiAobGVuKQorCQlwYXRoID0geG1lbWR1cHooKnBhdGhzcGVjLCBsZW4pOworCisJLyogUmVhZCB0aGUgZGlyZWN0b3J5IGFuZCBwcnVuZSBpdCAqLworCXJlYWRfZGlyZWN0b3J5KGRpciwgcGF0aCwgbGVuLCBwYXRoc3BlYyk7CisJcmV0dXJuIGxlbjsKK30KKwogLyoKICAqIERvZXMgJ21hdGNoJyBtYXRjaCB0aGUgZ2l2ZW4gbmFtZT8KICAqIEEgbWF0Y2ggaXMgZm91bmQgaWYKQEAgLTMwNyw3ICszMjYsNyBAQAogCiAJCQlpZiAoeC0+ZmxhZ3MgJiBFWENfRkxBR19NVVNUQkVESVIpIHsKIAkJCQlpZiAoKmR0eXBlID09IERUX1VOS05PV04pCi0JCQkJCSpkdHlwZSA9IGdldF9kdHlwZShOVUxMLCBwYXRobmFtZSk7CisJCQkJCSpkdHlwZSA9IGdldF9kdHlwZShOVUxMLCBwYXRobmFtZSwgcGF0aGxlbik7CiAJCQkJaWYgKCpkdHlwZSAhPSBEVF9ESVIpCiAJCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMzk2LDcgKzQxNSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGlyX2VudHJ5ICpkaXJfYWRkX2lnbm9yZWQoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBsZW4pCiB7Ci0JaWYgKGNhY2hlX25hbWVfcG9zKHBhdGhuYW1lLCBsZW4pID49IDApCisJaWYgKCFjYWNoZV9uYW1lX2lzX290aGVyKHBhdGhuYW1lLCBsZW4pKQogCQlyZXR1cm4gTlVMTDsKIAogCUFMTE9DX0dST1coZGlyLT5pZ25vcmVkLCBkaXItPmlnbm9yZWRfbnIrMSwgZGlyLT5pZ25vcmVkX2FsbG9jKTsKQEAgLTUwNSw3ICs1MjQsNyBAQAogCS8qIFRoaXMgaXMgdGhlICJzaG93X290aGVyX2RpcmVjdG9yaWVzIiBjYXNlICovCiAJaWYgKCEoZGlyLT5mbGFncyAmIERJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTKSkKIAkJcmV0dXJuIHNob3dfZGlyZWN0b3J5OwotCWlmICghcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKGRpciwgZGlybmFtZSwgZGlybmFtZSwgbGVuLCAxLCBzaW1wbGlmeSkpCisJaWYgKCFyZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBkaXJuYW1lLCBsZW4sIDEsIHNpbXBsaWZ5KSkKIAkJcmV0dXJuIGlnbm9yZV9kaXJlY3Rvcnk7CiAJcmV0dXJuIHNob3dfZGlyZWN0b3J5OwogfQpAQCAtNTQ3LDEzICs1NjYsNTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfZHR5cGUoc3RydWN0IGRpcmVudCAqZGUsIGNvbnN0IGNoYXIgKnBhdGgpCitzdGF0aWMgaW50IGdldF9pbmRleF9kdHlwZShjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuKQoreworCWludCBwb3M7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWNlID0gY2FjaGVfbmFtZV9leGlzdHMocGF0aCwgbGVuLCAwKTsKKwlpZiAoY2UpIHsKKwkJaWYgKCFjZV91cHRvZGF0ZShjZSkpCisJCQlyZXR1cm4gRFRfVU5LTk9XTjsKKwkJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCXJldHVybiBEVF9ESVI7CisJCS8qCisJCSAqIE5vYm9keSBhY3R1YWxseSBjYXJlcyBhYm91dCB0aGUKKwkJICogZGlmZmVyZW5jZSBiZXR3ZWVuIERUX0xOSyBhbmQgRFRfUkVHCisJCSAqLworCQlyZXR1cm4gRFRfUkVHOworCX0KKworCS8qIFRyeSB0byBsb29rIGl0IHVwIGFzIGEgZGlyZWN0b3J5ICovCisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbGVuKTsKKwlpZiAocG9zID49IDApCisJCXJldHVybiBEVF9VTktOT1dOOworCXBvcyA9IC1wb3MtMTsKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yKSB7CisJCWNlID0gYWN0aXZlX2NhY2hlW3BvcysrXTsKKwkJaWYgKHN0cm5jbXAoY2UtPm5hbWUsIHBhdGgsIGxlbikpCisJCQlicmVhazsKKwkJaWYgKGNlLT5uYW1lW2xlbl0gPiAnLycpCisJCQlicmVhazsKKwkJaWYgKGNlLT5uYW1lW2xlbl0gPCAnLycpCisJCQljb250aW51ZTsKKwkJaWYgKCFjZV91cHRvZGF0ZShjZSkpCisJCQlicmVhazsJLyogY29udGludWU/ICovCisJCXJldHVybiBEVF9ESVI7CisJfQorCXJldHVybiBEVF9VTktOT1dOOworfQorCitzdGF0aWMgaW50IGdldF9kdHlwZShzdHJ1Y3QgZGlyZW50ICpkZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbikKIHsKIAlpbnQgZHR5cGUgPSBkZSA/IERUWVBFKGRlKSA6IERUX1VOS05PV047CiAJc3RydWN0IHN0YXQgc3Q7CiAKIAlpZiAoZHR5cGUgIT0gRFRfVU5LTk9XTikKIAkJcmV0dXJuIGR0eXBlOworCWR0eXBlID0gZ2V0X2luZGV4X2R0eXBlKHBhdGgsIGxlbik7CisJaWYgKGR0eXBlICE9IERUX1VOS05PV04pCisJCXJldHVybiBkdHlwZTsKIAlpZiAobHN0YXQocGF0aCwgJnN0KSkKIAkJcmV0dXJuIGR0eXBlOwogCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQpAQCAtNTc0LDE1ICs2MzQsMTUgQEAKICAqIEFsc28sIHdlIGlnbm9yZSB0aGUgbmFtZSAiLmdpdCIgKGV2ZW4gaWYgaXQgaXMgbm90IGEgZGlyZWN0b3J5KS4KICAqIFRoYXQgbGlrZWx5IHdpbGwgbm90IGNoYW5nZS4KICAqLwotc3RhdGljIGludCByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sIGludCBjaGVja19vbmx5LCBjb25zdCBzdHJ1Y3QgcGF0aF9zaW1wbGlmeSAqc2ltcGxpZnkpCitzdGF0aWMgaW50IHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwgaW50IGNoZWNrX29ubHksIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSkKIHsKLQlESVIgKmZkaXIgPSBvcGVuZGlyKCpwYXRoID8gcGF0aCA6ICIuIik7CisJRElSICpmZGlyID0gb3BlbmRpcigqYmFzZSA/IGJhc2UgOiAiLiIpOwogCWludCBjb250ZW50cyA9IDA7CiAKIAlpZiAoZmRpcikgewogCQlzdHJ1Y3QgZGlyZW50ICpkZTsKLQkJY2hhciBmdWxsbmFtZVtQQVRIX01BWCArIDFdOwotCQltZW1jcHkoZnVsbG5hbWUsIGJhc2UsIGJhc2VsZW4pOworCQljaGFyIHBhdGhbUEFUSF9NQVggKyAxXTsKKwkJbWVtY3B5KHBhdGgsIGJhc2UsIGJhc2VsZW4pOwogCiAJCXdoaWxlICgoZGUgPSByZWFkZGlyKGZkaXIpKSAhPSBOVUxMKSB7CiAJCQlpbnQgbGVuLCBkdHlwZTsKQEAgLTU5MywxNyArNjUzLDE4IEBACiAJCQkJY29udGludWU7CiAJCQlsZW4gPSBzdHJsZW4oZGUtPmRfbmFtZSk7CiAJCQkvKiBJZ25vcmUgb3Zlcmx5IGxvbmcgcGF0aG5hbWVzISAqLwotCQkJaWYgKGxlbiArIGJhc2VsZW4gKyA4ID4gc2l6ZW9mKGZ1bGxuYW1lKSkKKwkJCWlmIChsZW4gKyBiYXNlbGVuICsgOCA+IHNpemVvZihwYXRoKSkKIAkJCQljb250aW51ZTsKLQkJCW1lbWNweShmdWxsbmFtZSArIGJhc2VsZW4sIGRlLT5kX25hbWUsIGxlbisxKTsKLQkJCWlmIChzaW1wbGlmeV9hd2F5KGZ1bGxuYW1lLCBiYXNlbGVuICsgbGVuLCBzaW1wbGlmeSkpCisJCQltZW1jcHkocGF0aCArIGJhc2VsZW4sIGRlLT5kX25hbWUsIGxlbisxKTsKKwkJCWxlbiA9IGJhc2VsZW4gKyBsZW47CisJCQlpZiAoc2ltcGxpZnlfYXdheShwYXRoLCBsZW4sIHNpbXBsaWZ5KSkKIAkJCQljb250aW51ZTsKIAogCQkJZHR5cGUgPSBEVFlQRShkZSk7Ci0JCQlleGNsdWRlID0gZXhjbHVkZWQoZGlyLCBmdWxsbmFtZSwgJmR0eXBlKTsKKwkJCWV4Y2x1ZGUgPSBleGNsdWRlZChkaXIsIHBhdGgsICZkdHlwZSk7CiAJCQlpZiAoZXhjbHVkZSAmJiAoZGlyLT5mbGFncyAmIERJUl9DT0xMRUNUX0lHTk9SRUQpCi0JCQkgICAgJiYgaW5fcGF0aHNwZWMoZnVsbG5hbWUsIGJhc2VsZW4gKyBsZW4sIHNpbXBsaWZ5KSkKLQkJCQlkaXJfYWRkX2lnbm9yZWQoZGlyLCBmdWxsbmFtZSwgYmFzZWxlbiArIGxlbik7CisJCQkgICAgJiYgaW5fcGF0aHNwZWMocGF0aCwgbGVuLCBzaW1wbGlmeSkpCisJCQkJZGlyX2FkZF9pZ25vcmVkKGRpciwgcGF0aCxsZW4pOwogCiAJCQkvKgogCQkJICogRXhjbHVkZWQ/IElmIHdlIGRvbid0IGV4cGxpY2l0bHkgd2FudCB0byBzaG93CkBAIC02MTMsNyArNjc0LDcgQEAKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKGR0eXBlID09IERUX1VOS05PV04pCi0JCQkJZHR5cGUgPSBnZXRfZHR5cGUoZGUsIGZ1bGxuYW1lKTsKKwkJCQlkdHlwZSA9IGdldF9kdHlwZShkZSwgcGF0aCwgbGVuKTsKIAogCQkJLyoKIAkJCSAqIERvIHdlIHdhbnQgdG8gc2VlIGp1c3QgdGhlIGlnbm9yZWQgZmlsZXM/CkBAIC02MzAsOSArNjkxLDkgQEAKIAkJCWRlZmF1bHQ6CiAJCQkJY29udGludWU7CiAJCQljYXNlIERUX0RJUjoKLQkJCQltZW1jcHkoZnVsbG5hbWUgKyBiYXNlbGVuICsgbGVuLCAiLyIsIDIpOworCQkJCW1lbWNweShwYXRoICsgbGVuLCAiLyIsIDIpOwogCQkJCWxlbisrOwotCQkJCXN3aXRjaCAodHJlYXRfZGlyZWN0b3J5KGRpciwgZnVsbG5hbWUsIGJhc2VsZW4gKyBsZW4sIHNpbXBsaWZ5KSkgeworCQkJCXN3aXRjaCAodHJlYXRfZGlyZWN0b3J5KGRpciwgcGF0aCwgbGVuLCBzaW1wbGlmeSkpIHsKIAkJCQljYXNlIHNob3dfZGlyZWN0b3J5OgogCQkJCQlpZiAoZXhjbHVkZSAhPSAhIShkaXItPmZsYWdzCiAJCQkJCQkJJiBESVJfU0hPV19JR05PUkVEKSkKQEAgLTY0MCw3ICs3MDEsNyBAQAogCQkJCQlicmVhazsKIAkJCQljYXNlIHJlY3Vyc2VfaW50b19kaXJlY3Rvcnk6CiAJCQkJCWNvbnRlbnRzICs9IHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShkaXIsCi0JCQkJCQlmdWxsbmFtZSwgZnVsbG5hbWUsIGJhc2VsZW4gKyBsZW4sIDAsIHNpbXBsaWZ5KTsKKwkJCQkJCXBhdGgsIGxlbiwgMCwgc2ltcGxpZnkpOwogCQkJCQljb250aW51ZTsKIAkJCQljYXNlIGlnbm9yZV9kaXJlY3Rvcnk6CiAJCQkJCWNvbnRpbnVlOwpAQCAtNjU0LDcgKzcxNSw3IEBACiAJCQlpZiAoY2hlY2tfb25seSkKIAkJCQlnb3RvIGV4aXRfZWFybHk7CiAJCQllbHNlCi0JCQkJZGlyX2FkZF9uYW1lKGRpciwgZnVsbG5hbWUsIGJhc2VsZW4gKyBsZW4pOworCQkJCWRpcl9hZGRfbmFtZShkaXIsIHBhdGgsIGxlbik7CiAJCX0KIGV4aXRfZWFybHk6CiAJCWNsb3NlZGlyKGZkaXIpOwpAQCAtNzE3LDE1ICs3NzgsMTUgQEAKIAlmcmVlKHNpbXBsaWZ5KTsKIH0KIAotaW50IHJlYWRfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpCitpbnQgcmVhZF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwgY29uc3QgY2hhciAqKnBhdGhzcGVjKQogewogCXN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeTsKIAotCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgocGF0aCwgc3RybGVuKHBhdGgpKSkKKwlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHBhdGgsIGxlbikpCiAJCXJldHVybiBkaXItPm5yOwogCiAJc2ltcGxpZnkgPSBjcmVhdGVfc2ltcGxpZnkocGF0aHNwZWMpOwotCXJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShkaXIsIHBhdGgsIGJhc2UsIGJhc2VsZW4sIDAsIHNpbXBsaWZ5KTsKKwlyZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBwYXRoLCBsZW4sIDAsIHNpbXBsaWZ5KTsKIAlmcmVlX3NpbXBsaWZ5KHNpbXBsaWZ5KTsKIAlxc29ydChkaXItPmVudHJpZXMsIGRpci0+bnIsIHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5ICopLCBjbXBfbmFtZSk7CiAJcXNvcnQoZGlyLT5pZ25vcmVkLCBkaXItPmlnbm9yZWRfbnIsIHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5ICopLCBjbXBfbmFtZSk7CkBAIC03NTksNyArODIwLDcgQEAKIAlpZiAoIWRpcikKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKCFnZXRjd2QoYnVmZmVyLCBzaXplKSkKLQkJZGllKCJjYW4ndCBmaW5kIHRoZSBjdXJyZW50IGRpcmVjdG9yeTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNhbid0IGZpbmQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5Iik7CiAKIAlpZiAoIWlzX2Fic29sdXRlX3BhdGgoZGlyKSkKIAkJZGlyID0gbWFrZV9hYnNvbHV0ZV9wYXRoKGRpcik7CkBAIC04MDAsMTIgKzg2MSwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCByZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KHN0cnVjdCBzdHJidWYgKnBhdGgsIGludCBvbmx5X2VtcHR5KQoraW50IHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoc3RydWN0IHN0cmJ1ZiAqcGF0aCwgaW50IGZsYWcpCiB7Ci0JRElSICpkaXIgPSBvcGVuZGlyKHBhdGgtPmJ1Zik7CisJRElSICpkaXI7CiAJc3RydWN0IGRpcmVudCAqZTsKIAlpbnQgcmV0ID0gMCwgb3JpZ2luYWxfbGVuID0gcGF0aC0+bGVuLCBsZW47CisJaW50IG9ubHlfZW1wdHkgPSAoZmxhZyAmIFJFTU9WRV9ESVJfRU1QVFlfT05MWSk7CisJdW5zaWduZWQgY2hhciBzdWJtb2R1bGVfaGVhZFsyMF07CiAKKwlpZiAoKGZsYWcgJiBSRU1PVkVfRElSX0tFRVBfTkVTVEVEX0dJVCkgJiYKKwkgICAgIXJlc29sdmVfZ2l0bGlua19yZWYocGF0aC0+YnVmLCAiSEVBRCIsIHN1Ym1vZHVsZV9oZWFkKSkKKwkJLyogRG8gbm90IGRlc2NlbmQgYW5kIG51a2UgYSBuZXN0ZWQgZ2l0IHdvcmsgdHJlZS4gKi8KKwkJcmV0dXJuIDA7CisKKwlkaXIgPSBvcGVuZGlyKHBhdGgtPmJ1Zik7CiAJaWYgKCFkaXIpCiAJCXJldHVybiAtMTsKIAlpZiAocGF0aC0+YnVmW29yaWdpbmFsX2xlbiAtIDFdICE9ICcvJykKZGlmZiAtLWdpdCBhL2Rpci5oIGIvZGlyLmgKaW5kZXggNTQxMjg2YS4uMzIwYjZhMiAxMDA2NDQKLS0tIGEvZGlyLmgKKysrIGIvZGlyLmgKQEAgLTYxLDE0ICs2MSwxMyBAQAogCWNoYXIgYmFzZWJ1ZltQQVRIX01BWF07CiB9OwogCi1leHRlcm4gaW50IGNvbW1vbl9wcmVmaXgoY29uc3QgY2hhciAqKnBhdGhzcGVjKTsKLQogI2RlZmluZSBNQVRDSEVEX1JFQ1VSU0lWRUxZIDEKICNkZWZpbmUgTUFUQ0hFRF9GTk1BVENIIDIKICNkZWZpbmUgTUFUQ0hFRF9FWEFDVExZIDMKIGV4dGVybiBpbnQgbWF0Y2hfcGF0aHNwZWMoY29uc3QgY2hhciAqKnBhdGhzcGVjLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IHByZWZpeCwgY2hhciAqc2Vlbik7CiAKLWV4dGVybiBpbnQgcmVhZF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKiwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sIGNvbnN0IGNoYXIgKipwYXRoc3BlYyk7CitleHRlcm4gaW50IGZpbGxfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKipwYXRoc3BlYyk7CitleHRlcm4gaW50IHJlYWRfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICosIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIGNvbnN0IGNoYXIgKipwYXRoc3BlYyk7CiAKIGV4dGVybiBpbnQgZXhjbHVkZWQoc3RydWN0IGRpcl9zdHJ1Y3QgKiwgY29uc3QgY2hhciAqLCBpbnQgKik7CiBleHRlcm4gdm9pZCBhZGRfZXhjbHVkZXNfZnJvbV9maWxlKHN0cnVjdCBkaXJfc3RydWN0ICosIGNvbnN0IGNoYXIgKmZuYW1lKTsKQEAgLTg5LDcgKzg4LDEwIEBACiBleHRlcm4gaW50IGlzX2VtcHR5X2Rpcihjb25zdCBjaGFyICpkaXIpOwogCiBleHRlcm4gdm9pZCBzZXR1cF9zdGFuZGFyZF9leGNsdWRlcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKTsKLWV4dGVybiBpbnQgcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBpbnQgb25seV9lbXB0eSk7CisKKyNkZWZpbmUgUkVNT1ZFX0RJUl9FTVBUWV9PTkxZIDAxCisjZGVmaW5lIFJFTU9WRV9ESVJfS0VFUF9ORVNURURfR0lUIDAyCitleHRlcm4gaW50IHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoc3RydWN0IHN0cmJ1ZiAqcGF0aCwgaW50IGZsYWcpOwogCiAvKiB0cmllcyB0byByZW1vdmUgdGhlIHBhdGggd2l0aCBlbXB0eSBkaXJlY3RvcmllcyBhbG9uZyBpdCwgaWdub3JlcyBFTk9FTlQgKi8KIGV4dGVybiBpbnQgcmVtb3ZlX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CmRpZmYgLS1naXQgYS9lbnRyeS5jIGIvZW50cnkuYwppbmRleCBjYzg0MWVkLi4wNmQyNGYxIDEwMDY0NAotLS0gYS9lbnRyeS5jCisrKyBiL2VudHJ5LmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkJCWlmIChlcnJubyA9PSBFRVhJU1QgJiYgc3RhdGUtPmZvcmNlICYmCiAJCQkgICAgIXVubGlua19vcl93YXJuKGJ1ZikgJiYgIW1rZGlyKGJ1ZiwgMDc3NykpCiAJCQkJY29udGludWU7Ci0JCQlkaWUoImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGF0ICVzIiwgYnVmKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgYXQgJyVzJyIsIGJ1Zik7CiAJCX0KIAl9CiAJZnJlZShidWYpOwpAQCAtNTEsNyArNTEsNyBAQAogCWNoYXIgKm5hbWU7CiAKIAlpZiAoIWRpcikKLQkJZGllKCJjYW5ub3Qgb3BlbmRpciAlcyAoJXMpIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbmRpciAnJXMnIiwgcGF0aCk7CiAJc3RyY3B5KHBhdGhidWYsIHBhdGgpOwogCW5hbWUgPSBwYXRoYnVmICsgc3RybGVuKHBhdGgpOwogCSpuYW1lKysgPSAnLyc7CkBAIC02MSwxNSArNjEsMTUgQEAKIAkJCWNvbnRpbnVlOwogCQlzdHJjcHkobmFtZSwgZGUtPmRfbmFtZSk7CiAJCWlmIChsc3RhdChwYXRoYnVmLCAmc3QpKQotCQkJZGllKCJjYW5ub3QgbHN0YXQgJXMgKCVzKSIsIHBhdGhidWYsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImNhbm5vdCBsc3RhdCAnJXMnIiwgcGF0aGJ1Zik7CiAJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKQogCQkJcmVtb3ZlX3N1YnRyZWUocGF0aGJ1Zik7CiAJCWVsc2UgaWYgKHVubGluayhwYXRoYnVmKSkKLQkJCWRpZSgiY2Fubm90IHVubGluayAlcyAoJXMpIiwgcGF0aGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IHVubGluayAnJXMnIiwgcGF0aGJ1Zik7CiAJfQogCWNsb3NlZGlyKGRpcik7CiAJaWYgKHJtZGlyKHBhdGgpKQotCQlkaWUoImNhbm5vdCBybWRpciAlcyAoJXMpIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjYW5ub3Qgcm1kaXIgJyVzJyIsIHBhdGgpOwogfQogCiBzdGF0aWMgaW50IGNyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBtb2RlKQpAQCAtMTc1LDYgKzE3NSwyMyBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVGhpcyBpcyBsaWtlICdsc3RhdCgpJywgZXhjZXB0IGl0IHJlZnVzZXMgdG8gZm9sbG93IHN5bWxpbmtzCisgKiBpbiB0aGUgcGF0aCwgYWZ0ZXIgc2tpcHBpbmcgInNraXBsZW4iLgorICovCitpbnQgY2hlY2tfcGF0aChjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBza2lwbGVuKQoreworCWNvbnN0IGNoYXIgKnNsYXNoID0gcGF0aCArIGxlbjsKKworCXdoaWxlIChwYXRoIDwgc2xhc2ggJiYgKnNsYXNoICE9ICcvJykKKwkJc2xhc2gtLTsKKwlpZiAoIWhhc19kaXJzX29ubHlfcGF0aChwYXRoLCBzbGFzaCAtIHBhdGgsIHNraXBsZW4pKSB7CisJCWVycm5vID0gRU5PRU5UOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBsc3RhdChwYXRoLCBzdCk7Cit9CisKIGludCBjaGVja291dF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBjaGFyICp0b3BhdGgpCiB7CiAJc3RhdGljIGNoYXIgcGF0aFtQQVRIX01BWCArIDFdOwpAQCAtMTg4LDcgKzIwNSw3IEBACiAJc3RyY3B5KHBhdGggKyBsZW4sIGNlLT5uYW1lKTsKIAlsZW4gKz0gY2VfbmFtZWxlbihjZSk7CiAKLQlpZiAoIWxzdGF0KHBhdGgsICZzdCkpIHsKKwlpZiAoIWNoZWNrX3BhdGgocGF0aCwgbGVuLCAmc3QsIHN0YXRlLT5iYXNlX2Rpcl9sZW4pKSB7CiAJCXVuc2lnbmVkIGNoYW5nZWQgPSBjZV9tYXRjaF9zdGF0KGNlLCAmc3QsIENFX01BVENIX0lHTk9SRV9WQUxJRCk7CiAJCWlmICghY2hhbmdlZCkKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZW52aXJvbm1lbnQuYyBiL2Vudmlyb25tZW50LmMKaW5kZXggODAxYTAwNS4uOGY1ZWFhNyAxMDA2NDQKLS0tIGEvZW52aXJvbm1lbnQuYworKysgYi9lbnZpcm9ubWVudC5jCkBAIC00MiwxMSArNDIsMTIgQEAKIHVuc2lnbmVkIHdoaXRlc3BhY2VfcnVsZV9jZmcgPSBXU19ERUZBVUxUX1JVTEU7CiBlbnVtIGJyYW5jaF90cmFjayBnaXRfYnJhbmNoX3RyYWNrID0gQlJBTkNIX1RSQUNLX1JFTU9URTsKIGVudW0gcmViYXNlX3NldHVwX3R5cGUgYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfTkVWRVI7Ci1lbnVtIHB1c2hfZGVmYXVsdF90eXBlIHB1c2hfZGVmYXVsdCA9IFBVU0hfREVGQVVMVF9VTlNQRUNJRklFRDsKK2VudW0gcHVzaF9kZWZhdWx0X3R5cGUgcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX01BVENISU5HOwogI2lmbmRlZiBPQkpFQ1RfQ1JFQVRJT05fTU9ERQogI2RlZmluZSBPQkpFQ1RfQ1JFQVRJT05fTU9ERSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19IQVJETElOS1MKICNlbmRpZgogZW51bSBvYmplY3RfY3JlYXRpb25fbW9kZSBvYmplY3RfY3JlYXRpb25fbW9kZSA9IE9CSkVDVF9DUkVBVElPTl9NT0RFOworaW50IGdyYWZ0c19yZXBsYWNlX3BhcmVudHMgPSAxOwogCiAvKiBQYXJhbGxlbCBpbmRleCBzdGF0IGRhdGEgcHJlbG9hZD8gKi8KIGludCBjb3JlX3ByZWxvYWRfaW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvZmFzdC1pbXBvcnQuYyBiL2Zhc3QtaW1wb3J0LmMKaW5kZXggYTJhMjQ1OC4uN2VmOTg2NSAxMDA2NDQKLS0tIGEvZmFzdC1pbXBvcnQuYworKysgYi9mYXN0LWltcG9ydC5jCkBAIC05MDUsMTAgKzkwNSwxMCBAQAogCiAJa2VlcF9mZCA9IG9kYl9wYWNrX2tlZXAobmFtZSwgc2l6ZW9mKG5hbWUpLCBwYWNrX2RhdGEtPnNoYTEpOwogCWlmIChrZWVwX2ZkIDwgMCkKLQkJZGllKCJjYW5ub3QgY3JlYXRlIGtlZXAgZmlsZSIpOworCQlkaWVfZXJybm8oImNhbm5vdCBjcmVhdGUga2VlcCBmaWxlIik7CiAJd3JpdGVfb3JfZGllKGtlZXBfZmQsIGtlZXBfbXNnLCBzdHJsZW4oa2VlcF9tc2cpKTsKIAlpZiAoY2xvc2Uoa2VlcF9mZCkpCi0JCWRpZSgiZmFpbGVkIHRvIHdyaXRlIGtlZXAgZmlsZSIpOworCQlkaWVfZXJybm8oImZhaWxlZCB0byB3cml0ZSBrZWVwIGZpbGUiKTsKIAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzL3BhY2svcGFjay0lcy5wYWNrIiwKIAkJIGdldF9vYmplY3RfZGlyZWN0b3J5KCksIHNoYTFfdG9faGV4KHBhY2tfZGF0YS0+c2hhMSkpOwpAQCAtMjM0Miw3ICsyMzQyLDcgQEAKIAljaGFyIGxpbmVbNTEyXTsKIAlGSUxFICpmID0gZm9wZW4oaW5wdXRfZmlsZSwgInIiKTsKIAlpZiAoIWYpCi0JCWRpZSgiY2Fubm90IHJlYWQgJXM6ICVzIiwgaW5wdXRfZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjYW5ub3QgcmVhZCAnJXMnIiwgaW5wdXRfZmlsZSk7CiAJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKIAkJdWludG1heF90IG1hcms7CiAJCWNoYXIgKmVuZDsKQEAgLTI0NDgsNyArMjQ0OCw3IEBACiAJCQkJZmNsb3NlKHBhY2tfZWRnZXMpOwogCQkJcGFja19lZGdlcyA9IGZvcGVuKGEgKyAyMCwgImEiKTsKIAkJCWlmICghcGFja19lZGdlcykKLQkJCQlkaWUoIkNhbm5vdCBvcGVuICVzOiAlcyIsIGEgKyAyMCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oIkNhbm5vdCBvcGVuICclcyciLCBhICsgMjApOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tZm9yY2UiKSkKIAkJCWZvcmNlX3VwZGF0ZSA9IDE7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tcXVpZXQiKSkKZGlmZiAtLWdpdCBhL2ZzY2suYyBiL2ZzY2suYwppbmRleCA1MTFiODJjLi44OTI3OGMxIDEwMDY0NAotLS0gYS9mc2NrLmMKKysrIGIvZnNjay5jCkBAIC0yMjksNyArMjI5LDcgQEAKIAlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdDsKIAlpbnQgcGFyZW50cyA9IDA7CiAKLQlpZiAoIWNvbW1pdC0+ZGF0ZSkKKwlpZiAoY29tbWl0LT5kYXRlID09IFVMT05HX01BWCkKIAkJcmV0dXJuIGVycm9yX2Z1bmMoJmNvbW1pdC0+b2JqZWN0LCBGU0NLX0VSUk9SLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUiKTsKIAogCWlmIChtZW1jbXAoYnVmZmVyLCAidHJlZSAiLCA1KSkKZGlmZiAtLWdpdCBhL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwgYi9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCmluZGV4IGRmOWYyMzEuLjA2ZjcwNjAgMTAwNzU1Ci0tLSBhL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKKysrIGIvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybApAQCAtODQxLDYgKzg0MSwxMCBAQAogCW15ICgkbGFzdF9vX2N0eCwgJGxhc3Rfd2FzX2RpcnR5KTsKIAogCWZvciAoZ3JlcCB7ICRfLT57VVNFfSB9IEBpbikgeworCQlpZiAoJF8tPntUWVBFfSBuZSAnaHVuaycpIHsKKwkJCXB1c2ggQG91dCwgJF87CisJCQluZXh0OworCQl9CiAJCW15ICR0ZXh0ID0gJF8tPntURVhUfTsKIAkJbXkgKCRvX29mcykgPSBwYXJzZV9odW5rX2hlYWRlcigkdGV4dC0+WzBdKTsKIAkJaWYgKGRlZmluZWQgJGxhc3Rfb19jdHggJiYKZGlmZiAtLWdpdCBhL2dpdC1hbS5zaCBiL2dpdC1hbS5zaAppbmRleCA2ZDE4NDhiLi5mNzE5ZjZlIDEwMDc1NQotLS0gYS9naXQtYW0uc2gKKysrIGIvZ2l0LWFtLnNoCkBAIC0xMSw2ICsxMSw3IEBACiBpLGludGVyYWN0aXZlICAgcnVuIGludGVyYWN0aXZlbHkKIGIsYmluYXJ5KiAgICAgICAoaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3ApCiAzLDN3YXkgICAgICAgICAgYWxsb3cgZmFsbCBiYWNrIG9uIDN3YXkgbWVyZ2luZyBpZiBuZWVkZWQKK3EscXVpZXQgICAgICAgICBiZSBxdWlldAogcyxzaWdub2ZmICAgICAgIGFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UKIHUsdXRmOCAgICAgICAgICByZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KQogayxrZWVwICAgICAgICAgIHBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8KQEAgLTE4LDYgKzE5LDcgQEAKIGRpcmVjdG9yeT0gICAgICBwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5CiBDPSAgICAgICAgICAgICAgcGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseQogcD0gICAgICAgICAgICAgIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKK3BhdGNoLWZvcm1hdD0gICBmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4KIHJlamVjdCAgICAgICAgICBwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5CiByZXNvbHZlbXNnPSAgICAgb3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzCiByLHJlc29sdmVkICAgICAgdG8gYmUgdXNlZCBhZnRlciBhIHBhdGNoIGZhaWx1cmUKQEAgLTQ0LDExICs0Niw3IEBACiBmaQogCiBzcSAoKSB7Ci0JZm9yIHNxYXJnCi0JZG8KLQkJcHJpbnRmICIlcyIgIiRzcWFyZyIgfAotCQlzZWQgLWUgJ3MvJ1wnJy8nXCcnXFwnXCcnJ1wnJy9nJyAtZSAncy8uKi8gJ1wnJyYnXCcnLycKLQlkb25lCisJZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkQCIKIH0KIAogc3RvcF9oZXJlICgpIHsKQEAgLTEwMyw3ICsxMDEsNyBAQAogICAgIGdpdCB3cml0ZS10cmVlID4iJGRvdGVzdC9wYXRjaC1tZXJnZS1iYXNlKyIgfHwKICAgICBjYW5ub3RfZmFsbGJhY2sgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCiAKLSAgICBlY2hvIFVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4KKyAgICBzYXkgVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLgogICAgIGlmIEdJVF9JTkRFWF9GSUxFPSIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1pbmRleCIgXAogCWdpdCBhcHBseSAtLWNhY2hlZCA8IiRkb3Rlc3QvcGF0Y2giCiAgICAgdGhlbgpAQCAtMTE5LDcgKzExNyw3IEBACiAgICAgb3JpZ190cmVlPSQoY2F0ICIkZG90ZXN0L3BhdGNoLW1lcmdlLWJhc2UiKSAmJgogICAgIHJtIC1mciAiJGRvdGVzdCIvcGF0Y2gtbWVyZ2UtKiB8fCBleGl0IDEKIAotICAgIGVjaG8gRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uCisgICAgc2F5IEZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLgogCiAgICAgIyBUaGlzIGlzIG5vdCBzbyB3cm9uZy4gIERlcGVuZGluZyBvbiB3aGljaCBiYXNlIHdlIHBpY2tlZCwKICAgICAjIG9yaWdfdHJlZSBtYXkgYmUgd2lsZGx5IGRpZmZlcmVudCBmcm9tIG91cnMsIGJ1dCBoaXNfdHJlZQpAQCAtMTI5LDYgKzEyNywxMCBAQAogCiAgICAgZXZhbCBHSVRIRUFEXyRoaXNfdHJlZT0nIiRGSVJTVExJTkUiJwogICAgIGV4cG9ydCBHSVRIRUFEXyRoaXNfdHJlZQorICAgIGlmIHRlc3QgLW4gIiRHSVRfUVVJRVQiCisgICAgdGhlbgorCSAgICBleHBvcnQgR0lUX01FUkdFX1ZFUkJPU0lUWT0wCisgICAgZmkKICAgICBnaXQtbWVyZ2UtcmVjdXJzaXZlICRvcmlnX3RyZWUgLS0gSEVBRCAkaGlzX3RyZWUgfHwgewogCSAgICBnaXQgcmVyZXJlCiAJICAgIGVjaG8gRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLgpAQCAtMTM3LDYgKzEzOSwxNDQgQEAKICAgICB1bnNldCBHSVRIRUFEXyRoaXNfdHJlZQogfQogCitjbGVhbl9hYm9ydCAoKSB7CisJdGVzdCAkIyA9IDAgfHwgZWNobyA+JjIgIiRAIgorCXJtIC1mciAiJGRvdGVzdCIKKwlleGl0IDEKK30KKworcGF0Y2hfZm9ybWF0PQorCitjaGVja19wYXRjaF9mb3JtYXQgKCkgeworCSMgZWFybHkgcmV0dXJuIGlmIHBhdGNoX2Zvcm1hdCB3YXMgc2V0IGZyb20gdGhlIGNvbW1hbmQgbGluZQorCWlmIHRlc3QgLW4gIiRwYXRjaF9mb3JtYXQiCisJdGhlbgorCQlyZXR1cm4gMAorCWZpCisKKwkjIHdlIGRlZmF1bHQgdG8gbWJveCBmb3JtYXQgaWYgaW5wdXQgaXMgZnJvbSBzdGRpbiBhbmQgZm9yCisJIyBkaXJlY3RvcmllcworCWlmIHRlc3QgJCMgPSAwIHx8IHRlc3QgIngkMSIgPSAieC0iIHx8IHRlc3QgLWQgIiQxIgorCXRoZW4KKwkJcGF0Y2hfZm9ybWF0PW1ib3gKKwkJcmV0dXJuIDAKKwlmaQorCisJIyBvdGhlcndpc2UsIGNoZWNrIHRoZSBmaXJzdCBmZXcgbGluZXMgb2YgdGhlIGZpcnN0IHBhdGNoIHRvIHRyeQorCSMgdG8gZGV0ZWN0IGl0cyBmb3JtYXQKKwl7CisJCXJlYWQgbDEKKwkJcmVhZCBsMgorCQlyZWFkIGwzCisJCWNhc2UgIiRsMSIgaW4KKwkJIkZyb20gIiogfCAiRnJvbTogIiopCisJCQlwYXRjaF9mb3JtYXQ9bWJveAorCQkJOzsKKwkJJyMgVGhpcyBzZXJpZXMgYXBwbGllcyBvbiBHSVQgY29tbWl0JyopCisJCQlwYXRjaF9mb3JtYXQ9c3RnaXQtc2VyaWVzCisJCQk7OworCQkiIyBIRyBjaGFuZ2VzZXQgcGF0Y2giKQorCQkJcGF0Y2hfZm9ybWF0PWhnCisJCQk7OworCQkqKQorCQkJIyBpZiB0aGUgc2Vjb25kIGxpbmUgaXMgZW1wdHkgYW5kIHRoZSB0aGlyZCBpcworCQkJIyBhIEZyb20sIEF1dGhvciBvciBEYXRlIGVudHJ5LCB0aGlzIGlzIHZlcnkKKwkJCSMgbGlrZWx5IGFuIFN0R0lUIHBhdGNoCisJCQljYXNlICIkbDIsJGwzIiBpbgorCQkJLCJGcm9tOiAiKiB8ICwiQXV0aG9yOiAiKiB8ICwiRGF0ZTogIiopCisJCQkJcGF0Y2hfZm9ybWF0PXN0Z2l0CisJCQkJOzsKKwkJCSopCisJCQkJOzsKKwkJCWVzYWMKKwkJCTs7CisJCWVzYWMKKwkJaWYgdGVzdCAteiAiJHBhdGNoX2Zvcm1hdCIgJiYKKwkJCXRlc3QgLW4gIiRsMSIgJiYKKwkJCXRlc3QgLW4gIiRsMiIgJiYKKwkJCXRlc3QgLW4gIiRsMyIKKwkJdGhlbgorCQkJIyBUaGlzIGJlZ2lucyB3aXRoIHRocmVlIG5vbi1lbXB0eSBsaW5lcy4gIElzIHRoaXMgYQorCQkJIyBwaWVjZSBvZiBlLW1haWwgYS1sYSBSRkMyODIyPyAgR3JhYiBhbGwgdGhlIGhlYWRlcnMsCisJCQkjIGRpc2NhcmRpbmcgdGhlIGluZGVudGVkIHJlbWFpbmRlciBvZiBmb2xkZWQgbGluZXMsCisJCQkjIGFuZCBzZWUgaWYgaXQgbG9va3MgbGlrZSB0aGF0IHRoZXkgYWxsIGJlZ2luIHdpdGggdGhlCisJCQkjIGhlYWRlciBmaWVsZCBuYW1lcy4uLgorCQkJc2VkIC1uIC1lICcvXiQvcScgLWUgJy9eWyAJXS9kJyAtZSBwICIkMSIgfAorCQkJZWdyZXAgLXYgJ15bQS1aYS16XSsoLVtBLVphLXpdKykqOicgPi9kZXYvbnVsbCB8fAorCQkJcGF0Y2hfZm9ybWF0PW1ib3gKKwkJZmkKKwl9IDwgIiQxIiB8fCBjbGVhbl9hYm9ydAorfQorCitzcGxpdF9wYXRjaGVzICgpIHsKKwljYXNlICIkcGF0Y2hfZm9ybWF0IiBpbgorCW1ib3gpCisJCWdpdCBtYWlsc3BsaXQgLWQiJHByZWMiIC1vIiRkb3Rlc3QiIC1iIC0tICIkQCIgPiAiJGRvdGVzdC9sYXN0IiB8fAorCQljbGVhbl9hYm9ydAorCQk7OworCXN0Z2l0LXNlcmllcykKKwkJaWYgdGVzdCAkIyAtbmUgMQorCQl0aGVuCisJCQljbGVhbl9hYm9ydCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCisJCWZpCisJCXNlcmllc19kaXI9YGRpcm5hbWUgIiQxImAKKwkJc2VyaWVzX2ZpbGU9IiQxIgorCQlzaGlmdAorCQl7CisJCQlzZXQgeAorCQkJd2hpbGUgcmVhZCBmaWxlbmFtZQorCQkJZG8KKwkJCQlzZXQgIiRAIiAiJHNlcmllc19kaXIvJGZpbGVuYW1lIgorCQkJZG9uZQorCQkJIyByZW1vdmUgdGhlIHNhZmV0eSB4CisJCQlzaGlmdAorCQkJIyByZW1vdmUgdGhlIGFyZyBjb21pbmcgZnJvbSB0aGUgZmlyc3QtbGluZSBjb21tZW50CisJCQlzaGlmdAorCQl9IDwgIiRzZXJpZXNfZmlsZSIgfHwgY2xlYW5fYWJvcnQKKwkJIyBzZXQgdGhlIHBhdGNoIGZvcm1hdCBhcHByb3ByaWF0ZWx5CisJCXBhdGNoX2Zvcm1hdD1zdGdpdAorCQkjIG5vdyBoYW5kbGUgdGhlIGFjdHVhbCBTdEdJVCBwYXRjaGVzCisJCXNwbGl0X3BhdGNoZXMgIiRAIgorCQk7OworCXN0Z2l0KQorCQl0aGlzPTAKKwkJZm9yIHN0Z2l0IGluICIkQCIKKwkJZG8KKwkJCXRoaXM9YGV4cHIgIiR0aGlzIiArIDFgCisJCQltc2dudW09YHByaW50ZiAiJTAke3ByZWN9ZCIgJHRoaXNgCisJCQkjIFBlcmwgdmVyc2lvbiBvZiBTdEdJVCBwYXJzZV9wYXRjaC4gVGhlIGZpcnN0IG5vbmVtcHR5bGluZQorCQkJIyBub3Qgc3RhcnRpbmcgd2l0aCBBdXRob3IsIEZyb20gb3IgRGF0ZSBpcyB0aGUKKwkJCSMgc3ViamVjdCwgYW5kIHRoZSBib2R5IHN0YXJ0cyB3aXRoIHRoZSBuZXh0IG5vbmVtcHR5CisJCQkjIGxpbmUgbm90IHN0YXJ0aW5nIHdpdGggQXV0aG9yLCBGcm9tIG9yIERhdGUKKwkJCXBlcmwgLW5lICdCRUdJTiB7ICRzdWJqZWN0ID0gMCB9CisJCQkJaWYgKCRzdWJqZWN0ID4gMSkgeyBwcmludCA7IH0KKwkJCQllbHNpZiAoL15ccyskLykgeyBuZXh0IDsgfQorCQkJCWVsc2lmICgvXkF1dGhvcjovKSB7IHByaW50IHMvQXV0aG9yL0Zyb20vIDsgfQorCQkJCWVsc2lmICgvXihGcm9tfERhdGUpLykgeyBwcmludCA7IH0KKwkJCQllbHNpZiAoJHN1YmplY3QpIHsKKwkJCQkJJHN1YmplY3QgPSAyIDsKKwkJCQkJcHJpbnQgIlxuIiA7CisJCQkJCXByaW50IDsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludCAiU3ViamVjdDogIiwgJF8gOworCQkJCQkkc3ViamVjdCA9IDE7CisJCQkJfQorCQkJJyA8ICIkc3RnaXQiID4gIiRkb3Rlc3QvJG1zZ251bSIgfHwgY2xlYW5fYWJvcnQKKwkJZG9uZQorCQllY2hvICIkdGhpcyIgPiAiJGRvdGVzdC9sYXN0IgorCQl0aGlzPQorCQltc2dudW09CisJCTs7CisJKikKKwkJaWYgdGVzdCAtbiAiJHBhcnNlX3BhdGNoIiA7IHRoZW4KKwkJCWNsZWFuX2Fib3J0ICJQYXRjaCBmb3JtYXQgJHBhdGNoX2Zvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIKKwkJZWxzZQorCQkJY2xlYW5fYWJvcnQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKKwkJZmkKKwkJOzsKKwllc2FjCit9CisKIHByZWM9NAogZG90ZXN0PSIkR0lUX0RJUi9yZWJhc2UtYXBwbHkiCiBzaWduPSB1dGY4PXQga2VlcD0gc2tpcD0gaW50ZXJhY3RpdmU9IHJlc29sdmVkPSByZWJhc2luZz0gYWJvcnQ9CkBAIC0xNzksMTIgKzMxOSwxNiBAQAogCQlnaXRfYXBwbHlfb3B0PSIkZ2l0X2FwcGx5X29wdCAkKHNxICIkMT0kMiIpIjsgc2hpZnQgOzsKIAktQ3wtcCkKIAkJZ2l0X2FwcGx5X29wdD0iJGdpdF9hcHBseV9vcHQgJChzcSAiJDEkMiIpIjsgc2hpZnQgOzsKKwktLXBhdGNoLWZvcm1hdCkKKwkJc2hpZnQgOyBwYXRjaF9mb3JtYXQ9IiQxIiA7OwogCS0tcmVqZWN0KQogCQlnaXRfYXBwbHlfb3B0PSIkZ2l0X2FwcGx5X29wdCAkMSIgOzsKIAktLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlKQogCQljb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZT10IDs7CiAJLS1pZ25vcmUtZGF0ZSkKIAkJaWdub3JlX2RhdGU9dCA7OworCS1xfC0tcXVpZXQpCisJCUdJVF9RVUlFVD10IDs7CiAJLS0pCiAJCXNoaWZ0OyBicmVhayA7OwogCSopCkBAIC0yNzgsMTIgKzQyMiwxMiBAQAogCQlkb25lCiAJCXNoaWZ0CiAJZmkKLQlnaXQgbWFpbHNwbGl0IC1kIiRwcmVjIiAtbyIkZG90ZXN0IiAtYiAtLSAiJEAiID4gIiRkb3Rlc3QvbGFzdCIgfHwgIHsKLQkJcm0gLWZyICIkZG90ZXN0IgotCQlleGl0IDEKLQl9CiAKLQkjIC1zLCAtdSwgLWssIC0td2hpdGVzcGFjZSwgLTMsIC1DIGFuZCAtcCBmbGFncyBhcmUga2VwdAorCWNoZWNrX3BhdGNoX2Zvcm1hdCAiJEAiCisKKwlzcGxpdF9wYXRjaGVzICIkQCIKKworCSMgLXMsIC11LCAtaywgLS13aGl0ZXNwYWNlLCAtMywgLUMsIC1xIGFuZCAtcCBmbGFncyBhcmUga2VwdAogCSMgZm9yIHRoZSByZXN1bWluZyBzZXNzaW9uIGFmdGVyIGEgcGF0Y2ggZmFpbHVyZS4KIAkjIC1pIGNhbiBhbmQgbXVzdCBiZSBnaXZlbiB3aGVuIHJlc3VtaW5nLgogCWVjaG8gIiAkZ2l0X2FwcGx5X29wdCIgPiIkZG90ZXN0L2FwcGx5LW9wdCIKQEAgLTI5MSw2ICs0MzUsNyBAQAogCWVjaG8gIiRzaWduIiA+IiRkb3Rlc3Qvc2lnbiIKIAllY2hvICIkdXRmOCIgPiIkZG90ZXN0L3V0ZjgiCiAJZWNobyAiJGtlZXAiID4iJGRvdGVzdC9rZWVwIgorCWVjaG8gIiRHSVRfUVVJRVQiID4iJGRvdGVzdC9xdWlldCIKIAllY2hvIDEgPiIkZG90ZXN0L25leHQiCiAJaWYgdGVzdCAtbiAiJHJlYmFzaW5nIgogCXRoZW4KQEAgLTMzMSw2ICs0NzYsMTAgQEAKIHRoZW4KIAlrZWVwPS1rCiBmaQoraWYgdGVzdCAiJChjYXQgIiRkb3Rlc3QvcXVpZXQiKSIgPSB0Cit0aGVuCisJR0lUX1FVSUVUPXQKK2ZpCiBpZiB0ZXN0ICIkKGNhdCAiJGRvdGVzdC90aHJlZXdheSIpIiA9IHQKIHRoZW4KIAl0aHJlZXdheT10CkBAIC0zNTYsNyArNTA1LDcgQEAKIAogaWYgdGVzdCAiJHRoaXMiIC1ndCAiJGxhc3QiCiB0aGVuCi0JZWNobyBOb3RoaW5nIHRvIGRvLgorCXNheSBOb3RoaW5nIHRvIGRvLgogCXJtIC1mciAiJGRvdGVzdCIKIAlleGl0CiBmaQpAQCAtNTAyLDExICs2NTEsMTggQEAKIAkJc3RvcF9oZXJlICR0aGlzCiAJZmkKIAotCXByaW50ZiAnQXBwbHlpbmc6ICVzXG4nICIkRklSU1RMSU5FIgorCXNheSAiQXBwbHlpbmc6ICRGSVJTVExJTkUiCiAKIAljYXNlICIkcmVzb2x2ZWQiIGluCiAJJycpCi0JCWV2YWwgJ2dpdCBhcHBseSAnIiRnaXRfYXBwbHlfb3B0IicgLS1pbmRleCAiJGRvdGVzdC9wYXRjaCInCisJCSMgV2hlbiB3ZSBhcmUgYWxsb3dlZCB0byBmYWxsIGJhY2sgdG8gMy13YXkgbGF0ZXIsIGRvbid0IGdpdmUKKwkJIyBmYWxzZSBlcnJvcnMgZHVyaW5nIHRoZSBpbml0aWFsIGF0dGVtcHQuCisJCXNxdWVsY2g9CisJCWlmIHRlc3QgIiR0aHJlZXdheSIgPSB0CisJCXRoZW4KKwkJCXNxdWVsY2g9Jz4vZGV2L251bGwgMj4mMSAnCisJCWZpCisJCWV2YWwgImdpdCBhcHBseSAkc3F1ZWxjaCRnaXRfYXBwbHlfb3B0IicgLS1pbmRleCAiJGRvdGVzdC9wYXRjaCInCiAJCWFwcGx5X3N0YXR1cz0kPwogCQk7OwogCXQpCkBAIC01MzgsNyArNjk0LDcgQEAKIAkJICAgICMgQXBwbHlpbmcgdGhlIHBhdGNoIHRvIGFuIGVhcmxpZXIgdHJlZSBhbmQgbWVyZ2luZyB0aGUKIAkJICAgICMgcmVzdWx0IG1heSBoYXZlIHByb2R1Y2VkIHRoZSBzYW1lIHRyZWUgYXMgb3Vycy4KIAkJICAgIGdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCAtLSAmJiB7Ci0JCQllY2hvIE5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLgorCQkJc2F5IE5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLgogCQkJZ29fbmV4dAogCQkJY29udGludWUKIAkJICAgIH0KQEAgLTU2NCw3ICs3MjAsNyBAQAogCQkJR0lUX0FVVEhPUl9EQVRFPQogCQlmaQogCQlwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIEhFQUQpIHx8Ci0JCWVjaG8gPiYyICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorCQlzYXkgPiYyICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgogCiAJCWlmIHRlc3QgLW4gIiRjb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSIKIAkJdGhlbgpkaWZmIC0tZ2l0IGEvZ2l0LWJpc2VjdC5zaCBiL2dpdC1iaXNlY3Quc2gKaW5kZXggMjQ3MTJmZi4uNmY2ZjAzOSAxMDA3NTUKLS0tIGEvZ2l0LWJpc2VjdC5zaAorKysgYi9naXQtYmlzZWN0LnNoCkBAIC0zMywxNiArMzMsNiBAQAogX3g0MD0nWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXScKIF94NDA9IiRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAiCiAKLXNxKCkgewotCUBAUEVSTEBAIC1lICcKLQkJZm9yIChAQVJHVikgewotCQkJcy8nXCcnLydcJ1xcXFxcJ1wnJy9nOwotCQkJcHJpbnQgIiAnXCcnJF8nXCcnIjsKLQkJfQotCQlwcmludCAiXG4iOwotCScgIiRAIgotfQotCiBiaXNlY3RfYXV0b3N0YXJ0KCkgewogCXRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCIgfHwgewogCQllY2hvID4mMiAnWW91IG5lZWQgdG8gc3RhcnQgYnkgImdpdCBiaXNlY3Qgc3RhcnQiJwpAQCAtMTA3LDcgKzk3LDcgQEAKIAlmb3IgYXJnOyBkbwogCSAgICBjYXNlICIkYXJnIiBpbiAtLSkgaGFzX2RvdWJsZV9kYXNoPTE7IGJyZWFrIDs7IGVzYWMKIAlkb25lCi0Jb3JpZ19hcmdzPSQoc3EgIiRAIikKKwlvcmlnX2FyZ3M9JChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRAIikKIAliYWRfc2Vlbj0wCiAJZXZhbD0nJwogCXdoaWxlIFsgJCMgLWd0IDAgXTsgZG8KQEAgLTE0Nyw3ICsxMzcsNyBAQAogCSMgV3JpdGUgbmV3IHN0YXJ0IHN0YXRlLgogCSMKIAllY2hvICIkc3RhcnRfaGVhZCIgPiIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiICYmCi0Jc3EgIiRAIiA+IiRHSVRfRElSL0JJU0VDVF9OQU1FUyIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRAIiA+IiRHSVRfRElSL0JJU0VDVF9OQU1FUyIgJiYKIAlldmFsICIkZXZhbCIgJiYKIAllY2hvICJnaXQgYmlzZWN0IHN0YXJ0JG9yaWdfYXJncyIgPj4iJEdJVF9ESVIvQklTRUNUX0xPRyIgfHwgZXhpdAogCSMKQEAgLTE3NywxMCArMTY3LDYgQEAKIAl0ZXN0ICIkMSIgPSAkKGNhdCAiJEdJVF9ESVIvQklTRUNUX0VYUEVDVEVEX1JFViIpCiB9CiAKLW1hcmtfZXhwZWN0ZWRfcmV2KCkgewotCWVjaG8gIiQxIiA+ICIkR0lUX0RJUi9CSVNFQ1RfRVhQRUNURURfUkVWIgotfQotCiBjaGVja19leHBlY3RlZF9yZXZzKCkgewogCWZvciBfcmV2IGluICIkQCI7IGRvCiAJCWlmICEgaXNfZXhwZWN0ZWRfcmV2ICIkX3JldiI7IHRoZW4KQEAgLTE5OSw3ICsxODUsNyBAQAogICAgICAgICAgICAgKi4uKikKICAgICAgICAgICAgICAgICByZXZzPSQoZ2l0IHJldi1saXN0ICIkYXJnIikgfHwgZGllICJCYWQgcmV2IGlucHV0OiAkYXJnIiA7OwogICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICByZXZzPSQoc3EgIiRhcmciKSA7OworICAgICAgICAgICAgICAgIHJldnM9JChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRhcmciKSA7OwogCSAgICBlc2FjCiAgICAgICAgICAgICBhbGw9IiRhbGwgJHJldnMiCiAgICAgICAgIGRvbmUKQEAgLTI3OSwxNjIgKzI2NSwyMiBAQAogCWJpc2VjdF9uZXh0X2NoZWNrICYmIGJpc2VjdF9uZXh0IHx8IDoKIH0KIAotZXhpdF9pZl9za2lwcGVkX2NvbW1pdHMgKCkgewotCV90cmllZD0kMQotCV9iYWQ9JDIKLQlpZiB0ZXN0IC1uICIkX3RyaWVkIiA7IHRoZW4KLQkJZWNobyAiVGhlcmUgYXJlIG9ubHkgJ3NraXAncGVkIGNvbW1pdCBsZWZ0IHRvIHRlc3QuIgotCQllY2hvICJUaGUgZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2Y6IgotCQllY2hvICIkX3RyaWVkIiB8IHRyICdbfF0nICdbXDAxMl0nCi0JCXRlc3QgLW4gIiRfYmFkIiAmJiBlY2hvICIkX2JhZCIKLQkJZWNobyAiV2UgY2Fubm90IGJpc2VjdCBtb3JlISIKLQkJZXhpdCAyCi0JZmkKLX0KLQotYmlzZWN0X2NoZWNrb3V0KCkgewotCV9yZXY9IiQxIgotCV9tc2c9IiQyIgotCWVjaG8gIkJpc2VjdGluZzogJF9tc2ciCi0JbWFya19leHBlY3RlZF9yZXYgIiRfcmV2IgotCWdpdCBjaGVja291dCAtcSAiJF9yZXYiIC0tIHx8IGV4aXQKLQlnaXQgc2hvdy1icmFuY2ggIiRfcmV2IgotfQotCi1pc19hbW9uZygpIHsKLQlfcmV2PSIkMSIKLQlfbGlzdD0iJDIiCi0JY2FzZSAiJF9saXN0IiBpbiAqJF9yZXYqKSByZXR1cm4gMCA7OyBlc2FjCi0JcmV0dXJuIDEKLX0KLQotaGFuZGxlX2JhZF9tZXJnZV9iYXNlKCkgewotCV9iYWRtYj0iJDEiCi0JX2dvb2Q9IiQyIgotCWlmIGlzX2V4cGVjdGVkX3JldiAiJF9iYWRtYiI7IHRoZW4KLQkJY2F0ID4mMiA8PEVPRgotVGhlIG1lcmdlIGJhc2UgJF9iYWRtYiBpcyBiYWQuCi1UaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiAkX2JhZG1iIGFuZCBbJF9nb29kXS4KLUVPRgotCQlleGl0IDMKLQllbHNlCi0JCWNhdCA+JjIgPDxFT0YKLVNvbWUgZ29vZCByZXZzIGFyZSBub3QgYW5jZXN0b3Igb2YgdGhlIGJhZCByZXYuCi1naXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS4KLU1heWJlIHlvdSBtaXN0YWtlIGdvb2QgYW5kIGJhZCByZXZzPwotRU9GCi0JCWV4aXQgMQotCWZpCi19Ci0KLWhhbmRsZV9za2lwcGVkX21lcmdlX2Jhc2UoKSB7Ci0JX21iPSIkMSIKLQlfYmFkPSIkMiIKLQlfZ29vZD0iJDMiCi0JY2F0ID4mMiA8PEVPRgotV2FybmluZzogdGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAkX2JhZCBhbmQgWyRfZ29vZF0gbXVzdCBiZSBza2lwcGVkLgotU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0IGJhZCBjb21taXQgaXMgYmV0d2VlbiAkX21iIGFuZCAkX2JhZC4KLVdlIGNvbnRpbnVlIGFueXdheS4KLUVPRgotfQotCi0jCi0jICJjaGVja19tZXJnZV9iYXNlcyIgY2hlY2tzIHRoYXQgbWVyZ2UgYmFzZXMgYXJlIG5vdCAiYmFkIi4KLSMKLSMgLSBJZiBvbmUgaXMgImdvb2QiLCB0aGF0J3MgZ29vZCwgd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotIyAtIElmIG9uZSBpcyAiYmFkIiwgaXQgbWVhbnMgdGhlIHVzZXIgYXNzdW1lZCBzb21ldGhpbmcgd3JvbmcKLSMgYW5kIHdlIG11c3QgZXhpdC4KLSMgLSBJZiBvbmUgaXMgInNraXBwZWQiLCB3ZSBjYW4ndCBrbm93IGJ1dCB3ZSBzaG91bGQgd2Fybi4KLSMgLSBJZiB3ZSBkb24ndCBrbm93LCB3ZSBzaG91bGQgY2hlY2sgaXQgb3V0IGFuZCBhc2sgdGhlIHVzZXIgdG8gdGVzdC4KLSMKLSMgSW4gdGhlIGxhc3QgY2FzZSB3ZSB3aWxsIHJldHVybiAxLCBhbmQgb3RoZXJ3aXNlIDAuCi0jCi1jaGVja19tZXJnZV9iYXNlcygpIHsKLQlfYmFkPSIkMSIKLQlfZ29vZD0iJDIiCi0JX3NraXA9IiQzIgotCWZvciBfbWIgaW4gJChnaXQgbWVyZ2UtYmFzZSAtLWFsbCAkX2JhZCAkX2dvb2QpCi0JZG8KLQkJaWYgaXNfYW1vbmcgIiRfbWIiICIkX2dvb2QiOyB0aGVuCi0JCQljb250aW51ZQotCQllbGlmIHRlc3QgIiRfbWIiID0gIiRfYmFkIjsgdGhlbgotCQkJaGFuZGxlX2JhZF9tZXJnZV9iYXNlICIkX2JhZCIgIiRfZ29vZCIKLQkJZWxpZiBpc19hbW9uZyAiJF9tYiIgIiRfc2tpcCI7IHRoZW4KLQkJCWhhbmRsZV9za2lwcGVkX21lcmdlX2Jhc2UgIiRfbWIiICIkX2JhZCIgIiRfZ29vZCIKLQkJZWxzZQotCQkJYmlzZWN0X2NoZWNrb3V0ICIkX21iIiAiYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIgotCQkJcmV0dXJuIDEKLQkJZmkKLQlkb25lCi0JcmV0dXJuIDAKLX0KLQotIwotIyAiY2hlY2tfZ29vZF9hcmVfYW5jZXN0b3JzX29mX2JhZCIgY2hlY2tzIHRoYXQgYWxsICJnb29kIiByZXZzIGFyZQotIyBhbmNlc3RvciBvZiB0aGUgImJhZCIgcmV2LgotIwotIyBJZiB0aGF0J3Mgbm90IHRoZSBjYXNlLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBtZXJnZSBiYXNlcy4KLSMgSWYgYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIGJ5IHRoZSB1c2VyIHdlIHJldHVybiAxIGFuZAotIyBvdGhlcndpc2UgMC4KLSMKLWNoZWNrX2dvb2RfYXJlX2FuY2VzdG9yc19vZl9iYWQoKSB7Ci0JdGVzdCAtZiAiJEdJVF9ESVIvQklTRUNUX0FOQ0VTVE9SU19PSyIgJiYKLQkJcmV0dXJuCi0KLQlfYmFkPSIkMSIKLQlfZ29vZD0kKGVjaG8gJDIgfCBzZWQgLWUgJ3MvXF4vL2cnKQotCV9za2lwPSIkMyIKLQotCSMgQmlzZWN0aW5nIHdpdGggbm8gZ29vZCByZXYgaXMgb2sKLQl0ZXN0IC16ICIkX2dvb2QiICYmIHJldHVybgotCi0JX3NpZGU9JChnaXQgcmV2LWxpc3QgJF9nb29kIF4kX2JhZCkKLQlpZiB0ZXN0IC1uICIkX3NpZGUiOyB0aGVuCi0JCSMgUmV0dXJuIGlmIGEgY2hlY2tvdXQgd2FzIGRvbmUKLQkJY2hlY2tfbWVyZ2VfYmFzZXMgIiRfYmFkIiAiJF9nb29kIiAiJF9za2lwIiB8fCByZXR1cm4KLQlmaQotCi0JOiA+ICIkR0lUX0RJUi9CSVNFQ1RfQU5DRVNUT1JTX09LIgotCi0JcmV0dXJuIDAKLX0KLQogYmlzZWN0X25leHQoKSB7CiAJY2FzZSAiJCMiIGluIDApIDs7ICopIHVzYWdlIDs7IGVzYWMKIAliaXNlY3RfYXV0b3N0YXJ0CiAJYmlzZWN0X25leHRfY2hlY2sgZ29vZAogCi0JIyBHZXQgYmFkLCBnb29kIGFuZCBza2lwcGVkIHJldnMKLQliYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvYmlzZWN0L2JhZCkgJiYKLQlnb29kPSQoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nXiUob2JqZWN0bmFtZSknIFwKLQkJInJlZnMvYmlzZWN0L2dvb2QtKiIgfCB0ciAnXDAxMicgJyAnKSAmJgotCXNraXA9JChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKG9iamVjdG5hbWUpJyBcCi0JCSJyZWZzL2Jpc2VjdC9za2lwLSoiIHwgdHIgJ1wwMTInICcgJykgfHwgZXhpdAorCSMgUGVyZm9ybSBhbGwgYmlzZWN0aW9uIGNvbXB1dGF0aW9uLCBkaXNwbGF5IGFuZCBjaGVja291dAorCWdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsCisJcmVzPSQ/CiAKLQkjIE1heWJlIHNvbWUgbWVyZ2UgYmFzZXMgbXVzdCBiZSB0ZXN0ZWQgZmlyc3QKLQljaGVja19nb29kX2FyZV9hbmNlc3RvcnNfb2ZfYmFkICIkYmFkIiAiJGdvb2QiICIkc2tpcCIKLQkjIFJldHVybiBub3cgaWYgYSBjaGVja291dCBoYXMgYWxyZWFkeSBiZWVuIGRvbmUKLQl0ZXN0ICIkPyIgLWVxICIxIiAmJiByZXR1cm4KKyAgICAgICAgIyBDaGVjayBpZiB3ZSBzaG91bGQgZXhpdCBiZWNhdXNlIGJpc2VjdGlvbiBpcyBmaW5pc2hlZAorCXRlc3QgJHJlcyAtZXEgMTAgJiYgZXhpdCAwCiAKLQkjIEdldCBiaXNlY3Rpb24gaW5mb3JtYXRpb24KLQlldmFsPSQoZXZhbCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC12YXJzIikgJiYKLQlldmFsICIkZXZhbCIgfHwgZXhpdAorCSMgQ2hlY2sgZm9yIGFuIGVycm9yIGluIHRoZSBiaXNlY3Rpb24gcHJvY2VzcworCXRlc3QgJHJlcyAtbmUgMCAmJiBleGl0ICRyZXMKIAotCWlmIFsgLXogIiRiaXNlY3RfcmV2IiBdOyB0aGVuCi0JCSMgV2Ugc2hvdWxkIGV4aXQgaGVyZSBvbmx5IGlmIHRoZSAiYmFkIgotCQkjIGNvbW1pdCBpcyBhbHNvIGEgInNraXAiIGNvbW1pdCAoc2VlIGFib3ZlKS4KLQkJZXhpdF9pZl9za2lwcGVkX2NvbW1pdHMgIiRiaXNlY3RfdHJpZWQiCi0JCWVjaG8gIiRiYWQgd2FzIGJvdGggZ29vZCBhbmQgYmFkIgotCQlleGl0IDEKLQlmaQotCWlmIFsgIiRiaXNlY3RfcmV2IiA9ICIkYmFkIiBdOyB0aGVuCi0JCWV4aXRfaWZfc2tpcHBlZF9jb21taXRzICIkYmlzZWN0X3RyaWVkIiAiJGJhZCIKLQkJZWNobyAiJGJpc2VjdF9yZXYgaXMgZmlyc3QgYmFkIGNvbW1pdCIKLQkJZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAkYmlzZWN0X3JldgotCQlleGl0IDAKLQlmaQotCi0JYmlzZWN0X2NoZWNrb3V0ICIkYmlzZWN0X3JldiIgIiRiaXNlY3RfbnIgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzIChyb3VnaGx5ICRiaXNlY3Rfc3RlcHMgc3RlcHMpIgorCXJldHVybiAwCiB9CiAKIGJpc2VjdF92aXN1YWxpemUoKSB7CkBAIC01NTksNyArNDA1LDcgQEAKIAkgIGV4aXQgJHJlcwogICAgICAgZmkKIAotICAgICAgaWYgZ3JlcCAiaXMgZmlyc3QgYmFkIGNvbW1pdCIgIiRHSVRfRElSL0JJU0VDVF9SVU4iID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBpZiBncmVwICJpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgIiRHSVRfRElSL0JJU0VDVF9SVU4iID4gL2Rldi9udWxsOyB0aGVuCiAJICBlY2hvICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCiAJICBleGl0IDA7CiAgICAgICBmaQpkaWZmIC0tZ2l0IGEvZ2l0LWNvbXBhdC11dGlsLmggYi9naXQtY29tcGF0LXV0aWwuaAppbmRleCBjN2NmMmQ1Li45Zjk0MWU0IDEwMDY0NAotLS0gYS9naXQtY29tcGF0LXV0aWwuaAorKysgYi9naXQtY29tcGF0LXV0aWwuaApAQCAtNyw3ICs3LDcgQEAKIC8qCiAgKiBTZWUgaWYgb3VyIGNvbXBpbGVyIGlzIGtub3duIHRvIHN1cHBvcnQgZmxleGlibGUgYXJyYXkgbWVtYmVycy4KICAqLwotI2lmIGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpICYmICghZGVmaW5lZChfX1NVTlBST19DKSB8fCAoX19TVU5QUk9fQyA+IDB4NTgwKSkKICMgZGVmaW5lIEZMRVhfQVJSQVkgLyogZW1wdHkgKi8KICNlbGlmIGRlZmluZWQoX19HTlVDX18pCiAjIGlmIChfX0dOVUNfXyA+PSAzKQpAQCAtMjYsNiArMjYsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKKyNkZWZpbmUgYml0c2l6ZW9mKHgpICAoQ0hBUl9CSVQgKiBzaXplb2YoeCkpCiAKICNpZmRlZiBfX0dOVUNfXwogI2RlZmluZSBUWVBFT0YoeCkgKF9fdHlwZW9mX18oeCkpCkBAIC0zMywyMCArMzQsMzggQEAKICNkZWZpbmUgVFlQRU9GKHgpCiAjZW5kaWYKIAotI2RlZmluZSBNU0IoeCwgYml0cykgKCh4KSAmIFRZUEVPRih4KSh+MFVMTCA8PCAoc2l6ZW9mKHgpICogOCAtIChiaXRzKSkpKQorI2RlZmluZSBNU0IoeCwgYml0cykgKCh4KSAmIFRZUEVPRih4KSh+MFVMTCA8PCAoYml0c2l6ZW9mKHgpIC0gKGJpdHMpKSkpCiAjZGVmaW5lIEhBU19NVUxUSV9CSVRTKGkpICAoKGkpICYgKChpKSAtIDEpKSAgLyogY2hlY2tzIGlmIGFuIGludGVnZXIgaGFzIG1vcmUgdGhhbiAxIGJpdCBzZXQgKi8KIAorI2RlZmluZSBESVZfUk9VTkRfVVAobixkKSAoKChuKSArIChkKSAtIDEpIC8gKGQpKQorCiAvKiBBcHByb3hpbWF0aW9uIG9mIHRoZSBsZW5ndGggb2YgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB0eXBlLiAqLwogI2RlZmluZSBkZWNpbWFsX2xlbmd0aCh4KQkoKGludCkoc2l6ZW9mKHgpICogMi41NiArIDAuNSkgKyAxKQogCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgICYmICFkZWZpbmVkKF9fVVNMQ19fKSAmJiAhZGVmaW5lZChfTV9VTklYKQorI2lmIGRlZmluZWQoX19zdW5fXykKKyAvKgorICAqIE9uIFNvbGFyaXMsIHdoZW4gX1hPUEVOX0VYVEVOREVEIGlzIHNldCwgaXRzIGhlYWRlciBmaWxlCisgICogZm9yY2VzIHRoZSBwcm9ncmFtcyB0byBiZSBYUEc0djIsIGRlZmVhdGluZyBhbnkgX1hPUEVOX1NPVVJDRQorICAqIHNldHRpbmcgdG8gc2F5IHdlIGFyZSBYUEc1IG9yIFhQRzYuICBBbHNvIG9uIFNvbGFyaXMsCisgICogWFBHNiBwcm9ncmFtcyBtdXN0IGJlIGNvbXBpbGVkIHdpdGggYSBjOTkgY29tcGlsZXIsIHdoaWxlCisgICogbm9uIFhQRzYgcHJvZ3JhbXMgbXVzdCBiZSBjb21waWxlZCB3aXRoIGEgcHJlLWM5OSBjb21waWxlci4KKyAgKi8KKyMgaWYgX19TVERDX1ZFUlNJT05fXyAtIDAgPj0gMTk5OTAxTAorIyBkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAKKyMgZWxzZQorIyBkZWZpbmUgX1hPUEVOX1NPVVJDRSA1MDAKKyMgZW5kaWYKKyNlbGlmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19GcmVlQlNEX18pICAmJiAhZGVmaW5lZChfX1VTTENfXykgJiYgIWRlZmluZWQoX01fVU5JWCkgJiYgIWRlZmluZWQoc2dpKQogI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCAvKiBnbGliYzIgYW5kIEFJWCA1LjNMIG5lZWQgNTAwLCBPcGVuQlNEIG5lZWRzIDYwMCBmb3IgU19JU0xOSygpICovCisjaWZuZGVmIF9fc3VuX18KICNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAxIC8qIEFJWCA1LjNMIG5lZWRzIHRoaXMgKi8KICNlbmRpZgorI2VuZGlmCiAjZGVmaW5lIF9BTExfU09VUkNFIDEKICNkZWZpbmUgX0dOVV9TT1VSQ0UgMQogI2RlZmluZSBfQlNEX1NPVVJDRSAxCiAjZGVmaW5lIF9ORVRCU0RfU09VUkNFIDEKKyNkZWZpbmUgX1NHSV9TT1VSQ0UgMQogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTk3LDYgKzExNiwxMyBAQAogI2luY2x1ZGUgImNvbXBhdC9taW5ndy5oIgogI2VuZGlmCS8qIF9fTUlOR1czMl9fICovCiAKKyNpZm5kZWYgTk9fTElCR0VOX0gKKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbHNlCisjZGVmaW5lIGJhc2VuYW1lIGdpdGJhc2VuYW1lCitleHRlcm4gY2hhciAqZ2l0YmFzZW5hbWUoY2hhciAqKTsKKyNlbmRpZgorCiAjaWZuZGVmIE5PX0lDT05WCiAjaW5jbHVkZSA8aWNvbnYuaD4KICNlbmRpZgpAQCAtMTUzLDYgKzE3OSw3IEBACiAvKiBHZW5lcmFsIGhlbHBlciBmdW5jdGlvbnMgKi8KIGV4dGVybiB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKmVycikgTk9SRVRVUk47CiBleHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqZXJyLCAuLi4pIE5PUkVUVVJOIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworZXh0ZXJuIHZvaWQgZGllX2Vycm5vKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBOT1JFVFVSTiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKIGV4dGVybiBpbnQgZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogZXh0ZXJuIHZvaWQgd2FybmluZyhjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiAKQEAgLTIzMiw2ICsyNTksMTEgQEAKIGV4dGVybiBjaGFyICpnaXRta2R0ZW1wKGNoYXIgKik7CiAjZW5kaWYKIAorI2lmZGVmIE5PX01LU1RFTVBTCisjZGVmaW5lIG1rc3RlbXBzIGdpdG1rc3RlbXBzCitleHRlcm4gaW50IGdpdG1rc3RlbXBzKGNoYXIgKiwgaW50KTsKKyNlbmRpZgorCiAjaWZkZWYgTk9fVU5TRVRFTlYKICNkZWZpbmUgdW5zZXRlbnYgZ2l0dW5zZXRlbnYKIGV4dGVybiB2b2lkIGdpdHVuc2V0ZW52KGNvbnN0IGNoYXIgKik7CmRpZmYgLS1naXQgYS9naXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwgYi9naXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwKaW5kZXggNmQ5ZjBlZi4uNTliNjcyMiAxMDA3NTUKLS0tIGEvZ2l0LWN2c2V4cG9ydGNvbW1pdC5wZXJsCisrKyBiL2dpdC1jdnNleHBvcnRjb21taXQucGVybApAQCAtOCw5ICs4LDkgQEAKIHVzZSBGaWxlOjpTcGVjOwogdXNlIEdpdDsKIAotb3VyICgkb3B0X2gsICRvcHRfUCwgJG9wdF9wLCAkb3B0X3YsICRvcHRfYywgJG9wdF9mLCAkb3B0X2EsICRvcHRfbSwgJG9wdF9kLCAkb3B0X3UsICRvcHRfdywgJG9wdF9XKTsKK291ciAoJG9wdF9oLCAkb3B0X1AsICRvcHRfcCwgJG9wdF92LCAkb3B0X2MsICRvcHRfZiwgJG9wdF9hLCAkb3B0X20sICRvcHRfZCwgJG9wdF91LCAkb3B0X3csICRvcHRfVywgJG9wdF9rKTsKIAotZ2V0b3B0cygndWhQcHZjZmFtOmQ6dzpXJyk7CitnZXRvcHRzKCd1aFBwdmNma2FtOmQ6dzpXJyk7CiAKICRvcHRfaCAmJiB1c2FnZSgpOwogCkBAIC0yMjUsNyArMjI1LDE0IEBACiAgICAgICBmb3JlYWNoIG15ICRuYW1lIChrZXlzICV0b2RvKSB7CiAJbXkgJGJhc2VuYW1lID0gYmFzZW5hbWUoJG5hbWUpOwogCi0JJGJhc2VuYW1lID0gIm5vIGZpbGUgIiAuICRiYXNlbmFtZSBpZiAoZXhpc3RzKCRhZGRlZHskYmFzZW5hbWV9KSk7CisJIyBDVlMgcmVwb3J0cyBmaWxlcyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzCisJIyAibm8gZmlsZSAkYmFzZW5hbWUiIGluIGl0cyAic3RhdHVzIiBvdXRwdXQsIHNvIHdlIHNob3VsZAorCSMgYW50aWNpcGF0ZSB0aGF0LiAgVG90YWxseSB1bmtub3duIGZpbGVzIHdpbGwgaGF2ZSBhIHN0YXR1cworCSMgIlVua25vd24iLiBIb3dldmVyLCBpZiB0aGV5IGV4aXN0IGluIHRoZSBBdHRpYywgdGhlaXIgc3RhdHVzCisJIyB3aWxsIGJlICJVcC10by1kYXRlIiAodGhpcyBtZWFucyB0aGV5IHdlcmUgYWRkZWQgb25jZSBidXQgaGF2ZQorCSMgYmVlbiByZW1vdmVkKS4KKwkkYmFzZW5hbWUgPSAibm8gZmlsZSAkYmFzZW5hbWUiIGlmICRhZGRlZHskYmFzZW5hbWV9OworCiAJJGJhc2VuYW1lID1+IHMvXlxzKy8vOwogCSRiYXNlbmFtZSA9fiBzL1xzKyQvLzsKIApAQCAtMjMzLDMxICsyNDAsNDYgQEAKIAkgICRmdWxsbmFtZXskYmFzZW5hbWV9ID0gJG5hbWU7CiAJICBwdXNoIChAY2Fuc3RhdHVzZmlsZXMyLCAkbmFtZSk7CiAJICBkZWxldGUoJHRvZG97JG5hbWV9KTsKLSAgICAgICAgfQorCX0KICAgICAgIH0KICAgICAgIG15IEBjdnNvdXRwdXQ7CiAgICAgICBAY3Zzb3V0cHV0ID0geGFyZ3Nfc2FmZV9waXBlX2NhcHR1cmUoW0BjdnMsICdzdGF0dXMnXSwgQGNhbnN0YXR1c2ZpbGVzMik7CiAgICAgICBmb3JlYWNoIG15ICRsIChAY3Zzb3V0cHV0KSB7Ci0gICAgICAgIGNob21wICRsOwotICAgICAgICBpZiAoJGwgPX4gL15GaWxlOlxzKyguKlxTKVxzK1N0YXR1czogKC4qKSQvKSB7Ci0JICBpZiAoIWV4aXN0cygkZnVsbG5hbWV7JDF9KSkgewotCSAgICBwcmludCBTVERFUlIgIkh1aD8gU3RhdHVzIHJlcG9ydGVkIGZvciB1bmV4cGVjdGVkIGZpbGUgJyQxJ1xuIjsKLQkgIH0gZWxzZSB7Ci0JICAgICRjdnNzdGF0eyRmdWxsbmFtZXskMX19ID0gJDI7Ci0JICB9Ci0JfQorCWNob21wICRsOworCW5leHQgdW5sZXNzCisJICAgIG15ICgkZmlsZSwgJHN0YXR1cykgPSAkbCA9fiAvXkZpbGU6XHMrKC4qXFMpXHMrU3RhdHVzOiAoLiopJC87CisKKwlteSAkZnVsbG5hbWUgPSAkZnVsbG5hbWV7JGZpbGV9OworCXByaW50IFNUREVSUiAiSHVoPyBTdGF0dXMgJyRzdGF0dXMnIHJlcG9ydGVkIGZvciB1bmV4cGVjdGVkIGZpbGUgJyRmaWxlJ1xuIgorCSAgICB1bmxlc3MgZGVmaW5lZCAkZnVsbG5hbWU7CisKKwkjIFRoaXMgcmVzcG9uc2UgbWVhbnMgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QgZXhjZXB0IGluCisJIyBDVlMncyBhdHRpYywgc28gc2V0IHRoZSBzdGF0dXMgYWNjb3JkaW5nbHkKKwkkc3RhdHVzID0gIkluLWF0dGljIgorCSAgICBpZiAkZmlsZSA9fiAvXm5vIGZpbGUgLworCQkmJiAkc3RhdHVzIGVxICdVcC10by1kYXRlJzsKKworCSRjdnNzdGF0eyRmdWxsbmFtZXskZmlsZX19ID0gJHN0YXR1cworCSAgICBpZiBkZWZpbmVkICRmdWxsbmFtZXskZmlsZX07CiAgICAgICB9CiAgICAgfQogfQogCi0jIC4uLiB2YWxpZGF0ZSBuZXcgZmlsZXMsCisjIC4uLiBWYWxpZGF0ZSB0aGF0IG5ldyBmaWxlcyBoYXZlIHRoZSBjb3JyZWN0IHN0YXR1cwogZm9yZWFjaCBteSAkZiAoQGFmaWxlcykgewotICAgIGlmIChkZWZpbmVkICgkY3Zzc3RhdHskZn0pIGFuZCAkY3Zzc3RhdHskZn0gbmUgIlVua25vd24iKSB7Ci0JJGRpcnR5ID0gMTsKKyAgICBuZXh0IHVubGVzcyBkZWZpbmVkKG15ICRzdGF0ID0gJGN2c3N0YXR7JGZ9KTsKKworICAgICMgVGhpcyBtZWFucyB0aGUgZmlsZSBoYXMgbmV2ZXIgYmVlbiBzZWVuIGJlZm9yZQorICAgIG5leHQgaWYgJHN0YXQgZXEgJ1Vua25vd24nOworCisgICAgIyBUaGlzIG1lYW5zIHRoZSBmaWxlIGhhcyBiZWVuIHNlZW4gYmVmb3JlIGJ1dCB3YXMgcmVtb3ZlZAorICAgIG5leHQgaWYgJHN0YXQgZXEgJ0luLWF0dGljJzsKKworICAgICRkaXJ0eSA9IDE7CiAJd2FybiAiRmlsZSAkZiBpcyBhbHJlYWR5IGtub3duIGluIHlvdXIgQ1ZTIGNoZWNrb3V0IC0tIHBlcmhhcHMgaXQgaGFzIGJlZW4gYWRkZWQgYnkgYW5vdGhlciB1c2VyLiBPciB0aGlzIG1heSBpbmRpY2F0ZSB0aGF0IGl0IGV4aXN0cyBvbiBhIGRpZmZlcmVudCBicmFuY2guIElmIHRoaXMgaXMgdGhlIGNhc2UsIHVzZSAtZiB0byBmb3JjZSB0aGUgbWVyZ2UuXG4iOwogCXdhcm4gIlN0YXR1cyB3YXM6ICRjdnNzdGF0eyRmfVxuIjsKLSAgICB9CiB9CisKICMgLi4uIHZhbGlkYXRlIGtub3duIGZpbGVzLgogZm9yZWFjaCBteSAkZiAoQGZpbGVzKSB7CiAgICAgbmV4dCBpZiBncmVwIHsgJF8gZXEgJGYgfSBAYWZpbGVzOwpAQCAtMjY2LDcgKzI4OCwyNiBAQAogCSRkaXJ0eSA9IDE7CiAJd2FybiAiRmlsZSAkZiBub3QgdXAgdG8gZGF0ZSBidXQgaGFzIHN0YXR1cyAnJGN2c3N0YXR7JGZ9JyBpbiB5b3VyIENWUyBjaGVja291dCFcbiI7CiAgICAgfQorCisgICAgIyBEZXBlbmRpbmcgb24gaG93IHlvdXIgR0lUIHRyZWUgZ290IGltcG9ydGVkIGZyb20gQ1ZTIHlvdSBtYXkKKyAgICAjIGhhdmUgYSBjb25mbGljdCBiZXR3ZWVuIGV4cGFuZGVkIGtleXdvcmRzIGluIHlvdXIgQ1ZTIHRyZWUgYW5kCisgICAgIyB1bmV4cGFuZGVkIGtleXdvcmRzIGluIHRoZSBwYXRjaCBhYm91dCB0byBiZSBhcHBsaWVkLgorICAgIGlmICgkb3B0X2spIHsKKwlteSAkb3JpZ19maWxlID0iJGYub3JpZyI7CisJcmVuYW1lICRmLCAkb3JpZ19maWxlOworCW9wZW4oRklMVEVSX0lOLCAiPCRvcmlnX2ZpbGUiKSBvciBkaWUgIkNhbm5vdCBvcGVuICRvcmlnX2ZpbGVcbiI7CisJb3BlbihGSUxURVJfT1VULCAiPiRmIikgb3IgZGllICJDYW5ub3Qgb3BlbiAkZlxuIjsKKwl3aGlsZSAoPEZJTFRFUl9JTj4pCisJeworCSAgICBteSAkbGluZSA9ICRfOworCSAgICAkbGluZSA9fiBzL1wkKFtBLVpdW2Etel0rKTpbXlwkXStcJC9cJCQxXCQvZzsKKwkgICAgcHJpbnQgRklMVEVSX09VVCAkbGluZTsKKwl9CisJY2xvc2UgRklMVEVSX0lOOworCWNsb3NlIEZJTFRFUl9PVVQ7CisgICAgfQogfQorCiBpZiAoJGRpcnR5KSB7CiAgICAgaWYgKCRvcHRfZikgewl3YXJuICJUaGUgdHJlZSBpcyBub3QgY2xlYW4gLS0gZm9yY2VkIG1lcmdlXG4iOwogCSRkaXJ0eSA9IDA7CkBAIC0zNzAsNyArNDExLDcgQEAKIAogc3ViIHVzYWdlIHsKIAlwcmludCBTVERFUlIgPDxFTkQ7Ci1Vc2FnZTogR0lUX0RJUj0vcGF0aC90by8uZ2l0IGdpdCBjdnNleHBvcnRjb21taXQgWy1oXSBbLXBdIFstdl0gWy1jXSBbLWZdIFstdV0gWy13IGN2c3dvcmtkaXJdIFstbSBtc2dwcmVmaXhdIFsgcGFyZW50IF0gY29tbWl0CitVc2FnZTogR0lUX0RJUj0vcGF0aC90by8uZ2l0IGdpdCBjdnNleHBvcnRjb21taXQgWy1oXSBbLXBdIFstdl0gWy1jXSBbLWZdIFstdV0gWy1rXSBbLXcgY3Zzd29ya2Rpcl0gWy1tIG1zZ3ByZWZpeF0gWyBwYXJlbnQgXSBjb21taXQKIEVORAogCWV4aXQoMSk7CiB9CmRpZmYgLS1naXQgYS9naXQtY3Zzc2VydmVyLnBlcmwgYi9naXQtY3Zzc2VydmVyLnBlcmwKaW5kZXggYWI2Y2VhMy4uNmRjNDVmNSAxMDA3NTUKLS0tIGEvZ2l0LWN2c3NlcnZlci5wZXJsCisrKyBiL2dpdC1jdnNzZXJ2ZXIucGVybApAQCAtMjg1LDcgKzI4NSw3IEBACiAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgbXkgQGdpdHZhcnMgPSBgZ2l0LWNvbmZpZyAtbGA7CisgICAgbXkgQGdpdHZhcnMgPSBgZ2l0IGNvbmZpZyAtbGA7CiAgICAgaWYgKCQ/KSB7CiAgICAgICAgcHJpbnQgIkUgcHJvYmxlbXMgZXhlY3V0aW5nIGdpdC1jb25maWcgb24gdGhlIHNlcnZlciAtLSB0aGlzIGlzIG5vdCBhIGdpdCByZXBvc2l0b3J5IG9yIHRoZSBQQVRIIGlzIG5vdCBzZXQgY29ycmVjdGx5LlxuIjsKICAgICAgICAgcHJpbnQgIkUgXG4iOwpAQCAtNzAyLDcgKzcwMiw3IEBACiAgICAgIyBTYXZlIHRoZSBmaWxlIGRhdGEgaW4gJHN0YXRlCiAgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfZmlsZW5hbWV9ID0gJGZpbGVuYW1lOwogICAgICRzdGF0ZS0+e2VudHJpZXN9eyRzdGF0ZS0+e2RpcmVjdG9yeX0uJGRhdGF9e21vZGlmaWVkX21vZGV9ID0gJG1vZGU7Ci0gICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfaGFzaH0gPSBgZ2l0LWhhc2gtb2JqZWN0ICRmaWxlbmFtZWA7CisgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfaGFzaH0gPSBgZ2l0IGhhc2gtb2JqZWN0ICRmaWxlbmFtZWA7CiAgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfaGFzaH0gPX4gcy9ccy4qJC8vczsKIAogICAgICMkbG9nLT5kZWJ1ZygicmVxX01vZGlmaWVkIDogZmlsZT0kZGF0YSBtb2RlPSRtb2RlIHNpemU9JHNpemUiKTsKQEAgLTEyODksNyArMTI4OSw3IEBACiAKIAkjIGRvIGEgY2hlY2tvdXQgb2YgdGhlIGZpbGUgaWYgaXQgaXMgcGFydCBvZiB0aGlzIHRyZWUKICAgICAgICAgaWYgKCR3cmV2KSB7Ci0gICAgICAgICAgICBzeXN0ZW0oJ2dpdC1jaGVja291dC1pbmRleCcsICctZicsICctdScsICRmaWxlbmFtZSk7CisgICAgICAgICAgICBzeXN0ZW0oJ2dpdCcsICdjaGVja291dC1pbmRleCcsICctZicsICctdScsICRmaWxlbmFtZSk7CiAgICAgICAgICAgICB1bmxlc3MgKCQ/ID09IDApIHsKICAgICAgICAgICAgICAgICBkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0LWNoZWNrb3V0LWluZGV4IC1mIC11ICRmaWxlbmFtZSA6ICQhIjsKICAgICAgICAgICAgIH0KQEAgLTEzMzEsMTUgKzEzMzEsMTUgQEAKICAgICAgICAgewogICAgICAgICAgICAgJGxvZy0+aW5mbygiUmVtb3ZpbmcgZmlsZSAnJGZpbGVuYW1lJyIpOwogICAgICAgICAgICAgdW5saW5rKCRmaWxlbmFtZSk7Ci0gICAgICAgICAgICBzeXN0ZW0oImdpdC11cGRhdGUtaW5kZXgiLCAiLS1yZW1vdmUiLCAkZmlsZW5hbWUpOworICAgICAgICAgICAgc3lzdGVtKCJnaXQiLCAidXBkYXRlLWluZGV4IiwgIi0tcmVtb3ZlIiwgJGZpbGVuYW1lKTsKICAgICAgICAgfQogICAgICAgICBlbHNpZiAoICRhZGRmbGFnICkKICAgICAgICAgewogICAgICAgICAgICAgJGxvZy0+aW5mbygiQWRkaW5nIGZpbGUgJyRmaWxlbmFtZSciKTsKLSAgICAgICAgICAgIHN5c3RlbSgiZ2l0LXVwZGF0ZS1pbmRleCIsICItLWFkZCIsICRmaWxlbmFtZSk7CisgICAgICAgICAgICBzeXN0ZW0oImdpdCIsICJ1cGRhdGUtaW5kZXgiLCAiLS1hZGQiLCAkZmlsZW5hbWUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgJGxvZy0+aW5mbygiVXBkYXRpbmcgZmlsZSAnJGZpbGVuYW1lJyIpOwotICAgICAgICAgICAgc3lzdGVtKCJnaXQtdXBkYXRlLWluZGV4IiwgJGZpbGVuYW1lKTsKKyAgICAgICAgICAgIHN5c3RlbSgiZ2l0IiwgInVwZGF0ZS1pbmRleCIsICRmaWxlbmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEzNTEsNyArMTM1MSw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBteSAkdHJlZWhhc2ggPSBgZ2l0LXdyaXRlLXRyZWVgOworICAgIG15ICR0cmVlaGFzaCA9IGBnaXQgd3JpdGUtdHJlZWA7CiAgICAgY2hvbXAgJHRyZWVoYXNoOwogCiAgICAgJGxvZy0+ZGVidWcoIlRyZWVoYXNoIDogJHRyZWVoYXNoLCBQYXJlbnRoYXNoIDogJHBhcmVudGhhc2giKTsKQEAgLTEzNjgsNyArMTM2OCw3IEBACiAgICAgfQogICAgIGNsb3NlICRtc2dfZmg7CiAKLSAgICBteSAkY29tbWl0aGFzaCA9IGBnaXQtY29tbWl0LXRyZWUgJHRyZWVoYXNoIC1wICRwYXJlbnRoYXNoIDwgJG1zZ19maWxlbmFtZWA7CisgICAgbXkgJGNvbW1pdGhhc2ggPSBgZ2l0IGNvbW1pdC10cmVlICR0cmVlaGFzaCAtcCAkcGFyZW50aGFzaCA8ICRtc2dfZmlsZW5hbWVgOwogICAgIGNob21wKCRjb21taXRoYXNoKTsKICAgICAkbG9nLT5pbmZvKCJDb21taXQgaGFzaCA6ICRjb21taXRoYXNoIik7CiAKQEAgLTE4MjEsNyArMTgyMSw3IEBACiAJIyBUT0RPOiBpZiB3ZSBnb3QgYSByZXZpc2lvbiBmcm9tIHRoZSBjbGllbnQsIHVzZSB0aGF0IGluc3RlYWQKIAkjIHRvIGxvb2sgdXAgdGhlIGNvbW1pdGhhc2ggaW4gc3FsaXRlIChzdGlsbCBnb29kIHRvIGRlZmF1bHQgdG8KIAkjIHRoZSBjdXJyZW50IGhlYWQgYXMgd2UgZG8gbm93KQotCXN5c3RlbSgiZ2l0LXJlYWQtdHJlZSIsICRsYXN0c2VlbmluKTsKKwlzeXN0ZW0oImdpdCIsICJyZWFkLXRyZWUiLCAkbGFzdHNlZW5pbik7CiAJdW5sZXNzICgkPyA9PSAwKQogCXsKIAkgICAgcHJpbnQgIkUgZXJyb3IgcnVubmluZyBnaXQtcmVhZC10cmVlICRsYXN0c2VlbmluICRFTlZ7R0lUX0lOREVYX0ZJTEV9ICQhXG4iOwpAQCAtMTgzMCw3ICsxODMwLDcgQEAKIAkkbG9nLT5pbmZvKCJDcmVhdGVkIGluZGV4ICckRU5We0dJVF9JTkRFWF9GSUxFfScgd2l0aCBjb21taXQgJGxhc3RzZWVuaW4gLSBleGl0IHN0YXR1cyAkPyIpOwogCiAgICAgICAgICMgZG8gYSBjaGVja291dCBvZiB0aGUgZmlsZQotICAgICAgICBzeXN0ZW0oJ2dpdC1jaGVja291dC1pbmRleCcsICctZicsICctdScsICRmaWxlbmFtZSk7CisgICAgICAgIHN5c3RlbSgnZ2l0JywgJ2NoZWNrb3V0LWluZGV4JywgJy1mJywgJy11JywgJGZpbGVuYW1lKTsKICAgICAgICAgdW5sZXNzICgkPyA9PSAwKSB7CiAgICAgICAgICAgICBwcmludCAiRSBlcnJvciBydW5uaW5nIGdpdC1jaGVja291dC1pbmRleCAtZiAtdSAkZmlsZW5hbWUgOiAkIVxuIjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4NjEsNyArMTg2MSw3IEBACiAgICAgICAgIGNsb3NlIEFOTk9UQVRFSElOVFMKICAgICAgICAgICAgIG9yIChwcmludCAiRSBmYWlsZWQgdG8gd3JpdGUgJGFfaGludHM6ICQhXG4iKSwgcmV0dXJuOwogCi0gICAgICAgIG15IEBjbWQgPSAocXcoZ2l0LWFubm90YXRlIC1sIC1TKSwgJGFfaGludHMsICRmaWxlbmFtZSk7CisgICAgICAgIG15IEBjbWQgPSAocXcoZ2l0IGFubm90YXRlIC1sIC1TKSwgJGFfaGludHMsICRmaWxlbmFtZSk7CiAgICAgICAgIGlmICghb3BlbihBTk5PVEFURSwgIi18IiwgQGNtZCkpIHsKICAgICAgICAgICAgIHByaW50ICJFIGVycm9yIGludm9raW5nICIuIGpvaW4oJyAnLEBjbWQpIC4iOiAkIVxuIjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTIwNzgsMTcgKzIwNzgsMTcgQEAKIAogICAgIGRpZSAiTmVlZCBmaWxlaGFzaCIgdW5sZXNzICggZGVmaW5lZCAoICRmaWxlaGFzaCApIGFuZCAkZmlsZWhhc2ggPX4gL15bYS16QS1aMC05XXs0MH0kLyApOwogCi0gICAgbXkgJHR5cGUgPSBgZ2l0LWNhdC1maWxlIC10ICRmaWxlaGFzaGA7CisgICAgbXkgJHR5cGUgPSBgZ2l0IGNhdC1maWxlIC10ICRmaWxlaGFzaGA7CiAgICAgY2hvbXAgJHR5cGU7CiAKICAgICBkaWUgKCAiSW52YWxpZCB0eXBlICckdHlwZScgKGV4cGVjdGVkICdibG9iJykiICkgdW5sZXNzICggZGVmaW5lZCAoICR0eXBlICkgYW5kICR0eXBlIGVxICJibG9iIiApOwogCi0gICAgbXkgJHNpemUgPSBgZ2l0LWNhdC1maWxlIC1zICRmaWxlaGFzaGA7CisgICAgbXkgJHNpemUgPSBgZ2l0IGNhdC1maWxlIC1zICRmaWxlaGFzaGA7CiAgICAgY2hvbXAgJHNpemU7CiAKICAgICAkbG9nLT5kZWJ1ZygidHJhbnNtaXRmaWxlKCRmaWxlaGFzaCkgc2l6ZT0kc2l6ZSwgdHlwZT0kdHlwZSIpOwogCi0gICAgaWYgKCBvcGVuIG15ICRmaCwgJy18JywgImdpdC1jYXQtZmlsZSIsICJibG9iIiwgJGZpbGVoYXNoICkKKyAgICBpZiAoIG9wZW4gbXkgJGZoLCAnLXwnLCAiZ2l0IiwgImNhdC1maWxlIiwgImJsb2IiLCAkZmlsZWhhc2ggKQogICAgIHsKICAgICAgICAgaWYgKCBkZWZpbmVkICggJG9wdGlvbnMtPnt0YXJnZXRmaWxlfSApICkKICAgICAgICAgewpAQCAtMjkzNSw3ICsyOTM1LDcgQEAKICAgICAgICAgcHVzaCBAZ2l0X2xvZ19wYXJhbXMsICRzZWxmLT57bW9kdWxlfTsKICAgICB9CiAgICAgIyBnaXQtcmV2LWxpc3QgaXMgdGhlIGJhY2tlbmQgLyBwbHVtYmluZyB2ZXJzaW9uIG9mIGdpdC1sb2cKLSAgICBvcGVuKEdJVExPRywgJy18JywgJ2dpdC1yZXYtbGlzdCcsIEBnaXRfbG9nX3BhcmFtcykgb3IgZGllICJDYW5ub3QgY2FsbCBnaXQtcmV2LWxpc3Q6ICQhIjsKKyAgICBvcGVuKEdJVExPRywgJy18JywgJ2dpdCcsICdyZXYtbGlzdCcsIEBnaXRfbG9nX3BhcmFtcykgb3IgZGllICJDYW5ub3QgY2FsbCBnaXQtcmV2LWxpc3Q6ICQhIjsKIAogICAgIG15IEBjb21taXRzOwogCkBAIC0zMDIxLDcgKzMwMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgICAgICAgfQogCQkgICAgbXkgJGJhc2UgPSBldmFsIHsKLQkJCSAgICBzYWZlX3BpcGVfY2FwdHVyZSgnZ2l0LW1lcmdlLWJhc2UnLAorCQkJICAgIHNhZmVfcGlwZV9jYXB0dXJlKCdnaXQnLCAnbWVyZ2UtYmFzZScsCiAJCQkJCQkgJGxhc3RwaWNrZWQsICRwYXJlbnQpOwogCQkgICAgfTsKIAkJICAgICMgVGhlIHR3byBicmFuY2hlcyBtYXkgbm90IGJlIHJlbGF0ZWQgYXQgYWxsLApAQCAtMzAzMyw3ICszMDMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKCRiYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBteSBAbWVyZ2VkOwogICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmludCAid2FudCB0byBsb2cgYmV0d2VlbiAgJGJhc2UgJHBhcmVudCBcbiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVuKEdJVExPRywgJy18JywgJ2dpdC1sb2cnLCAnLS1wcmV0dHk9bWVkaXVtJywgIiRiYXNlLi4kcGFyZW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZW4oR0lUTE9HLCAnLXwnLCAnZ2l0JywgJ2xvZycsICctLXByZXR0eT1tZWRpdW0nLCAiJGJhc2UuLiRwYXJlbnQiKQogCQkJICBvciBkaWUgIkNhbm5vdCBjYWxsIGdpdC1sb2c6ICQhIjsKICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRtZXJnZWRoYXNoOwogICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDxHSVRMT0c+KSB7CkBAIC0zMDc1LDcgKzMwNzUsNyBAQAogCiAgICAgICAgIGlmICggZGVmaW5lZCAoICRsYXN0cGlja2VkICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBteSAkZmlsZXBpcGUgPSBvcGVuKEZJTEVMSVNULCAnLXwnLCAnZ2l0LWRpZmYtdHJlZScsICcteicsICctcicsICRsYXN0cGlja2VkLCAkY29tbWl0LT57aGFzaH0pIG9yIGRpZSgiQ2Fubm90IGNhbGwgZ2l0LWRpZmYtdHJlZSA6ICQhIik7CisgICAgICAgICAgICBteSAkZmlsZXBpcGUgPSBvcGVuKEZJTEVMSVNULCAnLXwnLCAnZ2l0JywgJ2RpZmYtdHJlZScsICcteicsICctcicsICRsYXN0cGlja2VkLCAkY29tbWl0LT57aGFzaH0pIG9yIGRpZSgiQ2Fubm90IGNhbGwgZ2l0LWRpZmYtdHJlZSA6ICQhIik7CiAJICAgIGxvY2FsICgkLykgPSAiXDAiOwogICAgICAgICAgICAgd2hpbGUgKCA8RklMRUxJU1Q+ICkKICAgICAgICAgICAgIHsKQEAgLTMxNDksNyArMzE0OSw3IEBACiAgICAgICAgICAgICAjIHRoaXMgaXMgdXNlZCB0byBkZXRlY3QgZmlsZXMgcmVtb3ZlZCBmcm9tIHRoZSByZXBvCiAgICAgICAgICAgICBteSAkc2Vlbl9maWxlcyA9IHt9OwogCi0gICAgICAgICAgICBteSAkZmlsZXBpcGUgPSBvcGVuKEZJTEVMSVNULCAnLXwnLCAnZ2l0LWxzLXRyZWUnLCAnLXonLCAnLXInLCAkY29tbWl0LT57aGFzaH0pIG9yIGRpZSgiQ2Fubm90IGNhbGwgZ2l0LWxzLXRyZWUgOiAkISIpOworICAgICAgICAgICAgbXkgJGZpbGVwaXBlID0gb3BlbihGSUxFTElTVCwgJy18JywgJ2dpdCcsICdscy10cmVlJywgJy16JywgJy1yJywgJGNvbW1pdC0+e2hhc2h9KSBvciBkaWUoIkNhbm5vdCBjYWxsIGdpdC1scy10cmVlIDogJCEiKTsKIAkgICAgbG9jYWwgJC8gPSAiXDAiOwogICAgICAgICAgICAgd2hpbGUgKCA8RklMRUxJU1Q+ICkKICAgICAgICAgICAgIHsKQEAgLTM0NTEsNyArMzQ1MSw3IEBACiAgICAgICAgIHJldHVybiAkbWVzc2FnZTsKICAgICB9CiAKLSAgICBteSBAbGluZXMgPSBzYWZlX3BpcGVfY2FwdHVyZSgiZ2l0LWNhdC1maWxlIiwgImNvbW1pdCIsICRjb21taXRoYXNoKTsKKyAgICBteSBAbGluZXMgPSBzYWZlX3BpcGVfY2FwdHVyZSgiZ2l0IiwgImNhdC1maWxlIiwgImNvbW1pdCIsICRjb21taXRoYXNoKTsKICAgICBzaGlmdCBAbGluZXMgd2hpbGUgKCAkbGluZXNbMF0gPX4gL1xTLyApOwogICAgICRtZXNzYWdlID0gam9pbigiIixAbGluZXMpOwogICAgICRtZXNzYWdlIC49ICIgIiBpZiAoICRtZXNzYWdlID1+IC9cbiQvICk7CmRpZmYgLS1naXQgYS9naXQtZmlsdGVyLWJyYW5jaC5zaCBiL2dpdC1maWx0ZXItYnJhbmNoLnNoCmluZGV4IDM3ZTA0NGQuLmE0ODBkNmYgMTAwNzU1Ci0tLSBhL2dpdC1maWx0ZXItYnJhbmNoLnNoCisrKyBiL2dpdC1maWx0ZXItYnJhbmNoLnNoCkBAIC05NywxMiArOTcsMTIgQEAKIAllY2hvICJjYXNlIFwiXCRHSVRfJHt1aWR9X05BTUVcIiBpbiBcIlwiKSBHSVRfJHt1aWR9X05BTUU9XCJcJHtHSVRfJHt1aWR9X0VNQUlMJSVAKn1cIiAmJiBleHBvcnQgR0lUXyR7dWlkfV9OQU1FOzsgZXNhYyIKIH0KIAotVVNBR0U9IlstLWVudi1maWx0ZXIgPGNvbW1hbmQ+XSBbLS10cmVlLWZpbHRlciA8Y29tbWFuZD5dIFwKLVstLWluZGV4LWZpbHRlciA8Y29tbWFuZD5dIFstLXBhcmVudC1maWx0ZXIgPGNvbW1hbmQ+XSBcCi1bLS1tc2ctZmlsdGVyIDxjb21tYW5kPl0gWy0tY29tbWl0LWZpbHRlciA8Y29tbWFuZD5dIFwKLVstLXRhZy1uYW1lLWZpbHRlciA8Y29tbWFuZD5dIFstLXN1YmRpcmVjdG9yeS1maWx0ZXIgPGRpcmVjdG9yeT5dIFwKLVstLW9yaWdpbmFsIDxuYW1lc3BhY2U+XSBbLWQgPGRpcmVjdG9yeT5dIFstZiB8IC0tZm9yY2VdIFwKLVs8cmV2LWxpc3Qgb3B0aW9ucz4uLi5dIgorVVNBR0U9IlstLWVudi1maWx0ZXIgPGNvbW1hbmQ+XSBbLS10cmVlLWZpbHRlciA8Y29tbWFuZD5dCisgICAgICAgICAgICBbLS1pbmRleC1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1wYXJlbnQtZmlsdGVyIDxjb21tYW5kPl0KKyAgICAgICAgICAgIFstLW1zZy1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1jb21taXQtZmlsdGVyIDxjb21tYW5kPl0KKyAgICAgICAgICAgIFstLXRhZy1uYW1lLWZpbHRlciA8Y29tbWFuZD5dIFstLXN1YmRpcmVjdG9yeS1maWx0ZXIgPGRpcmVjdG9yeT5dCisgICAgICAgICAgICBbLS1vcmlnaW5hbCA8bmFtZXNwYWNlPl0gWy1kIDxkaXJlY3Rvcnk+XSBbLWYgfCAtLWZvcmNlXQorICAgICAgICAgICAgWzxyZXYtbGlzdCBvcHRpb25zPi4uLl0iCiAKIE9QVElPTlNfU1BFQz0KIC4gZ2l0LXNoLXNldHVwCmRpZmYgLS1naXQgYS9naXQtaW5zdGF3ZWIuc2ggYi9naXQtaW5zdGF3ZWIuc2gKaW5kZXggNWY0NDE5Yi4uNWY1Y2FjNyAxMDA3NTUKLS0tIGEvZ2l0LWluc3Rhd2ViLnNoCisrKyBiL2dpdC1pbnN0YXdlYi5zaApAQCAtMjU2LDcgKzI1Niw3IEBACiAJbWtkaXIgLXAgIiRHSVRfRElSL2dpdHdlYi9sb2dzIgogCWJpbmQ9CiAJdGVzdCB4IiRsb2NhbCIgPSB4dHJ1ZSAmJiBiaW5kPScxMjcuMC4wLjE6JwotCWVjaG8gJ3RleHQvY3NzIGNzcycgPiAkZnFnaXRkaXIvbWltZS50eXBlcworCWVjaG8gJ3RleHQvY3NzIGNzcycgPiAiJGZxZ2l0ZGlyL21pbWUudHlwZXMiCiAJY2F0ID4gIiRjb25mIiA8PEVPRgogU2VydmVyTmFtZSAiZ2l0LWluc3Rhd2ViIgogU2VydmVyUm9vdCAiJGZxZ2l0ZGlyL2dpdHdlYiIKQEAgLTI3MiwxMyArMjcyLDEzIEBACiAJCWZpCiAJZG9uZQogCWNhdCA+PiAiJGNvbmYiIDw8RU9GCi1UeXBlc0NvbmZpZyAkZnFnaXRkaXIvbWltZS50eXBlcworVHlwZXNDb25maWcgIiRmcWdpdGRpci9taW1lLnR5cGVzIgogRGlyZWN0b3J5SW5kZXggZ2l0d2ViLmNnaQogRU9GCiAKIAkjIGNoZWNrIHRvIHNlZSBpZiBEZW5uaXMgU3Rvc2JlcmcncyBtb2RfcGVybCBjb21wYXRpYmlsaXR5IHBhdGNoCiAJIyAoPDIwMDYwNjIxMTMwNzA4LkdjYmM2ZTVjQGxlb25vdi5zdG9zYmVyZy5uZXQ+KSBoYXMgYmVlbiBhcHBsaWVkCi0JaWYgdGVzdCAtZiAiJG1vZHVsZV9wYXRoL21vZF9wZXJsLnNvIiAmJiBncmVwICdeb3VyICRnaXRiaW4nIFwKKwlpZiB0ZXN0IC1mICIkbW9kdWxlX3BhdGgvbW9kX3Blcmwuc28iICYmIGdyZXAgJ01PRF9QRVJMJyBcCiAJCQkJIiRHSVRfRElSL2dpdHdlYi9naXR3ZWIuY2dpIiA+L2Rldi9udWxsCiAJdGhlbgogCQkjIGZhdm9yIG1vZF9wZXJsIGlmIGF2YWlsYWJsZQpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdldG9vbC0tbGliLnNoIGIvZ2l0LW1lcmdldG9vbC0tbGliLnNoCmluZGV4IGExNmEyNzkuLmJmYjAxZjcgMTAwNjQ0Ci0tLSBhL2dpdC1tZXJnZXRvb2wtLWxpYi5zaAorKysgYi9naXQtbWVyZ2V0b29sLS1saWIuc2gKQEAgLTE4LDYgKzE4LDkgQEAKIAllbWVyZ2UpCiAJCWVjaG8gZW1hY3MKIAkJOzsKKwlhcmF4aXMpCisJCWVjaG8gY29tcGFyZQorCQk7OwogCSopCiAJCWVjaG8gIiQxIgogCQk7OwpAQCAtNDMsNyArNDYsNyBAQAogdmFsaWRfdG9vbCAoKSB7CiAJY2FzZSAiJDEiIGluCiAJa2RpZmYzIHwgdGtkaWZmIHwgeHhkaWZmIHwgbWVsZCB8IG9wZW5kaWZmIHwgXAotCWVtZXJnZSB8IHZpbWRpZmYgfCBndmltZGlmZiB8IGVjbWVyZ2UgfCBkaWZmdXNlKQorCWVtZXJnZSB8IHZpbWRpZmYgfCBndmltZGlmZiB8IGVjbWVyZ2UgfCBkaWZmdXNlIHwgYXJheGlzKQogCQk7OyAjIGhhcHB5CiAJdG9ydG9pc2VtZXJnZSkKIAkJaWYgISBtZXJnZV9tb2RlOyB0aGVuCkBAIC0yMjgsOCArMjMxLDggQEAKIAkJCWZpCiAJCQljaGVja191bmNoYW5nZWQKIAkJZWxzZQotCQkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiBcCi0JCQkJLS1kZWZhdWx0IC0tbW9kZT1tZXJnZTIgLS10bz0iJE1FUkdFRCIKKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtLWRlZmF1bHQgLS1tb2RlPWRpZmYyIFwKKwkJCQkiJExPQ0FMIiAiJFJFTU9URSIKIAkJZmkKIAkJOzsKIAllbWVyZ2UpCkBAIC0yNDgsNyArMjUxLDcgQEAKIAkJCXN0YXR1cz0kPwogCQllbHNlCiAJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgZW1lcmdlLWZpbGVzLWNvbW1hbmQgXAotCQkJCSIkTE9DQUwiICIkUkVNT1RFIiAiJChiYXNlbmFtZSAiJE1FUkdFRCIpIgorCQkJCSIkTE9DQUwiICIkUkVNT1RFIgogCQlmaQogCQk7OwogCXRvcnRvaXNlbWVyZ2UpCkBAIC0yNjMsNiArMjY2LDI0IEBACiAJCQlzdGF0dXM9MQogCQlmaQogCQk7OworCWFyYXhpcykKKwkJaWYgbWVyZ2VfbW9kZTsgdGhlbgorCQkJdG91Y2ggIiRCQUNLVVAiCisJCQlpZiAkYmFzZV9wcmVzZW50OyB0aGVuCisJCQkJIiRtZXJnZV90b29sX3BhdGgiIC13YWl0IC1tZXJnZSAtMyAtYTEgXAorCQkJCQkiJEJBU0UiICIkTE9DQUwiICIkUkVNT1RFIiAiJE1FUkdFRCIgXAorCQkJCQk+L2Rldi9udWxsIDI+JjEKKwkJCWVsc2UKKwkJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLXdhaXQgLTIgXAorCQkJCQkiJExPQ0FMIiAiJFJFTU9URSIgIiRNRVJHRUQiIFwKKwkJCQkJPi9kZXYvbnVsbCAyPiYxCisJCQlmaQorCQkJY2hlY2tfdW5jaGFuZ2VkCisJCWVsc2UKKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtd2FpdCAtMiAiJExPQ0FMIiAiJFJFTU9URSIgXAorCQkJCT4vZGV2L251bGwgMj4mMQorCQlmaQorCQk7OwogCSopCiAJCW1lcmdlX3Rvb2xfY21kPSIkKGdldF9tZXJnZV90b29sX2NtZCAiJDEiKSIKIAkJaWYgdGVzdCAteiAiJG1lcmdlX3Rvb2xfY21kIjsgdGhlbgpAQCAtMzAyLDcgKzMyMyw3IEBACiAJCWVsc2UKIAkJCXRvb2xzPSJvcGVuZGlmZiBrZGlmZjMgdGtkaWZmIHh4ZGlmZiBtZWxkICR0b29scyIKIAkJZmkKLQkJdG9vbHM9IiR0b29scyBndmltZGlmZiBkaWZmdXNlIGVjbWVyZ2UiCisJCXRvb2xzPSIkdG9vbHMgZ3ZpbWRpZmYgZGlmZnVzZSBlY21lcmdlIGFyYXhpcyIKIAlmaQogCWlmIGVjaG8gIiR7VklTVUFMOi0kRURJVE9SfSIgfCBncmVwIGVtYWNzID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KIAkJIyAkRURJVE9SIGlzIGVtYWNzIHNvIGFkZCBlbWVyZ2UgYXMgYSBjYW5kaWRhdGUKZGlmZiAtLWdpdCBhL2dpdC1wYXJzZS1yZW1vdGUuc2ggYi9naXQtcGFyc2UtcmVtb3RlLnNoCmluZGV4IGEyOTY3MTkuLjVmNDdiMTggMTAwNzU1Ci0tLSBhL2dpdC1wYXJzZS1yZW1vdGUuc2gKKysrIGIvZ2l0LXBhcnNlLXJlbW90ZS5zaApAQCAtNjAsMjA1ICs2MCwzNiBAQAogCWVjaG8gJHtvcmlnaW46LW9yaWdpbn0KIH0KIAotZ2V0X3JlbW90ZV9kZWZhdWx0X3JlZnNfZm9yX3B1c2ggKCkgewotCWRhdGFfc291cmNlPSQoZ2V0X2RhdGFfc291cmNlICIkMSIpCi0JY2FzZSAiJGRhdGFfc291cmNlIiBpbgotCScnIHwgYnJhbmNoZXMgfCBzZWxmKQotCQk7OyAjIG5vIGRlZmF1bHQgcHVzaCBtYXBwaW5nLCBqdXN0IHNlbmQgbWF0Y2hpbmcgcmVmcy4KLQljb25maWcpCi0JCWdpdCBjb25maWcgLS1nZXQtYWxsICJyZW1vdGUuJDEucHVzaCIgOzsKLQlyZW1vdGVzKQotCQlzZWQgLW5lICcvXlB1c2g6ICovewotCQkJcy8vL3AKLQkJfScgIiRHSVRfRElSL3JlbW90ZXMvJDEiIDs7Ci0JKikKLQkJZGllICJpbnRlcm5hbCBlcnJvcjogZ2V0LXJlbW90ZS1kZWZhdWx0LXJlZi1mb3ItcHVzaCAkMSIgOzsKLQllc2FjCi19Ci0KLSMgQ2FsbGVkIGZyb20gY2Fub25fcmVmc19saXN0X2Zvcl9mZXRjaCAtZCAiJHJlbW90ZSIsIHdoaWNoCi0jIGlzIGNhbGxlZCBmcm9tIGdldF9yZW1vdGVfZGVmYXVsdF9yZWZzX2Zvcl9mZXRjaCB0byBncm9rCi0jIHJlZnNwZWNzIHRoYXQgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uLCBidXQgbm90Ci0jIGZyb20gZ2V0X3JlbW90ZV9yZWZzX2Zvcl9mZXRjaCB3aGVuIGl0IGRlYWxzIHdpdGggcmVmc3BlY3MKLSMgc3VwcGxpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gICRsc19yZW1vdGVfcmVzdWx0IGhhcyB0aGUgbGlzdAotIyBvZiByZWZzIGF2YWlsYWJsZSBhdCByZW1vdGUuCi0jCi0jIFRoZSBmaXJzdCB0b2tlbiByZXR1cm5lZCBpcyBlaXRoZXIgImV4cGxpY2l0IiBvciAiZ2xvYiI7IHRoaXMKLSMgaXMgdG8gaGVscCBwcmV2ZW50IHJhbmRvbWx5ICJnbG9iYmVkIiByZWYgZnJvbSBiZWluZyBjaG9zZW4gYXMKLSMgYSBtZXJnZSBjYW5kaWRhdGUKLWV4cGFuZF9yZWZzX3dpbGRjYXJkICgpIHsKLQllY2hvICIkbHNfcmVtb3RlX3Jlc3VsdCIgfAotCWdpdCBmZXRjaC0tdG9vbCBleHBhbmQtcmVmcy13aWxkY2FyZCAiLSIgIiRAIgotfQotCi0jIFN1YnJvdXRpbmUgdG8gY2Fub25pY2FsaXplIHJlbW90ZTpsb2NhbCBub3RhdGlvbi4KLWNhbm9uX3JlZnNfbGlzdF9mb3JfZmV0Y2ggKCkgewotCSMgSWYgY2FsbGVkIGZyb20gZ2V0X3JlbW90ZV9kZWZhdWx0X3JlZnNfZm9yX2ZldGNoCi0JIyBsZWF2ZSB0aGUgYnJhbmNoZXMgaW4gYnJhbmNoLiR7Y3Vycl9icmFuY2h9Lm1lcmdlIGFsb25lLAotCSMgb3IgdGhlIGZpcnN0IG9uZSBvdGhlcndpc2U7IGFkZCBwcmVmaXggLiB0byB0aGUgcmVzdAotCSMgdG8gcHJldmVudCB0aGUgc2Vjb25kYXJ5IGJyYW5jaGVzIHRvIGJlIG1lcmdlZCBieSBkZWZhdWx0LgotCW1lcmdlX2JyYW5jaGVzPQotCWN1cnJfYnJhbmNoPQotCWlmIHRlc3QgIiQxIiA9ICItZCIKLQl0aGVuCi0JCXNoaWZ0IDsgcmVtb3RlPSIkMSIgOyBzaGlmdAotCQlzZXQgJChleHBhbmRfcmVmc193aWxkY2FyZCAiJHJlbW90ZSIgIiRAIikKLQkJaXNfZXhwbGljaXQ9IiQxIgotCQlzaGlmdAotCQlpZiB0ZXN0ICIkcmVtb3RlIiA9ICIkKGdldF9kZWZhdWx0X3JlbW90ZSkiCi0JCXRoZW4KLQkJCWN1cnJfYnJhbmNoPSQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEIHwgXAotCQkJICAgIHNlZCAtZSAnc3xecmVmcy9oZWFkcy98fCcpCi0JCQltZXJnZV9icmFuY2hlcz0kKGdpdCBjb25maWcgXAotCQkJICAgIC0tZ2V0LWFsbCAiYnJhbmNoLiR7Y3Vycl9icmFuY2h9Lm1lcmdlIikKLQkJZmkKLQkJaWYgdGVzdCAteiAiJG1lcmdlX2JyYW5jaGVzIiAmJiB0ZXN0ICRpc19leHBsaWNpdCAhPSBleHBsaWNpdAotCQl0aGVuCi0JCQltZXJnZV9icmFuY2hlcz0uLnRoaXMud2lsbC5uZXZlci5tYXRjaC5hbnkucmVmLi4KLQkJZmkKLQlmaQotCWZvciByZWYKLQlkbwotCQlmb3JjZT0KLQkJY2FzZSAiJHJlZiIgaW4KLQkJKyopCi0JCQlyZWY9JChleHByICJ6JHJlZiIgOiAneitcKC4qXCknKQotCQkJZm9yY2U9KwotCQkJOzsKLQkJZXNhYwotCQlleHByICJ6JHJlZiIgOiAnei4qOicgPi9kZXYvbnVsbCB8fCByZWY9IiR7cmVmfToiCi0JCXJlbW90ZT0kKGV4cHIgInokcmVmIiA6ICd6XChbXjpdKlwpOicpCi0JCWxvY2FsPSQoZXhwciAieiRyZWYiIDogJ3pbXjpdKjpcKC4qXCknKQotCQlkb3RfcHJlZml4PS4KLQkJaWYgdGVzdCAteiAiJG1lcmdlX2JyYW5jaGVzIgotCQl0aGVuCi0JCQltZXJnZV9icmFuY2hlcz0kcmVtb3RlCi0JCQlkb3RfcHJlZml4PQotCQllbHNlCi0JCQlmb3IgbWVyZ2VfYnJhbmNoIGluICRtZXJnZV9icmFuY2hlcwotCQkJZG8KLQkJCSAgICBbICIkcmVtb3RlIiA9ICIkbWVyZ2VfYnJhbmNoIiBdICYmCi0JCQkgICAgZG90X3ByZWZpeD0gJiYgYnJlYWsKLQkJCWRvbmUKLQkJZmkKLQkJY2FzZSAiJHJlbW90ZSIgaW4KLQkJJycgfCBIRUFEICkgcmVtb3RlPUhFQUQgOzsKLQkJcmVmcy8qKSA7OwotCQloZWFkcy8qIHwgdGFncy8qIHwgcmVtb3Rlcy8qICkgcmVtb3RlPSJyZWZzLyRyZW1vdGUiIDs7Ci0JCSopIHJlbW90ZT0icmVmcy9oZWFkcy8kcmVtb3RlIiA7OwotCQllc2FjCi0JCWNhc2UgIiRsb2NhbCIgaW4KLQkJJycpIGxvY2FsPSA7OwotCQlyZWZzLyopIDs7Ci0JCWhlYWRzLyogfCB0YWdzLyogfCByZW1vdGVzLyogKSBsb2NhbD0icmVmcy8kbG9jYWwiIDs7Ci0JCSopIGxvY2FsPSJyZWZzL2hlYWRzLyRsb2NhbCIgOzsKLQkJZXNhYwotCi0JCWlmIGxvY2FsX3JlZl9uYW1lPSQoZXhwciAieiRsb2NhbCIgOiAnenJlZnMvXCguKlwpJykKLQkJdGhlbgotCQkgICBnaXQgY2hlY2stcmVmLWZvcm1hdCAiJGxvY2FsX3JlZl9uYW1lIiB8fAotCQkgICBkaWUgIiogcmVmdXNpbmcgdG8gY3JlYXRlIGZ1bm55IHJlZiAnJGxvY2FsX3JlZl9uYW1lJyBsb2NhbGx5IgotCQlmaQotCQllY2hvICIke2RvdF9wcmVmaXh9JHtmb3JjZX0ke3JlbW90ZX06JHtsb2NhbH0iCi0JZG9uZQotfQotCi0jIFJldHVybnMgbGlzdCBvZiBzcmM6IChubyBzdG9yZSksIG9yIHNyYzpkc3QgKHN0b3JlKQotZ2V0X3JlbW90ZV9kZWZhdWx0X3JlZnNfZm9yX2ZldGNoICgpIHsKLQlkYXRhX3NvdXJjZT0kKGdldF9kYXRhX3NvdXJjZSAiJDEiKQotCWNhc2UgIiRkYXRhX3NvdXJjZSIgaW4KLQknJykKLQkJZWNobyAiSEVBRDoiIDs7Ci0Jc2VsZikKLQkgICAgICAgIGNhbm9uX3JlZnNfbGlzdF9mb3JfZmV0Y2ggLWQgIiQxIiBcCi0JCQkkKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUocmVmbmFtZSk6JykKLQkJOzsKLQljb25maWcpCi0JCWNhbm9uX3JlZnNfbGlzdF9mb3JfZmV0Y2ggLWQgIiQxIiBcCi0JCQkkKGdpdCBjb25maWcgLS1nZXQtYWxsICJyZW1vdGUuJDEuZmV0Y2giKSA7OwotCWJyYW5jaGVzKQotCQlyZW1vdGVfYnJhbmNoPSQoc2VkIC1uZSAnLyMvcy8uKiMvL3AnICIkR0lUX0RJUi9icmFuY2hlcy8kMSIpCi0JCWNhc2UgIiRyZW1vdGVfYnJhbmNoIiBpbiAnJykgcmVtb3RlX2JyYW5jaD1tYXN0ZXIgOzsgZXNhYwotCQllY2hvICJyZWZzL2hlYWRzLyR7cmVtb3RlX2JyYW5jaH06cmVmcy9oZWFkcy8kMSIKLQkJOzsKLQlyZW1vdGVzKQotCQljYW5vbl9yZWZzX2xpc3RfZm9yX2ZldGNoIC1kICIkMSIgJChzZWQgLW5lICcvXlB1bGw6ICovewotCQkJCQkJcy8vL3AKLQkJCQkJfScgIiRHSVRfRElSL3JlbW90ZXMvJDEiKQotCQk7OwotCSopCi0JCWRpZSAiaW50ZXJuYWwgZXJyb3I6IGdldC1yZW1vdGUtZGVmYXVsdC1yZWYtZm9yLWZldGNoICQxIiA7OwotCWVzYWMKLX0KLQotZ2V0X3JlbW90ZV9yZWZzX2Zvcl9wdXNoICgpIHsKK2dldF9yZW1vdGVfbWVyZ2VfYnJhbmNoICgpIHsKIAljYXNlICIkIyIgaW4KLQkwKSBkaWUgImludGVybmFsIGVycm9yOiBnZXQtcmVtb3RlLXJlZnMtZm9yLXB1c2guIiA7OwotCTEpIGdldF9yZW1vdGVfZGVmYXVsdF9yZWZzX2Zvcl9wdXNoICIkQCIgOzsKLQkqKSBzaGlmdDsgZWNobyAiJEAiIDs7Ci0JZXNhYwotfQotCi1nZXRfcmVtb3RlX3JlZnNfZm9yX2ZldGNoICgpIHsKLQljYXNlICIkIyIgaW4KLQkwKQotCSAgICBkaWUgImludGVybmFsIGVycm9yOiBnZXQtcmVtb3RlLXJlZnMtZm9yLWZldGNoLiIgOzsKLQkxKQotCSAgICBnZXRfcmVtb3RlX2RlZmF1bHRfcmVmc19mb3JfZmV0Y2ggIiRAIiA7OwotCSopCi0JICAgIHNoaWZ0Ci0JICAgIHRhZ19qdXN0X3NlZW49Ci0JICAgIGZvciByZWYKLQkgICAgZG8KLQkJaWYgdGVzdCAiJHRhZ19qdXN0X3NlZW4iCi0JCXRoZW4KLQkJICAgIGVjaG8gInJlZnMvdGFncy8ke3JlZn06cmVmcy90YWdzLyR7cmVmfSIKLQkJICAgIHRhZ19qdXN0X3NlZW49Ci0JCSAgICBjb250aW51ZQotCQllbHNlCi0JCSAgICBjYXNlICIkcmVmIiBpbgotCQkgICAgdGFnKQotCQkJdGFnX2p1c3Rfc2Vlbj15ZXMKLQkJCWNvbnRpbnVlCi0JCQk7OwotCQkgICAgZXNhYwotCQlmaQotCQljYW5vbl9yZWZzX2xpc3RfZm9yX2ZldGNoICIkcmVmIgotCSAgICBkb25lCisJMHwxKQorCSAgICBvcmlnaW49IiQxIgorCSAgICBkZWZhdWx0PSQoZ2V0X2RlZmF1bHRfcmVtb3RlKQorCSAgICB0ZXN0IC16ICIkb3JpZ2luIiAmJiBvcmlnaW49JGRlZmF1bHQKKwkgICAgY3Vycl9icmFuY2g9JChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpCisJICAgIFsgIiRvcmlnaW4iID0gIiRkZWZhdWx0IiBdICYmCisJICAgIGVjaG8gJChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHVwc3RyZWFtKScgJGN1cnJfYnJhbmNoKQogCSAgICA7OwotCWVzYWMKLX0KLQotcmVzb2x2ZV9hbHRlcm5hdGVzICgpIHsKLQkjIG9yaWdpbmFsIFVSTCAoeHh4LmdpdCkKLQl0b3BfPWBleHByICJ6JDEiIDogJ3pcKFteOl0qOi8qW14vXSpcKS8nYAotCXdoaWxlIHJlYWQgcGF0aAotCWRvCi0JCWNhc2UgIiRwYXRoIiBpbgotCQlcIyogfCAnJykKLQkJCWNvbnRpbnVlIDs7Ci0JCS8qKQotCQkJZWNobyAiJHRvcF8kcGF0aC8iIDs7Ci0JCS4uLyopCi0JCQkjIHJlbGF0aXZlIC0tIHVnbHkgYnV0IHNlZW1zIHRvIHdvcmsuCi0JCQllY2hvICIkMS9vYmplY3RzLyRwYXRoLyIgOzsKLQkJKikKLQkJCSMgZXhpdCBjb2RlIG1heSBub3QgYmUgY2F1Z2h0IGJ5IHRoZSByZWFkZXIuCi0JCQllY2hvICJiYWQgYWx0ZXJuYXRlOiAkcGF0aCIKLQkJCWV4aXQgMSA7OwotCQllc2FjCi0JZG9uZQotfQotCi1nZXRfdXBsb2FkcGFjayAoKSB7Ci0JZGF0YV9zb3VyY2U9JChnZXRfZGF0YV9zb3VyY2UgIiQxIikKLQljYXNlICIkZGF0YV9zb3VyY2UiIGluCi0JY29uZmlnKQotCQl1cGxwPSQoZ2l0IGNvbmZpZyAtLWdldCAicmVtb3RlLiQxLnVwbG9hZHBhY2siKQotCQllY2hvICR7dXBscDotZ2l0LXVwbG9hZC1wYWNrfQotCQk7OwogCSopCi0JCWVjaG8gImdpdC11cGxvYWQtcGFjayIKKwkgICAgcmVwbz0kMQorCSAgICBzaGlmdAorCSAgICByZWY9JDEKKwkgICAgIyBGSVhNRTogSXQgc2hvdWxkIHJldHVybiB0aGUgdHJhY2tpbmcgYnJhbmNoCisJICAgICMgICAgICAgIEN1cnJlbnRseSBvbmx5IHdvcmtzIHdpdGggdGhlIGRlZmF1bHQgbWFwcGluZworCSAgICBjYXNlICIkcmVmIiBpbgorCSAgICArKikKKwkJcmVmPSQoZXhwciAieiRyZWYiIDogJ3orXCguKlwpJykKIAkJOzsKKwkgICAgZXNhYworCSAgICBleHByICJ6JHJlZiIgOiAnei4qOicgPi9kZXYvbnVsbCB8fCByZWY9IiR7cmVmfToiCisJICAgIHJlbW90ZT0kKGV4cHIgInokcmVmIiA6ICd6XChbXjpdKlwpOicpCisJICAgIGNhc2UgIiRyZW1vdGUiIGluCisJICAgICcnIHwgSEVBRCApIHJlbW90ZT1IRUFEIDs7CisJICAgIGhlYWRzLyopIHJlbW90ZT0ke3JlbW90ZSNoZWFkcy99IDs7CisJICAgIHJlZnMvaGVhZHMvKikgcmVtb3RlPSR7cmVtb3RlI3JlZnMvaGVhZHMvfSA7OworCSAgICByZWZzLyogfCB0YWdzLyogfCByZW1vdGVzLyogKSByZW1vdGU9CisJICAgIGVzYWMKKworCSAgICBbIC1uICIkcmVtb3RlIiBdICYmIGVjaG8gInJlZnMvcmVtb3Rlcy8kcmVwby8kcmVtb3RlIgogCWVzYWMKIH0KZGlmZiAtLWdpdCBhL2dpdC1wdWxsLnNoIGIvZ2l0LXB1bGwuc2gKaW5kZXggY2FiMzY3YS4uMGYyNDE4MiAxMDA3NTUKLS0tIGEvZ2l0LXB1bGwuc2gKKysrIGIvZ2l0LXB1bGwuc2gKQEAgLTEyNCwxMyArMTI0LDE4IEBACiAJZ2l0IGRpZmYtaW5kZXggLS1pZ25vcmUtc3VibW9kdWxlcyAtLWNhY2hlZCAtLXF1aWV0IEhFQUQgLS0gfHwKIAlkaWUgInJlZnVzaW5nIHRvIHB1bGwgd2l0aCByZWJhc2U6IHlvdXIgd29ya2luZyB0cmVlIGlzIG5vdCB1cC10by1kYXRlIgogCisJb2xkcmVtb3RlcmVmPSAmJgogCS4gZ2l0LXBhcnNlLXJlbW90ZSAmJgotCW9yaWdpbj0iJDEiCi0JdGVzdCAteiAiJG9yaWdpbiIgJiYgb3JpZ2luPSQoZ2V0X2RlZmF1bHRfcmVtb3RlKQotCXJlZmxpc3Q9IiQoZ2V0X3JlbW90ZV9yZWZzX2Zvcl9mZXRjaCAiJEAiIDI+L2Rldi9udWxsIHwKLQkJc2VkICJzfHJlZnMvaGVhZHMvXCguKlwpOnxcMXwiKSIgJiYKLQlvbGRyZW1vdGVyZWY9IiQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSBcCi0JCSJyZWZzL3JlbW90ZXMvJG9yaWdpbi8kcmVmbGlzdCIpIgorCXJlbW90ZXJlZj0iJChnZXRfcmVtb3RlX21lcmdlX2JyYW5jaCAiJEAiIDI+L2Rldi9udWxsKSIgJiYKKwlvbGRyZW1vdGVyZWY9IiQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAiJHJlbW90ZXJlZiIpIiAmJgorCWZvciByZWZsb2cgaW4gJChnaXQgcmV2LWxpc3QgLWcgJHJlbW90ZXJlZiAyPi9kZXYvbnVsbCkKKwlkbworCQlpZiB0ZXN0ICIkcmVmbG9nIiA9ICIkKGdpdCBtZXJnZS1iYXNlICRyZWZsb2cgJGN1cnJfYnJhbmNoKSIKKwkJdGhlbgorCQkJb2xkcmVtb3RlcmVmPSIkcmVmbG9nIgorCQkJYnJlYWsKKwkJZmkKKwlkb25lCiB9CiBvcmlnX2hlYWQ9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IEhFQUQpCiBnaXQgZmV0Y2ggJHZlcmJvc2l0eSAtLXVwZGF0ZS1oZWFkLW9rICIkQCIgfHwgZXhpdCAxCmRpZmYgLS1naXQgYS9naXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaCBiL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoCmluZGV4IGY5NmQ4ODcuLjIzZGVkNDggMTAwNzU1Ci0tLSBhL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoCisrKyBiL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoCkBAIC03MDMsNyArNzAzLDcgQEAKIAkJCQkJcHJlc2VydmU9dAogCQkJCQlmb3IgcCBpbiAkKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLTEgJHNoYTEgfCBjdXQgLWQnICcgLXMgLWYyLSkKIAkJCQkJZG8KLQkJCQkJCWlmIHRlc3QgLWYgIiRSRVdSSVRURU4iLyRwIC1hIFwoICRwICE9ICRVUFNUUkVBTSAtbyAkc2hhMSA9ICRmaXJzdF9hZnRlcl91cHN0cmVhbSBcKQorCQkJCQkJaWYgdGVzdCAtZiAiJFJFV1JJVFRFTiIvJHAgLWEgXCggJHAgIT0gJE9OVE8gLW8gJHNoYTEgPSAkZmlyc3RfYWZ0ZXJfdXBzdHJlYW0gXCkKIAkJCQkJCXRoZW4KIAkJCQkJCQlwcmVzZXJ2ZT1mCiAJCQkJCQlmaQpkaWZmIC0tZ2l0IGEvZ2l0LXJlYmFzZS5zaCBiL2dpdC1yZWJhc2Uuc2gKaW5kZXggMzM0NjI5Zi4uMThiYzY5NCAxMDA3NTUKLS0tIGEvZ2l0LXJlYmFzZS5zaAorKysgYi9naXQtcmViYXNlLnNoCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8uCiAjCiAKLVVTQUdFPSdbLS1pbnRlcmFjdGl2ZSB8IC1pXSBbLXZdIFstLWZvcmNlLXJlYmFzZSB8IC1mXSBbLS1vbnRvIDxuZXdiYXNlPl0gWzx1cHN0cmVhbT58LS1yb290XSBbPGJyYW5jaD5dJworVVNBR0U9J1stLWludGVyYWN0aXZlIHwgLWldIFstdl0gWy0tZm9yY2UtcmViYXNlIHwgLWZdIFstLW9udG8gPG5ld2Jhc2U+XSBbPHVwc3RyZWFtPnwtLXJvb3RdIFs8YnJhbmNoPl0gWy0tcXVpZXQgfCAtcV0nCiBMT05HX1VTQUdFPSdnaXQtcmViYXNlIHJlcGxhY2VzIDxicmFuY2g+IHdpdGggYSBuZXcgYnJhbmNoIG9mIHRoZQogc2FtZSBuYW1lLiAgV2hlbiB0aGUgLS1vbnRvIG9wdGlvbiBpcyBwcm92aWRlZCB0aGUgbmV3IGJyYW5jaCBzdGFydHMKIG91dCB3aXRoIGEgSEVBRCBlcXVhbCB0byA8bmV3YmFzZT4sIG90aGVyd2lzZSBpdCBpcyBlcXVhbCB0byA8dXBzdHJlYW0+CkBAIC03MiwxMSArNzIsMjAgQEAKIAkJCWVjaG8gImRpcmVjdGx5LCBidXQgaW5zdGVhZCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzogIgogCQkJZGllICIkUkVTT0xWRU1TRyIKIAkJZmkKLQkJcHJpbnRmICJDb21taXR0ZWQ6ICUwJHtwcmVjfWQgIiAkbXNnbnVtCisJCWlmIHRlc3QgLXogIiRHSVRfUVVJRVQiCisJCXRoZW4KKwkJCXByaW50ZiAiQ29tbWl0dGVkOiAlMCR7cHJlY31kICIgJG1zZ251bQorCQlmaQogCWVsc2UKLQkJcHJpbnRmICJBbHJlYWR5IGFwcGxpZWQ6ICUwJHtwcmVjfWQgIiAkbXNnbnVtCisJCWlmIHRlc3QgLXogIiRHSVRfUVVJRVQiCisJCXRoZW4KKwkJCXByaW50ZiAiQWxyZWFkeSBhcHBsaWVkOiAlMCR7cHJlY31kICIgJG1zZ251bQorCQlmaQogCWZpCi0JZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgLTEgIiRjbXQiIHwgc2VkIC1lICdzL15bXiBdKiAvLycKKwlpZiB0ZXN0IC16ICIkR0lUX1FVSUVUIgorCXRoZW4KKwkJZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgLTEgIiRjbXQiIHwgc2VkIC1lICdzL15bXiBdKiAvLycKKwlmaQogCiAJcHJldl9oZWFkPWBnaXQgcmV2LXBhcnNlIEhFQUReMGAKIAkjIHNhdmUgdGhlIHJlc3VsdGluZyBjb21taXQgc28gd2UgY2FuIHJlYWQtdHJlZSBvbiBpdCBsYXRlcgpAQCAtOTcsNiArMTA2LDEwIEBACiAJZXZhbCBHSVRIRUFEXyRjbXQ9JyIke2NtdF9uYW1lIyNyZWZzL2hlYWRzL31+JCgoJGVuZCAtICRtc2dudW0pKSInCiAJZXZhbCBHSVRIRUFEXyRoZD0nJChjYXQgIiRkb3Rlc3Qvb250b19uYW1lIiknCiAJZXhwb3J0IEdJVEhFQURfJGNtdCBHSVRIRUFEXyRoZAorCWlmIHRlc3QgLW4gIiRHSVRfUVVJRVQiCisJdGhlbgorCQlleHBvcnQgR0lUX01FUkdFX1ZFUkJPU0lUWT0xCisJZmkKIAlnaXQtbWVyZ2UtJHN0cmF0ZWd5ICIkY210XiIgLS0gIiRoZCIgIiRjbXQiCiAJcnY9JD8KIAljYXNlICIkcnYiIGluCkBAIC0xMzgsNyArMTUxLDcgQEAKIGZpbmlzaF9yYl9tZXJnZSAoKSB7CiAJbW92ZV90b19vcmlnaW5hbF9icmFuY2gKIAlybSAtciAiJGRvdGVzdCIKLQllY2hvICJBbGwgZG9uZS4iCisJc2F5IEFsbCBkb25lLgogfQogCiBpc19pbnRlcmFjdGl2ZSAoKSB7CkBAIC0yMDcsNiArMjIwLDcgQEAKIAkJCWVuZD0kKGNhdCAiJGRvdGVzdC9lbmQiKQogCQkJbXNnbnVtPSQoY2F0ICIkZG90ZXN0L21zZ251bSIpCiAJCQlvbnRvPSQoY2F0ICIkZG90ZXN0L29udG8iKQorCQkJR0lUX1FVSUVUPSQoY2F0ICIkZG90ZXN0L3F1aWV0IikKIAkJCWNvbnRpbnVlX21lcmdlCiAJCQl3aGlsZSB0ZXN0ICIkbXNnbnVtIiAtbGUgIiRlbmQiCiAJCQlkbwpAQCAtMjE5LDYgKzIzMyw3IEBACiAJCWhlYWRfbmFtZT0kKGNhdCAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9oZWFkLW5hbWUpICYmCiAJCW9udG89JChjYXQgIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvb250bykgJiYKIAkJb3JpZ19oZWFkPSQoY2F0ICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5L29yaWctaGVhZCkgJiYKKwkJR0lUX1FVSUVUPSQoY2F0ICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5L3F1aWV0KQogCQlnaXQgYW0gLS1yZXNvbHZlZCAtLTN3YXkgLS1yZXNvbHZlbXNnPSIkUkVTT0xWRU1TRyIgJiYKIAkJbW92ZV90b19vcmlnaW5hbF9icmFuY2gKIAkJZXhpdApAQCAtMjM2LDYgKzI1MSw3IEBACiAJCQltc2dudW09JChjYXQgIiRkb3Rlc3QvbXNnbnVtIikKIAkJCW1zZ251bT0kKCgkbXNnbnVtICsgMSkpCiAJCQlvbnRvPSQoY2F0ICIkZG90ZXN0L29udG8iKQorCQkJR0lUX1FVSUVUPSQoY2F0ICIkZG90ZXN0L3F1aWV0IikKIAkJCXdoaWxlIHRlc3QgIiRtc2dudW0iIC1sZSAiJGVuZCIKIAkJCWRvCiAJCQkJY2FsbF9tZXJnZSAiJG1zZ251bSIKQEAgLTI0Nyw2ICsyNjMsNyBAQAogCQloZWFkX25hbWU9JChjYXQgIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvaGVhZC1uYW1lKSAmJgogCQlvbnRvPSQoY2F0ICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5L29udG8pICYmCiAJCW9yaWdfaGVhZD0kKGNhdCAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9vcmlnLWhlYWQpICYmCisJCUdJVF9RVUlFVD0kKGNhdCAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9xdWlldCkKIAkJZ2l0IGFtIC0zIC0tc2tpcCAtLXJlc29sdmVtc2c9IiRSRVNPTFZFTVNHIiAmJgogCQltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAogCQlleGl0CkBAIC0yNTgsOSArMjc1LDExIEBACiAJCWdpdCByZXJlcmUgY2xlYXIKIAkJaWYgdGVzdCAtZCAiJGRvdGVzdCIKIAkJdGhlbgorCQkJR0lUX1FVSUVUPSQoY2F0ICIkZG90ZXN0L3F1aWV0IikKIAkJCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCiAJCWVsc2UKIAkJCWRvdGVzdD0iJEdJVF9ESVIiL3JlYmFzZS1hcHBseQorCQkJR0lUX1FVSUVUPSQoY2F0ICIkZG90ZXN0L3F1aWV0IikKIAkJCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCiAJCWZpCiAJCWdpdCByZXNldCAtLWhhcmQgJChjYXQgIiRkb3Rlc3Qvb3JpZy1oZWFkIikKQEAgLTI5OCw2ICszMTcsMTMgQEAKIAktdnwtLXZlcmJvc2UpCiAJCXZlcmJvc2U9dAogCQlkaWZmc3RhdD10CisJCUdJVF9RVUlFVD0KKwkJOzsKKwktcXwtLXF1aWV0KQorCQlHSVRfUVVJRVQ9dAorCQlnaXRfYW1fb3B0PSIkZ2l0X2FtX29wdCAtcSIKKwkJdmVyYm9zZT0KKwkJZGlmZnN0YXQ9CiAJCTs7CiAJLS13aGl0ZXNwYWNlPSopCiAJCWdpdF9hbV9vcHQ9IiRnaXRfYW1fb3B0ICQxIgpAQCAtNDQyLDE1ICs0NjgsMTUgQEAKIAl0aGVuCiAJCSMgTGF6aWx5IHN3aXRjaCB0byB0aGUgdGFyZ2V0IGJyYW5jaCBpZiBuZWVkZWQuLi4KIAkJdGVzdCAteiAiJHN3aXRjaF90byIgfHwgZ2l0IGNoZWNrb3V0ICIkc3dpdGNoX3RvIgotCQllY2hvID4mMiAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUuIgorCQlzYXkgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLiIKIAkJZXhpdCAwCiAJZWxzZQotCQllY2hvICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCisJCXNheSAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgogCWZpCiBmaQogCiAjIERldGFjaCBIRUFEIGFuZCByZXNldCB0aGUgdHJlZQotZWNobyAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uIgorc2F5ICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi4iCiBnaXQgY2hlY2tvdXQgLXEgIiRvbnRvXjAiIHx8IGRpZSAiY291bGQgbm90IGRldGFjaCBIRUFEIgogZ2l0IHVwZGF0ZS1yZWYgT1JJR19IRUFEICRicmFuY2gKIApAQCAtNDY4LDcgKzQ5NCw3IEBACiAjIHdlIGp1c3QgZmFzdCBmb3J3YXJkZWQuCiBpZiB0ZXN0ICIkbWIiID0gIiRicmFuY2giCiB0aGVuCi0JZWNobyA+JjIgIkZhc3QtZm9yd2FyZGVkICRicmFuY2hfbmFtZSB0byAkb250b19uYW1lLiIKKwlzYXkgIkZhc3QtZm9yd2FyZGVkICRicmFuY2hfbmFtZSB0byAkb250b19uYW1lLiIKIAltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAogCWV4aXQgMAogZmkKQEAgLTQ5MCw3ICs1MTYsOCBAQAogCXRlc3QgMCAhPSAkcmV0IC1hIC1kICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5ICYmCiAJCWVjaG8gJGhlYWRfbmFtZSA+ICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5L2hlYWQtbmFtZSAmJgogCQllY2hvICRvbnRvID4gIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvb250byAmJgotCQllY2hvICRvcmlnX2hlYWQgPiAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9vcmlnLWhlYWQKKwkJZWNobyAkb3JpZ19oZWFkID4gIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvb3JpZy1oZWFkICYmCisJCWVjaG8gIiRHSVRfUVVJRVQiID4gIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvcXVpZXQKIAlleGl0ICRyZXQKIGZpCiAKQEAgLTUwNCw2ICs1MzEsNyBAQAogZWNobyAiJHByZXZfaGVhZCIgPiAiJGRvdGVzdC9wcmV2X2hlYWQiCiBlY2hvICIkb3JpZ19oZWFkIiA+ICIkZG90ZXN0L29yaWctaGVhZCIKIGVjaG8gIiRoZWFkX25hbWUiID4gIiRkb3Rlc3QvaGVhZC1uYW1lIgorZWNobyAiJEdJVF9RVUlFVCIgPiAiJGRvdGVzdC9xdWlldCIKIAogbXNnbnVtPTAKIGZvciBjbXQgaW4gYGdpdCByZXYtbGlzdCAtLXJldmVyc2UgLS1uby1tZXJnZXMgIiRyZXZpc2lvbnMiYApkaWZmIC0tZ2l0IGEvZ2l0LXJlcGFjay5zaCBiL2dpdC1yZXBhY2suc2gKaW5kZXggMDg2ODczNC4uMWViM2JjYSAxMDA3NTUKLS0tIGEvZ2l0LXJlcGFjay5zaAorKysgYi9naXQtcmVwYWNrLnNoCkBAIC0yNCw3ICsyNCw3IEBACiAuIGdpdC1zaC1zZXR1cAogCiBub191cGRhdGVfaW5mbz0gYWxsX2ludG9fb25lPSByZW1vdmVfcmVkdW5kYW50PSB1bnBhY2tfdW5yZWFjaGFibGU9Ci1sb2NhbD0gcXVpZXQ9IG5vX3JldXNlPSBleHRyYT0KK2xvY2FsPSBub19yZXVzZT0gZXh0cmE9CiB3aGlsZSB0ZXN0ICQjICE9IDAKIGRvCiAJY2FzZSAiJDEiIGluCkBAIC0zMyw3ICszMyw3IEBACiAJLUEpCWFsbF9pbnRvX29uZT10CiAJCXVucGFja191bnJlYWNoYWJsZT0tLXVucGFjay11bnJlYWNoYWJsZSA7OwogCS1kKQlyZW1vdmVfcmVkdW5kYW50PXQgOzsKLQktcSkJcXVpZXQ9LXEgOzsKKwktcSkJR0lUX1FVSUVUPXQgOzsKIAktZikJbm9fcmV1c2U9LS1uby1yZXVzZS1vYmplY3QgOzsKIAktbCkJbG9jYWw9LS1sb2NhbCA7OwogCS0tbWF4LXBhY2stc2l6ZXwtLXdpbmRvd3wtLXdpbmRvdy1tZW1vcnl8LS1kZXB0aCkKQEAgLTgwLDEzICs4MCwxMSBAQAogCTs7CiBlc2FjCiAKLWFyZ3M9IiRhcmdzICRsb2NhbCAkcXVpZXQgJG5vX3JldXNlJGV4dHJhIgotbmFtZXM9JChnaXQgcGFjay1vYmplY3RzIC0taG9ub3ItcGFjay1rZWVwIC0tbm9uLWVtcHR5IC0tYWxsIC0tcmVmbG9nICRhcmdzIDwvZGV2L251bGwgIiRQQUNLVE1QIikgfHwKK2FyZ3M9IiRhcmdzICRsb2NhbCAke0dJVF9RVUlFVDorLXF9ICRub19yZXVzZSRleHRyYSIKK25hbWVzPSQoZ2l0IHBhY2stb2JqZWN0cyAtLWtlZXAtdHJ1ZS1wYXJlbnRzIC0taG9ub3ItcGFjay1rZWVwIC0tbm9uLWVtcHR5IC0tYWxsIC0tcmVmbG9nICRhcmdzIDwvZGV2L251bGwgIiRQQUNLVE1QIikgfHwKIAlleGl0IDEKIGlmIFsgLXogIiRuYW1lcyIgXTsgdGhlbgotCWlmIHRlc3QgLXogIiRxdWlldCI7IHRoZW4KLQkJZWNobyBOb3RoaW5nIG5ldyB0byBwYWNrLgotCWZpCisJc2F5IE5vdGhpbmcgbmV3IHRvIHBhY2suCiBmaQogCiAjIE9rIHdlIGhhdmUgcHJlcGFyZWQgYWxsIG5ldyBwYWNrZmlsZXMuCkBAIC0xNzYsNyArMTc0LDcgQEAKIAkJICBkb25lCiAJCSkKIAlmaQotCWdpdCBwcnVuZS1wYWNrZWQgJHF1aWV0CisJZ2l0IHBydW5lLXBhY2tlZCAke0dJVF9RVUlFVDorLXF9CiBmaQogCiBjYXNlICIkbm9fdXBkYXRlX2luZm8iIGluCmRpZmYgLS1naXQgYS9naXQtc2VuZC1lbWFpbC5wZXJsIGIvZ2l0LXNlbmQtZW1haWwucGVybAppbmRleCAxN2Y5MzBmLi4wNzAwZDgwIDEwMDc1NQotLS0gYS9naXQtc2VuZC1lbWFpbC5wZXJsCisrKyBiL2dpdC1zZW5kLWVtYWlsLnBlcmwKQEAgLTIxMCw2ICsyMTAsNyBAQAogICAgICJlbnZlbG9wZXNlbmRlciIgPT4gXCRlbnZlbG9wZV9zZW5kZXIsCiAgICAgIm11bHRpZWRpdCIgPT4gXCRtdWx0aWVkaXQsCiAgICAgImNvbmZpcm0iICAgPT4gXCRjb25maXJtLAorICAgICJmcm9tIiA9PiBcJHNlbmRlciwKICk7CiAKICMgSGFuZGxlIFVuY291dGggVGVybWluYXRpb24KQEAgLTMzMyw3ICszMzQsNyBAQAogfQogCiBpZiAoJHN1cHByZXNzX2NjeydhbGwnfSkgewotCWZvcmVhY2ggbXkgJGVudHJ5IChxdyAoY2NtZCBjYyBhdXRob3Igc2VsZiBzb2IgYm9keSBib2R5Y2MpKSB7CisJZm9yZWFjaCBteSAkZW50cnkgKHF3IChjY2NtZCBjYyBhdXRob3Igc2VsZiBzb2IgYm9keSBib2R5Y2MpKSB7CiAJCSRzdXBwcmVzc19jY3skZW50cnl9ID0gMTsKIAl9CiAJZGVsZXRlICRzdXBwcmVzc19jY3snYWxsJ307CkBAIC00MDksNyArNDEwLDcgQEAKIAltYWlscmMgPT4gc3ViIHsgbXkgJGZoID0gc2hpZnQ7IHdoaWxlICg8JGZoPikgewogCQlpZiAoL15hbGlhc1xzKyhcUyspXHMrKC4qKSQvKSB7CiAJCQkjIHNwYWNlcyBkZWxpbWl0IG11bHRpcGxlIGFkZHJlc3NlcwotCQkJJGFsaWFzZXN7JDF9ID0gWyBzcGxpdCgvXHMrLywgJDIpIF07CisJCQkkYWxpYXNlc3skMX0gPSBbIHF1b3Rld29yZHMoJ1xzKycsIDAsICQyKSBdOwogCQl9fX0sCiAJcGluZSA9PiBzdWIgeyBteSAkZmggPSBzaGlmdDsgbXkgJGY9J1x0W15cdF0qJzsKIAkgICAgICAgIGZvciAobXkgJHggPSAnJzsgZGVmaW5lZCgkeCk7ICR4ID0gJF8pIHsKQEAgLTUzNiw3ICs1MzcsNyBAQAogCiAJcHJpbnQgQyA8PEVPVDsKIEZyb20gJHRwbF9zZW5kZXIgIyBUaGlzIGxpbmUgaXMgaWdub3JlZC4KLUdJVDogTGluZXMgYmVnaW5uaW5nIGluICJHSVQ6ICIgd2lsbCBiZSByZW1vdmVkLgorR0lUOiBMaW5lcyBiZWdpbm5pbmcgaW4gIkdJVDoiIHdpbGwgYmUgcmVtb3ZlZC4KIEdJVDogQ29uc2lkZXIgaW5jbHVkaW5nIGFuIG92ZXJhbGwgZGlmZnN0YXQgb3IgdGFibGUgb2YgY29udGVudHMKIEdJVDogZm9yIHRoZSBwYXRjaCB5b3UgYXJlIHdyaXRpbmcuCiBHSVQ6CkBAIC01NTEsOCArNTUyLDYgQEAKIAl9CiAJY2xvc2UoQyk7CiAKLQlteSAkZWRpdG9yID0gJEVOVntHSVRfRURJVE9SfSB8fCBHaXQ6OmNvbmZpZyhAcmVwbywgImNvcmUuZWRpdG9yIikgfHwgJEVOVntWSVNVQUx9IHx8ICRFTlZ7RURJVE9SfSB8fCAidmkiOwotCiAJaWYgKCRhbm5vdGF0ZSkgewogCQlkb19lZGl0KCRjb21wb3NlX2ZpbGVuYW1lLCBAZmlsZXMpOwogCX0gZWxzZSB7CkBAIC01NjksNyArNTY4LDcgQEAKIAlteSAkaW5fYm9keSA9IDA7CiAJbXkgJHN1bW1hcnlfZW1wdHkgPSAxOwogCXdoaWxlKDxDPikgewotCQluZXh0IGlmIG0vXkdJVDogLzsKKwkJbmV4dCBpZiBtL15HSVQ6LzsKIAkJaWYgKCRpbl9ib2R5KSB7CiAJCQkkc3VtbWFyeV9lbXB0eSA9IDAgdW5sZXNzICgvXlxuJC8pOwogCQl9IGVsc2lmICgvXlxuJC8pIHsKQEAgLTU3Nyw3ICs1NzYsNyBAQAogCQkJaWYgKCRuZWVkXzhiaXRfY3RlKSB7CiAJCQkJcHJpbnQgQzIgIk1JTUUtVmVyc2lvbjogMS4wXG4iLAogCQkJCQkgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgIiwKLQkJCQkJICAgImNoYXJzZXQ9dXRmLThcbiIsCisJCQkJCSAgICJjaGFyc2V0PVVURi04XG4iLAogCQkJCQkgIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiI7CiAJCQl9CiAJCX0gZWxzaWYgKC9eTUlNRS1WZXJzaW9uOi9pKSB7CkBAIC02NTQsMTMgKzY1MywxNyBAQAogfQogCiBzdWIgZXhwYW5kX2FsaWFzZXMgewotCW15IEBjdXIgPSBAXzsKLQlteSBAbGFzdDsKLQlkbyB7Ci0JCUBsYXN0ID0gQGN1cjsKLQkJQGN1ciA9IG1hcCB7ICRhbGlhc2VzeyRffSA/IEB7JGFsaWFzZXN7JF99fSA6ICRfIH0gQGxhc3Q7Ci0JfSB3aGlsZSAoam9pbignLCcsQGN1cikgbmUgam9pbignLCcsQGxhc3QpKTsKLQlyZXR1cm4gQGN1cjsKKwlyZXR1cm4gbWFwIHsgZXhwYW5kX29uZV9hbGlhcygkXykgfSBAXzsKK30KKworbXkgJUVYUEFOREVEX0FMSUFTRVM7CitzdWIgZXhwYW5kX29uZV9hbGlhcyB7CisJbXkgJGFsaWFzID0gc2hpZnQ7CisJaWYgKCRFWFBBTkRFRF9BTElBU0VTeyRhbGlhc30pIHsKKwkJZGllICJmYXRhbDogYWxpYXMgJyRhbGlhcycgZXhwYW5kcyB0byBpdHNlbGZcbiI7CisJfQorCWxvY2FsICRFWFBBTkRFRF9BTElBU0VTeyRhbGlhc30gPSAxOworCXJldHVybiAkYWxpYXNlc3skYWxpYXN9ID8gZXhwYW5kX2FsaWFzZXMoQHskYWxpYXNlc3skYWxpYXN9fSkgOiAkYWxpYXM7CiB9CiAKIEB0byA9IGV4cGFuZF9hbGlhc2VzKEB0byk7CkBAIC03NjYsMTIgKzc2OSwyMCBAQAogCiBzdWIgcXVvdGVfcmZjMjA0NyB7CiAJbG9jYWwgJF8gPSBzaGlmdDsKLQlteSAkZW5jb2RpbmcgPSBzaGlmdCB8fCAndXRmLTgnOworCW15ICRlbmNvZGluZyA9IHNoaWZ0IHx8ICdVVEYtOCc7CiAJcy8oW14tYS16QS1aMC05ISorXC9dKS9zcHJpbnRmKCI9JTAyWCIsIG9yZCgkMSkpL2VnOwogCXMvKC4qKS89XD8kZW5jb2RpbmdcP3FcPyQxXD89LzsKIAlyZXR1cm4gJF87CiB9CiAKK3N1YiBpc19yZmMyMDQ3X3F1b3RlZCB7CisJbXkgJHMgPSBzaGlmdDsKKwlteSAkdG9rZW4gPSAnW15dWygpPD5ALDs6IlwvPy49IFwwMDAtXDAzN1wxNzctXDM3N10rJzsKKwlteSAkZW5jb2RlZF90ZXh0ID0gJ1shLT5ALX5dKyc7CisJbGVuZ3RoKCRzKSA8PSA3NSAmJgorCSRzID1+IG0vXig/OiJbWzphc2NpaTpdXSoifD1cPyR0b2tlblw/JHRva2VuXD8kZW5jb2RlZF90ZXh0XD89KSQvbzsKK30KKwogIyB1c2UgdGhlIHNpbXBsZXN0IHF1b3RpbmcgYmVpbmcgYWJsZSB0byBoYW5kbGUgdGhlIHJlY2lwaWVudAogc3ViIHNhbml0aXplX2FkZHJlc3MKIHsKQEAgLTc4Myw3ICs3OTQsNyBAQAogCX0KIAogCSMgaWYgcmVjaXBpZW50X25hbWUgaXMgYWxyZWFkeSBxdW90ZWQsIGRvIG5vdGhpbmcKLQlpZiAoJHJlY2lwaWVudF9uYW1lID1+IC9eKCJbWzphc2NpaTpdXSoifD1cP3V0Zi04XD9xXD8uKlw/PSkkLykgeworCWlmIChpc19yZmMyMDQ3X3F1b3RlZCgkcmVjaXBpZW50X25hbWUpKSB7CiAJCXJldHVybiAkcmVjaXBpZW50OwogCX0KIApAQCAtODAzLDYgKzgxNCwxMCBAQAogCiB9CiAKKyMgUmV0dXJucyAxIGlmIHRoZSBtZXNzYWdlIHdhcyBzZW50LCBhbmQgMCBvdGhlcndpc2UuCisjIEluIGFjdHVhbGl0eSwgdGhlIHdob2xlIHByb2dyYW0gZGllcyB3aGVuIHRoZXJlCisjIGlzIGFuIGVycm9yIHNlbmRpbmcgYSBtZXNzYWdlLgorCiBzdWIgc2VuZF9tZXNzYWdlCiB7CiAJbXkgQHJlY2lwaWVudHMgPSB1bmlxdWVfZW1haWxfbGlzdChAdG8pOwpAQCAtODcxLDcgKzg4Niw3IEBACiAJCSAgICAgICAgIGRlZmF1bHQgPT4gJGFza19kZWZhdWx0KTsKIAkJZGllICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiIHVubGVzcyBkZWZpbmVkICRfOwogCQlpZiAoL15uL2kpIHsKLQkJCXJldHVybjsKKwkJCXJldHVybiAwOwogCQl9IGVsc2lmICgvXnEvaSkgewogCQkJY2xlYW51cF9jb21wb3NlX2ZpbGVzKCk7CiAJCQlleGl0KDApOwpAQCAtOTUyLDcgKzk2Nyw3IEBACiAJCSRzbXRwLT5kYXRhIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKIAkJJHNtdHAtPmRhdGFzZW5kKCIkaGVhZGVyXG4kbWVzc2FnZSIpIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKIAkJJHNtdHAtPmRhdGFlbmQoKSBvciBkaWUgJHNtdHAtPm1lc3NhZ2U7Ci0JCSRzbXRwLT5vayBvciBkaWUgIkZhaWxlZCB0byBzZW5kICRzdWJqZWN0XG4iLiRzbXRwLT5tZXNzYWdlOworCQkkc210cC0+Y29kZSA9fiAvMjUwfDIwMC8gb3IgZGllICJGYWlsZWQgdG8gc2VuZCAkc3ViamVjdFxuIi4kc210cC0+bWVzc2FnZTsKIAl9CiAJaWYgKCRxdWlldCkgewogCQlwcmludGYgKCgkZHJ5X3J1biA/ICJEcnktIiA6ICIiKS4iU2VudCAlc1xuIiwgJHN1YmplY3QpOwpAQCAtOTczLDYgKzk4OCw4IEBACiAJCQlwcmludCAiUmVzdWx0OiBPS1xuIjsKIAkJfQogCX0KKworCXJldHVybiAxOwogfQogCiAkcmVwbHlfdG8gPSAkaW5pdGlhbF9yZXBseV90bzsKQEAgLTEwOTAsNyArMTEwNyw3IEBACiAJY2xvc2UgRjsKIAogCWlmIChkZWZpbmVkICRjY19jbWQgJiYgISRzdXBwcmVzc19jY3snY2NjbWQnfSkgewotCQlvcGVuKEYsICIkY2NfY21kICR0IHwiKQorCQlvcGVuKEYsICIkY2NfY21kIFxRJHRcRSB8IikKIAkJCW9yIGRpZSAiKGNjLWNtZCkgQ291bGQgbm90IGV4ZWN1dGUgJyRjY19jbWQnIjsKIAkJd2hpbGUoPEY+KSB7CiAJCQlteSAkYyA9ICRfOwpAQCAtMTEzMywxMCArMTE1MCwxMSBAQAogCiAJQGNjID0gKEBpbml0aWFsX2NjLCBAY2MpOwogCi0Jc2VuZF9tZXNzYWdlKCk7CisJbXkgJG1lc3NhZ2Vfd2FzX3NlbnQgPSBzZW5kX21lc3NhZ2UoKTsKIAogCSMgc2V0IHVwIGZvciB0aGUgbmV4dCBtZXNzYWdlCi0JaWYgKCRjaGFpbl9yZXBseV90byB8fCAhZGVmaW5lZCAkcmVwbHlfdG8gfHwgbGVuZ3RoKCRyZXBseV90bykgPT0gMCkgeworCWlmICgkdGhyZWFkICYmICRtZXNzYWdlX3dhc19zZW50ICYmCisJCSgkY2hhaW5fcmVwbHlfdG8gfHwgIWRlZmluZWQgJHJlcGx5X3RvIHx8IGxlbmd0aCgkcmVwbHlfdG8pID09IDApKSB7CiAJCSRyZXBseV90byA9ICRtZXNzYWdlX2lkOwogCQlpZiAobGVuZ3RoICRyZWZlcmVuY2VzID4gMCkgewogCQkJJHJlZmVyZW5jZXMgLj0gIlxuICRtZXNzYWdlX2lkIjsKZGlmZiAtLWdpdCBhL2dpdC1zaC1zZXR1cC5zaCBiL2dpdC1zaC1zZXR1cC5zaAppbmRleCA4MzgyMzM5Li5jNDFjMmY3IDEwMDc1NQotLS0gYS9naXQtc2gtc2V0dXAuc2gKKysrIGIvZ2l0LXNoLXNldHVwLnNoCkBAIC0xMSwxMSArMTEsNDggQEAKICMgZXhwb3J0aW5nIGl0LgogdW5zZXQgQ0RQQVRICiAKK2dpdF9icm9rZW5fcGF0aF9maXggKCkgeworCWNhc2UgIjokUEFUSDoiIGluCisJKjokMToqKSA6IG9rIDs7CisJKikKKwkJUEFUSD0kKAorCQkJU0FORV9UT09MX1BBVEg9IiQxIgorCQkJSUZTPTogcGF0aD0gc2VwPQorCQkJc2V0IHggJFBBVEgKKwkJCXNoaWZ0CisJCQlmb3IgZWxlbQorCQkJZG8KKwkJCQljYXNlICIkU0FORV9UT09MX1BBVEg6JGVsZW0iIGluCisJCQkJKD8qOi9iaW4gfCA/KjovdXNyL2JpbikKKwkJCQkJcGF0aD0iJHBhdGgkc2VwJFNBTkVfVE9PTF9QQVRIIgorCQkJCQlzZXA9OgorCQkJCQlTQU5FX1RPT0xfUEFUSD0KKwkJCQllc2FjCisJCQkJcGF0aD0iJHBhdGgkc2VwJGVsZW0iCisJCQkJc2VwPToKKwkJCWRvbmUKKwkJCWVjaG8gIiRwYXRoIgorCQkpCisJCTs7CisJZXNhYworfQorCisjIEBAQlJPS0VOX1BBVEhfRklYQEAKKwogZGllKCkgewogCWVjaG8gPiYyICIkQCIKIAlleGl0IDEKIH0KIAorR0lUX1FVSUVUPQorCitzYXkgKCkgeworCWlmIHRlc3QgLXogIiRHSVRfUVVJRVQiCisJdGhlbgorCQlwcmludGYgJyVzXG4nICIkKiIKKwlmaQorfQorCiBpZiB0ZXN0IC1uICIkT1BUSU9OU19TUEVDIjsgdGhlbgogCXVzYWdlKCkgewogCQkiJDAiIC1oCmRpZmYgLS1naXQgYS9naXQtc3Rhc2guc2ggYi9naXQtc3Rhc2guc2gKaW5kZXggYjlhY2U5OS4uMDNlNTg5ZiAxMDA3NTUKLS0tIGEvZ2l0LXN0YXNoLnNoCisrKyBiL2dpdC1zdGFzaC5zaApAQCAtMywxMCArMywxMSBAQAogCiBkYXNobGVzcz0kKGJhc2VuYW1lICIkMCIgfCBzZWQgLWUgJ3MvLS8gLycpCiBVU0FHRT0ibGlzdCBbPG9wdGlvbnM+XQotICAgb3I6ICRkYXNobGVzcyAoc2hvdyB8IGRyb3AgfCBwb3AgKSBbPHN0YXNoPl0KLSAgIG9yOiAkZGFzaGxlc3MgYXBwbHkgWy0taW5kZXhdIFs8c3Rhc2g+XQorICAgb3I6ICRkYXNobGVzcyBzaG93IFs8c3Rhc2g+XQorICAgb3I6ICRkYXNobGVzcyBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KKyAgIG9yOiAkZGFzaGxlc3MgKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dCiAgICBvcjogJGRhc2hsZXNzIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dCi0gICBvcjogJGRhc2hsZXNzIFtzYXZlIFstLWtlZXAtaW5kZXhdIFs8bWVzc2FnZT5dXQorICAgb3I6ICRkYXNobGVzcyBbc2F2ZSBbLS1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF0gWzxtZXNzYWdlPl1dCiAgICBvcjogJGRhc2hsZXNzIGNsZWFyIgogCiBTVUJESVJFQ1RPUllfT0s9WWVzCkBAIC05NCwxOCArOTUsMjggQEAKIAogc2F2ZV9zdGFzaCAoKSB7CiAJa2VlcF9pbmRleD0KLQljYXNlICIkMSIgaW4KLQktLWtlZXAtaW5kZXgpCi0JCWtlZXBfaW5kZXg9dAorCXdoaWxlIHRlc3QgJCMgIT0gMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktLWtlZXAtaW5kZXgpCisJCQlrZWVwX2luZGV4PXQKKwkJCTs7CisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9dAorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCiAJCXNoaWZ0Ci0JZXNhYworCWRvbmUKIAogCXN0YXNoX21zZz0iJCoiCiAKIAlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAogCWlmIG5vX2NoYW5nZXMKIAl0aGVuCi0JCWVjaG8gJ05vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZScKKwkJc2F5ICdObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUnCiAJCWV4aXQgMAogCWZpCiAJdGVzdCAtZiAiJEdJVF9ESVIvbG9ncy8kcmVmX3N0YXNoIiB8fApAQCAtMTE4LDkgKzEyOSw5IEBACiAKIAlnaXQgdXBkYXRlLXJlZiAtbSAiJHN0YXNoX21zZyIgJHJlZl9zdGFzaCAkd19jb21taXQgfHwKIAkJZGllICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCi0JcHJpbnRmICdTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgIiVzIlxuJyAiJHN0YXNoX21zZyIKKwlzYXkgU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICIkc3Rhc2hfbXNnIgogCi0JZ2l0IHJlc2V0IC0taGFyZAorCWdpdCByZXNldCAtLWhhcmQgJHtHSVRfUVVJRVQ6Ky1xfQogCiAJaWYgdGVzdCAtbiAiJGtlZXBfaW5kZXgiICYmIHRlc3QgLW4gJGlfdHJlZQogCXRoZW4KQEAgLTE1NiwxMSArMTY3LDIyIEBACiAJCWRpZSAnQ2Fubm90IGFwcGx5IHRvIGEgZGlydHkgd29ya2luZyB0cmVlLCBwbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzJwogCiAJdW5zdGFzaF9pbmRleD0KLQljYXNlICIkMSIgaW4KLQktLWluZGV4KQotCQl1bnN0YXNoX2luZGV4PXQKKworCXdoaWxlIHRlc3QgJCMgIT0gMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktLWluZGV4KQorCQkJdW5zdGFzaF9pbmRleD10CisJCQk7OworCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPXQKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYwogCQlzaGlmdAotCWVzYWMKKwlkb25lCiAKIAkjIGN1cnJlbnQgaW5kZXggc3RhdGUKIAljX3RyZWU9JChnaXQgd3JpdGUtdHJlZSkgfHwKQEAgLTE4MSw3ICsyMDMsNyBAQAogCQlnaXQgZGlmZi10cmVlIC0tYmluYXJ5ICRzXjJeLi4kc14yIHwgZ2l0IGFwcGx5IC0tY2FjaGVkCiAJCXRlc3QgJD8gLW5lIDAgJiYKIAkJCWRpZSAnQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LicKLQkJdW5zdGFzaGVkX2luZGV4X3RyZWU9JChnaXQtd3JpdGUtdHJlZSkgfHwKKwkJdW5zdGFzaGVkX2luZGV4X3RyZWU9JChnaXQgd3JpdGUtdHJlZSkgfHwKIAkJCWRpZSAnQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZScKIAkJZ2l0IHJlc2V0CiAJZmkKQEAgLTE5Myw3ICsyMTUsMTEgQEAKIAkJZXhwb3J0IEdJVEhFQURfJHdfdHJlZSBHSVRIRUFEXyRjX3RyZWUgR0lUSEVBRF8kYl90cmVlCiAJIgogCi0JaWYgZ2l0LW1lcmdlLXJlY3Vyc2l2ZSAkYl90cmVlIC0tICRjX3RyZWUgJHdfdHJlZQorCWlmIHRlc3QgLW4gIiRHSVRfUVVJRVQiCisJdGhlbgorCQlleHBvcnQgR0lUX01FUkdFX1ZFUkJPU0lUWT0wCisJZmkKKwlpZiBnaXQgbWVyZ2UtcmVjdXJzaXZlICRiX3RyZWUgLS0gJGNfdHJlZSAkd190cmVlCiAJdGhlbgogCQkjIE5vIGNvbmZsaWN0CiAJCWlmIHRlc3QgLW4gIiR1bnN0YXNoZWRfaW5kZXhfdHJlZSIKQEAgLTIwNyw3ICsyMzMsMTIgQEAKIAkJCQlkaWUgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIgogCQkJcm0gLWYgIiRhIgogCQlmaQotCQlnaXQgc3RhdHVzIHx8IDoKKwkJc3F1ZWxjaD0KKwkJaWYgdGVzdCAtbiAiJEdJVF9RVUlFVCIKKwkJdGhlbgorCQkJc3F1ZWxjaD0nPi9kZXYvbnVsbCAyPiYxJworCQlmaQorCQlldmFsICJnaXQgc3RhdHVzICRzcXVlbGNoIiB8fCA6CiAJZWxzZQogCQkjIE1lcmdlIGNvbmZsaWN0OyBrZWVwIHRoZSBleGl0IHN0YXR1cyBmcm9tIG1lcmdlLXJlY3Vyc2l2ZQogCQlzdGF0dXM9JD8KQEAgLTIyMiw2ICsyNTMsMTkgQEAKIGRyb3Bfc3Rhc2ggKCkgewogCWhhdmVfc3Rhc2ggfHwgZGllICdObyBzdGFzaCBlbnRyaWVzIHRvIGRyb3AnCiAKKwl3aGlsZSB0ZXN0ICQjICE9IDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD10CisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKIAlpZiB0ZXN0ICQjID0gMAogCXRoZW4KIAkJc2V0IHggIiRyZWZfc3Rhc2hAezB9IgpAQCAtMjM1LDcgKzI3OSw3IEBACiAJCWRpZSAiJCo6IG5vdCBhIHZhbGlkIHN0YXNoZWQgc3RhdGUiCiAKIAlnaXQgcmVmbG9nIGRlbGV0ZSAtLXVwZGF0ZXJlZiAtLXJld3JpdGUgIiRAIiAmJgotCQllY2hvICJEcm9wcGVkICQqICgkcykiIHx8IGRpZSAiJCo6IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorCQlzYXkgIkRyb3BwZWQgJCogKCRzKSIgfHwgZGllICIkKjogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCiAKIAkjIGNsZWFyX3N0YXNoIGlmIHdlIGp1c3QgZHJvcHBlZCB0aGUgbGFzdCBzdGFzaCBlbnRyeQogCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRyZWZfc3Rhc2hAezB9IiA+IC9kZXYvbnVsbCAyPiYxIHx8IGNsZWFyX3N0YXNoCkBAIC0yNTMsNyArMjk3LDcgQEAKIAlmaQogCXN0YXNoPSQyCiAKLQlnaXQtY2hlY2tvdXQgLWIgJGJyYW5jaCAkc3Rhc2heICYmCisJZ2l0IGNoZWNrb3V0IC1iICRicmFuY2ggJHN0YXNoXiAmJgogCWFwcGx5X3N0YXNoIC0taW5kZXggJHN0YXNoICYmCiAJZHJvcF9zdGFzaCAkc3Rhc2gKIH0KQEAgLTMxMiw3ICszNTYsNyBAQAogCWlmIHRlc3QgJCMgLWVxIDAKIAl0aGVuCiAJCXNhdmVfc3Rhc2ggJiYKLQkJZWNobyAnKFRvIHJlc3RvcmUgdGhlbSB0eXBlICJnaXQgc3Rhc2ggYXBwbHkiKScKKwkJc2F5ICcoVG8gcmVzdG9yZSB0aGVtIHR5cGUgImdpdCBzdGFzaCBhcHBseSIpJwogCWVsc2UKIAkJdXNhZ2UKIAlmaQpkaWZmIC0tZ2l0IGEvZ2l0LXN1Ym1vZHVsZS5zaCBiL2dpdC1zdWJtb2R1bGUuc2gKaW5kZXggOGUyMzRhNC4uZWJlZDcxMSAxMDA3NTUKLS0tIGEvZ2l0LXN1Ym1vZHVsZS5zaAorKysgYi9naXQtc3VibW9kdWxlLnNoCkBAIC01LDcgKzUsNyBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDcgTGFycyBIamVtbGkKIAogVVNBR0U9IlstLXF1aWV0XSBbLS1jYWNoZWRdIFwKLVthZGQgWy1iIGJyYW5jaF0gPHJlcG8+IDxwYXRoPl18W3N0YXR1c3xpbml0fHVwZGF0ZSBbLWl8LS1pbml0XSBbLU58LS1uby1mZXRjaF18c3VtbWFyeSBbLW58LS1zdW1tYXJ5LWxpbWl0IDxuPl0gWzxjb21taXQ+XV0gXAorW2FkZCBbLWIgYnJhbmNoXSA8cmVwbz4gPHBhdGg+XXxbc3RhdHVzfGluaXR8dXBkYXRlIFstaXwtLWluaXRdIFstTnwtLW5vLWZldGNoXSBbLS1yZWJhc2V8LS1tZXJnZV18c3VtbWFyeSBbLW58LS1zdW1tYXJ5LWxpbWl0IDxuPl0gWzxjb21taXQ+XV0gXAogWy0tXSBbPHBhdGg+Li4uXXxbZm9yZWFjaCA8Y29tbWFuZD5dfFtzeW5jIFstLV0gWzxwYXRoPi4uLl1dIgogT1BUSU9OU19TUEVDPQogLiBnaXQtc2gtc2V0dXAKQEAgLTE0LDIwICsxNCwxMCBAQAogCiBjb21tYW5kPQogYnJhbmNoPQotcXVpZXQ9CityZWZlcmVuY2U9CiBjYWNoZWQ9CiBub2ZldGNoPQotCi0jCi0jIHByaW50IHN0dWZmIG9uIHN0ZG91dCB1bmxlc3MgLXEgd2FzIHNwZWNpZmllZAotIwotc2F5KCkKLXsKLQlpZiB0ZXN0IC16ICIkcXVpZXQiCi0JdGhlbgotCQllY2hvICIkQCIKLQlmaQotfQordXBkYXRlPQogCiAjIFJlc29sdmUgcmVsYXRpdmUgdXJsIGJ5IGFwcGVuZGluZyB0byBwYXJlbnQncyB1cmwKIHJlc29sdmVfcmVsYXRpdmVfdXJsICgpCkBAIC05MSw2ICs4MSw3IEBACiB7CiAJcGF0aD0kMQogCXVybD0kMgorCXJlZmVyZW5jZT0iJDMiCiAKIAkjIElmIHRoZXJlIGFscmVhZHkgaXMgYSBkaXJlY3RvcnkgYXQgdGhlIHN1Ym1vZHVsZSBwYXRoLAogCSMgZXhwZWN0IGl0IHRvIGJlIGVtcHR5IChzaW5jZSB0aGF0IGlzIHRoZSBkZWZhdWx0IGNoZWNrb3V0CkBAIC0xMDYsNyArOTcsMTIgQEAKIAl0ZXN0IC1lICIkcGF0aCIgJiYKIAlkaWUgIkEgZmlsZSBhbHJlYWR5IGV4aXN0IGF0IHBhdGggJyRwYXRoJyIKIAotCWdpdC1jbG9uZSAtbiAiJHVybCIgIiRwYXRoIiB8fAorCWlmIHRlc3QgLW4gIiRyZWZlcmVuY2UiCisJdGhlbgorCQlnaXQtY2xvbmUgIiRyZWZlcmVuY2UiIC1uICIkdXJsIiAiJHBhdGgiCisJZWxzZQorCQlnaXQtY2xvbmUgLW4gIiR1cmwiICIkcGF0aCIKKwlmaSB8fAogCWRpZSAiQ2xvbmUgb2YgJyR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJyRwYXRoJyBmYWlsZWQiCiB9CiAKQEAgLTEyOSw3ICsxMjUsMTYgQEAKIAkJCXNoaWZ0CiAJCQk7OwogCQktcXwtLXF1aWV0KQotCQkJcXVpZXQ9MQorCQkJR0lUX1FVSUVUPTEKKwkJCTs7CisJCS0tcmVmZXJlbmNlKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlyZWZlcmVuY2U9Ii0tcmVmZXJlbmNlPSQyIgorCQkJc2hpZnQKKwkJCTs7CisJCS0tcmVmZXJlbmNlPSopCisJCQlyZWZlcmVuY2U9IiQxIgorCQkJc2hpZnQKIAkJCTs7CiAJCS0tKQogCQkJc2hpZnQKQEAgLTIwMyw3ICsyMDgsNyBAQAogCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJHBhdGgiLnVybCAiJHVybCIKIAllbHNlCiAKLQkJbW9kdWxlX2Nsb25lICIkcGF0aCIgIiRyZWFscmVwbyIgfHwgZXhpdAorCQltb2R1bGVfY2xvbmUgIiRwYXRoIiAiJHJlYWxyZXBvIiAiJHJlZmVyZW5jZSIgfHwgZXhpdAogCQkoCiAJCQl1bnNldCBHSVRfRElSCiAJCQljZCAiJHBhdGgiICYmCkBAIC0yNTYsNyArMjYxLDcgQEAKIAlkbwogCQljYXNlICIkMSIgaW4KIAkJLXF8LS1xdWlldCkKLQkJCXF1aWV0PTEKKwkJCUdJVF9RVUlFVD0xCiAJCQk7OwogCQktLSkKIAkJCXNoaWZ0CkBAIC0yOTQsNiArMjk5LDExIEBACiAJCWdpdCBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXJsICIkdXJsIiB8fAogCQlkaWUgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCiAKKwkJdXBkPSIkKGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLiIkbmFtZSIudXBkYXRlKSIKKwkJdGVzdCAteiAiJHVwZCIgfHwKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cGRhdGUgIiR1cGQiIHx8CisJCWRpZSAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJHBhdGgnIgorCiAJCXNheSAiU3VibW9kdWxlICckbmFtZScgKCR1cmwpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyRwYXRoJyIKIAlkb25lCiB9CkBAIC0zMTEsMTYgKzMyMSwzMyBAQAogCQljYXNlICIkMSIgaW4KIAkJLXF8LS1xdWlldCkKIAkJCXNoaWZ0Ci0JCQlxdWlldD0xCisJCQlHSVRfUVVJRVQ9MQogCQkJOzsKIAkJLWl8LS1pbml0KQorCQkJaW5pdD0xCiAJCQlzaGlmdAotCQkJY21kX2luaXQgIiRAIiB8fCByZXR1cm4KIAkJCTs7CiAJCS1OfC0tbm8tZmV0Y2gpCiAJCQlzaGlmdAogCQkJbm9mZXRjaD0xCiAJCQk7OworCQktcnwtLXJlYmFzZSkKKwkJCXNoaWZ0CisJCQl1cGRhdGU9InJlYmFzZSIKKwkJCTs7CisJCS0tcmVmZXJlbmNlKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlyZWZlcmVuY2U9Ii0tcmVmZXJlbmNlPSQyIgorCQkJc2hpZnQgMgorCQkJOzsKKwkJLS1yZWZlcmVuY2U9KikKKwkJCXJlZmVyZW5jZT0iJDEiCisJCQlzaGlmdAorCQkJOzsKKwkJLW18LS1tZXJnZSkKKwkJCXNoaWZ0CisJCQl1cGRhdGU9Im1lcmdlIgorCQkJOzsKIAkJLS0pCiAJCQlzaGlmdAogCQkJYnJlYWsKQEAgLTMzNCwxMSArMzYxLDE3IEBACiAJCWVzYWMKIAlkb25lCiAKKwlpZiB0ZXN0IC1uICIkaW5pdCIKKwl0aGVuCisJCWNtZF9pbml0ICItLSIgIiRAIiB8fCByZXR1cm4KKwlmaQorCiAJbW9kdWxlX2xpc3QgIiRAIiB8CiAJd2hpbGUgcmVhZCBtb2RlIHNoYTEgc3RhZ2UgcGF0aAogCWRvCiAJCW5hbWU9JChtb2R1bGVfbmFtZSAiJHBhdGgiKSB8fCBleGl0CiAJCXVybD0kKGdpdCBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXJsKQorCQl1cGRhdGVfbW9kdWxlPSQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cGRhdGUpCiAJCWlmIHRlc3QgLXogIiR1cmwiCiAJCXRoZW4KIAkJCSMgT25seSBtZW50aW9uIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlcyB3aGVuIGl0cwpAQCAtMzUxLDcgKzM4NCw3IEBACiAKIAkJaWYgISB0ZXN0IC1kICIkcGF0aCIvLmdpdCAtbyAtZiAiJHBhdGgiLy5naXQKIAkJdGhlbgotCQkJbW9kdWxlX2Nsb25lICIkcGF0aCIgIiR1cmwiIHx8IGV4aXQKKwkJCW1vZHVsZV9jbG9uZSAiJHBhdGgiICIkdXJsIiAiJHJlZmVyZW5jZSJ8fCBleGl0CiAJCQlzdWJzaGExPQogCQllbHNlCiAJCQlzdWJzaGExPSQodW5zZXQgR0lUX0RJUjsgY2QgIiRwYXRoIiAmJgpAQCAtMzU5LDYgKzM5MiwxMSBAQAogCQkJZGllICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCiAJCWZpCiAKKwkJaWYgISB0ZXN0IC16ICIkdXBkYXRlIgorCQl0aGVuCisJCQl1cGRhdGVfbW9kdWxlPSR1cGRhdGUKKwkJZmkKKwogCQlpZiB0ZXN0ICIkc3Vic2hhMSIgIT0gIiRzaGExIgogCQl0aGVuCiAJCQlmb3JjZT0KQEAgLTM3NCwxMSArNDEyLDI3IEBACiAJCQkJZGllICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKIAkJCWZpCiAKLQkJCSh1bnNldCBHSVRfRElSOyBjZCAiJHBhdGgiICYmCi0JCQkJICBnaXQtY2hlY2tvdXQgJGZvcmNlIC1xICIkc2hhMSIpIHx8Ci0JCQlkaWUgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCisJCQljYXNlICIkdXBkYXRlX21vZHVsZSIgaW4KKwkJCXJlYmFzZSkKKwkJCQljb21tYW5kPSJnaXQgcmViYXNlIgorCQkJCWFjdGlvbj0icmViYXNlIgorCQkJCW1zZz0icmViYXNlZCBvbnRvIgorCQkJCTs7CisJCQltZXJnZSkKKwkJCQljb21tYW5kPSJnaXQgbWVyZ2UiCisJCQkJYWN0aW9uPSJtZXJnZSIKKwkJCQltc2c9Im1lcmdlZCBpbiIKKwkJCQk7OworCQkJKikKKwkJCQljb21tYW5kPSJnaXQgY2hlY2tvdXQgJGZvcmNlIC1xIgorCQkJCWFjdGlvbj0iY2hlY2tvdXQiCisJCQkJbXNnPSJjaGVja2VkIG91dCIKKwkJCQk7OworCQkJZXNhYwogCi0JCQlzYXkgIlN1Ym1vZHVsZSBwYXRoICckcGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCisJCQkodW5zZXQgR0lUX0RJUjsgY2QgIiRwYXRoIiAmJiAkY29tbWFuZCAiJHNoYTEiKSB8fAorCQkJZGllICJVbmFibGUgdG8gJGFjdGlvbiAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCisJCQlzYXkgIlN1Ym1vZHVsZSBwYXRoICckcGF0aCc6ICRtc2cgJyRzaGExJyIKIAkJZmkKIAlkb25lCiB9CkBAIC01OTMsNyArNjQ3LDcgQEAKIAlkbwogCQljYXNlICIkMSIgaW4KIAkJLXF8LS1xdWlldCkKLQkJCXF1aWV0PTEKKwkJCUdJVF9RVUlFVD0xCiAJCQk7OwogCQktLWNhY2hlZCkKIAkJCWNhY2hlZD0xCkBAIC02NDcsNyArNzAxLDcgQEAKIAlkbwogCQljYXNlICIkMSIgaW4KIAkJLXF8LS1xdWlldCkKLQkJCXF1aWV0PTEKKwkJCUdJVF9RVUlFVD0xCiAJCQlzaGlmdAogCQkJOzsKIAkJLS0pCkBAIC03MDIsNyArNzU2LDcgQEAKIAkJY29tbWFuZD0kMQogCQk7OwogCS1xfC0tcXVpZXQpCi0JCXF1aWV0PTEKKwkJR0lUX1FVSUVUPTEKIAkJOzsKIAktYnwtLWJyYW5jaCkKIAkJY2FzZSAiJDIiIGluCmRpZmYgLS1naXQgYS9naXQtc3ZuLnBlcmwgYi9naXQtc3ZuLnBlcmwKaW5kZXggZWYxZDMwZC4uMjRiZGJmNSAxMDA3NTUKLS0tIGEvZ2l0LXN2bi5wZXJsCisrKyBiL2dpdC1zdm4ucGVybApAQCAtNSw3ICs1LDcgQEAKIHVzZSBzdHJpY3Q7CiB1c2UgdmFycyBxdy8JJEFVVEhPUiAkVkVSU0lPTgogCQkkc2hhMSAkc2hhMV9zaG9ydCAkX3JldmlzaW9uICRfcmVwb3NpdG9yeQotCQkkX3EgJF9hdXRob3JzICV1c2Vycy87CisJCSRfcSAkX2F1dGhvcnMgJF9hdXRob3JzX3Byb2cgJXVzZXJzLzsKICRBVVRIT1IgPSAnRXJpYyBXb25nIDxub3JtYWxwZXJzb25AeWhidC5uZXQ+JzsKICRWRVJTSU9OID0gJ0BAR0lUX1ZFUlNJT05AQCc7CiAKQEAgLTE5LDYgKzE5LDcgQEAKICRHaXQ6OlNWTjo6ZGVmYXVsdF9yZXBvX2lkID0gJ3N2bic7CiAkR2l0OjpTVk46OmRlZmF1bHRfcmVmX2lkID0gJEVOVntHSVRfU1ZOX0lEfSB8fCAnZ2l0LXN2bic7CiAkR2l0OjpTVk46OlJhOjpfbG9nX3dpbmRvd19zaXplID0gMTAwOworJEdpdDo6U1ZOOjpfbWluaW1pemVfdXJsID0gJ3Vuc2V0JzsKIAogJEdpdDo6U1ZOOjpMb2c6OlRaID0gJEVOVntUWn07CiAkRU5We1RafSA9ICdVVEMnOwpAQCAtMzEsNiArMzIsNyBAQAogaWYgKCRTVk46OkNvcmU6OlZFUlNJT04gbHQgJzEuMS4wJykgewogCWZhdGFsICJOZWVkIFNWTjo6Q29yZSAxLjEuMCBvciBiZXR0ZXIgKGdvdCAkU1ZOOjpDb3JlOjpWRVJTSU9OKSI7CiB9CitteSAkY2FuX2NvbXByZXNzID0gZXZhbCB7IHJlcXVpcmUgQ29tcHJlc3M6OlpsaWI7IDF9OwogcHVzaCBAR2l0OjpTVk46OlJhOjpJU0EsICdTVk46OlJhJzsKIHB1c2ggQFNWTjo6R2l0OjpFZGl0b3I6OklTQSwgJ1NWTjo6RGVsdGE6OkVkaXRvcic7CiBwdXNoIEBTVk46OkdpdDo6RmV0Y2hlcjo6SVNBLCAnU1ZOOjpEZWx0YTo6RWRpdG9yJzsKQEAgLTM5LDYgKzQxLDggQEAKIHVzZSBJTzo6RmlsZSBxdy8vOwogdXNlIEZpbGU6OkJhc2VuYW1lIHF3L2Rpcm5hbWUgYmFzZW5hbWUvOwogdXNlIEZpbGU6OlBhdGggcXcvbWtwYXRoLzsKK3VzZSBGaWxlOjpTcGVjOwordXNlIEZpbGU6OkZpbmQ7CiB1c2UgR2V0b3B0OjpMb25nIHF3Lzpjb25maWcgZ251X2dldG9wdCBub19pZ25vcmVfY2FzZSBhdXRvX2FiYnJldi87CiB1c2UgSVBDOjpPcGVuMzsKIHVzZSBHaXQ7CkBAIC02Miw3ICs2Niw3IEBACiAkc2hhMSA9IHFyL1thLWZcZF17NDB9LzsKICRzaGExX3Nob3J0ID0gcXIvW2EtZlxkXXs0LDQwfS87CiBteSAoJF9zdGRpbiwgJF9oZWxwLCAkX2VkaXQsCi0JJF9tZXNzYWdlLCAkX2ZpbGUsCisJJF9tZXNzYWdlLCAkX2ZpbGUsICRfYnJhbmNoX2Rlc3QsCiAJJF90ZW1wbGF0ZSwgJF9zaGFyZWQsCiAJJF92ZXJzaW9uLCAkX2ZldGNoX2FsbCwgJF9ub19yZWJhc2UsICRfZmV0Y2hfcGFyZW50LAogCSRfbWVyZ2UsICRfc3RyYXRlZ3ksICRfZHJ5X3J1biwgJF9sb2NhbCwKQEAgLTc2LDYgKzgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgJ2lnbm9yZS1wYXRocz1zJyA9PiBcJFNWTjo6R2l0OjpGZXRjaGVyOjpfaWdub3JlX3JlZ2V4ICk7CiBteSAlZmNfb3B0cyA9ICggJ2ZvbGxvdy1wYXJlbnR8Zm9sbG93IScgPT4gXCRHaXQ6OlNWTjo6X2ZvbGxvd19wYXJlbnQsCiAJCSdhdXRob3JzLWZpbGV8QT1zJyA9PiBcJF9hdXRob3JzLAorCQknYXV0aG9ycy1wcm9nPXMnID0+IFwkX2F1dGhvcnNfcHJvZywKIAkJJ3JlcGFjazppJyA9PiBcJEdpdDo6U1ZOOjpfcmVwYWNrLAogCQknbm9NZXRhZGF0YScgPT4gXCRHaXQ6OlNWTjo6X25vX21ldGFkYXRhLAogCQkndXNlU3ZtUHJvcHMnID0+IFwkR2l0OjpTVk46Ol91c2Vfc3ZtX3Byb3BzLApAQCAtOTAsMTMgKzk1LDEzIEBACiAJCSdsb2NhbHRpbWUnID0+IFwkR2l0OjpTVk46Ol9sb2NhbHRpbWUsCiAJCSVyZW1vdGVfb3B0cyApOwogCi1teSAoJF90cnVuaywgJF90YWdzLCAkX2JyYW5jaGVzLCAkX3N0ZGxheW91dCk7CitteSAoJF90cnVuaywgQF90YWdzLCBAX2JyYW5jaGVzLCAkX3N0ZGxheW91dCk7CiBteSAlaWN2OwogbXkgJWluaXRfb3B0cyA9ICggJ3RlbXBsYXRlPXMnID0+IFwkX3RlbXBsYXRlLCAnc2hhcmVkOnMnID0+IFwkX3NoYXJlZCwKLSAgICAgICAgICAgICAgICAgICd0cnVua3xUPXMnID0+IFwkX3RydW5rLCAndGFnc3x0PXMnID0+IFwkX3RhZ3MsCi0gICAgICAgICAgICAgICAgICAnYnJhbmNoZXN8Yj1zJyA9PiBcJF9icmFuY2hlcywgJ3ByZWZpeD1zJyA9PiBcJF9wcmVmaXgsCisgICAgICAgICAgICAgICAgICAndHJ1bmt8VD1zJyA9PiBcJF90cnVuaywgJ3RhZ3N8dD1zQCcgPT4gXEBfdGFncywKKyAgICAgICAgICAgICAgICAgICdicmFuY2hlc3xiPXNAJyA9PiBcQF9icmFuY2hlcywgJ3ByZWZpeD1zJyA9PiBcJF9wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAnc3RkbGF5b3V0fHMnID0+IFwkX3N0ZGxheW91dCwKLSAgICAgICAgICAgICAgICAgICdtaW5pbWl6ZS11cmx8bScgPT4gXCRHaXQ6OlNWTjo6X21pbmltaXplX3VybCwKKyAgICAgICAgICAgICAgICAgICdtaW5pbWl6ZS11cmx8bSEnID0+IFwkR2l0OjpTVk46Ol9taW5pbWl6ZV91cmwsCiAJCSAgJ25vLW1ldGFkYXRhJyA9PiBzdWIgeyAkaWN2e25vTWV0YWRhdGF9ID0gMSB9LAogCQkgICd1c2Utc3ZtLXByb3BzJyA9PiBzdWIgeyAkaWN2e3VzZVN2bVByb3BzfSA9IDEgfSwKIAkJICAndXNlLXN2bnN5bmMtcHJvcHMnID0+IHN1YiB7ICRpY3Z7dXNlU3Zuc3luY1Byb3BzfSA9IDEgfSwKQEAgLTEzOSwxMSArMTQ0LDEzIEBACiAJYnJhbmNoID0+IFsgXCZjbWRfYnJhbmNoLAogCSAgICAgICAgICAgICdDcmVhdGUgYSBicmFuY2ggaW4gdGhlIFNWTiByZXBvc2l0b3J5JywKIAkgICAgICAgICAgICB7ICdtZXNzYWdlfG09cycgPT4gXCRfbWVzc2FnZSwKKwkgICAgICAgICAgICAgICdkZXN0aW5hdGlvbnxkPXMnID0+IFwkX2JyYW5jaF9kZXN0LAogCSAgICAgICAgICAgICAgJ2RyeS1ydW58bicgPT4gXCRfZHJ5X3J1biwKIAkJICAgICAgJ3RhZ3x0JyA9PiBcJF90YWcgfSBdLAogCXRhZyA9PiBbIHN1YiB7ICRfdGFnID0gMTsgY21kX2JyYW5jaChAXykgfSwKIAkgICAgICAgICAnQ3JlYXRlIGEgdGFnIGluIHRoZSBTVk4gcmVwb3NpdG9yeScsCiAJICAgICAgICAgeyAnbWVzc2FnZXxtPXMnID0+IFwkX21lc3NhZ2UsCisJICAgICAgICAgICAnZGVzdGluYXRpb258ZD1zJyA9PiBcJF9icmFuY2hfZGVzdCwKIAkgICAgICAgICAgICdkcnktcnVufG4nID0+IFwkX2RyeV9ydW4gfSBdLAogCSdzZXQtdHJlZScgPT4gWyBcJmNtZF9zZXRfdHJlZSwKIAkgICAgICAgICAgICAgICAgIlNldCBhbiBTVk4gcmVwb3NpdG9yeSB0byBhIGdpdCB0cmVlLWlzaCIsCkBAIC0yMDksNiArMjE2LDE0IEBACiAJJ2JsYW1lJyA9PiBbIFwmR2l0OjpTVk46OkxvZzo6Y21kX2JsYW1lLAogCSAgICAgICAgICAgICJTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUiLAogCQkgICAgeyAnZ2l0LWZvcm1hdCcgPT4gXCRfZ2l0X2Zvcm1hdCB9IF0sCisJJ3Jlc2V0JyA9PiBbIFwmY21kX3Jlc2V0LAorCQkgICAgICJVbmRvIGZldGNoZXMgYmFjayB0byB0aGUgc3BlY2lmaWVkIFNWTiByZXZpc2lvbiIsCisJCSAgICAgeyAncmV2aXNpb258cj1zJyA9PiBcJF9yZXZpc2lvbiwKKwkJICAgICAgICdwYXJlbnR8cCcgPT4gXCRfZmV0Y2hfcGFyZW50IH0gXSwKKwknZ2MnID0+IFsgXCZjbWRfZ2MsCisJCSAgIkNvbXByZXNzIHVuaGFuZGxlZC5sb2cgZmlsZXMgaW4gLmdpdC9zdm4gYW5kIHJlbW92ZSAiIC4KKwkJICAiaW5kZXggZmlsZXMgaW4gLmdpdC9zdm4iLAorCQl7fSBdLAogKTsKIAogbXkgJGNtZDsKQEAgLTIxNyw2ICsyMzIsOSBAQAogCQkkY21kID0gJEFSR1ZbJGldOwogCQlzcGxpY2UgQEFSR1YsICRpLCAxOwogCQlsYXN0OworCX0gZWxzaWYgKCRBUkdWWyRpXSBlcSAnaGVscCcpIHsKKwkJJGNtZCA9ICRBUkdWWyRpKzFdOworCQl1c2FnZSgwKTsKIAl9CiB9OwogCkBAIC0yNjMsNiArMjgxLDkgQEAKIHZlcnNpb24oKSBpZiAkX3ZlcnNpb247CiB1c2FnZSgxKSB1bmxlc3MgZGVmaW5lZCAkY21kOwogbG9hZF9hdXRob3JzKCkgaWYgJF9hdXRob3JzOworaWYgKGRlZmluZWQgJF9hdXRob3JzX3Byb2cpIHsKKwkkX2F1dGhvcnNfcHJvZyA9ICInIiAuIEZpbGU6OlNwZWMtPnJlbDJhYnMoJF9hdXRob3JzX3Byb2cpIC4gIiciOworfQogCiB1bmxlc3MgKCRjbWQgPX4gL14oPzpjbG9uZXxpbml0fG11bHRpLWluaXR8Y29tbWl0LWRpZmYpJC8pIHsKIAlHaXQ6OlNWTjo6TWlncmF0aW9uOjptaWdyYXRpb25fY2hlY2soKTsKQEAgLTM1Myw3ICszNzQsNyBAQAogc3ViIGNtZF9jbG9uZSB7CiAJbXkgKCR1cmwsICRwYXRoKSA9IEBfOwogCWlmICghZGVmaW5lZCAkcGF0aCAmJgotCSAgICAoZGVmaW5lZCAkX3RydW5rIHx8IGRlZmluZWQgJF9icmFuY2hlcyB8fCBkZWZpbmVkICRfdGFncyB8fAorCSAgICAoZGVmaW5lZCAkX3RydW5rIHx8IEBfYnJhbmNoZXMgfHwgQF90YWdzIHx8CiAJICAgICBkZWZpbmVkICRfc3RkbGF5b3V0KSAmJgogCSAgICAkdXJsICF+IG0jXlthLXpcK10rOi8vIykgewogCQkkcGF0aCA9ICR1cmw7CkBAIC0zNjEsMjIgKzM4MiwyOCBAQAogCSRwYXRoID0gYmFzZW5hbWUoJHVybCkgaWYgIWRlZmluZWQgJHBhdGggfHwgIWxlbmd0aCAkcGF0aDsKIAljbWRfaW5pdCgkdXJsLCAkcGF0aCk7CiAJR2l0OjpTVk46OmZldGNoX2FsbCgkR2l0OjpTVk46OmRlZmF1bHRfcmVwb19pZCk7CisJY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnc3ZuLmF1dGhvcnNmaWxlJywgJF9hdXRob3JzKSBpZiAkX2F1dGhvcnM7CiB9CiAKIHN1YiBjbWRfaW5pdCB7CiAJaWYgKGRlZmluZWQgJF9zdGRsYXlvdXQpIHsKIAkJJF90cnVuayA9ICd0cnVuaycgaWYgKCFkZWZpbmVkICRfdHJ1bmspOwotCQkkX3RhZ3MgPSAndGFncycgaWYgKCFkZWZpbmVkICRfdGFncyk7Ci0JCSRfYnJhbmNoZXMgPSAnYnJhbmNoZXMnIGlmICghZGVmaW5lZCAkX2JyYW5jaGVzKTsKKwkJQF90YWdzID0gJ3RhZ3MnIGlmICghIEBfdGFncyk7CisJCUBfYnJhbmNoZXMgPSAnYnJhbmNoZXMnIGlmICghIEBfYnJhbmNoZXMpOwogCX0KLQlpZiAoZGVmaW5lZCAkX3RydW5rIHx8IGRlZmluZWQgJF9icmFuY2hlcyB8fCBkZWZpbmVkICRfdGFncykgeworCWlmIChkZWZpbmVkICRfdHJ1bmsgfHwgQF9icmFuY2hlcyB8fCBAX3RhZ3MpIHsKIAkJcmV0dXJuIGNtZF9tdWx0aV9pbml0KEBfKTsKIAl9CiAJbXkgJHVybCA9IHNoaWZ0IG9yIGRpZSAiU1ZOIHJlcG9zaXRvcnkgbG9jYXRpb24gcmVxdWlyZWQgIiwKIAkgICAgICAgICAgICAgICAgICAgICAgICJhcyBhIGNvbW1hbmQtbGluZSBhcmd1bWVudFxuIjsKKwkkdXJsID0gY2Fub25pY2FsaXplX3VybCgkdXJsKTsKIAlpbml0X3N1YmRpcihAXyk7CiAJZG9fZ2l0X2luaXRfZGIoKTsKIAorCWlmICgkR2l0OjpTVk46Ol9taW5pbWl6ZV91cmwgZXEgJ3Vuc2V0JykgeworCQkkR2l0OjpTVk46Ol9taW5pbWl6ZV91cmwgPSAwOworCX0KKwogCUdpdDo6U1ZOLT5pbml0KCR1cmwpOwogfQogCkBAIC00NDgsOCArNDc1LDIyIEBACiAJCSdDYW5ub3QgZGNvbW1pdCB3aXRoIGEgZGlydHkgaW5kZXguICBDb21taXQgeW91ciBjaGFuZ2VzIGZpcnN0LCAnCiAJCS4gIm9yIHN0YXNoIHRoZW0gd2l0aCBgZ2l0IHN0YXNoJy5cbiI7CiAJJGhlYWQgfHw9ICdIRUFEJzsKKworCW15ICRvbGRfaGVhZDsKKwlpZiAoJGhlYWQgbmUgJ0hFQUQnKSB7CisJCSRvbGRfaGVhZCA9IGV2YWwgeworCQkJY29tbWFuZF9vbmVsaW5lKFtxdy9zeW1ib2xpYy1yZWYgLXEgSEVBRC9dKQorCQl9OworCQlpZiAoJG9sZF9oZWFkKSB7CisJCQkkb2xkX2hlYWQgPX4gc3tecmVmcy9oZWFkcy99e307CisJCX0gZWxzZSB7CisJCQkkb2xkX2hlYWQgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKHF3L3Jldi1wYXJzZSBIRUFELykgfTsKKwkJfQorCQljb21tYW5kKFsnY2hlY2tvdXQnLCAkaGVhZF0sIFNUREVSUiA9PiAwKTsKKwl9CisKIAlteSBAcmVmczsKLQlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygkaGVhZCwgXEByZWZzKTsKKwlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcsIFxAcmVmcyk7CiAJdW5sZXNzICgkZ3MpIHsKIAkJZGllICJVbmFibGUgdG8gZGV0ZXJtaW5lIHVwc3RyZWFtIFNWTiBpbmZvcm1hdGlvbiBmcm9tICIsCiAJCSAgICAiJGhlYWQgaGlzdG9yeS5cblBlcmhhcHMgdGhlIHJlcG9zaXRvcnkgaXMgZW1wdHkuIjsKQEAgLTUzNSw3ICs1NzYsNyBAQAogCQkJaWYgKEBkaWZmKSB7CiAJCQkJQHJlZnMgPSAoKTsKIAkJCQlteSAoJHVybF8sICRyZXZfLCAkdXVpZF8sICRnc18pID0KLQkJCQkgICAgICAgICAgICAgIHdvcmtpbmdfaGVhZF9pbmZvKCRoZWFkLCBcQHJlZnMpOworCQkJCSAgICAgICAgICAgICAgd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnLCBcQHJlZnMpOwogCQkJCW15ICgkbGluZWFyX3JlZnNfLCAkcGFyZW50c18pID0KIAkJCQkgICAgICAgICAgICAgIGxpbmVhcml6ZV9oaXN0b3J5KCRnc18sIFxAcmVmcyk7CiAJCQkJaWYgKHNjYWxhcihAJGxpbmVhcl9yZWZzKSAhPQpAQCAtNTczLDYgKzYxNCwyMiBAQAogCQkJfQogCQl9CiAJfQorCisJaWYgKCRvbGRfaGVhZCkgeworCQlteSAkbmV3X2hlYWQgPSBjb21tYW5kX29uZWxpbmUocXcvcmV2LXBhcnNlIEhFQUQvKTsKKwkJbXkgJG5ld19pc19zeW1ib2xpYyA9IGV2YWwgeworCQkJY29tbWFuZF9vbmVsaW5lKHF3L3N5bWJvbGljLXJlZiAtcSBIRUFELyk7CisJCX07CisJCWlmICgkbmV3X2lzX3N5bWJvbGljKSB7CisJCQlwcmludCAiZGNvbW1pdHRlZCB0aGUgYnJhbmNoICIsICRoZWFkLCAiXG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgImRjb21taXR0ZWQgb24gYSBkZXRhY2hlZCBIRUFEIGJlY2F1c2UgeW91IGdhdmUgIiwKKwkJCSAgICAgICJhIHJldmlzaW9uIGFyZ3VtZW50LlxuIiwKKwkJCSAgICAgICJUaGUgcmV3cml0dGVuIGNvbW1pdCBpczogIiwgJG5ld19oZWFkLCAiXG4iOworCQl9CisJCWNvbW1hbmQoWydjaGVja291dCcsICRvbGRfaGVhZF0sIFNUREVSUiA9PiAwKTsKKwl9CisKIAl1bmxpbmsgJGdzLT57aW5kZXh9OwogfQogCkBAIC01ODcsNyArNjQ0LDQ2IEBACiAJbXkgKCRzcmMsICRyZXYsIHVuZGVmLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJGhlYWQpOwogCiAJbXkgJHJlbW90ZSA9IEdpdDo6U1ZOOjpyZWFkX2FsbF9yZW1vdGVzKCktPnskZ3MtPntyZXBvX2lkfX07Ci0JbXkgJGdsb2IgPSAkcmVtb3RlLT57ICRfdGFnID8gJ3RhZ3MnIDogJ2JyYW5jaGVzJyB9OworCW15ICRhbGxnbG9icyA9ICRyZW1vdGUtPnsgJF90YWcgPyAndGFncycgOiAnYnJhbmNoZXMnIH07CisJbXkgJGdsb2I7CisJaWYgKCQjeyRhbGxnbG9ic30gPT0gMCkgeworCQkkZ2xvYiA9ICRhbGxnbG9icy0+WzBdOworCX0gZWxzZSB7CisJCXVubGVzcyhkZWZpbmVkICRfYnJhbmNoX2Rlc3QpIHsKKwkJCWRpZSAiTXVsdGlwbGUgIiwKKwkJCSAgICAkX3RhZyA/ICJ0YWciIDogImJyYW5jaCIsCisJCQkgICAgIiBwYXRocyBkZWZpbmVkIGZvciBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuXG4iLAorCQkgICAgICAgICAgICAiWW91IG11c3Qgc3BlY2lmeSB3aGVyZSB5b3Ugd2FudCB0byBjcmVhdGUgdGhlICIsCisJCSAgICAgICAgICAgICRfdGFnID8gInRhZyIgOiAiYnJhbmNoIiwKKwkJICAgICAgICAgICAgIiB3aXRoIHRoZSAtLWRlc3RpbmF0aW9uIGFyZ3VtZW50LlxuIjsKKwkJfQorCQlmb3JlYWNoIG15ICRnIChAeyRhbGxnbG9ic30pIHsKKwkJCSMgU1ZOOjpHaXQ6OkVkaXRvciBjb3VsZCBwcm9iYWJseSBiZSBtb3ZlZCB0byBHaXQucG0uLgorCQkJbXkgJHJlID0gU1ZOOjpHaXQ6OkVkaXRvcjo6Z2xvYjJwYXQoJGctPntwYXRofS0+e2xlZnR9KTsKKwkJCWlmICgkX2JyYW5jaF9kZXN0ID1+IC8kcmUvKSB7CisJCQkJJGdsb2IgPSAkZzsKKwkJCQlsYXN0OworCQkJfQorCQl9CisJCXVubGVzcyAoZGVmaW5lZCAkZ2xvYikgeworCQkJbXkgJGRlc3RfcmUgPSBxci9cYlxRJF9icmFuY2hfZGVzdFxFXGIvOworCQkJZm9yZWFjaCBteSAkZyAoQHskYWxsZ2xvYnN9KSB7CisJCQkJJGctPntwYXRofS0+e2xlZnR9ID1+IC8kZGVzdF9yZS8gb3IgbmV4dDsKKwkJCQlpZiAoZGVmaW5lZCAkZ2xvYikgeworCQkJCQlkaWUgIkFtYmlndW91cyBkZXN0aW5hdGlvbjogIiwKKwkJCQkJICAgICRfYnJhbmNoX2Rlc3QsICJcbm1hdGNoZXMgYm90aCAnIiwKKwkJCQkJICAgICRnbG9iLT57cGF0aH0tPntsZWZ0fSwgIicgYW5kICciLAorCQkJCQkgICAgJGctPntwYXRofS0+e2xlZnR9LCAiJ1xuIjsKKwkJCQl9CisJCQkJJGdsb2IgPSAkZzsKKwkJCX0KKwkJCXVubGVzcyAoZGVmaW5lZCAkZ2xvYikgeworCQkJCWRpZSAiVW5rbm93biAiLAorCQkJCSAgICAkX3RhZyA/ICJ0YWciIDogImJyYW5jaCIsCisJCQkJICAgICIgZGVzdGluYXRpb24gJF9icmFuY2hfZGVzdFxuIjsKKwkJCX0KKwkJfQorCX0KIAlteSAoJGxmdCwgJHJndCkgPSBAeyAkZ2xvYi0+e3BhdGh9IH17cXcvbGVmdCByaWdodC99OwogCW15ICRkc3QgPSBqb2luICcvJywgJHJlbW90ZS0+e3VybH0sICRsZnQsICRicmFuY2hfbmFtZSwgKCRyZ3QgfHwgKCkpOwogCkBAIC03MzUsNiArODMxLDEyIEBACiAJcmV0dXJuICRwYXRoOwogfQogCitzdWIgY2Fub25pY2FsaXplX3VybCB7CisJbXkgKCR1cmwpID0gQF87CisJJHVybCA9fiBzI14oW146XSs6Ly9bXi9dKi8pKC4qKSQjJDEgLiBjYW5vbmljYWxpemVfcGF0aCgkMikjZTsKKwlyZXR1cm4gJHVybDsKK30KKwogIyBnZXRfc3ZucHJvcHMoUEFUSCkKICMgLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEhlbHBlciBmb3IgY21kX3Byb3BnZXQgYW5kIGNtZF9wcm9wbGlzdCBiZWxvdy4KQEAgLTc5NCwxNyArODk2LDEzIEBACiAKIHN1YiBjbWRfbXVsdGlfaW5pdCB7CiAJbXkgJHVybCA9IHNoaWZ0OwotCXVubGVzcyAoZGVmaW5lZCAkX3RydW5rIHx8IGRlZmluZWQgJF9icmFuY2hlcyB8fCBkZWZpbmVkICRfdGFncykgeworCXVubGVzcyAoZGVmaW5lZCAkX3RydW5rIHx8IEBfYnJhbmNoZXMgfHwgQF90YWdzKSB7CiAJCXVzYWdlKDEpOwogCX0KIAotCSMgdGhlcmUgYXJlIGN1cnJlbnRseSBzb21lIGJ1Z3MgdGhhdCBwcmV2ZW50IG11bHRpLWluaXQvbXVsdGktZmV0Y2gKLQkjIHNldHVwcyBmcm9tIHdvcmtpbmcgd2VsbCB3aXRob3V0IHRoaXMuCi0JJEdpdDo6U1ZOOjpfbWluaW1pemVfdXJsID0gMTsKLQogCSRfcHJlZml4ID0gJycgdW5sZXNzIGRlZmluZWQgJF9wcmVmaXg7CiAJaWYgKGRlZmluZWQgJHVybCkgewotCQkkdXJsID1+IHMjLyskIyM7CisJCSR1cmwgPSBjYW5vbmljYWxpemVfdXJsKCR1cmwpOwogCQlpbml0X3N1YmRpcihAXyk7CiAJfQogCWRvX2dpdF9pbml0X2RiKCk7CkBAIC04MTksMTAgKzkxNywxNCBAQAogCQkJCQkJICAgdW5kZWYsICR0cnVua19yZWYpOwogCQl9CiAJfQotCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkX2JyYW5jaGVzIHx8IGRlZmluZWQgJF90YWdzOworCXJldHVybiB1bmxlc3MgQF9icmFuY2hlcyB8fCBAX3RhZ3M7CiAJbXkgJHJhID0gJHVybCA/IEdpdDo6U1ZOOjpSYS0+bmV3KCR1cmwpIDogdW5kZWY7Ci0JY29tcGxldGVfdXJsX2xzX2luaXQoJHJhLCAkX2JyYW5jaGVzLCAnLS1icmFuY2hlcy8tYicsICRfcHJlZml4KTsKLQljb21wbGV0ZV91cmxfbHNfaW5pdCgkcmEsICRfdGFncywgJy0tdGFncy8tdCcsICRfcHJlZml4IC4gJ3RhZ3MvJyk7CisJZm9yZWFjaCBteSAkcGF0aCAoQF9icmFuY2hlcykgeworCQljb21wbGV0ZV91cmxfbHNfaW5pdCgkcmEsICRwYXRoLCAnLS1icmFuY2hlcy8tYicsICRfcHJlZml4KTsKKwl9CisJZm9yZWFjaCBteSAkcGF0aCAoQF90YWdzKSB7CisJCWNvbXBsZXRlX3VybF9sc19pbml0KCRyYSwgJHBhdGgsICctLXRhZ3MvLXQnLCAkX3ByZWZpeC4ndGFncy8nKTsKKwl9CiB9CiAKIHN1YiBjbWRfbXVsdGlfZmV0Y2ggewpAQCAtMTAxNSw2ICsxMTE3LDI4IEBACiAJcHJpbnQgJHJlc3VsdCwgIlxuIjsKIH0KIAorc3ViIGNtZF9yZXNldCB7CisJbXkgJHRhcmdldCA9IHNoaWZ0IHx8ICRfcmV2aXNpb24gb3IgZGllICJTVk4gcmV2aXNpb24gcmVxdWlyZWRcbiI7CisJJHRhcmdldCA9ICQxIGlmICR0YXJnZXQgPX4gL15yKFxkKykkLzsKKwkkdGFyZ2V0ID1+IC9eXGQrJC8gb3IgZGllICJOdW1lcmljIFNWTiByZXZpc2lvbiBleHBlY3RlZFxuIjsKKwlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcpOworCXVubGVzcyAoJGdzKSB7CisJCWRpZSAiVW5hYmxlIHRvIGRldGVybWluZSB1cHN0cmVhbSBTVk4gaW5mb3JtYXRpb24gZnJvbSAiLgorCQkgICAgImhpc3RvcnlcbiI7CisJfQorCW15ICgkciwgJGMpID0gJGdzLT5maW5kX3Jldl9iZWZvcmUoJHRhcmdldCwgbm90ICRfZmV0Y2hfcGFyZW50KTsKKwkkZ3MtPnJldl9tYXBfc2V0KCRyLCAkYywgJ3Jlc2V0JywgJHV1aWQpOworCXByaW50ICJyJHIgPSAkYyAoJGdzLT57cmVmX2lkfSlcbiI7Cit9CisKK3N1YiBjbWRfZ2MgeworCWlmICghJGNhbl9jb21wcmVzcykgeworCQl3YXJuICJDb21wcmVzczo6WmxpYiBjb3VsZCBub3QgYmUgZm91bmQ7IHVuaGFuZGxlZC5sb2cgIiAuCisJCSAgICAgImZpbGVzIHdpbGwgbm90IGJlIGNvbXByZXNzZWQuXG4iOworCX0KKwlmaW5kKHsgd2FudGVkID0+IFwmZ2NfZGlyZWN0b3J5LCBub19jaGRpciA9PiAxfSwgIiRFTlZ7R0lUX0RJUn0vc3ZuIik7Cit9CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyB1dGlsaXR5IGZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIHN1YiByZWJhc2VfY21kIHsKQEAgLTEwODQsNyArMTIwOCw3IEBACiAJCSAgICAid2FudGVkIHRvIHNldCB0bzogJGdzLT57dXJsfVxuIjsKIAl9CiAJY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAkaywgJGdzLT57dXJsfSkgdW5sZXNzICRvcmlnX3VybDsKLQlteSAkcmVtb3RlX3BhdGggPSAiJHJhLT57c3ZuX3BhdGh9LyRyZXBvX3BhdGgiOworCW15ICRyZW1vdGVfcGF0aCA9ICIkZ3MtPntwYXRofS8kcmVwb19wYXRoIjsKIAkkcmVtb3RlX3BhdGggPX4gcyMvKyMvI2c7CiAJJHJlbW90ZV9wYXRoID1+IHMjXi8jI2c7CiAJJHJlbW90ZV9wYXRoIC49ICIvKiIgaWYgJHJlbW90ZV9wYXRoICF+IC9cKi87CkBAIC0xMDkzLDYgKzEyMTcsNyBAQAogCQlkaWUgIi0tcHJlZml4PSckcGZ4JyBtdXN0IGhhdmUgYSB0cmFpbGluZyBzbGFzaCAnLydcbiI7CiAJfQogCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsCisJCSAgICAgICctLWFkZCcsCiAJICAgICAgICAgICAgICAic3ZuLXJlbW90ZS4kZ3MtPntyZXBvX2lkfS4kbiIsCiAJICAgICAgICAgICAgICAiJHJlbW90ZV9wYXRoOnJlZnMvcmVtb3Rlcy8kcGZ4KiIgLgogCSAgICAgICAgICAgICAgICAoJy8qJyB4ICgoJHJlbW90ZV9wYXRoID1+IHRyLyovKi8pIC0gMSkpICk7CkBAIC0xMTcyLDE2ICsxMjk3LDI3IEBACiAJfQogCXJlbmFtZSAkY29tbWl0X2VkaXRtc2csICRjb21taXRfbXNnIG9yIGNyb2FrICQhOwogCXsKKwkJcmVxdWlyZSBFbmNvZGU7CiAJCSMgU1ZOIHJlcXVpcmVzIG1lc3NhZ2VzIHRvIGJlIFVURi04IHdoZW4gZW50ZXJpbmcgdGhlIHJlcG8KIAkJbG9jYWwgJC87CiAJCW9wZW4gJGxvZ19maCwgJzwnLCAkY29tbWl0X21zZyBvciBjcm9hayAkITsKIAkJYmlubW9kZSAkbG9nX2ZoOwogCQljaG9tcCgkbG9nX2VudHJ5e2xvZ30gPSA8JGxvZ19maD4pOwogCi0JCWlmIChteSAkZW5jID0gR2l0Ojpjb25maWcoJ2kxOG4uY29tbWl0ZW5jb2RpbmcnKSkgewotCQkJcmVxdWlyZSBFbmNvZGU7Ci0JCQlFbmNvZGU6OmZyb21fdG8oJGxvZ19lbnRyeXtsb2d9LCAkZW5jLCAnVVRGLTgnKTsKKwkJbXkgJGVuYyA9IEdpdDo6Y29uZmlnKCdpMThuLmNvbW1pdGVuY29kaW5nJykgfHwgJ1VURi04JzsKKwkJbXkgJG1zZyA9ICRsb2dfZW50cnl7bG9nfTsKKworCQlldmFsIHsgJG1zZyA9IEVuY29kZTo6ZGVjb2RlKCRlbmMsICRtc2csIDEpIH07CisJCWlmICgkQCkgeworCQkJZGllICJDb3VsZCBub3QgZGVjb2RlIGFzICRlbmM6XG4iLCAkbXNnLAorCQkJICAgICJcblBlcmhhcHMgeW91IG5lZWQgdG8gc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmdcbiI7CiAJCX0KKworCQlldmFsIHsgJG1zZyA9IEVuY29kZTo6ZW5jb2RlKCdVVEYtOCcsICRtc2csIDEpIH07CisJCWRpZSAiQ291bGQgbm90IGVuY29kZSBhcyBVVEYtODpcbiRtc2dcbiIgaWYgJEA7CisKKwkJJGxvZ19lbnRyeXtsb2d9ID0gJG1zZzsKKwogCQljbG9zZSAkbG9nX2ZoIG9yIGNyb2FrICQhOwogCX0KIAl1bmxpbmsgJGNvbW1pdF9tc2c7CkBAIC0xMjU1LDExICsxMzkxLDExIEBACiBzdWIgZXh0cmFjdF9tZXRhZGF0YSB7CiAJbXkgJGlkID0gc2hpZnQgb3IgcmV0dXJuICh1bmRlZiwgdW5kZWYsIHVuZGVmKTsKIAlteSAoJHVybCwgJHJldiwgJHV1aWQpID0gKCRpZCA9fiAvXlxzKmdpdC1zdm4taWQ6XHMrKC4qKVxAKFxkKykKLQkJCQkJCQlccyhbYS1mXGRcLV0rKSQveCk7CisJCQkJCQkJXHMoW2EtZlxkXC1dKykkL2l4KTsKIAlpZiAoIWRlZmluZWQgJHJldiB8fCAhJHV1aWQgfHwgISR1cmwpIHsKIAkJIyBzb21lIG9mIHRoZSBvcmlnaW5hbCByZXBvc2l0b3JpZXMgSSBtYWRlIGhhZAogCQkjIGlkZW50aWZpZXJzIGxpa2UgdGhpczoKLQkJKCRyZXYsICR1dWlkKSA9ICgkaWQgPX4vXlxzKmdpdC1zdm4taWQ6XHMoXGQrKVxAKFthLWZcZFwtXSspLyk7CisJCSgkcmV2LCAkdXVpZCkgPSAoJGlkID1+L15ccypnaXQtc3ZuLWlkOlxzKFxkKylcQChbYS1mXGRcLV0rKS9pKTsKIAl9CiAJcmV0dXJuICgkdXJsLCAkcmV2LCAkdXVpZCk7CiB9CkBAIC0xNDIzLDYgKzE1NTksMjUgQEAKIAlyZXR1cm4gJG1kNS0+aGV4ZGlnZXN0KCk7CiB9CiAKK3N1YiBnY19kaXJlY3RvcnkgeworCWlmICgkY2FuX2NvbXByZXNzICYmIC1mICRfICYmIGJhc2VuYW1lKCRfKSBlcSAidW5oYW5kbGVkLmxvZyIpIHsKKwkJbXkgJG91dF9maWxlbmFtZSA9ICRfIC4gIi5neiI7CisJCW9wZW4gbXkgJGluX2ZoLCAiPCIsICRfIG9yIGRpZSAiVW5hYmxlIHRvIG9wZW4gJF86ICQhXG4iOworCQliaW5tb2RlICRpbl9maDsKKwkJbXkgJGd6ID0gQ29tcHJlc3M6OlpsaWI6Omd6b3Blbigkb3V0X2ZpbGVuYW1lLCAiYWIiKSBvcgorCQkJCWRpZSAiVW5hYmxlIHRvIG9wZW4gJG91dF9maWxlbmFtZTogJCFcbiI7CisKKwkJbXkgJHJlczsKKwkJd2hpbGUgKCRyZXMgPSBzeXNyZWFkKCRpbl9maCwgbXkgJHN0ciwgMTAyNCkpIHsKKwkJCSRnei0+Z3p3cml0ZSgkc3RyKSBvcgorCQkJCWRpZSAiVW5hYmxlIHRvIHdyaXRlOiAiLiRnei0+Z3plcnJvcigpLiIhXG4iOworCQl9CisJCXVubGluayAkXyBvciBkaWUgInVubGluayAkRmlsZTo6RmluZDo6bmFtZTogJCFcbiI7CisJfSBlbHNpZiAoLWYgJF8gJiYgYmFzZW5hbWUoJF8pIGVxICJpbmRleCIpIHsKKwkJdW5saW5rICRfIG9yIGRpZSAidW5saW5rICRfOiAkIVxuIjsKKwl9Cit9CisKIHBhY2thZ2UgR2l0OjpTVk47CiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzOwpAQCAtMTU0MywxMiArMTY5OCwxNCBAQAogCW15ICRyYSA9IEdpdDo6U1ZOOjpSYS0+bmV3KCR1cmwpOwogCW15ICR1dWlkID0gJHJhLT5nZXRfdXVpZDsKIAlteSAkaGVhZCA9ICRyYS0+Z2V0X2xhdGVzdF9yZXZudW07CisJJHJhLT5nZXRfbG9nKCIiLCAkaGVhZCwgMCwgMSwgMCwgMSwgc3ViIHsgJGhlYWQgPSAkX1sxXSB9KTsKIAlteSAkYmFzZSA9IGRlZmluZWQgJGZldGNoID8gJGhlYWQgOiAwOwogCiAJIyByZWFkIHRoZSBtYXggcmV2cyBmb3Igd2lsZGNhcmQgZXhwYW5zaW9uIChicmFuY2hlcy8qLCB0YWdzLyopCiAJZm9yZWFjaCBteSAkdCAocXcvYnJhbmNoZXMgdGFncy8pIHsKIAkJZGVmaW5lZCAkcmVtb3RlLT57JHR9IG9yIG5leHQ7Ci0JCXB1c2ggQGdsb2JzLCAkcmVtb3RlLT57JHR9OworCQlwdXNoIEBnbG9icywgQHskcmVtb3RlLT57JHR9fTsKKwogCQlteSAkbWF4X3JldiA9IGV2YWwgeyB0bXBfY29uZmlnKHF3Ly0taW50IC0tZ2V0LywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICJzdm4tcmVtb3RlLiRyZXBvX2lkLiR7dH0tbWF4UmV2IikgfTsKIAkJaWYgKGRlZmluZWQgJG1heF9yZXYgJiYgKCRtYXhfcmV2IDwgJGJhc2UpKSB7CkBAIC0xNTk1LDE1ICsxNzUyLDE2IEBACiAJCX0gZWxzaWYgKG0hXiguKylcLihicmFuY2hlc3x0YWdzKT0KIAkJICAgICAgICAgICAoLiopOnJlZnMvcmVtb3Rlcy8oLispXHMqJC8heCkgewogCQkJbXkgKCRwLCAkZykgPSAoJDMsICQ0KTsKLQkJCW15ICRycyA9ICRyLT57JDF9LT57JDJ9ID0gewotCQkJICAgICAgICAgICAgICAgICAgdCA9PiAkMiwKLQkJCQkJICByZW1vdGUgPT4gJDEsCi0JCQkgICAgICAgICAgICAgICAgICBwYXRoID0+IEdpdDo6U1ZOOjpHbG9iU3BlYy0+bmV3KCRwKSwKLQkJCSAgICAgICAgICAgICAgICAgIHJlZiA9PiBHaXQ6OlNWTjo6R2xvYlNwZWMtPm5ldygkZykgfTsKKwkJCW15ICRycyA9IHsKKwkJCSAgICB0ID0+ICQyLAorCQkJICAgIHJlbW90ZSA9PiAkMSwKKwkJCSAgICBwYXRoID0+IEdpdDo6U1ZOOjpHbG9iU3BlYy0+bmV3KCRwKSwKKwkJCSAgICByZWYgPT4gR2l0OjpTVk46Okdsb2JTcGVjLT5uZXcoJGcpIH07CiAJCQlpZiAobGVuZ3RoKCRycy0+e3JlZn0tPntyaWdodH0pICE9IDApIHsKIAkJCQlkaWUgIlRoZSAnKicgZ2xvYiBjaGFyYWN0ZXIgbXVzdCBiZSB0aGUgbGFzdCAiLAogCQkJCSAgICAiY2hhcmFjdGVyIG9mICckZydcbiI7CiAJCQl9CisJCQlwdXNoIEB7ICRyLT57JDF9LT57JDJ9IH0sICRyczsKIAkJfQogCX0KIApAQCAtMTc0Myw5ICsxOTAxLDEwIEBACiAJCW5leHQgaWYgZGVmaW5lZCAkcmVwb3Nfcm9vdCAmJiAkcmVwb3Nfcm9vdCBuZSAkdTsKIAogCQlteSAkZmV0Y2ggPSAkcmVtb3Rlcy0+eyRyZXBvX2lkfS0+e2ZldGNofSB8fCB7fTsKLQkJZm9yZWFjaCAocXcvYnJhbmNoZXMgdGFncy8pIHsKLQkJCXJlc29sdmVfbG9jYWxfZ2xvYnMoJHUsICRmZXRjaCwKLQkJCSAgICAgICAgICAgICAgICAgICAgJHJlbW90ZXMtPnskcmVwb19pZH0tPnskX30pOworCQlmb3JlYWNoIG15ICR0IChxdy9icmFuY2hlcyB0YWdzLykgeworCQkJZm9yZWFjaCBteSAkZ2xvYnNwZWMgKEB7JHJlbW90ZXMtPnskcmVwb19pZH0tPnskdH19KSB7CisJCQkJcmVzb2x2ZV9sb2NhbF9nbG9icygkdSwgJGZldGNoLCAkZ2xvYnNwZWMpOworCQkJfQogCQl9CiAJCW15ICRwID0gJHBhdGg7CiAJCW15ICRyd3IgPSByZXdyaXRlX3Jvb3Qoe3JlcG9faWQgPT4gJHJlcG9faWR9KTsKQEAgLTE5MDMsNyArMjA2Miw3IEBACiAKIAkJY2hvbXAoJHNyYywgJHV1aWQpOwogCi0JCSR1dWlkID1+IG17XlswLTlhLWZcLV17MzAsfSR9CisJCSR1dWlkID1+IG17XlswLTlhLWZcLV17MzAsfSR9aQogCQkgICAgb3IgZGllICJkb2Vzbid0IGxvb2sgcmlnaHQgLSBzdm06dXVpZCBpcyAnJHV1aWQnXG4iOwogCiAJCSMgdGhlICchJyBpcyB1c2VkIHRvIG1hcmsgdGhlIHJlcG9zX3Jvb3QhL3JlbGF0aXZlL3BhdGgKQEAgLTE5ODksNyArMjE0OCw3IEBACiAJCSAgIGRpZSAiZG9lc24ndCBsb29rIHJpZ2h0IC0gc3ZuOnN5bmMtZnJvbS11cmwgaXMgJyR1cmwnXG4iOwogCiAJCW15ICR1dWlkID0gdG1wX2NvbmZpZygnLS1nZXQnLCAiJHNlY3Rpb24uc3Zuc3luYy11dWlkIik7Ci0JCSgkdXVpZCkgPSAoJHV1aWQgPX4gbXteKFswLTlhLWZcLV17MzAsfSkkfSkgb3IKKwkJKCR1dWlkKSA9ICgkdXVpZCA9fiBte14oWzAtOWEtZlwtXXszMCx9KSR9aSkgb3IKIAkJICAgZGllICJkb2Vzbid0IGxvb2sgcmlnaHQgLSBzdm46c3luYy1mcm9tLXV1aWQgaXMgJyR1dWlkJ1xuIjsKIAogCQkkc3Zuc3luYyA9IHsgdXJsID0+ICR1cmwsIHV1aWQgPT4gJHV1aWQgfQpAQCAtMjAwNyw3ICsyMTY2LDcgQEAKIAkgICAgICAgICAgIGRpZSAiZG9lc24ndCBsb29rIHJpZ2h0IC0gc3ZuOnN5bmMtZnJvbS11cmwgaXMgJyR1cmwnXG4iOwogCiAJbXkgJHV1aWQgPSAkcnAtPnsnc3ZuOnN5bmMtZnJvbS11dWlkJ30gb3IgZGllICRlcnIgLiAidXVpZFxuIjsKLQkoJHV1aWQpID0gKCR1dWlkID1+IG17XihbMC05YS1mXC1dezMwLH0pJH0pIG9yCisJKCR1dWlkKSA9ICgkdXVpZCA9fiBte14oWzAtOWEtZlwtXXszMCx9KSR9aSkgb3IKIAkgICAgICAgICAgIGRpZSAiZG9lc24ndCBsb29rIHJpZ2h0IC0gc3ZuOnN5bmMtZnJvbS11dWlkIGlzICckdXVpZCdcbiI7CiAKIAlteSAkc2VjdGlvbiA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0iOwpAQCAtMjAyMyw3ICsyMTgyLDcgQEAKIAl1bmxlc3MgKCRzZWxmLT57cmFfdXVpZH0pIHsKIAkJbXkgJGtleSA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0udXVpZCI7CiAJCW15ICR1dWlkID0gZXZhbCB7IHRtcF9jb25maWcoJy0tZ2V0JywgJGtleSkgfTsKLQkJaWYgKCEkQCAmJiAkdXVpZCAmJiAkdXVpZCA9fiAvXihbYS1mXGRcLV17MzAsfSkkLykgeworCQlpZiAoISRAICYmICR1dWlkICYmICR1dWlkID1+IC9eKFthLWZcZFwtXXszMCx9KSQvaSkgewogCQkJJHNlbGYtPntyYV91dWlkfSA9ICR1dWlkOwogCQl9IGVsc2UgewogCQkJZGllICJyYV91dWlkIGNhbGxlZCB3aXRob3V0IFVSTFxuIiB1bmxlc3MgJHNlbGYtPnt1cmx9OwpAQCAtMjA2NiwxNiArMjIyNSw2IEBACiAJJHJhOwogfQogCi1zdWIgcmVsX3BhdGggewotCW15ICgkc2VsZikgPSBAXzsKLQlteSAkcmVwb3Nfcm9vdCA9ICRzZWxmLT5yYS0+e3JlcG9zX3Jvb3R9OwotCXJldHVybiAkc2VsZi0+e3BhdGh9IGlmICgkc2VsZi0+e3VybH0gZXEgJHJlcG9zX3Jvb3QpOwotCW15ICR1cmwgPSAkc2VsZi0+e3VybH0gLgotCSAgICAgICAgICAobGVuZ3RoICRzZWxmLT57cGF0aH0gPyAiLyRzZWxmLT57cGF0aH0iIDogJHNlbGYtPntwYXRofSk7Ci0JJHVybCA9fiBzIV5cUSRyZXBvc19yb290XEUoPzovK3wkKSEhZzsKLQkkdXJsOwotfQotCiAjIHByb3Bfd2FsayhQQVRILCBSRVYsIFNVQikKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBSZWN1cnNpdmVseSB0cmF2ZXJzZSBQQVRIIGF0IHJldmlzaW9uIFJFViBhbmQgaW52b2tlIFNVQiBmb3IgZWFjaApAQCAtMjQwMSwxMCArMjU1MCw3IEBACiAJaWYgKG15ICRwYXRoID0gJHBhdGhzLT57Ii8kc2VsZi0+e3BhdGh9In0pIHsKIAkJcmV0dXJuICgkcGF0aC0+e2FjdGlvbn0gZXEgJ0QnKSA/IDAgOiAxOwogCX0KLQlteSAkcmVwb3Nfcm9vdCA9ICRzZWxmLT5yYS0+e3JlcG9zX3Jvb3R9OwotCW15ICRleHRlbmRlZF9wYXRoID0gJHNlbGYtPnt1cmx9IC4gJy8nIC4gJHNlbGYtPntwYXRofTsKLQkkZXh0ZW5kZWRfcGF0aCA9fiBzI15cUSRyZXBvc19yb290XEUoL3wkKSMjOwotCSRzZWxmLT57cGF0aF9yZWdleH0gfHw9IHFyL15cL1xRJGV4dGVuZGVkX3BhdGhcRVwvLzsKKwkkc2VsZi0+e3BhdGhfcmVnZXh9IHx8PSBxci9eXC9cUSRzZWxmLT57cGF0aH1cRVwvLzsKIAlpZiAoZ3JlcCAvJHNlbGYtPntwYXRoX3JlZ2V4fS8sIGtleXMgJSRwYXRocykgewogCQlyZXR1cm4gMTsKIAl9CkBAIC0yNDI3LDE1ICsyNTczLDE0IEBACiAJdW5sZXNzIChkZWZpbmVkICRwYXRocykgewogCQlteSAkZXJyX2hhbmRsZXIgPSAkU1ZOOjpFcnJvcjo6aGFuZGxlcjsKIAkJJFNWTjo6RXJyb3I6OmhhbmRsZXIgPSBcJkdpdDo6U1ZOOjpSYTo6c2tpcF91bmtub3duX3JldnM7Ci0JCSRzZWxmLT5yYS0+Z2V0X2xvZyhbJHNlbGYtPntwYXRofV0sICRyZXYsICRyZXYsIDAsIDEsIDEsIHN1YiB7Ci0JCSAgICAgICAgICAgICAgICAgICAkcGF0aHMgPQotCQkJCSAgICAgIEdpdDo6U1ZOOjpSYTo6ZHVwX2NoYW5nZWRfcGF0aHMoJF9bMF0pIH0pOworCQkkc2VsZi0+cmEtPmdldF9sb2coWyRzZWxmLT57cGF0aH1dLCAkcmV2LCAkcmV2LCAwLCAxLCAxLAorCQkJCSAgIHN1YiB7ICRwYXRocyA9ICRfWzBdIH0pOwogCQkkU1ZOOjpFcnJvcjo6aGFuZGxlciA9ICRlcnJfaGFuZGxlcjsKIAl9CiAJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRwYXRoczsKIAogCSMgbG9vayBmb3IgYSBwYXJlbnQgZnJvbSBhbm90aGVyIGJyYW5jaDoKLQlteSBAYl9wYXRoX2NvbXBvbmVudHMgPSBzcGxpdCBtIy8jLCAkc2VsZi0+cmVsX3BhdGg7CisJbXkgQGJfcGF0aF9jb21wb25lbnRzID0gc3BsaXQgbSMvIywgJHNlbGYtPntwYXRofTsKIAlteSBAYV9wYXRoX2NvbXBvbmVudHM7CiAJbXkgJGk7CiAJd2hpbGUgKEBiX3BhdGhfY29tcG9uZW50cykgewpAQCAtMjQ1MywxMSArMjU5OCwxMSBAQAogCW15ICRyID0gJGktPntjb3B5ZnJvbV9yZXZ9OwogCW15ICRyZXBvc19yb290ID0gJHNlbGYtPnJhLT57cmVwb3Nfcm9vdH07CiAJbXkgJHVybCA9ICRzZWxmLT5yYS0+e3VybH07Ci0JbXkgJG5ld191cmwgPSAkcmVwb3Nfcm9vdCAuICRicmFuY2hfZnJvbTsKKwlteSAkbmV3X3VybCA9ICR1cmwgLiAkYnJhbmNoX2Zyb207CiAJcHJpbnQgU1RERVJSICAiRm91bmQgcG9zc2libGUgYnJhbmNoIHBvaW50OiAiLAogCSAgICAgICAgICAgICAgIiRuZXdfdXJsID0+ICIsICRzZWxmLT5mdWxsX3VybCwgIiwgJHJcbiI7CiAJJGJyYW5jaF9mcm9tID1+IHMjXi8jIzsKLQlteSAkZ3MgPSAkc2VsZi0+b3RoZXJfZ3MoJG5ld191cmwsICR1cmwsICRyZXBvc19yb290LAorCW15ICRncyA9ICRzZWxmLT5vdGhlcl9ncygkbmV3X3VybCwgJHVybCwKIAkJICAgICAgICAgICAgICAgICAkYnJhbmNoX2Zyb20sICRyLCAkc2VsZi0+e3JlZl9pZH0pOwogCW15ICgkcjAsICRwYXJlbnQpID0gJGdzLT5maW5kX3Jldl9iZWZvcmUoJHIsIDEpOwogCXsKQEAgLTI2NDIsOSArMjc4Nyw5IEBACiB9CiAKIHN1YiBvdGhlcl9ncyB7Ci0JbXkgKCRzZWxmLCAkbmV3X3VybCwgJHVybCwgJHJlcG9zX3Jvb3QsCisJbXkgKCRzZWxmLCAkbmV3X3VybCwgJHVybCwKIAkgICAgJGJyYW5jaF9mcm9tLCAkciwgJG9sZF9yZWZfaWQpID0gQF87Ci0JbXkgJGdzID0gR2l0OjpTVk4tPmZpbmRfYnlfdXJsKCRuZXdfdXJsLCAkcmVwb3Nfcm9vdCwgJGJyYW5jaF9mcm9tKTsKKwlteSAkZ3MgPSBHaXQ6OlNWTi0+ZmluZF9ieV91cmwoJG5ld191cmwsICR1cmwsICRicmFuY2hfZnJvbSk7CiAJdW5sZXNzICgkZ3MpIHsKIAkJbXkgJHJlZl9pZCA9ICRvbGRfcmVmX2lkOwogCQkkcmVmX2lkID1+IHMvXEBcZCskLy87CkBAIC0yNjYzLDEyICsyODA4LDM0IEBACiAJJGdzCiB9CiAKK3N1YiBjYWxsX2F1dGhvcnNfcHJvZyB7CisJbXkgKCRvcmlnX2F1dGhvcikgPSBAXzsKKwkkb3JpZ19hdXRob3IgPSBjb21tYW5kX29uZWxpbmUoJ3Jldi1wYXJzZScsICctLXNxLXF1b3RlJywgJG9yaWdfYXV0aG9yKTsKKwlteSAkYXV0aG9yID0gYCQ6Ol9hdXRob3JzX3Byb2cgJG9yaWdfYXV0aG9yYDsKKwlpZiAoJD8gIT0gMCkgeworCQlkaWUgIiQ6Ol9hdXRob3JzX3Byb2cgZmFpbGVkIHdpdGggZXhpdCBjb2RlICQ/XG4iCisJfQorCWlmICgkYXV0aG9yID1+IC9eXHMqKC4rPylccyo8KC4qKT5ccyokLykgeworCQlteSAoJG5hbWUsICRlbWFpbCkgPSAoJDEsICQyKTsKKwkJJGVtYWlsID0gdW5kZWYgaWYgbGVuZ3RoICQyID09IDA7CisJCXJldHVybiBbJG5hbWUsICRlbWFpbF07CisJfSBlbHNlIHsKKwkJZGllICJBdXRob3I6ICRvcmlnX2F1dGhvcjogJDo6X2F1dGhvcnNfcHJvZyByZXR1cm5lZCAiCisJCQkuICJpbnZhbGlkIGF1dGhvciBmb3JtYXQ6ICRhdXRob3JcbiI7CisJfQorfQorCiBzdWIgY2hlY2tfYXV0aG9yIHsKIAlteSAoJGF1dGhvcikgPSBAXzsKIAlpZiAoIWRlZmluZWQgJGF1dGhvciB8fCBsZW5ndGggJGF1dGhvciA9PSAwKSB7CiAJCSRhdXRob3IgPSAnKG5vIGF1dGhvciknOwotCX0gZWxzaWYgKGRlZmluZWQgJDo6X2F1dGhvcnMgJiYgISBkZWZpbmVkICQ6OnVzZXJzeyRhdXRob3J9KSB7Ci0JCWRpZSAiQXV0aG9yOiAkYXV0aG9yIG5vdCBkZWZpbmVkIGluICQ6Ol9hdXRob3JzIGZpbGVcbiI7CisJfQorCWlmICghZGVmaW5lZCAkOjp1c2Vyc3skYXV0aG9yfSkgeworCQlpZiAoZGVmaW5lZCAkOjpfYXV0aG9yc19wcm9nKSB7CisJCQkkOjp1c2Vyc3skYXV0aG9yfSA9IGNhbGxfYXV0aG9yc19wcm9nKCRhdXRob3IpOworCQl9IGVsc2lmIChkZWZpbmVkICQ6Ol9hdXRob3JzKSB7CisJCQlkaWUgIkF1dGhvcjogJGF1dGhvciBub3QgZGVmaW5lZCBpbiAkOjpfYXV0aG9ycyBmaWxlXG4iOworCQl9CiAJfQogCSRhdXRob3I7CiB9CkBAIC0yNzM0LDcgKzI5MDEsNyBAQAogCQkJZGllICJDYW4ndCBoYXZlIGJvdGggJ3VzZVN2bVByb3BzJyBhbmQgJ3Jld3JpdGVSb290JyAiLAogCQkJICAgICJvcHRpb25zIHNldCFcbiI7CiAJCX0KLQkJbXkgKCR1dWlkLCAkcikgPSAkaGVhZHJldiA9fiBte14oW2EtZlxkXC1dezMwLH0pOihcZCspJH07CisJCW15ICgkdXVpZCwgJHIpID0gJGhlYWRyZXYgPX4gbXteKFthLWZcZFwtXXszMCx9KTooXGQrKSR9aTsKIAkJIyB3ZSBkb24ndCB3YW50ICJTVk06IGluaXRpYWxpemluZyBtaXJyb3IgZm9yIGp1bmsiIC4uLgogCQlyZXR1cm4gdW5kZWYgaWYgJHIgPT0gMDsKIAkJbXkgJHN2bSA9ICRzZWxmLT5zdm07CkBAIC0yOTUyLDYgKzMxMTksMTQgQEAKIAkgIGNyb2FrICJ3cml0ZTogJCEiOwogfQogCitzdWIgX3Jldl9tYXBfcmVzZXQgeworCW15ICgkZmgsICRyZXYsICRjb21taXQpID0gQF87CisJbXkgJGMgPSBfcmV2X21hcF9nZXQoJGZoLCAkcmV2KTsKKwkkYyBlcSAkY29tbWl0IG9yIGRpZSAiX3Jldl9tYXBfcmVzZXQoQF8pIGNvbW1pdCAkYyBkb2VzIG5vdCBtYXRjaCFcbiI7CisJbXkgJG9mZnNldCA9IHN5c3NlZWsoJGZoLCAwLCBTRUVLX0NVUikgb3IgY3JvYWsgInNlZWs6ICQhIjsKKwl0cnVuY2F0ZSAkZmgsICRvZmZzZXQgb3IgY3JvYWsgInRydW5jYXRlOiAkISI7Cit9CisKIHN1YiBta2ZpbGUgewogCW15ICgkcGF0aCkgPSBAXzsKIAl1bmxlc3MgKC1lICRwYXRoKSB7CkBAIC0yOTY4LDYgKzMxNDMsNyBAQAogCW15ICRkYiA9ICRzZWxmLT5tYXBfcGF0aCgkdXVpZCk7CiAJbXkgJGRiX2xvY2sgPSAiJGRiLmxvY2siOwogCW15ICRzaWc7CisJJHVwZGF0ZV9yZWYgfHw9IDA7CiAJaWYgKCR1cGRhdGVfcmVmKSB7CiAJCSRTSUd7SU5UfSA9ICRTSUd7SFVQfSA9ICRTSUd7VEVSTX0gPSAkU0lHe0FMUk19ID0gJFNJR3tQSVBFfSA9CiAJCSAgICAgICAgICAgICRTSUd7VVNSMX0gPSAkU0lHe1VTUjJ9ID0gc3ViIHsgJHNpZyA9ICRfWzBdIH07CkBAIC0yOTkxLDcgKzMxNjcsOCBAQAogCiAJc3lzb3BlbihteSAkZmgsICRkYl9sb2NrLCBPX1JEV1IgfCBPX0NSRUFUKQogCSAgICAgb3IgY3JvYWsgIkNvdWxkbid0IG9wZW4gJGRiX2xvY2s6ICQhXG4iOwotCV9yZXZfbWFwX3NldCgkZmgsICRyZXYsICRjb21taXQpOworCSR1cGRhdGVfcmVmIGVxICdyZXNldCcgPyBfcmV2X21hcF9yZXNldCgkZmgsICRyZXYsICRjb21taXQpIDoKKwkJCQkgX3Jldl9tYXBfc2V0KCRmaCwgJHJldiwgJGNvbW1pdCk7CiAJaWYgKCRzeW5jKSB7CiAJCSRmaC0+Zmx1c2ggb3IgZGllICJDb3VsZG4ndCBmbHVzaCAkZGJfbG9jazogJCFcbiI7CiAJCSRmaC0+c3luYyBvciBkaWUgIkNvdWxkbid0IHN5bmMgJGRiX2xvY2s6ICQhXG4iOwpAQCAtMjk5OSw3ICszMTc2LDkgQEAKIAljbG9zZSAkZmggb3IgY3JvYWsgJCE7CiAJaWYgKCR1cGRhdGVfcmVmKSB7CiAJCSRfaGVhZCA9ICRzZWxmOwotCQljb21tYW5kX25vaXN5KCd1cGRhdGUtcmVmJywgJy1tJywgInIkcmV2IiwKKwkJbXkgJG5vdGUgPSAiIjsKKwkJJG5vdGUgPSAiICgkdXBkYXRlX3JlZikiIGlmICgkdXBkYXRlX3JlZiAhfiAvXlxkKiQvKTsKKwkJY29tbWFuZF9ub2lzeSgndXBkYXRlLXJlZicsICctbScsICJyJHJldiRub3RlIiwKIAkJICAgICAgICAgICAgICAkc2VsZi0+cmVmbmFtZSwgJGNvbW1pdCk7CiAJfQogCXJlbmFtZSAkZGJfbG9jaywgJGRiIG9yIGRpZSAicmV2X21hcF9zZXQoQF8pOiAiLCAiRmFpbGVkIHRvIHJlbmFtZTogIiwKQEAgLTMwNjEsMTIgKzMyNDAsMTkgQEAKIAlyZXR1cm4gdW5kZWYgdW5sZXNzIC1lICRtYXBfcGF0aDsKIAogCXN5c29wZW4obXkgJGZoLCAkbWFwX3BhdGgsIE9fUkRPTkxZKSBvciBjcm9hayAib3BlbjogJCEiOworCW15ICRjID0gX3Jldl9tYXBfZ2V0KCRmaCwgJHJldik7CisJY2xvc2UoJGZoKSBvciBjcm9hayAiY2xvc2U6ICQhIjsKKwkkYworfQorCitzdWIgX3Jldl9tYXBfZ2V0IHsKKwlteSAoJGZoLCAkcmV2KSA9IEBfOworCiAJYmlubW9kZSAkZmggb3IgY3JvYWsgImJpbm1vZGU6ICQhIjsKIAlteSAkc2l6ZSA9IChzdGF0KCRmaCkpWzddOwogCSgkc2l6ZSAlIDI0KSA9PSAwIG9yIGNyb2FrICJpbmNvbnNpc3RlbnQgc2l6ZTogJHNpemUiOwogCiAJaWYgKCRzaXplID09IDApIHsKLQkJY2xvc2UgJGZoIG9yIGNyb2FrICJjbG9zZTogJGZoIjsKIAkJcmV0dXJuIHVuZGVmOwogCX0KIApAQCAtMzA4NCwxMSArMzI3MCw5IEBACiAJCX0gZWxzaWYgKCRyID4gJHJldikgewogCQkJJHUgPSAkaSAtIDI0OwogCQl9IGVsc2UgeyAjICRyID09ICRyZXYKLQkJCWNsb3NlKCRmaCkgb3IgY3JvYWsgImNsb3NlOiAkISI7CiAJCQlyZXR1cm4gJGMgZXEgKCcwJyB4IDQwKSA/IHVuZGVmIDogJGM7CiAJCX0KIAl9Ci0JY2xvc2UoJGZoKSBvciBjcm9hayAiY2xvc2U6ICQhIjsKIAl1bmRlZjsKIH0KIApAQCAtMzEwMCw2ICszMjg0LDggQEAKIAlteSAoJHNlbGYsICRyZXYsICRlcV9vaywgJG1pbl9yZXYpID0gQF87CiAJLS0kcmV2IHVubGVzcyAkZXFfb2s7CiAJJG1pbl9yZXYgfHw9IDE7CisJbXkgJG1heF9yZXYgPSAkc2VsZi0+cmV2X21hcF9tYXg7CisJJHJldiA9ICRtYXhfcmV2IGlmICgkcmV2ID4gJG1heF9yZXYpOwogCXdoaWxlICgkcmV2ID49ICRtaW5fcmV2KSB7CiAJCWlmIChteSAkYyA9ICRzZWxmLT5yZXZfbWFwX2dldCgkcmV2KSkgewogCQkJcmV0dXJuICgkcmV2LCAkYyk7CkBAIC0zODIwLDcgKzQwMDYsNyBAQAogc3ViIHVybF9wYXRoIHsKIAlteSAoJHNlbGYsICRwYXRoKSA9IEBfOwogCWlmICgkc2VsZi0+e3VybH0gPX4gbSNeaHR0cHM/Oi8vIykgewotCQkkcGF0aCA9fiBzLyhbXn5hLXpBLVowLTlfLi1dKS91YyBzcHJpbnRmKCIlJSUwMngiLG9yZCgkMSkpL2VnOworCQkkcGF0aCA9fiBzIShbXn5hLXpBLVowLTlfLi8tXSkhdWMgc3ByaW50ZigiJSUlMDJ4IixvcmQoJDEpKSFlZzsKIAl9CiAJJHNlbGYtPnt1cmx9IC4gJy8nIC4gJHNlbGYtPnJlcG9fcGF0aCgkcGF0aCk7CiB9CkBAIC00MjgwLDYgKzQ0NjYsMzQgQEAKIAlteSAoJHNlbGYsIEBhcmdzKSA9IEBfOwogCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CiAKKwkjIHN2bl9sb2dfY2hhbmdlZF9wYXRoX3Qgb2JqZWN0cyBwYXNzZWQgdG8gZ2V0X2xvZyBhcmUgbGlrZWx5IHRvIGJlCisJIyBvdmVyd3JpdHRlbiBldmVuIGlmIG9ubHkgdGhlIHJlZnMgYXJlIGNvcGllZCB0byBhbiBleHRlcm5hbCB2YXJpYWJsZSwKKwkjIHNvIHdlIHNob3VsZCBkdXAgdGhlIHN0cnVjdHVyZXMgaW4gdGhlaXIgZW50aXJldHkuICBVc2luZyBhbgorCSMgZXh0ZXJuYWxseSBwYXNzZWQgcG9vbCAoaW5zdGVhZCBvZiBvdXIgdGVtcG9yYXJ5IGFuZCBxdWlja2x5IGNsZWFyZWQKKwkjIHBvb2wgaW4gR2l0OjpTVk46OlJhKSBkb2VzIG5vdCBoZWxwIG1hdHRlcnMgYXQgYWxsLi4uCisJbXkgJHJlY2VpdmVyID0gcG9wIEBhcmdzOworCW15ICRwcmVmaXggPSAiLyIuJHNlbGYtPntzdm5fcGF0aH07CisJJHByZWZpeCA9fiBzIy8rKCQpIyM7CisJbXkgJHByZWZpeF9yZWdleCA9IHFyI15cUSRwcmVmaXhcRSM7CisJcHVzaChAYXJncywgc3ViIHsKKwkJbXkgKCRwYXRocykgPSAkX1swXTsKKwkJcmV0dXJuICYkcmVjZWl2ZXIoQF8pIHVubGVzcyAkcGF0aHM7CisJCSRfWzBdID0gKCk7CisJCWZvcmVhY2ggbXkgJHAgKGtleXMgJSRwYXRocykgeworCQkJbXkgJGkgPSAkcGF0aHMtPnskcH07CisJCQkjIE1ha2UgcGF0aCByZWxhdGl2ZSB0byBvdXIgdXJsLCBub3QgcmVwb3Nfcm9vdAorCQkJJHAgPX4gcy8kcHJlZml4X3JlZ2V4Ly87CisJCQlteSAlcyA9IG1hcCB7ICRfID0+ICRpLT4kXzsgfQorCQkJCXF3L2NvcHlmcm9tX3BhdGggY29weWZyb21fcmV2IGFjdGlvbi87CisJCQlpZiAoJHN7J2NvcHlmcm9tX3BhdGgnfSkgeworCQkJCSRzeydjb3B5ZnJvbV9wYXRoJ30gPX4gcy8kcHJlZml4X3JlZ2V4Ly87CisJCQl9CisJCQkkX1swXXskcH0gPSBcJXM7CisJCX0KKwkJJiRyZWNlaXZlcihAXyk7CisJfSk7CisKKwogCSMgdGhlIGxpbWl0IHBhcmFtZXRlciB3YXMgbm90IHN1cHBvcnRlZCBpbiBTVk4gMS4xLngsIHNvIHdlCiAJIyBkcm9wIGl0LiAgVGhlcmVmb3JlLCB0aGUgcmVjZWl2ZXIgY2FsbGJhY2sgcGFzc2VkIHRvIGl0CiAJIyBpcyBtYWRlIGF3YXJlIG9mIHRoaXMgbGltaXRhdGlvbiBieSBiZWluZyB3cmFwcGVkIGlmCkBAIC00MzY0LDEwICs0NTc4LDEyIEBACiAKIAlteSAkZnVsbF91cmwgPSAkc2VsZi0+e3VybH07CiAJbXkgJG9sZF91cmwgPSAkZnVsbF91cmw7Ci0JJGZ1bGxfdXJsIC49ICcvJyAuIGVzY2FwZV91cmlfb25seSgkcGF0aCkgaWYgbGVuZ3RoICRwYXRoOworCSRmdWxsX3VybCAuPSAnLycgLiAkcGF0aCBpZiBsZW5ndGggJHBhdGg7CiAJbXkgKCRyYSwgJHJlcGFyZW50ZWQpOwogCi0JaWYgKCRvbGRfdXJsID1+IG0jXnN2bihcK3NzaCk/Oi8vIykgeworCWlmICgkb2xkX3VybCA9fiBtI15zdm4oXCtzc2gpPzovLyMgfHwKKwkgICAgKCRmdWxsX3VybCA9fiBtI15odHRwcz86Ly8jICYmCisJICAgICBlc2NhcGVfdXJsKCRmdWxsX3VybCkgbmUgJGZ1bGxfdXJsKSkgewogCQkkX1swXSA9IHVuZGVmOwogCQkkc2VsZiA9IHVuZGVmOwogCQkkUkEgPSB1bmRlZjsKQEAgLTQ0MzgsNiArNDY1NCw3IEBACiAJbXkgKCRtaW4sICRtYXgpID0gKCRiYXNlLCAkaGVhZCA8ICRiYXNlICsgJGluYyA/ICRoZWFkIDogJGJhc2UgKyAkaW5jKTsKIAlteSAkbG9uZ2VzdF9wYXRoID0gbG9uZ2VzdF9jb21tb25fcGF0aCgkZ3N2LCAkZ2xvYnMpOwogCW15ICRyYV91cmwgPSAkc2VsZi0+e3VybH07CisJbXkgJGZpbmRfdHJhaWxpbmdfZWRnZTsKIAl3aGlsZSAoMSkgewogCQlteSAlcmV2czsKIAkJbXkgJGVycjsKQEAgLTQ0NDgsMTUgKzQ2NjUsMTcgQEAKIAkJfTsKIAkJc3ViIF9jYiB7CiAJCQlteSAoJHBhdGhzLCAkciwgJGF1dGhvciwgJGRhdGUsICRsb2cpID0gQF87Ci0JCQlbIGR1cF9jaGFuZ2VkX3BhdGhzKCRwYXRocyksCisJCQlbICRwYXRocywKIAkJCSAgeyBhdXRob3IgPT4gJGF1dGhvciwgZGF0ZSA9PiAkZGF0ZSwgbG9nID0+ICRsb2cgfSBdOwogCQl9CiAJCSRzZWxmLT5nZXRfbG9nKFskbG9uZ2VzdF9wYXRoXSwgJG1pbiwgJG1heCwgMCwgMSwgMSwKIAkJICAgICAgICAgICAgICAgc3ViIHsgJHJldnN7JF9bMV19ID0gX2NiKEBfKSB9KTsKIAkJaWYgKCRlcnIpIHsKIAkJCXByaW50ICJDaGVja2VkIHRocm91Z2ggciRtYXhcciI7CisJCX0gZWxzZSB7CisJCQkkZmluZF90cmFpbGluZ19lZGdlID0gMTsKIAkJfQotCQlpZiAoJGVyciAmJiAkbWF4ID49ICRoZWFkKSB7CisJCWlmICgkZXJyIGFuZCAkZmluZF90cmFpbGluZ19lZGdlKSB7CiAJCQlwcmludCBTVERFUlIgIlBhdGggJyRsb25nZXN0X3BhdGgnICIsCiAJCQkJICAgICAid2FzIHByb2JhYmx5IGRlbGV0ZWQ6XG4iLAogCQkJCSAgICAgJGVyci0+ZXhwYW5kZWRfbWVzc2FnZSwKQEAgLTQ0NjgsMTMgKzQ2ODcsMTQgQEAKIAkJCQlteSAkb2s7CiAJCQkJJHNlbGYtPmdldF9sb2coWyRsb25nZXN0X3BhdGhdLCAkbWluLCAkaGksCiAJCQkJICAgICAgICAgICAgICAgMCwgMSwgMSwgc3ViIHsKLQkJCQkgICAgICAgICAgICAgICAkb2sgfHw9ICRfWzFdOworCQkJCSAgICAgICAgICAgICAgICRvayA9ICRfWzFdOwogCQkJCSAgICAgICAgICAgICAgICRyZXZzeyRfWzFdfSA9IF9jYihAXykgfSk7CiAJCQkJaWYgKCRvaykgewogCQkJCQlwcmludCBTVERFUlIgInIkbWluIC4uIHIkb2sgT0tcbiI7CiAJCQkJCWxhc3Q7CiAJCQkJfQogCQkJfQorCQkJJGZpbmRfdHJhaWxpbmdfZWRnZSA9IDA7CiAJCX0KIAkJJFNWTjo6RXJyb3I6OmhhbmRsZXIgPSAkZXJyX2hhbmRsZXI7CiAKQEAgLTQ2MTIsNyArNDgzMiwxMSBAQAogCW15ICRjID0gJyc7CiAJZG8gewogCQkkdXJsIC49ICIvJGMiIGlmIGxlbmd0aCAkYzsKLQkJZXZhbCB7IChyZWYgJHNlbGYpLT5uZXcoJHVybCktPmdldF9sYXRlc3RfcmV2bnVtIH07CisJCWV2YWwgeworCQkJbXkgJHJhID0gKHJlZiAkc2VsZiktPm5ldygkdXJsKTsKKwkJCW15ICRsYXRlc3QgPSAkcmEtPmdldF9sYXRlc3RfcmV2bnVtOworCQkJJHJhLT5nZXRfbG9nKCIiLCAkbGF0ZXN0LCAwLCAxLCAwLCAxLCBzdWIge30pOworCQl9OwogCX0gd2hpbGUgKCRAICYmICgkYyA9IHNoaWZ0IEBjb21wb25lbnRzKSk7CiAJJHVybDsKIH0KQEAgLTQ2NjgsMjQgKzQ4OTIsNiBAQAogCWRpZSAiRXJyb3IgZnJvbSBTVk4sICgkZXJybm8pOiAiLCAkZXJyLT5leHBhbmRlZF9tZXNzYWdlLCJcbiI7CiB9CiAKLSMgc3ZuX2xvZ19jaGFuZ2VkX3BhdGhfdCBvYmplY3RzIHBhc3NlZCB0byBnZXRfbG9nIGFyZSBsaWtlbHkgdG8gYmUKLSMgb3ZlcndyaXR0ZW4gZXZlbiBpZiBvbmx5IHRoZSByZWZzIGFyZSBjb3BpZWQgdG8gYW4gZXh0ZXJuYWwgdmFyaWFibGUsCi0jIHNvIHdlIHNob3VsZCBkdXAgdGhlIHN0cnVjdHVyZXMgaW4gdGhlaXIgZW50aXJldHkuICBVc2luZyBhbiBleHRlcm5hbGx5Ci0jIHBhc3NlZCBwb29sIChpbnN0ZWFkIG9mIG91ciB0ZW1wb3JhcnkgYW5kIHF1aWNrbHkgY2xlYXJlZCBwb29sIGluCi0jIEdpdDo6U1ZOOjpSYSkgZG9lcyBub3QgaGVscCBtYXR0ZXJzIGF0IGFsbC4uLgotc3ViIGR1cF9jaGFuZ2VkX3BhdGhzIHsKLQlteSAoJHBhdGhzKSA9IEBfOwotCXJldHVybiB1bmRlZiB1bmxlc3MgJHBhdGhzOwotCW15ICVyZXQ7Ci0JZm9yZWFjaCBteSAkcCAoa2V5cyAlJHBhdGhzKSB7Ci0JCW15ICRpID0gJHBhdGhzLT57JHB9OwotCQlteSAlcyA9IG1hcCB7ICRfID0+ICRpLT4kXyB9Ci0JCSAgICAgICAgICAgICAgcXcvY29weWZyb21fcGF0aCBjb3B5ZnJvbV9yZXYgYWN0aW9uLzsKLQkJJHJldHskcH0gPSBcJXM7Ci0JfQotCVwlcmV0OwotfQotCiBwYWNrYWdlIEdpdDo6U1ZOOjpMb2c7CiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzOwpkaWZmIC0tZ2l0IGEvZ2l0LXdlYi0tYnJvd3NlLnNoIGIvZ2l0LXdlYi0tYnJvd3NlLnNoCmluZGV4IDdlZDBmYWQuLjRmNWM3NDAgMTAwNzU1Ci0tLSBhL2dpdC13ZWItLWJyb3dzZS5zaAorKysgYi9naXQtd2ViLS1icm93c2Uuc2gKQEAgLTE2MSw5ICsxNjEsMTIgQEAKIAkJOzsKIAllc2FjCiAJOzsKLSAgICB3M218bGlua3N8bHlueHxvcGVufHN0YXJ0KQorICAgIHczbXxsaW5rc3xseW54fG9wZW4pCiAJZXZhbCAiJGJyb3dzZXJfcGF0aCIgIiRAIgogCTs7CisgICAgc3RhcnQpCisgICAgICAgIGV4ZWMgIiRicm93c2VyX3BhdGgiICcid2ViLWJyb3dzZSInICIkQCIKKyAgICAgICAgOzsKICAgICBkaWxsbykKIAkiJGJyb3dzZXJfcGF0aCIgIiRAIiAmCiAJOzsKZGlmZiAtLWdpdCBhL2dpdC5jIGIvZ2l0LmMKaW5kZXggNWEwMDcyNi4uODA3ZDg3NSAxMDA2NDQKLS0tIGEvZ2l0LmMKKysrIGIvZ2l0LmMKQEAgLTE4OCwxMCArMTg4LDkgQEAKIAkJCQkgIGFsaWFzX2NvbW1hbmQpOwogCiAJCW5ld19hcmd2ID0geHJlYWxsb2MobmV3X2FyZ3YsIHNpemVvZihjaGFyICopICoKLQkJCQkgICAgKGNvdW50ICsgKmFyZ2NwICsgMSkpOworCQkJCSAgICAoY291bnQgKyAqYXJnY3ApKTsKIAkJLyogaW5zZXJ0IGFmdGVyIGNvbW1hbmQgbmFtZSAqLwogCQltZW1jcHkobmV3X2FyZ3YgKyBjb3VudCwgKmFyZ3YgKyAxLCBzaXplb2YoY2hhciAqKSAqICphcmdjcCk7Ci0JCW5ld19hcmd2W2NvdW50KyphcmdjcF0gPSBOVUxMOwogCiAJCSphcmd2ID0gbmV3X2FyZ3Y7CiAJCSphcmdjcCArPSBjb3VudCAtIDE7CkBAIC0yMDAsNyArMTk5LDcgQEAKIAl9CiAKIAlpZiAoc3ViZGlyICYmIGNoZGlyKHN1YmRpcikpCi0JCWRpZSgiQ2Fubm90IGNoYW5nZSB0byAlczogJXMiLCBzdWJkaXIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiQ2Fubm90IGNoYW5nZSB0byAnJXMnIiwgc3ViZGlyKTsKIAogCWVycm5vID0gc2F2ZWRfZXJybm87CiAKQEAgLTI0Niw3ICsyNDUsNyBAQAogCiAJc3RhdHVzID0gcC0+Zm4oYXJnYywgYXJndiwgcHJlZml4KTsKIAlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzICYgMHhmZjsKKwkJcmV0dXJuIHN0YXR1czsKIAogCS8qIFNvbWVib2R5IGNsb3NlZCBzdGRvdXQ/ICovCiAJaWYgKGZzdGF0KGZpbGVubyhzdGRvdXQpLCAmc3QpKQpAQCAtMjU3LDExICsyNTYsMTEgQEAKIAogCS8qIENoZWNrIGZvciBFTk9TUEMgYW5kIEVJTyBlcnJvcnMuLiAqLwogCWlmIChmZmx1c2goc3Rkb3V0KSkKLQkJZGllKCJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIndyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0Iik7CiAJaWYgKGZlcnJvcihzdGRvdXQpKQogCQlkaWUoInVua25vd24gd3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiKTsKIAlpZiAoZmNsb3NlKHN0ZG91dCkpCi0JCWRpZSgiY2xvc2UgZmFpbGVkIG9uIHN0YW5kYXJkIG91dHB1dDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzI3LDYgKzMyNiw3IEBACiAJCXsgIm1lcmdlLW91cnMiLCBjbWRfbWVyZ2Vfb3VycywgUlVOX1NFVFVQIH0sCiAJCXsgIm1lcmdlLXJlY3Vyc2l2ZSIsIGNtZF9tZXJnZV9yZWN1cnNpdmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCiAJCXsgIm1lcmdlLXN1YnRyZWUiLCBjbWRfbWVyZ2VfcmVjdXJzaXZlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCQl7ICJta3RyZWUiLCBjbWRfbWt0cmVlLCBSVU5fU0VUVVAgfSwKIAkJeyAibXYiLCBjbWRfbXYsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCiAJCXsgIm5hbWUtcmV2IiwgY21kX25hbWVfcmV2LCBSVU5fU0VUVVAgfSwKIAkJeyAicGFjay1vYmplY3RzIiwgY21kX3BhY2tfb2JqZWN0cywgUlVOX1NFVFVQIH0sCmRpZmYgLS1naXQgYS9naXRrLWdpdC9naXRrIGIvZ2l0ay1naXQvZ2l0awppbmRleCAxYTc4ODdiLi40NjA0YzgzIDEwMDY0NAotLS0gYS9naXRrLWdpdC9naXRrCisrKyBiL2dpdGstZ2l0L2dpdGsKQEAgLTE4Nyw3ICsxODcsOCBAQAogCSAgICAiLS11bnRpbD0qIiAtICItLWJlZm9yZT0qIiAtICItLW1heC1hZ2U9KiIgLSAiLS1taW4tYWdlPSoiIC0KIAkgICAgIi0tYXV0aG9yPSoiIC0gIi0tY29tbWl0dGVyPSoiIC0gIi0tZ3JlcD0qIiAtICItW2lFXSIgLQogCSAgICAiLS1yZW1vdmUtZW1wdHkiIC0gIi0tZmlyc3QtcGFyZW50IiAtICItLWNoZXJyeS1waWNrIiAtCi0JICAgICItUyoiIC0gIi0tcGlja2F4ZS1hbGwiIC0gIi0tcGlja2F4ZS1yZWdleCIgeworCSAgICAiLVMqIiAtICItLXBpY2theGUtYWxsIiAtICItLXBpY2theGUtcmVnZXgiIC0KKwkgICAgIi0tc2ltcGxpZnktYnktZGVjb3JhdGlvbiIgewogCQkjIFRoZXNlIG1lYW4gdGhhdCB3ZSBnZXQgYSBzdWJzZXQgb2YgdGhlIGNvbW1pdHMKIAkJc2V0IGZpbHRlcmVkIDEKIAkJbGFwcGVuZCBnbGZsYWdzICRhcmcKQEAgLTIxNDUsNyArMjE0Niw3IEBACiAgICAgbGFiZWwgLmJsZWZ0Lm1pZC5sYWJlbGRpZmZjb250ZXh0IC10ZXh0ICIgICAgICBbbWMgIkxpbmVzIG9mIGNvbnRleHQiXTogIgogICAgIHBhY2sgLmJsZWZ0Lm1pZC5kaWZmIC5ibGVmdC5taWQub2xkIC5ibGVmdC5taWQubmV3IC1zaWRlIGxlZnQKICAgICBzcGluYm94IC5ibGVmdC5taWQuZGlmZmNvbnRleHQgLXdpZHRoIDUgLWZvbnQgdGV4dGZvbnQgXAotCS1mcm9tIDEgLWluY3JlbWVudCAxIC10byAxMDAwMDAwMCBcCisJLWZyb20gMCAtaW5jcmVtZW50IDEgLXRvIDEwMDAwMDAwIFwKIAktdmFsaWRhdGUgYWxsIC12YWxpZGF0ZWNvbW1hbmQgImRpZmZjb250ZXh0dmFsaWRhdGUgJVAiIFwKIAktdGV4dHZhcmlhYmxlIGRpZmZjb250ZXh0c3RyaW5nCiAgICAgLmJsZWZ0Lm1pZC5kaWZmY29udGV4dCBzZXQgJGRpZmZjb250ZXh0CkBAIC0zNjcxLDE3ICszNjcyLDM2IEBACiB9CiAKIHNldCBrbm93bl92aWV3X29wdGlvbnMgewotICAgIHtwZXJtICAgIGIgICAgLiB7fSAgICAgICAgICAgICAgIHttYyAiUmVtZW1iZXIgdGhpcyB2aWV3In19Ci0gICAge2FyZ3MgICAgdDUwPSArIHt9ICAgICAgICAgICAgICAge21jICJDb21taXRzIHRvIGluY2x1ZGUgKGFyZ3VtZW50cyB0byBnaXQgbG9nKToifX0KLSAgICB7YWxsICAgICBiICAgICogIi0tYWxsIiAgICAgICAgICB7bWMgIlVzZSBhbGwgcmVmcyJ9fQotICAgIHtkb3JkZXIgIGIgICAgLiB7Ii0tZGF0ZS1vcmRlciIgIi1kIn0gICAgICB7bWMgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSJ9fQotICAgIHtscmlnaHQgIGIgICAgLiAiLS1sZWZ0LXJpZ2h0IiAgIHttYyAiTWFyayBicmFuY2ggc2lkZXMifX0KLSAgICB7c2luY2UgICB0MTUgICsgeyItLXNpbmNlPSoiICItLWFmdGVyPSoifSAge21jICJTaW5jZSBkYXRlOiJ9fQotICAgIHt1bnRpbCAgIHQxNSAgLiB7Ii0tdW50aWw9KiIgIi0tYmVmb3JlPSoifSB7bWMgIlVudGlsIGRhdGU6In19Ci0gICAge2xpbWl0ICAgdDEwICArICItLW1heC1jb3VudD0qIiAge21jICJNYXggY291bnQ6In19Ci0gICAge3NraXAgICAgdDEwICAuICItLXNraXA9KiIgICAgICAge21jICJTa2lwOiJ9fQotICAgIHtmaXJzdCAgIGIgICAgLiAiLS1maXJzdC1wYXJlbnQiIHttYyAiTGltaXQgdG8gZmlyc3QgcGFyZW50In19Ci0gICAge2NtZCAgICAgdDUwPSArIHt9ICAgICAgICAgICAgICAge21jICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiJ9fQorICAgIHtwZXJtICAgICAgYiAgICAuICB7fSAgICAgICAgICAgICAgIHttYyAiUmVtZW1iZXIgdGhpcyB2aWV3In19CisgICAge3JlZmxhYmVsICBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6In19CisgICAge3JlZnMgICAgICB0MTUgIC4uIHt9ICAgICAgICAgICAgICAge21jICJCcmFuY2hlcyAmIHRhZ3M6In19CisgICAge2FsbHJlZnMgICBiICAgICouICItLWFsbCIgICAgICAgICAge21jICJBbGwgcmVmcyJ9fQorICAgIHticmFuY2hlcyAgYiAgICAuICAiLS1icmFuY2hlcyIgICAgIHttYyAiQWxsIChsb2NhbCkgYnJhbmNoZXMifX0KKyAgICB7dGFncyAgICAgIGIgICAgLiAgIi0tdGFncyIgICAgICAgICB7bWMgIkFsbCB0YWdzIn19CisgICAge3JlbW90ZXMgICBiICAgIC4gICItLXJlbW90ZXMiICAgICAge21jICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIn19CisgICAge2NvbW1pdGxibCBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6In19CisgICAge2F1dGhvciAgICB0MTUgIC4uICItLWF1dGhvcj0qIiAgICAge21jICJBdXRob3I6In19CisgICAge2NvbW1pdHRlciB0MTUgIC4gICItLWNvbW1pdHRlcj0qIiAge21jICJDb21taXR0ZXI6In19CisgICAge2xvZ2luZm8gICB0MTUgIC4uICItLWdyZXA9KiIgICAgICAge21jICJDb21taXQgTWVzc2FnZToifX0KKyAgICB7YWxsbWF0Y2ggIGIgICAgLi4gIi0tYWxsLW1hdGNoIiAgICB7bWMgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIn19CisgICAge2NoYW5nZXNfbCBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJDaGFuZ2VzIHRvIEZpbGVzOiJ9fQorICAgIHtwaWNrYXhlX3MgcjAgICAuICB7fSAgICAgICAgICAgICAgIHttYyAiRml4ZWQgU3RyaW5nIn19CisgICAge3BpY2theGVfdCByMSAgIC4gICItLXBpY2theGUtcmVnZXgiICB7bWMgIlJlZ3VsYXIgRXhwcmVzc2lvbiJ9fQorICAgIHtwaWNrYXhlICAgdDE1ICAuLiAiLVMqIiAgICAgICAgICAgIHttYyAiU2VhcmNoIHN0cmluZzoifX0KKyAgICB7ZGF0ZWxhYmVsIGwgICAgKyAge30gICAgICAgICAgICAgICB7bWMgIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAxNToyNzozOFwiKToifX0KKyAgICB7c2luY2UgICAgIHQxNSAgLi4gIHsiLS1zaW5jZT0qIiAiLS1hZnRlcj0qIn0gIHttYyAiU2luY2U6In19CisgICAge3VudGlsICAgICB0MTUgIC4gICB7Ii0tdW50aWw9KiIgIi0tYmVmb3JlPSoifSB7bWMgIlVudGlsOiJ9fQorICAgIHtsaW1pdF9sYmwgbCAgICArICB7fSAgICAgICAgICAgICAgIHttYyAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToifX0KKyAgICB7bGltaXQgICAgIHQxMCAgKi4gIi0tbWF4LWNvdW50PSoiICB7bWMgIk51bWJlciB0byBzaG93OiJ9fQorICAgIHtza2lwICAgICAgdDEwICAuICAiLS1za2lwPSoiICAgICAgIHttYyAiTnVtYmVyIHRvIHNraXA6In19CisgICAge21pc2NfbGJsICBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6In19CisgICAge2RvcmRlciAgICBiICAgICouIHsiLS1kYXRlLW9yZGVyIiAiLWQifSAgICAgIHttYyAiU3RyaWN0bHkgc29ydCBieSBkYXRlIn19CisgICAge2xyaWdodCAgICBiICAgIC4gICItLWxlZnQtcmlnaHQiICAge21jICJNYXJrIGJyYW5jaCBzaWRlcyJ9fQorICAgIHtmaXJzdCAgICAgYiAgICAuICAiLS1maXJzdC1wYXJlbnQiIHttYyAiTGltaXQgdG8gZmlyc3QgcGFyZW50In19CisgICAge3NtcGxoc3QgICBiICAgIC4gICItLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24iICAge21jICJTaW1wbGUgaGlzdG9yeSJ9fQorICAgIHthcmdzICAgICAgdDUwICAqLiB7fSAgICAgICAgICAgICAgIHttYyAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoifX0KKyAgICB7YWxscGF0aHMgIHBhdGggKyAge30gICAgICAgICAgICAgICB7bWMgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6In19CisgICAge2NtZCAgICAgICB0NTA9ICsgIHt9ICAgICAgICAgICAgICAge21jICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiJ9fQogICAgIH0KIAogcHJvYyBlbmNvZGVfdmlld19vcHRzIHtufSB7CkBAIC0zNjkzLDEzICszNzEzLDE5IEBACiAJaWYgeyRwYXR0ZXJucyBlcSB7fX0gY29udGludWUKIAlzZXQgcGF0dGVybiBbbGluZGV4ICRwYXR0ZXJucyAwXQogCi0Jc2V0IHZhbCAkbmV3dmlld29wdHMoJG4sW2xpbmRleCAkb3B0IDBdKQotCQogCWlmIHtbbGluZGV4ICRvcHQgMV0gZXEgImIifSB7CisJICAgIHNldCB2YWwgJG5ld3ZpZXdvcHRzKCRuLFtsaW5kZXggJG9wdCAwXSkKIAkgICAgaWYgeyR2YWx9IHsKIAkJbGFwcGVuZCByYXJncyAkcGF0dGVybgogCSAgICB9CisJfSBlbHNlaWYge1tyZWdleHAge15yKFxkKykkfSBbbGluZGV4ICRvcHQgMV0gdHlwZSB2YWx1ZV19IHsKKwkgICAgcmVnZXhwIHteKC4qXyl9IFtsaW5kZXggJG9wdCAwXSB1c2VsZXNzdmFyIGJ1dHRvbl9pZAorCSAgICBzZXQgdmFsICRuZXd2aWV3b3B0cygkbiwkYnV0dG9uX2lkKQorCSAgICBpZiB7JHZhbCBlcSAkdmFsdWV9IHsKKwkJbGFwcGVuZCByYXJncyAkcGF0dGVybgorCSAgICB9CiAJfSBlbHNlIHsKKwkgICAgc2V0IHZhbCAkbmV3dmlld29wdHMoJG4sW2xpbmRleCAkb3B0IDBdKQogCSAgICBzZXQgdmFsIFtzdHJpbmcgdHJpbSAkdmFsXQogCSAgICBpZiB7JHZhbCBuZSB7fX0gewogCQlzZXQgcGZpeCBbc3RyaW5nIHJhbmdlICRwYXR0ZXJuIDAgZW5kLTFdCkBAIC0zNzA3LDYgKzM3MzMsNyBAQAogCSAgICB9CiAJfQogICAgIH0KKyAgICBzZXQgcmFyZ3MgW2NvbmNhdCAkcmFyZ3MgW3NoZWxsc3BsaXQgJG5ld3ZpZXdvcHRzKCRuLHJlZnMpXV0KICAgICByZXR1cm4gW2NvbmNhdCAkcmFyZ3MgW3NoZWxsc3BsaXQgJG5ld3ZpZXdvcHRzKCRuLGFyZ3MpXV0KIH0KIApAQCAtMzcxNCwxNCArMzc0MSwyMiBAQAogICAgIGdsb2JhbCBrbm93bl92aWV3X29wdGlvbnMgbmV3dmlld29wdHMKIAogICAgIGZvcmVhY2ggb3B0ICRrbm93bl92aWV3X29wdGlvbnMgeworCXNldCBpZCBbbGluZGV4ICRvcHQgMF0KIAlpZiB7W2xpbmRleCAkb3B0IDFdIGVxICJiIn0geworCSAgICAjIENoZWNrYm94ZXMKKwkgICAgc2V0IHZhbCAwCisgICAgICAgIH0gZWxzZWlmIHtbcmVnZXhwIHtecihcZCspJH0gW2xpbmRleCAkb3B0IDFdXX0geworCSAgICAjIFJhZGlvYnV0dG9ucworCSAgICByZWdleHAge14oLipfKX0gJGlkIHVzZWxlc3N2YXIgaWQKIAkgICAgc2V0IHZhbCAwCiAJfSBlbHNlIHsKKwkgICAgIyBUZXh0IGZpZWxkcwogCSAgICBzZXQgdmFsIHt9CiAJfQotCXNldCBuZXd2aWV3b3B0cygkbixbbGluZGV4ICRvcHQgMF0pICR2YWwKKwlzZXQgbmV3dmlld29wdHMoJG4sJGlkKSAkdmFsCiAgICAgfQogICAgIHNldCBvYXJncyBbbGlzdF0KKyAgICBzZXQgcmVmYXJncyBbbGlzdF0KICAgICBmb3JlYWNoIGFyZyAkdmlld19hcmdzIHsKIAlpZiB7W3JlZ2V4cCAtLSB7Xi0oWzAtOV0rKSR9ICRhcmcgYXJnIGNudF0KIAkgICAgJiYgIVtpbmZvIGV4aXN0cyBmb3VuZChsaW1pdCldfSB7CkBAIC0zNzM1LDExICszNzcwLDE3IEBACiAJICAgIGlmIHtbaW5mbyBleGlzdHMgZm91bmQoJGlkKV19IGNvbnRpbnVlCiAJICAgIGZvcmVhY2ggcGF0dGVybiBbbGluZGV4ICRvcHQgM10gewogCQlpZiB7IVtzdHJpbmcgbWF0Y2ggJHBhdHRlcm4gJGFyZ119IGNvbnRpbnVlCi0JCWlmIHtbbGluZGV4ICRvcHQgMV0gbmUgImIifSB7CisJCWlmIHtbbGluZGV4ICRvcHQgMV0gZXEgImIifSB7CisJCSAgICAjIENoZWNrIGJ1dHRvbnMKKwkJICAgIHNldCB2YWwgMQorCQl9IGVsc2VpZiB7W3JlZ2V4cCB7XnIoXGQrKSR9IFtsaW5kZXggJG9wdCAxXSBtYXRjaCBudW1dfSB7CisJCSAgICAjIFJhZGlvIGJ1dHRvbnMKKwkJICAgIHJlZ2V4cCB7XiguKl8pfSAkaWQgdXNlbGVzc3ZhciBpZAorCQkgICAgc2V0IHZhbCAkbnVtCisJCX0gZWxzZSB7CisJCSAgICAjIFRleHQgaW5wdXQgZmllbGRzCiAJCSAgICBzZXQgc2l6ZSBbc3RyaW5nIGxlbmd0aCAkcGF0dGVybl0KIAkJICAgIHNldCB2YWwgW3N0cmluZyByYW5nZSAkYXJnIFtleHByIHskc2l6ZS0xfV0gZW5kXQotCQl9IGVsc2UgewotCQkgICAgc2V0IHZhbCAxCiAJCX0KIAkJc2V0IG5ld3ZpZXdvcHRzKCRuLCRpZCkgJHZhbAogCQlzZXQgZm91bmQoJGlkKSAxCkBAIC0zNzQ4LDggKzM3ODksMTMgQEAKIAkgICAgaWYge1tpbmZvIGV4aXN0cyB2YWxdfSBicmVhawogCX0KIAlpZiB7W2luZm8gZXhpc3RzIHZhbF19IGNvbnRpbnVlCi0JbGFwcGVuZCBvYXJncyAkYXJnCisJaWYge1tyZWdleHAge14tfSAkYXJnXX0geworCSAgICBsYXBwZW5kIG9hcmdzICRhcmcKKwl9IGVsc2UgeworCSAgICBsYXBwZW5kIHJlZmFyZ3MgJGFyZworCX0KICAgICB9CisgICAgc2V0IG5ld3ZpZXdvcHRzKCRuLHJlZnMpIFtzaGVsbGFyZ2xpc3QgJHJlZmFyZ3NdCiAgICAgc2V0IG5ld3ZpZXdvcHRzKCRuLGFyZ3MpIFtzaGVsbGFyZ2xpc3QgJG9hcmdzXQogfQogCkBAIC0zNzg1LDE2ICszODMxLDE2IEBACiAgICAgZ2xvYmFsIGtub3duX3ZpZXdfb3B0aW9ucwogCiAgICAgdG9wbGV2ZWwgJHRvcAotICAgIHdtIHRpdGxlICR0b3AgJHRpdGxlCisgICAgd20gdGl0bGUgJHRvcCBbY29uY2F0ICR0aXRsZSBbbWMgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIl1dCiAgICAgbWFrZV90cmFuc2llbnQgJHRvcCAuCiAKICAgICAjIFZpZXcgbmFtZQogICAgIGZyYW1lICR0b3AubmZyCi0gICAgbGFiZWwgJHRvcC5ubCAtdGV4dCBbbWMgIk5hbWUiXQorICAgIGxhYmVsICR0b3AubmwgLXRleHQgW21jICJWaWV3IE5hbWU6Il0KICAgICBlbnRyeSAkdG9wLm5hbWUgLXdpZHRoIDIwIC10ZXh0dmFyaWFibGUgbmV3dmlld25hbWUoJG4pCiAgICAgcGFjayAkdG9wLm5mciAtaW4gJHRvcCAtZmlsbCB4IC1wYWR5IDUgLXBhZHggMwotICAgIHBhY2sgJHRvcC5ubCAtaW4gJHRvcC5uZnIgLXNpZGUgbGVmdCAtcGFkeCB7MCAzMH0KLSAgICBwYWNrICR0b3AubmFtZSAtaW4gJHRvcC5uZnIgLXNpZGUgbGVmdAorICAgIHBhY2sgJHRvcC5ubCAtaW4gJHRvcC5uZnIgLXNpZGUgbGVmdCAtcGFkeCB7MCA1fQorICAgIHBhY2sgJHRvcC5uYW1lIC1pbiAkdG9wLm5mciAtc2lkZSBsZWZ0IC1wYWR4IHswIDI1fQogCiAgICAgIyBWaWV3IG9wdGlvbnMKICAgICBzZXQgY2ZyYW1lICR0b3AubmZyCkBAIC0zODEzLDE0ICszODU5LDI4IEBACiAJICAgIGZyYW1lICRjZnJhbWUKIAkgICAgcGFjayAkY2ZyYW1lIC1pbiAkdG9wIC1maWxsIHggLXBhZHkgMyAtcGFkeCAzCiAJICAgIHNldCBjZXhwYW5kIFtleHByIHskZmxhZ3MgZXEgIioifV0KKyAgICAgICAgfSBlbHNlaWYgeyRmbGFncyBlcSAiLi4iIHx8ICRmbGFncyBlcSAiKi4ifSB7CisJICAgIHNldCBjZnJhbWUgJHRvcC5mciRjbnQKKwkgICAgaW5jciBjbnQKKwkgICAgZnJhbWUgJGNmcmFtZQorCSAgICBwYWNrICRjZnJhbWUgLWluICR0b3AgLWZpbGwgeCAtcGFkeSAzIC1wYWR4IFtsaXN0IDE1IDNdCisJICAgIHNldCBjZXhwYW5kIFtleHByIHskZmxhZ3MgZXEgIiouIn1dCiAJfSBlbHNlIHsKIAkgICAgc2V0IGx4cGFkIDUKIAl9CiAKLQlpZiB7JHR5cGUgZXEgImIifSB7CisJaWYgeyR0eXBlIGVxICJsIn0geworICAgICAgICAgICAgbGFiZWwgJGNmcmFtZS5sXyRpZCAtdGV4dCAkdGl0bGUKKyAgICAgICAgICAgIHBhY2sgJGNmcmFtZS5sXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSBsZWZ0IC1wYWR5IFtsaXN0IDMgMF0gLWFuY2hvciB3CisJfSBlbHNlaWYgeyR0eXBlIGVxICJiIn0gewogCSAgICBjaGVja2J1dHRvbiAkY2ZyYW1lLmNfJGlkIC10ZXh0ICR0aXRsZSAtdmFyaWFibGUgbmV3dmlld29wdHMoJG4sJGlkKQogCSAgICBwYWNrICRjZnJhbWUuY18kaWQgLWluICRjZnJhbWUgLXNpZGUgbGVmdCBcCiAJCS1wYWR4IFtsaXN0ICRseHBhZCAwXSAtZXhwYW5kICRjZXhwYW5kIC1hbmNob3IgdworCX0gZWxzZWlmIHtbcmVnZXhwIHtecihcZCspJH0gJHR5cGUgdHlwZSBzel19IHsKKwkgICAgcmVnZXhwIHteKC4qXyl9ICRpZCB1c2VsZXNzdmFyIGJ1dHRvbl9pZAorCSAgICByYWRpb2J1dHRvbiAkY2ZyYW1lLmNfJGlkIC10ZXh0ICR0aXRsZSAtdmFyaWFibGUgbmV3dmlld29wdHMoJG4sJGJ1dHRvbl9pZCkgLXZhbHVlICRzegorCSAgICBwYWNrICRjZnJhbWUuY18kaWQgLWluICRjZnJhbWUgLXNpZGUgbGVmdCBcCisJCS1wYWR4IFtsaXN0ICRseHBhZCAwXSAtZXhwYW5kICRjZXhwYW5kIC1hbmNob3IgdwogCX0gZWxzZWlmIHtbcmVnZXhwIHtedChcZCspJH0gJHR5cGUgdHlwZSBzel19IHsKIAkgICAgbWVzc2FnZSAkY2ZyYW1lLmxfJGlkIC1hc3BlY3QgMTUwMCAtdGV4dCAkdGl0bGUKIAkgICAgZW50cnkgJGNmcmFtZS5lXyRpZCAtd2lkdGggJHN6IC1iYWNrZ3JvdW5kICRiZ2NvbG9yIFwKQEAgLTM4MzMsMjMgKzM4OTMsMjIgQEAKIAkJLXRleHR2YXJpYWJsZSBuZXd2aWV3b3B0cygkbiwkaWQpCiAJICAgIHBhY2sgJGNmcmFtZS5sXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSB0b3AgLXBhZHkgW2xpc3QgMyAwXSAtYW5jaG9yIHcKIAkgICAgcGFjayAkY2ZyYW1lLmVfJGlkIC1pbiAkY2ZyYW1lIC1zaWRlIHRvcCAtZmlsbCB4CisJfSBlbHNlaWYgeyR0eXBlIGVxICJwYXRoIn0geworCSAgICBtZXNzYWdlICR0b3AubCAtYXNwZWN0IDE1MDAgLXRleHQgJHRpdGxlCisJICAgIHBhY2sgJHRvcC5sIC1pbiAkdG9wIC1zaWRlIHRvcCAtcGFkeSBbbGlzdCAzIDBdIC1hbmNob3IgdyAtcGFkeCAzCisJICAgIHRleHQgJHRvcC50IC13aWR0aCA0MCAtaGVpZ2h0IDUgLWJhY2tncm91bmQgJGJnY29sb3IgLWZvbnQgdWlmb250CisJICAgIGlmIHtbaW5mbyBleGlzdHMgdmlld2ZpbGVzKCRuKV19IHsKKwkJZm9yZWFjaCBmICR2aWV3ZmlsZXMoJG4pIHsKKwkJICAgICR0b3AudCBpbnNlcnQgZW5kICRmCisJCSAgICAkdG9wLnQgaW5zZXJ0IGVuZCAiXG4iCisJCX0KKwkJJHRvcC50IGRlbGV0ZSB7ZW5kIC0gMWN9IGVuZAorCQkkdG9wLnQgbWFyayBzZXQgaW5zZXJ0IDAuMAorCSAgICB9CisJICAgIHBhY2sgJHRvcC50IC1pbiAkdG9wIC1zaWRlIHRvcCAtcGFkeSBbbGlzdCAwIDVdIC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR4IDMKIAl9CiAgICAgfQogCi0gICAgIyBQYXRoIGxpc3QKLSAgICBtZXNzYWdlICR0b3AubCAtYXNwZWN0IDE1MDAgXAotCS10ZXh0IFttYyAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiXQotICAgIHBhY2sgJHRvcC5sIC1pbiAkdG9wIC1zaWRlIHRvcCAtcGFkeSBbbGlzdCA3IDBdIC1hbmNob3IgdyAtcGFkeCAzCi0gICAgdGV4dCAkdG9wLnQgLXdpZHRoIDQwIC1oZWlnaHQgNSAtYmFja2dyb3VuZCAkYmdjb2xvciAtZm9udCB1aWZvbnQKLSAgICBpZiB7W2luZm8gZXhpc3RzIHZpZXdmaWxlcygkbildfSB7Ci0JZm9yZWFjaCBmICR2aWV3ZmlsZXMoJG4pIHsKLQkgICAgJHRvcC50IGluc2VydCBlbmQgJGYKLQkgICAgJHRvcC50IGluc2VydCBlbmQgIlxuIgotCX0KLQkkdG9wLnQgZGVsZXRlIHtlbmQgLSAxY30gZW5kCi0JJHRvcC50IG1hcmsgc2V0IGluc2VydCAwLjAKLSAgICB9Ci0gICAgcGFjayAkdG9wLnQgLWluICR0b3AgLXNpZGUgdG9wIC1wYWR5IFtsaXN0IDAgNV0gLWZpbGwgYm90aCAtZXhwYW5kIDEgLXBhZHggMwogICAgIGZyYW1lICR0b3AuYnV0cwogICAgIGJ1dHRvbiAkdG9wLmJ1dHMub2sgLXRleHQgW21jICJPSyJdIC1jb21tYW5kIFtsaXN0IG5ld3ZpZXdvayAkdG9wICRuXQogICAgIGJ1dHRvbiAkdG9wLmJ1dHMuYXBwbHkgLXRleHQgW21jICJBcHBseSAoRjUpIl0gLWNvbW1hbmQgW2xpc3QgbmV3dmlld29rICR0b3AgJG4gMV0KQEAgLTcyNDksNyArNzMwOCw3IEBACiAgICAgZ2xvYmFsIGRpZmZjb250ZXh0c3RyaW5nIGRpZmZjb250ZXh0CiAKICAgICBpZiB7W3N0cmluZyBpcyBpbnRlZ2VyIC1zdHJpY3QgJGRpZmZjb250ZXh0c3RyaW5nXX0gewotCWlmIHskZGlmZmNvbnRleHRzdHJpbmcgPiAwfSB7CisJaWYgeyRkaWZmY29udGV4dHN0cmluZyA+PSAwfSB7CiAJICAgIHNldCBkaWZmY29udGV4dCAkZGlmZmNvbnRleHRzdHJpbmcKIAkgICAgcmVzZWxlY3RsaW5lCiAJfQpAQCAtNzI2Nyw4ICs3MzI2LDEzIEBACiAgICAgZ2xvYmFsIGlnbm9yZXNwYWNlCiAgICAgZ2xvYmFsIGxpbWl0ZGlmZnMgdmZpbGVsaW1pdCBjdXJ2aWV3CiAgICAgZ2xvYmFsIGRpZmZlbmNvZGluZyB0YXJnZXRsaW5lIGRpZmZucGFyZW50cworICAgIGdsb2JhbCBnaXRfdmVyc2lvbgogCi0gICAgc2V0IGNtZCBbZGlmZmNtZCAkaWRzICItcCAtQyAtLWNjIC0tbm8tY29tbWl0LWlkIC1VJGRpZmZjb250ZXh0Il0KKyAgICBzZXQgdGV4dGNvbnYge30KKyAgICBpZiB7W3BhY2thZ2UgdmNvbXBhcmUgJGdpdF92ZXJzaW9uICIxLjYuMSJdID49IDB9IHsKKwlzZXQgdGV4dGNvbnYgIi0tdGV4dGNvbnYiCisgICAgfQorICAgIHNldCBjbWQgW2RpZmZjbWQgJGlkcyAiLXAgJHRleHRjb252IC1DIC0tY2MgLS1uby1jb21taXQtaWQgLVUkZGlmZmNvbnRleHQiXQogICAgIGlmIHskaWdub3Jlc3BhY2V9IHsKIAlhcHBlbmQgY21kICIgLXciCiAgICAgfQpAQCAtMTEwOTAsNiArMTExNTQsNyBAQAogc2V0IG51bGxmaWxlICIvZGV2L251bGwiCiAKIHNldCBoYXZlX3RrODUgW2V4cHIge1twYWNrYWdlIHZjb21wYXJlICR0a192ZXJzaW9uICI4LjUiXSA+PSAwfV0KK3NldCBnaXRfdmVyc2lvbiBbam9pbiBbbHJhbmdlIFtzcGxpdCBbbGluZGV4IFtleGVjIGdpdCB2ZXJzaW9uXSBlbmRdIC5dIDAgMl0gLl0KIAogc2V0IHJ1bnEge30KIHNldCBoaXN0b3J5IHt9CmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9kZS5wbyBiL2dpdGstZ2l0L3BvL2RlLnBvCmluZGV4IDgyNWRjOTguLjUzZWYwZDYgMTAwNjQ0Ci0tLSBhL2dpdGstZ2l0L3BvL2RlLnBvCisrKyBiL2dpdGstZ2l0L3BvL2RlLnBvCkBAIC0xLDE0ICsxLDE1IEBACiAjIFRyYW5zbGF0aW9uIG9mIGdpdGsgdG8gR2VybWFuLgogIyBDb3B5cmlnaHQgKEMpIDIwMDcgUGF1bCBNYWNrZXJyYXMuCiAjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCi0jIENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT4sIDIwMDcKICMKKyMgQ2hyaXN0aWFuIFN0aW1taW5nIDxzdGltbWluZ0B0dWhoLmRlPiwgMjAwNy4KKyMgRnJlZGVyaWsgU2Nod2FyemVyIDxzY2h3YXJ6ZXJmQGdtYWlsLmNvbT4sIDIwMDguCiBtc2dpZCAiIgogbXNnc3RyICIiCiAiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCiAiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTEyLTA2IDIwOjQwKzAxMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTEyLTA2IDIwOjQ1KzAxMDBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNS0xMiAyMTo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0wNS0xMiAyMjoxOCswMjAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+XG4iCiAiTGFuZ3VhZ2UtVGVhbTogR2VybWFuXG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKQEAgLTE3LDI5NyArMTgsMzE0IEBACiAKICM6IGdpdGs6MTEzCiBtc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgotbXNnc3RyICJMaXN0ZSBkZXIgbmljaHQtenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gbmljaHQgZ2VmdW5kZW46IgorbXNnc3RyICJMaXN0ZSBkZXIgbmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gbmljaHQgZ2VmdW5kZW46IgogCi0jOiBnaXRrOjI3MgorIzogZ2l0azoyNjgKIG1zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCiBtc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlciBWZXJzaW9uZW46IgogCi0jOiBnaXRrOjMyNworIzogZ2l0azozMjMKIG1zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgotbXNnc3RyICJGZWhsZXIgYmVpbSAtLWFyZ3NjbWQgS29tbWFuZG86IgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIGRlcyAtLWFyZ3NjbWQtS29tbWFuZG9zOiIKIAotIzogZ2l0azozNDAKKyM6IGdpdGs6MzM2CiBtc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgogbXNnc3RyICIiCi0iS2VpbmUgRGF0ZWllbiBhdXNnZXfDpGhsdDogLS1tZXJnZSBhbmdlZ2ViZW4sIGVzIGV4aXN0aWVyZW4gYWJlciBrZWluZSBuaWNodC0iCi0ienVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4uIgorIktlaW5lIERhdGVpZW4gYXVzZ2V3w6RobHQ6IEVzIHd1cmRlIC0tbWVyZ2UgYW5nZWdlYmVuLCBhYmVyIGVzIGV4aXN0aWVyZW4gIgorImtlaW5lIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlbiBEYXRlaWVuLiIKIAotIzogZ2l0azozNDMKKyM6IGdpdGs6MzM5CiBtc2dpZCAiIgogIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKICJsaW1pdC4iCiBtc2dzdHIgIiIKLSJLZWluZSBEYXRlaWVuIGF1c2dld8OkaGxlOiAtLW1lcmdlIGFuZ2VnZWJlbiwgYWJlciBrZWluZSBuaWNodC0iCi0ienVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gc2luZCBpbiBkZXIgRGF0ZWlhdXN3YWhsLiIKKyJLZWluZSBEYXRlaWVuIGF1c2dld8OkaGx0OiBFcyB3dXJkZSAtLW1lcmdlIGFuZ2VnZWJlbiwgYWJlciBlcyBzaW5kIGtlaW5lICIKKyJuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZW4gRGF0ZWllbiBpbiBkZXIgRGF0ZWlhdXN3YWhsLiIKIAotIzogZ2l0azozNjUgZ2l0azo1MDMKKyM6IGdpdGs6MzYxIGdpdGs6NTA4CiBtc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiBnaXQtbG9nOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gwrtnaXQgbG9nwqs6IgogCi0jOiBnaXRrOjM3OAorIzogZ2l0azozNzkgZ2l0azo1MjQKIG1zZ2lkICJSZWFkaW5nIgogbXNnc3RyICJMZXNlbiIKIAotIzogZ2l0azo0MzggZ2l0azozNDYyCisjOiBnaXRrOjQzOSBnaXRrOjQwNjEKIG1zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCi1tc2dzdHIgIlZlcnNpb25lbiBsZXNlbi4uLiIKK21zZ3N0ciAiVmVyc2lvbmVuIHdlcmRlbiBnZWxlc2VuIC4uLiIKIAotIzogZ2l0azo0NDEgZ2l0azoxNTI4IGdpdGs6MzQ2NQorIzogZ2l0azo0NDIgZ2l0azoxNTYwIGdpdGs6NDA2NAogbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCi1tc2dzdHIgIktlaW5lIFZlcnNpb25lbiBhdXNnZXfDpGhsdC4iCittc2dzdHIgIktlaW5lIFZlcnNpb25lbiBhdXNnZXfDpGhsdCIKIAotIzogZ2l0azoxMzk5CisjOiBnaXRrOjE0MzYKIG1zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCi1tc2dzdHIgIkF1c2dhYmUgdm9uIGdpdC1sb2cga2FubiBuaWNodCBlcmthbm50IHdlcmRlbjoiCittc2dzdHIgIkF1c2dhYmUgdm9uIMK7Z2l0IGxvZ8KrIGthbm4gbmljaHQgZXJrYW5udCB3ZXJkZW46IgogCi0jOiBnaXRrOjE2MDUKKyM6IGdpdGs6MTY1NgogbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCiBtc2dzdHIgIktlaW5lIFZlcnNpb25zaW5mb3JtYXRpb24gdmVyZsO8Z2JhciIKIAotIzogZ2l0azoxNzA5IGdpdGs6MTczMSBnaXRrOjMyNTkgZ2l0azo3NzY0IGdpdGs6OTI5MyBnaXRrOjk0NjYKKyM6IGdpdGs6MTc5MSBnaXRrOjE4MTUgZ2l0azozODU0IGdpdGs6ODcxNCBnaXRrOjEwMjUwIGdpdGs6MTA0MjIKIG1zZ2lkICJPSyIKIG1zZ3N0ciAiT2siCiAKLSM6IGdpdGs6MTczMyBnaXRrOjMyNjAgZ2l0azo3NDM5IGdpdGs6NzUxMCBnaXRrOjc2MTMgZ2l0azo3NjYwIGdpdGs6Nzc2NgotIzogZ2l0azo5Mjk0IGdpdGs6OTQ2NworIzogZ2l0azoxODE3IGdpdGs6Mzg1NiBnaXRrOjgzMTEgZ2l0azo4Mzg1IGdpdGs6ODQ5NSBnaXRrOjg1NDQgZ2l0azo4NzE2CisjOiBnaXRrOjEwMjUxIGdpdGs6MTA0MjMKIG1zZ2lkICJDYW5jZWwiCiBtc2dzdHIgIkFiYnJlY2hlbiIKIAotIzogZ2l0azoxODExCisjOiBnaXRrOjE5MTcKIG1zZ2lkICJVcGRhdGUiCiBtc2dzdHIgIkFrdHVhbGlzaWVyZW4iCiAKLSM6IGdpdGs6MTgxMgorIzogZ2l0azoxOTE4CiBtc2dpZCAiUmVsb2FkIgogbXNnc3RyICJOZXUgbGFkZW4iCiAKLSM6IGdpdGs6MTgxMworIzogZ2l0azoxOTE5CiBtc2dpZCAiUmVyZWFkIHJlZmVyZW5jZXMiCiBtc2dzdHIgIlp3ZWlnZSBuZXUgbGFkZW4iCiAKLSM6IGdpdGs6MTgxNAorIzogZ2l0azoxOTIwCiBtc2dpZCAiTGlzdCByZWZlcmVuY2VzIgogbXNnc3RyICJad2VpZ2UvTWFya2llcnVuZ2VuIGF1Zmxpc3RlbiIKIAotIzogZ2l0azoxOTE1CisjOiBnaXRrOjE5MjIKIG1zZ2lkICJTdGFydCBnaXQgZ3VpIgogbXNnc3RyICLCu2dpdCBndWnCqyBzdGFydGVuIgogCi0jOiBnaXRrOjE5MTcKKyM6IGdpdGs6MTkyNAogbXNnaWQgIlF1aXQiCiBtc2dzdHIgIkJlZW5kZW4iCiAKLSM6IGdpdGs6MTgxMAorIzogZ2l0azoxOTE2CiBtc2dpZCAiRmlsZSIKIG1zZ3N0ciAiRGF0ZWkiCiAKLSM6IGdpdGs6MTgxOAorIzogZ2l0azoxOTI4CiBtc2dpZCAiUHJlZmVyZW5jZXMiCiBtc2dzdHIgIkVpbnN0ZWxsdW5nZW4iCiAKLSM6IGdpdGs6MTgxNworIzogZ2l0azoxOTI3CiBtc2dpZCAiRWRpdCIKIG1zZ3N0ciAiQmVhcmJlaXRlbiIKIAotIzogZ2l0azoxODIxCisjOiBnaXRrOjE5MzIKIG1zZ2lkICJOZXcgdmlldy4uLiIKLW1zZ3N0ciAiTmV1ZSBBbnNpY2h0Li4uIgorbXNnc3RyICJOZXVlIEFuc2ljaHQgLi4uIgogCi0jOiBnaXRrOjE4MjIKKyM6IGdpdGs6MTkzMwogbXNnaWQgIkVkaXQgdmlldy4uLiIKLW1zZ3N0ciAiQW5zaWNodCBiZWFyYmVpdGVuLi4uIgorbXNnc3RyICJBbnNpY2h0IGJlYXJiZWl0ZW4gLi4uIgogCi0jOiBnaXRrOjE4MjMKKyM6IGdpdGs6MTkzNAogbXNnaWQgIkRlbGV0ZSB2aWV3IgotbXNnc3RyICJBbnNpY2h0IGzDtnNjaGVuIgorbXNnc3RyICJBbnNpY2h0IGVudGZlcm5lbiIKIAotIzogZ2l0azoxODI1CisjOiBnaXRrOjE5MzYKIG1zZ2lkICJBbGwgZmlsZXMiCiBtc2dzdHIgIkFsbGUgRGF0ZWllbiIKIAotIzogZ2l0azoxODIwIGdpdGs6MzE5NgorIzogZ2l0azoxOTMxIGdpdGs6MzY2NgogbXNnaWQgIlZpZXciCiBtc2dzdHIgIkFuc2ljaHQiCiAKLSM6IGdpdGs6MTgyOCBnaXRrOjI0ODcKKyM6IGdpdGs6MTk0MSBnaXRrOjE5NTEgZ2l0azoyNjUwCiBtc2dpZCAiQWJvdXQgZ2l0ayIKIG1zZ3N0ciAiw5xiZXIgZ2l0ayIKIAotIzogZ2l0azoxODI5CisjOiBnaXRrOjE5NDIgZ2l0azoxOTU2CiBtc2dpZCAiS2V5IGJpbmRpbmdzIgogbXNnc3RyICJUYXN0ZW5rw7xyemVsIgogCi0jOiBnaXRrOjE4MjcKKyM6IGdpdGs6MTk0MCBnaXRrOjE5NTUKIG1zZ2lkICJIZWxwIgogbXNnc3RyICJIaWxmZSIKIAotIzogZ2l0azoxODg3CisjOiBnaXRrOjIwMTYKIG1zZ2lkICJTSEExIElEOiAiCiBtc2dzdHIgIlNIQTE6IgogCi0jOiBnaXRrOjE5MTgKKyM6IGdpdGs6MjA0NwogbXNnaWQgIlJvdyIKIG1zZ3N0ciAiWmVpbGUiCiAKLSM6IGdpdGs6MTk0OQorIzogZ2l0azoyMDc4CiBtc2dpZCAiRmluZCIKIG1zZ3N0ciAiU3VjaGUiCiAKLSM6IGdpdGs6MTk1MAorIzogZ2l0azoyMDc5CiBtc2dpZCAibmV4dCIKIG1zZ3N0ciAibsOkY2hzdGUiCiAKLSM6IGdpdGs6MTk1MQorIzogZ2l0azoyMDgwCiBtc2dpZCAicHJldiIKIG1zZ3N0ciAidm9yaWdlIgogCi0jOiBnaXRrOjE5NTIKKyM6IGdpdGs6MjA4MQogbXNnaWQgImNvbW1pdCIKIG1zZ3N0ciAiVmVyc2lvbiBuYWNoIgogCi0jOiBnaXRrOjE5NTUgZ2l0azoxOTU3IGdpdGs6MzYxNyBnaXRrOjM2NDAgZ2l0azozNjY0IGdpdGs6NTU1MCBnaXRrOjU2MjEKKyM6IGdpdGs6MjA4NCBnaXRrOjIwODYgZ2l0azo0MjIyIGdpdGs6NDI0NSBnaXRrOjQyNjkgZ2l0azo2MjEwIGdpdGs6NjI4MgorIzogZ2l0azo2MzY2CiBtc2dpZCAiY29udGFpbmluZzoiCiBtc2dzdHIgIkJlc2NocmVpYnVuZzoiCiAKLSM6IGdpdGs6MTk1OCBnaXRrOjI5NTQgZ2l0azoyOTU5IGdpdGs6MzY5MgorIzogZ2l0azoyMDg3IGdpdGs6MzE1OCBnaXRrOjMxNjMgZ2l0azo0Mjk3CiBtc2dpZCAidG91Y2hpbmcgcGF0aHM6IgogbXNnc3RyICJEYXRlaWVuOiIKIAotIzogZ2l0azoxOTU5IGdpdGs6MzY5NworIzogZ2l0azoyMDg4IGdpdGs6NDMwMgogbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgogbXNnc3RyICLDhG5kZXJ1bmdlbjoiCiAKLSM6IGdpdGs6MTk2OCBnaXRrOjE5NzAKKyM6IGdpdGs6MjA5NyBnaXRrOjIwOTkKIG1zZ2lkICJFeGFjdCIKIG1zZ3N0ciAiRXhha3QiCiAKLSM6IGdpdGs6MTk3MCBnaXRrOjM3NzMgZ2l0azo1NTE4CisjOiBnaXRrOjIwOTkgZ2l0azo0Mzc3IGdpdGs6NjE3OAogbXNnaWQgIklnbkNhc2UiCiBtc2dzdHIgIktlaW4gR3Jvw58vS2xlaW4iCiAKLSM6IGdpdGs6MTk3MCBnaXRrOjM2NjYgZ2l0azozNzcxIGdpdGs6NTUxNAorIzogZ2l0azoyMDk5IGdpdGs6NDI3MSBnaXRrOjQzNzUgZ2l0azo2MTc0CiBtc2dpZCAiUmVnZXhwIgogbXNnc3RyICJSZWdleHAiCiAKLSM6IGdpdGs6MTk3MiBnaXRrOjE5NzMgZ2l0azozNzkyIGdpdGs6MzgyMiBnaXRrOjM4MjkgZ2l0azo1NjQxIGdpdGs6NTcwOAorIzogZ2l0azoyMTAxIGdpdGs6MjEwMiBnaXRrOjQzOTYgZ2l0azo0NDI2IGdpdGs6NDQzMyBnaXRrOjYzMDIgZ2l0azo2MzcwCiBtc2dpZCAiQWxsIGZpZWxkcyIKIG1zZ3N0ciAiQWxsZSBGZWxkZXIiCiAKLSM6IGdpdGs6MTk3MyBnaXRrOjM3OTAgZ2l0azozODIyIGdpdGs6NTU4MAorIzogZ2l0azoyMTAyIGdpdGs6NDM5NCBnaXRrOjQ0MjYgZ2l0azo2MjQxCiBtc2dpZCAiSGVhZGxpbmUiCiBtc2dzdHIgIsOcYmVyc2NocmlmdCIKIAotIzogZ2l0azoxOTc0IGdpdGs6Mzc5MCBnaXRrOjU1ODAgZ2l0azo1NzA4IGdpdGs6NjEwOQorIzogZ2l0azoyMTAzIGdpdGs6NDM5NCBnaXRrOjYyNDEgZ2l0azo2MzcwIGdpdGs6NjgwNAogbXNnaWQgIkNvbW1lbnRzIgogbXNnc3RyICJCZXNjaHJlaWJ1bmciCiAKLSM6IGdpdGs6MTk3NCBnaXRrOjM3OTAgZ2l0azozNzk0IGdpdGs6MzgyOSBnaXRrOjU1ODAgZ2l0azo2MDQ1IGdpdGs6NzI4NQotIzogZ2l0azo3MzAwCisjOiBnaXRrOjIxMDMgZ2l0azo0Mzk0IGdpdGs6NDM5OCBnaXRrOjQ0MzMgZ2l0azo2MjQxIGdpdGs6NjczOSBnaXRrOjc5OTEKKyM6IGdpdGs6ODAwNgogbXNnaWQgIkF1dGhvciIKIG1zZ3N0ciAiQXV0b3IiCiAKLSM6IGdpdGs6MTk3NCBnaXRrOjM3OTAgZ2l0azo1NTgwIGdpdGs6NjA0NworIzogZ2l0azoyMTAzIGdpdGs6NDM5NCBnaXRrOjYyNDEgZ2l0azo2NzQxCiBtc2dpZCAiQ29tbWl0dGVyIgogbXNnc3RyICJFaW50cmFnZW5kZXIiCiAKLSM6IGdpdGs6MjAwMworIzogZ2l0azoyMTMyCiBtc2dpZCAiU2VhcmNoIgotbXNnc3RyICJTdWNoZSIKK21zZ3N0ciAiU3VjaGVuIgogCi0jOiBnaXRrOjIwMTAKKyM6IGdpdGs6MjEzOQogbXNnaWQgIkRpZmYiCiBtc2dzdHIgIlZlcmdsZWljaCIKIAotIzogZ2l0azoyMDEyCisjOiBnaXRrOjIxNDEKIG1zZ2lkICJPbGQgdmVyc2lvbiIKIG1zZ3N0ciAiQWx0ZSBWZXJzaW9uIgogCi0jOiBnaXRrOjIwMTQKKyM6IGdpdGs6MjE0MwogbXNnaWQgIk5ldyB2ZXJzaW9uIgogbXNnc3RyICJOZXVlIFZlcnNpb24iCiAKLSM6IGdpdGs6MjAxNgorIzogZ2l0azoyMTQ1CiBtc2dpZCAiTGluZXMgb2YgY29udGV4dCIKIG1zZ3N0ciAiS29udGV4dHplaWxlbiIKIAotIzogZ2l0azoyMDI2CisjOiBnaXRrOjIxNTUKIG1zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgogbXNnc3RyICJMZWVyemVpY2hlbsOkbmRlcnVuZ2VuIGlnbm9yaWVyZW4iCiAKLSM6IGdpdGs6MjA4NAorIzogZ2l0azoyMjEzCiBtc2dpZCAiUGF0Y2giCiBtc2dzdHIgIlBhdGNoIgogCi0jOiBnaXRrOjIwODYKKyM6IGdpdGs6MjIxNQogbXNnaWQgIlRyZWUiCiBtc2dzdHIgIkJhdW0iCiAKLSM6IGdpdGs6MjIxMyBnaXRrOjIyMjYKKyM6IGdpdGs6MjM1OSBnaXRrOjIzNzYKIG1zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCi1tc2dzdHIgIlZlcmdsZWljaCBkaWVzZSAtPiBnZXfDpGhsdGUiCittc2dzdHIgIlZlcmdsZWljaDogZGllc2UgLT4gZ2V3w6RobHRlIgogCi0jOiBnaXRrOjIyMTQgZ2l0azoyMjI3CisjOiBnaXRrOjIzNjAgZ2l0azoyMzc3CiBtc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgotbXNnc3RyICJWZXJnbGVpY2ggZ2V3w6RobHRlIC0+IGRpZXNlIgorbXNnc3RyICJWZXJnbGVpY2g6IGdld8OkaGx0ZSAtPiBkaWVzZSIKIAotIzogZ2l0azoyMjE1IGdpdGs6MjIyOAorIzogZ2l0azoyMzYxIGdpdGs6MjM3OAogbXNnaWQgIk1ha2UgcGF0Y2giCiBtc2dzdHIgIlBhdGNoIGVyc3RlbGxlbiIKIAotIzogZ2l0azoyMjE2IGdpdGs6NzQ5NAorIzogZ2l0azoyMzYyIGdpdGs6ODM2OQogbXNnaWQgIkNyZWF0ZSB0YWciCiBtc2dzdHIgIk1hcmtpZXJ1bmcgZXJzdGVsbGVuIgogCi0jOiBnaXRrOjIyMTcgZ2l0azo3NTkzCisjOiBnaXRrOjIzNjMgZ2l0azo4NDc1CiBtc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCiBtc2dzdHIgIlZlcnNpb24gaW4gRGF0ZWkgc2NocmVpYmVuIgogCi0jOiBnaXRrOjIyMTggZ2l0azo3NjQ3CisjOiBnaXRrOjIzNjQgZ2l0azo4NTMyCiBtc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCiBtc2dzdHIgIk5ldWVuIFp3ZWlnIGVyc3RlbGxlbiIKIAotIzogZ2l0azoyMjE5CisjOiBnaXRrOjIzNjUKIG1zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKIG1zZ3N0ciAiRGllc2UgVmVyc2lvbiBwZmzDvGNrZW4iCiAKLSM6IGdpdGs6MjIyMAorIzogZ2l0azoyMzY2CiBtc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKIG1zZ3N0ciAiSEVBRC1ad2VpZyBhdWYgZGllc2UgVmVyc2lvbiB6dXLDvGNrc2V0emVuIgogCi0jOiBnaXRrOjIyMzQKKyM6IGdpdGs6MjM2NworbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIkxlc2V6ZWljaGVuIHNldHplbiIKKworIzogZ2l0azoyMzY4Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIlp1bSBMZXNlemVpY2hlbiIKKworIzogZ2l0azoyMzY5Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIkFia8O2bW1saW5nIHZvbiBMZXNlemVpY2hlbiB1bmQgZGllc2VyIFZlcnNpb24gZmluZGVuIgorCisjOiBnaXRrOjIzNzAKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiTWl0IExlc2V6ZWljaGVuIHZlcmdsZWljaGVuIgorCisjOiBnaXRrOjIzODQKIG1zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCiBtc2dzdHIgIkF1ZiBkaWVzZW4gWndlaWcgdW1zdGVsbGVuIgogCi0jOiBnaXRrOjIyMzUKKyM6IGdpdGs6MjM4NQogbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKIG1zZ3N0ciAiWndlaWcgbMO2c2NoZW4iCiAKLSM6IGdpdGs6MjI0MgorIzogZ2l0azoyMzkyCiBtc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgogbXNnc3RyICJEaWVzZW4gYXVjaCBoZXJ2b3JoZWJlbiIKIAotIzogZ2l0azoyMjQzCisjOiBnaXRrOjIzOTMKIG1zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgogbXNnc3RyICJOdXIgZGllc2VuIGhlcnZvcmhlYmVuIgogCi0jOiBnaXRrOjIyNDQKKyM6IGdpdGs6MjM5NAogbXNnaWQgIkV4dGVybmFsIGRpZmYiCi1tc2dzdHIgIkV4dGVybmVyIFZlcmdsZWljaCIKK21zZ3N0ciAiRXh0ZXJuZXMgRGlmZi1Qcm9ncmFtbSIKIAotIzogZ2l0azoyMjU1CisjOiBnaXRrOjIzOTUKIG1zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgogbXNnc3RyICJBbm5vdGllcmVuIGRlciBFbHRlcm52ZXJzaW9uIgogCi0jOiBnaXRrOjIzNjAKKyM6IGdpdGs6MjQwMgogbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKIG1zZ3N0ciAiSGVya3VuZnQgZGllc2VyIFplaWxlIGFuemVpZ2VuIgogCi0jOiBnaXRrOjIzNjEKKyM6IGdpdGs6MjQwMwogbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKLW1zZ3N0ciAiQW5ub3RpZXJlbiAowrtnaXQgZ3VpIGJsYW1lwqspIHZvbiBkaWVzZXIgWmVpbGUiCittc2dzdHIgIkRpZXNlIFplaWxlIGFubm90aWVyZW4gKMK7Z2l0IGd1aSBibGFtZcKrKSIKIAotIzogZ2l0azoyNjA2CisjOiBnaXRrOjI2NTIKIG1zZ2lkICIiCiAiXG4iCiAiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCkBAIC0zMTcsNTA0ICszMzUsNTUyIEBACiAiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKIG1zZ3N0ciAiIgogIlxuIgotIkdpdGsgLSBlaW5lIFZpc3VhbGlzaWVydW5nIGRlciBHaXQgSGlzdG9yaWVcbiIKKyJHaXRrIC0gZWluZSBWaXN1YWxpc2llcnVuZyBkZXIgR2l0LUhpc3RvcmllXG4iCiAiXG4iCiAiQ29weXJpZ2h0IMKpIDIwMDUtMjAwOCBQYXVsIE1hY2tlcnJhc1xuIgogIlxuIgogIkJlbnV0enVuZyB1bmQgV2VpdGVydmVyYnJlaXR1bmcgZ2Vtw6TDnyBkZW4gQmVkaW5ndW5nZW4gZGVyIEdOVSBHZW5lcmFsIFB1YmxpYyAiCiAiTGljZW5zZSIKIAotIzogZ2l0azoyNDk2IGdpdGs6MjU1NyBnaXRrOjc5NDMKKyM6IGdpdGs6MjY2MCBnaXRrOjI3MjIgZ2l0azo4ODk3CiBtc2dpZCAiQ2xvc2UiCiBtc2dzdHIgIlNjaGxpZcOfZW4iCiAKLSM6IGdpdGs6MjUxNQorIzogZ2l0azoyNjc5CiBtc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCi1tc2dzdHIgIkdpdGsgVGFzdGF0dXJiZWxlZ3VuZyIKK21zZ3N0ciAiR2l0ay1UYXN0YXR1cmJlbGVndW5nIgogCi0jOiBnaXRrOjI1MTcKKyM6IGdpdGs6MjY4MgogbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKLW1zZ3N0ciAiR2l0ayBUYXN0YXR1cmJlbGVndW5nOiIKK21zZ3N0ciAiR2l0ay1UYXN0YXR1cmJlbGVndW5nOiIKIAotIzogZ2l0azoyNTE5CisjOiBnaXRrOjI2ODQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtUT5cdFx0UXVpdCIKIG1zZ3N0ciAiPCVzLVE+XHRcdEJlZW5kZW4iCiAKLSM6IGdpdGs6MjUyMAorIzogZ2l0azoyNjg1CiBtc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgogbXNnc3RyICI8UG9zMT5cdFx0WnVyIG5ldWVzdGVuIFZlcnNpb24gc3ByaW5nZW4iCiAKLSM6IGdpdGs6MjUyMQorIzogZ2l0azoyNjg2CiBtc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKIG1zZ3N0ciAiPEVuZGU+XHRcdFp1ciDDpGx0ZXN0ZW4gVmVyc2lvbiBzcHJpbmdlbiIKIAotIzogZ2l0azoyNTIyCisjOiBnaXRrOjI2ODcKIG1zZ2lkICI8VXA+LCBwLCBpXHRNb3ZlIHVwIG9uZSBjb21taXQiCiBtc2dzdHIgIjxIb2NoPiwgcCwgaVx0TsOkY2hzdGUgbmV1ZXJlIFZlcnNpb24iCiAKLSM6IGdpdGs6MjUyMworIzogZ2l0azoyNjg4CiBtc2dpZCAiPERvd24+LCBuLCBrXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKIG1zZ3N0ciAiPFJ1bnRlcj4sIG4sIGtcdE7DpGNoc3RlIMOkbHRlcmUgVmVyc2lvbiIKIAotIzogZ2l0azoyNTI0CisjOiBnaXRrOjI2ODkKIG1zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgogbXNnc3RyICI8TGlua3M+LCB6LCBqXHRFaW5lIFZlcnNpb24genVyw7xja2dlaGVuIgogCi0jOiBnaXRrOjI1MjUKKyM6IGdpdGs6MjY5MAogbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgogbXNnc3RyICI8UmVjaHRzPiwgeCwgbFx0RWluZSBWZXJzaW9uIHdlaXRlcmdlaGVuIgogCi0jOiBnaXRrOjI1MjYKKyM6IGdpdGs6MjY5MQogbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgogbXNnc3RyICI8QmlsZEhvY2g+XHRFaW5lIFNlaXRlIG5hY2ggb2JlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUyNworIzogZ2l0azoyNjkyCiBtc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgogbXNnc3RyICI8QmlsZFJ1bnRlcj5cdEVpbmUgU2VpdGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUyOAorIzogZ2l0azoyNjkzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgogbXNnc3RyICI8JXMtUG9zMT5cdFp1bSBvYmVyZW4gRW5kZSBkZXIgVmVyc2lvbnNsaXN0ZSBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUyOQorIzogZ2l0azoyNjk0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCiBtc2dzdHIgIjwlcy1FbmRlPlx0WnVtIHVudGVyZW4gRW5kZSBkZXIgVmVyc2lvbnNsaXN0ZSBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUzMAorIzogZ2l0azoyNjk1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgogbXNnc3RyICI8JXMtSG9jaD5cdFZlcnNpb25zbGlzdGUgZWluZSBaZWlsZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MzEKKyM6IGdpdGs6MjY5NgogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCiBtc2dzdHIgIjwlcy1SdW50ZXI+XHRWZXJzaW9uc2xpc3RlIGVpbmUgWmVpbGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUzMgorIzogZ2l0azoyNjk3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPCVzLUJpbGRIb2NoPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFNlaXRlIGhvY2ggYmzDpHR0ZXJuIgorbXNnc3RyICI8JXMtQmlsZEhvY2g+XHRWZXJzaW9uc2xpc3RlIGVpbmUgU2VpdGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKIAotIzogZ2l0azoyNTMzCisjOiBnaXRrOjI2OTgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKIG1zZ3N0ciAiPCVzLUJpbGRSdW50ZXI+XHRWZXJzaW9uc2xpc3RlIGVpbmUgU2VpdGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUzNAorIzogZ2l0azoyNjk5CiBtc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgogbXNnc3RyICI8VW1zY2hhbHQtSG9jaD5cdFLDvGNrd8OkcnRzIHN1Y2hlbiAobmFjaCBvYmVuOyBuZXVlcmUgVmVyc2lvbmVuKSIKIAotIzogZ2l0azoyNTM1CisjOiBnaXRrOjI3MDAKIG1zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKIG1zZ3N0ciAiPFVtc2NoYWx0LVJ1bnRlcj4gU3VjaGVuIChuYWNoIHVudGVuOyDDpGx0ZXJlIFZlcnNpb25lbikiCiAKLSM6IGdpdGs6MjUzNgorIzogZ2l0azoyNzAxCiBtc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCiBtc2dzdHIgIjxFbnRmPiwgYlx0XHRWZXJnbGVpY2ggZWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MzcKKyM6IGdpdGs6MjcwMgogbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgogbXNnc3RyICI8TMO2c2NodGFzdGU+XHRWZXJnbGVpY2ggZWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MzgKKyM6IGdpdGs6MjcwMwogbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgogbXNnc3RyICI8TGVlcnRhc3RlPlx0VmVyZ2xlaWNoIGVpbmUgU2VpdGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUzOQorIzogZ2l0azoyNzA0CiBtc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgotbXNnc3RyICJ1XHRcdFZlcmdsZWljaCB1bSAxOCBaZWlsZW4gbmFjaCBvYmVuICjCu3VwwqspIGJsw6R0dGVybiIKK21zZ3N0ciAidVx0XHRWZXJnbGVpY2ggdW0gMTggWmVpbGVuIG5hY2ggb2JlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjU0MAorIzogZ2l0azoyNzA1CiBtc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCi1tc2dzdHIgImRcdFx0VmVyZ2xlaWNoIHVtIDE4IFplaWxlbiBuYWNoIHVudGVuICjCu2Rvd27CqykgYmzDpHR0ZXJuIgorbXNnc3RyICJkXHRcdFZlcmdsZWljaCB1bSAxOCBaZWlsZW4gbmFjaCB1bnRlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjU0MQorIzogZ2l0azoyNzA2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUY+XHRcdEZpbmQiCiBtc2dzdHIgIjwlcy1GPlx0XHRTdWNoZW4iCiAKLSM6IGdpdGs6MjU0MgorIzogZ2l0azoyNzA3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKIG1zZ3N0ciAiPCVzLUc+XHRcdFdlaXRlcnN1Y2hlbiIKIAotIzogZ2l0azoyNTQzCisjOiBnaXRrOjI3MDgKIG1zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgogbXNnc3RyICI8RWluZ2FiZXRhc3RlPlx0V2VpdGVyc3VjaGVuIgogCi0jOiBnaXRrOjI1NDQKLW1zZ2lkICIvXHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCwgb3IgcmVkbyBmaW5kIgotbXNnc3RyICIvXHRcdFdlaXRlcnN1Y2hlbiBvZGVyIG5ldWUgU3VjaGUgYmVnaW5uZW4iCisjOiBnaXRrOjI3MDkKK21zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgorbXNnc3RyICIvXHRcdFRhc3RhdHVyZm9rdXMgaW5zIFN1Y2hmZWxkIgogCi0jOiBnaXRrOjI1NDUKKyM6IGdpdGs6MjcxMAogbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKIG1zZ3N0ciAiP1x0XHRSw7xja3fDpHJ0cyB3ZWl0ZXJzdWNoZW4iCiAKLSM6IGdpdGs6MjU0NgorIzogZ2l0azoyNzExCiBtc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKLW1zZ3N0ciAiZlx0XHRWZXJnbGVpY2ggenVyIG7DpGNoc3RlbiBEYXRlaSAowrtmaWxlwqspIGJsw6R0dGVybiIKK21zZ3N0ciAiZlx0XHRWZXJnbGVpY2ggenVyIG7DpGNoc3RlbiBEYXRlaSBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjU0NworIzogZ2l0azoyNzEyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgogbXNnc3RyICI8JXMtUz5cdFx0V2VpdGVyc3VjaGVuIGltIFZlcmdsZWljaCIKIAotIzogZ2l0azoyNTQ4CisjOiBnaXRrOjI3MTMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgogbXNnc3RyICI8JXMtUj5cdFx0UsO8Y2t3w6RydHMgd2VpdGVyc3VjaGVuIGltIFZlcmdsZWljaCIKIAotIzogZ2l0azoyNTQ5CisjOiBnaXRrOjI3MTQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtTnVtbWVyYmxvY2stUGx1cz5cdFNjaHJpZnRncsO2w59lIHZlcmdyw7bDn2VybiIKK21zZ3N0ciAiPCVzLU51bW1lcmJsb2NrLVBsdXM+XHRTY2hyaWZ0IHZlcmdyw7bDn2VybiIKIAotIzogZ2l0azoyNTUwCisjOiBnaXRrOjI3MTUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLVBsdXM+XHRTY2hyaWZ0Z3LDtsOfZSB2ZXJncsO2w59lcm4iCittc2dzdHIgIjwlcy1QbHVzPlx0U2NocmlmdCB2ZXJncsO2w59lcm4iCiAKLSM6IGdpdGs6MjU1MQorIzogZ2l0azoyNzE2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLU51bW1lcm5ibG9jay0+IFNjaHJpZnRncsO2w59lIHZlcmtsZWluZXJuIgorbXNnc3RyICI8JXMtTnVtbWVybmJsb2NrLU1pbnVzPiBTY2hyaWZ0IHZlcmtsZWluZXJuIgogCi0jOiBnaXRrOjI1NTIKKyM6IGdpdGs6MjcxNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLU1pbnVzPlx0U2NocmlmdGdyw7bDn2UgdmVya2xlaW5lcm4iCittc2dzdHIgIjwlcy1NaW51cz5cdFNjaHJpZnQgdmVya2xlaW5lcm4iCiAKLSM6IGdpdGs6MjU1MworIzogZ2l0azoyNzE4CiBtc2dpZCAiPEY1Plx0XHRVcGRhdGUiCiBtc2dzdHIgIjxGNT5cdFx0QWt0dWFsaXNpZXJlbiIKIAotIzogZ2l0azoyOTc5CisjOiBnaXRrOjMxNzMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gSG9sZW4gdm9uIMK7JXPCqyB2b24gwrslc8KrOiIKIAotIzogZ2l0azozMDM2IGdpdGs6MzA0NQorIzogZ2l0azozMjMwIGdpdGs6MzIzOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBlaW5lcyB0ZW1wb3LDpHJlbiBWZXJ6ZWljaG5pc3NlcyDCuyVzwqs6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXMgdGVtcG9yw6RyZW4gVmVyemVpY2huaXNzZXMgwrslc8KrOiIKIAotIzogZ2l0azozMDU4CisjOiBnaXRrOjMyNTEKIG1zZ2lkICJjb21tYW5kIGZhaWxlZDoiCiBtc2dzdHIgIktvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuOiIKIAotIzogZ2l0azozMDc4CisjOiBnaXRrOjMzOTcKIG1zZ2lkICJObyBzdWNoIGNvbW1pdCIKIG1zZ3N0ciAiVmVyc2lvbiBuaWNodCBnZWZ1bmRlbiIKIAotIzogZ2l0azozMDgzCisjOiBnaXRrOjM0MTEKIG1zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCiBtc2dzdHIgImdpdCBndWkgYmxhbWU6IEtvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuOiIKIAotIzogZ2l0azozMzk4CisjOiBnaXRrOjM0NDIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgogbXNnc3RyICJadXNhbW1lbmbDvGhydW5ncy1TcGl0emUga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuOiAlcyIKIAotIzogZ2l0azozNDA2CisjOiBnaXRrOjM0NTAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gZGVyIEJlcmVpdHN0ZWxsdW5nICjCu2luZGV4wqspOiAlcyIKIAotIzogZ2l0azozNDMxCisjOiBnaXRrOjM0NzUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgogbXNnc3RyICLCu2dpdCBibGFtZcKrIGtvbm50ZSBuaWNodCBnZXN0YXJ0ZXQgd2VyZGVuOiAlcyIKIAotIzogZ2l0azozNDM0IGdpdGs6NjE2MAorIzogZ2l0azozNDc4IGdpdGs6NjIwOQogbXNnaWQgIlNlYXJjaGluZyIKIG1zZ3N0ciAiU3VjaGVuIgogCi0jOiBnaXRrOjM0NjYKKyM6IGdpdGs6MzUxMAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gwrtnaXQgYmxhbWXCqzogJXMiCiAKLSM6IGdpdGs6MzQ5NAorIzogZ2l0azozNTM4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKIG1zZ3N0ciAiIgotIkRpZXNlIFplaWxlIHN0YW1tdCBhdXMgVmVyc2lvbiAlcywgd2VsY2hlIG5pY2h0IGluIGRpZXNlciBBbnNpY2h0IGdlemVpZ3QgIgotIndpcmQuIgorIkRpZXNlIFplaWxlIHN0YW1tdCBhdXMgVmVyc2lvbiAlcywgZGllIG5pY2h0IGluIGRpZXNlciBBbnNpY2h0IGdlemVpZ3Qgd2lyZCIKIAotIzogZ2l0azozNTA4CisjOiBnaXRrOjM1NTIKIG1zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgotbXNnc3RyICJFeHRlcm5lcyBWZXJnbGVpY2gtKERpZmYtKVByb2dyYW1tIGZlaGxnZXNjaGxhZ2VuOiIKK21zZ3N0ciAiRXh0ZXJuZXMgRGlmZi1Qcm9ncmFtbSBmZWhsZ2VzY2hsYWdlbjoiCiAKLSM6IGdpdGs6MzIxMAorIzogZ2l0azozNjcwCiBtc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCi1tc2dzdHIgIkdpdGsgQW5zaWNodGVuIgorbXNnc3RyICJHaXRrLUFuc2ljaHRlbiIKIAotIzogZ2l0azozNjMwCisjOiBnaXRrOjM2NzQKIG1zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCiBtc2dzdHIgIkRpZXNlIEFuc2ljaHQgc3BlaWNoZXJuIgogCi0jOiBnaXRrOjMyMzIKKyM6IGdpdGs6MzY3NQogbXNnaWQgIkNvbW1pdHMgdG8gaW5jbHVkZSAoYXJndW1lbnRzIHRvIGdpdCBsb2cpOiIKLW1zZ3N0ciAiVmVyc2lvbmVuIGFuemVpZ2VuIChBcmd1bWVudGUgdm9uIGdpdC1sb2cpOiIKK21zZ3N0ciAiVmVyc2lvbmVuIGFuemVpZ2VuIChBcmd1bWVudGUgdm9uIGdpdCBsb2cpOiIKIAotIzogZ2l0azozNjMyCisjOiBnaXRrOjM2NzYKIG1zZ2lkICJVc2UgYWxsIHJlZnMiCiBtc2dzdHIgIkFsbGUgWndlaWdlIHZlcndlbmRlbiIKIAotIzogZ2l0azozNjMzCisjOiBnaXRrOjM2NzcKIG1zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCiBtc2dzdHIgIlN0cmVuZyBuYWNoIERhdHVtIHNvcnRpZXJlbiIKIAotIzogZ2l0azozNjM0CisjOiBnaXRrOjM2NzgKIG1zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKIG1zZ3N0ciAiWndlaWctU2VpdGVuIG1hcmtpZXJlbiIKIAotIzogZ2l0azozNjM1CisjOiBnaXRrOjM2NzkKIG1zZ2lkICJTaW5jZSBkYXRlOiIKIG1zZ3N0ciAiVm9uIERhdHVtOiIKIAotIzogZ2l0azozNjM2CisjOiBnaXRrOjM2ODAKIG1zZ2lkICJVbnRpbCBkYXRlOiIKIG1zZ3N0ciAiQmlzIERhdHVtOiIKIAotIzogZ2l0azozNjM3CisjOiBnaXRrOjM2ODEKIG1zZ2lkICJNYXggY291bnQ6IgogbXNnc3RyICJNYXguIEFuemFobDoiCiAKLSM6IGdpdGs6MzYzOAorIzogZ2l0azozNjgyCiBtc2dpZCAiU2tpcDoiCiBtc2dzdHIgIsOcYmVyc3ByaW5nZW46IgogCi0jOiBnaXRrOjM2MzkKKyM6IGdpdGs6MzY4MwogbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKIG1zZ3N0ciAiQXVmIGVyc3RlIEVsdGVybnZlcnNpb24gYmVzY2hyw6Rua2VuIgogCi0jOiBnaXRrOjM2NDAKKyM6IGdpdGs6MzY4NAogbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgogbXNnc3RyICJWZXJzaW9uc2xpc3RlIGR1cmNoIGZvbGdlbmRlcyBLb21tYW5kbyBlcnpldWdlbiBsYXNzZW46IgogCi0jOiBnaXRrOjM3NDkKKyM6IGdpdGs6Mzc4MAorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogQW5zaWNodCBiZWFyYmVpdGVuIgorCisjOiBnaXRrOjM3OTMKIG1zZ2lkICJOYW1lIgogbXNnc3RyICJOYW1lIgogCi0jOiBnaXRrOjM3OTcKKyM6IGdpdGs6Mzg0MQogbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgogbXNnc3RyICJGb2xnZW5kZSBEYXRlaWVuIHVuZCBWZXJ6ZWljaG5pc3NlIGFuemVpZ2VuIChlaW5lIHBybyBaZWlsZSk6IgogCi0jOiBnaXRrOjM4MTEKKyM6IGdpdGs6Mzg1NQogbXNnaWQgIkFwcGx5IChGNSkiCiBtc2dzdHIgIkFud2VuZGVuIChGNSkiCiAKLSM6IGdpdGs6Mzg0OQorIzogZ2l0azozODkzCiBtc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgogbXNnc3RyICJGZWhsZXIgaW4gZGVuIGF1c2dld8OkaGx0ZW4gVmVyc2lvbmVuOiIKIAotIzogZ2l0azozMzQ3IGdpdGs6MzM5OSBnaXRrOjM4NDIgZ2l0azozODU2IGdpdGs6NTA2MCBnaXRrOjEwMTQxIGdpdGs6MTAxNDIKKyM6IGdpdGs6Mzk0NiBnaXRrOjM5OTggZ2l0azo0NDQ2IGdpdGs6NDQ2MCBnaXRrOjU3MjEgZ2l0azoxMTExNCBnaXRrOjExMTE1CiBtc2dpZCAiTm9uZSIKIG1zZ3N0ciAiS2VpbmUiCiAKLSM6IGdpdGs6Mzc5MCBnaXRrOjU1ODAgZ2l0azo3Mjg3IGdpdGs6NzMwMgorIzogZ2l0azo0Mzk0IGdpdGs6NjI0MSBnaXRrOjc5OTMgZ2l0azo4MDA4CiBtc2dpZCAiRGF0ZSIKIG1zZ3N0ciAiRGF0dW0iCiAKLSM6IGdpdGs6Mzc5MCBnaXRrOjU1ODAKKyM6IGdpdGs6NDM5NCBnaXRrOjYyNDEKIG1zZ2lkICJDRGF0ZSIKIG1zZ3N0ciAiRWludHJhZ2VkYXR1bSIKIAotIzogZ2l0azozOTM5IGdpdGs6Mzk0NAorIzogZ2l0azo0NTQzIGdpdGs6NDU0OAogbXNnaWQgIkRlc2NlbmRhbnQiCiBtc2dzdHIgIkFia8O2bW1saW5nIgogCi0jOiBnaXRrOjM5NDAKKyM6IGdpdGs6NDU0NAogbXNnaWQgIk5vdCBkZXNjZW5kYW50IgotbXNnc3RyICJOaWNodCBBYmvDtm1tbGluZyIKK21zZ3N0ciAiS2VpbiBBYmvDtm1tbGluZyIKIAotIzogZ2l0azozOTQ3IGdpdGs6Mzk1MgorIzogZ2l0azo0NTUxIGdpdGs6NDU1NgogbXNnaWQgIkFuY2VzdG9yIgogbXNnc3RyICJWb3Jnw6RuZ2VyIgogCi0jOiBnaXRrOjM5NDgKKyM6IGdpdGs6NDU1MgogbXNnaWQgIk5vdCBhbmNlc3RvciIKLW1zZ3N0ciAiTmljaHQgVm9yZ8OkbmdlciIKK21zZ3N0ciAiS2VpbiBWb3Jnw6RuZ2VyIgogCi0jOiBnaXRrOjQxODcKKyM6IGdpdGs6NDg0MgogbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKIG1zZ3N0ciAiTG9rYWxlIMOEbmRlcnVuZ2VuIGJlcmVpdGdlc3RlbGx0LCBhYmVyIG5pY2h0IGVpbmdldHJhZ2VuIgogCi0jOiBnaXRrOjQyMjAKKyM6IGdpdGs6NDg3OAogbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgogbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4sIG5pY2h0IGJlcmVpdGdlc3RlbGx0IgogCi0jOiBnaXRrOjY2NzMKKyM6IGdpdGs6NjU1OQorbXNnaWQgIm1hbnkiCittc2dzdHIgInZpZWxlIgorCisjOiBnaXRrOjY3NDMKIG1zZ2lkICJUYWdzOiIKIG1zZ3N0ciAiTWFya2llcnVuZ2VuOiIKIAotIzogZ2l0azo2MDY2IGdpdGs6NjA3MiBnaXRrOjcyODAKKyM6IGdpdGs6Njc2MCBnaXRrOjY3NjYgZ2l0azo3OTg2CiBtc2dpZCAiUGFyZW50IgogbXNnc3RyICJFbHRlcm4iCiAKLSM6IGdpdGs6NjA3NworIzogZ2l0azo2NzcxCiBtc2dpZCAiQ2hpbGQiCiBtc2dzdHIgIktpbmQiCiAKLSM6IGdpdGs6NjA4NgorIzogZ2l0azo2NzgwCiBtc2dpZCAiQnJhbmNoIgogbXNnc3RyICJad2VpZyIKIAotIzogZ2l0azo2MDg5CisjOiBnaXRrOjY3ODMKIG1zZ2lkICJGb2xsb3dzIgogbXNnc3RyICJGb2xndCBhdWYiCiAKLSM6IGdpdGs6NjA5MgorIzogZ2l0azo2Nzg2CiBtc2dpZCAiUHJlY2VkZXMiCiBtc2dzdHIgIlZvcmfDpG5nZXIgdm9uIgogCi0jOiBnaXRrOjcyMDkKKyM6IGdpdGs6NzI3OQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgogbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXMgVmVyZ2xlaWNoczogJXMiCiAKLSM6IGdpdGs6Nzc0OAorIzogZ2l0azo3ODE5CiBtc2dpZCAiR290bzoiCiBtc2dzdHIgIkdlaGUgenU6IgogCi0jOiBnaXRrOjcxMTUKKyM6IGdpdGs6NzgyMQogbXNnaWQgIlNIQTEgSUQ6IgogbXNnc3RyICJTSEExLUhhc2h3ZXJ0OiIKIAotIzogZ2l0azo3MTM0CisjOiBnaXRrOjc4NDAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKIG1zZ3N0ciAiS3VyemVyIFNIQTEtSGFzaHdlcnQgwrslc8KrIGlzdCBtZWhyZGV1dGlnIgogCi0jOiBnaXRrOjcxNDYKKyM6IGdpdGs6Nzg1MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgotbXNnc3RyICJTSEExLUhhc2h3ZXJ0IMK7JXPCqyB1bmJla2FubnQiCittc2dzdHIgIlNIQTEtSGFzaHdlcnQgwrslc8KrIGlzdCB1bmJla2FubnQiCiAKLSM6IGdpdGs6NzE0OAorIzogZ2l0azo3ODU0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVGFnL0hlYWQgJXMgaXMgbm90IGtub3duIgogbXNnc3RyICJNYXJraWVydW5nL1p3ZWlnIMK7JXPCqyBpc3QgdW5iZWthbm50IgogCi0jOiBnaXRrOjcyOTAKKyM6IGdpdGs6Nzk5NgogbXNnaWQgIkNoaWxkcmVuIgogbXNnc3RyICJLaW5kZXIiCiAKLSM6IGdpdGs6NzM0NworIzogZ2l0azo4MDUzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCiBtc2dzdHIgIlp3ZWlnIMK7JXPCqyBoaWVyaGVyIHp1csO8Y2tzZXR6ZW4iCiAKLSM6IGdpdGs6NzM0OQorIzogZ2l0azo4MDU1CiBtc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCiBtc2dzdHIgIlp3ZWlnc3BpdHplIGlzdCBhYmdldHJlbm50OiBadXLDvGNrc2V0emVuIG5pY2h0IG3DtmdsaWNoIgogCi0jOiBnaXRrOjczODEKKyM6IGdpdGs6ODE2NCBnaXRrOjgxNzAKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICLDnGJlcnNwcmluZ2UgWnVzYW1tZW5mw7xocnVuZ3MtVmVyc2lvbiAiCisKKyM6IGdpdGs6ODE3OSBnaXRrOjgxODQKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgIkZlaGxlciBiZWltIEhvbGVuIGRlciBQYXRjaC1JRCBmw7xyICIKKworIzogZ2l0azo4MTgwIGdpdGs6ODE4NQorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIEFiYnJ1Y2guXG4iCisKKyM6IGdpdGs6ODE5MCBnaXRrOjgxOTMgZ2l0azo4MjAxIGdpdGs6ODIxMSBnaXRrOjgyMjAKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJWZXJzaW9uICIKKworIzogZ2l0azo4MTk0Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgaXN0IGRhcyBnbGVpY2hlIFBhdGNoIHdpZVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODIwMgorbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBpc3QgdW50ZXJzY2hpZWRsaWNoIHZvblxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODIwNAorbXNnaWQgIi0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiLSBBYmJydWNoLlxuIgorCisjOiBnaXRrOjgyMTIgZ2l0azo4MjIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiBoYXQgJXMgS2luZGVyLiBBYmJydWNoXG4iCisKKyM6IGdpdGs6ODI1MgogbXNnaWQgIlRvcCIKIG1zZ3N0ciAiT2JlbiIKIAotIzogZ2l0azo3MzgyCisjOiBnaXRrOjgyNTMKIG1zZ2lkICJGcm9tIgogbXNnc3RyICJWb24iCiAKLSM6IGdpdGs6NzM4NworIzogZ2l0azo4MjU4CiBtc2dpZCAiVG8iCiBtc2dzdHIgImJpcyIKIAotIzogZ2l0azo3NDEwCisjOiBnaXRrOjgyODIKIG1zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKIG1zZ3N0ciAiUGF0Y2ggZXJzdGVsbGVuIgogCi0jOiBnaXRrOjc0MTIKKyM6IGdpdGs6ODI4NAogbXNnaWQgIkZyb206IgogbXNnc3RyICJWb246IgogCi0jOiBnaXRrOjc0MjEKKyM6IGdpdGs6ODI5MwogbXNnaWQgIlRvOiIKIG1zZ3N0ciAiYmlzOiIKIAotIzogZ2l0azo3NDMwCisjOiBnaXRrOjgzMDIKIG1zZ2lkICJSZXZlcnNlIgogbXNnc3RyICJVbWdla2VocnQiCiAKLSM6IGdpdGs6NzQzMiBnaXRrOjc2MDcKKyM6IGdpdGs6ODMwNCBnaXRrOjg0ODkKIG1zZ2lkICJPdXRwdXQgZmlsZToiCiBtc2dzdHIgIkF1c2dhYmVkYXRlaToiCiAKLSM6IGdpdGs6NzQzOAorIzogZ2l0azo4MzEwCiBtc2dpZCAiR2VuZXJhdGUiCiBtc2dzdHIgIkVyemV1Z2VuIgogCi0jOiBnaXRrOjc0NzQKKyM6IGdpdGs6ODM0OAogbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gUGF0Y2ggZXJ6ZXVnZW46IgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXMgUGF0Y2hlczoiCiAKLSM6IGdpdGs6NzQ5NiBnaXRrOjc1OTUgZ2l0azo3NjQ5CisjOiBnaXRrOjgzNzEgZ2l0azo4NDc3IGdpdGs6ODUzNAogbXNnaWQgIklEOiIKIG1zZ3N0ciAiSUQ6IgogCi0jOiBnaXRrOjc1MDUKKyM6IGdpdGs6ODM4MAogbXNnaWQgIlRhZyBuYW1lOiIKIG1zZ3N0ciAiTWFya2llcnVuZ3NuYW1lOiIKIAotIzogZ2l0azo3NTA5IGdpdGs6NzY1OQorIzogZ2l0azo4Mzg0IGdpdGs6ODU0MwogbXNnaWQgIkNyZWF0ZSIKIG1zZ3N0ciAiRXJzdGVsbGVuIgogCi0jOiBnaXRrOjc1MjQKKyM6IGdpdGs6ODQwMQogbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKIG1zZ3N0ciAiS2VpbiBNYXJraWVydW5nc25hbWUgYW5nZWdlYmVuIgogCi0jOiBnaXRrOjc1MjgKKyM6IGdpdGs6ODQwNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCiBtc2dzdHIgIk1hcmtpZXJ1bmcgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKIAotIzogZ2l0azo3NTM0CisjOiBnaXRrOjg0MTEKIG1zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgotbXNnc3RyICJGZWhsZXIgYmVpIE1hcmtpZXJ1bmcgZXJzdGVsbGVuOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlciBNYXJraWVydW5nOiIKIAotIzogZ2l0azo3NjA0CisjOiBnaXRrOjg0ODYKIG1zZ2lkICJDb21tYW5kOiIKIG1zZ3N0ciAiS29tbWFuZG86IgogCi0jOiBnaXRrOjc2MTIKKyM6IGdpdGs6ODQ5NAogbXNnaWQgIldyaXRlIgogbXNnc3RyICJTY2hyZWliZW4iCiAKLSM6IGdpdGs6NzYyOAorIzogZ2l0azo4NTEyCiBtc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgogbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIFZlcnNpb246IgogCi0jOiBnaXRrOjc2NTQKKyM6IGdpdGs6ODUzOQogbXNnaWQgIk5hbWU6IgogbXNnc3RyICJOYW1lOiIKIAotIzogZ2l0azo3Njc0CisjOiBnaXRrOjg1NjIKIG1zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgogbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gTmFtZW4gZsO8ciBkZW4gbmV1ZW4gWndlaWcgYW4uIgogCi0jOiBnaXRrOjgzMjgKKyM6IGdpdGs6ODU2NwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgogbXNnc3RyICJad2VpZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIFNvbGwgZXIgw7xiZXJzY2hyaWViZW4gd2VyZGVuPyIKIAotIzogZ2l0azo4Mzk0CisjOiBnaXRrOjg2MzMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKIG1zZ3N0ciAiIgogIlZlcnNpb24gwrslc8KrIGlzdCBiZXJlaXRzIGltIFp3ZWlnIMK7JXPCqyBlbnRoYWx0ZW4gLS0gdHJvdHpkZW0gZXJuZXV0ICIKICJlaW50cmFnZW4/IgogCi0jOiBnaXRrOjc3MTgKKyM6IGdpdGs6ODYzOAogbXNnaWQgIkNoZXJyeS1waWNraW5nIgogbXNnc3RyICJWZXJzaW9uIHBmbMO8Y2tlbiIKIAotIzogZ2l0azo4NDA4CisjOiBnaXRrOjg2NDcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCkBAIC04MjIsNDUgKzg4OCw0NSBAQAogbXNnc3RyICIiCiAiUGZsw7xja2VuIGZlaGxnZXNjaGxhZ2VuLCBkYSBub2NoIGxva2FsZSDDhG5kZXJ1bmdlbiBpbiBEYXRlaSDCuyVzwqtcbiIKICJ2b3JsaWVnZW4uIEJpdHRlIGRpZXNlIMOEbmRlcnVuZ2VuIGVpbnRyYWdlbiwgenVyw7xja3NldHplbiBvZGVyXG4iCi0iendpc2NoZW5zcGVpY2hlcm4gKMK7Z2l0IHN0YXNowrspIHVuZCBkYW5uIGVybmV1dCB2ZXJzdWNoZW4uIgorInp3aXNjaGVuc3BlaWNoZXJuICjCu2dpdCBzdGFzaMKrKSB1bmQgZGFubiBlcm5ldXQgdmVyc3VjaGVuLiIKIAotIzogZ2l0azo4NDE0CisjOiBnaXRrOjg2NTMKIG1zZ2lkICIiCiAiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCiAiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCiBtc2dzdHIgIiIKICJQZmzDvGNrZW4gZmVobGdlc2NobGFnZW4sIGRhIGVpbiBadXNhbW1lbmbDvGhydW5ncy1Lb25mbGlrdCBhdWZnZXRyZXRlblxuIgotImlzdC4gU29sbCBkYXMgwrtnaXQgY2l0b29swqsgKFp1c2FtbWVuZsO8aHJ1bmdzLVdlcmt6ZXVnKSBhdWZnZXJ1ZmVuXG4iCisiaXN0LiBTb2xsIGRhcyBadXNhbW1lbmbDvGhydW5ncy1XZXJremV1ZyAowrtnaXQgY2l0b29swqspIGF1ZmdlcnVmZW5cbiIKICJ3ZXJkZW4sIHVtIGRpZXNlbiBLb25mbGlrdCBhdWZ6dWzDtnNlbj8iCiAKLSM6IGdpdGs6ODQzMAorIzogZ2l0azo4NjY5CiBtc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCiBtc2dzdHIgIktlaW5lIMOEbmRlcnVuZ2VuIGVpbmdldHJhZ2VuIgogCi0jOiBnaXRrOjc3NDUKKyM6IGdpdGs6ODY5NQogbXNnaWQgIkNvbmZpcm0gcmVzZXQiCiBtc2dzdHIgIlp1csO8Y2tzZXR6ZW4gYmVzdMOkdGlnZW4iCiAKLSM6IGdpdGs6Nzc0NworIzogZ2l0azo4Njk3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKIG1zZ3N0ciAiWndlaWcgwrslc8KrIGF1ZiDCuyVzwqsgenVyw7xja3NldHplbj8iCiAKLSM6IGdpdGs6Nzc1MQorIzogZ2l0azo4NzAxCiBtc2dpZCAiUmVzZXQgdHlwZToiCiBtc2dzdHIgIkFydCBkZXMgWnVyw7xja3NldHplbnM6IgogCi0jOiBnaXRrOjc3NTUKKyM6IGdpdGs6ODcwNQogbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgogbXNnc3RyICJIYXJtbG9zOiBBcmJlaXRza29waWUgdW5kIEJlcmVpdHN0ZWxsdW5nIHVudmVyw6RuZGVydCIKIAotIzogZ2l0azo3NzU4CisjOiBnaXRrOjg3MDgKIG1zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCiBtc2dzdHIgIiIKICJHZW1pc2NodDogQXJiZWl0c2tvcGllIHVudmVyw6RuZGVydCxcbiIKICJCZXJlaXRzdGVsbHVuZyB6dXLDvGNrZ2VzZXR6dCIKIAotIzogZ2l0azo3NzYxCisjOiBnaXRrOjg3MTEKIG1zZ2lkICIiCiAiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgogIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKQEAgLTg2OCwyMSArOTM0LDIxIEBACiAiSGFydDogQXJiZWl0c2tvcGllIHVuZCBCZXJlaXRzdGVsbHVuZ1xuIgogIihBbGxlIGxva2FsZW4gw4RuZGVydW5nZW4gd2VyZGVuIGdlbMO2c2NodCkiCiAKLSM6IGdpdGs6Nzc3NworIzogZ2l0azo4NzI4CiBtc2dpZCAiUmVzZXR0aW5nIgogbXNnc3RyICJadXLDvGNrc2V0emVuIgogCi0jOiBnaXRrOjc4MzQKKyM6IGdpdGs6ODc4NQogbXNnaWQgIkNoZWNraW5nIG91dCIKIG1zZ3N0ciAiVW1zdGVsbGVuIgogCi0jOiBnaXRrOjc4ODUKKyM6IGdpdGs6ODgzOAogbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCiBtc2dzdHIgIiIKICJEZXIgWndlaWcsIGF1ZiBkZW4gZGllIEFyYmVpdHNrb3BpZSBtb21lbnRhbiB1bWdlc3RlbGx0IGlzdCwga2FubiBuaWNodCAiCiAiZ2Vsw7ZzY2h0IHdlcmRlbi4iCiAKLSM6IGdpdGs6Nzg5MQorIzogZ2l0azo4ODQ0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKQEAgLTg5MSwxNzQgKzk1NywxNzQgQEAKICJEaWUgVmVyc2lvbmVuIGF1ZiBad2VpZyDCuyVzwqsgZXhpc3RpZXJlbiBhdWYga2VpbmVtIGFuZGVyZW4gWndlaWcuXG4iCiAiWndlaWcgwrslc8KrIHRyb3R6ZGVtIGzDtnNjaGVuPyIKIAotIzogZ2l0azo3OTIyCisjOiBnaXRrOjg4NzUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCiBtc2dzdHIgIk1hcmtpZXJ1bmdlbiB1bmQgWndlaWdlOiAlcyIKIAotIzogZ2l0azo3OTM2CisjOiBnaXRrOjg4OTAKIG1zZ2lkICJGaWx0ZXIiCiBtc2dzdHIgIkZpbHRlcm4iCiAKLSM6IGdpdGs6ODIzMAorIzogZ2l0azo5MTg1CiBtc2dpZCAiIgogIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgogInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgogbXNnc3RyICIiCi0iRmVobGVyIGJlaW0gTGVzZW4gZGVyIFN0cnVrdHVyaW5mb3JtYXRpb25lbjsgWndlaWdlIHVuZCBWb3Jnw6RuZ2VyL05hY2hmb2xnZXIgIgotIkluZm9ybWF0aW9uZW4gd2VyZGVuIHVudm9sbHN0w6RuZGlnIHNlaW4uIgorIkZlaGxlciBiZWltIExlc2VuIGRlciBTdHJ1a3R1cmluZm9ybWF0aW9uZW47IFp3ZWlnZSB1bmQgSW5mb3JtYXRpb25lbiB6dSAiCisiVm9yZ8Okbmdlci9OYWNoZm9sZ2VyIHdlcmRlbiB1bnZvbGxzdMOkbmRpZyBzZWluLiIKIAotIzogZ2l0azo5MjE2CisjOiBnaXRrOjEwMTcxCiBtc2dpZCAiVGFnIgogbXNnc3RyICJNYXJraWVydW5nIgogCi0jOiBnaXRrOjkyMTYKKyM6IGdpdGs6MTAxNzEKIG1zZ2lkICJJZCIKIG1zZ3N0ciAiSWQiCiAKLSM6IGdpdGs6OTI2MgorIzogZ2l0azoxMDIxOQogbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgotbXNnc3RyICJHaXRrIFNjaHJpZnRlbiB3w6RobGVuIgorbXNnc3RyICJHaXRrLVNjaHJpZnRlbiB3w6RobGVuIgogCi0jOiBnaXRrOjkyNzkKKyM6IGdpdGs6MTAyMzYKIG1zZ2lkICJCIgogbXNnc3RyICJGIgogCi0jOiBnaXRrOjkyODIKKyM6IGdpdGs6MTAyMzkKIG1zZ2lkICJJIgogbXNnc3RyICJLIgogCi0jOiBnaXRrOjkzNzUKKyM6IGdpdGs6MTAzMzQKIG1zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgotbXNnc3RyICJHaXRrIEVpbnN0ZWxsdW5nZW4iCittc2dzdHIgIkdpdGstRWluc3RlbGx1bmdlbiIKIAotIzogZ2l0azo5Mzc2CisjOiBnaXRrOjEwMzM2CiBtc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgotbXNnc3RyICJBbnplaWdlIFZlcnNpb25zbGlzdGUiCittc2dzdHIgIkFuemVpZ2UgZGVyIFZlcnNpb25zbGlzdGUiCiAKLSM6IGdpdGs6OTM3OQorIzogZ2l0azoxMDMzOQogbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKIG1zZ3N0ciAiTWF4aW1hbGUgR3JhcGhlbmJyZWl0ZSAoWmVpbGVuKSIKIAotIzogZ2l0azo5MzgzCisjOiBnaXRrOjEwMzQzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKIG1zZ3N0ciAiTWF4aW1hbGUgR3JhcGhlbmJyZWl0ZSAoJSBkZXMgRmVuc3RlcnMpIgogCi0jOiBnaXRrOjkzODgKKyM6IGdpdGs6MTAzNDcKIG1zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCiBtc2dzdHIgIkxva2FsZSDDhG5kZXJ1bmdlbiBhbnplaWdlbiIKIAotIzogZ2l0azo5MzkzCisjOiBnaXRrOjEwMzUwCiBtc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKLW1zZ3N0ciAiU0hBMS1IYXNod2VydCBhdXRvbWF0aXNjaCBtYXJraWVyZW4iCittc2dzdHIgIlNIQTEtSGFzaHdlcnQgYXV0b21hdGlzY2ggYXVzd8OkaGxlbiIKIAotIzogZ2l0azo5Mzk4CisjOiBnaXRrOjEwMzU0CiBtc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCi1tc2dzdHIgIkFuemVpZ2UgVmVyZ2xlaWNoIgorbXNnc3RyICJBbnplaWdlIGRlcyBWZXJnbGVpY2hzIgogCi0jOiBnaXRrOjk0MDAKKyM6IGdpdGs6MTAzNTYKIG1zZ2lkICJUYWIgc3BhY2luZyIKIG1zZ3N0ciAiVGFidWxhdG9yYnJlaXRlIgogCi0jOiBnaXRrOjk0MDQKKyM6IGdpdGs6MTAzNTkKIG1zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzIgotbXNnc3RyICJOYWhlbGllZ2VuZGUgw5xiZXJzY2hyaWZ0ZW4gYW56ZWlnZW4iCittc2dzdHIgIk5haGVsaWVnZW5kZSBNYXJraWVydW5nZW4gYW56ZWlnZW4iCiAKLSM6IGdpdGs6OTQwOQorIzogZ2l0azoxMDM2MgogbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKIG1zZ3N0ciAiVmVyZ2xlaWNoIG51ciBmw7xyIGFuZ2V6ZWlndGUgUGZhZGUiCiAKLSM6IGdpdGs6OTQxNAorIzogZ2l0azoxMDM2NQogbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgogbXNnc3RyICJaZWljaGVua29kaWVydW5nIHBybyBEYXRlaSBlcm1pdHRlbG4iCiAKLSM6IGdpdGs6OTQyMQorIzogZ2l0azoxMDM3MSBnaXRrOjEwNDM2CiBtc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgotbXNnc3RyICJFeHRlcm5lcyBWZXJnbGVpY2gtKERpZmYtKVByb2dyYW1tIgorbXNnc3RyICJFeHRlcm5lcyBEaWZmLVByb2dyYW1tIgogCi0jOiBnaXRrOjk0MjMKKyM6IGdpdGs6MTAzNzMKIG1zZ2lkICJDaG9vc2UuLi4iCi1tc2dzdHIgIlfDpGhsZW4uLi4iCittc2dzdHIgIlfDpGhsZW4gLi4uIgogCi0jOiBnaXRrOjk0MjgKKyM6IGdpdGs6MTAzNzgKIG1zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKIG1zZ3N0ciAiRmFyYmVuOiBLbGlja2VuIHp1bSBXw6RobGVuIgogCi0jOiBnaXRrOjk0MzEKKyM6IGdpdGs6MTAzODEKIG1zZ2lkICJCYWNrZ3JvdW5kIgogbXNnc3RyICJIaW50ZXJncnVuZCIKIAotIzogZ2l0azoxMDE1MyBnaXRrOjEwMTgzCisjOiBnaXRrOjEwMzgyIGdpdGs6MTA0MTIKIG1zZ2lkICJiYWNrZ3JvdW5kIgogbXNnc3RyICJIaW50ZXJncnVuZCIKIAotIzogZ2l0azoxMDE1NgorIzogZ2l0azoxMDM4NQogbXNnaWQgIkZvcmVncm91bmQiCiBtc2dzdHIgIlZvcmRlcmdydW5kIgogCi0jOiBnaXRrOjEwMTU3CisjOiBnaXRrOjEwMzg2CiBtc2dpZCAiZm9yZWdyb3VuZCIKIG1zZ3N0ciAiVm9yZGVyZ3J1bmQiCiAKLSM6IGdpdGs6MTAxNjAKKyM6IGdpdGs6MTAzODkKIG1zZ2lkICJEaWZmOiBvbGQgbGluZXMiCiBtc2dzdHIgIlZlcmdsZWljaDogQWx0ZSBaZWlsZW4iCiAKLSM6IGdpdGs6MTAxNjEKKyM6IGdpdGs6MTAzOTAKIG1zZ2lkICJkaWZmIG9sZCBsaW5lcyIKIG1zZ3N0ciAiVmVyZ2xlaWNoIC0gQWx0ZSBaZWlsZW4iCiAKLSM6IGdpdGs6MTAxNjUKKyM6IGdpdGs6MTAzOTQKIG1zZ2lkICJEaWZmOiBuZXcgbGluZXMiCiBtc2dzdHIgIlZlcmdsZWljaDogTmV1ZSBaZWlsZW4iCiAKLSM6IGdpdGs6MTAxNjYKKyM6IGdpdGs6MTAzOTUKIG1zZ2lkICJkaWZmIG5ldyBsaW5lcyIKIG1zZ3N0ciAiVmVyZ2xlaWNoIC0gTmV1ZSBaZWlsZW4iCiAKLSM6IGdpdGs6MTAxNzAKKyM6IGdpdGs6MTAzOTkKIG1zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKIG1zZ3N0ciAiVmVyZ2xlaWNoOiDDhG5kZXJ1bmdzdGl0ZWwiCiAKLSM6IGdpdGs6MTAxNzIKKyM6IGdpdGs6MTA0MDEKIG1zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgogbXNnc3RyICJWZXJnbGVpY2ggLSDDhG5kZXJ1bmdzdGl0ZWwiCiAKLSM6IGdpdGs6MTAxNzYKKyM6IGdpdGs6MTA0MDUKIG1zZ2lkICJNYXJrZWQgbGluZSBiZyIKLW1zZ3N0ciAiTWFya2llcnRlIFplaWxlIEhpbnRlcmdydW5kIgorbXNnc3RyICJIaW50ZXJncnVuZCBmw7xyIG1hcmtpZXJ0ZSBaZWlsZSIKIAotIzogZ2l0azoxMDE3OAorIzogZ2l0azoxMDQwNwogbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCi1tc2dzdHIgIm1hcmtpZXJ0ZSBaZWlsZSBIaW50ZXJncnVuZCIKK21zZ3N0ciAiSGludGVyZ3J1bmQgZsO8ciBtYXJraWVydGUgWmVpbGUiCiAKLSM6IGdpdGs6MTAxODIKKyM6IGdpdGs6MTA0MTEKIG1zZ2lkICJTZWxlY3QgYmciCi1tc2dzdHIgIkhpbnRlcmdydW5kZmFyYmUgQXVzd8OkaGxlbiIKK21zZ3N0ciAiSGludGVyZ3J1bmRmYXJiZSBhdXN3w6RobGVuIgogCi0jOiBnaXRrOjk0NTkKKyM6IGdpdGs6MTA0MTUKIG1zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgogbXNnc3RyICJTY2hyaWZ0YXJ0OiBLbGlja2VuIHp1bSBXw6RobGVuIgogCi0jOiBnaXRrOjk0NjEKKyM6IGdpdGs6MTA0MTcKIG1zZ2lkICJNYWluIGZvbnQiCiBtc2dzdHIgIlByb2dyYW1tc2NocmlmdGFydCIKIAotIzogZ2l0azo5NDYyCisjOiBnaXRrOjEwNDE4CiBtc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCi1tc2dzdHIgIlZlcmdsZWljaCIKK21zZ3N0ciAiU2NocmlmdGFydCBmw7xyIFZlcmdsZWljaCIKIAotIzogZ2l0azo5NDYzCisjOiBnaXRrOjEwNDE5CiBtc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKIG1zZ3N0ciAiQmVzY2hyaWZ0dW5nZW4iCiAKLSM6IGdpdGs6OTQ4OAorIzogZ2l0azoxMDQ0NgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCiBtc2dzdHIgIkdpdGs6IEZhcmJlIHfDpGhsZW4gZsO8ciAlcyIKIAotIzogZ2l0azo5OTM0CisjOiBnaXRrOjEwODkzCiBtc2dpZCAiIgogIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgogIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgpAQCAtMTA2NiwyNCArMTEzMiwyNCBAQAogIkdpdGsgbMOkdWZ0IG5pY2h0IG1pdCBkaWVzZXIgVmVyc2lvbiB2b24gVGNsL1RrLlxuIgogIkdpdGsgYmVuw7Z0aWd0IG1pbmRlc3RlbnMgVGNsL1RrIDguNC4iCiAKLSM6IGdpdGs6MTAwNDcKKyM6IGdpdGs6MTEwMjAKIG1zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgogbXNnc3RyICJLZWluIEdpdC1Qcm9qZWt0YXJjaGl2IGdlZnVuZGVuLiIKIAotIzogZ2l0azoxMDA1MQorIzogZ2l0azoxMTAyNAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCiBtc2dzdHIgIkdpdC1WZXJ6ZWljaG5pcyDCuyVzwqsgd3VyZGUgbmljaHQgZ2VmdW5kZW4uIgogCi0jOiBnaXRrOjEwMDk4CisjOiBnaXRrOjExMDcxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgogbXNnc3RyICJNZWhyZGV1dGlnZSBBbmdhYmUgwrslc8KrOiBTb3dvaGwgVmVyc2lvbiBhbHMgYXVjaCBEYXRlaW5hbWUgZXhpc3RpZXJ0LiIKIAotIzogZ2l0azoxMDExMAorIzogZ2l0azoxMTA4MwogbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCiBtc2dzdHIgIkZhbHNjaGUgS29tbWFuZG96ZWlsZW4tUGFyYW1ldGVyIGbDvHIgZ2l0azoiCiAKLSM6IGdpdGs6MTAxNzAKKyM6IGdpdGs6MTExNjcKIG1zZ2lkICJDb21tYW5kIGxpbmUiCiBtc2dzdHIgIktvbW1hbmRvemVpbGUiCmRpZmYgLS1naXQgYS9naXR3ZWIvUkVBRE1FIGIvZ2l0d2ViL1JFQURNRQppbmRleCA5MDU2ZDFlLi42NmM2YTkzIDEwMDY0NAotLS0gYS9naXR3ZWIvUkVBRE1FCisrKyBiL2dpdHdlYi9SRUFETUUKQEAgLTE2NSw2ICsxNjUsMTIgQEAKICAgIEZ1bGwgVVJMIGFuZCBhYnNvbHV0ZSBVUkwgb2YgZ2l0d2ViIHNjcmlwdDsKICAgIGluIGVhcmxpZXIgdmVyc2lvbnMgb2YgZ2l0d2ViIHlvdSBtaWdodCBoYXZlIG5lZWQgdG8gc2V0IHRob3NlCiAgICB2YXJpYWJsZXMsIG5vdyB0aGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0byBkbyBpdC4KKyAqICRiYXNlX3VybAorICAgQmFzZSBVUkwgZm9yIHJlbGF0aXZlIFVSTHMgaW4gcGFnZXMgZ2VuZXJhdGVkIGJ5IGdpdHdlYiwKKyAgIChlLmcuICRsb2dvLCAkZmF2aWNvbiwgQHN0eWxlc2hlZXRzIGlmIHRoZXkgYXJlIHJlbGF0aXZlIFVSTHMpLAorICAgbmVlZGVkIGFuZCB1c2VkIG9ubHkgZm9yIFVSTHMgd2l0aCBub25lbXB0eSBQQVRIX0lORk8gdmlhCisgICA8YmFzZSBocmVmPSIkYmFzZV91cmw+LiAgVXN1YWxseSBnaXR3ZWIgc2V0cyBpdHMgdmFsdWUgY29ycmVjdGx5LAorICAgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUsIGUuZy4gdG8gJG15X3VyaSBvciAiLyIuCiAgKiAkaG9tZV9saW5rCiAgICBUYXJnZXQgb2YgdGhlIGhvbWUgbGluayBvbiB0b3Agb2YgYWxsIHBhZ2VzICh0aGUgZmlyc3QgcGFydCBvZiB2aWV3CiAgICAiYnJlYWRjcnVtYnMiKS4gIEJ5IGRlZmF1bHQgc2V0IHRvIGFic29sdXRlIFVSSSBvZiBhIHBhZ2UgKCRteV91cmkpLgpkaWZmIC0tZ2l0IGEvZ2l0d2ViL2dpdHdlYi5jc3MgYi9naXR3ZWIvZ2l0d2ViLmNzcwppbmRleCBhMDFlYWM4Li5kMDViYzM3IDEwMDY0NAotLS0gYS9naXR3ZWIvZ2l0d2ViLmNzcworKysgYi9naXR3ZWIvZ2l0d2ViLmNzcwpAQCAtMjgsNiArMjgsMTAgQEAKIAlib3JkZXItd2lkdGg6IDBweDsKIH0KIAoraW1nLmF2YXRhciB7CisJdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKwogZGl2LnBhZ2VfaGVhZGVyIHsKIAloZWlnaHQ6IDI1cHg7CiAJcGFkZGluZzogOHB4OwpAQCAtMTMyLDExICsxMzYsMTQgQEAKIAlmb250LXN0eWxlOiBpdGFsaWM7CiB9CiAKKy5hdXRob3JfZGF0ZSwgLmF1dGhvciB7CisJZm9udC1zdHlsZTogaXRhbGljOworfQorCiBkaXYuYXV0aG9yX2RhdGUgewogCXBhZGRpbmc6IDhweDsKIAlib3JkZXI6IHNvbGlkICNkOWQ4ZDE7CiAJYm9yZGVyLXdpZHRoOiAwcHggMHB4IDFweCAwcHg7Ci0JZm9udC1zdHlsZTogaXRhbGljOwogfQogCiBhLmxpc3QgewpkaWZmIC0tZ2l0IGEvZ2l0d2ViL2dpdHdlYi5wZXJsIGIvZ2l0d2ViL2dpdHdlYi5wZXJsCmluZGV4IDNmOTkzNjEuLjJjYjgzMjcgMTAwNzU1Ci0tLSBhL2dpdHdlYi9naXR3ZWIucGVybAorKysgYi9naXR3ZWIvZ2l0d2ViLnBlcmwKQEAgLTk0LDcgKzk0LDcgQEAKICMgVVJJIGFuZCBsYWJlbCAodGl0bGUpIG9mIEdJVCBsb2dvIGxpbmsKICNvdXIgJGxvZ29fdXJsID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzLyI7CiAjb3VyICRsb2dvX2xhYmVsID0gImdpdCBkb2N1bWVudGF0aW9uIjsKLW91ciAkbG9nb191cmwgPSAiaHR0cDovL2dpdC5vci5jei8iOworb3VyICRsb2dvX3VybCA9ICJodHRwOi8vZ2l0LXNjbS5jb20vIjsKIG91ciAkbG9nb19sYWJlbCA9ICJnaXQgaG9tZXBhZ2UiOwogCiAjIHNvdXJjZSBvZiBwcm9qZWN0cyBsaXN0CkBAIC0xOTUsNiArMTk1LDE0IEBACiAJJ3gtemlwJyA9PiB1bmRlZiwgJycgPT4gdW5kZWYsCiApOwogCisjIFBpeGVsIHNpemVzIGZvciBpY29ucyBhbmQgYXZhdGFycy4gSWYgdGhlIGRlZmF1bHQgZm9udCBzaXplcyBvciBsaW5laGVpZ2h0cworIyBhcmUgY2hhbmdlZCwgaXQgbWF5IGJlIGFwcHJvcHJpYXRlIHRvIGNoYW5nZSB0aGVzZSB2YWx1ZXMgdG9vIHZpYQorIyAkR0lUV0VCX0NPTkZJRy4KK291ciAlYXZhdGFyX3NpemUgPSAoCisJJ2RlZmF1bHQnID0+IDE2LAorCSdkb3VibGUnICA9PiAzMgorKTsKKwogIyBZb3UgZGVmaW5lIHNpdGUtd2lkZSBmZWF0dXJlIGRlZmF1bHRzIGhlcmU7IG92ZXJyaWRlIHRoZW0gd2l0aAogIyAkR0lUV0VCX0NPTkZJRyBhcyBuZWNlc3NhcnkuCiBvdXIgJWZlYXR1cmUgPSAoCkBAIC0zNjUsNiArMzczLDI3IEBACiAJCSdzdWInID0+IFwmZmVhdHVyZV9wYXRjaGVzLAogCQknb3ZlcnJpZGUnID0+IDAsCiAJCSdkZWZhdWx0JyA9PiBbMTZdfSwKKworCSMgQXZhdGFyIHN1cHBvcnQuIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHZpZXdzIHN1Y2ggYXMKKwkjIHNob3J0bG9nIG9yIGNvbW1pdCB3aWxsIGRpc3BsYXkgYW4gYXZhdGFyIGFzc29jaWF0ZWQgd2l0aAorCSMgdGhlIGVtYWlsIG9mIHRoZSBjb21taXR0ZXIocykgYW5kL29yIGF1dGhvcihzKS4KKworCSMgQ3VycmVudGx5IGF2YWlsYWJsZSBwcm92aWRlcnMgYXJlIGdyYXZhdGFyIGFuZCBwaWNvbi4KKwkjIElmIGFuIHVua25vd24gcHJvdmlkZXIgaXMgc3BlY2lmaWVkLCB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZC4KKworCSMgR3JhdmF0YXIgZGVwZW5kcyBvbiBEaWdlc3Q6Ok1ENS4KKwkjIFBpY29uIGN1cnJlbnRseSByZWxpZXMgb24gdGhlIGluZGlhbmEuZWR1IGRhdGFiYXNlLgorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2F2YXRhcid9eydkZWZhdWx0J30gPSBbJzxwcm92aWRlcj4nXTsKKwkjIHdoZXJlIDxwcm92aWRlcj4gaXMgZWl0aGVyIGdyYXZhdGFyIG9yIHBpY29uLgorCSMgVG8gaGF2ZSBwcm9qZWN0IHNwZWNpZmljIGNvbmZpZyBlbmFibGUgb3ZlcnJpZGUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydhdmF0YXInfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcgZ2l0d2ViLmF2YXRhciA9IDxwcm92aWRlcj47CisJJ2F2YXRhcicgPT4geworCQknc3ViJyA9PiBcJmZlYXR1cmVfYXZhdGFyLAorCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbJyddfSwKICk7CiAKIHN1YiBnaXR3ZWJfZ2V0X2ZlYXR1cmUgewpAQCAtMzc2LDcgKzQwNSw3IEBACiAJCUB7JGZlYXR1cmV7JG5hbWV9eydkZWZhdWx0J319KTsKIAlpZiAoISRvdmVycmlkZSkgeyByZXR1cm4gQGRlZmF1bHRzOyB9CiAJaWYgKCFkZWZpbmVkICRzdWIpIHsKLQkJd2FybiAiZmVhdHVyZSAkbmFtZSBpcyBub3Qgb3ZlcnJpZGVhYmxlIjsKKwkJd2FybiAiZmVhdHVyZSAkbmFtZSBpcyBub3Qgb3ZlcnJpZGFibGUiOwogCQlyZXR1cm4gQGRlZmF1bHRzOwogCX0KIAlyZXR1cm4gJHN1Yi0+KEBkZWZhdWx0cyk7CkBAIC00MzMsNiArNDYyLDEyIEBACiAJcmV0dXJuICgkX1swXSk7CiB9CiAKK3N1YiBmZWF0dXJlX2F2YXRhciB7CisJbXkgQHZhbCA9IChnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCdhdmF0YXInKSk7CisKKwlyZXR1cm4gQHZhbCA/IEB2YWwgOiBAXzsKK30KKwogIyBjaGVja2luZyBIRUFEIGZpbGUgd2l0aCAtZSBpcyBmcmFnaWxlIGlmIHRoZSByZXBvc2l0b3J5IHdhcwogIyBpbml0aWFsaXplZCBsb25nIHRpbWUgYWdvIChpLmUuIHN5bWxpbmsgSEVBRCkgYW5kIHdhcyBwYWNrLXJlZidlZAogIyBhbmQgdGhlbiBwcnVuZWQuCkBAIC00NTgsOCArNDkzLDggQEAKIAlAZm10cyA9IG1hcCB7CiAJCWV4aXN0cyAka25vd25fc25hcHNob3RfZm9ybWF0X2FsaWFzZXN7JF99ID8KIAkJICAgICAgICRrbm93bl9zbmFwc2hvdF9mb3JtYXRfYWxpYXNlc3skX30gOiAkX30gQGZtdHM7Ci0JQGZtdHMgPSBncmVwKGV4aXN0cyAka25vd25fc25hcHNob3RfZm9ybWF0c3skX30sIEBmbXRzKTsKLQorCUBmbXRzID0gZ3JlcCB7CisJCWV4aXN0cyAka25vd25fc25hcHNob3RfZm9ybWF0c3skX30gfSBAZm10czsKIH0KIAogb3VyICRHSVRXRUJfQ09ORklHID0gJEVOVnsnR0lUV0VCX0NPTkZJRyd9IHx8ICIrK0dJVFdFQl9DT05GSUcrKyI7CkBAIC02OTAsOSArNzI1LDEwIEBACiAJCSMgZm9ybWF0IGtleSBpdHNlbGYsIHdpdGggYSBwcmVwZW5kZWQgZG90CiAJCXdoaWxlIChteSAoJGZtdCwgJG9wdCkgPSBlYWNoICVrbm93bl9zbmFwc2hvdF9mb3JtYXRzKSB7CiAJCQlteSAkaGFzaCA9ICRyZWZuYW1lOwotCQkJbXkgJHNmeDsKLQkJCSRoYXNoID1+IHMvKFxRJG9wdC0+eydzdWZmaXgnfVxFfFxRLiRmbXRcRSkkLy87Ci0JCQluZXh0IHVubGVzcyAkc2Z4ID0gJDE7CisJCQl1bmxlc3MgKCRoYXNoID1+IHMvKFxRJG9wdC0+eydzdWZmaXgnfVxFfFxRLiRmbXRcRSkkLy8pIHsKKwkJCQluZXh0OworCQkJfQorCQkJbXkgJHNmeCA9ICQxOwogCQkJIyBhIHZhbGlkIHN1ZmZpeCB3YXMgZm91bmQsIHNvIHNldCB0aGUgc25hcHNob3QgZm9ybWF0CiAJCQkjIGFuZCByZXNldCB0aGUgaGFzaCBwYXJhbWV0ZXIKIAkJCSRpbnB1dF9wYXJhbXN7J3NuYXBzaG90X2Zvcm1hdCd9ID0gJGZtdDsKQEAgLTgxMyw2ICs4NDksMTkgQEAKIG91ciBAc25hcHNob3RfZm10cyA9IGdpdHdlYl9nZXRfZmVhdHVyZSgnc25hcHNob3QnKTsKIEBzbmFwc2hvdF9mbXRzID0gZmlsdGVyX3NuYXBzaG90X2ZtdHMoQHNuYXBzaG90X2ZtdHMpOwogCisjIGNoZWNrIHRoYXQgdGhlIGF2YXRhciBmZWF0dXJlIGlzIHNldCB0byBhIGtub3duIHByb3ZpZGVyIG5hbWUsCisjIGFuZCBmb3IgZWFjaCBwcm92aWRlciBjaGVjayBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuCisjIGlmIHRoZSBwcm92aWRlciBuYW1lIGlzIGludmFsaWQgb3IgdGhlIGRlcGVuZGVuY2llcyBhcmUgbm90IG1ldCwKKyMgcmVzZXQgJGdpdF9hdmF0YXIgdG8gdGhlIGVtcHR5IHN0cmluZy4KK291ciAoJGdpdF9hdmF0YXIpID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdhdmF0YXInKTsKK2lmICgkZ2l0X2F2YXRhciBlcSAnZ3JhdmF0YXInKSB7CisJJGdpdF9hdmF0YXIgPSAnJyB1bmxlc3MgKGV2YWwgeyByZXF1aXJlIERpZ2VzdDo6TUQ1OyAxOyB9KTsKK30gZWxzaWYgKCRnaXRfYXZhdGFyIGVxICdwaWNvbicpIHsKKwkjIG5vIGRlcGVuZGVuY2llcworfSBlbHNlIHsKKwkkZ2l0X2F2YXRhciA9ICcnOworfQorCiAjIGRpc3BhdGNoCiBpZiAoIWRlZmluZWQgJGFjdGlvbikgewogCWlmIChkZWZpbmVkICRoYXNoKSB7CkBAIC04MjgsNyArODc3LDcgQEAKIGlmICghZGVmaW5lZCgkYWN0aW9uc3skYWN0aW9ufSkpIHsKIAlkaWVfZXJyb3IoNDAwLCAiVW5rbm93biBhY3Rpb24iKTsKIH0KLWlmICgkYWN0aW9uICF+IG0vXihvcG1sfHByb2plY3RfbGlzdHxwcm9qZWN0X2luZGV4KSQvICYmCitpZiAoJGFjdGlvbiAhfiBtL14oPzpvcG1sfHByb2plY3RfbGlzdHxwcm9qZWN0X2luZGV4KSQvICYmCiAgICAgISRwcm9qZWN0KSB7CiAJZGllX2Vycm9yKDQwMCwgIlByb2plY3QgbmVlZGVkIik7CiB9CkBAIC04MzgsNyArODg3LDcgQEAKICMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMjIGFjdGlvbiBsaW5rcwogCi1zdWIgaHJlZiAoJSkgeworc3ViIGhyZWYgewogCW15ICVwYXJhbXMgPSBAXzsKIAkjIGRlZmF1bHQgaXMgdG8gdXNlIC1hYnNvbHV0ZSB1cmwoKSBpLmUuICRteV91cmkKIAlteSAkaHJlZiA9ICRwYXJhbXN7LWZ1bGx9ID8gJG15X3VybCA6ICRteV91cmk7CkBAIC0xMDM2LDcgKzEwODUsNyBAQAogfQogCiAjIHJlcGxhY2UgaW52YWxpZCB1dGY4IGNoYXJhY3RlciB3aXRoIFNVQlNUSVRVVElPTiBzZXF1ZW5jZQotc3ViIGVzY19odG1sICgkOyUpIHsKK3N1YiBlc2NfaHRtbCB7CiAJbXkgJHN0ciA9IHNoaWZ0OwogCW15ICVvcHRzID0gQF87CiAKQEAgLTEyMzUsNyArMTI4NCw3IEBACiAJaWYgKCRjaG9wcGVkIGVxICRzdHIpIHsKIAkJcmV0dXJuIGVzY19odG1sKCRjaG9wcGVkKTsKIAl9IGVsc2UgewotCQkkc3RyID1+IHMvKFtbOmNudHJsOl1dKS8/L2c7CisJCSRzdHIgPX4gcy9bWzpjbnRybDpdXS8/L2c7CiAJCXJldHVybiAkY2dpLT5zcGFuKHstdGl0bGU9PiRzdHJ9LCBlc2NfaHRtbCgkY2hvcHBlZCkpOwogCX0KIH0KQEAgLTEyOTYsNyArMTM0NSw3IEBACiB9OwogCiAjIHN1Ym1vZHVsZS9zdWJwcm9qZWN0LCBhIGNvbW1pdCBvYmplY3QgcmVmZXJlbmNlCi1zdWIgU19JU0dJVExJTksoJCkgeworc3ViIFNfSVNHSVRMSU5LIHsKIAlteSAkbW9kZSA9IHNoaWZ0OwogCiAJcmV0dXJuICgoJG1vZGUgJiBTX0lGTVQpID09IFNfSUZHSVRMSU5LKQpAQCAtMTQ1OCw2ICsxNTA3LDcgQEAKIAkkZXh0cmEgPSAnJyB1bmxlc3MgZGVmaW5lZCgkZXh0cmEpOwogCiAJaWYgKGxlbmd0aCgkc2hvcnQpIDwgbGVuZ3RoKCRsb25nKSkgeworCQkkbG9uZyA9fiBzL1tbOmNudHJsOl1dLz8vZzsKIAkJcmV0dXJuICRjZ2ktPmEoey1ocmVmID0+ICRocmVmLCAtY2xhc3MgPT4gImxpc3Qgc3ViamVjdCIsCiAJCSAgICAgICAgICAgICAgICAtdGl0bGUgPT4gdG9fdXRmOCgkbG9uZyl9LAogCQkgICAgICAgZXNjX2h0bWwoJHNob3J0KSAuICRleHRyYSk7CkBAIC0xNDY3LDYgKzE1MTcsODIgQEAKIAl9CiB9CiAKKyMgUmF0aGVyIHRoYW4gcmVjb21wdXRpbmcgdGhlIHVybCBmb3IgYW4gZW1haWwgbXVsdGlwbGUgdGltZXMsIHdlIGNhY2hlIGl0CisjIGFmdGVyIHRoZSBmaXJzdCBoaXQuIFRoaXMgZ2l2ZXMgYSB2aXNpYmxlIGJlbmVmaXQgaW4gdmlld3Mgd2hlcmUgdGhlIGF2YXRhcgorIyBmb3IgdGhlIHNhbWUgZW1haWwgaXMgdXNlZCByZXBlYXRlZGx5IChlLmcuIHNob3J0bG9nKS4KKyMgVGhlIGNhY2hlIGlzIHNoYXJlZCBieSBhbGwgYXZhdGFyIGVuZ2luZXMgKGN1cnJlbnRseSBncmF2YXRhciBvbmx5KSwgd2hpY2gKKyMgYXJlIGZyZWUgdG8gdXNlIGl0IGFzIHByZWZlcnJlZC4gU2luY2Ugb25seSBvbmUgYXZhdGFyIGVuZ2luZSBpcyB1c2VkIGZvciBhbnkKKyMgZ2l2ZW4gcGFnZSwgdGhlcmUncyBubyByaXNrIGZvciBjYWNoZSBjb25mbGljdHMuCitvdXIgJWF2YXRhcl9jYWNoZSA9ICgpOworCisjIENvbXB1dGUgdGhlIHBpY29uIHVybCBmb3IgYSBnaXZlbiBlbWFpbCwgYnkgdXNpbmcgdGhlIHBpY29uIHNlYXJjaCBzZXJ2aWNlIG92ZXIgYXQKKyMgaHR0cDovL3d3dy5jcy5pbmRpYW5hLmVkdS9waWNvbnMvc2VhcmNoLmh0bWwKK3N1YiBwaWNvbl91cmwgeworCW15ICRlbWFpbCA9IGxjIHNoaWZ0OworCWlmICghJGF2YXRhcl9jYWNoZXskZW1haWx9KSB7CisJCW15ICgkdXNlciwgJGRvbWFpbikgPSBzcGxpdCgnQCcsICRlbWFpbCk7CisJCSRhdmF0YXJfY2FjaGV7JGVtYWlsfSA9CisJCQkiaHR0cDovL3d3dy5jcy5pbmRpYW5hLmVkdS9jZ2ktcHViL2tpbnpsZXIvcGljb25zZWFyY2guY2dpLyIgLgorCQkJIiRkb21haW4vJHVzZXIvIiAuCisJCQkidXNlcnMrZG9tYWlucyt1bmtub3duL3VwL3NpbmdsZSI7CisJfQorCXJldHVybiAkYXZhdGFyX2NhY2hleyRlbWFpbH07Cit9CisKKyMgQ29tcHV0ZSB0aGUgZ3JhdmF0YXIgdXJsIGZvciBhIGdpdmVuIGVtYWlsLCBpZiBpdCdzIG5vdCBpbiB0aGUgY2FjaGUgYWxyZWFkeS4KKyMgR3JhdmF0YXIgc3RvcmVzIG9ubHkgdGhlIHBhcnQgb2YgdGhlIFVSTCBiZWZvcmUgdGhlIHNpemUsIHNpbmNlIHRoYXQncyB0aGUKKyMgb25lIGNvbXB1dGF0aW9uYWxseSBtb3JlIGV4cGVuc2l2ZS4gVGhpcyBhbHNvIGFsbG93cyByZXVzZSBvZiB0aGUgY2FjaGUgZm9yCisjIGRpZmZlcmVudCBzaXplcyAoZm9yIHRoaXMgcGFydGljdWxhciBlbmdpbmUpLgorc3ViIGdyYXZhdGFyX3VybCB7CisJbXkgJGVtYWlsID0gbGMgc2hpZnQ7CisJbXkgJHNpemUgPSBzaGlmdDsKKwkkYXZhdGFyX2NhY2hleyRlbWFpbH0gfHw9CisJCSJodHRwOi8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIvIiAuCisJCQlEaWdlc3Q6Ok1ENTo6bWQ1X2hleCgkZW1haWwpIC4gIj9zPSI7CisJcmV0dXJuICRhdmF0YXJfY2FjaGV7JGVtYWlsfSAuICRzaXplOworfQorCisjIEluc2VydCBhbiBhdmF0YXIgZm9yIHRoZSBnaXZlbiAkZW1haWwgYXQgdGhlIGdpdmVuICRzaXplIGlmIHRoZSBmZWF0dXJlCisjIGlzIGVuYWJsZWQuCitzdWIgZ2l0X2dldF9hdmF0YXIgeworCW15ICgkZW1haWwsICVvcHRzKSA9IEBfOworCW15ICRwcmVfd2hpdGUgID0gKCRvcHRzey1wYWRfYmVmb3JlfSA/ICImbmJzcDsiIDogIiIpOworCW15ICRwb3N0X3doaXRlID0gKCRvcHRzey1wYWRfYWZ0ZXJ9ICA/ICImbmJzcDsiIDogIiIpOworCSRvcHRzey1zaXplfSB8fD0gJ2RlZmF1bHQnOworCW15ICRzaXplID0gJGF2YXRhcl9zaXpleyRvcHRzey1zaXplfX0gfHwgJGF2YXRhcl9zaXpleydkZWZhdWx0J307CisJbXkgJHVybCA9ICIiOworCWlmICgkZ2l0X2F2YXRhciBlcSAnZ3JhdmF0YXInKSB7CisJCSR1cmwgPSBncmF2YXRhcl91cmwoJGVtYWlsLCAkc2l6ZSk7CisJfSBlbHNpZiAoJGdpdF9hdmF0YXIgZXEgJ3BpY29uJykgeworCQkkdXJsID0gcGljb25fdXJsKCRlbWFpbCk7CisJfQorCSMgT3RoZXIgcHJvdmlkZXJzIGNhbiBiZSBhZGRlZCBieSBleHRlbmRpbmcgdGhlIGlmIGNoYWluLCBkZWZpbmluZyAkdXJsCisJIyBhcyBuZWVkZWQuIElmIG5vIHZhcmlhbnQgcHV0cyBzb21ldGhpbmcgaW4gJHVybCwgd2UgYXNzdW1lIGF2YXRhcnMKKwkjIGFyZSBjb21wbGV0ZWx5IGRpc2FibGVkL3VuYXZhaWxhYmxlLgorCWlmICgkdXJsKSB7CisJCXJldHVybiAkcHJlX3doaXRlIC4KKwkJICAgICAgICI8aW1nIHdpZHRoPVwiJHNpemVcIiAiIC4KKwkJICAgICAgICAgICAgImNsYXNzPVwiYXZhdGFyXCIgIiAuCisJCSAgICAgICAgICAgICJzcmM9XCIkdXJsXCIgIiAuCisJCQkgICAgImFsdD1cIlwiICIgLgorCQkgICAgICAgIi8+IiAuICRwb3N0X3doaXRlOworCX0gZWxzZSB7CisJCXJldHVybiAiIjsKKwl9Cit9CisKKyMgZm9ybWF0IHRoZSBhdXRob3IgbmFtZSBvZiB0aGUgZ2l2ZW4gY29tbWl0IHdpdGggdGhlIGdpdmVuIHRhZworIyB0aGUgYXV0aG9yIG5hbWUgaXMgY2hvcHBlZCBhbmQgZXNjYXBlZCBhY2NvcmRpbmcgdG8gdGhlIG90aGVyCisjIG9wdGlvbmFsIHBhcmFtZXRlcnMgKHNlZSBjaG9wX3N0cikuCitzdWIgZm9ybWF0X2F1dGhvcl9odG1sIHsKKwlteSAkdGFnID0gc2hpZnQ7CisJbXkgJGNvID0gc2hpZnQ7CisJbXkgJGF1dGhvciA9IGNob3BfYW5kX2VzY2FwZV9zdHIoJGNvLT57J2F1dGhvcl9uYW1lJ30sIEBfKTsKKwlyZXR1cm4gIjwkdGFnIGNsYXNzPVwiYXV0aG9yXCI+IiAuCisJICAgICAgIGdpdF9nZXRfYXZhdGFyKCRjby0+eydhdXRob3JfZW1haWwnfSwgLXBhZF9hZnRlciA9PiAxKSAuCisJICAgICAgICRhdXRob3IgLiAiPC8kdGFnPiI7Cit9CisKICMgZm9ybWF0IGdpdCBkaWZmIGhlYWRlciBsaW5lLCBpLmUuICJkaWZmIC0tKGdpdHxjb21iaW5lZHxjYykgLi4uIgogc3ViIGZvcm1hdF9naXRfZGlmZl9oZWFkZXJfbGluZSB7CiAJbXkgJGxpbmUgPSBzaGlmdDsKQEAgLTE4MzgsNyArMTk2NCw3IEBACiAjIFRyeSB0byBhdm9pZCB1c2luZyB0aGlzIGZ1bmN0aW9uIHdoZXJldmVyIHBvc3NpYmxlLgogc3ViIHF1b3RlX2NvbW1hbmQgewogCXJldHVybiBqb2luKCcgJywKLQkJICAgIG1hcCggeyBteSAkYSA9ICRfOyAkYSA9fiBzLyhbJyFdKS8nXFwkMScvZzsgIickYSciIH0gQF8gKSk7CisJCW1hcCB7IG15ICRhID0gJF87ICRhID1+IHMvKFsnIV0pLydcXCQxJy9nOyAiJyRhJyIgfSBAXyApOwogfQogCiAjIGdldCBIRUFEIHJlZiBvZiBnaXZlbiBwcm9qZWN0IGFzIGhhc2gKQEAgLTIwNTAsNyArMjE3Niw3IEBACiAJbXkgJHBhdGggPSBzaGlmdDsKIAogCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcGF0aCI7Ci0Jb3BlbiBteSAkZmQsICIkZ2l0X2Rpci9kZXNjcmlwdGlvbiIKKwlvcGVuIG15ICRmZCwgJzwnLCAiJGdpdF9kaXIvZGVzY3JpcHRpb24iCiAJCW9yIHJldHVybiBnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCdkZXNjcmlwdGlvbicpOwogCW15ICRkZXNjciA9IDwkZmQ+OwogCWNsb3NlICRmZDsKQEAgLTIwNjUsMTggKzIxOTEsMTcgQEAKIAlteSAkY3RhZ3MgPSB7fTsKIAogCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcGF0aCI7Ci0JdW5sZXNzIChvcGVuZGlyIEQsICIkZ2l0X2Rpci9jdGFncyIpIHsKLQkJcmV0dXJuICRjdGFnczsKLQl9Ci0JZm9yZWFjaCAoZ3JlcCB7IC1mICRfIH0gbWFwIHsgIiRnaXRfZGlyL2N0YWdzLyRfIiB9IHJlYWRkaXIoRCkpIHsKLQkJb3BlbiBDVCwgJF8gb3IgbmV4dDsKLQkJbXkgJHZhbCA9IDxDVD47CisJb3BlbmRpciBteSAkZGgsICIkZ2l0X2Rpci9jdGFncyIKKwkJb3IgcmV0dXJuICRjdGFnczsKKwlmb3JlYWNoIChncmVwIHsgLWYgJF8gfSBtYXAgeyAiJGdpdF9kaXIvY3RhZ3MvJF8iIH0gcmVhZGRpcigkZGgpKSB7CisJCW9wZW4gbXkgJGN0LCAnPCcsICRfIG9yIG5leHQ7CisJCW15ICR2YWwgPSA8JGN0PjsKIAkJY2hvbXAgJHZhbDsKLQkJY2xvc2UgQ1Q7CisJCWNsb3NlICRjdDsKIAkJbXkgJGN0YWcgPSAkXzsgJGN0YWcgPX4gcyMuKi8jIzsKIAkJJGN0YWdzLT57JGN0YWd9ID0gJHZhbDsKIAl9Ci0JY2xvc2VkaXIgRDsKKwljbG9zZWRpciAkZGg7CiAJJGN0YWdzOwogfQogCkBAIC0yMTI5LDcgKzIyNTQsNyBAQAogCW15ICRwYXRoID0gc2hpZnQ7CiAKIAkkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHBhdGgiOwotCW9wZW4gbXkgJGZkLCAiJGdpdF9kaXIvY2xvbmV1cmwiCisJb3BlbiBteSAkZmQsICc8JywgIiRnaXRfZGlyL2Nsb25ldXJsIgogCQlvciByZXR1cm4gd2FudGFycmF5ID8KIAkJQHsgY29uZmlnX3RvX211bHRpKGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ3VybCcpKSB9IDoKIAkJICAgY29uZmlnX3RvX211bHRpKGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ3VybCcpKTsKQEAgLTIxODcsNyArMjMxMiw3IEBACiAJCSMgJ2xpYnMlMkZrbGliYyUyRmtsaWJjLmdpdCBILitQZXRlcitBbnZpbicKIAkJIyAnbGludXglMkZob3RwbHVnJTJGdWRldi5naXQgR3JlZytLcm9haC1IYXJ0bWFuJwogCQlteSAlcGF0aHM7Ci0JCW9wZW4gbXkgKCRmZCksICRwcm9qZWN0c19saXN0IG9yIHJldHVybjsKKwkJb3BlbiBteSAkZmQsICc8JywgJHByb2plY3RzX2xpc3Qgb3IgcmV0dXJuOwogCVBST0pFQ1Q6CiAJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CiAJCQljaG9tcCAkbGluZTsKQEAgLTIyNTAsNyArMjM3NSw3IEBACiAJIyAnbGlicyUyRmtsaWJjJTJGa2xpYmMuZ2l0IEguK1BldGVyK0FudmluJwogCSMgJ2xpbnV4JTJGaG90cGx1ZyUyRnVkZXYuZ2l0IEdyZWcrS3JvYWgtSGFydG1hbicKIAlpZiAoLWYgJHByb2plY3RzX2xpc3QpIHsKLQkJb3BlbiAobXkgJGZkICwgJHByb2plY3RzX2xpc3QpOworCQlvcGVuKG15ICRmZCwgJzwnLCAkcHJvamVjdHNfbGlzdCk7CiAJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CiAJCQljaG9tcCAkbGluZTsKIAkJCW15ICgkcHIsICRvdykgPSBzcGxpdCAnICcsICRsaW5lOwpAQCAtMjM5OCw4ICsyNTIzLDE0IEBACiAJCQkkdGFneyduYW1lJ30gPSAkMTsKIAkJfSBlbHNpZiAoJGxpbmUgPX4gbS9edGFnZ2VyICguKikgKFswLTldKykgKC4qKSQvKSB7CiAJCQkkdGFneydhdXRob3InfSA9ICQxOwotCQkJJHRhZ3snZXBvY2gnfSA9ICQyOwotCQkJJHRhZ3sndHonfSA9ICQzOworCQkJJHRhZ3snYXV0aG9yX2Vwb2NoJ30gPSAkMjsKKwkJCSR0YWd7J2F1dGhvcl90eid9ID0gJDM7CisJCQlpZiAoJHRhZ3snYXV0aG9yJ30gPX4gbS9eKFtePF0rKSA8KFtePl0qKT4vKSB7CisJCQkJJHRhZ3snYXV0aG9yX25hbWUnfSAgPSAkMTsKKwkJCQkkdGFneydhdXRob3JfZW1haWwnfSA9ICQyOworCQkJfSBlbHNlIHsKKwkJCQkkdGFneydhdXRob3JfbmFtZSd9ID0gJHRhZ3snYXV0aG9yJ307CisJCQl9CiAJCX0gZWxzaWYgKCRsaW5lID1+IG0vLS1CRUdJTi8pIHsKIAkJCXB1c2ggQGNvbW1lbnQsICRsaW5lOwogCQkJbGFzdDsKQEAgLTI0MzksNyArMjU3MCw3IEBACiAJCX0gZWxzaWYgKCghZGVmaW5lZCAkd2l0aHBhcmVudHMpICYmICgkbGluZSA9fiBtL15wYXJlbnQgKFswLTlhLWZBLUZdezQwfSkkLykpIHsKIAkJCXB1c2ggQHBhcmVudHMsICQxOwogCQl9IGVsc2lmICgkbGluZSA9fiBtL15hdXRob3IgKC4qKSAoWzAtOV0rKSAoLiopJC8pIHsKLQkJCSRjb3snYXV0aG9yJ30gPSAkMTsKKwkJCSRjb3snYXV0aG9yJ30gPSB0b191dGY4KCQxKTsKIAkJCSRjb3snYXV0aG9yX2Vwb2NoJ30gPSAkMjsKIAkJCSRjb3snYXV0aG9yX3R6J30gPSAkMzsKIAkJCWlmICgkY297J2F1dGhvcid9ID1+IG0vXihbXjxdKykgPChbXj5dKik+LykgewpAQCAtMjQ0OSwxMCArMjU4MCw5IEBACiAJCQkJJGNveydhdXRob3JfbmFtZSd9ID0gJGNveydhdXRob3InfTsKIAkJCX0KIAkJfSBlbHNpZiAoJGxpbmUgPX4gbS9eY29tbWl0dGVyICguKikgKFswLTldKykgKC4qKSQvKSB7Ci0JCQkkY297J2NvbW1pdHRlcid9ID0gJDE7CisJCQkkY297J2NvbW1pdHRlcid9ID0gdG9fdXRmOCgkMSk7CiAJCQkkY297J2NvbW1pdHRlcl9lcG9jaCd9ID0gJDI7CiAJCQkkY297J2NvbW1pdHRlcl90eid9ID0gJDM7Ci0JCQkkY297J2NvbW1pdHRlcl9uYW1lJ30gPSAkY297J2NvbW1pdHRlcid9OwogCQkJaWYgKCRjb3snY29tbWl0dGVyJ30gPX4gbS9eKFtePF0rKSA8KFtePl0qKT4vKSB7CiAJCQkJJGNveydjb21taXR0ZXJfbmFtZSd9ICA9ICQxOwogCQkJCSRjb3snY29tbWl0dGVyX2VtYWlsJ30gPSAkMjsKQEAgLTI2MTUsNyArMjc0NSw3IEBACiB9CiAKICMgcGFyc2UgbGluZSBvZiBnaXQtbHMtdHJlZSBvdXRwdXQKLXN1YiBwYXJzZV9sc190cmVlX2xpbmUgKCQ7JSkgeworc3ViIHBhcnNlX2xzX3RyZWVfbGluZSB7CiAJbXkgJGxpbmUgPSBzaGlmdDsKIAlteSAlb3B0cyA9IEBfOwogCW15ICVyZXM7CkBAIC0yODA0LDE4ICsyOTM0LDE4IEBACiAJLXIgJG1pbWVtYXAgb3IgcmV0dXJuIHVuZGVmOwogCiAJbXkgJW1pbWVtYXA7Ci0Jb3BlbihNSU1FLCAkbWltZW1hcCkgb3IgcmV0dXJuIHVuZGVmOwotCXdoaWxlICg8TUlNRT4pIHsKKwlvcGVuKG15ICRtaCwgJzwnLCAkbWltZW1hcCkgb3IgcmV0dXJuIHVuZGVmOworCXdoaWxlICg8JG1oPikgewogCQluZXh0IGlmIG0vXiMvOyAjIHNraXAgY29tbWVudHMKLQkJbXkgKCRtaW1lLCAkZXh0cykgPSBzcGxpdCgvXHQrLyk7CisJCW15ICgkbWltZXR5cGUsICRleHRzKSA9IHNwbGl0KC9cdCsvKTsKIAkJaWYgKGRlZmluZWQgJGV4dHMpIHsKIAkJCW15IEBleHRzID0gc3BsaXQoL1xzKy8sICRleHRzKTsKIAkJCWZvcmVhY2ggbXkgJGV4dCAoQGV4dHMpIHsKLQkJCQkkbWltZW1hcHskZXh0fSA9ICRtaW1lOworCQkJCSRtaW1lbWFweyRleHR9ID0gJG1pbWV0eXBlOwogCQkJfQogCQl9CiAJfQotCWNsb3NlKE1JTUUpOworCWNsb3NlKCRtaCk7CiAKIAkkZmlsZW5hbWUgPX4gL1wuKFteLl0qKSQvOwogCXJldHVybiAkbWltZW1hcHskMX07CkBAIC0zMjEzLDIyICszMzQzLDU0IEBACiAJICAgICAgIlxuPC9kaXY+XG4iOwogfQogCi0jc3ViIGdpdF9wcmludF9hdXRob3JzaGlwIChcJSkgewotc3ViIGdpdF9wcmludF9hdXRob3JzaGlwIHsKLQlteSAkY28gPSBzaGlmdDsKLQotCW15ICVhZCA9IHBhcnNlX2RhdGUoJGNvLT57J2F1dGhvcl9lcG9jaCd9LCAkY28tPnsnYXV0aG9yX3R6J30pOwotCXByaW50ICI8ZGl2IGNsYXNzPVwiYXV0aG9yX2RhdGVcIj4iIC4KLQkgICAgICBlc2NfaHRtbCgkY28tPnsnYXV0aG9yX25hbWUnfSkgLgotCSAgICAgICIgWyRhZHsncmZjMjgyMid9IjsKLQlpZiAoJGFkeydob3VyX2xvY2FsJ30gPCA2KSB7CitzdWIgcHJpbnRfbG9jYWxfdGltZSB7CisJbXkgJWRhdGUgPSBAXzsKKwlpZiAoJGRhdGV7J2hvdXJfbG9jYWwnfSA8IDYpIHsKIAkJcHJpbnRmKCIgKDxzcGFuIGNsYXNzPVwiYXRuaWdodFwiPiUwMmQ6JTAyZDwvc3Bhbj4gJXMpIiwKLQkJICAgICAgICRhZHsnaG91cl9sb2NhbCd9LCAkYWR7J21pbnV0ZV9sb2NhbCd9LCAkYWR7J3R6X2xvY2FsJ30pOworCQkJJGRhdGV7J2hvdXJfbG9jYWwnfSwgJGRhdGV7J21pbnV0ZV9sb2NhbCd9LCAkZGF0ZXsndHpfbG9jYWwnfSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRmKCIgKCUwMmQ6JTAyZCAlcykiLAotCQkgICAgICAgJGFkeydob3VyX2xvY2FsJ30sICRhZHsnbWludXRlX2xvY2FsJ30sICRhZHsndHpfbG9jYWwnfSk7CisJCQkkZGF0ZXsnaG91cl9sb2NhbCd9LCAkZGF0ZXsnbWludXRlX2xvY2FsJ30sICRkYXRleyd0el9sb2NhbCd9KTsKIAl9Ci0JcHJpbnQgIl08L2Rpdj5cbiI7Cit9CisKKyMgT3V0cHV0cyB0aGUgYXV0aG9yIG5hbWUgYW5kIGRhdGUgaW4gbG9uZyBmb3JtCitzdWIgZ2l0X3ByaW50X2F1dGhvcnNoaXAgeworCW15ICRjbyA9IHNoaWZ0OworCW15ICVvcHRzID0gQF87CisJbXkgJHRhZyA9ICRvcHRzey10YWd9IHx8ICdkaXYnOworCisJbXkgJWFkID0gcGFyc2VfZGF0ZSgkY28tPnsnYXV0aG9yX2Vwb2NoJ30sICRjby0+eydhdXRob3JfdHonfSk7CisJcHJpbnQgIjwkdGFnIGNsYXNzPVwiYXV0aG9yX2RhdGVcIj4iIC4KKwkgICAgICBlc2NfaHRtbCgkY28tPnsnYXV0aG9yX25hbWUnfSkgLgorCSAgICAgICIgWyRhZHsncmZjMjgyMid9IjsKKwlwcmludF9sb2NhbF90aW1lKCVhZCkgaWYgKCRvcHRzey1sb2NhbHRpbWV9KTsKKwlwcmludCAiXSIgLiBnaXRfZ2V0X2F2YXRhcigkY28tPnsnYXV0aG9yX2VtYWlsJ30sIC1wYWRfYmVmb3JlID0+IDEpCisJCSAgLiAiPC8kdGFnPlxuIjsKK30KKworIyBPdXRwdXRzIHRhYmxlIHJvd3MgY29udGFpbmluZyB0aGUgZnVsbCBhdXRob3Igb3IgY29tbWl0dGVyIGluZm9ybWF0aW9uLAorIyBpbiB0aGUgZm9ybWF0IGV4cGVjdGVkIGZvciAnY29tbWl0JyB2aWV3ICgmIHNpbWlsaWEpLgorIyBQYXJhbWV0ZXJzIGFyZSBhIGNvbW1pdCBoYXNoIHJlZmVyZW5jZSwgZm9sbG93ZWQgYnkgdGhlIGxpc3Qgb2YgcGVvcGxlCisjIHRvIG91dHB1dCBpbmZvcm1hdGlvbiBmb3IuIElmIHRoZSBsaXN0IGlzIGVtcHR5IGl0IGRlZmFsdHMgdG8gYm90aAorIyBhdXRob3IgYW5kIGNvbW1pdHRlci4KK3N1YiBnaXRfcHJpbnRfYXV0aG9yc2hpcF9yb3dzIHsKKwlteSAkY28gPSBzaGlmdDsKKwkjIHRvbyBiYWQgd2UgY2FuJ3QgdXNlIEBwZW9wbGUgPSBAXyB8fCAoJ2F1dGhvcicsICdjb21taXR0ZXInKQorCW15IEBwZW9wbGUgPSBAXzsKKwlAcGVvcGxlID0gKCdhdXRob3InLCAnY29tbWl0dGVyJykgdW5sZXNzIEBwZW9wbGU7CisJZm9yZWFjaCBteSAkd2hvIChAcGVvcGxlKSB7CisJCW15ICV3ZCA9IHBhcnNlX2RhdGUoJGNvLT57IiR7d2hvfV9lcG9jaCJ9LCAkY28tPnsiJHt3aG99X3R6In0pOworCQlwcmludCAiPHRyPjx0ZD4kd2hvPC90ZD48dGQ+IiAuIGVzY19odG1sKCRjby0+eyR3aG99KSAuICI8L3RkPiIgLgorCQkgICAgICAiPHRkIHJvd3NwYW49XCIyXCI+IiAuCisJCSAgICAgIGdpdF9nZXRfYXZhdGFyKCRjby0+eyIke3dob31fZW1haWwifSwgLXNpemUgPT4gJ2RvdWJsZScpIC4KKwkJICAgICAgIjwvdGQ+PC90cj5cbiIgLgorCQkgICAgICAiPHRyPiIgLgorCQkgICAgICAiPHRkPjwvdGQ+PHRkPiAkd2R7J3JmYzI4MjInfSI7CisJCXByaW50X2xvY2FsX3RpbWUoJXdkKTsKKwkJcHJpbnQgIjwvdGQ+IiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CiB9CiAKIHN1YiBnaXRfcHJpbnRfcGFnZV9wYXRoIHsKQEAgLTMyNjksOCArMzQzMSw3IEBACiAJcHJpbnQgIjxici8+PC9kaXY+XG4iOwogfQogCi0jIHN1YiBnaXRfcHJpbnRfbG9nIChcQDslKSB7Ci1zdWIgZ2l0X3ByaW50X2xvZyAoJDslKSB7CitzdWIgZ2l0X3ByaW50X2xvZyB7CiAJbXkgJGxvZyA9IHNoaWZ0OwogCW15ICVvcHRzID0gQF87CiAKQEAgLTMzMjgsNyArMzQ4OSw3IEBACiAJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImNhdC1maWxlIiwgImJsb2IiLCAkaGFzaAogCQlvciByZXR1cm47CiAJewotCQlsb2NhbCAkLzsKKwkJbG9jYWwgJC8gPSB1bmRlZjsKIAkJJGxpbmtfdGFyZ2V0ID0gPCRmZD47CiAJfQogCWNsb3NlICRmZApAQCAtMzM0MSwxMCArMzUwMiw3IEBACiAjIHJldHVybiB0YXJnZXQgb2YgbGluayByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5ICh0b3AgdHJlZSk7CiAjIHJldHVybiB1bmRlZiBpZiBpdCBpcyBub3QgcG9zc2libGUgKGluY2x1ZGluZyBhYnNvbHV0ZSBsaW5rcykuCiBzdWIgbm9ybWFsaXplX2xpbmtfdGFyZ2V0IHsKLQlteSAoJGxpbmtfdGFyZ2V0LCAkYmFzZWRpciwgJGhhc2hfYmFzZSkgPSBAXzsKLQotCSMgd2UgY2FuIG5vcm1hbGl6ZSBzeW1saW5rIHRhcmdldCBvbmx5IGlmICRoYXNoX2Jhc2UgaXMgcHJvdmlkZWQKLQlyZXR1cm4gdW5sZXNzICRoYXNoX2Jhc2U7CisJbXkgKCRsaW5rX3RhcmdldCwgJGJhc2VkaXIpID0gQF87CiAKIAkjIGFic29sdXRlIHN5bWxpbmtzIChiZWdpbm5pbmcgd2l0aCAnLycpIGNhbm5vdCBiZSBub3JtYWxpemVkCiAJcmV0dXJuIGlmIChzdWJzdHIoJGxpbmtfdGFyZ2V0LCAwLCAxKSBlcSAnLycpOwpAQCAtMzQwMCw3ICszNTU4LDcgQEAKIAkJaWYgKFNfSVNMTksob2N0ICR0LT57J21vZGUnfSkpIHsKIAkJCW15ICRsaW5rX3RhcmdldCA9IGdpdF9nZXRfbGlua190YXJnZXQoJHQtPnsnaGFzaCd9KTsKIAkJCWlmICgkbGlua190YXJnZXQpIHsKLQkJCQlteSAkbm9ybV90YXJnZXQgPSBub3JtYWxpemVfbGlua190YXJnZXQoJGxpbmtfdGFyZ2V0LCAkYmFzZWRpciwgJGhhc2hfYmFzZSk7CisJCQkJbXkgJG5vcm1fdGFyZ2V0ID0gbm9ybWFsaXplX2xpbmtfdGFyZ2V0KCRsaW5rX3RhcmdldCwgJGJhc2VkaXIpOwogCQkJCWlmIChkZWZpbmVkICRub3JtX3RhcmdldCkgewogCQkJCQlwcmludCAiIC0+ICIgLgogCQkJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Im9iamVjdCIsIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwKQEAgLTM5OTMsNyArNDE1MSw3IEBACiAJCQkgICAgKCRwbmFtZSAhfiAvXC8kLykgJiYKIAkJCSAgICAoLWQgIiRwcm9qZWN0cm9vdC8kcG5hbWUiKSkgewogCQkJCSRwci0+eydmb3Jrcyd9ID0gIi1kICRwcm9qZWN0cm9vdC8kcG5hbWUiOwotCQkJfQllbHNlIHsKKwkJCX0gZWxzZSB7CiAJCQkJJHByLT57J2ZvcmtzJ30gPSAwOwogCQkJfQogCQl9CkBAIC00MTQ2LDExICs0MzA0LDkgQEAKIAkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKIAkJfQogCQkkYWx0ZXJuYXRlIF49IDE7Ci0JCW15ICRhdXRob3IgPSBjaG9wX2FuZF9lc2NhcGVfc3RyKCRjb3snYXV0aG9yX25hbWUnfSwgMTApOwogCQkjIGdpdF9zdW1tYXJ5KCkgdXNlZCBwcmludCAiPHRkPjxpPiRjb3snYWdlX3N0cmluZyd9PC9pPjwvdGQ+XG4iIC4KIAkJcHJpbnQgIjx0ZCB0aXRsZT1cIiRjb3snYWdlX3N0cmluZ19hZ2UnfVwiPjxpPiRjb3snYWdlX3N0cmluZ19kYXRlJ308L2k+PC90ZD5cbiIgLgotCQkgICAgICAiPHRkPjxpPiIgLiAkYXV0aG9yIC4gIjwvaT48L3RkPlxuIiAuCi0JCSAgICAgICI8dGQ+IjsKKwkJICAgICAgZm9ybWF0X2F1dGhvcl9odG1sKCd0ZCcsIFwlY28sIDEwKSAuICI8dGQ+IjsKIAkJcHJpbnQgZm9ybWF0X3N1YmplY3RfaHRtbCgkY297J3RpdGxlJ30sICRjb3sndGl0bGVfc2hvcnQnfSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpLCAkcmVmKTsKIAkJcHJpbnQgIjwvdGQ+XG4iIC4KQEAgLTQxOTcsMTEgKzQzNTMsOSBAQAogCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOwogCQl9CiAJCSRhbHRlcm5hdGUgXj0gMTsKLQkjIHNob3J0bG9nIHVzZXMgICAgICBjaG9wX3N0cigkY297J2F1dGhvcl9uYW1lJ30sIDEwKQotCQlteSAkYXV0aG9yID0gY2hvcF9hbmRfZXNjYXBlX3N0cigkY297J2F1dGhvcl9uYW1lJ30sIDE1LCAzKTsKIAkJcHJpbnQgIjx0ZCB0aXRsZT1cIiRjb3snYWdlX3N0cmluZ19hZ2UnfVwiPjxpPiRjb3snYWdlX3N0cmluZ19kYXRlJ308L2k+PC90ZD5cbiIgLgotCQkgICAgICAiPHRkPjxpPiIgLiAkYXV0aG9yIC4gIjwvaT48L3RkPlxuIiAuCi0JCSAgICAgICI8dGQ+IjsKKwkjIHNob3J0bG9nOiAgIGZvcm1hdF9hdXRob3JfaHRtbCgndGQnLCBcJWNvLCAxMCkKKwkJICAgICAgZm9ybWF0X2F1dGhvcl9odG1sKCd0ZCcsIFwlY28sIDE1LCAzKSAuICI8dGQ+IjsKIAkJIyBvcmlnaW5hbGx5IGdpdF9oaXN0b3J5IHVzZWQgY2hvcF9zdHIoJGNveyd0aXRsZSd9LCA1MCkKIAkJcHJpbnQgZm9ybWF0X3N1YmplY3RfaHRtbCgkY297J3RpdGxlJ30sICRjb3sndGl0bGVfc2hvcnQnfSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpLCAkcmVmKTsKQEAgLTQzNTQsOSArNDUwOCw4IEBACiAJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CiAJCX0KIAkJJGFsdGVybmF0ZSBePSAxOwotCQlteSAkYXV0aG9yID0gY2hvcF9hbmRfZXNjYXBlX3N0cigkY297J2F1dGhvcl9uYW1lJ30sIDE1LCA1KTsKIAkJcHJpbnQgIjx0ZCB0aXRsZT1cIiRjb3snYWdlX3N0cmluZ19hZ2UnfVwiPjxpPiRjb3snYWdlX3N0cmluZ19kYXRlJ308L2k+PC90ZD5cbiIgLgotCQkgICAgICAiPHRkPjxpPiIgLiAkYXV0aG9yIC4gIjwvaT48L3RkPlxuIiAuCisJCSAgICAgIGZvcm1hdF9hdXRob3JfaHRtbCgndGQnLCBcJWNvLCAxNSwgNSkgLgogCQkgICAgICAiPHRkPiIgLgogCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb3snaWQnfSksCiAJCSAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCBzdWJqZWN0In0sCkBAIC00NTkwLDExICs0NzQzLDcgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWd7J3R5cGUnfSkgLiAiPC90ZD5cbiIgLgogCSAgICAgICI8L3RyPlxuIjsKIAlpZiAoZGVmaW5lZCgkdGFneydhdXRob3InfSkpIHsKLQkJbXkgJWFkID0gcGFyc2VfZGF0ZSgkdGFneydlcG9jaCd9LCAkdGFneyd0eid9KTsKLQkJcHJpbnQgIjx0cj48dGQ+YXV0aG9yPC90ZD48dGQ+IiAuIGVzY19odG1sKCR0YWd7J2F1dGhvcid9KSAuICI8L3RkPjwvdHI+XG4iOwotCQlwcmludCAiPHRyPjx0ZD48L3RkPjx0ZD4iIC4gJGFkeydyZmMyODIyJ30gLgotCQkJc3ByaW50ZigiICglMDJkOiUwMmQgJXMpIiwgJGFkeydob3VyX2xvY2FsJ30sICRhZHsnbWludXRlX2xvY2FsJ30sICRhZHsndHpfbG9jYWwnfSkgLgotCQkJIjwvdGQ+PC90cj5cbiI7CisJCWdpdF9wcmludF9hdXRob3JzaGlwX3Jvd3MoXCV0YWcsICdhdXRob3InKTsKIAl9CiAJcHJpbnQgIjwvdGFibGU+XG5cbiIgLgogCSAgICAgICI8L2Rpdj5cbiI7CkBAIC00ODAzLDExICs0OTUyLDEwIEBACiAJCS1jb250ZW50X2Rpc3Bvc2l0aW9uID0+CiAJCQkoJHNhbmRib3ggPyAnYXR0YWNobWVudCcgOiAnaW5saW5lJykKIAkJCS4gJzsgZmlsZW5hbWU9IicgLiAkc2F2ZV9hcyAuICciJyk7Ci0JdW5kZWYgJC87CisJbG9jYWwgJC8gPSB1bmRlZjsKIAliaW5tb2RlIFNURE9VVCwgJzpyYXcnOwogCXByaW50IDwkZmQ+OwogCWJpbm1vZGUgU1RET1VULCAnOnV0ZjgnOyAjIGFzIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGdpdHdlYi5jZ2kKLQkkLyA9ICJcbiI7CiAJY2xvc2UgJGZkOwogfQogCkBAIC00OTA5LDEyICs1MDU3LDE2IEBACiAJCX0KIAl9CiAJZGllX2Vycm9yKDQwNCwgIk5vIHN1Y2ggdHJlZSIpIHVubGVzcyBkZWZpbmVkKCRoYXNoKTsKLQkkLyA9ICJcMCI7Ci0Jb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImxzLXRyZWUiLCAnLXonLCAkaGFzaAotCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtbHMtdHJlZSBmYWlsZWQiKTsKLQlteSBAZW50cmllcyA9IG1hcCB7IGNob21wOyAkXyB9IDwkZmQ+OwotCWNsb3NlICRmZCBvciBkaWVfZXJyb3IoNDA0LCAiUmVhZGluZyB0cmVlIGZhaWxlZCIpOwotCSQvID0gIlxuIjsKKworCW15IEBlbnRyaWVzID0gKCk7CisJeworCQlsb2NhbCAkLyA9ICJcMCI7CisJCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJscy10cmVlIiwgJy16JywgJGhhc2gKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1scy10cmVlIGZhaWxlZCIpOworCQlAZW50cmllcyA9IG1hcCB7IGNob21wOyAkXyB9IDwkZmQ+OworCQljbG9zZSAkZmQKKwkJCW9yIGRpZV9lcnJvcig0MDQsICJSZWFkaW5nIHRyZWUgZmFpbGVkIik7CisJfQogCiAJbXkgJHJlZnMgPSBnaXRfZ2V0X3JlZmVyZW5jZXMoKTsKIAlteSAkcmVmID0gZm9ybWF0X3JlZl9tYXJrZXIoJHJlZnMsICRoYXNoX2Jhc2UpOwpAQCAtNTA5NSw5ICs1MjQ3LDkgQEAKIAkJICAgICAgIiB8ICIgLgogCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kY29tbWl0LCBoYXNoX2Jhc2U9PiRjb21taXQpfSwgInRyZWUiKSAuCiAJCSAgICAgICI8YnIvPlxuIiAuCi0JCSAgICAgICI8L2Rpdj5cbiIgLgotCQkgICAgICAiPGk+IiAuIGVzY19odG1sKCRjb3snYXV0aG9yX25hbWUnfSkgLiAgIiBbJGFkeydyZmMyODIyJ31dPC9pPjxici8+XG4iIC4KIAkJICAgICAgIjwvZGl2PlxuIjsKKwkJICAgICAgZ2l0X3ByaW50X2F1dGhvcnNoaXAoXCVjbywgLXRhZyA9PiAnc3BhbicpOworCQkgICAgICBwcmludCAiPGJyLz5cbjwvZGl2PlxuIjsKIAogCQlwcmludCAiPGRpdiBjbGFzcz1cImxvZ19ib2R5XCI+XG4iOwogCQlnaXRfcHJpbnRfbG9nKCRjb3snY29tbWVudCd9LCAtZmluYWxfZW1wdHlfbGluZT0+IDEpOwpAQCAtNTExNiw4ICs1MjY4LDYgQEAKIAkkaGFzaCB8fD0gJGhhc2hfYmFzZSB8fCAiSEVBRCI7CiAJbXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoKQogCSAgICBvciBkaWVfZXJyb3IoNDA0LCAiVW5rbm93biBjb21taXQgb2JqZWN0Iik7Ci0JbXkgJWFkID0gcGFyc2VfZGF0ZSgkY297J2F1dGhvcl9lcG9jaCd9LCAkY297J2F1dGhvcl90eid9KTsKLQlteSAlY2QgPSBwYXJzZV9kYXRlKCRjb3snY29tbWl0dGVyX2Vwb2NoJ30sICRjb3snY29tbWl0dGVyX3R6J30pOwogCiAJbXkgJHBhcmVudCAgPSAkY297J3BhcmVudCd9OwogCW15ICRwYXJlbnRzID0gJGNveydwYXJlbnRzJ307ICMgbGlzdHJlZgpAQCAtNTE4NCwyMiArNTMzNCw3IEBACiAJfQogCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVfdGV4dFwiPlxuIiAuCiAJICAgICAgIjx0YWJsZSBjbGFzcz1cIm9iamVjdF9oZWFkZXJcIj5cbiI7Ci0JcHJpbnQgIjx0cj48dGQ+YXV0aG9yPC90ZD48dGQ+IiAuIGVzY19odG1sKCRjb3snYXV0aG9yJ30pIC4gIjwvdGQ+PC90cj5cbiIuCi0JICAgICAgIjx0cj4iIC4KLQkgICAgICAiPHRkPjwvdGQ+PHRkPiAkYWR7J3JmYzI4MjInfSI7Ci0JaWYgKCRhZHsnaG91cl9sb2NhbCd9IDwgNikgewotCQlwcmludGYoIiAoPHNwYW4gY2xhc3M9XCJhdG5pZ2h0XCI+JTAyZDolMDJkPC9zcGFuPiAlcykiLAotCQkgICAgICAgJGFkeydob3VyX2xvY2FsJ30sICRhZHsnbWludXRlX2xvY2FsJ30sICRhZHsndHpfbG9jYWwnfSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmKCIgKCUwMmQ6JTAyZCAlcykiLAotCQkgICAgICAgJGFkeydob3VyX2xvY2FsJ30sICRhZHsnbWludXRlX2xvY2FsJ30sICRhZHsndHpfbG9jYWwnfSk7Ci0JfQotCXByaW50ICI8L3RkPiIgLgotCSAgICAgICI8L3RyPlxuIjsKLQlwcmludCAiPHRyPjx0ZD5jb21taXR0ZXI8L3RkPjx0ZD4iIC4gZXNjX2h0bWwoJGNveydjb21taXR0ZXInfSkgLiAiPC90ZD48L3RyPlxuIjsKLQlwcmludCAiPHRyPjx0ZD48L3RkPjx0ZD4gJGNkeydyZmMyODIyJ30iIC4KLQkgICAgICBzcHJpbnRmKCIgKCUwMmQ6JTAyZCAlcykiLCAkY2R7J2hvdXJfbG9jYWwnfSwgJGNkeydtaW51dGVfbG9jYWwnfSwgJGNkeyd0el9sb2NhbCd9KSAuCi0JICAgICAgIjwvdGQ+PC90cj5cbiI7CisJZ2l0X3ByaW50X2F1dGhvcnNoaXBfcm93cyhcJWNvKTsKIAlwcmludCAiPHRyPjx0ZD5jb21taXQ8L3RkPjx0ZCBjbGFzcz1cInNoYTFcIj4kY297J2lkJ308L3RkPjwvdHI+XG4iOwogCXByaW50ICI8dHI+IiAuCiAJICAgICAgIjx0ZD50cmVlPC90ZD4iIC4KQEAgLTU1ODAsNyArNTcxNSwxMSBAQAogCQlnaXRfaGVhZGVyX2h0bWwodW5kZWYsICRleHBpcmVzKTsKIAkJZ2l0X3ByaW50X3BhZ2VfbmF2KCdjb21taXRkaWZmJywnJywgJGhhc2gsJGNveyd0cmVlJ30sJGhhc2gsICRmb3JtYXRzX25hdik7CiAJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gJHJlZiwgJGhhc2gpOwotCQlnaXRfcHJpbnRfYXV0aG9yc2hpcChcJWNvKTsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJ0aXRsZV90ZXh0XCI+XG4iIC4KKwkJICAgICAgIjx0YWJsZSBjbGFzcz1cIm9iamVjdF9oZWFkZXJcIj5cbiI7CisJCWdpdF9wcmludF9hdXRob3JzaGlwX3Jvd3MoXCVjbyk7CisJCXByaW50ICI8L3RhYmxlPiIuCisJCSAgICAgICI8L2Rpdj5cbiI7CiAJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9ib2R5XCI+XG4iOwogCQlpZiAoQHskY297J2NvbW1lbnQnfX0gPiAxKSB7CiAJCQlwcmludCAiPGRpdiBjbGFzcz1cImxvZ1wiPlxuIjsKQEAgLTU4MDksNyArNTk0OCw3IEBACiAKIAkJcHJpbnQgIjx0YWJsZSBjbGFzcz1cInBpY2theGUgc2VhcmNoXCI+XG4iOwogCQlteSAkYWx0ZXJuYXRlID0gMTsKLQkJJC8gPSAiXG4iOworCQlsb2NhbCAkLyA9ICJcbiI7CiAJCW9wZW4gbXkgJGZkLCAnLXwnLCBnaXRfY21kKCksICctLW5vLXBhZ2VyJywgJ2xvZycsIEBkaWZmX29wdHMsCiAJCQknLS1wcmV0dHk9Zm9ybWF0OiVIJywgJy0tbm8tYWJicmV2JywgJy0tcmF3JywgIi1TJHNlYXJjaHRleHQiLAogCQkJKCRzZWFyY2hfdXNlX3JlZ2V4cCA/ICctLXBpY2theGUtcmVnZXgnIDogKCkpOwpAQCAtNTg3OSw3ICs2MDE4LDcgQEAKIAkJcHJpbnQgIjx0YWJsZSBjbGFzcz1cImdyZXBfc2VhcmNoXCI+XG4iOwogCQlteSAkYWx0ZXJuYXRlID0gMTsKIAkJbXkgJG1hdGNoZXMgPSAwOwotCQkkLyA9ICJcbiI7CisJCWxvY2FsICQvID0gIlxuIjsKIAkJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgJ2dyZXAnLCAnLW4nLAogCQkJJHNlYXJjaF91c2VfcmVnZXhwID8gKCctRScsICctaScpIDogJy1GJywKIAkJCSRzZWFyY2h0ZXh0LCAkY297J3RyZWUnfTsKQEAgLTYyODIsNyArNjQyMSw3IEBACiAJIyBlbmQgb2YgZmVlZAogCWlmICgkZm9ybWF0IGVxICdyc3MnKSB7CiAJCXByaW50ICI8L2NoYW5uZWw+XG48L3Jzcz5cbiI7Ci0JfQllbHNpZiAoJGZvcm1hdCBlcSAnYXRvbScpIHsKKwl9IGVsc2lmICgkZm9ybWF0IGVxICdhdG9tJykgewogCQlwcmludCAiPC9mZWVkPlxuIjsKIAl9CiB9CmRpZmYgLS1naXQgYS9ncmFwaC5jIGIvZ3JhcGguYwppbmRleCAwNmZiZWI2Li5lNDY2NzcwIDEwMDY0NAotLS0gYS9ncmFwaC5jCisrKyBiL2dyYXBoLmMKQEAgLTQ3LDIwICs0Nyw2IEBACiAgKiAtIExpbWl0IHRoZSBudW1iZXIgb2YgY29sdW1ucywgc2ltaWxhciB0byB0aGUgd2F5IGdpdGsgZG9lcy4KICAqICAgSWYgd2UgcmVhY2ggbW9yZSB0aGFuIGEgc3BlY2lmaWVkIG51bWJlciBvZiBjb2x1bW5zLCBvbWl0CiAgKiAgIHNlY3Rpb25zIG9mIHNvbWUgY29sdW1ucy4KLSAqCi0gKiAtIFRoZSBvdXRwdXQgZHVyaW5nIHRoZSBHUkFQSF9QUkVfQ09NTUlUIGFuZCBHUkFQSF9DT0xMQVBTSU5HIHN0YXRlcwotICogICBjb3VsZCBiZSBtYWRlIG1vcmUgY29tcGFjdCBieSBwcmludGluZyBob3Jpem9udGFsIGxpbmVzLCBpbnN0ZWFkIG9mCi0gKiAgIGxvbmcgZGlhZ29uYWwgbGluZXMuICBGb3IgZXhhbXBsZSwgZHVyaW5nIGNvbGxhcHNpbmcsIHNvbWV0aGluZyBsaWtlCi0gKiAgIHRoaXM6ICAgICAgICAgIGluc3RlYWQgb2YgdGhpczoKLSAqICAgfCB8IHwgfCB8ICAgICAgfCB8IHwgfCB8Ci0gKiAgIHwgfF98X3wvICAgICAgIHwgfCB8IHwvCi0gKiAgIHwvfCB8IHwgICAgICAgIHwgfCB8L3wKLSAqICAgfCB8IHwgfCAgICAgICAgfCB8L3wgfAotICogICAgICAgICAgICAgICAgICB8L3wgfCB8Ci0gKiAgICAgICAgICAgICAgICAgIHwgfCB8IHwKLSAqCi0gKiAgIElmIHRoZXJlIGFyZSBzZXZlcmFsIHBhcmFsbGVsIGRpYWdvbmFsIGxpbmVzLCB0aGV5IHdpbGwgbmVlZCB0byBiZQotICogICByZXBsYWNlZCB3aXRoIGhvcml6b250YWwgbGluZXMgb24gc3Vic2VxdWVudCByb3dzLgogICovCiAKIHN0cnVjdCBjb2x1bW4gewpAQCAtOTA3LDcgKzg5Myw3IEBACiAJCWlmIChncmFwaC0+bmV3X2NvbHVtbnNbaV0uY29tbWl0ID09IGNvbW1pdCkKIAkJCXJldHVybiAmZ3JhcGgtPm5ld19jb2x1bW5zW2ldOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3Bvc3RfbWVyZ2VfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCkBAIC05ODIsNiArOTY4LDkgQEAKIHsKIAlpbnQgaTsKIAlpbnQgKnRtcF9tYXBwaW5nOworCXNob3J0IHVzZWRfaG9yaXpvbnRhbCA9IDA7CisJaW50IGhvcml6b250YWxfZWRnZSA9IC0xOworCWludCBob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ID0gLTE7CiAKIAkvKgogCSAqIENsZWFyIG91dCB0aGUgbmV3X21hcHBpbmcgYXJyYXkKQEAgLTEwMTksNiArMTAwOCwyMyBAQAogCQkJICogTW92ZSB0byB0aGUgbGVmdCBieSBvbmUKIAkJCSAqLwogCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAxXSA9IHRhcmdldDsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBpc24ndCBhbHJlYWR5IGFuIGVkZ2UgbW92aW5nIGhvcml6b250YWxseQorCQkJICogc2VsZWN0IHRoaXMgb25lLgorCQkJICovCisJCQlpZiAoaG9yaXpvbnRhbF9lZGdlID09IC0xKSB7CisJCQkJaW50IGo7CisJCQkJaG9yaXpvbnRhbF9lZGdlID0gaTsKKwkJCQlob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ID0gdGFyZ2V0OworCQkJCS8qCisJCQkJICogVGhlIHZhcmlhYmxlIHRhcmdldCBpcyB0aGUgaW5kZXggb2YgdGhlIGdyYXBoCisJCQkJICogY29sdW1uLCBhbmQgdGhlcmVmb3JlIHRhcmdldCoyKzMgaXMgdGhlCisJCQkJICogYWN0dWFsIHNjcmVlbiBjb2x1bW4gb2YgdGhlIGZpcnN0IGhvcml6b250YWwKKwkJCQkgKiBsaW5lLgorCQkJCSAqLworCQkJCWZvciAoaiA9ICh0YXJnZXQgKiAyKSszOyBqIDwgKGkgLSAyKTsgaiArPSAyKQorCQkJCQlncmFwaC0+bmV3X21hcHBpbmdbal0gPSB0YXJnZXQ7CisJCQl9CiAJCX0gZWxzZSBpZiAoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAxXSA9PSB0YXJnZXQpIHsKIAkJCS8qCiAJCQkgKiBUaGVyZSBpcyBhIGJyYW5jaCBsaW5lIHRvIG91ciBsZWZ0CkBAIC0xMDM5LDEwICsxMDQ1LDIxIEBACiAJCQkgKgogCQkJICogVGhlIHNwYWNlIGp1c3QgdG8gdGhlIGxlZnQgb2YgdGhpcwogCQkJICogYnJhbmNoIHNob3VsZCBhbHdheXMgYmUgZW1wdHkuCisJCQkgKgorCQkJICogVGhlIGJyYW5jaCB0byB0aGUgbGVmdCBvZiB0aGF0IHNwYWNlCisJCQkgKiBzaG91bGQgYmUgb3VyIGV2ZW50dWFsIHRhcmdldC4KIAkJCSAqLwogCQkJYXNzZXJ0KGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMV0gPiB0YXJnZXQpOwogCQkJYXNzZXJ0KGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMl0gPCAwKTsKKwkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDNdID09IHRhcmdldCk7CiAJCQlncmFwaC0+bmV3X21hcHBpbmdbaSAtIDJdID0gdGFyZ2V0OworCQkJLyoKKwkJCSAqIE1hcmsgdGhpcyBicmFuY2ggYXMgdGhlIGhvcml6b250YWwgZWRnZSB0bworCQkJICogcHJldmVudCBhbnkgb3RoZXIgZWRnZXMgZnJvbSBtb3ZpbmcKKwkJCSAqIGhvcml6b250YWxseS4KKwkJCSAqLworCQkJaWYgKGhvcml6b250YWxfZWRnZSA9PSAtMSkKKwkJCQlob3Jpem9udGFsX2VkZ2UgPSBpOwogCQl9CiAJfQogCkBAIC0xMDYxLDggKzEwNzgsMjMgQEAKIAkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKIAkJZWxzZSBpZiAodGFyZ2V0ICogMiA9PSBpKQogCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnfCcpOwotCQllbHNlCisJCWVsc2UgaWYgKHRhcmdldCA9PSBob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ICYmCisJCQkgaSAhPSBob3Jpem9udGFsX2VkZ2UgLSAxKSB7CisJCQkJLyoKKwkJCQkgKiBTZXQgdGhlIG1hcHBpbmdzIGZvciBhbGwgYnV0IHRoZQorCQkJCSAqIGZpcnN0IHNlZ21lbnQgdG8gLTEgc28gdGhhdCB0aGV5CisJCQkJICogd29uJ3QgY29udGludWUgaW50byB0aGUgbmV4dCBsaW5lLgorCQkJCSAqLworCQkJCWlmIChpICE9ICh0YXJnZXQgKiAyKSszKQorCQkJCQlncmFwaC0+bmV3X21hcHBpbmdbaV0gPSAtMTsKKwkJCQl1c2VkX2hvcml6b250YWwgPSAxOworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnXycpOworCQl9IGVsc2UgeworCQkJaWYgKHVzZWRfaG9yaXpvbnRhbCAmJiBpIDwgaG9yaXpvbnRhbF9lZGdlKQorCQkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpXSA9IC0xOwogCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnLycpOworCisJCX0KIAl9CiAKIAlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgZ3JhcGgtPm1hcHBpbmdfc2l6ZSk7CmRpZmYgLS1naXQgYS9ncmVwLmMgYi9ncmVwLmMKaW5kZXggOTJhNDdjNy4uNWQxNjJkYSAxMDA2NDQKLS0tIGEvZ3JlcC5jCisrKyBiL2dyZXAuYwpAQCAtMSw1ICsxLDYgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImdyZXAuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgogI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgogCiB2b2lkIGFwcGVuZF9oZWFkZXJfZ3JlcF9wYXR0ZXJuKHN0cnVjdCBncmVwX29wdCAqb3B0LCBlbnVtIGdyZXBfaGVhZGVyX2ZpZWxkIGZpZWxkLCBjb25zdCBjaGFyICpwYXQpCkBAIC00OTAsNiArNDkxLDE3IEBACiB7CiAJaW50IHJlc3QgPSBlb2wgLSBib2w7CiAKKwlpZiAob3B0LT5wcmVfY29udGV4dCB8fCBvcHQtPnBvc3RfY29udGV4dCkgeworCQlpZiAob3B0LT5sYXN0X3Nob3duID09IDApIHsKKwkJCWlmIChvcHQtPnNob3dfaHVua19tYXJrKQorCQkJCWZwdXRzKCItLVxuIiwgc3Rkb3V0KTsKKwkJCWVsc2UKKwkJCQlvcHQtPnNob3dfaHVua19tYXJrID0gMTsKKwkJfSBlbHNlIGlmIChsbm8gPiBvcHQtPmxhc3Rfc2hvd24gKyAxKQorCQkJZnB1dHMoIi0tXG4iLCBzdGRvdXQpOworCX0KKwlvcHQtPmxhc3Rfc2hvd24gPSBsbm87CisKIAlpZiAob3B0LT5udWxsX2ZvbGxvd2luZ19uYW1lKQogCQlzaWduID0gJ1wwJzsKIAlpZiAob3B0LT5wYXRobmFtZSkKQEAgLTUyMCwyMiArNTMyLDk1IEBACiAJcHJpbnRmKCIlLipzXG4iLCByZXN0LCBib2wpOwogfQogCitzdGF0aWMgaW50IG1hdGNoX2Z1bmNuYW1lKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjaGFyICpib2wsIGNoYXIgKmVvbCkKK3sKKwl4ZGVtaXRjb25mX3QgKnhlY2ZnID0gb3B0LT5wcml2OworCWlmICh4ZWNmZyAmJiB4ZWNmZy0+ZmluZF9mdW5jKSB7CisJCWNoYXIgYnVmWzFdOworCQlyZXR1cm4geGVjZmctPmZpbmRfZnVuYyhib2wsIGVvbCAtIGJvbCwgYnVmLCAxLAorCQkJCQl4ZWNmZy0+ZmluZF9mdW5jX3ByaXYpID49IDA7CisJfQorCisJaWYgKGJvbCA9PSBlb2wpCisJCXJldHVybiAwOworCWlmIChpc2FscGhhKCpib2wpIHx8ICpib2wgPT0gJ18nIHx8ICpib2wgPT0gJyQnKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hvd19mdW5jbmFtZV9saW5lKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIGNoYXIgKmJ1ZiwgY2hhciAqYm9sLCB1bnNpZ25lZCBsbm8pCit7CisJd2hpbGUgKGJvbCA+IGJ1ZikgeworCQljaGFyICplb2wgPSAtLWJvbDsKKworCQl3aGlsZSAoYm9sID4gYnVmICYmIGJvbFstMV0gIT0gJ1xuJykKKwkJCWJvbC0tOworCQlsbm8tLTsKKworCQlpZiAobG5vIDw9IG9wdC0+bGFzdF9zaG93bikKKwkJCWJyZWFrOworCisJCWlmIChtYXRjaF9mdW5jbmFtZShvcHQsIGJvbCwgZW9sKSkgeworCQkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIG5hbWUsIGxubywgJz0nKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X3ByZV9jb250ZXh0KHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICpidWYsCisJCQkgICAgIGNoYXIgKmJvbCwgdW5zaWduZWQgbG5vKQoreworCXVuc2lnbmVkIGN1ciA9IGxubywgZnJvbSA9IDEsIGZ1bmNuYW1lX2xubyA9IDA7CisJaW50IGZ1bmNuYW1lX25lZWRlZCA9IG9wdC0+ZnVuY25hbWU7CisKKwlpZiAob3B0LT5wcmVfY29udGV4dCA8IGxubykKKwkJZnJvbSA9IGxubyAtIG9wdC0+cHJlX2NvbnRleHQ7CisJaWYgKGZyb20gPD0gb3B0LT5sYXN0X3Nob3duKQorCQlmcm9tID0gb3B0LT5sYXN0X3Nob3duICsgMTsKKworCS8qIFJld2luZC4gKi8KKwl3aGlsZSAoYm9sID4gYnVmICYmIGN1ciA+IGZyb20pIHsKKwkJY2hhciAqZW9sID0gLS1ib2w7CisKKwkJd2hpbGUgKGJvbCA+IGJ1ZiAmJiBib2xbLTFdICE9ICdcbicpCisJCQlib2wtLTsKKwkJY3VyLS07CisJCWlmIChmdW5jbmFtZV9uZWVkZWQgJiYgbWF0Y2hfZnVuY25hbWUob3B0LCBib2wsIGVvbCkpIHsKKwkJCWZ1bmNuYW1lX2xubyA9IGN1cjsKKwkJCWZ1bmNuYW1lX25lZWRlZCA9IDA7CisJCX0KKwl9CisKKwkvKiBXZSBuZWVkIHRvIGxvb2sgZXZlbiBmdXJ0aGVyIGJhY2sgdG8gZmluZCBhIGZ1bmN0aW9uIHNpZ25hdHVyZS4gKi8KKwlpZiAob3B0LT5mdW5jbmFtZSAmJiBmdW5jbmFtZV9uZWVkZWQpCisJCXNob3dfZnVuY25hbWVfbGluZShvcHQsIG5hbWUsIGJ1ZiwgYm9sLCBjdXIpOworCisJLyogQmFjayBmb3J3YXJkLiAqLworCXdoaWxlIChjdXIgPCBsbm8pIHsKKwkJY2hhciAqZW9sID0gYm9sLCBzaWduID0gKGN1ciA9PSBmdW5jbmFtZV9sbm8pID8gJz0nIDogJy0nOworCisJCXdoaWxlICgqZW9sICE9ICdcbicpCisJCQllb2wrKzsKKwkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIG5hbWUsIGN1ciwgc2lnbik7CisJCWJvbCA9IGVvbCArIDE7CisJCWN1cisrOworCX0KK30KKwogc3RhdGljIGludCBncmVwX2J1ZmZlcl8xKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpuYW1lLAogCQkJIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgY29sbGVjdF9oaXRzKQogewogCWNoYXIgKmJvbCA9IGJ1ZjsKIAl1bnNpZ25lZCBsb25nIGxlZnQgPSBzaXplOwogCXVuc2lnbmVkIGxubyA9IDE7Ci0Jc3RydWN0IHByZV9jb250ZXh0X2xpbmUgewotCQljaGFyICpib2w7Ci0JCWNoYXIgKmVvbDsKLQl9ICpwcmV2ID0gTlVMTCwgKnBjbDsKIAl1bnNpZ25lZCBsYXN0X2hpdCA9IDA7Ci0JdW5zaWduZWQgbGFzdF9zaG93biA9IDA7CiAJaW50IGJpbmFyeV9tYXRjaF9vbmx5ID0gMDsKLQljb25zdCBjaGFyICpodW5rX21hcmsgPSAiIjsKIAl1bnNpZ25lZCBjb3VudCA9IDA7CiAJZW51bSBncmVwX2NvbnRleHQgY3R4ID0gR1JFUF9DT05URVhUX0hFQUQ7CisJeGRlbWl0Y29uZl90IHhlY2ZnOworCisJb3B0LT5sYXN0X3Nob3duID0gMDsKIAogCWlmIChidWZmZXJfaXNfYmluYXJ5KGJ1Ziwgc2l6ZSkpIHsKIAkJc3dpdGNoIChvcHQtPmJpbmFyeSkgewpAQCAtNTUwLDEwICs2MzUsMTYgQEAKIAkJfQogCX0KIAotCWlmIChvcHQtPnByZV9jb250ZXh0KQotCQlwcmV2ID0geGNhbGxvYyhvcHQtPnByZV9jb250ZXh0LCBzaXplb2YoKnByZXYpKTsKLQlpZiAob3B0LT5wcmVfY29udGV4dCB8fCBvcHQtPnBvc3RfY29udGV4dCkKLQkJaHVua19tYXJrID0gIi0tXG4iOworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCWlmIChvcHQtPmZ1bmNuYW1lICYmICFvcHQtPnVubWF0Y2hfbmFtZV9vbmx5ICYmICFvcHQtPnN0YXR1c19vbmx5ICYmCisJICAgICFvcHQtPm5hbWVfb25seSAmJiAhYmluYXJ5X21hdGNoX29ubHkgJiYgIWNvbGxlY3RfaGl0cykgeworCQlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcnYgPSB1c2VyZGlmZl9maW5kX2J5X3BhdGgobmFtZSk7CisJCWlmIChkcnYgJiYgZHJ2LT5mdW5jbmFtZS5wYXR0ZXJuKSB7CisJCQljb25zdCBzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgKnBlID0gJmRydi0+ZnVuY25hbWU7CisJCQl4ZGlmZl9zZXRfZmluZF9mdW5jKCZ4ZWNmZywgcGUtPnBhdHRlcm4sIHBlLT5jZmxhZ3MpOworCQkJb3B0LT5wcml2ID0gJnhlY2ZnOworCQl9CisJfQogCiAJd2hpbGUgKGxlZnQpIHsKIAkJY2hhciAqZW9sLCBjaDsKQEAgLTYwMSw0NSArNjkyLDIwIEBACiAJCQkgKiB0aGUgY29udGV4dCB3aGljaCBpcyBub25zZW5zZSwgYnV0IHRoZSB1c2VyCiAJCQkgKiBkZXNlcnZlcyB0byBnZXQgdGhhdCA7LSkuCiAJCQkgKi8KLQkJCWlmIChvcHQtPnByZV9jb250ZXh0KSB7Ci0JCQkJdW5zaWduZWQgZnJvbTsKLQkJCQlpZiAob3B0LT5wcmVfY29udGV4dCA8IGxubykKLQkJCQkJZnJvbSA9IGxubyAtIG9wdC0+cHJlX2NvbnRleHQ7Ci0JCQkJZWxzZQotCQkJCQlmcm9tID0gMTsKLQkJCQlpZiAoZnJvbSA8PSBsYXN0X3Nob3duKQotCQkJCQlmcm9tID0gbGFzdF9zaG93biArIDE7Ci0JCQkJaWYgKGxhc3Rfc2hvd24gJiYgZnJvbSAhPSBsYXN0X3Nob3duICsgMSkKLQkJCQkJZnB1dHMoaHVua19tYXJrLCBzdGRvdXQpOwotCQkJCXdoaWxlIChmcm9tIDwgbG5vKSB7Ci0JCQkJCXBjbCA9ICZwcmV2W2xuby1mcm9tLTFdOwotCQkJCQlzaG93X2xpbmUob3B0LCBwY2wtPmJvbCwgcGNsLT5lb2wsCi0JCQkJCQkgIG5hbWUsIGZyb20sICctJyk7Ci0JCQkJCWZyb20rKzsKLQkJCQl9Ci0JCQkJbGFzdF9zaG93biA9IGxuby0xOwotCQkJfQotCQkJaWYgKGxhc3Rfc2hvd24gJiYgbG5vICE9IGxhc3Rfc2hvd24gKyAxKQotCQkJCWZwdXRzKGh1bmtfbWFyaywgc3Rkb3V0KTsKKwkJCWlmIChvcHQtPnByZV9jb250ZXh0KQorCQkJCXNob3dfcHJlX2NvbnRleHQob3B0LCBuYW1lLCBidWYsIGJvbCwgbG5vKTsKKwkJCWVsc2UgaWYgKG9wdC0+ZnVuY25hbWUpCisJCQkJc2hvd19mdW5jbmFtZV9saW5lKG9wdCwgbmFtZSwgYnVmLCBib2wsIGxubyk7CiAJCQlpZiAoIW9wdC0+Y291bnQpCiAJCQkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIG5hbWUsIGxubywgJzonKTsKLQkJCWxhc3Rfc2hvd24gPSBsYXN0X2hpdCA9IGxubzsKKwkJCWxhc3RfaGl0ID0gbG5vOwogCQl9CiAJCWVsc2UgaWYgKGxhc3RfaGl0ICYmCiAJCQkgbG5vIDw9IGxhc3RfaGl0ICsgb3B0LT5wb3N0X2NvbnRleHQpIHsKIAkJCS8qIElmIHRoZSBsYXN0IGhpdCBpcyB3aXRoaW4gdGhlIHBvc3QgY29udGV4dCwKIAkJCSAqIHdlIG5lZWQgdG8gc2hvdyB0aGlzIGxpbmUuCiAJCQkgKi8KLQkJCWlmIChsYXN0X3Nob3duICYmIGxubyAhPSBsYXN0X3Nob3duICsgMSkKLQkJCQlmcHV0cyhodW5rX21hcmssIHN0ZG91dCk7CiAJCQlzaG93X2xpbmUob3B0LCBib2wsIGVvbCwgbmFtZSwgbG5vLCAnLScpOwotCQkJbGFzdF9zaG93biA9IGxubzsKLQkJfQotCQlpZiAob3B0LT5wcmVfY29udGV4dCkgewotCQkJbWVtbW92ZShwcmV2KzEsIHByZXYsCi0JCQkJKG9wdC0+cHJlX2NvbnRleHQtMSkgKiBzaXplb2YoKnByZXYpKTsKLQkJCXByZXYtPmJvbCA9IGJvbDsKLQkJCXByZXYtPmVvbCA9IGVvbDsKIAkJfQogCiAJbmV4dF9saW5lOgpAQCAtNjUwLDcgKzcxNiw2IEBACiAJCWxubysrOwogCX0KIAotCWZyZWUocHJldik7CiAJaWYgKGNvbGxlY3RfaGl0cykKIAkJcmV0dXJuIDA7CiAKQEAgLTY2Miw2ICs3MjcsOSBAQAogCQlyZXR1cm4gMTsKIAl9CiAKKwl4ZGlmZl9jbGVhcl9maW5kX2Z1bmMoJnhlY2ZnKTsKKwlvcHQtPnByaXYgPSBOVUxMOworCiAJLyogTkVFRFNXT1JLOgogCSAqIFRoZSByZWFsICJncmVwIC1jIGZvbyAqLmMiIGdpdmVzIG1hbnkgImJhci5jOjAiIGxpbmVzLAogCSAqIHdoaWNoIGZlZWxzIG1vc3RseSB1c2VsZXNzIGJ1dCBzb21ldGltZXMgdXNlZnVsLiAgTWF5YmUKZGlmZiAtLWdpdCBhL2dyZXAuaCBiL2dyZXAuaAppbmRleCBhNjcwMDVkLi41NTgxMzYzIDEwMDY0NAotLS0gYS9ncmVwLmgKKysrIGIvZ3JlcC5oCkBAIC01OSwzMSArNTksMzYgQEAKIAlzdHJ1Y3QgZ3JlcF9wYXQgKnBhdHRlcm5fbGlzdDsKIAlzdHJ1Y3QgZ3JlcF9wYXQgKipwYXR0ZXJuX3RhaWw7CiAJc3RydWN0IGdyZXBfZXhwciAqcGF0dGVybl9leHByZXNzaW9uOworCWNvbnN0IGNoYXIgKnByZWZpeDsKIAlpbnQgcHJlZml4X2xlbmd0aDsKIAlyZWdleF90IHJlZ2V4cDsKLQl1bnNpZ25lZCBsaW5lbnVtOjE7Ci0JdW5zaWduZWQgaW52ZXJ0OjE7Ci0JdW5zaWduZWQgc3RhdHVzX29ubHk6MTsKLQl1bnNpZ25lZCBuYW1lX29ubHk6MTsKLQl1bnNpZ25lZCB1bm1hdGNoX25hbWVfb25seToxOwotCXVuc2lnbmVkIGNvdW50OjE7Ci0JdW5zaWduZWQgd29yZF9yZWdleHA6MTsKLQl1bnNpZ25lZCBmaXhlZDoxOwotCXVuc2lnbmVkIGFsbF9tYXRjaDoxOworCWludCBsaW5lbnVtOworCWludCBpbnZlcnQ7CisJaW50IHN0YXR1c19vbmx5OworCWludCBuYW1lX29ubHk7CisJaW50IHVubWF0Y2hfbmFtZV9vbmx5OworCWludCBjb3VudDsKKwlpbnQgd29yZF9yZWdleHA7CisJaW50IGZpeGVkOworCWludCBhbGxfbWF0Y2g7CiAjZGVmaW5lIEdSRVBfQklOQVJZX0RFRkFVTFQJMAogI2RlZmluZSBHUkVQX0JJTkFSWV9OT01BVENICTEKICNkZWZpbmUgR1JFUF9CSU5BUllfVEVYVAkyCi0JdW5zaWduZWQgYmluYXJ5OjI7Ci0JdW5zaWduZWQgZXh0ZW5kZWQ6MTsKLQl1bnNpZ25lZCByZWxhdGl2ZToxOwotCXVuc2lnbmVkIHBhdGhuYW1lOjE7Ci0JdW5zaWduZWQgbnVsbF9mb2xsb3dpbmdfbmFtZToxOworCWludCBiaW5hcnk7CisJaW50IGV4dGVuZGVkOworCWludCByZWxhdGl2ZTsKKwlpbnQgcGF0aG5hbWU7CisJaW50IG51bGxfZm9sbG93aW5nX25hbWU7CiAJaW50IGNvbG9yOworCWludCBmdW5jbmFtZTsKIAljaGFyIGNvbG9yX21hdGNoW0NPTE9SX01BWExFTl07CiAJY29uc3QgY2hhciAqY29sb3JfZXh0ZXJuYWw7CiAJaW50IHJlZ2ZsYWdzOwogCXVuc2lnbmVkIHByZV9jb250ZXh0OwogCXVuc2lnbmVkIHBvc3RfY29udGV4dDsKKwl1bnNpZ25lZCBsYXN0X3Nob3duOworCWludCBzaG93X2h1bmtfbWFyazsKKwl2b2lkICpwcml2OwogfTsKIAogZXh0ZXJuIHZvaWQgYXBwZW5kX2dyZXBfcGF0dGVybihzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqcGF0LCBjb25zdCBjaGFyICpvcmlnaW4sIGludCBubywgZW51bSBncmVwX3BhdF90b2tlbiB0KTsKZGlmZiAtLWdpdCBhL2hhc2gtb2JqZWN0LmMgYi9oYXNoLW9iamVjdC5jCmluZGV4IGViYjNiZWQuLjk0NTVkZDAgMTAwNjQ0Ci0tLSBhL2hhc2gtb2JqZWN0LmMKKysrIGIvaGFzaC1vYmplY3QuYwpAQCAtMjksNyArMjksNyBAQAogCWludCBmZDsKIAlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwogCWlmIChmZCA8IDApCi0JCWRpZSgiQ2Fubm90IG9wZW4gJXMiLCBwYXRoKTsKKwkJZGllX2Vycm5vKCJDYW5ub3Qgb3BlbiAnJXMnIiwgcGF0aCk7CiAJaGFzaF9mZChmZCwgdHlwZSwgd3JpdGVfb2JqZWN0LCB2cGF0aCk7CiB9CiAKQEAgLTg0LDcgKzg0LDggQEAKIAogCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBoYXNoX29iamVjdF9vcHRpb25zLCBoYXNoX29iamVjdF91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgaGFzaF9vYmplY3Rfb3B0aW9ucywKKwkJCSAgICAgaGFzaF9vYmplY3RfdXNhZ2UsIDApOwogCiAJaWYgKHdyaXRlX29iamVjdCkgewogCQlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5KCk7CmRpZmYgLS1naXQgYS9oZWxwLmMgYi9oZWxwLmMKaW5kZXggZGEwY2NhMC4uMjk0MzM3ZSAxMDA2NDQKLS0tIGEvaGVscC5jCisrKyBiL2hlbHAuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKIAlpZiAoc3BhY2UgPCBtYXhfY29scykKIAkJY29scyA9IG1heF9jb2xzIC8gc3BhY2U7Ci0Jcm93cyA9IChjbWRzLT5jbnQgKyBjb2xzIC0gMSkgLyBjb2xzOworCXJvd3MgPSBESVZfUk9VTkRfVVAoY21kcy0+Y250LCBjb2xzKTsKIAogCWZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKIAkJcHJpbnRmKCIgICIpOwpkaWZmIC0tZ2l0IGEvaHR0cC1wdXNoLmMgYi9odHRwLXB1c2guYwppbmRleCAwYjEyZmZlLi4wMGU4M2RjIDEwMDY0NAotLS0gYS9odHRwLXB1c2guYworKysgYi9odHRwLXB1c2guYwpAQCAtMSw2ICsxLDUgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImNvbW1pdC5oIgotI2luY2x1ZGUgInBhY2suaCIKICNpbmNsdWRlICJ0YWcuaCIKICNpbmNsdWRlICJibG9iLmgiCiAjaW5jbHVkZSAiaHR0cC5oIgpAQCAtMjcsNyArMjYsNiBAQAogI2VuZGlmCiAKICNkZWZpbmUgUFJFVl9CVUZfU0laRSA0MDk2Ci0jZGVmaW5lIFJBTkdFX0hFQURFUl9TSVpFIDMwCiAKIC8qIERBViBtZXRob2RzICovCiAjZGVmaW5lIERBVl9MT0NLICJMT0NLIgpAQCAtNzYsOCArNzQsNiBAQAogc3RhdGljIGludCBhYm9ydGVkOwogc3RhdGljIHNpZ25lZCBjaGFyIHJlbW90ZV9kaXJfZXhpc3RzWzI1Nl07CiAKLXN0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqbm9fcHJhZ21hX2hlYWRlcjsKLQogc3RhdGljIGludCBwdXNoX3ZlcmJvc2VseTsKIHN0YXRpYyBpbnQgcHVzaF9hbGwgPSBNQVRDSF9SRUZTX05PTkU7CiBzdGF0aWMgaW50IGZvcmNlX2FsbDsKQEAgLTExOSwxOSArMTE1LDEwIEBACiAJc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrOwogCXN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzOwogCXN0cnVjdCBidWZmZXIgYnVmZmVyOwotCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwotCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07Ci0JaW50IGxvY2FsX2ZpbGVubzsKLQlGSUxFICpsb2NhbF9zdHJlYW07CiAJZW51bSB0cmFuc2Zlcl9zdGF0ZSBzdGF0ZTsKIAlDVVJMY29kZSBjdXJsX3Jlc3VsdDsKIAljaGFyIGVycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CiAJbG9uZyBodHRwX2NvZGU7Ci0JdW5zaWduZWQgY2hhciByZWFsX3NoYTFbMjBdOwotCWdpdF9TSEFfQ1RYIGM7Ci0Jel9zdHJlYW0gc3RyZWFtOwotCWludCB6cmV0OwotCWludCByZW5hbWU7CiAJdm9pZCAqdXNlckRhdGE7CiAJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKm5leHQ7CkBAIC0yMDYsNiArMTkzLDggQEAKIAkJY2FzZSAnJic6CiAJCQlzdHJidWZfYWRkc3RyKCZidWYsICImYW1wOyIpOwogCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogCQl9CiAJCXMrKzsKIAl9CkBAIC0yMzcsMTUgKzIyNiw2IEBACiAJcmV0dXJuIGRhdl9oZWFkZXJzOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICp1cmwsCi0JCQkJICAgICBjb25zdCBjaGFyICpoZXgsCi0JCQkJICAgICBpbnQgb25seV90d29fZGlnaXRfcHJlZml4KQotewotCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzb2JqZWN0cy8lLipzLyIsIHVybCwgMiwgaGV4KTsKLQlpZiAoIW9ubHlfdHdvX2RpZ2l0X3ByZWZpeCkKLQkJc3RyYnVmX2FkZGYoYnVmLCAiJXMiLCBoZXgrMik7Ci19Ci0KIHN0YXRpYyB2b2lkIGZpbmlzaF9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KTsKIHN0YXRpYyB2b2lkIHJlbGVhc2VfcmVxdWVzdChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCk7CiAKQEAgLTI1OSwxNjMgKzIzOSwyOSBAQAogCiAjaWZkZWYgVVNFX0NVUkxfTVVMVEkKIAotc3RhdGljIGNoYXIgKmdldF9yZW1vdGVfb2JqZWN0X3VybChjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmhleCwKLQkJCQkgICBpbnQgb25seV90d29fZGlnaXRfcHJlZml4KQotewotCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7Ci0JYXBwZW5kX3JlbW90ZV9vYmplY3RfdXJsKCZidWYsIHVybCwgaGV4LCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpOwotCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwotfQotCi1zdGF0aWMgc2l6ZV90IGZ3cml0ZV9zaGExX2ZpbGUodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLAotCQkJICAgICAgIHZvaWQgKmRhdGEpCi17Ci0JdW5zaWduZWQgY2hhciBleHBuWzQwOTZdOwotCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOwotCWludCBwb3NuID0gMDsKLQlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCA9IChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqKWRhdGE7Ci0JZG8gewotCQlzc2l6ZV90IHJldHZhbCA9IHh3cml0ZShyZXF1ZXN0LT5sb2NhbF9maWxlbm8sCi0JCQkJICAgICAgIChjaGFyICopIHB0ciArIHBvc24sIHNpemUgLSBwb3NuKTsKLQkJaWYgKHJldHZhbCA8IDApCi0JCQlyZXR1cm4gcG9zbjsKLQkJcG9zbiArPSByZXR2YWw7Ci0JfSB3aGlsZSAocG9zbiA8IHNpemUpOwotCi0JcmVxdWVzdC0+c3RyZWFtLmF2YWlsX2luID0gc2l6ZTsKLQlyZXF1ZXN0LT5zdHJlYW0ubmV4dF9pbiA9IHB0cjsKLQlkbyB7Ci0JCXJlcXVlc3QtPnN0cmVhbS5uZXh0X291dCA9IGV4cG47Ci0JCXJlcXVlc3QtPnN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoZXhwbik7Ci0JCXJlcXVlc3QtPnpyZXQgPSBnaXRfaW5mbGF0ZSgmcmVxdWVzdC0+c3RyZWFtLCBaX1NZTkNfRkxVU0gpOwotCQlnaXRfU0hBMV9VcGRhdGUoJnJlcXVlc3QtPmMsIGV4cG4sCi0JCQkgICAgc2l6ZW9mKGV4cG4pIC0gcmVxdWVzdC0+c3RyZWFtLmF2YWlsX291dCk7Ci0JfSB3aGlsZSAocmVxdWVzdC0+c3RyZWFtLmF2YWlsX2luICYmIHJlcXVlc3QtPnpyZXQgPT0gWl9PSyk7Ci0JZGF0YV9yZWNlaXZlZCsrOwotCXJldHVybiBzaXplOwotfQotCiBzdGF0aWMgdm9pZCBzdGFydF9mZXRjaF9sb29zZShzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLQljaGFyICpoZXggPSBzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpOwotCWNoYXIgKmZpbGVuYW1lOwotCWNoYXIgcHJldmZpbGVbUEFUSF9NQVhdOwotCWNoYXIgKnVybDsKLQlpbnQgcHJldmxvY2FsOwotCXVuc2lnbmVkIGNoYXIgcHJldl9idWZbUFJFVl9CVUZfU0laRV07Ci0Jc3NpemVfdCBwcmV2X3JlYWQgPSAwOwotCWxvbmcgcHJldl9wb3NuID0gMDsKLQljaGFyIHJhbmdlW1JBTkdFX0hFQURFUl9TSVpFXTsKLQlzdHJ1Y3QgY3VybF9zbGlzdCAqcmFuZ2VfaGVhZGVyID0gTlVMTDsKIAlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqb2JqX3JlcTsKIAotCWZpbGVuYW1lID0gc2hhMV9maWxlX25hbWUocmVxdWVzdC0+b2JqLT5zaGExKTsKLQlzbnByaW50ZihyZXF1ZXN0LT5maWxlbmFtZSwgc2l6ZW9mKHJlcXVlc3QtPmZpbGVuYW1lKSwgIiVzIiwgZmlsZW5hbWUpOwotCXNucHJpbnRmKHJlcXVlc3QtPnRtcGZpbGUsIHNpemVvZihyZXF1ZXN0LT50bXBmaWxlKSwKLQkJICIlcy50ZW1wIiwgZmlsZW5hbWUpOwotCi0Jc25wcmludGYocHJldmZpbGUsIHNpemVvZihwcmV2ZmlsZSksICIlcy5wcmV2IiwgcmVxdWVzdC0+ZmlsZW5hbWUpOwotCXVubGlua19vcl93YXJuKHByZXZmaWxlKTsKLQlyZW5hbWUocmVxdWVzdC0+dG1wZmlsZSwgcHJldmZpbGUpOwotCXVubGlua19vcl93YXJuKHJlcXVlc3QtPnRtcGZpbGUpOwotCi0JaWYgKHJlcXVlc3QtPmxvY2FsX2ZpbGVubyAhPSAtMSkKLQkJZXJyb3IoImZkIGxlYWthZ2UgaW4gc3RhcnQ6ICVkIiwgcmVxdWVzdC0+bG9jYWxfZmlsZW5vKTsKLQlyZXF1ZXN0LT5sb2NhbF9maWxlbm8gPSBvcGVuKHJlcXVlc3QtPnRtcGZpbGUsCi0JCQkJICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOwotCS8qIFRoaXMgY291bGQgaGF2ZSBmYWlsZWQgZHVlIHRvIHRoZSAibGF6eSBkaXJlY3RvcnkgY3JlYXRpb24iOwotCSAqIHRyeSB0byBta2RpciB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudC4KLQkgKi8KLQlpZiAocmVxdWVzdC0+bG9jYWxfZmlsZW5vIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpIHsKLQkJY2hhciAqZGlyID0gc3RycmNocihyZXF1ZXN0LT50bXBmaWxlLCAnLycpOwotCQlpZiAoZGlyKSB7Ci0JCQkqZGlyID0gMDsKLQkJCW1rZGlyKHJlcXVlc3QtPnRtcGZpbGUsIDA3NzcpOwotCQkJKmRpciA9ICcvJzsKLQkJfQotCQlyZXF1ZXN0LT5sb2NhbF9maWxlbm8gPSBvcGVuKHJlcXVlc3QtPnRtcGZpbGUsCi0JCQkJCSAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKLQl9Ci0KLQlpZiAocmVxdWVzdC0+bG9jYWxfZmlsZW5vIDwgMCkgeworCW9ial9yZXEgPSBuZXdfaHR0cF9vYmplY3RfcmVxdWVzdChyZXBvLT51cmwsIHJlcXVlc3QtPm9iai0+c2hhMSk7CisJaWYgKG9ial9yZXEgPT0gTlVMTCkgewogCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7Ci0JCWVycm9yKCJDb3VsZG4ndCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJXMgZm9yICVzOiAlcyIsCi0JCSAgICAgIHJlcXVlc3QtPnRtcGZpbGUsIHJlcXVlc3QtPmZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwogCQlyZXR1cm47CiAJfQogCi0JbWVtc2V0KCZyZXF1ZXN0LT5zdHJlYW0sIDAsIHNpemVvZihyZXF1ZXN0LT5zdHJlYW0pKTsKLQotCWdpdF9pbmZsYXRlX2luaXQoJnJlcXVlc3QtPnN0cmVhbSk7Ci0KLQlnaXRfU0hBMV9Jbml0KCZyZXF1ZXN0LT5jKTsKLQotCXVybCA9IGdldF9yZW1vdGVfb2JqZWN0X3VybChyZXBvLT51cmwsIGhleCwgMCk7Ci0JcmVxdWVzdC0+dXJsID0geHN0cmR1cCh1cmwpOwotCi0JLyogSWYgYSBwcmV2aW91cyB0ZW1wIGZpbGUgaXMgcHJlc2VudCwgcHJvY2VzcyB3aGF0IHdhcyBhbHJlYWR5Ci0JICAgZmV0Y2hlZC4gKi8KLQlwcmV2bG9jYWwgPSBvcGVuKHByZXZmaWxlLCBPX1JET05MWSk7Ci0JaWYgKHByZXZsb2NhbCAhPSAtMSkgewotCQlkbyB7Ci0JCQlwcmV2X3JlYWQgPSB4cmVhZChwcmV2bG9jYWwsIHByZXZfYnVmLCBQUkVWX0JVRl9TSVpFKTsKLQkJCWlmIChwcmV2X3JlYWQ+MCkgewotCQkJCWlmIChmd3JpdGVfc2hhMV9maWxlKHByZXZfYnVmLAotCQkJCQkJICAgICAxLAotCQkJCQkJICAgICBwcmV2X3JlYWQsCi0JCQkJCQkgICAgIHJlcXVlc3QpID09IHByZXZfcmVhZCkgewotCQkJCQlwcmV2X3Bvc24gKz0gcHJldl9yZWFkOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXByZXZfcmVhZCA9IC0xOwotCQkJCX0KLQkJCX0KLQkJfSB3aGlsZSAocHJldl9yZWFkID4gMCk7Ci0JCWNsb3NlKHByZXZsb2NhbCk7Ci0JfQotCXVubGlua19vcl93YXJuKHByZXZmaWxlKTsKLQotCS8qIFJlc2V0IGluZmxhdGUvU0hBMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcmVhZGluZyB0aGUgcHJldmlvdXMgdGVtcAotCSAgIGZpbGU7IGFsc28gcmV3aW5kIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvY2FsIGZpbGUuICovCi0JaWYgKHByZXZfcmVhZCA9PSAtMSkgewotCQltZW1zZXQoJnJlcXVlc3QtPnN0cmVhbSwgMCwgc2l6ZW9mKHJlcXVlc3QtPnN0cmVhbSkpOwotCQlnaXRfaW5mbGF0ZV9pbml0KCZyZXF1ZXN0LT5zdHJlYW0pOwotCQlnaXRfU0hBMV9Jbml0KCZyZXF1ZXN0LT5jKTsKLQkJaWYgKHByZXZfcG9zbj4wKSB7Ci0JCQlwcmV2X3Bvc24gPSAwOwotCQkJbHNlZWsocmVxdWVzdC0+bG9jYWxfZmlsZW5vLCAwLCBTRUVLX1NFVCk7Ci0JCQlmdHJ1bmNhdGUocmVxdWVzdC0+bG9jYWxfZmlsZW5vLCAwKTsKLQkJfQotCX0KLQotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90ID0gb2JqX3JlcS0+c2xvdDsKIAlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19yZXNwb25zZTsKIAlzbG90LT5jYWxsYmFja19kYXRhID0gcmVxdWVzdDsKIAlyZXF1ZXN0LT5zbG90ID0gc2xvdDsKLQotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCByZXF1ZXN0KTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX3NoYTFfZmlsZSk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCByZXF1ZXN0LT5lcnJvcnN0cik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgbm9fcHJhZ21hX2hlYWRlcik7Ci0KLQkvKiBJZiB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZGF0YSBmcm9tIGEgcHJldmlvdXMgZmV0Y2gKLQkgICBhdHRlbXB0LCBvbmx5IGZldGNoIHRoZSBkYXRhIHdlIGRvbid0IGFscmVhZHkgaGF2ZS4gKi8KLQlpZiAocHJldl9wb3NuPjApIHsKLQkJaWYgKHB1c2hfdmVyYm9zZWx5KQotCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJIlJlc3VtaW5nIGZldGNoIG9mIG9iamVjdCAlcyBhdCBieXRlICVsZFxuIiwKLQkJCQloZXgsIHByZXZfcG9zbik7Ci0JCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7Ci0JCXJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHJhbmdlX2hlYWRlciwgcmFuZ2UpOwotCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsCi0JCQkJIENVUkxPUFRfSFRUUEhFQURFUiwgcmFuZ2VfaGVhZGVyKTsKLQl9CisJcmVxdWVzdC0+dXNlckRhdGEgPSBvYmpfcmVxOwogCiAJLyogVHJ5IHRvIGdldCB0aGUgcmVxdWVzdCBzdGFydGVkLCBhYm9ydCB0aGUgcmVxdWVzdCBvbiBlcnJvciAqLwogCXJlcXVlc3QtPnN0YXRlID0gUlVOX0ZFVENIX0xPT1NFOwogCWlmICghc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKIAkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgR0VUIHJlcXVlc3RcbiIpOwogCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKIAkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOwogCX0KIH0KQEAgLTQ0OSwxNiArMjk1LDEwIEBACiAKIHN0YXRpYyB2b2lkIHN0YXJ0X2ZldGNoX3BhY2tlZChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLQljaGFyICp1cmw7CiAJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldDsKLQlGSUxFICpwYWNrZmlsZTsKLQljaGFyICpmaWxlbmFtZTsKLQlsb25nIHByZXZfcG9zbiA9IDA7Ci0JY2hhciByYW5nZVtSQU5HRV9IRUFERVJfU0laRV07Ci0Jc3RydWN0IGN1cmxfc2xpc3QgKnJhbmdlX2hlYWRlciA9IE5VTEw7CiAKIAlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqY2hlY2tfcmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXE7CiAKIAl0YXJnZXQgPSBmaW5kX3NoYTFfcGFjayhyZXF1ZXN0LT5vYmotPnNoYTEsIHJlcG8tPnBhY2tzKTsKIAlpZiAoIXRhcmdldCkgewpAQCAtNDcxLDY2ICszMTEsMzUgQEAKIAlmcHJpbnRmKHN0ZGVyciwJIkZldGNoaW5nIHBhY2sgJXNcbiIsIHNoYTFfdG9faGV4KHRhcmdldC0+c2hhMSkpOwogCWZwcmludGYoc3RkZXJyLCAiIHdoaWNoIGNvbnRhaW5zICVzXG4iLCBzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpKTsKIAotCWZpbGVuYW1lID0gc2hhMV9wYWNrX25hbWUodGFyZ2V0LT5zaGExKTsKLQlzbnByaW50ZihyZXF1ZXN0LT5maWxlbmFtZSwgc2l6ZW9mKHJlcXVlc3QtPmZpbGVuYW1lKSwgIiVzIiwgZmlsZW5hbWUpOwotCXNucHJpbnRmKHJlcXVlc3QtPnRtcGZpbGUsIHNpemVvZihyZXF1ZXN0LT50bXBmaWxlKSwKLQkJICIlcy50ZW1wIiwgZmlsZW5hbWUpOwotCi0JdXJsID0geG1hbGxvYyhzdHJsZW4ocmVwby0+dXJsKSArIDY0KTsKLQlzcHJpbnRmKHVybCwgIiVzb2JqZWN0cy9wYWNrL3BhY2stJXMucGFjayIsCi0JCXJlcG8tPnVybCwgc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSk7CisJcHJlcSA9IG5ld19odHRwX3BhY2tfcmVxdWVzdCh0YXJnZXQsIHJlcG8tPnVybCk7CisJaWYgKHByZXEgPT0gTlVMTCkgeworCQlyZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOworCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCXJldHVybjsKKwl9CisJcHJlcS0+bHN0ID0gJnJlcG8tPnBhY2tzOwogCiAJLyogTWFrZSBzdXJlIHRoZXJlIGlzbid0IGFub3RoZXIgb3BlbiByZXF1ZXN0IGZvciB0aGlzIHBhY2sgKi8KIAl3aGlsZSAoY2hlY2tfcmVxdWVzdCkgewogCQlpZiAoY2hlY2tfcmVxdWVzdC0+c3RhdGUgPT0gUlVOX0ZFVENIX1BBQ0tFRCAmJgotCQkgICAgIXN0cmNtcChjaGVja19yZXF1ZXN0LT51cmwsIHVybCkpIHsKLQkJCWZyZWUodXJsKTsKKwkJICAgICFzdHJjbXAoY2hlY2tfcmVxdWVzdC0+dXJsLCBwcmVxLT51cmwpKSB7CisJCQlyZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOwogCQkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNoZWNrX3JlcXVlc3QgPSBjaGVja19yZXF1ZXN0LT5uZXh0OwogCX0KIAotCXBhY2tmaWxlID0gZm9wZW4ocmVxdWVzdC0+dG1wZmlsZSwgImEiKTsKLQlpZiAoIXBhY2tmaWxlKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyBmb3IgcGFjayIsCi0JCQlyZXF1ZXN0LT50bXBmaWxlKTsKLQkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOwotCQlmcmVlKHVybCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7Ci0Jc2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfcmVzcG9uc2U7Ci0Jc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IHJlcXVlc3Q7Ci0JcmVxdWVzdC0+c2xvdCA9IHNsb3Q7Ci0JcmVxdWVzdC0+bG9jYWxfc3RyZWFtID0gcGFja2ZpbGU7Ci0JcmVxdWVzdC0+dXNlckRhdGEgPSB0YXJnZXQ7Ci0KLQlyZXF1ZXN0LT51cmwgPSB1cmw7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIHBhY2tmaWxlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKLQlzbG90LT5sb2NhbCA9IHBhY2tmaWxlOwotCi0JLyogSWYgdGhlcmUgaXMgZGF0YSBwcmVzZW50IGZyb20gYSBwcmV2aW91cyB0cmFuc2ZlciBhdHRlbXB0LAotCSAgIHJlc3VtZSB3aGVyZSBpdCBsZWZ0IG9mZiAqLwotCXByZXZfcG9zbiA9IGZ0ZWxsKHBhY2tmaWxlKTsKLQlpZiAocHJldl9wb3NuPjApIHsKLQkJaWYgKHB1c2hfdmVyYm9zZWx5KQotCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJIlJlc3VtaW5nIGZldGNoIG9mIHBhY2sgJXMgYXQgYnl0ZSAlbGRcbiIsCi0JCQkJc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSwgcHJldl9wb3NuKTsKLQkJc3ByaW50ZihyYW5nZSwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcHJldl9wb3NuKTsKLQkJcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQocmFuZ2VfaGVhZGVyLCByYW5nZSk7Ci0JCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCByYW5nZV9oZWFkZXIpOwotCX0KKwlwcmVxLT5zbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19yZXNwb25zZTsKKwlwcmVxLT5zbG90LT5jYWxsYmFja19kYXRhID0gcmVxdWVzdDsKKwlyZXF1ZXN0LT5zbG90ID0gcHJlcS0+c2xvdDsKKwlyZXF1ZXN0LT51c2VyRGF0YSA9IHByZXE7CiAKIAkvKiBUcnkgdG8gZ2V0IHRoZSByZXF1ZXN0IHN0YXJ0ZWQsIGFib3J0IHRoZSByZXF1ZXN0IG9uIGVycm9yICovCiAJcmVxdWVzdC0+c3RhdGUgPSBSVU5fRkVUQ0hfUEFDS0VEOwotCWlmICghc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwlpZiAoIXN0YXJ0X2FjdGl2ZV9zbG90KHByZXEtPnNsb3QpKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHN0YXJ0IEdFVCByZXF1ZXN0XG4iKTsKKwkJcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChwcmVxKTsKIAkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOwogCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CiAJfQpAQCAtNzExLDI0ICs1MjAsMTcgQEAKIAkJCWVudHJ5LT5uZXh0ID0gZW50cnktPm5leHQtPm5leHQ7CiAJfQogCi0JaWYgKHJlcXVlc3QtPmxvY2FsX2ZpbGVubyAhPSAtMSkKLQkJY2xvc2UocmVxdWVzdC0+bG9jYWxfZmlsZW5vKTsKLQlpZiAocmVxdWVzdC0+bG9jYWxfc3RyZWFtKQotCQlmY2xvc2UocmVxdWVzdC0+bG9jYWxfc3RyZWFtKTsKIAlmcmVlKHJlcXVlc3QtPnVybCk7CiAJZnJlZShyZXF1ZXN0KTsKIH0KIAogc3RhdGljIHZvaWQgZmluaXNoX3JlcXVlc3Qoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCiB7Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0Jc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldDsKLQlzdHJ1Y3QgcGFja2VkX2dpdCAqKmxzdDsKLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXE7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKm9ial9yZXE7CiAKIAlyZXF1ZXN0LT5jdXJsX3Jlc3VsdCA9IHJlcXVlc3QtPnNsb3QtPmN1cmxfcmVzdWx0OwogCXJlcXVlc3QtPmh0dHBfY29kZSA9IHJlcXVlc3QtPnNsb3QtPmh0dHBfY29kZTsKLQlzbG90ID0gcmVxdWVzdC0+c2xvdDsKIAlyZXF1ZXN0LT5zbG90ID0gTlVMTDsKIAogCS8qIEtlZXAgbG9ja3MgYWN0aXZlICovCkBAIC03ODAsNzcgKzU4Miw0NiBAQAogCQkJYWJvcnRlZCA9IDE7CiAJCX0KIAl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9GRVRDSF9MT09TRSkgewotCQljbG9zZShyZXF1ZXN0LT5sb2NhbF9maWxlbm8pOyByZXF1ZXN0LT5sb2NhbF9maWxlbm8gPSAtMTsKKwkJb2JqX3JlcSA9IChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqKXJlcXVlc3QtPnVzZXJEYXRhOwogCi0JCWlmIChyZXF1ZXN0LT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSyAmJgotCQkgICAgcmVxdWVzdC0+aHR0cF9jb2RlICE9IDQxNikgewotCQkJaWYgKHN0YXQocmVxdWVzdC0+dG1wZmlsZSwgJnN0KSA9PSAwKSB7Ci0JCQkJaWYgKHN0LnN0X3NpemUgPT0gMCkKLQkJCQkJdW5saW5rX29yX3dhcm4ocmVxdWVzdC0+dG1wZmlsZSk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocmVxdWVzdC0+aHR0cF9jb2RlID09IDQxNikKLQkJCQl3YXJuaW5nKCJyZXF1ZXN0ZWQgcmFuZ2UgaW52YWxpZDsgd2UgbWF5IGFscmVhZHkgaGF2ZSBhbGwgdGhlIGRhdGEuIik7Ci0KLQkJCWdpdF9pbmZsYXRlX2VuZCgmcmVxdWVzdC0+c3RyZWFtKTsKLQkJCWdpdF9TSEExX0ZpbmFsKHJlcXVlc3QtPnJlYWxfc2hhMSwgJnJlcXVlc3QtPmMpOwotCQkJaWYgKHJlcXVlc3QtPnpyZXQgIT0gWl9TVFJFQU1fRU5EKSB7Ci0JCQkJdW5saW5rX29yX3dhcm4ocmVxdWVzdC0+dG1wZmlsZSk7Ci0JCQl9IGVsc2UgaWYgKGhhc2hjbXAocmVxdWVzdC0+b2JqLT5zaGExLCByZXF1ZXN0LT5yZWFsX3NoYTEpKSB7Ci0JCQkJdW5saW5rX29yX3dhcm4ocmVxdWVzdC0+dG1wZmlsZSk7Ci0JCQl9IGVsc2UgewotCQkJCXJlcXVlc3QtPnJlbmFtZSA9Ci0JCQkJCW1vdmVfdGVtcF90b19maWxlKAotCQkJCQkJcmVxdWVzdC0+dG1wZmlsZSwKLQkJCQkJCXJlcXVlc3QtPmZpbGVuYW1lKTsKLQkJCQlpZiAocmVxdWVzdC0+cmVuYW1lID09IDApIHsKLQkJCQkJcmVxdWVzdC0+b2JqLT5mbGFncyB8PSAoTE9DQUwgfCBSRU1PVEUpOwotCQkJCX0KLQkJCX0KLQkJfQorCQlpZiAoZmluaXNoX2h0dHBfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcSkgPT0gMCkKKwkJCWlmIChvYmpfcmVxLT5yZW5hbWUgPT0gMCkKKwkJCQlyZXF1ZXN0LT5vYmotPmZsYWdzIHw9IChMT0NBTCB8IFJFTU9URSk7CiAKIAkJLyogVHJ5IGZldGNoaW5nIHBhY2tlZCBpZiBuZWNlc3NhcnkgKi8KLQkJaWYgKHJlcXVlc3QtPm9iai0+ZmxhZ3MgJiBMT0NBTCkKKwkJaWYgKHJlcXVlc3QtPm9iai0+ZmxhZ3MgJiBMT0NBTCkgeworCQkJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOwogCQkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOwotCQllbHNlCisJCX0gZWxzZQogCQkJc3RhcnRfZmV0Y2hfcGFja2VkKHJlcXVlc3QpOwogCiAJfSBlbHNlIGlmIChyZXF1ZXN0LT5zdGF0ZSA9PSBSVU5fRkVUQ0hfUEFDS0VEKSB7CisJCWludCBmYWlsID0gMTsKIAkJaWYgKHJlcXVlc3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBnZXQgcGFjayBmaWxlICVzXG4lcyIsCiAJCQkJcmVxdWVzdC0+dXJsLCBjdXJsX2Vycm9yc3RyKTsKLQkJCXJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKIAkJfSBlbHNlIHsKLQkJCW9mZl90IHBhY2tfc2l6ZSA9IGZ0ZWxsKHJlcXVlc3QtPmxvY2FsX3N0cmVhbSk7CisJCQlwcmVxID0gKHN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqKXJlcXVlc3QtPnVzZXJEYXRhOwogCi0JCQlmY2xvc2UocmVxdWVzdC0+bG9jYWxfc3RyZWFtKTsKLQkJCXJlcXVlc3QtPmxvY2FsX3N0cmVhbSA9IE5VTEw7Ci0JCQlzbG90LT5sb2NhbCA9IE5VTEw7Ci0JCQlpZiAoIW1vdmVfdGVtcF90b19maWxlKHJlcXVlc3QtPnRtcGZpbGUsCi0JCQkJCSAgICAgICByZXF1ZXN0LT5maWxlbmFtZSkpIHsKLQkJCQl0YXJnZXQgPSAoc3RydWN0IHBhY2tlZF9naXQgKilyZXF1ZXN0LT51c2VyRGF0YTsKLQkJCQl0YXJnZXQtPnBhY2tfc2l6ZSA9IHBhY2tfc2l6ZTsKLQkJCQlsc3QgPSAmcmVwby0+cGFja3M7Ci0JCQkJd2hpbGUgKCpsc3QgIT0gdGFyZ2V0KQotCQkJCQlsc3QgPSAmKCgqbHN0KS0+bmV4dCk7Ci0JCQkJKmxzdCA9ICgqbHN0KS0+bmV4dDsKLQotCQkJCWlmICghdmVyaWZ5X3BhY2sodGFyZ2V0KSkKLQkJCQkJaW5zdGFsbF9wYWNrZWRfZ2l0KHRhcmdldCk7Ci0JCQkJZWxzZQotCQkJCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCQlpZiAocHJlcSkgeworCQkJCWlmIChmaW5pc2hfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSkgPiAwKQorCQkJCQlmYWlsID0gMDsKKwkJCQlyZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOwogCQkJfQogCQl9CisJCWlmIChmYWlsKQorCQkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOwogCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CiAJfQogfQogCiAjaWZkZWYgVVNFX0NVUkxfTVVMVEkKK3N0YXRpYyBpbnQgaXNfcnVubmluZ19xdWV1ZTsKIHN0YXRpYyBpbnQgZmlsbF9hY3RpdmVfc2xvdCh2b2lkICp1bnVzZWQpCiB7CiAJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3Q7CiAKLQlpZiAoYWJvcnRlZCkKKwlpZiAoYWJvcnRlZCB8fCAhaXNfcnVubmluZ19xdWV1ZSkKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKHJlcXVlc3QgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CkBAIC04OTMsOCArNjY0LDYgQEAKIAlyZXF1ZXN0LT51cmwgPSBOVUxMOwogCXJlcXVlc3QtPmxvY2sgPSBOVUxMOwogCXJlcXVlc3QtPmhlYWRlcnMgPSBOVUxMOwotCXJlcXVlc3QtPmxvY2FsX2ZpbGVubyA9IC0xOwotCXJlcXVlc3QtPmxvY2FsX3N0cmVhbSA9IE5VTEw7CiAJcmVxdWVzdC0+c3RhdGUgPSBORUVEX0ZFVENIOwogCXJlcXVlc3QtPm5leHQgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CiAJcmVxdWVzdF9xdWV1ZV9oZWFkID0gcmVxdWVzdDsKQEAgLTkzMyw4ICs3MDIsNiBAQAogCXJlcXVlc3QtPnVybCA9IE5VTEw7CiAJcmVxdWVzdC0+bG9jayA9IGxvY2s7CiAJcmVxdWVzdC0+aGVhZGVycyA9IE5VTEw7Ci0JcmVxdWVzdC0+bG9jYWxfZmlsZW5vID0gLTE7Ci0JcmVxdWVzdC0+bG9jYWxfc3RyZWFtID0gTlVMTDsKIAlyZXF1ZXN0LT5zdGF0ZSA9IE5FRURfUFVTSDsKIAlyZXF1ZXN0LT5uZXh0ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOwogCXJlcXVlc3RfcXVldWVfaGVhZCA9IHJlcXVlc3Q7CkBAIC05NDcsMTc5ICs3MTQsMjMgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBmZXRjaF9pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExKQotewotCWNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHNoYTEpOwotCWNoYXIgKmZpbGVuYW1lOwotCWNoYXIgKnVybDsKLQljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOwotCWxvbmcgcHJldl9wb3NuID0gMDsKLQljaGFyIHJhbmdlW1JBTkdFX0hFQURFUl9TSVpFXTsKLQlzdHJ1Y3QgY3VybF9zbGlzdCAqcmFuZ2VfaGVhZGVyID0gTlVMTDsKLQotCUZJTEUgKmluZGV4ZmlsZTsKLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKLQlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7Ci0KLQkvKiBEb24ndCB1c2UgdGhlIGluZGV4IGlmIHRoZSBwYWNrIGlzbid0IHRoZXJlICovCi0JdXJsID0geG1hbGxvYyhzdHJsZW4ocmVwby0+dXJsKSArIDY0KTsKLQlzcHJpbnRmKHVybCwgIiVzb2JqZWN0cy9wYWNrL3BhY2stJXMucGFjayIsIHJlcG8tPnVybCwgaGV4KTsKLQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7Ci0Jc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMSk7Ci0JaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7Ci0JCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKLQkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKLQkJCWZyZWUodXJsKTsKLQkJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHZlcmlmeSBwYWNrICVzIGlzIGF2YWlsYWJsZSIsCi0JCQkJICAgICBoZXgpOwotCQl9Ci0JfSBlbHNlIHsKLQkJZnJlZSh1cmwpOwotCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7Ci0JfQotCi0JaWYgKGhhc19wYWNrX2luZGV4KHNoYTEpKSB7Ci0JCWZyZWUodXJsKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHB1c2hfdmVyYm9zZWx5KQotCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgaW5kZXggZm9yIHBhY2sgJXNcbiIsIGhleCk7Ci0KLQlzcHJpbnRmKHVybCwgIiVzb2JqZWN0cy9wYWNrL3BhY2stJXMuaWR4IiwgcmVwby0+dXJsLCBoZXgpOwotCi0JZmlsZW5hbWUgPSBzaGExX3BhY2tfaW5kZXhfbmFtZShzaGExKTsKLQlzbnByaW50Zih0bXBmaWxlLCBzaXplb2YodG1wZmlsZSksICIlcy50ZW1wIiwgZmlsZW5hbWUpOwotCWluZGV4ZmlsZSA9IGZvcGVuKHRtcGZpbGUsICJhIik7Ci0JaWYgKCFpbmRleGZpbGUpIHsKLQkJZnJlZSh1cmwpOwotCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBvcGVuIGxvY2FsIGZpbGUgJXMgZm9yIHBhY2sgaW5kZXgiLAotCQkJICAgICB0bXBmaWxlKTsKLQl9Ci0KLQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7Ci0Jc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDApOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQR0VULCAxKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgaW5kZXhmaWxlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKLQlzbG90LT5sb2NhbCA9IGluZGV4ZmlsZTsKLQotCS8qIElmIHRoZXJlIGlzIGRhdGEgcHJlc2VudCBmcm9tIGEgcHJldmlvdXMgdHJhbnNmZXIgYXR0ZW1wdCwKLQkgICByZXN1bWUgd2hlcmUgaXQgbGVmdCBvZmYgKi8KLQlwcmV2X3Bvc24gPSBmdGVsbChpbmRleGZpbGUpOwotCWlmIChwcmV2X3Bvc24+MCkgewotCQlpZiAocHVzaF92ZXJib3NlbHkpCi0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkiUmVzdW1pbmcgZmV0Y2ggb2YgaW5kZXggZm9yIHBhY2sgJXMgYXQgYnl0ZSAlbGRcbiIsCi0JCQkJaGV4LCBwcmV2X3Bvc24pOwotCQlzcHJpbnRmKHJhbmdlLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwcmV2X3Bvc24pOwotCQlyYW5nZV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChyYW5nZV9oZWFkZXIsIHJhbmdlKTsKLQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIHJhbmdlX2hlYWRlcik7Ci0JfQotCi0JaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7Ci0JCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKLQkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKLQkJCWZyZWUodXJsKTsKLQkJCWZjbG9zZShpbmRleGZpbGUpOwotCQkJc2xvdC0+bG9jYWwgPSBOVUxMOwotCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgaW5kZXggJXNcbiVzIiwgdXJsLAotCQkJCSAgICAgY3VybF9lcnJvcnN0cik7Ci0JCX0KLQl9IGVsc2UgewotCQlmcmVlKHVybCk7Ci0JCWZjbG9zZShpbmRleGZpbGUpOwotCQlzbG90LT5sb2NhbCA9IE5VTEw7Ci0JCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKLQl9Ci0KLQlmcmVlKHVybCk7Ci0JZmNsb3NlKGluZGV4ZmlsZSk7Ci0Jc2xvdC0+bG9jYWwgPSBOVUxMOwotCi0JcmV0dXJuIG1vdmVfdGVtcF90b19maWxlKHRtcGZpbGUsIGZpbGVuYW1lKTsKLX0KLQotc3RhdGljIGludCBzZXR1cF9pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExKQotewotCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXdfcGFjazsKLQotCWlmIChmZXRjaF9pbmRleChzaGExKSkKLQkJcmV0dXJuIC0xOwotCi0JbmV3X3BhY2sgPSBwYXJzZV9wYWNrX2luZGV4KHNoYTEpOwotCW5ld19wYWNrLT5uZXh0ID0gcmVwby0+cGFja3M7Ci0JcmVwby0+cGFja3MgPSBuZXdfcGFjazsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBmZXRjaF9pbmRpY2VzKHZvaWQpCiB7Ci0JdW5zaWduZWQgY2hhciBzaGExWzIwXTsKLQljaGFyICp1cmw7Ci0Jc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKLQljaGFyICpkYXRhOwotCWludCBpID0gMDsKLQotCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlpbnQgcmV0OwogCiAJaWYgKHB1c2hfdmVyYm9zZWx5KQogCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgcGFjayBsaXN0XG4iKTsKIAotCXVybCA9IHhtYWxsb2Moc3RybGVuKHJlcG8tPnVybCkgKyAyMCk7Ci0Jc3ByaW50Zih1cmwsICIlc29iamVjdHMvaW5mby9wYWNrcyIsIHJlcG8tPnVybCk7Ci0KLQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7Ci0Jc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX2J1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgTlVMTCk7Ci0JaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7Ci0JCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKLQkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKLQkJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOwotCQkJZnJlZSh1cmwpOwotCQkJaWYgKHJlc3VsdHMuaHR0cF9jb2RlID09IDQwNCkKLQkJCQlyZXR1cm4gMDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gZXJyb3IoIiVzIiwgY3VybF9lcnJvcnN0cik7Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKLQkJZnJlZSh1cmwpOwotCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7Ci0JfQotCWZyZWUodXJsKTsKLQotCWRhdGEgPSBidWZmZXIuYnVmOwotCXdoaWxlIChpIDwgYnVmZmVyLmxlbikgewotCQlzd2l0Y2ggKGRhdGFbaV0pIHsKLQkJY2FzZSAnUCc6Ci0JCQlpKys7Ci0JCQlpZiAoaSArIDUyIDwgYnVmZmVyLmxlbiAmJgotCQkJICAgICFwcmVmaXhjbXAoZGF0YSArIGksICIgcGFjay0iKSAmJgotCQkJICAgICFwcmVmaXhjbXAoZGF0YSArIGkgKyA0NiwgIi5wYWNrXG4iKSkgewotCQkJCWdldF9zaGExX2hleChkYXRhICsgaSArIDYsIHNoYTEpOwotCQkJCXNldHVwX2luZGV4KHNoYTEpOwotCQkJCWkgKz0gNTE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCWRlZmF1bHQ6Ci0JCQl3aGlsZSAoZGF0YVtpXSAhPSAnXG4nKQotCQkJCWkrKzsKLQkJfQotCQlpKys7CisJc3dpdGNoIChodHRwX2dldF9pbmZvX3BhY2tzKHJlcG8tPnVybCwgJnJlcG8tPnBhY2tzKSkgeworCWNhc2UgSFRUUF9PSzoKKwljYXNlIEhUVFBfTUlTU0lOR19UQVJHRVQ6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC0xOwogCX0KIAotCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG9uZV9yZW1vdGVfb2JqZWN0KGNvbnN0IGNoYXIgKmhleCkKQEAgLTE4NTAsNyArMTQ2MSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgKipyZW1vdGVfdGFpbDsKK3N0YXRpYyBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmczsKIAogc3RhdGljIHZvaWQgb25lX3JlbW90ZV9yZWYoY2hhciAqcmVmbmFtZSkKIHsKQEAgLTE4ODAsMjcgKzE0OTEsMTUgQEAKIAkJfQogCX0KIAotCSpyZW1vdGVfdGFpbCA9IHJlZjsKLQlyZW1vdGVfdGFpbCA9ICZyZWYtPm5leHQ7CisJcmVmLT5uZXh0ID0gcmVtb3RlX3JlZnM7CisJcmVtb3RlX3JlZnMgPSByZWY7CiB9CiAKIHN0YXRpYyB2b2lkIGdldF9kYXZfcmVtb3RlX2hlYWRzKHZvaWQpCiB7Ci0JcmVtb3RlX3RhaWwgPSAmcmVtb3RlX3JlZnM7CiAJcmVtb3RlX2xzKCJyZWZzLyIsIChQUk9DRVNTX0ZJTEVTIHwgUFJPQ0VTU19ESVJTIHwgUkVDVVJTSVZFKSwgcHJvY2Vzc19sc19yZWYsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IGlzX3plcm9fc2hhMShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKLQkJaWYgKCpzaGExKyspCi0JCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyB2b2lkIGFkZF9yZW1vdGVfaW5mb19yZWYoc3RydWN0IHJlbW90ZV9sc19jdHggKmxzKQogewogCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IChzdHJ1Y3Qgc3RyYnVmICopbHMtPnVzZXJEYXRhOwpAQCAtMTk5NCwyOSArMTU5MywyMiBAQAogc3RhdGljIGludCByZW1vdGVfZXhpc3RzKGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJY2hhciAqdXJsID0geG1hbGxvYyhzdHJsZW4ocmVwby0+dXJsKSArIHN0cmxlbihwYXRoKSArIDEpOwotCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKLQlpbnQgcmV0ID0gLTE7CisJaW50IHJldDsKIAogCXNwcmludGYodXJsLCAiJXMlcyIsIHJlcG8tPnVybCwgcGF0aCk7CiAKLQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7Ci0Jc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMSk7Ci0KLQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOwotCQlpZiAocmVzdWx0cy5odHRwX2NvZGUgPT0gNDA0KQotCQkJcmV0ID0gMDsKLQkJZWxzZSBpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSykKLQkJCXJldCA9IDE7Ci0JCWVsc2UKLQkJCWZwcmludGYoc3RkZXJyLCAiSEVBRCBIVFRQIGVycm9yICVsZFxuIiwgcmVzdWx0cy5odHRwX2NvZGUpOwotCX0gZWxzZSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHN0YXJ0IEhFQUQgcmVxdWVzdFxuIik7CisJc3dpdGNoIChodHRwX2dldF9zdHJidWYodXJsLCBOVUxMLCAwKSkgeworCWNhc2UgSFRUUF9PSzoKKwkJcmV0ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBIVFRQX01JU1NJTkdfVEFSR0VUOgorCQlyZXQgPSAwOworCQlicmVhazsKKwljYXNlIEhUVFBfRVJST1I6CisJCWh0dHBfZXJyb3IodXJsLCBIVFRQX0VSUk9SKTsKKwlkZWZhdWx0OgorCQlyZXQgPSAtMTsKIAl9Ci0KIAlmcmVlKHVybCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTIwMjUsMjcgKzE2MTcsMTMgQEAKIHsKIAljaGFyICp1cmw7CiAJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKLQlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CiAKIAl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpICsgc3RybGVuKHBhdGgpICsgMSk7CiAJc3ByaW50Zih1cmwsICIlcyVzIiwgcmVwby0+dXJsLCBwYXRoKTsKIAotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKLQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfYnVmZmVyKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgTlVMTCk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOwotCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewotCQkJZGllKCJDb3VsZG4ndCBnZXQgJXMgZm9yIHJlbW90ZSBzeW1yZWZcbiVzIiwKLQkJCSAgICB1cmwsIGN1cmxfZXJyb3JzdHIpOwotCQl9Ci0JfSBlbHNlIHsKLQkJZGllKCJVbmFibGUgdG8gc3RhcnQgcmVtb3RlIHN5bXJlZiByZXF1ZXN0Iik7Ci0JfQorCWlmIChodHRwX2dldF9zdHJidWYodXJsLCAmYnVmZmVyLCAwKSAhPSBIVFRQX09LKQorCQlkaWUoIkNvdWxkbid0IGdldCAlcyBmb3IgcmVtb3RlIHN5bXJlZlxuJXMiLCB1cmwsCisJCSAgICBjdXJsX2Vycm9yc3RyKTsKIAlmcmVlKHVybCk7CiAKIAlmcmVlKCpzeW1yZWYpOwpAQCAtMjEyNiwxMyArMTcwNCwxMyBAQAogCQkvKiBSZW1vdGUgSEVBRCBtdXN0IHJlc29sdmUgdG8gYSBrbm93biBvYmplY3QgKi8KIAkJaWYgKHN5bXJlZikKIAkJCXJldHVybiBlcnJvcigiUmVtb3RlIEhFQUQgc3ltcmVmcyB0b28gZGVlcCIpOwotCQlpZiAoaXNfemVyb19zaGExKGhlYWRfc2hhMSkpCisJCWlmIChpc19udWxsX3NoYTEoaGVhZF9zaGExKSkKIAkJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHJlc29sdmUgcmVtb3RlIEhFQUQiKTsKIAkJaWYgKCFoYXNfc2hhMV9maWxlKGhlYWRfc2hhMSkpCiAJCQlyZXR1cm4gZXJyb3IoIlJlbW90ZSBIRUFEIHJlc29sdmVzIHRvIG9iamVjdCAlc1xud2hpY2ggZG9lcyBub3QgZXhpc3QgbG9jYWxseSwgcGVyaGFwcyB5b3UgbmVlZCB0byBmZXRjaD8iLCBzaGExX3RvX2hleChoZWFkX3NoYTEpKTsKIAogCQkvKiBSZW1vdGUgYnJhbmNoIG11c3QgcmVzb2x2ZSB0byBhIGtub3duIG9iamVjdCAqLwotCQlpZiAoaXNfemVyb19zaGExKHJlbW90ZV9yZWYtPm9sZF9zaGExKSkKKwkJaWYgKGlzX251bGxfc2hhMShyZW1vdGVfcmVmLT5vbGRfc2hhMSkpCiAJCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHJlbW90ZSBicmFuY2ggJXMiLAogCQkJCSAgICAgcmVtb3RlX3JlZi0+bmFtZSk7CiAJCWlmICghaGFzX3NoYTFfZmlsZShyZW1vdGVfcmVmLT5vbGRfc2hhMSkpCkBAIC0yMTc0LDYgKzE3NTIsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcnVuX3JlcXVlc3RfcXVldWUodm9pZCkKK3sKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAxOworCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisJYWRkX2ZpbGxfZnVuY3Rpb24oTlVMTCwgZmlsbF9hY3RpdmVfc2xvdCk7CisjZW5kaWYKKwlkbyB7CisJCWZpbmlzaF9hbGxfYWN0aXZlX3Nsb3RzKCk7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwkJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKyNlbmRpZgorCX0gd2hpbGUgKHJlcXVlc3RfcXVldWVfaGVhZCAmJiAhYWJvcnRlZCk7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAwOworI2VuZGlmCit9CisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKQEAgLTIyMTgsNiArMTgxNSw3IEBACiAJCQl9CiAJCQlpZiAoIXN0cmNtcChhcmcsICItLXZlcmJvc2UiKSkgewogCQkJCXB1c2hfdmVyYm9zZWx5ID0gMTsKKwkJCQlodHRwX2lzX3ZlcmJvc2UgPSAxOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLWQiKSkgewpAQCAtMjI2Nyw4ICsxODY1LDYgQEAKIAlyZW1vdGUtPnVybFtyZW1vdGUtPnVybF9ucisrXSA9IHJlcG8tPnVybDsKIAlodHRwX2luaXQocmVtb3RlKTsKIAotCW5vX3ByYWdtYV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChub19wcmFnbWFfaGVhZGVyLCAiUHJhZ21hOiIpOwotCiAJaWYgKHJlcG8tPnVybCAmJiByZXBvLT51cmxbc3RybGVuKHJlcG8tPnVybCktMV0gIT0gJy8nKSB7CiAJCXJld3JpdHRlbl91cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpKzIpOwogCQlzdHJjcHkocmV3cml0dGVuX3VybCwgcmVwby0+dXJsKTsKQEAgLTIyNzgsNiArMTg3NCwxMCBAQAogCQlyZXBvLT51cmwgPSByZXdyaXR0ZW5fdXJsOwogCX0KIAorI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaXNfcnVubmluZ19xdWV1ZSA9IDA7CisjZW5kaWYKKwogCS8qIFZlcmlmeSBEQVYgY29tcGxpYW5jZS9sb2NrIHN1cHBvcnQgKi8KIAlpZiAoIWxvY2tpbmdfYXZhaWxhYmxlKCkpIHsKIAkJcmMgPSAxOwpAQCAtMjMwNyw2ICsxOTA3LDcgQEAKIAlsb2NhbF9yZWZzID0gZ2V0X2xvY2FsX2hlYWRzKCk7CiAJZnByaW50ZihzdGRlcnIsICJGZXRjaGluZyByZW1vdGUgaGVhZHMuLi5cbiIpOwogCWdldF9kYXZfcmVtb3RlX2hlYWRzKCk7CisJcnVuX3JlcXVlc3RfcXVldWUoKTsKIAogCS8qIFJlbW92ZSBhIHJlbW90ZSBicmFuY2ggaWYgLWQgb3IgLUQgd2FzIHNwZWNpZmllZCAqLwogCWlmIChkZWxldGVfYnJhbmNoKSB7CkBAIC0yMzE3LDkgKzE5MTgsNyBAQAogCX0KIAogCS8qIG1hdGNoIHRoZW0gdXAgKi8KLQlpZiAoIXJlbW90ZV90YWlsKQotCQlyZW1vdGVfdGFpbCA9ICZyZW1vdGVfcmVmczsKLQlpZiAobWF0Y2hfcmVmcyhsb2NhbF9yZWZzLCByZW1vdGVfcmVmcywgJnJlbW90ZV90YWlsLAorCWlmIChtYXRjaF9yZWZzKGxvY2FsX3JlZnMsICZyZW1vdGVfcmVmcywKIAkJICAgICAgIG5yX3JlZnNwZWMsIChjb25zdCBjaGFyICoqKSByZWZzcGVjLCBwdXNoX2FsbCkpIHsKIAkJcmMgPSAtMTsKIAkJZ290byBjbGVhbnVwOwpAQCAtMjMzMywxNCArMTkzMiwxNCBAQAogCW5ld19yZWZzID0gMDsKIAlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgewogCQljaGFyIG9sZF9oZXhbNjBdLCAqbmV3X2hleDsKLQkJY29uc3QgY2hhciAqY29tbWl0X2FyZ3ZbNF07CisJCWNvbnN0IGNoYXIgKmNvbW1pdF9hcmd2WzVdOwogCQlpbnQgY29tbWl0X2FyZ2M7CiAJCWNoYXIgKm5ld19zaGExX2hleCwgKm9sZF9zaGExX2hleDsKIAogCQlpZiAoIXJlZi0+cGVlcl9yZWYpCiAJCQljb250aW51ZTsKIAotCQlpZiAoaXNfemVyb19zaGExKHJlZi0+cGVlcl9yZWYtPm5ld19zaGExKSkgeworCQlpZiAoaXNfbnVsbF9zaGExKHJlZi0+cGVlcl9yZWYtPm5ld19zaGExKSkgewogCQkJaWYgKGRlbGV0ZV9yZW1vdGVfYnJhbmNoKHJlZi0+bmFtZSwgMSkgPT0gLTEpIHsKIAkJCQllcnJvcigiQ291bGQgbm90IHJlbW92ZSAlcyIsIHJlZi0+bmFtZSk7CiAJCQkJcmMgPSAtNDsKQEAgLTIzNTYsNyArMTk1NSw3IEBACiAJCX0KIAogCQlpZiAoIWZvcmNlX2FsbCAmJgotCQkgICAgIWlzX3plcm9fc2hhMShyZWYtPm9sZF9zaGExKSAmJgorCQkgICAgIWlzX251bGxfc2hhMShyZWYtPm9sZF9zaGExKSAmJgogCQkgICAgIXJlZi0+Zm9yY2UpIHsKIAkJCWlmICghaGFzX3NoYTFfZmlsZShyZWYtPm9sZF9zaGExKSB8fAogCQkJICAgICFyZWZfbmV3ZXIocmVmLT5wZWVyX3JlZi0+bmV3X3NoYTEsCkBAIC0yNDA2LDEzICsyMDA1LDE0IEBACiAJCW9sZF9zaGExX2hleCA9IE5VTEw7CiAJCWNvbW1pdF9hcmd2WzFdID0gIi0tb2JqZWN0cyI7CiAJCWNvbW1pdF9hcmd2WzJdID0gbmV3X3NoYTFfaGV4OwotCQlpZiAoIXB1c2hfYWxsICYmICFpc196ZXJvX3NoYTEocmVmLT5vbGRfc2hhMSkpIHsKKwkJaWYgKCFwdXNoX2FsbCAmJiAhaXNfbnVsbF9zaGExKHJlZi0+b2xkX3NoYTEpKSB7CiAJCQlvbGRfc2hhMV9oZXggPSB4bWFsbG9jKDQyKTsKIAkJCXNwcmludGYob2xkX3NoYTFfaGV4LCAiXiVzIiwKIAkJCQlzaGExX3RvX2hleChyZWYtPm9sZF9zaGExKSk7CiAJCQljb21taXRfYXJndlszXSA9IG9sZF9zaGExX2hleDsKIAkJCWNvbW1pdF9hcmdjKys7CiAJCX0KKwkJY29tbWl0X2FyZ3ZbY29tbWl0X2FyZ2NdID0gTlVMTDsKIAkJaW5pdF9yZXZpc2lvbnMoJnJldnMsIHNldHVwX2dpdF9kaXJlY3RvcnkoKSk7CiAJCXNldHVwX3JldmlzaW9ucyhjb21taXRfYXJnYywgY29tbWl0X2FyZ3YsICZyZXZzLCBOVUxMKTsKIAkJcmV2cy5lZGdlX2hpbnQgPSAwOyAvKiBqdXN0IGluIGNhc2UgKi8KQEAgLTI0MzYsMTYgKzIwMzYsOCBAQAogCQlpZiAob2JqZWN0c190b19zZW5kKQogCQkJZnByaW50ZihzdGRlcnIsICIgICAgc2VuZGluZyAlZCBvYmplY3RzXG4iLAogCQkJCW9iamVjdHNfdG9fc2VuZCk7Ci0jaWZkZWYgVVNFX0NVUkxfTVVMVEkKLQkJZmlsbF9hY3RpdmVfc2xvdHMoKTsKLQkJYWRkX2ZpbGxfZnVuY3Rpb24oTlVMTCwgZmlsbF9hY3RpdmVfc2xvdCk7Ci0jZW5kaWYKLQkJZG8gewotCQkJZmluaXNoX2FsbF9hY3RpdmVfc2xvdHMoKTsKLSNpZmRlZiBVU0VfQ1VSTF9NVUxUSQotCQkJZmlsbF9hY3RpdmVfc2xvdHMoKTsKLSNlbmRpZgotCQl9IHdoaWxlIChyZXF1ZXN0X3F1ZXVlX2hlYWQgJiYgIWFib3J0ZWQpOworCisJCXJ1bl9yZXF1ZXN0X3F1ZXVlKCk7CiAKIAkJLyogVXBkYXRlIHRoZSByZW1vdGUgYnJhbmNoIGlmIGFsbCB3ZW50IHdlbGwgKi8KIAkJaWYgKGFib3J0ZWQgfHwgIXVwZGF0ZV9yZW1vdGUocmVmLT5uZXdfc2hhMSwgcmVmX2xvY2spKQpAQCAtMjQ3NCw4ICsyMDY2LDYgQEAKIAkJdW5sb2NrX3JlbW90ZShpbmZvX3JlZl9sb2NrKTsKIAlmcmVlKHJlcG8pOwogCi0JY3VybF9zbGlzdF9mcmVlX2FsbChub19wcmFnbWFfaGVhZGVyKTsKLQogCWh0dHBfY2xlYW51cCgpOwogCiAJcmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKZGlmZiAtLWdpdCBhL2h0dHAtd2Fsa2VyLmMgYi9odHRwLXdhbGtlci5jCmluZGV4IDkzNzc4NTEuLjcwMGJjMTMgMTAwNjQ0Ci0tLSBhL2h0dHAtd2Fsa2VyLmMKKysrIGIvaHR0cC13YWxrZXIuYwpAQCAtMSwxMiArMSw4IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJjb21taXQuaCIKLSNpbmNsdWRlICJwYWNrLmgiCiAjaW5jbHVkZSAid2Fsa2VyLmgiCiAjaW5jbHVkZSAiaHR0cC5oIgogCi0jZGVmaW5lIFBSRVZfQlVGX1NJWkUgNDA5NgotI2RlZmluZSBSQU5HRV9IRUFERVJfU0laRSAzMAotCiBzdHJ1Y3QgYWx0X2Jhc2UKIHsKIAljaGFyICpiYXNlOwpAQCAtMjcsMjAgKzIzLDggQEAKIAlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXI7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAlzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG87Ci0JY2hhciAqdXJsOwotCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwotCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07Ci0JaW50IGxvY2FsOwogCWVudW0gb2JqZWN0X3JlcXVlc3Rfc3RhdGUgc3RhdGU7Ci0JQ1VSTGNvZGUgY3VybF9yZXN1bHQ7Ci0JY2hhciBlcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOwotCWxvbmcgaHR0cF9jb2RlOwotCXVuc2lnbmVkIGNoYXIgcmVhbF9zaGExWzIwXTsKLQlnaXRfU0hBX0NUWCBjOwotCXpfc3RyZWFtIHN0cmVhbTsKLQlpbnQgenJldDsKLQlpbnQgcmVuYW1lOwotCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpuZXh0OwogfTsKIApAQCAtNTcsMzkgKzQxLDEwIEBACiAJY29uc3QgY2hhciAqdXJsOwogCWludCBnb3RfYWx0ZXJuYXRlczsKIAlzdHJ1Y3QgYWx0X2Jhc2UgKmFsdDsKLQlzdHJ1Y3QgY3VybF9zbGlzdCAqbm9fcHJhZ21hX2hlYWRlcjsKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9iamVjdF9xdWV1ZV9oZWFkOwogCi1zdGF0aWMgc2l6ZV90IGZ3cml0ZV9zaGExX2ZpbGUodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLAotCQkJICAgICAgIHZvaWQgKmRhdGEpCi17Ci0JdW5zaWduZWQgY2hhciBleHBuWzQwOTZdOwotCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOwotCWludCBwb3NuID0gMDsKLQlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEgPSAoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICopZGF0YTsKLQlkbyB7Ci0JCXNzaXplX3QgcmV0dmFsID0geHdyaXRlKG9ial9yZXEtPmxvY2FsLAotCQkJCSAgICAgICAoY2hhciAqKSBwdHIgKyBwb3NuLCBzaXplIC0gcG9zbik7Ci0JCWlmIChyZXR2YWwgPCAwKQotCQkJcmV0dXJuIHBvc247Ci0JCXBvc24gKz0gcmV0dmFsOwotCX0gd2hpbGUgKHBvc24gPCBzaXplKTsKLQotCW9ial9yZXEtPnN0cmVhbS5hdmFpbF9pbiA9IHNpemU7Ci0Jb2JqX3JlcS0+c3RyZWFtLm5leHRfaW4gPSBwdHI7Ci0JZG8gewotCQlvYmpfcmVxLT5zdHJlYW0ubmV4dF9vdXQgPSBleHBuOwotCQlvYmpfcmVxLT5zdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGV4cG4pOwotCQlvYmpfcmVxLT56cmV0ID0gZ2l0X2luZmxhdGUoJm9ial9yZXEtPnN0cmVhbSwgWl9TWU5DX0ZMVVNIKTsKLQkJZ2l0X1NIQTFfVXBkYXRlKCZvYmpfcmVxLT5jLCBleHBuLAotCQkJICAgIHNpemVvZihleHBuKSAtIG9ial9yZXEtPnN0cmVhbS5hdmFpbF9vdXQpOwotCX0gd2hpbGUgKG9ial9yZXEtPnN0cmVhbS5hdmFpbF9pbiAmJiBvYmpfcmVxLT56cmV0ID09IFpfT0spOwotCWRhdGFfcmVjZWl2ZWQrKzsKLQlyZXR1cm4gc2l6ZTsKLX0KLQogc3RhdGljIHZvaWQgZmV0Y2hfYWx0ZXJuYXRlcyhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNvbnN0IGNoYXIgKmJhc2UpOwogCiBzdGF0aWMgdm9pZCBwcm9jZXNzX29iamVjdF9yZXNwb25zZSh2b2lkICpjYWxsYmFja19kYXRhKTsKQEAgLTk3LDE2NSArNTIsMzUgQEAKIHN0YXRpYyB2b2lkIHN0YXJ0X29iamVjdF9yZXF1ZXN0KHN0cnVjdCB3YWxrZXIgKndhbGtlciwKIAkJCQkgc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxKQogewotCWNoYXIgKmhleCA9IHNoYTFfdG9faGV4KG9ial9yZXEtPnNoYTEpOwotCWNoYXIgcHJldmZpbGVbUEFUSF9NQVhdOwotCWNoYXIgKnVybDsKLQljaGFyICpwb3NuOwotCWludCBwcmV2bG9jYWw7Ci0JdW5zaWduZWQgY2hhciBwcmV2X2J1ZltQUkVWX0JVRl9TSVpFXTsKLQlzc2l6ZV90IHByZXZfcmVhZCA9IDA7Ci0JbG9uZyBwcmV2X3Bvc24gPSAwOwotCWNoYXIgcmFuZ2VbUkFOR0VfSEVBREVSX1NJWkVdOwotCXN0cnVjdCBjdXJsX3NsaXN0ICpyYW5nZV9oZWFkZXIgPSBOVUxMOwogCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHdhbGtlci0+ZGF0YTsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqcmVxOwogCi0Jc25wcmludGYocHJldmZpbGUsIHNpemVvZihwcmV2ZmlsZSksICIlcy5wcmV2Iiwgb2JqX3JlcS0+ZmlsZW5hbWUpOwotCXVubGlua19vcl93YXJuKHByZXZmaWxlKTsKLQlyZW5hbWUob2JqX3JlcS0+dG1wZmlsZSwgcHJldmZpbGUpOwotCXVubGlua19vcl93YXJuKG9ial9yZXEtPnRtcGZpbGUpOwotCi0JaWYgKG9ial9yZXEtPmxvY2FsICE9IC0xKQotCQllcnJvcigiZmQgbGVha2FnZSBpbiBzdGFydDogJWQiLCBvYmpfcmVxLT5sb2NhbCk7Ci0Jb2JqX3JlcS0+bG9jYWwgPSBvcGVuKG9ial9yZXEtPnRtcGZpbGUsCi0JCQkgICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOwotCS8qIFRoaXMgY291bGQgaGF2ZSBmYWlsZWQgZHVlIHRvIHRoZSAibGF6eSBkaXJlY3RvcnkgY3JlYXRpb24iOwotCSAqIHRyeSB0byBta2RpciB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudC4KLQkgKi8KLQlpZiAob2JqX3JlcS0+bG9jYWwgPCAwICYmIGVycm5vID09IEVOT0VOVCkgewotCQljaGFyICpkaXIgPSBzdHJyY2hyKG9ial9yZXEtPnRtcGZpbGUsICcvJyk7Ci0JCWlmIChkaXIpIHsKLQkJCSpkaXIgPSAwOwotCQkJbWtkaXIob2JqX3JlcS0+dG1wZmlsZSwgMDc3Nyk7Ci0JCQkqZGlyID0gJy8nOwotCQl9Ci0JCW9ial9yZXEtPmxvY2FsID0gb3BlbihvYmpfcmVxLT50bXBmaWxlLAotCQkJCSAgICAgIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7Ci0JfQotCi0JaWYgKG9ial9yZXEtPmxvY2FsIDwgMCkgeworCXJlcSA9IG5ld19odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcG8tPmJhc2UsIG9ial9yZXEtPnNoYTEpOworCWlmIChyZXEgPT0gTlVMTCkgewogCQlvYmpfcmVxLT5zdGF0ZSA9IEFCT1JURUQ7Ci0JCWVycm9yKCJDb3VsZG4ndCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJXMgZm9yICVzOiAlcyIsCi0JCSAgICAgIG9ial9yZXEtPnRtcGZpbGUsIG9ial9yZXEtPmZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwogCQlyZXR1cm47CiAJfQorCW9ial9yZXEtPnJlcSA9IHJlcTsKIAotCW1lbXNldCgmb2JqX3JlcS0+c3RyZWFtLCAwLCBzaXplb2Yob2JqX3JlcS0+c3RyZWFtKSk7Ci0KLQlnaXRfaW5mbGF0ZV9pbml0KCZvYmpfcmVxLT5zdHJlYW0pOwotCi0JZ2l0X1NIQTFfSW5pdCgmb2JqX3JlcS0+Yyk7Ci0KLQl1cmwgPSB4bWFsbG9jKHN0cmxlbihvYmpfcmVxLT5yZXBvLT5iYXNlKSArIDUxKTsKLQlvYmpfcmVxLT51cmwgPSB4bWFsbG9jKHN0cmxlbihvYmpfcmVxLT5yZXBvLT5iYXNlKSArIDUxKTsKLQlzdHJjcHkodXJsLCBvYmpfcmVxLT5yZXBvLT5iYXNlKTsKLQlwb3NuID0gdXJsICsgc3RybGVuKG9ial9yZXEtPnJlcG8tPmJhc2UpOwotCXN0cmNweShwb3NuLCAiL29iamVjdHMvIik7Ci0JcG9zbiArPSA5OwotCW1lbWNweShwb3NuLCBoZXgsIDIpOwotCXBvc24gKz0gMjsKLQkqKHBvc24rKykgPSAnLyc7Ci0Jc3RyY3B5KHBvc24sIGhleCArIDIpOwotCXN0cmNweShvYmpfcmVxLT51cmwsIHVybCk7Ci0KLQkvKiBJZiBhIHByZXZpb3VzIHRlbXAgZmlsZSBpcyBwcmVzZW50LCBwcm9jZXNzIHdoYXQgd2FzIGFscmVhZHkKLQkgICBmZXRjaGVkLiAqLwotCXByZXZsb2NhbCA9IG9wZW4ocHJldmZpbGUsIE9fUkRPTkxZKTsKLQlpZiAocHJldmxvY2FsICE9IC0xKSB7Ci0JCWRvIHsKLQkJCXByZXZfcmVhZCA9IHhyZWFkKHByZXZsb2NhbCwgcHJldl9idWYsIFBSRVZfQlVGX1NJWkUpOwotCQkJaWYgKHByZXZfcmVhZD4wKSB7Ci0JCQkJaWYgKGZ3cml0ZV9zaGExX2ZpbGUocHJldl9idWYsCi0JCQkJCQkgICAgIDEsCi0JCQkJCQkgICAgIHByZXZfcmVhZCwKLQkJCQkJCSAgICAgb2JqX3JlcSkgPT0gcHJldl9yZWFkKSB7Ci0JCQkJCXByZXZfcG9zbiArPSBwcmV2X3JlYWQ7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJldl9yZWFkID0gLTE7Ci0JCQkJfQotCQkJfQotCQl9IHdoaWxlIChwcmV2X3JlYWQgPiAwKTsKLQkJY2xvc2UocHJldmxvY2FsKTsKLQl9Ci0JdW5saW5rX29yX3dhcm4ocHJldmZpbGUpOwotCi0JLyogUmVzZXQgaW5mbGF0ZS9TSEExIGlmIHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZSBwcmV2aW91cyB0ZW1wCi0JICAgZmlsZTsgYWxzbyByZXdpbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9jYWwgZmlsZS4gKi8KLQlpZiAocHJldl9yZWFkID09IC0xKSB7Ci0JCW1lbXNldCgmb2JqX3JlcS0+c3RyZWFtLCAwLCBzaXplb2Yob2JqX3JlcS0+c3RyZWFtKSk7Ci0JCWdpdF9pbmZsYXRlX2luaXQoJm9ial9yZXEtPnN0cmVhbSk7Ci0JCWdpdF9TSEExX0luaXQoJm9ial9yZXEtPmMpOwotCQlpZiAocHJldl9wb3NuPjApIHsKLQkJCXByZXZfcG9zbiA9IDA7Ci0JCQlsc2VlayhvYmpfcmVxLT5sb2NhbCwgMCwgU0VFS19TRVQpOwotCQkJZnRydW5jYXRlKG9ial9yZXEtPmxvY2FsLCAwKTsKLQkJfQotCX0KLQotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90ID0gcmVxLT5zbG90OwogCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX29iamVjdF9yZXNwb25zZTsKIAlzbG90LT5jYWxsYmFja19kYXRhID0gb2JqX3JlcTsKLQlvYmpfcmVxLT5zbG90ID0gc2xvdDsKLQotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBvYmpfcmVxKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX3NoYTFfZmlsZSk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBvYmpfcmVxLT5lcnJvcnN0cik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF0YS0+bm9fcHJhZ21hX2hlYWRlcik7Ci0KLQkvKiBJZiB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZGF0YSBmcm9tIGEgcHJldmlvdXMgZmV0Y2gKLQkgICBhdHRlbXB0LCBvbmx5IGZldGNoIHRoZSBkYXRhIHdlIGRvbid0IGFscmVhZHkgaGF2ZS4gKi8KLQlpZiAocHJldl9wb3NuPjApIHsKLQkJaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkKLQkJCWZwcmludGYoc3RkZXJyLAotCQkJCSJSZXN1bWluZyBmZXRjaCBvZiBvYmplY3QgJXMgYXQgYnl0ZSAlbGRcbiIsCi0JCQkJaGV4LCBwcmV2X3Bvc24pOwotCQlzcHJpbnRmKHJhbmdlLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwcmV2X3Bvc24pOwotCQlyYW5nZV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChyYW5nZV9oZWFkZXIsIHJhbmdlKTsKLQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLAotCQkJCSBDVVJMT1BUX0hUVFBIRUFERVIsIHJhbmdlX2hlYWRlcik7Ci0JfQogCiAJLyogVHJ5IHRvIGdldCB0aGUgcmVxdWVzdCBzdGFydGVkLCBhYm9ydCB0aGUgcmVxdWVzdCBvbiBlcnJvciAqLwogCW9ial9yZXEtPnN0YXRlID0gQUNUSVZFOwogCWlmICghc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKIAkJb2JqX3JlcS0+c3RhdGUgPSBBQk9SVEVEOwotCQlvYmpfcmVxLT5zbG90ID0gTlVMTDsKLQkJY2xvc2Uob2JqX3JlcS0+bG9jYWwpOyBvYmpfcmVxLT5sb2NhbCA9IC0xOwotCQlmcmVlKG9ial9yZXEtPnVybCk7CisJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChyZXEpOwogCQlyZXR1cm47CiAJfQogfQogCiBzdGF0aWMgdm9pZCBmaW5pc2hfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxKQogewotCXN0cnVjdCBzdGF0IHN0OwotCi0JY2xvc2Uob2JqX3JlcS0+bG9jYWwpOyBvYmpfcmVxLT5sb2NhbCA9IC0xOwotCi0JaWYgKG9ial9yZXEtPmh0dHBfY29kZSA9PSA0MTYpIHsKLQkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiByZXF1ZXN0ZWQgcmFuZ2UgaW52YWxpZDsgd2UgbWF5IGFscmVhZHkgaGF2ZSBhbGwgdGhlIGRhdGEuXG4iKTsKLQl9IGVsc2UgaWYgKG9ial9yZXEtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7Ci0JCWlmIChzdGF0KG9ial9yZXEtPnRtcGZpbGUsICZzdCkgPT0gMCkKLQkJCWlmIChzdC5zdF9zaXplID09IDApCi0JCQkJdW5saW5rX29yX3dhcm4ob2JqX3JlcS0+dG1wZmlsZSk7CisJaWYgKGZpbmlzaF9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSkpCiAJCXJldHVybjsKLQl9CiAKLQlnaXRfaW5mbGF0ZV9lbmQoJm9ial9yZXEtPnN0cmVhbSk7Ci0JZ2l0X1NIQTFfRmluYWwob2JqX3JlcS0+cmVhbF9zaGExLCAmb2JqX3JlcS0+Yyk7Ci0JaWYgKG9ial9yZXEtPnpyZXQgIT0gWl9TVFJFQU1fRU5EKSB7Ci0JCXVubGlua19vcl93YXJuKG9ial9yZXEtPnRtcGZpbGUpOwotCQlyZXR1cm47Ci0JfQotCWlmIChoYXNoY21wKG9ial9yZXEtPnNoYTEsIG9ial9yZXEtPnJlYWxfc2hhMSkpIHsKLQkJdW5saW5rX29yX3dhcm4ob2JqX3JlcS0+dG1wZmlsZSk7Ci0JCXJldHVybjsKLQl9Ci0Jb2JqX3JlcS0+cmVuYW1lID0KLQkJbW92ZV90ZW1wX3RvX2ZpbGUob2JqX3JlcS0+dG1wZmlsZSwgb2JqX3JlcS0+ZmlsZW5hbWUpOwotCi0JaWYgKG9ial9yZXEtPnJlbmFtZSA9PSAwKQorCWlmIChvYmpfcmVxLT5yZXEtPnJlbmFtZSA9PSAwKQogCQl3YWxrZXJfc2F5KG9ial9yZXEtPndhbGtlciwgImdvdCAlc1xuIiwgc2hhMV90b19oZXgob2JqX3JlcS0+c2hhMSkpOwogfQogCkBAIC0yNjcsMTkgKzkyLDE2IEBACiAJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOwogCXN0cnVjdCBhbHRfYmFzZSAqYWx0ID0gZGF0YS0+YWx0OwogCi0Jb2JqX3JlcS0+Y3VybF9yZXN1bHQgPSBvYmpfcmVxLT5zbG90LT5jdXJsX3Jlc3VsdDsKLQlvYmpfcmVxLT5odHRwX2NvZGUgPSBvYmpfcmVxLT5zbG90LT5odHRwX2NvZGU7Ci0Jb2JqX3JlcS0+c2xvdCA9IE5VTEw7CisJcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSk7CiAJb2JqX3JlcS0+c3RhdGUgPSBDT01QTEVURTsKIAogCS8qIFVzZSBhbHRlcm5hdGVzIGlmIG5lY2Vzc2FyeSAqLwotCWlmIChtaXNzaW5nX3RhcmdldChvYmpfcmVxKSkgeworCWlmIChtaXNzaW5nX3RhcmdldChvYmpfcmVxLT5yZXEpKSB7CiAJCWZldGNoX2FsdGVybmF0ZXMod2Fsa2VyLCBhbHQtPmJhc2UpOwogCQlpZiAob2JqX3JlcS0+cmVwby0+bmV4dCAhPSBOVUxMKSB7CiAJCQlvYmpfcmVxLT5yZXBvID0KIAkJCQlvYmpfcmVxLT5yZXBvLT5uZXh0OwotCQkJY2xvc2Uob2JqX3JlcS0+bG9jYWwpOwotCQkJb2JqX3JlcS0+bG9jYWwgPSAtMTsKKwkJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxLT5yZXEpOwogCQkJc3RhcnRfb2JqZWN0X3JlcXVlc3Qod2Fsa2VyLCBvYmpfcmVxKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMjkyLDggKzExNCw4IEBACiB7CiAJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICplbnRyeSA9IG9iamVjdF9xdWV1ZV9oZWFkOwogCi0JaWYgKG9ial9yZXEtPmxvY2FsICE9IC0xKQotCQllcnJvcigiZmQgbGVha2FnZSBpbiByZWxlYXNlOiAlZCIsIG9ial9yZXEtPmxvY2FsKTsKKwlpZiAob2JqX3JlcS0+cmVxICE9TlVMTCAmJiBvYmpfcmVxLT5yZXEtPmxvY2FsZmlsZSAhPSAtMSkKKwkJZXJyb3IoImZkIGxlYWthZ2UgaW4gcmVsZWFzZTogJWQiLCBvYmpfcmVxLT5yZXEtPmxvY2FsZmlsZSk7CiAJaWYgKG9ial9yZXEgPT0gb2JqZWN0X3F1ZXVlX2hlYWQpIHsKIAkJb2JqZWN0X3F1ZXVlX2hlYWQgPSBvYmpfcmVxLT5uZXh0OwogCX0gZWxzZSB7CkBAIC0zMDMsNyArMTI1LDYgQEAKIAkJCWVudHJ5LT5uZXh0ID0gZW50cnktPm5leHQtPm5leHQ7CiAJfQogCi0JZnJlZShvYmpfcmVxLT51cmwpOwogCWZyZWUob2JqX3JlcSk7CiB9CiAKQEAgLTMzMSwyOCArMTUyLDIzIEBACiAJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpuZXdyZXE7CiAJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICp0YWlsOwogCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHdhbGtlci0+ZGF0YTsKLQljaGFyICpmaWxlbmFtZSA9IHNoYTFfZmlsZV9uYW1lKHNoYTEpOwogCiAJbmV3cmVxID0geG1hbGxvYyhzaXplb2YoKm5ld3JlcSkpOwogCW5ld3JlcS0+d2Fsa2VyID0gd2Fsa2VyOwogCWhhc2hjcHkobmV3cmVxLT5zaGExLCBzaGExKTsKIAluZXdyZXEtPnJlcG8gPSBkYXRhLT5hbHQ7Ci0JbmV3cmVxLT51cmwgPSBOVUxMOwotCW5ld3JlcS0+bG9jYWwgPSAtMTsKIAluZXdyZXEtPnN0YXRlID0gV0FJVElORzsKLQlzbnByaW50ZihuZXdyZXEtPmZpbGVuYW1lLCBzaXplb2YobmV3cmVxLT5maWxlbmFtZSksICIlcyIsIGZpbGVuYW1lKTsKLQlzbnByaW50ZihuZXdyZXEtPnRtcGZpbGUsIHNpemVvZihuZXdyZXEtPnRtcGZpbGUpLAotCQkgIiVzLnRlbXAiLCBmaWxlbmFtZSk7Ci0JbmV3cmVxLT5zbG90ID0gTlVMTDsKKwluZXdyZXEtPnJlcSA9IE5VTEw7CiAJbmV3cmVxLT5uZXh0ID0gTlVMTDsKIAorCWh0dHBfaXNfdmVyYm9zZSA9IHdhbGtlci0+Z2V0X3ZlcmJvc2VseTsKKwogCWlmIChvYmplY3RfcXVldWVfaGVhZCA9PSBOVUxMKSB7CiAJCW9iamVjdF9xdWV1ZV9oZWFkID0gbmV3cmVxOwogCX0gZWxzZSB7CiAJCXRhaWwgPSBvYmplY3RfcXVldWVfaGVhZDsKLQkJd2hpbGUgKHRhaWwtPm5leHQgIT0gTlVMTCkgeworCQl3aGlsZSAodGFpbC0+bmV4dCAhPSBOVUxMKQogCQkJdGFpbCA9IHRhaWwtPm5leHQ7Ci0JCX0KIAkJdGFpbC0+bmV4dCA9IG5ld3JlcTsKIAl9CiAKQEAgLTM2Miw5NSArMTc4LDYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW50IGZldGNoX2luZGV4KHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IGFsdF9iYXNlICpyZXBvLCB1bnNpZ25lZCBjaGFyICpzaGExKQotewotCWNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHNoYTEpOwotCWNoYXIgKmZpbGVuYW1lOwotCWNoYXIgKnVybDsKLQljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOwotCWxvbmcgcHJldl9wb3NuID0gMDsKLQljaGFyIHJhbmdlW1JBTkdFX0hFQURFUl9TSVpFXTsKLQlzdHJ1Y3QgY3VybF9zbGlzdCAqcmFuZ2VfaGVhZGVyID0gTlVMTDsKLQlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7Ci0KLQlGSUxFICppbmRleGZpbGU7Ci0Jc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Ci0Jc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOwotCi0JaWYgKGhhc19wYWNrX2luZGV4KHNoYTEpKQotCQlyZXR1cm4gMDsKLQotCWlmICh3YWxrZXItPmdldF92ZXJib3NlbHkpCi0JCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBpbmRleCBmb3IgcGFjayAlc1xuIiwgaGV4KTsKLQotCXVybCA9IHhtYWxsb2Moc3RybGVuKHJlcG8tPmJhc2UpICsgNjQpOwotCXNwcmludGYodXJsLCAiJXMvb2JqZWN0cy9wYWNrL3BhY2stJXMuaWR4IiwgcmVwby0+YmFzZSwgaGV4KTsKLQotCWZpbGVuYW1lID0gc2hhMV9wYWNrX2luZGV4X25hbWUoc2hhMSk7Ci0Jc25wcmludGYodG1wZmlsZSwgc2l6ZW9mKHRtcGZpbGUpLCAiJXMudGVtcCIsIGZpbGVuYW1lKTsKLQlpbmRleGZpbGUgPSBmb3Blbih0bXBmaWxlLCAiYSIpOwotCWlmICghaW5kZXhmaWxlKQotCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBvcGVuIGxvY2FsIGZpbGUgJXMgZm9yIHBhY2sgaW5kZXgiLAotCQkJICAgICB0bXBmaWxlKTsKLQotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKLQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIGluZGV4ZmlsZSk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZSk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF0YS0+bm9fcHJhZ21hX2hlYWRlcik7Ci0Jc2xvdC0+bG9jYWwgPSBpbmRleGZpbGU7Ci0KLQkvKiBJZiB0aGVyZSBpcyBkYXRhIHByZXNlbnQgZnJvbSBhIHByZXZpb3VzIHRyYW5zZmVyIGF0dGVtcHQsCi0JICAgcmVzdW1lIHdoZXJlIGl0IGxlZnQgb2ZmICovCi0JcHJldl9wb3NuID0gZnRlbGwoaW5kZXhmaWxlKTsKLQlpZiAocHJldl9wb3NuPjApIHsKLQkJaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkKLQkJCWZwcmludGYoc3RkZXJyLAotCQkJCSJSZXN1bWluZyBmZXRjaCBvZiBpbmRleCBmb3IgcGFjayAlcyBhdCBieXRlICVsZFxuIiwKLQkJCQloZXgsIHByZXZfcG9zbik7Ci0JCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7Ci0JCXJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHJhbmdlX2hlYWRlciwgcmFuZ2UpOwotCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgcmFuZ2VfaGVhZGVyKTsKLQl9Ci0KLQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOwotCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewotCQkJZmNsb3NlKGluZGV4ZmlsZSk7Ci0JCQlzbG90LT5sb2NhbCA9IE5VTEw7Ci0JCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBnZXQgcGFjayBpbmRleCAlc1xuJXMiLCB1cmwsCi0JCQkJICAgICBjdXJsX2Vycm9yc3RyKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWZjbG9zZShpbmRleGZpbGUpOwotCQlzbG90LT5sb2NhbCA9IE5VTEw7Ci0JCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKLQl9Ci0KLQlmY2xvc2UoaW5kZXhmaWxlKTsKLQlzbG90LT5sb2NhbCA9IE5VTEw7Ci0KLQlyZXR1cm4gbW92ZV90ZW1wX3RvX2ZpbGUodG1wZmlsZSwgZmlsZW5hbWUpOwotfQotCi1zdGF0aWMgaW50IHNldHVwX2luZGV4KHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IGFsdF9iYXNlICpyZXBvLCB1bnNpZ25lZCBjaGFyICpzaGExKQotewotCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXdfcGFjazsKLQlpZiAoaGFzX3BhY2tfZmlsZShzaGExKSkKLQkJcmV0dXJuIDA7IC8qIGRvbid0IGxpc3QgdGhpcyBhcyBzb21ldGhpbmcgd2UgY2FuIGdldCAqLwotCi0JaWYgKGZldGNoX2luZGV4KHdhbGtlciwgcmVwbywgc2hhMSkpCi0JCXJldHVybiAtMTsKLQotCW5ld19wYWNrID0gcGFyc2VfcGFja19pbmRleChzaGExKTsKLQlpZiAoIW5ld19wYWNrKQotCQlyZXR1cm4gLTE7IC8qIHBhcnNlX3BhY2tfaW5kZXgoKSBhbHJlYWR5IGlzc3VlZCBlcnJvciBtZXNzYWdlICovCi0JbmV3X3BhY2stPm5leHQgPSByZXBvLT5wYWNrczsKLQlyZXBvLT5wYWNrcyA9IG5ld19wYWNrOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBwcm9jZXNzX2FsdGVybmF0ZXNfcmVzcG9uc2Uodm9pZCAqY2FsbGJhY2tfZGF0YSkKIHsKIAlzdHJ1Y3QgYWx0ZXJuYXRlc19yZXF1ZXN0ICphbHRfcmVxID0KQEAgLTUwNyw3ICsyMzQsOCBAQAogCQkJc3RydWN0IGFsdF9iYXNlICpuZXdhbHQ7CiAJCQljaGFyICp0YXJnZXQgPSBOVUxMOwogCQkJaWYgKGRhdGFbaV0gPT0gJy8nKSB7Ci0JCQkJLyogVGhpcyBjb3VudHMKKwkJCQkvKgorCQkJCSAqIFRoaXMgY291bnRzCiAJCQkJICogaHR0cDovL2dpdC5ob3N0L3B1Yi9zY20vbGludXguZ2l0LwogCQkJCSAqIC0tLS0tLS0tLS0taGVyZV4KIAkJCQkgKiBzbyBtZW1jcHkoZHN0LCBiYXNlLCBzZXJ2ZXJsZW4pIHdpbGwKQEAgLTUyMCw3ICsyNDgsOCBAQAogCQkJCQlva2F5ID0gMTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKCFtZW1jbXAoZGF0YSArIGksICIuLi8iLCAzKSkgewotCQkJCS8qIFJlbGF0aXZlIFVSTDsgY2hvcCB0aGUgY29ycmVzcG9uZGluZworCQkJCS8qCisJCQkJICogUmVsYXRpdmUgVVJMOyBjaG9wIHRoZSBjb3JyZXNwb25kaW5nCiAJCQkJICogbnVtYmVyIG9mIHN1YnBhdGggZnJvbSBiYXNlIChhbmQgLi4vCiAJCQkJICogZnJvbSBkYXRhKSwgYW5kIGNvbmNhdGVuYXRlIHRoZSByZXN1bHQuCiAJCQkJICoKQEAgLTU0OSw3ICsyNzgsNyBAQAogCQkJCX0KIAkJCQkvKiBJZiB0aGUgc2VydmVyIGdvdCByZW1vdmVkLCBnaXZlIHVwLiAqLwogCQkJCW9rYXkgPSBzdHJjaHIoYmFzZSwgJzonKSAtIGJhc2UgKyAzIDwKLQkJCQkJc2VydmVybGVuOworCQkJCSAgICAgICBzZXJ2ZXJsZW47CiAJCQl9IGVsc2UgaWYgKGFsdF9yZXEtPmh0dHBfc3BlY2lmaWMpIHsKIAkJCQljaGFyICpjb2xvbiA9IHN0cmNocihkYXRhICsgaSwgJzonKTsKIAkJCQljaGFyICpzbGFzaCA9IHN0cmNocihkYXRhICsgaSwgJy8nKTsKQEAgLTU5Myw5ICszMjIsMTEgQEAKIAlzdHJ1Y3QgYWx0ZXJuYXRlc19yZXF1ZXN0IGFsdF9yZXE7CiAJc3RydWN0IHdhbGtlcl9kYXRhICpjZGF0YSA9IHdhbGtlci0+ZGF0YTsKIAotCS8qIElmIGFub3RoZXIgcmVxdWVzdCBoYXMgYWxyZWFkeSBzdGFydGVkIGZldGNoaW5nIGFsdGVybmF0ZXMsCi0JICAgd2FpdCBmb3IgdGhlbSB0byBhcnJpdmUgYW5kIHJldHVybiB0byBwcm9jZXNzaW5nIHRoaXMgcmVxdWVzdCdzCi0JICAgY3VybCBtZXNzYWdlICovCisJLyoKKwkgKiBJZiBhbm90aGVyIHJlcXVlc3QgaGFzIGFscmVhZHkgc3RhcnRlZCBmZXRjaGluZyBhbHRlcm5hdGVzLAorCSAqIHdhaXQgZm9yIHRoZW0gdG8gYXJyaXZlIGFuZCByZXR1cm4gdG8gcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QncworCSAqIGN1cmwgbWVzc2FnZQorCSAqLwogI2lmZGVmIFVTRV9DVVJMX01VTFRJCiAJd2hpbGUgKGNkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9PSAwKSB7CiAJCXN0ZXBfYWN0aXZlX3Nsb3RzKCk7CkBAIC02MTUsOCArMzQ2LDEwIEBACiAJdXJsID0geG1hbGxvYyhzdHJsZW4oYmFzZSkgKyAzMSk7CiAJc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIiwgYmFzZSk7CiAKLQkvKiBVc2UgYSBjYWxsYmFjayB0byBwcm9jZXNzIHRoZSByZXN1bHQsIHNpbmNlIGFub3RoZXIgcmVxdWVzdAotCSAgIG1heSBmYWlsIGFuZCBuZWVkIHRvIGhhdmUgYWx0ZXJuYXRlcyBsb2FkZWQgYmVmb3JlIGNvbnRpbnVpbmcgKi8KKwkvKgorCSAqIFVzZSBhIGNhbGxiYWNrIHRvIHByb2Nlc3MgdGhlIHJlc3VsdCwgc2luY2UgYW5vdGhlciByZXF1ZXN0CisJICogbWF5IGZhaWwgYW5kIG5lZWQgdG8gaGF2ZSBhbHRlcm5hdGVzIGxvYWRlZCBiZWZvcmUgY29udGludWluZworCSAqLwogCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKIAlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19hbHRlcm5hdGVzX3Jlc3BvbnNlOwogCWFsdF9yZXEud2Fsa2VyID0gd2Fsa2VyOwpAQCAtNjQzLDE1ICszNzYsNyBAQAogCiBzdGF0aWMgaW50IGZldGNoX2luZGljZXMoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG8pCiB7Ci0JdW5zaWduZWQgY2hhciBzaGExWzIwXTsKLQljaGFyICp1cmw7Ci0Jc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKLQljaGFyICpkYXRhOwotCWludCBpID0gMDsKLQlpbnQgcmV0ID0gMDsKLQotCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlpbnQgcmV0OwogCiAJaWYgKHJlcG8tPmdvdF9pbmRpY2VzKQogCQlyZXR1cm4gMDsKQEAgLTY1OSw3NiArMzg0LDI2IEBACiAJaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkKIAkJZnByaW50ZihzdGRlcnIsICJHZXR0aW5nIHBhY2sgbGlzdCBmb3IgJXNcbiIsIHJlcG8tPmJhc2UpOwogCi0JdXJsID0geG1hbGxvYyhzdHJsZW4ocmVwby0+YmFzZSkgKyAyMSk7Ci0Jc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL2luZm8vcGFja3MiLCByZXBvLT5iYXNlKTsKLQotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKLQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfYnVmZmVyKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBOVUxMKTsKLQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOwotCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewotCQkJaWYgKG1pc3NpbmdfdGFyZ2V0KCZyZXN1bHRzKSkgewotCQkJCXJlcG8tPmdvdF9pbmRpY2VzID0gMTsKLQkJCQlnb3RvIGNsZWFudXA7Ci0JCQl9IGVsc2UgewotCQkJCXJlcG8tPmdvdF9pbmRpY2VzID0gMDsKLQkJCQlyZXQgPSBlcnJvcigiJXMiLCBjdXJsX2Vycm9yc3RyKTsKLQkJCQlnb3RvIGNsZWFudXA7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgeworCXN3aXRjaCAoaHR0cF9nZXRfaW5mb19wYWNrcyhyZXBvLT5iYXNlLCAmcmVwby0+cGFja3MpKSB7CisJY2FzZSBIVFRQX09LOgorCWNhc2UgSFRUUF9NSVNTSU5HX1RBUkdFVDoKKwkJcmVwby0+Z290X2luZGljZXMgPSAxOworCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgogCQlyZXBvLT5nb3RfaW5kaWNlcyA9IDA7Ci0JCXJldCA9IGVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOwotCQlnb3RvIGNsZWFudXA7CisJCXJldCA9IC0xOwogCX0KIAotCWRhdGEgPSBidWZmZXIuYnVmOwotCXdoaWxlIChpIDwgYnVmZmVyLmxlbikgewotCQlzd2l0Y2ggKGRhdGFbaV0pIHsKLQkJY2FzZSAnUCc6Ci0JCQlpKys7Ci0JCQlpZiAoaSArIDUyIDw9IGJ1ZmZlci5sZW4gJiYKLQkJCSAgICAhcHJlZml4Y21wKGRhdGEgKyBpLCAiIHBhY2stIikgJiYKLQkJCSAgICAhcHJlZml4Y21wKGRhdGEgKyBpICsgNDYsICIucGFja1xuIikpIHsKLQkJCQlnZXRfc2hhMV9oZXgoZGF0YSArIGkgKyA2LCBzaGExKTsKLQkJCQlzZXR1cF9pbmRleCh3YWxrZXIsIHJlcG8sIHNoYTEpOwotCQkJCWkgKz0gNTE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCWRlZmF1bHQ6Ci0JCQl3aGlsZSAoaSA8IGJ1ZmZlci5sZW4gJiYgZGF0YVtpXSAhPSAnXG4nKQotCQkJCWkrKzsKLQkJfQotCQlpKys7Ci0JfQotCi0JcmVwby0+Z290X2luZGljZXMgPSAxOwotY2xlYW51cDoKLQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKLQlmcmVlKHVybCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBmZXRjaF9wYWNrKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IGFsdF9iYXNlICpyZXBvLCB1bnNpZ25lZCBjaGFyICpzaGExKQogewotCWNoYXIgKnVybDsKIAlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0OwotCXN0cnVjdCBwYWNrZWRfZ2l0ICoqbHN0OwotCUZJTEUgKnBhY2tmaWxlOwotCWNoYXIgKmZpbGVuYW1lOwotCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07CiAJaW50IHJldDsKLQlsb25nIHByZXZfcG9zbiA9IDA7Ci0JY2hhciByYW5nZVtSQU5HRV9IRUFERVJfU0laRV07Ci0Jc3RydWN0IGN1cmxfc2xpc3QgKnJhbmdlX2hlYWRlciA9IE5VTEw7Ci0Jc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOwotCi0Jc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOworCXN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcTsKIAogCWlmIChmZXRjaF9pbmRpY2VzKHdhbGtlciwgcmVwbykpCiAJCXJldHVybiAtMTsKQEAgLTc0Myw4MyArNDE4LDM3IEBACiAJCQlzaGExX3RvX2hleChzaGExKSk7CiAJfQogCi0JdXJsID0geG1hbGxvYyhzdHJsZW4ocmVwby0+YmFzZSkgKyA2NSk7Ci0Jc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL3BhY2svcGFjay0lcy5wYWNrIiwKLQkJcmVwby0+YmFzZSwgc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSk7CisJcHJlcSA9IG5ld19odHRwX3BhY2tfcmVxdWVzdCh0YXJnZXQsIHJlcG8tPmJhc2UpOworCWlmIChwcmVxID09IE5VTEwpCisJCWdvdG8gYWJvcnQ7CisJcHJlcS0+bHN0ID0gJnJlcG8tPnBhY2tzOworCXByZXEtPnNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKIAotCWZpbGVuYW1lID0gc2hhMV9wYWNrX25hbWUodGFyZ2V0LT5zaGExKTsKLQlzbnByaW50Zih0bXBmaWxlLCBzaXplb2YodG1wZmlsZSksICIlcy50ZW1wIiwgZmlsZW5hbWUpOwotCXBhY2tmaWxlID0gZm9wZW4odG1wZmlsZSwgImEiKTsKLQlpZiAoIXBhY2tmaWxlKQotCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBvcGVuIGxvY2FsIGZpbGUgJXMgZm9yIHBhY2siLAotCQkJICAgICB0bXBmaWxlKTsKLQotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKLQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIHBhY2tmaWxlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBkYXRhLT5ub19wcmFnbWFfaGVhZGVyKTsKLQlzbG90LT5sb2NhbCA9IHBhY2tmaWxlOwotCi0JLyogSWYgdGhlcmUgaXMgZGF0YSBwcmVzZW50IGZyb20gYSBwcmV2aW91cyB0cmFuc2ZlciBhdHRlbXB0LAotCSAgIHJlc3VtZSB3aGVyZSBpdCBsZWZ0IG9mZiAqLwotCXByZXZfcG9zbiA9IGZ0ZWxsKHBhY2tmaWxlKTsKLQlpZiAocHJldl9wb3NuPjApIHsKLQkJaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkKLQkJCWZwcmludGYoc3RkZXJyLAotCQkJCSJSZXN1bWluZyBmZXRjaCBvZiBwYWNrICVzIGF0IGJ5dGUgJWxkXG4iLAotCQkJCXNoYTFfdG9faGV4KHRhcmdldC0+c2hhMSksIHByZXZfcG9zbik7Ci0JCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7Ci0JCXJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHJhbmdlX2hlYWRlciwgcmFuZ2UpOwotCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgcmFuZ2VfaGVhZGVyKTsKLQl9Ci0KLQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCWlmIChzdGFydF9hY3RpdmVfc2xvdChwcmVxLT5zbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3QocHJlcS0+c2xvdCk7CiAJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7Ci0JCQlmY2xvc2UocGFja2ZpbGUpOwotCQkJc2xvdC0+bG9jYWwgPSBOVUxMOwotCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgZmlsZSAlc1xuJXMiLCB1cmwsCi0JCQkJICAgICBjdXJsX2Vycm9yc3RyKTsKKwkJCWVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgZmlsZSAlc1xuJXMiLCBwcmVxLT51cmwsCisJCQkgICAgICBjdXJsX2Vycm9yc3RyKTsKKwkJCWdvdG8gYWJvcnQ7CiAJCX0KIAl9IGVsc2UgewotCQlmY2xvc2UocGFja2ZpbGUpOwotCQlzbG90LT5sb2NhbCA9IE5VTEw7Ci0JCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKKwkJZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7CisJCWdvdG8gYWJvcnQ7CiAJfQogCi0JdGFyZ2V0LT5wYWNrX3NpemUgPSBmdGVsbChwYWNrZmlsZSk7Ci0JZmNsb3NlKHBhY2tmaWxlKTsKLQlzbG90LT5sb2NhbCA9IE5VTEw7Ci0KLQlyZXQgPSBtb3ZlX3RlbXBfdG9fZmlsZSh0bXBmaWxlLCBmaWxlbmFtZSk7CisJcmV0ID0gZmluaXNoX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOworCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWxzdCA9ICZyZXBvLT5wYWNrczsKLQl3aGlsZSAoKmxzdCAhPSB0YXJnZXQpCi0JCWxzdCA9ICYoKCpsc3QpLT5uZXh0KTsKLQkqbHN0ID0gKCpsc3QpLT5uZXh0OwotCi0JaWYgKHZlcmlmeV9wYWNrKHRhcmdldCkpCi0JCXJldHVybiAtMTsKLQlpbnN0YWxsX3BhY2tlZF9naXQodGFyZ2V0KTsKLQogCXJldHVybiAwOworCithYm9ydDoKKwlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyB2b2lkIGFib3J0X29iamVjdF9yZXF1ZXN0KHN0cnVjdCBvYmplY3RfcmVxdWVzdCAqb2JqX3JlcSkKIHsKLQlpZiAob2JqX3JlcS0+bG9jYWwgPj0gMCkgewotCQljbG9zZShvYmpfcmVxLT5sb2NhbCk7Ci0JCW9ial9yZXEtPmxvY2FsID0gLTE7Ci0JfQotCXVubGlua19vcl93YXJuKG9ial9yZXEtPnRtcGZpbGUpOwotCWlmIChvYmpfcmVxLT5zbG90KSB7Ci0JCXJlbGVhc2VfYWN0aXZlX3Nsb3Qob2JqX3JlcS0+c2xvdCk7Ci0JCW9ial9yZXEtPnNsb3QgPSBOVUxMOwotCX0KIAlyZWxlYXNlX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOwogfQogCkBAIC04MjgsNiArNDU3LDcgQEAKIAljaGFyICpoZXggPSBzaGExX3RvX2hleChzaGExKTsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEgPSBvYmplY3RfcXVldWVfaGVhZDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqcmVxOwogCiAJd2hpbGUgKG9ial9yZXEgIT0gTlVMTCAmJiBoYXNoY21wKG9ial9yZXEtPnNoYTEsIHNoYTEpKQogCQlvYmpfcmVxID0gb2JqX3JlcS0+bmV4dDsKQEAgLTgzNSw0NSArNDY1LDU1IEBACiAJCXJldHVybiBlcnJvcigiQ291bGRuJ3QgZmluZCByZXF1ZXN0IGZvciAlcyBpbiB0aGUgcXVldWUiLCBoZXgpOwogCiAJaWYgKGhhc19zaGExX2ZpbGUob2JqX3JlcS0+c2hhMSkpIHsKKwkJaWYgKG9ial9yZXEtPnJlcSAhPSBOVUxMKQorCQkJYWJvcnRfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxLT5yZXEpOwogCQlhYm9ydF9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAjaWZkZWYgVVNFX0NVUkxfTVVMVEkKLQl3aGlsZSAob2JqX3JlcS0+c3RhdGUgPT0gV0FJVElORykgeworCXdoaWxlIChvYmpfcmVxLT5zdGF0ZSA9PSBXQUlUSU5HKQogCQlzdGVwX2FjdGl2ZV9zbG90cygpOwotCX0KICNlbHNlCiAJc3RhcnRfb2JqZWN0X3JlcXVlc3Qod2Fsa2VyLCBvYmpfcmVxKTsKICNlbmRpZgogCi0Jd2hpbGUgKG9ial9yZXEtPnN0YXRlID09IEFDVElWRSkgewotCQlydW5fYWN0aXZlX3Nsb3Qob2JqX3JlcS0+c2xvdCk7Ci0JfQotCWlmIChvYmpfcmVxLT5sb2NhbCAhPSAtMSkgewotCQljbG9zZShvYmpfcmVxLT5sb2NhbCk7IG9ial9yZXEtPmxvY2FsID0gLTE7CisJLyoKKwkgKiBvYmpfcmVxLT5yZXEgbWlnaHQgY2hhbmdlIHdoZW4gZmV0Y2hpbmcgYWx0ZXJuYXRlcyBpbiB0aGUgY2FsbGJhY2sKKwkgKiBwcm9jZXNzX29iamVjdF9yZXNwb25zZTsgdGhlcmVmb3JlLCB0aGUgInNob3J0Y3V0IiB2YXJpYWJsZSwgcmVxLAorCSAqIGlzIHVzZWQgb25seSBhZnRlciB3ZSdyZSBkb25lIHdpdGggc2xvdHMuCisJICovCisJd2hpbGUgKG9ial9yZXEtPnN0YXRlID09IEFDVElWRSkKKwkJcnVuX2FjdGl2ZV9zbG90KG9ial9yZXEtPnJlcS0+c2xvdCk7CisKKwlyZXEgPSBvYmpfcmVxLT5yZXE7CisKKwlpZiAocmVxLT5sb2NhbGZpbGUgIT0gLTEpIHsKKwkJY2xvc2UocmVxLT5sb2NhbGZpbGUpOworCQlyZXEtPmxvY2FsZmlsZSA9IC0xOwogCX0KIAogCWlmIChvYmpfcmVxLT5zdGF0ZSA9PSBBQk9SVEVEKSB7CiAJCXJldCA9IGVycm9yKCJSZXF1ZXN0IGZvciAlcyBhYm9ydGVkIiwgaGV4KTsKLQl9IGVsc2UgaWYgKG9ial9yZXEtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LICYmCi0JCSAgIG9ial9yZXEtPmh0dHBfY29kZSAhPSA0MTYpIHsKLQkJaWYgKG1pc3NpbmdfdGFyZ2V0KG9ial9yZXEpKQorCX0gZWxzZSBpZiAocmVxLT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSyAmJgorCQkgICByZXEtPmh0dHBfY29kZSAhPSA0MTYpIHsKKwkJaWYgKG1pc3NpbmdfdGFyZ2V0KHJlcSkpCiAJCQlyZXQgPSAtMTsgLyogQmUgc2lsZW50LCBpdCBpcyBwcm9iYWJseSBpbiBhIHBhY2suICovCiAJCWVsc2UKIAkJCXJldCA9IGVycm9yKCIlcyAoY3VybF9yZXN1bHQgPSAlZCwgaHR0cF9jb2RlID0gJWxkLCBzaGExID0gJXMpIiwKLQkJCQkgICAgb2JqX3JlcS0+ZXJyb3JzdHIsIG9ial9yZXEtPmN1cmxfcmVzdWx0LAotCQkJCSAgICBvYmpfcmVxLT5odHRwX2NvZGUsIGhleCk7Ci0JfSBlbHNlIGlmIChvYmpfcmVxLT56cmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQkJCSAgICByZXEtPmVycm9yc3RyLCByZXEtPmN1cmxfcmVzdWx0LAorCQkJCSAgICByZXEtPmh0dHBfY29kZSwgaGV4KTsKKwl9IGVsc2UgaWYgKHJlcS0+enJldCAhPSBaX1NUUkVBTV9FTkQpIHsKIAkJd2Fsa2VyLT5jb3JydXB0X29iamVjdF9mb3VuZCsrOwotCQlyZXQgPSBlcnJvcigiRmlsZSAlcyAoJXMpIGNvcnJ1cHQiLCBoZXgsIG9ial9yZXEtPnVybCk7Ci0JfSBlbHNlIGlmIChoYXNoY21wKG9ial9yZXEtPnNoYTEsIG9ial9yZXEtPnJlYWxfc2hhMSkpIHsKKwkJcmV0ID0gZXJyb3IoIkZpbGUgJXMgKCVzKSBjb3JydXB0IiwgaGV4LCByZXEtPnVybCk7CisJfSBlbHNlIGlmIChoYXNoY21wKG9ial9yZXEtPnNoYTEsIHJlcS0+cmVhbF9zaGExKSkgewogCQlyZXQgPSBlcnJvcigiRmlsZSAlcyBoYXMgYmFkIGhhc2giLCBoZXgpOwotCX0gZWxzZSBpZiAob2JqX3JlcS0+cmVuYW1lIDwgMCkgeworCX0gZWxzZSBpZiAocmVxLT5yZW5hbWUgPCAwKSB7CiAJCXJldCA9IGVycm9yKCJ1bmFibGUgdG8gd3JpdGUgc2hhMSBmaWxlbmFtZSAlcyIsCi0JCQkgICAgb2JqX3JlcS0+ZmlsZW5hbWUpOworCQkJICAgIHJlcS0+ZmlsZW5hbWUpOwogCX0KIAorCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChyZXEpOwogCXJlbGVhc2Vfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTkwMywxMCArNTQzLDcgQEAKIAogc3RhdGljIHZvaWQgY2xlYW51cChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpCiB7Ci0Jc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOwogCWh0dHBfY2xlYW51cCgpOwotCi0JY3VybF9zbGlzdF9mcmVlX2FsbChkYXRhLT5ub19wcmFnbWFfaGVhZGVyKTsKIH0KIAogc3RydWN0IHdhbGtlciAqZ2V0X2h0dHBfd2Fsa2VyKGNvbnN0IGNoYXIgKnVybCwgc3RydWN0IHJlbW90ZSAqcmVtb3RlKQpAQCAtOTE3LDggKzU1NCw2IEBACiAKIAlodHRwX2luaXQocmVtb3RlKTsKIAotCWRhdGEtPm5vX3ByYWdtYV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChOVUxMLCAiUHJhZ21hOiIpOwotCiAJZGF0YS0+YWx0ID0geG1hbGxvYyhzaXplb2YoKmRhdGEtPmFsdCkpOwogCWRhdGEtPmFsdC0+YmFzZSA9IHhtYWxsb2Moc3RybGVuKHVybCkgKyAxKTsKIAlzdHJjcHkoZGF0YS0+YWx0LT5iYXNlLCB1cmwpOwpkaWZmIC0tZ2l0IGEvaHR0cC5jIGIvaHR0cC5jCmluZGV4IGI1MzIzYTYuLjE1OTI2ZDggMTAwNjQ0Ci0tLSBhL2h0dHAuYworKysgYi9odHRwLmMKQEAgLTEsNyArMSw5IEBACiAjaW5jbHVkZSAiaHR0cC5oIgorI2luY2x1ZGUgInBhY2suaCIKIAogaW50IGRhdGFfcmVjZWl2ZWQ7CiBpbnQgYWN0aXZlX3JlcXVlc3RzOworaW50IGh0dHBfaXNfdmVyYm9zZTsKIAogI2lmZGVmIFVTRV9DVVJMX01VTFRJCiBzdGF0aWMgaW50IG1heF9yZXF1ZXN0cyA9IC0xOwpAQCAtMTAsNiArMTIsMTAgQEAKICNpZm5kZWYgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQogc3RhdGljIENVUkwgKmN1cmxfZGVmYXVsdDsKICNlbmRpZgorCisjZGVmaW5lIFBSRVZfQlVGX1NJWkUgNDA5NgorI2RlZmluZSBSQU5HRV9IRUFERVJfU0laRSAzMAorCiBjaGFyIGN1cmxfZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKIAogc3RhdGljIGludCBjdXJsX3NzbF92ZXJpZnkgPSAtMTsKQEAgLTI3LDcgKzMzLDE5IEBACiBzdGF0aWMgY29uc3QgY2hhciAqY3VybF9odHRwX3Byb3h5Owogc3RhdGljIGNoYXIgKnVzZXJfbmFtZSwgKnVzZXJfcGFzczsKIAorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzE3MDAKKy8qIFVzZSBDVVJMT1BUX0tFWVBBU1NXRCBhcyBpcyAqLworI2VsaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMworI2RlZmluZSBDVVJMT1BUX0tFWVBBU1NXRCBDVVJMT1BUX1NTTEtFWVBBU1NXRAorI2Vsc2UKKyNkZWZpbmUgQ1VSTE9QVF9LRVlQQVNTV0QgQ1VSTE9QVF9TU0xDRVJUUEFTU1dECisjZW5kaWYKKworc3RhdGljIGNoYXIgKnNzbF9jZXJ0X3Bhc3N3b3JkOworc3RhdGljIGludCBzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZDsKKwogc3RhdGljIHN0cnVjdCBjdXJsX3NsaXN0ICpwcmFnbWFfaGVhZGVyOworc3RhdGljIHN0cnVjdCBjdXJsX3NsaXN0ICpub19wcmFnbWFfaGVhZGVyOwogCiBzdGF0aWMgc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKmFjdGl2ZV9xdWV1ZV9oZWFkOwogCkBAIC0xMjksNiArMTQ3LDExIEBACiAjZW5kaWYKIAlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjYWluZm8iLCB2YXIpKQogCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnNzbF9jYWluZm8sIHZhciwgdmFsdWUpOworCWlmICghc3RyY21wKCJodHRwLnNzbGNlcnRwYXNzd29yZHByb3RlY3RlZCIsIHZhcikpIHsKKwkJaWYgKGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSkKKwkJCXNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkID0gMTsKKwkJcmV0dXJuIDA7CisJfQogI2lmZGVmIFVTRV9DVVJMX01VTFRJCiAJaWYgKCFzdHJjbXAoImh0dHAubWF4cmVxdWVzdHMiLCB2YXIpKSB7CiAJCW1heF9yZXF1ZXN0cyA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOwpAQCAtMTY3LDYgKzE5MCwyMiBAQAogCX0KIH0KIAorc3RhdGljIGludCBoYXNfY2VydF9wYXNzd29yZCh2b2lkKQoreworCWlmIChzc2xfY2VydF9wYXNzd29yZCAhPSBOVUxMKQorCQlyZXR1cm4gMTsKKwlpZiAoc3NsX2NlcnQgPT0gTlVMTCB8fCBzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCAhPSAxKQorCQlyZXR1cm4gMDsKKwkvKiBPbmx5IHByb21wdCB0aGUgdXNlciBvbmNlLiAqLworCXNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkID0gLTE7CisJc3NsX2NlcnRfcGFzc3dvcmQgPSBnZXRwYXNzKCJDZXJ0aWZpY2F0ZSBQYXNzd29yZDogIik7CisJaWYgKHNzbF9jZXJ0X3Bhc3N3b3JkICE9IE5VTEwpIHsKKwkJc3NsX2NlcnRfcGFzc3dvcmQgPSB4c3RyZHVwKHNzbF9jZXJ0X3Bhc3N3b3JkKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlCisJCXJldHVybiAwOworfQorCiBzdGF0aWMgQ1VSTCAqZ2V0X2N1cmxfaGFuZGxlKHZvaWQpCiB7CiAJQ1VSTCAqcmVzdWx0ID0gY3VybF9lYXN5X2luaXQoKTsKQEAgLTE4OSw2ICsyMjgsOCBAQAogCiAJaWYgKHNzbF9jZXJ0ICE9IE5VTEwpCiAJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTENFUlQsIHNzbF9jZXJ0KTsKKwlpZiAoaGFzX2NlcnRfcGFzc3dvcmQoKSkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfS0VZUEFTU1dELCBzc2xfY2VydF9wYXNzd29yZCk7CiAjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMwogCWlmIChzc2xfa2V5ICE9IE5VTEwpCiAJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTEtFWSwgc3NsX2tleSk7CkBAIC0yNzYsNiArMzE3LDggQEAKIAljaGFyICpsb3dfc3BlZWRfbGltaXQ7CiAJY2hhciAqbG93X3NwZWVkX3RpbWU7CiAKKwlodHRwX2lzX3ZlcmJvc2UgPSAwOworCiAJZ2l0X2NvbmZpZyhodHRwX29wdGlvbnMsIE5VTEwpOwogCiAJY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOwpAQCAtMjg0LDYgKzMyNyw3IEBACiAJCWN1cmxfaHR0cF9wcm94eSA9IHhzdHJkdXAocmVtb3RlLT5odHRwX3Byb3h5KTsKIAogCXByYWdtYV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChwcmFnbWFfaGVhZGVyLCAiUHJhZ21hOiBuby1jYWNoZSIpOworCW5vX3ByYWdtYV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChub19wcmFnbWFfaGVhZGVyLCAiUHJhZ21hOiIpOwogCiAjaWZkZWYgVVNFX0NVUkxfTVVMVEkKIAl7CkBAIC0zMjksOCArMzczLDEzIEBACiAJaWYgKGdldGVudigiR0lUX0NVUkxfRlRQX05PX0VQU1YiKSkKIAkJY3VybF9mdHBfbm9fZXBzdiA9IDE7CiAKLQlpZiAocmVtb3RlICYmIHJlbW90ZS0+dXJsICYmIHJlbW90ZS0+dXJsWzBdKQorCWlmIChyZW1vdGUgJiYgcmVtb3RlLT51cmwgJiYgcmVtb3RlLT51cmxbMF0pIHsKIAkJaHR0cF9hdXRoX2luaXQocmVtb3RlLT51cmxbMF0pOworCQlpZiAoIXNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkICYmCisJCSAgICBnZXRlbnYoIkdJVF9TU0xfQ0VSVF9QQVNTV09SRF9QUk9URUNURUQiKSAmJgorCQkgICAgIXByZWZpeGNtcChyZW1vdGUtPnVybFswXSwgImh0dHBzOi8vIikpCisJCQlzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCA9IDE7CisJfQogCiAjaWZuZGVmIE5PX0NVUkxfRUFTWV9EVVBIQU5ETEUKIAljdXJsX2RlZmF1bHQgPSBnZXRfY3VybF9oYW5kbGUoKTsKQEAgLTM2NiwxMCArNDE1LDIwIEBACiAJY3VybF9zbGlzdF9mcmVlX2FsbChwcmFnbWFfaGVhZGVyKTsKIAlwcmFnbWFfaGVhZGVyID0gTlVMTDsKIAorCWN1cmxfc2xpc3RfZnJlZV9hbGwobm9fcHJhZ21hX2hlYWRlcik7CisJbm9fcHJhZ21hX2hlYWRlciA9IE5VTEw7CisKIAlpZiAoY3VybF9odHRwX3Byb3h5KSB7CiAJCWZyZWUoKHZvaWQgKiljdXJsX2h0dHBfcHJveHkpOwogCQljdXJsX2h0dHBfcHJveHkgPSBOVUxMOwogCX0KKworCWlmIChzc2xfY2VydF9wYXNzd29yZCAhPSBOVUxMKSB7CisJCW1lbXNldChzc2xfY2VydF9wYXNzd29yZCwgMCwgc3RybGVuKHNzbF9jZXJ0X3Bhc3N3b3JkKSk7CisJCWZyZWUoc3NsX2NlcnRfcGFzc3dvcmQpOworCQlzc2xfY2VydF9wYXNzd29yZCA9IE5VTEw7CisJfQorCXNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkID0gMDsKIH0KIAogc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKmdldF9hY3RpdmVfc2xvdCh2b2lkKQpAQCAtNjExLDYgKzY3MCw3IEBACiAJCX0KIH0KIAorLyogSGVscGVycyBmb3IgbW9kaWZ5aW5nIGFuZCBjcmVhdGluZyBVUkxzICovCiBzdGF0aWMgaW5saW5lIGludCBuZWVkc19xdW90ZShpbnQgY2gpCiB7CiAJaWYgKCgoY2ggPj0gJ0EnKSAmJiAoY2ggPD0gJ1onKSkKQEAgLTYzMSwxNSArNjkxLDIwIEBACiAJCXJldHVybiAnQScgKyB2IC0gMTA7CiB9CiAKK3N0YXRpYyB2b2lkIGVuZF91cmxfd2l0aF9zbGFzaChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnVybCkKK3sKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgdXJsKTsKKwlpZiAoYnVmLT5sZW4gJiYgYnVmLT5idWZbYnVmLT5sZW4gLSAxXSAhPSAnLycpCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiLyIpOworfQorCiBzdGF0aWMgY2hhciAqcXVvdGVfcmVmX3VybChjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpyZWYpCiB7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAljb25zdCBjaGFyICpjcDsKIAlpbnQgY2g7CiAKLQlzdHJidWZfYWRkc3RyKCZidWYsIGJhc2UpOwotCWlmIChidWYubGVuICYmIGJ1Zi5idWZbYnVmLmxlbiAtIDFdICE9ICcvJyAmJiAqcmVmICE9ICcvJykKLQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiLyIpOworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlKTsKIAogCWZvciAoY3AgPSByZWY7IChjaCA9ICpjcCkgIT0gMDsgY3ArKykKIAkJaWYgKG5lZWRzX3F1b3RlKGNoKSkKQEAgLTY1MCw0MSArNzE1LDU3MSBAQAogCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogfQogCit2b2lkIGFwcGVuZF9yZW1vdGVfb2JqZWN0X3VybChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnVybCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmhleCwKKwkJCSAgICAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpCit7CisJZW5kX3VybF93aXRoX3NsYXNoKGJ1ZiwgdXJsKTsKKworCXN0cmJ1Zl9hZGRmKGJ1ZiwgIm9iamVjdHMvJS4qcy8iLCAyLCBoZXgpOworCWlmICghb25seV90d29fZGlnaXRfcHJlZml4KQorCQlzdHJidWZfYWRkZihidWYsICIlcyIsIGhleCsyKTsKK30KKworY2hhciAqZ2V0X3JlbW90ZV9vYmplY3RfdXJsKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqaGV4LAorCQkJICAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoJmJ1ZiwgdXJsLCBoZXgsIG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKKy8qIGh0dHBfcmVxdWVzdCgpIHRhcmdldHMgKi8KKyNkZWZpbmUgSFRUUF9SRVFVRVNUX1NUUkJVRgkwCisjZGVmaW5lIEhUVFBfUkVRVUVTVF9GSUxFCTEKKworc3RhdGljIGludCBodHRwX3JlcXVlc3QoY29uc3QgY2hhciAqdXJsLCB2b2lkICpyZXN1bHQsIGludCB0YXJnZXQsIGludCBvcHRpb25zKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEdFVCwgMSk7CisKKwlpZiAocmVzdWx0ID09IE5VTEwpIHsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMSk7CisJfSBlbHNlIHsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMCk7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCByZXN1bHQpOworCisJCWlmICh0YXJnZXQgPT0gSFRUUF9SRVFVRVNUX0ZJTEUpIHsKKwkJCWxvbmcgcG9zbiA9IGZ0ZWxsKHJlc3VsdCk7CisJCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwKKwkJCQkJIGZ3cml0ZSk7CisJCQlpZiAocG9zbiA+IDApIHsKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwb3NuKTsKKwkJCQloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgYnVmLmJ1Zik7CisJCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJfQorCQkJc2xvdC0+bG9jYWwgPSByZXN1bHQ7CisJCX0gZWxzZQorCQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sCisJCQkJCSBmd3JpdGVfYnVmZmVyKTsKKwl9CisKKwlzdHJidWZfYWRkc3RyKCZidWYsICJQcmFnbWE6Iik7CisJaWYgKG9wdGlvbnMgJiBIVFRQX05PX0NBQ0hFKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICIgbm8tY2FjaGUiKTsKKworCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBidWYuYnVmKTsKKworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgPT0gQ1VSTEVfT0spCisJCQlyZXQgPSBIVFRQX09LOworCQllbHNlIGlmIChtaXNzaW5nX3RhcmdldCgmcmVzdWx0cykpCisJCQlyZXQgPSBIVFRQX01JU1NJTkdfVEFSR0VUOworCQllbHNlCisJCQlyZXQgPSBIVFRQX0VSUk9SOworCX0gZWxzZSB7CisJCWVycm9yKCJVbmFibGUgdG8gc3RhcnQgSFRUUCByZXF1ZXN0IGZvciAlcyIsIHVybCk7CisJCXJldCA9IEhUVFBfU1RBUlRfRkFJTEVEOworCX0KKworCXNsb3QtPmxvY2FsID0gTlVMTDsKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGhlYWRlcnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGh0dHBfZ2V0X3N0cmJ1Zihjb25zdCBjaGFyICp1cmwsIHN0cnVjdCBzdHJidWYgKnJlc3VsdCwgaW50IG9wdGlvbnMpCit7CisJcmV0dXJuIGh0dHBfcmVxdWVzdCh1cmwsIHJlc3VsdCwgSFRUUF9SRVFVRVNUX1NUUkJVRiwgb3B0aW9ucyk7Cit9CisKK2ludCBodHRwX2dldF9maWxlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBvcHRpb25zKQoreworCWludCByZXQ7CisJc3RydWN0IHN0cmJ1ZiB0bXBmaWxlID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqcmVzdWx0OworCisJc3RyYnVmX2FkZGYoJnRtcGZpbGUsICIlcy50ZW1wIiwgZmlsZW5hbWUpOworCXJlc3VsdCA9IGZvcGVuKHRtcGZpbGUuYnVmLCAiYSIpOworCWlmICghIHJlc3VsdCkgeworCQllcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyIsIHRtcGZpbGUuYnVmKTsKKwkJcmV0ID0gSFRUUF9FUlJPUjsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXJldCA9IGh0dHBfcmVxdWVzdCh1cmwsIHJlc3VsdCwgSFRUUF9SRVFVRVNUX0ZJTEUsIG9wdGlvbnMpOworCWZjbG9zZShyZXN1bHQpOworCisJaWYgKChyZXQgPT0gSFRUUF9PSykgJiYgbW92ZV90ZW1wX3RvX2ZpbGUodG1wZmlsZS5idWYsIGZpbGVuYW1lKSkKKwkJcmV0ID0gSFRUUF9FUlJPUjsKK2NsZWFudXA6CisJc3RyYnVmX3JlbGVhc2UoJnRtcGZpbGUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBodHRwX2Vycm9yKGNvbnN0IGNoYXIgKnVybCwgaW50IHJldCkKK3sKKwkvKiBodHRwX3JlcXVlc3QgaGFzIGFscmVhZHkgaGFuZGxlZCBIVFRQX1NUQVJUX0ZBSUxFRC4gKi8KKwlpZiAocmV0ICE9IEhUVFBfU1RBUlRfRkFJTEVEKQorCQllcnJvcigiJXMgd2hpbGUgYWNjZXNzaW5nICVzXG4iLCBjdXJsX2Vycm9yc3RyLCB1cmwpOworCisJcmV0dXJuIHJldDsKK30KKwogaW50IGh0dHBfZmV0Y2hfcmVmKGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCByZWYgKnJlZikKIHsKIAljaGFyICp1cmw7CiAJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKLQlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLTE7CiAKIAl1cmwgPSBxdW90ZV9yZWZfdXJsKGJhc2UsIHJlZi0+bmFtZSk7Ci0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwotCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBOVUxMKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgewotCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7Ci0JCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7Ci0JCQlzdHJidWZfcnRyaW0oJmJ1ZmZlcik7Ci0JCQlpZiAoYnVmZmVyLmxlbiA9PSA0MCkKLQkJCQlyZXQgPSBnZXRfc2hhMV9oZXgoYnVmZmVyLmJ1ZiwgcmVmLT5vbGRfc2hhMSk7Ci0JCQllbHNlIGlmICghcHJlZml4Y21wKGJ1ZmZlci5idWYsICJyZWY6ICIpKSB7Ci0JCQkJcmVmLT5zeW1yZWYgPSB4c3RyZHVwKGJ1ZmZlci5idWYgKyA1KTsKLQkJCQlyZXQgPSAwOwotCQkJfSBlbHNlCi0JCQkJcmV0ID0gMTsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IGVycm9yKCJDb3VsZG4ndCBnZXQgJXMgZm9yICVzXG4lcyIsCi0JCQkJICAgIHVybCwgcmVmLT5uYW1lLCBjdXJsX2Vycm9yc3RyKTsKKwlpZiAoaHR0cF9nZXRfc3RyYnVmKHVybCwgJmJ1ZmZlciwgSFRUUF9OT19DQUNIRSkgPT0gSFRUUF9PSykgeworCQlzdHJidWZfcnRyaW0oJmJ1ZmZlcik7CisJCWlmIChidWZmZXIubGVuID09IDQwKQorCQkJcmV0ID0gZ2V0X3NoYTFfaGV4KGJ1ZmZlci5idWYsIHJlZi0+b2xkX3NoYTEpOworCQllbHNlIGlmICghcHJlZml4Y21wKGJ1ZmZlci5idWYsICJyZWY6ICIpKSB7CisJCQlyZWYtPnN5bXJlZiA9IHhzdHJkdXAoYnVmZmVyLmJ1ZiArIDUpOworCQkJcmV0ID0gMDsKIAkJfQotCX0gZWxzZSB7Ci0JCXJldCA9IGVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOwogCX0KIAogCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOwogCWZyZWUodXJsKTsKIAlyZXR1cm4gcmV0OwogfQorCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBwYWNrcyAqLworc3RhdGljIGludCBmZXRjaF9wYWNrX2luZGV4KHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmJhc2VfdXJsKQoreworCWludCByZXQgPSAwOworCWNoYXIgKmhleCA9IHhzdHJkdXAoc2hhMV90b19oZXgoc2hhMSkpOworCWNoYXIgKmZpbGVuYW1lOworCWNoYXIgKnVybCA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChoYXNfcGFja19pbmRleChzaGExKSkgeworCQlyZXQgPSAwOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKGh0dHBfaXNfdmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICJHZXR0aW5nIGluZGV4IGZvciBwYWNrICVzXG4iLCBoZXgpOworCisJZW5kX3VybF93aXRoX3NsYXNoKCZidWYsIGJhc2VfdXJsKTsKKwlzdHJidWZfYWRkZigmYnVmLCAib2JqZWN0cy9wYWNrL3BhY2stJXMuaWR4IiwgaGV4KTsKKwl1cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJZmlsZW5hbWUgPSBzaGExX3BhY2tfaW5kZXhfbmFtZShzaGExKTsKKwlpZiAoaHR0cF9nZXRfZmlsZSh1cmwsIGZpbGVuYW1lLCAwKSAhPSBIVFRQX09LKQorCQlyZXQgPSBlcnJvcigiVW5hYmxlIHRvIGdldCBwYWNrIGluZGV4ICVzXG4iLCB1cmwpOworCitjbGVhbnVwOgorCWZyZWUoaGV4KTsKKwlmcmVlKHVybCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmZXRjaF9hbmRfc2V0dXBfcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqKnBhY2tzX2hlYWQsCisJdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqYmFzZV91cmwpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKm5ld19wYWNrOworCisJaWYgKGZldGNoX3BhY2tfaW5kZXgoc2hhMSwgYmFzZV91cmwpKQorCQlyZXR1cm4gLTE7CisKKwluZXdfcGFjayA9IHBhcnNlX3BhY2tfaW5kZXgoc2hhMSk7CisJaWYgKCFuZXdfcGFjaykKKwkJcmV0dXJuIC0xOyAvKiBwYXJzZV9wYWNrX2luZGV4KCkgYWxyZWFkeSBpc3N1ZWQgZXJyb3IgbWVzc2FnZSAqLworCW5ld19wYWNrLT5uZXh0ID0gKnBhY2tzX2hlYWQ7CisJKnBhY2tzX2hlYWQgPSBuZXdfcGFjazsKKwlyZXR1cm4gMDsKK30KKworaW50IGh0dHBfZ2V0X2luZm9fcGFja3MoY29uc3QgY2hhciAqYmFzZV91cmwsIHN0cnVjdCBwYWNrZWRfZ2l0ICoqcGFja3NfaGVhZCkKK3sKKwlpbnQgcmV0ID0gMCwgaSA9IDA7CisJY2hhciAqdXJsLCAqZGF0YTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwllbmRfdXJsX3dpdGhfc2xhc2goJmJ1ZiwgYmFzZV91cmwpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIm9iamVjdHMvaW5mby9wYWNrcyIpOworCXVybCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlyZXQgPSBodHRwX2dldF9zdHJidWYodXJsLCAmYnVmLCBIVFRQX05PX0NBQ0hFKTsKKwlpZiAocmV0ICE9IEhUVFBfT0spCisJCWdvdG8gY2xlYW51cDsKKworCWRhdGEgPSBidWYuYnVmOworCXdoaWxlIChpIDwgYnVmLmxlbikgeworCQlzd2l0Y2ggKGRhdGFbaV0pIHsKKwkJY2FzZSAnUCc6CisJCQlpKys7CisJCQlpZiAoaSArIDUyIDw9IGJ1Zi5sZW4gJiYKKwkJCSAgICAhcHJlZml4Y21wKGRhdGEgKyBpLCAiIHBhY2stIikgJiYKKwkJCSAgICAhcHJlZml4Y21wKGRhdGEgKyBpICsgNDYsICIucGFja1xuIikpIHsKKwkJCQlnZXRfc2hhMV9oZXgoZGF0YSArIGkgKyA2LCBzaGExKTsKKwkJCQlmZXRjaF9hbmRfc2V0dXBfcGFja19pbmRleChwYWNrc19oZWFkLCBzaGExLAorCQkJCQkJICAgICAgYmFzZV91cmwpOworCQkJCWkgKz0gNTE7CisJCQkJYnJlYWs7CisJCQl9CisJCWRlZmF1bHQ6CisJCQl3aGlsZSAoaSA8IGJ1Zi5sZW4gJiYgZGF0YVtpXSAhPSAnXG4nKQorCQkJCWkrKzsKKwkJfQorCQlpKys7CisJfQorCitjbGVhbnVwOgorCWZyZWUodXJsKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3Qoc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxKQoreworCWlmIChwcmVxLT5wYWNrZmlsZSAhPSBOVUxMKSB7CisJCWZjbG9zZShwcmVxLT5wYWNrZmlsZSk7CisJCXByZXEtPnBhY2tmaWxlID0gTlVMTDsKKwkJcHJlcS0+c2xvdC0+bG9jYWwgPSBOVUxMOworCX0KKwlpZiAocHJlcS0+cmFuZ2VfaGVhZGVyICE9IE5VTEwpIHsKKwkJY3VybF9zbGlzdF9mcmVlX2FsbChwcmVxLT5yYW5nZV9oZWFkZXIpOworCQlwcmVxLT5yYW5nZV9oZWFkZXIgPSBOVUxMOworCX0KKwlwcmVxLT5zbG90ID0gTlVMTDsKKwlmcmVlKHByZXEtPnVybCk7Cit9CisKK2ludCBmaW5pc2hfaHR0cF9wYWNrX3JlcXVlc3Qoc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxKQoreworCWludCByZXQ7CisJc3RydWN0IHBhY2tlZF9naXQgKipsc3Q7CisKKwlwcmVxLT50YXJnZXQtPnBhY2tfc2l6ZSA9IGZ0ZWxsKHByZXEtPnBhY2tmaWxlKTsKKworCWlmIChwcmVxLT5wYWNrZmlsZSAhPSBOVUxMKSB7CisJCWZjbG9zZShwcmVxLT5wYWNrZmlsZSk7CisJCXByZXEtPnBhY2tmaWxlID0gTlVMTDsKKwkJcHJlcS0+c2xvdC0+bG9jYWwgPSBOVUxMOworCX0KKworCXJldCA9IG1vdmVfdGVtcF90b19maWxlKHByZXEtPnRtcGZpbGUsIHByZXEtPmZpbGVuYW1lKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbHN0ID0gcHJlcS0+bHN0OworCXdoaWxlICgqbHN0ICE9IHByZXEtPnRhcmdldCkKKwkJbHN0ID0gJigoKmxzdCktPm5leHQpOworCSpsc3QgPSAoKmxzdCktPm5leHQ7CisKKwlpZiAodmVyaWZ5X3BhY2socHJlcS0+dGFyZ2V0KSkKKwkJcmV0dXJuIC0xOworCWluc3RhbGxfcGFja2VkX2dpdChwcmVxLT50YXJnZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqbmV3X2h0dHBfcGFja19yZXF1ZXN0KAorCXN0cnVjdCBwYWNrZWRfZ2l0ICp0YXJnZXQsIGNvbnN0IGNoYXIgKmJhc2VfdXJsKQoreworCWNoYXIgKnVybDsKKwljaGFyICpmaWxlbmFtZTsKKwlsb25nIHByZXZfcG9zbiA9IDA7CisJY2hhciByYW5nZVtSQU5HRV9IRUFERVJfU0laRV07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXE7CisKKwlwcmVxID0geG1hbGxvYyhzaXplb2YoKnByZXEpKTsKKwlwcmVxLT50YXJnZXQgPSB0YXJnZXQ7CisJcHJlcS0+cmFuZ2VfaGVhZGVyID0gTlVMTDsKKworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlX3VybCk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIm9iamVjdHMvcGFjay9wYWNrLSVzLnBhY2siLAorCQlzaGExX3RvX2hleCh0YXJnZXQtPnNoYTEpKTsKKwl1cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCXByZXEtPnVybCA9IHhzdHJkdXAodXJsKTsKKworCWZpbGVuYW1lID0gc2hhMV9wYWNrX25hbWUodGFyZ2V0LT5zaGExKTsKKwlzbnByaW50ZihwcmVxLT5maWxlbmFtZSwgc2l6ZW9mKHByZXEtPmZpbGVuYW1lKSwgIiVzIiwgZmlsZW5hbWUpOworCXNucHJpbnRmKHByZXEtPnRtcGZpbGUsIHNpemVvZihwcmVxLT50bXBmaWxlKSwgIiVzLnRlbXAiLCBmaWxlbmFtZSk7CisJcHJlcS0+cGFja2ZpbGUgPSBmb3BlbihwcmVxLT50bXBmaWxlLCAiYSIpOworCWlmICghcHJlcS0+cGFja2ZpbGUpIHsKKwkJZXJyb3IoIlVuYWJsZSB0byBvcGVuIGxvY2FsIGZpbGUgJXMgZm9yIHBhY2siLAorCQkgICAgICBwcmVxLT50bXBmaWxlKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwlwcmVxLT5zbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJcHJlcS0+c2xvdC0+bG9jYWwgPSBwcmVxLT5wYWNrZmlsZTsKKwljdXJsX2Vhc3lfc2V0b3B0KHByZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgcHJlcS0+cGFja2ZpbGUpOworCWN1cmxfZWFzeV9zZXRvcHQocHJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGUpOworCWN1cmxfZWFzeV9zZXRvcHQocHJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJY3VybF9lYXN5X3NldG9wdChwcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsCisJCW5vX3ByYWdtYV9oZWFkZXIpOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBkYXRhIHByZXNlbnQgZnJvbSBhIHByZXZpb3VzIHRyYW5zZmVyIGF0dGVtcHQsCisJICogcmVzdW1lIHdoZXJlIGl0IGxlZnQgb2ZmCisJICovCisJcHJldl9wb3NuID0gZnRlbGwocHJlcS0+cGFja2ZpbGUpOworCWlmIChwcmV2X3Bvc24+MCkgeworCQlpZiAoaHR0cF9pc192ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlJlc3VtaW5nIGZldGNoIG9mIHBhY2sgJXMgYXQgYnl0ZSAlbGRcbiIsCisJCQkJc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSwgcHJldl9wb3NuKTsKKwkJc3ByaW50ZihyYW5nZSwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcHJldl9wb3NuKTsKKwkJcHJlcS0+cmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQoTlVMTCwgcmFuZ2UpOworCQljdXJsX2Vhc3lfc2V0b3B0KHByZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwKKwkJCXByZXEtPnJhbmdlX2hlYWRlcik7CisJfQorCisJcmV0dXJuIHByZXE7CisKK2Fib3J0OgorCWZyZWUoZmlsZW5hbWUpOworCXJldHVybiBOVUxMOworfQorCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBvYmplY3RzIChsb29zZSkgKi8KK3N0YXRpYyBzaXplX3QgZndyaXRlX3NoYTFfZmlsZSh2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsCisJCQkgICAgICAgdm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBjaGFyIGV4cG5bNDA5Nl07CisJc2l6ZV90IHNpemUgPSBlbHRzaXplICogbm1lbWI7CisJaW50IHBvc24gPSAwOworCXN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxID0KKwkJKHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICopZGF0YTsKKwlkbyB7CisJCXNzaXplX3QgcmV0dmFsID0geHdyaXRlKGZyZXEtPmxvY2FsZmlsZSwKKwkJCQkJKGNoYXIgKikgcHRyICsgcG9zbiwgc2l6ZSAtIHBvc24pOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiBwb3NuOworCQlwb3NuICs9IHJldHZhbDsKKwl9IHdoaWxlIChwb3NuIDwgc2l6ZSk7CisKKwlmcmVxLT5zdHJlYW0uYXZhaWxfaW4gPSBzaXplOworCWZyZXEtPnN0cmVhbS5uZXh0X2luID0gcHRyOworCWRvIHsKKwkJZnJlcS0+c3RyZWFtLm5leHRfb3V0ID0gZXhwbjsKKwkJZnJlcS0+c3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihleHBuKTsKKwkJZnJlcS0+enJldCA9IGdpdF9pbmZsYXRlKCZmcmVxLT5zdHJlYW0sIFpfU1lOQ19GTFVTSCk7CisJCWdpdF9TSEExX1VwZGF0ZSgmZnJlcS0+YywgZXhwbiwKKwkJCQlzaXplb2YoZXhwbikgLSBmcmVxLT5zdHJlYW0uYXZhaWxfb3V0KTsKKwl9IHdoaWxlIChmcmVxLT5zdHJlYW0uYXZhaWxfaW4gJiYgZnJlcS0+enJldCA9PSBaX09LKTsKKwlkYXRhX3JlY2VpdmVkKys7CisJcmV0dXJuIHNpemU7Cit9CisKK3N0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpuZXdfaHR0cF9vYmplY3RfcmVxdWVzdChjb25zdCBjaGFyICpiYXNlX3VybCwKKwl1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHNoYTEpOworCWNoYXIgKmZpbGVuYW1lOworCWNoYXIgcHJldmZpbGVbUEFUSF9NQVhdOworCWNoYXIgKnVybDsKKwlpbnQgcHJldmxvY2FsOworCXVuc2lnbmVkIGNoYXIgcHJldl9idWZbUFJFVl9CVUZfU0laRV07CisJc3NpemVfdCBwcmV2X3JlYWQgPSAwOworCWxvbmcgcHJldl9wb3NuID0gMDsKKwljaGFyIHJhbmdlW1JBTkdFX0hFQURFUl9TSVpFXTsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqcmFuZ2VfaGVhZGVyID0gTlVMTDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcTsKKworCWZyZXEgPSB4bWFsbG9jKHNpemVvZigqZnJlcSkpOworCWhhc2hjcHkoZnJlcS0+c2hhMSwgc2hhMSk7CisJZnJlcS0+bG9jYWxmaWxlID0gLTE7CisKKwlmaWxlbmFtZSA9IHNoYTFfZmlsZV9uYW1lKHNoYTEpOworCXNucHJpbnRmKGZyZXEtPmZpbGVuYW1lLCBzaXplb2YoZnJlcS0+ZmlsZW5hbWUpLCAiJXMiLCBmaWxlbmFtZSk7CisJc25wcmludGYoZnJlcS0+dG1wZmlsZSwgc2l6ZW9mKGZyZXEtPnRtcGZpbGUpLAorCQkgIiVzLnRlbXAiLCBmaWxlbmFtZSk7CisKKwlzbnByaW50ZihwcmV2ZmlsZSwgc2l6ZW9mKHByZXZmaWxlKSwgIiVzLnByZXYiLCBmaWxlbmFtZSk7CisJdW5saW5rX29yX3dhcm4ocHJldmZpbGUpOworCXJlbmFtZShmcmVxLT50bXBmaWxlLCBwcmV2ZmlsZSk7CisJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZSk7CisKKwlpZiAoZnJlcS0+bG9jYWxmaWxlICE9IC0xKQorCQllcnJvcigiZmQgbGVha2FnZSBpbiBzdGFydDogJWQiLCBmcmVxLT5sb2NhbGZpbGUpOworCWZyZXEtPmxvY2FsZmlsZSA9IG9wZW4oZnJlcS0+dG1wZmlsZSwKKwkJCSAgICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOworCS8qCisJICogVGhpcyBjb3VsZCBoYXZlIGZhaWxlZCBkdWUgdG8gdGhlICJsYXp5IGRpcmVjdG9yeSBjcmVhdGlvbiI7CisJICogdHJ5IHRvIG1rZGlyIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LgorCSAqLworCWlmIChmcmVxLT5sb2NhbGZpbGUgPCAwICYmIGVycm5vID09IEVOT0VOVCkgeworCQljaGFyICpkaXIgPSBzdHJyY2hyKGZyZXEtPnRtcGZpbGUsICcvJyk7CisJCWlmIChkaXIpIHsKKwkJCSpkaXIgPSAwOworCQkJbWtkaXIoZnJlcS0+dG1wZmlsZSwgMDc3Nyk7CisJCQkqZGlyID0gJy8nOworCQl9CisJCWZyZXEtPmxvY2FsZmlsZSA9IG9wZW4oZnJlcS0+dG1wZmlsZSwKKwkJCQkgICAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKKwl9CisKKwlpZiAoZnJlcS0+bG9jYWxmaWxlIDwgMCkgeworCQllcnJvcigiQ291bGRuJ3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlICVzIGZvciAlczogJXMiLAorCQkgICAgICBmcmVxLT50bXBmaWxlLCBmcmVxLT5maWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwltZW1zZXQoJmZyZXEtPnN0cmVhbSwgMCwgc2l6ZW9mKGZyZXEtPnN0cmVhbSkpOworCisJZ2l0X2luZmxhdGVfaW5pdCgmZnJlcS0+c3RyZWFtKTsKKworCWdpdF9TSEExX0luaXQoJmZyZXEtPmMpOworCisJdXJsID0gZ2V0X3JlbW90ZV9vYmplY3RfdXJsKGJhc2VfdXJsLCBoZXgsIDApOworCWZyZXEtPnVybCA9IHhzdHJkdXAodXJsKTsKKworCS8qCisJICogSWYgYSBwcmV2aW91cyB0ZW1wIGZpbGUgaXMgcHJlc2VudCwgcHJvY2VzcyB3aGF0IHdhcyBhbHJlYWR5CisJICogZmV0Y2hlZC4KKwkgKi8KKwlwcmV2bG9jYWwgPSBvcGVuKHByZXZmaWxlLCBPX1JET05MWSk7CisJaWYgKHByZXZsb2NhbCAhPSAtMSkgeworCQlkbyB7CisJCQlwcmV2X3JlYWQgPSB4cmVhZChwcmV2bG9jYWwsIHByZXZfYnVmLCBQUkVWX0JVRl9TSVpFKTsKKwkJCWlmIChwcmV2X3JlYWQ+MCkgeworCQkJCWlmIChmd3JpdGVfc2hhMV9maWxlKHByZXZfYnVmLAorCQkJCQkJICAgICAxLAorCQkJCQkJICAgICBwcmV2X3JlYWQsCisJCQkJCQkgICAgIGZyZXEpID09IHByZXZfcmVhZCkgeworCQkJCQlwcmV2X3Bvc24gKz0gcHJldl9yZWFkOworCQkJCX0gZWxzZSB7CisJCQkJCXByZXZfcmVhZCA9IC0xOworCQkJCX0KKwkJCX0KKwkJfSB3aGlsZSAocHJldl9yZWFkID4gMCk7CisJCWNsb3NlKHByZXZsb2NhbCk7CisJfQorCXVubGlua19vcl93YXJuKHByZXZmaWxlKTsKKworCS8qCisJICogUmVzZXQgaW5mbGF0ZS9TSEExIGlmIHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZSBwcmV2aW91cyB0ZW1wCisJICogZmlsZTsgYWxzbyByZXdpbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9jYWwgZmlsZS4KKwkgKi8KKwlpZiAocHJldl9yZWFkID09IC0xKSB7CisJCW1lbXNldCgmZnJlcS0+c3RyZWFtLCAwLCBzaXplb2YoZnJlcS0+c3RyZWFtKSk7CisJCWdpdF9pbmZsYXRlX2luaXQoJmZyZXEtPnN0cmVhbSk7CisJCWdpdF9TSEExX0luaXQoJmZyZXEtPmMpOworCQlpZiAocHJldl9wb3NuPjApIHsKKwkJCXByZXZfcG9zbiA9IDA7CisJCQlsc2VlayhmcmVxLT5sb2NhbGZpbGUsIDAsIFNFRUtfU0VUKTsKKwkJCWZ0cnVuY2F0ZShmcmVxLT5sb2NhbGZpbGUsIDApOworCQl9CisJfQorCisJZnJlcS0+c2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIGZyZXEpOworCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfc2hhMV9maWxlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfRVJST1JCVUZGRVIsIGZyZXEtPmVycm9yc3RyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKKworCS8qCisJICogSWYgd2UgaGF2ZSBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGRhdGEgZnJvbSBhIHByZXZpb3VzIGZldGNoCisJICogYXR0ZW1wdCwgb25seSBmZXRjaCB0aGUgZGF0YSB3ZSBkb24ndCBhbHJlYWR5IGhhdmUuCisJICovCisJaWYgKHByZXZfcG9zbj4wKSB7CisJCWlmIChodHRwX2lzX3ZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUmVzdW1pbmcgZmV0Y2ggb2Ygb2JqZWN0ICVzIGF0IGJ5dGUgJWxkXG4iLAorCQkJCWhleCwgcHJldl9wb3NuKTsKKwkJc3ByaW50ZihyYW5nZSwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcHJldl9wb3NuKTsKKwkJcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQocmFuZ2VfaGVhZGVyLCByYW5nZSk7CisJCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwKKwkJCQkgQ1VSTE9QVF9IVFRQSEVBREVSLCByYW5nZV9oZWFkZXIpOworCX0KKworCXJldHVybiBmcmVxOworCisJZnJlZSh1cmwpOworYWJvcnQ6CisJZnJlZShmaWxlbmFtZSk7CisJZnJlZShmcmVxKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBwcm9jZXNzX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpCit7CisJaWYgKGZyZXEtPnNsb3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCWZyZXEtPmN1cmxfcmVzdWx0ID0gZnJlcS0+c2xvdC0+Y3VybF9yZXN1bHQ7CisJZnJlcS0+aHR0cF9jb2RlID0gZnJlcS0+c2xvdC0+aHR0cF9jb2RlOworCWZyZXEtPnNsb3QgPSBOVUxMOworfQorCitpbnQgZmluaXNoX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwljbG9zZShmcmVxLT5sb2NhbGZpbGUpOworCWZyZXEtPmxvY2FsZmlsZSA9IC0xOworCisJcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KGZyZXEpOworCisJaWYgKGZyZXEtPmh0dHBfY29kZSA9PSA0MTYpIHsKKwkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiByZXF1ZXN0ZWQgcmFuZ2UgaW52YWxpZDsgd2UgbWF5IGFscmVhZHkgaGF2ZSBhbGwgdGhlIGRhdGEuXG4iKTsKKwl9IGVsc2UgaWYgKGZyZXEtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCWlmIChzdGF0KGZyZXEtPnRtcGZpbGUsICZzdCkgPT0gMCkKKwkJCWlmIChzdC5zdF9zaXplID09IDApCisJCQkJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlnaXRfaW5mbGF0ZV9lbmQoJmZyZXEtPnN0cmVhbSk7CisJZ2l0X1NIQTFfRmluYWwoZnJlcS0+cmVhbF9zaGExLCAmZnJlcS0+Yyk7CisJaWYgKGZyZXEtPnpyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CisJCXVubGlua19vcl93YXJuKGZyZXEtPnRtcGZpbGUpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChoYXNoY21wKGZyZXEtPnNoYTEsIGZyZXEtPnJlYWxfc2hhMSkpIHsKKwkJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisJZnJlcS0+cmVuYW1lID0KKwkJbW92ZV90ZW1wX3RvX2ZpbGUoZnJlcS0+dG1wZmlsZSwgZnJlcS0+ZmlsZW5hbWUpOworCisJcmV0dXJuIGZyZXEtPnJlbmFtZTsKK30KKwordm9pZCBhYm9ydF9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKQoreworCXVubGlua19vcl93YXJuKGZyZXEtPnRtcGZpbGUpOworCisJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KGZyZXEpOworfQorCit2b2lkIHJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSkKK3sKKwlpZiAoZnJlcS0+bG9jYWxmaWxlICE9IC0xKSB7CisJCWNsb3NlKGZyZXEtPmxvY2FsZmlsZSk7CisJCWZyZXEtPmxvY2FsZmlsZSA9IC0xOworCX0KKwlpZiAoZnJlcS0+dXJsICE9IE5VTEwpIHsKKwkJZnJlZShmcmVxLT51cmwpOworCQlmcmVxLT51cmwgPSBOVUxMOworCX0KKwlpZiAoZnJlcS0+c2xvdCAhPSBOVUxMKSB7CisJCWZyZXEtPnNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBOVUxMOworCQlmcmVxLT5zbG90LT5jYWxsYmFja19kYXRhID0gTlVMTDsKKwkJcmVsZWFzZV9hY3RpdmVfc2xvdChmcmVxLT5zbG90KTsKKwkJZnJlcS0+c2xvdCA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0IGEvaHR0cC5oIGIvaHR0cC5oCmluZGV4IDI2YWJlYmUuLjRjNGU5OWMgMTAwNjQ0Ci0tLSBhL2h0dHAuaAorKysgYi9odHRwLmgKQEAgLTkzLDYgKzkzLDcgQEAKIAogZXh0ZXJuIGludCBkYXRhX3JlY2VpdmVkOwogZXh0ZXJuIGludCBhY3RpdmVfcmVxdWVzdHM7CitleHRlcm4gaW50IGh0dHBfaXNfdmVyYm9zZTsKIAogZXh0ZXJuIGNoYXIgY3VybF9lcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOwogCkBAIC0xMDksNiArMTEwLDkwIEBACiAKICNkZWZpbmUgbWlzc2luZ190YXJnZXQoYSkgbWlzc2luZ19fdGFyZ2V0KChhKS0+aHR0cF9jb2RlLCAoYSktPmN1cmxfcmVzdWx0KQogCisvKiBIZWxwZXJzIGZvciBtb2RpZnlpbmcgYW5kIGNyZWF0aW5nIFVSTHMgKi8KK2V4dGVybiB2b2lkIGFwcGVuZF9yZW1vdGVfb2JqZWN0X3VybChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnVybCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmhleCwKKwkJCQkgICAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpOworZXh0ZXJuIGNoYXIgKmdldF9yZW1vdGVfb2JqZWN0X3VybChjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmhleCwKKwkJCQkgICBpbnQgb25seV90d29fZGlnaXRfcHJlZml4KTsKKworLyogT3B0aW9ucyBmb3IgaHR0cF9yZXF1ZXN0XyooKSAqLworI2RlZmluZSBIVFRQX05PX0NBQ0hFCQkxCisKKy8qIFJldHVybiB2YWx1ZXMgZm9yIGh0dHBfcmVxdWVzdF8qKCkgKi8KKyNkZWZpbmUgSFRUUF9PSwkJCTAKKyNkZWZpbmUgSFRUUF9NSVNTSU5HX1RBUkdFVAkxCisjZGVmaW5lIEhUVFBfRVJST1IJCTIKKyNkZWZpbmUgSFRUUF9TVEFSVF9GQUlMRUQJMworCisvKgorICogUmVxdWVzdHMgYW4gdXJsIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiBhIHN0cmJ1Zi4KKyAqCisgKiBJZiB0aGUgcmVzdWx0IHBvaW50ZXIgaXMgTlVMTCwgYSBIVFRQIEhFQUQgcmVxdWVzdCBpcyBtYWRlIGluc3RlYWQgb2YgR0VULgorICovCitpbnQgaHR0cF9nZXRfc3RyYnVmKGNvbnN0IGNoYXIgKnVybCwgc3RydWN0IHN0cmJ1ZiAqcmVzdWx0LCBpbnQgb3B0aW9ucyk7CisKKy8qCisgKiBEb3dubG9hZHMgYW4gdXJsIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gZmlsZS4KKyAqCisgKiBJZiBhIHByZXZpb3VzIGludGVycnVwdGVkIGRvd25sb2FkIGlzIGRldGVjdGVkIChpLmUuIGEgcHJldmlvdXMgdGVtcG9yYXJ5CisgKiBmaWxlIGlzIHN0aWxsIGFyb3VuZCkgdGhlIGRvd25sb2FkIGlzIHJlc3VtZWQuCisgKi8KK2ludCBodHRwX2dldF9maWxlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBvcHRpb25zKTsKKworLyoKKyAqIFByaW50cyBhbiBlcnJvciBtZXNzYWdlIHVzaW5nIGVycm9yKCkgY29udGFpbmluZyB1cmwgYW5kIGN1cmxfZXJyb3JzdHIsCisgKiBhbmQgcmV0dXJucyByZXQuCisgKi8KK2ludCBodHRwX2Vycm9yKGNvbnN0IGNoYXIgKnVybCwgaW50IHJldCk7CisKIGV4dGVybiBpbnQgaHR0cF9mZXRjaF9yZWYoY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IHJlZiAqcmVmKTsKIAorLyogSGVscGVycyBmb3IgZmV0Y2hpbmcgcGFja3MgKi8KK2V4dGVybiBpbnQgaHR0cF9nZXRfaW5mb19wYWNrcyhjb25zdCBjaGFyICpiYXNlX3VybCwKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqKnBhY2tzX2hlYWQpOworCitzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QKK3sKKwljaGFyICp1cmw7CisJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqKmxzdDsKKwlGSUxFICpwYWNrZmlsZTsKKwljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKKwljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOworCXN0cnVjdCBjdXJsX3NsaXN0ICpyYW5nZV9oZWFkZXI7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Cit9OworCitleHRlcm4gc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpuZXdfaHR0cF9wYWNrX3JlcXVlc3QoCisJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldCwgY29uc3QgY2hhciAqYmFzZV91cmwpOworZXh0ZXJuIGludCBmaW5pc2hfaHR0cF9wYWNrX3JlcXVlc3Qoc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3Qoc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxKTsKKworLyogSGVscGVycyBmb3IgZmV0Y2hpbmcgb2JqZWN0ICovCitzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdAoreworCWNoYXIgKnVybDsKKwljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKKwljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOworCWludCBsb2NhbGZpbGU7CisJQ1VSTGNvZGUgY3VybF9yZXN1bHQ7CisJY2hhciBlcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOworCWxvbmcgaHR0cF9jb2RlOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciByZWFsX3NoYTFbMjBdOworCWdpdF9TSEFfQ1RYIGM7CisJel9zdHJlYW0gc3RyZWFtOworCWludCB6cmV0OworCWludCByZW5hbWU7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Cit9OworCitleHRlcm4gc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKm5ld19odHRwX29iamVjdF9yZXF1ZXN0KAorCWNvbnN0IGNoYXIgKmJhc2VfdXJsLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiB2b2lkIHByb2Nlc3NfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSk7CitleHRlcm4gaW50IGZpbmlzaF9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKTsKK2V4dGVybiB2b2lkIGFib3J0X2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKTsKKwogI2VuZGlmIC8qIEhUVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW1hcC1zZW5kLmMgYi9pbWFwLXNlbmQuYwppbmRleCA4MTU0Y2IyLi4zODQ3ZmQxIDEwMDY0NAotLS0gYS9pbWFwLXNlbmQuYworKysgYi9pbWFwLXNlbmQuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiAjaWZuZGVmIE5PX09QRU5TU0wKIHN0YXRpYyB2b2lkIHNzbF9zb2NrZXRfcGVycm9yKGNvbnN0IGNoYXIgKmZ1bmMpCiB7Ci0JZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIGZ1bmMsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCAwKSk7CisJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIGZ1bmMsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7CiB9CiAjZW5kaWYKIApAQCAtOTgyLDkgKzk4Miw3IEBACiAJc3RydWN0IGltYXBfc3RvcmUgKmN0eDsKIAlzdHJ1Y3QgaW1hcCAqaW1hcDsKIAljaGFyICphcmcsICpyc3A7Ci0Jc3RydWN0IGhvc3RlbnQgKmhlOwotCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwotCWludCBzLCBhWzJdLCBwcmVhdXRoOworCWludCBzID0gLTEsIGFbMl0sIHByZWF1dGg7CiAJcGlkX3QgcGlkOwogCiAJY3R4ID0geGNhbGxvYyhzaXplb2YoKmN0eCksIDEpOwpAQCAtMTAyMSw2ICsxMDE5LDUxIEBACiAKIAkJaW1hcF9pbmZvKCJva1xuIik7CiAJfSBlbHNlIHsKKyNpZm5kZWYgTk9fSVBWNgorCQlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTAsICphaTsKKwkJaW50IGdhaTsKKwkJY2hhciBwb3J0c3RyWzZdOworCisJCXNucHJpbnRmKHBvcnRzdHIsIHNpemVvZihwb3J0c3RyKSwgIiVodSIsIHNydmMtPnBvcnQpOworCisJCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworCQloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworCQloaW50cy5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOworCisJCWltYXBfaW5mbygiUmVzb2x2aW5nICVzLi4uICIsIHNydmMtPmhvc3QpOworCQlnYWkgPSBnZXRhZGRyaW5mbyhzcnZjLT5ob3N0LCBwb3J0c3RyLCAmaGludHMsICZhaSk7CisJCWlmIChnYWkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiZ2V0YWRkcmluZm86ICVzXG4iLCBnYWlfc3RyZXJyb3IoZ2FpKSk7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaW1hcF9pbmZvKCJva1xuIik7CisKKwkJZm9yIChhaTAgPSBhaTsgYWk7IGFpID0gYWktPmFpX25leHQpIHsKKwkJCWNoYXIgYWRkcltOSV9NQVhIT1NUXTsKKworCQkJcyA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsCisJCQkJICAgYWktPmFpX3Byb3RvY29sKTsKKwkJCWlmIChzIDwgMCkKKwkJCQljb250aW51ZTsKKworCQkJZ2V0bmFtZWluZm8oYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuLCBhZGRyLAorCQkJCSAgICBzaXplb2YoYWRkciksIE5VTEwsIDAsIE5JX05VTUVSSUNIT1NUKTsKKwkJCWltYXBfaW5mbygiQ29ubmVjdGluZyB0byBbJXNdOiVzLi4uICIsIGFkZHIsIHBvcnRzdHIpOworCisJCQlpZiAoY29ubmVjdChzLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDwgMCkgeworCQkJCWNsb3NlKHMpOworCQkJCXMgPSAtMTsKKwkJCQlwZXJyb3IoImNvbm5lY3QiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKwkJZnJlZWFkZHJpbmZvKGFpMCk7CisjZWxzZSAvKiBOT19JUFY2ICovCisJCXN0cnVjdCBob3N0ZW50ICpoZTsKKwkJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisKIAkJbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOwogCQlhZGRyLnNpbl9wb3J0ID0gaHRvbnMoc3J2Yy0+cG9ydCk7CiAJCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CkBAIC0xMDQwLDcgKzEwODMsMTIgQEAKIAkJaW1hcF9pbmZvKCJDb25uZWN0aW5nIHRvICVzOiVodS4uLiAiLCBpbmV0X250b2EoYWRkci5zaW5fYWRkciksIG50b2hzKGFkZHIuc2luX3BvcnQpKTsKIAkJaWYgKGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpKSB7CiAJCQljbG9zZShzKTsKKwkJCXMgPSAtMTsKIAkJCXBlcnJvcigiY29ubmVjdCIpOworCQl9CisjZW5kaWYKKwkJaWYgKHMgPCAwKSB7CisJCQlmcHV0cygiRXJyb3I6IHVuYWJsZSB0byBjb25uZWN0IHRvIHNlcnZlci5cbiIsIHN0ZGVycik7CiAJCQlnb3RvIGJhaWw7CiAJCX0KIApkaWZmIC0tZ2l0IGEvaW5kZXgtcGFjay5jIGIvaW5kZXgtcGFjay5jCmluZGV4IDBjOTJiYWYuLjM0MDA3NGYgMTAwNjQ0Ci0tLSBhL2luZGV4LXBhY2suYworKysgYi9pbmRleC1wYWNrLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCQlpZiAocmV0IDw9IDApIHsKIAkJCWlmICghcmV0KQogCQkJCWRpZSgiZWFybHkgRU9GIik7Ci0JCQlkaWUoInJlYWQgZXJyb3Igb24gaW5wdXQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygicmVhZCBlcnJvciBvbiBpbnB1dCIpOwogCQl9CiAJCWlucHV0X2xlbiArPSByZXQ7CiAJCWlmIChmcm9tX3N0ZGluKQpAQCAtMTc4LDEzICsxNzgsMTIgQEAKIAkJfSBlbHNlCiAJCQlvdXRwdXRfZmQgPSBvcGVuKHBhY2tfbmFtZSwgT19DUkVBVHxPX0VYQ0x8T19SRFdSLCAwNjAwKTsKIAkJaWYgKG91dHB1dF9mZCA8IDApCi0JCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgJXM6ICVzIiwgcGFja19uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlICclcyciLCBwYWNrX25hbWUpOwogCQlwYWNrX2ZkID0gb3V0cHV0X2ZkOwogCX0gZWxzZSB7CiAJCWlucHV0X2ZkID0gb3BlbihwYWNrX25hbWUsIE9fUkRPTkxZKTsKIAkJaWYgKGlucHV0X2ZkIDwgMCkKLQkJCWRpZSgiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJzogJXMiLAotCQkJICAgIHBhY2tfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIsIHBhY2tfbmFtZSk7CiAJCW91dHB1dF9mZCA9IC0xOwogCQlwYWNrX2ZkID0gaW5wdXRfZmQ7CiAJfQpAQCAtMzcwLDcgKzM2OSw3IEBACiAJZG8gewogCQlzc2l6ZV90IG4gPSBwcmVhZChwYWNrX2ZkLCBkYXRhICsgcmR5LCBsZW4gLSByZHksIGZyb20gKyByZHkpOwogCQlpZiAobiA8IDApCi0JCQlkaWUoImNhbm5vdCBwcmVhZCBwYWNrIGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIpOwogCQlpZiAoIW4pCiAJCQlkaWUoInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZXMgbWlzc2luZyIsCiAJCQkgICAgbGVuIC0gcmR5KTsKQEAgLTQ2OSw3ICs0NjgsNyBAQAogCQkJCWRpZSgiaW52YWxpZCAlcyIsIHR5cGVuYW1lKHR5cGUpKTsKIAkJCWlmIChmc2NrX29iamVjdChvYmosIDEsIGZzY2tfZXJyb3JfZnVuY3Rpb24pKQogCQkJCWRpZSgiRXJyb3IgaW4gb2JqZWN0Iik7Ci0JCQlpZiAoZnNja193YWxrKG9iaiwgbWFya19saW5rLCAwKSkKKwkJCWlmIChmc2NrX3dhbGsob2JqLCBtYXJrX2xpbmssIE5VTEwpKQogCQkJCWRpZSgiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKIAogCQkJaWYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSkgewpAQCAtNjMxLDcgKzYzMCw3IEBACiAKIAkvKiBJZiBpbnB1dF9mZCBpcyBhIGZpbGUsIHdlIHNob3VsZCBoYXZlIHJlYWNoZWQgaXRzIGVuZCBub3cuICovCiAJaWYgKGZzdGF0KGlucHV0X2ZkLCAmc3QpKQotCQlkaWUoImNhbm5vdCBmc3RhdCBwYWNrZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIpOwogCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpICYmCiAJCQlsc2VlayhpbnB1dF9mZCwgMCwgU0VFS19DVVIpIC0gaW5wdXRfbGVuICE9IHN0LnN0X3NpemUpCiAJCWRpZSgicGFjayBoYXMganVuayBhdCB0aGUgZW5kIik7CkBAIC03ODgsNyArNzg3LDcgQEAKIAkJZnN5bmNfb3JfZGllKG91dHB1dF9mZCwgY3Vycl9wYWNrX25hbWUpOwogCQllcnIgPSBjbG9zZShvdXRwdXRfZmQpOwogCQlpZiAoZXJyKQotCQkJZGllKCJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIpOwogCX0KIAogCWlmIChrZWVwX21zZykgewpAQCAtODAxLDE2ICs4MDAsMTYgQEAKIAogCQlpZiAoa2VlcF9mZCA8IDApIHsKIAkJCWlmIChlcnJubyAhPSBFRVhJU1QpCi0JCQkJZGllKCJjYW5ub3Qgd3JpdGUga2VlcCBmaWxlICclcycgKCVzKSIsCi0JCQkJICAgIGtlZXBfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCB3cml0ZSBrZWVwIGZpbGUgJyVzJyIsCisJCQkJCSAga2VlcF9uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChrZWVwX21zZ19sZW4gPiAwKSB7CiAJCQkJd3JpdGVfb3JfZGllKGtlZXBfZmQsIGtlZXBfbXNnLCBrZWVwX21zZ19sZW4pOwogCQkJCXdyaXRlX29yX2RpZShrZWVwX2ZkLCAiXG4iLCAxKTsKIAkJCX0KIAkJCWlmIChjbG9zZShrZWVwX2ZkKSAhPSAwKQotCQkJCWRpZSgiY2Fubm90IGNsb3NlIHdyaXR0ZW4ga2VlcCBmaWxlICclcycgKCVzKSIsCi0JCQkJICAgIGtlZXBfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBjbG9zZSB3cml0dGVuIGtlZXAgZmlsZSAnJXMnIiwKKwkJCQkgICAga2VlcF9uYW1lKTsKIAkJCXJlcG9ydCA9ICJrZWVwIjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2xsLW1lcmdlLmMgYi9sbC1tZXJnZS5jCmluZGV4IGY3YzJiYzkuLjA1NzE1NjQgMTAwNjQ0Ci0tLSBhL2xsLW1lcmdlLmMKKysrIGIvbGwtbWVyZ2UuYwpAQCAtNTUsNyArNTUsNyBAQAogCiBzdGF0aWMgaW50IGxsX3hkbF9tZXJnZShjb25zdCBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpkcnZfdW51c2VkLAogCQkJbW1idWZmZXJfdCAqcmVzdWx0LAotCQkJY29uc3QgY2hhciAqcGF0aF91bnVzZWQsCisJCQljb25zdCBjaGFyICpwYXRoLAogCQkJbW1maWxlX3QgKm9yaWcsCiAJCQltbWZpbGVfdCAqc3JjMSwgY29uc3QgY2hhciAqbmFtZTEsCiAJCQltbWZpbGVfdCAqc3JjMiwgY29uc3QgY2hhciAqbmFtZTIsCkBAIC02NywxMCArNjcsMTAgQEAKIAlpZiAoYnVmZmVyX2lzX2JpbmFyeShvcmlnLT5wdHIsIG9yaWctPnNpemUpIHx8CiAJICAgIGJ1ZmZlcl9pc19iaW5hcnkoc3JjMS0+cHRyLCBzcmMxLT5zaXplKSB8fAogCSAgICBidWZmZXJfaXNfYmluYXJ5KHNyYzItPnB0ciwgc3JjMi0+c2l6ZSkpIHsKLQkJd2FybmluZygiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlczogJXMgdnMuICVzXG4iLAotCQkJbmFtZTEsIG5hbWUyKTsKKwkJd2FybmluZygiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlczogJXMgKCVzIHZzLiAlcylcbiIsCisJCQlwYXRoLCBuYW1lMSwgbmFtZTIpOwogCQlyZXR1cm4gbGxfYmluYXJ5X21lcmdlKGRydl91bnVzZWQsIHJlc3VsdCwKLQkJCQkgICAgICAgcGF0aF91bnVzZWQsCisJCQkJICAgICAgIHBhdGgsCiAJCQkJICAgICAgIG9yaWcsIHNyYzEsIG5hbWUxLAogCQkJCSAgICAgICBzcmMyLCBuYW1lMiwKIAkJCQkgICAgICAgdmlydHVhbF9hbmNlc3Rvcik7CkBAIC0xNTIsNyArMTUyLDcgQEAKIAlzdHJjcHkocGF0aCwgIi5tZXJnZV9maWxlX1hYWFhYWCIpOwogCWZkID0geG1rc3RlbXAocGF0aCk7CiAJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIHNyYy0+cHRyLCBzcmMtPnNpemUpICE9IHNyYy0+c2l6ZSkKLQkJZGllKCJ1bmFibGUgdG8gd3JpdGUgdGVtcC1maWxlIik7CisJCWRpZV9lcnJubygidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOwogCWNsb3NlKGZkKTsKIH0KIApAQCAtMTc1LDggKzE3NSw3IEBACiAJCXsgIkIiLCB0ZW1wWzJdIH0sCiAJCXsgTlVMTCB9CiAJfTsKLQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZDsKLQljb25zdCBjaGFyICphcmdzWzIwXTsKKwljb25zdCBjaGFyICphcmdzW10gPSB7ICJzaCIsICItYyIsIE5VTEwsIE5VTEwgfTsKIAlpbnQgc3RhdHVzLCBmZCwgaTsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIApAQCAtMTkxLDE0ICsxOTAsOCBAQAogCiAJc3RyYnVmX2V4cGFuZCgmY21kLCBmbi0+Y21kbGluZSwgc3RyYnVmX2V4cGFuZF9kaWN0X2NiLCAmZGljdCk7CiAKLQltZW1zZXQoJmNoaWxkLCAwLCBzaXplb2YoY2hpbGQpKTsKLQljaGlsZC5hcmd2ID0gYXJnczsKLQlhcmdzWzBdID0gInNoIjsKLQlhcmdzWzFdID0gIi1jIjsKIAlhcmdzWzJdID0gY21kLmJ1ZjsKLQlhcmdzWzNdID0gTlVMTDsKLQotCXN0YXR1cyA9IHJ1bl9jb21tYW5kKCZjaGlsZCk7CisJc3RhdHVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJncywgMCk7CiAJaWYgKHN0YXR1cyA8IC1FUlJfUlVOX0NPTU1BTkRfRk9SSykKIAkJOyAvKiBmYWlsdXJlIGluIHJ1bi1jb21tYW5kICovCiAJZWxzZQpkaWZmIC0tZ2l0IGEvbG9nLXRyZWUuYyBiL2xvZy10cmVlLmMKaW5kZXggNWJkMjllNi4uMWM5ZWVmZSAxMDA2NDQKLS0tIGEvbG9nLXRyZWUuYworKysgYi9sb2ctdHJlZS5jCkBAIC0yNSw2ICsyNSw4IEBACiAJc3RydWN0IG9iamVjdCAqb2JqID0gcGFyc2Vfb2JqZWN0KHNoYTEpOwogCWlmICghb2JqKQogCQlyZXR1cm4gMDsKKwlpZiAoIWNiX2RhdGEgfHwgKihpbnQgKiljYl9kYXRhID09IERFQ09SQVRFX1NIT1JUX1JFRlMpCisJCXJlZm5hbWUgPSBwcmV0dGlmeV9yZWZuYW1lKHJlZm5hbWUpOwogCWFkZF9uYW1lX2RlY29yYXRpb24oIiIsIHJlZm5hbWUsIG9iaik7CiAJd2hpbGUgKG9iai0+dHlwZSA9PSBPQkpfVEFHKSB7CiAJCW9iaiA9ICgoc3RydWN0IHRhZyAqKW9iaiktPnRhZ2dlZDsKQEAgLTM1LDEyICszNywxMiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGxvYWRfcmVmX2RlY29yYXRpb25zKHZvaWQpCit2b2lkIGxvYWRfcmVmX2RlY29yYXRpb25zKGludCBmbGFncykKIHsKIAlzdGF0aWMgaW50IGxvYWRlZDsKIAlpZiAoIWxvYWRlZCkgewogCQlsb2FkZWQgPSAxOwotCQlmb3JfZWFjaF9yZWYoYWRkX3JlZl9kZWNvcmF0aW9uLCBOVUxMKTsKKwkJZm9yX2VhY2hfcmVmKGFkZF9yZWZfZGVjb3JhdGlvbiwgJmZsYWdzKTsKIAl9CiB9CiAKQEAgLTE2NywxOCArMTY5LDYgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGhhc19ub25fYXNjaWkoY29uc3QgY2hhciAqcykKLXsKLQlpbnQgY2g7Ci0JaWYgKCFzKQotCQlyZXR1cm4gMDsKLQl3aGlsZSAoKGNoID0gKnMrKykgIT0gJ1wwJykgewotCQlpZiAobm9uX2FzY2lpKGNoKSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogdm9pZCBnZXRfcGF0Y2hfZmlsZW5hbWUoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgbnIsIGNvbnN0IGNoYXIgKnN1ZmZpeCwKIAkJCXN0cnVjdCBzdHJidWYgKmJ1ZikKIHsKQEAgLTMyMCw3ICszMTAsOCBAQAogCX0KIAogCS8qCi0JICogSWYgdXNlX3Rlcm1pbmF0b3IgaXMgc2V0LCBhZGQgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGVudHJ5LgorCSAqIElmIHVzZV90ZXJtaW5hdG9yIGlzIHNldCwgd2UgYWxyZWFkeSBoYW5kbGVkIGFueSByZWNvcmQgdGVybWluYXRpb24KKwkgKiBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IHJlY29yZC4KIAkgKiBPdGhlcndpc2UsIGFkZCBhIGRpZmZvcHQubGluZV90ZXJtaW5hdGlvbiBjaGFyYWN0ZXIgYmVmb3JlIGFsbAogCSAqIGVudHJpZXMgYnV0IHRoZSBmaXJzdC4gIChJT1csIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gZW50cmllcykKIAkgKi8KZGlmZiAtLWdpdCBhL2xvZy10cmVlLmggYi9sb2ctdHJlZS5oCmluZGV4IDIwYjVjYWYuLjNmN2I0MDAgMTAwNjQ0Ci0tLSBhL2xvZy10cmVlLmgKKysrIGIvbG9nLXRyZWUuaApAQCAtMTcsNyArMTcsNyBAQAogCQkJICAgICBjb25zdCBjaGFyICoqc3ViamVjdF9wLAogCQkJICAgICBjb25zdCBjaGFyICoqZXh0cmFfaGVhZGVyc19wLAogCQkJICAgICBpbnQgKm5lZWRfOGJpdF9jdGVfcCk7Ci12b2lkIGxvYWRfcmVmX2RlY29yYXRpb25zKHZvaWQpOwordm9pZCBsb2FkX3JlZl9kZWNvcmF0aW9ucyhpbnQgZmxhZ3MpOwogCiAjZGVmaW5lIEZPUk1BVF9QQVRDSF9OQU1FX01BWCA2NAogdm9pZCBnZXRfcGF0Y2hfZmlsZW5hbWUoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgbnIsIGNvbnN0IGNoYXIgKnN1ZmZpeCwKZGlmZiAtLWdpdCBhL21haWxtYXAuYyBiL21haWxtYXAuYwppbmRleCBiYjFmMmZiLi5mMTY3YzAwIDEwMDY0NAotLS0gYS9tYWlsbWFwLmMKKysrIGIvbWFpbG1hcC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJY2hhciAqKmVtYWlsLCBpbnQgYWxsb3dfZW1wdHlfZW1haWwpCiB7CiAJY2hhciAqbGVmdCwgKnJpZ2h0LCAqbnN0YXJ0LCAqbmVuZDsKLQkqbmFtZSA9ICplbWFpbCA9IDA7CisJKm5hbWUgPSAqZW1haWwgPSBOVUxMOwogCiAJaWYgKChsZWZ0ID0gc3RyY2hyKGJ1ZmZlciwgJzwnKSkgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMzYsNyArMTM2LDcgQEAKIAlpZiAoZiA9PSBOVUxMKQogCQlyZXR1cm4gMTsKIAl3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZikgIT0gTlVMTCkgewotCQljaGFyICpuYW1lMSA9IDAsICplbWFpbDEgPSAwLCAqbmFtZTIgPSAwLCAqZW1haWwyID0gMDsKKwkJY2hhciAqbmFtZTEgPSBOVUxMLCAqZW1haWwxID0gTlVMTCwgKm5hbWUyID0gTlVMTCwgKmVtYWlsMiA9IE5VTEw7CiAJCWlmIChidWZmZXJbMF0gPT0gJyMnKSB7CiAJCQlzdGF0aWMgY29uc3QgY2hhciBhYmJyZXZbXSA9ICIjIHJlcG8tYWJicmV2OiI7CiAJCQlpbnQgYWJibGVuID0gc2l6ZW9mKGFiYnJldikgLSAxOwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJaWYgKCFwKSB7CiAJCS8qIGVtYWlsIHBhc3NlZCBpbiBtaWdodCBub3QgYmUgd3JhcHBlZCBpbiA8PiwgYnV0IGVuZCB3aXRoIGEgXDAgKi8KIAkJcCA9IG1lbWNocihlbWFpbCwgJ1wwJywgbWF4bGVuX2VtYWlsKTsKLQkJaWYgKHAgPT0gMCkKKwkJaWYgKCFwKQogCQkJcmV0dXJuIDA7CiAJfQogCWlmIChwIC0gZW1haWwgKyAxIDwgc2l6ZW9mKGJ1ZikpCmRpZmYgLS1naXQgYS9tZXJnZS1pbmRleC5jIGIvbWVyZ2UtaW5kZXguYwppbmRleCBhYTljZjIzLi4xOWRkZDAzIDEwMDY0NAotLS0gYS9tZXJnZS1pbmRleC5jCisrKyBiL21lcmdlLWluZGV4LmMKQEAgLTMsNDUgKzMsMjAgQEAKICNpbmNsdWRlICJleGVjX2NtZC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciAqcGdtOwotc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3VtZW50c1s5XTsKIHN0YXRpYyBpbnQgb25lX3Nob3QsIHF1aWV0Owogc3RhdGljIGludCBlcnI7CiAKLXN0YXRpYyB2b2lkIHJ1bl9wcm9ncmFtKHZvaWQpCi17Ci0Jc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQ7Ci0JbWVtc2V0KCZjaGlsZCwgMCwgc2l6ZW9mKGNoaWxkKSk7Ci0JY2hpbGQuYXJndiA9IGFyZ3VtZW50czsKLQlpZiAocnVuX2NvbW1hbmQoJmNoaWxkKSkgewotCQlpZiAob25lX3Nob3QpIHsKLQkJCWVycisrOwotCQl9IGVsc2UgewotCQkJaWYgKCFxdWlldCkKLQkJCQlkaWUoIm1lcmdlIHByb2dyYW0gZmFpbGVkIik7Ci0JCQlleGl0KDEpOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgaW50IG1lcmdlX2VudHJ5KGludCBwb3MsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJaW50IGZvdW5kOworCWNvbnN0IGNoYXIgKmFyZ3VtZW50c1tdID0geyBwZ20sICIiLCAiIiwgIiIsIHBhdGgsICIiLCAiIiwgIiIsIE5VTEwgfTsKKwljaGFyIGhleGJ1Zls0XVs2MF07CisJY2hhciBvd25idWZbNF1bNjBdOwogCiAJaWYgKHBvcyA+PSBhY3RpdmVfbnIpCiAJCWRpZSgiZ2l0IG1lcmdlLWluZGV4OiAlcyBub3QgaW4gdGhlIGNhY2hlIiwgcGF0aCk7Ci0JYXJndW1lbnRzWzBdID0gcGdtOwotCWFyZ3VtZW50c1sxXSA9ICIiOwotCWFyZ3VtZW50c1syXSA9ICIiOwotCWFyZ3VtZW50c1szXSA9ICIiOwotCWFyZ3VtZW50c1s0XSA9IHBhdGg7Ci0JYXJndW1lbnRzWzVdID0gIiI7Ci0JYXJndW1lbnRzWzZdID0gIiI7Ci0JYXJndW1lbnRzWzddID0gIiI7Ci0JYXJndW1lbnRzWzhdID0gTlVMTDsKIAlmb3VuZCA9IDA7CiAJZG8gewotCQlzdGF0aWMgY2hhciBoZXhidWZbNF1bNjBdOwotCQlzdGF0aWMgY2hhciBvd25idWZbNF1bNjBdOwogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CiAJCWludCBzdGFnZSA9IGNlX3N0YWdlKGNlKTsKIApAQCAtNTUsNyArMzAsMTYgQEAKIAl9IHdoaWxlICgrK3BvcyA8IGFjdGl2ZV9ucik7CiAJaWYgKCFmb3VuZCkKIAkJZGllKCJnaXQgbWVyZ2UtaW5kZXg6ICVzIG5vdCBpbiB0aGUgY2FjaGUiLCBwYXRoKTsKLQlydW5fcHJvZ3JhbSgpOworCisJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3VtZW50cywgMCkpIHsKKwkJaWYgKG9uZV9zaG90KQorCQkJZXJyKys7CisJCWVsc2UgeworCQkJaWYgKCFxdWlldCkKKwkJCQlkaWUoIm1lcmdlIHByb2dyYW0gZmFpbGVkIik7CisJCQlleGl0KDEpOworCQl9CisJfQogCXJldHVybiBmb3VuZDsKIH0KIApkaWZmIC0tZ2l0IGEvbWVyZ2UtcmVjdXJzaXZlLmMgYi9tZXJnZS1yZWN1cnNpdmUuYwppbmRleCBmNWRmOWI5Li4xMGQ3OTEzIDEwMDY0NAotLS0gYS9tZXJnZS1yZWN1cnNpdmUuYworKysgYi9tZXJnZS1yZWN1cnNpdmUuYwpAQCAtMzgsNyArMzgsNyBAQAogICogQSB2aXJ0dWFsIGNvbW1pdCBoYXMgKGNvbnN0IGNoYXIgKiljb21taXQtPnV0aWwgc2V0IHRvIHRoZSBuYW1lLgogICovCiAKLXN0cnVjdCBjb21taXQgKm1ha2VfdmlydHVhbF9jb21taXQoc3RydWN0IHRyZWUgKnRyZWUsIGNvbnN0IGNoYXIgKmNvbW1lbnQpCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqbWFrZV92aXJ0dWFsX2NvbW1pdChzdHJ1Y3QgdHJlZSAqdHJlZSwgY29uc3QgY2hhciAqY29tbWVudCkKIHsKIAlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY29tbWl0KSk7CiAJY29tbWl0LT50cmVlID0gdHJlZTsKQEAgLTQzOCw3ICs0MzgsNyBAQAogCQkJLyogSWdub3JlIGVwaXBlICovCiAJCQlpZiAoZXJybm8gPT0gRVBJUEUpCiAJCQkJYnJlYWs7Ci0JCQlkaWUoIm1lcmdlLXJlY3Vyc2l2ZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJtZXJnZS1yZWN1cnNpdmUiKTsKIAkJfSBlbHNlIGlmICghcmV0KSB7CiAJCQlkaWUoIm1lcmdlLXJlY3Vyc2l2ZTogZGlzayBmdWxsPyIpOwogCQl9CkBAIC01NTQsNyArNTU0LDcgQEAKIAkJCQltb2RlID0gMDY2NjsKIAkJCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fVFJVTkMgfCBPX0NSRUFULCBtb2RlKTsKIAkJCWlmIChmZCA8IDApCi0JCQkJZGllKCJmYWlsZWQgdG8gb3BlbiAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQkJCWRpZV9lcnJubygiZmFpbGVkIHRvIG9wZW4gJyVzJyIsIHBhdGgpOwogCQkJZmx1c2hfYnVmZmVyKGZkLCBidWYsIHNpemUpOwogCQkJY2xvc2UoZmQpOwogCQl9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHsKQEAgLTU2Miw3ICs1NjIsNyBAQAogCQkJc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChwYXRoKTsKIAkJCXVubGluayhwYXRoKTsKIAkJCWlmIChzeW1saW5rKGxuaywgcGF0aCkpCi0JCQkJZGllKCJmYWlsZWQgdG8gc3ltbGluayAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQkJCWRpZV9lcnJubygiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJyIsIHBhdGgpOwogCQkJZnJlZShsbmspOwogCQl9IGVsc2UKIAkJCWRpZSgiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIsCkBAIC02MjIsOCArNjIyLDEzIEBACiAJY2hhciAqbmFtZTEsICpuYW1lMjsKIAlpbnQgbWVyZ2Vfc3RhdHVzOwogCi0JbmFtZTEgPSB4c3RyZHVwKG1rcGF0aCgiJXM6JXMiLCBicmFuY2gxLCBhLT5wYXRoKSk7Ci0JbmFtZTIgPSB4c3RyZHVwKG1rcGF0aCgiJXM6JXMiLCBicmFuY2gyLCBiLT5wYXRoKSk7CisJaWYgKHN0cmNtcChhLT5wYXRoLCBiLT5wYXRoKSkgeworCQluYW1lMSA9IHhzdHJkdXAobWtwYXRoKCIlczolcyIsIGJyYW5jaDEsIGEtPnBhdGgpKTsKKwkJbmFtZTIgPSB4c3RyZHVwKG1rcGF0aCgiJXM6JXMiLCBicmFuY2gyLCBiLT5wYXRoKSk7CisJfSBlbHNlIHsKKwkJbmFtZTEgPSB4c3RyZHVwKG1rcGF0aCgiJXMiLCBicmFuY2gxKSk7CisJCW5hbWUyID0geHN0cmR1cChta3BhdGgoIiVzIiwgYnJhbmNoMikpOworCX0KIAogCWZpbGxfbW0ob25lLT5zaGExLCAmb3JpZyk7CiAJZmlsbF9tbShhLT5zaGExLCAmc3JjMSk7CkBAIC05NDcsOSArOTUyLDMxIEBACiAJCQkJICAgICAgICIlcyBhZGRlZCBpbiAlcyIsCiAJCQkJICAgICAgIHJlbjFfc3JjLCByZW4xX2RzdCwgYnJhbmNoMSwKIAkJCQkgICAgICAgcmVuMV9kc3QsIGJyYW5jaDIpOwotCQkJCW5ld19wYXRoID0gdW5pcXVlX3BhdGgobywgcmVuMV9kc3QsIGJyYW5jaDIpOwotCQkJCW91dHB1dChvLCAxLCAiQWRkaW5nIGFzICVzIGluc3RlYWQiLCBuZXdfcGF0aCk7Ci0JCQkJdXBkYXRlX2ZpbGUobywgMCwgZHN0X290aGVyLnNoYTEsIGRzdF9vdGhlci5tb2RlLCBuZXdfcGF0aCk7CisJCQkJaWYgKG8tPmNhbGxfZGVwdGgpIHsKKwkJCQkJc3RydWN0IG1lcmdlX2ZpbGVfaW5mbyBtZmk7CisJCQkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjIG9uZSwgYSwgYjsKKworCQkJCQlvbmUucGF0aCA9IGEucGF0aCA9IGIucGF0aCA9CisJCQkJCQkoY2hhciAqKXJlbjFfZHN0OworCQkJCQloYXNoY3B5KG9uZS5zaGExLCBudWxsX3NoYTEpOworCQkJCQlvbmUubW9kZSA9IDA7CisJCQkJCWhhc2hjcHkoYS5zaGExLCByZW4xLT5wYWlyLT50d28tPnNoYTEpOworCQkJCQlhLm1vZGUgPSByZW4xLT5wYWlyLT50d28tPm1vZGU7CisJCQkJCWhhc2hjcHkoYi5zaGExLCBkc3Rfb3RoZXIuc2hhMSk7CisJCQkJCWIubW9kZSA9IGRzdF9vdGhlci5tb2RlOworCQkJCQltZmkgPSBtZXJnZV9maWxlKG8sICZvbmUsICZhLCAmYiwKKwkJCQkJCQkgYnJhbmNoMSwKKwkJCQkJCQkgYnJhbmNoMik7CisJCQkJCW91dHB1dChvLCAxLCAiQWRkaW5nIG1lcmdlZCAlcyIsIHJlbjFfZHN0KTsKKwkJCQkJdXBkYXRlX2ZpbGUobywgMCwKKwkJCQkJCSAgICBtZmkuc2hhLAorCQkJCQkJICAgIG1maS5tb2RlLAorCQkJCQkJICAgIHJlbjFfZHN0KTsKKwkJCQl9IGVsc2UgeworCQkJCQluZXdfcGF0aCA9IHVuaXF1ZV9wYXRoKG8sIHJlbjFfZHN0LCBicmFuY2gyKTsKKwkJCQkJb3V0cHV0KG8sIDEsICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIsIG5ld19wYXRoKTsKKwkJCQkJdXBkYXRlX2ZpbGUobywgMCwgZHN0X290aGVyLnNoYTEsIGRzdF9vdGhlci5tb2RlLCBuZXdfcGF0aCk7CisJCQkJfQogCQkJfSBlbHNlIGlmICgoaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cChyZW4xX2RzdCwgcmVuYW1lczJEc3QpKSkgewogCQkJCXJlbjIgPSBpdGVtLT51dGlsOwogCQkJCWNsZWFuX21lcmdlID0gMDsKZGlmZiAtLWdpdCBhL21rdGFnLmMgYi9ta3RhZy5jCmluZGV4IDk5YTM1NmUuLmE2MDllM2UgMTAwNjQ0Ci0tLSBhL21rdGFnLmMKKysrIGIvbWt0YWcuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwogCiAJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDQwOTYpIDwgMCkgewotCQlkaWUoImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iKTsKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIik7CiAJfQogCiAJLyogVmVyaWZ5IGl0IGZvciBzb21lIGJhc2ljIHNhbml0eTogaXQgbmVlZHMgdG8gc3RhcnQgd2l0aApkaWZmIC0tZ2l0IGEvbWt0cmVlLmMgYi9ta3RyZWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM3YTA5NS4uMDAwMDAwMAotLS0gYS9ta3RyZWUuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogR0lUIC0gdGhlIHN0dXBpZCBjb250ZW50IHRyYWNrZXIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIEp1bmlvIEMgSGFtYW5vLCAyMDA2Ci0gKi8KLSNpbmNsdWRlICJjYWNoZS5oIgotI2luY2x1ZGUgInF1b3RlLmgiCi0jaW5jbHVkZSAidHJlZS5oIgotI2luY2x1ZGUgImV4ZWNfY21kLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgdHJlZWVudCB7Ci0JdW5zaWduZWQgbW9kZTsKLQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCWludCBsZW47Ci0JY2hhciBuYW1lW0ZMRVhfQVJSQVldOwotfSAqKmVudHJpZXM7Ci1zdGF0aWMgaW50IGFsbG9jLCB1c2VkOwotCi1zdGF0aWMgdm9pZCBhcHBlbmRfdG9fdHJlZSh1bnNpZ25lZCBtb2RlLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICpwYXRoKQotewotCXN0cnVjdCB0cmVlZW50ICplbnQ7Ci0JaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKLQlpZiAoc3RyY2hyKHBhdGgsICcvJykpCi0JCWRpZSgicGF0aCAlcyBjb250YWlucyBzbGFzaCIsIHBhdGgpOwotCi0JaWYgKGFsbG9jIDw9IHVzZWQpIHsKLQkJYWxsb2MgPSBhbGxvY19ucih1c2VkKTsKLQkJZW50cmllcyA9IHhyZWFsbG9jKGVudHJpZXMsIHNpemVvZigqZW50cmllcykgKiBhbGxvYyk7Ci0JfQotCWVudCA9IGVudHJpZXNbdXNlZCsrXSA9IHhtYWxsb2Moc2l6ZW9mKCoqZW50cmllcykgKyBsZW4gKyAxKTsKLQllbnQtPm1vZGUgPSBtb2RlOwotCWVudC0+bGVuID0gbGVuOwotCWhhc2hjcHkoZW50LT5zaGExLCBzaGExKTsKLQltZW1jcHkoZW50LT5uYW1lLCBwYXRoLCBsZW4rMSk7Ci19Ci0KLXN0YXRpYyBpbnQgZW50X2NvbXBhcmUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQotewotCXN0cnVjdCB0cmVlZW50ICphID0gKihzdHJ1Y3QgdHJlZWVudCAqKilhXzsKLQlzdHJ1Y3QgdHJlZWVudCAqYiA9ICooc3RydWN0IHRyZWVlbnQgKiopYl87Ci0JcmV0dXJuIGJhc2VfbmFtZV9jb21wYXJlKGEtPm5hbWUsIGEtPmxlbiwgYS0+bW9kZSwKLQkJCQkgYi0+bmFtZSwgYi0+bGVuLCBiLT5tb2RlKTsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExKQotewotCXN0cnVjdCBzdHJidWYgYnVmOwotCXNpemVfdCBzaXplOwotCWludCBpOwotCi0JcXNvcnQoZW50cmllcywgdXNlZCwgc2l6ZW9mKCplbnRyaWVzKSwgZW50X2NvbXBhcmUpOwotCWZvciAoc2l6ZSA9IGkgPSAwOyBpIDwgdXNlZDsgaSsrKQotCQlzaXplICs9IDMyICsgZW50cmllc1tpXS0+bGVuOwotCi0Jc3RyYnVmX2luaXQoJmJ1Ziwgc2l6ZSk7Ci0JZm9yIChpID0gMDsgaSA8IHVzZWQ7IGkrKykgewotCQlzdHJ1Y3QgdHJlZWVudCAqZW50ID0gZW50cmllc1tpXTsKLQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVvICVzJWMiLCBlbnQtPm1vZGUsIGVudC0+bmFtZSwgJ1wwJyk7Ci0JCXN0cmJ1Zl9hZGQoJmJ1ZiwgZW50LT5zaGExLCAyMCk7Ci0JfQotCi0Jd3JpdGVfc2hhMV9maWxlKGJ1Zi5idWYsIGJ1Zi5sZW4sIHRyZWVfdHlwZSwgc2hhMSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyIG1rdHJlZV91c2FnZVtdID0gImdpdCBta3RyZWUgWy16XSI7Ci0KLWludCBtYWluKGludCBhYywgY2hhciAqKmF2KQotewotCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKLQlzdHJ1Y3Qgc3RyYnVmIHBfdXEgPSBTVFJCVUZfSU5JVDsKLQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCWludCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKLQotCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXZbMF0pOwotCi0Jc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwotCi0Jd2hpbGUgKCgxIDwgYWMpICYmIGF2WzFdWzBdID09ICctJykgewotCQljaGFyICphcmcgPSBhdlsxXTsKLQkJaWYgKCFzdHJjbXAoIi16IiwgYXJnKSkKLQkJCWxpbmVfdGVybWluYXRpb24gPSAwOwotCQllbHNlCi0JCQl1c2FnZShta3RyZWVfdXNhZ2UpOwotCQlhYy0tOwotCQlhdisrOwotCX0KLQotCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmc2IsIHN0ZGluLCBsaW5lX3Rlcm1pbmF0aW9uKSAhPSBFT0YpIHsKLQkJY2hhciAqcHRyLCAqbnRyOwotCQl1bnNpZ25lZCBtb2RlOwotCQllbnVtIG9iamVjdF90eXBlIHR5cGU7Ci0JCWNoYXIgKnBhdGg7Ci0KLQkJcHRyID0gc2IuYnVmOwotCQkvKiBJbnB1dCBpcyBub24tcmVjdXJzaXZlIGxzLXRyZWUgb3V0cHV0IGZvcm1hdAotCQkgKiBtb2RlIFNQIHR5cGUgU1Agc2hhMSBUQUIgbmFtZQotCQkgKi8KLQkJbW9kZSA9IHN0cnRvdWwocHRyLCAmbnRyLCA4KTsKLQkJaWYgKHB0ciA9PSBudHIgfHwgIW50ciB8fCAqbnRyICE9ICcgJykKLQkJCWRpZSgiaW5wdXQgZm9ybWF0IGVycm9yOiAlcyIsIHNiLmJ1Zik7Ci0JCXB0ciA9IG50ciArIDE7IC8qIHR5cGUgKi8KLQkJbnRyID0gc3RyY2hyKHB0ciwgJyAnKTsKLQkJaWYgKCFudHIgfHwgc2IuYnVmICsgc2IubGVuIDw9IG50ciArIDQwIHx8Ci0JCSAgICBudHJbNDFdICE9ICdcdCcgfHwKLQkJICAgIGdldF9zaGExX2hleChudHIgKyAxLCBzaGExKSkKLQkJCWRpZSgiaW5wdXQgZm9ybWF0IGVycm9yOiAlcyIsIHNiLmJ1Zik7Ci0JCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOwotCQlpZiAodHlwZSA8IDApCi0JCQlkaWUoIm9iamVjdCAlcyB1bmF2YWlsYWJsZSIsIHNoYTFfdG9faGV4KHNoYTEpKTsKLQkJKm50cisrID0gMDsgLyogbm93IGF0IHRoZSBiZWdpbm5pbmcgb2YgU0hBMSAqLwotCQlpZiAodHlwZSAhPSB0eXBlX2Zyb21fc3RyaW5nKHB0cikpCi0JCQlkaWUoIm9iamVjdCB0eXBlICVzIG1pc21hdGNoICglcykiLCBwdHIsIHR5cGVuYW1lKHR5cGUpKTsKLQotCQlwYXRoID0gbnRyICsgNDE7ICAvKiBhdCB0aGUgYmVnaW5uaW5nIG9mIG5hbWUgKi8KLQkJaWYgKGxpbmVfdGVybWluYXRpb24gJiYgcGF0aFswXSA9PSAnIicpIHsKLQkJCXN0cmJ1Zl9yZXNldCgmcF91cSk7Ci0JCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZwX3VxLCBwYXRoLCBOVUxMKSkgewotCQkJCWRpZSgiaW52YWxpZCBxdW90aW5nIik7Ci0JCQl9Ci0JCQlwYXRoID0gcF91cS5idWY7Ci0JCX0KLQotCQlhcHBlbmRfdG9fdHJlZShtb2RlLCBzaGExLCBwYXRoKTsKLQl9Ci0Jc3RyYnVmX3JlbGVhc2UoJnBfdXEpOwotCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Ci0KLQl3cml0ZV90cmVlKHNoYTEpOwotCXB1dHMoc2hhMV90b19oZXgoc2hhMSkpOwotCWV4aXQoMCk7Ci19CmRpZmYgLS1naXQgYS9vYmplY3QuYyBiL29iamVjdC5jCmluZGV4IGUxZmVlZjkuLmE2ZWY0MzkgMTAwNjQ0Ci0tLSBhL29iamVjdC5jCisrKyBiL29iamVjdC5jCkBAIC01Miw3ICs1Miw3IEBACiAKIHN0YXRpYyB2b2lkIGluc2VydF9vYmpfaGFzaChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCBvYmplY3QgKipoYXNoLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKLQlpbnQgaiA9IGhhc2hfb2JqKG9iaiwgc2l6ZSk7CisJdW5zaWduZWQgaW50IGogPSBoYXNoX29iaihvYmosIHNpemUpOwogCiAJd2hpbGUgKGhhc2hbal0pIHsKIAkJaisrOwpAQCAtNjIsMTYgKzYyLDE2IEBACiAJaGFzaFtqXSA9IG9iajsKIH0KIAotc3RhdGljIGludCBoYXNodGFibGVfaW5kZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaHRhYmxlX2luZGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJbWVtY3B5KCZpLCBzaGExLCBzaXplb2YodW5zaWduZWQgaW50KSk7Ci0JcmV0dXJuIChpbnQpKGkgJSBvYmpfaGFzaF9zaXplKTsKKwlyZXR1cm4gaSAlIG9ial9oYXNoX3NpemU7CiB9CiAKIHN0cnVjdCBvYmplY3QgKmxvb2t1cF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaTsKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CiAKIAlpZiAoIW9ial9oYXNoKQpkaWZmIC0tZ2l0IGEvcGFjay1jaGVjay5jIGIvcGFjay1jaGVjay5jCmluZGV4IDkwYzMzYjEuLjE2NmNhNzAgMTAwNjQ0Ci0tLSBhL3BhY2stY2hlY2suYworKysgYi9wYWNrLWNoZWNrLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIAljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleF9iYXNlID0gcC0+aW5kZXhfZGF0YTsKIAlnaXRfU0hBX0NUWCBjdHg7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXSwgKnBhY2tfc2lnOwotCW9mZl90IG9mZnNldCA9IDAsIHBhY2tfc2lnX29mcyA9IHAtPnBhY2tfc2l6ZSAtIDIwOworCW9mZl90IG9mZnNldCA9IDAsIHBhY2tfc2lnX29mcyA9IDA7CiAJdWludDMyX3QgbnJfb2JqZWN0cywgaTsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgaWR4X2VudHJ5ICplbnRyaWVzOwpAQCAtNjEsMTQgKzYxLDE2IEBACiAJICovCiAKIAlnaXRfU0hBMV9Jbml0KCZjdHgpOwotCXdoaWxlIChvZmZzZXQgPCBwYWNrX3NpZ19vZnMpIHsKKwlkbyB7CiAJCXVuc2lnbmVkIGludCByZW1haW5pbmc7CiAJCXVuc2lnbmVkIGNoYXIgKmluID0gdXNlX3BhY2socCwgd19jdXJzLCBvZmZzZXQsICZyZW1haW5pbmcpOwogCQlvZmZzZXQgKz0gcmVtYWluaW5nOworCQlpZiAoIXBhY2tfc2lnX29mcykKKwkJCXBhY2tfc2lnX29mcyA9IHAtPnBhY2tfc2l6ZSAtIDIwOwogCQlpZiAob2Zmc2V0ID4gcGFja19zaWdfb2ZzKQogCQkJcmVtYWluaW5nIC09ICh1bnNpZ25lZCBpbnQpKG9mZnNldCAtIHBhY2tfc2lnX29mcyk7CiAJCWdpdF9TSEExX1VwZGF0ZSgmY3R4LCBpbiwgcmVtYWluaW5nKTsKLQl9CisJfSB3aGlsZSAob2Zmc2V0IDwgcGFja19zaWdfb2ZzKTsKIAlnaXRfU0hBMV9GaW5hbChzaGExLCAmY3R4KTsKIAlwYWNrX3NpZyA9IHVzZV9wYWNrKHAsIHdfY3VycywgcGFja19zaWdfb2ZzLCBOVUxMKTsKIAlpZiAoaGFzaGNtcChzaGExLCBwYWNrX3NpZykpCmRpZmYgLS1naXQgYS9wYWNrLXJlZnMuYyBiL3BhY2stcmVmcy5jCmluZGV4IDMwMWZjNjAuLjdmNDNmOGEgMTAwNjQ0Ci0tLSBhL3BhY2stcmVmcy5jCisrKyBiL3BhY2stcmVmcy5jCkBAIC05Myw4ICs5Myw3IEBACiAJCQkJICAgICAgIExPQ0tfRElFX09OX0VSUk9SKTsKIAljYmRhdGEucmVmc19maWxlID0gZmRvcGVuKGZkLCAidyIpOwogCWlmICghY2JkYXRhLnJlZnNfZmlsZSkKLQkJZGllKCJ1bmFibGUgdG8gY3JlYXRlIHJlZi1wYWNrIGZpbGUgc3RydWN0dXJlICglcykiLAotCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIHJlZi1wYWNrIGZpbGUgc3RydWN0dXJlIik7CiAKIAkvKiBwZXJoYXBzIG90aGVyIHRyYWl0cyBsYXRlciBhcyB3ZWxsICovCiAJZnByaW50ZihjYmRhdGEucmVmc19maWxlLCAiIyBwYWNrLXJlZnMgd2l0aDogcGVlbGVkIFxuIik7CkBAIC0xMDMsNyArMTAyLDcgQEAKIAlpZiAoZmVycm9yKGNiZGF0YS5yZWZzX2ZpbGUpKQogCQlkaWUoImZhaWxlZCB0byB3cml0ZSByZWYtcGFjayBmaWxlIik7CiAJaWYgKGZmbHVzaChjYmRhdGEucmVmc19maWxlKSB8fCBmc3luYyhmZCkgfHwgZmNsb3NlKGNiZGF0YS5yZWZzX2ZpbGUpKQotCQlkaWUoImZhaWxlZCB0byB3cml0ZSByZWYtcGFjayBmaWxlICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImZhaWxlZCB0byB3cml0ZSByZWYtcGFjayBmaWxlIik7CiAJLyoKIAkgKiBTaW5jZSB0aGUgbG9jayBmaWxlIHdhcyBmZG9wZW4oKSdlZCBhbmQgdGhlbiBmY2xvc2UoKSdlZCBhYm92ZSwKIAkgKiBhc3NpZ24gLTEgdG8gdGhlIGxvY2sgZmlsZSBkZXNjcmlwdG9yIHNvIHRoYXQgY29tbWl0X2xvY2tfZmlsZSgpCkBAIC0xMTEsNyArMTEwLDcgQEAKIAkgKi8KIAlwYWNrZWQuZmQgPSAtMTsKIAlpZiAoY29tbWl0X2xvY2tfZmlsZSgmcGFja2VkKSA8IDApCi0JCWRpZSgidW5hYmxlIHRvIG92ZXJ3cml0ZSBvbGQgcmVmLXBhY2sgZmlsZSAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gb3ZlcndyaXRlIG9sZCByZWYtcGFjayBmaWxlIik7CiAJaWYgKGNiZGF0YS5mbGFncyAmIFBBQ0tfUkVGU19QUlVORSkKIAkJcHJ1bmVfcmVmcyhjYmRhdGEucmVmX3RvX3BydW5lKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3BhY2stcmV2aW5kZXguYyBiL3BhY2stcmV2aW5kZXguYwppbmRleCAxZGU1M2M4Li43N2EwNDY1IDEwMDY0NAotLS0gYS9wYWNrLXJldmluZGV4LmMKKysrIGIvcGFjay1yZXZpbmRleC5jCkBAIC0xNDksOCArMTQ5LDcgQEAKIAlpZiAocGFja19yZXZpbmRleF9oYXNoc3opIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBwYWNrX3JldmluZGV4X2hhc2hzejsgaSsrKQotCQkJaWYgKHBhY2tfcmV2aW5kZXhbaV0ucmV2aW5kZXgpCi0JCQkJZnJlZShwYWNrX3JldmluZGV4W2ldLnJldmluZGV4KTsKKwkJCWZyZWUocGFja19yZXZpbmRleFtpXS5yZXZpbmRleCk7CiAJCWZyZWUocGFja19yZXZpbmRleCk7CiAJCXBhY2tfcmV2aW5kZXhfaGFzaHN6ID0gMDsKIAl9CmRpZmYgLS1naXQgYS9wYWNrLXdyaXRlLmMgYi9wYWNrLXdyaXRlLmMKaW5kZXggNzA1MzUzOC4uNzQxZWZjZCAxMDA2NDQKLS0tIGEvcGFjay13cml0ZS5jCisrKyBiL3BhY2std3JpdGUuYwpAQCAtNTEsNyArNTEsNyBAQAogCQlmZCA9IG9wZW4oaW5kZXhfbmFtZSwgT19DUkVBVHxPX0VYQ0x8T19XUk9OTFksIDA2MDApOwogCX0KIAlpZiAoZmQgPCAwKQotCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgJXM6ICVzIiwgaW5kZXhfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlICclcyciLCBpbmRleF9uYW1lKTsKIAlmID0gc2hhMWZkKGZkLCBpbmRleF9uYW1lKTsKIAogCS8qIGlmIGxhc3Qgb2JqZWN0J3Mgb2Zmc2V0IGlzID49IDJeMzEgd2Ugc2hvdWxkIHVzZSBpbmRleCBWMiAqLwpAQCAtMTc0LDExICsxNzQsMTEgQEAKIAlnaXRfU0hBMV9Jbml0KCZuZXdfc2hhMV9jdHgpOwogCiAJaWYgKGxzZWVrKHBhY2tfZmQsIDAsIFNFRUtfU0VUKSAhPSAwKQotCQlkaWUoIkZhaWxlZCBzZWVraW5nIHRvIHN0YXJ0IG9mICVzOiAlcyIsIHBhY2tfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJGYWlsZWQgc2Vla2luZyB0byBzdGFydCBvZiAnJXMnIiwgcGFja19uYW1lKTsKIAlpZiAocmVhZF9pbl9mdWxsKHBhY2tfZmQsICZoZHIsIHNpemVvZihoZHIpKSAhPSBzaXplb2YoaGRyKSkKLQkJZGllKCJVbmFibGUgdG8gcmVyZWFkIGhlYWRlciBvZiAlczogJXMiLCBwYWNrX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiVW5hYmxlIHRvIHJlcmVhZCBoZWFkZXIgb2YgJyVzJyIsIHBhY2tfbmFtZSk7CiAJaWYgKGxzZWVrKHBhY2tfZmQsIDAsIFNFRUtfU0VUKSAhPSAwKQotCQlkaWUoIkZhaWxlZCBzZWVraW5nIHRvIHN0YXJ0IG9mICVzOiAlcyIsIHBhY2tfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJGYWlsZWQgc2Vla2luZyB0byBzdGFydCBvZiAnJXMnIiwgcGFja19uYW1lKTsKIAlnaXRfU0hBMV9VcGRhdGUoJm9sZF9zaGExX2N0eCwgJmhkciwgc2l6ZW9mKGhkcikpOwogCWhkci5oZHJfZW50cmllcyA9IGh0b25sKG9iamVjdF9jb3VudCk7CiAJZ2l0X1NIQTFfVXBkYXRlKCZuZXdfc2hhMV9jdHgsICZoZHIsIHNpemVvZihoZHIpKTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogCQlpZiAoIW4pCiAJCQlicmVhazsKIAkJaWYgKG4gPCAwKQotCQkJZGllKCJGYWlsZWQgdG8gY2hlY2tzdW0gJXM6ICVzIiwgcGFja19uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJGYWlsZWQgdG8gY2hlY2tzdW0gJyVzJyIsIHBhY2tfbmFtZSk7CiAJCWdpdF9TSEExX1VwZGF0ZSgmbmV3X3NoYTFfY3R4LCBidWYsIG4pOwogCiAJCWFsaWduZWRfc3ogLT0gbjsKZGlmZiAtLWdpdCBhL3BhcnNlLW9wdGlvbnMuYyBiL3BhcnNlLW9wdGlvbnMuYwppbmRleCBjZjcxYmNmLi5mN2NlNTIzIDEwMDY0NAotLS0gYS9wYXJzZS1vcHRpb25zLmMKKysrIGIvcGFyc2Utb3B0aW9ucy5jCkBAIC0zMSwxMSArMzEsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZml4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqKmZpbGUpCit7CisJaWYgKCFmaWxlIHx8ICEqZmlsZSB8fCAhcHJlZml4IHx8IGlzX2Fic29sdXRlX3BhdGgoKmZpbGUpCisJICAgIHx8ICFzdHJjbXAoIi0iLCAqZmlsZSkpCisJCXJldHVybjsKKwkqZmlsZSA9IHhzdHJkdXAocHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgc3RybGVuKHByZWZpeCksICpmaWxlKSk7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X3ZhbHVlKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKnAsCiAJCSAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBpbnQgZmxhZ3MpCiB7CiAJY29uc3QgY2hhciAqcywgKmFyZzsKIAljb25zdCBpbnQgdW5zZXQgPSBmbGFncyAmIE9QVF9VTlNFVDsKKwlpbnQgZXJyOwogCiAJaWYgKHVuc2V0ICYmIHAtPm9wdCkKIAkJcmV0dXJuIG9wdGVycm9yKG9wdCwgInRha2VzIG5vIHZhbHVlIiwgZmxhZ3MpOwpAQCAtNTAsNiArNTksNyBAQAogCQkJLyogRkFMTFRIUk9VR0ggKi8KIAkJY2FzZSBPUFRJT05fQk9PTEVBTjoKIAkJY2FzZSBPUFRJT05fQklUOgorCQljYXNlIE9QVElPTl9ORUdCSVQ6CiAJCWNhc2UgT1BUSU9OX1NFVF9JTlQ6CiAJCWNhc2UgT1BUSU9OX1NFVF9QVFI6CiAJCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAidGFrZXMgbm8gdmFsdWUiLCBmbGFncyk7CkBAIC02Niw2ICs3NiwxMyBAQAogCQkJKihpbnQgKilvcHQtPnZhbHVlIHw9IG9wdC0+ZGVmdmFsOwogCQlyZXR1cm4gMDsKIAorCWNhc2UgT1BUSU9OX05FR0JJVDoKKwkJaWYgKHVuc2V0KQorCQkJKihpbnQgKilvcHQtPnZhbHVlIHw9IG9wdC0+ZGVmdmFsOworCQllbHNlCisJCQkqKGludCAqKW9wdC0+dmFsdWUgJj0gfm9wdC0+ZGVmdmFsOworCQlyZXR1cm4gMDsKKwogCWNhc2UgT1BUSU9OX0JPT0xFQU46CiAJCSooaW50ICopb3B0LT52YWx1ZSA9IHVuc2V0ID8gMCA6ICooaW50ICopb3B0LT52YWx1ZSArIDE7CiAJCXJldHVybiAwOwpAQCAtODcsNiArMTA0LDE5IEBACiAJCQlyZXR1cm4gZ2V0X2FyZyhwLCBvcHQsIGZsYWdzLCAoY29uc3QgY2hhciAqKilvcHQtPnZhbHVlKTsKIAkJcmV0dXJuIDA7CiAKKwljYXNlIE9QVElPTl9GSUxFTkFNRToKKwkJZXJyID0gMDsKKwkJaWYgKHVuc2V0KQorCQkJKihjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUgPSBOVUxMOworCQllbHNlIGlmIChvcHQtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRyAmJiAhcC0+b3B0KQorCQkJKihjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUgPSAoY29uc3QgY2hhciAqKW9wdC0+ZGVmdmFsOworCQllbHNlCisJCQllcnIgPSBnZXRfYXJnKHAsIG9wdCwgZmxhZ3MsIChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUpOworCisJCWlmICghZXJyKQorCQkJZml4X2ZpbGVuYW1lKHAtPnByZWZpeCwgKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSk7CisJCXJldHVybiBlcnI7CisKIAljYXNlIE9QVElPTl9DQUxMQkFDSzoKIAkJaWYgKHVuc2V0KQogCQkJcmV0dXJuICgqb3B0LT5jYWxsYmFjaykob3B0LCBOVUxMLCAxKSA/ICgtMSkgOiAwOwpAQCAtMTIxLDExICsxNTEsMzMgQEAKIAogc3RhdGljIGludCBwYXJzZV9zaG9ydF9vcHQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqcCwgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucykKIHsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICpudW1vcHQgPSBOVUxMOworCiAJZm9yICg7IG9wdGlvbnMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0aW9ucysrKSB7CiAJCWlmIChvcHRpb25zLT5zaG9ydF9uYW1lID09ICpwLT5vcHQpIHsKIAkJCXAtPm9wdCA9IHAtPm9wdFsxXSA/IHAtPm9wdCArIDEgOiBOVUxMOwogCQkJcmV0dXJuIGdldF92YWx1ZShwLCBvcHRpb25zLCBPUFRfU0hPUlQpOwogCQl9CisKKwkJLyoKKwkJICogSGFuZGxlIHRoZSBudW1lcmljYWwgb3B0aW9uIGxhdGVyLCBleHBsaWNpdCBvbmUtZGlnaXQKKwkJICogb3B0aW9ucyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBpdC4KKwkJICovCisJCWlmIChvcHRpb25zLT50eXBlID09IE9QVElPTl9OVU1CRVIpCisJCQludW1vcHQgPSBvcHRpb25zOworCX0KKwlpZiAobnVtb3B0ICYmIGlzZGlnaXQoKnAtPm9wdCkpIHsKKwkJc2l6ZV90IGxlbiA9IDE7CisJCWNoYXIgKmFyZzsKKwkJaW50IHJjOworCisJCXdoaWxlIChpc2RpZ2l0KHAtPm9wdFtsZW5dKSkKKwkJCWxlbisrOworCQlhcmcgPSB4bWVtZHVweihwLT5vcHQsIGxlbik7CisJCXAtPm9wdCA9IHAtPm9wdFtsZW5dID8gcC0+b3B0ICsgbGVuIDogTlVMTDsKKwkJcmMgPSAoKm51bW9wdC0+Y2FsbGJhY2spKG51bW9wdCwgYXJnLCAwKSA/ICgtMSkgOiAwOworCQlmcmVlKGFyZyk7CisJCXJldHVybiByYzsKIAl9CiAJcmV0dXJuIC0yOwogfQpAQCAtMjE1LDYgKzI2NywyNSBAQAogCXJldHVybiAtMjsKIH0KIAorc3RhdGljIGludCBwYXJzZV9ub2Rhc2hfb3B0KHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKnAsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKQoreworCWZvciAoOyBvcHRpb25zLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdGlvbnMrKykgeworCQlpZiAoIShvcHRpb25zLT5mbGFncyAmIFBBUlNFX09QVF9OT0RBU0gpKQorCQkJY29udGludWU7CisJCWlmICgob3B0aW9ucy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKSB8fAorCQkgICAgIShvcHRpb25zLT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykpCisJCQlkaWUoIkJVRzogZGFzaGxlc3Mgb3B0aW9ucyBkb24ndCBzdXBwb3J0IGFyZ3VtZW50cyIpOworCQlpZiAoIShvcHRpb25zLT5mbGFncyAmIFBBUlNFX09QVF9OT05FRykpCisJCQlkaWUoIkJVRzogZGFzaGxlc3Mgb3B0aW9ucyBkb24ndCBzdXBwb3J0IG5lZ2F0aW9uIik7CisJCWlmIChvcHRpb25zLT5sb25nX25hbWUpCisJCQlkaWUoIkJVRzogZGFzaGxlc3Mgb3B0aW9ucyBjYW4ndCBiZSBsb25nIik7CisJCWlmIChvcHRpb25zLT5zaG9ydF9uYW1lID09IGFyZ1swXSAmJiBhcmdbMV0gPT0gJ1wwJykKKwkJCXJldHVybiBnZXRfdmFsdWUocCwgb3B0aW9ucywgT1BUX1NIT1JUKTsKKwl9CisJcmV0dXJuIC0yOworfQorCiBzdGF0aWMgdm9pZCBjaGVja190eXBvcyhjb25zdCBjaGFyICphcmcsIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCiB7CiAJaWYgKHN0cmxlbihhcmcpIDwgMykKQEAgLTIzNSwxMyArMzA2LDM3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zX2NoZWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMpCit7CisJaW50IGVyciA9IDA7CisKKwlmb3IgKDsgb3B0cy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRzKyspIHsKKwkJaWYgKChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQpICYmCisJCSAgICAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKSkgeworCQkJaWYgKG9wdHMtPmxvbmdfbmFtZSkgeworCQkJCWVycm9yKCJgLS0lc2AgdXNlcyBpbmNvbXBhdGlibGUgZmxhZ3MgIgorCQkJCSAgICAgICJMQVNUQVJHX0RFRkFVTFQgYW5kIE9QVEFSRyIsIG9wdHMtPmxvbmdfbmFtZSk7CisJCQl9IGVsc2UgeworCQkJCWVycm9yKCJgLSVjYCB1c2VzIGluY29tcGF0aWJsZSBmbGFncyAiCisJCQkJICAgICAgIkxBU1RBUkdfREVGQVVMVCBhbmQgT1BUQVJHIiwgb3B0cy0+c2hvcnRfbmFtZSk7CisJCQl9CisJCQllcnIgfD0gMTsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCWV4aXQoMTI5KTsKK30KKwogdm9pZCBwYXJzZV9vcHRpb25zX3N0YXJ0KHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKLQkJCSBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGludCBmbGFncykKKwkJCSBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBpbnQgZmxhZ3MpCiB7CiAJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKIAljdHgtPmFyZ2MgPSBhcmdjIC0gMTsKIAljdHgtPmFyZ3YgPSBhcmd2ICsgMTsKIAljdHgtPm91dCAgPSBhcmd2OworCWN0eC0+cHJlZml4ID0gcHJlZml4OwogCWN0eC0+Y3BpZHggPSAoKGZsYWdzICYgUEFSU0VfT1BUX0tFRVBfQVJHVjApICE9IDApOwogCWN0eC0+ZmxhZ3MgPSBmbGFnczsKIAlpZiAoKGZsYWdzICYgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTikgJiYKQEAgLTI1OCw2ICszNTMsOCBAQAogewogCWludCBpbnRlcm5hbF9oZWxwID0gIShjdHgtPmZsYWdzICYgUEFSU0VfT1BUX05PX0lOVEVSTkFMX0hFTFApOwogCisJcGFyc2Vfb3B0aW9uc19jaGVjayhvcHRpb25zKTsKKwogCS8qIHdlIG11c3QgcmVzZXQgLT5vcHQsIHVua25vd24gc2hvcnQgb3B0aW9uIGxlYXZlIGl0IGRhbmdsaW5nICovCiAJY3R4LT5vcHQgPSBOVUxMOwogCkBAIC0yNjUsNiArMzYyLDggQEAKIAkJY29uc3QgY2hhciAqYXJnID0gY3R4LT5hcmd2WzBdOwogCiAJCWlmICgqYXJnICE9ICctJyB8fCAhYXJnWzFdKSB7CisJCQlpZiAocGFyc2Vfbm9kYXNoX29wdChjdHgsIGFyZywgb3B0aW9ucykgPT0gMCkKKwkJCQljb250aW51ZTsKIAkJCWlmIChjdHgtPmZsYWdzICYgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTikKIAkJCQlicmVhazsKIAkJCWN0eC0+b3V0W2N0eC0+Y3BpZHgrK10gPSBjdHgtPmFyZ3ZbMF07CkBAIC0zMzgsMTIgKzQzNywxMyBAQAogCXJldHVybiBjdHgtPmNwaWR4ICsgY3R4LT5hcmdjOwogfQogCi1pbnQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCi0JCSAgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10sIGludCBmbGFncykKK2ludCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdLAorCQkgIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90IGN0eDsKIAotCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgZmxhZ3MpOworCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgcHJlZml4LCBmbGFncyk7CiAJc3dpdGNoIChwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywgdXNhZ2VzdHIpKSB7CiAJY2FzZSBQQVJTRV9PUFRfSEVMUDoKIAkJZXhpdCgxMjkpOwpAQCAtMzYxLDEwICs0NjEsMjQgQEAKIAlyZXR1cm4gcGFyc2Vfb3B0aW9uc19lbmQoJmN0eCk7CiB9CiAKK3N0YXRpYyBpbnQgdXNhZ2VfYXJnaChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRzKQoreworCWNvbnN0IGNoYXIgKnM7CisJaW50IGxpdGVyYWwgPSAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQKSB8fCAhb3B0cy0+YXJnaDsKKwlpZiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKQorCQlpZiAob3B0cy0+bG9uZ19uYW1lKQorCQkJcyA9IGxpdGVyYWwgPyAiWz0lc10iIDogIls9PCVzPl0iOworCQllbHNlCisJCQlzID0gbGl0ZXJhbCA/ICJbJXNdIiA6ICJbPCVzPl0iOworCWVsc2UKKwkJcyA9IGxpdGVyYWwgPyAiICVzIiA6ICIgPCVzPiI7CisJcmV0dXJuIGZwcmludGYoc3RkZXJyLCBzLCBvcHRzLT5hcmdoID8gb3B0cy0+YXJnaCA6ICIuLi4iKTsKK30KKwogI2RlZmluZSBVU0FHRV9PUFRTX1dJRFRIIDI0CiAjZGVmaW5lIFVTQUdFX0dBUCAgICAgICAgIDIKIAotaW50IHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbChjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAorc3RhdGljIGludCB1c2FnZV93aXRoX29wdGlvbnNfaW50ZXJuYWwoY29uc3QgY2hhciAqIGNvbnN0ICp1c2FnZXN0ciwKIAkJCQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRzLCBpbnQgZnVsbCkKIHsKIAlpZiAoIXVzYWdlc3RyKQpAQCAtMzk3LDUxICs1MTEsMjEgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXBvcyA9IGZwcmludGYoc3RkZXJyLCAiICAgICIpOwotCQlpZiAob3B0cy0+c2hvcnRfbmFtZSkKLQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIi0lYyIsIG9wdHMtPnNob3J0X25hbWUpOworCQlpZiAob3B0cy0+c2hvcnRfbmFtZSkgeworCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PREFTSCkKKwkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICIlYyIsIG9wdHMtPnNob3J0X25hbWUpOworCQkJZWxzZQorCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIi0lYyIsIG9wdHMtPnNob3J0X25hbWUpOworCQl9CiAJCWlmIChvcHRzLT5sb25nX25hbWUgJiYgb3B0cy0+c2hvcnRfbmFtZSkKIAkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIiwgIik7CiAJCWlmIChvcHRzLT5sb25nX25hbWUpCiAJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICItLSVzIiwgb3B0cy0+bG9uZ19uYW1lKTsKKwkJaWYgKG9wdHMtPnR5cGUgPT0gT1BUSU9OX05VTUJFUikKKwkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIi1OVU0iKTsKIAotCQlzd2l0Y2ggKG9wdHMtPnR5cGUpIHsKLQkJY2FzZSBPUFRJT05fQVJHVU1FTlQ6Ci0JCQlicmVhazsKLQkJY2FzZSBPUFRJT05fSU5URUdFUjoKLQkJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpCi0JCQkJaWYgKG9wdHMtPmxvbmdfbmFtZSkKLQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiWz08bj5dIik7Ci0JCQkJZWxzZQotCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICJbPG4+XSIpOwotCQkJZWxzZQotCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIiA8bj4iKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QVElPTl9DQUxMQkFDSzoKLQkJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykKLQkJCQlicmVhazsKLQkJCS8qIEZBTExUSFJPVUdIICovCi0JCWNhc2UgT1BUSU9OX1NUUklORzoKLQkJCWlmIChvcHRzLT5hcmdoKSB7Ci0JCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRykKLQkJCQkJaWYgKG9wdHMtPmxvbmdfbmFtZSkKLQkJCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIls9PCVzPl0iLCBvcHRzLT5hcmdoKTsKLQkJCQkJZWxzZQotCQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiWzwlcz5dIiwgb3B0cy0+YXJnaCk7Ci0JCQkJZWxzZQotCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICIgPCVzPiIsIG9wdHMtPmFyZ2gpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKQotCQkJCQlpZiAob3B0cy0+bG9uZ19uYW1lKQotCQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiWz0uLi5dIik7Ci0JCQkJCWVsc2UKLQkJCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIlsuLi5dIik7Ci0JCQkJZWxzZQotCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICIgLi4uIik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDogLyogT1BUSU9OX3tCSVQsQk9PTEVBTixTRVRfSU5ULFNFVF9QVFJ9ICovCi0JCQlicmVhazsKLQkJfQorCQlpZiAoIShvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykpCisJCQlwb3MgKz0gdXNhZ2VfYXJnaChvcHRzKTsKIAogCQlpZiAocG9zIDw9IFVTQUdFX09QVFNfV0lEVEgpCiAJCQlwYWQgPSBVU0FHRV9PUFRTX1dJRFRIIC0gcG9zOwpAQCAtNTM2LDE1ICs2MjAsMyBAQAogCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsIG9wdC0+dmFsdWUpOwogCXJldHVybiAwOwogfQotCi0vKgotICogVGhpcyBzaG91bGQgcmVhbGx5IGJlIE9QVElPTl9GSUxFTkFNRSB0eXBlIGFzIGEgcGFydCBvZgotICogcGFyc2Vfb3B0aW9ucyB0aGF0IHRha2UgcHJlZml4IHRvIGRvIHRoaXMgd2hpbGUgcGFyc2luZy4KLSAqLwotZXh0ZXJuIGNvbnN0IGNoYXIgKnBhcnNlX29wdGlvbnNfZml4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZmlsZSkKLXsKLQlpZiAoIWZpbGUgfHwgIXByZWZpeCB8fCBpc19hYnNvbHV0ZV9wYXRoKGZpbGUpIHx8ICFzdHJjbXAoIi0iLCBmaWxlKSkKLQkJcmV0dXJuIGZpbGU7Ci0JcmV0dXJuIHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHN0cmxlbihwcmVmaXgpLCBmaWxlKTsKLX0KLQpkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy5oIGIvcGFyc2Utb3B0aW9ucy5oCmluZGV4IGI1NGVlYzEuLmFiYTMwNjcgMTAwNjQ0Ci0tLSBhL3BhcnNlLW9wdGlvbnMuaAorKysgYi9wYXJzZS1vcHRpb25zLmgKQEAgLTYsOCArNiwxMCBAQAogCU9QVElPTl9FTkQsCiAJT1BUSU9OX0FSR1VNRU5ULAogCU9QVElPTl9HUk9VUCwKKwlPUFRJT05fTlVNQkVSLAogCS8qIG9wdGlvbnMgd2l0aCBubyBhcmd1bWVudHMgKi8KIAlPUFRJT05fQklULAorCU9QVElPTl9ORUdCSVQsCiAJT1BUSU9OX0JPT0xFQU4sIC8qIF9JTkNSIHdvdWxkIGhhdmUgYmVlbiBhIGJldHRlciBuYW1lICovCiAJT1BUSU9OX1NFVF9JTlQsCiAJT1BUSU9OX1NFVF9QVFIsCkBAIC0xNSw2ICsxNyw3IEBACiAJT1BUSU9OX1NUUklORywKIAlPUFRJT05fSU5URUdFUiwKIAlPUFRJT05fQ0FMTEJBQ0ssCisJT1BUSU9OX0ZJTEVOQU1FCiB9OwogCiBlbnVtIHBhcnNlX29wdF9mbGFncyB7CkBAIC0zMSw2ICszNCw4IEBACiAJUEFSU0VfT1BUX05PTkVHICAgPSA0LAogCVBBUlNFX09QVF9ISURERU4gID0gOCwKIAlQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxUID0gMTYsCisJUEFSU0VfT1BUX05PREFTSCA9IDMyLAorCVBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFAgPSA2NCwKIH07CiAKIHN0cnVjdCBvcHRpb247CkBAIC02MiwxMCArNjcsMTkgQEAKICAqIGBmbGFnc2A6OgogICogICBtYXNrIG9mIHBhcnNlX29wdF9vcHRpb25fZmxhZ3MuCiAgKiAgIFBBUlNFX09QVF9PUFRBUkc6IHNheXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgb3B0aW9uYWwgKG5vdCBmb3IgQk9PTEVBTnMpCi0gKiAgIFBBUlNFX09QVF9OT0FSRzogc2F5cyB0aGF0IHRoaXMgb3B0aW9uIHRha2VzIG5vIGFyZ3VtZW50LCBmb3IgQ0FMTEJBQ0tzCisgKiAgIFBBUlNFX09QVF9OT0FSRzogc2F5cyB0aGF0IHRoaXMgb3B0aW9uIHRha2VzIG5vIGFyZ3VtZW50CiAgKiAgIFBBUlNFX09QVF9OT05FRzogc2F5cyB0aGF0IHRoaXMgb3B0aW9uIGNhbm5vdCBiZSBuZWdhdGVkCi0gKiAgIFBBUlNFX09QVF9ISURERU4gdGhpcyBvcHRpb24gaXMgc2tpcHBlZCBpbiB0aGUgZGVmYXVsdCB1c2FnZSwgc2hvd2VkIGluCi0gKiAgICAgICAgICAgICAgICAgICAgdGhlIGxvbmcgb25lLgorICogICBQQVJTRV9PUFRfSElEREVOOiB0aGlzIG9wdGlvbiBpcyBza2lwcGVkIGluIHRoZSBkZWZhdWx0IHVzYWdlLCBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgc2hvd24gb25seSBpbiB0aGUgZnVsbCB1c2FnZS4KKyAqICAgUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVDogc2F5cyB0aGF0IHRoaXMgb3B0aW9uIHdpbGwgdGFrZSB0aGUgZGVmYXVsdAorICoJCQkJdmFsdWUgaWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4gd2hlbiB0aGUgb3B0aW9uCisgKgkJCQlpcyBsYXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuIElmIHRoZSBvcHRpb24gaXMKKyAqCQkJCW5vdCBsYXN0IGl0IHdpbGwgcmVxdWlyZSBhbiBhcmd1bWVudC4KKyAqCQkJCVNob3VsZCBub3QgYmUgdXNlZCB3aXRoIFBBUlNFX09QVF9PUFRBUkcuCisgKiAgIFBBUlNFX09QVF9OT0RBU0g6IHRoaXMgb3B0aW9uIGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIGRhc2guCisgKiAgIFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFA6IHNheXMgdGhhdCBhcmdoIHNob3VsZG4ndCBiZSBlbmNsb3NlZCBpbiBicmFja2V0cworICoJCQkJKGkuZS4gJzxhcmdoPicpIGluIHRoZSBoZWxwIG1lc3NhZ2UuCisgKgkJCQlVc2VmdWwgZm9yIG9wdGlvbnMgd2l0aCBtdWx0aXBsZSBwYXJhbWV0ZXJzLgogICoKICAqIGBjYWxsYmFja2A6OgogICogICBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayB0byB1c2UgZm9yIE9QVElPTl9DQUxMQkFDSy4KQEAgLTkwLDI1ICsxMDQsMzcgQEAKIH07CiAKICNkZWZpbmUgT1BUX0VORCgpICAgICAgICAgICAgICAgICAgIHsgT1BUSU9OX0VORCB9Ci0jZGVmaW5lIE9QVF9BUkdVTUVOVChsLCBoKSAgICAgICAgICB7IE9QVElPTl9BUkdVTUVOVCwgMCwgKGwpLCBOVUxMLCBOVUxMLCAoaCkgfQorI2RlZmluZSBPUFRfQVJHVU1FTlQobCwgaCkgICAgICAgICAgeyBPUFRJT05fQVJHVU1FTlQsIDAsIChsKSwgTlVMTCwgTlVMTCwgXAorCQkJCSAgICAgIChoKSwgUEFSU0VfT1BUX05PQVJHfQogI2RlZmluZSBPUFRfR1JPVVAoaCkgICAgICAgICAgICAgICAgeyBPUFRJT05fR1JPVVAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIChoKSB9Ci0jZGVmaW5lIE9QVF9CSVQocywgbCwgdiwgaCwgYikgICAgICB7IE9QVElPTl9CSVQsIChzKSwgKGwpLCAodiksIE5VTEwsIChoKSwgMCwgTlVMTCwgKGIpIH0KLSNkZWZpbmUgT1BUX0JPT0xFQU4ocywgbCwgdiwgaCkgICAgIHsgT1BUSU9OX0JPT0xFQU4sIChzKSwgKGwpLCAodiksIE5VTEwsIChoKSB9Ci0jZGVmaW5lIE9QVF9TRVRfSU5UKHMsIGwsIHYsIGgsIGkpICB7IE9QVElPTl9TRVRfSU5ULCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCksIDAsIE5VTEwsIChpKSB9Ci0jZGVmaW5lIE9QVF9TRVRfUFRSKHMsIGwsIHYsIGgsIHApICB7IE9QVElPTl9TRVRfUFRSLCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCksIDAsIE5VTEwsIChwKSB9Ci0jZGVmaW5lIE9QVF9JTlRFR0VSKHMsIGwsIHYsIGgpICAgICB7IE9QVElPTl9JTlRFR0VSLCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCkgfQorI2RlZmluZSBPUFRfQklUKHMsIGwsIHYsIGgsIGIpICAgICAgeyBPUFRJT05fQklULCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCksIFwKKwkJCQkgICAgICBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIChiKSB9CisjZGVmaW5lIE9QVF9ORUdCSVQocywgbCwgdiwgaCwgYikgICB7IE9QVElPTl9ORUdCSVQsIChzKSwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSRywgTlVMTCwgKGIpIH0KKyNkZWZpbmUgT1BUX0JPT0xFQU4ocywgbCwgdiwgaCkgICAgIHsgT1BUSU9OX0JPT0xFQU4sIChzKSwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSRyB9CisjZGVmaW5lIE9QVF9TRVRfSU5UKHMsIGwsIHYsIGgsIGkpICB7IE9QVElPTl9TRVRfSU5ULCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIChpKSB9CisjZGVmaW5lIE9QVF9TRVRfUFRSKHMsIGwsIHYsIGgsIHApICB7IE9QVElPTl9TRVRfUFRSLCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIChwKSB9CisjZGVmaW5lIE9QVF9JTlRFR0VSKHMsIGwsIHYsIGgpICAgICB7IE9QVElPTl9JTlRFR0VSLCAocyksIChsKSwgKHYpLCAibiIsIChoKSB9CiAjZGVmaW5lIE9QVF9TVFJJTkcocywgbCwgdiwgYSwgaCkgICB7IE9QVElPTl9TVFJJTkcsICAocyksIChsKSwgKHYpLCAoYSksIChoKSB9CiAjZGVmaW5lIE9QVF9EQVRFKHMsIGwsIHYsIGgpIFwKIAl7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgInRpbWUiLChoKSwgMCwgXAogCSAgcGFyc2Vfb3B0X2FwcHJveGlkYXRlX2NiIH0KICNkZWZpbmUgT1BUX0NBTExCQUNLKHMsIGwsIHYsIGEsIGgsIGYpIFwKIAl7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgKGEpLCAoaCksIDAsIChmKSB9CisjZGVmaW5lIE9QVF9OVU1CRVJfQ0FMTEJBQ0sodiwgaCwgZikgXAorCXsgT1BUSU9OX05VTUJFUiwgMCwgTlVMTCwgKHYpLCBOVUxMLCAoaCksIFwKKwkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgKGYpIH0KKyNkZWZpbmUgT1BUX0ZJTEVOQU1FKHMsIGwsIHYsIGgpICAgIHsgT1BUSU9OX0ZJTEVOQU1FLCAocyksIChsKSwgKHYpLCBcCisJCQkJICAgICAgICJGSUxFIiwgKGgpIH0KIAogLyogcGFyc2Vfb3B0aW9ucygpIHdpbGwgZmlsdGVyIG91dCB0aGUgcHJvY2Vzc2VkIG9wdGlvbnMgYW5kIGxlYXZlIHRoZQogICogbm9uLW9wdGlvbiBhcmd1bWVudHMgaW4gYXJndltdLgogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBsZWZ0IGluIGFyZ3ZbXS4KICAqLwotZXh0ZXJuIGludCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKK2V4dGVybiBpbnQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdLCBpbnQgZmxhZ3MpOwogCkBAIC0xMzQsMTMgKzE2MCwxNSBAQAogCWludCBhcmdjLCBjcGlkeDsKIAljb25zdCBjaGFyICpvcHQ7CiAJaW50IGZsYWdzOworCWNvbnN0IGNoYXIgKnByZWZpeDsKIH07CiAKIGV4dGVybiBpbnQgcGFyc2Vfb3B0aW9uc191c2FnZShjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMpOwogCiBleHRlcm4gdm9pZCBwYXJzZV9vcHRpb25zX3N0YXJ0KHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKLQkJCQlpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGludCBmbGFncyk7CisJCQkJaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJaW50IGZsYWdzKTsKIAogZXh0ZXJuIGludCBwYXJzZV9vcHRpb25zX3N0ZXAoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAogCQkJICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywKQEAgLTE2OCw2ICsxOTYsNCBAQAogCSAgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIiwgXAogCSAgUEFSU0VfT1BUX09QVEFSRywgJnBhcnNlX29wdF9hYmJyZXZfY2IsIDAgfQogCi1leHRlcm4gY29uc3QgY2hhciAqcGFyc2Vfb3B0aW9uc19maXhfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpmaWxlKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9wYXRoLmMgYi9wYXRoLmMKaW5kZXggOGEwYTY3NC4uMDQ3ZmRiMCAxMDA2NDQKLS0tIGEvcGF0aC5jCisrKyBiL3BhdGguYwpAQCAtMTM5LDYgKzEzOSwyMiBAQAogCXJldHVybiBta3N0ZW1wKHBhdGgpOwogfQogCisvKiBnaXRfbWtzdGVtcHMoKSAtIGNyZWF0ZSB0bXAgZmlsZSB3aXRoIHN1ZmZpeCBob25vcmluZyBUTVBESVIgdmFyaWFibGUuICovCitpbnQgZ2l0X21rc3RlbXBzKGNoYXIgKnBhdGgsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKnRlbXBsYXRlLCBpbnQgc3VmZml4X2xlbikKK3sKKwljb25zdCBjaGFyICp0bXA7CisJc2l6ZV90IG47CisKKwl0bXAgPSBnZXRlbnYoIlRNUERJUiIpOworCWlmICghdG1wKQorCQl0bXAgPSAiL3RtcCI7CisJbiA9IHNucHJpbnRmKHBhdGgsIGxlbiwgIiVzLyVzIiwgdG1wLCB0ZW1wbGF0ZSk7CisJaWYgKGxlbiA8PSBuKSB7CisJCWVycm5vID0gRU5BTUVUT09MT05HOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBta3N0ZW1wcyhwYXRoLCBzdWZmaXhfbGVuKTsKK30KIAogaW50IHZhbGlkYXRlX2hlYWRyZWYoY29uc3QgY2hhciAqcGF0aCkKIHsKZGlmZiAtLWdpdCBhL3BlcmwvR2l0LnBtIGIvcGVybC9HaXQucG0KaW5kZXggMjkxZmY1Yi4uZThkZjU1ZCAxMDA2NDQKLS0tIGEvcGVybC9HaXQucG0KKysrIGIvcGVybC9HaXQucG0KQEAgLTE4NSw3ICsxODUsNyBAQAogCiAJCWlmICgkZGlyKSB7CiAJCQkkZGlyID1+IG0jXi8jIG9yICRkaXIgPSAkb3B0c3tEaXJlY3Rvcnl9IC4gJy8nIC4gJGRpcjsKLQkJCSRvcHRze1JlcG9zaXRvcnl9ID0gJGRpcjsKKwkJCSRvcHRze1JlcG9zaXRvcnl9ID0gYWJzX3BhdGgoJGRpcik7CiAKIAkJCSMgSWYgLS1naXQtZGlyIHdlbnQgb2ssIHRoaXMgc2hvdWxkbid0IGRpZSBlaXRoZXIuCiAJCQlteSAkcHJlZml4ID0gJHNlYXJjaC0+Y29tbWFuZF9vbmVsaW5lKCdyZXYtcGFyc2UnLCAnLS1zaG93LXByZWZpeCcpOwpAQCAtMTI4MCw2ICsxMjgwLDggQEAKIAlteSAoJHNlbGYsIEBhcmdzKSA9IEBfOwogCWlmICgkc2VsZikgewogCQkkc2VsZi0+cmVwb19wYXRoKCkgYW5kICRFTlZ7J0dJVF9ESVInfSA9ICRzZWxmLT5yZXBvX3BhdGgoKTsKKwkJJHNlbGYtPnJlcG9fcGF0aCgpIGFuZCAkc2VsZi0+d2NfcGF0aCgpCisJCQlhbmQgJEVOVnsnR0lUX1dPUktfVFJFRSd9ID0gJHNlbGYtPndjX3BhdGgoKTsKIAkJJHNlbGYtPndjX3BhdGgoKSBhbmQgY2hkaXIoJHNlbGYtPndjX3BhdGgoKSk7CiAJCSRzZWxmLT53Y19zdWJkaXIoKSBhbmQgY2hkaXIoJHNlbGYtPndjX3N1YmRpcigpKTsKIAl9CmRpZmYgLS1naXQgYS9wa3QtbGluZS5jIGIvcGt0LWxpbmUuYwppbmRleCBmNWQwMDg2Li5iNjkxYWJlIDEwMDY0NAotLS0gYS9wa3QtbGluZS5jCisrKyBiL3BrdC1saW5lLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAkJfQogCQlpZiAoIXJldCkKIAkJCWRpZSgid3JpdGUgZXJyb3IgKGRpc2sgZnVsbD8pIik7Ci0JCWRpZSgid3JpdGUgZXJyb3IgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygid3JpdGUgZXJyb3IiKTsKIAl9CiAJcmV0dXJuIG5uOwogfQpAQCAtNjcsNyArNjcsNyBAQAogewogCXNzaXplX3QgcmV0ID0gcmVhZF9pbl9mdWxsKGZkLCBidWZmZXIsIHNpemUpOwogCWlmIChyZXQgPCAwKQotCQlkaWUoInJlYWQgZXJyb3IgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygicmVhZCBlcnJvciIpOwogCWVsc2UgaWYgKHJldCA8IHNpemUpCiAJCWRpZSgiVGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiKTsKIH0KZGlmZiAtLWdpdCBhL3ByZWxvYWQtaW5kZXguYyBiL3ByZWxvYWQtaW5kZXguYwppbmRleCA4OGVkYzVmLi45Mjg5OTMzIDEwMDY0NAotLS0gYS9wcmVsb2FkLWluZGV4LmMKKysrIGIvcHJlbG9hZC1pbmRleC5jCkBAIC0zNCw3ICszNCw5IEBACiAJc3RydWN0IHRocmVhZF9kYXRhICpwID0gX2RhdGE7CiAJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IHAtPmluZGV4OwogCXN0cnVjdCBjYWNoZV9lbnRyeSAqKmNlcCA9IGluZGV4LT5jYWNoZSArIHAtPm9mZnNldDsKKwlzdHJ1Y3QgY2FjaGVfZGVmIGNhY2hlOwogCisJbWVtc2V0KCZjYWNoZSwgMCwgc2l6ZW9mKGNhY2hlKSk7CiAJbnIgPSBwLT5ucjsKIAlpZiAobnIgKyBwLT5vZmZzZXQgPiBpbmRleC0+Y2FjaGVfbnIpCiAJCW5yID0gaW5kZXgtPmNhY2hlX25yIC0gcC0+b2Zmc2V0OwpAQCAtNDksNiArNTEsOCBAQAogCQkJY29udGludWU7CiAJCWlmICghY2VfcGF0aF9tYXRjaChjZSwgcC0+cGF0aHNwZWMpKQogCQkJY29udGludWU7CisJCWlmICh0aHJlYWRlZF9oYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoJmNhY2hlLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpKQorCQkJY29udGludWU7CiAJCWlmIChsc3RhdChjZS0+bmFtZSwgJnN0KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaWVfbWF0Y2hfc3RhdChpbmRleCwgY2UsICZzdCwgQ0VfTUFUQ0hfUkFDWV9JU19ESVJUWSkpCkBAIC03Miw3ICs3Niw3IEBACiAJaWYgKHRocmVhZHMgPiBNQVhfUEFSQUxMRUwpCiAJCXRocmVhZHMgPSBNQVhfUEFSQUxMRUw7CiAJb2Zmc2V0ID0gMDsKLQl3b3JrID0gKGluZGV4LT5jYWNoZV9uciArIHRocmVhZHMgLSAxKSAvIHRocmVhZHM7CisJd29yayA9IERJVl9ST1VORF9VUChpbmRleC0+Y2FjaGVfbnIsIHRocmVhZHMpOwogCWZvciAoaSA9IDA7IGkgPCB0aHJlYWRzOyBpKyspIHsKIAkJc3RydWN0IHRocmVhZF9kYXRhICpwID0gZGF0YStpOwogCQlwLT5pbmRleCA9IGluZGV4OwpkaWZmIC0tZ2l0IGEvcHJldHR5LmMgYi9wcmV0dHkuYwppbmRleCBhMGVmMzU2Li5mNTk4M2Y4IDEwMDY0NAotLS0gYS9wcmV0dHkuYworKysgYi9wcmV0dHkuYwpAQCAtODYsNiArODYsMTggQEAKIAlyZXR1cm4gIWlzYXNjaWkoY2gpIHx8IGNoID09ICdcMDMzJzsKIH0KIAoraW50IGhhc19ub25fYXNjaWkoY29uc3QgY2hhciAqcykKK3sKKwlpbnQgY2g7CisJaWYgKCFzKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoKGNoID0gKnMrKykgIT0gJ1wwJykgeworCQlpZiAobm9uX2FzY2lpKGNoKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBpc19yZmMyMDQ3X3NwZWNpYWwoY2hhciBjaCkKIHsKIAlyZXR1cm4gKG5vbl9hc2NpaShjaCkgfHwgKGNoID09ICc9JykgfHwgKGNoID09ICc/JykgfHwgKGNoID09ICdfJykpOwpAQCAtMjg0LDcgKzI5Niw3IEBACiBzdGF0aWMgY2hhciAqbG9nbXNnX3JlZW5jb2RlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKIAkJCSAgICAgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nKQogewotCXN0YXRpYyBjb25zdCBjaGFyICp1dGY4ID0gInV0Zi04IjsKKwlzdGF0aWMgY29uc3QgY2hhciAqdXRmOCA9ICJVVEYtOCI7CiAJY29uc3QgY2hhciAqdXNlX2VuY29kaW5nOwogCWNoYXIgKmVuY29kaW5nOwogCWNoYXIgKm91dDsKQEAgLTU3MSw3ICs1ODMsNyBAQAogCXN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmQ7CiAJY29uc3QgY2hhciAqcHJlZml4ID0gIiAoIjsKIAotCWxvYWRfcmVmX2RlY29yYXRpb25zKCk7CisJbG9hZF9yZWZfZGVjb3JhdGlvbnMoREVDT1JBVEVfU0hPUlRfUkVGUyk7CiAJZCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZuYW1lX2RlY29yYXRpb24sICZjb21taXQtPm9iamVjdCk7CiAJd2hpbGUgKGQpIHsKIAkJc3RyYnVmX2FkZHN0cihzYiwgcHJlZml4KTsKQEAgLTg4MSw3ICs4OTMsNyBAQAogCQkgICAgPyBnaXRfbG9nX291dHB1dF9lbmNvZGluZwogCQkgICAgOiBnaXRfY29tbWl0X2VuY29kaW5nKTsKIAlpZiAoIWVuY29kaW5nKQotCQllbmNvZGluZyA9ICJ1dGYtOCI7CisJCWVuY29kaW5nID0gIlVURi04IjsKIAlpZiAoZW5jb2RpbmdfcCkKIAkJKmVuY29kaW5nX3AgPSBlbmNvZGluZzsKIAlyZXR1cm4gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgZW5jb2RpbmcpOwpkaWZmIC0tZ2l0IGEvcXVvdGUuYyBiL3F1b3RlLmMKaW5kZXggN2E0OWZjZi4uODQ4ZDE3NCAxMDA2NDQKLS0tIGEvcXVvdGUuYworKysgYi9xdW90ZS5jCkBAIC0yNzIsOCArMjcyLDggQEAKIAlmcHV0Yyh0ZXJtaW5hdG9yLCBmcCk7CiB9CiAKLWV4dGVybiB2b2lkIHdyaXRlX25hbWVfcXVvdGVkcGZ4KGNvbnN0IGNoYXIgKnBmeCwgc2l6ZV90IHBmeGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIEZJTEUgKmZwLCBpbnQgdGVybWluYXRvcikKK3ZvaWQgd3JpdGVfbmFtZV9xdW90ZWRwZngoY29uc3QgY2hhciAqcGZ4LCBzaXplX3QgcGZ4bGVuLAorCQkJICBjb25zdCBjaGFyICpuYW1lLCBGSUxFICpmcCwgaW50IHRlcm1pbmF0b3IpCiB7CiAJaW50IG5lZWRxdW90ZSA9IDA7CiAKZGlmZiAtLWdpdCBhL3JlYWQtY2FjaGUuYyBiL3JlYWQtY2FjaGUuYwppbmRleCAzZjU4NzExLi40ZTNlMjcyIDEwMDY0NAotLS0gYS9yZWFkLWNhY2hlLmMKKysrIGIvcmVhZC1jYWNoZS5jCkBAIC02MzgsNyArNjM4LDcgQEAKIHsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlpZiAobHN0YXQocGF0aCwgJnN0KSkKLQkJZGllKCIlczogdW5hYmxlIHRvIHN0YXQgKCVzKSIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygidW5hYmxlIHRvIHN0YXQgJyVzJyIsIHBhdGgpOwogCXJldHVybiBhZGRfdG9faW5kZXgoaXN0YXRlLCBwYXRoLCAmc3QsIGZsYWdzKTsKIH0KIApAQCAtMTI1MSwxMSArMTI1MSwxMSBAQAogCWlmIChmZCA8IDApIHsKIAkJaWYgKGVycm5vID09IEVOT0VOVCkKIAkJCXJldHVybiAwOwotCQlkaWUoImluZGV4IGZpbGUgb3BlbiBmYWlsZWQgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiaW5kZXggZmlsZSBvcGVuIGZhaWxlZCIpOwogCX0KIAogCWlmIChmc3RhdChmZCwgJnN0KSkKLQkJZGllKCJjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIpOwogCiAJZXJybm8gPSBFSU5WQUw7CiAJbW1hcF9zaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKQEAgLTEyNjUsNyArMTI2NSw3IEBACiAJbW1hcCA9IHhtbWFwKE5VTEwsIG1tYXBfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKIAljbG9zZShmZCk7CiAJaWYgKG1tYXAgPT0gTUFQX0ZBSUxFRCkKLQkJZGllKCJ1bmFibGUgdG8gbWFwIGluZGV4IGZpbGUiKTsKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gbWFwIGluZGV4IGZpbGUiKTsKIAogCWhkciA9IG1tYXA7CiAJaWYgKHZlcmlmeV9oZHIoaGRyLCBtbWFwX3NpemUpIDwgMCkKZGlmZiAtLWdpdCBhL3JlZnMuYyBiL3JlZnMuYwppbmRleCAzZGEzYzhjLi5kZDljOWJhIDEwMDY0NAotLS0gYS9yZWZzLmMKKysrIGIvcmVmcy5jCkBAIC02ODMsMTIgKzY4MywxMyBAQAogICogLSBpdCBoYXMgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIsICJ+IiwgIl4iLCAiOiIgb3IgU1AsIGFueXdoZXJlLCBvcgogICogLSBpdCBlbmRzIHdpdGggYSAiLyIuCiAgKiAtIGl0IGVuZHMgd2l0aCAiLmxvY2siCisgKiAtIGl0IGNvbnRhaW5zIGEgIlwiIChiYWNrc2xhc2gpCiAgKi8KIAogc3RhdGljIGlubGluZSBpbnQgYmFkX3JlZl9jaGFyKGludCBjaCkKIHsKIAlpZiAoKCh1bnNpZ25lZCkgY2gpIDw9ICcgJyB8fAotCSAgICBjaCA9PSAnficgfHwgY2ggPT0gJ14nIHx8IGNoID09ICc6JykKKwkgICAgY2ggPT0gJ34nIHx8IGNoID09ICdeJyB8fCBjaCA9PSAnOicgfHwgY2ggPT0gJ1xcJykKIAkJcmV0dXJuIDE7CiAJLyogMi4xMyBQYXR0ZXJuIE1hdGNoaW5nIE5vdGF0aW9uICovCiAJaWYgKGNoID09ICc/JyB8fCBjaCA9PSAnWycpIC8qIFVuc3VwcG9ydGVkICovCkBAIC03NTEsOSArNzUyLDggQEAKIAl9CiB9CiAKLWNvbnN0IGNoYXIgKnByZXR0aWZ5X3JlZihjb25zdCBzdHJ1Y3QgcmVmICpyZWYpCitjb25zdCBjaGFyICpwcmV0dGlmeV9yZWZuYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JY29uc3QgY2hhciAqbmFtZSA9IHJlZi0+bmFtZTsKIAlyZXR1cm4gbmFtZSArICgKIAkJIXByZWZpeGNtcChuYW1lLCAicmVmcy9oZWFkcy8iKSA/IDExIDoKIAkJIXByZWZpeGNtcChuYW1lLCAicmVmcy90YWdzLyIpID8gMTAgOgpAQCAtODIxLDcgKzgyMSw3IEBACiAJc3RyYnVmX2luaXQoJnBhdGgsIDIwKTsKIAlzdHJidWZfYWRkc3RyKCZwYXRoLCBmaWxlKTsKIAotCXJlc3VsdCA9IHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnBhdGgsIDEpOworCXJlc3VsdCA9IHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnBhdGgsIFJFTU9WRV9ESVJfRU1QVFlfT05MWSk7CiAKIAlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CiAKQEAgLTE0MTksNyArMTQxOSw3IEBACiAJbG9nZmlsZSA9IGdpdF9wYXRoKCJsb2dzLyVzIiwgcmVmKTsKIAlsb2dmZCA9IG9wZW4obG9nZmlsZSwgT19SRE9OTFksIDApOwogCWlmIChsb2dmZCA8IDApCi0JCWRpZSgiVW5hYmxlIHRvIHJlYWQgbG9nICVzOiAlcyIsIGxvZ2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiVW5hYmxlIHRvIHJlYWQgbG9nICclcyciLCBsb2dmaWxlKTsKIAlmc3RhdChsb2dmZCwgJnN0KTsKIAlpZiAoIXN0LnN0X3NpemUpCiAJCWRpZSgiTG9nICVzIGlzIGVtcHR5LiIsIGxvZ2ZpbGUpOwpkaWZmIC0tZ2l0IGEvcmVmcy5oIGIvcmVmcy5oCmluZGV4IDI5ZDE3YTQuLmMxMWY2YTYgMTAwNjQ0Ci0tLSBhL3JlZnMuaAorKysgYi9yZWZzLmgKQEAgLTgwLDcgKzgwLDcgQEAKICNkZWZpbmUgQ0hFQ0tfUkVGX0ZPUk1BVF9XSUxEQ0FSRCAoLTMpCiBleHRlcm4gaW50IGNoZWNrX3JlZl9mb3JtYXQoY29uc3QgY2hhciAqdGFyZ2V0KTsKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKnByZXR0aWZ5X3JlZihjb25zdCBzdHJ1Y3QgcmVmICpyZWYpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnByZXR0aWZ5X3JlZm5hbWUoY29uc3QgY2hhciAqcmVmbmFtZSk7CiBleHRlcm4gY2hhciAqc2hvcnRlbl91bmFtYmlndW91c19yZWYoY29uc3QgY2hhciAqcmVmLCBpbnQgc3RyaWN0KTsKIAogLyoqIHJlbmFtZSByZWYsIHJldHVybiAwIG9uIHN1Y2Nlc3MgKiovCmRpZmYgLS1naXQgYS9yZW1vdGUuYyBiL3JlbW90ZS5jCmluZGV4IDM5NTgzZDUuLmMzYWRhMmQgMTAwNjQ0Ci0tLSBhL3JlbW90ZS5jCisrKyBiL3JlbW90ZS5jCkBAIC0xMDYsNiArMTA2LDEyIEBACiAJYWRkX3VybChyZW1vdGUsIGFsaWFzX3VybCh1cmwpKTsKIH0KIAorc3RhdGljIHZvaWQgYWRkX3B1c2h1cmwoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICpwdXNodXJsKQoreworCUFMTE9DX0dST1cocmVtb3RlLT5wdXNodXJsLCByZW1vdGUtPnB1c2h1cmxfbnIgKyAxLCByZW1vdGUtPnB1c2h1cmxfYWxsb2MpOworCXJlbW90ZS0+cHVzaHVybFtyZW1vdGUtPnB1c2h1cmxfbnIrK10gPSBwdXNodXJsOworfQorCiBzdGF0aWMgc3RydWN0IHJlbW90ZSAqbWFrZV9yZW1vdGUoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgcmVtb3RlICpyZXQ7CkBAIC0zMDEsNyArMzA3LDcgQEAKIAkJc3RyYnVmX2FkZHN0cigmYnJhbmNoLCAiSEVBRDoiKTsKIAl9CiAJYWRkX3VybF9hbGlhcyhyZW1vdGUsIHApOwotCWFkZF9mZXRjaF9yZWZzcGVjKHJlbW90ZSwgc3RyYnVmX2RldGFjaCgmYnJhbmNoLCAwKSk7CisJYWRkX2ZldGNoX3JlZnNwZWMocmVtb3RlLCBzdHJidWZfZGV0YWNoKCZicmFuY2gsIE5VTEwpKTsKIAkvKgogCSAqIENvZ2l0byBjb21wYXRpYmxlIHB1c2g6IHB1c2ggY3VycmVudCBIRUFEIHRvIHJlbW90ZSAjYnJhbmNoCiAJICogKG1hc3RlciBpZiBtaXNzaW5nKQpAQCAtMzEyLDcgKzMxOCw3IEBACiAJCXN0cmJ1Zl9hZGRmKCZicmFuY2gsICI6cmVmcy9oZWFkcy8lcyIsIGZyYWcpOwogCWVsc2UKIAkJc3RyYnVmX2FkZHN0cigmYnJhbmNoLCAiOnJlZnMvaGVhZHMvbWFzdGVyIik7Ci0JYWRkX3B1c2hfcmVmc3BlYyhyZW1vdGUsIHN0cmJ1Zl9kZXRhY2goJmJyYW5jaCwgMCkpOworCWFkZF9wdXNoX3JlZnNwZWMocmVtb3RlLCBzdHJidWZfZGV0YWNoKCZicmFuY2gsIE5VTEwpKTsKIAlyZW1vdGUtPmZldGNoX3RhZ3MgPSAxOyAvKiBhbHdheXMgYXV0by1mb2xsb3cgKi8KIH0KIApAQCAtMzc5LDYgKzM4NSwxMSBAQAogCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQogCQkJcmV0dXJuIC0xOwogCQlhZGRfdXJsKHJlbW90ZSwgdik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5wdXNodXJsIikpIHsKKwkJY29uc3QgY2hhciAqdjsKKwkJaWYgKGdpdF9jb25maWdfc3RyaW5nKCZ2LCBrZXksIHZhbHVlKSkKKwkJCXJldHVybiAtMTsKKwkJYWRkX3B1c2h1cmwocmVtb3RlLCB2KTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnB1c2giKSkgewogCQljb25zdCBjaGFyICp2OwogCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQpAQCAtNDI0LDYgKzQzNSw5IEBACiAJCWZvciAoaiA9IDA7IGogPCByZW1vdGVzW2ldLT51cmxfbnI7IGorKykgewogCQkJcmVtb3Rlc1tpXS0+dXJsW2pdID0gYWxpYXNfdXJsKHJlbW90ZXNbaV0tPnVybFtqXSk7CiAJCX0KKwkJZm9yIChqID0gMDsgaiA8IHJlbW90ZXNbaV0tPnB1c2h1cmxfbnI7IGorKykgeworCQkJcmVtb3Rlc1tpXS0+cHVzaHVybFtqXSA9IGFsaWFzX3VybChyZW1vdGVzW2ldLT5wdXNodXJsW2pdKTsKKwkJfQogCX0KIH0KIApAQCAtMTA4NSwyNiArMTA5OSwzNSBAQAogCQlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCByZWYgKip0YWlsX3JlZihzdHJ1Y3QgcmVmICoqaGVhZCkKK3sKKwlzdHJ1Y3QgcmVmICoqdGFpbCA9IGhlYWQ7CisJd2hpbGUgKCp0YWlsKQorCQl0YWlsID0gJigoKnRhaWwpLT5uZXh0KTsKKwlyZXR1cm4gdGFpbDsKK30KKwogLyoKICAqIE5vdGUuIFRoaXMgaXMgdXNlZCBvbmx5IGJ5ICJwdXNoIjsgcmVmc3BlYyBtYXRjaGluZyBydWxlcyBmb3IKICAqIHB1c2ggYW5kIGZldGNoIGFyZSBzdWJ0bHkgZGlmZmVyZW50LCBzbyBkbyBub3QgdHJ5IHRvIHJldXNlIGl0CiAgKiB3aXRob3V0IHRoaW5raW5nLgogICovCi1pbnQgbWF0Y2hfcmVmcyhzdHJ1Y3QgcmVmICpzcmMsIHN0cnVjdCByZWYgKmRzdCwgc3RydWN0IHJlZiAqKipkc3RfdGFpbCwKK2ludCBtYXRjaF9yZWZzKHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqKmRzdCwKIAkgICAgICAgaW50IG5yX3JlZnNwZWMsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHJlZnNwZWMgKnJzOwogCWludCBzZW5kX2FsbCA9IGZsYWdzICYgTUFUQ0hfUkVGU19BTEw7CiAJaW50IHNlbmRfbWlycm9yID0gZmxhZ3MgJiBNQVRDSF9SRUZTX01JUlJPUjsKIAlpbnQgZXJyczsKLQlzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9yZWZzcGVjW10gPSB7ICI6IiwgMCB9OworCXN0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X3JlZnNwZWNbXSA9IHsgIjoiLCBOVUxMIH07CisJc3RydWN0IHJlZiAqKmRzdF90YWlsID0gdGFpbF9yZWYoZHN0KTsKIAogCWlmICghbnJfcmVmc3BlYykgewogCQlucl9yZWZzcGVjID0gMTsKIAkJcmVmc3BlYyA9IGRlZmF1bHRfcmVmc3BlYzsKIAl9CiAJcnMgPSBwYXJzZV9wdXNoX3JlZnNwZWMobnJfcmVmc3BlYywgKGNvbnN0IGNoYXIgKiopIHJlZnNwZWMpOwotCWVycnMgPSBtYXRjaF9leHBsaWNpdF9yZWZzKHNyYywgZHN0LCBkc3RfdGFpbCwgcnMsIG5yX3JlZnNwZWMpOworCWVycnMgPSBtYXRjaF9leHBsaWNpdF9yZWZzKHNyYywgKmRzdCwgJmRzdF90YWlsLCBycywgbnJfcmVmc3BlYyk7CiAKIAkvKiBwaWNrIHRoZSByZW1haW5kZXIgKi8KIAlmb3IgKCA7IHNyYzsgc3JjID0gc3JjLT5uZXh0KSB7CkBAIC0xMTM0LDcgKzExNTcsNyBAQAogCQkJCQkJICAgICBkc3Rfc2lkZSwgJmRzdF9uYW1lKSkKIAkJCQlkaWUoIkRpZG4ndCB0aGluayBpdCBtYXRjaGVzIGFueSBtb3JlIik7CiAJCX0KLQkJZHN0X3BlZXIgPSBmaW5kX3JlZl9ieV9uYW1lKGRzdCwgZHN0X25hbWUpOworCQlkc3RfcGVlciA9IGZpbmRfcmVmX2J5X25hbWUoKmRzdCwgZHN0X25hbWUpOwogCQlpZiAoZHN0X3BlZXIpIHsKIAkJCWlmIChkc3RfcGVlci0+cGVlcl9yZWYpCiAJCQkJLyogV2UncmUgYWxyZWFkeSBzZW5kaW5nIHNvbWV0aGluZyB0byB0aGlzIHJlZi4gKi8KQEAgLTExNTAsNyArMTE3Myw3IEBACiAJCQkJZ290byBmcmVlX25hbWU7CiAKIAkJCS8qIENyZWF0ZSBhIG5ldyBvbmUgYW5kIGxpbmsgaXQgKi8KLQkJCWRzdF9wZWVyID0gbWFrZV9saW5rZWRfcmVmKGRzdF9uYW1lLCBkc3RfdGFpbCk7CisJCQlkc3RfcGVlciA9IG1ha2VfbGlua2VkX3JlZihkc3RfbmFtZSwgJmRzdF90YWlsKTsKIAkJCWhhc2hjcHkoZHN0X3BlZXItPm5ld19zaGExLCBzcmMtPm5ld19zaGExKTsKIAkJfQogCQlkc3RfcGVlci0+cGVlcl9yZWYgPSBjb3B5X3JlZihzcmMpOwpAQCAtMTM5OSwxMyArMTQyMiwxMyBAQAogCWJhc2UgPSBicmFuY2gtPm1lcmdlWzBdLT5kc3Q7CiAJaWYgKCFyZXNvbHZlX3JlZihiYXNlLCBzaGExLCAxLCBOVUxMKSkKIAkJcmV0dXJuIDA7Ci0JdGhlaXJzID0gbG9va3VwX2NvbW1pdChzaGExKTsKKwl0aGVpcnMgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKIAlpZiAoIXRoZWlycykKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXJlc29sdmVfcmVmKGJyYW5jaC0+cmVmbmFtZSwgc2hhMSwgMSwgTlVMTCkpCiAJCXJldHVybiAwOwotCW91cnMgPSBsb29rdXBfY29tbWl0KHNoYTEpOworCW91cnMgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKIAlpZiAoIW91cnMpCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9yZW1vdGUuaCBiL3JlbW90ZS5oCmluZGV4IDk5NzA2YTguLjVkYjg0MjAgMTAwNjQ0Ci0tLSBhL3JlbW90ZS5oCisrKyBiL3JlbW90ZS5oCkBAIC0xNSw2ICsxNSwxMCBAQAogCWludCB1cmxfbnI7CiAJaW50IHVybF9hbGxvYzsKIAorCWNvbnN0IGNoYXIgKipwdXNodXJsOworCWludCBwdXNodXJsX25yOworCWludCBwdXNodXJsX2FsbG9jOworCiAJY29uc3QgY2hhciAqKnB1c2hfcmVmc3BlYzsKIAlzdHJ1Y3QgcmVmc3BlYyAqcHVzaDsKIAlpbnQgcHVzaF9yZWZzcGVjX25yOwpAQCAtODUsNyArODksNyBAQAogaW50IHZhbGlkX2ZldGNoX3JlZnNwZWMoY29uc3QgY2hhciAqcmVmc3BlYyk7CiBzdHJ1Y3QgcmVmc3BlYyAqcGFyc2VfZmV0Y2hfcmVmc3BlYyhpbnQgbnJfcmVmc3BlYywgY29uc3QgY2hhciAqKnJlZnNwZWMpOwogCi1pbnQgbWF0Y2hfcmVmcyhzdHJ1Y3QgcmVmICpzcmMsIHN0cnVjdCByZWYgKmRzdCwgc3RydWN0IHJlZiAqKipkc3RfdGFpbCwKK2ludCBtYXRjaF9yZWZzKHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqKmRzdCwKIAkgICAgICAgaW50IG5yX3JlZnNwZWMsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgYWxsKTsKIAogLyoKZGlmZiAtLWdpdCBhL3JldmlzaW9uLmMgYi9yZXZpc2lvbi5jCmluZGV4IDE4YjdlYmIuLmNlMjRhZDkgMTAwNjQ0Ci0tLSBhL3JldmlzaW9uLmMKKysrIGIvcmV2aXNpb24uYwpAQCAtMTMzLDcgKzEzMyw3IEBACiBzdGF0aWMgdm9pZCBhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9tb2RlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBtb2RlKQogewogCWlmIChyZXZzLT5ub193YWxrICYmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykpCi0JCWRpZSgib2JqZWN0IHJhbmdlcyBkbyBub3QgbWFrZSBzZW5zZSB3aGVuIG5vdCB3YWxraW5nIHJldmlzaW9ucyIpOworCQlyZXZzLT5ub193YWxrID0gMDsKIAlpZiAocmV2cy0+cmVmbG9nX2luZm8gJiYgb2JqLT50eXBlID09IE9CSl9DT01NSVQgJiYKIAkJCWFkZF9yZWZsb2dfZm9yX3dhbGsocmV2cy0+cmVmbG9nX2luZm8sCiAJCQkJKHN0cnVjdCBjb21taXQgKilvYmosIG5hbWUpKQpAQCAtMjU2LDEwICsyNTYsMTIgQEAKIAogLyoKICAqIFRoZSBnb2FsIGlzIHRvIGdldCBSRVZfVFJFRV9ORVcgYXMgdGhlIHJlc3VsdCBvbmx5IGlmIHRoZQotICogZGlmZiBjb25zaXN0cyBvZiBhbGwgJysnIChhbmQgbm8gb3RoZXIgY2hhbmdlcyksIGFuZAotICogUkVWX1RSRUVfRElGRkVSRU5UIG90aGVyd2lzZSAob2YgY291cnNlIGlmIHRoZSB0cmVlcyBhcmUKLSAqIHRoZSBzYW1lIHdlIHdhbnQgUkVWX1RSRUVfU0FNRSkuICBUaGF0IG1lYW5zIHRoYXQgb25jZSB3ZQotICogZ2V0IHRvIFJFVl9UUkVFX0RJRkZFUkVOVCwgd2UgZG8gbm90IGhhdmUgdG8gbG9vayBhbnkgZnVydGhlci4KKyAqIGRpZmYgY29uc2lzdHMgb2YgYWxsICcrJyAoYW5kIG5vIG90aGVyIGNoYW5nZXMpLCBSRVZfVFJFRV9PTEQKKyAqIGlmIHRoZSB3aG9sZSBkaWZmIGlzIHJlbW92YWwgb2Ygb2xkIGRhdGEsIGFuZCBvdGhlcndpc2UKKyAqIFJFVl9UUkVFX0RJRkZFUkVOVCAob2YgY291cnNlIGlmIHRoZSB0cmVlcyBhcmUgdGhlIHNhbWUgd2UKKyAqIHdhbnQgUkVWX1RSRUVfU0FNRSkuCisgKiBUaGF0IG1lYW5zIHRoYXQgb25jZSB3ZSBnZXQgdG8gUkVWX1RSRUVfRElGRkVSRU5ULCB3ZSBkbyBub3QKKyAqIGhhdmUgdG8gbG9vayBhbnkgZnVydGhlci4KICAqLwogc3RhdGljIGludCB0cmVlX2RpZmZlcmVuY2UgPSBSRVZfVFJFRV9TQU1FOwogCkBAIC0yNjgsMjIgKzI3MCw5IEBACiAJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAogCQkgICAgY29uc3QgY2hhciAqZnVsbHBhdGgpCiB7Ci0JaW50IGRpZmYgPSBSRVZfVFJFRV9ESUZGRVJFTlQ7CisJaW50IGRpZmYgPSBhZGRyZW1vdmUgPT0gJysnID8gUkVWX1RSRUVfTkVXIDogUkVWX1RSRUVfT0xEOwogCi0JLyoKLQkgKiBJcyBpdCBhbiBhZGQgb2YgYSBuZXcgZmlsZT8gSXQgbWVhbnMgdGhhdCB0aGUgb2xkIHRyZWUKLQkgKiBkaWRuJ3QgaGF2ZSBpdCBhdCBhbGwsIHNvIHdlIHdpbGwgdHVybiAiUkVWX1RSRUVfU0FNRSIgLT4KLQkgKiAiUkVWX1RSRUVfTkVXIiwgYnV0IGxlYXZlIGFueSAiUkVWX1RSRUVfRElGRkVSRU5UIiBhbG9uZQotCSAqIChhbmQgaWYgaXQgYWxyZWFkeSB3YXMgIlJFVl9UUkVFX05FVyIsIHdlJ2xsIGtlZXAgaXQKLQkgKiAiUkVWX1RSRUVfTkVXIiBvZiBjb3Vyc2UpLgotCSAqLwotCWlmIChhZGRyZW1vdmUgPT0gJysnKSB7Ci0JCWRpZmYgPSB0cmVlX2RpZmZlcmVuY2U7Ci0JCWlmIChkaWZmICE9IFJFVl9UUkVFX1NBTUUpCi0JCQlyZXR1cm47Ci0JCWRpZmYgPSBSRVZfVFJFRV9ORVc7Ci0JfQotCXRyZWVfZGlmZmVyZW5jZSA9IGRpZmY7CisJdHJlZV9kaWZmZXJlbmNlIHw9IGRpZmY7CiAJaWYgKHRyZWVfZGlmZmVyZW5jZSA9PSBSRVZfVFJFRV9ESUZGRVJFTlQpCiAJCURJRkZfT1BUX1NFVChvcHRpb25zLCBIQVNfQ0hBTkdFUyk7CiB9CkBAIC0zMDUsNiArMjk0LDggQEAKIAogCWlmICghdDEpCiAJCXJldHVybiBSRVZfVFJFRV9ORVc7CisJaWYgKCF0MikKKwkJcmV0dXJuIFJFVl9UUkVFX09MRDsKIAogCWlmIChyZXZzLT5zaW1wbGlmeV9ieV9kZWNvcmF0aW9uKSB7CiAJCS8qCkBAIC0zMjMsOCArMzE0LDcgQEAKIAkJaWYgKCFyZXZzLT5wcnVuZV9kYXRhKQogCQkJcmV0dXJuIFJFVl9UUkVFX1NBTUU7CiAJfQotCWlmICghdDIpCi0JCXJldHVybiBSRVZfVFJFRV9ESUZGRVJFTlQ7CisKIAl0cmVlX2RpZmZlcmVuY2UgPSBSRVZfVFJFRV9TQU1FOwogCURJRkZfT1BUX0NMUigmcmV2cy0+cHJ1bmluZywgSEFTX0NIQU5HRVMpOwogCWlmIChkaWZmX3RyZWVfc2hhMSh0MS0+b2JqZWN0LnNoYTEsIHQyLT5vYmplY3Quc2hhMSwgIiIsCkBAIC00MjksNiArNDE5LDcgQEAKIAkJCQlwLT5wYXJlbnRzID0gTlVMTDsKIAkJCX0KIAkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSBSRVZfVFJFRV9PTEQ6CiAJCWNhc2UgUkVWX1RSRUVfRElGRkVSRU5UOgogCQkJdHJlZV9jaGFuZ2VkID0gMTsKIAkJCXBwID0gJnBhcmVudC0+bmV4dDsKQEAgLTEwNjEsNyArMTA1Miw3IEBACiAJCXJldnMtPnNpbXBsaWZ5X2J5X2RlY29yYXRpb24gPSAxOwogCQlyZXZzLT5saW1pdGVkID0gMTsKIAkJcmV2cy0+cHJ1bmUgPSAxOwotCQlsb2FkX3JlZl9kZWNvcmF0aW9ucygpOworCQlsb2FkX3JlZl9kZWNvcmF0aW9ucyhERUNPUkFURV9TSE9SVF9SRUZTKTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1kYXRlLW9yZGVyIikpIHsKIAkJcmV2cy0+bGlmbyA9IDA7CiAJCXJldnMtPnRvcG9fb3JkZXIgPSAxOwpAQCAtMTA4Niw2ICsxMDc3LDggQEAKIAkJcmV2cy0+c2hvd19hbGwgPSAxOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlbW92ZS1lbXB0eSIpKSB7CiAJCXJldnMtPnJlbW92ZV9lbXB0eV90cmVlcyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbWVyZ2VzIikpIHsKKwkJcmV2cy0+bWVyZ2VzX29ubHkgPSAxOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLW1lcmdlcyIpKSB7CiAJCXJldnMtPm5vX21lcmdlcyA9IDE7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYm91bmRhcnkiKSkgewpAQCAtMTY4NSw2ICsxNjc4LDggQEAKIAkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CiAJaWYgKHJldnMtPm5vX21lcmdlcyAmJiBjb21taXQtPnBhcmVudHMgJiYgY29tbWl0LT5wYXJlbnRzLT5uZXh0KQogCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwlpZiAocmV2cy0+bWVyZ2VzX29ubHkgJiYgIShjb21taXQtPnBhcmVudHMgJiYgY29tbWl0LT5wYXJlbnRzLT5uZXh0KSkKKwkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CiAJaWYgKCFjb21taXRfbWF0Y2goY29tbWl0LCByZXZzKSkKIAkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CiAJaWYgKHJldnMtPnBydW5lICYmIHJldnMtPmRlbnNlKSB7CmRpZmYgLS1naXQgYS9yZXZpc2lvbi5oIGIvcmV2aXNpb24uaAppbmRleCBiZTM5ZTdkLi5iMTA5ODRiIDEwMDY0NAotLS0gYS9yZXZpc2lvbi5oCisrKyBiL3JldmlzaW9uLmgKQEAgLTE1LDYgKzE1LDkgQEAKICNkZWZpbmUgU1lNTUVUUklDX0xFRlQJKDF1PDw4KQogI2RlZmluZSBBTExfUkVWX0ZMQUdTCSgoMXU8PDkpLTEpCiAKKyNkZWZpbmUgREVDT1JBVEVfU0hPUlRfUkVGUwkxCisjZGVmaW5lIERFQ09SQVRFX0ZVTExfUkVGUwkyCisKIHN0cnVjdCByZXZfaW5mbzsKIHN0cnVjdCBsb2dfaW5mbzsKIApAQCAtMzYsNiArMzksNyBAQAogCXVuc2lnbmVkIGludAlkZW5zZToxLAogCQkJcHJ1bmU6MSwKIAkJCW5vX21lcmdlczoxLAorCQkJbWVyZ2VzX29ubHk6MSwKIAkJCW5vX3dhbGs6MSwKIAkJCXNob3dfYWxsOjEsCiAJCQlyZW1vdmVfZW1wdHlfdHJlZXM6MSwKQEAgLTExOCw4ICsxMjIsOSBAQAogfTsKIAogI2RlZmluZSBSRVZfVFJFRV9TQU1FCQkwCi0jZGVmaW5lIFJFVl9UUkVFX05FVwkJMQotI2RlZmluZSBSRVZfVFJFRV9ESUZGRVJFTlQJMgorI2RlZmluZSBSRVZfVFJFRV9ORVcJCTEJLyogT25seSBuZXcgZmlsZXMgKi8KKyNkZWZpbmUgUkVWX1RSRUVfT0xECQkyCS8qIE9ubHkgZmlsZXMgcmVtb3ZlZCAqLworI2RlZmluZSBSRVZfVFJFRV9ESUZGRVJFTlQJMwkvKiBNaXhlZCBjaGFuZ2VzICovCiAKIC8qIHJldmlzaW9uLmMgKi8KIHZvaWQgcmVhZF9yZXZpc2lvbnNfZnJvbV9zdGRpbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMpOwpkaWZmIC0tZ2l0IGEvcnVuLWNvbW1hbmQuYyBiL3J1bi1jb21tYW5kLmMKaW5kZXggZWIyZWZjMy4uZmYzZDhlMiAxMDA2NDQKLS0tIGEvcnVuLWNvbW1hbmQuYworKysgYi9ydW4tY29tbWFuZC5jCkBAIC0xMDEsOCArMTAxLDggQEAKIAkJfQogCiAJCWlmIChjbWQtPmRpciAmJiBjaGRpcihjbWQtPmRpcikpCi0JCQlkaWUoImV4ZWMgJXM6IGNkIHRvICVzIGZhaWxlZCAoJXMpIiwgY21kLT5hcmd2WzBdLAotCQkJICAgIGNtZC0+ZGlyLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJleGVjICclcyc6IGNkIHRvICclcycgZmFpbGVkIiwgY21kLT5hcmd2WzBdLAorCQkJICAgIGNtZC0+ZGlyKTsKIAkJaWYgKGNtZC0+ZW52KSB7CiAJCQlmb3IgKDsgKmNtZC0+ZW52OyBjbWQtPmVudisrKSB7CiAJCQkJaWYgKHN0cmNocigqY21kLT5lbnYsICc9JykpCmRpZmYgLS1naXQgYS9zZXR1cC5jIGIvc2V0dXAuYwppbmRleCBlYmQ2MGRlLi5lMzc4MWI2IDEwMDY0NAotLS0gYS9zZXR1cC5jCisrKyBiL3NldHVwLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAlpZiAoZXJybm8gPT0gRU5PRU5UKQogCQlkaWUoImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiB1bmtub3duIHJldmlzaW9uIG9yIHBhdGggbm90IGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCiAJCSAgICAiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMiLCBhcmcpOwotCWRpZSgiJyVzJzogJXMiLCBhcmcsIHN0cmVycm9yKGVycm5vKSk7CisJZGllX2Vycm5vKCJmYWlsZWQgdG8gc3RhdCAnJXMnIiwgYXJnKTsKIH0KIAogLyoKQEAgLTEwMyw3ICsxMDMsNyBAQAogCQlkaWUoImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgogCQkgICAgIlVzZSAnLS0nIHRvIHNlcGFyYXRlIGZpbGVuYW1lcyBmcm9tIHJldmlzaW9ucyIsIGFyZyk7CiAJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBlcnJubyAhPSBFTk9URElSKQotCQlkaWUoIiclcyc6ICVzIiwgYXJnLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImZhaWxlZCB0byBzdGF0ICclcyciLCBhcmcpOwogfQogCiBjb25zdCBjaGFyICoqZ2V0X3BhdGhzcGVjKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqKnBhdGhzcGVjKQpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJCXJldHVybiBOVUxMOwogCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CiAJaWYgKGZkIDwgMCkKLQkJZGllKCJFcnJvciBvcGVuaW5nICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiRXJyb3Igb3BlbmluZyAnJXMnIiwgcGF0aCk7CiAJYnVmID0geG1hbGxvYyhzdC5zdF9zaXplICsgMSk7CiAJbGVuID0gcmVhZF9pbl9mdWxsKGZkLCBidWYsIHN0LnN0X3NpemUpOwogCWNsb3NlKGZkKTsKQEAgLTMyNyw3ICszMjcsNyBAQAogCQkJCXJldHVybiBOVUxMOwogCQkJc2V0X2dpdF9kaXIobWFrZV9hYnNvbHV0ZV9wYXRoKGdpdGRpcmVudikpOwogCQkJaWYgKGNoZGlyKHdvcmtfdHJlZV9lbnYpIDwgMCkKLQkJCQlkaWUgKCJDb3VsZCBub3QgY2hkaXIgdG8gJXMiLCB3b3JrX3RyZWVfZW52KTsKKwkJCQlkaWVfZXJybm8gKCJDb3VsZCBub3QgY2hkaXIgdG8gJyVzJyIsIHdvcmtfdHJlZV9lbnYpOwogCQkJc3RyY2F0KGJ1ZmZlciwgIi8iKTsKIAkJCXJldHVybiByZXR2YWw7CiAJCX0KQEAgLTMzOSw3ICszMzksNyBAQAogCX0KIAogCWlmICghZ2V0Y3dkKGN3ZCwgc2l6ZW9mKGN3ZCktMSkpCi0JCWRpZSgiVW5hYmxlIHRvIHJlYWQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOworCQlkaWVfZXJybm8oIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKIAogCWNlaWxfb2Zmc2V0ID0gbG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGgoY3dkLCBlbnZfY2VpbGluZ19kaXJzKTsKIAlpZiAoY2VpbF9vZmZzZXQgPCAwICYmIGhhc19kb3NfZHJpdmVfcHJlZml4KGN3ZCkpCkBAIC0zODIsMTQgKzM4MiwxNCBAQAogCQlpZiAob2Zmc2V0IDw9IGNlaWxfb2Zmc2V0KSB7CiAJCQlpZiAobm9uZ2l0X29rKSB7CiAJCQkJaWYgKGNoZGlyKGN3ZCkpCi0JCQkJCWRpZSgiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiKTsKKwkJCQkJZGllX2Vycm5vKCJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpOwogCQkJCSpub25naXRfb2sgPSAxOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQkJZGllKCJOb3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIsIERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVCk7CiAJCX0KIAkJaWYgKGNoZGlyKCIuLiIpKQotCQkJZGllKCJDYW5ub3QgY2hhbmdlIHRvICVzLy4uOiAlcyIsIGN3ZCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiQ2Fubm90IGNoYW5nZSB0byAnJXMvLi4nIiwgY3dkKTsKIAl9CiAKIAlpbnNpZGVfZ2l0X2RpciA9IDA7CkBAIC00OTMsMTAgKzQ5MywxMCBAQAogCQlzdGF0aWMgY2hhciBidWZmZXJbUEFUSF9NQVggKyAxXTsKIAkJY2hhciAqcmVsOwogCQlpZiAocmV0dmFsICYmIGNoZGlyKHJldHZhbCkpCi0JCQlkaWUgKCJDb3VsZCBub3QganVtcCBiYWNrIGludG8gb3JpZ2luYWwgY3dkIik7CisJCQlkaWVfZXJybm8gKCJDb3VsZCBub3QganVtcCBiYWNrIGludG8gb3JpZ2luYWwgY3dkIik7CiAJCXJlbCA9IGdldF9yZWxhdGl2ZV9jd2QoYnVmZmVyLCBQQVRIX01BWCwgZ2V0X2dpdF93b3JrX3RyZWUoKSk7CiAJCWlmIChyZWwgJiYgKnJlbCAmJiBjaGRpcihnZXRfZ2l0X3dvcmtfdHJlZSgpKSkKLQkJCWRpZSAoIkNvdWxkIG5vdCBqdW1wIHRvIHdvcmtpbmcgZGlyZWN0b3J5Iik7CisJCQlkaWVfZXJybm8gKCJDb3VsZCBub3QganVtcCB0byB3b3JraW5nIGRpcmVjdG9yeSIpOwogCQlyZXR1cm4gcmVsICYmICpyZWwgPyBzdHJjYXQocmVsLCAiLyIpIDogTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NoYTFfZmlsZS5jIGIvc2hhMV9maWxlLmMKaW5kZXggOGY1ZmU2Mi4uMWQ5OTZhMSAxMDA2NDQKLS0tIGEvc2hhMV9maWxlLmMKKysrIGIvc2hhMV9maWxlLmMKQEAgLTExNzAsNyArMTE3MCw3IEBACiAJc2l6ZSA9IGMgJiAxNTsKIAlzaGlmdCA9IDQ7CiAJd2hpbGUgKGMgJiAweDgwKSB7Ci0JCWlmIChsZW4gPD0gdXNlZCB8fCBzaXplb2YobG9uZykgKiA4IDw9IHNoaWZ0KSB7CisJCWlmIChsZW4gPD0gdXNlZCB8fCBiaXRzaXplb2YobG9uZykgPD0gc2hpZnQpIHsKIAkJCWVycm9yKCJiYWQgb2JqZWN0IGhlYWRlciIpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTIyODYsNyArMjI4Niw3IEBACiAJaWYgKGZzeW5jX29iamVjdF9maWxlcykKIAkJZnN5bmNfb3JfZGllKGZkLCAic2hhMSBmaWxlIik7CiAJaWYgKGNsb3NlKGZkKSAhPSAwKQotCQlkaWUoImVycm9yIHdoZW4gY2xvc2luZyBzaGExIGZpbGUgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiZXJyb3Igd2hlbiBjbG9zaW5nIHNoYTEgZmlsZSIpOwogfQogCiAvKiBTaXplIG9mIGRpcmVjdG9yeSBjb21wb25lbnQsIGluY2x1ZGluZyB0aGUgZW5kaW5nICcvJyAqLwpkaWZmIC0tZ2l0IGEvc2hlbGwuYyBiL3NoZWxsLmMKaW5kZXggYjk2OGJlNy4uZTQ4NjRlMCAxMDA2NDQKLS0tIGEvc2hlbGwuYworKysgYi9zaGVsbC5jCkBAIC02MCw3ICs2MCw3IEBACiAJd2hpbGUgKGRldm51bGxfZmQgPj0gMCAmJiBkZXZudWxsX2ZkIDw9IDIpCiAJCWRldm51bGxfZmQgPSBkdXAoZGV2bnVsbF9mZCk7CiAJaWYgKGRldm51bGxfZmQgPT0gLTEpCi0JCWRpZSgib3BlbmluZyAvZGV2L251bGwgZmFpbGVkICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIm9wZW5pbmcgL2Rldi9udWxsIGZhaWxlZCIpOwogCWNsb3NlIChkZXZudWxsX2ZkKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zeW1saW5rcy5jIGIvc3ltbGlua3MuYwppbmRleCAxZDZiMzViLi43YjBhODZkIDEwMDY0NAotLS0gYS9zeW1saW5rcy5jCisrKyBiL3N5bWxpbmtzLmMKQEAgLTMyLDE5ICszMiwxMyBAQAogCXJldHVybiBtYXRjaF9sZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2FjaGVfZGVmIHsKLQljaGFyIHBhdGhbUEFUSF9NQVggKyAxXTsKLQlpbnQgbGVuOwotCWludCBmbGFnczsKLQlpbnQgdHJhY2tfZmxhZ3M7Ci0JaW50IHByZWZpeF9sZW5fc3RhdF9mdW5jOwotfSBjYWNoZTsKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfZGVmIGRlZmF1bHRfY2FjaGU7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9sc3RhdF9jYWNoZSh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2xzdGF0X2NhY2hlKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlKQogewotCWNhY2hlLnBhdGhbMF0gPSAnXDAnOwotCWNhY2hlLmxlbiA9IDA7Ci0JY2FjaGUuZmxhZ3MgPSAwOworCWNhY2hlLT5wYXRoWzBdID0gJ1wwJzsKKwljYWNoZS0+bGVuID0gMDsKKwljYWNoZS0+ZmxhZ3MgPSAwOwogCS8qCiAJICogVGhlIHRyYWNrX2ZsYWdzIGFuZCBwcmVmaXhfbGVuX3N0YXRfZnVuYyBtZW1iZXJzIGlzIG9ubHkKIAkgKiBzZXQgYnkgdGhlIHNhZmVndWFyZCBydWxlIGluc2lkZSBsc3RhdF9jYWNoZSgpCkBAIC03MCwyMyArNjQsMjMgQEAKICAqIG9mIHRoZSBwcmVmaXgsIHdoZXJlIHRoZSBjYWNoZSBzaG91bGQgdXNlIHRoZSBzdGF0KCkgZnVuY3Rpb24KICAqIGluc3RlYWQgb2YgdGhlIGxzdGF0KCkgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIHBhdGggY29tcG9uZW50LgogICovCi1zdGF0aWMgaW50IGxzdGF0X2NhY2hlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCitzdGF0aWMgaW50IGxzdGF0X2NhY2hlKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAogCQkgICAgICAgaW50IHRyYWNrX2ZsYWdzLCBpbnQgcHJlZml4X2xlbl9zdGF0X2Z1bmMpCiB7CiAJaW50IG1hdGNoX2xlbiwgbGFzdF9zbGFzaCwgbGFzdF9zbGFzaF9kaXIsIHByZXZpb3VzX3NsYXNoOwogCWludCBtYXRjaF9mbGFncywgcmV0X2ZsYWdzLCBzYXZlX2ZsYWdzLCBtYXhfbGVuLCByZXQ7CiAJc3RydWN0IHN0YXQgc3Q7CiAKLQlpZiAoY2FjaGUudHJhY2tfZmxhZ3MgIT0gdHJhY2tfZmxhZ3MgfHwKLQkgICAgY2FjaGUucHJlZml4X2xlbl9zdGF0X2Z1bmMgIT0gcHJlZml4X2xlbl9zdGF0X2Z1bmMpIHsKKwlpZiAoY2FjaGUtPnRyYWNrX2ZsYWdzICE9IHRyYWNrX2ZsYWdzIHx8CisJICAgIGNhY2hlLT5wcmVmaXhfbGVuX3N0YXRfZnVuYyAhPSBwcmVmaXhfbGVuX3N0YXRfZnVuYykgewogCQkvKgogCQkgKiBBcyBhIHNhZmVndWFyZCBydWxlIHdlIGNsZWFyIHRoZSBjYWNoZSBpZiB0aGUKIAkJICogdmFsdWVzIG9mIHRyYWNrX2ZsYWdzIGFuZC9vciBwcmVmaXhfbGVuX3N0YXRfZnVuYwogCQkgKiBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBsYXN0IHN1cHBsaWVkIHZhbHVlcy4KIAkJICovCi0JCXJlc2V0X2xzdGF0X2NhY2hlKCk7Ci0JCWNhY2hlLnRyYWNrX2ZsYWdzID0gdHJhY2tfZmxhZ3M7Ci0JCWNhY2hlLnByZWZpeF9sZW5fc3RhdF9mdW5jID0gcHJlZml4X2xlbl9zdGF0X2Z1bmM7CisJCXJlc2V0X2xzdGF0X2NhY2hlKGNhY2hlKTsKKwkJY2FjaGUtPnRyYWNrX2ZsYWdzID0gdHJhY2tfZmxhZ3M7CisJCWNhY2hlLT5wcmVmaXhfbGVuX3N0YXRfZnVuYyA9IHByZWZpeF9sZW5fc3RhdF9mdW5jOwogCQltYXRjaF9sZW4gPSBsYXN0X3NsYXNoID0gMDsKIAl9IGVsc2UgewogCQkvKgpAQCAtOTQsMTAgKzg4LDE0IEBACiAJCSAqIHRoZSAyICJleGNsdWRpbmciIHBhdGggdHlwZXMuCiAJCSAqLwogCQltYXRjaF9sZW4gPSBsYXN0X3NsYXNoID0KLQkJCWxvbmdlc3RfcGF0aF9tYXRjaChuYW1lLCBsZW4sIGNhY2hlLnBhdGgsIGNhY2hlLmxlbiwKKwkJCWxvbmdlc3RfcGF0aF9tYXRjaChuYW1lLCBsZW4sIGNhY2hlLT5wYXRoLCBjYWNoZS0+bGVuLAogCQkJCQkgICAmcHJldmlvdXNfc2xhc2gpOwotCQltYXRjaF9mbGFncyA9IGNhY2hlLmZsYWdzICYgdHJhY2tfZmxhZ3MgJiAoRkxfTk9FTlR8RkxfU1lNTElOSyk7Ci0JCWlmIChtYXRjaF9mbGFncyAmJiBtYXRjaF9sZW4gPT0gY2FjaGUubGVuKQorCQltYXRjaF9mbGFncyA9IGNhY2hlLT5mbGFncyAmIHRyYWNrX2ZsYWdzICYgKEZMX05PRU5UfEZMX1NZTUxJTkspOworCisJCWlmICghKHRyYWNrX2ZsYWdzICYgRkxfRlVMTFBBVEgpICYmIG1hdGNoX2xlbiA9PSBsZW4pCisJCQltYXRjaF9sZW4gPSBsYXN0X3NsYXNoID0gcHJldmlvdXNfc2xhc2g7CisKKwkJaWYgKG1hdGNoX2ZsYWdzICYmIG1hdGNoX2xlbiA9PSBjYWNoZS0+bGVuKQogCQkJcmV0dXJuIG1hdGNoX2ZsYWdzOwogCQkvKgogCQkgKiBJZiB3ZSBub3cgaGF2ZSBtYXRjaF9sZW4gPiAwLCB3ZSB3b3VsZCBrbm93IHRoYXQKQEAgLTEyMSwxOCArMTE5LDE4IEBACiAJbWF4X2xlbiA9IGxlbiA8IFBBVEhfTUFYID8gbGVuIDogUEFUSF9NQVg7CiAJd2hpbGUgKG1hdGNoX2xlbiA8IG1heF9sZW4pIHsKIAkJZG8gewotCQkJY2FjaGUucGF0aFttYXRjaF9sZW5dID0gbmFtZVttYXRjaF9sZW5dOworCQkJY2FjaGUtPnBhdGhbbWF0Y2hfbGVuXSA9IG5hbWVbbWF0Y2hfbGVuXTsKIAkJCW1hdGNoX2xlbisrOwogCQl9IHdoaWxlIChtYXRjaF9sZW4gPCBtYXhfbGVuICYmIG5hbWVbbWF0Y2hfbGVuXSAhPSAnLycpOwogCQlpZiAobWF0Y2hfbGVuID49IG1heF9sZW4gJiYgISh0cmFja19mbGFncyAmIEZMX0ZVTExQQVRIKSkKIAkJCWJyZWFrOwogCQlsYXN0X3NsYXNoID0gbWF0Y2hfbGVuOwotCQljYWNoZS5wYXRoW2xhc3Rfc2xhc2hdID0gJ1wwJzsKKwkJY2FjaGUtPnBhdGhbbGFzdF9zbGFzaF0gPSAnXDAnOwogCiAJCWlmIChsYXN0X3NsYXNoIDw9IHByZWZpeF9sZW5fc3RhdF9mdW5jKQotCQkJcmV0ID0gc3RhdChjYWNoZS5wYXRoLCAmc3QpOworCQkJcmV0ID0gc3RhdChjYWNoZS0+cGF0aCwgJnN0KTsKIAkJZWxzZQotCQkJcmV0ID0gbHN0YXQoY2FjaGUucGF0aCwgJnN0KTsKKwkJCXJldCA9IGxzdGF0KGNhY2hlLT5wYXRoLCAmc3QpOwogCiAJCWlmIChyZXQpIHsKIAkJCXJldF9mbGFncyA9IEZMX0xTVEFURVJSOwpAQCAtMTU2LDkgKzE1NCw5IEBACiAJICovCiAJc2F2ZV9mbGFncyA9IHJldF9mbGFncyAmIHRyYWNrX2ZsYWdzICYgKEZMX05PRU5UfEZMX1NZTUxJTkspOwogCWlmIChzYXZlX2ZsYWdzICYmIGxhc3Rfc2xhc2ggPiAwICYmIGxhc3Rfc2xhc2ggPD0gUEFUSF9NQVgpIHsKLQkJY2FjaGUucGF0aFtsYXN0X3NsYXNoXSA9ICdcMCc7Ci0JCWNhY2hlLmxlbiA9IGxhc3Rfc2xhc2g7Ci0JCWNhY2hlLmZsYWdzID0gc2F2ZV9mbGFnczsKKwkJY2FjaGUtPnBhdGhbbGFzdF9zbGFzaF0gPSAnXDAnOworCQljYWNoZS0+bGVuID0gbGFzdF9zbGFzaDsKKwkJY2FjaGUtPmZsYWdzID0gc2F2ZV9mbGFnczsKIAl9IGVsc2UgaWYgKCh0cmFja19mbGFncyAmIEZMX0RJUikgJiYKIAkJICAgbGFzdF9zbGFzaF9kaXIgPiAwICYmIGxhc3Rfc2xhc2hfZGlyIDw9IFBBVEhfTUFYKSB7CiAJCS8qCkBAIC0xNzIsMTEgKzE3MCwxMSBAQAogCQkgKiBjYW4gc3RpbGwgY2FjaGUgdGhlIHBhdGggY29tcG9uZW50cyBiZWZvcmUgdGhlIGxhc3QKIAkJICogb25lICh0aGUgZm91bmQgc3ltbGluayBvciBub24tZXhpc3RpbmcgY29tcG9uZW50KS4KIAkJICovCi0JCWNhY2hlLnBhdGhbbGFzdF9zbGFzaF9kaXJdID0gJ1wwJzsKLQkJY2FjaGUubGVuID0gbGFzdF9zbGFzaF9kaXI7Ci0JCWNhY2hlLmZsYWdzID0gRkxfRElSOworCQljYWNoZS0+cGF0aFtsYXN0X3NsYXNoX2Rpcl0gPSAnXDAnOworCQljYWNoZS0+bGVuID0gbGFzdF9zbGFzaF9kaXI7CisJCWNhY2hlLT5mbGFncyA9IEZMX0RJUjsKIAl9IGVsc2UgewotCQlyZXNldF9sc3RhdF9jYWNoZSgpOworCQlyZXNldF9sc3RhdF9jYWNoZShjYWNoZSk7CiAJfQogCXJldHVybiByZXRfZmxhZ3M7CiB9CkBAIC0xODgsMTYgKzE4NiwxOCBAQAogdm9pZCBpbnZhbGlkYXRlX2xzdGF0X2NhY2hlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCiB7CiAJaW50IG1hdGNoX2xlbiwgcHJldmlvdXNfc2xhc2g7CisJc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUgPSAmZGVmYXVsdF9jYWNoZTsJLyogRklYTUUgKi8KIAotCW1hdGNoX2xlbiA9IGxvbmdlc3RfcGF0aF9tYXRjaChuYW1lLCBsZW4sIGNhY2hlLnBhdGgsIGNhY2hlLmxlbiwKKwltYXRjaF9sZW4gPSBsb25nZXN0X3BhdGhfbWF0Y2gobmFtZSwgbGVuLCBjYWNoZS0+cGF0aCwgY2FjaGUtPmxlbiwKIAkJCQkgICAgICAgJnByZXZpb3VzX3NsYXNoKTsKIAlpZiAobGVuID09IG1hdGNoX2xlbikgewotCQlpZiAoKGNhY2hlLnRyYWNrX2ZsYWdzICYgRkxfRElSKSAmJiBwcmV2aW91c19zbGFzaCA+IDApIHsKLQkJCWNhY2hlLnBhdGhbcHJldmlvdXNfc2xhc2hdID0gJ1wwJzsKLQkJCWNhY2hlLmxlbiA9IHByZXZpb3VzX3NsYXNoOwotCQkJY2FjaGUuZmxhZ3MgPSBGTF9ESVI7Ci0JCX0gZWxzZQotCQkJcmVzZXRfbHN0YXRfY2FjaGUoKTsKKwkJaWYgKChjYWNoZS0+dHJhY2tfZmxhZ3MgJiBGTF9ESVIpICYmIHByZXZpb3VzX3NsYXNoID4gMCkgeworCQkJY2FjaGUtPnBhdGhbcHJldmlvdXNfc2xhc2hdID0gJ1wwJzsKKwkJCWNhY2hlLT5sZW4gPSBwcmV2aW91c19zbGFzaDsKKwkJCWNhY2hlLT5mbGFncyA9IEZMX0RJUjsKKwkJfSBlbHNlIHsKKwkJCXJlc2V0X2xzdGF0X2NhY2hlKGNhY2hlKTsKKwkJfQogCX0KIH0KIApAQCAtMjA2LDcgKzIwNiw4IEBACiAgKi8KIHZvaWQgY2xlYXJfbHN0YXRfY2FjaGUodm9pZCkKIHsKLQlyZXNldF9sc3RhdF9jYWNoZSgpOworCXN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlID0gJmRlZmF1bHRfY2FjaGU7CS8qIEZJWE1FICovCisJcmVzZXRfbHN0YXRfY2FjaGUoY2FjaGUpOwogfQogCiAjZGVmaW5lIFVTRV9PTkxZX0xTVEFUICAwCkBAIC0yMTQsMTEgKzIxNSwxNyBAQAogLyoKICAqIFJldHVybiBub24temVybyBpZiBwYXRoICduYW1lJyBoYXMgYSBsZWFkaW5nIHN5bWxpbmsgY29tcG9uZW50CiAgKi8KK2ludCB0aHJlYWRlZF9oYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJcmV0dXJuIGxzdGF0X2NhY2hlKGNhY2hlLCBuYW1lLCBsZW4sIEZMX1NZTUxJTkt8RkxfRElSLCBVU0VfT05MWV9MU1RBVCkgJiBGTF9TWU1MSU5LOworfQorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQKKyAqLwogaW50IGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQogewotCXJldHVybiBsc3RhdF9jYWNoZShuYW1lLCBsZW4sCi0JCQkgICBGTF9TWU1MSU5LfEZMX0RJUiwgVVNFX09OTFlfTFNUQVQpICYKLQkJRkxfU1lNTElOSzsKKwlyZXR1cm4gdGhyZWFkZWRfaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKCZkZWZhdWx0X2NhY2hlLCBuYW1lLCBsZW4pOwogfQogCiAvKgpAQCAtMjI3LDcgKzIzNCw4IEBACiAgKi8KIGludCBoYXNfc3ltbGlua19vcl9ub2VudF9sZWFkaW5nX3BhdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKIHsKLQlyZXR1cm4gbHN0YXRfY2FjaGUobmFtZSwgbGVuLAorCXN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlID0gJmRlZmF1bHRfY2FjaGU7CS8qIEZJWE1FICovCisJcmV0dXJuIGxzdGF0X2NhY2hlKGNhY2hlLCBuYW1lLCBsZW4sCiAJCQkgICBGTF9TWU1MSU5LfEZMX05PRU5UfEZMX0RJUiwgVVNFX09OTFlfTFNUQVQpICYKIAkJKEZMX1NZTUxJTkt8RkxfTk9FTlQpOwogfQpAQCAtMjQxLDcgKzI0OSw4IEBACiAgKi8KIGludCBoYXNfZGlyc19vbmx5X3BhdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgaW50IHByZWZpeF9sZW4pCiB7Ci0JcmV0dXJuIGxzdGF0X2NhY2hlKG5hbWUsIGxlbiwKKwlzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSA9ICZkZWZhdWx0X2NhY2hlOwkvKiBGSVhNRSAqLworCXJldHVybiBsc3RhdF9jYWNoZShjYWNoZSwgbmFtZSwgbGVuLAogCQkJICAgRkxfRElSfEZMX0ZVTExQQVRILCBwcmVmaXhfbGVuKSAmCiAJCUZMX0RJUjsKIH0KQEAgLTI2Myw3ICsyNzIsNiBAQAogCQkJIHJlbW92YWwucGF0aFtyZW1vdmFsLmxlbl0gIT0gJy8nKTsKIAl9CiAJcmVtb3ZhbC5sZW4gPSBuZXdfbGVuOwotCXJldHVybjsKIH0KIAogdm9pZCBzY2hlZHVsZV9kaXJfZm9yX3JlbW92YWwoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKQEAgLTI5NiwxMSArMzA0LDkgQEAKIAkJICAgICAgIGxhc3Rfc2xhc2ggLSBtYXRjaF9sZW4pOwogCQlyZW1vdmFsLmxlbiA9IGxhc3Rfc2xhc2g7CiAJfQotCXJldHVybjsKIH0KIAogdm9pZCByZW1vdmVfc2NoZWR1bGVkX2RpcnModm9pZCkKIHsKIAlkb19yZW1vdmVfc2NoZWR1bGVkX2RpcnMoMCk7Ci0JcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvdC9saWItZ2l0LXN2bi5zaCBiL3QvbGliLWdpdC1zdm4uc2gKaW5kZXggNzczZDQ3Yy4uNTY1NDk2MiAxMDA2NDQKLS0tIGEvdC9saWItZ2l0LXN2bi5zaAorKysgYi90L2xpYi1naXQtc3ZuLnNoCkBAIC0yNiw2ICsyNiw4IEBACiAKIHN2bnJlcG89JFBXRC9zdm5yZXBvCiBleHBvcnQgc3ZucmVwbworc3ZuY29uZj0kUFdEL3N2bmNvbmYKK2V4cG9ydCBzdm5jb25mCiAKIHBlcmwgLXcgLWUgIgogdXNlIFNWTjo6Q29yZTsKQEAgLTU0LDYgKzU2LDE5IEBACiAJdGVzdC1jaG10aW1lICsxICIkMSIKIH0KIAorIyBXZSBuZWVkIHRoaXMsIGJlY2F1c2Ugd2Ugc2hvdWxkIHBhc3MgZW1wdHkgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgdG8KKyMgdGhlICdzdm4gY29tbWl0JyB0byBhdm9pZCBhdXRvbWF0ZWQgcHJvcGVydHkgY2hhbmdlcyBhbmQgb3RoZXIgc3R1ZmYKKyMgdGhhdCBjb3VsZCBiZSBzZXQgZnJvbSB1c2VyJ3MgY29uZmlndXJhdGlvbiBmaWxlcyBpbiB+Ly5zdWJ2ZXJzaW9uLgorc3ZuX2NtZCAoKSB7CisJWyAtZCAiJHN2bmNvbmYiIF0gfHwgbWtkaXIgIiRzdm5jb25mIgorCW9yaWdfc3ZuY21kPSIkMSI7IHNoaWZ0CisJaWYgWyAteiAiJG9yaWdfc3ZuY21kIiBdOyB0aGVuCisJCXN2bgorCQlyZXR1cm4KKwlmaQorCXN2biAiJG9yaWdfc3ZuY21kIiAtLWNvbmZpZy1kaXIgIiRzdm5jb25mIiAiJEAiCit9CisKIGZvciBkIGluIFwKIAkiJFNWTl9IVFRQRF9QQVRIIiBcCiAJL3Vzci9zYmluL2FwYWNoZTIgXApkaWZmIC0tZ2l0IGEvdC9saWItaHR0cGQuc2ggYi90L2xpYi1odHRwZC5zaAppbmRleCBjZGU2NTlkLi42NzY1YjA4IDEwMDY0NAotLS0gYS90L2xpYi1odHRwZC5zaAorKysgYi90L2xpYi1odHRwZC5zaApAQCAtOTMsMTQgKzkzLDE2IEBACiBzdGFydF9odHRwZCgpIHsKIAlwcmVwYXJlX2h0dHBkID4mMyAyPiY0CiAKLQl0cmFwICdzdG9wX2h0dHBkOyBkaWUnIEVYSVQKKwl0cmFwICdjb2RlPSQ/OyBzdG9wX2h0dHBkOyAoZXhpdCAkY29kZSk7IGRpZScgRVhJVAogCiAJIiRMSUJfSFRUUERfUEFUSCIgLWQgIiRIVFRQRF9ST09UX1BBVEgiIFwKIAkJLWYgIiRURVNUX1BBVEgvYXBhY2hlLmNvbmYiICRIVFRQRF9QQVJBIFwKIAkJLWMgIkxpc3RlbiAxMjcuMC4wLjE6JExJQl9IVFRQRF9QT1JUIiAtayBzdGFydCBcCiAJCT4mMyAyPiY0Ci0JaWYgISB0ZXN0ICQ/ID0gMDsgdGhlbgorCWlmIHRlc3QgJD8gLW5lIDAKKwl0aGVuCiAJCXNheSAic2tpcHBpbmcgdGVzdCwgd2ViIHNlcnZlciBzZXR1cCBmYWlsZWQiCisJCXRyYXAgJ2RpZScgRVhJVAogCQl0ZXN0X2RvbmUKIAlmaQogfQpkaWZmIC0tZ2l0IGEvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoIGIvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoCmluZGV4IGUzODI0MWMuLmJiYzgyMWUgMTAwNzU1Ci0tLSBhL3QvdDAwNDAtcGFyc2Utb3B0aW9ucy5zaAorKysgYi90L3QwMDQwLXBhcnNlLW9wdGlvbnMuc2gKQEAgLTEyLDEyICsxMiwxNCBAQAogCiAgICAgLWIsIC0tYm9vbGVhbiAgICAgICAgIGdldCBhIGJvb2xlYW4KICAgICAtNCwgLS1vcjQgICAgICAgICAgICAgYml0d2lzZS1vciBib29sZWFuIHdpdGggLi4uMDEwMAorICAgIC0tbmVnLW9yNCAgICAgICAgICAgICBzYW1lIGFzIC0tbm8tb3I0CiAKICAgICAtaSwgLS1pbnRlZ2VyIDxuPiAgICAgZ2V0IGEgaW50ZWdlcgogICAgIC1qIDxuPiAgICAgICAgICAgICAgICBnZXQgYSBpbnRlZ2VyLCB0b28KICAgICAtLXNldDIzICAgICAgICAgICAgICAgc2V0IGludGVnZXIgdG8gMjMKICAgICAtdCA8dGltZT4gICAgICAgICAgICAgZ2V0IHRpbWVzdGFtcCBvZiA8dGltZT4KICAgICAtTCwgLS1sZW5ndGggPHN0cj4gICAgZ2V0IGxlbmd0aCBvZiA8c3RyPgorICAgIC1GLCAtLWZpbGUgPEZJTEU+ICAgICBzZXQgZmlsZSB0byA8RklMRT4KIAogU3RyaW5nIG9wdGlvbnMKICAgICAtcywgLS1zdHJpbmcgPHN0cmluZz4KQEAgLTI5LDYgKzMxLDggQEAKIAogTWFnaWMgYXJndW1lbnRzCiAgICAgLS1xdXV4ICAgICAgICAgICAgICAgIG1lYW5zIC0tcXV1eAorICAgIC1OVU0gICAgICAgICAgICAgICAgICBzZXQgaW50ZWdlciB0byBOVU0KKyAgICArICAgICAgICAgICAgICAgICAgICAgc2FtZSBhcyAtYgogCiBTdGFuZGFyZCBvcHRpb25zCiAgICAgLS1hYmJyZXZbPTxuPl0gICAgICAgIHVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzCkBAIC01MywxMCArNTcsMTIgQEAKIHZlcmJvc2U6IDIKIHF1aWV0OiBubwogZHJ5IHJ1bjogeWVzCitmaWxlOiBwcmVmaXgvbXkuZmlsZQogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IG9wdGlvbnMnICcKLQl0ZXN0LXBhcnNlLW9wdGlvbnMgLXMxMjMgLWIgLWkgMTcyOSAtYiAtdnYgLW4gPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QtcGFyc2Utb3B0aW9ucyAtczEyMyAtYiAtaSAxNzI5IC1iIC12diAtbiAtRiBteS5maWxlIFwKKwk+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgogCXRlc3QgISAtcyBvdXRwdXQuZXJyCiAnCkBAIC03MCwxMSArNzYsMTIgQEAKIHZlcmJvc2U6IDIKIHF1aWV0OiBubwogZHJ5IHJ1bjogbm8KK2ZpbGU6IHByZWZpeC9maS5sZQogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgb3B0aW9ucycgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtLWJvb2xlYW4gLS1pbnRlZ2VyIDE3MjkgLS1ib29sZWFuIC0tc3RyaW5nMj0zMjEgXAotCQktLXZlcmJvc2UgLS12ZXJib3NlIC0tbm8tZHJ5LXJ1biAtLWFiYnJldj0xMCBcCisJCS0tdmVyYm9zZSAtLXZlcmJvc2UgLS1uby1kcnktcnVuIC0tYWJicmV2PTEwIC0tZmlsZSBmaS5sZVwKIAkJPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgogCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dApAQCAtODQsNiArOTEsOCBAQAogCXRlc3QtcGFyc2Utb3B0aW9ucyAtczsKIAl0ZXN0ICQ/ID0gMTI5ICYmCiAJdGVzdC1wYXJzZS1vcHRpb25zIC0tc3RyaW5nOworCXRlc3QgJD8gPSAxMjkgJiYKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1maWxlOwogCXRlc3QgJD8gPSAxMjkKICcKIApAQCAtOTYsNiArMTA1LDcgQEAKIHZlcmJvc2U6IDAKIHF1aWV0OiBubwogZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQogYXJnIDAwOiBhMQogYXJnIDAxOiBiMQogYXJnIDAyOiAtLWJvb2xlYW4KQEAgLTExNyw2ICsxMjcsNyBAQAogdmVyYm9zZTogMAogcXVpZXQ6IG5vCiBkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndW5hbWJpZ3VvdXNseSBhYmJyZXZpYXRlZCBvcHRpb24nICcKQEAgLTE0NSw2ICsxNTYsNyBAQAogdmVyYm9zZTogMAogcXVpZXQ6IG5vCiBkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uIGFtYmlndW91cyBvcHRpb24gKGFmdGVyIHR3byBvcHRpb25zIGl0IGFiYnJldmlhdGVzKScgJwpAQCAtMTcyLDYgKzE4NCw3IEBACiB2ZXJib3NlOiAwCiBxdWlldDogbm8KIGRyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKIGFyZyAwMDogLS1xdXV4CiBFT0YKIApAQCAtMTkwLDYgKzIwMyw3IEBACiB2ZXJib3NlOiAwCiBxdWlldDogeWVzCiBkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCiBhcmcgMDA6IGZvbwogRU9GCiAKQEAgLTIxMCw2ICsyMjQsNyBAQAogdmVyYm9zZTogMAogcXVpZXQ6IG5vCiBkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NBTExCQUNLKCkgYW5kIE9QVF9CSVQoKSB3b3JrJyAnCkBAIC0yMzcsNiArMjUyLDcgQEAKIHZlcmJvc2U6IDAKIHF1aWV0OiBubwogZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CSVQoKSBhbmQgT1BUX1NFVF9JTlQoKSB3b3JrJyAnCkBAIC0yNDUsNyArMjYxLDU4IEBACiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCi0jIC0tb3I0Ci0jIC0tbm8tb3I0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTkVHQklUKCkgYW5kIE9QVF9TRVRfSU5UKCkgd29yaycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtLXNldDIzIC1iYmJiYiAtLW5lZy1vcjQgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK2Jvb2xlYW46IDYKK2ludGVnZXI6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JJVCgpIHdvcmtzJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC1iYiAtLW9yNCA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9ORUdCSVQoKSB3b3JrcycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtYmIgLS1uby1uZWctb3I0ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0xFQU4oKSB3aXRoIFBBUlNFX09QVF9OT0RBU0ggd29ya3MnICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgKyArICsgKyArICsgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK2Jvb2xlYW46IDAKK2ludGVnZXI6IDEyMzQ1Cit0aW1lc3RhbXA6IDAKK3N0cmluZzogKG5vdCBzZXQpCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9OVU1CRVJfQ0FMTEJBQ0soKSB3b3JrcycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtMTIzNDUgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMTAtbWt0cmVlLnNoIGIvdC90MTAxMC1ta3RyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTk1NmUzYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMTAtbWt0cmVlLnNoCkBAIC0wLDAgKzEsNzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWt0cmVlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGQgaW4gYSBhLiBhMAorCWRvCisJCW1rZGlyICIkZCIgJiYgZWNobyAiJGQvb25lIiA+IiRkL29uZSIgJiYKKwkJZ2l0IGFkZCAiJGQiCisJZG9uZSAmJgorCWVjaG8gemVybyA+b25lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWluZm8tb25seSBvbmUgJiYKKwlnaXQgd3JpdGUtdHJlZSAtLW1pc3Npbmctb2sgPnRyZWUubWlzc2luZyAmJgorCWdpdCBscy10cmVlICQoY2F0IHRyZWUubWlzc2luZykgPnRvcC5taXNzaW5nICYmCisJZ2l0IGxzLXRyZWUgLXIgJChjYXQgdHJlZS5taXNzaW5nKSA+YWxsLm1pc3NpbmcgJiYKKwllY2hvIG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgd3JpdGUtdHJlZSA+dHJlZSAmJgorCWdpdCBscy10cmVlICQoY2F0IHRyZWUpID50b3AgJiYKKwlnaXQgbHMtdHJlZSAtciAkKGNhdCB0cmVlKSA+YWxsICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtcSAtbSBvbmUgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICRIIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLXEgLW0gdHdvICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+dHJlZS53aXRoc3ViICYmCisJZ2l0IGxzLXRyZWUgSEVBRCA+dG9wLndpdGhzdWIgJiYKKwlnaXQgbHMtdHJlZSAtciBIRUFEID5hbGwud2l0aHN1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIHBpcGVkIHRvIG1rdHJlZSAoMSknICcKKwlnaXQgbWt0cmVlIDx0b3AgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRyZWUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgcGlwZWQgdG8gbWt0cmVlICgyKScgJworCWdpdCBta3RyZWUgPHRvcC53aXRoc3ViID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlLndpdGhzdWIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgb3V0cHV0IGluIHdyb25nIG9yZGVyIGdpdmVuIHRvIG1rdHJlZSAoMSknICcKKwlwZXJsIC1lICJwcmludCByZXZlcnNlIDw+IiA8dG9wIHwKKwlnaXQgbWt0cmVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIG91dHB1dCBpbiB3cm9uZyBvcmRlciBnaXZlbiB0byBta3RyZWUgKDIpJyAnCisJcGVybCAtZSAicHJpbnQgcmV2ZXJzZSA8PiIgPHRvcC53aXRoc3ViIHwKKwlnaXQgbWt0cmVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlLndpdGhzdWIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IG1pc3Npbmcgb2JqZWN0IHdpdGggLS1taXNzaW5nJyAnCisJZ2l0IG1rdHJlZSAtLW1pc3NpbmcgPHRvcC5taXNzaW5nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlLm1pc3NpbmcgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21rdHJlZSByZWFkcyBscy10cmVlIC1yIG91dHB1dCAoMSknICcKKwlnaXQgbWt0cmVlIDxhbGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRyZWUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21rdHJlZSByZWFkcyBscy10cmVlIC1yIG91dHB1dCAoMiknICcKKwlnaXQgbWt0cmVlIDxhbGwud2l0aHN1YiA+YWN0dWFsICYmCisJdGVzdF9jbXAgdHJlZS53aXRoc3ViIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMDAtcmVwby1jb25maWcuc2ggYi90L3QxMzAwLXJlcG8tY29uZmlnLnNoCmluZGV4IDkxY2JkNTUuLjgzYjcyOTQgMTAwNzU1Ci0tLSBhL3QvdDEzMDAtcmVwby1jb25maWcuc2gKKysrIGIvdC90MTMwMC1yZXBvLWNvbmZpZy5zaApAQCAtNDYwLDYgKzQ2MCwyOCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIHN1Y2NlZWRlZCIgInRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZyIKIAogY2F0ID4+IC5naXQvY29uZmlnIDw8IEVPRgorW2JyYW5jaCAidmllciJdIHogPSAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIGEgc2VjdGlvbiB3aXRoIGEgdmFyIG9uIHRoZSBzYW1lIGxpbmUiIFwKKwknZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC52aWVyIGJyYW5jaC56d2VpJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisjIEhhbGxvCisJI0JlbGxvCitbYnJhbmNoICJ6d2VpIl0KKwl4ID0gMQorW2JyYW5jaCAiendlaSJdCisJeSA9IDEKK1ticmFuY2ggImRyZWkiXQord2VpcmQKK1ticmFuY2ggInp3ZWkiXQorCXogPSAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIHN1Y2NlZWRlZCIgInRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZyIKKworY2F0ID4+IC5naXQvY29uZmlnIDw8IEVPRgogICBbYnJhbmNoICJ6d2VpIl0gYSA9IDEgW2JyYW5jaCAidmllciJdCiBFT0YKIApkaWZmIC0tZ2l0IGEvdC90MTUwMi1yZXYtcGFyc2UtcGFyc2VvcHQuc2ggYi90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaAppbmRleCA5OTcwMDJkLi5lNTA0MDU4IDEwMDc1NQotLS0gYS90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaAorKysgYi90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaApAQCAtMjAsOCArMjAsNyBAQAogCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IGhlbHAgb3V0cHV0JyAnCi0JZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tIC1oIDI+IG91dHB1dC5lcnIgPDxFT0YKK2NhdCA+IG9wdGlvbnNwZWMgPDwgRU9GCiBzb21lLWNvbW1hbmQgW29wdGlvbnNdIDxhcmdzPi4uLgogCiBzb21lLWNvbW1hbmQgZG9lcyBmb28gYW5kIGJhciEKQEAgLTM3LDcgKzM2LDQ3IEBACiBFeHRyYXMKIGV4dHJhMSAgICBsaW5lIGFib3ZlIHVzZWQgdG8gY2F1c2UgYSBzZWdmYXVsdCBidXQgbm8gbG9uZ2VyIGRvZXMKIEVPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgaGVscCBvdXRwdXQnICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLWggMj4gb3V0cHV0LmVyciA8IG9wdGlvbnNwZWMKIAl0ZXN0X2NtcCBleHBlY3QuZXJyIG91dHB1dC5lcnIKICcKIAorY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS1iYXIgJ2hhbScgLS0gJ2FyZycKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQnICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLS1mb28gLS1iYXI9aGFtIGFyZyA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCB3aXRoIG1peGVkIG9wdGlvbnMgYW5kIGFyZ3VtZW50cycgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtLWZvbyBhcmcgLS1iYXI9aGFtIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS0gJ2FyZycgJy0tYmFyPWhhbScKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgd2l0aCAtLScgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtLWZvbyAtLSBhcmcgLS1iYXI9aGFtIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0tc3RvcC1hdC1ub24tb3B0aW9uJyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tc3RvcC1hdC1ub24tb3B0aW9uIC0tIC0tZm9vIGFyZyAtLWJhcj1oYW0gPCBvcHRpb25zcGVjID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK3NldCAtLSAtLWZvbyAtLSAnLS0nICdhcmcnICctLWJhcj1oYW0nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0ta2VlcC1kYXNoZGFzaCcgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLWtlZXAtZGFzaGRhc2ggLS0gLS1mb28gLS0gYXJnIC0tYmFyPWhhbSA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAwMC1jaGVja291dC1jYWNoZS1jbGFzaC5zaCBiL3QvdDIwMDAtY2hlY2tvdXQtY2FjaGUtY2xhc2guc2gKaW5kZXggZjdlMWE3My4uZGUzZWRiNSAxMDA3NTUKLS0tIGEvdC90MjAwMC1jaGVja291dC1jYWNoZS1jbGFzaC5zaAorKysgYi90L3QyMDAwLWNoZWNrb3V0LWNhY2hlLWNsYXNoLnNoCkBAIC00OCw0ICs0OCwxMyBAQAogICAgICdnaXQgY2hlY2tvdXQtaW5kZXggY29uZmxpY3RpbmcgcGF0aHMuJyBcCiAgICAgJ3Rlc3QgLWYgcGF0aDAgJiYgdGVzdCAtZCBwYXRoMSAmJiB0ZXN0IC1mIHBhdGgxL2ZpbGUxJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjaGVja291dC1pbmRleCAtZiB0d2ljZSB3aXRoIC0tcHJlZml4JyAnCisJbWtkaXIgLXAgdGFyL2dldCAmJgorCWxuIC1zIHRhci9nZXQgdGhlcmUgJiYKKwllY2hvIGZpcnN0ICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1hIC1mIC0tcHJlZml4PXRoZXJlLyAmJgorCWVjaG8gc2Vjb25kICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1hIC1mIC0tcHJlZml4PXRoZXJlLworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDAtcmViYXNlLnNoIGIvdC90MzQwMC1yZWJhc2Uuc2gKaW5kZXggNmUzOTFhMy4uYzVjMjljYyAxMDA3NTUKLS0tIGEvdC90MzQwMC1yZWJhc2Uuc2gKKysrIGIvdC90MzQwMC1yZWJhc2Uuc2gKQEAgLTQxLDkgKzQxLDQwIEBACiAgICAgIGdpdCB0YWcgdG9waWMKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9uIGRpcnR5IHdvcmt0cmVlJyAnCisgICAgIGVjaG8gZGlydHkgPj4gQSAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9uIGRpcnR5IGNhY2hlJyAnCisgICAgIGdpdCBhZGQgQSAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIG1hc3RlcicKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGFnYWluc3QgbWFzdGVyJyAnCisgICAgIGdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgogICAgICBnaXQgcmViYXNlIG1hc3RlcicKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGFnYWluc3QgbWFzdGVyIHR3aWNlJyAnCisgICAgIGdpdCByZWJhc2UgbWFzdGVyID5vdXQgJiYKKyAgICAgZ3JlcCAiQ3VycmVudCBicmFuY2ggbXktdG9waWMtYnJhbmNoIGlzIHVwIHRvIGRhdGUiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXIgdHdpY2Ugd2l0aCAtLWZvcmNlJyAnCisgICAgIGdpdCByZWJhc2UgLS1mb3JjZS1yZWJhc2UgbWFzdGVyID5vdXQgJiYKKyAgICAgZ3JlcCAiQ3VycmVudCBicmFuY2ggbXktdG9waWMtYnJhbmNoIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXIgdHdpY2UgZnJvbSBhbm90aGVyIGJyYW5jaCcgJworICAgICBnaXQgY2hlY2tvdXQgbXktdG9waWMtYnJhbmNoXiAmJgorICAgICBnaXQgcmViYXNlIG1hc3RlciBteS10b3BpYy1icmFuY2ggPm91dCAmJgorICAgICBncmVwICJDdXJyZW50IGJyYW5jaCBteS10b3BpYy1icmFuY2ggaXMgdXAgdG8gZGF0ZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBmYXN0LWZvcndhcmQgdG8gbWFzdGVyJyAnCisgICAgIGdpdCBjaGVja291dCBteS10b3BpYy1icmFuY2heICYmCisgICAgIGdpdCByZWJhc2UgbXktdG9waWMtYnJhbmNoID5vdXQgJiYKKyAgICAgZ3JlcCAiRmFzdC1mb3J3YXJkZWQgSEVBRCB0byBteS10b3BpYy1icmFuY2giIG91dAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndGhlIHJlYmFzZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGRlc3Ryb3llZCBhdXRob3IgaW5mb3JtYXRpb24nIFwKICAgICAnISAoZ2l0IGxvZyB8IGdyZXAgIkF1dGhvcjoiIHwgZ3JlcCAiPD4iKScKQEAgLTk1LDQgKzEyNiwxMSBAQAogICAgICBncmVwICJVbnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGUgLkIuIHdvdWxkIGJlIG92ZXJ3cml0dGVuIiBvdXRwdXQuZXJyCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtcSBpcyBxdWlldCcgJworICAgICBybSBCICYmCisgICAgIGdpdCBjaGVja291dCAtYiBxdWlldCB0b3BpYyAmJgorICAgICBnaXQgcmViYXNlIC1xIG1hc3RlciA+IG91dHB1dC5vdXQgMj4mMSAmJgorICAgICB0ZXN0ICEgLXMgb3V0cHV0Lm91dAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoIGIvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKaW5kZXggYzMyZmY2Ni4uYTk3MzYyOCAxMDA3NTUKLS0tIGEvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKKysrIGIvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKQEAgLTExOSwxMSArMTE5LDExIEBACiBFT0YKIAogY2F0ID4gZXhwZWN0MiA8PCBFT0YKLTw8PDw8PDwgSEVBRDpmaWxlMQorPDw8PDw8PCBIRUFECiAyCiA9PT09PT09CiAzCi0+Pj4+Pj4+IGI3Y2E5NzYuLi4gRzpmaWxlMQorPj4+Pj4+PiBiN2NhOTc2Li4uIEcKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdG9wIG9uIGNvbmZsaWN0aW5nIHBpY2snICcKZGlmZiAtLWdpdCBhL3QvdDM0MDktcmViYXNlLXByZXNlcnZlLW1lcmdlcy5zaCBiL3QvdDM0MDktcmViYXNlLXByZXNlcnZlLW1lcmdlcy5zaAppbmRleCBlNmM4MzI3Li4yOTdkMTY1IDEwMDc1NQotLS0gYS90L3QzNDA5LXJlYmFzZS1wcmVzZXJ2ZS1tZXJnZXMuc2gKKysrIGIvdC90MzQwOS1yZWJhc2UtcHJlc2VydmUtbWVyZ2VzLnNoCkBAIC03MSw3ICs3MSw3IEBACiAJZ2l0IGZldGNoICYmCiAJZ2l0IHJlYmFzZSAtcCBvcmlnaW4vdG9waWMgJiYKIAl0ZXN0IDEgPSAkKGdpdCByZXYtbGlzdCAtLWFsbCAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAiTW9kaWZ5IEEiIHwgd2MgLWwpICYmCi0JdGVzdCAxID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgIk1lcmdlIGNvbW1pdCIgfCB3YyAtbCkKKwl0ZXN0IDEgPSAkKGdpdCByZXYtbGlzdCAtLWFsbCAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAiTWVyZ2UgcmVtb3RlIGJyYW5jaCAiIHwgd2MgLWwpCiAJKQogJwogCmRpZmYgLS1naXQgYS90L3QzNDE0LXJlYmFzZS1wcmVzZXJ2ZS1vbnRvLnNoIGIvdC90MzQxNC1yZWJhc2UtcHJlc2VydmUtb250by5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MDAxOWVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxNC1yZWJhc2UtcHJlc2VydmUtb250by5zaApAQCAtMCwwICsxLDgwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEdyZWcgUHJpY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtcCBzaG91bGQgcmVzcGVjdCAtLW9udG8KKworSW4gYSByZWJhc2Ugd2l0aCAtLW9udG8sIHdlIHNob3VsZCByZXdyaXRlIGFsbCB0aGUgY29tbWl0cyB0aGF0CithcmVuJyInIid0IG9uIHRvcCBvZiAkT05UTywgZXZlbiBpZiB0aGV5IGFyZSBvbiB0b3Agb2YgJFVQU1RSRUFNLgorJworLiAuL3Rlc3QtbGliLnNoCisKKy4gLi4vbGliLXJlYmFzZS5zaAorCisjIFNldCB1cCBicmFuY2hlcyBsaWtlIHRoaXM6CisjIEExLS0tQjEtLS1FMS0tLUYxLS0tRzEKKyMgIFwgICAgXCAgICAgICAgICAgICAvCisjICAgXCAgICBcLS1DMS0tLUQxLS0vCisjICAgIEgxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgQTEgJiYKKwl0ZXN0X2NvbW1pdCBCMSAmJgorCXRlc3RfY29tbWl0IEMxICYmCisJdGVzdF9jb21taXQgRDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEIxICYmCisJdGVzdF9jb21taXQgRTEgJiYKKwl0ZXN0X2NvbW1pdCBGMSAmJgorCXRlc3RfbWVyZ2UgRzEgRDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEExICYmCisJdGVzdF9jb21taXQgSDEKKycKKworIyBOb3cgcmViYXNlIG1lcmdlIEcxIGZyb20gYm90aCBicmFuY2hlcycgYmFzZSBCMSwgYm90aCBzaG91bGQgbW92ZToKKyMgQTEtLS1CMS0tLUUxLS0tRjEtLS1HMQorIyAgXCAgICBcICAgICAgICAgICAgIC8KKyMgICBcICAgIFwtLUMxLS0tRDEtLS8KKyMgICAgXAorIyAgICAgSDEtLS1FMi0tLUYyLS0tRzIKKyMgICAgICBcICAgICAgICAgICAgIC8KKyMgICAgICAgXC0tQzItLS1EMi0tLworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgZnJvbSBCMSBvbnRvIEgxJyAnCisJZ2l0IGNoZWNrb3V0IEcxICYmCisJZ2l0IHJlYmFzZSAtcCAtLW9udG8gSDEgQjEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xXjFeMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMl4xXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSDEpIgorJworCisjIE9uIHRoZSBvdGhlciBoYW5kIGlmIHJlYmFzZSBmcm9tIEUxIHdoaWNoIGlzIHdpdGhpbiBvbmUgYnJhbmNoLAorIyB0aGVuIHRoZSBvdGhlciBicmFuY2ggc3RheXM6CisjIEExLS0tQjEtLS1FMS0tLUYxLS0tRzEKKyMgIFwgICAgXCAgICAgICAgICAgICAvCisjICAgXCAgICBcLS1DMS0tLUQxLS0vCisjICAgIFwgICAgICAgICAgICAgXAorIyAgICAgSDEtLS0tLUYzLS0tLS1HMworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgZnJvbSBFMSBvbnRvIEgxJyAnCisJZ2l0IGNoZWNrb3V0IEcxICYmCisJZ2l0IHJlYmFzZSAtcCAtLW9udG8gSDEgRTEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSDEpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2UgRDEpIgorJworCisjIEFuZCB0aGUgc2FtZSBpZiB3ZSByZWJhc2UgZnJvbSBhIGNvbW1pdCBpbiB0aGUgc2Vjb25kLXBhcmVudCBicmFuY2guCisjIEExLS0tQjEtLS1FMS0tLUYxLS0tLUcxCisjICBcICAgIFwgICAgICAgICAgXCAgIC8KKyMgICBcICAgIFwtLUMxLS0tRDEtXC0vCisjICAgIFwgICAgICAgICAgICAgICBcCisjICAgICBIMS0tLS0tLUQzLS0tLS0tRzQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGZyb20gQzEgb250byBIMScgJworCWdpdCBjaGVja291dCBHMSAmJgorCWdpdCByZXYtbGlzdCAtLWZpcnN0LXBhcmVudCAtLXByZXR0eT1vbmVsaW5lIEMxLi5HMSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIEgxIEMxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMl4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEgxKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEYxKSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNzAwLWFkZC5zaCBiL3QvdDM3MDAtYWRkLnNoCmluZGV4IGZlOTNjZTUuLjg1ZWIwZmIgMTAwNzU1Ci0tLSBhL3QvdDM3MDAtYWRkLnNoCisrKyBiL3QvdDM3MDAtYWRkLnNoCkBAIC0yNDMsNCArMjQzLDE2IEBACiAJISAoIGdpdCBscy1maWxlcyBmb29iYXIgfCBncmVwIGZvb2JhciApCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgdG8gcmVzb2x2ZSBjb25mbGljdHMgb24gb3RoZXJ3aXNlIGlnbm9yZWQgcGF0aCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSA6MS8yL2EpICYmCisJKAorCQllY2hvICIxMDA2NDQgJEggMQl0cmFjay10aGlzIgorCQllY2hvICIxMDA2NDQgJEggMwl0cmFjay10aGlzIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWVjaG8gdHJhY2stdGhpcyA+Pi5naXRpZ25vcmUgJiYKKwllY2hvIHJlc29sdmVkID50cmFjay10aGlzICYmCisJZ2l0IGFkZCB0cmFjay10aGlzCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMS1hZGQtaW50ZXJhY3RpdmUuc2ggYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaAppbmRleCBmZDJhNTVhLi42MmZkNjVlIDEwMDc1NQotLS0gYS90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaAorKysgYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaApAQCAtMTYzLDYgKzE2MywxNyBAQAogCWdpdCBkaWZmICAgICAgICAgIGZpbGUgfCBncmVwICIrY29udGVudCIKICcKIAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdzdGFnZSBtb2RlIGFuZCBodW5rJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwljaG1vZCAreCBmaWxlICYmCisJcHJpbnRmICJ5XFxueVxcbiIgfCBnaXQgYWRkIC1wICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgZmlsZSB8IGdyZXAgIm5ldyBtb2RlIiAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIGZpbGUgfCBncmVwICIrY29udGVudCIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIGZpbGUpIgorJworCiAjIGVuZCBvZiB0ZXN0cyBkaXNhYmxlZCB3aGVuIGZpbGVtb2RlIGlzIG5vdCB1c2FibGUKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYWdhaW4nICcKZGlmZiAtLWdpdCBhL3QvdDM3MDItYWRkLWVkaXQuc2ggYi90L3QzNzAyLWFkZC1lZGl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlZTQ3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNzAyLWFkZC1lZGl0LnNoCkBAIC0wLDAgKzEsMTIxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nYWRkIC1lIGJhc2ljIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKKworY2F0ID4gZmlsZSA8PCBFT0YKK0xPLCBwcmFpc2Ugb2YgdGhlIHByb3dlc3Mgb2YgcGVvcGxlLWtpbmdzCitvZiBzcGVhci1hcm1lZCBEYW5lcywgaW4gZGF5cyBsb25nIHNwZWQsCit3ZSBoYXZlIGhlYXJkLCBhbmQgd2hhdCBob25vciB0aGUgYXRoZWxpbmdzIHdvbiEKK09mdCBTY3lsZCB0aGUgU2NlZmluZyBmcm9tIHNxdWFkcm9uZWQgZm9lcywKK2Zyb20gbWFueSBhIHRyaWJlLCB0aGUgbWVhZC1iZW5jaCB0b3JlLAorYXdpbmcgdGhlIGVhcmxzLiBTaW5jZSBlcnN0IGhlIGxheQorZnJpZW5kbGVzcywgYSBmb3VuZGxpbmcsIGZhdGUgcmVwYWlkIGhpbToKK2ZvciBoZSB3YXhlZCB1bmRlciB3ZWxraW4sIGluIHdlYWx0aCBoZSB0aHJvdmUsCit0aWxsIGJlZm9yZSBoaW0gdGhlIGZvbGssIGJvdGggZmFyIGFuZCBuZWFyLAord2hvIGhvdXNlIGJ5IHRoZSB3aGFsZS1wYXRoLCBoZWFyZCBoaXMgbWFuZGF0ZSwKK2dhdmUgaGltIGdpZnRzOiAgYSBnb29kIGtpbmcgaGUhCitFT0YKKworY2F0ID4gc2Vjb25kLXBhcnQgPDwgRU9GCitUbyBoaW0gYW4gaGVpciB3YXMgYWZ0ZXJ3YXJkIGJvcm4sCithIHNvbiBpbiBoaXMgaGFsbHMsIHdob20gaGVhdmVuIHNlbnQKK3RvIGZhdm9yIHRoZSBmb2xrLCBmZWVsaW5nIHRoZWlyIHdvZQordGhhdCBlcnN0IHRoZXkgaGFkIGxhY2tlZCBhbiBlYXJsIGZvciBsZWFkZXIKK3NvIGxvbmcgYSB3aGlsZTsgdGhlIExvcmQgZW5kb3dlZCBoaW0sCit0aGUgV2llbGRlciBvZiBXb25kZXIsIHdpdGggd29ybGQncyByZW5vd24uCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCBmaWxlCisKKycKKworY2F0ID4gZXhwZWN0ZWQtcGF0Y2ggPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IGI5ODM0YjUuLjkwMjBhY2IgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwxMSArMSw2IEBACistTE8sIHByYWlzZSBvZiB0aGUgcHJvd2VzcyBvZiBwZW9wbGUta2luZ3MKKy1vZiBzcGVhci1hcm1lZCBEYW5lcywgaW4gZGF5cyBsb25nIHNwZWQsCistd2UgaGF2ZSBoZWFyZCwgYW5kIHdoYXQgaG9ub3IgdGhlIGF0aGVsaW5ncyB3b24hCistT2Z0IFNjeWxkIHRoZSBTY2VmaW5nIGZyb20gc3F1YWRyb25lZCBmb2VzLAorLWZyb20gbWFueSBhIHRyaWJlLCB0aGUgbWVhZC1iZW5jaCB0b3JlLAorLWF3aW5nIHRoZSBlYXJscy4gU2luY2UgZXJzdCBoZSBsYXkKKy1mcmllbmRsZXNzLCBhIGZvdW5kbGluZywgZmF0ZSByZXBhaWQgaGltOgorLWZvciBoZSB3YXhlZCB1bmRlciB3ZWxraW4sIGluIHdlYWx0aCBoZSB0aHJvdmUsCistdGlsbCBiZWZvcmUgaGltIHRoZSBmb2xrLCBib3RoIGZhciBhbmQgbmVhciwKKy13aG8gaG91c2UgYnkgdGhlIHdoYWxlLXBhdGgsIGhlYXJkIGhpcyBtYW5kYXRlLAorLWdhdmUgaGltIGdpZnRzOiAgYSBnb29kIGtpbmcgaGUhCisrVG8gaGltIGFuIGhlaXIgd2FzIGFmdGVyd2FyZCBib3JuLAorK2Egc29uIGluIGhpcyBoYWxscywgd2hvbSBoZWF2ZW4gc2VudAorK3RvIGZhdm9yIHRoZSBmb2xrLCBmZWVsaW5nIHRoZWlyIHdvZQorK3RoYXQgZXJzdCB0aGV5IGhhZCBsYWNrZWQgYW4gZWFybCBmb3IgbGVhZGVyCisrc28gbG9uZyBhIHdoaWxlOyB0aGUgTG9yZCBlbmRvd2VkIGhpbSwKKyt0aGUgV2llbGRlciBvZiBXb25kZXIsIHdpdGggd29ybGQncyByZW5vd24uCitFT0YKKworY2F0ID4gcGF0Y2ggPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IGI5ODM0YjUuLmVmNmU5NGMgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMywxICszLDMzMyBAQCBvZiBzcGVhci1hcm1lZCBEYW5lcywgaW4gZGF5cyBsb25nIHNwZWQsCisgd2UgaGF2ZSBoZWFyZCwgYW5kIHdoYXQgaG9ub3IgdGhlIGF0aGVsaW5ncyB3b24hCisrCisgT2Z0IFNjeWxkIHRoZSBTY2VmaW5nIGZyb20gc3F1YWRyb25lZCBmb2VzLAorQEAgLTIsNyArMSw1IEBAIGF3aW5nIHRoZSBlYXJscy4gU2luY2UgZXJzdCBoZSBsYXkKKyBmcmllbmRsZXNzLCBhIGZvdW5kbGluZywgZmF0ZSByZXBhaWQgaGltOgorKworIGZvciBoZSB3YXhlZCB1bmRlciB3ZWxraW4sIGluIHdlYWx0aCBoZSB0aHJvdmUsCitFT0YKKworY2F0ID4gZXhwZWN0ZWQgPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IGI5ODM0YjUuLmVmNmU5NGMgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwxMCArMSwxMiBAQAorIExPLCBwcmFpc2Ugb2YgdGhlIHByb3dlc3Mgb2YgcGVvcGxlLWtpbmdzCisgb2Ygc3BlYXItYXJtZWQgRGFuZXMsIGluIGRheXMgbG9uZyBzcGVkLAorIHdlIGhhdmUgaGVhcmQsIGFuZCB3aGF0IGhvbm9yIHRoZSBhdGhlbGluZ3Mgd29uIQorKworIE9mdCBTY3lsZCB0aGUgU2NlZmluZyBmcm9tIHNxdWFkcm9uZWQgZm9lcywKKyBmcm9tIG1hbnkgYSB0cmliZSwgdGhlIG1lYWQtYmVuY2ggdG9yZSwKKyBhd2luZyB0aGUgZWFybHMuIFNpbmNlIGVyc3QgaGUgbGF5CisgZnJpZW5kbGVzcywgYSBmb3VuZGxpbmcsIGZhdGUgcmVwYWlkIGhpbToKKysKKyBmb3IgaGUgd2F4ZWQgdW5kZXIgd2Vsa2luLCBpbiB3ZWFsdGggaGUgdGhyb3ZlLAorIHRpbGwgYmVmb3JlIGhpbSB0aGUgZm9saywgYm90aCBmYXIgYW5kIG5lYXIsCisgd2hvIGhvdXNlIGJ5IHRoZSB3aGFsZS1wYXRoLCBoZWFyZCBoaXMgbWFuZGF0ZSwKK0VPRgorCitlY2hvICIjISRTSEVMTF9QQVRIIiA+ZmFrZS1lZGl0b3Iuc2gKK2NhdCA+PiBmYWtlLWVkaXRvci5zaCA8PFxFT0YKK212IC1mICIkMSIgb3JpZy1wYXRjaCAmJgorbXYgLWYgcGF0Y2ggIiQxIgorRU9GCisKK3Rlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2Zha2UtZWRpdG9yLnNoIgorY2htb2QgYSt4IGZha2UtZWRpdG9yLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtZScgJworCisJY3Agc2Vjb25kLXBhcnQgZmlsZSAmJgorCWdpdCBhZGQgLWUgJiYKKwl0ZXN0X2NtcCBzZWNvbmQtcGFydCBmaWxlICYmCisJdGVzdF9jbXAgb3JpZy1wYXRjaCBleHBlY3RlZC1wYXRjaCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID4gb3V0ICYmCisJdGVzdF9jbXAgb3V0IGV4cGVjdGVkCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoIGIvdC90MzkwMC1pMThuLWNvbW1pdC5zaAppbmRleCA3ODRjMzFhLi4yNTZjNGM5IDEwMDc1NQotLS0gYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoCisrKyBiL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKQEAgLTksNyArOSwxNSBAQAogCiBjb21wYXJlX3dpdGggKCkgewogCWdpdCBzaG93IC1zICQxIHwgc2VkIC1lICcxLC9eJC9kJyAtZSAncy9eICAgIC8vJyA+Y3VycmVudCAmJgotCXRlc3RfY21wIGN1cnJlbnQgIiQyIgorCWNhc2UgIiQzIiBpbgorCScnKQorCQl0ZXN0X2NtcCAiJDIiIGN1cnJlbnQgOzsKKwk/KikKKwkJaWNvbnYgLWYgIiQzIiAtdCBVVEYtOCA+Y3VycmVudC51dGY4IDxjdXJyZW50ICYmCisJCWljb252IC1mICIkMyIgLXQgVVRGLTggPmV4cGVjdC51dGY4IDwiJDIiICYmCisJCXRlc3RfY21wIGV4cGVjdC51dGY4IGN1cnJlbnQudXRmOAorCQk7OworCWVzYWMKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCkBAIC0yNiw3ICszNCw3IEBACiAJdGVzdCB6ID0gInokRSIKICcKIAotZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNldHVwIiAnCiAJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkSCAmJgpAQCAtMzYsNyArNDQsNyBAQAogCScKIGRvbmUKIAotZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrIGVuY29kaW5nIGhlYWRlciBmb3IgJEgiICcKIAkJRT0kKGdpdCBjYXQtZmlsZSBjb21taXQgJyRIJyB8IHNlZCAtbmUgInMvXmVuY29kaW5nIC8vcCIpICYmCkBAIC01MywxNCArNjEsMTQgQEAKIAllbHNlCiAJCXRlc3QgeiA9ICJ6JFoiCiAJZmkgJiYKLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgdXRmLTgKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTgKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnSVNPLTg4NTktMSBzaG91bGQgYmUgc2hvd24gaW4gVVRGLTggbm93JyAnCi0JY29tcGFyZV93aXRoIElTTy04ODU5LTEgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0lTTzg4NTktMSBzaG91bGQgYmUgc2hvd24gaW4gVVRGLTggbm93JyAnCisJY29tcGFyZV93aXRoIElTTzg4NTktMSAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8xLVVURi04LnR4dAogJwogCi1mb3IgSCBpbiBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gZXVjSlAgSVNPLTIwMjItSlAKIGRvCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdyIgJwogCQljb21wYXJlX3dpdGggJyRIJyAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8yLVVURi04LnR4dApAQCAtNzgsNyArODYsNyBAQAogCWZpCiAnCiAKLWZvciBIIGluIElTTy04ODU5LTEgRVVDSlAgSVNPLTIwMjItSlAKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAogZG8KIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzaG91bGQgYmUgc2hvd24gaW4gaXRzZWxmIG5vdyIgJwogCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJyRIJyAmJgpAQCAtODcsMzIgKzk1LDM4IEBACiBkb25lCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyB0byB0d2VhayBjdXN0b21pemF0aW9uJyAnCi0JZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIHV0Zi04CisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04CiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0lTTy04ODU5LTEgc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdycgJwotCWNvbXBhcmVfd2l0aCBJU08tODg1OS0xICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdJU084ODU5LTEgc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdycgJworCWNvbXBhcmVfd2l0aCBJU084ODU5LTEgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQKICcKIAotZm9yIEggaW4gRVVDSlAgSVNPLTIwMjItSlAKK2ZvciBIIGluIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiBVVEYtOCBub3ciICcKIAkJY29tcGFyZV93aXRoICckSCcgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMi1VVEYtOC50eHQKIAknCiBkb25lCiAKLWZvciBKIGluIEVVQ0pQIElTTy0yMDIyLUpQCitmb3IgSiBpbiBldWNKUCBJU08tMjAyMi1KUAogZG8KKwlpZiB0ZXN0ICIkSiIgPSBJU08tMjAyMi1KUAorCXRoZW4KKwkJSUNPTlY9JEoKKwllbHNlCisJCUlDT05WPQorCWZpCiAJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nICRKCi0JZm9yIEggaW4gRVVDSlAgSVNPLTIwMjItSlAKKwlmb3IgSCBpbiBldWNKUCBJU08tMjAyMi1KUAogCWRvCiAJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiAkSiBub3ciICcKLQkJCWNvbXBhcmVfd2l0aCAnJEgnICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyckSicudHh0CisJCQljb21wYXJlX3dpdGggJyRIJyAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8nJEonLnR4dCAkSUNPTlYKIAkJJwogCWRvbmUKIGRvbmUKIAotZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIk5vIGNvbnZlcnNpb24gd2l0aCAkSCIgJwogCQljb21wYXJlX3dpdGggIi0tZW5jb2Rpbmc9bm9uZSAnJEgnIiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8nJEgnLnR4dApkaWZmIC0tZ2l0IGEvdC90MzkwMC9JU08tODg1OS0xLnR4dCBiL3QvdDM5MDAvSVNPODg1OS0xLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdC90MzkwMC9JU08tODg1OS0xLnR4dApyZW5hbWUgdG8gdC90MzkwMC9JU084ODU5LTEudHh0CmRpZmYgLS1naXQgYS90L3QzOTAwL0VVQ0pQLnR4dCBiL3QvdDM5MDAvZXVjSlAudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0L3QzOTAwL0VVQ0pQLnR4dApyZW5hbWUgdG8gdC90MzkwMC9ldWNKUC50eHQKZGlmZiAtLWdpdCBhL3QvdDM5MDEtaTE4bi1wYXRjaC5zaCBiL3QvdDM5MDEtaTE4bi1wYXRjaC5zaAppbmRleCA3NjU1ZGEzLi4zMWE1NzcwIDEwMDc1NQotLS0gYS90L3QzOTAxLWkxOG4tcGF0Y2guc2gKKysrIGIvdC90MzkwMS1pMThuLXBhdGNoLnNoCkBAIC0xNyw5ICsxNyw5IEBACiAJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRH4kaiB8CiAJCWNhc2UgIiRoZWFkZXIiIGluCiAJCTg4NTkpCi0JCQlncmVwICJeZW5jb2RpbmcgSVNPLTg4NTktMSIgOzsKKwkJCWdyZXAgIl5lbmNvZGluZyBJU084ODU5LTEiIDs7CiAJCSopCi0JCQkhIGdyZXAgIl5lbmNvZGluZyBJU08tODg1OS0xIiA7OworCQkJZ3JlcCAiXmVuY29kaW5nIElTTzg4NTktMSI7IHRlc3QgIiQ/IiAhPSAwIDs7CiAJCWVzYWMgfHwgewogCQkJYmFkPTEKIAkJCWJyZWFrCkBAIC01NSw3ICs1NSw3IEBACiAJZ2l0IGNvbW1pdCAtcyAtbSAiU2Vjb25kIG9uIHNpZGUiICYmCiAKIAkjIHRoZSBzZWNvbmQgb25lIG9uIHRoZSBzaWRlIGJyYW5jaCBpcyBJU08tODg1OS0xCi0JZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCiAJIyB1c2UgYXV0aG9yIGFuZCBjb21taXR0ZXIgbmFtZSBpbiBJU08tODg1OS0xIHRvIG1hdGNoIGl0LgogCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgogCXRlc3RfdGljayAmJgpAQCAtNjgsMTQgKzY4LDE0IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBvdXRwdXQgKElTTy04ODU5LTEpJyAnCi0JZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCiAKIAlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uSEVBRF4gPm91dC1sMSAmJgogCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPm91dC1sMiAmJgotCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMSIgb3V0LWwxICYmCi0JZ3JlcCAiXkZyb206ID0/SVNPLTg4NTktMT9xPz1DMT1FOT1FRD0yMD1GMz1GQT89IiBvdXQtbDEgJiYKLQlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTEiIG91dC1sMiAmJgotCWdyZXAgIl5Gcm9tOiA9P0lTTy04ODU5LTE/cT89QzE9RTk9RUQ9MjA9RjM9RkE/PSIgb3V0LWwyCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU084ODU5LTEiIG91dC1sMSAmJgorCWdyZXAgIl5Gcm9tOiA9P0lTTzg4NTktMT9xPz1DMT1FOT1FRD0yMD1GMz1GQT89IiBvdXQtbDEgJiYKKwlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMSIgb3V0LWwyICYmCisJZ3JlcCAiXkZyb206ID0/SVNPODg1OS0xP3E/PUMxPUU5PUVEPTIwPUYzPUZBPz0iIG91dC1sMgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggb3V0cHV0IChVVEYtOCknICcKQEAgLTExMCw3ICsxMTAsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKFUvTCknICcKIAlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKLQlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKQEAgLTEyMSw4ICsxMjEsOCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKEwvTCknICcKIAkjIEluIHRoaXMgdGVzdCB3ZSB3YW50IElTTy04ODU5LTEgZW5jb2RlZCBjb21taXRzIGFzIHRoZSByZXN1bHQKLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgotCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKIAogCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgpAQCAtMTM0LDcgKzEzNCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKEwvVSknICcKIAkjIFRoaXMgaXMgcGF0aG9sb2dpY2FsIC0tIHVzZSBVVEYtOCBhcyBpbnRlcm1lZGlhdGUgZm9ybQogCSMgdG8gZ2V0IElTTy04ODU5LTEgcmVzdWx0cy4KLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKIApAQCAtMTYyLDggKzE2Miw4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayhML0wpJyAnCiAJIyBCb3RoIHRoZSBjb21taXRlbmNvZGluZyBhbmQgbG9nb3V0cHV0ZW5jb2RpbmcgaXMgc2V0IHRvIElTTy04ODU5LTEKIAotCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tODg1OS0xICYmCi0JZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgogCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgogCiAJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKQEAgLTE3OCw3ICsxNzgsNyBAQAogCSMgQ29tbWl0ZW5jb2RpbmcgaXMgc2V0IHRvIFVURi04IGJ1dCBsb2dvdXRwdXRlbmNvZGluZyBpcyBJU08tODg1OS0xCiAKIAlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKLQlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgpAQCAtMTkzLDcgKzE5Myw3IEBACiAJIyBBZ2FpbiwgdGhlIGNvbW1pdGVuY29kaW5nIGlzIHNldCB0byBJU08tODg1OS0xIGJ1dAogCSMgbG9nb3V0cHV0ZW5jb2RpbmcgaXMgc2V0IHRvIFVURi04LgogCi0JZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCiAJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCiAJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0ICYmCiAKQEAgLTIxOCw3ICsyMTgsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAoVS9MKScgJwogCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgotCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgogCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtdXRmOC50eHQgJiYKIAogCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgpAQCAtMjI5LDggKzIyOSw4IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIChML0wpJyAnCiAJIyBJbiB0aGlzIHRlc3Qgd2Ugd2FudCBJU08tODg1OS0xIGVuY29kZWQgY29tbWl0cyBhcyB0aGUgcmVzdWx0Ci0JZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKLQlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCiAJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKQEAgLTI0Miw3ICsyNDIsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgKEwvVSknICcKIAkjIFRoaXMgaXMgcGF0aG9sb2dpY2FsIC0tIHVzZSBVVEYtOCBhcyBpbnRlcm1lZGlhdGUgZm9ybQogCSMgdG8gZ2V0IElTTy04ODU5LTEgcmVzdWx0cy4KLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKIApkaWZmIC0tZ2l0IGEvdC90MzkwMy1zdGFzaC5zaCBiL3QvdDM5MDMtc3Rhc2guc2gKaW5kZXggNzQ4NGNiZS4uN2EzZmI2NyAxMDA3NTUKLS0tIGEvdC90MzkwMy1zdGFzaC5zaAorKysgYi90L3QzOTAzLXN0YXNoLnNoCkBAIC0xNzcsNCArMTc3LDI3IEBACiAJdGVzdCAwID0gJChnaXQgc3Rhc2ggbGlzdCB8IHdjIC1sKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtcSBpcyBxdWlldCcgJworCWVjaG8gZm9vID4gZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBzdGFzaCBhcHBseSAtcSA+IG91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3QgISAtcyBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhdmUgLXEgaXMgcXVpZXQnICcKKwlnaXQgc3Rhc2ggc2F2ZSAtLXF1aWV0ID4gb3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdCAhIC1zIG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9wIC1xIGlzIHF1aWV0JyAnCisJZ2l0IHN0YXNoIHBvcCAtcSA+IG91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3QgISAtcyBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3AgLXEgaXMgcXVpZXQnICcKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3Rhc2ggZHJvcCAtcSA+IG91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3QgISAtcyBvdXRwdXQub3V0CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwNy1yZW5hbWUtMy5zaCBiL3QvdDQwMDctcmVuYW1lLTMuc2gKaW5kZXggNDIwNzJkNy4uMTE1MDJiNyAxMDA3NTUKLS0tIGEvdC90NDAwNy1yZW5hbWUtMy5zaAorKysgYi90L3Q0MDA3LXJlbmFtZS0zLnNoCkBAIC05LDMyICs5LDM2IEBACiAuIC4vdGVzdC1saWIuc2gKIC4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2ggOyMgdGVzdC1saWIgY2hkaXIncyBpbnRvIHRyYXNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdwcmVwYXJlIHJlZmVyZW5jZSB0cmVlJyBcCi0gICAgJ21rZGlyIHBhdGgwIHBhdGgxICYmCi0gICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgcGF0aDAvQ09QWUlORyAmJgotICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwL0NPUFlJTkcgJiYKLSAgICB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCi0gICAgZWNobyAkdHJlZScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgcmVmZXJlbmNlIHRyZWUnICcKKwlta2RpciBwYXRoMCBwYXRoMSAmJgorCWNwICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgcGF0aDAvQ09QWUlORyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAvQ09QWUlORyAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvICR0cmVlCisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdwcmVwYXJlIHdvcmsgdHJlZScgXAotICAgICdjcCBwYXRoMC9DT1BZSU5HIHBhdGgxL0NPUFlJTkcgJiYKLSAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBwYXRoMC9DT1BZSU5HIHBhdGgxL0NPUFlJTkcnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHdvcmsgdHJlZScgJworCWNwIHBhdGgwL0NPUFlJTkcgcGF0aDEvQ09QWUlORyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgcGF0aDAvQ09QWUlORyBwYXRoMS9DT1BZSU5HCisnCiAKICMgSW4gdGhlIHRyZWUsIHRoZXJlIGlzIG9ubHkgcGF0aDAvQ09QWUlORy4gIEluIHRoZSBjYWNoZSwgcGF0aDAgYW5kCiAjIHBhdGgxIGJvdGggaGF2ZSBDT1BZSU5HIGFuZCB0aGUgbGF0dGVyIGlzIGEgY29weSBvZiBwYXRoMC9DT1BZSU5HLgogIyBDb21wYXJpbmcgdGhlIGZ1bGwgdHJlZSB3aXRoIGNhY2hlIHNob3VsZCB0ZWxsIHVzIHNvLgogCi1naXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAkdHJlZSA+Y3VycmVudAotCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgogOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIEMxMDAJcGF0aDAvQ09QWUlORwlwYXRoMS9DT1BZSU5HCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3ZhbGlkYXRlIHRoZSByZXN1bHQgKCMxKScgXAotICAgICdjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IGRldGVjdGlvbicgJworCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgZGV0ZWN0aW9uLCBjYWNoZWQnICcKKwlnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtLWNhY2hlZCAkdHJlZSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZAorJwogCiAjIEluIHRoZSB0cmVlLCB0aGVyZSBpcyBvbmx5IHBhdGgwL0NPUFlJTkcuICBJbiB0aGUgY2FjaGUsIHBhdGgwIGFuZAogIyBwYXRoMSBib3RoIGhhdmUgQ09QWUlORyBhbmQgdGhlIGxhdHRlciBpcyBhIGNvcHkgb2YgcGF0aDAvQ09QWUlORy4KQEAgLTQyLDQ5ICs0Niw0NSBAQAogIyBwYXRoMS9DT1BZSU5HIHN1ZGRlbmx5IGFwcGVhcmluZyBmcm9tIG5vd2hlcmUsIG5vdCBkZXRlY3RlZCBhcwogIyBhIGNvcHkgZnJvbSBwYXRoMC9DT1BZSU5HLgogCi1naXQgZGlmZi1pbmRleCAtQyAkdHJlZSBwYXRoMSA+Y3VycmVudAotCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgogOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIEEJcGF0aDEvQ09QWUlORwogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd2YWxpZGF0ZSB0aGUgcmVzdWx0ICgjMiknIFwKLSAgICAnY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29weSwgbGltaXRlZCB0byBhIHN1YnRyZWUnICcKKwlnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAkdHJlZSBwYXRoMSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZAorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAndHdlYWsgd29yayB0cmVlJyBcCi0gICAgJ3JtIC1mIHBhdGgwL0NPUFlJTkcgJiYKLSAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBwYXRoMC9DT1BZSU5HJwotCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d2VhayB3b3JrIHRyZWUnICcKKwlybSAtZiBwYXRoMC9DT1BZSU5HICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBwYXRoMC9DT1BZSU5HCisnCiAjIEluIHRoZSB0cmVlLCB0aGVyZSBpcyBvbmx5IHBhdGgwL0NPUFlJTkcuICBJbiB0aGUgY2FjaGUsIHBhdGgwIGRvZXMKICMgbm90IGhhdmUgQ09QWUlORyBhbnltb3JlIGFuZCBwYXRoMSBoYXMgQ09QWUlORyB3aGljaCBpcyBhIGNvcHkgb2YKICMgcGF0aDAvQ09QWUlORy4gIFNob3dpbmcgdGhlIGZ1bGwgdHJlZSB3aXRoIGNhY2hlIHNob3VsZCB0ZWxsIHVzIGFib3V0CiAjIHRoZSByZW5hbWUuCiAKLWdpdCBkaWZmLWluZGV4IC1DICR0cmVlID5jdXJyZW50Ci0KIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GCiA6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgUjEwMAlwYXRoMC9DT1BZSU5HCXBhdGgxL0NPUFlJTkcKIEVPRgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAndmFsaWRhdGUgdGhlIHJlc3VsdCAoIzMpJyBcCi0gICAgJ2NvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBkZXRlY3Rpb24nICcKKwlnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAkdHJlZSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZAorJwogCiAjIEluIHRoZSB0cmVlLCB0aGVyZSBpcyBvbmx5IHBhdGgwL0NPUFlJTkcuICBJbiB0aGUgY2FjaGUsIHBhdGgwIGRvZXMKICMgbm90IGhhdmUgQ09QWUlORyBhbnltb3JlIGFuZCBwYXRoMSBoYXMgQ09QWUlORyB3aGljaCBpcyBhIGNvcHkgb2YKICMgcGF0aDAvQ09QWUlORy4gIFdoZW4gd2Ugc2F5IHdlIGNhcmUgb25seSBhYm91dCBwYXRoMSwgd2Ugc2hvdWxkIGp1c3QKICMgc2VlIHBhdGgxL0NPUFlJTkcgYXBwZWFyaW5nIGZyb20gbm93aGVyZS4KIAotZ2l0IGRpZmYtaW5kZXggLUMgJHRyZWUgcGF0aDEgPmN1cnJlbnQKLQogY2F0ID5leHBlY3RlZCA8PFxFT0YKIDowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyBBCXBhdGgxL0NPUFlJTkcKIEVPRgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAndmFsaWRhdGUgdGhlIHJlc3VsdCAoIzQpJyBcCi0gICAgJ2NvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSwgbGltaXRlZCB0byBhIHN1YnRyZWUnICcKKwlnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAkdHJlZSBwYXRoMSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZAorJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTMtZGlmZi12YXJpb3VzLnNoIGIvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKaW5kZXggOGIzMzMyMS4uOGUzNjk0ZSAxMDA3NTUKLS0tIGEvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKKysrIGIvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKQEAgLTIwNyw2ICsyMDcsNyBAQAogbG9nIC1TRiBtYXN0ZXIKIGxvZyAtU0YgLXAgbWFzdGVyCiBsb2cgLS1kZWNvcmF0ZSAtLWFsbAorbG9nIC0tZGVjb3JhdGU9ZnVsbCAtLWFsbAogCiByZXYtbGlzdCAtLXBhcmVudHMgSEVBRAogcmV2LWxpc3QgLS1jaGlsZHJlbiBIRUFECmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGU9ZnVsbF8tLWFsbCBiL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZT1mdWxsXy0tYWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwM2Q5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGU9ZnVsbF8tLWFsbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBsb2cgLS1kZWNvcmF0ZT1mdWxsIC0tYWxsCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NCAocmVmcy9oZWFkcy9tYXN0ZXIpCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSAocmVmcy9oZWFkcy9zaWRlKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhIChyZWZzL2hlYWRzL2luaXRpYWwpCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tLWRlY29yYXRlXy0tYWxsIGIvdC90NDAxMy9kaWZmLmxvZ18tLWRlY29yYXRlXy0tYWxsCmluZGV4IDEyZGE4YWMuLjk1NDIxMGUgMTAwNjQ0Ci0tLSBhL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZV8tLWFsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGVfLS1hbGwKQEAgLTEsMTIgKzEsMTIgQEAKICQgZ2l0IGxvZyAtLWRlY29yYXRlIC0tYWxsCi1jb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NCAocmVmcy9oZWFkcy9tYXN0ZXIpCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NCAobWFzdGVyKQogTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQogQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgogRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKIAogICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKIAotY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgKHJlZnMvaGVhZHMvc2lkZSkKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIChzaWRlKQogQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgogRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKIApAQCAtMjYsNyArMjYsNyBAQAogICAgIAogICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCiAKLWNvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhIChyZWZzL2hlYWRzL2luaXRpYWwpCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSAoaW5pdGlhbCkKIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KIERhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCiAKZGlmZiAtLWdpdCBhL3QvdDQwMjAtZGlmZi1leHRlcm5hbC5zaCBiL3QvdDQwMjAtZGlmZi1leHRlcm5hbC5zaAppbmRleCAwNzIwMDAxLi40ZWE0MmUwIDEwMDc1NQotLS0gYS90L3Q0MDIwLWRpZmYtZXh0ZXJuYWwuc2gKKysrIGIvdC90NDAyMC1kaWZmLWV4dGVybmFsLnNoCkBAIC0xMzYsNiArMTM2LDE1IEBACiAJR0lUX0VYVEVSTkFMX0RJRkY9ZWNobyBnaXQgZGlmZgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiBnZW5lcmF0ZXMgcHJldHR5IHBhdGhzJyAnCisJdG91Y2ggZmlsZS5leHQgJiYKKwlnaXQgYWRkIGZpbGUuZXh0ICYmCisJZWNobyB3aXRoIGV4dGVuc2lvbiA+IGZpbGUuZXh0ICYmCisJR0lUX0VYVEVSTkFMX0RJRkY9ZWNobyBnaXQgZGlmZiBmaWxlLmV4dCB8IGdyZXAgLi4uLi4uX2ZpbGVcLmV4dCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgZmlsZS5leHQgJiYKKwlybSBmaWxlLmV4dAorJworCiBlY2hvICIjISRTSEVMTF9QQVRIIiA+ZmFrZS1kaWZmLnNoCiBjYXQgPj4gZmFrZS1kaWZmLnNoIDw8XEVPRgogY2F0ICQyID4+IGNybGZlZC50eHQKZGlmZiAtLWdpdCBhL3QvdDQwMzctZGlmZi1yLXQtZGlycy5zaCBiL3QvdDQwMzctZGlmZi1yLXQtZGlycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNWNlM2IyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNy1kaWZmLXItdC1kaXJzLnNoCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIC1yIC10IHNob3dzIGRpcmVjdG9yeSBhZGRpdGlvbnMgYW5kIGRlbGV0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIGRjIGRyIGR0ICYmCisJPmRjLzEgJiYKKwk+ZHIvMiAmJgorCT5kdC8zICYmCisJPmZjICYmCisJPmZyICYmCisJPmZ0ICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlybSAtZnIgZHQgZHIgZnQgZnIgJiYKKwlta2RpciBkYSBmdCAmJgorCWZvciBwIGluIGRjLzEgZGEvNCBkdCBmdC81IGZjCisJZG8KKwkJZWNobyBoZWxsbyA+JHAgfHwgZXhpdAorCWRvbmUgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitBCWRhCitBCWRhLzQKK00JZGMKK00JZGMvMQorRAlkcgorRAlkci8yCitBCWR0CitECWR0CitECWR0LzMKK00JZmMKK0QJZnIKK0QJZnQKK0EJZnQKK0EJZnQvNQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgdmVyaWZ5ICcKKwlnaXQgZGlmZi10cmVlIC1yIC10IC0tbmFtZS1zdGF0dXMgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzItYXBwbHktcmVtb3ZhbC5zaCBiL3QvdDQxMzItYXBwbHktcmVtb3ZhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYjFmZmUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzMi1hcHBseS1yZW1vdmFsLnNoCkBAIC0wLDAgKzEsOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSnVuaW8gQyBIYW1hbm8KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWFwcGx5IG5vdGljZXMgcmVtb3ZhbCBwYXRjaGVzIGdlbmVyYXRlZCBieSBHTlUgZGlmZicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWNhdCA8PC1FT0YgPmMgJiYKKwlkaWZmIC1ydU4gYS9maWxlIGIvZmlsZQorCS0tLSBhL2ZpbGUJVFMwCisJKysrIGIvZmlsZQlUUzEKKwlAQCAtMCwwICsxIEBACisJK3NvbWV0aGluZworCUVPRgorCisJY2F0IDw8LUVPRiA+ZCAmJgorCWRpZmYgLXJ1TiBhL2ZpbGUgYi9maWxlCisJLS0tIGEvZmlsZQlUUzAKKwkrKysgYi9maWxlCVRTMQorCUBAIC0xICswLDAgQEAKKwktc29tZXRoaW5nCisJRU9GCisKKwl0aW1lV2VzdD0iMTk4Mi0wOS0xNiAwNzowMDowMC4wMDAwMDAwMDAgLTA4MDAiICYmCisJIHRpbWVHTVQ9IjE5ODItMDktMTYgMTU6MDA6MDAuMDAwMDAwMDAwICswMDAwIiAmJgorCXRpbWVFYXN0PSIxOTgyLTA5LTE3IDAwOjAwOjAwLjAwMDAwMDAwMCArMDkwMCIgJiYKKworCWVwb2NXZXN0PSIxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMCIgJiYKKwkgZXBvY0dNVD0iMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAiICYmCisJZXBvY0Vhc3Q9IjE5NzAtMDEtMDEgMDk6MDA6MDAuMDAwMDAwMDAwICswOTAwIiAmJgorCisJc2VkIC1lICJzL1RTMC8kZXBvY1dlc3QvIiAtZSAicy9UUzEvJHRpbWVXZXN0LyIgPGMgPmNyZWF0ZVdlc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyRlcG9jRWFzdC8iIC1lICJzL1RTMS8kdGltZUVhc3QvIiA8YyA+Y3JlYXRlRWFzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJGVwb2NHTVQvIiAtZSAicy9UUzEvJHRpbWVHTVQvIiA8YyA+Y3JlYXRlR01ULnBhdGNoICYmCisKKwlzZWQgLWUgInMvVFMwLyR0aW1lV2VzdC8iIC1lICJzL1RTMS8kdGltZVdlc3QvIiA8YyA+YWRkV2VzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVFYXN0LyIgLWUgInMvVFMxLyR0aW1lRWFzdC8iIDxjID5hZGRFYXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZUdNVC8iIC1lICJzL1RTMS8kdGltZUdNVC8iIDxjID5hZGRHTVQucGF0Y2ggJiYKKworCXNlZCAtZSAicy9UUzAvJHRpbWVXZXN0LyIgLWUgInMvVFMxLyR0aW1lV2VzdC8iIDxkID5lbXB0eVdlc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lRWFzdC8iIC1lICJzL1RTMS8kdGltZUVhc3QvIiA8ZCA+ZW1wdHlFYXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZUdNVC8iIC1lICJzL1RTMS8kdGltZUdNVC8iIDxkID5lbXB0eUdNVC5wYXRjaCAmJgorCisJc2VkIC1lICJzL1RTMC8kdGltZVdlc3QvIiAtZSAicy9UUzEvJGVwb2NXZXN0LyIgPGQgPnJlbW92ZVdlc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lRWFzdC8iIC1lICJzL1RTMS8kZXBvY0Vhc3QvIiA8ZCA+cmVtb3ZlRWFzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVHTVQvIiAtZSAicy9UUzEvJGVwb2NHTVQvIiA8ZCA+cmVtb3ZlR01ULnBhdGNoICYmCisKKwllY2hvIHNvbWV0aGluZyA+c29tZXRoaW5nICYmCisJPmVtcHR5CisnCisKK2ZvciBwYXRjaCBpbiAqLnBhdGNoCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInRlc3QgJHBhdGNoIiAnCisJCXJtIC1mIGZpbGUgLmdpdC9pbmRleCAmJgorCQljYXNlICIkcGF0Y2giIGluCisJCWNyZWF0ZSopCisJCQkjIG11c3QgYmUgYWJsZSB0byBjcmVhdGUKKwkJCWdpdCBhcHBseSAtLWluZGV4ICRwYXRjaCAmJgorCQkJdGVzdF9jbXAgZmlsZSBzb21ldGhpbmcgJiYKKwkJCSMgbXVzdCBub3RpY2UgdGhlIGZpbGUgaXMgYWxyZWFkeSB0aGVyZQorCQkJPmZpbGUgJiYKKwkJCWdpdCBhZGQgZmlsZSAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5ICRwYXRjaAorCQkJOzsKKwkJYWRkKikKKwkJCSMgbXVzdCBiZSBhYmxlIHRvIGNyZWF0ZSBvciBwYXRjaAorCQkJZ2l0IGFwcGx5ICRwYXRjaCAmJgorCQkJdGVzdF9jbXAgZmlsZSBzb21ldGhpbmcgJiYKKwkJCT5maWxlICYmCisJCQlnaXQgYXBwbHkgJHBhdGNoICYmCisJCQl0ZXN0X2NtcCBmaWxlIHNvbWV0aGluZworCQkJOzsKKwkJZW1wdHkqKQorCQkJIyBtdXN0IGxlYXZlIGFuIGVtcHR5IGZpbGUKKwkJCWNhdCBzb21ldGhpbmcgPmZpbGUgJiYKKwkJCWdpdCBhZGQgZmlsZSAmJgorCQkJZ2l0IGFwcGx5IC0taW5kZXggJHBhdGNoICYmCisJCQl0ZXN0IC1mIGZpbGUgJiYKKwkJCXRlc3RfY21wIGVtcHR5IGZpbGUKKwkJCTs7CisJCXJlbW92ZSopCisJCQkjIG11c3QgcmVtb3ZlIHRoZSBmaWxlCisJCQljYXQgc29tZXRoaW5nID5maWxlICYmCisJCQlnaXQgYWRkIGZpbGUgJiYKKwkJCWdpdCBhcHBseSAtLWluZGV4ICRwYXRjaCAmJgorCQkJISB0ZXN0IC1mIGZpbGUKKwkJCTs7CisJCWVzYWMKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDE1MC1hbS5zaCBiL3QvdDQxNTAtYW0uc2gKaW5kZXggZDZlYmJhZS4uODI5NjYwNSAxMDA3NTUKLS0tIGEvdC90NDE1MC1hbS5zaAorKysgYi90L3Q0MTUwLWFtLnNoCkBAIC03Nyw2ICs3NywxMiBAQAogCWdpdCBjb21taXQgLXMgLUYgbXNnICYmCiAJZ2l0IHRhZyBzZWNvbmQgJiYKIAlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGZpcnN0ID5wYXRjaDEgJiYKKwl7CisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBPbmUiICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBUd28iICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBUaHJlZSIgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBmaXJzdCB8IHNlZCAtZSAiMWQiCisJfSA+IHBhdGNoMS5lbWwgJiYKIAlzZWQgLW4gLWUgIjMsXCRwIiBtc2cgPmZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKIAl0ZXN0X3RpY2sgJiYKQEAgLTEwOCw2ICsxMTQsMTUgQEAKIAl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgcGF0Y2ggZS1tYWlsIG5vdCBpbiBhIG1ib3gnICcKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlnaXQgYW0gcGF0Y2gxLmVtbCAmJgorCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgc2Vjb25kKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmReKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIKKycKKwogR0lUX0FVVEhPUl9OQU1FPSJBbm90aGVyIFRob3IiCiBHSVRfQVVUSE9SX0VNQUlMPSJhLnRob3JAZXhhbXBsZS5jb20iCiBHSVRfQ09NTUlUVEVSX05BTUU9IkNvIE0gTWl0ZXIiCkBAIC0xODAsNiArMTk1LDE3IEBACiAJdGVzdCAteiAiJChnaXQgZGlmZiBsb3JlbSkiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIC1xIGlzIHF1aWV0JyAnCisJZ2l0IHJlc2V0IG1hc3RlcjIgLS1oYXJkICYmCisJc2VkIC1uIC1lICIzLFwkcCIgbXNnID5maWxlICYmCisJaGVhZCAtbiA5IG1zZyA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJjb3BpZWQgc3R1ZmYiICYmCisJZ2l0IGFtIC0zIC1xIGxvcmVtLW1vdmUucGF0Y2ggPiBvdXRwdXQub3V0IDI+JjEgJiYKKwkhIHRlc3QgLXMgb3V0cHV0Lm91dAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBwYXVzZXMgb24gY29uZmxpY3QnICcKIAlnaXQgY2hlY2tvdXQgbG9yZW0yXl4gJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgYW0gbG9yZW0tbW92ZS5wYXRjaCAmJgpAQCAtMzA1LDQgKzMzMSwxOSBAQAogCXRlc3QgInokcmVzdWx0IiA9ICJ6JChnaXQgcmV2LXBhcnNlIGZpcnN0Xnt0cmVlfSkiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIG5ld2xpbmUgaW4gc3ViamVjdCcgJworCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCXNlZCAtZSAicy9zZWNvbmQvc2Vjb25kIFxcXG4gZm9vLyIgcGF0Y2gxID4gcGF0Y2hubCAmJgorCWdpdCBhbSA8IHBhdGNobmwgPiBvdXRwdXQub3V0IDI+JjEgJiYKKwlncmVwICJeQXBwbHlpbmc6IHNlY29uZCBcXFxuIGZvbyQiIG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLXEgaXMgcXVpZXQnICcKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYW0gLXEgPCBwYXRjaDEgPiBvdXRwdXQub3V0IDI+JjEgJiYKKwkhIHRlc3QgLXMgb3V0cHV0Lm91dAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDItbG9nLnNoIGIvdC90NDIwMi1sb2cuc2gKaW5kZXggNjQ1MDJlMi4uMWU5NTJjYSAxMDA3NTUKLS0tIGEvdC90NDIwMi1sb2cuc2gKKysrIGIvdC90NDIwMi1sb2cuc2gKQEAgLTE0OSw2ICsxNDksMjYgQEAKIAogJwogCitjYXQgPiBleHBlY3QgPDwgRU9GCis4MDRhNzg3IHNpeHRoCiszOTRlZjc4IGZpZnRoCis1ZDMxMTU5IGZvdXJ0aAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tbm8td2FsayA8Y29tbWl0cz4gc29ydHMgYnkgY29tbWl0IHRpbWUnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLW9uZWxpbmUgNWQzMTE1OSA4MDRhNzg3IDM5NGVmNzggPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKzVkMzExNTkgZm91cnRoCis4MDRhNzg3IHNpeHRoCiszOTRlZjc4IGZpZnRoCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93IDxjb21taXRzPiBsZWF2ZXMgbGlzdCBvZiBjb21taXRzIGFzIGdpdmVuJyAnCisJZ2l0IHNob3cgLS1vbmVsaW5lIC1zIDVkMzExNTkgODA0YTc4NyAzOTRlZjc4ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjYXNlIHNlbnNpdGl2aXR5IHRlc3RzJyAnCiAJZWNobyBjYXNlID5vbmUgJiYKIAl0ZXN0X3RpY2sgJiYKQEAgLTMwMCwxMSArMzIwLDExIEBACiAnCiAKIGNhdCA+IGV4cGVjdCA8PFxFT0YKLSogICBNZXJnZSBicmFuY2ggJ3JlYWNoJworKiAgIE1lcmdlIGNvbW1pdCAncmVhY2gnCiB8XAogfCBcCiB8ICBcCi0qLS4gXCAgIE1lcmdlIGJyYW5jaGVzICdvY3RvcHVzLWEnIGFuZCAnb2N0b3B1cy1iJworKi0uIFwgICBNZXJnZSBjb21taXQgJ29jdG9wdXMtYSc7IGNvbW1pdCAnb2N0b3B1cy1iJwogfFwgXCBcCiAqIHwgfCB8IHNldmVudGgKIHwgfCAqIHwgb2N0b3B1cy1iCkBAIC0zMjQsMTQgKzM0NCwxMiBAQAogKiB8IHwgfCAgIE1lcmdlIGJyYW5jaCAnc2lkZScKIHxcIFwgXCBcCiB8ICogfCB8IHwgc2lkZS0yCi18IHwgfCB8LwotfCB8IHwvfAorfCB8IHxffC8KIHwgfC98IHwKIHwgKiB8IHwgc2lkZS0xCiAqIHwgfCB8IFNlY29uZAogKiB8IHwgfCBzaXh0aAotfCB8IHwvCi18IHwvfAorfCB8X3wvCiB8L3wgfAogKiB8IHwgZmlmdGgKICogfCB8IGZvdXJ0aApkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveCBiL3QvdDUxMDAvcmZjMjA0Ny1zYW1wbGVzLm1ib3gKaW5kZXggM2NhMjQ3MC4uMWZjMjI0OCAxMDA2NDQKLS0tIGEvdC90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveAorKysgYi90L3Q1MTAwL3JmYzIwNDctc2FtcGxlcy5tYm94CkBAIC0xLDQ4ICsxLDQ4IEBACiBGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206ID0/VVMtQVNDSUk/UT9LZWl0aF9Nb29yZT89IDxtb29yZUBjcy51dGsuZWR1PgotVG86ID0/SVNPLTg4NTktMT9RP0tlbGRfSj1GOHJuX1NpbW9uc2VuPz0gPGtlbGRAZGt1dWcuZGs+Ci1DQzogPT9JU08tODg1OS0xP1E/QW5kcj1FOT89IFBpcmFyZCA8UElSQVJEQHZtMS51bGcuYWMuYmU+Ci1TdWJqZWN0OiA9P0lTTy04ODU5LTE/Qj9TV1lnZVc5MUlHTmhiaUJ5WldGa0lIUm9hWE1nZVc4PT89Ci0gPT9JU08tODg1OS0yP0I/ZFNCMWJtUmxjbk4wWVc1a0lIUm9aU0JsZUdGdGNHeGxMZz09Pz0KK1RvOiA9P0lTTzg4NTktMT9RP0tlbGRfSj1GOHJuX1NpbW9uc2VuPz0gPGtlbGRAZGt1dWcuZGs+CitDQzogPT9JU084ODU5LTE/UT9BbmRyPUU5Pz0gUGlyYXJkIDxQSVJBUkRAdm0xLnVsZy5hYy5iZT4KK1N1YmplY3Q6ID0/SVNPODg1OS0xP0I/U1dZZ2VXOTFJR05oYmlCeVpXRmtJSFJvYVhNZ2VXOD0/PQorID0/SVNPODg1OS0yP0I/ZFNCMWJtUmxjbk4wWVc1a0lIUm9aU0JsZUdGdGNHeGxMZz09Pz0KIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiA9P0lTTy04ODU5LTE/UT9PbGxlX0o9RTRybmVmb3JzPz0gPG9qYXJuZWZAYWRtaW4ua3RoLnNlPgorRnJvbTogPT9JU084ODU5LTE/UT9PbGxlX0o9RTRybmVmb3JzPz0gPG9qYXJuZWZAYWRtaW4ua3RoLnNlPgogVG86IGlldGYtODIyQGRpbWFjcy5ydXRnZXJzLmVkdSwgb2phcm5lZkBhZG1pbi5rdGguc2UKIFN1YmplY3Q6IFRpbWUgZm9yIElTTyAxMDY0Nj8KIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBUbzogRGF2ZSBDcm9ja2VyIDxkY3JvY2tlckBtb3Jkb3Iuc3RhbmZvcmQuZWR1PgogQ2M6IGlldGYtODIyQGRpbWFjcy5ydXRnZXJzLmVkdSwgcGFmQGNvbXNvbC5zZQotRnJvbTogPT9JU08tODg1OS0xP1E/UGF0cmlrX0Y9RTRsdHN0cj1GNm0/PSA8cGFmQG5hZGEua3RoLnNlPgorRnJvbTogPT9JU084ODU5LTE/UT9QYXRyaWtfRj1FNGx0c3RyPUY2bT89IDxwYWZAbmFkYS5rdGguc2U+CiBTdWJqZWN0OiBSZTogUkZDLUhEUiBjYXJlIGFuZCBmZWVkaW5nCiAKIEZyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogTmF0aGFuaWVsIEJvcmVuc3RlaW4gPG5zYkB0aHVtcGVyLmJlbGxjb3JlLmNvbT4KLSAgICAgICg9P2lzby04ODU5LTg/Yj83ZVhzK1NEdjRTRHA3T2owOEE9PT89KQorICAgICAgKD0/SVNPODg1OS04P2I/N2VYcytTRHY0U0RwN09qMDhBPT0/PSkKIFRvOiBHcmVnIFZhdWRyZXVpbCA8Z3ZhdWRyZUBOUkkuUmVzdG9uLlZBLlVTPiwgTmVkIEZyZWVkCiAgICA8bmVkQGlubm9zb2Z0LmNvbT4sIEtlaXRoIE1vb3JlIDxtb29yZUBjcy51dGsuZWR1PgogU3ViamVjdDogVGVzdCBvZiBuZXcgaGVhZGVyIGdlbmVyYXRvcgogTUlNRS1WZXJzaW9uOiAxLjAKLUNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xCitDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPODg1OS0xCiAKIEZyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotU3ViamVjdDogKD0/SVNPLTg4NTktMT9RP2E/PSkKK1N1YmplY3Q6ICg9P0lTTzg4NTktMT9RP2E/PSkKIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1TdWJqZWN0OiAoPT9JU08tODg1OS0xP1E/YT89IGIpCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gYikKIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1TdWJqZWN0OiAoPT9JU08tODg1OS0xP1E/YT89ID0/SVNPLTg4NTktMT9RP2I/PSkKK1N1YmplY3Q6ICg9P0lTTzg4NTktMT9RP2E/PSA9P0lTTzg4NTktMT9RP2I/PSkKIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1TdWJqZWN0OiAoPT9JU08tODg1OS0xP1E/YT89ICA9P0lTTy04ODU5LTE/UT9iPz0pCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gID0/SVNPODg1OS0xP1E/Yj89KQogCiBGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLVN1YmplY3Q6ICg9P0lTTy04ODU5LTE/UT9hPz0KLSAgICA9P0lTTy04ODU5LTE/UT9iPz0pCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0KKyAgICA9P0lTTzg4NTktMT9RP2I/PSkKIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1TdWJqZWN0OiAoPT9JU08tODg1OS0xP1E/YV9iPz0pCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hX2I/PSkKIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1TdWJqZWN0OiAoPT9JU08tODg1OS0xP1E/YT89ID0/SVNPLTg4NTktMj9RP19iPz0pCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gPT9JU084ODU5LTI/UT9fYj89KQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9zYW1wbGUubWJveCBiL3QvdDUxMDAvc2FtcGxlLm1ib3gKaW5kZXggYzVhZDIwNi4uYzMwNzRhYyAxMDA2NDQKLS0tIGEvdC90NTEwMC9zYW1wbGUubWJveAorKysgYi90L3Q1MTAwL3NhbXBsZS5tYm94CkBAIC05OSw3ICs5OSw3IEBACiBGcm9tIG5vYm9keSBTYXQgQXVnIDI3IDIzOjA3OjQ5IDIwMDUKIFBhdGg6IG5ld3MuZ21hbmUub3JnIW5vdC1mb3ItbWFpbAogTWVzc2FnZS1JRDogPDIwMDUwNzIxLjA5MTAzNi4wMTExOTUxNi55b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KLUZyb206IFlPU0hJRlVKSSBIaWRlYWtpIC8gPT9pc28tMjAyMi1qcD9CP0d5UkNOVWhHSXpGUlRFQWJLRUk9Pz0gCitGcm9tOiBZT1NISUZVSkkgSGlkZWFraSAvID0/SVNPLTIwMjItSlA/Qj9HeVJDTlVoR0l6RlJURUFiS0VJPT89IAogCTx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KIE5ld3Nncm91cHM6IGdtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdAogU3ViamVjdDogW1BBVENIIDEvMl0gR0lUOiBUcnkgYWxsIGFkZHJlc3NlcyBmb3IgZ2l2ZW4gcmVtb3RlIG5hbWUKQEAgLTIxOCw3ICsyMTgsNyBAQAogRnJvbSBub2JvZHkgU2F0IEF1ZyAyNyAyMzowNzo0OSAyMDA1CiBQYXRoOiBuZXdzLmdtYW5lLm9yZyFub3QtZm9yLW1haWwKIE1lc3NhZ2UtSUQ6IDx1NXRhY2pqZHB4cS5mc2ZAbHlzYXRvci5saXUuc2U+Ci1Gcm9tOiA9P2lzby04ODU5LTE/UT9EYXZpZF9LPUU1Z2VkYWw/PSA8ZGF2aWRrQGx5c2F0b3IubGl1LnNlPgorRnJvbTogPT9JU084ODU5LTE/UT9EYXZpZF9LPUU1Z2VkYWw/PSA8ZGF2aWRrQGx5c2F0b3IubGl1LnNlPgogTmV3c2dyb3VwczogZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0CiBTdWJqZWN0OiBbUEFUQ0hdIEZpeGVkIHR3byBidWdzIGluIGdpdC1jdnNpbXBvcnQtc2NyaXB0LgogRGF0ZTogTW9uLCAxNSBBdWcgMjAwNSAyMDoxODoyNSArMDIwMApAQCAtMjI2LDcgKzIyNiw3IEBACiBBcHByb3ZlZDogbmV3c0BnbWFuZS5vcmcKIE5OVFAtUG9zdGluZy1Ib3N0OiBtYWluLmdtYW5lLm9yZwogTWltZS1WZXJzaW9uOiAxLjAKLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPODg1OS0xCiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBRVU9URUQtUFJJTlRBQkxFCiBYLVRyYWNlOiBzZWEuZ21hbmUub3JnIDExMjQxMzAyNDcgMzE4MzkgODAuOTEuMjI5LjIgKDE1IEF1ZyAyMDA1IDE4OjI0OjA3IEdNVCkKIFgtQ29tcGxhaW50cy1UbzogdXNlbmV0QHNlYS5nbWFuZS5vcmcKQEAgLTQ3Niw3ICs0NzYsNyBAQAogQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9LT0tPSIKIAogLS09LT0tPQotQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTE1CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPODg1OS0xNQogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQogCiBIZXJlIGNvbWVzIGEgY29tbWl0IGxvZyBtZXNzYWdlLCBhbmQKZGlmZiAtLWdpdCBhL3QvdDU1MDAtZmV0Y2gtcGFjay5zaCBiL3QvdDU1MDAtZmV0Y2gtcGFjay5zaAppbmRleCBjNDUwZjMzLi5hOGMyY2EyIDEwMDc1NQotLS0gYS90L3Q1NTAwLWZldGNoLXBhY2suc2gKKysrIGIvdC90NTUwMC1mZXRjaC1wYWNrLnNoCkBAIC0zLDkgKzMsOCBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgogIwogCi10ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0aW5nIG11bHRpX2FjayBwYWNrIGZldGNoaW5nCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0aW5nIG11bHRpX2FjayBwYWNrIGZldGNoaW5nJwogCi0nCiAuIC4vdGVzdC1saWIuc2gKIAogIyBUZXN0IGZldGNoLXBhY2svdXBsb2FkLXBhY2sgcGFpci4KQEAgLTEzLDc3ICsxMiw2MCBAQAogIyBTb21lIGNvbnZlbmllbmNlIGZ1bmN0aW9ucwogCiBhZGQgKCkgewotCW5hbWU9JDEKLQl0ZXh0PSIkQCIKLQlicmFuY2g9YGVjaG8gJG5hbWUgfCBzZWQgLWUgJ3MvXlwoLlwpLiokL1wxLydgCi0JcGFyZW50cz0iIgorCW5hbWU9JDEgJiYKKwl0ZXh0PSIkQCIgJiYKKwlicmFuY2g9YGVjaG8gJG5hbWUgfCBzZWQgLWUgJ3MvXlwoLlwpLiokL1wxLydgICYmCisJcGFyZW50cz0iIiAmJgogCi0Jc2hpZnQKKwlzaGlmdCAmJgogCXdoaWxlIHRlc3QgJDE7IGRvCi0JCXBhcmVudHM9IiRwYXJlbnRzIC1wICQxIgorCQlwYXJlbnRzPSIkcGFyZW50cyAtcCAkMSIgJiYKIAkJc2hpZnQKLQlkb25lCisJZG9uZSAmJgogCi0JZWNobyAiJHRleHQiID4gdGVzdC50eHQKLQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRlc3QudHh0Ci0JdHJlZT0kKGdpdCB3cml0ZS10cmVlKQorCWVjaG8gIiR0ZXh0IiA+IHRlc3QudHh0ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0ZXN0LnR4dCAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKIAkjIG1ha2Ugc3VyZSB0aW1lc3RhbXBzIGFyZSBpbiBjb3JyZWN0IG9yZGVyCi0Jc2VjPSQoKCRzZWMrMSkpCi0JY29tbWl0PSQoZWNobyAiJHRleHQiIHwgR0lUX0FVVEhPUl9EQVRFPSRzZWMgXAotCQlnaXQgY29tbWl0LXRyZWUgJHRyZWUgJHBhcmVudHMgMj4+bG9nMi50eHQpCi0JZXZhbCAiJG5hbWU9JGNvbW1pdDsgZXhwb3J0ICRuYW1lIgotCWVjaG8gJGNvbW1pdCA+IC5naXQvcmVmcy9oZWFkcy8kYnJhbmNoCisJdGVzdF90aWNrICYmCisJY29tbWl0PSQoZWNobyAiJHRleHQiIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlICRwYXJlbnRzKSAmJgorCWV2YWwgIiRuYW1lPSRjb21taXQ7IGV4cG9ydCAkbmFtZSIgJiYKKwllY2hvICRjb21taXQgPiAuZ2l0L3JlZnMvaGVhZHMvJGJyYW5jaCAmJgogCWV2YWwgJHticmFuY2h9VElQPSRjb21taXQKIH0KIAotY291bnRfb2JqZWN0cyAoKSB7Ci0JbHMgLmdpdC9vYmplY3RzLz8/LyogMj4+bG9nMi50eHQgfCB3YyAtbCB8IHRyIC1kICIgIgotfQotCi10ZXN0X2V4cGVjdF9vYmplY3RfY291bnQgKCkgewotCW1lc3NhZ2U9JDEKLQljb3VudD0kMgotCi0Jb3V0cHV0PSIkKGNvdW50X29iamVjdHMpIgotCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotCQkibmV3IG9iamVjdCBjb3VudCAkbWVzc2FnZSIgXAotCQkidGVzdCAkY291bnQgPSAkb3V0cHV0IgotfQotCiBwdWxsX3RvX2NsaWVudCAoKSB7Ci0JbnVtYmVyPSQxCi0JaGVhZHM9JDIKLQljb3VudD0kMwotCW5vX3N0cmljdF9jb3VudF9jaGVjaz0kNAorCW51bWJlcj0kMSAmJgorCWhlYWRzPSQyICYmCisJY291bnQ9JDMgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbnVtYmVyIHB1bGwiICcKKwkJKAorCQkJY2QgY2xpZW50ICYmCisJCQlnaXQgZmV0Y2gtcGFjayAtayAtdiAuLiAkaGVhZHMgJiYKIAotCWNkIGNsaWVudAotCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRudW1iZXIgcHVsbCIgXAotCQkiZ2l0IGZldGNoLXBhY2sgLWsgLXYgLi4gJGhlYWRzIgotCWNhc2UgIiRoZWFkcyIgaW4gKkEqKSBlY2hvICRBVElQID4gLmdpdC9yZWZzL2hlYWRzL0E7OyBlc2FjCi0JY2FzZSAiJGhlYWRzIiBpbiAqQiopIGVjaG8gJEJUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQjs7IGVzYWMKLQlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9gZWNobyAkaGVhZHMgfCBzZWQgLWUgJ3MvXlwoLlwpLiokL1wxLydgCisJCQljYXNlICIkaGVhZHMiIGluCisJCQkgICAgKkEqKQorCQkJCSAgICBlY2hvICRBVElQID4gLmdpdC9yZWZzL2hlYWRzL0E7OworCQkJZXNhYyAmJgorCQkJY2FzZSAiJGhlYWRzIiBpbiAqQiopCisJCQkgICAgZWNobyAkQlRJUCA+IC5naXQvcmVmcy9oZWFkcy9COzsKKwkJCWVzYWMgJiYKKwkJCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL2BlY2hvICRoZWFkcyBcCisJCQkJfCBzZWQgLWUgInMvXlwoLlwpLiokL1wxLyJgICYmCiAKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmc2NrIiAnZ2l0IGZzY2sgLS1mdWxsID4gZnNjay50eHQgMj4mMScKKwkJCWdpdCBmc2NrIC0tZnVsbCAmJgogCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZG93bmxvYWRlZCByZXN1bHRzJyBcCi0JJ212IC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKiAuICYmCi0JIHA9YGxzIC0xIHBhY2stKi5wYWNrYCAmJgotCSBnaXQgdW5wYWNrLW9iamVjdHMgPCRwICYmCi0JIGdpdCBmc2NrIC0tZnVsbCcKKwkJCW12IC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKiAuICYmCisJCQlwPWBscyAtMSBwYWNrLSoucGFja2AgJiYKKwkJCWdpdCB1bnBhY2stb2JqZWN0cyA8JHAgJiYKKwkJCWdpdCBmc2NrIC0tZnVsbCAmJgogCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAibmV3IG9iamVjdCBjb3VudCBhZnRlciAkbnVtYmVyIHB1bGwiIFwKLQknaWR4PWBlY2hvIHBhY2stKi5pZHhgICYmCi0JIHBhY2tfY291bnQ9YGdpdCBzaG93LWluZGV4IDwkaWR4IHwgd2MgLWxgICYmCi0JIHRlc3QgJHBhY2tfY291bnQgPSAkY291bnQnCi0JdGVzdCAteiAiJHBhY2tfY291bnQiICYmIHBhY2tfY291bnQ9MAotCWlmIFsgLXogIiRub19zdHJpY3RfY291bnRfY2hlY2siIF07IHRoZW4KLQkJdGVzdF9leHBlY3Rfc3VjY2VzcyAibWluaW1hbCBjb3VudCIgInRlc3QgJGNvdW50ID0gJHBhY2tfY291bnQiCi0JZWxzZQotCQl0ZXN0ICRjb3VudCAhPSAkcGFja19jb3VudCAmJiBcCi0JCQllY2hvICJXQVJOSU5HOiAkcGFja19jb3VudCBvYmplY3RzIHRyYW5zbWl0dGVkLCBvbmx5ICRjb3VudCBvZiB3aGljaCB3ZXJlIG5lZWRlZCIKLQlmaQotCXJtIC1mIHBhY2stKgotCWNkIC4uCisJCQlpZHg9YGVjaG8gcGFjay0qLmlkeGAgJiYKKwkJCXBhY2tfY291bnQ9YGdpdCBzaG93LWluZGV4IDwkaWR4IHwgd2MgLWxgICYmCisJCQl0ZXN0ICRwYWNrX2NvdW50ID0gJGNvdW50ICYmCisJCQlybSAtZiBwYWNrLSoKKwkJKQorCScKIH0KIAogIyBIZXJlIGJlZ2lucyB0aGUgYWN0dWFsIHRlc3RpbmcKQEAgLTk0LDg5ICs3NiwxMjkgQEAKIAogIyBjbGllbnQgcHVsbHMgQTIwLCBCMS4gVGhlbiB0cmFja3Mgb25seSBCLiBUaGVuIHB1bGxzIEEuCiAKLSgKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCiAJbWtkaXIgY2xpZW50ICYmCi0JY2QgY2xpZW50ICYmCi0JZ2l0IGluaXQgMj4+IGxvZzIudHh0ICYmCi0JZ2l0IGNvbmZpZyB0cmFuc2Zlci51bnBhY2tsaW1pdCAwCi0pCi0KLWFkZCBBMQotCi1wcmV2PTE7IGN1cj0yOyB3aGlsZSBbICRjdXIgLWxlIDEwIF07IGRvCi0JYWRkIEEkY3VyICQoZXZhbCBlY2hvIFwkQSRwcmV2KQotCXByZXY9JGN1cgotCWN1cj0kKCgkY3VyKzEpKQotZG9uZQotCi1hZGQgQjEgJEExCi0KLWVjaG8gJEFUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQQotZWNobyAkQlRJUCA+IC5naXQvcmVmcy9oZWFkcy9CCi1naXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9CCisJKAorCQljZCBjbGllbnQgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyB0cmFuc2Zlci51bnBhY2tsaW1pdCAwCisJKSAmJgorCWFkZCBBMSAmJgorCXByZXY9MSAmJgorCWN1cj0yICYmCisJd2hpbGUgWyAkY3VyIC1sZSAxMCBdOyBkbworCQlhZGQgQSRjdXIgJChldmFsIGVjaG8gXCRBJHByZXYpICYmCisJCXByZXY9JGN1ciAmJgorCQljdXI9JCgoJGN1cisxKSkKKwlkb25lICYmCisJYWRkIEIxICRBMQorCWVjaG8gJEFUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQSAmJgorCWVjaG8gJEJUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQiAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL0IKKycKIAogcHVsbF90b19jbGllbnQgMXN0ICJCIEEiICQoKDExKjMpKQogCi1hZGQgQTExICRBMTAKLQotcHJldj0xOyBjdXI9Mjsgd2hpbGUgWyAkY3VyIC1sZSA2NSBdOyBkbwotCWFkZCBCJGN1ciAkKGV2YWwgZWNobyBcJEIkcHJldikKLQlwcmV2PSRjdXIKLQljdXI9JCgoJGN1cisxKSkKLWRvbmUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QgMXN0IHB1bGwgc2V0dXAnICcKKwlhZGQgQTExICRBMTAgJiYKKwlwcmV2PTEgJiYKKwljdXI9MiAmJgorCXdoaWxlIFsgJGN1ciAtbGUgNjUgXTsgZG8KKwkJYWRkIEIkY3VyICQoZXZhbCBlY2hvIFwkQiRwcmV2KSAmJgorCQlwcmV2PSRjdXIgJiYKKwkJY3VyPSQoKCRjdXIrMSkpCisJZG9uZQorJwogCiBwdWxsX3RvX2NsaWVudCAybmQgIkIiICQoKDY0KjMpKQogCi1wdWxsX3RvX2NsaWVudCAzcmQgIkEiICQoKDEqMykpICMgb2xkIGZhaWxzCitwdWxsX3RvX2NsaWVudCAzcmQgIkEiICQoKDEqMykpCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNoYWxsb3ciICdnaXQgY2xvbmUgLS1kZXB0aCAyICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3cnCi0KLShjZCBzaGFsbG93OyBnaXQgY291bnQtb2JqZWN0cyAtdikgPiBjb3VudC5zaGFsbG93Ci0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50IiBcCi0JInRlc3QgXCJpbi1wYWNrOiAxOFwiID0gXCIkKGdyZXAgaW4tcGFjayBjb3VudC5zaGFsbG93KVwiIgotCi1jb3VudF9vdXRwdXQgKCkgewotCXNlZCAtZSAnL15pbi1wYWNrOi9kJyAtZSAnL15wYWNrczovZCcgLWUgJy9ec2l6ZS1wYWNrOi9kJyAtZSAnLzogMCQvZCcgIiQxIgotfQotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCAocGFydCAyKSIgJwotCXRlc3QgLXogIiQoY291bnRfb3V0cHV0IGNvdW50LnNoYWxsb3cpIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdycgJworCWdpdCBjbG9uZSAtLWRlcHRoIDIgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdwogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJmc2NrIGluIHNoYWxsb3cgcmVwbyIgXAotCSIoY2Qgc2hhbGxvdzsgZ2l0IGZzY2sgLS1mdWxsKSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50JyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cgJiYKKwlncmVwICJeaW4tcGFjazogMTgiIGNvdW50LnNoYWxsb3cKKycKIAotI3Rlc3RfZG9uZTsgZXhpdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQgKHBhcnQgMiknICcKKwlzZWQgLWUgIi9eaW4tcGFjazovZCIgLWUgIi9ecGFja3M6L2QiIC1lICIvXnNpemUtcGFjazovZCIgXAorCSAgICAtZSAiLzogMCQvZCIgY291bnQuc2hhbGxvdyA+IGNvdW50X291dHB1dCAmJgorCSEgdGVzdCAtcyBjb3VudF9vdXRwdXQKKycKIAotYWRkIEI2NiAkQjY1Ci1hZGQgQjY3ICRCNjYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmc2NrIC0tZnVsbAorCSkKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAicHVsbCBpbiBzaGFsbG93IHJlcG8iIFwKLQkiKGNkIHNoYWxsb3c7IGdpdCBwdWxsIC4uIEIpIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHR3byBtb3JlJyAnCisJYWRkIEI2NiAkQjY1ICYmCisJYWRkIEI2NyAkQjY2CisnCiAKLShjZCBzaGFsbG93OyBnaXQgY291bnQtb2JqZWN0cyAtdikgPiBjb3VudC5zaGFsbG93Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCIgXAotCSJ0ZXN0IFwiY291bnQ6IDZcIiA9IFwiJChncmVwIGNvdW50IGNvdW50LnNoYWxsb3cpXCIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgcHVsbCAuLiBCCisJKQorJwogCi1hZGQgQjY4ICRCNjcKLWFkZCBCNjkgJEI2OAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5jb3VudDogNiIgY291bnQuc2hhbGxvdworJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJkZWVwZW5pbmcgcHVsbCBpbiBzaGFsbG93IHJlcG8iIFwKLQkiKGNkIHNoYWxsb3c7IGdpdCBwdWxsIC0tZGVwdGggNCAuLiBCKSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB0d28gbW9yZSAocGFydCAyKScgJworCWFkZCBCNjggJEI2NyAmJgorCWFkZCBCNjkgJEI2OAorJwogCi0oY2Qgc2hhbGxvdzsgZ2l0IGNvdW50LW9iamVjdHMgLXYpID4gY291bnQuc2hhbGxvdwotdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQiIFwKLQkidGVzdCBcImNvdW50OiAxMlwiID0gXCIkKGdyZXAgY291bnQgY291bnQuc2hhbGxvdylcIiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZXBlbmluZyBwdWxsIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgcHVsbCAtLWRlcHRoIDQgLi4gQgorCSkKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVlcGVuaW5nIGZldGNoIGluIHNoYWxsb3cgcmVwbyIgXAotCSIoY2Qgc2hhbGxvdzsgZ2l0IGZldGNoIC0tZGVwdGggNCAuLiBBOkEpIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5jb3VudDogMTIiIGNvdW50LnNoYWxsb3cKKycKIAotKGNkIHNoYWxsb3c7IGdpdCBjb3VudC1vYmplY3RzIC12KSA+IGNvdW50LnNoYWxsb3cKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50IiBcCi0JInRlc3QgXCJjb3VudDogMThcIiA9IFwiJChncmVwIGNvdW50IGNvdW50LnNoYWxsb3cpXCIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWVwZW5pbmcgZmV0Y2ggaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmZXRjaCAtLWRlcHRoIDQgLi4gQTpBCisJKQorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJwdWxsIGluIHNoYWxsb3cgcmVwbyB3aXRoIG1pc3NpbmcgbWVyZ2UgYmFzZSIgXAotCSIoY2Qgc2hhbGxvdyAmJiB0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWRlcHRoIDQgLi4gQSkiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93ICYmCisJZ3JlcCAiXmNvdW50OiAxOCIgY291bnQuc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIGluIHNoYWxsb3cgcmVwbyB3aXRoIG1pc3NpbmcgbWVyZ2UgYmFzZScgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWRlcHRoIDQgLi4gQQorCSkKKycKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTAyLXF1aWNrZmV0Y2guc2ggYi90L3Q1NTAyLXF1aWNrZmV0Y2guc2gKaW5kZXggMTZlYWRkNi4uMTAzN2E3MiAxMDA3NTUKLS0tIGEvdC90NTUwMi1xdWlja2ZldGNoLnNoCisrKyBiL3QvdDU1MDItcXVpY2tmZXRjaC5zaApAQCAtMTE5LDQgKzExOSwyNCBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1aWNrZmV0Y2ggc2hvdWxkIGhhbmRsZSB+MTAwMCByZWZzIChvbiBXaW5kb3dzKScgJworCisJZ2l0IGdjICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlicmFuY2hwcmVmaXg9IiRoZWFkIHJlZnMvaGVhZHMvYnJhbmNoIiAmJgorCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvCisJCWZvciBqIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvCisJCQlmb3IgayBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbworCQkJCWVjaG8gIiRicmFuY2hwcmVmaXgkaSRqJGsiID4+IC5naXQvcGFja2VkLXJlZnMKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUgJiYKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZldGNoCisJKQorCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwNS1yZW1vdGUuc2ggYi90L3Q1NTA1LXJlbW90ZS5zaAppbmRleCBlNzAyNDZiLi44NTJjY2I1IDEwMDc1NQotLS0gYS90L3Q1NTA1LXJlbW90ZS5zaAorKysgYi90L3Q1NTA1LXJlbW90ZS5zaApAQCAtMTM1LDcgKzEzNSw4IEBACiAKIGNhdCA+IHRlc3QvZXhwZWN0IDw8IEVPRgogKiByZW1vdGUgb3JpZ2luCi0gIFVSTDogJChwd2QpL29uZQorICBGZXRjaCBVUkw6ICQocHdkKS9vbmUKKyAgUHVzaCAgVVJMOiAkKHB3ZCkvb25lCiAgIEhFQUQgYnJhbmNoOiBtYXN0ZXIKICAgUmVtb3RlIGJyYW5jaGVzOgogICAgIG1hc3RlciBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzL29yaWdpbikKQEAgLTE1MSw3ICsxNTIsOCBAQAogICAgIG1hc3RlciBwdXNoZXMgdG8gbWFzdGVyICAgKGxvY2FsIG91dCBvZiBkYXRlKQogICAgIG1hc3RlciBwdXNoZXMgdG8gdXBzdHJlYW0gKGNyZWF0ZSkKICogcmVtb3RlIHR3bwotICBVUkw6IC4uL3R3bworICBGZXRjaCBVUkw6IC4uL3R3bworICBQdXNoICBVUkw6IC4uL3RocmVlCiAgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6CiAgICAgYW5vdGhlcgogICAgIG1hc3RlcgpAQCAtMTczLDYgKzE3NSw3IEBACiAJIGdpdCBicmFuY2ggLS10cmFjayByZWJhc2Ugb3JpZ2luL21hc3RlciAmJgogCSBnaXQgYnJhbmNoIC1kIC1yIG9yaWdpbi9tYXN0ZXIgJiYKIAkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLnVybCAuLi90d28gJiYKKwkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLnB1c2h1cmwgLi4vdGhyZWUgJiYKIAkgZ2l0IGNvbmZpZyBicmFuY2gucmViYXNlLnJlYmFzZSB0cnVlICYmCiAJIGdpdCBjb25maWcgYnJhbmNoLm9jdG9wdXMubWVyZ2UgInRvcGljLWEgdG9waWMtYiB0b3BpYy1jIiAmJgogCSAoY2QgLi4vb25lICYmCkBAIC0xOTEsNyArMTk0LDggQEAKIAogY2F0ID4gdGVzdC9leHBlY3QgPDwgRU9GCiAqIHJlbW90ZSBvcmlnaW4KLSAgVVJMOiAkKHB3ZCkvb25lCisgIEZldGNoIFVSTDogJChwd2QpL29uZQorICBQdXNoICBVUkw6ICQocHdkKS9vbmUKICAgSEVBRCBicmFuY2g6IChub3QgcXVlcmllZCkKICAgUmVtb3RlIGJyYW5jaGVzOiAoc3RhdHVzIG5vdCBxdWVyaWVkKQogICAgIG1hc3RlcgpkaWZmIC0tZ2l0IGEvdC90NTUxNi1mZXRjaC1wdXNoLnNoIGIvdC90NTUxNi1mZXRjaC1wdXNoLnNoCmluZGV4IDg5NjQ5ZTcuLjJkMjYzM2YgMTAwNzU1Ci0tLSBhL3QvdDU1MTYtZmV0Y2gtcHVzaC5zaAorKysgYi90L3Q1NTE2LWZldGNoLXB1c2guc2gKQEAgLTQxOSw2ICs0MTksMTkgQEAKIGdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiByZW1vdGUudGhlcmUKIGdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBicmFuY2gubWFzdGVyCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb25maWcgcmVtb3RlLioucHVzaHVybCcgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyByZW1vdGUudGhlcmUudXJsIHRlc3QycmVwbyAmJgorCWdpdCBjb25maWcgcmVtb3RlLnRoZXJlLnB1c2h1cmwgdGVzdHJlcG8gJiYKKwlnaXQgcHVzaCB0aGVyZSAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorJworCisjIGNsZWFuIHVwIHRoZSBjcnVmdCBsZWZ0IHdpdGggdGhlIHByZXZpb3VzIG9uZQorZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHJlbW90ZS50aGVyZQorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggZHJ5LXJ1bicgJwogCiAJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKZGlmZiAtLWdpdCBhL3QvdDU1MjAtcHVsbC5zaCBiL3QvdDU1MjAtcHVsbC5zaAppbmRleCA3MjU3NzFmLi5lNzhkNDAyIDEwMDc1NQotLS0gYS90L3Q1NTIwLXB1bGwuc2gKKysrIGIvdC90NTUyMC1wdWxsLnNoCkBAIC05MiwyMCArOTIsNDcgQEAKIAogCWdpdCByZW1vdGUgYWRkIC1mIG1lIC4gJiYKIAlnaXQgY2hlY2tvdXQgY29weSAmJgorCWdpdCB0YWcgY29weS1vcmlnICYmCiAJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgogCWVjaG8gY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uID4gZmlsZSAmJgogCWdpdCBjb21taXQgLW0gY29uZmxpY3QgZmlsZSAmJgogCWdpdCBjaGVja291dCB0by1yZWJhc2UgJiYKIAllY2hvIGZpbGUgPiBmaWxlMiAmJgogCWdpdCBjb21taXQgLW0gdG8tcmViYXNlIGZpbGUyICYmCisJZ2l0IHRhZyB0by1yZWJhc2Utb3JpZyAmJgogCWdpdCBwdWxsIC0tcmViYXNlIG1lIGNvcHkgJiYKIAl0ZXN0ICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID0gIiQoY2F0IGZpbGUpIiAmJgogCXRlc3QgZmlsZSA9ICQoY2F0IGZpbGUyKQogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIHdpdGggcmViYXNlZCBkZWZhdWx0IHVwc3RyZWFtJyAnCisKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvbWUvY29weSBjb3B5LW9yaWcgJiYKKwlnaXQgY2hlY2tvdXQgLS10cmFjayAtYiB0by1yZWJhc2UyIG1lL2NvcHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRvLXJlYmFzZS1vcmlnICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgJiYKKwl0ZXN0ICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID0gIiQoY2F0IGZpbGUpIiAmJgorCXRlc3QgZmlsZSA9ICQoY2F0IGZpbGUyKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZWQgdXBzdHJlYW0gKyBmZXRjaCArIHB1bGwgLS1yZWJhc2UnICcKKworCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9tZS9jb3B5IGNvcHktb3JpZyAmJgorCWdpdCByZXNldCAtLWhhcmQgdG8tcmViYXNlLW9yaWcgJiYKKwlnaXQgY2hlY2tvdXQgLS10cmFjayAtYiB0by1yZWJhc2UzIG1lL2NvcHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRvLXJlYmFzZS1vcmlnICYmCisJZ2l0IGZldGNoICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgJiYKKwl0ZXN0ICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID0gIiQoY2F0IGZpbGUpIiAmJgorCXRlc3QgZmlsZSA9ICIkKGNhdCBmaWxlMikiCisKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSBkaWVzIGVhcmx5IHdpdGggZGlydHkgd29ya2luZyBkaXJlY3RvcnknICcKIAorCWdpdCBjaGVja291dCB0by1yZWJhc2UgJiYKIAlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvbWUvY29weSBjb3B5XiAmJgogCUNPUFk9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1lL2NvcHkpICYmCiAJZ2l0IHJlYmFzZSAtLW9udG8gJENPUFkgY29weSAmJgpkaWZmIC0tZ2l0IGEvdC90NTU0MC1odHRwLXB1c2guc2ggYi90L3Q1NTQwLWh0dHAtcHVzaC5zaAppbmRleCA1ZmU0NzllLi5mNGEyY2Y2IDEwMDc1NQotLS0gYS90L3Q1NTQwLWh0dHAtcHVzaC5zaAorKysgYi90L3Q1NTQwLWh0dHAtcHVzaC5zaApAQCAtNjcsNiArNjcsNDIgQEAKIAkgdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC1wdXNoIGZldGNoZXMgdW5wYWNrZWQgb2JqZWN0cycgJworCWNwIC1SICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0IFwKKwkJIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwb191bnBhY2tlZC5naXQgJiYKKworCWdpdCBjbG9uZSAkSFRUUERfVVJML3Rlc3RfcmVwb191bnBhY2tlZC5naXQgXAorCQkiJFJPT1RfUEFUSCIvZmV0Y2hfdW5wYWNrZWQgJiYKKworCSMgQnkgcmVzZXQsIHdlIGZvcmNlIGdpdCB0byByZXRyaWV2ZSB0aGUgb2JqZWN0CisJKGNkICIkUk9PVF9QQVRIIi9mZXRjaF91bnBhY2tlZCAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJIGdpdCByZW1vdGUgcm0gb3JpZ2luICYmCisJIGdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPTAgLS1hbGwgJiYKKwkgZ2l0IHBydW5lICYmCisJIGdpdCBwdXNoIC1mIC12ICRIVFRQRF9VUkwvdGVzdF9yZXBvX3VucGFja2VkLmdpdCBtYXN0ZXIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAtcHVzaCBmZXRjaGVzIHBhY2tlZCBvYmplY3RzJyAnCisJY3AgLVIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgXAorCQkiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvX3BhY2tlZC5naXQgJiYKKworCWdpdCBjbG9uZSAkSFRUUERfVVJML3Rlc3RfcmVwb19wYWNrZWQuZ2l0IFwKKwkJIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZV9wYWNrZWQgJiYKKworCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvX3BhY2tlZC5naXQgJiYKKwkgZ2l0IC0tYmFyZSByZXBhY2sgJiYKKwkgZ2l0IC0tYmFyZSBwcnVuZS1wYWNrZWQpICYmCisKKwkjIEJ5IHJlc2V0LCB3ZSBmb3JjZSBnaXQgdG8gcmV0cmlldmUgdGhlIHBhY2tlZCBvYmplY3QKKwkoY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZV9wYWNrZWQgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCSBnaXQgcmVtb3RlIHJtIG9yaWdpbiAmJgorCSBnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT0wIC0tYWxsICYmCisJIGdpdCBwcnVuZSAmJgorCSBnaXQgcHVzaCAtZiAtdiAkSFRUUERfVVJML3Rlc3RfcmVwb19wYWNrZWQuZ2l0IG1hc3RlcikKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGFuZCBkZWxldGUgcmVtb3RlIGJyYW5jaCcgJwogCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKIAlnaXQgY2hlY2tvdXQgLWIgZGV2ICYmCmRpZmYgLS1naXQgYS90L3Q1NTUwLWh0dHAtZmV0Y2guc2ggYi90L3Q1NTUwLWh0dHAtZmV0Y2guc2gKaW5kZXggMDViMWI2Mi4uMGU2OTMyNCAxMDA3NTUKLS0tIGEvdC90NTU1MC1odHRwLWZldGNoLnNoCisrKyBiL3QvdDU1NTAtaHR0cC1mZXRjaC5zaApAQCAtNTMsNSArNTMsMTMgQEAKIAkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHBhY2tlZCBvYmplY3RzJyAnCisJY3AgLVIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG8uZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2suZ2l0ICYmCisJY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgJiYKKwlnaXQgLS1iYXJlIHJlcGFjayAmJgorCWdpdCAtLWJhcmUgcHJ1bmUtcGFja2VkICYmCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvcmVwb19wYWNrLmdpdAorJworCiBzdG9wX2h0dHBkCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MDEtY2xvbmUuc2ggYi90L3Q1NjAxLWNsb25lLnNoCmluZGV4IDIzMzVkOGIuLjIxNDc1NjcgMTAwNzU1Ci0tLSBhL3QvdDU2MDEtY2xvbmUuc2gKKysrIGIvdC90NTYwMS1jbG9uZS5zaApAQCAtMTQ5LDExICsxNDksMTMgQEAKIAkoCiAJCWNkIHNyYy0wICYmIGdpdCBpbml0CiAJKSAmJgotCWdpdCBjbG9uZSBzcmMtMCB0YXJnZXQtNiAmJgorCWdpdCBjbG9uZSAiZmlsZTovLyQocHdkKS9zcmMtMCIgdGFyZ2V0LTYgMj5lcnItNiAmJgorCSEgZ3JlcCAiZmF0YWw6IiBlcnItNiAmJgogCSgKIAkJY2Qgc3JjLTAgJiYgdGVzdF9jb21taXQgQQogCSkgJiYKLQlnaXQgY2xvbmUgc3JjLTAgdGFyZ2V0LTcgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kKHB3ZCkvc3JjLTAiIHRhcmdldC03IDI+ZXJyLTcgJiYKKwkhIGdyZXAgImZhdGFsOiIgZXJyLTcgJiYKIAkjIFRoZXJlIGlzIG5vIHJlYXNvbiB0byBpbnNpc3QgdGhleSBhcmUgYml0LWZvci1iaXQKIAkjIGlkZW50aWNhbCwgYnV0IHRoaXMgdGVzdCBzaG91bGQgc3VmZmljZSBmb3Igbm93LgogCXRlc3RfY21wIHRhcmdldC02Ly5naXQvY29uZmlnIHRhcmdldC03Ly5naXQvY29uZmlnCmRpZmYgLS1naXQgYS90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaCBiL3QvdDYwMjQtcmVjdXJzaXZlLW1lcmdlLnNoCmluZGV4IDEyOWZhMzAuLmIzZmJmNjUgMTAwNzU1Ci0tLSBhL3QvdDYwMjQtcmVjdXJzaXZlLW1lcmdlLnNoCisrKyBiL3QvdDYwMjQtcmVjdXJzaXZlLW1lcmdlLnNoCkBAIC02NSwxOCArNjUsMTggQEAKICIKIAogY2F0ID4gZXhwZWN0IDw8IEVPRgotPDw8PDw8PCBIRUFEOmExCis8PDw8PDw8IEhFQUQKIEYKID09PT09PT0KIEcKLT4+Pj4+Pj4gRzphMQorPj4+Pj4+PiBHCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVzdWx0IGNvbnRhaW5zIGEgY29uZmxpY3QiICJ0ZXN0X2NtcCBleHBlY3QgYTEiCiAKIGdpdCBscy1maWxlcyAtLXN0YWdlID4gb3V0CiBjYXQgPiBleHBlY3QgPDwgRU9GCi0xMDA2NDQgZGEwNTZjZTE0YTIyNDE1MDk4OTdmYTY4YmIyYjNiNmU2MTk0ZWY5ZSAxCWExCisxMDA2NDQgNDM5Y2M0NmRlNzczZDhhODNjNzc3OTliN2NjOTE5MWMxMjhiZmNmZiAxCWExCiAxMDA2NDQgY2Y4NDQ0M2U0OWUxYjM2NmZhYzkzODcxMWRkZjRiZTJkNGQxZDllOSAyCWExCiAxMDA2NDQgZmQ3OTIzNTI5ODU1ZDBiMjc0Nzk1YWUzMzQ5YzVlMDQzODMzMzk3OSAzCWExCiBFT0YKQEAgLTkzLDggKzkzLDcgQEAKIAlnaXQgYWRkIGJpbmFyeS1maWxlICYmCiAJZ2l0IGNvbW1pdCAtbSBiaW5hcnkyICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEYgPiBtZXJnZS5vdXQgMj4gbWVyZ2UuZXJyICYmCi0JZ3JlcCAiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlczogSEVBRDpiaW5hcnktZmlsZSB2cy4gRjpiaW5hcnktZmlsZSIgXAotCQltZXJnZS5lcnIKKwlncmVwICJDYW5ub3QgbWVyZ2UgYmluYXJ5IGZpbGVzOiBiaW5hcnktZmlsZSAoSEVBRCB2cy4gRikiIG1lcmdlLmVycgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXJrIHJlbmFtZS9kZWxldGUgYXMgdW5tZXJnZWQnICcKZGlmZiAtLWdpdCBhL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaCBiL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaAppbmRleCA1NGI3ZWE2Li5kZWYzOTdjIDEwMDc1NQotLS0gYS90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2gKKysrIGIvdC90NjAzMC1iaXNlY3QtcG9yY2VsYWluLnNoCkBAIC0xNzUsNyArMTc1LDcgQEAKIAlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDEgJiYKIAlnaXQgYmlzZWN0IHNraXAgJiYKIAlnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCi0JZ3JlcCAiJEhBU0gyIGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJEhBU0gyIGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdpdCBiaXNlY3QgcmVzZXQKICcKIApAQCAtMjYxLDcgKzI2MSw3IEBACiAgICAgIGdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKICAgICAgZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCiAgICAgIGdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dCAmJgotICAgICBncmVwICIkSEFTSDMgaXMgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKyAgICAgZ3JlcCAiJEhBU0gzIGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgogICAgICBnaXQgYmlzZWN0IHJlc2V0JwogCiAjIFdlIHdhbnQgdG8gYXV0b21hdGljYWxseSBmaW5kIHRoZSBjb21taXQgdGhhdApAQCAtMjc0LDcgKzI3NCw3IEBACiAgICAgIGNobW9kICt4IHRlc3Rfc2NyaXB0LnNoICYmCiAgICAgIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAmJgogICAgICBnaXQgYmlzZWN0IHJ1biAuL3Rlc3Rfc2NyaXB0LnNoID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKLSAgICAgZ3JlcCAiJEhBU0g0IGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisgICAgIGdyZXAgIiRIQVNINCBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKICAgICAgZ2l0IGJpc2VjdCByZXNldCcKIAogIyAkSEFTSDEgaXMgZ29vZCwgJEhBU0g1IGlzIGJhZCwgd2Ugc2tpcCAkSEFTSDMKQEAgLTI4NywxNCArMjg3LDE0IEBACiAJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDUgJEhBU0gxICYmCiAJZ2l0IGJpc2VjdCBza2lwICYmCiAJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKLQlncmVwICIkSEFTSDUgaXMgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkSEFTSDUgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCiAJZ2l0IGJpc2VjdCBsb2cgPiBsb2dfdG9fcmVwbGF5LnR4dCAmJgogCWdpdCBiaXNlY3QgcmVzZXQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXAgYW5kIGJpc2VjdCByZXBsYXknICcKIAlnaXQgYmlzZWN0IHJlcGxheSBsb2dfdG9fcmVwbGF5LnR4dCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCi0JZ3JlcCAiJEhBU0g1IGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJEhBU0g1IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdpdCBiaXNlY3QgcmVzZXQKICcKIApAQCAtMzM1LDcgKzMzNSw3IEBACiAJY2htb2QgK3ggdGVzdF9zY3JpcHQuc2ggJiYKIAlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINyAkSEFTSDEgJiYKIAlnaXQgYmlzZWN0IHJ1biAuL3Rlc3Rfc2NyaXB0LnNoID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKLQlncmVwICIkSEFTSDYgaXMgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKwlncmVwICIkSEFTSDYgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBza2lwIG9ubHkgb25lIHJhbmdlJyAnCkBAIC0zODUsNyArMzg1LDcgQEAKIAlyZXZfaGFzaDY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCiAJdGVzdCAiJHJldl9oYXNoNiIgPSAiJEhBU0g2IiAmJgogCWdpdCBiaXNlY3QgZ29vZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCi0JZ3JlcCAiJEhBU0g3IGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJEhBU0g3IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdpdCBiaXNlY3QgcmVzZXQgJiYKIAlyZXZfaGFzaDY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJpc2VjdCkgJiYKIAl0ZXN0ICIkcmV2X2hhc2g2IiA9ICIkSEFTSDYiICYmCkBAIC00ODIsMjggKzQ4MiwxNyBAQAogCWdpdCBiaXNlY3QgcmVzZXQKICcKIAotY2hlY2tfdHJhY2UoKSB7Ci0JZ3JlcCAiJDEiICIkR0lUX1RSQUNFIiB8IGdyZXAgIlxeJDIiIHwgZ3JlcCAiJDMiID4vZGV2L251bGwKLX0KLQogdGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW1pemVkIG1lcmdlIGJhc2UgY2hlY2tzJyAnCi0JR0lUX1RSQUNFPSIkKHB3ZCkvdHJhY2UubG9nIiAmJgotCWV4cG9ydCBHSVRfVFJBQ0UgJiYKIAlnaXQgYmlzZWN0IHN0YXJ0ICIkSEFTSDciICIkU0lERV9IQVNINyIgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCiAJZ3JlcCAiJEhBU0g0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgotCWNoZWNrX3RyYWNlICJyZXYtbGlzdCIgIiRIQVNINyIgIiRTSURFX0hBU0g3IiAmJgogCWdpdCBiaXNlY3QgZ29vZCA+IG15X2Jpc2VjdF9sb2cyLnR4dCAmJgogCXRlc3QgLWYgIi5naXQvQklTRUNUX0FOQ0VTVE9SU19PSyIgJiYKIAl0ZXN0ICIkSEFTSDYiID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCi0JOiA+ICIkR0lUX1RSQUNFIiAmJgogCWdpdCBiaXNlY3QgYmFkID4gbXlfYmlzZWN0X2xvZzMudHh0ICYmCi0JdGVzdF9tdXN0X2ZhaWwgY2hlY2tfdHJhY2UgInJldi1saXN0IiAiJEhBU0g2IiAiJFNJREVfSEFTSDciICYmCiAJZ2l0IGJpc2VjdCBnb29kICIkQV9IQVNIIiA+IG15X2Jpc2VjdF9sb2c0LnR4dCAmJgogCWdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2c0LnR4dCAmJgotCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWYgIi5naXQvQklTRUNUX0FOQ0VTVE9SU19PSyIgJiYKLQljaGVja190cmFjZSAicmV2LWxpc3QiICIkSEFTSDYiICIkQV9IQVNIIiAmJgotCXVuc2V0IEdJVF9UUkFDRQorCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWYgIi5naXQvQklTRUNUX0FOQ0VTVE9SU19PSyIKICcKIAogIyBUaGlzIGNyZWF0ZXMgYW5vdGhlciBzaWRlIGJyYW5jaCBjYWxsZWQgInBhcmFsbGVsIiB3aXRoIHNvbWUgZmlsZXMKQEAgLTU0NSw3ICs1MzQsNyBAQAogCXBhcmExPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgogCXRlc3QgIiRwYXJhMSIgPSAiJFBBUkFfSEFTSDEiICYmCiAJZ2l0IGJpc2VjdCBiYWQgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgotCWdyZXAgIiRQQVJBX0hBU0gxIGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0CisJZ3JlcCAiJFBBUkFfSEFTSDEgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RyaWN0aW5nIGJpc2VjdGlvbiBvbiBvbmUgZGlyIGFuZCBhIGZpbGUnICcKQEAgLTU2Myw3ICs1NTIsMTkgQEAKIAlwYXJhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKIAl0ZXN0ICIkcGFyYTEiID0gIiRQQVJBX0hBU0gxIiAmJgogCWdpdCBiaXNlY3QgZ29vZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCi0JZ3JlcCAiJFBBUkFfSEFTSDQgaXMgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKwlncmVwICIkUEFSQV9IQVNINCBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcHBpbmcgYXdheSBmcm9tIHNraXBwZWQgY29tbWl0JyAnCisJZ2l0IGJpc2VjdCBzdGFydCAkUEFSQV9IQVNINyAkSEFTSDEgJiYKKwlwYXJhND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcGFyYTQiID0gIiRQQVJBX0hBU0g0IiAmJgorICAgICAgICBnaXQgYmlzZWN0IHNraXAgJiYKKwloYXNoNz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkaGFzaDciID0gIiRIQVNINyIgJiYKKyAgICAgICAgZ2l0IGJpc2VjdCBza2lwICYmCisJcGFyYTM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmEzIiA9ICIkUEFSQV9IQVNIMyIKICcKIAogIwpkaWZmIC0tZ2l0IGEvdC90NjAzNS1tZXJnZS1kaXItdG8tc3ltbGluay5zaCBiL3QvdDYwMzUtbWVyZ2UtZGlyLXRvLXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWI5NmZiMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMzUtbWVyZ2UtZGlyLXRvLXN5bWxpbmsuc2gKQEAgLTAsMCArMSw5MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdpbmcgd2hlbiBhIGRpcmVjdG9yeSB3YXMgcmVwbGFjZWQgd2l0aCBhIHN5bWxpbmsnCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCisJc2F5ICdTeW1ib2xpYyBsaW5rcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZyB0ZXN0cy4nCisJdGVzdF9kb25lCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYSBjb21taXQgd2hlcmUgZGlyIGEvYiBjaGFuZ2VkIHRvIHN5bWxpbmsnICcKKwlta2RpciAtcCBhL2IvYyBhL2ItMi9jICYmCisJPiBhL2IvYy9kICYmCisJPiBhL2ItMi9jL2QgJiYKKwk+IGEveCAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwlnaXQgdGFnIHN0YXJ0ICYmCisJcm0gLXJmIGEvYiAmJgorCWxuIC1zIGItMiBhL2IgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiZGlyIHRvIHN5bWxpbmsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tlZXAgYS9iLTIvYy9kIGFjcm9zcyBjaGVja291dCcgJworCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBybSAtLWNhY2hlZCBhL2IgJiYKKwlnaXQgY29tbWl0IC1tICJ1bnRyYWNrZWQgc3ltbGluayByZW1haW5zIiAmJgorCSBnaXQgY2hlY2tvdXQgc3RhcnReMCAmJgorCSB0ZXN0IC1mIGEvYi0yL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBzaG91bGQgbm90IGhhdmUgZGVsZXRlZCBhL2ItMi9jL2QnICcKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwkgZ2l0IGNoZWNrb3V0IHN0YXJ0XjAgJiYKKwkgdGVzdCAtZiBhL2ItMi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIG1lcmdlIHRlc3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdCAtZiBhL2ItMi9jL2QgJiYKKwllY2hvIHggPiBhL3ggJiYKKwlnaXQgYWRkIGEveCAmJgorCWdpdCBjb21taXQgLW0geCAmJgorCWdpdCB0YWcgYmFzZWxpbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGxvc2UgYS9iLTIvYy9kIGluIG1lcmdlIChyZXNvbHZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgorCWdpdCBtZXJnZSAtcyByZXNvbHZlIG1hc3RlciAmJgorCXRlc3QgLWggYS9iICYmCisJdGVzdCAtZiBhL2ItMi9jL2QKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZG8gbm90IGxvc2UgYS9iLTIvYy9kIGluIG1lcmdlIChyZWN1cnNpdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBiYXNlbGluZV4wICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBtYXN0ZXIgJiYKKwl0ZXN0IC1oIGEvYiAmJgorCXRlc3QgLWYgYS9iLTIvYy9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgbWVyZ2Ugd2hlcmUgZGlyIGEvYi0yIGNoYW5nZWQgdG8gc3ltbGluaycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc3RhcnReMCAmJgorCXJtIC1yZiBhL2ItMiAmJgorCWxuIC1zIGIgYS9iLTIgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiZGlyIGEvYi0yIHRvIHN5bWxpbmsiICYmCisJZ2l0IHRhZyB0ZXN0MgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdtZXJnZSBzaG91bGQgbm90IGhhdmUgY29uZmxpY3RzIChyZXNvbHZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgorCWdpdCBtZXJnZSAtcyByZXNvbHZlIHRlc3QyICYmCisJdGVzdCAtaCBhL2ItMiAmJgorCXRlc3QgLWYgYS9iL2MvZAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdtZXJnZSBzaG91bGQgbm90IGhhdmUgY29uZmxpY3RzIChyZWN1cnNpdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBiYXNlbGluZV4wICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSB0ZXN0MiAmJgorCXRlc3QgLWggYS9iLTIgJiYKKwl0ZXN0IC1mIGEvYi9jL2QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDM2LXJlY3Vyc2l2ZS1jb3JuZXItY2FzZXMuc2ggYi90L3Q2MDM2LXJlY3Vyc2l2ZS1jb3JuZXItY2FzZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjg3NDE0MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMzYtcmVjdXJzaXZlLWNvcm5lci1jYXNlcy5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVjdXJzaXZlIG1lcmdlIGNvcm5lciBjYXNlcycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMKKyMgIEwxICBMMgorIyAgIG8tLS1vCisjICAvIFwgLyBcCisjIG8gICBYICAgPworIyAgXCAvIFwgLworIyAgIG8tLS1vCisjICBSMSAgUjIKKyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVuPSIwIDEgMiAzIDQgNSA2IDcgOCA5IgorCWZvciBpIGluICR0ZW4KKwlkbworCQllY2hvIGxpbmUgJGkgaW4gYSBzYW1wbGUgZmlsZQorCWRvbmUgPm9uZSAmJgorCWZvciBpIGluICR0ZW4KKwlkbworCQllY2hvIGxpbmUgJGkgaW4gYW5vdGhlciBzYW1wbGUgZmlsZQorCWRvbmUgPnR3byAmJgorCWdpdCBhZGQgb25lIHR3byAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWdpdCBicmFuY2ggTDEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgUjEgJiYKKwlnaXQgbXYgb25lIHRocmVlICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gUjEgJiYKKworCWdpdCBjaGVja291dCBMMSAmJgorCWdpdCBtdiB0d28gdGhyZWUgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBMMSAmJgorCisJZ2l0IGNoZWNrb3V0IEwxXjAgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC1zIG91cnMgUjEgJiYKKwlnaXQgdGFnIEwyICYmCisKKwlnaXQgY2hlY2tvdXQgUjFeMCAmJgorCXRlc3RfdGljayAmJiBnaXQgbWVyZ2UgLXMgb3VycyBMMSAmJgorCWdpdCB0YWcgUjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBtZXJnZSAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBMMl4wICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIFIyXjAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDQwLXRyYWNraW5nLWluZm8uc2ggYi90L3Q2MDQwLXRyYWNraW5nLWluZm8uc2gKaW5kZXggM2Q2ZGI0ZC4uMDBlMWRlOSAxMDA3NTUKLS0tIGEvdC90NjA0MC10cmFja2luZy1pbmZvLnNoCisrKyBiL3QvdDYwNDAtdHJhY2tpbmctaW5mby5zaApAQCAtNzQsNSArNzQsMTkgQEAKIAlncmVwICJoYXZlIDEgYW5kIDEgZGlmZmVyZW50IiBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gdHJhY2tpbmcgbGlnaHR3ZWlnaHQgdGFncycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgdGFnIGxpZ2h0ICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIGxpZ2h0dHJhY2sgbGlnaHQgPmFjdHVhbCAmJgorCWdyZXAgInNldCB1cCB0byB0cmFjayIgYWN0dWFsICYmCisJZ2l0IGNoZWNrb3V0IGxpZ2h0dHJhY2sKKycKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gdHJhY2tpbmcgYW5ub3RhdGVkIHRhZ3MnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyAtbSBoZWF2eSBoZWF2eSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBoZWF2eXRyYWNrIGhlYXZ5ID5hY3R1YWwgJiYKKwlncmVwICJzZXQgdXAgdG8gdHJhY2siIGFjdHVhbCAmJgorCWdpdCBjaGVja291dCBoZWF2eXRyYWNrCisnCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDItZ3JlcC5zaCBiL3QvdDcwMDItZ3JlcC5zaAppbmRleCA3ODY4YWY4Li42Y2ExMWQ3IDEwMDc1NQotLS0gYS90L3Q3MDAyLWdyZXAuc2gKKysrIGIvdC90NzAwMi1ncmVwLnNoCkBAIC04LDYgKzgsMTUgQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKK2NhdCA+aGVsbG8uYyA8PEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJcHJpbnRmKCJIZWxsbyB3b3JsZC5cbiIpOworCXJldHVybiAwOworfQorRU9GCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJwogCXsKIAkJZWNobyBmb28gbW1hcCBiYXIKQEAgLTIyLDcgKzMxLDcgQEAKIAllY2hvIHp6eiA+IHogJiYKIAlta2RpciB0ICYmCiAJZWNobyB0ZXN0ID50L3QgJiYKLQlnaXQgYWRkIGZpbGUgdyB4IHkgeiB0L3QgJiYKKwlnaXQgYWRkIGZpbGUgdyB4IHkgeiB0L3QgaGVsbG8uYyAmJgogCXRlc3RfdGljayAmJgogCWdpdCBjb21taXQgLW0gaW5pdGlhbAogJwpAQCAtMTU1LDYgKzE2NCwyOCBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCitjYXQgPmV4cGVjdGVkIDw8RU9GCit5OnkgeXkKKy0tCit6Onp6egorRU9GCisKKyMgQ3JlYXRlIDEwMjQgZmlsZSBuYW1lcyB0aGF0IHNvcnQgYmV0d2VlbiAieSIgYW5kICJ6IiB0byBtYWtlIHN1cmUKKyMgdGhlIHR3byBmaWxlcyBhcmUgaGFuZGxlZCBieSBkaWZmZXJlbnQgY2FsbHMgdG8gYW4gZXh0ZXJuYWwgZ3JlcC4KKyMgVGhpcyBkZXBlbmRzIG9uIE1BWEFSR1MgaW4gYnVpbHRpbi1ncmVwLmMgYmVpbmcgMTAyNCBvciBsZXNzLgorYzMyPSIwIDEgMiAzIDQgNSA2IDcgOCA5IGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1DMSwgaHVuayBtYXJrIGJldHdlZW4gZmlsZXMnICcKKwlmb3IgYSBpbiAkYzMyOyBkbyBmb3IgYiBpbiAkYzMyOyBkbyA6ID55LSRhJGI7IGRvbmU7IGRvbmUgJiYKKwlnaXQgYWRkIHktPz8gJiYKKwlnaXQgZ3JlcCAtQzEgIl5beXpdIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUMxIC0tbm8tZXh0LWdyZXAsIGh1bmsgbWFyayBiZXR3ZWVuIGZpbGVzJyAnCisJZ2l0IGdyZXAgLUMxIC0tbm8tZXh0LWdyZXAgIl5beXpdIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwIHNldHVwJyAnCiAJZWNobyBhID4+ZmlsZSAmJgogCXRlc3RfdGljayAmJgpAQCAtMjA3LDkgKzIzOCw2MiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCB3aXRoIENFX1ZBTElEIGZpbGUnICcKIAlnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCB0L3QgJiYKIAlybSB0L3QgJiYKLQl0ZXN0ICIkKGdpdCBncmVwIC0tbm8tZXh0LWdyZXAgdCkiID0gInQvdDp0ZXN0IiAmJgorCXRlc3QgIiQoZ2l0IGdyZXAgLS1uby1leHQtZ3JlcCB0ZXN0KSIgPSAidC90OnRlc3QiICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWFzc3VtZS11bmNoYW5nZWQgdC90ICYmCiAJZ2l0IGNoZWNrb3V0IHQvdAogJwogCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jPSNpbmNsdWRlIDxzdGRpby5oPgoraGVsbG8uYzoJcmV0dXJuIDA7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtcCB3aXRoIHVzZXJkaWZmJyAnCisJZ2l0IGNvbmZpZyBkaWZmLmN1c3RvbS5mdW5jbmFtZSAiXiMiICYmCisJZWNobyAiaGVsbG8uYyBkaWZmPWN1c3RvbSIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGdyZXAgLXAgcmV0dXJuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYz1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitoZWxsby5jOglyZXR1cm4gMDsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1wJyAnCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgZ3JlcCAtcCByZXR1cm4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jLSNpbmNsdWRlIDxzdGRpby5oPgoraGVsbG8uYz1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitoZWxsby5jLXsKK2hlbGxvLmMtCXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKK2hlbGxvLmM6CXJldHVybiAwOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLXAgLUI1JyAnCisJZ2l0IGdyZXAgLXAgLUI1IHJldHVybiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgZnJvbSBhIHN1YmRpcmVjdG9yeSB0byBzZWFyY2ggd2lkZXIgYXJlYSAoMSknICcKKwlta2RpciAtcCBzICYmCisJKAorCQljZCBzICYmIGdpdCBncmVwICJ4IHggeCIgLi4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgZnJvbSBhIHN1YmRpcmVjdG9yeSB0byBzZWFyY2ggd2lkZXIgYXJlYSAoMiknICcKKwlta2RpciAtcCBzICYmCisJKAorCQljZCBzIHx8IGV4aXQgMQorCQkoIGdpdCBncmVwIHh4eXl6eiAuLiA+b3V0IDsgZWNobyAkPyA+c3RhdHVzICkKKwkJISB0ZXN0IC1zIG91dCAmJgorCQl0ZXN0IDEgPSAkKGNhdCBzdGF0dXMpCisJKQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDczMDAtY2xlYW4uc2ggYi90L3Q3MzAwLWNsZWFuLnNoCmluZGV4IDkyOWQ1ZDQuLjExOGM2ZWIgMTAwNzU1Ci0tLSBhL3QvdDczMDAtY2xlYW4uc2gKKysrIGIvdC90NzMwMC1jbGVhbi5zaApAQCAtMzgwLDQgKzM4MCw0MyBAQAogJwogY2htb2QgNzU1IGZvbwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXN0ZWQgZ2l0IHdvcmsgdHJlZScgJworCXJtIC1mciBmb28gYmFyICYmCisJbWtkaXIgZm9vIGJhciAmJgorCSgKKwkJY2QgZm9vICYmCisJCWdpdCBpbml0ICYmCisJCT5oZWxsby53b3JsZAorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBuZXN0ZWQKKwkpICYmCisJKAorCQljZCBiYXIgJiYKKwkJPmdvb2RieWUucGVvcGxlCisJKSAmJgorCWdpdCBjbGVhbiAtZiAtZCAmJgorCXRlc3QgLWYgZm9vLy5naXQvaW5kZXggJiYKKwl0ZXN0IC1mIGZvby9oZWxsby53b3JsZCAmJgorCSEgdGVzdCAtZCBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yY2UgcmVtb3ZhbCBvZiBuZXN0ZWQgZ2l0IHdvcmsgdHJlZScgJworCXJtIC1mciBmb28gYmFyICYmCisJbWtkaXIgZm9vIGJhciAmJgorCSgKKwkJY2QgZm9vICYmCisJCWdpdCBpbml0ICYmCisJCT5oZWxsby53b3JsZAorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBuZXN0ZWQKKwkpICYmCisJKAorCQljZCBiYXIgJiYKKwkJPmdvb2RieWUucGVvcGxlCisJKSAmJgorCWdpdCBjbGVhbiAtZiAtZiAtZCAmJgorCSEgdGVzdCAtZCBmb28gJiYKKwkhIHRlc3QgLWQgYmFyCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwNi1zdWJtb2R1bGUtcmVmZXJlbmNlLnNoIGIvdC90NzQwNi1zdWJtb2R1bGUtcmVmZXJlbmNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjMTZkM2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDA2LXN1Ym1vZHVsZS1yZWZlcmVuY2Uuc2gKQEAgLTAsMCArMSw4MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSwgUmVkIEhhdCBJbmMsIEF1dGhvcjogTWljaGFlbCBTLiBUc2lya2luIChtc3RAcmVkaGF0LmNvbSkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjbG9uZSAtLXJlZmVyZW5jZScKKy4gLi90ZXN0LWxpYi5zaAorCitiYXNlX2Rpcj1gcHdkYAorCitVPSRiYXNlX2Rpci9VUExPQURfTE9HCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBmaXJzdCByZXBvc2l0b3J5JyBcCisndGVzdF9jcmVhdGVfcmVwbyBBICYmIGNkIEEgJiYKK2VjaG8gZmlyc3QgPiBmaWxlMSAmJgorZ2l0IGFkZCBmaWxlMSAmJgorZ2l0IGNvbW1pdCAtbSBBLWluaXRpYWwnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBzZWNvbmQgcmVwb3NpdG9yeScgXAorJ2dpdCBjbG9uZSBBIEIgJiYgY2QgQiAmJgorZWNobyBzZWNvbmQgPiBmaWxlMiAmJgorZ2l0IGFkZCBmaWxlMiAmJgorZ2l0IGNvbW1pdCAtbSBCLWFkZGl0aW9uICYmCitnaXQgcmVwYWNrIC1hIC1kICYmCitnaXQgcHJ1bmUnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBzdXBlcm1vZHVsZScgXAorJ3Rlc3RfY3JlYXRlX3JlcG8gc3VwZXIgJiYgY2Qgc3VwZXIgJiYKK2VjaG8gZmlsZSA+IGZpbGUgJiYKK2dpdCBhZGQgZmlsZSAmJgorZ2l0IGNvbW1pdCAtbSBCLXN1cGVyLWluaXRpYWwnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgLS1yZWZlcmVuY2UnIFwKKydjZCBzdXBlciAmJiBnaXQgc3VibW9kdWxlIGFkZCAtLXJlZmVyZW5jZSAuLi9CICJmaWxlOi8vJGJhc2VfZGlyL0EiIHN1YiAmJgorZ2l0IGNvbW1pdCAtbSBCLXN1cGVyLWFkZGVkJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZnRlciBhZGQ6IGV4aXN0ZW5jZSBvZiBpbmZvL2FsdGVybmF0ZXMnIFwKKyd0ZXN0IGB3YyAtbCA8c3VwZXIvc3ViLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXNgID0gMScKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhhdCByZWZlcmVuY2UgZ2V0cyB1c2VkIHdpdGggYWRkJyBcCisnY2Qgc3VwZXIvc3ViICYmCitlY2hvICIwIG9iamVjdHMsIDAga2lsb2J5dGVzIiA+IGV4cGVjdGVkICYmCitnaXQgY291bnQtb2JqZWN0cyA+IGN1cnJlbnQgJiYKK2RpZmYgZXhwZWN0ZWQgY3VycmVudCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBzdXBlcm1vZHVsZScgXAorJ2dpdCBjbG9uZSBzdXBlciBzdXBlci1jbG9uZScKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHdpdGggcmVmZXJlbmNlJyBcCisnY2Qgc3VwZXItY2xvbmUgJiYgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVmZXJlbmNlIC4uL0InCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FmdGVyIHVwZGF0ZTogZXhpc3RlbmNlIG9mIGluZm8vYWx0ZXJuYXRlcycgXAorJ3Rlc3QgYHdjIC1sIDxzdXBlci1jbG9uZS9zdWIvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlc2AgPSAxJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGF0IHJlZmVyZW5jZSBnZXRzIHVzZWQgd2l0aCB1cGRhdGUnIFwKKydjZCBzdXBlci1jbG9uZS9zdWIgJiYKK2VjaG8gIjAgb2JqZWN0cywgMCBraWxvYnl0ZXMiID4gZXhwZWN0ZWQgJiYKK2dpdCBjb3VudC1vYmplY3RzID4gY3VycmVudCAmJgorZGlmZiBleHBlY3RlZCBjdXJyZW50JworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaCBiL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZDMzZDllCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwNi1zdWJtb2R1bGUtdXBkYXRlLnNoCkBAIC0wLDAgKzEsMTk4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IFJlZCBIYXQsIEluYy4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB1cGRhdGluZyBzdWJtb2R1bGVzCisKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0ICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgZGV0YWNoZXMgdGhlIEhFQUQgb2YgdGhlCitzdWJtb2R1bGUgYW5kICJnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlYmFzZS8tLW1lcmdlIiBkb2VzIG5vdCBkZXRhY2ggdGhlIEhFQUQuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK2NvbXBhcmVfaGVhZCgpCit7CisgICAgc2hhX21hc3Rlcj1gZ2l0LXJldi1saXN0IC0tbWF4LWNvdW50PTEgbWFzdGVyYAorICAgIHNoYV9oZWFkPWBnaXQtcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEYAorCisgICAgdGVzdCAiJHNoYV9tYXN0ZXIiID0gIiRzaGFfaGVhZCIKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIHN1Ym1vZHVsZSB0cmVlJyAnCisJZWNobyBmaWxlID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdXBzdHJlYW0KKwlnaXQgY2xvbmUgLiBzdXBlciAmJgorCWdpdCBjbG9uZSBzdXBlciBzdWJtb2R1bGUgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1Ym1vZHVsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIiAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgc3VibW9kdWxlCisJKSAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwllY2hvICJsaW5lMiIgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbWl0IDIiCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBnaXQgcHVsbCAtLXJlYmFzZSBvcmlnaW4KKwkgKSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCSBnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgdXBkYXRlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBkZXRhY2hpbmcgdGhlIEhFQUQgJyAnCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSAhIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLXJlYmFzZSBzdGF5aW5nIG9uIG1hc3RlcicgJworCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCBjaGVja291dCBtYXN0ZXIKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmViYXNlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0tbWVyZ2Ugc3RheWluZyBvbiBtYXN0ZXInICcKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1tZXJnZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIHJlYmFzZSBpbiAuZ2l0L2NvbmZpZycgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIHJlYmFzZQorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBjaGVja291dCBpbiAuZ2l0L2NvbmZpZyBidXQgLS1yZWJhc2UgZ2l2ZW4nICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBjaGVja291dAorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2Ugc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBtZXJnZSBpbiAuZ2l0L2NvbmZpZycgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIG1lcmdlCisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIGNoZWNrb3V0IGluIC5naXQvY29uZmlnIGJ1dCAtLW1lcmdlIGdpdmVuJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgY2hlY2tvdXQKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tbWVyZ2Ugc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBjaGVja291dCBpbiAuZ2l0L2NvbmZpZycgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIGNoZWNrb3V0CisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRF4KKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgISBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbml0IHBpY2tzIHVwIHJlYmFzZScgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5yZWJhc2luZy51cmwgZ2l0Oi8vbm9uLWV4aXN0aW5nL2dpdCAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5yZWJhc2luZy5wYXRoIGRvZXMtbm90LW1hdHRlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5yZWJhc2luZy51cGRhdGUgcmViYXNlICYmCisJIGdpdCBzdWJtb2R1bGUgaW5pdCByZWJhc2luZyAmJgorCSB0ZXN0ICJyZWJhc2UiID0gJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5yZWJhc2luZy51cGRhdGUpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaW5pdCBwaWNrcyB1cCBtZXJnZScgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5tZXJnaW5nLnVybCBnaXQ6Ly9ub24tZXhpc3RpbmcvZ2l0ICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLm1lcmdpbmcucGF0aCBkb2VzLW5vdC1tYXR0ZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUubWVyZ2luZy51cGRhdGUgbWVyZ2UgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0IG1lcmdpbmcgJiYKKwkgdGVzdCAibWVyZ2UiID0gJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5tZXJnaW5nLnVwZGF0ZSkKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwOC1tZXJnZS1tZXNzYWdlcy5zaCBiL3QvdDc2MDgtbWVyZ2UtbWVzc2FnZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjhkNTY3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MDgtbWVyZ2UtbWVzc2FnZXMuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgYXV0by1nZW5lcmF0ZWQgbWVyZ2UgbWVzc2FnZXMnCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfb25lbGluZSgpIHsKKwllY2hvICIkMSIgfCBzZWQgInMvUS8nL2ciID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgbG9jYWwgYnJhbmNoJyAnCisJdGVzdF9jb21taXQgbWFzdGVyLTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbG9jYWwtYnJhbmNoICYmCisJdGVzdF9jb21taXQgYnJhbmNoLTEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgbWFzdGVyLTIgJiYKKwlnaXQgbWVyZ2UgbG9jYWwtYnJhbmNoICYmCisJY2hlY2tfb25lbGluZSAiTWVyZ2UgYnJhbmNoIFFsb2NhbC1icmFuY2hRIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvY3RvcHVzIGJyYW5jaGVzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG9jdG9wdXMtYSBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBvY3RvcHVzLTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb2N0b3B1cy1iIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG9jdG9wdXMtMiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2Ugb2N0b3B1cy1hIG9jdG9wdXMtYiAmJgorCWNoZWNrX29uZWxpbmUgIk1lcmdlIGJyYW5jaGVzIFFvY3RvcHVzLWFRIGFuZCBRb2N0b3B1cy1iUSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgdGFnJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRhZy1icmFuY2ggbWFzdGVyICYmCisJdGVzdF9jb21taXQgdGFnLTEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgbWFzdGVyLTMgJiYKKwlnaXQgbWVyZ2UgdGFnLTEgJiYKKwljaGVja19vbmVsaW5lICJNZXJnZSBjb21taXQgUXRhZy0xUSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1iaWd1b3VzIHRhZycgJworCWdpdCBjaGVja291dCAtYiBhbWJpZ3VvdXMgbWFzdGVyICYmCisJdGVzdF9jb21taXQgYW1iaWd1b3VzICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG1hc3Rlci00ICYmCisJZ2l0IG1lcmdlIGFtYmlndW91cyAmJgorCWNoZWNrX29uZWxpbmUgIk1lcmdlIGNvbW1pdCBRYW1iaWd1b3VzUSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtYiByZW1vdGUgbWFzdGVyICYmCisJdGVzdF9jb21taXQgcmVtb3RlLTEgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciByZW1vdGUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgbWFzdGVyLTUgJiYKKwlnaXQgbWVyZ2Ugb3JpZ2luL21hc3RlciAmJgorCWNoZWNrX29uZWxpbmUgIk1lcmdlIHJlbW90ZSBicmFuY2ggUW9yaWdpbi9tYXN0ZXJRIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc3MDAtcmVwYWNrLnNoIGIvdC90NzcwMC1yZXBhY2suc2gKaW5kZXggODdjOWIwZS4uZjRhYTA1NCAxMDA3NTUKLS0tIGEvdC90NzcwMC1yZXBhY2suc2gKKysrIGIvdC90NzcwMC1yZXBhY2suc2gKQEAgLTE0OSw1ICsxNDksMTcgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAkY3NoYTEKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2JqZWN0cyBtYWRlIHVucmVhY2hhYmxlIGJ5IGdyYWZ0cyBvbmx5IGFyZSBrZXB0JyAnCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJjb21taXQgNCIgJiYKKwlIMD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlIMT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJSDI9JChnaXQgcmV2LXBhcnNlIEhFQUReXikgJiYKKwllY2hvICIkSDAgJEgyIiA+IC5naXQvaW5mby9ncmFmdHMgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgLS1leHBpcmUtdW5yZWFjaGFibGU9bm93IC0tYWxsICYmCisJZ2l0IHJlcGFjayAtYSAtZCAmJgorCWdpdCBjYXQtZmlsZSAtdCAkSDEKKwknCisKIHRlc3RfZG9uZQogCmRpZmYgLS1naXQgYS90L3Q4MDA1LWJsYW1lLWkxOG4uc2ggYi90L3Q4MDA1LWJsYW1lLWkxOG4uc2gKaW5kZXggOWMxZTIxYS4uY2IzOTA1NSAxMDA3NTUKLS0tIGEvdC90ODAwNS1ibGFtZS1pMThuLnNoCisrKyBiL3QvdDgwMDUtYmxhbWUtaTE4bi5zaApAQCAtMjAsNyArMjAsNyBAQAogCiAJZWNobyAiU0pJUyBMSU5FIiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCi0JZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIHNoaWZ0LWppcyAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBTSklTICYmCiAJZ2l0IGNvbW1pdCAtLWF1dGhvciAiJFNKSVNfTkFNRSA8c2ppc0Bsb2NhbGhvc3Q+IiAtbSAiJFNKSVNfTVNHIgogJwogCkBAIC02Nyw4ICs2Nyw4IEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0JJ2JsYW1lIHJlc3BlY3RzIC0tZW5jb2Rpbmc9dXRmLTgnICcKLQlnaXQgYmxhbWUgLS1pbmNyZW1lbnRhbCAtLWVuY29kaW5nPXV0Zi04IGZpbGUgfCBcCisJJ2JsYW1lIHJlc3BlY3RzIC0tZW5jb2Rpbmc9VVRGLTgnICcKKwlnaXQgYmxhbWUgLS1pbmNyZW1lbnRhbCAtLWVuY29kaW5nPVVURi04IGZpbGUgfCBcCiAJCWVncmVwICJeKGF1dGhvcnxzdW1tYXJ5KSAiID4gYWN0dWFsICYmCiAJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdGVkCiAnCmRpZmYgLS1naXQgYS90L3Q4MDA1L2NwMTI1MS50eHQgYi90L3Q4MDA1L2NwMTI1MS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNDFlOTguLjAwMDAwMDAKLS0tIGEvdC90ODAwNS9jcDEyNTEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1DUDEyNTFfTkFNRT0iyOLg7SDP5fLw7uLo9yDR6OTu8O7iIgotQ1AxMjUxX01TRz0i0uXx8u7i7uUg8e7u4fnl7ejlIgpkaWZmIC0tZ2l0IGEvdC90OTAwMS1zZW5kLWVtYWlsLnNoIGIvdC90OTAwMS1zZW5kLWVtYWlsLnNoCmluZGV4IGNlMjZlYTQuLmZiNjA2YTkgMTAwNzU1Ci0tLSBhL3QvdDkwMDEtc2VuZC1lbWFpbC5zaAorKysgYi90L3Q5MDAxLXNlbmQtZW1haWwuc2gKQEAgLTE0OCw2ICsxNDgsMjUgQEAKIAkJZ3JlcCAiXlRvOiB0b0BleGFtcGxlLmNvbSQiIG1zZ3R4dDEKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2NjbWQgd29ya3MnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJY3AgJHBhdGNoZXMgY2NjbWQucGF0Y2ggJiYKKwllY2hvIGNjY21kLS1jY2NtZEBleGFtcGxlLmNvbSA+PmNjY21kLnBhdGNoICYmCisJeworCSAgZWNobyAiIyEkU0hFTExfUEFUSCIKKwkgIGVjaG8gc2VkIC1uIC1lIHMvXmNjY21kLS0vL3AgXCJcJDFcIgorCX0gPiBjY2NtZC1zZWQgJiYKKwljaG1vZCAreCBjY2NtZC1zZWQgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tY2MtY21kPS4vY2NjbWQtc2VkIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJY2NjbWQucGF0Y2ggXAorCQkmJgorCWdyZXAgXkNjOi4qY2NjbWRAZXhhbXBsZS5jb20gbXNndHh0MQorJworCiB6OD16enp6enp6egogejY0PSR6OCR6OCR6OCR6OCR6OCR6OCR6OCR6OAogejUxMj0kejY0JHo2NCR6NjQkejY0JHo2NCR6NjQkejY0JHo2NApAQCAtMjc0LDcgKzI5Myw3IEBACiB0ZXN0X3N1cHByZXNzaW9uICgpIHsKIAlnaXQgc2VuZC1lbWFpbCBcCiAJCS0tZHJ5LXJ1biBcCi0JCS0tc3VwcHJlc3MtY2M9JDEgXAorCQktLXN1cHByZXNzLWNjPSQxICR7MisiLS1zdXBwcmVzcy1jYz0kMiJ9IFwKIAkJLS1mcm9tPSJFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPiIgXAogCQktLXRvPXRvQGV4YW1wbGUuY29tIFwKIAkJLS1zbXRwLXNlcnZlciByZWxheS5leGFtcGxlLmNvbSBcCkBAIC0yODIsOCArMzAxLDggQEAKIAlzZWQJLWUgInMvXlwoRGF0ZTpcKS4qL1wxIERBVEUtU1RSSU5HLyIgXAogCQktZSAicy9eXChNZXNzYWdlLUlkOlwpLiovXDEgTUVTU0FHRS1JRC1TVFJJTkcvIiBcCiAJCS1lICJzL15cKFgtTWFpbGVyOlwpLiovXDEgWC1NQUlMRVItU1RSSU5HLyIgXAotCQk+YWN0dWFsLXN1cHByZXNzLSQxICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQtc3VwcHJlc3MtJDEgYWN0dWFsLXN1cHByZXNzLSQxCisJCT5hY3R1YWwtc3VwcHJlc3MtJDEkezIrIi0kMiJ9ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtc3VwcHJlc3MtJDEkezIrIi0kMiJ9IGFjdHVhbC1zdXBwcmVzcy0kMSR7MisiLSQyIn0KIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VuZGVtYWlsLmNjIHNldCcgJwpAQCAtMzE2LDYgKzMzNSwzNCBAQAogCXRlc3Rfc3VwcHJlc3Npb24gc29iCiAnCiAKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtY2NjbWQgPDxcRU9GCiswMDAxLVNlY29uZC5wYXRjaAorKG1ib3gpIEFkZGluZyBjYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0Zyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4nCisobWJveCkgQWRkaW5nIGNjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisobWJveCkgQWRkaW5nIGNjOiB0d29AZXhhbXBsZS5jb20gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisoYm9keSkgQWRkaW5nIGNjOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPicKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4sPGF1dGhvckBleGFtcGxlLmNvbT4sPG9uZUBleGFtcGxlLmNvbT4sPHR3b0BleGFtcGxlLmNvbT4sPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LCBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbSwgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCisKK1Jlc3VsdDogT0sKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZW5kZW1haWwuY2NjbWQnICcKKwllY2hvIGVjaG8gY2MtY21kQGV4YW1wbGUuY29tID4gY2NjbWQgJiYKKwljaG1vZCAreCBjY2NtZCAmJgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmNjY21kIC4vY2NjbWQgJiYKKwl0ZXN0X3N1cHByZXNzaW9uIGNjY21kCisnCisKIGNhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtYWxsIDw8XEVPRgogMDAwMS1TZWNvbmQucGF0Y2gKIERyeS1PSy4gTG9nIHNheXM6CkBAIC0zNDEsNiArMzg4LDMxIEBACiAobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKIChtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKIChtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhjYy1jbWQpIEFkZGluZyBjYzogY2MtY21kQGV4YW1wbGUuY29tIGZyb206ICcuL2NjY21kJworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPiw8YXV0aG9yQGV4YW1wbGUuY29tPiw8b25lQGV4YW1wbGUuY29tPiw8dHdvQGV4YW1wbGUuY29tPiw8Y2MtY21kQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sIE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tLCBjYy1jbWRAZXhhbXBsZS5jb20KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworCitSZXN1bHQ6IE9LCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdXBwcmVzcy1jYz1ib2R5JyAnCisJdGVzdF9zdXBwcmVzc2lvbiBib2R5CisnCisKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtYm9keS1jY2NtZCA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKIERyeS1PSy4gTG9nIHNheXM6CiBTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCiBNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CkBAIC0zNTYsOCArNDI4LDggQEAKIFJlc3VsdDogT0sKIEVPRgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN1cHByZXNzLWNjPWJvZHknICcKLQl0ZXN0X3N1cHByZXNzaW9uIGJvZHkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3VwcHJlc3MtY2M9Ym9keSAtLXN1cHByZXNzLWNjPWNjY21kJyAnCisJdGVzdF9zdXBwcmVzc2lvbiBib2R5IGNjY21kCiAnCiAKIGNhdCA+ZXhwZWN0ZWQtc3VwcHJlc3Mtc29iIDw8XEVPRgpAQCAtMzgxLDYgKzQ1Myw3IEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdXBwcmVzcy1jYz1zb2InICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgc2VuZGVtYWlsLmNjY21kCiAJdGVzdF9zdXBwcmVzc2lvbiBzb2IKICcKIApAQCAtNTMzLDcgKzYwNiw3IEBACiAJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKIAlvdXRkaXIvKi5wYXRjaCAmJgogCWdyZXAgIl5DYzoiIG1zZ3R4dDEgfAotCWdyZXAgIj0/dXRmLTg/cT89QzM9QTA9QzM9QTk9QzM9QUM9QzM9QjY9QzM9QkE/PSA8dXRmOEBleGFtcGxlLmNvbT4iCisJZ3JlcCAiPT9VVEYtOD9xPz1DMz1BMD1DMz1BOT1DMz1BQz1DMz1CNj1DMz1CQT89IDx1dGY4QGV4YW1wbGUuY29tPiIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb21wb3NlIGFkZHMgTUlNRSBmb3IgdXRmOCBib2R5JyAnCkBAIC01NTAsNyArNjIzLDcgQEAKIAkgIC0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCiAJICAkcGF0Y2hlcyAmJgogCWdyZXAgIl51dGY4IGJvZHkiIG1zZ3R4dDEgJiYKLQlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiBtc2d0eHQxCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIgbXNndHh0MQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbXBvc2UgcmVzcGVjdHMgdXNlciBtaW1lIHR5cGUnICcKQEAgLTU3Myw3ICs2NDYsNyBAQAogCSAgJHBhdGNoZXMgJiYKIAlncmVwICJedXRmOCBib2R5IiBtc2d0eHQxICYmCiAJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xIiBtc2d0eHQxICYmCi0JISBncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiBtc2d0eHQxCisJISBncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04IiBtc2d0eHQxCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29tcG9zZSBhZGRzIE1JTUUgZm9yIHV0Zjggc3ViamVjdCcgJwpAQCAtNTg2LDcgKzY1OSw3IEBACiAJICAtLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAogCSAgJHBhdGNoZXMgJiYKIAlncmVwICJeZmFrZSBlZGl0IiBtc2d0eHQxICYmCi0JZ3JlcCAiXlN1YmplY3Q6ID0/dXRmLTg/cT91dGY4LXM9QzM9QkNiaj1DMz1BQmN0Pz0iIG1zZ3R4dDEKKwlncmVwICJeU3ViamVjdDogPT9VVEYtOD9xP3V0Zjgtcz1DMz1CQ2JqPUMzPUFCY3Q/PSIgbXNndHh0MQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3RzIGFtYmlndW91cyByZWZlcmVuY2UvZmlsZSBjb25mbGljdCcgJwpAQCAtNjIxLDQgKzY5NCwyNSBAQAogCWdyZXAgIkluLVJlcGx5LVRvOiA8aW4tcmVwbHktaWRAZXhhbXBsZS5jb20+IgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBpbi1yZXBseS10byBhbmQgbm8gdGhyZWFkaW5nJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLW5vdGhyZWFkIFwKKwkJJHBhdGNoZXMgJHBhdGNoZXMgPnN0ZG91dCAmJgorCSEgZ3JlcCAiSW4tUmVwbHktVG86ICIgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZGluZyBidXQgbm8gY2hhaW4tcmVwbHktdG8nICcKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tdGhyZWFkIFwKKwkJLS1ub2NoYWluLXJlcGx5LXRvIFwKKwkJJHBhdGNoZXMgJHBhdGNoZXMgPnN0ZG91dCAmJgorCWdyZXAgIkluLVJlcGx5LVRvOiAiIHN0ZG91dAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaCBiL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaAppbmRleCA0ZWVlMmU5Li41NzBlMDM1IDEwMDc1NQotLS0gYS90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2gKKysrIGIvdC90OTEwMC1naXQtc3ZuLWJhc2ljLnNoCkBAIC0zMSw3ICszMSw3IEBACiAJZWNobyAienp6IiA+IGJhci96enogJiYKIAllY2hvICIjIS9iaW4vc2giID4gZXhlYy5zaCAmJgogCWNobW9kICt4IGV4ZWMuc2ggJiYKLQlzdm4gaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwgJiYKIAljZCAuLiAmJgogCXJtIC1yZiBpbXBvcnQgJiYKIAlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIicKQEAgLTUxLDcgKzUxLDcgQEAKIAlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoICYmCi0Jc3ZuIHVwICIkU1ZOX1RSRUUiICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgogCXRlc3QgLWQgIiRTVk5fVFJFRSIvZGlyICYmIHRlc3QgISAtZCAiJFNWTl9UUkVFIi9kaXIvYScKIAogCkBAIC0xMTgsNyArMTE4LDcgQEAKIAlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoNSAmJgotCXN2biB1cCAiJFNWTl9UUkVFIiAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKIAl0ZXN0ICEgLXggIiRTVk5fVFJFRSIvZXhlYy5zaCcKIAogCkBAIC0xMjksNyArMTI5LDcgQEAKIAlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoNSAmJgotCXN2biB1cCAiJFNWTl9UUkVFIiAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKIAl0ZXN0IC14ICIkU1ZOX1RSRUUiL2V4ZWMuc2gnCiAKIApAQCAtMTQxLDcgKzE0MSw3IEBACiAJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCiAJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKIAkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaDUgJiYKLQlzdm4gdXAgIiRTVk5fVFJFRSIgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCiAJdGVzdCAtTCAiJFNWTl9UUkVFIi9leGVjLnNoJwogCiBuYW1lPSduZXcgc3ltbGluayBpcyBhZGRlZCB0byBhIGZpbGUgdGhhdCB3YXMgYWxzbyBqdXN0IG1hZGUgZXhlY3V0YWJsZScKQEAgLTE1Myw3ICsxNTMsNyBAQAogCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgogCWdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCiAJCSR7cmVtb3Rlc19naXRfc3ZufS4ubXlicmFuY2g1ICYmCi0Jc3ZuIHVwICIkU1ZOX1RSRUUiICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgogCXRlc3QgLXggIiRTVk5fVFJFRSIvYmFyL3p6eiAmJgogCXRlc3QgLUwgIiRTVk5fVFJFRSIvZXhlYy0yLnNoJwogCkBAIC0xNjYsNyArMTY2LDcgQEAKIAlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoNSAmJgotCXN2biB1cCAiJFNWTl9UUkVFIiAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKIAl0ZXN0IC1mICIkU1ZOX1RSRUUiL2V4ZWMtMi5zaCAmJgogCXRlc3QgISAtTCAiJFNWTl9UUkVFIi9leGVjLTIuc2ggJiYKIAl0ZXN0X2NtcCBoZWxwICIkU1ZOX1RSRUUiL2V4ZWMtMi5zaCcKQEAgLTIzMSw2ICsyMzEsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeOnJlZnMvJHtyZW1vdGVzX2dpdF9zdm59JCIKICAgICAgICAgJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0ICRyZXYgZG9lcyBub3QgY2xvYmJlciBjdXJyZW50IGJyYW5jaCcgJworCWdpdCBzdm4gZmV0Y2ggLWkgYmFyICYmCisJZ2l0IGNoZWNrb3V0IC1iIG15LWJhciByZWZzL3JlbW90ZXMvYmFyICYmCisJZWNobyAxID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2UgMSIgJiYKKwllY2hvIDIgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gImNoYW5nZSAyIiAmJgorCW9sZF9oZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBzdm4gZGNvbW1pdCAtaSBiYXIgSEVBRF4gJiYKKwl0ZXN0ICRvbGRfaGVhZCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3QgcmVmcy9oZWFkcy9teS1iYXIgPSAkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgJiYKKwlnaXQgbG9nIHJlZnMvcmVtb3Rlcy9iYXIgfCBncmVwICJjaGFuZ2UgMSIgJiYKKwkhIGdpdCBsb2cgcmVmcy9yZW1vdGVzL2JhciB8IGdyZXAgImNoYW5nZSAyIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1EIG15LWJhcgorCScKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJsZSB0byBkY29tbWl0IHRvIGEgc3ViZGlyZWN0b3J5JyAiCiAJZ2l0IHN2biBmZXRjaCAtaSBiYXIgJiYKIAlnaXQgY2hlY2tvdXQgLWIgbXktYmFyIHJlZnMvcmVtb3Rlcy9iYXIgJiYKZGlmZiAtLWdpdCBhL3QvdDkxMDEtZ2l0LXN2bi1wcm9wcy5zaCBiL3QvdDkxMDEtZ2l0LXN2bi1wcm9wcy5zaAppbmRleCAxZTMxZDZlLi45ZGE0MTc4IDEwMDc1NQotLS0gYS90L3Q5MTAxLWdpdC1zdm4tcHJvcHMuc2gKKysrIGIvdC90OTEwMS1naXQtc3ZuLXByb3BzLnNoCkBAIC00OCw3ICs0OCw3IEBACiAJcHJpbnRmICJcclxuIiA+IGVtcHR5X2NybGYKIAlhX2VtcHR5X2NybGY9YGdpdCBoYXNoLW9iamVjdCAtdyBlbXB0eV9jcmxmYAogCi0Jc3ZuIGltcG9ydCAtLW5vLWF1dG8tcHJvcHMgLW0gJ2ltcG9ydCBmb3IgZ2l0IHN2bicgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKKwlzdm5fY21kIGltcG9ydCAtLW5vLWF1dG8tcHJvcHMgLW0gJ2ltcG9ydCBmb3IgZ2l0IHN2bicgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKIGNkIC4uCiAKIHJtIC1yZiBpbXBvcnQKQEAgLTU3LDEzICs1NywxMyBAQAogCSdjZCB0ZXN0X3djICYmCiAJCWVjaG8gR3JlZXRpbmdzID4+IGt3LmMgJiYKIAkJcG9rZSBrdy5jICYmCi0JCXN2biBjb21taXQgLW0gIk5vdCB5ZXQgYW4gSWQiICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJOb3QgeWV0IGFuIElkIiAmJgogCQllY2hvIEhlbGxvIHdvcmxkID4+IGt3LmMgJiYKIAkJcG9rZSBrdy5jICYmCi0JCXN2biBjb21taXQgLW0gIk1vZGlmaWVkIGZpbGUsIGJ1dCBzdGlsbCBub3QgeWV0IGFuIElkIiAmJgotCQlzdm4gcHJvcHNldCBzdm46a2V5d29yZHMgSWQga3cuYyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiTW9kaWZpZWQgZmlsZSwgYnV0IHN0aWxsIG5vdCB5ZXQgYW4gSWQiICYmCisJCXN2bl9jbWQgcHJvcHNldCBzdm46a2V5d29yZHMgSWQga3cuYyAmJgogCQlwb2tlIGt3LmMgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiUHJvcHNldCBJZCIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlByb3BzZXQgSWQiICYmCiAJY2QgLi4nCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgZ2l0IHN2bicgJ2dpdCBzdm4gaW5pdCAiJHN2bnJlcG8iJwpAQCAtODMsMTYgKzgzLDE2IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgInByb3BzZXQgQ1Igb24gY3JsZiBmaWxlcyIgXAogCSdjZCB0ZXN0X3djICYmCi0JCXN2biBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1IgZW1wdHkgJiYKLQkJc3ZuIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUiBjcmxmICYmCi0JCXN2biBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1IgbmVfY3JsZiAmJgotCQlzdm4gY29tbWl0IC1tICJwcm9wc2V0IENSIG9uIGNybGYgZmlsZXMiICYmCisJCXN2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSIGVtcHR5ICYmCisJCXN2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSIGNybGYgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1IgbmVfY3JsZiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAicHJvcHNldCBDUiBvbiBjcmxmIGZpbGVzIiAmJgogCSBjZCAuLicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggYW5kIHB1bGwgbGF0ZXN0IGZyb20gc3ZuIGFuZCBjaGVja291dCBhIG5ldyB3YycgXAogCSdnaXQgc3ZuIGZldGNoICYmCiAJIGdpdCBwdWxsIC4gJHtyZW1vdGVzX2dpdF9zdm59ICYmCi0JIHN2biBjbyAiJHN2bnJlcG8iIG5ld193YycKKwkgc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIG5ld193YycKIAogZm9yIGkgaW4gY3JsZiBuZV9jcmxmIGxmIG5lX2xmIGNyIG5lX2NyIGVtcHR5X2NyIGVtcHR5X2xmIGVtcHR5IGVtcHR5X2NybGYKIGRvCkBAIC0xMDYsMTEgKzEwNiwxMSBAQAogCWFfY3I9YHByaW50ZiAnJElkJFxyXG5IZWxsb1xyXG5Xb3JsZFxyXG4nIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW5gCiAJYV9uZV9jcj1gcHJpbnRmICckSWQkXHJcbkhlbGxvXHJcbldvcmxkJyB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluYAogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NldCBDUkxGIG9uIGNyIGZpbGVzJyBcCi0JJ3N2biBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1JMRiBjciAmJgotCSBzdm4gcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSTEYgbmVfY3IgJiYKLQkgc3ZuIHByb3BzZXQgc3ZuOmtleXdvcmRzIElkIGNyICYmCi0JIHN2biBwcm9wc2V0IHN2bjprZXl3b3JkcyBJZCBuZV9jciAmJgotCSBzdm4gY29tbWl0IC1tICJwcm9wc2V0IENSTEYgb24gY3IgZmlsZXMiJworCSdzdm5fY21kIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUkxGIGNyICYmCisJIHN2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSTEYgbmVfY3IgJiYKKwkgc3ZuX2NtZCBwcm9wc2V0IHN2bjprZXl3b3JkcyBJZCBjciAmJgorCSBzdm5fY21kIHByb3BzZXQgc3ZuOmtleXdvcmRzIElkIG5lX2NyICYmCisJIHN2bl9jbWQgY29tbWl0IC1tICJwcm9wc2V0IENSTEYgb24gY3IgZmlsZXMiJwogY2QgLi4KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGFuZCBwdWxsIGxhdGVzdCBmcm9tIHN2bicgXAogCSdnaXQgc3ZuIGZldGNoICYmIGdpdCBwdWxsIC4gJHtyZW1vdGVzX2dpdF9zdm59JwpAQCAtMTQwLDEwICsxNDAsMTAgQEAKIAljZCB0ZXN0X3djICYmCiAJbWtkaXIgLXAgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkgJiYKIAl0b3VjaCBkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS8ua2VlcCAmJgotCXN2biBhZGQgZGVlcGx5ICYmCi0Jc3ZuIHVwICYmCi0Jc3ZuIHByb3BzZXQgLVIgc3ZuOmlnbm9yZSAnbm8tc3VjaC1maWxlKicgLgotCXN2biBjb21taXQgLW0gJ3Byb3BzZXQgc3ZuOmlnbm9yZScKKwlzdm5fY21kIGFkZCBkZWVwbHkgJiYKKwlzdm5fY21kIHVwICYmCisJc3ZuX2NtZCBwcm9wc2V0IC1SIHN2bjppZ25vcmUgJ25vLXN1Y2gtZmlsZSonIC4KKwlzdm5fY21kIGNvbW1pdCAtbSAncHJvcHNldCBzdm46aWdub3JlJwogCWNkIC4uICYmCiAJZ2l0IHN2biBzaG93LWlnbm9yZSA+IHNob3ctaWdub3JlLmdvdCAmJgogCWNtcCBzaG93LWlnbm9yZS5leHBlY3Qgc2hvdy1pZ25vcmUuZ290CmRpZmYgLS1naXQgYS90L3Q5MTAyLWdpdC1zdm4tZGVlcC1ybWRpci5zaCBiL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoCmluZGV4IGUyMjMyMTguLjAyOGZiMTkgMTAwNzU1Ci0tLSBhL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoCisrKyBiL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoCkBAIC05LDcgKzksNyBAQAogCW1rZGlyIC1wIGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8yICYmCiAJZWNobyBmb28gPiBkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMS9maWxlICYmCiAJZWNobyBmb28gPiBkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMi9hbm90aGVyICYmCi0Jc3ZuIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiAuICIkc3ZucmVwbyIgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiAuICIkc3ZucmVwbyIgJiYKIAljZCAuLgogCScKIApAQCAtMjMsNyArMjMsNyBAQAogCWdpdCBybSAtZiBkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMi9hbm90aGVyICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSAicmVtb3ZlIGFub3RoZXIiICYmCiAJZ2l0IHN2biBzZXQtdHJlZSAtLXJtZGlyIEhFQUQgJiYKLQlzdm4gbHMgLVIgIiRzdm5yZXBvIiB8IGdyZXAgXmRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8xCisJc3ZuX2NtZCBscyAtUiAiJHN2bnJlcG8iIHwgZ3JlcCBeZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzEKIAknCiAKIApkaWZmIC0tZ2l0IGEvdC90OTEwMy1naXQtc3ZuLXRyYWNrZWQtZGlyZWN0b3J5LXJlbW92ZWQuc2ggYi90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaAppbmRleCA5NjNkZDk1Li4zNDEzMTY0IDEwMDc1NQotLS0gYS90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaAorKysgYi90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaApAQCAtMTAsMTUgKzEwLDE1IEBACiAJbWtkaXIgaW1wb3J0ICYmCiAJbWtkaXIgaW1wb3J0L3RydW5rICYmCiAJZWNobyBoZWxsbyA+PiBpbXBvcnQvdHJ1bmsvUkVBRE1FICYmCi0Jc3ZuIGltcG9ydCAtbSBpbml0aWFsIGltcG9ydCAiJHN2bnJlcG8iICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gaW5pdGlhbCBpbXBvcnQgIiRzdm5yZXBvIiAmJgogCXJtIC1yZiBpbXBvcnQgJiYKLQlzdm4gY28gIiRzdm5yZXBvIi90cnVuayB0cnVuayAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayB0cnVuayAmJgogCWVjaG8gYnllIGJ5ZSA+PiB0cnVuay9SRUFETUUgJiYKLQlzdm4gcm0gLW0gImdvbmUiICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIHJtIC1tICJnb25lIiAiJHN2bnJlcG8iL3RydW5rICYmCiAJcm0gLXJmIHRydW5rICYmCiAJbWtkaXIgdHJ1bmsgJiYKIAllY2hvICJuZXciID4gdHJ1bmsvRk9MTE9XTUUgJiYKLQlzdm4gaW1wb3J0IC1tICJuZXcgdHJ1bmsiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsKKwlzdm5fY21kIGltcG9ydCAtbSAibmV3IHRydW5rIiB0cnVuayAiJHN2bnJlcG8iL3RydW5rCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlcG8gd2l0aCBnaXQnICcKZGlmZiAtLWdpdCBhL3QvdDkxMDQtZ2l0LXN2bi1mb2xsb3ctcGFyZW50LnNoIGIvdC90OTEwNC1naXQtc3ZuLWZvbGxvdy1wYXJlbnQuc2gKaW5kZXggYWI5ZmEzMi4uNzg2MTBiNiAxMDA3NTUKLS0tIGEvdC90OTEwNC1naXQtc3ZuLWZvbGxvdy1wYXJlbnQuc2gKKysrIGIvdC90OTEwNC1naXQtc3ZuLWZvbGxvdy1wYXJlbnQuc2gKQEAgLTExLDE4ICsxMSwxOCBAQAogCWNkIGltcG9ydCAmJgogCW1rZGlyIC1wIHRydW5rICYmCiAJZWNobyBoZWxsbyA+IHRydW5rL3JlYWRtZSAmJgotCXN2biBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKIAljZCAuLiAmJgotCXN2biBjbyAiJHN2bnJlcG8iIHdjICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHdjICYmCiAJY2Qgd2MgJiYKIAllY2hvIHdvcmxkID4+IHRydW5rL3JlYWRtZSAmJgogCXBva2UgdHJ1bmsvcmVhZG1lICYmCi0Jc3ZuIGNvbW1pdCAtbSAiYW5vdGhlciBjb21taXQiICYmCi0Jc3ZuIHVwICYmCi0Jc3ZuIG12IHRydW5rIHRodW5rICYmCisJc3ZuX2NtZCBjb21taXQgLW0gImFub3RoZXIgY29tbWl0IiAmJgorCXN2bl9jbWQgdXAgJiYKKwlzdm5fY21kIG12IHRydW5rIHRodW5rICYmCiAJZWNobyBnb29kYnllID4+IHRodW5rL3JlYWRtZSAmJgogCXBva2UgdGh1bmsvcmVhZG1lICYmCi0Jc3ZuIGNvbW1pdCAtbSAiYnllIG5vdyIgJiYKKwlzdm5fY21kIGNvbW1pdCAtbSAiYnllIG5vdyIgJiYKIAljZCAuLgogCScKIApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBkZWxldGVkIHBhcmVudCcgJwotICAgICAgICAoc3ZuIGNwIC1tICJyZXN1cnJlY3RpbmcgdHJ1bmsgYXMganVuayIgXAorICAgICAgICAoc3ZuX2NtZCBjcCAtbSAicmVzdXJyZWN0aW5nIHRydW5rIGFzIGp1bmsiIFwKICAgICAgICAgICAgICAgICIkc3ZucmVwbyIvdHJ1bmtAMiAiJHN2bnJlcG8iL2p1bmsgfHwKICAgICAgICAgIHN2biBjcCAtbSAicmVzdXJyZWN0aW5nIHRydW5rIGFzIGp1bmsiIFwKICAgICAgICAgICAgICAgIC1yMiAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvanVuaykgJiYKQEAgLTk3LDggKzk3LDggQEAKICAgICAgICAgJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgZGVsZXRlZCBkaXJlY3RvcnknICcKLQlzdm4gbXYgLW0gImJ5ZSEiICIkc3ZucmVwbyIvZ2xvYi9ibG9iL2hpICIkc3ZucmVwbyIvZ2xvYi9ibG9iL2J5ZSAmJgotCXN2biBybSAtbSAicmVtb3ZlIGdsb2IiICIkc3ZucmVwbyIvZ2xvYiAmJgorCXN2bl9jbWQgbXYgLW0gImJ5ZSEiICIkc3ZucmVwbyIvZ2xvYi9ibG9iL2hpICIkc3ZucmVwbyIvZ2xvYi9ibG9iL2J5ZSAmJgorCXN2bl9jbWQgcm0gLW0gInJlbW92ZSBnbG9iIiAiJHN2bnJlcG8iL2dsb2IgJiYKIAlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgZ2xvYiAiJHN2bnJlcG8iL2dsb2IgJiYKIAlnaXQgc3ZuIGZldGNoIC1pIGdsb2IgJiYKIAl0ZXN0ICJgZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9yZW1vdGVzL2dsb2I6YmxvYi9ieWVgIiA9IGhpICYmCkBAIC0xMjAsNyArMTIwLDcgQEAKIAljZCBpbXBvcnQgJiYKIAkgIHN2biBpbXBvcnQgLW0gInI5MjcwIHRlc3QiIC4gIiRzdm5yZXBvIi9yOTI3MCAmJgogCWNkIC4uICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIvcjkyNzAvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwgcjkyNzAgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvcjkyNzAvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwgcjkyNzAgJiYKIAljZCByOTI3MCAmJgogCSAgc3ZuIG1rZGlyIG5hdGl2ZSAmJgogCSAgc3ZuIG12IHQgbmF0aXZlL3QgJiYKQEAgLTEzOCw3ICsxMzgsNyBAQAogCScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAidHJhY2sgaW5pdGlhbCBjaGFuZ2UgaWYgaXQgd2FzIG9ubHkgbWFkZSB0byBwYXJlbnQiICcKLQlzdm4gY3AgLW0gIndoZWVlISIgIiRzdm5yZXBvIi9yOTI3MC90cnVuayAiJHN2bnJlcG8iL3I5MjcwL2RydW5rICYmCisJc3ZuX2NtZCBjcCAtbSAid2hlZWUhIiAiJHN2bnJlcG8iL3I5MjcwL3RydW5rICIkc3ZucmVwbyIvcjkyNzAvZHJ1bmsgJiYKIAlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgcjkyNzAtZCBcCiAJICAiJHN2bnJlcG8iL3I5MjcwL2RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL25hdGl2ZS90ICYmCiAJZ2l0IHN2biBmZXRjaCAtaSByOTI3MC1kICYmCkBAIC0xNTIsMjAgKzE1MiwyMCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9sbG93LXBhcmVudCBpcyBhdG9taWMiICcKIAkoCiAJCWNkIHdjICYmCi0JCXN2biB1cCAmJgotCQlzdm4gbWtkaXIgc3R1bmsgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIG1rZGlyIHN0dW5rICYmCiAJCWVjaG8gInRydW5rIHN0dW5rIiA+IHN0dW5rL3JlYWRtZSAmJgotCQlzdm4gYWRkIHN0dW5rL3JlYWRtZSAmJgotCQlzdm4gY2kgLW0gInRydW5rIHN0dW5rIiAmJgorCQlzdm5fY21kIGFkZCBzdHVuay9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAidHJ1bmsgc3R1bmsiICYmCiAJCWVjaG8gInN0dW5rIGxpa2UganVuayIgPj4gc3R1bmsvcmVhZG1lICYmCi0JCXN2biBjaSAtbSAicmVhbGx5IHN0dW5rIiAmJgorCQlzdm5fY21kIGNpIC1tICJyZWFsbHkgc3R1bmsiICYmCiAJCWVjaG8gInN0aW5rIHN0YW5rIHN0dW5rIiA+PiBzdHVuay9yZWFkbWUgJiYKLQkJc3ZuIGNpIC1tICJldmVuIHRoZSBncmluY2ggYWdyZWVzIgorCQlzdm5fY21kIGNpIC1tICJldmVuIHRoZSBncmluY2ggYWdyZWVzIgogCSkgJiYKLQlzdm4gY29weSAtbSAic3R1bmsgZmx1bmtlZCIgIiRzdm5yZXBvIi9zdHVuayAiJHN2bnJlcG8iL2ZsdW5rICYmCisJc3ZuX2NtZCBjb3B5IC1tICJzdHVuayBmbHVua2VkIiAiJHN2bnJlcG8iL3N0dW5rICIkc3ZucmVwbyIvZmx1bmsgJiYKIAl7IHN2biBjcCAtbSAiZWFybHkgc3R1bmsgZmx1bmtlZCB0b28iIFwKIAkJIiRzdm5yZXBvIi9zdHVua0AxNyAiJHN2bnJlcG8iL2ZsdW5rZWQgfHwKLQlzdm4gY3AgLW0gImVhcmx5IHN0dW5rIGZsdW5rZWQgdG9vIiBcCisJc3ZuX2NtZCBjcCAtbSAiZWFybHkgc3R1bmsgZmx1bmtlZCB0b28iIFwKIAkJLXIxNyAiJHN2bnJlcG8iL3N0dW5rICIkc3ZucmVwbyIvZmx1bmtlZDsgfSAmJgogCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBzdHVuayAiJHN2bnJlcG8iL3N0dW5rICYmCiAJZ2l0IHN2biBmZXRjaCAtaSBzdHVuayAmJgpAQCAtMTkyLDcgKzE5Miw3IEBACiAJJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0cmFjayBtdWx0aS1wYXJlbnQgcGF0aHMiICcKLQlzdm4gY3AgLW0gInJlc3VycmVjdCAvZ2xvYiIgIiRzdm5yZXBvIi9yOTI3MCAiJHN2bnJlcG8iL2dsb2IgJiYKKwlzdm5fY21kIGNwIC1tICJyZXN1cnJlY3QgL2dsb2IiICIkc3ZucmVwbyIvcjkyNzAgIiRzdm5yZXBvIi9nbG9iICYmCiAJZ2l0IHN2biBtdWx0aS1mZXRjaCAmJgogCXRlc3QgYGdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2dsb2IgfCBcCiAJICAgICAgIGdyZXAgIl5wYXJlbnQgIiB8IHdjIC1sYCAtZXEgMgpkaWZmIC0tZ2l0IGEvdC90OTEwNS1naXQtc3ZuLWNvbW1pdC1kaWZmLnNoIGIvdC90OTEwNS1naXQtc3ZuLWNvbW1pdC1kaWZmLnNoCmluZGV4IGJhOTlhYmIuLmRkNDhlOWMgMTAwNzU1Ci0tLSBhL3QvdDkxMDUtZ2l0LXN2bi1jb21taXQtZGlmZi5zaAorKysgYi90L3Q5MTA1LWdpdC1zdm4tY29tbWl0LWRpZmYuc2gKQEAgLTgsNyArOCw3IEBACiAJbWtkaXIgaW1wb3J0ICYmCiAJY2QgaW1wb3J0ICYmCiAJZWNobyBoZWxsbyA+IHJlYWRtZSAmJgotCXN2biBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKIAljZCAuLiAmJgogCWVjaG8gaGVsbG8gPiByZWFkbWUgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHJlYWRtZSAmJgpAQCAtMjcsMTYgKzI3LDE2IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRoZSBjb21taXQtZGlmZiBjb21tYW5kJyAnCiAJdGVzdCAtbiAiJHByZXYiICYmIHRlc3QgLW4gIiRoZWFkIiAmJgogCWdpdCBzdm4gY29tbWl0LWRpZmYgLXIxICIkcHJldiIgIiRoZWFkIiAiJHN2bnJlcG8iICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIgd2MgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgd2MgJiYKIAljbXAgcmVhZG1lIHdjL3JlYWRtZQogCScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0LWRpZmYgdG8gYSBzdWItZGlyZWN0b3J5ICh3aXRoIGdpdCBzdm4gY29uZmlnKScgJwotCXN2biBpbXBvcnQgLW0gInN1Yi1kaXJlY3RvcnkiIGltcG9ydCAiJHN2bnJlcG8iL3N1YmRpciAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJzdWItZGlyZWN0b3J5IiBpbXBvcnQgIiRzdm5yZXBvIi9zdWJkaXIgJiYKIAlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgIiRzdm5yZXBvIi9zdWJkaXIgJiYKIAlnaXQgc3ZuIGZldGNoICYmCiAJZ2l0IHN2biBjb21taXQtZGlmZiAtcjMgIiRwcmV2IiAiJGhlYWQiICYmCi0Jc3ZuIGNhdCAiJHN2bnJlcG8iL3N1YmRpci9yZWFkbWUgPiByZWFkbWUuMiAmJgorCXN2bl9jbWQgY2F0ICIkc3ZucmVwbyIvc3ViZGlyL3JlYWRtZSA+IHJlYWRtZS4yICYmCiAJY21wIHJlYWRtZSByZWFkbWUuMgogCScKIApkaWZmIC0tZ2l0IGEvdC90OTEwNi1naXQtc3ZuLWNvbW1pdC1kaWZmLWNsb2JiZXIuc2ggYi90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaAppbmRleCA2ZWIwZmQ4Li4xMmYyMWI3IDEwMDc1NQotLS0gYS90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaAorKysgYi90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaApAQCAtOCwxOCArOCwxOCBAQAogCW1rZGlyIGltcG9ydCAmJgogCWNkIGltcG9ydCAmJgogCWVjaG8gaW5pdGlhbCA+IGZpbGUgJiYKLQlzdm4gaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCiAJY2QgLi4gJiYKIAllY2hvIGluaXRpYWwgPiBmaWxlICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSAiaW5pdGlhbCIKIAknCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgY2hhbmdlIGZyb20gc3ZuIHNpZGUnICcKLQlzdm4gY28gIiRzdm5yZXBvIiB0LnN2biAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB0LnN2biAmJgogCWNkIHQuc3ZuICYmCiAJZWNobyBzZWNvbmQgbGluZSBmcm9tIHN2biA+PiBmaWxlICYmCiAJcG9rZSBmaWxlICYmCi0Jc3ZuIGNvbW1pdCAtbSAic2Vjb25kIGxpbmUgZnJvbSBzdm4iICYmCisJc3ZuX2NtZCBjb21taXQgLW0gInNlY29uZCBsaW5lIGZyb20gc3ZuIiAmJgogCWNkIC4uICYmCiAJcm0gLXJmIHQuc3ZuCiAJJwpAQCAtNDMsMTEgKzQzLDExIEBACiAJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKIAlnaXQgc3ZuIGZldGNoICYmCiAJZ2l0IHJlc2V0IC0taGFyZCByZWZzLyR7cmVtb3Rlc19naXRfc3ZufSAmJgotCXN2biBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCiAJY2QgdC5zdm4gJiYKIAllY2hvIGZvdXJ0aCBsaW5lIGZyb20gc3ZuID4+IGZpbGUgJiYKIAlwb2tlIGZpbGUgJiYKLQlzdm4gY29tbWl0IC1tICJmb3VydGggbGluZSBmcm9tIHN2biIgJiYKKwlzdm5fY21kIGNvbW1pdCAtbSAiZm91cnRoIGxpbmUgZnJvbSBzdm4iICYmCiAJY2QgLi4gJiYKIAlybSAtcmYgdC5zdm4gJiYKIAllY2hvICJmb3VydGggbGluZSBmcm9tIGdpdCIgPj4gZmlsZSAmJgpAQCAtNjcsMTEgKzY3LDExIEBACiAJIgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgYW5vdGhlciBjaGFuZ2UgZnJvbSBzdm4gc2lkZScgJwotCXN2biBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCiAJY2QgdC5zdm4gJiYKIAkJZWNobyB0aGlyZCBsaW5lIGZyb20gc3ZuID4+IGZpbGUgJiYKIAkJcG9rZSBmaWxlICYmCi0JCXN2biBjb21taXQgLW0gInRoaXJkIGxpbmUgZnJvbSBzdm4iICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0aGlyZCBsaW5lIGZyb20gc3ZuIiAmJgogCWNkIC4uICYmCiAJcm0gLXJmIHQuc3ZuCiAJJwpkaWZmIC0tZ2l0IGEvdC90OTEwNy1naXQtc3ZuLW1pZ3JhdGUuc2ggYi90L3Q5MTA3LWdpdC1zdm4tbWlncmF0ZS5zaAppbmRleCBhY2FkMTZhLi4zYTllMDc3IDEwMDc1NQotLS0gYS90L3Q5MTA3LWdpdC1zdm4tbWlncmF0ZS5zaAorKysgYi90L3Q5MTA3LWdpdC1zdm4tbWlncmF0ZS5zaApAQCAtMTIsNyArMTIsNyBAQAogCQkJbWtkaXIgLXAgJGkgJiYgXAogCQkJZWNobyBoZWxsbyA+PiAkaS9SRUFETUUgfHwgZXhpdCAxCiAJCWRvbmUgJiYgXAotCQlzdm4gaW1wb3J0IC1tIHRlc3QgLiAiJHN2bnJlcG8iCisJCXN2bl9jbWQgaW1wb3J0IC1tIHRlc3QgLiAiJHN2bnJlcG8iCiAJCWNkIC4uICYmCiAJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKIAlnaXQgc3ZuIGZldGNoICYmCmRpZmYgLS1naXQgYS90L3Q5MTA4LWdpdC1zdm4tZ2xvYi5zaCBiL3QvdDkxMDgtZ2l0LXN2bi1nbG9iLnNoCmluZGV4IGQ4NTgyYjEuLmQ3MzJkMzEgMTAwNzU1Ci0tLSBhL3QvdDkxMDgtZ2l0LXN2bi1nbG9iLnNoCisrKyBiL3QvdDkxMDgtZ2l0LXN2bi1nbG9iLnNoCkBAIC0xNCwzMCArMTQsMzAgQEAKIAlta2RpciAtcCB0cnVuay9zcmMvYSB0cnVuay9zcmMvYiB0cnVuay9kb2MgJiYKIAllY2hvICJoZWxsbyB3b3JsZCIgPiB0cnVuay9zcmMvYS9yZWFkbWUgJiYKIAllY2hvICJnb29kYnllIHdvcmxkIiA+IHRydW5rL3NyYy9iL3JlYWRtZSAmJgotCXN2biBpbXBvcnQgLW0gImluaXRpYWwiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsgJiYKLQlzdm4gY28gIiRzdm5yZXBvIiB0bXAgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgdHJ1bmsgIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB0bXAgJiYKIAkoCiAJCWNkIHRtcCAmJgogCQlta2RpciBicmFuY2hlcyB0YWdzICYmCi0JCXN2biBhZGQgYnJhbmNoZXMgdGFncyAmJgotCQlzdm4gY3AgdHJ1bmsgYnJhbmNoZXMvc3RhcnQgJiYKLQkJc3ZuIGNvbW1pdCAtbSAic3RhcnQgYSBuZXcgYnJhbmNoIiAmJgotCQlzdm4gdXAgJiYKKwkJc3ZuX2NtZCBhZGQgYnJhbmNoZXMgdGFncyAmJgorCQlzdm5fY21kIGNwIHRydW5rIGJyYW5jaGVzL3N0YXJ0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJzdGFydCBhIG5ldyBicmFuY2giICYmCisJCXN2bl9jbWQgdXAgJiYKIAkJZWNobyAiaGkiID4+IGJyYW5jaGVzL3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIGJyYW5jaGVzL3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgogCQllY2hvICJoZXkiID4+IGJyYW5jaGVzL3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgogCQlwb2tlIGJyYW5jaGVzL3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICJoaSIgJiYKLQkJc3ZuIHVwICYmCi0JCXN2biBjcCBicmFuY2hlcy9zdGFydCB0YWdzL2VuZCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiaGkiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBjcCBicmFuY2hlcy9zdGFydCB0YWdzL2VuZCAmJgogCQllY2hvICJieWUiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgogCQllY2hvICJheWUiID4+IHRhZ3MvZW5kL3NyYy9hL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvZW5kL3NyYy9hL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICJ0aGUgZW5kIiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidGhlIGVuZCIgJiYKIAkJZWNobyAiYnllYnllIiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAibm90aGluZyB0byBzZWUgaGVyZSIKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm5vdGhpbmcgdG8gc2VlIGhlcmUiCiAJKSAmJgogCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4udXJsICIkc3ZucmVwbyIgJiYKIAlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKQEAgLTcyLDcgKzcyLDcgQEAKIAkJY2QgdG1wICYmCiAJCWVjaG8gInRyeSB0cnkiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgorCQlzdm5fY21kIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKIAkpICYmCiAJZ2l0IHN2biBmZXRjaCB0d28gJiYKIAl0ZXN0IGBnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZCB8IHdjIC1sYCAtZXEgNiAmJgpAQCAtMTAyLDcgKzEwMiw3IEBACiAJCWNkIHRtcCAmJgogCQllY2hvICJ0cnkgdHJ5IiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCiAJKSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZmV0Y2ggdGhyZWUgMj4gc3RkZXJyLnRocmVlICYmCiAJdGVzdF9jbXAgZXhwZWN0LnRocmVlIHN0ZGVyci50aHJlZQpkaWZmIC0tZ2l0IGEvdC90OTEwOS1naXQtc3ZuLW11bHRpLWdsb2Iuc2ggYi90L3Q5MTA5LWdpdC1zdm4tbXVsdGktZ2xvYi5zaAppbmRleCA4Zjc5YzNmLi5jMzE4ZjlmIDEwMDc1NQotLS0gYS90L3Q5MTA5LWdpdC1zdm4tbXVsdGktZ2xvYi5zaAorKysgYi90L3Q5MTA5LWdpdC1zdm4tbXVsdGktZ2xvYi5zaApAQCAtMTQsMzAgKzE0LDMwIEBACiAJbWtkaXIgLXAgdHJ1bmsvc3JjL2EgdHJ1bmsvc3JjL2IgdHJ1bmsvZG9jICYmCiAJZWNobyAiaGVsbG8gd29ybGQiID4gdHJ1bmsvc3JjL2EvcmVhZG1lICYmCiAJZWNobyAiZ29vZGJ5ZSB3b3JsZCIgPiB0cnVuay9zcmMvYi9yZWFkbWUgJiYKLQlzdm4gaW1wb3J0IC1tICJpbml0aWFsIiB0cnVuayAiJHN2bnJlcG8iL3RydW5rICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIgdG1wICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdG1wICYmCiAJKAogCQljZCB0bXAgJiYKIAkJbWtkaXIgYnJhbmNoZXMgYnJhbmNoZXMvdjEgdGFncyAmJgotCQlzdm4gYWRkIGJyYW5jaGVzIHRhZ3MgJiYKLQkJc3ZuIGNwIHRydW5rIGJyYW5jaGVzL3YxL3N0YXJ0ICYmCi0JCXN2biBjb21taXQgLW0gInN0YXJ0IGEgbmV3IGJyYW5jaCIgJiYKLQkJc3ZuIHVwICYmCisJCXN2bl9jbWQgYWRkIGJyYW5jaGVzIHRhZ3MgJiYKKwkJc3ZuX2NtZCBjcCB0cnVuayBicmFuY2hlcy92MS9zdGFydCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAic3RhcnQgYSBuZXcgYnJhbmNoIiAmJgorCQlzdm5fY21kIHVwICYmCiAJCWVjaG8gImhpIiA+PiBicmFuY2hlcy92MS9zdGFydC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSBicmFuY2hlcy92MS9zdGFydC9zcmMvYi9yZWFkbWUgJiYKIAkJZWNobyAiaGV5IiA+PiBicmFuY2hlcy92MS9zdGFydC9zcmMvYS9yZWFkbWUgJiYKIAkJcG9rZSBicmFuY2hlcy92MS9zdGFydC9zcmMvYS9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiaGkiICYmCi0JCXN2biB1cCAmJgotCQlzdm4gY3AgYnJhbmNoZXMvdjEvc3RhcnQgdGFncy9lbmQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImhpIiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvdjEvc3RhcnQgdGFncy9lbmQgJiYKIAkJZWNobyAiYnllIiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKIAkJZWNobyAiYXllIiA+PiB0YWdzL2VuZC9zcmMvYS9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL2VuZC9zcmMvYS9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAidGhlIGVuZCIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRoZSBlbmQiICYmCiAJCWVjaG8gImJ5ZWJ5ZSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gIm5vdGhpbmcgdG8gc2VlIGhlcmUiCisJCXN2bl9jbWQgY29tbWl0IC1tICJub3RoaW5nIHRvIHNlZSBoZXJlIgogCSkgJiYKIAlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnVybCAiJHN2bnJlcG8iICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCkBAIC03Miw3ICs3Miw3IEBACiAJCWNkIHRtcCAmJgogCQllY2hvICJ0cnkgdHJ5IiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCiAJKSAmJgogCWdpdCBzdm4gZmV0Y2ggdHdvICYmCiAJdGVzdCBgZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmQgfCB3YyAtbGAgLWVxIDYgJiYKQEAgLTk3LDI1ICs5NywyNSBAQAogCSgKIAkJY2QgdG1wICYmCiAJCW1rZGlyIGJyYW5jaGVzL3YyICYmCi0JCXN2biBhZGQgYnJhbmNoZXMvdjIgJiYKLQkJc3ZuIGNwIHRydW5rIGJyYW5jaGVzL3YyL3N0YXJ0ICYmCi0JCXN2biBjb21taXQgLW0gIkFub3RoZXIgdmVyc2lvbmVkIGJyYW5jaCIgJiYKLQkJc3ZuIHVwICYmCisJCXN2bl9jbWQgYWRkIGJyYW5jaGVzL3YyICYmCisJCXN2bl9jbWQgY3AgdHJ1bmsgYnJhbmNoZXMvdjIvc3RhcnQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkFub3RoZXIgdmVyc2lvbmVkIGJyYW5jaCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgogCQllY2hvICJoZWxsbyIgPj4gYnJhbmNoZXMvdjIvc3RhcnQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgYnJhbmNoZXMvdjIvc3RhcnQvc3JjL2IvcmVhZG1lICYmCiAJCWVjaG8gImhvd2R5IiA+PiBicmFuY2hlcy92Mi9zdGFydC9zcmMvYS9yZWFkbWUgJiYKIAkJcG9rZSBicmFuY2hlcy92Mi9zdGFydC9zcmMvYS9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiQ2hhbmdlZCAyIGluIHYyL3N0YXJ0IiAmJgotCQlzdm4gdXAgJiYKLQkJc3ZuIGNwIGJyYW5jaGVzL3YyL3N0YXJ0IHRhZ3MvbmV4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiQ2hhbmdlZCAyIGluIHYyL3N0YXJ0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvdjIvc3RhcnQgdGFncy9uZXh0ICYmCiAJCWVjaG8gImJ5ZSIgPj4gdGFncy9uZXh0L3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKIAkJZWNobyAiYXllIiA+PiB0YWdzL25leHQvc3JjL2EvcmVhZG1lICYmCiAJCXBva2UgdGFncy9uZXh0L3NyYy9hL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICJhZGRpbmcgbW9yZSIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImFkZGluZyBtb3JlIiAmJgogCQllY2hvICJieWVieWUiID4+IHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL25leHQvc3JjL2IvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gImFkaW9zIgorCQlzdm5fY21kIGNvbW1pdCAtbSAiYWRpb3MiCiAJKSAmJgogCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLnVybCAiJHN2bnJlcG8iICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZvdXIuZmV0Y2ggdHJ1bms6cmVmcy9yZW1vdGVzL2ZvdXIvdHJ1bmsgJiYKQEAgLTE1MSw3ICsxNTEsNyBAQAogCQljZCB0bXAgJiYKIAkJZWNobyAidHJ5IHRyeSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gInRyeSB0byB0cnkiCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgogCSkgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGZldGNoIHRocmVlIDI+IHN0ZGVyci50aHJlZSAmJgogCXRlc3RfY21wIGV4cGVjdC50aHJlZSBzdGRlcnIudGhyZWUKZGlmZiAtLWdpdCBhL3QvdDkxMTMtZ2l0LXN2bi1kY29tbWl0LW5ldy1maWxlLnNoIGIvdC90OTExMy1naXQtc3ZuLWRjb21taXQtbmV3LWZpbGUuc2gKaW5kZXggZTliNjEyOC4uZTg0NzljZSAxMDA3NTUKLS0tIGEvdC90OTExMy1naXQtc3ZuLWRjb21taXQtbmV3LWZpbGUuc2gKKysrIGIvdC90OTExMy1naXQtc3ZuLWRjb21taXQtbmV3LWZpbGUuc2gKQEAgLTE1LDcgKzE1LDcgQEAKIHJlcXVpcmVfc3Zuc2VydmUKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgdHJhY2tpbmcgYW4gZW1wdHkgcmVwbycgJwotCXN2biBta2RpciAtbSAiZW1wdHkgZGlyIiAiJHN2bnJlcG8iL2VtcHR5LWRpciAmJgorCXN2bl9jbWQgbWtkaXIgLW0gImVtcHR5IGRpciIgIiRzdm5yZXBvIi9lbXB0eS1kaXIgJiYKIAllY2hvICJbZ2VuZXJhbF0iID4gIiRyYXdzdm5yZXBvIi9jb25mL3N2bnNlcnZlLmNvbmYgJiYKIAllY2hvIGFub24tYWNjZXNzID0gd3JpdGUgPj4gIiRyYXdzdm5yZXBvIi9jb25mL3N2bnNlcnZlLmNvbmYgJiYKIAlzdGFydF9zdm5zZXJ2ZSAmJgpkaWZmIC0tZ2l0IGEvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2ggYi90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaAppbmRleCAxN2IyODU1Li44NGY3YzliIDEwMDc1NQotLS0gYS90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaAorKysgYi90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaApAQCAtMzUsMTIgKzM1LDEyIEBACiB9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2biByZXBvc2l0b3J5JyAnCi0Jc3ZuIGNvICIkc3ZucmVwbyIgbXlzdm53b3JrICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIG15c3Zud29yayAmJgogCW1rZGlyIC1wIG15c3Zud29yay90cnVuayAmJgogCWNkIG15c3Zud29yayAmJgogCQliaWdfdGV4dF9ibG9jayA+PiB0cnVuay9SRUFETUUgJiYKLQkJc3ZuIGFkZCB0cnVuayAmJgotCQlzdm4gY2kgLW0gImZpcnN0IGNvbW1pdCIgdHJ1bmsgJiYKKwkJc3ZuX2NtZCBhZGQgdHJ1bmsgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiZmlyc3QgY29tbWl0IiB0cnVuayAmJgogCQljZCAuLgogCScKIApkaWZmIC0tZ2l0IGEvdC90OTExNi1naXQtc3ZuLWxvZy5zaCBiL3QvdDkxMTYtZ2l0LXN2bi1sb2cuc2gKaW5kZXggZmQ2ZDFkMi4uMDM3NGE3NCAxMDA3NTUKLS0tIGEvdC90OTExNi1naXQtc3ZuLWxvZy5zaAorKysgYi90L3Q5MTE2LWdpdC1zdm4tbG9nLnNoCkBAIC0xNCw3ICsxNCw3IEBACiAJCQlta2RpciAtcCAkaSAmJiBcCiAJCQllY2hvIGhlbGxvID4+ICRpL1JFQURNRSB8fCBleGl0IDEKIAkJZG9uZSAmJiBcCi0JCXN2biBpbXBvcnQgLW0gdGVzdCAuICIkc3ZucmVwbyIKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gdGVzdCAuICIkc3ZucmVwbyIKIAkJY2QgLi4gJiYKIAlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAtVCB0cnVuayAtYiBicmFuY2hlcyAtdCB0YWdzICYmCiAJZ2l0IHN2biBmZXRjaCAmJgpkaWZmIC0tZ2l0IGEvdC90OTExNy1naXQtc3ZuLWluaXQtY2xvbmUuc2ggYi90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaAppbmRleCBkZGU0NmNkLi5iN2VmOWUyIDEwMDc1NQotLS0gYS90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaAorKysgYi90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaApAQCAtMTYsNyArMTYsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJwogCW1rZGlyIHByb2plY3QgcHJvamVjdC90cnVuayBwcm9qZWN0L2JyYW5jaGVzIHByb2plY3QvdGFncyAmJgogCWVjaG8gZm9vID4gcHJvamVjdC90cnVuay9mb28gJiYKLQlzdm4gaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8iL3Byb2plY3QgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvIi9wcm9qZWN0ICYmCiAJcm0gLXJmIHByb2plY3QKIAknCiAKZGlmZiAtLWdpdCBhL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2ggYi90L3Q5MTE4LWdpdC1zdm4tZnVua3ktYnJhbmNoLW5hbWVzLnNoCmluZGV4IDdhN2MxMjguLmFjNTJiZmYgMTAwNzU1Ci0tLSBhL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2gKKysrIGIvdC90OTExOC1naXQtc3ZuLWZ1bmt5LWJyYW5jaC1uYW1lcy5zaApAQCAtMTMsMTMgKzEzLDEzIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCiAJbWtkaXIgcHJvamVjdCBwcm9qZWN0L3RydW5rIHByb2plY3QvYnJhbmNoZXMgcHJvamVjdC90YWdzICYmCiAJZWNobyBmb28gPiBwcm9qZWN0L3RydW5rL2ZvbyAmJgotCXN2biBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wciBqZWN0IiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8vcHIgamVjdCIgJiYKIAlybSAtcmYgcHJvamVjdCAmJgotCXN2biBjcCAtbSAiZnVuIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCXN2bl9jbWQgY3AgLW0gImZ1biIgIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmsiIFwKIAkgICAgICAgICAgICAgICAgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgJiYKLQlzdm4gY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgXAorCXN2bl9jbWQgY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgXAogCSAgICAgICAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9tb3JlIGZ1biBwbHVnaW4hIiAmJgotCXN2biBjcCAtbSAic2NhcnkiICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL2Z1biBwbHVnaW4iIFwKKwlzdm5fY21kIGNwIC1tICJzY2FyeSIgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgXAogCSAgICAgICAgICAgICAgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvJHNjYXJ5X3VyaSIgJiYKIAlzdGFydF9odHRwZAogCScKZGlmZiAtLWdpdCBhL3QvdDkxMTktZ2l0LXN2bi1pbmZvLnNoIGIvdC90OTExOS1naXQtc3ZuLWluZm8uc2gKaW5kZXggMjdkZDdjMi4uOTU3NDFjYiAxMDA3NTUKLS0tIGEvdC90OTExOS1naXQtc3ZuLWluZm8uc2gKKysrIGIvdC90OTExOS1naXQtc3ZuLWluZm8uc2gKQEAgLTcsNyArNyw3IEBACiAuIC4vbGliLWdpdC1zdm4uc2gKIAogIyBUZXN0ZWQgd2l0aDogc3ZuLCB2ZXJzaW9uIDEuNC40IChyMjUxODgpCi12PWBzdm4gLS12ZXJzaW9uIHwgc2VkIC1uIC1lICdzL15zdm4sIHZlcnNpb24gXCgxXC5bMC05XSpcLlswLTldKlwpLiokL1wxL3AnYAordj1gc3ZuX2NtZCAtLXZlcnNpb24gfCBzZWQgLW4gLWUgJ3MvXnN2biwgdmVyc2lvbiBcKDFcLlswLTldKlwuWzAtOV0qXCkuKiQvXDEvcCdgCiBjYXNlICR2IGluCiAxLls0NV0uKikKIAk7OwpAQCAtMzEsNyArMzEsNyBAQAogCQkJbXkgJGF0aW1lID0gJG10aW1lOwogCQkJdXRpbWUgJGF0aW1lLCAkbXRpbWUsICRnaXRfZmlsZTsKIAkJfQotCScgImBzdm4gaW5mbyAkMiB8IGdyZXAgJ15UZXh0IExhc3QgVXBkYXRlZDonYCIgIiQxIgorCScgImBzdm5fY21kIGluZm8gJDIgfCBncmVwICdeVGV4dCBMYXN0IFVwZGF0ZWQ6J2AiICIkMSIKIH0KIAogcXVvdGVkX3N2bnJlcG89IiQoZWNobyAkc3ZucmVwbyB8IHNlZCAncy8gLyUyMC8nKSIKQEAgLTQ1LDE0ICs0NSwxNCBAQAogCQlta2RpciBkaXJlY3RvcnkgJiYKIAkJdG91Y2ggZGlyZWN0b3J5Ly5wbGFjZWhvbGRlciAmJgogCQlsbiAtcyBkaXJlY3Rvcnkgc3ltbGluay1kaXJlY3RvcnkgJiYKLQkJc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKIAljZCAuLiAmJgotCXN2biBjbyAiJHN2bnJlcG8iIHN2bndjICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHN2bndjICYmCiAJY2Qgc3Zud2MgJiYKIAkJZWNobyBmb28gPiBmb28gJiYKLQkJc3ZuIGFkZCBmb28gJiYKLQkJc3ZuIGNvbW1pdCAtbSAiY2hhbmdlIG91dHNpZGUgZGlyZWN0b3J5IiAmJgotCQlzdm4gdXBkYXRlICYmCisJCXN2bl9jbWQgYWRkIGZvbyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY2hhbmdlIG91dHNpZGUgZGlyZWN0b3J5IiAmJgorCQlzdm5fY21kIHVwZGF0ZSAmJgogCWNkIC4uICYmCiAJbWtkaXIgZ2l0d2MgJiYKIAljZCBnaXR3YyAmJgpAQCAtMTQzLDcgKzE0Myw3IEBACiAJY3AgZ2l0d2MvYWRkZWQtZmlsZSBzdm53Yy9hZGRlZC1maWxlICYmCiAJcHRvdWNoIGdpdHdjL2FkZGVkLWZpbGUgc3Zud2MvYWRkZWQtZmlsZSAmJgogCWNkIHN2bndjICYmCi0JCXN2biBhZGQgYWRkZWQtZmlsZSA+IC9kZXYvbnVsbCAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1maWxlID4gL2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAkoY2Qgc3Zud2M7IHN2biBpbmZvIGFkZGVkLWZpbGUpID4gZXhwZWN0ZWQuaW5mby1hZGRlZC1maWxlICYmCiAJKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gYWRkZWQtZmlsZSkgPiBhY3R1YWwuaW5mby1hZGRlZC1maWxlICYmCkBAIC0xNjAsNyArMTYwLDcgQEAKIAlwdG91Y2ggZ2l0d2MvYWRkZWQtZGlyZWN0b3J5IHN2bndjL2FkZGVkLWRpcmVjdG9yeSAmJgogCXRvdWNoIGdpdHdjL2FkZGVkLWRpcmVjdG9yeS8ucGxhY2Vob2xkZXIgJiYKIAljZCBzdm53YyAmJgotCQlzdm4gYWRkIGFkZGVkLWRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1kaXJlY3RvcnkgPiAvZGV2L251bGwgJiYKIAljZCAuLiAmJgogCWNkIGdpdHdjICYmCiAJCWdpdCBhZGQgYWRkZWQtZGlyZWN0b3J5ICYmCkBAIC0xODQsNyArMTg0LDcgQEAKIAljZCAuLiAmJgogCWNkIHN2bndjICYmCiAJCWxuIC1zIGFkZGVkLWZpbGUgYWRkZWQtc3ltbGluay1maWxlICYmCi0JCXN2biBhZGQgYWRkZWQtc3ltbGluay1maWxlID4gL2Rldi9udWxsICYmCisJCXN2bl9jbWQgYWRkIGFkZGVkLXN5bWxpbmstZmlsZSA+IC9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJcHRvdWNoIGdpdHdjL2FkZGVkLXN5bWxpbmstZmlsZSBzdm53Yy9hZGRlZC1zeW1saW5rLWZpbGUgJiYKIAkoY2Qgc3Zud2M7IHN2biBpbmZvIGFkZGVkLXN5bWxpbmstZmlsZSkgXApAQCAtMjA3LDcgKzIwNyw3IEBACiAJY2QgLi4gJiYKIAljZCBzdm53YyAmJgogCQlsbiAtcyBhZGRlZC1kaXJlY3RvcnkgYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKLQkJc3ZuIGFkZCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJcHRvdWNoIGdpdHdjL2FkZGVkLXN5bWxpbmstZGlyZWN0b3J5IHN2bndjL2FkZGVkLXN5bWxpbmstZGlyZWN0b3J5ICYmCiAJKGNkIHN2bndjOyBzdm4gaW5mbyBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSkgXApAQCAtMjMzLDcgKzIzMyw3IEBACiAJCWdpdCBybSAtZiBmaWxlID4gL2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAljZCBzdm53YyAmJgotCQlzdm4gcm0gLS1mb3JjZSBmaWxlID4gL2Rldi9udWxsICYmCisJCXN2bl9jbWQgcm0gLS1mb3JjZSBmaWxlID4gL2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAkoY2Qgc3Zud2M7IHN2biBpbmZvIGZpbGUpIHwKIAlzZWQgLWUgJ3MvXlwoVGV4dCBMYXN0IFVwZGF0ZWQ6XCkuKi9cMSBURVhULUxBU1QtVVBEQVRFRC1TVFJJTkcvJyBcCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJZ2l0IHJtIC1yIC1mIGRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJY2Qgc3Zud2MgJiYKLQkJc3ZuIHJtIC0tZm9yY2UgZGlyZWN0b3J5ID4gL2Rldi9udWxsICYmCisJCXN2bl9jbWQgcm0gLS1mb3JjZSBkaXJlY3RvcnkgPiAvZGV2L251bGwgJiYKIAljZCAuLiAmJgogCShjZCBzdm53Yzsgc3ZuIGluZm8gZGlyZWN0b3J5KSB8CiAJc2VkIC1lICdzL15cKFRleHQgTGFzdCBVcGRhdGVkOlwpLiovXDEgVEVYVC1MQVNULVVQREFURUQtU1RSSU5HLycgXApAQCAtMjc1LDcgKzI3NSw3IEBACiAJCWdpdCBybSAtZiBzeW1saW5rLWZpbGUgPiAvZGV2L251bGwgJiYKIAljZCAuLiAmJgogCWNkIHN2bndjICYmCi0JCXN2biBybSAtLWZvcmNlIHN5bWxpbmstZmlsZSA+IC9kZXYvbnVsbCAmJgorCQlzdm5fY21kIHJtIC0tZm9yY2Ugc3ltbGluay1maWxlID4gL2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAkoY2Qgc3Zud2M7IHN2biBpbmZvIHN5bWxpbmstZmlsZSkgfAogCXNlZCAtZSAncy9eXChUZXh0IExhc3QgVXBkYXRlZDpcKS4qL1wxIFRFWFQtTEFTVC1VUERBVEVELVNUUklORy8nIFwKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCQlnaXQgcm0gLWYgc3ltbGluay1kaXJlY3RvcnkgPiAvZGV2L251bGwgJiYKIAljZCAuLiAmJgogCWNkIHN2bndjICYmCi0JCXN2biBybSAtLWZvcmNlIHN5bWxpbmstZGlyZWN0b3J5ID4gL2Rldi9udWxsICYmCisJCXN2bl9jbWQgcm0gLS1mb3JjZSBzeW1saW5rLWRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJKGNkIHN2bndjOyBzdm4gaW5mbyBzeW1saW5rLWRpcmVjdG9yeSkgfAogCXNlZCAtZSAncy9eXChUZXh0IExhc3QgVXBkYXRlZDpcKS4qL1wxIFRFWFQtTEFTVC1VUERBVEVELVNUUklORy8nIFwKZGlmZiAtLWdpdCBhL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaCBiL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaAppbmRleCBlZjJjMDUyLi5mMTU5YWI2IDEwMDc1NQotLS0gYS90L3Q5MTIwLWdpdC1zdm4tY2xvbmUtd2l0aC1wZXJjZW50LWVzY2FwZXMuc2gKKysrIGIvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoCkBAIC05LDIyICs5LDE3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCiAJbWtkaXIgcHJvamVjdCBwcm9qZWN0L3RydW5rIHByb2plY3QvYnJhbmNoZXMgcHJvamVjdC90YWdzICYmCiAJZWNobyBmb28gPiBwcm9qZWN0L3RydW5rL2ZvbyAmJgotCXN2biBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wciBqZWN0IiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8vcHIgamVjdCIgJiYKIAlybSAtcmYgcHJvamVjdCAmJgogCXN0YXJ0X2h0dHBkCiAnCiAKLWlmIHRlc3QgIiRTVk5fSFRUUERfUE9SVCIgPSAiIgotdGhlbgotCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3Rlc3QgY2xvbmUgd2l0aCBwZXJjZW50IGVzY2FwZXMgLSBuZWVkcyBTVk5fSFRUUERfUE9SVCBzZXQnICdmYWxzZScKLWVsc2UKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIHdpdGggcGVyY2VudCBlc2NhcGVzJyAnCi0JCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvL3ByJTIwamVjdCIgY2xvbmUgJiYKLQkJY2QgY2xvbmUgJiYKLQkJCWdpdCByZXYtcGFyc2UgcmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0gJiYKLQkJY2QgLi4KLQknCi1maQordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB3aXRoIHBlcmNlbnQgZXNjYXBlcycgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvL3ByJTIwamVjdCIgY2xvbmUgJiYKKwljZCBjbG9uZSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvJHtyZW1vdGVzX2dpdF9zdm59ICYmCisJY2QgLi4KKycKIAogc3RvcF9odHRwZAogCmRpZmYgLS1naXQgYS90L3Q5MTIyLWdpdC1zdm4tYXV0aG9yLnNoIGIvdC90OTEyMi1naXQtc3ZuLWF1dGhvci5zaAppbmRleCAxYjFjZjQ3Li4zMDAxM2I3IDEwMDc1NQotLS0gYS90L3Q5MTIyLWdpdC1zdm4tYXV0aG9yLnNoCisrKyBiL3QvdDkxMjItZ2l0LXN2bi1hdXRob3Iuc2gKQEAgLTQsMTIgKzQsMTIgQEAKIC4gLi9saWItZ2l0LXN2bi5zaAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm4gcmVwb3NpdG9yeScgJwotCXN2biBjaGVja291dCAiJHN2bnJlcG8iIHdvcmsuc3ZuICYmCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8iIHdvcmsuc3ZuICYmCiAJKAogCQljZCB3b3JrLnN2biAmJgogCQllY2hvID5maWxlCi0JCXN2biBhZGQgZmlsZQotCQlzdm4gY29tbWl0IC1tICJmaXJzdCBjb21taXQiIGZpbGUKKwkJc3ZuX2NtZCBhZGQgZmlsZQorCQlzdm5fY21kIGNvbW1pdCAtbSAiZmlyc3QgY29tbWl0IiBmaWxlCiAJKQogJwogCkBAIC03NCwxMCArNzQsMTAgQEAKIAkjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3ZuIGNvbW1pdCBtZXNzYWdlcyB3aXRoIGV4Y2VzcyBibGFuayBsaW5lcwogCSgKIAkJY2Qgd29yay5zdm4gJiYKLQkJc3ZuIHVwICYmCisJCXN2bl9jbWQgdXAgJiYKIAkJCi0JCXRlc3QgJChzdm4gbG9nIC1yMjoyIHwgd2MgLWwpID0gNSAmJgotCQl0ZXN0ICQoc3ZuIGxvZyAtcjQ6NCB8IHdjIC1sKSA9IDcKKwkJdGVzdCAkKHN2bl9jbWQgbG9nIC1yMjoyIHwgd2MgLWwpID0gNSAmJgorCQl0ZXN0ICQoc3ZuX2NtZCBsb2cgLXI0OjQgfCB3YyAtbCkgPSA3CiAJKQogJwogCmRpZmYgLS1naXQgYS90L3Q5MTIzLWdpdC1zdm4tcmVidWlsZC13aXRoLXJld3JpdGVyb290LnNoIGIvdC90OTEyMy1naXQtc3ZuLXJlYnVpbGQtd2l0aC1yZXdyaXRlcm9vdC5zaAppbmRleCBjZjA0MTUyLi4wNDU1MjE2IDEwMDc1NQotLS0gYS90L3Q5MTIzLWdpdC1zdm4tcmVidWlsZC13aXRoLXJld3JpdGVyb290LnNoCisrKyBiL3QvdDkxMjMtZ2l0LXN2bi1yZWJ1aWxkLXdpdGgtcmV3cml0ZXJvb3Quc2gKQEAgLTEwLDcgKzEwLDcgQEAKIG1rZGlyIGltcG9ydAogY2QgaW1wb3J0CiAJdG91Y2ggZm9vCi0Jc3ZuIGltcG9ydCAtbSAnaW1wb3J0IGZvciBnaXQgc3ZuJyAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbAorCXN2bl9jbWQgaW1wb3J0IC1tICdpbXBvcnQgZm9yIGdpdCBzdm4nIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsCiBjZCAuLgogcm0gLXJmIGltcG9ydAogCmRpZmYgLS1naXQgYS90L3Q5MTI0LWdpdC1zdm4tZGNvbW1pdC1hdXRvLXByb3BzLnNoIGIvdC90OTEyNC1naXQtc3ZuLWRjb21taXQtYXV0by1wcm9wcy5zaAppbmRleCAyNjNkYmY1Li5kNmIwNzZmIDEwMDc1NQotLS0gYS90L3Q5MTI0LWdpdC1zdm4tZGNvbW1pdC1hdXRvLXByb3BzLnNoCisrKyBiL3QvdDkxMjQtZ2l0LXN2bi1kY29tbWl0LWF1dG8tcHJvcHMuc2gKQEAgLTIxLDcgKzIxLDcgQEAKIAkoCiAJCWNkIGltcG9ydCAmJgogCQllY2hvIGZvbyA+Zm9vICYmCi0JCXN2biBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgLiAiJHN2bnJlcG8iCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIC4gIiRzdm5yZXBvIgogCSkgJiYKIAlybSAtcmYgaW1wb3J0ICYmCiAJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIKQEAgLTYxLDIzICs2MSwyMyBAQAogKAogCW1rZGlyIHdvcmsgJiYKIAljZCB3b3JrICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgJiYKIAljZCBzdm5yZXBvICYmCiAKIAkjIENoZWNrIHByb3BlcnRpZXMgZnJvbSBmaXJzdCBjb21taXQuCi0JdGVzdCAieCQoc3ZuIHByb3BnZXQgc3ZuOmV4ZWN1dGFibGUgZXhlYzEuc2gpIiA9ICJ4KiIgJiYKLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46bWltZS10eXBlIGV4ZWMxLnNoKSIgPSBcCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjpleGVjdXRhYmxlIGV4ZWMxLnNoKSIgPSAieCoiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgZXhlYzEuc2gpIiA9IFwKIAkgICAgICJ4YXBwbGljYXRpb24veC1zaGVsbHNjcmlwdCIgJiYKLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46bWltZS10eXBlIGhlbGxvLnR4dCkiID0gInh0ZXh0L3BsYWluIiAmJgotCXRlc3QgIngkKHN2biBwcm9wZ2V0IHN2bjplb2wtc3R5bGUgaGVsbG8udHh0KSIgPSAieG5hdGl2ZSIgJiYKLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46bWltZS10eXBlIGJhcikiID0gIngiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgaGVsbG8udHh0KSIgPSAieHRleHQvcGxhaW4iICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjplb2wtc3R5bGUgaGVsbG8udHh0KSIgPSAieG5hdGl2ZSIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBiYXIpIiA9ICJ4IiAmJgogCiAJIyBDaGVjayBwcm9wZXJ0aWVzIGZyb20gc2Vjb25kIGNvbW1pdC4KLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46ZXhlY3V0YWJsZSBleGVjMi5zaCkiID0gIngqIiAmJgotCXRlc3QgIngkKHN2biBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgZXhlYzIuc2gpIiA9ICJ4IiAmJgotCXRlc3QgIngkKHN2biBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgd29ybGQudHh0KSIgPSAieCIgJiYKLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46ZW9sLXN0eWxlIHdvcmxkLnR4dCkiID0gIngiICYmCi0JdGVzdCAieCQoc3ZuIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSB6b3QpIiA9ICJ4IgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZXhlY3V0YWJsZSBleGVjMi5zaCkiID0gIngqIiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIGV4ZWMyLnNoKSIgPSAieCIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSB3b3JsZC50eHQpIiA9ICJ4IiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZW9sLXN0eWxlIHdvcmxkLnR4dCkiID0gIngiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgem90KSIgPSAieCIKICkKICcKIApAQCAtODksMTIgKzg5LDEyIEBACiAJZ2l0IHN2biBkY29tbWl0IC0tY29uZmlnLWRpcj11c2VyICYmCiAJKAogCQljZCB3b3JrL3N2bnJlcG8gJiYKLQkJc3ZuIHVwICYmCisJCXN2bl9jbWQgdXAgJiYKIAkJdGVzdCAhIC1lIGZvbyAmJgogCQl0ZXN0IC1lIGZvby5zaCAmJgotCQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46bWltZS10eXBlIGZvby5zaCkiID0gXAorCQl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBmb28uc2gpIiA9IFwKIAkJICAgICAieGFwcGxpY2F0aW9uL3gtc2hlbGxzY3JpcHQiICYmCi0JCXRlc3QgIngkKHN2biBwcm9wZ2V0IHN2bjplb2wtc3R5bGUgZm9vLnNoKSIgPSAieExGIgorCQl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOmVvbC1zdHlsZSBmb28uc2gpIiA9ICJ4TEYiCiAJKQogJwogCmRpZmYgLS1naXQgYS90L3Q5MTI1LWdpdC1zdm4tbXVsdGktZ2xvYi1icmFuY2gtbmFtZXMuc2ggYi90L3Q5MTI1LWdpdC1zdm4tbXVsdGktZ2xvYi1icmFuY2gtbmFtZXMuc2gKaW5kZXggNDc1Yzc1MS4uYzE5NDE4NiAxMDA3NTUKLS0tIGEvdC90OTEyNS1naXQtc3ZuLW11bHRpLWdsb2ItYnJhbmNoLW5hbWVzLnNoCisrKyBiL3QvdDkxMjUtZ2l0LXN2bi1tdWx0aS1nbG9iLWJyYW5jaC1uYW1lcy5zaApAQCAtOCwxMSArOCwxMSBAQAogCW1rZGlyIHByb2plY3QgcHJvamVjdC90cnVuayBwcm9qZWN0L2JyYW5jaGVzIFwKIAkJCXByb2plY3QvYnJhbmNoZXMvdjE0LjEgcHJvamVjdC90YWdzICYmCiAJZWNobyBmb28gPiBwcm9qZWN0L3RydW5rL2ZvbyAmJgotCXN2biBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wcm9qZWN0IiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8vcHJvamVjdCIgJiYKIAlybSAtcmYgcHJvamVjdCAmJgotCXN2biBjcCAtbSAiZnVuIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCXN2bl9jbWQgY3AgLW0gImZ1biIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKIAkgICAgICAgICAgICAgICAgIiRzdm5yZXBvL3Byb2plY3QvYnJhbmNoZXMvdjE0LjEvYmV0YSIgJiYKLQlzdm4gY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3Byb2plY3QvYnJhbmNoZXMvdjE0LjEvYmV0YSIgXAorCXN2bl9jbWQgY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3Byb2plY3QvYnJhbmNoZXMvdjE0LjEvYmV0YSIgXAogCSAgICAgICAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHJvamVjdC9icmFuY2hlcy92MTQuMS9nb2xkIgogCScKIApkaWZmIC0tZ2l0IGEvdC90OTEyNy1naXQtc3ZuLXBhcnRpYWwtcmVidWlsZC5zaCBiL3QvdDkxMjctZ2l0LXN2bi1wYXJ0aWFsLXJlYnVpbGQuc2gKaW5kZXggODc2OTZhOS4uNGFhYjhlYyAxMDA3NTUKLS0tIGEvdC90OTEyNy1naXQtc3ZuLXBhcnRpYWwtcmVidWlsZC5zaAorKysgYi90L3Q5MTI3LWdpdC1zdm4tcGFydGlhbC1yZWJ1aWxkLnNoCkBAIC0xNCwyMSArMTQsMjEgQEAKIAkJY2QgdHJ1bmsgJiYKIAkJZWNobyBmb28gPiBmb28gJiYKIAkJY2QgLi4gJiYKLQkJc3ZuIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQtc3ZuIiAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbCAmJgotCQlzdm4gY29weSAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYSBcCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdC1zdm4iIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsICYmCisJCXN2bl9jbWQgY29weSAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYSBcCiAJCQktbSAiY3JlYXRlZCBicmFuY2ggYSIgJiYKIAkJY2QgLi4gJiYKIAkJcm0gLXJmIGltcG9ydCAmJgotCQlzdm4gY28gIiRzdm5yZXBvIi90cnVuayB0cnVuayAmJgorCQlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgdHJ1bmsgJiYKIAkJY2QgdHJ1bmsgJiYKIAkJZWNobyBiYXIgPj4gZm9vICYmCi0JCXN2biBjaSAtbSAidXBkYXRlZCB0cnVuayIgJiYKKwkJc3ZuX2NtZCBjaSAtbSAidXBkYXRlZCB0cnVuayIgJiYKIAkJY2QgLi4gJiYKLQkJc3ZuIGNvICIkc3ZucmVwbyIvYnJhbmNoZXMvYSBhICYmCisJCXN2bl9jbWQgY28gIiRzdm5yZXBvIi9icmFuY2hlcy9hIGEgJiYKIAkJY2QgYSAmJgogCQllY2hvIGJheiA+PiBhICYmCi0JCXN2biBhZGQgYSAmJgotCQlzdm4gY2kgLW0gInVwZGF0ZWQgYSIgJiYKKwkJc3ZuX2NtZCBhZGQgYSAmJgorCQlzdm5fY21kIGNpIC1tICJ1cGRhdGVkIGEiICYmCiAJCWNkIC4uICYmCiAJCWdpdCBzdm4gaW5pdCAtLXN0ZGxheW91dCAiJHN2bnJlcG8iCiAJKQpkaWZmIC0tZ2l0IGEvdC90OTEyOC1naXQtc3ZuLWNtZC1icmFuY2guc2ggYi90L3Q5MTI4LWdpdC1zdm4tY21kLWJyYW5jaC5zaAppbmRleCAyNTJkYWE3Li44MDdlNDk0IDEwMDc1NQotLS0gYS90L3Q5MTI4LWdpdC1zdm4tY21kLWJyYW5jaC5zaAorKysgYi90L3Q5MTI4LWdpdC1zdm4tY21kLWJyYW5jaC5zaApAQCAtMTQsMTMgKzE0LDEzIEBACiAJCWNkIHRydW5rICYmCiAJCWVjaG8gZm9vID4gZm9vICYmCiAJCWNkIC4uICYmCi0JCXN2biBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0LXN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0LXN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwgJiYKIAkJY2QgLi4gJiYKIAkJcm0gLXJmIGltcG9ydCAmJgotCQlzdm4gY28gIiRzdm5yZXBvIi90cnVuayB0cnVuayAmJgorCQlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgdHJ1bmsgJiYKIAkJY2QgdHJ1bmsgJiYKIAkJZWNobyBiYXIgPj4gZm9vICYmCi0JCXN2biBjaSAtbSAidXBkYXRlZCB0cnVuayIgJiYKKwkJc3ZuX2NtZCBjaSAtbSAidXBkYXRlZCB0cnVuayIgJiYKIAkJY2QgLi4gJiYKIAkJcm0gLXJmIHRydW5rCiAJKQpAQCAtNTcsMTQgKzU3LDE0IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCB1c2VzIGNvcnJlY3Qgc3ZuLXJlbW90ZScgJwotCShzdm4gY28gIiRzdm5yZXBvIiBzdm4gJiYKKwkoc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHN2biAmJgogCWNkIHN2biAmJgogCW1rZGlyIG1pcnJvciAmJgotCXN2biBhZGQgbWlycm9yICYmCi0Jc3ZuIGNvcHkgdHJ1bmsgbWlycm9yLyAmJgotCXN2biBjb3B5IHRhZ3MgbWlycm9yLyAmJgotCXN2biBjb3B5IGJyYW5jaGVzIG1pcnJvci8gJiYKLQlzdm4gY2kgLW0gIm1hZGUgbWlycm9yIiApICYmCisJc3ZuX2NtZCBhZGQgbWlycm9yICYmCisJc3ZuX2NtZCBjb3B5IHRydW5rIG1pcnJvci8gJiYKKwlzdm5fY21kIGNvcHkgdGFncyBtaXJyb3IvICYmCisJc3ZuX2NtZCBjb3B5IGJyYW5jaGVzIG1pcnJvci8gJiYKKwlzdm5fY21kIGNpIC1tICJtYWRlIG1pcnJvciIgKSAmJgogCXJtIC1yZiBzdm4gJiYKIAlnaXQgc3ZuIGluaXQgLXMgLVIgbWlycm9yIC0tcHJlZml4PW1pcnJvci8gIiRzdm5yZXBvIi9taXJyb3IgJiYKIAlnaXQgc3ZuIGZldGNoIC1SIG1pcnJvciAmJgpkaWZmIC0tZ2l0IGEvdC90OTEyOS1naXQtc3ZuLWkxOG4tY29tbWl0ZW5jb2Rpbmcuc2ggYi90L3Q5MTI5LWdpdC1zdm4taTE4bi1jb21taXRlbmNvZGluZy5zaAppbmRleCAzMjAwYWIzLi5iOTIyNGJkIDEwMDc1NQotLS0gYS90L3Q5MTI5LWdpdC1zdm4taTE4bi1jb21taXRlbmNvZGluZy5zaAorKysgYi90L3Q5MTI5LWdpdC1zdm4taTE4bi1jb21taXRlbmNvZGluZy5zaApAQCAtMjksMTYgKzI5LDE2IEBACiAJdGVzdF9jbXAgY3VycmVudCAiJDEiCiB9CiAKLWZvciBIIGluIElTTy04ODU5LTEgRVVDSlAgSVNPLTIwMjItSlAKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAogZG8KIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzZXR1cCIgJwogCQlta2RpciAkSCAmJgotCQlzdm4gaW1wb3J0IC1tICIkSCB0ZXN0IiAkSCAiJHN2bnJlcG8iLyRIICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICIkSCB0ZXN0IiAkSCAiJHN2bnJlcG8iLyRIICYmCiAJCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi8kSCAkSAogCScKIGRvbmUKIAotZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIGNvbW1pdCBvbiBnaXQgc2lkZSIgJwogCSgKQEAgLTU1LDcgKzU1LDcgQEAKIAknCiBkb25lCiAKLWZvciBIIGluIElTTy04ODU5LTEgRVVDSlAgSVNPLTIwMjItSlAKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAogZG8KIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBkY29tbWl0IHRvIHN2biIgJwogCSgKQEAgLTc3LDEyICs3NywxMiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFVURjggJ0lTTy04ODU5LTEgc2hvdWxkIG1hdGNoIFVURi04IGluIHN2bicgJwogCSgKLQkJY2QgSVNPLTg4NTktMSAmJgorCQljZCBJU084ODU5LTEgJiYKIAkJY29tcGFyZV9zdm5faGVhZF93aXRoICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0CiAJKQogJwogCi1mb3IgSCBpbiBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gZXVjSlAgSVNPLTIwMjItSlAKIGRvCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyBVVEY4ICIkSCBzaG91bGQgbWF0Y2ggVVRGLTggaW4gc3ZuIiAnCiAJCSgKZGlmZiAtLWdpdCBhL3QvdDkxMzAtZ2l0LXN2bi1hdXRob3JzLWZpbGUuc2ggYi90L3Q5MTMwLWdpdC1zdm4tYXV0aG9ycy1maWxlLnNoCmluZGV4IGI4ZmIyNzcuLmY1YWJkYjMgMTAwNzU1Ci0tLSBhL3QvdDkxMzAtZ2l0LXN2bi1hdXRob3JzLWZpbGUuc2gKKysrIGIvdC90OTEzMC1naXQtc3ZuLWF1dGhvcnMtZmlsZS5zaApAQCAtMTUsNyArMTUsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJwogCWZvciBpIGluIGFhIGJiIGNjIGRkCiAJZG8KLQkJc3ZuIG1rZGlyIC1tICRpIC0tdXNlcm5hbWUgJGkgIiRzdm5yZXBvIi8kaQorCQlzdm5fY21kIG1rZGlyIC1tICRpIC0tdXNlcm5hbWUgJGkgIiRzdm5yZXBvIi8kaQogCWRvbmUKIAknCiAKQEAgLTUyLDEzICs1MiwxMyBAQAogCScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9ycy1maWxlIGFnYWluc3QgZ2xvYnMnICcKLQlzdm4gbWtkaXIgLW0gZ2xvYnMgLS11c2VybmFtZSBhYSBcCisJc3ZuX2NtZCBta2RpciAtbSBnbG9icyAtLXVzZXJuYW1lIGFhIFwKIAkgICIkc3ZucmVwbyIvYWEvdHJ1bmsgIiRzdm5yZXBvIi9hYS9icmFuY2hlcyAiJHN2bnJlcG8iL2FhL3RhZ3MgJiYKIAlnaXQgc3ZuIGNsb25lIC0tYXV0aG9ycy1maWxlPXN2bi1hdXRob3JzIC1zICIkc3ZucmVwbyIvYWEgYWEtd29yayAmJgogCWZvciBpIGluIGJiIGVlIGNjCiAJZG8KIAkJYnJhbmNoPSJhYS9icmFuY2hlcy8kaSIKLQkJc3ZuIG1rZGlyIC1tICIkYnJhbmNoIiAtLXVzZXJuYW1lICRpICIkc3ZucmVwby8kYnJhbmNoIgorCQlzdm5fY21kIG1rZGlyIC1tICIkYnJhbmNoIiAtLXVzZXJuYW1lICRpICIkc3ZucmVwby8kYnJhbmNoIgogCWRvbmUKIAknCiAKZGlmZiAtLWdpdCBhL3QvdDkxMzMtZ2l0LXN2bi1uZXN0ZWQtZ2l0LXJlcG8uc2ggYi90L3Q5MTMzLWdpdC1zdm4tbmVzdGVkLWdpdC1yZXBvLnNoCmluZGV4IDg5M2Y1N2UuLmYzYzMwZTYgMTAwNzU1Ci0tLSBhL3QvdDkxMzMtZ2l0LXN2bi1uZXN0ZWQtZ2l0LXJlcG8uc2gKKysrIGIvdC90OTEzMy1naXQtc3ZuLW5lc3RlZC1naXQtcmVwby5zaApAQCAtNywxOSArNywxOSBAQAogLiAuL2xpYi1naXQtc3ZuLnNoCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBhIGdpdCByZXBvIGluc2lkZSBpdCcgJwotCXN2biBjbyAiJHN2bnJlcG8iIHMgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgcyAmJgogCSgKIAkJY2QgcyAmJgogCQlnaXQgaW5pdCAmJgogCQl0ZXN0IC1mIC5naXQvSEVBRCAmJgogCQk+IC5naXQvYSAmJgogCQllY2hvIGEgPiBhICYmCi0JCXN2biBhZGQgLmdpdCBhICYmCi0JCXN2biBjb21taXQgLW0gImNyZWF0ZSBhIG5lc3RlZCBnaXQgcmVwbyIgJiYKLQkJc3ZuIHVwICYmCisJCXN2bl9jbWQgYWRkIC5naXQgYSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIGEgbmVzdGVkIGdpdCByZXBvIiAmJgorCQlzdm5fY21kIHVwICYmCiAJCWVjaG8gaGkgPj4gLmdpdC9hICYmCi0JCXN2biBjb21taXQgLW0gIm1vZGlmeSAuZ2l0L2EiICYmCi0JCXN2biB1cAorCQlzdm5fY21kIGNvbW1pdCAtbSAibW9kaWZ5IC5naXQvYSIgJiYKKwkJc3ZuX2NtZCB1cAogCSkKICcKIApAQCAtMzMsOSArMzMsOSBAQAogCSgKIAkJY2QgcyAmJgogCQllY2hvIGIgPj4gYSAmJgotCQlzdm4gY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0IiAmJgotCQlzdm4gdXAgJiYKLQkJc3ZuIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0IgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2YgLmdpdCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0IgogCSkKICcKIApAQCAtNTYsMTAgKzU2LDEwIEBACiAJCWdpdCBhZGQgYSAmJgogCQlnaXQgY29tbWl0IC1tICJhZGQgYSBpbnNpZGUgYW4gU1ZOIHJlcG8iICYmCiAJCWdpdCBsb2cgJiYKLQkJc3ZuIGFkZCAtLWZvcmNlIC5naXQgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiAuZ2l0IiAmJgotCQlzdm4gdXAgJiYKLQkJc3ZuIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIC5naXQiCisJCXN2bl9jbWQgYWRkIC0tZm9yY2UgLmdpdCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiAuZ2l0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2YgLmdpdCIKIAkpCiAnCiAKQEAgLTgwLDkgKzgwLDkgQEAKIAkJZWNobyBjID4+IGEgJiYKIAkJZ2l0IGFkZCBhICYmCiAJCWdpdCBjb21taXQgLW0gImFkZCBhIGluc2lkZSBhbiBTVk4gcmVwbyIgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCIgJiYKLQkJc3ZuIHVwICYmCi0JCXN2biBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCIKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIC5naXQiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCIKIAkpCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDkxMzQtZ2l0LXN2bi1pZ25vcmUtcGF0aHMuc2ggYi90L3Q5MTM0LWdpdC1zdm4taWdub3JlLXBhdGhzLnNoCmluZGV4IDcxZmRjNGEuLjA5ZmYxMGMgMTAwNzU1Ci0tLSBhL3QvdDkxMzQtZ2l0LXN2bi1pZ25vcmUtcGF0aHMuc2gKKysrIGIvdC90OTEzNC1naXQtc3ZuLWlnbm9yZS1wYXRocy5zaApAQCAtOCwxOSArOCwxOSBAQAogLiAuL2xpYi1naXQtc3ZuLnNoCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJwotCXN2biBjbyAiJHN2bnJlcG8iIHMgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgcyAmJgogCSgKIAkJY2QgcyAmJgogCQlta2RpciBxcXEgd3d3ICYmCiAJCWVjaG8gdGVzdF9xcXEgPiBxcXEvdGVzdF9xcXEudHh0ICYmCiAJCWVjaG8gdGVzdF93d3cgPiB3d3cvdGVzdF93d3cudHh0ICYmCi0JCXN2biBhZGQgcXFxICYmCi0JCXN2biBhZGQgd3d3ICYmCi0JCXN2biBjb21taXQgLW0gImNyZWF0ZSBzb21lIGZpbGVzIiAmJgotCQlzdm4gdXAgJiYKKwkJc3ZuX2NtZCBhZGQgcXFxICYmCisJCXN2bl9jbWQgYWRkIHd3dyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIHNvbWUgZmlsZXMiICYmCisJCXN2bl9jbWQgdXAgJiYKIAkJZWNobyBoaSA+PiB3d3cvdGVzdF93d3cudHh0ICYmCi0JCXN2biBjb21taXQgLW0gIm1vZGlmeSB3d3cvdGVzdF93d3cudHh0IiAmJgotCQlzdm4gdXAKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSB3d3cvdGVzdF93d3cudHh0IiAmJgorCQlzdm5fY21kIHVwCiAJKQogJwogCkBAIC01MSw5ICs1MSw5IEBACiAJKAogCQljZCBzICYmCiAJCWVjaG8gYiA+PiBxcXEvdGVzdF9xcXEudHh0ICYmCi0JCXN2biBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIHd3dyIgJiYKLQkJc3ZuIHVwICYmCi0JCXN2biBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2Ygd3d3IgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2Ygd3d3IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIHd3dyIKIAkpCiAnCiAKQEAgLTgzLDkgKzgzLDkgQEAKIAkoCiAJCWNkIHMgJiYKIAkJZWNobyB6YXEgPj4gd3d3L3Rlc3Rfd3d3LnR4dAotCQlzdm4gY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIHd3dy90ZXN0X3d3dy50eHQiICYmCi0JCXN2biB1cCAmJgotCQlzdm4gbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2Ygd3d3L3Rlc3Rfd3d3LnR4dCIKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2Ygd3d3L3Rlc3Rfd3d3LnR4dCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIHd3dy90ZXN0X3d3dy50eHQiCiAJKQogJwogCkBAIC0xMTYsOSArMTE2LDkgQEAKIAkJY2QgcyAmJgogCQllY2hvIGN2ZiA+PiB3d3cvdGVzdF93d3cudHh0CiAJCWVjaG8geWdnID4+IHFxcS90ZXN0X3FxcS50eHQKLQkJc3ZuIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgaWdub3JlZCB3d3ciICYmCi0JCXN2biB1cCAmJgotCQlzdm4gbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIGlnbm9yZWQgd3d3IgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgaWdub3JlZCB3d3ciICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgaWdub3JlZCB3d3ciCiAJKQogJwogCmRpZmYgLS1naXQgYS90L3Q5MTM3LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaCBiL3QvdDkxMzctZ2l0LXN2bi1kY29tbWl0LWNsb2JiZXItc2VyaWVzLnNoCmluZGV4IGZkMTg1MDEuLjYzNmNhMGEgMTAwNzU1Ci0tLSBhL3QvdDkxMzctZ2l0LXN2bi1kY29tbWl0LWNsb2JiZXItc2VyaWVzLnNoCisrKyBiL3QvdDkxMzctZ2l0LXN2bi1kY29tbWl0LWNsb2JiZXItc2VyaWVzLnNoCkBAIC04LDcgKzgsNyBAQAogCW1rZGlyIGltcG9ydCAmJgogCWNkIGltcG9ydCAmJgogCWF3ayAiQkVHSU4geyBmb3IgKGkgPSAxOyBpIDwgNjQ7IGkrKykgeyBwcmludCBpIH0gfSIgPiBmaWxlCi0Jc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIiAmJgogCWNkIC4uICYmCiAJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKIAlnaXQgc3ZuIGZldGNoICYmCkBAIC0xOCwxNCArMTgsMTQgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyhzdXBwb3NlZGx5KSBub24tY29uZmxpY3RpbmcgY2hhbmdlIGZyb20gU1ZOJyAnCiAJdGVzdCB4ImBzZWQgLW4gLWUgNThwIDwgZmlsZWAiID0geDU4ICYmCiAJdGVzdCB4ImBzZWQgLW4gLWUgNjFwIDwgZmlsZWAiID0geDYxICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIgdG1wICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHRtcCAmJgogCWNkIHRtcCAmJgogCQlwZXJsIC1pLmJhayAtcCAtZSAicy9eNTgkLzU1ODgvIiBmaWxlICYmCiAJCXBlcmwgLWkuYmFrIC1wIC1lICJzL142MSQvNjYxMS8iIGZpbGUgJiYKIAkJcG9rZSBmaWxlICYmCiAJCXRlc3QgeCJgc2VkIC1uIC1lIDU4cCA8IGZpbGVgIiA9IHg1NTg4ICYmCiAJCXRlc3QgeCJgc2VkIC1uIC1lIDYxcCA8IGZpbGVgIiA9IHg2NjExICYmCi0JCXN2biBjb21taXQgLW0gIjU4ID0+IDU1ODgsIDYxID0+IDY2MTEiICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICI1OCA9PiA1NTg4LCA2MSA9PiA2NjExIiAmJgogCQljZCAuLgogCScKIApAQCAtNDYsNyArNDYsNyBAQAogCXRlc3QgeFwiXGBzZWQgLW4gLWUgN3AgPCBmaWxlXGBcIiA9IHg3Nzc3ICYmCiAJZ2l0IGNvbW1pdCAtbSAnNCA9PiA0NDQ0LCA3ID0+IDc3NzcnIGZpbGUgJiYKIAlnaXQgc3ZuIGRjb21taXQgJiYKLQlzdm4gdXAgdG1wICYmCisJc3ZuX2NtZCB1cCB0bXAgJiYKIAljZCB0bXAgJiYKIAkJdGVzdCB4XCJcYHNlZCAtbiAtZSA0cCA8IGZpbGVcYFwiID0geDQ0NDQgJiYKIAkJdGVzdCB4XCJcYHNlZCAtbiAtZSA3cCA8IGZpbGVcYFwiID0geDc3NzcgJiYKZGlmZiAtLWdpdCBhL3QvdDkxMzgtZ2l0LXN2bi1hdXRob3JzLXByb2cuc2ggYi90L3Q5MTM4LWdpdC1zdm4tYXV0aG9ycy1wcm9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzY2M1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM4LWdpdC1zdm4tYXV0aG9ycy1wcm9nLnNoCkBAIC0wLDAgKzEsODMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nLCBNYXJrIExvZGF0bworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGF1dGhvcnMgcHJvZyB0ZXN0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2NhdCA+IHN2bi1hdXRob3JzLXByb2cgPDwnRU9GJworIyEvdXNyL2Jpbi9wZXJsCiskXyA9IHNoaWZ0OworaWYgKHMvLXN1YiQvLykgIHsKKwlwcmludCAiJF8gPCRfXEBzdWIuZXhhbXBsZS5jb20+XG4iOworfQorZWxzZSB7CisJcHJpbnQgIiRfIDwkX1xAZXhhbXBsZS5jb20+XG4iOworfQorRU9GCitjaG1vZCAreCBzdm4tYXV0aG9ycy1wcm9nCisKK2NhdCA+IHN2bi1hdXRob3JzIDw8J0VPRicKK2ZmID0gRkZGRkZGRiBGRkZGRkZGIDxmRmZAb3RoZXIuZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCWZvciBpIGluIGFhIGJiIGNjLXN1YiBkZC1zdWIgZWUtZm9vIGZmCisJZG8KKwkJc3ZuIG1rZGlyIC1tICRpIC0tdXNlcm5hbWUgJGkgIiRzdm5yZXBvIi8kaQorCWRvbmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBhdXRob3JzIHdpdGggcHJvZyBhbmQgZmlsZScgJworCWdpdCBzdm4gY2xvbmUgLS1hdXRob3JzLXByb2c9Li9zdm4tYXV0aG9ycy1wcm9nIFwKKwkgICAgLS1hdXRob3JzLWZpbGU9c3ZuLWF1dGhvcnMgIiRzdm5yZXBvIiB4CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnRlZCA2IHJldmlzaW9ucyBzdWNjZXNzZnVsbHknICcKKwkoCisJCWNkIHgKKwkJdGVzdCAiYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IHdjIC1sYCIgLWVxIDYKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRob3JzLXByb2cgcmFuIGNvcnJlY3RseScgJworCSgKKwkJY2QgeAorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjEgfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBlZS1mb28gPGVlLWZvb0BleGFtcGxlXC5jb20+ICIgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn4yIHwgXAorCQkgIGdyZXAgIl5hdXRob3IgZGQgPGRkQHN1YlwuZXhhbXBsZVwuY29tPiAiICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MyB8IFwKKwkJICBncmVwICJeYXV0aG9yIGNjIDxjY0BzdWJcLmV4YW1wbGVcLmNvbT4gIiAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjQgfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBiYiA8YmJAZXhhbXBsZVwuY29tPiAiICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+NSB8IFwKKwkJICBncmVwICJeYXV0aG9yIGFhIDxhYUBleGFtcGxlXC5jb20+ICIKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRob3JzLWZpbGUgb3ZlcnJvZGUgYXV0aG9ycy1wcm9nJyAnCisJKAorCQljZCB4CisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm4gfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBGRkZGRkZGIEZGRkZGRkYgPGZGZkBvdGhlclwuZXhhbXBsZVwuY29tPiAiCisJKQorCScKKworZ2l0IC0tZ2l0LWRpcj14Ly5naXQgY29uZmlnIC0tdW5zZXQgc3ZuLmF1dGhvcnNmaWxlCitnaXQgLS1naXQtZGlyPXgvLmdpdCBjb25maWcgLS11bnNldCBzdm4uYXV0aG9yc3Byb2cKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9ycy1wcm9nIGhhbmRsZWQgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHVzZXJuYW1lJyAnCisJc3ZuIG1rZGlyIC1tIGJhZCAtLXVzZXJuYW1lICJ4eXo7IHRvdWNoIGV2aWwiICIkc3ZucmVwbyIvYmFkICYmCisJKAorCQljZCB4ICYmCisJCWdpdCBzdm4gLS1hdXRob3JzLXByb2c9Li4vc3ZuLWF1dGhvcnMtcHJvZyBmZXRjaCAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZuIHwKKwkJZ3JlcCAiXmF1dGhvciB4eXo7IHRvdWNoIGV2aWwgPHh5ejsgdG91Y2ggZXZpbEBleGFtcGxlXC5jb20+ICIgJiYKKwkJISB0ZXN0IC1mIGV2aWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzOS1naXQtc3ZuLW5vbi11dGY4LWNvbW1pdGVuY29kaW5nLnNoIGIvdC90OTEzOS1naXQtc3ZuLW5vbi11dGY4LWNvbW1pdGVuY29kaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYzMzc5NTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM5LWdpdC1zdm4tbm9uLXV0ZjgtY29tbWl0ZW5jb2Rpbmcuc2gKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biByZWZ1c2VzIHRvIGRjb21taXQgbm9uLVVURjggbWVzc2FnZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCisjIElTTy0yMDIyLUpQIGNhbiBwYXNzIGZvciB2YWxpZCBVVEYtOCwgc28gc2tpcHBpbmcgdGhhdCBpbiB0aGlzIHRlc3QKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNldHVwIiAnCisJCW1rZGlyICRIICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICIkSCB0ZXN0IiAkSCAiJHN2bnJlcG8iLyRIICYmCisJCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi8kSCAkSAorCScKK2RvbmUKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIGNvbW1pdCBvbiBnaXQgc2lkZSIgJworCSgKKwkJY2QgJEggJiYKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRIICYmCisJCWdpdCBjaGVja291dCAtYiB0IHJlZnMvcmVtb3Rlcy9naXQtc3ZuICYmCisJCWVjaG8gJEggPkYgJiYKKwkJZ2l0IGFkZCBGICYmCisJCWdpdCBjb21taXQgLWEgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJEgudHh0ICYmCisJCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lICJzL15lbmNvZGluZyAvL3AiKSAmJgorCQl0ZXN0ICJ6JEUiID0gInokSCIKKwkpCisJJworZG9uZQorCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggZGNvbW1pdCB0byBzdm4iICcKKwkoCisJCWNkICRIICYmCisJCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJCSEgZ2l0IHN2biBkY29tbWl0CisJKQorCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQwLWdpdC1zdm4tcmVzZXQuc2ggYi90L3Q5MTQwLWdpdC1zdm4tcmVzZXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDczNTUyNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDAtZ2l0LXN2bi1yZXNldC5zaApAQCAtMCwwICsxLDY2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEJlbiBKYWNrc29uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcmVzZXQnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGVzdCByZXBvc2l0b3J5JyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHMgJiYKKwkoCisJCWNkIHMgJiYKKwkJbWtkaXIgdmlzICYmCisJCWVjaG8gYWx3YXlzIHZpc2libGUgPiB2aXMvdmlzLnR4dCAmJgorCQlzdm5fY21kIGFkZCB2aXMgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImNyZWF0ZSB2aXNpYmxlIGZpbGVzIiAmJgorCQlta2RpciBoaWQgJiYKKwkJZWNobyBpbml0aWFsbHkgaGlkZGVuID4gaGlkL2hpZC50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgaGlkICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjcmVhdGUgaW5pdGlhbGx5IGhpZGRlbiBmaWxlcyIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQllY2hvIG1vZCA+PiB2aXMvdmlzLnR4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibW9kaWZ5IHZpcyIgJiYKKwkJc3ZuX2NtZCB1cAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgU1ZOIHJlcG9zaXRvcnkgd2l0aCBoaWRkZW4gZGlyZWN0b3J5JyAnCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgZyAmJgorCSggY2QgZyAmJiBnaXQgc3ZuIGZldGNoIC0taWdub3JlLXBhdGhzPSJeaGlkIiApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmeSBoaWRkZW4gZmlsZSBpbiBTVk4gcmVwbycgJworCSggY2QgcyAmJgorCSAgZWNobyBtb2QgaGlkZGVuID4+IGhpZC9oaWQudHh0ICYmCisJICBzdm5fY21kIGNvbW1pdCAtbSAibW9kaWZ5IGhpZCIgJiYKKwkgIHN2bl9jbWQgdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZhaWxzIG9uIG1vZGlmaWVkIGhpZGRlbiBmaWxlJyAnCisJKCBjZCBnICYmCisJICBnaXQgc3ZuIGZpbmQtcmV2IHJlZnMvcmVtb3Rlcy9naXQtc3ZuID4gLi4vZXhwZWN0ICYmCisJICAhIGdpdCBzdm4gZmV0Y2ggMj4gLi4vZXJyb3JzICYmCisJICBnaXQgc3ZuIGZpbmQtcmV2IHJlZnMvcmVtb3Rlcy9naXQtc3ZuID4gLi4vZXhwZWN0MiApICYmCisJZmdyZXAgIm5vdCBmb3VuZCBpbiBjb21taXQiIGVycm9ycyAmJgorCXRlc3RfY21wIGV4cGVjdCBleHBlY3QyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHVud2luZHMgYmFjayB0byByMScgJworCSggY2QgZyAmJgorCSAgZ2l0IHN2biByZXNldCAtcjEgJiYKKwkgIGdpdCBzdm4gZmluZC1yZXYgcmVmcy9yZW1vdGVzL2dpdC1zdm4gPiAuLi9leHBlY3QyICkgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBleHBlY3QyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmV0Y2ggc3VjY2VlZHMgbm90IGlnbm9yaW5nIGFueSBmaWxlcycgJworCSggY2QgZyAmJgorCSAgZ2l0IHN2biBmZXRjaCAmJgorCSAgZ2l0IHN2biByZWJhc2UgJiYKKwkgIGZncmVwICJtb2QgaGlkZGVuIiBoaWQvaGlkLnR4dAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQxLWdpdC1zdm4tbXVsdGlwbGUtYnJhbmNoZXMuc2ggYi90L3Q5MTQxLWdpdC1zdm4tbXVsdGlwbGUtYnJhbmNoZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2NkMDY3MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDEtZ2l0LXN2bi1tdWx0aXBsZS1icmFuY2hlcy5zaApAQCAtMCwwICsxLDEyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBNYXJjIEJyYW5jaGF1ZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIG11bHRpcGxlIGJyYW5jaCBhbmQgdGFnIHBhdGhzIGluIHRoZSBzdm4gcmVwbycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCisJbWtkaXIJcHJvamVjdCBcCisJCXByb2plY3QvdHJ1bmsgXAorCQlwcm9qZWN0L2Jfb25lIFwKKwkJcHJvamVjdC9iX3R3byBcCisJCXByb2plY3QvdGFnc19BIFwKKwkJcHJvamVjdC90YWdzX0IgJiYKKwllY2hvIDEgPiBwcm9qZWN0L3RydW5rL2EuZmlsZSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8vcHJvamVjdCIgJiYKKwlybSAtcmYgcHJvamVjdCAmJgorCXN2bl9jbWQgY3AgLW0gIkJyYW5jaCAxIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCSAiJHN2bnJlcG8vcHJvamVjdC9iX29uZS9maXJzdCIgJiYKKwlzdm5fY21kIGNwIC1tICJUYWcgMSIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQS8xLjAiICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8vcHJvamVjdCIgc3ZuX3Byb2plY3QgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCWVjaG8gMiA+IHRydW5rL2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgMSIgdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIkJyYW5jaCAyIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCQkgIiRzdm5yZXBvL3Byb2plY3QvYl9vbmUvc2Vjb25kIiAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgMiIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0EvMi4wIiAmJgorCQllY2hvIDMgPiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDIiIHRydW5rL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJCcmFuY2ggMyIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkJICIkc3ZucmVwby9wcm9qZWN0L2JfdHdvLzEiICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyAzIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQS8zLjAiICYmCisJCWVjaG8gNCA+IHRydW5rL2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgMyIgdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIkJyYW5jaCA0IiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCQkgIiRzdm5yZXBvL3Byb2plY3QvYl90d28vMiIgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDQiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19BLzQuMCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQllY2hvIDUgPiBiX29uZS9maXJzdC9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDQiIGJfb25lL2ZpcnN0L2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgNSIgIiRzdm5yZXBvL3Byb2plY3QvYl9vbmUvZmlyc3QiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0IvdjUiICYmCisJCWVjaG8gNiA+IGJfb25lL3NlY29uZC9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDUiIGJfb25lL3NlY29uZC9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDYiICIkc3ZucmVwby9wcm9qZWN0L2Jfb25lL3NlY29uZCIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQi92NiIgJiYKKwkJZWNobyA3ID4gYl90d28vMS9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDYiIGJfdHdvLzEvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA3IiAiJHN2bnJlcG8vcHJvamVjdC9iX3R3by8xIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19CL3Y3IiAmJgorCQllY2hvIDggPiBiX3R3by8yL2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgNyIgYl90d28vMi9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDgiICIkc3ZucmVwby9wcm9qZWN0L2JfdHdvLzIiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0IvdjgiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBtdWx0aXBsZSBicmFuY2ggYW5kIHRhZyBwYXRocycgJworCWdpdCBzdm4gY2xvbmUgLVQgdHJ1bmsgXAorCQkgICAgICAtYiBiX29uZS8qIC0tYnJhbmNoZXMgYl90d28vKiBcCisJCSAgICAgIC10IHRhZ3NfQS8qIC0tdGFncyB0YWdzX0IgXAorCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdCIgZ2l0X3Byb2plY3QgJiYKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2ZpcnN0ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3NlY29uZCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy8xICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzLzIgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy8xLjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy8yLjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy8zLjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy80LjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy92NSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL3Y2ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvdjcgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy92OAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTXVsdGlwbGUgYnJhbmNoIG9yIHRhZyBwYXRocyByZXF1aXJlIC1kJyAnCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGJyYW5jaCAtbSAiTm8gbmV3IGJyYW5jaCIgTm9wZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIHRhZyAtbSAiTm8gbmV3IHRhZyIgVGFnbGVzcyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9Ob3BlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvVGFnbGVzcworCSkgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZCBiX29uZS9Ob3BlICYmCisJCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWQgYl90d28vTm9wZSAmJgorCQl0ZXN0X211c3RfZmFpbCB0ZXN0IC1kIHRhZ3NfQS9UYWdsZXNzICYmCisJCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWQgdGFnc19CL1RhZ2xlc3MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBuZXcgYnJhbmNoZXMgYW5kIHRhZ3MnICcKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCWdpdCBzdm4gYnJhbmNoIC1tICJOZXcgYnJhbmNoIDEiIC1kIGJfb25lIE5ldzEgKSAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJc3ZuX2NtZCB1cCAmJiB0ZXN0IC1lIGJfb25lL05ldzEvYS5maWxlICkgJiYKKworCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJZ2l0IHN2biBicmFuY2ggLW0gIk5ldyBicmFuY2ggMiIgLWQgYl90d28gTmV3MiApICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQlzdm5fY21kIHVwICYmIHRlc3QgLWUgYl90d28vTmV3Mi9hLmZpbGUgKSAmJgorCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQlnaXQgc3ZuIGJyYW5jaCAtdCAtbSAiTmV3IHRhZyAxIiAtZCB0YWdzX0EgVGFnMSApICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQlzdm5fY21kIHVwICYmIHRlc3QgLWUgdGFnc19BL1RhZzEvYS5maWxlICkgJiYKKworCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJZ2l0IHN2biB0YWcgLW0gIk5ldyB0YWcgMiIgLWQgdGFnc19CIFRhZzIgKSAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJc3ZuX2NtZCB1cCAmJiB0ZXN0IC1lIHRhZ3NfQi9UYWcyL2EuZmlsZSApCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0Mi1naXQtc3ZuLXNoYWxsb3ctY2xvbmUuc2ggYi90L3Q5MTQyLWdpdC1zdm4tc2hhbGxvdy1jbG9uZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMjM2YWNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE0Mi1naXQtc3ZuLXNoYWxsb3ctY2xvbmUuc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBzaGFsbG93IGNsb25lJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCXN2bl9jbWQgbWtkaXIgLW0gImNyZWF0ZSBzdGFuZGFyZCBsYXlvdXQiIFwKKwkgICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9icmFuY2hlcyAiJHN2bnJlcG8iL3RhZ3MgJiYKKwlzdm5fY21kIGNwIC1tICJicmFuY2ggb2ZmIHRydW5rIiBcCisJICAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYSAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi9icmFuY2hlcy9hICYmCisJKAorCQljZCBhICYmCisJCT4gZm9vICYmCisJCXN2bl9jbWQgYWRkIGZvbyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiYWRkIGZvbyIKKwkpCisnCisKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRydW5rIHdpdGggIi1yIEhFQUQiJyAnCisJZ2l0IHN2biBjbG9uZSAtciBIRUFEICIkc3ZucmVwby90cnVuayIgZyAmJgorCSggY2QgZyAmJiBnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgLS12ZXJpZnkgSEVBRCApCisnCisKK3N0b3BfaHR0cGQKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQzLWdpdC1zdm4tZ2Muc2ggYi90L3Q5MTQzLWdpdC1zdm4tZ2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjJiYTJkMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDMtZ2l0LXN2bi1nYy5zaApAQCAtMCwwICsxLDUzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IFJvYmVydCBBbGxhbiBaZWgKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBnYyBiYXNpYyB0ZXN0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpcmVjdG9yaWVzIGFuZCB0ZXN0IHJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwlta2RpciB0bXAgJiYKKwllY2hvICJTYW1wbGUgdGV4dCBmb3IgU3VidmVyc2lvbiByZXBvc2l0b3J5LiIgPiBpbXBvcnQvdGVzdC50eHQgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiBpbXBvcnQgIiRzdm5yZXBvIiA+IC9kZXYvbnVsbAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd29ya2luZyBjb3B5IGZyb20gc3ZuJyBcCisJJ3N2bl9jbWQgY28gIiRzdm5yZXBvIiB0ZXN0X3djJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgc29tZSBwcm9wZXJ0aWVzIHRvIGNyZWF0ZSBhbiB1bmhhbmRsZWQubG9nIGZpbGUnICcKKwkoCisJCWNkIHRlc3Rfd2MgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IGZvbyBiYXIgdGVzdC50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInByb3BlcnR5IHNldCIKKwkpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXR1cCByZXBvJyAnZ2l0IHN2biBpbml0ICIkc3ZucmVwbyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0ZldGNoIHJlcG8nICdnaXQgc3ZuIGZldGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGJhY2t1cCBjb3B5IG9mIHVuaGFuZGxlZC5sb2cnICcKKwkgY3AgLmdpdC9zdm4vZ2l0LXN2bi91bmhhbmRsZWQubG9nIHRtcAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGxlZnRvdmVyIGluZGV4JyAnPiAuZ2l0L3N2bi9naXQtc3ZuL2luZGV4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGdjIHJ1bnMnICdnaXQgc3ZuIGdjJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGluZGV4IHJlbW92ZWQnICchIHRlc3QgLWYgLmdpdC9zdm4vZ2l0LXN2bi9pbmRleCcKKworaWYgcGVybCAtTUNvbXByZXNzOjpabGliIC1lIDAgMj4vZGV2L251bGwKK3RoZW4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGdjIHByb2R1Y2VzIGEgdmFsaWQgZ3ppcCBmaWxlJyAnCisJCSBndW56aXAgLmdpdC9zdm4vZ2l0LXN2bi91bmhhbmRsZWQubG9nLmd6CisJCScKK2Vsc2UKKwlzYXkgIlBlcmwgQ29tcHJlc3M6OlpsaWIgdW5hdmFpbGFibGUsIHNraXBwaW5nIGd1bnppcCB0ZXN0IgorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYyBkb2VzIG5vdCBjaGFuZ2UgdW5oYW5kbGVkLmxvZyBmaWxlcycgJworCSB0ZXN0X2NtcCAuZ2l0L3N2bi9naXQtc3ZuL3VuaGFuZGxlZC5sb2cgdG1wL3VuaGFuZGxlZC5sb2cKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoIGIvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoCmluZGV4IDU2YjdjMDYuLmZjMzc5NWQgMTAwNzU1Ci0tLSBhL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaAorKysgYi90L3Q5MjAwLWdpdC1jdnNleHBvcnRjb21taXQuc2gKQEAgLTI4OCw2ICsyODgsMjcgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1jb21taXQgYSByZW1vdmVkIGZpbGVuYW1lIHdoaWNoIHJlbWFpbnMgaW4gQ1ZTIGF0dGljJyAnCisKKyAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICBlY2hvID5hdHRpY19ncmVtbGluICYmCisgICAgIGN2cyAtUSBhZGQgYXR0aWNfZ3JlbWxpbiAmJgorICAgICBjdnMgLVEgY2kgLW0gImFkZGVkIGF0dGljX2dyZW1saW4iICYmCisgICAgIHJtIGF0dGljX2dyZW1saW4gJiYKKyAgICAgY3ZzIC1RIHJtIGF0dGljX2dyZW1saW4gJiYKKyAgICAgY3ZzIC1RIGNpIC1tICJyZW1vdmVkIGF0dGljX2dyZW1saW4iKSAmJgorCisgICAgZWNobyA+IGF0dGljX2dyZW1saW4gJiYKKyAgICBnaXQgYWRkIGF0dGljX2dyZW1saW4gJiYKKyAgICBnaXQgY29tbWl0IC1tICJBZGRlZCBhdHRpY19ncmVtbGluIiAmJgorCWdpdCBjdnNleHBvcnRjb21taXQgLXcgIiRDVlNXT1JLIiAtYyBIRUFEICYmCisgICAgKGNkICIkQ1ZTV09SSyI7IGN2cyAtUSB1cGRhdGUgLWQpICYmCisgICAgdGVzdCAtZiAiJENWU1dPUksvYXR0aWNfZ3JlbWxpbiIKKycKKworIyB0aGUgc3RhdGUgb2YgdGhlIENWUyBzYW5kYm94IG1heSBiZSBpbmRldGVybWluYXRlIGZvciAnIHNwYWNlJworIyBhZnRlciB0aGlzIHRlc3Qgb24gc29tZSBwbGF0Zm9ybXMgLyB3aXRoIHNvbWUgdmVyc2lvbnMgb2YgQ1ZTCisjIGNvbnNpZGVyIGFkZGluZyBuZXcgdGVzdHMgYWJvdmUgdGhpcyBwb2ludAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGEgZmlsZSB3aXRoIGxlYWRpbmcgc3BhY2VzIGluIHRoZSBuYW1lJyAnCiAKIAllY2hvIHNwYWNlID4gIiBzcGFjZSIgJiYKQEAgLTI5NSw3ICszMTYsNyBAQAogCWdpdCBjb21taXQgLW0gIkFkZCBhIGZpbGUgd2l0aCBhIGxlYWRpbmcgc3BhY2UiICYmCiAJaWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCiAJZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdyAiJENWU1dPUksiIC1jICRpZCAmJgotCWNoZWNrX2VudHJpZXMgIiRDVlNXT1JLIiAiIHNwYWNlLzEuMS98RFMvMS4xL3xyZWxlYXNlLW5vdGVzLzEuMi8iICYmCisJY2hlY2tfZW50cmllcyAiJENWU1dPUksiICIgc3BhY2UvMS4xL3xEUy8xLjEvfGF0dGljX2dyZW1saW4vMS4zL3xyZWxlYXNlLW5vdGVzLzEuMi8iICYmCiAJdGVzdF9jbXAgIiRDVlNXT1JLLyBzcGFjZSIgIiBzcGFjZSIKIAogJwpkaWZmIC0tZ2l0IGEvdC90OTMwMS1mYXN0LWV4cG9ydC5zaCBiL3QvdDkzMDEtZmFzdC1leHBvcnQuc2gKaW5kZXggOGRhOWNlNS4uMzU2OTY0ZSAxMDA3NTUKLS0tIGEvdC90OTMwMS1mYXN0LWV4cG9ydC5zaAorKysgYi90L3Q5MzAxLWZhc3QtZXhwb3J0LnNoCkBAIC02OCw3ICs2OCw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzby04ODU5LTEnICcKIAotCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgogCSMgdXNlIGF1dGhvciBhbmQgY29tbWl0dGVyIG5hbWUgaW4gSVNPLTg4NTktMSB0byBtYXRjaCBpdC4KIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKIAl0ZXN0X3RpY2sgJiYKQEAgLTI2Miw2ICsyNjIsOTQgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgbGltaXRpbmcgZXhwb3J0cyBieSBQQVRIJyAnCisJbWtkaXIgbGltaXQtYnktcGF0aHMgJiYKKwljZCBsaW1pdC1ieS1wYXRocyAmJgorCWdpdCBpbml0ICYmCisJZWNobyBoaSA+IHRoZXJlICYmCisJZ2l0IGFkZCB0aGVyZSAmJgorCWdpdCBjb21taXQgLW0gIkZpcnN0IGZpbGUiICYmCisJZWNobyBmb28gPiBiYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCWdpdCBjb21taXQgLW0gIlNlY29uZCBmaWxlIiAmJgorCWdpdCB0YWcgLWEgLW0gbXNnIG15dGFnICYmCisJZWNobyBtb3JlZm9vID4+IGJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJZ2l0IGNvbW1pdCAtbSAiQ2hhbmdlIHRvIHNlY29uZCBmaWxlIiAmJgorCWNkIC4uCisnCisKK2NhdCA+IGxpbWl0LWJ5LXBhdGhzL2V4cGVjdGVkIDw8IEVPRgorYmxvYgorbWFyayA6MQorZGF0YSAzCitoaQorCityZXNldCByZWZzL3RhZ3MvbXl0YWcKK2NvbW1pdCByZWZzL3RhZ3MvbXl0YWcKK21hcmsgOjIKK2F1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAxMTEyOTEyNzEzIC0wNzAwCitjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTEyNzEzIC0wNzAwCitkYXRhIDExCitGaXJzdCBmaWxlCitNIDEwMDY0NCA6MSB0aGVyZQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHJvcHBpbmcgdGFnIG9mIGZpbHRlcmVkIG91dCBvYmplY3QnICcKKwljZCBsaW1pdC1ieS1wYXRocyAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLXRhZy1vZi1maWx0ZXJlZC1vYmplY3Q9ZHJvcCBteXRhZyAtLSB0aGVyZSA+IG91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCBleHBlY3RlZCAmJgorCWNkIC4uCisnCisKK2NhdCA+PiBsaW1pdC1ieS1wYXRocy9leHBlY3RlZCA8PCBFT0YKK3RhZyBteXRhZworZnJvbSA6MgordGFnZ2VyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorZGF0YSA0Cittc2cKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld3JpdGluZyB0YWcgb2YgZmlsdGVyZWQgb3V0IG9iamVjdCcgJworCWNkIGxpbWl0LWJ5LXBhdGhzICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdD1yZXdyaXRlIG15dGFnIC0tIHRoZXJlID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IGV4cGVjdGVkICYmCisJY2QgLi4KKycKKworY2F0ID4gbGltaXQtYnktcGF0aHMvZXhwZWN0ZWQgPDwgRU9GCitibG9iCittYXJrIDoxCitkYXRhIDQKK2ZvbworCitibG9iCittYXJrIDoyCitkYXRhIDMKK2hpCisKK3Jlc2V0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK21hcmsgOjMKK2F1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAxMTEyOTEyNzEzIC0wNzAwCitjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTEyNzEzIC0wNzAwCitkYXRhIDEyCitTZWNvbmQgZmlsZQorTSAxMDA2NDQgOjEgYmFyCitNIDEwMDY0NCA6MiB0aGVyZQorCitFT0YKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbm8gZXhhY3QtcmVmIHJldmlzaW9ucyBpbmNsdWRlZCcgJworCWNkIGxpbWl0LWJ5LXBhdGhzICYmCisJZ2l0IGZhc3QtZXhwb3J0IG1hc3Rlcn4yLi5tYXN0ZXJ+MSA+IG91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCBleHBlY3RlZCAmJgorCWNkIC4uCisnCisKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0LXVwIGEgZmV3IG1vcmUgdGFncyBmb3IgdGFnIGV4cG9ydCB0ZXN0cycgJwogCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKIAlIRUFEX1RSRUU9YGdpdCBzaG93IC1zIC0tcHJldHR5PXJhdyBIRUFEIHwgZ3JlcCB0cmVlIHwgc2VkICJzL3RyZWUgLy8iYCAmJgpAQCAtMjcxLDggKzM1OSwxNCBAQAogCWdpdCB0YWcgLWEgdGFnLW9ial90YWctb2JqIC1tICJ0YWdnaW5nIGEgdGFnIiB0cmVlX3RhZy1vYmoKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZV90YWcnICAgICAgICAnCisJbWtkaXIgcmVzdWx0ICYmCisJKGNkIHJlc3VsdCAmJiBnaXQgaW5pdCkgJiYKKwlnaXQgZmFzdC1leHBvcnQgdHJlZV90YWcgPiBmZS1zdHJlYW0gJiYKKwkoY2QgcmVzdWx0ICYmIGdpdCBmYXN0LWltcG9ydCA8IC4uL2ZlLXN0cmVhbSkKKycKKwogIyBORUVEU1dPUks6IG5vdCBqdXN0IGNoZWNrIHJldHVybiBzdGF0dXMsIGJ1dCB2YWxpZGF0ZSB0aGUgb3V0cHV0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlX3RhZycgICAgICAgICdnaXQgZmFzdC1leHBvcnQgdHJlZV90YWcnCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlX3RhZy1vYmonICAgICdnaXQgZmFzdC1leHBvcnQgdHJlZV90YWctb2JqJwogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnLW9ial90YWcnICAgICAnZ2l0IGZhc3QtZXhwb3J0IHRhZy1vYmpfdGFnJwogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnLW9ial90YWctb2JqJyAnZ2l0IGZhc3QtZXhwb3J0IHRhZy1vYmpfdGFnLW9iaicKZGlmZiAtLWdpdCBhL3QvdDk1MDAtZ2l0d2ViLXN0YW5kYWxvbmUtbm8tZXJyb3JzLnNoIGIvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2gKaW5kZXggZjQyMTBmYi4uNjI3NTE4MSAxMDA3NTUKLS0tIGEvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2gKKysrIGIvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2gKQEAgLTU5MCw3ICs1OTAsNyBAQAogCSBlY2hvICJJU08tODg1OS0xIiA+PiBmaWxlICYmCiAJIGdpdCBhZGQgZmlsZSAmJgogCSBnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgotCSBnaXQgY29tbWl0IC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwL0lTTy04ODU5LTEudHh0ICYmCisJIGdpdCBjb21taXQgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvSVNPODg1OS0xLnR4dCAmJgogCSBnaXQgY29uZmlnIC0tdW5zZXQgaTE4bi5jb21taXRlbmNvZGluZyAmJgogCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXQiJwogdGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5sb2cnCkBAIC02NjAsNiArNjYwLDcgQEAKIAogXCRmZWF0dXJleydibGFtZSd9eydvdmVycmlkZSd9ID0gMTsKIFwkZmVhdHVyZXsnc25hcHNob3QnfXsnb3ZlcnJpZGUnfSA9IDE7CitcJGZlYXR1cmV7J2F2YXRhcid9eydvdmVycmlkZSd9ID0gMTsKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTY3MSw2ICs2NzIsNyBAQAogCSdjb25maWcgb3ZlcnJpZGU6IHRyZWUgdmlldywgZmVhdHVyZXMgZGlzYWJsZWQgaW4gcmVwbyBjb25maWcnIFwKIAknZ2l0IGNvbmZpZyBnaXR3ZWIuYmxhbWUgbm8gJiYKIAkgZ2l0IGNvbmZpZyBnaXR3ZWIuc25hcHNob3Qgbm9uZSAmJgorCSBnaXQgY29uZmlnIGdpdHdlYi5hdmF0YXIgZ3JhdmF0YXIgJiYKIAkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZSInCiB0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmxvZycKIApkaWZmIC0tZ2l0IGEvdC90OTcwMC1wZXJsLWdpdC5zaCBiL3QvdDk3MDAtcGVybC1naXQuc2gKaW5kZXggYjRjYTI0NC4uNGViN2QzZiAxMDA3NTUKLS0tIGEvdC90OTcwMC1wZXJsLWdpdC5zaAorKysgYi90L3Q5NzAwLXBlcmwtZ2l0LnNoCkBAIC0yOSw2ICsyOSwxMCBAQAogICAgICBnaXQgYWRkIC4gJiYKICAgICAgZ2l0IGNvbW1pdCAtbSAiZmlyc3QgY29tbWl0IiAmJgogCisgICAgIGVjaG8gIm5ldyBmaWxlIGluIHN1YmRpciAyIiA+IGRpcmVjdG9yeTIvZmlsZTIgJiYKKyAgICAgZ2l0IGFkZCAuICYmCisgICAgIGdpdCBjb21taXQgLW0gImNvbW1pdCBpbiBkaXJlY3RvcnkyIiAmJgorCiAgICAgIGVjaG8gImNoYW5nZWQgZmlsZSAxIiA+IGZpbGUxICYmCiAgICAgIGdpdCBjb21taXQgLWEgLW0gInNlY29uZCBjb21taXQiICYmCiAKZGlmZiAtLWdpdCBhL3QvdDk3MDAvdGVzdC5wbCBiL3QvdDk3MDAvdGVzdC5wbAppbmRleCA2OTdkYWYzLi42YzcwYWVjIDEwMDc1NQotLS0gYS90L3Q5NzAwL3Rlc3QucGwKKysrIGIvdC90OTcwMC90ZXN0LnBsCkBAIC04NiwxNSArODYsMjIgQEAKIHVubGluayAkdG1wZmlsZTsKIAogIyBwYXRocwotaXMoJHItPnJlcG9fcGF0aCwgIi4vLmdpdCIsICJyZXBvX3BhdGgiKTsKK2lzKCRyLT5yZXBvX3BhdGgsICRhYnNfcmVwb19kaXIgLiAiLy5naXQiLCAicmVwb19wYXRoIik7CiBpcygkci0+d2NfcGF0aCwgJGFic19yZXBvX2RpciAuICIvIiwgIndjX3BhdGgiKTsKIGlzKCRyLT53Y19zdWJkaXIsICIiLCAid2Nfc3ViZGlyIGluaXRpYWwiKTsKICRyLT53Y19jaGRpcigiZGlyZWN0b3J5MSIpOwogaXMoJHItPndjX3N1YmRpciwgImRpcmVjdG9yeTEiLCAid2Nfc3ViZGlyIGFmdGVyIHdjX2NoZGlyIik7Ci1UT0RPOiB7Ci0JbG9jYWwgJFRPRE8gPSAiY29tbWFuZHMgZG8gbm90IHdvcmsgYWZ0ZXIgd2NfY2hkaXIiOwotCSMgRmFpbHVyZSBvdXRwdXQgaXMgYWN0aXZlIGV2ZW4gaW4gbm9uLXZlcmJvc2UgbW9kZSBhbmQgdGh1cwotCSMgYW5ub3lpbmcuICBIZW5jZSB3ZSBza2lwIHRoZXNlIHRlc3RzIGFzIGxvbmcgYXMgdGhleSBmYWlsLgotCXRvZG9fc2tpcCAnY29uZmlnIGFmdGVyIHdjX2NoZGlyJywgMTsKLQlpcygkci0+Y29uZmlnKCJjb2xvci5zdHJpbmciKSwgInZhbHVlIiwgImNvbmZpZyBhZnRlciB3Y19jaGRpciIpOwotfQoraXMoJHItPmNvbmZpZygidGVzdC5zdHJpbmciKSwgInZhbHVlIiwgImNvbmZpZyBhZnRlciB3Y19jaGRpciIpOworCisjIE9iamVjdCBnZW5lcmF0aW9uIGluIHN1YiBkaXJlY3RvcnkKK2NoZGlyKCJkaXJlY3RvcnkyIik7CitteSAkcjIgPSBHaXQtPnJlcG9zaXRvcnkoKTsKK2lzKCRyMi0+cmVwb19wYXRoLCAkYWJzX3JlcG9fZGlyIC4gIi8uZ2l0IiwgInJlcG9fcGF0aCAoMikiKTsKK2lzKCRyMi0+d2NfcGF0aCwgJGFic19yZXBvX2RpciAuICIvIiwgIndjX3BhdGggKDIpIik7CitpcygkcjItPndjX3N1YmRpciwgImRpcmVjdG9yeTIvIiwgIndjX3N1YmRpciBpbml0aWFsICgyKSIpOworCisjIGNvbW1hbmRzIGluIHN1YiBkaXJlY3RvcnkKK215ICRsYXN0X2NvbW1pdCA9ICRyMi0+Y29tbWFuZF9vbmVsaW5lKHF3KHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSk7CitsaWtlKCRsYXN0X2NvbW1pdCwgcXIvXlswLTlhLWZBLUZdezQwfSQvLCAncmV2LXBhcnNlIHJldHVybmVkIGhhc2gnKTsKK215ICRkaXJfY29tbWl0ID0gJHIyLT5jb21tYW5kX29uZWxpbmUoJ2xvZycsICctbjEnLCAnLS1wcmV0dHk9Zm9ybWF0OiVIJywgJy4nKTsKK2lzbnQoJGxhc3RfY29tbWl0LCAkZGlyX2NvbW1pdCwgJ2xvZyAuIGRvZXMgbm90IHNob3cgbGFzdCBjb21taXQnKTsKZGlmZiAtLWdpdCBhL3QvdGVzdC1saWIuc2ggYi90L3Rlc3QtbGliLnNoCmluZGV4IGRhZDE0MzcuLjVmZGM1ZDkgMTAwNjQ0Ci0tLSBhL3QvdGVzdC1saWIuc2gKKysrIGIvdC90ZXN0LWxpYi5zaApAQCAtMTE1LDcgKzExNSw3IEBACiAJLS10ZWUpCiAJCXNoaWZ0IDs7ICMgd2FzIGhhbmRsZWQgYWxyZWFkeQogCSopCi0JCWJyZWFrIDs7CisJCWVjaG8gImVycm9yOiB1bmtub3duIHRlc3Qgb3B0aW9uICckMSciID4mMjsgZXhpdCAxIDs7CiAJZXNhYwogZG9uZQogCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogZXJyb3IgKCkgewogCXNheV9jb2xvciBlcnJvciAiZXJyb3I6ICQqIgotCXRyYXAgLSBFWElUCisJR0lUX0VYSVRfT0s9dAogCWV4aXQgMQogfQogCkBAIC0xNzksMTAgKzE3OSwxNyBAQAogdGVzdF9zdWNjZXNzPTAKIAogZGllICgpIHsKLQllY2hvID4mNSAiRkFUQUw6IFVuZXhwZWN0ZWQgZXhpdCB3aXRoIGNvZGUgJD8iCi0JZXhpdCAxCisJY29kZT0kPworCWlmIHRlc3QgLW4gIiRHSVRfRVhJVF9PSyIKKwl0aGVuCisJCWV4aXQgJGNvZGUKKwllbHNlCisJCWVjaG8gPiY1ICJGQVRBTDogVW5leHBlY3RlZCBleGl0IHdpdGggY29kZSAkY29kZSIKKwkJZXhpdCAxCisJZmkKIH0KIAorR0lUX0VYSVRfT0s9CiB0cmFwICdkaWUnIEVYSVQKIAogIyBUaGUgc2VtYW50aWNzIG9mIHRoZSBlZGl0b3IgdmFyaWFibGVzIGFyZSB0aGF0IG9mIGludm9raW5nCkBAIC0yODUsNyArMjkyLDcgQEAKIAlzYXlfY29sb3IgZXJyb3IgIkZBSUwgJHRlc3RfY291bnQ6ICQxIgogCXNoaWZ0CiAJZWNobyAiJEAiIHwgc2VkIC1lICdzL14vCS8nCi0JdGVzdCAiJGltbWVkaWF0ZSIgPSAiIiB8fCB7IHRyYXAgLSBFWElUOyBleGl0IDE7IH0KKwl0ZXN0ICIkaW1tZWRpYXRlIiA9ICIiIHx8IHsgR0lUX0VYSVRfT0s9dDsgZXhpdCAxOyB9CiB9CiAKIHRlc3Rfa25vd25fYnJva2VuX29rXyAoKSB7CkBAIC0zNDcsNyArMzU0LDcgQEAKIAkJdGhlbgogCQkJdGVzdF9rbm93bl9icm9rZW5fb2tfICIkMSIKIAkJZWxzZQotCQkgICAgdGVzdF9rbm93bl9icm9rZW5fZmFpbHVyZV8gIiQxIgorCQkJdGVzdF9rbm93bl9icm9rZW5fZmFpbHVyZV8gIiQxIgogCQlmaQogCWZpCiAJZWNobyA+JjMgIiIKQEAgLTQ5OCw3ICs1MDUsNyBAQAogfQogCiB0ZXN0X2RvbmUgKCkgewotCXRyYXAgLSBFWElUCisJR0lUX0VYSVRfT0s9dAogCXRlc3RfcmVzdWx0c19kaXI9IiRURVNUX0RJUkVDVE9SWS90ZXN0LXJlc3VsdHMiCiAJbWtkaXIgLXAgIiR0ZXN0X3Jlc3VsdHNfZGlyIgogCXRlc3RfcmVzdWx0c19wYXRoPSIkdGVzdF9yZXN1bHRzX2Rpci8kezAlLnNofS0kJCIKQEAgLTY0MCw3ICs2NDcsNyBAQAogdGVzdD0idHJhc2ggZGlyZWN0b3J5LiQoYmFzZW5hbWUgIiQwIiAuc2gpIgogdGVzdCAhIC16ICIkZGVidWciIHx8IHJlbW92ZV90cmFzaD0iJFRFU1RfRElSRUNUT1JZLyR0ZXN0Igogcm0gLWZyICIkdGVzdCIgfHwgewotCXRyYXAgLSBFWElUCisJR0lUX0VYSVRfT0s9dAogCWVjaG8gPiY1ICJGQVRBTDogQ2Fubm90IHByZXBhcmUgdGVzdCBhcmVhIgogCWV4aXQgMQogfQpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wcmUtY29tbWl0LnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLWNvbW1pdC5zYW1wbGUKaW5kZXggMGJhNjIwNy4uYjExYWQ2YSAxMDA3NTUKLS0tIGEvdGVtcGxhdGVzL2hvb2tzLS1wcmUtY29tbWl0LnNhbXBsZQorKysgYi90ZW1wbGF0ZXMvaG9va3MtLXByZS1jb21taXQuc2FtcGxlCkBAIC03LDYgKzcsMzEgQEAKICMKICMgVG8gZW5hYmxlIHRoaXMgaG9vaywgcmVuYW1lIHRoaXMgZmlsZSB0byAicHJlLWNvbW1pdCIuCiAKKyMgSWYgeW91IHdhbnQgdG8gYWxsb3cgbm9uLWFzY2lpIGZpbGVuYW1lcyBzZXQgdGhpcyB2YXJpYWJsZSB0byB0cnVlLgorYWxsb3dub25hc2NpaT0kKGdpdCBjb25maWcgaG9va3MuYWxsb3dub25hc2NpaSkKKworIyBDcm9zcyBwbGF0Zm9ybSBwcm9qZWN0cyB0ZW5kIHRvIGF2b2lkIG5vbi1hc2NpaSBmaWxlbmFtZXM7IHByZXZlbnQKKyMgdGhlbSBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSByZXBvc2l0b3J5LiBXZSBleHBsb2l0IHRoZSBmYWN0IHRoYXQgdGhlCisjIHByaW50YWJsZSByYW5nZSBzdGFydHMgYXQgdGhlIHNwYWNlIGNoYXJhY3RlciBhbmQgZW5kcyB3aXRoIHRpbGRlLgoraWYgWyAiJGFsbG93bm9uYXNjaWkiICE9ICJ0cnVlIiBdICYmCisJdGVzdCAiJChnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSAtLWRpZmYtZmlsdGVyPUEgLXogfAorCSAgTENfQUxMPUMgdHIgLWQgJ1sgLX5dXDAnKSIKK3RoZW4KKwllY2hvICJFcnJvcjogQXR0ZW1wdCB0byBhZGQgYSBub24tYXNjaWkgZmlsZW5hbWUuIgorCWVjaG8KKwllY2hvICJUaGlzIGNhbiBjYXVzZSBwcm9ibGVtcyBpZiB5b3Ugd2FudCB0byB3b3JrIHRvZ2V0aGVyIgorCWVjaG8gIndpdGggcGVvcGxlIG9uIG90aGVyIHBsYXRmb3JtcyB0aGFuIHlvdS4iCisJZWNobworCWVjaG8gIlRvIGJlIHBvcnRhYmxlIGl0IGlzIGFkdmlzZWFibGUgdG8gcmVuYW1lIHRoZSBmaWxlIC4uLiIKKwllY2hvCisJZWNobyAiSWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIHlvdSBjYW4gZGlzYWJsZSB0aGlzIgorCWVjaG8gImNoZWNrIHVzaW5nOiIKKwllY2hvCisJZWNobyAiICBnaXQgY29uZmlnIGhvb2tzLmFsbG93bm9uYXNjaWkgdHJ1ZSIKKwllY2hvCisJZXhpdCAxCitmaQorCiBpZiBnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi9kZXYvbnVsbCAyPiYxCiB0aGVuCiAJYWdhaW5zdD1IRUFECmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLXVwZGF0ZS5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLXVwZGF0ZS5zYW1wbGUKaW5kZXggZjhiZjQ5MC4uZmQ2M2IyZCAxMDA3NTUKLS0tIGEvdGVtcGxhdGVzL2hvb2tzLS11cGRhdGUuc2FtcGxlCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tdXBkYXRlLnNhbXBsZQpAQCAtMTMsNiArMTMsOSBAQAogIyBob29rcy5hbGxvd2RlbGV0ZXRhZwogIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgZGVsZXRpbmcgdGFncyB3aWxsIGJlIGFsbG93ZWQgaW4gdGhlCiAjICAgcmVwb3NpdG9yeS4gIEJ5IGRlZmF1bHQgdGhleSB3b24ndCBiZS4KKyMgaG9va3MuYWxsb3dtb2RpZnl0YWcKKyMgICBUaGlzIGJvb2xlYW4gc2V0cyB3aGV0aGVyIGEgdGFnIG1heSBiZSBtb2RpZmllZCBhZnRlciBjcmVhdGlvbi4gQnkgZGVmYXVsdAorIyAgIGl0IHdvbid0IGJlLgogIyBob29rcy5hbGxvd2RlbGV0ZWJyYW5jaAogIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgZGVsZXRpbmcgYnJhbmNoZXMgd2lsbCBiZSBhbGxvd2VkIGluIHRoZQogIyAgIHJlcG9zaXRvcnkuICBCeSBkZWZhdWx0IHRoZXkgd29uJ3QgYmUuCkBAIC00NCw2ICs0Nyw3IEBACiBhbGxvd2RlbGV0ZWJyYW5jaD0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmFsbG93ZGVsZXRlYnJhbmNoKQogZGVueWNyZWF0ZWJyYW5jaD0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmRlbnljcmVhdGVicmFuY2gpCiBhbGxvd2RlbGV0ZXRhZz0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmFsbG93ZGVsZXRldGFnKQorYWxsb3dtb2RpZnl0YWc9JChnaXQgY29uZmlnIC0tYm9vbCBob29rcy5hbGxvd21vZGlmeXRhZykKIAogIyBjaGVjayBmb3Igbm8gZGVzY3JpcHRpb24KIHByb2plY3RkZXNjPSQoc2VkIC1lICcxcScgIiRHSVRfRElSL2Rlc2NyaXB0aW9uIikKQEAgLTgyLDYgKzg2LDEyIEBACiAJCTs7CiAJcmVmcy90YWdzLyosdGFnKQogCQkjIGFubm90YXRlZCB0YWcKKwkJaWYgWyAiJGFsbG93bW9kaWZ5dGFnIiAhPSAidHJ1ZSIgXSAmJiBnaXQgcmV2LXBhcnNlICRyZWZuYW1lID4gL2Rldi9udWxsIDI+JjEKKwkJdGhlbgorCQkJZWNobyAiKioqIFRhZyAnJHJlZm5hbWUnIGFscmVhZHkgZXhpc3RzLiIgPiYyCisJCQllY2hvICIqKiogTW9kaWZ5aW5nIGEgdGFnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgcmVwb3NpdG9yeS4iID4mMgorCQkJZXhpdCAxCisJCWZpCiAJCTs7CiAJcmVmcy9oZWFkcy8qLGNvbW1pdCkKIAkJIyBicmFuY2gKZGlmZiAtLWdpdCBhL3Rlc3QtY2htdGltZS5jIGIvdGVzdC1jaG10aW1lLmMKaW5kZXggZDUzNThjYi4uZmU0NzZjYiAxMDA2NDQKLS0tIGEvdGVzdC1jaG10aW1lLmMKKysrIGIvdGVzdC1jaG10aW1lLmMKQEAgLTg3LDYgKzg3LDE1IEBACiAJCQlyZXR1cm4gLTE7CiAJCX0KIAorI2lmZGVmIFdJTjMyCisJCWlmICghKHNiLnN0X21vZGUgJiBTX0lXVVNSKSAmJgorCQkJCWNobW9kKGFyZ3ZbaV0sIHNiLnN0X21vZGUgfCBTX0lXVVNSKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgbWFrZSB1c2VyLXdyaXRhYmxlICVzOiAlcyIsCisJCQkJYXJndltpXSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiAtMTsKKwkJfQorI2VuZGlmCisKIAkJdXRiLmFjdGltZSA9IHNiLnN0X2F0aW1lOwogCQl1dGIubW9kdGltZSA9IHNldF9lcSA/IHNldF90aW1lIDogc2Iuc3RfbXRpbWUgKyBzZXRfdGltZTsKIApkaWZmIC0tZ2l0IGEvdGVzdC1wYXJzZS1vcHRpb25zLmMgYi90ZXN0LXBhcnNlLW9wdGlvbnMuYwppbmRleCA2MWQyYzM5Li5lZmE3MzRiIDEwMDY0NAotLS0gYS90ZXN0LXBhcnNlLW9wdGlvbnMuYworKysgYi90ZXN0LXBhcnNlLW9wdGlvbnMuYwpAQCAtNyw4ICs3LDkgQEAKIHN0YXRpYyBpbnQgYWJicmV2ID0gNzsKIHN0YXRpYyBpbnQgdmVyYm9zZSA9IDAsIGRyeV9ydW4gPSAwLCBxdWlldCA9IDA7CiBzdGF0aWMgY2hhciAqc3RyaW5nID0gTlVMTDsKK3N0YXRpYyBjaGFyICpmaWxlID0gTlVMTDsKIAotaW50IGxlbmd0aF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQorc3RhdGljIGludCBsZW5ndGhfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKIHsKIAlwcmludGYoIkNhbGxiYWNrOiBcIiVzXCIsICVkXG4iLAogCQkoYXJnID8gYXJnIDogIm5vdCBzZXQiKSwgdW5zZXQpOwpAQCAtMTksOCArMjAsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBudW1iZXJfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwkqKGludCAqKW9wdC0+dmFsdWUgPSBzdHJ0b2woYXJnLCBOVUxMLCAxMCk7CisJcmV0dXJuIDA7Cit9CisKIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKKwljb25zdCBjaGFyICpwcmVmaXggPSAicHJlZml4LyI7CiAJY29uc3QgY2hhciAqdXNhZ2VbXSA9IHsKIAkJInRlc3QtcGFyc2Utb3B0aW9ucyA8b3B0aW9ucz4iLAogCQlOVUxMCkBAIC0yOSw2ICszNyw3IEBACiAJCU9QVF9CT09MRUFOKCdiJywgImJvb2xlYW4iLCAmYm9vbGVhbiwgImdldCBhIGJvb2xlYW4iKSwKIAkJT1BUX0JJVCgnNCcsICJvcjQiLCAmYm9vbGVhbiwKIAkJCSJiaXR3aXNlLW9yIGJvb2xlYW4gd2l0aCAuLi4wMTAwIiwgNCksCisJCU9QVF9ORUdCSVQoMCwgIm5lZy1vcjQiLCAmYm9vbGVhbiwgInNhbWUgYXMgLS1uby1vcjQiLCA0KSwKIAkJT1BUX0dST1VQKCIiKSwKIAkJT1BUX0lOVEVHRVIoJ2knLCAiaW50ZWdlciIsICZpbnRlZ2VyLCAiZ2V0IGEgaW50ZWdlciIpLAogCQlPUFRfSU5URUdFUignaicsIE5VTEwsICZpbnRlZ2VyLCAiZ2V0IGEgaW50ZWdlciwgdG9vIiksCkBAIC0zNiw2ICs0NSw3IEBACiAJCU9QVF9EQVRFKCd0JywgTlVMTCwgJnRpbWVzdGFtcCwgImdldCB0aW1lc3RhbXAgb2YgPHRpbWU+IiksCiAJCU9QVF9DQUxMQkFDSygnTCcsICJsZW5ndGgiLCAmaW50ZWdlciwgInN0ciIsCiAJCQkiZ2V0IGxlbmd0aCBvZiA8c3RyPiIsIGxlbmd0aF9jYWxsYmFjayksCisJCU9QVF9GSUxFTkFNRSgnRicsICJmaWxlIiwgJmZpbGUsICJzZXQgZmlsZSB0byA8RklMRT4iKSwKIAkJT1BUX0dST1VQKCJTdHJpbmcgb3B0aW9ucyIpLAogCQlPUFRfU1RSSU5HKCdzJywgInN0cmluZyIsICZzdHJpbmcsICJzdHJpbmciLCAiZ2V0IGEgc3RyaW5nIiksCiAJCU9QVF9TVFJJTkcoMCwgInN0cmluZzIiLCAmc3RyaW5nLCAic3RyIiwgImdldCBhbm90aGVyIHN0cmluZyIpLApAQCAtNDUsNiArNTUsMTAgQEAKIAkJCSJzZXQgc3RyaW5nIHRvIGRlZmF1bHQiLCAodW5zaWduZWQgbG9uZykiZGVmYXVsdCIpLAogCQlPUFRfR1JPVVAoIk1hZ2ljIGFyZ3VtZW50cyIpLAogCQlPUFRfQVJHVU1FTlQoInF1dXgiLCAibWVhbnMgLS1xdXV4IiksCisJCU9QVF9OVU1CRVJfQ0FMTEJBQ0soJmludGVnZXIsICJzZXQgaW50ZWdlciB0byBOVU0iLAorCQkJbnVtYmVyX2NhbGxiYWNrKSwKKwkJeyBPUFRJT05fQk9PTEVBTiwgJysnLCBOVUxMLCAmYm9vbGVhbiwgTlVMTCwgInNhbWUgYXMgLWIiLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9OT0RBU0ggfSwKIAkJT1BUX0dST1VQKCJTdGFuZGFyZCBvcHRpb25zIiksCiAJCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAogCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UpLApAQCAtNTQsNyArNjgsNyBAQAogCX07CiAJaW50IGk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCB1c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwgMCk7CiAKIAlwcmludGYoImJvb2xlYW46ICVkXG4iLCBib29sZWFuKTsKIAlwcmludGYoImludGVnZXI6ICV1XG4iLCBpbnRlZ2VyKTsKQEAgLTY0LDYgKzc4LDcgQEAKIAlwcmludGYoInZlcmJvc2U6ICVkXG4iLCB2ZXJib3NlKTsKIAlwcmludGYoInF1aWV0OiAlc1xuIiwgcXVpZXQgPyAieWVzIiA6ICJubyIpOwogCXByaW50ZigiZHJ5IHJ1bjogJXNcbiIsIGRyeV9ydW4gPyAieWVzIiA6ICJubyIpOworCXByaW50ZigiZmlsZTogJXNcbiIsIGZpbGUgPyBmaWxlIDogIihub3Qgc2V0KSIpOwogCiAJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKIAkJcHJpbnRmKCJhcmcgJTAyZDogJXNcbiIsIGksIGFyZ3ZbaV0pOwpkaWZmIC0tZ2l0IGEvdGVzdC1zaGExLmMgYi90ZXN0LXNoYTEuYwppbmRleCA5Yjk4ZDA3Li44MGRhYmE5IDEwMDY0NAotLS0gYS90ZXN0LXNoYTEuYworKysgYi90ZXN0LXNoYTEuYwpAQCAtMzIsNyArMzIsNyBAQAogCQkJaWYgKHN6ID09IDApCiAJCQkJYnJlYWs7CiAJCQlpZiAoc3ogPCAwKQotCQkJCWRpZSgidGVzdC1zaGExOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJ0ZXN0LXNoYTEiKTsKIAkJCXRoaXNfc3ogKz0gc3o7CiAJCQljcCArPSBzejsKIAkJCXJvb20gLT0gc3o7CmRpZmYgLS1naXQgYS90cmFuc3BvcnQuYyBiL3RyYW5zcG9ydC5jCmluZGV4IGVmZWNiNjUuLmYyMzFiMzUgMTAwNjQ0Ci0tLSBhL3RyYW5zcG9ydC5jCisrKyBiL3RyYW5zcG9ydC5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAogCXN0cmJ1Zl9hZGRzdHIoJnRlbXBfZGlyLCBnaXRfcGF0aCgicnN5bmMtcmVmcy1YWFhYWFgiKSk7CiAJaWYgKCFta2R0ZW1wKHRlbXBfZGlyLmJ1ZikpCi0JCWRpZSAoIkNvdWxkIG5vdCBtYWtlIHRlbXBvcmFyeSBkaXJlY3RvcnkiKTsKKwkJZGllX2Vycm5vICgiQ291bGQgbm90IG1ha2UgdGVtcG9yYXJ5IGRpcmVjdG9yeSIpOwogCXRlbXBfZGlyX2xlbiA9IHRlbXBfZGlyLmxlbjsKIAogCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcnN5bmNfdXJsKHRyYW5zcG9ydC0+dXJsKSk7CkBAIC0zMjEsNyArMzIxLDcgQEAKIAogCXN0cmJ1Zl9hZGRzdHIoJnRlbXBfZGlyLCBnaXRfcGF0aCgicnN5bmMtcmVmcy1YWFhYWFgiKSk7CiAJaWYgKCFta2R0ZW1wKHRlbXBfZGlyLmJ1ZikpCi0JCWRpZSAoIkNvdWxkIG5vdCBtYWtlIHRlbXBvcmFyeSBkaXJlY3RvcnkiKTsKKwkJZGllX2Vycm5vICgiQ291bGQgbm90IG1ha2UgdGVtcG9yYXJ5IGRpcmVjdG9yeSIpOwogCXN0cmJ1Zl9hZGRjaCgmdGVtcF9kaXIsICcvJyk7CiAKIAlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BTEwpIHsKQEAgLTQzOSw5ICs0MzksNyBAQAogCWNoYXIgKnJlZl9uYW1lOwogCWNoYXIgKnJlZnNfdXJsOwogCWludCBpID0gMDsKLQotCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlpbnQgaHR0cF9yZXQ7CiAKIAlzdHJ1Y3QgcmVmICpyZWZzID0gTlVMTDsKIAlzdHJ1Y3QgcmVmICpyZWYgPSBOVUxMOwpAQCAtNDYxLDI1ICs0NTksMTYgQEAKIAlyZWZzX3VybCA9IHhtYWxsb2Moc3RybGVuKHRyYW5zcG9ydC0+dXJsKSArIDExKTsKIAlzcHJpbnRmKHJlZnNfdXJsLCAiJXMvaW5mby9yZWZzIiwgdHJhbnNwb3J0LT51cmwpOwogCi0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwotCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHJlZnNfdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgTlVMTCk7Ci0KLQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOwotCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewotCQkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7Ci0JCQlpZiAobWlzc2luZ190YXJnZXQoJnJlc3VsdHMpKQotCQkJCWRpZSgiJXMgbm90IGZvdW5kOiBkaWQgeW91IHJ1biBnaXQgdXBkYXRlLXNlcnZlci1pbmZvIG9uIHRoZSBzZXJ2ZXI/IiwgcmVmc191cmwpOwotCQkJZWxzZQotCQkJCWRpZSgiJXMgZG93bmxvYWQgZXJyb3IgLSAlcyIsIHJlZnNfdXJsLCBjdXJsX2Vycm9yc3RyKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOwotCQlkaWUoIlVuYWJsZSB0byBzdGFydCBIVFRQIHJlcXVlc3QiKTsKKwlodHRwX3JldCA9IGh0dHBfZ2V0X3N0cmJ1ZihyZWZzX3VybCwgJmJ1ZmZlciwgSFRUUF9OT19DQUNIRSk7CisJc3dpdGNoIChodHRwX3JldCkgeworCWNhc2UgSFRUUF9PSzoKKwkJYnJlYWs7CisJY2FzZSBIVFRQX01JU1NJTkdfVEFSR0VUOgorCQlkaWUoIiVzIG5vdCBmb3VuZDogZGlkIHlvdSBydW4gZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBvbiB0aGUiCisJCSAgICAiIHNlcnZlcj8iLCByZWZzX3VybCk7CisJZGVmYXVsdDoKKwkJaHR0cF9lcnJvcihyZWZzX3VybCwgaHR0cF9yZXQpOworCQlkaWUoIkhUVFAgcmVxdWVzdCBmYWlsZWQiKTsKIAl9CiAKIAlkYXRhID0gYnVmZmVyLmJ1ZjsKQEAgLTUxOSw2ICs1MDgsOCBAQAogCQlmcmVlKHJlZik7CiAJfQogCisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJZnJlZShyZWZzX3VybCk7CiAJcmV0dXJuIHJlZnM7CiB9CiAKQEAgLTcyOCwxOSArNzE5LDMwIEBACiAKICNkZWZpbmUgU1VNTUFSWV9XSURUSCAoMiAqIERFRkFVTFRfQUJCUkVWICsgMykKIAotc3RhdGljIHZvaWQgcHJpbnRfcmVmX3N0YXR1cyhjaGFyIGZsYWcsIGNvbnN0IGNoYXIgKnN1bW1hcnksIHN0cnVjdCByZWYgKnRvLCBzdHJ1Y3QgcmVmICpmcm9tLCBjb25zdCBjaGFyICptc2cpCitzdGF0aWMgdm9pZCBwcmludF9yZWZfc3RhdHVzKGNoYXIgZmxhZywgY29uc3QgY2hhciAqc3VtbWFyeSwgc3RydWN0IHJlZiAqdG8sIHN0cnVjdCByZWYgKmZyb20sIGNvbnN0IGNoYXIgKm1zZywgaW50IHBvcmNlbGFpbikKIHsKLQlmcHJpbnRmKHN0ZGVyciwgIiAlYyAlLSpzICIsIGZsYWcsIFNVTU1BUllfV0lEVEgsIHN1bW1hcnkpOwotCWlmIChmcm9tKQotCQlmcHJpbnRmKHN0ZGVyciwgIiVzIC0+ICVzIiwgcHJldHRpZnlfcmVmKGZyb20pLCBwcmV0dGlmeV9yZWYodG8pKTsKLQllbHNlCi0JCWZwdXRzKHByZXR0aWZ5X3JlZih0byksIHN0ZGVycik7Ci0JaWYgKG1zZykgewotCQlmcHV0cygiICgiLCBzdGRlcnIpOwotCQlmcHV0cyhtc2csIHN0ZGVycik7Ci0JCWZwdXRjKCcpJywgc3RkZXJyKTsKKwlpZiAocG9yY2VsYWluKSB7CisJCWlmIChmcm9tKQorCQkJZnByaW50ZihzdGRvdXQsICIlY1x0JXM6JXNcdCIsIGZsYWcsIGZyb20tPm5hbWUsIHRvLT5uYW1lKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRvdXQsICIlY1x0OiVzXHQiLCBmbGFnLCB0by0+bmFtZSk7CisJCWlmIChtc2cpCisJCQlmcHJpbnRmKHN0ZG91dCwgIiVzICglcylcbiIsIHN1bW1hcnksIG1zZyk7CisJCWVsc2UKKwkJCWZwcmludGYoc3Rkb3V0LCAiJXNcbiIsIHN1bW1hcnkpOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAiICVjICUtKnMgIiwgZmxhZywgU1VNTUFSWV9XSURUSCwgc3VtbWFyeSk7CisJCWlmIChmcm9tKQorCQkJZnByaW50ZihzdGRlcnIsICIlcyAtPiAlcyIsIHByZXR0aWZ5X3JlZm5hbWUoZnJvbS0+bmFtZSksIHByZXR0aWZ5X3JlZm5hbWUodG8tPm5hbWUpKTsKKwkJZWxzZQorCQkJZnB1dHMocHJldHRpZnlfcmVmbmFtZSh0by0+bmFtZSksIHN0ZGVycik7CisJCWlmIChtc2cpIHsKKwkJCWZwdXRzKCIgKCIsIHN0ZGVycik7CisJCQlmcHV0cyhtc2csIHN0ZGVycik7CisJCQlmcHV0YygnKScsIHN0ZGVycik7CisJCX0KKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKIAl9Ci0JZnB1dGMoJ1xuJywgc3RkZXJyKTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YXR1c19hYmJyZXYodW5zaWduZWQgY2hhciBzaGExWzIwXSkKQEAgLTc0OCwxNSArNzUwLDE1IEBACiAJcmV0dXJuIGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBERUZBVUxUX0FCQlJFVik7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50X29rX3JlZl9zdGF0dXMoc3RydWN0IHJlZiAqcmVmKQorc3RhdGljIHZvaWQgcHJpbnRfb2tfcmVmX3N0YXR1cyhzdHJ1Y3QgcmVmICpyZWYsIGludCBwb3JjZWxhaW4pCiB7CiAJaWYgKHJlZi0+ZGVsZXRpb24pCi0JCXByaW50X3JlZl9zdGF0dXMoJy0nLCAiW2RlbGV0ZWRdIiwgcmVmLCBOVUxMLCBOVUxMKTsKKwkJcHJpbnRfcmVmX3N0YXR1cygnLScsICJbZGVsZXRlZF0iLCByZWYsIE5VTEwsIE5VTEwsIHBvcmNlbGFpbik7CiAJZWxzZSBpZiAoaXNfbnVsbF9zaGExKHJlZi0+b2xkX3NoYTEpKQogCQlwcmludF9yZWZfc3RhdHVzKCcqJywKIAkJCSghcHJlZml4Y21wKHJlZi0+bmFtZSwgInJlZnMvdGFncy8iKSA/ICJbbmV3IHRhZ10iIDoKLQkJCSAgIltuZXcgYnJhbmNoXSIpLAotCQkJcmVmLCByZWYtPnBlZXJfcmVmLCBOVUxMKTsKKwkJCSJbbmV3IGJyYW5jaF0iKSwKKwkJCXJlZiwgcmVmLT5wZWVyX3JlZiwgTlVMTCwgcG9yY2VsYWluKTsKIAllbHNlIHsKIAkJY2hhciBxdWlja3JlZls4NF07CiAJCWNoYXIgdHlwZTsKQEAgLTc3NCw1MCArNzc2LDUxIEBACiAJCX0KIAkJc3RyY2F0KHF1aWNrcmVmLCBzdGF0dXNfYWJicmV2KHJlZi0+bmV3X3NoYTEpKTsKIAotCQlwcmludF9yZWZfc3RhdHVzKHR5cGUsIHF1aWNrcmVmLCByZWYsIHJlZi0+cGVlcl9yZWYsIG1zZyk7CisJCXByaW50X3JlZl9zdGF0dXModHlwZSwgcXVpY2tyZWYsIHJlZiwgcmVmLT5wZWVyX3JlZiwgbXNnLCBwb3JjZWxhaW4pOwogCX0KIH0KIAotc3RhdGljIGludCBwcmludF9vbmVfcHVzaF9zdGF0dXMoc3RydWN0IHJlZiAqcmVmLCBjb25zdCBjaGFyICpkZXN0LCBpbnQgY291bnQpCitzdGF0aWMgaW50IHByaW50X29uZV9wdXNoX3N0YXR1cyhzdHJ1Y3QgcmVmICpyZWYsIGNvbnN0IGNoYXIgKmRlc3QsIGludCBjb3VudCwgaW50IHBvcmNlbGFpbikKIHsKIAlpZiAoIWNvdW50KQogCQlmcHJpbnRmKHN0ZGVyciwgIlRvICVzXG4iLCBkZXN0KTsKIAogCXN3aXRjaChyZWYtPnN0YXR1cykgewogCWNhc2UgUkVGX1NUQVRVU19OT05FOgotCQlwcmludF9yZWZfc3RhdHVzKCdYJywgIltubyBtYXRjaF0iLCByZWYsIE5VTEwsIE5VTEwpOworCQlwcmludF9yZWZfc3RhdHVzKCdYJywgIltubyBtYXRjaF0iLCByZWYsIE5VTEwsIE5VTEwsIHBvcmNlbGFpbik7CiAJCWJyZWFrOwogCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTk9ERUxFVEU6CiAJCXByaW50X3JlZl9zdGF0dXMoJyEnLCAiW3JlamVjdGVkXSIsIHJlZiwgTlVMTCwKLQkJCQkicmVtb3RlIGRvZXMgbm90IHN1cHBvcnQgZGVsZXRpbmcgcmVmcyIpOworCQkJCQkJICJyZW1vdGUgZG9lcyBub3Qgc3VwcG9ydCBkZWxldGluZyByZWZzIiwgcG9yY2VsYWluKTsKIAkJYnJlYWs7CiAJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgogCQlwcmludF9yZWZfc3RhdHVzKCc9JywgIlt1cCB0byBkYXRlXSIsIHJlZiwKLQkJCQlyZWYtPnBlZXJfcmVmLCBOVUxMKTsKKwkJCQkJCSByZWYtPnBlZXJfcmVmLCBOVUxMLCBwb3JjZWxhaW4pOwogCQlicmVhazsKIAljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEOgogCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZWplY3RlZF0iLCByZWYsIHJlZi0+cGVlcl9yZWYsCi0JCQkJIm5vbi1mYXN0IGZvcndhcmQiKTsKKwkJCQkJCSAibm9uLWZhc3QgZm9yd2FyZCIsIHBvcmNlbGFpbik7CiAJCWJyZWFrOwogCWNhc2UgUkVGX1NUQVRVU19SRU1PVEVfUkVKRUNUOgogCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZW1vdGUgcmVqZWN0ZWRdIiwgcmVmLAotCQkJCXJlZi0+ZGVsZXRpb24gPyBOVUxMIDogcmVmLT5wZWVyX3JlZiwKLQkJCQlyZWYtPnJlbW90ZV9zdGF0dXMpOworCQkJCQkJIHJlZi0+ZGVsZXRpb24gPyBOVUxMIDogcmVmLT5wZWVyX3JlZiwKKwkJCQkJCSByZWYtPnJlbW90ZV9zdGF0dXMsIHBvcmNlbGFpbik7CiAJCWJyZWFrOwogCWNhc2UgUkVGX1NUQVRVU19FWFBFQ1RJTkdfUkVQT1JUOgogCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZW1vdGUgZmFpbHVyZV0iLCByZWYsCi0JCQkJcmVmLT5kZWxldGlvbiA/IE5VTEwgOiByZWYtPnBlZXJfcmVmLAotCQkJCSJyZW1vdGUgZmFpbGVkIHRvIHJlcG9ydCBzdGF0dXMiKTsKKwkJCQkJCSByZWYtPmRlbGV0aW9uID8gTlVMTCA6IHJlZi0+cGVlcl9yZWYsCisJCQkJCQkgInJlbW90ZSBmYWlsZWQgdG8gcmVwb3J0IHN0YXR1cyIsIHBvcmNlbGFpbik7CiAJCWJyZWFrOwogCWNhc2UgUkVGX1NUQVRVU19PSzoKLQkJcHJpbnRfb2tfcmVmX3N0YXR1cyhyZWYpOworCQlwcmludF9va19yZWZfc3RhdHVzKHJlZiwgcG9yY2VsYWluKTsKIAkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50X3B1c2hfc3RhdHVzKGNvbnN0IGNoYXIgKmRlc3QsIHN0cnVjdCByZWYgKnJlZnMsIGludCB2ZXJib3NlKQorc3RhdGljIHZvaWQgcHJpbnRfcHVzaF9zdGF0dXMoY29uc3QgY2hhciAqZGVzdCwgc3RydWN0IHJlZiAqcmVmcywKKwkJCSAgICAgIGludCB2ZXJib3NlLCBpbnQgcG9yY2VsYWluLCBpbnQgKiBub25mYXN0Zm9yd2FyZCkKIHsKIAlzdHJ1Y3QgcmVmICpyZWY7CiAJaW50IG4gPSAwOwpAQCAtODI1LDE4ICs4MjgsMjEgQEAKIAlpZiAodmVyYm9zZSkgewogCQlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQogCQkJaWYgKHJlZi0+c3RhdHVzID09IFJFRl9TVEFUVVNfVVBUT0RBVEUpCi0JCQkJbiArPSBwcmludF9vbmVfcHVzaF9zdGF0dXMocmVmLCBkZXN0LCBuKTsKKwkJCQluICs9IHByaW50X29uZV9wdXNoX3N0YXR1cyhyZWYsIGRlc3QsIG4sIHBvcmNlbGFpbik7CiAJfQogCiAJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKIAkJaWYgKHJlZi0+c3RhdHVzID09IFJFRl9TVEFUVVNfT0spCi0JCQluICs9IHByaW50X29uZV9wdXNoX3N0YXR1cyhyZWYsIGRlc3QsIG4pOworCQkJbiArPSBwcmludF9vbmVfcHVzaF9zdGF0dXMocmVmLCBkZXN0LCBuLCBwb3JjZWxhaW4pOwogCisJKm5vbmZhc3Rmb3J3YXJkID0gMDsKIAlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CiAJCWlmIChyZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX05PTkUgJiYKIAkJICAgIHJlZi0+c3RhdHVzICE9IFJFRl9TVEFUVVNfVVBUT0RBVEUgJiYKIAkJICAgIHJlZi0+c3RhdHVzICE9IFJFRl9TVEFUVVNfT0spCi0JCQluICs9IHByaW50X29uZV9wdXNoX3N0YXR1cyhyZWYsIGRlc3QsIG4pOworCQkJbiArPSBwcmludF9vbmVfcHVzaF9zdGF0dXMocmVmLCBkZXN0LCBuLCBwb3JjZWxhaW4pOworCQlpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQpCisJCQkqbm9uZmFzdGZvcndhcmQgPSAxOwogCX0KIH0KIApAQCAtOTk0LDcgKzEwMDAsOCBAQAogfQogCiBpbnQgdHJhbnNwb3J0X3B1c2goc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAotCQkgICBpbnQgcmVmc3BlY19uciwgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmbGFncykKKwkJICAgaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MsCisJCSAgIGludCAqIG5vbmZhc3Rmb3J3YXJkKQogewogCXZlcmlmeV9yZW1vdGVfbmFtZXMocmVmc3BlY19uciwgcmVmc3BlYyk7CiAKQEAgLTEwMDMsMTAgKzEwMTAsMTAgQEAKIAlpZiAodHJhbnNwb3J0LT5wdXNoX3JlZnMpIHsKIAkJc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMgPQogCQkJdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0KHRyYW5zcG9ydCwgMSk7Ci0JCXN0cnVjdCByZWYgKipyZW1vdGVfdGFpbDsKIAkJc3RydWN0IHJlZiAqbG9jYWxfcmVmcyA9IGdldF9sb2NhbF9oZWFkcygpOwogCQlpbnQgbWF0Y2hfZmxhZ3MgPSBNQVRDSF9SRUZTX05PTkU7CiAJCWludCB2ZXJib3NlID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9WRVJCT1NFOworCQlpbnQgcG9yY2VsYWluID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9QT1JDRUxBSU47CiAJCWludCByZXQ7CiAKIAkJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfQUxMKQpAQCAtMTAxNCwxNyArMTAyMSwxNCBAQAogCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9NSVJST1IpCiAJCQltYXRjaF9mbGFncyB8PSBNQVRDSF9SRUZTX01JUlJPUjsKIAotCQlyZW1vdGVfdGFpbCA9ICZyZW1vdGVfcmVmczsKLQkJd2hpbGUgKCpyZW1vdGVfdGFpbCkKLQkJCXJlbW90ZV90YWlsID0gJigoKnJlbW90ZV90YWlsKS0+bmV4dCk7Ci0JCWlmIChtYXRjaF9yZWZzKGxvY2FsX3JlZnMsIHJlbW90ZV9yZWZzLCAmcmVtb3RlX3RhaWwsCisJCWlmIChtYXRjaF9yZWZzKGxvY2FsX3JlZnMsICZyZW1vdGVfcmVmcywKIAkJCSAgICAgICByZWZzcGVjX25yLCByZWZzcGVjLCBtYXRjaF9mbGFncykpIHsKIAkJCXJldHVybiAtMTsKIAkJfQogCiAJCXJldCA9IHRyYW5zcG9ydC0+cHVzaF9yZWZzKHRyYW5zcG9ydCwgcmVtb3RlX3JlZnMsIGZsYWdzKTsKIAotCQlwcmludF9wdXNoX3N0YXR1cyh0cmFuc3BvcnQtPnVybCwgcmVtb3RlX3JlZnMsIHZlcmJvc2UpOworCQlwcmludF9wdXNoX3N0YXR1cyh0cmFuc3BvcnQtPnVybCwgcmVtb3RlX3JlZnMsIHZlcmJvc2UgfCBwb3JjZWxhaW4sIHBvcmNlbGFpbiwgbm9uZmFzdGZvcndhcmQpOwogCiAJCWlmICghKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTikpIHsKIAkJCXN0cnVjdCByZWYgKnJlZjsKQEAgLTEwODMsMyArMTA4Nyw1MSBAQAogCWZyZWUodHJhbnNwb3J0KTsKIAlyZXR1cm4gcmV0OwogfQorCisvKgorICogU3RyaXAgdXNlcm5hbWUgKGFuZCBwYXNzd29yZCkgZnJvbSBhbiB1cmwgYW5kIHJldHVybgorICogaXQgaW4gYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nLgorICovCitjaGFyICp0cmFuc3BvcnRfYW5vbnltaXplX3VybChjb25zdCBjaGFyICp1cmwpCit7CisJY2hhciAqYW5vbl91cmwsICpzY2hlbWVfcHJlZml4LCAqYW5vbl9wYXJ0OworCXNpemVfdCBhbm9uX2xlbiwgcHJlZml4X2xlbiA9IDA7CisKKwlhbm9uX3BhcnQgPSBzdHJjaHIodXJsLCAnQCcpOworCWlmIChpc19sb2NhbCh1cmwpIHx8ICFhbm9uX3BhcnQpCisJCWdvdG8gbGl0ZXJhbF9jb3B5OworCisJYW5vbl9sZW4gPSBzdHJsZW4oKythbm9uX3BhcnQpOworCXNjaGVtZV9wcmVmaXggPSBzdHJzdHIodXJsLCAiOi8vIik7CisJaWYgKCFzY2hlbWVfcHJlZml4KSB7CisJCWlmICghc3RyY2hyKGFub25fcGFydCwgJzonKSkKKwkJCS8qIGNhbm5vdCBiZSAibWVAdGhlcmU6L3BhdGgvbmFtZSIgKi8KKwkJCWdvdG8gbGl0ZXJhbF9jb3B5OworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKmNwOworCQkvKiBtYWtlIHN1cmUgc2NoZW1lIGlzIHJlYXNvbmFibGUgKi8KKwkJZm9yIChjcCA9IHVybDsgY3AgPCBzY2hlbWVfcHJlZml4OyBjcCsrKSB7CisJCQlzd2l0Y2ggKCpjcCkgeworCQkJCS8qIFJGQyAxNzM4IDIuMSAqLworCQkJY2FzZSAnKyc6IGNhc2UgJy4nOiBjYXNlICctJzoKKwkJCQlicmVhazsgLyogb2sgKi8KKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGlzYWxudW0oKmNwKSkKKwkJCQkJYnJlYWs7CisJCQkJLyogaXQgaXNuJ3QgKi8KKwkJCQlnb3RvIGxpdGVyYWxfY29weTsKKwkJCX0KKwkJfQorCQkvKiBAIHBhc3QgdGhlIGZpcnN0IHNsYXNoIGRvZXMgbm90IGNvdW50ICovCisJCWNwID0gc3RyY2hyKHNjaGVtZV9wcmVmaXggKyAzLCAnLycpOworCQlpZiAoY3AgJiYgY3AgPCBhbm9uX3BhcnQpCisJCQlnb3RvIGxpdGVyYWxfY29weTsKKwkJcHJlZml4X2xlbiA9IHNjaGVtZV9wcmVmaXggLSB1cmwgKyAzOworCX0KKwlhbm9uX3VybCA9IHhjYWxsb2MoMSwgMSArIHByZWZpeF9sZW4gKyBhbm9uX2xlbik7CisJbWVtY3B5KGFub25fdXJsLCB1cmwsIHByZWZpeF9sZW4pOworCW1lbWNweShhbm9uX3VybCArIHByZWZpeF9sZW4sIGFub25fcGFydCwgYW5vbl9sZW4pOworCXJldHVybiBhbm9uX3VybDsKK2xpdGVyYWxfY29weToKKwlyZXR1cm4geHN0cmR1cCh1cmwpOworfQpkaWZmIC0tZ2l0IGEvdHJhbnNwb3J0LmggYi90cmFuc3BvcnQuaAppbmRleCBiMWMyMjUyLi42MzlmMTNkIDEwMDY0NAotLS0gYS90cmFuc3BvcnQuaAorKysgYi90cmFuc3BvcnQuaApAQCAtMzUsNiArMzUsNyBAQAogI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9EUllfUlVOIDQKICNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfTUlSUk9SIDgKICNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfVkVSQk9TRSAxNgorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9QT1JDRUxBSU4gMzIKIAogLyogUmV0dXJucyBhIHRyYW5zcG9ydCBzdWl0YWJsZSBmb3IgdGhlIHVybCAqLwogc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0X2dldChzdHJ1Y3QgcmVtb3RlICosIGNvbnN0IGNoYXIgKik7CkBAIC02NywxMiArNjgsMTQgQEAKIAkJCSBjb25zdCBjaGFyICp2YWx1ZSk7CiAKIGludCB0cmFuc3BvcnRfcHVzaChzdHJ1Y3QgdHJhbnNwb3J0ICpjb25uZWN0aW9uLAotCQkgICBpbnQgcmVmc3BlY19uciwgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmbGFncyk7CisJCSAgIGludCByZWZzcGVjX25yLCBjb25zdCBjaGFyICoqcmVmc3BlYywgaW50IGZsYWdzLAorCQkgICBpbnQgKiBub25mYXN0Zm9yd2FyZCk7CiAKIGNvbnN0IHN0cnVjdCByZWYgKnRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKIAogaW50IHRyYW5zcG9ydF9mZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3Qgc3RydWN0IHJlZiAqcmVmcyk7CiB2b2lkIHRyYW5zcG9ydF91bmxvY2tfcGFjayhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpOwogaW50IHRyYW5zcG9ydF9kaXNjb25uZWN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCk7CitjaGFyICp0cmFuc3BvcnRfYW5vbnltaXplX3VybChjb25zdCBjaGFyICp1cmwpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3RyZWUtZGlmZi5jIGIvdHJlZS1kaWZmLmMKaW5kZXggZWRkODM5NC4uMDQ1OWU1NCAxMDA2NDQKLS0tIGEvdHJlZS1kaWZmLmMKKysrIGIvdHJlZS1kaWZmLmMKQEAgLTIzOSw2ICsyMzksMTIgQEAKIAkJaWYgKCF0cmVlIHx8IHR5cGUgIT0gT0JKX1RSRUUpCiAJCQlkaWUoImNvcnJ1cHQgdHJlZSBzaGEgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CiAKKwkJaWYgKERJRkZfT1BUX1RTVChvcHQsIFRSRUVfSU5fUkVDVVJTSVZFKSkgeworCQkJbmV3YmFzZVtiYXNlbGVuICsgcGF0aGxlbl0gPSAwOworCQkJb3B0LT5hZGRfcmVtb3ZlKG9wdCwgKnByZWZpeCwgbW9kZSwgc2hhMSwgbmV3YmFzZSk7CisJCQluZXdiYXNlW2Jhc2VsZW4gKyBwYXRobGVuXSA9ICcvJzsKKwkJfQorCiAJCWluaXRfdHJlZV9kZXNjKCZpbm5lciwgdHJlZSwgc2l6ZSk7CiAJCXNob3dfdHJlZShvcHQsIHByZWZpeCwgJmlubmVyLCBuZXdiYXNlLCBiYXNlbGVuICsgMSArIHBhdGhsZW4pOwogCmRpZmYgLS1naXQgYS91bnBhY2stZmlsZS5jIGIvdW5wYWNrLWZpbGUuYwppbmRleCA3NWNkMmYxLi5hYzljYmY3IDEwMDY0NAotLS0gYS91bnBhY2stZmlsZS5jCisrKyBiL3VucGFjay1maWxlLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAlzdHJjcHkocGF0aCwgIi5tZXJnZV9maWxlX1hYWFhYWCIpOwogCWZkID0geG1rc3RlbXAocGF0aCk7CiAJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1Ziwgc2l6ZSkgIT0gc2l6ZSkKLQkJZGllKCJ1bmFibGUgdG8gd3JpdGUgdGVtcC1maWxlIik7CisJCWRpZV9lcnJubygidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOwogCWNsb3NlKGZkKTsKIAlyZXR1cm4gcGF0aDsKIH0KZGlmZiAtLWdpdCBhL3VucGFjay10cmVlcy5jIGIvdW5wYWNrLXRyZWVzLmMKaW5kZXggYTA2OTdkMi4uNzIwZjdhMSAxMDA2NDQKLS0tIGEvdW5wYWNrLXRyZWVzLmMKKysrIGIvdW5wYWNrLXRyZWVzLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogCiBzdGF0aWMgaW50IHVucGFja19pbmRleF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpzcmNbNV0gPSB7IGNlLCB9OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjWzVdID0geyBjZSwgTlVMTCwgfTsKIAogCW8tPnBvcysrOwogCWlmIChjZV9zdGFnZShjZSkpIHsKQEAgLTE0MCw3ICsxNDAsNyBAQAogCXJldHVybiBjYWxsX3VucGFja19mbihzcmMsIG8pOwogfQogCi1pbnQgdHJhdmVyc2VfdHJlZXNfcmVjdXJzaXZlKGludCBuLCB1bnNpZ25lZCBsb25nIGRpcm1hc2ssIHVuc2lnbmVkIGxvbmcgZGZfY29uZmxpY3RzLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbmFtZXMsIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQorc3RhdGljIGludCB0cmF2ZXJzZV90cmVlc19yZWN1cnNpdmUoaW50IG4sIHVuc2lnbmVkIGxvbmcgZGlybWFzaywgdW5zaWduZWQgbG9uZyBkZl9jb25mbGljdHMsIHN0cnVjdCBuYW1lX2VudHJ5ICpuYW1lcywgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCiB7CiAJaW50IGk7CiAJc3RydWN0IHRyZWVfZGVzYyB0W01BWF9VTlBBQ0tfVFJFRVNdOwpAQCAtMzI2LDYgKzMyNiwyMyBAQAogCQkJaWYgKHNyY1swXSkKIAkJCQljb25mbGljdHMgfD0gMTsKIAkJfQorCisJCS8qIHNwZWNpYWwgY2FzZTogImRpZmYtaW5kZXggLS1jYWNoZWQiIGxvb2tpbmcgYXQgYSB0cmVlICovCisJCWlmIChvLT5kaWZmX2luZGV4X2NhY2hlZCAmJgorCQkgICAgbiA9PSAxICYmIGRpcm1hc2sgPT0gMSAmJiBTX0lTRElSKG5hbWVzLT5tb2RlKSkgeworCQkJaW50IG1hdGNoZXM7CisJCQltYXRjaGVzID0gY2FjaGVfdHJlZV9tYXRjaGVzX3RyYXZlcnNhbChvLT5zcmNfaW5kZXgtPmNhY2hlX3RyZWUsCisJCQkJCQkJICAgICAgIG5hbWVzLCBpbmZvKTsKKwkJCS8qCisJCQkgKiBFdmVyeXRoaW5nIHVuZGVyIHRoZSBuYW1lIG1hdGNoZXMuICBBZGp1c3Qgby0+cG9zIHRvCisJCQkgKiBza2lwIHRoZSBlbnRpcmUgaGllcmFyY2h5LgorCQkJICovCisJCQlpZiAobWF0Y2hlcykgeworCQkJCW8tPnBvcyArPSBtYXRjaGVzOworCQkJCXJldHVybiBtYXNrOworCQkJfQorCQl9CisKIAkJaWYgKHRyYXZlcnNlX3RyZWVzX3JlY3Vyc2l2ZShuLCBkaXJtYXNrLCBjb25mbGljdHMsCiAJCQkJCSAgICAgbmFtZXMsIGluZm8pIDwgMCkKIAkJCXJldHVybiAtMTsKQEAgLTUzNCw3ICs1NTEsNyBAQAogCW1lbXNldCgmZCwgMCwgc2l6ZW9mKGQpKTsKIAlpZiAoby0+ZGlyKQogCQlkLmV4Y2x1ZGVfcGVyX2RpciA9IG8tPmRpci0+ZXhjbHVkZV9wZXJfZGlyOwotCWkgPSByZWFkX2RpcmVjdG9yeSgmZCwgY2UtPm5hbWUsIHBhdGhidWYsIG5hbWVsZW4rMSwgTlVMTCk7CisJaSA9IHJlYWRfZGlyZWN0b3J5KCZkLCBwYXRoYnVmLCBuYW1lbGVuKzEsIE5VTEwpOwogCWlmIChpKQogCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOgogCQkJZXJyb3IoRVJST1JNU0cobywgbm90X3VwdG9kYXRlX2RpciksIGNlLT5uYW1lKTsKQEAgLTk4Nyw3ICsxMDA0LDcgQEAKIAogCWlmIChvbGQgJiYgc2FtZShvbGQsIGEpKSB7CiAJCWludCB1cGRhdGUgPSAwOwotCQlpZiAoby0+cmVzZXQpIHsKKwkJaWYgKG8tPnJlc2V0ICYmICFjZV91cHRvZGF0ZShvbGQpKSB7CiAJCQlzdHJ1Y3Qgc3RhdCBzdDsKIAkJCWlmIChsc3RhdChvbGQtPm5hbWUsICZzdCkgfHwKIAkJCSAgICBpZV9tYXRjaF9zdGF0KG8tPnNyY19pbmRleCwgb2xkLCAmc3QsIENFX01BVENIX0lHTk9SRV9WQUxJRCkpCmRpZmYgLS1naXQgYS91bnBhY2stdHJlZXMuaCBiL3VucGFjay10cmVlcy5oCmluZGV4IDBkMjZmM2QuLjFlMGUyMzIgMTAwNjQ0Ci0tLSBhL3VucGFjay10cmVlcy5oCisrKyBiL3VucGFjay10cmVlcy5oCkBAIC0yNyw2ICsyNyw3IEBACiAJCSAgICAgYWdncmVzc2l2ZToxLAogCQkgICAgIHNraXBfdW5tZXJnZWQ6MSwKIAkJICAgICBpbml0aWFsX2NoZWNrb3V0OjEsCisJCSAgICAgZGlmZl9pbmRleF9jYWNoZWQ6MSwKIAkJICAgICBnZW50bHk6MTsKIAljb25zdCBjaGFyICpwcmVmaXg7CiAJaW50IHBvczsKZGlmZiAtLWdpdCBhL3VwbG9hZC1wYWNrLmMgYi91cGxvYWQtcGFjay5jCmluZGV4IGVkYzc4NjEuLjg0MWViYjUgMTAwNjQ0Ci0tLSBhL3VwbG9hZC1wYWNrLmMKKysrIGIvdXBsb2FkLXBhY2suYwpAQCAtMjgsNyArMjgsNyBAQAogCiBzdGF0aWMgaW50IG11bHRpX2FjaywgbnJfb3VyX3JlZnM7CiBzdGF0aWMgaW50IHVzZV90aGluX3BhY2ssIHVzZV9vZnNfZGVsdGEsIHVzZV9pbmNsdWRlX3RhZzsKLXN0YXRpYyBpbnQgbm9fcHJvZ3Jlc3M7CitzdGF0aWMgaW50IG5vX3Byb2dyZXNzLCBkYWVtb25fbW9kZTsKIHN0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2FycmF5IGhhdmVfb2JqOwogc3RhdGljIHN0cnVjdCBvYmplY3RfYXJyYXkgd2FudF9vYmo7CiBzdGF0aWMgdW5zaWduZWQgaW50IHRpbWVvdXQ7CkBAIC01MjEsNiArNTIxLDEwIEBACiAJfQogCWlmIChkZWJ1Z19mZCkKIAkJd3JpdGVfaW5fZnVsbChkZWJ1Z19mZCwgIiNFXG4iLCAzKTsKKworCWlmICghdXNlX3NpZGViYW5kICYmIGRhZW1vbl9tb2RlKQorCQlub19wcm9ncmVzcyA9IDE7CisKIAlpZiAoZGVwdGggPT0gMCAmJiBzaGFsbG93cy5uciA9PSAwKQogCQlyZXR1cm47CiAJaWYgKGRlcHRoID4gMCkgewpAQCAtNjMwLDYgKzYzNCw3IEBACiAJCX0KIAkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS10aW1lb3V0PSIpKSB7CiAJCQl0aW1lb3V0ID0gYXRvaShhcmcrMTApOworCQkJZGFlbW9uX21vZGUgPSAxOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgewpkaWZmIC0tZ2l0IGEvdXNhZ2UuYyBiL3VzYWdlLmMKaW5kZXggODIwZDA5Zi4uYjZhZWE0NSAxMDA2NDQKLS0tIGEvdXNhZ2UuYworKysgYi91c2FnZS5jCkBAIC02MCw2ICs2MCwzNCBAQAogCXZhX2VuZChwYXJhbXMpOwogfQogCit2b2lkIGRpZV9lcnJubyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKwljaGFyIGZtdF93aXRoX2VyclsxMDI0XTsKKwljaGFyIHN0cl9lcnJvclsyNTZdLCAqZXJyOworCWludCBpLCBqOworCisJZXJyID0gc3RyZXJyb3IoZXJybm8pOworCWZvciAoaSA9IGogPSAwOyBlcnJbaV0gJiYgaiA8IHNpemVvZihzdHJfZXJyb3IpIC0gMTsgKSB7CisJCWlmICgoc3RyX2Vycm9yW2orK10gPSBlcnJbaSsrXSkgIT0gJyUnKQorCQkJY29udGludWU7CisJCWlmIChqIDwgc2l6ZW9mKHN0cl9lcnJvcikgLSAxKSB7CisJCQlzdHJfZXJyb3JbaisrXSA9ICclJzsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vIHJvb20gdG8gZG91YmxlIHRoZSAnJScsIHNvIHdlIG92ZXJ3cml0ZSBpdCB3aXRoCisJCQkgKiAnXDAnIGJlbG93ICovCisJCQlqLS07CisJCQlicmVhazsKKwkJfQorCX0KKwlzdHJfZXJyb3Jbal0gPSAwOworCXNucHJpbnRmKGZtdF93aXRoX2Vyciwgc2l6ZW9mKGZtdF93aXRoX2VyciksICIlczogJXMiLCBmbXQsIHN0cl9lcnJvcik7CisKKwl2YV9zdGFydChwYXJhbXMsIGZtdCk7CisJZGllX3JvdXRpbmUoZm10X3dpdGhfZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCiBpbnQgZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pCiB7CiAJdmFfbGlzdCBwYXJhbXM7CmRpZmYgLS1naXQgYS91dGY4LmMgYi91dGY4LmMKaW5kZXggZGRmZGM1ZS4uZGI3MDZhYyAxMDA2NDQKLS0tIGEvdXRmOC5jCisrKyBiL3V0ZjguYwpAQCAtMzU0LDcgKzM1NCw3IEBACiAgKiB3aXRoIGljb252LiAgSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybnMgTlVMTC4KICAqLwogI2lmbmRlZiBOT19JQ09OVgotI2lmZGVmIE9MRF9JQ09OVgorI2lmIGRlZmluZWQoT0xEX0lDT05WKSB8fCAoZGVmaW5lZChfX3N1bl9fKSAmJiAhZGVmaW5lZChfWFBHNikpCiAJdHlwZWRlZiBjb25zdCBjaGFyICogaWNvbnZfaWJwOwogI2Vsc2UKIAl0eXBlZGVmIGNoYXIgKiBpY29udl9pYnA7CmRpZmYgLS1naXQgYS93YWxrZXIuYyBiL3dhbGtlci5jCmluZGV4IGU1NzYzMGUuLjExZDkwNTIgMTAwNjQ0Ci0tLSBhL3dhbGtlci5jCisrKyBiL3dhbGtlci5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIHsKIAl3aGlsZSAodGFyZ2V0cy0tKSB7CiAJCWZyZWUodGFyZ2V0W3RhcmdldHNdKTsKLQkJaWYgKHdyaXRlX3JlZiAmJiB3cml0ZV9yZWZbdGFyZ2V0c10pCisJCWlmICh3cml0ZV9yZWYpCiAJCQlmcmVlKChjaGFyICopIHdyaXRlX3JlZlt0YXJnZXRzXSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvd3JhcHBlci5jIGIvd3JhcHBlci5jCmluZGV4IDdlYjMyMTguLmM5YmUxNDAgMTAwNjQ0Ci0tLSBhL3dyYXBwZXIuYworKysgYi93cmFwcGVyLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAkJcmVsZWFzZV9wYWNrX21lbW9yeShsZW5ndGgsIGZkKTsKIAkJcmV0ID0gbW1hcChzdGFydCwgbGVuZ3RoLCBwcm90LCBmbGFncywgZmQsIG9mZnNldCk7CiAJCWlmIChyZXQgPT0gTUFQX0ZBSUxFRCkKLQkJCWRpZSgiT3V0IG9mIG1lbW9yeT8gbW1hcCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiT3V0IG9mIG1lbW9yeT8gbW1hcCBmYWlsZWQiKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3NSw3ICsxNzUsNyBAQAogewogCWludCByZXQgPSBkdXAoZmQpOwogCWlmIChyZXQgPCAwKQotCQlkaWUoImR1cCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJkdXAgZmFpbGVkIik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTgzLDcgKzE4Myw3IEBACiB7CiAJRklMRSAqc3RyZWFtID0gZmRvcGVuKGZkLCBtb2RlKTsKIAlpZiAoc3RyZWFtID09IE5VTEwpCi0JCWRpZSgiT3V0IG9mIG1lbW9yeT8gZmRvcGVuIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIk91dCBvZiBtZW1vcnk/IGZkb3BlbiBmYWlsZWQiKTsKIAlyZXR1cm4gc3RyZWFtOwogfQogCkBAIC0xOTMsNyArMTkzLDcgQEAKIAogCWZkID0gbWtzdGVtcCh0ZW1wbGF0ZSk7CiAJaWYgKGZkIDwgMCkKLQkJZGllKCJVbmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiVW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIpOwogCXJldHVybiBmZDsKIH0KIApkaWZmIC0tZ2l0IGEvd3JpdGVfb3JfZGllLmMgYi93cml0ZV9vcl9kaWUuYwppbmRleCA0YzI5MjU1Li5kNDViNTM2IDEwMDY0NAotLS0gYS93cml0ZV9vcl9kaWUuYworKysgYi93cml0ZV9vcl9kaWUuYwpAQCAtNDEsMTQgKzQxLDE0IEBACiAJCSAqLwogCQlpZiAoZXJybm8gPT0gRVBJUEUgfHwgZXJybm8gPT0gRUlOVkFMKQogCQkJZXhpdCgwKTsKLQkJZGllKCJ3cml0ZSBmYWlsdXJlIG9uICVzOiAlcyIsIGRlc2MsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygid3JpdGUgZmFpbHVyZSBvbiAnJXMnIiwgZGVzYyk7CiAJfQogfQogCiB2b2lkIGZzeW5jX29yX2RpZShpbnQgZmQsIGNvbnN0IGNoYXIgKm1zZykKIHsKIAlpZiAoZnN5bmMoZmQpIDwgMCkgewotCQlkaWUoIiVzOiBmc3luYyBlcnJvciAoJXMpIiwgbXNnLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImZzeW5jIGVycm9yIG9uICclcyciLCBtc2cpOwogCX0KIH0KIApAQCAtNTcsNyArNTcsNyBAQAogCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYsIGNvdW50KSA8IDApIHsKIAkJaWYgKGVycm5vID09IEVQSVBFKQogCQkJZXhpdCgwKTsKLQkJZGllKCJ3cml0ZSBlcnJvciAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJ3cml0ZSBlcnJvciIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvd3Qtc3RhdHVzLmMgYi93dC1zdGF0dXMuYwppbmRleCAxYjZkZjQ1Li40NzczNWQ4IDEwMDY0NAotLS0gYS93dC1zdGF0dXMuYworKysgYi93dC1zdGF0dXMuYwpAQCAtMTMsNyArMTMsNyBAQAogCiBpbnQgd3Rfc3RhdHVzX3JlbGF0aXZlX3BhdGhzID0gMTsKIGludCB3dF9zdGF0dXNfdXNlX2NvbG9yID0gLTE7Ci1pbnQgd3Rfc3RhdHVzX3N1Ym1vZHVsZV9zdW1tYXJ5Oworc3RhdGljIGludCB3dF9zdGF0dXNfc3VibW9kdWxlX3N1bW1hcnk7CiBzdGF0aWMgY2hhciB3dF9zdGF0dXNfY29sb3JzW11bQ09MT1JfTUFYTEVOXSA9IHsKIAlHSVRfQ09MT1JfTk9STUFMLCAvKiBXVF9TVEFUVVNfSEVBREVSICovCiAJR0lUX0NPTE9SX0dSRUVOLCAgLyogV1RfU1RBVFVTX1VQREFURUQgKi8KQEAgLTI1NSw3ICsyNTUsNyBAQAogCQkJRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVMgfCBESVJfSElERV9FTVBUWV9ESVJFQ1RPUklFUzsKIAlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKIAotCXJlYWRfZGlyZWN0b3J5KCZkaXIsICIuIiwgIiIsIDAsIE5VTEwpOworCWZpbGxfZGlyZWN0b3J5KCZkaXIsIE5VTEwpOwogCWZvcihpID0gMDsgaSA8IGRpci5ucjsgaSsrKSB7CiAJCXN0cnVjdCBkaXJfZW50cnkgKmVudCA9IGRpci5lbnRyaWVzW2ldOwogCQlpZiAoIWNhY2hlX25hbWVfaXNfb3RoZXIoZW50LT5uYW1lLCBlbnQtPmxlbikpCmRpZmYgLS1naXQgYS94ZGlmZi1pbnRlcmZhY2UuYyBiL3hkaWZmLWludGVyZmFjZS5jCmluZGV4IGI5YjBkYjguLjAxZjE0ZmIgMTAwNjQ0Ci0tLSBhL3hkaWZmLWludGVyZmFjZS5jCisrKyBiL3hkaWZmLWludGVyZmFjZS5jCkBAIC0zMDksNiArMzA5LDIxIEBACiAJfQogfQogCit2b2lkIHhkaWZmX2NsZWFyX2ZpbmRfZnVuYyh4ZGVtaXRjb25mX3QgKnhlY2ZnKQoreworCWlmICh4ZWNmZy0+ZmluZF9mdW5jKSB7CisJCWludCBpOworCQlzdHJ1Y3QgZmZfcmVncyAqcmVncyA9IHhlY2ZnLT5maW5kX2Z1bmNfcHJpdjsKKworCQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+bnI7IGkrKykKKwkJCXJlZ2ZyZWUoJnJlZ3MtPmFycmF5W2ldLnJlKTsKKwkJZnJlZShyZWdzLT5hcnJheSk7CisJCWZyZWUocmVncyk7CisJCXhlY2ZnLT5maW5kX2Z1bmMgPSBOVUxMOworCQl4ZWNmZy0+ZmluZF9mdW5jX3ByaXYgPSBOVUxMOworCX0KK30KKwogaW50IGdpdF94bWVyZ2Vfc3R5bGUgPSAtMTsKIAogaW50IGdpdF94bWVyZ2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQpkaWZmIC0tZ2l0IGEveGRpZmYtaW50ZXJmYWNlLmggYi94ZGlmZi1pbnRlcmZhY2UuaAppbmRleCA3MzUyYjlhLi41NTU3MmMzIDEwMDY0NAotLS0gYS94ZGlmZi1pbnRlcmZhY2UuaAorKysgYi94ZGlmZi1pbnRlcmZhY2UuaApAQCAtMjEsNiArMjEsNyBAQAogaW50IGJ1ZmZlcl9pc19iaW5hcnkoY29uc3QgY2hhciAqcHRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwogCiBleHRlcm4gdm9pZCB4ZGlmZl9zZXRfZmluZF9mdW5jKHhkZW1pdGNvbmZfdCAqeGVjZmcsIGNvbnN0IGNoYXIgKmxpbmUsIGludCBjZmxhZ3MpOworZXh0ZXJuIHZvaWQgeGRpZmZfY2xlYXJfZmluZF9mdW5jKHhkZW1pdGNvbmZfdCAqeGVjZmcpOwogZXh0ZXJuIGludCBnaXRfeG1lcmdlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CiBleHRlcm4gaW50IGdpdF94bWVyZ2Vfc3R5bGU7CiAKZGlmZiAtLWdpdCBhL3hkaWZmL3hkaWZmaS5jIGIveGRpZmYveGRpZmZpLmMKaW5kZXggMWViYWI2OC4uZGE2N2MwNCAxMDA2NDQKLS0tIGEveGRpZmYveGRpZmZpLmMKKysrIGIveGRpZmYveGRpZmZpLmMKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2RlZmluZSBYRExfTUFYX0NPU1RfTUlOIDI1NgogI2RlZmluZSBYRExfSEVVUl9NSU5fQ09TVCAyNTYKLSNkZWZpbmUgWERMX0xJTkVfTUFYIChsb25nKSgoMVVMIDw8ICg4ICogc2l6ZW9mKGxvbmcpIC0gMSkpIC0gMSkKKyNkZWZpbmUgWERMX0xJTkVfTUFYIChsb25nKSgoMVVMIDw8IChDSEFSX0JJVCAqIHNpemVvZihsb25nKSAtIDEpKSAtIDEpCiAjZGVmaW5lIFhETF9TTkFLRV9DTlQgMjAKICNkZWZpbmUgWERMX0tfSEVVUiA0CiAK