ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGM5MDY4ZmUuLjNiOWUxNjAgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMzM5LDcgKzMzOSw3IEBACiBEOiBkc3A1NmsgZGV2aWNlIGRyaXZlcgogCiBOOiBSb3NzIEJpcm8KLUU6IGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdQorRTogcm9zcy5iaXJvQGdtYWlsLmNvbQogRDogT3JpZ2luYWwgYXV0aG9yIG9mIHRoZSBMaW51eCBuZXR3b3JraW5nIGNvZGUKIAogTjogQW50b24gQmxhbmNoYXJkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWAppbmRleCA3MmRjOTBmLi44ZGU4YTAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKQEAgLTEyLDggKzEyLDYgQEAKIAogMDAtSU5ERVgKIAktIHRoaXMgZmlsZS4KLUJLLXVzYWdlLwotCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiBCaXRLZWVwZXIuCiBCVUctSFVOVElORwogCS0gYnJ1dGUgZm9yY2UgbWV0aG9kIG9mIGRvaW5nIGJpbmFyeSBzZWFyY2ggb2YgcGF0Y2hlcyB0byBmaW5kIGJ1Zy4KIENoYW5nZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlLzAwLUlOREVYCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mjc2ODc4Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvMDAtSU5ERVgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1iay1rZXJuZWwtaG93dG8udHh0OiBEZXNjcmlwdGlvbiBvZiBrZXJuZWwgd29ya2Zsb3cgdW5kZXIgQml0S2VlcGVyCi0KLWJrLW1ha2Utc3VtOiBDcmVhdGUgc3VtbWFyeSBvZiBjaGFuZ2VzZXRzIGluIG9uZSByZXBvc2l0b3J5IGFuZCBub3QKLWFub3RoZXIsIHR5cGljYWxseSBpbiBwcmVwYXJhdGlvbiB0byBiZSBzZW50IHRvIGFuIHVwc3RyZWFtIG1haW50YWluZXIuCi1UeXBpY2FsIHVzYWdlOgotCWNkIG15LXVwZGF0ZWQtcmVwbwotCWJrLW1ha2Utc3VtIH4vcmVwby9vcmlnaW5hbC1yZXBvCi0JbXYgL3RtcC9saW51cy50eHQgLi4vb3JpZ2luYWwtcmVwby50eHQKLQotYmtzZW5kOiBDcmVhdGUgcmVhZGFibGUgdGV4dCBvdXRwdXQgY29udGFpbmluZyBzdW1tYXJ5IG9mIGNoYW5nZXMsIEdOVQotcGF0Y2ggb2YgdGhlIGNoYW5nZXMsIGFuZCBCSyBtZXRhZGF0YSBvZiBjaGFuZ2VzIChhcyBuZWVkZWQgZm9yIHByb3BlcgotaW1wb3J0aW5nIGludG8gQml0S2VlcGVyIGJ5IGFuIHVwc3RyZWFtIG1haW50YWluZXIpLiAgVGhpcyBvdXRwdXQgaXMKLXN1aXRhYmxlIGZvciBlbWFpbGluZyBCaXRLZWVwZXIgY2hhbmdlcy4gIFRoZSByZWNpcGllbnQgb2YgdGhpcyBvdXRwdXQKLW1heSBwaXBlIGl0IGRpcmVjdGx5IHRvICdiayByZWNlaXZlJy4KLQotYno2NHdyYXA6IGhlbHBlciBzY3JpcHQuIFVuY29tcHJlc3NlZCBpbnB1dCBpcyBwaXBlZCB0byB0aGlzIHNjcmlwdCwKLXdoaWNoIGNvbXByZXNzZXMgaXRzIGlucHV0LCBhbmQgdGhlbiBvdXRwdXRzIHRoZSB1dS0vYmFzZTY0LWVuY29kZWQKLXZlcnNpb24gb2YgdGhlIGNvbXByZXNzZWQgaW5wdXQuCi0KLWNwY3NldDogQ29weSBjaGFuZ2VzZXQgYmV0d2VlbiB1bnJlbGF0ZWQgcmVwb3NpdG9yaWVzLgotQXR0ZW1wdHMgdG8gcHJlc2VydmUgY2hhbmdlc2V0IHVzZXIsIHVzZXIgYWRkcmVzcywgZGVzY3JpcHRpb24sIGluCi1hZGRpdGlvbiB0byB0aGUgY2hhbmdlc2V0ICh0aGUgcGF0Y2gpIGl0c2VsZi4KLVR5cGljYWwgdXNhZ2U6Ci0JY2QgbXktdXBkYXRlZC1yZXBvCi0JYmsgY2hhbmdlcwkjIGxvb2tpbmcgZm9yIGEgY2hhbmdlc2V0Li4uCi0JY3Bjc2V0IDEuMTUxMSAuIC4uL2Fub3RoZXItcmVwbwotCi1jc2V0cy10by1wYXRjaGVzOiBQcm9kdWNlcyBhIGRlbHRhIG9mIHR3byBCSyByZXBvc2l0b3JpZXMsIGluIHRoZSBmb3JtCi1vZiBpbmRpdmlkdWFsIGZpbGVzLCBlYWNoIGNvbnRhaW5pbmcgYSBzaW5nbGUgY3NldCBhcyBhIEdOVSBwYXRjaC4KLU91dHB1dCBpcyBzZXZlcmFsIGZpbGVzLCBlYWNoIHdpdGggdGhlIGZpbGVuYW1lICIvdG1wL3Jldi0kUkVWLnBhdGNoIgotVHlwaWNhbCB1c2FnZToKLQljZCBteS11cGRhdGVkLXJlcG8KLQliayBjaGFuZ2VzIC1MIH4vcmVwby9vcmlnaW5hbC1yZXBvIDI+JjEgfCBcCi0JCXBlcmwgY3NldHMtdG8tcGF0Y2hlcwotCi1jc2V0LXRvLWxpbnVzOiBQcm9kdWNlcyBhIGRlbHRhIG9mIHR3byBCSyByZXBvc2l0b3JpZXMsIGluIHRoZSBmb3JtIG9mCi1jaGFuZ2VzZXQgZGVzY3JpcHRpb25zLCB3aXRoICdkaWZmc3RhdCcgb3V0cHV0IGNyZWF0ZWQgZm9yIGVhY2gKLWluZGl2aWR1YWwgY2hhbmdzZXQuCi1UeXBpY2FsIHVzYWdlOgotCWNkIG15LXVwZGF0ZWQtcmVwbwotCWJrIGNoYW5nZXMgLUwgfi9yZXBvL29yaWdpbmFsLXJlcG8gMj4mMSB8IFwKLQkJcGVybCBjc2V0LXRvLWxpbnVzID4gc3VtbWFyeS50eHQKLQotZ2NhcGF0Y2g6ICBHZW5lcmF0ZXMgcGF0Y2ggY29udGFpbmluZyBjaGFuZ2VzIGluIGxvY2FsIHJlcG9zaXRvcnkuCi1UeXBpY2FsIHVzYWdlOgotCWNkIG15LXVwZGF0ZWQtcmVwbwotCWdjYXBhdGNoID4gZm9vLnBhdGNoCi0KLXVuYno2NHdyYXA6IFJldmVyc2UgYW4gZW5jb2RlZCwgY29tcHJlc3NlZCBkYXRhIHN0cmVhbSBjcmVhdGVkIGJ5Ci1iejY0d3JhcCBpbnRvIGFuIHVuY29tcHJlc3NlZCwgdHlwaWNhbGx5IHRleHQvcGxhaW4gb3V0cHV0LgotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2JrLWtlcm5lbC1ob3d0by50eHQgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2JrLWtlcm5lbC1ob3d0by50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YjkwNzUuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9iay1rZXJuZWwtaG93dG8udHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLQotCQkgICBEb2luZyB0aGUgQksgVGhpbmcsIFBlbmd1aW4tU3R5bGUKLQotCi0KLQotVGhpcyBzZXQgb2Ygbm90ZXMgaXMgaW50ZW5kZWQgbWFpbmx5IGZvciBrZXJuZWwgZGV2ZWxvcGVycywgb2NjYXNpb25hbAotb3IgZnVsbC10aW1lLCBidXQgc3lzYWRtaW5zIGFuZCBwb3dlciB1c2VycyBtYXkgZmluZCBwYXJ0cyBvZiBpdCB1c2VmdWwKLWFzIHdlbGwuICBJdCBhc3N1bWVzIGF0IGxlYXN0IGEgYmFzaWMgZmFtaWxpYXJpdHkgd2l0aCBDVlMsIGJvdGggYXQgYQotdXNlciBsZXZlbCAodXNlIG9uIHRoZSBjbWQgbGluZSkgYW5kIGF0IGEgaGlnaGVyIGxldmVsIChjbGllbnQtc2VydmVyIG1vZGVsKS4KLUR1ZSB0byB0aGUgYXV0aG9yJ3MgYmFja2dyb3VuZCwgYW4gb3BlcmF0aW9uIG1heSBiZSBkZXNjcmliZWQgaW4gdGVybXMKLW9mIENWUywgb3IgaW4gdGVybXMgb2YgaG93IHRoYXQgb3BlcmF0aW9uIGRpZmZlcnMgZnJvbSBDVlMuCi0KLVRoaXMgaXMgLW5vdC0gaW50ZW5kZWQgdG8gYmUgQml0S2VlcGVyIGRvY3VtZW50YXRpb24uICBBbHdheXMgcnVuCi0iYmsgaGVscCA8Y29tbWFuZD4iIG9yIGluIFggImJrIGhlbHB0b29sIDxjb21tYW5kPiIgZm9yIHJlZmVyZW5jZQotZG9jdW1lbnRhdGlvbi4KLQotCi1CaXRLZWVwZXIgQ29uY2VwdHMKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JbiB0aGUgdHJ1ZSBuYXR1cmUgb2YgdGhlIEludGVybmV0IGl0c2VsZiwgQml0S2VlcGVyIGlzIGEgZGlzdHJpYnV0ZWQKLXN5c3RlbS4gIFdoZW4gYXBwbGllZCB0byByZXZpc2lvbiBjb250cm9sLCB0aGlzIG1lYW5zIGRvaW5nIGF3YXkgd2l0aAotY2xpZW50LXNlcnZlciwgYW5kIGNoYW5naW5nIHRvIGEgcGFyZW50LWNoaWxkIG1vZGVsLi4uIGVzc2VudGlhbGx5Ci1wZWVyLXRvLXBlZXIuICBPbiB0aGUgZGV2ZWxvcGVyJ3MgZW5kLCB0aGlzIGFsc28gcmVwcmVzZW50cyBhCi1mdW5kYW1lbnRhbCBkaXNydXB0aW9uIGluIHRoZSBzdGFuZGFyZCB3b3JrZmxvdyBvZiBjaGFuZ2VzLCBjb21taXRzLAotYW5kIG1lcmdlcy4gIFlvdSB3aWxsIG5lZWQgdG8gdGFrZSBhIGZldyBtaW51dGVzIHRvIHRoaW5rIGFib3V0Ci1ob3cgdG8gYmVzdCB3b3JrIHVuZGVyIEJpdEtlZXBlciwgYW5kIHJlLW9wdGltaXplIHRoaW5ncyBhIGJpdC4KLUluIHNvbWUgc2Vuc2UgaXQgaXMgYSBiaXQgcmFkaWNhbCwgYmVjYXVzZSBpdCBtaWdodCBkZXNjcmliZWQgYXMKLXRvc3NpbmcgY2hhbmdlcyBvdXQgaW50byBhIG1hZWxzdHJvbSBhbmQgaGF2aW5nIHRoZW0gbWFnaWNhbGx5Ci1sYW5kIGF0IHRoZSByaWdodCBkZXN0aW5hdGlvbi4uLiBidXQgSSdtIGdldHRpbmcgYWhlYWQgb2YgbXlzZWxmLgotCi1MZXQncyBzdGFydCB3aXRoIHRoaXMgcHJvZ3Jlc3Npb246Ci1FYWNoIEJpdEtlZXBlciBzb3VyY2UgdHJlZSBvbiBkaXNrIGlzIGEgcmVwb3NpdG9yeSB1bnRvIGl0c2VsZi4KLUVhY2ggcmVwb3NpdG9yeSBoYXMgYSBwYXJlbnQgKGV4Y2VwdCB0aGUgcm9vdC9vcmlnaW5hbCwgb2YgY291cnNlKS4KLUVhY2ggcmVwb3NpdG9yeSBjb250YWlucyBhIHNldCBvZiBhIGNoYW5nZXNldHMgKCJjc2V0cyIpLgotRWFjaCBjc2V0IGlzIG9uZSBvciBtb3JlIGNoYW5nZWQgZmlsZXMsIGJ1bmRsZWQgdG9nZXRoZXIuCi0KLUVhY2ggdHJlZSBpcyBhIHJlcG9zaXRvcnksIHNvIGFsbCBjaGFuZ2VzIGFyZSBjaGVja2VkIGludG8gdGhlIGxvY2FsCi10cmVlLiAgV2hlbiBhIGNoYW5nZSBpcyBjaGVja2VkIGluLCBhbGwgbW9kaWZpZWQgZmlsZXMgYXJlIGdyb3VwZWQKLWludG8gYSBsb2dpY2FsIHVuaXQsIHRoZSBjaGFuZ2VzZXQuICBJbnRlcm5hbGx5LCBCSyBsaW5rcyB0aGVzZQotY2hhbmdlc2V0cyBpbiBhIHRyZWUsIHJlcHJlc2VudGluZyB2YXJpb3VzIGNvbnZlcmdpbmcgYW5kIGRpdmVyZ2luZwotbGluZXMgb2YgZGV2ZWxvcG1lbnQuICBUaGVzZSBjaGFuZ2VzZXRzIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBvZgotdGhlIEJLIHN5c3RlbS4KLQotQWZ0ZXIgdGhlIGNvbmNlcHQgb2YgY2hhbmdlc2V0cywgdGhlIG5leHQgdGhpbmcgeW91IG5lZWQgdG8gZ2V0IHVzZWQKLXRvIGlzIGhhdmluZyBtdWx0aXBsZSBjb3BpZXMgb2Ygc291cmNlIHRyZWVzIGx5aW5nIGFyb3VuZC4gIFRoaXMgLXJlYWxseS0KLXRha2VzIHNvbWUgZ2V0dGluZyB1c2VkIHRvLCBmb3Igc29tZSBwZW9wbGUuICBTZXBhcmF0ZSBzb3VyY2UgdHJlZXMKLWFyZSB0aGUgbWVhbnMgaW4gQml0S2VlcGVyIGJ5IHdoaWNoIHlvdSBkZWxpbmVhdGUgcGFyYWxsZWwgbGluZXMKLW9mIGRldmVsb3BtZW50LCBib3RoIG1pbm9yIGFuZCBtYWpvci4gIFdoYXQgd291bGQgYmUgYnJhbmNoZXMgaW4KLUNWUyBiZWNvbWUgc2VwYXJhdGUgc291cmNlIHRyZWVzLCBvciAiY2xvbmVzIiBpbiBCaXRLZWVwZXIgW2hlaCwKLW9yIFN0YXIgV2Fyc10gdGVybWlub2xvZ3kuCi0KLUNsb25lcyBhbmQgY2hhbmdlc2V0cyBhcmUgdGhlIHRvb2xzIGZyb20gd2hpY2ggbW9zdCBvZiB0aGUgcG93ZXIgb2YKLUJpdEtlZXBlciBpcyBkZXJpdmVkLiAgQXMgbWVudGlvbmVkIGVhcmxpZXIsIGVhY2ggY2xvbmUgaGFzIGEgcGFyZW50LAotdGhlIHRyZWUgdXNlZCBhcyB0aGUgc291cmNlIHdoZW4gdGhlIG5ldyBjbG9uZSB3YXMgY3JlYXRlZC4gIEluIGEKLUNWUy1saWtlIHNldHVwLCB0aGUgcGFyZW50IHdvdWxkIGJlIGEgcmVtb3RlIHNlcnZlciBvbiB0aGUgSW50ZXJuZXQsCi1hbmQgdGhlIGNoaWxkIGlzIHlvdXIgbG9jYWwgY2xvbmUgb2YgdGhhdCB0cmVlLgotCi1PbmNlIHlvdSBoYXZlIGVzdGFibGlzaGVkIGEgY29tbW9uIGJhc2VsaW5lIGJldHdlZW4gdHdvIHNvdXJjZSB0cmVlcyAtLQotYSBjb21tb24gcGFyZW50IC0tIHRoZW4geW91IGNhbiBtZXJnZSBjaGFuZ2VzZXRzIGJldHdlZW4gdGhvc2UgdHdvCi10cmVlcyB3aXRoIGVhc2UuICBNZXJnaW5nIGNoYW5nZXMgaW50byBhIHRyZWUgaXMgY2FsbGVkIGEgInB1bGwiLCBhbmQKLWlzIGFuYWxhZ291cyB0byAnY3ZzIHVwZGF0ZScuICBBIHB1bGwgZG93bmxvYWRzIGFsbCB0aGUgY2hhbmdlc2V0cyBpbgotdGhlIHJlbW90ZSB0cmVlIHlvdSBkbyBub3QgaGF2ZSwgYW5kIG1lcmdlcyB0aGVtLiAgU2VuZGluZyBjaGFuZ2VzIGluCi1vbmUgdHJlZSB0byBhbm90aGVyIHRyZWUgaXMgY2FsbGVkIGEgInB1c2giLiAgUHVzaCBzZW5kcyBhbGwgY2hhbmdlcwotaW4gdGhlIGxvY2FsIHRyZWUgdGhlIHJlbW90ZSBkb2VzIG5vdCB5ZXQgaGF2ZSwgYW5kIG1lcmdlcyB0aGVtLgotCi1Gcm9tIHRoZXNlIGNvbmNlcHRzIGNvbWUgc29tZSBpbml0aWFsIGNvbW1hbmQgZXhhbXBsZXM6Ci0KLTEpIGJrIGNsb25lIC1xIGh0dHA6Ly9saW51eC5ia2JpdHMubmV0L2xpbnV4LTIuNSBsaW51cy0yLjUKLURvd25sb2FkIGEgMi41IHN0b2NrIGtlcm5lbCB0cmVlLCBuYW1pbmcgaXQgImxpbnVzLTIuNSIgaW4gdGhlIGxvY2FsIGRpci4KLVRoZSAiLXEiIGRpc2FibGVzIGxpc3RpbmcgZXZlcnkgc2luZ2xlIGZpbGUgYXMgaXQgaXMgZG93bmxvYWRlZC4KLQotMikgYmsgY2xvbmUgLXFsIGxpbnVzLTIuNSBhbHBoYS0yLjUKLUNyZWF0ZSBhIHNlcGFyYXRlIHNvdXJjZSB0cmVlIGZvciB0aGUgQWxwaGEgQVhQIGFyY2hpdGVjdHVyZS4KLVRoZSAiLWwiIHVzZXMgaGFyZCBsaW5rcyBpbnN0ZWFkIG9mIGNvcHlpbmcgZGF0YSwgc2luY2UgYm90aCB0cmVlcyBhcmUKLW9uIHRoZSBsb2NhbCBkaXNrLiAgWW91IGNhbiBhbHNvIHJlcGxhY2UgdGhlIGFib3ZlIHdpdGggImJrIGxjbG9uZSAtcSAuLi4iCi0KLVlvdSBvbmx5IGNsb25lIGEgdHJlZSAtb25jZS0uICBBZnRlciBjbG9uaW5nIHRoZSB0cmVlIGxpdmVzIGEgbG9uZyB0aW1lCi1vbiBkaXNrLCBiZWluZyB1cGRhdGluZyBieSBwdXNoZXMgYW5kIHB1bGxzLgotCi0zKSBjZCBhbHBoYS0yLjUgOyBiayBwdWxsIGh0dHA6Ly9na2VybmVsLmJrYml0cy5uZXQvYWxwaGEtMi41Ci1Eb3dubG9hZCBjaGFuZ2VzIGluICJhbHBoYS0yLjUiIHJlcG9zaXRvcnkgd2hpY2ggYXJlIG5vdCBwcmVzZW50Ci1pbiB0aGUgbG9jYWwgcmVwb3NpdG9yeSwgYW5kIG1lcmdlIHRoZW0gaW50byB0aGUgc291cmNlIHRyZWUuCi0KLTQpIGJrIC1yIGNvIC1xCi1CZWNhdXNlIGV2ZXJ5IHRyZWUgaXMgYSByZXBvc2l0b3J5LCBmaWxlcyBtdXN0IGJlIGNoZWNrZWQgb3V0IGJlZm9yZQotdGhleSB3aWxsIGJlIGluIHRoZWlyIHN0YW5kYXJkIHBsYWNlcyBpbiB0aGUgc291cmNlIHRyZWUuCi0KLTUpCWJrIHZpIGZzL2lub2RlLmMJCQkJIyBleGFtcGxlIGNoYW5nZS4uLgotCWJrIGNpdG9vbAkJCQkJIyBjaGVja2luLCB1c2luZyBYIHRvb2wKLQliayBwdXNoIGJrOi8vZ2tlcm5lbEBia2JpdHMubmV0L2FscGhhLTIuNQkjIHVwbG9hZCBjaGFuZ2UKLVR5cGljYWwgZXhhbXBsZSBvZiBhIEJLIHNlcXVlbmNlIHRoYXQgd291bGQgcmVwbGFjZSB0aGUgYW5hbGFnb3VzIENWUwotc2l0dWF0aW9uLAotCXZpIGZzL2lub2RlLmMKLQljdnMgY29tbWl0Ci0KLUFzIHRoaXMgaXMganVzdCBzdXBwb3NlZCB0byBiZSBhIHF1aWNrIEJLIGludHJvLCBmb3IgbW9yZSBpbi1kZXB0aAotdHV0b3JpYWxzLCBsaXZlIHdvcmtpbmcgZGVtb3MsIGFuZCBkb2NzLCBzZWUgaHR0cDovL3d3dy5iaXRrZWVwZXIuY29tLwotCi0KLQotQksgYW5kIEtlcm5lbCBEZXZlbG9wbWVudCBXb3JrZmxvdwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ3VycmVudGx5IHRoZSBsYXRlc3QgMi41IHRyZWUgaXMgYXZhaWxhYmxlIHZpYSAiYmsgY2xvbmUgJFVSTCIKLWFuZCAiYmsgcHVsbCAkVVJMIiBhdCBodHRwOi8vbGludXguYmtiaXRzLm5ldC9saW51eC0yLjUKLVRoaXMgc2hvdWxkIGNoYW5nZSBpbiBhIGZldyB3ZWVrcyB0byBhIGtlcm5lbC5vcmcgVVJMLgotCi0KLUEgYmlnIHBhcnQgb2YgdXNpbmcgQml0S2VlcGVyIGlzIG9yZ2FuaXppbmcgdGhlIHZhcmlvdXMgdHJlZXMgeW91IGhhdmUKLW9uIHlvdXIgbG9jYWwgZGlzaywgYW5kIG9yZ2FuaXppbmcgdGhlIGZsb3cgb2YgY2hhbmdlcyBhbW9uZyB0aG9zZQotdHJlZXMsIGFuZCByZW1vdGUgdHJlZXMuICBJZiBvbmUgd2VyZSB0byBncmFwaCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuCi1hIGRlc2lyZWQgQksgc2V0dXAsIHlvdSBhcmUgbGlrZWx5IHRvIHNlZSBhIGZldy1tYW55LWZldyBncmFwaCwgbGlrZQotdGhpczoKLQotCQkgICAgbGludXgtMi41Ci0JCSAgICAgICAgfAotCSAgICAgICBtZXJnZS10by1saW51cy0yLjUKLQkJIC8gICAgfCAgICAgIHwKLQkgICAgICAgIC8gICAgIHwgICAgICB8Ci0Jdm0taGFja3MgIGJ1Z2ZpeGVzICBmaWxlc3lzICAgcGVyc29uYWwtaGFja3MKLQkgICAgICBcCSAgICAgIHwJICAgICB8CQkvCi0JICAgICAgIFwgICAgICB8ICAgICAgfCAgICAgICAgIC8KLQkJXCAgICAgfCAgICAgIHwgICAgICAgIC8KLQkgICAgICAgICB0ZXN0aW5nLWFuZC12YWxpZGF0aW9uCi0KLVNpbmNlIGEgImJrIHB1c2giIHNlbmRzIGFsbCBjaGFuZ2VzIG5vdCBpbiB0aGUgdGFyZ2V0IHRyZWUsIGFuZAotc2luY2UgYSAiYmsgcHVsbCIgcmVjZWl2ZXMgYWxsIGNoYW5nZXMgbm90IGluIHRoZSBzb3VyY2UgdHJlZSwgeW91IHdhbnQKLXRvIG1ha2Ugc3VyZSB5b3UgYXJlIG9ubHkgcHVzaGluZyBzcGVjaWZpYyBjaGFuZ2VzIHRvIHRoZSBkZXNpcmVkIHRyZWUsCi1ub3QgYWxsIGNoYW5nZXMgZnJvbSAicGVlciBwYXJlbnQiIHRyZWVzLiAgRm9yIGV4YW1wbGUsIHB1c2hpbmcgYSBjaGFuZ2UKLWZyb20gdGhlIHRlc3RpbmctYW5kLXZhbGlkYXRpb24gdHJlZSB3b3VsZCBwcm9iYWJseSBiZSBhIGJhZCBpZGVhLAotYmVjYXVzZSBpdCB3aWxsIHB1c2ggYWxsIGNoYW5nZXMgZnJvbSB2bS1oYWNrcywgYnVnZml4ZXMsIGZpbGVzeXMsIGFuZAotcGVyc29uYWwtaGFja3MgdHJlZXMgaW50byB0aGUgdGFyZ2V0IHRyZWUuCi0KLU9uZSB3b3VsZCB0eXBpY2FsbHkgd29yayBvbiBvbmx5IG9uZSAidGhlbWUiIGF0IGEgdGltZSwgZWl0aGVyCi12bS1oYWNrcyBvciBidWdmaXhlcyBvciBmaWxlc3lzLCBrZWVwaW5nIHRob3NlIGNoYW5nZXMgaXNvbGF0ZWQgaW4KLXRoZWlyIG93biB0cmVlIGR1cmluZyBkZXZlbG9wbWVudCwgYW5kIG9ubHkgbWVyZ2UgdGhlIGlzb2xhdGVkIHdpdGgKLW90aGVyIGNoYW5nZXMgd2hlbiBnb2luZyB1cHN0cmVhbSAodG8gTGludXMgb3Igb3RoZXIgbWFpbnRhaW5lcnMpIG9yCi1kb3duc3RyZWFtICh0byB5b3VyICJ1bmlvbiIgdHJlZXMsIGxpa2UgdGVzdGluZy1hbmQtdmFsaWRhdGlvbiBhYm92ZSkuCi0KLUl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHNvbWUgb2YgdGhpcyBzZXBhcmF0aW9uIGlzIG5vdCBqdXN0IHJlY29tbWVuZGVkCi1wcmFjdGljZSwgaXQncyBhY3R1YWxseSBbZm9yIG5vd10gLWVuZm9yY2VkLSBieSBCaXRLZWVwZXIuICBCaXRLZWVwZXIKLXJlcXVpcmVzIHRoYXQgY2hhbmdlc2V0cyBtYWludGFpbiBhIGNlcnRhaW4gb3JkZXIsIHdoaWNoIGlzIHRoZSByZWFzb24KLXRoYXQgImJrIHB1c2giIHNlbmRzIGFsbCBsb2NhbCBjaGFuZ2VzZXRzIHRoZSByZW1vdGUgZG9lc24ndCBoYXZlLiAgVGhpcwotc2VwYXJhdGlvbiBtYXkgbG9vayBsaWtlIGEgbG90IG9mIHdhc3RlZCBkaXNrIHNwYWNlIGF0IGZpcnN0LCBidXQgaXQKLWhlbHBzIHdoZW4gdHdvIHVucmVsYXRlZCBjaGFuZ2VzIG1heSAicG9sbHV0ZSIgdGhlIHNhbWUgYXJlYSBvZiBjb2RlLCBvcgotZG9uJ3QgZm9sbG93IHRoZSBzYW1lIHBhY2Ugb2YgZGV2ZWxvcG1lbnQsIG9yIGFueSBvdGhlciBvZiB0aGUgc3RhbmRhcmQKLXJlYXNvbnMgd2h5IG9uZSBjcmVhdGVzIGEgZGV2ZWxvcG1lbnQgYnJhbmNoLgotCi1TbWFsbCBkZXZlbG9wbWVudCBicmFuY2hlcyAoY2xvbmVzKSB3aWxsIGFwcGVhciBhbmQgZGlzYXBwZWFyOgotCi0JLS0tLS0tLS0gQSAtLS0tLS0tLS0gQiAtLS0tLS0tLS0gQyAtLS0tLS0tLS0gRCAtLS0tLS0tCi0JICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvCi0JCSAgIC0tLS0tc2hvcnQtdGVybSBkZXZlbCBicmFuY2gtLS0tLQotCi1XaGlsZSBsb25nLXRlcm0gYnJhbmNoZXMgd2lsbCBwYXJhbGxlbCBhIHRyZWUgKG9yIHRyZWVzKSwgd2l0aCBwZXJpb2QKLW1lcmdlIHBvaW50cy4gIEluIHRoaXMgZmlyc3QgZXhhbXBsZSwgd2UgcHVsbCBmcm9tIGEgdHJlZSAocHVsbHMsCi0iXCIpIHBlcmlvZGljYWxseSwgc3VjaCBhcyB3aGF0IG9jY3VycyB3aGVuIHRyYWNraW5nIGNoYW5nZXMgaW4gYQotdmVuZG9yIHRyZWUsIG5ldmVyIHB1c2hpbmcgY2hhbmdlcyBiYWNrIHVwIHRoZSBsaW5lOgotCi0JLS0tLS0tLS0gQSAtLS0tLS0tLS0gQiAtLS0tLS0tLS0gQyAtLS0tLS0tLS0gRCAtLS0tLS0tCi0JICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICAgICAgIFwKLQkgICAgICAgICAgIC0tLS1sb25nLXRlcm0gZGV2ZWwgYnJhbmNoLS0tLS0tLS0tLS0tLS0tLS0KLQotQW5kIHRoZW4gYSBtb3JlIGNvbW1vbiBjYXNlIGluIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCwgYSBsb25nIHRlcm0KLWJyYW5jaCB3aXRoIHBlcmlvZGljIG1lcmdlcyBiYWNrIGludG8gdGhlIHRyZWUgKHB1c2hlcywgIi8iKToKLQotCS0tLS0tLS0tIEEgLS0tLS0tLS0tIEIgLS0tLS0tLS0tIEMgLS0tLS0tLS0tIEQgLS0tLS0tLQotCSAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgLyBcCi0JICAgICAgICAgICAtLS0tbG9uZy10ZXJtIGRldmVsIGJyYW5jaC0tLS0tLS0tLS0tLS0tLS0tCi0KLQotCi0KLQotU3VibWl0dGluZyBDaGFuZ2VzIHRvIExpbnVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZXJlJ3MgYSBiaXQgb2YgYW4gYXJ0LCBvciBzdHlsZSwgb2Ygc3VibWl0dGluZyBjaGFuZ2VzIHRvIExpbnVzLgotU2luY2UgTGludXMncyB0cmVlIGlzIG5vdyAoeW91IG1pZ2h0IHNheSkgZnVsbHkgaW50ZWdyYXRlZCBpbnRvIHRoZQotZGlzdHJpYnV0ZWQgQml0S2VlcGVyIHN5c3RlbSwgdGhlcmUgYXJlIHNldmVyYWwgcHJlcmVxdWlzaXRlcyB0bwotcHJvcGVybHkgc3VibWl0dGluZyBhIEJpdEtlZXBlciBjaGFuZ2UuICBBbGwgdGhlc2UgcHJlcmVxJ3MgYXJlIGp1c3QKLWdlbmVyYWwgY2xlYW5saW5lc3Mgb2YgQksgdXNhZ2UsIHNvIGFzIHBlb3BsZSBiZWNvbWUgZXhwZXJ0cyBhdCBCSywgZmVlbAotZnJlZSB0byBvcHRpbWl6ZSB0aGlzIHByb2Nlc3MgZnVydGhlciAoYXNzdW1pbmcgTGludXMgYWdyZWVzLCBvZgotY291cnNlKS4KLQotCi0KLTApIE1ha2Ugc3VyZSB5b3VyIHRyZWUgd2FzIG9yaWdpbmFsbHkgY2xvbmVkIGZyb20gdGhlIGxpbnV4LTIuNSB0cmVlCi1jcmVhdGVkIGJ5IExpbnVzLiAgSWYgeW91ciB0cmVlIGRvZXMgbm90IGhhdmUgdGhpcyBhcyBpdHMgYW5jZXN0b3IsIGl0Ci1pcyBpbXBvc3NpYmxlIHRvIHJlbGlhYmx5IGV4Y2hhbmdlIGNoYW5nZXNldHMuCi0KLQotCi0xKSBQYXkgYXR0ZW50aW9uIHRvIHlvdXIgY29tbWl0IHRleHQuICBUaGUgY29tbWl0IG1lc3NhZ2UgdGhhdAotYWNjb21wYW5pZXMgZWFjaCBjaGFuZ2VzZXQgeW91IHN1Ym1pdCB3aWxsIGxpdmUgb24gZm9yZXZlciBpbiBoaXN0b3J5LAotYW5kIGlzIHVzZWQgYnkgTGludXMgdG8gYWNjdXJhdGVseSBzdW1tYXJpemUgdGhlIGNoYW5nZXMgaW4gZWFjaAotcHJlLXBhdGNoLiAgUmVtZW1iZXIgdGhhdCB0aGVyZSBpcyBubyBjb250ZXh0LCBzbwotCSJmaXggZm9yIG5ldyBzY2hlZHVsZXIgY2hhbmdlcyIKLXdvdWxkIGJlIHRvbyB2YWd1ZSwgYnV0Ci0JImZpeCBtaXBzNjQgYXJjaCBmb3IgbmV3IHNjaGVkdWxlciBzd2l0Y2hfdG8oKSwgVElGX3h4eCBzZW1hbnRpY3MiCi13b3VsZCBiZSBtdWNoIGJldHRlci4KLQotWW91IGNhbiBhbmQgc2hvdWxkIHVzZSB0aGUgY29tbWFuZCAiYmsgY29tbWVudCAtQzxyZXY+IiB0byB1cGRhdGUgdGhlCi1jb21taXQgdGV4dCwgYW5kIGltcHJvdmUgaXQgYWZ0ZXIgdGhlIGZhY3QuICBUaGlzIGlzIHZlcnkgdXNlZnVsIGZvcgotZGV2ZWxvcG1lbnQ6IHBvb3IsIHF1aWNrIGRlc2NyaXB0aW9ucyBkdXJpbmcgZGV2ZWxvcG1lbnQsIHdoaWNoIGdldAotY2xlYW5lZCB1cCB1c2luZyAiYmsgY29tbWVudCIgYmVmb3JlIGlzc3VpbmcgdGhlICJiayBwdXNoIiB0byBzdWJtaXQgdGhlCi1jaGFuZ2VzLgotCi0KLQotMikgSW5jbHVkZSBhbiBJbnRlcm5ldC1hdmFpbGFibGUgVVJMIGZvciBMaW51cyB0byBwdWxsIGZyb20sIHN1Y2ggYXMKLQotCVB1bGwgZnJvbTogIGh0dHA6Ly9na2VybmVsLmJrYml0cy5uZXQvbmV0LWRyaXZlcnMtMi41Ci0KLQotCi0zKSBJbmNsdWRlIGEgc3VtbWFyeSBhbmQgImRpZmZzdGF0IC1wMSIgb2YgZWFjaCBjaGFuZ2VzZXQgdGhhdCB3aWxsIGJlCi1kb3dubG9hZGVkLCB3aGVuIExpbnVzIGlzc3VlcyBhICJiayBwdWxsIi4gIFRoZSBhdXRob3IgYXV0by1nZW5lcmF0ZXMKLXRoZXNlIHN1bW1hcmllcyB1c2luZyAiYmsgY2hhbmdlcyAtTCA8cGFyZW50PiIsIHRvIG9idGFpbiBhIGxpc3RpbmcKLW9mIGFsbCB0aGUgcGVuZGluZy10by1zZW5kIGNoYW5nZXNldHMsIGFuZCB0aGVpciBjb21taXQgbWVzc2FnZXMuCi0KLUl0IGlzIGltcG9ydGFudCB0byBzaG93IExpbnVzIHdoYXQgaGUgd2lsbCBiZSBkb3dubG9hZGluZyB3aGVuIGhlIGlzc3VlcwotYSAiYmsgcHVsbCIsIHRvIHJlZHVjZSB0aGUgdGltZSByZXF1aXJlZCB0byBzaWZ0IHRoZSBjaGFuZ2VzIG9uY2UgdGhleQotYXJlIGRvd25sb2FkZWQgdG8gTGludXMncyBsb2NhbCBtYWNoaW5lLgotCi1JTVBPUlRBTlQgTk9URTogIE9uZSBvZiB0aGUgZmVhdHVyZXMgb2YgQksgaXMgdGhhdCB5b3VyIHJlcG9zaXRvcnkgZG9lcwotbm90IGhhdmUgdG8gYmUgdXAgdG8gZGF0ZSwgaW4gb3JkZXIgZm9yIExpbnVzIHRvIHJlY2VpdmUgeW91ciBjaGFuZ2VzLgotSXQgaXMgY29uc2lkZXJlZCBhIGNvdXJ0ZXN5IHRvIGtlZXAgeW91ciByZXBvc2l0b3J5IGZhaXJseSByZWNlbnQsIHRvCi1sZXNzZW4gYW55IHBvdGVudGlhbCBtZXJnZSB3b3JrIExpbnVzIG1heSBuZWVkIHRvIGRvLgotCi0KLTQpIFNwbGl0IHVwIHlvdXIgY2hhbmdlcy4gIEVhY2ggbWFpbnRhaW5lcjwtPkxpbnVzIHNpdHVhdGlvbiBpcyBsaWtlbHkKLXRvIGJlIHNsaWdodGx5IGRpZmZlcmVudCBoZXJlLCBzbyB0YWtlIHRoaXMganVzdCBhcyBnZW5lcmFsIGFkdmljZS4gIFRoZQotYXV0aG9yIHNwbGl0cyB1cCBjaGFuZ2VzIGFjY29yZGluZyB0byAidGhlbWVzIiB3aGVuIG1lcmdpbmcgd2l0aCBMaW51cy4KLVNpbXVsdGFuZW91cyBwdXNoZXMgZnJvbSBsb2NhbCBkZXZlbG9wbWVudCBnbyB0byBzcGVjaWFsIHRyZWVzIHdoaWNoCi1leGlzdCBzb2xlbHkgdG8gaG91c2UgY2hhbmdlcyAicXVldWVkIiBmb3IgTGludXMuICBFeGFtcGxlIG9mIHRoZSB0cmVlczoKLQotCW5ldC1kcml2ZXJzLTIuNSAtLSBvbi1nb2luZyBuZXQgZHJpdmVyIG1haW50ZW5hbmNlCi0Jdm0tMi41IC0tIFZNLXJlbGF0ZWQgY2hhbmdlcwotCWZzLTIuNSAtLSBmaWxlc3lzdGVtLXJlbGF0ZWQgY2hhbmdlcwotCi1MaW51cyB0aGVuIGhhcyBtdWNoIG1vcmUgZnJlZWRvbSBmb3IgcHVsbGluZyBjaGFuZ2VzLiAgSGUgY291bGQgKGZvcgotZXhhbXBsZSkgaXNzdWUgYSAiYmsgcHVsbCIgb24gdm0tMi41IGFuZCBmcy0yLjUgdHJlZXMsIHRvIG1lcmdlIHRoZWlyCi1jaGFuZ2VzLCBidXQgaG9sZCBvZmYgbmV0LWRyaXZlcnMtMi41IGJlY2F1c2Ugb2YgYSBjaGFuZ2UgdGhhdCBuZWVkcwotbW9yZSBkaXNjdXNzaW9uLgotCi1PdGhlciBtYWludGFpbmVycyBtYXkgZmluZCB0aGF0IGEgc2luZ2xlIGxpbnVzLXB1bGwtZnJvbSB0cmVlIGlzCi1hZGVxdWF0ZSBmb3IgcGFzc2luZyBCSyBjaGFuZ2VzZXRzIHRvIGhpbS4KLQotCi0KLUZyZXF1ZW50bHkgQW5zd2VyZWQgUXVlc3Rpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotMSkgSG93IGRvIEkgY2hhbmdlIHRoZSBlLW1haWwgYWRkcmVzcyBzaG93biBpbiB0aGUgY2hhbmdlbG9nPwotQS4gV2hlbiB5b3UgcnVuICJiayBjaXRvb2wiIG9yICJiayBjb21taXQiLCBzZXQgZW52aXJvbm1lbnQKLSAgIHZhcmlhYmxlcyBCS19VU0VSIGFuZCBCS19IT1NUIHRvIHRoZSBkZXNpcmVkIHVzZXJuYW1lCi0gICBhbmQgaG9zdC9kb21haW4gbmFtZS4KLQotCi0yKSBIb3cgZG8gSSB1c2UgdGFncyAvIGdldCBhIGRpZmYgYmV0d2VlbiB0d28ga2VybmVsIHZlcnNpb25zPwotQS4gUGFzcyB0aGUgdGFncyBMaW51cyB1c2VzIHRvICdiayBleHBvcnQnLgotCi1DaGFuZ2VTZXRzIGFyZSBpbiBhIGZvcndhcmQtcHJvZ3Jlc3Npbmcgb3JkZXIsIHNvIGl0J3MgcHJldHR5IGVhc3kKLXRvIGdldCBhIHNuYXBzaG90IHN0YXJ0aW5nIGFuZCBlbmRpbmcgYXQgYW55IHR3byBwb2ludHMgaW4gdGltZS4KLUxpbnVzIHB1dHMgdGFncyBvbiBlYWNoIHJlbGVhc2UgYW5kIHByZS1yZWxlYXNlLCBzbyB5b3UgY291bGQgdXNlCi10aGVzZSB0d28gZXhhbXBsZXM6Ci0KLSAgICBiayBleHBvcnQgLXRwYXRjaCAtaGR1IC1ydjIuNS40LHYyLjUuNSB8IGxlc3MKLSAgICAgICAgIyBjcmVhdGVzIHBhdGNoLTIuNS41IGVzc2VudGlhbGx5Ci0gICAgYmsgZXhwb3J0IC10cGF0Y2ggLWR1IC1ydjIuNS41LXByZTEsdjIuNS41IHwgbGVzcwotICAgICAgICAjIGNoYW5nZXMgZnJvbSBwcmUxIHRvIGZpbmFsCi0KLUEgdGFnIGlzIGp1c3QgYW4gYWxpYXMgZm9yIGEgc3BlY2lmaWMgY2hhbmdlc2V0Li4uIGFuZCBzaW5jZSBjaGFuZ2VzZXRzCi1hcmUgb3JkZXJlZCwgYSB0YWcgaXMgdGh1cyBhIG1hcmtlciBmb3IgYSBzcGVjaWZpYyBwb2ludCBpbiB0aW1lIChvcgotc3BlY2lmaWMgc3RhdGUgb2YgdGhlIHRyZWUpLgotCi0KLTMpIElzIHRoZXJlIGFuIGVhc3kgd2F5IHRvIGdlbmVyYXRlIE9uZSBCaWcgUGF0Y2ggdmVyc3VzIG1haW5saW5lLAotICAgZm9yIG15IGxvbmctbGl2ZWQga2VybmVsIGJyYW5jaD8KLUEuIFllcy4gIFRoaXMgcmVxdWlyZXMgQksgMy54LCB0aG91Z2guCi0KLQliayBleHBvcnQgLXRwYXRjaCAtcmBiayByZXBvZ2NhIGJrOi8vbGludXguYmtiaXRzLm5ldC9saW51eC0yLjVgLCsKLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9iay1tYWtlLXN1bSBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYmstbWFrZS1zdW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU4Y2E0NmEuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9iay1tYWtlLXN1bQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMhL2Jpbi9zaCAtZQotIyBESVI9JEhPTUUvQksvYXhwLTIuNQotIyBjZCAkRElSCi0KLUxJTlVTX1JFUE89JDEKLURJUkJBU0U9YGJhc2VuYW1lICRQV0RgCi0KLXsKLWNhdCA8PEVPVAotUGxlYXNlIGRvIGEKLQotCWJrIHB1bGwgYms6Ly9na2VybmVsLmJrYml0cy5uZXQvJERJUkJBU0UKLQotVGhpcyB3aWxsIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGZpbGVzOgotCi1FT1QKLQotYmsgZXhwb3J0IC10cGF0Y2ggLWhkdSAtcmBiayByZXBvZ2NhICRMSU5VU19SRVBPYCwrIHwgZGlmZnN0YXQgLXAxIDI+L2Rldi9udWxsCi0KLWNhdCA8PEVPVAotCi10aHJvdWdoIHRoZXNlIENoYW5nZVNldHM6Ci0KLUVPVAotCi1iayBjaGFuZ2VzIC1MIC1kJyR1bmxlc3MoOk1FUkdFOil7Q2hhbmdlU2V0fDpDU0VUUkVWOlxufScgJExJTlVTX1JFUE8gfAotYmsgLVIgcHJzIC1oIC1kJyR1bmxlc3MoOk1FUkdFOil7PDpQOkA6SE9TVDo+ICg6RDogOkk6KVxuJGVhY2goOkM6KXsgICAoOkM6KVxufVxufScgLQotCi19ID4gL3RtcC9saW51cy50eHQKLQotY2F0IDw8RU9UCi1NYWlsIHRleHQgaW4gL3RtcC9saW51cy50eHQ7IHBsZWFzZSBjaGVjayBhbmQgc2VuZCB1c2luZyB5b3VyIGZhdm91cml0ZQotbWFpbGVyLgotRU9UCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2Jrc2VuZCBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYmtzZW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4MzZjYTk0Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYmtzZW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyEvYmluL3NoCi0jIEEgc2NyaXB0IHRvIGZvcm1hdCBCSyBjaGFuZ2VzZXQgb3V0cHV0IGluIGEgbWFubmVyIHRoYXQgaXMgZWFzeSB0byByZWFkLgotIyBBbmRyZWFzIERpbGdlciA8YWRpbGdlckB0dXJib2xhYnMuY29tPiAgMTMvMDIvMjAwMgotIwotIyBBZGQgZGlmZnN0YXQgb3V0cHV0IGFmdGVyIENoYW5nZWxvZyA8YWRpbGdlckB0dXJib2xhYnMuY29tPiAgIDIxLzAyLzIwMDIKLQotUFJPRz1ia3NlbmQKLQotdXNhZ2UoKSB7Ci0JZWNobyAidXNhZ2U6ICRQUk9HIC1yPHJldj4iCi0JZWNobyAtZSAiXHR3aGVyZSA8cmV2PiBpcyBvZiB0aGUgZm9ybSAnMS4yMycsICcxLjIzLi4nLCAnMS4yMy4uMS4yNycsIgotCWVjaG8gLWUgIlx0b3IgJysnIHRvIGluZGljYXRlIHRoZSBtb3N0IHJlY2VudCByZXZpc2lvbiIKLQotCWV4aXQgMQotfQotCi1jYXNlICQxIGluCi0tcikgUkVWPSQyOyBzaGlmdCA7OwotLXIqKSBSRVY9YGVjaG8gJDEgfCBzZWQgJ3MvXi1yLy8nYCA7OwotKikgZWNobyAiJFBST0c6IG5vIHJldmlzaW9uIGdpdmVuLCB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0aGF0Ijs7Ci1lc2FjCi0KLVsgLXogIiRSRVYiIF0gJiYgdXNhZ2UKLQotZWNobyAiWW91IGNhbiBpbXBvcnQgdGhpcyBjaGFuZ2VzZXQgaW50byBCSyBieSBwaXBpbmcgdGhpcyB3aG9sZSBtZXNzYWdlIHRvOiIKLWVjaG8gIid8IGJrIHJlY2VpdmUgW3BhdGggdG8gcmVwb3NpdG9yeV0nIG9yIGFwcGx5IHRoZSBwYXRjaCBhcyB1c3VhbC4iCi0KLVNFUD0iXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiIKLWVjaG8gLWUgJFNFUAotZW52IFBBR0VSPS9iaW4vY2F0IGJrIGNoYW5nZXMgLXIkUkVWCi1lY2hvCi1iayBleHBvcnQgLXRwYXRjaCAtZHUgLWggLXIkUkVWIHwgZGlmZnN0YXQKLWVjaG87IGVjaG8KLWJrIGV4cG9ydCAtdHBhdGNoIC1kdSAtaCAtciRSRVYKLWVjaG8gLWUgJFNFUAotYmsgc2VuZCAtd2d6aXBfdXUgLXIkUkVWIC0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYno2NHdyYXAgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2J6NjR3cmFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiZTc4MDg3Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYno2NHdyYXAKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jIS9iaW4vc2gKLQotIyBiejY0d3JhcCAtIHRoZSBzZW5kaW5nIHNpZGUgb2YgYSBiemlwMiB8IGJhc2U2NCBzdHJlYW0KLSMgQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXJAY2x1c3RlcmZzLmNvbT4gICBKYW4gMjAwMgotCi0KLVBBVEg9JFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW46L3Vzci9mcmVld2FyZS9iaW4KLQotIyBBIHByb2dyYW0gdG8gZ2VuZXJhdGUgYmFzZTY0IGVuY29kaW5nIG9uIHN0ZG91dAotQkFTRTY0X0VOQ09ERT0idXVlbmNvZGUgLW0gL2Rldi9zdGRvdXQiCi1CQVNFNjRfQkVHSU49Ci1CQVNFNjRfRU5EPQotCi1CWklQPU5PCi1CQVNFNjQ9Tk8KLQotIyBUZXN0IGlmIHdlIGhhdmUgdGhlIGJ6aXAgcHJvZ3JhbSBpbnN0YWxsZWQKLWJ6aXAyIC1jIC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxICYmIEJaSVA9WUVTCi0KLSMgVGVzdCBpZiB1dWVuY29kZSBjYW4gaGFuZGxlIHRoZSAtbSAoTUlNRSkgZW5jb2Rpbmcgb3B0aW9uCi0kQkFTRTY0X0VOQ09ERSA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxICYmIEJBU0U2ND1ZRVMKLQotaWYgWyAkQkFTRTY0ID0gTk8gXTsgdGhlbgotCUJBU0U2NF9FTkNPREU9bWltZW5jb2RlCi0JQkFTRTY0X0JFR0lOPSJiZWdpbi1iYXNlNjQgNjQ0IC0iCi0JQkFTRTY0X0VORD0iPT09PSIKLQotCSRCQVNFNjRfRU5DT0RFIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjEgJiYgQkFTRTY0PVlFUwotZmkKLQotaWYgWyAkQlpJUCA9IE5PIC1vICRCQVNFNjQgPSBOTyBdOyB0aGVuCi0JZWNobyAiJDA6IGNhbid0IHVzZSBiejY0IGVuY29kaW5nOiBiemlwMj0kQlpJUCwgJEJBU0U2NF9FTkNPREU9JEJBU0U2NCIKLQlleGl0IDEKLWZpCi0KLSMgU2FkbHksIG1pbWVuY29kZSBkb2VzIG5vdCBhcHBlYXIgdG8gaGF2ZSBnb29kICJiZWdpbiIgYW5kICJlbmQiIG1hcmtlcnMKLSMgbGlrZSB1dWVuY29kZSBkb2VzLCBhbmQgaXQgaXMgcGlja3kgYWJvdXQgZ2V0dGluZyB0aGUgcmlnaHQgc3RhcnQvZW5kIG9mCi0jIHRoZSBiYXNlNjQgc3RyZWFtLCBzbyB3ZSBoYW5kbGUgdGhpcyBpbnRlcm5hbGx5LgotZWNobyAiJEJBU0U2NF9CRUdJTiIKLWJ6aXAyIC05IHwgJEJBU0U2NF9FTkNPREUKLWVjaG8gIiRCQVNFNjRfRU5EIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9jcGNzZXQgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2NwY3NldApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYjhmYWNhOS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2NwY3NldAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyBQdXJwb3NlOiBDb3B5IGNoYW5nZXNldCBwYXRjaCBhbmQgZGVzY3JpcHRpb24gZnJvbSBvbmUKLSMJICAgcmVwb3NpdG9yeSB0byBhbm90aGVyLCB1bnJlbGF0ZWQgb25lLgotIwotIyB1c2FnZTogIGNwY3NldCBbcmV2aXNpb25dIFtmcm9tLXJlcG9zaXRvcnldIFt0by1yZXBvc2l0b3J5XQotIwotCi1SRVY9JDEKLUZST009JDIKLVRPPSQzCi1UTVBGPS90bXAvY3Bjc2V0LiQkCi0KLXJtIC1mICRUTVBGKgotCi1DV0RfU0FWRT1gcHdkYAotY2QgJEZST00KLWJrIGNoYW5nZXMgLXIkUkVWCQkJfAlcCi0JZ3JlcCAtdiAnXkNoYW5nZVNldCcJCXwJXAotCXNlZCAtZSAncy9eICAvL2cnID4gJFRNUEYubG9nCi0KLVVTRVJIT1NUPWBiayBjaGFuZ2VzIC1yJFJFViB8IGdyZXAgJ15DaGFuZ2VTZXQnIHwgYXdrICd7cHJpbnQgJDR9J2AKLWV4cG9ydCBCS19VU0VSPWBlY2hvICRVU0VSSE9TVCB8IGF3ayAnLUZAJyAne3ByaW50ICQxfSdgCi1leHBvcnQgQktfSE9TVD1gZWNobyAkVVNFUkhPU1QgfCBhd2sgJy1GQCcgJ3twcmludCAkMn0nYAotCi1iayBleHBvcnQgLXRwYXRjaCAtaGR1IC1yJFJFViA+ICRUTVBGLnBhdGNoICYmIFwKLWNkICRDV0RfU0FWRSAmJiBcCi1jZCAkVE8gJiYgXAotYmsgaW1wb3J0IC10cGF0Y2ggLUNGUiAteSJgY2F0ICRUTVBGLmxvZ2AiICRUTVBGLnBhdGNoIC4gJiYgXAotYmsgY29tbWl0IC15ImBjYXQgJFRNUEYubG9nYCIKLQotcm0gLWYgJFRNUEYqCi0KLWVjaG8gY2hhbmdlc2V0ICRSRVYgY29waWVkLgotZWNobyAiIgotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2NzZXQtdG8tbGludXMgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2NzZXQtdG8tbGludXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQyOGE5NmYuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9jc2V0LXRvLWxpbnVzCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsIC13Ci0KLXVzZSBzdHJpY3Q7Ci0KLW15ICgkbGhzLCAkcmV2LCAkdG1wLCAkcmhzLCAkcyk7Ci1teSBAY3NldF90ZXh0ID0gKCk7Ci1teSBAcGlwZV90ZXh0ID0gKCk7Ci1teSAkaGF2ZV9jc2V0ID0gMDsKLQotd2hpbGUgKDw+KSB7Ci0JbmV4dCBpZiAvXi0tLS87Ci0KLQlpZiAoKCRsaHMsICR0bXAsICRyaHMpID0gKC9eKENoYW5nZVNldFxAKShbXixdKykoLCAuKikkLykpIHsKLQkJJmNzZXRfcmV2IGlmICgkaGF2ZV9jc2V0KTsKLQotCQkkcmV2ID0gJHRtcDsKLQkJJGhhdmVfY3NldCA9IDE7Ci0KLQkJcHVzaChAY3NldF90ZXh0LCAkXyk7Ci0JfQotCi0JZWxzaWYgKCRoYXZlX2NzZXQpIHsKLQkJcHVzaChAY3NldF90ZXh0LCAkXyk7Ci0JfQotfQotJmNzZXRfcmV2IGlmICgkaGF2ZV9jc2V0KTsKLWV4aXQoMCk7Ci0KLQotc3ViIGNzZXRfcmV2IHsKLQlteSAkZW1wdHlfY3NldCA9IDA7Ci0KLQlvcGVuIFBJUEUsICJiayBleHBvcnQgLXRwYXRjaCAtaGR1IC1yICRyZXYgfCBkaWZmc3RhdCAtcDEgMj4vZGV2L251bGwgfCIgb3IgZGllOwotCXdoaWxlICgkcyA9IDxQSVBFPikgewotCQkkZW1wdHlfY3NldCA9IDEgaWYgKCRzID1+IC8wIGZpbGVzIGNoYW5nZWQvKTsKLQkJcHVzaChAcGlwZV90ZXh0LCAkcyk7Ci0JfQotCWNsb3NlKFBJUEUpOwotCi0JaWYgKCEgJGVtcHR5X2NzZXQpIHsKLQkJcHJpbnQgQGNzZXRfdGV4dDsKLQkJcHJpbnQgQHBpcGVfdGV4dDsKLQkJcHJpbnQgIlxuXG4iOwotCX0KLQotCUBwaXBlX3RleHQgPSAoKTsKLQlAY3NldF90ZXh0ID0gKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvY3NldHMtdG8tcGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvY3NldHMtdG8tcGF0Y2hlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTJiODFjMy4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2NzZXRzLXRvLXBhdGNoZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0jIS91c3IvYmluL3BlcmwgLXcKLQotdXNlIHN0cmljdDsKLQotbXkgKCRsaHMsICRyZXYsICR0bXAsICRyaHMsICRzKTsKLW15IEBjc2V0X3RleHQgPSAoKTsKLW15IEBwaXBlX3RleHQgPSAoKTsKLW15ICRoYXZlX2NzZXQgPSAwOwotCi13aGlsZSAoPD4pIHsKLQluZXh0IGlmIC9eLS0tLzsKLQotCWlmICgoJGxocywgJHRtcCwgJHJocykgPSAoL14oQ2hhbmdlU2V0XEApKFteLF0rKSgsIC4qKSQvKSkgewotCQkmY3NldF9yZXYgaWYgKCRoYXZlX2NzZXQpOwotCi0JCSRyZXYgPSAkdG1wOwotCQkkaGF2ZV9jc2V0ID0gMTsKLQotCQlwdXNoKEBjc2V0X3RleHQsICRfKTsKLQl9Ci0KLQllbHNpZiAoJGhhdmVfY3NldCkgewotCQlwdXNoKEBjc2V0X3RleHQsICRfKTsKLQl9Ci19Ci0mY3NldF9yZXYgaWYgKCRoYXZlX2NzZXQpOwotZXhpdCgwKTsKLQotCi1zdWIgY3NldF9yZXYgewotCW15ICRlbXB0eV9jc2V0ID0gMDsKLQotCXN5c3RlbSgiYmsgZXhwb3J0IC10cGF0Y2ggLWR1IC1yICRyZXYgPiAvdG1wL3Jldi0kcmV2LnBhdGNoIik7Ci0KLQlpZiAoISAkZW1wdHlfY3NldCkgewotCQlwcmludCBAY3NldF90ZXh0OwotCQlwcmludCBAcGlwZV90ZXh0OwotCQlwcmludCAiXG5cbiI7Ci0JfQotCi0JQHBpcGVfdGV4dCA9ICgpOwotCUBjc2V0X3RleHQgPSAoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9nY2FwYXRjaCBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvZ2NhcGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGFhZWIxN2QuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9nY2FwYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIFB1cnBvc2U6IEdlbmVyYXRlIEdOVSBkaWZmIG9mIGxvY2FsIGNoYW5nZXMgdmVyc3VzIGNhbm9uaWNhbCB0b3Atb2YtdHJlZQotIwotIyBVc2FnZTogZ2NhcGF0Y2ggPiBmb28ucGF0Y2gKLSMKLQotYmsgZXhwb3J0IC10cGF0Y2ggLWhkdSAtcmBiayByZXBvZ2NhIGJrOi8vbGludXguYmtiaXRzLm5ldC9saW51eC0yLjVgLCsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvdW5iejY0d3JhcCBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvdW5iejY0d3JhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNGZjM2U3My4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL3VuYno2NHdyYXAKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIS9iaW4vc2gKLQotIyB1bmJ6NjR3cmFwIC0gdGhlIHJlY2VpdmluZyBzaWRlIG9mIGEgYnppcDIgfCBiYXNlNjQgc3RyZWFtCi0jIEFuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyQGNsdXN0ZXJmcy5jb20+ICAgSmFuIDIwMDIKLQotIyBTYWRseSwgbWltZW5jb2RlIGRvZXMgbm90IGFwcGVhciB0byBoYXZlIGdvb2QgImJlZ2luIiBhbmQgImVuZCIgbWFya2VycwotIyBsaWtlIHV1ZW5jb2RlIGRvZXMsIGFuZCBpdCBpcyBwaWNreSBhYm91dCBnZXR0aW5nIHRoZSByaWdodCBzdGFydC9lbmQgb2YKLSMgdGhlIGJhc2U2NCBzdHJlYW0sIHNvIHdlIGhhbmRsZSB0aGlzIGV4cGxpY2l0bHkgaGVyZS4KLQotUEFUSD0kUEFUSDovdXNyL2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2ZyZWV3YXJlL2JpbgotCi1pZiBtaW1lbmNvZGUgLXUgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMSA7IHRoZW4KLQlTSE9XPQotCXdoaWxlIHJlYWQgTElORTsgZG8KLQkJY2FzZSAkTElORSBpbgotCQliZWdpbi1iYXNlNjQqKSBTSE9XPVlFUyA7OwotCQk9PT09KSBTSE9XPSA7OwotCQkqKSBbICIkU0hPVyIgXSAmJiBlY2hvICIkTElORSIgOzsKLQkJZXNhYwotCWRvbmUgfCBtaW1lbmNvZGUgLXUgfCBidW56aXAyCi0JZXhpdCAkPwotZWxzZQotCWNhdCAtIHwgdXVkZWNvZGUgLW8gL2Rldi9zdGRvdXQgfCBidW56aXAyCi0JZXhpdCAkPwotZmkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ2hhbmdlcyBiL0RvY3VtZW50YXRpb24vQ2hhbmdlcwppbmRleCBjYWE2YTU1Li41NzU0MmJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0NoYW5nZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9DaGFuZ2VzCkBAIC0zNTcsMTQgKzM1NywxNCBAQAogLS0tLS0tLS0tLQogbyAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXhxdW90YS8+CiAKLUphZGUKLS0tLS0KLW8gIDxmdHA6Ly9mdHAuamNsYXJrLmNvbS9wdWIvamFkZS9qYWRlLTEuMi4xLnRhci5nej4KLQogRG9jQm9vayBTdHlsZXNoZWV0cwogLS0tLS0tLS0tLS0tLS0tLS0tLQogbyAgPGh0dHA6Ly9ud2Fsc2guY29tL2RvY2Jvb2svZHNzc2wvPgogCitYTUxUTyBYU0xUIEZyb250ZW5kCistLS0tLS0tLS0tLS0tLS0tLS0tCitvICA8aHR0cDovL2N5YmVyZWxrLm5ldC90aW0veG1sdG8vPgorCiBJbnRlbCBQNiBtaWNyb2NvZGUKIC0tLS0tLS0tLS0tLS0tLS0tLQogbyAgPGh0dHA6Ly93d3cudXJiYW5teXRoLm9yZy9taWNyb2NvZGUvPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCmluZGV4IGEyMjEwMzkuLmU2OWIzZDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKQEAgLTcsMTAgKzcsOSBAQAogIyBsaXN0IG9mIERPQ0JPT0tTLgogCiBET0NCT09LUyA6PSB3YW5ib29rLnhtbCB6ODUzMGJvb2sueG1sIG1jYWJvb2sueG1sIHZpZGVvYm9vay54bWwgXAotCSAgICBrZXJuZWwtaGFja2luZy54bWwga2VybmVsLWxvY2tpbmcueG1sIHZpYS1hdWRpby54bWwgXAotCSAgICBkZXZpY2Vpb2Jvb2sueG1sIHByb2Nmcy1ndWlkZS54bWwgdHVsaXAtdXNlci54bWwgXAotCSAgICB3cml0aW5nX3VzYl9kcml2ZXIueG1sIHNjc2lkcml2ZXJzLnhtbCBzaXM5MDAueG1sIFwKLQkgICAga2VybmVsLWFwaS54bWwgam91cm5hbC1hcGkueG1sIGxzbS54bWwgdXNiLnhtbCBcCisJICAgIGtlcm5lbC1oYWNraW5nLnhtbCBrZXJuZWwtbG9ja2luZy54bWwgZGV2aWNlaW9ib29rLnhtbCBcCisJICAgIHByb2Nmcy1ndWlkZS54bWwgd3JpdGluZ191c2JfZHJpdmVyLnhtbCBzY3NpZHJpdmVycy54bWwgXAorCSAgICBzaXM5MDAueG1sIGtlcm5lbC1hcGkueG1sIGpvdXJuYWwtYXBpLnhtbCBsc20ueG1sIHVzYi54bWwgXAogCSAgICBnYWRnZXQueG1sIGxpYmF0YS54bWwgbXRkbmFuZC54bWwgbGlicnMueG1sCiAKICMjIwpAQCAtNDIsMTQgKzQxLDE2IEBACiBtYW5kb2NzOiAkKE1BTikKIAogaW5zdGFsbG1hbmRvY3M6IG1hbmRvY3MKLQkkKE1BS0VNQU4pIGluc3RhbGwgRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hbgorCW1rZGlyIC1wIC91c3IvbG9jYWwvbWFuL21hbjkvCisJaW5zdGFsbCBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFuLyouOS5neiAvdXNyL2xvY2FsL21hbi9tYW45LwogCiAjIyMKICNFeHRlcm5hbCBwcm9ncmFtcyB1c2VkCiBLRVJORUxET0MgPSBzY3JpcHRzL2tlcm5lbC1kb2MKIERPQ1BST0MgICA9IHNjcmlwdHMvYmFzaWMvZG9jcHJvYwotU1BMSVRNQU4gID0gJChQRVJMKSAkKHNyY3RyZWUpL3NjcmlwdHMvc3BsaXQtbWFuCi1NQUtFTUFOICAgPSAkKFBFUkwpICQoc3JjdHJlZSkvc2NyaXB0cy9tYWtlbWFuCisKK1hNTFRPRkxBR1MgPSAtbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svc3R5bGVzaGVldC54c2wKKyNYTUxUT0ZMQUdTICs9IC0tc2tpcC12YWxpZGF0aW9uCiAKICMjIwogIyBET0NQUk9DIGlzIHVzZWQgZm9yIHR3byBwdXJwb3NlczoKQEAgLTk2LDQ1ICs5Nyw0NCBAQAogIyBSdWxlcyB0byBnZW5lcmF0ZSBwb3N0c2NyaXB0LCBQREYgYW5kIEhUTUwKICMgZGIyaHRtbCBjcmVhdGVzIGEgZGlyZWN0b3J5LiBHZW5lcmF0ZSBhIGh0bWwgZmlsZSB1c2VkIGZvciB0aW1lc3RhbXAKIAotcXVpZXRfY21kX2RiMnBzID0gREIyUFMgICAkQAotICAgICAgY21kX2RiMnBzID0gZGIycHMgLW8gJChkaXIgJEApICQ8CitxdWlldF9jbWRfZGIycHMgPSBYTUxUTyAgICAkQAorICAgICAgY21kX2RiMnBzID0geG1sdG8gcHMgJChYTUxUT0ZMQUdTKSAtbyAkKGRpciAkQCkgJDwKICUucHMgOiAlLnhtbAotCUAod2hpY2ggZGIycHMgPiAvZGV2L251bGwgMj4mMSkgfHwgXAotCSAoZWNobyAiKioqIFlvdSBuZWVkIHRvIGluc3RhbGwgRG9jQm9vayBzdHlsZXNoZWV0cyAqKioiOyBcCisJQCh3aGljaCB4bWx0byA+IC9kZXYvbnVsbCAyPiYxKSB8fCBcCisJIChlY2hvICIqKiogWW91IG5lZWQgdG8gaW5zdGFsbCB4bWx0byAqKioiOyBcCiAJICBleGl0IDEpCiAJJChjYWxsIGNtZCxkYjJwcykKIAotcXVpZXRfY21kX2RiMnBkZiA9IERCMlBERiAgJEAKLSAgICAgIGNtZF9kYjJwZGYgPSBkYjJwZGYgLW8gJChkaXIgJEApICQ8CitxdWlldF9jbWRfZGIycGRmID0gWE1MVE8gICAkQAorICAgICAgY21kX2RiMnBkZiA9IHhtbHRvIHBkZiAkKFhNTFRPRkxBR1MpIC1vICQoZGlyICRAKSAkPAogJS5wZGYgOiAlLnhtbAotCUAod2hpY2ggZGIycGRmID4gL2Rldi9udWxsIDI+JjEpIHx8IFwKLQkgKGVjaG8gIioqKiBZb3UgbmVlZCB0byBpbnN0YWxsIERvY0Jvb2sgc3R5bGVzaGVldHMgKioqIjsgXAorCUAod2hpY2ggeG1sdG8gPiAvZGV2L251bGwgMj4mMSkgfHwgXAorCSAoZWNobyAiKioqIFlvdSBuZWVkIHRvIGluc3RhbGwgeG1sdG8gKioqIjsgXAogCSAgZXhpdCAxKQogCSQoY2FsbCBjbWQsZGIycGRmKQogCi1xdWlldF9jbWRfZGIyaHRtbCA9IERCMkhUTUwgJEAKLSAgICAgIGNtZF9kYjJodG1sID0gZGIyaHRtbCAtbyAkKHBhdHN1YnN0ICUuaHRtbCwlLCRAKSAkPCAmJgkJICAgICAgXAotCQllY2hvICc8YSBIUkVGPSIkKHBhdHN1YnN0ICUuaHRtbCwlLCQobm90ZGlyICRAKSkvYm9vazEuaHRtbCI+IFwKK3F1aWV0X2NtZF9kYjJodG1sID0gWE1MVE8gICRACisgICAgICBjbWRfZGIyaHRtbCA9IHhtbHRvIHhodG1sICQoWE1MVE9GTEFHUykgLW8gJChwYXRzdWJzdCAlLmh0bWwsJSwkQCkgJDwgJiYgXAorCQllY2hvICc8YSBIUkVGPSIkKHBhdHN1YnN0ICUuaHRtbCwlLCQobm90ZGlyICRAKSkvaW5kZXguaHRtbCI+IFwKICAgICAgICAgIEdvdG8gJChwYXRzdWJzdCAlLmh0bWwsJSwkKG5vdGRpciAkQCkpPC9hPjxwPicgPiAkQAogCiAlLmh0bWw6CSUueG1sCi0JQCh3aGljaCBkYjJodG1sID4gL2Rldi9udWxsIDI+JjEpIHx8IFwKLQkgKGVjaG8gIioqKiBZb3UgbmVlZCB0byBpbnN0YWxsIERvY0Jvb2sgc3R5bGVzaGVldHMgKioqIjsgXAorCUAod2hpY2ggeG1sdG8gPiAvZGV2L251bGwgMj4mMSkgfHwgXAorCSAoZWNobyAiKioqIFlvdSBuZWVkIHRvIGluc3RhbGwgeG1sdG8gKioqIjsgXAogCSAgZXhpdCAxKQogCUBybSAtcmYgJEAgJChwYXRzdWJzdCAlLmh0bWwsJSwkQCkKIAkkKGNhbGwgY21kLGRiMmh0bWwpCiAJQGlmIFsgISAteiAiJChQTkctJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpKSIgXTsgdGhlbiBcCiAgICAgICAgICAgICBjcCAkKFBORy0kKGJhc2VuYW1lICQobm90ZGlyICRAKSkpICQocGF0c3Vic3QgJS5odG1sLCUsJEApOyBmaQogCi0jIyMKLSMgUnVsZSB0byBnZW5lcmF0ZSBtYW4gZmlsZXMgLSBvdXRwdXQgaXMgcGxhY2VkIGluIHRoZSBtYW4gc3ViZGlyZWN0b3J5Ci0KLSUuOToJJS54bWwKLWlmbmVxICgkKEtCVUlMRF9TUkMpLCkKLQkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFuCi1lbmRpZgotCSQoU1BMSVRNQU4pICQ8ICQob2JqdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hbiAiJChWRVJTSU9OKS4kKFBBVENITEVWRUwpLiQoU1VCTEVWRUwpIgotCSQoTUFLRU1BTikgY29udmVydCAkKG9ianRyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYW4gJDwKK3F1aWV0X2NtZF9kYjJtYW4gPSBYTUxUTyAgICRACisgICAgICBjbWRfZGIybWFuID0gaWYgZ3JlcCAtcSByZWZlbnRyeSAkPDsgdGhlbiB4bWx0byBtYW4gJChYTUxUT0ZMQUdTKSAtbyAkKG9iaikvbWFuICQ8IDsgZ3ppcCAtZiAkKG9iaikvbWFuLyouOTsgZmkKKyUuOSA6ICUueG1sCisJQCh3aGljaCB4bWx0byA+IC9kZXYvbnVsbCAyPiYxKSB8fCBcCisJIChlY2hvICIqKiogWW91IG5lZWQgdG8gaW5zdGFsbCB4bWx0byAqKioiOyBcCisJICBleGl0IDEpCisJJChjYWxsIGNtZCxkYjJtYW4pCisJQHRvdWNoICRACiAKICMjIwogIyBSdWxlcyB0byBnZW5lcmF0ZSBwb3N0c2NyaXB0cyBhbmQgUE5HIGltZ2FnZXMgZnJvbSAuZmlnIGZvcm1hdCBmaWxlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKaW5kZXggMWJkMjBjOC4uNzU3Y2VmOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCkBAIC00OSwxMyArNDksMzMgQEAKICFJaW5jbHVkZS9hc20taTM4Ni91bmFsaWduZWQuaAogICAgICA8L3NlY3QxPgogCi08IS0tIEZJWE1FOgotICBrZXJuZWwvc2NoZWQuYyBoYXMgbm8gZG9jcywgd2hpY2ggc3R1ZmZzIHVwIHRoZSBzZ21sLiAgQ29tbWVudAotICBvdXQgdW50aWwgc29tZWJvZHkgYWRkcyBkb2NzLiAgS0FPCiAgICAgIDxzZWN0MT48dGl0bGU+RGVsYXlpbmcsIHNjaGVkdWxpbmcsIGFuZCB0aW1lciByb3V0aW5lczwvdGl0bGU+Ci1YIUVrZXJuZWwvc2NoZWQuYworIUlpbmNsdWRlL2xpbnV4L3NjaGVkLmgKKyFFa2VybmVsL3NjaGVkLmMKKyFFa2VybmVsL3RpbWVyLmMKICAgICAgPC9zZWN0MT4KLUtBTyAtLT4KKyAgICAgPHNlY3QxPjx0aXRsZT5JbnRlcm5hbCBGdW5jdGlvbnM8L3RpdGxlPgorIUlrZXJuZWwvZXhpdC5jCishSWtlcm5lbC9zaWduYWwuYworICAgICA8L3NlY3QxPgorCisgICAgIDxzZWN0MT48dGl0bGU+S2VybmVsIG9iamVjdHMgbWFuaXB1bGF0aW9uPC90aXRsZT4KKzwhLS0KK1ghSWluY2x1ZGUvbGludXgva29iamVjdC5oCistLT4KKyFFbGliL2tvYmplY3QuYworICAgICA8L3NlY3QxPgorCisgICAgIDxzZWN0MT48dGl0bGU+S2VybmVsIHV0aWxpdHkgZnVuY3Rpb25zPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9rZXJuZWwuaAorPCEtLSBUaGlzIG5lZWRzIHRvIGNsZWFuIHVwIHRvIG1ha2Uga2VybmVsLWRvYyBoYXBweQorWCFFa2VybmVsL3ByaW50ay5jCisgLS0+CishRWtlcm5lbC9wYW5pYy5jCishRWtlcm5lbC9zeXMuYworIUVrZXJuZWwvcmN1cGRhdGUuYworICAgICA8L3NlY3QxPgorCiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlciBpZD0iYWR0Ij4KQEAgLTgxLDcgKzEwMSw5IEBACiAhRWxpYi92c3ByaW50Zi5jCiAgICAgIDwvc2VjdDE+CiAgICAgIDxzZWN0MT48dGl0bGU+U3RyaW5nIE1hbmlwdWxhdGlvbjwvdGl0bGU+Ci0hSWxpYi9zdHJpbmcuYworPCEtLSBBbGwgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhdCBub3cKK1ghSWxpYi9zdHJpbmcuYworIC0tPgogIUVsaWIvc3RyaW5nLmMKICAgICAgPC9zZWN0MT4KICAgICAgPHNlY3QxPjx0aXRsZT5CaXQgT3BlcmF0aW9uczwvdGl0bGU+CkBAIC05OCw2ICsxMjAsMjUgQEAKICFJaW5jbHVkZS9hc20taTM4Ni91YWNjZXNzLmgKICFJYXJjaC9pMzg2L2xpYi91c2VyY29weS5jCiAgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+TW9yZSBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnM8L3RpdGxlPgorIUlpbmNsdWRlL2xpbnV4L3JtYXAuaAorIUVtbS9yZWFkYWhlYWQuYworIUVtbS9maWxlbWFwLmMKKyFFbW0vbWVtb3J5LmMKKyFFbW0vdm1hbGxvYy5jCishRW1tL21lbXBvb2wuYworIUVtbS9wYWdlLXdyaXRlYmFjay5jCishRW1tL3RydW5jYXRlLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisKKyAgPGNoYXB0ZXIgaWQ9ImlwYyI+CisgICAgIDx0aXRsZT5LZXJuZWwgSVBDIGZhY2lsaXRpZXM8L3RpdGxlPgorCisgICAgIDxzZWN0MT48dGl0bGU+SVBDIHV0aWxpdGllczwvdGl0bGU+CishSWlwYy91dGlsLmMKKyAgICAgPC9zZWN0MT4KICAgPC9jaGFwdGVyPgogCiAgIDxjaGFwdGVyIGlkPSJrZmlmbyI+CkBAIC0xMTQsNiArMTU1LDEwIEBACiAgICAgIDxzZWN0MT48dGl0bGU+c3lzY3RsIGludGVyZmFjZTwvdGl0bGU+CiAhRWtlcm5lbC9zeXNjdGwuYwogICAgICA8L3NlY3QxPgorCisgICAgIDxzZWN0MT48dGl0bGU+cHJvYyBmaWxlc3lzdGVtIGludGVyZmFjZTwvdGl0bGU+CishSWZzL3Byb2MvYmFzZS5jCisgICAgIDwvc2VjdDE+CiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlciBpZD0iZGVidWdmcyI+CkBAIC0xMjcsNiArMTcyLDEwIEBACiAKICAgPGNoYXB0ZXIgaWQ9InZmcyI+CiAgICAgIDx0aXRsZT5UaGUgTGludXggVkZTPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5UaGUgRmlsZXN5c3RlbSB0eXBlczwvdGl0bGU+CishSWluY2x1ZGUvbGludXgvZnMuaAorIUVpbmNsdWRlL2xpbnV4L2ZzLmgKKyAgICAgPC9zZWN0MT4KICAgICAgPHNlY3QxPjx0aXRsZT5UaGUgRGlyZWN0b3J5IENhY2hlPC90aXRsZT4KICFFZnMvZGNhY2hlLmMKICFJaW5jbHVkZS9saW51eC9kY2FjaGUuaApAQCAtMTQyLDEzICsxOTEsMzEgQEAKICFFZnMvbG9ja3MuYwogIUlmcy9sb2Nrcy5jCiAgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+T3RoZXIgRnVuY3Rpb25zPC90aXRsZT4KKyFFZnMvbXBhZ2UuYworIUVmcy9uYW1laS5jCishRWZzL2J1ZmZlci5jCishRWZzL2Jpby5jCishRWZzL3NlcV9maWxlLmMKKyFFZnMvZmlsZXN5c3RlbXMuYworIUVmcy9mcy13cml0ZWJhY2suYworIUVmcy9ibG9ja19kZXYuYworICAgICA8L3NlY3QxPgogICA8L2NoYXB0ZXI+CiAKICAgPGNoYXB0ZXIgaWQ9Im5ldGNvcmUiPgogICAgICA8dGl0bGU+TGludXggTmV0d29ya2luZzwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+TmV0d29ya2luZyBCYXNlIFR5cGVzPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9uZXQuaAorICAgICA8L3NlY3QxPgogICAgICA8c2VjdDE+PHRpdGxlPlNvY2tldCBCdWZmZXIgRnVuY3Rpb25zPC90aXRsZT4KICFJaW5jbHVkZS9saW51eC9za2J1ZmYuaAorIUlpbmNsdWRlL25ldC9zb2NrLmgKKyFFbmV0L3NvY2tldC5jCiAhRW5ldC9jb3JlL3NrYnVmZi5jCishRW5ldC9jb3JlL3NvY2suYworIUVuZXQvY29yZS9kYXRhZ3JhbS5jCishRW5ldC9jb3JlL3N0cmVhbS5jCiAgICAgIDwvc2VjdDE+CiAgICAgIDxzZWN0MT48dGl0bGU+U29ja2V0IEZpbHRlcjwvdGl0bGU+CiAhRW5ldC9jb3JlL2ZpbHRlci5jCkBAIC0xNTgsNiArMjI1LDE0IEBACiAhRW5ldC9jb3JlL2dlbl9zdGF0cy5jCiAhRW5ldC9jb3JlL2dlbl9lc3RpbWF0b3IuYwogICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPlNVTiBSUEMgc3Vic3lzdGVtPC90aXRsZT4KKzwhLS0gVGhlICFEIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHBlcmZlY3QsIGdhcmJhZ2UgaGFzIHRvIGJlIHByb3RlY3RlZCBieSBjb21tZW50cworIURuZXQvc3VucnBjL3N1bnJwY19zeW1zLmMKKy0tPgorIUVuZXQvc3VucnBjL3hkci5jCishRW5ldC9zdW5ycGMvc3Zjc29jay5jCishRW5ldC9zdW5ycGMvc2NoZWQuYworICAgICA8L3NlY3QxPgogICA8L2NoYXB0ZXI+CiAKICAgPGNoYXB0ZXIgaWQ9Im5ldGRldiI+CkBAIC0xOTQsMTEgKzI2OSwyNiBAQAogIUlhcmNoL2kzODYva2VybmVsL2lycS5jCiAgICAgIDwvc2VjdDE+CiAKKyAgICAgPHNlY3QxPjx0aXRsZT5SZXNvdXJjZXMgTWFuYWdlbWVudDwvdGl0bGU+CishRWtlcm5lbC9yZXNvdXJjZS5jCisgICAgIDwvc2VjdDE+CisKICAgICAgPHNlY3QxPjx0aXRsZT5NVFJSIEhhbmRsaW5nPC90aXRsZT4KICFFYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKICAgICAgPC9zZWN0MT4KICAgICAgPHNlY3QxPjx0aXRsZT5QQ0kgU3VwcG9ydCBMaWJyYXJ5PC90aXRsZT4KICFFZHJpdmVycy9wY2kvcGNpLmMKKyFFZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCishRWRyaXZlcnMvcGNpL3JlbW92ZS5jCishRWRyaXZlcnMvcGNpL3BjaS1hY3BpLmMKKzwhLS0ga2VybmVsZG9jIGRvZXMgbm90IHVuZGVyc3RhbmQgdG8gX19kZXZpbml0CitYIUVkcml2ZXJzL3BjaS9zZWFyY2guYworIC0tPgorIUVkcml2ZXJzL3BjaS9tc2kuYworIUVkcml2ZXJzL3BjaS9idXMuYworIUVkcml2ZXJzL3BjaS9ob3RwbHVnLmMKKyFFZHJpdmVycy9wY2kvcHJvYmUuYworIUVkcml2ZXJzL3BjaS9yb20uYwogICAgICA8L3NlY3QxPgogICAgICA8c2VjdDE+PHRpdGxlPlBDSSBIb3RwbHVnIFN1cHBvcnQgTGlicmFyeTwvdGl0bGU+CiAhRWRyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCkBAIC0yMjMsNiArMzEzLDE0IEBACiAhRWZzL2RldmZzL2Jhc2UuYwogICA8L2NoYXB0ZXI+CiAKKyAgPGNoYXB0ZXIgaWQ9InN5c2ZzIj4KKyAgICAgPHRpdGxlPlRoZSBGaWxlc3lzdGVtIGZvciBFeHBvcnRpbmcgS2VybmVsIE9iamVjdHM8L3RpdGxlPgorIUVmcy9zeXNmcy9maWxlLmMKKyFFZnMvc3lzZnMvZGlyLmMKKyFFZnMvc3lzZnMvc3ltbGluay5jCishRWZzL3N5c2ZzL2Jpbi5jCisgIDwvY2hhcHRlcj4KKwogICA8Y2hhcHRlciBpZD0ic2VjdXJpdHkiPgogICAgICA8dGl0bGU+U2VjdXJpdHkgRnJhbWV3b3JrPC90aXRsZT4KICFFc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMjMzLDYgKzMzMSw2MSBAQAogIUVrZXJuZWwvcG93ZXIvcG0uYwogICA8L2NoYXB0ZXI+CiAKKyAgPGNoYXB0ZXIgaWQ9ImRldmRyaXZlcnMiPgorICAgICA8dGl0bGU+RGV2aWNlIGRyaXZlcnMgaW5mcmFzdHJ1Y3R1cmU8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBEcml2ZXJzIEJhc2U8L3RpdGxlPgorPCEtLQorWCFJaW5jbHVkZS9saW51eC9kZXZpY2UuaAorLS0+CishRWRyaXZlcnMvYmFzZS9kcml2ZXIuYworIUVkcml2ZXJzL2Jhc2UvY2xhc3Nfc2ltcGxlLmMKKyFFZHJpdmVycy9iYXNlL2NvcmUuYworIUVkcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworIUVkcml2ZXJzL2Jhc2UvdHJhbnNwb3J0X2NsYXNzLmMKKyFFZHJpdmVycy9iYXNlL2RtYXBvb2wuYworPCEtLSBDYW5ub3QgYmUgaW5jbHVkZWQsIGJlY2F1c2UKKyAgICAgYXR0cmlidXRlX2NvbnRhaW5lcl9hZGRfY2xhc3NfZGV2aWNlX2FkYXB0ZXIKKyBhbmQgYXR0cmlidXRlX2NvbnRhaW5lcl9jbGFzc2Rldl90b19jb250YWluZXIKKyAgICAgZXhjZWVkIGFsbG93ZWQgNDQgY2hhcmFjdGVycyBtYXhpbXVtCitYIUVkcml2ZXJzL2Jhc2UvYXR0cmlidXRlX2NvbnRhaW5lci5jCistLT4KKyFFZHJpdmVycy9iYXNlL3N5cy5jCis8IS0tCitYIUVkcml2ZXJzL2Jhc2UvaW50ZXJmYWNlLmMKKy0tPgorIUVkcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworIUVkcml2ZXJzL2Jhc2UvYnVzLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5EZXZpY2UgRHJpdmVycyBQb3dlciBNYW5hZ2VtZW50PC90aXRsZT4KKyFFZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworIUVkcml2ZXJzL2Jhc2UvcG93ZXIvcmVzdW1lLmMKKyFFZHJpdmVycy9iYXNlL3Bvd2VyL3N1c3BlbmQuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBEcml2ZXJzIEFDUEkgU3VwcG9ydDwvdGl0bGU+Cis8IS0tIEludGVybmFsIGZ1bmN0aW9ucyBvbmx5CitYIUVkcml2ZXJzL2FjcGkvc2xlZXAvbWFpbi5jCitYIUVkcml2ZXJzL2FjcGkvc2xlZXAvd2FrZXVwLmMKK1ghRWRyaXZlcnMvYWNwaS9tb3RoZXJib2FyZC5jCitYIUVkcml2ZXJzL2FjcGkvYnVzLmMKKy0tPgorIUVkcml2ZXJzL2FjcGkvc2Nhbi5jCis8IS0tIE5vIGNvcnJlY3Qgc3RydWN0dXJlZCBjb21tZW50cworWCFFZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKKy0tPgorICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBkcml2ZXJzIFBuUCBzdXBwb3J0PC90aXRsZT4KKyFFZHJpdmVycy9wbnAvY29yZS5jCis8IS0tIE5vIGNvcnJlY3Qgc3RydWN0dXJlZCBjb21tZW50cworWCFFZHJpdmVycy9wbnAvc3lzdGVtLmMKKyAtLT4KKyFFZHJpdmVycy9wbnAvY2FyZC5jCishRWRyaXZlcnMvcG5wL2RyaXZlci5jCishRWRyaXZlcnMvcG5wL21hbmFnZXIuYworIUVkcml2ZXJzL3BucC9zdXBwb3J0LmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisKICAgPGNoYXB0ZXIgaWQ9ImJsa2RldiI+CiAgICAgIDx0aXRsZT5CbG9jayBEZXZpY2VzPC90aXRsZT4KICFFZHJpdmVycy9ibG9jay9sbF9yd19ibGsuYwpAQCAtMjUwLDcgKzQwMywyMyBAQAogCiAgIDxjaGFwdGVyIGlkPSJzbmRkZXYiPgogICAgICA8dGl0bGU+U291bmQgRGV2aWNlczwvdGl0bGU+CishSWluY2x1ZGUvc291bmQvY29yZS5oCiAhRXNvdW5kL3NvdW5kX2NvcmUuYworIUlpbmNsdWRlL3NvdW5kL3BjbS5oCishRXNvdW5kL2NvcmUvcGNtLmMKKyFFc291bmQvY29yZS9kZXZpY2UuYworIUVzb3VuZC9jb3JlL2luZm8uYworIUVzb3VuZC9jb3JlL3Jhd21pZGkuYworIUVzb3VuZC9jb3JlL3NvdW5kLmMKKyFFc291bmQvY29yZS9tZW1vcnkuYworIUVzb3VuZC9jb3JlL3BjbV9tZW1vcnkuYworIUVzb3VuZC9jb3JlL2luaXQuYworIUVzb3VuZC9jb3JlL2lzYWRtYS5jCishRXNvdW5kL2NvcmUvY29udHJvbC5jCishRXNvdW5kL2NvcmUvcGNtX2xpYi5jCishRXNvdW5kL2NvcmUvaHdkZXAuYworIUVzb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworIUVzb3VuZC9jb3JlL21lbWFsbG9jLmMKIDwhLS0gRklYTUU6IFJlbW92ZWQgZm9yIG5vdyBzaW5jZSBubyBzdHJ1Y3R1cmVkIGNvbW1lbnRzIGluIHNvdXJjZQogWCFJc291bmQvc291bmRfZmlybXdhcmUuYwogLS0+CkBAIC0yNTgsNiArNDI3LDcgQEAKIAogICA8Y2hhcHRlciBpZD0idWFydDE2eDUwIj4KICAgICAgPHRpdGxlPjE2eDUwIFVBUlQgRHJpdmVyPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCiAhRWRyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKICFFZHJpdmVycy9zZXJpYWwvODI1MC5jCiAgIDwvY2hhcHRlcj4KQEAgLTMxMCw5ICs0ODAsMTEgQEAKICAgICAgPHNlY3QxPjx0aXRsZT5GcmFtZSBCdWZmZXIgTWVtb3J5PC90aXRsZT4KICFFZHJpdmVycy92aWRlby9mYm1lbS5jCiAgICAgIDwvc2VjdDE+Cis8IS0tCiAgICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIENvbnNvbGU8L3RpdGxlPgotIUVkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworWCFFZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKICAgICAgPC9zZWN0MT4KKy0tPgogICAgICA8c2VjdDE+PHRpdGxlPkZyYW1lIEJ1ZmZlciBDb2xvcm1hcDwvdGl0bGU+CiAhRWRyaXZlcnMvdmlkZW8vZmJjbWFwLmMKICAgICAgPC9zZWN0MT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9zdHlsZXNoZWV0LnhzbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9zdHlsZXNoZWV0LnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTRjMjFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3N0eWxlc2hlZXQueHNsCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzdHlsZXNoZWV0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCI+Cis8cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSI+MTwvcGFyYW0+Cis8cGFyYW0gbmFtZT0iZnVuY3N5bm9wc2lzLnN0eWxlIj5hbnNpPC9wYXJhbT4KKzwvc3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay90dWxpcC11c2VyLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdHVsaXAtdXNlci50bXBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTIwZDdhLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay90dWxpcC11c2VyLnRtcGwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgotCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+Ci0KLTxib29rIGlkPSJUdWxpcFVzZXJHdWlkZSI+Ci0gPGJvb2tpbmZvPgotICA8dGl0bGU+VHVsaXAgRHJpdmVyIFVzZXIncyBHdWlkZTwvdGl0bGU+Ci0gIAotICA8YXV0aG9yZ3JvdXA+Ci0gICA8YXV0aG9yPgotICAgIDxmaXJzdG5hbWU+SmVmZjwvZmlyc3RuYW1lPgotICAgIDxzdXJuYW1lPkdhcnppazwvc3VybmFtZT4KLSAgICA8YWZmaWxpYXRpb24+Ci0gICAgIDxhZGRyZXNzPgotICAgICAgPGVtYWlsPmpnYXJ6aWtAcG9ib3guY29tPC9lbWFpbD4KLSAgICAgPC9hZGRyZXNzPgotICAgIDwvYWZmaWxpYXRpb24+Ci0gICA8L2F1dGhvcj4KLSAgPC9hdXRob3Jncm91cD4KLQotICA8Y29weXJpZ2h0PgotICAgPHllYXI+MjAwMTwveWVhcj4KLSAgIDxob2xkZXI+SmVmZiBHYXJ6aWs8L2hvbGRlcj4KLSAgPC9jb3B5cmlnaHQ+Ci0KLSAgPGxlZ2Fsbm90aWNlPgotICAgPHBhcmE+Ci0gICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQotICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCi0gICAgIHZlcnNpb24uCi0gICA8L3BhcmE+Ci0gICAgICAKLSAgIDxwYXJhPgotICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCi0gICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKLSAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gICA8L3BhcmE+Ci0gICAgICAKLSAgIDxwYXJhPgotICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICAgICBNQSAwMjExMS0xMzA3IFVTQQotICAgPC9wYXJhPgotICAgICAgCi0gICA8cGFyYT4KLSAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCi0gICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KLSAgIDwvcGFyYT4KLSAgPC9sZWdhbG5vdGljZT4KLSA8L2Jvb2tpbmZvPgotCi0gPHRvYz48L3RvYz4KLQotICA8Y2hhcHRlciBpZD0iaW50cm8iPgotICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgotPHBhcmE+Ci1UaGUgVHVsaXAgRXRoZXJuZXQgQ2FyZCBEcml2ZXIKLWlzIG1haW50YWluZWQgYnkgSmVmZiBHYXJ6aWsgKDxlbWFpbD5qZ2FyemlrQHBvYm94LmNvbTwvZW1haWw+KS4KLTwvcGFyYT4KLQotPHBhcmE+Ci1UaGUgVHVsaXAgZHJpdmVyIHdhcyBkZXZlbG9wZWQgYnkgRG9uYWxkIEJlY2tlciBhbmQgY2hhbmdlZCBieQotSmVmZiBHYXJ6aWssIFRha2FzaGkgTWFuYWJlIGFuZCBhIGNhc3Qgb2YgdGhvdXNhbmRzLgotPC9wYXJhPgotCi08cGFyYT4KLUZvciAyLjQueCBhbmQgbGF0ZXIga2VybmVscywgdGhlIExpbnV4IFR1bGlwIGRyaXZlciBpcyBhdmFpbGFibGUgYXQKLTx1bGluayB1cmw9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdHVsaXAvIj5odHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3R1bGlwLzwvdWxpbms+Ci08L3BhcmE+Ci0KLTxwYXJhPgotCVRoaXMgZHJpdmVyIGlzIGZvciB0aGUgRGlnaXRhbCAiVHVsaXAiIEV0aGVybmV0IGFkYXB0ZXIgaW50ZXJmYWNlLgotCUl0IHNob3VsZCB3b3JrIHdpdGggbW9zdCBERUMgMjEqNCotYmFzZWQgY2hpcHMvZXRoZXJjYXJkcywgYXMgd2VsbCBhcwotCXdpdGggd29yay1hbGlrZSBjaGlwcyBmcm9tIExpdGUtT24gKFBOSUMpIGFuZCBNYWNyb25peCAoTVhJQykgYW5kIEFTSVguCi08L3BhcmE+Ci0KLTxwYXJhPgotICAgICAgICBUaGUgb3JpZ2luYWwgYXV0aG9yIG1heSBiZSByZWFjaGVkIGFzIGJlY2tlckBzY3lsZC5jb20sIG9yIEMvTwotICAgICAgICBTY3lsZCBDb21wdXRpbmcgQ29ycG9yYXRpb24sCi0gICAgICAgIDQxMCBTZXZlcm4gQXZlLiwgU3VpdGUgMjEwLAotICAgICAgICBBbm5hcG9saXMgTUQgMjE0MDMKLTwvcGFyYT4KLQotPHBhcmE+Ci0JQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBEb25hbGQgQmVja2VyJ3MgdHVsaXAuYwotCWlzIGF2YWlsYWJsZSBhdCA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL3R1bGlwLmh0bWwiPmh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvdHVsaXAuaHRtbDwvdWxpbms+Ci08L3BhcmE+Ci0KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJkcnZyLWNvbXBhdCI+Ci0gICAgPHRpdGxlPkRyaXZlciBDb21wYXRpYmlsaXR5PC90aXRsZT4KLQotPHBhcmE+Ci1UaGlzIGRldmljZSBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHRoZSBERUNjaGlwICJUdWxpcCIsIERpZ2l0YWwncwotc2luZ2xlLWNoaXAgZXRoZXJuZXQgY29udHJvbGxlcnMgZm9yIFBDSSAobm93IG93bmVkIGJ5IEludGVsKS4KLVN1cHBvcnRlZCBtZW1iZXJzIG9mIHRoZSBmYW1pbHkKLWFyZSB0aGUgMjEwNDAsIDIxMDQxLCAyMTE0MCwgMjExNDBBLCAyMTE0MiwgYW5kIDIxMTQzLiAgU2ltaWxhciB3b3JrLWFsaWtlCi1jaGlwcyBmcm9tIExpdGUtT24sIE1hY3JvbmljcywgQVNJWCwgQ29tcGV4IGFuZCBvdGhlciBsaXN0ZWQgYmVsb3cgYXJlIGFsc28KLXN1cHBvcnRlZC4KLTwvcGFyYT4KLQotPHBhcmE+Ci1UaGVzZSBjaGlwcyBhcmUgdXNlZCBvbiBhdCBsZWFzdCAxNDAgdW5pcXVlIFBDSSBib2FyZCBkZXNpZ25zLiAgVGhlIGdyZWF0Ci1udW1iZXIgb2YgY2hpcHMgYW5kIGJvYXJkIGRlc2lnbnMgc3VwcG9ydGVkIGlzIHRoZSByZWFzb24gZm9yIHRoZQotZHJpdmVyIHNpemUgYW5kIGNvbXBsZXhpdHkuICBBbG1vc3Qgb2YgdGhlIGluY3JlYXNpbmcgY29tcGxleGl0eSBpcyBpbiB0aGUKLWJvYXJkIGNvbmZpZ3VyYXRpb24gYW5kIG1lZGlhIHNlbGVjdGlvbiBjb2RlLiAgVGhlcmUgaXMgdmVyeSBsaXR0bGUKLWluY3JlYXNpbmcgaW4gdGhlIG9wZXJhdGlvbmFsIGNyaXRpY2FsIHBhdGggbGVuZ3RoLgotPC9wYXJhPgotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXIgaWQ9ImJvYXJkLXNldHRpbmdzIj4KLSAgICA8dGl0bGU+Qm9hcmQtc3BlY2lmaWMgU2V0dGluZ3M8L3RpdGxlPgotCi08cGFyYT4KLVBDSSBidXMgZGV2aWNlcyBhcmUgY29uZmlndXJlZCBieSB0aGUgc3lzdGVtIGF0IGJvb3QgdGltZSwgc28gbm8ganVtcGVycwotbmVlZCB0byBiZSBzZXQgb24gdGhlIGJvYXJkLiAgVGhlIHN5c3RlbSBCSU9TIHByZWZlcmFibHkgc2hvdWxkIGFzc2lnbiB0aGUKLVBDSSBJTlRBIHNpZ25hbCB0byBhbiBvdGhlcndpc2UgdW51c2VkIHN5c3RlbSBJUlEgbGluZS4KLTwvcGFyYT4KLQotPHBhcmE+Ci1Tb21lIGJvYXJkcyBoYXZlIEVFUFJPTXMgdGFibGVzIHdpdGggZGVmYXVsdCBtZWRpYSBlbnRyeS4gIFRoZSBmYWN0b3J5IGRlZmF1bHQKLWlzIHVzdWFsbHkgImF1dG9zZWxlY3QiLiAgVGhpcyBzaG91bGQgb25seSBiZSBvdmVycmlkZGVuIHdoZW4gdXNpbmcKLXRyYW5zY2VpdmVyIGNvbm5lY3Rpb25zIHdpdGhvdXQgbGluayBiZWF0IGUuZy4gMTBiYXNlMiBvciBBVUksIG9yIChyYXJlbHkhKQotZm9yIGZvcmNpbmcgZnVsbC1kdXBsZXggd2hlbiB1c2VkIHdpdGggb2xkIGxpbmsgcGFydG5lcnMgdGhhdCBkbyBub3QgZG8KLWF1dG9uZWdvdGlhdGlvbi4KLTwvcGFyYT4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJkcml2ZXItb3BlcmF0aW9uIj4KLSAgICA8dGl0bGU+RHJpdmVyIE9wZXJhdGlvbjwvdGl0bGU+Ci0KLTxzZWN0MT48dGl0bGU+UmluZyBidWZmZXJzPC90aXRsZT4KLQotPHBhcmE+Ci1UaGUgVHVsaXAgY2FuIHVzZSBlaXRoZXIgcmluZyBidWZmZXJzIG9yIGxpc3RzIG9mIFR4IGFuZCBSeCBkZXNjcmlwdG9ycy4KLVRoaXMgZHJpdmVyIHVzZXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgcmluZ3Mgb2YgUnggYW5kIFR4IGRlc2NyaXB0b3JzLCBzZXQgYXQKLWNvbXBpbGUgdGltZSBieSBSWC9UWF9SSU5HX1NJWkUuICBUaGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlciBhbGxvY2F0ZXMgc2tidWZmcwotZm9yIHRoZSBSeCByaW5nIGJ1ZmZlcnMgYXQgb3BlbigpIHRpbWUgYW5kIHBhc3NlcyB0aGUgc2tiLT5kYXRhIGZpZWxkIHRvIHRoZQotVHVsaXAgYXMgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMuICBXaGVuIGFuIGluY29taW5nIGZyYW1lIGlzIGxlc3MgdGhhbgotUlhfQ09QWUJSRUFLIGJ5dGVzIGxvbmcsIGEgZnJlc2ggc2tidWZmIGlzIGFsbG9jYXRlZCBhbmQgdGhlIGZyYW1lIGlzCi1jb3BpZWQgdG8gdGhlIG5ldyBza2J1ZmYuICBXaGVuIHRoZSBpbmNvbWluZyBmcmFtZSBpcyBsYXJnZXIsIHRoZSBza2J1ZmYgaXMKLXBhc3NlZCBkaXJlY3RseSB1cCB0aGUgcHJvdG9jb2wgc3RhY2sgYW5kIHJlcGxhY2VkIGJ5IGEgbmV3bHkgYWxsb2NhdGVkCi1za2J1ZmYuCi08L3BhcmE+Ci0KLTxwYXJhPgotVGhlIFJYX0NPUFlCUkVBSyB2YWx1ZSBpcyBjaG9zZW4gdG8gdHJhZGUtb2ZmIHRoZSBtZW1vcnkgd2FzdGVkIGJ5Ci11c2luZyBhIGZ1bGwtc2l6ZWQgc2tidWZmIGZvciBzbWFsbCBmcmFtZXMgdnMuIHRoZSBjb3B5aW5nIGNvc3RzIG9mIGxhcmdlcgotZnJhbWVzLiAgRm9yIHNtYWxsIGZyYW1lcyB0aGUgY29weWluZyBjb3N0IGlzIG5lZ2xpZ2libGUgKGVzcC4gY29uc2lkZXJpbmcKLXRoYXQgd2UgYXJlIHByZS1sb2FkaW5nIHRoZSBjYWNoZSB3aXRoIGltbWVkaWF0ZWx5IHVzZWZ1bCBoZWFkZXIKLWluZm9ybWF0aW9uKS4gIEZvciBsYXJnZSBmcmFtZXMgdGhlIGNvcHlpbmcgY29zdCBpcyBub24tdHJpdmlhbCwgYW5kIHRoZQotbGFyZ2VyIGNvcHkgbWlnaHQgZmx1c2ggdGhlIGNhY2hlIG9mIHVzZWZ1bCBkYXRhLiAgQSBzdWJ0bGUgYXNwZWN0IG9mIHRoaXMKLWNob2ljZSBpcyB0aGF0IHRoZSBUdWxpcCBvbmx5IHJlY2VpdmVzIGludG8gbG9uZ3dvcmQgYWxpZ25lZCBidWZmZXJzLCB0aHVzCi10aGUgSVAgaGVhZGVyIGF0IG9mZnNldCAxNCBpc24ndCBsb25nd29yZCBhbGlnbmVkIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuCi1Db3BpZWQgZnJhbWVzIGFyZSBwdXQgaW50byB0aGUgbmV3IHNrYnVmZiBhdCBhbiBvZmZzZXQgb2YgIisyIiwgdGh1cyBjb3B5aW5nCi1oYXMgdGhlIGJlbmVmaWNpYWwgZWZmZWN0IG9mIGFsaWduaW5nIHRoZSBJUCBoZWFkZXIgYW5kIHByZWxvYWRpbmcgdGhlCi1jYWNoZS4KLTwvcGFyYT4KLQotPC9zZWN0MT4KLQotPHNlY3QxPjx0aXRsZT5TeW5jaHJvbml6YXRpb248L3RpdGxlPgotPHBhcmE+Ci1UaGUgZHJpdmVyIHJ1bnMgYXMgdHdvIGluZGVwZW5kZW50LCBzaW5nbGUtdGhyZWFkZWQgZmxvd3Mgb2YgY29udHJvbC4gIE9uZQotaXMgdGhlIHNlbmQtcGFja2V0IHJvdXRpbmUsIHdoaWNoIGVuZm9yY2VzIHNpbmdsZS10aHJlYWRlZCB1c2UgYnkgdGhlCi1kZXYtPnRidXN5IGZsYWcuICBUaGUgb3RoZXIgdGhyZWFkIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2hpY2ggaXMgc2luZ2xlCi10aHJlYWRlZCBieSB0aGUgaGFyZHdhcmUgYW5kIG90aGVyIHNvZnR3YXJlLgotPC9wYXJhPgotCi08cGFyYT4KLVRoZSBzZW5kIHBhY2tldCB0aHJlYWQgaGFzIHBhcnRpYWwgY29udHJvbCBvdmVyIHRoZSBUeCByaW5nIGFuZCAnZGV2LT50YnVzeScKLWZsYWcuICBJdCBzZXRzIHRoZSB0YnVzeSBmbGFnIHdoZW5ldmVyIGl0J3MgcXVldWluZyBhIFR4IHBhY2tldC4gSWYgdGhlIG5leHQKLXF1ZXVlIHNsb3QgaXMgZW1wdHksIGl0IGNsZWFycyB0aGUgdGJ1c3kgZmxhZyB3aGVuIGZpbmlzaGVkIG90aGVyd2lzZSBpdCBzZXRzCi10aGUgJ3RwLT50eF9mdWxsJyBmbGFnLgotPC9wYXJhPgotCi08cGFyYT4KLVRoZSBpbnRlcnJ1cHQgaGFuZGxlciBoYXMgZXhjbHVzaXZlIGNvbnRyb2wgb3ZlciB0aGUgUnggcmluZyBhbmQgcmVjb3JkcyBzdGF0cwotZnJvbSB0aGUgVHggcmluZy4gIChUaGUgVHgtZG9uZSBpbnRlcnJ1cHQgY2FuJ3QgYmUgc2VsZWN0aXZlbHkgdHVybmVkIG9mZiwgc28KLXdlIGNhbid0IGF2b2lkIHRoZSBpbnRlcnJ1cHQgb3ZlcmhlYWQgYnkgaGF2aW5nIHRoZSBUeCByb3V0aW5lIHJlYXAgdGhlIFR4Ci1zdGF0cy4pCSBBZnRlciByZWFwaW5nIHRoZSBzdGF0cywgaXQgbWFya3MgdGhlIHF1ZXVlIGVudHJ5IGFzIGVtcHR5IGJ5IHNldHRpbmcKLXRoZSAnYmFzZScgdG8gemVyby4JIElmZiB0aGUgJ3RwLT50eF9mdWxsJyBmbGFnIGlzIHNldCwgaXQgY2xlYXJzIGJvdGggdGhlCi10eF9mdWxsIGFuZCB0YnVzeSBmbGFncy4KLTwvcGFyYT4KLQotPC9zZWN0MT4KLQotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXIgaWQ9ImVycmF0YSI+Ci0gICAgPHRpdGxlPkVycmF0YTwvdGl0bGU+Ci0KLTxwYXJhPgotVGhlIG9sZCBERUMgZGF0YWJvb2tzIHdlcmUgbGlnaHQgb24gZGV0YWlscy4KLVRoZSAyMTA0MCBkYXRhYm9vayBjbGFpbXMgdGhhdCBDU1IxMywgQ1NSMTQsIGFuZCBDU1IxNSBzaG91bGQgZWFjaCBiZSB0aGUgbGFzdAotcmVnaXN0ZXIgb2YgdGhlIHNldCBDU1IxMi0xNSB3cml0dGVuLiAgSG1tbSwgbm93IGhvdyBpcyB0aGF0IHBvc3NpYmxlPwotPC9wYXJhPgotCi08cGFyYT4KLVRoZSBERUMgU1JPTSBmb3JtYXQgaXMgdmVyeSBiYWRseSBkZXNpZ25lZCBub3QgcHJlY2lzZWx5IGRlZmluZWQsIGxlYWRpbmcgdG8KLXBhcnQgb2YgdGhlIG1lZGlhIHNlbGVjdGlvbiBqdW5raGVhcCBiZWxvdy4gIFNvbWUgYm9hcmRzIGRvIG5vdCBoYXZlIEVFUFJPTQotbWVkaWEgdGFibGVzIGFuZCBuZWVkIHRvIGJlIHBhdGNoZWQgdXAuICBXb3JzZSwgb3RoZXIgYm9hcmRzIHVzZSB0aGUgREVDCi1kZXNpZ24ga2l0IG1lZGlhIHRhYmxlIHdoZW4gaXQgaXNuJ3QgY29ycmVjdCBmb3IgdGhlaXIgYm9hcmQuCi08L3BhcmE+Ci0KLTxwYXJhPgotV2UgY2Fubm90IHVzZSBNSUkgaW50ZXJydXB0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGRlZmluZWQgR1BJTyBwaW4gdG8gYXR0YWNoCi10aGVtLiAgVGhlIE1JSSB0cmFuc2NlaXZlciBzdGF0dXMgaXMgcG9sbGVkIHVzaW5nIGFuIGtlcm5lbCB0aW1lci4KLTwvcGFyYT4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJjaGFuZ2Vsb2ciPgotICAgIDx0aXRsZT5Ecml2ZXIgQ2hhbmdlIEhpc3Rvcnk8L3RpdGxlPgotCi0gICAgPHNlY3QxPjx0aXRsZT5WZXJzaW9uIDAuOS4xNCAoRmVicnVhcnkgMjAsIDIwMDEpPC90aXRsZT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgIDxsaXN0aXRlbT48cGFyYT5GaXggUE5JQyBwcm9ibGVtcyAoTWFuZnJlZCBTcHJhdWwpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkFkZCBuZXcgUENJIGlkIGZvciBBY2N0b24gY29tZXQ8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+U3VwcG9ydCBEYXZpY29tIHR1bGlwczwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5GaXggb29wcyBpbiBlZXByb20gcGFyc2luZzwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5FbmFibGUgd29ya2Fyb3VuZHMgZm9yIGVhcmx5IFBDSSBjaGlwc2V0czwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5JQTY0LCBocHBhIGNzcjAgc3VwcG9ydDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5TdXBwb3J0IG1lZGlhIHR5cGVzIDUsIDY8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+SW50ZXJwcmV0IGEgYml0IG1vcmUgb2YgdGhlIDIxMTQyIFNST00gZXh0ZW5kZWQgbWVkaWEgdHlwZSAzPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkFkZCBtaXNzaW5nIGRlbGF5IGluIGVlcHJvbSByZWFkaW5nPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9zZWN0MT4KLQotICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuMTEgKE5vdmVtYmVyIDMsIDIwMDApPC90aXRsZT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgIDxsaXN0aXRlbT48cGFyYT5FbGltaW5hdGUgZXh0cmEgYnVzIGFjY2Vzc2VzIHdoZW4gc2hhcmluZyBpbnRlcnJ1cHRzIChwcnVtcGYpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkJhcnJpZXIgZm9sbG93aW5nIG93bmVyc2hpcCBkZXNjcmlwdG9yIGJpdCBmbGlwIChwcnVtcGYpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkVuZGlhbm5lc3MgZml4ZXMgZm9yID4xNCBhZGRyZXNzZXMgaW4gc2V0dXAgZnJhbWVzIChwcnVtcGYpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlJlcG9ydCBsaW5rIGJlYXQgdG8ga2VybmVsL3VzZXJzcGFjZSB2aWEgbmV0aWZfY2Fycmllcl8qLiAoa3V6bmV0KTwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5CZXR0ZXIgc3BpbmxvY2tpbmcgaW4gc2V0X3J4X21vZGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkZpeCBJL08gcmVzb3VyY2UgcmVxdWVzdCBmYWlsdXJlIGVycm9yIG1lc3NhZ2VzIChEYXZlTSBjYXRjaCk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+SGFuZGxlIERNQSBhbGxvY2F0aW9uIGZhaWx1cmUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9zZWN0MT4KLQotICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuMTAgKFNlcHRlbWJlciA2LCAyMDAwKTwvdGl0bGU+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+U2ltcGxlIGludGVycnVwdCBtaXRpZ2F0aW9uICh2aWEgamFtYWwpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPk1vcmUgUENJIGlkczwvcGFyYT48L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvc2VjdDE+Ci0KLSAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjkgKEF1Z3VzdCAxMSwgMjAwMCk8L3RpdGxlPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPk1vcmUgUENJIGlkczwvcGFyYT48L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvc2VjdDE+Ci0KLSAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjggKEp1bHkgMTMsIDIwMDApPC90aXRsZT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgIDxsaXN0aXRlbT48cGFyYT5Db3JyZWN0IHNpZ25lZC91bnNpZ25lZCBjb21wYXJpc29uIGZvciBkdW1teSBmcmFtZSBpbmRleDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5SZW1vdmUgb3V0ZGF0ZWQgcmVmZXJlbmNlcyB0byBzdHJ1Y3QgZW5ldF9zdGF0aXN0aWNzPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9zZWN0MT4KLQotICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuNyAoSnVuZSAxNywgMjAwMCk8L3RpdGxlPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlRpbWVyIGNsZWFudXBzIChBbmRyZXcgTW9ydG9uKTwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5BbHBoYSBjb21waWxlIGZpeCAoc29tZWJvZHk/KTwvcGFyYT48L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvc2VjdDE+Ci0KLSAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjYgKE1heSAzMSwgMjAwMCk8L3RpdGxlPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlJldmVydCAyMTE0My1yZWxhdGVkIHN1cHBvcnQgZmxhZyBwYXRjaDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgSFBQQS9tZWRpYS10YWJsZSBkZWJ1Z2dpbmcgcHJpbnRrPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9zZWN0MT4KLQotICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuNSAoTWF5IDMwLCAyMDAwKTwvdGl0bGU+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+SFBQQSBzdXBwb3J0ICh3aWxseUBwdWZmaW5ncm91cCk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+Q1NSNiBiaXRzIGFuZCB0dWxpcC5oIGNsZWFudXAgKENocmlzIFNtaXRoKTwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5JbXByb3ZlIGRlYnVnZ2luZyBtZXNzYWdlcyBhIGJpdDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgZGVsYXkgYWZ0ZXIgQ1NSMTMgd3JpdGUgaW4gdDIxMTQyX3N0YXJ0X253YXk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+UmVtb3ZlIHVudXNlZCBFVEhFUl9TVEFUUyBjb2RlPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkNvbnZlcnQgJ2V4dGVybiBpbmxpbmUnIHRvICdzdGF0aWMgaW5saW5lJyBpbiB0dWxpcC5oIChDaHJpcyBTbWl0aCk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+VXBkYXRlIERTMjExNDMgc3VwcG9ydCBmbGFncyBpbiB0dWxpcF9jaGlwX2luZm9bXTwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5Vc2Ugc3Bpbl9sb2NrX2lycSwgbm90IF9pcnFzYXZlL3Jlc3RvcmUsIGluIHR1bGlwX3N0YXJ0X3htaXQoKTwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgbG9ja2luZyB0byBzZXRfcnhfbW9kZSgpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkZpeCByYWNlIHdpdGggY2hpcCBzZXR0aW5nIERlc2NPd25lZCBiaXQgKEhhbCBNdXJyYXkpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlJlcXVlc3QgMTAwJSBvZiBQSU8gYW5kIE1NSU8gcmVzb3VyY2Ugc3BhY2UgYXNzaWduZWQgdG8gY2FyZDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5SZW1vdmUgZXJyb3IgbWVzc2FnZSBmcm9tIHBjaV9lbmFibGVfZGV2aWNlIGZhaWx1cmU8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3NlY3QxPgotCi0gICAgPHNlY3QxPjx0aXRsZT5WZXJzaW9uIDAuOS40LjMgKEFwcmlsIDE0LCAyMDAwKTwvdGl0bGU+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+bW9kX3RpbWVyIGZpeCAoSGFsIE11cnJheSk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+UE5JQzIgcmVzdXNjaXRhdGlvbiAoQ2hyaXMgU21pdGgpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9zZWN0MT4KLQotICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuNC4yIChNYXJjaCAyMSwgMjAwMCk8L3RpdGxlPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkZpeCAyMTA0MSBDU1I3LCBDU1IxMy8xNC8xNSBoYW5kbGluZzwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5NZXJnZSBzb21lIFBDSSBpZHMgZnJvbSB0dWxpcCAwLjkxeDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5NZXJnZSBzb21lIEhBU194eHggZmxhZ3MgYW5kIGZsYWcgc2V0dGluZ3MgZnJvbSB0dWxpcCAwLjkxeDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5hc20vaW8uaCBmaXggKHN1Ym1pdHRlZCBieSBtYW55KSBhbmQgY2xlYW51cDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5zL0hBU19OV0FZMTQzL0hBU19OV0FZLzwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5DbGVhbnVwIDIxMDQxIG1vZGUgcmVwb3J0aW5nPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlNtYWxsIGNvZGUgY2xlYW51cHM8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3NlY3QxPgotCi0gICAgPHNlY3QxPjx0aXRsZT5WZXJzaW9uIDAuOS40LjEgKE1hcmNoIDE4LCAyMDAwKTwvdGl0bGU+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+RmluaXNoIFBDSSBETUEgY29udmVyc2lvbiAoZGF2ZW0pPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkRvIG5vdCBuZXRpZl9zdGFydF9xdWV1ZSgpIGF0IGVuZCBvZiB0dWxpcF90eF90aW1lb3V0KCkgKGt1em5ldCk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+UENJIERNQSBmaXggKGt1em5ldCk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+ZWVwcm9tLmMgY29kZSBjbGVhbnVwPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlJlbW92ZSBYaXJjb20gVHVsaXAgY3J1ZDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvc2VjdDE+Ci0gIDwvY2hhcHRlcj4KLQotPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpYS1hdWRpby50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpYS1hdWRpby50bXBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmU2NDIxLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92aWEtYXVkaW8udG1wbAorKysgL2Rldi9udWxsCkBAIC0xLDU5NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCi0JImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KLQotPGJvb2sgaWQ9IlZpYUF1ZGlvR3VpZGUiPgotIDxib29raW5mbz4KLSAgPHRpdGxlPlZpYSA2ODYgQXVkaW8gRHJpdmVyIGZvciBMaW51eDwvdGl0bGU+Ci0gIAotICA8YXV0aG9yZ3JvdXA+Ci0gICA8YXV0aG9yPgotICAgIDxmaXJzdG5hbWU+SmVmZjwvZmlyc3RuYW1lPgotICAgIDxzdXJuYW1lPkdhcnppazwvc3VybmFtZT4KLSAgIDwvYXV0aG9yPgotICA8L2F1dGhvcmdyb3VwPgotCi0gIDxjb3B5cmlnaHQ+Ci0gICA8eWVhcj4xOTk5LTIwMDE8L3llYXI+Ci0gICA8aG9sZGVyPkplZmYgR2FyemlrPC9ob2xkZXI+Ci0gIDwvY29weXJpZ2h0PgotCi0gIDxsZWdhbG5vdGljZT4KLSAgIDxwYXJhPgotICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKLSAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgotICAgICB2ZXJzaW9uLgotICAgPC9wYXJhPgotICAgICAgCi0gICA8cGFyYT4KLSAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCi0gICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAgPC9wYXJhPgotICAgICAgCi0gICA8cGFyYT4KLSAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAgICAgTUEgMDIxMTEtMTMwNyBVU0EKLSAgIDwvcGFyYT4KLSAgICAgIAotICAgPHBhcmE+Ci0gICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQotICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCi0gICA8L3BhcmE+Ci0gIDwvbGVnYWxub3RpY2U+Ci0gPC9ib29raW5mbz4KLQotPHRvYz48L3RvYz4KLQotICA8Y2hhcHRlciBpZD0iaW50cm8iPgotICAgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+Ci0gIDxwYXJhPgotICAJVGhlIFZpYSBWVDgyQzY4NkEgInN1cGVyIHNvdXRoYnJpZGdlIiBjaGlwcyBjb250YWluCi0JQUM5Ny1jb21wYXRpYmxlIGF1ZGlvIGxvZ2ljIHdoaWNoIGZlYXR1cmVzIGR1YWwgMTYtYml0IHN0ZXJlbwotCVBDTSBzb3VuZCBjaGFubmVscyAoZnVsbCBkdXBsZXgpLCBwbHVzIGEgdGhpcmQgUENNIGNoYW5uZWwgaW50ZW5kZWQgZm9yIHVzZQotCWluIGhhcmR3YXJlLWFzc2lzdGVkIEZNIHN5bnRoZXNpcy4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgCVRoZSBjdXJyZW50IExpbnV4IGtlcm5lbCBhdWRpbyBkcml2ZXIgZm9yIHRoaXMgZmFtaWx5IG9mIGNoaXBzCi0Jc3VwcG9ydHMgYXVkaW8gcGxheWJhY2sgYW5kIHJlY29yZGluZywgYnV0IGhhcmR3YXJlLWFzc2lzdGVkCi0JRk0gZmVhdHVyZXMsIGFuZCBoYXJkd2FyZSBidWZmZXIgZGlyZWN0LWFjY2VzcyAobW1hcCkKLQlzdXBwb3J0IGFyZSBub3QgeWV0IGF2YWlsYWJsZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgCVRoaXMgZHJpdmVyIHN1cHBvcnRzIGFueSBMaW51eCBrZXJuZWwgdmVyc2lvbiBhZnRlciAyLjQuMTAuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0JUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gdGhlIG1haWxpbmcgbGlzdCA8ZW1haWw+bGludXgtdmlhQGd0Zi5vcmc8L2VtYWlsPi4KLQlUbyBzdWJzY3JpYmUsIGUtbWFpbCA8ZW1haWw+bWFqb3Jkb21vQGd0Zi5vcmc8L2VtYWlsPiB3aXRoCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCXN1YnNjcmliZSBsaW51eC12aWEKLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0JaW4gdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCi0gIDwvcGFyYT4KLSAgPC9jaGFwdGVyPgotICAKLSAgPGNoYXB0ZXIgaWQ9Imluc3RhbGwiPgotICAgICAgPHRpdGxlPkRyaXZlciBJbnN0YWxsYXRpb248L3RpdGxlPgotICA8cGFyYT4KLSAgCVRvIHVzZSB0aGlzIGF1ZGlvIGRyaXZlciwgc2VsZWN0IHRoZQotCUNPTkZJR19TT1VORF9WSUE4MkNYWFggb3B0aW9uIGluIHRoZSBzZWN0aW9uIFNvdW5kIGR1cmluZyBrZXJuZWwgY29uZmlndXJhdGlvbi4KLQlGb2xsb3cgdGhlIHVzdWFsIGtlcm5lbCBwcm9jZWR1cmVzIGZvciByZWJ1aWxkaW5nIHRoZSBrZXJuZWwsCi0Jb3IgYnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgZHJpdmVyIG1vZHVsZXMuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gIAlUbyBtYWtlIHRoaXMgZHJpdmVyIHRoZSBkZWZhdWx0IGF1ZGlvIGRyaXZlciwgeW91IGNhbiBhZGQgdGhlCi0JZm9sbG93aW5nIHRvIHlvdXIgL2V0Yy9jb25mLm1vZHVsZXMgZmlsZToKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0JYWxpYXMgc291bmQgdmlhODJjeHh4X2F1ZGlvCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAJTm90ZSB0aGF0IHNvdW5kY29yZSBhbmQgYWM5N19jb2RlYyBzdXBwb3J0IG1vZHVsZXMKLQlhcmUgYWxzbyByZXF1aXJlZCBmb3Igd29ya2luZyBhdWRpbywgaW4gYWRkaXRpb24gdG8KLQl0aGUgdmlhODJjeHh4X2F1ZGlvIG1vZHVsZSBpdHNlbGYuCi0gIDwvcGFyYT4KLSAgPC9jaGFwdGVyPgotICAKLSAgPGNoYXB0ZXIgaWQ9InJlcG9ydGJ1ZyI+Ci0gICAgICA8dGl0bGU+U3VibWl0dGluZyBhIGJ1ZyByZXBvcnQ8L3RpdGxlPgotICA8c2VjdDEgaWQ9ImJ1Z3JlcGRlc2MiPjx0aXRsZT5EZXNjcmlwdGlvbiBvZiBwcm9ibGVtPC90aXRsZT4KLSAgPHBhcmE+Ci0JRGVzY3JpYmUgdGhlIGFwcGxpY2F0aW9uIHlvdSB3ZXJlIHVzaW5nIHRvIHBsYXkvcmVjb3JkIHNvdW5kLCBhbmQgaG93Ci0JdG8gcmVwcm9kdWNlIHRoZSBwcm9ibGVtLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0iYnVncmVwZGlhZyI+PHRpdGxlPkRpYWdub3N0aWMgb3V0cHV0PC90aXRsZT4KLSAgPHBhcmE+Ci0JT2J0YWluIHRoZSB2aWEtYXVkaW8tZGlhZyBkaWFnbm9zdGljcyBwcm9ncmFtIGZyb20KLQlodHRwOi8vc2YubmV0L3Byb2plY3RzL2drZXJuZWwvIGFuZCBwcm92aWRlIGEgZHVtcCBvZiB0aGUKLQlhdWRpbyBjaGlwJ3MgcmVnaXN0ZXJzIHdoaWxlIHRoZSBwcm9ibGVtIGlzIG9jY3VycmluZy4gIFNhbXBsZSBjb21tYW5kIGxpbmU6Ci0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCS4vdmlhLWF1ZGlvLWRpYWcgLWFwcyA+IGRpYWctb3V0cHV0LnR4dAotICA8L3Byb2dyYW1saXN0aW5nPgotICA8L3NlY3QxPgotICA8c2VjdDEgaWQ9ImJ1Z3JlcGRlYnVnIj48dGl0bGU+RHJpdmVyIGRlYnVnIG91dHB1dDwvdGl0bGU+Ci0gIDxwYXJhPgotCURlZmluZSA8Y29uc3RhbnQ+VklBX0RFQlVHPC9jb25zdGFudD4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZHJpdmVyLCB0aGVuIGNhcHR1cmUgYW5kIGVtYWlsCi0JdGhlIGtlcm5lbCBsb2cgb3V0cHV0LiAgVGhpcyBjYW4gYmUgdmlld2VkIGluIHRoZSBzeXN0ZW0ga2VybmVsIGxvZyAoaWYKLQllbmFibGVkKSwgb3IgdmlhIHRoZSBkbWVzZyBwcm9ncmFtLiAgU2FtcGxlIGNvbW1hbmQgbGluZToKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0JZG1lc2cgPiAvdG1wL2RtZXNnLW91dHB1dC50eHQKLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPC9zZWN0MT4KLSAgPHNlY3QxIGlkPSJidWdyZXBwcmludGsiPjx0aXRsZT5CaWdnZXIga2VybmVsIG1lc3NhZ2UgYnVmZmVyPC90aXRsZT4KLSAgPHBhcmE+Ci0JSWYgeW91IHdpc2ggdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBkaXNwbGF5ZWQgYnkgZG1lc2csIHRoZW4KLQljaGFuZ2UgdGhlIDxjb25zdGFudD5MT0dfQlVGX0xFTjwvY29uc3RhbnQ+IG1hY3JvIGF0IHRoZSB0b3Agb2YgbGludXgva2VybmVsL3ByaW50ay5jLCByZWNvbXBpbGUKLQl5b3VyIGtlcm5lbCwgYW5kIHBhc3MgdGhlIDxjb25zdGFudD5MT0dfQlVGX0xFTjwvY29uc3RhbnQ+IHZhbHVlIHRvIGRtZXNnLiAgU2FtcGxlIGNvbW1hbmQgbGluZSB3aXRoCi0JPGNvbnN0YW50PkxPR19CVUZfTEVOPC9jb25zdGFudD4gPT0gMzI3Njg6Ci0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCWRtZXNnIC1zIDMyNzY4ID4gL3RtcC9kbWVzZy1vdXRwdXQudHh0Ci0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDwvc2VjdDE+Ci0gIDwvY2hhcHRlcj4KLSAgCi0gIDxjaGFwdGVyIGlkPSJidWdzIj4KLSAgICAgPHRpdGxlPktub3duIEJ1Z3MgQW5kIEFzc3VtcHRpb25zPC90aXRsZT4KLSAgPHBhcmE+Ci0gIDx2YXJpYWJsZWxpc3Q+Ci0gICAgPHZhcmxpc3RlbnRyeT48dGVybT5Mb3cgdm9sdW1lPC90ZXJtPgotICAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLQlWb2x1bWUgdG9vIGxvdyBvbiBtYW55IHN5c3RlbXMuICBXb3JrYXJvdW5kOiAgdXNlIG1peGVyIHByb2dyYW0KLQlzdWNoIGFzIHhtaXhlciB0byBpbmNyZWFzZSB2b2x1bWUuCi0gICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci0KLSAgPC92YXJpYWJsZWxpc3Q+Ci0JCi0gIDwvcGFyYT4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJ0aGFua3MiPgotICAgICAgPHRpdGxlPlRoYW5rczwvdGl0bGU+Ci0gIDxwYXJhPgotCVZpYSBmb3IgcHJvdmlkaW5nIGUtbWFpbCBzdXBwb3J0LCBzcGVjcywgYW5kIE5EQSdkIHNvdXJjZSBjb2RlLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotCU1hbmRyYWtlU29mdCBmb3IgcHJvdmlkaW5nIGhhY2tpbmcgdGltZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLQlBQzk3IG1peGVyIGludGVyZmFjZSBmaXhlcyBhbmQgZGVidWdnaW5nIGJ5IFJvbiBDZW1lciA8ZW1haWw+cm9uY2VtZXJAZ3RlLm5ldDwvZW1haWw+LgotICA8L3BhcmE+Ci0gIDxwYXJhPgotCVJ1aSBTb3VzYSA8ZW1haWw+cnVpLnNvdXNhQGNvbmV4YW50LmNvbTwvZW1haWw+LCBmb3IgYnVnZml4aW5nCi0JTU1BUCBzdXBwb3J0LCBhbmQgc2V2ZXJhbCBvdGhlciBub3RhYmxlIGZpeGVzIHRoYXQgcmVzdWx0ZWQgZnJvbQotCWhpcyBoYXJkIHdvcmsgYW5kIHRlc3RpbmcuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0JQWRyaWFuIENveCA8ZW1haWw+YWRyaWFuQGh1bWJvbGR0LmNvLnVrPC9lbWFpbD4sIGZvciBidWdmaXhpbmcKLQlNTUFQIHN1cHBvcnQsIGFuZCBzZXZlcmFsIG90aGVyIG5vdGFibGUgZml4ZXMgdGhhdCByZXN1bHRlZCBmcm9tCi0JaGlzIGhhcmQgd29yayBhbmQgdGVzdGluZy4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgCVRob21hcyBTYWlsZXIgZm9yIGZ1cnRoZXIgYnVnZml4ZXMuCi0gIDwvcGFyYT4KLSAgPC9jaGFwdGVyPgotICAKLSAgPGNoYXB0ZXIgaWQ9Im5vdGVzIj4KLSAgICAgPHRpdGxlPlJhbmRvbSBOb3RlczwvdGl0bGU+Ci0gIDxwYXJhPgotCVR3byAvcHJvYyBwc2V1ZG8tZmlsZXMgcHJvdmlkZSBkaWFnbm9zdGljIGluZm9ybWF0aW9uLiAgVGhpcyBpcyBnZW5lcmFsbHkKLQlub3QgdXNlZnVsIHRvIG1vc3QgdXNlcnMuICBQb3dlciB1c2VycyBjYW4gZGlzYWJsZSBDT05GSUdfU09VTkRfVklBODJDWFhYX1BST0NGUywKLQlhbmQgcmVtb3ZlIHRoZSAvcHJvYyBzdXBwb3J0IGNvZGUuICBPbmNlCi0JdmVyc2lvbiAyLjAuMCBpcyByZWxlYXNlZCwgdGhlIC9wcm9jIHN1cHBvcnQgY29kZSB3aWxsIGJlIGRpc2FibGVkIGJ5Ci0JZGVmYXVsdC4gIEF2YWlsYWJsZSAvcHJvYyBwc2V1ZG8tZmlsZXM6Ci0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCS9wcm9jL2RyaXZlci92aWEvMC9pbmZvCi0JL3Byb2MvZHJpdmVyL3ZpYS8wL2FjOTcKLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0JVGhpcyBkcml2ZXIgYnkgZGVmYXVsdCBzdXBwb3J0cyBhbGwgUENJIGF1ZGlvIGRldmljZXMgd2hpY2ggcmVwb3J0Ci0JYSB2ZW5kb3IgaWQgb2YgMHgxMTA2LCBhbmQgYSBkZXZpY2UgaWQgb2YgMHgzMDU4LiAgU3Vic3lzdGVtIHZlbmRvcgotCWFuZCBkZXZpY2UgaWRzIGFyZSBub3QgZXhhbWluZWQuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0JR05VIGluZGVudCBmb3JtYXR0aW5nIG9wdGlvbnM6Ci0gIDxwcm9ncmFtbGlzdGluZz4KLS1rciAtaTggLXRzOCAtYnIgLWNlIC1iYXAgLXNvYiAtbDgwIC1wY3MgLWNzIC1zcyAtYnMgLWRpMSAtbmJjIC1scCAtcHNsCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0JVmlhIGhhcyBncmFjaW91c2x5IGRvbmF0ZWQgZS1tYWlsIHN1cHBvcnQgYW5kIHNvdXJjZSBjb2RlIHRvIGhlbHAgZnVydGhlcgotCXRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGRyaXZlci4gIFRoZWlyIGFzc2lzdGFuY2UgaGFzIGJlZW4gaW52YWx1YWJsZQotCWluIHRoZSBkZXNpZ24gYW5kIGNvZGluZyBvZiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotCVRoZSBWaWEgYXVkaW8gY2hpcCBhcHBhcmVudGx5IHByb3ZpZGVzIGEgc2Vjb25kIFBDTSBzY2F0dGVyLWdhdGhlcgotCURNQSBjaGFubmVsIGp1c3QgZm9yIEZNIGRhdGEsIGJ1dCBkb2VzIG5vdCBoYXZlIGEgZnVsbCBoYXJkd2FyZSBNSURJCi0JcHJvY2Vzc29yLiAgSSBoYXZlbid0IHB1dCBtdWNoIHRob3VnaHQgdG93YXJkcyBhIHNvbHV0aW9uIGhlcmUsIGJ1dCBpdAotCW1pZ2h0IGludm9sdmUgdXNpbmcgU29mdE9TUyBtaWRpIHdhdmUgdGFibGUsIG9yIHNpbXBseSBkaXNhYmxpbmcgTUlESQotCXN1cHBvcnQgYWx0b2dldGhlciBhbmQgdXNpbmcgdGhlIEZNIFBDTSBjaGFubmVsIGFzIGEgc2Vjb25kIChpbnB1dD8gb3V0cHV0PykKLSAgPC9wYXJhPgotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXIgaWQ9ImNoYW5nZWxvZyI+Ci0gICAgICA8dGl0bGU+RHJpdmVyIENoYW5nZUxvZzwvdGl0bGU+Ci0KLTxzZWN0MSBpZD0idmVyc2lvbjE5MSI+PHRpdGxlPgotVmVyc2lvbiAxLjkuMQotPC90aXRsZT4KLSAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBEU1AgcmVhZC93cml0ZSBidWdmaXhlcyBmcm9tIFRob21hcyBTYWlsZXIuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIEFkZCBuZXcgUENJIGlkIGZvciBzaW5nbGUtY2hhbm5lbCB1c2Ugb2YgVmlhIDgyMzMuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIE90aGVyIGJ1ZyBmaXhlcywgdHdlYWtzLCBuZXcgaW9jdGxzLgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3NlY3QxPgotCi08c2VjdDEgaWQ9InZlcnNpb24xMTE1Ij48dGl0bGU+Ci1WZXJzaW9uIDEuMS4xNQotPC90aXRsZT4KLSAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBTdXBwb3J0IGZvciB2YXJpYWJsZSBmcmFnbWVudCBzaXplIGFuZCB2YXJpYWJsZSBmcmFnbWVudCBudW1iZXIgKFJ1aQotICAgIFNvdXNhKQotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBGaXhlcyBmb3IgdGhlIFNQRUVELCBTVEVSRU8sIENIQU5ORUxTLCBGTVQgaW9jdGxzIHdoZW4gaW4gcmVhZCAmYW1wOwotICAgIHdyaXRlIG1vZGUgKFJ1aSBTb3VzYSkKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgTW1hcGVkIHNvdW5kIGlzIG5vdyBmdWxseSBmdW5jdGlvbmFsLiAoUnVpIFNvdXNhKQotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBNYWtlIHN1cmUgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYmVmb3JlIHJlYWRpbmcgYW55IG9mIGl0cyBQQ0kKLSAgICBjb25maWcgaW5mb3JtYXRpb24uIChmaXhlcyBwb3RlbnRpYWwgaG90cGx1ZyBwcm9ibGVtcykKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgQ2xlYW4gdXAgY29kZSBhIGJpdCBhbmQgYWRkIG1vcmUgaW50ZXJuYWwgZnVuY3Rpb24gZG9jdW1lbnRhdGlvbi4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgQUM5NyBjb2RlYyBhY2Nlc3MgZml4ZXMgKEFkcmlhbiBDb3gpCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIEJpZyBlbmRpYW4gZml4ZXMgKEFkcmlhbiBDb3gpCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIE1JREkgc3VwcG9ydCAoQWRyaWFuIENveCkKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgRGV0ZWN0IGFuZCByZXBvcnQgbG9ja2VkLXJhdGUgQUM5NyBjb2RlY3MuICBJZiB5b3VyIGhhcmR3YXJlIG9ubHkKLSAgICBzdXBwb3J0cyA0OEtoeiAobG9ja2VkIHJhdGUpLCB0aGVuIHlvdXIgcmVjb3JkaW5nL3BsYXliYWNrIHNvZnR3YXJlCi0gICAgbXVzdCB1cHNhbXBsZSBvciBkb3duc2FtcGxlIGFjY29yZGluZ2x5LiAgVGhlIGhhcmR3YXJlIGNhbm5vdCBkbyBpdC4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgVXNlIG5ldyBwY2lfcmVxdWVzdF9yZWdpb25zIGFuZCBwY2lfZGlzYWJsZV9kZXZpY2UgZnVuY3Rpb25zIGluCi0gICAga2VybmVsIDIuNC42LgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3NlY3QxPgotCi08c2VjdDEgaWQ9InZlcnNpb24xMTE0Ij48dGl0bGU+Ci1WZXJzaW9uIDEuMS4xNAotPC90aXRsZT4KLSAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBVc2UgVk1fUkVTRVJWRSB3aGVuIGF2YWlsYWJsZSwgdG8gZWxpbWluYXRlIHVubmVjZXNzYXJ5IHBhZ2UgZmF1bHRzLgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0gIDwvaXRlbWl6ZWRsaXN0PgotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJ2ZXJzaW9uMTExMiI+PHRpdGxlPgotVmVyc2lvbiAxLjEuMTIKLTwvdGl0bGU+Ci0gIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+Ci0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgbW1hcCBidWcgZml4ZXMgZnJvbSBMaW51cy4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICA8L2l0ZW1pemVkbGlzdD4KLTwvc2VjdDE+Ci0KLTxzZWN0MSBpZD0idmVyc2lvbjExMTEiPjx0aXRsZT4KLVZlcnNpb24gMS4xLjExCi08L3RpdGxlPgotICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIE1hbnkgbW9yZSBidWcgZml4ZXMuICBtbWFwIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IG1heSBzdGlsbCBiZSBidWdneS4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgVXNlcyBuZXcgYW5kIHNwaWZmeSBtZXRob2Qgb2YgbW1hcCdpbmcgdGhlIERNQSBidWZmZXIsIGJhc2VkCi0gICAgb24gYSBzdWdnZXN0aW9uIGZyb20gTGludXMuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3NlY3QxPgotCi08c2VjdDEgaWQ9InZlcnNpb24xMTEwIj48dGl0bGU+Ci1WZXJzaW9uIDEuMS4xMAotPC90aXRsZT4KLSAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBNYW55IGJ1ZyBmaXhlcy4gIG1tYXAgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgbWF5IHN0aWxsIGJlIGJ1Z2d5LgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0gIDwvaXRlbWl6ZWRsaXN0PgotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJ2ZXJzaW9uMTE5Ij48dGl0bGU+Ci1WZXJzaW9uIDEuMS45Ci08L3RpdGxlPgotICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIFJlZGVzaWduIGFuZCByZXdyaXRlIGF1ZGlvIHBsYXliYWNrIGltcGxlbWVudGF0aW9uLiAgKGZhc3RlciBhbmQgc21hbGxlciwgaG9wZWZ1bGx5KQotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBJbXBsZW1lbnQgcmVjb3JkaW5nIGFuZCBmdWxsIGR1cGxleCAoRFNQX0NBUF9EVVBMRVgpIHN1cHBvcnQuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIE1ha2UgcHJvY2ZzIHN1cHBvcnQgb3B0aW9uYWwuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIFF1aWNrIGludGVycnVwdCBzdGF0dXMgY2hlY2ssIHRvIGxlc3NlbiBvdmVyaGVhZCBpbiBpbnRlcnJ1cHQKLSAgICBzaGFyaW5nIHNpdHVhdGlvbnMuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIEFkZCBtbWFwKDIpIHN1cHBvcnQuICBEaXNhYmxlZCBmb3Igbm93LCBpdCBpcyBzdGlsbCBidWdneSBhbmQgZXhwZXJpbWVudGFsLgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBTdXJyb3VuZCBhbGwgc3lzY2FsbHMgd2l0aCBhIHNlbWFwaG9yZSBmb3IgY2hlYXAgYW5kIGVhc3kgU01QIHByb3RlY3Rpb24uCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIEZpeCBidWcgaW4gY2hhbm5lbCBzaHV0ZG93biAoaGFyZHdhcmUgY2hhbm5lbCByZXNldCkgY29kZS4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgUmVtb3ZlIHVubmVjZXNzYXJ5IHNwaW5sb2NrcyAoYmV0dGVyIHBlcmZvcm1hbmNlKS4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgRWxpbWluYXRlICJ1bmtub3duIEFGTVQiIG1lc3NhZ2UgYnkgdXNpbmcgYSBkaWZmZXJlbnQgbWV0aG9kCi0gICAgb2Ygc2VsZWN0aW5nIHRoZSBiZXN0IEFGTVRfeHh4IHNvdW5kIHNhbXBsZSBmb3JtYXQgZm9yIHVzZS4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgU3VwcG9ydCBmb3IgcmVhbHRpbWUgaGFyZHdhcmUgcG9pbnRlciBwb3NpdGlvbiByZXBvcnRpbmcKLSAgICAoRFNQX0NBUF9SRUFMVElNRSwgU05EQ1RMX0RTUF9HRVR4UFRSIGlvY3RscykKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgU3VwcG9ydCBmb3IgY2FwdHVyZS9wbGF5YmFjayB0cmlnZ2VyaW5nCi0gICAgKERTUF9DQVBfVFJJR0dFUiwgU05EQ1RMX0RTUF9TRVRUUklHR0VSIGlvY3RscykKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgU05EQ1RMX0RTUF9TRVREVVBMRVggYW5kIFNORENUTF9EU1BfUE9TVCBpb2N0bHMgbm93IGhhbmRsZWQuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIFJld3JpdGUgb3BlbigyKSBhbmQgY2xvc2UoMikgbG9naWMgdG8gYWxsb3cgb25seSBvbmUgdXNlciBhdAotICAgIGEgdGltZS4gIEFsbCBvdGhlciBvcGVuKDIpIGF0dGVtcHRzIHdpbGwgc2xlZXAgdW50aWwgdGhleSBzdWNjZWVkLgotICAgIEZJWE1FOiBvcGVuKE9fUkRPTkxZKSBhbmQgb3BlbihPX1dST05MWSkgc2hvdWxkIGJlIGFsbG93ZWQgdG8gc3VjY2VlZC4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgUmV2aWV3ZWQgY29kZSB0byBlbnN1cmUgdGhhdCBTTVAgYW5kIG11bHRpcGxlIGF1ZGlvIGRldmljZXMKLSAgICBhcmUgZnVsbHkgc3VwcG9ydGVkLgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3NlY3QxPgotCi08c2VjdDEgaWQ9InZlcnNpb24xMTgiPjx0aXRsZT4KLVZlcnNpb24gMS4xLjgKLTwvdGl0bGU+Ci0gIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+Ci0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgCUNsZWFuIHVwIGludGVycnVwdCBoYW5kbGVyIG91dHB1dC4gIEZpeGVzIHRoZSBmb2xsb3dpbmcga2VybmVsIGVycm9yIG1lc3NhZ2U6Ci0gICAgPC9wYXJhPgotICAJPHByb2dyYW1saXN0aW5nPgotCXVuaGFuZGxlZCBpbnRlcnJ1cHQgLi4uCi0gIAk8L3Byb2dyYW1saXN0aW5nPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIAlDb252ZXJ0IGRvY3VtZW50YXRpb24gdG8gRG9jQm9vaywgc28gdGhhdCBQREYsIEhUTUwgYW5kIFBvc3RTY3JpcHQgKC5wcykgb3V0cHV0IGlzIHJlYWRpbHkKLQlhdmFpbGFibGUuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICA8L2l0ZW1pemVkbGlzdD4KLTwvc2VjdDE+Ci0KLTxzZWN0MSBpZD0idmVyc2lvbjExNyI+PHRpdGxlPgotVmVyc2lvbiAxLjEuNwotPC90aXRsZT4KLSAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSBGaXggbW9kdWxlIHVubG9hZCBidWcgd2hlcmUgbWl4ZXIgZGV2aWNlIGxlZnQgcmVnaXN0ZXJlZAotICBhZnRlciBkcml2ZXIgZXhpdAotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0gIDwvaXRlbWl6ZWRsaXN0PgotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJ2ZXJzaW9uMTE2Ij48dGl0bGU+Ci1WZXJzaW9uIDEuMS42Ci08L3RpdGxlPgotICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotIFJld3JpdGUgdmlhX3NldF9yYXRlIHRvIG1pbWljIEFMU0EgYmFzaWMgQUM5NyByYXRlIHNldHRpbmcKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotIFJlbW92ZSBtdWNoIGRlYWQgY29kZQotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gQ29tcGxldGUgc3Bpbl9sb2NrX2lycXNhdmUgLT4gc3Bpbl9sb2NrX2lycSBjb252ZXJzaW9uIGluIHZpYV9kc3BfaW9jdGwKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotIEZpeCBidWlsZCBwcm9ibGVtIGluIHZpYV9kc3BfaW9jdGwKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotIE9wdGltaXplIGluY2x1ZGVkIGhlYWRlcnMgdG8gZWxpbWluYXRlIGhlYWRlcnMgZm91bmQgaW4gbGludXgvc291bmQKLQk8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICA8L2l0ZW1pemVkbGlzdD4KLTwvc2VjdDE+Ci0KLTxzZWN0MSBpZD0idmVyc2lvbjExNSI+PHRpdGxlPgotVmVyc2lvbiAxLjEuNQotPC90aXRsZT4KLSAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSBEaXNhYmxlIHNvbWUgb3Zlcmx5LXZlcmJvc2UgZGVidWdnaW5nIGNvZGUKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotIFJlbW92ZSB1bm5lY2Vzc2FyeSBzb3VuZCBsb2NrcwotICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSBGaXggc29tZSBpb2N0bHMgZm9yIGJldHRlciB0aW1lIHJlc29sdXRpb24KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotIEJlZ2luIHNwaW5fbG9ja19pcnFzYXZlIC0+IHNwaW5fbG9ja19pcnEgY29udmVyc2lvbiBpbiB2aWFfZHNwX2lvY3RsCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3NlY3QxPgotCi08c2VjdDEgaWQ9InZlcnNpb24xMTQiPjx0aXRsZT4KLVZlcnNpb24gMS4xLjQKLTwvdGl0bGU+Ci0gIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+Ci0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gQ29tcGxldGVkIHJld3JpdGUgb2YgZHJpdmVyLiAgRWxpbWluYXRlZCBTb3VuZEJsYXN0ZXIgY29tcGF0aWJpbGl0eQotICBjb21wbGV0ZWx5LCBhbmQgbm93IHVzZXMgdGhlIG11Y2gtZmFzdGVyIHNjYXR0ZXItZ2F0aGVyIERNQSBlbmdpbmUuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3NlY3QxPgotCi0gIDwvY2hhcHRlcj4KLSAgCi0gIDxjaGFwdGVyIGlkPSJpbnRmdW5jdGlvbnMiPgotICAgICA8dGl0bGU+SW50ZXJuYWwgRnVuY3Rpb25zPC90aXRsZT4KLSFJc291bmQvb3NzL3ZpYTgyY3h4eF9hdWRpby5jCi0gIDwvY2hhcHRlcj4KLQotPC9ib29rPgotCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL1JURlAudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKaW5kZXggMTIyNTBiMy4uOWM2ZDQ1MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKQEAgLTEwOCw4ICsxMDgsOSBAQAogMjAwNCBoYXMgc2VlbiBhIExpbnV4LUpvdXJuYWwgYXJ0aWNsZSBvbiB1c2Ugb2YgUkNVIGluIGRjYWNoZQogW01jS2VubmV5MDRhXSwgYSBwZXJmb3JtYW5jZSBjb21wYXJpc29uIG9mIGxvY2tpbmcgdG8gUkNVIG9uIHNldmVyYWwKIGRpZmZlcmVudCBDUFVzIFtNY0tlbm5leTA0Yl0sIGEgZGlzc2VydGF0aW9uIGRlc2NyaWJpbmcgdXNlIG9mIFJDVSBpbiBhCi1udW1iZXIgb2Ygb3BlcmF0aW5nLXN5c3RlbSBrZXJuZWxzIFtQYXVsRWR3YXJkTWNLZW5uZXlQaERdLCBhbmQgYSBwYXBlcgotZGVzY3JpYmluZyBob3cgdG8gbWFrZSBSQ1Ugc2FmZSBmb3Igc29mdC1yZWFsdGltZSBhcHBsaWNhdGlvbnMgW1Nhcm1hMDRjXS4KK251bWJlciBvZiBvcGVyYXRpbmctc3lzdGVtIGtlcm5lbHMgW1BhdWxFZHdhcmRNY0tlbm5leVBoRF0sIGEgcGFwZXIKK2Rlc2NyaWJpbmcgaG93IHRvIG1ha2UgUkNVIHNhZmUgZm9yIHNvZnQtcmVhbHRpbWUgYXBwbGljYXRpb25zIFtTYXJtYTA0Y10sCithbmQgYSBwYXBlciBkZXNjcmliaW5nIFNFTGludXggcGVyZm9ybWFuY2Ugd2l0aCBSQ1UgW0phbWVzTW9ycmlzMDRiXS4KIAogCiBCaWJ0ZXggRW50cmllcwpAQCAtMzQxLDYgKzM0MiwxNyBAQAogLHBhZ2VzPSIxOC0yNiIKIH0KIAorQHRlY2hyZXBvcnR7RnJpZWRiZXJnMDNhCissYXV0aG9yPSJTdHVhcnQgQS4gRnJpZWRiZXJnIgorLHRpdGxlPSJMb2NrLUZyZWUgV2lsZCBDYXJkIFNlYXJjaCBEYXRhIFN0cnVjdHVyZSBhbmQgTWV0aG9kIgorLGluc3RpdHV0aW9uPSJVUyBQYXRlbnQgYW5kIFRyYWRlbWFyayBPZmZpY2UiCissYWRkcmVzcz0iV2FzaGluZ3RvbiwgREMiCisseWVhcj0iMjAwMyIKKyxudW1iZXI9IlVTIFBhdGVudCA2LDY2MiwxODQgKGNvbnRyaWJ1dGVkIHVuZGVyIEdQTCkiCissbW9udGg9IkRlY2VtYmVyIgorLHBhZ2VzPSIxMTIiCit9CisKIEBhcnRpY2xle01jS2VubmV5MDRhCiAsYXV0aG9yPSJQYXVsIEUuIE1jS2VubmV5IGFuZCBEaXBhbmthciBTYXJtYSBhbmQgTWFuZWVzaCBTb25pIgogLHRpdGxlPSJTY2FsaW5nIGRjYWNoZSB3aXRoIHtSQ1V9IgpAQCAtMzczLDYgKzM4NSw5IEBACiAsc2Nob29sPSJPR0kgU2Nob29sIG9mIFNjaWVuY2UgYW5kIEVuZ2luZWVyaW5nIGF0CiBPcmVnb24gSGVhbHRoIGFuZCBTY2llbmNlcyBVbml2ZXJzaXR5IgogLHllYXI9IjIwMDQiCissbm90ZT0iQXZhaWxhYmxlOgorXHVybHtodHRwOi8vd3d3LnJkcm9wLmNvbS91c2Vycy9wYXVsbWNrL1JDVS9SQ1VkaXNzZXJ0YXRpb24uMjAwNC4wNy4xNGUxLnBkZn0KK1tWaWV3ZWQgT2N0b2JlciAxNSwgMjAwNF0iCiB9CiAKIEBDb25mZXJlbmNle1Nhcm1hMDRjCkBAIC0zODUsMyArNDAwLDEzIEBACiAsbW9udGg9Ikp1bmUiCiAscGFnZXM9IjE4Mi0xOTEiCiB9CisKK0B1bnB1Ymxpc2hlZHtKYW1lc01vcnJpczA0YgorLEF1dGhvcj0iSmFtZXMgTW9ycmlzIgorLFRpdGxlPSJSZWNlbnQgRGV2ZWxvcG1lbnRzIGluIHtTRUxpbnV4fSBLZXJuZWwgUGVyZm9ybWFuY2UiCissbW9udGg9IkRlY2VtYmVyIgorLHllYXI9IjIwMDQiCissbm90ZT0iQXZhaWxhYmxlOgorXHVybHtodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS91c2Vycy9qYW1lc19tb3JyaXMvMjE1My5odG1sfQorW1ZpZXdlZCBEZWNlbWJlciAxMCwgMjAwNF0iCit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9VUC50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9VUC50eHQKaW5kZXggNTUxYTgwMy4uM2JmYjg0YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvVVAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL1VQLnR4dApAQCAtMiwxMSArMiwxMSBAQAogCiAKIEEgY29tbW9uIG1pc2NvbmNlcHRpb24gaXMgdGhhdCwgb24gVVAgc3lzdGVtcywgdGhlIGNhbGxfcmN1KCkgcHJpbWl0aXZlCi1tYXkgaW1tZWRpYXRlbHkgaW52b2tlIGl0cyBmdW5jdGlvbiwgYW5kIHRoYXQgdGhlIHN5bmNocm9uaXplX2tlcm5lbAorbWF5IGltbWVkaWF0ZWx5IGludm9rZSBpdHMgZnVuY3Rpb24sIGFuZCB0aGF0IHRoZSBzeW5jaHJvbml6ZV9yY3UoKQogcHJpbWl0aXZlIG1heSByZXR1cm4gaW1tZWRpYXRlbHkuICBUaGUgYmFzaXMgb2YgdGhpcyBtaXNjb25jZXB0aW9uCiBpcyB0aGF0IHNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIENQVSwgaXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgdG8KIHdhaXQgZm9yIGFueXRoaW5nIGVsc2UgdG8gZ2V0IGRvbmUsIHNpbmNlIHRoZXJlIGFyZSBubyBvdGhlciBDUFVzIGZvcgotYW55dGhpbmcgZWxzZSB0byBiZSBoYXBwZW5pbmcgb24uICBBbHRob3VnaCB0aGlzIGFwcHJvYWNoIHdpbGwgc29ydCBvZgorYW55dGhpbmcgZWxzZSB0byBiZSBoYXBwZW5pbmcgb24uICBBbHRob3VnaCB0aGlzIGFwcHJvYWNoIHdpbGwgLXNvcnQtIC1vZi0KIHdvcmsgYSBzdXJwcmlzaW5nIGFtb3VudCBvZiB0aGUgdGltZSwgaXQgaXMgYSB2ZXJ5IGJhZCBpZGVhIGluIGdlbmVyYWwuCiBUaGlzIGRvY3VtZW50IHByZXNlbnRzIHR3byBleGFtcGxlcyB0aGF0IGRlbW9uc3RyYXRlIGV4YWN0bHkgaG93IGJhZCBhbgogaWRlYSB0aGlzIGlzLgpAQCAtNDQsMTQgKzQ0LDE0IEBACiB1bmRlcmx5aW5nIFJDVSwgbmFtZWx5IHRoYXQgY2FsbF9yY3UoKSBkZWZlcnMgaW52b2tpbmcgaXRzIGFyZ3VtZW50cyB1bnRpbAogYWxsIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgY3VycmVudGx5IGV4ZWN1dGluZyBoYXZlIGNvbXBsZXRlZC4KIAotUXVpY2sgUXVpejogd2h5IGlzIGl0IC1ub3QtIGxlZ2FsIHRvIGludm9rZSBzeW5jaHJvbml6ZV9rZXJuZWwoKSBpbgorUXVpY2sgUXVpejogd2h5IGlzIGl0IC1ub3QtIGxlZ2FsIHRvIGludm9rZSBzeW5jaHJvbml6ZV9yY3UoKSBpbgogdGhpcyBjYXNlPwogCiAKIFN1bW1hcnkKIAogUGVybWl0dGluZyBjYWxsX3JjdSgpIHRvIGltbWVkaWF0ZWx5IGludm9rZSBpdHMgYXJndW1lbnRzIG9yIHBlcm1pdHRpbmcKLXN5bmNocm9uaXplX2tlcm5lbCgpIHRvIGltbWVkaWF0ZWx5IHJldHVybiBicmVha3MgUkNVLCBldmVuIG9uIGEgVVAgc3lzdGVtLgorc3luY2hyb25pemVfcmN1KCkgdG8gaW1tZWRpYXRlbHkgcmV0dXJuIGJyZWFrcyBSQ1UsIGV2ZW4gb24gYSBVUCBzeXN0ZW0uCiBTbyBkbyBub3QgZG8gaXQhICBFdmVuIG9uIGEgVVAgc3lzdGVtLCB0aGUgUkNVIGluZnJhc3RydWN0dXJlIC1tdXN0LQogcmVzcGVjdCBncmFjZSBwZXJpb2RzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dAppbmRleCBiM2E1NjhhLi44ZjNmYjc3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQKQEAgLTMyLDcgKzMyLDEwIEBACiAJdGhlbSAtLSBldmVuIHg4NiBhbGxvd3MgcmVhZHMgdG8gYmUgcmVvcmRlcmVkKSwgYW5kIGJlIHByZXBhcmVkCiAJdG8gZXhwbGFpbiB3aHkgdGhpcyBhZGRlZCBjb21wbGV4aXR5IGlzIHdvcnRod2hpbGUuICBJZiB5b3UKIAljaG9vc2UgI2MsIGJlIHByZXBhcmVkIHRvIGV4cGxhaW4gaG93IHRoaXMgc2luZ2xlIHRhc2sgZG9lcyBub3QKLQliZWNvbWUgYSBtYWpvciBib3R0bGVuZWNrIG9uIGJpZyBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcy4KKwliZWNvbWUgYSBtYWpvciBib3R0bGVuZWNrIG9uIGJpZyBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcyAoZm9yCisJZXhhbXBsZSwgaWYgdGhlIHRhc2sgaXMgdXBkYXRpbmcgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gaXRzZWxmCisJdGhhdCBvdGhlciB0YXNrcyBjYW4gcmVhZCwgdGhlcmUgYnkgZGVmaW5pdGlvbiBjYW4gYmUgbm8KKwlib3R0bGVuZWNrKS4KIAogMi4JRG8gdGhlIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgbWFrZSBwcm9wZXIgdXNlIG9mCiAJcmN1X3JlYWRfbG9jaygpIGFuZCBmcmllbmRzPyAgVGhlc2UgcHJpbWl0aXZlcyBhcmUgbmVlZGVkCkBAIC04OSwyNyArOTIsMzQgQEAKIAkJIl9yY3UoKSIgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlcywgc3VjaCBhcyB0aGUKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKS4KIAotCWIuCUlmIHRoZSBsaXN0IG1hY3JvcyBhcmUgYmVpbmcgdXNlZCwgdGhlIGxpc3RfZGVsX3JjdSgpLAotCQlsaXN0X2FkZF90YWlsX3JjdSgpLCBhbmQgbGlzdF9kZWxfcmN1KCkgcHJpbWl0aXZlcyBtdXN0Ci0JCWJlIHVzZWQgaW4gb3JkZXIgdG8gcHJldmVudCB3ZWFrbHkgb3JkZXJlZCBtYWNoaW5lcyBmcm9tCi0JCW1pc29yZGVyaW5nIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBhbmQgcG9pbnRlciBwbGFudGluZy4KKwliLglJZiB0aGUgbGlzdCBtYWNyb3MgYXJlIGJlaW5nIHVzZWQsIHRoZSBsaXN0X2FkZF90YWlsX3JjdSgpCisJCWFuZCBsaXN0X2FkZF9yY3UoKSBwcmltaXRpdmVzIG11c3QgYmUgdXNlZCBpbiBvcmRlcgorCQl0byBwcmV2ZW50IHdlYWtseSBvcmRlcmVkIG1hY2hpbmVzIGZyb20gbWlzb3JkZXJpbmcKKwkJc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGFuZCBwb2ludGVyIHBsYW50aW5nLgogCQlTaW1pbGFybHksIGlmIHRoZSBobGlzdCBtYWNyb3MgYXJlIGJlaW5nIHVzZWQsIHRoZQotCQlobGlzdF9kZWxfcmN1KCkgYW5kIGhsaXN0X2FkZF9oZWFkX3JjdSgpIHByaW1pdGl2ZXMKLQkJYXJlIHJlcXVpcmVkLgorCQlobGlzdF9hZGRfaGVhZF9yY3UoKSBwcmltaXRpdmUgaXMgcmVxdWlyZWQuCiAKLQljLglVcGRhdGVzIG11c3QgZW5zdXJlIHRoYXQgaW5pdGlhbGl6YXRpb24gb2YgYSBnaXZlbgorCWMuCUlmIHRoZSBsaXN0IG1hY3JvcyBhcmUgYmVpbmcgdXNlZCwgdGhlIGxpc3RfZGVsX3JjdSgpCisJCXByaW1pdGl2ZSBtdXN0IGJlIHVzZWQgdG8ga2VlcCBsaXN0X2RlbCgpJ3MgcG9pbnRlcgorCQlwb2lzb25pbmcgZnJvbSBpbmZsaWN0aW5nIHRveGljIGVmZmVjdHMgb24gY29uY3VycmVudAorCQlyZWFkZXJzLiAgU2ltaWxhcmx5LCBpZiB0aGUgaGxpc3QgbWFjcm9zIGFyZSBiZWluZyB1c2VkLAorCQl0aGUgaGxpc3RfZGVsX3JjdSgpIHByaW1pdGl2ZSBpcyByZXF1aXJlZC4KKworCQlUaGUgbGlzdF9yZXBsYWNlX3JjdSgpIHByaW1pdGl2ZSBtYXkgYmUgdXNlZCB0bworCQlyZXBsYWNlIGFuIG9sZCBzdHJ1Y3R1cmUgd2l0aCBhIG5ldyBvbmUgaW4gYW4KKwkJUkNVLXByb3RlY3RlZCBsaXN0LgorCisJZC4JVXBkYXRlcyBtdXN0IGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uIG9mIGEgZ2l2ZW4KIAkJc3RydWN0dXJlIGhhcHBlbnMgYmVmb3JlIHBvaW50ZXJzIHRvIHRoYXQgc3RydWN0dXJlIGFyZQogCQlwdWJsaWNpemVkLiAgVXNlIHRoZSByY3VfYXNzaWduX3BvaW50ZXIoKSBwcmltaXRpdmUKIAkJd2hlbiBwdWJsaWNpemluZyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgdGhhdCBjYW4KIAkJYmUgdHJhdmVyc2VkIGJ5IGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KIAotCQlbVGhlIHJjdV9hc3NpZ25fcG9pbnRlcigpIHByaW1pdGl2ZSBpcyBpbiBwcm9jZXNzLl0KLQogNS4JSWYgY2FsbF9yY3UoKSwgb3IgYSByZWxhdGVkIHByaW1pdGl2ZSBzdWNoIGFzIGNhbGxfcmN1X2JoKCksCiAJaXMgdXNlZCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG11c3QgYmUgd3JpdHRlbiB0byBiZSBjYWxsZWQKIAlmcm9tIHNvZnRpcnEgY29udGV4dC4gIEluIHBhcnRpY3VsYXIsIGl0IGNhbm5vdCBibG9jay4KIAotNi4JU2luY2Ugc3luY2hyb25pemVfa2VybmVsKCkgYmxvY2tzLCBpdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20KKzYuCVNpbmNlIHN5bmNocm9uaXplX3JjdSgpIGNhbiBibG9jaywgaXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tCiAJYW55IHNvcnQgb2YgaXJxIGNvbnRleHQuCiAKIDcuCUlmIHRoZSB1cGRhdGVyIHVzZXMgY2FsbF9yY3UoKSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyByZWFkZXJzCkBAIC0xMjUsOSArMTM1LDkgQEAKIAlzdWNoIGNhc2VzIGlzIGEgbXVzdCwgb2YgY291cnNlISAgQW5kIHRoZSBqdXJ5IGlzIHN0aWxsIG91dCBvbgogCXdoZXRoZXIgdGhlIGluY3JlYXNlZCBzcGVlZCBpcyB3b3J0aCBpdC4KIAotOC4JQWx0aG91Z2ggc3luY2hyb25pemVfa2VybmVsKCkgaXMgYSBiaXQgc2xvd2VyIHRoYW4gaXMgY2FsbF9yY3UoKSwKKzguCUFsdGhvdWdoIHN5bmNocm9uaXplX3JjdSgpIGlzIGEgYml0IHNsb3dlciB0aGFuIGlzIGNhbGxfcmN1KCksCiAJaXQgdXN1YWxseSByZXN1bHRzIGluIHNpbXBsZXIgY29kZS4gIFNvLCB1bmxlc3MgdXBkYXRlIHBlcmZvcm1hbmNlCi0JaXMgaW1wb3J0YW50IG9yIHRoZSB1cGRhdGVycyBjYW5ub3QgYmxvY2ssIHN5bmNocm9uaXplX2tlcm5lbCgpCisJaXMgaW1wb3J0YW50IG9yIHRoZSB1cGRhdGVycyBjYW5ub3QgYmxvY2ssIHN5bmNocm9uaXplX3JjdSgpCiAJc2hvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byBjYWxsX3JjdSgpLgogCiA5LglBbGwgUkNVIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHdoaWNoIGluY2x1ZGUKQEAgLTE1NSwzICsxNjUsMTQgQEAKIAl5b3UgLW11c3QtIHVzZSB0aGUgIl9yY3UoKSIgdmFyaWFudHMgb2YgdGhlIGxpc3QgbWFjcm9zLgogCUZhaWxpbmcgdG8gZG8gc28gd2lsbCBicmVhayBBbHBoYSBhbmQgY29uZnVzZSBwZW9wbGUgcmVhZGluZwogCXlvdXIgY29kZS4KKworMTEuCU5vdGUgdGhhdCBzeW5jaHJvbml6ZV9yY3UoKSAtb25seS0gZ3VhcmFudGVlcyB0byB3YWl0IHVudGlsCisJYWxsIGN1cnJlbnRseSBleGVjdXRpbmcgcmN1X3JlYWRfbG9jaygpLXByb3RlY3RlZCBSQ1UgcmVhZC1zaWRlCisJY3JpdGljYWwgc2VjdGlvbnMgY29tcGxldGUuICBJdCBkb2VzIC1ub3QtIG5lY2Vzc2FyaWx5IGd1YXJhbnRlZQorCXRoYXQgYWxsIGN1cnJlbnRseSBydW5uaW5nIGludGVycnVwdHMsIE5NSXMsIHByZWVtcHRfZGlzYWJsZSgpCisJY29kZSwgb3IgaWRsZSBsb29wcyB3aWxsIGNvbXBsZXRlLiAgVGhlcmVmb3JlLCBpZiB5b3UgZG8gbm90IGhhdmUKKwlyY3VfcmVhZF9sb2NrKCktcHJvdGVjdGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgZG8gLW5vdC0KKwl1c2Ugc3luY2hyb25pemVfcmN1KCkuCisKKwlJZiB5b3Ugd2FudCB0byB3YWl0IGZvciBzb21lIG9mIHRoZXNlIG90aGVyIHRoaW5ncywgeW91IG1pZ2h0CisJaW5zdGVhZCBuZWVkIHRvIHVzZSBzeW5jaHJvbml6ZV9pcnEoKSBvciBzeW5jaHJvbml6ZV9zY2hlZCgpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnR4dAppbmRleCBiZGE2ZWFkLi5mOGE1NGZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnR4dApAQCAtMzIsNiArMzIsNyBAQAogCQllbnVtIGF1ZGl0X3N0YXRlICAgc3RhdGU7CiAKIAkJcmVhZF9sb2NrKCZhdWRpdHNjX2xvY2spOworCQkvKiBOb3RlOiBhdWRpdF9uZXRsaW5rX3NlbSBoZWxkIGJ5IGNhbGxlci4gKi8KIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmYXVkaXRfdHNrbGlzdCwgbGlzdCkgewogCQkJaWYgKGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBOVUxMLCAmc3RhdGUpKSB7CiAJCQkJcmVhZF91bmxvY2soJmF1ZGl0c2NfbG9jayk7CkBAIC01NSw2ICs1Niw3IEBACiAJCWVudW0gYXVkaXRfc3RhdGUgICBzdGF0ZTsKIAogCQlyY3VfcmVhZF9sb2NrKCk7CisJCS8qIE5vdGU6IGF1ZGl0X25ldGxpbmtfc2VtIGhlbGQgYnkgY2FsbGVyLiAqLwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCAmYXVkaXRfdHNrbGlzdCwgbGlzdCkgewogCQkJaWYgKGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBOVUxMLCAmc3RhdGUpKSB7CiAJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xMzksMTIgKzE0MSwxNSBAQAogYSBzcGluX2xvY2soKSBhbmQgYSBzcGluX3VubG9jaygpLCBidXQgaW4gdGhpcyBjYXNlLCBhbGwgY2FsbGVycyBob2xkCiBhdWRpdF9uZXRsaW5rX3NlbSwgc28gbm8gYWRkaXRpb25hbCBsb2NraW5nIGlzIHJlcXVpcmVkLiAgVGhlIGF1ZGl0c2NfbG9jawogY2FuIHRoZXJlZm9yZSBiZSBlbGltaW5hdGVkLCBzaW5jZSB1c2Ugb2YgUkNVIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yCi13cml0ZXJzIHRvIGV4Y2x1ZGUgcmVhZGVycy4KK3dyaXRlcnMgdG8gZXhjbHVkZSByZWFkZXJzLiAgTm9ybWFsbHksIHRoZSB3cml0ZV9sb2NrKCkgY2FsbHMgd291bGQKK2JlIGNvbnZlcnRlZCBpbnRvIHNwaW5fbG9jaygpIGNhbGxzLgogCiBUaGUgbGlzdF9kZWwoKSwgbGlzdF9hZGQoKSwgYW5kIGxpc3RfYWRkX3RhaWwoKSBwcmltaXRpdmVzIGhhdmUgYmVlbgogcmVwbGFjZWQgYnkgbGlzdF9kZWxfcmN1KCksIGxpc3RfYWRkX3JjdSgpLCBhbmQgbGlzdF9hZGRfdGFpbF9yY3UoKS4KIFRoZSBfcmN1KCkgbGlzdC1tYW5pcHVsYXRpb24gcHJpbWl0aXZlcyBhZGQgbWVtb3J5IGJhcnJpZXJzIHRoYXQgYXJlCi1uZWVkZWQgb24gd2Vha2x5IG9yZGVyZWQgQ1BVcyAobW9zdCBvZiB0aGVtISkuCituZWVkZWQgb24gd2Vha2x5IG9yZGVyZWQgQ1BVcyAobW9zdCBvZiB0aGVtISkuICBUaGUgbGlzdF9kZWxfcmN1KCkKK3ByaW1pdGl2ZSBvbWl0cyB0aGUgcG9pbnRlciBwb2lzb25pbmcgZGVidWctYXNzaXN0IGNvZGUgdGhhdCB3b3VsZAorb3RoZXJ3aXNlIGNhdXNlIGNvbmN1cnJlbnQgcmVhZGVycyB0byBmYWlsIHNwZWN0YWN1bGFybHkuCiAKIFNvLCB3aGVuIHJlYWRlcnMgY2FuIHRvbGVyYXRlIHN0YWxlIGRhdGEgYW5kIHdoZW4gZW50cmllcyBhcmUgZWl0aGVyIGFkZGVkCiBvciBkZWxldGVkLCB3aXRob3V0IGluLXBsYWNlIG1vZGlmaWNhdGlvbiwgaXQgaXMgdmVyeSBlYXN5IHRvIHVzZSBSQ1UhCkBAIC0xNjYsNiArMTcxLDcgQEAKIAkJc3RydWN0IGF1ZGl0X25ld2VudHJ5ICpuZTsKIAogCQl3cml0ZV9sb2NrKCZhdWRpdHNjX2xvY2spOworCQkvKiBOb3RlOiBhdWRpdF9uZXRsaW5rX3NlbSBoZWxkIGJ5IGNhbGxlci4gKi8KIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBsaXN0LCBsaXN0KSB7CiAJCQlpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZShydWxlLCAmZS0+cnVsZSkpIHsKIAkJCQllLT5ydWxlLmFjdGlvbiA9IG5ld2FjdGlvbjsKQEAgLTE5OSw4ICsyMDUsNyBAQAogCQkJCWF1ZGl0X2NvcHlfcnVsZSgmbmUtPnJ1bGUsICZlLT5ydWxlKTsKIAkJCQluZS0+cnVsZS5hY3Rpb24gPSBuZXdhY3Rpb247CiAJCQkJbmUtPnJ1bGUuZmlsZV9jb3VudCA9IG5ld2ZpZWxkX2NvdW50OwotCQkJCWxpc3RfYWRkX3JjdShuZSwgZSk7Ci0JCQkJbGlzdF9kZWwoZSk7CisJCQkJbGlzdF9yZXBsYWNlX3JjdShlLCBuZSk7CiAJCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlLCBlKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CmluZGV4IDdlMGMyYWIuLmViNDQ0MDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dApAQCAtNDMsNyArNDMsOSBAQAogCiBvCUhvdyBjYW4gSSBzZWUgd2hlcmUgUkNVIGlzIGN1cnJlbnRseSB1c2VkIGluIHRoZSBMaW51eCBrZXJuZWw/CiAKLQlTZWFyY2ggZm9yICJyY3VfcmVhZF9sb2NrIiwgImNhbGxfcmN1IiwgYW5kICJzeW5jaHJvbml6ZV9rZXJuZWwiLgorCVNlYXJjaCBmb3IgInJjdV9yZWFkX2xvY2siLCAicmN1X3JlYWRfdW5sb2NrIiwgImNhbGxfcmN1IiwKKwkicmN1X3JlYWRfbG9ja19iaCIsICJyY3VfcmVhZF91bmxvY2tfYmgiLCAiY2FsbF9yY3VfYmgiLAorCSJzeW5jaHJvbml6ZV9yY3UiLCBhbmQgInN5bmNocm9uaXplX25ldCIuCiAKIG8JV2hhdCBndWlkZWxpbmVzIHNob3VsZCBJIGZvbGxvdyB3aGVuIHdyaXRpbmcgY29kZSB0aGF0IHVzZXMgUkNVPwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FvZS9hb2UudHh0IGIvRG9jdW1lbnRhdGlvbi9hb2UvYW9lLnR4dAppbmRleCA0M2U1MDEwLi4zYTRkYmU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FvZS9hb2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYW9lL2FvZS50eHQKQEAgLTQsNiArNCwxNiBAQAogCiAgIEl0IGhhcyBtYW55IHRpcHMgYW5kIGhpbnRzIQogCitUaGUgYW9ldG9vbHMgYXJlIHVzZXJsYW5kIHByb2dyYW1zIHRoYXQgYXJlIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGlzCitkcml2ZXIuICBUaGUgYW9ldG9vbHMgYXJlIG9uIHNvdXJjZWZvcmdlLgorCisgIGh0dHA6Ly9hb2V0b29scy5zb3VyY2Vmb3JnZS5uZXQvCisKK1RoZSBzY3JpcHRzIGluIHRoaXMgRG9jdW1lbnRhdGlvbi9hb2UgZGlyZWN0b3J5IGFyZSBpbnRlbmRlZCB0bworZG9jdW1lbnQgdGhlIHVzZSBvZiB0aGUgZHJpdmVyIGFuZCBhcmUgbm90IG5lY2Vzc2FyeSBpZiB5b3UgaW5zdGFsbAordGhlIGFvZXRvb2xzLgorCisKIENSRUFUSU5HIERFVklDRSBOT0RFUwogCiAgIFVzZXJzIG9mIHVkZXYgc2hvdWxkIGZpbmQgdGhlIGJsb2NrIGRldmljZSBub2RlcyBjcmVhdGVkCkBAIC0zNSwxNCArNDUsMTUgQEAKIAogICAiZWNobyBldGgyIGV0aDQgPiAvZGV2L2V0aGVyZC9pbnRlcmZhY2VzIiB0ZWxscyB0aGUgYW9lIGRyaXZlciB0bwogICBsaW1pdCBBVEEgb3ZlciBFdGhlcm5ldCB0cmFmZmljIHRvIGV0aDIgYW5kIGV0aDQuICBBb0UgdHJhZmZpYyBmcm9tCi0gIHVudHJ1c3RlZCBuZXR3b3JrcyBzaG91bGQgYmUgaWdub3JlZCBhcyBhIG1hdHRlciBvZiBzZWN1cml0eS4KKyAgdW50cnVzdGVkIG5ldHdvcmtzIHNob3VsZCBiZSBpZ25vcmVkIGFzIGEgbWF0dGVyIG9mIHNlY3VyaXR5LiAgU2VlCisgIGFsc28gdGhlIGFvZV9pZmxpc3QgZHJpdmVyIG9wdGlvbiBkZXNjcmliZWQgYmVsb3cuCiAKICAgImVjaG8gPiAvZGV2L2V0aGVyZC9kaXNjb3ZlciIgdGVsbHMgdGhlIGRyaXZlciB0byBmaW5kIG91dCB3aGF0IEFvRQogICBkZXZpY2VzIGFyZSBhdmFpbGFibGUuCiAKICAgVGhlc2UgY2hhcmFjdGVyIGRldmljZXMgbWF5IGRpc2FwcGVhciBhbmQgYmUgcmVwbGFjZWQgYnkgc3lzZnMKLSAgY291bnRlcnBhcnRzLCBzbyBkaXN0cmlidXRpb24gbWFpbnRhaW5lcnMgYXJlIGVuY291cmFnZWQgdG8gY3JlYXRlCi0gIHNjcmlwdHMgdGhhdCB1c2UgdGhlc2UgZGV2aWNlcy4KKyAgY291bnRlcnBhcnRzLiAgVXNpbmcgdGhlIGNvbW1hbmRzIGluIGFvZXRvb2xzIGluc3VsYXRlcyB1c2VycyBmcm9tCisgIHRoZXNlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCiAKICAgVGhlIGJsb2NrIGRldmljZXMgYXJlIG5hbWVkIGxpa2UgdGhpczoKIApAQCAtNjYsNyArNzcsOCBAQAogICB0aHJvdWdoIHdoaWNoIHdlIGFyZSBjb21tdW5pY2F0aW5nIHdpdGggdGhlIHJlbW90ZSBBb0UgZGV2aWNlLgogCiAgIFRoZXJlIGlzIGEgc2NyaXB0IGluIHRoaXMgZGlyZWN0b3J5IHRoYXQgZm9ybWF0cyB0aGlzIGluZm9ybWF0aW9uCi0gIGluIGEgY29udmVuaWVudCB3YXkuCisgIGluIGEgY29udmVuaWVudCB3YXkuICBVc2VycyB3aXRoIGFvZXRvb2xzIGNhbiB1c2UgdGhlIGFvZS1zdGF0CisgIGNvbW1hbmQuCiAKICAgcm9vdEBtYWtraSByb290IyBzaCBEb2N1bWVudGF0aW9uL2FvZS9zdGF0dXMuc2ggCiAgICAgIGUxMC4wICAgICAgICAgICAgZXRoMyAgICAgICAgICAgICAgdXAKQEAgLTg5LDMgKzEwMSwyMyBAQAogICAgICAgZTQuNyAgICAgICAgICAgIGV0aDEgICAgICAgICAgICAgIHVwCiAgICAgICBlNC44ICAgICAgICAgICAgZXRoMSAgICAgICAgICAgICAgdXAKICAgICAgIGU0LjkgICAgICAgICAgICBldGgxICAgICAgICAgICAgICB1cAorCisgIFVzZSAvc3lzL21vZHVsZS9hb2UvcGFyYW1ldGVycy9hb2VfaWZsaXN0IChvciBiZXR0ZXIsIHRoZSBkcml2ZXIKKyAgb3B0aW9uIGRpc2N1c3NlZCBiZWxvdykgaW5zdGVhZCBvZiAvZGV2L2V0aGVyZC9pbnRlcmZhY2VzIHRvIGxpbWl0CisgIEFvRSB0cmFmZmljIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZXMgaW4gdGhlIGdpdmVuCisgIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3QuICBVbmxpa2UgdGhlIG9sZCBjaGFyYWN0ZXIgZGV2aWNlLCB0aGUKKyAgc3lzZnMgZW50cnkgY2FuIGJlIHJlYWQgZnJvbSBhcyB3ZWxsIGFzIHdyaXR0ZW4gdG8uCisKKyAgSXQncyBoZWxwZnVsIHRvIHRyaWdnZXIgZGlzY292ZXJ5IGFmdGVyIHNldHRpbmcgdGhlIGxpc3Qgb2YgYWxsb3dlZAorICBpbnRlcmZhY2VzLiAgVGhlIGFvZXRvb2xzIHBhY2thZ2UgcHJvdmlkZXMgYW4gYW9lLWRpc2NvdmVyIHNjcmlwdAorICBmb3IgdGhpcyBwdXJwb3NlLiAgWW91IGNhbiBhbHNvIGRpcmVjdGx5IHVzZSB0aGUKKyAgL2Rldi9ldGhlcmQvZGlzY292ZXIgc3BlY2lhbCBmaWxlIGRlc2NyaWJlZCBhYm92ZS4KKworRFJJVkVSIE9QVElPTlMKKworICBUaGVyZSBpcyBhIGJvb3Qgb3B0aW9uIGZvciB0aGUgYnVpbHQtaW4gYW9lIGRyaXZlciBhbmQgYQorICBjb3JyZXNwb25kaW5nIG1vZHVsZSBwYXJhbWV0ZXIsIGFvZV9pZmxpc3QuICBXaXRob3V0IHRoaXMgb3B0aW9uLAorICBhbGwgbmV0d29yayBpbnRlcmZhY2VzIG1heSBiZSB1c2VkIGZvciBBVEEgb3ZlciBFdGhlcm5ldC4gIEhlcmUgaXMgYQorICB1c2FnZSBleGFtcGxlIGZvciB0aGUgbW9kdWxlIHBhcmFtZXRlci4KKworICAgIG1vZHByb2JlIGFvZV9pZmxpc3Q9ImV0aDEgZXRoMyIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYW9lL3N0YXR1cy5zaCBiL0RvY3VtZW50YXRpb24vYW9lL3N0YXR1cy5zaAppbmRleCA2NjI4MTE2Li43NTFmM2JlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FvZS9zdGF0dXMuc2gKKysrIGIvRG9jdW1lbnRhdGlvbi9hb2Uvc3RhdHVzLnNoCkBAIC0xNCwxMCArMTQsNiBAQAogCWVjaG8gIiRtZSBFcnJvcjogc3lzZnMgaXMgbm90IG1vdW50ZWQiIDE+JjIKIAlleGl0IDEKIH0KLXRlc3QgLXogImBsc21vZCB8IGdyZXAgJ15hb2UnYCIgJiYgewotCWVjaG8gICIkbWUgRXJyb3I6IGFvZSBtb2R1bGUgaXMgbm90IGxvYWRlZCIgMT4mMgotCWV4aXQgMQotfQogCiBmb3IgZCBpbiBgbHMgLWQgJHN5c2QvYmxvY2svZXRoZXJkKiAyPi9kZXYvbnVsbCB8IGdyZXAgLXYgcGAgZW5kOyBkbwogCSMgbWF5YmUgbHMgY29tZXMgdXAgZW1wdHksIHNvIHdlIHVzZSAiZW5kIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZiBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKaW5kZXggNzM0ZmNjOC4uOWEzM2JiOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgorKysgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCkBAIC0xLDEzNyArMSwxNDAgQEAKLS4qCi0qfgotNTNjOHh4X2QuaCoKICouYQotYWljNypyZWcuaCoKLWFpYzcqc2VxLmgqCi1haWM3KnJlZ19wcmludC5jKgorKi5hdXgKKyouYmluCisqLmNwaW8KKyouY3NzCisqLmR2aQorKi5lcHMKKyouZ2lmCisqLmdyZXAKKyouZ3JwCisqLmd6CisqLmh0bWwKKyouanBlZworKi5rbworKi5sb2cKKyoubHN0CisqLm1vZC5jCisqLm8KKyoub3JpZworKi5vdXQKKyoucGRmCisqLnBuZworKi5wcworKi5yZWoKKyoucworKi5zZ21sCisqLnNvCisqLnRleAorKi52ZXIKKyoueG1sCisqX01PRFVMRVMKKypfdmdhMTYuYworKmNzY29wZSoKKyp+CisuKgorLmNzY29wZQogNTNjNzAwX2QuaAorNTNjOHh4X2QuaCoKK0JpdEtlZXBlcgorQ09QWUlORworQ1JFRElUUworQ1ZTCitDaGFuZ2VTZXQKK0tlcm50eXBlcworTU9EUy50eHQKK01vZHVsZS5zeW12ZXJzCitQRU5ESU5HCitTQ0NTCitTeXN0ZW0ubWFwKgorVEFHUworYWljNypyZWcuaCoKK2FpYzcqcmVnX3ByaW50LmMqCithaWM3KnNlcS5oKgogYWljYXNtCiBhaWNkYi5oKgogYXNtCiBhc21fb2Zmc2V0cy4qCiBhdXRvY29uZi5oKgotKi5hdXgKIGJib290c2VjdAotKi5iaW4KIGJpbjJjCiBiaW5rZXJuZWwuc3BlYwotQml0S2VlcGVyCiBib290c2VjdAogYnNldHVwCiBidGZpeHVwcHJlcAogYnVpbGQKIGJ2bWxpbnV4CiBiekltYWdlKgotQ2hhbmdlU2V0CiBjbGFzc2xpc3QuaCoKLWNvbXBpbGUuaCoKIGNvbXAqLmxvZworY29tcGlsZS5oKgogY29uZmlnCiBjb25maWctKgogY29uZmlnX2RhdGEuaCoKIGNvbm1ha2VoYXNoCiBjb25zb2xlbWFwX2RlZnRibC5jKgotQ09QWUlORwotQ1JFRElUUwotLmNzY29wZQotKmNzY29wZSoKK2NyYzMydGFibGUuaCoKIGNzY29wZS4qCi0qLm91dAotKi5jc3MKLUNWUwogZGVma2V5bWFwLmMqCiBkZXZsaXN0LmgqCiBkb2Nwcm9jCiBkdW1teV9zeW0uYyoKLSouZHZpCi0qLmVwcworZWxmY29uZmlnLmgqCiBmaWxlbGlzdAogZml4ZGVwCiBmb3JlMjAwZV9ta2Zpcm0KIGZvcmUyMDBlX3BjYV9mdy5jKgogZ2VuLWRldmxpc3QKLWdlbl9pbml0X2NwaW8KLWdlbl9jcmMzMnRhYmxlCi1jcmMzMnRhYmxlLmgqCi0qLmNwaW8KIGdlbi1rZGJfY21kcy5jKgotZ2VudGJsCitnZW5fY3JjMzJ0YWJsZQorZ2VuX2luaXRfY3BpbwogZ2Vua3N5bXMKLSouZ2lmCi0qLmd6Ci0qLmh0bWwKK2dlbnRibAogaWtjb25maWcuaCoKIGluaXRyYW1mc19saXN0Ci0qLmpwZWcKK2thbGxzeW1zCiBrY29uZmlnCiBrY29uZmlnLnRrCi1LZXJudHlwZXMKIGtleXdvcmRzLmMqCiBrc3ltLmMqCiBrc3ltLmgqCi1rYWxsc3ltcwotbWtfZWxmY29uZmlnCi1lbGZjb25maWcuaCoKLW1vZHBvc3QKLXBubXRvbG9nbwotbG9nb18qLmMKLSoubG9nCiBsZXguYyoKK2xvZ29fKi5jCiBsb2dvXypfY2x1dDIyNC5jCiBsb2dvXypfbW9uby5jCiBseGRpYWxvZwogbWFrZV90aW1lc19oCiBtYXAKLW1rZGVwCi0qX01PRFVMRVMKLU1PRFMudHh0Ci1tb2R2ZXJzaW9ucy5oKgotTW9kdWxlLnN5bXZlcnMKLSoubW9kLmMKLSoubwotKi5rbwotKi5vcmlnCi0qLmxzdAotKi5ncnAKLSouZ3JlcAotb3VpLmMqCi1ta3RhYmxlcwotcmFpZDZ0YWJsZXMuYwotcmFpZDZpbnQqLmMKLXJhaWQ2YWx0aXZlYyouYwotd2FueGxmdy5pbmMKIG1hdWlfYm9vdC5oCi1wc3NfYm9vdC5oCi10cml4X2Jvb3QuaAotKi5wZGYKK21rX2VsZmNvbmZpZworbWtkZXAKK21rdGFibGVzCittb2Rwb3N0Cittb2R2ZXJzaW9ucy5oKgorb2Zmc2V0cy5oCitvdWkuYyoKIHBhcnNlLmMqCiBwYXJzZS5oKgotUEVORElORworcG5tdG9sb2dvCiBwcGNfZGVmcy5oKgogcHJvbWNvbl90YmwuYyoKLSoucG5nCi0qLnBzCi0qLnJlagotU0NDUworcHNzX2Jvb3QuaAorcmFpZDZhbHRpdmVjKi5jCityYWlkNmludCouYworcmFpZDZ0YWJsZXMuYwogc2V0dXAKLSoucwotKi5zbwotKi5zZ21sCiBzaW03MTBfZC5oKgogc21fdGJsKgogc3BsaXQtaW5jbHVkZQotU3lzdGVtLm1hcCoKIHRhZ3MKLVRBR1MKLSoudGV4CiB0aW1lcy5oKgogdGtwYXJzZQotKi52ZXIKK3RyaXhfYm9vdC5oCiB2ZXJzaW9uLmgqCi0qX3ZnYTE2LmMKIHZtbGludXgKLXZtbGludXgubGRzCiB2bWxpbnV4LSoKK3ZtbGludXgubGRzCiB2c3lzY2FsbC5sZHMKK3dhbnhsZncuaW5jCit1SW1hZ2UKIHpJbWFnZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDU2NjI3YzEuLmQzYzUyZGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTQ4LDMgKzQ4LDE4IEBACiBXaHk6CVJlcGxhY2VkIGJ5IC0+Y29tcGF0X2lvY3RsIGluIGZpbGVfb3BlcmF0aW9ucyBhbmQgb3RoZXIgbWV0aG9kCiAJdmVjb3JzLgogV2hvOglBbmRpIEtsZWVuIDxha0BtdWMuZGU+LCBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CVJDVSBBUEkgbW92ZXMgdG8gRVhQT1JUX1NZTUJPTF9HUEwKK1doZW46CUFwcmlsIDIwMDYKK0ZpbGVzOglpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgsIGtlcm5lbC9yY3VwZGF0ZS5jCitXaHk6CU91dHNpZGUgb2YgTGludXgsIHRoZSBvbmx5IGltcGxlbWVudGF0aW9ucyBvZiBhbnl0aGluZyBldmVuCisJdmFndWVseSByZXNlbWJsaW5nIFJDVSB0aGF0IEkgYW0gYXdhcmUgb2YgYXJlIGluIERZTklYL3B0eCwKKwlWTS9YQSwgVG9ybmFkbywgYW5kIEs0Mi4gIEkgZG8gbm90IGV4cGVjdCBhbnlvbmUgdG8gcG9ydCBiaW5hcnkKKwlkcml2ZXJzIG9yIGtlcm5lbCBtb2R1bGVzIGZyb20gYW55IG9mIHRoZXNlLCBzaW5jZSB0aGUgZmlyc3QgdHdvCisJYXJlIG93bmVkIGJ5IElCTSBhbmQgdGhlIGxhc3QgdHdvIGFyZSBvcGVuLXNvdXJjZSByZXNlYXJjaCBPU2VzLgorCVNvIHRoZXNlIHdpbGwgbW92ZSB0byBHUEwgYWZ0ZXIgYSBncmFjZSBwZXJpb2QgdG8gYWxsb3cKKwlwZW9wbGUsIHdobyBtaWdodCBiZSB1c2luZyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBJIGFtIG5vdCBhd2FyZQorCW9mLCB0byBhZGp1c3QgdG8gdGhpcyB1cGNvbWluZyBjaGFuZ2UuCitXaG86CVBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwppbmRleCBhOTM0YmFlLi4xMDQ1ZGE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCkBAIC0yMTksOCArMjE5LDEyIEBACiBJZiB0aGUgZmlsZXN5dGVtIGlzIGNhbGxlZCBmb3Igc3luYyB0aGVuIGl0IG11c3Qgd2FpdCBvbiBhbnkKIGluLXByb2dyZXNzIEkvTyBhbmQgdGhlbiBzdGFydCBuZXcgSS9PLgogCi1UaGUgZmlsZXN5c3RlbSBzaG91bGQgdW5sb2NrIHRoZSBwYWdlIHN5bmNocm9ub3VzbHksIGJlZm9yZSByZXR1cm5pbmcKLXRvIHRoZSBjYWxsZXIuCitUaGUgZmlsZXN5c3RlbSBzaG91bGQgdW5sb2NrIHRoZSBwYWdlIHN5bmNocm9ub3VzbHksIGJlZm9yZSByZXR1cm5pbmcgdG8gdGhlCitjYWxsZXIsIHVubGVzcyAtPndyaXRlcGFnZSgpIHJldHVybnMgc3BlY2lhbCBXUklURVBBR0VfQUNUSVZBVEUKK3ZhbHVlLiBXUklURVBBR0VfQUNUSVZBVEUgbWVhbnMgdGhhdCBwYWdlIGNhbm5vdCByZWFsbHkgYmUgd3JpdHRlbiBvdXQKK2N1cnJlbnRseSwgYW5kIFZNIHNob3VsZCBzdG9wIGNhbGxpbmcgLT53cml0ZXBhZ2UoKSBvbiB0aGlzIHBhZ2UgZm9yIHNvbWUKK3RpbWUuIFZNIGRvZXMgdGhpcyBieSBtb3ZpbmcgcGFnZSB0byB0aGUgaGVhZCBvZiB0aGUgYWN0aXZlIGxpc3QsIGhlbmNlIHRoZQorbmFtZS4KIAogVW5sZXNzIHRoZSBmaWxlc3lzdGVtIGlzIGdvaW5nIHRvIHJlZGlydHlfcGFnZV9mb3Jfd3JpdGVwYWdlKCksIHVubG9jayB0aGUgcGFnZQogYW5kIHJldHVybiB6ZXJvLCB3cml0ZXBhZ2UgKm11c3QqIHJ1biBzZXRfcGFnZV93cml0ZWJhY2soKSBhZ2FpbnN0IHRoZSBwYWdlLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKaW5kZXggY2JlODVjMS4uNmM5OGYyYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CkBAIC05MDksMTYgKzkwOSw2IEBACiBSZXByZXNlbnRzIHRoZSAgbnVtYmVyIG9mIGZyZWUgaW5vZGVzLiBJZS4gVGhlIG51bWJlciBvZiBpbnVzZSBpbm9kZXMgaXMKIChucl9pbm9kZXMgLSBucl9mcmVlX2lub2RlcykuCiAKLXN1cGVyLW5yIGFuZCBzdXBlci1tYXgKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQWdhaW4sIHN1cGVyICBibG9jayBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgYnkgdGhlIGtlcm5lbCwgYnV0IG5vdCBmcmVlZC4gVGhlCi1maWxlIHN1cGVyLW1heCAgY29udGFpbnMgIHRoZSAgbWF4aW11bSAgbnVtYmVyICBvZiBzdXBlciBibG9jayBoYW5kbGVycywgd2hlcmUKLXN1cGVyLW5yIHNob3dzIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IGFsbG9jYXRlZCBvbmVzLgotCi1FdmVyeSBtb3VudGVkIGZpbGUgc3lzdGVtIG5lZWRzIGEgc3VwZXIgYmxvY2ssIHNvIGlmIHlvdSBwbGFuIHRvIG1vdW50IGxvdHMgb2YKLWZpbGUgc3lzdGVtcywgeW91IG1heSB3YW50IHRvIGluY3JlYXNlIHRoZXNlIG51bWJlcnMuCi0KIGFpby1uciBhbmQgYWlvLW1heC1ucgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTM4Ni96ZXJvLXBhZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi9pMzg2L3plcm8tcGFnZS50eHQKaW5kZXggNjdjMDUzYS4uZGYyOGM3NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMzg2L3plcm8tcGFnZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMzg2L3plcm8tcGFnZS50eHQKQEAgLTc5LDYgKzc5LDYgQEAKIDB4MjJjICAgdW5zaWduZWQgbG9uZwlyYW1kaXNrX21heAogMHgyMzAgICAxNiBieXRlcyAJdHJhbXBvbGluZQogMHgyOTAgLSAweDJjZgkJRUREX01CUl9TSUdfQlVGRkVSIChlZGQuUykKLTB4MmQwIC0gMHg2MDAJCUU4MjBNQVAKLTB4NjAwIC0gMHg3ZmYJCUVEREJVRiAoZWRkLlMpIGZvciBkaXNrIHNpZ25hdHVyZSByZWFkIHNlY3RvcgotMHg2MDAgLSAweDdlYgkJRUREQlVGIChlZGQuUykgZm9yIGVkZCBkYXRhCisweDJkMCAtIDB4ZDAwCQlFODIwTUFQCisweGQwMCAtIDB4ZWZmCQlFRERCVUYgKGVkZC5TKSBmb3IgZGlzayBzaWduYXR1cmUgcmVhZCBzZWN0b3IKKzB4ZDAwIC0gMHhlZWIJCUVEREJVRiAoZWRkLlMpIGZvciBlZGQgZGF0YQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0RMSU5LLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ETElOSy50eHQKaW5kZXggMDgzZDI0Ny4uNTVkMjQ0MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0RMSU5LLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvRExJTksudHh0CkBAIC0xNzgsMTAgKzE3OCw5IEBACiAJNy4gQUNLTk9XTEVER01FTlRTLgogCiAJVGhlc2UgZHJpdmVycyB3b3VsZG4ndCBoYXZlIGJlZW4gZG9uZSB3aXRob3V0IHRoZSBiYXNlCi0JKGFuZCBzdXBwb3J0KSBmcm9tIFJvc3MgQmlybyA8YmlyN0BsZWxhbmQuc3RhbmZvcmQuZWR1PiwKLQlhbmQgRC1MaW5rIFN5c3RlbXMgSW5jLiAgVGhlIGRyaXZlciByZWxpZXMgdXBvbiBHUEwtZWQKLQlzb3VyY2UgZnJvbSBELUxpbmsgU3lzdGVtcyBJbmMuIGFuZCBmcm9tIFJ1c3NlbCBOZWxzb24gYXQKLQlDcnlud3IgU29mdHdhcmUgPG5lbHNvbkBjcnlud3IuY29tPi4KKwkoYW5kIHN1cHBvcnQpIGZyb20gUm9zcyBCaXJvLCBhbmQgRC1MaW5rIFN5c3RlbXMgSW5jLgorCVRoZSBkcml2ZXIgcmVsaWVzIHVwb24gR1BMLWVkIHNvdXJjZSBmcm9tIEQtTGluayBTeXN0ZW1zIEluYy4KKwlhbmQgZnJvbSBSdXNzZWwgTmVsc29uIGF0IENyeW53ciBTb2Z0d2FyZSA8bmVsc29uQGNyeW53ci5jb20+LgogCiAJQWRkaXRpb25hbCBpbnB1dCBhbHNvIGZyb206CiAJRG9uYWxkIEJlY2tlciA8YmVja2VyQHN1cGVyLm9yZz4sIEFsYW4gQ294IDxBLkNveEBzd2Fuc2VhLmFjLnVrPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMudHh0CmluZGV4IDE1MDlmM2EuLjNjMGE1YmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy50eHQKQEAgLTUxLDYgKzUxLDggQEAKIAlzZXRfbXVsdGljYXN0X2xpc3QKIAlDb250ZXh0OiBCSHMgZGlzYWJsZWQKIAlOb3RlczogbmV0aWZfcXVldWVfc3RvcHBlZCgpIGlzIGd1YXJhbnRlZWQgZmFsc2UKKyAgICAgICAgICAgICAgIEludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIHdoZW4gY2FsbGluZyBoYXJkX3N0YXJ0X3htaXQuCisgICAgICAgICAgICAgICAgKEludGVycnVwdHMgbXVzdCBhbHNvIGJlIGVuYWJsZWQgd2hlbiBlbmFibGluZyB0aGUgQkggaGFuZGxlci4pCiAJUmV0dXJuIGNvZGVzOiAKIAlvIE5FVERFVl9UWF9PSyBldmVyeXRoaW5nIG9rLiAKIAlvIE5FVERFVl9UWF9CVVNZIENhbm5vdCB0cmFuc21pdCBwYWNrZXQsIHRyeSBsYXRlciAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGNpLnR4dCBiL0RvY3VtZW50YXRpb24vcGNpLnR4dAppbmRleCA2NzUxNGJmLi42MmIxZGM1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3BjaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wY2kudHh0CkBAIC0yNzksNiArMjc5LDcgQEAKIHBjaV9mb3JfZWFjaF9idXMoKQkJU3VwZXJzZWRlZCBieSBwY2lfZmluZF9uZXh0X2J1cygpCiBwY2lfZmluZF9kZXZpY2UoKQkJU3VwZXJzZWRlZCBieSBwY2lfZ2V0X2RldmljZSgpCiBwY2lfZmluZF9zdWJzeXMoKQkJU3VwZXJzZWRlZCBieSBwY2lfZ2V0X3N1YnN5cygpCitwY2lfZmluZF9zbG90KCkJCQlTdXBlcnNlZGVkIGJ5IHBjaV9nZXRfc2xvdCgpCiBwY2liaW9zX2ZpbmRfY2xhc3MoKQkJU3VwZXJzZWRlZCBieSBwY2lfZ2V0X2NsYXNzKCkKIHBjaV9maW5kX2NsYXNzKCkJCVN1cGVyc2VkZWQgYnkgcGNpX2dldF9jbGFzcygpCiBwY2lfKHJlYWR8d3JpdGUpXypfbm9kZXYoKQlTdXBlcnNlZGVkIGJ5IHBjaV9idXNfKHJlYWR8d3JpdGUpXyooKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kudHh0CmluZGV4IGM4NTQyOGUuLjM1YjFhN2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvcGNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3BjaS50eHQKQEAgLTE2NSw0MCArMTY1LDkgQEAKIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIHVzZSBieSBpbmRpdmlkdWFsIGRyaXZlcnMsIGFuZCBhcmUgZGVmaW5lZCBpbiAKIHN0cnVjdCBwY2lfZHJpdmVyOgogCi0gICAgICAgIGludCAgKCpzYXZlX3N0YXRlKSAoc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHN0YXRlKTsKLSAgICAgICAgaW50ICAoKnN1c3BlbmQpIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgc3RhdGUpOworICAgICAgICBpbnQgICgqc3VzcGVuZCkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiAgICAgICAgIGludCAgKCpyZXN1bWUpIChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLSAgICAgICAgaW50ICAoKmVuYWJsZV93YWtlKSAoc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHN0YXRlLCBpbnQgZW5hYmxlKTsKLQotCi1zYXZlX3N0YXRlCi0tLS0tLS0tLS0tCi0KLVVzYWdlOgotCi1pZiAoZGV2LT5kcml2ZXIgJiYgZGV2LT5kcml2ZXItPnNhdmVfc3RhdGUpCi0JZGV2LT5kcml2ZXItPnNhdmVfc3RhdGUoZGV2LHN0YXRlKTsKLQotVGhlIGRyaXZlciBzaG91bGQgdXNlIHRoaXMgY2FsbGJhY2sgdG8gc2F2ZSBkZXZpY2Ugc3RhdGUuIEl0IHNob3VsZCB0YWtlIGludG8KLWFjY291bnQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRldmljZSBhbmQgdGhlIHJlcXVlc3RlZCBzdGF0ZSBpbiBvcmRlciB0bwotYXZvaWQgYW55IHVubmVjZXNzYXJ5IG9wZXJhdGlvbnMuCi0KLUZvciBleGFtcGxlLCBhIHZpZGVvIGNhcmQgdGhhdCBzdXBwb3J0cyBhbGwgNCBzdGF0ZXMgKEQwLUQzKSwgYWxsIGNvbnRyb2xsZXIKLWNvbnRleHQgaXMgcHJlc2VydmVkIHdoZW4gZW50ZXJpbmcgRDEsIGJ1dCB0aGUgc2NyZWVuIGlzIHBsYWNlZCBpbnRvIGEgbG93IHBvd2VyCi1zdGF0ZSAoYmxhbmtlZCkuIAotCi1UaGUgZHJpdmVyIGNhbiBhbHNvIGludGVycHJldCB0aGlzIGZ1bmN0aW9uIGFzIGEgbm90aWZpY2F0aW9uIHRoYXQgaXQgbWF5IGJlCi1lbnRlcmluZyBhIHNsZWVwIHN0YXRlIGluIHRoZSBuZWFyIGZ1dHVyZS4gSWYgaXQga25vd3MgdGhhdCB0aGUgZGV2aWNlIGNhbm5vdAotZW50ZXIgdGhlIHJlcXVlc3RlZCBzdGF0ZSwgZWl0aGVyIGJlY2F1c2Ugb2YgbGFjayBvZiBzdXBwb3J0IGZvciBpdCwgb3IgYmVjYXVzZQotdGhlIGRldmljZSBpcyBtaWRkbGUgb2Ygc29tZSBjcml0aWNhbCBvcGVyYXRpb24sIHRoZW4gaXQgc2hvdWxkIGZhaWwuCi0KLVRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHRvIHNldCBhbnkgc3RhdGUgaW4gdGhlIGRldmljZSBvciB0aGUgZHJpdmVyCi1iZWNhdXNlIHRoZSBkZXZpY2UgbWF5IG5vdCBhY3R1YWxseSBlbnRlciB0aGUgc2xlZXAgc3RhdGUgKGUuZy4gYW5vdGhlciBkcml2ZXIKLWxhdGVyIGNhdXNlcyBjYXVzZXMgYSBnbG9iYWwgc3RhdGUgdHJhbnNpdGlvbiB0byBmYWlsKS4KLQotTm90ZSB0aGF0IGluIGludGVybWVkaWF0ZSBsb3cgcG93ZXIgc3RhdGVzLCBhIGRldmljZSdzIEkvTyBhbmQgbWVtb3J5IHNwYWNlcyBtYXkKLWJlIGRpc2FibGVkIGFuZCBtYXkgbm90IGJlIGF2YWlsYWJsZSBpbiBzdWJzZXF1ZW50IHRyYW5zaXRpb25zIHRvIGxvd2VyIHBvd2VyCi1zdGF0ZXMuCisgICAgICAgIGludCAgKCplbmFibGVfd2FrZSkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLCBpbnQgZW5hYmxlKTsKIAogCiBzdXNwZW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvY2RzLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9jZHMudHh0CmluZGV4IGQ5Mzk3MTcuLmYwYmUzODkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9jZHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9jZHMudHh0CkBAIC01NiwxMiArNTYsMTYgQEAKICAgIHJlYWQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcwogICAgCiByZWFkX2NvbmZfZGF0YSgpCityZWFkX2NvbmZfZGF0YV9scG0oKQogICAgcmVhZCBjb25maWd1cmF0aW9uIGRhdGEuCiAKIGNjd19kZXZpY2VfZ2V0X2NpdygpCiAgICBnZXQgY29tbWFuZHMgZnJvbSBleHRlbmRlZCBzZW5zZSBkYXRhLgogCiBjY3dfZGV2aWNlX3N0YXJ0KCkJCitjY3dfZGV2aWNlX3N0YXJ0X3RpbWVvdXQoKQorY2N3X2RldmljZV9zdGFydF9rZXkoKQorY2N3X2RldmljZV9zdGFydF9rZXlfdGltZW91dCgpCiAgICBpbml0aWF0ZSBhbiBJL08gcmVxdWVzdC4KIAogY2N3X2RldmljZV9yZXN1bWUoKQpAQCAtMTk3LDE5ICsyMDEsMjEgQEAKICAgICAgICAgICBvcGVyYXRpb25hbC4KIAogCi1yZWFkX2NvbmZfZGF0YSgpIC0gUmVhZCBDb25maWd1cmF0aW9uIERhdGEKK3JlYWRfY29uZl9kYXRhKCksIHJlYWRfY29uZl9kYXRhX2xwbSgpIC0gUmVhZCBDb25maWd1cmF0aW9uIERhdGEKIAogUmV0cmlldmUgdGhlIGRldmljZSBkZXBlbmRlbnQgY29uZmlndXJhdGlvbiBkYXRhLiBQbGVhc2UgaGF2ZSBhIGxvb2sgYXQgeW91ciAKIGRldmljZSBkZXBlbmRlbnQgSS9PIGNvbW1hbmRzIGZvciB0aGUgZGV2aWNlIHNwZWNpZmljIGxheW91dCBvZiB0aGUgbm9kZSAKLWRlc2NyaXB0b3IgZWxlbWVudHMuIAorZGVzY3JpcHRvciBlbGVtZW50cy4gcmVhZF9jb25mX2RhdGFfbHBtKCkgd2lsbCByZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBkYXRhCitmb3IgYSBzcGVjaWZpYyBwYXRoLgogCi1UaGUgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgY2FsbGVkIHdpdGggYW4gaXJxIGhhbmRsZXIgaW4gcGxhY2U7IHRoYXQgaXMsCitUaGUgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgY2FsbGVkIHdpdGggdGhlIGRldmljZSBhbHJlYWR5IGVuYWJsZWQ7IHRoYXQgaXMsCiBhdCBlYXJsaWVzdCBkdXJpbmcgc2V0X29ubGluZSgpIHByb2Nlc3NpbmcuCiAKIFRoZSBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGJ1dCB0aGUgZGV2aWNlIG11c3Qgbm90IGJlCiBsb2NrZWQKIAotaW50IHJlYWRfY29uZl9kYXRhKHN0cnVjdCBjY3dfZGV2aWNlLCB2b2lkICoqYnVmZmVyLCBpbnQgKmxlbmd0aCwgX191OCBscG0pOworaW50IHJlYWRfY29uZl9kYXRhKHN0cnVjdCBjY3dfZGV2aWNlLCB2b2lkICoqYnVmZmVyLCBpbnQgKmxlbmd0aCk7CitpbnQgcmVhZF9jb25mX2RhdGFfbHBtKHN0cnVjdCBjY3dfZGV2aWNlLCB2b2lkICoqYnVmZmVyLCBpbnQgKmxlbmd0aCwgX191OCBscG0pOwogCiBjZGV2ICAgLSB0aGUgY2N3X2RldmljZSB0aGUgZGF0YSBpcyByZXF1ZXN0ZWQgZm9yLgogYnVmZmVyIC0gUG9pbnRlciB0byBhIGJ1ZmZlciBwb2ludGVyLiBUaGUgcmVhZF9jb25mX2RhdGEoKSByb3V0aW5lCkBAIC0yNjMsNiArMjY5LDI1IEBACiAJCSAgICAgdW5zaWduZWQgbG9uZyBpbnRwYXJtLAogCQkgICAgIF9fdTggbHBtLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworaW50IGNjd19kZXZpY2Vfc3RhcnRfdGltZW91dChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKKwkJCSAgICAgc3RydWN0IGNjdzEgKmNwYSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBpbnRwYXJtLAorCQkJICAgICBfX3U4IGxwbSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCSAgICAgaW50IGV4cGlyZXMpOworaW50IGNjd19kZXZpY2Vfc3RhcnRfa2V5KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAorCQkJIHN0cnVjdCBjY3cxICpjcGEsCisJCQkgdW5zaWduZWQgbG9uZyBpbnRwYXJtLAorCQkJIF9fdTggbHBtLAorCQkJIF9fdTgga2V5LAorCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworaW50IGNjd19kZXZpY2Vfc3RhcnRfa2V5X3RpbWVvdXQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsCisJCQkJIHN0cnVjdCBjY3cxICpjcGEsCisJCQkJIHVuc2lnbmVkIGxvbmcgaW50cGFybSwKKwkJCQkgX191OCBscG0sCisJCQkJIF9fdTgga2V5LAorCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCSBpbnQgZXhwaXJlcyk7CiAKIGNkZXYgICAgICAgICA6IGNjd19kZXZpY2UgdGhlIEkvTyBpcyBkZXN0aW5lZCBmb3IKIGNwYSAgICAgICAgICA6IGxvZ2ljYWwgc3RhcnQgYWRkcmVzcyBvZiBjaGFubmVsIHByb2dyYW0KQEAgLTI3Miw3ICsyOTcsMTIgQEAKICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgSS9PIHJlcXVlc3QuCiBscG0gICAgICAgICAgOiBkZWZpbmVzIHRoZSBjaGFubmVsIHBhdGggdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBJL08KICAgICAgICAgICAgICAgIHJlcXVlc3QuIEEgdmFsdWUgb2YgMCB3aWxsIG1ha2UgY2lvIHVzZSB0aGUgb3BtLgora2V5CSAgICAgOiB0aGUgc3RvcmFnZSBrZXkgdG8gdXNlIGZvciB0aGUgSS9PICh1c2VmdWwgZm9yIG9wZXJhdGluZyBvbiBhCisJICAgICAgIHN0b3JhZ2Ugd2l0aCBhIHN0b3JhZ2Uga2V5ICE9IGRlZmF1bHQga2V5KQogZmxhZyAgICAgICAgIDogZGVmaW5lcyB0aGUgYWN0aW9uIHRvIGJlIHBlcmZvcm1lZCBmb3IgSS9PIHByb2Nlc3NpbmcKK2V4cGlyZXMgICAgICA6IHRpbWVvdXQgdmFsdWUgaW4gamlmZmllcy4gVGhlIGNvbW1vbiBJL08gbGF5ZXIgd2lsbCB0ZXJtaW5hdGUKKwkgICAgICAgdGhlIHJ1bm5pbmcgcHJvZ3JhbSBhZnRlciB0aGlzIGFuZCBjYWxsIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgorCSAgICAgICB3aXRoIEVSUl9QVFIoLUVUSU1FRE9VVCkgYXMgaXJiLgogCiBQb3NzaWJsZSBmbGFnIHZhbHVlcyBhcmUgOgogCkBAIC0zMjcsNiArMzU3LDEzIEBACiBpbnRlcnJ1cHQgd2lsbCBiZSBwcmVzZW50ZWQgdG8gaW5kaWNhdGUgSS9PIGNvbXBsZXRpb24gYXMgdGhlIEkvTyByZXF1ZXN0IHdhcwogbmV2ZXIgc3RhcnRlZCwgZXZlbiB0aG91Z2ggY2N3X2RldmljZV9zdGFydCgpIHJldHVybmVkIHdpdGggc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgogCitUaGUgaXJiIG1heSBjb250YWluIGFuIGVycm9yIHZhbHVlLCBhbmQgdGhlIGRldmljZSBkcml2ZXIgc2hvdWxkIGNoZWNrIGZvciB0aGlzCitmaXJzdDoKKworLUVUSU1FRE9VVDogdGhlIGNvbW1vbiBJL08gbGF5ZXIgdGVybWluYXRlZCB0aGUgcmVxdWVzdCBhZnRlciB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICB0aW1lb3V0IHZhbHVlCistRUlPOiAgICAgICB0aGUgY29tbW9uIEkvTyBsYXllciB0ZXJtaW5hdGVkIHRoZSByZXF1ZXN0IGR1ZSB0byBhbiBlcnJvciBzdGF0ZQorCiBJZiB0aGUgY29uY3VycmVudCBzZW5zZSBmbGFnIGluIHRoZSBleHRlbmRlZCBzdGF0dXMgd29yZCBpbiB0aGUgaXJiIGlzIHNldCwgdGhlCiBmaWVsZCBpcmItPnNjc3cuY291bnQgZGVzY3JpYmVzIHRoZSBudW1lciBvZiBkZXZpY2Ugc3BlY2lmaWMgc2Vuc2UgYnl0ZXMKIGF2YWlsYWJsZSBpbiB0aGUgZXh0ZW5kZWQgY29udHJvbCB3b3JkIGlyYi0+c2Nzdy5lY3dbMF0uIE5vIGRldmljZSBzZW5zaW5nIGJ5CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDQzMzNiNjkuLjViODQ4MzMgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNjk5LDcgKzE2OTksOSBAQAogTToJcHJvc2tpQGdudS5vcmcKIFA6CURhdmlkIEdpYnNvbgogTToJaGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdQotVzoJaHR0cDovL3d3dy5vemxhYnMub3JnL3Blb3BsZS9kZ2lic29uL2RsZHdkCitMOglvcmlub2NvLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJb3Jpbm9jby1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK1c6CWh0dHA6Ly93d3cubm9uZ251Lm9yZy9vcmlub2NvLwogUzoJTWFpbnRhaW5lZAogCiBQQVJBTExFTCBQT1JUIFNVUFBPUlQKQEAgLTIxMTMsNiArMjExNSwxMyBAQAogTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCiBTOglNYWludGFpbmVkCiAKK1RQTSBERVZJQ0UgRFJJVkVSCitQOglLeWxlbmUgSGFsbAorTToJa2poYWxsQHVzLmlibS5jb20KK1c6CWh0dHA6Ly90cG1kZC5zb3VyY2Vmb3JnZS5uZXQKK0w6CXRwbWRkLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorUzoJTWFpbnRhaW5lZAorCiBVbHRyYVNQQVJDIChzcGFyYzY0KToKIFA6CURhdmlkIFMuIE1pbGxlcgogTToJZGF2ZW1AZGF2ZW1sb2Z0Lm5ldApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA4ZGEzYTMwLi5mN2ViNTU4IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMzMyLDkgKzMzMiw3IEBACiBQRVJMCQk9IHBlcmwKIENIRUNLCQk9IHNwYXJzZQogCi1OT1NURElOQ19GTEFHUyAgPSAtbm9zdGRpbmMgLWlzeXN0ZW0gJChzaGVsbCAkKENDKSAtcHJpbnQtZmlsZS1uYW1lPWluY2x1ZGUpCiBDSEVDS0ZMQUdTICAgICA6PSAtRF9fbGludXhfXyAtRGxpbnV4IC1EX19TVERDX18gLUR1bml4IC1EX191bml4X18KLUNIRUNLRkxBR1MgICAgICs9ICQoTk9TVERJTkNfRkxBR1MpCiBNT0RGTEFHUwk9IC1ETU9EVUxFCiBDRkxBR1NfTU9EVUxFICAgPSAkKE1PREZMQUdTKQogQUZMQUdTX01PRFVMRSAgID0gJChNT0RGTEFHUykKQEAgLTUzMSw2ICs1MjksMTAgQEAKIAogaW5jbHVkZSAkKHNyY3RyZWUpL2FyY2gvJChBUkNIKS9NYWtlZmlsZQogCisjIGFyY2ggTWFrZWZpbGUgbWF5IG92ZXJyaWRlIENDIHNvIGtlZXAgdGhpcyBhZnRlciBhcmNoIE1ha2VmaWxlIGlzIGluY2x1ZGVkCitOT1NURElOQ19GTEFHUyA6PSAtbm9zdGRpbmMgLWlzeXN0ZW0gJChzaGVsbCAkKENDKSAtcHJpbnQtZmlsZS1uYW1lPWluY2x1ZGUpCitDSEVDS0ZMQUdTICAgICArPSAkKE5PU1RESU5DX0ZMQUdTKQorCiAjIHdhcm4gYWJvdXQgQzk5IGRlY2xhcmF0aW9uIGFmdGVyIHN0YXRlbWVudAogQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQsKQogCkBAIC0xMTg4LDggKzExOTAsOCBAQAogcXVpZXRfY21kX3RhZ3MgPSBNQUtFICAgJEAKIGRlZmluZSBjbWRfdGFncwogCXJtIC1mICRAOyBcCi0JQ1RBR1NGPWBjdGFncyAtLXZlcnNpb24gfCBncmVwIC1pIGV4dWJlcmFudCA+L2Rldi9udWxsICYmIGVjaG8gIi1JIF9faW5pdGRhdGEsX19leGl0ZGF0YSxFWFBPUlRfU1lNQk9MLEVYUE9SVF9TWU1CT0xfR1BMImA7IFwKLQkkKGFsbC1zb3VyY2VzKSB8IHhhcmdzIGN0YWdzICQkQ1RBR1NGIC1hIC0tZXh0cmE9K2YKKwlDVEFHU0Y9YGN0YWdzIC0tdmVyc2lvbiB8IGdyZXAgLWkgZXh1YmVyYW50ID4vZGV2L251bGwgJiYgZWNobyAiLUkgX19pbml0ZGF0YSxfX2V4aXRkYXRhLEVYUE9SVF9TWU1CT0wsRVhQT1JUX1NZTUJPTF9HUEwgLS1leHRyYT0rZiJgOyBcCisJJChhbGwtc291cmNlcykgfCB4YXJncyBjdGFncyAkJENUQUdTRiAtYQogZW5kZWYKIAogVEFHUzogRk9SQ0UKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCAwYzc5YjlkLi5mN2M5NjYzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC0yODAsNiArMjgwLDEwIEBACiAJICAoTUNBKSBvciBWRVNBLiAgSVNBIGlzIGFuIG9sZGVyIHN5c3RlbSwgbm93IGJlaW5nIGRpc3BsYWNlZCBieSBQQ0k7CiAJICBuZXdlciBib2FyZHMgZG9uJ3Qgc3VwcG9ydCBpdC4gIElmIHlvdSBoYXZlIElTQSwgc2F5IFksIG90aGVyd2lzZSBOLgogCitjb25maWcgSVNBX0RNQV9BUEkKKwlib29sCisJZGVmYXVsdCB5CisKIGNvbmZpZyBQQ0kKIAlib29sCiAJZGVwZW5kcyBvbiAhQUxQSEFfSkVOU0VOCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKaW5kZXggYjVkMGZkMi4uNjRlNDUwZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwpAQCAtNDU3LDIyICs0NTcsNiBAQAogCXJldHVybiAwOwogfQogCi1hc21saW5rYWdlIGxvbmcKLW9zZl9zaG1hdChpbnQgc2htaWQsIHZvaWQgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnKQotewotCXVuc2lnbmVkIGxvbmcgcmFkZHI7Ci0JbG9uZyBlcnI7Ci0KLQllcnIgPSBkb19zaG1hdChzaG1pZCwgc2htYWRkciwgc2htZmxnLCAmcmFkZHIpOwotCi0JLyoKLQkgKiBUaGlzIHdvcmtzIGJlY2F1c2UgYWxsIHVzZXItbGV2ZWwgYWRkcmVzc2VzIGFyZQotCSAqIG5vbi1uZWdhdGl2ZSBsb25ncyEKLQkgKi8KLQlyZXR1cm4gZXJyID8gZXJyIDogKGxvbmcpcmFkZHI7Ci19Ci0KLQogLyoKICAqIFRoZSBmb2xsb3dpbmcgc3R1ZmYgc2hvdWxkIG1vdmUgaW50byBhIGhlYWRlciBmaWxlIHNob3VsZCBpdCBldmVyCiAgKiBiZSBsYWJlbGVkICJvZmZpY2lhbGx5IHN1cHBvcnRlZC4iICBSaWdodCBub3csIHRoZXJlIGlzIGp1c3QgZW5vdWdoCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jCmluZGV4IGQwMDU4MzEuLmJiZDM3NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtMzM1LDcgKzMzNiw3IEBACiAJCS8qIGNvbnRpbnVlIGFuZCBzdG9wIGF0IG5leHQgKHJldHVybiBmcm9tKSBzeXNjYWxsICovCiAJY2FzZSBQVFJBQ0VfQ09OVDogICAgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkKIAkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKQEAgLTM2NSw3ICszNjYsNyBAQAogCiAJY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDogIC8qIGV4ZWN1dGUgc2luZ2xlIGluc3RydWN0aW9uLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJLyogTWFyayBzaW5nbGUgc3RlcHBpbmcuICAqLwogCQljaGlsZC0+dGhyZWFkX2luZm8tPmJwdF9uc2F2ZWQgPSAtMTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUwppbmRleCAzODY0YjMzLi4wNTIxMjA4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCkBAIC0yMjcsNyArMjI3LDcgQEAKIAkucXVhZCBzeXNfc2Vtb3AKIAkucXVhZCBvc2ZfdXRzbmFtZQogCS5xdWFkIHN5c19sY2hvd24KLQkucXVhZCBvc2Zfc2htYXQKKwkucXVhZCBzeXNfc2htYXQKIAkucXVhZCBzeXNfc2htY3RsCQkJLyogMjEwICovCiAJLnF1YWQgc3lzX3NobWR0CiAJLnF1YWQgc3lzX3NobWdldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggNDA1NTExNS4uYmYzOTdhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC04NSw2ICs4NSw3IEBACiBjb25maWcgQVJDSF9DTFBTNzUwMAogCWJvb2wgIkNpcnJ1cy1DTC1QUzc1MDBGRSIKIAlzZWxlY3QgVElNRVJfQUNPUk4KKwlzZWxlY3QgSVNBCiAKIGNvbmZpZyBBUkNIX0NMUFM3MTFYCiAJYm9vbCAiQ0xQUzcxMXgvRVA3MjF4LWJhc2VkIgpAQCAtOTYsNiArOTcsNyBAQAogCiBjb25maWcgQVJDSF9FQlNBMTEwCiAJYm9vbCAiRUJTQS0xMTAiCisJc2VsZWN0IElTQQogCWhlbHAKIAkgIFRoaXMgaXMgYW4gZXZhbHVhdGlvbiBib2FyZCBmb3IgdGhlIFN0cm9uZ0FSTSBwcm9jZXNzb3IgYXZhaWxhYmxlCiAJICBmcm9tIERpZ2l0YWwuIEl0IGhhcyBsaW1pdGVkIGhhcmR3YXJlIG9uLWJvYXJkLCBpbmNsdWRpbmcgYW4gb25ib2FyZApAQCAtMTIwLDEzICsxMjIsMTYgQEAKIAogY29uZmlnIEFSQ0hfSU9QM1hYCiAJYm9vbCAiSU9QM3h4LWJhc2VkIgorCXNlbGVjdCBQQ0kKIAogY29uZmlnIEFSQ0hfSVhQNFhYCiAJYm9vbCAiSVhQNHh4LWJhc2VkIgogCXNlbGVjdCBETUFCT1VOQ0UKKwlzZWxlY3QgUENJCiAKIGNvbmZpZyBBUkNIX0lYUDIwMDAKIAlib29sICJJWFAyNDAwLzI4MDAtYmFzZWQiCisJc2VsZWN0IFBDSQogCiBjb25maWcgQVJDSF9MNzIwMAogCWJvb2wgIkxpbmtVcC1MNzIwMCIKQEAgLTE1NSw2ICsxNjAsOCBAQAogCiBjb25maWcgQVJDSF9TQTExMDAKIAlib29sICJTQTExMDAtYmFzZWQiCisJc2VsZWN0IElTQQorCXNlbGVjdCBESVNDT05USUdNRU0KIAogY29uZmlnIEFSQ0hfUzNDMjQxMAogCWJvb2wgIlNhbXN1bmcgUzNDMjQxMCIKQEAgLTE2NSw2ICsxNzIsOSBAQAogCiBjb25maWcgQVJDSF9TSEFSSwogCWJvb2wgIlNoYXJrIgorCXNlbGVjdCBJU0EKKwlzZWxlY3QgSVNBX0RNQQorCXNlbGVjdCBQQ0kKIAogY29uZmlnIEFSQ0hfTEg3QTQwWAogCWJvb2wgIlNoYXJwIExIN0E0MFgiCkBAIC0yNTIsOCArMjYyLDYgQEAKIAogY29uZmlnIElTQQogCWJvb2wKLQlkZXBlbmRzIG9uIEZPT1RCUklER0VfSE9TVCB8fCBBUkNIX1NIQVJLIHx8IEFSQ0hfQ0xQUzc1MDAgfHwgQVJDSF9FQlNBMTEwIHx8IEFSQ0hfQ0RCODk3MTIgfHwgQVJDSF9FREI3MjExIHx8IEFSQ0hfU0ExMTAwIHx8IEFSQ0hfTVgxQURTCi0JZGVmYXVsdCB5CiAJaGVscAogCSAgRmluZCBvdXQgd2hldGhlciB5b3UgaGF2ZSBJU0Egc2xvdHMgb24geW91ciBtb3RoZXJib2FyZC4gIElTQSBpcyB0aGUKIAkgIG5hbWUgb2YgYSBidXMgc3lzdGVtLCBpLmUuIHRoZSB3YXkgdGhlIENQVSB0YWxrcyB0byB0aGUgb3RoZXIgc3R1ZmYKQEAgLTI2MywxMiArMjcxLDEzIEBACiAKIGNvbmZpZyBJU0FfRE1BCiAJYm9vbAotCWRlcGVuZHMgb24gRk9PVEJSSURHRV9IT1NUIHx8IEFSQ0hfU0hBUksKKworY29uZmlnIElTQV9ETUFfQVBJCisJYm9vbAogCWRlZmF1bHQgeQogCiBjb25maWcgUENJCiAJYm9vbCAiUENJIHN1cHBvcnQiIGlmIEFSQ0hfSU5URUdSQVRPUl9BUAotCWRlZmF1bHQgeSBpZiBBUkNIX1NIQVJLIHx8IEZPT1RCUklER0VfSE9TVCB8fCBBUkNIX0lPUDNYWCB8fCBBUkNIX0lYUDRYWCB8fCBBUkNIX0lYUDIwMDAKIAloZWxwCiAJICBGaW5kIG91dCB3aGV0aGVyIHlvdSBoYXZlIGEgUENJIG1vdGhlcmJvYXJkLiBQQ0kgaXMgdGhlIG5hbWUgb2YgYQogCSAgYnVzIHN5c3RlbSwgaS5lLiB0aGUgd2F5IHRoZSBDUFUgdGFsa3MgdG8gdGhlIG90aGVyIHN0dWZmIGluc2lkZQpAQCAtMjk2LDcgKzMwNSw3IEBACiAKIGNvbmZpZyBTTVAKIAlib29sICJTeW1tZXRyaWMgTXVsdGktUHJvY2Vzc2luZyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBuCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgIyYmIG4KIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQogCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgpAQCAtMzM2LDggKzM0NSw3IEBACiAKIGNvbmZpZyBESVNDT05USUdNRU0KIAlib29sCi0JZGVwZW5kcyBvbiBBUkNIX0VEQjcyMTEgfHwgQVJDSF9TQTExMDAgfHwgKEFSQ0hfTEg3QTQwWCAmJiAhTEg3QTQwWF9DT05USUdNRU0pCi0JZGVmYXVsdCB5CisJZGVmYXVsdCAoQVJDSF9MSDdBNDBYICYmICFMSDdBNDBYX0NPTlRJR01FTSkKIAloZWxwCiAJICBTYXkgWSB0byBzdXBwb3J0IGVmZmljaWVudCBoYW5kbGluZyBvZiBkaXNjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeSwKIAkgIGZvciBhcmNoaXRlY3R1cmVzIHdoaWNoIGFyZSBlaXRoZXIgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCmluZGV4IGMwZTdhZmYuLjdjN2Y0NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtMTgsNDggKzE4LDMwIEBACiAgKiBQbGVhc2Ugc2VsZWN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdoZW4gdHVybmluZyBvbiBkZWJ1Z2dpbmcuCiAgKi8KICNpZmRlZiBERUJVRwotI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0RDMjEyODVfUE9SVCkKLQkJLm1hY3JvCWxvYWRzcCwgcmIKLQkJbW92CVxyYiwgIzB4NDIwMDAwMDAKLQkJLmVuZG0KLQkJLm1hY3JvCXdyaXRlYiwgcmIKLQkJc3RyCVxyYiwgW3IzLCAjMHgxNjBdCi0JCS5lbmRtCi0jZWxpZiBkZWZpbmVkKENPTkZJR19ERUJVR19JQ0VEQ0MpCisKKyNpbmNsdWRlIDxhc20vYXJjaC9kZWJ1Zy1tYWNyby5TPgorCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfSUNFRENDKQogCQkubWFjcm8JbG9hZHNwLCByYgogCQkuZW5kbQotCQkubWFjcm8gd3JpdGViLCByYgotCQltY3IJcDE0LCAwLCBccmIsIGMwLCBjMSwgMAorCQkubWFjcm8gd3JpdGViLCBjaCwgcmIKKwkJbWNyCXAxNCwgMCwgXGNoLCBjMCwgYzEsIDAKIAkJLmVuZG0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0ZPT1RCUklER0UpCisjZWxzZQorCQkubWFjcm8Jd3JpdGViLAljaCwgcmIKKwkJc2VuZHVhcnQgXGNoLCBccmIKKwkJLmVuZG0KKworI2lmIGRlZmluZWQoQ09ORklHX0ZPT1RCUklER0UpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19BUkNIX1JQQykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfSU5URUdSQVRPUikgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfUFhBKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9JWFA0WFgpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19BUkNIX0lYUDIwMDApIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19BUkNIX0xIN0E0MFgpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19BUkNIX09NQVApCiAJCS5tYWNybwlsb2Fkc3AsCXJiCi0JCW1vdglccmIsICMweDdjMDAwMDAwCi0JCS5lbmRtCi0JCS5tYWNybwl3cml0ZWIsCXJiCi0JCXN0cmIJXHJiLCBbcjMsICMweDNmOF0KLQkJLmVuZG0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfUlBDKQotCQkubWFjcm8JbG9hZHNwLAlyYgotCQltb3YJXHJiLCAjMHgwMzAwMDAwMAotCQlvcnIJXHJiLCBccmIsICMweDAwMDEwMDAwCi0JCS5lbmRtCi0JCS5tYWNybwl3cml0ZWIsCXJiCi0JCXN0cmIJXHJiLCBbcjMsICMweDNmOCA8PCAyXQotCQkuZW5kbQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JTlRFR1JBVE9SKQotCQkubWFjcm8JbG9hZHNwLCByYgotCQltb3YJXHJiLCAjMHgxNjAwMDAwMAotCQkuZW5kbQotCQkubWFjcm8Jd3JpdGViLCByYgotCQlzdHJiCVxyYiwgW3IzLCAjMF0KLQkJLmVuZG0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfUFhBKSAvKiBYc2NhbGUtdHlwZSAqLwotCQkubWFjcm8gCWxvYWRzcCwgcmIKLQkJbW92CVxyYiwgIzB4NDAwMDAwMDAKLQkJb3JyCVxyYiwgXHJiLCAjMHgwMDEwMDAwMAotCQkuZW5kbQotCQkubWFjcm8Jd3JpdGViLCByYgotCQlzdHJiCVxyYiwgW3IzLCAjMF0KKwkJYWRkcnVhcnQgXHJiCiAJCS5lbmRtCiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX1NBMTEwMCkKIAkJLm1hY3JvCWxvYWRzcCwgcmIKQEAgLTcwLDY1ICs1MiwyMiBAQAogCQlhZGQJXHJiLCBccmIsICMweDAwMDEwMDAwCUAgU2VyMQogIyAgZW5kaWYKIAkJLmVuZG0KLQkJLm1hY3JvCXdyaXRlYiwgcmIKLQkJc3RyCVxyYiwgW3IzLCAjMHgxNF0JQCBVVERSCi0JCS5lbmRtCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lYUDRYWCkKLQkJLm1hY3JvCWxvYWRzcCwgcmIKLQkJbW92CVxyYiwgIzB4YzgwMDAwMDAKLQkJLmVuZG0KLQkJLm1hY3JvCXdyaXRlYiwgcmIKLQkJc3RyCVxyYiwgW3IzLCAjMF0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfSVhQMjAwMCkKLQkJLm1hY3JvCWxvYWRzcCwgcmIKLQkJbW92CVxyYiwgIzB4YzAwMDAwMDAKLQkJb3JyCVxyYiwgXHJiLCAjMHgwMDAzMDAwMAotCQkuZW5kbQotCQkubWFjcm8Jd3JpdGViLCByYgotCQlzdHIJXHJiLCBbcjMsICMwXQotCQkuZW5kbQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9MSDdBNDBYKQotCQkubWFjcm8JbG9hZHNwLCByYgotCQlsZHIJXHJiLCA9MHg4MDAwMDcwMAlAIFVBUlQyIFVBUlRCQVNFCi0JCS5lbmRtCi0JCS5tYWNybwl3cml0ZWIsIHJiCi0JCXN0cmIJXHJiLCBbcjMsICMwXQotCQkuZW5kbQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQKQotCQkubWFjcm8gIGxvYWRzcCwgcmIKLQkJbW92CVxyYiwgIzB4ZmYwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKLQkJYWRkCVxyYiwgXHJiLCAjMHgwMGZiMDAwMAotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMpCi0JCWFkZAlccmIsIFxyYiwgIzB4MDAwMDA4MDAKLSNlbmRpZgotI2lmZGVmIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzCi0JCWFkZAlccmIsIFxyYiwgIzB4MDAwMDkwMDAKLSNlbmRpZgotCQkuZW5kbQotCQkubWFjcm8Jd3JpdGViLCByYgotCQlzdHJiCVxyYiwgW3IzXQotCQkuZW5kbQogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JT1AzMzEpCiAJCS5tYWNybyBsb2Fkc3AsIHJiCiAgICAgICAgICAgICAgICAgbW92ICAgCVxyYiwgIzB4ZmYwMDAwMDAKICAgICAgICAgICAgICAgICBvcnIgICAgIFxyYiwgXHJiLCAjMHgwMGZmMDAwMAogICAgICAgICAgICAgICAgIG9yciAgICAgXHJiLCBccmIsICMweDAwMDBmNzAwICAgQCBsb2NhdGlvbiBvZiB0aGUgVUFSVAogCQkuZW5kbQotCQkubWFjcm8Jd3JpdGViLCByYgotCQlzdHIJXHJiLCBbcjMsICMwXQotCQkuZW5kbQogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9TM0MyNDEwKQotCQkJLm1hY3JvIGxvYWRzcCwgcmIKKwkJLm1hY3JvIGxvYWRzcCwgcmIKIAkJbW92CVxyYiwgIzB4NTAwMDAwMDAKIAkJYWRkCVxyYiwgXHJiLCAjMHg0MDAwICogQ09ORklHX1MzQzI0MTBfTE9XTEVWRUxfVUFSVF9QT1JUCiAJCS5lbmRtCi0JCS5tYWNybwl3cml0ZWIsIHJiCi0JCXN0cmIJXHJiLCBbcjMsICMweDIwXQotCQkuZW5kbQogI2Vsc2UKICNlcnJvciBubyBzZXJpYWwgYXJjaGl0ZWN0dXJlIGRlZmluZWQKICNlbmRpZgogI2VuZGlmCisjZW5kaWYKIAogCQkubWFjcm8Ja3B1dGMsdmFsCiAJCW1vdglyMCwgXHZhbApAQCAtNzM0LDcgKzY3Myw3IEBACiAxOgkJbGRyYglyMiwgW3IwXSwgIzEKIAkJdGVxCXIyLCAjMAogCQltb3ZlcQlwYywgbHIKLTI6CQl3cml0ZWIJcjIKKzI6CQl3cml0ZWIJcjIsIHIzCiAJCW1vdglyMSwgIzB4MDAwMjAwMDAKIDM6CQlzdWJzCXIxLCByMSwgIzEKIAkJYm5lCTNiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vcnRjdGltZS5jIGIvYXJjaC9hcm0vY29tbW9uL3J0Y3RpbWUuYwppbmRleCBjMzk3ZTcxLi43MmIwM2YyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vcnRjdGltZS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9ydGN0aW1lLmMKQEAgLTE0MSwxMCArMTQxLDEwIEBACiAJbmV4dC0+dG1fc2VjID0gYWxybS0+dG1fc2VjOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRjX3JlYWRfdGltZShzdHJ1Y3QgcnRjX29wcyAqb3BzLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQorc3RhdGljIGlubGluZSBpbnQgcnRjX3JlYWRfdGltZShzdHJ1Y3QgcnRjX29wcyAqb3BzLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCW1lbXNldCh0bSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOwotCW9wcy0+cmVhZF90aW1lKHRtKTsKKwlyZXR1cm4gb3BzLT5yZWFkX3RpbWUodG0pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBydGNfc2V0X3RpbWUoc3RydWN0IHJ0Y19vcHMgKm9wcywgc3RydWN0IHJ0Y190aW1lICp0bSkKQEAgLTE2Myw4ICsxNjMsNyBAQAogCWludCByZXQgPSAtRUlOVkFMOwogCWlmIChvcHMtPnJlYWRfYWxhcm0pIHsKIAkJbWVtc2V0KGFscm0sIDAsIHNpemVvZihzdHJ1Y3QgcnRjX3drYWxybSkpOwotCQlvcHMtPnJlYWRfYWxhcm0oYWxybSk7Ci0JCXJldCA9IDA7CisJCXJldCA9IG9wcy0+cmVhZF9hbGFybShhbHJtKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI4Myw3ICsyODIsOSBAQAogCQlicmVhazsKIAogCWNhc2UgUlRDX1JEX1RJTUU6Ci0JCXJ0Y19yZWFkX3RpbWUob3BzLCAmdG0pOworCQlyZXQgPSBydGNfcmVhZF90aW1lKG9wcywgJnRtKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOwogCQlyZXQgPSBjb3B5X3RvX3VzZXIodWFyZywgJnRtLCBzaXplb2YodG0pKTsKIAkJaWYgKHJldCkKIAkJCXJldCA9IC1FRkFVTFQ7CkBAIC00MjQsMTUgKzQyNSwxNSBAQAogCXN0cnVjdCBydGNfdGltZSB0bTsKIAljaGFyICpwID0gcGFnZTsKIAotCXJ0Y19yZWFkX3RpbWUob3BzLCAmdG0pOwotCi0JcCArPSBzcHJpbnRmKHAsCi0JCSJydGNfdGltZVx0OiAlMDJkOiUwMmQ6JTAyZFxuIgotCQkicnRjX2RhdGVcdDogJTA0ZC0lMDJkLSUwMmRcbiIKLQkJInJ0Y19lcG9jaFx0OiAlMDRsdVxuIiwKLQkJdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMsCi0JCXRtLnRtX3llYXIgKyAxOTAwLCB0bS50bV9tb24gKyAxLCB0bS50bV9tZGF5LAotCQlydGNfZXBvY2gpOworCWlmIChydGNfcmVhZF90aW1lKG9wcywgJnRtKSA9PSAwKSB7CisJCXAgKz0gc3ByaW50ZihwLAorCQkJInJ0Y190aW1lXHQ6ICUwMmQ6JTAyZDolMDJkXG4iCisJCQkicnRjX2RhdGVcdDogJTA0ZC0lMDJkLSUwMmRcbiIKKwkJCSJydGNfZXBvY2hcdDogJTA0bHVcbiIsCisJCQl0bS50bV9ob3VyLCB0bS50bV9taW4sIHRtLnRtX3NlYywKKwkJCXRtLnRtX3llYXIgKyAxOTAwLCB0bS50bV9tb24gKyAxLCB0bS50bV9tZGF5LAorCQkJcnRjX2Vwb2NoKTsKKwl9CiAKIAlpZiAocnRjX3JlYWRfYWxhcm0ob3BzLCAmYWxybSkgPT0gMCkgewogCQlwICs9IHNwcmludGYocCwgImFscm1fdGltZVx0OiAiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKaW5kZXggZDM2Zjk5MS4uN2JlMzUyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcKQEAgLTEzMyw3ICsxMzMsNyBAQAogIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCw5NjAwIHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgbWVtPTY0TUAweDAgcGNpPWZpcm13YXJlIgorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsOTYwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIG1lbT02NE1AMHgwIgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQppbmRleCAwN2E1NmZmLi40YTJhZjU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCkBAIC0zMSw4ICszMSwzIEBACiBvYmotJChDT05GSUdfREVCVUdfTEwpCSs9IGRlYnVnLm8KIAogZXh0cmEteSA6PSAkKGhlYWQteSkgaW5pdF90YXNrLm8gdm1saW51eC5sZHMKLQotIyBTcGVsbCBvdXQgc29tZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmVuJ3QgYXV0b21hdGljYWxseSBmaWd1cmVkIG91dAotJChvYmopL2VudHJ5LWFybXYubzogCSQob2JqKS9lbnRyeS1oZWFkZXIuUyBpbmNsdWRlL2FzbS1hcm0vY29uc3RhbnRzLmgKLSQob2JqKS9lbnRyeS1jb21tb24ubzogCSQob2JqKS9lbnRyeS1oZWFkZXIuUyBpbmNsdWRlL2FzbS1hcm0vY29uc3RhbnRzLmggXAotCQkJJChvYmopL2NhbGxzLlMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggOTlkNDMyNS4uYzFmZjRkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTY0LDYgKzY0LDI2IEBACiAgIERFRklORShUSV9WRlBTVEFURSwJCW9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgdmZwc3RhdGUpKTsKICAgREVGSU5FKFRJX0lXTU1YVF9TVEFURSwJKG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZnBzdGF0ZSkrNCkmfjcpOwogICBCTEFOSygpOworICBERUZJTkUoU19SMCwJCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX3IwKSk7CisgIERFRklORShTX1IxLAkJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBBUk1fcjEpKTsKKyAgREVGSU5FKFNfUjIsCQkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yMikpOworICBERUZJTkUoU19SMywJCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX3IzKSk7CisgIERFRklORShTX1I0LAkJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBBUk1fcjQpKTsKKyAgREVGSU5FKFNfUjUsCQkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yNSkpOworICBERUZJTkUoU19SNiwJCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX3I2KSk7CisgIERFRklORShTX1I3LAkJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBBUk1fcjcpKTsKKyAgREVGSU5FKFNfUjgsCQkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yOCkpOworICBERUZJTkUoU19SOSwJCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX3I5KSk7CisgIERFRklORShTX1IxMCwJCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX3IxMCkpOworICBERUZJTkUoU19GUCwJCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX2ZwKSk7CisgIERFRklORShTX0lQLAkJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBBUk1faXApKTsKKyAgREVGSU5FKFNfU1AsCQkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9zcCkpOworICBERUZJTkUoU19MUiwJCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX2xyKSk7CisgIERFRklORShTX1BDLAkJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBBUk1fcGMpKTsKKyAgREVGSU5FKFNfUFNSLAkJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBBUk1fY3BzcikpOworICBERUZJTkUoU19PTERfUjAsCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX09SSUdfcjApKTsKKyAgREVGSU5FKFNfRlJBTUVfU0laRSwJCXNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworICBCTEFOSygpOwogI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CiAgIERFRklORShNTV9DT05URVhUX0lELAkJb2Zmc2V0b2Yoc3RydWN0IG1tX3N0cnVjdCwgY29udGV4dC5pZCkpOwogICBCTEFOSygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggYmIyN2MzMS4uNGViMzYxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC0xNCwxMiArMTQsMTIgQEAKICAqICBpdCB0byBzYXZlIHdyb25nIHZhbHVlcy4uLiAgQmUgYXdhcmUhCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLSNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vZ2x1ZS5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vdmZwbWFjcm9zLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CQkvKiBzaG91bGQgYmUgbW92ZWQgaW50byBlbnRyeS1tYWNyby5TICovCisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgkJLyogc2hvdWxkIGJlIG1vdmVkIGludG8gZW50cnktbWFjcm8uUyAqLworI2luY2x1ZGUgPGFzbS9hcmNoL2VudHJ5LW1hY3JvLlM+CiAKICNpbmNsdWRlICJlbnRyeS1oZWFkZXIuUyIKIApAQCAtMTE4LDcgKzExOCw3IEBACiAJQAogCUAgSVJRcyBvZmYgYWdhaW4gYmVmb3JlIHB1bGxpbmcgcHJlc2VydmVkIGRhdGEgb2ZmIHRoZSBzdGFjawogCUAKLQlkaXNhYmxlX2lycSByMAorCWRpc2FibGVfaXJxCiAKIAlACiAJQCByZXN0b3JlIFNQU1IgYW5kIHJlc3RhcnQgdGhlIGluc3RydWN0aW9uCkBAIC0xOTgsNyArMTk4LDcgQEAKIAlACiAJQCBJUlFzIG9mZiBhZ2FpbiBiZWZvcmUgcHVsbGluZyBwcmVzZXJ2ZWQgZGF0YSBvZmYgdGhlIHN0YWNrCiAJQAotMToJZGlzYWJsZV9pcnEgcjAKKzE6CWRpc2FibGVfaXJxCiAKIAlACiAJQCByZXN0b3JlIFNQU1IgYW5kIHJlc3RhcnQgdGhlIGluc3RydWN0aW9uCkBAIC0yMzIsNyArMjMyLDcgQEAKIAlACiAJQCBJUlFzIG9mZiBhZ2FpbiBiZWZvcmUgcHVsbGluZyBwcmVzZXJ2ZWQgZGF0YSBvZmYgdGhlIHN0YWNrCiAJQAotCWRpc2FibGVfaXJxIHIwCisJZGlzYWJsZV9pcnEKIAogCUAKIAlAIHJlc3RvcmUgU1BTUiBhbmQgcmVzdGFydCB0aGUgaW5zdHJ1Y3Rpb24KQEAgLTI2OSw2ICsyNjksMTIgQEAKIAlhZGQJcjUsIHNwLCAjU19QQwogCWxkbWlhCXI3LCB7cjIgLSByNH0JCQlAIEdldCBVU1IgcGMsIGNwc3IKIAorI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKKwlAIG1ha2Ugc3VyZSBvdXIgdXNlciBzcGFjZSBhdG9taWMgaGVscGVyIGlzIGFib3J0ZWQKKwljbXAJcjIsICNWSVJUX09GRlNFVAorCWJpY2hzCXIzLCByMywgI1BTUl9aX0JJVAorI2VuZGlmCisKIAlACiAJQCBXZSBhcmUgbm93IHJlYWR5IHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyBibGFua3Mgb24gdGhlIHN0YWNrOgogCUAKQEAgLTMxNiw3ICszMjIsNyBAQAogCUAKIAlAIElSUXMgb24sIHRoZW4gY2FsbCB0aGUgbWFpbiBoYW5kbGVyCiAJQAotCWVuYWJsZV9pcnEgcjIKKwllbmFibGVfaXJxCiAJbW92CXIyLCBzcAogCWFkcglsciwgcmV0X2Zyb21fZXhjZXB0aW9uCiAJYglkb19EYXRhQWJvcnQKQEAgLTQxOCw3ICs0MjQsNyBAQAogCW1vdmNzcwlyNywgcjUsIGxzciAjKFRJRl9VU0lOR19JV01NWFQgKyAxKQogCWJjcwlpd21teHRfdGFza19lbmFibGUKICNlbmRpZgotCWVuYWJsZV9pcnEgcjcKKwllbmFibGVfaXJxCiAJYWRkCXBjLCBwYywgcjgsIGxzciAjNgogCW1vdglyMCwgcjAKIApAQCAtNDcyLDcgKzQ3OCw3IEBACiBfX3BhYnRfdXNyOgogCXVzcl9lbnRyeSBhYnQKIAotCWVuYWJsZV9pcnEgcjAJCQkJQCBFbmFibGUgaW50ZXJydXB0cworCWVuYWJsZV9pcnEJCQkJQCBFbmFibGUgaW50ZXJydXB0cwogCW1vdglyMCwgcjIJCQkJQCBhZGRyZXNzIChwYykKIAltb3YJcjEsIHNwCQkJCUAgcmVncwogCWJsCWRvX1ByZWZldGNoQWJvcnQJCUAgY2FsbCBhYm9ydCBoYW5kbGVyCkBAIC00OTksOCArNTA1LDEyIEBACiAJbXJhCXI0LCByNSwgYWNjMAogCXN0bWlhICAgaXAsIHtyNCwgcjV9CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19IQVNfVExTX1JFRykKKwltY3IJcDE1LCAwLCByMywgYzEzLCBjMCwgMwkJQCBzZXQgVExTIHJlZ2lzdGVyCisjZWxpZiAhZGVmaW5lZChDT05GSUdfVExTX1JFR19FTVVMKQogCW1vdglyNCwgIzB4ZmZmZjBmZmYKLQlzdHIJcjMsIFtyNCwgIy0zXQkJCUAgU2V0IFRMUyBwdHIKKwlzdHIJcjMsIFtyNCwgIy0xNV0JCQlAIFRMUyB2YWwgYXQgMHhmZmZmMGZmMAorI2VuZGlmCiAJbWNyCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAkJQCBTZXQgZG9tYWluIHJlZ2lzdGVyCiAjaWZkZWYgQ09ORklHX1ZGUAogCUAgQWx3YXlzIGRpc2FibGUgVkZQIHNvIHdlIGNhbiBsYXppbHkgc2F2ZS9yZXN0b3JlIHRoZSBvbGQKQEAgLTUxOSwxMSArNTI5LDIwOSBAQAogCWxkbWliCXIyLCB7cjQgLSBzbCwgZnAsIHNwLCBwY30JQCBMb2FkIGFsbCByZWdzIHNhdmVkIHByZXZpb3VzbHkKIAogCV9fSU5JVAorCisvKgorICogVXNlciBoZWxwZXJzLgorICoKKyAqIFRoZXNlIGFyZSBzZWdtZW50IG9mIGtlcm5lbCBwcm92aWRlZCB1c2VyIGNvZGUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZQorICogYXQgYSBmaXhlZCBhZGRyZXNzIGluIGtlcm5lbCBtZW1vcnkuICBUaGlzIGlzIHVzZWQgdG8gcHJvdmlkZSB1c2VyIHNwYWNlCisgKiB3aXRoIHNvbWUgb3BlcmF0aW9ucyB3aGljaCByZXF1aXJlIGtlcm5lbCBoZWxwIGJlY2F1c2Ugb2YgdW5pbXBsZW1lbnRlZAorICogbmF0aXZlIGZlYXR1cmUgYW5kL29yIGluc3RydWN0aW9ucyBpbiBtYW55IEFSTSBDUFVzLiBUaGUgaWRlYSBpcyBmb3IKKyAqIHRoaXMgY29kZSB0byBiZSBleGVjdXRlZCBkaXJlY3RseSBpbiB1c2VyIG1vZGUgZm9yIGJlc3QgZWZmaWNpZW5jeSBidXQKKyAqIHdoaWNoIGlzIHRvbyBpbnRpbWF0ZSB3aXRoIHRoZSBrZXJuZWwgY291bnRlciBwYXJ0IHRvIGJlIGxlZnQgdG8gdXNlcgorICogbGlicmFyaWVzLiAgSW4gZmFjdCB0aGlzIGNvZGUgbWlnaHQgZXZlbiBkaWZmZXIgZnJvbSBvbmUgQ1BVIHRvIGFub3RoZXIKKyAqIGRlcGVuZGluZyBvbiB0aGUgYXZhaWxhYmxlICBpbnN0cnVjdGlvbiBzZXQgYW5kIHJlc3RyaWN0aW9ucyBsaWtlIG9uCisgKiBTTVAgc3lzdGVtcy4gIEluIG90aGVyIHdvcmRzLCB0aGUga2VybmVsIHJlc2VydmVzIHRoZSByaWdodCB0byBjaGFuZ2UKKyAqIHRoaXMgY29kZSBhcyBuZWVkZWQgd2l0aG91dCB3YXJuaW5nLiBPbmx5IHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZWlyCisgKiByZXN1bHRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZS4KKyAqCisgKiBFYWNoIHNlZ21lbnQgaXMgMzItYnl0ZSBhbGlnbmVkIGFuZCB3aWxsIGJlIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlIGhpZ2gKKyAqIHZlY3RvciBwYWdlLiAgTmV3IHNlZ21lbnRzIChpZiBldmVyIG5lZWRlZCkgbXVzdCBiZSBhZGRlZCBpbiBmcm9udCBvZgorICogZXhpc3Rpbmcgb25lcy4gIFRoaXMgbWVjaGFuaXNtIHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIHRoaW5ncyB0aGF0IGFyZQorICogcmVhbGx5IHNtYWxsIGFuZCBqdXN0aWZpZWQsIGFuZCBub3QgYmUgYWJ1c2VkIGZyZWVseS4KKyAqCisgKiBVc2VyIHNwYWNlIGlzIGV4cGVjdGVkIHRvIGltcGxlbWVudCB0aG9zZSB0aGluZ3MgaW5saW5lIHdoZW4gb3B0aW1pemluZworICogZm9yIGEgcHJvY2Vzc29yIHRoYXQgaGFzIHRoZSBuZWNlc3NhcnkgbmF0aXZlIHN1cHBvcnQsIGJ1dCBvbmx5IGlmIHN1Y2gKKyAqIHJlc3VsdGluZyBiaW5hcmllcyBhcmUgYWxyZWFkeSB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBlYXJsaWVyIEFSTQorICogcHJvY2Vzc29ycyBkdWUgdG8gdGhlIHVzZSBvZiB1bnN1cHBvcnRlZCBpbnN0cnVjdGlvbnMgb3RoZXIgdGhhbiB3aGF0CisgKiBpcyBwcm92aWRlZCBoZXJlLiAgSW4gb3RoZXIgd29yZHMgZG9uJ3QgbWFrZSBiaW5hcmllcyB1bmFibGUgdG8gcnVuIG9uCisgKiBlYXJsaWVyIHByb2Nlc3NvcnMganVzdCBmb3IgdGhlIHNha2Ugb2Ygbm90IHVzaW5nIHRoZXNlIGtlcm5lbCBoZWxwZXJzCisgKiBpZiB5b3VyIGNvbXBpbGVkIGNvZGUgaXMgbm90IGdvaW5nIHRvIHVzZSB0aGUgbmV3IGluc3RydWN0aW9ucyBmb3Igb3RoZXIKKyAqIHB1cnBvc2UuCisgKi8KKworCS5hbGlnbgk1CisJLmdsb2JsCV9fa3VzZXJfaGVscGVyX3N0YXJ0CitfX2t1c2VyX2hlbHBlcl9zdGFydDoKKworLyoKKyAqIFJlZmVyZW5jZSBwcm90b3R5cGU6CisgKgorICoJaW50IF9fa2VybmVsX2NtcHhjaGcoaW50IG9sZHZhbCwgaW50IG5ld3ZhbCwgaW50ICpwdHIpCisgKgorICogSW5wdXQ6CisgKgorICoJcjAgPSBvbGR2YWwKKyAqCXIxID0gbmV3dmFsCisgKglyMiA9IHB0cgorICoJbHIgPSByZXR1cm4gYWRkcmVzcworICoKKyAqIE91dHB1dDoKKyAqCisgKglyMCA9IHJldHVybmVkIHZhbHVlICh6ZXJvIG9yIG5vbi16ZXJvKQorICoJQyBmbGFnID0gc2V0IGlmIHIwID09IDAsIGNsZWFyIGlmIHIwICE9IDAKKyAqCisgKiBDbG9iYmVyZWQ6CisgKgorICoJcjMsIGlwLCBmbGFncworICoKKyAqIERlZmluaXRpb24gYW5kIHVzZXIgc3BhY2UgdXNhZ2UgZXhhbXBsZToKKyAqCisgKgl0eXBlZGVmIGludCAoX19rZXJuZWxfY21weGNoZ190KShpbnQgb2xkdmFsLCBpbnQgbmV3dmFsLCBpbnQgKnB0cik7CisgKgkjZGVmaW5lIF9fa2VybmVsX2NtcHhjaGcgKCooX19rZXJuZWxfY21weGNoZ190ICopMHhmZmZmMGZjMCkKKyAqCisgKiBBdG9taWNhbGx5IHN0b3JlIG5ld3ZhbCBpbiAqcHRyIGlmICpwdHIgaXMgZXF1YWwgdG8gb2xkdmFsIGZvciB1c2VyIHNwYWNlLgorICogUmV0dXJuIHplcm8gaWYgKnB0ciB3YXMgY2hhbmdlZCBvciBub24temVybyBpZiBubyBleGNoYW5nZSBoYXBwZW5lZC4KKyAqIFRoZSBDIGZsYWcgaXMgYWxzbyBzZXQgaWYgKnB0ciB3YXMgY2hhbmdlZCB0byBhbGxvdyBmb3IgYXNzZW1ibHkKKyAqIG9wdGltaXphdGlvbiBpbiB0aGUgY2FsbGluZyBjb2RlLgorICoKKyAqIEZvciBleGFtcGxlLCBhIHVzZXIgc3BhY2UgYXRvbWljX2FkZCBpbXBsZW1lbnRhdGlvbiBjb3VsZCBsb29rIGxpa2UgdGhpczoKKyAqCisgKiAjZGVmaW5lIGF0b21pY19hZGQocHRyLCB2YWwpIFwKKyAqCSh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCAqX19wdHIgYXNtKCJyMiIpID0gKHB0cik7IFwKKyAqCSAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3Jlc3VsdCBhc20oInIxIik7IFwKKyAqCSAgIGFzbSB2b2xhdGlsZSAoIFwKKyAqCSAgICAgICAiMTogQCBhdG9taWNfYWRkXG5cdCIgXAorICoJICAgICAgICJsZHIJcjAsIFtyMl1cblx0IiBcCisgKgkgICAgICAgIm1vdglyMywgIzB4ZmZmZjBmZmZcblx0IiBcCisgKgkgICAgICAgImFkZAlsciwgcGMsICM0XG5cdCIgXAorICoJICAgICAgICJhZGQJcjEsIHIwLCAlMlxuXHQiIFwKKyAqCSAgICAgICAiYWRkCXBjLCByMywgIygweGZmZmYwZmMwIC0gMHhmZmZmMGZmZilcblx0IiBcCisgKgkgICAgICAgImJjYwkxYiIgXAorICoJICAgICAgIDogIj0mciIgKF9fcmVzdWx0KSBcCisgKgkgICAgICAgOiAiciIgKF9fcHRyKSwgInJJTCIgKHZhbCkgXAorICoJICAgICAgIDogInIwIiwicjMiLCJpcCIsImxyIiwiY2MiLCJtZW1vcnkiICk7IFwKKyAqCSAgIF9fcmVzdWx0OyB9KQorICovCisKK19fa3VzZXJfY21weGNoZzoJCQkJQCAweGZmZmYwZmMwCisKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CisKKyNpZmRlZiBDT05GSUdfU01QICAvKiBzYW5pdHkgY2hlY2sgKi8KKyNlcnJvciAiQ09ORklHX1NNUCBvbiBhIG1hY2hpbmUgc3VwcG9ydGluZyBwcmUtQVJNdjYgcHJvY2Vzc29ycz8iCisjZW5kaWYKKworCS8qCisJICogVGhlb3J5IG9mIG9wZXJhdGlvbjoKKwkgKgorCSAqIFdlIHNldCB0aGUgWiBmbGFnIGJlZm9yZSBsb2FkaW5nIG9sZHZhbC4gSWYgZXZlciBhbiBleGNlcHRpb24KKwkgKiBvY2N1cnMgd2UgY2FuIG5vdCBiZSBzdXJlIHRoZSBsb2FkZWQgdmFsdWUgd2lsbCBzdGlsbCBiZSB0aGUgc2FtZQorCSAqIHdoZW4gdGhlIGV4Y2VwdGlvbiByZXR1cm5zLCB0aGVyZWZvcmUgdGhlIHVzZXIgZXhjZXB0aW9uIGhhbmRsZXIKKwkgKiB3aWxsIGNsZWFyIHRoZSBaIGZsYWcgd2hlbmV2ZXIgdGhlIGludGVycnVwdGVkIHVzZXIgY29kZSB3YXMKKwkgKiBhY3R1YWxseSBmcm9tIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZSAoc2VlIHRoZSB1c3JfZW50cnkgbWFjcm8pLgorCSAqCisJICogVGhlIHBvc3QtaW5jcmVtZW50IG9uIHRoZSBzdHIgaXMgdXNlZCB0byBwcmV2ZW50IGEgcmFjZSB3aXRoIGFuCisJICogZXhjZXB0aW9uIGhhcHBlbmluZyBqdXN0IGFmdGVyIHRoZSBzdHIgaW5zdHJ1Y3Rpb24gd2hpY2ggd291bGQKKwkgKiBjbGVhciB0aGUgWiBmbGFnIGFsdGhvdWdoIHRoZSBleGNoYW5nZSB3YXMgZG9uZS4KKwkgKi8KKwl0ZXEJaXAsIGlwCQkJQCBzZXQgWiBmbGFnCisJbGRyCWlwLCBbcjJdCQlAIGxvYWQgY3VycmVudCB2YWwKKwlhZGQJcjMsIHIyLCAjMQkJQCBwcmVwYXJlIHN0b3JlIHB0cgorCXRlcWVxCWlwLCByMAkJCUAgY29tcGFyZSB3aXRoIG9sZHZhbCBpZiBzdGlsbCBhbGxvd2VkCisJc3RyZXEJcjEsIFtyMywgIy0xXSEJCUAgc3RvcmUgbmV3dmFsIGlmIHN0aWxsIGFsbG93ZWQKKwlzdWJzCXIwLCByMiwgcjMJCUAgaWYgcjIgPT0gcjMgdGhlIHN0ciBvY2N1cmVkCisJbW92CXBjLCBscgorCisjZWxzZQorCisJbGRyZXgJcjMsIFtyMl0KKwlzdWJzCXIzLCByMywgcjAKKwlzdHJleGVxCXIzLCByMSwgW3IyXQorCXJzYnMJcjAsIHIzLCAjMAorCW1vdglwYywgbHIKKworI2VuZGlmCisKKwkuYWxpZ24JNQorCisvKgorICogUmVmZXJlbmNlIHByb3RvdHlwZToKKyAqCisgKglpbnQgX19rZXJuZWxfZ2V0X3Rscyh2b2lkKQorICoKKyAqIElucHV0OgorICoKKyAqCWxyID0gcmV0dXJuIGFkZHJlc3MKKyAqCisgKiBPdXRwdXQ6CisgKgorICoJcjAgPSBUTFMgdmFsdWUKKyAqCisgKiBDbG9iYmVyZWQ6CisgKgorICoJdGhlIFogZmxhZyBtaWdodCBiZSBsb3N0CisgKgorICogRGVmaW5pdGlvbiBhbmQgdXNlciBzcGFjZSB1c2FnZSBleGFtcGxlOgorICoKKyAqCXR5cGVkZWYgaW50IChfX2tlcm5lbF9nZXRfdGxzX3QpKHZvaWQpOworICoJI2RlZmluZSBfX2tlcm5lbF9nZXRfdGxzICgqKF9fa2VybmVsX2dldF90bHNfdCAqKTB4ZmZmZjBmZTApCisgKgorICogR2V0IHRoZSBUTFMgdmFsdWUgYXMgcHJldmlvdXNseSBzZXQgdmlhIHRoZSBfX0FSTV9OUl9zZXRfdGxzIHN5c2NhbGwuCisgKgorICogVGhpcyBjb3VsZCBiZSB1c2VkIGFzIGZvbGxvd3M6CisgKgorICogI2RlZmluZSBfX2tlcm5lbF9nZXRfdGxzKCkgXAorICoJKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50IF9fdmFsIGFzbSgicjAiKTsgXAorICogICAgICAgICBhc20oICJtb3YgcjAsICMweGZmZmYwZmZmOyBtb3YgbHIsIHBjOyBzdWIgcGMsIHIwLCAjMzEiIFwKKyAqCSAgICAgICAgOiAiPXIiIChfX3ZhbCkgOiA6ICJsciIsImNjIiApOyBcCisgKgkgICBfX3ZhbDsgfSkKKyAqLworCitfX2t1c2VyX2dldF90bHM6CQkJCUAgMHhmZmZmMGZlMAorCisjaWYgIWRlZmluZWQoQ09ORklHX0hBU19UTFNfUkVHKSAmJiAhZGVmaW5lZChDT05GSUdfVExTX1JFR19FTVVMKQorCisJbGRyCXIwLCBbcGMsICMoMTYgLSA4KV0JCUAgVExTIHN0b3JlZCBhdCAweGZmZmYwZmYwCisJbW92CXBjLCBscgorCisjZWxzZQorCisJbXJjCXAxNSwgMCwgcjAsIGMxMywgYzAsIDMJCUAgcmVhZCBUTFMgcmVnaXN0ZXIKKwltb3YJcGMsIGxyCisKKyNlbmRpZgorCisJLnJlcAk1CisJLndvcmQJMAkJCUAgcGFkIHVwIHRvIF9fa3VzZXJfaGVscGVyX3ZlcnNpb24KKwkuZW5kcgorCisvKgorICogUmVmZXJlbmNlIGRlY2xhcmF0aW9uOgorICoKKyAqCWV4dGVybiB1bnNpZ25lZCBpbnQgX19rZXJuZWxfaGVscGVyX3ZlcnNpb247CisgKgorICogRGVmaW5pdGlvbiBhbmQgdXNlciBzcGFjZSB1c2FnZSBleGFtcGxlOgorICoKKyAqCSNkZWZpbmUgX19rZXJuZWxfaGVscGVyX3ZlcnNpb24gKCoodW5zaWduZWQgaW50ICopMHhmZmZmMGZmYykKKyAqCisgKiBVc2VyIHNwYWNlIG1heSByZWFkIHRoaXMgdG8gZGV0ZXJtaW5lIHRoZSBjdXJlbnQgbnVtYmVyIG9mIGhlbHBlcnMKKyAqIGF2YWlsYWJsZS4KKyAqLworCitfX2t1c2VyX2hlbHBlcl92ZXJzaW9uOgkJCQlAIDB4ZmZmZjBmZmMKKwkud29yZAkoKF9fa3VzZXJfaGVscGVyX2VuZCAtIF9fa3VzZXJfaGVscGVyX3N0YXJ0KSA+PiA1KQorCisJLmdsb2JsCV9fa3VzZXJfaGVscGVyX2VuZAorX19rdXNlcl9oZWxwZXJfZW5kOgorCisKIC8qCiAgKiBWZWN0b3Igc3R1YnMuCiAgKgotICogVGhpcyBjb2RlIGlzIGNvcGllZCB0byAweDIwMCBvciAweGZmZmYwMjAwIHNvIHdlIGNhbiB1c2UgYnJhbmNoZXMgaW4gdGhlCi0gKiB2ZWN0b3JzLCByYXRoZXIgdGhhbiBsZHIncy4KKyAqIFRoaXMgY29kZSBpcyBjb3BpZWQgdG8gMHhmZmZmMDIwMCBzbyB3ZSBjYW4gdXNlIGJyYW5jaGVzIGluIHRoZQorICogdmVjdG9ycywgcmF0aGVyIHRoYW4gbGRyJ3MuICBOb3RlIHRoYXQgdGhpcyBjb2RlIG11c3Qgbm90CisgKiBleGNlZWQgMHgzMDAgYnl0ZXMuCiAgKgogICogQ29tbW9uIHN0dWIgZW50cnkgbWFjcm86CiAgKiAgIEVudGVyIGluIElSUSBtb2RlLCBzcHNyID0gU1ZDL1VTUiBDUFNSLCBsciA9IFNWQy9VU1IgUEMKQEAgLTU0NCw3ICs3NTIsNyBAQAogCUAKIAltcnMJcjEzLCBjcHNyCiAJYmljCXIxMywgcjEzLCAjTU9ERV9NQVNLCi0Jb3JyCXIxMywgcjEzLCAjTU9ERV9TVkMKKwlvcnIJcjEzLCByMTMsICNTVkNfTU9ERQogCW1zcglzcHNyX2N4c2YsIHIxMwkJCUAgc3dpdGNoIHRvIFNWQ18zMiBtb2RlCiAKIAlhbmQJbHIsIGxyLCAjMTUKQEAgLTU1Miw2ICs3NjAsNyBAQAogCW1vdnMJcGMsIGxyCQkJCUAgQ2hhbmdlcyBtb2RlIGFuZCBicmFuY2hlcwogCS5lbmRtCiAKKwkuZ2xvYmwJX19zdHVic19zdGFydAogX19zdHVic19zdGFydDoKIC8qCiAgKiBJbnRlcnJ1cHQgZGlzcGF0Y2hlcgpAQCAtNjg2LDM3ICs4OTUsMjQgQEAKIC5MQ3NhYnQ6CiAJLndvcmQJX190ZW1wX2FidAogCisJLmdsb2JsCV9fc3R1YnNfZW5kCiBfX3N0dWJzX2VuZDoKIAotCS5lcXUJX19yZWFsX3N0dWJzX3N0YXJ0LCAuTEN2ZWN0b3JzICsgMHgyMDAKKwkuZXF1CXN0dWJzX29mZnNldCwgX192ZWN0b3JzX3N0YXJ0ICsgMHgyMDAgLSBfX3N0dWJzX3N0YXJ0CiAKLS5MQ3ZlY3RvcnM6CisJLmdsb2JsCV9fdmVjdG9yc19zdGFydAorX192ZWN0b3JzX3N0YXJ0OgogCXN3aQlTWVNfRVJST1IwCi0JYglfX3JlYWxfc3R1YnNfc3RhcnQgKyAodmVjdG9yX3VuZCAtIF9fc3R1YnNfc3RhcnQpCi0JbGRyCXBjLCBfX3JlYWxfc3R1YnNfc3RhcnQgKyAoLkxDdnN3aSAtIF9fc3R1YnNfc3RhcnQpCi0JYglfX3JlYWxfc3R1YnNfc3RhcnQgKyAodmVjdG9yX3BhYnQgLSBfX3N0dWJzX3N0YXJ0KQotCWIJX19yZWFsX3N0dWJzX3N0YXJ0ICsgKHZlY3Rvcl9kYWJ0IC0gX19zdHVic19zdGFydCkKLQliCV9fcmVhbF9zdHVic19zdGFydCArICh2ZWN0b3JfYWRkcmV4Y3B0biAtIF9fc3R1YnNfc3RhcnQpCi0JYglfX3JlYWxfc3R1YnNfc3RhcnQgKyAodmVjdG9yX2lycSAtIF9fc3R1YnNfc3RhcnQpCi0JYglfX3JlYWxfc3R1YnNfc3RhcnQgKyAodmVjdG9yX2ZpcSAtIF9fc3R1YnNfc3RhcnQpCisJYgl2ZWN0b3JfdW5kICsgc3R1YnNfb2Zmc2V0CisJbGRyCXBjLCAuTEN2c3dpICsgc3R1YnNfb2Zmc2V0CisJYgl2ZWN0b3JfcGFidCArIHN0dWJzX29mZnNldAorCWIJdmVjdG9yX2RhYnQgKyBzdHVic19vZmZzZXQKKwliCXZlY3Rvcl9hZGRyZXhjcHRuICsgc3R1YnNfb2Zmc2V0CisJYgl2ZWN0b3JfaXJxICsgc3R1YnNfb2Zmc2V0CisJYgl2ZWN0b3JfZmlxICsgc3R1YnNfb2Zmc2V0CiAKLUVOVFJZKF9fdHJhcF9pbml0KQotCXN0bWZkCXNwISwge3I0IC0gcjYsIGxyfQotCi0JbW92CXIwLCAjMHhmZjAwMDAwMAotCW9ycglyMCwgcjAsICMweDAwZmYwMDAwCQlAIGhpZ2ggdmVjdG9ycyBwb3NpdGlvbgotCWFkcglyMSwgLkxDdmVjdG9ycwkJCUAgc2V0IHVwIHRoZSB2ZWN0b3JzCi0JbGRtaWEJcjEsIHtyMSwgcjIsIHIzLCByNCwgcjUsIHI2LCBpcCwgbHJ9Ci0Jc3RtaWEJcjAsIHtyMSwgcjIsIHIzLCByNCwgcjUsIHI2LCBpcCwgbHJ9Ci0KLQlhZGQJcjIsIHIwLCAjMHgyMDAKLQlhZHIJcjAsIF9fc3R1YnNfc3RhcnQJCUAgY29weSBzdHVicyB0byAweDIwMAotCWFkcglyMSwgX19zdHVic19lbmQKLTE6CWxkcglyMywgW3IwXSwgIzQKLQlzdHIJcjMsIFtyMl0sICM0Ci0JY21wCXIwLCByMQotCWJsdAkxYgotCUxPQURSRUdTKGZkLCBzcCEsIHtyNCAtIHI2LCBwY30pCisJLmdsb2JsCV9fdmVjdG9yc19lbmQKK19fdmVjdG9yc19lbmQ6CiAKIAkuZGF0YQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggNTNhN2UwZC4uM2Y4ZDBlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwpAQCAtOSwxOSArOSwxMCBAQAogICovCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKLSNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCiAjaW5jbHVkZSAiZW50cnktaGVhZGVyLlMiCiAKLS8qIAotICogV2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IFIwIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIChkdWUgdG8KLSAqIHNsb3cvZmFzdCByZXN0b3JlIHVzZXIgcmVncykuCi0gKi8KLSNpZiBTX1IwICE9IDAKLSNlcnJvciAiUGxlYXNlIGZpeCIKLSNlbmRpZgogCiAJLmFsaWduCTUKIC8qCkBAIC0zMCwxMSArMjEsMTkgQEAKICAqIHN0YWNrLgogICovCiByZXRfZmFzdF9zeXNjYWxsOgotCWRpc2FibGVfaXJxIHIxCQkJCUAgZGlzYWJsZSBpbnRlcnJ1cHRzCisJZGlzYWJsZV9pcnEJCQkJQCBkaXNhYmxlIGludGVycnVwdHMKIAlsZHIJcjEsIFt0c2ssICNUSV9GTEFHU10KIAl0c3QJcjEsICNfVElGX1dPUktfTUFTSwogCWJuZQlmYXN0X3dvcmtfcGVuZGluZwotCWZhc3RfcmVzdG9yZV91c2VyX3JlZ3MKKworCUAgZmFzdF9yZXN0b3JlX3VzZXJfcmVncworCWxkcglyMSwgW3NwLCAjU19PRkYgKyBTX1BTUl0JQCBnZXQgY2FsbGluZyBjcHNyCisJbGRyCWxyLCBbc3AsICNTX09GRiArIFNfUENdIQlAIGdldCBwYworCW1zcglzcHNyX2N4c2YsIHIxCQkJQCBzYXZlIGluIHNwc3Jfc3ZjCisJbGRtZGIJc3AsIHtyMSAtIGxyfV4JCQlAIGdldCBjYWxsaW5nIHIxIC0gbHIKKwltb3YJcjAsIHIwCisJYWRkCXNwLCBzcCwgI1NfRlJBTUVfU0laRSAtIFNfUEMKKwltb3ZzCXBjLCBscgkJCQlAIHJldHVybiAmIG1vdmUgc3Bzcl9zdmMgaW50byBjcHNyCiAKIC8qCiAgKiBPaywgd2UgbmVlZCB0byBkbyBleHRyYSBwcm9jZXNzaW5nLCBlbnRlciB0aGUgc2xvdyBwYXRoLgpAQCAtNDksNyArNDgsNyBAQAogCW1vdglyMCwgc3AJCQkJQCAncmVncycKIAltb3YJcjIsIHdoeQkJCQlAICdzeXNjYWxsJwogCWJsCWRvX25vdGlmeV9yZXN1bWUKLQlkaXNhYmxlX2lycSByMQkJCQlAIGRpc2FibGUgaW50ZXJydXB0cworCWRpc2FibGVfaXJxCQkJCUAgZGlzYWJsZSBpbnRlcnJ1cHRzCiAJYglub193b3JrX3BlbmRpbmcKIAogd29ya19yZXNjaGVkOgpAQCAtNTksMTIgKzU4LDE5IEBACiAgKi8KIEVOVFJZKHJldF90b191c2VyKQogcmV0X3Nsb3dfc3lzY2FsbDoKLQlkaXNhYmxlX2lycSByMQkJCQlAIGRpc2FibGUgaW50ZXJydXB0cworCWRpc2FibGVfaXJxCQkJCUAgZGlzYWJsZSBpbnRlcnJ1cHRzCiAJbGRyCXIxLCBbdHNrLCAjVElfRkxBR1NdCiAJdHN0CXIxLCAjX1RJRl9XT1JLX01BU0sKIAlibmUJd29ya19wZW5kaW5nCiBub193b3JrX3BlbmRpbmc6Ci0Jc2xvd19yZXN0b3JlX3VzZXJfcmVncworCUAgc2xvd19yZXN0b3JlX3VzZXJfcmVncworCWxkcglyMSwgW3NwLCAjU19QU1JdCQlAIGdldCBjYWxsaW5nIGNwc3IKKwlsZHIJbHIsIFtzcCwgI1NfUENdIQkJQCBnZXQgcGMKKwltc3IJc3Bzcl9jeHNmLCByMQkJCUAgc2F2ZSBpbiBzcHNyX3N2YworCWxkbWRiCXNwLCB7cjAgLSBscn1eCQkJQCBnZXQgY2FsbGluZyByMSAtIGxyCisJbW92CXIwLCByMAorCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUgLSBTX1BDCisJbW92cwlwYywgbHIJCQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgogCiAvKgogICogVGhpcyBpcyBob3cgd2UgcmV0dXJuIGZyb20gYSBmb3JrLgpAQCAtMTE2LDkgKzEyMiwyNiBAQAogCiAJLmFsaWduCTUKIEVOVFJZKHZlY3Rvcl9zd2kpCi0Jc2F2ZV91c2VyX3JlZ3MKKwlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCisJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIENhbGxpbmcgcjAgLSByMTIKKwlhZGQJcjgsIHNwLCAjU19QQworCXN0bWRiCXI4LCB7c3AsIGxyfV4JCQlAIENhbGxpbmcgc3AsIGxyCisJbXJzCXI4LCBzcHNyCQkJQCBjYWxsZWQgZnJvbSBub24tRklRIG1vZGUsIHNvIG9rLgorCXN0cglsciwgW3NwLCAjU19QQ10JCQlAIFNhdmUgY2FsbGluZyBQQworCXN0cglyOCwgW3NwLCAjU19QU1JdCQlAIFNhdmUgQ1BTUgorCXN0cglyMCwgW3NwLCAjU19PTERfUjBdCQlAIFNhdmUgT0xEX1IwCiAJemVyb19mcAotCWdldF9zY25vCisKKwkvKgorCSAqIEdldCB0aGUgc3lzdGVtIGNhbGwgbnVtYmVyLgorCSAqLworI2lmZGVmIENPTkZJR19BUk1fVEhVTUIKKwl0c3QJcjgsICNQU1JfVF9CSVQJCQlAIHRoaXMgaXMgU1BTUiBmcm9tIHNhdmVfdXNlcl9yZWdzCisJYWRkbmUJc2NubywgcjcsICNfX05SX1NZU0NBTExfQkFTRQlAIHB1dCBPUyBudW1iZXIgaW4KKwlsZHJlcQlzY25vLCBbbHIsICMtNF0KKyNlbHNlCisJbGRyCXNjbm8sIFtsciwgIy00XQkJCUAgZ2V0IFNXSSBpbnN0cnVjdGlvbgorI2VuZGlmCiAJYXJtNzEwX2J1Z19jaGVjayBzY25vLCBpcAogCiAjaWZkZWYgQ09ORklHX0FMSUdOTUVOVF9UUkFQCkBAIC0xMjYsMTQgKzE0OSwxNCBAQAogCWxkcglpcCwgW2lwXQogCW1jcglwMTUsIDAsIGlwLCBjMSwgYzAJCUAgdXBkYXRlIGNvbnRyb2wgcmVnaXN0ZXIKICNlbmRpZgotCWVuYWJsZV9pcnEgaXAKKwllbmFibGVfaXJxCiAKIAlzdHIJcjQsIFtzcCwgIy1TX09GRl0hCQlAIHB1c2ggZmlmdGggYXJnCiAKIAlnZXRfdGhyZWFkX2luZm8gdHNrCiAJbGRyCWlwLCBbdHNrLCAjVElfRkxBR1NdCQlAIGNoZWNrIGZvciBzeXNjYWxsIHRyYWNpbmcKIAliaWMJc2Nubywgc2NubywgIzB4ZmYwMDAwMDAJCUAgbWFzayBvZmYgU1dJIG9wLWNvZGUKLQllb3IJc2Nubywgc2NubywgI09TX05VTUJFUiA8PCAyMAlAIGNoZWNrIE9TIG51bWJlcgorCWVvcglzY25vLCBzY25vLCAjX19OUl9TWVNDQUxMX0JBU0UJQCBjaGVjayBPUyBudW1iZXIKIAlhZHIJdGJsLCBzeXNfY2FsbF90YWJsZQkJQCBsb2FkIHN5c2NhbGwgdGFibGUgcG9pbnRlcgogCXRzdAlpcCwgI19USUZfU1lTQ0FMTF9UUkFDRQkJQCBhcmUgd2UgdHJhY2luZyBzeXNjYWxscz8KIAlibmUJX19zeXNfdHJhY2UKQEAgLTE0NCw4ICsxNjcsOCBAQAogCiAJYWRkCXIxLCBzcCwgI1NfT0ZGCiAyOgltb3YJd2h5LCAjMAkJCQlAIG5vIGxvbmdlciBhIHJlYWwgc3lzY2FsbAotCWNtcAlzY25vLCAjQVJNU1dJX09GRlNFVAotCWVvcglyMCwgc2NubywgI09TX05VTUJFUiA8PCAyMAlAIHB1dCBPUyBudW1iZXIgYmFjaworCWNtcAlzY25vLCAjKF9fQVJNX05SX0JBU0UgLSBfX05SX1NZU0NBTExfQkFTRSkKKwllb3IJcjAsIHNjbm8sICNfX05SX1NZU0NBTExfQkFTRQlAIHB1dCBPUyBudW1iZXIgYmFjawogCWJjcwlhcm1fc3lzY2FsbAkKIAliCXN5c19uaV9zeXNjYWxsCQkJQCBub3QgcHJpdmF0ZSBmdW5jCiAKQEAgLTE5MCw3ICsyMTMsNyBAQAogQCByNSA9IHN5c2NhbGwgdGFibGUKIAkJLnR5cGUJc3lzX3N5c2NhbGwsICNmdW5jdGlvbgogc3lzX3N5c2NhbGw6Ci0JCWVvcglzY25vLCByMCwgI09TX05VTUJFUiA8PCAyMAorCQllb3IJc2NubywgcjAsICNfX05SX1NZU0NBTExfQkFTRQogCQljbXAJc2NubywgI19fTlJfc3lzY2FsbCAtIF9fTlJfU1lTQ0FMTF9CQVNFCiAJCWNtcG5lCXNjbm8sICNOUl9zeXNjYWxscwlAIGNoZWNrIHJhbmdlCiAJCXN0bWxvaWEJc3AsIHtyNSwgcjZ9CQlAIHNodWZmbGUgYXJncwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCmluZGV4IDQwMzlkOGMuLmEzZDQwYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKQEAgLTEsMjQgKzEsMTEgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gLyogZm9yIENPTkZJR19BUkNIX3h4eHggKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvZW50cnktbWFjcm8uUz4KLQotI2lmbmRlZiBNT0RFX1NWQwotI2RlZmluZSBNT0RFX1NWQyAweDEzCi0jZW5kaWYKLQotCS5tYWNybwl6ZXJvX2ZwCi0jaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKLQltb3YJZnAsICMwCi0jZW5kaWYKLQkuZW5kbQotCi0JLnRleHQKKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KIAogQCBCYWQgQWJvcnQgbnVtYmVycwogQCAtLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjksMTEzICsxNiw0NCBAQAogI2RlZmluZSBCQURfSVJRCQkzCiAjZGVmaW5lIEJBRF9VTkRFRklOU1RSCTQKIAotI2RlZmluZSBQVF9UUkFDRVNZUwkweDAwMDAwMDAyCi0KLUAgT1MgdmVyc2lvbiBudW1iZXIgdXNlZCBpbiBTV0lzCi1AICBSSVNDIE9TIGlzIDAKLUAgIFJJU0MgaVggaXMgOAogQAotI2RlZmluZSBPU19OVU1CRVIJOQotI2RlZmluZSBBUk1TV0lfT0ZGU0VUCTB4MDAwZjAwMDAKLQorQCBNb3N0IG9mIHRoZSBzdGFjayBmb3JtYXQgY29tZXMgZnJvbSBzdHJ1Y3QgcHRfcmVncywgYnV0IHdpdGgKK0AgdGhlIGFkZGl0aW9uIG9mIDggYnl0ZXMgZm9yIHN0b3Jpbmcgc3lzY2FsbCBhcmdzIDUgYW5kIDYuCiBACi1AIFN0YWNrIGZvcm1hdCAoZW5zdXJlZCBieSBVU0VSXyogYW5kIFNWQ18qKQotQAotI2RlZmluZSBTX0ZSQU1FX1NJWkUJNzIKLSNkZWZpbmUgU19PTERfUjAJNjgKLSNkZWZpbmUgU19QU1IJCTY0Ci0KLSNkZWZpbmUgU19QQwkJNjAKLSNkZWZpbmUgU19MUgkJNTYKLSNkZWZpbmUgU19TUAkJNTIKLSNkZWZpbmUgU19JUAkJNDgKLSNkZWZpbmUgU19GUAkJNDQKLSNkZWZpbmUgU19SMTAJCTQwCi0jZGVmaW5lIFNfUjkJCTM2Ci0jZGVmaW5lIFNfUjgJCTMyCi0jZGVmaW5lIFNfUjcJCTI4Ci0jZGVmaW5lIFNfUjYJCTI0Ci0jZGVmaW5lIFNfUjUJCTIwCi0jZGVmaW5lIFNfUjQJCTE2Ci0jZGVmaW5lIFNfUjMJCTEyCi0jZGVmaW5lIFNfUjIJCTgKLSNkZWZpbmUgU19SMQkJNAotI2RlZmluZSBTX1IwCQkwCiAjZGVmaW5lIFNfT0ZGCQk4CiAKLQkubWFjcm8Jc2V0X2Nwc3JfYywgcmVnLCBtb2RlCi0JbXNyCWNwc3JfYywgXG1vZGUKKy8qIAorICogVGhlIFNXSSBjb2RlIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IFIwIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrCisgKiAoZHVlIHRvIHNsb3cvZmFzdCByZXN0b3JlIHVzZXIgcmVncykuCisgKi8KKyNpZiBTX1IwICE9IDAKKyNlcnJvciAiUGxlYXNlIGZpeCIKKyNlbmRpZgorCisJLm1hY3JvCXplcm9fZnAKKyNpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgorCW1vdglmcCwgIzAKKyNlbmRpZgogCS5lbmRtCiAKICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgotCS5tYWNybwlkaXNhYmxlX2lycSwgdGVtcAorCS5tYWNybwlkaXNhYmxlX2lycQogCWNwc2lkCWkKIAkuZW5kbQogCi0JLm1hY3JvCWVuYWJsZV9pcnEsIHRlbXAKKwkubWFjcm8JZW5hYmxlX2lycQogCWNwc2llCWkKIAkuZW5kbQogI2Vsc2UKLQkubWFjcm8JZGlzYWJsZV9pcnEsIHRlbXAKLQlzZXRfY3Bzcl9jIFx0ZW1wLCAjUFNSX0lfQklUIHwgTU9ERV9TVkMKKwkubWFjcm8JZGlzYWJsZV9pcnEKKwltc3IJY3Bzcl9jLCAjUFNSX0lfQklUIHwgU1ZDX01PREUKIAkuZW5kbQogCi0JLm1hY3JvCWVuYWJsZV9pcnEsIHRlbXAKLQlzZXRfY3Bzcl9jIFx0ZW1wLCAjTU9ERV9TVkMKKwkubWFjcm8JZW5hYmxlX2lycQorCW1zcgljcHNyX2MsICNTVkNfTU9ERQogCS5lbmRtCiAjZW5kaWYKIAotCS5tYWNybwlzYXZlX3VzZXJfcmVncwotCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKLQlzdG1pYQlzcCwge3IwIC0gcjEyfQkJCUAgQ2FsbGluZyByMCAtIHIxMgotCWFkZAlyOCwgc3AsICNTX1BDCi0Jc3RtZGIJcjgsIHtzcCwgbHJ9XgkJCUAgQ2FsbGluZyBzcCwgbHIKLQltcnMJcjgsIHNwc3IJCQlAIGNhbGxlZCBmcm9tIG5vbi1GSVEgbW9kZSwgc28gb2suCi0Jc3RyCWxyLCBbc3AsICNTX1BDXQkJCUAgU2F2ZSBjYWxsaW5nIFBDCi0Jc3RyCXI4LCBbc3AsICNTX1BTUl0JCUAgU2F2ZSBDUFNSCi0Jc3RyCXIwLCBbc3AsICNTX09MRF9SMF0JCUAgU2F2ZSBPTERfUjAKLQkuZW5kbQotCi0JLm1hY3JvCXJlc3RvcmVfdXNlcl9yZWdzCi0JbGRyCXIxLCBbc3AsICNTX1BTUl0JCUAgR2V0IGNhbGxpbmcgY3BzcgotCWRpc2FibGVfaXJxIGlwCQkJCUAgZGlzYWJsZSBJUlFzCi0JbGRyCWxyLCBbc3AsICNTX1BDXSEJCUAgR2V0IFBDCi0JbXNyCXNwc3JfY3hzZiwgcjEJCQlAIHNhdmUgaW4gc3Bzcl9zdmMKLQlsZG1kYglzcCwge3IwIC0gbHJ9XgkJCUAgR2V0IGNhbGxpbmcgcjAgLSBscgotCW1vdglyMCwgcjAKLQlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFIC0gU19QQwotCW1vdnMJcGMsIGxyCQkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKLQkuZW5kbQotCi0vKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBJUlFzIGFscmVhZHkgZGlzYWJsZWQuCi0gKi8KLQkubWFjcm8JZmFzdF9yZXN0b3JlX3VzZXJfcmVncwotCWxkcglyMSwgW3NwLCAjU19PRkYgKyBTX1BTUl0JQCBnZXQgY2FsbGluZyBjcHNyCi0JbGRyCWxyLCBbc3AsICNTX09GRiArIFNfUENdIQlAIGdldCBwYwotCW1zcglzcHNyX2N4c2YsIHIxCQkJQCBzYXZlIGluIHNwc3Jfc3ZjCi0JbGRtZGIJc3AsIHtyMSAtIGxyfV4JCQlAIGdldCBjYWxsaW5nIHIxIC0gbHIKLQltb3YJcjAsIHIwCi0JYWRkCXNwLCBzcCwgI1NfRlJBTUVfU0laRSAtIFNfUEMKLQltb3ZzCXBjLCBscgkJCQlAIHJldHVybiAmIG1vdmUgc3Bzcl9zdmMgaW50byBjcHNyCi0JLmVuZG0KLQotLyoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggSVJRcyBhbHJlYWR5IGRpc2FibGVkLgotICovCi0JLm1hY3JvCXNsb3dfcmVzdG9yZV91c2VyX3JlZ3MKLQlsZHIJcjEsIFtzcCwgI1NfUFNSXQkJQCBnZXQgY2FsbGluZyBjcHNyCi0JbGRyCWxyLCBbc3AsICNTX1BDXSEJCUAgZ2V0IHBjCi0JbXNyCXNwc3JfY3hzZiwgcjEJCQlAIHNhdmUgaW4gc3Bzcl9zdmMKLQlsZG1kYglzcCwge3IwIC0gbHJ9XgkJCUAgZ2V0IGNhbGxpbmcgcjEgLSBscgotCW1vdglyMCwgcjAKLQlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFIC0gU19QQwotCW1vdnMJcGMsIGxyCQkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKLQkuZW5kbQotCi0JLm1hY3JvCW1hc2tfcGMsIHJkLCBybQotCS5lbmRtCi0KIAkubWFjcm8JZ2V0X3RocmVhZF9pbmZvLCByZAogCW1vdglccmQsIHNwLCBsc3IgIzEzCiAJbW92CVxyZCwgXHJkLCBsc2wgIzEzCkBAIC0xNjUsMTggKzgzLDMgQEAKIHRibAkucmVxCXI4CQlAIHN5c2NhbGwgdGFibGUgcG9pbnRlcgogd2h5CS5yZXEJcjgJCUAgTGludXggc3lzY2FsbCAoIT0gMCkKIHRzawkucmVxCXI5CQlAIGN1cnJlbnQgdGhyZWFkX2luZm8KLQotLyoKLSAqIEdldCB0aGUgc3lzdGVtIGNhbGwgbnVtYmVyLgotICovCi0JLm1hY3JvCWdldF9zY25vCi0jaWZkZWYgQ09ORklHX0FSTV9USFVNQgotCXRzdAlyOCwgI1BTUl9UX0JJVAkJQCB0aGlzIGlzIFNQU1IgZnJvbSBzYXZlX3VzZXJfcmVncwotCWFkZG5lCXNjbm8sIHI3LCAjT1NfTlVNQkVSIDw8IDIwIEAgcHV0IE9TIG51bWJlciBpbgotCWxkcmVxCXNjbm8sIFtsciwgIy00XQotCi0jZWxzZQotCW1hc2tfcGMJbHIsIGxyCi0JbGRyCXNjbm8sIFtsciwgIy00XQkJQCBnZXQgU1dJIGluc3RydWN0aW9uCi0jZW5kaWYKLQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2hlYWQuUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKaW5kZXggMTcxYjNlOC4uNDczMzg3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2hlYWQuUworKysgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNkZWZpbmUgUFJPQ0lORk9fTU1VRkxBR1MJOApAQCAtMTMxLDcgKzEzMiw3IEBACiAJLmxvbmcJcHJvY2Vzc29yX2lkCQkJQCByNAogCS5sb25nCV9fbWFjaGluZV9hcmNoX3R5cGUJCUAgcjUKIAkubG9uZwljcl9hbGlnbm1lbnQJCQlAIHI2Ci0JLmxvbmcJaW5pdF90aHJlYWRfdW5pb24rODE5MgkJQCBzcAorCS5sb25nCWluaXRfdGhyZWFkX3VuaW9uICsgVEhSRUFEX1NUQVJUX1NQIEAgc3AKIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgZnJhZ21lbnQgb2YgY29kZSBpcyBleGVjdXRlZCB3aXRoIHRoZSBNTVUgb24sIGFuZCB1c2VzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwppbmRleCAyNmVhY2QzLi44ZjE0NmE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTI1Niw4ICsyNTYsNiBAQAogc3RhdGljIHVuc2lnbmVkIGludCBucl90aHJlYWRfaW5mbzsKIAogI2RlZmluZSBFWFRSQV9UQVNLX1NUUlVDVAk0Ci0jZGVmaW5lIGxsX2FsbG9jX3Rhc2tfc3RydWN0KCkgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLDEpKQotI2RlZmluZSBsbF9mcmVlX3Rhc2tfc3RydWN0KHApIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpKHApLDEpCiAKIHN0cnVjdCB0aHJlYWRfaW5mbyAqYWxsb2NfdGhyZWFkX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewpAQCAtMjc0LDE3ICsyNzIsMTYgQEAKIAl9CiAKIAlpZiAoIXRocmVhZCkKLQkJdGhyZWFkID0gbGxfYWxsb2NfdGFza19zdHJ1Y3QoKTsKKwkJdGhyZWFkID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQorCQkJICAgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBUSFJFQURfU0laRV9PUkRFUik7CiAKLSNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKKyNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKIAkvKgogCSAqIFRoZSBzdGFjayBtdXN0IGJlIGNsZWFyZWQgaWYgeW91IHdhbnQgU1lTUlEtVCB0bwogCSAqIGdpdmUgc2Vuc2libGUgc3RhY2sgdXNhZ2UgaW5mb3JtYXRpb24KIAkgKi8KLQlpZiAodGhyZWFkKSB7Ci0JCWNoYXIgKnAgPSAoY2hhciAqKXRocmVhZDsKLQkJbWVtemVybyhwK0tFUk5FTF9TVEFDS19TSVpFLCBLRVJORUxfU1RBQ0tfU0laRSk7Ci0JfQorCWlmICh0aHJlYWQpCisJCW1lbXplcm8odGhyZWFkLCBUSFJFQURfU0laRSk7CiAjZW5kaWYKIAlyZXR1cm4gdGhyZWFkOwogfQpAQCAtMjk3LDcgKzI5NCw3IEBACiAJCXRocmVhZF9pbmZvX2hlYWQgPSBwOwogCQlucl90aHJlYWRfaW5mbyArPSAxOwogCX0gZWxzZQotCQlsbF9mcmVlX3Rhc2tfc3RydWN0KHRocmVhZCk7CisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdGhyZWFkLCBUSFJFQURfU0laRV9PUkRFUik7CiB9CiAKIC8qCkBAIC0zNTAsNyArMzQ3LDcgQEAKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IHAtPnRocmVhZF9pbmZvOwogCXN0cnVjdCBwdF9yZWdzICpjaGlsZHJlZ3M7CiAKLQljaGlsZHJlZ3MgPSAoKHN0cnVjdCBwdF9yZWdzICopKCh1bnNpZ25lZCBsb25nKXRocmVhZCArIFRIUkVBRF9TSVpFIC0gOCkpIC0gMTsKKwljaGlsZHJlZ3MgPSAoKHN0cnVjdCBwdF9yZWdzICopKCh1bnNpZ25lZCBsb25nKXRocmVhZCArIFRIUkVBRF9TVEFSVF9TUCkpIC0gMTsKIAkqY2hpbGRyZWdzID0gKnJlZ3M7CiAJY2hpbGRyZWdzLT5BUk1fcjAgPSAwOwogCWNoaWxkcmVncy0+QVJNX3NwID0gc3RhY2tfc3RhcnQ7CkBAIC00NDcsMTUgKzQ0NCwxNyBAQAogdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXVuc2lnbmVkIGxvbmcgZnAsIGxyOwotCXVuc2lnbmVkIGxvbmcgc3RhY2tfcGFnZTsKKwl1bnNpZ25lZCBsb25nIHN0YWNrX3N0YXJ0LCBzdGFja19lbmQ7CiAJaW50IGNvdW50ID0gMDsKIAlpZiAoIXAgfHwgcCA9PSBjdXJyZW50IHx8IHAtPnN0YXRlID09IFRBU0tfUlVOTklORykKIAkJcmV0dXJuIDA7CiAKLQlzdGFja19wYWdlID0gNDA5NiArICh1bnNpZ25lZCBsb25nKXAtPnRocmVhZF9pbmZvOworCXN0YWNrX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpKHAtPnRocmVhZF9pbmZvICsgMSk7CisJc3RhY2tfZW5kID0gKCh1bnNpZ25lZCBsb25nKXAtPnRocmVhZF9pbmZvKSArIFRIUkVBRF9TSVpFOworCiAJZnAgPSB0aHJlYWRfc2F2ZWRfZnAocCk7CiAJZG8gewotCQlpZiAoZnAgPCBzdGFja19wYWdlIHx8IGZwID4gNDA5MitzdGFja19wYWdlKQorCQlpZiAoZnAgPCBzdGFja19zdGFydCB8fCBmcCA+IHN0YWNrX2VuZCkKIAkJCXJldHVybiAwOwogCQlsciA9IHBjX3BvaW50ZXIgKCgodW5zaWduZWQgbG9uZyAqKWZwKVstMV0pOwogCQlpZiAoIWluX3NjaGVkX2Z1bmN0aW9ucyhscikpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZWZkN2EzNC4uY2Q5OWI4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTY5Myw3ICs2OTQsNyBAQAogCQljYXNlIFBUUkFDRV9TWVNDQUxMOgogCQljYXNlIFBUUkFDRV9DT05UOgogCQkJcmV0ID0gLUVJTzsKLQkJCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQkJYnJlYWs7CiAJCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkKIAkJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC03MjgsNyArNzI5LDcgQEAKIAkJICovCiAJCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6CiAJCQlyZXQgPSAtRUlPOwotCQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCQlicmVhazsKIAkJCWNoaWxkLT5wdHJhY2UgfD0gUFRfU0lOR0xFU1RFUDsKIAkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3N5c19hcm0uYyBiL2FyY2gvYXJtL2tlcm5lbC9zeXNfYXJtLmMKaW5kZXggN2JhNjM0Mi4uZjg5N2NlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3N5c19hcm0uYworKysgYi9hcmNoL2FybS9rZXJuZWwvc3lzX2FybS5jCkBAIC0yMjcsMTggKzIyNyw2IEBACiAJfQogfQogCi1hc21saW5rYWdlIGxvbmcgc3lzX3NobWF0KGludCBzaG1pZCwgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcsCi0JCQkgIHVuc2lnbmVkIGxvbmcgX191c2VyICphZGRyKQotewotCXVuc2lnbmVkIGxvbmcgcmV0OwotCWxvbmcgZXJyOwotCi0JZXJyID0gZG9fc2htYXQoc2htaWQsIHNobWFkZHIsIHNobWZsZywgJnJldCk7Ci0JaWYgKGVyciA9PSAwKQotCQllcnIgPSBwdXRfdXNlcihyZXQsIGFkZHIpOwotCXJldHVybiBlcnI7Ci19Ci0KIC8qIEZvcmsgYSBuZXcgdGFzayAtIHRoaXMgY3JlYXRlcyBhIG5ldyBwcm9ncmFtIHRocmVhZC4KICAqIFRoaXMgaXMgY2FsbGVkIGluZGlyZWN0bHkgdmlhIGEgc21hbGwgd3JhcHBlcgogICovCkBAIC0zMTQsNyArMzAyLDcgQEAKIAkJImIJcmV0X3RvX3VzZXIiCiAJCToKIAkJOiAiciIgKGN1cnJlbnRfdGhyZWFkX2luZm8oKSksCi0JCSAgIklyIiAoVEhSRUFEX1NJWkUgLSA4IC0gc2l6ZW9mKHJlZ3MpKSwKKwkJICAiSXIiIChUSFJFQURfU1RBUlRfU1AgLSBzaXplb2YocmVncykpLAogCQkgICJyIiAoJnJlZ3MpLAogCQkgICJJciIgKHNpemVvZihyZWdzKSkKIAkJOiAicjAiLCAicjEiLCAicjIiLCAicjMiLCAiaXAiLCAibWVtb3J5Iik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCmluZGV4IDZlMzE3MTguLjE0ZGYxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCkBAIC0yMTgsNyArMjE4LDggQEAKIAkJdHNrLT5jb21tLCB0c2stPnBpZCwgdHNrLT50aHJlYWRfaW5mbyArIDEpOwogCiAJaWYgKCF1c2VyX21vZGUocmVncykgfHwgaW5faW50ZXJydXB0KCkpIHsKLQkJZHVtcF9tZW0oIlN0YWNrOiAiLCByZWdzLT5BUk1fc3AsIDgxOTIrKHVuc2lnbmVkIGxvbmcpdHNrLT50aHJlYWRfaW5mbyk7CisJCWR1bXBfbWVtKCJTdGFjazogIiwgcmVncy0+QVJNX3NwLAorCQkJIFRIUkVBRF9TSVpFICsgKHVuc2lnbmVkIGxvbmcpdHNrLT50aHJlYWRfaW5mbyk7CiAJCWR1bXBfYmFja3RyYWNlKHJlZ3MsIHRzayk7CiAJCWR1bXBfaW5zdHIocmVncyk7CiAJfQpAQCAtNDUwLDEzICs0NTEsMTcgQEAKIAogCWNhc2UgTlIoc2V0X3Rscyk6CiAJCXRocmVhZC0+dHBfdmFsdWUgPSByZWdzLT5BUk1fcjA7CisjaWYgZGVmaW5lZChDT05GSUdfSEFTX1RMU19SRUcpCisJCWFzbSAoIm1jciBwMTUsIDAsICUwLCBjMTMsIGMwLCAzIiA6IDogInIiIChyZWdzLT5BUk1fcjApICk7CisjZWxpZiAhZGVmaW5lZChDT05GSUdfVExTX1JFR19FTVVMKQogCQkvKgotCQkgKiBPdXIgdXNlciBhY2Nlc3NpYmxlIFRMUyBwdHIgaXMgbG9jYXRlZCBhdCAweGZmZmYwZmZjLgotCQkgKiBPbiBTTVAgcmVhZCBhY2Nlc3MgdG8gdGhpcyBhZGRyZXNzIG11c3QgcmFpc2UgYSBmYXVsdAotCQkgKiBhbmQgYmUgZW11bGF0ZWQgZnJvbSB0aGUgZGF0YSBhYm9ydCBoYW5kbGVyLgotCQkgKiBtCisJCSAqIFVzZXIgc3BhY2UgbXVzdCBuZXZlciB0cnkgdG8gYWNjZXNzIHRoaXMgZGlyZWN0bHkuCisJCSAqIEV4cGVjdCB5b3VyIGFwcCB0byBicmVhayBldmVudHVhbGx5IGlmIHlvdSBkbyBzby4KKwkJICogVGhlIHVzZXIgaGVscGVyIGF0IDB4ZmZmZjBmZTAgbXVzdCBiZSB1c2VkIGluc3RlYWQuCisJCSAqIChzZWUgZW50cnktYXJtdi5TIGZvciBkZXRhaWxzKQogCQkgKi8KLQkJKigodW5zaWduZWQgbG9uZyAqKTB4ZmZmZjBmZmMpID0gdGhyZWFkLT50cF92YWx1ZTsKKwkJKigodW5zaWduZWQgaW50ICopMHhmZmZmMGZmMCkgPSByZWdzLT5BUk1fcjA7CisjZW5kaWYKIAkJcmV0dXJuIDA7CiAKIAlkZWZhdWx0OgpAQCAtNDkzLDYgKzQ5OCw0NCBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1RMU19SRUdfRU1VTAorCisvKgorICogV2UgbWlnaHQgYmUgcnVubmluZyBvbiBhbiBBUk12NisgcHJvY2Vzc29yIHdoaWNoIHNob3VsZCBoYXZlIHRoZSBUTFMKKyAqIHJlZ2lzdGVyIGJ1dCBmb3Igc29tZSByZWFzb24gd2UgY2FuJ3QgdXNlIGl0LCBvciBtYXliZSBhbiBTTVAgc3lzdGVtCisgKiB1c2luZyBhIHByZS1BUk12NiBwcm9jZXNzb3IgKHRoZXJlIGFyZSBhcHBhcmVudGx5IGEgZmV3IHByb3RvdHlwZXMgbGlrZQorICogdGhhdCBpbiBleGlzdGVuY2UpIGFuZCB0aGVyZWZvcmUgYWNjZXNzIHRvIHRoYXQgcmVnaXN0ZXIgbXVzdCBiZQorICogZW11bGF0ZWQuCisgKi8KKworc3RhdGljIGludCBnZXRfdHBfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc3RyKQoreworCWludCByZWcgPSAoaW5zdHIgPj4gMTIpICYgMTU7CisJaWYgKHJlZyA9PSAxNSkKKwkJcmV0dXJuIDE7CisJcmVncy0+dXJlZ3NbcmVnXSA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dHBfdmFsdWU7CisJcmVncy0+QVJNX3BjICs9IDQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdW5kZWZfaG9vayBhcm1fbXJjX2hvb2sgPSB7CisJLmluc3RyX21hc2sJPSAweDBmZmYwZmZmLAorCS5pbnN0cl92YWwJPSAweDBlMWQwZjcwLAorCS5jcHNyX21hc2sJPSBQU1JfVF9CSVQsCisJLmNwc3JfdmFsCT0gMCwKKwkuZm4JCT0gZ2V0X3RwX3RyYXAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhcm1fbXJjX2hvb2tfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX3VuZGVmX2hvb2soJmFybV9tcmNfaG9vayk7CisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwoYXJtX21yY19ob29rX2luaXQpOworCisjZW5kaWYKKwogdm9pZCBfX2JhZF94Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgaW50IHNpemUpCiB7CiAJcHJpbnRrKCJ4Y2hnOiBiYWQgZGF0YSBzaXplOiBwYyAweCVwLCBwdHIgMHglcCwgc2l6ZSAlZFxuIiwKQEAgLTU3OCw5ICs2MjEsMTkgQEAKIAogdm9pZCBfX2luaXQgdHJhcF9pbml0KHZvaWQpCiB7Ci0JZXh0ZXJuIHZvaWQgX190cmFwX2luaXQodm9pZCk7CisJZXh0ZXJuIGNoYXIgX19zdHVic19zdGFydFtdLCBfX3N0dWJzX2VuZFtdOworCWV4dGVybiBjaGFyIF9fdmVjdG9yc19zdGFydFtdLCBfX3ZlY3RvcnNfZW5kW107CisJZXh0ZXJuIGNoYXIgX19rdXNlcl9oZWxwZXJfc3RhcnRbXSwgX19rdXNlcl9oZWxwZXJfZW5kW107CisJaW50IGt1c2VyX3N6ID0gX19rdXNlcl9oZWxwZXJfZW5kIC0gX19rdXNlcl9oZWxwZXJfc3RhcnQ7CiAKLQlfX3RyYXBfaW5pdCgpOworCS8qCisJICogQ29weSB0aGUgdmVjdG9ycywgc3R1YnMgYW5kIGt1c2VyIGhlbHBlcnMgKGluIGVudHJ5LWFybXYuUykKKwkgKiBpbnRvIHRoZSB2ZWN0b3IgcGFnZSwgbWFwcGVkIGF0IDB4ZmZmZjAwMDAsIGFuZCBlbnN1cmUgdGhlc2UKKwkgKiBhcmUgdmlzaWJsZSB0byB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLgorCSAqLworCW1lbWNweSgodm9pZCAqKTB4ZmZmZjAwMDAsIF9fdmVjdG9yc19zdGFydCwgX192ZWN0b3JzX2VuZCAtIF9fdmVjdG9yc19zdGFydCk7CisJbWVtY3B5KCh2b2lkICopMHhmZmZmMDIwMCwgX19zdHVic19zdGFydCwgX19zdHVic19lbmQgLSBfX3N0dWJzX3N0YXJ0KTsKKwltZW1jcHkoKHZvaWQgKikweGZmZmYxMDAwIC0ga3VzZXJfc3osIF9fa3VzZXJfaGVscGVyX3N0YXJ0LCBrdXNlcl9zeik7CiAJZmx1c2hfaWNhY2hlX3JhbmdlKDB4ZmZmZjAwMDAsIDB4ZmZmZjAwMDAgKyBQQUdFX1NJWkUpOwogCW1vZGlmeV9kb21haW4oRE9NQUlOX1VTRVIsIERPTUFJTl9DTElFTlQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBhMzljNmE0Li5hZDJkNjZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAJCiBPVVRQVVRfQVJDSChhcm0pCiBFTlRSWShzdGV4dCkKQEAgLTEwMyw3ICsxMDQsNyBAQAogCV9fZGF0YV9sb2MgPSBBTElHTig0KTsJCS8qIGxvY2F0aW9uIGluIGJpbmFyeSAqLwogCS4gPSBEQVRBQUREUjsKICNlbHNlCi0JLiA9IEFMSUdOKDgxOTIpOworCS4gPSBBTElHTihUSFJFQURfU0laRSk7CiAJX19kYXRhX2xvYyA9IC47CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9LY29uZmlnCmluZGV4IGY2ZTY3NjMuLjQ1YzkzMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L0tjb25maWcKQEAgLTEwLDYgKzEwLDcgQEAKIAogY29uZmlnIEFSQ0hfQ0RCODk3MTIKIAlib29sICJDREI4OTcxMiIKKwlzZWxlY3QgSVNBCiAJaGVscAogCSAgVGhpcyBpcyBhbiBldmFsdWF0aW9uIGJvYXJkIGZyb20gQ2lycnVzIGZvciB0aGUgQ1M4OTcxMiBwcm9jZXNzb3IuCiAJICBUaGUgYm9hcmQgaW5jbHVkZXMgMiBzZXJpYWwgcG9ydHMsIEV0aGVybmV0LCBJUkRBLCBhbmQgZXhwYW5zaW9uCkBAIC0yNiw2ICsyNyw4IEBACiAKIGNvbmZpZyBBUkNIX0VEQjcyMTEKIAlib29sICJFREI3MjExIgorCXNlbGVjdCBJU0EKKwlzZWxlY3QgRElTQ09OVElHTUVNCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIENpcnJ1cyBMb2dpYyBFREItNzIxMQogCSAgZXZhbHVhdGlvbiBib2FyZC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL0tjb25maWcKaW5kZXggMTA5MGM2OC4uMzI0ZDllZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL0tjb25maWcKQEAgLTUsNiArNSw5IEBACiBjb25maWcgQVJDSF9DQVRTCiAJYm9vbCAiQ0FUUyIKIAlzZWxlY3QgRk9PVEJSSURHRV9IT1NUCisJc2VsZWN0IElTQQorCXNlbGVjdCBJU0FfRE1BCisJc2VsZWN0IFBDSQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gdGhlIENBVFMuCiAKQEAgLTEzLDYgKzE2LDkgQEAKIGNvbmZpZyBBUkNIX1BFUlNPTkFMX1NFUlZFUgogCWJvb2wgIkNvbXBhcSBQZXJzb25hbCBTZXJ2ZXIiCiAJc2VsZWN0IEZPT1RCUklER0VfSE9TVAorCXNlbGVjdCBJU0EKKwlzZWxlY3QgSVNBX0RNQQorCXNlbGVjdCBQQ0kKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIHRoZSBDb21wYXEKIAkgIFBlcnNvbmFsIFNlcnZlci4KQEAgLTQyLDYgKzQ4LDkgQEAKIAlib29sICJFQlNBMjg1IChob3N0IG1vZGUpIgogCXNlbGVjdCBBUkNIX0VCU0EyODUKIAlzZWxlY3QgRk9PVEJSSURHRV9IT1NUCisJc2VsZWN0IElTQQorCXNlbGVjdCBJU0FfRE1BCisJc2VsZWN0IFBDSQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gdGhlIEVCU0EyODUgY2FyZAogCSAgaW4gaG9zdCAoImNlbnRyYWwgZnVuY3Rpb24iKSBtb2RlLgpAQCAtNTEsNiArNjAsOSBAQAogY29uZmlnIEFSQ0hfTkVUV0lOREVSCiAJYm9vbCAiTmV0V2luZGVyIgogCXNlbGVjdCBGT09UQlJJREdFX0hPU1QKKwlzZWxlY3QgSVNBCisJc2VsZWN0IElTQV9ETUEKKwlzZWxlY3QgUENJCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiB0aGUgUmViZWwuQ09NCiAJICBOZXRXaW5kZXIuICBJbmZvcm1hdGlvbiBhYm91dCB0aGlzIG1hY2hpbmUgY2FuIGJlIGZvdW5kIGF0OgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaW14L0tjb25maWcKaW5kZXggZWM4NTgxMy4uY2RkZDE5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWlteC9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogY29uZmlnIEFSQ0hfTVgxQURTCiAJYm9vbCAibXgxYWRzIgogCWRlcGVuZHMgb24gQVJDSF9JTVgKKwlzZWxlY3QgSVNBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBNb3Rvcm9sYSBNWDFBRFMgYm9hcmQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5jCmluZGV4IDU0Mzc3ZDAuLjQxZTU4NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9nZW5lcmljLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW14ZmIuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtMjI4LDYgKzIyOSwxNCBAQAogCS5yZXNvdXJjZQk9IGlteF91YXJ0Ml9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IGlteGZiX21hY2hfaW5mbyBpbXhfZmJfaW5mbzsKKwordm9pZCBfX2luaXQgc2V0X2lteF9mYl9pbmZvKHN0cnVjdCBpbXhmYl9tYWNoX2luZm8gKmhhcmRfaW14X2ZiX2luZm8pCit7CisJbWVtY3B5KCZpbXhfZmJfaW5mbyxoYXJkX2lteF9mYl9pbmZvLHNpemVvZihzdHJ1Y3QgaW14ZmJfbWFjaF9pbmZvKSk7Cit9CitFWFBPUlRfU1lNQk9MKHNldF9pbXhfZmJfaW5mbyk7CisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14ZmJfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSAweDAwMjA1MDAwLApAQCAtMjQxLDkgKzI1MCwxNiBAQAogCX0sCiB9OwogCitzdGF0aWMgdTY0IGZiX2RtYV9tYXNrID0gfih1NjQpMDsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14ZmJfZGV2aWNlID0gewogCS5uYW1lCQk9ICJpbXgtZmIiLAogCS5pZAkJPSAwLAorCS5kZXYJCT0geworIAkJLnBsYXRmb3JtX2RhdGEJPSAmaW14X2ZiX2luZm8sCisJCS5kbWFfbWFzawk9ICZmYl9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpbXhmYl9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IGlteGZiX3Jlc291cmNlcywKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYwppbmRleCA4NmM1MGMzLi5iZDE3YjUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKQEAgLTIxNiw3ICsyMTYsOSBAQAogCiAJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAKLQkvLyAuLi5jbGVhciB0aGUgaW50ZXJydXB0CisJLyoKKwkgKiBjbGVhciB0aGUgaW50ZXJydXB0CisJICovCiAJdGltZXIxLT5UaW1lckNsZWFyID0gMTsKIAogCXRpbWVyX3RpY2socmVncyk7CkBAIC0yNjQsNyArMjY2LDcgQEAKIAl0aW1lcjEtPlRpbWVyVmFsdWUgICA9IHRpbWVyX3JlbG9hZDsKIAl0aW1lcjEtPlRpbWVyQ29udHJvbCA9IHRpbWVyX2N0cmw7CiAKLQkvKiAKKwkvKgogCSAqIE1ha2UgaXJxcyBoYXBwZW4gZm9yIHRoZSBzeXN0ZW0gdGltZXIKIAkgKi8KIAlzZXR1cF9pcnEoSVJRX1RJTUVSSU5UMSwgJmludGVncmF0b3JfdGltZXJfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCmluZGV4IDY4ZTE1YzMuLjNiOTQ4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwpAQCAtNDIwLDcgKzQyMCwyMiBAQAogICovCiBzdGF0aWMgdm9pZCBjcF9jbGNkX2VuYWJsZShzdHJ1Y3QgY2xjZF9mYiAqZmIpCiB7Ci0JY21fY29udHJvbChDTV9DVFJMX0xDRE1VWFNFTF9NQVNLLCBDTV9DVFJMX0xDRE1VWFNFTF9WR0EpOworCXUzMiB2YWw7CisKKwlpZiAoZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA8PSA4KQorCQl2YWwgPSBDTV9DVFJMX0xDRE1VWFNFTF9WR0FfODQyMUJQUDsKKwllbHNlIGlmIChmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsIDw9IDE2KQorCQl2YWwgPSBDTV9DVFJMX0xDRE1VWFNFTF9WR0FfMTZCUFA7CisJZWxzZQorCQl2YWwgPSAwOyAvKiBubyBpZGVhIGZvciB0aGlzLCBkb24ndCB0cnVzdCB0aGUgZG9jcyAqLworCisJY21fY29udHJvbChDTV9DVFJMX0xDRE1VWFNFTF9NQVNLfAorCQkgICBDTV9DVFJMX0xDREVOMHwKKwkJICAgQ01fQ1RSTF9MQ0RFTjF8CisJCSAgIENNX0NUUkxfU1RBVElDMXwKKwkJICAgQ01fQ1RSTF9TVEFUSUMyfAorCQkgICBDTV9DVFJMX1NUQVRJQ3wKKwkJICAgQ01fQ1RSTF9uMjRCSVRFTiwgdmFsKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJhbWVzaXplID0gU1pfMU07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvbGVkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2xlZHMuYwppbmRleCA5ZDE4MmI3Li5kMmMwYWIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvbGVkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9sZWRzLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWNvbnN0IHVuc2lnbmVkIGludCBkYmdfYmFzZSA9IElPX0FERFJFU1MoSU5URUdSQVRPUl9EQkdfQkFTRSk7CiAJdW5zaWduZWQgaW50IHVwZGF0ZV9hbHBoYV9sZWRzOwotCQorCiAJLy8geXVwLCBjaGFuZ2UgdGhlIExFRHMKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJdXBkYXRlX2FscGhhX2xlZHMgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci90aW1lLmMKaW5kZXggMjA3MjlkZS4uMWE4NDRjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvdGltZS5jCkBAIC00MCwyNSArNDAsMzIgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgcnRjX3JlYWRfYWxhcm0oc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCitzdGF0aWMgaW50IHJ0Y19yZWFkX2FsYXJtKHN0cnVjdCBydGNfd2thbHJtICphbHJtKQogewogCXJ0Y190aW1lX3RvX3RtKHJlYWRsKHJ0Y19iYXNlICsgUlRDX01SKSwgJmFscm0tPnRpbWUpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJ0Y19zZXRfYWxhcm0oc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCitzdGF0aWMgaW5saW5lIGludCBydGNfc2V0X2FsYXJtKHN0cnVjdCBydGNfd2thbHJtICphbHJtKQogewogCXVuc2lnbmVkIGxvbmcgdGltZTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcnRjX3RtX3RvX3RpbWUoJmFscm0tPnRpbWUsICZ0aW1lKTsKKwkvKgorCSAqIEF0IHRoZSBtb21lbnQsIHdlIGNhbiBvbmx5IGRlYWwgd2l0aCBub24td2lsZGNhcmRlZCBhbGFybSB0aW1lcy4KKwkgKi8KKwlyZXQgPSBydGNfdmFsaWRfdG0oJmFscm0tPnRpbWUpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gcnRjX3RtX3RvX3RpbWUoJmFscm0tPnRpbWUsICZ0aW1lKTsKIAlpZiAocmV0ID09IDApCiAJCXdyaXRlbCh0aW1lLCBydGNfYmFzZSArIFJUQ19NUik7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgcnRjX3JlYWRfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQorc3RhdGljIGludCBydGNfcmVhZF90aW1lKHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJcnRjX3RpbWVfdG9fdG0ocmVhZGwocnRjX2Jhc2UgKyBSVENfRFIpLCB0bSk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC02OSw3ICs3Niw3IEBACiAgKiBlZGdlIG9mIHRoZSAxSHogY2xvY2ssIHdlIG11c3Qgd3JpdGUgdGhlIHRpbWUgb25lIHNlY29uZAogICogaW4gYWR2YW5jZS4KICAqLwotc3RhdGljIGludCBydGNfc2V0X3RpbWUoc3RydWN0IHJ0Y190aW1lICp0bSkKK3N0YXRpYyBpbmxpbmUgaW50IHJ0Y19zZXRfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXVuc2lnbmVkIGxvbmcgdGltZTsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyODAwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDI4MDAuYwppbmRleCBjNDY4M2FhLi5hZWMxM2M3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDI4MDAuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDI4MDAuYwpAQCAtNjUsMTkgKzY1LDEwMiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElYRFAyODAwIFBDSQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBfX2luaXQgaXhkcDI4MDBfc2xhdmVfZGlzYWJsZV9wY2lfbWFzdGVyKHZvaWQpCit7CisJKklYUDIwMDBfUENJX0NNRFNUQVQgJj0gfihQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaXhkcDI4MDBfbWFzdGVyX3dhaXRfZm9yX3NsYXZlKHZvaWQpCit7CisJdm9sYXRpbGUgdTMyICphZGRyOworCisJcHJpbnRrKEtFUk5fSU5GTyAiSVhEUDI4MDA6IHdhaXRpbmcgZm9yIHNsYXZlIE5QVSB0byBjb25maWd1cmUgIgorCQkJICJpdHMgQkFSIHNpemVzXG4iKTsKKworCWFkZHIgPSBpeHAyMDAwX3BjaV9jb25maWdfYWRkcigwLCBJWERQMlgwMF9TTEFWRV9OUFVfREVWRk4sCisJCQkJCVBDSV9CQVNFX0FERFJFU1NfMSk7CisJZG8geworCQkqYWRkciA9IDB4ZmZmZmZmZmY7CisJCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKCphZGRyICE9IDB4ZmUwMDAwMDgpOworCisJYWRkciA9IGl4cDIwMDBfcGNpX2NvbmZpZ19hZGRyKDAsIElYRFAyWDAwX1NMQVZFX05QVV9ERVZGTiwKKwkJCQkJUENJX0JBU0VfQUREUkVTU18yKTsKKwlkbyB7CisJCSphZGRyID0gMHhmZmZmZmZmZjsKKwkJY3B1X3JlbGF4KCk7CisJfSB3aGlsZSAoKmFkZHIgIT0gMHhjMDAwMDAwOCk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgc2xhdmUncyBTRFJBTSBCQVIgYnkgaGFuZC4KKwkgKi8KKwkqYWRkciA9IDB4NDAwMDAwMDg7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpeGRwMjgwMF9zbGF2ZV93YWl0X2Zvcl9tYXN0ZXJfZW5hYmxlKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiSVhEUDI4MDA6IHdhaXRpbmcgZm9yIG1hc3RlciBOUFUgdG8gZW5hYmxlIHVzXG4iKTsKKworCXdoaWxlICgoKklYUDIwMDBfUENJX0NNRFNUQVQgJiBQQ0lfQ09NTUFORF9NQVNURVIpID09IDApCisJCWNwdV9yZWxheCgpOworfQorCiB2b2lkIF9faW5pdCBpeGRwMjgwMF9wY2lfcHJlaW5pdCh2b2lkKQogewogCXByaW50aygiaXhkcDJ4MDBfcGNpX3ByZWluaXQgY2FsbGVkXG4iKTsKIAotCSpJWFAyMDAwX1BDSV9BRERSX0VYVCA9ICAweDAwMDBlMDAwOworCSpJWFAyMDAwX1BDSV9BRERSX0VYVCA9IDB4MDAwMWUwMDA7CiAKLQkqSVhQMjAwMF9QQ0lfRFJBTV9CQVNFX0FERFJfTUFTSyA9ICgweDQwMDAwMDAwIC0gMSkgJiB+MHhmZmZmZjsKKwlpZiAoIWl4ZHAyeDAwX21hc3Rlcl9ucHUoKSkKKwkJaXhkcDI4MDBfc2xhdmVfZGlzYWJsZV9wY2lfbWFzdGVyKCk7CisKIAkqSVhQMjAwMF9QQ0lfU1JBTV9CQVNFX0FERFJfTUFTSyA9ICgweDIwMDAwMDAgLSAxKSAmIH4weDNmZmZmOworCSpJWFAyMDAwX1BDSV9EUkFNX0JBU0VfQUREUl9NQVNLID0gKDB4NDAwMDAwMDAgLSAxKSAmIH4weGZmZmZmOwogCiAJaXhwMjAwMF9wY2lfcHJlaW5pdCgpOworCisJaWYgKGl4ZHAyeDAwX21hc3Rlcl9ucHUoKSkgeworCQkvKgorCQkgKiBXYWl0IHVudGlsIHRoZSBzbGF2ZSBzZXQgaXRzIFNSQU0vU0RSQU0gQkFSIHNpemVzCisJCSAqIGNvcnJlY3RseSBiZWZvcmUgd2UgcHJvY2VlZCB0byBzY2FuIGFuZCBlbnVtZXJhdGUKKwkJICogdGhlIGJ1cy4KKwkJICovCisJCWl4ZHAyODAwX21hc3Rlcl93YWl0X2Zvcl9zbGF2ZSgpOworCisJCS8qCisJCSAqIFdlIGNvbmZpZ3VyZSB0aGUgU0RSQU0gQkFScyBieSBoYW5kIGJlY2F1c2UgdGhleQorCQkgKiBhcmUgMUcgYW5kIGZhbGwgb3V0c2lkZSBvZiB0aGUgcmVndWxhciBhbGxvY2F0ZWQKKwkJICogUENJIGFkZHJlc3Mgc3BhY2UuCisJCSAqLworCQkqSVhQMjAwMF9QQ0lfU0RSQU1fQkFSID0gMHgwMDAwMDAwODsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBXYWl0IGZvciB0aGUgbWFzdGVyIHRvIGNvbXBsZXRlIHNjYW5uaW5nIHRoZSBidXMKKwkJICogYW5kIGFzc2lnbmluZyByZXNvdXJjZXMgYmVmb3JlIHdlIHByb2NlZWQgdG8gc2NhbgorCQkgKiB0aGUgYnVzIG91cnNlbHZlcy4gIFNldCBwY2k9ZmlybXdhcmUgdG8gaG9ub3IgdGhlCisJCSAqIG1hc3RlcidzIHJlc291cmNlIGFzc2lnbm1lbnQuCisJCSAqLworCQlpeGRwMjgwMF9zbGF2ZV93YWl0X2Zvcl9tYXN0ZXJfZW5hYmxlKCk7CisJCXBjaWJpb3Nfc2V0dXAoImZpcm13YXJlIik7CisJfQogfQogCi1pbnQgaXhkcDI4MDBfcGNpX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQorLyoKKyAqIFdlIGFzc2lnbiB0aGUgU0RSQU0gQkFScyBmb3IgdGhlIHR3byBJWFAyODAwIENQVXMgYnkgaGFuZCwgb3V0c2lkZQorICogb2YgdGhlIHJlZ3VsYXIgUENJIHdpbmRvdywgYmVjYXVzZSB0aGVyZSdzIG9ubHkgNTEyTSBvZiBvdXRib3VuZCBQQ0kKKyAqIG1lbW9yeSB3aW5kb3cgb24gZWFjaCBJWFAsIHdoaWxlIHdlIG5lZWQgMUcgZm9yIGVhY2ggb2YgdGhlIEJBUnMuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBpeHAyODAwX3BjaV9maXh1cChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWlmIChtYWNoaW5lX2lzX2l4ZHAyODAwKCkpIHsKKwkJZGV2LT5yZXNvdXJjZVsyXS5zdGFydCA9IDA7CisJCWRldi0+cmVzb3VyY2VbMl0uZW5kICAgPSAwOworCQlkZXYtPnJlc291cmNlWzJdLmZsYWdzID0gMDsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JWFAyODAwLCBpeHAyODAwX3BjaV9maXh1cCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGl4ZHAyODAwX3BjaV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKIHsKIAlzeXMtPm1lbV9vZmZzZXQgPSAweDAwMDAwMDAwOwogCkBAIC0xMjksMjIgKzIxMiw0NyBAQAogCX0gZWxzZSByZXR1cm4gSVJRX0lYUDIwMDBfUENJQjsgLyogU2xhdmUgTklDIGludGVycnVwdCAqLwogfQogCi1zdGF0aWMgdm9pZCBpeGRwMjgwMF9wY2lfcG9zdGluaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBpeGRwMjgwMF9tYXN0ZXJfZW5hYmxlX3NsYXZlKHZvaWQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKKwl2b2xhdGlsZSB1MzIgKmFkZHI7CiAKLQlpZiAoaXhkcDJ4MDBfbWFzdGVyX25wdSgpKSB7Ci0JCWRldiA9IHBjaV9maW5kX3Nsb3QoMSwgSVhEUDI4MDBfU0xBVkVfRU5FVF9ERVZGTik7Ci0JCXBjaV9yZW1vdmVfYnVzX2RldmljZShkZXYpOwotCX0gZWxzZSB7Ci0JCWRldiA9IHBjaV9maW5kX3Nsb3QoMSwgSVhEUDI4MDBfTUFTVEVSX0VORVRfREVWRk4pOwotCQlwY2lfcmVtb3ZlX2J1c19kZXZpY2UoZGV2KTsKKwlwcmludGsoS0VSTl9JTkZPICJJWERQMjgwMDogZW5hYmxpbmcgc2xhdmUgTlBVXG4iKTsKIAorCWFkZHIgPSAodm9sYXRpbGUgdTMyICopaXhwMjAwMF9wY2lfY29uZmlnX2FkZHIoMCwKKwkJCQkJSVhEUDJYMDBfU0xBVkVfTlBVX0RFVkZOLAorCQkJCQlQQ0lfQ09NTUFORCk7CisKKwkqYWRkciB8PSBQQ0lfQ09NTUFORF9NQVNURVI7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpeGRwMjgwMF9tYXN0ZXJfd2FpdF9mb3Jfc2xhdmVfYnVzX3NjYW4odm9pZCkKK3sKKwl2b2xhdGlsZSB1MzIgKmFkZHI7CisKKwlwcmludGsoS0VSTl9JTkZPICJJWERQMjgwMDogd2FpdGluZyBmb3Igc2xhdmUgdG8gZmluaXNoIGJ1cyBzY2FuXG4iKTsKKworCWFkZHIgPSAodm9sYXRpbGUgdTMyICopaXhwMjAwMF9wY2lfY29uZmlnX2FkZHIoMCwKKwkJCQkJSVhEUDJYMDBfU0xBVkVfTlBVX0RFVkZOLAorCQkJCQlQQ0lfQ09NTUFORCk7CisJd2hpbGUgKCgqYWRkciAmIFBDSV9DT01NQU5EX01FTU9SWSkgPT0gMCkKKwkJY3B1X3JlbGF4KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpeGRwMjgwMF9zbGF2ZV9zaWduYWxfYnVzX3NjYW5fY29tcGxldGlvbih2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIklYRFAyODAwOiBidXMgc2NhbiBkb25lLCBzaWduYWxpbmcgbWFzdGVyXG4iKTsKKwkqSVhQMjAwMF9QQ0lfQ01EU1RBVCB8PSBQQ0lfQ09NTUFORF9NRU1PUlk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpeGRwMjgwMF9wY2lfcG9zdGluaXQodm9pZCkKK3sKKwlpZiAoIWl4ZHAyeDAwX21hc3Rlcl9ucHUoKSkgewogCQlpeGRwMngwMF9zbGF2ZV9wY2lfcG9zdGluaXQoKTsKKwkJaXhkcDI4MDBfc2xhdmVfc2lnbmFsX2J1c19zY2FuX2NvbXBsZXRpb24oKTsKIAl9CiB9CiAKLXN0cnVjdCBod19wY2kgaXhkcDI4MDBfcGNpIF9faW5pdGRhdGEgPSB7CitzdHJ1Y3QgX19pbml0ZGF0YSBod19wY2kgaXhkcDI4MDBfcGNpIF9faW5pdGRhdGEgPSB7CiAJLm5yX2NvbnRyb2xsZXJzCT0gMSwKIAkuc2V0dXAJCT0gaXhkcDI4MDBfcGNpX3NldHVwLAogCS5wcmVpbml0CT0gaXhkcDI4MDBfcGNpX3ByZWluaXQsCkBAIC0xNTUsOCArMjYzLDIxIEBACiAKIGludCBfX2luaXQgaXhkcDI4MDBfcGNpX2luaXQodm9pZCkKIHsKLQlpZiAobWFjaGluZV9pc19peGRwMjgwMCgpKQorCWlmIChtYWNoaW5lX2lzX2l4ZHAyODAwKCkpIHsKKwkJc3RydWN0IHBjaV9kZXYgKmRldjsKKwogCQlwY2lfY29tbW9uX2luaXQoJml4ZHAyODAwX3BjaSk7CisJCWlmIChpeGRwMngwMF9tYXN0ZXJfbnB1KCkpIHsKKwkJCWRldiA9IHBjaV9maW5kX3Nsb3QoMSwgSVhEUDI4MDBfU0xBVkVfRU5FVF9ERVZGTik7CisJCQlwY2lfcmVtb3ZlX2J1c19kZXZpY2UoZGV2KTsKKworCQkJaXhkcDI4MDBfbWFzdGVyX2VuYWJsZV9zbGF2ZSgpOworCQkJaXhkcDI4MDBfbWFzdGVyX3dhaXRfZm9yX3NsYXZlX2J1c19zY2FuKCk7CisJCX0gZWxzZSB7CisJCQlkZXYgPSBwY2lfZmluZF9zbG90KDEsIElYRFAyODAwX01BU1RFUl9FTkVUX0RFVkZOKTsKKwkJCXBjaV9yZW1vdmVfYnVzX2RldmljZShkZXYpOworCQl9CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvcGNpLmMKaW5kZXggODMxZjhmZi4uNWZmMmYyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL3BjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9wY2kuYwpAQCAtMzcsNyArMzcsNyBAQAogCiBzdGF0aWMgaW50IGNsZWFyX21hc3Rlcl9hYm9ydHModm9pZCk7CiAKLXN0YXRpYyB1MzIgKgordTMyICoKIGl4cDIwMDBfcGNpX2NvbmZpZ19hZGRyKHVuc2lnbmVkIGludCBidXNfbnIsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlKQogewogCXUzMiAqcGFkZHJlc3M7CkBAIC0yMDgsMTUgKzIwOCwxNSBAQAogICogdXNlIG91ciBvd24gcmVzb3VyY2Ugc3BhY2UuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXhwMjAwMF9wY2lfbWVtX3NwYWNlID0gewotCS5zdGFydAk9IDB4MDAwMDAwMDAsCisJLnN0YXJ0CT0gMHhlMDAwMDAwMCwKIAkuZW5kCT0gMHhmZmZmZmZmZiwKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAkubmFtZQk9ICJQQ0kgTWVtIFNwYWNlIgogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpeHAyMDAwX3BjaV9pb19zcGFjZSA9IHsKLQkuc3RhcnQJPSAweDAwMDAwMDAwLAotCS5lbmQJPSAweGZmZmZmZmZmLAorCS5zdGFydAk9IDB4MDAwMTAwMDAsCisJLmVuZAk9IDB4MDAwMWZmZmYsCiAJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIAkubmFtZQk9ICJQQ0kgSS9PIFNwYWNlIgogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYwppbmRleCA5NGJjZGI5Li5hYTkyZTM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCkBAIC01MDIsMTUgKzUwMiw2IEBACiB9CiAgICAgCiBpbnQKLXBjaV9kYWNfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKQotewotCWlmIChtYXNrID49IFNaXzY0TSAtIDEgKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAtRUlPOwotfQotCi1pbnQKIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykKIHsKIAlpZiAobWFzayA+PSBTWl82NE0gLSAxICkKQEAgLTUyMCw3ICs1MTEsNiBAQAogfQogCiBFWFBPUlRfU1lNQk9MKHBjaV9zZXRfZG1hX21hc2spOwotRVhQT1JUX1NZTUJPTChwY2lfZGFjX3NldF9kbWFfbWFzayk7CiBFWFBPUlRfU1lNQk9MKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayk7CiBFWFBPUlRfU1lNQk9MKGl4cDR4eF9wY2lfcmVhZCk7CiBFWFBPUlRfU1lNQk9MKGl4cDR4eF9wY2lfd3JpdGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jCmluZGV4IGIxNTc1YjguLmE0NWFhYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKQEAgLTIyMCw2ICsyMjAsMzAgQEAKIAkuaWQJCT0gMiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaTJjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gMHg0MDMwMTY4MCwKKwkJLmVuZAk9IDB4NDAzMDE2YTMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CT0gSVJRX0kyQywKKwkJLmVuZAk9IElSUV9JMkMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmNfZGV2aWNlID0geworCS5uYW1lCQk9ICJweGEyeHgtaTJjIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSBpMmNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IHB4YV9zZXRfaTJjX2luZm8oc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSAqaW5mbykKK3sKKwlpMmNfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gaW5mbzsKK30KKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZweGFtY2lfZGV2aWNlLAogCSZ1ZGNfZGV2aWNlLApAQCAtMjI3LDYgKzI1MSw3IEBACiAJJmZmdWFydF9kZXZpY2UsCiAJJmJ0dWFydF9kZXZpY2UsCiAJJnN0dWFydF9kZXZpY2UsCisJJmkyY19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBweGFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtcHhhL3NsZWVwLlMKaW5kZXggMTZjYWQyYy4uNTc4NmNjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zbGVlcC5TCkBAIC0xOCw2ICsxOCwxMSBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KIAorI2lmZGVmIENPTkZJR19QWEEyN3gJCQkvLyB3b3JrYXJvdW5kIGZvciBFcnJhdGEgNTAKKyNkZWZpbmUgTURSRUZSX0tESVYJMHgyMDBhNDAwMAkvLyBhbGwgYmFua3MKKyNkZWZpbmUgQ0NDUl9TTEVFUAkweDAwMDAwMTA3CS8vIEw9NyAyTj0yIEE9MCBQUERJUz0wIENQRElTPTAKKyNlbmRpZgorCiAJCS50ZXh0CiAKIC8qCkBAIC0yOCw3ICszMyw5IEBACiAKIEVOVFJZKHB4YV9jcHVfc3VzcGVuZCkKIAorI2lmbmRlZiBDT05GSUdfSVdNTVhUCiAJbXJhCXIyLCByMywgYWNjMAorI2VuZGlmCiAJc3RtZmQJc3AhLCB7cjIgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCiAJQCBnZXQgY29wcm9jZXNzb3IgcmVnaXN0ZXJzCkBAIC02MSwxNCArNjgsMjMgQEAKIAlAIHByZXBhcmUgdmFsdWUgZm9yIHNsZWVwIG1vZGUKIAltb3YJcjEsICMzCQkJCUAgc2xlZXAgbW9kZQogCi0JQCBwcmVwYXJlIHRvIHB1dCBTRFJBTSBpbnRvIHNlbGYtcmVmcmVzaCBtYW51YWxseQotCWxkcglyNCwgPU1EUkVGUgotCWxkcglyNSwgW3I0XQotCW9ycglyNSwgcjUsICNNRFJFRlJfU0xGUlNICi0KIAlAIHByZXBhcmUgcG9pbnRlciB0byBwaHlzaWNhbCBhZGRyZXNzIDAgKHZpcnR1YWwgbWFwcGluZyBpbiBnZW5lcmljLmMpCiAJbW92CXIyLCAjVU5DQUNIRURfUEhZU18wCiAKKwlAIHByZXBhcmUgU0RSQU0gcmVmcmVzaCBzZXR0aW5ncworCWxkcglyNCwgPU1EUkVGUgorCWxkcglyNSwgW3I0XQorCisJQCBlbmFibGUgU0RSQU0gc2VsZi1yZWZyZXNoIG1vZGUKKwlvcnIJcjUsIHI1LCAjTURSRUZSX1NMRlJTSAorCisjaWZkZWYgQ09ORklHX1BYQTI3eAorCUAgc2V0IFNEQ0xLeCBkaXZpZGUtYnktMiBiaXRzICh0aGlzIGlzIHBhcnQgb2YgYSB3b3JrYXJvdW5kIGZvciBFcnJhdGEgNTApCisJbGRyCXI2LCA9TURSRUZSX0tESVYKKwlvcnIJcjUsIHI1LCByNgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFhBMjV4CiAJQCBJbnRlbCBQWEEyNTUgU3BlY2lmaWNhdGlvbiBVcGRhdGUgbm90ZXMgcHJvYmxlbXMKIAlAIGFib3V0IHN1c3BlbmRpbmcgd2l0aCBQWEJ1cyBvcGVyYXRpbmcgYWJvdmUgMTMzTUh6CiAJQCAoc2VlIEVycmF0YSAzMSwgR1BJTyBvdXRwdXQgc2lnbmFscywgLi4uIHVucHJlZGljdGFibGUgaW4gc2xlZXAKQEAgLTEwMCw2ICsxMTYsMTggQEAKIAltb3YJcjAsICMwCiAJbWNyCXAxNCwgMCwgcjAsIGM2LCBjMCwgMAogCW9ycglyMCwgcjAsICMyCQkJQCBpbml0aWF0ZSBjaGFuZ2UgYml0CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFhBMjd4CisJQCBJbnRlbCBQWEEyNzAgU3BlY2lmaWNhdGlvbiBVcGRhdGUgbm90ZXMgcHJvYmxlbXMgc2xlZXBpbmcKKwlAIHdpdGggY29yZSBvcGVyYXRpbmcgYWJvdmUgOTEgTUh6CisJQCAoc2VlIEVycmF0YSA1MCwgLi4ucHJvY2Vzc29yIGRvZXMgbm90IGV4aXQgZnJvbSBzbGVlcC4uLikKKworCWxkcglyNiwgPUNDQ1IKKwlsZHIJcjgsIFtyNl0JCUAga2VlcCBvcmlnaW5hbCB2YWx1ZSBmb3IgcmVzdW1lCisKKwlsZHIJcjcsID1DQ0NSX1NMRUVQCQlAIHByZXBhcmUgQ0NDUiBzbGVlcCB2YWx1ZQorCW1vdglyMCwgIzB4MgkJQCBwcmVwYXJlIHZhbHVlIGZvciBDTEtDRkcKKyNlbmRpZgogCiAJQCBhbGlnbiBleGVjdXRpb24gdG8gYSBjYWNoZSBsaW5lCiAJYgkxZgpAQCAtMTExLDYgKzEzOSw3IEBACiAJQCBBbGwgbmVlZGVkIHZhbHVlcyBhcmUgbm93IGluIHJlZ2lzdGVycy4KIAlAIFRoZXNlIGxhc3QgaW5zdHJ1Y3Rpb25zIHNob3VsZCBiZSBpbiBjYWNoZQogCisjaWYgZGVmaW5lZChDT05GSUdfUFhBMjV4KSB8fCBkZWZpbmVkKENPTkZJR19QWEEyN3gpCiAJQCBpbml0aWF0ZSB0aGUgZnJlcXVlbmN5IGNoYW5nZS4uLgogCXN0cglyNywgW3I2XQogCW1jcglwMTQsIDAsIHIwLCBjNiwgYzAsIDAKQEAgLTExOCwxNCArMTQ3LDI3IEBACiAJQCByZXN0b3JlIHRoZSBvcmlnaW5hbCBjcHUgc3BlZWQgdmFsdWUgZm9yIHJlc3VtZQogCXN0cglyOCwgW3I2XQogCi0JQCBwdXQgU0RSQU0gaW50byBzZWxmLXJlZnJlc2gKLQlzdHIJcjUsIFtyNF0KKwlAIG5lZWQgNiAxMy1NSHogY3ljbGVzIGJlZm9yZSBjaGFuZ2luZyBQV1JNT0RFCisJQCBqdXN0IHNldCBmcmVxdWVuY3kgdG8gOTEtTUh6Li4uIDYqOTEvMTMgPSA0MgorCisJbW92CXIwLCAjNDIKKzEwOglzdWJzCXIwLCByMCwgIzEKKwlibmUJMTBiCisjZW5kaWYKKworCUAgRG8gbm90IHJlb3JkZXIuLi4KKwlAIEludGVsIFBYQTI3MCBTcGVjaWZpY2F0aW9uIFVwZGF0ZSBub3RlcyBwcm9ibGVtcyBwZXJmb3JtaW5nCisJQCBleHRlcm5hbCBhY2Nlc3NlcyBhZnRlciBTRFJBTSBpcyBwdXQgaW4gc2VsZi1yZWZyZXNoIG1vZGUKKwlAIChzZWUgRXJyYXRhIDM5IC4uLmhhbmdzIHdoZW4gZW50ZXJpbmcgc2VsZi1yZWZyZXNoIG1vZGUpCiAKIAlAIGZvcmNlIGFkZHJlc3MgbGluZXMgbG93IGJ5IHJlYWRpbmcgYXQgcGh5c2ljYWwgYWRkcmVzcyAwCiAJbGRyCXIzLCBbcjJdCiAKKwlAIHB1dCBTRFJBTSBpbnRvIHNlbGYtcmVmcmVzaAorCXN0cglyNSwgW3I0XQorCiAJQCBlbnRlciBzbGVlcCBtb2RlCi0JbWNyCXAxNCwgMCwgcjEsIGM3LCBjMCwgMAorCW1jcglwMTQsIDAsIHIxLCBjNywgYzAsIDAJCUAgUFdSTU9ERQogCiAyMDoJYgkyMGIJCQkJQCBsb29wIHdhaXRpbmcgZm9yIHNsZWVwCiAKQEAgLTE4OCw3ICsyMzAsOSBAQAogCWJsCWNwdV94c2NhbGVfcHJvY19pbml0CiAjZW5kaWYKIAlsZG1mZAlzcCEsIHtyMiwgcjN9CisjaWZuZGVmIENPTkZJR19JV01NWFQKIAltYXIJYWNjMCwgcjIsIHIzCisjZW5kaWYKIAlsZG1mZAlzcCEsIHtyNCAtIHIxMiwgcGN9CQlAIHJldHVybiB0byBjYWxsZXIKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCA1YjY3MGM5Li5jNGZjNmJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTQwOSwzICs0MDksMjQgQEAKIAlkZXBlbmRzIG9uIENQVV9BUk0xMDIwCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBkaXNhYmxlIGJyYW5jaCBwcmVkaWN0aW9uLiAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIFRMU19SRUdfRU1VTAorCWJvb2wKKwlkZWZhdWx0IHkgaWYgKFNNUCB8fCBDUFVfMzJ2NikgJiYgKENQVV8zMnY1IHx8IENQVV8zMnY0IHx8IENQVV8zMnYzKQorCWhlbHAKKwkgIFdlIG1pZ2h0IGJlIHJ1bm5pbmcgb24gYW4gQVJNdjYrIHByb2Nlc3NvciB3aGljaCBzaG91bGQgaGF2ZSB0aGUgVExTCisJICByZWdpc3RlciBidXQgZm9yIHNvbWUgcmVhc29uIHdlIGNhbid0IHVzZSBpdCwgb3IgbWF5YmUgYW4gU01QIHN5c3RlbQorCSAgdXNpbmcgYSBwcmUtQVJNdjYgcHJvY2Vzc29yICh0aGVyZSBhcmUgYXBwYXJlbnRseSBhIGZldyBwcm90b3R5cGVzCisJICBsaWtlIHRoYXQgaW4gZXhpc3RlbmNlKSBhbmQgdGhlcmVmb3JlIGFjY2VzcyB0byB0aGF0IHJlZ2lzdGVyIG11c3QKKwkgIGJlIGVtdWxhdGVkLgorCitjb25maWcgSEFTX1RMU19SRUcKKwlib29sCisJZGVwZW5kcyBvbiBDUFVfMzJ2NgorCWRlZmF1bHQgeSBpZiAhVExTX1JFR19FTVVMCisJaGVscAorCSAgVGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIHRoZSBDUDE1IHRocmVhZCByZWdpc3Rlci4KKwkgIEl0IGlzIGRlZmluZWQgdG8gYmUgYXZhaWxhYmxlIG9uIEFSTXY2IG9yIGxhdGVyLiAgSWYgYSBwYXJ0aWN1bGFyCisJICBBUk12NiBvciBsYXRlciBDUFUgZG9lc24ndCBzdXBwb3J0IGl0IHRoZW4gaXQgbXVzdCBvbWM7aWRlICJzZWxlY3QKKwkgIFRMU19SRUdfRU1VTCIgYWxvbmcgd2l0aCBpdHMgb3RoZXIgY2FyYWN0ZXJpc3RpY3MuCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2Fib3J0LWV2Ni5TIGIvYXJjaC9hcm0vbW0vYWJvcnQtZXY2LlMKaW5kZXggMzhiMmNiYi4uOGY3NmYzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vYWJvcnQtZXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vYWJvcnQtZXY2LlMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlICJhYm9ydC1tYWNyby5TIgogLyoKICAqIEZ1bmN0aW9uOiB2Nl9lYXJseV9hYm9ydAogICoKQEAgLTEzLDExICsxNCwyNiBAQAogICoJICAgOiBzcCA9IHBvaW50ZXIgdG8gcmVnaXN0ZXJzCiAgKgogICogUHVycG9zZSA6IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGFib3J0ZWQgaW5zdHJ1Y3Rpb24uCisgKiBOb3RlOiB3ZSByZWFkIHVzZXIgc3BhY2UuICBUaGlzIG1lYW5zIHdlIG1pZ2h0IGNhdXNlIGEgZGF0YQorICogYWJvcnQgaGVyZSBpZiB0aGUgSS1UTEIgYW5kIEQtVExCIGFyZW4ndCBzZWVpbmcgdGhlIHNhbWUKKyAqIHBpY3R1cmUuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGRvZXMgaGFwcGVuLiAgV2UgbGl2ZSB3aXRoIGl0LgogICovCiAJLmFsaWduCTUKIEVOVFJZKHY2X2Vhcmx5X2Fib3J0KQogCW1yYwlwMTUsIDAsIHIxLCBjNSwgYzAsIDAJCUAgZ2V0IEZTUgogCW1yYwlwMTUsIDAsIHIwLCBjNiwgYzAsIDAJCUAgZ2V0IEZBUgorLyoKKyAqIEZhdWx0eSBTV1AgaW5zdHJ1Y3Rpb24gb24gMTEzNiBkb2Vzbid0IHNldCBiaXQgMTEgaW4gREZTUi4KKyAqIFRoZSB0ZXN0IGJlbG93IGNvdmVycyBhbGwgdGhlIHdyaXRlIHNpdHVhdGlvbnMsIGluY2x1ZGluZyBKYXZhIGJ5dGVjb2RlcworICovCisJYmljCXIxLCByMSwgIzEgPDwgMTEgfCAxIDw8IDEwCUAgY2xlYXIgYml0cyAxMSBhbmQgMTAgb2YgRlNSCisJdHN0CXIzLCAjUFNSX0pfQklUCQkJQCBKYXZhPworCW1vdm5lCXBjLCBscgorCWRvX3RodW1iX2Fib3J0CisJbGRyZXEJcjMsIFtyMl0JCQlAIHJlYWQgYWJvcnRlZCBBUk0gaW5zdHJ1Y3Rpb24KKwlkb19sZHJkX2Fib3J0CisJdHN0CXIzLCAjMSA8PCAyMAkJCUAgTCA9IDAgLT4gd3JpdGUKKwlvcnJlcQlyMSwgcjEsICMxIDw8IDExCQlAIHllcy4KIAltb3YJcGMsIGxyCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW0tYXJtdi5jIGIvYXJjaC9hcm0vbW0vbW0tYXJtdi5jCmluZGV4IGY1YTg3ZGI4Li41ODVkZmI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbS1hcm12LmMKKysrIGIvYXJjaC9hcm0vbW0vbW0tYXJtdi5jCkBAIC00MTEsOSArNDExLDEwIEBACiAJCW1lbV90eXBlc1tNVF9NRU1PUlldLnByb3Rfc2VjdCAmPSB+UE1EX0JJVDQ7CiAJCW1lbV90eXBlc1tNVF9ST01dLnByb3Rfc2VjdCAmPSB+UE1EX0JJVDQ7CiAJCS8qCi0JCSAqIE1hcmsgY2FjaGUgY2xlYW4gYXJlYXMgcmVhZCBvbmx5IGZyb20gU1ZDIG1vZGUKLQkJICogYW5kIG5vIGFjY2VzcyBmcm9tIHVzZXJzcGFjZS4KKwkJICogTWFyayBjYWNoZSBjbGVhbiBhcmVhcyBhbmQgWElQIFJPTSByZWFkIG9ubHkKKwkJICogZnJvbSBTVkMgbW9kZSBhbmQgbm8gYWNjZXNzIGZyb20gdXNlcnNwYWNlLgogCQkgKi8KKwkJbWVtX3R5cGVzW01UX1JPTV0ucHJvdF9zZWN0IHw9IFBNRF9TRUNUX0FQWHxQTURfU0VDVF9BUF9XUklURTsKIAkJbWVtX3R5cGVzW01UX01JTklDTEVBTl0ucHJvdF9zZWN0IHw9IFBNRF9TRUNUX0FQWHxQTURfU0VDVF9BUF9XUklURTsKIAkJbWVtX3R5cGVzW01UX0NBQ0hFQ0xFQU5dLnByb3Rfc2VjdCB8PSBQTURfU0VDVF9BUFh8UE1EX1NFQ1RfQVBfV1JJVEU7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9LY29uZmlnIGIvYXJjaC9hcm0yNi9LY29uZmlnCmluZGV4IDM5NTVkZTUuLjZjYWVkOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYvS2NvbmZpZworKysgYi9hcmNoL2FybTI2L0tjb25maWcKQEAgLTg5LDYgKzg5LDEwIEBACiAgICAgICAgICAgbWFjaGluZSB3aXRoIDRNQiBvZiBtZW1vcnkuCiBlbmRtZW51CiAKK2NvbmZpZyBJU0FfRE1BX0FQSQorCWJvb2wKKwlkZWZhdWx0IHkKKwogbWVudSAiR2VuZXJhbCBzZXR1cCIKIAogIyBDb21wcmVzc2VkIGJvb3QgbG9hZGVyIGluIFJPTS4gIFllcywgd2UgcmVhbGx5IHdhbnQgdG8gYXNrIGFib3V0CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtMjYva2VybmVsL3B0cmFjZS5jCmluZGV4IDJhMTM3MTQuLjhhNTIxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtMjYva2VybmVsL3B0cmFjZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC01OTEsNyArNTkyLDcgQEAKIAkJY2FzZSBQVFJBQ0VfU1lTQ0FMTDoKIAkJY2FzZSBQVFJBQ0VfQ09OVDoKIAkJCXJldCA9IC1FSU87Ci0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJCWJyZWFrOwogCQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCiAJCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpAQCAtNjI2LDcgKzYyNyw3IEBACiAJCSAqLwogCQljYXNlIFBUUkFDRV9TSU5HTEVTVEVQOgogCQkJcmV0ID0gLUVJTzsKLQkJCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQkJYnJlYWs7CiAJCQljaGlsZC0+cHRyYWNlIHw9IFBUX1NJTkdMRVNURVA7CiAJCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYvbW0vc21hbGxfcGFnZS5jIGIvYXJjaC9hcm0yNi9tbS9zbWFsbF9wYWdlLmMKaW5kZXggNzdiZTg2Yy4uMzA0NDcxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9tbS9zbWFsbF9wYWdlLmMKKysrIGIvYXJjaC9hcm0yNi9tbS9zbWFsbF9wYWdlLmMKQEAgLTkyLDggKzkyLDcgQEAKIAkJcGFnZSA9IGxpc3RfZW50cnkob3JkZXItPnF1ZXVlLm5leHQsIHN0cnVjdCBwYWdlLCBscnUpOwogYWdhaW46CiAjaWZkZWYgUEVEQU5USUMKLQkJaWYgKFVTRURfTUFQKHBhZ2UpICYgfm9yZGVyLT5hbGxfdXNlZCkKLQkJCVBBR0VfQlVHKHBhZ2UpOworCQlCVUdfT04oVVNFRF9NQVAocGFnZSkgJiB+b3JkZXItPmFsbF91c2VkKTsKICNlbmRpZgogCQlvZmZzZXQgPSBmZnooVVNFRF9NQVAocGFnZSkpOwogCQlTRVRfVVNFRChwYWdlLCBvZmZzZXQpOwpAQCAtMTQxLDggKzE0MCw3IEBACiAJCQlnb3RvIG5vbl9zbWFsbDsKIAogI2lmZGVmIFBFREFOVElDCi0JCWlmIChVU0VEX01BUChwYWdlKSAmIH5vcmRlci0+YWxsX3VzZWQpCi0JCQlQQUdFX0JVRyhwYWdlKTsKKwkJQlVHX09OKFVTRURfTUFQKHBhZ2UpICYgfm9yZGVyLT5hbGxfdXNlZCk7CiAjZW5kaWYKIAogCQlzcGFnZSA9IHNwYWdlID4+IG9yZGVyLT5zaGlmdDsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3B0cmFjZS5jCmluZGV4IGRhMTVkYjguLjU4MWVjYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMTg0LDcgKzE4NSw3IEBACiAJCWNhc2UgUFRSQUNFX0NPTlQ6CiAJCQlyZXQgPSAtRUlPOwogCQkJCi0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJCWJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAJCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkgewpAQCAtMjE5LDcgKzIyMCw3IEBACiAJCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6CiAJCQlyZXQgPSAtRUlPOwogCQkJCi0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJCWJyZWFrOwogCQkJCiAJCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvZnJ2L2tlcm5lbC9wdHJhY2UuYwppbmRleCAyYTBlZmI3Li5jYmUwM2NiIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3B0cmFjZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0yMzksNyArMjQwLDcgQEAKIAljYXNlIFBUUkFDRV9TWVNDQUxMOiAvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwogCWNhc2UgUFRSQUNFX0NPTlQ6IC8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCiAJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC0yNjcsNyArMjY4LDcgQEAKIAogCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6ICAvKiBzZXQgdGhlIHRyYXAgZmxhZy4gKi8KIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwogCQlwdHJhY2VfZW5hYmxlKGNoaWxkKTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNWYxOWQ3Ny4uMDVjMTVlOCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvcHRyYWNlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xNzEsNyArMTcyLDcgQEAKIAkJY2FzZSBQVFJBQ0VfU1lTQ0FMTDogLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KIAkJY2FzZSBQVFJBQ0VfQ09OVDogeyAvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KIAkJCXJldCA9IC1FSU87Ci0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPj0gX05TSUcpCisJCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCQlicmVhayA7CiAJCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkKIAkJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC0yMDIsNyArMjAzLDcgQEAKIAogCQljYXNlIFBUUkFDRV9TSU5HTEVTVEVQOiB7ICAvKiBzZXQgdGhlIHRyYXAgZmxhZy4gKi8KIAkJCXJldCA9IC1FSU87Ci0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJCWJyZWFrOwogCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CiAJCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9LY29uZmlnIGIvYXJjaC9pMzg2L0tjb25maWcKaW5kZXggMTdhMGNiYy4uZTM4MmYzMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L0tjb25maWcKKysrIGIvYXJjaC9pMzg2L0tjb25maWcKQEAgLTE4Myw3ICsxODMsNyBAQAogCSAgLSAiV2luY2hpcC1DNiIgZm9yIG9yaWdpbmFsIElEVCBXaW5jaGlwLgogCSAgLSAiV2luY2hpcC0yIiBmb3IgSURUIFdpbmNoaXAgMi4KIAkgIC0gIldpbmNoaXAtMkEiIGZvciBJRFQgV2luY2hpcHMgd2l0aCAzZE5vdyEgY2FwYWJpbGl0aWVzLgotCSAgLSAiTWVkaWFHWC9HZW9kZSIgZm9yIEN5cml4IE1lZGlhR1ggYWthIEdlb2RlLgorCSAgLSAiR2VvZGVHWDEiIGZvciBHZW9kZSBHWDEgKEN5cml4IE1lZGlhR1gpLgogCSAgLSAiQ3lyaXhJSUkvVklBIEMzIiBmb3IgVklBIEN5cml4IElJSSBvciBWSUEgQzMuCiAJICAtICJWSUEgQzMtMiBmb3IgVklBIEMzLTIgIk5laGVtaWFoIiAobW9kZWwgOSBhbmQgYWJvdmUpLgogCkBAIC0zMTEsMTIgKzMxMSwxMCBAQAogCSAgc3RvcmVzIGZvciB0aGlzIENQVSwgd2hpY2ggY2FuIGluY3JlYXNlIHBlcmZvcm1hbmNlIG9mIHNvbWUKIAkgIG9wZXJhdGlvbnMuCiAKLWNvbmZpZyBNR0VPREUKLQlib29sICJNZWRpYUdYL0dlb2RlIgorY29uZmlnIE1HRU9ERUdYMQorCWJvb2wgIkdlb2RlR1gxIgogCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGZvciBhIEN5cml4IE1lZGlhR1ggYWthIEdlb2RlIGNoaXAuIExpbnV4IGFuZCBHQ0MKLSAgICAgICAgICB0cmVhdCB0aGlzIGNoaXAgYXMgYSA1ODZUU0Mgd2l0aCBzb21lIGV4dGVuZGVkIGluc3RydWN0aW9ucwotICAgICAgICAgIGFuZCBhbGlnbm1lbnQgcmVxaXJlbWVudHMuCisJICBTZWxlY3QgdGhpcyBmb3IgYSBHZW9kZSBHWDEgKEN5cml4IE1lZGlhR1gpIGNoaXAuCiAKIGNvbmZpZyBNQ1lSSVhJSUkKIAlib29sICJDeXJpeElJSS9WSUEtQzMiCkBAIC0zNjgsNyArMzY2LDcgQEAKIAlpbnQKIAlkZWZhdWx0ICI3IiBpZiBNUEVOVElVTTQgfHwgWDg2X0dFTkVSSUMKIAlkZWZhdWx0ICI0IiBpZiBYODZfRUxBTiB8fCBNNDg2IHx8IE0zODYKLQlkZWZhdWx0ICI1IiBpZiBNV0lOQ0hJUDNEIHx8IE1XSU5DSElQMiB8fCBNV0lOQ0hJUEM2IHx8IE1DUlVTT0UgfHwgTUVGRklDRU9OIHx8IE1DWVJJWElJSSB8fCBNSzYgfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNNTg2IHx8IE1WSUFDM18yIHx8IE1HRU9ERQorCWRlZmF1bHQgIjUiIGlmIE1XSU5DSElQM0QgfHwgTVdJTkNISVAyIHx8IE1XSU5DSElQQzYgfHwgTUNSVVNPRSB8fCBNRUZGSUNFT04gfHwgTUNZUklYSUlJIHx8IE1LNiB8fCBNUEVOVElVTUlJSSB8fCBNUEVOVElVTUlJIHx8IE02ODYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE01ODYgfHwgTVZJQUMzXzIgfHwgTUdFT0RFR1gxCiAJZGVmYXVsdCAiNiIgaWYgTUs3IHx8IE1LOCB8fCBNUEVOVElVTU0KIAogY29uZmlnIFJXU0VNX0dFTkVSSUNfU1BJTkxPQ0sKQEAgLTM4Nyw3ICszODUsNyBAQAogCiBjb25maWcgWDg2X1BQUk9fRkVOQ0UKIAlib29sCi0JZGVwZW5kcyBvbiBNNjg2IHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNNTg2IHx8IE00ODYgfHwgTTM4NiB8fCBNR0VPREUKKwlkZXBlbmRzIG9uIE02ODYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE01ODYgfHwgTTQ4NiB8fCBNMzg2IHx8IE1HRU9ERUdYMQogCWRlZmF1bHQgeQogCiBjb25maWcgWDg2X0YwMEZfQlVHCkBAIC00MTcsNyArNDE1LDcgQEAKIAogY29uZmlnIFg4Nl9BTElHTk1FTlRfMTYKIAlib29sCi0JZGVwZW5kcyBvbiBNV0lOQ0hJUDNEIHx8IE1XSU5DSElQMiB8fCBNV0lOQ0hJUEM2IHx8IE1DWVJJWElJSSB8fCBYODZfRUxBTiB8fCBNSzYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE01ODYgfHwgTTQ4NiB8fCBNVklBQzNfMiB8fCBNR0VPREUKKwlkZXBlbmRzIG9uIE1XSU5DSElQM0QgfHwgTVdJTkNISVAyIHx8IE1XSU5DSElQQzYgfHwgTUNZUklYSUlJIHx8IFg4Nl9FTEFOIHx8IE1LNiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTTU4NiB8fCBNNDg2IHx8IE1WSUFDM18yIHx8IE1HRU9ERUdYMQogCWRlZmF1bHQgeQogCiBjb25maWcgWDg2X0dPT0RfQVBJQwpAQCAtNDQyLDcgKzQ0MCw3IEBACiAKIGNvbmZpZyBYODZfT09TVE9SRQogCWJvb2wKLQlkZXBlbmRzIG9uIChNV0lOQ0hJUDNEIHx8IE1XSU5DSElQMiB8fCBNV0lOQ0hJUEM2IHx8IE1HRU9ERSkgJiYgTVRSUgorCWRlcGVuZHMgb24gKE1XSU5DSElQM0QgfHwgTVdJTkNISVAyIHx8IE1XSU5DSElQQzYpICYmIE1UUlIKIAlkZWZhdWx0IHkKIAogY29uZmlnIEhQRVRfVElNRVIKQEAgLTU3OCw3ICs1NzYsNyBAQAogCiBjb25maWcgWDg2X1RTQwogCWJvb2wKLQlkZXBlbmRzIG9uIChNV0lOQ0hJUDNEIHx8IE1XSU5DSElQMiB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBNQ1lSSVhJSUkgfHwgTUs3IHx8IE1LNiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTUs4IHx8IE1WSUFDM18yIHx8IE1HRU9ERSkgJiYgIVg4Nl9OVU1BUQorCWRlcGVuZHMgb24gKE1XSU5DSElQM0QgfHwgTVdJTkNISVAyIHx8IE1DUlVTT0UgfHwgTUVGRklDRU9OIHx8IE1DWVJJWElJSSB8fCBNSzcgfHwgTUs2IHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNSzggfHwgTVZJQUMzXzIgfHwgTUdFT0RFR1gxKSAmJiAhWDg2X05VTUFRCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBYODZfTUNFCkBAIC02NTMsNiArNjUxLDI0IEBACiAJICBTYXkgWSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIERlbGwgSW5zcGlyb24gODAwMC4KIAkgIFNheSBOIG90aGVyd2lzZS4KIAorY29uZmlnIFg4Nl9SRUJPT1RGSVhVUFMKKwlib29sICJFbmFibGUgWDg2IGJvYXJkIHNwZWNpZmljIGZpeHVwcyBmb3IgcmVib290IgorCWRlcGVuZHMgb24gWDg2CisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBlbmFibGVzIGNoaXBzZXQgYW5kL29yIGJvYXJkIHNwZWNpZmljIGZpeHVwcyB0byBiZSBkb25lCisJICBpbiBvcmRlciB0byBnZXQgcmVib290IHRvIHdvcmsgY29ycmVjdGx5LiBUaGlzIGlzIG9ubHkgbmVlZGVkIG9uCisJICBzb21lIGNvbWJpbmF0aW9ucyBvZiBoYXJkd2FyZSBhbmQgQklPUy4gVGhlIHN5bXB0b20sIGZvciB3aGljaAorCSAgdGhpcyBjb25maWcgaXMgaW50ZW5kZWQsIGlzIHdoZW4gcmVib290IGVuZHMgd2l0aCBhIHN0YWxsZWQvaHVuZworCSAgc3lzdGVtLgorCisJICBDdXJyZW50bHksIHRoZSBvbmx5IGZpeHVwIGlzIGZvciB0aGUgR2VvZGUgR1gxL0NTNTUzMEEvVFJPTTIuMS4KKwkgIGNvbWJpbmF0aW9uLgorCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlIGZpeHVwLiBDdXJyZW50bHksIGl0J3Mgc2FmZSB0bworCSAgZW5hYmxlIHRoaXMgb3B0aW9uIGV2ZW4gaWYgeW91IGRvbid0IG5lZWQgaXQuCisJICBTYXkgTiBvdGhlcndpc2UuCisKIGNvbmZpZyBNSUNST0NPREUKIAl0cmlzdGF0ZSAiL2Rldi9jcHUvbWljcm9jb2RlIC0gSW50ZWwgSUEzMiBDUFUgbWljcm9jb2RlIHN1cHBvcnQiCiAJLS0taGVscC0tLQpAQCAtMTE1NSw2ICsxMTcxLDEwIEBACiAKIHNvdXJjZSAiZHJpdmVycy9wY2kvS2NvbmZpZyIKIAorY29uZmlnIElTQV9ETUFfQVBJCisJYm9vbAorCWRlZmF1bHQgeQorCiBjb25maWcgSVNBCiAJYm9vbCAiSVNBIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiAhKFg4Nl9WT1lBR0VSIHx8IFg4Nl9WSVNXUykKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9NYWtlZmlsZSBiL2FyY2gvaTM4Ni9NYWtlZmlsZQppbmRleCAzMTRjNzE0Li4xYzM2Y2EzIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvTWFrZWZpbGUKKysrIGIvYXJjaC9pMzg2L01ha2VmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAjIDE5OTkwNzEzICBBcnR1ciBTa2F3aW5hIDxza2F3aW5hQGdlb2NpdGllcy5jb20+CiAjICAgICAgICAgICBBZGRlZCAnLW1hcmNoJyBhbmQgJy1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5JyBzdXBwb3J0CiAjCi0jICAgICAgICAgICBLaWFudXNjaCBTYXlhaCBLYXJhZGppIDxraWFudXNjaEBzay10ZWNoLm5ldD4KKyMgMjAwNTAzMjAgIEtpYW51c2NoIFNheWFoIEthcmFkamkgPGtpYW51c2NoQHNrLXRlY2gubmV0PgogIyAgICAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgR0VPREUgQ1BVCiAKIExERkxBR1MJCTo9IC1tIGVsZl9pMzg2CkBAIC01NCw4ICs1NCw4IEBACiAjIEFNRCBFbGFuIHN1cHBvcnQKIGNmbGFncy0kKENPTkZJR19YODZfRUxBTikJKz0gLW1hcmNoPWk0ODYKIAotIyBNZWRpYUdYIGFrYSBHZW9kZSBzdXBwb3J0Ci1jZmxhZ3MtJChDT05GSUdfTUdFT0RFKQkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9cGVudGl1bS1tbXgsLW1hcmNoPWk1ODYpCisjIEdlb2RlIEdYMSBzdXBwb3J0CitjZmxhZ3MtJChDT05GSUdfTUdFT0RFR1gxKQkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9cGVudGl1bS1tbXgsLW1hcmNoPWk0ODYpCiAKICMgLW1yZWdwYXJtPTMgd29ya3Mgb2sgb24gZ2NjLTMuMCBhbmQgbGF0ZXIKICMKQEAgLTEyMyw3ICsxMjMsNyBAQAogYm9vdCA6PSBhcmNoL2kzODYvYm9vdAogCiAuUEhPTlk6IHpJbWFnZSBiekltYWdlIGNvbXByZXNzZWQgemxpbG8gYnpsaWxvIFwKLQl6ZGlzayBiemRpc2sgZmRpbWFnZSBmZGltYWdlMTQ0IGZkaW1hZ2UyODggaW5zdGFsbAorCXpkaXNrIGJ6ZGlzayBmZGltYWdlIGZkaW1hZ2UxNDQgZmRpbWFnZTI4OCBpbnN0YWxsIGtlcm5lbF9pbnN0YWxsCiAKIGFsbDogYnpJbWFnZQogCkBAIC0xNDUsOCArMTQ1LDkgQEAKIGZkaW1hZ2UgZmRpbWFnZTE0NCBmZGltYWdlMjg4OiB2bWxpbnV4CiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBCT09USU1BR0U9JChLQlVJTERfSU1BR0UpICRACiAKLWluc3RhbGw6Ci0JJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBCT09USU1BR0U9JChLQlVJTERfSU1BR0UpICRACitpbnN0YWxsOiB2bWxpbnV4CitpbnN0YWxsIGtlcm5lbF9pbnN0YWxsOgorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgQk9PVElNQUdFPSQoS0JVSUxEX0lNQUdFKSBpbnN0YWxsCiAKIHByZXBhcmU6IGluY2x1ZGUvYXNtLSQoQVJDSCkvYXNtX29mZnNldHMuaAogQ0xFQU5fRklMRVMgKz0gaW5jbHVkZS9hc20tJChBUkNIKS9hc21fb2Zmc2V0cy5oCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvYm9vdC9ib290c2VjdC5TIGIvYXJjaC9pMzg2L2Jvb3QvYm9vdHNlY3QuUwppbmRleCBiYTlmZTE0ZC4uMDExYjdhNCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2Jvb3QvYm9vdHNlY3QuUworKysgYi9hcmNoL2kzODYvYm9vdC9ib290c2VjdC5TCkBAIC04Myw3ICs4Myw3IEBACiAJLmFzY2lpCSJcbiIKIAkuYXNjaWkJIlJlbW92ZSBkaXNrIGFuZCBwcmVzcyBhbnkga2V5IHRvIHJlYm9vdCAuIC4gLlxyXG4iCiAJLmJ5dGUJMAotCQorCiAKIAkjIEtlcm5lbCBhdHRyaWJ1dGVzOyB1c2VkIGJ5IHNldHVwCiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9pMzg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggZmE2NzA0NS4uY2VkYzU1YyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9pMzg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPHZpZGVvL2VkaWQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9ib290L3NldHVwLlMgYi9hcmNoL2kzODYvYm9vdC9zZXR1cC5TCmluZGV4IGE5MzRhYjMuLmNhYTFmZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9ib290L3NldHVwLlMKKysrIGIvYXJjaC9pMzg2L2Jvb3Qvc2V0dXAuUwpAQCAtMTY0LDcgKzE2NCw3IEBACiB0cmFtcG9saW5lOgljYWxsCXN0YXJ0X29mX3NldHVwCiAJCS5hbGlnbiAxNgogCQkJCQkjIFRoZSBvZmZzZXQgYXQgdGhpcyBwb2ludCBpcyAweDI0MAotCQkuc3BhY2UJKDB4N2ZmLTB4MjQwKzEpICMgRTgyMCAmIEVERCBzcGFjZSAoZW5kaW5nIGF0IDB4N2ZmKQorCQkuc3BhY2UJKDB4ZWZmLTB4MjQwKzEpICMgRTgyMCAmIEVERCBzcGFjZSAoZW5kaW5nIGF0IDB4ZWZmKQogIyBFbmQgb2Ygc2V0dXAgaGVhZGVyICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIHN0YXJ0X29mX3NldHVwOgpAQCAtMzMzLDkgKzMzMyw5IEBACiAJIyBzaXplb2YoZTgyMHJlYykuCiAJIwogZ29vZDgyMDoKLQltb3ZiCShFODIwTlIpLCAlYWwJCQkjIHVwIHRvIDMyIGVudHJpZXMKKwltb3ZiCShFODIwTlIpLCAlYWwJCQkjIHVwIHRvIDEyOCBlbnRyaWVzCiAJY21wYgkkRTgyME1BWCwgJWFsCi0Jam5sCWJhaWw4MjAKKwlqYWUJYmFpbDgyMAogCiAJaW5jYgkoRTgyME5SKQogCW1vdncJJWRpLCAlYXgKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9ib290L3ZpZGVvLlMgYi9hcmNoL2kzODYvYm9vdC92aWRlby5TCmluZGV4IDkyNWQzZjUuLjA1ODc0NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9ib290L3ZpZGVvLlMKKysrIGIvYXJjaC9pMzg2L2Jvb3QvdmlkZW8uUwpAQCAtMTkyNCwzNiArMTkyNCwzNiBAQAogCXJldAogCiBzdG9yZV9lZGlkOgotCXB1c2h3CSVlcwkJCQkjIGp1c3Qgc2F2ZSBhbGwgcmVnaXN0ZXJzIAotCXB1c2h3CSVheAkJCQkKKwlwdXNodwklZXMJCQkJIyBqdXN0IHNhdmUgYWxsIHJlZ2lzdGVycworCXB1c2h3CSVheAogCXB1c2h3CSVieAogCXB1c2h3ICAgJWN4CiAJcHVzaHcJJWR4CiAJcHVzaHcgICAlZGkKIAotCXB1c2h3CSVmcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJcHVzaHcJJWZzCiAJcG9wdyAgICAlZXMKIAogCW1vdmwJJDB4MTMxMzEzMTMsICVlYXgJCSMgbWVtc2V0IGJsb2NrIHdpdGggMHgxMwogCW1vdncgICAgJDMyLCAlY3gKIAltb3Z3CSQweDE0MCwgJWRpCiAJY2xkCi0JcmVwIAotCXN0b3NsICAKKwlyZXAKKwlzdG9zbAogCi0JbW92dwkkMHg0ZjE1LCAlYXggICAgICAgICAgICAgICAgICAgICMgZG8gVkJFL0REQyAKKwltb3Z3CSQweDRmMTUsICVheCAgICAgICAgICAgICAgICAgICAgIyBkbyBWQkUvRERDCiAJbW92dwkkMHgwMSwgJWJ4CiAJbW92dwkkMHgwMCwgJWN4CiAJbW92dyAgICAkMHgwMSwgJWR4CiAJbW92dwkkMHgxNDAsICVkaQotCWludAkkMHgxMAkKKwlpbnQJJDB4MTAKIAotCXBvcHcJJWRpCQkJCSMgcmVzdG9yZSBhbGwgcmVnaXN0ZXJzICAgICAgICAKKwlwb3B3CSVkaQkJCQkjIHJlc3RvcmUgYWxsIHJlZ2lzdGVycwogCXBvcHcJJWR4CiAJcG9wdwklY3gKIAlwb3B3CSVieAogCXBvcHcJJWF4Ci0JcG9wdwklZXMJCisJcG9wdwklZXMKIAlyZXQKIAogIyBWSURFT19TRUxFQ1Qtb25seSB2YXJpYWJsZXMKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlCmluZGV4IGFhY2RhZTYuLjBmYmNmZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBAQAogb2JqLSQoQ09ORklHX1g4Nl9NUFBBUlNFKQkrPSBtcHBhcnNlLm8KIG9iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gYXBpYy5vIG5taS5vCiBvYmotJChDT05GSUdfWDg2X0lPX0FQSUMpCSs9IGlvX2FwaWMubworb2JqLSQoQ09ORklHX1g4Nl9SRUJPT1RGSVhVUFMpCSs9IHJlYm9vdF9maXh1cHMubwogb2JqLSQoQ09ORklHX1g4Nl9OVU1BUSkJCSs9IG51bWFxLm8KIG9iai0kKENPTkZJR19YODZfU1VNTUlUX05VTUEpCSs9IHN1bW1pdC5vCiBvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKaW5kZXggNTNlYjVjZi4uODQ4YmI5NyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYworKysgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC02NTAsNyArNjUwLDcgQEAKIAkgKi8KIAlyc2RwX3BoeXMgPSBhY3BpX3NjYW5fcnNkcCAoMCwgMHg0MDApOwogCWlmICghcnNkcF9waHlzKQotCQlyc2RwX3BoeXMgPSBhY3BpX3NjYW5fcnNkcCAoMHhFMDAwMCwgMHhGRkZGRik7CisJCXJzZHBfcGh5cyA9IGFjcGlfc2Nhbl9yc2RwICgweEUwMDAwLCAweDIwMDAwKTsKIAogCXJldHVybiByc2RwX3BoeXM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2FwaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jCmluZGV4IGUzODc5ZjcuLmQ1MDk4MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jCkBAIC0xMjY1LDggKzEyNjUsNiBAQAogCiAJc2V0dXBfbG9jYWxfQVBJQygpOwogCi0JaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfTE9DQUxfQVBJQykKLQkJY2hlY2tfbm1pX3dhdGNoZG9nKCk7CiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJaWYgKHNtcF9mb3VuZF9jb25maWcpCiAJCWlmICghc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKaW5kZXggOGQxODJlOC4uMTZkYmM0MSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfYW1kKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLSNpZmRlZiBDT05GSUdfU01QCisjaWZkZWYgQ09ORklHX1g4Nl9TTVAKIAlpbnQgY3B1ID0gYyA9PSAmYm9vdF9jcHVfZGF0YSA/IDAgOiBjIC0gY3B1X2RhdGE7CiAjZW5kaWYKIAl1MzIgbCwgaDsKQEAgLTE5OCw3ICsxOTgsNyBAQAogCQkJYy0+eDg2X251bV9jb3JlcyA9IDE7CiAJfQogCi0jaWZkZWYgQ09ORklHX1NNUAorI2lmZGVmIENPTkZJR19YODZfU01QCiAJLyoKIAkgKiBPbiBhIEFNRCBkdWFsIGNvcmUgc2V0dXAgdGhlIGxvd2VyIGJpdHMgb2YgdGhlIEFQSUMgaWQKIAkgKiBkaXN0aW5ndXNoIHRoZSBjb3Jlcy4gIEFzc3VtZXMgbnVtYmVyIG9mIGNvcmVzIGlzIGEgcG93ZXIKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYwppbmRleCA5MzNiMGRkLi45MDI3YTk4IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL2N5cml4LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9jeXJpeC5jCkBAIC0yMTgsMTIgKzIxOCwxMiBAQAogCW10cnJfdHlwZSB0eXBlOwogfSBhcnJfc3RhdGVfdDsKIAotc3RhdGljIGFycl9zdGF0ZV90IGFycl9zdGF0ZVs4XSBfX2luaXRkYXRhID0geworc3RhdGljIGFycl9zdGF0ZV90IGFycl9zdGF0ZVs4XSBfX2RldmluaXRkYXRhID0gewogCXswVUwsIDBVTCwgMFVMfSwgezBVTCwgMFVMLCAwVUx9LCB7MFVMLCAwVUwsIDBVTH0sIHswVUwsIDBVTCwgMFVMfSwKIAl7MFVMLCAwVUwsIDBVTH0sIHswVUwsIDBVTCwgMFVMfSwgezBVTCwgMFVMLCAwVUx9LCB7MFVMLCAwVUwsIDBVTH0KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNjcl9zdGF0ZVs3XSBfX2luaXRkYXRhID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBjY3Jfc3RhdGVbN10gX19kZXZpbml0ZGF0YSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OwogCiBzdGF0aWMgdm9pZCBjeXJpeF9zZXRfYWxsKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCmluZGV4IDlmN2E3ZWEuLmY0NjhhOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCkBAIC0xMjQsOCArMTI0LDggQEAKIAlyZXR1cm4gLUVOT1NQQzsKIH0KIAotdm9pZCBnZW5lcmljX2dldF9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgKmJhc2UsCi0JCSAgICAgIHVuc2lnbmVkIGludCAqc2l6ZSwgbXRycl90eXBlICogdHlwZSkKK3N0YXRpYyB2b2lkIGdlbmVyaWNfZ2V0X210cnIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyAqYmFzZSwKKwkJCSAgICAgdW5zaWduZWQgaW50ICpzaXplLCBtdHJyX3R5cGUgKiB0eXBlKQogewogCXVuc2lnbmVkIGludCBtYXNrX2xvLCBtYXNrX2hpLCBiYXNlX2xvLCBiYXNlX2hpOwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL21haW4uYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCmluZGV4IDU0OTk5ZTQuLmUxYzIwNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCkBAIC03MiwxNyArNzIsMjEgQEAKIHN0YXRpYyBpbnQgaGF2ZV93cmNvbWIodm9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXU4IHJldjsKIAkKIAlpZiAoKGRldiA9IHBjaV9nZXRfY2xhc3MoUENJX0NMQVNTX0JSSURHRV9IT1NUIDw8IDgsIE5VTEwpKSAhPSBOVUxMKSB7Ci0JCS8qIFNlcnZlcldvcmtzIExFIGNoaXBzZXRzIGhhdmUgcHJvYmxlbXMgd2l0aCB3cml0ZS1jb21iaW5pbmcgCisJCS8qIFNlcnZlcldvcmtzIExFIGNoaXBzZXRzIDwgcmV2IDYgaGF2ZSBwcm9ibGVtcyB3aXRoIHdyaXRlLWNvbWJpbmluZwogCQkgICBEb24ndCBhbGxvdyBpdCBhbmQgbGVhdmUgcm9vbSBmb3Igb3RoZXIgY2hpcHNldHMgdG8gYmUgdGFnZ2VkICovCiAJCWlmIChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTICYmCiAJCSAgICBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0xFKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJtdHJyOiBTZXJ2ZXJ3b3JrcyBMRSBkZXRlY3RlZC4gV3JpdGUtY29tYmluaW5nIGRpc2FibGVkLlxuIik7Ci0JCQlwY2lfZGV2X3B1dChkZXYpOwotCQkJcmV0dXJuIDA7CisJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJnJldik7CisJCQlpZiAocmV2IDw9IDUpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJtdHJyOiBTZXJ2ZXJ3b3JrcyBMRSByZXYgPCA2IGRldGVjdGVkLiBXcml0ZS1jb21iaW5pbmcgZGlzYWJsZWQuXG4iKTsKKwkJCQlwY2lfZGV2X3B1dChkZXYpOworCQkJCXJldHVybiAwOworCQkJfQogCQl9Ci0JCS8qIEludGVsIDQ1ME5YIGVycmF0YSAjIDIzLiBOb24gYXNjZW5kaW5nIGNhY2hsaW5lIGV2aWN0aW9ucyB0bworCQkvKiBJbnRlbCA0NTBOWCBlcnJhdGEgIyAyMy4gTm9uIGFzY2VuZGluZyBjYWNoZWxpbmUgZXZpY3Rpb25zIHRvCiAJCSAgIHdyaXRlIGNvbWJpbmluZyBtZW1vcnkgbWF5IHJlc3VsdGluZyBpbiBkYXRhIGNvcnJ1cHRpb24gKi8KIAkJaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwgJiYKIAkJICAgIGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTFOWCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvcHJvYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvcHJvYy5jCmluZGV4IDRmMjhlYmEuLjczMjNjMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L3Byb2MuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9wcm9jLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAkgICAgICAgICJmeHNyIiwgInNzZSIsICJzc2UyIiwgInNzIiwgImh0IiwgInRtIiwgImlhNjQiLCAicGJlIiwKIAogCQkvKiBBTUQtZGVmaW5lZCAqLwotCQkicG5pIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJTlVMTCwgTlVMTCwgTlVMTCwgInN5c2NhbGwiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCQlOVUxMLCBOVUxMLCBOVUxMLCAibXAiLCAibngiLCBOVUxMLCAibW14ZXh0IiwgTlVMTCwKIAkJTlVMTCwgImZ4c3Jfb3B0IiwgTlVMTCwgTlVMTCwgTlVMTCwgImxtIiwgIjNkbm93ZXh0IiwgIjNkbm93IiwKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUwppbmRleCAzYzczZGM4Li5hOTkxZDRlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9lbnRyeS5TCkBAIC0yNjAsMTEgKzI2MCw5IEBACiAuc2VjdGlvbiAuZml4dXAsImF4IgogaXJldF9leGM6CiAJc3RpCi0JbW92bCAkX19VU0VSX0RTLCAlZWR4Ci0JbW92bCAlZWR4LCAlZHMKLQltb3ZsICVlZHgsICVlcwotCW1vdmwgJDExLCVlYXgKLQljYWxsIGRvX2V4aXQKKwlwdXNobCAkMAkJCSMgbm8gZXJyb3IgY29kZQorCXB1c2hsICRkb19pcmV0X2Vycm9yCisJam1wIGVycm9yX2NvZGUKIC5wcmV2aW91cwogLnNlY3Rpb24gX19leF90YWJsZSwiYSIKIAkuYWxpZ24gNApAQCAtNTE2LDggKzUxNCw2IEBACiAJeG9ybCAlZWR4LCVlZHgJCQkjIGVycm9yIGNvZGUgMAogCW1vdmwgJWVzcCwlZWF4CQkJIyBwdF9yZWdzIHBvaW50ZXIKIAljYWxsIGRvX2RlYnVnCi0JdGVzdGwgJWVheCwlZWF4Ci0Jam56IHJlc3RvcmVfYWxsCiAJam1wIHJldF9mcm9tX2V4Y2VwdGlvbgogCiAvKgpAQCAtNTk4LDggKzU5NCw2IEBACiAJeG9ybCAlZWR4LCVlZHgJCSMgemVybyBlcnJvciBjb2RlCiAJbW92bCAlZXNwLCVlYXgJCSMgcHRfcmVncyBwb2ludGVyCiAJY2FsbCBkb19pbnQzCi0JdGVzdGwgJWVheCwlZWF4Ci0Jam56IHJlc3RvcmVfYWxsCiAJam1wIHJldF9mcm9tX2V4Y2VwdGlvbgogCiBFTlRSWShvdmVyZmxvdykKQEAgLTY1OCwyOTYgKzY1Miw2IEBACiAJcHVzaGwgJGRvX3NwdXJpb3VzX2ludGVycnVwdF9idWcKIAlqbXAgZXJyb3JfY29kZQogCi0uZGF0YQotRU5UUlkoc3lzX2NhbGxfdGFibGUpCi0JLmxvbmcgc3lzX3Jlc3RhcnRfc3lzY2FsbAkvKiAwIC0gb2xkICJzZXR1cCgpIiBzeXN0ZW0gY2FsbCwgdXNlZCBmb3IgcmVzdGFydGluZyAqLwotCS5sb25nIHN5c19leGl0Ci0JLmxvbmcgc3lzX2ZvcmsKLQkubG9uZyBzeXNfcmVhZAotCS5sb25nIHN5c193cml0ZQotCS5sb25nIHN5c19vcGVuCQkvKiA1ICovCi0JLmxvbmcgc3lzX2Nsb3NlCi0JLmxvbmcgc3lzX3dhaXRwaWQKLQkubG9uZyBzeXNfY3JlYXQKLQkubG9uZyBzeXNfbGluawotCS5sb25nIHN5c191bmxpbmsJLyogMTAgKi8KLQkubG9uZyBzeXNfZXhlY3ZlCi0JLmxvbmcgc3lzX2NoZGlyCi0JLmxvbmcgc3lzX3RpbWUKLQkubG9uZyBzeXNfbWtub2QKLQkubG9uZyBzeXNfY2htb2QJCS8qIDE1ICovCi0JLmxvbmcgc3lzX2xjaG93bjE2Ci0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIGJyZWFrIHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX3N0YXQKLQkubG9uZyBzeXNfbHNlZWsKLQkubG9uZyBzeXNfZ2V0cGlkCS8qIDIwICovCi0JLmxvbmcgc3lzX21vdW50Ci0JLmxvbmcgc3lzX29sZHVtb3VudAotCS5sb25nIHN5c19zZXR1aWQxNgotCS5sb25nIHN5c19nZXR1aWQxNgotCS5sb25nIHN5c19zdGltZQkJLyogMjUgKi8KLQkubG9uZyBzeXNfcHRyYWNlCi0JLmxvbmcgc3lzX2FsYXJtCi0JLmxvbmcgc3lzX2ZzdGF0Ci0JLmxvbmcgc3lzX3BhdXNlCi0JLmxvbmcgc3lzX3V0aW1lCQkvKiAzMCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBzdHR5IHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIGd0dHkgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfYWNjZXNzCi0JLmxvbmcgc3lzX25pY2UKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAzNSAtIG9sZCBmdGltZSBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19zeW5jCi0JLmxvbmcgc3lzX2tpbGwKLQkubG9uZyBzeXNfcmVuYW1lCi0JLmxvbmcgc3lzX21rZGlyCi0JLmxvbmcgc3lzX3JtZGlyCQkvKiA0MCAqLwotCS5sb25nIHN5c19kdXAKLQkubG9uZyBzeXNfcGlwZQotCS5sb25nIHN5c190aW1lcwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBwcm9mIHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX2JyawkJLyogNDUgKi8KLQkubG9uZyBzeXNfc2V0Z2lkMTYKLQkubG9uZyBzeXNfZ2V0Z2lkMTYKLQkubG9uZyBzeXNfc2lnbmFsCi0JLmxvbmcgc3lzX2dldGV1aWQxNgotCS5sb25nIHN5c19nZXRlZ2lkMTYJLyogNTAgKi8KLQkubG9uZyBzeXNfYWNjdAotCS5sb25nIHN5c191bW91bnQJLyogcmVjeWNsZWQgbmV2ZXIgdXNlZCBwaHlzKCkgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgbG9jayBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19pb2N0bAotCS5sb25nIHN5c19mY250bAkJLyogNTUgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgbXB4IHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX3NldHBnaWQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgdWxpbWl0IHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX29sZHVuYW1lCi0JLmxvbmcgc3lzX3VtYXNrCQkvKiA2MCAqLwotCS5sb25nIHN5c19jaHJvb3QKLQkubG9uZyBzeXNfdXN0YXQKLQkubG9uZyBzeXNfZHVwMgotCS5sb25nIHN5c19nZXRwcGlkCi0JLmxvbmcgc3lzX2dldHBncnAJLyogNjUgKi8KLQkubG9uZyBzeXNfc2V0c2lkCi0JLmxvbmcgc3lzX3NpZ2FjdGlvbgotCS5sb25nIHN5c19zZ2V0bWFzawotCS5sb25nIHN5c19zc2V0bWFzawotCS5sb25nIHN5c19zZXRyZXVpZDE2CS8qIDcwICovCi0JLmxvbmcgc3lzX3NldHJlZ2lkMTYKLQkubG9uZyBzeXNfc2lnc3VzcGVuZAotCS5sb25nIHN5c19zaWdwZW5kaW5nCi0JLmxvbmcgc3lzX3NldGhvc3RuYW1lCi0JLmxvbmcgc3lzX3NldHJsaW1pdAkvKiA3NSAqLwotCS5sb25nIHN5c19vbGRfZ2V0cmxpbWl0Ci0JLmxvbmcgc3lzX2dldHJ1c2FnZQotCS5sb25nIHN5c19nZXR0aW1lb2ZkYXkKLQkubG9uZyBzeXNfc2V0dGltZW9mZGF5Ci0JLmxvbmcgc3lzX2dldGdyb3VwczE2CS8qIDgwICovCi0JLmxvbmcgc3lzX3NldGdyb3VwczE2Ci0JLmxvbmcgb2xkX3NlbGVjdAotCS5sb25nIHN5c19zeW1saW5rCi0JLmxvbmcgc3lzX2xzdGF0Ci0JLmxvbmcgc3lzX3JlYWRsaW5rCS8qIDg1ICovCi0JLmxvbmcgc3lzX3VzZWxpYgotCS5sb25nIHN5c19zd2Fwb24KLQkubG9uZyBzeXNfcmVib290Ci0JLmxvbmcgb2xkX3JlYWRkaXIKLQkubG9uZyBvbGRfbW1hcAkJLyogOTAgKi8KLQkubG9uZyBzeXNfbXVubWFwCi0JLmxvbmcgc3lzX3RydW5jYXRlCi0JLmxvbmcgc3lzX2Z0cnVuY2F0ZQotCS5sb25nIHN5c19mY2htb2QKLQkubG9uZyBzeXNfZmNob3duMTYJLyogOTUgKi8KLQkubG9uZyBzeXNfZ2V0cHJpb3JpdHkKLQkubG9uZyBzeXNfc2V0cHJpb3JpdHkKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgcHJvZmlsIHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX3N0YXRmcwotCS5sb25nIHN5c19mc3RhdGZzCS8qIDEwMCAqLwotCS5sb25nIHN5c19pb3Blcm0KLQkubG9uZyBzeXNfc29ja2V0Y2FsbAotCS5sb25nIHN5c19zeXNsb2cKLQkubG9uZyBzeXNfc2V0aXRpbWVyCi0JLmxvbmcgc3lzX2dldGl0aW1lcgkvKiAxMDUgKi8KLQkubG9uZyBzeXNfbmV3c3RhdAotCS5sb25nIHN5c19uZXdsc3RhdAotCS5sb25nIHN5c19uZXdmc3RhdAotCS5sb25nIHN5c191bmFtZQotCS5sb25nIHN5c19pb3BsCQkvKiAxMTAgKi8KLQkubG9uZyBzeXNfdmhhbmd1cAotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAiaWRsZSIgc3lzdGVtIGNhbGwgKi8KLQkubG9uZyBzeXNfdm04Nm9sZAotCS5sb25nIHN5c193YWl0NAotCS5sb25nIHN5c19zd2Fwb2ZmCS8qIDExNSAqLwotCS5sb25nIHN5c19zeXNpbmZvCi0JLmxvbmcgc3lzX2lwYwotCS5sb25nIHN5c19mc3luYwotCS5sb25nIHN5c19zaWdyZXR1cm4KLQkubG9uZyBzeXNfY2xvbmUJCS8qIDEyMCAqLwotCS5sb25nIHN5c19zZXRkb21haW5uYW1lCi0JLmxvbmcgc3lzX25ld3VuYW1lCi0JLmxvbmcgc3lzX21vZGlmeV9sZHQKLQkubG9uZyBzeXNfYWRqdGltZXgKLQkubG9uZyBzeXNfbXByb3RlY3QJLyogMTI1ICovCi0JLmxvbmcgc3lzX3NpZ3Byb2NtYXNrCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkICJjcmVhdGVfbW9kdWxlIiAqLyAKLQkubG9uZyBzeXNfaW5pdF9tb2R1bGUKLQkubG9uZyBzeXNfZGVsZXRlX21vZHVsZQotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDEzMDoJb2xkICJnZXRfa2VybmVsX3N5bXMiICovCi0JLmxvbmcgc3lzX3F1b3RhY3RsCi0JLmxvbmcgc3lzX2dldHBnaWQKLQkubG9uZyBzeXNfZmNoZGlyCi0JLmxvbmcgc3lzX2JkZmx1c2gKLQkubG9uZyBzeXNfc3lzZnMJCS8qIDEzNSAqLwotCS5sb25nIHN5c19wZXJzb25hbGl0eQotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHJlc2VydmVkIGZvciBhZnNfc3lzY2FsbCAqLwotCS5sb25nIHN5c19zZXRmc3VpZDE2Ci0JLmxvbmcgc3lzX3NldGZzZ2lkMTYKLQkubG9uZyBzeXNfbGxzZWVrCS8qIDE0MCAqLwotCS5sb25nIHN5c19nZXRkZW50cwotCS5sb25nIHN5c19zZWxlY3QKLQkubG9uZyBzeXNfZmxvY2sKLQkubG9uZyBzeXNfbXN5bmMKLQkubG9uZyBzeXNfcmVhZHYJCS8qIDE0NSAqLwotCS5sb25nIHN5c193cml0ZXYKLQkubG9uZyBzeXNfZ2V0c2lkCi0JLmxvbmcgc3lzX2ZkYXRhc3luYwotCS5sb25nIHN5c19zeXNjdGwKLQkubG9uZyBzeXNfbWxvY2sJCS8qIDE1MCAqLwotCS5sb25nIHN5c19tdW5sb2NrCi0JLmxvbmcgc3lzX21sb2NrYWxsCi0JLmxvbmcgc3lzX211bmxvY2thbGwKLQkubG9uZyBzeXNfc2NoZWRfc2V0cGFyYW0KLQkubG9uZyBzeXNfc2NoZWRfZ2V0cGFyYW0gICAvKiAxNTUgKi8KLQkubG9uZyBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyCi0JLmxvbmcgc3lzX3NjaGVkX2dldHNjaGVkdWxlcgotCS5sb25nIHN5c19zY2hlZF95aWVsZAotCS5sb25nIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4Ci0JLmxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4gIC8qIDE2MCAqLwotCS5sb25nIHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKLQkubG9uZyBzeXNfbmFub3NsZWVwCi0JLmxvbmcgc3lzX21yZW1hcAotCS5sb25nIHN5c19zZXRyZXN1aWQxNgotCS5sb25nIHN5c19nZXRyZXN1aWQxNgkvKiAxNjUgKi8KLQkubG9uZyBzeXNfdm04NgotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIE9sZCBzeXNfcXVlcnlfbW9kdWxlICovCi0JLmxvbmcgc3lzX3BvbGwKLQkubG9uZyBzeXNfbmZzc2VydmN0bAotCS5sb25nIHN5c19zZXRyZXNnaWQxNgkvKiAxNzAgKi8KLQkubG9uZyBzeXNfZ2V0cmVzZ2lkMTYKLQkubG9uZyBzeXNfcHJjdGwKLQkubG9uZyBzeXNfcnRfc2lncmV0dXJuCi0JLmxvbmcgc3lzX3J0X3NpZ2FjdGlvbgotCS5sb25nIHN5c19ydF9zaWdwcm9jbWFzawkvKiAxNzUgKi8KLQkubG9uZyBzeXNfcnRfc2lncGVuZGluZwotCS5sb25nIHN5c19ydF9zaWd0aW1lZHdhaXQKLQkubG9uZyBzeXNfcnRfc2lncXVldWVpbmZvCi0JLmxvbmcgc3lzX3J0X3NpZ3N1c3BlbmQKLQkubG9uZyBzeXNfcHJlYWQ2NAkvKiAxODAgKi8KLQkubG9uZyBzeXNfcHdyaXRlNjQKLQkubG9uZyBzeXNfY2hvd24xNgotCS5sb25nIHN5c19nZXRjd2QKLQkubG9uZyBzeXNfY2FwZ2V0Ci0JLmxvbmcgc3lzX2NhcHNldAkvKiAxODUgKi8KLQkubG9uZyBzeXNfc2lnYWx0c3RhY2sKLQkubG9uZyBzeXNfc2VuZGZpbGUKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiByZXNlcnZlZCBmb3Igc3RyZWFtczEgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiByZXNlcnZlZCBmb3Igc3RyZWFtczIgKi8KLQkubG9uZyBzeXNfdmZvcmsJCS8qIDE5MCAqLwotCS5sb25nIHN5c19nZXRybGltaXQKLQkubG9uZyBzeXNfbW1hcDIKLQkubG9uZyBzeXNfdHJ1bmNhdGU2NAotCS5sb25nIHN5c19mdHJ1bmNhdGU2NAotCS5sb25nIHN5c19zdGF0NjQJLyogMTk1ICovCi0JLmxvbmcgc3lzX2xzdGF0NjQKLQkubG9uZyBzeXNfZnN0YXQ2NAotCS5sb25nIHN5c19sY2hvd24KLQkubG9uZyBzeXNfZ2V0dWlkCi0JLmxvbmcgc3lzX2dldGdpZAkvKiAyMDAgKi8KLQkubG9uZyBzeXNfZ2V0ZXVpZAotCS5sb25nIHN5c19nZXRlZ2lkCi0JLmxvbmcgc3lzX3NldHJldWlkCi0JLmxvbmcgc3lzX3NldHJlZ2lkCi0JLmxvbmcgc3lzX2dldGdyb3VwcwkvKiAyMDUgKi8KLQkubG9uZyBzeXNfc2V0Z3JvdXBzCi0JLmxvbmcgc3lzX2ZjaG93bgotCS5sb25nIHN5c19zZXRyZXN1aWQKLQkubG9uZyBzeXNfZ2V0cmVzdWlkCi0JLmxvbmcgc3lzX3NldHJlc2dpZAkvKiAyMTAgKi8KLQkubG9uZyBzeXNfZ2V0cmVzZ2lkCi0JLmxvbmcgc3lzX2Nob3duCi0JLmxvbmcgc3lzX3NldHVpZAotCS5sb25nIHN5c19zZXRnaWQKLQkubG9uZyBzeXNfc2V0ZnN1aWQJLyogMjE1ICovCi0JLmxvbmcgc3lzX3NldGZzZ2lkCi0JLmxvbmcgc3lzX3Bpdm90X3Jvb3QKLQkubG9uZyBzeXNfbWluY29yZQotCS5sb25nIHN5c19tYWR2aXNlCi0JLmxvbmcgc3lzX2dldGRlbnRzNjQJLyogMjIwICovCi0JLmxvbmcgc3lzX2ZjbnRsNjQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiByZXNlcnZlZCBmb3IgVFVYICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwKLQkubG9uZyBzeXNfZ2V0dGlkCi0JLmxvbmcgc3lzX3JlYWRhaGVhZAkvKiAyMjUgKi8KLQkubG9uZyBzeXNfc2V0eGF0dHIKLQkubG9uZyBzeXNfbHNldHhhdHRyCi0JLmxvbmcgc3lzX2ZzZXR4YXR0cgotCS5sb25nIHN5c19nZXR4YXR0cgotCS5sb25nIHN5c19sZ2V0eGF0dHIJLyogMjMwICovCi0JLmxvbmcgc3lzX2ZnZXR4YXR0cgotCS5sb25nIHN5c19saXN0eGF0dHIKLQkubG9uZyBzeXNfbGxpc3R4YXR0cgotCS5sb25nIHN5c19mbGlzdHhhdHRyCi0JLmxvbmcgc3lzX3JlbW92ZXhhdHRyCS8qIDIzNSAqLwotCS5sb25nIHN5c19scmVtb3ZleGF0dHIKLQkubG9uZyBzeXNfZnJlbW92ZXhhdHRyCi0JLmxvbmcgc3lzX3RraWxsCi0JLmxvbmcgc3lzX3NlbmRmaWxlNjQKLQkubG9uZyBzeXNfZnV0ZXgJCS8qIDI0MCAqLwotCS5sb25nIHN5c19zY2hlZF9zZXRhZmZpbml0eQotCS5sb25nIHN5c19zY2hlZF9nZXRhZmZpbml0eQotCS5sb25nIHN5c19zZXRfdGhyZWFkX2FyZWEKLQkubG9uZyBzeXNfZ2V0X3RocmVhZF9hcmVhCi0JLmxvbmcgc3lzX2lvX3NldHVwCS8qIDI0NSAqLwotCS5sb25nIHN5c19pb19kZXN0cm95Ci0JLmxvbmcgc3lzX2lvX2dldGV2ZW50cwotCS5sb25nIHN5c19pb19zdWJtaXQKLQkubG9uZyBzeXNfaW9fY2FuY2VsCi0JLmxvbmcgc3lzX2ZhZHZpc2U2NAkvKiAyNTAgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAotCS5sb25nIHN5c19leGl0X2dyb3VwCi0JLmxvbmcgc3lzX2xvb2t1cF9kY29va2llCi0JLmxvbmcgc3lzX2Vwb2xsX2NyZWF0ZQotCS5sb25nIHN5c19lcG9sbF9jdGwJLyogMjU1ICovCi0JLmxvbmcgc3lzX2Vwb2xsX3dhaXQKLSAJLmxvbmcgc3lzX3JlbWFwX2ZpbGVfcGFnZXMKLSAJLmxvbmcgc3lzX3NldF90aWRfYWRkcmVzcwotIAkubG9uZyBzeXNfdGltZXJfY3JlYXRlCi0gCS5sb25nIHN5c190aW1lcl9zZXR0aW1lCQkvKiAyNjAgKi8KLSAJLmxvbmcgc3lzX3RpbWVyX2dldHRpbWUKLSAJLmxvbmcgc3lzX3RpbWVyX2dldG92ZXJydW4KLSAJLmxvbmcgc3lzX3RpbWVyX2RlbGV0ZQotIAkubG9uZyBzeXNfY2xvY2tfc2V0dGltZQotIAkubG9uZyBzeXNfY2xvY2tfZ2V0dGltZQkJLyogMjY1ICovCi0gCS5sb25nIHN5c19jbG9ja19nZXRyZXMKLSAJLmxvbmcgc3lzX2Nsb2NrX25hbm9zbGVlcAotCS5sb25nIHN5c19zdGF0ZnM2NAotCS5sb25nIHN5c19mc3RhdGZzNjQJCi0JLmxvbmcgc3lzX3Rna2lsbAkvKiAyNzAgKi8KLQkubG9uZyBzeXNfdXRpbWVzCi0gCS5sb25nIHN5c19mYWR2aXNlNjRfNjQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfdnNlcnZlciAqLwotCS5sb25nIHN5c19tYmluZAotCS5sb25nIHN5c19nZXRfbWVtcG9saWN5Ci0JLmxvbmcgc3lzX3NldF9tZW1wb2xpY3kKLQkubG9uZyBzeXNfbXFfb3BlbgotCS5sb25nIHN5c19tcV91bmxpbmsKLQkubG9uZyBzeXNfbXFfdGltZWRzZW5kCi0JLmxvbmcgc3lzX21xX3RpbWVkcmVjZWl2ZQkvKiAyODAgKi8KLQkubG9uZyBzeXNfbXFfbm90aWZ5Ci0JLmxvbmcgc3lzX21xX2dldHNldGF0dHIKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogcmVzZXJ2ZWQgZm9yIGtleGVjICovCi0JLmxvbmcgc3lzX3dhaXRpZAotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiAyODUgKi8gLyogYXZhaWxhYmxlICovCi0JLmxvbmcgc3lzX2FkZF9rZXkKLQkubG9uZyBzeXNfcmVxdWVzdF9rZXkKLQkubG9uZyBzeXNfa2V5Y3RsCisjaW5jbHVkZSAic3lzY2FsbF90YWJsZS5TIgogCiBzeXNjYWxsX3RhYmxlX3NpemU9KC4tc3lzX2NhbGxfdGFibGUpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2hlYWQuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCmluZGV4IGQyNzNmZDcuLmU5NjZmYzggMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCkBAIC0zODAsNiArMzgwLDcgQEAKIAlBTElHTgogaWdub3JlX2ludDoKIAljbGQKKyNpZmRlZiBDT05GSUdfUFJJTlRLCiAJcHVzaGwgJWVheAogCXB1c2hsICVlY3gKIAlwdXNobCAlZWR4CkBAIC00MDAsNiArNDAxLDcgQEAKIAlwb3BsICVlZHgKIAlwb3BsICVlY3gKIAlwb3BsICVlYXgKKyNlbmRpZgogCWlyZXQKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvaTM4Nl9rc3ltcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9pMzg2X2tzeW1zLmMKaW5kZXggMTRlYzM1NC4uOTAzMTkwYSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9pMzg2X2tzeW1zLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9pMzg2X2tzeW1zLmMKQEAgLTE2OSwxMCArMTY5LDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHNldF9ubWlfY2FsbGJhY2spOwogRVhQT1JUX1NZTUJPTF9HUEwodW5zZXRfbm1pX2NhbGxiYWNrKTsKIAotI3VuZGVmIG1lbWNtcAotZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwotRVhQT1JUX1NZTUJPTChtZW1jbXApOwotCiBFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2RpZV9ub3RpZmllcik7CiAjaWZkZWYgQ09ORklHX0hBVkVfREVDX0xPQ0sKIEVYUE9SVF9TWU1CT0woX2F0b21pY19kZWNfYW5kX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9pb19hcGljLmMgYi9hcmNoL2kzODYva2VybmVsL2lvX2FwaWMuYwppbmRleCA1ZTBkNTViLi43YTMyNGU4IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2lvX2FwaWMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2lvX2FwaWMuYwpAQCAtMjE3NSw3ICsyMTc1LDYgQEAKIAkJCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKIAkJCQlzZXR1cF9ubWkoKTsKIAkJCQllbmFibGVfODI1OUFfaXJxKDApOwotCQkJCWNoZWNrX25taV93YXRjaGRvZygpOwogCQkJfQogCQkJcmV0dXJuOwogCQl9CkBAIC0yMTk4LDcgKzIxOTcsNiBAQAogCQkJCWFkZF9waW5fdG9faXJxKDAsIDAsIHBpbjIpOwogCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewogCQkJCXNldHVwX25taSgpOwotCQkJCWNoZWNrX25taV93YXRjaGRvZygpOwogCQkJfQogCQkJcmV0dXJuOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDY3MTY4MTYuLjU5ZmY5YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC0yMTcsNiArMjE3LDEzIEBACiAJCSp0b3MgJj0gfihURl9NQVNLIHwgSUZfTUFTSyk7CiAJCSp0b3MgfD0ga3Byb2JlX29sZF9lZmxhZ3M7CiAJCWJyZWFrOworCWNhc2UgMHhjMzoJCS8qIHJldC9scmV0ICovCisJY2FzZSAweGNiOgorCWNhc2UgMHhjMjoKKwljYXNlIDB4Y2E6CisJCXJlZ3MtPmVmbGFncyAmPSB+VEZfTUFTSzsKKwkJLyogZWlwIGlzIGFscmVhZHkgYWRqdXN0ZWQsIG5vIG1vcmUgY2hhbmdlcyByZXF1aXJlZCovCisJCXJldHVybjsKIAljYXNlIDB4ZTg6CQkvKiBjYWxsIHJlbGF0aXZlIC0gRml4IHJldHVybiBhZGRyICovCiAJCSp0b3MgPSBvcmlnX2VpcCArICgqdG9zIC0gY29weV9laXApOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMgYi9hcmNoL2kzODYva2VybmVsL25taS5jCmluZGV4IDJmODlkMDAuLjJjMGVlOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYwpAQCAtMTAyLDIwICsxMDIsMjEgQEAKIAkoUDRfQ0NDUl9PVkZfUE1JMHxQNF9DQ0NSX1RIUkVTSE9MRCgxNSl8UDRfQ0NDUl9DT01QTEVNRU5UfAlcCiAJIFA0X0NDQ1JfQ09NUEFSRXxQNF9DQ0NSX1JFUVVJUkVEfFA0X0NDQ1JfRVNDUl9TRUxFQ1QoNCl8UDRfQ0NDUl9FTkFCTEUpCiAKLWludCBfX2luaXQgY2hlY2tfbm1pX3dhdGNoZG9nICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHByZXZfbm1pX2NvdW50W05SX0NQVVNdOwogCWludCBjcHU7CiAKLQlwcmludGsoS0VSTl9JTkZPICJ0ZXN0aW5nIE5NSSB3YXRjaGRvZyAuLi4gIik7CisJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfTk9ORSkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJUZXN0aW5nIE5NSSB3YXRjaGRvZyAuLi4gIik7CiAKIAlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKQogCQlwcmV2X25taV9jb3VudFtjcHVdID0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5fX25taV9jb3VudDsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJbWRlbGF5KCgxMCoxMDAwKS9ubWlfaHopOyAvLyB3YWl0IDEwIHRpY2tzCiAKLQkvKiBGSVhNRTogT25seSBib290IENQVSBpcyBvbmxpbmUgYXQgdGhpcyBzdGFnZS4gIENoZWNrIENQVXMKLSAgICAgICAgICAgYXMgdGhleSBjb21lIHVwLiAqLwogCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKICNpZmRlZiBDT05GSUdfU01QCiAJCS8qIENoZWNrIGNwdV9jYWxsaW5fbWFwIGhlcmUgYmVjYXVzZSB0aGF0IGlzIHNldApAQCAtMTM5LDYgKzE0MCw4IEBACiAKIAlyZXR1cm4gMDsKIH0KKy8qIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGxhdGVyIGluIGJvb3Qgc28gY291bnRlcnMgYXJlIHdvcmtpbmcgKi8KK2xhdGVfaW5pdGNhbGwoY2hlY2tfbm1pX3dhdGNoZG9nKTsKIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfbm1pX3dhdGNoZG9nKGNoYXIgKnN0cikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYjIyMDNlMi4uOTZlM2VhNiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTQwMCwxMSArNDAwLDYgQEAKIAlpbnQgZXJyOwogCiAJY2hpbGRyZWdzID0gKChzdHJ1Y3QgcHRfcmVncyAqKSAoVEhSRUFEX1NJWkUgKyAodW5zaWduZWQgbG9uZykgcC0+dGhyZWFkX2luZm8pKSAtIDE7Ci0JKmNoaWxkcmVncyA9ICpyZWdzOwotCWNoaWxkcmVncy0+ZWF4ID0gMDsKLQljaGlsZHJlZ3MtPmVzcCA9IGVzcDsKLQotCXAtPnRocmVhZC5lc3AgPSAodW5zaWduZWQgbG9uZykgY2hpbGRyZWdzOwogCS8qCiAJICogVGhlIGJlbG93IC04IGlzIHRvIHJlc2VydmUgOCBieXRlcyBvbiB0b3Agb2YgdGhlIHJpbmcwIHN0YWNrLgogCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBlbnRpcmUgInN0cnVjdCBwdF9yZWdzIgpAQCAtNDE1LDcgKzQxMCwxMyBAQAogCSAqICJzdHJ1Y3QgcHRfcmVncyIgaXMgcG9zc2libGUsIGJ1dCB0aGV5IG1heSBjb250YWluIHRoZQogCSAqIGNvbXBsZXRlbHkgd3JvbmcgdmFsdWVzLgogCSAqLwotCXAtPnRocmVhZC5lc3AwID0gKHVuc2lnbmVkIGxvbmcpIChjaGlsZHJlZ3MrMSkgLSA4OworCWNoaWxkcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKSAoKHVuc2lnbmVkIGxvbmcpIGNoaWxkcmVncyAtIDgpOworCSpjaGlsZHJlZ3MgPSAqcmVnczsKKwljaGlsZHJlZ3MtPmVheCA9IDA7CisJY2hpbGRyZWdzLT5lc3AgPSBlc3A7CisKKwlwLT50aHJlYWQuZXNwID0gKHVuc2lnbmVkIGxvbmcpIGNoaWxkcmVnczsKKwlwLT50aHJlYWQuZXNwMCA9ICh1bnNpZ25lZCBsb25nKSAoY2hpbGRyZWdzKzEpOwogCiAJcC0+dGhyZWFkLmVpcCA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9mb3JrOwogCkBAIC02MTEsOCArNjEyLDggQEAKIAkgKiBTYXZlIGF3YXkgJWZzIGFuZCAlZ3MuIE5vIG5lZWQgdG8gc2F2ZSAlZXMgYW5kICVkcywgYXMKIAkgKiB0aG9zZSBhcmUgYWx3YXlzIGtlcm5lbCBzZWdtZW50cyB3aGlsZSBpbnNpZGUgdGhlIGtlcm5lbC4KIAkgKi8KLQlhc20gdm9sYXRpbGUoIm1vdmwgJSVmcywlMCI6Ij1tIiAoKihpbnQgKikmcHJldi0+ZnMpKTsKLQlhc20gdm9sYXRpbGUoIm1vdmwgJSVncywlMCI6Ij1tIiAoKihpbnQgKikmcHJldi0+Z3MpKTsKKwlhc20gdm9sYXRpbGUoIm1vdiAlJWZzLCUwIjoiPW0iIChwcmV2LT5mcykpOworCWFzbSB2b2xhdGlsZSgibW92ICUlZ3MsJTAiOiI9bSIgKHByZXYtPmdzKSk7CiAKIAkvKgogCSAqIFJlc3RvcmUgJWZzIGFuZCAlZ3MgaWYgbmVlZGVkLgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHRyYWNlLmMKaW5kZXggYjJmMTc2NC4uZTM0ZjY1MSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY2NvbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTUxMSw3ICs1MTIsNyBAQAogCWNhc2UgUFRSQUNFX1NZU0NBTEw6CS8qIGNvbnRpbnVlIGFuZCBzdG9wIGF0IG5leHQgKHJldHVybiBmcm9tKSBzeXNjYWxsICovCiAJY2FzZSBQVFJBQ0VfQ09OVDoJLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkgewogCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpAQCAtNTQzLDcgKzU0NCw3IEBACiAKIAljYXNlIFBUUkFDRV9TSU5HTEVTVEVQOgkvKiBzZXQgdGhlIHRyYXAgZmxhZy4gKi8KIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwogCQlzZXRfc2luZ2xlc3RlcChjaGlsZCk7CkBAIC02ODIsMjQgKzY4MywxOCBAQAogCS8qIGRvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGNoZWNrIGZpcnN0ICovCiAJc2VjdXJlX2NvbXB1dGluZyhyZWdzLT5vcmlnX2VheCk7CiAKLQlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpIHsKLQkJaWYgKCFlbnRyeWV4aXQpCi0JCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGN1cnJlbnQsIHJlZ3MtPm9yaWdfZWF4LAotCQkJCQkgICAgcmVncy0+ZWJ4LCByZWdzLT5lY3gsCi0JCQkJCSAgICByZWdzLT5lZHgsIHJlZ3MtPmVzaSk7Ci0JCWVsc2UKLQkJCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCByZWdzLT5lYXgpOwotCX0KKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkgJiYgZW50cnlleGl0KQorCQlhdWRpdF9zeXNjYWxsX2V4aXQoY3VycmVudCwgQVVESVRTQ19SRVNVTFQocmVncy0+ZWF4KSwgcmVncy0+ZWF4KTsKIAogCWlmICghKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJLyogRmFrZSBhIGRlYnVnIHRyYXAgKi8KIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpCiAJCXNlbmRfc2lndHJhcChjdXJyZW50LCByZWdzLCAwKTsKIAogCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAkvKiB0aGUgMHg4MCBwcm92aWRlcyBhIHdheSBmb3IgdGhlIHRyYWNpbmcgcGFyZW50IHRvIGRpc3Rpbmd1aXNoCiAJICAgYmV0d2VlbiBhIHN5c2NhbGwgc3RvcCBhbmQgU0lHVFJBUCBkZWxpdmVyeSAqLwpAQCAtNzE0LDQgKzcwOSw5IEBACiAJCXNlbmRfc2lnKGN1cnJlbnQtPmV4aXRfY29kZSwgY3VycmVudCwgMSk7CiAJCWN1cnJlbnQtPmV4aXRfY29kZSA9IDA7CiAJfQorIG91dDoKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkgJiYgIWVudHJ5ZXhpdCkKKwkJYXVkaXRfc3lzY2FsbF9lbnRyeShjdXJyZW50LCBBVURJVF9BUkNIX0kzODYsIHJlZ3MtPm9yaWdfZWF4LAorCQkJCSAgICByZWdzLT5lYngsIHJlZ3MtPmVjeCwgcmVncy0+ZWR4LCByZWdzLT5lc2kpOworCiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3JlYm9vdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCAzZDdlOTk0Li42ZGMyN2ViIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3JlYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcmVib290LmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSAibWFjaF9yZWJvb3QuaCIKKyNpbmNsdWRlIDxsaW51eC9yZWJvb3RfZml4dXBzLmg+CiAKIC8qCiAgKiBQb3dlciBvZmYgZnVuY3Rpb24sIGlmIGFueQpAQCAtMzQ4LDYgKzM0OSw3IEBACiAJCS8qIHJlYm9vdGluZyBuZWVkcyB0byB0b3VjaCB0aGUgcGFnZSBhdCBhYnNvbHV0ZSBhZGRyIDAgKi8KIAkJKigodW5zaWduZWQgc2hvcnQgKilfX3ZhKDB4NDcyKSkgPSByZWJvb3RfbW9kZTsKIAkJZm9yICg7OykgeworCQkJbWFjaF9yZWJvb3RfZml4dXBzKCk7IC8qIGZvciBib2FyZCBzcGVjaWZpYyBmaXh1cHMgKi8KIAkJCW1hY2hfcmVib290KCk7CiAJCQkvKiBUaGF0IGRpZG4ndCB3b3JrIC0gZm9yY2UgYSB0cmlwbGUgZmF1bHQuLiAqLwogCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxpZHQgJTAiOiA6Im0iIChub19pZHQpKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcmVib290X2ZpeHVwcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3RfZml4dXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIxODNiMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcmVib290X2ZpeHVwcy5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2kzODYva2VybmVsL3JlYm9vdF9maXh1cHMuYworICoKKyAqIFRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHB1dCBib2FyZCBzcGVjaWZpYyByZWJvb3QgZml4dXBzLgorICoKKyAqIExpc3Qgb2Ygc3VwcG9ydGVkIGZpeHVwczoKKyAqIGdlb2RlLWd4MS9jczU1MzBhIC0gSmF5YSBLdW1hciA8amF5YWxrQGludHdvcmtzLmJpej4KKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCitzdGF0aWMgdm9pZCBjczU1MzBhX3dhcm1fcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwkvKiB3cml0aW5nIDEgdG8gdGhlIHJlc2V0IGNvbnRyb2wgcmVnaXN0ZXIsIDB4NDQgY2F1c2VzIHRoZQorCWNzNTUzMGEgdG8gcGVyZm9ybSBhIHN5c3RlbSB3YXJtIHJlc2V0ICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0NCwgMHgxKTsKKwl1ZGVsYXkoNTApOyAvKiBzaG91bGRuJ3QgZ2V0IGhlcmUgYnV0IGJlIHNhZmUgYW5kIHNwaW4tYS13aGlsZSAqLworCXJldHVybjsKK30KKworc3RydWN0IGRldmljZV9maXh1cCB7CisJdW5zaWduZWQgaW50IHZlbmRvcjsKKwl1bnNpZ25lZCBpbnQgZGV2aWNlOworCXZvaWQgKCpyZWJvb3RfZml4dXApKHN0cnVjdCBwY2lfZGV2ICopOworfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZml4dXAgZml4dXBzX3RhYmxlW10gPSB7Cit7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9MRUdBQ1ksIGNzNTUzMGFfd2FybV9yZXNldCB9LAorfTsKKworLyoKKyAqIHdlIHNlZSBpZiBhbnkgZml4dXAgaXMgYXZhaWxhYmxlIGZvciBvdXIgY3VycmVudCBoYXJkd2FyZS4gaWYgdGhlcmUKKyAqIGlzIGEgZml4dXAsIHdlIGNhbGwgaXQgYW5kIHdlIGV4cGVjdCB0byBuZXZlciByZXR1cm4gZnJvbSBpdC4gaWYgd2UKKyAqIGRvIHJldHVybiwgd2Uga2VlcCBsb29raW5nIGFuZCB0aGVuIGV2ZW50dWFsbHkgZmFsbCBiYWNrIHRvIHRoZQorICogc3RhbmRhcmQgbWFjaF9yZWJvb3Qgb24gcmV0dXJuLgorICovCit2b2lkIG1hY2hfcmVib290X2ZpeHVwcyh2b2lkKQoreworCXN0cnVjdCBkZXZpY2VfZml4dXAgKmN1cjsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWludCBpOworCisJZm9yIChpPTA7IGkgPCAoc2l6ZW9mKGZpeHVwc190YWJsZSkvc2l6ZW9mKGZpeHVwc190YWJsZVswXSkpOyBpKyspIHsKKwkJY3VyID0gJihmaXh1cHNfdGFibGVbaV0pOworCQlkZXYgPSBwY2lfZ2V0X2RldmljZShjdXItPnZlbmRvciwgY3VyLT5kZXZpY2UsIDApOworCQlpZiAoIWRldikKKwkJCWNvbnRpbnVlOworCisJCWN1ci0+cmVib290X2ZpeHVwKGRldik7CisJfQorCisJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gcmVib290IGZpeHVwIGZvdW5kIGZvciB5b3VyIGhhcmR3YXJlXG4iKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYwppbmRleCBmZDM2ZDJmLi5jYmVhN2FjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMTA4OSw5ICsxMDg5LDYgQEAKIAkJfQogCX0KIAotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0xPQ0FMX0FQSUMpCi0JCWNoZWNrX25taV93YXRjaGRvZygpOwotCiAJc21wYm9vdF9zZXR1cF9pb19hcGljKCk7CiAKIAlzZXR1cF9ib290X0FQSUNfY2xvY2soKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9pMzg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkMWVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0wLDAgKzEsMjkxIEBACisuZGF0YQorRU5UUlkoc3lzX2NhbGxfdGFibGUpCisJLmxvbmcgc3lzX3Jlc3RhcnRfc3lzY2FsbAkvKiAwIC0gb2xkICJzZXR1cCgpIiBzeXN0ZW0gY2FsbCwgdXNlZCBmb3IgcmVzdGFydGluZyAqLworCS5sb25nIHN5c19leGl0CisJLmxvbmcgc3lzX2ZvcmsKKwkubG9uZyBzeXNfcmVhZAorCS5sb25nIHN5c193cml0ZQorCS5sb25nIHN5c19vcGVuCQkvKiA1ICovCisJLmxvbmcgc3lzX2Nsb3NlCisJLmxvbmcgc3lzX3dhaXRwaWQKKwkubG9uZyBzeXNfY3JlYXQKKwkubG9uZyBzeXNfbGluaworCS5sb25nIHN5c191bmxpbmsJLyogMTAgKi8KKwkubG9uZyBzeXNfZXhlY3ZlCisJLmxvbmcgc3lzX2NoZGlyCisJLmxvbmcgc3lzX3RpbWUKKwkubG9uZyBzeXNfbWtub2QKKwkubG9uZyBzeXNfY2htb2QJCS8qIDE1ICovCisJLmxvbmcgc3lzX2xjaG93bjE2CisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIGJyZWFrIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX3N0YXQKKwkubG9uZyBzeXNfbHNlZWsKKwkubG9uZyBzeXNfZ2V0cGlkCS8qIDIwICovCisJLmxvbmcgc3lzX21vdW50CisJLmxvbmcgc3lzX29sZHVtb3VudAorCS5sb25nIHN5c19zZXR1aWQxNgorCS5sb25nIHN5c19nZXR1aWQxNgorCS5sb25nIHN5c19zdGltZQkJLyogMjUgKi8KKwkubG9uZyBzeXNfcHRyYWNlCisJLmxvbmcgc3lzX2FsYXJtCisJLmxvbmcgc3lzX2ZzdGF0CisJLmxvbmcgc3lzX3BhdXNlCisJLmxvbmcgc3lzX3V0aW1lCQkvKiAzMCAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBzdHR5IHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIGd0dHkgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfYWNjZXNzCisJLmxvbmcgc3lzX25pY2UKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAzNSAtIG9sZCBmdGltZSBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19zeW5jCisJLmxvbmcgc3lzX2tpbGwKKwkubG9uZyBzeXNfcmVuYW1lCisJLmxvbmcgc3lzX21rZGlyCisJLmxvbmcgc3lzX3JtZGlyCQkvKiA0MCAqLworCS5sb25nIHN5c19kdXAKKwkubG9uZyBzeXNfcGlwZQorCS5sb25nIHN5c190aW1lcworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBwcm9mIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX2JyawkJLyogNDUgKi8KKwkubG9uZyBzeXNfc2V0Z2lkMTYKKwkubG9uZyBzeXNfZ2V0Z2lkMTYKKwkubG9uZyBzeXNfc2lnbmFsCisJLmxvbmcgc3lzX2dldGV1aWQxNgorCS5sb25nIHN5c19nZXRlZ2lkMTYJLyogNTAgKi8KKwkubG9uZyBzeXNfYWNjdAorCS5sb25nIHN5c191bW91bnQJLyogcmVjeWNsZWQgbmV2ZXIgdXNlZCBwaHlzKCkgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgbG9jayBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19pb2N0bAorCS5sb25nIHN5c19mY250bAkJLyogNTUgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgbXB4IHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX3NldHBnaWQKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgdWxpbWl0IHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX29sZHVuYW1lCisJLmxvbmcgc3lzX3VtYXNrCQkvKiA2MCAqLworCS5sb25nIHN5c19jaHJvb3QKKwkubG9uZyBzeXNfdXN0YXQKKwkubG9uZyBzeXNfZHVwMgorCS5sb25nIHN5c19nZXRwcGlkCisJLmxvbmcgc3lzX2dldHBncnAJLyogNjUgKi8KKwkubG9uZyBzeXNfc2V0c2lkCisJLmxvbmcgc3lzX3NpZ2FjdGlvbgorCS5sb25nIHN5c19zZ2V0bWFzaworCS5sb25nIHN5c19zc2V0bWFzaworCS5sb25nIHN5c19zZXRyZXVpZDE2CS8qIDcwICovCisJLmxvbmcgc3lzX3NldHJlZ2lkMTYKKwkubG9uZyBzeXNfc2lnc3VzcGVuZAorCS5sb25nIHN5c19zaWdwZW5kaW5nCisJLmxvbmcgc3lzX3NldGhvc3RuYW1lCisJLmxvbmcgc3lzX3NldHJsaW1pdAkvKiA3NSAqLworCS5sb25nIHN5c19vbGRfZ2V0cmxpbWl0CisJLmxvbmcgc3lzX2dldHJ1c2FnZQorCS5sb25nIHN5c19nZXR0aW1lb2ZkYXkKKwkubG9uZyBzeXNfc2V0dGltZW9mZGF5CisJLmxvbmcgc3lzX2dldGdyb3VwczE2CS8qIDgwICovCisJLmxvbmcgc3lzX3NldGdyb3VwczE2CisJLmxvbmcgb2xkX3NlbGVjdAorCS5sb25nIHN5c19zeW1saW5rCisJLmxvbmcgc3lzX2xzdGF0CisJLmxvbmcgc3lzX3JlYWRsaW5rCS8qIDg1ICovCisJLmxvbmcgc3lzX3VzZWxpYgorCS5sb25nIHN5c19zd2Fwb24KKwkubG9uZyBzeXNfcmVib290CisJLmxvbmcgb2xkX3JlYWRkaXIKKwkubG9uZyBvbGRfbW1hcAkJLyogOTAgKi8KKwkubG9uZyBzeXNfbXVubWFwCisJLmxvbmcgc3lzX3RydW5jYXRlCisJLmxvbmcgc3lzX2Z0cnVuY2F0ZQorCS5sb25nIHN5c19mY2htb2QKKwkubG9uZyBzeXNfZmNob3duMTYJLyogOTUgKi8KKwkubG9uZyBzeXNfZ2V0cHJpb3JpdHkKKwkubG9uZyBzeXNfc2V0cHJpb3JpdHkKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgcHJvZmlsIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX3N0YXRmcworCS5sb25nIHN5c19mc3RhdGZzCS8qIDEwMCAqLworCS5sb25nIHN5c19pb3Blcm0KKwkubG9uZyBzeXNfc29ja2V0Y2FsbAorCS5sb25nIHN5c19zeXNsb2cKKwkubG9uZyBzeXNfc2V0aXRpbWVyCisJLmxvbmcgc3lzX2dldGl0aW1lcgkvKiAxMDUgKi8KKwkubG9uZyBzeXNfbmV3c3RhdAorCS5sb25nIHN5c19uZXdsc3RhdAorCS5sb25nIHN5c19uZXdmc3RhdAorCS5sb25nIHN5c191bmFtZQorCS5sb25nIHN5c19pb3BsCQkvKiAxMTAgKi8KKwkubG9uZyBzeXNfdmhhbmd1cAorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAiaWRsZSIgc3lzdGVtIGNhbGwgKi8KKwkubG9uZyBzeXNfdm04Nm9sZAorCS5sb25nIHN5c193YWl0NAorCS5sb25nIHN5c19zd2Fwb2ZmCS8qIDExNSAqLworCS5sb25nIHN5c19zeXNpbmZvCisJLmxvbmcgc3lzX2lwYworCS5sb25nIHN5c19mc3luYworCS5sb25nIHN5c19zaWdyZXR1cm4KKwkubG9uZyBzeXNfY2xvbmUJCS8qIDEyMCAqLworCS5sb25nIHN5c19zZXRkb21haW5uYW1lCisJLmxvbmcgc3lzX25ld3VuYW1lCisJLmxvbmcgc3lzX21vZGlmeV9sZHQKKwkubG9uZyBzeXNfYWRqdGltZXgKKwkubG9uZyBzeXNfbXByb3RlY3QJLyogMTI1ICovCisJLmxvbmcgc3lzX3NpZ3Byb2NtYXNrCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkICJjcmVhdGVfbW9kdWxlIiAqLworCS5sb25nIHN5c19pbml0X21vZHVsZQorCS5sb25nIHN5c19kZWxldGVfbW9kdWxlCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogMTMwOglvbGQgImdldF9rZXJuZWxfc3ltcyIgKi8KKwkubG9uZyBzeXNfcXVvdGFjdGwKKwkubG9uZyBzeXNfZ2V0cGdpZAorCS5sb25nIHN5c19mY2hkaXIKKwkubG9uZyBzeXNfYmRmbHVzaAorCS5sb25nIHN5c19zeXNmcwkJLyogMTM1ICovCisJLmxvbmcgc3lzX3BlcnNvbmFsaXR5CisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogcmVzZXJ2ZWQgZm9yIGFmc19zeXNjYWxsICovCisJLmxvbmcgc3lzX3NldGZzdWlkMTYKKwkubG9uZyBzeXNfc2V0ZnNnaWQxNgorCS5sb25nIHN5c19sbHNlZWsJLyogMTQwICovCisJLmxvbmcgc3lzX2dldGRlbnRzCisJLmxvbmcgc3lzX3NlbGVjdAorCS5sb25nIHN5c19mbG9jaworCS5sb25nIHN5c19tc3luYworCS5sb25nIHN5c19yZWFkdgkJLyogMTQ1ICovCisJLmxvbmcgc3lzX3dyaXRldgorCS5sb25nIHN5c19nZXRzaWQKKwkubG9uZyBzeXNfZmRhdGFzeW5jCisJLmxvbmcgc3lzX3N5c2N0bAorCS5sb25nIHN5c19tbG9jawkJLyogMTUwICovCisJLmxvbmcgc3lzX211bmxvY2sKKwkubG9uZyBzeXNfbWxvY2thbGwKKwkubG9uZyBzeXNfbXVubG9ja2FsbAorCS5sb25nIHN5c19zY2hlZF9zZXRwYXJhbQorCS5sb25nIHN5c19zY2hlZF9nZXRwYXJhbSAgIC8qIDE1NSAqLworCS5sb25nIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIKKwkubG9uZyBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyCisJLmxvbmcgc3lzX3NjaGVkX3lpZWxkCisJLmxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKKwkubG9uZyBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgLyogMTYwICovCisJLmxvbmcgc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbAorCS5sb25nIHN5c19uYW5vc2xlZXAKKwkubG9uZyBzeXNfbXJlbWFwCisJLmxvbmcgc3lzX3NldHJlc3VpZDE2CisJLmxvbmcgc3lzX2dldHJlc3VpZDE2CS8qIDE2NSAqLworCS5sb25nIHN5c192bTg2CisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogT2xkIHN5c19xdWVyeV9tb2R1bGUgKi8KKwkubG9uZyBzeXNfcG9sbAorCS5sb25nIHN5c19uZnNzZXJ2Y3RsCisJLmxvbmcgc3lzX3NldHJlc2dpZDE2CS8qIDE3MCAqLworCS5sb25nIHN5c19nZXRyZXNnaWQxNgorCS5sb25nIHN5c19wcmN0bAorCS5sb25nIHN5c19ydF9zaWdyZXR1cm4KKwkubG9uZyBzeXNfcnRfc2lnYWN0aW9uCisJLmxvbmcgc3lzX3J0X3NpZ3Byb2NtYXNrCS8qIDE3NSAqLworCS5sb25nIHN5c19ydF9zaWdwZW5kaW5nCisJLmxvbmcgc3lzX3J0X3NpZ3RpbWVkd2FpdAorCS5sb25nIHN5c19ydF9zaWdxdWV1ZWluZm8KKwkubG9uZyBzeXNfcnRfc2lnc3VzcGVuZAorCS5sb25nIHN5c19wcmVhZDY0CS8qIDE4MCAqLworCS5sb25nIHN5c19wd3JpdGU2NAorCS5sb25nIHN5c19jaG93bjE2CisJLmxvbmcgc3lzX2dldGN3ZAorCS5sb25nIHN5c19jYXBnZXQKKwkubG9uZyBzeXNfY2Fwc2V0CS8qIDE4NSAqLworCS5sb25nIHN5c19zaWdhbHRzdGFjaworCS5sb25nIHN5c19zZW5kZmlsZQorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHJlc2VydmVkIGZvciBzdHJlYW1zMSAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHJlc2VydmVkIGZvciBzdHJlYW1zMiAqLworCS5sb25nIHN5c192Zm9yawkJLyogMTkwICovCisJLmxvbmcgc3lzX2dldHJsaW1pdAorCS5sb25nIHN5c19tbWFwMgorCS5sb25nIHN5c190cnVuY2F0ZTY0CisJLmxvbmcgc3lzX2Z0cnVuY2F0ZTY0CisJLmxvbmcgc3lzX3N0YXQ2NAkvKiAxOTUgKi8KKwkubG9uZyBzeXNfbHN0YXQ2NAorCS5sb25nIHN5c19mc3RhdDY0CisJLmxvbmcgc3lzX2xjaG93bgorCS5sb25nIHN5c19nZXR1aWQKKwkubG9uZyBzeXNfZ2V0Z2lkCS8qIDIwMCAqLworCS5sb25nIHN5c19nZXRldWlkCisJLmxvbmcgc3lzX2dldGVnaWQKKwkubG9uZyBzeXNfc2V0cmV1aWQKKwkubG9uZyBzeXNfc2V0cmVnaWQKKwkubG9uZyBzeXNfZ2V0Z3JvdXBzCS8qIDIwNSAqLworCS5sb25nIHN5c19zZXRncm91cHMKKwkubG9uZyBzeXNfZmNob3duCisJLmxvbmcgc3lzX3NldHJlc3VpZAorCS5sb25nIHN5c19nZXRyZXN1aWQKKwkubG9uZyBzeXNfc2V0cmVzZ2lkCS8qIDIxMCAqLworCS5sb25nIHN5c19nZXRyZXNnaWQKKwkubG9uZyBzeXNfY2hvd24KKwkubG9uZyBzeXNfc2V0dWlkCisJLmxvbmcgc3lzX3NldGdpZAorCS5sb25nIHN5c19zZXRmc3VpZAkvKiAyMTUgKi8KKwkubG9uZyBzeXNfc2V0ZnNnaWQKKwkubG9uZyBzeXNfcGl2b3Rfcm9vdAorCS5sb25nIHN5c19taW5jb3JlCisJLmxvbmcgc3lzX21hZHZpc2UKKwkubG9uZyBzeXNfZ2V0ZGVudHM2NAkvKiAyMjAgKi8KKwkubG9uZyBzeXNfZmNudGw2NAorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHJlc2VydmVkIGZvciBUVVggKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAorCS5sb25nIHN5c19nZXR0aWQKKwkubG9uZyBzeXNfcmVhZGFoZWFkCS8qIDIyNSAqLworCS5sb25nIHN5c19zZXR4YXR0cgorCS5sb25nIHN5c19sc2V0eGF0dHIKKwkubG9uZyBzeXNfZnNldHhhdHRyCisJLmxvbmcgc3lzX2dldHhhdHRyCisJLmxvbmcgc3lzX2xnZXR4YXR0cgkvKiAyMzAgKi8KKwkubG9uZyBzeXNfZmdldHhhdHRyCisJLmxvbmcgc3lzX2xpc3R4YXR0cgorCS5sb25nIHN5c19sbGlzdHhhdHRyCisJLmxvbmcgc3lzX2ZsaXN0eGF0dHIKKwkubG9uZyBzeXNfcmVtb3ZleGF0dHIJLyogMjM1ICovCisJLmxvbmcgc3lzX2xyZW1vdmV4YXR0cgorCS5sb25nIHN5c19mcmVtb3ZleGF0dHIKKwkubG9uZyBzeXNfdGtpbGwKKwkubG9uZyBzeXNfc2VuZGZpbGU2NAorCS5sb25nIHN5c19mdXRleAkJLyogMjQwICovCisJLmxvbmcgc3lzX3NjaGVkX3NldGFmZmluaXR5CisJLmxvbmcgc3lzX3NjaGVkX2dldGFmZmluaXR5CisJLmxvbmcgc3lzX3NldF90aHJlYWRfYXJlYQorCS5sb25nIHN5c19nZXRfdGhyZWFkX2FyZWEKKwkubG9uZyBzeXNfaW9fc2V0dXAJLyogMjQ1ICovCisJLmxvbmcgc3lzX2lvX2Rlc3Ryb3kKKwkubG9uZyBzeXNfaW9fZ2V0ZXZlbnRzCisJLmxvbmcgc3lzX2lvX3N1Ym1pdAorCS5sb25nIHN5c19pb19jYW5jZWwKKwkubG9uZyBzeXNfZmFkdmlzZTY0CS8qIDI1MCAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCisJLmxvbmcgc3lzX2V4aXRfZ3JvdXAKKwkubG9uZyBzeXNfbG9va3VwX2Rjb29raWUKKwkubG9uZyBzeXNfZXBvbGxfY3JlYXRlCisJLmxvbmcgc3lzX2Vwb2xsX2N0bAkvKiAyNTUgKi8KKwkubG9uZyBzeXNfZXBvbGxfd2FpdAorIAkubG9uZyBzeXNfcmVtYXBfZmlsZV9wYWdlcworIAkubG9uZyBzeXNfc2V0X3RpZF9hZGRyZXNzCisgCS5sb25nIHN5c190aW1lcl9jcmVhdGUKKyAJLmxvbmcgc3lzX3RpbWVyX3NldHRpbWUJCS8qIDI2MCAqLworIAkubG9uZyBzeXNfdGltZXJfZ2V0dGltZQorIAkubG9uZyBzeXNfdGltZXJfZ2V0b3ZlcnJ1bgorIAkubG9uZyBzeXNfdGltZXJfZGVsZXRlCisgCS5sb25nIHN5c19jbG9ja19zZXR0aW1lCisgCS5sb25nIHN5c19jbG9ja19nZXR0aW1lCQkvKiAyNjUgKi8KKyAJLmxvbmcgc3lzX2Nsb2NrX2dldHJlcworIAkubG9uZyBzeXNfY2xvY2tfbmFub3NsZWVwCisJLmxvbmcgc3lzX3N0YXRmczY0CisJLmxvbmcgc3lzX2ZzdGF0ZnM2NAorCS5sb25nIHN5c190Z2tpbGwJLyogMjcwICovCisJLmxvbmcgc3lzX3V0aW1lcworIAkubG9uZyBzeXNfZmFkdmlzZTY0XzY0CisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3lzX3ZzZXJ2ZXIgKi8KKwkubG9uZyBzeXNfbWJpbmQKKwkubG9uZyBzeXNfZ2V0X21lbXBvbGljeQorCS5sb25nIHN5c19zZXRfbWVtcG9saWN5CisJLmxvbmcgc3lzX21xX29wZW4KKwkubG9uZyBzeXNfbXFfdW5saW5rCisJLmxvbmcgc3lzX21xX3RpbWVkc2VuZAorCS5sb25nIHN5c19tcV90aW1lZHJlY2VpdmUJLyogMjgwICovCisJLmxvbmcgc3lzX21xX25vdGlmeQorCS5sb25nIHN5c19tcV9nZXRzZXRhdHRyCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIHJlc2VydmVkIGZvciBrZXhlYyAqLworCS5sb25nIHN5c193YWl0aWQKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogMjg1ICovIC8qIGF2YWlsYWJsZSAqLworCS5sb25nIHN5c19hZGRfa2V5CisJLmxvbmcgc3lzX3JlcXVlc3Rfa2V5CisJLmxvbmcgc3lzX2tleWN0bApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lLmMgYi9hcmNoL2kzODYva2VybmVsL3RpbWUuYwppbmRleCA0ZDc1YjM3Li5hMGRjYjdjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2kzODYva2VybmVsL3RpbWUuYwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLAogCQkteHRpbWUudHZfc2VjLCAteHRpbWUudHZfbnNlYyk7CiAKLQlpZiAoaHBldF9lbmFibGUoKSA+PSAwKSB7CisJaWYgKChocGV0X2VuYWJsZSgpID49IDApICYmIGhwZXRfdXNlX3RpbWVyKSB7CiAJCXByaW50aygiVXNpbmcgSFBFVCBmb3IgYmFzZS10aW1lclxuIik7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RpbWVfaHBldC5jIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lX2hwZXQuYwppbmRleCAyNDRhMzFiLi4xMGEwY2JiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RpbWVfaHBldC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZV9ocGV0LmMKQEAgLTI2LDYgKzI2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwZXRfcGVyaW9kOwkvKiBmc2VjcyAvIEhQRVQgY2xvY2sgKi8KIHVuc2lnbmVkIGxvbmcgaHBldF90aWNrOwkJLyogaHBldCBjbGtzIGNvdW50IHBlciB0aWNrICovCiB1bnNpZ25lZCBsb25nIGhwZXRfYWRkcmVzczsJCS8qIGhwZXQgbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCitpbnQgaHBldF91c2VfdGltZXI7CiAKIHN0YXRpYyBpbnQgdXNlX2hwZXQ7IAkJLyogY2FuIGJlIHVzZWQgZm9yIHJ1bnRpbWUgY2hlY2sgb2YgaHBldCAqLwogc3RhdGljIGludCBib290X2hwZXRfZGlzYWJsZTsgCS8qIGJvb3R0aW1lIG92ZXJyaWRlIGZvciBIUEVUIHRpbWVyICovCkBAIC03MywyNyArNzQsMzAgQEAKIAlocGV0X3dyaXRlbCgwLCBIUEVUX0NPVU5URVIpOwogCWhwZXRfd3JpdGVsKDAsIEhQRVRfQ09VTlRFUiArIDQpOwogCi0JLyoKLQkgKiBTZXQgdXAgdGltZXIgMCwgYXMgcGVyaW9kaWMgd2l0aCBmaXJzdCBpbnRlcnJ1cHQgdG8gaGFwcGVuIGF0Ci0JICogaHBldF90aWNrLCBhbmQgcGVyaW9kIGFsc28gaHBldF90aWNrLgotCSAqLwotCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9UMF9DRkcpOwotCWNmZyB8PSBIUEVUX1ROX0VOQUJMRSB8IEhQRVRfVE5fUEVSSU9ESUMgfAotCSAgICAgICBIUEVUX1ROX1NFVFZBTCB8IEhQRVRfVE5fMzJCSVQ7Ci0JaHBldF93cml0ZWwoY2ZnLCBIUEVUX1QwX0NGRyk7CisJaWYgKGhwZXRfdXNlX3RpbWVyKSB7CisJCS8qCisJCSAqIFNldCB1cCB0aW1lciAwLCBhcyBwZXJpb2RpYyB3aXRoIGZpcnN0IGludGVycnVwdCB0byBoYXBwZW4gYXQKKwkJICogaHBldF90aWNrLCBhbmQgcGVyaW9kIGFsc28gaHBldF90aWNrLgorCQkgKi8KKwkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1QwX0NGRyk7CisJCWNmZyB8PSBIUEVUX1ROX0VOQUJMRSB8IEhQRVRfVE5fUEVSSU9ESUMgfAorCQkgICAgICAgSFBFVF9UTl9TRVRWQUwgfCBIUEVUX1ROXzMyQklUOworCQlocGV0X3dyaXRlbChjZmcsIEhQRVRfVDBfQ0ZHKTsKIAotCS8qCi0JICogVGhlIGZpcnN0IHdyaXRlIGFmdGVyIHdyaXRpbmcgVE5fU0VUVkFMIHRvIHRoZSBjb25maWcgcmVnaXN0ZXIgc2V0cwotCSAqIHRoZSBjb3VudGVyIHZhbHVlLCB0aGUgc2Vjb25kIHdyaXRlIHNldHMgdGhlIHRocmVzaG9sZC4KLQkgKi8KLQlocGV0X3dyaXRlbCh0aWNrLCBIUEVUX1QwX0NNUCk7Ci0JaHBldF93cml0ZWwodGljaywgSFBFVF9UMF9DTVApOwotCisJCS8qCisJCSAqIFRoZSBmaXJzdCB3cml0ZSBhZnRlciB3cml0aW5nIFROX1NFVFZBTCB0byB0aGUgY29uZmlnIHJlZ2lzdGVyIHNldHMKKwkJICogdGhlIGNvdW50ZXIgdmFsdWUsIHRoZSBzZWNvbmQgd3JpdGUgc2V0cyB0aGUgdGhyZXNob2xkLgorCQkgKi8KKwkJaHBldF93cml0ZWwodGljaywgSFBFVF9UMF9DTVApOworCQlocGV0X3dyaXRlbCh0aWNrLCBIUEVUX1QwX0NNUCk7CisJfQogCS8qCiAgCSAqIEdvIQogIAkgKi8KIAljZmcgPSBocGV0X3JlYWRsKEhQRVRfQ0ZHKTsKLQljZmcgfD0gSFBFVF9DRkdfRU5BQkxFIHwgSFBFVF9DRkdfTEVHQUNZOworCWlmIChocGV0X3VzZV90aW1lcikKKwkJY2ZnIHw9IEhQRVRfQ0ZHX0xFR0FDWTsKKwljZmcgfD0gSFBFVF9DRkdfRU5BQkxFOwogCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9DRkcpOwogCiAJcmV0dXJuIDA7CkBAIC0xMjgsMTIgKzEzMiwxMSBAQAogCSAqIEhvd2V2ZXIsIHdlIGNhbiBkbyB3aXRoIG9uZSB0aW1lciBvdGhlcndpc2UgdXNpbmcgdGhlCiAJICogdGhlIHNpbmdsZSBIUEVUIHRpbWVyIGZvciBzeXN0ZW0gdGltZS4KIAkgKi8KLQlpZiAoCiAjaWZkZWYgQ09ORklHX0hQRVRfRU1VTEFURV9SVEMKLQkJIShpZCAmIEhQRVRfSURfTlVNQkVSKSB8fAotI2VuZGlmCi0JICAgICEoaWQgJiBIUEVUX0lEX0xFR1NVUCkpCisJaWYgKCEoaWQgJiBIUEVUX0lEX05VTUJFUikpCiAJCXJldHVybiAtMTsKKyNlbmRpZgorCiAKIAlocGV0X3BlcmlvZCA9IGhwZXRfcmVhZGwoSFBFVF9QRVJJT0QpOwogCWlmICgoaHBldF9wZXJpb2QgPCBIUEVUX01JTl9QRVJJT0QpIHx8IChocGV0X3BlcmlvZCA+IEhQRVRfTUFYX1BFUklPRCkpCkBAIC0xNTIsNiArMTU1LDggQEAKIAlpZiAoaHBldF90aWNrX3JlbSA+IChocGV0X3BlcmlvZCA+PiAxKSkKIAkJaHBldF90aWNrKys7IC8qIHJvdW5kaW5nIHRoZSByZXN1bHQgKi8KIAorCWhwZXRfdXNlX3RpbWVyID0gaWQgJiBIUEVUX0lEX0xFR1NVUDsKKwogCWlmIChocGV0X3RpbWVyX3N0b3Bfc2V0X2dvKGhwZXRfdGljaykpCiAJCXJldHVybiAtMTsKIApAQCAtMjAyLDcgKzIwNyw4IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCXdhaXRfdGltZXJfdGljayA9IHdhaXRfaHBldF90aWNrOworCWlmIChocGV0X3VzZV90aW1lcikKKwkJd2FpdF90aW1lcl90aWNrID0gd2FpdF9ocGV0X3RpY2s7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX2hwZXQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX2hwZXQuYwppbmRleCA3MTMxMzRlLi5mNzc4ZjQ3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl9ocGV0LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfaHBldC5jCkBAIC03OSw3ICs3OSw3IEBACiAKIAllYXggPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7CiAJZWF4IC09IGhwZXRfbGFzdDsJLyogaHBldCBkZWx0YSAqLwotCisJZWF4ID0gbWluKGhwZXRfdGljaywgZWF4KTsKIAkvKgogICAgICAgICAgKiBUaW1lIG9mZnNldCA9IChocGV0IGRlbHRhKSAqICggdXNlY3MgcGVyIEhQRVQgY2xvY2sgKQogCSAqICAgICAgICAgICAgID0gKGhwZXQgZGVsdGEpICogKCB1c2VjcyBwZXIgdGljayAvIEhQRVQgY2xvY2tzIHBlciB0aWNrKQpAQCAtMTA1LDkgKzEwNSwxMiBAQAogCWxhc3Rfb2Zmc2V0ID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpbGFzdF90c2NfaGlnaDw8MzIpfGxhc3RfdHNjX2xvdzsKIAlyZHRzYyhsYXN0X3RzY19sb3csIGxhc3RfdHNjX2hpZ2gpOwogCi0Jb2Zmc2V0ID0gaHBldF9yZWFkbChIUEVUX1QwX0NNUCkgLSBocGV0X3RpY2s7Ci0JaWYgKHVubGlrZWx5KCgob2Zmc2V0IC0gaHBldF9sYXN0KSA+IGhwZXRfdGljaykgJiYgKGhwZXRfbGFzdCAhPSAwKSkpIHsKLQkJaW50IGxvc3RfdGlja3MgPSAob2Zmc2V0IC0gaHBldF9sYXN0KSAvIGhwZXRfdGljazsKKwlpZiAoaHBldF91c2VfdGltZXIpCisJCW9mZnNldCA9IGhwZXRfcmVhZGwoSFBFVF9UMF9DTVApIC0gaHBldF90aWNrOworCWVsc2UKKwkJb2Zmc2V0ID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOworCWlmICh1bmxpa2VseSgoKG9mZnNldCAtIGhwZXRfbGFzdCkgPj0gKDIqaHBldF90aWNrKSkgJiYgKGhwZXRfbGFzdCAhPSAwKSkpIHsKKwkJaW50IGxvc3RfdGlja3MgPSAoKG9mZnNldCAtIGhwZXRfbGFzdCkgLyBocGV0X3RpY2spIC0gMTsKIAkJamlmZmllc182NCArPSBsb3N0X3RpY2tzOwogCX0KIAlocGV0X2xhc3QgPSBvZmZzZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl90c2MuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3RzYy5jCmluZGV4IGE2ODU5OTQuLjc5MjZkOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3RzYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3RzYy5jCkBAIC00NzcsNyArNDc3LDcgQEAKIAlpZiAoY3B1X2hhc190c2MpIHsKIAkJdW5zaWduZWQgbG9uZyB0c2NfcXVvdGllbnQ7CiAjaWZkZWYgQ09ORklHX0hQRVRfVElNRVIKLQkJaWYgKGlzX2hwZXRfZW5hYmxlZCgpKXsKKwkJaWYgKGlzX2hwZXRfZW5hYmxlZCgpICYmIGhwZXRfdXNlX3RpbWVyKSB7CiAJCQl1bnNpZ25lZCBsb25nIHJlc3VsdCwgcmVtYWluOwogCQkJcHJpbnRrKCJVc2luZyBUU0MgZm9yIGdldHRpbWVvZmRheVxuIik7CiAJCQl0c2NfcXVvdGllbnQgPSBjYWxpYnJhdGVfdHNjX2hwZXQoTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKaW5kZXggNmMwZTM4My4uMDBjNjM0MSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtNDUxLDYgKzQ1MSw3IEBACiBET19FUlJPUigxMSwgU0lHQlVTLCAgInNlZ21lbnQgbm90IHByZXNlbnQiLCBzZWdtZW50X25vdF9wcmVzZW50KQogRE9fRVJST1IoMTIsIFNJR0JVUywgICJzdGFjayBzZWdtZW50Iiwgc3RhY2tfc2VnbWVudCkKIERPX0VSUk9SX0lORk8oMTcsIFNJR0JVUywgImFsaWdubWVudCBjaGVjayIsIGFsaWdubWVudF9jaGVjaywgQlVTX0FEUkFMTiwgMCkKK0RPX0VSUk9SX0lORk8oMzIsIFNJR1NFR1YsICJpcmV0IGV4Y2VwdGlvbiIsIGlyZXRfZXJyb3IsIElMTF9CQURTVEssIDApCiAKIGZhc3RjYWxsIHZvaWQgZG9fZ2VuZXJhbF9wcm90ZWN0aW9uKHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnJvcl9jb2RlKQogewpAQCAtNjQyLDE2ICs2NDMsMTUgQEAKIH0KIAogI2lmZGVmIENPTkZJR19LUFJPQkVTCi1mYXN0Y2FsbCBpbnQgZG9faW50MyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQorZmFzdGNhbGwgdm9pZCBkb19pbnQzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CiAJaWYgKG5vdGlmeV9kaWUoRElFX0lOVDMsICJpbnQzIiwgcmVncywgZXJyb3JfY29kZSwgMywgU0lHVFJBUCkKIAkJCT09IE5PVElGWV9TVE9QKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuOwogCS8qIFRoaXMgaXMgYW4gaW50ZXJydXB0IGdhdGUsIGJlY2F1c2Uga3Byb2JlcyB3YW50cyBpbnRlcnJ1cHRzCiAJZGlzYWJsZWQuICBOb3JtYWwgdHJhcCBoYW5kbGVycyBkb24ndC4gKi8KIAlyZXN0b3JlX2ludGVycnVwdHMocmVncyk7CiAJZG9fdHJhcCgzLCBTSUdUUkFQLCAiaW50MyIsIDEsIHJlZ3MsIGVycm9yX2NvZGUsIE5VTEwpOwotCXJldHVybiAwOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdm04Ni5jIGIvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMKaW5kZXggMmYzZDUyZC4uZWMwZjY4YyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMKQEAgLTIyMiw3ICsyMjIsNyBAQAogCQkJZ290byBvdXQ7CiAJCWNhc2UgVk04Nl9QTFVTX0lOU1RBTExfQ0hFQ0s6CiAJCQkvKiBOT1RFOiBvbiBvbGQgdm04NiBzdHVmZiB0aGlzIHdpbGwgcmV0dXJuIHRoZSBlcnJvcgotCQkJICAgZnJvbSB2ZXJpZnlfYXJlYSgpLCBiZWNhdXNlIHRoZSBzdWJmdW5jdGlvbiBpcworCQkJICAgZnJvbSBhY2Nlc3Nfb2soKSwgYmVjYXVzZSB0aGUgc3ViZnVuY3Rpb24gaXMKIAkJCSAgIGludGVycHJldGVkIGFzIChpbnZhbGlkKSBhZGRyZXNzIHRvIHZtODZfc3RydWN0LgogCQkJICAgU28gdGhlIGluc3RhbGxhdGlvbiBjaGVjayB3b3Jrcy4KIAkJCSAqLwpAQCAtMjk0LDggKzI5NCw4IEBACiAgKi8KIAlpbmZvLT5yZWdzMzItPmVheCA9IDA7CiAJdHNrLT50aHJlYWQuc2F2ZWRfZXNwMCA9IHRzay0+dGhyZWFkLmVzcDA7Ci0JYXNtIHZvbGF0aWxlKCJtb3ZsICUlZnMsJTAiOiI9bSIgKHRzay0+dGhyZWFkLnNhdmVkX2ZzKSk7Ci0JYXNtIHZvbGF0aWxlKCJtb3ZsICUlZ3MsJTAiOiI9bSIgKHRzay0+dGhyZWFkLnNhdmVkX2dzKSk7CisJYXNtIHZvbGF0aWxlKCJtb3YgJSVmcywlMCI6Ij1tIiAodHNrLT50aHJlYWQuc2F2ZWRfZnMpKTsKKwlhc20gdm9sYXRpbGUoIm1vdiAlJWdzLCUwIjoiPW0iICh0c2stPnRocmVhZC5zYXZlZF9ncykpOwogCiAJdHNzID0gJnBlcl9jcHUoaW5pdF90c3MsIGdldF9jcHUoKSk7CiAJdHNrLT50aHJlYWQuZXNwMCA9ICh1bnNpZ25lZCBsb25nKSAmaW5mby0+Vk04Nl9UU1NfRVNQMDsKQEAgLTcxNywxMiArNzE3LDEyIEBACiAJaXJxYml0cyB8PSBpcnFfYml0OwogCWlmICh2bTg2X2lycXNbaW50bm9dLnNpZykKIAkJc2VuZF9zaWcodm04Nl9pcnFzW2ludG5vXS5zaWcsIHZtODZfaXJxc1tpbnRub10udHNrLCAxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFiaXRzX2xvY2ssIGZsYWdzKTsKIAkvKgogCSAqIElSUSB3aWxsIGJlIHJlLWVuYWJsZWQgd2hlbiB1c2VyIGFza3MgZm9yIHRoZSBpcnEgKHdoZXRoZXIKIAkgKiBwb2xsaW5nIG9yIGFzIGEgcmVzdWx0IG9mIHRoZSBzaWduYWwpCiAJICovCi0JZGlzYWJsZV9pcnEoaW50bm8pOworCWRpc2FibGVfaXJxX25vc3luYyhpbnRubyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxYml0c19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogCiBvdXQ6CkBAIC03NTQsMTcgKzc1NCwyMCBAQAogewogCWludCBiaXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKIAkKIAlpZiAoaW52YWxpZF92bTg2X2lycShpcnFudW1iZXIpKSByZXR1cm4gMDsKIAlpZiAodm04Nl9pcnFzW2lycW51bWJlcl0udHNrICE9IGN1cnJlbnQpIHJldHVybiAwOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFiaXRzX2xvY2ssIGZsYWdzKTsJCiAJYml0ID0gaXJxYml0cyAmICgxIDw8IGlycW51bWJlcik7CiAJaXJxYml0cyAmPSB+Yml0OworCWlmIChiaXQpIHsKKwkJZW5hYmxlX2lycShpcnFudW1iZXIpOworCQlyZXQgPSAxOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycWJpdHNfbG9jaywgZmxhZ3MpOwkKLQlpZiAoIWJpdCkKLQkJcmV0dXJuIDA7Ci0JZW5hYmxlX2lycShpcnFudW1iZXIpOwotCXJldHVybiAxOworCXJldHVybiByZXQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L29wcm9maWxlL25taV90aW1lcl9pbnQuYyBiL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfdGltZXJfaW50LmMKaW5kZXggYjJlNDYyYS4uYzU4ZDBjMSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L29wcm9maWxlL25taV90aW1lcl9pbnQuYworKysgYi9hcmNoL2kzODYvb3Byb2ZpbGUvbm1pX3RpbWVyX2ludC5jCkBAIC0zNiw3ICszNiw3IEBACiB7CiAJZW5hYmxlX3RpbWVyX25taV93YXRjaGRvZygpOwogCXVuc2V0X25taV9jYWxsYmFjaygpOwotCXN5bmNocm9uaXplX2tlcm5lbCgpOworCXN5bmNocm9uaXplX3NjaGVkKCk7ICAvKiBBbGxvdyBhbHJlYWR5LXN0YXJ0ZWQgTk1JcyB0byBjb21wbGV0ZS4gKi8KIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL2lycS5jIGIvYXJjaC9pMzg2L3BjaS9pcnEuYwppbmRleCBlMDc1ODlkLi5kNjU5OGRhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL2lycS5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvaXJxLmMKQEAgLTQ5NSw2ICs0OTUsOCBAQAogCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xOgogCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18wOgogCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xOgorCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18zMDoKKwkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMzE6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9FU0IyXzA6CiAJCQlyLT5uYW1lID0gIlBJSVgvSUNIIjsKIAkJCXItPmdldCA9IHBpcnFfcGlpeF9nZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IDMzZmNiMjAuLjNhZDJjNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC00Niw2ICs0NiwxMCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIFNDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUgorCWJvb2wKKwlkZWZhdWx0IHkKKwogY2hvaWNlCiAJcHJvbXB0ICJTeXN0ZW0gdHlwZSIKIAlkZWZhdWx0IElBNjRfR0VORVJJQwpAQCAtMjE3LDYgKzIyMSwxNiBAQAogCSAgSWYgeW91IGFyZSBjb21waWxpbmcgYSBrZXJuZWwgdGhhdCB3aWxsIHJ1biB1bmRlciBTR0kncyBJQS02NAogCSAgc2ltdWxhdG9yIChNZWR1c2EpIHRoZW4gc2F5IFksIG90aGVyd2lzZSBzYXkgTi4KIAorY29uZmlnIElBNjRfU0dJX1NOX1hQCisJdHJpc3RhdGUgIlN1cHBvcnQgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIFNHSSBTU0lzIgorCWRlcGVuZHMgb24gTVNQRUMKKwloZWxwCisJICBBbiBTR0kgbWFjaGluZSBjYW4gYmUgZGl2aWRlZCBpbnRvIG11bHRpcGxlIFNpbmdsZSBTeXN0ZW0KKwkgIEltYWdlcyB3aGljaCBhY3QgaW5kZXBlbmRlbnRseSBvZiBlYWNoIG90aGVyIGFuZCBoYXZlCisJICBoYXJkd2FyZSBiYXNlZCBtZW1vcnkgcHJvdGVjdGlvbiBmcm9tIHRoZSBvdGhlcnMuICBFbmFibGluZworCSAgdGhpcyBmZWF0dXJlIHdpbGwgYWxsb3cgZm9yIGRpcmVjdCBjb21tdW5pY2F0aW9uIGJldHdlZW4gU1NJcworCSAgYmFzZWQgb24gYSBuZXR3b3JrIGFkYXB0ZXIgYW5kIERNQSBtZXNzYWdpbmcuCisKIGNvbmZpZyBGT1JDRV9NQVhfWk9ORU9SREVSCiAJaW50CiAJZGVmYXVsdCAiMTgiCkBAIC0yNjEsNiArMjc1LDE1IEBACiAJICBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMuCiAJICBTYXkgTiBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIENQVSBob3RwbHVnLgogCitjb25maWcgU0NIRURfU01UCisJYm9vbCAiU01UIHNjaGVkdWxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gU01QCisJZGVmYXVsdCBvZmYKKwloZWxwCisJICBJbXByb3ZlcyB0aGUgQ1BVIHNjaGVkdWxlcidzIGRlY2lzaW9uIG1ha2luZyB3aGVuIGRlYWxpbmcgd2l0aAorCSAgSW50ZWwgSUE2NCBjaGlwcyB3aXRoIE11bHRpVGhyZWFkaW5nIGF0IGEgY29zdCBvZiBzbGlnaHRseSBpbmNyZWFzZWQKKwkgIG92ZXJoZWFkIGluIHNvbWUgcGxhY2VzLiBJZiB1bnN1cmUgc2F5IE4gaGVyZS4KKwogY29uZmlnIFBSRUVNUFQKIAlib29sICJQcmVlbXB0aWJsZSBLZXJuZWwiCiAgICAgICAgIGhlbHAKQEAgLTMyOSw3ICszNTIsNyBAQAogCiBjb25maWcgUE0KIAlib29sICJQb3dlciBNYW5hZ2VtZW50IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJQTY0X0dFTkVSSUMgfHwgSUE2NF9ESUcgfHwgSUE2NF9IUF9aWDEgfHwgSUE2NF9IUF9aWDFfU1dJT1RMQgorCWRlcGVuZHMgb24gIUlBNjRfSFBfU0lNCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgIlBvd2VyIE1hbmFnZW1lbnQiIG1lYW5zIHRoYXQgcGFydHMgb2YgeW91ciBjb21wdXRlciBhcmUgc2h1dApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3Mvc24yX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL3NuMl9kZWZjb25maWcKaW5kZXggYmZlYjk1Mi4uNmZmNzEwNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3Mvc24yX2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy9zbjJfZGVmY29uZmlnCkBAIC01NzQsNiArNTc0LDggQEAKICMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKIENPTkZJR19TR0lfU05TQz15CitDT05GSUdfU0dJX1RJT0NYPXkKK0NPTkZJR19TR0lfTUJDUz1tCiAKICMKICMgU2VyaWFsIGRyaXZlcnMKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZwppbmRleCA5OTgzMGU4Li45MDg2Yjc4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvdGlnZXJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjExLXJjMgotIyBTYXQgSmFuIDIyIDExOjE3OjAyIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzMKKyMgVHVlIE1heSAgMyAxNTo1NTowNCAyMDA1CiAjCiAKICMKQEAgLTEwLDYgKzEwLDcgQEAKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0yMSwyNCArMjIsMjcgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0yMAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CisjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTg1LDYgKzg5LDcgQEAKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9NAogQ09ORklHX0hPVFBMVUdfQ1BVPXkKKyMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0RFQ19MT0NLPXkKIENPTkZJR19JQTMyX1NVUFBPUlQ9eQpAQCAtMTM1LDYgKzE0MCw3IEBACiAjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogQ09ORklHX1BDSV9OQU1FUz15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFBDSSBIb3RwbHVnIFN1cHBvcnQKQEAgLTE1MiwxMCArMTU4LDYgQEAKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCi0KLSMKICMgRGV2aWNlIERyaXZlcnMKICMKIApAQCAtMTk1LDkgKzE5NywxMCBAQAogQ09ORklHX0JMS19ERVZfTkJEPW0KICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPW0KK0NPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAKQEAgLTMxMyw3ICszMTYsNiBAQAogIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEFfUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldApAQCAtMzI1LDcgKzMyNyw2IEBACiBDT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYX0lPTUFQUEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0lTUCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9RTE9HSUNfRkM9eQogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkNfRklSTVdBUkUgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQpAQCAtMzM2LDYgKzMzNyw3IEBACiBDT05GSUdfU0NTSV9RTEEyMzAwPW0KIENPTkZJR19TQ1NJX1FMQTIzMjI9bQogIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTM1OCw2ICszNjAsNyBAQAogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1pFUk89bQorIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKIAogIwogIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CkBAIC0zODYsNyArMzg5LDYgQEAKICMKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX05FVExJTktfREVWPXkKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtNDQ2LDcgKzQ0OCw2IEBACiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfRVRIRVJUQVAgaXMgbm90IHNldAogCiAjCiAjIEFSQ25ldCBkZXZpY2VzCkBAIC00ODQsNyArNDg1LDYgQEAKICMgQ09ORklHX0RHUlMgaXMgbm90IHNldAogQ09ORklHX0VFUFJPMTAwPW0KIENPTkZJR19FMTAwPW0KLSMgQ09ORklHX0UxMDBfTkFQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAogIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CkBAIC01NjYsMjUgKzU2Niw2IEBACiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKLSMgSW5wdXQgSS9PIGRyaXZlcnMKLSMKLUNPTkZJR19HQU1FUE9SVD1tCi1DT05GSUdfU09VTkRfR0FNRVBPUlQ9bQotIyBDT05GSUdfR0FNRVBPUlRfTlM1NTggaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfTDQgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVF9WT1JURVggaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfRk04MDEgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlRfQ1M0NjFYIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotCi0jCiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQpAQCAtNjAyLDYgKzU4MywyNCBAQAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19HQU1FUE9SVD1tCisjIENPTkZJR19HQU1FUE9SVF9OUzU1OCBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVF9MNCBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUX1ZPUlRFWCBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVF9GTTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVF9DUzQ2MVggaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPW0KKworIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKQEAgLTYxNSw2ICs2MTQsOCBAQAogIyBDT05GSUdfU1lOQ0xJTksgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19OX0hETEMgaXMgbm90IHNldAorIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUxEUlYgaXMgbm90IHNldAogCiAjCkBAIC02MzUsNiArNjM2LDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02NzAsNiArNjcyLDEyIEBACiAjIENPTkZJR19IUEVUX1JUQ19JUlEgaXMgbm90IHNldAogQ09ORklHX0hQRVRfTU1BUD15CiBDT05GSUdfTUFYX1JBV19ERVZTPTI1NgorIyBDT05GSUdfSEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTcwNSw3ICs3MTMsNiBAQAogIwogQ09ORklHX1ZHQV9DT05TT0xFPXkKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTcxNSw2ICs3MjIsOCBAQAogIwogIyBVU0Igc3VwcG9ydAogIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtNzI2LDggKzczNSw2IEBACiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwpAQCAtNzM2LDYgKzc0Myw4IEBACiAjIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAKQEAgLTc1MSwxMiArNzYwLDExIEBACiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9bQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfUldfREVURUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9IUDgyMDBlIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldApAQCAtODAwLDYgKzgwOCw3IEBACiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTgyNCw2ICs4MzMsNyBAQAogIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtODY3LDcgKzg3NywxMiBAQAogQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKKworIworIyBYRlMgc3VwcG9ydAorIwogQ09ORklHX1hGU19GUz15CitDT05GSUdfWEZTX0VYUE9SVD15CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CkBAIC05NDUsNyArOTYwLDcgQEAKIENPTkZJR19ORlNEX1RDUD15CiBDT05GSUdfTE9DS0Q9bQogQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX1NVTlJQQz1tCiBDT05GSUdfU1VOUlBDX0dTUz1tCiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KQEAgLTEwNDIsOCArMTA1NywxMCBAQAogIwogIyBLZXJuZWwgaGFja2luZwogIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MjAKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMDc3LDYgKzEwOTQsNyBAQAogIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPW0KICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwppbmRleCAwMTdjOWFiLi5iOGRiNmUzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCisrKyBiL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKQEAgLTEsOSArMSw5IEBACiAvKgogKiogIElBNjQgU3lzdGVtIEJ1cyBBZGFwdGVyIChTQkEpIEkvTyBNTVUgbWFuYWdlcgogKioKLSoqCShjKSBDb3B5cmlnaHQgMjAwMi0yMDA0IEFsZXggV2lsbGlhbXNvbgorKioJKGMpIENvcHlyaWdodCAyMDAyLTIwMDUgQWxleCBXaWxsaWFtc29uCiAqKgkoYykgQ29weXJpZ2h0IDIwMDItMjAwMyBHcmFudCBHcnVuZGxlcgotKioJKGMpIENvcHlyaWdodCAyMDAyLTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyoqCShjKSBDb3B5cmlnaHQgMjAwMi0yMDA1IEhld2xldHQtUGFja2FyZCBDb21wYW55CiAqKgogKioJUG9ydGlvbnMgKGMpIDIwMDAgR3JhbnQgR3J1bmRsZXIgKGZyb20gcGFyaXNjIEkvTyBNTVUgY29kZSkKICoqCVBvcnRpb25zIChjKSAxOTk5IERhdmUgUy4gTWlsbGVyIChmcm9tIHNwYXJjNjQgSS9PIE1NVSBjb2RlKQpAQCAtNDU5LDIxICs0NTksMzIgQEAKICAqIHNiYV9zZWFyY2hfYml0bWFwIC0gZmluZCBmcmVlIHNwYWNlIGluIElPIFBESVIgcmVzb3VyY2UgYml0bWFwCiAgKiBAaW9jOiBJTyBNTVUgc3RydWN0dXJlIHdoaWNoIG93bnMgdGhlIHBkaXIgd2UgYXJlIGludGVyZXN0ZWQgaW4uCiAgKiBAYml0c193YW50ZWQ6IG51bWJlciBvZiBlbnRyaWVzIHdlIG5lZWQuCisgKiBAdXNlX2hpbnQ6IHVzZSByZXNfaGludCB0byBpbmRpY2F0ZSB3aGVyZSB0byBzdGFydCBsb29raW5nCiAgKgogICogRmluZCBjb25zZWN1dGl2ZSBmcmVlIGJpdHMgaW4gcmVzb3VyY2UgYml0bWFwLgogICogRWFjaCBiaXQgcmVwcmVzZW50cyBvbmUgZW50cnkgaW4gdGhlIElPIFBkaXIuCiAgKiBDb29sIHBlcmYgb3B0aW1pemF0aW9uOiBzZWFyY2ggZm9yIGxvZzIoc2l6ZSkgYml0cyBhdCBhIHRpbWUuCiAgKi8KIHN0YXRpYyBTQkFfSU5MSU5FIHVuc2lnbmVkIGxvbmcKLXNiYV9zZWFyY2hfYml0bWFwKHN0cnVjdCBpb2MgKmlvYywgdW5zaWduZWQgbG9uZyBiaXRzX3dhbnRlZCkKK3NiYV9zZWFyY2hfYml0bWFwKHN0cnVjdCBpb2MgKmlvYywgdW5zaWduZWQgbG9uZyBiaXRzX3dhbnRlZCwgaW50IHVzZV9oaW50KQogewotCXVuc2lnbmVkIGxvbmcgKnJlc19wdHIgPSBpb2MtPnJlc19oaW50OworCXVuc2lnbmVkIGxvbmcgKnJlc19wdHI7CiAJdW5zaWduZWQgbG9uZyAqcmVzX2VuZCA9ICh1bnNpZ25lZCBsb25nICopICYoaW9jLT5yZXNfbWFwW2lvYy0+cmVzX3NpemVdKTsKLQl1bnNpZ25lZCBsb25nIHBpZGUgPSB+MFVMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHBpZGUgPSB+MFVMOwogCiAJQVNTRVJUKCgodW5zaWduZWQgbG9uZykgaW9jLT5yZXNfaGludCAmIChzaXplb2YodW5zaWduZWQgbG9uZykgLSAxVUwpKSA9PSAwKTsKIAlBU1NFUlQocmVzX3B0ciA8IHJlc19lbmQpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmVzX2xvY2ssIGZsYWdzKTsKKworCS8qIEFsbG93IGNhbGxlciB0byBmb3JjZSBhIHNlYXJjaCB0aHJvdWdoIHRoZSBlbnRpcmUgcmVzb3VyY2Ugc3BhY2UgKi8KKwlpZiAobGlrZWx5KHVzZV9oaW50KSkgeworCQlyZXNfcHRyID0gaW9jLT5yZXNfaGludDsKKwl9IGVsc2UgeworCQlyZXNfcHRyID0gKHVsb25nICopaW9jLT5yZXNfbWFwOworCQlpb2MtPnJlc19iaXRzaGlmdCA9IDA7CisJfQorCiAJLyoKIAkgKiBOLkIuICBSRU8vR3JhbmRlIGRlZmVjdCBBUjIzMDUgY2FuIGNhdXNlIFRMQiBmZXRjaCB0aW1lb3V0cwogCSAqIGlmIGEgVExCIGVudHJ5IGlzIHB1cmdlZCB3aGlsZSBpbiB1c2UuICBzYmFfbWFya19pbnZhbGlkKCkKQEAgLTU3MCwxMCArNTgxLDEyIEBACiAJcHJlZmV0Y2goaW9jLT5yZXNfbWFwKTsKIAlpb2MtPnJlc19oaW50ID0gKHVuc2lnbmVkIGxvbmcgKikgaW9jLT5yZXNfbWFwOwogCWlvYy0+cmVzX2JpdHNoaWZ0ID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJlc19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIChwaWRlKTsKIAogZm91bmRfaXQ6CiAJaW9jLT5yZXNfaGludCA9IHJlc19wdHI7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yZXNfbG9jaywgZmxhZ3MpOwogCXJldHVybiAocGlkZSk7CiB9CiAKQEAgLTU5NCwzNiArNjA3LDM2IEBACiAJdW5zaWduZWQgbG9uZyBpdGNfc3RhcnQ7CiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nIHBpZGU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUFTU0VSVChwYWdlc19uZWVkZWQpOwogCUFTU0VSVCgwID09IChzaXplICYgfmlvdnBfbWFzaykpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmVzX2xvY2ssIGZsYWdzKTsKLQogI2lmZGVmIFBESVJfU0VBUkNIX1RJTUlORwogCWl0Y19zdGFydCA9IGlhNjRfZ2V0X2l0YygpOwogI2VuZGlmCiAJLyoKIAkqKiAic2VlayBhbmQgeWUgc2hhbGwgZmluZCIuLi5wcmF5aW5nIG5ldmVyIGh1cnRzIGVpdGhlci4uLgogCSovCi0JcGlkZSA9IHNiYV9zZWFyY2hfYml0bWFwKGlvYywgcGFnZXNfbmVlZGVkKTsKKwlwaWRlID0gc2JhX3NlYXJjaF9iaXRtYXAoaW9jLCBwYWdlc19uZWVkZWQsIDEpOwogCWlmICh1bmxpa2VseShwaWRlID49IChpb2MtPnJlc19zaXplIDw8IDMpKSkgewotCQlwaWRlID0gc2JhX3NlYXJjaF9iaXRtYXAoaW9jLCBwYWdlc19uZWVkZWQpOworCQlwaWRlID0gc2JhX3NlYXJjaF9iaXRtYXAoaW9jLCBwYWdlc19uZWVkZWQsIDApOwogCQlpZiAodW5saWtlbHkocGlkZSA+PSAoaW9jLT5yZXNfc2l6ZSA8PCAzKSkpIHsKICNpZiBERUxBWUVEX1JFU09VUkNFX0NOVCA+IDAKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAkJCS8qCiAJCQkqKiBXaXRoIGRlbGF5ZWQgcmVzb3VyY2UgZnJlZWluZywgd2UgY2FuIGdpdmUgdGhpcyBvbmUgbW9yZSBzaG90LiAgV2UncmUKIAkJCSoqIGdldHRpbmcgY2xvc2UgdG8gYmVpbmcgaW4gdHJvdWJsZSBoZXJlLCBzbyBkbyB3aGF0IHdlIGNhbiB0byBtYWtlIHRoaXMKIAkJCSoqIG9uZSBjb3VudC4KIAkJCSovCi0JCQlzcGluX2xvY2soJmlvYy0+c2F2ZWRfbG9jayk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXZlZF9sb2NrLCBmbGFncyk7CiAJCQlpZiAoaW9jLT5zYXZlZF9jbnQgPiAwKSB7CiAJCQkJc3RydWN0IHNiYV9kbWFfcGFpciAqZDsKIAkJCQlpbnQgY250ID0gaW9jLT5zYXZlZF9jbnQ7CiAKLQkJCQlkID0gJihpb2MtPnNhdmVkW2lvYy0+c2F2ZWRfY250XSk7CisJCQkJZCA9ICYoaW9jLT5zYXZlZFtpb2MtPnNhdmVkX2NudCAtIDFdKTsKIAorCQkJCXNwaW5fbG9jaygmaW9jLT5yZXNfbG9jayk7CiAJCQkJd2hpbGUgKGNudC0tKSB7CiAJCQkJCXNiYV9tYXJrX2ludmFsaWQoaW9jLCBkLT5pb3ZhLCBkLT5zaXplKTsKIAkJCQkJc2JhX2ZyZWVfcmFuZ2UoaW9jLCBkLT5pb3ZhLCBkLT5zaXplKTsKQEAgLTYzMSwxMCArNjQ0LDExIEBACiAJCQkJfQogCQkJCWlvYy0+c2F2ZWRfY250ID0gMDsKIAkJCQlSRUFEX1JFRyhpb2MtPmlvY19ocGErSU9DX1BDT00pOwkvKiBmbHVzaCBwdXJnZXMgKi8KKwkJCQlzcGluX3VubG9jaygmaW9jLT5yZXNfbG9jayk7CiAJCQl9Ci0JCQlzcGluX3VubG9jaygmaW9jLT5zYXZlZF9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2F2ZWRfbG9jaywgZmxhZ3MpOwogCi0JCQlwaWRlID0gc2JhX3NlYXJjaF9iaXRtYXAoaW9jLCBwYWdlc19uZWVkZWQpOworCQkJcGlkZSA9IHNiYV9zZWFyY2hfYml0bWFwKGlvYywgcGFnZXNfbmVlZGVkLCAwKTsKIAkJCWlmICh1bmxpa2VseShwaWRlID49IChpb2MtPnJlc19zaXplIDw8IDMpKSkKIAkJCQlwYW5pYyhfX0ZJTEVfXyAiOiBJL08gTU1VIEAgJXAgaXMgb3V0IG9mIG1hcHBpbmcgcmVzb3VyY2VzXG4iLAogCQkJCSAgICAgIGlvYy0+aW9jX2hwYSk7CkBAIC02NjQsOCArNjc4LDYgQEAKIAkJKHVpbnQpICgodW5zaWduZWQgbG9uZykgaW9jLT5yZXNfaGludCAtICh1bnNpZ25lZCBsb25nKSBpb2MtPnJlc19tYXApLAogCQlpb2MtPnJlc19iaXRzaGlmdCApOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yZXNfbG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIChwaWRlKTsKIH0KIApAQCAtOTUwLDYgKzk2MiwzMCBAQAogCXJldHVybiBTQkFfSU9WQShpb2MsIGlvdnAsIG9mZnNldCk7CiB9CiAKKyNpZmRlZiBFTkFCTEVfTUFSS19DTEVBTgorc3RhdGljIFNCQV9JTkxJTkUgdm9pZAorc2JhX21hcmtfY2xlYW4oc3RydWN0IGlvYyAqaW9jLCBkbWFfYWRkcl90IGlvdmEsIHNpemVfdCBzaXplKQoreworCXUzMglpb3ZwID0gKHUzMikgU0JBX0lPVlAoaW9jLGlvdmEpOworCWludAlvZmYgPSBQRElSX0lOREVYKGlvdnApOworCXZvaWQJKmFkZHI7CisKKwlpZiAoc2l6ZSA8PSBpb3ZwX3NpemUpIHsKKwkJYWRkciA9IHBoeXNfdG9fdmlydChpb2MtPnBkaXJfYmFzZVtvZmZdICYKKwkJICAgICAgICAgICAgICAgICAgICB+MHhFMDAwMDAwMDAwMDAwRkZGVUxMKTsKKwkJbWFya19jbGVhbihhZGRyLCBzaXplKTsKKwl9IGVsc2UgeworCQlkbyB7CisJCQlhZGRyID0gcGh5c190b192aXJ0KGlvYy0+cGRpcl9iYXNlW29mZl0gJgorCQkJICAgICAgICAgICAgICAgICAgICB+MHhFMDAwMDAwMDAwMDAwRkZGVUxMKTsKKwkJCW1hcmtfY2xlYW4oYWRkciwgbWluKHNpemUsIGlvdnBfc2l6ZSkpOworCQkJb2ZmKys7CisJCQlzaXplIC09IGlvdnBfc2l6ZTsKKwkJfSB3aGlsZSAoc2l6ZSA+IDApOworCX0KK30KKyNlbmRpZgorCiAvKioKICAqIHNiYV91bm1hcF9zaW5nbGUgLSB1bm1hcCBvbmUgSU9WQSBhbmQgZnJlZSByZXNvdXJjZXMKICAqIEBkZXY6IGluc3RhbmNlIG9mIFBDSSBvd25lZCBieSB0aGUgZHJpdmVyIHRoYXQncyBhc2tpbmcuCkBAIC05OTUsNiArMTAzMSwxMCBAQAogCXNpemUgKz0gb2Zmc2V0OwogCXNpemUgPSBST1VORFVQKHNpemUsIGlvdnBfc2l6ZSk7CiAKKyNpZmRlZiBFTkFCTEVfTUFSS19DTEVBTgorCWlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQorCQlzYmFfbWFya19jbGVhbihpb2MsIGlvdmEsIHNpemUpOworI2VuZGlmCiAKICNpZiBERUxBWUVEX1JFU09VUkNFX0NOVCA+IDAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXZlZF9sb2NrLCBmbGFncyk7CkBAIC0xMDIxLDMwICsxMDYxLDYgQEAKIAlSRUFEX1JFRyhpb2MtPmlvY19ocGErSU9DX1BDT00pOwkvKiBmbHVzaCBwdXJnZXMgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJlc19sb2NrLCBmbGFncyk7CiAjZW5kaWYgLyogREVMQVlFRF9SRVNPVVJDRV9DTlQgPT0gMCAqLwotI2lmZGVmIEVOQUJMRV9NQVJLX0NMRUFOCi0JaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKLQkJdTMyIGlvdnAgPSAodTMyKSBTQkFfSU9WUChpb2MsaW92YSk7Ci0JCWludCBvZmYgPSBQRElSX0lOREVYKGlvdnApOwotCQl2b2lkICphZGRyOwotCi0JCWlmIChzaXplIDw9IGlvdnBfc2l6ZSkgewotCQkJYWRkciA9IHBoeXNfdG9fdmlydChpb2MtPnBkaXJfYmFzZVtvZmZdICYKLQkJCQkJICAgIH4weEUwMDAwMDAwMDAwMDBGRkZVTEwpOwotCQkJbWFya19jbGVhbihhZGRyLCBzaXplKTsKLQkJfSBlbHNlIHsKLQkJCXNpemVfdCBieXRlX2NudCA9IHNpemU7Ci0KLQkJCWRvIHsKLQkJCQlhZGRyID0gcGh5c190b192aXJ0KGlvYy0+cGRpcl9iYXNlW29mZl0gJgotCQkJCSAgICAgICAgICAgICAgICAgICAgfjB4RTAwMDAwMDAwMDAwMEZGRlVMTCk7Ci0JCQkJbWFya19jbGVhbihhZGRyLCBtaW4oYnl0ZV9jbnQsIGlvdnBfc2l6ZSkpOwotCQkJCW9mZisrOwotCQkJCWJ5dGVfY250IC09IGlvdnBfc2l6ZTsKLQotCQkJICAgfSB3aGlsZSAoYnl0ZV9jbnQgPiAwKTsKLQkJfQotCX0KLSNlbmRpZgogfQogCiAKQEAgLTE5MjgsNDMgKzE5NDQsMTcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdAogc2JhX21hcF9pb2NfdG9fbm9kZShzdHJ1Y3QgaW9jICppb2MsIGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKLQl1bmlvbiBhY3BpX29iamVjdCAqb2JqOwotCWFjcGlfaGFuZGxlIHBoYW5kbGU7CiAJdW5zaWduZWQgaW50IG5vZGU7CisJaW50IHB4bTsKIAogCWlvYy0+bm9kZSA9IE1BWF9OVU1OT0RFUzsKIAotCS8qCi0JICogQ2hlY2sgZm9yIGEgX1BYTSBvbiB0aGlzIG5vZGUgZmlyc3QuICBXZSBkb24ndCB0eXBpY2FsbHkgc2VlCi0JICogb25lIGhlcmUsIHNvIHdlJ2xsIGVuZCB1cCBnZXR0aW5nIGl0IGZyb20gdGhlIHBhcmVudC4KLQkgKi8KLQlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9QWE0iLCBOVUxMLCAmYnVmZmVyKSkpIHsKLQkJaWYgKEFDUElfRkFJTFVSRShhY3BpX2dldF9wYXJlbnQoaGFuZGxlLCAmcGhhbmRsZSkpKQotCQkJcmV0dXJuOworCXB4bSA9IGFjcGlfZ2V0X3B4bShoYW5kbGUpOwogCi0JCS8qIFJlc2V0IHRoZSBhY3BpIGJ1ZmZlciAqLwotCQlidWZmZXIubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7Ci0JCWJ1ZmZlci5wb2ludGVyID0gTlVMTDsKLQotCQlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfZXZhbHVhdGVfb2JqZWN0KHBoYW5kbGUsICJfUFhNIiwgTlVMTCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmZmVyKSkpCi0JCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFidWZmZXIubGVuZ3RoIHx8ICFidWZmZXIucG9pbnRlcikKKwlpZiAocHhtIDwgMCkKIAkJcmV0dXJuOwogCi0Jb2JqID0gYnVmZmVyLnBvaW50ZXI7Ci0KLQlpZiAob2JqLT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSIHx8Ci0JICAgIG9iai0+aW50ZWdlci52YWx1ZSA+PSBNQVhfUFhNX0RPTUFJTlMpIHsKLQkJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKLQkJcmV0dXJuOwotCX0KLQotCW5vZGUgPSBweG1fdG9fbmlkX21hcFtvYmotPmludGVnZXIudmFsdWVdOwotCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7CisJbm9kZSA9IHB4bV90b19uaWRfbWFwW3B4bV07CiAKIAlpZiAobm9kZSA+PSBNQVhfTlVNTk9ERVMgfHwgIW5vZGVfb25saW5lKG5vZGUpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX3NpZ25hbC5jIGIvYXJjaC9pYTY0L2lhMzIvaWEzMl9zaWduYWwuYwppbmRleCAxOWIwMmFkLi5lYmI4OWJlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9pYTMyX3NpZ25hbC5jCisrKyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfc2lnbmFsLmMKQEAgLTQ2MCwxMCArNDYwLDkgQEAKIAlzaWdzZXRfdCBvbGRzZXQsIHNldDsKIAogCXNjci0+c2NyYXRjaF91bmF0ID0gMDsJLyogYXZvaWQgbGVha2luZyBrZXJuZWwgYml0cyB0byB1c2VyIGxldmVsICovCi0JbWVtc2V0KCZzZXQsIDAsIHNpemVvZigmc2V0KSk7CisJbWVtc2V0KCZzZXQsIDAsIHNpemVvZihzZXQpKTsKIAotCWlmIChtZW1jcHkoJnNldC5zaWcsICZzc2V0LT5zaWcsIHNpZ3NldHNpemUpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwltZW1jcHkoJnNldC5zaWcsICZzc2V0LT5zaWcsIHNpZ3NldHNpemUpOwogCiAJc2lnZGVsc2V0bWFzaygmc2V0LCB+X0JMT0NLQUJMRSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKaW5kZXggYThlOTljNS4uNzJkZmQ5ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKQEAgLTc3OSw3ICs3NzksNyBAQAogCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CiAJc3RydWN0IGFjcGlfdGFibGVfaW9zYXBpYyAqaW9zYXBpYzsKIAl1bnNpZ25lZCBpbnQgZ3NpX2Jhc2U7Ci0JaW50IG5vZGU7CisJaW50IHB4bSwgbm9kZTsKIAogCS8qIE9ubHkgY2FyZSBhYm91dCBvYmplY3RzIHcvIGEgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgTUFEVCAqLwogCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX01BVCIsIE5VTEwsICZidWZmZXIpKSkKQEAgLTgwNSwyOSArODA1LDE2IEBACiAJZ3NpX2Jhc2UgPSBpb3NhcGljLT5nbG9iYWxfaXJxX2Jhc2U7CiAKIAlhY3BpX29zX2ZyZWUoYnVmZmVyLnBvaW50ZXIpOwotCWJ1ZmZlci5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKLQlidWZmZXIucG9pbnRlciA9IE5VTEw7CiAKIAkvKgotCSAqIE9LLCBpdCdzIGFuIElPU0FQSUMgTUFEVCBlbnRyeSwgbG9vayBmb3IgYSBfUFhNIG1ldGhvZCB0byB0ZWxsCisJICogT0ssIGl0J3MgYW4gSU9TQVBJQyBNQURUIGVudHJ5LCBsb29rIGZvciBhIF9QWE0gdmFsdWUgdG8gdGVsbAogCSAqIHVzIHdoaWNoIG5vZGUgdG8gYXNzb2NpYXRlIHRoaXMgd2l0aC4KIAkgKi8KLQlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9QWE0iLCBOVUxMLCAmYnVmZmVyKSkpCisJcHhtID0gYWNwaV9nZXRfcHhtKGhhbmRsZSk7CisJaWYgKHB4bSA8IDApCiAJCXJldHVybiBBRV9PSzsKIAotCWlmICghYnVmZmVyLmxlbmd0aCB8fCAhYnVmZmVyLnBvaW50ZXIpCi0JCXJldHVybiBBRV9PSzsKLQotCW9iaiA9IGJ1ZmZlci5wb2ludGVyOwotCi0JaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUiB8fAotCSAgICBvYmotPmludGVnZXIudmFsdWUgPj0gTUFYX1BYTV9ET01BSU5TKSB7Ci0JCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7Ci0JCXJldHVybiBBRV9PSzsKLQl9Ci0KLQlub2RlID0gcHhtX3RvX25pZF9tYXBbb2JqLT5pbnRlZ2VyLnZhbHVlXTsKLQlhY3BpX29zX2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCW5vZGUgPSBweG1fdG9fbmlkX21hcFtweG1dOwogCiAJaWYgKG5vZGUgPj0gTUFYX05VTU5PREVTIHx8ICFub2RlX29ubGluZShub2RlKSB8fAogCSAgICBjcHVzX2VtcHR5KG5vZGVfdG9fY3B1bWFzayhub2RlKSkpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggMDI3MmMwMS4uODFjNDVkNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtNzI4LDEyICs3MjgsOCBAQAogCW1vdiBmOD1mMAkJLy8gY2xlYXIgZjgKIAk7OwogCWxkOCByMzA9W3IyXSwxNgkJLy8gTTB8MSBsb2FkIGNyLmlmcwotCW1vdi5tIGFyLnNzZD1yMAkJLy8gTTIgY2xlYXIgYXIuc3NkCi0JY21wLmVxIHA5LHAwPXIwLHIwCS8vIHNldCBwOSB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCByZXN0b3JlIGNyLmlmcwotCTs7CiAJbGQ4IHIyNT1bcjNdLDE2CQkvLyBNMHwxIGxvYWQgYXIudW5hdAotCW1vdi5tIGFyLmNzZD1yMAkJLy8gTTIgY2xlYXIgYXIuY3NkCi0JbW92IHIyMj1yMAkJLy8gY2xlYXIgcjIyCisJY21wLmVxIHA5LHAwPXIwLHIwCS8vIHNldCBwOSB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCByZXN0b3JlIGNyLmlmcwogCTs7CiAJbGQ4IHIyNj1bcjJdLFBUKEIwKS1QVChBUl9QRlMpCS8vIE0wfDEgbG9hZCBhci5wZnMKIChwS1N0aykJbW92IHIyMj1wc3IJCS8vIE0yIHJlYWQgUFNSIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIGRpc2FibGVkCkBAIC03NTYsMTEgKzc1MiwxNSBAQAogCW1vdiBmNz1mMAkJLy8gY2xlYXIgZjcKIAk7OwogCWxkOC5maWxsIHIxMj1bcjJdCS8vIHJlc3RvcmUgcjEyIChzcCkKKwltb3YubSBhci5zc2Q9cjAJCS8vIE0yIGNsZWFyIGFyLnNzZAorCW1vdiByMjI9cjAJCS8vIGNsZWFyIHIyMgorCiAJbGQ4LmZpbGwgcjE1PVtyM10JLy8gcmVzdG9yZSByMTUKKyhwVVN0aykgc3QxIFtyMTRdPXIxNwogCWFkZGwgcjM9VEhJU19DUFUoaWE2NF9waHlzX3N0YWNrZWRfc2l6ZV9wOCkscjAKIAk7OwotKHBVU3RrKQlsZDQgcjM9W3IzXQkJLy8gcjMgPSBjcHVfZGF0YS0+cGh5c19zdGFja2VkX3NpemVfcDgKLShwVVN0aykgc3QxIFtyMTRdPXIxNworKHBVU3RrKQlsZDQgcjE3PVtyM10JCS8vIHIxNyA9IGNwdV9kYXRhLT5waHlzX3N0YWNrZWRfc2l6ZV9wOAorCW1vdi5tIGFyLmNzZD1yMAkJLy8gTTIgY2xlYXIgYXIuY3NkCiAJbW92IGI2PXIxOAkJLy8gSTAgIHJlc3RvcmUgYjYKIAk7OwogCW1vdiByMTQ9cjAJCS8vIGNsZWFyIHIxNApAQCAtNzgyLDcgKzc4Miw3IEBACiAJc3Q4LnNwaWxsIFtyMl09cjgJLy8gc3RvcmUgcmV0dXJuIHZhbHVlIGluIHNsb3QgZm9yIHI4IGFuZCBzZXQgdW5hdCBiaXQKIAkubWVtLm9mZnNldCA4LDAKIAlzdDguc3BpbGwgW3IzXT1yMAkvLyBjbGVhciBlcnJvciBpbmRpY2F0aW9uIGluIHNsb3QgZm9yIHIxMCBhbmQgc2V0IHVuYXQgYml0Ci1FTkQoaWE2NF9yZXRfZnJvbV9pYTMyX2V4ZWN2ZV9zeXNjYWxsKQorRU5EKGlhNjRfcmV0X2Zyb21faWEzMl9leGVjdmUpCiAJLy8gZmFsbCB0aHJvdWdoCiAjZW5kaWYgLyogQ09ORklHX0lBMzJfU1VQUE9SVCAqLwogR0xPQkFMX0VOVFJZKGlhNjRfbGVhdmVfa2VybmVsKQpAQCAtMTQxNyw3ICsxNDE3LDcgQEAKIAlkYXRhOCBzeXNfbXNncmN2CiAJZGF0YTggc3lzX21zZ2N0bAogCWRhdGE4IHN5c19zaG1nZXQKLQlkYXRhOCBpYTY0X3NobWF0CisJZGF0YTggc3lzX3NobWF0CiAJZGF0YTggc3lzX3NobWR0CQkJCS8vIDExMTUKIAlkYXRhOCBzeXNfc2htY3RsCiAJZGF0YTggc3lzX3N5c2xvZwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9mc3lzLlMgYi9hcmNoL2lhNjQva2VybmVsL2ZzeXMuUwppbmRleCAwZDg2NTBmLi40ZjNjZGVmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2ZzeXMuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2ZzeXMuUwpAQCAtNjExLDggKzYxMSwxMCBAQAogCW1vdmwgcjI9aWE2NF9yZXRfZnJvbV9zeXNjYWxsCiAJOzsKIAltb3YgcnA9cjIJCQkJLy8gc2V0IHRoZSByZWFsIHJldHVybiBhZGRyCi0JdGJpdC56IHA4LHAwPXIzLFRJRl9TWVNDQUxMX1RSQUNFCisJYW5kIHIzPV9USUZfU1lTQ0FMTF9UUkFDRUFVRElULHIzCiAJOzsKKwljbXAuZXEgcDgscDA9cjMscjAKKwogKHAxMCkJYnIuY29uZC5zcG50Lm1hbnkgaWE2NF9yZXRfZnJvbV9zeXNjYWxsCS8vIHAxMD09dHJ1ZSBtZWFucyBvdXQgcmVnaXN0ZXJzIGFyZSBtb3JlIHRoYW4gOAogKHA4KQlici5jYWxsLnNwdGsubWFueSBiNj1iNgkJLy8gaWdub3JlIHRoaXMgcmV0dXJuIGFkZHIKIAlici5jb25kLnNwdGsgaWE2NF90cmFjZV9zeXNjYWxsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2hlYWQuUyBiL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TCmluZGV4IDEwNWM3ZmUuLjhkM2E5MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TCkBAIC0xNSw2ICsxNSw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgRG9uIER1Z2dlciA8RG9uLkR1Z2dlckBpbnRlbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgRmVuZ2h1YSBZdSA8ZmVuZ2h1YS55dUBpbnRlbC5jb20+CiAgKiAgIC1PcHRpbWl6ZSBfX2lhNjRfc2F2ZV9mcHUoKSBhbmQgX19pYTY0X2xvYWRfZnB1KCkgZm9yIEl0YW5pdW0gMi4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+CisgKiAgIFN1cHBvcnQgZm9yIENQVSBIb3RwbHVnCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMjksNiArMzEsMTM5IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21jYV9hc20uaD4KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorI2RlZmluZSBTQUxfUFNSX0JJVFNfVE9fU0VUCQkJCVwKKwkoSUE2NF9QU1JfQUMgfCBJQTY0X1BTUl9CTiB8IElBNjRfUFNSX01GSCB8IElBNjRfUFNSX01GTCkKKworI2RlZmluZSBTQVZFX0ZST01fUkVHKHNyYywgcHRyLCBkZXN0KQlcCisJbW92IGRlc3Q9c3JjOzsJCQkJCQlcCisJc3Q4IFtwdHJdPWRlc3QsMHgwOAorCisjZGVmaW5lIFJFU1RPUkVfUkVHKHJlZywgcHRyLCBfdG1wKQkJXAorCWxkOCBfdG1wPVtwdHJdLDB4MDg7OwkJCQlcCisJbW92IHJlZz1fdG1wCisKKyNkZWZpbmUgU0FWRV9CUkVBS19SRUdTKHB0ciwgX2lkeCwgX2JyZWcsIF9kZXN0KVwKKwltb3YgYXIubGM9SUE2NF9OVU1fREJHX1JFR1MtMTs7IAkJCVwKKwltb3YgX2lkeD0wOzsgCQkJCQkJCQlcCisxOiAJCQkJCQkJCQkJCQlcCisJU0FWRV9GUk9NX1JFRyhfYnJlZ1tfaWR4XSwgcHRyLCBfZGVzdCk7OwlcCisJYWRkIF9pZHg9MSxfaWR4OzsJCQkJCQkJXAorCWJyLmNsb29wLnNwdGsubWFueSAxYgorCisjZGVmaW5lIFJFU1RPUkVfQlJFQUtfUkVHUyhwdHIsIF9pZHgsIF9icmVnLCBfdG1wLCBfbGJsKVwKKwltb3YgYXIubGM9SUE2NF9OVU1fREJHX1JFR1MtMTs7CQkJXAorCW1vdiBfaWR4PTA7OwkJCQkJCQlcCitfbGJsOiAgUkVTVE9SRV9SRUcoX2JyZWdbX2lkeF0sIHB0ciwgX3RtcCk7OwlcCisJYWRkIF9pZHg9MSwgX2lkeDs7CQkJCQkJXAorCWJyLmNsb29wLnNwdGsubWFueSBfbGJsCisKKyNkZWZpbmUgU0FWRV9PTkVfUlIobnVtLCBfcmVnLCBfdG1wKSBcCisJbW92bCBfdG1wPShudW08PDYxKTs7CVwKKwltb3YgX3JlZz1ycltfdG1wXQorCisjZGVmaW5lIFNBVkVfUkVHSU9OX1JFR1MoX3RtcCwgX3IwLCBfcjEsIF9yMiwgX3IzLCBfcjQsIF9yNSwgX3I2LCBfcjcpIFwKKwlTQVZFX09ORV9SUigwLF9yMCwgX3RtcCk7OyBcCisJU0FWRV9PTkVfUlIoMSxfcjEsIF90bXApOzsgXAorCVNBVkVfT05FX1JSKDIsX3IyLCBfdG1wKTs7IFwKKwlTQVZFX09ORV9SUigzLF9yMywgX3RtcCk7OyBcCisJU0FWRV9PTkVfUlIoNCxfcjQsIF90bXApOzsgXAorCVNBVkVfT05FX1JSKDUsX3I1LCBfdG1wKTs7IFwKKwlTQVZFX09ORV9SUig2LF9yNiwgX3RtcCk7OyBcCisJU0FWRV9PTkVfUlIoNyxfcjcsIF90bXApOzsKKworI2RlZmluZSBTVE9SRV9SRUdJT05fUkVHUyhwdHIsIF9yMCwgX3IxLCBfcjIsIF9yMywgX3I0LCBfcjUsIF9yNiwgX3I3KSBcCisJc3Q4IFtwdHJdPV9yMCwgODs7IFwKKwlzdDggW3B0cl09X3IxLCA4OzsgXAorCXN0OCBbcHRyXT1fcjIsIDg7OyBcCisJc3Q4IFtwdHJdPV9yMywgODs7IFwKKwlzdDggW3B0cl09X3I0LCA4OzsgXAorCXN0OCBbcHRyXT1fcjUsIDg7OyBcCisJc3Q4IFtwdHJdPV9yNiwgODs7IFwKKwlzdDggW3B0cl09X3I3LCA4OzsKKworI2RlZmluZSBSRVNUT1JFX1JFR0lPTl9SRUdTKHB0ciwgX2lkeDEsIF9pZHgyLCBfdG1wKSBcCisJbW92CQlhci5sYz0weDA4LTE7OwkJCQkJCVwKKwltb3ZsCV9pZHgxPTB4MDA7OwkJCQkJCVwKK1Jlc3RSUjoJCQkJCQkJCQkJCVwKKwlkZXAueglfaWR4Mj1faWR4MSw2MSwzOzsJCQkJCVwKKwlsZDgJCV90bXA9W3B0cl0sODs7CQkJCQkJXAorCW1vdgkJcnJbX2lkeDJdPV90bXA7OwkJCQkJXAorCXNybHouZDs7CQkJCQkJCQkJXAorCWFkZAkJX2lkeDE9MSxfaWR4MTs7CQkJCQkJXAorCWJyLmNsb29wLnNwdGsuZmV3CVJlc3RSUgorCisjZGVmaW5lIFNFVF9BUkVBX0ZPUl9CT09USU5HX0NQVShyZWcxLCByZWcyKSBcCisJbW92bCByZWcxPXNhbF9zdGF0ZV9mb3JfYm9vdGluZ19jcHU7OwlcCisJbGQ4IHJlZzI9W3JlZzFdOzsKKworLyoKKyAqIEFkanVzdCByZWdpb24gcmVnaXN0ZXJzIHNhdmVkIGJlZm9yZSBzdGFydGluZyB0byBzYXZlCisgKiBicmVhayByZWdzIGFuZCByZXN0IG9mIHRoZSBzdGF0ZXMgdGhhdCBuZWVkIHRvIGJlIHByZXNlcnZlZC4KKyAqLworI2RlZmluZSBTQUxfVE9fT1NfQk9PVF9IQU5ET0ZGX1NUQVRFX1NBVkUoX3JlZzEsX3JlZzIsX3ByZWQpICBcCisJU0FWRV9GUk9NX1JFRyhiMCxfcmVnMSxfcmVnMik7OwkJCQkJCVwKKwlTQVZFX0ZST01fUkVHKGIxLF9yZWcxLF9yZWcyKTs7CQkJCQkJXAorCVNBVkVfRlJPTV9SRUcoYjIsX3JlZzEsX3JlZzIpOzsJCQkJCQlcCisJU0FWRV9GUk9NX1JFRyhiMyxfcmVnMSxfcmVnMik7OwkJCQkJCVwKKwlTQVZFX0ZST01fUkVHKGI0LF9yZWcxLF9yZWcyKTs7CQkJCQkJXAorCVNBVkVfRlJPTV9SRUcoYjUsX3JlZzEsX3JlZzIpOzsJCQkJCQlcCisJc3Q4IFtfcmVnMV09cjEsMHgwODs7CQkJCQkJCQlcCisJc3Q4IFtfcmVnMV09cjEyLDB4MDg7OwkJCQkJCQkJXAorCXN0OCBbX3JlZzFdPXIxMywweDA4OzsJCQkJCQkJCVwKKwlTQVZFX0ZST01fUkVHKGFyLmZwc3IsX3JlZzEsX3JlZzIpOzsJCQkJXAorCVNBVkVfRlJPTV9SRUcoYXIucGZzLF9yZWcxLF9yZWcyKTs7CQkJCQlcCisJU0FWRV9GUk9NX1JFRyhhci5ybmF0LF9yZWcxLF9yZWcyKTs7CQkJCVwKKwlTQVZFX0ZST01fUkVHKGFyLnVuYXQsX3JlZzEsX3JlZzIpOzsJCQkJXAorCVNBVkVfRlJPTV9SRUcoYXIuYnNwc3RvcmUsX3JlZzEsX3JlZzIpOzsJCQlcCisJU0FWRV9GUk9NX1JFRyhjci5kY3IsX3JlZzEsX3JlZzIpOzsJCQkJCVwKKwlTQVZFX0ZST01fUkVHKGNyLml2YSxfcmVnMSxfcmVnMik7OwkJCQkJXAorCVNBVkVfRlJPTV9SRUcoY3IucHRhLF9yZWcxLF9yZWcyKTs7CQkJCQlcCisJU0FWRV9GUk9NX1JFRyhjci5pdHYsX3JlZzEsX3JlZzIpOzsJCQkJCVwKKwlTQVZFX0ZST01fUkVHKGNyLnBtdixfcmVnMSxfcmVnMik7OwkJCQkJXAorCVNBVkVfRlJPTV9SRUcoY3IuY21jdixfcmVnMSxfcmVnMik7OwkJCQlcCisJU0FWRV9GUk9NX1JFRyhjci5scnIwLF9yZWcxLF9yZWcyKTs7CQkJCVwKKwlTQVZFX0ZST01fUkVHKGNyLmxycjEsX3JlZzEsX3JlZzIpOzsJCQkJXAorCXN0OCBbX3JlZzFdPXI0LDB4MDg7OwkJCQkJCQkJXAorCXN0OCBbX3JlZzFdPXI1LDB4MDg7OwkJCQkJCQkJXAorCXN0OCBbX3JlZzFdPXI2LDB4MDg7OwkJCQkJCQkJXAorCXN0OCBbX3JlZzFdPXI3LDB4MDg7OwkJCQkJCQkJXAorCXN0OCBbX3JlZzFdPV9wcmVkLDB4MDg7OwkJCQkJCQlcCisJU0FWRV9GUk9NX1JFRyhhci5sYywgX3JlZzEsIF9yZWcyKTs7CQkJCVwKKwlzdGYuc3BpbGwubnRhIFtfcmVnMV09ZjIsMTY7OwkJCQkJCVwKKwlzdGYuc3BpbGwubnRhIFtfcmVnMV09ZjMsMTY7OwkJCQkJCVwKKwlzdGYuc3BpbGwubnRhIFtfcmVnMV09ZjQsMTY7OwkJCQkJCVwKKwlzdGYuc3BpbGwubnRhIFtfcmVnMV09ZjUsMTY7OwkJCQkJCVwKKwlzdGYuc3BpbGwubnRhIFtfcmVnMV09ZjE2LDE2OzsJCQkJCQlcCisJc3RmLnNwaWxsLm50YSBbX3JlZzFdPWYxNywxNjs7CQkJCQkJXAorCXN0Zi5zcGlsbC5udGEgW19yZWcxXT1mMTgsMTY7OwkJCQkJCVwKKwlzdGYuc3BpbGwubnRhIFtfcmVnMV09ZjE5LDE2OzsJCQkJCQlcCisJc3RmLnNwaWxsLm50YSBbX3JlZzFdPWYyMCwxNjs7CQkJCQkJXAorCXN0Zi5zcGlsbC5udGEgW19yZWcxXT1mMjEsMTY7OwkJCQkJCVwKKwlzdGYuc3BpbGwubnRhIFtfcmVnMV09ZjIyLDE2OzsJCQkJCQlcCisJc3RmLnNwaWxsLm50YSBbX3JlZzFdPWYyMywxNjs7CQkJCQkJXAorCXN0Zi5zcGlsbC5udGEgW19yZWcxXT1mMjQsMTY7OwkJCQkJCVwKKwlzdGYuc3BpbGwubnRhIFtfcmVnMV09ZjI1LDE2OzsJCQkJCQlcCisJc3RmLnNwaWxsLm50YSBbX3JlZzFdPWYyNiwxNjs7CQkJCQkJXAorCXN0Zi5zcGlsbC5udGEgW19yZWcxXT1mMjcsMTY7OwkJCQkJCVwKKwlzdGYuc3BpbGwubnRhIFtfcmVnMV09ZjI4LDE2OzsJCQkJCQlcCisJc3RmLnNwaWxsLm50YSBbX3JlZzFdPWYyOSwxNjs7CQkJCQkJXAorCXN0Zi5zcGlsbC5udGEgW19yZWcxXT1mMzAsMTY7OwkJCQkJCVwKKwlzdGYuc3BpbGwubnRhIFtfcmVnMV09ZjMxLDE2OzsKKworI2Vsc2UKKyNkZWZpbmUgU0VUX0FSRUFfRk9SX0JPT1RJTkdfQ1BVKGExLCBhMikKKyNkZWZpbmUgU0FMX1RPX09TX0JPT1RfSEFORE9GRl9TVEFURV9TQVZFKGExLGEyLCBhMykKKyNkZWZpbmUgU0FWRV9SRUdJT05fUkVHUyhfdG1wLCBfcjAsIF9yMSwgX3IyLCBfcjMsIF9yNCwgX3I1LCBfcjYsIF9yNykKKyNkZWZpbmUgU1RPUkVfUkVHSU9OX1JFR1MocHRyLCBfcjAsIF9yMSwgX3IyLCBfcjMsIF9yNCwgX3I1LCBfcjYsIF9yNykKKyNlbmRpZgorCisjZGVmaW5lIFNFVF9PTkVfUlIobnVtLCBwZ3NpemUsIF90bXAxLCBfdG1wMiwgdmhwdCkgXAorCW1vdmwgX3RtcDE9KG51bSA8PCA2MSk7OwlcCisJbW92IF90bXAyPSgoaWE2NF9yaWQoSUE2NF9SRUdJT05fSURfS0VSTkVMLCAobnVtPDw2MSkpIDw8IDgpIHwgKHBnc2l6ZSA8PCAyKSB8IHZocHQpOzsgXAorCW1vdiBycltfdG1wMV09X3RtcDIKIAogCS5zZWN0aW9uIF9fc3BlY2lhbF9wYWdlX3NlY3Rpb24sImF4IgogCkBAIC02NCw2ICsxOTksMTIgQEAKIAlzcmx6LmkKIAk7OwogCS8qCisJICogU2F2ZSB0aGUgcmVnaW9uIHJlZ2lzdGVycywgcHJlZGljYXRlIGJlZm9yZSB0aGV5IGdldCBjbG9iYmVyZWQKKwkgKi8KKwlTQVZFX1JFR0lPTl9SRUdTKHIyLCByOCxyOSxyMTAscjExLHIxMixyMTMscjE0LHIxNSk7CisJbW92IHIyNT1wcjs7CisKKwkvKgogCSAqIEluaXRpYWxpemUga2VybmVsIHJlZ2lvbiByZWdpc3RlcnM6CiAJICoJcnJbMF06IFZIUFQgZW5hYmxlZCwgcGFnZSBzaXplID0gUEFHRV9TSElGVAogCSAqCXJyWzFdOiBWSFBUIGVuYWJsZWQsIHBhZ2Ugc2l6ZSA9IFBBR0VfU0hJRlQKQEAgLTc2LDMyICsyMTcsMTQgQEAKIAkgKiBXZSBpbml0aWFsaXplIGFsbCBvZiB0aGVtIHRvIHByZXZlbnQgaW5hZHZlcnRlbnRseSBhc3N1bWluZwogCSAqIHNvbWV0aGluZyBhYm91dCB0aGUgc3RhdGUgb2YgYWRkcmVzcyB0cmFuc2xhdGlvbiBlYXJseSBpbiBib290LgogCSAqLwotCW1vdiByNj0oKGlhNjRfcmlkKElBNjRfUkVHSU9OX0lEX0tFUk5FTCwgKDA8PDYxKSkgPDwgOCkgfCAoUEFHRV9TSElGVCA8PCAyKSB8IDEpCi0JbW92bCByNz0oMDw8NjEpCi0JbW92IHI4PSgoaWE2NF9yaWQoSUE2NF9SRUdJT05fSURfS0VSTkVMLCAoMTw8NjEpKSA8PCA4KSB8IChQQUdFX1NISUZUIDw8IDIpIHwgMSkKLQltb3ZsIHI5PSgxPDw2MSkKLQltb3YgcjEwPSgoaWE2NF9yaWQoSUE2NF9SRUdJT05fSURfS0VSTkVMLCAoMjw8NjEpKSA8PCA4KSB8IChQQUdFX1NISUZUIDw8IDIpIHwgMSkKLQltb3ZsIHIxMT0oMjw8NjEpCi0JbW92IHIxMj0oKGlhNjRfcmlkKElBNjRfUkVHSU9OX0lEX0tFUk5FTCwgKDM8PDYxKSkgPDwgOCkgfCAoUEFHRV9TSElGVCA8PCAyKSB8IDEpCi0JbW92bCByMTM9KDM8PDYxKQotCW1vdiByMTQ9KChpYTY0X3JpZChJQTY0X1JFR0lPTl9JRF9LRVJORUwsICg0PDw2MSkpIDw8IDgpIHwgKFBBR0VfU0hJRlQgPDwgMikgfCAxKQotCW1vdmwgcjE1PSg0PDw2MSkKLQltb3YgcjE2PSgoaWE2NF9yaWQoSUE2NF9SRUdJT05fSURfS0VSTkVMLCAoNTw8NjEpKSA8PCA4KSB8IChQQUdFX1NISUZUIDw8IDIpIHwgMSkKLQltb3ZsIHIxNz0oNTw8NjEpCi0JbW92IHIxOD0oKGlhNjRfcmlkKElBNjRfUkVHSU9OX0lEX0tFUk5FTCwgKDY8PDYxKSkgPDwgOCkgfCAoSUE2NF9HUkFOVUxFX1NISUZUIDw8IDIpKQotCW1vdmwgcjE5PSg2PDw2MSkKLQltb3YgcjIwPSgoaWE2NF9yaWQoSUE2NF9SRUdJT05fSURfS0VSTkVMLCAoNzw8NjEpKSA8PCA4KSB8IChJQTY0X0dSQU5VTEVfU0hJRlQgPDwgMikpCi0JbW92bCByMjE9KDc8PDYxKQotCTs7Ci0JbW92IHJyW3I3XT1yNgotCW1vdiBycltyOV09cjgKLQltb3YgcnJbcjExXT1yMTAKLQltb3YgcnJbcjEzXT1yMTIKLQltb3YgcnJbcjE1XT1yMTQKLQltb3YgcnJbcjE3XT1yMTYKLQltb3YgcnJbcjE5XT1yMTgKLQltb3YgcnJbcjIxXT1yMjAKLQk7OworCVNFVF9PTkVfUlIoMCwgUEFHRV9TSElGVCwgcjIsIHIxNiwgMSk7OworCVNFVF9PTkVfUlIoMSwgUEFHRV9TSElGVCwgcjIsIHIxNiwgMSk7OworCVNFVF9PTkVfUlIoMiwgUEFHRV9TSElGVCwgcjIsIHIxNiwgMSk7OworCVNFVF9PTkVfUlIoMywgUEFHRV9TSElGVCwgcjIsIHIxNiwgMSk7OworCVNFVF9PTkVfUlIoNCwgUEFHRV9TSElGVCwgcjIsIHIxNiwgMSk7OworCVNFVF9PTkVfUlIoNSwgUEFHRV9TSElGVCwgcjIsIHIxNiwgMSk7OworCVNFVF9PTkVfUlIoNiwgSUE2NF9HUkFOVUxFX1NISUZULCByMiwgcjE2LCAwKTs7CisJU0VUX09ORV9SUig3LCBJQTY0X0dSQU5VTEVfU0hJRlQsIHIyLCByMTYsIDApOzsKIAkvKgogCSAqIE5vdyBwaW4gbWFwcGluZ3MgaW50byB0aGUgVExCIGZvciBrZXJuZWwgdGV4dCBhbmQgZGF0YQogCSAqLwpAQCAtMTQyLDYgKzI2NSwxMiBAQAogCTs7CiAxOgkvLyBub3cgd2UgYXJlIGluIHZpcnR1YWwgbW9kZQogCisJU0VUX0FSRUFfRk9SX0JPT1RJTkdfQ1BVKHIyLCByMTYpOworCisJU1RPUkVfUkVHSU9OX1JFR1MocjE2LCByOCxyOSxyMTAscjExLHIxMixyMTMscjE0LHIxNSk7CisJU0FMX1RPX09TX0JPT1RfSEFORE9GRl9TVEFURV9TQVZFKHIxNixyMTcscjI1KQorCTs7CisKIAkvLyBzZXQgSVZUIGVudHJ5IHBvaW50LS0tY2FuJ3QgYWNjZXNzIEkvTyBwb3J0cyB3aXRob3V0IGl0CiAJbW92bCByMz1pYTY0X2l2dAogCTs7CkBAIC0yMTEsMTIgKzM0MCwxMyBAQAogCW1vdiBJQTY0X0tSKENVUlJFTlRfU1RBQ0spPXIxNgogCW1vdiByMTM9cjIKIAkvKgotCSAqIFJlc2VydmUgc3BhY2UgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sgZm9yICJzdHJ1Y3QgcHRfcmVncyIuICBLZXJuZWwgdGhyZWFkcwotCSAqIGRvbid0IHN0b3JlIGludGVyZXN0aW5nIHZhbHVlcyBpbiB0aGF0IHN0cnVjdHVyZSwgYnV0IHRoZSBzcGFjZSBzdGlsbCBuZWVkcwotCSAqIHRvIGJlIHRoZXJlIGJlY2F1c2UgdGltZS1jcml0aWNhbCBzdHVmZiBzdWNoIGFzIHRoZSBjb250ZXh0IHN3aXRjaGluZyBjYW4KLQkgKiBiZSBpbXBsZW1lbnRlZCBtb3JlIGVmZmljaWVudGx5IChmb3IgZXhhbXBsZSwgX19zd2l0Y2hfdG8oKQorCSAqIFJlc2VydmUgc3BhY2UgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sgZm9yICJzdHJ1Y3QgcHRfcmVncyIuICBLZXJuZWwKKwkgKiB0aHJlYWRzIGRvbid0IHN0b3JlIGludGVyZXN0aW5nIHZhbHVlcyBpbiB0aGF0IHN0cnVjdHVyZSwgYnV0IHRoZSBzcGFjZQorCSAqIHN0aWxsIG5lZWRzIHRvIGJlIHRoZXJlIGJlY2F1c2UgdGltZS1jcml0aWNhbCBzdHVmZiBzdWNoIGFzIHRoZSBjb250ZXh0CisJICogc3dpdGNoaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCBtb3JlIGVmZmljaWVudGx5IChmb3IgZXhhbXBsZSwgX19zd2l0Y2hfdG8oKQogCSAqIGFsd2F5cyBzZXRzIHRoZSBwc3IuZGZoIGJpdCBvZiB0aGUgdGFzayBpdCBpcyBzd2l0Y2hpbmcgdG8pLgogCSAqLworCiAJYWRkbCByMTI9SUE2NF9TVEtfT0ZGU0VULUlBNjRfUFRfUkVHU19TSVpFLTE2LHIyCiAJYWRkbCByMj1JQTY0X1JCU19PRkZTRVQscjIJLy8gaW5pdGlhbGl6ZSB0aGUgUlNFCiAJbW92IGFyLnJzYz0wCQkvLyBwbGFjZSBSU0UgaW4gZW5mb3JjZWQgbGF6eSBtb2RlCkBAIC05OTMsNCArMTEyMyw5OCBAQAogCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorR0xPQkFMX0VOVFJZKGlhNjRfanVtcF90b19zYWwpCisJYWxsb2MgcjE2PWFyLnBmcywxLDAsMCwwOzsKKwlyc20gcHNyLmkgIHwgcHNyLmljCit7CisJZmx1c2hycworCXNybHouaQorfQorCXRwYSByMjU9aW4wCisJbW92bCByMTg9dGxiX3B1cmdlX2RvbmU7OworCURBVEFfVkFfVE9fUEEocjE4KTs7CisJbW92IGIxPXIxOCAJLy8gUmV0dXJuIGxvY2F0aW9uCisJbW92bCByMTg9aWE2NF9kb190bGJfcHVyZ2U7OworCURBVEFfVkFfVE9fUEEocjE4KTs7CisJbW92IGIyPXIxOCAJLy8gZG9pbmcgdGxiX2ZsdXNoIHdvcmsKKwltb3YgYXIucnNjPTAgIC8vIFB1dCBSU0UgIGluIGVuZm9yY2VkIGxhenksIExFIG1vZGUKKwltb3ZsIHIxNz0xZjs7CisJREFUQV9WQV9UT19QQShyMTcpOzsKKwltb3YgY3IuaWlwPXIxNworCW1vdmwgcjE2PVNBTF9QU1JfQklUU19UT19TRVQ7OworCW1vdiBjci5pcHNyPXIxNgorCW1vdiBjci5pZnM9cjA7OworCXJmaTs7CisxOgorCS8qCisJICogSW52YWxpZGF0ZSBhbGwgVExCIGRhdGEvaW5zdAorCSAqLworCWJyLnNwdGsubWFueSBiMjs7IC8vIGp1bXAgdG8gdGxiIHB1cmdlIGNvZGUKKwordGxiX3B1cmdlX2RvbmU6CisJUkVTVE9SRV9SRUdJT05fUkVHUyhyMjUsIHIxNyxyMTgscjE5KTs7CisJUkVTVE9SRV9SRUcoYjAsIHIyNSwgcjE3KTs7CisJUkVTVE9SRV9SRUcoYjEsIHIyNSwgcjE3KTs7CisJUkVTVE9SRV9SRUcoYjIsIHIyNSwgcjE3KTs7CisJUkVTVE9SRV9SRUcoYjMsIHIyNSwgcjE3KTs7CisJUkVTVE9SRV9SRUcoYjQsIHIyNSwgcjE3KTs7CisJUkVTVE9SRV9SRUcoYjUsIHIyNSwgcjE3KTs7CisJbGQ4IHIxPVtyMjVdLDB4MDg7OworCWxkOCByMTI9W3IyNV0sMHgwODs7CisJbGQ4IHIxMz1bcjI1XSwweDA4OzsKKwlSRVNUT1JFX1JFRyhhci5mcHNyLCByMjUsIHIxNyk7OworCVJFU1RPUkVfUkVHKGFyLnBmcywgcjI1LCByMTcpOzsKKwlSRVNUT1JFX1JFRyhhci5ybmF0LCByMjUsIHIxNyk7OworCVJFU1RPUkVfUkVHKGFyLnVuYXQsIHIyNSwgcjE3KTs7CisJUkVTVE9SRV9SRUcoYXIuYnNwc3RvcmUsIHIyNSwgcjE3KTs7CisJUkVTVE9SRV9SRUcoY3IuZGNyLCByMjUsIHIxNyk7OworCVJFU1RPUkVfUkVHKGNyLml2YSwgcjI1LCByMTcpOzsKKwlSRVNUT1JFX1JFRyhjci5wdGEsIHIyNSwgcjE3KTs7CisJUkVTVE9SRV9SRUcoY3IuaXR2LCByMjUsIHIxNyk7OworCVJFU1RPUkVfUkVHKGNyLnBtdiwgcjI1LCByMTcpOzsKKwlSRVNUT1JFX1JFRyhjci5jbWN2LCByMjUsIHIxNyk7OworCVJFU1RPUkVfUkVHKGNyLmxycjAsIHIyNSwgcjE3KTs7CisJUkVTVE9SRV9SRUcoY3IubHJyMSwgcjI1LCByMTcpOzsKKwlsZDggcjQ9W3IyNV0sMHgwODs7CisJbGQ4IHI1PVtyMjVdLDB4MDg7OworCWxkOCByNj1bcjI1XSwweDA4OzsKKwlsZDggcjc9W3IyNV0sMHgwODs7CisJbGQ4IHIxNz1bcjI1XSwweDA4OzsKKwltb3YgcHI9cjE3LC0xOzsKKwlSRVNUT1JFX1JFRyhhci5sYywgcjI1LCByMTcpOzsKKwkvKgorCSAqIE5vdyBSZXN0b3JlIGZsb2F0aW5nIHBvaW50IHJlZ3MKKwkgKi8KKwlsZGYuZmlsbC5udGEgZjI9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMz1bcjI1XSwxNjs7CisJbGRmLmZpbGwubnRhIGY0PVtyMjVdLDE2OzsKKwlsZGYuZmlsbC5udGEgZjU9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMTY9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMTc9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMTg9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMTk9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMjA9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMjE9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMjI9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMjM9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMjQ9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMjU9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMjY9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMjc9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMjg9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMjk9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMzA9W3IyNV0sMTY7OworCWxkZi5maWxsLm50YSBmMzE9W3IyNV0sMTY7OworCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBoYXZlIGRvbmUgYWxsIHRoZSByZWdpc3RlciByZXN0b3JlcworCSAqIHdlIGFyZSBub3cgcmVhZHkgZm9yIHRoZSBiaWcgRElWRSB0byBTQUwgTGFuZAorCSAqLworCXNzbSBwc3IuaWM7OworCXNybHouZDs7CisJYnIucmV0LnNwdGsubWFueSBiMDs7CitFTkQoaWE2NF9qdW1wX3RvX3NhbCkKKyNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KKwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMKaW5kZXggYzE1YmU1Yy4uODhiMDE0MyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KIAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KQEAgLTk4LDE5ICs5OSwzMCBAQAogI2RlZmluZSBEQkcoZm10Li4uKQogI2VuZGlmCiAKKyNkZWZpbmUgTlJfUFJFQUxMT0NBVEVfUlRFX0VOVFJJRVMJKFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgaW9zYXBpY19ydGVfaW5mbykpCisjZGVmaW5lIFJURV9QUkVBTExPQ0FURUQJKDEpCisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaW9zYXBpY19sb2NrKTsKIAogLyogVGhlc2UgdGFibGVzIG1hcCBJQS02NCB2ZWN0b3JzIHRvIHRoZSBJT1NBUElDIHBpbiB0aGF0IGdlbmVyYXRlcyB0aGlzIHZlY3Rvci4gKi8KIAotc3RhdGljIHN0cnVjdCBpb3NhcGljX2ludHJfaW5mbyB7CitzdHJ1Y3QgaW9zYXBpY19ydGVfaW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBydGVfbGlzdDsJLyogbm9kZSBpbiBsaXN0IG9mIFJURXMgc2hhcmluZyB0aGUgc2FtZSB2ZWN0b3IgKi8KIAljaGFyIF9faW9tZW0JKmFkZHI7CQkvKiBiYXNlIGFkZHJlc3Mgb2YgSU9TQVBJQyAqLwotCXUzMgkJbG93MzI7CQkvKiBjdXJyZW50IHZhbHVlIG9mIGxvdyB3b3JkIG9mIFJlZGlyZWN0aW9uIHRhYmxlIGVudHJ5ICovCiAJdW5zaWduZWQgaW50CWdzaV9iYXNlOwkvKiBmaXJzdCBHU0kgYXNzaWduZWQgdG8gdGhpcyBJT1NBUElDICovCi0JY2hhcgkJcnRlX2luZGV4OwkvKiBJT1NBUElDIFJURSBpbmRleCAoLTEgPT4gbm90IGFuIElPU0FQSUMgaW50ZXJydXB0KSAqLworCWNoYXIJCXJ0ZV9pbmRleDsJLyogSU9TQVBJQyBSVEUgaW5kZXggKi8KKwlpbnQJCXJlZmNudDsJCS8qIHJlZmVyZW5jZSBjb3VudGVyICovCisJdW5zaWduZWQgaW50CWZsYWdzOwkJLyogZmxhZ3MgKi8KK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitzdGF0aWMgc3RydWN0IGlvc2FwaWNfaW50cl9pbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJ0ZXM7CQkvKiBSVEVzIHVzaW5nIHRoaXMgdmVjdG9yIChlbXB0eSA9PiBub3QgYW4gSU9TQVBJQyBpbnRlcnJ1cHQpICovCisJaW50CQljb3VudDsJCS8qICMgb2YgUlRFcyB0aGF0IHNoYXJlcyB0aGlzIHZlY3RvciAqLworCXUzMgkJbG93MzI7CQkvKiBjdXJyZW50IHZhbHVlIG9mIGxvdyB3b3JkIG9mIFJlZGlyZWN0aW9uIHRhYmxlIGVudHJ5ICovCisJdW5zaWduZWQgaW50CWRlc3Q7CQkvKiBkZXN0aW5hdGlvbiBDUFUgcGh5c2ljYWwgSUQgKi8KIAl1bnNpZ25lZCBjaGFyCWRtb2RlCTogMzsJLyogZGVsaXZlcnkgbW9kZSAoc2VlIGlvc2FwaWMuaCkgKi8KIAl1bnNpZ25lZCBjaGFyIAlwb2xhcml0eTogMTsJLyogaW50ZXJydXB0IHBvbGFyaXR5IChzZWUgaW9zYXBpYy5oKSAqLwogCXVuc2lnbmVkIGNoYXIJdHJpZ2dlcgk6IDE7CS8qIHRyaWdnZXIgbW9kZSAoc2VlIGlvc2FwaWMuaCkgKi8KLQlpbnQJCXJlZmNudDsJCS8qIHJlZmVyZW5jZSBjb3VudGVyICovCiB9IGlvc2FwaWNfaW50cl9pbmZvW0lBNjRfTlVNX1ZFQ1RPUlNdOwogCiBzdGF0aWMgc3RydWN0IGlvc2FwaWMgewpAQCAtMTI2LDYgKzEzOCw4IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHBjYXRfY29tcGF0IF9faW5pdGRhdGE7CS8qIDgyNTkgY29tcGF0aWJpbGl0eSBmbGFnICovCiAKK3N0YXRpYyBpbnQgaW9zYXBpY19rbWFsbG9jX29rOworc3RhdGljIExJU1RfSEVBRChmcmVlX3J0ZV9saXN0KTsKIAogLyoKICAqIEZpbmQgYW4gSU9TQVBJQyBhc3NvY2lhdGVkIHdpdGggYSBHU0kKQEAgLTE0NywxMCArMTYxLDEyIEBACiBfZ3NpX3RvX3ZlY3RvciAodW5zaWduZWQgaW50IGdzaSkKIHsKIAlzdHJ1Y3QgaW9zYXBpY19pbnRyX2luZm8gKmluZm87CisJc3RydWN0IGlvc2FwaWNfcnRlX2luZm8gKnJ0ZTsKIAogCWZvciAoaW5mbyA9IGlvc2FwaWNfaW50cl9pbmZvOyBpbmZvIDwgaW9zYXBpY19pbnRyX2luZm8gKyBJQTY0X05VTV9WRUNUT1JTOyArK2luZm8pCi0JCWlmIChpbmZvLT5nc2lfYmFzZSArIGluZm8tPnJ0ZV9pbmRleCA9PSBnc2kpCi0JCQlyZXR1cm4gaW5mbyAtIGlvc2FwaWNfaW50cl9pbmZvOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0ZSwgJmluZm8tPnJ0ZXMsIHJ0ZV9saXN0KQorCQkJaWYgKHJ0ZS0+Z3NpX2Jhc2UgKyBydGUtPnJ0ZV9pbmRleCA9PSBnc2kpCisJCQkJcmV0dXJuIGluZm8gLSBpb3NhcGljX2ludHJfaW5mbzsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTE2NywzMyArMTgzLDUyIEBACiBpbnQKIGdzaV90b19pcnEgKHVuc2lnbmVkIGludCBnc2kpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaXJxOwogCS8qCiAJICogWFhYIGZpeCBtZTogdGhpcyBhc3N1bWVzIGFuIGlkZW50aXR5IG1hcHBpbmcgdmV0d2VlbiBJQS02NCB2ZWN0b3IgYW5kIExpbnV4IGlycQogCSAqIG51bWJlcnMuLi4KIAkgKi8KLQlyZXR1cm4gX2dzaV90b192ZWN0b3IoZ3NpKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9zYXBpY19sb2NrLCBmbGFncyk7CisJeworCQlpcnEgPSBfZ3NpX3RvX3ZlY3Rvcihnc2kpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb3NhcGljX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBpcnE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW9zYXBpY19ydGVfaW5mbyAqZ3NpX3ZlY3Rvcl90b19ydGUodW5zaWduZWQgaW50IGdzaSwgdW5zaWduZWQgaW50IHZlYykKK3sKKwlzdHJ1Y3QgaW9zYXBpY19ydGVfaW5mbyAqcnRlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGUsICZpb3NhcGljX2ludHJfaW5mb1t2ZWNdLnJ0ZXMsIHJ0ZV9saXN0KQorCQlpZiAocnRlLT5nc2lfYmFzZSArIHJ0ZS0+cnRlX2luZGV4ID09IGdzaSkKKwkJCXJldHVybiBydGU7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkCi1zZXRfcnRlICh1bnNpZ25lZCBpbnQgdmVjdG9yLCB1bnNpZ25lZCBpbnQgZGVzdCwgaW50IG1hc2spCitzZXRfcnRlICh1bnNpZ25lZCBpbnQgZ3NpLCB1bnNpZ25lZCBpbnQgdmVjdG9yLCB1bnNpZ25lZCBpbnQgZGVzdCwgaW50IG1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBwb2wsIHRyaWdnZXIsIGRtb2RlOwogCXUzMiBsb3czMiwgaGlnaDMyOwogCWNoYXIgX19pb21lbSAqYWRkcjsKIAlpbnQgcnRlX2luZGV4OwogCWNoYXIgcmVkaXI7CisJc3RydWN0IGlvc2FwaWNfcnRlX2luZm8gKnJ0ZTsKIAogCURCRyhLRVJOX0RFQlVHIklPU0FQSUM6IHJvdXRpbmcgdmVjdG9yICVkIHRvIDB4JXhcbiIsIHZlY3RvciwgZGVzdCk7CiAKLQlydGVfaW5kZXggPSBpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLnJ0ZV9pbmRleDsKLQlpZiAocnRlX2luZGV4IDwgMCkKKwlydGUgPSBnc2lfdmVjdG9yX3RvX3J0ZShnc2ksIHZlY3Rvcik7CisJaWYgKCFydGUpCiAJCXJldHVybjsJCS8qIG5vdCBhbiBJT1NBUElDIGludGVycnVwdCAqLwogCi0JYWRkciAgICA9IGlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0uYWRkcjsKKwlydGVfaW5kZXggPSBydGUtPnJ0ZV9pbmRleDsKKwlhZGRyCT0gcnRlLT5hZGRyOwogCXBvbCAgICAgPSBpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLnBvbGFyaXR5OwogCXRyaWdnZXIgPSBpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLnRyaWdnZXI7CiAJZG1vZGUgICA9IGlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0uZG1vZGU7Ci0JdmVjdG9yICY9ICh+SUE2NF9JUlFfUkVESVJFQ1RFRCk7CiAKIAlyZWRpciA9IChkbW9kZSA9PSBJT1NBUElDX0xPV0VTVF9QUklPUklUWSkgPyAxIDogMDsKIApAQCAtMjIxLDYgKzI1Niw3IEBACiAJaW9zYXBpY193cml0ZShhZGRyLCBJT1NBUElDX1JURV9ISUdIKHJ0ZV9pbmRleCksIGhpZ2gzMik7CiAJaW9zYXBpY193cml0ZShhZGRyLCBJT1NBUElDX1JURV9MT1cocnRlX2luZGV4KSwgbG93MzIpOwogCWlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0ubG93MzIgPSBsb3czMjsKKwlpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLmRlc3QgPSBkZXN0OwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjM3LDE4ICsyNzMsMjAgQEAKIAl1MzIgbG93MzI7CiAJaW50IHJ0ZV9pbmRleDsKIAlpYTY0X3ZlY3RvciB2ZWMgPSBpcnFfdG9fdmVjdG9yKGlycSk7CisJc3RydWN0IGlvc2FwaWNfcnRlX2luZm8gKnJ0ZTsKIAotCWFkZHIgPSBpb3NhcGljX2ludHJfaW5mb1t2ZWNdLmFkZHI7Ci0JcnRlX2luZGV4ID0gaW9zYXBpY19pbnRyX2luZm9bdmVjXS5ydGVfaW5kZXg7Ci0KLQlpZiAocnRlX2luZGV4IDwgMCkKKwlpZiAobGlzdF9lbXB0eSgmaW9zYXBpY19pbnRyX2luZm9bdmVjXS5ydGVzKSkKIAkJcmV0dXJuOwkJCS8qIG5vdCBhbiBJT1NBUElDIGludGVycnVwdCEgKi8KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb3NhcGljX2xvY2ssIGZsYWdzKTsKIAl7CiAJCS8qIHNldCBvbmx5IHRoZSBtYXNrIGJpdCAqLwogCQlsb3czMiA9IGlvc2FwaWNfaW50cl9pbmZvW3ZlY10ubG93MzIgfD0gSU9TQVBJQ19NQVNLOwotCQlpb3NhcGljX3dyaXRlKGFkZHIsIElPU0FQSUNfUlRFX0xPVyhydGVfaW5kZXgpLCBsb3czMik7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocnRlLCAmaW9zYXBpY19pbnRyX2luZm9bdmVjXS5ydGVzLCBydGVfbGlzdCkgeworCQkJYWRkciA9IHJ0ZS0+YWRkcjsKKwkJCXJ0ZV9pbmRleCA9IHJ0ZS0+cnRlX2luZGV4OworCQkJaW9zYXBpY193cml0ZShhZGRyLCBJT1NBUElDX1JURV9MT1cocnRlX2luZGV4KSwgbG93MzIpOworCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvc2FwaWNfbG9jaywgZmxhZ3MpOwogfQpAQCAtMjYxLDE2ICsyOTksMTkgQEAKIAl1MzIgbG93MzI7CiAJaW50IHJ0ZV9pbmRleDsKIAlpYTY0X3ZlY3RvciB2ZWMgPSBpcnFfdG9fdmVjdG9yKGlycSk7CisJc3RydWN0IGlvc2FwaWNfcnRlX2luZm8gKnJ0ZTsKIAotCWFkZHIgPSBpb3NhcGljX2ludHJfaW5mb1t2ZWNdLmFkZHI7Ci0JcnRlX2luZGV4ID0gaW9zYXBpY19pbnRyX2luZm9bdmVjXS5ydGVfaW5kZXg7Ci0JaWYgKHJ0ZV9pbmRleCA8IDApCisJaWYgKGxpc3RfZW1wdHkoJmlvc2FwaWNfaW50cl9pbmZvW3ZlY10ucnRlcykpCiAJCXJldHVybjsJCQkvKiBub3QgYW4gSU9TQVBJQyBpbnRlcnJ1cHQhICovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9zYXBpY19sb2NrLCBmbGFncyk7CiAJewogCQlsb3czMiA9IGlvc2FwaWNfaW50cl9pbmZvW3ZlY10ubG93MzIgJj0gfklPU0FQSUNfTUFTSzsKLQkJaW9zYXBpY193cml0ZShhZGRyLCBJT1NBUElDX1JURV9MT1cocnRlX2luZGV4KSwgbG93MzIpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0ZSwgJmlvc2FwaWNfaW50cl9pbmZvW3ZlY10ucnRlcywgcnRlX2xpc3QpIHsKKwkJCWFkZHIgPSBydGUtPmFkZHI7CisJCQlydGVfaW5kZXggPSBydGUtPnJ0ZV9pbmRleDsKKwkJCWlvc2FwaWNfd3JpdGUoYWRkciwgSU9TQVBJQ19SVEVfTE9XKHJ0ZV9pbmRleCksIGxvdzMyKTsKKwkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb3NhcGljX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTI4Niw2ICszMjcsNyBAQAogCWNoYXIgX19pb21lbSAqYWRkcjsKIAlpbnQgcmVkaXIgPSAoaXJxICYgSUE2NF9JUlFfUkVESVJFQ1RFRCkgPyAxIDogMDsKIAlpYTY0X3ZlY3RvciB2ZWM7CisJc3RydWN0IGlvc2FwaWNfcnRlX2luZm8gKnJ0ZTsKIAogCWlycSAmPSAofklBNjRfSVJRX1JFRElSRUNURUQpOwogCXZlYyA9IGlycV90b192ZWN0b3IoaXJxKTsKQEAgLTI5NSwxMCArMzM3LDcgQEAKIAogCWRlc3QgPSBjcHVfcGh5c2ljYWxfaWQoZmlyc3RfY3B1KG1hc2spKTsKIAotCXJ0ZV9pbmRleCA9IGlvc2FwaWNfaW50cl9pbmZvW3ZlY10ucnRlX2luZGV4OwotCWFkZHIgPSBpb3NhcGljX2ludHJfaW5mb1t2ZWNdLmFkZHI7Ci0KLQlpZiAocnRlX2luZGV4IDwgMCkKKwlpZiAobGlzdF9lbXB0eSgmaW9zYXBpY19pbnRyX2luZm9bdmVjXS5ydGVzKSkKIAkJcmV0dXJuOwkJCS8qIG5vdCBhbiBJT1NBUElDIGludGVycnVwdCAqLwogCiAJc2V0X2lycV9hZmZpbml0eV9pbmZvKGlycSwgZGVzdCwgcmVkaXIpOwpAQCAtMzE4LDggKzM1NywxMyBAQAogCQkJbG93MzIgfD0gKElPU0FQSUNfRklYRUQgPDwgSU9TQVBJQ19ERUxJVkVSWV9TSElGVCk7CiAKIAkJaW9zYXBpY19pbnRyX2luZm9bdmVjXS5sb3czMiA9IGxvdzMyOwotCQlpb3NhcGljX3dyaXRlKGFkZHIsIElPU0FQSUNfUlRFX0hJR0gocnRlX2luZGV4KSwgaGlnaDMyKTsKLQkJaW9zYXBpY193cml0ZShhZGRyLCBJT1NBUElDX1JURV9MT1cocnRlX2luZGV4KSwgbG93MzIpOworCQlpb3NhcGljX2ludHJfaW5mb1t2ZWNdLmRlc3QgPSBkZXN0OworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0ZSwgJmlvc2FwaWNfaW50cl9pbmZvW3ZlY10ucnRlcywgcnRlX2xpc3QpIHsKKwkJCWFkZHIgPSBydGUtPmFkZHI7CisJCQlydGVfaW5kZXggPSBydGUtPnJ0ZV9pbmRleDsKKwkJCWlvc2FwaWNfd3JpdGUoYWRkciwgSU9TQVBJQ19SVEVfSElHSChydGVfaW5kZXgpLCBoaWdoMzIpOworCQkJaW9zYXBpY193cml0ZShhZGRyLCBJT1NBUElDX1JURV9MT1cocnRlX2luZGV4KSwgbG93MzIpOworCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvc2FwaWNfbG9jaywgZmxhZ3MpOwogI2VuZGlmCkBAIC0zNDAsOSArMzg0LDExIEBACiBpb3NhcGljX2VuZF9sZXZlbF9pcnEgKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaWE2NF92ZWN0b3IgdmVjID0gaXJxX3RvX3ZlY3RvcihpcnEpOworCXN0cnVjdCBpb3NhcGljX3J0ZV9pbmZvICpydGU7CiAKIAltb3ZlX2lycShpcnEpOwotCWlvc2FwaWNfZW9pKGlvc2FwaWNfaW50cl9pbmZvW3ZlY10uYWRkciwgdmVjKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0ZSwgJmlvc2FwaWNfaW50cl9pbmZvW3ZlY10ucnRlcywgcnRlX2xpc3QpCisJCWlvc2FwaWNfZW9pKHJ0ZS0+YWRkciwgdmVjKTsKIH0KIAogI2RlZmluZSBpb3NhcGljX3NodXRkb3duX2xldmVsX2lycQltYXNrX2lycQpAQCAtNDIyLDYgKzQ2OCwzNCBAQAogCXJldHVybiBpb3NhcGljX3JlYWQoYWRkciwgSU9TQVBJQ19WRVJTSU9OKTsKIH0KIAorc3RhdGljIGludCBpb3NhcGljX2ZpbmRfc2hhcmFibGVfdmVjdG9yICh1bnNpZ25lZCBsb25nIHRyaWdnZXIsIHVuc2lnbmVkIGxvbmcgcG9sKQoreworCWludCBpLCB2ZWN0b3IgPSAtMSwgbWluX2NvdW50ID0gLTE7CisJc3RydWN0IGlvc2FwaWNfaW50cl9pbmZvICppbmZvOworCisJLyoKKwkgKiBzaGFyZWQgdmVjdG9ycyBmb3IgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgbm90CisJICogc3VwcG9ydGVkIHlldAorCSAqLworCWlmICh0cmlnZ2VyID09IElPU0FQSUNfRURHRSkKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gSUE2NF9GSVJTVF9ERVZJQ0VfVkVDVE9SOyBpIDw9IElBNjRfTEFTVF9ERVZJQ0VfVkVDVE9SOyBpKyspIHsKKwkJaW5mbyA9ICZpb3NhcGljX2ludHJfaW5mb1tpXTsKKwkJaWYgKGluZm8tPnRyaWdnZXIgPT0gdHJpZ2dlciAmJiBpbmZvLT5wb2xhcml0eSA9PSBwb2wgJiYKKwkJICAgIChpbmZvLT5kbW9kZSA9PSBJT1NBUElDX0ZJWEVEIHx8IGluZm8tPmRtb2RlID09IElPU0FQSUNfTE9XRVNUX1BSSU9SSVRZKSkgeworCQkJaWYgKG1pbl9jb3VudCA9PSAtMSB8fCBpbmZvLT5jb3VudCA8IG1pbl9jb3VudCkgeworCQkJCXZlY3RvciA9IGk7CisJCQkJbWluX2NvdW50ID0gaW5mby0+Y291bnQ7CisJCQl9CisJCX0KKwl9CisJaWYgKHZlY3RvciA8IDApCisJCXBhbmljKCIlczogb3V0IG9mIGludGVycnVwdCB2ZWN0b3JzIVxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiB2ZWN0b3I7Cit9CisKIC8qCiAgKiBpZiB0aGUgZ2l2ZW4gdmVjdG9yIGlzIGFscmVhZHkgb3duZWQgYnkgb3RoZXIsCiAgKiAgYXNzaWduIGEgbmV3IHZlY3RvciBmb3IgdGhlIG90aGVyIGFuZCBtYWtlIHRoZSB2ZWN0b3IgYXZhaWxhYmxlCkBAIC00MzEsMTkgKzUwNSw2MyBAQAogewogCWludCBuZXdfdmVjdG9yOwogCi0JaWYgKGlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0ucnRlX2luZGV4ID49IDAgfHwgaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS5hZGRyCi0JICAgIHx8IGlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0uZ3NpX2Jhc2UgfHwgaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS5kbW9kZQotCSAgICB8fCBpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLnBvbGFyaXR5IHx8IGlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0udHJpZ2dlcikKLQl7CisJaWYgKCFsaXN0X2VtcHR5KCZpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLnJ0ZXMpKSB7CiAJCW5ld192ZWN0b3IgPSBhc3NpZ25faXJxX3ZlY3RvcihBVVRPX0FTU0lHTik7CiAJCXByaW50ayhLRVJOX0lORk8gIlJlYXNzaWduaW5nIHZlY3RvciAlZCB0byAlZFxuIiwgdmVjdG9yLCBuZXdfdmVjdG9yKTsKIAkJbWVtY3B5KCZpb3NhcGljX2ludHJfaW5mb1tuZXdfdmVjdG9yXSwgJmlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0sCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGlvc2FwaWNfaW50cl9pbmZvKSk7CisJCUlOSVRfTElTVF9IRUFEKCZpb3NhcGljX2ludHJfaW5mb1tuZXdfdmVjdG9yXS5ydGVzKTsKKwkJbGlzdF9tb3ZlKGlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0ucnRlcy5uZXh0LCAmaW9zYXBpY19pbnRyX2luZm9bbmV3X3ZlY3Rvcl0ucnRlcyk7CiAJCW1lbXNldCgmaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXSwgMCwgc2l6ZW9mKHN0cnVjdCBpb3NhcGljX2ludHJfaW5mbykpOwotCQlpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLnJ0ZV9pbmRleCA9IC0xOworCQlpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLmxvdzMyID0gSU9TQVBJQ19NQVNLOworCQlJTklUX0xJU1RfSEVBRCgmaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS5ydGVzKTsKIAl9CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaW9zYXBpY19ydGVfaW5mbyAqaW9zYXBpY19hbGxvY19ydGUgKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGlvc2FwaWNfcnRlX2luZm8gKnJ0ZTsKKwlpbnQgcHJlYWxsb2NhdGVkID0gMDsKKworCWlmICghaW9zYXBpY19rbWFsbG9jX29rICYmIGxpc3RfZW1wdHkoJmZyZWVfcnRlX2xpc3QpKSB7CisJCXJ0ZSA9IGFsbG9jX2Jvb3RtZW0oc2l6ZW9mKHN0cnVjdCBpb3NhcGljX3J0ZV9pbmZvKSAqIE5SX1BSRUFMTE9DQVRFX1JURV9FTlRSSUVTKTsKKwkJaWYgKCFydGUpCisJCQlyZXR1cm4gTlVMTDsKKwkJZm9yIChpID0gMDsgaSA8IE5SX1BSRUFMTE9DQVRFX1JURV9FTlRSSUVTOyBpKyssIHJ0ZSsrKQorCQkJbGlzdF9hZGQoJnJ0ZS0+cnRlX2xpc3QsICZmcmVlX3J0ZV9saXN0KTsKKwl9CisKKwlpZiAoIWxpc3RfZW1wdHkoJmZyZWVfcnRlX2xpc3QpKSB7CisJCXJ0ZSA9IGxpc3RfZW50cnkoZnJlZV9ydGVfbGlzdC5uZXh0LCBzdHJ1Y3QgaW9zYXBpY19ydGVfaW5mbywgcnRlX2xpc3QpOworCQlsaXN0X2RlbCgmcnRlLT5ydGVfbGlzdCk7CisJCXByZWFsbG9jYXRlZCsrOworCX0gZWxzZSB7CisJCXJ0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpb3NhcGljX3J0ZV9pbmZvKSwgR0ZQX0FUT01JQyk7CisJCWlmICghcnRlKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KHJ0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBpb3NhcGljX3J0ZV9pbmZvKSk7CisJaWYgKHByZWFsbG9jYXRlZCkKKwkJcnRlLT5mbGFncyB8PSBSVEVfUFJFQUxMT0NBVEVEOworCisJcmV0dXJuIHJ0ZTsKK30KKworc3RhdGljIHZvaWQgaW9zYXBpY19mcmVlX3J0ZSAoc3RydWN0IGlvc2FwaWNfcnRlX2luZm8gKnJ0ZSkKK3sKKwlpZiAocnRlLT5mbGFncyAmIFJURV9QUkVBTExPQ0FURUQpCisJCWxpc3RfYWRkX3RhaWwoJnJ0ZS0+cnRlX2xpc3QsICZmcmVlX3J0ZV9saXN0KTsKKwllbHNlCisJCWtmcmVlKHJ0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZlY3Rvcl9pc19zaGFyZWQgKGludCB2ZWN0b3IpCit7CisJcmV0dXJuIChpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLmNvdW50ID4gMSk7Cit9CisKIHN0YXRpYyB2b2lkCiByZWdpc3Rlcl9pbnRyICh1bnNpZ25lZCBpbnQgZ3NpLCBpbnQgdmVjdG9yLCB1bnNpZ25lZCBjaGFyIGRlbGl2ZXJ5LAogCSAgICAgICB1bnNpZ25lZCBsb25nIHBvbGFyaXR5LCB1bnNpZ25lZCBsb25nIHRyaWdnZXIpCkBAIC00NTQsNiArNTcyLDcgQEAKIAlpbnQgaW5kZXg7CiAJdW5zaWduZWQgbG9uZyBnc2lfYmFzZTsKIAl2b2lkIF9faW9tZW0gKmlvc2FwaWNfYWRkcmVzczsKKwlzdHJ1Y3QgaW9zYXBpY19ydGVfaW5mbyAqcnRlOwogCiAJaW5kZXggPSBmaW5kX2lvc2FwaWMoZ3NpKTsKIAlpZiAoaW5kZXggPCAwKSB7CkBAIC00NjQsMTQgKzU4MywzMyBAQAogCWlvc2FwaWNfYWRkcmVzcyA9IGlvc2FwaWNfbGlzdHNbaW5kZXhdLmFkZHI7CiAJZ3NpX2Jhc2UgPSBpb3NhcGljX2xpc3RzW2luZGV4XS5nc2lfYmFzZTsKIAotCXJ0ZV9pbmRleCA9IGdzaSAtIGdzaV9iYXNlOwotCWlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0ucnRlX2luZGV4ID0gcnRlX2luZGV4OworCXJ0ZSA9IGdzaV92ZWN0b3JfdG9fcnRlKGdzaSwgdmVjdG9yKTsKKwlpZiAoIXJ0ZSkgeworCQlydGUgPSBpb3NhcGljX2FsbG9jX3J0ZSgpOworCQlpZiAoIXJ0ZSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0KKworCQlydGVfaW5kZXggPSBnc2kgLSBnc2lfYmFzZTsKKwkJcnRlLT5ydGVfaW5kZXgJPSBydGVfaW5kZXg7CisJCXJ0ZS0+YWRkcgk9IGlvc2FwaWNfYWRkcmVzczsKKwkJcnRlLT5nc2lfYmFzZQk9IGdzaV9iYXNlOworCQlydGUtPnJlZmNudCsrOworCQlsaXN0X2FkZF90YWlsKCZydGUtPnJ0ZV9saXN0LCAmaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS5ydGVzKTsKKwkJaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS5jb3VudCsrOworCX0KKwllbHNlIGlmICh2ZWN0b3JfaXNfc2hhcmVkKHZlY3RvcikpIHsKKwkJc3RydWN0IGlvc2FwaWNfaW50cl9pbmZvICppbmZvID0gJmlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl07CisJCWlmIChpbmZvLT50cmlnZ2VyICE9IHRyaWdnZXIgfHwgaW5mby0+cG9sYXJpdHkgIT0gcG9sYXJpdHkpIHsKKwkJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogY2Fubm90IG92ZXJyaWRlIHRoZSBpbnRlcnJ1cHRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKIAlpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLnBvbGFyaXR5ID0gcG9sYXJpdHk7CiAJaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS5kbW9kZSAgICA9IGRlbGl2ZXJ5OwotCWlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0uYWRkciAgICAgPSBpb3NhcGljX2FkZHJlc3M7Ci0JaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS5nc2lfYmFzZSA9IGdzaV9iYXNlOwogCWlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0udHJpZ2dlciAgPSB0cmlnZ2VyOwotCWlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0ucmVmY250Kys7CiAKIAlpZiAodHJpZ2dlciA9PSBJT1NBUElDX0VER0UpCiAJCWlycV90eXBlID0gJmlycV90eXBlX2lvc2FwaWNfZWRnZTsKQEAgLTQ5NCw2ICs2MzIsMTMgQEAKIAlzdGF0aWMgaW50IGNwdSA9IC0xOwogCiAJLyoKKwkgKiBJbiBjYXNlIG9mIHZlY3RvciBzaGFyZWQgYnkgbXVsdGlwbGUgUlRFcywgYWxsIFJURXMgdGhhdAorCSAqIHNoYXJlIHRoZSB2ZWN0b3IgbmVlZCB0byB1c2UgdGhlIHNhbWUgZGVzdGluYXRpb24gQ1BVLgorCSAqLworCWlmICghbGlzdF9lbXB0eSgmaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS5ydGVzKSkKKwkJcmV0dXJuIGlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0uZGVzdDsKKworCS8qCiAJICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIHJlZGlyZWN0aW9uIHZpYSBYVFAsIGxldCBpdAogCSAqIGRpc3RyaWJ1dGUgaW50ZXJydXB0cy4KIAkgKi8KQEAgLTU2NSwxMCArNzEwLDEyIEBACiBpb3NhcGljX3JlZ2lzdGVyX2ludHIgKHVuc2lnbmVkIGludCBnc2ksCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIHBvbGFyaXR5LCB1bnNpZ25lZCBsb25nIHRyaWdnZXIpCiB7Ci0JaW50IHZlY3RvcjsKKwlpbnQgdmVjdG9yLCBtYXNrID0gMTsKIAl1bnNpZ25lZCBpbnQgZGVzdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCisJc3RydWN0IGlvc2FwaWNfcnRlX2luZm8gKnJ0ZTsKKwl1MzIgbG93MzI7CithZ2FpbjoKIAkvKgogCSAqIElmIHRoaXMgR1NJIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCAoaS5lLiwgaXQncyBhCiAJICogc2hhcmVkIGludGVycnVwdCwgb3Igd2UgbG9zdCBhIHJhY2UgdG8gcmVnaXN0ZXIgaXQpLApAQCAtNTc4LDIwICs3MjUsNDYgQEAKIAl7CiAJCXZlY3RvciA9IGdzaV90b192ZWN0b3IoZ3NpKTsKIAkJaWYgKHZlY3RvciA+IDApIHsKLQkJCWlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0ucmVmY250Kys7CisJCQlydGUgPSBnc2lfdmVjdG9yX3RvX3J0ZShnc2ksIHZlY3Rvcik7CisJCQlydGUtPnJlZmNudCsrOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9zYXBpY19sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gdmVjdG9yOwogCQl9Ci0KLQkJdmVjdG9yID0gYXNzaWduX2lycV92ZWN0b3IoQVVUT19BU1NJR04pOwotCQlkZXN0ID0gZ2V0X3RhcmdldF9jcHUoZ3NpLCB2ZWN0b3IpOwotCQlyZWdpc3Rlcl9pbnRyKGdzaSwgdmVjdG9yLCBJT1NBUElDX0xPV0VTVF9QUklPUklUWSwKLQkJCXBvbGFyaXR5LCB0cmlnZ2VyKTsKLQotCQlzZXRfcnRlKHZlY3RvciwgZGVzdCwgMSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvc2FwaWNfbG9jaywgZmxhZ3MpOwogCisJLyogSWYgdmVjdG9yIGlzIHJ1bm5pbmcgb3V0LCB3ZSB0cnkgdG8gZmluZCBhIHNoYXJhYmxlIHZlY3RvciAqLworCXZlY3RvciA9IGFzc2lnbl9pcnFfdmVjdG9yX25vcGFuaWMoQVVUT19BU1NJR04pOworCWlmICh2ZWN0b3IgPCAwKQorCQl2ZWN0b3IgPSBpb3NhcGljX2ZpbmRfc2hhcmFibGVfdmVjdG9yKHRyaWdnZXIsIHBvbGFyaXR5KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY3AodmVjdG9yKS0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmaW9zYXBpY19sb2NrKTsKKwl7CisJCWlmIChnc2lfdG9fdmVjdG9yKGdzaSkgPiAwKSB7CisJCQlpZiAobGlzdF9lbXB0eSgmaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS5ydGVzKSkKKwkJCQlmcmVlX2lycV92ZWN0b3IodmVjdG9yKTsKKwkJCXNwaW5fdW5sb2NrKCZpb3NhcGljX2xvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NwKHZlY3RvciktPmxvY2ssIGZsYWdzKTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKworCQlkZXN0ID0gZ2V0X3RhcmdldF9jcHUoZ3NpLCB2ZWN0b3IpOworCQlyZWdpc3Rlcl9pbnRyKGdzaSwgdmVjdG9yLCBJT1NBUElDX0xPV0VTVF9QUklPUklUWSwKKwkJCSAgICAgIHBvbGFyaXR5LCB0cmlnZ2VyKTsKKworCQkvKgorCQkgKiBJZiB0aGUgdmVjdG9yIGlzIHNoYXJlZCBhbmQgYWxyZWFkeSB1bm1hc2tlZCBmb3IKKwkJICogb3RoZXIgaW50ZXJydXB0IHNvdXJjZXMsIGRvbid0IG1hc2sgaXQuCisJCSAqLworCQlsb3czMiA9IGlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0ubG93MzI7CisJCWlmICh2ZWN0b3JfaXNfc2hhcmVkKHZlY3RvcikgJiYgIShsb3czMiAmIElPU0FQSUNfTUFTSykpCisJCQltYXNrID0gMDsKKwkJc2V0X3J0ZShnc2ksIHZlY3RvciwgZGVzdCwgbWFzayk7CisJfQorCXNwaW5fdW5sb2NrKCZpb3NhcGljX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjcCh2ZWN0b3IpLT5sb2NrLCBmbGFncyk7CisKIAlwcmludGsoS0VSTl9JTkZPICJHU0kgJXUgKCVzLCAlcykgLT4gQ1BVICVkICgweCUwNHgpIHZlY3RvciAlZFxuIiwKIAkgICAgICAgZ3NpLCAodHJpZ2dlciA9PSBJT1NBUElDX0VER0UgPyAiZWRnZSIgOiAibGV2ZWwiKSwKIAkgICAgICAgKHBvbGFyaXR5ID09IElPU0FQSUNfUE9MX0hJR0ggPyAiaGlnaCIgOiAibG93IiksCkBAIC02MDcsOCArNzgwLDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaXJxLCB2ZWN0b3I7CiAJaXJxX2Rlc2NfdCAqaWRlc2M7Ci0JaW50IHJ0ZV9pbmRleDsKKwl1MzIgbG93MzI7CiAJdW5zaWduZWQgbG9uZyB0cmlnZ2VyLCBwb2xhcml0eTsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKKwlzdHJ1Y3QgaW9zYXBpY19ydGVfaW5mbyAqcnRlOwogCiAJLyoKIAkgKiBJZiB0aGUgaXJxIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ3NpIGlzIG5vdCBmb3VuZCwKQEAgLTYyNyw1NCArODAyLDU2IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZXNjLT5sb2NrLCBmbGFncyk7CiAJc3Bpbl9sb2NrKCZpb3NhcGljX2xvY2spOwogCXsKLQkJcnRlX2luZGV4ID0gaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS5ydGVfaW5kZXg7Ci0JCWlmIChydGVfaW5kZXggPCAwKSB7Ci0JCQlzcGluX3VubG9jaygmaW9zYXBpY19sb2NrKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZXNjLT5sb2NrLCBmbGFncyk7CisJCWlmICgocnRlID0gZ3NpX3ZlY3Rvcl90b19ydGUoZ3NpLCB2ZWN0b3IpKSA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImlvc2FwaWNfdW5yZWdpc3Rlcl9pbnRyKCV1KSB1bmJhbGFuY2VkXG4iLCBnc2kpOwogCQkJV0FSTl9PTigxKTsKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0OwogCQl9CiAKLQkJaWYgKC0taW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS5yZWZjbnQgPiAwKSB7Ci0JCQlzcGluX3VubG9jaygmaW9zYXBpY19sb2NrKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJaWYgKC0tcnRlLT5yZWZjbnQgPiAwKQorCQkJZ290byBvdXQ7CiAKLQkJLyoKLQkJICogSWYgaW50ZXJydXB0IGhhbmRsZXJzIHN0aWxsIGV4aXN0IG9uIHRoZSBpcnEKLQkJICogYXNzb2NpYXRlZCB3aXRoIHRoZSBnc2ksIGRvbid0IHVucmVnaXN0ZXIgdGhlCi0JCSAqIGludGVycnVwdC4KLQkJICovCi0JCWlmIChpZGVzYy0+YWN0aW9uKSB7Ci0JCQlpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLnJlZmNudCsrOwotCQkJc3Bpbl91bmxvY2soJmlvc2FwaWNfbG9jayk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVzYy0+bG9jaywgZmxhZ3MpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2Fubm90IHVucmVnaXN0ZXIgR1NJLiBJUlEgJXUgaXMgc3RpbGwgaW4gdXNlLlxuIiwgaXJxKTsKLQkJCXJldHVybjsKLQkJfQorCQkvKiBNYXNrIHRoZSBpbnRlcnJ1cHQgKi8KKwkJbG93MzIgPSBpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLmxvdzMyIHwgSU9TQVBJQ19NQVNLOworCQlpb3NhcGljX3dyaXRlKHJ0ZS0+YWRkciwgSU9TQVBJQ19SVEVfTE9XKHJ0ZS0+cnRlX2luZGV4KSwgbG93MzIpOwogCi0JCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBkZXNjcmlwdG9yLiAqLwotCQlpZGVzYy0+aGFuZGxlciA9ICZub19pcnFfdHlwZTsKKwkJLyogUmVtb3ZlIHRoZSBydGUgZW50cnkgZnJvbSB0aGUgbGlzdCAqLworCQlsaXN0X2RlbCgmcnRlLT5ydGVfbGlzdCk7CisJCWlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0uY291bnQtLTsKKwkJaW9zYXBpY19mcmVlX3J0ZShydGUpOwogCi0JCXRyaWdnZXIgID0gaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS50cmlnZ2VyOworCQl0cmlnZ2VyCSA9IGlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0udHJpZ2dlcjsKIAkJcG9sYXJpdHkgPSBpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLnBvbGFyaXR5OworCQlkZXN0ICAgICA9IGlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0uZGVzdDsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiR1NJICV1ICglcywgJXMpIC0+IENQVSAlZCAoMHglMDR4KSB2ZWN0b3IgJWQgdW5yZWdpc3RlcmVkXG4iLAorCQkgICAgICAgZ3NpLCAodHJpZ2dlciA9PSBJT1NBUElDX0VER0UgPyAiZWRnZSIgOiAibGV2ZWwiKSwKKwkJICAgICAgIChwb2xhcml0eSA9PSBJT1NBUElDX1BPTF9ISUdIID8gImhpZ2giIDogImxvdyIpLAorCQkgICAgICAgY3B1X2xvZ2ljYWxfaWQoZGVzdCksIGRlc3QsIHZlY3Rvcik7CiAKLQkJLyogQ2xlYXIgdGhlIGludGVycnVwdCBpbmZvcm1hdGlvbi4gKi8KLQkJbWVtc2V0KCZpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLCAwLCBzaXplb2Yoc3RydWN0IGlvc2FwaWNfaW50cl9pbmZvKSk7Ci0JCWlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0ucnRlX2luZGV4ID0gLTE7CS8qIG1hcmsgYXMgdW51c2VkICovCisJCWlmIChsaXN0X2VtcHR5KCZpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLnJ0ZXMpKSB7CisJCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJCUJVR19PTihpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLmNvdW50KTsKKworCQkJLyogQ2xlYXIgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGRlc2NyaXB0b3IgKi8KKwkJCWlkZXNjLT5oYW5kbGVyID0gJm5vX2lycV90eXBlOworCisJCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGluZm9ybWF0aW9uICovCisJCQltZW1zZXQoJmlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0sIDAsIHNpemVvZihzdHJ1Y3QgaW9zYXBpY19pbnRyX2luZm8pKTsKKwkJCWlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0ubG93MzIgfD0gSU9TQVBJQ19NQVNLOworCQkJSU5JVF9MSVNUX0hFQUQoJmlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0ucnRlcyk7CisKKwkJCWlmIChpZGVzYy0+YWN0aW9uKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJpbnRlcnJ1cHQgaGFuZGxlcnMgc3RpbGwgZXhpc3Qgb24gSVJRICV1XG4iLCBpcnEpOworCQkJCVdBUk5fT04oMSk7CisJCQl9CisKKwkJCS8qIEZyZWUgdGhlIGludGVycnVwdCB2ZWN0b3IgKi8KKwkJCWZyZWVfaXJxX3ZlY3Rvcih2ZWN0b3IpOworCQl9CiAJfQorIG91dDoKIAlzcGluX3VubG9jaygmaW9zYXBpY19sb2NrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVzYy0+bG9jaywgZmxhZ3MpOwotCi0JLyogRnJlZSB0aGUgaW50ZXJydXB0IHZlY3RvciAqLwotCWZyZWVfaXJxX3ZlY3Rvcih2ZWN0b3IpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiR1NJICV1ICglcywgJXMpIC0+IHZlY3RvciAlZCB1bnJlZ2lzdGVyZC5cbiIsCi0JICAgICAgIGdzaSwgKHRyaWdnZXIgPT0gSU9TQVBJQ19FREdFID8gImVkZ2UiIDogImxldmVsIiksCi0JICAgICAgIChwb2xhcml0eSA9PSBJT1NBUElDX1BPTF9ISUdIID8gImhpZ2giIDogImxvdyIpLAotCSAgICAgICB2ZWN0b3IpOwogfQogI2VuZGlmIC8qIENPTkZJR19BQ1BJX0RFQUxMT0NBVEVfSVJRICovCiAKQEAgLTcyNCw3ICs5MDEsNyBAQAogCSAgICAgICAocG9sYXJpdHkgPT0gSU9TQVBJQ19QT0xfSElHSCA/ICJoaWdoIiA6ICJsb3ciKSwKIAkgICAgICAgY3B1X2xvZ2ljYWxfaWQoZGVzdCksIGRlc3QsIHZlY3Rvcik7CiAKLQlzZXRfcnRlKHZlY3RvciwgZGVzdCwgbWFzayk7CisJc2V0X3J0ZShnc2ksIHZlY3RvciwgZGVzdCwgbWFzayk7CiAJcmV0dXJuIHZlY3RvcjsKIH0KIApAQCAtNzUwLDcgKzkyNyw3IEBACiAJICAgIHBvbGFyaXR5ID09IElPU0FQSUNfUE9MX0hJR0ggPyAiaGlnaCIgOiAibG93IiwKIAkgICAgY3B1X2xvZ2ljYWxfaWQoZGVzdCksIGRlc3QsIHZlY3Rvcik7CiAKLQlzZXRfcnRlKHZlY3RvciwgZGVzdCwgMSk7CisJc2V0X3J0ZShnc2ksIHZlY3RvciwgZGVzdCwgMSk7CiB9CiAKIHZvaWQgX19pbml0CkBAIC03NTgsOCArOTM1LDEwIEBACiB7CiAJaW50IHZlY3RvcjsKIAotCWZvciAodmVjdG9yID0gMDsgdmVjdG9yIDwgSUE2NF9OVU1fVkVDVE9SUzsgKyt2ZWN0b3IpCi0JCWlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0ucnRlX2luZGV4ID0gLTE7CS8qIG1hcmsgYXMgdW51c2VkICovCisJZm9yICh2ZWN0b3IgPSAwOyB2ZWN0b3IgPCBJQTY0X05VTV9WRUNUT1JTOyArK3ZlY3RvcikgeworCQlpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLmxvdzMyID0gSU9TQVBJQ19NQVNLOworCQlJTklUX0xJU1RfSEVBRCgmaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXS5ydGVzKTsJLyogbWFyayBhcyB1bnVzZWQgKi8KKwl9CiAKIAlwY2F0X2NvbXBhdCA9IHN5c3RlbV9wY2F0X2NvbXBhdDsKIAlpZiAocGNhdF9jb21wYXQpIHsKQEAgLTgyNSwzICsxMDA0LDEwIEBACiAJcmV0dXJuOwogfQogI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IGlvc2FwaWNfZW5hYmxlX2ttYWxsb2MgKHZvaWQpCit7CisJaW9zYXBpY19rbWFsbG9jX29rID0gMTsKKwlyZXR1cm4gMDsKK30KK2NvcmVfaW5pdGNhbGwgKGlvc2FwaWNfZW5hYmxlX2ttYWxsb2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jCmluZGV4IDViYTA2ZWIuLjRmZTYwYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lycV9pYTY0LmMKQEAgLTYzLDIwICs2MywzMCBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgaWE2NF92ZWN0b3JfbWFza1tCSVRTX1RPX0xPTkdTKElBNjRfTlVNX0RFVklDRV9WRUNUT1JTKV07CiAKIGludAotYXNzaWduX2lycV92ZWN0b3IgKGludCBpcnEpCithc3NpZ25faXJxX3ZlY3Rvcl9ub3BhbmljIChpbnQgaXJxKQogewogCWludCBwb3MsIHZlY3RvcjsKICBhZ2FpbjoKIAlwb3MgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGlhNjRfdmVjdG9yX21hc2ssIElBNjRfTlVNX0RFVklDRV9WRUNUT1JTKTsKIAl2ZWN0b3IgPSBJQTY0X0ZJUlNUX0RFVklDRV9WRUNUT1IgKyBwb3M7CiAJaWYgKHZlY3RvciA+IElBNjRfTEFTVF9ERVZJQ0VfVkVDVE9SKQotCQkvKiBYWFggY291bGQgbG9vayBmb3Igc2hhcmFibGUgdmVjdG9ycyBpbnN0ZWFkIG9mIHBhbmljJ2luZy4uLiAqLwotCQlwYW5pYygiYXNzaWduX2lycV92ZWN0b3I6IG91dCBvZiBpbnRlcnJ1cHQgdmVjdG9ycyEiKTsKKwkJcmV0dXJuIC0xOwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KHBvcywgaWE2NF92ZWN0b3JfbWFzaykpCiAJCWdvdG8gYWdhaW47CiAJcmV0dXJuIHZlY3RvcjsKIH0KIAoraW50Cithc3NpZ25faXJxX3ZlY3RvciAoaW50IGlycSkKK3sKKwlpbnQgdmVjdG9yID0gYXNzaWduX2lycV92ZWN0b3Jfbm9wYW5pYyhpcnEpOworCisJaWYgKHZlY3RvciA8IDApCisJCXBhbmljKCJhc3NpZ25faXJxX3ZlY3Rvcjogb3V0IG9mIGludGVycnVwdCB2ZWN0b3JzISIpOworCisJcmV0dXJuIHZlY3RvcjsKK30KKwogdm9pZAogZnJlZV9pcnFfdmVjdG9yIChpbnQgdmVjdG9yKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMgYi9hcmNoL2lhNjQva2VybmVsL21jYV9hc20uUwppbmRleCBjZjNmODAxNC4uZWYzZmQ3MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKQEAgLTExMCw0NiArMTEwLDE5IEBACiAJLmdsb2JhbCBpYTY0X29zX21jYV9kaXNwYXRjaF9lbmQKIAkuZ2xvYmFsIGlhNjRfc2FsX3RvX29zX2hhbmRvZmZfc3RhdGUKIAkuZ2xvYmFsCWlhNjRfb3NfdG9fc2FsX2hhbmRvZmZfc3RhdGUKKwkuZ2xvYmFsIGlhNjRfZG9fdGxiX3B1cmdlCiAKIAkudGV4dAogCS5hbGlnbiAxNgogCi1pYTY0X29zX21jYV9kaXNwYXRjaDoKKy8qCisgKiBKdXN0IHRoZSBUTEIgcHVyZ2UgcGFydCBpcyBtb3ZlZCB0byBhIHNlcGFyYXRlIGZ1bmN0aW9uCisgKiBzbyB3ZSBjYW4gcmUtdXNlIHRoZSBjb2RlIGZvciBjcHUgaG90cGx1ZyBjb2RlIGFzIHdlbGwKKyAqIENhbGxlciBzaG91bGQgbm93IHNldHVwIGIxLCBzbyB3ZSBjYW4gYnJhbmNoIG9uY2UgdGhlCisgKiB0bGIgZmx1c2ggaXMgY29tcGxldGUuCisgKi8KIAotCS8vIFNlcmlhbGl6ZSBhbGwgTUNBIHByb2Nlc3NpbmcKLQltb3YJcjM9MTs7Ci0JTE9BRF9QSFlTSUNBTChwMCxyMixpYTY0X21jYV9zZXJpYWxpemUpOzsKLWlhNjRfb3NfbWNhX3NwaW46Ci0JeGNoZzgJcjQ9W3IyXSxyMzs7Ci0JY21wLm5lCXA2LHAwPXI0LHIwCi0ocDYpCWJyIGlhNjRfb3NfbWNhX3NwaW4KLQotCS8vIFNhdmUgdGhlIFNBTCB0byBPUyBNQ0EgaGFuZG9mZiBzdGF0ZSBhcyBkZWZpbmVkCi0JLy8gYnkgU0FMIFNQRUMgMy4wCi0JLy8gTk9URSA6IFRoZSBvcmRlciBpbiB3aGljaCB0aGUgc3RhdGUgZ2V0cyBzYXZlZAotCS8vCSAgaXMgZGVwZW5kZW50IG9uIHRoZSB3YXkgdGhlIEMtc3RydWN0dXJlCi0JLy8JICBmb3IgaWE2NF9tY2Ffc2FsX3RvX29zX3N0YXRlX3QgaGFzIGJlZW4KLQkvLwkgIGRlZmluZWQgaW4gaW5jbHVkZS9hc20vbWNhLmgKLQlTQUxfVE9fT1NfTUNBX0hBTkRPRkZfU1RBVEVfU0FWRShyMikKLQk7OwotCi0JLy8gTE9HIFBST0NFU1NPUiBTVEFURSBJTkZPIEZST00gSEVSRSBPTi4uCi1iZWdpbl9vc19tY2FfZHVtcDoKLQlicglpYTY0X29zX21jYV9wcm9jX3N0YXRlX2R1bXA7OwotCi1pYTY0X29zX21jYV9kb25lX2R1bXA6Ci0KLQlMT0FEX1BIWVNJQ0FMKHAwLHIxNixpYTY0X3NhbF90b19vc19oYW5kb2ZmX3N0YXRlKzU2KQotCTs7Ci0JbGQ4IHIxOD1bcjE2XQkJLy8gR2V0IHByb2Nlc3NvciBzdGF0ZSBwYXJhbWV0ZXIgb24gZXhpc3RpbmcgUEFMRV9DSEVDSy4KLQk7OwotCXRiaXQubnogcDYscDc9cjE4LDYwCi0ocDcpCWJyLnNwbnQgZG9uZV90bGJfcHVyZ2VfYW5kX3JlbG9hZAotCi0JLy8gVGhlIGZvbGxvd2luZyBjb2RlIHB1cmdlcyBUQyBhbmQgVFIgZW50cmllcy4gVGhlbiByZWxvYWQgYWxsIFRDIGVudHJpZXMuCi0JLy8gUHVyZ2UgcGVyY3B1IGRhdGEgVEMgZW50cmllcy4KLWJlZ2luX3RsYl9wdXJnZV9hbmRfcmVsb2FkOgotCitpYTY0X2RvX3RsYl9wdXJnZToKICNkZWZpbmUgTyhtZW1iZXIpCUlBNjRfQ1BVSU5GT18jI21lbWJlciMjX09GRlNFVAogCiAJR0VUX1RISVNfUEFERFIocjIsIGNwdV9pbmZvKQkvLyBsb2FkIHBoeXMgYWRkciBvZiBjcHVfaW5mbyBpbnRvIHIyCkBAIC0yMzAsNiArMjAzLDUxIEBACiAJOzsKIAlzcmx6LmkKIAk7OworCS8vIE5vdyBicmFuY2ggYXdheSB0byBjYWxsZXIuCisJYnIuc3B0ay5tYW55IGIxCisJOzsKKworaWE2NF9vc19tY2FfZGlzcGF0Y2g6CisKKwkvLyBTZXJpYWxpemUgYWxsIE1DQSBwcm9jZXNzaW5nCisJbW92CXIzPTE7OworCUxPQURfUEhZU0lDQUwocDAscjIsaWE2NF9tY2Ffc2VyaWFsaXplKTs7CitpYTY0X29zX21jYV9zcGluOgorCXhjaGc4CXI0PVtyMl0scjM7OworCWNtcC5uZQlwNixwMD1yNCxyMAorKHA2KQliciBpYTY0X29zX21jYV9zcGluCisKKwkvLyBTYXZlIHRoZSBTQUwgdG8gT1MgTUNBIGhhbmRvZmYgc3RhdGUgYXMgZGVmaW5lZAorCS8vIGJ5IFNBTCBTUEVDIDMuMAorCS8vIE5PVEUgOiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIHN0YXRlIGdldHMgc2F2ZWQKKwkvLwkgIGlzIGRlcGVuZGVudCBvbiB0aGUgd2F5IHRoZSBDLXN0cnVjdHVyZQorCS8vCSAgZm9yIGlhNjRfbWNhX3NhbF90b19vc19zdGF0ZV90IGhhcyBiZWVuCisJLy8JICBkZWZpbmVkIGluIGluY2x1ZGUvYXNtL21jYS5oCisJU0FMX1RPX09TX01DQV9IQU5ET0ZGX1NUQVRFX1NBVkUocjIpCisJOzsKKworCS8vIExPRyBQUk9DRVNTT1IgU1RBVEUgSU5GTyBGUk9NIEhFUkUgT04uLgorYmVnaW5fb3NfbWNhX2R1bXA6CisJYnIJaWE2NF9vc19tY2FfcHJvY19zdGF0ZV9kdW1wOzsKKworaWE2NF9vc19tY2FfZG9uZV9kdW1wOgorCisJTE9BRF9QSFlTSUNBTChwMCxyMTYsaWE2NF9zYWxfdG9fb3NfaGFuZG9mZl9zdGF0ZSs1NikKKwk7OworCWxkOCByMTg9W3IxNl0JCS8vIEdldCBwcm9jZXNzb3Igc3RhdGUgcGFyYW1ldGVyIG9uIGV4aXN0aW5nIFBBTEVfQ0hFQ0suCisJOzsKKwl0Yml0Lm56IHA2LHA3PXIxOCw2MAorKHA3KQlici5zcG50IGRvbmVfdGxiX3B1cmdlX2FuZF9yZWxvYWQKKworCS8vIFRoZSBmb2xsb3dpbmcgY29kZSBwdXJnZXMgVEMgYW5kIFRSIGVudHJpZXMuIFRoZW4gcmVsb2FkIGFsbCBUQyBlbnRyaWVzLgorCS8vIFB1cmdlIHBlcmNwdSBkYXRhIFRDIGVudHJpZXMuCitiZWdpbl90bGJfcHVyZ2VfYW5kX3JlbG9hZDoKKwltb3ZsIHIxOD1pYTY0X3JlbG9hZF90cjs7CisJTE9BRF9QSFlTSUNBTChwMCxyMTgsaWE2NF9yZWxvYWRfdHIpOzsKKwltb3YgYjE9cjE4OzsKKwlici5zcHRrLm1hbnkgaWE2NF9kb190bGJfcHVyZ2U7OworCitpYTY0X3JlbG9hZF90cjoKIAkvLyBGaW5hbGx5IHJlbG9hZCB0aGUgVFIgcmVnaXN0ZXJzLgogCS8vIDEuIFJlbG9hZCBEVFIvSVRSIHJlZ2lzdGVycyBmb3Iga2VybmVsLgogCW1vdiByMTg9S0VSTkVMX1RSX1BBR0VfU0hJRlQ8PDIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKaW5kZXggYWI0NzgxNy4uYWJjMDExMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKQEAgLTEzMiw4ICsxMzIsNyBAQAogCXNwaW5fdW5sb2NrKCZtY2FfYmhfbG9jayk7CiAKIAkvKiBUaGlzIHByb2Nlc3MgaXMgYWJvdXQgdG8gYmUga2lsbGVkIGl0c2VsZiAqLwotCWZvcmNlX3NpZyhTSUdLSUxMLCBjdXJyZW50KTsKLQlzY2hlZHVsZSgpOworCWRvX2V4aXQoU0lHS0lMTCk7CiB9CiAKIC8qKgpAQCAtNDM5LDYgKzQzOCw3IEBACiAJCQlwc3IyID0gKHN0cnVjdCBpYTY0X3BzciAqKSZwbXNhLT5wbXNhX2lwc3I7CiAJCQlwc3IyLT5jcGwgPSAwOwogCQkJcHNyMi0+cmkgID0gMDsKKwkJCXBzcjItPmkgID0gMDsKIAogCQkJcmV0dXJuIDE7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydl9hc20uUyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydl9hc20uUwppbmRleCBiY2ZhMDVhLi4yZDdlMDIxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYV9kcnZfYXNtLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2X2FzbS5TCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiBHTE9CQUxfRU5UUlkobWNhX2hhbmRsZXJfYmhob29rKQogCWludmFsYQkJCQkJCS8vIGNsZWFyIFJTRSA/CkBAIC0yMCwxMiArMjEsMjEgQEAKIAk7OwkJCQkJCQogCWFsbG9jCQlyMTY9YXIucGZzLDAsMiwxLDAJCS8vIG1ha2UgYSBuZXcgZnJhbWUKIAk7OworCW1vdgkJYXIucnNjPTAKKwk7OwogCW1vdgkJcjEzPUlBNjRfS1IoQ1VSUkVOVCkJCS8vIGN1cnJlbnQgdGFzayBwb2ludGVyCiAJOzsKLQlhZGRzCQlyMTI9SUE2NF9UQVNLX1RIUkVBRF9LU1BfT0ZGU0VULHIxMworCW1vdgkJcjI9cjEzCiAJOzsKLQlsZDgJCXIxMj1bcjEyXQkJCS8vIHN0YWNrIHBvaW50ZXIKKwlhZGRsCQlyMjI9SUE2NF9SQlNfT0ZGU0VULHIyCiAJOzsKKwltb3YJCWFyLmJzcHN0b3JlPXIyMgorCTs7CisJYWRkbAkJc3A9SUE2NF9TVEtfT0ZGU0VULUlBNjRfUFRfUkVHU19TSVpFLHIyCisJOzsKKwlhZGRzCQlyMj1JQTY0X1RBU0tfVEhSRUFEX09OX1VTVEFDS19PRkZTRVQscjEzCisJOzsKKwlzdDEJCVtyMl09cjAJCQkJLy8gY2xlYXIgY3VycmVudC0+dGhyZWFkLm9uX3VzdGFjayBmbGFnCiAJbW92CQlsb2MwPXIxNgogCW1vdmwJCWxvYzE9bWNhX2hhbmRsZXJfYmgJCS8vIHJlY292ZXJ5IEMgZnVuY3Rpb24KIAk7OwpAQCAtMzQsNyArNDQsOSBAQAogCTs7CiAJbW92CQlsb2MxPXJwCiAJOzsKLQlici5jYWxsLnNwdGsubWFueSAgICBycD1iNgkJCS8vIG5vdCByZXR1cm4gLi4uCisJc3NtCQlwc3IuaQorCTs7CisJYnIuY2FsbC5zcHRrLm1hbnkgICAgcnA9YjYJCQkvLyBkb2VzIG5vdCByZXR1cm4gLi4uCiAJOzsKIAltb3YJCWFyLnBmcz1sb2MwCiAJbW92IAkJcnA9bG9jMQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwppbmRleCA3MTE0N2JlLi43MWMxMDE2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwpAQCAtNDgwLDE0ICs0ODAsNiBAQAogI2RlZmluZSBQRk1fQ01EX0FSR19NQU5ZCS0xIC8qIGNhbm5vdCBiZSB6ZXJvICovCiAKIHR5cGVkZWYgc3RydWN0IHsKLQlpbnQJZGVidWc7CQkvKiB0dXJuIG9uL29mZiBkZWJ1Z2dpbmcgdmlhIHN5c2xvZyAqLwotCWludAlkZWJ1Z19vdmZsOwkvKiB0dXJuIG9uL29mZiBkZWJ1ZyBwcmludGsgaW4gb3ZlcmZsb3cgaGFuZGxlciAqLwotCWludAlmYXN0Y3R4c3c7CS8qIHR1cm4gb24vb2ZmIGZhc3QgKHVuc2VjdXJlKSBjdHhzdyAqLwotCWludAlleHBlcnRfbW9kZTsJLyogdHVybiBvbi9vZmYgdmFsdWUgY2hlY2tpbmcgKi8KLQlpbnQgCWRlYnVnX3BmbV9yZWFkOwotfSBwZm1fc3lzY3RsX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIHBmbV9zcHVyaW91c19vdmZsX2ludHJfY291bnQ7CS8qIGtlZXAgdHJhY2sgb2Ygc3B1cmlvdXMgb3ZmbCBpbnRlcnJ1cHRzICovCiAJdW5zaWduZWQgbG9uZyBwZm1fcmVwbGF5X292ZmxfaW50cl9jb3VudDsJLyoga2VlcCB0cmFjayBvZiByZXBsYXllZCBvdmZsIGludGVycnVwdHMgKi8KIAl1bnNpZ25lZCBsb25nIHBmbV9vdmZsX2ludHJfY291bnQ7IAkJLyoga2VlcCB0cmFjayBvZiBvdmZsIGludGVycnVwdHMgKi8KQEAgLTUxNCw4ICs1MDYsOCBAQAogc3RhdGljIHBtdV9jb25maWdfdAkJKnBtdV9jb25mOwogCiAvKiBzeXNjdGwoKSBjb250cm9scyAqLwotc3RhdGljIHBmbV9zeXNjdGxfdCBwZm1fc3lzY3RsOwotaW50IHBmbV9kZWJ1Z192YXI7CitwZm1fc3lzY3RsX3QgcGZtX3N5c2N0bDsKK0VYUE9SVF9TWU1CT0wocGZtX3N5c2N0bCk7CiAKIHN0YXRpYyBjdGxfdGFibGUgcGZtX2N0bF90YWJsZVtdPXsKIAl7MSwgImRlYnVnIiwgJnBmbV9zeXNjdGwuZGVidWcsIHNpemVvZihpbnQpLCAwNjY2LCBOVUxMLCAmcHJvY19kb2ludHZlYywgTlVMTCx9LApAQCAtMTI3Myw2ICsxMjY1LDggQEAKIH0KIEVYUE9SVF9TWU1CT0wocGZtX3VucmVnaXN0ZXJfYnVmZmVyX2ZtdCk7CiAKK2V4dGVybiB2b2lkIHVwZGF0ZV9wYWxfaGFsdF9zdGF0dXMoaW50KTsKKwogc3RhdGljIGludAogcGZtX3Jlc2VydmVfc2Vzc2lvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBpc19zeXN3aWRlLCB1bnNpZ25lZCBpbnQgY3B1KQogewpAQCAtMTMxOSw2ICsxMzEzLDExIEBACiAJCWlzX3N5c3dpZGUsCiAJCWNwdSkpOwogCisJLyoKKwkgKiBkaXNhYmxlIGRlZmF1bHRfaWRsZSgpIHRvIGdvIHRvIFBBTF9IQUxUCisJICovCisJdXBkYXRlX3BhbF9oYWx0X3N0YXR1cygwKTsKKwogCVVOTE9DS19QRlMoZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xMzc0LDYgKzEzNzMsMTIgQEAKIAkJaXNfc3lzd2lkZSwKIAkJY3B1KSk7CiAKKwkvKgorCSAqIGlmIHBvc3NpYmxlLCBlbmFibGUgZGVmYXVsdF9pZGxlKCkgdG8gZ28gaW50byBQQUxfSEFMVAorCSAqLworCWlmIChwZm1fc2Vzc2lvbnMucGZzX3Rhc2tfc2Vzc2lvbnMgPT0gMCAmJiBwZm1fc2Vzc2lvbnMucGZzX3N5c19zZXNzaW9ucyA9PSAwKQorCQl1cGRhdGVfcGFsX2hhbHRfc3RhdHVzKDEpOworCiAJVU5MT0NLX1BGUyhmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTE1NzYsNyArMTU4MSw3IEBACiAJCWdvdG8gYWJvcnRfbG9ja2VkOwogCX0KIAotCURQUklOVCgoIlslZF0gZmQ9JWQgdHlwZT0lZFxuIiwgY3VycmVudC0+cGlkLCBtc2ctPnBmbV9nZW5fbXNnLm1zZ19jdHhfZmQsIG1zZy0+cGZtX2dlbl9tc2cubXNnX3R5cGUpKTsKKwlEUFJJTlQoKCJmZD0lZCB0eXBlPSVkXG4iLCBtc2ctPnBmbV9nZW5fbXNnLm1zZ19jdHhfZmQsIG1zZy0+cGZtX2dlbl9tc2cubXNnX3R5cGUpKTsKIAogCXJldCA9IC1FRkFVTFQ7CiAgIAlpZihjb3B5X3RvX3VzZXIoYnVmLCBtc2csIHNpemVvZihwZm1fbXNnX3QpKSA9PSAwKSByZXQgPSBzaXplb2YocGZtX21zZ190KTsKQEAgLTM2OTUsOCArMzcwMCw2IEBACiAKIAlwZm1fc3lzY3RsLmRlYnVnID0gbSA9PSAwID8gMCA6IDE7CiAKLQlwZm1fZGVidWdfdmFyID0gcGZtX3N5c2N0bC5kZWJ1ZzsKLQogCXByaW50ayhLRVJOX0lORk8gInBlcmZtb24gZGVidWdnaW5nICVzICh0aW1pbmcgcmVzZXQpXG4iLCBwZm1fc3lzY3RsLmRlYnVnID8gIm9uIiA6ICJvZmYiKTsKIAogCWlmIChtID09IDApIHsKQEAgLTQyMTIsNyArNDIxNSw3IEBACiAJCURQUklOVCgoImNhbm5vdCBsb2FkIHRvIFslZF0sIGludmFsaWQgY3R4X3N0YXRlPSVkXG4iLAogCQkJcmVxLT5sb2FkX3BpZCwKIAkJCWN0eC0+Y3R4X3N0YXRlKSk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCURQUklOVCgoImxvYWRfcGlkIFslZF0gdXNpbmdfZGJyZWc9JWRcbiIsIHJlcS0+bG9hZF9waWQsIGN0eC0+Y3R4X2ZsX3VzaW5nX2RicmVnKSk7CkBAIC00NzE0LDE2ICs0NzE3LDI2IEBACiAJaWYgKHRhc2sgPT0gY3VycmVudCB8fCBjdHgtPmN0eF9mbF9zeXN0ZW0pIHJldHVybiAwOwogCiAJLyoKLQkgKiBpZiBjb250ZXh0IGlzIFVOTE9BREVEIHdlIGFyZSBzYWZlIHRvIGdvCisJICogd2UgYXJlIG1vbml0b3JpbmcgYW5vdGhlciB0aHJlYWQKIAkgKi8KLQlpZiAoc3RhdGUgPT0gUEZNX0NUWF9VTkxPQURFRCkgcmV0dXJuIDA7Ci0KLQkvKgotCSAqIG5vIGNvbW1hbmQgY2FuIG9wZXJhdGUgb24gYSB6b21iaWUgY29udGV4dAotCSAqLwotCWlmIChzdGF0ZSA9PSBQRk1fQ1RYX1pPTUJJRSkgewotCQlEUFJJTlQoKCJjbWQgJWQgc3RhdGUgem9tYmllIGNhbm5vdCBvcGVyYXRlIG9uIGNvbnRleHRcbiIsIGNtZCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2goc3RhdGUpIHsKKwkJY2FzZSBQRk1fQ1RYX1VOTE9BREVEOgorCQkJLyoKKwkJCSAqIGlmIGNvbnRleHQgaXMgVU5MT0FERUQgd2UgYXJlIHNhZmUgdG8gZ28KKwkJCSAqLworCQkJcmV0dXJuIDA7CisJCWNhc2UgUEZNX0NUWF9aT01CSUU6CisJCQkvKgorCQkJICogbm8gY29tbWFuZCBjYW4gb3BlcmF0ZSBvbiBhIHpvbWJpZSBjb250ZXh0CisJCQkgKi8KKwkJCURQUklOVCgoImNtZCAlZCBzdGF0ZSB6b21iaWUgY2Fubm90IG9wZXJhdGUgb24gY29udGV4dFxuIiwgY21kKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2FzZSBQRk1fQ1RYX01BU0tFRDoKKwkJCS8qCisJCQkgKiBQTVUgc3RhdGUgaGFzIGJlZW4gc2F2ZWQgdG8gc29mdHdhcmUgZXZlbiB0aG91Z2gKKwkJCSAqIHRoZSB0aHJlYWQgbWF5IHN0aWxsIGJlIHJ1bm5pbmcuCisJCQkgKi8KKwkJCWlmIChjbWQgIT0gUEZNX1VOTE9BRF9DT05URVhUKSByZXR1cm4gMDsKIAl9CiAKIAkvKgpAQCAtNDk5NiwxMyArNTAwOSwyMSBAQAogfQogCiBzdGF0aWMgaW50IHBmbV9vdmZsX25vdGlmeV91c2VyKHBmbV9jb250ZXh0X3QgKmN0eCwgdW5zaWduZWQgbG9uZyBvdmZsX3BtZHMpOwotCisgLyoKKyAgKiBwZm1faGFuZGxlX3dvcmsoKSBjYW4gYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkCisgICogKFRJRl9ORUVEX1JFU0NIRUQpIG9yIGRpc2FibGVkLiBUaGUgZG93bl9pbnRlcnJ1cHRpYmxlCisgICogY2FsbCBtYXkgc2xlZXAsIHRoZXJlZm9yZSB3ZSBtdXN0IHJlLWVuYWJsZSBpbnRlcnJ1cHRzCisgICogdG8gYXZvaWQgZGVhZGxvY2tzLiBJdCBpcyBzYWZlIHRvIGRvIHNvIGJlY2F1c2UgdGhpcyBmdW5jdGlvbgorICAqIGlzIGNhbGxlZCBPTkxZIHdoZW4gcmV0dXJuaW5nIHRvIHVzZXIgbGV2ZWwgKFBVU3RrPTEpLCBpbiB3aGljaCBjYXNlCisgICogdGhlcmUgaXMgbm8gcmlzayBvZiBrZXJuZWwgc3RhY2sgb3ZlcmZsb3cgZHVlIHRvIGRlZXAKKyAgKiBpbnRlcnJ1cHQgbmVzdGluZy4KKyAgKi8KIHZvaWQKIHBmbV9oYW5kbGVfd29yayh2b2lkKQogewogCXBmbV9jb250ZXh0X3QgKmN0eDsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGR1bW15X2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcgb3ZmbF9yZWdzOwogCXVuc2lnbmVkIGludCByZWFzb247CiAJaW50IHJldDsKQEAgLTUwMzksMTggKzUwNjAsMTUgQEAKIAkvL2lmIChDVFhfT1ZGTF9OT0JMT0NLKGN0eCkpIGdvdG8gc2tpcF9ibG9ja2luZzsKIAlpZiAocmVhc29uID09IFBGTV9UUkFQX1JFQVNPTl9SRVNFVCkgZ290byBza2lwX2Jsb2NraW5nOwogCisJLyoKKwkgKiByZXN0b3JlIGludGVycnVwdCBtYXNrIHRvIHdoYXQgaXQgd2FzIG9uIGVudHJ5LgorCSAqIENvdWxkIGJlIGVuYWJsZWQvZGlhc2JsZWQuCisJICovCiAJVU5QUk9URUNUX0NUWChjdHgsIGZsYWdzKTsKIAotCSAvKgotCSAgKiBwZm1faGFuZGxlX3dvcmsoKSBpcyBjdXJyZW50bHkgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KLQkgICogVGhlIGRvd25faW50ZXJydXB0aWJsZSBjYWxsIG1heSBzbGVlcCwgdGhlcmVmb3JlIHdlCi0JICAqIG11c3QgcmUtZW5hYmxlIGludGVycnVwdHMgdG8gYXZvaWQgZGVhZGxvY2tzLiBJdCBpcwotCSAgKiBzYWZlIHRvIGRvIHNvIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgT05MWQotCSAgKiB3aGVuIHJldHVybmluZyB0byB1c2VyIGxldmVsIChQVVN0az0xKSwgaW4gd2hpY2ggY2FzZQotCSAgKiB0aGVyZSBpcyBubyByaXNrIG9mIGtlcm5lbCBzdGFjayBvdmVyZmxvdyBkdWUgdG8gZGVlcAotCSAgKiBpbnRlcnJ1cHQgbmVzdGluZy4KLQkgICovCi0JQlVHX09OKGZsYWdzICYgSUE2NF9QU1JfSSk7CisJLyoKKwkgKiBmb3JjZSBpbnRlcnJ1cHQgZW5hYmxlIGJlY2F1c2Ugb2YgZG93bl9pbnRlcnJ1cHRpYmxlKCkKKwkgKi8KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAlEUFJJTlQoKCJiZWZvcmUgYmxvY2sgc2xlZXBpbmdcbiIpKTsKQEAgLTUwNjQsMTIgKzUwODIsMTIgQEAKIAlEUFJJTlQoKCJhZnRlciBibG9jayBzbGVlcGluZyByZXQ9JWRcbiIsIHJldCkpOwogCiAJLyoKLQkgKiBkaXNhYmxlIGludGVycnVwdHMgdG8gcmVzdG9yZSBzdGF0ZSB3ZSBoYWQgdXBvbiBlbnRlcmluZwotCSAqIHRoaXMgZnVuY3Rpb24KKwkgKiBsb2NrIGNvbnRleHQgYW5kIG1hc2sgaW50ZXJydXB0cyBhZ2FpbgorCSAqIFdlIHNhdmUgZmxhZ3MgaW50byBhIGR1bW15IGJlY2F1c2Ugd2UgbWF5IGhhdmUKKwkgKiBhbHRlcmVkIGludGVycnVwdHMgbWFzayBjb21wYXJlZCB0byBlbnRyeSBpbiB0aGlzCisJICogZnVuY3Rpb24uCiAJICovCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCVBST1RFQ1RfQ1RYKGN0eCwgZmxhZ3MpOworCVBST1RFQ1RfQ1RYKGN0eCwgZHVtbXlfZmxhZ3MpOwogCiAJLyoKIAkgKiB3ZSBuZWVkIHRvIHJlYWQgdGhlIG92ZmxfcmVncyBvbmx5IGFmdGVyIHdha2UtdXAKQEAgLTUwOTUsNyArNTExMyw5IEBACiAJY3R4LT5jdHhfb3ZmbF9yZWdzWzBdID0gMFVMOwogCiBub3RoaW5nX3RvX2RvOgotCisJLyoKKwkgKiByZXN0b3JlIGZsYWdzIGFzIHRoZXkgd2VyZSB1cG9uIGVudHJ5CisJICovCiAJVU5QUk9URUNUX0NUWChjdHgsIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uX2RlZmF1bHRfc21wbC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uX2RlZmF1bHRfc21wbC5jCmluZGV4IDk2NWQyOTAuLjM0NDk0MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbl9kZWZhdWx0X3NtcGwuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb25fZGVmYXVsdF9zbXBsLmMKQEAgLTIwLDI0ICsyMCwxNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJwZXJmbW9uIGRlZmF1bHQgc2FtcGxpbmcgZm9ybWF0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLU1PRFVMRV9QQVJNKGRlYnVnLCAiaSIpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIik7Ci0KLU1PRFVMRV9QQVJNKGRlYnVnX292ZmwsICJpIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnX292ZmwsICJkZWJ1ZyBvdmZsIik7Ci0KLQogI2RlZmluZSBERUZBVUxUX0RFQlVHIDEKIAogI2lmZGVmIERFRkFVTFRfREVCVUcKICNkZWZpbmUgRFBSSU5UKGEpIFwKIAlkbyB7IFwKLQkJaWYgKHVubGlrZWx5KGRlYnVnID4wKSkgeyBwcmludGsoIiVzLiVkOiBDUFUlZCAiLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBzbXBfcHJvY2Vzc29yX2lkKCkpOyBwcmludGsgYTsgfSBcCisJCWlmICh1bmxpa2VseShwZm1fc3lzY3RsLmRlYnVnID4wKSkgeyBwcmludGsoIiVzLiVkOiBDUFUlZCAiLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBzbXBfcHJvY2Vzc29yX2lkKCkpOyBwcmludGsgYTsgfSBcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBEUFJJTlRfb3ZmbChhKSBcCiAJZG8geyBcCi0JCWlmICh1bmxpa2VseShkZWJ1Z19vdmZsID4wKSkgeyBwcmludGsoIiVzLiVkOiBDUFUlZCAiLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBzbXBfcHJvY2Vzc29yX2lkKCkpOyBwcmludGsgYTsgfSBcCisJCWlmICh1bmxpa2VseShwZm1fc3lzY3RsLmRlYnVnID4gMCAmJiBwZm1fc3lzY3RsLmRlYnVnX292ZmwgPjApKSB7IHByaW50aygiJXMuJWQ6IENQVSVkICIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIHNtcF9wcm9jZXNzb3JfaWQoKSk7IHByaW50ayBhOyB9IFwKIAl9IHdoaWxlICgwKQogCiAjZWxzZQpAQCAtNDUsOCArMzgsNiBAQAogI2RlZmluZSBEUFJJTlRfb3ZmbChhKQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZGVidWcsIGRlYnVnX292Zmw7Ci0KIHN0YXRpYyBpbnQKIGRlZmF1bHRfdmFsaWRhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBjcHUsIHZvaWQgKmRhdGEpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDkxMjkzMzguLmViYjcxZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAzIEhld2xldHQtUGFja2FyZCBDbwogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICogMDQvMTEvMTcgQXNob2sgUmFqCTxhc2hvay5yYWpAaW50ZWwuY29tPiBBZGRlZCBDUFUgSG90cGx1ZyBTdXBwb3J0CiAgKi8KICNkZWZpbmUgX19LRVJORUxfU1lTQ0FMTFNfXwkvKiBzZWUgPGFzbS91bmlzdGQuaD4gKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTQ5LDcgKzUwLDcgQEAKICNpbmNsdWRlICJzaWdmcmFtZS5oIgogCiB2b2lkICgqaWE2NF9tYXJrX2lkbGUpKGludCk7Ci1zdGF0aWMgY3B1bWFza190IGNwdV9pZGxlX21hcDsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGNwdV9pZGxlX3N0YXRlKTsKIAogdW5zaWduZWQgbG9uZyBib290X29wdGlvbl9pZGxlX292ZXJyaWRlID0gMDsKIEVYUE9SVF9TWU1CT0woYm9vdF9vcHRpb25faWRsZV9vdmVycmlkZSk7CkBAIC0xNzIsNyArMTczLDkgQEAKIAkJaWE2NF9kb19zaWduYWwob2xkc2V0LCBzY3IsIGluX3N5c2NhbGwpOwogfQogCi1zdGF0aWMgaW50IHBhbF9oYWx0ID0gMTsKK3N0YXRpYyBpbnQgcGFsX2hhbHQgICAgICAgID0gMTsKK3N0YXRpYyBpbnQgY2FuX2RvX3BhbF9oYWx0ID0gMTsKKwogc3RhdGljIGludCBfX2luaXQgbm9oYWx0X3NldHVwKGNoYXIgKiBzdHIpCiB7CiAJcGFsX2hhbHQgPSAwOwpAQCAtMTgwLDE2ICsxODMsMjAgQEAKIH0KIF9fc2V0dXAoIm5vaGFsdCIsIG5vaGFsdF9zZXR1cCk7CiAKK3ZvaWQKK3VwZGF0ZV9wYWxfaGFsdF9zdGF0dXMoaW50IHN0YXR1cykKK3sKKwljYW5fZG9fcGFsX2hhbHQgPSBwYWxfaGFsdCAmJiBzdGF0dXM7Cit9CisKIC8qCiAgKiBXZSB1c2UgdGhpcyBpZiB3ZSBkb24ndCBoYXZlIGFueSBiZXR0ZXIgaWRsZSByb3V0aW5lLi4KICAqLwogdm9pZAogZGVmYXVsdF9pZGxlICh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgcG11X2FjdGl2ZSA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19QU1IpICYgKElBNjRfUFNSX1BQIHwgSUE2NF9QU1JfVVApOwotCiAJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKLQkJaWYgKHBhbF9oYWx0ICYmICFwbXVfYWN0aXZlKQorCQlpZiAoY2FuX2RvX3BhbF9oYWx0KQogCQkJc2FmZV9oYWx0KCk7CiAJCWVsc2UKIAkJCWNwdV9yZWxheCgpOwpAQCAtMjAwLDI3ICsyMDcsMjAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbGF5X2RlYWQodm9pZCkKIHsKIAlleHRlcm4gdm9pZCBpYTY0X2NwdV9sb2NhbF90aWNrICh2b2lkKTsKKwl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKIAkvKiBBY2sgaXQgKi8KIAlfX2dldF9jcHVfdmFyKGNwdV9zdGF0ZSkgPSBDUFVfREVBRDsKIAotCS8qIFdlIHNob3VsZG4ndCBoYXZlIHRvIGRpc2FibGUgaW50ZXJydXB0cyB3aGlsZSBkZWFkLCBidXQKLQkgKiBzb21lIGludGVycnVwdHMganVzdCBkb24ndCBzZWVtIHRvIGdvIGF3YXksIGFuZCB0aGlzIG1ha2VzCi0JICogaXQgIndvcmsiIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAqLwogCW1heF94dHAoKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCS8qIERlYXRoIGxvb3AgKi8KLQl3aGlsZSAoX19nZXRfY3B1X3ZhcihjcHVfc3RhdGUpICE9IENQVV9VUF9QUkVQQVJFKQotCQljcHVfcmVsYXgoKTsKLQorCWlkbGVfdGFza19leGl0KCk7CisJaWE2NF9qdW1wX3RvX3NhbCgmc2FsX2Jvb3RfcmVuZGV6X3N0YXRlW3RoaXNfY3B1XSk7CiAJLyoKLQkgKiBFbmFibGUgdGltZXIgaW50ZXJydXB0cyBmcm9tIG5vdyBvbgotCSAqIE5vdCByZXF1aXJlZCBpZiB3ZSBwdXQgcHJvY2Vzc29yIGluIFNBTF9CT09UX1JFTkRFWiBtb2RlLgorCSAqIFRoZSBhYm92ZSBpcyBhIHBvaW50IG9mIG5vLXJldHVybiwgdGhlIHByb2Nlc3NvciBpcworCSAqIGV4cGVjdGVkIHRvIGJlIGluIFNBTCBsb29wIG5vdy4KIAkgKi8KLQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7Ci0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKLQl3bWIoKTsKLQlpYTY0X2NwdV9sb2NhbF90aWNrICgpOwotCWxvY2FsX2lycV9lbmFibGUoKTsKKwlCVUcoKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcGxheV9kZWFkKHZvaWQpCkBAIC0yMjksMjAgKzIyOSwzMSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCi0KIHZvaWQgY3B1X2lkbGVfd2FpdCh2b2lkKQogewotICAgICAgICBpbnQgY3B1OwotICAgICAgICBjcHVtYXNrX3QgbWFwOworCXVuc2lnbmVkIGludCBjcHUsIHRoaXNfY3B1ID0gZ2V0X2NwdSgpOworCWNwdW1hc2tfdCBtYXA7CiAKLSAgICAgICAgZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0gICAgICAgICAgICAgICAgY3B1X3NldChjcHUsIGNwdV9pZGxlX21hcCk7CisJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdSh0aGlzX2NwdSkpOworCXB1dF9jcHUoKTsKIAotICAgICAgICB3bWIoKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIHNzbGVlcCgxKTsKLSAgICAgICAgICAgICAgICBjcHVzX2FuZChtYXAsIGNwdV9pZGxlX21hcCwgY3B1X29ubGluZV9tYXApOwotICAgICAgICB9IHdoaWxlICghY3B1c19lbXB0eShtYXApKTsKKwljcHVzX2NsZWFyKG1hcCk7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJcGVyX2NwdShjcHVfaWRsZV9zdGF0ZSwgY3B1KSA9IDE7CisJCWNwdV9zZXQoY3B1LCBtYXApOworCX0KKworCV9fZ2V0X2NwdV92YXIoY3B1X2lkbGVfc3RhdGUpID0gMDsKKworCXdtYigpOworCWRvIHsKKwkJc3NsZWVwKDEpOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQkJaWYgKGNwdV9pc3NldChjcHUsIG1hcCkgJiYgIXBlcl9jcHUoY3B1X2lkbGVfc3RhdGUsIGNwdSkpCisJCQkJY3B1X2NsZWFyKGNwdSwgbWFwKTsKKwkJfQorCQljcHVzX2FuZChtYXAsIG1hcCwgY3B1X29ubGluZV9tYXApOworCX0gd2hpbGUgKCFjcHVzX2VtcHR5KG1hcCkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3B1X2lkbGVfd2FpdCk7CiAKQEAgLTI1MCw3ICsyNjEsNiBAQAogY3B1X2lkbGUgKHZvaWQpCiB7CiAJdm9pZCAoKm1hcmtfaWRsZSkoaW50KSA9IGlhNjRfbWFya19pZGxlOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwogCXdoaWxlICgxKSB7CkBAIC0yNjEsMTIgKzI3MSwxMyBAQAogCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CiAJCQl2b2lkICgqaWRsZSkodm9pZCk7CiAKKwkJCWlmIChfX2dldF9jcHVfdmFyKGNwdV9pZGxlX3N0YXRlKSkKKwkJCQlfX2dldF9jcHVfdmFyKGNwdV9pZGxlX3N0YXRlKSA9IDA7CisKKwkJCXJtYigpOwogCQkJaWYgKG1hcmtfaWRsZSkKIAkJCQkoKm1hcmtfaWRsZSkoMSk7CiAKLQkJCWlmIChjcHVfaXNzZXQoY3B1LCBjcHVfaWRsZV9tYXApKQotCQkJCWNwdV9jbGVhcihjcHUsIGNwdV9pZGxlX21hcCk7Ci0JCQlybWIoKTsKIAkJCWlkbGUgPSBwbV9pZGxlOwogCQkJaWYgKCFpZGxlKQogCQkJCWlkbGUgPSBkZWZhdWx0X2lkbGU7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCA1NTc4OWZjLi45MDc0NjRlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0xNDgxLDcgKzE0ODIsNyBAQAogCSAgICAgIGNhc2UgUFRSQUNFX0NPTlQ6CiAJCS8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWdvdG8gb3V0X3RzazsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCiAJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC0xNTIwLDcgKzE1MjEsNyBAQAogCQkvKiBsZXQgY2hpbGQgZXhlY3V0ZSBmb3Igb25lIGluc3RydWN0aW9uICovCiAJICAgICAgY2FzZSBQVFJBQ0VfU0lOR0xFQkxPQ0s6CiAJCXJldCA9IC1FSU87Ci0JCWlmIChkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJZ290byBvdXRfdHNrOwogCiAJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpAQCAtMTU5NSwyMCArMTU5NiwyNSBAQAogCQkgICAgIGxvbmcgYXJnNCwgbG9uZyBhcmc1LCBsb25nIGFyZzYsIGxvbmcgYXJnNywKIAkJICAgICBzdHJ1Y3QgcHRfcmVncyByZWdzKQogewotCWxvbmcgc3lzY2FsbDsKLQotCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkgewotCQlpZiAoSVNfSUEzMl9QUk9DRVNTKCZyZWdzKSkKLQkJCXN5c2NhbGwgPSByZWdzLnIxOwotCQllbHNlCi0JCQlzeXNjYWxsID0gcmVncy5yMTU7Ci0KLQkJYXVkaXRfc3lzY2FsbF9lbnRyeShjdXJyZW50LCBzeXNjYWxsLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTsKLQl9Ci0KLQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkKKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkgCiAJICAgICYmIChjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKIAkJc3lzY2FsbF90cmFjZSgpOworCisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKSB7CisJCWxvbmcgc3lzY2FsbDsKKwkJaW50IGFyY2g7CisKKwkJaWYgKElTX0lBMzJfUFJPQ0VTUygmcmVncykpIHsKKwkJCXN5c2NhbGwgPSByZWdzLnIxOworCQkJYXJjaCA9IEFVRElUX0FSQ0hfSTM4NjsKKwkJfSBlbHNlIHsKKwkJCXN5c2NhbGwgPSByZWdzLnIxNTsKKwkJCWFyY2ggPSBBVURJVF9BUkNIX0lBNjQ7CisJCX0KKworCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGN1cnJlbnQsIGFyY2gsIHN5c2NhbGwsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpOworCX0KKwogfQogCiAvKiAiYXNtbGlua2FnZSIgc28gdGhlIGlucHV0IGFyZ3VtZW50cyBhcmUgcHJlc2VydmVkLi4uICovCkBAIC0xNjE5LDcgKzE2MjUsNyBAQAogCQkgICAgIHN0cnVjdCBwdF9yZWdzIHJlZ3MpCiB7CiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQotCQlhdWRpdF9zeXNjYWxsX2V4aXQoY3VycmVudCwgcmVncy5yOCk7CisJCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCBBVURJVFNDX1JFU1VMVChyZWdzLnIxMCksIHJlZ3MucjgpOwogCiAJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpCiAJICAgICYmIChjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwppbmRleCBmMDU2NTBjLi5iN2U2YjRjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCkBAIC00LDEwICs0LDE1IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSwgMjAwMy0yMDA0IEhld2xldHQtUGFja2FyZCBDbwogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICoJU3RlcGhhbmUgRXJhbmlhbiA8ZXJhbmlhbkBocGwuaHAuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDAwLCBSb2hpdCBTZXRoIDxyb2hpdC5zZXRoQGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwNCBJbnRlbCBDb3JwCisgKiAJUm9oaXQgU2V0aCA8cm9oaXQuc2V0aEBpbnRlbC5jb20+CisgKiAJU3VyZXNoIFNpZGRoYSA8c3VyZXNoLmIuc2lkZGhhQGludGVsLmNvbT4KKyAqIAlHb3Jkb24gSmluIDxnb3Jkb24uamluQGludGVsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMTk5OSBWQSBMaW51eCBTeXN0ZW1zCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgV2FsdCBEcnVtbW9uZCA8ZHJ1bW1vbmRAdmFsaW51eC5jb20+CiAgKgorICogMTIvMjYvMDQgUy5TaWRkaGEsIEcuSmluLCBSLlNldGgKKyAqCQkJQWRkIG11bHRpLXRocmVhZGluZyBhbmQgbXVsdGktY29yZSBkZXRlY3Rpb24KICAqIDExLzEyLzAxIEQuTW9zYmVyZ2VyIENvbnZlcnQgZ2V0X2NwdWluZm8oKSB0byBzZXFfZmlsZSBiYXNlZCBzaG93X2NwdWluZm8oKS4KICAqIDA0LzA0LzAwIEQuTW9zYmVyZ2VyIHJlbmFtZWQgY3B1X2luaXRpYWxpemVkIHRvIGNwdV9vbmxpbmVfbWFwCiAgKiAwMy8zMS8wMCBSLlNldGgJY3B1X2luaXRpYWxpemVkIGFuZCBjdXJyZW50LT5wcm9jZXNzb3IgZml4ZXMKQEAgLTI5Niw2ICszMDEsMzQgQEAKICNlbmRpZgogfQogCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIHZvaWQKK2NoZWNrX2Zvcl9sb2dpY2FsX3Byb2NzICh2b2lkKQoreworCXBhbF9sb2dpY2FsX3RvX3BoeXNpY2FsX3QgaW5mbzsKKwlzNjQgc3RhdHVzOworCisJc3RhdHVzID0gaWE2NF9wYWxfbG9naWNhbF90b19waHlzKDAsICZpbmZvKTsKKwlpZiAoc3RhdHVzID09IC0xKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk5vIGxvZ2ljYWwgdG8gcGh5c2ljYWwgcHJvY2Vzc29yIG1hcHBpbmcgIgorCQkgICAgICAgImF2YWlsYWJsZVxuIik7CisJCXJldHVybjsKKwl9CisJaWYgKHN0YXR1cykgeworCQlwcmludGsoS0VSTl9FUlIgImlhNjRfcGFsX2xvZ2ljYWxfdG9fcGh5cyBmYWlsZWQgd2l0aCAlbGRcbiIsCisJCSAgICAgICBzdGF0dXMpOworCQlyZXR1cm47CisJfQorCS8qCisJICogVG90YWwgbnVtYmVyIG9mIHNpYmxpbmdzIHRoYXQgQlNQIGhhcy4gIFRob3VnaCBub3QgYWxsIG9mIHRoZW0gCisJICogbWF5IGhhdmUgYm9vdGVkIHN1Y2Nlc3NmdWxseS4gVGhlIGNvcnJlY3QgbnVtYmVyIG9mIHNpYmxpbmdzIAorCSAqIGJvb3RlZCBpcyBpbiBpbmZvLm92ZXJ2aWV3X251bV9sb2cuCisJICovCisJc21wX251bV9zaWJsaW5ncyA9IGluZm8ub3ZlcnZpZXdfdHBjOworCXNtcF9udW1fY3B1Y29yZXMgPSBpbmZvLm92ZXJ2aWV3X2NwcDsKK30KKyNlbmRpZgorCiB2b2lkIF9faW5pdAogc2V0dXBfYXJjaCAoY2hhciAqKmNtZGxpbmVfcCkKIHsKQEAgLTM1Niw2ICszODksMTkgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAljcHVfcGh5c2ljYWxfaWQoMCkgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWNwdV9zZXQoMCwgY3B1X3NpYmxpbmdfbWFwWzBdKTsKKwljcHVfc2V0KDAsIGNwdV9jb3JlX21hcFswXSk7CisKKwljaGVja19mb3JfbG9naWNhbF9wcm9jcygpOworCWlmIChzbXBfbnVtX2NwdWNvcmVzID4gMSkKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgImNwdSBwYWNrYWdlIGlzIE11bHRpLUNvcmUgY2FwYWJsZTogbnVtYmVyIG9mIGNvcmVzPSVkXG4iLAorCQkgICAgICAgc21wX251bV9jcHVjb3Jlcyk7CisJaWYgKHNtcF9udW1fc2libGluZ3MgPiAxKQorCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiY3B1IHBhY2thZ2UgaXMgTXVsdGktVGhyZWFkaW5nIGNhcGFibGU6IG51bWJlciBvZiBzaWJsaW5ncz0lZFxuIiwKKwkJICAgICAgIHNtcF9udW1fc2libGluZ3MpOwogI2VuZGlmCiAKIAljcHVfaW5pdCgpOwkvKiBpbml0aWFsaXplIHRoZSBib290c3RyYXAgQ1BVICovCkBAIC00NTksMTIgKzUwNSwyMyBAQAogCQkgICAiY3B1IHJlZ3MgICA6ICV1XG4iCiAJCSAgICJjcHUgTUh6ICAgIDogJWx1LiUwNmx1XG4iCiAJCSAgICJpdGMgTUh6ICAgIDogJWx1LiUwNmx1XG4iCi0JCSAgICJCb2dvTUlQUyAgIDogJWx1LiUwMmx1XG5cbiIsCisJCSAgICJCb2dvTUlQUyAgIDogJWx1LiUwMmx1XG4iLAogCQkgICBjcHVudW0sIGMtPnZlbmRvciwgZmFtaWx5LCBjLT5tb2RlbCwgYy0+cmV2aXNpb24sIGMtPmFyY2hyZXYsCiAJCSAgIGZlYXR1cmVzLCBjLT5wcG4sIGMtPm51bWJlciwKIAkJICAgYy0+cHJvY19mcmVxIC8gMTAwMDAwMCwgYy0+cHJvY19mcmVxICUgMTAwMDAwMCwKIAkJICAgYy0+aXRjX2ZyZXEgLyAxMDAwMDAwLCBjLT5pdGNfZnJlcSAlIDEwMDAwMDAsCiAJCSAgIGxwaipIWi81MDAwMDAsIChscGoqSFovNTAwMCkgJSAxMDApOworI2lmZGVmIENPTkZJR19TTVAKKwlzZXFfcHJpbnRmKG0sICJzaWJsaW5ncyAgIDogJXVcbiIsIGMtPm51bV9sb2cpOworCWlmIChjLT50aHJlYWRzX3Blcl9jb3JlID4gMSB8fCBjLT5jb3Jlc19wZXJfc29ja2V0ID4gMSkKKwkJc2VxX3ByaW50ZihtLAorCQkgICAJICAgInBoeXNpY2FsIGlkOiAldVxuIgorCQkgICAJICAgImNvcmUgaWQgICAgOiAldVxuIgorCQkgICAJICAgInRocmVhZCBpZCAgOiAldVxuIiwKKwkJICAgCSAgIGMtPnNvY2tldF9pZCwgYy0+Y29yZV9pZCwgYy0+dGhyZWFkX2lkKTsKKyNlbmRpZgorCXNlcV9wcmludGYobSwiXG4iKTsKKwogCXJldHVybiAwOwogfQogCkBAIC01MzMsNiArNTkwLDE0IEBACiAJbWVtY3B5KGMtPnZlbmRvciwgY3B1aWQuZmllbGQudmVuZG9yLCAxNik7CiAjaWZkZWYgQ09ORklHX1NNUAogCWMtPmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qIGJlbG93IGRlZmF1bHQgdmFsdWVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4gIGJ5IGlkZW50aWZ5X3NpYmxpbmdzKCkgCisJICogZm9yIE11bHRpLVRocmVhZGluZy9NdWx0aS1Db3JlIGNhcGFibGUgY3B1J3MKKwkgKi8KKwljLT50aHJlYWRzX3Blcl9jb3JlID0gYy0+Y29yZXNfcGVyX3NvY2tldCA9IGMtPm51bV9sb2cgPSAxOworCWMtPnNvY2tldF9pZCA9IC0xOworCisJaWRlbnRpZnlfc2libGluZ3MoYyk7CiAjZW5kaWYKIAljLT5wcG4gPSBjcHVpZC5maWVsZC5wcG47CiAJYy0+bnVtYmVyID0gY3B1aWQuZmllbGQubnVtYmVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNjg5MWQ4Ni4uNDk5YjdlNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCkBAIC0yMjQsNyArMjI0LDggQEAKIAkgKiBjb3VsZCBiZSBjb3JydXB0ZWQuCiAJICovCiAJcmV0dmFsID0gKGxvbmcpICZpYTY0X2xlYXZlX2tlcm5lbDsKLQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpCisJICAgIHx8IHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfQVVESVQpKQogCQkvKgogCQkgKiBzdHJhY2UgZXhwZWN0cyB0byBiZSBub3RpZmllZCBhZnRlciBzaWdyZXR1cm4gcmV0dXJucyBldmVuIHRob3VnaCB0aGUKIAkJICogY29udGV4dCB0byB3aGljaCB3ZSByZXR1cm4gbWF5IG5vdCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgc3lzY2FsbC4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKaW5kZXggNTMxOGYwYy4uMGQ1ZWU1NyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKQEAgLTEsMTQgKzEsMjUgQEAKIC8qCiAgKiBTTVAgYm9vdC1yZWxhdGVkIHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMyBIZXdsZXR0LVBhY2thcmQgQ28KKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAzLCAyMDA1IEhld2xldHQtUGFja2FyZCBDbwogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA0LTIwMDUgSW50ZWwgQ29ycAorICogCVJvaGl0IFNldGggPHJvaGl0LnNldGhAaW50ZWwuY29tPgorICogCVN1cmVzaCBTaWRkaGEgPHN1cmVzaC5iLnNpZGRoYUBpbnRlbC5jb20+CisgKiAJR29yZG9uIEppbiA8Z29yZG9uLmppbkBpbnRlbC5jb20+CisgKglBc2hvayBSYWogIDxhc2hvay5yYWpAaW50ZWwuY29tPgogICoKICAqIDAxLzA1LzE2IFJvaGl0IFNldGggPHJvaGl0LnNldGhAaW50ZWwuY29tPglNb3ZlZCBTTVAgYm9vdGluZyBmdW5jdGlvbnMgZnJvbSBzbXAuYyB0byBoZXJlLgogICogMDEvMDQvMjcgRGF2aWQgTW9zYmVyZ2VyIDxkYXZpZG1AaHBsLmhwLmNvbT4JQWRkZWQgSVRDIHN5bmNoaW5nIGNvZGUuCiAgKiAwMi8wNy8zMSBEYXZpZCBNb3NiZXJnZXIgPGRhdmlkbUBocGwuaHAuY29tPglTd2l0Y2ggb3ZlciB0byBob3RwbHVnLUNQVSBib290LXNlcXVlbmNlLgogICoJCQkJCQlzbXBfYm9vdF9jcHVzKCkvc21wX2NvbW1lbmNlKCkgaXMgcmVwbGFjZWQgYnkKICAqCQkJCQkJc21wX3ByZXBhcmVfY3B1cygpL19fY3B1X3VwKCkvc21wX2NwdXNfZG9uZSgpLgorICogMDQvMDYvMjEgQXNob2sgUmFqCQk8YXNob2sucmFqQGludGVsLmNvbT4gQWRkZWQgQ1BVIEhvdHBsdWcgU3VwcG9ydAorICogMDQvMTIvMjYgSmluIEdvcmRvbiA8Z29yZG9uLmppbkBpbnRlbC5jb20+CisgKiAwNC8xMi8yNiBSb2hpdCBTZXRoIDxyb2hpdC5zZXRoQGludGVsLmNvbT4KKyAqCQkJCQkJQWRkIG11bHRpLXRocmVhZGluZyBhbmQgbXVsdGktY29yZSBkZXRlY3Rpb24KKyAqIDA1LzAxLzMwIFN1cmVzaCBTaWRkaGEgPHN1cmVzaC5iLnNpZGRoYUBpbnRlbC5jb20+CisgKgkJCQkJCVNldHVwIGNwdV9zaWJsaW5nX21hcCBhbmQgY3B1X2NvcmVfbWFwCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIApAQCAtNTgsNiArNjksMzcgQEAKICNkZWZpbmUgRHByaW50ayh4Li4uKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKy8qCisgKiBTdG9yZSBhbGwgaWRsZSB0aHJlYWRzLCB0aGlzIGNhbiBiZSByZXVzZWQgaW5zdGVhZCBvZiBjcmVhdGluZworICogYSBuZXcgdGhyZWFkLiBBbHNvIGF2b2lkcyBjb21wbGljYXRlZCB0aHJlYWQgZGVzdHJveSBmdW5jdGlvbmFsaXR5CisgKiBmb3IgaWRsZSB0aHJlYWRzLgorICovCitzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGVfdGhyZWFkX2FycmF5W05SX0NQVVNdOworCisvKgorICogR2xvYmFsIGFycmF5IGFsbG9jYXRlZCBmb3IgTlJfQ1BVUyBhdCBib290IHRpbWUKKyAqLworc3RydWN0IHNhbF90b19vc19ib290IHNhbF9ib290X3JlbmRlel9zdGF0ZVtOUl9DUFVTXTsKKworLyoKKyAqIHN0YXJ0X2FwIGluIGhlYWQuUyB1c2VzIHRoaXMgdG8gc3RvcmUgY3VycmVudCBib290aW5nIGNwdQorICogaW5mby4KKyAqLworc3RydWN0IHNhbF90b19vc19ib290ICpzYWxfc3RhdGVfZm9yX2Jvb3RpbmdfY3B1ID0gJnNhbF9ib290X3JlbmRlel9zdGF0ZVswXTsKKworI2RlZmluZSBzZXRfYnJlbmRlel9hcmVhKHgpIChzYWxfc3RhdGVfZm9yX2Jvb3RpbmdfY3B1ID0gJnNhbF9ib290X3JlbmRlel9zdGF0ZVsoeCldKTsKKworI2RlZmluZSBnZXRfaWRsZV9mb3JfY3B1KHgpCQkoaWRsZV90aHJlYWRfYXJyYXlbKHgpXSkKKyNkZWZpbmUgc2V0X2lkbGVfZm9yX2NwdSh4LHApCShpZGxlX3RocmVhZF9hcnJheVsoeCldID0gKHApKQorCisjZWxzZQorCisjZGVmaW5lIGdldF9pZGxlX2Zvcl9jcHUoeCkJCShOVUxMKQorI2RlZmluZSBzZXRfaWRsZV9mb3JfY3B1KHgscCkKKyNkZWZpbmUgc2V0X2JyZW5kZXpfYXJlYSh4KQorI2VuZGlmCisKIAogLyoKICAqIElUQyBzeW5jaHJvbml6YXRpb24gcmVsYXRlZCBzdHVmZjoKQEAgLTkwLDYgKzEzMiwxMSBAQAogY3B1bWFza190IGNwdV9wb3NzaWJsZV9tYXA7CiBFWFBPUlRfU1lNQk9MKGNwdV9wb3NzaWJsZV9tYXApOwogCitjcHVtYXNrX3QgY3B1X2NvcmVfbWFwW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitjcHVtYXNrX3QgY3B1X3NpYmxpbmdfbWFwW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitpbnQgc21wX251bV9zaWJsaW5ncyA9IDE7CitpbnQgc21wX251bV9jcHVjb3JlcyA9IDE7CisKIC8qIHdoaWNoIGxvZ2ljYWwgQ1BVIG51bWJlciBtYXBzIHRvIHdoaWNoIENQVSAocGh5c2ljYWwgQVBJQyBJRCkgKi8KIHZvbGF0aWxlIGludCBpYTY0X2NwdV90b19zYXBpY2lkW05SX0NQVVNdOwogRVhQT1JUX1NZTUJPTChpYTY0X2NwdV90b19zYXBpY2lkKTsKQEAgLTEyNCw3ICsxNzEsOCBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAl7CiAJCWZvciAoaSA9IDA7IGkgPCBOVU1fUk9VTkRTKk5VTV9JVEVSUzsgKytpKSB7Ci0JCQl3aGlsZSAoIWdvW01BU1RFUl0pOworCQkJd2hpbGUgKCFnb1tNQVNURVJdKQorCQkJCWNwdV9yZWxheCgpOwogCQkJZ29bTUFTVEVSXSA9IDA7CiAJCQlnb1tTTEFWRV0gPSBpYTY0X2dldF9pdGMoKTsKIAkJfQpAQCAtMTQ3LDcgKzE5NSw4IEBACiAJZm9yIChpID0gMDsgaSA8IE5VTV9JVEVSUzsgKytpKSB7CiAJCXQwID0gaWE2NF9nZXRfaXRjKCk7CiAJCWdvW01BU1RFUl0gPSAxOwotCQl3aGlsZSAoISh0bSA9IGdvW1NMQVZFXSkpOworCQl3aGlsZSAoISh0bSA9IGdvW1NMQVZFXSkpCisJCQljcHVfcmVsYXgoKTsKIAkJZ29bU0xBVkVdID0gMDsKIAkJdDEgPSBpYTY0X2dldF9pdGMoKTsKIApAQCAtMjI2LDcgKzI3NSw4IEBACiAJCXJldHVybjsKIAl9CiAKLQl3aGlsZSAoZ29bTUFTVEVSXSk7CS8qIHdhaXQgZm9yIG1hc3RlciB0byBiZSByZWFkeSAqLworCXdoaWxlIChnb1tNQVNURVJdKQorCQljcHVfcmVsYXgoKTsJLyogd2FpdCBmb3IgbWFzdGVyIHRvIGJlIHJlYWR5ICovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaXRjX3N5bmNfbG9jaywgZmxhZ3MpOwogCXsKQEAgLTM0NSw3ICszOTUsNiBAQAogewogCS8qIEVhcmx5IGNvbnNvbGUgbWF5IHVzZSBJL08gcG9ydHMgKi8KIAlpYTY0X3NldF9rcihJQTY0X0tSX0lPX0JBU0UsIF9fcGEoaWE2NF9pb2Jhc2UpKTsKLQogCURwcmludGsoInN0YXJ0X3NlY29uZGFyeTogc3RhcnRpbmcgQ1BVIDB4JXhcbiIsIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAllZmlfbWFwX3BhbF9jb2RlKCk7CiAJY3B1X2luaXQoKTsKQEAgLTM4NCw2ICs0MzMsMTMgQEAKIAkJLmRvbmUJPSBDT01QTEVUSU9OX0lOSVRJQUxJWkVSKGNfaWRsZS5kb25lKSwKIAl9OwogCURFQ0xBUkVfV09SSyh3b3JrLCBkb19mb3JrX2lkbGUsICZjX2lkbGUpOworCisgCWNfaWRsZS5pZGxlID0gZ2V0X2lkbGVfZm9yX2NwdShjcHUpOworIAlpZiAoY19pZGxlLmlkbGUpIHsKKwkJaW5pdF9pZGxlKGNfaWRsZS5pZGxlLCBjcHUpOworIAkJZ290byBkb19yZXN0OworCX0KKwogCS8qCiAJICogV2UgY2FuJ3QgdXNlIGtlcm5lbF90aHJlYWQgc2luY2Ugd2UgbXVzdCBhdm9pZCB0byByZXNjaGVkdWxlIHRoZSBjaGlsZC4KIAkgKi8KQEAgLTM5NiwxMCArNDUyLDE1IEBACiAKIAlpZiAoSVNfRVJSKGNfaWRsZS5pZGxlKSkKIAkJcGFuaWMoImZhaWxlZCBmb3JrIGZvciBDUFUgJWQiLCBjcHUpOworCisJc2V0X2lkbGVfZm9yX2NwdShjcHUsIGNfaWRsZS5pZGxlKTsKKworZG9fcmVzdDoKIAl0YXNrX2Zvcl9ib290aW5nX2NwdSA9IGNfaWRsZS5pZGxlOwogCiAJRHByaW50aygiU2VuZGluZyB3YWtldXAgdmVjdG9yICVsdSB0byBBUCAweCV4LzB4JXguXG4iLCBhcF93YWtldXBfdmVjdG9yLCBjcHUsIHNhcGljaWQpOwogCisJc2V0X2JyZW5kZXpfYXJlYShjcHUpOwogCXBsYXRmb3JtX3NlbmRfaXBpKGNwdSwgYXBfd2FrZXVwX3ZlY3RvciwgSUE2NF9JUElfRE1fSU5ULCAwKTsKIAogCS8qCkBAIC01NTIsMTkgKzYxMyw3MCBAQAogCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfY2FsbGluX21hcCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLWV4dGVybiB2b2lkIGZpeHVwX2lycXModm9pZCk7Ci0vKiBtdXN0IGJlIGNhbGxlZCB3aXRoIGNwdWNvbnRyb2wgbXV0ZXggaGVsZCAqLwotc3RhdGljIGludCBfX2RldmluaXQgY3B1X2VuYWJsZSh1bnNpZ25lZCBpbnQgY3B1KQotewotCXBlcl9jcHUoY3B1X3N0YXRlLGNwdSkgPSBDUFVfVVBfUFJFUEFSRTsKLQl3bWIoKTsKKy8qCisgKiBtdF9pbmZvW10gaXMgYSB0ZW1wb3Jhcnkgc3RvcmUgZm9yIGFsbCBpbmZvIHJldHVybmVkIGJ5CisgKiBQQUxfTE9HSUNBTF9UT19QSFlTSUNBTCwgdG8gYmUgY29waWVkIGludG8gY3B1aW5mb19pYTY0IHdoZW4gdGhlCisgKiBzcGVjaWZpYyBjcHUgY29tZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCV9fdTMyICAgc29ja2V0X2lkOworCV9fdTE2ICAgY29yZV9pZDsKKwlfX3UxNiAgIHRocmVhZF9pZDsKKwlfX3UxNiAgIHByb2NfZml4ZWRfYWRkcjsKKwlfX3U4ICAgIHZhbGlkOworfW10X2luZm9bTlJfQ1BVU10gX19kZXZpbml0OwogCi0Jd2hpbGUgKCFjcHVfb25saW5lKGNwdSkpCi0JCWNwdV9yZWxheCgpOwotCXJldHVybiAwOworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIGlubGluZSB2b2lkCityZW1vdmVfZnJvbV9tdGluZm8oaW50IGNwdSkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX2NwdShpKQorCQlpZiAobXRfaW5mb1tpXS52YWxpZCAmJiAgbXRfaW5mb1tpXS5zb2NrZXRfaWQgPT0KKwkJICAgIAkJCQljcHVfZGF0YShjcHUpLT5zb2NrZXRfaWQpCisJCQltdF9pbmZvW2ldLnZhbGlkID0gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitjbGVhcl9jcHVfc2libGluZ19tYXAoaW50IGNwdSkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNwdV9zaWJsaW5nX21hcFtjcHVdKQorCQljcHVfY2xlYXIoY3B1LCBjcHVfc2libGluZ19tYXBbaV0pOworCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNwdV9jb3JlX21hcFtjcHVdKQorCQljcHVfY2xlYXIoY3B1LCBjcHVfY29yZV9tYXBbaV0pOworCisJY3B1X3NpYmxpbmdfbWFwW2NwdV0gPSBjcHVfY29yZV9tYXBbY3B1XSA9IENQVV9NQVNLX05PTkU7Cit9CisKK3N0YXRpYyB2b2lkCityZW1vdmVfc2libGluZ2luZm8oaW50IGNwdSkKK3sKKwlpbnQgbGFzdCA9IDA7CisKKwlpZiAoY3B1X2RhdGEoY3B1KS0+dGhyZWFkc19wZXJfY29yZSA9PSAxICYmCisJICAgIGNwdV9kYXRhKGNwdSktPmNvcmVzX3Blcl9zb2NrZXQgPT0gMSkgeworCQljcHVfY2xlYXIoY3B1LCBjcHVfY29yZV9tYXBbY3B1XSk7CisJCWNwdV9jbGVhcihjcHUsIGNwdV9zaWJsaW5nX21hcFtjcHVdKTsKKwkJcmV0dXJuOworCX0KKworCWxhc3QgPSAoY3B1c193ZWlnaHQoY3B1X2NvcmVfbWFwW2NwdV0pID09IDEgPyAxIDogMCk7CisKKwkvKiByZW1vdmUgaXQgZnJvbSBhbGwgc2libGluZyBtYXAncyAqLworCWNsZWFyX2NwdV9zaWJsaW5nX21hcChjcHUpOworCisJLyogaWYgdGhpcyBjcHUgaXMgdGhlIGxhc3QgaW4gdGhlIGNvcmUgZ3JvdXAsIHJlbW92ZSBhbGwgaXRzIGluZm8gCisJICogZnJvbSBtdF9pbmZvIHN0cnVjdHVyZQorCSAqLworCWlmIChsYXN0KQorCQlyZW1vdmVfZnJvbV9tdGluZm8oY3B1KTsKK30KKworZXh0ZXJuIHZvaWQgZml4dXBfaXJxcyh2b2lkKTsKKy8qIG11c3QgYmUgY2FsbGVkIHdpdGggY3B1Y29udHJvbCBtdXRleCBoZWxkICovCiBpbnQgX19jcHVfZGlzYWJsZSh2b2lkKQogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC01NzUsOSArNjg3LDEwIEBACiAJaWYgKGNwdSA9PSAwKQogCQlyZXR1cm4gLUVCVVNZOwogCisJcmVtb3ZlX3NpYmxpbmdpbmZvKGNwdSk7CiAJZml4dXBfaXJxcygpOwogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKLQlwcmludGsgKCJEaXNhYmxlZCBjcHUgJXVcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJY3B1X2NsZWFyKGNwdSwgY3B1X2NhbGxpbl9tYXApOwogCXJldHVybiAwOwogfQogCkBAIC01ODksMTIgKzcwMiw3IEBACiAJCS8qIFRoZXkgYWNrIHRoaXMgaW4gcGxheV9kZWFkIGJ5IHNldHRpbmcgQ1BVX0RFQUQgKi8KIAkJaWYgKHBlcl9jcHUoY3B1X3N0YXRlLCBjcHUpID09IENQVV9ERUFEKQogCQl7Ci0JCQkvKgotCQkJICogVEJEOiBFbmFibGUgdGhpcyB3aGVuIHBoeXNpY2FsIHJlbW92YWwKLQkJCSAqIG9yIHdoZW4gd2UgcHV0IHRoZSBwcm9jZXNzb3IgaXMgcHV0IGluCi0JCQkgKiBTQUxfQk9PVF9SRU5ERVogbW9kZQotCQkJICogY3B1X2NsZWFyKGNwdSwgY3B1X2NhbGxpbl9tYXApOwotCQkJICovCisJCQlwcmludGsgKCJDUFUgJWQgaXMgbm93IG9mZmxpbmVcbiIsIGNwdSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJbXNsZWVwKDEwMCk7CkBAIC02MDIsMTEgKzcxMCw2IEBACiAgCXByaW50ayhLRVJOX0VSUiAiQ1BVICV1IGRpZG4ndCBkaWUuLi5cbiIsIGNwdSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0hPVFBMVUdfQ1BVICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBjcHVfZW5hYmxlKHVuc2lnbmVkIGludCBjcHUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIGludCBfX2NwdV9kaXNhYmxlKHZvaWQpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CkBAIC02MzcsNiArNzQwLDIzIEBACiAJICAgICAgIChpbnQpbnVtX29ubGluZV9jcHVzKCksIGJvZ29zdW0vKDUwMDAwMC9IWiksIChib2dvc3VtLyg1MDAwL0haKSklMTAwKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9fZGV2aW5pdAorc2V0X2NwdV9zaWJsaW5nX21hcChpbnQgY3B1KQoreworCWludCBpOworCisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCWlmICgoY3B1X2RhdGEoY3B1KS0+c29ja2V0X2lkID09IGNwdV9kYXRhKGkpLT5zb2NrZXRfaWQpKSB7CisJCQljcHVfc2V0KGksIGNwdV9jb3JlX21hcFtjcHVdKTsKKwkJCWNwdV9zZXQoY3B1LCBjcHVfY29yZV9tYXBbaV0pOworCQkJaWYgKGNwdV9kYXRhKGNwdSktPmNvcmVfaWQgPT0gY3B1X2RhdGEoaSktPmNvcmVfaWQpIHsKKwkJCQljcHVfc2V0KGksIGNwdV9zaWJsaW5nX21hcFtjcHVdKTsKKwkJCQljcHVfc2V0KGNwdSwgY3B1X3NpYmxpbmdfbWFwW2ldKTsKKwkJCX0KKwkJfQorCX0KK30KKwogaW50IF9fZGV2aW5pdAogX19jcHVfdXAgKHVuc2lnbmVkIGludCBjcHUpCiB7CkBAIC02NDgsMjEgKzc2OCwyNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCi0JICogQWxyZWFkeSBib290ZWQuLiBqdXN0IGVuYWJsZSBhbmQgZ2V0IG91dGEgaWRsZSBsb29sCisJICogQWxyZWFkeSBib290ZWQgY3B1PyBub3QgdmFsaWQgYW55bW9yZSBzaW5jZSB3ZSBkb250CisJICogZG8gaWRsZSBsb29wIHRpZ2h0c3BpbiBhbnltb3JlLgogCSAqLwogCWlmIChjcHVfaXNzZXQoY3B1LCBjcHVfY2FsbGluX21hcCkpCi0JewotCQljcHVfZW5hYmxlKGNwdSk7Ci0JCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJd2hpbGUgKCFjcHVfaXNzZXQoY3B1LCBjcHVfb25saW5lX21hcCkpCi0JCQltYigpOwotCQlyZXR1cm4gMDsKLQl9CisJCXJldHVybiAtRUlOVkFMOworCiAJLyogUHJvY2Vzc29yIGdvZXMgdG8gc3RhcnRfc2Vjb25kYXJ5KCksIHNldHMgb25saW5lIGZsYWcgKi8KIAlyZXQgPSBkb19ib290X2NwdShzYXBpY2lkLCBjcHUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCisJaWYgKGNwdV9kYXRhKGNwdSktPnRocmVhZHNfcGVyX2NvcmUgPT0gMSAmJgorCSAgICBjcHVfZGF0YShjcHUpLT5jb3Jlc19wZXJfc29ja2V0ID09IDEpIHsKKwkJY3B1X3NldChjcHUsIGNwdV9zaWJsaW5nX21hcFtjcHVdKTsKKwkJY3B1X3NldChjcHUsIGNwdV9jb3JlX21hcFtjcHVdKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2V0X2NwdV9zaWJsaW5nX21hcChjcHUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY5MCwzICs4MTUsMTA2IEBACiAJCSAgICAgICBpYTY0X3NhbF9zdHJlcnJvcihzYWxfcmV0KSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IF9fZGV2aW5pdAorY2hlY2tfZm9yX210aW5mb19pbmRleCh2b2lkKQoreworCWludCBpOworCQorCWZvcl9lYWNoX2NwdShpKQorCQlpZiAoIW10X2luZm9baV0udmFsaWQpCisJCQlyZXR1cm4gaTsKKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFNlYXJjaCB0aGUgbXRfaW5mbyB0byBmaW5kIG91dCBpZiB0aGlzIHNvY2tldCdzIGNpZC90aWQgaW5mb3JtYXRpb24gaXMKKyAqIGNhY2hlZCBvciBub3QuIElmIHRoZSBzb2NrZXQgZXhpc3RzLCBmaWxsIGluIHRoZSBjb3JlX2lkIGFuZCB0aHJlYWRfaWQgCisgKiBpbiBjcHVpbmZvCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0CitjaGVja19mb3JfbmV3X3NvY2tldChfX3UxNiBsb2dpY2FsX2FkZHJlc3MsIHN0cnVjdCBjcHVpbmZvX2lhNjQgKmMpCit7CisJaW50IGk7CisJX191MzIgc2lkID0gYy0+c29ja2V0X2lkOworCisJZm9yX2VhY2hfY3B1KGkpIHsKKwkJaWYgKG10X2luZm9baV0udmFsaWQgJiYgbXRfaW5mb1tpXS5wcm9jX2ZpeGVkX2FkZHIgPT0gbG9naWNhbF9hZGRyZXNzCisJCSAgICAmJiBtdF9pbmZvW2ldLnNvY2tldF9pZCA9PSBzaWQpIHsKKwkJCWMtPmNvcmVfaWQgPSBtdF9pbmZvW2ldLmNvcmVfaWQ7CisJCQljLT50aHJlYWRfaWQgPSBtdF9pbmZvW2ldLnRocmVhZF9pZDsKKwkJCXJldHVybiAxOyAvKiBub3QgYSBuZXcgc29ja2V0ICovCisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpZGVudGlmeV9zaWJsaW5ncyhjcHUpIGdldHMgY2FsbGVkIGZyb20gaWRlbnRpZnlfY3B1LiBUaGlzIHBvcHVsYXRlcyB0aGUgCisgKiBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGxvZ2ljYWwgZXhlY3V0aW9uIHVuaXRzIGluIHBlcl9jcHVfZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgX19kZXZpbml0CitpZGVudGlmeV9zaWJsaW5ncyhzdHJ1Y3QgY3B1aW5mb19pYTY0ICpjKQoreworCXM2NCBzdGF0dXM7CisJdTE2IHBsdGlkOworCXU2NCBwcm9jX2ZpeGVkX2FkZHI7CisJaW50IGNvdW50LCBpOworCXBhbF9sb2dpY2FsX3RvX3BoeXNpY2FsX3QgaW5mbzsKKworCWlmIChzbXBfbnVtX2NwdWNvcmVzID09IDEgJiYgc21wX251bV9zaWJsaW5ncyA9PSAxKQorCQlyZXR1cm47CisKKwlpZiAoKHN0YXR1cyA9IGlhNjRfcGFsX2xvZ2ljYWxfdG9fcGh5cygwLCAmaW5mbykpICE9IFBBTF9TVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoS0VSTl9FUlIgImlhNjRfcGFsX2xvZ2ljYWxfdG9fcGh5cyBmYWlsZWQgd2l0aCAlbGRcbiIsCisJCSAgICAgICBzdGF0dXMpOworCQlyZXR1cm47CisJfQorCWlmICgoc3RhdHVzID0gaWE2NF9zYWxfcGh5c2ljYWxfaWRfaW5mbygmcGx0aWQpKSAhPSBQQUxfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpYTY0X3NhbF9wbHRpZCBmYWlsZWQgd2l0aCAlbGRcbiIsIHN0YXR1cyk7CisJCXJldHVybjsKKwl9CisJaWYgKChzdGF0dXMgPSBpYTY0X3BhbF9maXhlZF9hZGRyKCZwcm9jX2ZpeGVkX2FkZHIpKSAhPSBQQUxfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpYTY0X3BhbF9maXhlZF9hZGRyIGZhaWxlZCB3aXRoICVsZFxuIiwgc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWMtPnNvY2tldF9pZCA9ICAocGx0aWQgPDwgOCkgfCBpbmZvLm92ZXJ2aWV3X3BwaWQ7CisJYy0+Y29yZXNfcGVyX3NvY2tldCA9IGluZm8ub3ZlcnZpZXdfY3BwOworCWMtPnRocmVhZHNfcGVyX2NvcmUgPSBpbmZvLm92ZXJ2aWV3X3RwYzsKKwljb3VudCA9IGMtPm51bV9sb2cgPSBpbmZvLm92ZXJ2aWV3X251bV9sb2c7CisKKwkvKiBJZiB0aGUgdGhyZWFkIGFuZCBjb3JlIGlkIGluZm9ybWF0aW9uIGlzIGFscmVhZHkgY2FjaGVkLCB0aGVuCisJICogd2Ugd2lsbCBzaW1wbHkgdXBkYXRlIGNwdV9pbmZvIGFuZCByZXR1cm4uIE90aGVyd2lzZSwgd2Ugd2lsbAorCSAqIGRvIHRoZSBQQUwgY2FsbHMgYW5kIGNhY2hlIGNvcmUgYW5kIHRocmVhZCBpZCdzIG9mIGFsbCB0aGUgc2libGluZ3MuCisJICovCisJaWYgKGNoZWNrX2Zvcl9uZXdfc29ja2V0KHByb2NfZml4ZWRfYWRkciwgYykpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWludCBpbmRleDsKKworCQlpZiAoaSAmJiAoc3RhdHVzID0gaWE2NF9wYWxfbG9naWNhbF90b19waHlzKGksICZpbmZvKSkKKwkJCSAgIT0gUEFMX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgCXByaW50ayhLRVJOX0VSUiAiaWE2NF9wYWxfbG9naWNhbF90b19waHlzIGZhaWxlZCIKKwkJCQkJIiB3aXRoICVsZFxuIiwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAJcmV0dXJuOworCQl9CisJCWlmIChpbmZvLmxvZzJfbGEgPT0gcHJvY19maXhlZF9hZGRyKSB7CisJCQljLT5jb3JlX2lkID0gaW5mby5sb2cxX2NpZDsKKwkJCWMtPnRocmVhZF9pZCA9IGluZm8ubG9nMV90aWQ7CisJCX0KKworCQlpbmRleCA9IGNoZWNrX2Zvcl9tdGluZm9faW5kZXgoKTsKKwkJLyogV2Ugd2lsbCBub3QgZG8gdGhlIG10X2luZm8gY2FjaGluZyBvcHRpbWl6YXRpb24gaW4gdGhpcyBjYXNlLgorCQkgKi8KKwkJaWYgKGluZGV4IDwgMCkKKwkJCWNvbnRpbnVlOworCisJCW10X2luZm9baW5kZXhdLnZhbGlkID0gMTsKKwkJbXRfaW5mb1tpbmRleF0uc29ja2V0X2lkID0gYy0+c29ja2V0X2lkOworCQltdF9pbmZvW2luZGV4XS5jb3JlX2lkID0gaW5mby5sb2cxX2NpZDsKKwkJbXRfaW5mb1tpbmRleF0udGhyZWFkX2lkID0gaW5mby5sb2cxX3RpZDsKKwkJbXRfaW5mb1tpbmRleF0ucHJvY19maXhlZF9hZGRyID0gaW5mby5sb2cyX2xhOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc3lzX2lhNjQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc3lzX2lhNjQuYwppbmRleCAzYWMyMTZlLi5hOGNmNmQ4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3N5c19pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zeXNfaWE2NC5jCkBAIC05MywyMCArOTMsNiBAQAogfQogCiBhc21saW5rYWdlIHVuc2lnbmVkIGxvbmcKLWlhNjRfc2htYXQgKGludCBzaG1pZCwgdm9pZCBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcpCi17Ci0JdW5zaWduZWQgbG9uZyByYWRkcjsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gZG9fc2htYXQoc2htaWQsIHNobWFkZHIsIHNobWZsZywgJnJhZGRyKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCWZvcmNlX3N1Y2Nlc3NmdWxfc3lzY2FsbF9yZXR1cm4oKTsKLQlyZXR1cm4gcmFkZHI7Ci19Ci0KLWFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZwogaWE2NF9icmsgKHVuc2lnbmVkIGxvbmcgYnJrKQogewogCXVuc2lnbmVkIGxvbmcgcmxpbSwgcmV0dmFsLCBuZXdicmssIG9sZGJyazsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdW53aW5kLmMgYi9hcmNoL2lhNjQva2VybmVsL3Vud2luZC5jCmluZGV4IGQ0OTRmZjYuLjI3NzZhMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdW53aW5kLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC91bndpbmQuYwpAQCAtMTk0MywyMyArMTk0MywzMCBAQAogaW50CiB1bndfdW53aW5kX3RvX3VzZXIgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbykKIHsKLQl1bnNpZ25lZCBsb25nIGlwLCBzcDsKKwl1bnNpZ25lZCBsb25nIGlwLCBzcCwgcHIgPSAwOwogCiAJd2hpbGUgKHVud191bndpbmQoaW5mbykgPj0gMCkgewotCQlpZiAodW53X2dldF9ycChpbmZvLCAmaXApIDwgMCkgewotCQkJdW53X2dldF9pcChpbmZvLCAmaXApOwotCQkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBmYWlsZWQgdG8gcmVhZCByZXR1cm4gcG9pbnRlciAoaXA9MHglbHgpXG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXywgaXApOworCQl1bndfZ2V0X3NwKGluZm8sICZzcCk7CisJCWlmICgobG9uZykoKHVuc2lnbmVkIGxvbmcpaW5mby0+dGFzayArIElBNjRfU1RLX09GRlNFVCAtIHNwKQorCQkgICAgPCBJQTY0X1BUX1JFR1NfU0laRSkgeworCQkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiByYW4gb2ZmIHRoZSB0b3Agb2YgdGhlIGtlcm5lbCBzdGFja1xuIiwKKwkJCQkgICBfX0ZVTkNUSU9OX18pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHVud19pc19pbnRyX2ZyYW1lKGluZm8pICYmCisJCSAgICAocHIgJiAoMVVMIDw8IFBSRURfVVNFUl9TVEFDSykpKQorCQkJcmV0dXJuIDA7CisJCWlmICh1bndfZ2V0X3ByIChpbmZvLCAmcHIpIDwgMCkgeworCQkJdW53X2dldF9ycChpbmZvLCAmaXApOworCQkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBmYWlsZWQgdG8gcmVhZCAiCisJCQkJICAgInByZWRpY2F0ZSByZWdpc3RlciAoaXA9MHglbHgpXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgaXApOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCXVud19nZXRfc3AoaW5mbywgJnNwKTsKLQkJaWYgKHNwID49ICh1bnNpZ25lZCBsb25nKWluZm8tPnRhc2sgKyBJQTY0X1NUS19PRkZTRVQpCi0JCQlicmVhazsKLQkJaWYgKGlwIDwgRklYQUREUl9VU0VSX0VORCkKLQkJCXJldHVybiAwOwogCX0KIAl1bndfZ2V0X2lwKGluZm8sICZpcCk7Ci0JVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBmYWlsZWQgdG8gdW53aW5kIHRvIHVzZXItbGV2ZWwgKGlwPTB4JWx4KVxuIiwgX19GVU5DVElPTl9fLCBpcCk7CisJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBmYWlsZWQgdG8gdW53aW5kIHRvIHVzZXItbGV2ZWwgKGlwPTB4JWx4KVxuIiwKKwkJICAgX19GVU5DVElPTl9fLCBpcCk7CiAJcmV0dXJuIC0xOwogfQogRVhQT1JUX1NZTUJPTCh1bndfdW53aW5kX3RvX3VzZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2xpYi9mbHVzaC5TIGIvYXJjaC9pYTY0L2xpYi9mbHVzaC5TCmluZGV4IDI5YzgwMmIuLmExYWY5MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9saWIvZmx1c2guUworKysgYi9hcmNoL2lhNjQvbGliL2ZsdXNoLlMKQEAgLTEsOCArMSw4IEBACiAvKgogICogQ2FjaGUgZmx1c2hpbmcgcm91dGluZXMuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGV3bGV0dC1QYWNrYXJkIENvCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSwgMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0yNiw3ICsyNiw3IEBACiAKIAltb3YgYXIubGM9cjgKIAk7OwotLkxvb3A6CWZjIGluMAkJCQkvLyBpc3N1YWJsZSBvbiBNMCBvbmx5CisuTG9vcDoJZmMuaSBpbjAJCQkvLyBpc3N1YWJsZSBvbiBNMiBvbmx5CiAJYWRkIGluMD0zMixpbjAKIAlici5jbG9vcC5zcHRrLmZldyAuTG9vcAogCTs7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbGliL21lbWNweV9tY2suUyBiL2FyY2gvaWE2NC9saWIvbWVtY3B5X21jay5TCmluZGV4IDZmMjZlZjcuLjZmMzA4ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9saWIvbWVtY3B5X21jay5TCisrKyBiL2FyY2gvaWE2NC9saWIvbWVtY3B5X21jay5TCkBAIC03NSw2ICs3NSw3IEBACiAJbW92CWY2PWYwCiAJYnIuY29uZC5zcHRrIC5jb21tb25fY29kZQogCTs7CitFTkQobWVtY3B5KQogR0xPQkFMX0VOVFJZKF9fY29weV91c2VyKQogCS5wcm9sb2d1ZQogLy8gY2hlY2sgZGVzdCBhbGlnbm1lbnQKQEAgLTMwMCw3ICszMDEsNyBAQAogCWFkZAlzcmNfcHJlX21lbT0wLHNyYzAJLy8gcHJlZmV0Y2ggc3JjIHBvaW50ZXIKIAlhZGQJZHN0X3ByZV9tZW09MCxkc3QwCS8vIHByZWZldGNoIGRlc3QgcG9pbnRlcgogCWFuZAlzcmMwPS04LHNyYzAJCS8vIDFzdCBzcmMgcG9pbnRlcgotKHA3KQltb3YJYXIubGMgPSByMjEKKyhwNykJbW92CWFyLmxjID0gY250CiAocDgpCW1vdglhci5sYyA9IHIwCiAJOzsKIAlURVhUX0FMSUdOKDMyKQpAQCAtNTI0LDcgKzUyNSw2IEBACiAjdW5kZWYgQgogI3VuZGVmIEMKICN1bmRlZiBECi1FTkQobWVtY3B5KQogCiAvKgogICogRHVlIHRvIGxhY2sgb2YgbG9jYWwgdGFnIHN1cHBvcnQgaW4gZ2NjIDIueCBhc3NlbWJsZXIsIGl0IGlzIG5vdCBjbGVhciB3aGljaApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2xpYi9tZW1zZXQuUyBiL2FyY2gvaWE2NC9saWIvbWVtc2V0LlMKaW5kZXggYmQ4Y2Y5MC4uZjI2YzE2YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2xpYi9tZW1zZXQuUworKysgYi9hcmNoL2lhNjQvbGliL21lbXNldC5TCkBAIC01NywxMCArNTcsMTAgQEAKIHsgLm1taQogCS5wcm9sb2d1ZQogCWFsbG9jCXRtcCA9IGFyLnBmcywgMywgMCwgMCwgMAotCS5ib2R5CiAJbGZldGNoLm50MSBbZGVzdF0JCQkvLwogCS5zYXZlICAgYXIubGMsIHNhdmVfbGMKIAltb3YuaQlzYXZlX2xjID0gYXIubGMKKwkuYm9keQogfSB7IC5tbWkKIAltb3YJcmV0MCA9IGRlc3QJCQkvLyByZXR1cm4gdmFsdWUKIAljbXAubmUJcF9ueiwgcF96ciA9IHZhbHVlLCByMAkJLy8gdXNlIHN0Zi5zcGlsbCBpZiB2YWx1ZSBpcyB6ZXJvCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vY29udGlnLmMKaW5kZXggNmRhZjE1YS4uOTFhMDU1ZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9jb250aWcuYwpAQCAtNjEsNyArNjEsOCBAQAogCXByaW50aygiJWQgcmVzZXJ2ZWQgcGFnZXNcbiIsIHJlc2VydmVkKTsKIAlwcmludGsoIiVkIHBhZ2VzIHNoYXJlZFxuIiwgc2hhcmVkKTsKIAlwcmludGsoIiVkIHBhZ2VzIHN3YXAgY2FjaGVkXG4iLCBjYWNoZWQpOwotCXByaW50aygiJWxkIHBhZ2VzIGluIHBhZ2UgdGFibGUgY2FjaGVcbiIsIHBndGFibGVfY2FjaGVfc2l6ZSk7CisJcHJpbnRrKCIlbGQgcGFnZXMgaW4gcGFnZSB0YWJsZSBjYWNoZVxuIiwKKwkJcGd0YWJsZV9xdWlja2xpc3RfdG90YWxfc2l6ZSgpKTsKIH0KIAogLyogcGh5c2ljYWwgYWRkcmVzcyB3aGVyZSB0aGUgYm9vdG1lbSBtYXAgaXMgbG9jYXRlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCmluZGV4IDM0NTZhOWIuLmMwMDcxMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYworKysgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKQEAgLTU4Miw3ICs1ODIsOCBAQAogCXByaW50aygiJWQgcmVzZXJ2ZWQgcGFnZXNcbiIsIHRvdGFsX3Jlc2VydmVkKTsKIAlwcmludGsoIiVkIHBhZ2VzIHNoYXJlZFxuIiwgdG90YWxfc2hhcmVkKTsKIAlwcmludGsoIiVkIHBhZ2VzIHN3YXAgY2FjaGVkXG4iLCB0b3RhbF9jYWNoZWQpOwotCXByaW50aygiVG90YWwgb2YgJWxkIHBhZ2VzIGluIHBhZ2UgdGFibGUgY2FjaGVcbiIsIHBndGFibGVfY2FjaGVfc2l6ZSk7CisJcHJpbnRrKCJUb3RhbCBvZiAlbGQgcGFnZXMgaW4gcGFnZSB0YWJsZSBjYWNoZVxuIiwKKwkJcGd0YWJsZV9xdWlja2xpc3RfdG90YWxfc2l6ZSgpKTsKIAlwcmludGsoIiVkIGZyZWUgYnVmZmVyIHBhZ2VzXG4iLCBucl9mcmVlX2J1ZmZlcl9wYWdlcygpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2ZhdWx0LmMgYi9hcmNoL2lhNjQvbW0vZmF1bHQuYwppbmRleCBkYTg1OTEyLi40MTc0ZWM5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vZmF1bHQuYworKysgYi9hcmNoL2lhNjQvbW0vZmF1bHQuYwpAQCAtMjA5LDEwICsyMDksMTMgQEAKIAl9CiAKICAgbm9fY29udGV4dDoKLQlpZiAoaXNyICYgSUE2NF9JU1JfU1ApIHsKKwlpZiAoKGlzciAmIElBNjRfSVNSX1NQKQorCSAgICB8fCAoKGlzciAmIElBNjRfSVNSX05BKSAmJiAoaXNyICYgSUE2NF9JU1JfQ09ERV9NQVNLKSA9PSBJQTY0X0lTUl9DT0RFX0xGRVRDSCkpCisJewogCQkvKgotCQkgKiBUaGlzIGZhdWx0IHdhcyBkdWUgdG8gYSBzcGVjdWxhdGl2ZSBsb2FkIHNldCB0aGUgImVkIiBiaXQgaW4gdGhlIHBzciB0bwotCQkgKiBlbnN1cmUgZm9yd2FyZCBwcm9ncmVzcyAodGFyZ2V0IHJlZ2lzdGVyIHdpbGwgZ2V0IGEgTmFUKS4KKwkJICogVGhpcyBmYXVsdCB3YXMgZHVlIHRvIGEgc3BlY3VsYXRpdmUgbG9hZCBvciBsZmV0Y2guZmF1bHQsIHNldCB0aGUgImVkIgorCQkgKiBiaXQgaW4gdGhlIHBzciB0byBlbnN1cmUgZm9yd2FyZCBwcm9ncmVzcy4gIChUYXJnZXQgcmVnaXN0ZXIgd2lsbCBnZXQgYQorCQkgKiBOYVQgZm9yIGxkLnMsIGxmZXRjaCB3aWxsIGJlIGNhbmNlbGVkLikKIAkJICovCiAJCWlhNjRfcHNyKHJlZ3MpLT5lZCA9IDE7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IDY1Y2Y4MzkuLjU0Nzc4NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtMzksNiArMzksOSBAQAogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOwogCitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nICosIF9fcGd0YWJsZV9xdWlja2xpc3QpOworREVGSU5FX1BFUl9DUFUobG9uZywgX19wZ3RhYmxlX3F1aWNrbGlzdF9zaXplKTsKKwogZXh0ZXJuIHZvaWQgaWE2NF90bGJfaW5pdCAodm9pZCk7CiAKIHVuc2lnbmVkIGxvbmcgTUFYX0RNQV9BRERSRVNTID0gUEFHRV9PRkZTRVQgKyAweDEwMDAwMDAwMFVMOwpAQCAtNTAsMjcgKzUzLDUzIEBACiBFWFBPUlRfU1lNQk9MKHZtZW1fbWFwKTsKICNlbmRpZgogCi1zdGF0aWMgaW50IHBndF9jYWNoZV93YXRlclsyXSA9IHsgMjUsIDUwIH07Ci0KLXN0cnVjdCBwYWdlICp6ZXJvX3BhZ2VfbWVtbWFwX3B0cjsJCS8qIG1hcCBlbnRyeSBmb3IgemVybyBwYWdlICovCitzdHJ1Y3QgcGFnZSAqemVyb19wYWdlX21lbW1hcF9wdHI7CS8qIG1hcCBlbnRyeSBmb3IgemVybyBwYWdlICovCiBFWFBPUlRfU1lNQk9MKHplcm9fcGFnZV9tZW1tYXBfcHRyKTsKIAotdm9pZAotY2hlY2tfcGd0X2NhY2hlICh2b2lkKQotewotCWludCBsb3csIGhpZ2g7CisjZGVmaW5lIE1JTl9QR1RfUEFHRVMJCQkyNVVMCisjZGVmaW5lIE1BWF9QR1RfRlJFRVNfUEVSX1BBU1MJCTE2TAorI2RlZmluZSBQR1RfRlJBQ1RJT05fT0ZfTk9ERV9NRU0JMTYKIAotCWxvdyA9IHBndF9jYWNoZV93YXRlclswXTsKLQloaWdoID0gcGd0X2NhY2hlX3dhdGVyWzFdOworc3RhdGljIGlubGluZSBsb25nCittYXhfcGd0X3BhZ2VzKHZvaWQpCit7CisJdTY0IG5vZGVfZnJlZV9wYWdlcywgbWF4X3BndF9wYWdlczsKKworI2lmbmRlZglDT05GSUdfTlVNQQorCW5vZGVfZnJlZV9wYWdlcyA9IG5yX2ZyZWVfcGFnZXMoKTsKKyNlbHNlCisJbm9kZV9mcmVlX3BhZ2VzID0gbnJfZnJlZV9wYWdlc19wZ2RhdChOT0RFX0RBVEEobnVtYV9ub2RlX2lkKCkpKTsKKyNlbmRpZgorCW1heF9wZ3RfcGFnZXMgPSBub2RlX2ZyZWVfcGFnZXMgLyBQR1RfRlJBQ1RJT05fT0ZfTk9ERV9NRU07CisJbWF4X3BndF9wYWdlcyA9IG1heChtYXhfcGd0X3BhZ2VzLCBNSU5fUEdUX1BBR0VTKTsKKwlyZXR1cm4gbWF4X3BndF9wYWdlczsKK30KKworc3RhdGljIGlubGluZSBsb25nCittaW5fcGFnZXNfdG9fZnJlZSh2b2lkKQoreworCWxvbmcgcGFnZXNfdG9fZnJlZTsKKworCXBhZ2VzX3RvX2ZyZWUgPSBwZ3RhYmxlX3F1aWNrbGlzdF9zaXplIC0gbWF4X3BndF9wYWdlcygpOworCXBhZ2VzX3RvX2ZyZWUgPSBtaW4ocGFnZXNfdG9fZnJlZSwgTUFYX1BHVF9GUkVFU19QRVJfUEFTUyk7CisJcmV0dXJuIHBhZ2VzX3RvX2ZyZWU7Cit9CisKK3ZvaWQKK2NoZWNrX3BndF9jYWNoZSh2b2lkKQoreworCWxvbmcgcGFnZXNfdG9fZnJlZTsKKworCWlmICh1bmxpa2VseShwZ3RhYmxlX3F1aWNrbGlzdF9zaXplIDw9IE1JTl9QR1RfUEFHRVMpKQorCQlyZXR1cm47CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAocGd0YWJsZV9jYWNoZV9zaXplID4gKHU2NCkgaGlnaCkgewotCQlkbyB7Ci0JCQlpZiAocGdkX3F1aWNrbGlzdCkKLQkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGdkX2FsbG9jX29uZV9mYXN0KE5VTEwpKTsKLQkJCWlmIChwbWRfcXVpY2tsaXN0KQotCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwbWRfYWxsb2Nfb25lX2Zhc3QoTlVMTCwgMCkpOwotCQl9IHdoaWxlIChwZ3RhYmxlX2NhY2hlX3NpemUgPiAodTY0KSBsb3cpOworCXdoaWxlICh1bmxpa2VseSgocGFnZXNfdG9fZnJlZSA9IG1pbl9wYWdlc190b19mcmVlKCkpID4gMCkpIHsKKwkJd2hpbGUgKHBhZ2VzX3RvX2ZyZWUtLSkgeworCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBndGFibGVfcXVpY2tsaXN0X2FsbG9jKCkpOworCQl9CisJCXByZWVtcHRfZW5hYmxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCX0KIAlwcmVlbXB0X2VuYWJsZSgpOwogfQpAQCAtNTIzLDExICs1NTIsMTQgQEAKIG1lbV9pbml0ICh2b2lkKQogewogCWxvbmcgcmVzZXJ2ZWRfcGFnZXMsIGNvZGVzaXplLCBkYXRhc2l6ZSwgaW5pdHNpemU7Ci0JdW5zaWduZWQgbG9uZyBudW1fcGd0X3BhZ2VzOwogCXBnX2RhdGFfdCAqcGdkYXQ7CiAJaW50IGk7CiAJc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX21lbSwga2NvcmVfdm1lbSwga2NvcmVfa2VybmVsOwogCisJQlVHX09OKFBUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2RfdCkgIT0gUEFHRV9TSVpFKTsKKwlCVUdfT04oUFRSU19QRVJfUE1EICogc2l6ZW9mKHBtZF90KSAhPSBQQUdFX1NJWkUpOworCUJVR19PTihQVFJTX1BFUl9QVEUgKiBzaXplb2YocHRlX3QpICE9IFBBR0VfU0laRSk7CisKICNpZmRlZiBDT05GSUdfUENJCiAJLyoKIAkgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBfYWZ0ZXJfIHRoZSBjb21tYW5kIGxpbmUgaGFzIGJlZW4gcGFyc2VkIGJ1dCBfYmVmb3JlXwpAQCAtNTY0LDE4ICs1OTYsNiBAQAogCSAgICAgICBudW1fcGh5c3BhZ2VzIDw8IChQQUdFX1NISUZUIC0gMTApLCBjb2Rlc2l6ZSA+PiAxMCwKIAkgICAgICAgcmVzZXJ2ZWRfcGFnZXMgPDwgKFBBR0VfU0hJRlQgLSAxMCksIGRhdGFzaXplID4+IDEwLCBpbml0c2l6ZSA+PiAxMCk7CiAKLQkvKgotCSAqIEFsbG93IGZvciBlbm91Z2ggKGNhY2hlZCkgcGFnZSB0YWJsZSBwYWdlcyBzbyB0aGF0IHdlIGNhbiBtYXAgdGhlIGVudGlyZSBtZW1vcnkKLQkgKiBhdCBsZWFzdCBvbmNlLiAgRWFjaCB0YXNrIGFsc28gbmVlZHMgYSBjb3VwbGUgb2YgcGFnZSB0YWJsZXMgcGFnZXMsIHNvIGFkZCBpbiBhCi0JICogZnVkZ2UgZmFjdG9yIGZvciB0aGF0IChkb24ndCB1c2UgInRocmVhZHMtbWF4IiBoZXJlOyB0aGF0IHdvdWxkIGJlIHdyb25nISkuCi0JICogRG9uJ3QgYWxsb3cgdGhlIGNhY2hlIHRvIGJlIG1vcmUgdGhhbiAxMCUgb2YgdG90YWwgbWVtb3J5LCB0aG91Z2guCi0JICovCi0jCWRlZmluZSBOVU1fVEFTS1MJNTAwCS8qIHR5cGljYWwgbnVtYmVyIG9mIHRhc2tzICovCi0JbnVtX3BndF9wYWdlcyA9IG5yX2ZyZWVfcGFnZXMoKSAvIFBUUlNfUEVSX1BHRCArIE5VTV9UQVNLUzsKLQlpZiAobnVtX3BndF9wYWdlcyA+IG5yX2ZyZWVfcGFnZXMoKSAvIDEwKQotCQludW1fcGd0X3BhZ2VzID0gbnJfZnJlZV9wYWdlcygpIC8gMTA7Ci0JaWYgKG51bV9wZ3RfcGFnZXMgPiAodTY0KSBwZ3RfY2FjaGVfd2F0ZXJbMV0pCi0JCXBndF9jYWNoZV93YXRlclsxXSA9IG51bV9wZ3RfcGFnZXM7CiAKIAkvKgogCSAqIEZvciBmc3lzY2FsbCBlbnRycG9pbnRzIHdpdGggbm8gbGlnaHQtd2VpZ2h0IGhhbmRsZXIsIHVzZSB0aGUgb3JkaW5hcnkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9pbmNsdWRlL3BjaS9wY2licl9wcm92aWRlci5oIGIvYXJjaC9pYTY0L3NuL2luY2x1ZGUvcGNpL3BjaWJyX3Byb3ZpZGVyLmgKaW5kZXggYjFmMDVmZi4uMWNkMjkxZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2luY2x1ZGUvcGNpL3BjaWJyX3Byb3ZpZGVyLmgKKysrIGIvYXJjaC9pYTY0L3NuL2luY2x1ZGUvcGNpL3BjaWJyX3Byb3ZpZGVyLmgKQEAgLTEyMyw5ICsxMjMsMTEgQEAKIH0KICNkZWZpbmUgcGNpYnJfdW5sb2NrKHBjaWJ1c19pbmZvLCBmbGFnKSAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpYnVzX2luZm8tPnBiaV9sb2NrLCBmbGFnKQogCitleHRlcm4gaW50ICBwY2licl9pbml0X3Byb3ZpZGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgKnBjaWJyX2J1c19maXh1cChzdHJ1Y3QgcGNpYnVzX2J1c3NvZnQgKik7Ci1leHRlcm4gdWludDY0X3QgcGNpYnJfZG1hX21hcChzdHJ1Y3QgcGNpZGV2X2luZm8gKiwgdW5zaWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgcGNpYnJfZG1hX3VubWFwKHN0cnVjdCBwY2lkZXZfaW5mbyAqLCBkbWFfYWRkcl90LCBpbnQpOworZXh0ZXJuIGRtYV9hZGRyX3QgcGNpYnJfZG1hX21hcChzdHJ1Y3QgcGNpX2RldiAqLCB1bnNpZ25lZCBsb25nLCBzaXplX3QpOworZXh0ZXJuIGRtYV9hZGRyX3QgcGNpYnJfZG1hX21hcF9jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICosIHVuc2lnbmVkIGxvbmcsIHNpemVfdCk7CitleHRlcm4gdm9pZCBwY2licl9kbWFfdW5tYXAoc3RydWN0IHBjaV9kZXYgKiwgZG1hX2FkZHJfdCwgaW50KTsKIAogLyoKICAqIHByb3RvdHlwZXMgZm9yIHRoZSBicmlkZ2UgYXNpYyByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMgaW4gcGNpYnJfcmVnLmMKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2lhNjQvc24va2VybmVsL01ha2VmaWxlCmluZGV4IDZjN2Y0ZDkuLjQzNTFjNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9NYWtlZmlsZQpAQCAtNCw5ICs0LDE1IEBACiAjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICMgZm9yIG1vcmUgZGV0YWlscy4KICMKLSMgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDEtMjAwMyBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMS0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAjCiAKIG9iai15CQkJCSs9IHNldHVwLm8gYnRlLm8gYnRlX2Vycm9yLm8gaXJxLm8gbWNhLm8gaWRsZS5vIFwKIAkJCQkgICBodWJlcnJvci5vIGlvX2luaXQubyBpb212Lm8ga2xjb25mbGliLm8gc24yLwogb2JqLSQoQ09ORklHX0lBNjRfR0VORVJJQykgICAgICArPSBtYWNodmVjLm8KK29iai0kKENPTkZJR19TR0lfVElPQ1gpCQkrPSB0aW9jeC5vCitvYmotJChDT05GSUdfSUE2NF9TR0lfU05fWFApCSs9IHhwLm8KK3hwLXkJCQkJOj0geHBfbWFpbi5vIHhwX25vZmF1bHQubworb2JqLSQoQ09ORklHX0lBNjRfU0dJX1NOX1hQKQkrPSB4cGMubworeHBjLXkJCQkJOj0geHBjX21haW4ubyB4cGNfY2hhbm5lbC5vIHhwY19wYXJ0aXRpb24ubworb2JqLSQoQ09ORklHX0lBNjRfU0dJX1NOX1hQKQkrPSB4cG5ldC5vCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2J0ZS5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYwppbmRleCBjZTBiYzQwLi42NDdkZWFlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2J0ZS5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvYnRlLmMKQEAgLTMsNyArMyw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAzIFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTE3MCwxMCArMTcwLDYgQEAKIAkvKiBJbml0aWFsaXplIHRoZSBub3RpZmljYXRpb24gdG8gYSBrbm93biB2YWx1ZS4gKi8KIAkqYnRlLT5tb3N0X3JjbnRfbmEgPSBCVEVfV09SRF9CVVNZOwogCi0JLyogU2V0IHRoZSBzdGF0dXMgcmVnIGJ1c3kgYml0IGFuZCB0cmFuc2ZlciBsZW5ndGggKi8KLQlCVEVfUFJJTlRLVigoIklCTFMgPSAweCVseFxuIiwgSUJMU19CVVNZIHwgdHJhbnNmZXJfc2l6ZSkpOwotCUJURV9MTlNUQVRfU1RPUkUoYnRlLCBJQkxTX0JVU1kgfCB0cmFuc2Zlcl9zaXplKTsKLQogCS8qIFNldCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiByZWdpc3RlcnMgKi8KIAlCVEVfUFJJTlRLVigoIklCU0EgPSAweCVseClcbiIsIChUT19QSFlTKHNyYykpKSk7CiAJQlRFX1NSQ19TVE9SRShidGUsIFRPX1BIWVMoc3JjKSk7CkBAIC0xODgsNyArMTg0LDcgQEAKIAogCS8qIEluaXRpYXRlIHRoZSB0cmFuc2ZlciAqLwogCUJURV9QUklOVEsoKCJJQkNUID0gMHglbHgpXG4iLCBCVEVfVkFMSURfTU9ERShtb2RlKSkpOwotCUJURV9DVFJMX1NUT1JFKGJ0ZSwgQlRFX1ZBTElEX01PREUobW9kZSkpOworCUJURV9TVEFSVF9UUkFOU0ZFUihidGUsIHRyYW5zZmVyX3NpemUsIEJURV9WQUxJRF9NT0RFKG1vZGUpKTsKIAogCWl0Y19lbmQgPSBpYTY0X2dldF9pdGMoKSArICg0MDAwMDAwMCAqIGxvY2FsX2NwdV9kYXRhLT5jeWNfcGVyX3VzZWMpOwogCkBAIC00MjksMTAgKzQyNSwxNiBAQAogCW15bm9kZXBkYS0+YnRlX3JlY292ZXJ5X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylteW5vZGVwZGE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQlRFU19QRVJfTk9ERTsgaSsrKSB7CisJCXU2NCAqYmFzZV9hZGRyOworCiAJCS8qIFdoaWNoIGxpbmsgc3RhdHVzIHJlZ2lzdGVyIHNob3VsZCB3ZSB1c2U/ICovCi0JCXVuc2lnbmVkIGxvbmcgbGlua19zdGF0dXMgPSAoaSA9PSAwID8gSUlPX0lCTFMwIDogSUlPX0lCTFMxKTsKLQkJbXlub2RlcGRhLT5idGVfaWZbaV0uYnRlX2Jhc2VfYWRkciA9ICh1NjQgKikKLQkJICAgIFJFTU9URV9IVUJfQUREUihjbm9kZWlkX3RvX25hc2lkKGNub2RlKSwgbGlua19zdGF0dXMpOworCQliYXNlX2FkZHIgPSAodTY0ICopCisJCSAgICBSRU1PVEVfSFVCX0FERFIoY25vZGVpZF90b19uYXNpZChjbm9kZSksIEJURV9CQVNFX0FERFIoaSkpOworCQlteW5vZGVwZGEtPmJ0ZV9pZltpXS5idGVfYmFzZV9hZGRyID0gYmFzZV9hZGRyOworCQlteW5vZGVwZGEtPmJ0ZV9pZltpXS5idGVfc291cmNlX2FkZHIgPSBCVEVfU09VUkNFX0FERFIoYmFzZV9hZGRyKTsKKwkJbXlub2RlcGRhLT5idGVfaWZbaV0uYnRlX2Rlc3RpbmF0aW9uX2FkZHIgPSBCVEVfREVTVF9BRERSKGJhc2VfYWRkcik7CisJCW15bm9kZXBkYS0+YnRlX2lmW2ldLmJ0ZV9jb250cm9sX2FkZHIgPSBCVEVfQ1RSTF9BRERSKGJhc2VfYWRkcik7CisJCW15bm9kZXBkYS0+YnRlX2lmW2ldLmJ0ZV9ub3RpZnlfYWRkciA9IEJURV9OT1RJRl9BRERSKGJhc2VfYWRkcik7CiAKIAkJLyoKIAkJICogSW5pdGlhbGl6ZSB0aGUgbm90aWZpY2F0aW9uIGFuZCBzcGlubG9jawpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGVfZXJyb3IuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvYnRlX2Vycm9yLmMKaW5kZXggZmQxMDQzMS4uZmNiYzc0OCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGVfZXJyb3IuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2J0ZV9lcnJvci5jCkBAIC0zLDcgKzMsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTMzLDQ4ICszMywyOCBAQAogICogV2FpdCB1bnRpbCBhbGwgQlRFIHJlbGF0ZWQgQ1JCcyBhcmUgY29tcGxldGVkCiAgKiBhbmQgdGhlbiByZXNldCB0aGUgaW50ZXJmYWNlcy4KICAqLwotdm9pZCBidGVfZXJyb3JfaGFuZGxlcih1bnNpZ25lZCBsb25nIF9ub2RlcGRhKQordm9pZCBzaHViMV9idGVfZXJyb3JfaGFuZGxlcih1bnNpZ25lZCBsb25nIF9ub2RlcGRhKQogewogCXN0cnVjdCBub2RlcGRhX3MgKmVycl9ub2RlcGRhID0gKHN0cnVjdCBub2RlcGRhX3MgKilfbm9kZXBkYTsKLQlzcGlubG9ja190ICpyZWNvdmVyeV9sb2NrID0gJmVycl9ub2RlcGRhLT5idGVfcmVjb3ZlcnlfbG9jazsKIAlzdHJ1Y3QgdGltZXJfbGlzdCAqcmVjb3ZlcnlfdGltZXIgPSAmZXJyX25vZGVwZGEtPmJ0ZV9yZWNvdmVyeV90aW1lcjsKIAluYXNpZF90IG5hc2lkOwogCWludCBpOwogCWludCB2YWxpZF9jcmJzOwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwotCXZvbGF0aWxlIHU2NCAqbm90aWZ5OwotCWJ0ZV9yZXN1bHRfdCBiaF9lcnJvcjsKIAlpaV9pbWVtX3VfdCBpbWVtOwkvKiBJSSBJTUVNIFJlZ2lzdGVyICovCiAJaWlfaWNyYjBfZF91X3QgaWNyYmQ7CS8qIElJIENSQiBSZWdpc3RlciBEICovCiAJaWlfaWJjcl91X3QgaWJjcjsKIAlpaV9pY21yX3VfdCBpY21yOwogCWlpX2llY2xyX3VfdCBpZWNscjsKIAotCUJURV9QUklOVEsoKCJidGVfZXJyb3JfaGFuZGxlciglcCkgLSAlZFxuIiwgZXJyX25vZGVwZGEsCisJQlRFX1BSSU5USygoInNodWIxX2J0ZV9lcnJvcl9oYW5kbGVyKCVwKSAtICVkXG4iLCBlcnJfbm9kZXBkYSwKIAkJICAgIHNtcF9wcm9jZXNzb3JfaWQoKSkpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUocmVjb3ZlcnlfbG9jaywgaXJxX2ZsYWdzKTsKLQogCWlmICgoZXJyX25vZGVwZGEtPmJ0ZV9pZlswXS5iaF9lcnJvciA9PSBCVEVfU1VDQ0VTUykgJiYKIAkgICAgKGVycl9ub2RlcGRhLT5idGVfaWZbMV0uYmhfZXJyb3IgPT0gQlRFX1NVQ0NFU1MpKSB7CiAJCUJURV9QUklOVEsoKCJlaDolcDolZCBOb3RoaW5nIHRvIGRvLlxuIiwgZXJyX25vZGVwZGEsCiAJCQkgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocmVjb3ZlcnlfbG9jaywgaXJxX2ZsYWdzKTsKIAkJcmV0dXJuOwogCX0KLQkvKgotCSAqIExvY2sgYWxsIGludGVyZmFjZXMgb24gdGhpcyBub2RlIHRvIHByZXZlbnQgbmV3IHRyYW5zZmVycwotCSAqIGZyb20gYmVpbmcgcXVldWVkLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBCVEVTX1BFUl9OT0RFOyBpKyspIHsKLQkJaWYgKGVycl9ub2RlcGRhLT5idGVfaWZbaV0uY2xlYW51cF9hY3RpdmUpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNwaW5fbG9jaygmZXJyX25vZGVwZGEtPmJ0ZV9pZltpXS5zcGlubG9jayk7Ci0JCUJURV9QUklOVEsoKCJlaDolcDolZCBsb2NrZWQgJWRcbiIsIGVycl9ub2RlcGRhLAotCQkJICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgaSkpOwotCQllcnJfbm9kZXBkYS0+YnRlX2lmW2ldLmNsZWFudXBfYWN0aXZlID0gMTsKLQl9CiAKIAkvKiBEZXRlcm1pbmUgaW5mb3JtYXRpb24gYWJvdXQgb3VyIGh1YiAqLwogCW5hc2lkID0gY25vZGVpZF90b19uYXNpZChlcnJfbm9kZXBkYS0+YnRlX2lmWzBdLmJ0ZV9jbm9kZSk7CkBAIC0xMDEsNyArODEsNiBAQAogCQltb2RfdGltZXIocmVjb3ZlcnlfdGltZXIsIEhaICogNSk7CiAJCUJURV9QUklOVEsoKCJlaDolcDolZCBNYXJrZWQgR2l2aW5nIHVwXG4iLCBlcnJfbm9kZXBkYSwKIAkJCSAgICBzbXBfcHJvY2Vzc29yX2lkKCkpKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShyZWNvdmVyeV9sb2NrLCBpcnFfZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCWlmIChpY21yLmlpX2ljbXJfZmxkX3MuaV9jcmJfdmxkICE9IDApIHsKQEAgLTEyMCw4ICs5OSw2IEBACiAJCQkJQlRFX1BSSU5USygoImVoOiVwOiVkIFZhbGlkICVkLCBHaXZpbmcgdXBcbiIsCiAJCQkJCSAgICBlcnJfbm9kZXBkYSwgc21wX3Byb2Nlc3Nvcl9pZCgpLAogCQkJCQkgICAgaSkpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocmVjb3ZlcnlfbG9jaywKLQkJCQkJCSAgICAgICBpcnFfZmxhZ3MpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQpAQCAtMTQ2LDYgKzEyMyw1MSBAQAogCWliY3IuaWlfaWJjcl9mbGRfcy5pX3NvZnRfcmVzZXQgPSAxOwogCVJFTU9URV9IVUJfUyhuYXNpZCwgSUlPX0lCQ1IsIGliY3IuaWlfaWJjcl9yZWd2YWwpOwogCisJZGVsX3RpbWVyKHJlY292ZXJ5X3RpbWVyKTsKK30KKworLyoKKyAqIFdhaXQgdW50aWwgYWxsIEJURSByZWxhdGVkIENSQnMgYXJlIGNvbXBsZXRlZAorICogYW5kIHRoZW4gcmVzZXQgdGhlIGludGVyZmFjZXMuCisgKi8KK3ZvaWQgYnRlX2Vycm9yX2hhbmRsZXIodW5zaWduZWQgbG9uZyBfbm9kZXBkYSkKK3sKKwlzdHJ1Y3Qgbm9kZXBkYV9zICplcnJfbm9kZXBkYSA9IChzdHJ1Y3Qgbm9kZXBkYV9zICopX25vZGVwZGE7CisJc3BpbmxvY2tfdCAqcmVjb3ZlcnlfbG9jayA9ICZlcnJfbm9kZXBkYS0+YnRlX3JlY292ZXJ5X2xvY2s7CisJaW50IGk7CisJbmFzaWRfdCBuYXNpZDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwl2b2xhdGlsZSB1NjQgKm5vdGlmeTsKKwlidGVfcmVzdWx0X3QgYmhfZXJyb3I7CisKKwlCVEVfUFJJTlRLKCgiYnRlX2Vycm9yX2hhbmRsZXIoJXApIC0gJWRcbiIsIGVycl9ub2RlcGRhLAorCQkgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShyZWNvdmVyeV9sb2NrLCBpcnFfZmxhZ3MpOworCisJLyoKKwkgKiBMb2NrIGFsbCBpbnRlcmZhY2VzIG9uIHRoaXMgbm9kZSB0byBwcmV2ZW50IG5ldyB0cmFuc2ZlcnMKKwkgKiBmcm9tIGJlaW5nIHF1ZXVlZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQlRFU19QRVJfTk9ERTsgaSsrKSB7CisJCWlmIChlcnJfbm9kZXBkYS0+YnRlX2lmW2ldLmNsZWFudXBfYWN0aXZlKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlzcGluX2xvY2soJmVycl9ub2RlcGRhLT5idGVfaWZbaV0uc3BpbmxvY2spOworCQlCVEVfUFJJTlRLKCgiZWg6JXA6JWQgbG9ja2VkICVkXG4iLCBlcnJfbm9kZXBkYSwKKwkJCSAgICBzbXBfcHJvY2Vzc29yX2lkKCksIGkpKTsKKwkJZXJyX25vZGVwZGEtPmJ0ZV9pZltpXS5jbGVhbnVwX2FjdGl2ZSA9IDE7CisJfQorCisJaWYgKGlzX3NodWIxKCkpIHsKKwkJc2h1YjFfYnRlX2Vycm9yX2hhbmRsZXIoX25vZGVwZGEpOworCX0gZWxzZSB7CisJCW5hc2lkID0gY25vZGVpZF90b19uYXNpZChlcnJfbm9kZXBkYS0+YnRlX2lmWzBdLmJ0ZV9jbm9kZSk7CisKKwkJaWYgKGlhNjRfc25fYnRlX3JlY292ZXJ5KG5hc2lkKSkKKwkJCXBhbmljKCJidGVfZXJyb3JfaGFuZGxlcigpOiBGYXRhbCBCVEUgRXJyb3IiKTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgQlRFU19QRVJfTk9ERTsgaSsrKSB7CiAJCWJoX2Vycm9yID0gZXJyX25vZGVwZGEtPmJ0ZV9pZltpXS5iaF9lcnJvcjsKIAkJaWYgKGJoX2Vycm9yICE9IEJURV9TVUNDRVNTKSB7CkBAIC0xNjUsOCArMTg3LDYgQEAKIAkJc3Bpbl91bmxvY2soJmVycl9ub2RlcGRhLT5idGVfaWZbaV0uc3BpbmxvY2spOwogCX0KIAotCWRlbF90aW1lcihyZWNvdmVyeV90aW1lcik7Ci0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHJlY292ZXJ5X2xvY2ssIGlycV9mbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaHViZXJyb3IuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaHViZXJyb3IuYwppbmRleCAyYmRmNjg0Li41YzM5YjQzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2h1YmVycm9yLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9odWJlcnJvci5jCkBAIC0zLDcgKzMsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTIgLSAxOTk3LCAyMDAwLDIwMDItMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIgLSAxOTk3LCAyMDAwLDIwMDItMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0zOCw4ICszOCwxMSBAQAogCWlmICgoaW50KXJldF9zdHVmZi52MCkKIAkJcGFuaWMoImh1YmlpX2VpbnRfaGFuZGxlcigpOiBGYXRhbCBUSU8gRXJyb3IiKTsKIAotCWlmICghKG5hc2lkICYgMSkpIC8qIE5vdCBhIFRJTywgaGFuZGxlIENSQiBlcnJvcnMgKi8KLQkJKHZvaWQpaHViaWlvX2NyYl9lcnJvcl9oYW5kbGVyKGh1YmRldl9pbmZvKTsKKwlpZiAoaXNfc2h1YjEoKSkgeworCQlpZiAoIShuYXNpZCAmIDEpKSAvKiBOb3QgYSBUSU8sIGhhbmRsZSBDUkIgZXJyb3JzICovCisJCQkodm9pZClodWJpaW9fY3JiX2Vycm9yX2hhbmRsZXIoaHViZGV2X2luZm8pOworCX0gZWxzZSAKKwkJYnRlX2Vycm9yX2hhbmRsZXIoKHVuc2lnbmVkIGxvbmcpTk9ERVBEQShuYXNpZF90b19jbm9kZWlkKG5hc2lkKSkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19pbml0LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwppbmRleCAwMDE4ODA4Li45ZTA3ZjU0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwpAQCAtMTEsMTQgKzExLDE1IEBACiAjaW5jbHVkZSA8YXNtL3NuL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3NuX3NhbC5oPgogI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgotI2luY2x1ZGUgInBjaS9wY2lidXNfcHJvdmlkZXJfZGVmcy5oIgotI2luY2x1ZGUgInBjaS9wY2lkZXYuaCIKKyNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+CiAjaW5jbHVkZSAicGNpL3BjaWJyX3Byb3ZpZGVyLmgiCiAjaW5jbHVkZSAieHRhbGsveHdpZGdldGRldi5oIgogI2luY2x1ZGUgPGFzbS9zbi9nZW8uaD4KICNpbmNsdWRlICJ4dGFsay9odWJkZXYuaCIKICNpbmNsdWRlIDxhc20vc24vaW8uaD4KICNpbmNsdWRlIDxhc20vc24vc2ltdWxhdG9yLmg+CisjaW5jbHVkZSA8YXNtL3NuL3Rpb2NhX3Byb3ZpZGVyLmg+CiAKIGNoYXIgbWFzdGVyX2Jhc2Vpb193aWQ7CiBuYXNpZF90IG1hc3Rlcl9uYXNpZCA9IElOVkFMSURfTkFTSUQ7CS8qIFBhcnRpdGlvbiBNYXN0ZXIgKi8KQEAgLTM0LDYgKzM1LDM3IEBACiAKIGludCBzbl9pb2lmX2luaXRlZCA9IDA7CQkvKiBTTiBJL08gaW5mcmFzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQ/ICovCiAKK3N0cnVjdCBzbl9wY2lidXNfcHJvdmlkZXIgKnNuX3BjaV9wcm92aWRlcltQQ0lJT19BU0lDX01BWF9UWVBFU107CS8qIGluZGV4ZWQgYnkgYXNpYyB0eXBlICovCisKKy8qCisgKiBIb29rcyBhbmQgc3RydWN0IGZvciB1bnN1cHBvcnRlZCBwY2kgcHJvdmlkZXJzCisgKi8KKworc3RhdGljIGRtYV9hZGRyX3QKK3NuX2RlZmF1bHRfcGNpX21hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgbG9uZyBwYWRkciwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzbl9kZWZhdWx0X3BjaV91bm1hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hX2FkZHJfdCBhZGRyLCBpbnQgZGlyZWN0aW9uKQoreworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgKgorc25fZGVmYXVsdF9wY2lfYnVzX2ZpeHVwKHN0cnVjdCBwY2lidXNfYnVzc29mdCAqc29mdCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBzbl9wY2lidXNfcHJvdmlkZXIgc25fcGNpX2RlZmF1bHRfcHJvdmlkZXIgPSB7CisJLmRtYV9tYXAgPSBzbl9kZWZhdWx0X3BjaV9tYXAsCisJLmRtYV9tYXBfY29uc2lzdGVudCA9IHNuX2RlZmF1bHRfcGNpX21hcCwKKwkuZG1hX3VubWFwID0gc25fZGVmYXVsdF9wY2lfdW5tYXAsCisJLmJ1c19maXh1cCA9IHNuX2RlZmF1bHRfcGNpX2J1c19maXh1cCwKK307CisKIC8qCiAgKiBSZXRyaWV2ZSB0aGUgRE1BIEZsdXNoIExpc3QgZ2l2ZW4gbmFzaWQuICBUaGlzIGxpc3QgaXMgbmVlZGVkIAogICogdG8gaW1wbGVtZW50IHRoZSBXQVIgLSBGbHVzaCBETUEgZGF0YSBvbiBQSU8gUmVhZHMuCkBAIC0xNDIsNiArMTc0LDEyIEBACiAJCWlmIChzdGF0dXMpCiAJCQljb250aW51ZTsKIAorCQkvKiBBdHRhY2ggdGhlIGVycm9yIGludGVycnVwdCBoYW5kbGVycyAqLworCQlpZiAobmFzaWQgJiAxKQorCQkJaWNlX2Vycm9yX2luaXQoaHViZGV2KTsKKwkJZWxzZQorCQkJaHViX2Vycm9yX2luaXQoaHViZGV2KTsKKwogCQlmb3IgKHdpZGdldCA9IDA7IHdpZGdldCA8PSBIVUJfV0lER0VUX0lEX01BWDsgd2lkZ2V0KyspCiAJCQlodWJkZXYtPmhkaV94d2lkZ2V0X2luZm9bd2lkZ2V0XS54d2lfaHViaW5mbyA9IGh1YmRldjsKIApAQCAtMTc5LDEwICsyMTcsNiBAQAogCQkJICAgIHNuX2ZsdXNoX2RldmljZV9saXN0OwogCQl9CiAKLQkJaWYgKCEoaSAmIDEpKQotCQkJaHViX2Vycm9yX2luaXQoaHViZGV2KTsKLQkJZWxzZQotCQkJaWNlX2Vycm9yX2luaXQoaHViZGV2KTsKIAl9CiAKIH0KQEAgLTIwMSw2ICsyMzUsNyBAQAogCXN0cnVjdCBzbl9pcnFfaW5mbyAqc25faXJxX2luZm87CiAJc3RydWN0IHBjaV9kZXYgKmhvc3RfcGNpX2RldjsKIAlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcGNpYnVzX2J1c3NvZnQgKmJzOwogCiAJZGV2LT5zeXNkYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaWRldl9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKFNOX1BDSURFVl9JTkZPKGRldikgPD0gMCkKQEAgLTI0MSw2ICsyNzYsNyBAQAogCX0KIAogCS8qIHNldCB1cCBob3N0IGJ1cyBsaW5rYWdlcyAqLworCWJzID0gU05fUENJQlVTX0JVU1NPRlQoZGV2LT5idXMpOwogCWhvc3RfcGNpX2RldiA9CiAJICAgIHBjaV9maW5kX3Nsb3QoU05fUENJREVWX0lORk8oZGV2KS0+cGRpX3Nsb3RfaG9zdF9oYW5kbGUgPj4gMzIsCiAJCQkgIFNOX1BDSURFVl9JTkZPKGRldiktPgpAQCAtMjQ4LDEwICsyODQsMTYgQEAKIAlTTl9QQ0lERVZfSU5GTyhkZXYpLT5wZGlfaG9zdF9wY2lkZXZfaW5mbyA9CiAJICAgIFNOX1BDSURFVl9JTkZPKGhvc3RfcGNpX2Rldik7CiAJU05fUENJREVWX0lORk8oZGV2KS0+cGRpX2xpbnV4X3BjaWRldiA9IGRldjsKLQlTTl9QQ0lERVZfSU5GTyhkZXYpLT5wZGlfcGNpYnVzX2luZm8gPSBTTl9QQ0lCVVNfQlVTU09GVChkZXYtPmJ1cyk7CisJU05fUENJREVWX0lORk8oZGV2KS0+cGRpX3BjaWJ1c19pbmZvID0gYnM7CisKKwlpZiAoYnMgJiYgYnMtPmJzX2FzaWNfdHlwZSA8IFBDSUlPX0FTSUNfTUFYX1RZUEVTKSB7CisJCVNOX1BDSURFVl9CVVNQUk9WSURFUihkZXYpID0gc25fcGNpX3Byb3ZpZGVyW2JzLT5ic19hc2ljX3R5cGVdOworCX0gZWxzZSB7CisJCVNOX1BDSURFVl9CVVNQUk9WSURFUihkZXYpID0gJnNuX3BjaV9kZWZhdWx0X3Byb3ZpZGVyOworCX0KIAogCS8qIE9ubHkgc2V0IHVwIElSUSBzdHVmZiBpZiB0aGlzIGRldmljZSBoYXMgYSBob3N0IGJ1cyBjb250ZXh0ICovCi0JaWYgKFNOX1BDSURFVl9CVVNTT0ZUKGRldikgJiYgc25faXJxX2luZm8tPmlycV9pcnEpIHsKKwlpZiAoYnMgJiYgc25faXJxX2luZm8tPmlycV9pcnEpIHsKIAkJU05fUENJREVWX0lORk8oZGV2KS0+cGRpX3NuX2lycV9pbmZvID0gc25faXJxX2luZm87CiAJCWRldi0+aXJxID0gU05fUENJREVWX0lORk8oZGV2KS0+cGRpX3NuX2lycV9pbmZvLT5pcnFfaXJxOwogCQlzbl9pcnFfZml4dXAoZGV2LCBzbl9pcnFfaW5mbyk7CkBAIC0yNzEsNiArMzEzLDcgQEAKIAlzdHJ1Y3QgcGNpYnVzX2J1c3NvZnQgKnByb21fYnVzc29mdF9wdHI7CiAJc3RydWN0IGh1YmRldl9pbmZvICpodWJkZXZfaW5mbzsKIAl2b2lkICpwcm92aWRlcl9zb2Z0OworCXN0cnVjdCBzbl9wY2lidXNfcHJvdmlkZXIgKnByb3ZpZGVyOwogCiAJc3RhdHVzID0KIAkgICAgc2FsX2dldF9wY2lidXNfaW5mbygodTY0KSBzZWdtZW50LCAodTY0KSBidXNudW0sCkBAIC0yOTEsMTYgKzMzNCwyMiBAQAogCS8qCiAJICogUGVyLXByb3ZpZGVyIGZpeHVwLiAgQ29waWVzIHRoZSBjb250ZW50cyBmcm9tIHByb20gdG8gbG9jYWwKIAkgKiBhcmVhIGFuZCBsaW5rcyBTTl9QQ0lCVVNfQlVTU09GVCgpLgotCSAqCi0JICogTm90ZTogIFByb3ZpZGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHByb21fYnVzc29mdF9wdHIKLQkgKiByZXByZXNlbnRzIGFuIGFzaWMtdHlwZSB0aGF0IGl0IGNhbiBoYW5kbGUuCiAJICovCiAKLQlpZiAocHJvbV9idXNzb2Z0X3B0ci0+YnNfYXNpY190eXBlID09IFBDSUlPX0FTSUNfVFlQRV9QUEIpIHsKLQkJcmV0dXJuOwkJLyogbm8gZnVydGhlciBmaXh1cCBuZWNlc3NhcnkgKi8KKwlpZiAocHJvbV9idXNzb2Z0X3B0ci0+YnNfYXNpY190eXBlID49IFBDSUlPX0FTSUNfTUFYX1RZUEVTKSB7CisJCXJldHVybjsJCS8qIHVuc3VwcG9ydGVkIGFzaWMgdHlwZSAqLwogCX0KIAotCXByb3ZpZGVyX3NvZnQgPSBwY2licl9idXNfZml4dXAocHJvbV9idXNzb2Z0X3B0cik7CisJcHJvdmlkZXIgPSBzbl9wY2lfcHJvdmlkZXJbcHJvbV9idXNzb2Z0X3B0ci0+YnNfYXNpY190eXBlXTsKKwlpZiAocHJvdmlkZXIgPT0gTlVMTCkgeworCQlyZXR1cm47CQkvKiBubyBwcm92aWRlciByZWdpc3RlcmQgZm9yIHRoaXMgYXNpYyAqLworCX0KKworCXByb3ZpZGVyX3NvZnQgPSBOVUxMOworCWlmIChwcm92aWRlci0+YnVzX2ZpeHVwKSB7CisJCXByb3ZpZGVyX3NvZnQgPSAoKnByb3ZpZGVyLT5idXNfZml4dXApIChwcm9tX2J1c3NvZnRfcHRyKTsKKwl9CisKIAlpZiAocHJvdmlkZXJfc29mdCA9PSBOVUxMKSB7CiAJCXJldHVybjsJCS8qIGZpeHVwIGZhaWxlZCBvciBub3QgYXBwbGljYWJsZSAqLwogCX0KQEAgLTMzOSw2ICszODgsMTcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKgorCSAqIHByaW1lIHNuX3BjaV9wcm92aWRlcltdLiAgSW5kaXZpZGlhbCBwcm92aWRlciBpbml0IHJvdXRpbmVzIHdpbGwKKwkgKiBvdmVycmlkZSB0aGVpciByZXNwZWN0aXZlIGRlZmF1bHQgZW50cmllcy4KKwkgKi8KKworCWZvciAoaSA9IDA7IGkgPCBQQ0lJT19BU0lDX01BWF9UWVBFUzsgaSsrKQorCQlzbl9wY2lfcHJvdmlkZXJbaV0gPSAmc25fcGNpX2RlZmF1bHRfcHJvdmlkZXI7CisKKwlwY2licl9pbml0X3Byb3ZpZGVyKCk7CisJdGlvY2FfaW5pdF9wcm92aWRlcigpOworCisJLyoKIAkgKiBUaGlzIGlzIG5lZWRlZCB0byBhdm9pZCBib3VuY2UgbGltaXQgY2hlY2tzIGluIHRoZSBibGsgbGF5ZXIKIAkgKi8KIAlpYTY0X21heF9pb21tdV9tZXJnZV9tYXNrID0gflBBR0VfTUFTSzsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaXJxLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jCmluZGV4IDNiZTQ0NzIuLjBmNGU4MTM4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaXJxLmMKQEAgLTEzLDggKzEzLDggQEAKICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KICNpbmNsdWRlIDxhc20vc24vYXJjaC5oPgogI2luY2x1ZGUgInh0YWxrL3h3aWRnZXRkZXYuaCIKLSNpbmNsdWRlICJwY2kvcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaCIKLSNpbmNsdWRlICJwY2kvcGNpZGV2LmgiCisjaW5jbHVkZSA8YXNtL3NuL3BjaWJ1c19wcm92aWRlcl9kZWZzLmg+CisjaW5jbHVkZSA8YXNtL3NuL3BjaWRldi5oPgogI2luY2x1ZGUgInBjaS9wY2licl9wcm92aWRlci5oIgogI2luY2x1ZGUgPGFzbS9zbi9zaHViX21tci5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KQEAgLTgyLDIwICs4Miw5IEBACiAJbmFzaWQgPSBnZXRfbmFzaWQoKTsKIAlldmVudF9vY2N1cnJlZCA9CiAJICAgIEhVQl9MKCh1aW50NjRfdCAqKSBHTE9CQUxfTU1SX0FERFIobmFzaWQsIFNIX0VWRU5UX09DQ1VSUkVEKSk7Ci0JaWYgKGV2ZW50X29jY3VycmVkICYgU0hfRVZFTlRfT0NDVVJSRURfVUFSVF9JTlRfTUFTSykgewotCQltYXNrIHw9ICgxIDw8IFNIX0VWRU5UX09DQ1VSUkVEX1VBUlRfSU5UX1NIRlQpOwotCX0KLQlpZiAoZXZlbnRfb2NjdXJyZWQgJiBTSF9FVkVOVF9PQ0NVUlJFRF9JUElfSU5UX01BU0spIHsKLQkJbWFzayB8PSAoMSA8PCBTSF9FVkVOVF9PQ0NVUlJFRF9JUElfSU5UX1NIRlQpOwotCX0KLQlpZiAoZXZlbnRfb2NjdXJyZWQgJiBTSF9FVkVOVF9PQ0NVUlJFRF9JSV9JTlQwX01BU0spIHsKLQkJbWFzayB8PSAoMSA8PCBTSF9FVkVOVF9PQ0NVUlJFRF9JSV9JTlQwX1NIRlQpOwotCX0KLQlpZiAoZXZlbnRfb2NjdXJyZWQgJiBTSF9FVkVOVF9PQ0NVUlJFRF9JSV9JTlQxX01BU0spIHsKLQkJbWFzayB8PSAoMSA8PCBTSF9FVkVOVF9PQ0NVUlJFRF9JSV9JTlQxX1NIRlQpOwotCX0KKwltYXNrID0gZXZlbnRfb2NjdXJyZWQgJiBTSF9BTExfSU5UX01BU0s7CiAJSFVCX1MoKHVpbnQ2NF90ICopIEdMT0JBTF9NTVJfQUREUihuYXNpZCwgU0hfRVZFTlRfT0NDVVJSRURfQUxJQVMpLAotCSAgICAgIG1hc2spOworCQkgbWFzayk7CiAJX19zZXRfYml0KGlycSwgKHZvbGF0aWxlIHZvaWQgKilwZGEtPnNuX2luX3NlcnZpY2VfaXZlY3MpOwogCiAJbW92ZV9pcnEoaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvbWNhLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL21jYS5jCmluZGV4IDg1Nzc3NGIuLjY1NDZkYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9tY2EuYwpAQCAtMzcsNiArMzcsMTEgQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNhbGxiYWNrIHJvdXRpbmUgdGhhdCBTQUwgY2FsbHMgdG8gbG9nIGVycm9yCiAgKiBpbmZvIGZvciBwbGF0Zm9ybSBlcnJvcnMuICBidWYgaXMgYXBwZW5kZWQgdG8gc25fb2VtZGF0YSwgcmVzaXppbmcgYXMKICAqIHJlcXVpcmVkLgorICogTm90ZTogdGhpcyBpcyBhIFNBTCB0byBPUyBjYWxsYmFjaywgcnVubmluZyB1bmRlciB0aGUgc2FtZSBydWxlcyBhcyB0aGUgU0FMCisgKiBjb2RlLiAgU0FMIGNhbGxzIGFyZSBydW4gd2l0aCBwcmVlbXB0IGRpc2FibGVkIHNvIHRoaXMgcm91dGluZSBtdXN0IG5vdAorICogc2xlZXAuICB2bWFsbG9jIGNhbiBzbGVlcCBzbyBwcmludF9ob29rIGNhbm5vdCByZXNpemUgdGhlIG91dHB1dCBidWZmZXIKKyAqIGl0c2VsZiwgaW5zdGVhZCBpdCBtdXN0IHNldCB0aGUgcmVxdWlyZWQgc2l6ZSBhbmQgcmV0dXJuIHRvIGxldCB0aGUgY2FsbGVyCisgKiByZXNpemUgdGhlIGJ1ZmZlciB0aGVuIHJlZHJpdmUgdGhlIFNBTCBjYWxsLgogICovCiBzdGF0aWMgaW50IHByaW50X2hvb2soY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CkBAIC00NywxOCArNTIsOCBAQAogCXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKIAlsZW4gPSBzdHJsZW4oYnVmKTsKLQl3aGlsZSAoKnNuX29lbWRhdGFfc2l6ZSArIGxlbiArIDEgPiBzbl9vZW1kYXRhX2J1ZnNpemUpIHsKLQkJdTggKm5ld2J1ZiA9IHZtYWxsb2Moc25fb2VtZGF0YV9idWZzaXplICs9IDEwMDApOwotCQlpZiAoIW5ld2J1ZikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGV4dGVuZCBzbl9vZW1kYXRhXG4iLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQltZW1jcHkobmV3YnVmLCAqc25fb2VtZGF0YSwgKnNuX29lbWRhdGFfc2l6ZSk7Ci0JCXZmcmVlKCpzbl9vZW1kYXRhKTsKLQkJKnNuX29lbWRhdGEgPSBuZXdidWY7Ci0JfQotCW1lbWNweSgqc25fb2VtZGF0YSArICpzbl9vZW1kYXRhX3NpemUsIGJ1ZiwgbGVuICsgMSk7CisJaWYgKCpzbl9vZW1kYXRhX3NpemUgKyBsZW4gPD0gc25fb2VtZGF0YV9idWZzaXplKQorCQltZW1jcHkoKnNuX29lbWRhdGEgKyAqc25fb2VtZGF0YV9zaXplLCBidWYsIGxlbik7CiAJKnNuX29lbWRhdGFfc2l6ZSArPSBsZW47CiAJcmV0dXJuIDA7CiB9CkBAIC05OCw3ICs5MywyMCBAQAogCXNuX29lbWRhdGEgPSBvZW1kYXRhOwogCXNuX29lbWRhdGFfc2l6ZSA9IG9lbWRhdGFfc2l6ZTsKIAlzbl9vZW1kYXRhX2J1ZnNpemUgPSAwOwotCWlhNjRfc25fcGxhdF9zcGVjaWZpY19lcnJfcHJpbnQocHJpbnRfaG9vaywgKGNoYXIgKilzZWN0X2hlYWRlcik7CisJKnNuX29lbWRhdGFfc2l6ZSA9IFBBR0VfU0laRTsJLyogZmlyc3QgZ3Vlc3MgYXQgaG93IG11Y2ggZGF0YSB3aWxsIGJlIGdlbmVyYXRlZCAqLworCXdoaWxlICgqc25fb2VtZGF0YV9zaXplID4gc25fb2VtZGF0YV9idWZzaXplKSB7CisJCXU4ICpuZXdidWYgPSB2bWFsbG9jKCpzbl9vZW1kYXRhX3NpemUpOworCQlpZiAoIW5ld2J1ZikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGV4dGVuZCBzbl9vZW1kYXRhXG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQl2ZnJlZSgqc25fb2VtZGF0YSk7CisJCSpzbl9vZW1kYXRhID0gbmV3YnVmOworCQlzbl9vZW1kYXRhX2J1ZnNpemUgPSAqc25fb2VtZGF0YV9zaXplOworCQkqc25fb2VtZGF0YV9zaXplID0gMDsKKwkJaWE2NF9zbl9wbGF0X3NwZWNpZmljX2Vycl9wcmludChwcmludF9ob29rLCAoY2hhciAqKXNlY3RfaGVhZGVyKTsKKwl9CiAJdXAoJnNuX29lbWRhdGFfbXV0ZXgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCmluZGV4IGYwMzA2YjUuLjRmYjQ0OTggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKQEAgLTMsNyArMyw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAxLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDEtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2FsLmg+CkBAIC03Miw2ICs3MywxMiBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IHNuX2h1Yl9pbmZvX3MsIF9fc25faHViX2luZm8pOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKF9fc25faHViX2luZm8pOwogCitERUZJTkVfUEVSX0NQVShzaG9ydCwgX19zbl9jbm9kZWlkX3RvX25hc2lkW01BWF9OVU1OT0RFU10pOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKF9fc25fY25vZGVpZF90b19uYXNpZCk7CisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBub2RlcGRhX3MgKiwgX19zbl9ub2RlcGRhKTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChfX3NuX25vZGVwZGEpOworCiBwYXJ0aWRfdCBzbl9wYXJ0aWQgPSAtMTsKIEVYUE9SVF9TWU1CT0woc25fcGFydGlkKTsKIGNoYXIgc25fc3lzdGVtX3NlcmlhbF9udW1iZXJfc3RyaW5nWzEyOF07CkBAIC0zNTMsNiArMzYwLDE0IEBACiAJc2NyZWVuX2luZm8gPSBzbl9zY3JlZW5faW5mbzsKIAogCXNuX3RpbWVyX2luaXQoKTsKKworCS8qCisJICogc2V0IHBtX3Bvd2VyX29mZiB0byBhIFNBTCBjYWxsIHRvIGFsbG93CisJICogc24gbWFjaGluZXMgdG8gcG93ZXIgb2ZmLiBUaGUgU0FMIGNhbGwgY2FuIGJlIHJlcGxhY2VkCisJICogYnkgYW4gQUNQSSBpbnRlcmZhY2UgY2FsbCB3aGVuIEFDUEkgaXMgZnVsbHkgaW1wbGVtZW50ZWQKKwkgKiBmb3Igc24uCisJICovCisJcG1fcG93ZXJfb2ZmID0gaWE2NF9zbl9wb3dlcl9kb3duOwogfQogCiAvKioKQEAgLTM2NCwxMSArMzc5LDExIEBACiB7CiAJY25vZGVpZF90IGNub2RlOwogCi0JbWVtc2V0KHBkYS0+Y25vZGVpZF90b19uYXNpZF90YWJsZSwgLTEsCi0JICAgICAgIHNpemVvZihwZGEtPmNub2RlaWRfdG9fbmFzaWRfdGFibGUpKTsKKwltZW1zZXQoc25fY25vZGVpZF90b19uYXNpZCwgLTEsCisJCQlzaXplb2YoX19pYTY0X3Blcl9jcHVfdmFyKF9fc25fY25vZGVpZF90b19uYXNpZCkpKTsKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShjbm9kZSkKLQkJcGRhLT5jbm9kZWlkX3RvX25hc2lkX3RhYmxlW2Nub2RlXSA9Ci0JCSAgICBweG1fdG9fbmFzaWQobmlkX3RvX3B4bV9tYXBbY25vZGVdKTsKKwkJc25fY25vZGVpZF90b19uYXNpZFtjbm9kZV0gPQorCQkJCXB4bV90b19uYXNpZChuaWRfdG9fcHhtX21hcFtjbm9kZV0pOwogCiAJbnVtaW9ub2RlcyA9IG51bV9vbmxpbmVfbm9kZXMoKTsKIAlzY2FuX2Zvcl9pb25vZGVzKCk7CkBAIC00NjgsNyArNDgzLDggQEAKIAogCWNub2RlID0gbmFzaWRfdG9fY25vZGVpZChuYXNpZCk7CiAKLQlwZGEtPnBfbm9kZXBkYSA9IG5vZGVwZGFpbmRyW2Nub2RlXTsKKwlzbl9ub2RlcGRhID0gbm9kZXBkYWluZHJbY25vZGVdOworCiAJcGRhLT5sZWRfYWRkcmVzcyA9CiAJICAgICh0eXBlb2YocGRhLT5sZWRfYWRkcmVzcykpIChMRUQwICsgKHNsaWNlIDw8IExFRF9DUFVfU0hJRlQpKTsKIAlwZGEtPmxlZF9zdGF0ZSA9IExFRF9BTFdBWVNfU0VUOwpAQCAtNDc3LDE1ICs0OTMsMTggQEAKIAlwZGEtPmlkbGVfZmxhZyA9IDA7CiAKIAlpZiAoY3B1aWQgIT0gMCkgewotCQltZW1jcHkocGRhLT5jbm9kZWlkX3RvX25hc2lkX3RhYmxlLAotCQkgICAgICAgcGRhY3B1KDApLT5jbm9kZWlkX3RvX25hc2lkX3RhYmxlLAotCQkgICAgICAgc2l6ZW9mKHBkYS0+Y25vZGVpZF90b19uYXNpZF90YWJsZSkpOworCQkvKiBjb3B5IGNwdSAwJ3Mgc25fY25vZGVpZF90b19uYXNpZCB0YWJsZSB0byB0aGlzIGNwdSdzICovCisJCW1lbWNweShzbl9jbm9kZWlkX3RvX25hc2lkLAorCQkgICAgICAgKCZwZXJfY3B1KF9fc25fY25vZGVpZF90b19uYXNpZCwgMCkpLAorCQkgICAgICAgc2l6ZW9mKF9faWE2NF9wZXJfY3B1X3ZhcihfX3NuX2Nub2RlaWRfdG9fbmFzaWQpKSk7CiAJfQogCiAJLyoKIAkgKiBDaGVjayBmb3IgV0FScy4KIAkgKiBPbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSwgb24gQlNQLgotCSAqIEhhcyB0byBiZSBkb25lIGFmdGVyIGxvb3AgYWJvdmUsIGJlY2F1c2UgaXQgdXNlcyBwZGEuY25vZGVpZF90b19uYXNpZF90YWJsZVtpXS4KKwkgKiBIYXMgdG8gYmUgZG9uZSBhZnRlciBsb29wIGFib3ZlLCBiZWNhdXNlIGl0IHVzZXMgdGhpcyBjcHUncworCSAqIHNuX2Nub2RlaWRfdG9fbmFzaWQgdGFibGUgd2hpY2ggd2FzIGp1c3QgaW5pdGlhbGl6ZWQgaWYgdGhpcworCSAqIGlzbid0IGNwdSAwLgogCSAqIEhhcyB0byBiZSBkb25lIGJlZm9yZSBhc3NpZ25tZW50IGJlbG93LgogCSAqLwogCWlmICghd2Fyc19oYXZlX2JlZW5fY2hlY2tlZCkgewpAQCAtNTcxLDggKzU5MCw3IEBACiAJCWJyZCA9IGZpbmRfbGJvYXJkX2FueShicmQsIEtMVFlQRV9TTklBKTsKIAogCQl3aGlsZSAoYnJkKSB7Ci0JCQlwZGEtPmNub2RlaWRfdG9fbmFzaWRfdGFibGVbbnVtaW9ub2Rlc10gPQotCQkJICAgIGJyZC0+YnJkX25hc2lkOworCQkJc25fY25vZGVpZF90b19uYXNpZFtudW1pb25vZGVzXSA9IGJyZC0+YnJkX25hc2lkOwogCQkJcGh5c2ljYWxfbm9kZV9tYXBbYnJkLT5icmRfbmFzaWRdID0gbnVtaW9ub2RlczsKIAkJCXJvb3RfbGJvYXJkW251bWlvbm9kZXNdID0gYnJkOwogCQkJbnVtaW9ub2RlcysrOwpAQCAtNTkzLDggKzYxMSw3IEBACiAJCQkJICAgICAgcm9vdF9sYm9hcmRbbmFzaWRfdG9fY25vZGVpZChuYXNpZCldLAogCQkJCSAgICAgIEtMVFlQRV9USU8pOwogCQl3aGlsZSAoYnJkKSB7Ci0JCQlwZGEtPmNub2RlaWRfdG9fbmFzaWRfdGFibGVbbnVtaW9ub2Rlc10gPQotCQkJICAgIGJyZC0+YnJkX25hc2lkOworCQkJc25fY25vZGVpZF90b19uYXNpZFtudW1pb25vZGVzXSA9IGJyZC0+YnJkX25hc2lkOwogCQkJcGh5c2ljYWxfbm9kZV9tYXBbYnJkLT5icmRfbmFzaWRdID0gbnVtaW9ub2RlczsKIAkJCXJvb3RfbGJvYXJkW251bWlvbm9kZXNdID0gYnJkOwogCQkJbnVtaW9ub2RlcysrOwpAQCAtNjA1LDcgKzYyMiw2IEBACiAJCQlicmQgPSBmaW5kX2xib2FyZF9hbnkoYnJkLCBLTFRZUEVfVElPKTsKIAkJfQogCX0KLQogfQogCiBpbnQKQEAgLTYxNCw3ICs2MzAsOCBAQAogCWxvbmcgY3B1OwogCQogCWZvciAoY3B1PTA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKSAKLQkJaWYgKG5vZGVwZGEtPnBoeXNfY3B1aWRbY3B1XS5uYXNpZCA9PSBuYXNpZCAmJiBub2RlcGRhLT5waHlzX2NwdWlkW2NwdV0uc2xpY2UgPT0gc2xpY2UpCisJCWlmIChjcHVpZF90b19uYXNpZChjcHUpID09IG5hc2lkICYmCisJCQkJCWNwdWlkX3RvX3NsaWNlKGNwdSkgPT0gc2xpY2UpCiAJCQlyZXR1cm4gY3B1OwogCiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwppbmRleCAxOTczNTY0Li44MzNlNzAwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KQEAgLTQzLDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxhc20vc24vbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2dlby5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbjIvc25faHdwZXJmLmg+CisjaW5jbHVkZSA8YXNtL3NuL2FkZHJzLmg+CiAKIHN0YXRpYyB2b2lkICpzbl9od3BlcmZfc2FsaGVhcCA9IE5VTEw7CiBzdGF0aWMgaW50IHNuX2h3cGVyZl9vYmpfY250ID0gMDsKQEAgLTgxLDI2ICs4Myw0NSBAQAogCXJldHVybiBlOwogfQogCitzdGF0aWMgaW50IHNuX2h3cGVyZl9sb2NhdGlvbl90b19icG9zKGNoYXIgKmxvY2F0aW9uLAorCWludCAqcmFjaywgaW50ICpiYXksIGludCAqc2xvdCwgaW50ICpzbGFiKQoreworCWNoYXIgdHlwZTsKKworCS8qIGZpcnN0IHNjYW4gZm9yIGFuIG9sZCBzdHlsZSBnZW9pZCBzdHJpbmcgKi8KKwlpZiAoc3NjYW5mKGxvY2F0aW9uLCAiJTAzZCVjJTAyZCMlZCIsCisJCXJhY2ssICZ0eXBlLCBiYXksIHNsYWIpID09IDQpCisJCSpzbG90ID0gMDsgCisJZWxzZSAvKiBzY2FuIGZvciBhIG5ldyBibGFkZWQgZ2VvaWQgc3RyaW5nICovCisJaWYgKHNzY2FuZihsb2NhdGlvbiwgIiUwM2QlYyUwMmReJTAyZCMlZCIsCisJCXJhY2ssICZ0eXBlLCBiYXksIHNsb3QsIHNsYWIpICE9IDUpCisJCXJldHVybiAtMTsgCisJLyogc3VjY2VzcyAqLworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNuX2h3cGVyZl9nZW9pZF90b19jbm9kZShjaGFyICpsb2NhdGlvbikKIHsKIAlpbnQgY25vZGU7CiAJZ2VvaWRfdCBnZW9pZDsKIAltb2R1bGVpZF90IG1vZHVsZV9pZDsKLQljaGFyIHR5cGU7Ci0JaW50IHJhY2ssIHNsb3QsIHNsYWI7Ci0JaW50IHRoaXNfcmFjaywgdGhpc19zbG90LCB0aGlzX3NsYWI7CisJaW50IHJhY2ssIGJheSwgc2xvdCwgc2xhYjsKKwlpbnQgdGhpc19yYWNrLCB0aGlzX2JheSwgdGhpc19zbG90LCB0aGlzX3NsYWI7CiAKLQlpZiAoc3NjYW5mKGxvY2F0aW9uLCAiJTAzZCVjJTAyZCMlZCIsICZyYWNrLCAmdHlwZSwgJnNsb3QsICZzbGFiKSAhPSA0KQorCWlmIChzbl9od3BlcmZfbG9jYXRpb25fdG9fYnBvcyhsb2NhdGlvbiwgJnJhY2ssICZiYXksICZzbG90LCAmc2xhYikpCiAJCXJldHVybiAtMTsKIAogCWZvciAoY25vZGUgPSAwOyBjbm9kZSA8IG51bWlvbm9kZXM7IGNub2RlKyspIHsKIAkJZ2VvaWQgPSBjbm9kZWlkX2dldF9nZW9pZChjbm9kZSk7CiAJCW1vZHVsZV9pZCA9IGdlb19tb2R1bGUoZ2VvaWQpOwogCQl0aGlzX3JhY2sgPSBNT0RVTEVfR0VUX1JBQ0sobW9kdWxlX2lkKTsKLQkJdGhpc19zbG90ID0gTU9EVUxFX0dFVF9CUE9TKG1vZHVsZV9pZCk7CisJCXRoaXNfYmF5ID0gTU9EVUxFX0dFVF9CUE9TKG1vZHVsZV9pZCk7CisJCXRoaXNfc2xvdCA9IGdlb19zbG90KGdlb2lkKTsKIAkJdGhpc19zbGFiID0gZ2VvX3NsYWIoZ2VvaWQpOwotCQlpZiAocmFjayA9PSB0aGlzX3JhY2sgJiYgc2xvdCA9PSB0aGlzX3Nsb3QgJiYgc2xhYiA9PSB0aGlzX3NsYWIpCisJCWlmIChyYWNrID09IHRoaXNfcmFjayAmJiBiYXkgPT0gdGhpc19iYXkgJiYKKwkJCXNsb3QgPT0gdGhpc19zbG90ICYmIHNsYWIgPT0gdGhpc19zbGFiKSB7CiAJCQlicmVhazsKKwkJfQogCX0KIAogCXJldHVybiBjbm9kZSA8IG51bWlvbm9kZXMgPyBjbm9kZSA6IC0xOwpAQCAtMTUzLDExICsxNzQsMzYgQEAKIAlyZXR1cm4gc2xhYm5hbWU7CiB9CiAKK3N0YXRpYyB2b2lkIHByaW50X3BjaV90b3BvbG9neShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJc3RydWN0IHNuX2h3cGVyZl9vYmplY3RfaW5mbyAqb2JqLCBpbnQgKm9yZGluYWwsCisJdTY0IHJhY2ssIHU2NCBiYXksIHU2NCBzbG90LCB1NjQgc2xhYikKK3sKKwljaGFyICpwMTsKKwljaGFyICpwMjsKKwljaGFyICpwZzsKKworCWlmICghKHBnID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm47IC8qIGlnbm9yZSAqLworCWlmIChpYTY0X3NuX2lvaWZfZ2V0X3BjaV90b3BvbG9neShyYWNrLCBiYXksIHNsb3QsIHNsYWIsCisJCV9fcGEocGcpLCBQQUdFX1NJWkUpID09IFNOX0hXUEVSRl9PUF9PSykgeworCQlmb3IgKHAxPXBnOyAqcDEgJiYgcDEgPCBwZyArIFBBR0VfU0laRTspIHsKKwkJCWlmICghKHAyID0gc3RyY2hyKHAxLCAnXG4nKSkpCisJCQkJYnJlYWs7CisJCQkqcDIgPSAnXDAnOworCQkJc2VxX3ByaW50ZihzLCAicGNpYnVzICVkICVzLSVzXG4iLAorCQkJCSpvcmRpbmFsLCBvYmotPmxvY2F0aW9uLCBwMSk7CisJCQkoKm9yZGluYWwpKys7CisJCQlwMSA9IHAyICsgMTsKKwkJfQorCX0KKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGcpOworfQorCiBzdGF0aWMgaW50IHNuX3RvcG9sb2d5X3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkKQogewogCWludCBzejsKIAlpbnQgcHQ7Ci0JaW50IGU7CisJaW50IGUgPSAwOwogCWludCBpOwogCWludCBqOwogCWNvbnN0IGNoYXIgKnNsYWJuYW1lOwpAQCAtMTY5LDExICsyMTUsNDQgQEAKIAlzdHJ1Y3Qgc25faHdwZXJmX29iamVjdF9pbmZvICpwOwogCXN0cnVjdCBzbl9od3BlcmZfb2JqZWN0X2luZm8gKm9iaiA9IGQ7CS8qIHRoaXMgb2JqZWN0ICovCiAJc3RydWN0IHNuX2h3cGVyZl9vYmplY3RfaW5mbyAqb2JqcyA9IHMtPnByaXZhdGU7IC8qIGFsbCBvYmplY3RzICovCisJaW50IHJhY2ssIGJheSwgc2xvdCwgc2xhYjsKKwl1OCBzaHVidHlwZTsKKwl1OCBzeXN0ZW1fc2l6ZTsKKwl1OCBzaGFyaW5nX3NpemU7CisJdTggcGFydGlkOworCXU4IGNvaGVyOworCXU4IG5hc2lkX3NoaWZ0OworCXU4IHJlZ2lvbl9zaXplOworCXUxNiBuYXNpZF9tYXNrOworCWludCBuYXNpZF9tc2I7CisJaW50IHBjaV9idXNfb3JkaW5hbCA9IDA7CiAKIAlpZiAob2JqID09IG9ianMpIHsKLQkJc2VxX3ByaW50ZihzLCAiIyBzbl90b3BvbG9neSB2ZXJzaW9uIDFcbiIpOworCQlzZXFfcHJpbnRmKHMsICIjIHNuX3RvcG9sb2d5IHZlcnNpb24gMlxuIik7CiAJCXNlcV9wcmludGYocywgIiMgb2JqdHlwZSBvcmRpbmFsIGxvY2F0aW9uIHBhcnRpdGlvbiIKIAkJCSIgW2F0dHJpYnV0ZSB2YWx1ZSBbLCAuLi5dXVxuIik7CisKKwkJaWYgKGlhNjRfc25fZ2V0X3NuX2luZm8oMCwKKwkJCSZzaHVidHlwZSwgJm5hc2lkX21hc2ssICZuYXNpZF9zaGlmdCwgJnN5c3RlbV9zaXplLAorCQkJJnNoYXJpbmdfc2l6ZSwgJnBhcnRpZCwgJmNvaGVyLCAmcmVnaW9uX3NpemUpKQorCQkJQlVHKCk7CisJCWZvciAobmFzaWRfbXNiPTYzOyBuYXNpZF9tc2IgPiAwOyBuYXNpZF9tc2ItLSkgeworCQkJaWYgKCgodTY0KW5hc2lkX21hc2sgPDwgbmFzaWRfc2hpZnQpICYgKDFVTEwgPDwgbmFzaWRfbXNiKSkKKwkJCQlicmVhazsKKwkJfQorCQlzZXFfcHJpbnRmKHMsICJwYXJ0aXRpb24gJXUgJXMgbG9jYWwgIgorCQkJInNodWJ0eXBlICVzLCAiCisJCQkibmFzaWRfbWFzayAweCUwMTZseCwgIgorCQkJIm5hc2lkX2JpdHMgJWQ6JWQsICIKKwkJCSJzeXN0ZW1fc2l6ZSAlZCwgIgorCQkJInNoYXJpbmdfc2l6ZSAlZCwgIgorCQkJImNvaGVyZW5jeV9kb21haW4gJWQsICIKKwkJCSJyZWdpb25fc2l6ZSAlZFxuIiwKKworCQkJcGFydGlkLCBzeXN0ZW1fdXRzbmFtZS5ub2RlbmFtZSwKKwkJCXNodWJ0eXBlID8gInNodWIyIiA6ICJzaHViMSIsIAorCQkJKHU2NCluYXNpZF9tYXNrIDw8IG5hc2lkX3NoaWZ0LCBuYXNpZF9tc2IsIG5hc2lkX3NoaWZ0LAorCQkJc3lzdGVtX3NpemUsIHNoYXJpbmdfc2l6ZSwgY29oZXIsIHJlZ2lvbl9zaXplKTsKIAl9CiAKIAlpZiAoU05fSFdQRVJGX0ZPUkVJR04ob2JqKSkgewpAQCAtMTgxLDcgKzI2MCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWZvciAoaSA9IDA7IG9iai0+bmFtZVtpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFNOX0hXUEVSRl9NQVhTVFJJTkcgJiYgb2JqLT5uYW1lW2ldOyBpKyspIHsKIAkJaWYgKG9iai0+bmFtZVtpXSA9PSAnICcpCiAJCQlvYmotPm5hbWVbaV0gPSAnXyc7CiAJfQpAQCAtMjIxLDYgKzMwMCwxNyBAQAogCQkJCXNlcV9wdXRjKHMsICdcbicpOwogCQkJfQogCQl9CisKKwkJLyoKKwkJICogUENJIGJ1c3NlcyBhdHRhY2hlZCB0byB0aGlzIG5vZGUsIGlmIGFueQorCQkgKi8KKwkJaWYgKHNuX2h3cGVyZl9sb2NhdGlvbl90b19icG9zKG9iai0+bG9jYXRpb24sCisJCQkmcmFjaywgJmJheSwgJnNsb3QsICZzbGFiKSkgeworCQkJLyogZXhwb3J0IHBjaSBidXMgaW5mbyAqLworCQkJcHJpbnRfcGNpX3RvcG9sb2d5KHMsIG9iaiwgJnBjaV9idXNfb3JkaW5hbCwKKwkJCQlyYWNrLCBiYXksIHNsb3QsIHNsYWIpOworCisJCX0KIAl9CiAKIAlpZiAob2JqLT5wb3J0cykgewpAQCAtMzk3LDYgKzQ4Nyw5IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTTl9IV1BFUkZfT1BfQlVTWToKKwkJZSA9IC1FQlVTWTsKKwkJYnJlYWs7CisKIAljYXNlIFNOX0hXUEVSRl9PUF9SRUNPTkZJR1VSRToKIAkJZSA9IC1FQUdBSU47CiAJCWJyZWFrOwpAQCAtNTQ5LDYgKzY0Miw3IEBACiAJCXIgPSBzbl9od3BlcmZfb3BfY3B1KCZvcF9pbmZvKTsKIAkJaWYgKHIpIHsKIAkJCXIgPSBzbl9od3BlcmZfbWFwX2VycihyKTsKKwkJCWEudjAgPSB2MDsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3Rpb2N4LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3Rpb2N4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5YjVmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvdGlvY3guYwpAQCAtMCwwICsxLDU1MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc24vc25fc2FsLmg+CisjaW5jbHVkZSA8YXNtL3NuL2FkZHJzLmg+CisjaW5jbHVkZSA8YXNtL3NuL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NuL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NodWJpby5oPgorI2luY2x1ZGUgPGFzbS9zbi90aW9jeC5oPgorI2luY2x1ZGUgPGFzbS9zbi9sMS5oPgorI2luY2x1ZGUgPGFzbS9zbi9tb2R1bGUuaD4KKyNpbmNsdWRlICJ0aW8uaCIKKyNpbmNsdWRlICJ4dGFsay94d2lkZ2V0ZGV2LmgiCisjaW5jbHVkZSAieHRhbGsvaHViZGV2LmgiCisKKyNkZWZpbmUgQ1hfREVWX05PTkUgMAorI2RlZmluZSBERVZJQ0VfTkFNRSAidGlvY3giCisjZGVmaW5lIFdJREdFVF9JRCAwCisjZGVmaW5lIFRJT0NYX0RFQlVHIDAKKworI2lmIFRJT0NYX0RFQlVHCisjZGVmaW5lIERCRyhmbXQuLi4pICAgIHByaW50ayhLRVJOX0FMRVJUIGZtdCkKKyNlbHNlCisjZGVmaW5lIERCRyhmbXQuLi4pCisjZW5kaWYKKworc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfY3hkZXZfY29udHJvbDsKKworLyoqCisgKiB0aW9jeF9tYXRjaCAtIFRyeSB0byBtYXRjaCBkcml2ZXIgaWQgbGlzdCB3aXRoIGRldmljZS4KKyAqIEBkZXY6IGRldmljZSBwb2ludGVyCisgKiBAZHJ2OiBkcml2ZXIgcG9pbnRlcgorICoKKyAqIFJldHVybnMgMSBpZiBtYXRjaCwgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdGlvY3hfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCBjeF9kZXYgKmN4X2RldiA9IHRvX2N4X2RldihkZXYpOworCXN0cnVjdCBjeF9kcnYgKmN4X2RydiA9IHRvX2N4X2RyaXZlcihkcnYpOworCWNvbnN0IHN0cnVjdCBjeF9kZXZpY2VfaWQgKmlkcyA9IGN4X2Rydi0+aWRfdGFibGU7CisKKwlpZiAoIWlkcykKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoaWRzLT5wYXJ0X251bSkgeworCQlpZiAoaWRzLT5wYXJ0X251bSA9PSBjeF9kZXYtPmN4X2lkLnBhcnRfbnVtKQorCQkJcmV0dXJuIDE7CisJCWlkcysrOworCX0KKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IHRpb2N4X2hvdHBsdWcoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICoqZW52cCwgaW50IG51bV9lbnZwLAorCQkJIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKQoreworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCB0aW9jeF9idXNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJa2ZyZWUodG9fY3hfZGV2KGRldikpOworfQorCitzdHJ1Y3QgYnVzX3R5cGUgdGlvY3hfYnVzX3R5cGUgPSB7CisJLm5hbWUgPSAidGlvY3giLAorCS5tYXRjaCA9IHRpb2N4X21hdGNoLAorCS5ob3RwbHVnID0gdGlvY3hfaG90cGx1ZywKK307CisKKy8qKgorICogY3hfZGV2aWNlX21hdGNoIC0gRmluZCBjeF9kZXZpY2UgaW4gdGhlIGlkIHRhYmxlLgorICogQGlkczogaWQgdGFibGUgZnJvbSBkcml2ZXIKKyAqIEBjeF9kZXZpY2U6IHBhcnQvbWZnIGlkIGZvciB0aGUgZGV2aWNlCisgKgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGN4X2RldmljZV9pZCAqY3hfZGV2aWNlX21hdGNoKGNvbnN0IHN0cnVjdCBjeF9kZXZpY2VfaWQKKwkJCQkJCSAgKmlkcywKKwkJCQkJCSAgc3RydWN0IGN4X2RldiAqY3hfZGV2aWNlKQoreworCS8qCisJICogTk9URVM6IFdlIG1heSB3YW50IHRvIGNoZWNrIGZvciBDWF9BTllfSUQgdG9vLgorCSAqICAgICAgICBEbyB3ZSB3YW50IHRvIG1hdGNoIGFnYWluc3QgbmFzaWQgdG9vPworCSAqICAgICAgICBDWF9ERVZfTk9ORSA9PSAwLCBpZiB0aGUgZHJpdmVyIHRyaWVzIHRvIHJlZ2lzdGVyIGZvcgorCSAqICAgICAgICBwYXJ0L21mZyA9PSAwIHdlIHNob3VsZCByZXR1cm4gbm8tbWF0Y2ggKE5VTEwpIGhlcmUuCisJICovCisJd2hpbGUgKGlkcy0+cGFydF9udW0gJiYgaWRzLT5tZmdfbnVtKSB7CisJCWlmIChpZHMtPnBhcnRfbnVtID09IGN4X2RldmljZS0+Y3hfaWQucGFydF9udW0gJiYKKwkJICAgIGlkcy0+bWZnX251bSA9PSBjeF9kZXZpY2UtPmN4X2lkLm1mZ19udW0pCisJCQlyZXR1cm4gaWRzOworCQlpZHMrKzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBjeF9kZXZpY2VfcHJvYmUgLSBMb29rIGZvciBtYXRjaGluZyBkZXZpY2UuCisgKgkJCUNhbGwgZHJpdmVyIHByb2JlIHJvdXRpbmUgaWYgZm91bmQuCisgKiBAY3hfZHJpdmVyOiBkcml2ZXIgdGFibGUgKGN4X2RydiBzdHJ1Y3QpIGZyb20gZHJpdmVyCisgKiBAY3hfZGV2aWNlOiBwYXJ0L21mZyBpZCBmb3IgdGhlIGRldmljZQorICovCitzdGF0aWMgaW50IGN4X2RldmljZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGN4X2RldmljZV9pZCAqaWQ7CisJc3RydWN0IGN4X2RydiAqY3hfZHJ2ID0gdG9fY3hfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgY3hfZGV2ICpjeF9kZXYgPSB0b19jeF9kZXYoZGV2KTsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKCFjeF9kZXYtPmRyaXZlciAmJiBjeF9kcnYtPnByb2JlKSB7CisJCWlkID0gY3hfZGV2aWNlX21hdGNoKGN4X2Rydi0+aWRfdGFibGUsIGN4X2Rldik7CisJCWlmIChpZCkgeworCQkJaWYgKChlcnJvciA9IGN4X2Rydi0+cHJvYmUoY3hfZGV2LCBpZCkpIDwgMCkKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQllbHNlCisJCQkJY3hfZGV2LT5kcml2ZXIgPSBjeF9kcnY7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogY3hfZHJpdmVyX3JlbW92ZSAtIFJlbW92ZSBkcml2ZXIgZnJvbSBkZXZpY2Ugc3RydWN0LgorICogQGRldjogZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgY3hfZHJpdmVyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGN4X2RldiAqY3hfZGV2ID0gdG9fY3hfZGV2KGRldik7CisJc3RydWN0IGN4X2RydiAqY3hfZHJ2ID0gY3hfZGV2LT5kcml2ZXI7CisJaWYgKGN4X2Rydi0+cmVtb3ZlKQorCQljeF9kcnYtPnJlbW92ZShjeF9kZXYpOworCWN4X2Rldi0+ZHJpdmVyID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjeF9kcml2ZXJfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgZHJpdmVyLgorICogQGN4X2RyaXZlcjogZHJpdmVyIHRhYmxlIChjeF9kcnYgc3RydWN0KSBmcm9tIGRyaXZlcgorICogCisgKiBDYWxsZWQgZnJvbSB0aGUgZHJpdmVyIGluaXQgcm91dGluZSB0byByZWdpc3RlciBhIGRyaXZlci4KKyAqIFRoZSBjeF9kcnYgc3RydWN0IGNvbnRhaW5zIHRoZSBkcml2ZXIgbmFtZSwgYSBwb2ludGVyIHRvCisgKiBhIHRhYmxlIG9mIHBhcnQvbWZnIG51bWJlcnMgYW5kIGEgcG9pbnRlciB0byB0aGUgZHJpdmVyJ3MKKyAqIHByb2JlL2F0dGFjaCByb3V0aW5lLgorICovCitpbnQgY3hfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBjeF9kcnYgKmN4X2RyaXZlcikKK3sKKwljeF9kcml2ZXItPmRyaXZlci5uYW1lID0gY3hfZHJpdmVyLT5uYW1lOworCWN4X2RyaXZlci0+ZHJpdmVyLmJ1cyA9ICZ0aW9jeF9idXNfdHlwZTsKKwljeF9kcml2ZXItPmRyaXZlci5wcm9iZSA9IGN4X2RldmljZV9wcm9iZTsKKwljeF9kcml2ZXItPmRyaXZlci5yZW1vdmUgPSBjeF9kcml2ZXJfcmVtb3ZlOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmY3hfZHJpdmVyLT5kcml2ZXIpOworfQorCisvKioKKyAqIGN4X2RyaXZlcl91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlciB0aGUgZHJpdmVyLgorICogQGN4X2RyaXZlcjogZHJpdmVyIHRhYmxlIChjeF9kcnYgc3RydWN0KSBmcm9tIGRyaXZlcgorICovCitpbnQgY3hfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGN4X2RydiAqY3hfZHJpdmVyKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZjeF9kcml2ZXItPmRyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY3hfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgYSBkZXZpY2UuCisgKiBAbmFzaWQ6IGRldmljZSdzIG5hc2lkCisgKiBAcGFydF9udW06IGRldmljZSdzIHBhcnQgbnVtYmVyCisgKiBAbWZnX251bTogZGV2aWNlJ3MgbWFudWZhY3R1cmVyIG51bWJlcgorICogQGh1YmRldjogaHViIGluZm8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlCisgKgorICovCitpbnQKK2N4X2RldmljZV9yZWdpc3RlcihuYXNpZF90IG5hc2lkLCBpbnQgcGFydF9udW0sIGludCBtZmdfbnVtLAorCQkgICBzdHJ1Y3QgaHViZGV2X2luZm8gKmh1YmRldikKK3sKKwlzdHJ1Y3QgY3hfZGV2ICpjeF9kZXY7CisKKwljeF9kZXYgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY3hfZGV2KSwgR0ZQX0tFUk5FTCk7CisJREJHKCJjeF9kZXY9IDB4JXBcbiIsIGN4X2Rldik7CisJaWYgKGN4X2RldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWN4X2Rldi0+Y3hfaWQucGFydF9udW0gPSBwYXJ0X251bTsKKwljeF9kZXYtPmN4X2lkLm1mZ19udW0gPSBtZmdfbnVtOworCWN4X2Rldi0+Y3hfaWQubmFzaWQgPSBuYXNpZDsKKwljeF9kZXYtPmh1YmRldiA9IGh1YmRldjsKKworCWN4X2Rldi0+ZGV2LnBhcmVudCA9IE5VTEw7CisJY3hfZGV2LT5kZXYuYnVzID0gJnRpb2N4X2J1c190eXBlOworCWN4X2Rldi0+ZGV2LnJlbGVhc2UgPSB0aW9jeF9idXNfcmVsZWFzZTsKKwlzbnByaW50ZihjeF9kZXYtPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAiJWQuMHgleCIsCisJCSBjeF9kZXYtPmN4X2lkLm5hc2lkLCBjeF9kZXYtPmN4X2lkLnBhcnRfbnVtKTsKKwlkZXZpY2VfcmVnaXN0ZXIoJmN4X2Rldi0+ZGV2KTsKKwlnZXRfZGV2aWNlKCZjeF9kZXYtPmRldik7CisKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmN4X2Rldi0+ZGV2LCAmZGV2X2F0dHJfY3hkZXZfY29udHJvbCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjeF9kZXZpY2VfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXIgYSBkZXZpY2UuCisgKiBAY3hfZGV2OiBwYXJ0L21mZyBpZCBmb3IgdGhlIGRldmljZQorICovCitpbnQgY3hfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGN4X2RldiAqY3hfZGV2KQoreworCXB1dF9kZXZpY2UoJmN4X2Rldi0+ZGV2KTsKKwlkZXZpY2VfdW5yZWdpc3RlcigmY3hfZGV2LT5kZXYpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGN4X2RldmljZV9yZWxvYWQgLSBSZWxvYWQgdGhlIGRldmljZS4KKyAqIEBuYXNpZDogZGV2aWNlJ3MgbmFzaWQKKyAqIEBwYXJ0X251bTogZGV2aWNlJ3MgcGFydCBudW1iZXIKKyAqIEBtZmdfbnVtOiBkZXZpY2UncyBtYW51ZmFjdHVyZXIgbnVtYmVyCisgKgorICogUmVtb3ZlIHRoZSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoICduYXNpZCcgZnJvbSBkZXZpY2UgbGlzdCBhbmQgdGhlbgorICogY2FsbCBkZXZpY2UtcmVnaXN0ZXIgd2l0aCB0aGUgZ2l2ZW4gcGFydC9tZmcgbnVtYmVycy4KKyAqLworc3RhdGljIGludCBjeF9kZXZpY2VfcmVsb2FkKHN0cnVjdCBjeF9kZXYgKmN4X2RldikKK3sKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmN4X2Rldi0+ZGV2LCAmZGV2X2F0dHJfY3hkZXZfY29udHJvbCk7CisJY3hfZGV2aWNlX3VucmVnaXN0ZXIoY3hfZGV2KTsKKwlyZXR1cm4gY3hfZGV2aWNlX3JlZ2lzdGVyKGN4X2Rldi0+Y3hfaWQubmFzaWQsIGN4X2Rldi0+Y3hfaWQucGFydF9udW0sCisJCQkJICBjeF9kZXYtPmN4X2lkLm1mZ19udW0sIGN4X2Rldi0+aHViZGV2KTsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdCB0aW9jeF9pbnRyX2FsbG9jKG5hc2lkX3QgbmFzaWQsIGludCB3aWRnZXQsCisJCQkJCXU2NCBzbl9pcnFfaW5mbywKKwkJCQkJaW50IHJlcV9pcnEsIG5hc2lkX3QgcmVxX25hc2lkLAorCQkJCQlpbnQgcmVxX3NsaWNlKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcnY7CisJcnYuc3RhdHVzID0gMDsKKwlydi52MCA9IDA7CisKKwlpYTY0X3NhbF9vZW1jYWxsX25vbG9jaygmcnYsIFNOX1NBTF9JT0lGX0lOVEVSUlVQVCwKKwkJCQlTQUxfSU5UUl9BTExPQywgbmFzaWQsCisJCQkJd2lkZ2V0LCBzbl9pcnFfaW5mbywgcmVxX2lycSwKKwkJCQlyZXFfbmFzaWQsIHJlcV9zbGljZSk7CisJcmV0dXJuIHJ2LnN0YXR1czsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRpb2N4X2ludHJfZnJlZShuYXNpZF90IG5hc2lkLCBpbnQgd2lkZ2V0LAorCQkJCSAgIHN0cnVjdCBzbl9pcnFfaW5mbyAqc25faXJxX2luZm8pCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBydjsKKwlydi5zdGF0dXMgPSAwOworCXJ2LnYwID0gMDsKKworCWlhNjRfc2FsX29lbWNhbGxfbm9sb2NrKCZydiwgU05fU0FMX0lPSUZfSU5URVJSVVBULAorCQkJCVNBTF9JTlRSX0ZSRUUsIG5hc2lkLAorCQkJCXdpZGdldCwgc25faXJxX2luZm8tPmlycV9pcnEsCisJCQkJc25faXJxX2luZm8tPmlycV9jb29raWUsIDAsIDApOworfQorCitzdHJ1Y3Qgc25faXJxX2luZm8gKnRpb2N4X2lycV9hbGxvYyhuYXNpZF90IG5hc2lkLCBpbnQgd2lkZ2V0LCBpbnQgaXJxLAorCQkJCSAgICBuYXNpZF90IHJlcV9uYXNpZCwgaW50IHNsaWNlKQoreworCXN0cnVjdCBzbl9pcnFfaW5mbyAqc25faXJxX2luZm87CisJaW50IHN0YXR1czsKKwlpbnQgc25faXJxX3NpemUgPSBzaXplb2Yoc3RydWN0IHNuX2lycV9pbmZvKTsKKworCWlmICgobmFzaWQgJiAxKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXNuX2lycV9pbmZvID0ga21hbGxvYyhzbl9pcnFfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNuX2lycV9pbmZvID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KHNuX2lycV9pbmZvLCAweDAsIHNuX2lycV9zaXplKTsKKworCXN0YXR1cyA9IHRpb2N4X2ludHJfYWxsb2MobmFzaWQsIHdpZGdldCwgX19wYShzbl9pcnFfaW5mbyksIGlycSwKKwkJCQkgIHJlcV9uYXNpZCwgc2xpY2UpOworCWlmIChzdGF0dXMpIHsKKwkJa2ZyZWUoc25faXJxX2luZm8pOworCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgeworCQlyZXR1cm4gc25faXJxX2luZm87CisJfQorfQorCit2b2lkIHRpb2N4X2lycV9mcmVlKHN0cnVjdCBzbl9pcnFfaW5mbyAqc25faXJxX2luZm8pCit7CisJdWludDY0X3QgYnJpZGdlID0gKHVpbnQ2NF90KSBzbl9pcnFfaW5mby0+aXJxX2JyaWRnZTsKKwluYXNpZF90IG5hc2lkID0gTkFTSURfR0VUKGJyaWRnZSk7CisJaW50IHdpZGdldDsKKworCWlmIChuYXNpZCAmIDEpIHsKKwkJd2lkZ2V0ID0gVElPX1NXSU5fV0lER0VUTlVNKGJyaWRnZSk7CisJCXRpb2N4X2ludHJfZnJlZShuYXNpZCwgd2lkZ2V0LCBzbl9pcnFfaW5mbyk7CisJCWtmcmVlKHNuX2lycV9pbmZvKTsKKwl9Cit9CisKK3VpbnQ2NF90IHRpb2N4X2RtYV9hZGRyKHVpbnQ2NF90IGFkZHIpCit7CisJcmV0dXJuIFBIWVNfVE9fVElPRE1BKGFkZHIpOworfQorCit1aW50NjRfdCB0aW9jeF9zd2luX2Jhc2UoaW50IG5hc2lkKQoreworCXJldHVybiBUSU9fU1dJTl9CQVNFKG5hc2lkLCBUSU9DWF9DT1JFTEVUKTsKK30KKworRVhQT1JUX1NZTUJPTChjeF9kcml2ZXJfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTChjeF9kcml2ZXJfdW5yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKGN4X2RldmljZV9yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKGN4X2RldmljZV91bnJlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0wodGlvY3hfaXJxX2FsbG9jKTsKK0VYUE9SVF9TWU1CT0wodGlvY3hfaXJxX2ZyZWUpOworRVhQT1JUX1NZTUJPTCh0aW9jeF9idXNfdHlwZSk7CitFWFBPUlRfU1lNQk9MKHRpb2N4X2RtYV9hZGRyKTsKK0VYUE9SVF9TWU1CT0wodGlvY3hfc3dpbl9iYXNlKTsKKworc3RhdGljIHZvaWQgdGlvX2NvbnZleW9yX3NldChuYXNpZF90IG5hc2lkLCBpbnQgZW5hYmxlX2ZsYWcpCit7CisJdWludDY0X3QgaWNlX2ZyejsKKwl1aW50NjRfdCBkaXNhYmxlX2NiID0gKDF1bGwgPDwgNjEpOworCisJaWYgKCEobmFzaWQgJiAxKSkKKwkJcmV0dXJuOworCisJaWNlX2ZyeiA9IFJFTU9URV9IVUJfTChuYXNpZCwgVElPX0lDRV9GUlpfQ0ZHKTsKKwlpZiAoZW5hYmxlX2ZsYWcpIHsKKwkJaWYgKCEoaWNlX2ZyeiAmIGRpc2FibGVfY2IpKQkvKiBhbHJlYWR5IGVuYWJsZWQgKi8KKwkJCXJldHVybjsKKwkJaWNlX2ZyeiAmPSB+ZGlzYWJsZV9jYjsKKwl9IGVsc2UgeworCQlpZiAoaWNlX2ZyeiAmIGRpc2FibGVfY2IpCS8qIGFscmVhZHkgZGlzYWJsZWQgKi8KKwkJCXJldHVybjsKKwkJaWNlX2ZyeiB8PSBkaXNhYmxlX2NiOworCX0KKwlEQkcoS0VSTl9BTEVSVCAiVElPX0lDRV9GUlpfQ0ZHPSAweCVseFxuIiwgaWNlX2Zyeik7CisJUkVNT1RFX0hVQl9TKG5hc2lkLCBUSU9fSUNFX0ZSWl9DRkcsIGljZV9mcnopOworfQorCisjZGVmaW5lIHRpb19jb252ZXlvcl9lbmFibGUobmFzaWQpIHRpb19jb252ZXlvcl9zZXQobmFzaWQsIDEpCisjZGVmaW5lIHRpb19jb252ZXlvcl9kaXNhYmxlKG5hc2lkKSB0aW9fY29udmV5b3Jfc2V0KG5hc2lkLCAwKQorCitzdGF0aWMgdm9pZCB0aW9fY29yZWxldF9yZXNldChuYXNpZF90IG5hc2lkLCBpbnQgY29yZWxldCkKK3sKKwlpZiAoIShuYXNpZCAmIDEpKQorCQlyZXR1cm47CisKKwlSRU1PVEVfSFVCX1MobmFzaWQsIFRJT19JQ0VfUE1JX1RYX0NGRywgMSA8PCBjb3JlbGV0KTsKKwl1ZGVsYXkoMjAwMCk7CisJUkVNT1RFX0hVQl9TKG5hc2lkLCBUSU9fSUNFX1BNSV9UWF9DRkcsIDApOworCXVkZWxheSgyMDAwKTsKK30KKworc3RhdGljIGludCB0aW9jeF9idGNoYXJfZ2V0KGludCBuYXNpZCkKK3sKKwltb2R1bGVpZF90IG1vZHVsZV9pZDsKKwlnZW9pZF90IGdlb2lkOworCWludCBjbm9kZWlkOworCisJY25vZGVpZCA9IG5hc2lkX3RvX2Nub2RlaWQobmFzaWQpOworCWdlb2lkID0gY25vZGVpZF9nZXRfZ2VvaWQoY25vZGVpZCk7CisJbW9kdWxlX2lkID0gZ2VvX21vZHVsZShnZW9pZCk7CisJcmV0dXJuIE1PRFVMRV9HRVRfQlRDSEFSKG1vZHVsZV9pZCk7Cit9CisKK3N0YXRpYyBpbnQgaXNfZnBnYV9icmljayhpbnQgbmFzaWQpCit7CisJc3dpdGNoICh0aW9jeF9idGNoYXJfZ2V0KG5hc2lkKSkgeworCWNhc2UgTDFfQlJJQ0tUWVBFX1NBOgorCWNhc2UgTDFfQlJJQ0tUWVBFX0FUSEVOQToKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJpdHN0cmVhbV9sb2FkZWQobmFzaWRfdCBuYXNpZCkKK3sKKwl1aW50NjRfdCBjeF9jcmVkaXRzOworCisJY3hfY3JlZGl0cyA9IFJFTU9URV9IVUJfTChuYXNpZCwgVElPX0lDRV9QTUlfVFhfRFlOX0NSRURJVF9TVEFUX0NCMyk7CisJY3hfY3JlZGl0cyAmPSBUSU9fSUNFX1BNSV9UWF9EWU5fQ1JFRElUX1NUQVRfQ0IzX0NSRURJVF9DTlRfTUFTSzsKKwlEQkcoImN4X2NyZWRpdHM9IDB4JWx4XG4iLCBjeF9jcmVkaXRzKTsKKworCXJldHVybiAoY3hfY3JlZGl0cyA9PSAweGYpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdGlvY3hfcmVsb2FkKHN0cnVjdCBjeF9kZXYgKmN4X2RldikKK3sKKwlpbnQgcGFydF9udW0gPSBDWF9ERVZfTk9ORTsKKwlpbnQgbWZnX251bSA9IENYX0RFVl9OT05FOworCW5hc2lkX3QgbmFzaWQgPSBjeF9kZXYtPmN4X2lkLm5hc2lkOworCisJaWYgKGJpdHN0cmVhbV9sb2FkZWQobmFzaWQpKSB7CisJCXVpbnQ2NF90IGN4X2lkOworCisJCWN4X2lkID0KKwkJICAgICoodm9sYXRpbGUgaW50MzJfdCAqKShUSU9fU1dJTl9CQVNFKG5hc2lkLCBUSU9DWF9DT1JFTEVUKSArCisJCQkJCSAgV0lER0VUX0lEKTsKKwkJcGFydF9udW0gPSBYV0lER0VUX1BBUlRfTlVNKGN4X2lkKTsKKwkJbWZnX251bSA9IFhXSURHRVRfTUZHX05VTShjeF9pZCk7CisJCURCRygicGFydD0gMHgleCwgbWZnPSAweCV4XG4iLCBwYXJ0X251bSwgbWZnX251bSk7CisJCS8qIGp1c3QgaWdub3JlIGl0IGlmIGl0J3MgYSBDRSAqLworCQlpZiAocGFydF9udW0gPT0gVElPX0NFX0FTSUNfUEFSVE5VTSkKKwkJCXJldHVybiAwOworCX0KKworCWN4X2Rldi0+Y3hfaWQucGFydF9udW0gPSBwYXJ0X251bTsKKwljeF9kZXYtPmN4X2lkLm1mZ19udW0gPSBtZmdfbnVtOworCisJLyoKKwkgKiBEZWxldGUgb2xkIGRldmljZSBhbmQgcmVnaXN0ZXIgdGhlIG5ldyBvbmUuICBJdCdzIG9rIGlmCisJICogcGFydF9udW0vbWZnX251bSA9PSBDWF9ERVZfTk9ORS4gIFdlIHdhbnQgdG8gcmVnaXN0ZXIKKwkgKiBkZXZpY2VzIGluIHRoZSB0YWJsZSBldmVuIGlmIGEgYml0c3RyZWFtIGlzbid0IGxvYWRlZC4KKwkgKiBUaGF0IGFsbG93cyB1c2UgdG8gc2VlIHRoYXQgYSBiaXRzdHJlYW0gaXNuJ3QgbG9hZGVkIHZpYQorCSAqIFRJT0NYX0lPQ1RMX0RFVl9MSVNULgorCSAqLworCXJldHVybiBjeF9kZXZpY2VfcmVsb2FkKGN4X2Rldik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfY3hkZXZfY29udHJvbChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3hfZGV2ICpjeF9kZXYgPSB0b19jeF9kZXYoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JXggMHgleCAweCV4ICVkXG4iLAorCQkgICAgICAgY3hfZGV2LT5jeF9pZC5uYXNpZCwKKwkJICAgICAgIGN4X2Rldi0+Y3hfaWQucGFydF9udW0sIGN4X2Rldi0+Y3hfaWQubWZnX251bSwKKwkJICAgICAgIHRpb2N4X2J0Y2hhcl9nZXQoY3hfZGV2LT5jeF9pZC5uYXNpZCkpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9jeGRldl9jb250cm9sKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorCQkJCSAgIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgbjsKKwlzdHJ1Y3QgY3hfZGV2ICpjeF9kZXYgPSB0b19jeF9kZXYoZGV2KTsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChjb3VudCA8PSAwKQorCQlyZXR1cm4gMDsKKworCW4gPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOworCisJc3dpdGNoIChuKSB7CisJY2FzZSAxOgorCQl0aW9jeF9yZWxvYWQoY3hfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl0aW9fY29yZWxldF9yZXNldChjeF9kZXYtPmN4X2lkLm5hc2lkLCBUSU9DWF9DT1JFTEVUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitERVZJQ0VfQVRUUihjeGRldl9jb250cm9sLCAwNjQ0LCBzaG93X2N4ZGV2X2NvbnRyb2wsIHN0b3JlX2N4ZGV2X2NvbnRyb2wpOworCitzdGF0aWMgaW50IF9faW5pdCB0aW9jeF9pbml0KHZvaWQpCit7CisJY25vZGVpZF90IGNub2RlaWQ7CisJaW50IGZvdW5kX3Rpb2N4X2RldmljZSA9IDA7CisKKwlidXNfcmVnaXN0ZXIoJnRpb2N4X2J1c190eXBlKTsKKworCWZvciAoY25vZGVpZCA9IDA7IGNub2RlaWQgPCBNQVhfQ09NUEFDVF9OT0RFUzsgY25vZGVpZCsrKSB7CisJCW5hc2lkX3QgbmFzaWQ7CisKKwkJaWYgKChuYXNpZCA9IGNub2RlaWRfdG9fbmFzaWQoY25vZGVpZCkpIDwgMCkKKwkJCWJyZWFrOwkvKiBObyBtb3JlIG5hc2lkcyAuLiBiYWlsIG91dCBvZiBsb29wICovCisKKwkJaWYgKChuYXNpZCAmIDB4MSkgJiYgaXNfZnBnYV9icmljayhuYXNpZCkpIHsKKwkJCXN0cnVjdCBodWJkZXZfaW5mbyAqaHViZGV2OworCQkJc3RydWN0IHh3aWRnZXRfaW5mbyAqd2lkZ2V0cDsKKworCQkJREJHKCJGb3VuZCBUSU8gYXQgbmFzaWQgMHgleFxuIiwgbmFzaWQpOworCisJCQlodWJkZXYgPQorCQkJICAgIChzdHJ1Y3QgaHViZGV2X2luZm8gKikoTk9ERVBEQShjbm9kZWlkKS0+cGRpbmZvKTsKKworCQkJd2lkZ2V0cCA9ICZodWJkZXYtPmhkaV94d2lkZ2V0X2luZm9bVElPQ1hfQ09SRUxFVF07CisKKwkJCS8qIFRoZSBDRSBoYW5ncyBvZmYgb2YgdGhlIENYIHBvcnQgYnV0IGlzIG5vdCBhbiBGUEdBICovCisJCQlpZiAod2lkZ2V0cC0+eHdpX2h3aWQucGFydF9udW0gPT0gVElPX0NFX0FTSUNfUEFSVE5VTSkKKwkJCQljb250aW51ZTsKKworCQkJdGlvX2NvcmVsZXRfcmVzZXQobmFzaWQsIFRJT0NYX0NPUkVMRVQpOworCQkJdGlvX2NvbnZleW9yX2VuYWJsZShuYXNpZCk7CisKKwkJCWlmIChjeF9kZXZpY2VfcmVnaXN0ZXIKKwkJCSAgICAobmFzaWQsIHdpZGdldHAtPnh3aV9od2lkLnBhcnRfbnVtLAorCQkJICAgICB3aWRnZXRwLT54d2lfaHdpZC5tZmdfbnVtLCBodWJkZXYpIDwgMCkKKwkJCQlyZXR1cm4gLUVOWElPOworCQkJZWxzZQorCQkJCWZvdW5kX3Rpb2N4X2RldmljZSsrOworCQl9CisJfQorCisJLyogSXQncyBvayBpZiB3ZSBmaW5kIHplcm8gZGV2aWNlcy4gKi8KKwlEQkcoImZvdW5kX3Rpb2N4X2RldmljZT0gJWRcbiIsIGZvdW5kX3Rpb2N4X2RldmljZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRpb2N4X2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRldmljZSAqdGRldjsKKworCURCRygidGlvY3hfZXhpdFxuIik7CisKKwkvKgorCSAqIFVucmVnaXN0ZXIgZGV2aWNlcy4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0ZGV2LCAmdGlvY3hfYnVzX3R5cGUuZGV2aWNlcy5saXN0LAorCQkJCSBidXNfbGlzdCkgeworCQlpZiAoZGV2KSB7CisJCQlzdHJ1Y3QgY3hfZGV2ICpjeF9kZXYgPSB0b19jeF9kZXYoZGV2KTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9jeGRldl9jb250cm9sKTsKKwkJCWN4X2RldmljZV91bnJlZ2lzdGVyKGN4X2Rldik7CisJCX0KKwl9CisKKwlidXNfdW5yZWdpc3RlcigmdGlvY3hfYnVzX3R5cGUpOworfQorCittb2R1bGVfaW5pdCh0aW9jeF9pbml0KTsKK21vZHVsZV9leGl0KHRpb2N4X2V4aXQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb2R1bGUgbGljZW5zaW5nIGFuZCBkZXNjcmlwdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkJydWNlIExvc3VyZSA8Ymxvc3VyZUBzZ2kuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSU9DWCBtb2R1bGUiKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKERFVklDRV9OQU1FKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBfbWFpbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cF9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlNTJhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBfbWFpbi5jCkBAIC0wLDAgKzEsMjg5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisKKy8qCisgKiBDcm9zcyBQYXJ0aXRpb24gKFhQKSBiYXNlLgorICoKKyAqCVhQIHByb3ZpZGVzIGEgYmFzZSBmcm9tIHdoaWNoIGl0cyB1c2VycyBjYW4gaW50ZXJhY3QKKyAqCXdpdGggWFBDLCB5ZXQgbm90IGJlIGRlcGVuZGVudCBvbiBYUEMuCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9zbi9pbnRyLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NuX3NhbC5oPgorI2luY2x1ZGUgPGFzbS9zbi94cC5oPgorCisKKy8qCisgKiBUYXJnZXQgb2Ygbm9mYXVsdCBQSU8gcmVhZC4KKyAqLwordTY0IHhwX25vZmF1bHRfUElPUl90YXJnZXQ7CisKKworLyoKKyAqIHhwY19yZWdpc3RyYXRpb25zW10ga2VlcHMgdHJhY2sgb2YgeHBjX2Nvbm5lY3QoKSdzIGRvbmUgYnkgdGhlIGtlcm5lbC1sZXZlbAorICogdXNlcnMgb2YgWFBDLgorICovCitzdHJ1Y3QgeHBjX3JlZ2lzdHJhdGlvbiB4cGNfcmVnaXN0cmF0aW9uc1tYUENfTkNIQU5ORUxTXTsKKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgWFBDIGludGVyZmFjZSB0byBpbmRpY2F0ZSB0aGF0IFhQQyBpc24ndCBsb2FkZWQuCisgKi8KK3N0YXRpYyBlbnVtIHhwY19yZXR2YWwgeHBjX25vdGxvYWRlZCh2b2lkKSB7IHJldHVybiB4cGNOb3RMb2FkZWQ7IH0KKworc3RydWN0IHhwY19pbnRlcmZhY2UgeHBjX2ludGVyZmFjZSA9IHsKKwkodm9pZCAoKikoaW50KSkgeHBjX25vdGxvYWRlZCwKKwkodm9pZCAoKikoaW50KSkgeHBjX25vdGxvYWRlZCwKKwkoZW51bSB4cGNfcmV0dmFsICgqKShwYXJ0aWRfdCwgaW50LCB1MzIsIHZvaWQgKiopKSB4cGNfbm90bG9hZGVkLAorCShlbnVtIHhwY19yZXR2YWwgKCopKHBhcnRpZF90LCBpbnQsIHZvaWQgKikpIHhwY19ub3Rsb2FkZWQsCisJKGVudW0geHBjX3JldHZhbCAoKikocGFydGlkX3QsIGludCwgdm9pZCAqLCB4cGNfbm90aWZ5X2Z1bmMsIHZvaWQgKikpCisJCQkJCQkJeHBjX25vdGxvYWRlZCwKKwkodm9pZCAoKikocGFydGlkX3QsIGludCwgdm9pZCAqKSkgeHBjX25vdGxvYWRlZCwKKwkoZW51bSB4cGNfcmV0dmFsICgqKShwYXJ0aWRfdCwgdm9pZCAqKSkgeHBjX25vdGxvYWRlZAorfTsKKworCisvKgorICogWFBDIGNhbGxzIHRoaXMgd2hlbiBpdCAodGhlIFhQQyBtb2R1bGUpIGhhcyBiZWVuIGxvYWRlZC4KKyAqLwordm9pZAoreHBjX3NldF9pbnRlcmZhY2Uodm9pZCAoKmNvbm5lY3QpKGludCksCisJCXZvaWQgKCpkaXNjb25uZWN0KShpbnQpLAorCQllbnVtIHhwY19yZXR2YWwgKCphbGxvY2F0ZSkocGFydGlkX3QsIGludCwgdTMyLCB2b2lkICoqKSwKKwkJZW51bSB4cGNfcmV0dmFsICgqc2VuZCkocGFydGlkX3QsIGludCwgdm9pZCAqKSwKKwkJZW51bSB4cGNfcmV0dmFsICgqc2VuZF9ub3RpZnkpKHBhcnRpZF90LCBpbnQsIHZvaWQgKiwKKwkJCQkJCXhwY19ub3RpZnlfZnVuYywgdm9pZCAqKSwKKwkJdm9pZCAoKnJlY2VpdmVkKShwYXJ0aWRfdCwgaW50LCB2b2lkICopLAorCQllbnVtIHhwY19yZXR2YWwgKCpwYXJ0aWRfdG9fbmFzaWRzKShwYXJ0aWRfdCwgdm9pZCAqKSkKK3sKKwl4cGNfaW50ZXJmYWNlLmNvbm5lY3QgPSBjb25uZWN0OworCXhwY19pbnRlcmZhY2UuZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3Q7CisJeHBjX2ludGVyZmFjZS5hbGxvY2F0ZSA9IGFsbG9jYXRlOworCXhwY19pbnRlcmZhY2Uuc2VuZCA9IHNlbmQ7CisJeHBjX2ludGVyZmFjZS5zZW5kX25vdGlmeSA9IHNlbmRfbm90aWZ5OworCXhwY19pbnRlcmZhY2UucmVjZWl2ZWQgPSByZWNlaXZlZDsKKwl4cGNfaW50ZXJmYWNlLnBhcnRpZF90b19uYXNpZHMgPSBwYXJ0aWRfdG9fbmFzaWRzOworfQorCisKKy8qCisgKiBYUEMgY2FsbHMgdGhpcyB3aGVuIGl0ICh0aGUgWFBDIG1vZHVsZSkgaXMgYmVpbmcgdW5sb2FkZWQuCisgKi8KK3ZvaWQKK3hwY19jbGVhcl9pbnRlcmZhY2Uodm9pZCkKK3sKKwl4cGNfaW50ZXJmYWNlLmNvbm5lY3QgPSAodm9pZCAoKikoaW50KSkgeHBjX25vdGxvYWRlZDsKKwl4cGNfaW50ZXJmYWNlLmRpc2Nvbm5lY3QgPSAodm9pZCAoKikoaW50KSkgeHBjX25vdGxvYWRlZDsKKwl4cGNfaW50ZXJmYWNlLmFsbG9jYXRlID0gKGVudW0geHBjX3JldHZhbCAoKikocGFydGlkX3QsIGludCwgdTMyLAorCQkJCQl2b2lkICoqKSkgeHBjX25vdGxvYWRlZDsKKwl4cGNfaW50ZXJmYWNlLnNlbmQgPSAoZW51bSB4cGNfcmV0dmFsICgqKShwYXJ0aWRfdCwgaW50LCB2b2lkICopKQorCQkJCQl4cGNfbm90bG9hZGVkOworCXhwY19pbnRlcmZhY2Uuc2VuZF9ub3RpZnkgPSAoZW51bSB4cGNfcmV0dmFsICgqKShwYXJ0aWRfdCwgaW50LCB2b2lkICosCisJCQkJICAgIHhwY19ub3RpZnlfZnVuYywgdm9pZCAqKSkgeHBjX25vdGxvYWRlZDsKKwl4cGNfaW50ZXJmYWNlLnJlY2VpdmVkID0gKHZvaWQgKCopKHBhcnRpZF90LCBpbnQsIHZvaWQgKikpCisJCQkJCXhwY19ub3Rsb2FkZWQ7CisJeHBjX2ludGVyZmFjZS5wYXJ0aWRfdG9fbmFzaWRzID0gKGVudW0geHBjX3JldHZhbCAoKikocGFydGlkX3QsIHZvaWQgKikpCisJCQkJCXhwY19ub3Rsb2FkZWQ7Cit9CisKKworLyoKKyAqIFJlZ2lzdGVyIGZvciBhdXRvbWF0aWMgZXN0YWJsaXNobWVudCBvZiBhIGNoYW5uZWwgY29ubmVjdGlvbiB3aGVuZXZlcgorICogYSBwYXJ0aXRpb24gY29tZXMgdXAuCisgKgorICogQXJndW1lbnRzOgorICoKKyAqCWNoX251bWJlciAtIGNoYW5uZWwgIyB0byByZWdpc3RlciBmb3IgY29ubmVjdGlvbi4KKyAqCWZ1bmMgLSBmdW5jdGlvbiB0byBjYWxsIGZvciBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9uIG9mIGNoYW5uZWwKKyAqCSAgICAgICBzdGF0ZSBjaGFuZ2VzIChpLmUuLCBjb25uZWN0aW9uLCBkaXNjb25uZWN0aW9uLCBlcnJvcikgYW5kCisgKgkgICAgICAgdGhlIGFycml2YWwgb2YgaW5jb21pbmcgbWVzc2FnZXMuCisgKiAgICAgIGtleSAtIHBvaW50ZXIgdG8gb3B0aW9uYWwgdXNlci1kZWZpbmVkIHZhbHVlIHRoYXQgZ2V0cyBwYXNzZWQgYmFjaworICoJICAgICAgdG8gdGhlIHVzZXIgb24gYW55IGNhbGxvdXRzIG1hZGUgdG8gZnVuYy4KKyAqCXBheWxvYWRfc2l6ZSAtIHNpemUgaW4gYnl0ZXMgb2YgdGhlIFhQQyBtZXNzYWdlJ3MgcGF5bG9hZCBhcmVhIHdoaWNoCisgKgkJICAgICAgIGNvbnRhaW5zIGEgdXNlci1kZWZpbmVkIG1lc3NhZ2UuIFRoZSB1c2VyIHNob3VsZCBtYWtlCisgKgkJICAgICAgIHRoaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlaXIgbGFyZ2VzdCBtZXNzYWdlLgorICoJbmVudHJpZXMgLSBtYXggI29mIFhQQyBtZXNzYWdlIGVudHJpZXMgYSBtZXNzYWdlIHF1ZXVlIGNhbiBjb250YWluLgorICoJCSAgIFRoZSBhY3R1YWwgbnVtYmVyLCB3aGljaCBpcyBkZXRlcm1pbmVkIHdoZW4gYSBjb25uZWN0aW9uCisgKiAJCSAgIGlzIGVzdGFibGlzaGVkIGFuZCBtYXkgYmUgbGVzcyB0aGVuIHJlcXVlc3RlZCwgd2lsbCBiZQorICoJCSAgIHBhc3NlZCB0byB0aGUgdXNlciB2aWEgdGhlIHhwY0Nvbm5lY3RlZCBjYWxsb3V0LgorICoJYXNzaWduZWRfbGltaXQgLSBtYXggbnVtYmVyIG9mIGt0aHJlYWRzIGFsbG93ZWQgdG8gYmUgcHJvY2Vzc2luZworICogCQkJIG1lc3NhZ2VzIChwZXIgY29ubmVjdGlvbikgYXQgYW55IGdpdmVuIGluc3RhbnQuCisgKglpZGxlX2xpbWl0IC0gbWF4IG51bWJlciBvZiBrdGhyZWFkcyBhbGxvd2VkIHRvIGJlIGlkbGUgYXQgYW55IGdpdmVuCisgKiAJCSAgICAgaW5zdGFudC4KKyAqLworZW51bSB4cGNfcmV0dmFsCit4cGNfY29ubmVjdChpbnQgY2hfbnVtYmVyLCB4cGNfY2hhbm5lbF9mdW5jIGZ1bmMsIHZvaWQgKmtleSwgdTE2IHBheWxvYWRfc2l6ZSwKKwkJdTE2IG5lbnRyaWVzLCB1MzIgYXNzaWduZWRfbGltaXQsIHUzMiBpZGxlX2xpbWl0KQoreworCXN0cnVjdCB4cGNfcmVnaXN0cmF0aW9uICpyZWdpc3RyYXRpb247CisKKworCURCVUdfT04oY2hfbnVtYmVyIDwgMCB8fCBjaF9udW1iZXIgPj0gWFBDX05DSEFOTkVMUyk7CisJREJVR19PTihwYXlsb2FkX3NpemUgPT0gMCB8fCBuZW50cmllcyA9PSAwKTsKKwlEQlVHX09OKGZ1bmMgPT0gTlVMTCk7CisJREJVR19PTihhc3NpZ25lZF9saW1pdCA9PSAwIHx8IGlkbGVfbGltaXQgPiBhc3NpZ25lZF9saW1pdCk7CisKKwlyZWdpc3RyYXRpb24gPSAmeHBjX3JlZ2lzdHJhdGlvbnNbY2hfbnVtYmVyXTsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJnJlZ2lzdHJhdGlvbi0+c2VtYSkgIT0gMCkgeworCQlyZXR1cm4geHBjSW50ZXJydXB0ZWQ7CisJfQorCisJLyogaWYgWFBDX0NIQU5ORUxfUkVHSVNURVJFRChjaF9udW1iZXIpICovCisJaWYgKHJlZ2lzdHJhdGlvbi0+ZnVuYyAhPSBOVUxMKSB7CisJCXVwKCZyZWdpc3RyYXRpb24tPnNlbWEpOworCQlyZXR1cm4geHBjQWxyZWFkeVJlZ2lzdGVyZWQ7CisJfQorCisJLyogcmVnaXN0ZXIgdGhlIGNoYW5uZWwgZm9yIGNvbm5lY3Rpb24gKi8KKwlyZWdpc3RyYXRpb24tPm1zZ19zaXplID0gWFBDX01TR19TSVpFKHBheWxvYWRfc2l6ZSk7CisJcmVnaXN0cmF0aW9uLT5uZW50cmllcyA9IG5lbnRyaWVzOworCXJlZ2lzdHJhdGlvbi0+YXNzaWduZWRfbGltaXQgPSBhc3NpZ25lZF9saW1pdDsKKwlyZWdpc3RyYXRpb24tPmlkbGVfbGltaXQgPSBpZGxlX2xpbWl0OworCXJlZ2lzdHJhdGlvbi0+a2V5ID0ga2V5OworCXJlZ2lzdHJhdGlvbi0+ZnVuYyA9IGZ1bmM7CisKKwl1cCgmcmVnaXN0cmF0aW9uLT5zZW1hKTsKKworCXhwY19pbnRlcmZhY2UuY29ubmVjdChjaF9udW1iZXIpOworCisJcmV0dXJuIHhwY1N1Y2Nlc3M7Cit9CisKKworLyoKKyAqIFJlbW92ZSB0aGUgcmVnaXN0cmF0aW9uIGZvciBhdXRvbWF0aWMgY29ubmVjdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGNoYW5uZWwKKyAqIHdoZW4gYSBwYXJ0aXRpb24gY29tZXMgdXAuCisgKgorICogQmVmb3JlIHJldHVybmluZyB0aGlzIHhwY19kaXNjb25uZWN0KCkgd2lsbCB3YWl0IGZvciBhbGwgY29ubmVjdGlvbnMgb24gdGhlCisgKiBzcGVjaWZpZWQgY2hhbm5lbCBoYXZlIGJlZW4gY2xvc2VkL3Rvcm5kb3duLiBTbyB0aGUgY2FsbGVyIGNhbiBiZSBhc3N1cmVkCisgKiB0aGF0IHRoZXkgd2lsbCBub3QgYmUgcmVjZWl2aW5nIGFueSBtb3JlIGNhbGxvdXRzIGZyb20gWFBDIHRvIHRoZWlyCisgKiBmdW5jdGlvbiByZWdpc3RlcmVkIHZpYSB4cGNfY29ubmVjdCgpLgorICoKKyAqIEFyZ3VtZW50czoKKyAqCisgKgljaF9udW1iZXIgLSBjaGFubmVsICMgdG8gdW5yZWdpc3Rlci4KKyAqLwordm9pZAoreHBjX2Rpc2Nvbm5lY3QoaW50IGNoX251bWJlcikKK3sKKwlzdHJ1Y3QgeHBjX3JlZ2lzdHJhdGlvbiAqcmVnaXN0cmF0aW9uOworCisKKwlEQlVHX09OKGNoX251bWJlciA8IDAgfHwgY2hfbnVtYmVyID49IFhQQ19OQ0hBTk5FTFMpOworCisJcmVnaXN0cmF0aW9uID0gJnhwY19yZWdpc3RyYXRpb25zW2NoX251bWJlcl07CisKKwkvKgorCSAqIFdlJ3ZlIGRlY2lkZWQgbm90IHRvIG1ha2UgdGhpcyBhIGRvd25faW50ZXJydXB0aWJsZSgpLCBzaW5jZSB3ZQorCSAqIGZpZ3VyZWQgWFBDJ3MgdXNlcnMgd2lsbCBqdXN0IHR1cm4gYXJvdW5kIGFuZCBjYWxsIHhwY19kaXNjb25uZWN0KCkKKwkgKiBhZ2FpbiBhbnl3YXlzLCBzbyB3ZSBtaWdodCBhcyB3ZWxsIHdhaXQsIGlmIG5lZWQgYmUuCisJICovCisJZG93bigmcmVnaXN0cmF0aW9uLT5zZW1hKTsKKworCS8qIGlmICFYUENfQ0hBTk5FTF9SRUdJU1RFUkVEKGNoX251bWJlcikgKi8KKwlpZiAocmVnaXN0cmF0aW9uLT5mdW5jID09IE5VTEwpIHsKKwkJdXAoJnJlZ2lzdHJhdGlvbi0+c2VtYSk7CisJCXJldHVybjsKKwl9CisKKwkvKiByZW1vdmUgdGhlIGNvbm5lY3Rpb24gcmVnaXN0cmF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgKi8KKwlyZWdpc3RyYXRpb24tPmZ1bmMgPSBOVUxMOworCXJlZ2lzdHJhdGlvbi0+a2V5ID0gTlVMTDsKKwlyZWdpc3RyYXRpb24tPm5lbnRyaWVzID0gMDsKKwlyZWdpc3RyYXRpb24tPm1zZ19zaXplID0gMDsKKwlyZWdpc3RyYXRpb24tPmFzc2lnbmVkX2xpbWl0ID0gMDsKKwlyZWdpc3RyYXRpb24tPmlkbGVfbGltaXQgPSAwOworCisJeHBjX2ludGVyZmFjZS5kaXNjb25uZWN0KGNoX251bWJlcik7CisKKwl1cCgmcmVnaXN0cmF0aW9uLT5zZW1hKTsKKworCXJldHVybjsKK30KKworCitpbnQgX19pbml0Cit4cF9pbml0KHZvaWQpCit7CisJaW50IHJldCwgY2hfbnVtYmVyOworCXU2NCBmdW5jX2FkZHIgPSAqKHU2NCAqKSB4cF9ub2ZhdWx0X1BJT1I7CisJdTY0IGVycl9mdW5jX2FkZHIgPSAqKHU2NCAqKSB4cF9lcnJvcl9QSU9SOworCisKKwlpZiAoIWlhNjRfcGxhdGZvcm1faXMoInNuMiIpKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qCisJICogUmVnaXN0ZXIgYSBub2ZhdWx0IGNvZGUgcmVnaW9uIHdoaWNoIHBlcmZvcm1zIGEgY3Jvc3MtcGFydGl0aW9uCisJICogUElPIHJlYWQuIElmIHRoZSBQSU8gcmVhZCB0aW1lcyBvdXQsIHRoZSBNQ0EgaGFuZGxlciB3aWxsIGNvbnN1bWUKKwkgKiB0aGUgZXJyb3IgYW5kIHJldHVybiB0byBhIGtlcm5lbC1wcm92aWRlZCBpbnN0cnVjdGlvbiB0byBpbmRpY2F0ZQorCSAqIGFuIGVycm9yLiBUaGlzIFBJTyByZWFkIGV4aXN0cyBiZWNhdXNlIGl0IGlzIGd1YXJhbnRlZWQgdG8gdGltZW91dAorCSAqIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyBkb3duIChBTU8gb3BlcmF0aW9ucyBkbyBub3QgdGltZW91dCBvbiBhdAorCSAqIGxlYXN0IHNvbWUgQ1BVcyBvbiBTaHVicyA8PSB2MS4yLCB3aGljaCB1bmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8KKwkgKiB3b3JrIGFyb3VuZCkuCisJICovCisJaWYgKChyZXQgPSBzbl9yZWdpc3Rlcl9ub2ZhdWx0X2NvZGUoZnVuY19hZGRyLCBlcnJfZnVuY19hZGRyLAorCQkJCQkJZXJyX2Z1bmNfYWRkciwgMSwgMSkpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJYUDogY2FuJ3QgcmVnaXN0ZXIgbm9mYXVsdCBjb2RlLCBlcnJvcj0lZFxuIiwKKwkJCXJldCk7CisJfQorCS8qCisJICogU2V0dXAgdGhlIG5vZmF1bHQgUElPIHJlYWQgdGFyZ2V0LiAoVGhlcmUgaXMgbm8gc3BlY2lhbCByZWFzb24gd2h5CisJICogU0hfSVBJX0FDQ0VTUyB3YXMgc2VsZWN0ZWQuKQorCSAqLworCWlmIChpc19zaHViMigpKSB7CisJCXhwX25vZmF1bHRfUElPUl90YXJnZXQgPSBTSDJfSVBJX0FDQ0VTUzA7CisJfSBlbHNlIHsKKwkJeHBfbm9mYXVsdF9QSU9SX3RhcmdldCA9IFNIMV9JUElfQUNDRVNTOworCX0KKworCS8qIGluaXRpYWxpemUgdGhlIGNvbm5lY3Rpb24gcmVnaXN0cmF0aW9uIHNlbWFwaG9yZXMgKi8KKwlmb3IgKGNoX251bWJlciA9IDA7IGNoX251bWJlciA8IFhQQ19OQ0hBTk5FTFM7IGNoX251bWJlcisrKSB7CisJCXNlbWFfaW5pdCgmeHBjX3JlZ2lzdHJhdGlvbnNbY2hfbnVtYmVyXS5zZW1hLCAxKTsgIC8qIG11dGV4ICovCisJfQorCisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdCh4cF9pbml0KTsKKworCit2b2lkIF9fZXhpdAoreHBfZXhpdCh2b2lkKQoreworCXU2NCBmdW5jX2FkZHIgPSAqKHU2NCAqKSB4cF9ub2ZhdWx0X1BJT1I7CisJdTY0IGVycl9mdW5jX2FkZHIgPSAqKHU2NCAqKSB4cF9lcnJvcl9QSU9SOworCisKKwkvKiB1bnJlZ2lzdGVyIHRoZSBQSU8gcmVhZCBub2ZhdWx0IGNvZGUgcmVnaW9uICovCisJKHZvaWQpIHNuX3JlZ2lzdGVyX25vZmF1bHRfY29kZShmdW5jX2FkZHIsIGVycl9mdW5jX2FkZHIsCisJCQkJCWVycl9mdW5jX2FkZHIsIDEsIDApOworfQorbW9kdWxlX2V4aXQoeHBfZXhpdCk7CisKKworTU9EVUxFX0FVVEhPUigiU2lsaWNvbiBHcmFwaGljcywgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDcm9zcyBQYXJ0aXRpb24gKFhQKSBiYXNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0VYUE9SVF9TWU1CT0woeHBfbm9mYXVsdF9QSU9SKTsKK0VYUE9SVF9TWU1CT0woeHBfbm9mYXVsdF9QSU9SX3RhcmdldCk7CitFWFBPUlRfU1lNQk9MKHhwY19yZWdpc3RyYXRpb25zKTsKK0VYUE9SVF9TWU1CT0woeHBjX2ludGVyZmFjZSk7CitFWFBPUlRfU1lNQk9MKHhwY19jbGVhcl9pbnRlcmZhY2UpOworRVhQT1JUX1NZTUJPTCh4cGNfc2V0X2ludGVyZmFjZSk7CitFWFBPUlRfU1lNQk9MKHhwY19jb25uZWN0KTsKK0VYUE9SVF9TWU1CT0woeHBjX2Rpc2Nvbm5lY3QpOworCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3hwX25vZmF1bHQuUyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBfbm9mYXVsdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NzI1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwX25vZmF1bHQuUwpAQCAtMCwwICsxLDMxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisKKy8qCisgKiBUaGUgeHBfbm9mYXVsdF9QSU9SIGZ1bmN0aW9uIHRha2VzIGEgcG9pbnRlciB0byBhIHJlbW90ZSBQSU8gcmVnaXN0ZXIKKyAqIGFuZCBhdHRlbXB0cyB0byBsb2FkIGFuZCBjb25zdW1lIGEgdmFsdWUgZnJvbSBpdC4gIFRoaXMgZnVuY3Rpb24KKyAqIHdpbGwgYmUgcmVnaXN0ZXJlZCBhcyBhIG5vZmF1bHQgY29kZSBibG9jay4gIEluIHRoZSBldmVudCB0aGF0IHRoZQorICogUElPIHJlYWQgZmFpbHMsIHRoZSBNQ0EgaGFuZGxlciB3aWxsIGZvcmNlIHRoZSBlcnJvciB0byBsb29rCisgKiBjb3JyZWN0ZWQgYW5kIHZlY3RvciB0byB0aGUgeHBfZXJyb3JfUElPUiB3aGljaCB3aWxsIHJldHVybiBhbiBlcnJvci4KKyAqCisgKglleHRlcm4gaW50IHhwX25vZmF1bHRfUElPUih2b2lkICpyZW1vdGVfcmVnaXN0ZXIpOworICovCisKKwkuZ2xvYmFsIHhwX25vZmF1bHRfUElPUgoreHBfbm9mYXVsdF9QSU9SOgorCW1vdglyOD1yMAkJCS8vIFN0YWdlIGEgc3VjY2VzcyByZXR1cm4gdmFsdWUKKwlsZDguYWNxCXI5PVtyMzJdOzsJCS8vIFBJTyBSZWFkIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIKKwlhZGRzCXI5PTEscjkJCQkvLyBBZGQgdG8gZm9yY2UgYSBjb25zdW1lCisJYnIucmV0LnNwdGsubWFueSBiMDs7CQkvLyBSZXR1cm4gc3VjY2VzcworCisJLmdsb2JhbCB4cF9lcnJvcl9QSU9SCit4cF9lcnJvcl9QSU9SOgorCW1vdglyOD0xCQkJLy8gUmV0dXJuIHZhbHVlIG9mIDEKKwlici5yZXQuc3B0ay5tYW55IGIwOzsJCS8vIFJldHVybiBmYWlsdXJlCisKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjLmggYi9hcmNoL2lhNjQvc24va2VybmVsL3hwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMGFlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwYy5oCkBAIC0wLDAgKzEsOTkxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisKKy8qCisgKiBDcm9zcyBQYXJ0aXRpb24gQ29tbXVuaWNhdGlvbiAoWFBDKSBzdHJ1Y3R1cmVzIGFuZCBtYWNyb3MuCisgKi8KKworI2lmbmRlZiBfSUE2NF9TTl9LRVJORUxfWFBDX0gKKyNkZWZpbmUgX0lBNjRfU05fS0VSTkVMX1hQQ19ICisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9zbi9idGUuaD4KKyNpbmNsdWRlIDxhc20vc24vY2xrc3VwcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgorI2luY2x1ZGUgPGFzbS9zbi9tc3BlYy5oPgorI2luY2x1ZGUgPGFzbS9zbi9zaHViX21tci5oPgorI2luY2x1ZGUgPGFzbS9zbi94cC5oPgorCisKKy8qCisgKiBYUEMgVmVyc2lvbiBudW1iZXJzIGNvbnNpc3Qgb2YgYSBtYWpvciBhbmQgbWlub3IgbnVtYmVyLiBYUEMgY2FuIGFsd2F5cworICogdGFsayB0byB2ZXJzaW9ucyB3aXRoIHNhbWUgbWFqb3IgIywgYW5kIG5ldmVyIHRhbGsgdG8gdmVyc2lvbnMgd2l0aCBhCisgKiBkaWZmZXJlbnQgbWFqb3IgIy4KKyAqLworI2RlZmluZSBfWFBDX1ZFUlNJT04oX21haiwgX21pbikJKCgoX21haikgPDwgNCkgfCAoKF9taW4pICYgMHhmKSkKKyNkZWZpbmUgWFBDX1ZFUlNJT05fTUFKT1IoX3YpCQkoKF92KSA+PiA0KQorI2RlZmluZSBYUENfVkVSU0lPTl9NSU5PUihfdikJCSgoX3YpICYgMHhmKQorCisKKy8qCisgKiBUaGUgbmV4dCBtYWNyb3MgZGVmaW5lIHdvcmQgb3IgYml0IHJlcHJlc2VudGF0aW9ucyBmb3IgZ2l2ZW4KKyAqIEMtYnJpY2sgbmFzaWQgaW4gZWl0aGVyIHRoZSBTQUwgcHJvdmlkZWQgYml0IGFycmF5IHJlcHJlc2VudGluZworICogbmFzaWRzIGluIHRoZSBwYXJ0aXRpb24vbWFjaGluZSBvciB0aGUgQU1PX3QgYXJyYXkgdXNlZCBmb3IKKyAqIGludGVyLXBhcnRpdGlvbiBpbml0aWF0aW9uIGNvbW11bmljYXRpb25zLgorICoKKyAqIEZvciBTTjIgbWFjaGluZXMsIEMtQnJpY2tzIGFyZSBhbHdheSBldmVuIG51bWJlcmVkIE5BU0lEcy4gIEFzCisgKiBzdWNoLCBzb21lIHNwYWNlIHdpbGwgYmUgc2F2ZWQgYnkgaW5zaXN0aW5nIHRoYXQgbmFzaWQgaW5mb3JtYXRpb24KKyAqIHBhc3NlZCBmcm9tIFNBTCBhbHdheXMgYmUgcGFja2VkIGZvciBDLUJyaWNrcyBhbmQgdGhlCisgKiBjcm9zcy1wYXJ0aXRpb24gaW50ZXJydXB0cyB1c2UgdGhlIHNhbWUgcGFja2luZyBzY2hlbWUuCisgKi8KKyNkZWZpbmUgWFBDX05BU0lEX1dfSU5ERVgoX24pCSgoKF9uKSAvIDY0KSAvIDIpCisjZGVmaW5lIFhQQ19OQVNJRF9CX0lOREVYKF9uKQkoKChfbikgLyAyKSAmICg2NCAtIDEpKQorI2RlZmluZSBYUENfTkFTSURfSU5fQVJSQVkoX24sIF9wKSAoKF9wKVtYUENfTkFTSURfV19JTkRFWChfbildICYgXAorCQkJCSAgICAoMVVMIDw8IFhQQ19OQVNJRF9CX0lOREVYKF9uKSkpCisjZGVmaW5lIFhQQ19OQVNJRF9GUk9NX1dfQihfdywgX2IpICgoKF93KSAqIDY0ICsgKF9iKSkgKiAyKQorCisjZGVmaW5lIFhQQ19IQl9ERUZBVUxUX0lOVEVSVkFMCQk1CS8qIGluY3IgSEIgZXZlcnkgeCBzZWNzICovCisjZGVmaW5lIFhQQ19IQl9DSEVDS19ERUZBVUxUX1RJTUVPVVQJMjAJLyogY2hlY2sgSEIgZXZlcnkgeCBzZWNzICovCisKKy8qIGRlZmluZSB0aGUgcHJvY2VzcyBuYW1lIG9mIEhCIGNoZWNrZXIgYW5kIHRoZSBDUFUgaXQgaXMgcGlubmVkIHRvICovCisjZGVmaW5lIFhQQ19IQl9DSEVDS19USFJFQURfTkFNRQkieHBjX2hiIgorI2RlZmluZSBYUENfSEJfQ0hFQ0tfQ1BVCQkwCisKKy8qIGRlZmluZSB0aGUgcHJvY2VzcyBuYW1lIG9mIHRoZSBkaXNjb3ZlcnkgdGhyZWFkICovCisjZGVmaW5lIFhQQ19ESVNDT1ZFUllfVEhSRUFEX05BTUUJInhwY19kaXNjb3ZlcnkiCisKKworI2RlZmluZSBYUENfSEJfQUxMT1dFRChfcCwgX3YpCSgoX3YpLT5oZWFydGJlYXRpbmdfdG9fbWFzayAmICgxVUwgPDwgKF9wKSkpCisjZGVmaW5lIFhQQ19BTExPV19IQihfcCwgX3YpCShfdiktPmhlYXJ0YmVhdGluZ190b19tYXNrIHw9ICgxVUwgPDwgKF9wKSkKKyNkZWZpbmUgWFBDX0RJU0FMTE9XX0hCKF9wLCBfdikJKF92KS0+aGVhcnRiZWF0aW5nX3RvX21hc2sgJj0gKH4oMVVMIDw8IChfcCkpKQorCisKKy8qCisgKiBSZXNlcnZlZCBQYWdlIHByb3ZpZGVkIGJ5IFNBTC4KKyAqCisgKiBTQUwgcHJvdmlkZXMgb25lIHBhZ2UgcGVyIHBhcnRpdGlvbiBvZiByZXNlcnZlZCBtZW1vcnkuICBXaGVuIFNBTAorICogaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUsIFNBTF9zaWduYXR1cmUsIFNBTF92ZXJzaW9uLCBwYXJ0aWQsCisgKiBwYXJ0X25hc2lkcywgYW5kIG1hY2hfbmFzaWRzIGFyZSBzZXQuCisgKgorICogTm90ZTogVW50aWwgdmFyc19wYSBpcyBzZXQsIHRoZSBwYXJ0aXRpb24gWFBDIGNvZGUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLgorICovCitzdHJ1Y3QgeHBjX3JzdmRfcGFnZSB7CisJdTY0IFNBTF9zaWduYXR1cmU7CS8qIFNBTCB1bmlxdWUgc2lnbmF0dXJlICovCisJdTY0IFNBTF92ZXJzaW9uOwkvKiBTQUwgc3BlY2lmaWVkIHZlcnNpb24gKi8KKwl1OCBwYXJ0aWQ7CQkvKiBwYXJ0aXRpb24gSUQgZnJvbSBTQUwgKi8KKwl1OCB2ZXJzaW9uOworCXU4IHBhZFs2XTsJCS8qIHBhZCB0byB1NjQgYWxpZ24gKi8KKwl1NjQgdmFyc19wYTsKKwl1NjQgcGFydF9uYXNpZHNbWFBfTkFTSURfTUFTS19XT1JEU10gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCXU2NCBtYWNoX25hc2lkc1tYUF9OQVNJRF9NQVNLX1dPUkRTXSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Cit9OworI2RlZmluZSBYUENfUlBfVkVSU0lPTiBfWFBDX1ZFUlNJT04oMSwwKSAvKiB2ZXJzaW9uIDEuMCBvZiB0aGUgcmVzZXJ2ZWQgcGFnZSAqLworCisjZGVmaW5lIFhQQ19SU1ZEX1BBR0VfQUxJR05FRF9TSVpFIFwKKwkJCShMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IHhwY19yc3ZkX3BhZ2UpKSkKKworCisvKgorICogRGVmaW5lIHRoZSBzdHJ1Y3R1cmVzIGJ5IHdoaWNoIFhQQyB2YXJpYWJsZXMgY2FuIGJlIGV4cG9ydGVkIHRvIG90aGVyCisgKiBwYXJ0aXRpb25zLiAoVGhlcmUgYXJlIHR3bzogc3RydWN0IHhwY192YXJzIGFuZCBzdHJ1Y3QgeHBjX3ZhcnNfcGFydCkKKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBwYXJ0aXRpb24gZ2VuZXJpYyB2YXJpYWJsZXMKKyAqIG5lZWRlZCBieSBvdGhlciBwYXJ0aXRpb25zIGluIG9yZGVyIHRvIHByb3Blcmx5IGluaXRpYWxpemUuCisgKgorICogc3RydWN0IHhwY192YXJzIHZlcnNpb24gbnVtYmVyIGFsc28gYXBwbGllcyB0byBzdHJ1Y3QgeHBjX3ZhcnNfcGFydC4KKyAqIENoYW5nZXMgdG8gZWl0aGVyIHN0cnVjdHVyZSBhbmQvb3IgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZQorICogcmVmbGVjdGVkIGJ5IGluY3JlbWVudGluZyBlaXRoZXIgdGhlIG1ham9yIG9yIG1pbm9yIHZlcnNpb24gbnVtYmVycworICogb2Ygc3RydWN0IHhwY192YXJzLgorICovCitzdHJ1Y3QgeHBjX3ZhcnMgeworCXU4IHZlcnNpb247CisJdTY0IGhlYXJ0YmVhdDsKKwl1NjQgaGVhcnRiZWF0aW5nX3RvX21hc2s7CisJdTY0IGtkYl9zdGF0dXM7CQkvKiAwID0gbWFjaGluZSBydW5uaW5nICovCisJaW50IGFjdF9uYXNpZDsKKwlpbnQgYWN0X3BoeXNfY3B1aWQ7CisJdTY0IHZhcnNfcGFydF9wYTsKKwl1NjQgYW1vc19wYWdlX3BhOwkvKiBwYWRkciBvZiBwYWdlIG9mIEFNT3MgZnJvbSBNU1BFQyBkcml2ZXIgKi8KKwlBTU9fdCAqYW1vc19wYWdlOwkvKiB2YWRkciBvZiBwYWdlIG9mIEFNT3MgZnJvbSBNU1BFQyBkcml2ZXIgKi8KKwlBTU9fdCAqYWN0X2Ftb3M7CS8qIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGFjdGl2YXRpb24gQU1PICovCit9OworI2RlZmluZSBYUENfVl9WRVJTSU9OIF9YUENfVkVSU0lPTigzLDApIC8qIHZlcnNpb24gMy4wIG9mIHRoZSBjcm9zcyB2YXJzICovCisKKyNkZWZpbmUgWFBDX1ZBUlNfQUxJR05FRF9TSVpFICAoTDFfQ0FDSEVfQUxJR04oc2l6ZW9mKHN0cnVjdCB4cGNfdmFycykpKQorCisvKgorICogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBwZXIgcGFydGl0aW9uIHNwZWNpZmljIHZhcmlhYmxlcy4KKyAqCisgKiBBbiBhcnJheSBvZiB0aGVzZSBzdHJ1Y3R1cmVzLCBvbmUgcGVyIHBhcnRpdGlvbiwgd2lsbCBiZSBkZWZpbmVkLiBBcyBhCisgKiBwYXJ0aXRpb24gYmVjb21lcyBhY3RpdmUgWFBDIHdpbGwgY29weSB0aGUgYXJyYXkgZW50cnkgY29ycmVzcG9uZGluZyB0bworICogaXRzZWxmIGZyb20gdGhhdCBwYXJ0aXRpb24uIEl0IGlzIGRlc2lyYWJsZSB0aGF0IHRoZSBzaXplIG9mIHRoaXMKKyAqIHN0cnVjdHVyZSBldmVubHkgZGl2aWRlIGludG8gYSBjYWNoZWxpbmUsIHN1Y2ggdGhhdCBub25lIG9mIHRoZSBlbnRyaWVzCisgKiBpbiB0aGlzIGFycmF5IGNyb3NzZXMgYSBjYWNoZWxpbmUgYm91bmRhcnkuIEFzIGl0IGlzIG5vdywgZWFjaCBlbnRyeQorICogb2NjdXBpZXMgaGFsZiBhIGNhY2hlbGluZS4KKyAqLworc3RydWN0IHhwY192YXJzX3BhcnQgeworCXU2NCBtYWdpYzsKKworCXU2NCBvcGVuY2xvc2VfYXJnc19wYTsJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBvcGVuIGFuZCBjbG9zZSBhcmdzICovCisJdTY0IEdQc19wYTsJCS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgR2V0L1B1dCB2YWx1ZXMgKi8KKworCXU2NCBJUElfYW1vX3BhOwkJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBJUEkgQU1PX3Qgc3RydWN0dXJlICovCisJaW50IElQSV9uYXNpZDsJCS8qIG5hc2lkIG9mIHdoZXJlIHRvIHNlbmQgSVBJcyAqLworCWludCBJUElfcGh5c19jcHVpZDsJLyogcGh5c2ljYWwgQ1BVIElEIG9mIHdoZXJlIHRvIHNlbmQgSVBJcyAqLworCisJdTggbmNoYW5uZWxzOwkJLyogI29mIGRlZmluZWQgY2hhbm5lbHMgc3VwcG9ydGVkICovCisKKwl1OCByZXNlcnZlZFsyM107CS8qIHBhZCB0byBhIGZ1bGwgNjQgYnl0ZXMgKi8KK307CisKKy8qCisgKiBUaGUgdmFyc19wYXJ0IE1BR0lDIG51bWJlcnMgcGxheSBhIHBhcnQgaW4gdGhlIGZpcnN0IGNvbnRhY3QgcHJvdG9jb2wuCisgKgorICogTUFHSUMxIGluZGljYXRlcyB0aGF0IHRoZSBwZXIgcGFydGl0aW9uIHNwZWNpZmljIHZhcmlhYmxlcyBmb3IgYSByZW1vdGUKKyAqIHBhcnRpdGlvbiBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgYnkgdGhpcyBwYXJ0aXRpb24uCisgKgorICogTUFHSUMyIGluZGljYXRlcyB0aGF0IHRoaXMgcGFydGl0aW9uIGhhcyBwdWxsZWQgdGhlIHJlbW90ZSBwYXJ0aXRpdGlvbnMKKyAqIHBlciBwYXJ0aXRpb24gdmFyaWFibGVzIHRoYXQgcGVydGFpbiB0byB0aGlzIHBhcnRpdGlvbi4KKyAqLworI2RlZmluZSBYUENfVlBfTUFHSUMxCTB4MDA1MzUyNDE1NjQzNTA1OEwgIC8qICdYUENWQVJTXDAnTCAobGl0dGxlIGVuZGlhbikgKi8KKyNkZWZpbmUgWFBDX1ZQX01BR0lDMgkweDAwNzM3MjYxNzY0MzUwNThMICAvKiAnWFBDdmFyc1wwJ0wgKGxpdHRsZSBlbmRpYW4pICovCisKKworCisvKgorICogRnVuY3Rpb25zIHJlZ2lzdGVyZWQgYnkgYWRkX3RpbWVyKCkgb3IgY2FsbGVkIGJ5IGtlcm5lbF90aHJlYWQoKSBvbmx5CisgKiBhbGxvdyBmb3IgYSBzaW5nbGUgNjQtYml0IGFyZ3VtZW50LiBUaGUgZm9sbG93aW5nIG1hY3JvcyBjYW4gYmUgdXNlZCB0bworICogcGFjayBhbmQgdW5wYWNrIHR3byAoMzItYml0LCAxNi1iaXQgb3IgOC1iaXQpIGFyZ3VtZW50cyBpbnRvIG9yIG91dCBmcm9tCisgKiB0aGUgcGFzc2VkIGFyZ3VtZW50LgorICovCisjZGVmaW5lIFhQQ19QQUNLX0FSR1MoX2FyZzEsIF9hcmcyKSBcCisJCQkoKCgodTY0KSBfYXJnMSkgJiAweGZmZmZmZmZmKSB8IFwKKwkJCSgoKCh1NjQpIF9hcmcyKSAmIDB4ZmZmZmZmZmYpIDw8IDMyKSkKKworI2RlZmluZSBYUENfVU5QQUNLX0FSRzEoX2FyZ3MpCSgoKHU2NCkgX2FyZ3MpICYgMHhmZmZmZmZmZikKKyNkZWZpbmUgWFBDX1VOUEFDS19BUkcyKF9hcmdzKQkoKCgodTY0KSBfYXJncykgPj4gMzIpICYgMHhmZmZmZmZmZikKKworCisKKy8qCisgKiBEZWZpbmUgYSBHZXQvUHV0IHZhbHVlIHBhaXIgKHBvaW50ZXJzKSB1c2VkIHdpdGggYSBtZXNzYWdlIHF1ZXVlLgorICovCitzdHJ1Y3QgeHBjX2dwIHsKKwlzNjQgZ2V0OwkvKiBHZXQgdmFsdWUgKi8KKwlzNjQgcHV0OwkvKiBQdXQgdmFsdWUgKi8KK307CisKKyNkZWZpbmUgWFBDX0dQX1NJWkUgXAorCQlMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IHhwY19ncCkgKiBYUENfTkNIQU5ORUxTKQorCisKKworLyoKKyAqIERlZmluZSBhIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFyZ3VtZW50cyBhc3NvY2lhdGVkIHdpdGggb3BlbmluZyBhbmQKKyAqIGNsb3NpbmcgYSBjaGFubmVsLgorICovCitzdHJ1Y3QgeHBjX29wZW5jbG9zZV9hcmdzIHsKKwl1MTYgcmVhc29uOwkJLyogcmVhc29uIHdoeSBjaGFubmVsIGlzIGNsb3NpbmcgKi8KKwl1MTYgbXNnX3NpemU7CQkvKiBzaXplb2YgZWFjaCBtZXNzYWdlIGVudHJ5ICovCisJdTE2IHJlbW90ZV9uZW50cmllczsJLyogI29mIG1lc3NhZ2UgZW50cmllcyBpbiByZW1vdGUgbXNnIHF1ZXVlICovCisJdTE2IGxvY2FsX25lbnRyaWVzOwkvKiAjb2YgbWVzc2FnZSBlbnRyaWVzIGluIGxvY2FsIG1zZyBxdWV1ZSAqLworCXU2NCBsb2NhbF9tc2dxdWV1ZV9wYTsJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBsb2NhbCBtZXNzYWdlIHF1ZXVlICovCit9OworCisjZGVmaW5lIFhQQ19PUEVOQ0xPU0VfQVJHU19TSVpFIFwKKwkgICAgICBMMV9DQUNIRV9BTElHTihzaXplb2Yoc3RydWN0IHhwY19vcGVuY2xvc2VfYXJncykgKiBYUENfTkNIQU5ORUxTKQorCisKKworLyogc3RydWN0IHhwY19tc2cgZmxhZ3MgKi8KKworI2RlZmluZQlYUENfTV9ET05FCQkweDAxCS8qIG1zZyBoYXMgYmVlbiByZWNlaXZlZC9jb25zdW1lZCAqLworI2RlZmluZQlYUENfTV9SRUFEWQkJMHgwMgkvKiBtc2cgaXMgcmVhZHkgdG8gYmUgc2VudCAqLworI2RlZmluZQlYUENfTV9JTlRFUlJVUFQJCTB4MDQJLyogc2VuZCBpbnRlcnJ1cHQgd2hlbiBtc2cgY29uc3VtZWQgKi8KKworCisjZGVmaW5lIFhQQ19NU0dfQUREUkVTUyhfcGF5bG9hZCkgXAorCQkoKHN0cnVjdCB4cGNfbXNnICopKCh1OCAqKShfcGF5bG9hZCkgLSBYUENfTVNHX1BBWUxPQURfT0ZGU0VUKSkKKworCisKKy8qCisgKiBEZWZpbmVzIG5vdGlmeSBlbnRyeS4KKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gbm90aWZ5IGEgbWVzc2FnZSdzIHNlbmRlciB0aGF0IHRoZWlyIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkCisgKiBhbmQgY29uc3VtZWQgYnkgdGhlIGludGVuZGVkIHJlY2lwaWVudC4KKyAqLworc3RydWN0IHhwY19ub3RpZnkgeworCXN0cnVjdCBzZW1hcGhvcmUgc2VtYTsJCS8qIG5vdGlmeSBzZW1hcGhvcmUgKi8KKwl1OCB0eXBlOwkJCS8qIHR5cGUgb2Ygbm90aWZpY2F0aW9uICovCisKKwkvKiB0aGUgZm9sbG93aW5nIHR3byBmaWVsZHMgYXJlIG9ubHkgdXNlZCBpZiB0eXBlID09IFhQQ19OX0NBTEwgKi8KKwl4cGNfbm90aWZ5X2Z1bmMgZnVuYzsJCS8qIHVzZXIncyBub3RpZnkgZnVuY3Rpb24gKi8KKwl2b2lkICprZXk7CQkJLyogcG9pbnRlciB0byB1c2VyJ3Mga2V5ICovCit9OworCisvKiBzdHJ1Y3QgeHBjX25vdGlmeSB0eXBlIG9mIG5vdGlmaWNhdGlvbiAqLworCisjZGVmaW5lCVhQQ19OX0NBTEwJCTB4MDEJLyogbm90aWZ5IGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IHVzZXIgKi8KKworCisKKy8qCisgKiBEZWZpbmUgdGhlIHN0cnVjdHVyZSB0aGF0IG1hbmFnZXMgYWxsIHRoZSBzdHVmZiByZXF1aXJlZCBieSBhIGNoYW5uZWwuIEluCisgKiBwYXJ0aWN1bGFyLCB0aGV5IGFyZSB1c2VkIHRvIG1hbmFnZSB0aGUgbWVzc2FnZXMgc2VudCBhY3Jvc3MgdGhlIGNoYW5uZWwuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgcHJpdmF0ZSB0byBhIHBhcnRpdGlvbiwgYW5kIGlzIE5PVCBzaGFyZWQgYWNyb3NzIHRoZQorICogcGFydGl0aW9uIGJvdW5kYXJ5LgorICoKKyAqIFRoZXJlIGlzIGFuIGFycmF5IG9mIHRoZXNlIHN0cnVjdHVyZXMgZm9yIGVhY2ggcmVtb3RlIHBhcnRpdGlvbi4gSXQgaXMKKyAqIGFsbG9jYXRlZCBhdCB0aGUgdGltZSBhIHBhcnRpdGlvbiBiZWNvbWVzIGFjdGl2ZS4gVGhlIGFycmF5IGNvbnRhaW5zIG9uZQorICogb2YgdGhlc2Ugc3RydWN0dXJlcyBmb3IgZWFjaCBwb3RlbnRpYWwgY2hhbm5lbCBjb25uZWN0aW9uIHRvIHRoYXQgcGFydGl0aW9uLgorICoKKyAqIEVhY2ggb2YgdGhlc2Ugc3RydWN0dXJlcyBtYW5hZ2VzIHR3byBtZXNzYWdlIHF1ZXVlcyAoY2lyY3VsYXIgYnVmZmVycykuCisgKiBUaGV5IGFyZSBhbGxvY2F0ZWQgYXQgdGhlIHRpbWUgYSBjaGFubmVsIGNvbm5lY3Rpb24gaXMgbWFkZS4gT25lIG9mCisgKiB0aGVzZSBtZXNzYWdlIHF1ZXVlcyAobG9jYWxfbXNncXVldWUpIGhvbGRzIHRoZSBsb2NhbGx5IGNyZWF0ZWQgbWVzc2FnZXMKKyAqIHRoYXQgYXJlIGRlc3RpbmVkIGZvciB0aGUgcmVtb3RlIHBhcnRpdGlvbi4gVGhlIG90aGVyIG9mIHRoZXNlIG1lc3NhZ2UKKyAqIHF1ZXVlcyAocmVtb3RlX21zZ3F1ZXVlKSBpcyBhIGxvY2FsbHkgY2FjaGVkIGNvcHkgb2YgdGhlIHJlbW90ZSBwYXJ0aXRpb24ncworICogb3duIGxvY2FsX21zZ3F1ZXVlLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgR2V0L1B1dCBwb2ludGVycyB1c2VkIHRvIG1hbmFnZSB0aGVzZQorICogdHdvIG1lc3NhZ2UgcXVldWVzLiBDb25zaWRlciB0aGUgbG9jYWxfbXNncXVldWUgdG8gYmUgb24gb25lIHBhcnRpdGlvbgorICogYW5kIHRoZSByZW1vdGVfbXNncXVldWUgdG8gYmUgaXRzIGNhY2hlZCBjb3B5IG9uIGFub3RoZXIgcGFydGl0aW9uLiBBCisgKiBkZXNjcmlwdGlvbiBvZiB3aGF0IGVhY2ggb2YgdGhlIGxldHRlcmVkIGFyZWFzIGNvbnRhaW5zIGlzIGluY2x1ZGVkLgorICoKKyAqCisgKiAgICAgICAgICAgICAgICAgICAgIGxvY2FsX21zZ3F1ZXVlICAgICAgcmVtb3RlX21zZ3F1ZXVlCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICB8Ly8vLy8vLy8vfCAgICAgIHwvLy8vLy8vLy98CisgKiAgICB3X3JlbW90ZV9HUC5nZXQgLS0+ICstLS0tLS0tLS0rICAgICAgfC8vLy8vLy8vL3wKKyAqICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBGICAgIHwgICAgICB8Ly8vLy8vLy8vfAorICogICAgIHJlbW90ZV9HUC5nZXQgIC0tPiArLS0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0rIDwtLSBsb2NhbF9HUC0+Z2V0CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICB8ICAgIEUgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgIHwgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgKy0tLS0tLS0tLSsgPC0tIHdfbG9jYWxfR1AuZ2V0CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgQiAgICB8ICAgICAgfC8vLy8vLy8vL3wKKyAqICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICB8Ly8vL0QvLy8vfAorICogICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgIHwvLy8vLy8vLy98CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgKy0tLS0tLS0tLSsgPC0tIHdfcmVtb3RlX0dQLnB1dAorICogICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgIHwvLy8vQy8vLy98CisgKiAgICAgIGxvY2FsX0dQLT5wdXQgLS0+ICstLS0tLS0tLS0rICAgICAgKy0tLS0tLS0tLSsgPC0tIHJlbW90ZV9HUC5wdXQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICB8Ly8vLy8vLy8vfAorICogICAgICAgICAgICAgICAgICAgICAgICB8ICAgIEEgICAgfCAgICAgIHwvLy8vLy8vLy98CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgfC8vLy8vLy8vL3wKKyAqICAgICB3X2xvY2FsX0dQLnB1dCAtLT4gKy0tLS0tLS0tLSsgICAgICB8Ly8vLy8vLy8vfAorICogICAgICAgICAgICAgICAgICAgICAgICB8Ly8vLy8vLy8vfCAgICAgIHwvLy8vLy8vLy98CisgKgorICoKKyAqCSAgICAoIHJlbW90ZV9HUC5bZ2V0fHB1dF0gYXJlIGNhY2hlZCBjb3BpZXMgb2YgdGhlIHJlbW90ZQorICoJICAgICAgcGFydGl0aW9uJ3MgbG9jYWxfR1AtPltnZXR8cHV0XSwgYW5kIHRodXMgdGhlaXIgdmFsdWVzIGNhbgorICoJICAgICAgbGFnIGJlaGluZCB0aGVpciBjb3VudGVycGFydHMgb24gdGhlIHJlbW90ZSBwYXJ0aXRpb24uICkKKyAqCisgKgorICogIEEgLSBNZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQsIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiBzZW50IHRvIHRoZQorICoJcmVtb3RlIHBhcnRpdGlvbi4KKyAqCisgKiAgQiAtIE1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIHNlbnQsIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiBhY2tub3dsZWRnZWQgYnkgdGhlCisgKiAgICAgIHJlbW90ZSBwYXJ0aXRpb24gYXMgaGF2aW5nIGJlZW4gcmVjZWl2ZWQuCisgKgorICogIEMgLSBBcmVhIHRoYXQgbmVlZHMgdG8gYmUgcHJlcGFyZWQgZm9yIHRoZSBjb3B5aW5nIG9mIHNlbnQgbWVzc2FnZXMsIGJ5CisgKgl0aGUgY2xlYXJpbmcgb2YgdGhlIG1lc3NhZ2UgZmxhZ3Mgb2YgYW55IHByZXZpb3VzbHkgcmVjZWl2ZWQgbWVzc2FnZXMuCisgKgorICogIEQgLSBBcmVhIGludG8gd2hpY2ggc2VudCBtZXNzYWdlcyBhcmUgdG8gYmUgY29waWVkIGZyb20gdGhlIHJlbW90ZQorICoJcGFydGl0aW9uJ3MgbG9jYWxfbXNncXVldWUgYW5kIHRoZW4gZGVsaXZlcmVkIHRvIHRoZWlyIGludGVuZGVkCisgKglyZWNpcGllbnRzLiBbIFRvIGFsbG93IGZvciBhIG11bHRpLW1lc3NhZ2UgY29weSwgYW5vdGhlciBwb2ludGVyCisgKgkobmV4dF9tc2dfdG9fcHVsbCkgaGFzIGJlZW4gYWRkZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbmV4dCBtZXNzYWdlCisgKgludW1iZXIgbmVlZGluZyB0byBiZSBjb3BpZWQgKHB1bGxlZCkuIEl0IGNoYXNlcyBhZnRlciB3X3JlbW90ZV9HUC5wdXQuCisgKglBbnkgbWVzc2FnZXMgbHlpbmcgYmV0d2VlbiB3X2xvY2FsX0dQLmdldCBhbmQgbmV4dF9tc2dfdG9fcHVsbCBoYXZlCisgKgliZWVuIGNvcGllZCBhbmQgYXJlIHJlYWR5IHRvIGJlIGRlbGl2ZXJlZC4gXQorICoKKyAqICBFIC0gTWVzc2FnZXMgdGhhdCBoYXZlIGJlZW4gY29waWVkIGFuZCBkZWxpdmVyZWQsIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbgorICoJYWNrbm93bGVkZ2VkIGJ5IHRoZSByZWNpcGllbnQgYXMgaGF2aW5nIGJlZW4gcmVjZWl2ZWQuCisgKgorICogIEYgLSBNZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiBhY2tub3dsZWRnZWQsIGJ1dCBYUEMgaGFzIG5vdCB5ZXQgbm90aWZpZWQgdGhlCisgKglzZW5kZXIgdGhhdCB0aGUgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgYnkgaXRzIGludGVuZGVkIHJlY2lwaWVudC4KKyAqCVRoaXMgaXMgYWxzbyBhbiBhcmVhIHRoYXQgbmVlZHMgdG8gYmUgcHJlcGFyZWQgZm9yIHRoZSBhbGxvY2F0aW5nIG9mCisgKgluZXcgbWVzc2FnZXMsIGJ5IHRoZSBjbGVhcmluZyBvZiB0aGUgbWVzc2FnZSBmbGFncyBvZiB0aGUgYWNrbm93bGVkZ2VkCisgKgltZXNzYWdlcy4KKyAqLworc3RydWN0IHhwY19jaGFubmVsIHsKKwlwYXJ0aWRfdCBwYXJ0aWQ7CQkvKiBJRCBvZiByZW1vdGUgcGFydGl0aW9uIGNvbm5lY3RlZCAqLworCXNwaW5sb2NrX3QgbG9jazsJCS8qIGxvY2sgZm9yIHVwZGF0aW5nIHRoaXMgc3RydWN0dXJlICovCisJdTMyIGZsYWdzOwkJCS8qIGdlbmVyYWwgZmxhZ3MgKi8KKworCWVudW0geHBjX3JldHZhbCByZWFzb247CQkvKiByZWFzb24gd2h5IGNoYW5uZWwgaXMgZGlzY29ubmVjdCdnICovCisJaW50IHJlYXNvbl9saW5lOwkJLyogbGluZSMgZGlzY29ubmVjdCBpbml0aWF0ZWQgZnJvbSAqLworCisJdTE2IG51bWJlcjsJCQkvKiBjaGFubmVsICMgKi8KKworCXUxNiBtc2dfc2l6ZTsJCQkvKiBzaXplb2YgZWFjaCBtc2cgZW50cnkgKi8KKwl1MTYgbG9jYWxfbmVudHJpZXM7CQkvKiAjb2YgbXNnIGVudHJpZXMgaW4gbG9jYWwgbXNnIHF1ZXVlICovCisJdTE2IHJlbW90ZV9uZW50cmllczsJCS8qICNvZiBtc2cgZW50cmllcyBpbiByZW1vdGUgbXNnIHF1ZXVlKi8KKworCXZvaWQgKmxvY2FsX21zZ3F1ZXVlX2Jhc2U7CS8qIGJhc2UgYWRkcmVzcyBvZiBrbWFsbG9jJ2Qgc3BhY2UgKi8KKwlzdHJ1Y3QgeHBjX21zZyAqbG9jYWxfbXNncXVldWU7CS8qIGxvY2FsIG1lc3NhZ2UgcXVldWUgKi8KKwl2b2lkICpyZW1vdGVfbXNncXVldWVfYmFzZTsJLyogYmFzZSBhZGRyZXNzIG9mIGttYWxsb2MnZCBzcGFjZSAqLworCXN0cnVjdCB4cGNfbXNnICpyZW1vdGVfbXNncXVldWU7LyogY2FjaGVkIGNvcHkgb2YgcmVtb3RlIHBhcnRpdGlvbidzICovCisJCQkJCS8qIGxvY2FsIG1lc3NhZ2UgcXVldWUgKi8KKwl1NjQgcmVtb3RlX21zZ3F1ZXVlX3BhOwkJLyogcGh5cyBhZGRyIG9mIHJlbW90ZSBwYXJ0aXRpb24ncyAqLworCQkJCQkvKiBsb2NhbCBtZXNzYWdlIHF1ZXVlICovCisKKwlhdG9taWNfdCByZWZlcmVuY2VzOwkJLyogI29mIGV4dGVybmFsIHJlZmVyZW5jZXMgdG8gcXVldWVzICovCisKKwlhdG9taWNfdCBuX29uX21zZ19hbGxvY2F0ZV93cTsgICAvKiAjb24gbXNnIGFsbG9jYXRpb24gd2FpdCBxdWV1ZSAqLworCXdhaXRfcXVldWVfaGVhZF90IG1zZ19hbGxvY2F0ZV93cTsgLyogbXNnIGFsbG9jYXRpb24gd2FpdCBxdWV1ZSAqLworCisJLyogcXVldWUgb2YgbXNnIHNlbmRlcnMgd2hvIHdhbnQgdG8gYmUgbm90aWZpZWQgd2hlbiBtc2cgcmVjZWl2ZWQgKi8KKworCWF0b21pY190IG5fdG9fbm90aWZ5OwkJLyogI29mIG1zZyBzZW5kZXJzIHRvIG5vdGlmeSAqLworCXN0cnVjdCB4cGNfbm90aWZ5ICpub3RpZnlfcXVldWU7Lyogbm90aWZ5IHF1ZXVlIGZvciBtZXNzYWdlcyBzZW50ICovCisKKwl4cGNfY2hhbm5lbF9mdW5jIGZ1bmM7CQkvKiB1c2VyJ3MgY2hhbm5lbCBmdW5jdGlvbiAqLworCXZvaWQgKmtleTsJCQkvKiBwb2ludGVyIHRvIHVzZXIncyBrZXkgKi8KKworCXN0cnVjdCBzZW1hcGhvcmUgbXNnX3RvX3B1bGxfc2VtYTsgLyogbmV4dCBtc2cgdG8gcHVsbCBzZXJpYWxpemF0aW9uICovCisJc3RydWN0IHNlbWFwaG9yZSB0ZWFyZG93bl9zZW1hOyAgICAvKiB3YWl0IGZvciB0ZWFyZG93biBjb21wbGV0aW9uICovCisKKwlzdHJ1Y3QgeHBjX29wZW5jbG9zZV9hcmdzICpsb2NhbF9vcGVuY2xvc2VfYXJnczsgLyogYXJncyBwYXNzZWQgb24gKi8KKwkJCQkJLyogb3BlbmluZyBvciBjbG9zaW5nIG9mIGNoYW5uZWwgKi8KKworCS8qIHZhcmlvdXMgZmxhdm9ycyBvZiBsb2NhbCBhbmQgcmVtb3RlIEdldC9QdXQgdmFsdWVzICovCisKKwlzdHJ1Y3QgeHBjX2dwICpsb2NhbF9HUDsJLyogbG9jYWwgR2V0L1B1dCB2YWx1ZXMgKi8KKwlzdHJ1Y3QgeHBjX2dwIHJlbW90ZV9HUDsJLyogcmVtb3RlIEdldC9QdXQgdmFsdWVzICovCisJc3RydWN0IHhwY19ncCB3X2xvY2FsX0dQOwkvKiB3b3JraW5nIGxvY2FsIEdldC9QdXQgdmFsdWVzICovCisJc3RydWN0IHhwY19ncCB3X3JlbW90ZV9HUDsJLyogd29ya2luZyByZW1vdGUgR2V0L1B1dCB2YWx1ZXMgKi8KKwlzNjQgbmV4dF9tc2dfdG9fcHVsbDsJCS8qIFB1dCB2YWx1ZSBvZiBuZXh0IG1zZyB0byBwdWxsICovCisKKwkvKiBrdGhyZWFkIG1hbmFnZW1lbnQgcmVsYXRlZCBmaWVsZHMgKi8KKworLy8gPj4+IHJldGhpbmsgaGF2aW5nIGt0aHJlYWRzX2Fzc2lnbmVkX2xpbWl0IGFuZCBrdGhyZWFkc19pZGxlX2xpbWl0OyBwZXJoYXBzCisvLyA+Pj4gYWxsb3cgdGhlIGFzc2lnbmVkIGxpbWl0IGJlIHVuYm91bmRlZCBhbmQgbGV0IHRoZSBpZGxlIGxpbWl0IGJlIGR5bmFtaWMKKy8vID4+PiBkZXBlbmRlbnQgb24gYWN0aXZpdHkgb3ZlciB0aGUgbGFzdCBpbnRlcnZhbCBvZiB0aW1lCisJYXRvbWljX3Qga3RocmVhZHNfYXNzaWduZWQ7CS8qICNvZiBrdGhyZWFkcyBhc3NpZ25lZCB0byBjaGFubmVsICovCisJdTMyIGt0aHJlYWRzX2Fzc2lnbmVkX2xpbWl0OyAJLyogbGltaXQgb24gI29mIGt0aHJlYWRzIGFzc2lnbmVkICovCisJYXRvbWljX3Qga3RocmVhZHNfaWRsZTsJCS8qICNvZiBrdGhyZWFkcyBpZGxlIHdhaXRpbmcgZm9yIHdvcmsgKi8KKwl1MzIga3RocmVhZHNfaWRsZV9saW1pdDsJLyogbGltaXQgb24gI29mIGt0aHJlYWRzIGlkbGUgKi8KKwlhdG9taWNfdCBrdGhyZWFkc19hY3RpdmU7CS8qICNvZiBrdGhyZWFkcyBhY3RpdmVseSB3b3JraW5nICovCisJLy8gPj4+IGZvbGxvd2luZyBmaWVsZCBpcyB0ZW1wb3JhcnkKKwl1MzIga3RocmVhZHNfY3JlYXRlZDsJCS8qIHRvdGFsICNvZiBrdGhyZWFkcyBjcmVhdGVkICovCisKKwl3YWl0X3F1ZXVlX2hlYWRfdCBpZGxlX3dxOwkvKiBpZGxlIGt0aHJlYWQgd2FpdCBxdWV1ZSAqLworCit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworCisvKiBzdHJ1Y3QgeHBjX2NoYW5uZWwgZmxhZ3MgKi8KKworI2RlZmluZQlYUENfQ19XQVNDT05ORUNURUQJMHgwMDAwMDAwMSAvKiBjaGFubmVsIHdhcyBjb25uZWN0ZWQgKi8KKworI2RlZmluZQlYUENfQ19ST1BFTlJFUExZCTB4MDAwMDAwMDIgLyogcmVtb3RlIG9wZW4gY2hhbm5lbCByZXBseSAqLworI2RlZmluZQlYUENfQ19PUEVOUkVQTFkJCTB4MDAwMDAwMDQgLyogbG9jYWwgb3BlbiBjaGFubmVsIHJlcGx5ICovCisjZGVmaW5lCVhQQ19DX1JPUEVOUkVRVUVTVAkweDAwMDAwMDA4IC8qIHJlbW90ZSBvcGVuIGNoYW5uZWwgcmVxdWVzdCAqLworI2RlZmluZQlYUENfQ19PUEVOUkVRVUVTVAkweDAwMDAwMDEwIC8qIGxvY2FsIG9wZW4gY2hhbm5lbCByZXF1ZXN0ICovCisKKyNkZWZpbmUJWFBDX0NfU0VUVVAJCTB4MDAwMDAwMjAgLyogY2hhbm5lbCdzIG1zZ3F1ZXVlcyBhcmUgYWxsb2MnZCAqLworI2RlZmluZQlYUENfQ19DT05ORUNUQ0FMTE9VVAkweDAwMDAwMDQwIC8qIGNoYW5uZWwgY29ubmVjdGVkIGNhbGxvdXQgbWFkZSAqLworI2RlZmluZQlYUENfQ19DT05ORUNURUQJCTB4MDAwMDAwODAgLyogbG9jYWwgY2hhbm5lbCBpcyBjb25uZWN0ZWQgKi8KKyNkZWZpbmUJWFBDX0NfQ09OTkVDVElORwkweDAwMDAwMTAwIC8qIGNoYW5uZWwgaXMgYmVpbmcgY29ubmVjdGVkICovCisKKyNkZWZpbmUJWFBDX0NfUkNMT1NFUkVQTFkJMHgwMDAwMDIwMCAvKiByZW1vdGUgY2xvc2UgY2hhbm5lbCByZXBseSAqLworI2RlZmluZQlYUENfQ19DTE9TRVJFUExZCTB4MDAwMDA0MDAgLyogbG9jYWwgY2xvc2UgY2hhbm5lbCByZXBseSAqLworI2RlZmluZQlYUENfQ19SQ0xPU0VSRVFVRVNUCTB4MDAwMDA4MDAgLyogcmVtb3RlIGNsb3NlIGNoYW5uZWwgcmVxdWVzdCAqLworI2RlZmluZQlYUENfQ19DTE9TRVJFUVVFU1QJMHgwMDAwMTAwMCAvKiBsb2NhbCBjbG9zZSBjaGFubmVsIHJlcXVlc3QgKi8KKworI2RlZmluZQlYUENfQ19ESVNDT05ORUNURUQJMHgwMDAwMjAwMCAvKiBjaGFubmVsIGlzIGRpc2Nvbm5lY3RlZCAqLworI2RlZmluZQlYUENfQ19ESVNDT05ORUNUSU5HCTB4MDAwMDQwMDAgLyogY2hhbm5lbCBpcyBiZWluZyBkaXNjb25uZWN0ZWQgKi8KKworCisKKy8qCisgKiBNYW5hZ2VzIGNoYW5uZWxzIG9uIGEgcGFydGl0aW9uIGJhc2lzLiBUaGVyZSBpcyBvbmUgb2YgdGhlc2Ugc3RydWN0dXJlcworICogZm9yIGVhY2ggcGFydGl0aW9uIChhIHBhcnRpdGlvbiB3aWxsIG5ldmVyIHV0aWxpemUgdGhlIHN0cnVjdHVyZSB0aGF0CisgKiByZXByZXNlbnRzIGl0c2VsZikuCisgKi8KK3N0cnVjdCB4cGNfcGFydGl0aW9uIHsKKworCS8qIFhQQyBIQiBpbmZyYXN0cnVjdHVyZSAqLworCisJdTY0IHJlbW90ZV9ycF9wYTsJCS8qIHBoeXMgYWRkciBvZiBwYXJ0aXRpb24ncyByc3ZkIHBnICovCisJdTY0IHJlbW90ZV92YXJzX3BhOwkJLyogcGh5cyBhZGRyIG9mIHBhcnRpdGlvbidzIHZhcnMgKi8KKwl1NjQgcmVtb3RlX3ZhcnNfcGFydF9wYTsJLyogcGh5cyBhZGRyIG9mIHBhcnRpdGlvbidzIHZhcnMgcGFydCAqLworCXU2NCBsYXN0X2hlYXJ0YmVhdDsJCS8qIEhCIGF0IGxhc3QgcmVhZCAqLworCXU2NCByZW1vdGVfYW1vc19wYWdlX3BhOwkvKiBwaHlzIGFkZHIgb2YgcGFydGl0aW9uJ3MgYW1vcyBwYWdlICovCisJaW50IHJlbW90ZV9hY3RfbmFzaWQ7CQkvKiBhY3RpdmUgcGFydCdzIGFjdC9kZWFjdCBuYXNpZCAqLworCWludCByZW1vdGVfYWN0X3BoeXNfY3B1aWQ7CS8qIGFjdGl2ZSBwYXJ0J3MgYWN0L2RlYWN0IHBoeXMgY3B1aWQgKi8KKwl1MzIgYWN0X0lSUV9yY3ZkOwkJLyogSVJRcyBzaW5jZSBhY3RpdmF0aW9uICovCisJc3BpbmxvY2tfdCBhY3RfbG9jazsJCS8qIHByb3RlY3QgdXBkYXRpbmcgb2YgYWN0X3N0YXRlICovCisJdTggYWN0X3N0YXRlOwkJCS8qIGZyb20gWFBDIEhCIHZpZXdwb2ludCAqLworCWVudW0geHBjX3JldHZhbCByZWFzb247CQkvKiByZWFzb24gcGFydGl0aW9uIGlzIGRlYWN0aXZhdGluZyAqLworCWludCByZWFzb25fbGluZTsJCS8qIGxpbmUjIGRlYWN0aXZhdGlvbiBpbml0aWF0ZWQgZnJvbSAqLworCWludCByZWFjdGl2YXRlX25hc2lkOwkJLyogbmFzaWQgaW4gcGFydGl0aW9uIHRvIHJlYWN0aXZhdGUgKi8KKworCisJLyogWFBDIGluZnJhc3RydWN0dXJlIHJlZmVyZW5jaW5nIGFuZCB0ZWFyZG93biBjb250cm9sICovCisKKwl1OCBzZXR1cF9zdGF0ZTsJCQkvKiBpbmZyYXN0cnVjdHVyZSBzZXR1cCBzdGF0ZSAqLworCXdhaXRfcXVldWVfaGVhZF90IHRlYXJkb3duX3dxOwkvKiBrdGhyZWFkIHdhaXRpbmcgdG8gdGVhcmRvd24gaW5mcmEgKi8KKwlhdG9taWNfdCByZWZlcmVuY2VzOwkJLyogI29mIHJlZmVyZW5jZXMgdG8gaW5mcmFzdHJ1Y3R1cmUgKi8KKworCisJLyoKKwkgKiBOT05FIE9GIFRIRSBQUkVDRURJTkcgRklFTERTIE9GIFRISVMgU1RSVUNUVVJFIFdJTEwgQkUgQ0xFQVJFRCBXSEVOCisJICogWFBDIFNFVFMgVVAgVEhFIE5FQ0VTU0FSWSBJTkZSQVNUUlVDVFVSRSBUTyBTVVBQT1JUIENST1NTIFBBUlRJVElPTgorCSAqIENPTU1VTklDQVRJT04uIEFMTCBPRiBUSEUgRk9MTE9XSU5HIEZJRUxEUyBXSUxMIEJFIENMRUFSRUQuIChUSEUKKwkgKiAnbmNoYW5uZWxzJyBGSUVMRCBNVVNUIEJFIFRIRSBGSVJTVCBPRiBUSEUgRklFTERTIFRPIEJFIENMRUFSRUQuKQorCSAqLworCisKKwl1OCBuY2hhbm5lbHM7CQkgICAvKiAjb2YgZGVmaW5lZCBjaGFubmVscyBzdXBwb3J0ZWQgKi8KKwlhdG9taWNfdCBuY2hhbm5lbHNfYWN0aXZlOyAvKiAjb2YgY2hhbm5lbHMgdGhhdCBhcmUgbm90IERJU0NPTk5FQ1RFRCAqLworCXN0cnVjdCB4cGNfY2hhbm5lbCAqY2hhbm5lbHM7LyogYXJyYXkgb2YgY2hhbm5lbCBzdHJ1Y3R1cmVzICovCisKKwl2b2lkICpsb2NhbF9HUHNfYmFzZTsJICAvKiBiYXNlIGFkZHJlc3Mgb2Yga21hbGxvYydkIHNwYWNlICovCisJc3RydWN0IHhwY19ncCAqbG9jYWxfR1BzOyAvKiBsb2NhbCBHZXQvUHV0IHZhbHVlcyAqLworCXZvaWQgKnJlbW90ZV9HUHNfYmFzZTsgICAgLyogYmFzZSBhZGRyZXNzIG9mIGttYWxsb2MnZCBzcGFjZSAqLworCXN0cnVjdCB4cGNfZ3AgKnJlbW90ZV9HUHM7LyogY29weSBvZiByZW1vdGUgcGFydGl0aW9uJ3MgbG9jYWwgR2V0L1B1dCAqLworCQkJCSAgLyogdmFsdWVzICovCisJdTY0IHJlbW90ZV9HUHNfcGE7CSAgLyogcGh5cyBhZGRyZXNzIG9mIHJlbW90ZSBwYXJ0aXRpb24ncyBsb2NhbCAqLworCQkJCSAgLyogR2V0L1B1dCB2YWx1ZXMgKi8KKworCisJLyogZmllbGRzIHVzZWQgdG8gcGFzcyBhcmdzIHdoZW4gb3BlbmluZyBvciBjbG9zaW5nIGEgY2hhbm5lbCAqLworCisJdm9pZCAqbG9jYWxfb3BlbmNsb3NlX2FyZ3NfYmFzZTsgIC8qIGJhc2UgYWRkcmVzcyBvZiBrbWFsbG9jJ2Qgc3BhY2UgKi8KKwlzdHJ1Y3QgeHBjX29wZW5jbG9zZV9hcmdzICpsb2NhbF9vcGVuY2xvc2VfYXJnczsgIC8qIGxvY2FsJ3MgYXJncyAqLworCXZvaWQgKnJlbW90ZV9vcGVuY2xvc2VfYXJnc19iYXNlOyAvKiBiYXNlIGFkZHJlc3Mgb2Yga21hbGxvYydkIHNwYWNlICovCisJc3RydWN0IHhwY19vcGVuY2xvc2VfYXJncyAqcmVtb3RlX29wZW5jbG9zZV9hcmdzOyAvKiBjb3B5IG9mIHJlbW90ZSdzICovCisJCQkJCSAgLyogYXJncyAqLworCXU2NCByZW1vdGVfb3BlbmNsb3NlX2FyZ3NfcGE7CSAgLyogcGh5cyBhZGRyIG9mIHJlbW90ZSdzIGFyZ3MgKi8KKworCisJLyogSVBJIHNlbmRpbmcsIHJlY2VpdmluZyBhbmQgaGFuZGxpbmcgcmVsYXRlZCBmaWVsZHMgKi8KKworCWludCByZW1vdGVfSVBJX25hc2lkOwkgICAgLyogbmFzaWQgb2Ygd2hlcmUgdG8gc2VuZCBJUElzICovCisJaW50IHJlbW90ZV9JUElfcGh5c19jcHVpZDsgIC8qIHBoeXMgQ1BVIElEIG9mIHdoZXJlIHRvIHNlbmQgSVBJcyAqLworCUFNT190ICpyZW1vdGVfSVBJX2Ftb192YTsgICAvKiBhZGRyZXNzIG9mIHJlbW90ZSBJUEkgQU1PX3Qgc3RydWN0dXJlICovCisKKwlBTU9fdCAqbG9jYWxfSVBJX2Ftb192YTsgICAgLyogYWRkcmVzcyBvZiBJUEkgQU1PX3Qgc3RydWN0dXJlICovCisJdTY0IGxvY2FsX0lQSV9hbW87CSAgICAvKiBJUEkgYW1vIGZsYWdzIHlldCB0byBiZSBoYW5kbGVkICovCisJY2hhciBJUElfb3duZXJbOF07CSAgICAvKiBJUEkgb3duZXIncyBuYW1lICovCisJc3RydWN0IHRpbWVyX2xpc3QgZHJvcHBlZF9JUElfdGltZXI7IC8qIGRyb3BwZWQgSVBJIHRpbWVyICovCisKKwlzcGlubG9ja190IElQSV9sb2NrOwkgICAgLyogSVBJIGhhbmRsZXIgbG9jayAqLworCisKKwkvKiBjaGFubmVsIG1hbmFnZXIgcmVsYXRlZCBmaWVsZHMgKi8KKworCWF0b21pY190IGNoYW5uZWxfbWdyX3JlcXVlc3RzOwkvKiAjb2YgcmVxdWVzdHMgdG8gYWN0aXZhdGUgY2hhbiBtZ3IgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBjaGFubmVsX21ncl93cTsgLyogY2hhbm5lbCBtZ3IncyB3YWl0IHF1ZXVlICovCisKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCisKKy8qIHN0cnVjdCB4cGNfcGFydGl0aW9uIGFjdF9zdGF0ZSB2YWx1ZXMgKGZvciBYUEMgSEIpICovCisKKyNkZWZpbmUJWFBDX1BfSU5BQ1RJVkUJCTB4MDAJLyogcGFydGl0aW9uIGlzIG5vdCBhY3RpdmUgKi8KKyNkZWZpbmUgWFBDX1BfQUNUSVZBVElPTl9SRVEJMHgwMQkvKiBjcmVhdGVkIHRocmVhZCB0byBhY3RpdmF0ZSAqLworI2RlZmluZSBYUENfUF9BQ1RJVkFUSU5HCTB4MDIJLyogYWN0aXZhdGlvbiB0aHJlYWQgc3RhcnRlZCAqLworI2RlZmluZSBYUENfUF9BQ1RJVkUJCTB4MDMJLyogeHBjX3BhcnRpdGlvbl91cCgpIHdhcyBjYWxsZWQgKi8KKyNkZWZpbmUgWFBDX1BfREVBQ1RJVkFUSU5HCTB4MDQJLyogcGFydGl0aW9uIGRlYWN0aXZhdGlvbiBpbml0aWF0ZWQgKi8KKworCisjZGVmaW5lIFhQQ19ERUFDVElWQVRFX1BBUlRJVElPTihfcCwgX3JlYXNvbikgXAorCQkJeHBjX2RlYWN0aXZhdGVfcGFydGl0aW9uKF9fTElORV9fLCAoX3ApLCAoX3JlYXNvbikpCisKKworLyogc3RydWN0IHhwY19wYXJ0aXRpb24gc2V0dXBfc3RhdGUgdmFsdWVzICovCisKKyNkZWZpbmUgWFBDX1BfVU5TRVQJCTB4MDAJLyogaW5mcmFzdHJ1Y3R1cmUgd2FzIG5ldmVyIHNldHVwICovCisjZGVmaW5lIFhQQ19QX1NFVFVQCQkweDAxCS8qIGluZnJhc3RydWN0dXJlIGlzIHNldHVwICovCisjZGVmaW5lIFhQQ19QX1dURUFSRE9XTgkJMHgwMgkvKiB3YWl0aW5nIHRvIHRlYXJkb3duIGluZnJhc3RydWN0dXJlICovCisjZGVmaW5lIFhQQ19QX1RPUk5ET1dOCQkweDAzCS8qIGluZnJhc3RydWN0dXJlIGlzIHRvcm5kb3duICovCisKKworLyoKKyAqIHN0cnVjdCB4cGNfcGFydGl0aW9uIElQSV90aW1lciAjb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBjaGVja2luZyBmb3IKKyAqIGRyb3BwZWQgSVBJcy4gVGhlc2Ugb2NjdXIgd2hlbmV2ZXIgYW4gSVBJIGFtbyB3cml0ZSBkb2Vzbid0IGNvbXBsZXRlIHVudGlsCisgKiBhZnRlciB0aGUgSVBJIHdhcyByZWNlaXZlZC4KKyAqLworI2RlZmluZSBYUENfUF9EUk9QUEVEX0lQSV9XQUlUCSgwLjI1ICogSFopCisKKworI2RlZmluZSBYUENfUEFSVElEKF9wKQkoKHBhcnRpZF90KSAoKF9wKSAtICZ4cGNfcGFydGl0aW9uc1swXSkpCisKKworCisvKiBmb3VuZCBpbiB4cF9tYWluLmMgKi8KK2V4dGVybiBzdHJ1Y3QgeHBjX3JlZ2lzdHJhdGlvbiB4cGNfcmVnaXN0cmF0aW9uc1tdOworCisKKy8qID4+PiBmb3VuZCBpbiB4cGNfbWFpbi5jIG9ubHkgKi8KK2V4dGVybiBzdHJ1Y3QgZGV2aWNlICp4cGNfcGFydDsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlICp4cGNfY2hhbjsKK2V4dGVybiBpcnFyZXR1cm5fdCB4cGNfbm90aWZ5X0lSUV9oYW5kbGVyKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiB2b2lkIHhwY19kcm9wcGVkX0lQSV9jaGVjayhzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqKTsKK2V4dGVybiB2b2lkIHhwY19hY3RpdmF0ZV9rdGhyZWFkcyhzdHJ1Y3QgeHBjX2NoYW5uZWwgKiwgaW50KTsKK2V4dGVybiB2b2lkIHhwY19jcmVhdGVfa3RocmVhZHMoc3RydWN0IHhwY19jaGFubmVsICosIGludCk7CitleHRlcm4gdm9pZCB4cGNfZGlzY29ubmVjdF93YWl0KGludCk7CisKKworLyogZm91bmQgaW4geHBjX21haW4uYyBhbmQgZWZpLXhwYy5jICovCitleHRlcm4gdm9pZCB4cGNfYWN0aXZhdGVfcGFydGl0aW9uKHN0cnVjdCB4cGNfcGFydGl0aW9uICopOworCisKKy8qIGZvdW5kIGluIHhwY19wYXJ0aXRpb24uYyAqLworZXh0ZXJuIGludCB4cGNfZXhpdGluZzsKK2V4dGVybiBpbnQgeHBjX2hiX2ludGVydmFsOworZXh0ZXJuIGludCB4cGNfaGJfY2hlY2tfaW50ZXJ2YWw7CitleHRlcm4gc3RydWN0IHhwY192YXJzICp4cGNfdmFyczsKK2V4dGVybiBzdHJ1Y3QgeHBjX3JzdmRfcGFnZSAqeHBjX3JzdmRfcGFnZTsKK2V4dGVybiBzdHJ1Y3QgeHBjX3ZhcnNfcGFydCAqeHBjX3ZhcnNfcGFydDsKK2V4dGVybiBzdHJ1Y3QgeHBjX3BhcnRpdGlvbiB4cGNfcGFydGl0aW9uc1tYUF9NQVhfUEFSVElUSU9OUyArIDFdOworZXh0ZXJuIGNoYXIgeHBjX3JlbW90ZV9jb3B5X2J1ZmZlcltdOworZXh0ZXJuIHN0cnVjdCB4cGNfcnN2ZF9wYWdlICp4cGNfcnN2ZF9wYWdlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB4cGNfYWxsb3dfSVBJX29wcyh2b2lkKTsKK2V4dGVybiB2b2lkIHhwY19yZXN0cmljdF9JUElfb3BzKHZvaWQpOworZXh0ZXJuIGludCB4cGNfaWRlbnRpZnlfYWN0X0lSUV9zZW5kZXIodm9pZCk7CitleHRlcm4gZW51bSB4cGNfcmV0dmFsIHhwY19tYXJrX3BhcnRpdGlvbl9hY3RpdmUoc3RydWN0IHhwY19wYXJ0aXRpb24gKik7CitleHRlcm4gdm9pZCB4cGNfbWFya19wYXJ0aXRpb25faW5hY3RpdmUoc3RydWN0IHhwY19wYXJ0aXRpb24gKik7CitleHRlcm4gdm9pZCB4cGNfZGlzY292ZXJ5KHZvaWQpOworZXh0ZXJuIHZvaWQgeHBjX2NoZWNrX3JlbW90ZV9oYih2b2lkKTsKK2V4dGVybiB2b2lkIHhwY19kZWFjdGl2YXRlX3BhcnRpdGlvbihjb25zdCBpbnQsIHN0cnVjdCB4cGNfcGFydGl0aW9uICosCisJCQkJCQllbnVtIHhwY19yZXR2YWwpOworZXh0ZXJuIGVudW0geHBjX3JldHZhbCB4cGNfaW5pdGlhdGVfcGFydGlkX3RvX25hc2lkcyhwYXJ0aWRfdCwgdm9pZCAqKTsKKworCisvKiBmb3VuZCBpbiB4cGNfY2hhbm5lbC5jICovCitleHRlcm4gdm9pZCB4cGNfaW5pdGlhdGVfY29ubmVjdChpbnQpOworZXh0ZXJuIHZvaWQgeHBjX2luaXRpYXRlX2Rpc2Nvbm5lY3QoaW50KTsKK2V4dGVybiBlbnVtIHhwY19yZXR2YWwgeHBjX2luaXRpYXRlX2FsbG9jYXRlKHBhcnRpZF90LCBpbnQsIHUzMiwgdm9pZCAqKik7CitleHRlcm4gZW51bSB4cGNfcmV0dmFsIHhwY19pbml0aWF0ZV9zZW5kKHBhcnRpZF90LCBpbnQsIHZvaWQgKik7CitleHRlcm4gZW51bSB4cGNfcmV0dmFsIHhwY19pbml0aWF0ZV9zZW5kX25vdGlmeShwYXJ0aWRfdCwgaW50LCB2b2lkICosCisJCQkJCQl4cGNfbm90aWZ5X2Z1bmMsIHZvaWQgKik7CitleHRlcm4gdm9pZCB4cGNfaW5pdGlhdGVfcmVjZWl2ZWQocGFydGlkX3QsIGludCwgdm9pZCAqKTsKK2V4dGVybiBlbnVtIHhwY19yZXR2YWwgeHBjX3NldHVwX2luZnJhc3RydWN0dXJlKHN0cnVjdCB4cGNfcGFydGl0aW9uICopOworZXh0ZXJuIGVudW0geHBjX3JldHZhbCB4cGNfcHVsbF9yZW1vdGVfdmFyc19wYXJ0KHN0cnVjdCB4cGNfcGFydGl0aW9uICopOworZXh0ZXJuIHZvaWQgeHBjX3Byb2Nlc3NfY2hhbm5lbF9hY3Rpdml0eShzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqKTsKK2V4dGVybiB2b2lkIHhwY19jb25uZWN0ZWRfY2FsbG91dChzdHJ1Y3QgeHBjX2NoYW5uZWwgKik7CitleHRlcm4gdm9pZCB4cGNfZGVsaXZlcl9tc2coc3RydWN0IHhwY19jaGFubmVsICopOworZXh0ZXJuIHZvaWQgeHBjX2Rpc2Nvbm5lY3RfY2hhbm5lbChjb25zdCBpbnQsIHN0cnVjdCB4cGNfY2hhbm5lbCAqLAorCQkJCQllbnVtIHhwY19yZXR2YWwsIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCB4cGNfZGlzY29ubmVjdGVkX2NhbGxvdXQoc3RydWN0IHhwY19jaGFubmVsICopOworZXh0ZXJuIHZvaWQgeHBjX3BhcnRpdGlvbl9kb3duKHN0cnVjdCB4cGNfcGFydGl0aW9uICosIGVudW0geHBjX3JldHZhbCk7CitleHRlcm4gdm9pZCB4cGNfdGVhcmRvd25faW5mcmFzdHJ1Y3R1cmUoc3RydWN0IHhwY19wYXJ0aXRpb24gKik7CisKKworCitzdGF0aWMgaW5saW5lIHZvaWQKK3hwY193YWtldXBfY2hhbm5lbF9tZ3Ioc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQpCit7CisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwYXJ0LT5jaGFubmVsX21ncl9yZXF1ZXN0cykgPT0gMSkgeworCQl3YWtlX3VwKCZwYXJ0LT5jaGFubmVsX21ncl93cSk7CisJfQorfQorCisKKworLyoKKyAqIFRoZXNlIG5leHQgdHdvIGlubGluZXMgYXJlIHVzZWQgdG8ga2VlcCB1cyBmcm9tIHRlYXJpbmcgZG93biBhIGNoYW5uZWwncworICogbXNnIHF1ZXVlcyB3aGlsZSBhIHRocmVhZCBtYXkgYmUgcmVmZXJlbmNpbmcgdGhlbS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit4cGNfbXNncXVldWVfcmVmKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gpCit7CisJYXRvbWljX2luYygmY2gtPnJlZmVyZW5jZXMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hwY19tc2dxdWV1ZV9kZXJlZihzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoKQoreworCXMzMiByZWZzID0gYXRvbWljX2RlY19yZXR1cm4oJmNoLT5yZWZlcmVuY2VzKTsKKworCURCVUdfT04ocmVmcyA8IDApOworCWlmIChyZWZzID09IDApIHsKKwkJeHBjX3dha2V1cF9jaGFubmVsX21ncigmeHBjX3BhcnRpdGlvbnNbY2gtPnBhcnRpZF0pOworCX0KK30KKworCisKKyNkZWZpbmUgWFBDX0RJU0NPTk5FQ1RfQ0hBTk5FTChfY2gsIF9yZWFzb24sIF9pcnFmbGdzKSBcCisJCXhwY19kaXNjb25uZWN0X2NoYW5uZWwoX19MSU5FX18sIF9jaCwgX3JlYXNvbiwgX2lycWZsZ3MpCisKKworLyoKKyAqIFRoZXNlIHR3byBpbmxpbmVzIGFyZSB1c2VkIHRvIGtlZXAgdXMgZnJvbSB0ZWFyaW5nIGRvd24gYSBwYXJ0aXRpb24ncworICogc2V0dXAgaW5mcmFzdHJ1Y3R1cmUgd2hpbGUgYSB0aHJlYWQgbWF5IGJlIHJlZmVyZW5jaW5nIGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3hwY19wYXJ0X2RlcmVmKHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0KQoreworCXMzMiByZWZzID0gYXRvbWljX2RlY19yZXR1cm4oJnBhcnQtPnJlZmVyZW5jZXMpOworCisKKwlEQlVHX09OKHJlZnMgPCAwKTsKKwlpZiAocmVmcyA9PSAwICYmIHBhcnQtPnNldHVwX3N0YXRlID09IFhQQ19QX1dURUFSRE9XTikgeworCQl3YWtlX3VwKCZwYXJ0LT50ZWFyZG93bl93cSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludAoreHBjX3BhcnRfcmVmKHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0KQoreworCWludCBzZXR1cDsKKworCisJYXRvbWljX2luYygmcGFydC0+cmVmZXJlbmNlcyk7CisJc2V0dXAgPSAocGFydC0+c2V0dXBfc3RhdGUgPT0gWFBDX1BfU0VUVVApOworCWlmICghc2V0dXApIHsKKwkJeHBjX3BhcnRfZGVyZWYocGFydCk7CisJfQorCXJldHVybiBzZXR1cDsKK30KKworCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1hY3JvIGlzIHRvIGJlIHVzZWQgZm9yIHRoZSBzZXR0aW5nIG9mIHRoZSByZWFzb24gYW5kCisgKiByZWFzb25fbGluZSBmaWVsZHMgaW4gYm90aCB0aGUgc3RydWN0IHhwY19jaGFubmVsIGFuZCBzdHJ1Y3QgeHBjX3BhcnRpdGlvbgorICogc3RydWN0dXJlcy4KKyAqLworI2RlZmluZSBYUENfU0VUX1JFQVNPTihfcCwgX3JlYXNvbiwgX2xpbmUpIFwKKwl7IFwKKwkJKF9wKS0+cmVhc29uID0gX3JlYXNvbjsgXAorCQkoX3ApLT5yZWFzb25fbGluZSA9IF9saW5lOyBcCisJfQorCisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgc2V0IG9mIG1hY3JvcyBhbmQgaW5saW5lcyBhcmUgdXNlZCBmb3IgdGhlIHNlbmRpbmcgYW5kCisgKiByZWNlaXZpbmcgb2YgSVBJcyAoYWxzbyBrbm93biBhcyBJUlFzKS4gVGhlcmUgYXJlIHR3byBmbGF2b3JzIG9mIElQSXMsCisgKiBvbmUgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggcGFydGl0aW9uIGFjdGl2aXR5IChTR0lfWFBDX0FDVElWQVRFKSBhbmQKKyAqIHRoZSBvdGhlciB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBjaGFubmVsIGFjdGl2aXR5IChTR0lfWFBDX05PVElGWSkuCisgKi8KKworc3RhdGljIGlubGluZSB1NjQKK3hwY19JUElfcmVjZWl2ZShBTU9fdCAqYW1vKQoreworCXJldHVybiBGRVRDSE9QX0xPQURfT1AoVE9fQU1PKCh1NjQpICZhbW8tPnZhcmlhYmxlKSwgRkVUQ0hPUF9DTEVBUik7Cit9CisKKworc3RhdGljIGlubGluZSBlbnVtIHhwY19yZXR2YWwKK3hwY19JUElfc2VuZChBTU9fdCAqYW1vLCB1NjQgZmxhZywgaW50IG5hc2lkLCBpbnQgcGh5c19jcHVpZCwgaW50IHZlY3RvcikKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCisJbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKKworCUZFVENIT1BfU1RPUkVfT1AoVE9fQU1PKCh1NjQpICZhbW8tPnZhcmlhYmxlKSwgRkVUQ0hPUF9PUiwgZmxhZyk7CisJc25fc2VuZF9JUElfcGh5cyhuYXNpZCwgcGh5c19jcHVpZCwgdmVjdG9yLCAwKTsKKworCS8qCisJICogV2UgbXVzdCBhbHdheXMgdXNlIHRoZSBub2ZhdWx0IGZ1bmN0aW9uIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZQorCSAqIGFyZSBvbiBhIFNodWIgMS4xIHN5c3RlbSBvciBhIFNodWIgMS4yIHNsaWNlIDB4YyBwcm9jZXNzb3IuIElmIHdlCisJICogZGlkbid0LCB3ZSdkIG5ldmVyIGtub3cgdGhhdCB0aGUgb3RoZXIgcGFydGl0aW9uIGlzIGRvd24gYW5kIHdvdWxkCisJICoga2VlcCBzZW5kaW5nIElQSXMgYW5kIEFNT3MgdG8gaXQgdW50aWwgdGhlIGhlYXJ0YmVhdCB0aW1lcyBvdXQuCisJICovCisJcmV0ID0geHBfbm9mYXVsdF9QSU9SKCh1NjQgKikgR0xPQkFMX01NUl9BRERSKE5BU0lEX0dFVCgmYW1vLT52YXJpYWJsZSksCisJCQkJeHBfbm9mYXVsdF9QSU9SX3RhcmdldCkpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKKworCXJldHVybiAoKHJldCA9PSAwKSA/IHhwY1N1Y2Nlc3MgOiB4cGNQaW9SZWFkRXJyb3IpOworfQorCisKKy8qCisgKiBJUElzIGFzc29jaWF0ZWQgd2l0aCBTR0lfWFBDX0FDVElWQVRFIElSUS4KKyAqLworCisvKgorICogRmxhZyB0aGUgYXBwcm9wcmlhdGUgQU1PIHZhcmlhYmxlIGFuZCBzZW5kIGFuIElQSSB0byB0aGUgc3BlY2lmaWVkIG5vZGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoreHBjX2FjdGl2YXRlX0lSUV9zZW5kKHU2NCBhbW9zX3BhZ2UsIGludCBmcm9tX25hc2lkLCBpbnQgdG9fbmFzaWQsCisJCQlpbnQgdG9fcGh5c19jcHVpZCkKK3sKKwlpbnQgd19pbmRleCA9IFhQQ19OQVNJRF9XX0lOREVYKGZyb21fbmFzaWQpOworCWludCBiX2luZGV4ID0gWFBDX05BU0lEX0JfSU5ERVgoZnJvbV9uYXNpZCk7CisJQU1PX3QgKmFtb3MgPSAoQU1PX3QgKikgX192YShhbW9zX3BhZ2UgKworCQkJCQkoWFBfTUFYX1BBUlRJVElPTlMgKiBzaXplb2YoQU1PX3QpKSk7CisKKworCSh2b2lkKSB4cGNfSVBJX3NlbmQoJmFtb3Nbd19pbmRleF0sICgxVUwgPDwgYl9pbmRleCksIHRvX25hc2lkLAorCQkJCXRvX3BoeXNfY3B1aWQsIFNHSV9YUENfQUNUSVZBVEUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hwY19JUElfc2VuZF9hY3RpdmF0ZShzdHJ1Y3QgeHBjX3ZhcnMgKnZhcnMpCit7CisJeHBjX2FjdGl2YXRlX0lSUV9zZW5kKHZhcnMtPmFtb3NfcGFnZV9wYSwgY25vZGVpZF90b19uYXNpZCgwKSwKKwkJCQl2YXJzLT5hY3RfbmFzaWQsIHZhcnMtPmFjdF9waHlzX2NwdWlkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit4cGNfSVBJX3NlbmRfYWN0aXZhdGVkKHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0KQoreworCXhwY19hY3RpdmF0ZV9JUlFfc2VuZChwYXJ0LT5yZW1vdGVfYW1vc19wYWdlX3BhLCBjbm9kZWlkX3RvX25hc2lkKDApLAorCQkJcGFydC0+cmVtb3RlX2FjdF9uYXNpZCwgcGFydC0+cmVtb3RlX2FjdF9waHlzX2NwdWlkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit4cGNfSVBJX3NlbmRfcmVhY3RpdmF0ZShzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCkKK3sKKwl4cGNfYWN0aXZhdGVfSVJRX3NlbmQoeHBjX3ZhcnMtPmFtb3NfcGFnZV9wYSwgcGFydC0+cmVhY3RpdmF0ZV9uYXNpZCwKKwkJCQl4cGNfdmFycy0+YWN0X25hc2lkLCB4cGNfdmFycy0+YWN0X3BoeXNfY3B1aWQpOworfQorCisKKy8qCisgKiBJUElzIGFzc29jaWF0ZWQgd2l0aCBTR0lfWFBDX05PVElGWSBJUlEuCisgKi8KKworLyoKKyAqIFNlbmQgYW4gSVBJIHRvIHRoZSByZW1vdGUgcGFydGl0aW9uIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogc3BlY2lmaWVkIGNoYW5uZWwuCisgKi8KKyNkZWZpbmUgWFBDX05PVElGWV9JUlFfU0VORChfY2gsIF9pcGlfZiwgX2lycV9mKSBcCisJCXhwY19ub3RpZnlfSVJRX3NlbmQoX2NoLCBfaXBpX2YsICNfaXBpX2YsIF9pcnFfZikKKworc3RhdGljIGlubGluZSB2b2lkCit4cGNfbm90aWZ5X0lSUV9zZW5kKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsIHU4IGlwaV9mbGFnLCBjaGFyICppcGlfZmxhZ19zdHJpbmcsCisJCQl1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpCit7CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbY2gtPnBhcnRpZF07CisJZW51bSB4cGNfcmV0dmFsIHJldDsKKworCisJaWYgKGxpa2VseShwYXJ0LT5hY3Rfc3RhdGUgIT0gWFBDX1BfREVBQ1RJVkFUSU5HKSkgeworCQlyZXQgPSB4cGNfSVBJX3NlbmQocGFydC0+cmVtb3RlX0lQSV9hbW9fdmEsCisJCQkJCSh1NjQpIGlwaV9mbGFnIDw8IChjaC0+bnVtYmVyICogOCksCisJCQkJCXBhcnQtPnJlbW90ZV9JUElfbmFzaWQsCisJCQkJCXBhcnQtPnJlbW90ZV9JUElfcGh5c19jcHVpZCwKKwkJCQkJU0dJX1hQQ19OT1RJRlkpOworCQlkZXZfZGJnKHhwY19jaGFuLCAiJXMgc2VudCB0byBwYXJ0aWQ9JWQsIGNoYW5uZWw9JWQsIHJldD0lZFxuIiwKKwkJCWlwaV9mbGFnX3N0cmluZywgY2gtPnBhcnRpZCwgY2gtPm51bWJlciwgcmV0KTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSB4cGNTdWNjZXNzKSkgeworCQkJaWYgKGlycV9mbGFncyAhPSBOVUxMKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssICppcnFfZmxhZ3MpOworCQkJfQorCQkJWFBDX0RFQUNUSVZBVEVfUEFSVElUSU9OKHBhcnQsIHJldCk7CisJCQlpZiAoaXJxX2ZsYWdzICE9IE5VTEwpIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssICppcnFfZmxhZ3MpOworCQkJfQorCQl9CisJfQorfQorCisKKy8qCisgKiBNYWtlIGl0IGxvb2sgbGlrZSB0aGUgcmVtb3RlIHBhcnRpdGlvbiwgd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogc3BlY2lmaWVkIGNoYW5uZWwsIHNlbnQgdXMgYW4gSVBJLiBUaGlzIGZha2VkIElQSSB3aWxsIGJlIGhhbmRsZWQKKyAqIGJ5IHhwY19kcm9wcGVkX0lQSV9jaGVjaygpLgorICovCisjZGVmaW5lIFhQQ19OT1RJRllfSVJRX1NFTkRfTE9DQUwoX2NoLCBfaXBpX2YpIFwKKwkJeHBjX25vdGlmeV9JUlFfc2VuZF9sb2NhbChfY2gsIF9pcGlfZiwgI19pcGlfZikKKworc3RhdGljIGlubGluZSB2b2lkCit4cGNfbm90aWZ5X0lSUV9zZW5kX2xvY2FsKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsIHU4IGlwaV9mbGFnLAorCQkJCWNoYXIgKmlwaV9mbGFnX3N0cmluZykKK3sKKwlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCA9ICZ4cGNfcGFydGl0aW9uc1tjaC0+cGFydGlkXTsKKworCisJRkVUQ0hPUF9TVE9SRV9PUChUT19BTU8oKHU2NCkgJnBhcnQtPmxvY2FsX0lQSV9hbW9fdmEtPnZhcmlhYmxlKSwKKwkJCUZFVENIT1BfT1IsICgodTY0KSBpcGlfZmxhZyA8PCAoY2gtPm51bWJlciAqIDgpKSk7CisJZGV2X2RiZyh4cGNfY2hhbiwgIiVzIHNlbnQgbG9jYWwgZnJvbSBwYXJ0aWQ9JWQsIGNoYW5uZWw9JWRcbiIsCisJCWlwaV9mbGFnX3N0cmluZywgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7Cit9CisKKworLyoKKyAqIFRoZSBzZW5kaW5nIGFuZCByZWNlaXZpbmcgb2YgSVBJcyBpbmNsdWRlcyB0aGUgc2V0dGluZyBvZiBhbiBBTU8gdmFyaWFibGUKKyAqIHRvIGluZGljYXRlIHRoZSByZWFzb24gdGhlIElQSSB3YXMgc2VudC4gVGhlIDY0LWJpdCB2YXJpYWJsZSBpcyBkaXZpZGVkCisgKiB1cCBpbnRvIGVpZ2h0IGJ5dGVzLCBvcmRlcmVkIGZyb20gcmlnaHQgdG8gbGVmdC4gQnl0ZSB6ZXJvIHBlcnRhaW5zIHRvCisgKiBjaGFubmVsIDAsIGJ5dGUgb25lIHRvIGNoYW5uZWwgMSwgYW5kIHNvIG9uLiBFYWNoIGJ5dGUgaXMgZGVzY3JpYmVkIGJ5CisgKiB0aGUgZm9sbG93aW5nIElQSSBmbGFncy4KKyAqLworCisjZGVmaW5lCVhQQ19JUElfQ0xPU0VSRVFVRVNUCTB4MDEKKyNkZWZpbmUJWFBDX0lQSV9DTE9TRVJFUExZCTB4MDIKKyNkZWZpbmUJWFBDX0lQSV9PUEVOUkVRVUVTVAkweDA0CisjZGVmaW5lCVhQQ19JUElfT1BFTlJFUExZCTB4MDgKKyNkZWZpbmUJWFBDX0lQSV9NU0dSRVFVRVNUCTB4MTAKKworCisvKiBnaXZlbiBhbiBBTU8gdmFyaWFibGUgYW5kIGEgY2hhbm5lbCMsIGdldCBpdHMgYXNzb2NpYXRlZCBJUEkgZmxhZ3MgKi8KKyNkZWZpbmUgWFBDX0dFVF9JUElfRkxBR1MoX2FtbywgX2MpCSgodTgpICgoKF9hbW8pID4+ICgoX2MpICogOCkpICYgMHhmZikpCisKKyNkZWZpbmUJWFBDX0FOWV9PUEVOQ0xPU0VfSVBJX0ZMQUdTX1NFVChfYW1vKSAoKF9hbW8pICYgMHgwZjBmMGYwZjBmMGYwZjBmKQorI2RlZmluZSBYUENfQU5ZX01TR19JUElfRkxBR1NfU0VUKF9hbW8pICAgICAgICgoX2FtbykgJiAweDEwMTAxMDEwMTAxMDEwMTApCisKKworc3RhdGljIGlubGluZSB2b2lkCit4cGNfSVBJX3NlbmRfY2xvc2VyZXF1ZXN0KHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsIHVuc2lnbmVkIGxvbmcgKmlycV9mbGFncykKK3sKKwlzdHJ1Y3QgeHBjX29wZW5jbG9zZV9hcmdzICphcmdzID0gY2gtPmxvY2FsX29wZW5jbG9zZV9hcmdzOworCisKKwlhcmdzLT5yZWFzb24gPSBjaC0+cmVhc29uOworCisJWFBDX05PVElGWV9JUlFfU0VORChjaCwgWFBDX0lQSV9DTE9TRVJFUVVFU1QsIGlycV9mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoreHBjX0lQSV9zZW5kX2Nsb3NlcmVwbHkoc3RydWN0IHhwY19jaGFubmVsICpjaCwgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKQoreworCVhQQ19OT1RJRllfSVJRX1NFTkQoY2gsIFhQQ19JUElfQ0xPU0VSRVBMWSwgaXJxX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit4cGNfSVBJX3NlbmRfb3BlbnJlcXVlc3Qoc3RydWN0IHhwY19jaGFubmVsICpjaCwgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKQoreworCXN0cnVjdCB4cGNfb3BlbmNsb3NlX2FyZ3MgKmFyZ3MgPSBjaC0+bG9jYWxfb3BlbmNsb3NlX2FyZ3M7CisKKworCWFyZ3MtPm1zZ19zaXplID0gY2gtPm1zZ19zaXplOworCWFyZ3MtPmxvY2FsX25lbnRyaWVzID0gY2gtPmxvY2FsX25lbnRyaWVzOworCisJWFBDX05PVElGWV9JUlFfU0VORChjaCwgWFBDX0lQSV9PUEVOUkVRVUVTVCwgaXJxX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit4cGNfSVBJX3NlbmRfb3BlbnJlcGx5KHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsIHVuc2lnbmVkIGxvbmcgKmlycV9mbGFncykKK3sKKwlzdHJ1Y3QgeHBjX29wZW5jbG9zZV9hcmdzICphcmdzID0gY2gtPmxvY2FsX29wZW5jbG9zZV9hcmdzOworCisKKwlhcmdzLT5yZW1vdGVfbmVudHJpZXMgPSBjaC0+cmVtb3RlX25lbnRyaWVzOworCWFyZ3MtPmxvY2FsX25lbnRyaWVzID0gY2gtPmxvY2FsX25lbnRyaWVzOworCWFyZ3MtPmxvY2FsX21zZ3F1ZXVlX3BhID0gX19wYShjaC0+bG9jYWxfbXNncXVldWUpOworCisJWFBDX05PVElGWV9JUlFfU0VORChjaCwgWFBDX0lQSV9PUEVOUkVQTFksIGlycV9mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoreHBjX0lQSV9zZW5kX21zZ3JlcXVlc3Qoc3RydWN0IHhwY19jaGFubmVsICpjaCkKK3sKKwlYUENfTk9USUZZX0lSUV9TRU5EKGNoLCBYUENfSVBJX01TR1JFUVVFU1QsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hwY19JUElfc2VuZF9sb2NhbF9tc2dyZXF1ZXN0KHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gpCit7CisJWFBDX05PVElGWV9JUlFfU0VORF9MT0NBTChjaCwgWFBDX0lQSV9NU0dSRVFVRVNUKTsKK30KKworCisvKgorICogTWVtb3J5IGZvciBYUEMncyBBTU8gdmFyaWFibGVzIGlzIGFsbG9jYXRlZCBieSB0aGUgTVNQRUMgZHJpdmVyLiBUaGVzZQorICogcGFnZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGxvd2VzdCBncmFudWxlLiBUaGUgbG93ZXN0IGdyYW51bGUgdXNlcyA0ayBwYWdlcworICogZm9yIGNhY2hlZCByZWZlcmVuY2VzIGFuZCBhbiBhbHRlcm5hdGUgVExCIGhhbmRsZXIgdG8gbmV2ZXIgcHJvdmlkZSBhCisgKiBjYWNoZWFibGUgbWFwcGluZyBmb3IgdGhlIGVudGlyZSByZWdpb24uIFRoaXMgd2lsbCBwcmV2ZW50IHNwZWN1bGF0aXZlCisgKiByZWFkaW5nIG9mIGNhY2hlZCBjb3BpZXMgb2Ygb3VyIGxpbmVzIGZyb20gYmVpbmcgaXNzdWVkIHdoaWNoIHdpbGwgY2F1c2UKKyAqIGEgUEkgRlNCIFByb3RvY29sIGVycm9yIHRvIGJlIGdlbmVyYXRlZCBieSB0aGUgU0hVQi4gRm9yIFhQQywgd2UgbmVlZCA2NAorICogKFhQX01BWF9QQVJUSVRJT05TKSBBTU8gdmFyaWFibGVzIGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbiAoeHBjX21haW4uYykKKyAqIGFuZCBhbiBhZGRpdGlvbmFsIDE2IEFNTyB2YXJpYWJsZXMgZm9yIHBhcnRpdGlvbiBhY3RpdmF0aW9uICh4cGNfaGIuYykuCisgKi8KK3N0YXRpYyBpbmxpbmUgQU1PX3QgKgoreHBjX0lQSV9pbml0KHBhcnRpZF90IHBhcnRpZCkKK3sKKwlBTU9fdCAqcGFydF9hbW8gPSB4cGNfdmFycy0+YW1vc19wYWdlICsgcGFydGlkOworCisKKwl4cGNfSVBJX3JlY2VpdmUocGFydF9hbW8pOworCXJldHVybiBwYXJ0X2FtbzsKK30KKworCisKK3N0YXRpYyBpbmxpbmUgZW51bSB4cGNfcmV0dmFsCit4cGNfbWFwX2J0ZV9lcnJvcnMoYnRlX3Jlc3VsdF90IGVycm9yKQoreworCXN3aXRjaCAoZXJyb3IpIHsKKwljYXNlIEJURV9TVUNDRVNTOglyZXR1cm4geHBjU3VjY2VzczsKKwljYXNlIEJURUZBSUxfRElSOglyZXR1cm4geHBjQnRlRGlyZWN0b3J5RXJyb3I7CisJY2FzZSBCVEVGQUlMX1BPSVNPTjoJcmV0dXJuIHhwY0J0ZVBvaXNvbkVycm9yOworCWNhc2UgQlRFRkFJTF9XRVJSOglyZXR1cm4geHBjQnRlV3JpdGVFcnJvcjsKKwljYXNlIEJURUZBSUxfQUNDRVNTOglyZXR1cm4geHBjQnRlQWNjZXNzRXJyb3I7CisJY2FzZSBCVEVGQUlMX1BXRVJSOglyZXR1cm4geHBjQnRlUFdyaXRlRXJyb3I7CisJY2FzZSBCVEVGQUlMX1BSRVJSOglyZXR1cm4geHBjQnRlUFJlYWRFcnJvcjsKKwljYXNlIEJURUZBSUxfVE9VVDoJcmV0dXJuIHhwY0J0ZVRpbWVPdXRFcnJvcjsKKwljYXNlIEJURUZBSUxfWFRFUlI6CXJldHVybiB4cGNCdGVYdGFsa0Vycm9yOworCWNhc2UgQlRFRkFJTF9OT1RBVkFJTDoJcmV0dXJuIHhwY0J0ZU5vdEF2YWlsYWJsZTsKKwlkZWZhdWx0OgkJcmV0dXJuIHhwY0J0ZVVubWFwcGVkRXJyb3I7CisJfQorfQorCisKKworc3RhdGljIGlubGluZSB2b2lkICoKK3hwY19rbWFsbG9jX2NhY2hlbGluZV9hbGlnbmVkKHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIHZvaWQgKipiYXNlKQoreworCS8qIHNlZSBpZiBrbWFsbG9jIHdpbGwgZ2l2ZSB1cyBjYWNobGluZSBhbGlnbmVkIG1lbW9yeSBieSBkZWZhdWx0ICovCisJKmJhc2UgPSBrbWFsbG9jKHNpemUsIGZsYWdzKTsKKwlpZiAoKmJhc2UgPT0gTlVMTCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKCh1NjQpICpiYXNlID09IEwxX0NBQ0hFX0FMSUdOKCh1NjQpICpiYXNlKSkgeworCQlyZXR1cm4gKmJhc2U7CisJfQorCWtmcmVlKCpiYXNlKTsKKworCS8qIG5vcGUsIHdlJ2xsIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzICovCisJKmJhc2UgPSBrbWFsbG9jKHNpemUgKyBMMV9DQUNIRV9CWVRFUywgZmxhZ3MpOworCWlmICgqYmFzZSA9PSBOVUxMKSB7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gKHZvaWQgKikgTDFfQ0FDSEVfQUxJR04oKHU2NCkgKmJhc2UpOworfQorCisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGNoYW5uZWwgYWN0aXZpdHkgdG8vZnJvbSB0aGUgc3BlY2lmaWVkCisgKiBwYXJ0aXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoreHBjX2NoZWNrX2Zvcl9jaGFubmVsX2FjdGl2aXR5KHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0KQoreworCXU2NCBJUElfYW1vOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisKKwlJUElfYW1vID0geHBjX0lQSV9yZWNlaXZlKHBhcnQtPmxvY2FsX0lQSV9hbW9fdmEpOworCWlmIChJUElfYW1vID09IDApIHsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwYXJ0LT5JUElfbG9jaywgaXJxX2ZsYWdzKTsKKwlwYXJ0LT5sb2NhbF9JUElfYW1vIHw9IElQSV9hbW87CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFydC0+SVBJX2xvY2ssIGlycV9mbGFncyk7CisKKwlkZXZfZGJnKHhwY19jaGFuLCAicmVjZWl2ZWQgSVBJIGZyb20gcGFydGlkPSVkLCBJUElfYW1vPTB4JWx4XG4iLAorCQlYUENfUEFSVElEKHBhcnQpLCBJUElfYW1vKTsKKworCXhwY193YWtldXBfY2hhbm5lbF9tZ3IocGFydCk7Cit9CisKKworI2VuZGlmIC8qIF9JQTY0X1NOX0tFUk5FTF9YUENfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmNmZiYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYwpAQCAtMCwwICsxLDIyOTcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKworLyoKKyAqIENyb3NzIFBhcnRpdGlvbiBDb21tdW5pY2F0aW9uIChYUEMpIGNoYW5uZWwgc3VwcG9ydC4KKyAqCisgKglUaGlzIGlzIHRoZSBwYXJ0IG9mIFhQQyB0aGF0IG1hbmFnZXMgdGhlIGNoYW5uZWxzIGFuZAorICoJc2VuZHMvcmVjZWl2ZXMgbWVzc2FnZXMgYWNyb3NzIHRoZW0gdG8vZnJvbSBvdGhlciBwYXJ0aXRpb25zLgorICoKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vc24vYnRlLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NuX3NhbC5oPgorI2luY2x1ZGUgInhwYy5oIgorCisKKy8qCisgKiBTZXQgdXAgdGhlIGluaXRpYWwgdmFsdWVzIGZvciB0aGUgWFBhcnRpdGlvbiBDb21tdW5pY2F0aW9uIGNoYW5uZWxzLgorICovCitzdGF0aWMgdm9pZAoreHBjX2luaXRpYWxpemVfY2hhbm5lbHMoc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQsIHBhcnRpZF90IHBhcnRpZCkKK3sKKwlpbnQgY2hfbnVtYmVyOworCXN0cnVjdCB4cGNfY2hhbm5lbCAqY2g7CisKKworCWZvciAoY2hfbnVtYmVyID0gMDsgY2hfbnVtYmVyIDwgcGFydC0+bmNoYW5uZWxzOyBjaF9udW1iZXIrKykgeworCQljaCA9ICZwYXJ0LT5jaGFubmVsc1tjaF9udW1iZXJdOworCisJCWNoLT5wYXJ0aWQgPSBwYXJ0aWQ7CisJCWNoLT5udW1iZXIgPSBjaF9udW1iZXI7CisJCWNoLT5mbGFncyA9IFhQQ19DX0RJU0NPTk5FQ1RFRDsKKworCQljaC0+bG9jYWxfR1AgPSAmcGFydC0+bG9jYWxfR1BzW2NoX251bWJlcl07CisJCWNoLT5sb2NhbF9vcGVuY2xvc2VfYXJncyA9CisJCQkJCSZwYXJ0LT5sb2NhbF9vcGVuY2xvc2VfYXJnc1tjaF9udW1iZXJdOworCisJCWF0b21pY19zZXQoJmNoLT5rdGhyZWFkc19hc3NpZ25lZCwgMCk7CisJCWF0b21pY19zZXQoJmNoLT5rdGhyZWFkc19pZGxlLCAwKTsKKwkJYXRvbWljX3NldCgmY2gtPmt0aHJlYWRzX2FjdGl2ZSwgMCk7CisKKwkJYXRvbWljX3NldCgmY2gtPnJlZmVyZW5jZXMsIDApOworCQlhdG9taWNfc2V0KCZjaC0+bl90b19ub3RpZnksIDApOworCisJCXNwaW5fbG9ja19pbml0KCZjaC0+bG9jayk7CisJCXNlbWFfaW5pdCgmY2gtPm1zZ190b19wdWxsX3NlbWEsIDEpOwkvKiBtdXRleCAqLworCisJCWF0b21pY19zZXQoJmNoLT5uX29uX21zZ19hbGxvY2F0ZV93cSwgMCk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoLT5tc2dfYWxsb2NhdGVfd3EpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaC0+aWRsZV93cSk7CisJfQorfQorCisKKy8qCisgKiBTZXR1cCB0aGUgaW5mcmFzdHJ1Y3R1cmUgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgWFBhcnRpdGlvbiBDb21tdW5pY2F0aW9uCisgKiBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgcmVtb3RlIHBhcnRpdGlvbiBhbmQgdGhlIGxvY2FsIG9uZS4KKyAqLworZW51bSB4cGNfcmV0dmFsCit4cGNfc2V0dXBfaW5mcmFzdHJ1Y3R1cmUoc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXI7CisJcGFydGlkX3QgcGFydGlkID0gWFBDX1BBUlRJRChwYXJ0KTsKKworCisJLyoKKwkgKiBaZXJvIG91dCBNT1NUIG9mIHRoZSBlbnRyeSBmb3IgdGhpcyBwYXJ0aXRpb24uIE9ubHkgdGhlIGZpZWxkcworCSAqIHN0YXJ0aW5nIHdpdGggYG5jaGFubmVscycgd2lsbCBiZSB6ZXJvZWQuIFRoZSBwcmVjZWRpbmcgZmllbGRzIG11c3QKKwkgKiByZW1haW4gYHZpYWJsZScgYWNyb3NzIHBhcnRpdGlvbiB1cHMgYW5kIGRvd25zLCBzaW5jZSB0aGV5IG1heSBiZQorCSAqIHJlZmVyZW5jZWQgZHVyaW5nIHRoaXMgbWVtc2V0KCkgb3BlcmF0aW9uLgorCSAqLworCW1lbXNldCgmcGFydC0+bmNoYW5uZWxzLCAwLCBzaXplb2Yoc3RydWN0IHhwY19wYXJ0aXRpb24pIC0KKwkJCQlvZmZzZXRvZihzdHJ1Y3QgeHBjX3BhcnRpdGlvbiwgbmNoYW5uZWxzKSk7CisKKwkvKgorCSAqIEFsbG9jYXRlIGFsbCBvZiB0aGUgY2hhbm5lbCBzdHJ1Y3R1cmVzIGFzIGEgY29udGlndW91cyBjaHVuayBvZgorCSAqIG1lbW9yeS4KKwkgKi8KKwlwYXJ0LT5jaGFubmVscyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB4cGNfY2hhbm5lbCkgKiBYUENfTkNIQU5ORUxTLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAocGFydC0+Y2hhbm5lbHMgPT0gTlVMTCkgeworCQlkZXZfZXJyKHhwY19jaGFuLCAiY2FuJ3QgZ2V0IG1lbW9yeSBmb3IgY2hhbm5lbHNcbiIpOworCQlyZXR1cm4geHBjTm9NZW1vcnk7CisJfQorCW1lbXNldChwYXJ0LT5jaGFubmVscywgMCwgc2l6ZW9mKHN0cnVjdCB4cGNfY2hhbm5lbCkgKiBYUENfTkNIQU5ORUxTKTsKKworCXBhcnQtPm5jaGFubmVscyA9IFhQQ19OQ0hBTk5FTFM7CisKKworCS8qIGFsbG9jYXRlIGFsbCB0aGUgcmVxdWlyZWQgR0VUL1BVVCB2YWx1ZXMgKi8KKworCXBhcnQtPmxvY2FsX0dQcyA9IHhwY19rbWFsbG9jX2NhY2hlbGluZV9hbGlnbmVkKFhQQ19HUF9TSVpFLAorCQkJCQlHRlBfS0VSTkVMLCAmcGFydC0+bG9jYWxfR1BzX2Jhc2UpOworCWlmIChwYXJ0LT5sb2NhbF9HUHMgPT0gTlVMTCkgeworCQlrZnJlZShwYXJ0LT5jaGFubmVscyk7CisJCXBhcnQtPmNoYW5uZWxzID0gTlVMTDsKKwkJZGV2X2Vycih4cGNfY2hhbiwgImNhbid0IGdldCBtZW1vcnkgZm9yIGxvY2FsIGdldC9wdXQgIgorCQkJInZhbHVlc1xuIik7CisJCXJldHVybiB4cGNOb01lbW9yeTsKKwl9CisJbWVtc2V0KHBhcnQtPmxvY2FsX0dQcywgMCwgWFBDX0dQX1NJWkUpOworCisJcGFydC0+cmVtb3RlX0dQcyA9IHhwY19rbWFsbG9jX2NhY2hlbGluZV9hbGlnbmVkKFhQQ19HUF9TSVpFLAorCQkJCQlHRlBfS0VSTkVMLCAmcGFydC0+cmVtb3RlX0dQc19iYXNlKTsKKwlpZiAocGFydC0+cmVtb3RlX0dQcyA9PSBOVUxMKSB7CisJCWtmcmVlKHBhcnQtPmNoYW5uZWxzKTsKKwkJcGFydC0+Y2hhbm5lbHMgPSBOVUxMOworCQlrZnJlZShwYXJ0LT5sb2NhbF9HUHNfYmFzZSk7CisJCXBhcnQtPmxvY2FsX0dQcyA9IE5VTEw7CisJCWRldl9lcnIoeHBjX2NoYW4sICJjYW4ndCBnZXQgbWVtb3J5IGZvciByZW1vdGUgZ2V0L3B1dCAiCisJCQkidmFsdWVzXG4iKTsKKwkJcmV0dXJuIHhwY05vTWVtb3J5OworCX0KKwltZW1zZXQocGFydC0+cmVtb3RlX0dQcywgMCwgWFBDX0dQX1NJWkUpOworCisKKwkvKiBhbGxvY2F0ZSBhbGwgdGhlIHJlcXVpcmVkIG9wZW4gYW5kIGNsb3NlIGFyZ3MgKi8KKworCXBhcnQtPmxvY2FsX29wZW5jbG9zZV9hcmdzID0geHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoCisJCQkJCVhQQ19PUEVOQ0xPU0VfQVJHU19TSVpFLCBHRlBfS0VSTkVMLAorCQkJCQkmcGFydC0+bG9jYWxfb3BlbmNsb3NlX2FyZ3NfYmFzZSk7CisJaWYgKHBhcnQtPmxvY2FsX29wZW5jbG9zZV9hcmdzID09IE5VTEwpIHsKKwkJa2ZyZWUocGFydC0+Y2hhbm5lbHMpOworCQlwYXJ0LT5jaGFubmVscyA9IE5VTEw7CisJCWtmcmVlKHBhcnQtPmxvY2FsX0dQc19iYXNlKTsKKwkJcGFydC0+bG9jYWxfR1BzID0gTlVMTDsKKwkJa2ZyZWUocGFydC0+cmVtb3RlX0dQc19iYXNlKTsKKwkJcGFydC0+cmVtb3RlX0dQcyA9IE5VTEw7CisJCWRldl9lcnIoeHBjX2NoYW4sICJjYW4ndCBnZXQgbWVtb3J5IGZvciBsb2NhbCBjb25uZWN0IGFyZ3NcbiIpOworCQlyZXR1cm4geHBjTm9NZW1vcnk7CisJfQorCW1lbXNldChwYXJ0LT5sb2NhbF9vcGVuY2xvc2VfYXJncywgMCwgWFBDX09QRU5DTE9TRV9BUkdTX1NJWkUpOworCisJcGFydC0+cmVtb3RlX29wZW5jbG9zZV9hcmdzID0geHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoCisJCQkJCVhQQ19PUEVOQ0xPU0VfQVJHU19TSVpFLCBHRlBfS0VSTkVMLAorCQkJCQkmcGFydC0+cmVtb3RlX29wZW5jbG9zZV9hcmdzX2Jhc2UpOworCWlmIChwYXJ0LT5yZW1vdGVfb3BlbmNsb3NlX2FyZ3MgPT0gTlVMTCkgeworCQlrZnJlZShwYXJ0LT5jaGFubmVscyk7CisJCXBhcnQtPmNoYW5uZWxzID0gTlVMTDsKKwkJa2ZyZWUocGFydC0+bG9jYWxfR1BzX2Jhc2UpOworCQlwYXJ0LT5sb2NhbF9HUHMgPSBOVUxMOworCQlrZnJlZShwYXJ0LT5yZW1vdGVfR1BzX2Jhc2UpOworCQlwYXJ0LT5yZW1vdGVfR1BzID0gTlVMTDsKKwkJa2ZyZWUocGFydC0+bG9jYWxfb3BlbmNsb3NlX2FyZ3NfYmFzZSk7CisJCXBhcnQtPmxvY2FsX29wZW5jbG9zZV9hcmdzID0gTlVMTDsKKwkJZGV2X2Vycih4cGNfY2hhbiwgImNhbid0IGdldCBtZW1vcnkgZm9yIHJlbW90ZSBjb25uZWN0IGFyZ3NcbiIpOworCQlyZXR1cm4geHBjTm9NZW1vcnk7CisJfQorCW1lbXNldChwYXJ0LT5yZW1vdGVfb3BlbmNsb3NlX2FyZ3MsIDAsIFhQQ19PUEVOQ0xPU0VfQVJHU19TSVpFKTsKKworCisJeHBjX2luaXRpYWxpemVfY2hhbm5lbHMocGFydCwgcGFydGlkKTsKKworCWF0b21pY19zZXQoJnBhcnQtPm5jaGFubmVsc19hY3RpdmUsIDApOworCisKKwkvKiBsb2NhbF9JUElfYW1vIHdlcmUgc2V0IHRvIDAgYnkgYW4gZWFybGllciBtZW1zZXQoKSAqLworCisJLyogSW5pdGlhbGl6ZSB0aGlzIHBhcnRpdGlvbnMgQU1PX3Qgc3RydWN0dXJlICovCisJcGFydC0+bG9jYWxfSVBJX2Ftb192YSA9IHhwY19JUElfaW5pdChwYXJ0aWQpOworCisJc3Bpbl9sb2NrX2luaXQoJnBhcnQtPklQSV9sb2NrKTsKKworCWF0b21pY19zZXQoJnBhcnQtPmNoYW5uZWxfbWdyX3JlcXVlc3RzLCAxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwYXJ0LT5jaGFubmVsX21ncl93cSk7CisKKwlzcHJpbnRmKHBhcnQtPklQSV9vd25lciwgInhwYyUwMmQiLCBwYXJ0aWQpOworCXJldCA9IHJlcXVlc3RfaXJxKFNHSV9YUENfTk9USUZZLCB4cGNfbm90aWZ5X0lSUV9oYW5kbGVyLCBTQV9TSElSUSwKKwkJCQlwYXJ0LT5JUElfb3duZXIsICh2b2lkICopICh1NjQpIHBhcnRpZCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWtmcmVlKHBhcnQtPmNoYW5uZWxzKTsKKwkJcGFydC0+Y2hhbm5lbHMgPSBOVUxMOworCQlrZnJlZShwYXJ0LT5sb2NhbF9HUHNfYmFzZSk7CisJCXBhcnQtPmxvY2FsX0dQcyA9IE5VTEw7CisJCWtmcmVlKHBhcnQtPnJlbW90ZV9HUHNfYmFzZSk7CisJCXBhcnQtPnJlbW90ZV9HUHMgPSBOVUxMOworCQlrZnJlZShwYXJ0LT5sb2NhbF9vcGVuY2xvc2VfYXJnc19iYXNlKTsKKwkJcGFydC0+bG9jYWxfb3BlbmNsb3NlX2FyZ3MgPSBOVUxMOworCQlrZnJlZShwYXJ0LT5yZW1vdGVfb3BlbmNsb3NlX2FyZ3NfYmFzZSk7CisJCXBhcnQtPnJlbW90ZV9vcGVuY2xvc2VfYXJncyA9IE5VTEw7CisJCWRldl9lcnIoeHBjX2NoYW4sICJjYW4ndCByZWdpc3RlciBOT1RJRlkgSVJRIGhhbmRsZXIsICIKKwkJCSJlcnJubz0lZFxuIiwgLXJldCk7CisJCXJldHVybiB4cGNMYWNrT2ZSZXNvdXJjZXM7CisJfQorCisJLyogU2V0dXAgYSB0aW1lciB0byBjaGVjayBmb3IgZHJvcHBlZCBJUElzICovCisJdGltZXIgPSAmcGFydC0+ZHJvcHBlZF9JUElfdGltZXI7CisJaW5pdF90aW1lcih0aW1lcik7CisJdGltZXItPmZ1bmN0aW9uID0gKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKSB4cGNfZHJvcHBlZF9JUElfY2hlY2s7CisJdGltZXItPmRhdGEgPSAodW5zaWduZWQgbG9uZykgcGFydDsKKwl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBYUENfUF9EUk9QUEVEX0lQSV9XQUlUOworCWFkZF90aW1lcih0aW1lcik7CisKKwkvKgorCSAqIFdpdGggdGhlIHNldHRpbmcgb2YgdGhlIHBhcnRpdGlvbiBzZXR1cF9zdGF0ZSB0byBYUENfUF9TRVRVUCwgd2UncmUKKwkgKiBkZWNsYXJpbmcgdGhhdCB0aGlzIHBhcnRpdGlvbiBpcyByZWFkeSB0byBnby4KKwkgKi8KKwkodm9sYXRpbGUgdTgpIHBhcnQtPnNldHVwX3N0YXRlID0gWFBDX1BfU0VUVVA7CisKKworCS8qCisJICogU2V0dXAgdGhlIHBlciBwYXJ0aXRpb24gc3BlY2lmaWMgdmFyaWFibGVzIHJlcXVpcmVkIGJ5IHRoZQorCSAqIHJlbW90ZSBwYXJ0aXRpb24gdG8gZXN0YWJsaXNoIGNoYW5uZWwgY29ubmVjdGlvbnMgd2l0aCB1cy4KKwkgKgorCSAqIFRoZSBzZXR0aW5nIG9mIHRoZSBtYWdpYyAjIGluZGljYXRlcyB0aGF0IHRoZXNlIHBlciBwYXJ0aXRpb24KKwkgKiBzcGVjaWZpYyB2YXJpYWJsZXMgYXJlIHJlYWR5IHRvIGJlIHVzZWQuCisJICovCisJeHBjX3ZhcnNfcGFydFtwYXJ0aWRdLkdQc19wYSA9IF9fcGEocGFydC0+bG9jYWxfR1BzKTsKKwl4cGNfdmFyc19wYXJ0W3BhcnRpZF0ub3BlbmNsb3NlX2FyZ3NfcGEgPQorCQkJCQlfX3BhKHBhcnQtPmxvY2FsX29wZW5jbG9zZV9hcmdzKTsKKwl4cGNfdmFyc19wYXJ0W3BhcnRpZF0uSVBJX2Ftb19wYSA9IF9fcGEocGFydC0+bG9jYWxfSVBJX2Ftb192YSk7CisJeHBjX3ZhcnNfcGFydFtwYXJ0aWRdLklQSV9uYXNpZCA9IGNwdWlkX3RvX25hc2lkKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJeHBjX3ZhcnNfcGFydFtwYXJ0aWRdLklQSV9waHlzX2NwdWlkID0KKwkJCQkJY3B1X3BoeXNpY2FsX2lkKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJeHBjX3ZhcnNfcGFydFtwYXJ0aWRdLm5jaGFubmVscyA9IHBhcnQtPm5jaGFubmVsczsKKwkodm9sYXRpbGUgdTY0KSB4cGNfdmFyc19wYXJ0W3BhcnRpZF0ubWFnaWMgPSBYUENfVlBfTUFHSUMxOworCisJcmV0dXJuIHhwY1N1Y2Nlc3M7Cit9CisKKworLyoKKyAqIENyZWF0ZSBhIHdyYXBwZXIgdGhhdCBoaWRlcyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gZm9yIHB1bGxpbmcgYSBjYWNoZWxpbmUKKyAqIChvciBtdWx0aXBsZSBjYWNoZWxpbmVzKSBmcm9tIGEgcmVtb3RlIHBhcnRpdGlvbi4KKyAqCisgKiBzcmMgbXVzdCBiZSBhIGNhY2hlbGluZSBhbGlnbmVkIHBoeXNpY2FsIGFkZHJlc3Mgb24gdGhlIHJlbW90ZSBwYXJ0aXRpb24uCisgKiBkc3QgbXVzdCBiZSBhIGNhY2hlbGluZSBhbGlnbmVkIHZpcnR1YWwgYWRkcmVzcyBvbiB0aGlzIHBhcnRpdGlvbi4KKyAqIGNudCBtdXN0IGJlIGFuIGNhY2hlbGluZSBzaXplZAorICovCitzdGF0aWMgZW51bSB4cGNfcmV0dmFsCit4cGNfcHVsbF9yZW1vdGVfY2FjaGVsaW5lcyhzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCwgdm9pZCAqZHN0LAorCQkJCWNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCkKK3sKKwlidGVfcmVzdWx0X3QgYnRlX3JldDsKKworCisJREJVR19PTigodTY0KSBzcmMgIT0gTDFfQ0FDSEVfQUxJR04oKHU2NCkgc3JjKSk7CisJREJVR19PTigodTY0KSBkc3QgIT0gTDFfQ0FDSEVfQUxJR04oKHU2NCkgZHN0KSk7CisJREJVR19PTihjbnQgIT0gTDFfQ0FDSEVfQUxJR04oY250KSk7CisKKwlpZiAocGFydC0+YWN0X3N0YXRlID09IFhQQ19QX0RFQUNUSVZBVElORykgeworCQlyZXR1cm4gcGFydC0+cmVhc29uOworCX0KKworCWJ0ZV9yZXQgPSB4cF9idGVfY29weSgodTY0KSBzcmMsICh1NjQpIGlhNjRfdHBhKCh1NjQpIGRzdCksCisJCQkJKHU2NCkgY250LCAoQlRFX05PUk1BTCB8IEJURV9XQUNRVUlSRSksIE5VTEwpOworCWlmIChidGVfcmV0ID09IEJURV9TVUNDRVNTKSB7CisJCXJldHVybiB4cGNTdWNjZXNzOworCX0KKworCWRldl9kYmcoeHBjX2NoYW4sICJ4cF9idGVfY29weSgpIGZyb20gcGFydGl0aW9uICVkIGZhaWxlZCwgcmV0PSVkXG4iLAorCQlYUENfUEFSVElEKHBhcnQpLCBidGVfcmV0KTsKKworCXJldHVybiB4cGNfbWFwX2J0ZV9lcnJvcnMoYnRlX3JldCk7Cit9CisKKworLyoKKyAqIFB1bGwgdGhlIHJlbW90ZSBwZXIgcGFydGl0aXRvbiBzcGVjaWZpYyB2YXJpYWJsZXMgZnJvbSB0aGUgc3BlY2lmaWVkCisgKiBwYXJ0aXRpb24uCisgKi8KK2VudW0geHBjX3JldHZhbAoreHBjX3B1bGxfcmVtb3RlX3ZhcnNfcGFydChzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCkKK3sKKwl1OCBidWZmZXJbTDFfQ0FDSEVfQllURVMgKiAyXTsKKwlzdHJ1Y3QgeHBjX3ZhcnNfcGFydCAqcHVsbGVkX2VudHJ5X2NhY2hlbGluZSA9CisJCQkoc3RydWN0IHhwY192YXJzX3BhcnQgKikgTDFfQ0FDSEVfQUxJR04oKHU2NCkgYnVmZmVyKTsKKwlzdHJ1Y3QgeHBjX3ZhcnNfcGFydCAqcHVsbGVkX2VudHJ5OworCXU2NCByZW1vdGVfZW50cnlfY2FjaGVsaW5lX3BhLCByZW1vdGVfZW50cnlfcGE7CisJcGFydGlkX3QgcGFydGlkID0gWFBDX1BBUlRJRChwYXJ0KTsKKwllbnVtIHhwY19yZXR2YWwgcmV0OworCisKKwkvKiBwdWxsIHRoZSBjYWNoZWxpbmUgdGhhdCBjb250YWlucyB0aGUgdmFyaWFibGVzIHdlJ3JlIGludGVyZXN0ZWQgaW4gKi8KKworCURCVUdfT04ocGFydC0+cmVtb3RlX3ZhcnNfcGFydF9wYSAhPQorCQkJCUwxX0NBQ0hFX0FMSUdOKHBhcnQtPnJlbW90ZV92YXJzX3BhcnRfcGEpKTsKKwlEQlVHX09OKHNpemVvZihzdHJ1Y3QgeHBjX3ZhcnNfcGFydCkgIT0gTDFfQ0FDSEVfQllURVMgLyAyKTsKKworCXJlbW90ZV9lbnRyeV9wYSA9IHBhcnQtPnJlbW90ZV92YXJzX3BhcnRfcGEgKworCQkJc25fcGFydGl0aW9uX2lkICogc2l6ZW9mKHN0cnVjdCB4cGNfdmFyc19wYXJ0KTsKKworCXJlbW90ZV9lbnRyeV9jYWNoZWxpbmVfcGEgPSAocmVtb3RlX2VudHJ5X3BhICYgfihMMV9DQUNIRV9CWVRFUyAtIDEpKTsKKworCXB1bGxlZF9lbnRyeSA9IChzdHJ1Y3QgeHBjX3ZhcnNfcGFydCAqKSAoKHU2NCkgcHVsbGVkX2VudHJ5X2NhY2hlbGluZSArCisJCQkJKHJlbW90ZV9lbnRyeV9wYSAmIChMMV9DQUNIRV9CWVRFUyAtIDEpKSk7CisKKwlyZXQgPSB4cGNfcHVsbF9yZW1vdGVfY2FjaGVsaW5lcyhwYXJ0LCBwdWxsZWRfZW50cnlfY2FjaGVsaW5lLAorCQkJCQkodm9pZCAqKSByZW1vdGVfZW50cnlfY2FjaGVsaW5lX3BhLAorCQkJCQlMMV9DQUNIRV9CWVRFUyk7CisJaWYgKHJldCAhPSB4cGNTdWNjZXNzKSB7CisJCWRldl9kYmcoeHBjX2NoYW4sICJmYWlsZWQgdG8gcHVsbCBYUEMgdmFyc19wYXJ0IGZyb20gIgorCQkJInBhcnRpdGlvbiAlZCwgcmV0PSVkXG4iLCBwYXJ0aWQsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisKKwkvKiBzZWUgaWYgdGhleSd2ZSBiZWVuIHNldCB1cCB5ZXQgKi8KKworCWlmIChwdWxsZWRfZW50cnktPm1hZ2ljICE9IFhQQ19WUF9NQUdJQzEgJiYKKwkJCQlwdWxsZWRfZW50cnktPm1hZ2ljICE9IFhQQ19WUF9NQUdJQzIpIHsKKworCQlpZiAocHVsbGVkX2VudHJ5LT5tYWdpYyAhPSAwKSB7CisJCQlkZXZfZGJnKHhwY19jaGFuLCAicGFydGl0aW9uICVkJ3MgWFBDIHZhcnNfcGFydCBmb3IgIgorCQkJCSJwYXJ0aXRpb24gJWQgaGFzIGJhZCBtYWdpYyB2YWx1ZSAoPTB4JWx4KVxuIiwKKwkJCQlwYXJ0aWQsIHNuX3BhcnRpdGlvbl9pZCwgcHVsbGVkX2VudHJ5LT5tYWdpYyk7CisJCQlyZXR1cm4geHBjQmFkTWFnaWM7CisJCX0KKworCQkvKiB0aGV5J3ZlIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldCAqLworCQlyZXR1cm4geHBjUmV0cnk7CisJfQorCisJaWYgKHhwY192YXJzX3BhcnRbcGFydGlkXS5tYWdpYyA9PSBYUENfVlBfTUFHSUMxKSB7CisKKwkJLyogdmFsaWRhdGUgdGhlIHZhcmlhYmxlcyAqLworCisJCWlmIChwdWxsZWRfZW50cnktPkdQc19wYSA9PSAwIHx8CisJCQkJcHVsbGVkX2VudHJ5LT5vcGVuY2xvc2VfYXJnc19wYSA9PSAwIHx8CisJCQkJCXB1bGxlZF9lbnRyeS0+SVBJX2Ftb19wYSA9PSAwKSB7CisKKwkJCWRldl9lcnIoeHBjX2NoYW4sICJwYXJ0aXRpb24gJWQncyBYUEMgdmFyc19wYXJ0IGZvciAiCisJCQkJInBhcnRpdGlvbiAlZCBhcmUgbm90IHZhbGlkXG4iLCBwYXJ0aWQsCisJCQkJc25fcGFydGl0aW9uX2lkKTsKKwkJCXJldHVybiB4cGNJbnZhbGlkQWRkcmVzczsKKwkJfQorCisJCS8qIHRoZSB2YXJpYWJsZXMgd2UgaW1wb3J0ZWQgbG9vayB0byBiZSB2YWxpZCAqLworCisJCXBhcnQtPnJlbW90ZV9HUHNfcGEgPSBwdWxsZWRfZW50cnktPkdQc19wYTsKKwkJcGFydC0+cmVtb3RlX29wZW5jbG9zZV9hcmdzX3BhID0KKwkJCQkJcHVsbGVkX2VudHJ5LT5vcGVuY2xvc2VfYXJnc19wYTsKKwkJcGFydC0+cmVtb3RlX0lQSV9hbW9fdmEgPQorCQkJCSAgICAgIChBTU9fdCAqKSBfX3ZhKHB1bGxlZF9lbnRyeS0+SVBJX2Ftb19wYSk7CisJCXBhcnQtPnJlbW90ZV9JUElfbmFzaWQgPSBwdWxsZWRfZW50cnktPklQSV9uYXNpZDsKKwkJcGFydC0+cmVtb3RlX0lQSV9waHlzX2NwdWlkID0gcHVsbGVkX2VudHJ5LT5JUElfcGh5c19jcHVpZDsKKworCQlpZiAocGFydC0+bmNoYW5uZWxzID4gcHVsbGVkX2VudHJ5LT5uY2hhbm5lbHMpIHsKKwkJCXBhcnQtPm5jaGFubmVscyA9IHB1bGxlZF9lbnRyeS0+bmNoYW5uZWxzOworCQl9CisKKwkJLyogbGV0IHRoZSBvdGhlciBzaWRlIGtub3cgdGhhdCB3ZSd2ZSBwdWxsZWQgdGhlaXIgdmFyaWFibGVzICovCisKKwkJKHZvbGF0aWxlIHU2NCkgeHBjX3ZhcnNfcGFydFtwYXJ0aWRdLm1hZ2ljID0gWFBDX1ZQX01BR0lDMjsKKwl9CisKKwlpZiAocHVsbGVkX2VudHJ5LT5tYWdpYyA9PSBYUENfVlBfTUFHSUMxKSB7CisJCXJldHVybiB4cGNSZXRyeTsKKwl9CisKKwlyZXR1cm4geHBjU3VjY2VzczsKK30KKworCisvKgorICogR2V0IHRoZSBJUEkgZmxhZ3MgYW5kIHB1bGwgdGhlIG9wZW5jbG9zZSBhcmdzIGFuZC9vciByZW1vdGUgR1BzIGFzIG5lZWRlZC4KKyAqLworc3RhdGljIHU2NAoreHBjX2dldF9JUElfZmxhZ3Moc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJdTY0IElQSV9hbW87CisJZW51bSB4cGNfcmV0dmFsIHJldDsKKworCisJLyoKKwkgKiBTZWUgaWYgdGhlcmUgYXJlIGFueSBJUEkgZmxhZ3MgdG8gYmUgaGFuZGxlZC4KKwkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwYXJ0LT5JUElfbG9jaywgaXJxX2ZsYWdzKTsKKwlpZiAoKElQSV9hbW8gPSBwYXJ0LT5sb2NhbF9JUElfYW1vKSAhPSAwKSB7CisJCXBhcnQtPmxvY2FsX0lQSV9hbW8gPSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwYXJ0LT5JUElfbG9jaywgaXJxX2ZsYWdzKTsKKworCisJaWYgKFhQQ19BTllfT1BFTkNMT1NFX0lQSV9GTEFHU19TRVQoSVBJX2FtbykpIHsKKwkJcmV0ID0geHBjX3B1bGxfcmVtb3RlX2NhY2hlbGluZXMocGFydCwKKwkJCQkJcGFydC0+cmVtb3RlX29wZW5jbG9zZV9hcmdzLAorCQkJCQkodm9pZCAqKSBwYXJ0LT5yZW1vdGVfb3BlbmNsb3NlX2FyZ3NfcGEsCisJCQkJCVhQQ19PUEVOQ0xPU0VfQVJHU19TSVpFKTsKKwkJaWYgKHJldCAhPSB4cGNTdWNjZXNzKSB7CisJCQlYUENfREVBQ1RJVkFURV9QQVJUSVRJT04ocGFydCwgcmV0KTsKKworCQkJZGV2X2RiZyh4cGNfY2hhbiwgImZhaWxlZCB0byBwdWxsIG9wZW5jbG9zZSBhcmdzIGZyb20gIgorCQkJCSJwYXJ0aXRpb24gJWQsIHJldD0lZFxuIiwgWFBDX1BBUlRJRChwYXJ0KSwKKwkJCQlyZXQpOworCisJCQkvKiBkb24ndCBib3RoZXIgcHJvY2Vzc2luZyBJUElzIGFueW1vcmUgKi8KKwkJCUlQSV9hbW8gPSAwOworCQl9CisJfQorCisJaWYgKFhQQ19BTllfTVNHX0lQSV9GTEFHU19TRVQoSVBJX2FtbykpIHsKKwkJcmV0ID0geHBjX3B1bGxfcmVtb3RlX2NhY2hlbGluZXMocGFydCwgcGFydC0+cmVtb3RlX0dQcywKKwkJCQkJCSh2b2lkICopIHBhcnQtPnJlbW90ZV9HUHNfcGEsCisJCQkJCQlYUENfR1BfU0laRSk7CisJCWlmIChyZXQgIT0geHBjU3VjY2VzcykgeworCQkJWFBDX0RFQUNUSVZBVEVfUEFSVElUSU9OKHBhcnQsIHJldCk7CisKKwkJCWRldl9kYmcoeHBjX2NoYW4sICJmYWlsZWQgdG8gcHVsbCBHUHMgZnJvbSBwYXJ0aXRpb24gIgorCQkJCSIlZCwgcmV0PSVkXG4iLCBYUENfUEFSVElEKHBhcnQpLCByZXQpOworCisJCQkvKiBkb24ndCBib3RoZXIgcHJvY2Vzc2luZyBJUElzIGFueW1vcmUgKi8KKwkJCUlQSV9hbW8gPSAwOworCQl9CisJfQorCisJcmV0dXJuIElQSV9hbW87Cit9CisKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBsb2NhbCBtZXNzYWdlIHF1ZXVlIGFuZCB0aGUgbm90aWZ5IHF1ZXVlLgorICovCitzdGF0aWMgZW51bSB4cGNfcmV0dmFsCit4cGNfYWxsb2NhdGVfbG9jYWxfbXNncXVldWUoc3RydWN0IHhwY19jaGFubmVsICpjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlpbnQgbmVudHJpZXM7CisJc2l6ZV90IG5ieXRlczsKKworCisJLy8gPj4+IG1heSB3YW50IHRvIGNoZWNrIGZvciBjaC0+ZmxhZ3MgJiBYUENfQ19ESVNDT05ORUNUSU5HIGJldHdlZW4KKwkvLyA+Pj4gaXRlcmF0aW9ucyBvZiB0aGUgZm9yLWxvb3AsIGJhaWwgaWYgc2V0PworCisJLy8gPj4+IHNob3VsZCB3ZSBpbXBvc2UgYSBtaW51bXVtICNvZiBlbnRyaWVzPyBsaWtlIDQgb3IgOD8KKwlmb3IgKG5lbnRyaWVzID0gY2gtPmxvY2FsX25lbnRyaWVzOyBuZW50cmllcyA+IDA7IG5lbnRyaWVzLS0pIHsKKworCQluYnl0ZXMgPSBuZW50cmllcyAqIGNoLT5tc2dfc2l6ZTsKKwkJY2gtPmxvY2FsX21zZ3F1ZXVlID0geHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQobmJ5dGVzLAorCQkJCQkJKEdGUF9LRVJORUwgfCBHRlBfRE1BKSwKKwkJCQkJCSZjaC0+bG9jYWxfbXNncXVldWVfYmFzZSk7CisJCWlmIChjaC0+bG9jYWxfbXNncXVldWUgPT0gTlVMTCkgeworCQkJY29udGludWU7CisJCX0KKwkJbWVtc2V0KGNoLT5sb2NhbF9tc2dxdWV1ZSwgMCwgbmJ5dGVzKTsKKworCQluYnl0ZXMgPSBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgeHBjX25vdGlmeSk7CisJCWNoLT5ub3RpZnlfcXVldWUgPSBrbWFsbG9jKG5ieXRlcywgKEdGUF9LRVJORUwgfCBHRlBfRE1BKSk7CisJCWlmIChjaC0+bm90aWZ5X3F1ZXVlID09IE5VTEwpIHsKKwkJCWtmcmVlKGNoLT5sb2NhbF9tc2dxdWV1ZV9iYXNlKTsKKwkJCWNoLT5sb2NhbF9tc2dxdWV1ZSA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCQltZW1zZXQoY2gtPm5vdGlmeV9xdWV1ZSwgMCwgbmJ5dGVzKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCWlmIChuZW50cmllcyA8IGNoLT5sb2NhbF9uZW50cmllcykgeworCQkJZGV2X2RiZyh4cGNfY2hhbiwgIm5lbnRyaWVzPSVkIGxvY2FsX25lbnRyaWVzPSVkLCAiCisJCQkJInBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwgbmVudHJpZXMsCisJCQkJY2gtPmxvY2FsX25lbnRyaWVzLCBjaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKKworCQkJY2gtPmxvY2FsX25lbnRyaWVzID0gbmVudHJpZXM7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCXJldHVybiB4cGNTdWNjZXNzOworCX0KKworCWRldl9kYmcoeHBjX2NoYW4sICJjYW4ndCBnZXQgbWVtb3J5IGZvciBsb2NhbCBtZXNzYWdlIHF1ZXVlIGFuZCBub3RpZnkgIgorCQkicXVldWUsIHBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CisJcmV0dXJuIHhwY05vTWVtb3J5OworfQorCisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgY2FjaGVkIHJlbW90ZSBtZXNzYWdlIHF1ZXVlLgorICovCitzdGF0aWMgZW51bSB4cGNfcmV0dmFsCit4cGNfYWxsb2NhdGVfcmVtb3RlX21zZ3F1ZXVlKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJaW50IG5lbnRyaWVzOworCXNpemVfdCBuYnl0ZXM7CisKKworCURCVUdfT04oY2gtPnJlbW90ZV9uZW50cmllcyA8PSAwKTsKKworCS8vID4+PiBtYXkgd2FudCB0byBjaGVjayBmb3IgY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVElORyBiZXR3ZWVuCisJLy8gPj4+IGl0ZXJhdGlvbnMgb2YgdGhlIGZvci1sb29wLCBiYWlsIGlmIHNldD8KKworCS8vID4+PiBzaG91bGQgd2UgaW1wb3NlIGEgbWludW11bSAjb2YgZW50cmllcz8gbGlrZSA0IG9yIDg/CisJZm9yIChuZW50cmllcyA9IGNoLT5yZW1vdGVfbmVudHJpZXM7IG5lbnRyaWVzID4gMDsgbmVudHJpZXMtLSkgeworCisJCW5ieXRlcyA9IG5lbnRyaWVzICogY2gtPm1zZ19zaXplOworCQljaC0+cmVtb3RlX21zZ3F1ZXVlID0geHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQobmJ5dGVzLAorCQkJCQkJKEdGUF9LRVJORUwgfCBHRlBfRE1BKSwKKwkJCQkJCSZjaC0+cmVtb3RlX21zZ3F1ZXVlX2Jhc2UpOworCQlpZiAoY2gtPnJlbW90ZV9tc2dxdWV1ZSA9PSBOVUxMKSB7CisJCQljb250aW51ZTsKKwkJfQorCQltZW1zZXQoY2gtPnJlbW90ZV9tc2dxdWV1ZSwgMCwgbmJ5dGVzKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCWlmIChuZW50cmllcyA8IGNoLT5yZW1vdGVfbmVudHJpZXMpIHsKKwkJCWRldl9kYmcoeHBjX2NoYW4sICJuZW50cmllcz0lZCByZW1vdGVfbmVudHJpZXM9JWQsICIKKwkJCQkicGFydGlkPSVkLCBjaGFubmVsPSVkXG4iLCBuZW50cmllcywKKwkJCQljaC0+cmVtb3RlX25lbnRyaWVzLCBjaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKKworCQkJY2gtPnJlbW90ZV9uZW50cmllcyA9IG5lbnRyaWVzOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCQlyZXR1cm4geHBjU3VjY2VzczsKKwl9CisKKwlkZXZfZGJnKHhwY19jaGFuLCAiY2FuJ3QgZ2V0IG1lbW9yeSBmb3IgY2FjaGVkIHJlbW90ZSBtZXNzYWdlIHF1ZXVlLCAiCisJCSJwYXJ0aWQ9JWQsIGNoYW5uZWw9JWRcbiIsIGNoLT5wYXJ0aWQsIGNoLT5udW1iZXIpOworCXJldHVybiB4cGNOb01lbW9yeTsKK30KKworCisvKgorICogQWxsb2NhdGUgbWVzc2FnZSBxdWV1ZXMgYW5kIG90aGVyIHN0dWZmIGFzc29jaWF0ZWQgd2l0aCBhIGNoYW5uZWwuCisgKgorICogTm90ZTogQXNzdW1lcyBhbGwgb2YgdGhlIGNoYW5uZWwgc2l6ZXMgYXJlIGZpbGxlZCBpbi4KKyAqLworc3RhdGljIGVudW0geHBjX3JldHZhbAoreHBjX2FsbG9jYXRlX21zZ3F1ZXVlcyhzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoKQoreworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWludCBpOworCWVudW0geHBjX3JldHZhbCByZXQ7CisKKworCURCVUdfT04oY2gtPmZsYWdzICYgWFBDX0NfU0VUVVApOworCisJaWYgKChyZXQgPSB4cGNfYWxsb2NhdGVfbG9jYWxfbXNncXVldWUoY2gpKSAhPSB4cGNTdWNjZXNzKSB7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKChyZXQgPSB4cGNfYWxsb2NhdGVfcmVtb3RlX21zZ3F1ZXVlKGNoKSkgIT0geHBjU3VjY2VzcykgeworCQlrZnJlZShjaC0+bG9jYWxfbXNncXVldWVfYmFzZSk7CisJCWNoLT5sb2NhbF9tc2dxdWV1ZSA9IE5VTEw7CisJCWtmcmVlKGNoLT5ub3RpZnlfcXVldWUpOworCQljaC0+bm90aWZ5X3F1ZXVlID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2gtPmxvY2FsX25lbnRyaWVzOyBpKyspIHsKKwkJLyogdXNlIGEgc2VtYXBob3JlIGFzIGFuIGV2ZW50IHdhaXQgcXVldWUgKi8KKwkJc2VtYV9pbml0KCZjaC0+bm90aWZ5X3F1ZXVlW2ldLnNlbWEsIDApOworCX0KKworCXNlbWFfaW5pdCgmY2gtPnRlYXJkb3duX3NlbWEsIDApOwkvKiBldmVudCB3YWl0ICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJY2gtPmZsYWdzIHw9IFhQQ19DX1NFVFVQOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCisJcmV0dXJuIHhwY1N1Y2Nlc3M7Cit9CisKKworLyoKKyAqIFByb2Nlc3MgYSBjb25uZWN0IG1lc3NhZ2UgZnJvbSBhIHJlbW90ZSBwYXJ0aXRpb24uCisgKgorICogTm90ZTogeHBjX3Byb2Nlc3NfY29ubmVjdCgpIGlzIGV4cGVjdGluZyB0byBiZSBjYWxsZWQgd2l0aCB0aGUKKyAqIHNwaW5fbG9ja19pcnFzYXZlIGhlbGQgYW5kIHdpbGwgbGVhdmUgaXQgbG9ja2VkIHVwb24gcmV0dXJuLgorICovCitzdGF0aWMgdm9pZAoreHBjX3Byb2Nlc3NfY29ubmVjdChzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLCB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpCit7CisJZW51bSB4cGNfcmV0dmFsIHJldDsKKworCisJREJVR19PTighc3Bpbl9pc19sb2NrZWQoJmNoLT5sb2NrKSk7CisKKwlpZiAoIShjaC0+ZmxhZ3MgJiBYUENfQ19PUEVOUkVRVUVTVCkgfHwKKwkJCQkhKGNoLT5mbGFncyAmIFhQQ19DX1JPUEVOUkVRVUVTVCkpIHsKKwkJLyogbm90aGluZyBtb3JlIHRvIGRvIGZvciBub3cgKi8KKwkJcmV0dXJuOworCX0KKwlEQlVHX09OKCEoY2gtPmZsYWdzICYgWFBDX0NfQ09OTkVDVElORykpOworCisJaWYgKCEoY2gtPmZsYWdzICYgWFBDX0NfU0VUVVApKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCAqaXJxX2ZsYWdzKTsKKwkJcmV0ID0geHBjX2FsbG9jYXRlX21zZ3F1ZXVlcyhjaCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgKmlycV9mbGFncyk7CisKKwkJaWYgKHJldCAhPSB4cGNTdWNjZXNzKSB7CisJCQlYUENfRElTQ09OTkVDVF9DSEFOTkVMKGNoLCByZXQsIGlycV9mbGFncyk7CisJCX0KKwkJaWYgKGNoLT5mbGFncyAmIChYUENfQ19DT05ORUNURUQgfCBYUENfQ19ESVNDT05ORUNUSU5HKSkgeworCQkJcmV0dXJuOworCQl9CisKKwkJREJVR19PTighKGNoLT5mbGFncyAmIFhQQ19DX1NFVFVQKSk7CisJCURCVUdfT04oY2gtPmxvY2FsX21zZ3F1ZXVlID09IE5VTEwpOworCQlEQlVHX09OKGNoLT5yZW1vdGVfbXNncXVldWUgPT0gTlVMTCk7CisJfQorCisJaWYgKCEoY2gtPmZsYWdzICYgWFBDX0NfT1BFTlJFUExZKSkgeworCQljaC0+ZmxhZ3MgfD0gWFBDX0NfT1BFTlJFUExZOworCQl4cGNfSVBJX3NlbmRfb3BlbnJlcGx5KGNoLCBpcnFfZmxhZ3MpOworCX0KKworCWlmICghKGNoLT5mbGFncyAmIFhQQ19DX1JPUEVOUkVQTFkpKSB7CisJCXJldHVybjsKKwl9CisKKwlEQlVHX09OKGNoLT5yZW1vdGVfbXNncXVldWVfcGEgPT0gMCk7CisKKwljaC0+ZmxhZ3MgPSAoWFBDX0NfQ09OTkVDVEVEIHwgWFBDX0NfU0VUVVApOwkvKiBjbGVhciBhbGwgZWxzZSAqLworCisJZGV2X2luZm8oeHBjX2NoYW4sICJjaGFubmVsICVkIHRvIHBhcnRpdGlvbiAlZCBjb25uZWN0ZWRcbiIsCisJCWNoLT5udW1iZXIsIGNoLT5wYXJ0aWQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssICppcnFfZmxhZ3MpOworCXhwY19jcmVhdGVfa3RocmVhZHMoY2gsIDEpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgKmlycV9mbGFncyk7Cit9CisKKworLyoKKyAqIEZyZWUgdXAgbWVzc2FnZSBxdWV1ZXMgYW5kIG90aGVyIHN0dWZmIHRoYXQgd2VyZSBhbGxvY2F0ZWQgZm9yIHRoZSBzcGVjaWZpZWQKKyAqIGNoYW5uZWwuCisgKgorICogTm90ZTogY2gtPnJlYXNvbiBhbmQgY2gtPnJlYXNvbl9saW5lIGFyZSBsZWZ0IHNldCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLAorICogdGhleSdyZSBjbGVhcmVkIHdoZW4gWFBDX0NfRElTQ09OTkVDVEVEIGlzIGNsZWFyZWQuCisgKi8KK3N0YXRpYyB2b2lkCit4cGNfZnJlZV9tc2dxdWV1ZXMoc3RydWN0IHhwY19jaGFubmVsICpjaCkKK3sKKwlEQlVHX09OKCFzcGluX2lzX2xvY2tlZCgmY2gtPmxvY2spKTsKKwlEQlVHX09OKGF0b21pY19yZWFkKCZjaC0+bl90b19ub3RpZnkpICE9IDApOworCisJY2gtPnJlbW90ZV9tc2dxdWV1ZV9wYSA9IDA7CisJY2gtPmZ1bmMgPSBOVUxMOworCWNoLT5rZXkgPSBOVUxMOworCWNoLT5tc2dfc2l6ZSA9IDA7CisJY2gtPmxvY2FsX25lbnRyaWVzID0gMDsKKwljaC0+cmVtb3RlX25lbnRyaWVzID0gMDsKKwljaC0+a3RocmVhZHNfYXNzaWduZWRfbGltaXQgPSAwOworCWNoLT5rdGhyZWFkc19pZGxlX2xpbWl0ID0gMDsKKworCWNoLT5sb2NhbF9HUC0+Z2V0ID0gMDsKKwljaC0+bG9jYWxfR1AtPnB1dCA9IDA7CisJY2gtPnJlbW90ZV9HUC5nZXQgPSAwOworCWNoLT5yZW1vdGVfR1AucHV0ID0gMDsKKwljaC0+d19sb2NhbF9HUC5nZXQgPSAwOworCWNoLT53X2xvY2FsX0dQLnB1dCA9IDA7CisJY2gtPndfcmVtb3RlX0dQLmdldCA9IDA7CisJY2gtPndfcmVtb3RlX0dQLnB1dCA9IDA7CisJY2gtPm5leHRfbXNnX3RvX3B1bGwgPSAwOworCisJaWYgKGNoLT5mbGFncyAmIFhQQ19DX1NFVFVQKSB7CisJCWNoLT5mbGFncyAmPSB+WFBDX0NfU0VUVVA7CisKKwkJZGV2X2RiZyh4cGNfY2hhbiwgImNoLT5mbGFncz0weCV4LCBwYXJ0aWQ9JWQsIGNoYW5uZWw9JWRcbiIsCisJCQljaC0+ZmxhZ3MsIGNoLT5wYXJ0aWQsIGNoLT5udW1iZXIpOworCisJCWtmcmVlKGNoLT5sb2NhbF9tc2dxdWV1ZV9iYXNlKTsKKwkJY2gtPmxvY2FsX21zZ3F1ZXVlID0gTlVMTDsKKwkJa2ZyZWUoY2gtPnJlbW90ZV9tc2dxdWV1ZV9iYXNlKTsKKwkJY2gtPnJlbW90ZV9tc2dxdWV1ZSA9IE5VTEw7CisJCWtmcmVlKGNoLT5ub3RpZnlfcXVldWUpOworCQljaC0+bm90aWZ5X3F1ZXVlID0gTlVMTDsKKworCQkvKiBpbiBjYXNlIHNvbWVvbmUgaXMgd2FpdGluZyBmb3IgdGhlIHRlYXJkb3duIHRvIGNvbXBsZXRlICovCisJCXVwKCZjaC0+dGVhcmRvd25fc2VtYSk7CisJfQorfQorCisKKy8qCisgKiBzcGluX2xvY2tfaXJxc2F2ZSgpIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgb24gZW50cnkuCisgKi8KK3N0YXRpYyB2b2lkCit4cGNfcHJvY2Vzc19kaXNjb25uZWN0KHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsIHVuc2lnbmVkIGxvbmcgKmlycV9mbGFncykKK3sKKwlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCA9ICZ4cGNfcGFydGl0aW9uc1tjaC0+cGFydGlkXTsKKwl1MzIgY2hfZmxhZ3MgPSBjaC0+ZmxhZ3M7CisKKworCURCVUdfT04oIXNwaW5faXNfbG9ja2VkKCZjaC0+bG9jaykpOworCisJaWYgKCEoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVElORykpIHsKKwkJcmV0dXJuOworCX0KKworCURCVUdfT04oIShjaC0+ZmxhZ3MgJiBYUENfQ19DTE9TRVJFUVVFU1QpKTsKKworCS8qIG1ha2Ugc3VyZSBhbGwgYWN0aXZpdHkgaGFzIHNldHRsZWQgZG93biBmaXJzdCAqLworCisJaWYgKGF0b21pY19yZWFkKCZjaC0+cmVmZXJlbmNlcykgPiAwKSB7CisJCXJldHVybjsKKwl9CisJREJVR19PTihhdG9taWNfcmVhZCgmY2gtPmt0aHJlYWRzX2Fzc2lnbmVkKSAhPSAwKTsKKworCS8qIGl0J3Mgbm93IHNhZmUgdG8gZnJlZSB0aGUgY2hhbm5lbCdzIG1lc3NhZ2UgcXVldWVzICovCisKKwl4cGNfZnJlZV9tc2dxdWV1ZXMoY2gpOworCURCVUdfT04oY2gtPmZsYWdzICYgWFBDX0NfU0VUVVApOworCisJaWYgKHBhcnQtPmFjdF9zdGF0ZSAhPSBYUENfUF9ERUFDVElWQVRJTkcpIHsKKworCQkvKiBhcyBsb25nIGFzIHRoZSBvdGhlciBzaWRlIGlzIHVwIGRvIHRoZSBmdWxsIHByb3RvY29sICovCisKKwkJaWYgKCEoY2gtPmZsYWdzICYgWFBDX0NfUkNMT1NFUkVRVUVTVCkpIHsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmICghKGNoLT5mbGFncyAmIFhQQ19DX0NMT1NFUkVQTFkpKSB7CisJCQljaC0+ZmxhZ3MgfD0gWFBDX0NfQ0xPU0VSRVBMWTsKKwkJCXhwY19JUElfc2VuZF9jbG9zZXJlcGx5KGNoLCBpcnFfZmxhZ3MpOworCQl9CisKKwkJaWYgKCEoY2gtPmZsYWdzICYgWFBDX0NfUkNMT1NFUkVQTFkpKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBib3RoIHNpZGVzIGFyZSBkaXNjb25uZWN0ZWQgbm93ICovCisKKwljaC0+ZmxhZ3MgPSBYUENfQ19ESVNDT05ORUNURUQ7CS8qIGNsZWFyIGFsbCBmbGFncywgYnV0IHRoaXMgb25lICovCisKKwlhdG9taWNfZGVjKCZwYXJ0LT5uY2hhbm5lbHNfYWN0aXZlKTsKKworCWlmIChjaF9mbGFncyAmIFhQQ19DX1dBU0NPTk5FQ1RFRCkgeworCQlkZXZfaW5mbyh4cGNfY2hhbiwgImNoYW5uZWwgJWQgdG8gcGFydGl0aW9uICVkIGRpc2Nvbm5lY3RlZCwgIgorCQkJInJlYXNvbj0lZFxuIiwgY2gtPm51bWJlciwgY2gtPnBhcnRpZCwgY2gtPnJlYXNvbik7CisJfQorfQorCisKKy8qCisgKiBQcm9jZXNzIGEgY2hhbmdlIGluIHRoZSBjaGFubmVsJ3MgcmVtb3RlIGNvbm5lY3Rpb24gc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCit4cGNfcHJvY2Vzc19vcGVuY2xvc2VfSVBJKHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0LCBpbnQgY2hfbnVtYmVyLAorCQkJCXU4IElQSV9mbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdHJ1Y3QgeHBjX29wZW5jbG9zZV9hcmdzICphcmdzID0KKwkJCQkmcGFydC0+cmVtb3RlX29wZW5jbG9zZV9hcmdzW2NoX251bWJlcl07CisJc3RydWN0IHhwY19jaGFubmVsICpjaCA9ICZwYXJ0LT5jaGFubmVsc1tjaF9udW1iZXJdOworCWVudW0geHBjX3JldHZhbCByZWFzb247CisKKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCisKKwlpZiAoSVBJX2ZsYWdzICYgWFBDX0lQSV9DTE9TRVJFUVVFU1QpIHsKKworCQlkZXZfZGJnKHhwY19jaGFuLCAiWFBDX0lQSV9DTE9TRVJFUVVFU1QgKHJlYXNvbj0lZCkgcmVjZWl2ZWQgIgorCQkJImZyb20gcGFydGlkPSVkLCBjaGFubmVsPSVkXG4iLCBhcmdzLT5yZWFzb24sCisJCQljaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKKworCQkvKgorCQkgKiBJZiBSQ0xPU0VSRVFVRVNUIGlzIHNldCwgd2UncmUgcHJvYmFibHkgd2FpdGluZyBmb3IKKwkJICogUkNMT1NFUkVQTFkuIFdlIHNob3VsZCBmaW5kIGl0IGFuZCBhIFJPUEVOUkVRVUVTVCBwYWNrZWQKKwkJICogd2l0aCB0aGlzIFJDTE9TRVFSRVVRRVNUIGluIHRoZSBJUElfZmxhZ3MuCisJCSAqLworCisJCWlmIChjaC0+ZmxhZ3MgJiBYUENfQ19SQ0xPU0VSRVFVRVNUKSB7CisJCQlEQlVHX09OKCEoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVElORykpOworCQkJREJVR19PTighKGNoLT5mbGFncyAmIFhQQ19DX0NMT1NFUkVRVUVTVCkpOworCQkJREJVR19PTighKGNoLT5mbGFncyAmIFhQQ19DX0NMT1NFUkVQTFkpKTsKKwkJCURCVUdfT04oY2gtPmZsYWdzICYgWFBDX0NfUkNMT1NFUkVQTFkpOworCisJCQlEQlVHX09OKCEoSVBJX2ZsYWdzICYgWFBDX0lQSV9DTE9TRVJFUExZKSk7CisJCQlJUElfZmxhZ3MgJj0gflhQQ19JUElfQ0xPU0VSRVBMWTsKKwkJCWNoLT5mbGFncyB8PSBYUENfQ19SQ0xPU0VSRVBMWTsKKworCQkJLyogYm90aCBzaWRlcyBoYXZlIGZpbmlzaGVkIGRpc2Nvbm5lY3RpbmcgKi8KKwkJCXhwY19wcm9jZXNzX2Rpc2Nvbm5lY3QoY2gsICZpcnFfZmxhZ3MpOworCQl9CisKKwkJaWYgKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RFRCkgeworCQkJLy8gPj4+IGV4cGxhaW4gdGhpcyBzZWN0aW9uCisKKwkJCWlmICghKElQSV9mbGFncyAmIFhQQ19JUElfT1BFTlJFUVVFU1QpKSB7CisJCQkJREJVR19PTihwYXJ0LT5hY3Rfc3RhdGUgIT0KKwkJCQkJCQlYUENfUF9ERUFDVElWQVRJTkcpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJWFBDX1NFVF9SRUFTT04oY2gsIDAsIDApOworCQkJY2gtPmZsYWdzICY9IH5YUENfQ19ESVNDT05ORUNURUQ7CisKKwkJCWF0b21pY19pbmMoJnBhcnQtPm5jaGFubmVsc19hY3RpdmUpOworCQkJY2gtPmZsYWdzIHw9IChYUENfQ19DT05ORUNUSU5HIHwgWFBDX0NfUk9QRU5SRVFVRVNUKTsKKwkJfQorCisJCUlQSV9mbGFncyAmPSB+KFhQQ19JUElfT1BFTlJFUVVFU1QgfCBYUENfSVBJX09QRU5SRVBMWSk7CisKKwkJLyoKKwkJICogVGhlIG1lYW5pbmdmdWwgQ0xPU0VSRVFVRVNUIGNvbm5lY3Rpb24gc3RhdGUgZmllbGRzIGFyZToKKwkJICogICAgICByZWFzb24gPSByZWFzb24gY29ubmVjdGlvbiBpcyB0byBiZSBjbG9zZWQKKwkJICovCisKKwkJY2gtPmZsYWdzIHw9IFhQQ19DX1JDTE9TRVJFUVVFU1Q7CisKKwkJaWYgKCEoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVElORykpIHsKKwkJCXJlYXNvbiA9IGFyZ3MtPnJlYXNvbjsKKwkJCWlmIChyZWFzb24gPD0geHBjU3VjY2VzcyB8fCByZWFzb24gPiB4cGNVbmtub3duUmVhc29uKSB7CisJCQkJcmVhc29uID0geHBjVW5rbm93blJlYXNvbjsKKwkJCX0gZWxzZSBpZiAocmVhc29uID09IHhwY1VucmVnaXN0ZXJpbmcpIHsKKwkJCQlyZWFzb24gPSB4cGNPdGhlclVucmVnaXN0ZXJpbmc7CisJCQl9CisKKwkJCVhQQ19ESVNDT05ORUNUX0NIQU5ORUwoY2gsIHJlYXNvbiwgJmlycV9mbGFncyk7CisJCX0gZWxzZSB7CisJCQl4cGNfcHJvY2Vzc19kaXNjb25uZWN0KGNoLCAmaXJxX2ZsYWdzKTsKKwkJfQorCX0KKworCisJaWYgKElQSV9mbGFncyAmIFhQQ19JUElfQ0xPU0VSRVBMWSkgeworCisJCWRldl9kYmcoeHBjX2NoYW4sICJYUENfSVBJX0NMT1NFUkVQTFkgcmVjZWl2ZWQgZnJvbSBwYXJ0aWQ9JWQsIgorCQkJIiBjaGFubmVsPSVkXG4iLCBjaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKKworCQlpZiAoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVEVEKSB7CisJCQlEQlVHX09OKHBhcnQtPmFjdF9zdGF0ZSAhPSBYUENfUF9ERUFDVElWQVRJTkcpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCQlyZXR1cm47CisJCX0KKworCQlEQlVHX09OKCEoY2gtPmZsYWdzICYgWFBDX0NfQ0xPU0VSRVFVRVNUKSk7CisJCURCVUdfT04oIShjaC0+ZmxhZ3MgJiBYUENfQ19SQ0xPU0VSRVFVRVNUKSk7CisKKwkJY2gtPmZsYWdzIHw9IFhQQ19DX1JDTE9TRVJFUExZOworCisJCWlmIChjaC0+ZmxhZ3MgJiBYUENfQ19DTE9TRVJFUExZKSB7CisJCQkvKiBib3RoIHNpZGVzIGhhdmUgZmluaXNoZWQgZGlzY29ubmVjdGluZyAqLworCQkJeHBjX3Byb2Nlc3NfZGlzY29ubmVjdChjaCwgJmlycV9mbGFncyk7CisJCX0KKwl9CisKKworCWlmIChJUElfZmxhZ3MgJiBYUENfSVBJX09QRU5SRVFVRVNUKSB7CisKKwkJZGV2X2RiZyh4cGNfY2hhbiwgIlhQQ19JUElfT1BFTlJFUVVFU1QgKG1zZ19zaXplPSVkLCAiCisJCQkibG9jYWxfbmVudHJpZXM9JWQpIHJlY2VpdmVkIGZyb20gcGFydGlkPSVkLCAiCisJCQkiY2hhbm5lbD0lZFxuIiwgYXJncy0+bXNnX3NpemUsIGFyZ3MtPmxvY2FsX25lbnRyaWVzLAorCQkJY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CisKKwkJaWYgKChjaC0+ZmxhZ3MgJiBYUENfQ19ESVNDT05ORUNUSU5HKSB8fAorCQkJCQlwYXJ0LT5hY3Rfc3RhdGUgPT0gWFBDX1BfREVBQ1RJVkFUSU5HKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQorCQlEQlVHX09OKCEoY2gtPmZsYWdzICYgKFhQQ19DX0RJU0NPTk5FQ1RFRCB8CisJCQkJCQkJWFBDX0NfT1BFTlJFUVVFU1QpKSk7CisJCURCVUdfT04oY2gtPmZsYWdzICYgKFhQQ19DX1JPUEVOUkVRVUVTVCB8IFhQQ19DX1JPUEVOUkVQTFkgfAorCQkJCQlYUENfQ19PUEVOUkVQTFkgfCBYUENfQ19DT05ORUNURUQpKTsKKworCQkvKgorCQkgKiBUaGUgbWVhbmluZ2Z1bCBPUEVOUkVRVUVTVCBjb25uZWN0aW9uIHN0YXRlIGZpZWxkcyBhcmU6CisJCSAqICAgICAgbXNnX3NpemUgPSBzaXplIG9mIGNoYW5uZWwncyBtZXNzYWdlcyBpbiBieXRlcworCQkgKiAgICAgIGxvY2FsX25lbnRyaWVzID0gcmVtb3RlIHBhcnRpdGlvbidzIGxvY2FsX25lbnRyaWVzCisJCSAqLworCQlEQlVHX09OKGFyZ3MtPm1zZ19zaXplID09IDApOworCQlEQlVHX09OKGFyZ3MtPmxvY2FsX25lbnRyaWVzID09IDApOworCisJCWNoLT5mbGFncyB8PSAoWFBDX0NfUk9QRU5SRVFVRVNUIHwgWFBDX0NfQ09OTkVDVElORyk7CisJCWNoLT5yZW1vdGVfbmVudHJpZXMgPSBhcmdzLT5sb2NhbF9uZW50cmllczsKKworCisJCWlmIChjaC0+ZmxhZ3MgJiBYUENfQ19PUEVOUkVRVUVTVCkgeworCQkJaWYgKGFyZ3MtPm1zZ19zaXplICE9IGNoLT5tc2dfc2l6ZSkgeworCQkJCVhQQ19ESVNDT05ORUNUX0NIQU5ORUwoY2gsIHhwY1VuZXF1YWxNc2dTaXplcywKKwkJCQkJCQkJJmlycV9mbGFncyk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJY2gtPm1zZ19zaXplID0gYXJncy0+bXNnX3NpemU7CisKKwkJCVhQQ19TRVRfUkVBU09OKGNoLCAwLCAwKTsKKwkJCWNoLT5mbGFncyAmPSB+WFBDX0NfRElTQ09OTkVDVEVEOworCisJCQlhdG9taWNfaW5jKCZwYXJ0LT5uY2hhbm5lbHNfYWN0aXZlKTsKKwkJfQorCisJCXhwY19wcm9jZXNzX2Nvbm5lY3QoY2gsICZpcnFfZmxhZ3MpOworCX0KKworCisJaWYgKElQSV9mbGFncyAmIFhQQ19JUElfT1BFTlJFUExZKSB7CisKKwkJZGV2X2RiZyh4cGNfY2hhbiwgIlhQQ19JUElfT1BFTlJFUExZIChsb2NhbF9tc2dxdWV1ZV9wYT0weCVseCwgIgorCQkJImxvY2FsX25lbnRyaWVzPSVkLCByZW1vdGVfbmVudHJpZXM9JWQpIHJlY2VpdmVkIGZyb20gIgorCQkJInBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwgYXJncy0+bG9jYWxfbXNncXVldWVfcGEsCisJCQlhcmdzLT5sb2NhbF9uZW50cmllcywgYXJncy0+cmVtb3RlX25lbnRyaWVzLAorCQkJY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CisKKwkJaWYgKGNoLT5mbGFncyAmIChYUENfQ19ESVNDT05ORUNUSU5HIHwgWFBDX0NfRElTQ09OTkVDVEVEKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCQlyZXR1cm47CisJCX0KKwkJREJVR19PTighKGNoLT5mbGFncyAmIFhQQ19DX09QRU5SRVFVRVNUKSk7CisJCURCVUdfT04oIShjaC0+ZmxhZ3MgJiBYUENfQ19ST1BFTlJFUVVFU1QpKTsKKwkJREJVR19PTihjaC0+ZmxhZ3MgJiBYUENfQ19DT05ORUNURUQpOworCisJCS8qCisJCSAqIFRoZSBtZWFuaW5nZnVsIE9QRU5SRVBMWSBjb25uZWN0aW9uIHN0YXRlIGZpZWxkcyBhcmU6CisJCSAqICAgICAgbG9jYWxfbXNncXVldWVfcGEgPSBwaHlzaWNhbCBhZGRyZXNzIG9mIHJlbW90ZQorCQkgKgkJCSAgICBwYXJ0aXRpb24ncyBsb2NhbF9tc2dxdWV1ZQorCQkgKiAgICAgIGxvY2FsX25lbnRyaWVzID0gcmVtb3RlIHBhcnRpdGlvbidzIGxvY2FsX25lbnRyaWVzCisJCSAqICAgICAgcmVtb3RlX25lbnRyaWVzID0gcmVtb3RlIHBhcnRpdGlvbidzIHJlbW90ZV9uZW50cmllcworCQkgKi8KKwkJREJVR19PTihhcmdzLT5sb2NhbF9tc2dxdWV1ZV9wYSA9PSAwKTsKKwkJREJVR19PTihhcmdzLT5sb2NhbF9uZW50cmllcyA9PSAwKTsKKwkJREJVR19PTihhcmdzLT5yZW1vdGVfbmVudHJpZXMgPT0gMCk7CisKKwkJY2gtPmZsYWdzIHw9IFhQQ19DX1JPUEVOUkVQTFk7CisJCWNoLT5yZW1vdGVfbXNncXVldWVfcGEgPSBhcmdzLT5sb2NhbF9tc2dxdWV1ZV9wYTsKKworCQlpZiAoYXJncy0+bG9jYWxfbmVudHJpZXMgPCBjaC0+cmVtb3RlX25lbnRyaWVzKSB7CisJCQlkZXZfZGJnKHhwY19jaGFuLCAiWFBDX0lQSV9PUEVOUkVQTFk6IG5ldyAiCisJCQkJInJlbW90ZV9uZW50cmllcz0lZCwgb2xkIHJlbW90ZV9uZW50cmllcz0lZCwgIgorCQkJCSJwYXJ0aWQ9JWQsIGNoYW5uZWw9JWRcbiIsCisJCQkJYXJncy0+bG9jYWxfbmVudHJpZXMsIGNoLT5yZW1vdGVfbmVudHJpZXMsCisJCQkJY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CisKKwkJCWNoLT5yZW1vdGVfbmVudHJpZXMgPSBhcmdzLT5sb2NhbF9uZW50cmllczsKKwkJfQorCQlpZiAoYXJncy0+cmVtb3RlX25lbnRyaWVzIDwgY2gtPmxvY2FsX25lbnRyaWVzKSB7CisJCQlkZXZfZGJnKHhwY19jaGFuLCAiWFBDX0lQSV9PUEVOUkVQTFk6IG5ldyAiCisJCQkJImxvY2FsX25lbnRyaWVzPSVkLCBvbGQgbG9jYWxfbmVudHJpZXM9JWQsICIKKwkJCQkicGFydGlkPSVkLCBjaGFubmVsPSVkXG4iLAorCQkJCWFyZ3MtPnJlbW90ZV9uZW50cmllcywgY2gtPmxvY2FsX25lbnRyaWVzLAorCQkJCWNoLT5wYXJ0aWQsIGNoLT5udW1iZXIpOworCisJCQljaC0+bG9jYWxfbmVudHJpZXMgPSBhcmdzLT5yZW1vdGVfbmVudHJpZXM7CisJCX0KKworCQl4cGNfcHJvY2Vzc19jb25uZWN0KGNoLCAmaXJxX2ZsYWdzKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKK30KKworCisvKgorICogQXR0ZW1wdCB0byBlc3RhYmxpc2ggYSBjaGFubmVsIGNvbm5lY3Rpb24gdG8gYSByZW1vdGUgcGFydGl0aW9uLgorICovCitzdGF0aWMgZW51bSB4cGNfcmV0dmFsCit4cGNfY29ubmVjdF9jaGFubmVsKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJc3RydWN0IHhwY19yZWdpc3RyYXRpb24gKnJlZ2lzdHJhdGlvbiA9ICZ4cGNfcmVnaXN0cmF0aW9uc1tjaC0+bnVtYmVyXTsKKworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmcmVnaXN0cmF0aW9uLT5zZW1hKSAhPSAwKSB7CisJCXJldHVybiB4cGNJbnRlcnJ1cHRlZDsKKwl9CisKKwlpZiAoIVhQQ19DSEFOTkVMX1JFR0lTVEVSRUQoY2gtPm51bWJlcikpIHsKKwkJdXAoJnJlZ2lzdHJhdGlvbi0+c2VtYSk7CisJCXJldHVybiB4cGNVbnJlZ2lzdGVyZWQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCisJREJVR19PTihjaC0+ZmxhZ3MgJiBYUENfQ19DT05ORUNURUQpOworCURCVUdfT04oY2gtPmZsYWdzICYgWFBDX0NfT1BFTlJFUVVFU1QpOworCisJaWYgKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCXVwKCZyZWdpc3RyYXRpb24tPnNlbWEpOworCQlyZXR1cm4gY2gtPnJlYXNvbjsKKwl9CisKKworCS8qIGFkZCBpbmZvIGZyb20gdGhlIGNoYW5uZWwgY29ubmVjdCByZWdpc3RyYXRpb24gdG8gdGhlIGNoYW5uZWwgKi8KKworCWNoLT5rdGhyZWFkc19hc3NpZ25lZF9saW1pdCA9IHJlZ2lzdHJhdGlvbi0+YXNzaWduZWRfbGltaXQ7CisJY2gtPmt0aHJlYWRzX2lkbGVfbGltaXQgPSByZWdpc3RyYXRpb24tPmlkbGVfbGltaXQ7CisJREJVR19PTihhdG9taWNfcmVhZCgmY2gtPmt0aHJlYWRzX2Fzc2lnbmVkKSAhPSAwKTsKKwlEQlVHX09OKGF0b21pY19yZWFkKCZjaC0+a3RocmVhZHNfaWRsZSkgIT0gMCk7CisJREJVR19PTihhdG9taWNfcmVhZCgmY2gtPmt0aHJlYWRzX2FjdGl2ZSkgIT0gMCk7CisKKwljaC0+ZnVuYyA9IHJlZ2lzdHJhdGlvbi0+ZnVuYzsKKwlEQlVHX09OKHJlZ2lzdHJhdGlvbi0+ZnVuYyA9PSBOVUxMKTsKKwljaC0+a2V5ID0gcmVnaXN0cmF0aW9uLT5rZXk7CisKKwljaC0+bG9jYWxfbmVudHJpZXMgPSByZWdpc3RyYXRpb24tPm5lbnRyaWVzOworCisJaWYgKGNoLT5mbGFncyAmIFhQQ19DX1JPUEVOUkVRVUVTVCkgeworCQlpZiAocmVnaXN0cmF0aW9uLT5tc2dfc2l6ZSAhPSBjaC0+bXNnX3NpemUpIHsKKwkJCS8qIHRoZSBsb2NhbCBhbmQgcmVtb3RlIHNpZGVzIGFyZW4ndCB0aGUgc2FtZSAqLworCisJCQkvKgorCQkJICogQmVjYXVzZSBYUENfRElTQ09OTkVDVF9DSEFOTkVMKCkgY2FuIGJsb2NrIHdlJ3JlCisJCQkgKiBmb3JjZWQgdG8gdXAgdGhlIHJlZ2lzdHJhdGlvbiBzZW1hIGJlZm9yZSB3ZSB1bmxvY2sKKwkJCSAqIHRoZSBjaGFubmVsIGxvY2suIEJ1dCB0aGF0J3Mgb2theSBoZXJlIGJlY2F1c2Ugd2UncmUKKwkJCSAqIGRvbmUgd2l0aCB0aGUgcGFydCB0aGF0IHJlcXVpcmVkIHRoZSByZWdpc3RyYXRpb24KKwkJCSAqIHNlbWEuIFhQQ19ESVNDT05ORUNUX0NIQU5ORUwoKSByZXF1aXJlcyB0aGF0IHRoZQorCQkJICogY2hhbm5lbCBsb2NrIGJlIGxvY2tlZCBhbmQgd2lsbCB1bmxvY2sgYW5kIHJlbG9jaworCQkJICogdGhlIGNoYW5uZWwgbG9jayBhcyBuZWVkZWQuCisJCQkgKi8KKwkJCXVwKCZyZWdpc3RyYXRpb24tPnNlbWEpOworCQkJWFBDX0RJU0NPTk5FQ1RfQ0hBTk5FTChjaCwgeHBjVW5lcXVhbE1zZ1NpemVzLAorCQkJCQkJCQkmaXJxX2ZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCQkJcmV0dXJuIHhwY1VuZXF1YWxNc2dTaXplczsKKwkJfQorCX0gZWxzZSB7CisJCWNoLT5tc2dfc2l6ZSA9IHJlZ2lzdHJhdGlvbi0+bXNnX3NpemU7CisKKwkJWFBDX1NFVF9SRUFTT04oY2gsIDAsIDApOworCQljaC0+ZmxhZ3MgJj0gflhQQ19DX0RJU0NPTk5FQ1RFRDsKKworCQlhdG9taWNfaW5jKCZ4cGNfcGFydGl0aW9uc1tjaC0+cGFydGlkXS5uY2hhbm5lbHNfYWN0aXZlKTsKKwl9CisKKwl1cCgmcmVnaXN0cmF0aW9uLT5zZW1hKTsKKworCisJLyogaW5pdGlhdGUgdGhlIGNvbm5lY3Rpb24gKi8KKworCWNoLT5mbGFncyB8PSAoWFBDX0NfT1BFTlJFUVVFU1QgfCBYUENfQ19DT05ORUNUSU5HKTsKKwl4cGNfSVBJX3NlbmRfb3BlbnJlcXVlc3QoY2gsICZpcnFfZmxhZ3MpOworCisJeHBjX3Byb2Nlc3NfY29ubmVjdChjaCwgJmlycV9mbGFncyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKKworCXJldHVybiB4cGNTdWNjZXNzOworfQorCisKKy8qCisgKiBOb3RpZnkgdGhvc2Ugd2hvIHdhbnRlZCB0byBiZSBub3RpZmllZCB1cG9uIGRlbGl2ZXJ5IG9mIHRoZWlyIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCit4cGNfbm90aWZ5X3NlbmRlcnMoc3RydWN0IHhwY19jaGFubmVsICpjaCwgZW51bSB4cGNfcmV0dmFsIHJlYXNvbiwgczY0IHB1dCkKK3sKKwlzdHJ1Y3QgeHBjX25vdGlmeSAqbm90aWZ5OworCXU4IG5vdGlmeV90eXBlOworCXM2NCBnZXQgPSBjaC0+d19yZW1vdGVfR1AuZ2V0IC0gMTsKKworCisJd2hpbGUgKCsrZ2V0IDwgcHV0ICYmIGF0b21pY19yZWFkKCZjaC0+bl90b19ub3RpZnkpID4gMCkgeworCisJCW5vdGlmeSA9ICZjaC0+bm90aWZ5X3F1ZXVlW2dldCAlIGNoLT5sb2NhbF9uZW50cmllc107CisKKwkJLyoKKwkJICogU2VlIGlmIHRoZSBub3RpZnkgZW50cnkgaW5kaWNhdGVzIGl0IHdhcyBhc3NvY2lhdGVkIHdpdGgKKwkJICogYSBtZXNzYWdlIHdobydzIHNlbmRlciB3YW50cyB0byBiZSBub3RpZmllZC4gSXQgaXMgcG9zc2libGUKKwkJICogdGhhdCBpdCBpcywgYnV0IHNvbWVvbmUgZWxzZSBpcyBkb2luZyBvciBoYXMgZG9uZSB0aGUKKwkJICogbm90aWZpY2F0aW9uLgorCQkgKi8KKwkJbm90aWZ5X3R5cGUgPSBub3RpZnktPnR5cGU7CisJCWlmIChub3RpZnlfdHlwZSA9PSAwIHx8CisJCQkJY21weGNoZygmbm90aWZ5LT50eXBlLCBub3RpZnlfdHlwZSwgMCkgIT0KKwkJCQkJCQkJbm90aWZ5X3R5cGUpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJREJVR19PTihub3RpZnlfdHlwZSAhPSBYUENfTl9DQUxMKTsKKworCQlhdG9taWNfZGVjKCZjaC0+bl90b19ub3RpZnkpOworCisJCWlmIChub3RpZnktPmZ1bmMgIT0gTlVMTCkgeworCQkJZGV2X2RiZyh4cGNfY2hhbiwgIm5vdGlmeS0+ZnVuYygpIGNhbGxlZCwgbm90aWZ5PTB4JXAsICIKKwkJCQkibXNnX251bWJlcj0lbGQsIHBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwKKwkJCQkodm9pZCAqKSBub3RpZnksIGdldCwgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CisKKwkJCW5vdGlmeS0+ZnVuYyhyZWFzb24sIGNoLT5wYXJ0aWQsIGNoLT5udW1iZXIsCisJCQkJCQkJCW5vdGlmeS0+a2V5KTsKKworCQkJZGV2X2RiZyh4cGNfY2hhbiwgIm5vdGlmeS0+ZnVuYygpIHJldHVybmVkLCAiCisJCQkJIm5vdGlmeT0weCVwLCBtc2dfbnVtYmVyPSVsZCwgcGFydGlkPSVkLCAiCisJCQkJImNoYW5uZWw9JWRcbiIsICh2b2lkICopIG5vdGlmeSwgZ2V0LAorCQkJCWNoLT5wYXJ0aWQsIGNoLT5udW1iZXIpOworCQl9CisJfQorfQorCisKKy8qCisgKiBDbGVhciBzb21lIG9mIHRoZSBtc2cgZmxhZ3MgaW4gdGhlIGxvY2FsIG1lc3NhZ2UgcXVldWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoreHBjX2NsZWFyX2xvY2FsX21zZ3F1ZXVlX2ZsYWdzKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gpCit7CisJc3RydWN0IHhwY19tc2cgKm1zZzsKKwlzNjQgZ2V0OworCisKKwlnZXQgPSBjaC0+d19yZW1vdGVfR1AuZ2V0OworCWRvIHsKKwkJbXNnID0gKHN0cnVjdCB4cGNfbXNnICopICgodTY0KSBjaC0+bG9jYWxfbXNncXVldWUgKworCQkJCShnZXQgJSBjaC0+bG9jYWxfbmVudHJpZXMpICogY2gtPm1zZ19zaXplKTsKKwkJbXNnLT5mbGFncyA9IDA7CisJfSB3aGlsZSAoKytnZXQgPCAodm9sYXRpbGUgczY0KSBjaC0+cmVtb3RlX0dQLmdldCk7Cit9CisKKworLyoKKyAqIENsZWFyIHNvbWUgb2YgdGhlIG1zZyBmbGFncyBpbiB0aGUgcmVtb3RlIG1lc3NhZ2UgcXVldWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoreHBjX2NsZWFyX3JlbW90ZV9tc2dxdWV1ZV9mbGFncyhzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoKQoreworCXN0cnVjdCB4cGNfbXNnICptc2c7CisJczY0IHB1dDsKKworCisJcHV0ID0gY2gtPndfcmVtb3RlX0dQLnB1dDsKKwlkbyB7CisJCW1zZyA9IChzdHJ1Y3QgeHBjX21zZyAqKSAoKHU2NCkgY2gtPnJlbW90ZV9tc2dxdWV1ZSArCisJCQkJKHB1dCAlIGNoLT5yZW1vdGVfbmVudHJpZXMpICogY2gtPm1zZ19zaXplKTsKKwkJbXNnLT5mbGFncyA9IDA7CisJfSB3aGlsZSAoKytwdXQgPCAodm9sYXRpbGUgczY0KSBjaC0+cmVtb3RlX0dQLnB1dCk7Cit9CisKKworc3RhdGljIHZvaWQKK3hwY19wcm9jZXNzX21zZ19JUEkoc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQsIGludCBjaF9udW1iZXIpCit7CisJc3RydWN0IHhwY19jaGFubmVsICpjaCA9ICZwYXJ0LT5jaGFubmVsc1tjaF9udW1iZXJdOworCWludCBubXNnc19zZW50OworCisKKwljaC0+cmVtb3RlX0dQID0gcGFydC0+cmVtb3RlX0dQc1tjaF9udW1iZXJdOworCisKKwkvKiBTZWUgd2hhdCwgaWYgYW55dGhpbmcsIGhhcyBjaGFuZ2VkIGZvciBlYWNoIGNvbm5lY3RlZCBjaGFubmVsICovCisKKwl4cGNfbXNncXVldWVfcmVmKGNoKTsKKworCWlmIChjaC0+d19yZW1vdGVfR1AuZ2V0ID09IGNoLT5yZW1vdGVfR1AuZ2V0ICYmCisJCQkJY2gtPndfcmVtb3RlX0dQLnB1dCA9PSBjaC0+cmVtb3RlX0dQLnB1dCkgeworCQkvKiBub3RoaW5nIGNoYW5nZWQgc2luY2UgR1BzIHdlcmUgbGFzdCBwdWxsZWQgKi8KKwkJeHBjX21zZ3F1ZXVlX2RlcmVmKGNoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghKGNoLT5mbGFncyAmIFhQQ19DX0NPTk5FQ1RFRCkpeworCQl4cGNfbXNncXVldWVfZGVyZWYoY2gpOworCQlyZXR1cm47CisJfQorCisKKwkvKgorCSAqIEZpcnN0IGNoZWNrIHRvIHNlZSBpZiBtZXNzYWdlcyByZWNlbnRseSBzZW50IGJ5IHVzIGhhdmUgYmVlbgorCSAqIHJlY2VpdmVkIGJ5IHRoZSBvdGhlciBzaWRlLiAoVGhlIHJlbW90ZSBHRVQgdmFsdWUgd2lsbCBoYXZlCisJICogY2hhbmdlZCBzaW5jZSB3ZSBsYXN0IGxvb2tlZCBhdCBpdC4pCisJICovCisKKwlpZiAoY2gtPndfcmVtb3RlX0dQLmdldCAhPSBjaC0+cmVtb3RlX0dQLmdldCkgeworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gbm90aWZ5IGFueSBzZW5kZXJzIHRoYXQgd2FudCB0byBiZSBub3RpZmllZAorCQkgKiB0aGF0IHRoZWlyIHNlbnQgbWVzc2FnZXMgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ5IHRoZWlyCisJCSAqIGludGVuZGVkIHJlY2lwaWVudHMuIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgdXBkYXRpbmcKKwkJICogd19yZW1vdGVfR1AuZ2V0IHNvIHRoYXQgd2UgZG9uJ3QgYWxsb2NhdGUgdGhlIHNhbWUgbWVzc2FnZQorCQkgKiBxdWV1ZSBlbnRyaWVzIHByZW1hdHVyZWx5IChzZWUgeHBjX2FsbG9jYXRlX21zZygpKS4KKwkJICovCisJCWlmIChhdG9taWNfcmVhZCgmY2gtPm5fdG9fbm90aWZ5KSA+IDApIHsKKwkJCS8qCisJCQkgKiBOb3RpZnkgc2VuZGVycyB0aGF0IG1lc3NhZ2VzIHNlbnQgaGF2ZSBiZWVuCisJCQkgKiByZWNlaXZlZCBhbmQgZGVsaXZlcmVkIGJ5IHRoZSBvdGhlciBzaWRlLgorCQkJICovCisJCQl4cGNfbm90aWZ5X3NlbmRlcnMoY2gsIHhwY01zZ0RlbGl2ZXJlZCwKKwkJCQkJCQljaC0+cmVtb3RlX0dQLmdldCk7CisJCX0KKworCQkvKgorCQkgKiBDbGVhciBtc2ctPmZsYWdzIGluIHByZXZpb3VzbHkgc2VudCBtZXNzYWdlcywgc28gdGhhdAorCQkgKiB0aGV5J3JlIHJlYWR5IGZvciB4cGNfYWxsb2NhdGVfbXNnKCkuCisJCSAqLworCQl4cGNfY2xlYXJfbG9jYWxfbXNncXVldWVfZmxhZ3MoY2gpOworCisJCSh2b2xhdGlsZSBzNjQpIGNoLT53X3JlbW90ZV9HUC5nZXQgPSBjaC0+cmVtb3RlX0dQLmdldDsKKworCQlkZXZfZGJnKHhwY19jaGFuLCAid19yZW1vdGVfR1AuZ2V0IGNoYW5nZWQgdG8gJWxkLCBwYXJ0aWQ9JWQsICIKKwkJCSJjaGFubmVsPSVkXG4iLCBjaC0+d19yZW1vdGVfR1AuZ2V0LCBjaC0+cGFydGlkLAorCQkJY2gtPm51bWJlcik7CisKKwkJLyoKKwkJICogSWYgYW55b25lIHdhcyB3YWl0aW5nIGZvciBtZXNzYWdlIHF1ZXVlIGVudHJpZXMgdG8gYmVjb21lCisJCSAqIGF2YWlsYWJsZSwgd2FrZSB0aGVtIHVwLgorCQkgKi8KKwkJaWYgKGF0b21pY19yZWFkKCZjaC0+bl9vbl9tc2dfYWxsb2NhdGVfd3EpID4gMCkgeworCQkJd2FrZV91cCgmY2gtPm1zZ19hbGxvY2F0ZV93cSk7CisJCX0KKwl9CisKKworCS8qCisJICogTm93IGNoZWNrIGZvciBuZXdseSBzZW50IG1lc3NhZ2VzIGJ5IHRoZSBvdGhlciBzaWRlLiAoVGhlIHJlbW90ZQorCSAqIFBVVCB2YWx1ZSB3aWxsIGhhdmUgY2hhbmdlZCBzaW5jZSB3ZSBsYXN0IGxvb2tlZCBhdCBpdC4pCisJICovCisKKwlpZiAoY2gtPndfcmVtb3RlX0dQLnB1dCAhPSBjaC0+cmVtb3RlX0dQLnB1dCkgeworCQkvKgorCQkgKiBDbGVhciBtc2ctPmZsYWdzIGluIHByZXZpb3VzbHkgcmVjZWl2ZWQgbWVzc2FnZXMsIHNvIHRoYXQKKwkJICogdGhleSdyZSByZWFkeSBmb3IgeHBjX2dldF9kZWxpdmVyYWJsZV9tc2coKS4KKwkJICovCisJCXhwY19jbGVhcl9yZW1vdGVfbXNncXVldWVfZmxhZ3MoY2gpOworCisJCSh2b2xhdGlsZSBzNjQpIGNoLT53X3JlbW90ZV9HUC5wdXQgPSBjaC0+cmVtb3RlX0dQLnB1dDsKKworCQlkZXZfZGJnKHhwY19jaGFuLCAid19yZW1vdGVfR1AucHV0IGNoYW5nZWQgdG8gJWxkLCBwYXJ0aWQ9JWQsICIKKwkJCSJjaGFubmVsPSVkXG4iLCBjaC0+d19yZW1vdGVfR1AucHV0LCBjaC0+cGFydGlkLAorCQkJY2gtPm51bWJlcik7CisKKwkJbm1zZ3Nfc2VudCA9IGNoLT53X3JlbW90ZV9HUC5wdXQgLSBjaC0+d19sb2NhbF9HUC5nZXQ7CisJCWlmIChubXNnc19zZW50ID4gMCkgeworCQkJZGV2X2RiZyh4cGNfY2hhbiwgIm1zZ3Mgd2FpdGluZyB0byBiZSBjb3BpZWQgYW5kICIKKwkJCQkiZGVsaXZlcmVkPSVkLCBwYXJ0aWQ9JWQsIGNoYW5uZWw9JWRcbiIsCisJCQkJbm1zZ3Nfc2VudCwgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CisKKwkJCWlmIChjaC0+ZmxhZ3MgJiBYUENfQ19DT05ORUNUQ0FMTE9VVCkgeworCQkJCXhwY19hY3RpdmF0ZV9rdGhyZWFkcyhjaCwgbm1zZ3Nfc2VudCk7CisJCQl9CisJCX0KKwl9CisKKwl4cGNfbXNncXVldWVfZGVyZWYoY2gpOworfQorCisKK3ZvaWQKK3hwY19wcm9jZXNzX2NoYW5uZWxfYWN0aXZpdHkoc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJdTY0IElQSV9hbW8sIElQSV9mbGFnczsKKwlzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoOworCWludCBjaF9udW1iZXI7CisKKworCUlQSV9hbW8gPSB4cGNfZ2V0X0lQSV9mbGFncyhwYXJ0KTsKKworCS8qCisJICogSW5pdGlhdGUgY2hhbm5lbCBjb25uZWN0aW9ucyBmb3IgcmVnaXN0ZXJlZCBjaGFubmVscy4KKwkgKgorCSAqIEZvciBlYWNoIGNvbm5lY3RlZCBjaGFubmVsIHRoYXQgaGFzIHBlbmRpbmcgbWVzc2FnZXMgYWN0aXZhdGUgaWRsZQorCSAqIGt0aHJlYWRzIGFuZC9vciBjcmVhdGUgbmV3IGt0aHJlYWRzIGFzIG5lZWRlZC4KKwkgKi8KKworCWZvciAoY2hfbnVtYmVyID0gMDsgY2hfbnVtYmVyIDwgcGFydC0+bmNoYW5uZWxzOyBjaF9udW1iZXIrKykgeworCQljaCA9ICZwYXJ0LT5jaGFubmVsc1tjaF9udW1iZXJdOworCisKKwkJLyoKKwkJICogUHJvY2VzcyBhbnkgb3BlbiBvciBjbG9zZSByZWxhdGVkIElQSSBmbGFncywgYW5kIHRoZW4gZGVhbAorCQkgKiB3aXRoIGNvbm5lY3Rpbmcgb3IgZGlzY29ubmVjdGluZyB0aGUgY2hhbm5lbCBhcyByZXF1aXJlZC4KKwkJICovCisKKwkJSVBJX2ZsYWdzID0gWFBDX0dFVF9JUElfRkxBR1MoSVBJX2FtbywgY2hfbnVtYmVyKTsKKworCQlpZiAoWFBDX0FOWV9PUEVOQ0xPU0VfSVBJX0ZMQUdTX1NFVChJUElfZmxhZ3MpKSB7CisJCQl4cGNfcHJvY2Vzc19vcGVuY2xvc2VfSVBJKHBhcnQsIGNoX251bWJlciwgSVBJX2ZsYWdzKTsKKwkJfQorCisKKwkJaWYgKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkcpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKKwkJCXhwY19wcm9jZXNzX2Rpc2Nvbm5lY3QoY2gsICZpcnFfZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwYXJ0LT5hY3Rfc3RhdGUgPT0gWFBDX1BfREVBQ1RJVkFUSU5HKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghKGNoLT5mbGFncyAmIFhQQ19DX0NPTk5FQ1RFRCkpIHsKKwkJCWlmICghKGNoLT5mbGFncyAmIFhQQ19DX09QRU5SRVFVRVNUKSkgeworCQkJCURCVUdfT04oY2gtPmZsYWdzICYgWFBDX0NfU0VUVVApOworCQkJCSh2b2lkKSB4cGNfY29ubmVjdF9jaGFubmVsKGNoKTsKKwkJCX0gZWxzZSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCQkJCXhwY19wcm9jZXNzX2Nvbm5lY3QoY2gsICZpcnFfZmxhZ3MpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCisJCS8qCisJCSAqIFByb2Nlc3MgYW55IG1lc3NhZ2UgcmVsYXRlZCBJUEkgZmxhZ3MsIHRoaXMgbWF5IGludm9sdmUgdGhlCisJCSAqIGFjdGl2YXRpb24gb2Yga3RocmVhZHMgdG8gZGVsaXZlciBhbnkgcGVuZGluZyBtZXNzYWdlcyBzZW50CisJCSAqIGZyb20gdGhlIG90aGVyIHBhcnRpdGlvbi4KKwkJICovCisKKwkJaWYgKFhQQ19BTllfTVNHX0lQSV9GTEFHU19TRVQoSVBJX2ZsYWdzKSkgeworCQkJeHBjX3Byb2Nlc3NfbXNnX0lQSShwYXJ0LCBjaF9udW1iZXIpOworCQl9CisJfQorfQorCisKKy8qCisgKiBYUEMncyBoZWFydGJlYXQgY29kZSBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGluZm9ybSBYUEMgdGhhdCBhIHBhcnRpdGlvbiBoYXMKKyAqIGdvbmUgZG93bi4gIFhQQyByZXNwb25kcyBieSB0ZWFyaW5nIGRvd24gdGhlIFhQYXJ0aXRpb24gQ29tbXVuaWNhdGlvbgorICogaW5mcmFzdHJ1Y3R1cmUgdXNlZCBmb3IgdGhlIGp1c3QgZG93bmVkIHBhcnRpdGlvbi4KKyAqCisgKiBYUEMncyBoZWFydGJlYXQgY29kZSB3aWxsIG5ldmVyIGNhbGwgdGhpcyBmdW5jdGlvbiBhbmQgeHBjX3BhcnRpdGlvbl91cCgpCisgKiBhdCB0aGUgc2FtZSB0aW1lLiBOb3Igd2lsbCBpdCBldmVyIG1ha2UgbXVsdGlwbGUgY2FsbHMgdG8gZWl0aGVyIGZ1bmN0aW9uCisgKiBhdCB0aGUgc2FtZSB0aW1lLgorICovCit2b2lkCit4cGNfcGFydGl0aW9uX2Rvd24oc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQsIGVudW0geHBjX3JldHZhbCByZWFzb24pCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJaW50IGNoX251bWJlcjsKKwlzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoOworCisKKwlkZXZfZGJnKHhwY19jaGFuLCAiZGVhY3RpdmF0aW5nIHBhcnRpdGlvbiAlZCwgcmVhc29uPSVkXG4iLAorCQlYUENfUEFSVElEKHBhcnQpLCByZWFzb24pOworCisJaWYgKCF4cGNfcGFydF9yZWYocGFydCkpIHsKKwkJLyogaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoaXMgcGFydGl0aW9uIGlzbid0IGN1cnJlbnRseSBzZXQgdXAgKi8KKwkJcmV0dXJuOworCX0KKworCisJLyogZGlzY29ubmVjdCBhbGwgY2hhbm5lbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb3duZWQgcGFydGl0aW9uICovCisKKwlmb3IgKGNoX251bWJlciA9IDA7IGNoX251bWJlciA8IHBhcnQtPm5jaGFubmVsczsgY2hfbnVtYmVyKyspIHsKKwkJY2ggPSAmcGFydC0+Y2hhbm5lbHNbY2hfbnVtYmVyXTsKKworCisJCXhwY19tc2dxdWV1ZV9yZWYoY2gpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisKKwkJWFBDX0RJU0NPTk5FQ1RfQ0hBTk5FTChjaCwgcmVhc29uLCAmaXJxX2ZsYWdzKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKKwkJeHBjX21zZ3F1ZXVlX2RlcmVmKGNoKTsKKwl9CisKKwl4cGNfd2FrZXVwX2NoYW5uZWxfbWdyKHBhcnQpOworCisJeHBjX3BhcnRfZGVyZWYocGFydCk7Cit9CisKKworLyoKKyAqIFRlYXJkb3duIHRoZSBpbmZyYXN0cnVjdHVyZSBuZWNlc3NhcnkgdG8gc3VwcG9ydCBYUGFydGl0aW9uIENvbW11bmljYXRpb24KKyAqIGJldHdlZW4gdGhlIHNwZWNpZmllZCByZW1vdGUgcGFydGl0aW9uIGFuZCB0aGUgbG9jYWwgb25lLgorICovCit2b2lkCit4cGNfdGVhcmRvd25faW5mcmFzdHJ1Y3R1cmUoc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQpCit7CisJcGFydGlkX3QgcGFydGlkID0gWFBDX1BBUlRJRChwYXJ0KTsKKworCisJLyoKKwkgKiBXZSBzdGFydCBvZmYgYnkgbWFraW5nIHRoaXMgcGFydGl0aW9uIGluYWNjZXNzaWJsZSB0byBsb2NhbAorCSAqIHByb2Nlc3NlcyBieSBtYXJraW5nIGl0IGFzIG5vIGxvbmdlciBzZXR1cC4gVGhlbiB3ZSBtYWtlIGl0CisJICogaW5hY2Nlc3NpYmxlIHRvIHJlbW90ZSBwcm9jZXNzZXMgYnkgY2xlYXJpbmcgdGhlIFhQQyBwZXIgcGFydGl0aW9uCisJICogc3BlY2lmaWMgdmFyaWFibGUncyBtYWdpYyAjICh3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGVzZSB2YXJpYWJsZXMKKwkgKiBhcmUgbm8gbG9uZ2VyIHZhbGlkKSBhbmQgYnkgaWdub3JpbmcgYWxsIFhQQyBub3RpZnkgSVBJcyBzZW50IHRvCisJICogdGhpcyBwYXJ0aXRpb24uCisJICovCisKKwlEQlVHX09OKGF0b21pY19yZWFkKCZwYXJ0LT5uY2hhbm5lbHNfYWN0aXZlKSAhPSAwKTsKKwlEQlVHX09OKHBhcnQtPnNldHVwX3N0YXRlICE9IFhQQ19QX1NFVFVQKTsKKwlwYXJ0LT5zZXR1cF9zdGF0ZSA9IFhQQ19QX1dURUFSRE9XTjsKKworCXhwY192YXJzX3BhcnRbcGFydGlkXS5tYWdpYyA9IDA7CisKKworCWZyZWVfaXJxKFNHSV9YUENfTk9USUZZLCAodm9pZCAqKSAodTY0KSBwYXJ0aWQpOworCisKKwkvKgorCSAqIEJlZm9yZSBwcm9jZWRpbmcgd2l0aCB0aGUgdGVhcmRvd24gd2UgaGF2ZSB0byB3YWl0IHVudGlsIGFsbAorCSAqIGV4aXN0aW5nIHJlZmVyZW5jZXMgY2Vhc2UuCisJICovCisJd2FpdF9ldmVudChwYXJ0LT50ZWFyZG93bl93cSwgKGF0b21pY19yZWFkKCZwYXJ0LT5yZWZlcmVuY2VzKSA9PSAwKSk7CisKKworCS8qIG5vdyB3ZSBjYW4gYmVnaW4gdGVhcmluZyBkb3duIHRoZSBpbmZyYXN0cnVjdHVyZSAqLworCisJcGFydC0+c2V0dXBfc3RhdGUgPSBYUENfUF9UT1JORE9XTjsKKworCS8qIGluIGNhc2Ugd2UndmUgc3RpbGwgZ290IG91dHN0YW5kaW5nIHRpbWVycyByZWdpc3RlcmVkLi4uICovCisJZGVsX3RpbWVyX3N5bmMoJnBhcnQtPmRyb3BwZWRfSVBJX3RpbWVyKTsKKworCWtmcmVlKHBhcnQtPnJlbW90ZV9vcGVuY2xvc2VfYXJnc19iYXNlKTsKKwlwYXJ0LT5yZW1vdGVfb3BlbmNsb3NlX2FyZ3MgPSBOVUxMOworCWtmcmVlKHBhcnQtPmxvY2FsX29wZW5jbG9zZV9hcmdzX2Jhc2UpOworCXBhcnQtPmxvY2FsX29wZW5jbG9zZV9hcmdzID0gTlVMTDsKKwlrZnJlZShwYXJ0LT5yZW1vdGVfR1BzX2Jhc2UpOworCXBhcnQtPnJlbW90ZV9HUHMgPSBOVUxMOworCWtmcmVlKHBhcnQtPmxvY2FsX0dQc19iYXNlKTsKKwlwYXJ0LT5sb2NhbF9HUHMgPSBOVUxMOworCWtmcmVlKHBhcnQtPmNoYW5uZWxzKTsKKwlwYXJ0LT5jaGFubmVscyA9IE5VTEw7CisJcGFydC0+bG9jYWxfSVBJX2Ftb192YSA9IE5VTEw7Cit9CisKKworLyoKKyAqIENhbGxlZCBieSBYUCBhdCB0aGUgdGltZSBvZiBjaGFubmVsIGNvbm5lY3Rpb24gcmVnaXN0cmF0aW9uIHRvIGNhdXNlCisgKiBYUEMgdG8gZXN0YWJsaXNoIGNvbm5lY3Rpb25zIHRvIGFsbCBjdXJyZW50bHkgYWN0aXZlIHBhcnRpdGlvbnMuCisgKi8KK3ZvaWQKK3hwY19pbml0aWF0ZV9jb25uZWN0KGludCBjaF9udW1iZXIpCit7CisJcGFydGlkX3QgcGFydGlkOworCXN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0OworCXN0cnVjdCB4cGNfY2hhbm5lbCAqY2g7CisKKworCURCVUdfT04oY2hfbnVtYmVyIDwgMCB8fCBjaF9udW1iZXIgPj0gWFBDX05DSEFOTkVMUyk7CisKKwlmb3IgKHBhcnRpZCA9IDE7IHBhcnRpZCA8IFhQX01BWF9QQVJUSVRJT05TOyBwYXJ0aWQrKykgeworCQlwYXJ0ID0gJnhwY19wYXJ0aXRpb25zW3BhcnRpZF07CisKKwkJaWYgKHhwY19wYXJ0X3JlZihwYXJ0KSkgeworCQkJY2ggPSAmcGFydC0+Y2hhbm5lbHNbY2hfbnVtYmVyXTsKKworCQkJaWYgKCEoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVElORykpIHsKKwkJCQlEQlVHX09OKGNoLT5mbGFncyAmIFhQQ19DX09QRU5SRVFVRVNUKTsKKwkJCQlEQlVHX09OKGNoLT5mbGFncyAmIFhQQ19DX0NPTk5FQ1RFRCk7CisJCQkJREJVR19PTihjaC0+ZmxhZ3MgJiBYUENfQ19TRVRVUCk7CisKKwkJCQkvKgorCQkJCSAqIEluaXRpYXRlIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgY29ubmVjdGlvbgorCQkJCSAqIG9uIHRoZSBuZXdseSByZWdpc3RlcmVkIGNoYW5uZWwgdG8gdGhlCisJCQkJICogcmVtb3RlIHBhcnRpdGlvbi4KKwkJCQkgKi8KKwkJCQl4cGNfd2FrZXVwX2NoYW5uZWxfbWdyKHBhcnQpOworCQkJfQorCisJCQl4cGNfcGFydF9kZXJlZihwYXJ0KTsKKwkJfQorCX0KK30KKworCit2b2lkCit4cGNfY29ubmVjdGVkX2NhbGxvdXQoc3RydWN0IHhwY19jaGFubmVsICpjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCisJLyogbGV0IHRoZSByZWdpc3RlcmVyIGtub3cgdGhhdCBhIGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQgKi8KKworCWlmIChjaC0+ZnVuYyAhPSBOVUxMKSB7CisJCWRldl9kYmcoeHBjX2NoYW4sICJjaC0+ZnVuYygpIGNhbGxlZCwgcmVhc29uPXhwY0Nvbm5lY3RlZCwgIgorCQkJInBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CisKKwkJY2gtPmZ1bmMoeHBjQ29ubmVjdGVkLCBjaC0+cGFydGlkLCBjaC0+bnVtYmVyLAorCQkJCSh2b2lkICopICh1NjQpIGNoLT5sb2NhbF9uZW50cmllcywgY2gtPmtleSk7CisKKwkJZGV2X2RiZyh4cGNfY2hhbiwgImNoLT5mdW5jKCkgcmV0dXJuZWQsIHJlYXNvbj14cGNDb25uZWN0ZWQsICIKKwkJCSJwYXJ0aWQ9JWQsIGNoYW5uZWw9JWRcbiIsIGNoLT5wYXJ0aWQsIGNoLT5udW1iZXIpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKKwljaC0+ZmxhZ3MgfD0gWFBDX0NfQ09OTkVDVENBTExPVVQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7Cit9CisKKworLyoKKyAqIENhbGxlZCBieSBYUCBhdCB0aGUgdGltZSBvZiBjaGFubmVsIGNvbm5lY3Rpb24gdW5yZWdpc3RyYXRpb24gdG8gY2F1c2UKKyAqIFhQQyB0byB0ZWFyZG93biBhbGwgY3VycmVudCBjb25uZWN0aW9ucyBmb3IgdGhlIHNwZWNpZmllZCBjaGFubmVsLgorICoKKyAqIEJlZm9yZSByZXR1cm5pbmcgeHBjX2luaXRpYXRlX2Rpc2Nvbm5lY3QoKSB3aWxsIHdhaXQgdW50aWwgYWxsIGNvbm5lY3Rpb25zCisgKiBvbiB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgaGF2ZSBiZWVuIGNsb3NlZC90b3JuZG93bi4gU28gdGhlIGNhbGxlciBjYW4gYmUKKyAqIGFzc3VyZWQgdGhhdCB0aGV5IHdpbGwgbm90IGJlIHJlY2VpdmluZyBhbnkgbW9yZSBjYWxsb3V0cyBmcm9tIFhQQyB0byB0aGUKKyAqIGZ1bmN0aW9uIHRoZXkgcmVnaXN0ZXJlZCB2aWEgeHBjX2Nvbm5lY3QoKS4KKyAqCisgKiBBcmd1bWVudHM6CisgKgorICoJY2hfbnVtYmVyIC0gY2hhbm5lbCAjIHRvIHVucmVnaXN0ZXIuCisgKi8KK3ZvaWQKK3hwY19pbml0aWF0ZV9kaXNjb25uZWN0KGludCBjaF9udW1iZXIpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJcGFydGlkX3QgcGFydGlkOworCXN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0OworCXN0cnVjdCB4cGNfY2hhbm5lbCAqY2g7CisKKworCURCVUdfT04oY2hfbnVtYmVyIDwgMCB8fCBjaF9udW1iZXIgPj0gWFBDX05DSEFOTkVMUyk7CisKKwkvKiBpbml0aWF0ZSB0aGUgY2hhbm5lbCBkaXNjb25uZWN0IGZvciBldmVyeSBhY3RpdmUgcGFydGl0aW9uICovCisJZm9yIChwYXJ0aWQgPSAxOyBwYXJ0aWQgPCBYUF9NQVhfUEFSVElUSU9OUzsgcGFydGlkKyspIHsKKwkJcGFydCA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdOworCisJCWlmICh4cGNfcGFydF9yZWYocGFydCkpIHsKKwkJCWNoID0gJnBhcnQtPmNoYW5uZWxzW2NoX251bWJlcl07CisJCQl4cGNfbXNncXVldWVfcmVmKGNoKTsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCisJCQlYUENfRElTQ09OTkVDVF9DSEFOTkVMKGNoLCB4cGNVbnJlZ2lzdGVyaW5nLAorCQkJCQkJCQkmaXJxX2ZsYWdzKTsKKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisKKwkJCXhwY19tc2dxdWV1ZV9kZXJlZihjaCk7CisJCQl4cGNfcGFydF9kZXJlZihwYXJ0KTsKKwkJfQorCX0KKworCXhwY19kaXNjb25uZWN0X3dhaXQoY2hfbnVtYmVyKTsKK30KKworCisvKgorICogVG8gZGlzY29ubmVjdCBhIGNoYW5uZWwsIGFuZCByZWZsZWN0IGl0IGJhY2sgdG8gYWxsIHdobyBtYXkgYmUgd2FpdGluZy4KKyAqCisgKiA+Pj4gQW4gT1BFTiBpcyBub3QgYWxsb3dlZCB1bnRpbCBYUENfQ19ESVNDT05ORUNUSU5HIGlzIGNsZWFyZWQgYnkKKyAqID4+PiB4cGNfZnJlZV9tc2dxdWV1ZXMoKS4KKyAqCisgKiBUSEUgQ0hBTk5FTCBJUyBUTyBCRSBMT0NLRUQgQlkgVEhFIENBTExFUiBBTkQgV0lMTCBSRU1BSU4gTE9DS0VEIFVQT04gUkVUVVJOLgorICovCit2b2lkCit4cGNfZGlzY29ubmVjdF9jaGFubmVsKGNvbnN0IGludCBsaW5lLCBzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLAorCQkJZW51bSB4cGNfcmV0dmFsIHJlYXNvbiwgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKQoreworCXUzMiBmbGFnczsKKworCisJREJVR19PTighc3Bpbl9pc19sb2NrZWQoJmNoLT5sb2NrKSk7CisKKwlpZiAoY2gtPmZsYWdzICYgKFhQQ19DX0RJU0NPTk5FQ1RJTkcgfCBYUENfQ19ESVNDT05ORUNURUQpKSB7CisJCXJldHVybjsKKwl9CisJREJVR19PTighKGNoLT5mbGFncyAmIChYUENfQ19DT05ORUNUSU5HIHwgWFBDX0NfQ09OTkVDVEVEKSkpOworCisJZGV2X2RiZyh4cGNfY2hhbiwgInJlYXNvbj0lZCwgbGluZT0lZCwgcGFydGlkPSVkLCBjaGFubmVsPSVkXG4iLAorCQlyZWFzb24sIGxpbmUsIGNoLT5wYXJ0aWQsIGNoLT5udW1iZXIpOworCisJWFBDX1NFVF9SRUFTT04oY2gsIHJlYXNvbiwgbGluZSk7CisKKwlmbGFncyA9IGNoLT5mbGFnczsKKwkvKiBzb21lIG9mIHRoZXNlIG1heSBub3QgaGF2ZSBiZWVuIHNldCAqLworCWNoLT5mbGFncyAmPSB+KFhQQ19DX09QRU5SRVFVRVNUIHwgWFBDX0NfT1BFTlJFUExZIHwKKwkJCVhQQ19DX1JPUEVOUkVRVUVTVCB8IFhQQ19DX1JPUEVOUkVQTFkgfAorCQkJWFBDX0NfQ09OTkVDVElORyB8IFhQQ19DX0NPTk5FQ1RFRCk7CisKKwljaC0+ZmxhZ3MgfD0gKFhQQ19DX0NMT1NFUkVRVUVTVCB8IFhQQ19DX0RJU0NPTk5FQ1RJTkcpOworCXhwY19JUElfc2VuZF9jbG9zZXJlcXVlc3QoY2gsIGlycV9mbGFncyk7CisKKwlpZiAoZmxhZ3MgJiBYUENfQ19DT05ORUNURUQpIHsKKwkJY2gtPmZsYWdzIHw9IFhQQ19DX1dBU0NPTk5FQ1RFRDsKKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJmNoLT5rdGhyZWFkc19pZGxlKSA+IDApIHsKKwkJLyogd2FrZSBhbGwgaWRsZSBrdGhyZWFkcyBzbyB0aGV5IGNhbiBleGl0ICovCisJCXdha2VfdXBfYWxsKCZjaC0+aWRsZV93cSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssICppcnFfZmxhZ3MpOworCisKKwkvKiB3YWtlIHRob3NlIHdhaXRpbmcgdG8gYWxsb2NhdGUgYW4gZW50cnkgZnJvbSB0aGUgbG9jYWwgbXNnIHF1ZXVlICovCisKKwlpZiAoYXRvbWljX3JlYWQoJmNoLT5uX29uX21zZ19hbGxvY2F0ZV93cSkgPiAwKSB7CisJCXdha2VfdXAoJmNoLT5tc2dfYWxsb2NhdGVfd3EpOworCX0KKworCS8qIHdha2UgdGhvc2Ugd2FpdGluZyBmb3Igbm90aWZ5IGNvbXBsZXRpb24gKi8KKworCWlmIChhdG9taWNfcmVhZCgmY2gtPm5fdG9fbm90aWZ5KSA+IDApIHsKKwkJeHBjX25vdGlmeV9zZW5kZXJzKGNoLCByZWFzb24sIGNoLT53X2xvY2FsX0dQLnB1dCk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCAqaXJxX2ZsYWdzKTsKK30KKworCit2b2lkCit4cGNfZGlzY29ubmVjdGVkX2NhbGxvdXQoc3RydWN0IHhwY19jaGFubmVsICpjaCkKK3sKKwkvKgorCSAqIExldCB0aGUgY2hhbm5lbCdzIHJlZ2lzdGVyZXIga25vdyB0aGF0IHRoZSBjaGFubmVsIGlzIG5vdworCSAqIGRpc2Nvbm5lY3RlZC4gV2UgZG9uJ3Qgd2FudCB0byBkbyB0aGlzIGlmIHRoZSByZWdpc3RlcmVyIHdhcyBuZXZlcgorCSAqIGluZm9ybWVkIG9mIGEgY29ubmVjdGlvbiBiZWluZyBtYWRlLCB1bmxlc3MgdGhlIGRpc2Nvbm5lY3Qgd2FzIGZvcgorCSAqIGFibm9ybWFsIHJlYXNvbnMuCisJICovCisKKwlpZiAoY2gtPmZ1bmMgIT0gTlVMTCkgeworCQlkZXZfZGJnKHhwY19jaGFuLCAiY2gtPmZ1bmMoKSBjYWxsZWQsIHJlYXNvbj0lZCwgcGFydGlkPSVkLCAiCisJCQkiY2hhbm5lbD0lZFxuIiwgY2gtPnJlYXNvbiwgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CisKKwkJY2gtPmZ1bmMoY2gtPnJlYXNvbiwgY2gtPnBhcnRpZCwgY2gtPm51bWJlciwgTlVMTCwgY2gtPmtleSk7CisKKwkJZGV2X2RiZyh4cGNfY2hhbiwgImNoLT5mdW5jKCkgcmV0dXJuZWQsIHJlYXNvbj0lZCwgcGFydGlkPSVkLCAiCisJCQkiY2hhbm5lbD0lZFxuIiwgY2gtPnJlYXNvbiwgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CisJfQorfQorCisKKy8qCisgKiBXYWl0IGZvciBhIG1lc3NhZ2UgZW50cnkgdG8gYmVjb21lIGF2YWlsYWJsZSBmb3IgdGhlIHNwZWNpZmllZCBjaGFubmVsLAorICogYnV0IGRvbid0IHdhaXQgYW55IGxvbmdlciB0aGFuIDEgamlmZnkuCisgKi8KK3N0YXRpYyBlbnVtIHhwY19yZXR2YWwKK3hwY19hbGxvY2F0ZV9tc2dfd2FpdChzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoKQoreworCWVudW0geHBjX3JldHZhbCByZXQ7CisKKworCWlmIChjaC0+ZmxhZ3MgJiBYUENfQ19ESVNDT05ORUNUSU5HKSB7CisJCURCVUdfT04oY2gtPnJlYXNvbiA9PSB4cGNJbnRlcnJ1cHRlZCk7ICAvLyA+Pj4gSXMgdGhpcyB0cnVlPworCQlyZXR1cm4gY2gtPnJlYXNvbjsKKwl9CisKKwlhdG9taWNfaW5jKCZjaC0+bl9vbl9tc2dfYWxsb2NhdGVfd3EpOworCXJldCA9IGludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmY2gtPm1zZ19hbGxvY2F0ZV93cSwgMSk7CisJYXRvbWljX2RlYygmY2gtPm5fb25fbXNnX2FsbG9jYXRlX3dxKTsKKworCWlmIChjaC0+ZmxhZ3MgJiBYUENfQ19ESVNDT05ORUNUSU5HKSB7CisJCXJldCA9IGNoLT5yZWFzb247CisJCURCVUdfT04oY2gtPnJlYXNvbiA9PSB4cGNJbnRlcnJ1cHRlZCk7ICAvLyA+Pj4gSXMgdGhpcyB0cnVlPworCX0gZWxzZSBpZiAocmV0ID09IDApIHsKKwkJcmV0ID0geHBjVGltZW91dDsKKwl9IGVsc2UgeworCQlyZXQgPSB4cGNJbnRlcnJ1cHRlZDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBBbGxvY2F0ZSBhbiBlbnRyeSBmb3IgYSBtZXNzYWdlIGZyb20gdGhlIG1lc3NhZ2UgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogc3BlY2lmaWVkIGNoYW5uZWwuCisgKi8KK3N0YXRpYyBlbnVtIHhwY19yZXR2YWwKK3hwY19hbGxvY2F0ZV9tc2coc3RydWN0IHhwY19jaGFubmVsICpjaCwgdTMyIGZsYWdzLAorCQkJc3RydWN0IHhwY19tc2cgKiphZGRyZXNzX29mX21zZykKK3sKKwlzdHJ1Y3QgeHBjX21zZyAqbXNnOworCWVudW0geHBjX3JldHZhbCByZXQ7CisJczY0IHB1dDsKKworCisJLyogdGhpcyByZWZlcmVuY2Ugd2lsbCBiZSBkcm9wcGVkIGluIHhwY19zZW5kX21zZygpICovCisJeHBjX21zZ3F1ZXVlX3JlZihjaCk7CisKKwlpZiAoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVElORykgeworCQl4cGNfbXNncXVldWVfZGVyZWYoY2gpOworCQlyZXR1cm4gY2gtPnJlYXNvbjsKKwl9CisJaWYgKCEoY2gtPmZsYWdzICYgWFBDX0NfQ09OTkVDVEVEKSkgeworCQl4cGNfbXNncXVldWVfZGVyZWYoY2gpOworCQlyZXR1cm4geHBjTm90Q29ubmVjdGVkOworCX0KKworCisJLyoKKwkgKiBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIG1lc3NhZ2UgZW50cnkgZnJvbSB0aGUgbG9jYWwgbWVzc2FnZSBxdWV1ZS4KKwkgKiBJZiBub25lIGFyZSBhdmFpbGFibGUsIHdlJ2xsIG1ha2Ugc3VyZSB0aGF0IHdlIGdyYWIgdGhlIGxhdGVzdAorCSAqIEdQIHZhbHVlcy4KKwkgKi8KKwlyZXQgPSB4cGNUaW1lb3V0OworCisJd2hpbGUgKDEpIHsKKworCQlwdXQgPSAodm9sYXRpbGUgczY0KSBjaC0+d19sb2NhbF9HUC5wdXQ7CisJCWlmIChwdXQgLSAodm9sYXRpbGUgczY0KSBjaC0+d19yZW1vdGVfR1AuZ2V0IDwKKwkJCQkJCQljaC0+bG9jYWxfbmVudHJpZXMpIHsKKworCQkJLyogVGhlcmUgYXJlIGF2YWlsYWJsZSBtZXNzYWdlIGVudHJpZXMuIFdlIG5lZWQgdG8gdHJ5CisJCQkgKiB0byBzZWN1cmUgb25lIGZvciBvdXJzZWx2ZXMuIFdlJ2xsIGRvIHRoaXMgYnkgdHJ5aW5nCisJCQkgKiB0byBpbmNyZW1lbnQgd19sb2NhbF9HUC5wdXQgYXMgbG9uZyBhcyBzb21lb25lIGVsc2UKKwkJCSAqIGRvZXNuJ3QgYmVhdCB1cyB0byBpdC4gSWYgdGhleSBkbywgd2UnbGwgaGF2ZSB0bworCQkJICogdHJ5IGFnYWluLgorCQkgCSAqLworCQkJaWYgKGNtcHhjaGcoJmNoLT53X2xvY2FsX0dQLnB1dCwgcHV0LCBwdXQgKyAxKSA9PQorCQkJCQkJCQkJcHV0KSB7CisJCQkJLyogd2UgZ290IHRoZSBlbnRyeSByZWZlcmVuY2VkIGJ5IHB1dCAqLworCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CS8qIHRyeSBhZ2FpbiAqLworCQl9CisKKworCQkvKgorCQkgKiBUaGVyZSBhcmVuJ3QgYW55IGF2YWlsYWJsZSBtc2cgZW50cmllcyBhdCB0aGlzIHRpbWUuCisJCSAqCisJCSAqIEluIHdhaXRpbmcgZm9yIGEgbWVzc2FnZSBlbnRyeSB0byBiZWNvbWUgYXZhaWxhYmxlLAorCQkgKiB3ZSBzZXQgYSB0aW1lb3V0IGluIGNhc2UgdGhlIG90aGVyIHNpZGUgaXMgbm90CisJCSAqIHNlbmRpbmcgY29tcGxldGlvbiBJUElzLiBUaGlzIGxldHMgdXMgZmFrZSBhbiBJUEkKKwkJICogdGhhdCB3aWxsIGNhdXNlIHRoZSBJUEkgaGFuZGxlciB0byBmZXRjaCB0aGUgbGF0ZXN0CisJCSAqIEdQIHZhbHVlcyBhcyBpZiBhbiBJUEkgd2FzIHNlbnQgYnkgdGhlIG90aGVyIHNpZGUuCisJCSAqLworCQlpZiAocmV0ID09IHhwY1RpbWVvdXQpIHsKKwkJCXhwY19JUElfc2VuZF9sb2NhbF9tc2dyZXF1ZXN0KGNoKTsKKwkJfQorCisJCWlmIChmbGFncyAmIFhQQ19OT1dBSVQpIHsKKwkJCXhwY19tc2dxdWV1ZV9kZXJlZihjaCk7CisJCQlyZXR1cm4geHBjTm9XYWl0OworCQl9CisKKwkJcmV0ID0geHBjX2FsbG9jYXRlX21zZ193YWl0KGNoKTsKKwkJaWYgKHJldCAhPSB4cGNJbnRlcnJ1cHRlZCAmJiByZXQgIT0geHBjVGltZW91dCkgeworCQkJeHBjX21zZ3F1ZXVlX2RlcmVmKGNoKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKworCS8qIGdldCB0aGUgbWVzc2FnZSdzIGFkZHJlc3MgYW5kIGluaXRpYWxpemUgaXQgKi8KKwltc2cgPSAoc3RydWN0IHhwY19tc2cgKikgKCh1NjQpIGNoLT5sb2NhbF9tc2dxdWV1ZSArCisJCQkJKHB1dCAlIGNoLT5sb2NhbF9uZW50cmllcykgKiBjaC0+bXNnX3NpemUpOworCisKKwlEQlVHX09OKG1zZy0+ZmxhZ3MgIT0gMCk7CisJbXNnLT5udW1iZXIgPSBwdXQ7CisKKwlkZXZfZGJnKHhwY19jaGFuLCAid19sb2NhbF9HUC5wdXQgY2hhbmdlZCB0byAlbGQ7IG1zZz0weCVwLCAiCisJCSJtc2dfbnVtYmVyPSVsZCwgcGFydGlkPSVkLCBjaGFubmVsPSVkXG4iLCBwdXQgKyAxLAorCQkodm9pZCAqKSBtc2csIG1zZy0+bnVtYmVyLCBjaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKKworCSphZGRyZXNzX29mX21zZyA9IG1zZzsKKworCXJldHVybiB4cGNTdWNjZXNzOworfQorCisKKy8qCisgKiBBbGxvY2F0ZSBhbiBlbnRyeSBmb3IgYSBtZXNzYWdlIGZyb20gdGhlIG1lc3NhZ2UgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogc3BlY2lmaWVkIGNoYW5uZWwuIE5PVEUgdGhhdCB0aGlzIHJvdXRpbmUgY2FuIHNsZWVwIHdhaXRpbmcgZm9yIGEgbWVzc2FnZQorICogZW50cnkgdG8gYmVjb21lIGF2YWlsYWJsZS4gVG8gbm90IHNsZWVwLCBwYXNzIGluIHRoZSBYUENfTk9XQUlUIGZsYWcuCisgKgorICogQXJndW1lbnRzOgorICoKKyAqCXBhcnRpZCAtIElEIG9mIHBhcnRpdGlvbiB0byB3aGljaCB0aGUgY2hhbm5lbCBpcyBjb25uZWN0ZWQuCisgKgljaF9udW1iZXIgLSBjaGFubmVsICMuCisgKglmbGFncyAtIHNlZSB4cGMuaCBmb3IgdmFsaWQgZmxhZ3MuCisgKglwYXlsb2FkIC0gYWRkcmVzcyBvZiB0aGUgYWxsb2NhdGVkIHBheWxvYWQgYXJlYSBwb2ludGVyIChmaWxsZWQgaW4gb24KKyAqIAkgICAgICAgICAgcmV0dXJuKSBpbiB3aGljaCB0aGUgdXNlci1kZWZpbmVkIG1lc3NhZ2UgaXMgY29uc3RydWN0ZWQuCisgKi8KK2VudW0geHBjX3JldHZhbAoreHBjX2luaXRpYXRlX2FsbG9jYXRlKHBhcnRpZF90IHBhcnRpZCwgaW50IGNoX251bWJlciwgdTMyIGZsYWdzLCB2b2lkICoqcGF5bG9hZCkKK3sKKwlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdOworCWVudW0geHBjX3JldHZhbCByZXQgPSB4cGNVbmtub3duUmVhc29uOworCXN0cnVjdCB4cGNfbXNnICptc2c7CisKKworCURCVUdfT04ocGFydGlkIDw9IDAgfHwgcGFydGlkID49IFhQX01BWF9QQVJUSVRJT05TKTsKKwlEQlVHX09OKGNoX251bWJlciA8IDAgfHwgY2hfbnVtYmVyID49IHBhcnQtPm5jaGFubmVscyk7CisKKwkqcGF5bG9hZCA9IE5VTEw7CisKKwlpZiAoeHBjX3BhcnRfcmVmKHBhcnQpKSB7CisJCXJldCA9IHhwY19hbGxvY2F0ZV9tc2coJnBhcnQtPmNoYW5uZWxzW2NoX251bWJlcl0sIGZsYWdzLCAmbXNnKTsKKwkJeHBjX3BhcnRfZGVyZWYocGFydCk7CisKKwkJaWYgKG1zZyAhPSBOVUxMKSB7CisJCQkqcGF5bG9hZCA9ICZtc2ctPnBheWxvYWQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBOb3cgd2UgYWN0dWFsbHkgc2VuZCB0aGUgbWVzc2FnZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgc2VudCBieSBhZHZhbmNpbmcKKyAqIHRoZSBsb2NhbCBtZXNzYWdlIHF1ZXVlJ3MgUHV0IHZhbHVlIGFuZCB0aGVuIHNlbmQgYW4gSVBJIHRvIHRoZSByZWNpcGllbnQKKyAqIHBhcnRpdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK3hwY19zZW5kX21zZ3Moc3RydWN0IHhwY19jaGFubmVsICpjaCwgczY0IGluaXRpYWxfcHV0KQoreworCXN0cnVjdCB4cGNfbXNnICptc2c7CisJczY0IHB1dCA9IGluaXRpYWxfcHV0ICsgMTsKKwlpbnQgc2VuZF9JUEkgPSAwOworCisKKwl3aGlsZSAoMSkgeworCisJCXdoaWxlICgxKSB7CisJCQlpZiAocHV0ID09ICh2b2xhdGlsZSBzNjQpIGNoLT53X2xvY2FsX0dQLnB1dCkgeworCQkJCWJyZWFrOworCQkJfQorCisJCQltc2cgPSAoc3RydWN0IHhwY19tc2cgKikgKCh1NjQpIGNoLT5sb2NhbF9tc2dxdWV1ZSArCisJCQkgICAgICAgKHB1dCAlIGNoLT5sb2NhbF9uZW50cmllcykgKiBjaC0+bXNnX3NpemUpOworCisJCQlpZiAoIShtc2ctPmZsYWdzICYgWFBDX01fUkVBRFkpKSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXB1dCsrOworCQl9CisKKwkJaWYgKHB1dCA9PSBpbml0aWFsX3B1dCkgeworCQkJLyogbm90aGluZydzIGNoYW5nZWQgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNtcHhjaGdfcmVsKCZjaC0+bG9jYWxfR1AtPnB1dCwgaW5pdGlhbF9wdXQsIHB1dCkgIT0KKwkJCQkJCQkJaW5pdGlhbF9wdXQpIHsKKwkJCS8qIHNvbWVvbmUgZWxzZSBiZWF0IHVzIHRvIGl0ICovCisJCQlEQlVHX09OKCh2b2xhdGlsZSBzNjQpIGNoLT5sb2NhbF9HUC0+cHV0IDwgaW5pdGlhbF9wdXQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiB3ZSBqdXN0IHNldCB0aGUgbmV3IHZhbHVlIG9mIGxvY2FsX0dQLT5wdXQgKi8KKworCQlkZXZfZGJnKHhwY19jaGFuLCAibG9jYWxfR1AtPnB1dCBjaGFuZ2VkIHRvICVsZCwgcGFydGlkPSVkLCAiCisJCQkiY2hhbm5lbD0lZFxuIiwgcHV0LCBjaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKKworCQlzZW5kX0lQSSA9IDE7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbWVzc2FnZSByZWZlcmVuY2VkIGJ5CisJCSAqIGxvY2FsX0dQLT5wdXQgaXMgbm90IFhQQ19NX1JFQURZIG9yIHRoYXQgbG9jYWxfR1AtPnB1dAorCQkgKiBlcXVhbHMgd19sb2NhbF9HUC5wdXQsIHNvIHdlJ2xsIGdvIGhhdmUgYSBsb29rLgorCQkgKi8KKwkJaW5pdGlhbF9wdXQgPSBwdXQ7CisJfQorCisJaWYgKHNlbmRfSVBJKSB7CisJCXhwY19JUElfc2VuZF9tc2dyZXF1ZXN0KGNoKTsKKwl9Cit9CisKKworLyoKKyAqIENvbW1vbiBjb2RlIHRoYXQgZG9lcyB0aGUgYWN0dWFsIHNlbmRpbmcgb2YgdGhlIG1lc3NhZ2UgYnkgYWR2YW5jaW5nIHRoZQorICogbG9jYWwgbWVzc2FnZSBxdWV1ZSdzIFB1dCB2YWx1ZSBhbmQgc2VuZHMgYW4gSVBJIHRvIHRoZSBwYXJ0aXRpb24gdGhlCisgKiBtZXNzYWdlIGlzIGJlaW5nIHNlbnQgdG8uCisgKi8KK3N0YXRpYyBlbnVtIHhwY19yZXR2YWwKK3hwY19zZW5kX21zZyhzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLCBzdHJ1Y3QgeHBjX21zZyAqbXNnLCB1OCBub3RpZnlfdHlwZSwKKwkJCXhwY19ub3RpZnlfZnVuYyBmdW5jLCB2b2lkICprZXkpCit7CisJZW51bSB4cGNfcmV0dmFsIHJldCA9IHhwY1N1Y2Nlc3M7CisJc3RydWN0IHhwY19ub3RpZnkgKm5vdGlmeSA9IE5VTEw7ICAgLy8gPj4+IHRvIGtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5ISEKKwlzNjQgcHV0LCBtc2dfbnVtYmVyID0gbXNnLT5udW1iZXI7CisKKworCURCVUdfT04obm90aWZ5X3R5cGUgPT0gWFBDX05fQ0FMTCAmJiBmdW5jID09IE5VTEwpOworCURCVUdfT04oKCgodTY0KSBtc2cgLSAodTY0KSBjaC0+bG9jYWxfbXNncXVldWUpIC8gY2gtPm1zZ19zaXplKSAhPQorCQkJCQltc2dfbnVtYmVyICUgY2gtPmxvY2FsX25lbnRyaWVzKTsKKwlEQlVHX09OKG1zZy0+ZmxhZ3MgJiBYUENfTV9SRUFEWSk7CisKKwlpZiAoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVElORykgeworCQkvKiBkcm9wIHRoZSByZWZlcmVuY2UgZ3JhYmJlZCBpbiB4cGNfYWxsb2NhdGVfbXNnKCkgKi8KKwkJeHBjX21zZ3F1ZXVlX2RlcmVmKGNoKTsKKwkJcmV0dXJuIGNoLT5yZWFzb247CisJfQorCisJaWYgKG5vdGlmeV90eXBlICE9IDApIHsKKwkJLyoKKwkJICogVGVsbCB0aGUgcmVtb3RlIHNpZGUgdG8gc2VuZCBhbiBBQ0sgaW50ZXJydXB0IHdoZW4gdGhlCisJCSAqIG1lc3NhZ2UgaGFzIGJlZW4gZGVsaXZlcmVkLgorCQkgKi8KKwkJbXNnLT5mbGFncyB8PSBYUENfTV9JTlRFUlJVUFQ7CisKKwkJYXRvbWljX2luYygmY2gtPm5fdG9fbm90aWZ5KTsKKworCQlub3RpZnkgPSAmY2gtPm5vdGlmeV9xdWV1ZVttc2dfbnVtYmVyICUgY2gtPmxvY2FsX25lbnRyaWVzXTsKKwkJbm90aWZ5LT5mdW5jID0gZnVuYzsKKwkJbm90aWZ5LT5rZXkgPSBrZXk7CisJCSh2b2xhdGlsZSB1OCkgbm90aWZ5LT50eXBlID0gbm90aWZ5X3R5cGU7CisKKwkJLy8gPj4+IGlzIGEgbWIoKSBuZWVkZWQgaGVyZT8KKworCQlpZiAoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVElORykgeworCQkJLyoKKwkJCSAqIEFuIGVycm9yIG9jY3VycmVkIGJldHdlZW4gb3VyIGxhc3QgZXJyb3IgY2hlY2sgYW5kCisJCQkgKiB0aGlzIG9uZS4gV2Ugd2lsbCB0cnkgdG8gY2xlYXIgdGhlIHR5cGUgZmllbGQgZnJvbQorCQkJICogdGhlIG5vdGlmeSBlbnRyeS4gSWYgd2Ugc3VjY2VlZCB0aGVuCisJCQkgKiB4cGNfZGlzY29ubmVjdF9jaGFubmVsKCkgZGlkbid0IGFscmVhZHkgcHJvY2VzcworCQkJICogdGhlIG5vdGlmeSBlbnRyeS4KKwkJCSAqLworCQkJaWYgKGNtcHhjaGcoJm5vdGlmeS0+dHlwZSwgbm90aWZ5X3R5cGUsIDApID09CisJCQkJCQkJCW5vdGlmeV90eXBlKSB7CisJCQkJYXRvbWljX2RlYygmY2gtPm5fdG9fbm90aWZ5KTsKKwkJCQlyZXQgPSBjaC0+cmVhc29uOworCQkJfQorCisJCQkvKiBkcm9wIHRoZSByZWZlcmVuY2UgZ3JhYmJlZCBpbiB4cGNfYWxsb2NhdGVfbXNnKCkgKi8KKwkJCXhwY19tc2dxdWV1ZV9kZXJlZihjaCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJbXNnLT5mbGFncyB8PSBYUENfTV9SRUFEWTsKKworCS8qCisJICogVGhlIHByZWNlZGluZyBzdG9yZSBvZiBtc2ctPmZsYWdzIG11c3Qgb2NjdXIgYmVmb3JlIHRoZSBmb2xsb3dpbmcKKwkgKiBsb2FkIG9mIGNoLT5sb2NhbF9HUC0+cHV0LgorCSAqLworCW1iKCk7CisKKwkvKiBzZWUgaWYgdGhlIG1lc3NhZ2UgaXMgbmV4dCBpbiBsaW5lIHRvIGJlIHNlbnQsIGlmIHNvIHNlbmQgaXQgKi8KKworCXB1dCA9IGNoLT5sb2NhbF9HUC0+cHV0OworCWlmIChwdXQgPT0gbXNnX251bWJlcikgeworCQl4cGNfc2VuZF9tc2dzKGNoLCBwdXQpOworCX0KKworCS8qIGRyb3AgdGhlIHJlZmVyZW5jZSBncmFiYmVkIGluIHhwY19hbGxvY2F0ZV9tc2coKSAqLworCXhwY19tc2dxdWV1ZV9kZXJlZihjaCk7CisJcmV0dXJuIHJldDsKK30KKworCisvKgorICogU2VuZCBhIG1lc3NhZ2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgdXNpbmcgeHBjX2luaXRpYXRlX2FsbG9jYXRlKCkgb24gdGhlCisgKiBzcGVjaWZpZWQgY2hhbm5lbCBjb25uZWN0ZWQgdG8gdGhlIHNwZWNpZmllZCBwYXJ0aXRpb24uCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgbm90IHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGJlIHJlY2VpdmVkLCBub3Igd2lsbAorICogbm90aWZpY2F0aW9uIGJlIGdpdmVuIHdoZW4gaXQgZG9lcyBoYXBwZW4uIE9uY2UgdGhpcyByb3V0aW5lIGhhcyByZXR1cm5lZAorICogdGhlIG1lc3NhZ2UgZW50cnkgYWxsb2NhdGVkIHZpYSB4cGNfaW5pdGlhdGVfYWxsb2NhdGUoKSBpcyBubyBsb25nZXIKKyAqIGFjY2Vzc2FibGUgdG8gdGhlIGNhbGxlci4KKyAqCisgKiBUaGlzIHJvdXRpbmUsIGFsdGhvdWdoIGNhbGxlZCBieSB1c2VycywgZG9lcyBub3QgY2FsbCB4cGNfcGFydF9yZWYoKSB0bworICogZW5zdXJlIHRoYXQgdGhlIHBhcnRpdGlvbiBpbmZyYXN0cnVjdHVyZSBpcyBpbiBwbGFjZS4gSXQgcmVsaWVzIG9uIHRoZQorICogZmFjdCB0aGF0IHdlIGNhbGxlZCB4cGNfbXNncXVldWVfcmVmKCkgaW4geHBjX2FsbG9jYXRlX21zZygpLgorICoKKyAqIEFyZ3VtZW50czoKKyAqCisgKglwYXJ0aWQgLSBJRCBvZiBwYXJ0aXRpb24gdG8gd2hpY2ggdGhlIGNoYW5uZWwgaXMgY29ubmVjdGVkLgorICoJY2hfbnVtYmVyIC0gY2hhbm5lbCAjIHRvIHNlbmQgbWVzc2FnZSBvbi4KKyAqCXBheWxvYWQgLSBwb2ludGVyIHRvIHRoZSBwYXlsb2FkIGFyZWEgYWxsb2NhdGVkIHZpYQorICoJCQl4cGNfaW5pdGlhdGVfYWxsb2NhdGUoKS4KKyAqLworZW51bSB4cGNfcmV0dmFsCit4cGNfaW5pdGlhdGVfc2VuZChwYXJ0aWRfdCBwYXJ0aWQsIGludCBjaF9udW1iZXIsIHZvaWQgKnBheWxvYWQpCit7CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXTsKKwlzdHJ1Y3QgeHBjX21zZyAqbXNnID0gWFBDX01TR19BRERSRVNTKHBheWxvYWQpOworCWVudW0geHBjX3JldHZhbCByZXQ7CisKKworCWRldl9kYmcoeHBjX2NoYW4sICJtc2c9MHglcCwgcGFydGlkPSVkLCBjaGFubmVsPSVkXG4iLCAodm9pZCAqKSBtc2csCisJCXBhcnRpZCwgY2hfbnVtYmVyKTsKKworCURCVUdfT04ocGFydGlkIDw9IDAgfHwgcGFydGlkID49IFhQX01BWF9QQVJUSVRJT05TKTsKKwlEQlVHX09OKGNoX251bWJlciA8IDAgfHwgY2hfbnVtYmVyID49IHBhcnQtPm5jaGFubmVscyk7CisJREJVR19PTihtc2cgPT0gTlVMTCk7CisKKwlyZXQgPSB4cGNfc2VuZF9tc2coJnBhcnQtPmNoYW5uZWxzW2NoX251bWJlcl0sIG1zZywgMCwgTlVMTCwgTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBTZW5kIGEgbWVzc2FnZSBwcmV2aW91c2x5IGFsbG9jYXRlZCB1c2luZyB4cGNfaW5pdGlhdGVfYWxsb2NhdGUgb24gdGhlCisgKiBzcGVjaWZpZWQgY2hhbm5lbCBjb25uZWN0ZWQgdG8gdGhlIHNwZWNpZmllZCBwYXJ0aXRpb24uCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgbm90IHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGJlIHNlbnQuIE9uY2UgdGhpcyByb3V0aW5lCisgKiBoYXMgcmV0dXJuZWQgdGhlIG1lc3NhZ2UgZW50cnkgYWxsb2NhdGVkIHZpYSB4cGNfaW5pdGlhdGVfYWxsb2NhdGUoKSBpcyBubworICogbG9uZ2VyIGFjY2Vzc2FibGUgdG8gdGhlIGNhbGxlci4KKyAqCisgKiBPbmNlIHRoZSByZW1vdGUgZW5kIG9mIHRoZSBjaGFubmVsIGhhcyByZWNlaXZlZCB0aGUgbWVzc2FnZSwgdGhlIGZ1bmN0aW9uCisgKiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8geHBjX2luaXRpYXRlX3NlbmRfbm90aWZ5KCkgd2lsbCBiZSBjYWxsZWQuIFRoaXMKKyAqIGFsbG93cyB0aGUgc2VuZGVyIHRvIGZyZWUgdXAgb3IgcmUtdXNlIGFueSBidWZmZXJzIHJlZmVyZW5jZWQgYnkgdGhlCisgKiBtZXNzYWdlLCBidXQgZG9lcyBOT1QgbWVhbiB0aGUgbWVzc2FnZSBoYXMgYmVlbiBwcm9jZXNzZWQgYXQgdGhlIHJlbW90ZQorICogZW5kIGJ5IGEgcmVjZWl2ZXIuCisgKgorICogSWYgdGhpcyByb3V0aW5lIHJldHVybnMgYW4gZXJyb3IsIHRoZSBjYWxsZXIncyBmdW5jdGlvbiB3aWxsIE5PVCBiZSBjYWxsZWQuCisgKgorICogVGhpcyByb3V0aW5lLCBhbHRob3VnaCBjYWxsZWQgYnkgdXNlcnMsIGRvZXMgbm90IGNhbGwgeHBjX3BhcnRfcmVmKCkgdG8KKyAqIGVuc3VyZSB0aGF0IHRoZSBwYXJ0aXRpb24gaW5mcmFzdHJ1Y3R1cmUgaXMgaW4gcGxhY2UuIEl0IHJlbGllcyBvbiB0aGUKKyAqIGZhY3QgdGhhdCB3ZSBjYWxsZWQgeHBjX21zZ3F1ZXVlX3JlZigpIGluIHhwY19hbGxvY2F0ZV9tc2coKS4KKyAqCisgKiBBcmd1bWVudHM6CisgKgorICoJcGFydGlkIC0gSUQgb2YgcGFydGl0aW9uIHRvIHdoaWNoIHRoZSBjaGFubmVsIGlzIGNvbm5lY3RlZC4KKyAqCWNoX251bWJlciAtIGNoYW5uZWwgIyB0byBzZW5kIG1lc3NhZ2Ugb24uCisgKglwYXlsb2FkIC0gcG9pbnRlciB0byB0aGUgcGF5bG9hZCBhcmVhIGFsbG9jYXRlZCB2aWEKKyAqCQkJeHBjX2luaXRpYXRlX2FsbG9jYXRlKCkuCisgKglmdW5jIC0gZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24gb2YgbWVzc2FnZQorICoJCSAgcmVjZWlwdC4gVEhJUyBGVU5DVElPTiBNVVNUIEJFIE5PTi1CTE9DS0lORy4KKyAqCWtleSAtIHVzZXItZGVmaW5lZCBrZXkgdG8gYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiB3aGVuIGl0J3MgY2FsbGVkLgorICovCitlbnVtIHhwY19yZXR2YWwKK3hwY19pbml0aWF0ZV9zZW5kX25vdGlmeShwYXJ0aWRfdCBwYXJ0aWQsIGludCBjaF9udW1iZXIsIHZvaWQgKnBheWxvYWQsCisJCQkJeHBjX25vdGlmeV9mdW5jIGZ1bmMsIHZvaWQgKmtleSkKK3sKKwlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdOworCXN0cnVjdCB4cGNfbXNnICptc2cgPSBYUENfTVNHX0FERFJFU1MocGF5bG9hZCk7CisJZW51bSB4cGNfcmV0dmFsIHJldDsKKworCisJZGV2X2RiZyh4cGNfY2hhbiwgIm1zZz0weCVwLCBwYXJ0aWQ9JWQsIGNoYW5uZWw9JWRcbiIsICh2b2lkICopIG1zZywKKwkJcGFydGlkLCBjaF9udW1iZXIpOworCisJREJVR19PTihwYXJ0aWQgPD0gMCB8fCBwYXJ0aWQgPj0gWFBfTUFYX1BBUlRJVElPTlMpOworCURCVUdfT04oY2hfbnVtYmVyIDwgMCB8fCBjaF9udW1iZXIgPj0gcGFydC0+bmNoYW5uZWxzKTsKKwlEQlVHX09OKG1zZyA9PSBOVUxMKTsKKwlEQlVHX09OKGZ1bmMgPT0gTlVMTCk7CisKKwlyZXQgPSB4cGNfc2VuZF9tc2coJnBhcnQtPmNoYW5uZWxzW2NoX251bWJlcl0sIG1zZywgWFBDX05fQ0FMTCwKKwkJCQkJCQkJZnVuYywga2V5KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBzdHJ1Y3QgeHBjX21zZyAqCit4cGNfcHVsbF9yZW1vdGVfbXNnKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsIHM2NCBnZXQpCit7CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbY2gtPnBhcnRpZF07CisJc3RydWN0IHhwY19tc2cgKnJlbW90ZV9tc2csICptc2c7CisJdTMyIG1zZ19pbmRleCwgbm1zZ3M7CisJdTY0IG1zZ19vZmZzZXQ7CisJZW51bSB4cGNfcmV0dmFsIHJldDsKKworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2gtPm1zZ190b19wdWxsX3NlbWEpICE9IDApIHsKKwkJLyogd2Ugd2VyZSBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl3aGlsZSAoZ2V0ID49IGNoLT5uZXh0X21zZ190b19wdWxsKSB7CisKKwkJLyogcHVsbCBhcyBtYW55IG1lc3NhZ2VzIGFzIGFyZSByZWFkeSBhbmQgYWJsZSB0byBiZSBwdWxsZWQgKi8KKworCQltc2dfaW5kZXggPSBjaC0+bmV4dF9tc2dfdG9fcHVsbCAlIGNoLT5yZW1vdGVfbmVudHJpZXM7CisKKwkJREJVR19PTihjaC0+bmV4dF9tc2dfdG9fcHVsbCA+PQorCQkJCQkodm9sYXRpbGUgczY0KSBjaC0+d19yZW1vdGVfR1AucHV0KTsKKwkJbm1zZ3MgPSAgKHZvbGF0aWxlIHM2NCkgY2gtPndfcmVtb3RlX0dQLnB1dCAtCisJCQkJCQljaC0+bmV4dF9tc2dfdG9fcHVsbDsKKwkJaWYgKG1zZ19pbmRleCArIG5tc2dzID4gY2gtPnJlbW90ZV9uZW50cmllcykgeworCQkJLyogaWdub3JlIHRoZSBvbmVzIHRoYXQgd3JhcCB0aGUgbXNnIHF1ZXVlIGZvciBub3cgKi8KKwkJCW5tc2dzID0gY2gtPnJlbW90ZV9uZW50cmllcyAtIG1zZ19pbmRleDsKKwkJfQorCisJCW1zZ19vZmZzZXQgPSBtc2dfaW5kZXggKiBjaC0+bXNnX3NpemU7CisJCW1zZyA9IChzdHJ1Y3QgeHBjX21zZyAqKSAoKHU2NCkgY2gtPnJlbW90ZV9tc2dxdWV1ZSArCisJCQkJCQkJCW1zZ19vZmZzZXQpOworCQlyZW1vdGVfbXNnID0gKHN0cnVjdCB4cGNfbXNnICopIChjaC0+cmVtb3RlX21zZ3F1ZXVlX3BhICsKKwkJCQkJCQkJbXNnX29mZnNldCk7CisKKwkJaWYgKChyZXQgPSB4cGNfcHVsbF9yZW1vdGVfY2FjaGVsaW5lcyhwYXJ0LCBtc2csIHJlbW90ZV9tc2csCisJCQkJbm1zZ3MgKiBjaC0+bXNnX3NpemUpKSAhPSB4cGNTdWNjZXNzKSB7CisKKwkJCWRldl9kYmcoeHBjX2NoYW4sICJmYWlsZWQgdG8gcHVsbCAlZCBtc2dzIHN0YXJ0aW5nIHdpdGgiCisJCQkJIiBtc2cgJWxkIGZyb20gcGFydGl0aW9uICVkLCBjaGFubmVsPSVkLCAiCisJCQkJInJldD0lZFxuIiwgbm1zZ3MsIGNoLT5uZXh0X21zZ190b19wdWxsLAorCQkJCWNoLT5wYXJ0aWQsIGNoLT5udW1iZXIsIHJldCk7CisKKwkJCVhQQ19ERUFDVElWQVRFX1BBUlRJVElPTihwYXJ0LCByZXQpOworCisJCQl1cCgmY2gtPm1zZ190b19wdWxsX3NlbWEpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQltYigpOwkvKiA+Pj4gdGhpcyBtYXkgbm90IGJlIG5lZWRlZCwgd2UncmUgbm90IHN1cmUgKi8KKworCQljaC0+bmV4dF9tc2dfdG9fcHVsbCArPSBubXNnczsKKwl9CisKKwl1cCgmY2gtPm1zZ190b19wdWxsX3NlbWEpOworCisJLyogcmV0dXJuIHRoZSBtZXNzYWdlIHdlIHdlcmUgbG9va2luZyBmb3IgKi8KKwltc2dfb2Zmc2V0ID0gKGdldCAlIGNoLT5yZW1vdGVfbmVudHJpZXMpICogY2gtPm1zZ19zaXplOworCW1zZyA9IChzdHJ1Y3QgeHBjX21zZyAqKSAoKHU2NCkgY2gtPnJlbW90ZV9tc2dxdWV1ZSArIG1zZ19vZmZzZXQpOworCisJcmV0dXJuIG1zZzsKK30KKworCisvKgorICogR2V0IGEgbWVzc2FnZSB0byBiZSBkZWxpdmVyZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeHBjX21zZyAqCit4cGNfZ2V0X2RlbGl2ZXJhYmxlX21zZyhzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoKQoreworCXN0cnVjdCB4cGNfbXNnICptc2cgPSBOVUxMOworCXM2NCBnZXQ7CisKKworCWRvIHsKKwkJaWYgKCh2b2xhdGlsZSB1MzIpIGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkcpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJZ2V0ID0gKHZvbGF0aWxlIHM2NCkgY2gtPndfbG9jYWxfR1AuZ2V0OworCQlpZiAoZ2V0ID09ICh2b2xhdGlsZSBzNjQpIGNoLT53X3JlbW90ZV9HUC5wdXQpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogVGhlcmUgYXJlIG1lc3NhZ2VzIHdhaXRpbmcgdG8gYmUgcHVsbGVkIGFuZCBkZWxpdmVyZWQuCisJCSAqIFdlIG5lZWQgdG8gdHJ5IHRvIHNlY3VyZSBvbmUgZm9yIG91cnNlbHZlcy4gV2UnbGwgZG8gdGhpcworCQkgKiBieSB0cnlpbmcgdG8gaW5jcmVtZW50IHdfbG9jYWxfR1AuZ2V0IGFuZCBob3BlIHRoYXQgbm8gb25lCisJCSAqIGVsc2UgYmVhdHMgdXMgdG8gaXQuIElmIHRoZXkgZG8sIHdlJ2xsIHdlJ2xsIHNpbXBseSBoYXZlCisJCSAqIHRvIHRyeSBhZ2FpbiBmb3IgdGhlIG5leHQgb25lLgorCSAJICovCisKKwkJaWYgKGNtcHhjaGcoJmNoLT53X2xvY2FsX0dQLmdldCwgZ2V0LCBnZXQgKyAxKSA9PSBnZXQpIHsKKwkJCS8qIHdlIGdvdCB0aGUgZW50cnkgcmVmZXJlbmNlZCBieSBnZXQgKi8KKworCQkJZGV2X2RiZyh4cGNfY2hhbiwgIndfbG9jYWxfR1AuZ2V0IGNoYW5nZWQgdG8gJWxkLCAiCisJCQkJInBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwgZ2V0ICsgMSwKKwkJCQljaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKKworCQkJLyogcHVsbCB0aGUgbWVzc2FnZSBmcm9tIHRoZSByZW1vdGUgcGFydGl0aW9uICovCisKKwkJCW1zZyA9IHhwY19wdWxsX3JlbW90ZV9tc2coY2gsIGdldCk7CisKKwkJCURCVUdfT04obXNnICE9IE5VTEwgJiYgbXNnLT5udW1iZXIgIT0gZ2V0KTsKKwkJCURCVUdfT04obXNnICE9IE5VTEwgJiYgKG1zZy0+ZmxhZ3MgJiBYUENfTV9ET05FKSk7CisJCQlEQlVHX09OKG1zZyAhPSBOVUxMICYmICEobXNnLT5mbGFncyAmIFhQQ19NX1JFQURZKSk7CisKKwkJCWJyZWFrOworCQl9CisKKwl9IHdoaWxlICgxKTsKKworCXJldHVybiBtc2c7Cit9CisKKworLyoKKyAqIERlbGl2ZXIgYSBtZXNzYWdlIHRvIGl0cyBpbnRlbmRlZCByZWNpcGllbnQuCisgKi8KK3ZvaWQKK3hwY19kZWxpdmVyX21zZyhzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoKQoreworCXN0cnVjdCB4cGNfbXNnICptc2c7CisKKworCWlmICgobXNnID0geHBjX2dldF9kZWxpdmVyYWJsZV9tc2coY2gpKSAhPSBOVUxMKSB7CisKKwkJLyoKKwkJICogVGhpcyByZWYgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgcGF5bG9hZCBpdHNlbGYgZnJvbSBiZWluZworCQkgKiBmcmVlZCBiZWZvcmUgdGhlIHVzZXIgaXMgZmluaXNoZWQgd2l0aCBpdCwgd2hpY2ggdGhlIHVzZXIKKwkJICogaW5kaWNhdGVzIGJ5IGNhbGxpbmcgeHBjX2luaXRpYXRlX3JlY2VpdmVkKCkuCisJCSAqLworCQl4cGNfbXNncXVldWVfcmVmKGNoKTsKKworCQlhdG9taWNfaW5jKCZjaC0+a3RocmVhZHNfYWN0aXZlKTsKKworCQlpZiAoY2gtPmZ1bmMgIT0gTlVMTCkgeworCQkJZGV2X2RiZyh4cGNfY2hhbiwgImNoLT5mdW5jKCkgY2FsbGVkLCBtc2c9MHglcCwgIgorCQkJCSJtc2dfbnVtYmVyPSVsZCwgcGFydGlkPSVkLCBjaGFubmVsPSVkXG4iLAorCQkJCSh2b2lkICopIG1zZywgbXNnLT5udW1iZXIsIGNoLT5wYXJ0aWQsCisJCQkJY2gtPm51bWJlcik7CisKKwkJCS8qIGRlbGl2ZXIgdGhlIG1lc3NhZ2UgdG8gaXRzIGludGVuZGVkIHJlY2lwaWVudCAqLworCQkJY2gtPmZ1bmMoeHBjTXNnUmVjZWl2ZWQsIGNoLT5wYXJ0aWQsIGNoLT5udW1iZXIsCisJCQkJCSZtc2ctPnBheWxvYWQsIGNoLT5rZXkpOworCisJCQlkZXZfZGJnKHhwY19jaGFuLCAiY2gtPmZ1bmMoKSByZXR1cm5lZCwgbXNnPTB4JXAsICIKKwkJCQkibXNnX251bWJlcj0lbGQsIHBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwKKwkJCQkodm9pZCAqKSBtc2csIG1zZy0+bnVtYmVyLCBjaC0+cGFydGlkLAorCQkJCWNoLT5udW1iZXIpOworCQl9CisKKwkJYXRvbWljX2RlYygmY2gtPmt0aHJlYWRzX2FjdGl2ZSk7CisJfQorfQorCisKKy8qCisgKiBOb3cgd2UgYWN0dWFsbHkgYWNrbm93bGVkZ2UgdGhlIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIGRlbGl2ZXJlZCBhbmQgYWNrJ2QKKyAqIGJ5IGFkdmFuY2luZyB0aGUgY2FjaGVkIHJlbW90ZSBtZXNzYWdlIHF1ZXVlJ3MgR2V0IHZhbHVlIGFuZCBpZiByZXF1ZXN0ZWQKKyAqIHNlbmQgYW4gSVBJIHRvIHRoZSBtZXNzYWdlIHNlbmRlcidzIHBhcnRpdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK3hwY19hY2tub3dsZWRnZV9tc2dzKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsIHM2NCBpbml0aWFsX2dldCwgdTggbXNnX2ZsYWdzKQoreworCXN0cnVjdCB4cGNfbXNnICptc2c7CisJczY0IGdldCA9IGluaXRpYWxfZ2V0ICsgMTsKKwlpbnQgc2VuZF9JUEkgPSAwOworCisKKwl3aGlsZSAoMSkgeworCisJCXdoaWxlICgxKSB7CisJCQlpZiAoZ2V0ID09ICh2b2xhdGlsZSBzNjQpIGNoLT53X2xvY2FsX0dQLmdldCkgeworCQkJCWJyZWFrOworCQkJfQorCisJCQltc2cgPSAoc3RydWN0IHhwY19tc2cgKikgKCh1NjQpIGNoLT5yZW1vdGVfbXNncXVldWUgKworCQkJICAgICAgIChnZXQgJSBjaC0+cmVtb3RlX25lbnRyaWVzKSAqIGNoLT5tc2dfc2l6ZSk7CisKKwkJCWlmICghKG1zZy0+ZmxhZ3MgJiBYUENfTV9ET05FKSkgeworCQkJCWJyZWFrOworCQkJfQorCisJCQltc2dfZmxhZ3MgfD0gbXNnLT5mbGFnczsKKwkJCWdldCsrOworCQl9CisKKwkJaWYgKGdldCA9PSBpbml0aWFsX2dldCkgeworCQkJLyogbm90aGluZydzIGNoYW5nZWQgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNtcHhjaGdfcmVsKCZjaC0+bG9jYWxfR1AtPmdldCwgaW5pdGlhbF9nZXQsIGdldCkgIT0KKwkJCQkJCQkJaW5pdGlhbF9nZXQpIHsKKwkJCS8qIHNvbWVvbmUgZWxzZSBiZWF0IHVzIHRvIGl0ICovCisJCQlEQlVHX09OKCh2b2xhdGlsZSBzNjQpIGNoLT5sb2NhbF9HUC0+Z2V0IDw9CisJCQkJCQkJCWluaXRpYWxfZ2V0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogd2UganVzdCBzZXQgdGhlIG5ldyB2YWx1ZSBvZiBsb2NhbF9HUC0+Z2V0ICovCisKKwkJZGV2X2RiZyh4cGNfY2hhbiwgImxvY2FsX0dQLT5nZXQgY2hhbmdlZCB0byAlbGQsIHBhcnRpZD0lZCwgIgorCQkJImNoYW5uZWw9JWRcbiIsIGdldCwgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CisKKwkJc2VuZF9JUEkgPSAobXNnX2ZsYWdzICYgWFBDX01fSU5URVJSVVBUKTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBtZXNzYWdlIHJlZmVyZW5jZWQgYnkKKwkJICogbG9jYWxfR1AtPmdldCBpcyBub3QgWFBDX01fRE9ORSBvciB0aGF0IGxvY2FsX0dQLT5nZXQKKwkJICogZXF1YWxzIHdfbG9jYWxfR1AuZ2V0LCBzbyB3ZSdsbCBnbyBoYXZlIGEgbG9vay4KKwkJICovCisJCWluaXRpYWxfZ2V0ID0gZ2V0OworCX0KKworCWlmIChzZW5kX0lQSSkgeworCQl4cGNfSVBJX3NlbmRfbXNncmVxdWVzdChjaCk7CisJfQorfQorCisKKy8qCisgKiBBY2tub3dsZWRnZSByZWNlaXB0IG9mIGEgZGVsaXZlcmVkIG1lc3NhZ2UuCisgKgorICogSWYgYSBtZXNzYWdlIGhhcyBYUENfTV9JTlRFUlJVUFQgc2V0LCBzZW5kIGFuIGludGVycnVwdCB0byB0aGUgcGFydGl0aW9uCisgKiB0aGF0IHNlbnQgdGhlIG1lc3NhZ2UuCisgKgorICogVGhpcyBmdW5jdGlvbiwgYWx0aG91Z2ggY2FsbGVkIGJ5IHVzZXJzLCBkb2VzIG5vdCBjYWxsIHhwY19wYXJ0X3JlZigpIHRvCisgKiBlbnN1cmUgdGhhdCB0aGUgcGFydGl0aW9uIGluZnJhc3RydWN0dXJlIGlzIGluIHBsYWNlLiBJdCByZWxpZXMgb24gdGhlCisgKiBmYWN0IHRoYXQgd2UgY2FsbGVkIHhwY19tc2dxdWV1ZV9yZWYoKSBpbiB4cGNfZGVsaXZlcl9tc2coKS4KKyAqCisgKiBBcmd1bWVudHM6CisgKgorICoJcGFydGlkIC0gSUQgb2YgcGFydGl0aW9uIHRvIHdoaWNoIHRoZSBjaGFubmVsIGlzIGNvbm5lY3RlZC4KKyAqCWNoX251bWJlciAtIGNoYW5uZWwgIyBtZXNzYWdlIHJlY2VpdmVkIG9uLgorICoJcGF5bG9hZCAtIHBvaW50ZXIgdG8gdGhlIHBheWxvYWQgYXJlYSBhbGxvY2F0ZWQgdmlhCisgKgkJCXhwY19pbml0aWF0ZV9hbGxvY2F0ZSgpLgorICovCit2b2lkCit4cGNfaW5pdGlhdGVfcmVjZWl2ZWQocGFydGlkX3QgcGFydGlkLCBpbnQgY2hfbnVtYmVyLCB2b2lkICpwYXlsb2FkKQoreworCXN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0ID0gJnhwY19wYXJ0aXRpb25zW3BhcnRpZF07CisJc3RydWN0IHhwY19jaGFubmVsICpjaDsKKwlzdHJ1Y3QgeHBjX21zZyAqbXNnID0gWFBDX01TR19BRERSRVNTKHBheWxvYWQpOworCXM2NCBnZXQsIG1zZ19udW1iZXIgPSBtc2ctPm51bWJlcjsKKworCisJREJVR19PTihwYXJ0aWQgPD0gMCB8fCBwYXJ0aWQgPj0gWFBfTUFYX1BBUlRJVElPTlMpOworCURCVUdfT04oY2hfbnVtYmVyIDwgMCB8fCBjaF9udW1iZXIgPj0gcGFydC0+bmNoYW5uZWxzKTsKKworCWNoID0gJnBhcnQtPmNoYW5uZWxzW2NoX251bWJlcl07CisKKwlkZXZfZGJnKHhwY19jaGFuLCAibXNnPTB4JXAsIG1zZ19udW1iZXI9JWxkLCBwYXJ0aWQ9JWQsIGNoYW5uZWw9JWRcbiIsCisJCSh2b2lkICopIG1zZywgbXNnX251bWJlciwgY2gtPnBhcnRpZCwgY2gtPm51bWJlcik7CisKKwlEQlVHX09OKCgoKHU2NCkgbXNnIC0gKHU2NCkgY2gtPnJlbW90ZV9tc2dxdWV1ZSkgLyBjaC0+bXNnX3NpemUpICE9CisJCQkJCW1zZ19udW1iZXIgJSBjaC0+cmVtb3RlX25lbnRyaWVzKTsKKwlEQlVHX09OKG1zZy0+ZmxhZ3MgJiBYUENfTV9ET05FKTsKKworCW1zZy0+ZmxhZ3MgfD0gWFBDX01fRE9ORTsKKworCS8qCisJICogVGhlIHByZWNlZGluZyBzdG9yZSBvZiBtc2ctPmZsYWdzIG11c3Qgb2NjdXIgYmVmb3JlIHRoZSBmb2xsb3dpbmcKKwkgKiBsb2FkIG9mIGNoLT5sb2NhbF9HUC0+Z2V0LgorCSAqLworCW1iKCk7CisKKwkvKgorCSAqIFNlZSBpZiB0aGlzIG1lc3NhZ2UgaXMgbmV4dCBpbiBsaW5lIHRvIGJlIGFja25vd2xlZGdlZCBhcyBoYXZpbmcKKwkgKiBiZWVuIGRlbGl2ZXJlZC4KKwkgKi8KKwlnZXQgPSBjaC0+bG9jYWxfR1AtPmdldDsKKwlpZiAoZ2V0ID09IG1zZ19udW1iZXIpIHsKKwkJeHBjX2Fja25vd2xlZGdlX21zZ3MoY2gsIGdldCwgbXNnLT5mbGFncyk7CisJfQorCisJLyogdGhlIGNhbGwgdG8geHBjX21zZ3F1ZXVlX3JlZigpIHdhcyBkb25lIGJ5IHhwY19kZWxpdmVyX21zZygpICAqLworCXhwY19tc2dxdWV1ZV9kZXJlZihjaCk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzdkZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jCkBAIC0wLDAgKzEsMTA2NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworCisvKgorICogQ3Jvc3MgUGFydGl0aW9uIENvbW11bmljYXRpb24gKFhQQykgc3VwcG9ydCAtIHN0YW5kYXJkIHZlcnNpb24uCisgKgorICoJWFBDIHByb3ZpZGVzIGEgbWVzc2FnZSBwYXNzaW5nIGNhcGFiaWxpdHkgdGhhdCBjcm9zc2VzIHBhcnRpdGlvbgorICoJYm91bmRhcmllcy4gVGhpcyBtb2R1bGUgaXMgbWFkZSB1cCBvZiB0d28gcGFydHM6CisgKgorICoJICAgIHBhcnRpdGlvbglUaGlzIHBhcnQgZGV0ZWN0cyB0aGUgcHJlc2VuY2UvYWJzZW5jZSBvZiBvdGhlcgorICoJCQlwYXJ0aXRpb25zLiBJdCBwcm92aWRlcyBhIGhlYXJ0YmVhdCBhbmQgbW9uaXRvcnMKKyAqCQkJdGhlIGhlYXJ0YmVhdHMgb2Ygb3RoZXIgcGFydGl0aW9ucy4KKyAqCisgKgkgICAgY2hhbm5lbAlUaGlzIHBhcnQgbWFuYWdlcyB0aGUgY2hhbm5lbHMgYW5kIHNlbmRzL3JlY2VpdmVzCisgKgkJCW1lc3NhZ2VzIGFjcm9zcyB0aGVtIHRvL2Zyb20gb3RoZXIgcGFydGl0aW9ucy4KKyAqCisgKglUaGVyZSBhcmUgYSBjb3VwbGUgb2YgYWRkaXRpb25hbCBmdW5jdGlvbnMgcmVzaWRpbmcgaW4gWFAsIHdoaWNoCisgKglwcm92aWRlIGFuIGludGVyZmFjZSB0byBYUEMgZm9yIGl0cyB1c2Vycy4KKyAqCisgKgorICoJQ2F2ZWF0czoKKyAqCisgKgkgIC4gV2UgY3VycmVudGx5IGhhdmUgbm8gd2F5IHRvIGRldGVybWluZSB3aGljaCBuYXNpZCBhbiBJUEkgY2FtZQorICoJICAgIGZyb20uIFRodXMsIHhwY19JUElfc2VuZCgpIGRvZXMgYSByZW1vdGUgQU1PIHdyaXRlIGZvbGxvd2VkIGJ5CisgKgkgICAgYW4gSVBJLiBUaGUgQU1PIGluZGljYXRlcyB3aGVyZSBkYXRhIGlzIHRvIGJlIHB1bGxlZCBmcm9tLCBzbworICoJICAgIGFmdGVyIHRoZSBJUEkgYXJyaXZlcywgdGhlIHJlbW90ZSBwYXJ0aXRpb24gY2hlY2tzIHRoZSBBTU8gd29yZC4KKyAqCSAgICBUaGUgSVBJIGNhbiBhY3R1YWxseSBhcnJpdmUgYmVmb3JlIHRoZSBBTU8gaG93ZXZlciwgc28gb3RoZXIgY29kZQorICoJICAgIG11c3QgcGVyaW9kaWNhbGx5IGNoZWNrIGZvciB0aGlzIGNhc2UuIEFsc28sIHJlbW90ZSBBTU8gb3BlcmF0aW9ucworICoJICAgIGRvIG5vdCByZWxpYWJseSB0aW1lIG91dC4gVGh1cyB3ZSBkbyBhIHJlbW90ZSBQSU8gcmVhZCBzb2xlbHkgdG8KKyAqCSAgICBrbm93IHdoZXRoZXIgdGhlIHJlbW90ZSBwYXJ0aXRpb24gaXMgZG93biBhbmQgd2hldGhlciB3ZSBzaG91bGQKKyAqCSAgICBzdG9wIHNlbmRpbmcgSVBJcyB0byBpdC4gVGhpcyByZW1vdGUgUElPIHJlYWQgb3BlcmF0aW9uIGlzIHNldCB1cAorICoJICAgIGluIGEgc3BlY2lhbCBub2ZhdWx0IHJlZ2lvbiBzbyBTQUwga25vd3MgdG8gaWdub3JlIChhbmQgY2xlYW51cCkKKyAqCSAgICBhbnkgZXJyb3JzIGR1ZSB0byB0aGUgcmVtb3RlIEFNTyB3cml0ZSwgUElPIHJlYWQsIGFuZC9vciBQSU8KKyAqCSAgICB3cml0ZSBvcGVyYXRpb25zLgorICoKKyAqCSAgICBJZi93aGVuIG5ldyBoYXJkd2FyZSBzb2x2ZXMgdGhpcyBJUEkgcHJvYmxlbSwgd2Ugc2hvdWxkIGFiYW5kb24KKyAqCSAgICB0aGUgY3VycmVudCBhcHByb2FjaC4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vc24vaW50ci5oPgorI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgInhwYy5oIgorCisKKy8qIGRlZmluZSB0d28gWFBDIGRlYnVnIGRldmljZSBzdHJ1Y3R1cmVzIHRvIGJlIHVzZWQgd2l0aCBkZXZfZGJnKCkgZXQgYWwgKi8KKworc3RydWN0IGRldmljZV9kcml2ZXIgeHBjX2RiZ19uYW1lID0geworCS5uYW1lID0gInhwYyIKK307CisKK3N0cnVjdCBkZXZpY2UgeHBjX3BhcnRfZGJnX3N1Ym5hbWUgPSB7CisJLmJ1c19pZCA9IHswfSwJCS8qIHNldCB0byAicGFydCIgYXQgeHBjX2luaXQoKSB0aW1lICovCisJLmRyaXZlciA9ICZ4cGNfZGJnX25hbWUKK307CisKK3N0cnVjdCBkZXZpY2UgeHBjX2NoYW5fZGJnX3N1Ym5hbWUgPSB7CisJLmJ1c19pZCA9IHswfSwJCS8qIHNldCB0byAiY2hhbiIgYXQgeHBjX2luaXQoKSB0aW1lICovCisJLmRyaXZlciA9ICZ4cGNfZGJnX25hbWUKK307CisKK3N0cnVjdCBkZXZpY2UgKnhwY19wYXJ0ID0gJnhwY19wYXJ0X2RiZ19zdWJuYW1lOworc3RydWN0IGRldmljZSAqeHBjX2NoYW4gPSAmeHBjX2NoYW5fZGJnX3N1Ym5hbWU7CisKKworLyogc3lzdHVuZSByZWxhdGVkIHZhcmlhYmxlcyBmb3IgL3Byb2Mvc3lzIGRpcmVjdG9yaWVzICovCisKK3N0YXRpYyBpbnQgeHBjX2hiX21pbiA9IDE7CitzdGF0aWMgaW50IHhwY19oYl9tYXggPSAxMDsKKworc3RhdGljIGludCB4cGNfaGJfY2hlY2tfbWluID0gMTA7CitzdGF0aWMgaW50IHhwY19oYl9jaGVja19tYXggPSAxMjA7CisKK3N0YXRpYyBjdGxfdGFibGUgeHBjX3N5c194cGNfaGJfZGlyW10gPSB7CisJeworCQkxLAorCQkiaGJfaW50ZXJ2YWwiLAorCQkmeHBjX2hiX2ludGVydmFsLAorCQlzaXplb2YoaW50KSwKKwkJMDY0NCwKKwkJTlVMTCwKKwkJJnByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkmc3lzY3RsX2ludHZlYywKKwkJTlVMTCwKKwkJJnhwY19oYl9taW4sICZ4cGNfaGJfbWF4CisJfSwKKwl7CisJCTIsCisJCSJoYl9jaGVja19pbnRlcnZhbCIsCisJCSZ4cGNfaGJfY2hlY2tfaW50ZXJ2YWwsCisJCXNpemVvZihpbnQpLAorCQkwNjQ0LAorCQlOVUxMLAorCQkmcHJvY19kb2ludHZlY19taW5tYXgsCisJCSZzeXNjdGxfaW50dmVjLAorCQlOVUxMLAorCQkmeHBjX2hiX2NoZWNrX21pbiwgJnhwY19oYl9jaGVja19tYXgKKwl9LAorCXswfQorfTsKK3N0YXRpYyBjdGxfdGFibGUgeHBjX3N5c194cGNfZGlyW10gPSB7CisJeworCQkxLAorCQkiaGIiLAorCQlOVUxMLAorCQkwLAorCQkwNTU1LAorCQl4cGNfc3lzX3hwY19oYl9kaXIKKwl9LAorCXswfQorfTsKK3N0YXRpYyBjdGxfdGFibGUgeHBjX3N5c19kaXJbXSA9IHsKKwl7CisJCTEsCisJCSJ4cGMiLAorCQlOVUxMLAorCQkwLAorCQkwNTU1LAorCQl4cGNfc3lzX3hwY19kaXIKKwl9LAorCXswfQorfTsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqeHBjX3N5c2N0bDsKKworCisvKiAjb2YgSVJRcyByZWNlaXZlZCAqLworc3RhdGljIGF0b21pY190IHhwY19hY3RfSVJRX3JjdmQ7CisKKy8qIElSUSBoYW5kbGVyIG5vdGlmaWVzIHRoaXMgd2FpdCBxdWV1ZSBvbiByZWNlaXB0IG9mIGFuIElSUSAqLworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHhwY19hY3RfSVJRX3dxKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgeHBjX2hiX2NoZWNrX3RpbWVvdXQ7CisKKy8qIHhwY19oYl9jaGVja2VyIHRocmVhZCBleGl0ZWQgbm90aWZpY2F0aW9uICovCitzdGF0aWMgREVDTEFSRV9NVVRFWF9MT0NLRUQoeHBjX2hiX2NoZWNrZXJfZXhpdGVkKTsKKworLyogeHBjX2Rpc2NvdmVyeSB0aHJlYWQgZXhpdGVkIG5vdGlmaWNhdGlvbiAqLworc3RhdGljIERFQ0xBUkVfTVVURVhfTE9DS0VEKHhwY19kaXNjb3ZlcnlfZXhpdGVkKTsKKworCitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgeHBjX2hiX3RpbWVyOworCisKK3N0YXRpYyB2b2lkIHhwY19rdGhyZWFkX3dhaXRtc2dzKHN0cnVjdCB4cGNfcGFydGl0aW9uICosIHN0cnVjdCB4cGNfY2hhbm5lbCAqKTsKKworCisvKgorICogTm90aWZ5IHRoZSBoZWFydGJlYXQgY2hlY2sgdGhyZWFkIHRoYXQgYW4gSVJRIGhhcyBiZWVuIHJlY2VpdmVkLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QKK3hwY19hY3RfSVJRX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlhdG9taWNfaW5jKCZ4cGNfYWN0X0lSUV9yY3ZkKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnhwY19hY3RfSVJRX3dxKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworLyoKKyAqIFRpbWVyIHRvIHByb2R1Y2UgdGhlIGhlYXJ0YmVhdC4gIFRoZSB0aW1lciBzdHJ1Y3R1cmVzIGZ1bmN0aW9uIGlzCisgKiBhbHJlYWR5IHNldCB3aGVuIHRoaXMgaXMgaW5pdGlhbGx5IGNhbGxlZC4gIEEgdHVuYWJsZSBpcyB1c2VkIHRvCisgKiBzcGVjaWZ5IHdoZW4gdGhlIG5leHQgdGltZW91dCBzaG91bGQgb2NjdXIuCisgKi8KK3N0YXRpYyB2b2lkCit4cGNfaGJfYmVhdGVyKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJeHBjX3ZhcnMtPmhlYXJ0YmVhdCsrOworCisJaWYgKGppZmZpZXMgPj0geHBjX2hiX2NoZWNrX3RpbWVvdXQpIHsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ4cGNfYWN0X0lSUV93cSk7CisJfQorCisJeHBjX2hiX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKHhwY19oYl9pbnRlcnZhbCAqIEhaKTsKKwlhZGRfdGltZXIoJnhwY19oYl90aW1lcik7Cit9CisKKworLyoKKyAqIFRoaXMgdGhyZWFkIGlzIHJlc3BvbnNpYmxlIGZvciBuZWFybHkgYWxsIG9mIHRoZSBwYXJ0aXRpb24KKyAqIGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uLgorICovCitzdGF0aWMgaW50Cit4cGNfaGJfY2hlY2tlcih2b2lkICppZ25vcmUpCit7CisJaW50IGxhc3RfSVJRX2NvdW50ID0gMDsKKwlpbnQgbmV3X0lSUV9jb3VudDsKKwlpbnQgZm9yY2VfSVJRPTA7CisKKworCS8qIHRoaXMgdGhyZWFkIHdhcyBtYXJrZWQgYWN0aXZlIGJ5IHhwY19oYl9pbml0KCkgKi8KKworCWRhZW1vbml6ZShYUENfSEJfQ0hFQ0tfVEhSRUFEX05BTUUpOworCisJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShYUENfSEJfQ0hFQ0tfQ1BVKSk7CisKKwl4cGNfaGJfY2hlY2tfdGltZW91dCA9IGppZmZpZXMgKyAoeHBjX2hiX2NoZWNrX2ludGVydmFsICogSFopOworCisJd2hpbGUgKCEodm9sYXRpbGUgaW50KSB4cGNfZXhpdGluZykgeworCisJCS8qIHdhaXQgZm9yIElSUSBvciB0aW1lb3V0ICovCisJCSh2b2lkKSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoeHBjX2FjdF9JUlFfd3EsCisJCQkgICAgKGxhc3RfSVJRX2NvdW50IDwgYXRvbWljX3JlYWQoJnhwY19hY3RfSVJRX3JjdmQpIHx8CisJCQkJCWppZmZpZXMgPj0geHBjX2hiX2NoZWNrX3RpbWVvdXQgfHwKKwkJCQkJCSh2b2xhdGlsZSBpbnQpIHhwY19leGl0aW5nKSk7CisKKwkJZGV2X2RiZyh4cGNfcGFydCwgIndva2UgdXAgd2l0aCAlZCB0aWNrcyByZW07ICVkIElSUXMgaGF2ZSAiCisJCQkiYmVlbiByZWNlaXZlZFxuIiwKKwkJCShpbnQpICh4cGNfaGJfY2hlY2tfdGltZW91dCAtIGppZmZpZXMpLAorCQkJYXRvbWljX3JlYWQoJnhwY19hY3RfSVJRX3JjdmQpIC0gbGFzdF9JUlFfY291bnQpOworCisKKwkJLyogY2hlY2tpbmcgb2YgcmVtb3RlIGhlYXJ0YmVhdHMgaXMgc2tld2VkIGJ5IElSUSBoYW5kbGluZyAqLworCQlpZiAoamlmZmllcyA+PSB4cGNfaGJfY2hlY2tfdGltZW91dCkgeworCQkJZGV2X2RiZyh4cGNfcGFydCwgImNoZWNraW5nIHJlbW90ZSBoZWFydGJlYXRzXG4iKTsKKwkJCXhwY19jaGVja19yZW1vdGVfaGIoKTsKKworCQkJLyoKKwkJCSAqIFdlIG5lZWQgdG8gcGVyaW9kaWNhbGx5IHJlY2hlY2sgdG8gZW5zdXJlIG5vCisJCQkgKiBJUEkvQU1PIHBhaXJzIGhhdmUgYmVlbiBtaXNzZWQuICBUaGF0IGNoZWNrCisJCQkgKiBtdXN0IGFsd2F5cyByZXNldCB4cGNfaGJfY2hlY2tfdGltZW91dC4KKwkJCSAqLworCQkJZm9yY2VfSVJRID0gMTsKKwkJfQorCisKKwkJbmV3X0lSUV9jb3VudCA9IGF0b21pY19yZWFkKCZ4cGNfYWN0X0lSUV9yY3ZkKTsKKwkJaWYgKGxhc3RfSVJRX2NvdW50IDwgbmV3X0lSUV9jb3VudCB8fCBmb3JjZV9JUlEgIT0gMCkgeworCQkJZm9yY2VfSVJRID0gMDsKKworCQkJZGV2X2RiZyh4cGNfcGFydCwgImZvdW5kIGFuIElSUSB0byBwcm9jZXNzOyB3aWxsIGJlICIKKwkJCQkicmVzZXR0aW5nIHhwY19oYl9jaGVja190aW1lb3V0XG4iKTsKKworCQkJbGFzdF9JUlFfY291bnQgKz0geHBjX2lkZW50aWZ5X2FjdF9JUlFfc2VuZGVyKCk7CisJCQlpZiAobGFzdF9JUlFfY291bnQgPCBuZXdfSVJRX2NvdW50KSB7CisJCQkJLyogcmV0cnkgb25jZSB0byBoZWxwIGF2b2lkIG1pc3NpbmcgQU1PICovCisJCQkJKHZvaWQpIHhwY19pZGVudGlmeV9hY3RfSVJRX3NlbmRlcigpOworCQkJfQorCQkJbGFzdF9JUlFfY291bnQgPSBuZXdfSVJRX2NvdW50OworCisJCQl4cGNfaGJfY2hlY2tfdGltZW91dCA9IGppZmZpZXMgKworCQkJCQkgICAoeHBjX2hiX2NoZWNrX2ludGVydmFsICogSFopOworCQl9CisJfQorCisJZGV2X2RiZyh4cGNfcGFydCwgImhlYXJ0YmVhdCBjaGVja2VyIGlzIGV4aXRpbmdcbiIpOworCisKKwkvKiBtYXJrIHRoaXMgdGhyZWFkIGFzIGluYWN0aXZlICovCisJdXAoJnhwY19oYl9jaGVja2VyX2V4aXRlZCk7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFRoaXMgdGhyZWFkIHdpbGwgYXR0ZW1wdCB0byBkaXNjb3ZlciBvdGhlciBwYXJ0aXRpb25zIHRvIGFjdGl2YXRlCisgKiBiYXNlZCBvbiBpbmZvIHByb3ZpZGVkIGJ5IFNBTC4gVGhpcyBuZXcgdGhyZWFkIGlzIHNob3J0IGxpdmVkIGFuZAorICogd2lsbCBleGl0IG9uY2UgZGlzY292ZXJ5IGlzIGNvbXBsZXRlLgorICovCitzdGF0aWMgaW50Cit4cGNfaW5pdGlhdGVfZGlzY292ZXJ5KHZvaWQgKmlnbm9yZSkKK3sKKwlkYWVtb25pemUoWFBDX0RJU0NPVkVSWV9USFJFQURfTkFNRSk7CisKKwl4cGNfZGlzY292ZXJ5KCk7CisKKwlkZXZfZGJnKHhwY19wYXJ0LCAiZGlzY292ZXJ5IHRocmVhZCBpcyBleGl0aW5nXG4iKTsKKworCS8qIG1hcmsgdGhpcyB0aHJlYWQgYXMgaW5hY3RpdmUgKi8KKwl1cCgmeHBjX2Rpc2NvdmVyeV9leGl0ZWQpOworCXJldHVybiAwOworfQorCisKKy8qCisgKiBFc3RhYmxpc2ggZmlyc3QgY29udGFjdCB3aXRoIHRoZSByZW1vdGUgcGFydGl0aXRvbi4gVGhpcyBpbnZvbHZlcyBwdWxsaW5nCisgKiB0aGUgWFBDIHBlciBwYXJ0aXRpb24gdmFyaWFibGVzIGZyb20gdGhlIHJlbW90ZSBwYXJ0aXRpb24gYW5kIHdhaXRpbmcgZm9yCisgKiB0aGUgcmVtb3RlIHBhcnRpdGlvbiB0byBwdWxsIG91cnMuCisgKi8KK3N0YXRpYyBlbnVtIHhwY19yZXR2YWwKK3hwY19tYWtlX2ZpcnN0X2NvbnRhY3Qoc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQpCit7CisJZW51bSB4cGNfcmV0dmFsIHJldDsKKworCisJd2hpbGUgKChyZXQgPSB4cGNfcHVsbF9yZW1vdGVfdmFyc19wYXJ0KHBhcnQpKSAhPSB4cGNTdWNjZXNzKSB7CisJCWlmIChyZXQgIT0geHBjUmV0cnkpIHsKKwkJCVhQQ19ERUFDVElWQVRFX1BBUlRJVElPTihwYXJ0LCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWRldl9kYmcoeHBjX2NoYW4sICJ3YWl0aW5nIHRvIG1ha2UgZmlyc3QgY29udGFjdCB3aXRoICIKKwkJCSJwYXJ0aXRpb24gJWRcbiIsIFhQQ19QQVJUSUQocGFydCkpOworCisJCS8qIHdhaXQgYSAxLzQgb2YgYSBzZWNvbmQgb3Igc28gKi8KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJKHZvaWQpIHNjaGVkdWxlX3RpbWVvdXQoMC4yNSAqIEhaKTsKKworCQlpZiAocGFydC0+YWN0X3N0YXRlID09IFhQQ19QX0RFQUNUSVZBVElORykgeworCQkJcmV0dXJuIHBhcnQtPnJlYXNvbjsKKwkJfQorCX0KKworCXJldHVybiB4cGNfbWFya19wYXJ0aXRpb25fYWN0aXZlKHBhcnQpOworfQorCisKKy8qCisgKiBUaGUgZmlyc3Qga3RocmVhZCBhc3NpZ25lZCB0byBhIG5ld2x5IGFjdGl2YXRlZCBwYXJ0aXRpb24gaXMgdGhlIG9uZQorICogY3JlYXRlZCBieSBYUEMgSEIgd2l0aCB3aGljaCBpdCBjYWxscyB4cGNfcGFydGl0aW9uX3VwKCkuIFhQQyBoYW5ncyBvbiB0bworICogdGhhdCBrdGhyZWFkIHVudGlsIHRoZSBwYXJ0aXRpb24gaXMgYnJvdWdodCBkb3duLCBhdCB3aGljaCB0aW1lIHRoYXQga3RocmVhZAorICogcmV0dXJucyBiYWNrIHRvIFhQQyBIQi4gKFRoZSByZXR1cm4gb2YgdGhhdCBrdGhyZWFkIHdpbGwgc2lnbmlmeSB0byBYUEMgSEIKKyAqIHRoYXQgWFBDIGhhcyBkaXNtYW50bGVkIGFsbCBjb21tdW5pY2F0aW9uIGluZnJhc3RydWN0dXJlIGZvciB0aGUgYXNzb2NpYXRlZAorICogcGFydGl0aW9uLikgVGhpcyBrdGhyZWFkIGJlY29tZXMgdGhlIGNoYW5uZWwgbWFuYWdlciBmb3IgdGhhdCBwYXJ0aXRpb24uCisgKgorICogRWFjaCBhY3RpdmUgcGFydGl0aW9uIGhhcyBhIGNoYW5uZWwgbWFuYWdlciwgd2hvLCBiZXNpZGVzIGNvbm5lY3RpbmcgYW5kCisgKiBkaXNjb25uZWN0aW5nIGNoYW5uZWxzLCB3aWxsIGVuc3VyZSB0aGF0IGVhY2ggb2YgdGhlIHBhcnRpdGlvbidzIGNvbm5lY3RlZAorICogY2hhbm5lbHMgaGFzIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYXNzaWduZWQga3RocmVhZHMgdG8gZ2V0IHRoZSB3b3JrIGRvbmUuCisgKi8KK3N0YXRpYyB2b2lkCit4cGNfY2hhbm5lbF9tZ3Ioc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQpCit7CisJd2hpbGUgKHBhcnQtPmFjdF9zdGF0ZSAhPSBYUENfUF9ERUFDVElWQVRJTkcgfHwKKwkJCQlhdG9taWNfcmVhZCgmcGFydC0+bmNoYW5uZWxzX2FjdGl2ZSkgPiAwKSB7CisKKwkJeHBjX3Byb2Nlc3NfY2hhbm5lbF9hY3Rpdml0eShwYXJ0KTsKKworCisJCS8qCisJCSAqIFdhaXQgdW50aWwgd2UndmUgYmVlbiByZXF1ZXN0ZWQgdG8gYWN0aXZhdGUga3RocmVhZHMgb3IKKwkJICogYWxsIG9mIHRoZSBjaGFubmVsJ3MgbWVzc2FnZSBxdWV1ZXMgaGF2ZSBiZWVuIHRvcm4gZG93biBvcgorCQkgKiBhIHNpZ25hbCBpcyBwZW5kaW5nLgorCQkgKgorCQkgKiBUaGUgY2hhbm5lbF9tZ3JfcmVxdWVzdHMgaXMgc2V0IHRvIDEgYWZ0ZXIgYmVpbmcgYXdha2VuZWQsCisJCSAqIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHRoZSBjaGFubmVsIG1nciBmcm9tIG1ha2luZyBvbmUgcGFzcworCQkgKiB0aHJvdWdoIHRoZSBsb29wIGZvciBlYWNoIHJlcXVlc3QsIHNpbmNlIGhlIHdpbGwKKwkJICogYmUgc2VydmljaW5nIGFsbCB0aGUgcmVxdWVzdHMgaW4gb25lIHBhc3MuIFRoZSByZWFzb24gaXQncworCQkgKiBzZXQgdG8gMSBpbnN0ZWFkIG9mIDAgaXMgc28gdGhhdCBvdGhlciBrdGhyZWFkcyB3aWxsIGtub3cKKwkJICogdGhhdCB0aGUgY2hhbm5lbCBtZ3IgaXMgcnVubmluZyBhbmQgd29uJ3QgYm90aGVyIHRyeWluZyB0bworCQkgKiB3YWtlIGhpbSB1cC4KKwkJICovCisJCWF0b21pY19kZWMoJnBhcnQtPmNoYW5uZWxfbWdyX3JlcXVlc3RzKTsKKwkJKHZvaWQpIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwYXJ0LT5jaGFubmVsX21ncl93cSwKKwkJCQkoYXRvbWljX3JlYWQoJnBhcnQtPmNoYW5uZWxfbWdyX3JlcXVlc3RzKSA+IDAgfHwKKwkJCQkodm9sYXRpbGUgdTY0KSBwYXJ0LT5sb2NhbF9JUElfYW1vICE9IDAgfHwKKwkJCQkoKHZvbGF0aWxlIHU4KSBwYXJ0LT5hY3Rfc3RhdGUgPT0KKwkJCQkJCQlYUENfUF9ERUFDVElWQVRJTkcgJiYKKwkJCQlhdG9taWNfcmVhZCgmcGFydC0+bmNoYW5uZWxzX2FjdGl2ZSkgPT0gMCkpKTsKKwkJYXRvbWljX3NldCgmcGFydC0+Y2hhbm5lbF9tZ3JfcmVxdWVzdHMsIDEpOworCisJCS8vID4+PiBEb2VzIGl0IG5lZWQgdG8gd2FrZXVwIHBlcmlvZGljYWxseSBhcyB3ZWxsPyBJbiBjYXNlIHdlCisJCS8vID4+PiBtaXNjYWxjdWxhdGVkIHRoZSAjb2Yga3RocmVhZHMgdG8gd2FrZXVwIG9yIGNyZWF0ZT8KKwl9Cit9CisKKworLyoKKyAqIFdoZW4gWFBDIEhCIGRldGVybWluZXMgdGhhdCBhIHBhcnRpdGlvbiBoYXMgY29tZSB1cCwgaXQgd2lsbCBjcmVhdGUgYSBuZXcKKyAqIGt0aHJlYWQgYW5kIHRoYXQga3RocmVhZCB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBhdHRlbXB0IHRvIHNldCB1cCB0aGUKKyAqIGJhc2ljIGluZnJhc3RydWN0dXJlIHVzZWQgZm9yIENyb3NzIFBhcnRpdGlvbiBDb21tdW5pY2F0aW9uIHdpdGggdGhlIG5ld2x5CisgKiB1cHBlZCBwYXJ0aXRpb24uCisgKgorICogVGhlIGt0aHJlYWQgdGhhdCB3YXMgY3JlYXRlZCBieSBYUEMgSEIgYW5kIHdoaWNoIHNldHVwIHRoZSBYUEMKKyAqIGluZnJhc3RydWN0dXJlIHdpbGwgcmVtYWluIGFzc2lnbmVkIHRvIHRoZSBwYXJ0aXRpb24gdW50aWwgdGhlIHBhcnRpdGlvbgorICogZ29lcyBkb3duLiBBdCB3aGljaCB0aW1lIHRoZSBrdGhyZWFkIHdpbGwgdGVhcmRvd24gdGhlIFhQQyBpbmZyYXN0cnVjdHVyZQorICogYW5kIHRoZW4gZXhpdC4KKyAqCisgKiBYUEMgSEIgd2lsbCBwdXQgdGhlIHJlbW90ZSBwYXJ0aXRpb24ncyBYUEMgcGVyIHBhcnRpdGlvbiBzcGVjaWZpYyB2YXJpYWJsZXMKKyAqIHBoeXNpY2FsIGFkZHJlc3MgaW50byB4cGNfcGFydGl0aW9uc1twYXJ0aWRdLnJlbW90ZV92YXJzX3BhcnRfcGEgcHJpb3IgdG8KKyAqIGNhbGxpbmcgeHBjX3BhcnRpdGlvbl91cCgpLgorICovCitzdGF0aWMgdm9pZAoreHBjX3BhcnRpdGlvbl91cChzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCkKK3sKKwlEQlVHX09OKHBhcnQtPmNoYW5uZWxzICE9IE5VTEwpOworCisJZGV2X2RiZyh4cGNfY2hhbiwgImFjdGl2YXRpbmcgcGFydGl0aW9uICVkXG4iLCBYUENfUEFSVElEKHBhcnQpKTsKKworCWlmICh4cGNfc2V0dXBfaW5mcmFzdHJ1Y3R1cmUocGFydCkgIT0geHBjU3VjY2VzcykgeworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBUaGUga3RocmVhZCB0aGF0IFhQQyBIQiBjYWxsZWQgdXMgd2l0aCB3aWxsIGJlY29tZSB0aGUKKwkgKiBjaGFubmVsIG1hbmFnZXIgZm9yIHRoaXMgcGFydGl0aW9uLiBJdCB3aWxsIG5vdCByZXR1cm4KKwkgKiBiYWNrIHRvIFhQQyBIQiB1bnRpbCB0aGUgcGFydGl0aW9uJ3MgWFBDIGluZnJhc3RydWN0dXJlCisJICogaGFzIGJlZW4gZGlzbWFudGxlZC4KKwkgKi8KKworCSh2b2lkKSB4cGNfcGFydF9yZWYocGFydCk7CS8qIHRoaXMgd2lsbCBhbHdheXMgc3VjY2VlZCAqLworCisJaWYgKHhwY19tYWtlX2ZpcnN0X2NvbnRhY3QocGFydCkgPT0geHBjU3VjY2VzcykgeworCQl4cGNfY2hhbm5lbF9tZ3IocGFydCk7CisJfQorCisJeHBjX3BhcnRfZGVyZWYocGFydCk7CisKKwl4cGNfdGVhcmRvd25faW5mcmFzdHJ1Y3R1cmUocGFydCk7Cit9CisKKworc3RhdGljIGludAoreHBjX2FjdGl2YXRpbmcodm9pZCAqX19wYXJ0aWQpCit7CisJcGFydGlkX3QgcGFydGlkID0gKHU2NCkgX19wYXJ0aWQ7CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IHNjaGVkX3ByaW9yaXR5OiBNQVhfVVNFUl9SVF9QUklPIC0gMSB9OworCWludCByZXQ7CisKKworCURCVUdfT04ocGFydGlkIDw9IDAgfHwgcGFydGlkID49IFhQX01BWF9QQVJUSVRJT05TKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwYXJ0LT5hY3RfbG9jaywgaXJxX2ZsYWdzKTsKKworCWlmIChwYXJ0LT5hY3Rfc3RhdGUgPT0gWFBDX1BfREVBQ1RJVkFUSU5HKSB7CisJCXBhcnQtPmFjdF9zdGF0ZSA9IFhQQ19QX0lOQUNUSVZFOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwYXJ0LT5hY3RfbG9jaywgaXJxX2ZsYWdzKTsKKwkJcGFydC0+cmVtb3RlX3JwX3BhID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogaW5kaWNhdGUgdGhlIHRocmVhZCBpcyBhY3RpdmF0aW5nICovCisJREJVR19PTihwYXJ0LT5hY3Rfc3RhdGUgIT0gWFBDX1BfQUNUSVZBVElPTl9SRVEpOworCXBhcnQtPmFjdF9zdGF0ZSA9IFhQQ19QX0FDVElWQVRJTkc7CisKKwlYUENfU0VUX1JFQVNPTihwYXJ0LCAwLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwYXJ0LT5hY3RfbG9jaywgaXJxX2ZsYWdzKTsKKworCWRldl9kYmcoeHBjX3BhcnQsICJicmluZ2luZyBwYXJ0aXRpb24gJWQgdXBcbiIsIHBhcnRpZCk7CisKKwlkYWVtb25pemUoInhwYyUwMmQiLCBwYXJ0aWQpOworCisJLyoKKwkgKiBUaGlzIHRocmVhZCBuZWVkcyB0byBydW4gYXQgYSByZWFsdGltZSBwcmlvcml0eSB0byBwcmV2ZW50IGEKKwkgKiBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi4KKwkgKi8KKwlyZXQgPSBzY2hlZF9zZXRzY2hlZHVsZXIoY3VycmVudCwgU0NIRURfRklGTywgJnBhcmFtKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X3dhcm4oeHBjX3BhcnQsICJ1bmFibGUgdG8gc2V0IHBpZCAlZCB0byBhIHJlYWx0aW1lICIKKwkJCSJwcmlvcml0eSwgcmV0PSVkXG4iLCBjdXJyZW50LT5waWQsIHJldCk7CisJfQorCisJLyogYWxsb3cgdGhpcyB0aHJlYWQgYW5kIGl0cyBjaGlsZHJlbiB0byBydW4gb24gYW55IENQVSAqLworCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgQ1BVX01BU0tfQUxMKTsKKworCS8qCisJICogUmVnaXN0ZXIgdGhlIHJlbW90ZSBwYXJ0aXRpb24ncyBBTU9zIHdpdGggU0FMIHNvIGl0IGNhbiBoYW5kbGUKKwkgKiBhbmQgY2xlYW51cCBlcnJvcnMgd2l0aGluIHRoYXQgYWRkcmVzcyByYW5nZSBzaG91bGQgdGhlIHJlbW90ZQorCSAqIHBhcnRpdGlvbiBnbyBkb3duLiBXZSBkb24ndCB1bnJlZ2lzdGVyIHRoaXMgcmFuZ2UgYmVjYXVzZSBpdCBpcworCSAqIGRpZmZpY3VsdCB0byB0ZWxsIHdoZW4gb3V0c3RhbmRpbmcgd3JpdGVzIHRvIHRoZSByZW1vdGUgcGFydGl0aW9uCisJICogYXJlIGZpbmlzaGVkIGFuZCB0aHVzIHdoZW4gaXQgaXMgc2FmZSB0byB1bnJlZ2lzdGVyLiBUaGlzIHNob3VsZAorCSAqIG5vdCByZXN1bHQgaW4gd2FzdGVkIHNwYWNlIGluIHRoZSBTQUwgeHBfYWRkcl9yZWdpb24gdGFibGUgYmVjYXVzZQorCSAqIHdlIHNob3VsZCBnZXQgdGhlIHNhbWUgcGFnZSBmb3IgcmVtb3RlX2Ftb3NfcGFnZV9wYSBhZnRlciBtb2R1bGUKKwkgKiByZWxvYWRzIGFuZCBzeXN0ZW0gcmVib290cy4KKwkgKi8KKwlpZiAoc25fcmVnaXN0ZXJfeHBfYWRkcl9yZWdpb24ocGFydC0+cmVtb3RlX2Ftb3NfcGFnZV9wYSwKKwkJCQkJCQlQQUdFX1NJWkUsIDEpIDwgMCkgeworCQlkZXZfd2Fybih4cGNfcGFydCwgInhwY19wYXJ0aXRpb25fdXAoJWQpIGZhaWxlZCB0byByZWdpc3RlciAiCisJCQkieHBfYWRkciByZWdpb25cbiIsIHBhcnRpZCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBhcnQtPmFjdF9sb2NrLCBpcnFfZmxhZ3MpOworCQlwYXJ0LT5hY3Rfc3RhdGUgPSBYUENfUF9JTkFDVElWRTsKKwkJWFBDX1NFVF9SRUFTT04ocGFydCwgeHBjUGh5c0FkZHJSZWdGYWlsZWQsIF9fTElORV9fKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFydC0+YWN0X2xvY2ssIGlycV9mbGFncyk7CisJCXBhcnQtPnJlbW90ZV9ycF9wYSA9IDA7CisJCXJldHVybiAwOworCX0KKworCVhQQ19BTExPV19IQihwYXJ0aWQsIHhwY192YXJzKTsKKwl4cGNfSVBJX3NlbmRfYWN0aXZhdGVkKHBhcnQpOworCisKKwkvKgorCSAqIHhwY19wYXJ0aXRpb25fdXAoKSBob2xkcyB0aGlzIHRocmVhZCBhbmQgbWFya3MgdGhpcyBwYXJ0aXRpb24gYXMKKwkgKiBYUENfUF9BQ1RJVkUgYnkgY2FsbGluZyB4cGNfaGJfbWFya19hY3RpdmUoKS4KKwkgKi8KKwkodm9pZCkgeHBjX3BhcnRpdGlvbl91cChwYXJ0KTsKKworCXhwY19tYXJrX3BhcnRpdGlvbl9pbmFjdGl2ZShwYXJ0KTsKKworCWlmIChwYXJ0LT5yZWFzb24gPT0geHBjUmVhY3RpdmF0aW5nKSB7CisJCS8qIGludGVycnVwdGluZyBvdXJzZWx2ZXMgcmVzdWx0cyBpbiBhY3RpdmF0aW5nIHBhcnRpdGlvbiAqLworCQl4cGNfSVBJX3NlbmRfcmVhY3RpdmF0ZShwYXJ0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCit2b2lkCit4cGNfYWN0aXZhdGVfcGFydGl0aW9uKHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0KQoreworCXBhcnRpZF90IHBhcnRpZCA9IFhQQ19QQVJUSUQocGFydCk7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJcGlkX3QgcGlkOworCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGFydC0+YWN0X2xvY2ssIGlycV9mbGFncyk7CisKKwlwaWQgPSBrZXJuZWxfdGhyZWFkKHhwY19hY3RpdmF0aW5nLCAodm9pZCAqKSAoKHU2NCkgcGFydGlkKSwgMCk7CisKKwlEQlVHX09OKHBhcnQtPmFjdF9zdGF0ZSAhPSBYUENfUF9JTkFDVElWRSk7CisKKwlpZiAocGlkID4gMCkgeworCQlwYXJ0LT5hY3Rfc3RhdGUgPSBYUENfUF9BQ1RJVkFUSU9OX1JFUTsKKwkJWFBDX1NFVF9SRUFTT04ocGFydCwgeHBjQ2xvbmVLVGhyZWFkLCBfX0xJTkVfXyk7CisJfSBlbHNlIHsKKwkJWFBDX1NFVF9SRUFTT04ocGFydCwgeHBjQ2xvbmVLVGhyZWFkRmFpbGVkLCBfX0xJTkVfXyk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFydC0+YWN0X2xvY2ssIGlycV9mbGFncyk7Cit9CisKKworLyoKKyAqIEhhbmRsZSB0aGUgcmVjZWlwdCBvZiBhIFNHSV9YUENfTk9USUZZIElSUSBieSBzZWVpbmcgd2hldGhlciB0aGUgc3BlY2lmaWVkCisgKiBwYXJ0aXRpb24gYWN0dWFsbHkgc2VudCBpdC4gU2luY2UgU0dJX1hQQ19OT1RJRlkgSVJRcyBtYXkgYmUgc2hhcmVkIGJ5IG1vcmUKKyAqIHRoYW4gb25lIHBhcnRpdGlvbiwgd2UgdXNlIGFuIEFNT190IHN0cnVjdHVyZSBwZXIgcGFydGl0aW9uIHRvIGluZGljYXRlCisgKiB3aGV0aGVyIGEgcGFydGl0aW9uIGhhcyBzZW50IGFuIElQSSBvciBub3QuICA+Pj4gSWYgaXQgaGFzLCB0aGVuIHdha2UgdXAgdGhlCisgKiBhc3NvY2lhdGVkIGt0aHJlYWQgdG8gaGFuZGxlIGl0LgorICoKKyAqIEFsbCBTR0lfWFBDX05PVElGWSBJUlFzIHJlY2VpdmVkIGJ5IFhQQyBhcmUgdGhlIHJlc3VsdCBvZiBJUElzIHNlbnQgYnkgWFBDCisgKiBydW5uaW5nIG9uIG90aGVyIHBhcnRpdGlvbnMuCisgKgorICogTm90ZXdvcnRoeSBBcmd1bWVudHM6CisgKgorICoJaXJxIC0gSW50ZXJydXB0IFJlUXVlc3QgbnVtYmVyLiBOT1QgVVNFRC4KKyAqCisgKglkZXZfaWQgLSBwYXJ0aWQgb2YgSVBJJ3MgcG90ZW50aWFsIHNlbmRlci4KKyAqCisgKglyZWdzIC0gcHJvY2Vzc29yJ3MgY29udGV4dCBiZWZvcmUgdGhlIHByb2Nlc3NvciBlbnRlcmVkCisgKgkgICAgICAgaW50ZXJydXB0IGNvZGUuIE5PVCBVU0VELgorICovCitpcnFyZXR1cm5fdAoreHBjX25vdGlmeV9JUlFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXBhcnRpZF90IHBhcnRpZCA9IChwYXJ0aWRfdCkgKHU2NCkgZGV2X2lkOworCXN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0ID0gJnhwY19wYXJ0aXRpb25zW3BhcnRpZF07CisKKworCURCVUdfT04ocGFydGlkIDw9IDAgfHwgcGFydGlkID49IFhQX01BWF9QQVJUSVRJT05TKTsKKworCWlmICh4cGNfcGFydF9yZWYocGFydCkpIHsKKwkJeHBjX2NoZWNrX2Zvcl9jaGFubmVsX2FjdGl2aXR5KHBhcnQpOworCisJCXhwY19wYXJ0X2RlcmVmKHBhcnQpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiB4cGNfbm90aWZ5X0lSUV9oYW5kbGVyKCkgZHJvcHBlZCBhbnkgSVBJcyBvbiB0aGUgZmxvb3IKKyAqIGJlY2F1c2UgdGhlIHdyaXRlIHRvIHRoZWlyIGFzc29jaWF0ZWQgSVBJIGFtbyBjb21wbGV0ZWQgYWZ0ZXIgdGhlIElSUS9JUEkKKyAqIHdhcyByZWNlaXZlZC4KKyAqLwordm9pZAoreHBjX2Ryb3BwZWRfSVBJX2NoZWNrKHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0KQoreworCWlmICh4cGNfcGFydF9yZWYocGFydCkpIHsKKwkJeHBjX2NoZWNrX2Zvcl9jaGFubmVsX2FjdGl2aXR5KHBhcnQpOworCisJCXBhcnQtPmRyb3BwZWRfSVBJX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKKwkJCQkJCQlYUENfUF9EUk9QUEVEX0lQSV9XQUlUOworCQlhZGRfdGltZXIoJnBhcnQtPmRyb3BwZWRfSVBJX3RpbWVyKTsKKwkJeHBjX3BhcnRfZGVyZWYocGFydCk7CisJfQorfQorCisKK3ZvaWQKK3hwY19hY3RpdmF0ZV9rdGhyZWFkcyhzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLCBpbnQgbmVlZGVkKQoreworCWludCBpZGxlID0gYXRvbWljX3JlYWQoJmNoLT5rdGhyZWFkc19pZGxlKTsKKwlpbnQgYXNzaWduZWQgPSBhdG9taWNfcmVhZCgmY2gtPmt0aHJlYWRzX2Fzc2lnbmVkKTsKKwlpbnQgd2FrZXVwOworCisKKwlEQlVHX09OKG5lZWRlZCA8PSAwKTsKKworCWlmIChpZGxlID4gMCkgeworCQl3YWtldXAgPSAobmVlZGVkID4gaWRsZSkgPyBpZGxlIDogbmVlZGVkOworCQluZWVkZWQgLT0gd2FrZXVwOworCisJCWRldl9kYmcoeHBjX2NoYW4sICJ3YWtldXAgJWQgaWRsZSBrdGhyZWFkcywgcGFydGlkPSVkLCAiCisJCQkiY2hhbm5lbD0lZFxuIiwgd2FrZXVwLCBjaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKKworCQkvKiBvbmx5IHdha2V1cCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBrdGhyZWFkcyAqLworCQl3YWtlX3VwX25yKCZjaC0+aWRsZV93cSwgd2FrZXVwKTsKKwl9CisKKwlpZiAobmVlZGVkIDw9IDApIHsKKwkJcmV0dXJuOworCX0KKworCWlmIChuZWVkZWQgKyBhc3NpZ25lZCA+IGNoLT5rdGhyZWFkc19hc3NpZ25lZF9saW1pdCkgeworCQluZWVkZWQgPSBjaC0+a3RocmVhZHNfYXNzaWduZWRfbGltaXQgLSBhc3NpZ25lZDsKKwkJLy8gPj4+c2hvdWxkIG5ldmVyIGJlIGxlc3MgdGhhbiAwCisJCWlmIChuZWVkZWQgPD0gMCkgeworCQkJcmV0dXJuOworCQl9CisJfQorCisJZGV2X2RiZyh4cGNfY2hhbiwgImNyZWF0ZSAlZCBuZXcga3RocmVhZHMsIHBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwKKwkJbmVlZGVkLCBjaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKKworCXhwY19jcmVhdGVfa3RocmVhZHMoY2gsIG5lZWRlZCk7Cit9CisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgWFBDJ3Mga3RocmVhZHMgd2FpdCBmb3IgbWVzc2FnZXMgdG8gZGVsaXZlci4KKyAqLworc3RhdGljIHZvaWQKK3hwY19rdGhyZWFkX3dhaXRtc2dzKHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0LCBzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoKQoreworCWRvIHsKKwkJLyogZGVsaXZlciBtZXNzYWdlcyB0byB0aGVpciBpbnRlbmRlZCByZWNpcGllbnRzICovCisKKwkJd2hpbGUgKCh2b2xhdGlsZSBzNjQpIGNoLT53X2xvY2FsX0dQLmdldCA8CisJCQkJKHZvbGF0aWxlIHM2NCkgY2gtPndfcmVtb3RlX0dQLnB1dCAmJgorCQkJCQkhKCh2b2xhdGlsZSB1MzIpIGNoLT5mbGFncyAmCisJCQkJCQlYUENfQ19ESVNDT05ORUNUSU5HKSkgeworCQkJeHBjX2RlbGl2ZXJfbXNnKGNoKTsKKwkJfQorCisJCWlmIChhdG9taWNfaW5jX3JldHVybigmY2gtPmt0aHJlYWRzX2lkbGUpID4KKwkJCQkJCWNoLT5rdGhyZWFkc19pZGxlX2xpbWl0KSB7CisJCQkvKiB0b28gbWFueSBpZGxlIGt0aHJlYWRzIG9uIHRoaXMgY2hhbm5lbCAqLworCQkJYXRvbWljX2RlYygmY2gtPmt0aHJlYWRzX2lkbGUpOworCQkJYnJlYWs7CisJCX0KKworCQlkZXZfZGJnKHhwY19jaGFuLCAiaWRsZSBrdGhyZWFkIGNhbGxpbmcgIgorCQkJIndhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9leGNsdXNpdmUoKVxuIik7CisKKwkJKHZvaWQpIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9leGNsdXNpdmUoY2gtPmlkbGVfd3EsCisJCQkJKCh2b2xhdGlsZSBzNjQpIGNoLT53X2xvY2FsX0dQLmdldCA8CisJCQkJCSh2b2xhdGlsZSBzNjQpIGNoLT53X3JlbW90ZV9HUC5wdXQgfHwKKwkJCQkoKHZvbGF0aWxlIHUzMikgY2gtPmZsYWdzICYKKwkJCQkJCVhQQ19DX0RJU0NPTk5FQ1RJTkcpKSk7CisKKwkJYXRvbWljX2RlYygmY2gtPmt0aHJlYWRzX2lkbGUpOworCisJfSB3aGlsZSAoISgodm9sYXRpbGUgdTMyKSBjaC0+ZmxhZ3MgJiBYUENfQ19ESVNDT05ORUNUSU5HKSk7Cit9CisKKworc3RhdGljIGludAoreHBjX2RhZW1vbml6ZV9rdGhyZWFkKHZvaWQgKmFyZ3MpCit7CisJcGFydGlkX3QgcGFydGlkID0gWFBDX1VOUEFDS19BUkcxKGFyZ3MpOworCXUxNiBjaF9udW1iZXIgPSBYUENfVU5QQUNLX0FSRzIoYXJncyk7CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXTsKKwlzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoOworCWludCBuX25lZWRlZDsKKworCisJZGFlbW9uaXplKCJ4cGMlMDJkYyVkIiwgcGFydGlkLCBjaF9udW1iZXIpOworCisJZGV2X2RiZyh4cGNfY2hhbiwgImt0aHJlYWQgc3RhcnRpbmcsIHBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwKKwkJcGFydGlkLCBjaF9udW1iZXIpOworCisJY2ggPSAmcGFydC0+Y2hhbm5lbHNbY2hfbnVtYmVyXTsKKworCWlmICghKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkcpKSB7CisJCURCVUdfT04oIShjaC0+ZmxhZ3MgJiBYUENfQ19DT05ORUNURUQpKTsKKworCQkvKiBsZXQgcmVnaXN0ZXJlciBrbm93IHRoYXQgY29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZCAqLworCisJCWlmIChhdG9taWNfcmVhZCgmY2gtPmt0aHJlYWRzX2Fzc2lnbmVkKSA9PSAxKSB7CisJCQl4cGNfY29ubmVjdGVkX2NhbGxvdXQoY2gpOworCisJCQkvKgorCQkJICogSXQgaXMgcG9zc2libGUgdGhhdCB3aGlsZSB0aGUgY2FsbG91dCB3YXMgYmVpbmcKKwkJCSAqIG1hZGUgdGhhdCB0aGUgcmVtb3RlIHBhcnRpdGlvbiBzZW50IHNvbWUgbWVzc2FnZXMuCisJCQkgKiBJZiB0aGF0IGlzIHRoZSBjYXNlLCB3ZSBtYXkgbmVlZCB0byBhY3RpdmF0ZQorCQkJICogYWRkaXRpb25hbCBrdGhyZWFkcyB0byBoZWxwIGRlbGl2ZXIgdGhlbS4gV2Ugb25seQorCQkJICogbmVlZCBvbmUgbGVzcyB0aGFuIHRvdGFsICNvZiBtZXNzYWdlcyB0byBkZWxpdmVyLgorCQkJICovCisJCQluX25lZWRlZCA9IGNoLT53X3JlbW90ZV9HUC5wdXQgLSBjaC0+d19sb2NhbF9HUC5nZXQgLSAxOworCQkJaWYgKG5fbmVlZGVkID4gMCAmJgorCQkJCQkhKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkcpKSB7CisJCQkJeHBjX2FjdGl2YXRlX2t0aHJlYWRzKGNoLCBuX25lZWRlZCk7CisJCQl9CisJCX0KKworCQl4cGNfa3RocmVhZF93YWl0bXNncyhwYXJ0LCBjaCk7CisJfQorCisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZjaC0+a3RocmVhZHNfYXNzaWduZWQpID09IDAgJiYKKwkJCSgoY2gtPmZsYWdzICYgWFBDX0NfQ09OTkVDVENBTExPVVQpIHx8CisJCQkJKGNoLT5yZWFzb24gIT0geHBjVW5yZWdpc3RlcmluZyAmJgorCQkJCQljaC0+cmVhc29uICE9IHhwY090aGVyVW5yZWdpc3RlcmluZykpKSB7CisJCXhwY19kaXNjb25uZWN0ZWRfY2FsbG91dChjaCk7CisJfQorCisKKwl4cGNfbXNncXVldWVfZGVyZWYoY2gpOworCisJZGV2X2RiZyh4cGNfY2hhbiwgImt0aHJlYWQgZXhpdGluZywgcGFydGlkPSVkLCBjaGFubmVsPSVkXG4iLAorCQlwYXJ0aWQsIGNoX251bWJlcik7CisKKwl4cGNfcGFydF9kZXJlZihwYXJ0KTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogRm9yIGVhY2ggcGFydGl0aW9uIHRoYXQgWFBDIGhhcyBlc3RhYmxpc2hlZCBjb21tdW5pY2F0aW9ucyB3aXRoLCB0aGVyZSBpcworICogYSBtaW5pbXVtIG9mIG9uZSBrZXJuZWwgdGhyZWFkIGFzc2lnbmVkIHRvIHBlcmZvcm0gYW55IG9wZXJhdGlvbiB0aGF0CisgKiBtYXkgcG90ZW50aWFsbHkgc2xlZXAgb3IgYmxvY2sgKGJhc2ljYWxseSB0aGUgY2FsbG91dHMgdG8gdGhlIGFzeW5jaHJvbm91cworICogZnVuY3Rpb25zIHJlZ2lzdGVyZWQgdmlhIHhwY19jb25uZWN0KCkpLgorICoKKyAqIEFkZGl0aW9uYWwga3RocmVhZHMgYXJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBieSBYUEMgYXMgdGhlIHdvcmtsb2FkCisgKiBkZW1hbmRzLgorICoKKyAqIEEga3RocmVhZCBpcyBhc3NpZ25lZCB0byBvbmUgb2YgdGhlIGFjdGl2ZSBjaGFubmVscyB0aGF0IGV4aXN0cyBmb3IgYSBnaXZlbgorICogcGFydGl0aW9uLgorICovCit2b2lkCit4cGNfY3JlYXRlX2t0aHJlYWRzKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsIGludCBuZWVkZWQpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJcGlkX3QgcGlkOworCXU2NCBhcmdzID0gWFBDX1BBQ0tfQVJHUyhjaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKKworCisJd2hpbGUgKG5lZWRlZC0tID4gMCkgeworCQlwaWQgPSBrZXJuZWxfdGhyZWFkKHhwY19kYWVtb25pemVfa3RocmVhZCwgKHZvaWQgKikgYXJncywgMCk7CisJCWlmIChwaWQgPCAwKSB7CisJCQkvKiB0aGUgZm9yayBmYWlsZWQgKi8KKworCQkJaWYgKGF0b21pY19yZWFkKCZjaC0+a3RocmVhZHNfYXNzaWduZWQpIDwKKwkJCQkJCWNoLT5rdGhyZWFkc19pZGxlX2xpbWl0KSB7CisJCQkJLyoKKwkJCQkgKiBGbGFnIHRoaXMgYXMgYW4gZXJyb3Igb25seSBpZiB3ZSBoYXZlIGFuCisJCQkJICogaW5zdWZmaWNpZW50ICNvZiBrdGhyZWFkcyBmb3IgdGhlIGNoYW5uZWwKKwkJCQkgKiB0byBmdW5jdGlvbi4KKwkJCQkgKgorCQkJCSAqIE5vIHhwY19tc2dxdWV1ZV9yZWYoKSBpcyBuZWVkZWQgaGVyZSBzaW5jZQorCQkJCSAqIHRoZSBjaGFubmVsIG1nciBpcyBkb2luZyB0aGlzLgorCQkJCSAqLworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKKwkJCQlYUENfRElTQ09OTkVDVF9DSEFOTkVMKGNoLCB4cGNMYWNrT2ZSZXNvdXJjZXMsCisJCQkJCQkJCSZpcnFfZmxhZ3MpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBUaGUgZm9sbG93aW5nIGlzIGRvbmUgb24gYmVoYWxmIG9mIHRoZSBuZXdseSBjcmVhdGVkCisJCSAqIGt0aHJlYWQuIFRoYXQga3RocmVhZCBpcyByZXNwb25zaWJsZSBmb3IgZG9pbmcgdGhlCisJCSAqIGNvdW50ZXJwYXJ0IHRvIHRoZSBmb2xsb3dpbmcgYmVmb3JlIGl0IGV4aXRzLgorCQkgKi8KKwkJKHZvaWQpIHhwY19wYXJ0X3JlZigmeHBjX3BhcnRpdGlvbnNbY2gtPnBhcnRpZF0pOworCQl4cGNfbXNncXVldWVfcmVmKGNoKTsKKwkJYXRvbWljX2luYygmY2gtPmt0aHJlYWRzX2Fzc2lnbmVkKTsKKwkJY2gtPmt0aHJlYWRzX2NyZWF0ZWQrKzsJLy8gPj4+IHRlbXBvcmFyeSBkZWJ1ZyBvbmx5ISEhCisJfQorfQorCisKK3ZvaWQKK3hwY19kaXNjb25uZWN0X3dhaXQoaW50IGNoX251bWJlcikKK3sKKwlwYXJ0aWRfdCBwYXJ0aWQ7CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQ7CisJc3RydWN0IHhwY19jaGFubmVsICpjaDsKKworCisJLyogbm93IHdhaXQgZm9yIGFsbCBjYWxsb3V0cyB0byB0aGUgY2FsbGVyJ3MgZnVuY3Rpb24gdG8gY2Vhc2UgKi8KKwlmb3IgKHBhcnRpZCA9IDE7IHBhcnRpZCA8IFhQX01BWF9QQVJUSVRJT05TOyBwYXJ0aWQrKykgeworCQlwYXJ0ID0gJnhwY19wYXJ0aXRpb25zW3BhcnRpZF07CisKKwkJaWYgKHhwY19wYXJ0X3JlZihwYXJ0KSkgeworCQkJY2ggPSAmcGFydC0+Y2hhbm5lbHNbY2hfbnVtYmVyXTsKKworLy8gPj4+IGhvdyBkbyB3ZSBrZWVwIGZyb20gZmFsbGluZyBpbnRvIHRoZSB3aW5kb3cgYmV0d2VlbiBvdXIgY2hlY2sgYW5kIGdvaW5nCisvLyA+Pj4gZG93biBhbmQgY29taW5nIGJhY2sgdXAgd2hlcmUgc2VtYSBpcyByZS1pbml0ZWQ/CisJCQlpZiAoY2gtPmZsYWdzICYgWFBDX0NfU0VUVVApIHsKKwkJCQkodm9pZCkgZG93bigmY2gtPnRlYXJkb3duX3NlbWEpOworCQkJfQorCisJCQl4cGNfcGFydF9kZXJlZihwYXJ0KTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZAoreHBjX2RvX2V4aXQodm9pZCkKK3sKKwlwYXJ0aWRfdCBwYXJ0aWQ7CisJaW50IGFjdGl2ZV9wYXJ0X2NvdW50OworCXN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0OworCisKKwkvKiBub3cgaXQncyB0aW1lIHRvIGVsaW1pbmF0ZSBvdXIgaGVhcnRiZWF0ICovCisJZGVsX3RpbWVyX3N5bmMoJnhwY19oYl90aW1lcik7CisJeHBjX3ZhcnMtPmhlYXJ0YmVhdGluZ190b19tYXNrID0gMDsKKworCS8qIGluZGljYXRlIHRvIG90aGVycyB0aGF0IG91ciByZXNlcnZlZCBwYWdlIGlzIHVuaW5pdGlhbGl6ZWQgKi8KKwl4cGNfcnN2ZF9wYWdlLT52YXJzX3BhID0gMDsKKworCS8qCisJICogSWdub3JlIGFsbCBpbmNvbWluZyBpbnRlcnJ1cHRzLiBXaXRob3V0IGludGVydXB0cyB0aGUgaGVhcnRiZWF0CisJICogY2hlY2tlciB3b24ndCBhY3RpdmF0ZSBhbnkgbmV3IHBhcnRpdGlvbnMgdGhhdCBtYXkgY29tZSB1cC4KKwkgKi8KKwlmcmVlX2lycShTR0lfWFBDX0FDVElWQVRFLCBOVUxMKTsKKworCS8qCisJICogQ2F1c2UgdGhlIGhlYXJ0YmVhdCBjaGVja2VyIGFuZCB0aGUgZGlzY292ZXJ5IHRocmVhZHMgdG8gZXhpdC4KKwkgKiBXZSBkb24ndCB3YW50IHRoZW0gYXR0ZW1wdGluZyB0byBhY3RpdmF0ZSBuZXcgcGFydGl0aW9ucyBhcyB3ZQorCSAqIHRyeSB0byBkZWFjdGl2YXRlIHRoZSBleGlzdGluZyBvbmVzLgorCSAqLworCXhwY19leGl0aW5nID0gMTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnhwY19hY3RfSVJRX3dxKTsKKworCS8qIHdhaXQgZm9yIHRoZSBoZWFydGJlYXQgY2hlY2tlciB0aHJlYWQgdG8gbWFyayBpdHNlbGYgaW5hY3RpdmUgKi8KKwlkb3duKCZ4cGNfaGJfY2hlY2tlcl9leGl0ZWQpOworCisJLyogd2FpdCBmb3IgdGhlIGRpc2NvdmVyeSB0aHJlYWQgdG8gbWFyayBpdHNlbGYgaW5hY3RpdmUgKi8KKwlkb3duKCZ4cGNfZGlzY292ZXJ5X2V4aXRlZCk7CisKKworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dCgwLjMgKiBIWik7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCisJLyogd2FpdCBmb3IgYWxsIHBhcnRpdGlvbnMgdG8gYmVjb21lIGluYWN0aXZlICovCisKKwlkbyB7CisJCWFjdGl2ZV9wYXJ0X2NvdW50ID0gMDsKKworCQlmb3IgKHBhcnRpZCA9IDE7IHBhcnRpZCA8IFhQX01BWF9QQVJUSVRJT05TOyBwYXJ0aWQrKykgeworCQkJcGFydCA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdOworCQkJaWYgKHBhcnQtPmFjdF9zdGF0ZSAhPSBYUENfUF9JTkFDVElWRSkgeworCQkJCWFjdGl2ZV9wYXJ0X2NvdW50Kys7CisKKwkJCQlYUENfREVBQ1RJVkFURV9QQVJUSVRJT04ocGFydCwgeHBjVW5sb2FkaW5nKTsKKwkJCX0KKwkJfQorCisJCWlmIChhY3RpdmVfcGFydF9jb3VudCkgeworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCXNjaGVkdWxlX3RpbWVvdXQoMC4zICogSFopOworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJfQorCisJfSB3aGlsZSAoYWN0aXZlX3BhcnRfY291bnQgPiAwKTsKKworCisJLyogY2xvc2UgZG93biBwcm90ZWN0aW9ucyBmb3IgSVBJIG9wZXJhdGlvbnMgKi8KKwl4cGNfcmVzdHJpY3RfSVBJX29wcygpOworCisKKwkvKiBjbGVhciB0aGUgaW50ZXJmYWNlIHRvIFhQQydzIGZ1bmN0aW9ucyAqLworCXhwY19jbGVhcl9pbnRlcmZhY2UoKTsKKworCWlmICh4cGNfc3lzY3RsKSB7CisJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHhwY19zeXNjdGwpOworCX0KK30KKworCitpbnQgX19pbml0Cit4cGNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJcGFydGlkX3QgcGFydGlkOworCXN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0OworCXBpZF90IHBpZDsKKworCisJLyoKKwkgKiB4cGNfcmVtb3RlX2NvcHlfYnVmZmVyIGlzIHVzZWQgYXMgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBidGVfY29weSduZworCSAqIGJvdGggYSBwYXJ0aXRpb24ncyByZXNlcnZlZCBwYWdlIGFuZCBpdHMgWFBDIHZhcmlhYmxlcy4gSXRzIHNpemUgd2FzCisJICogYmFzZWQgb24gdGhlIHNpemUgb2YgYSByZXNlcnZlZCBwYWdlLiBTbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZQorCSAqIFhQQyB2YXJpYWJsZXMgd2lsbCBmaXQgYXMgd2VsbC4KKwkgKi8KKwlpZiAoWFBDX1ZBUlNfQUxJR05FRF9TSVpFID4gWFBDX1JTVkRfUEFHRV9BTElHTkVEX1NJWkUpIHsKKwkJZGV2X2Vycih4cGNfcGFydCwgInhwY19yZW1vdGVfY29weV9idWZmZXIgaXMgbm90IGJpZyBlbm91Z2hcbiIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwlEQlVHX09OKCh1NjQpIHhwY19yZW1vdGVfY29weV9idWZmZXIgIT0KKwkJCQlMMV9DQUNIRV9BTElHTigodTY0KSB4cGNfcmVtb3RlX2NvcHlfYnVmZmVyKSk7CisKKwlzbnByaW50Zih4cGNfcGFydC0+YnVzX2lkLCBCVVNfSURfU0laRSwgInBhcnQiKTsKKwlzbnByaW50Zih4cGNfY2hhbi0+YnVzX2lkLCBCVVNfSURfU0laRSwgImNoYW4iKTsKKworCXhwY19zeXNjdGwgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoeHBjX3N5c19kaXIsIDEpOworCisJLyoKKwkgKiBUaGUgZmlyc3QgZmV3IGZpZWxkcyBvZiBlYWNoIGVudHJ5IG9mIHhwY19wYXJ0aXRpb25zW10gbmVlZCB0bworCSAqIGJlIGluaXRpYWxpemVkIG5vdyBzbyB0aGF0IGNhbGxzIHRvIHhwY19jb25uZWN0KCkgYW5kCisJICogeHBjX2Rpc2Nvbm5lY3QoKSBjYW4gYmUgbWFkZSBwcmlvciB0byB0aGUgYWN0aXZhdGlvbiBvZiBhbnkgcmVtb3RlCisJICogcGFydGl0aW9uLiBOT1RFIFRIQVQgTk9ORSBPRiBUSEUgT1RIRVIgRklFTERTIEJFTE9OR0lORyBUTyBUSEVTRQorCSAqIEVOVFJJRVMgQVJFIE1FQU5JTkdGVUwgVU5USUwgQUZURVIgQU4gRU5UUlknUyBDT1JSRVNQT05ESU5HCisJICogUEFSVElUSU9OIEhBUyBCRUVOIEFDVElWQVRFRC4KKwkgKi8KKwlmb3IgKHBhcnRpZCA9IDE7IHBhcnRpZCA8IFhQX01BWF9QQVJUSVRJT05TOyBwYXJ0aWQrKykgeworCQlwYXJ0ID0gJnhwY19wYXJ0aXRpb25zW3BhcnRpZF07CisKKwkJREJVR19PTigodTY0KSBwYXJ0ICE9IEwxX0NBQ0hFX0FMSUdOKCh1NjQpIHBhcnQpKTsKKworCQlwYXJ0LT5hY3RfSVJRX3JjdmQgPSAwOworCQlzcGluX2xvY2tfaW5pdCgmcGFydC0+YWN0X2xvY2spOworCQlwYXJ0LT5hY3Rfc3RhdGUgPSBYUENfUF9JTkFDVElWRTsKKwkJWFBDX1NFVF9SRUFTT04ocGFydCwgMCwgMCk7CisJCXBhcnQtPnNldHVwX3N0YXRlID0gWFBDX1BfVU5TRVQ7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBhcnQtPnRlYXJkb3duX3dxKTsKKwkJYXRvbWljX3NldCgmcGFydC0+cmVmZXJlbmNlcywgMCk7CisJfQorCisJLyoKKwkgKiBPcGVuIHVwIHByb3RlY3Rpb25zIGZvciBJUEkgb3BlcmF0aW9ucyAoYW5kIEFNTyBvcGVyYXRpb25zIG9uCisJICogU2h1YiAxLjEgc3lzdGVtcykuCisJICovCisJeHBjX2FsbG93X0lQSV9vcHMoKTsKKworCS8qCisJICogSW50ZXJydXB0cyBiZWluZyBwcm9jZXNzZWQgd2lsbCBpbmNyZW1lbnQgdGhpcyBhdG9taWMgdmFyaWFibGUgYW5kCisJICogYXdha2VuIHRoZSBoZWFydGJlYXQgdGhyZWFkIHdoaWNoIHdpbGwgcHJvY2VzcyB0aGUgaW50ZXJydXB0cy4KKwkgKi8KKwlhdG9taWNfc2V0KCZ4cGNfYWN0X0lSUV9yY3ZkLCAwKTsKKworCS8qCisJICogVGhpcyBpcyBzYWZlIHRvIGRvIGJlZm9yZSB0aGUgeHBjX2hiX2NoZWNrZXIgdGhyZWFkIGhhcyBzdGFydGVkCisJICogYmVjYXVzZSB0aGUgaGFuZGxlciByZWxlYXNlcyBhIHdhaXQgcXVldWUuICBJZiBhbiBpbnRlcnJ1cHQgaXMKKwkgKiByZWNlaXZlZCBiZWZvcmUgdGhlIHRocmVhZCBpcyB3YWl0aW5nLCBpdCB3aWxsIG5vdCBnbyB0byBzbGVlcCwKKwkgKiBidXQgcmF0aGVyIGltbWVkaWF0ZWx5IHByb2Nlc3MgdGhlIGludGVycnVwdC4KKwkgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShTR0lfWFBDX0FDVElWQVRFLCB4cGNfYWN0X0lSUV9oYW5kbGVyLCAwLAorCQkJCQkJCSJ4cGMgaGIiLCBOVUxMKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih4cGNfcGFydCwgImNhbid0IHJlZ2lzdGVyIEFDVElWQVRFIElSUSBoYW5kbGVyLCAiCisJCQkiZXJybm89JWRcbiIsIC1yZXQpOworCisJCXhwY19yZXN0cmljdF9JUElfb3BzKCk7CisKKwkJaWYgKHhwY19zeXNjdGwpIHsKKwkJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHhwY19zeXNjdGwpOworCQl9CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyoKKwkgKiBGaWxsIHRoZSBwYXJ0aXRpb24gcmVzZXJ2ZWQgcGFnZSB3aXRoIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYnkKKwkgKiBvdGhlciBwYXJ0aXRpb25zIHRvIGRpc2NvdmVyIHdlIGFyZSBhbGl2ZSBhbmQgZXN0YWJsaXNoIGluaXRpYWwKKwkgKiBjb21tdW5pY2F0aW9ucy4KKwkgKi8KKwl4cGNfcnN2ZF9wYWdlID0geHBjX3JzdmRfcGFnZV9pbml0KCk7CisJaWYgKHhwY19yc3ZkX3BhZ2UgPT0gTlVMTCkgeworCQlkZXZfZXJyKHhwY19wYXJ0LCAiY291bGQgbm90IHNldHVwIG91ciByZXNlcnZlZCBwYWdlXG4iKTsKKworCQlmcmVlX2lycShTR0lfWFBDX0FDVElWQVRFLCBOVUxMKTsKKwkJeHBjX3Jlc3RyaWN0X0lQSV9vcHMoKTsKKworCQlpZiAoeHBjX3N5c2N0bCkgeworCQkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoeHBjX3N5c2N0bCk7CisJCX0KKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKworCS8qCisJICogU2V0IHRoZSBiZWF0aW5nIHRvIG90aGVyIHBhcnRpdGlvbnMgaW50byBtb3Rpb24uICBUaGlzIGlzCisJICogdGhlIGxhc3QgcmVxdWlyZW1lbnQgZm9yIG90aGVyIHBhcnRpdGlvbnMnIGRpc2NvdmVyeSB0bworCSAqIGluaXRpYXRlIGNvbW11bmljYXRpb25zIHdpdGggdXMuCisJICovCisJaW5pdF90aW1lcigmeHBjX2hiX3RpbWVyKTsKKwl4cGNfaGJfdGltZXIuZnVuY3Rpb24gPSB4cGNfaGJfYmVhdGVyOworCXhwY19oYl9iZWF0ZXIoMCk7CisKKworCS8qCisJICogVGhlIHJlYWwgd29yay1ob3JzZSBiZWhpbmQgeHBjLiAgVGhpcyBwcm9jZXNzZXMgaW5jb21pbmcKKwkgKiBpbnRlcnJ1cHRzIGFuZCBtb25pdG9ycyByZW1vdGUgaGVhcnRiZWF0cy4KKwkgKi8KKwlwaWQgPSBrZXJuZWxfdGhyZWFkKHhwY19oYl9jaGVja2VyLCBOVUxMLCAwKTsKKwlpZiAocGlkIDwgMCkgeworCQlkZXZfZXJyKHhwY19wYXJ0LCAiZmFpbGVkIHdoaWxlIGZvcmtpbmcgaGIgY2hlY2sgdGhyZWFkXG4iKTsKKworCQkvKiBpbmRpY2F0ZSB0byBvdGhlcnMgdGhhdCBvdXIgcmVzZXJ2ZWQgcGFnZSBpcyB1bmluaXRpYWxpemVkICovCisJCXhwY19yc3ZkX3BhZ2UtPnZhcnNfcGEgPSAwOworCisJCWRlbF90aW1lcl9zeW5jKCZ4cGNfaGJfdGltZXIpOworCQlmcmVlX2lycShTR0lfWFBDX0FDVElWQVRFLCBOVUxMKTsKKwkJeHBjX3Jlc3RyaWN0X0lQSV9vcHMoKTsKKworCQlpZiAoeHBjX3N5c2N0bCkgeworCQkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoeHBjX3N5c2N0bCk7CisJCX0KKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKworCS8qCisJICogU3RhcnR1cCBhIHRocmVhZCB0aGF0IHdpbGwgYXR0ZW1wdCB0byBkaXNjb3ZlciBvdGhlciBwYXJ0aXRpb25zIHRvCisJICogYWN0aXZhdGUgYmFzZWQgb24gaW5mbyBwcm92aWRlZCBieSBTQUwuIFRoaXMgbmV3IHRocmVhZCBpcyBzaG9ydAorCSAqIGxpdmVkIGFuZCB3aWxsIGV4aXQgb25jZSBkaXNjb3ZlcnkgaXMgY29tcGxldGUuCisJICovCisJcGlkID0ga2VybmVsX3RocmVhZCh4cGNfaW5pdGlhdGVfZGlzY292ZXJ5LCBOVUxMLCAwKTsKKwlpZiAocGlkIDwgMCkgeworCQlkZXZfZXJyKHhwY19wYXJ0LCAiZmFpbGVkIHdoaWxlIGZvcmtpbmcgZGlzY292ZXJ5IHRocmVhZFxuIik7CisKKwkJLyogbWFyayB0aGlzIG5ldyB0aHJlYWQgYXMgYSBub24tc3RhcnRlciAqLworCQl1cCgmeHBjX2Rpc2NvdmVyeV9leGl0ZWQpOworCisJCXhwY19kb19leGl0KCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisKKwkvKiBzZXQgdGhlIGludGVyZmFjZSB0byBwb2ludCBhdCBYUEMncyBmdW5jdGlvbnMgKi8KKwl4cGNfc2V0X2ludGVyZmFjZSh4cGNfaW5pdGlhdGVfY29ubmVjdCwgeHBjX2luaXRpYXRlX2Rpc2Nvbm5lY3QsCisJCQkgIHhwY19pbml0aWF0ZV9hbGxvY2F0ZSwgeHBjX2luaXRpYXRlX3NlbmQsCisJCQkgIHhwY19pbml0aWF0ZV9zZW5kX25vdGlmeSwgeHBjX2luaXRpYXRlX3JlY2VpdmVkLAorCQkJICB4cGNfaW5pdGlhdGVfcGFydGlkX3RvX25hc2lkcyk7CisKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHhwY19pbml0KTsKKworCit2b2lkIF9fZXhpdAoreHBjX2V4aXQodm9pZCkKK3sKKwl4cGNfZG9fZXhpdCgpOworfQorbW9kdWxlX2V4aXQoeHBjX2V4aXQpOworCisKK01PRFVMRV9BVVRIT1IoIlNpbGljb24gR3JhcGhpY3MsIEluYy4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ3Jvc3MgUGFydGl0aW9uIENvbW11bmljYXRpb24gKFhQQykgc3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oeHBjX2hiX2ludGVydmFsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh4cGNfaGJfaW50ZXJ2YWwsICJOdW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuICIKKwkJImhlYXJ0YmVhdCBpbmNyZW1lbnRzLiIpOworCittb2R1bGVfcGFyYW0oeHBjX2hiX2NoZWNrX2ludGVydmFsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh4cGNfaGJfY2hlY2tfaW50ZXJ2YWwsICJOdW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuICIKKwkJImhlYXJ0YmVhdCBjaGVja3MuIik7CisKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX3BhcnRpdGlvbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMzYzRhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX3BhcnRpdGlvbi5jCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisKKy8qCisgKiBDcm9zcyBQYXJ0aXRpb24gQ29tbXVuaWNhdGlvbiAoWFBDKSBwYXJ0aXRpb24gc3VwcG9ydC4KKyAqCisgKglUaGlzIGlzIHRoZSBwYXJ0IG9mIFhQQyB0aGF0IGRldGVjdHMgdGhlIHByZXNlbmNlL2Fic2VuY2Ugb2YKKyAqCW90aGVyIHBhcnRpdGlvbnMuIEl0IHByb3ZpZGVzIGEgaGVhcnRiZWF0IGFuZCBtb25pdG9ycyB0aGUKKyAqCWhlYXJ0YmVhdHMgb2Ygb3RoZXIgcGFydGl0aW9ucy4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgorI2luY2x1ZGUgPGFzbS9zbi9idGUuaD4KKyNpbmNsdWRlIDxhc20vc24vaW50ci5oPgorI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KKyNpbmNsdWRlIDxhc20vc24vbm9kZXBkYS5oPgorI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgorI2luY2x1ZGUgInhwYy5oIgorCisKKy8qIFhQQyBpcyBleGl0aW5nIGZsYWcgKi8KK2ludCB4cGNfZXhpdGluZzsKKworCisvKiBTSF9JUElfQUNDRVNTIHNodWIgcmVnaXN0ZXIgdmFsdWUgb24gc3RhcnR1cCAqLworc3RhdGljIHU2NCB4cGNfc2gxX0lQSV9hY2Nlc3M7CitzdGF0aWMgdTY0IHhwY19zaDJfSVBJX2FjY2VzczA7CitzdGF0aWMgdTY0IHhwY19zaDJfSVBJX2FjY2VzczE7CitzdGF0aWMgdTY0IHhwY19zaDJfSVBJX2FjY2VzczI7CitzdGF0aWMgdTY0IHhwY19zaDJfSVBJX2FjY2VzczM7CisKKworLyogb3JpZ2luYWwgcHJvdGVjdGlvbiB2YWx1ZXMgZm9yIGVhY2ggbm9kZSAqLwordTY0IHhwY19wcm90X3ZlY1tNQVhfQ09NUEFDVF9OT0RFU107CisKKworLyogdGhpcyBwYXJ0aXRpb24ncyByZXNlcnZlZCBwYWdlICovCitzdHJ1Y3QgeHBjX3JzdmRfcGFnZSAqeHBjX3JzdmRfcGFnZTsKKworLyogdGhpcyBwYXJ0aXRpb24ncyBYUEMgdmFyaWFibGVzICh3aXRoaW4gdGhlIHJlc2VydmVkIHBhZ2UpICovCitzdHJ1Y3QgeHBjX3ZhcnMgKnhwY192YXJzOworc3RydWN0IHhwY192YXJzX3BhcnQgKnhwY192YXJzX3BhcnQ7CisKKworLyoKKyAqIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBlYWNoIGVudHJ5IG9mIHhwY19wYXJ0aXRpb25zW10gaXMgY2FjaGVsaW5lCisgKiBhbGlnbmVkLiBBbmQgeHBjX3BhcnRpdGlvbnNbXSBpcyBwYWRkZWQgd2l0aCBhbiBhZGRpdGlvbmFsIGVudHJ5IGF0IHRoZQorICogZW5kIHNvIHRoYXQgdGhlIGxhc3QgbGVnaXRpbWF0ZSBlbnRyeSBkb2Vzbid0IHNoYXJlIGl0cyBjYWNoZWxpbmUgd2l0aAorICogYW5vdGhlciB2YXJpYWJsZS4KKyAqLworc3RydWN0IHhwY19wYXJ0aXRpb24geHBjX3BhcnRpdGlvbnNbWFBfTUFYX1BBUlRJVElPTlMgKyAxXTsKKworCisvKgorICogR2VuZXJpYyBidWZmZXIgdXNlZCB0byBzdG9yZSBhIGxvY2FsIGNvcHkgb2YgdGhlIHJlbW90ZSBwYXJ0aXRpb25zCisgKiByZXNlcnZlZCBwYWdlIG9yIFhQQyB2YXJpYWJsZXMuCisgKgorICogeHBjX2Rpc2NvdmVyeSBydW5zIG9ubHkgb25jZSBhbmQgaXMgYSBzZXBlcmF0ZSB0aHJlYWQgdGhhdCBpcworICogdmVyeSBsaWtlbHkgZ29pbmcgdG8gYmUgcHJvY2Vzc2luZyBpbiBwYXJhbGxlbCB3aXRoIHJlY2VpdmluZworICogaW50ZXJydXB0cy4KKyAqLworY2hhciBfX19fY2FjaGVsaW5lX2FsaWduZWQKKwkJeHBjX3JlbW90ZV9jb3B5X2J1ZmZlcltYUENfUlNWRF9QQUdFX0FMSUdORURfU0laRV07CisKKworLyogc3lzdHVuZSByZWxhdGVkIHZhcmlhYmxlcyAqLworaW50IHhwY19oYl9pbnRlcnZhbCA9IFhQQ19IQl9ERUZBVUxUX0lOVEVSVkFMOworaW50IHhwY19oYl9jaGVja19pbnRlcnZhbCA9IFhQQ19IQl9DSEVDS19ERUZBVUxUX1RJTUVPVVQ7CisKKworLyoKKyAqIEdpdmVuIGEgbmFzaWQsIGdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgIHBhcnRpdGlvbidzIHJlc2VydmVkIHBhZ2UKKyAqIGZvciB0aGF0IG5hc2lkLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBhbnkgZXJyb3IuCisgKi8KK3N0YXRpYyB1NjQKK3hwY19nZXRfcnN2ZF9wYWdlX3BhKGludCBuYXNpZCwgdTY0IGJ1ZiwgdTY0IGJ1Zl9zaXplKQoreworCWJ0ZV9yZXN1bHRfdCBidGVfcmVzOworCXM2NCBzdGF0dXM7CisJdTY0IGNvb2tpZSA9IDA7CisJdTY0IHJwX3BhID0gbmFzaWQ7CS8qIHNlZWQgd2l0aCBuYXNpZCAqLworCXU2NCBsZW4gPSAwOworCisKKwl3aGlsZSAoMSkgeworCisJCXN0YXR1cyA9IHNuX3BhcnRpdGlvbl9yZXNlcnZlZF9wYWdlX3BhKGJ1ZiwgJmNvb2tpZSwgJnJwX3BhLAorCQkJCQkJCQkmbGVuKTsKKworCQlkZXZfZGJnKHhwY19wYXJ0LCAiU0FMIHJldHVybmVkIHdpdGggc3RhdHVzPSVsaSwgY29va2llPSIKKwkJCSIweCUwMTZseCwgYWRkcmVzcz0weCUwMTZseCwgbGVuPTB4JTAxNmx4XG4iLAorCQkJc3RhdHVzLCBjb29raWUsIHJwX3BhLCBsZW4pOworCisJCWlmIChzdGF0dXMgIT0gU0FMUkVUX01PUkVfUEFTU0VTKSB7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChsZW4gPiBidWZfc2l6ZSkgeworCQkJZGV2X2Vycih4cGNfcGFydCwgImxlbiAoPTB4JTAxNmx4KSA+IGJ1Zl9zaXplXG4iLCBsZW4pOworCQkJc3RhdHVzID0gU0FMUkVUX0VSUk9SOworCQkJYnJlYWs7CisJCX0KKworCQlidGVfcmVzID0geHBfYnRlX2NvcHkocnBfcGEsIGlhNjRfdHBhKGJ1ZiksIGJ1Zl9zaXplLAorCQkJCQkoQlRFX05PVElGWSB8IEJURV9XQUNRVUlSRSksIE5VTEwpOworCQlpZiAoYnRlX3JlcyAhPSBCVEVfU1VDQ0VTUykgeworCQkJZGV2X2RiZyh4cGNfcGFydCwgInhwX2J0ZV9jb3B5IGZhaWxlZCAlaVxuIiwgYnRlX3Jlcyk7CisJCQlzdGF0dXMgPSBTQUxSRVRfRVJST1I7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgIT0gU0FMUkVUX09LKSB7CisJCXJwX3BhID0gMDsKKwl9CisJZGV2X2RiZyh4cGNfcGFydCwgInJlc2VydmVkIHBhZ2UgYXQgcGh5cyBhZGRyZXNzIDB4JTAxNmx4XG4iLCBycF9wYSk7CisJcmV0dXJuIHJwX3BhOworfQorCisKKy8qCisgKiBGaWxsIHRoZSBwYXJ0aXRpb24gcmVzZXJ2ZWQgcGFnZSB3aXRoIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYnkKKyAqIG90aGVyIHBhcnRpdGlvbnMgdG8gZGlzY292ZXIgd2UgYXJlIGFsaXZlIGFuZCBlc3RhYmxpc2ggaW5pdGlhbAorICogY29tbXVuaWNhdGlvbnMuCisgKi8KK3N0cnVjdCB4cGNfcnN2ZF9wYWdlICoKK3hwY19yc3ZkX3BhZ2VfaW5pdCh2b2lkKQoreworCXN0cnVjdCB4cGNfcnN2ZF9wYWdlICpycDsKKwlBTU9fdCAqYW1vc19wYWdlOworCXU2NCBycF9wYSwgbmV4dF9jbCwgbmFzaWRfYXJyYXkgPSAwOworCWludCBpLCByZXQ7CisKKworCS8qIGdldCB0aGUgbG9jYWwgcmVzZXJ2ZWQgcGFnZSdzIGFkZHJlc3MgKi8KKworCXJwX3BhID0geHBjX2dldF9yc3ZkX3BhZ2VfcGEoY25vZGVpZF90b19uYXNpZCgwKSwKKwkJCQkJKHU2NCkgeHBjX3JlbW90ZV9jb3B5X2J1ZmZlciwKKwkJCQkJCVhQQ19SU1ZEX1BBR0VfQUxJR05FRF9TSVpFKTsKKwlpZiAocnBfcGEgPT0gMCkgeworCQlkZXZfZXJyKHhwY19wYXJ0LCAiU0FMIGZhaWxlZCB0byBsb2NhdGUgdGhlIHJlc2VydmVkIHBhZ2VcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcnAgPSAoc3RydWN0IHhwY19yc3ZkX3BhZ2UgKikgX192YShycF9wYSk7CisKKwlpZiAocnAtPnBhcnRpZCAhPSBzbl9wYXJ0aXRpb25faWQpIHsKKwkJZGV2X2Vycih4cGNfcGFydCwgInRoZSByZXNlcnZlZCBwYWdlJ3MgcGFydGlkIG9mICVkIHNob3VsZCBiZSAiCisJCQkiJWRcbiIsIHJwLT5wYXJ0aWQsIHNuX3BhcnRpdGlvbl9pZCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJwLT52ZXJzaW9uID0gWFBDX1JQX1ZFUlNJT047CisKKwkvKgorCSAqIFBsYWNlIHRoZSBYUEMgdmFyaWFibGVzIG9uIHRoZSBjYWNoZSBsaW5lIGZvbGxvd2luZyB0aGUKKwkgKiByZXNlcnZlZCBwYWdlIHN0cnVjdHVyZS4KKwkgKi8KKwluZXh0X2NsID0gKHU2NCkgcnAgKyBYUENfUlNWRF9QQUdFX0FMSUdORURfU0laRTsKKwl4cGNfdmFycyA9IChzdHJ1Y3QgeHBjX3ZhcnMgKikgbmV4dF9jbDsKKworCS8qCisJICogQmVmb3JlIGNsZWFyaW5nIHhwY192YXJzLCBzZWUgaWYgYSBwYWdlIG9mIEFNT3MgaGFkIGJlZW4gcHJldmlvdXNseQorCSAqIGFsbG9jYXRlZC4gSWYgbm90IHdlJ2xsIG5lZWQgdG8gYWxsb2NhdGUgb25lIGFuZCBzZXQgcGVybWlzc2lvbnMKKwkgKiBzbyB0aGF0IGNyb3NzLXBhcnRpdGlvbiBBTU9zIGFyZSBhbGxvd2VkLgorCSAqCisJICogVGhlIGFsbG9jYXRlZCBBTU8gcGFnZSBuZWVkcyBNQ0EgcmVwb3J0aW5nIHRvIHJlbWFpbiBkaXNhYmxlZCBhZnRlcgorCSAqIFhQQyBoYXMgdW5sb2FkZWQuICBUbyBtYWtlIHRoaXMgd29yaywgd2Uga2VlcCBhIGNvcHkgb2YgdGhlIHBvaW50ZXIKKwkgKiB0byB0aGlzIHBhZ2UgKGkuZS4sIGFtb3NfcGFnZSkgaW4gdGhlIHN0cnVjdCB4cGNfdmFycyBzdHJ1Y3R1cmUsCisJICogd2hpY2ggaXMgcG9pbnRlZCB0byBieSB0aGUgcmVzZXJ2ZWQgcGFnZSwgYW5kIHJlLXVzZSB0aGF0IHNhdmVkIGNvcHkKKwkgKiBvbiBzdWJzZXF1ZW50IGxvYWRzIG9mIFhQQy4gVGhpcyBBTU8gcGFnZSBpcyBuZXZlciBmcmVlZCwgYW5kIGl0cworCSAqIG1lbW9yeSBwcm90ZWN0aW9ucyBhcmUgbmV2ZXIgcmVzdHJpY3RlZC4KKwkgKi8KKwlpZiAoKGFtb3NfcGFnZSA9IHhwY192YXJzLT5hbW9zX3BhZ2UpID09IE5VTEwpIHsKKwkJYW1vc19wYWdlID0gKEFNT190ICopIG1zcGVjX2thbGxvY19wYWdlKDApOworCQlpZiAoYW1vc19wYWdlID09IE5VTEwpIHsKKwkJCWRldl9lcnIoeHBjX3BhcnQsICJjYW4ndCBhbGxvY2F0ZSBwYWdlIG9mIEFNT3NcbiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQkvKgorCQkgKiBPcGVuIHVwIEFNTy1SL1cgdG8gY3B1LiAgVGhpcyBpcyBkb25lIGZvciBTaHViIDEuMSBzeXN0ZW1zCisJCSAqIHdoZW4geHBjX2FsbG93X0lQSV9vcHMoKSBpcyBjYWxsZWQgdmlhIHhwY19oYl9pbml0KCkuCisJCSAqLworCQlpZiAoIWVuYWJsZV9zaHViX3dhcnNfMV8xKCkpIHsKKwkJCXJldCA9IHNuX2NoYW5nZV9tZW1wcm90ZWN0KGlhNjRfdHBhKCh1NjQpIGFtb3NfcGFnZSksCisJCQkJCVBBR0VfU0laRSwgU05fTUVNUFJPVF9BQ0NFU1NfQ0xBU1NfMSwKKwkJCQkJJm5hc2lkX2FycmF5KTsKKwkJCWlmIChyZXQgIT0gMCkgeworCQkJCWRldl9lcnIoeHBjX3BhcnQsICJjYW4ndCBjaGFuZ2UgbWVtb3J5ICIKKwkJCQkJInByb3RlY3Rpb25zXG4iKTsKKwkJCQltc3BlY19rZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBhbW9zX3BhZ2UpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisJfSBlbHNlIGlmICghSVNfQU1PX0FERFJFU1MoKHU2NCkgYW1vc19wYWdlKSkgeworCQkvKgorCQkgKiBFRkkncyBYUEJPT1QgY2FuIGFsc28gc2V0IGFtb3NfcGFnZSBpbiB0aGUgcmVzZXJ2ZWQgcGFnZSwKKwkJICogYnV0IGl0IGhhcHBlbnMgdG8gbGVhdmUgaXQgYXMgYW4gdW5jYWNoZWQgcGh5c2ljYWwgYWRkcmVzcworCQkgKiBhbmQgd2UgbmVlZCBpdCB0byBiZSBhbiB1bmNhY2hlZCB2aXJ0dWFsLCBzbyB3ZSdsbCBoYXZlIHRvCisJCSAqIGNvbnZlcnQgaXQuCisJCSAqLworCQlpZiAoIUlTX0FNT19QSFlTX0FERFJFU1MoKHU2NCkgYW1vc19wYWdlKSkgeworCQkJZGV2X2Vycih4cGNfcGFydCwgInByZXZpb3VzbHkgdXNlZCBhbW9zX3BhZ2UgYWRkcmVzcyAiCisJCQkJImlzIGJhZCA9IDB4JXBcbiIsICh2b2lkICopIGFtb3NfcGFnZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlhbW9zX3BhZ2UgPSAoQU1PX3QgKikgVE9fQU1PKCh1NjQpIGFtb3NfcGFnZSk7CisJfQorCisJbWVtc2V0KHhwY192YXJzLCAwLCBzaXplb2Yoc3RydWN0IHhwY192YXJzKSk7CisKKwkvKgorCSAqIFBsYWNlIHRoZSBYUEMgcGVyIHBhcnRpdGlvbiBzcGVjaWZpYyB2YXJpYWJsZXMgb24gdGhlIGNhY2hlIGxpbmUKKwkgKiBmb2xsb3dpbmcgdGhlIFhQQyB2YXJpYWJsZXMgc3RydWN0dXJlLgorCSAqLworCW5leHRfY2wgKz0gWFBDX1ZBUlNfQUxJR05FRF9TSVpFOworCW1lbXNldCgodTY0ICopIG5leHRfY2wsIDAsIHNpemVvZihzdHJ1Y3QgeHBjX3ZhcnNfcGFydCkgKgorCQkJCQkJCVhQX01BWF9QQVJUSVRJT05TKTsKKwl4cGNfdmFyc19wYXJ0ID0gKHN0cnVjdCB4cGNfdmFyc19wYXJ0ICopIG5leHRfY2w7CisJeHBjX3ZhcnMtPnZhcnNfcGFydF9wYSA9IF9fcGEobmV4dF9jbCk7CisKKwl4cGNfdmFycy0+dmVyc2lvbiA9IFhQQ19WX1ZFUlNJT047CisJeHBjX3ZhcnMtPmFjdF9uYXNpZCA9IGNwdWlkX3RvX25hc2lkKDApOworCXhwY192YXJzLT5hY3RfcGh5c19jcHVpZCA9IGNwdV9waHlzaWNhbF9pZCgwKTsKKwl4cGNfdmFycy0+YW1vc19wYWdlID0gYW1vc19wYWdlOyAgLyogc2F2ZSBmb3IgbmV4dCBsb2FkIG9mIFhQQyAqLworCisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGFjdGl2YXRpb24gcmVsYXRlZCBBTU8gdmFyaWFibGVzLgorCSAqLworCXhwY192YXJzLT5hY3RfYW1vcyA9IHhwY19JUElfaW5pdChYUF9NQVhfUEFSVElUSU9OUyk7CisJZm9yIChpID0gMTsgaSA8IFhQX05BU0lEX01BU0tfV09SRFM7IGkrKykgeworCQl4cGNfSVBJX2luaXQoaSArIFhQX01BWF9QQVJUSVRJT05TKTsKKwl9CisJLyogZXhwb3J0IEFNTyBwYWdlJ3MgcGh5c2ljYWwgYWRkcmVzcyB0byBvdGhlciBwYXJ0aXRpb25zICovCisJeHBjX3ZhcnMtPmFtb3NfcGFnZV9wYSA9IGlhNjRfdHBhKCh1NjQpIHhwY192YXJzLT5hbW9zX3BhZ2UpOworCisJLyoKKwkgKiBUaGlzIHNpZ25pZmllcyB0byB0aGUgcmVtb3RlIHBhcnRpdGlvbiB0aGF0IG91ciByZXNlcnZlZAorCSAqIHBhZ2UgaXMgaW5pdGlhbGl6ZWQuCisJICovCisJKHZvbGF0aWxlIHU2NCkgcnAtPnZhcnNfcGEgPSBfX3BhKHhwY192YXJzKTsKKworCXJldHVybiBycDsKK30KKworCisvKgorICogQ2hhbmdlIHByb3RlY3Rpb25zIHRvIGFsbG93IElQSSBvcGVyYXRpb25zIChhbmQgQU1PIG9wZXJhdGlvbnMgb24KKyAqIFNodWIgMS4xIHN5c3RlbXMpLgorICovCit2b2lkCit4cGNfYWxsb3dfSVBJX29wcyh2b2lkKQoreworCWludCBub2RlOworCWludCBuYXNpZDsKKworCisJLy8gPj4+IENoYW5nZSBTSF9JUElfQUNDRVNTIGNvZGUgdG8gdXNlIFNBTCBjYWxsIG9uY2UgaXQgaXMgYXZhaWxhYmxlLgorCisJaWYgKGlzX3NodWIyKCkpIHsKKwkJeHBjX3NoMl9JUElfYWNjZXNzMCA9CisJCQkodTY0KSBIVUJfTCgodTY0ICopIExPQ0FMX01NUl9BRERSKFNIMl9JUElfQUNDRVNTMCkpOworCQl4cGNfc2gyX0lQSV9hY2Nlc3MxID0KKwkJCSh1NjQpIEhVQl9MKCh1NjQgKikgTE9DQUxfTU1SX0FERFIoU0gyX0lQSV9BQ0NFU1MxKSk7CisJCXhwY19zaDJfSVBJX2FjY2VzczIgPQorCQkJKHU2NCkgSFVCX0woKHU2NCAqKSBMT0NBTF9NTVJfQUREUihTSDJfSVBJX0FDQ0VTUzIpKTsKKwkJeHBjX3NoMl9JUElfYWNjZXNzMyA9CisJCQkodTY0KSBIVUJfTCgodTY0ICopIExPQ0FMX01NUl9BRERSKFNIMl9JUElfQUNDRVNTMykpOworCisJCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKKwkJCW5hc2lkID0gY25vZGVpZF90b19uYXNpZChub2RlKTsKKwkJCUhVQl9TKCh1NjQgKikgR0xPQkFMX01NUl9BRERSKG5hc2lkLCBTSDJfSVBJX0FDQ0VTUzApLAorCQkJCQkJCQktMVVMKTsKKwkJCUhVQl9TKCh1NjQgKikgR0xPQkFMX01NUl9BRERSKG5hc2lkLCBTSDJfSVBJX0FDQ0VTUzEpLAorCQkJCQkJCQktMVVMKTsKKwkJCUhVQl9TKCh1NjQgKikgR0xPQkFMX01NUl9BRERSKG5hc2lkLCBTSDJfSVBJX0FDQ0VTUzIpLAorCQkJCQkJCQktMVVMKTsKKwkJCUhVQl9TKCh1NjQgKikgR0xPQkFMX01NUl9BRERSKG5hc2lkLCBTSDJfSVBJX0FDQ0VTUzMpLAorCQkJCQkJCQktMVVMKTsKKwkJfQorCisJfSBlbHNlIHsKKwkJeHBjX3NoMV9JUElfYWNjZXNzID0KKwkJCSh1NjQpIEhVQl9MKCh1NjQgKikgTE9DQUxfTU1SX0FERFIoU0gxX0lQSV9BQ0NFU1MpKTsKKworCQlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CisJCQluYXNpZCA9IGNub2RlaWRfdG9fbmFzaWQobm9kZSk7CisJCQlIVUJfUygodTY0ICopIEdMT0JBTF9NTVJfQUREUihuYXNpZCwgU0gxX0lQSV9BQ0NFU1MpLAorCQkJCQkJCQktMVVMKTsKKworCQkJLyoKKwkJCSAqIFNpbmNlIHRoZSBCSVNUIGNvbGxpZGVzIHdpdGggbWVtb3J5IG9wZXJhdGlvbnMgb24KKwkJCSAqIFNIVUIgMS4xIHNuX2NoYW5nZV9tZW1wcm90ZWN0KCkgY2Fubm90IGJlIHVzZWQuCisJCQkgKi8KKwkJCWlmIChlbmFibGVfc2h1Yl93YXJzXzFfMSgpKSB7CisJCQkJLyogb3BlbiB1cCBldmVyeXRoaW5nICovCisJCQkJeHBjX3Byb3RfdmVjW25vZGVdID0gKHU2NCkgSFVCX0woKHU2NCAqKQorCQkJCQkJR0xPQkFMX01NUl9BRERSKG5hc2lkLAorCQkJCQkJU0gxX01EX0RRTFBfTU1SX0RJUl9QUklWRUMwKSk7CisJCQkJSFVCX1MoKHU2NCAqKSBHTE9CQUxfTU1SX0FERFIobmFzaWQsCisJCQkJCQlTSDFfTURfRFFMUF9NTVJfRElSX1BSSVZFQzApLAorCQkJCQkJCQktMVVMKTsKKwkJCQlIVUJfUygodTY0ICopIEdMT0JBTF9NTVJfQUREUihuYXNpZCwKKwkJCQkJCVNIMV9NRF9EUVJQX01NUl9ESVJfUFJJVkVDMCksCisJCQkJCQkJCS0xVUwpOworCQkJfQorCQl9CisJfQorfQorCisKKy8qCisgKiBSZXN0cmljdCBwcm90ZWN0aW9ucyB0byBkaXNhbGxvdyBJUEkgb3BlcmF0aW9ucyAoYW5kIEFNTyBvcGVyYXRpb25zIG9uCisgKiBTaHViIDEuMSBzeXN0ZW1zKS4KKyAqLwordm9pZAoreHBjX3Jlc3RyaWN0X0lQSV9vcHModm9pZCkKK3sKKwlpbnQgbm9kZTsKKwlpbnQgbmFzaWQ7CisKKworCS8vID4+PiBDaGFuZ2UgU0hfSVBJX0FDQ0VTUyBjb2RlIHRvIHVzZSBTQUwgY2FsbCBvbmNlIGl0IGlzIGF2YWlsYWJsZS4KKworCWlmIChpc19zaHViMigpKSB7CisKKwkJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgeworCQkJbmFzaWQgPSBjbm9kZWlkX3RvX25hc2lkKG5vZGUpOworCQkJSFVCX1MoKHU2NCAqKSBHTE9CQUxfTU1SX0FERFIobmFzaWQsIFNIMl9JUElfQUNDRVNTMCksCisJCQkJCQkJeHBjX3NoMl9JUElfYWNjZXNzMCk7CisJCQlIVUJfUygodTY0ICopIEdMT0JBTF9NTVJfQUREUihuYXNpZCwgU0gyX0lQSV9BQ0NFU1MxKSwKKwkJCQkJCQl4cGNfc2gyX0lQSV9hY2Nlc3MxKTsKKwkJCUhVQl9TKCh1NjQgKikgR0xPQkFMX01NUl9BRERSKG5hc2lkLCBTSDJfSVBJX0FDQ0VTUzIpLAorCQkJCQkJCXhwY19zaDJfSVBJX2FjY2VzczIpOworCQkJSFVCX1MoKHU2NCAqKSBHTE9CQUxfTU1SX0FERFIobmFzaWQsIFNIMl9JUElfQUNDRVNTMyksCisJCQkJCQkJeHBjX3NoMl9JUElfYWNjZXNzMyk7CisJCX0KKworCX0gZWxzZSB7CisKKwkJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgeworCQkJbmFzaWQgPSBjbm9kZWlkX3RvX25hc2lkKG5vZGUpOworCQkJSFVCX1MoKHU2NCAqKSBHTE9CQUxfTU1SX0FERFIobmFzaWQsIFNIMV9JUElfQUNDRVNTKSwKKwkJCQkJCQl4cGNfc2gxX0lQSV9hY2Nlc3MpOworCisJCQlpZiAoZW5hYmxlX3NodWJfd2Fyc18xXzEoKSkgeworCQkJCUhVQl9TKCh1NjQgKikgR0xPQkFMX01NUl9BRERSKG5hc2lkLAorCQkJCQkJU0gxX01EX0RRTFBfTU1SX0RJUl9QUklWRUMwKSwKKwkJCQkJCQl4cGNfcHJvdF92ZWNbbm9kZV0pOworCQkJCUhVQl9TKCh1NjQgKikgR0xPQkFMX01NUl9BRERSKG5hc2lkLAorCQkJCQkJU0gxX01EX0RRUlBfTU1SX0RJUl9QUklWRUMwKSwKKwkJCQkJCQl4cGNfcHJvdF92ZWNbbm9kZV0pOworCQkJfQorCQl9CisJfQorfQorCisKKy8qCisgKiBBdCBwZXJpb2RpYyBpbnRlcnZhbHMsIHNjYW4gdGhyb3VnaCBhbGwgYWN0aXZlIHBhcnRpdGlvbnMgYW5kIGVuc3VyZQorICogdGhlaXIgaGVhcnRiZWF0IGlzIHN0aWxsIGFjdGl2ZS4gIElmIG5vdCwgdGhlIHBhcnRpdGlvbiBpcyBkZWFjdGl2YXRlZC4KKyAqLwordm9pZAoreHBjX2NoZWNrX3JlbW90ZV9oYih2b2lkKQoreworCXN0cnVjdCB4cGNfdmFycyAqcmVtb3RlX3ZhcnM7CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQ7CisJcGFydGlkX3QgcGFydGlkOworCWJ0ZV9yZXN1bHRfdCBicmVzOworCisKKwlyZW1vdGVfdmFycyA9IChzdHJ1Y3QgeHBjX3ZhcnMgKikgeHBjX3JlbW90ZV9jb3B5X2J1ZmZlcjsKKworCWZvciAocGFydGlkID0gMTsgcGFydGlkIDwgWFBfTUFYX1BBUlRJVElPTlM7IHBhcnRpZCsrKSB7CisJCWlmIChwYXJ0aWQgPT0gc25fcGFydGl0aW9uX2lkKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCXBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXTsKKworCQlpZiAocGFydC0+YWN0X3N0YXRlID09IFhQQ19QX0lOQUNUSVZFIHx8CisJCQkJcGFydC0+YWN0X3N0YXRlID09IFhQQ19QX0RFQUNUSVZBVElORykgeworCQkJY29udGludWU7CisJCX0KKworCQkvKiBwdWxsIHRoZSByZW1vdGVfaGIgY2FjaGUgbGluZSAqLworCQlicmVzID0geHBfYnRlX2NvcHkocGFydC0+cmVtb3RlX3ZhcnNfcGEsCisJCQkJCWlhNjRfdHBhKCh1NjQpIHJlbW90ZV92YXJzKSwKKwkJCQkJWFBDX1ZBUlNfQUxJR05FRF9TSVpFLAorCQkJCQkoQlRFX05PVElGWSB8IEJURV9XQUNRVUlSRSksIE5VTEwpOworCQlpZiAoYnJlcyAhPSBCVEVfU1VDQ0VTUykgeworCQkJWFBDX0RFQUNUSVZBVEVfUEFSVElUSU9OKHBhcnQsCisJCQkJCQl4cGNfbWFwX2J0ZV9lcnJvcnMoYnJlcykpOworCQkJY29udGludWU7CisJCX0KKworCQlkZXZfZGJnKHhwY19wYXJ0LCAicGFydGlkID0gJWQsIGhlYXJ0YmVhdCA9ICVsZCwgbGFzdF9oZWFydGJlYXQiCisJCQkiID0gJWxkLCBrZGJfc3RhdHVzID0gJWxkLCBIQl9tYXNrID0gMHglbHhcbiIsIHBhcnRpZCwKKwkJCXJlbW90ZV92YXJzLT5oZWFydGJlYXQsIHBhcnQtPmxhc3RfaGVhcnRiZWF0LAorCQkJcmVtb3RlX3ZhcnMtPmtkYl9zdGF0dXMsCisJCQlyZW1vdGVfdmFycy0+aGVhcnRiZWF0aW5nX3RvX21hc2spOworCisJCWlmICgoKHJlbW90ZV92YXJzLT5oZWFydGJlYXQgPT0gcGFydC0+bGFzdF9oZWFydGJlYXQpICYmCisJCQkocmVtb3RlX3ZhcnMtPmtkYl9zdGF0dXMgPT0gMCkpIHx8CisJCQkgICAgICFYUENfSEJfQUxMT1dFRChzbl9wYXJ0aXRpb25faWQsIHJlbW90ZV92YXJzKSkgeworCisJCQlYUENfREVBQ1RJVkFURV9QQVJUSVRJT04ocGFydCwgeHBjTm9IZWFydGJlYXQpOworCQkJY29udGludWU7CisJCX0KKworCQlwYXJ0LT5sYXN0X2hlYXJ0YmVhdCA9IHJlbW90ZV92YXJzLT5oZWFydGJlYXQ7CisJfQorfQorCisKKy8qCisgKiBHZXQgYSBjb3B5IG9mIHRoZSByZW1vdGUgcGFydGl0aW9uJ3MgcnN2ZCBwYWdlLgorICoKKyAqIHJlbW90ZV9ycCBwb2ludHMgdG8gYSBidWZmZXIgdGhhdCBpcyBjYWNoZWxpbmUgYWxpZ25lZCBmb3IgQlRFIGNvcGllcyBhbmQKKyAqIGFzc3VtZWQgdG8gYmUgb2Ygc2l6ZSBYUENfUlNWRF9QQUdFX0FMSUdORURfU0laRS4KKyAqLworc3RhdGljIGVudW0geHBjX3JldHZhbAoreHBjX2dldF9yZW1vdGVfcnAoaW50IG5hc2lkLCB1NjQgKmRpc2NvdmVyZWRfbmFzaWRzLAorCQlzdHJ1Y3QgeHBjX3JzdmRfcGFnZSAqcmVtb3RlX3JwLCB1NjQgKnJlbW90ZV9yc3ZkX3BhZ2VfcGEpCit7CisJaW50IGJyZXMsIGk7CisKKworCS8qIGdldCB0aGUgcmVzZXJ2ZWQgcGFnZSdzIHBoeXNpY2FsIGFkZHJlc3MgKi8KKworCSpyZW1vdGVfcnN2ZF9wYWdlX3BhID0geHBjX2dldF9yc3ZkX3BhZ2VfcGEobmFzaWQsICh1NjQpIHJlbW90ZV9ycCwKKwkJCQkJCVhQQ19SU1ZEX1BBR0VfQUxJR05FRF9TSVpFKTsKKwlpZiAoKnJlbW90ZV9yc3ZkX3BhZ2VfcGEgPT0gMCkgeworCQlyZXR1cm4geHBjTm9Sc3ZkUGFnZUFkZHI7CisJfQorCisKKwkvKiBwdWxsIG92ZXIgdGhlIHJlc2VydmVkIHBhZ2Ugc3RydWN0dXJlICovCisKKwlicmVzID0geHBfYnRlX2NvcHkoKnJlbW90ZV9yc3ZkX3BhZ2VfcGEsIGlhNjRfdHBhKCh1NjQpIHJlbW90ZV9ycCksCisJCQkJWFBDX1JTVkRfUEFHRV9BTElHTkVEX1NJWkUsCisJCQkJKEJURV9OT1RJRlkgfCBCVEVfV0FDUVVJUkUpLCBOVUxMKTsKKwlpZiAoYnJlcyAhPSBCVEVfU1VDQ0VTUykgeworCQlyZXR1cm4geHBjX21hcF9idGVfZXJyb3JzKGJyZXMpOworCX0KKworCisJaWYgKGRpc2NvdmVyZWRfbmFzaWRzICE9IE5VTEwpIHsKKwkJZm9yIChpID0gMDsgaSA8IFhQX05BU0lEX01BU0tfV09SRFM7IGkrKykgeworCQkJZGlzY292ZXJlZF9uYXNpZHNbaV0gfD0gcmVtb3RlX3JwLT5wYXJ0X25hc2lkc1tpXTsKKwkJfQorCX0KKworCisJLyogY2hlY2sgdGhhdCB0aGUgcGFydGlkIGlzIGZvciBhbm90aGVyIHBhcnRpdGlvbiAqLworCisJaWYgKHJlbW90ZV9ycC0+cGFydGlkIDwgMSB8fAorCQkJCXJlbW90ZV9ycC0+cGFydGlkID4gKFhQX01BWF9QQVJUSVRJT05TIC0gMSkpIHsKKwkJcmV0dXJuIHhwY0ludmFsaWRQYXJ0aWQ7CisJfQorCisJaWYgKHJlbW90ZV9ycC0+cGFydGlkID09IHNuX3BhcnRpdGlvbl9pZCkgeworCQlyZXR1cm4geHBjTG9jYWxQYXJ0aWQ7CisJfQorCisKKwlpZiAoWFBDX1ZFUlNJT05fTUFKT1IocmVtb3RlX3JwLT52ZXJzaW9uKSAhPQorCQkJCQlYUENfVkVSU0lPTl9NQUpPUihYUENfUlBfVkVSU0lPTikpIHsKKwkJcmV0dXJuIHhwY0JhZFZlcnNpb247CisJfQorCisJcmV0dXJuIHhwY1N1Y2Nlc3M7Cit9CisKKworLyoKKyAqIEdldCBhIGNvcHkgb2YgdGhlIHJlbW90ZSBwYXJ0aXRpb24ncyBYUEMgdmFyaWFibGVzLgorICoKKyAqIHJlbW90ZV92YXJzIHBvaW50cyB0byBhIGJ1ZmZlciB0aGF0IGlzIGNhY2hlbGluZSBhbGlnbmVkIGZvciBCVEUgY29waWVzIGFuZAorICogYXNzdW1lZCB0byBiZSBvZiBzaXplIFhQQ19WQVJTX0FMSUdORURfU0laRS4KKyAqLworc3RhdGljIGVudW0geHBjX3JldHZhbAoreHBjX2dldF9yZW1vdGVfdmFycyh1NjQgcmVtb3RlX3ZhcnNfcGEsIHN0cnVjdCB4cGNfdmFycyAqcmVtb3RlX3ZhcnMpCit7CisJaW50IGJyZXM7CisKKworCWlmIChyZW1vdGVfdmFyc19wYSA9PSAwKSB7CisJCXJldHVybiB4cGNWYXJzTm90U2V0OworCX0KKworCisJLyogcHVsbCBvdmVyIHRoZSBjcm9zcyBwYXJ0aXRpb24gdmFyaWFibGVzICovCisKKwlicmVzID0geHBfYnRlX2NvcHkocmVtb3RlX3ZhcnNfcGEsIGlhNjRfdHBhKCh1NjQpIHJlbW90ZV92YXJzKSwKKwkJCQlYUENfVkFSU19BTElHTkVEX1NJWkUsCisJCQkJKEJURV9OT1RJRlkgfCBCVEVfV0FDUVVJUkUpLCBOVUxMKTsKKwlpZiAoYnJlcyAhPSBCVEVfU1VDQ0VTUykgeworCQlyZXR1cm4geHBjX21hcF9idGVfZXJyb3JzKGJyZXMpOworCX0KKworCWlmIChYUENfVkVSU0lPTl9NQUpPUihyZW1vdGVfdmFycy0+dmVyc2lvbikgIT0KKwkJCQkJWFBDX1ZFUlNJT05fTUFKT1IoWFBDX1ZfVkVSU0lPTikpIHsKKwkJcmV0dXJuIHhwY0JhZFZlcnNpb247CisJfQorCisJcmV0dXJuIHhwY1N1Y2Nlc3M7Cit9CisKKworLyoKKyAqIFByaW9yIGNvZGUgaGFzIGRldGVybWluZSB0aGUgbmFzaWQgd2hpY2ggZ2VuZXJhdGVkIGFuIElQSS4gIEluc3BlY3QKKyAqIHRoYXQgbmFzaWQgdG8gZGV0ZXJtaW5lIGlmIGl0cyBwYXJ0aXRpb24gbmVlZHMgdG8gYmUgYWN0aXZhdGVkIG9yCisgKiBkZWFjdGl2YXRlZC4KKyAqCisgKiBBIHBhcnRpdGlvbiBpcyBjb25zaWRlciAiYXdhaXRpbmcgYWN0aXZhdGlvbiIgaWYgb3VyIHBhcnRpdGlvbgorICogZmxhZ3MgaW5kaWNhdGUgaXQgaXMgbm90IGFjdGl2ZSBhbmQgaXQgaGFzIGEgaGVhcnRiZWF0LiAgQQorICogcGFydGl0aW9uIGlzIGNvbnNpZGVyZWQgImF3YWl0aW5nIGRlYWN0aXZhdGlvbiIgaWYgb3VyIHBhcnRpdGlvbgorICogZmxhZ3MgaW5kaWNhdGUgaXQgaXMgYWN0aXZlIGJ1dCBpdCBoYXMgbm8gaGVhcnRiZWF0IG9yIGl0IGlzIG5vdAorICogc2VuZGluZyBpdHMgaGVhcnRiZWF0IHRvIHVzLgorICoKKyAqIFRvIGRldGVybWluZSB0aGUgaGVhcnRiZWF0LCB0aGUgcmVtb3RlIG5hc2lkIG11c3QgaGF2ZSBhIHByb3Blcmx5CisgKiBpbml0aWFsaXplZCByZXNlcnZlZCBwYWdlLgorICovCitzdGF0aWMgdm9pZAoreHBjX2lkZW50aWZ5X2FjdF9JUlFfcmVxKGludCBuYXNpZCkKK3sKKwlzdHJ1Y3QgeHBjX3JzdmRfcGFnZSAqcmVtb3RlX3JwOworCXN0cnVjdCB4cGNfdmFycyAqcmVtb3RlX3ZhcnM7CisJdTY0IHJlbW90ZV9yc3ZkX3BhZ2VfcGE7CisJdTY0IHJlbW90ZV92YXJzX3BhOworCXBhcnRpZF90IHBhcnRpZDsKKwlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydDsKKwllbnVtIHhwY19yZXR2YWwgcmV0OworCisKKwkvKiBwdWxsIG92ZXIgdGhlIHJlc2VydmVkIHBhZ2Ugc3RydWN0dXJlICovCisKKwlyZW1vdGVfcnAgPSAoc3RydWN0IHhwY19yc3ZkX3BhZ2UgKikgeHBjX3JlbW90ZV9jb3B5X2J1ZmZlcjsKKworCXJldCA9IHhwY19nZXRfcmVtb3RlX3JwKG5hc2lkLCBOVUxMLCByZW1vdGVfcnAsICZyZW1vdGVfcnN2ZF9wYWdlX3BhKTsKKwlpZiAocmV0ICE9IHhwY1N1Y2Nlc3MpIHsKKwkJZGV2X3dhcm4oeHBjX3BhcnQsICJ1bmFibGUgdG8gZ2V0IHJlc2VydmVkIHBhZ2UgZnJvbSBuYXNpZCAlZCwgIgorCQkJIndoaWNoIHNlbnQgaW50ZXJydXB0LCByZWFzb249JWRcbiIsIG5hc2lkLCByZXQpOworCQlyZXR1cm47CisJfQorCisJcmVtb3RlX3ZhcnNfcGEgPSByZW1vdGVfcnAtPnZhcnNfcGE7CisJcGFydGlkID0gcmVtb3RlX3JwLT5wYXJ0aWQ7CisJcGFydCA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdOworCisKKwkvKiBwdWxsIG92ZXIgdGhlIGNyb3NzIHBhcnRpdGlvbiB2YXJpYWJsZXMgKi8KKworCXJlbW90ZV92YXJzID0gKHN0cnVjdCB4cGNfdmFycyAqKSB4cGNfcmVtb3RlX2NvcHlfYnVmZmVyOworCisJcmV0ID0geHBjX2dldF9yZW1vdGVfdmFycyhyZW1vdGVfdmFyc19wYSwgcmVtb3RlX3ZhcnMpOworCWlmIChyZXQgIT0geHBjU3VjY2VzcykgeworCisJCWRldl93YXJuKHhwY19wYXJ0LCAidW5hYmxlIHRvIGdldCBYUEMgdmFyaWFibGVzIGZyb20gbmFzaWQgJWQsICIKKwkJCSJ3aGljaCBzZW50IGludGVycnVwdCwgcmVhc29uPSVkXG4iLCBuYXNpZCwgcmV0KTsKKworCQlYUENfREVBQ1RJVkFURV9QQVJUSVRJT04ocGFydCwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCisJcGFydC0+YWN0X0lSUV9yY3ZkKys7CisKKwlkZXZfZGJnKHhwY19wYXJ0LCAicGFydGlkIGZvciBuYXNpZCAlZCBpcyAlZDsgSVJRcyA9ICVkOyBIQiA9ICIKKwkJIiVsZDoweCVseFxuIiwgKGludCkgbmFzaWQsIChpbnQpIHBhcnRpZCwgcGFydC0+YWN0X0lSUV9yY3ZkLAorCQlyZW1vdGVfdmFycy0+aGVhcnRiZWF0LCByZW1vdGVfdmFycy0+aGVhcnRiZWF0aW5nX3RvX21hc2spOworCisKKwlpZiAocGFydC0+YWN0X3N0YXRlID09IFhQQ19QX0lOQUNUSVZFKSB7CisKKwkJcGFydC0+cmVtb3RlX3JwX3BhID0gcmVtb3RlX3JzdmRfcGFnZV9wYTsKKwkJZGV2X2RiZyh4cGNfcGFydCwgIiAgcmVtb3RlX3JwX3BhID0gMHglMDE2bHhcbiIsCisJCQlwYXJ0LT5yZW1vdGVfcnBfcGEpOworCisJCXBhcnQtPnJlbW90ZV92YXJzX3BhID0gcmVtb3RlX3ZhcnNfcGE7CisJCWRldl9kYmcoeHBjX3BhcnQsICIgIHJlbW90ZV92YXJzX3BhID0gMHglMDE2bHhcbiIsCisJCQlwYXJ0LT5yZW1vdGVfdmFyc19wYSk7CisKKwkJcGFydC0+bGFzdF9oZWFydGJlYXQgPSByZW1vdGVfdmFycy0+aGVhcnRiZWF0OworCQlkZXZfZGJnKHhwY19wYXJ0LCAiICBsYXN0X2hlYXJ0YmVhdCA9IDB4JTAxNmx4XG4iLAorCQkJcGFydC0+bGFzdF9oZWFydGJlYXQpOworCisJCXBhcnQtPnJlbW90ZV92YXJzX3BhcnRfcGEgPSByZW1vdGVfdmFycy0+dmFyc19wYXJ0X3BhOworCQlkZXZfZGJnKHhwY19wYXJ0LCAiICByZW1vdGVfdmFyc19wYXJ0X3BhID0gMHglMDE2bHhcbiIsCisJCQlwYXJ0LT5yZW1vdGVfdmFyc19wYXJ0X3BhKTsKKworCQlwYXJ0LT5yZW1vdGVfYWN0X25hc2lkID0gcmVtb3RlX3ZhcnMtPmFjdF9uYXNpZDsKKwkJZGV2X2RiZyh4cGNfcGFydCwgIiAgcmVtb3RlX2FjdF9uYXNpZCA9IDB4JXhcbiIsCisJCQlwYXJ0LT5yZW1vdGVfYWN0X25hc2lkKTsKKworCQlwYXJ0LT5yZW1vdGVfYWN0X3BoeXNfY3B1aWQgPSByZW1vdGVfdmFycy0+YWN0X3BoeXNfY3B1aWQ7CisJCWRldl9kYmcoeHBjX3BhcnQsICIgIHJlbW90ZV9hY3RfcGh5c19jcHVpZCA9IDB4JXhcbiIsCisJCQlwYXJ0LT5yZW1vdGVfYWN0X3BoeXNfY3B1aWQpOworCisJCXBhcnQtPnJlbW90ZV9hbW9zX3BhZ2VfcGEgPSByZW1vdGVfdmFycy0+YW1vc19wYWdlX3BhOworCQlkZXZfZGJnKHhwY19wYXJ0LCAiICByZW1vdGVfYW1vc19wYWdlX3BhID0gMHglbHhcbiIsCisJCQlwYXJ0LT5yZW1vdGVfYW1vc19wYWdlX3BhKTsKKworCQl4cGNfYWN0aXZhdGVfcGFydGl0aW9uKHBhcnQpOworCisJfSBlbHNlIGlmIChwYXJ0LT5yZW1vdGVfYW1vc19wYWdlX3BhICE9IHJlbW90ZV92YXJzLT5hbW9zX3BhZ2VfcGEgfHwKKwkJCSFYUENfSEJfQUxMT1dFRChzbl9wYXJ0aXRpb25faWQsIHJlbW90ZV92YXJzKSkgeworCisJCXBhcnQtPnJlYWN0aXZhdGVfbmFzaWQgPSBuYXNpZDsKKwkJWFBDX0RFQUNUSVZBVEVfUEFSVElUSU9OKHBhcnQsIHhwY1JlYWN0aXZhdGluZyk7CisJfQorfQorCisKKy8qCisgKiBMb29wIHRocm91Z2ggdGhlIGFjdGl2YXRpb24gQU1PIHZhcmlhYmxlcyBhbmQgcHJvY2VzcyBhbnkgYml0cworICogd2hpY2ggYXJlIHNldC4gIEVhY2ggYml0IGluZGljYXRlcyBhIG5hc2lkIHNlbmRpbmcgYSBwYXJ0aXRpb24KKyAqIGFjdGl2YXRpb24gb3IgZGVhY3RpdmF0aW9uIHJlcXVlc3QuCisgKgorICogUmV0dXJuICNvZiBJUlFzIGRldGVjdGVkLgorICovCitpbnQKK3hwY19pZGVudGlmeV9hY3RfSVJRX3NlbmRlcih2b2lkKQoreworCWludCB3b3JkLCBiaXQ7CisJdTY0IG5hc2lkX21hc2s7CisJdTY0IG5hc2lkOwkJCS8qIHJlbW90ZSBuYXNpZCAqLworCWludCBuX0lSUXNfZGV0ZWN0ZWQgPSAwOworCUFNT190ICphY3RfYW1vczsKKwlzdHJ1Y3QgeHBjX3JzdmRfcGFnZSAqcnAgPSAoc3RydWN0IHhwY19yc3ZkX3BhZ2UgKikgeHBjX3JzdmRfcGFnZTsKKworCisJYWN0X2Ftb3MgPSB4cGNfdmFycy0+YWN0X2Ftb3M7CisKKworCS8qIHNjYW4gdGhyb3VnaCBhY3QgQU1PIHZhcmlhYmxlIGxvb2tpbmcgZm9yIG5vbi16ZXJvIGVudHJpZXMgKi8KKwlmb3IgKHdvcmQgPSAwOyB3b3JkIDwgWFBfTkFTSURfTUFTS19XT1JEUzsgd29yZCsrKSB7CisKKwkJbmFzaWRfbWFzayA9IHhwY19JUElfcmVjZWl2ZSgmYWN0X2Ftb3Nbd29yZF0pOworCQlpZiAobmFzaWRfbWFzayA9PSAwKSB7CisJCQkvKiBubyBJUlFzIGZyb20gbmFzaWRzIGluIHRoaXMgdmFyaWFibGUgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZGV2X2RiZyh4cGNfcGFydCwgIkFNT1slZF0gZ2F2ZSBiYWNrIDB4JWx4XG4iLCB3b3JkLAorCQkJbmFzaWRfbWFzayk7CisKKworCQkvKgorCQkgKiBJZiB0aGlzIG5hc2lkIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBtYWNoaW5lIHNpbmNlCisJCSAqIG91ciBwYXJ0aXRpb24gd2FzIHJlc2V0LCB0aGlzIHdpbGwgcmV0YWluIHRoZQorCQkgKiByZW1vdGUgbmFzaWQgaW4gb3VyIHJlc2VydmVkIHBhZ2VzIG1hY2hpbmUgbWFzay4KKwkJICogVGhpcyBpcyB1c2VkIGluIHRoZSBldmVudCBvZiBtb2R1bGUgcmVsb2FkLgorCQkgKi8KKwkJcnAtPm1hY2hfbmFzaWRzW3dvcmRdIHw9IG5hc2lkX21hc2s7CisKKworCQkvKiBsb2NhdGUgdGhlIG5hc2lkKHMpIHdoaWNoIHNlbnQgaW50ZXJydXB0cyAqLworCisJCWZvciAoYml0ID0gMDsgYml0IDwgKDggKiBzaXplb2YodTY0KSk7IGJpdCsrKSB7CisJCQlpZiAobmFzaWRfbWFzayAmICgxVUwgPDwgYml0KSkgeworCQkJCW5fSVJRc19kZXRlY3RlZCsrOworCQkJCW5hc2lkID0gWFBDX05BU0lEX0ZST01fV19CKHdvcmQsIGJpdCk7CisJCQkJZGV2X2RiZyh4cGNfcGFydCwgImludGVycnVwdCBmcm9tIG5hc2lkICVsZFxuIiwKKwkJCQkJbmFzaWQpOworCQkJCXhwY19pZGVudGlmeV9hY3RfSVJRX3JlcShuYXNpZCk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIG5fSVJRc19kZXRlY3RlZDsKK30KKworCisvKgorICogTWFyayBzcGVjaWZpZWQgcGFydGl0aW9uIGFzIGFjdGl2ZS4KKyAqLworZW51bSB4cGNfcmV0dmFsCit4cGNfbWFya19wYXJ0aXRpb25fYWN0aXZlKHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0KQoreworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWVudW0geHBjX3JldHZhbCByZXQ7CisKKworCWRldl9kYmcoeHBjX3BhcnQsICJzZXR0aW5nIHBhcnRpdGlvbiAlZCB0byBBQ1RJVkVcbiIsIFhQQ19QQVJUSUQocGFydCkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBhcnQtPmFjdF9sb2NrLCBpcnFfZmxhZ3MpOworCWlmIChwYXJ0LT5hY3Rfc3RhdGUgPT0gWFBDX1BfQUNUSVZBVElORykgeworCQlwYXJ0LT5hY3Rfc3RhdGUgPSBYUENfUF9BQ1RJVkU7CisJCXJldCA9IHhwY1N1Y2Nlc3M7CisJfSBlbHNlIHsKKwkJREJVR19PTihwYXJ0LT5yZWFzb24gPT0geHBjU3VjY2Vzcyk7CisJCXJldCA9IHBhcnQtPnJlYXNvbjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFydC0+YWN0X2xvY2ssIGlycV9mbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBOb3RpZnkgWFBDIHRoYXQgdGhlIHBhcnRpdGlvbiBpcyBkb3duLgorICovCit2b2lkCit4cGNfZGVhY3RpdmF0ZV9wYXJ0aXRpb24oY29uc3QgaW50IGxpbmUsIHN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0LAorCQkJCWVudW0geHBjX3JldHZhbCByZWFzb24pCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJcGFydGlkX3QgcGFydGlkID0gWFBDX1BBUlRJRChwYXJ0KTsKKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBhcnQtPmFjdF9sb2NrLCBpcnFfZmxhZ3MpOworCisJaWYgKHBhcnQtPmFjdF9zdGF0ZSA9PSBYUENfUF9JTkFDVElWRSkgeworCQlYUENfU0VUX1JFQVNPTihwYXJ0LCByZWFzb24sIGxpbmUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwYXJ0LT5hY3RfbG9jaywgaXJxX2ZsYWdzKTsKKwkJaWYgKHJlYXNvbiA9PSB4cGNSZWFjdGl2YXRpbmcpIHsKKwkJCS8qIHdlIGludGVycnVwdCBvdXJzZWx2ZXMgdG8gcmVhY3RpdmF0ZSBwYXJ0aXRpb24gKi8KKwkJCXhwY19JUElfc2VuZF9yZWFjdGl2YXRlKHBhcnQpOworCQl9CisJCXJldHVybjsKKwl9CisJaWYgKHBhcnQtPmFjdF9zdGF0ZSA9PSBYUENfUF9ERUFDVElWQVRJTkcpIHsKKwkJaWYgKChwYXJ0LT5yZWFzb24gPT0geHBjVW5sb2FkaW5nICYmIHJlYXNvbiAhPSB4cGNVbmxvYWRpbmcpIHx8CisJCQkJCXJlYXNvbiA9PSB4cGNSZWFjdGl2YXRpbmcpIHsKKwkJCVhQQ19TRVRfUkVBU09OKHBhcnQsIHJlYXNvbiwgbGluZSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFydC0+YWN0X2xvY2ssIGlycV9mbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlwYXJ0LT5hY3Rfc3RhdGUgPSBYUENfUF9ERUFDVElWQVRJTkc7CisJWFBDX1NFVF9SRUFTT04ocGFydCwgcmVhc29uLCBsaW5lKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBhcnQtPmFjdF9sb2NrLCBpcnFfZmxhZ3MpOworCisJWFBDX0RJU0FMTE9XX0hCKHBhcnRpZCwgeHBjX3ZhcnMpOworCisJZGV2X2RiZyh4cGNfcGFydCwgImJyaW5naW5nIHBhcnRpdGlvbiAlZCBkb3duLCByZWFzb24gPSAlZFxuIiwgcGFydGlkLAorCQlyZWFzb24pOworCisJeHBjX3BhcnRpdGlvbl9kb3duKHBhcnQsIHJlYXNvbik7Cit9CisKKworLyoKKyAqIE1hcmsgc3BlY2lmaWVkIHBhcnRpdGlvbiBhcyBhY3RpdmUuCisgKi8KK3ZvaWQKK3hwY19tYXJrX3BhcnRpdGlvbl9pbmFjdGl2ZShzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCkKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCisJZGV2X2RiZyh4cGNfcGFydCwgInNldHRpbmcgcGFydGl0aW9uICVkIHRvIElOQUNUSVZFXG4iLAorCQlYUENfUEFSVElEKHBhcnQpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwYXJ0LT5hY3RfbG9jaywgaXJxX2ZsYWdzKTsKKwlwYXJ0LT5hY3Rfc3RhdGUgPSBYUENfUF9JTkFDVElWRTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwYXJ0LT5hY3RfbG9jaywgaXJxX2ZsYWdzKTsKKwlwYXJ0LT5yZW1vdGVfcnBfcGEgPSAwOworfQorCisKKy8qCisgKiBTQUwgaGFzIHByb3ZpZGVkIGEgcGFydGl0aW9uIGFuZCBtYWNoaW5lIG1hc2suICBUaGUgcGFydGl0aW9uIG1hc2sKKyAqIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIGV2ZW4gbmFzaWQgaW4gb3VyIHBhcnRpdGlvbi4gIFRoZSBtYWNoaW5lCisgKiBtYXNrIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIGV2ZW4gbmFzaWQgaW4gdGhlIGVudGlyZSBtYWNoaW5lLgorICoKKyAqIFVzaW5nIHRob3NlIHR3byBiaXQgYXJyYXlzLCB3ZSBjYW4gZGV0ZXJtaW5lIHdoaWNoIG5hc2lkcyBhcmUKKyAqIGtub3duIGluIHRoZSBtYWNoaW5lLiAgRWFjaCBzaG91bGQgYWxzbyBoYXZlIGEgcmVzZXJ2ZWQgcGFnZQorICogaW5pdGlhbGl6ZWQgaWYgdGhleSBhcmUgYXZhaWxhYmxlIGZvciBwYXJ0aXRpb25pbmcuCisgKi8KK3ZvaWQKK3hwY19kaXNjb3Zlcnkodm9pZCkKK3sKKwl2b2lkICpyZW1vdGVfcnBfYmFzZTsKKwlzdHJ1Y3QgeHBjX3JzdmRfcGFnZSAqcmVtb3RlX3JwOworCXN0cnVjdCB4cGNfdmFycyAqcmVtb3RlX3ZhcnM7CisJdTY0IHJlbW90ZV9yc3ZkX3BhZ2VfcGE7CisJdTY0IHJlbW90ZV92YXJzX3BhOworCWludCByZWdpb247CisJaW50IG1heF9yZWdpb25zOworCWludCBuYXNpZDsKKwlzdHJ1Y3QgeHBjX3JzdmRfcGFnZSAqcnA7CisJcGFydGlkX3QgcGFydGlkOworCXN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0OworCXU2NCAqZGlzY292ZXJlZF9uYXNpZHM7CisJZW51bSB4cGNfcmV0dmFsIHJldDsKKworCisJcmVtb3RlX3JwID0geHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoWFBDX1JTVkRfUEFHRV9BTElHTkVEX1NJWkUsCisJCQkJCQlHRlBfS0VSTkVMLCAmcmVtb3RlX3JwX2Jhc2UpOworCWlmIChyZW1vdGVfcnAgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCXJlbW90ZV92YXJzID0gKHN0cnVjdCB4cGNfdmFycyAqKSByZW1vdGVfcnA7CisKKworCWRpc2NvdmVyZWRfbmFzaWRzID0ga21hbGxvYyhzaXplb2YodTY0KSAqIFhQX05BU0lEX01BU0tfV09SRFMsCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKGRpc2NvdmVyZWRfbmFzaWRzID09IE5VTEwpIHsKKwkJa2ZyZWUocmVtb3RlX3JwX2Jhc2UpOworCQlyZXR1cm47CisJfQorCW1lbXNldChkaXNjb3ZlcmVkX25hc2lkcywgMCwgc2l6ZW9mKHU2NCkgKiBYUF9OQVNJRF9NQVNLX1dPUkRTKTsKKworCXJwID0gKHN0cnVjdCB4cGNfcnN2ZF9wYWdlICopIHhwY19yc3ZkX3BhZ2U7CisKKwkvKgorCSAqIFRoZSB0ZXJtICdyZWdpb24nIGluIHRoaXMgY29udGV4dCByZWZlcnMgdG8gdGhlIG1pbmltdW0gbnVtYmVyIG9mCisJICogbm9kZXMgdGhhdCBjYW4gY29tcHJpc2UgYW4gYWNjZXNzIHByb3RlY3Rpb24gZ3JvdXBpbmcuIFRoZSBhY2Nlc3MKKwkgKiBwcm90ZWN0aW9uIGlzIGluIHJlZ2FyZHMgdG8gbWVtb3J5LCBJT0kgYW5kIElQSS4KKwkgKi8KKy8vPj4+IG1vdmUgdGhlIG5leHQgdHdvICNkZWZpbmVzIGludG8gZWl0aGVyIGluY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oIG9yCisvLz4+PiBpbmNsdWRlL2FzbS1pYTY0L3NuL2FkZHJzLmgKKyNkZWZpbmUgU0gxX01BWF9SRUdJT05TCQk2NAorI2RlZmluZSBTSDJfTUFYX1JFR0lPTlMJCTI1NgorCW1heF9yZWdpb25zID0gaXNfc2h1YjIoKSA/IFNIMl9NQVhfUkVHSU9OUyA6IFNIMV9NQVhfUkVHSU9OUzsKKworCWZvciAocmVnaW9uID0gMDsgcmVnaW9uIDwgbWF4X3JlZ2lvbnM7IHJlZ2lvbisrKSB7CisKKwkJaWYgKCh2b2xhdGlsZSBpbnQpIHhwY19leGl0aW5nKSB7CisJCQlicmVhazsKKwkJfQorCisJCWRldl9kYmcoeHBjX3BhcnQsICJzZWFyY2hpbmcgcmVnaW9uICVkXG4iLCByZWdpb24pOworCisJCWZvciAobmFzaWQgPSAocmVnaW9uICogc25fcmVnaW9uX3NpemUgKiAyKTsKKwkJICAgICBuYXNpZCA8ICgocmVnaW9uICsgMSkgKiBzbl9yZWdpb25fc2l6ZSAqIDIpOworCQkgICAgIG5hc2lkICs9IDIpIHsKKworCQkJaWYgKCh2b2xhdGlsZSBpbnQpIHhwY19leGl0aW5nKSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWRldl9kYmcoeHBjX3BhcnQsICJjaGVja2luZyBuYXNpZCAlZFxuIiwgbmFzaWQpOworCisKKwkJCWlmIChYUENfTkFTSURfSU5fQVJSQVkobmFzaWQsIHJwLT5wYXJ0X25hc2lkcykpIHsKKwkJCQlkZXZfZGJnKHhwY19wYXJ0LCAiUFJPTSBpbmRpY2F0ZXMgTmFzaWQgJWQgaXMgIgorCQkJCQkicGFydCBvZiB0aGUgbG9jYWwgcGFydGl0aW9uOyBza2lwcGluZyAiCisJCQkJCSJyZWdpb25cbiIsIG5hc2lkKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKCEoWFBDX05BU0lEX0lOX0FSUkFZKG5hc2lkLCBycC0+bWFjaF9uYXNpZHMpKSkgeworCQkJCWRldl9kYmcoeHBjX3BhcnQsICJQUk9NIGluZGljYXRlcyBOYXNpZCAlZCB3YXMgIgorCQkJCQkibm90IG9uIE51bWEtTGluayBuZXR3b3JrIGF0IHJlc2V0XG4iLAorCQkJCQluYXNpZCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChYUENfTkFTSURfSU5fQVJSQVkobmFzaWQsIGRpc2NvdmVyZWRfbmFzaWRzKSkgeworCQkJCWRldl9kYmcoeHBjX3BhcnQsICJOYXNpZCAlZCBpcyBwYXJ0IG9mIGEgIgorCQkJCQkicGFydGl0aW9uIHdoaWNoIHdhcyBwcmV2aW91c2x5ICIKKwkJCQkJImRpc2NvdmVyZWRcbiIsIG5hc2lkKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCisJCQkvKiBwdWxsIG92ZXIgdGhlIHJlc2VydmVkIHBhZ2Ugc3RydWN0dXJlICovCisKKwkJCXJldCA9IHhwY19nZXRfcmVtb3RlX3JwKG5hc2lkLCBkaXNjb3ZlcmVkX25hc2lkcywKKwkJCQkJICAgICAgcmVtb3RlX3JwLCAmcmVtb3RlX3JzdmRfcGFnZV9wYSk7CisJCQlpZiAocmV0ICE9IHhwY1N1Y2Nlc3MpIHsKKwkJCQlkZXZfZGJnKHhwY19wYXJ0LCAidW5hYmxlIHRvIGdldCByZXNlcnZlZCBwYWdlICIKKwkJCQkJImZyb20gbmFzaWQgJWQsIHJlYXNvbj0lZFxuIiwgbmFzaWQsCisJCQkJCXJldCk7CisKKwkJCQlpZiAocmV0ID09IHhwY0xvY2FsUGFydGlkKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJcmVtb3RlX3ZhcnNfcGEgPSByZW1vdGVfcnAtPnZhcnNfcGE7CisKKwkJCXBhcnRpZCA9IHJlbW90ZV9ycC0+cGFydGlkOworCQkJcGFydCA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdOworCisKKwkJCS8qIHB1bGwgb3ZlciB0aGUgY3Jvc3MgcGFydGl0aW9uIHZhcmlhYmxlcyAqLworCisJCQlyZXQgPSB4cGNfZ2V0X3JlbW90ZV92YXJzKHJlbW90ZV92YXJzX3BhLCByZW1vdGVfdmFycyk7CisJCQlpZiAocmV0ICE9IHhwY1N1Y2Nlc3MpIHsKKwkJCQlkZXZfZGJnKHhwY19wYXJ0LCAidW5hYmxlIHRvIGdldCBYUEMgdmFyaWFibGVzICIKKwkJCQkJImZyb20gbmFzaWQgJWQsIHJlYXNvbj0lZFxuIiwgbmFzaWQsCisJCQkJCXJldCk7CisKKwkJCQlYUENfREVBQ1RJVkFURV9QQVJUSVRJT04ocGFydCwgcmV0KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHBhcnQtPmFjdF9zdGF0ZSAhPSBYUENfUF9JTkFDVElWRSkgeworCQkJCWRldl9kYmcoeHBjX3BhcnQsICJwYXJ0aXRpb24gJWQgb24gbmFzaWQgJWQgaXMgIgorCQkJCQkiYWxyZWFkeSBhY3RpdmF0aW5nXG4iLCBwYXJ0aWQsIG5hc2lkKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFJlZ2lzdGVyIHRoZSByZW1vdGUgcGFydGl0aW9uJ3MgQU1PcyB3aXRoIFNBTCBzbyBpdAorCQkJICogY2FuIGhhbmRsZSBhbmQgY2xlYW51cCBlcnJvcnMgd2l0aGluIHRoYXQgYWRkcmVzcworCQkJICogcmFuZ2Ugc2hvdWxkIHRoZSByZW1vdGUgcGFydGl0aW9uIGdvIGRvd24uIFdlIGRvbid0CisJCQkgKiB1bnJlZ2lzdGVyIHRoaXMgcmFuZ2UgYmVjYXVzZSBpdCBpcyBkaWZmaWN1bHQgdG8KKwkJCSAqIHRlbGwgd2hlbiBvdXRzdGFuZGluZyB3cml0ZXMgdG8gdGhlIHJlbW90ZSBwYXJ0aXRpb24KKwkJCSAqIGFyZSBmaW5pc2hlZCBhbmQgdGh1cyB3aGVuIGl0IGlzIHRodXMgc2FmZSB0bworCQkJICogdW5yZWdpc3Rlci4gVGhpcyBzaG91bGQgbm90IHJlc3VsdCBpbiB3YXN0ZWQgc3BhY2UKKwkJCSAqIGluIHRoZSBTQUwgeHBfYWRkcl9yZWdpb24gdGFibGUgYmVjYXVzZSB3ZSBzaG91bGQKKwkJCSAqIGdldCB0aGUgc2FtZSBwYWdlIGZvciByZW1vdGVfYWN0X2Ftb3NfcGEgYWZ0ZXIKKwkJCSAqIG1vZHVsZSByZWxvYWRzIGFuZCBzeXN0ZW0gcmVib290cy4KKwkJCSAqLworCQkJaWYgKHNuX3JlZ2lzdGVyX3hwX2FkZHJfcmVnaW9uKAorCQkJCQkgICAgcmVtb3RlX3ZhcnMtPmFtb3NfcGFnZV9wYSwKKwkJCQkJCQlQQUdFX1NJWkUsIDEpIDwgMCkgeworCQkJCWRldl9kYmcoeHBjX3BhcnQsICJwYXJ0aXRpb24gJWQgZmFpbGVkIHRvICIKKwkJCQkJInJlZ2lzdGVyIHhwX2FkZHIgcmVnaW9uIDB4JTAxNmx4XG4iLAorCQkJCQlwYXJ0aWQsIHJlbW90ZV92YXJzLT5hbW9zX3BhZ2VfcGEpOworCisJCQkJWFBDX1NFVF9SRUFTT04ocGFydCwgeHBjUGh5c0FkZHJSZWdGYWlsZWQsCisJCQkJCQlfX0xJTkVfXyk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkgKiBUaGUgcmVtb3RlIG5hc2lkIGlzIHZhbGlkIGFuZCBhdmFpbGFibGUuCisJCQkgKiBTZW5kIGFuIGludGVycnVwdCB0byB0aGF0IG5hc2lkIHRvIG5vdGlmeQorCQkJICogaXQgdGhhdCB3ZSBhcmUgcmVhZHkgdG8gYmVnaW4gYWN0aXZhdGlvbi4KKwkJCSAqLworCQkJZGV2X2RiZyh4cGNfcGFydCwgInNlbmRpbmcgYW4gaW50ZXJydXB0IHRvIEFNTyAweCVseCwgIgorCQkJCSJuYXNpZCAlZCwgcGh5c19jcHVpZCAweCV4XG4iLAorCQkJCXJlbW90ZV92YXJzLT5hbW9zX3BhZ2VfcGEsCisJCQkJcmVtb3RlX3ZhcnMtPmFjdF9uYXNpZCwKKwkJCQlyZW1vdGVfdmFycy0+YWN0X3BoeXNfY3B1aWQpOworCisJCQl4cGNfSVBJX3NlbmRfYWN0aXZhdGUocmVtb3RlX3ZhcnMpOworCQl9CisJfQorCisJa2ZyZWUoZGlzY292ZXJlZF9uYXNpZHMpOworCWtmcmVlKHJlbW90ZV9ycF9iYXNlKTsKK30KKworCisvKgorICogR2l2ZW4gYSBwYXJ0aWQsIGdldCB0aGUgbmFzaWRzIG93bmVkIGJ5IHRoYXQgcGFydGl0aW9uIGZyb20gdGhlCisgKiByZW1vdGUgcGFydGl0aW9uJ3MgcmVzZXJ2ZWQgcGFnZS4KKyAqLworZW51bSB4cGNfcmV0dmFsCit4cGNfaW5pdGlhdGVfcGFydGlkX3RvX25hc2lkcyhwYXJ0aWRfdCBwYXJ0aWQsIHZvaWQgKm5hc2lkX21hc2spCit7CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQ7CisJdTY0IHBhcnRfbmFzaWRfcGE7CisJaW50IGJ0ZV9yZXM7CisKKworCXBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXTsKKwlpZiAocGFydC0+cmVtb3RlX3JwX3BhID09IDApIHsKKwkJcmV0dXJuIHhwY1BhcnRpdGlvbkRvd247CisJfQorCisJcGFydF9uYXNpZF9wYSA9IHBhcnQtPnJlbW90ZV9ycF9wYSArCisJCSh1NjQpICYoKHN0cnVjdCB4cGNfcnN2ZF9wYWdlICopIDApLT5wYXJ0X25hc2lkczsKKworCWJ0ZV9yZXMgPSB4cF9idGVfY29weShwYXJ0X25hc2lkX3BhLCBpYTY0X3RwYSgodTY0KSBuYXNpZF9tYXNrKSwKKwkJCQlMMV9DQUNIRV9BTElHTihYUF9OQVNJRF9NQVNLX0JZVEVTKSwKKwkJCQkoQlRFX05PVElGWSB8IEJURV9XQUNRVUlSRSksIE5VTEwpOworCisJcmV0dXJuIHhwY19tYXBfYnRlX2Vycm9ycyhidGVfcmVzKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cG5ldC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cG5ldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzEzZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwbmV0LmMKQEAgLTAsMCArMSw3MTUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMS0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisKKy8qCisgKiBDcm9zcyBQYXJ0aXRpb24gTmV0d29yayBJbnRlcmZhY2UgKFhQTkVUKSBzdXBwb3J0CisgKgorICoJWFBORVQgcHJvdmlkZXMgYSB2aXJ0dWFsIG5ldHdvcmsgbGF5ZXJlZCBvbiB0b3Agb2YgdGhlIENyb3NzCisgKglQYXJ0aXRpb24gY29tbXVuaWNhdGlvbiBsYXllci4KKyAqCisgKglYUE5FVCBwcm92aWRlcyBkaXJlY3QgcG9pbnQtdG8tcG9pbnQgYW5kIGJyb2FkY2FzdC1saWtlIHN1cHBvcnQKKyAqCWZvciBhbiBldGhlcm5ldC1saWtlIGRldmljZS4gIFRoZSBldGhlcm5ldCBicm9hZGNhc3QgbWVkaXVtIGlzCisgKglyZXBsYWNlZCB3aXRoIGEgcG9pbnQtdG8tcG9pbnQgbWVzc2FnZSBzdHJ1Y3R1cmUgd2hpY2ggcGFzc2VzCisgKglwb2ludGVycyB0byBhIERNQS1jYXBhYmxlIGJsb2NrIHRoYXQgYSByZW1vdGUgcGFydGl0aW9uIHNob3VsZAorICoJcmV0cmlldmUgYW5kIHBhc3MgdG8gdGhlIHVwcGVyIGxldmVsIG5ldHdvcmtpbmcgbGF5ZXIuCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9zbi9idGUuaD4KKyNpbmNsdWRlIDxhc20vc24vaW8uaD4KKyNpbmNsdWRlIDxhc20vc24vc25fc2FsLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9zbi94cC5oPgorCisKKy8qCisgKiBUaGUgbWVzc2FnZSBwYXlsb2FkIHRyYW5zZmVycmVkIGJ5IFhQQy4KKyAqCisgKiBidWZfcGEgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgd2hlcmUgdGhlIERNQSBzaG91bGQgcHVsbCBmcm9tLgorICoKKyAqIE5PVEU6IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBidWZfcGEgc2hvdWxkIF9BTFdBWVNfIGJlZ2luIG9uIGEKKyAqIGNhY2hlbGluZSBib3VuZGFyeS4gIFRvIGFjY29tcGxpc2ggdGhpcywgd2UgcmVjb3JkIHRoZSBudW1iZXIgb2YKKyAqIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgY2FjaGVsaW5lIHRvIHRoZSBmaXJzdCB1c2VmdWwKKyAqIGJ5dGUgb2YgdGhlIHNrYiAobGVhZGluX2lnbm9yZSkgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUKKyAqIGxhc3QgdXNlZnVsIGJ5dGUgb2YgdGhlIHNrYiB0byB0aGUgZW5kIG9mIHRoZSBsYXN0IGNhY2hlbGluZQorICogKHRhaWxvdXRfaWdub3JlKS4KKyAqCisgKiBzaXplIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgd2hpY2ggaW5jbHVkZXMgdGhlIHNrYi0+bGVuCisgKiAodXNlZnVsIGJ5dGVzIG9mIHRoZSBzZW5kZXJzIHNrYikgcGx1cyB0aGUgbGVhZGluIGFuZCB0YWlsb3V0CisgKi8KK3N0cnVjdCB4cG5ldF9tZXNzYWdlIHsKKwl1MTYgdmVyc2lvbjsJCS8qIFZlcnNpb24gZm9yIHRoaXMgbWVzc2FnZSAqLworCXUxNiBlbWJlZGRlZF9ieXRlczsJLyogI29mIGJ5dGVzIGVtYmVkZGVkIGluIFhQQyBtZXNzYWdlICovCisJdTMyIG1hZ2ljOwkJLyogU3BlY2lhbCBudW1iZXIgaW5kaWNhdGluZyB0aGlzIGlzIHhwbmV0ICovCisJdTY0IGJ1Zl9wYTsJCS8qIHBoeXMgYWRkcmVzcyBvZiBidWZmZXIgdG8gcmV0cmlldmUgKi8KKwl1MzIgc2l6ZTsJCS8qICNvZiBieXRlcyBpbiBidWZmZXIgKi8KKwl1OCBsZWFkaW5faWdub3JlOwkvKiAjb2YgYnl0ZXMgdG8gaWdub3JlIGF0IHRoZSBiZWdpbm5pbmcgKi8KKwl1OCB0YWlsb3V0X2lnbm9yZTsJLyogI29mIGJ5dGVzIHRvIGlnbm9yZSBhdCB0aGUgZW5kICovCisJdW5zaWduZWQgY2hhciBkYXRhOwkvKiBib2R5IG9mIHNtYWxsIHBhY2tldHMgKi8KK307CisKKy8qCisgKiBEZXRlcm1pbmUgdGhlIHNpemUgb2Ygb3VyIG1lc3NhZ2UsIHRoZSBjYWNoZWxpbmUgYWxpZ25lZCBzaXplLAorICogYW5kIHRoZW4gdGhlIG51bWJlciBvZiBtZXNzYWdlIHdpbGwgcmVxdWVzdCBmcm9tIFhQQy4KKyAqCisgKiBYUEMgZXhwZWN0cyBlYWNoIG1lc3NhZ2UgdG8gZXhpc3QgaW4gYW4gaW5kaXZpZHVhbCBjYWNoZWxpbmUuCisgKi8KKyNkZWZpbmUgWFBORVRfTVNHX1NJWkUJCShMMV9DQUNIRV9CWVRFUyAtIFhQQ19NU0dfUEFZTE9BRF9PRkZTRVQpCisjZGVmaW5lIFhQTkVUX01TR19EQVRBX01BWAlcCisJCShYUE5FVF9NU0dfU0laRSAtICh1NjQpKCYoKHN0cnVjdCB4cG5ldF9tZXNzYWdlICopMCktPmRhdGEpKQorI2RlZmluZSBYUE5FVF9NU0dfQUxJR05FRF9TSVpFCShMMV9DQUNIRV9BTElHTihYUE5FVF9NU0dfU0laRSkpCisjZGVmaW5lIFhQTkVUX01TR19ORU5UUklFUwkoUEFHRV9TSVpFIC8gWFBORVRfTVNHX0FMSUdORURfU0laRSkKKworCisjZGVmaW5lIFhQTkVUX01BWF9LVEhSRUFEUwkoWFBORVRfTVNHX05FTlRSSUVTICsgMSkKKyNkZWZpbmUgWFBORVRfTUFYX0lETEVfS1RIUkVBRFMJKFhQTkVUX01TR19ORU5UUklFUyArIDEpCisKKy8qCisgKiBWZXJzaW9uIG51bWJlciBvZiBYUE5FVCBpbXBsZW1lbnRhdGlvbi4gWFBORVQgY2FuIGFsd2F5cyB0YWxrIHRvIHZlcnNpb25zCisgKiB3aXRoIHNhbWUgbWFqb3IgIywgYW5kIG5ldmVyIHRhbGsgdG8gdmVyc2lvbnMgd2l0aCBhIGRpZmZlcmVudCB2ZXJzaW9uLgorICovCisjZGVmaW5lIF9YUE5FVF9WRVJTSU9OKF9tYWpvciwgX21pbm9yKQkoKChfbWFqb3IpIDw8IDQpIHwgKF9taW5vcikpCisjZGVmaW5lIFhQTkVUX1ZFUlNJT05fTUFKT1IoX3YpCQkoKF92KSA+PiA0KQorI2RlZmluZSBYUE5FVF9WRVJTSU9OX01JTk9SKF92KQkJKChfdikgJiAweGYpCisKKyNkZWZpbmUJWFBORVRfVkVSU0lPTiBfWFBORVRfVkVSU0lPTigxLDApCQkvKiB2ZXJzaW9uIDEuMCAqLworI2RlZmluZQlYUE5FVF9WRVJTSU9OX0VNQkVEIF9YUE5FVF9WRVJTSU9OKDEsMSkJCS8qIHZlcnNpb24gMS4xICovCisjZGVmaW5lIFhQTkVUX01BR0lDCTB4ODg3ODY5ODQgLyogIlhORVQiICovCisKKyNkZWZpbmUgWFBORVRfVkFMSURfTVNHKF9tKQkJCQkJCSAgICAgXAorICAgKChYUE5FVF9WRVJTSU9OX01BSk9SKF9tLT52ZXJzaW9uKSA9PSBYUE5FVF9WRVJTSU9OX01BSk9SKFhQTkVUX1ZFUlNJT04pKSBcCisgICAgJiYgKG1zZy0+bWFnaWMgPT0gWFBORVRfTUFHSUMpKQorCisjZGVmaW5lIFhQTkVUX0RFVklDRV9OQU1FCQkieHAwIgorCisKKy8qCisgKiBXaGVuIG1lc3NhZ2VzIGFyZSBxdWV1ZWQgd2l0aCB4cGNfc2VuZF9ub3RpZnksIGEga21hbGxvYydkIGJ1ZmZlcgorICogb2YgdGhlIGZvbGxvd2luZyB0eXBlIGlzIHBhc3NlZCBhcyBhIG5vdGlmaWNhdGlvbiBjb29raWUuICBXaGVuIHRoZQorICogbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2UgdXNlIHRoZSBjb29raWUgdG8gZGVjaWRlCisgKiB3aGV0aGVyIGFsbCBvdXRzdGFuZGluZyBtZXNzYWdlIHNlbmRzIGhhdmUgY29tcGxldGVkLiAgVGhlIHNrYiBjYW4KKyAqIHRoZW4gYmUgcmVsZWFzZWQuCisgKi8KK3N0cnVjdCB4cG5ldF9wZW5kaW5nX21zZyB7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlhdG9taWNfdCB1c2VfY291bnQ7Cit9OworCisvKiBkcml2ZXIgc3BlY2lmaWMgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCB4cG5ldF9kZXZfcHJpdmF0ZSB7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Cit9OworCitzdHJ1Y3QgbmV0X2RldmljZSAqeHBuZXRfZGV2aWNlOworCisvKgorICogV2hlbiB3ZSBhcmUgbm90aWZpZWQgb2Ygb3RoZXIgcGFydGl0aW9ucyBhY3RpdmF0aW5nLCB3ZSBhZGQgdGhlbSB0bworICogb3VyIGJpdG1hc2sgb2YgcGFydGl0aW9ucyB0byB3aGljaCB3ZSBicm9hZGNhc3QuCisgKi8KK3N0YXRpYyB1NjQgeHBuZXRfYnJvYWRjYXN0X3BhcnRpdGlvbnM7CisvKiBwcm90ZWN0IGFib3ZlICovCitzdGF0aWMgc3BpbmxvY2tfdCB4cG5ldF9icm9hZGNhc3RfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKworLyoKKyAqIFNpbmNlIHRoZSBCbG9jayBUcmFuc2ZlciBFbmdpbmUgKEJURSkgaXMgYmVpbmcgdXNlZCBmb3IgdGhlIHRyYW5zZmVyCisgKiBhbmQgaXQgcmVsaWVzIHVwb24gY2FjaGUtbGluZSBzaXplIHRyYW5zZmVycywgd2UgbmVlZCB0byByZXNlcnZlIGF0CisgKiBsZWFzdCBvbmUgY2FjaGUtbGluZSBmb3IgaGVhZCBhbmQgdGFpbCBhbGlnbm1lbnQuICBUaGUgQlRFIGlzCisgKiBsaW1pdGVkIHRvIDhNQiB0cmFuc2ZlcnMuCisgKgorICogVGVzdGluZyBoYXMgc2hvd24gdGhhdCBjaGFuZ2luZyBNVFUgdG8gZ3JlYXRlciB0aGFuIDY0S0IgaGFzIG5vIGVmZmVjdAorICogb24gVENQIGFzIHRoZSB0d28gc2lkZXMgbmVnb3RpYXRlIGEgTWF4IFNlZ21lbnQgU2l6ZSB0aGF0IGlzIGxpbWl0ZWQKKyAqIHRvIDY0Sy4gIE90aGVyIHByb3RvY29scyBNYXkgdXNlIHBhY2tldHMgZ3JlYXRlciB0aGFuIHRoaXMsIGJ1dCBmb3IKKyAqIG5vdywgdGhlIGRlZmF1bHQgaXMgNjRLQi4KKyAqLworI2RlZmluZSBYUE5FVF9NQVhfTVRVICgweDgwMDAwMFVMIC0gTDFfQ0FDSEVfQllURVMpCisvKiAzMktCIGhhcyBiZWVuIGRldGVybWluZWQgdG8gYmUgdGhlIGlkZWFsICovCisjZGVmaW5lIFhQTkVUX0RFRl9NVFUgKDB4ODAwMFVMKQorCisKKy8qCisgKiBUaGUgcGFydGl0aW9uIGlkIGlzIGVuY2Fwc3VsYXRlZCBpbiB0aGUgTUFDIGFkZHJlc3MuICBUaGUgZm9sbG93aW5nCisgKiBkZWZpbmUgbG9jYXRlcyB0aGUgb2N0ZXQgdGhlIHBhcnRpZCBpcyBpbi4KKyAqLworI2RlZmluZSBYUE5FVF9QQVJUSURfT0NURVQJMQorI2RlZmluZSBYUE5FVF9MSUNFTlNFX09DVEVUCTIKKworCisvKgorICogRGVmaW5lIHRoZSBYUE5FVCBkZWJ1ZyBkZXZpY2Ugc3RydWN0dXJlIHRoYXQgaXMgdG8gYmUgdXNlZCB3aXRoIGRldl9kYmcoKSwKKyAqIGRldl9lcnIoKSwgZGV2X3dhcm4oKSwgYW5kIGRldl9pbmZvKCkuCisgKi8KK3N0cnVjdCBkZXZpY2VfZHJpdmVyIHhwbmV0X2RiZ19uYW1lID0geworCS5uYW1lID0gInhwbmV0IgorfTsKKworc3RydWN0IGRldmljZSB4cG5ldF9kYmdfc3VibmFtZSA9IHsKKwkuYnVzX2lkID0gezB9LAkJCS8qIHNldCB0byAiIiAqLworCS5kcml2ZXIgPSAmeHBuZXRfZGJnX25hbWUKK307CisKK3N0cnVjdCBkZXZpY2UgKnhwbmV0ID0gJnhwbmV0X2RiZ19zdWJuYW1lOworCisvKgorICogUGFja2V0IHdhcyByZWNldmllZCBieSBYUEMgYW5kIGZvcndhcmRlZCB0byB1cy4KKyAqLworc3RhdGljIHZvaWQKK3hwbmV0X3JlY2VpdmUocGFydGlkX3QgcGFydGlkLCBpbnQgY2hhbm5lbCwgc3RydWN0IHhwbmV0X21lc3NhZ2UgKm1zZykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWJ0ZV9yZXN1bHRfdCBicmV0OworCXN0cnVjdCB4cG5ldF9kZXZfcHJpdmF0ZSAqcHJpdiA9CisJCShzdHJ1Y3QgeHBuZXRfZGV2X3ByaXZhdGUgKikgeHBuZXRfZGV2aWNlLT5wcml2OworCisKKwlpZiAoIVhQTkVUX1ZBTElEX01TRyhtc2cpKSB7CisJCS8qCisJCSAqIFBhY2tldCB3aXRoIGEgZGlmZmVyZW50IFhQQyB2ZXJzaW9uLiAgSWdub3JlLgorCQkgKi8KKwkJeHBjX3JlY2VpdmVkKHBhcnRpZCwgY2hhbm5lbCwgKHZvaWQgKikgbXNnKTsKKworCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKworCQlyZXR1cm47CisJfQorCWRldl9kYmcoeHBuZXQsICJyZWNlaXZlZCAweCVseCwgJWQsICVkLCAlZFxuIiwgbXNnLT5idWZfcGEsIG1zZy0+c2l6ZSwKKwkJbXNnLT5sZWFkaW5faWdub3JlLCBtc2ctPnRhaWxvdXRfaWdub3JlKTsKKworCisJLyogcmVzZXJ2ZSBhbiBleHRyYSBjYWNoZSBsaW5lICovCisJc2tiID0gZGV2X2FsbG9jX3NrYihtc2ctPnNpemUgKyBMMV9DQUNIRV9CWVRFUyk7CisJaWYgKCFza2IpIHsKKwkJZGV2X2Vycih4cG5ldCwgImZhaWxlZCBvbiBkZXZfYWxsb2Nfc2tiKCVkKVxuIiwKKwkJCW1zZy0+c2l6ZSArIEwxX0NBQ0hFX0JZVEVTKTsKKworCQl4cGNfcmVjZWl2ZWQocGFydGlkLCBjaGFubmVsLCAodm9pZCAqKSBtc2cpOworCisJCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFRoZSBhbGxvY2F0ZWQgc2tiIGhhcyBzb21lIHJlc2VydmVkIHNwYWNlLgorCSAqIEluIG9yZGVyIHRvIHVzZSBidGVfY29weSwgd2UgbmVlZCB0byBnZXQgdGhlCisJICogc2tiLT5kYXRhIHBvaW50ZXIgbW92ZWQgZm9yd2FyZC4KKwkgKi8KKwlza2JfcmVzZXJ2ZShza2IsIChMMV9DQUNIRV9CWVRFUyAtICgodTY0KXNrYi0+ZGF0YSAmCisJCQkJCSAgICAoTDFfQ0FDSEVfQllURVMgLSAxKSkgKworCQkJICBtc2ctPmxlYWRpbl9pZ25vcmUpKTsKKworCS8qCisJICogVXBkYXRlIHRoZSB0YWlsIHBvaW50ZXIgdG8gaW5kaWNhdGUgZGF0YSBhY3R1YWxseQorCSAqIHRyYW5zZmVycmVkLgorCSAqLworCXNrYl9wdXQoc2tiLCAobXNnLT5zaXplIC0gbXNnLT5sZWFkaW5faWdub3JlIC0gbXNnLT50YWlsb3V0X2lnbm9yZSkpOworCisJLyoKKwkgKiBNb3ZlIHRoZSBkYXRhIG92ZXIgZnJvbSB0aGUgdGhlIG90aGVyIHNpZGUuCisJICovCisJaWYgKChYUE5FVF9WRVJTSU9OX01JTk9SKG1zZy0+dmVyc2lvbikgPT0gMSkgJiYKKwkJCQkJCShtc2ctPmVtYmVkZGVkX2J5dGVzICE9IDApKSB7CisJCWRldl9kYmcoeHBuZXQsICJjb3B5aW5nIGVtYmVkZGVkIG1lc3NhZ2UuIG1lbWNweSgweCVwLCAweCVwLCAiCisJCQkiJWx1KVxuIiwgc2tiLT5kYXRhLCAmbXNnLT5kYXRhLAorCQkJKHNpemVfdCkgbXNnLT5lbWJlZGRlZF9ieXRlcyk7CisKKwkJbWVtY3B5KHNrYi0+ZGF0YSwgJm1zZy0+ZGF0YSwgKHNpemVfdCkgbXNnLT5lbWJlZGRlZF9ieXRlcyk7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyh4cG5ldCwgInRyYW5zZmVycmluZyBidWZmZXIgdG8gdGhlIHNrYi0+ZGF0YSBhcmVhO1xuXHQiCisJCQkiYnRlX2NvcHkoMHglcCwgMHglcCwgJWh1KVxuIiwgKHZvaWQgKiltc2ctPmJ1Zl9wYSwKKwkJCSh2b2lkICopX19wYSgodTY0KXNrYi0+ZGF0YSAmIH4oTDFfQ0FDSEVfQllURVMgLSAxKSksCisJCQltc2ctPnNpemUpOworCisJCWJyZXQgPSBidGVfY29weShtc2ctPmJ1Zl9wYSwKKwkJCQlfX3BhKCh1NjQpc2tiLT5kYXRhICYgfihMMV9DQUNIRV9CWVRFUyAtIDEpKSwKKwkJCQltc2ctPnNpemUsIChCVEVfTk9USUZZIHwgQlRFX1dBQ1FVSVJFKSwgTlVMTCk7CisKKwkJaWYgKGJyZXQgIT0gQlRFX1NVQ0NFU1MpIHsKKwkJCS8vID4+PiBOZWVkIGJldHRlciB3YXkgb2YgY2xlYW5pbmcgc2tiLiAgQ3VycmVudGx5IHNrYgorCQkJLy8gPj4+IGFwcGVhcnMgaW5fdXNlIGFuZCB3ZSBjYW4ndCBqdXN0IGNhbGwKKwkJCS8vID4+PiBkZXZfa2ZyZWVfc2tiLgorCQkJZGV2X2Vycih4cG5ldCwgImJ0ZV9jb3B5KDB4JXAsIDB4JXAsIDB4JWh4KSByZXR1cm5lZCAiCisJCQkJImVycm9yPTB4JXhcbiIsICh2b2lkICopbXNnLT5idWZfcGEsCisJCQkJKHZvaWQgKilfX3BhKCh1NjQpc2tiLT5kYXRhICYKKwkJCQkJCQl+KEwxX0NBQ0hFX0JZVEVTIC0gMSkpLAorCQkJCW1zZy0+c2l6ZSwgYnJldCk7CisKKwkJCXhwY19yZWNlaXZlZChwYXJ0aWQsIGNoYW5uZWwsICh2b2lkICopIG1zZyk7CisKKwkJCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlkZXZfZGJnKHhwbmV0LCAiPHNrYi0+aGVhZD0weCVwIHNrYi0+ZGF0YT0weCVwIHNrYi0+dGFpbD0weCVwICIKKwkJInNrYi0+ZW5kPTB4JXAgc2tiLT5sZW49JWRcbiIsICh2b2lkICopIHNrYi0+aGVhZCwKKwkJKHZvaWQgKikgc2tiLT5kYXRhLCAodm9pZCAqKSBza2ItPnRhaWwsICh2b2lkICopIHNrYi0+ZW5kLAorCQlza2ItPmxlbik7CisKKwlza2ItPmRldiA9IHhwbmV0X2RldmljZTsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB4cG5ldF9kZXZpY2UpOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisKKwlkZXZfZGJnKHhwbmV0LCAicGFzc2luZyBza2IgdG8gbmV0d29yayBsYXllcjsgXG5cdHNrYi0+aGVhZD0weCVwICIKKwkJInNrYi0+ZGF0YT0weCVwIHNrYi0+dGFpbD0weCVwIHNrYi0+ZW5kPTB4JXAgc2tiLT5sZW49JWRcbiIsCisJCSh2b2lkICopIHNrYi0+aGVhZCwgKHZvaWQgKikgc2tiLT5kYXRhLCAodm9pZCAqKSBza2ItPnRhaWwsCisJCSh2b2lkICopIHNrYi0+ZW5kLCBza2ItPmxlbik7CisKKworCXhwbmV0X2RldmljZS0+bGFzdF9yeCA9IGppZmZpZXM7CisJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOworCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuICsgRVRIX0hMRU47CisKKwluZXRpZl9yeF9uaShza2IpOworCXhwY19yZWNlaXZlZChwYXJ0aWQsIGNoYW5uZWwsICh2b2lkICopIG1zZyk7Cit9CisKKworLyoKKyAqIFRoaXMgaXMgdGhlIGhhbmRsZXIgd2hpY2ggWFBDIGNhbGxzIGR1cmluZyBhbnkgc29ydCBvZiBjaGFuZ2UgaW4KKyAqIHN0YXRlIG9yIG1lc3NhZ2UgcmVjZXB0aW9uIG9uIGEgY29ubmVjdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK3hwbmV0X2Nvbm5lY3Rpb25fYWN0aXZpdHkoZW51bSB4cGNfcmV0dmFsIHJlYXNvbiwgcGFydGlkX3QgcGFydGlkLCBpbnQgY2hhbm5lbCwKKwkJCSAgdm9pZCAqZGF0YSwgdm9pZCAqa2V5KQoreworCWxvbmcgYnA7CisKKworCURCVUdfT04ocGFydGlkIDw9IDAgfHwgcGFydGlkID49IFhQX01BWF9QQVJUSVRJT05TKTsKKwlEQlVHX09OKGNoYW5uZWwgIT0gWFBDX05FVF9DSEFOTkVMKTsKKworCXN3aXRjaChyZWFzb24pIHsKKwljYXNlIHhwY01zZ1JlY2VpdmVkOgkvKiBtZXNzYWdlIHJlY2VpdmVkICovCisJCURCVUdfT04oZGF0YSA9PSBOVUxMKTsKKworCQl4cG5ldF9yZWNlaXZlKHBhcnRpZCwgY2hhbm5lbCwgKHN0cnVjdCB4cG5ldF9tZXNzYWdlICopIGRhdGEpOworCQlicmVhazsKKworCWNhc2UgeHBjQ29ubmVjdGVkOgkvKiBjb25uZWN0aW9uIGNvbXBsZXRlZCB0byBhIHBhcnRpdGlvbiAqLworCQlzcGluX2xvY2tfYmgoJnhwbmV0X2Jyb2FkY2FzdF9sb2NrKTsKKwkJeHBuZXRfYnJvYWRjYXN0X3BhcnRpdGlvbnMgfD0gMVVMIDw8IChwYXJ0aWQgLTEgKTsKKwkJYnAgPSB4cG5ldF9icm9hZGNhc3RfcGFydGl0aW9uczsKKwkJc3Bpbl91bmxvY2tfYmgoJnhwbmV0X2Jyb2FkY2FzdF9sb2NrKTsKKworCQluZXRpZl9jYXJyaWVyX29uKHhwbmV0X2RldmljZSk7CisKKwkJZGV2X2RiZyh4cG5ldCwgIiVzIGNvbm5lY3Rpb24gY3JlYXRlZCB0byBwYXJ0aXRpb24gJWQ7ICIKKwkJCSJ4cG5ldF9icm9hZGNhc3RfcGFydGl0aW9ucz0weCVseFxuIiwKKwkJCXhwbmV0X2RldmljZS0+bmFtZSwgcGFydGlkLCBicCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc3Bpbl9sb2NrX2JoKCZ4cG5ldF9icm9hZGNhc3RfbG9jayk7CisJCXhwbmV0X2Jyb2FkY2FzdF9wYXJ0aXRpb25zICY9IH4oMVVMIDw8IChwYXJ0aWQgLTEgKSk7CisJCWJwID0geHBuZXRfYnJvYWRjYXN0X3BhcnRpdGlvbnM7CisJCXNwaW5fdW5sb2NrX2JoKCZ4cG5ldF9icm9hZGNhc3RfbG9jayk7CisKKwkJaWYgKGJwID09IDApIHsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKHhwbmV0X2RldmljZSk7CisJCX0KKworCQlkZXZfZGJnKHhwbmV0LCAiJXMgZGlzY29ubmVjdGVkIGZyb20gcGFydGl0aW9uICVkOyAiCisJCQkieHBuZXRfYnJvYWRjYXN0X3BhcnRpdGlvbnM9MHglbHhcbiIsCisJCQl4cG5ldF9kZXZpY2UtPm5hbWUsIHBhcnRpZCwgYnApOworCQlicmVhazsKKworCX0KK30KKworCitzdGF0aWMgaW50Cit4cG5ldF9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWVudW0geHBjX3JldHZhbCByZXQ7CisKKworCWRldl9kYmcoeHBuZXQsICJjYWxsaW5nIHhwY19jb25uZWN0KCVkLCAweCVwLCBOVUxMLCAlbGQsICVsZCwgJWQsICIKKwkJIiVkKVxuIiwgWFBDX05FVF9DSEFOTkVMLCB4cG5ldF9jb25uZWN0aW9uX2FjdGl2aXR5LAorCQlYUE5FVF9NU0dfU0laRSwgWFBORVRfTVNHX05FTlRSSUVTLCBYUE5FVF9NQVhfS1RIUkVBRFMsCisJCVhQTkVUX01BWF9JRExFX0tUSFJFQURTKTsKKworCXJldCA9IHhwY19jb25uZWN0KFhQQ19ORVRfQ0hBTk5FTCwgeHBuZXRfY29ubmVjdGlvbl9hY3Rpdml0eSwgTlVMTCwKKwkJCSAgWFBORVRfTVNHX1NJWkUsIFhQTkVUX01TR19ORU5UUklFUywKKwkJCSAgWFBORVRfTUFYX0tUSFJFQURTLCBYUE5FVF9NQVhfSURMRV9LVEhSRUFEUyk7CisJaWYgKHJldCAhPSB4cGNTdWNjZXNzKSB7CisJCWRldl9lcnIoeHBuZXQsICJpZmNvbmZpZyB1cCBvZiAlcyBmYWlsZWQgb24gWFBDIGNvbm5lY3QsICIKKwkJCSJyZXQ9JWRcbiIsIGRldi0+bmFtZSwgcmV0KTsKKworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXZfZGJnKHhwbmV0LCAiaWZjb25maWcgdXAgb2YgJXM7IFhQQyBjb25uZWN0ZWRcbiIsIGRldi0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit4cG5ldF9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXhwY19kaXNjb25uZWN0KFhQQ19ORVRfQ0hBTk5FTCk7CisKKwlkZXZfZGJnKHhwbmV0LCAiaWZjb25maWcgZG93biBvZiAlczsgWFBDIGRpc2Nvbm5lY3RlZFxuIiwgZGV2LT5uYW1lKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK3hwbmV0X2Rldl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworCS8qIDY4IGNvbWVzIGZyb20gbWluIFRDUCtJUCtNQUMgaGVhZGVyICovCisJaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gWFBORVRfTUFYX01UVSkpIHsKKwkJZGV2X2Vycih4cG5ldCwgImlmY29uZmlnICVzIG10dSAlZCBmYWlsZWQ7IHZhbHVlIG11c3QgYmUgIgorCQkJImJldHdlZW4gNjggYW5kICVsZFxuIiwgZGV2LT5uYW1lLCBuZXdfbXR1LAorCQkJWFBORVRfTUFYX01UVSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldi0+bXR1ID0gbmV3X210dTsKKwlkZXZfZGJnKHhwbmV0LCAiaWZjb25maWcgJXMgbXR1IHNldCB0byAlZFxuIiwgZGV2LT5uYW1lLCBuZXdfbXR1KTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogUmVxdWlyZWQgZm9yIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGludAoreHBuZXRfZGV2X3NldF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICpuZXdfbWFwKQoreworCXJldHVybiAwOworfQorCisKKy8qCisgKiBSZXR1cm4gc3RhdGlzdGljcyB0byB0aGUgY2FsbGVyLgorICovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgoreHBuZXRfZGV2X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB4cG5ldF9kZXZfcHJpdmF0ZSAqcHJpdjsKKworCisJcHJpdiA9IChzdHJ1Y3QgeHBuZXRfZGV2X3ByaXZhdGUgKikgZGV2LT5wcml2OworCisJcmV0dXJuICZwcml2LT5zdGF0czsKK30KKworCisvKgorICogTm90aWZpY2F0aW9uIHRoYXQgdGhlIG90aGVyIGVuZCBoYXMgcmVjZWl2ZWQgdGhlIG1lc3NhZ2UgYW5kCisgKiBETUEnZCB0aGUgc2tiIGluZm9ybWF0aW9uLiAgQXQgdGhpcyBwb2ludCwgdGhleSBhcmUgZG9uZSB3aXRoCisgKiBvdXIgc2lkZS4gIFdoZW4gYWxsIHJlY2lwaWVudHMgYXJlIGRvbmUgcHJvY2Vzc2luZywgd2UKKyAqIHJlbGVhc2UgdGhlIHNrYiBhbmQgdGhlbiByZWxlYXNlIG91ciBwZW5kaW5nIG1lc3NhZ2Ugc3RydWN0dXJlLgorICovCitzdGF0aWMgdm9pZAoreHBuZXRfc2VuZF9jb21wbGV0ZWQoZW51bSB4cGNfcmV0dmFsIHJlYXNvbiwgcGFydGlkX3QgcGFydGlkLCBpbnQgY2hhbm5lbCwKKwkJCXZvaWQgKl9fcW0pCit7CisJc3RydWN0IHhwbmV0X3BlbmRpbmdfbXNnICpxdWV1ZWRfbXNnID0KKwkJKHN0cnVjdCB4cG5ldF9wZW5kaW5nX21zZyAqKSBfX3FtOworCisKKwlEQlVHX09OKHF1ZXVlZF9tc2cgPT0gTlVMTCk7CisKKwlkZXZfZGJnKHhwbmV0LCAibWVzc2FnZSB0byAlZCBub3RpZmllZCB3aXRoIHJlYXNvbiAlZFxuIiwKKwkJcGFydGlkLCByZWFzb24pOworCisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZxdWV1ZWRfbXNnLT51c2VfY291bnQpID09IDApIHsKKwkJZGV2X2RiZyh4cG5ldCwgImFsbCBhY2tzIGZvciBza2ItPmhlYWQ9LXglcFxuIiwKKwkJCSh2b2lkICopIHF1ZXVlZF9tc2ctPnNrYi0+aGVhZCk7CisKKwkJZGV2X2tmcmVlX3NrYl9hbnkocXVldWVkX21zZy0+c2tiKTsKKwkJa2ZyZWUocXVldWVkX21zZyk7CisJfQorfQorCisKKy8qCisgKiBOZXR3b3JrIGxheWVyIGhhcyBmb3JtYXR0ZWQgYSBwYWNrZXQgKHNrYikgYW5kIGlzIHJlYWR5IHRvIHBsYWNlIGl0CisgKiAib24gdGhlIHdpcmUiLiAgUHJlcGFyZSBhbmQgc2VuZCBhbiB4cG5ldF9tZXNzYWdlIHRvIGFsbCBwYXJ0aXRpb25zCisgKiB3aGljaCBoYXZlIGNvbm5lY3RlZCB3aXRoIHVzIGFuZCBhcmUgdGFyZ2V0cyBvZiB0aGlzIHBhY2tldC4KKyAqCisgKiBNQUMtTk9URTogIEZvciB0aGUgWFBORVQgZHJpdmVyLCB0aGUgTUFDIGFkZHJlc3MgY29udGFpbnMgdGhlCisgKiBkZXN0aW5hdGlvbiBwYXJ0aXRpb25faWQuICBJZiB0aGUgZGVzdGluYXRpb24gcGFydGl0aW9uIGlkIHdvcmQKKyAqIGlzIDB4ZmYsIHRoaXMgcGFja2V0IGlzIHRvIGJyb2FkY2FzdCB0byBhbGwgcGFydGl0aW9ucy4KKyAqLworc3RhdGljIGludAoreHBuZXRfZGV2X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB4cG5ldF9wZW5kaW5nX21zZyAqcXVldWVkX21zZzsKKwllbnVtIHhwY19yZXR2YWwgcmV0OworCXN0cnVjdCB4cG5ldF9tZXNzYWdlICptc2c7CisJdTY0IHN0YXJ0X2FkZHIsIGVuZF9hZGRyOworCWxvbmcgZHA7CisJdTggc2Vjb25kX21hY19vY3RldDsKKwlwYXJ0aWRfdCBkZXN0X3BhcnRpZDsKKwlzdHJ1Y3QgeHBuZXRfZGV2X3ByaXZhdGUgKnByaXY7CisJdTE2IGVtYmVkZGVkX2J5dGVzOworCisKKwlwcml2ID0gKHN0cnVjdCB4cG5ldF9kZXZfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisKKworCWRldl9kYmcoeHBuZXQsICI+c2tiLT5oZWFkPTB4JXAgc2tiLT5kYXRhPTB4JXAgc2tiLT50YWlsPTB4JXAgIgorCQkic2tiLT5lbmQ9MHglcCBza2ItPmxlbj0lZFxuIiwgKHZvaWQgKikgc2tiLT5oZWFkLAorCQkodm9pZCAqKSBza2ItPmRhdGEsICh2b2lkICopIHNrYi0+dGFpbCwgKHZvaWQgKikgc2tiLT5lbmQsCisJCXNrYi0+bGVuKTsKKworCisJLyoKKwkgKiBUaGUgeHBuZXRfcGVuZGluZ19tc2cgdHJhY2tzIGhvdyBtYW55IG91dHN0YW5kaW5nCisJICogeHBjX3NlbmRfbm90aWZpZXMgYXJlIHJlbHlpbmcgb24gdGhpcyBza2IuICBXaGVuIG5vbmUKKwkgKiByZW1haW4sIHJlbGVhc2UgdGhlIHNrYi4KKwkgKi8KKwlxdWV1ZWRfbXNnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHhwbmV0X3BlbmRpbmdfbXNnKSwgR0ZQX0FUT01JQyk7CisJaWYgKHF1ZXVlZF9tc2cgPT0gTlVMTCkgeworCQlkZXZfd2Fybih4cG5ldCwgImZhaWxlZCB0byBrbWFsbG9jICVsZCBieXRlczsgZHJvcHBpbmcgIgorCQkJInBhY2tldFxuIiwgc2l6ZW9mKHN0cnVjdCB4cG5ldF9wZW5kaW5nX21zZykpOworCisJCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOworCisJCXJldHVybiAtRU5PTUVNOworCX0KKworCisJLyogZ2V0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IGNhY2hlbGluZSBhbmQgZW5kIG9mIGxhc3QgKi8KKwlzdGFydF9hZGRyID0gKCh1NjQpIHNrYi0+ZGF0YSAmIH4oTDFfQ0FDSEVfQllURVMgLSAxKSk7CisJZW5kX2FkZHIgPSBMMV9DQUNIRV9BTElHTigodTY0KSBza2ItPnRhaWwpOworCisJLyogY2FsY3VsYXRlIGhvdyBtYW55IGJ5dGVzIHRvIGVtYmVkIGluIHRoZSBYUEMgbWVzc2FnZSAqLworCWVtYmVkZGVkX2J5dGVzID0gMDsKKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPD0gWFBORVRfTVNHX0RBVEFfTUFYKSkgeworCQkvKiBza2ItPmRhdGEgZG9lcyBmaXQgc28gZW1iZWQgKi8KKwkJZW1iZWRkZWRfYnl0ZXMgPSBza2ItPmxlbjsKKwl9CisKKworCS8qCisJICogU2luY2UgdGhlIHNlbmQgb2NjdXJzIGFzeW5jaHJvbm91c2x5LCB3ZSBzZXQgdGhlIGNvdW50IHRvIG9uZQorCSAqIGFuZCBiZWdpbiBzZW5kaW5nLiAgQW55IHNlbmRzIHRoYXQgaGFwcGVuIHRvIGNvbXBsZXRlIGJlZm9yZQorCSAqIHdlIGFyZSBkb25lIHNlbmRpbmcgd2lsbCBub3QgZnJlZSB0aGUgc2tiLiAgV2Ugd2lsbCBiZSBsZWZ0CisJICogd2l0aCB0aGF0IHRhc2sgZHVyaW5nIGV4aXQuICBUaGlzIGFsc28gaGFuZGxlcyB0aGUgY2FzZSBvZgorCSAqIGEgcGFja2V0IGRlc3RpbmVkIGZvciBhIHBhcnRpdGlvbiB3aGljaCBpcyBubyBsb25nZXIgdXAuCisJICovCisJYXRvbWljX3NldCgmcXVldWVkX21zZy0+dXNlX2NvdW50LCAxKTsKKwlxdWV1ZWRfbXNnLT5za2IgPSBza2I7CisKKworCXNlY29uZF9tYWNfb2N0ZXQgPSBza2ItPmRhdGFbWFBORVRfUEFSVElEX09DVEVUXTsKKwlpZiAoc2Vjb25kX21hY19vY3RldCA9PSAweGZmKSB7CisJCS8qIHdlIGFyZSBiZWluZyBhc2tlZCB0byBicm9hZGNhc3QgdG8gYWxsIHBhcnRpdGlvbnMgKi8KKwkJZHAgPSB4cG5ldF9icm9hZGNhc3RfcGFydGl0aW9uczsKKwl9IGVsc2UgaWYgKHNlY29uZF9tYWNfb2N0ZXQgIT0gMCkgeworCQlkcCA9IHhwbmV0X2Jyb2FkY2FzdF9wYXJ0aXRpb25zICYKKwkJCQkJKDFVTCA8PCAoc2Vjb25kX21hY19vY3RldCAtIDEpKTsKKwl9IGVsc2UgeworCQkvKiAwIGlzIGFuIGludmFsaWQgcGFydGlkLiAgSWdub3JlICovCisJCWRwID0gMDsKKwl9CisJZGV2X2RiZyh4cG5ldCwgImRlc3RpbmF0aW9uIFBhcnRpdGlvbnMgbWFzayAoZHApID0gMHglbHhcbiIsIGRwKTsKKworCS8qCisJICogSWYgd2Ugd2FudGVkIHRvIGFsbG93IHByb21pc2NvdXMgbW9kZSB0byB3b3JrIGxpa2UgYW4KKwkgKiB1bnN3aXRjaGVkIG5ldHdvcmssIHRoaXMgd291bGQgYmUgYSBnb29kIHBvaW50IHRvIE9SIGluIGEKKwkgKiBtYXNrIG9mIHBhcnRpdGlvbnMgd2hpY2ggc2hvdWxkIGJlIHJlY2VpdmluZyBhbGwgcGFja2V0cy4KKwkgKi8KKworCS8qCisJICogTWFpbiBzZW5kIGxvb3AuCisJICovCisJZm9yIChkZXN0X3BhcnRpZCA9IDE7IGRwICYmIGRlc3RfcGFydGlkIDwgWFBfTUFYX1BBUlRJVElPTlM7CisJICAgICBkZXN0X3BhcnRpZCsrKSB7CisKKworCQlpZiAoIShkcCAmICgxVUwgPDwgKGRlc3RfcGFydGlkIC0gMSkpKSkgeworCQkJLyogbm90IGRlc3RpbmVkIGZvciB0aGlzIHBhcnRpdGlvbiAqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiByZW1vdmUgdGhpcyBwYXJ0aXRpb24gZnJvbSB0aGUgZGVzdGluYXRpb25zIG1hc2sgKi8KKwkJZHAgJj0gfigxVUwgPDwgKGRlc3RfcGFydGlkIC0gMSkpOworCisKKwkJLyogZm91bmQgYSBwYXJ0aXRpb24gdG8gc2VuZCB0byAqLworCisJCXJldCA9IHhwY19hbGxvY2F0ZShkZXN0X3BhcnRpZCwgWFBDX05FVF9DSEFOTkVMLAorCQkJCSAgIFhQQ19OT1dBSVQsICh2b2lkICoqKSZtc2cpOworCQlpZiAodW5saWtlbHkocmV0ICE9IHhwY1N1Y2Nlc3MpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCW1zZy0+ZW1iZWRkZWRfYnl0ZXMgPSBlbWJlZGRlZF9ieXRlczsKKwkJaWYgKHVubGlrZWx5KGVtYmVkZGVkX2J5dGVzICE9IDApKSB7CisJCQltc2ctPnZlcnNpb24gPSBYUE5FVF9WRVJTSU9OX0VNQkVEOworCQkJZGV2X2RiZyh4cG5ldCwgImNhbGxpbmcgbWVtY3B5KDB4JXAsIDB4JXAsIDB4JWx4KVxuIiwKKwkJCQkmbXNnLT5kYXRhLCBza2ItPmRhdGEsIChzaXplX3QpIGVtYmVkZGVkX2J5dGVzKTsKKwkJCW1lbWNweSgmbXNnLT5kYXRhLCBza2ItPmRhdGEsIChzaXplX3QpIGVtYmVkZGVkX2J5dGVzKTsKKwkJfSBlbHNlIHsKKwkJCW1zZy0+dmVyc2lvbiA9IFhQTkVUX1ZFUlNJT047CisJCX0KKwkJbXNnLT5tYWdpYyA9IFhQTkVUX01BR0lDOworCQltc2ctPnNpemUgPSBlbmRfYWRkciAtIHN0YXJ0X2FkZHI7CisJCW1zZy0+bGVhZGluX2lnbm9yZSA9ICh1NjQpIHNrYi0+ZGF0YSAtIHN0YXJ0X2FkZHI7CisJCW1zZy0+dGFpbG91dF9pZ25vcmUgPSBlbmRfYWRkciAtICh1NjQpIHNrYi0+dGFpbDsKKwkJbXNnLT5idWZfcGEgPSBfX3BhKHN0YXJ0X2FkZHIpOworCisJCWRldl9kYmcoeHBuZXQsICJzZW5kaW5nIFhQQyBtZXNzYWdlIHRvICVkOiVkXG5tc2ctPmJ1Zl9wYT0iCisJCQkiMHglbHgsIG1zZy0+c2l6ZT0ldSwgbXNnLT5sZWFkaW5faWdub3JlPSV1LCAiCisJCQkibXNnLT50YWlsb3V0X2lnbm9yZT0ldVxuIiwgZGVzdF9wYXJ0aWQsCisJCQlYUENfTkVUX0NIQU5ORUwsIG1zZy0+YnVmX3BhLCBtc2ctPnNpemUsCisJCQltc2ctPmxlYWRpbl9pZ25vcmUsIG1zZy0+dGFpbG91dF9pZ25vcmUpOworCisKKwkJYXRvbWljX2luYygmcXVldWVkX21zZy0+dXNlX2NvdW50KTsKKworCQlyZXQgPSB4cGNfc2VuZF9ub3RpZnkoZGVzdF9wYXJ0aWQsIFhQQ19ORVRfQ0hBTk5FTCwgbXNnLAorCQkJCSAgICAgIHhwbmV0X3NlbmRfY29tcGxldGVkLCBxdWV1ZWRfbXNnKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSB4cGNTdWNjZXNzKSkgeworCQkJYXRvbWljX2RlYygmcXVldWVkX21zZy0+dXNlX2NvdW50KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwl9CisKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnF1ZXVlZF9tc2ctPnVzZV9jb3VudCkgPT0gMCkgeworCQlkZXZfZGJnKHhwbmV0LCAibm8gcGFydGl0aW9ucyB0byByZWNlaXZlIHBhY2tldCBkZXN0aW5lZCBmb3IgIgorCQkJIiVkXG4iLCBkZXN0X3BhcnRpZCk7CisKKworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCWtmcmVlKHF1ZXVlZF9tc2cpOworCX0KKworCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBEZWFsIHdpdGggdHJhbnNtaXQgdGltZW91dHMgY29taW5nIGZyb20gdGhlIG5ldHdvcmsgbGF5ZXIuCisgKi8KK3N0YXRpYyB2b2lkCit4cG5ldF9kZXZfdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgeHBuZXRfZGV2X3ByaXZhdGUgKnByaXY7CisKKworCXByaXYgPSAoc3RydWN0IHhwbmV0X2Rldl9wcml2YXRlICopIGRldi0+cHJpdjsKKworCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOworCXJldHVybjsKK30KKworCitzdGF0aWMgaW50IF9faW5pdAoreHBuZXRfaW5pdCh2b2lkKQoreworCWludCBpOworCXUzMiBsaWNlbnNlX251bTsKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKworCisJZGV2X2luZm8oeHBuZXQsICJyZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZSAlc1xuIiwgWFBORVRfREVWSUNFX05BTUUpOworCisJLyoKKwkgKiB1c2UgZXRoZXJfc2V0dXAoKSB0byBpbml0IHRoZSBtYWpvcml0eSBvZiBvdXIgZGV2aWNlCisJICogc3RydWN0dXJlIGFuZCB0aGVuIG92ZXJyaWRlIHRoZSBuZWNlc3NhcnkgcGllY2VzLgorCSAqLworCXhwbmV0X2RldmljZSA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IHhwbmV0X2Rldl9wcml2YXRlKSwKKwkJCQkgICAgWFBORVRfREVWSUNFX05BTUUsIGV0aGVyX3NldHVwKTsKKwlpZiAoeHBuZXRfZGV2aWNlID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbmV0aWZfY2Fycmllcl9vZmYoeHBuZXRfZGV2aWNlKTsKKworCXhwbmV0X2RldmljZS0+bXR1ID0gWFBORVRfREVGX01UVTsKKwl4cG5ldF9kZXZpY2UtPmNoYW5nZV9tdHUgPSB4cG5ldF9kZXZfY2hhbmdlX210dTsKKwl4cG5ldF9kZXZpY2UtPm9wZW4gPSB4cG5ldF9kZXZfb3BlbjsKKwl4cG5ldF9kZXZpY2UtPmdldF9zdGF0cyA9IHhwbmV0X2Rldl9nZXRfc3RhdHM7CisJeHBuZXRfZGV2aWNlLT5zdG9wID0geHBuZXRfZGV2X3N0b3A7CisJeHBuZXRfZGV2aWNlLT5oYXJkX3N0YXJ0X3htaXQgPSB4cG5ldF9kZXZfaGFyZF9zdGFydF94bWl0OworCXhwbmV0X2RldmljZS0+dHhfdGltZW91dCA9IHhwbmV0X2Rldl90eF90aW1lb3V0OworCXhwbmV0X2RldmljZS0+c2V0X2NvbmZpZyA9IHhwbmV0X2Rldl9zZXRfY29uZmlnOworCisJLyoKKwkgKiBNdWx0aWNhc3QgYXNzdW1lcyB0aGUgTFNCIG9mIHRoZSBmaXJzdCBvY3RldCBpcyBzZXQgZm9yIG11bHRpY2FzdAorCSAqIE1BQyBhZGRyZXNzZXMuICBXZSBjaG9zZSB0aGUgZmlyc3Qgb2N0ZXQgb2YgdGhlIE1BQyB0byBiZSB1bmxpa2VseQorCSAqIHRvIGNvbGxpZGUgd2l0aCBhbnkgdmVuZG9yJ3Mgb2ZmaWNpYWxseSBpc3N1ZWQgTUFDLgorCSAqLworCXhwbmV0X2RldmljZS0+ZGV2X2FkZHJbMF0gPSAweGZlOworCXhwbmV0X2RldmljZS0+ZGV2X2FkZHJbWFBORVRfUEFSVElEX09DVEVUXSA9IHNuX3BhcnRpdGlvbl9pZDsKKwlsaWNlbnNlX251bSA9IHNuX3BhcnRpdGlvbl9zZXJpYWxfbnVtYmVyX3ZhbCgpOworCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7CisJCXhwbmV0X2RldmljZS0+ZGV2X2FkZHJbWFBORVRfTElDRU5TRV9PQ1RFVCArIGldID0KKwkJCQkJCQlsaWNlbnNlX251bSAmIDB4ZmY7CisJCWxpY2Vuc2VfbnVtID0gbGljZW5zZV9udW0gPj4gODsKKwl9CisKKwkvKgorCSAqIGV0aGVyX3NldHVwKCkgc2V0cyB0aGlzIHRvIGEgbXVsdGljYXN0IGRldmljZS4gIFdlIGFyZQorCSAqIHJlYWxseSBub3Qgc3VwcG9ydGluZyBtdWx0aWNhc3QgYXQgdGhpcyB0aW1lLgorCSAqLworCXhwbmV0X2RldmljZS0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CisKKwkvKgorCSAqIE5vIG5lZWQgdG8gY2hlY2tzdW0gYXMgaXQgaXMgYSBETUEgdHJhbnNmZXIuICBUaGUgQlRFIHdpbGwKKwkgKiByZXBvcnQgYW4gZXJyb3IgaWYgdGhlIGRhdGEgaXMgbm90IHJldHJpZXZhYmxlIGFuZCB0aGUKKwkgKiBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkLgorCSAqLworCXhwbmV0X2RldmljZS0+ZmVhdHVyZXMgPSBORVRJRl9GX05PX0NTVU07CisKKwlyZXN1bHQgPSByZWdpc3Rlcl9uZXRkZXYoeHBuZXRfZGV2aWNlKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJZnJlZV9uZXRkZXYoeHBuZXRfZGV2aWNlKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorbW9kdWxlX2luaXQoeHBuZXRfaW5pdCk7CisKKworc3RhdGljIHZvaWQgX19leGl0Cit4cG5ldF9leGl0KHZvaWQpCit7CisJZGV2X2luZm8oeHBuZXQsICJ1bnJlZ2lzdGVyaW5nIG5ldHdvcmsgZGV2aWNlICVzXG4iLAorCQl4cG5ldF9kZXZpY2VbMF0ubmFtZSk7CisKKwl1bnJlZ2lzdGVyX25ldGRldih4cG5ldF9kZXZpY2UpOworCisJZnJlZV9uZXRkZXYoeHBuZXRfZGV2aWNlKTsKK30KK21vZHVsZV9leGl0KHhwbmV0X2V4aXQpOworCisKK01PRFVMRV9BVVRIT1IoIlNpbGljb24gR3JhcGhpY3MsIEluYy4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ3Jvc3MgUGFydGl0aW9uIE5ldHdvcmsgYWRhcHRlciAoWFBORVQpIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvTWFrZWZpbGUgYi9hcmNoL2lhNjQvc24vcGNpL01ha2VmaWxlCmluZGV4IGI1ZGNhMDAuLjJmOTE1YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS9NYWtlZmlsZQpAQCAtNyw0ICs3LDQgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBzbiBwY2kgZ2VuZXJhbCByb3V0aW5lcy4KIAotb2JqLXkgOj0gcGNpX2RtYS5vIHBjaWJyLyAKK29iai15IDo9IHBjaV9kbWEubyB0aW9jYV9wcm92aWRlci5vIHBjaWJyLyAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lfZG1hLmMKaW5kZXggZjY4MDgyNC4uNWRhOWJkYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lfZG1hLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lfZG1hLmMKQEAgLTEyLDkgKzEyLDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3NuX3NhbC5oPgotI2luY2x1ZGUgInBjaS9wY2lidXNfcHJvdmlkZXJfZGVmcy5oIgotI2luY2x1ZGUgInBjaS9wY2lkZXYuaCIKLSNpbmNsdWRlICJwY2kvcGNpYnJfcHJvdmlkZXIuaCIKKyNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+CiAKICNkZWZpbmUgU0dfRU5UX1ZJUlRfQUREUkVTUyhzZykJKHBhZ2VfYWRkcmVzcygoc2cpLT5wYWdlKSArIChzZyktPm9mZnNldCkKICNkZWZpbmUgU0dfRU5UX1BIWVNfQUREUkVTUyhTRykJdmlydF90b19waHlzKFNHX0VOVF9WSVJUX0FERFJFU1MoU0cpKQpAQCAtNzksNyArNzgsOCBAQAogewogCXZvaWQgKmNwdWFkZHI7CiAJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7Ci0Jc3RydWN0IHBjaWRldl9pbmZvICpwY2lkZXZfaW5mbyA9IFNOX1BDSURFVl9JTkZPKHRvX3BjaV9kZXYoZGV2KSk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHNuX3BjaWJ1c19wcm92aWRlciAqcHJvdmlkZXIgPSBTTl9QQ0lERVZfQlVTUFJPVklERVIocGRldik7CiAKIAlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CiAKQEAgLTEwMiw4ICsxMDIsNyBAQAogCSAqIHJlc291cmNlcy4KIAkgKi8KIAotCSpkbWFfaGFuZGxlID0gcGNpYnJfZG1hX21hcChwY2lkZXZfaW5mbywgcGh5c19hZGRyLCBzaXplLAotCQkJCSAgICBTTl9QQ0lETUFfQ09OU0lTVEVOVCk7CisJKmRtYV9oYW5kbGUgPSBwcm92aWRlci0+ZG1hX21hcF9jb25zaXN0ZW50KHBkZXYsIHBoeXNfYWRkciwgc2l6ZSk7CiAJaWYgKCEqZG1hX2hhbmRsZSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvdXQgb2YgQVRFc1xuIiwgX19GVU5DVElPTl9fKTsKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyljcHVhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwpAQCAtMTI3LDExICsxMjYsMTIgQEAKIHZvaWQgc25fZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsCiAJCQkgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKIHsKLQlzdHJ1Y3QgcGNpZGV2X2luZm8gKnBjaWRldl9pbmZvID0gU05fUENJREVWX0lORk8odG9fcGNpX2RldihkZXYpKTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3Qgc25fcGNpYnVzX3Byb3ZpZGVyICpwcm92aWRlciA9IFNOX1BDSURFVl9CVVNQUk9WSURFUihwZGV2KTsKIAogCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKIAotCXBjaWJyX2RtYV91bm1hcChwY2lkZXZfaW5mbywgZG1hX2hhbmRsZSwgMCk7CisJcHJvdmlkZXItPmRtYV91bm1hcChwZGV2LCBkbWFfaGFuZGxlLCAwKTsKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWNwdV9hZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwogfQogRVhQT1JUX1NZTUJPTChzbl9kbWFfZnJlZV9jb2hlcmVudCk7CkBAIC0xNTksMTIgKzE1OSwxMyBAQAogewogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7Ci0Jc3RydWN0IHBjaWRldl9pbmZvICpwY2lkZXZfaW5mbyA9IFNOX1BDSURFVl9JTkZPKHRvX3BjaV9kZXYoZGV2KSk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHNuX3BjaWJ1c19wcm92aWRlciAqcHJvdmlkZXIgPSBTTl9QQ0lERVZfQlVTUFJPVklERVIocGRldik7CiAKIAlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CiAKIAlwaHlzX2FkZHIgPSBfX3BhKGNwdV9hZGRyKTsKLQlkbWFfYWRkciA9IHBjaWJyX2RtYV9tYXAocGNpZGV2X2luZm8sIHBoeXNfYWRkciwgc2l6ZSwgMCk7CisJZG1hX2FkZHIgPSBwcm92aWRlci0+ZG1hX21hcChwZGV2LCBwaHlzX2FkZHIsIHNpemUpOwogCWlmICghZG1hX2FkZHIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogb3V0IG9mIEFURXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAwOwpAQCAtMTg3LDEwICsxODgsMTIgQEAKIHZvaWQgc25fZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAogCQkJIGludCBkaXJlY3Rpb24pCiB7Ci0Jc3RydWN0IHBjaWRldl9pbmZvICpwY2lkZXZfaW5mbyA9IFNOX1BDSURFVl9JTkZPKHRvX3BjaV9kZXYoZGV2KSk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHNuX3BjaWJ1c19wcm92aWRlciAqcHJvdmlkZXIgPSBTTl9QQ0lERVZfQlVTUFJPVklERVIocGRldik7CiAKIAlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7Ci0JcGNpYnJfZG1hX3VubWFwKHBjaWRldl9pbmZvLCBkbWFfYWRkciwgZGlyZWN0aW9uKTsKKworCXByb3ZpZGVyLT5kbWFfdW5tYXAocGRldiwgZG1hX2FkZHIsIGRpcmVjdGlvbik7CiB9CiBFWFBPUlRfU1lNQk9MKHNuX2RtYV91bm1hcF9zaW5nbGUpOwogCkBAIC0yMDcsMTIgKzIxMCwxMyBAQAogCQkgICAgIGludCBuaHdlbnRyaWVzLCBpbnQgZGlyZWN0aW9uKQogewogCWludCBpOwotCXN0cnVjdCBwY2lkZXZfaW5mbyAqcGNpZGV2X2luZm8gPSBTTl9QQ0lERVZfSU5GTyh0b19wY2lfZGV2KGRldikpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBzbl9wY2lidXNfcHJvdmlkZXIgKnByb3ZpZGVyID0gU05fUENJREVWX0JVU1BST1ZJREVSKHBkZXYpOwogCiAJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwogCiAJZm9yIChpID0gMDsgaSA8IG5od2VudHJpZXM7IGkrKywgc2crKykgewotCQlwY2licl9kbWFfdW5tYXAocGNpZGV2X2luZm8sIHNnLT5kbWFfYWRkcmVzcywgZGlyZWN0aW9uKTsKKwkJcHJvdmlkZXItPmRtYV91bm1hcChwZGV2LCBzZy0+ZG1hX2FkZHJlc3MsIGRpcmVjdGlvbik7CiAJCXNnLT5kbWFfYWRkcmVzcyA9IChkbWFfYWRkcl90KSBOVUxMOwogCQlzZy0+ZG1hX2xlbmd0aCA9IDA7CiAJfQpAQCAtMjMzLDcgKzIzNyw4IEBACiB7CiAJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzYXZlZF9zZyA9IHNnOwotCXN0cnVjdCBwY2lkZXZfaW5mbyAqcGNpZGV2X2luZm8gPSBTTl9QQ0lERVZfSU5GTyh0b19wY2lfZGV2KGRldikpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBzbl9wY2lidXNfcHJvdmlkZXIgKnByb3ZpZGVyID0gU05fUENJREVWX0JVU1BST1ZJREVSKHBkZXYpOwogCWludCBpOwogCiAJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwpAQCAtMjQzLDggKzI0OCw4IEBACiAJICovCiAJZm9yIChpID0gMDsgaSA8IG5od2VudHJpZXM7IGkrKywgc2crKykgewogCQlwaHlzX2FkZHIgPSBTR19FTlRfUEhZU19BRERSRVNTKHNnKTsKLQkJc2ctPmRtYV9hZGRyZXNzID0gcGNpYnJfZG1hX21hcChwY2lkZXZfaW5mbywgcGh5c19hZGRyLAotCQkJCQkJc2ctPmxlbmd0aCwgMCk7CisJCXNnLT5kbWFfYWRkcmVzcyA9IHByb3ZpZGVyLT5kbWFfbWFwKHBkZXYsCisJCQkJCQkgICAgcGh5c19hZGRyLCBzZy0+bGVuZ3RoKTsKIAogCQlpZiAoIXNnLT5kbWFfYWRkcmVzcykgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3V0IG9mIEFURXNcbiIsIF9fRlVOQ1RJT05fXyk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2F0ZS5jIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9hdGUuYwppbmRleCA5ZDY4NTQ2Li4wZTQ3YmNlOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9hdGUuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2F0ZS5jCkBAIC04LDggKzgsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc24vc25fc2FsLmg+Ci0jaW5jbHVkZSAicGNpL3BjaWJ1c19wcm92aWRlcl9kZWZzLmgiCi0jaW5jbHVkZSAicGNpL3BjaWRldi5oIgorI2luY2x1ZGUgPGFzbS9zbi9wY2lidXNfcHJvdmlkZXJfZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9zbi9wY2lkZXYuaD4KICNpbmNsdWRlICJwY2kvcGNpYnJfcHJvdmlkZXIuaCIKIAogaW50IHBjaWJyX2ludmFsaWRhdGVfYXRlID0gMDsJLyogYnkgZGVmYXVsdCBkb24ndCBpbnZhbGlkYXRlIEFURSBvbiBmcmVlICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYwppbmRleCBiMWQ2NmFjLi42NGFmMmIyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfZG1hLmMKQEAgLTEyLDggKzEyLDggQEAKICNpbmNsdWRlIDxhc20vc24vZ2VvLmg+CiAjaW5jbHVkZSAieHRhbGsveHdpZGdldGRldi5oIgogI2luY2x1ZGUgInh0YWxrL2h1YmRldi5oIgotI2luY2x1ZGUgInBjaS9wY2lidXNfcHJvdmlkZXJfZGVmcy5oIgotI2luY2x1ZGUgInBjaS9wY2lkZXYuaCIKKyNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+CiAjaW5jbHVkZSAicGNpL3Rpb2NwLmgiCiAjaW5jbHVkZSAicGNpL3BpYy5oIgogI2luY2x1ZGUgInBjaS9wY2licl9wcm92aWRlci5oIgpAQCAtNDAsNyArNDAsNyBAQAogICogICAgICB3ZSBkbyBub3QgaGF2ZSB0byBhbGxvY2F0ZSBlbnRyaWVzIGluIHRoZSBQTVUuCiAgKi8KIAotc3RhdGljIHVpbnQ2NF90CitzdGF0aWMgZG1hX2FkZHJfdAogcGNpYnJfZG1hbWFwX2F0ZTMyKHN0cnVjdCBwY2lkZXZfaW5mbyAqaW5mbywKIAkJICAgdWludDY0X3QgcGFkZHIsIHNpemVfdCByZXFfc2l6ZSwgdWludDY0X3QgZmxhZ3MpCiB7CkBAIC0xMDksNyArMTA5LDcgQEAKIAlyZXR1cm4gcGNpX2FkZHI7CiB9CiAKLXN0YXRpYyB1aW50NjRfdAorc3RhdGljIGRtYV9hZGRyX3QKIHBjaWJyX2RtYXRyYW5zX2RpcmVjdDY0KHN0cnVjdCBwY2lkZXZfaW5mbyAqIGluZm8sIHVpbnQ2NF90IHBhZGRyLAogCQkJdWludDY0X3QgZG1hX2F0dHJpYnV0ZXMpCiB7CkBAIC0xNDEsNyArMTQxLDcgQEAKIAogfQogCi1zdGF0aWMgdWludDY0X3QKK3N0YXRpYyBkbWFfYWRkcl90CiBwY2licl9kbWF0cmFuc19kaXJlY3QzMihzdHJ1Y3QgcGNpZGV2X2luZm8gKiBpbmZvLAogCQkJdWludDY0X3QgcGFkZHIsIHNpemVfdCByZXFfc2l6ZSwgdWludDY0X3QgZmxhZ3MpCiB7CkBAIC0xODAsMTEgKzE4MCwxMSBAQAogICogRE1BIG1hcHBpbmdzIGZvciBEaXJlY3QgNjQgYW5kIDMyIGRvIG5vdCBoYXZlIGFueSBETUEgbWFwcy4KICAqLwogdm9pZAotcGNpYnJfZG1hX3VubWFwKHN0cnVjdCBwY2lkZXZfaW5mbyAqcGNpZGV2X2luZm8sIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJaW50IGRpcmVjdGlvbikKK3BjaWJyX2RtYV91bm1hcChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgaW50IGRpcmVjdGlvbikKIHsKLQlzdHJ1Y3QgcGNpYnVzX2luZm8gKnBjaWJ1c19pbmZvID0gKHN0cnVjdCBwY2lidXNfaW5mbyAqKXBjaWRldl9pbmZvLT4KLQkgICAgcGRpX3BjaWJ1c19pbmZvOworCXN0cnVjdCBwY2lkZXZfaW5mbyAqcGNpZGV2X2luZm8gPSBTTl9QQ0lERVZfSU5GTyhod2Rldik7CisJc3RydWN0IHBjaWJ1c19pbmZvICpwY2lidXNfaW5mbyA9CisJICAgIChzdHJ1Y3QgcGNpYnVzX2luZm8gKilwY2lkZXZfaW5mby0+cGRpX3BjaWJ1c19pbmZvOwogCiAJaWYgKElTX1BDSTMyX01BUFBFRChkbWFfaGFuZGxlKSkgewogCQlpbnQgYXRlX2luZGV4OwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCYoKHN0cnVjdCBzbl9mbHVzaF9kZXZpY2VfbGlzdCAqKXApLT4KIAkJCQkgIHNmZGxfZmx1c2hfbG9jaywgZmxhZ3MpOwogCi0JCXAtPnNmZGxfZmx1c2hfdmFsdWUgPSAwOworCQkqcC0+c2ZkbF9mbHVzaF9hZGRyID0gMDsKIAogCQkvKiBmb3JjZSBhbiBpbnRlcnJ1cHQuICovCiAJCSoodm9sYXRpbGUgdWludDMyX3QgKikocC0+c2ZkbF9mb3JjZV9pbnRfYWRkcikgPSAxOwpAQCAtMzE2LDY0ICszMTYsNjMgQEAKIH0KIAogLyoKLSAqIFdyYXBwZXIgRE1BIGludGVyZmFjZS4gIENhbGxlZCBmcm9tIHBjaV9kbWEuYyByb3V0aW5lcy4KKyAqIERNQSBpbnRlcmZhY2VzLiAgQ2FsbGVkIGZyb20gcGNpX2RtYS5jIHJvdXRpbmVzLgogICovCiAKLXVpbnQ2NF90Ci1wY2licl9kbWFfbWFwKHN0cnVjdCBwY2lkZXZfaW5mbyAqIHBjaWRldl9pbmZvLCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwKLQkgICAgICBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKQorZG1hX2FkZHJfdAorcGNpYnJfZG1hX21hcChzdHJ1Y3QgcGNpX2RldiAqIGh3ZGV2LCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgc2l6ZV90IHNpemUpCiB7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBwY2lkZXZfaW5mby0+cGRpX2xpbnV4X3BjaWRldjsKKwlzdHJ1Y3QgcGNpZGV2X2luZm8gKnBjaWRldl9pbmZvID0gU05fUENJREVWX0lORk8oaHdkZXYpOwogCi0JaWYgKGZsYWdzICYgU05fUENJRE1BX0NPTlNJU1RFTlQpIHsKLQkJLyogc25fcGNpX2FsbG9jX2NvbnNpc3RlbnQgaW50ZXJmYWNlcyAqLwotCQlpZiAocGNpZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPT0gfjBVTCkgewotCQkJZG1hX2hhbmRsZSA9Ci0JCQkgICAgcGNpYnJfZG1hdHJhbnNfZGlyZWN0NjQocGNpZGV2X2luZm8sIHBoeXNfYWRkciwKLQkJCQkJCSAgICBQQ0k2NF9BVFRSX0JBUik7Ci0JCX0gZWxzZSB7Ci0JCQlkbWFfaGFuZGxlID0KLQkJCSAgICAoZG1hX2FkZHJfdCkgcGNpYnJfZG1hbWFwX2F0ZTMyKHBjaWRldl9pbmZvLAotCQkJCQkJCSAgICBwaHlzX2FkZHIsIHNpemUsCi0JCQkJCQkJICAgIFBDSTMyX0FURV9CQVIpOwotCQl9CisJLyogU04gY2Fubm90IHN1cHBvcnQgRE1BIGFkZHJlc3NlcyBzbWFsbGVyIHRoYW4gMzIgYml0cy4gKi8KKwlpZiAoaHdkZXYtPmRtYV9tYXNrIDwgMHg3ZmZmZmZmZikgeworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaHdkZXYtPmRtYV9tYXNrID09IH4wVUwpIHsKKwkJLyoKKwkJICogSGFuZGxlIHRoZSBtb3N0IGNvbW1vbiBjYXNlOiA2NCBiaXQgY2FyZHMuICBUaGlzCisJCSAqIGNhbGwgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLgorCQkgKi8KKworCQlkbWFfaGFuZGxlID0gcGNpYnJfZG1hdHJhbnNfZGlyZWN0NjQocGNpZGV2X2luZm8sIHBoeXNfYWRkciwKKwkJCQkJCSAgICAgUENJNjRfQVRUUl9QUkVGKTsKIAl9IGVsc2UgewotCQkvKiBtYXBfc2cvbWFwX3NpbmdsZSBpbnRlcmZhY2VzICovCi0KLQkJLyogU04gY2Fubm90IHN1cHBvcnQgRE1BIGFkZHJlc3NlcyBzbWFsbGVyIHRoYW4gMzIgYml0cy4gKi8KLQkJaWYgKHBjaWRldi0+ZG1hX21hc2sgPCAweDdmZmZmZmZmKSB7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWlmIChwY2lkZXYtPmRtYV9tYXNrID09IH4wVUwpIHsKKwkJLyogSGFuZGxlIDMyLTYzIGJpdCBjYXJkcyB2aWEgZGlyZWN0IG1hcHBpbmcgKi8KKwkJZG1hX2hhbmRsZSA9IHBjaWJyX2RtYXRyYW5zX2RpcmVjdDMyKHBjaWRldl9pbmZvLCBwaHlzX2FkZHIsCisJCQkJCQkgICAgIHNpemUsIDApOworCQlpZiAoIWRtYV9oYW5kbGUpIHsKIAkJCS8qCi0JCQkgKiBIYW5kbGUgdGhlIG1vc3QgY29tbW9uIGNhc2U6IDY0IGJpdCBjYXJkcy4gIFRoaXMKLQkJCSAqIGNhbGwgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLgorCQkJICogSXQgaXMgYSAzMiBiaXQgY2FyZCBhbmQgd2UgY2Fubm90IGRvIGRpcmVjdCBtYXBwaW5nLAorCQkJICogc28gd2UgdXNlIGFuIEFURS4KIAkJCSAqLwogCi0JCQlkbWFfaGFuZGxlID0KLQkJCSAgICBwY2licl9kbWF0cmFuc19kaXJlY3Q2NChwY2lkZXZfaW5mbywgcGh5c19hZGRyLAotCQkJCQkJICAgIFBDSTY0X0FUVFJfUFJFRik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBIYW5kbGUgMzItNjMgYml0IGNhcmRzIHZpYSBkaXJlY3QgbWFwcGluZyAqLwotCQkJZG1hX2hhbmRsZSA9Ci0JCQkgICAgcGNpYnJfZG1hdHJhbnNfZGlyZWN0MzIocGNpZGV2X2luZm8sIHBoeXNfYWRkciwKLQkJCQkJCSAgICBzaXplLCAwKTsKLQkJCWlmICghZG1hX2hhbmRsZSkgewotCQkJCS8qCi0JCQkJICogSXQgaXMgYSAzMiBiaXQgY2FyZCBhbmQgd2UgY2Fubm90IGRvIGRpcmVjdCBtYXBwaW5nLAotCQkJCSAqIHNvIHdlIHVzZSBhbiBBVEUuCi0JCQkJICovCi0KLQkJCQlkbWFfaGFuZGxlID0KLQkJCQkgICAgcGNpYnJfZG1hbWFwX2F0ZTMyKHBjaWRldl9pbmZvLCBwaHlzX2FkZHIsCi0JCQkJCQkgICAgICAgc2l6ZSwgUENJMzJfQVRFX1BSRUYpOwotCQkJfQorCQkJZG1hX2hhbmRsZSA9IHBjaWJyX2RtYW1hcF9hdGUzMihwY2lkZXZfaW5mbywgcGh5c19hZGRyLAorCQkJCQkJCXNpemUsIFBDSTMyX0FURV9QUkVGKTsKIAkJfQogCX0KIAogCXJldHVybiBkbWFfaGFuZGxlOwogfQogCitkbWFfYWRkcl90CitwY2licl9kbWFfbWFwX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKiBod2RldiwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCisJCQkgc2l6ZV90IHNpemUpCit7CisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCXN0cnVjdCBwY2lkZXZfaW5mbyAqcGNpZGV2X2luZm8gPSBTTl9QQ0lERVZfSU5GTyhod2Rldik7CisKKwlpZiAoaHdkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9PSB+MFVMKSB7CisJCWRtYV9oYW5kbGUgPSBwY2licl9kbWF0cmFuc19kaXJlY3Q2NChwY2lkZXZfaW5mbywgcGh5c19hZGRyLAorCQkJCQkgICAgUENJNjRfQVRUUl9CQVIpOworCX0gZWxzZSB7CisJCWRtYV9oYW5kbGUgPSAoZG1hX2FkZHJfdCkgcGNpYnJfZG1hbWFwX2F0ZTMyKHBjaWRldl9pbmZvLAorCQkJCQkJICAgIHBoeXNfYWRkciwgc2l6ZSwKKwkJCQkJCSAgICBQQ0kzMl9BVEVfQkFSKTsKKwl9CisKKwlyZXR1cm4gZG1hX2hhbmRsZTsKK30KKwogRVhQT1JUX1NZTUJPTChzbl9kbWFfZmx1c2gpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9wcm92aWRlci5jIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9wcm92aWRlci5jCmluZGV4IDkyYmQyNzguLjM4OTM5OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcHJvdmlkZXIuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3Byb3ZpZGVyLmMKQEAgLTEzLDggKzEzLDggQEAKICNpbmNsdWRlICJ4dGFsay94d2lkZ2V0ZGV2LmgiCiAjaW5jbHVkZSA8YXNtL3NuL2dlby5oPgogI2luY2x1ZGUgInh0YWxrL2h1YmRldi5oIgotI2luY2x1ZGUgInBjaS9wY2lidXNfcHJvdmlkZXJfZGVmcy5oIgotI2luY2x1ZGUgInBjaS9wY2lkZXYuaCIKKyNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+CiAjaW5jbHVkZSAicGNpL3BjaWJyX3Byb3ZpZGVyLmgiCiAjaW5jbHVkZSA8YXNtL3NuL2FkZHJzLmg+CiAKQEAgLTE2OCwzICsxNjgsMjMgQEAKIAkJcGNpYnJfZm9yY2VfaW50ZXJydXB0KHNuX2lycV9pbmZvKTsKIAl9CiB9CisKKy8qCisgKiBQcm92aWRlciBlbnRyaWVzIGZvciBQSUMvQ1AKKyAqLworCitzdHJ1Y3Qgc25fcGNpYnVzX3Byb3ZpZGVyIHBjaWJyX3Byb3ZpZGVyID0geworCS5kbWFfbWFwID0gcGNpYnJfZG1hX21hcCwKKwkuZG1hX21hcF9jb25zaXN0ZW50ID0gcGNpYnJfZG1hX21hcF9jb25zaXN0ZW50LAorCS5kbWFfdW5tYXAgPSBwY2licl9kbWFfdW5tYXAsCisJLmJ1c19maXh1cCA9IHBjaWJyX2J1c19maXh1cCwKK307CisKK2ludAorcGNpYnJfaW5pdF9wcm92aWRlcih2b2lkKQoreworCXNuX3BjaV9wcm92aWRlcltQQ0lJT19BU0lDX1RZUEVfUElDXSA9ICZwY2licl9wcm92aWRlcjsKKwlzbl9wY2lfcHJvdmlkZXJbUENJSU9fQVNJQ19UWVBFX1RJT0NQXSA9ICZwY2licl9wcm92aWRlcjsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9yZWcuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcmVnLmMKaW5kZXggNzRhNzRhNy4uODY1YzExYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9yZWcuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3JlZy5jCkBAIC04LDggKzgsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlICJwY2kvcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaCIKLSNpbmNsdWRlICJwY2kvcGNpZGV2LmgiCisjaW5jbHVkZSA8YXNtL3NuL3BjaWJ1c19wcm92aWRlcl9kZWZzLmg+CisjaW5jbHVkZSA8YXNtL3NuL3BjaWRldi5oPgogI2luY2x1ZGUgInBjaS90aW9jcC5oIgogI2luY2x1ZGUgInBjaS9waWMuaCIKICNpbmNsdWRlICJwY2kvcGNpYnJfcHJvdmlkZXIuaCIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGFlOWViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS90aW9jYV9wcm92aWRlci5jCkBAIC0wLDAgKzEsNjY4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vc24vc25fc2FsLmg+CisjaW5jbHVkZSA8YXNtL3NuL2FkZHJzLmg+CisjaW5jbHVkZSA8YXNtL3NuL3BjaWRldi5oPgorI2luY2x1ZGUgPGFzbS9zbi9wY2lidXNfcHJvdmlkZXJfZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9zbi90aW9jYV9wcm92aWRlci5oPgorCit1aW50MzJfdCB0aW9jYV9nYXJ0X2ZvdW5kOworRVhQT1JUX1NZTUJPTCh0aW9jYV9nYXJ0X2ZvdW5kKTsJLyogdXNlZCBieSBhZ3Atc2dpICovCisKK0xJU1RfSEVBRCh0aW9jYV9saXN0KTsKK0VYUE9SVF9TWU1CT0wodGlvY2FfbGlzdCk7CS8qIHVzZWQgYnkgYWdwLXNnaSAqLworCitzdGF0aWMgaW50IHRpb2NhX2dhcnRfaW5pdChzdHJ1Y3QgdGlvY2Ffa2VybmVsICopOworCisvKioKKyAqIHRpb2NhX2dhcnRfaW5pdCAtIEluaXRpYWxpemUgU0dJIFRJT0NBIEdBUlQKKyAqIEB0aW9jYV9jb21tb246IHB0ciB0byBjb21tb24gcHJvbS9rZXJuZWwgc3RydWN0IGlkZW50aWZ5aW5nIHRoZSAKKyAqCisgKiBJZiB0aGUgaW5kaWNhdGVkIHRpb2NhIGhhcyBkZXZpY2VzIHByZXNlbnQsIGluaXRpYWxpemUgaXRzIGFzc29jaWF0ZWQKKyAqIEdBUlQgTU1SJ3MgYW5kIGtlcm5lbCBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbnQKK3Rpb2NhX2dhcnRfaW5pdChzdHJ1Y3QgdGlvY2Ffa2VybmVsICp0aW9jYV9rZXJuKQoreworCXVpbnQ2NF90IGFwX3JlZzsKKwl1aW50NjRfdCBvZmZzZXQ7CisJc3RydWN0IHBhZ2UgKnRtcDsKKwlzdHJ1Y3QgdGlvY2FfY29tbW9uICp0aW9jYV9jb21tb247CisJdm9sYXRpbGUgc3RydWN0IHRpb2NhICpjYV9iYXNlOworCisJdGlvY2FfY29tbW9uID0gdGlvY2Ffa2Vybi0+Y2FfY29tbW9uOworCWNhX2Jhc2UgPSAoc3RydWN0IHRpb2NhICopdGlvY2FfY29tbW9uLT5jYV9jb21tb24uYnNfYmFzZTsKKworCWlmIChsaXN0X2VtcHR5KHRpb2NhX2tlcm4tPmNhX2RldmljZXMpKQorCQlyZXR1cm4gMDsKKworCWFwX3JlZyA9IDA7CisKKwkvKgorCSAqIFZhbGlkYXRlIGFwZXJhdHVyZSBzaXplCisJICovCisKKwlzd2l0Y2ggKENBX0FQRVJBVFVSRV9TSVpFID4+IDIwKSB7CisJY2FzZSA0OgorCQlhcF9yZWcgfD0gKDB4M2ZmIDw8IENBX0dBUlRfQVBfU0laRV9TSEZUKTsJLyogNE1CICovCisJCWJyZWFrOworCWNhc2UgODoKKwkJYXBfcmVnIHw9ICgweDNmZSA8PCBDQV9HQVJUX0FQX1NJWkVfU0hGVCk7CS8qIDhNQiAqLworCQlicmVhazsKKwljYXNlIDE2OgorCQlhcF9yZWcgfD0gKDB4M2ZjIDw8IENBX0dBUlRfQVBfU0laRV9TSEZUKTsJLyogMTZNQiAqLworCQlicmVhazsKKwljYXNlIDMyOgorCQlhcF9yZWcgfD0gKDB4M2Y4IDw8IENBX0dBUlRfQVBfU0laRV9TSEZUKTsJLyogMzIgTUIgKi8KKwkJYnJlYWs7CisJY2FzZSA2NDoKKwkJYXBfcmVnIHw9ICgweDNmMCA8PCBDQV9HQVJUX0FQX1NJWkVfU0hGVCk7CS8qIDY0IE1CICovCisJCWJyZWFrOworCWNhc2UgMTI4OgorCQlhcF9yZWcgfD0gKDB4M2UwIDw8IENBX0dBUlRfQVBfU0laRV9TSEZUKTsJLyogMTI4IE1CICovCisJCWJyZWFrOworCWNhc2UgMjU2OgorCQlhcF9yZWcgfD0gKDB4M2MwIDw8IENBX0dBUlRfQVBfU0laRV9TSEZUKTsJLyogMjU2IE1CICovCisJCWJyZWFrOworCWNhc2UgNTEyOgorCQlhcF9yZWcgfD0gKDB4MzgwIDw8IENBX0dBUlRfQVBfU0laRV9TSEZUKTsJLyogNTEyIE1CICovCisJCWJyZWFrOworCWNhc2UgMTAyNDoKKwkJYXBfcmVnIHw9ICgweDMwMCA8PCBDQV9HQVJUX0FQX1NJWkVfU0hGVCk7CS8qIDFHQiAqLworCQlicmVhazsKKwljYXNlIDIwNDg6CisJCWFwX3JlZyB8PSAoMHgyMDAgPDwgQ0FfR0FSVF9BUF9TSVpFX1NIRlQpOwkvKiAyR0IgKi8KKwkJYnJlYWs7CisJY2FzZSA0MDk2OgorCQlhcF9yZWcgfD0gKDB4MDAwIDw8IENBX0dBUlRfQVBfU0laRV9TSEZUKTsJLyogNCBHQiAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiAgSW52YWxpZCBDQV9BUEVSQVRVUkVfU0laRSAiCisJCSAgICAgICAiMHglbHhcbiIsIF9fRlVOQ1RJT05fXywgKHVsb25nKSBDQV9BUEVSQVRVUkVfU0laRSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFNldCB1cCBvdGhlciBhcGVyYXR1cmUgcGFyYW1ldGVycworCSAqLworCisJaWYgKFBBR0VfU0laRSA+PSAxNjM4NCkgeworCQl0aW9jYV9rZXJuLT5jYV9hcF9wYWdlc2l6ZSA9IDE2Mzg0OworCQlhcF9yZWcgfD0gQ0FfR0FSVF9QQUdFX1NJWkU7CisJfSBlbHNlIHsKKwkJdGlvY2Ffa2Vybi0+Y2FfYXBfcGFnZXNpemUgPSA0MDk2OworCX0KKworCXRpb2NhX2tlcm4tPmNhX2FwX3NpemUgPSBDQV9BUEVSQVRVUkVfU0laRTsKKwl0aW9jYV9rZXJuLT5jYV9hcF9idXNfYmFzZSA9IENBX0FQRVJBVFVSRV9CQVNFOworCXRpb2NhX2tlcm4tPmNhX2dhcnRfZW50cmllcyA9CisJICAgIHRpb2NhX2tlcm4tPmNhX2FwX3NpemUgLyB0aW9jYV9rZXJuLT5jYV9hcF9wYWdlc2l6ZTsKKworCWFwX3JlZyB8PSAoQ0FfR0FSVF9BUF9FTkJfQUdQIHwgQ0FfR0FSVF9BUF9FTkJfUENJKTsKKwlhcF9yZWcgfD0gdGlvY2Ffa2Vybi0+Y2FfYXBfYnVzX2Jhc2U7CisKKwkvKgorCSAqIEFsbG9jYXRlIGFuZCBzZXQgdXAgdGhlIEdBUlQKKwkgKi8KKworCXRpb2NhX2tlcm4tPmNhX2dhcnRfc2l6ZSA9IHRpb2NhX2tlcm4tPmNhX2dhcnRfZW50cmllcyAqIHNpemVvZih1NjQpOworCXRtcCA9CisJICAgIGFsbG9jX3BhZ2VzX25vZGUodGlvY2Ffa2Vybi0+Y2FfY2xvc2VzdF9ub2RlLAorCQkJICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywKKwkJCSAgICAgZ2V0X29yZGVyKHRpb2NhX2tlcm4tPmNhX2dhcnRfc2l6ZSkpOworCisJaWYgKCF0bXApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogIENvdWxkIG5vdCBhbGxvY2F0ZSAiCisJCSAgICAgICAiJWx1IGJ5dGVzIChvcmRlciAlZCkgZm9yIEdBUlRcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sCisJCSAgICAgICB0aW9jYV9rZXJuLT5jYV9nYXJ0X3NpemUsCisJCSAgICAgICBnZXRfb3JkZXIodGlvY2Ffa2Vybi0+Y2FfZ2FydF9zaXplKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXRpb2NhX2tlcm4tPmNhX2dhcnQgPSBwYWdlX2FkZHJlc3ModG1wKTsKKwl0aW9jYV9rZXJuLT5jYV9nYXJ0X2NvcmV0YWxrX2FkZHIgPQorCSAgICBQSFlTX1RPX1RJT0RNQSh2aXJ0X3RvX3BoeXModGlvY2Ffa2Vybi0+Y2FfZ2FydCkpOworCisJLyoKKwkgKiBDb21wdXRlIFBDSS9BR1AgY29udmVuaWVuY2UgZmllbGRzIAorCSAqLworCisJb2Zmc2V0ID0gQ0FfUENJMzJfTUFQUEVEX0JBU0UgLSBDQV9BUEVSQVRVUkVfQkFTRTsKKwl0aW9jYV9rZXJuLT5jYV9wY2lhcF9iYXNlID0gQ0FfUENJMzJfTUFQUEVEX0JBU0U7CisJdGlvY2Ffa2Vybi0+Y2FfcGNpYXBfc2l6ZSA9IENBX1BDSTMyX01BUFBFRF9TSVpFOworCXRpb2NhX2tlcm4tPmNhX3BjaWdhcnRfc3RhcnQgPSBvZmZzZXQgLyB0aW9jYV9rZXJuLT5jYV9hcF9wYWdlc2l6ZTsKKwl0aW9jYV9rZXJuLT5jYV9wY2lnYXJ0X2Jhc2UgPQorCSAgICB0aW9jYV9rZXJuLT5jYV9nYXJ0X2NvcmV0YWxrX2FkZHIgKyBvZmZzZXQ7CisJdGlvY2Ffa2Vybi0+Y2FfcGNpZ2FydCA9CisJICAgICZ0aW9jYV9rZXJuLT5jYV9nYXJ0W3Rpb2NhX2tlcm4tPmNhX3BjaWdhcnRfc3RhcnRdOworCXRpb2NhX2tlcm4tPmNhX3BjaWdhcnRfZW50cmllcyA9CisJICAgIHRpb2NhX2tlcm4tPmNhX3BjaWFwX3NpemUgLyB0aW9jYV9rZXJuLT5jYV9hcF9wYWdlc2l6ZTsKKwl0aW9jYV9rZXJuLT5jYV9wY2lnYXJ0X3BhZ2VtYXAgPQorCSAgICBrY2FsbG9jKDEsIHRpb2NhX2tlcm4tPmNhX3BjaWdhcnRfZW50cmllcyAvIDgsIEdGUF9LRVJORUwpOworCWlmICghdGlvY2Ffa2Vybi0+Y2FfcGNpZ2FydF9wYWdlbWFwKSB7CisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdGlvY2Ffa2Vybi0+Y2FfZ2FydCwKKwkJCSAgIGdldF9vcmRlcih0aW9jYV9rZXJuLT5jYV9nYXJ0X3NpemUpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW9mZnNldCA9IENBX0FHUF9NQVBQRURfQkFTRSAtIENBX0FQRVJBVFVSRV9CQVNFOworCXRpb2NhX2tlcm4tPmNhX2dmeGFwX2Jhc2UgPSBDQV9BR1BfTUFQUEVEX0JBU0U7CisJdGlvY2Ffa2Vybi0+Y2FfZ2Z4YXBfc2l6ZSA9IENBX0FHUF9NQVBQRURfU0laRTsKKwl0aW9jYV9rZXJuLT5jYV9nZnhnYXJ0X3N0YXJ0ID0gb2Zmc2V0IC8gdGlvY2Ffa2Vybi0+Y2FfYXBfcGFnZXNpemU7CisJdGlvY2Ffa2Vybi0+Y2FfZ2Z4Z2FydF9iYXNlID0KKwkgICAgdGlvY2Ffa2Vybi0+Y2FfZ2FydF9jb3JldGFsa19hZGRyICsgb2Zmc2V0OworCXRpb2NhX2tlcm4tPmNhX2dmeGdhcnQgPQorCSAgICAmdGlvY2Ffa2Vybi0+Y2FfZ2FydFt0aW9jYV9rZXJuLT5jYV9nZnhnYXJ0X3N0YXJ0XTsKKwl0aW9jYV9rZXJuLT5jYV9nZnhnYXJ0X2VudHJpZXMgPQorCSAgICB0aW9jYV9rZXJuLT5jYV9nZnhhcF9zaXplIC8gdGlvY2Ffa2Vybi0+Y2FfYXBfcGFnZXNpemU7CisKKwkvKgorCSAqIHZhcmlvdXMgY29udHJvbCBzZXR0aW5nczoKKwkgKiAgICAgIHVzZSBhZ3Agb3AtY29tYmluaW5nCisJICogICAgICB1c2UgR0VUIHNlbWFudGljcyB0byBmZXRjaCBtZW1vcnkKKwkgKiAgICAgIHBhcnRpY2lwYXRlIGluIGNvaGVyZW5jeSBkb21haW4KKwkgKiAJRElTQUJMRSBHQVJUIFBSRUZFVENISU5HIGR1ZSB0byBodyBidWcgdHJhY2tlZCBpbiBTR0kgUFY5MzAwMjkKKwkgKi8KKworCWNhX2Jhc2UtPmNhX2NvbnRyb2wxIHw9IENBX0FHUERNQV9PUF9FTkJfQ09NQkRFTEFZOwkvKiBQVjg5NTQ2OSA/ICovCisJY2FfYmFzZS0+Y2FfY29udHJvbDIgJj0gfihDQV9HQVJUX01FTV9QQVJBTSk7CisJY2FfYmFzZS0+Y2FfY29udHJvbDIgfD0gKDB4MnVsbCA8PCBDQV9HQVJUX01FTV9QQVJBTV9TSEZUKTsKKwl0aW9jYV9rZXJuLT5jYV9nYXJ0X2lzY29oZXJlbnQgPSAxOworCWNhX2Jhc2UtPmNhX2NvbnRyb2wyICY9CisJICAgIH4oQ0FfR0FSVF9XUl9QUkVGRVRDSF9FTkIgfCBDQV9HQVJUX1JEX1BSRUZFVENIX0VOQik7CisKKwkvKgorCSAqIFVubWFzayBHQVJUIGZldGNoIGVycm9yIGludGVycnVwdHMuICBDbGVhciByZXNpZHVhbCBlcnJvcnMgZmlyc3QuCisJICovCisKKwljYV9iYXNlLT5jYV9pbnRfc3RhdHVzX2FsaWFzID0gQ0FfR0FSVF9GRVRDSF9FUlI7CisJY2FfYmFzZS0+Y2FfbXVsdF9lcnJvcl9hbGlhcyA9IENBX0dBUlRfRkVUQ0hfRVJSOworCWNhX2Jhc2UtPmNhX2ludF9tYXNrICY9IH5DQV9HQVJUX0ZFVENIX0VSUjsKKworCS8qCisJICogUHJvZ3JhbSB0aGUgYXBlcmF0dXJlIGFuZCBnYXJ0IHJlZ2lzdGVycyBpbiBUSU9DQQorCSAqLworCisJY2FfYmFzZS0+Y2FfZ2FydF9hcGVyYXR1cmUgPSBhcF9yZWc7CisJY2FfYmFzZS0+Y2FfZ2FydF9wdHJfdGFibGUgPSB0aW9jYV9rZXJuLT5jYV9nYXJ0X2NvcmV0YWxrX2FkZHIgfCAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdGlvY2FfZmFzdHdyaXRlX2VuYWJsZSAtIGVuYWJsZSBBR1AgRlcgZm9yIGEgdGlvY2EgYW5kIGl0cyBmdW5jdGlvbnMKKyAqIEB0aW9jYV9rZXJuZWw6IHN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIENBCisgKgorICogR2l2ZW4gYSBDQSwgc2NhbiBhbGwgYXR0YWNoZWQgZnVuY3Rpb25zIG1ha2luZyBzdXJlIHRoZXkgYWxsIHN1cHBvcnQKKyAqIEZhc3RXcml0ZS4gIElmIHNvLCBlbmFibGUgRmFzdFdyaXRlIGZvciBhbGwgZnVuY3Rpb25zIGFuZCB0aGUgQ0EgaXRzZWxmLgorICovCisKK3ZvaWQKK3Rpb2NhX2Zhc3R3cml0ZV9lbmFibGUoc3RydWN0IHRpb2NhX2tlcm5lbCAqdGlvY2Ffa2VybikKK3sKKwlpbnQgY2FwX3B0cjsKKwl1aW50NjRfdCBjYV9jb250cm9sMTsKKwl1aW50MzJfdCByZWc7CisJc3RydWN0IHRpb2NhICp0aW9jYV9iYXNlOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCB0aW9jYV9jb21tb24gKmNvbW1vbjsKKworCWNvbW1vbiA9IHRpb2NhX2tlcm4tPmNhX2NvbW1vbjsKKworCS8qCisJICogU2NhbiBhbGwgdmdhIGNvbnRyb2xsZXJzIG9uIHRoaXMgYnVzIG1ha2luZyBzdXJlIHRoZXkgYWxsCisJICogc3Vwb3J0IEZXLiAgSWYgbm90LCByZXR1cm4uCisJICovCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkZXYsIHRpb2NhX2tlcm4tPmNhX2RldmljZXMsIGJ1c19saXN0KSB7CisJCWlmIChwZGV2LT5jbGFzcyAhPSAoUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgpKQorCQkJY29udGludWU7CisKKwkJY2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApOworCQlpZiAoIWNhcF9wdHIpCisJCQlyZXR1cm47CS8qIG5vIEFHUCBDQVAgbWVhbnMgbm8gRlcgKi8KKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgY2FwX3B0ciArIFBDSV9BR1BfU1RBVFVTLCAmcmVnKTsKKwkJaWYgKCEocmVnICYgUENJX0FHUF9TVEFUVVNfRlcpKQorCQkJcmV0dXJuOwkvKiBmdW5jdGlvbiBkb2Vzbid0IHN1cHBvcnQgRlcgKi8KKwl9CisKKwkvKgorCSAqIFNldCBmdyBmb3IgYWxsIHZnYSBmbidzCisJICovCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkZXYsIHRpb2NhX2tlcm4tPmNhX2RldmljZXMsIGJ1c19saXN0KSB7CisJCWlmIChwZGV2LT5jbGFzcyAhPSAoUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgpKQorCQkJY29udGludWU7CisKKwkJY2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgY2FwX3B0ciArIFBDSV9BR1BfQ09NTUFORCwgJnJlZyk7CisJCXJlZyB8PSBQQ0lfQUdQX0NPTU1BTkRfRlc7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgY2FwX3B0ciArIFBDSV9BR1BfQ09NTUFORCwgcmVnKTsKKwl9CisKKwkvKgorCSAqIFNldCBjYSdzIGZ3IHRvIG1hdGNoCisJICovCisKKwl0aW9jYV9iYXNlID0gKHN0cnVjdCB0aW9jYSAqKWNvbW1vbi0+Y2FfY29tbW9uLmJzX2Jhc2U7CisJY2FfY29udHJvbDEgPSB0aW9jYV9iYXNlLT5jYV9jb250cm9sMTsKKwljYV9jb250cm9sMSB8PSBDQV9BR1BfRldfRU5BQkxFOworCXRpb2NhX2Jhc2UtPmNhX2NvbnRyb2wxID0gY2FfY29udHJvbDE7Cit9CisKK0VYUE9SVF9TWU1CT0wodGlvY2FfZmFzdHdyaXRlX2VuYWJsZSk7CS8qIHVzZWQgYnkgYWdwLXNnaSAqLworCisvKioKKyAqIHRpb2NhX2RtYV9kNjQgLSBjcmVhdGUgYSBETUEgbWFwcGluZyB1c2luZyA2NC1iaXQgZGlyZWN0IG1vZGUKKyAqIEBwYWRkcjogc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3MKKyAqCisgKiBNYXAgQHBhZGRyIGludG8gNjQtYml0IENBIGJ1cyBzcGFjZS4gIE5vIGRldmljZSBjb250ZXh0IGlzIG5lY2Vzc2FyeS4KKyAqIEJpdHMgNTM6MCBjb21lIGZyb20gdGhlIGNvcmV0YWxrIGFkZHJlc3MuICBXZSBqdXN0IG5lZWQgdG8gbWFzayBpbiB0aGUKKyAqIGZvbGxvd2luZyBvcHRpb25hbCBiaXRzIG9mIHRoZSA2NC1iaXQgcGNpIGFkZHJlc3M6CisgKgorICogNjM6NjAgLSBDb3JldGFsayBQYWNrZXQgVHlwZSAtICAweDEgZm9yIE1lbSBHZXQvUHV0IChjb2hlcmVudCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyIGZvciBQSU8gKG5vbi1jb2hlcmVudCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Ugd2lsbCBhbHdheXMgdXNlIDB4MQorICogNTU6NTUgLSBTd2FwIGJ5dGVzCQkgICBDdXJyZW50bHkgdW51c2VkCisgKi8KK3N0YXRpYyB1aW50NjRfdAordGlvY2FfZG1hX2Q2NCh1bnNpZ25lZCBsb25nIHBhZGRyKQoreworCWRtYV9hZGRyX3QgYnVzX2FkZHI7CisKKwlidXNfYWRkciA9IFBIWVNfVE9fVElPRE1BKHBhZGRyKTsKKworCUJVR19PTighYnVzX2FkZHIpOworCUJVR19PTihidXNfYWRkciA+PiA1NCk7CisKKwkvKiBTZXQgdXBwZXIgbmliYmxlIHRvIENhY2hlIENvaGVyZW50IE1lbW9yeSBvcCAqLworCWJ1c19hZGRyIHw9ICgxVUwgPDwgNjApOworCisJcmV0dXJuIGJ1c19hZGRyOworfQorCisvKioKKyAqIHRpb2NhX2RtYV9kNDggLSBjcmVhdGUgYSBETUEgbWFwcGluZyB1c2luZyA0OC1iaXQgZGlyZWN0IG1vZGUKKyAqIEBwZGV2OiBsaW51eCBwY2lfZGV2IHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24KKyAqIEBwYWRkcjogc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3MKKyAqCisgKiBNYXAgQHBhZGRyIGludG8gNjQtYml0IGJ1cyBzcGFjZSBvZiB0aGUgQ0EgYXNzb2NpYXRlZCB3aXRoIEBwY2lkZXZfaW5mby4KKyAqCisgKiBUaGUgQ0EgYWdwIDQ4IGJpdCBkaXJlY3QgYWRkcmVzcyBmYWxscyBvdXQgYXMgZm9sbG93czoKKyAqCisgKiBXaGVuIGRpcmVjdCBtYXBwaW5nIEFHUCBhZGRyZXNzZXMsIHRoZSA0OCBiaXQgQUdQIGFkZHJlc3MgaXMKKyAqIGNvbnN0cnVjdGVkIGFzIGZvbGxvd3M6CisgKgorICogWzQ3OjQwXSAtIExvdyA4IGJpdHMgb2YgdGhlIHBhZ2UgTm9kZSBJRCBleHRyYWN0ZWQgZnJvbSBjb3JldGFsaworICogICAgICAgICAgICAgIGFkZHJlc3MgWzQ3OjQwXS4gIFRoZSB1cHBlciA4IG5vZGUgYml0cyBhcmUgZml4ZWQKKyAqICAgICAgICAgICAgICBhbmQgY29tZSBmcm9tIHRoZSB4eHggcmVnaXN0ZXIgYml0cyBbNTowXQorICogWzM5OjM4XSAtIENoaXBsZXQgSUQgZXh0cmFjdGVkIGZyb20gY29yZXRhbGsgYWRkcmVzcyBbMzk6MzhdCisgKiBbMzc6MDBdIC0gbm9kZSBvZmZzZXQgZXh0cmFjdGVkIGZyb20gY29yZXRhbGsgYWRkcmVzcyBbMzc6MDBdCisgKiAKKyAqIFNpbmNlIHRoZSBub2RlIGlkIGluIGdlbmVyYWwgd2lsbCBiZSBub24temVybywgYW5kIHRoZSBjaGlwbGV0IGlkCisgKiB3aWxsIGFsd2F5cyBiZSBub24temVybywgaXQgZm9sbG93cyB0aGF0IHRoZSBkZXZpY2UgbXVzdCBzdXBwb3J0CisgKiBhIGRtYSBtYXNrIG9mIGF0IGxlYXN0IDB4ZmZmZmZmZmZmZiAoNDAgYml0cykgdG8gdGFyZ2V0IG5vZGUgMAorICogYW5kIGluIGdlbmVyYWwgc2hvdWxkIGJlIDB4ZmZmZmZmZmZmZmZmICg0OCBiaXRzKSB0byB0YXJnZXQgbm9kZXMKKyAqIHVwIHRvIDI1NS4gIE5vZGVzIGFib3ZlIDI1NSBuZWVkIHRoZSBzdXBwb3J0IG9mIHRoZSB4eHggcmVnaXN0ZXIsCisgKiBhbmQgc28gYSBnaXZlbiBDQSBjYW4gb25seSBkaXJlY3RseSB0YXJnZXQgbm9kZXMgaW4gdGhlIHJhbmdlCisgKiB4eHggLSB4eHgrMjU1LgorICovCitzdGF0aWMgdWludDY0X3QKK3Rpb2NhX2RtYV9kNDgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVpbnQ2NF90IHBhZGRyKQoreworCXN0cnVjdCB0aW9jYV9jb21tb24gKnRpb2NhX2NvbW1vbjsKKwlzdHJ1Y3QgdGlvY2EgKmNhX2Jhc2U7CisJdWludDY0X3QgY3RfYWRkcjsKKwlkbWFfYWRkcl90IGJ1c19hZGRyOworCXVpbnQzMl90IG5vZGVfdXBwZXI7CisJdWludDY0X3QgYWdwX2RtYV9leHRuOworCXN0cnVjdCBwY2lkZXZfaW5mbyAqcGNpZGV2X2luZm8gPSBTTl9QQ0lERVZfSU5GTyhwZGV2KTsKKworCXRpb2NhX2NvbW1vbiA9IChzdHJ1Y3QgdGlvY2FfY29tbW9uICopcGNpZGV2X2luZm8tPnBkaV9wY2lidXNfaW5mbzsKKwljYV9iYXNlID0gKHN0cnVjdCB0aW9jYSAqKXRpb2NhX2NvbW1vbi0+Y2FfY29tbW9uLmJzX2Jhc2U7CisKKwljdF9hZGRyID0gUEhZU19UT19USU9ETUEocGFkZHIpOworCWlmICghY3RfYWRkcikKKwkJcmV0dXJuIDA7CisKKwlidXNfYWRkciA9IChkbWFfYWRkcl90KSAoY3RfYWRkciAmIDB4ZmZmZmZmZmZmZmZmKTsKKwlub2RlX3VwcGVyID0gY3RfYWRkciA+PiA0ODsKKworCWlmIChub2RlX3VwcGVyID4gNjQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogIGNvcmV0YWxrIGFkZHIgMHglcCBub2RlIGlkIG91dCAiCisJCSAgICAgICAib2YgcmFuZ2VcbiIsIF9fRlVOQ1RJT05fXywgKHZvaWQgKiljdF9hZGRyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYWdwX2RtYV9leHRuID0gY2FfYmFzZS0+Y2FfYWdwX2RtYV9hZGRyX2V4dG47CisJaWYgKG5vZGVfdXBwZXIgIT0gKGFncF9kbWFfZXh0biA+PiBDQV9BR1BfRE1BX05PREVfSURfU0hGVCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogIGNvcmV0YWxrIHVwcGVyIG5vZGUgKCV1KSAiCisJCSAgICAgICAibWlzbWF0Y2ggd2l0aCBjYV9hZ3BfZG1hX2FkZHJfZXh0biAoJWx1KVxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywKKwkJICAgICAgIG5vZGVfdXBwZXIsIChhZ3BfZG1hX2V4dG4gPj4gQ0FfQUdQX0RNQV9OT0RFX0lEX1NIRlQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGJ1c19hZGRyOworfQorCisvKioKKyAqIHRpb2NhX2RtYV9tYXBwZWQgLSBjcmVhdGUgYSBETUEgbWFwcGluZyB1c2luZyBhIENBIEdBUlQgCisgKiBAcGRldjogbGludXggcGNpX2RldiByZXByZXNlbnRpbmcgdGhlIGZ1bmN0aW9uCisgKiBAcGFkZHI6IGhvc3QgcGh5c2ljYWwgYWRkcmVzcyB0byBtYXAKKyAqIEByZXFfc2l6ZTogbGVuIChieXRlcykgdG8gbWFwCisgKgorICogTWFwIEBwYWRkciBpbnRvIENBIGFkZHJlc3Mgc3BhY2UgdXNpbmcgdGhlIEdBUlQgbWVjaGFuaXNtLiAgVGhlIG1hcHBlZAorICogZG1hX2FkZHJfdCBpcyBndWFyZW50ZWVkIHRvIGJlIGNvbnRpZ3VvdXMgaW4gQ0EgYnVzIHNwYWNlLgorICovCitzdGF0aWMgZG1hX2FkZHJfdAordGlvY2FfZG1hX21hcHBlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdWludDY0X3QgcGFkZHIsIHNpemVfdCByZXFfc2l6ZSkKK3sKKwlpbnQgaSwgcHMsIHBzX3NoaWZ0LCBlbnRyeSwgZW50cmllcywgbWFwc2l6ZSwgbGFzdF9lbnRyeTsKKwl1aW50NjRfdCB4aW9fYWRkciwgZW5kX3hpb19hZGRyOworCXN0cnVjdCB0aW9jYV9jb21tb24gKnRpb2NhX2NvbW1vbjsKKwlzdHJ1Y3QgdGlvY2Ffa2VybmVsICp0aW9jYV9rZXJuOworCWRtYV9hZGRyX3QgYnVzX2FkZHIgPSAwOworCXN0cnVjdCB0aW9jYV9kbWFtYXAgKmNhX2RtYW1hcDsKKwl2b2lkICptYXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGNpZGV2X2luZm8gKnBjaWRldl9pbmZvID0gU05fUENJREVWX0lORk8ocGRldik7OworCisJdGlvY2FfY29tbW9uID0gKHN0cnVjdCB0aW9jYV9jb21tb24gKilwY2lkZXZfaW5mby0+cGRpX3BjaWJ1c19pbmZvOworCXRpb2NhX2tlcm4gPSAoc3RydWN0IHRpb2NhX2tlcm5lbCAqKXRpb2NhX2NvbW1vbi0+Y2Ffa2VybmVsX3ByaXZhdGU7CisKKwl4aW9fYWRkciA9IFBIWVNfVE9fVElPRE1BKHBhZGRyKTsKKwlpZiAoIXhpb19hZGRyKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW9jYV9rZXJuLT5jYV9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIGFsbG9jYXRlIGEgbWFwIHN0cnVjdAorCSAqLworCisJY2FfZG1hbWFwID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRpb2NhX2RtYW1hcCksIEdGUF9BVE9NSUMpOworCWlmICghY2FfZG1hbWFwKQorCQlnb3RvIG1hcF9yZXR1cm47CisKKwkvKgorCSAqIExvY2F0ZSBmcmVlIGVudHJpZXMgdGhhdCBjYW4gaG9sZCByZXFfc2l6ZS4gIEFjY291bnQgZm9yCisJICogdW5hbGlnbmVkIHN0YXJ0L2xlbmd0aCB3aGVuIGFsbG9jYXRpbmcuCisJICovCisKKwlwcyA9IHRpb2NhX2tlcm4tPmNhX2FwX3BhZ2VzaXplOwkvKiB3aWxsIGJlIHBvd2VyIG9mIDIgKi8KKwlwc19zaGlmdCA9IGZmcyhwcykgLSAxOworCWVuZF94aW9fYWRkciA9IHhpb19hZGRyICsgcmVxX3NpemUgLSAxOworCisJZW50cmllcyA9IChlbmRfeGlvX2FkZHIgPj4gcHNfc2hpZnQpIC0gKHhpb19hZGRyID4+IHBzX3NoaWZ0KSArIDE7CisKKwltYXAgPSB0aW9jYV9rZXJuLT5jYV9wY2lnYXJ0X3BhZ2VtYXA7CisJbWFwc2l6ZSA9IHRpb2NhX2tlcm4tPmNhX3BjaWdhcnRfZW50cmllczsKKworCWVudHJ5ID0gZmluZF9maXJzdF96ZXJvX2JpdChtYXAsIG1hcHNpemUpOworCXdoaWxlIChlbnRyeSA8IG1hcHNpemUpIHsKKwkJbGFzdF9lbnRyeSA9IGZpbmRfbmV4dF9iaXQobWFwLCBtYXBzaXplLCBlbnRyeSk7CisKKwkJaWYgKGxhc3RfZW50cnkgLSBlbnRyeSA+PSBlbnRyaWVzKQorCQkJYnJlYWs7CisKKwkJZW50cnkgPSBmaW5kX25leHRfemVyb19iaXQobWFwLCBtYXBzaXplLCBsYXN0X2VudHJ5KTsKKwl9CisKKwlpZiAoZW50cnkgPiBtYXBzaXplKQorCQlnb3RvIG1hcF9yZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKQorCQlzZXRfYml0KGVudHJ5ICsgaSwgbWFwKTsKKworCWJ1c19hZGRyID0gdGlvY2Ffa2Vybi0+Y2FfcGNpYXBfYmFzZSArIChlbnRyeSAqIHBzKTsKKworCWNhX2RtYW1hcC0+Y2FkX2RtYV9hZGRyID0gYnVzX2FkZHI7CisJY2FfZG1hbWFwLT5jYWRfZ2FydF9zaXplID0gZW50cmllczsKKwljYV9kbWFtYXAtPmNhZF9nYXJ0X2VudHJ5ID0gZW50cnk7CisJbGlzdF9hZGQoJmNhX2RtYW1hcC0+Y2FkX2xpc3QsICZ0aW9jYV9rZXJuLT5jYV9kbWFtYXBzKTsKKworCWlmICh4aW9fYWRkciAlIHBzKSB7CisJCXRpb2NhX2tlcm4tPmNhX3BjaWdhcnRbZW50cnldID0gdGlvY2FfcGFkZHJfdG9fZ2FydCh4aW9fYWRkcik7CisJCWJ1c19hZGRyICs9IHhpb19hZGRyICYgKHBzIC0gMSk7CisJCXhpb19hZGRyICY9IH4ocHMgLSAxKTsKKwkJeGlvX2FkZHIgKz0gcHM7CisJCWVudHJ5Kys7CisJfQorCisJd2hpbGUgKHhpb19hZGRyIDwgZW5kX3hpb19hZGRyKSB7CisJCXRpb2NhX2tlcm4tPmNhX3BjaWdhcnRbZW50cnldID0gdGlvY2FfcGFkZHJfdG9fZ2FydCh4aW9fYWRkcik7CisJCXhpb19hZGRyICs9IHBzOworCQllbnRyeSsrOworCX0KKworCXRpb2NhX3RsYmZsdXNoKHRpb2NhX2tlcm4pOworCittYXBfcmV0dXJuOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpb2NhX2tlcm4tPmNhX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gYnVzX2FkZHI7Cit9CisKKy8qKgorICogdGlvY2FfZG1hX3VubWFwIC0gcmVsZWFzZSBDQSBtYXBwaW5nIHJlc291cmNlcworICogQHBkZXY6IGxpbnV4IHBjaV9kZXYgcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbgorICogQGJ1c19hZGRyOiBidXMgYWRkcmVzcyByZXR1cm5lZCBieSBhbiBlYXJsaWVyIHRpb2NhX2RtYV9tYXAKKyAqIEBkaXI6IG1hcHBpbmcgZGlyZWN0aW9uICh1bnVzZWQpCisgKgorICogTG9jYXRlIG1hcHBpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBAYnVzX2FkZHIgYW5kIHJlbGVhc2UgdGhlbS4KKyAqIEZvciBtYXBwaW5ncyBjcmVhdGVkIHVzaW5nIHRoZSBkaXJlY3QgbW9kZXMgKDY0IG9yIDQ4KSB0aGVyZSBhcmUgbm8KKyAqIHJlc291cmNlcyB0byByZWxlYXNlLgorICovCit2b2lkCit0aW9jYV9kbWFfdW5tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYV9hZGRyX3QgYnVzX2FkZHIsIGludCBkaXIpCit7CisJaW50IGksIGVudHJ5OworCXN0cnVjdCB0aW9jYV9jb21tb24gKnRpb2NhX2NvbW1vbjsKKwlzdHJ1Y3QgdGlvY2Ffa2VybmVsICp0aW9jYV9rZXJuOworCXN0cnVjdCB0aW9jYV9kbWFtYXAgKm1hcDsKKwlzdHJ1Y3QgcGNpZGV2X2luZm8gKnBjaWRldl9pbmZvID0gU05fUENJREVWX0lORk8ocGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXRpb2NhX2NvbW1vbiA9IChzdHJ1Y3QgdGlvY2FfY29tbW9uICopcGNpZGV2X2luZm8tPnBkaV9wY2lidXNfaW5mbzsKKwl0aW9jYV9rZXJuID0gKHN0cnVjdCB0aW9jYV9rZXJuZWwgKil0aW9jYV9jb21tb24tPmNhX2tlcm5lbF9wcml2YXRlOworCisJLyogcmV0dXJuIHN0cmFpZ2h0IGF3YXkgaWYgdGhpcyBpc24ndCBiZSBhIG1hcHBlZCBhZGRyZXNzICovCisKKwlpZiAoYnVzX2FkZHIgPCB0aW9jYV9rZXJuLT5jYV9wY2lhcF9iYXNlIHx8CisJICAgIGJ1c19hZGRyID49ICh0aW9jYV9rZXJuLT5jYV9wY2lhcF9iYXNlICsgdGlvY2Ffa2Vybi0+Y2FfcGNpYXBfc2l6ZSkpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW9jYV9rZXJuLT5jYV9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcCwgJnRpb2NhX2tlcm4tPmNhX2RtYW1hcHMsIGNhZF9saXN0KQorCSAgICBpZiAobWFwLT5jYWRfZG1hX2FkZHIgPT0gYnVzX2FkZHIpCisJCWJyZWFrOworCisJQlVHX09OKG1hcCA9PSBOVUxMKTsKKworCWVudHJ5ID0gbWFwLT5jYWRfZ2FydF9lbnRyeTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXAtPmNhZF9nYXJ0X3NpemU7IGkrKywgZW50cnkrKykgeworCQljbGVhcl9iaXQoZW50cnksIHRpb2NhX2tlcm4tPmNhX3BjaWdhcnRfcGFnZW1hcCk7CisJCXRpb2NhX2tlcm4tPmNhX3BjaWdhcnRbZW50cnldID0gMDsKKwl9CisJdGlvY2FfdGxiZmx1c2godGlvY2Ffa2Vybik7CisKKwlsaXN0X2RlbCgmbWFwLT5jYWRfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlvY2Ffa2Vybi0+Y2FfbG9jaywgZmxhZ3MpOworCWtmcmVlKG1hcCk7Cit9CisKKy8qKgorICogdGlvY2FfZG1hX21hcCAtIG1hcCBwYWdlcyBmb3IgUENJIERNQQorICogQHBkZXY6IGxpbnV4IHBjaV9kZXYgcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbgorICogQHBhZGRyOiBob3N0IHBoeXNpY2FsIGFkZHJlc3MgdG8gbWFwCisgKiBAYnl0ZV9jb3VudDogYnl0ZXMgdG8gbWFwCisgKgorICogVGhpcyBpcyB0aGUgbWFpbiB3cmFwcGVyIGZvciBtYXBwaW5nIGhvc3QgcGh5c2ljYWwgcGFnZXMgdG8gQ0EgUENJIHNwYWNlLgorICogVGhlIG1hcHBpbmcgbW9kZSB1c2VkIGlzIGJhc2VkIG9uIHRoZSBkZXZpY2VzIGRtYV9tYXNrLiAgQXMgYSBsYXN0IHJlc29ydAorICogdXNlIHRoZSBHQVJUIG1hcHBlZCBtb2RlLgorICovCit1aW50NjRfdAordGlvY2FfZG1hX21hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdWludDY0X3QgcGFkZHIsIHNpemVfdCBieXRlX2NvdW50KQoreworCXVpbnQ2NF90IG1hcGFkZHI7CisKKwkvKgorCSAqIElmIGNhcmQgaXMgNjQgb3IgNDggYml0IGFkZHJlc2FibGUsIHVzZSBhIGRpcmVjdCBtYXBwaW5nLiAgMzIKKwkgKiBiaXQgZGlyZWN0IGlzIHNvIHJlc3RyaWN0aXZlIHcuci50LiB3aGVyZSB0aGUgbWVtb3J5IHJlc2lkZXMgdGhhdAorCSAqIHdlIGRvbid0IHVzZSBpdCBldmVuIHRob3VnaCBDQSBoYXMgc29tZSBzdXBwb3J0LgorCSAqLworCisJaWYgKHBkZXYtPmRtYV9tYXNrID09IH4wVUwpCisJCW1hcGFkZHIgPSB0aW9jYV9kbWFfZDY0KHBhZGRyKTsKKwllbHNlIGlmIChwZGV2LT5kbWFfbWFzayA9PSAweGZmZmZmZmZmZmZmZlVMKQorCQltYXBhZGRyID0gdGlvY2FfZG1hX2Q0OChwZGV2LCBwYWRkcik7CisJZWxzZQorCQltYXBhZGRyID0gMDsKKworCS8qIExhc3QgcmVzb3J0IC4uLiB1c2UgUENJIHBvcnRpb24gb2YgQ0EgR0FSVCAqLworCisJaWYgKG1hcGFkZHIgPT0gMCkKKwkJbWFwYWRkciA9IHRpb2NhX2RtYV9tYXBwZWQocGRldiwgcGFkZHIsIGJ5dGVfY291bnQpOworCisJcmV0dXJuIG1hcGFkZHI7Cit9CisKKy8qKgorICogdGlvY2FfZXJyb3JfaW50cl9oYW5kbGVyIC0gU0dJIFRJTyBDQSBlcnJvciBpbnRlcnJ1cHQgaGFuZGxlcgorICogQGlycTogdW51c2VkCisgKiBAYXJnOiBwb2ludGVyIHRvIHRpb2NhX2NvbW1vbiBzdHJ1Y3QgZm9yIHRoZSBnaXZlbiBDQQorICogQHB0OiB1bnVzZWQKKyAqCisgKiBIYW5kbGUgYSBDQSBlcnJvciBpbnRlcnJ1cHQuICBTaW1wbHkgYSB3cmFwcGVyIGFyb3VuZCBhIFNBTCBjYWxsIHdoaWNoCisgKiBkZWZlcnMgcHJvY2Vzc2luZyB0byB0aGUgU0dJIHByb20uCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdAordGlvY2FfZXJyb3JfaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZywgc3RydWN0IHB0X3JlZ3MgKnB0KQoreworCXN0cnVjdCB0aW9jYV9jb21tb24gKnNvZnQgPSBhcmc7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CisJdWludDY0X3Qgc2VnbWVudDsKKwl1aW50NjRfdCBidXNudW07CisJcmV0X3N0dWZmLnN0YXR1cyA9IDA7CisJcmV0X3N0dWZmLnYwID0gMDsKKworCXNlZ21lbnQgPSAwOworCWJ1c251bSA9IHNvZnQtPmNhX2NvbW1vbi5ic19wZXJzaXN0X2J1c251bTsKKworCVNBTF9DQUxMX05PTE9DSyhyZXRfc3R1ZmYsCisJCQkodTY0KSBTTl9TQUxfSU9JRl9FUlJPUl9JTlRFUlJVUFQsCisJCQlzZWdtZW50LCBidXNudW0sIDAsIDAsIDAsIDAsIDApOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHRpb2NhX2J1c19maXh1cCAtIHBlcmZvcm0gZmluYWwgUENJIGZpeHVwIGZvciBhIFRJTyBDQSBidXMKKyAqIEBwcm9tX2J1c3NvZnQ6IENvbW1vbiBwcm9tL2tlcm5lbCBzdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZSBidXMKKyAqCisgKiBSZXBsaWNhdGVzIHRoZSB0aW9jYV9jb21tb24gcG9pbnRlZCB0byBieSBAcHJvbV9idXNzb2Z0IGluIGtlcm5lbAorICogc3BhY2UuICBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEga2VybmVsLW9ubHkgYXJlYSBmb3IgYSBnaXZlbiBDQSwKKyAqIGFuZCBzZXRzIHVwIGFuIGlycSBmb3IgaGFuZGxpbmcgQ0EgZXJyb3IgaW50ZXJydXB0cy4KKyAqCisgKiBPbiBzdWNjZXNzZnVsIHNldHVwLCByZXR1cm5zIHRoZSBrZXJuZWwgdmVyc2lvbiBvZiB0aW9jYV9jb21tb24gYmFjayB0bworICogdGhlIGNhbGxlci4KKyAqLwordm9pZCAqCit0aW9jYV9idXNfZml4dXAoc3RydWN0IHBjaWJ1c19idXNzb2Z0ICpwcm9tX2J1c3NvZnQpCit7CisJc3RydWN0IHRpb2NhX2NvbW1vbiAqdGlvY2FfY29tbW9uOworCXN0cnVjdCB0aW9jYV9rZXJuZWwgKnRpb2NhX2tlcm47CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKworCS8qIHNhbml0eSBjaGVjayBwcm9tIHJldiAqLworCisJaWYgKHNuX3NhbF9yZXZfbWFqb3IoKSA8IDQgfHwKKwkgICAgKHNuX3NhbF9yZXZfbWFqb3IoKSA9PSA0ICYmIHNuX3NhbF9yZXZfbWlub3IoKSA8IDYpKSB7CisJCXByaW50aworCQkgICAgKEtFUk5fRVJSICIlczogIFNHSSBwcm9tIHJldiA0LjA2IG9yIGdyZWF0ZXIgcmVxdWlyZWQgIgorCQkgICAgICJmb3IgdGlvY2Egc3VwcG9ydFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBrZXJuZWwgYnVzIHNvZnQgYW5kIGNvcHkgZnJvbSBwcm9tLgorCSAqLworCisJdGlvY2FfY29tbW9uID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRpb2NhX2NvbW1vbiksIEdGUF9LRVJORUwpOworCWlmICghdGlvY2FfY29tbW9uKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbWNweSh0aW9jYV9jb21tb24sIHByb21fYnVzc29mdCwgc2l6ZW9mKHN0cnVjdCB0aW9jYV9jb21tb24pKTsKKwl0aW9jYV9jb21tb24tPmNhX2NvbW1vbi5ic19iYXNlIHw9IF9fSUE2NF9VTkNBQ0hFRF9PRkZTRVQ7CisKKwkvKiBpbml0IGtlcm5lbC1wcml2YXRlIGFyZWEgKi8KKworCXRpb2NhX2tlcm4gPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGlvY2Ffa2VybmVsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0aW9jYV9rZXJuKSB7CisJCWtmcmVlKHRpb2NhX2NvbW1vbik7CisJCXJldHVybiBOVUxMOworCX0KKworCXRpb2NhX2tlcm4tPmNhX2NvbW1vbiA9IHRpb2NhX2NvbW1vbjsKKwlzcGluX2xvY2tfaW5pdCgmdGlvY2Ffa2Vybi0+Y2FfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnRpb2NhX2tlcm4tPmNhX2RtYW1hcHMpOworCXRpb2NhX2tlcm4tPmNhX2Nsb3Nlc3Rfbm9kZSA9CisJICAgIG5hc2lkX3RvX2Nub2RlaWQodGlvY2FfY29tbW9uLT5jYV9jbG9zZXN0X25hc2lkKTsKKwl0aW9jYV9jb21tb24tPmNhX2tlcm5lbF9wcml2YXRlID0gKHVpbnQ2NF90KSB0aW9jYV9rZXJuOworCisJYnVzID0gcGNpX2ZpbmRfYnVzKDAsIHRpb2NhX2NvbW1vbi0+Y2FfY29tbW9uLmJzX3BlcnNpc3RfYnVzbnVtKTsKKwlCVUdfT04oIWJ1cyk7CisJdGlvY2Ffa2Vybi0+Y2FfZGV2aWNlcyA9ICZidXMtPmRldmljZXM7CisKKwkvKiBpbml0IEdBUlQgKi8KKworCWlmICh0aW9jYV9nYXJ0X2luaXQodGlvY2Ffa2VybikgPCAwKSB7CisJCWtmcmVlKHRpb2NhX2tlcm4pOworCQlrZnJlZSh0aW9jYV9jb21tb24pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl0aW9jYV9nYXJ0X2ZvdW5kKys7CisJbGlzdF9hZGQoJnRpb2NhX2tlcm4tPmNhX2xpc3QsICZ0aW9jYV9saXN0KTsKKworCWlmIChyZXF1ZXN0X2lycShTR0lfVElPQ0FfRVJST1IsCisJCQl0aW9jYV9lcnJvcl9pbnRyX2hhbmRsZXIsCisJCQlTQV9TSElSUSwgIlRJT0NBIGVycm9yIiwgKHZvaWQgKil0aW9jYV9jb21tb24pKQorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiJXM6ICBVbmFibGUgdG8gZ2V0IGlycSAlZC4gICIKKwkJICAgICAgICJFcnJvciBpbnRlcnJ1cHRzIHdvbid0IGJlIHJvdXRlZCBmb3IgVElPQ0EgYnVzICVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBTR0lfVElPQ0FfRVJST1IsCisJCSAgICAgICAoaW50KXRpb2NhX2NvbW1vbi0+Y2FfY29tbW9uLmJzX3BlcnNpc3RfYnVzbnVtKTsKKworCXJldHVybiB0aW9jYV9jb21tb247Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25fcGNpYnVzX3Byb3ZpZGVyIHRpb2NhX3BjaV9pbnRlcmZhY2VzID0geworCS5kbWFfbWFwID0gdGlvY2FfZG1hX21hcCwKKwkuZG1hX21hcF9jb25zaXN0ZW50ID0gdGlvY2FfZG1hX21hcCwKKwkuZG1hX3VubWFwID0gdGlvY2FfZG1hX3VubWFwLAorCS5idXNfZml4dXAgPSB0aW9jYV9idXNfZml4dXAsCit9OworCisvKioKKyAqIHRpb2NhX2luaXRfcHJvdmlkZXIgLSBpbml0IFNOIFBDSSBwcm92aWRlciBvcHMgZm9yIFRJTyBDQQorICovCitpbnQKK3Rpb2NhX2luaXRfcHJvdmlkZXIodm9pZCkKK3sKKwlzbl9wY2lfcHJvdmlkZXJbUENJSU9fQVNJQ19UWVBFX1RJT0NBXSA9ICZ0aW9jYV9wY2lfaW50ZXJmYWNlczsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL20zMnIva2VybmVsL3B0cmFjZS5jCmluZGV4IDhiNDBmMzYuLjEyNGY3YzFiIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvcHRyYWNlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNjY1LDcgKzY2Niw3IEBACiAJY2FzZSBQVFJBQ0VfU1lTQ0FMTDoKIAljYXNlIFBUUkFDRV9DT05UOgogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCiAJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC03MDAsNyArNzAxLDcgQEAKIAkJdW5zaWduZWQgbG9uZyBwYywgaW5zbjsKIAogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CiAJCWlmICgoY2hpbGQtPnB0cmFjZSAmIFBUX0RUUkFDRSkgPT0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMGJlYjUzMy4uZjRlMWU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMjUxLDcgKzI1Miw3IEBACiAJCQlsb25nIHRtcDsKIAogCQkJcmV0ID0gLUVJTzsKLQkJCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQkJYnJlYWs7CiAJCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkgewogCQkJCQljaGlsZC0+dGhyZWFkLndvcmsuc3lzY2FsbF90cmFjZSA9IH4wOwpAQCAtMjkyLDcgKzI5Myw3IEBACiAJCQlsb25nIHRtcDsKIAogCQkJcmV0ID0gLUVJTzsKLQkJCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQkJYnJlYWs7CiAJCQljaGlsZC0+dGhyZWFkLndvcmsuc3lzY2FsbF90cmFjZSA9IDA7CiAJCQl0bXAgPSBnZXRfcmVnKGNoaWxkLCBQVF9TUikgfCAoVFJBQ0VfQklUUyA8PCAxNik7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9LY29uZmlnIGIvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZwppbmRleCBmYzQ2MTViLi5lNzI5YmQyIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9LY29uZmlnCisrKyBiL2FyY2gvbTY4a25vbW11L0tjb25maWcKQEAgLTUzNCw2ICs1MzQsMTEgQEAKIAogZW5kbWVudQogCitjb25maWcgSVNBX0RNQV9BUEkKKwlib29sCisJZGVwZW5kcyBvbiAhTTUyNzIKKwlkZWZhdWx0IHkKKwogbWVudSAiQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBNQ0EsIElTQSkiCiAKIGNvbmZpZyBQQ0kKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYwppbmRleCAxNWNmNzkwLi45NzI0ZTFjIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3B0cmFjZS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMjQwLDcgKzI0MSw3IEBACiAJCQlsb25nIHRtcDsKIAogCQkJcmV0ID0gLUVJTzsKLQkJCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQkJYnJlYWs7CiAJCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkKIAkJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC0yNzgsNyArMjc5LDcgQEAKIAkJCWxvbmcgdG1wOwogCiAJCQlyZXQgPSAtRUlPOwotCQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCQlicmVhazsKIAkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwogCQkJdG1wID0gZ2V0X3JlZyhjaGlsZCwgUFRfU1IpIHwgKFRSQUNFX0JJVFMgPDwgMTYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCA1ZTY2NmFhLi5hYjk5NDQ2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMTY1NiwzICsxNjU2LDcgQEAKIGNvbmZpZyBHRU5FUklDX0lSUV9QUk9CRQogCWJvb2wKIAlkZWZhdWx0IHkKKworY29uZmlnIElTQV9ETUFfQVBJCisJYm9vbAorCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOTJmMmMzOS4uOTJlNzBjYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CkBAIC0yNTcsNyArMjU4LDcgQEAKIAljYXNlIFBUUkFDRV9TWVNDQUxMOiAvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwogCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkgewogCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpAQCAtMzAwLDI1ICszMDEsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9hcmNoKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCisjaWZkZWYgQ09ORklHX01JUFM2NAorCWlmICghKGN1cnJlbnQtPnRocmVhZC5tZmxhZ3MgJiBNRl8zMkJJVF9SRUdTKSkKKwkJcmV0dXJuIEFVRElUX0FSQ0hfTUlQU0VMNjQ7CisjZW5kaWYgLyogTUlQUzY0ICovCisJcmV0dXJuIEFVRElUX0FSQ0hfTUlQU0VMOworCisjZWxzZSAvKiBiaWcgZW5kaWFuLi4uICovCisjaWZkZWYgQ09ORklHX01JUFM2NAorCWlmICghKGN1cnJlbnQtPnRocmVhZC5tZmxhZ3MgJiBNRl8zMkJJVF9SRUdTKSkKKwkJcmV0dXJuIEFVRElUX0FSQ0hfTUlQUzY0OworI2VuZGlmIC8qIE1JUFM2NCAqLworCXJldHVybiBBVURJVF9BUkNIX01JUFM7CisKKyNlbmRpZiAvKiBlbmRpYW4gKi8KK30KKwogLyoKICAqIE5vdGlmaWNhdGlvbiBvZiBzeXN0ZW0gY2FsbCBlbnRyeS9leGl0CiAgKiAtIHRyaWdnZXJlZCBieSBjdXJyZW50LT53b3JrLnN5c2NhbGxfdHJhY2UKICAqLwogYXNtbGlua2FnZSB2b2lkIGRvX3N5c2NhbGxfdHJhY2Uoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlbnRyeWV4aXQpCiB7Ci0JaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKSB7Ci0JCWlmICghZW50cnlleGl0KQotCQkJYXVkaXRfc3lzY2FsbF9lbnRyeShjdXJyZW50LCByZWdzLT5yZWdzWzJdLAotCQkJICAgICAgICAgICAgICAgICAgICByZWdzLT5yZWdzWzRdLCByZWdzLT5yZWdzWzVdLAotCQkJICAgICAgICAgICAgICAgICAgICByZWdzLT5yZWdzWzZdLCByZWdzLT5yZWdzWzddKTsKLQkJZWxzZQotCQkJYXVkaXRfc3lzY2FsbF9leGl0KGN1cnJlbnQsIHJlZ3MtPnJlZ3NbMl0pOwotCX0KKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkgJiYgZW50cnlleGl0KQorCQlhdWRpdF9zeXNjYWxsX2V4aXQoY3VycmVudCwgQVVESVRTQ19SRVNVTFQocmVncy0+cmVnc1syXSksIHJlZ3MtPnJlZ3NbMl0pOwogCiAJaWYgKCF0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAlpZiAoIShjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAogCS8qIFRoZSAweDgwIHByb3ZpZGVzIGEgd2F5IGZvciB0aGUgdHJhY2luZyBwYXJlbnQgdG8gZGlzdGluZ3Vpc2gKIAkgICBiZXR3ZWVuIGEgc3lzY2FsbCBzdG9wIGFuZCBTSUdUUkFQIGRlbGl2ZXJ5ICovCkBAIC0zMzQsNCArMzQ4LDkgQEAKIAkJc2VuZF9zaWcoY3VycmVudC0+ZXhpdF9jb2RlLCBjdXJyZW50LCAxKTsKIAkJY3VycmVudC0+ZXhpdF9jb2RlID0gMDsKIAl9Cisgb3V0OgorCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiAhZW50cnlleGl0KQorCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGN1cnJlbnQsIGF1ZGl0X2FyY2goKSwgcmVncy0+cmVnc1syXSwKKwkJCQkgICAgcmVncy0+cmVnc1s0XSwgcmVncy0+cmVnc1s1XSwKKwkJCQkgICAgcmVncy0+cmVnc1s2XSwgcmVncy0+cmVnc1s3XSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZTMyLmMgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZTMyLmMKaW5kZXggNjExZGVlOS4uZWVlMjA3OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlMzIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgpAQCAtMjQxLDcgKzI0Miw3IEBACiAJY2FzZSBQVFJBQ0VfU1lTQ0FMTDogLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KIAljYXNlIFBUUkFDRV9DT05UOiB7IC8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGludCkgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkgewogCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYwppbmRleCA1OThiZmU3Li5hZTJhMTMxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYworKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYwpAQCAtMzc0LDIyICszNzQsNiBAQAogfQogCiAvKgotICogTmF0aXZlIEFCSSB0aGF0IGlzIE8zMiBvciBONjQgdmVyc2lvbgotICovCi1hc21saW5rYWdlIGxvbmcgc3lzX3NobWF0KGludCBzaG1pZCwgY2hhciBfX3VzZXIgKnNobWFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaG1mbGcsIHVuc2lnbmVkIGxvbmcgKmFkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyByYWRkcjsKLQlpbnQgZXJyOwotCi0JZXJyID0gZG9fc2htYXQoc2htaWQsIHNobWFkZHIsIHNobWZsZywgJnJhZGRyKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIHB1dF91c2VyKHJhZGRyLCBhZGRyKTsKLX0KLQotLyoKICAqIE5vIGltcGxlbWVudGVkIHlldCAuLi4KICAqLwogYXNtbGlua2FnZSBpbnQgc3lzX2NhY2hlY3RsKGNoYXIgKmFkZHIsIGludCBuYnl0ZXMsIGludCBvcCkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IDViNWNkMDAuLmU3ZTdjNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtNDUsNiArNDUsMTAgQEAKIGNvbmZpZyBQTQogCWJvb2wKIAorY29uZmlnIElTQV9ETUFfQVBJCisJYm9vbAorCWRlZmF1bHQgeQorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMjkzN2E5Mi4uYzA3ZGI5ZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTI4NSw3ICsyODYsNyBAQAogCQlyZXQgPSAtRUlPOwogCQlEQkcoInN5c19wdHJhY2UoJXMpXG4iLAogCQkJcmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCA/ICJTWVNDQUxMIiA6ICJDT05UIik7Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWdvdG8gb3V0X3RzazsKIAkJY2hpbGQtPnB0cmFjZSAmPSB+KFBUX1NJTkdMRVNURVB8UFRfQkxPQ0tTVEVQKTsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpIHsKQEAgLTMxMSw3ICszMTIsNyBAQAogCWNhc2UgUFRSQUNFX1NJTkdMRUJMT0NLOgogCQlEQkcoInN5c19wdHJhY2UoU0lOR0xFQkxPQ0spXG4iKTsKIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJZ290byBvdXRfdHNrOwogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKIAkJY2hpbGQtPnB0cmFjZSAmPSB+UFRfU0lOR0xFU1RFUDsKQEAgLTMyOCw3ICszMjksNyBAQAogCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6CiAJCURCRygic3lzX3B0cmFjZShTSU5HTEVTVEVQKVxuIik7CiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWdvdG8gb3V0X3RzazsKIAogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYy5jCmluZGV4IDc5NThjZDguLmQxNWExZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MuYwpAQCAtMTYxLDE3ICsxNjEsNiBAQAogCX0KIH0KIAotbG9uZyBzeXNfc2htYXRfd3JhcHBlcihpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxhZykKLXsKLQl1bnNpZ25lZCBsb25nIHJhZGRyOwotCWludCByOwotCi0JciA9IGRvX3NobWF0KHNobWlkLCBzaG1hZGRyLCBzaG1mbGFnLCAmcmFkZHIpOwotCWlmIChyIDwgMCkKLQkJcmV0dXJuIHI7Ci0JcmV0dXJuIHJhZGRyOwotfQotCiAvKiBGdWNraW5nIGJyb2tlbiBBQkkgKi8KIAogI2lmZGVmIENPTkZJR182NEJJVApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggNzc5YjUzNy4uZGNmYTRkMyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0yOTcsNyArMjk3LDcgQEAKIAlFTlRSWV9ESUZGKG1zZ3JjdikKIAlFTlRSWV9TQU1FKG1zZ2dldCkJCS8qIDE5MCAqLwogCUVOVFJZX1NBTUUobXNnY3RsKQotCUVOVFJZX1NBTUUoc2htYXRfd3JhcHBlcikKKwlFTlRSWV9TQU1FKHNobWF0KQogCUVOVFJZX1NBTUUoc2htZHQpCiAJRU5UUllfU0FNRShzaG1nZXQpCiAJRU5UUllfU0FNRShzaG1jdGwpCQkvKiAxOTUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL0tjb25maWcgYi9hcmNoL3BwYy9LY29uZmlnCmluZGV4IDc0YWExZTkuLmQwZDk0ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL0tjb25maWcKKysrIGIvYXJjaC9wcGMvS2NvbmZpZwpAQCAtNDMsNiArNDMsMTAgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBTQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVIKKwlib29sCisJZGVmYXVsdCB5CisKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCiBtZW51ICJQcm9jZXNzb3IiCkBAIC01Myw2ICs1Nyw3IEBACiAKIGNvbmZpZyA2eHgKIAlib29sICI2eHgvN3h4Lzc0eHgvNTJ4eC84Mnh4LzgzeHgiCisJc2VsZWN0IFBQQ19GUFUKIAloZWxwCiAJICBUaGVyZSBhcmUgZm91ciB0eXBlcyBvZiBQb3dlclBDIGNoaXBzIHN1cHBvcnRlZC4gIFRoZSBtb3JlIGNvbW1vbgogCSAgdHlwZXMgKDYwMSwgNjAzLCA2MDQsIDc0MCwgNzUwLCA3NDAwKSwgdGhlIE1vdG9yb2xhIGVtYmVkZGVkCkBAIC04Niw2ICs5MSw5IEBACiAKIGVuZGNob2ljZQogCitjb25maWcgUFBDX0ZQVQorCWJvb2wKKwogY29uZmlnIEJPT0tFCiAJYm9vbAogCWRlcGVuZHMgb24gRTUwMApAQCAtMTA3NSw2ICsxMDgzLDEwIEBACiAKIGVuZG1lbnUKIAorY29uZmlnIElTQV9ETUFfQVBJCisJYm9vbAorCWRlZmF1bHQgeQorCiBtZW51ICJCdXMgb3B0aW9ucyIKIAogY29uZmlnIElTQQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvTWFrZWZpbGUgYi9hcmNoL3BwYy9NYWtlZmlsZQppbmRleCA3M2NiZGRhLi4wNDMyYTI1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9NYWtlZmlsZQpAQCAtNTMsNiArNTMsNyBAQAogCiBoZWFkLSQoQ09ORklHXzZ4eCkJCSs9IGFyY2gvcHBjL2tlcm5lbC9pZGxlXzZ4eC5vCiBoZWFkLSQoQ09ORklHX1BPV0VSNCkJCSs9IGFyY2gvcHBjL2tlcm5lbC9pZGxlX3Bvd2VyNC5vCitoZWFkLSQoQ09ORklHX1BQQ19GUFUpCQkrPSBhcmNoL3BwYy9rZXJuZWwvZnB1Lm8KIAogY29yZS15CQkJCSs9IGFyY2gvcHBjL2tlcm5lbC8gYXJjaC9wcGMvcGxhdGZvcm1zLyBcCiAJCQkJICAgYXJjaC9wcGMvbW0vIGFyY2gvcHBjL2xpYi8gYXJjaC9wcGMvc3lzbGliLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9pbWFnZXMvTWFrZWZpbGUgYi9hcmNoL3BwYy9ib290L2ltYWdlcy9NYWtlZmlsZQppbmRleCA3NzRkZThlLi5mODUwZmIwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L2ltYWdlcy9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9ib290L2ltYWdlcy9NYWtlZmlsZQpAQCAtMjAsOCArMjAsOSBAQAogCiB0YXJnZXRzICs9IHVJbWFnZQogJChvYmopL3VJbWFnZTogJChvYmopL3ZtbGludXguZ3oKKwkkKFEpcm0gLWYgJEAKIAkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UpCi0JQGVjaG8gJyAgSW1hZ2UgJEAgaXMgcmVhZHknCisJQGVjaG8gJyAgSW1hZ2U6ICRAJyAkKGlmICQod2lsZGNhcmQgJEApLCdpcyByZWFkeScsJ25vdCBtYWRlJykKIAogIyBGaWxlcyBnZW5lcmF0ZWQgdGhhdCBzaGFsbCBiZSByZW1vdmVkIHVwb24gbWFrZSBjbGVhbgogY2xlYW4tZmlsZXMJOj0gc0ltYWdlIHZtYXB1cyB2bWxpbnV4KiBtaWJvb3QqIHpJbWFnZSogdUltYWdlCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggODZiYzg3OC4uYjI4NDQ1MSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIGV4dHJhLSQoQ09ORklHXzh4eCkJCTo9IGhlYWRfOHh4Lm8KIGV4dHJhLSQoQ09ORklHXzZ4eCkJCSs9IGlkbGVfNnh4Lm8KIGV4dHJhLSQoQ09ORklHX1BPV0VSNCkJCSs9IGlkbGVfcG93ZXI0Lm8KK2V4dHJhLSQoQ09ORklHX1BQQ19GUFUpCQkrPSBmcHUubwogZXh0cmEteQkJCQkrPSB2bWxpbnV4LmxkcwogCiBvYmoteQkJCQk6PSBlbnRyeS5vIHRyYXBzLm8gaXJxLm8gaWRsZS5vIHRpbWUubyBtaXNjLm8gXApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2FsaWduLmMgYi9hcmNoL3BwYy9rZXJuZWwvYWxpZ24uYwppbmRleCA3OWM5Mjk0Li5mZjgxZGE5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvYWxpZ24uYworKysgYi9hcmNoL3BwYy9rZXJuZWwvYWxpZ24uYwpAQCAtMjkwLDYgKzI5MCwxMCBAQAogCQkJLyogbHdtLCBzdG13ICovCiAJCQluYiA9ICgzMiAtIHJlZykgKiA0OwogCQl9CisKKwkJaWYgKCFhY2Nlc3Nfb2soKGZsYWdzICYgU1Q/IFZFUklGWV9XUklURTogVkVSSUZZX1JFQUQpLCBhZGRyLCBuYituYjApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CS8qIGJhZCBhZGRyZXNzICovCisKIAkJcnB0ciA9ICh1bnNpZ25lZCBjaGFyICopICZyZWdzLT5ncHJbcmVnXTsKIAkJaWYgKGZsYWdzICYgTEQpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBuYjsgKytpKQpAQCAtMzY4LDE2ICszNzIsMjQgQEAKIAogCS8qIFNpbmdsZS1wcmVjaXNpb24gRlAgbG9hZCBhbmQgc3RvcmUgcmVxdWlyZSBjb252ZXJzaW9ucy4uLiAqLwogCWNhc2UgTEQrRitTOgorI2lmZGVmIENPTkZJR19QUENfRlBVCiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQllbmFibGVfa2VybmVsX2ZwKCk7CiAJCWN2dF9mZCgmZGF0YS5mLCAmZGF0YS5kLCAmY3VycmVudC0+dGhyZWFkLmZwc2NyKTsKIAkJcHJlZW1wdF9lbmFibGUoKTsKKyNlbHNlCisJCXJldHVybiAwOworI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgU1QrRitTOgorI2lmZGVmIENPTkZJR19QUENfRlBVCiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQllbmFibGVfa2VybmVsX2ZwKCk7CiAJCWN2dF9kZigmZGF0YS5kLCAmZGF0YS5mLCAmY3VycmVudC0+dGhyZWFkLmZwc2NyKTsKIAkJcHJlZW1wdF9lbmFibGUoKTsKKyNlbHNlCisJCXJldHVybiAwOworI2VuZGlmCiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2NwdV9zZXR1cF82eHguUyBiL2FyY2gvcHBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKaW5kZXggNzRmNzgxYi4uNDY4NzIxZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2NwdV9zZXR1cF82eHguUworKysgYi9hcmNoL3BwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TCkBAIC0zMCwxMiArMzAsMTQgQEAKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzUwKQogCW1mbHIJcjQKKwlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCiAJbXRscglyNAogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NTBjeCkKIAltZmxyCXI0CisJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAogCWJsCXNldHVwXzc1MGN4CkBAIC00Myw2ICs0NSw3IEBACiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc1MGZ4KQogCW1mbHIJcjQKKwlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCiAJYmwJc2V0dXBfNzUwZngKQEAgLTUwLDYgKzUzLDcgQEAKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzQwMCkKIAltZmxyCXI0CisJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF83NDAwX3dvcmthcm91bmRzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKQEAgLTU3LDYgKzYxLDcgQEAKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzQxMCkKIAltZmxyCXI0CisJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF83NDEwX3dvcmthcm91bmRzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKQEAgLTgwLDcgKzg1LDcgQEAKIAlibmUJMWYJCQkvKiBkb24ndCBpbnZhbGlkYXRlIHRoZSBELWNhY2hlICovCiAJb3JpCXI4LHI4LEhJRDBfRENJCQkvKiB1bmxlc3MgaXQgd2Fzbid0IGVuYWJsZWQgKi8KIDE6CXN5bmMKLQltdHNwcglTUFJOX0hJRDAscjgJCQkvKiBlbmFibGUgYW5kIGludmFsaWRhdGUgY2FjaGVzICovCisJbXRzcHIJU1BSTl9ISUQwLHI4CQkvKiBlbmFibGUgYW5kIGludmFsaWRhdGUgY2FjaGVzICovCiAJc3luYwogCW10c3ByCVNQUk5fSElEMCxyMTEJCS8qIGVuYWJsZSBjYWNoZXMgKi8KIAlzeW5jCkBAIC0xNTIsOSArMTU3LDEzIEBACiBzZXR1cF83NTBfNzQwMF9oaWQwOgogCW1mc3ByCXIxMSxTUFJOX0hJRDAKIAlvcmkJcjExLHIxMSxISUQwX1NHRSB8IEhJRDBfQUJFIHwgSElEMF9CSFRFIHwgSElEMF9CVElDCisJb3JpcwlyMTEscjExLEhJRDBfRFBNQGgKIEJFR0lOX0ZUUl9TRUNUSU9OCi0Jb3JpcwlyMTEscjExLEhJRDBfRFBNQGgJLyogZW5hYmxlIGR5bmFtaWMgcG93ZXIgbWdtdCAqLwotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfTk9fRFBNKQorCXhvcmkJcjExLHIxMSxISUQwX0JUSUMKK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX05PX0JUSUMpCitCRUdJTl9GVFJfU0VDVElPTgorCXhvcmlzCXIxMSxyMTEsSElEMF9EUE1AaAkvKiBkaXNhYmxlIGR5bmFtaWMgcG93ZXIgbWdtdCAqLworRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfTk9fRFBNKQogCWxpCXIzLEhJRDBfU1BECiAJYW5kYwlyMTEscjExLHIzCQkvKiBjbGVhciBTUEQ6IGVuYWJsZSBzcGVjdWxhdGl2ZSAqLwogIAlsaQlyMywwCkBAIC0yMTgsMTMgKzIyNywxNSBAQAogCiAJLyogQWxsIG9mIHRoZSBiaXRzIHdlIGhhdmUgdG8gc2V0Li4uLi4KIAkgKi8KLQlvcmkJcjExLHIxMSxISUQwX1NHRSB8IEhJRDBfRk9MRCB8IEhJRDBfQkhURSB8IEhJRDBfTFJTVEsgfCBISUQwX0JUSUMKKwlvcmkJcjExLHIxMSxISUQwX1NHRSB8IEhJRDBfRk9MRCB8IEhJRDBfQkhURQorCW9yaQlyMTEscjExLEhJRDBfTFJTVEsgfCBISUQwX0JUSUMKKwlvcmlzCXIxMSxyMTEsSElEMF9EUE1AaAogQkVHSU5fRlRSX1NFQ1RJT04KIAl4b3JpCXIxMSxyMTEsSElEMF9CVElDCiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9OT19CVElDKQogQkVHSU5fRlRSX1NFQ1RJT04KLQlvcmlzCXIxMSxyMTEsSElEMF9EUE1AaAkvKiBlbmFibGUgZHluYW1pYyBwb3dlciBtZ210ICovCi1FTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9OT19EUE0pCisJeG9yaXMJcjExLHIxMSxISUQwX0RQTUBoCS8qIGRpc2FibGUgZHluYW1pYyBwb3dlciBtZ210ICovCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9OT19EUE0pCiAKIAkvKiBBbGwgb2YgdGhlIGJpdHMgd2UgaGF2ZSB0byBjbGVhci4uLi4KIAkgKi8KQEAgLTI0OCw2ICsyNTksMjUgQEAKIAlpc3luYwogCWJscgogCisvKgorICogSW5pdGlhbGl6ZSB0aGUgRlBVIHJlZ2lzdGVycy4gVGhpcyBpcyBuZWVkZWQgdG8gd29yayBhcm91bmQgYW4gZXJyYXRhCisgKiBpbiBzb21lIDc1MCBjcHVzIHdoZXJlIHVzaW5nIGEgbm90IHlldCBpbml0aWFsaXplZCBGUFUgcmVnaXN0ZXIgYWZ0ZXIKKyAqIHBvd2VyIG9uIHJlc2V0IG1heSBoYW5nIHRoZSBDUFUKKyAqLworX0dMT0JBTChfX2luaXRfZnB1X3JlZ2lzdGVycykKKwltZm1zcglyMTAKKwlvcmkJcjExLHIxMCxNU1JfRlAKKwltdG1zcglyMTEKKwlpc3luYworCWFkZGlzCXI5LHIzLGVtcHR5X3plcm9fcGFnZUBoYQorCWFkZGkJcjkscjksZW1wdHlfemVyb19wYWdlQGwKKwlSRVNUXzMyRlBSUygwLHI5KQorCXN5bmMKKwltdG1zcglyMTAKKwlpc3luYworCWJscgorCisKIC8qIERlZmluaXRpb25zIGZvciB0aGUgdGFibGUgdXNlIHRvIHNhdmUgQ1BVIHN0YXRlcyAqLwogI2RlZmluZSBDU19ISUQwCQkwCiAjZGVmaW5lIENTX0hJRDEJCTQKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9wcGMva2VybmVsL2VudHJ5LlMKaW5kZXggMDM1MjE3ZC4uNWYwNzVkYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2VudHJ5LlMKQEAgLTU2Myw2ICs1NjMsNjUgQEAKIAlhZGRpCXIxLHIxLElOVF9GUkFNRV9TSVpFCiAJYmxyCiAKKwkuZ2xvYmwJZmFzdF9leGNlcHRpb25fcmV0dXJuCitmYXN0X2V4Y2VwdGlvbl9yZXR1cm46CisjaWYgIShkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKSkKKwlhbmRpLglyMTAscjksTVNSX1JJCQkvKiBjaGVjayBmb3IgcmVjb3ZlcmFibGUgaW50ZXJydXB0ICovCisJYmVxCTFmCQkJLyogaWYgbm90LCB3ZSd2ZSBnb3QgcHJvYmxlbXMgKi8KKyNlbmRpZgorCisyOglSRVNUXzRHUFJTKDMsIHIxMSkKKwlsd3oJcjEwLF9DQ1IocjExKQorCVJFU1RfR1BSKDEsIHIxMSkKKwltdGNyCXIxMAorCWx3eglyMTAsX0xJTksocjExKQorCW10bHIJcjEwCisJUkVTVF9HUFIoMTAsIHIxMSkKKwltdHNwcglTUFJOX1NSUjEscjkKKwltdHNwcglTUFJOX1NSUjAscjEyCisJUkVTVF9HUFIoOSwgcjExKQorCVJFU1RfR1BSKDEyLCByMTEpCisJbHd6CXIxMSxHUFIxMShyMTEpCisJU1lOQworCVJGSQorCisjaWYgIShkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKSkKKy8qIGNoZWNrIGlmIHRoZSBleGNlcHRpb24gaGFwcGVuZWQgaW4gYSByZXN0YXJ0YWJsZSBzZWN0aW9uICovCisxOglsaXMJcjMsZXhjX2V4aXRfcmVzdGFydF9lbmRAaGEKKwlhZGRpCXIzLHIzLGV4Y19leGl0X3Jlc3RhcnRfZW5kQGwKKwljbXBsdwlyMTIscjMKKwliZ2UJM2YKKwlsaXMJcjQsZXhjX2V4aXRfcmVzdGFydEBoYQorCWFkZGkJcjQscjQsZXhjX2V4aXRfcmVzdGFydEBsCisJY21wbHcJcjEyLHI0CisJYmx0CTNmCisJbGlzCXIzLGZlZV9yZXN0YXJ0c0BoYQorCXRvcGh5cyhyMyxyMykKKwlsd3oJcjUsZmVlX3Jlc3RhcnRzQGwocjMpCisJYWRkaQlyNSxyNSwxCisJc3R3CXI1LGZlZV9yZXN0YXJ0c0BsKHIzKQorCW1yCXIxMixyNAkJLyogcmVzdGFydCBhdCBleGNfZXhpdF9yZXN0YXJ0ICovCisJYgkyYgorCisJLmNvbW0JZmVlX3Jlc3RhcnRzLDQKKworLyogYWFyZ2gsIGEgbm9ucmVjb3ZlcmFibGUgaW50ZXJydXB0LCBwYW5pYyAqLworLyogYWFyZ2gsIHdlIGRvbid0IGtub3cgd2hpY2ggdHJhcCB0aGlzIGlzICovCisvKiBidXQgdGhlIDYwMSBkb2Vzbid0IGltcGxlbWVudCB0aGUgUkkgYml0LCBzbyBhc3N1bWUgaXQncyBPSyAqLworMzoKK0JFR0lOX0ZUUl9TRUNUSU9OCisJYgkyYgorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfNjAxKQorCWxpCXIxMCwtMQorCXN0dwlyMTAsVFJBUChyMTEpCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCWxpcwlyMTAsTVNSX0tFUk5FTEBoCisJb3JpCXIxMCxyMTAsTVNSX0tFUk5FTEBsCisJYmwJdHJhbnNmZXJfdG9faGFuZGxlcl9mdWxsCisJLmxvbmcJbm9ucmVjb3ZlcmFibGVfZXhjZXB0aW9uCisJLmxvbmcJcmV0X2Zyb21fZXhjZXB0CisjZW5kaWYKKwogCS5nbG9ibAlzaWdyZXR1cm5fZXhpdAogc2lncmV0dXJuX2V4aXQ6CiAJc3ViaQlyMSxyMyxTVEFDS19GUkFNRV9PVkVSSEVBRApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2ZwdS5TIGIvYXJjaC9wcGMva2VybmVsL2ZwdS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODliMjZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wcGMva2VybmVsL2ZwdS5TCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogIEZQVSBzdXBwb3J0IGNvZGUsIG1vdmVkIGhlcmUgZnJvbSBoZWFkLlMgc28gdGhhdCBpdCBjYW4gYmUgdXNlZAorICogIGJ5IGNoaXBzIHdoaWNoIHVzZSBvdGhlciBoZWFkLXdoYXRldmVyLlMgZmlsZXMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS9vZmZzZXRzLmg+CisKKy8qCisgKiBUaGlzIHRhc2sgd2FudHMgdG8gdXNlIHRoZSBGUFUgbm93LgorICogT24gVVAsIGRpc2FibGUgRlAgZm9yIHRoZSB0YXNrIHdoaWNoIGhhZCB0aGUgRlBVIHByZXZpb3VzbHksCisgKiBhbmQgc2F2ZSBpdHMgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIGluIGl0cyB0aHJlYWRfc3RydWN0LgorICogTG9hZCB1cCB0aGlzIHRhc2sncyBGUCByZWdpc3RlcnMgZnJvbSBpdHMgdGhyZWFkX3N0cnVjdCwKKyAqIGVuYWJsZSB0aGUgRlBVIGZvciB0aGUgY3VycmVudCB0YXNrIGFuZCByZXR1cm4gdG8gdGhlIHRhc2suCisgKi8KKwkuZ2xvYmwJbG9hZF91cF9mcHUKK2xvYWRfdXBfZnB1OgorCW1mbXNyCXI1CisJb3JpCXI1LHI1LE1TUl9GUAorI2lmZGVmIENPTkZJR19QUEM2NEJSSURHRQorCWNscmxkaQlyNSxyNSwxCQkJLyogdHVybiBvZmYgNjQtYml0IG1vZGUgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFBDNjRCUklER0UgKi8KKwlTWU5DCisJTVRNU1JEKHI1KQkJCS8qIGVuYWJsZSB1c2Ugb2YgZnB1IG5vdyAqLworCWlzeW5jCisvKgorICogRm9yIFNNUCwgd2UgZG9uJ3QgZG8gbGF6eSBGUFUgc3dpdGNoaW5nIGJlY2F1c2UgaXQganVzdCBnZXRzIHRvbworICogaG9ycmVuZG91c2x5IGNvbXBsZXgsIGVzcGVjaWFsbHkgd2hlbiBhIHRhc2sgc3dpdGNoZXMgZnJvbSBvbmUgQ1BVCisgKiB0byBhbm90aGVyLiAgSW5zdGVhZCB3ZSBjYWxsIGdpdmV1cF9mcHUgaW4gc3dpdGNoX3RvLgorICovCisjaWZuZGVmIENPTkZJR19TTVAKKwl0b3BoeXMocjYsMCkJCQkvKiBnZXQgX19wYSBjb25zdGFudCAqLworCWFkZGlzCXIzLHI2LGxhc3RfdGFza191c2VkX21hdGhAaGEKKwlsd3oJcjQsbGFzdF90YXNrX3VzZWRfbWF0aEBsKHIzKQorCWNtcHdpCTAscjQsMAorCWJlcQkxZgorCWFkZAlyNCxyNCxyNgorCWFkZGkJcjQscjQsVEhSRUFECQkvKiB3YW50IGxhc3RfdGFza191c2VkX21hdGgtPnRocmVhZCAqLworCVNBVkVfMzJGUFJTKDAsIHI0KQorCW1mZnMJZnIwCisJc3RmZAlmcjAsVEhSRUFEX0ZQU0NSLTQocjQpCisJbHd6CXI1LFBUX1JFR1MocjQpCisJYWRkCXI1LHI1LHI2CisJbHd6CXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCisJbGkJcjEwLE1TUl9GUHxNU1JfRkUwfE1TUl9GRTEKKwlhbmRjCXI0LHI0LHIxMAkJLyogZGlzYWJsZSBGUCBmb3IgcHJldmlvdXMgdGFzayAqLworCXN0dwlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQorMToKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisJLyogZW5hYmxlIHVzZSBvZiBGUCBhZnRlciByZXR1cm4gKi8KKwltZnNwcglyNSxTUFJOX1NQUkczCQkvKiBjdXJyZW50IHRhc2sncyBUSFJFQUQgKHBoeXMpICovCisJbHd6CXI0LFRIUkVBRF9GUEVYQ19NT0RFKHI1KQorCW9yaQlyOSxyOSxNU1JfRlAJCS8qIGVuYWJsZSBGUCBmb3IgY3VycmVudCAqLworCW9yCXI5LHI5LHI0CisJbGZkCWZyMCxUSFJFQURfRlBTQ1ItNChyNSkKKwltdGZzZgkweGZmLGZyMAorCVJFU1RfMzJGUFJTKDAsIHI1KQorI2lmbmRlZiBDT05GSUdfU01QCisJc3ViaQlyNCxyNSxUSFJFQUQKKwlzdWIJcjQscjQscjYKKwlzdHcJcjQsbGFzdF90YXNrX3VzZWRfbWF0aEBsKHIzKQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwkvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCisJLyogd2UgaGF2ZW4ndCB1c2VkIGN0ciBvciB4ZXIgb3IgbHIgKi8KKwliCWZhc3RfZXhjZXB0aW9uX3JldHVybgorCisvKgorICogRlAgdW5hdmFpbGFibGUgdHJhcCBmcm9tIGtlcm5lbCAtIHByaW50IGEgbWVzc2FnZSwgYnV0IGxldAorICogdGhlIHRhc2sgdXNlIEZQIGluIHRoZSBrZXJuZWwgdW50aWwgaXQgcmV0dXJucyB0byB1c2VyIG1vZGUuCisgKi8KKyAJLmdsb2JsCUtlcm5lbEZQCitLZXJuZWxGUDoKKwlsd3oJcjMsX01TUihyMSkKKwlvcmkJcjMscjMsTVNSX0ZQCisJc3R3CXIzLF9NU1IocjEpCQkvKiBlbmFibGUgdXNlIG9mIEZQIGFmdGVyIHJldHVybiAqLworCWxpcwlyMyw4NmZAaAorCW9yaQlyMyxyMyw4NmZAbAorCW1yCXI0LHIyCQkJLyogY3VycmVudCAqLworCWx3eglyNSxfTklQKHIxKQorCWJsCXByaW50aworCWIJcmV0X2Zyb21fZXhjZXB0Cis4NjoJLnN0cmluZwkiZmxvYXRpbmcgcG9pbnQgdXNlZCBpbiBrZXJuZWwgKHRhc2s9JXAsIHBjPSV4KVxuIgorCS5hbGlnbgk0LDAKKworLyoKKyAqIGdpdmV1cF9mcHUodHNrKQorICogRGlzYWJsZSBGUCBmb3IgdGhlIHRhc2sgZ2l2ZW4gYXMgdGhlIGFyZ3VtZW50LAorICogYW5kIHNhdmUgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBpbiBpdHMgdGhyZWFkX3N0cnVjdC4KKyAqIEVuYWJsZXMgdGhlIEZQVSBmb3IgdXNlIGluIHRoZSBrZXJuZWwgb24gcmV0dXJuLgorICovCisJLmdsb2JsCWdpdmV1cF9mcHUKK2dpdmV1cF9mcHU6CisJbWZtc3IJcjUKKwlvcmkJcjUscjUsTVNSX0ZQCisJU1lOQ182MDEKKwlJU1lOQ182MDEKKwlNVE1TUkQocjUpCQkJLyogZW5hYmxlIHVzZSBvZiBmcHUgbm93ICovCisJU1lOQ182MDEKKwlpc3luYworCWNtcHdpCTAscjMsMAorCWJlcWxyLQkJCQkvKiBpZiBubyBwcmV2aW91cyBvd25lciwgZG9uZSAqLworCWFkZGkJcjMscjMsVEhSRUFECSAgICAgICAgLyogd2FudCBUSFJFQUQgb2YgdGFzayAqLworCWx3eglyNSxQVF9SRUdTKHIzKQorCWNtcHdpCTAscjUsMAorCVNBVkVfMzJGUFJTKDAsIHIzKQorCW1mZnMJZnIwCisJc3RmZAlmcjAsVEhSRUFEX0ZQU0NSLTQocjMpCisJYmVxCTFmCisJbHd6CXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCisJbGkJcjMsTVNSX0ZQfE1TUl9GRTB8TVNSX0ZFMQorCWFuZGMJcjQscjQscjMJCS8qIGRpc2FibGUgRlAgZm9yIHByZXZpb3VzIHRhc2sgKi8KKwlzdHcJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKKzE6CisjaWZuZGVmIENPTkZJR19TTVAKKwlsaQlyNSwwCisJbGlzCXI0LGxhc3RfdGFza191c2VkX21hdGhAaGEKKwlzdHcJcjUsbGFzdF90YXNrX3VzZWRfbWF0aEBsKHI0KQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwlibHIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZC5TCmluZGV4IDFhODlhNzEuLmE5MzFkNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWQuUwpAQCAtNzc1LDEzMyArNzc1LDYgQEAKIAlFWENfWEZFUl9TVEQoMHg0ODAsIFVua25vd25FeGNlcHRpb24pCiAjZW5kaWYgLyogQ09ORklHX1BQQzY0QlJJREdFICovCiAKLS8qCi0gKiBUaGlzIHRhc2sgd2FudHMgdG8gdXNlIHRoZSBGUFUgbm93LgotICogT24gVVAsIGRpc2FibGUgRlAgZm9yIHRoZSB0YXNrIHdoaWNoIGhhZCB0aGUgRlBVIHByZXZpb3VzbHksCi0gKiBhbmQgc2F2ZSBpdHMgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIGluIGl0cyB0aHJlYWRfc3RydWN0LgotICogTG9hZCB1cCB0aGlzIHRhc2sncyBGUCByZWdpc3RlcnMgZnJvbSBpdHMgdGhyZWFkX3N0cnVjdCwKLSAqIGVuYWJsZSB0aGUgRlBVIGZvciB0aGUgY3VycmVudCB0YXNrIGFuZCByZXR1cm4gdG8gdGhlIHRhc2suCi0gKi8KLWxvYWRfdXBfZnB1OgotCW1mbXNyCXI1Ci0Jb3JpCXI1LHI1LE1TUl9GUAotI2lmZGVmIENPTkZJR19QUEM2NEJSSURHRQotCWNscmxkaQlyNSxyNSwxCQkJLyogdHVybiBvZmYgNjQtYml0IG1vZGUgKi8KLSNlbmRpZiAvKiBDT05GSUdfUFBDNjRCUklER0UgKi8KLQlTWU5DCi0JTVRNU1JEKHI1KQkJCS8qIGVuYWJsZSB1c2Ugb2YgZnB1IG5vdyAqLwotCWlzeW5jCi0vKgotICogRm9yIFNNUCwgd2UgZG9uJ3QgZG8gbGF6eSBGUFUgc3dpdGNoaW5nIGJlY2F1c2UgaXQganVzdCBnZXRzIHRvbwotICogaG9ycmVuZG91c2x5IGNvbXBsZXgsIGVzcGVjaWFsbHkgd2hlbiBhIHRhc2sgc3dpdGNoZXMgZnJvbSBvbmUgQ1BVCi0gKiB0byBhbm90aGVyLiAgSW5zdGVhZCB3ZSBjYWxsIGdpdmV1cF9mcHUgaW4gc3dpdGNoX3RvLgotICovCi0jaWZuZGVmIENPTkZJR19TTVAKLQl0b3BoeXMocjYsMCkJCQkvKiBnZXQgX19wYSBjb25zdGFudCAqLwotCWFkZGlzCXIzLHI2LGxhc3RfdGFza191c2VkX21hdGhAaGEKLQlsd3oJcjQsbGFzdF90YXNrX3VzZWRfbWF0aEBsKHIzKQotCWNtcHdpCTAscjQsMAotCWJlcQkxZgotCWFkZAlyNCxyNCxyNgotCWFkZGkJcjQscjQsVEhSRUFECQkvKiB3YW50IGxhc3RfdGFza191c2VkX21hdGgtPnRocmVhZCAqLwotCVNBVkVfMzJGUFJTKDAsIHI0KQotCW1mZnMJZnIwCi0Jc3RmZAlmcjAsVEhSRUFEX0ZQU0NSLTQocjQpCi0JbHd6CXI1LFBUX1JFR1MocjQpCi0JYWRkCXI1LHI1LHI2Ci0JbHd6CXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCi0JbGkJcjEwLE1TUl9GUHxNU1JfRkUwfE1TUl9GRTEKLQlhbmRjCXI0LHI0LHIxMAkJLyogZGlzYWJsZSBGUCBmb3IgcHJldmlvdXMgdGFzayAqLwotCXN0dwlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQotMToKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0JLyogZW5hYmxlIHVzZSBvZiBGUCBhZnRlciByZXR1cm4gKi8KLQltZnNwcglyNSxTUFJOX1NQUkczCQkvKiBjdXJyZW50IHRhc2sncyBUSFJFQUQgKHBoeXMpICovCi0JbHd6CXI0LFRIUkVBRF9GUEVYQ19NT0RFKHI1KQotCW9yaQlyOSxyOSxNU1JfRlAJCS8qIGVuYWJsZSBGUCBmb3IgY3VycmVudCAqLwotCW9yCXI5LHI5LHI0Ci0JbGZkCWZyMCxUSFJFQURfRlBTQ1ItNChyNSkKLQltdGZzZgkweGZmLGZyMAotCVJFU1RfMzJGUFJTKDAsIHI1KQotI2lmbmRlZiBDT05GSUdfU01QCi0Jc3ViaQlyNCxyNSxUSFJFQUQKLQlzdWIJcjQscjQscjYKLQlzdHcJcjQsbGFzdF90YXNrX3VzZWRfbWF0aEBsKHIzKQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQkvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCi0JLyogd2UgaGF2ZW4ndCB1c2VkIGN0ciBvciB4ZXIgb3IgbHIgKi8KLQkvKiBmYWxsIHRocm91Z2ggdG8gZmFzdF9leGNlcHRpb25fcmV0dXJuICovCi0KLQkuZ2xvYmwJZmFzdF9leGNlcHRpb25fcmV0dXJuCi1mYXN0X2V4Y2VwdGlvbl9yZXR1cm46Ci0JYW5kaS4JcjEwLHI5LE1TUl9SSQkJLyogY2hlY2sgZm9yIHJlY292ZXJhYmxlIGludGVycnVwdCAqLwotCWJlcQkxZgkJCS8qIGlmIG5vdCwgd2UndmUgZ290IHByb2JsZW1zICovCi0yOglSRVNUXzRHUFJTKDMsIHIxMSkKLQlsd3oJcjEwLF9DQ1IocjExKQotCVJFU1RfR1BSKDEsIHIxMSkKLQltdGNyCXIxMAotCWx3eglyMTAsX0xJTksocjExKQotCW10bHIJcjEwCi0JUkVTVF9HUFIoMTAsIHIxMSkKLQltdHNwcglTUFJOX1NSUjEscjkKLQltdHNwcglTUFJOX1NSUjAscjEyCi0JUkVTVF9HUFIoOSwgcjExKQotCVJFU1RfR1BSKDEyLCByMTEpCi0JbHd6CXIxMSxHUFIxMShyMTEpCi0JU1lOQwotCVJGSQotCi0vKiBjaGVjayBpZiB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkIGluIGEgcmVzdGFydGFibGUgc2VjdGlvbiAqLwotMToJbGlzCXIzLGV4Y19leGl0X3Jlc3RhcnRfZW5kQGhhCi0JYWRkaQlyMyxyMyxleGNfZXhpdF9yZXN0YXJ0X2VuZEBsCi0JY21wbHcJcjEyLHIzCi0JYmdlCTNmCi0JbGlzCXI0LGV4Y19leGl0X3Jlc3RhcnRAaGEKLQlhZGRpCXI0LHI0LGV4Y19leGl0X3Jlc3RhcnRAbAotCWNtcGx3CXIxMixyNAotCWJsdAkzZgotCWxpcwlyMyxmZWVfcmVzdGFydHNAaGEKLQl0b3BoeXMocjMscjMpCi0JbHd6CXI1LGZlZV9yZXN0YXJ0c0BsKHIzKQotCWFkZGkJcjUscjUsMQotCXN0dwlyNSxmZWVfcmVzdGFydHNAbChyMykKLQltcglyMTIscjQJCS8qIHJlc3RhcnQgYXQgZXhjX2V4aXRfcmVzdGFydCAqLwotCWIJMmIKLQotCS5jb21tCWZlZV9yZXN0YXJ0cyw0Ci0KLS8qIGFhcmdoLCBhIG5vbnJlY292ZXJhYmxlIGludGVycnVwdCwgcGFuaWMgKi8KLS8qIGFhcmdoLCB3ZSBkb24ndCBrbm93IHdoaWNoIHRyYXAgdGhpcyBpcyAqLwotLyogYnV0IHRoZSA2MDEgZG9lc24ndCBpbXBsZW1lbnQgdGhlIFJJIGJpdCwgc28gYXNzdW1lIGl0J3MgT0sgKi8KLTM6Ci1CRUdJTl9GVFJfU0VDVElPTgotCWIJMmIKLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSXzYwMSkKLQlsaQlyMTAsLTEKLQlzdHcJcjEwLFRSQVAocjExKQotCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKLQlsaQlyMTAsTVNSX0tFUk5FTAotCWJsCXRyYW5zZmVyX3RvX2hhbmRsZXJfZnVsbAotCS5sb25nCW5vbnJlY292ZXJhYmxlX2V4Y2VwdGlvbgotCS5sb25nCXJldF9mcm9tX2V4Y2VwdAotCi0vKgotICogRlAgdW5hdmFpbGFibGUgdHJhcCBmcm9tIGtlcm5lbCAtIHByaW50IGEgbWVzc2FnZSwgYnV0IGxldAotICogdGhlIHRhc2sgdXNlIEZQIGluIHRoZSBrZXJuZWwgdW50aWwgaXQgcmV0dXJucyB0byB1c2VyIG1vZGUuCi0gKi8KLUtlcm5lbEZQOgotCWx3eglyMyxfTVNSKHIxKQotCW9yaQlyMyxyMyxNU1JfRlAKLQlzdHcJcjMsX01TUihyMSkJCS8qIGVuYWJsZSB1c2Ugb2YgRlAgYWZ0ZXIgcmV0dXJuICovCi0JbGlzCXIzLDg2ZkBoCi0Jb3JpCXIzLHIzLDg2ZkBsCi0JbXIJcjQscjIJCQkvKiBjdXJyZW50ICovCi0JbHd6CXI1LF9OSVAocjEpCi0JYmwJcHJpbnRrCi0JYglyZXRfZnJvbV9leGNlcHQKLTg2Ogkuc3RyaW5nCSJmbG9hdGluZyBwb2ludCB1c2VkIGluIGtlcm5lbCAodGFzaz0lcCwgcGM9JXgpXG4iCi0JLmFsaWduCTQsMAotCiAjaWZkZWYgQ09ORklHX0FMVElWRUMKIC8qIE5vdGUgdGhhdCB0aGUgQWx0aVZlYyBzdXBwb3J0IGlzIGNsb3NlbHkgbW9kZWxlZCBhZnRlciB0aGUgRlAKICAqIHN1cHBvcnQuICBDaGFuZ2VzIHRvIG9uZSBhcmUgbGlrZWx5IHRvIGJlIGFwcGxpY2FibGUgdG8gdGhlCkBAIC0xMDE2LDQyICs4ODksNiBAQAogI2VuZGlmIC8qIENPTkZJR19BTFRJVkVDICovCiAKIC8qCi0gKiBnaXZldXBfZnB1KHRzaykKLSAqIERpc2FibGUgRlAgZm9yIHRoZSB0YXNrIGdpdmVuIGFzIHRoZSBhcmd1bWVudCwKLSAqIGFuZCBzYXZlIHRoZSBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgaW4gaXRzIHRocmVhZF9zdHJ1Y3QuCi0gKiBFbmFibGVzIHRoZSBGUFUgZm9yIHVzZSBpbiB0aGUga2VybmVsIG9uIHJldHVybi4KLSAqLwotCS5nbG9ibAlnaXZldXBfZnB1Ci1naXZldXBfZnB1OgotCW1mbXNyCXI1Ci0Jb3JpCXI1LHI1LE1TUl9GUAotCVNZTkNfNjAxCi0JSVNZTkNfNjAxCi0JTVRNU1JEKHI1KQkJCS8qIGVuYWJsZSB1c2Ugb2YgZnB1IG5vdyAqLwotCVNZTkNfNjAxCi0JaXN5bmMKLQljbXB3aQkwLHIzLDAKLQliZXFsci0JCQkJLyogaWYgbm8gcHJldmlvdXMgb3duZXIsIGRvbmUgKi8KLQlhZGRpCXIzLHIzLFRIUkVBRAkgICAgICAgIC8qIHdhbnQgVEhSRUFEIG9mIHRhc2sgKi8KLQlsd3oJcjUsUFRfUkVHUyhyMykKLQljbXB3aQkwLHI1LDAKLQlTQVZFXzMyRlBSUygwLCByMykKLQltZmZzCWZyMAotCXN0ZmQJZnIwLFRIUkVBRF9GUFNDUi00KHIzKQotCWJlcQkxZgotCWx3eglyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQotCWxpCXIzLE1TUl9GUHxNU1JfRkUwfE1TUl9GRTEKLQlhbmRjCXI0LHI0LHIzCQkvKiBkaXNhYmxlIEZQIGZvciBwcmV2aW91cyB0YXNrICovCi0Jc3R3CXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCi0xOgotI2lmbmRlZiBDT05GSUdfU01QCi0JbGkJcjUsMAotCWxpcwlyNCxsYXN0X3Rhc2tfdXNlZF9tYXRoQGhhCi0Jc3R3CXI1LGxhc3RfdGFza191c2VkX21hdGhAbChyNCkKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0JYmxyCi0KLS8qCiAgKiBUaGlzIGNvZGUgaXMganVtcGVkIHRvIGZyb20gdGhlIHN0YXJ0dXAgY29kZSB0byBjb3B5CiAgKiB0aGUga2VybmVsIGltYWdlIHRvIHBoeXNpY2FsIGFkZHJlc3MgMC4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2hlYWRfNDR4LlMgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF80NHguUwppbmRleCA5ZWQ4MTY1Li45YjZhOGU1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF80NHguUworKysgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF80NHguUwpAQCAtNDI2LDcgKzQyNiwxMSBAQAogCVBST0dSQU1fRVhDRVBUSU9OCiAKIAkvKiBGbG9hdGluZyBQb2ludCBVbmF2YWlsYWJsZSBJbnRlcnJ1cHQgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0ZQVQorCUZQX1VOQVZBSUxBQkxFX0VYQ0VQVElPTgorI2Vsc2UKIAlFWENFUFRJT04oMHgyMDEwLCBGbG9hdGluZ1BvaW50VW5hdmFpbGFibGUsIFVua25vd25FeGNlcHRpb24sIEVYQ19YRkVSX0VFKQorI2VuZGlmCiAKIAkvKiBTeXN0ZW0gQ2FsbCBJbnRlcnJ1cHQgKi8KIAlTVEFSVF9FWENFUFRJT04oU3lzdGVtQ2FsbCkKQEAgLTY4Niw4ICs2OTAsMTAgQEAKICAqCiAgKiBUaGUgNDR4IGNvcmUgZG9lcyBub3QgaGF2ZSBhbiBGUFUuCiAgKi8KKyNpZm5kZWYgQ09ORklHX1BQQ19GUFUKIF9HTE9CQUwoZ2l2ZXVwX2ZwdSkKIAlibHIKKyNlbmRpZgogCiAvKgogICogZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2Jvb2tlLmggYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF9ib29rZS5oCmluZGV4IDg4NGRhYzkuLmYyMTNkMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2Jvb2tlLmgKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfYm9va2UuaApAQCAtMzM3LDQgKzMzNywxMSBAQAogCWFkZGkgICAgcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQkJCSAgICAgIFwKIAlFWENfWEZFUl9MSVRFKDB4MDkwMCwgdGltZXJfaW50ZXJydXB0KQogCisjZGVmaW5lIEZQX1VOQVZBSUxBQkxFX0VYQ0VQVElPTgkJCQkJICAgICAgXAorCVNUQVJUX0VYQ0VQVElPTihGbG9hdGluZ1BvaW50VW5hdmFpbGFibGUpCQkJICAgICAgXAorCU5PUk1BTF9FWENFUFRJT05fUFJPTE9HOwkJCQkJICAgICAgXAorCWJuZQlsb2FkX3VwX2ZwdTsJCS8qIGlmIGZyb20gdXNlciwganVzdCBsb2FkIGl0IHVwICovICAgXAorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQkJCSAgICAgIFwKKwlFWENfWEZFUl9FRV9MSVRFKDB4ODAwLCBLZXJuZWxGUCkKKwogI2VuZGlmIC8qIF9fSEVBRF9CT09LRV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKaW5kZXggZDY0YmY2MS4uZjIyZGRjZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTUwNCw3ICs1MDQsMTEgQEAKIAlQUk9HUkFNX0VYQ0VQVElPTgogCiAJLyogRmxvYXRpbmcgUG9pbnQgVW5hdmFpbGFibGUgSW50ZXJydXB0ICovCisjaWZkZWYgQ09ORklHX1BQQ19GUFUKKwlGUF9VTkFWQUlMQUJMRV9FWENFUFRJT04KKyNlbHNlCiAJRVhDRVBUSU9OKDB4MDgwMCwgRmxvYXRpbmdQb2ludFVuYXZhaWxhYmxlLCBVbmtub3duRXhjZXB0aW9uLCBFWENfWEZFUl9FRSkKKyNlbmRpZgogCiAJLyogU3lzdGVtIENhbGwgSW50ZXJydXB0ICovCiAJU1RBUlRfRVhDRVBUSU9OKFN5c3RlbUNhbGwpCkBAIC05MTYsMTAgKzkyMCwxMiBAQAogLyoKICAqIGV4dGVybiB2b2lkIGdpdmV1cF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQogICoKLSAqIFRoZSBlNTAwIGNvcmUgZG9lcyBub3QgaGF2ZSBhbiBGUFUuCisgKiBOb3QgYWxsIEZTTCBCb29rLUUgY29yZXMgaGF2ZSBhbiBGUFUKICAqLworI2lmbmRlZiBDT05GSUdfUFBDX0ZQVQogX0dMT0JBTChnaXZldXBfZnB1KQogCWJscgorI2VuZGlmCiAKIC8qCiAgKiBleHRlcm4gdm9pZCBhYm9ydCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL21pc2MuUyBiL2FyY2gvcHBjL2tlcm5lbC9taXNjLlMKaW5kZXggNzNmN2MyMy4uZTRmMTYxNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL21pc2MuUworKysgYi9hcmNoL3BwYy9rZXJuZWwvbWlzYy5TCkBAIC0xMDk2LDE3ICsxMDk2LDcgQEAKICAqIGFuZCBleGNlcHRpb25zIGFzIGlmIHRoZSBjcHUgaGFkIHBlcmZvcm1lZCB0aGUgbG9hZCBvciBzdG9yZS4KICAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19FNTAwKQotX0dMT0JBTChjdnRfZmQpCi0JbGZzCTAsMChyMykKLQlzdGZkCTAsMChyNCkKLQlibHIKLQotX0dMT0JBTChjdnRfZGYpCi0JbGZkCTAsMChyMykKLQlzdGZzCTAsMChyNCkKLQlibHIKLSNlbHNlCisjaWZkZWYgQ09ORklHX1BQQ19GUFUKIF9HTE9CQUwoY3Z0X2ZkKQogCWxmZAkwLC00KHI1KQkvKiBsb2FkIHVwIGZwc2NyIHZhbHVlICovCiAJbXRmc2YJMHhmZiwwCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvcGNpLmMgYi9hcmNoL3BwYy9rZXJuZWwvcGNpLmMKaW5kZXggOThmOTRiNi4uNDdhMTUzMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9wY2kuYwpAQCAtMTQzMiw3ICsxNDMyLDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCoKK3ZvaWQgX19pb21lbSAqCiBwY2lfYnVzX2lvX2Jhc2UodW5zaWduZWQgaW50IGJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3BwYy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNDI2YjZmNy4uNTlkNTlhOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMzU2LDcgKzM1Nyw3IEBACiAJY2FzZSBQVFJBQ0VfU1lTQ0FMTDogLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KIAljYXNlIFBUUkFDRV9DT05UOiB7IC8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpIHsKIAkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKQEAgLTM4OSw3ICszOTAsNyBAQAogCiAJY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDogeyAgLyogc2V0IHRoZSB0cmFwIGZsYWcuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKIAkJc2V0X3NpbmdsZV9zdGVwKGNoaWxkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKaW5kZXggZTk3Y2U2My4uNWRmYjQyZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKQEAgLTIyMSwyNyArMjIxLDI2IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCXN3aXRjaCAoUFZSX1ZFUihwdnIpKSB7Ci0JY2FzZSAweDAwMjA6CS8qIDQwMyBmYW1pbHkgKi8KLQkJbWFqID0gUFZSX01BSihwdnIpICsgMTsKLQkJbWluID0gUFZSX01JTihwdnIpOwotCQlicmVhazsKLQljYXNlIDB4MTAwODoJLyogNzQwUC83NTBQID8/ICovCi0JCW1haiA9ICgocHZyID4+IDgpICYgMHhGRikgLSAxOwotCQltaW4gPSBwdnIgJiAweEZGOwotCQlicmVhazsKLQljYXNlIDB4ODA4MzoJLyogZTMwMCAqLworCS8qIElmIHdlIGFyZSBhIEZyZWVzY2FsZSBjb3JlIGRvIGEgc2ltcGxlIGNoZWNrIHNvCisJICogd2UgZG9udCBoYXZlIHRvIGtlZXAgYWRkaW5nIGNhc2VzIGluIHRoZSBmdXR1cmUgKi8KKwlpZiAoKFBWUl9WRVIocHZyKSAmIDB4ODAwMCkgPT0gMHg4MDAwKSB7CiAJCW1haiA9IFBWUl9NQUoocHZyKTsKIAkJbWluID0gUFZSX01JTihwdnIpOwotCQlicmVhazsKLQljYXNlIDB4ODAyMDoJLyogZTUwMCAqLwotCQltYWogPSBQVlJfTUFKKHB2cik7Ci0JCW1pbiA9IFBWUl9NSU4ocHZyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbWFqID0gKHB2ciA+PiA4KSAmIDB4RkY7Ci0JCW1pbiA9IHB2ciAmIDB4RkY7Ci0JCWJyZWFrOworCX0gZWxzZSB7CisJCXN3aXRjaCAoUFZSX1ZFUihwdnIpKSB7CisJCQljYXNlIDB4MDAyMDoJLyogNDAzIGZhbWlseSAqLworCQkJCW1haiA9IFBWUl9NQUoocHZyKSArIDE7CisJCQkJbWluID0gUFZSX01JTihwdnIpOworCQkJCWJyZWFrOworCQkJY2FzZSAweDEwMDg6CS8qIDc0MFAvNzUwUCA/PyAqLworCQkJCW1haiA9ICgocHZyID4+IDgpICYgMHhGRikgLSAxOworCQkJCW1pbiA9IHB2ciAmIDB4RkY7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW1haiA9IChwdnIgPj4gOCkgJiAweEZGOworCQkJCW1pbiA9IHB2ciAmIDB4RkY7CisJCQkJYnJlYWs7CisJCX0KIAl9CiAKIAlzZXFfcHJpbnRmKG0sICJyZXZpc2lvblx0OiAlaGQuJWhkIChwdnIgJTA0eCAlMDR4KVxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvcHBjL2tlcm5lbC9zaWduYWwuYwppbmRleCA2NDVlYWUxLi43Yzg0MzdkYSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9zaWduYWwuYwpAQCAtNTExLDcgKzUxMSw3IEBACiB9CiAKIGludCBzeXNfZGVidWdfc2V0Y29udGV4dChzdHJ1Y3QgdWNvbnRleHQgX191c2VyICpjdHgsCi0JCQkgaW50IG5kYmcsIHN0cnVjdCBzaWdfZGJnX29wICpkYmcsCisJCQkgaW50IG5kYmcsIHN0cnVjdCBzaWdfZGJnX29wIF9fdXNlciAqZGJnLAogCQkJIGludCByNiwgaW50IHI3LCBpbnQgcjgsCiAJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC02MzIsNyArNjMyLDcgQEAKIAlpZiAoX19wdXRfdXNlcigodW5zaWduZWQgbG9uZykga2EtPnNhLnNhX2hhbmRsZXIsICZzYy0+aGFuZGxlcikKIAkgICAgfHwgX19wdXRfdXNlcihvbGRzZXQtPnNpZ1swXSwgJnNjLT5vbGRtYXNrKQogCSAgICB8fCBfX3B1dF91c2VyKG9sZHNldC0+c2lnWzFdLCAmc2MtPl91bnVzZWRbM10pCi0JICAgIHx8IF9fcHV0X3VzZXIoKHN0cnVjdCBwdF9yZWdzICopZnJhbWUsICZzYy0+cmVncykKKwkgICAgfHwgX19wdXRfdXNlcigoc3RydWN0IHB0X3JlZ3MgX191c2VyICopZnJhbWUsICZzYy0+cmVncykKIAkgICAgfHwgX19wdXRfdXNlcihzaWcsICZzYy0+c2lnbmFsKSkKIAkJZ290byBiYWRmcmFtZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYwppbmRleCAwMDIzMjJhLi5mOGU3ZTMyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAjZWxzZQogI2RlZmluZSBnZXRfbWNfcmVhc29uKHJlZ3MpCShtZnNwcihTUFJOX01DU1IpKQogI2VuZGlmCi0jZGVmaW5lIFJFQVNPTl9GUAkJMAorI2RlZmluZSBSRUFTT05fRlAJCUVTUl9GUAogI2RlZmluZSBSRUFTT05fSUxMRUdBTAkJRVNSX1BJTAogI2RlZmluZSBSRUFTT05fUFJJVklMRUdFRAlFU1JfUFBSCiAjZGVmaW5lIFJFQVNPTl9UUkFQCQlFU1JfUFRSCkBAIC00MDMsNyArNDAzLDcgQEAKIAl1OCByQSA9IChpbnN0d29yZCA+PiAxNikgJiAweDFmOwogCXU4IE5CX1JCID0gKGluc3R3b3JkID4+IDExKSAmIDB4MWY7CiAJdTMyIG51bV9ieXRlczsKLQl1MzIgRUE7CisJdW5zaWduZWQgbG9uZyBFQTsKIAlpbnQgcG9zID0gMDsKIAogCS8qIEVhcmx5IG91dCBpZiB3ZSBhcmUgYW4gaW52YWxpZCBmb3JtIG9mIGxzd3ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wcGMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMGMwZTcxNC4uOTM1MzU4NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wcGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE0NSw2ICsxNDUsNyBAQAogICBfX2luaXRfZW5kID0gLjsKIAogICAuID0gQUxJR04oNDA5Nik7CisgIF9zZXh0cmF0ZXh0ID0gLjsKICAgX19wbWFjX2JlZ2luID0gLjsKICAgLnBtYWMudGV4dCA6IHsgKigucG1hYy50ZXh0KSB9CiAgIC5wbWFjLmRhdGEgOiB7ICooLnBtYWMuZGF0YSkgfQpAQCAtMTcxLDYgKzE3Miw3IEBACiAgIC5vcGVuZmlybXdhcmUuZGF0YSA6IHsgKigub3BlbmZpcm13YXJlLmRhdGEpIH0KICAgLiA9IEFMSUdOKDQwOTYpOwogICBfX29wZW5maXJtd2FyZV9lbmQgPSAuOworICBfZWV4dHJhdGV4dCA9IC47CiAKICAgX19ic3Nfc3RhcnQgPSAuOwogICAuYnNzICAgICAgIDoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZWJvbnkuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZWJvbnkuYwppbmRleCBmNjNiY2E4Li5jZDExNzM0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2Vib255LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lYm9ueS5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdAogZWJvbnlfc2V0dXBfcGNpeCh2b2lkKQogewotCXZvaWQgKnBjaXhfcmVnX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpwY2l4X3JlZ19iYXNlOwogCiAJcGNpeF9yZWdfYmFzZSA9IGlvcmVtYXA2NChQQ0lYMF9SRUdfQkFTRSwgUENJWF9SRUdfU0laRSk7CiAKQEAgLTIxMCw5ICsyMTAsOCBAQAogCWhvc2UtPmlvX3NwYWNlLmVuZCA9IEVCT05ZX1BDSV9VUFBFUl9JTzsKIAlob3NlLT5tZW1fc3BhY2Uuc3RhcnQgPSBFQk9OWV9QQ0lfTE9XRVJfTUVNOwogCWhvc2UtPm1lbV9zcGFjZS5lbmQgPSBFQk9OWV9QQ0lfVVBQRVJfTUVNOwotCWlzYV9pb19iYXNlID0KLQkJKHVuc2lnbmVkIGxvbmcpaW9yZW1hcDY0KEVCT05ZX1BDSV9JT19CQVNFLCBFQk9OWV9QQ0lfSU9fU0laRSk7Ci0JaG9zZS0+aW9fYmFzZV92aXJ0ID0gKHZvaWQgKilpc2FfaW9fYmFzZTsKKwlob3NlLT5pb19iYXNlX3ZpcnQgPSBpb3JlbWFwNjQoRUJPTllfUENJX0lPX0JBU0UsIEVCT05ZX1BDSV9JT19TSVpFKTsKKwlpc2FfaW9fYmFzZSA9ICh1bnNpZ25lZCBsb25nKWhvc2UtPmlvX2Jhc2VfdmlydDsKIAogCXNldHVwX2luZGlyZWN0X3BjaShob3NlLAogCQkJRUJPTllfUENJX0NGR0FfUExCMzIsCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2x1YW4uYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvbHVhbi5jCmluZGV4IDFkZjIzMzkuLjk1MzU5ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvbHVhbi5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvbHVhbi5jCkBAIC0yMjMsOSArMjIzLDggQEAKIAlob3NlLT5pb19zcGFjZS5lbmQgPSBMVUFOX1BDSVhfVVBQRVJfSU87CiAJaG9zZS0+bWVtX3NwYWNlLnN0YXJ0ID0gbG93ZXJfbWVtOwogCWhvc2UtPm1lbV9zcGFjZS5lbmQgPSB1cHBlcl9tZW07Ci0JaXNhX2lvX2Jhc2UgPQotCQkodW5zaWduZWQgbG9uZylpb3JlbWFwNjQocGNpeF9pb19iYXNlLCBQQ0lYX0lPX1NJWkUpOwotCWhvc2UtPmlvX2Jhc2VfdmlydCA9ICh2b2lkICopaXNhX2lvX2Jhc2U7CisJaG9zZS0+aW9fYmFzZV92aXJ0ID0gaW9yZW1hcDY0KHBjaXhfaW9fYmFzZSwgUENJWF9JT19TSVpFKTsKKwlpc2FfaW9fYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBob3NlLT5pb19iYXNlX3ZpcnQ7CiAKIAlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgY2ZnYSwgY2ZnZCk7CiAJaG9zZS0+c2V0X2NmZ190eXBlID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5jCmluZGV4IDI4ZGU3MDcuLjVmODJhNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9vY290ZWEuYwpAQCAtMjI3LDkgKzIyNyw4IEBACiAJaG9zZS0+aW9fc3BhY2UuZW5kID0gT0NPVEVBX1BDSV9VUFBFUl9JTzsKIAlob3NlLT5tZW1fc3BhY2Uuc3RhcnQgPSBPQ09URUFfUENJX0xPV0VSX01FTTsKIAlob3NlLT5tZW1fc3BhY2UuZW5kID0gT0NPVEVBX1BDSV9VUFBFUl9NRU07Ci0JaXNhX2lvX2Jhc2UgPQotCQkodW5zaWduZWQgbG9uZylpb3JlbWFwNjQoT0NPVEVBX1BDSV9JT19CQVNFLCBPQ09URUFfUENJX0lPX1NJWkUpOwotCWhvc2UtPmlvX2Jhc2VfdmlydCA9ICh2b2lkICopaXNhX2lvX2Jhc2U7CisJaG9zZS0+aW9fYmFzZV92aXJ0ID0gaW9yZW1hcDY0KE9DT1RFQV9QQ0lfSU9fQkFTRSwgT0NPVEVBX1BDSV9JT19TSVpFKTsKKwlpc2FfaW9fYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBob3NlLT5pb19iYXNlX3ZpcnQ7CiAKIAlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwKIAkJCU9DT1RFQV9QQ0lfQ0ZHQV9QTEIzMiwKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaHJwX3BjaS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NocnBfcGNpLmMKaW5kZXggNWJiNjQ5Mi4uN2QwZWUzMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2NocnBfcGNpLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NocnBfcGNpLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCXJ0YXNfd3JpdGVfY29uZmlnCiB9OwogCi12b2xhdGlsZSBzdHJ1Y3QgSHlkcmEgKkh5ZHJhID0gTlVMTDsKK3ZvbGF0aWxlIHN0cnVjdCBIeWRyYSBfX2lvbWVtICpIeWRyYSA9IE5VTEw7CiAKIGludCBfX2luaXQKIGh5ZHJhX2luaXQodm9pZCkKQEAgLTE3NSwxMyArMTc1LDE0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQKIHNldHVwX3B5dGhvbihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KQogewotCXUzMiAqcmVnLCB2YWw7CisJdTMyIF9faW9tZW0gKnJlZzsKKwl1MzIgdmFsOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGRldi0+YWRkcnNbMF0uYWRkcmVzczsKIAogCXNldHVwX2luZGlyZWN0X3BjaShob3NlLCBhZGRyICsgMHhmODAwMCwgYWRkciArIDB4ZjgwMTApOwogCiAJLyogQ2xlYXIgdGhlIG1hZ2ljIGdvLXNsb3cgYml0ICovCi0JcmVnID0gKHUzMiAqKSBpb3JlbWFwKGRldi0+YWRkcnNbMF0uYWRkcmVzcyArIDB4ZjYwMDAsIDB4NDApOworCXJlZyA9IGlvcmVtYXAoZGV2LT5hZGRyc1swXS5hZGRyZXNzICsgMHhmNjAwMCwgMHg0MCk7CiAJdmFsID0gaW5fYmUzMigmcmVnWzEyXSk7CiAJaWYgKHZhbCAmIFBSR19DTF9SRVNFVF9WQUxJRCkgewogCQlvdXRfYmUzMigmcmVnWzEyXSwgdmFsICYgflBSR19DTF9SRVNFVF9WQUxJRCk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hycF9zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NocnBfc2V0dXAuYwppbmRleCBmMjNjNGYzLi41N2YyOWFiIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hycF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaHJwX3NldHVwLmMKQEAgLTM1Niw3ICszNTYsNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAJaW50IGxlbiwgaTsKIAl1bnNpZ25lZCBpbnQgKmlyYW5nZXM7Ci0Jdm9pZCAqaXN1OworCXZvaWQgX19pb21lbSAqaXN1OwogCiAJbnAgPSBmaW5kX3R5cGVfZGV2aWNlcygib3Blbi1waWMiKTsKIAlpZiAobnAgPT0gTlVMTCB8fCBucC0+bl9hZGRycyA9PSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfY2FjaGUuUyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX2NhY2hlLlMKaW5kZXggZGEzNGE5Yi4uZmI5NzdkZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfY2FjaGUuUworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19jYWNoZS5TCkBAIC02NCwyNyArNjQsMzkgQEAKIAltdHNwcglTUFJOX0hJRDAscjQJCS8qIERpc2FibGUgRFBNICovCiAJc3luYwogCi0JLyogZGlzcC1mbHVzaCBMMSAqLwotCWxpCXI0LDB4NDAwMAotCW10Y3RyCXI0CisJLyogRGlzcC1mbHVzaCBMMS4gV2UgaGF2ZSBhIHdlaXJkIHByb2JsZW0gaGVyZSB0aGF0IEkgbmV2ZXIKKwkgKiB0b3RhbGx5IGZpZ3VyZWQgb3V0LiBPbiA3NTBGWCwgdXNpbmcgdGhlIFJPTSBmb3IgdGhlIGZsdXNoCisJICogcmVzdWx0cyBpbiBhIG5vbi13b3JraW5nIGZsdXNoLiBXZSB1c2UgdGhhdCB3b3JrYXJvdW5kIGZvcgorCSAqIG5vdyB1bnRpbCBJIGZpbmFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24uIC0tQmVuSAorCSAqLworCisJLyogUk9NIGJhc2UgYnkgZGVmYXVsdCAqLwogCWxpcwlyNCwweGZmZjAKLTE6CWx3engJcjAscjAscjQKKwltZnB2cglyMworCXNyd2kJcjMscjMsMTYKKwljbXBsd2kJY3IwLHIzLDB4NzAwMAorCWJuZSsJMWYKKwkvKiBSQU0gYmFzZSBvbiA3NTBGWCAqLworCWxpCXI0LDAKKzE6CWxpCXI0LDB4NDAwMAorCW10Y3RyCXI0CisxOglsd3oJcjAsMChyNCkKIAlhZGRpCXI0LHI0LDMyCiAJYmRuegkxYgogCXN5bmMKIAlpc3luYwogCi0JLyogZGlzYWJsZSAvIGludmFsaWRhdGUgLyBlbmFibGUgTDEgZGF0YSAqLworCS8qIERpc2FibGUgLyBpbnZhbGlkYXRlIC8gZW5hYmxlIEwxIGRhdGEgKi8KIAltZnNwcglyMyxTUFJOX0hJRDAKLQlybHdpbm0JcjAscjAsMCx+SElEMF9EQ0UKKwlybHdpbm0JcjMscjMsMCx+KEhJRDBfRENFIHwgSElEMF9JQ0UpCiAJbXRzcHIJU1BSTl9ISUQwLHIzCiAJc3luYwogCWlzeW5jCi0Jb3JpCXIzLHIzLEhJRDBfRENFfEhJRDBfRENJCisJb3JpCXIzLHIzLChISUQwX0RDRXxISUQwX0RDSXxISUQwX0lDRXxISUQwX0lDRkkpCiAJc3luYwogCWlzeW5jCiAJbXRzcHIJU1BSTl9ISUQwLHIzCi0JeG9yaQlyMyxyMyxISUQwX0RDSQorCXhvcmkJcjMscjMsKEhJRDBfRENJfEhJRDBfSUNGSSkKIAltdHNwcglTUFJOX0hJRDAscjMKIAlzeW5jCiAKQEAgLTExMCwxMSArMTIyLDIwIEBACiAJbGlzCXI0LDIKIAltdGN0cglyNAogCWxpcwlyNCwweGZmZjAKLTE6CWx3engJcjAscjAscjQKKzE6CWx3eglyMCwwKHI0KQogCWFkZGkJcjQscjQsMzIKIAliZG56CTFiCiAJc3luYwogCWlzeW5jCisJbGlzCXI0LDIKKwltdGN0cglyNAorCWxpcwlyNCwweGZmZjAKKzE6CWRjYmYJMCxyNAorCWFkZGkJcjQscjQsMzIKKwliZG56CTFiCisJc3luYworCWlzeW5jCisKIAkvKiBub3cgZGlzYWJsZSBMMiAqLwogCXJsd2lubQlyNSxyNSwwLH5MMkNSX0wyRQogCWIJMmYKQEAgLTEzNSw2ICsxNTYsMTMgQEAKIAltdHNwcglTUFJOX0wyQ1IscjQKIAlzeW5jCiAJaXN5bmMKKworCS8qIFdhaXQgZm9yIHRoZSBpbnZhbGlkYXRpb24gdG8gY29tcGxldGUgKi8KKzE6CW1mc3ByCXIzLFNQUk5fTDJDUgorCXJsd2lubS4JcjAscjMsMCwzMSwzMQorCWJuZQkxYgorCisJLyogQ2xlYXIgTDJJICovCiAJeG9yaXMJcjQscjQsTDJDUl9MMklAaAogCXN5bmMKIAltdHNwcglTUFJOX0wyQ1IscjQKQEAgLTE0MiwxNCArMTcwLDE2IEBACiAKIAkvKiBub3cgZGlzYWJsZSB0aGUgTDEgZGF0YSBjYWNoZSAqLwogCW1mc3ByCXIwLFNQUk5fSElEMAotCXJsd2lubQlyMCxyMCwwLH5ISUQwX0RDRQorCXJsd2lubQlyMCxyMCwwLH4oSElEMF9EQ0V8SElEMF9JQ0UpCiAJbXRzcHIJU1BSTl9ISUQwLHIwCiAJc3luYwogCWlzeW5jCiAKIAkvKiBSZXN0b3JlIEhJRDBbRFBNXSB0byB3aGF0ZXZlciBpdCB3YXMgYmVmb3JlICovCiAJc3luYwotCW10c3ByCVNQUk5fSElEMCxyOAorCW1mc3ByCXIwLFNQUk5fSElEMAorCXJsd2ltaQlyMCxyOCwwLDExLDExCQkvKiBUdXJuIGJhY2sgSElEMFtEUE1dICovCisJbXRzcHIJU1BSTl9ISUQwLHIwCiAJc3luYwogCiAJLyogcmVzdG9yZSBEUiBhbmQgRUUgKi8KQEAgLTIwMSw3ICsyMzEsNyBAQAogICAgICAgICBtdGN0ciAgIHI0CiAgCWxpICAgICAgcjQsMAogMToKLSAgICAgICAgbHd6eCAgICByMCxyMCxyNAorICAgICAgICBsd3ogICAgIHIwLDAocjQpCiAgICAgICAgIGFkZGkgICAgcjQscjQsMzIgICAgICAgICAgICAgICAgLyogR28gdG8gc3RhcnQgb2YgbmV4dCBjYWNoZSBsaW5lICovCiAgICAgICAgIGJkbnogICAgMWIKICAgICAgICAgaXN5bmMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX2ZlYXR1cmUuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX2ZlYXR1cmUuYwppbmRleCA0NmNiZjM2Li44NjczMzZhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19mZWF0dXJlLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfZmVhdHVyZS5jCkBAIC0xNTkwLDYgKzE1OTAsMTE0IEBACiAJbWRlbGF5KDEwKTsKIH0KIAorCit2b2lkIF9fcG1hYyBwbWFjX3R3ZWFrX2Nsb2NrX3NwcmVhZGluZyhpbnQgZW5hYmxlKQoreworCXN0cnVjdCBtYWNpb19jaGlwKiBtYWNpbyA9ICZtYWNpb19jaGlwc1swXTsKKworCS8qIEhhY2sgZm9yIGRvaW5nIGNsb2NrIHNwcmVhZGluZyBvbiBzb21lIG1hY2hpbmVzIFBvd2VyQm9va3MgYW5kCisJICogaUJvb2tzLiBUaGlzIGltcGxlbWVudHMgdGhlICJwbGF0Zm9ybS1kby1jbG9ja3NwcmVhZGluZyIgT0YKKwkgKiBwcm9wZXJ0eSBhcyBkZWNvZGVkIG1hbnVhbGx5IG9uIHZhcmlvdXMgbW9kZWxzLiBGb3Igc2FmZXR5LCB3ZSBhbHNvCisJICogY2hlY2sgdGhlIHByb2R1Y3QgSUQgaW4gdGhlIGRldmljZS10cmVlIGluIGNhc2VzIHdlJ2xsIHdoYWNrIHRoZSBpMmMKKwkgKiBjaGlwIHRvIG1ha2UgcmVhc29uYWJseSBzdXJlIHdlIHdvbid0IHNldCB3cm9uZyB2YWx1ZXMgaW4gdGhlcmUKKwkgKgorCSAqIE9mIGNvdXJzZSwgdWx0aW1hdGVseSwgd2UgaGF2ZSB0byBpbXBsZW1lbnQgYSByZWFsIHBhcnNlciBmb3IKKwkgKiB0aGUgcGxhdGZvcm0tZG8tKiBzdHVmZi4uLgorCSAqLworCisJaWYgKG1hY2lvLT50eXBlID09IG1hY2lvX2ludHJlcGlkKSB7CisJCWlmIChlbmFibGUpCisJCQlVTl9PVVQoVU5JX05fQ0xPQ0tfU1BSRUFESU5HLCAyKTsKKwkJZWxzZQorCQkJVU5fT1VUKFVOSV9OX0NMT0NLX1NQUkVBRElORywgMCk7CisJCW1kZWxheSg0MCk7CisJfQorCisJd2hpbGUgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSwyIikgfHwKKwkgICAgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDMiKSB8fAorCSAgICAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsMiIpIHx8CisJICAgICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiwzIikpIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICp1aTJjID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImkyYyIpOworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmR0ID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImRldmljZS10cmVlIik7CisJCXU4IGJ1ZmZlcls5XTsKKwkJdTMyICpwcm9kdWN0SUQ7CisJCWludCBpLCByYywgY2hhbmdlZCA9IDA7CisKKwkJaWYgKGR0ID09IE5VTEwpCisJCQlicmVhazsKKwkJcHJvZHVjdElEID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkdCwgInBpZCMiLCBOVUxMKTsKKwkJaWYgKHByb2R1Y3RJRCA9PSBOVUxMKQorCQkJYnJlYWs7CisJCXdoaWxlKHVpMmMpIHsKKwkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcCA9IG9mX2dldF9wYXJlbnQodWkyYyk7CisJCQlpZiAocCAmJiAhc3RyY21wKHAtPm5hbWUsICJ1bmktbiIpKQorCQkJCWJyZWFrOworCQkJdWkyYyA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKHVpMmMsICJpMmMiKTsKKwkJfQorCQlpZiAodWkyYyA9PSBOVUxMKQorCQkJYnJlYWs7CisJCURCRygiVHJ5aW5nIHRvIGJ1bXAgY2xvY2sgc3BlZWQgZm9yIFBJRDogJTA4eC4uLlxuIiwgKnByb2R1Y3RJRCk7CisJCXJjID0gcG1hY19sb3dfaTJjX29wZW4odWkyYywgMSk7CisJCWlmIChyYyAhPSAwKQorCQkJYnJlYWs7CisJCXBtYWNfbG93X2kyY19zZXRtb2RlKHVpMmMsIHBtYWNfbG93X2kyY19tb2RlX2NvbWJpbmVkKTsKKwkJcmMgPSBwbWFjX2xvd19pMmNfeGZlcih1aTJjLCAweGQyIHwgcG1hY19sb3dfaTJjX3JlYWQsIDB4ODAsIGJ1ZmZlciwgOSk7CisJCURCRygicmVhZCByZXN1bHQ6ICVkLCIsIHJjKTsKKwkJaWYgKHJjICE9IDApIHsKKwkJCXBtYWNfbG93X2kyY19jbG9zZSh1aTJjKTsKKwkJCWJyZWFrOworCQl9CisJCWZvciAoaT0wOyBpPDk7IGkrKykKKwkJCURCRygiICUwMngiLCBidWZmZXJbaV0pOworCQlEQkcoIlxuIik7CisKKwkJc3dpdGNoKCpwcm9kdWN0SUQpIHsKKwkJY2FzZSAweDExODI6CS8qIEFsQm9vayAxMiIgcmV2IDIgKi8KKwkJY2FzZSAweDExODM6CS8qIGlCb29rIEc0IDEyIiAqLworCQkJYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4OGYpIHwgMHg3MDsKKwkJCWJ1ZmZlclsyXSA9IChidWZmZXJbMl0gJiAweDdmKSB8IDB4MDA7CisJCQlidWZmZXJbNV0gPSAoYnVmZmVyWzVdICYgMHg4MCkgfCAweDMxOworCQkJYnVmZmVyWzZdID0gKGJ1ZmZlcls2XSAmIDB4NDApIHwgMHhiMDsKKwkJCWJ1ZmZlcls3XSA9IChidWZmZXJbN10gJiAweDAwKSB8IChlbmFibGUgPyAweGMwIDogMHhiYSk7CisJCQlidWZmZXJbOF0gPSAoYnVmZmVyWzhdICYgMHgwMCkgfCAweDMwOworCQkJY2hhbmdlZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAweDMxNDI6CS8qIEFsQm9vayAxNSIgKEFUSSBNMTApICovCisJCWNhc2UgMHgzMTQzOgkvKiBBbEJvb2sgMTciIChBVEkgTTEwKSAqLworCQkJYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4YWYpIHwgMHg1MDsKKwkJCWJ1ZmZlclsyXSA9IChidWZmZXJbMl0gJiAweDdmKSB8IDB4MDA7CisJCQlidWZmZXJbNV0gPSAoYnVmZmVyWzVdICYgMHg4MCkgfCAweDMxOworCQkJYnVmZmVyWzZdID0gKGJ1ZmZlcls2XSAmIDB4NDApIHwgMHhiMDsKKwkJCWJ1ZmZlcls3XSA9IChidWZmZXJbN10gJiAweDAwKSB8IChlbmFibGUgPyAweGQwIDogMHhjMCk7CisJCQlidWZmZXJbOF0gPSAoYnVmZmVyWzhdICYgMHgwMCkgfCAweDMwOworCQkJY2hhbmdlZCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURCRygiaTJjLWh3Y2xvY2s6IE1hY2hpbmUgbW9kZWwgbm90IGhhbmRsZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFjaGFuZ2VkKSB7CisJCQlwbWFjX2xvd19pMmNfY2xvc2UodWkyYyk7CisJCQlicmVhazsKKwkJfQorCQlwbWFjX2xvd19pMmNfc2V0bW9kZSh1aTJjLCBwbWFjX2xvd19pMmNfbW9kZV9zdGRzdWIpOworCQlyYyA9IHBtYWNfbG93X2kyY194ZmVyKHVpMmMsIDB4ZDIgfCBwbWFjX2xvd19pMmNfd3JpdGUsIDB4ODAsIGJ1ZmZlciwgOSk7CisJCURCRygid3JpdGUgcmVzdWx0OiAlZCwiLCByYyk7CisJCXBtYWNfbG93X2kyY19zZXRtb2RlKHVpMmMsIHBtYWNfbG93X2kyY19tb2RlX2NvbWJpbmVkKTsKKwkJcmMgPSBwbWFjX2xvd19pMmNfeGZlcih1aTJjLCAweGQyIHwgcG1hY19sb3dfaTJjX3JlYWQsIDB4ODAsIGJ1ZmZlciwgOSk7CisJCURCRygicmVhZCByZXN1bHQ6ICVkLCIsIHJjKTsKKwkJaWYgKHJjICE9IDApIHsKKwkJCXBtYWNfbG93X2kyY19jbG9zZSh1aTJjKTsKKwkJCWJyZWFrOworCQl9CisJCWZvciAoaT0wOyBpPDk7IGkrKykKKwkJCURCRygiICUwMngiLCBidWZmZXJbaV0pOworCQlwbWFjX2xvd19pMmNfY2xvc2UodWkyYyk7CisJCWJyZWFrOworCX0KK30KKworCiBzdGF0aWMgaW50IF9fcG1hYwogY29yZTk5X3NsZWVwKHZvaWQpCiB7CkBAIC0xNjAxLDEyICsxNzA5LDYgQEAKIAkgICAgbWFjaW8tPnR5cGUgIT0gbWFjaW9faW50cmVwaWQpCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogVGhlIGRldmljZS10cmVlIGNvbnRhaW5zIHRoYXQgaW4gdGhlIGh3Y2xvY2sgbm9kZSAqLwotCWlmIChtYWNpby0+dHlwZSA9PSBtYWNpb19pbnRyZXBpZCkgewotCQlVTl9PVVQoVU5JX05fQ0xPQ0tfU1BSRUFESU5HLCAwKTsKLQkJbWRlbGF5KDQwKTsKLQl9Ci0KIAkvKiBXZSBwb3dlciBvZmYgdGhlIHdpcmVsZXNzIHNsb3QgaW4gY2FzZSBpdCB3YXMgbm90IGRvbmUKIAkgKiBieSB0aGUgZHJpdmVyLiBXZSBkb24ndCBwb3dlciBpdCBvbiBhdXRvbWF0aWNhbGx5IGhvd2V2ZXIKIAkgKi8KQEAgLTE3NDksMTIgKzE4NTEsNiBAQAogCVVOX09VVChVTklfTl9DTE9DS19DTlRMLCBzYXZlX3VuaW5fY2xvY2tfY3RsKTsKIAl1ZGVsYXkoMTAwKTsKIAotCS8qIFJlc3RvcmUgY2xvY2sgc3ByZWFkaW5nICovCi0JaWYgKG1hY2lvLT50eXBlID09IG1hY2lvX2ludHJlcGlkKSB7Ci0JCVVOX09VVChVTklfTl9DTE9DS19TUFJFQURJTkcsIDIpOwotCQltZGVsYXkoNDApOwotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC0yMTQ5LDcgKzIyNDUsNyBAQAogCX0sCiAJewkiUG93ZXJCb29rMSwxIiwJCQkiUG93ZXJCb29rIDEwMSAoTG9tYmFyZCkiLAogCQlQTUFDX1RZUEVfMTAxX1BCT09LLAkJcGFkZGluZ3Rvbl9mZWF0dXJlcywKLQkJUE1BQ19NQl9NQVlfU0xFRVAgfCBQTUFDX01CX01PQklMRQorCQlQTUFDX01CX0NBTl9TTEVFUCB8IFBNQUNfTUJfTU9CSUxFCiAJfSwKIAl7CSJQb3dlckJvb2syLDEiLAkJCSJpQm9vayAoZmlyc3QgZ2VuZXJhdGlvbikiLAogCQlQTUFDX1RZUEVfT1JJR19JQk9PSywJCWNvcmU5OV9mZWF0dXJlcywKQEAgLTI3MTgsOTcgKzI4MTQsMTEgQEAKIAkJTUFDSU9fQklDKEhFQVRIUk9XX0ZDUiwgSFJXX1NPVU5EX1BPV0VSX04pOwogCX0KIAotCS8qIEhhY2sgZm9yIGJ1bXBpbmcgY2xvY2sgc3BlZWQgb24gdGhlIG5ldyBQb3dlckJvb2tzIGFuZCB0aGUKLQkgKiBpQm9vayBHNC4gVGhpcyBpbXBsZW1lbnRzIHRoZSAicGxhdGZvcm0tZG8tY2xvY2tzcHJlYWRpbmciIE9GCi0JICogcHJvcGVydHkuIEZvciBzYWZldHksIHdlIGFsc28gY2hlY2sgdGhlIHByb2R1Y3QgSUQgaW4gdGhlCi0JICogZGV2aWNlLXRyZWUgdG8gbWFrZSByZWFzb25hYmx5IHN1cmUgd2Ugd29uJ3Qgc2V0IHdyb25nIHZhbHVlcwotCSAqIGluIHRoZSBjbG9jayBjaGlwLgotCSAqCi0JICogT2YgY291cnNlLCB1bHRpbWF0ZWx5LCB3ZSBoYXZlIHRvIGltcGxlbWVudCBhIHJlYWwgcGFyc2VyIGZvcgotCSAqIHRoZSBwbGF0Zm9ybS1kby0qIHN0dWZmLi4uCisJLyogU29tZSBtYWNoaW5lIG1vZGVscyBuZWVkIHRoZSBjbG9jayBjaGlwIHRvIGJlIHByb3Blcmx5IHNldHVwIGZvcgorCSAqIGNsb2NrIHNwcmVhZGluZyBub3cuIFRoaXMgc2hvdWxkIGJlIGEgcGxhdGZvcm0gZnVuY3Rpb24gYnV0IHdlCisJICogZG9uJ3QgZG8gdGhlc2UgYXQgdGhlIG1vbWVudAogCSAqLwotCXdoaWxlIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsMiIpIHx8Ci0JICAgICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSwzIikgfHwKLQkgICAgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDIiKSB8fAotCSAgICAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsMyIpKSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdWkyYyA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJpMmMiKTsKLQkJc3RydWN0IGRldmljZV9ub2RlICpkdCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJkZXZpY2UtdHJlZSIpOwotCQl1OCBidWZmZXJbOV07Ci0JCXUzMiAqcHJvZHVjdElEOwotCQlpbnQgaSwgcmMsIGNoYW5nZWQgPSAwOwotCQkKLQkJaWYgKGR0ID09IE5VTEwpCi0JCQlicmVhazsKLQkJcHJvZHVjdElEID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkdCwgInBpZCMiLCBOVUxMKTsKLQkJaWYgKHByb2R1Y3RJRCA9PSBOVUxMKQotCQkJYnJlYWs7Ci0JCXdoaWxlKHVpMmMpIHsKLQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcCA9IG9mX2dldF9wYXJlbnQodWkyYyk7Ci0JCQlpZiAocCAmJiAhc3RyY21wKHAtPm5hbWUsICJ1bmktbiIpKQotCQkJCWJyZWFrOwotCQkJdWkyYyA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKHVpMmMsICJpMmMiKTsKLQkJfQotCQlpZiAodWkyYyA9PSBOVUxMKQotCQkJYnJlYWs7Ci0JCURCRygiVHJ5aW5nIHRvIGJ1bXAgY2xvY2sgc3BlZWQgZm9yIFBJRDogJTA4eC4uLlxuIiwgKnByb2R1Y3RJRCk7Ci0JCXJjID0gcG1hY19sb3dfaTJjX29wZW4odWkyYywgMSk7Ci0JCWlmIChyYyAhPSAwKQotCQkJYnJlYWs7Ci0JCXBtYWNfbG93X2kyY19zZXRtb2RlKHVpMmMsIHBtYWNfbG93X2kyY19tb2RlX2NvbWJpbmVkKTsKLQkJcmMgPSBwbWFjX2xvd19pMmNfeGZlcih1aTJjLCAweGQyIHwgcG1hY19sb3dfaTJjX3JlYWQsIDB4ODAsIGJ1ZmZlciwgOSk7Ci0JCURCRygicmVhZCByZXN1bHQ6ICVkLCIsIHJjKTsKLQkJaWYgKHJjICE9IDApIHsKLQkJCXBtYWNfbG93X2kyY19jbG9zZSh1aTJjKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWZvciAoaT0wOyBpPDk7IGkrKykKLQkJCURCRygiICUwMngiLCBidWZmZXJbaV0pOwotCQlEQkcoIlxuIik7Ci0JCQotCQlzd2l0Y2goKnByb2R1Y3RJRCkgewotCQljYXNlIDB4MTE4MjoJLyogQWxCb29rIDEyIiByZXYgMiAqLwotCQljYXNlIDB4MTE4MzoJLyogaUJvb2sgRzQgMTIiICovCi0JCQlidWZmZXJbMF0gPSAoYnVmZmVyWzBdICYgMHg4ZikgfCAweDcwOwotCQkJYnVmZmVyWzJdID0gKGJ1ZmZlclsyXSAmIDB4N2YpIHwgMHgwMDsKLQkJCWJ1ZmZlcls1XSA9IChidWZmZXJbNV0gJiAweDgwKSB8IDB4MzE7Ci0JCQlidWZmZXJbNl0gPSAoYnVmZmVyWzZdICYgMHg0MCkgfCAweGIwOwotCQkJYnVmZmVyWzddID0gKGJ1ZmZlcls3XSAmIDB4MDApIHwgMHhjMDsKLQkJCWJ1ZmZlcls4XSA9IChidWZmZXJbOF0gJiAweDAwKSB8IDB4MzA7Ci0JCQljaGFuZ2VkID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIDB4MzE0MjoJLyogQWxCb29rIDE1IiAoQVRJIE0xMCkgKi8KLQkJY2FzZSAweDMxNDM6CS8qIEFsQm9vayAxNyIgKEFUSSBNMTApICovCi0JCQlidWZmZXJbMF0gPSAoYnVmZmVyWzBdICYgMHhhZikgfCAweDUwOwotCQkJYnVmZmVyWzJdID0gKGJ1ZmZlclsyXSAmIDB4N2YpIHwgMHgwMDsKLQkJCWJ1ZmZlcls1XSA9IChidWZmZXJbNV0gJiAweDgwKSB8IDB4MzE7Ci0JCQlidWZmZXJbNl0gPSAoYnVmZmVyWzZdICYgMHg0MCkgfCAweGIwOwotCQkJYnVmZmVyWzddID0gKGJ1ZmZlcls3XSAmIDB4MDApIHwgMHhkMDsKLQkJCWJ1ZmZlcls4XSA9IChidWZmZXJbOF0gJiAweDAwKSB8IDB4MzA7Ci0JCQljaGFuZ2VkID0gMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJREJHKCJpMmMtaHdjbG9jazogTWFjaGluZSBtb2RlbCBub3QgaGFuZGxlZFxuIik7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoIWNoYW5nZWQpIHsKLQkJCXBtYWNfbG93X2kyY19jbG9zZSh1aTJjKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXBtYWNfbG93X2kyY19zZXRtb2RlKHVpMmMsIHBtYWNfbG93X2kyY19tb2RlX3N0ZHN1Yik7Ci0JCXJjID0gcG1hY19sb3dfaTJjX3hmZXIodWkyYywgMHhkMiB8IHBtYWNfbG93X2kyY193cml0ZSwgMHg4MCwgYnVmZmVyLCA5KTsKLQkJREJHKCJ3cml0ZSByZXN1bHQ6ICVkLCIsIHJjKTsKLQkJcG1hY19sb3dfaTJjX3NldG1vZGUodWkyYywgcG1hY19sb3dfaTJjX21vZGVfY29tYmluZWQpOwotCQlyYyA9IHBtYWNfbG93X2kyY194ZmVyKHVpMmMsIDB4ZDIgfCBwbWFjX2xvd19pMmNfcmVhZCwgMHg4MCwgYnVmZmVyLCA5KTsKLQkJREJHKCJyZWFkIHJlc3VsdDogJWQsIiwgcmMpOwotCQlpZiAocmMgIT0gMCkgewotCQkJcG1hY19sb3dfaTJjX2Nsb3NlKHVpMmMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJZm9yIChpPTA7IGk8OTsgaSsrKQotCQkJREJHKCIgJTAyeCIsIGJ1ZmZlcltpXSk7Ci0JCXBtYWNfbG93X2kyY19jbG9zZSh1aTJjKTsKLQkJYnJlYWs7Ci0JfQorCXBtYWNfdHdlYWtfY2xvY2tfc3ByZWFkaW5nKDEpOwogCiAjZW5kaWYgLyogQ09ORklHX1BPV0VSNCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19sb3dfaTJjLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19sb3dfaTJjLmMKaW5kZXggZDA3NTc5Zi4uMDg1ODNmYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfbG93X2kyYy5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX2xvd19pMmMuYwpAQCAtNTQsNyArNTQsNyBAQAogCWludAkJCW1vZGU7CQkvKiBDdXJyZW50IG1vZGUgKi8KIAlpbnQJCQljaGFubmVsOwkvKiBDdXJyZW50IGNoYW5uZWwgKi8KIAlpbnQJCQludW1fY2hhbm5lbHM7CS8qIE51bWJlciBvZiBjaGFubmVscyAqLwotCXVuc2lnbmVkIGxvbmcJCWJhc2U7CQkvKiBGb3Iga2V5d2VzdC1pMmMsIGJhc2UgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbSAqCQliYXNlOwkJLyogRm9yIGtleXdlc3QtaTJjLCBiYXNlIGFkZHJlc3MgKi8KIAlpbnQJCQlic3RlcHM7CQkvKiBBbmQgcmVnaXN0ZXIgc3RlcHBpbmcgKi8KIAlpbnQJCQlzcGVlZDsJCS8qIEFuZCBzcGVlZCAqLwogfTsKQEAgLTE1NCwxNCArMTU0LDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdTggX19rd19yZWFkX3JlZyhzdHJ1Y3QgbG93X2kyY19ob3N0ICpob3N0LCByZWdfdCByZWcpCiB7Ci0JcmV0dXJuIGluXzgoKCh2b2xhdGlsZSB1OCAqKWhvc3QtPmJhc2UpCi0JCSsgKCgodW5zaWduZWQpcmVnKSA8PCBob3N0LT5ic3RlcHMpKTsKKwlyZXR1cm4gaW5fOChob3N0LT5iYXNlICsgKCgodW5zaWduZWQpcmVnKSA8PCBob3N0LT5ic3RlcHMpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fa3dfd3JpdGVfcmVnKHN0cnVjdCBsb3dfaTJjX2hvc3QgKmhvc3QsIHJlZ190IHJlZywgdTggdmFsKQogewotCW91dF84KCgodm9sYXRpbGUgdTggKilob3N0LT5iYXNlKQotCQkrICgoKHVuc2lnbmVkKXJlZykgPDwgaG9zdC0+YnN0ZXBzKSwgdmFsKTsKKwlvdXRfOChob3N0LT5iYXNlICsgKCgodW5zaWduZWQpcmVnKSA8PCBob3N0LT5ic3RlcHMpLCB2YWwpOwogCSh2b2lkKV9fa3dfcmVhZF9yZWcoaG9zdCwgcmVnX3N1YmFkZHIpOwogfQogCkBAIC0zNzAsNyArMzY4LDcgQEAKIAkJYnJlYWs7CiAJfQkKIAlob3N0LT5tb2RlID0gcG1hY19sb3dfaTJjX21vZGVfc3RkOwotCWhvc3QtPmJhc2UgPSAodW5zaWduZWQgbG9uZylpb3JlbWFwKG5wLT5hZGRyc1swXS5hZGRyZXNzICsgYW9mZnNldCwKKwlob3N0LT5iYXNlID0gaW9yZW1hcChucC0+YWRkcnNbMF0uYWRkcmVzcyArIGFvZmZzZXQsCiAJCQkJCQlucC0+YWRkcnNbMF0uc2l6ZSk7CiAJaG9zdC0+ZnVuYyA9IGtleXdlc3RfbG93X2kyY19mdW5jOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfc2xlZXAuUyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3NsZWVwLlMKaW5kZXggMzEzOWI2Ny4uZjQ1OWFkZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfc2xlZXAuUworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19zbGVlcC5TCkBAIC0yNjcsNiArMjY3LDEwIEBACiAJLyogUmVzdG9yZSB2YXJpb3VzIENQVSBjb25maWcgc3R1ZmZzICovCiAJYmwJX19yZXN0b3JlX2NwdV9zZXR1cAogCisJLyogTWFrZSBzdXJlIGFsbCBGUFJzIGhhdmUgYmVlbiBpbml0aWFsaXplZCAqLworCWJsCXJlbG9jX29mZnNldAorCWJsCV9faW5pdF9mcHVfcmVnaXN0ZXJzCisKIAkvKiBJbnZhbGlkYXRlICYgZW5hYmxlIEwxIGNhY2hlLCB3ZSBkb24ndCBjYXJlIGFib3V0CiAJICogd2hhdGV2ZXIgdGhlIFJPTSBtYXkgaGF2ZSB0cmllZCB0byB3cml0ZSB0byBtZW1vcnkKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3NtcC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfc21wLmMKaW5kZXggNzMxODQxZi4uOGUwNDlkYSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfc21wLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfc21wLmMKQEAgLTkxLDExICs5MSwxMSBAQAogI2RlZmluZSBQU1VSR0VfUVVBRF9CSUMociwgdikJKFBTVVJHRV9RVUFEX09VVCgociksIFBTVVJHRV9RVUFEX0lOKHIpICYgfih2KSkpCiAKIC8qIHZpcnR1YWwgYWRkcmVzc2VzIGZvciB0aGUgYWJvdmUgKi8KLXN0YXRpYyB2b2xhdGlsZSB1OCAqaGhlYWRfYmFzZTsKLXN0YXRpYyB2b2xhdGlsZSB1OCAqcXVhZF9iYXNlOwotc3RhdGljIHZvbGF0aWxlIHUzMiAqcHN1cmdlX3ByaV9pbnRyOwotc3RhdGljIHZvbGF0aWxlIHU4ICpwc3VyZ2Vfc2VjX2ludHI7Ci1zdGF0aWMgdm9sYXRpbGUgdTMyICpwc3VyZ2Vfc3RhcnQ7CitzdGF0aWMgdm9sYXRpbGUgdTggX19pb21lbSAqaGhlYWRfYmFzZTsKK3N0YXRpYyB2b2xhdGlsZSB1OCBfX2lvbWVtICpxdWFkX2Jhc2U7CitzdGF0aWMgdm9sYXRpbGUgdTMyIF9faW9tZW0gKnBzdXJnZV9wcmlfaW50cjsKK3N0YXRpYyB2b2xhdGlsZSB1OCBfX2lvbWVtICpwc3VyZ2Vfc2VjX2ludHI7CitzdGF0aWMgdm9sYXRpbGUgdTMyIF9faW9tZW0gKnBzdXJnZV9zdGFydDsKIAogLyogdmFsdWVzIGZvciBwc3VyZ2VfdHlwZSAqLwogI2RlZmluZSBQU1VSR0VfTk9ORQkJLTEKQEAgLTMyMiwxMCArMzIyLDEwIEBACiAJCS8qIEFsbCByZWxlYXNlZCBjYXJkcyB1c2luZyB0aGlzIEhXIGRlc2lnbiBoYXZlIDQgQ1BVcyAqLwogCQluY3B1cyA9IDQ7CiAJfSBlbHNlIHsKLQkJaW91bm1hcCgodm9pZCAqKSBxdWFkX2Jhc2UpOworCQlpb3VubWFwKHF1YWRfYmFzZSk7CiAJCWlmICgoaW5fOChoaGVhZF9iYXNlICsgSEhFQURfQ09ORklHKSAmIDB4MDIpID09IDApIHsKIAkJCS8qIG5vdCBhIGR1YWwtY3B1IGNhcmQgKi8KLQkJCWlvdW5tYXAoKHZvaWQgKikgaGhlYWRfYmFzZSk7CisJCQlpb3VubWFwKGhoZWFkX2Jhc2UpOwogCQkJcHN1cmdlX3R5cGUgPSBQU1VSR0VfTk9ORTsKIAkJCXJldHVybiAxOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY190aW1lLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY190aW1lLmMKaW5kZXggMDk2MzY1NC4uZGU2MGNjYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfdGltZS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3RpbWUuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiB2aWFfY2FsaWJyYXRlX2RlY3Iodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnZpYXM7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqdmlhOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19pb21lbSAqdmlhOwogCWludCBjb3VudCA9IFZJQV9USU1FUl9GUkVRXzYgLyAxMDA7CiAJdW5zaWduZWQgaW50IGRzdGFydCwgZGVuZDsKIApAQCAtMTc2LDggKzE3Niw3IEBACiAJCXZpYXMgPSBmaW5kX2RldmljZXMoInZpYSIpOwogCWlmICh2aWFzID09IDAgfHwgdmlhcy0+bl9hZGRycyA9PSAwKQogCQlyZXR1cm4gMDsKLQl2aWEgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKQotCQlpb3JlbWFwKHZpYXMtPmFkZHJzWzBdLmFkZHJlc3MsIHZpYXMtPmFkZHJzWzBdLnNpemUpOworCXZpYSA9IGlvcmVtYXAodmlhcy0+YWRkcnNbMF0uYWRkcmVzcywgdmlhcy0+YWRkcnNbMF0uc2l6ZSk7CiAKIAkvKiBzZXQgdGltZXIgMSBmb3IgY29udGludW91cyBpbnRlcnJ1cHRzICovCiAJb3V0XzgoJnZpYVtBQ1JdLCAodmlhW0FDUl0gJiB+VDFNT0RFKSB8IFQxTU9ERV9DT05UKTsKQEAgLTIwMiw3ICsyMDEsNyBAQAogCXByaW50ayhLRVJOX0lORk8gInZpYV9jYWxpYnJhdGVfZGVjcjogdGlja3MgcGVyIGppZmZ5ID0gJXUgKCV1IHRpY2tzKVxuIiwKIAkgICAgICAgdGJfdGlja3NfcGVyX2ppZmZ5LCBkc3RhcnQgLSBkZW5kKTsKIAotCWlvdW5tYXAoKHZvaWQqKXZpYSk7CisJaW91bm1hcCh2aWEpOwogCQogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuYwppbmRleCAyYTk5YjQzLi5jMzA2MDdhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuYwpAQCAtNjgsNiArNjgsNyBAQAogI2RlZmluZSBQUEM3RF9SU1RfUElOCQkJMTcgCS8qIEdQUDE3ICovCiAKIGV4dGVybiB1MzIgbXY2NDM2MF9pcnFfYmFzZTsKK2V4dGVybiBzcGlubG9ja190IHJ0Y19sb2NrOwogCiBzdGF0aWMgc3RydWN0IG12NjR4NjBfaGFuZGxlIGJoOwogc3RhdGljIGludCBwcGM3ZF9oYXNfYWxtYTsKQEAgLTc1LDYgKzc2LDExIEBACiBleHRlcm4gdm9pZCBnZW41NTBfcHJvZ3Jlc3MoY2hhciAqLCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBnZW41NTBfaW5pdChpbnQsIHN0cnVjdCB1YXJ0X3BvcnQgKik7CiAKKy8qIEZJWE1FIC0gbW92ZSB0byBoIGZpbGUgKi8KK2V4dGVybiBpbnQgZHMxMzM3X2RvX2NvbW1hbmQoaW50IGlkLCBpbnQgY21kLCB2b2lkICphcmcpOworI2RlZmluZSBEUzEzMzdfR0VUX0RBVEUgICAgICAgICAwCisjZGVmaW5lIERTMTMzN19TRVRfREFURSAgICAgICAgIDEKKwogLyogcmVzaWR1YWwgZGF0YSAqLwogdW5zaWduZWQgY2hhciBfX3Jlc1tzaXplb2YoYmRfdCldOwogCkBAIC0yNTMsNiArMjU5LDggQEAKIAl1OCB2YWwxLCB2YWwyOwogCXN0YXRpYyBpbnQgZmxhc2hfc2l6ZXNbNF0gPSB7IDY0LCAzMiwgMCwgMTYgfTsKIAlzdGF0aWMgaW50IGZsYXNoX2JhbmtzWzRdID0geyA0LCAzLCAyLCAxIH07CisJc3RhdGljIGludCBzZHJhbV9iYW5rX3NpemVzWzRdID0geyAxMjgsIDI1NiwgNTEyLCAxIH07CisJaW50IHNkcmFtX251bV9iYW5rcyA9IDI7CiAJc3RhdGljIGNoYXIgKnBjaV9tb2Rlc1tdID0geyAiUENJMzMiLCAiUENJNjYiLAogCQkiVW5rbm93biIsICJVbmtub3duIiwKIAkJIlBDSVgzMyIsICJQQ0lYNjYiLApAQCAtMjc5LDEzICsyODcsMTcgQEAKIAkJICAgKHZhbDEgPT0gUFBDN0RfQ1BMRF9NQl9UWVBFX1BMTF8xMDApID8gMTAwIDoKIAkJICAgKHZhbDEgPT0gUFBDN0RfQ1BMRF9NQl9UWVBFX1BMTF82NCkgPyA2NCA6IDApOwogCisJdmFsID0gaW5iKFBQQzdEX0NQTERfTUVNX0NPTkZJRyk7CisJaWYgKHZhbCAmIFBQQzdEX0NQTERfU0RSQU1fQkFOS19OVU1fTUFTSykgc2RyYW1fbnVtX2JhbmtzLS07CisKIAl2YWwgPSBpbmIoUFBDN0RfQ1BMRF9NRU1fQ09ORklHX0VYVEVORCk7Ci0JdmFsMSA9IHZhbCAmIFBQQzdEX0NQTERfU0RSQU1fQkFOS19TSVpFX01BU0s7Ci0Jc2VxX3ByaW50ZihtLCAiU0RSQU1cdFx0OiAlZCVjIiwKLQkJICAgKHZhbDEgPT0gUFBDN0RfQ1BMRF9TRFJBTV9CQU5LX1NJWkVfMTI4TSkgPyAxMjggOgotCQkgICAodmFsMSA9PSBQUEM3RF9DUExEX1NEUkFNX0JBTktfU0laRV8yNTZNKSA/IDI1NiA6Ci0JCSAgICh2YWwxID09IFBQQzdEX0NQTERfU0RSQU1fQkFOS19TSVpFXzUxMk0pID8gNTEyIDogMSwKLQkJICAgKHZhbDEgPT0gUFBDN0RfQ1BMRF9TRFJBTV9CQU5LX1NJWkVfMUcpID8gJ0cnIDogJ00nKTsKKwl2YWwxID0gKHZhbCAmIFBQQzdEX0NQTERfU0RSQU1fQkFOS19TSVpFX01BU0spID4+IDY7CisJc2VxX3ByaW50ZihtLCAiU0RSQU1cdFx0OiAlZCBiYW5rcyBvZiAlZCVjLCB0b3RhbCAlZCVjIiwKKwkJICAgc2RyYW1fbnVtX2JhbmtzLAorCQkgICBzZHJhbV9iYW5rX3NpemVzW3ZhbDFdLAorCQkgICAoc2RyYW1fYmFua19zaXplc1t2YWwxXSA8IDEyOCkgPyAnRycgOiAnTScsCisJCSAgIHNkcmFtX251bV9iYW5rcyAqIHNkcmFtX2Jhbmtfc2l6ZXNbdmFsMV0sCisJCSAgIChzZHJhbV9iYW5rX3NpemVzW3ZhbDFdIDwgMTI4KSA/ICdHJyA6ICdNJyk7CiAJaWYgKHZhbDIgJiBQUEM3RF9DUExEX01CX1RZUEVfRUNDX0ZJVFRFRF9NQVNLKSB7CiAJCXNlcV9wcmludGYobSwgIiBbRUNDICVzYWJsZWRdIiwKIAkJCSAgICh2YWwyICYgUFBDN0RfQ1BMRF9NQl9UWVBFX0VDQ19FTkFCTEVfTUFTSykgPyAiZW4iIDoKQEAgLTEyMzYsNiArMTI0OCwzOCBAQAogCXByaW50ayhLRVJOX0lORk8gIlJhZHN0b25lIFRlY2hub2xvZ3kgUFBDN0RcbiIpOwogCWlmIChwcGNfbWQucHJvZ3Jlc3MpCiAJCXBwY19tZC5wcm9ncmVzcygicHBjN2Rfc2V0dXBfYXJjaDogZXhpdCIsIDApOworCit9CisKKy8qIFJlYWwgVGltZSBDbG9jayBzdXBwb3J0LgorICogUFBDN0QgaGFzIGEgRFMxMzM3IGFjY2Vzc2VkIGJ5IEkyQy4KKyAqLworc3RhdGljIHVsb25nIHBwYzdkX2dldF9ydGNfdGltZSh2b2lkKQoreworICAgICAgICBzdHJ1Y3QgcnRjX3RpbWUgdG07CisgICAgICAgIGludCByZXN1bHQ7CisKKyAgICAgICAgc3Bpbl9sb2NrKCZydGNfbG9jayk7CisgICAgICAgIHJlc3VsdCA9IGRzMTMzN19kb19jb21tYW5kKDAsIERTMTMzN19HRVRfREFURSwgJnRtKTsKKyAgICAgICAgc3Bpbl91bmxvY2soJnJ0Y19sb2NrKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IDApCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWt0aW1lKHRtLnRtX3llYXIsIHRtLnRtX21vbiwgdG0udG1fbWRheSwgdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgcHBjN2Rfc2V0X3J0Y190aW1lKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKK3sKKyAgICAgICAgc3RydWN0IHJ0Y190aW1lIHRtOworICAgICAgICBpbnQgcmVzdWx0OworCisgICAgICAgIHNwaW5fbG9jaygmcnRjX2xvY2spOworICAgICAgICB0b190bShub3d0aW1lLCAmdG0pOworICAgICAgICByZXN1bHQgPSBkczEzMzdfZG9fY29tbWFuZCgwLCBEUzEzMzdfU0VUX0RBVEUsICZ0bSk7CisgICAgICAgIHNwaW5fdW5sb2NrKCZydGNfbG9jayk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogVGhpcyBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBoYXZlIHRoZSB0YXJnZXQKQEAgLTEyOTMsNiArMTMzNywxMCBAQAogCWRhdGE4IHw9IDB4MDc7CiAJb3V0YihkYXRhOCwgUFBDN0RfQ1BMRF9MRURTKTsKIAorICAgICAgICAvKiBIb29rIHVwIFJUQy4gV2UgY291bGRuJ3QgZG8gdGhpcyBlYXJsaWVyIGJlY2F1c2Ugd2UgbmVlZCB0aGUgSTJDIHN1YnN5c3RlbSAqLworICAgICAgICBwcGNfbWQuc2V0X3J0Y190aW1lID0gcHBjN2Rfc2V0X3J0Y190aW1lOworICAgICAgICBwcGNfbWQuZ2V0X3J0Y190aW1lID0gcHBjN2RfZ2V0X3J0Y190aW1lOworCiAJcHJfZGVidWcoIiVzOiBleGl0XG4iLCBfX0ZVTkNUSU9OX18pOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5oCmluZGV4IDQ1NDZmZmYyLi45MzgzNzU1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuaApAQCAtMjQwLDYgKzI0MCw3IEBACiAjZGVmaW5lIFBQQzdEX0NQTERfRkxBU0hfQ05UTAkJCTB4MDg2RQogCiAvKiBNRU1PUllfQ09ORklHX0VYVEVORCAqLworI2RlZmluZSBQUEM3RF9DUExEX1NEUkFNX0JBTktfTlVNX01BU0sJCTB4MDIKICNkZWZpbmUgUFBDN0RfQ1BMRF9TRFJBTV9CQU5LX1NJWkVfTUFTSwkJMHhjMAogI2RlZmluZSBQUEM3RF9DUExEX1NEUkFNX0JBTktfU0laRV8xMjhNCQkwCiAjZGVmaW5lIFBQQzdEX0NQTERfU0RSQU1fQkFOS19TSVpFXzI1Nk0JCTB4NDAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9jcG0yX3BpYy5jIGIvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMKaW5kZXggOTU0YjA3Zi4uYzg2N2JlNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMKQEAgLTEwNyw2ICsxMDcsMTEgQEAKIAkJc2ltciA9ICYoY3BtMl9pbW1yLT5pbV9pbnRjdGwuaWNfc2ltcmgpOwogCQlwcGNfY2FjaGVkX2lycV9tYXNrW3dvcmRdIHw9IDEgPDwgYml0OwogCQlzaW1yW3dvcmRdID0gcHBjX2NhY2hlZF9pcnFfbWFza1t3b3JkXTsKKwkJLyoKKwkJICogV29yayBhcm91bmQgbGFyZ2UgbnVtYmVycyBvZiBzcHVyaW91cyBJUlFzIG9uIFBvd2VyUEMgODJ4eAorCQkgKiBzeXN0ZW1zLgorCQkgKi8KKwkJbWIoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tODI2MF9wY2kuYyBiL2FyY2gvcHBjL3N5c2xpYi9tODI2MF9wY2kuYwppbmRleCBiZDU2NGZiLi4wNTdjYzNmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbTgyNjBfcGNpLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL204MjYwX3BjaS5jCkBAIC0xNzEsMTAgKzE3MSw5IEBACiAJbTgyNjBfc2V0dXBfcGNpKGhvc2UpOwogICAgICAgICBob3NlLT5wY2lfbWVtX29mZnNldCA9IE1QQzgyNnhfUENJX01FTV9PRkZTRVQ7CiAKLSAgICAgICAgaXNhX2lvX2Jhc2UgPQotICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwKE1QQzgyNnhfUENJX0lPX0JBU0UsCisgICAgICAgIGhvc2UtPmlvX2Jhc2VfdmlydCA9IGlvcmVtYXAoTVBDODI2eF9QQ0lfSU9fQkFTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUEM4MjZ4X1BDSV9JT19TSVpFKTsKLSAgICAgICAgaG9zZS0+aW9fYmFzZV92aXJ0ID0gKHZvaWQgKikgaXNhX2lvX2Jhc2U7CisgICAgICAgIGlzYV9pb19iYXNlID0gKHVuc2lnbmVkIGxvbmcpIGhvc2UtPmlvX2Jhc2VfdmlydDsKICAKICAgICAgICAgLyogc2V0dXAgcmVzb3VyY2VzICovCiAgICAgICAgIHBjaV9pbml0X3Jlc291cmNlKCZob3NlLT5tZW1fcmVzb3VyY2VzWzBdLApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfcGNpLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9wY2kuYwppbmRleCBjNzIzZWZkLi41OWNmM2U4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9wY2kuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9wY2kuYwpAQCAtMjA1LDEzICsyMDUsMTEgQEAKIAogCWhvc2UtPnBjaV9tZW1fb2Zmc2V0ID0gTVBDNTJ4eF9QQ0lfTUVNX09GRlNFVDsKIAotCWlzYV9pb19iYXNlID0KLQkJKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAoTVBDNTJ4eF9QQ0lfSU9fQkFTRSwKLQkJCQkJTVBDNTJ4eF9QQ0lfSU9fU0laRSk7Ci0JaG9zZS0+aW9fYmFzZV92aXJ0ID0gKHZvaWQgKikgaXNhX2lvX2Jhc2U7CisJaG9zZS0+aW9fYmFzZV92aXJ0ID0gaW9yZW1hcChNUEM1Mnh4X1BDSV9JT19CQVNFLCBNUEM1Mnh4X1BDSV9JT19TSVpFKTsKKwlpc2FfaW9fYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBob3NlLT5pb19iYXNlX3ZpcnQ7CiAKIAlob3NlLT5jZmdfYWRkciA9ICZwY2lfcmVncy0+Y2FyOwotCWhvc2UtPmNmZ19kYXRhID0gKHZvaWQgX19pb21lbSAqKSBpc2FfaW9fYmFzZTsKKwlob3NlLT5jZmdfZGF0YSA9IGhvc2UtPmlvX2Jhc2VfdmlydDsKIAogCS8qIFNldHVwIHJlc291cmNlcyAqLwogCXBjaV9pbml0X3Jlc291cmNlKCZob3NlLT5tZW1fcmVzb3VyY2VzWzBdLApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfc2V0dXAuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3NldHVwLmMKaW5kZXggODFmMTk2OC4uMTUyYzNlZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfc2V0dXAuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9zZXR1cC5jCkBAIC0yODAsMTYgKzI4MCwxNCBAQAogCWhvc2VfYS0+aW9fc3BhY2UuZW5kID0gTVBDODVYWF9QQ0kxX1VQUEVSX0lPOwogCWhvc2VfYS0+aW9fYmFzZV9waHlzID0gTVBDODVYWF9QQ0kxX0lPX0JBU0U7CiAjaWZkZWYgQ09ORklHXzg1eHhfUENJMgotCWlzYV9pb19iYXNlID0KLQkJKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAoTVBDODVYWF9QQ0kxX0lPX0JBU0UsCisJaG9zZV9hLT5pb19iYXNlX3ZpcnQgPSAgaW9yZW1hcChNUEM4NVhYX1BDSTFfSU9fQkFTRSwKIAkJCQkJTVBDODVYWF9QQ0kxX0lPX1NJWkUgKwogCQkJCQlNUEM4NVhYX1BDSTJfSU9fU0laRSk7CiAjZWxzZQotCWlzYV9pb19iYXNlID0KLQkJKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAoTVBDODVYWF9QQ0kxX0lPX0JBU0UsCisJaG9zZV9hLT5pb19iYXNlX3ZpcnQgPSAgaW9yZW1hcChNUEM4NVhYX1BDSTFfSU9fQkFTRSwKIAkJCQkJTVBDODVYWF9QQ0kxX0lPX1NJWkUpOwogI2VuZGlmCi0JaG9zZV9hLT5pb19iYXNlX3ZpcnQgPSAodm9pZCAqKSBpc2FfaW9fYmFzZTsKKwlpc2FfaW9fYmFzZSA9ICh1bnNpZ25lZCBsb25nKWhvc2VfYS0+aW9fYmFzZV92aXJ0OwogCiAJLyogc2V0dXAgcmVzb3VyY2VzICovCiAJcGNpX2luaXRfcmVzb3VyY2UoJmhvc2VfYS0+bWVtX3Jlc291cmNlc1swXSwKQEAgLTMyOSw4ICszMjcsOCBAQAogCWhvc2VfYi0+aW9fc3BhY2Uuc3RhcnQgPSBNUEM4NVhYX1BDSTJfTE9XRVJfSU87CiAJaG9zZV9iLT5pb19zcGFjZS5lbmQgPSBNUEM4NVhYX1BDSTJfVVBQRVJfSU87CiAJaG9zZV9iLT5pb19iYXNlX3BoeXMgPSBNUEM4NVhYX1BDSTJfSU9fQkFTRTsKLQlob3NlX2ItPmlvX2Jhc2VfdmlydCA9ICh2b2lkICopIGlzYV9pb19iYXNlICsgTVBDODVYWF9QQ0kxX0lPX1NJWkU7Ci0KKwlob3NlX2ItPmlvX2Jhc2VfdmlydCA9IGhvc2VfYS0+aW9fYmFzZV92aXJ0ICsgTVBDODVYWF9QQ0kxX0lPX1NJWkU7CisJCiAJLyogc2V0dXAgcmVzb3VyY2VzICovCiAJcGNpX2luaXRfcmVzb3VyY2UoJmhvc2VfYi0+bWVtX3Jlc291cmNlc1swXSwKIAkJCU1QQzg1WFhfUENJMl9MT1dFUl9NRU0sCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L0tjb25maWcgYi9hcmNoL3BwYzY0L0tjb25maWcKaW5kZXggZWYxZjA1ZS4uMjU3ZmY2NiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9LY29uZmlnCisrKyBiL2FyY2gvcHBjNjQvS2NvbmZpZwpAQCAtNDAsNiArNDAsMTAgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBTQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVIKKwlib29sCisJZGVmYXVsdCB5CisKICMgV2Ugb3B0aW1pc3RpY2FsbHkgYWxsb2NhdGUgbGFyZ2VwYWdlcyBmcm9tIHRoZSBWTSwgc28gbWFrZSB0aGUgbGltaXQKICMgbGFyZ2UgZW5vdWdoICgxNk1CKS4gVGhpcyBiYWRseSBuYW1lZCBjb25maWcgb3B0aW9uIGlzIGFjdHVhbGx5CiAjIG1heCBvcmRlciArIDEKQEAgLTI5Myw2ICsyOTcsOSBAQAogCiBlbmRtZW51CiAKK2NvbmZpZyBJU0FfRE1BX0FQSQorCWJvb2wKKwlkZWZhdWx0IHkKIAogbWVudSAiR2VuZXJhbCBzZXR1cCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9LY29uZmlnLmRlYnVnIGIvYXJjaC9wcGM2NC9LY29uZmlnLmRlYnVnCmluZGV4IGUzNDFhMTIuLjQ2YjFjZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3BwYzY0L0tjb25maWcuZGVidWcKQEAgLTUsNiArNSw5IEBACiBjb25maWcgREVCVUdfU1RBQ0tPVkVSRkxPVwogCWJvb2wgIkNoZWNrIGZvciBzdGFjayBvdmVyZmxvd3MiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwloZWxwCisJICBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIG1lc3NhZ2VzIHRvIGJlIHByaW50ZWQgaWYgZnJlZSBzdGFjayBzcGFjZQorCSAgZHJvcHMgYmVsb3cgYSBjZXJ0YWluIGxpbWl0LgogCiBjb25maWcgS1BST0JFUwogCWJvb2wgIktwcm9iZXMiCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L01ha2VmaWxlIGIvYXJjaC9wcGM2NC9NYWtlZmlsZQppbmRleCBkMzNlMjBiLi42OTFmMzAwIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L01ha2VmaWxlCisrKyBiL2FyY2gvcHBjNjQvTWFrZWZpbGUKQEAgLTU2LDEzICs1NiwyMCBAQAogQ0ZMQUdTCQkrPSAtbXNvZnQtZmxvYXQgLXBpcGUgLW1taW5pbWFsLXRvYyAtbXRyYWNlYmFjaz1ub25lIFwKIAkJICAgLW1jYWxsLWFpeGRlc2MKIAorR0NDX1ZFUlNJT04gICAgIDo9ICQoY2FsbCBjYy12ZXJzaW9uKQorR0NDX0JST0tFTl9WRUMJOj0gJChzaGVsbCBpZiBbICQoR0NDX1ZFUlNJT04pIC1sdCAwNDAwIF0gOyB0aGVuIGVjaG8gInkiOyBmaSA7KQorCiBpZmVxICgkKENPTkZJR19QT1dFUjRfT05MWSkseSkKIGlmZXEgKCQoQ09ORklHX0FMVElWRUMpLHkpCitpZmVxICgkKEdDQ19CUk9LRU5fVkVDKSx5KQogCUNGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tY3B1PTk3MCkKIGVsc2UKIAlDRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWNwdT1wb3dlcjQpCiBlbmRpZgogZWxzZQorCUNGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tY3B1PXBvd2VyNCkKK2VuZGlmCitlbHNlCiAJQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLW10dW5lPXBvd2VyNCkKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvYm9vdC9hZGRub3RlLmMgYi9hcmNoL3BwYzY0L2Jvb3QvYWRkbm90ZS5jCmluZGV4IDY2ZmY4MTAuLjcxOTY2M2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvYm9vdC9hZGRub3RlLmMKKysrIGIvYXJjaC9wcGM2NC9ib290L2FkZG5vdGUuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCisvKiBDSFJQIG5vdGUgc2VjdGlvbiAqLwogY2hhciBhcmNoW10gPSAiUG93ZXJQQyI7CiAKICNkZWZpbmUgTl9ERVNDUgk2CkBAIC0zMSw2ICszMiwyOSBAQAogCTB4NDAwMCwJCQkvKiBsb2FkLWJhc2UgKi8KIH07CiAKKy8qIFJQQSBub3RlIHNlY3Rpb24gKi8KK2NoYXIgcnBhbmFtZVtdID0gIklCTSxSUEEtQ2xpZW50LUNvbmZpZyI7CisKKy8qCisgKiBOb3RlOiBzZXR0aW5nIGlnbm9yZV9teV9jbGllbnRfY29uZmlnICpzaG91bGQqIG1lYW4gdGhhdCBPRiBpZ25vcmVzCisgKiBhbGwgdGhlIG90aGVyIGZpZWxkcywgYnV0IHRoZXJlIGlzIGEgZmlybXdhcmUgYnVnIHdoaWNoIG1lYW5zIHRoYXQKKyAqIGl0IGxvb2tzIGF0IHRoZSBzcGxwYXIgZmllbGQgYXQgbGVhc3QuICBTbyB0aGVzZSB2YWx1ZXMgbmVlZCB0byBiZQorICogcmVhc29uYWJsZS4KKyAqLworI2RlZmluZSBOX1JQQV9ERVNDUgk4Cit1bnNpZ25lZCBpbnQgcnBhbm90ZVtOX1JQQV9ERVNDUl0gPSB7CisJMCwJCQkvKiBscGFyYWZmaW5pdHkgKi8KKwk2NCwJCQkvKiBtaW5fcm1vX3NpemUgKi8KKwkwLAkJCS8qIG1pbl9ybW9fcGVyY2VudCAqLworCTQwLAkJCS8qIG1heF9wZnRfc2l6ZSAqLworCTEsCQkJLyogc3BscGFyICovCisJLTEsCQkJLyogbWluX2xvYWQgKi8KKwkwLAkJCS8qIG5ld19tZW1fZGVmICovCisJMSwJCQkvKiBpZ25vcmVfbXlfY2xpZW50X2NvbmZpZyAqLworfTsKKworI2RlZmluZSBST1VORFVQKGxlbikJKCgobGVuKSArIDMpICYgfjMpCisKIHVuc2lnbmVkIGNoYXIgYnVmWzUxMl07CiAKICNkZWZpbmUgR0VUXzE2QkUob2ZmKQkoKGJ1ZltvZmZdIDw8IDgpICsgKGJ1Zlsob2ZmKSsxXSkpCkBAIC02OSw3ICs5Myw3IEBACiB7CiAJaW50IGZkLCBuLCBpOwogCWludCBwaCwgcHMsIG5wOwotCWludCBubm90ZSwgbnM7CisJaW50IG5ub3RlLCBubm90ZTIsIG5zOwogCiAJaWYgKGFjICE9IDIpIHsKIAkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZWxmLWZpbGVcbiIsIGF2WzBdKTsKQEAgLTgxLDcgKzEwNSw4IEBACiAJCWV4aXQoMSk7CiAJfQogCi0Jbm5vdGUgPSBzdHJsZW4oYXJjaCkgKyAxICsgKE5fREVTQ1IgKyAzKSAqIDQ7CisJbm5vdGUgPSAxMiArIFJPVU5EVVAoc3RybGVuKGFyY2gpICsgMSkgKyBzaXplb2YoZGVzY3IpOworCW5ub3RlMiA9IDEyICsgUk9VTkRVUChzdHJsZW4ocnBhbmFtZSkgKyAxKSArIHNpemVvZihycGFub3RlKTsKIAogCW4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKTsKIAlpZiAobiA8IDApIHsKQEAgLTEwNCw3ICsxMjksNyBAQAogCW5wID0gR0VUXzE2QkUoRV9QSE5VTSk7CiAJaWYgKHBoIDwgRV9IU0laRSB8fCBwcyA8IFBIX0hTSVpFIHx8IG5wIDwgMSkKIAkJZ290byBub3RlbGY7Ci0JaWYgKHBoICsgKG5wICsgMSkgKiBwcyArIG5ub3RlID4gbikKKwlpZiAocGggKyAobnAgKyAyKSAqIHBzICsgbm5vdGUgKyBubm90ZTIgPiBuKQogCQlnb3RvIG5vc3BhY2U7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnA7ICsraSkgewpAQCAtMTE3LDEyICsxNDIsMTIgQEAKIAl9CiAKIAkvKiBYWFggY2hlY2sgdGhhdCB0aGUgYXJlYSB3ZSB3YW50IHRvIHVzZSBpcyBhbGwgemVyb2VzICovCi0JZm9yIChpID0gMDsgaSA8IHBzICsgbm5vdGU7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDwgMiAqIHBzICsgbm5vdGUgKyBubm90ZTI7ICsraSkKIAkJaWYgKGJ1ZltwaCArIGldICE9IDApCiAJCQlnb3RvIG5vc3BhY2U7CiAKIAkvKiBmaWxsIGluIHRoZSBwcm9ncmFtIGhlYWRlciBlbnRyeSAqLwotCW5zID0gcGggKyBwczsKKwlucyA9IHBoICsgMiAqIHBzOwogCVBVVF8zMkJFKHBoICsgUEhfVFlQRSwgUFRfTk9URSk7CiAJUFVUXzMyQkUocGggKyBQSF9PRkZTRVQsIG5zKTsKIAlQVVRfMzJCRShwaCArIFBIX0ZJTEVTWiwgbm5vdGUpOwpAQCAtMTM0LDExICsxNTksMjYgQEAKIAlQVVRfMzJCRShucyArIDgsIDB4MTI3NSk7CiAJc3RyY3B5KCZidWZbbnMgKyAxMl0sIGFyY2gpOwogCW5zICs9IDEyICsgc3RybGVuKGFyY2gpICsgMTsKLQlmb3IgKGkgPSAwOyBpIDwgTl9ERVNDUjsgKytpKQotCQlQVVRfMzJCRShucyArIGkgKiA0LCBkZXNjcltpXSk7CisJZm9yIChpID0gMDsgaSA8IE5fREVTQ1I7ICsraSwgbnMgKz0gNCkKKwkJUFVUXzMyQkUobnMsIGRlc2NyW2ldKTsKKworCS8qIGZpbGwgaW4gdGhlIHNlY29uZCBwcm9ncmFtIGhlYWRlciBlbnRyeSBhbmQgdGhlIFJQQSBub3RlIGFyZWEgKi8KKwlwaCArPSBwczsKKwlQVVRfMzJCRShwaCArIFBIX1RZUEUsIFBUX05PVEUpOworCVBVVF8zMkJFKHBoICsgUEhfT0ZGU0VULCBucyk7CisJUFVUXzMyQkUocGggKyBQSF9GSUxFU1osIG5ub3RlMik7CisKKwkvKiBmaWxsIGluIHRoZSBub3RlIGFyZWEgd2UgcG9pbnQgdG8gKi8KKwlQVVRfMzJCRShucywgc3RybGVuKHJwYW5hbWUpICsgMSk7CisJUFVUXzMyQkUobnMgKyA0LCBzaXplb2YocnBhbm90ZSkpOworCVBVVF8zMkJFKG5zICsgOCwgMHgxMjc1OTk5OSk7CisJc3RyY3B5KCZidWZbbnMgKyAxMl0sIHJwYW5hbWUpOworCW5zICs9IDEyICsgUk9VTkRVUChzdHJsZW4ocnBhbmFtZSkgKyAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgTl9SUEFfREVTQ1I7ICsraSwgbnMgKz0gNCkKKwkJUFVUXzMyQkUobnMsIHJwYW5vdGVbaV0pOwogCiAJLyogVXBkYXRlIHRoZSBudW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXJzICovCi0JUFVUXzE2QkUoRV9QSE5VTSwgbnAgKyAxKTsKKwlQVVRfMTZCRShFX1BITlVNLCBucCArIDIpOwogCiAJLyogd3JpdGUgYmFjayAqLwogCWxzZWVrKGZkLCAobG9uZykgMCwgU0VFS19TRVQpOwpAQCAtMTU1LDExICsxOTUsMTEgQEAKIAlleGl0KDApOwogCiAgbm90ZWxmOgotCWZwcmludGYoc3RkZXJyLCAiJXMgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGFuIEVMRiBmaWxlXG4iLCBhdlswXSk7CisJZnByaW50ZihzdGRlcnIsICIlcyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYW4gRUxGIGZpbGVcbiIsIGF2WzFdKTsKIAlleGl0KDEpOwogCiAgbm9zcGFjZToKIAlmcHJpbnRmKHN0ZGVyciwgInNvcnJ5LCBJIGNhbid0IGZpbmQgc3BhY2UgaW4gJXMgdG8gcHV0IHRoZSBub3RlXG4iLAotCQlhdlswXSk7CisJCWF2WzFdKTsKIAlleGl0KDEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9ib290L21haW4uYyBiL2FyY2gvcHBjNjQvYm9vdC9tYWluLmMKaW5kZXggYjBmYTg2YS4uZGExMmVhMiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9ib290L21haW4uYworKysgYi9hcmNoL3BwYzY0L2Jvb3QvbWFpbi5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAKIGV4dGVybiB2b2lkICpmaW5kZGV2aWNlKGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IGdldHByb3Aodm9pZCAqLCBjb25zdCBjaGFyICosIHZvaWQgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvYm9vdC9zdGFydC5jIGIvYXJjaC9wcGM2NC9ib290L3N0YXJ0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMjQ3ZTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9wcGM2NC9ib290L3N0YXJ0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUGF1bCBNYWNrZXJyYXMgMTk5Ny4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotCi0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0KLWludCAoKnByb20pKHZvaWQgKik7Ci0KLXZvaWQgKmNob3Nlbl9oYW5kbGU7Ci12b2lkICpzdGRpbjsKLXZvaWQgKnN0ZG91dDsKLXZvaWQgKnN0ZGVycjsKLQotdm9pZCBleGl0KHZvaWQpOwotdm9pZCAqZmluZGRldmljZShjb25zdCBjaGFyICpuYW1lKTsKLWludCBnZXRwcm9wKHZvaWQgKnBoYW5kbGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZiwgaW50IGJ1Zmxlbik7Ci12b2lkIGNocnBib290KGludCBhMSwgaW50IGEyLCB2b2lkICpwcm9tKTsJLyogaW4gbWFpbi5jICovCi0KLXZvaWQgcHJpbnRrKGNoYXIgKmZtdCwgLi4uKTsKLQotdm9pZAotc3RhcnQoaW50IGExLCBpbnQgYTIsIHZvaWQgKnByb21wdHIpCi17Ci0JcHJvbSA9IChpbnQgKCopKHZvaWQgKikpIHByb21wdHI7Ci0JY2hvc2VuX2hhbmRsZSA9IGZpbmRkZXZpY2UoIi9jaG9zZW4iKTsKLQlpZiAoY2hvc2VuX2hhbmRsZSA9PSAodm9pZCAqKSAtMSkKLQkJZXhpdCgpOwotCWlmIChnZXRwcm9wKGNob3Nlbl9oYW5kbGUsICJzdGRvdXQiLCAmc3Rkb3V0LCBzaXplb2Yoc3Rkb3V0KSkgIT0gNCkKLQkJZXhpdCgpOwotCXN0ZGVyciA9IHN0ZG91dDsKLQlpZiAoZ2V0cHJvcChjaG9zZW5faGFuZGxlLCAic3RkaW4iLCAmc3RkaW4sIHNpemVvZihzdGRpbikpICE9IDQpCi0JZXhpdCgpOwotCi0JY2hycGJvb3QoYTEsIGEyLCBwcm9tcHRyKTsKLQlmb3IgKDs7KQotCQlleGl0KCk7Ci19Ci0KLWludAotd3JpdGUodm9pZCAqaGFuZGxlLCB2b2lkICpwdHIsIGludCBuYikKLXsKLQlzdHJ1Y3QgcHJvbV9hcmdzIHsKLQkJY2hhciAqc2VydmljZTsKLQkJaW50IG5hcmdzOwotCQlpbnQgbnJldDsKLQkJdm9pZCAqaWhhbmRsZTsKLQkJdm9pZCAqYWRkcjsKLQkJaW50IGxlbjsKLQkJaW50IGFjdHVhbDsKLQl9IGFyZ3M7Ci0KLQlhcmdzLnNlcnZpY2UgPSAid3JpdGUiOwotCWFyZ3MubmFyZ3MgPSAzOwotCWFyZ3MubnJldCA9IDE7Ci0JYXJncy5paGFuZGxlID0gaGFuZGxlOwotCWFyZ3MuYWRkciA9IHB0cjsKLQlhcmdzLmxlbiA9IG5iOwotCWFyZ3MuYWN0dWFsID0gLTE7Ci0JKCpwcm9tKSgmYXJncyk7Ci0JcmV0dXJuIGFyZ3MuYWN0dWFsOwotfQotCi1pbnQKLXJlYWQodm9pZCAqaGFuZGxlLCB2b2lkICpwdHIsIGludCBuYikKLXsKLQlzdHJ1Y3QgcHJvbV9hcmdzIHsKLQkJY2hhciAqc2VydmljZTsKLQkJaW50IG5hcmdzOwotCQlpbnQgbnJldDsKLQkJdm9pZCAqaWhhbmRsZTsKLQkJdm9pZCAqYWRkcjsKLQkJaW50IGxlbjsKLQkJaW50IGFjdHVhbDsKLQl9IGFyZ3M7Ci0KLQlhcmdzLnNlcnZpY2UgPSAicmVhZCI7Ci0JYXJncy5uYXJncyA9IDM7Ci0JYXJncy5ucmV0ID0gMTsKLQlhcmdzLmloYW5kbGUgPSBoYW5kbGU7Ci0JYXJncy5hZGRyID0gcHRyOwotCWFyZ3MubGVuID0gbmI7Ci0JYXJncy5hY3R1YWwgPSAtMTsKLQkoKnByb20pKCZhcmdzKTsKLQlyZXR1cm4gYXJncy5hY3R1YWw7Ci19Ci0KLXZvaWQKLWV4aXQoKQotewotCXN0cnVjdCBwcm9tX2FyZ3MgewotCQljaGFyICpzZXJ2aWNlOwotCX0gYXJnczsKLQotCWZvciAoOzspIHsKLQkJYXJncy5zZXJ2aWNlID0gImV4aXQiOwotCQkoKnByb20pKCZhcmdzKTsKLQl9Ci19Ci0KLXZvaWQKLXBhdXNlKHZvaWQpCi17Ci0Jc3RydWN0IHByb21fYXJncyB7Ci0JCWNoYXIgKnNlcnZpY2U7Ci0JfSBhcmdzOwotCi0JYXJncy5zZXJ2aWNlID0gImVudGVyIjsKLQkoKnByb20pKCZhcmdzKTsKLX0KLQotdm9pZCAqCi1maW5kZGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHByb21fYXJncyB7Ci0JCWNoYXIgKnNlcnZpY2U7Ci0JCWludCBuYXJnczsKLQkJaW50IG5yZXQ7Ci0JCWNvbnN0IGNoYXIgKmRldnNwZWM7Ci0JCXZvaWQgKnBoYW5kbGU7Ci0JfSBhcmdzOwotCi0JYXJncy5zZXJ2aWNlID0gImZpbmRkZXZpY2UiOwotCWFyZ3MubmFyZ3MgPSAxOwotCWFyZ3MubnJldCA9IDE7Ci0JYXJncy5kZXZzcGVjID0gbmFtZTsKLQlhcmdzLnBoYW5kbGUgPSAodm9pZCAqKSAtMTsKLQkoKnByb20pKCZhcmdzKTsKLQlyZXR1cm4gYXJncy5waGFuZGxlOwotfQotCi12b2lkICoKLWNsYWltKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKQotewotCXN0cnVjdCBwcm9tX2FyZ3MgewotCQljaGFyICpzZXJ2aWNlOwotCQlpbnQgbmFyZ3M7Ci0JCWludCBucmV0OwotCQl1bnNpZ25lZCBpbnQgdmlydDsKLQkJdW5zaWduZWQgaW50IHNpemU7Ci0JCXVuc2lnbmVkIGludCBhbGlnbjsKLQkJdm9pZCAqcmV0OwotCX0gYXJnczsKLQotCWFyZ3Muc2VydmljZSA9ICJjbGFpbSI7Ci0JYXJncy5uYXJncyA9IDM7Ci0JYXJncy5ucmV0ID0gMTsKLQlhcmdzLnZpcnQgPSB2aXJ0OwotCWFyZ3Muc2l6ZSA9IHNpemU7Ci0JYXJncy5hbGlnbiA9IGFsaWduOwotCSgqcHJvbSkoJmFyZ3MpOwotCXJldHVybiBhcmdzLnJldDsKLX0KLQotaW50Ci1nZXRwcm9wKHZvaWQgKnBoYW5kbGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZiwgaW50IGJ1ZmxlbikKLXsKLQlzdHJ1Y3QgcHJvbV9hcmdzIHsKLQkJY2hhciAqc2VydmljZTsKLQkJaW50IG5hcmdzOwotCQlpbnQgbnJldDsKLQkJdm9pZCAqcGhhbmRsZTsKLQkJY29uc3QgY2hhciAqbmFtZTsKLQkJdm9pZCAqYnVmOwotCQlpbnQgYnVmbGVuOwotCQlpbnQgc2l6ZTsKLQl9IGFyZ3M7Ci0KLQlhcmdzLnNlcnZpY2UgPSAiZ2V0cHJvcCI7Ci0JYXJncy5uYXJncyA9IDQ7Ci0JYXJncy5ucmV0ID0gMTsKLQlhcmdzLnBoYW5kbGUgPSBwaGFuZGxlOwotCWFyZ3MubmFtZSA9IG5hbWU7Ci0JYXJncy5idWYgPSBidWY7Ci0JYXJncy5idWZsZW4gPSBidWZsZW47Ci0JYXJncy5zaXplID0gLTE7Ci0JKCpwcm9tKSgmYXJncyk7Ci0JcmV0dXJuIGFyZ3Muc2l6ZTsKLX0KLQotaW50Ci1wdXRjKGludCBjLCB2b2lkICpmKQotewotCWNoYXIgY2ggPSBjOwotCi0JaWYgKGMgPT0gJ1xuJykKLQkJcHV0YygnXHInLCBmKTsKLQlyZXR1cm4gd3JpdGUoZiwgJmNoLCAxKSA9PSAxPyBjOiAtMTsKLX0KLQotaW50Ci1wdXRjaGFyKGludCBjKQotewotCXJldHVybiBwdXRjKGMsIHN0ZG91dCk7Ci19Ci0KLWludAotZnB1dHMoY2hhciAqc3RyLCB2b2lkICpmKQotewotCWludCBuID0gc3RybGVuKHN0cik7Ci0KLQlyZXR1cm4gd3JpdGUoZiwgc3RyLCBuKSA9PSBuPyAwOiAtMTsKLX0KLQotaW50Ci1yZWFkY2hhcih2b2lkKQotewotCWNoYXIgY2g7Ci0KLQlmb3IgKDs7KSB7Ci0JCXN3aXRjaCAocmVhZChzdGRpbiwgJmNoLCAxKSkgewotCQljYXNlIDE6Ci0JCQlyZXR1cm4gY2g7Ci0JCWNhc2UgLTE6Ci0JCQlwcmludGsoInJlYWQoc3RkaW4pIHJldHVybmVkIC0xXHJcbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgY2hhciBsaW5lWzI1Nl07Ci1zdGF0aWMgY2hhciAqbGluZXB0cjsKLXN0YXRpYyBpbnQgbGluZWxlZnQ7Ci0KLWludAotZ2V0Y2hhcih2b2lkKQotewotCWludCBjOwotCi0JaWYgKGxpbmVsZWZ0ID09IDApIHsKLQkJbGluZXB0ciA9IGxpbmU7Ci0JCWZvciAoOzspIHsKLQkJCWMgPSByZWFkY2hhcigpOwotCQkJaWYgKGMgPT0gLTEgfHwgYyA9PSA0KQotCQkJCWJyZWFrOwotCQkJaWYgKGMgPT0gJ1xyJyB8fCBjID09ICdcbicpIHsKLQkJCQkqbGluZXB0cisrID0gJ1xuJzsKLQkJCQlwdXRjaGFyKCdcbicpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3dpdGNoIChjKSB7Ci0JCQljYXNlIDAxNzc6Ci0JCQljYXNlICdcYic6Ci0JCQkJaWYgKGxpbmVwdHIgPiBsaW5lKSB7Ci0JCQkJCXB1dGNoYXIoJ1xiJyk7Ci0JCQkJCXB1dGNoYXIoJyAnKTsKLQkJCQkJcHV0Y2hhcignXGInKTsKLQkJCQkJLS1saW5lcHRyOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgJ1UnICYgMHgxRjoKLQkJCQl3aGlsZSAobGluZXB0ciA+IGxpbmUpIHsKLQkJCQkJcHV0Y2hhcignXGInKTsKLQkJCQkJcHV0Y2hhcignICcpOwotCQkJCQlwdXRjaGFyKCdcYicpOwotCQkJCQktLWxpbmVwdHI7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlpZiAobGluZXB0ciA+PSAmbGluZVtzaXplb2YobGluZSkgLSAxXSkKLQkJCQkJcHV0Y2hhcignXGEnKTsKLQkJCQllbHNlIHsKLQkJCQkJcHV0Y2hhcihjKTsKLQkJCQkJKmxpbmVwdHIrKyA9IGM7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWxpbmVsZWZ0ID0gbGluZXB0ciAtIGxpbmU7Ci0JCWxpbmVwdHIgPSBsaW5lOwotCX0KLQlpZiAobGluZWxlZnQgPT0gMCkKLQkJcmV0dXJuIC0xOwotCS0tbGluZWxlZnQ7Ci0JcmV0dXJuICpsaW5lcHRyKys7Ci19Ci0KLQotCi0vKiBTdHJpbmcgZnVuY3Rpb25zIGxpZnRlZCBmcm9tIGxpYi92c3ByaW50Zi5jIGFuZCBsaWIvY3R5cGUuYyAqLwotdW5zaWduZWQgY2hhciBfY3R5cGVbXSA9IHsKLV9DLF9DLF9DLF9DLF9DLF9DLF9DLF9DLAkJCS8qIDAtNyAqLwotX0MsX0N8X1MsX0N8X1MsX0N8X1MsX0N8X1MsX0N8X1MsX0MsX0MsCQkvKiA4LTE1ICovCi1fQyxfQyxfQyxfQyxfQyxfQyxfQyxfQywJCQkvKiAxNi0yMyAqLwotX0MsX0MsX0MsX0MsX0MsX0MsX0MsX0MsCQkJLyogMjQtMzEgKi8KLV9TfF9TUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCwJCQkvKiAzMi0zOSAqLwotX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsCQkJLyogNDAtNDcgKi8KLV9ELF9ELF9ELF9ELF9ELF9ELF9ELF9ELAkJCS8qIDQ4LTU1ICovCi1fRCxfRCxfUCxfUCxfUCxfUCxfUCxfUCwJCQkvKiA1Ni02MyAqLwotX1AsX1V8X1gsX1V8X1gsX1V8X1gsX1V8X1gsX1V8X1gsX1V8X1gsX1UsCS8qIDY0LTcxICovCi1fVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSwJCQkvKiA3Mi03OSAqLwotX1UsX1UsX1UsX1UsX1UsX1UsX1UsX1UsCQkJLyogODAtODcgKi8KLV9VLF9VLF9VLF9QLF9QLF9QLF9QLF9QLAkJCS8qIDg4LTk1ICovCi1fUCxfTHxfWCxfTHxfWCxfTHxfWCxfTHxfWCxfTHxfWCxfTHxfWCxfTCwJLyogOTYtMTAzICovCi1fTCxfTCxfTCxfTCxfTCxfTCxfTCxfTCwJCQkvKiAxMDQtMTExICovCi1fTCxfTCxfTCxfTCxfTCxfTCxfTCxfTCwJCQkvKiAxMTItMTE5ICovCi1fTCxfTCxfTCxfUCxfUCxfUCxfUCxfQywJCQkvKiAxMjAtMTI3ICovCi0wLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAkJLyogMTI4LTE0MyAqLwotMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwJCS8qIDE0NC0xNTkgKi8KLV9TfF9TUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCwgICAvKiAxNjAtMTc1ICovCi1fUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCwgICAgICAgLyogMTc2LTE5MSAqLwotX1UsX1UsX1UsX1UsX1UsX1UsX1UsX1UsX1UsX1UsX1UsX1UsX1UsX1UsX1UsX1UsICAgICAgIC8qIDE5Mi0yMDcgKi8KLV9VLF9VLF9VLF9VLF9VLF9VLF9VLF9QLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9MLCAgICAgICAvKiAyMDgtMjIzICovCi1fTCxfTCxfTCxfTCxfTCxfTCxfTCxfTCxfTCxfTCxfTCxfTCxfTCxfTCxfTCxfTCwgICAgICAgLyogMjI0LTIzOSAqLwotX0wsX0wsX0wsX0wsX0wsX0wsX0wsX1AsX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0x9OyAgICAgIC8qIDI0MC0yNTUgKi8KLQotc2l6ZV90IHN0cm5sZW4oY29uc3QgY2hhciAqIHMsIHNpemVfdCBjb3VudCkKLXsKLQljb25zdCBjaGFyICpzYzsKLQotCWZvciAoc2MgPSBzOyBjb3VudC0tICYmICpzYyAhPSAnXDAnOyArK3NjKQotCQkvKiBub3RoaW5nICovOwotCXJldHVybiBzYyAtIHM7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgc2ltcGxlX3N0cnRvdWwoY29uc3QgY2hhciAqY3AsY2hhciAqKmVuZHAsdW5zaWduZWQgaW50IGJhc2UpCi17Ci0JdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwLHZhbHVlOwotCi0JaWYgKCFiYXNlKSB7Ci0JCWJhc2UgPSAxMDsKLQkJaWYgKCpjcCA9PSAnMCcpIHsKLQkJCWJhc2UgPSA4OwotCQkJY3ArKzsKLQkJCWlmICgoKmNwID09ICd4JykgJiYgaXN4ZGlnaXQoY3BbMV0pKSB7Ci0JCQkJY3ArKzsKLQkJCQliYXNlID0gMTY7Ci0JCQl9Ci0JCX0KLQl9Ci0Jd2hpbGUgKGlzeGRpZ2l0KCpjcCkgJiYKLQkgICAgICAgKHZhbHVlID0gaXNkaWdpdCgqY3ApID8gKmNwLScwJyA6IHRvdXBwZXIoKmNwKS0nQScrMTApIDwgYmFzZSkgewotCQlyZXN1bHQgPSByZXN1bHQqYmFzZSArIHZhbHVlOwotCQljcCsrOwotCX0KLQlpZiAoZW5kcCkKLQkJKmVuZHAgPSAoY2hhciAqKWNwOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLWxvbmcgc2ltcGxlX3N0cnRvbChjb25zdCBjaGFyICpjcCxjaGFyICoqZW5kcCx1bnNpZ25lZCBpbnQgYmFzZSkKLXsKLQlpZigqY3A9PSctJykKLQkJcmV0dXJuIC1zaW1wbGVfc3RydG91bChjcCsxLGVuZHAsYmFzZSk7Ci0JcmV0dXJuIHNpbXBsZV9zdHJ0b3VsKGNwLGVuZHAsYmFzZSk7Ci19Ci0KLXN0YXRpYyBpbnQgc2tpcF9hdG9pKGNvbnN0IGNoYXIgKipzKQotewotCWludCBpPTA7Ci0KLQl3aGlsZSAoaXNkaWdpdCgqKnMpKQotCQlpID0gaSoxMCArICooKCpzKSsrKSAtICcwJzsKLQlyZXR1cm4gaTsKLX0KLQotI2RlZmluZSBaRVJPUEFECTEJCS8qIHBhZCB3aXRoIHplcm8gKi8KLSNkZWZpbmUgU0lHTgkyCQkvKiB1bnNpZ25lZC9zaWduZWQgbG9uZyAqLwotI2RlZmluZSBQTFVTCTQJCS8qIHNob3cgcGx1cyAqLwotI2RlZmluZSBTUEFDRQk4CQkvKiBzcGFjZSBpZiBwbHVzICovCi0jZGVmaW5lIExFRlQJMTYJCS8qIGxlZnQganVzdGlmaWVkICovCi0jZGVmaW5lIFNQRUNJQUwJMzIJCS8qIDB4ICovCi0jZGVmaW5lIExBUkdFCTY0CQkvKiB1c2UgJ0FCQ0RFRicgaW5zdGVhZCBvZiAnYWJjZGVmJyAqLwotCi1zdGF0aWMgY2hhciAqIG51bWJlcihjaGFyICogc3RyLCBsb25nIGxvbmcgbnVtLCBpbnQgYmFzZSwgaW50IHNpemUsIGludCBwcmVjaXNpb24sIGludCB0eXBlKQotewotCWNoYXIgYyxzaWduLHRtcFs2Nl07Ci0JY29uc3QgY2hhciAqZGlnaXRzPSIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOwotCWludCBpOwotCi0JaWYgKHR5cGUgJiBMQVJHRSkKLQkJZGlnaXRzID0gIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7Ci0JaWYgKHR5cGUgJiBMRUZUKQotCQl0eXBlICY9IH5aRVJPUEFEOwotCWlmIChiYXNlIDwgMiB8fCBiYXNlID4gMzYpCi0JCXJldHVybiAwOwotCWMgPSAodHlwZSAmIFpFUk9QQUQpID8gJzAnIDogJyAnOwotCXNpZ24gPSAwOwotCWlmICh0eXBlICYgU0lHTikgewotCQlpZiAobnVtIDwgMCkgewotCQkJc2lnbiA9ICctJzsKLQkJCW51bSA9IC1udW07Ci0JCQlzaXplLS07Ci0JCX0gZWxzZSBpZiAodHlwZSAmIFBMVVMpIHsKLQkJCXNpZ24gPSAnKyc7Ci0JCQlzaXplLS07Ci0JCX0gZWxzZSBpZiAodHlwZSAmIFNQQUNFKSB7Ci0JCQlzaWduID0gJyAnOwotCQkJc2l6ZS0tOwotCQl9Ci0JfQotCWlmICh0eXBlICYgU1BFQ0lBTCkgewotCQlpZiAoYmFzZSA9PSAxNikKLQkJCXNpemUgLT0gMjsKLQkJZWxzZSBpZiAoYmFzZSA9PSA4KQotCQkJc2l6ZS0tOwotCX0KLQlpID0gMDsKLQlpZiAobnVtID09IDApCi0JCXRtcFtpKytdPScwJzsKLQllbHNlIHdoaWxlIChudW0gIT0gMCkKLQkJdG1wW2krK10gPSBkaWdpdHNbZG9fZGl2KG51bSxiYXNlKV07Ci0JaWYgKGkgPiBwcmVjaXNpb24pCi0JCXByZWNpc2lvbiA9IGk7Ci0Jc2l6ZSAtPSBwcmVjaXNpb247Ci0JaWYgKCEodHlwZSYoWkVST1BBRCtMRUZUKSkpCi0JCXdoaWxlKHNpemUtLT4wKQotCQkJKnN0cisrID0gJyAnOwotCWlmIChzaWduKQotCQkqc3RyKysgPSBzaWduOwotCWlmICh0eXBlICYgU1BFQ0lBTCkgewotCQlpZiAoYmFzZT09OCkKLQkJCSpzdHIrKyA9ICcwJzsKLQkJZWxzZSBpZiAoYmFzZT09MTYpIHsKLQkJCSpzdHIrKyA9ICcwJzsKLQkJCSpzdHIrKyA9IGRpZ2l0c1szM107Ci0JCX0KLQl9Ci0JaWYgKCEodHlwZSAmIExFRlQpKQotCQl3aGlsZSAoc2l6ZS0tID4gMCkKLQkJCSpzdHIrKyA9IGM7Ci0Jd2hpbGUgKGkgPCBwcmVjaXNpb24tLSkKLQkJKnN0cisrID0gJzAnOwotCXdoaWxlIChpLS0gPiAwKQotCQkqc3RyKysgPSB0bXBbaV07Ci0Jd2hpbGUgKHNpemUtLSA+IDApCi0JCSpzdHIrKyA9ICcgJzsKLQlyZXR1cm4gc3RyOwotfQotCi0vKiBGb3J3YXJkIGRlY2wuIG5lZWRlZCBmb3IgSVAgYWRkcmVzcyBwcmludGluZyBzdHVmZi4uLiAqLwotaW50IHNwcmludGYoY2hhciAqIGJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pOwotCi1pbnQgdnNwcmludGYoY2hhciAqYnVmLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKLXsKLQlpbnQgbGVuOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBudW07Ci0JaW50IGksIGJhc2U7Ci0JY2hhciAqIHN0cjsKLQljb25zdCBjaGFyICpzOwotCi0JaW50IGZsYWdzOwkJLyogZmxhZ3MgdG8gbnVtYmVyKCkgKi8KLQotCWludCBmaWVsZF93aWR0aDsJLyogd2lkdGggb2Ygb3V0cHV0IGZpZWxkICovCi0JaW50IHByZWNpc2lvbjsJCS8qIG1pbi4gIyBvZiBkaWdpdHMgZm9yIGludGVnZXJzOyBtYXgKLQkJCQkgICBudW1iZXIgb2YgY2hhcnMgZm9yIGZyb20gc3RyaW5nICovCi0JaW50IHF1YWxpZmllcjsJCS8qICdoJywgJ2wnLCBvciAnTCcgZm9yIGludGVnZXIgZmllbGRzICovCi0JICAgICAgICAgICAgICAgICAgICAgICAgLyogJ3onIHN1cHBvcnQgYWRkZWQgMjMvNy8xOTk5IFMuSC4gICAgKi8KLQkJCQkvKiAneicgY2hhbmdlZCB0byAnWicgLS1kYXZpZG0gMS8yNS85OSAqLwotCi0JCi0JZm9yIChzdHI9YnVmIDsgKmZtdCA7ICsrZm10KSB7Ci0JCWlmICgqZm10ICE9ICclJykgewotCQkJKnN0cisrID0gKmZtdDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCQkKLQkJLyogcHJvY2VzcyBmbGFncyAqLwotCQlmbGFncyA9IDA7Ci0JCXJlcGVhdDoKLQkJCSsrZm10OwkJLyogdGhpcyBhbHNvIHNraXBzIGZpcnN0ICclJyAqLwotCQkJc3dpdGNoICgqZm10KSB7Ci0JCQkJY2FzZSAnLSc6IGZsYWdzIHw9IExFRlQ7IGdvdG8gcmVwZWF0OwotCQkJCWNhc2UgJysnOiBmbGFncyB8PSBQTFVTOyBnb3RvIHJlcGVhdDsKLQkJCQljYXNlICcgJzogZmxhZ3MgfD0gU1BBQ0U7IGdvdG8gcmVwZWF0OwotCQkJCWNhc2UgJyMnOiBmbGFncyB8PSBTUEVDSUFMOyBnb3RvIHJlcGVhdDsKLQkJCQljYXNlICcwJzogZmxhZ3MgfD0gWkVST1BBRDsgZ290byByZXBlYXQ7Ci0JCQkJfQotCQkKLQkJLyogZ2V0IGZpZWxkIHdpZHRoICovCi0JCWZpZWxkX3dpZHRoID0gLTE7Ci0JCWlmIChpc2RpZ2l0KCpmbXQpKQotCQkJZmllbGRfd2lkdGggPSBza2lwX2F0b2koJmZtdCk7Ci0JCWVsc2UgaWYgKCpmbXQgPT0gJyonKSB7Ci0JCQkrK2ZtdDsKLQkJCS8qIGl0J3MgdGhlIG5leHQgYXJndW1lbnQgKi8KLQkJCWZpZWxkX3dpZHRoID0gdmFfYXJnKGFyZ3MsIGludCk7Ci0JCQlpZiAoZmllbGRfd2lkdGggPCAwKSB7Ci0JCQkJZmllbGRfd2lkdGggPSAtZmllbGRfd2lkdGg7Ci0JCQkJZmxhZ3MgfD0gTEVGVDsKLQkJCX0KLQkJfQotCi0JCS8qIGdldCB0aGUgcHJlY2lzaW9uICovCi0JCXByZWNpc2lvbiA9IC0xOwotCQlpZiAoKmZtdCA9PSAnLicpIHsKLQkJCSsrZm10OwkKLQkJCWlmIChpc2RpZ2l0KCpmbXQpKQotCQkJCXByZWNpc2lvbiA9IHNraXBfYXRvaSgmZm10KTsKLQkJCWVsc2UgaWYgKCpmbXQgPT0gJyonKSB7Ci0JCQkJKytmbXQ7Ci0JCQkJLyogaXQncyB0aGUgbmV4dCBhcmd1bWVudCAqLwotCQkJCXByZWNpc2lvbiA9IHZhX2FyZyhhcmdzLCBpbnQpOwotCQkJfQotCQkJaWYgKHByZWNpc2lvbiA8IDApCi0JCQkJcHJlY2lzaW9uID0gMDsKLQkJfQotCi0JCS8qIGdldCB0aGUgY29udmVyc2lvbiBxdWFsaWZpZXIgKi8KLQkJcXVhbGlmaWVyID0gLTE7Ci0JCWlmICgqZm10ID09ICdoJyB8fCAqZm10ID09ICdsJyB8fCAqZm10ID09ICdMJyB8fCAqZm10ID09J1onKSB7Ci0JCQlxdWFsaWZpZXIgPSAqZm10OwotCQkJKytmbXQ7Ci0JCX0KLQotCQkvKiBkZWZhdWx0IGJhc2UgKi8KLQkJYmFzZSA9IDEwOwotCi0JCXN3aXRjaCAoKmZtdCkgewotCQljYXNlICdjJzoKLQkJCWlmICghKGZsYWdzICYgTEVGVCkpCi0JCQkJd2hpbGUgKC0tZmllbGRfd2lkdGggPiAwKQotCQkJCQkqc3RyKysgPSAnICc7Ci0JCQkqc3RyKysgPSAodW5zaWduZWQgY2hhcikgdmFfYXJnKGFyZ3MsIGludCk7Ci0JCQl3aGlsZSAoLS1maWVsZF93aWR0aCA+IDApCi0JCQkJKnN0cisrID0gJyAnOwotCQkJY29udGludWU7Ci0KLQkJY2FzZSAncyc6Ci0JCQlzID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7Ci0JCQlpZiAoIXMpCi0JCQkJcyA9ICI8TlVMTD4iOwotCi0JCQlsZW4gPSBzdHJubGVuKHMsIHByZWNpc2lvbik7Ci0KLQkJCWlmICghKGZsYWdzICYgTEVGVCkpCi0JCQkJd2hpbGUgKGxlbiA8IGZpZWxkX3dpZHRoLS0pCi0JCQkJCSpzdHIrKyA9ICcgJzsKLQkJCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKLQkJCQkqc3RyKysgPSAqcysrOwotCQkJd2hpbGUgKGxlbiA8IGZpZWxkX3dpZHRoLS0pCi0JCQkJKnN0cisrID0gJyAnOwotCQkJY29udGludWU7Ci0KLQkJY2FzZSAncCc6Ci0JCQlpZiAoZmllbGRfd2lkdGggPT0gLTEpIHsKLQkJCQlmaWVsZF93aWR0aCA9IDIqc2l6ZW9mKHZvaWQgKik7Ci0JCQkJZmxhZ3MgfD0gWkVST1BBRDsKLQkJCX0KLQkJCXN0ciA9IG51bWJlcihzdHIsCi0JCQkJKHVuc2lnbmVkIGxvbmcpIHZhX2FyZyhhcmdzLCB2b2lkICopLCAxNiwKLQkJCQlmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7Ci0JCQljb250aW51ZTsKLQotCi0JCWNhc2UgJ24nOgotCQkJaWYgKHF1YWxpZmllciA9PSAnbCcpIHsKLQkJCQlsb25nICogaXAgPSB2YV9hcmcoYXJncywgbG9uZyAqKTsKLQkJCQkqaXAgPSAoc3RyIC0gYnVmKTsKLQkJCX0gZWxzZSBpZiAocXVhbGlmaWVyID09ICdaJykgewotCQkJCXNpemVfdCAqIGlwID0gdmFfYXJnKGFyZ3MsIHNpemVfdCAqKTsKLQkJCQkqaXAgPSAoc3RyIC0gYnVmKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaW50ICogaXAgPSB2YV9hcmcoYXJncywgaW50ICopOwotCQkJCSppcCA9IChzdHIgLSBidWYpOwotCQkJfQotCQkJY29udGludWU7Ci0KLQkJY2FzZSAnJSc6Ci0JCQkqc3RyKysgPSAnJSc7Ci0JCQljb250aW51ZTsKLQotCQkvKiBpbnRlZ2VyIG51bWJlciBmb3JtYXRzIC0gc2V0IHVwIHRoZSBmbGFncyBhbmQgImJyZWFrIiAqLwotCQljYXNlICdvJzoKLQkJCWJhc2UgPSA4OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAnWCc6Ci0JCQlmbGFncyB8PSBMQVJHRTsKLQkJY2FzZSAneCc6Ci0JCQliYXNlID0gMTY7Ci0JCQlicmVhazsKLQotCQljYXNlICdkJzoKLQkJY2FzZSAnaSc6Ci0JCQlmbGFncyB8PSBTSUdOOwotCQljYXNlICd1JzoKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQkqc3RyKysgPSAnJSc7Ci0JCQlpZiAoKmZtdCkKLQkJCQkqc3RyKysgPSAqZm10OwotCQkJZWxzZQotCQkJCS0tZm10OwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHF1YWxpZmllciA9PSAnTCcpCi0JCQludW0gPSB2YV9hcmcoYXJncywgbG9uZyBsb25nKTsKLQkJZWxzZSBpZiAocXVhbGlmaWVyID09ICdsJykgewotCQkJbnVtID0gdmFfYXJnKGFyZ3MsIHVuc2lnbmVkIGxvbmcpOwotCQkJaWYgKGZsYWdzICYgU0lHTikKLQkJCQludW0gPSAoc2lnbmVkIGxvbmcpIG51bTsKLQkJfSBlbHNlIGlmIChxdWFsaWZpZXIgPT0gJ1onKSB7Ci0JCQludW0gPSB2YV9hcmcoYXJncywgc2l6ZV90KTsKLQkJfSBlbHNlIGlmIChxdWFsaWZpZXIgPT0gJ2gnKSB7Ci0JCQludW0gPSAodW5zaWduZWQgc2hvcnQpIHZhX2FyZyhhcmdzLCBpbnQpOwotCQkJaWYgKGZsYWdzICYgU0lHTikKLQkJCQludW0gPSAoc2lnbmVkIHNob3J0KSBudW07Ci0JCX0gZWxzZSB7Ci0JCQludW0gPSB2YV9hcmcoYXJncywgdW5zaWduZWQgaW50KTsKLQkJCWlmIChmbGFncyAmIFNJR04pCi0JCQkJbnVtID0gKHNpZ25lZCBpbnQpIG51bTsKLQkJfQotCQlzdHIgPSBudW1iZXIoc3RyLCBudW0sIGJhc2UsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKLQl9Ci0JKnN0ciA9ICdcMCc7Ci0JcmV0dXJuIHN0ci1idWY7Ci19Ci0KLWludCBzcHJpbnRmKGNoYXIgKiBidWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQlpbnQgaTsKLQotCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JaT12c3ByaW50ZihidWYsZm10LGFyZ3MpOwotCXZhX2VuZChhcmdzKTsKLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIGNoYXIgc3ByaW50X2J1ZlsxMDI0XTsKLQotdm9pZAotcHJpbnRrKGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQlpbnQgbjsKLQotCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JbiA9IHZzcHJpbnRmKHNwcmludF9idWYsIGZtdCwgYXJncyk7Ci0JdmFfZW5kKGFyZ3MpOwotCXdyaXRlKHN0ZG91dCwgc3ByaW50X2J1Ziwgbik7Ci19Ci0KLWludAotcHJpbnRmKGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQlpbnQgbjsKLQotCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JbiA9IHZzcHJpbnRmKHNwcmludF9idWYsIGZtdCwgYXJncyk7Ci0JdmFfZW5kKGFyZ3MpOwotCXdyaXRlKHN0ZG91dCwgc3ByaW50X2J1Ziwgbik7Ci0JcmV0dXJuIG47Ci19CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9IdkxwRXZlbnQuYyBiL2FyY2gvcHBjNjQva2VybmVsL0h2THBFdmVudC5jCmluZGV4IDk4MDJiZWUuLmY4ZjE5NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL0h2THBFdmVudC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL0h2THBFdmVudC5jCkBAIC00NSw3ICs0NSw3IEBACiAJCQkvKiBXZSBub3cgc2xlZXAgdW50aWwgYWxsIG90aGVyIENQVXMgaGF2ZSBzY2hlZHVsZWQuIFRoaXMgZW5zdXJlcyB0aGF0CiAJCQkgKiB0aGUgZGVsZXRpb24gaXMgc2VlbiBieSBhbGwgb3RoZXIgQ1BVcywgYW5kIHRoYXQgdGhlIGRlbGV0ZWQgaGFuZGxlcgogCQkJICogaXNuJ3Qgc3RpbGwgcnVubmluZyBvbiBhbm90aGVyIENQVSB3aGVuIHdlIHJldHVybi4gKi8KLQkJCXN5bmNocm9uaXplX2tlcm5lbCgpOworCQkJc3luY2hyb25pemVfcmN1KCk7CiAJCX0KIAl9CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvbWlzYy5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvbWlzYy5TCmluZGV4IDkwYjQxZjQuLmI5NDQ3MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL21pc2MuUworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9taXNjLlMKQEAgLTMyLDcgKzMyLDcgQEAKIAkudGV4dAogCiAvKgotICogUmV0dXJucyAoYWRkcmVzcyB3ZSdyZSBydW5uaW5nIGF0KSAtIChhZGRyZXNzIHdlIHdlcmUgbGlua2VkIGF0KQorICogUmV0dXJucyAoYWRkcmVzcyB3ZSB3ZXJlIGxpbmtlZCBhdCkgLSAoYWRkcmVzcyB3ZSBhcmUgcnVubmluZyBhdCkKICAqIGZvciB1c2UgYmVmb3JlIHRoZSB0ZXh0IGFuZCBkYXRhIGFyZSBtYXBwZWQgdG8gS0VSTkVMQkFTRS4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9udnJhbS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvbnZyYW0uYwppbmRleCBiOTA2OWMyLi40ZTcxNzgxIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9udnJhbS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL252cmFtLmMKQEAgLTMzOSw5ICszMzksOSBAQAogc3RhdGljIGludCBudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uKHZvaWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqIHA7Ci0Jc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqIHBhcnQ7Ci0Jc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqIG5ld19wYXJ0ID0gTlVMTDsKLQlzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uICogZnJlZV9wYXJ0ID0gTlVMTDsKKwlzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uICpwYXJ0ID0gTlVMTDsKKwlzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uICpuZXdfcGFydCA9IE5VTEw7CisJc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqZnJlZV9wYXJ0ID0gTlVMTDsKIAlpbnQgc2VxX2luaXRbMl0gPSB7IDAsIDAgfTsKIAlsb2ZmX3QgdG1wX2luZGV4OwogCWxvbmcgc2l6ZSA9IDA7CkBAIC0zNjQsMTMgKzM2NCwxMSBAQAogCQkJZnJlZV9wYXJ0ID0gcGFydDsKIAkJfQogCX0KLQlpZiAoIXNpemUpIHsKKwlpZiAoIXNpemUpCiAJCXJldHVybiAtRU5PU1BDOwotCX0KIAkKIAkvKiBDcmVhdGUgb3VyIE9TIHBhcnRpdGlvbiAqLwotCW5ld19wYXJ0ID0gKHN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKikKLQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IG52cmFtX3BhcnRpdGlvbiksIEdGUF9LRVJORUwpOworCW5ld19wYXJ0ID0ga21hbGxvYyhzaXplb2YoKm5ld19wYXJ0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdfcGFydCkgewogCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX2NyZWF0ZV9vc19wYXJ0aXRpb246IGttYWxsb2MgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zNzksNyArMzc3LDcgQEAKIAluZXdfcGFydC0+aW5kZXggPSBmcmVlX3BhcnQtPmluZGV4OwogCW5ld19wYXJ0LT5oZWFkZXIuc2lnbmF0dXJlID0gTlZSQU1fU0lHX09TOwogCW5ld19wYXJ0LT5oZWFkZXIubGVuZ3RoID0gc2l6ZTsKLQlzcHJpbnRmKG5ld19wYXJ0LT5oZWFkZXIubmFtZSwgInBwYzY0LGxpbnV4Iik7CisJc3RyY3B5KG5ld19wYXJ0LT5oZWFkZXIubmFtZSwgInBwYzY0LGxpbnV4Iik7CiAJbmV3X3BhcnQtPmhlYWRlci5jaGVja3N1bSA9IG52cmFtX2NoZWNrc3VtKCZuZXdfcGFydC0+aGVhZGVyKTsKIAogCXJjID0gbnZyYW1fd3JpdGVfaGVhZGVyKG5ld19wYXJ0KTsKQEAgLTM5NCw3ICszOTIsOCBAQAogCXRtcF9pbmRleCA9IG5ld19wYXJ0LT5pbmRleCArIE5WUkFNX0hFQURFUl9MRU47CiAJcmMgPSBwcGNfbWQubnZyYW1fd3JpdGUoKGNoYXIgKikmc2VxX2luaXQsIHNpemVvZihzZXFfaW5pdCksICZ0bXBfaW5kZXgpOwogCWlmIChyYyA8PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbjogbnZyYW1fd3JpdGUgZmFpbGVkICglZClcbiIsIHJjKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uOiBudnJhbV93cml0ZSAiCisJCQkJImZhaWxlZCAoJWQpXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAJCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wU2VyaWVzX2h2Q2FsbC5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19odkNhbGwuUwppbmRleCAwNzE1ZDMwLi4xNzZlOGRhIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wU2VyaWVzX2h2Q2FsbC5TCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3BTZXJpZXNfaHZDYWxsLlMKQEAgLTI4LDYgKzI4LDggQEAKIAkJCXVuc2lnbmVkIGxvbmcgKm91dDMpOwkJUjEwCiAgKi8KIF9HTE9CQUwocGxwYXJfaGNhbGwpCisJSE1UX01FRElVTQorCiAJbWZjcglyMAogCiAJc3RkCXI4LFNUS19QQVJNKHI4KShyMSkJLyogU2F2ZSBvdXQgcHRycyAqLwpAQCAtNTMsNiArNTUsOCBAQAogCiAvKiBTaW1wbGUgaW50ZXJmYWNlIHdpdGggbm8gb3V0cHV0IHZhbHVlcyAob3RoZXIgdGhhbiBzdGF0dXMpICovCiBfR0xPQkFMKHBscGFyX2hjYWxsX25vcmV0cykKKwlITVRfTUVESVVNCisKIAltZmNyCXIwCiAJc3R3CXIwLDgocjEpCiAKQEAgLTc1LDYgKzc5LDggQEAKIAkJCXVuc2lnbmVkIGxvbmcgKm91dDEpOwkJMTIwKFIxKQogICovCiBfR0xPQkFMKHBscGFyX2hjYWxsXzhhcmdfMnJldCkKKwlITVRfTUVESVVNCisKIAltZmNyCXIwCiAJbGQJcjExLFNUS19QQVJNKHIxMSkocjEpCS8qIHB1dCBhcmc4IGluIFIxMSAqLwogCXN0dwlyMCw4KHIxKQpAQCAtOTksNiArMTA1LDggQEAKIAkJIAl1bnNpZ25lZCBsb25nICpvdXQ0KTsJCTExMihSMSkKICAqLwogX0dMT0JBTChwbHBhcl9oY2FsbF80b3V0KQorCUhNVF9NRURJVU0KKwogCW1mY3IJcjAKIAlzdHcJcjAsOChyMSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19zbXAuYyBiL2FyY2gvcHBjNjQva2VybmVsL3BTZXJpZXNfc21wLmMKaW5kZXggYzYwZDhjYi4uZmJhZDM0OSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19zbXAuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9wU2VyaWVzX3NtcC5jCkBAIC0zMjYsMTMgKzMyNiw2IEBACiAKIAljcHVfY2xlYXIoY3B1LCBvZl9zcGluX21hcCk7CiAKLQkvKgotCSAqIFB1dCB0aGUgY2FsbGluZyBwcm9jZXNzb3IgaW50byB0aGUgR0lRLiAgVGhpcyBpcyByZWFsbHkgb25seQotCSAqIG5lY2Vzc2FyeSBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCBhcyB0aGUgT0Ygc3RhcnQtY3B1IGludGVyZmFjZQotCSAqIHBlcmZvcm1zIHRoaXMgZnVuY3Rpb24gZm9yIHVzIG9uIHByaW1hcnkgdGhyZWFkcy4KLQkgKi8KLQlydGFzX3NldF9pbmRpY2F0b3IoR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwKLQkJKDFVTCA8PCBpbnRlcnJ1cHRfc2VydmVyX3NpemUpIC0gMSAtIGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDEpOwogfQogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRpbWViYXNlX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcGNpLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wY2kuYwppbmRleCBiZTNjYzM4Li5kNzg2ZDRiIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9wY2kuYwpAQCAtNDM4LDcgKzQzOCw3IEBACiAJaW50IGk7CiAKIAlpZiAocGFnZV9pc19yYW0ob2Zmc2V0ID4+IFBBR0VfU0hJRlQpKQotCQlyZXR1cm4gcHJvdDsKKwkJcmV0dXJuIF9fcGdwcm90KHByb3QpOwogCiAJcHJvdCB8PSBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Byb20uYyBiL2FyY2gvcHBjNjQva2VybmVsL3Byb20uYwppbmRleCA0NWE0YWQwLi5lYjY1MzhiIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbS5jCkBAIC0zMjEsNiArMzIxLDEwIEBACiAJCQljaGFyICpuYW1lID0gZ2V0X3Byb3BlcnR5KGljLT5wYXJlbnQsICJuYW1lIiwgTlVMTCk7CiAJCQlpZiAobmFtZSAmJiAhc3RyY21wKG5hbWUsICJ1MyIpKQogCQkJCW5wLT5pbnRyc1tpbnRyY291bnRdLmxpbmUgKz0gMTI4OworCQkJZWxzZSBpZiAoIShuYW1lICYmICFzdHJjbXAobmFtZSwgIm1hYy1pbyIpKSkKKwkJCQkvKiBpZ25vcmUgb3RoZXIgY2FzY2FkZWQgY29udHJvbGxlcnMsIHN1Y2ggYXMKKwkJCQkgICB0aGUgazItc2F0YS1yb290ICovCisJCQkJYnJlYWs7CiAJCX0KIAkJbnAtPmludHJzW2ludHJjb3VudF0uc2Vuc2UgPSAxOwogCQlpZiAobiA+IDEpCkBAIC04MzAsNyArODM0LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBtZW0sIHNpemU7CiAJc3RydWN0IGRldmljZV9ub2RlICoqYWxsbmV4dHAgPSAmYWxsbm9kZXM7Ci0JY2hhciAqcDsKKwljaGFyICpwID0gTlVMTDsKIAlpbnQgbCA9IDA7CiAKIAlEQkcoIiAtPiB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUoKVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jCmluZGV4IDhkZmZhOWEuLjM1ZWM0MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jCkBAIC00OTMsNiArNDkzLDExMyBAQAogfQogCiAvKgorICogVG8gdGVsbCB0aGUgZmlybXdhcmUgd2hhdCBvdXIgY2FwYWJpbGl0aWVzIGFyZSwgd2UgaGF2ZSB0byBwYXNzCisgKiBpdCBhIGZha2UgMzItYml0IEVMRiBoZWFkZXIgY29udGFpbmluZyBhIGNvdXBsZSBvZiBQVF9OT1RFIHNlY3Rpb25zCisgKiB0aGF0IGNvbnRhaW4gc3RydWN0dXJlcyB0aGF0IGNvbnRhaW4gdGhlIGFjdHVhbCB2YWx1ZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmFrZV9lbGYgeworCUVsZjMyX0VoZHIJZWxmaGRyOworCUVsZjMyX1BoZHIJcGhkclsyXTsKKwlzdHJ1Y3QgY2hycG5vdGUgeworCQl1MzIJbmFtZXN6OworCQl1MzIJZGVzY3N6OworCQl1MzIJdHlwZTsKKwkJY2hhcgluYW1lWzhdOwkvKiAiUG93ZXJQQyIgKi8KKwkJc3RydWN0IGNocnBkZXNjIHsKKwkJCXUzMglyZWFsX21vZGU7CisJCQl1MzIJcmVhbF9iYXNlOworCQkJdTMyCXJlYWxfc2l6ZTsKKwkJCXUzMgl2aXJ0X2Jhc2U7CisJCQl1MzIJdmlydF9zaXplOworCQkJdTMyCWxvYWRfYmFzZTsKKwkJfSBjaHJwZGVzYzsKKwl9IGNocnBub3RlOworCXN0cnVjdCBycGFub3RlIHsKKwkJdTMyCW5hbWVzejsKKwkJdTMyCWRlc2NzejsKKwkJdTMyCXR5cGU7CisJCWNoYXIJbmFtZVsyNF07CS8qICJJQk0sUlBBLUNsaWVudC1Db25maWciICovCisJCXN0cnVjdCBycGFkZXNjIHsKKwkJCXUzMglscGFyX2FmZmluaXR5OworCQkJdTMyCW1pbl9ybW9fc2l6ZTsKKwkJCXUzMgltaW5fcm1vX3BlcmNlbnQ7CisJCQl1MzIJbWF4X3BmdF9zaXplOworCQkJdTMyCXNwbHBhcjsKKwkJCXUzMgltaW5fbG9hZDsKKwkJCXUzMgluZXdfbWVtX2RlZjsKKwkJCXUzMglpZ25vcmVfbWU7CisJCX0gcnBhZGVzYzsKKwl9IHJwYW5vdGU7Cit9IGZha2VfZWxmID0geworCS5lbGZoZHIgPSB7CisJCS5lX2lkZW50ID0geyAweDdmLCAnRScsICdMJywgJ0YnLAorCQkJICAgICBFTEZDTEFTUzMyLCBFTEZEQVRBMk1TQiwgRVZfQ1VSUkVOVCB9LAorCQkuZV90eXBlID0gRVRfRVhFQywJLyogeWVhaCByaWdodCAqLworCQkuZV9tYWNoaW5lID0gRU1fUFBDLAorCQkuZV92ZXJzaW9uID0gRVZfQ1VSUkVOVCwKKwkJLmVfcGhvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgZmFrZV9lbGYsIHBoZHIpLAorCQkuZV9waGVudHNpemUgPSBzaXplb2YoRWxmMzJfUGhkciksCisJCS5lX3BobnVtID0gMgorCX0sCisJLnBoZHIgPSB7CisJCVswXSA9IHsKKwkJCS5wX3R5cGUgPSBQVF9OT1RFLAorCQkJLnBfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGZha2VfZWxmLCBjaHJwbm90ZSksCisJCQkucF9maWxlc3ogPSBzaXplb2Yoc3RydWN0IGNocnBub3RlKQorCQl9LCBbMV0gPSB7CisJCQkucF90eXBlID0gUFRfTk9URSwKKwkJCS5wX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBmYWtlX2VsZiwgcnBhbm90ZSksCisJCQkucF9maWxlc3ogPSBzaXplb2Yoc3RydWN0IHJwYW5vdGUpCisJCX0KKwl9LAorCS5jaHJwbm90ZSA9IHsKKwkJLm5hbWVzeiA9IHNpemVvZigiUG93ZXJQQyIpLAorCQkuZGVzY3N6ID0gc2l6ZW9mKHN0cnVjdCBjaHJwZGVzYyksCisJCS50eXBlID0gMHgxMjc1LAorCQkubmFtZSA9ICJQb3dlclBDIiwKKwkJLmNocnBkZXNjID0geworCQkJLnJlYWxfbW9kZSA9IH4wVSwJLyogfjAgbWVhbnMgImRvbid0IGNhcmUiICovCisJCQkucmVhbF9iYXNlID0gfjBVLAorCQkJLnJlYWxfc2l6ZSA9IH4wVSwKKwkJCS52aXJ0X2Jhc2UgPSB+MFUsCisJCQkudmlydF9zaXplID0gfjBVLAorCQkJLmxvYWRfYmFzZSA9IH4wVQorCQl9LAorCX0sCisJLnJwYW5vdGUgPSB7CisJCS5uYW1lc3ogPSBzaXplb2YoIklCTSxSUEEtQ2xpZW50LUNvbmZpZyIpLAorCQkuZGVzY3N6ID0gc2l6ZW9mKHN0cnVjdCBycGFkZXNjKSwKKwkJLnR5cGUgPSAweDEyNzU5OTk5LAorCQkubmFtZSA9ICJJQk0sUlBBLUNsaWVudC1Db25maWciLAorCQkucnBhZGVzYyA9IHsKKwkJCS5scGFyX2FmZmluaXR5ID0gMCwKKwkJCS5taW5fcm1vX3NpemUgPSA2NCwJLyogaW4gbWVnYWJ5dGVzICovCisJCQkubWluX3Jtb19wZXJjZW50ID0gMCwKKwkJCS5tYXhfcGZ0X3NpemUgPSA0OCwJLyogMl40OCBieXRlcyBtYXggUEZUIHNpemUgKi8KKwkJCS5zcGxwYXIgPSAxLAorCQkJLm1pbl9sb2FkID0gfjBVLAorCQkJLm5ld19tZW1fZGVmID0gMAorCQl9CisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHByb21fc2VuZF9jYXBhYmlsaXRpZXModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHJlbG9jX29mZnNldCgpOworCWloYW5kbGUgZWxmbG9hZGVyOworCWludCByZXQ7CisKKwllbGZsb2FkZXIgPSBjYWxsX3Byb20oIm9wZW4iLCAxLCAxLCBBRERSKCIvcGFja2FnZXMvZWxmLWxvYWRlciIpKTsKKwlpZiAoZWxmbG9hZGVyID09IDApIHsKKwkJcHJvbV9wcmludGYoImNvdWxkbid0IG9wZW4gL3BhY2thZ2VzL2VsZi1sb2FkZXJcbiIpOworCQlyZXR1cm47CisJfQorCXJldCA9IGNhbGxfcHJvbSgiY2FsbC1tZXRob2QiLCAzLCAxLCBBRERSKCJwcm9jZXNzLWVsZi1oZWFkZXIiKSwKKwkJCWVsZmxvYWRlciwgQUREUigmZmFrZV9lbGYpKTsKKwljYWxsX3Byb20oImNsb3NlIiwgMSwgMCwgZWxmbG9hZGVyKTsKK30KKworLyoKICAqIE1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWd5Li4uIG91ciBsYXlvdXQgaXMgbm9ybWFsbHk6CiAgKgogICogIGF0IDE0TWIgb3IgbW9yZSB3ZSB2bWxpbnV4LCB0aGVuIGEgZ2FwIGFuZCBpbml0cmQuIEluIHNvbWUgcmFyZSBjYXNlcywgaW5pdHJkCkBAIC0xNDQ4LDYgKzE1NTUsMTIgQEAKIAl9CiB9CiAKKy8qCisgKiBUaGUgT3BlbiBGaXJtd2FyZSAxMjc1IHNwZWNpZmljYXRpb24gc3RhdGVzIHByb3BlcnRpZXMgbXVzdCBiZSAzMSBieXRlcyBvcgorICogbGVzcywgaG93ZXZlciBub3QgYWxsIGZpcm13YXJlcyBvYmV5IHRoaXMuIE1ha2UgaXQgNjQgYnl0ZXMgdG8gYmUgc2FmZS4KKyAqLworI2RlZmluZSBNQVhfUFJPUEVSVFlfTkFNRSA2NAorCiBzdGF0aWMgdm9pZCBfX2luaXQgc2Nhbl9kdF9idWlsZF9zdHJ1Y3QocGhhbmRsZSBub2RlLCB1bnNpZ25lZCBsb25nICptZW1fc3RhcnQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgKm1lbV9lbmQpCiB7CkBAIC0xNDU3LDcgKzE1NzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgc29mZjsKIAl1bnNpZ25lZCBjaGFyICp2YWxwOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcmVsb2Nfb2Zmc2V0KCk7Ci0JY2hhciBwbmFtZVszMl07CisJY2hhciBwbmFtZVtNQVhfUFJPUEVSVFlfTkFNRV07CiAJY2hhciAqcGF0aDsKIAogCXBhdGggPSBSRUxPQyhwcm9tX3NjcmF0Y2gpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCAzNTRhMjg3Li45ZjhjNjA4IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9wdHJhY2UuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZWNjb21wLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xNjIsNyArMTYzLDcgQEAKIAljYXNlIFBUUkFDRV9TWVNDQUxMOiAvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwogCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkKIAkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKQEAgLTE5NCw3ICsxOTUsNyBAQAogCiAJY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDogeyAgLyogc2V0IHRoZSB0cmFwIGZsYWcuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKIAkJc2V0X3NpbmdsZV9zdGVwKGNoaWxkKTsKQEAgLTMwNCwxNCArMzA1LDE3IEBACiAKIHZvaWQgZG9fc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCi0JCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwgcmVncy0+Z3ByWzBdLAotCQkJCSAgICByZWdzLT5ncHJbM10sIHJlZ3MtPmdwcls0XSwKLQkJCQkgICAgcmVncy0+Z3ByWzVdLCByZWdzLT5ncHJbNl0pOwotCiAJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpCiAJICAgICYmIChjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKIAkJZG9fc3lzY2FsbF90cmFjZSgpOworCisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQorCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGN1cnJlbnQsCisJCQkJICAgIHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKT9BVURJVF9BUkNIX1BQQzpBVURJVF9BUkNIX1BQQzY0LAorCQkJCSAgICByZWdzLT5ncHJbMF0sCisJCQkJICAgIHJlZ3MtPmdwclszXSwgcmVncy0+Z3ByWzRdLAorCQkJCSAgICByZWdzLT5ncHJbNV0sIHJlZ3MtPmdwcls2XSk7CisKIH0KIAogdm9pZCBkb19zeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMzE5LDcgKzMyMyw5IEBACiAJc2VjdXJlX2NvbXB1dGluZyhyZWdzLT5ncHJbMF0pOwogCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQotCQlhdWRpdF9zeXNjYWxsX2V4aXQoY3VycmVudCwgcmVncy0+cmVzdWx0KTsKKwkJYXVkaXRfc3lzY2FsbF9leGl0KGN1cnJlbnQsIAorCQkJCSAgIChyZWdzLT5jY3ImMHgxMDAwKT9BVURJVFNDX0ZBSUxVUkU6QVVESVRTQ19TVUNDRVNTLAorCQkJCSAgIHJlZ3MtPnJlc3VsdCk7CiAKIAlpZiAoKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpCiAJICAgICB8fCB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3B0cmFjZTMyLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wdHJhY2UzMi5jCmluZGV4IGVlODFiMWIuLjE2NDM2NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3B0cmFjZTMyLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHRyYWNlMzIuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMjkzLDcgKzI5NCw3IEBACiAJY2FzZSBQVFJBQ0VfU1lTQ0FMTDogLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KIAljYXNlIFBUUkFDRV9DT05UOiB7IC8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCiAJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC0zMjUsNyArMzI2LDcgQEAKIAogCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6IHsgIC8qIHNldCB0aGUgdHJhcCBmbGFnLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CiAJCXNldF9zaW5nbGVfc3RlcChjaGlsZCk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9ydGFzX2ZsYXNoLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9ydGFzX2ZsYXNoLmMKaW5kZXggMzIxMzgzNy4uOTIzZTJlMiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcnRhc19mbGFzaC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3J0YXNfZmxhc2guYwpAQCAtMjE4LDcgKzIxOCw3IEBACiB9CiAKIC8qIFJlYWRpbmcgdGhlIHByb2MgZmlsZSB3aWxsIHNob3cgc3RhdHVzIChub3QgdGhlIGZpcm13YXJlIGNvbnRlbnRzKSAqLwotc3RhdGljIHNzaXplX3QgcnRhc19mbGFzaF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsCitzdGF0aWMgc3NpemVfdCBydGFzX2ZsYXNoX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CkBAIC0yNTYsNyArMjU2LDcgQEAKICAqIGNvdW50IGlzLiAgSWYgdGhlIHN5c3RlbSBpcyBsb3cgb24gbWVtb3J5IGl0IHdpbGwgYmUganVzdCBhcyB3ZWxsCiAgKiB0aGF0IHdlIGZhaWwuLi4uCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHJ0YXNfZmxhc2hfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKK3N0YXRpYyBzc2l6ZV90IHJ0YXNfZmxhc2hfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKQEAgLTM1Niw3ICszNTYsNyBAQAogCWFyZ3NfYnVmLT5zdGF0dXMgPSByYzsKIH0KIAotc3RhdGljIHNzaXplX3QgbWFuYWdlX2ZsYXNoX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IG1hbmFnZV9mbGFzaF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwpAQCAtMzg2LDcgKzM4Niw3IEBACiAJcmV0dXJuIG1zZ2xlbjsKIH0KIAotc3RhdGljIHNzaXplX3QgbWFuYWdlX2ZsYXNoX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsCitzdGF0aWMgc3NpemVfdCBtYW5hZ2VfZmxhc2hfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgc3NpemVfdCB2YWxpZGF0ZV9mbGFzaF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsCitzdGF0aWMgc3NpemVfdCB2YWxpZGF0ZV9mbGFzaF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJcmV0dXJuIG1zZ2xlbjsKIH0KIAotc3RhdGljIHNzaXplX3QgdmFsaWRhdGVfZmxhc2hfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHZhbGlkYXRlX2ZsYXNoX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvc2NhbmxvZy5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvc2NhbmxvZy5jCmluZGV4IDE4OWI4MWEuLjRkNzA3MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3NjYW5sb2cuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9zY2FubG9nLmMKQEAgLTQzLDcgKzQzLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaWJtX3NjYW5fbG9nX2R1bXA7CQkJLyogUlRBUyB0b2tlbiAqLwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19wcGM2NF9zY2FuX2xvZ19kdW1wOwkvKiBUaGUgcHJvYyBmaWxlICovCiAKLXN0YXRpYyBzc2l6ZV90IHNjYW5sb2dfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLAorc3RhdGljIHNzaXplX3Qgc2NhbmxvZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogICAgICAgICBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJLypOT1RSRUFDSEVEKi8KIH0KIAotc3RhdGljIHNzaXplX3Qgc2NhbmxvZ193cml0ZShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIgKiBidWYsCitzdGF0aWMgc3NpemVfdCBzY2FubG9nX3dyaXRlKHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCiAJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCWNoYXIgc3RrYnVmWzIwXTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYTk1YTJiNC4uYmY3ODIyNyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvc2lnbmFsLmMKQEAgLTQyLDExICs0Miw3IEBACiAKICNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCiAKLSNpZm5kZWYgTUlOCi0jZGVmaW5lIE1JTihhLGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKLSNlbmRpZgotCi0jZGVmaW5lIEdQX1JFR1NfU0laRQlNSU4oc2l6ZW9mKGVsZl9ncmVnc2V0X3QpLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKQorI2RlZmluZSBHUF9SRUdTX1NJWkUJbWluKHNpemVvZihlbGZfZ3JlZ3NldF90KSwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSkKICNkZWZpbmUgRlBfUkVHU19TSVpFCXNpemVvZihlbGZfZnByZWdzZXRfdCkKIAogI2RlZmluZSBUUkFNUF9UUkFDRUJBQ0sJMwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvc2lnbmFsMzIuYyBiL2FyY2gvcHBjNjQva2VybmVsL3NpZ25hbDMyLmMKaW5kZXggYjBlMTY3ZC4uM2MyZmE1YyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvc2lnbmFsMzIuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9zaWduYWwzMi5jCkBAIC02NTcsNyArNjU3LDcgQEAKIAogCS8qIFNhdmUgdXNlciByZWdpc3RlcnMgb24gdGhlIHN0YWNrICovCiAJZnJhbWUgPSAmcnRfc2YtPnVjLnVjX21jb250ZXh0OwotCWlmIChwdXRfdXNlcihyZWdzLT5ncHJbMV0sICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKW5ld3NwKSkKKwlpZiAocHV0X3VzZXIocmVncy0+Z3ByWzFdLCAodTMyIF9fdXNlciAqKW5ld3NwKSkKIAkJZ290byBiYWRmcmFtZTsKIAogCWlmICh2ZHNvMzJfcnRfc2lndHJhbXAgJiYgY3VycmVudC0+dGhyZWFkLnZkc29fYmFzZSkgewpAQCAtODQyLDcgKzg0Miw3IEBACiAJCXJlZ3MtPmxpbmsgPSAodW5zaWduZWQgbG9uZykgZnJhbWUtPm1jdHgudHJhbXA7CiAJfQogCi0JaWYgKHB1dF91c2VyKHJlZ3MtPmdwclsxXSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopbmV3c3ApKQorCWlmIChwdXRfdXNlcihyZWdzLT5ncHJbMV0sICh1MzIgX191c2VyICopbmV3c3ApKQogCQlnb3RvIGJhZGZyYW1lOwogCXJlZ3MtPmdwclsxXSA9ICh1bnNpZ25lZCBsb25nKSBuZXdzcDsKIAlyZWdzLT5ncHJbM10gPSBzaWc7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvcHBjNjQva2VybmVsL3NtcC5jCmluZGV4IDFjOTJkYTMuLjNiOTA2Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3NtcC5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkgKiB0aGUgcHJvY2Vzc29yIHdpbGwgY29udGludWUgb24gdG8gc2Vjb25kYXJ5X3N0YXJ0CiAJICovCiAJcGFjYVtucl0uY3B1X3N0YXJ0ID0gMTsKLQltYigpOworCXNtcF9tYigpOwogfQogCiAjZW5kaWYgLyogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNICovCkBAIC0yNTYsNyArMjU2LDcgQEAKIAl9CiAKIAljYWxsX2RhdGEgPSAmZGF0YTsKLQl3bWIoKTsKKwlzbXBfd21iKCk7CiAJLyogU2VuZCBhIG1lc3NhZ2UgdG8gYWxsIG90aGVyIENQVXMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gcmVzcG9uZCAqLwogCXNtcF9vcHMtPm1lc3NhZ2VfcGFzcyhNU0dfQUxMX0JVVF9TRUxGLCBQUENfTVNHX0NBTExfRlVOQ1RJT04pOwogCkBAIC00MzEsNyArNDMxLDcgQEAKIAogCS8qIGdldCB0aGUgdGFyZ2V0IG91dCBvZiBpdCdzIGhvbGRpbmcgc3RhdGUgKi8KIAlwZXJfY3B1KGNwdV9zdGF0ZSwgY3B1KSA9IENQVV9VUF9QUkVQQVJFOwotCXdtYigpOworCXNtcF93bWIoKTsKIAogCXdoaWxlICghY3B1X29ubGluZShjcHUpKQogCQljcHVfcmVsYXgoKTsKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0JCXJtYigpOworCQlzbXBfcm1iKCk7CiAJCWlmIChwZXJfY3B1KGNwdV9zdGF0ZSwgY3B1KSA9PSBDUFVfREVBRCkKIAkJCXJldHVybjsKIAkJbXNsZWVwKDEwMCk7CkBAIC00NjMsNyArNDYzLDcgQEAKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIkNQVSVkIG9mZmxpbmVcbiIsIGNwdSk7CiAJX19nZXRfY3B1X3ZhcihjcHVfc3RhdGUpID0gQ1BVX0RFQUQ7Ci0Jd21iKCk7CisJc21wX3dtYigpOwogCXdoaWxlIChfX2dldF9jcHVfdmFyKGNwdV9zdGF0ZSkgIT0gQ1BVX1VQX1BSRVBBUkUpCiAJCWNwdV9yZWxheCgpOwogCkBAIC01MTUsNyArNTE1LDcgQEAKIAkgKiBiZSB3cml0dGVuIG91dCB0byBtYWluIHN0b3JlIGJlZm9yZSB3ZSByZWxlYXNlCiAJICogdGhlIHByb2Nlc3Nvci4KIAkgKi8KLQltYigpOworCXNtcF9tYigpOwogCiAJLyogd2FrZSB1cCBjcHVzICovCiAJREJHKCJzbXA6IGtpY2tpbmcgY3B1ICVkXG4iLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvdGltZS5jCmluZGV4IDc3ZGVkNWEuLjc3MmE0NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC90aW1lLmMKQEAgLTIyMSwxNSArMjIxLDE1IEBACiAJdGVtcF92YXJwLT50Yl90b194cyA9IGRvX2d0b2QudmFycC0+dGJfdG9feHM7CiAJdGVtcF92YXJwLT50Yl9vcmlnX3N0YW1wID0gbmV3X3RiX29yaWdfc3RhbXA7CiAJdGVtcF92YXJwLT5zdGFtcF94c2VjID0gbmV3X3N0YW1wX3hzZWM7Ci0JbWIoKTsKKwlzbXBfbWIoKTsKIAlkb19ndG9kLnZhcnAgPSB0ZW1wX3ZhcnA7CiAJZG9fZ3RvZC52YXJfaWR4ID0gdGVtcF9pZHg7CiAKIAkrKyhzeXN0ZW1jZmctPnRiX3VwZGF0ZV9jb3VudCk7Ci0Jd21iKCk7CisJc21wX3dtYigpOwogCXN5c3RlbWNmZy0+dGJfb3JpZ19zdGFtcCA9IG5ld190Yl9vcmlnX3N0YW1wOwogCXN5c3RlbWNmZy0+c3RhbXBfeHNlYyA9IG5ld19zdGFtcF94c2VjOwotCXdtYigpOworCXNtcF93bWIoKTsKIAkrKyhzeXN0ZW1jZmctPnRiX3VwZGF0ZV9jb3VudCk7CiB9CiAKQEAgLTY0OCw3ICs2NDgsNyBAQAogCXRlbXBfdmFycC0+dGJfdG9feHMgPSBuZXdfdGJfdG9feHM7CiAJdGVtcF92YXJwLT5zdGFtcF94c2VjID0gbmV3X3N0YW1wX3hzZWM7CiAJdGVtcF92YXJwLT50Yl9vcmlnX3N0YW1wID0gZG9fZ3RvZC52YXJwLT50Yl9vcmlnX3N0YW1wOwotCW1iKCk7CisJc21wX21iKCk7CiAJZG9fZ3RvZC52YXJwID0gdGVtcF92YXJwOwogCWRvX2d0b2QudmFyX2lkeCA9IHRlbXBfaWR4OwogCkBAIC02NjIsMTAgKzY2MiwxMCBAQAogCSAqIGxvb3BzIGJhY2sgYW5kIHJlYWRzIHRoZW0gYWdhaW4gdW50aWwgdGhpcyBjcml0ZXJpYSBpcyBtZXQuCiAJICovCiAJKysoc3lzdGVtY2ZnLT50Yl91cGRhdGVfY291bnQpOwotCXdtYigpOworCXNtcF93bWIoKTsKIAlzeXN0ZW1jZmctPnRiX3RvX3hzID0gbmV3X3RiX3RvX3hzOwogCXN5c3RlbWNmZy0+c3RhbXBfeHNlYyA9IG5ld19zdGFtcF94c2VjOwotCXdtYigpOworCXNtcF93bWIoKTsKIAkrKyhzeXN0ZW1jZmctPnRiX3VwZGF0ZV9jb3VudCk7CiAKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSggJnh0aW1lX2xvY2ssIGZsYWdzICk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUgYi9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUKaW5kZXggZWRlMmY3ZS4uMGIxYjBkZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIAogIyBMaXN0IG9mIGZpbGVzIGluIHRoZSB2ZHNvLCBoYXMgdG8gYmUgYXNtIG9ubHkgZm9yIG5vdwogCi1vYmotdmRzbzMyID0gc2lndHJhbXAubyBnZXR0aW1lb2ZkYXkubyBkYXRhcGFnZS5vIGNhY2hlZmx1c2gubworb2JqLXZkc28zMiA9IHNpZ3RyYW1wLm8gZ2V0dGltZW9mZGF5Lm8gZGF0YXBhZ2UubyBjYWNoZWZsdXNoLm8gbm90ZS5vCiAKICMgQnVpbGQgcnVsZXMKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2NhY2hlZmx1c2guUyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9jYWNoZWZsdXNoLlMKaW5kZXggYzc0ZmRkYi4uMGVkN2VhNyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2NhY2hlZmx1c2guUworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvY2FjaGVmbHVzaC5TCkBAIC00Nyw2ICs0Nyw3IEBACiAJYWRkaQlyNixyNiwxMjgKIAliZG56CTFiCiAJaXN5bmMKKwlsaQlyMywwCiAJYmxyCiAgIC5jZmlfZW5kcHJvYwogVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfc3luY19kaWNhY2hlKQpAQCAtNTksNiArNjAsNyBAQAogICAuY2ZpX3N0YXJ0cHJvYwogCXN5bmMKIAlpc3luYworCWxpCXIzLDAKIAlibHIKICAgLmNmaV9lbmRwcm9jCiBWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9zeW5jX2RpY2FjaGVfcDUpCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvZ2V0dGltZW9mZGF5LlMgYi9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvZ2V0dGltZW9mZGF5LlMKaW5kZXggY2E3ZjQxNS4uMmI0OGJmMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUwpAQCAtNTgsNiArNTgsNyBAQAogCXN0dwlyNSxUWk9ORV9UWl9EU1RUSU1FKHIxMSkKIAogMToJbXRscglyMTIKKwlsaQlyMywwCiAJYmxyCiAKIDI6CW1yCXIzLHIxMApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL25vdGUuUyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9ub3RlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiNWJlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9ub3RlLlMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIFRoaXMgc3VwcGxpZXMgLm5vdGUuKiBzZWN0aW9ucyB0byBnbyBpbnRvIHRoZSBQVF9OT1RFIGluc2lkZSB0aGUgdkRTTyB0ZXh0LgorICogSGVyZSB3ZSBjYW4gc3VwcGx5IHNvbWUgaW5mb3JtYXRpb24gdXNlZnVsIHRvIHVzZXJsYW5kLgorICovCisKKyNpbmNsdWRlIDxsaW51eC91dHMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNkZWZpbmUgQVNNX0VMRl9OT1RFX0JFR0lOKG5hbWUsIGZsYWdzLCB2ZW5kb3IsIHR5cGUpCQkJICAgICAgXAorCS5zZWN0aW9uIG5hbWUsIGZsYWdzOwkJCQkJCSAgICAgIFwKKwkuYmFsaWduIDQ7CQkJCQkJCSAgICAgIFwKKwkubG9uZyAxZiAtIDBmOwkJLyogbmFtZSBsZW5ndGggKi8JCQkgICAgICBcCisJLmxvbmcgM2YgLSAyZjsJCS8qIGRhdGEgbGVuZ3RoICovCQkJICAgICAgXAorCS5sb25nIHR5cGU7CQkvKiBub3RlIHR5cGUgKi8JCQkJICAgICAgXAorMDoJLmFzY2l6IHZlbmRvcjsJCS8qIHZlbmRvciBuYW1lICovCQkJICAgICAgXAorMToJLmJhbGlnbiA0OwkJCQkJCQkgICAgICBcCisyOgorCisjZGVmaW5lIEFTTV9FTEZfTk9URV9FTkQJCQkJCQkgICAgICBcCiszOgkuYmFsaWduIDQ7CQkvKiBwYWQgb3V0IHNlY3Rpb24gKi8JCQkgICAgICBcCisJLnByZXZpb3VzCisKKwlBU01fRUxGX05PVEVfQkVHSU4oIi5ub3RlLmtlcm5lbC12ZXJzaW9uIiwgImEiLCBVVFNfU1lTTkFNRSwgMCkKKwkubG9uZyBMSU5VWF9WRVJTSU9OX0NPREUKKwlBU01fRUxGX05PVEVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwppbmRleCBjY2EyN2JkLi4xMTI5MGM5IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKQEAgLTIwLDYgKzIwLDggQEAKICAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CiAgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQogCisgIC5ub3RlCQkgIDogeyAqKC5ub3RlLiopIH0gCQkJOnRleHQJOm5vdGUKKwogICAuID0gQUxJR04gKDE2KTsKICAgLnRleHQgOgogICB7CkBAIC04Nyw2ICs4OSw3IEBACiBQSERSUwogewogICB0ZXh0IFBUX0xPQUQgRklMRUhEUiBQSERSUyBGTEFHUyg1KTsgLyogUEZfUnxQRl9YICovCisgIG5vdGUgUFRfTk9URSBGTEFHUyg0KTsgLyogUEZfUiAqLwogICBkeW5hbWljIFBUX0RZTkFNSUMgRkxBR1MoNCk7IC8qIFBGX1IgKi8KICAgZWhfZnJhbWVfaGRyIDB4NjQ3NGU1NTA7IC8qIFBUX0dOVV9FSF9GUkFNRSwgYnV0IGxkIGRvZXNuJ3QgbWF0Y2ggdGhlIG5hbWUgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9NYWtlZmlsZSBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9NYWtlZmlsZQppbmRleCBiZDNmNzBiLi5hYjM5OTg4IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogIyBMaXN0IG9mIGZpbGVzIGluIHRoZSB2ZHNvLCBoYXMgdG8gYmUgYXNtIG9ubHkgZm9yIG5vdwogCi1vYmotdmRzbzY0ID0gc2lndHJhbXAubyBnZXR0aW1lb2ZkYXkubyBkYXRhcGFnZS5vIGNhY2hlZmx1c2gubworb2JqLXZkc282NCA9IHNpZ3RyYW1wLm8gZ2V0dGltZW9mZGF5Lm8gZGF0YXBhZ2UubyBjYWNoZWZsdXNoLm8gbm90ZS5vCiAKICMgQnVpbGQgcnVsZXMKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L2NhY2hlZmx1c2guUyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9jYWNoZWZsdXNoLlMKaW5kZXggZDk2OTZmZi4uZTA3MjViNyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L2NhY2hlZmx1c2guUworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvY2FjaGVmbHVzaC5TCkBAIC00Nyw2ICs0Nyw3IEBACiAJYWRkaQlyNixyNiwxMjgKIAliZG56CTFiCiAJaXN5bmMKKwlsaQlyMywwCiAJYmxyCiAgIC5jZmlfZW5kcHJvYwogVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfc3luY19kaWNhY2hlKQpAQCAtNTksNiArNjAsNyBAQAogICAuY2ZpX3N0YXJ0cHJvYwogCXN5bmMKIAlpc3luYworCWxpCXIzLDAKIAlibHIKICAgLmNmaV9lbmRwcm9jCiBWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9zeW5jX2RpY2FjaGVfcDUpCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvbm90ZS5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L25vdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzJhNTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L25vdGUuUwpAQCAtMCwwICsxIEBACisjaW5jbHVkZSAiLi4vdmRzbzMyL25vdGUuUyIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMgYi9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TCmluZGV4IDk0MmM4MTUuLjljYjI4MTggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUwpAQCAtMTgsMTIgKzE4LDE0IEBACiAgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQogICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KIAorICAubm90ZQkJICA6IHsgKigubm90ZS4qKSB9CQk6dGV4dAk6bm90ZQorCiAgIC4gPSBBTElHTiAoMTYpOwogICAudGV4dCAgICAgICAgICAgOgogICB7CiAgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQogICAgICooLnNmcHIgLmdsaW5rKQotICB9CisgIH0JCQkJCQk6dGV4dAogICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CiAgIFBST1ZJREUgKF9ldGV4dCA9IC4pOwogICBQUk9WSURFIChldGV4dCA9IC4pOwpAQCAtODgsNiArOTAsNyBAQAogUEhEUlMKIHsKICAgdGV4dCBQVF9MT0FEIEZJTEVIRFIgUEhEUlMgRkxBR1MoNSk7IC8qIFBGX1J8UEZfWCAqLworICBub3RlIFBUX05PVEUgRkxBR1MoNCk7IC8qIFBGX1IgKi8KICAgZHluYW1pYyBQVF9EWU5BTUlDIEZMQUdTKDQpOyAvKiBQRl9SICovCiAgIGVoX2ZyYW1lX2hkciAweDY0NzRlNTUwOyAvKiBQVF9HTlVfRUhfRlJBTUUsIGJ1dCBsZCBkb2Vzbid0IG1hdGNoIHRoZSBuYW1lICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC94aWNzLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC94aWNzLmMKaW5kZXggZWVkZDFkMy4uODc5ZjM5YiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwveGljcy5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3hpY3MuYwpAQCAtNDMyLDYgKzQzMiw3IEBACiB7CiAJb3BzLT5xaXJyX2luZm8oY3B1LCBJUElfUFJJT1JJVFkpOwogfQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogdm9pZCB4aWNzX3NldHVwX2NwdSh2b2lkKQogewpAQCAtNDM5LDkgKzQ0MCwxNyBAQAogCiAJb3BzLT5jcHByX2luZm8oY3B1LCAweGZmKTsKIAlpb3N5bmMoKTsKLX0KIAotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwkvKgorCSAqIFB1dCB0aGUgY2FsbGluZyBwcm9jZXNzb3IgaW50byB0aGUgR0lRLiAgVGhpcyBpcyByZWFsbHkgb25seQorCSAqIG5lY2Vzc2FyeSBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCBhcyB0aGUgT0Ygc3RhcnQtY3B1IGludGVyZmFjZQorCSAqIHBlcmZvcm1zIHRoaXMgZnVuY3Rpb24gZm9yIHVzIG9uIHByaW1hcnkgdGhyZWFkcy4KKwkgKgorCSAqIFhYWDogdW5kbyBvZiB0ZWFyZG93biBvbiBrZXhlYyBuZWVkcyB0aGlzIHRvbywgYXMgbWF5IGhvdHBsdWcKKwkgKi8KKwlydGFzX3NldF9pbmRpY2F0b3IoR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwKKwkJKDFVTCA8PCBpbnRlcnJ1cHRfc2VydmVyX3NpemUpIC0gMSAtIGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDEpOworfQogCiB2b2lkIHhpY3NfaW5pdF9JUlEodm9pZCkKIHsKQEAgLTU2Myw4ICs1NzIsNyBAQAogCWZvciAoOyBpIDwgTlJfSVJRUzsgKytpKQogCQlnZXRfaXJxX2Rlc2MoaSktPmhhbmRsZXIgPSAmeGljc19waWM7CiAKLQlvcHMtPmNwcHJfaW5mbyhib290X2NwdWlkLCAweGZmKTsKLQlpb3N5bmMoKTsKKwl4aWNzX3NldHVwX2NwdSgpOwogCiAJcHBjNjRfYm9vdF9tc2coMHgyMSwgIlhJQ1MgRG9uZSIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9oYXNoX2xvdy5TIGIvYXJjaC9wcGM2NC9tbS9oYXNoX2xvdy5TCmluZGV4IDhjMDE1NmEuLmMyM2Q0NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvbW0vaGFzaF9sb3cuUworKysgYi9hcmNoL3BwYzY0L21tL2hhc2hfbG93LlMKQEAgLTg1LDcgKzg1LDEwIEBACiAJYm5lLQlodGFiX3dyb25nX2FjY2VzcwogCS8qIENoZWNrIGlmIFBURSBpcyBidXN5ICovCiAJYW5kaS4JcjAscjMxLF9QQUdFX0JVU1kKLQlibmUtCTFiCisJLyogSWYgc28sIGp1c3QgYmFpbCBvdXQgYW5kIHJlZmF1bHQgaWYgbmVlZGVkLiBTb21lb25lIGVsc2UKKwkgKiBpcyBjaGFuZ2luZyB0aGlzIFBURSBhbnl3YXkgYW5kIG1pZ2h0IGhhc2ggaXQuCisJICovCisJYm5lLQliYWlsX29rCiAJLyogUHJlcGFyZSBuZXcgUFRFIHZhbHVlICh0dXJuIGFjY2VzcyBSVyBpbnRvIERJUlRZLCB0aGVuCiAJICogYWRkIEJVU1ksSEFTSFBURSBhbmQgQUNDRVNTRUQpCiAJICovCkBAIC0yMTUsNiArMjE4LDEwIEBACiAJLyogVHJ5IGFsbCBhZ2FpbiAqLwogCWIJaHRhYl9pbnNlcnRfcHRlCQogCitiYWlsX29rOgorCWxpCXIzLDAKKwliCWJhaWwKKwogaHRhYl9wdGVfaW5zZXJ0X29rOgogCS8qIEluc2VydCBzbG90IG51bWJlciAmIHNlY29uZGFyeSBiaXQgaW4gUFRFICovCiAJcmxkaW1pCXIzMCxyMywxMiw2My0xNQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9oYXNoX25hdGl2ZS5jIGIvYXJjaC9wcGM2NC9tbS9oYXNoX25hdGl2ZS5jCmluZGV4IDE0NDY1N2UuLjUyYjZiOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvbW0vaGFzaF9uYXRpdmUuYworKysgYi9hcmNoL3BwYzY0L21tL2hhc2hfbmF0aXZlLmMKQEAgLTMyMCw4ICszMjAsNyBAQAogCiAJaiA9IDA7CiAJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7Ci0JCWlmICgoYmF0Y2gtPmFkZHJbaV0gPj0gVVNFUl9TVEFSVCkgJiYKLQkJICAgIChiYXRjaC0+YWRkcltpXSA8PSBVU0VSX0VORCkpCisJCWlmIChiYXRjaC0+YWRkcltpXSA8IEtFUk5FTEJBU0UpCiAJCQl2c2lkID0gZ2V0X3ZzaWQoY29udGV4dCwgYmF0Y2gtPmFkZHJbaV0pOwogCQllbHNlCiAJCQl2c2lkID0gZ2V0X2tlcm5lbF92c2lkKGJhdGNoLT5hZGRyW2ldKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvbW0vaGFzaF91dGlscy5jIGIvYXJjaC9wcGM2NC9tbS9oYXNoX3V0aWxzLmMKaW5kZXggZTQ4YmUxMi4uMGEwZjk3MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9tbS9oYXNoX3V0aWxzLmMKKysrIGIvYXJjaC9wcGM2NC9tbS9oYXNoX3V0aWxzLmMKQEAgLTI5OCwyNCArMjk4LDIzIEBACiAJaW50IGxvY2FsID0gMDsKIAljcHVtYXNrX3QgdG1wOwogCisJaWYgKChlYSAmIH5SRUdJT05fTUFTSykgPiBFQUREUl9NQVNLKQorCQlyZXR1cm4gMTsKKwogIAlzd2l0Y2ggKFJFR0lPTl9JRChlYSkpIHsKIAljYXNlIFVTRVJfUkVHSU9OX0lEOgogCQl1c2VyX3JlZ2lvbiA9IDE7CiAJCW1tID0gY3VycmVudC0+bW07Ci0JCWlmICgoZWEgPiBVU0VSX0VORCkgfHwgKCEgbW0pKQorCQlpZiAoISBtbSkKIAkJCXJldHVybiAxOwogCiAJCXZzaWQgPSBnZXRfdnNpZChtbS0+Y29udGV4dC5pZCwgZWEpOwogCQlicmVhazsKIAljYXNlIElPX1JFR0lPTl9JRDoKLQkJaWYgKGVhID4gSU1BTExPQ19FTkQpCi0JCQlyZXR1cm4gMTsKIAkJbW0gPSAmaW9yZW1hcF9tbTsKIAkJdnNpZCA9IGdldF9rZXJuZWxfdnNpZChlYSk7CiAJCWJyZWFrOwogCWNhc2UgVk1BTExPQ19SRUdJT05fSUQ6Ci0JCWlmIChlYSA+IFZNQUxMT0NfRU5EKQotCQkJcmV0dXJuIDE7CiAJCW1tID0gJmluaXRfbW07CiAJCXZzaWQgPSBnZXRfa2VybmVsX3ZzaWQoZWEpOwogCQlicmVhazsKQEAgLTM2Miw3ICszNjEsNyBAQAogCXVuc2lnbmVkIGxvbmcgdnNpZCwgdnBuLCB2YSwgaGFzaCwgc2Vjb25kYXJ5LCBzbG90OwogCXVuc2lnbmVkIGxvbmcgaHVnZSA9IHB0ZV9odWdlKHB0ZSk7CiAKLQlpZiAoKGVhID49IFVTRVJfU1RBUlQpICYmIChlYSA8PSBVU0VSX0VORCkpCisJaWYgKGVhIDwgS0VSTkVMQkFTRSkKIAkJdnNpZCA9IGdldF92c2lkKGNvbnRleHQsIGVhKTsKIAllbHNlCiAJCXZzaWQgPSBnZXRfa2VybmVsX3ZzaWQoZWEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9wcGM2NC9tbS9odWdldGxicGFnZS5jCmluZGV4IDM5MDI5NmUuLmQzYmY4NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3BwYzY0L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAlyZXR1cm4gKGFkZHIgJiB+UkVHSU9OX01BU0spID4+IEhVR0VQR0RJUl9TSElGVDsKIH0KIAotc3RhdGljIHBnZF90ICpodWdlcGdkX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIHB1ZF90ICpodWdlcGdkX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCWludCBpbmRleDsKIApAQCAtNTIsMjEgKzUyLDIxIEBACiAKIAlpbmRleCA9IGh1Z2VwZ2RfaW5kZXgoYWRkcik7CiAJQlVHX09OKGluZGV4ID49IFBUUlNfUEVSX0hVR0VQR0QpOwotCXJldHVybiBtbS0+Y29udGV4dC5odWdlX3BnZGlyICsgaW5kZXg7CisJcmV0dXJuIChwdWRfdCAqKShtbS0+Y29udGV4dC5odWdlX3BnZGlyICsgaW5kZXgpOwogfQogCi1zdGF0aWMgaW5saW5lIHB0ZV90ICpodWdlcHRlX29mZnNldChwZ2RfdCAqZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIHB0ZV90ICpodWdlcHRlX29mZnNldChwdWRfdCAqZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaW50IGluZGV4OwogCi0JaWYgKHBnZF9ub25lKCpkaXIpKQorCWlmIChwdWRfbm9uZSgqZGlyKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpbmRleCA9IChhZGRyID4+IEhQQUdFX1NISUZUKSAlIFBUUlNfUEVSX0hVR0VQVEU7Ci0JcmV0dXJuIChwdGVfdCAqKXBnZF9wYWdlKCpkaXIpICsgaW5kZXg7CisJcmV0dXJuIChwdGVfdCAqKXB1ZF9wYWdlKCpkaXIpICsgaW5kZXg7CiB9CiAKLXN0YXRpYyBwZ2RfdCAqaHVnZXBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIHB1ZF90ICpodWdlcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJQlVHX09OKCEgaW5faHVnZXBhZ2VfYXJlYShtbS0+Y29udGV4dCwgYWRkcikpOwogCkBAIC05MCwxMCArOTAsOSBAQAogCXJldHVybiBodWdlcGdkX29mZnNldChtbSwgYWRkcik7CiB9CiAKLXN0YXRpYyBwdGVfdCAqaHVnZXB0ZV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKmRpciwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgcHRlX3QgKmh1Z2VwdGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpkaXIsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlpZiAoISBwZ2RfcHJlc2VudCgqZGlyKSkgeworCWlmICghIHB1ZF9wcmVzZW50KCpkaXIpKSB7CiAJCXB0ZV90ICpuZXc7CiAKIAkJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwpAQCAtMTA0LDcgKzEwMyw3IEBACiAJCSAqIEJlY2F1c2Ugd2UgZHJvcHBlZCB0aGUgbG9jaywgd2Ugc2hvdWxkIHJlLWNoZWNrIHRoZQogCQkgKiBlbnRyeSwgYXMgc29tZWJvZHkgZWxzZSBjb3VsZCBoYXZlIHBvcHVsYXRlZCBpdC4uCiAJCSAqLwotCQlpZiAocGdkX3ByZXNlbnQoKmRpcikpIHsKKwkJaWYgKHB1ZF9wcmVzZW50KCpkaXIpKSB7CiAJCQlpZiAobmV3KQogCQkJCWttZW1fY2FjaGVfZnJlZSh6ZXJvX2NhY2hlLCBuZXcpOwogCQl9IGVsc2UgewpAQCAtMTE1LDcgKzExNCw3IEBACiAJCQlwdGVwYWdlID0gdmlydF90b19wYWdlKG5ldyk7CiAJCQlwdGVwYWdlLT5tYXBwaW5nID0gKHZvaWQgKikgbW07CiAJCQlwdGVwYWdlLT5pbmRleCA9IGFkZHIgJiBIVUdFUEdESVJfTUFTSzsKLQkJCXBnZF9wb3B1bGF0ZShtbSwgZGlyLCBuZXcpOworCQkJcHVkX3BvcHVsYXRlKG1tLCBkaXIsIG5ldyk7CiAJCX0KIAl9CiAKQEAgLTEyNCwyOCArMTIzLDI4IEBACiAKIHN0YXRpYyBwdGVfdCAqaHVnZV9wdGVfb2Zmc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOwogCiAJQlVHX09OKCEgaW5faHVnZXBhZ2VfYXJlYShtbS0+Y29udGV4dCwgYWRkcikpOwogCi0JcGdkID0gaHVnZXBnZF9vZmZzZXQobW0sIGFkZHIpOwotCWlmICghIHBnZCkKKwlwdWQgPSBodWdlcGdkX29mZnNldChtbSwgYWRkcik7CisJaWYgKCEgcHVkKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBodWdlcHRlX29mZnNldChwZ2QsIGFkZHIpOworCXJldHVybiBodWdlcHRlX29mZnNldChwdWQsIGFkZHIpOwogfQogCiBzdGF0aWMgcHRlX3QgKmh1Z2VfcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOwogCiAJQlVHX09OKCEgaW5faHVnZXBhZ2VfYXJlYShtbS0+Y29udGV4dCwgYWRkcikpOwogCi0JcGdkID0gaHVnZXBnZF9hbGxvYyhtbSwgYWRkcik7Ci0JaWYgKCEgcGdkKQorCXB1ZCA9IGh1Z2VwZ2RfYWxsb2MobW0sIGFkZHIpOworCWlmICghIHB1ZCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gaHVnZXB0ZV9hbGxvYyhtbSwgcGdkLCBhZGRyKTsKKwlyZXR1cm4gaHVnZXB0ZV9hbGxvYyhtbSwgcHVkLCBhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X2h1Z2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKQEAgLTcwOSwxMCArNzA4LDEwIEBACiAKIAkvKiBjbGVhbnVwIGFueSBodWdlcHRlIHBhZ2VzIGxlZnRvdmVyICovCiAJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX0hVR0VQR0Q7IGkrKykgewotCQlwZ2RfdCAqcGdkID0gcGdkaXIgKyBpOworCQlwdWRfdCAqcHVkID0gKHB1ZF90ICopKHBnZGlyICsgaSk7CiAKLQkJaWYgKCEgcGdkX25vbmUoKnBnZCkpIHsKLQkJCXB0ZV90ICpwdGUgPSAocHRlX3QgKilwZ2RfcGFnZSgqcGdkKTsKKwkJaWYgKCEgcHVkX25vbmUoKnB1ZCkpIHsKKwkJCXB0ZV90ICpwdGUgPSAocHRlX3QgKilwdWRfcGFnZSgqcHVkKTsKIAkJCXN0cnVjdCBwYWdlICpwdGVwYWdlID0gdmlydF90b19wYWdlKHB0ZSk7CiAKIAkJCXB0ZXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwpAQCAtNzIwLDcgKzcxOSw3IEBACiAJCQlCVUdfT04obWVtY21wKHB0ZSwgZW1wdHlfemVyb19wYWdlLCBQQUdFX1NJWkUpKTsKIAkJCWttZW1fY2FjaGVfZnJlZSh6ZXJvX2NhY2hlLCBwdGUpOwogCQl9Ci0JCXBnZF9jbGVhcihwZ2QpOworCQlwdWRfY2xlYXIocHVkKTsKIAl9CiAKIAlCVUdfT04obWVtY21wKHBnZGlyLCBlbXB0eV96ZXJvX3BhZ2UsIFBBR0VfU0laRSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9pbWFsbG9jLmMgYi9hcmNoL3BwYzY0L21tL2ltYWxsb2MuYwppbmRleCA5ZDkyYjBkLi5jYjg3MjdmIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L21tL2ltYWxsb2MuYworKysgYi9hcmNoL3BwYzY0L21tL2ltYWxsb2MuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtL2ltYWxsb2MuaD4KIAogc3RhdGljIERFQ0xBUkVfTVVURVgoaW1saXN0X3NlbSk7CiBzdHJ1Y3Qgdm1fc3RydWN0ICogaW1saXN0ID0gTlVMTDsKQEAgLTIzLDExICsyNCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICoqcCwgKnRtcDsKIAotCWFkZHIgPSBJTUFMTE9DX1NUQVJUOworCWFkZHIgPSBpb3JlbWFwX2JvdDsKIAlmb3IgKHAgPSAmaW1saXN0OyAodG1wID0gKnApIDsgcCA9ICZ0bXAtPm5leHQpIHsKIAkJaWYgKHNpemUgKyBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpIHRtcC0+YWRkcikKIAkJCWJyZWFrOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyID49IElNQUxMT0NfU1RBUlQpIAorCQlpZiAoKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyID49IGlvcmVtYXBfYm90KQogCQkJYWRkciA9IHRtcC0+c2l6ZSArICh1bnNpZ25lZCBsb25nKSB0bXAtPmFkZHI7CiAJCWlmIChhZGRyID4gSU1BTExPQ19FTkQtc2l6ZSkgCiAJCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvbW0vaW5pdC5jIGIvYXJjaC9wcGM2NC9tbS9pbml0LmMKaW5kZXggYTcxNDliOS4uNGI0MmFmZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9wcGM2NC9tbS9pbml0LmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KICNpbmNsdWRlIDxhc20vdmRzby5oPgorI2luY2x1ZGUgPGFzbS9pbWFsbG9jLmg+CiAKIGludCBtZW1faW5pdF9kb25lOwogdW5zaWduZWQgbG9uZyBpb3JlbWFwX2JvdCA9IElNQUxMT0NfQkFTRTsKQEAgLTEzNiwxNCArMTM3LDc4IEBACiAKICNlbHNlCiAKK3N0YXRpYyB2b2lkIHVubWFwX2ltX2FyZWFfcHRlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXB0ZV90ICpwdGU7CisKKwlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpOworCWRvIHsKKwkJcHRlX3QgcHRlbnQgPSBwdGVwX2dldF9hbmRfY2xlYXIoJmlvcmVtYXBfbW0sIGFkZHIsIHB0ZSk7CisJCVdBUk5fT04oIXB0ZV9ub25lKHB0ZW50KSAmJiAhcHRlX3ByZXNlbnQocHRlbnQpKTsKKwl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVubWFwX2ltX2FyZWFfcG1kKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXBtZF90ICpwbWQ7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCWRvIHsKKwkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCQlpZiAocG1kX25vbmVfb3JfY2xlYXJfYmFkKHBtZCkpCisJCQljb250aW51ZTsKKwkJdW5tYXBfaW1fYXJlYV9wdGUocG1kLCBhZGRyLCBuZXh0KTsKKwl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVubWFwX2ltX2FyZWFfcHVkKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXB1ZF90ICpwdWQ7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCWRvIHsKKwkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCQlpZiAocHVkX25vbmVfb3JfY2xlYXJfYmFkKHB1ZCkpCisJCQljb250aW51ZTsKKwkJdW5tYXBfaW1fYXJlYV9wbWQocHVkLCBhZGRyLCBuZXh0KTsKKwl9IHdoaWxlIChwdWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKK30KKworc3RhdGljIHZvaWQgdW5tYXBfaW1fYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gJmlvcmVtYXBfbW07CisJdW5zaWduZWQgbG9uZyBuZXh0OworCXBnZF90ICpwZ2Q7CisKKwlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCisJcGdkID0gcGdkX29mZnNldF9pKGFkZHIpOworCWZsdXNoX2NhY2hlX3Z1bm1hcChhZGRyLCBlbmQpOworCWRvIHsKKwkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCQlpZiAocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkpCisJCQljb250aW51ZTsKKwkJdW5tYXBfaW1fYXJlYV9wdWQocGdkLCBhZGRyLCBuZXh0KTsKKwl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKKwlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpOworCisJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworfQorCiAvKgogICogbWFwX2lvX3BhZ2UgY3VycmVudGx5IG9ubHkgY2FsbGVkIGJ5IF9faW9yZW1hcAogICogbWFwX2lvX3BhZ2UgYWRkcyBhbiBlbnRyeSB0byB0aGUgaW9yZW1hcCBwYWdlIHRhYmxlCiAgKiBhbmQgYWRkcyBhbiBlbnRyeSB0byB0aGUgSFBULCBwb3NzaWJseSBib2x0aW5nIGl0CiAgKi8KLXN0YXRpYyB2b2lkIG1hcF9pb19wYWdlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgcGEsIGludCBmbGFncykKK3N0YXRpYyBpbnQgbWFwX2lvX3BhZ2UodW5zaWduZWQgbG9uZyBlYSwgdW5zaWduZWQgbG9uZyBwYSwgaW50IGZsYWdzKQogewogCXBnZF90ICpwZ2RwOworCXB1ZF90ICpwdWRwOwogCXBtZF90ICpwbWRwOwogCXB0ZV90ICpwdGVwOwogCXVuc2lnbmVkIGxvbmcgdnNpZDsKQEAgLTE1MSw5ICsyMTYsMTUgQEAKIAlpZiAobWVtX2luaXRfZG9uZSkgewogCQlzcGluX2xvY2soJmlvcmVtYXBfbW0ucGFnZV90YWJsZV9sb2NrKTsKIAkJcGdkcCA9IHBnZF9vZmZzZXRfaShlYSk7Ci0JCXBtZHAgPSBwbWRfYWxsb2MoJmlvcmVtYXBfbW0sIHBnZHAsIGVhKTsKKwkJcHVkcCA9IHB1ZF9hbGxvYygmaW9yZW1hcF9tbSwgcGdkcCwgZWEpOworCQlpZiAoIXB1ZHApCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcG1kcCA9IHBtZF9hbGxvYygmaW9yZW1hcF9tbSwgcHVkcCwgZWEpOworCQlpZiAoIXBtZHApCisJCQlyZXR1cm4gLUVOT01FTTsKIAkJcHRlcCA9IHB0ZV9hbGxvY19rZXJuZWwoJmlvcmVtYXBfbW0sIHBtZHAsIGVhKTsKLQorCQlpZiAoIXB0ZXApCisJCQlyZXR1cm4gLUVOT01FTTsKIAkJcGEgPSBhYnNfdG9fcGh5cyhwYSk7CiAJCXNldF9wdGVfYXQoJmlvcmVtYXBfbW0sIGVhLCBwdGVwLCBwZm5fcHRlKHBhID4+IFBBR0VfU0hJRlQsCiAJCQkJCQkJICBfX3BncHJvdChmbGFncykpKTsKQEAgLTE4MSw2ICsyNTIsNyBAQAogCQkJcGFuaWMoIm1hcF9pb19wYWdlOiBjb3VsZCBub3QgaW5zZXJ0IG1hcHBpbmciKTsKIAkJfQogCX0KKwlyZXR1cm4gMDsKIH0KIAogCkBAIC0xOTQsOSArMjY2LDE0IEBACiAJCWZsYWdzIHw9IHBncHJvdF92YWwoUEFHRV9LRVJORUwpOwogCiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gUEFHRV9TSVpFKQotCQltYXBfaW9fcGFnZShlYStpLCBwYStpLCBmbGFncyk7CisJCWlmIChtYXBfaW9fcGFnZShlYStpLCBwYStpLCBmbGFncykpCisJCQlnb3RvIGZhaWx1cmU7CiAKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSAoZWEgKyAoYWRkciAmIH5QQUdFX01BU0spKTsKKyBmYWlsdXJlOgorCWlmIChtZW1faW5pdF9kb25lKQorCQl1bm1hcF9pbV9hcmVhKGVhLCBlYSArIHNpemUpOworCXJldHVybiBOVUxMOwogfQogCiAKQEAgLTIwNiwxMCArMjgzLDExIEBACiAJcmV0dXJuIF9faW9yZW1hcChhZGRyLCBzaXplLCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpOwogfQogCi12b2lkIF9faW9tZW0gKgotX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQordm9pZCBfX2lvbWVtICogX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwYSwgZWE7CisJdm9pZCBfX2lvbWVtICpyZXQ7CiAKIAkvKgogCSAqIENob29zZSBhbiBhZGRyZXNzIHRvIG1hcCBpdCB0by4KQEAgLTIzMiwxMiArMzEwLDE2IEBACiAJCWlmIChhcmVhID09IE5VTEwpCiAJCQlyZXR1cm4gTlVMTDsKIAkJZWEgPSAodW5zaWduZWQgbG9uZykoYXJlYS0+YWRkcik7CisJCXJldCA9IF9faW9yZW1hcF9jb20oYWRkciwgcGEsIGVhLCBzaXplLCBmbGFncyk7CisJCWlmICghcmV0KQorCQkJaW1fZnJlZShhcmVhLT5hZGRyKTsKIAl9IGVsc2UgewogCQllYSA9IGlvcmVtYXBfYm90OwotCQlpb3JlbWFwX2JvdCArPSBzaXplOworCQlyZXQgPSBfX2lvcmVtYXBfY29tKGFkZHIsIHBhLCBlYSwgc2l6ZSwgZmxhZ3MpOworCQlpZiAocmV0KQorCQkJaW9yZW1hcF9ib3QgKz0gc2l6ZTsKIAl9Ci0KLQlyZXR1cm4gX19pb3JlbWFwX2NvbShhZGRyLCBwYSwgZWEsIHNpemUsIGZsYWdzKTsKKwlyZXR1cm4gcmV0OwogfQogCiAjZGVmaW5lIElTX1BBR0VfQUxJR05FRChfdmFsKSAoKF92YWwpID09ICgoX3ZhbCkgJiBQQUdFX01BU0spKQpAQCAtMjQ2LDYgKzMyOCw3IEBACiAJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKKwl2b2lkIF9faW9tZW0gKnJldDsKIAkKIAkvKiBGb3Igbm93LCByZXF1aXJlIHBhZ2UtYWxpZ25lZCB2YWx1ZXMgZm9yIHBhLCBlYSwgYW5kIHNpemUgKi8KIAlpZiAoIUlTX1BBR0VfQUxJR05FRChwYSkgfHwgIUlTX1BBR0VfQUxJR05FRChlYSkgfHwKQEAgLTI3Niw3ICszNTksMTIgQEAKIAkJfQogCX0KIAkKLQlpZiAoX19pb3JlbWFwX2NvbShwYSwgcGEsIGVhLCBzaXplLCBmbGFncykgIT0gKHZvaWQgKikgZWEpIHsKKwlyZXQgPSBfX2lvcmVtYXBfY29tKHBhLCBwYSwgZWEsIHNpemUsIGZsYWdzKTsKKwlpZiAocmV0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpb3JlbWFwX2V4cGxpY2l0KCkgYWxsb2NhdGlvbiBmYWlsdXJlICFcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKHJldCAhPSAodm9pZCAqKSBlYSkgewogCQlwcmludGsoS0VSTl9FUlIgIl9faW9yZW1hcF9jb20oKSByZXR1cm5lZCB1bmV4cGVjdGVkIGFkZHJcbiIpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0yODQsNjkgKzM3Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHVubWFwX2ltX2FyZWFfcHRlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGJhc2UsIGVuZDsKLQlwdGVfdCAqcHRlOwotCi0JaWYgKHBtZF9ub25lKCpwbWQpKQotCQlyZXR1cm47Ci0JaWYgKHBtZF9iYWQoKnBtZCkpIHsKLQkJcG1kX0VSUk9SKCpwbWQpOwotCQlwbWRfY2xlYXIocG1kKTsKLQkJcmV0dXJuOwotCX0KLQotCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7Ci0JYmFzZSA9IGFkZHJlc3MgJiBQTURfTUFTSzsKLQlhZGRyZXNzICY9IH5QTURfTUFTSzsKLQllbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQlpZiAoZW5kID4gUE1EX1NJWkUpCi0JCWVuZCA9IFBNRF9TSVpFOwotCi0JZG8gewotCQlwdGVfdCBwYWdlOwotCQlwYWdlID0gcHRlcF9nZXRfYW5kX2NsZWFyKCZpb3JlbWFwX21tLCBiYXNlICsgYWRkcmVzcywgcHRlKTsKLQkJYWRkcmVzcyArPSBQQUdFX1NJWkU7Ci0JCXB0ZSsrOwotCQlpZiAocHRlX25vbmUocGFnZSkpCi0JCQljb250aW51ZTsKLQkJaWYgKHB0ZV9wcmVzZW50KHBhZ2UpKQotCQkJY29udGludWU7Ci0JCXByaW50ayhLRVJOX0NSSVQgIldoZWUuLiBTd2FwcGVkIG91dCBwYWdlIGluIGtlcm5lbCBwYWdlIgotCQkgICAgICAgIiB0YWJsZVxuIik7Ci0JfSB3aGlsZSAoYWRkcmVzcyA8IGVuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubWFwX2ltX2FyZWFfcG1kKHBnZF90ICpkaXIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGJhc2UsIGVuZDsKLQlwbWRfdCAqcG1kOwotCi0JaWYgKHBnZF9ub25lKCpkaXIpKQotCQlyZXR1cm47Ci0JaWYgKHBnZF9iYWQoKmRpcikpIHsKLQkJcGdkX0VSUk9SKCpkaXIpOwotCQlwZ2RfY2xlYXIoZGlyKTsKLQkJcmV0dXJuOwotCX0KLQotCXBtZCA9IHBtZF9vZmZzZXQoZGlyLCBhZGRyZXNzKTsKLQliYXNlID0gYWRkcmVzcyAmIFBHRElSX01BU0s7Ci0JYWRkcmVzcyAmPSB+UEdESVJfTUFTSzsKLQllbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQlpZiAoZW5kID4gUEdESVJfU0laRSkKLQkJZW5kID0gUEdESVJfU0laRTsKLQotCWRvIHsKLQkJdW5tYXBfaW1fYXJlYV9wdGUocG1kLCBiYXNlICsgYWRkcmVzcywgZW5kIC0gYWRkcmVzcyk7Ci0JCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOwotCQlwbWQrKzsKLQl9IHdoaWxlIChhZGRyZXNzIDwgZW5kKTsKLX0KLQogLyogIAogICogVW5tYXAgYW4gSU8gcmVnaW9uIGFuZCByZW1vdmUgaXQgZnJvbSBpbWFsbG9jJ2QgbGlzdC4KICAqIEFjY2VzcyB0byBJTyBtZW1vcnkgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgYnkgZHJpdmVyLgpAQCAtMzU2LDM5ICszODEsMTkgQEAKICAqLwogdm9pZCBpb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG9rZW4pCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdGFydCwgZW5kLCBzaXplOwotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCXBnZF90ICpkaXI7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzaXplOwogCXZvaWQgKmFkZHI7CiAKLQlpZiAoIW1lbV9pbml0X2RvbmUpIHsKKwlpZiAoIW1lbV9pbml0X2RvbmUpCiAJCXJldHVybjsKLQl9CiAJCiAJYWRkciA9ICh2b2lkICopICgodW5zaWduZWQgbG9uZyBfX2ZvcmNlKSB0b2tlbiAmIFBBR0VfTUFTSyk7CiAJCi0JaWYgKChzaXplID0gaW1fZnJlZShhZGRyKSkgPT0gMCkgeworCWlmICgoc2l6ZSA9IGltX2ZyZWUoYWRkcikpID09IDApCiAJCXJldHVybjsKLQl9CiAKIAlhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsgCi0Jc3RhcnQgPSBhZGRyZXNzOwotCWVuZCA9IGFkZHJlc3MgKyBzaXplOwotCi0JbW0gPSAmaW9yZW1hcF9tbTsKLQlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwotCi0JZGlyID0gcGdkX29mZnNldF9pKGFkZHJlc3MpOwotCWZsdXNoX2NhY2hlX3Z1bm1hcChhZGRyZXNzLCBlbmQpOwotCWRvIHsKLQkJdW5tYXBfaW1fYXJlYV9wbWQoZGlyLCBhZGRyZXNzLCBlbmQgLSBhZGRyZXNzKTsKLQkJYWRkcmVzcyA9IChhZGRyZXNzICsgUEdESVJfU0laRSkgJiBQR0RJUl9NQVNLOwotCQlkaXIrKzsKLQl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7Ci0JZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTsKLQotCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKLQlyZXR1cm47CisJdW5tYXBfaW1fYXJlYShhZGRyZXNzLCBhZGRyZXNzICsgc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQgaW91bm1hcF9zdWJzZXRfcmVnaW9ucyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKQEAgLTY2NCw3ICs2NjksNyBAQAogCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gdG9wX29mX3JhbSA+PiBQQUdFX1NISUZUOwogCXpob2xlc19zaXplW1pPTkVfRE1BXSA9ICh0b3Bfb2ZfcmFtIC0gdG90YWxfcmFtKSA+PiBQQUdFX1NISUZUOwogCi0JZnJlZV9hcmVhX2luaXRfbm9kZSgwLCAmY29udGlnX3BhZ2VfZGF0YSwgem9uZXNfc2l6ZSwKKwlmcmVlX2FyZWFfaW5pdF9ub2RlKDAsIE5PREVfREFUQSgwKSwgem9uZXNfc2l6ZSwKIAkJCSAgICBfX3BhKFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZULCB6aG9sZXNfc2l6ZSk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9zbGIuYyBiL2FyY2gvcHBjNjQvbW0vc2xiLmMKaW5kZXggNmEyMDc3My4uMjQ0MTUwYSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9tbS9zbGIuYworKysgYi9hcmNoL3BwYzY0L21tL3NsYi5jCkBAIC0zMyw4ICszMyw4IEBACiAJcmV0dXJuIChnZXRfa2VybmVsX3ZzaWQoZWEpIDw8IFNMQl9WU0lEX1NISUZUKSB8IGZsYWdzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX3NsYmUodW5zaWduZWQgbG9uZyBlYSwgdW5zaWduZWQgbG9uZyB2c2lkLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgZW50cnkpCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX3NsYmUodW5zaWduZWQgbG9uZyBlYSwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVudHJ5KQogewogCWFzbSB2b2xhdGlsZSgic2xibXRlICAlMCwlMSIgOgogCQkgICAgIDogInIiIChta192c2lkX2RhdGEoZWEsIGZsYWdzKSksCkBAIC0xNDUsOSArMTQ1LDggQEAKICAJYXNtIHZvbGF0aWxlKCJpc3luYyI6OjoibWVtb3J5Iik7CiAgCWFzbSB2b2xhdGlsZSgic2xibXRlICAlMCwlMCI6OiJyIiAoMCkgOiAibWVtb3J5Iik7CiAJYXNtIHZvbGF0aWxlKCJpc3luYzsgc2xiaWE7IGlzeW5jIjo6OiJtZW1vcnkiKTsKLQljcmVhdGVfc2xiZShLRVJORUxCQVNFLCBnZXRfa2VybmVsX3ZzaWQoS0VSTkVMQkFTRSksIGZsYWdzLCAwKTsKLQljcmVhdGVfc2xiZShWTUFMTE9DQkFTRSwgZ2V0X2tlcm5lbF92c2lkKEtFUk5FTEJBU0UpLAotCQkgICAgU0xCX1ZTSURfS0VSTkVMLCAxKTsKKwljcmVhdGVfc2xiZShLRVJORUxCQVNFLCBmbGFncywgMCk7CisJY3JlYXRlX3NsYmUoVk1BTExPQ0JBU0UsIFNMQl9WU0lEX0tFUk5FTCwgMSk7CiAJLyogV2UgZG9uJ3QgYm9sdCB0aGUgc3RhY2sgZm9yIHRoZSB0aW1lIGJlaW5nIC0gd2UncmUgaW4gYm9vdCwKIAkgKiBzbyB0aGUgc3RhY2sgaXMgaW4gdGhlIGJvbHRlZCBzZWdtZW50LiAgQnkgdGhlIHRpbWUgaXQgZ29lcwogCSAqIGVsc2V3aGVyZSwgd2UnbGwgY2FsbCBfc3dpdGNoKCkgd2hpY2ggd2lsbCBib2x0IGluIHRoZSBuZXcKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvbW0vc3RhYi5jIGIvYXJjaC9wcGM2NC9tbS9zdGFiLmMKaW5kZXggMzE0OTExMy4uZGY0YmJlMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9tbS9zdGFiLmMKKysrIGIvYXJjaC9wcGM2NC9tbS9zdGFiLmMKQEAgLTE5LDYgKzE5LDExIEBACiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KIAorc3RydWN0IHN0YWJfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgZXNpZF9kYXRhOworCXVuc2lnbmVkIGxvbmcgdnNpZF9kYXRhOworfTsKKwogLyogQm90aCB0aGUgc2VnbWVudCB0YWJsZSBhbmQgU0xCIGNvZGUgdXNlcyB0aGUgZm9sbG93aW5nIGNhY2hlICovCiAjZGVmaW5lIE5SX1NUQUJfQ0FDSEVfRU5UUklFUyA4CiBERUZJTkVfUEVSX0NQVShsb25nLCBzdGFiX2NhY2hlX3B0cik7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L3htb24vcHBjLW9wYy5jIGIvYXJjaC9wcGM2NC94bW9uL3BwYy1vcGMuYwppbmRleCAxZTRlN2UzLi41ZWU4ZmMzIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L3htb24vcHBjLW9wYy5jCisrKyBiL2FyY2gvcHBjNjQveG1vbi9wcGMtb3BjLmMKQEAgLTIwLDYgKzIwLDcgQEAKICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQogICAgMDIxMTEtMTMwNywgVVNBLiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgIm5vbnN0ZGlvLmgiCiAjaW5jbHVkZSAicHBjLmgiCiAKQEAgLTExMCwxMiArMTExLDEyIEBACiAgIC8qIFRoZSB6ZXJvIGluZGV4IGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgbGlzdCBvZgogICAgICBvcGVyYW5kcy4gICovCiAjZGVmaW5lIFVOVVNFRCAwCi0gIHsgMCwgMCwgMCwgMCwgMCB9LAorICB7IDAsIDAsIE5VTEwsIE5VTEwsIDAgfSwKIAogICAvKiBUaGUgQkEgZmllbGQgaW4gYW4gWEwgZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIEJBIFVOVVNFRCArIDEKICNkZWZpbmUgQkFfTUFTSyAoMHgxZiA8PCAxNikKLSAgeyA1LCAxNiwgMCwgMCwgUFBDX09QRVJBTkRfQ1IgfSwKKyAgeyA1LCAxNiwgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfQ1IgfSwKIAogICAvKiBUaGUgQkEgZmllbGQgaW4gYW4gWEwgZm9ybSBpbnN0cnVjdGlvbiB3aGVuIGl0IG11c3QgYmUgdGhlIHNhbWUKICAgICAgYXMgdGhlIEJUIGZpZWxkIGluIHRoZSBzYW1lIGluc3RydWN0aW9uLiAgKi8KQEAgLTEyNSw3ICsxMjYsNyBAQAogICAvKiBUaGUgQkIgZmllbGQgaW4gYW4gWEwgZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIEJCIEJBVCArIDEKICNkZWZpbmUgQkJfTUFTSyAoMHgxZiA8PCAxMSkKLSAgeyA1LCAxMSwgMCwgMCwgUFBDX09QRVJBTkRfQ1IgfSwKKyAgeyA1LCAxMSwgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfQ1IgfSwKIAogICAvKiBUaGUgQkIgZmllbGQgaW4gYW4gWEwgZm9ybSBpbnN0cnVjdGlvbiB3aGVuIGl0IG11c3QgYmUgdGhlIHNhbWUKICAgICAgYXMgdGhlIEJBIGZpZWxkIGluIHRoZSBzYW1lIGluc3RydWN0aW9uLiAgKi8KQEAgLTE2OCwyMSArMTY5LDIxIEBACiAKICAgLyogVGhlIEJGIGZpZWxkIGluIGFuIFggb3IgWEwgZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIEJGIEJEUEEgKyAxCi0gIHsgMywgMjMsIDAsIDAsIFBQQ19PUEVSQU5EX0NSIH0sCisgIHsgMywgMjMsIE5VTEwsIE5VTEwsIFBQQ19PUEVSQU5EX0NSIH0sCiAKICAgLyogQW4gb3B0aW9uYWwgQkYgZmllbGQuICBUaGlzIGlzIHVzZWQgZm9yIGNvbXBhcmlzb24gaW5zdHJ1Y3Rpb25zLAogICAgICBpbiB3aGljaCBhbiBvbWl0dGVkIEJGIGZpZWxkIGlzIHRha2VuIGFzIHplcm8uICAqLwogI2RlZmluZSBPQkYgQkYgKyAxCi0gIHsgMywgMjMsIDAsIDAsIFBQQ19PUEVSQU5EX0NSIHwgUFBDX09QRVJBTkRfT1BUSU9OQUwgfSwKKyAgeyAzLCAyMywgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfQ1IgfCBQUENfT1BFUkFORF9PUFRJT05BTCB9LAogCiAgIC8qIFRoZSBCRkEgZmllbGQgaW4gYW4gWCBvciBYTCBmb3JtIGluc3RydWN0aW9uLiAgKi8KICNkZWZpbmUgQkZBIE9CRiArIDEKLSAgeyAzLCAxOCwgMCwgMCwgUFBDX09QRVJBTkRfQ1IgfSwKKyAgeyAzLCAxOCwgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfQ1IgfSwKIAogICAvKiBUaGUgQkkgZmllbGQgaW4gYSBCIGZvcm0gb3IgWEwgZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIEJJIEJGQSArIDEKICNkZWZpbmUgQklfTUFTSyAoMHgxZiA8PCAxNikKLSAgeyA1LCAxNiwgMCwgMCwgUFBDX09QRVJBTkRfQ1IgfSwKKyAgeyA1LCAxNiwgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfQ1IgfSwKIAogICAvKiBUaGUgQk8gZmllbGQgaW4gYSBCIGZvcm0gaW5zdHJ1Y3Rpb24uICBDZXJ0YWluIHZhbHVlcyBhcmUKICAgICAgaWxsZWdhbC4gICovCkBAIC0xOTcsMzYgKzE5OCwzNiBAQAogCiAgIC8qIFRoZSBCVCBmaWVsZCBpbiBhbiBYIG9yIFhMIGZvcm0gaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBCVCBCT0UgKyAxCi0gIHsgNSwgMjEsIDAsIDAsIFBQQ19PUEVSQU5EX0NSIH0sCisgIHsgNSwgMjEsIE5VTEwsIE5VTEwsIFBQQ19PUEVSQU5EX0NSIH0sCiAKICAgLyogVGhlIGNvbmRpdGlvbiByZWdpc3RlciBudW1iZXIgcG9ydGlvbiBvZiB0aGUgQkkgZmllbGQgaW4gYSBCIGZvcm0KICAgICAgb3IgWEwgZm9ybSBpbnN0cnVjdGlvbi4gIFRoaXMgaXMgdXNlZCBmb3IgdGhlIGV4dGVuZGVkCiAgICAgIGNvbmRpdGlvbmFsIGJyYW5jaCBtbmVtb25pY3MsIHdoaWNoIHNldCB0aGUgbG93ZXIgdHdvIGJpdHMgb2YgdGhlCiAgICAgIEJJIGZpZWxkLiAgVGhpcyBmaWVsZCBpcyBvcHRpb25hbC4gICovCiAjZGVmaW5lIENSIEJUICsgMQotICB7IDMsIDE4LCAwLCAwLCBQUENfT1BFUkFORF9DUiB8IFBQQ19PUEVSQU5EX09QVElPTkFMIH0sCisgIHsgMywgMTgsIE5VTEwsIE5VTEwsIFBQQ19PUEVSQU5EX0NSIHwgUFBDX09QRVJBTkRfT1BUSU9OQUwgfSwKIAogICAvKiBUaGUgQ1JCIGZpZWxkIGluIGFuIFggZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIENSQiBDUiArIDEKLSAgeyA1LCA2LCAwLCAwLCAwIH0sCisgIHsgNSwgNiwgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBDUkZEIGZpZWxkIGluIGFuIFggZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIENSRkQgQ1JCICsgMQotICB7IDMsIDIzLCAwLCAwLCBQUENfT1BFUkFORF9DUiB9LAorICB7IDMsIDIzLCBOVUxMLCBOVUxMLCBQUENfT1BFUkFORF9DUiB9LAogCiAgIC8qIFRoZSBDUkZTIGZpZWxkIGluIGFuIFggZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIENSRlMgQ1JGRCArIDEKLSAgeyAzLCAwLCAwLCAwLCBQUENfT1BFUkFORF9DUiB9LAorICB7IDMsIDAsIE5VTEwsIE5VTEwsIFBQQ19PUEVSQU5EX0NSIH0sCiAKICAgLyogVGhlIENUIGZpZWxkIGluIGFuIFggZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIENUIENSRlMgKyAxCi0gIHsgNSwgMjEsIDAsIDAsIFBQQ19PUEVSQU5EX09QVElPTkFMIH0sCisgIHsgNSwgMjEsIE5VTEwsIE5VTEwsIFBQQ19PUEVSQU5EX09QVElPTkFMIH0sCiAKICAgLyogVGhlIEQgZmllbGQgaW4gYSBEIGZvcm0gaW5zdHJ1Y3Rpb24uICBUaGlzIGlzIGEgZGlzcGxhY2VtZW50IG9mZgogICAgICBhIHJlZ2lzdGVyLCBhbmQgaW1wbGllcyB0aGF0IHRoZSBuZXh0IG9wZXJhbmQgaXMgYSByZWdpc3RlciBpbgogICAgICBwYXJlbnRoZXNlcy4gICovCiAjZGVmaW5lIEQgQ1QgKyAxCi0gIHsgMTYsIDAsIDAsIDAsIFBQQ19PUEVSQU5EX1BBUkVOUyB8IFBQQ19PUEVSQU5EX1NJR05FRCB9LAorICB7IDE2LCAwLCBOVUxMLCBOVUxMLCBQUENfT1BFUkFORF9QQVJFTlMgfCBQUENfT1BFUkFORF9TSUdORUQgfSwKIAogICAvKiBUaGUgREUgZmllbGQgaW4gYSBERSBmb3JtIGluc3RydWN0aW9uLiAgVGhpcyBpcyBsaWtlIEQsIGJ1dCBpcyAxMgogICAgICBiaXRzIG9ubHkuICAqLwpAQCAtMjUyLDQwICsyNTMsNDAgQEAKIAogICAvKiBUaGUgRSBmaWVsZCBpbiBhIHdydGVlaSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIEUgRFMgKyAxCi0gIHsgMSwgMTUsIDAsIDAsIDAgfSwKKyAgeyAxLCAxNSwgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBGTDEgZmllbGQgaW4gYSBQT1dFUiBTQyBmb3JtIGluc3RydWN0aW9uLiAgKi8KICNkZWZpbmUgRkwxIEUgKyAxCi0gIHsgNCwgMTIsIDAsIDAsIDAgfSwKKyAgeyA0LCAxMiwgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBGTDIgZmllbGQgaW4gYSBQT1dFUiBTQyBmb3JtIGluc3RydWN0aW9uLiAgKi8KICNkZWZpbmUgRkwyIEZMMSArIDEKLSAgeyAzLCAyLCAwLCAwLCAwIH0sCisgIHsgMywgMiwgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBGTE0gZmllbGQgaW4gYW4gWEZMIGZvcm0gaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBGTE0gRkwyICsgMQotICB7IDgsIDE3LCAwLCAwLCAwIH0sCisgIHsgOCwgMTcsIE5VTEwsIE5VTEwsIDAgfSwKIAogICAvKiBUaGUgRlJBIGZpZWxkIGluIGFuIFggb3IgQSBmb3JtIGluc3RydWN0aW9uLiAgKi8KICNkZWZpbmUgRlJBIEZMTSArIDEKICNkZWZpbmUgRlJBX01BU0sgKDB4MWYgPDwgMTYpCi0gIHsgNSwgMTYsIDAsIDAsIFBQQ19PUEVSQU5EX0ZQUiB9LAorICB7IDUsIDE2LCBOVUxMLCBOVUxMLCBQUENfT1BFUkFORF9GUFIgfSwKIAogICAvKiBUaGUgRlJCIGZpZWxkIGluIGFuIFggb3IgQSBmb3JtIGluc3RydWN0aW9uLiAgKi8KICNkZWZpbmUgRlJCIEZSQSArIDEKICNkZWZpbmUgRlJCX01BU0sgKDB4MWYgPDwgMTEpCi0gIHsgNSwgMTEsIDAsIDAsIFBQQ19PUEVSQU5EX0ZQUiB9LAorICB7IDUsIDExLCBOVUxMLCBOVUxMLCBQUENfT1BFUkFORF9GUFIgfSwKIAogICAvKiBUaGUgRlJDIGZpZWxkIGluIGFuIEEgZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIEZSQyBGUkIgKyAxCiAjZGVmaW5lIEZSQ19NQVNLICgweDFmIDw8IDYpCi0gIHsgNSwgNiwgMCwgMCwgUFBDX09QRVJBTkRfRlBSIH0sCisgIHsgNSwgNiwgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfRlBSIH0sCiAKICAgLyogVGhlIEZSUyBmaWVsZCBpbiBhbiBYIGZvcm0gaW5zdHJ1Y3Rpb24gb3IgdGhlIEZSVCBmaWVsZCBpbiBhIEQsIFgKICAgICAgb3IgQSBmb3JtIGluc3RydWN0aW9uLiAgKi8KICNkZWZpbmUgRlJTIEZSQyArIDEKICNkZWZpbmUgRlJUIEZSUwotICB7IDUsIDIxLCAwLCAwLCBQUENfT1BFUkFORF9GUFIgfSwKKyAgeyA1LCAyMSwgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfRlBSIH0sCiAKICAgLyogVGhlIEZYTSBmaWVsZCBpbiBhbiBYRlggaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBGWE0gRlJTICsgMQpAQCAtMjk4LDExICsyOTksMTEgQEAKIAogICAvKiBUaGUgTCBmaWVsZCBpbiBhIEQgb3IgWCBmb3JtIGluc3RydWN0aW9uLiAgKi8KICNkZWZpbmUgTCBGWE00ICsgMQotICB7IDEsIDIxLCAwLCAwLCBQUENfT1BFUkFORF9PUFRJT05BTCB9LAorICB7IDEsIDIxLCBOVUxMLCBOVUxMLCBQUENfT1BFUkFORF9PUFRJT05BTCB9LAogCiAgIC8qIFRoZSBMRVYgZmllbGQgaW4gYSBQT1dFUiBTQyBmb3JtIGluc3RydWN0aW9uLiAgKi8KICNkZWZpbmUgTEVWIEwgKyAxCi0gIHsgNywgNSwgMCwgMCwgMCB9LAorICB7IDcsIDUsIE5VTEwsIE5VTEwsIDAgfSwKIAogICAvKiBUaGUgTEkgZmllbGQgaW4gYW4gSSBmb3JtIGluc3RydWN0aW9uLiAgVGhlIGxvd2VyIHR3byBiaXRzIGFyZQogICAgICBmb3JjZWQgdG8gemVyby4gICovCkBAIC0zMTYsMjQgKzMxNywyNCBAQAogCiAgIC8qIFRoZSBMUyBmaWVsZCBpbiBhbiBYIChzeW5jKSBmb3JtIGluc3RydWN0aW9uLiAgKi8KICNkZWZpbmUgTFMgTElBICsgMQotICB7IDIsIDIxLCAwLCAwLCBQUENfT1BFUkFORF9PUFRJT05BTCB9LAorICB7IDIsIDIxLCBOVUxMLCBOVUxMLCBQUENfT1BFUkFORF9PUFRJT05BTCB9LAogCiAgIC8qIFRoZSBNQiBmaWVsZCBpbiBhbiBNIGZvcm0gaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBNQiBMUyArIDEKICNkZWZpbmUgTUJfTUFTSyAoMHgxZiA8PCA2KQotICB7IDUsIDYsIDAsIDAsIDAgfSwKKyAgeyA1LCA2LCBOVUxMLCBOVUxMLCAwIH0sCiAKICAgLyogVGhlIE1FIGZpZWxkIGluIGFuIE0gZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIE1FIE1CICsgMQogI2RlZmluZSBNRV9NQVNLICgweDFmIDw8IDEpCi0gIHsgNSwgMSwgMCwgMCwgMCB9LAorICB7IDUsIDEsIE5VTEwsIE5VTEwsIDAgfSwKIAogICAvKiBUaGUgTUIgYW5kIE1FIGZpZWxkcyBpbiBhbiBNIGZvcm0gaW5zdHJ1Y3Rpb24gZXhwcmVzc2VkIGEgc2luZ2xlCiAgICAgIG9wZXJhbmQgd2hpY2ggaXMgYSBiaXRtYXNrIGluZGljYXRpbmcgd2hpY2ggYml0cyB0byBzZWxlY3QuICBUaGlzCiAgICAgIGlzIGEgdHdvIG9wZXJhbmQgZm9ybSB1c2luZyBQUENfT1BFUkFORF9ORVhULiAgU2VlIHRoZQogICAgICBkZXNjcmlwdGlvbiBpbiBvcGNvZGUvcHBjLmggZm9yIHdoYXQgdGhpcyBtZWFucy4gICovCiAjZGVmaW5lIE1CRSBNRSArIDEKLSAgeyA1LCA2LCAwLCAwLCBQUENfT1BFUkFORF9PUFRJT05BTCB8IFBQQ19PUEVSQU5EX05FWFQgfSwKKyAgeyA1LCA2LCBOVUxMLCBOVUxMLCBQUENfT1BFUkFORF9PUFRJT05BTCB8IFBQQ19PUEVSQU5EX05FWFQgfSwKICAgeyAzMiwgMCwgaW5zZXJ0X21iZSwgZXh0cmFjdF9tYmUsIDAgfSwKIAogICAvKiBUaGUgTUIgb3IgTUUgZmllbGQgaW4gYW4gTUQgb3IgTURTIGZvcm0gaW5zdHJ1Y3Rpb24uICBUaGUgaGlnaApAQCAtMzQ1LDcgKzM0Niw3IEBACiAKICAgLyogVGhlIE1PIGZpZWxkIGluIGFuIG1iYXIgaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBNTyBNQjYgKyAxCi0gIHsgNSwgMjEsIDAsIDAsIDAgfSwKKyAgeyA1LCAyMSwgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBOQiBmaWVsZCBpbiBhbiBYIGZvcm0gaW5zdHJ1Y3Rpb24uICBUaGUgdmFsdWUgMzIgaXMgc3RvcmVkIGFzCiAgICAgIDAuICAqLwpAQCAtMzYxLDM0ICszNjIsMzQgQEAKICAgLyogVGhlIFJBIGZpZWxkIGluIGFuIEQsIERTLCBEUSwgWCwgWE8sIE0sIG9yIE1EUyBmb3JtIGluc3RydWN0aW9uLiAgKi8KICNkZWZpbmUgUkEgTlNJICsgMQogI2RlZmluZSBSQV9NQVNLICgweDFmIDw8IDE2KQotICB7IDUsIDE2LCAwLCAwLCBQUENfT1BFUkFORF9HUFIgfSwKKyAgeyA1LCAxNiwgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfR1BSIH0sCiAKICAgLyogVGhlIFJBIGZpZWxkIGluIHRoZSBEUSBmb3JtIGxxIGluc3RydWN0aW9uLCB3aGljaCBoYXMgc3BlY2lhbAogICAgICB2YWx1ZSByZXN0cmljdGlvbnMuICAqLwogI2RlZmluZSBSQVEgUkEgKyAxCi0gIHsgNSwgMTYsIGluc2VydF9yYXEsIDAsIFBQQ19PUEVSQU5EX0dQUiB9LAorICB7IDUsIDE2LCBpbnNlcnRfcmFxLCBOVUxMLCBQUENfT1BFUkFORF9HUFIgfSwKIAogICAvKiBUaGUgUkEgZmllbGQgaW4gYSBEIG9yIFggZm9ybSBpbnN0cnVjdGlvbiB3aGljaCBpcyBhbiB1cGRhdGluZwogICAgICBsb2FkLCB3aGljaCBtZWFucyB0aGF0IHRoZSBSQSBmaWVsZCBtYXkgbm90IGJlIHplcm8gYW5kIG1heSBub3QKICAgICAgZXF1YWwgdGhlIFJUIGZpZWxkLiAgKi8KICNkZWZpbmUgUkFMIFJBUSArIDEKLSAgeyA1LCAxNiwgaW5zZXJ0X3JhbCwgMCwgUFBDX09QRVJBTkRfR1BSIH0sCisgIHsgNSwgMTYsIGluc2VydF9yYWwsIE5VTEwsIFBQQ19PUEVSQU5EX0dQUiB9LAogCiAgIC8qIFRoZSBSQSBmaWVsZCBpbiBhbiBsbXcgaW5zdHJ1Y3Rpb24sIHdoaWNoIGhhcyBzcGVjaWFsIHZhbHVlCiAgICAgIHJlc3RyaWN0aW9ucy4gICovCiAjZGVmaW5lIFJBTSBSQUwgKyAxCi0gIHsgNSwgMTYsIGluc2VydF9yYW0sIDAsIFBQQ19PUEVSQU5EX0dQUiB9LAorICB7IDUsIDE2LCBpbnNlcnRfcmFtLCBOVUxMLCBQUENfT1BFUkFORF9HUFIgfSwKIAogICAvKiBUaGUgUkEgZmllbGQgaW4gYSBEIG9yIFggZm9ybSBpbnN0cnVjdGlvbiB3aGljaCBpcyBhbiB1cGRhdGluZwogICAgICBzdG9yZSBvciBhbiB1cGRhdGluZyBmbG9hdGluZyBwb2ludCBsb2FkLCB3aGljaCBtZWFucyB0aGF0IHRoZSBSQQogICAgICBmaWVsZCBtYXkgbm90IGJlIHplcm8uICAqLwogI2RlZmluZSBSQVMgUkFNICsgMQotICB7IDUsIDE2LCBpbnNlcnRfcmFzLCAwLCBQUENfT1BFUkFORF9HUFIgfSwKKyAgeyA1LCAxNiwgaW5zZXJ0X3JhcywgTlVMTCwgUFBDX09QRVJBTkRfR1BSIH0sCiAKICAgLyogVGhlIFJCIGZpZWxkIGluIGFuIFgsIFhPLCBNLCBvciBNRFMgZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIFJCIFJBUyArIDEKICNkZWZpbmUgUkJfTUFTSyAoMHgxZiA8PCAxMSkKLSAgeyA1LCAxMSwgMCwgMCwgUFBDX09QRVJBTkRfR1BSIH0sCisgIHsgNSwgMTEsIE5VTEwsIE5VTEwsIFBQQ19PUEVSQU5EX0dQUiB9LAogCiAgIC8qIFRoZSBSQiBmaWVsZCBpbiBhbiBYIGZvcm0gaW5zdHJ1Y3Rpb24gd2hlbiBpdCBtdXN0IGJlIHRoZSBzYW1lIGFzCiAgICAgIHRoZSBSUyBmaWVsZCBpbiB0aGUgaW5zdHJ1Y3Rpb24uICBUaGlzIGlzIHVzZWQgZm9yIGV4dGVuZGVkCkBAIC00MDIsMjIgKzQwMywyMiBAQAogI2RlZmluZSBSUyBSQlMgKyAxCiAjZGVmaW5lIFJUIFJTCiAjZGVmaW5lIFJUX01BU0sgKDB4MWYgPDwgMjEpCi0gIHsgNSwgMjEsIDAsIDAsIFBQQ19PUEVSQU5EX0dQUiB9LAorICB7IDUsIDIxLCBOVUxMLCBOVUxMLCBQUENfT1BFUkFORF9HUFIgfSwKIAogICAvKiBUaGUgUlMgZmllbGQgb2YgdGhlIERTIGZvcm0gc3RxIGluc3RydWN0aW9uLCB3aGljaCBoYXMgc3BlY2lhbAogICAgICB2YWx1ZSByZXN0cmljdGlvbnMuICAqLwogI2RlZmluZSBSU1EgUlMgKyAxCi0gIHsgNSwgMjEsIGluc2VydF9yc3EsIDAsIFBQQ19PUEVSQU5EX0dQUiB9LAorICB7IDUsIDIxLCBpbnNlcnRfcnNxLCBOVUxMLCBQUENfT1BFUkFORF9HUFIgfSwKIAogICAvKiBUaGUgUlQgZmllbGQgb2YgdGhlIERRIGZvcm0gbHEgaW5zdHJ1Y3Rpb24sIHdoaWNoIGhhcyBzcGVjaWFsCiAgICAgIHZhbHVlIHJlc3RyaWN0aW9ucy4gICovCiAjZGVmaW5lIFJUUSBSU1EgKyAxCi0gIHsgNSwgMjEsIGluc2VydF9ydHEsIDAsIFBQQ19PUEVSQU5EX0dQUiB9LAorICB7IDUsIDIxLCBpbnNlcnRfcnRxLCBOVUxMLCBQUENfT1BFUkFORF9HUFIgfSwKIAogICAvKiBUaGUgU0ggZmllbGQgaW4gYW4gWCBvciBNIGZvcm0gaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBTSCBSVFEgKyAxCiAjZGVmaW5lIFNIX01BU0sgKDB4MWYgPDwgMTEpCi0gIHsgNSwgMTEsIDAsIDAsIDAgfSwKKyAgeyA1LCAxMSwgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBTSCBmaWVsZCBpbiBhbiBNRCBmb3JtIGluc3RydWN0aW9uLiAgVGhpcyBpcyBzcGxpdC4gICovCiAjZGVmaW5lIFNINiBTSCArIDEKQEAgLTQyNiwxMiArNDI3LDEyIEBACiAKICAgLyogVGhlIFNJIGZpZWxkIGluIGEgRCBmb3JtIGluc3RydWN0aW9uLiAgKi8KICNkZWZpbmUgU0kgU0g2ICsgMQotICB7IDE2LCAwLCAwLCAwLCBQUENfT1BFUkFORF9TSUdORUQgfSwKKyAgeyAxNiwgMCwgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfU0lHTkVEIH0sCiAKICAgLyogVGhlIFNJIGZpZWxkIGluIGEgRCBmb3JtIGluc3RydWN0aW9uIHdoZW4gd2UgYWNjZXB0IGEgd2lkZSByYW5nZQogICAgICBvZiBwb3NpdGl2ZSB2YWx1ZXMuICAqLwogI2RlZmluZSBTSVNJR05PUFQgU0kgKyAxCi0gIHsgMTYsIDAsIDAsIDAsIFBQQ19PUEVSQU5EX1NJR05FRCB8IFBQQ19PUEVSQU5EX1NJR05PUFQgfSwKKyAgeyAxNiwgMCwgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfU0lHTkVEIHwgUFBDX09QRVJBTkRfU0lHTk9QVCB9LAogCiAgIC8qIFRoZSBTUFIgZmllbGQgaW4gYW4gWEZYIGZvcm0gaW5zdHJ1Y3Rpb24uICBUaGlzIGlzIGZsaXBwZWQtLXRoZQogICAgICBsb3dlciA1IGJpdHMgYXJlIHN0b3JlZCBpbiB0aGUgdXBwZXIgNSBhbmQgdmljZS0gdmVyc2EuICAqLwpAQCAtNDQzLDI1ICs0NDQsMjUgQEAKICAgLyogVGhlIEJBVCBpbmRleCBudW1iZXIgaW4gYW4gWEZYIGZvcm0gbVtmdF1pYmF0W2x1XSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIFNQUkJBVCBTUFIgKyAxCiAjZGVmaW5lIFNQUkJBVF9NQVNLICgweDMgPDwgMTcpCi0gIHsgMiwgMTcsIDAsIDAsIDAgfSwKKyAgeyAyLCAxNywgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBTUFJHIHJlZ2lzdGVyIG51bWJlciBpbiBhbiBYRlggZm9ybSBtW2Z0XXNwcmcgaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBTUFJHIFNQUkJBVCArIDEKICNkZWZpbmUgU1BSR19NQVNLICgweDMgPDwgMTYpCi0gIHsgMiwgMTYsIDAsIDAsIDAgfSwKKyAgeyAyLCAxNiwgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBTUiBmaWVsZCBpbiBhbiBYIGZvcm0gaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBTUiBTUFJHICsgMQotICB7IDQsIDE2LCAwLCAwLCAwIH0sCisgIHsgNCwgMTYsIE5VTEwsIE5VTEwsIDAgfSwKIAogICAvKiBUaGUgU1RSTSBmaWVsZCBpbiBhbiBYIEFsdGlWZWMgZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIFNUUk0gU1IgKyAxCiAjZGVmaW5lIFNUUk1fTUFTSyAoMHgzIDw8IDIxKQotICB7IDIsIDIxLCAwLCAwLCAwIH0sCisgIHsgMiwgMjEsIE5VTEwsIE5VTEwsIDAgfSwKIAogICAvKiBUaGUgU1YgZmllbGQgaW4gYSBQT1dFUiBTQyBmb3JtIGluc3RydWN0aW9uLiAgKi8KICNkZWZpbmUgU1YgU1RSTSArIDEKLSAgeyAxNCwgMiwgMCwgMCwgMCB9LAorICB7IDE0LCAyLCBOVUxMLCBOVUxMLCAwIH0sCiAKICAgLyogVGhlIFRCUiBmaWVsZCBpbiBhbiBYRlggZm9ybSBpbnN0cnVjdGlvbi4gIFRoaXMgaXMgbGlrZSB0aGUgU1BSCiAgICAgIGZpZWxkLCBidXQgaXQgaXMgb3B0aW9uYWwuICAqLwpAQCAtNDcxLDUyICs0NzIsNTIgQEAKICAgLyogVGhlIFRPIGZpZWxkIGluIGEgRCBvciBYIGZvcm0gaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBUTyBUQlIgKyAxCiAjZGVmaW5lIFRPX01BU0sgKDB4MWYgPDwgMjEpCi0gIHsgNSwgMjEsIDAsIDAsIDAgfSwKKyAgeyA1LCAyMSwgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBVIGZpZWxkIGluIGFuIFggZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIFUgVE8gKyAxCi0gIHsgNCwgMTIsIDAsIDAsIDAgfSwKKyAgeyA0LCAxMiwgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBVSSBmaWVsZCBpbiBhIEQgZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIFVJIFUgKyAxCi0gIHsgMTYsIDAsIDAsIDAsIDAgfSwKKyAgeyAxNiwgMCwgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBWQSBmaWVsZCBpbiBhIFZBLCBWWCBvciBWWFIgZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIFZBIFVJICsgMQogI2RlZmluZSBWQV9NQVNLCSgweDFmIDw8IDE2KQotICB7IDUsIDE2LCAwLCAwLCBQUENfT1BFUkFORF9WUiB9LAorICB7IDUsIDE2LCBOVUxMLCBOVUxMLCBQUENfT1BFUkFORF9WUiB9LAogCiAgIC8qIFRoZSBWQiBmaWVsZCBpbiBhIFZBLCBWWCBvciBWWFIgZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIFZCIFZBICsgMQogI2RlZmluZSBWQl9NQVNLICgweDFmIDw8IDExKQotICB7IDUsIDExLCAwLCAwLCBQUENfT1BFUkFORF9WUiB9LAorICB7IDUsIDExLCBOVUxMLCBOVUxMLCBQUENfT1BFUkFORF9WUiB9LAogCiAgIC8qIFRoZSBWQyBmaWVsZCBpbiBhIFZBIGZvcm0gaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBWQyBWQiArIDEKICNkZWZpbmUgVkNfTUFTSyAoMHgxZiA8PCA2KQotICB7IDUsIDYsIDAsIDAsIFBQQ19PUEVSQU5EX1ZSIH0sCisgIHsgNSwgNiwgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfVlIgfSwKIAogICAvKiBUaGUgVkQgb3IgVlMgZmllbGQgaW4gYSBWQSwgVlgsIFZYUiBvciBYIGZvcm0gaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBWRCBWQyArIDEKICNkZWZpbmUgVlMgVkQKICNkZWZpbmUgVkRfTUFTSyAoMHgxZiA8PCAyMSkKLSAgeyA1LCAyMSwgMCwgMCwgUFBDX09QRVJBTkRfVlIgfSwKKyAgeyA1LCAyMSwgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfVlIgfSwKIAogICAvKiBUaGUgU0lNTSBmaWVsZCBpbiBhIFZYIGZvcm0gaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBTSU1NIFZEICsgMQotICB7IDUsIDE2LCAwLCAwLCBQUENfT1BFUkFORF9TSUdORUR9LAorICB7IDUsIDE2LCBOVUxMLCBOVUxMLCBQUENfT1BFUkFORF9TSUdORUR9LAogCiAgIC8qIFRoZSBVSU1NIGZpZWxkIGluIGEgVlggZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIFVJTU0gU0lNTSArIDEKLSAgeyA1LCAxNiwgMCwgMCwgMCB9LAorICB7IDUsIDE2LCBOVUxMLCBOVUxMLCAwIH0sCiAKICAgLyogVGhlIFNIQiBmaWVsZCBpbiBhIFZBIGZvcm0gaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBTSEIgVUlNTSArIDEKLSAgeyA0LCA2LCAwLCAwLCAwIH0sCisgIHsgNCwgNiwgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBvdGhlciBVSU1NIGZpZWxkIGluIGEgRVZYIGZvcm0gaW5zdHJ1Y3Rpb24uICAqLwogI2RlZmluZSBFVlVJTU0gU0hCICsgMQotICB7IDUsIDExLCAwLCAwLCAwIH0sCisgIHsgNSwgMTEsIE5VTEwsIE5VTEwsIDAgfSwKIAogICAvKiBUaGUgb3RoZXIgVUlNTSBmaWVsZCBpbiBhIGhhbGYgd29yZCBFVlggZm9ybSBpbnN0cnVjdGlvbi4gICovCiAjZGVmaW5lIEVWVUlNTV8yIEVWVUlNTSArIDEKQEAgLTUzMywxMSArNTM0LDExIEBACiAgIC8qIFRoZSBXUyBmaWVsZC4gICovCiAjZGVmaW5lIFdTIEVWVUlNTV84ICsgMQogI2RlZmluZSBXU19NQVNLICgweDcgPDwgMTEpCi0gIHsgMywgMTEsIDAsIDAsIDAgfSwKKyAgeyAzLCAxMSwgTlVMTCwgTlVMTCwgMCB9LAogCiAgIC8qIFRoZSBMIGZpZWxkIGluIGFuIG10bXNyZCBpbnN0cnVjdGlvbiAqLwogI2RlZmluZSBNVE1TUkRfTCBXUyArIDEKLSAgeyAxLCAxNiwgMCwgMCwgUFBDX09QRVJBTkRfT1BUSU9OQUwgfSwKKyAgeyAxLCAxNiwgTlVMTCwgTlVMTCwgUFBDX09QRVJBTkRfT1BUSU9OQUwgfSwKIAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2RlZmNvbmZpZyBiL2FyY2gvczM5MC9kZWZjb25maWcKaW5kZXggMTM1OGI0Mi4uMDdmZDA0MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjExCi0jIFdlZCBNYXIgIDIgMTY6NTc6NTUgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMworIyBGcmkgQXByIDIyIDE1OjMwOjU4IDIwMDUKICMKIENPTkZJR19NTVU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKQEAgLTE1LDYgKzE1LDcgQEAKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0yNiwyNCArMjcsMjUgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CisjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0yNjEsNyArMjYzLDYgQEAKICMKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogQ09ORklHX05FVF9LRVk9eQogQ09ORklHX0lORVQ9eQpAQCAtMzI5LDYgKzMzMCw3IEBACiBDT05GSUdfTkVUX1FPUz15CiBDT05GSUdfTkVUX0VTVElNQVRPUj15CiBDT05GSUdfTkVUX0NMUz15CisjIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQogQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KIENPTkZJR19ORVRfQ0xTX1JPVVRFPXkKQEAgLTMzOCw2ICszNDAsNyBAQAogIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAogQ09ORklHX05FVF9DTFNfUlNWUD1tCiBDT05GSUdfTkVUX0NMU19SU1ZQNj1tCisjIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfQ0xTX1BPTElDRT15CiAKQEAgLTM5Myw2ICszOTYsOCBAQAogQ09ORklHX0lVQ1Y9bQogIyBDT05GSUdfTkVUSVVDViBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNHSVVDViBpcyBub3Qgc2V0CisjIENPTkZJR19DTEFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQyBpcyBub3Qgc2V0CiBDT05GSUdfUUVUSD15CiAKICMKQEAgLTUzMiwxMCArNTM3LDEzIEBACiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CkBAIC01NjAsNiArNTY4LDcgQEAKICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19ERVNfWjk5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfaW9jdGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2lvY3RsLmMKaW5kZXggOTY1NzFmZi4uMDNkMDNjNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfaW9jdGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9pb2N0bC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjZGVmaW5lIENPREUKICNpbmNsdWRlICIuLi8uLi8uLi9mcy9jb21wYXRfaW9jdGwuYyIKICNpbmNsdWRlIDxhc20vZGFzZC5oPgorI2luY2x1ZGUgPGFzbS9jbWIuaD4KICNpbmNsdWRlIDxhc20vdGFwZTM5MC5oPgogCiBzdGF0aWMgaW50IGRvX2lvY3RsMzJfcG9pbnRlcih1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsCkBAIC01OCw3ICs1OSwxMSBAQAogQ09NUEFUSUJMRV9JT0NUTChCSU9EQVNEUFNSRCkKIENPTVBBVElCTEVfSU9DVEwoQklPREFTREdBVFRSKQogQ09NUEFUSUJMRV9JT0NUTChCSU9EQVNEU0FUVFIpCi0KKyNpZiBkZWZpbmVkKENPTkZJR19EQVNEX0NNQikgfHwgZGVmaW5lZChDT05GSUdfREFTRF9DTUJfTU9EVUxFKQorQ09NUEFUSUJMRV9JT0NUTChCSU9EQVNEQ01GRU5BQkxFKQorQ09NUEFUSUJMRV9JT0NUTChCSU9EQVNEQ01GRElTQUJMRSkKK0NPTVBBVElCTEVfSU9DVEwoQklPREFTRFJFQURBTExDTUIpCisjZW5kaWYKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfUzM5MF9UQVBFKSB8fCBkZWZpbmVkKENPTkZJR19TMzkwX1RBUEVfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNjQ3MjMzYy4uMjY4ODkzNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTYwOSw3ICs2MTAsNyBAQAogCQkvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwogCWNhc2UgUFRSQUNFX0NPTlQ6CiAJCS8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPj0gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJcmV0dXJuIC1FSU87CiAJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQogCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpAQCAtNjM3LDcgKzYzOCw3IEBACiAKIAljYXNlIFBUUkFDRV9TSU5HTEVTVEVQOgogCQkvKiBzZXQgdGhlIHRyYXAgZmxhZy4gKi8KLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID49IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCXJldHVybiAtRUlPOwogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKIAkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7CkBAIC03MTEsMTggKzcxMiwxMyBAQAogYXNtbGlua2FnZSB2b2lkCiBzeXNjYWxsX3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZW50cnlleGl0KQogewotCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkgewotCQlpZiAoIWVudHJ5ZXhpdCkKLQkJCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwgcmVncy0+Z3Byc1syXSwKLQkJCQkJICAgIHJlZ3MtPm9yaWdfZ3ByMiwgcmVncy0+Z3Byc1szXSwKLQkJCQkJICAgIHJlZ3MtPmdwcnNbNF0sIHJlZ3MtPmdwcnNbNV0pOwotCQllbHNlCi0JCQlhdWRpdF9zeXNjYWxsX2V4aXQoY3VycmVudCwgcmVncy0+Z3Byc1syXSk7Ci0JfQorCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiBlbnRyeWV4aXQpCisJCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCBBVURJVFNDX1JFU1VMVChyZWdzLT5ncHJzWzJdKSwgcmVncy0+Z3Byc1syXSk7CisKIAlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCWlmICghKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCXB0cmFjZV9ub3RpZnkoU0lHVFJBUCB8ICgoY3VycmVudC0+cHRyYWNlICYgUFRfVFJBQ0VTWVNHT09EKQogCQkJCSA/IDB4ODAgOiAwKSk7CiAKQEAgLTczNSw0ICs3MzEsMTAgQEAKIAkJc2VuZF9zaWcoY3VycmVudC0+ZXhpdF9jb2RlLCBjdXJyZW50LCAxKTsKIAkJY3VycmVudC0+ZXhpdF9jb2RlID0gMDsKIAl9Cisgb3V0OgorCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiAhZW50cnlleGl0KQorCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGN1cnJlbnQsIAorCQkJCSAgICB0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMUJJVCk/QVVESVRfQVJDSF9TMzkwOkFVRElUX0FSQ0hfUzM5MFgsCisJCQkJICAgIHJlZ3MtPmdwcnNbMl0sIHJlZ3MtPm9yaWdfZ3ByMiwgcmVncy0+Z3Byc1szXSwKKwkJCQkgICAgcmVncy0+Z3Byc1s0XSwgcmVncy0+Z3Byc1s1XSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYyBiL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jCmluZGV4IDExZmQ2ZDUuLmJlZTY1NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jCkBAIC0zNCw3ICszNCw2IEBACiBFWFBPUlRfU1lNQk9MKF9fc3RybmNweV9mcm9tX3VzZXJfYXNtKTsKIEVYUE9SVF9TWU1CT0woX19zdHJubGVuX3VzZXJfYXNtKTsKIEVYUE9SVF9TWU1CT0woZGlhZzEwKTsKLUVYUE9SVF9TWU1CT0woZGVmYXVsdF9zdG9yYWdlX2tleSk7CiAKIC8qCiAgKiBzZW1hcGhvcmUgb3BzCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggYzg3OWM0MC4uZGY4MzIxNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNDQsNiArNDQsOCBAQAogI2luY2x1ZGUgPGFzbS9jcGNtZC5oPgogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiAvKgogICogTWFjaGluZSBzZXR1cC4uCkBAIC01MywxMyArNTUsMTQgQEAKIHVuc2lnbmVkIGludCBjb25zb2xlX2lycSA9IC0xOwogdW5zaWduZWQgbG9uZyBtZW1vcnlfc2l6ZSA9IDA7CiB1bnNpZ25lZCBsb25nIG1hY2hpbmVfZmxhZ3MgPSAwOwotdW5zaWduZWQgaW50IGRlZmF1bHRfc3RvcmFnZV9rZXkgPSAwOwogc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIGFkZHIsIHNpemUsIHR5cGU7CiB9IG1lbW9yeV9jaHVua1tNRU1PUllfQ0hVTktTXSA9IHsgeyAwIH0gfTsKICNkZWZpbmUgQ0hVTktfUkVBRF9XUklURSAwCiAjZGVmaW5lIENIVU5LX1JFQURfT05MWSAxCiB2b2xhdGlsZSBpbnQgX19jcHVfbG9naWNhbF9tYXBbTlJfQ1BVU107IC8qIGxvZ2ljYWwgY3B1IHRvIGNwdSBhZGRyZXNzICovCit1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgemhvbGVzX3NpemVbTUFYX05SX1pPTkVTXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbWVtb3J5X2VuZDsKIAogLyoKICAqIFNldHVwIG9wdGlvbnMKQEAgLTc4LDExICs4MSwxNSBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvZGVfcmVzb3VyY2UgPSB7CiAJLm5hbWUgID0gIktlcm5lbCBjb2RlIiwKKwkuc3RhcnQgPSAodW5zaWduZWQgbG9uZykgJl90ZXh0LAorCS5lbmQgPSAodW5zaWduZWQgbG9uZykgJl9ldGV4dCAtIDEsCiAJLmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZIHwgSU9SRVNPVVJDRV9NRU0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRhdGFfcmVzb3VyY2UgPSB7CiAJLm5hbWUgPSAiS2VybmVsIGRhdGEiLAorCS5zdGFydCA9ICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0LAorCS5lbmQgPSAodW5zaWduZWQgbG9uZykgJl9lZGF0YSAtIDEsCiAJLmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZIHwgSU9SRVNPVVJDRV9NRU0sCiB9OwogCkBAIC0zMTAsOTAgKzMxNyw1MCBAQAogCiBFWFBPUlRfU1lNQk9MKG1hY2hpbmVfcG93ZXJfb2ZmKTsKIAotLyoKLSAqIFNldHVwIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGluaXQvbWFpbi5jIGp1c3QgYWZ0ZXIgdGhlIGJhbm5lcgotICogd2FzIHByaW50ZWQuCi0gKi8KLWV4dGVybiBjaGFyIF9wc3RhcnQsIF9wZW5kLCBfc3RleHQ7Ci0KLXZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKK3N0YXRpYyB2b2lkIF9faW5pdAorYWRkX21lbW9yeV9ob2xlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotICAgICAgICB1bnNpZ25lZCBsb25nIGJvb3RtYXBfc2l6ZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQsIG1lbW9yeV9lbmQ7Ci0gICAgICAgIGNoYXIgYyA9ICcgJywgY24sICp0byA9IGNvbW1hbmRfbGluZSwgKmZyb20gPSBDT01NQU5EX0xJTkU7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc21wdHJhcD0wOwotICAgICAgICB1bnNpZ25lZCBsb25nIGRlbGF5ID0gMDsKLQlzdHJ1Y3QgX2xvd2NvcmUgKmxjOwotCWludCBpOworCXVuc2lnbmVkIGxvbmcgZG1hX3BmbiA9IE1BWF9ETUFfQUREUkVTUyA+PiBQQUdFX1NISUZUOwogCi0gICAgICAgIGlmIChzbXB0cmFwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc21wdHJhcD0xOworCWlmIChlbmQgPD0gZG1hX3BmbikKKwkJemhvbGVzX3NpemVbWk9ORV9ETUFdICs9IGVuZCAtIHN0YXJ0ICsgMTsKKwllbHNlIGlmIChzdGFydCA+IGRtYV9wZm4pCisJCXpob2xlc19zaXplW1pPTkVfTk9STUFMXSArPSBlbmQgLSBzdGFydCArIDE7CisJZWxzZSB7CisJCXpob2xlc19zaXplW1pPTkVfRE1BXSArPSBkbWFfcGZuIC0gc3RhcnQgKyAxOworCQl6aG9sZXNfc2l6ZVtaT05FX05PUk1BTF0gKz0gZW5kIC0gZG1hX3BmbjsKKwl9Cit9CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogcHJpbnQgd2hhdCBoZWFkLlMgaGFzIGZvdW5kIG91dCBhYm91dCB0aGUgbWFjaGluZSAKLSAgICAgICAgICovCi0jaWZuZGVmIENPTkZJR19BUkNIX1MzOTBYCi0JcHJpbnRrKChNQUNISU5FX0lTX1ZNKSA/Ci0JICAgICAgICJXZSBhcmUgcnVubmluZyB1bmRlciBWTSAoMzEgYml0IG1vZGUpXG4iIDoKLQkgICAgICAgIldlIGFyZSBydW5uaW5nIG5hdGl2ZSAoMzEgYml0IG1vZGUpXG4iKTsKLQlwcmludGsoKE1BQ0hJTkVfSEFTX0lFRUUpID8KLQkgICAgICAgIlRoaXMgbWFjaGluZSBoYXMgYW4gSUVFRSBmcHVcbiIgOgotCSAgICAgICAiVGhpcyBtYWNoaW5lIGhhcyBubyBJRUVFIGZwdVxuIik7Ci0jZWxzZSAvKiBDT05GSUdfQVJDSF9TMzkwWCAqLwotCXByaW50aygoTUFDSElORV9JU19WTSkgPwotCSAgICAgICAiV2UgYXJlIHJ1bm5pbmcgdW5kZXIgVk0gKDY0IGJpdCBtb2RlKVxuIiA6Ci0JICAgICAgICJXZSBhcmUgcnVubmluZyBuYXRpdmUgKDY0IGJpdCBtb2RlKVxuIik7Ci0jZW5kaWYgLyogQ09ORklHX0FSQ0hfUzM5MFggKi8KK3N0YXRpYyB2b2lkIF9faW5pdAorcGFyc2VfY21kbGluZV9lYXJseShjaGFyICoqY21kbGluZV9wKQoreworCWNoYXIgYyA9ICcgJywgY24sICp0byA9IGNvbW1hbmRfbGluZSwgKmZyb20gPSBDT01NQU5EX0xJTkU7CisJdW5zaWduZWQgbG9uZyBkZWxheSA9IDA7CiAKLSAgICAgICAgUk9PVF9ERVYgPSBSb290X1JBTTA7Ci0gICAgICAgIG1lbW9yeV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKSAmX2VuZDsgICAgLyogZml4aXQgaWYgdXNlICRDT0RFTE8gZXRjKi8KLSNpZm5kZWYgQ09ORklHX0FSQ0hfUzM5MFgKLQltZW1vcnlfZW5kID0gbWVtb3J5X3NpemUgJiB+MHg0MDAwMDBVTDsgIC8qIGFsaWduIG1lbW9yeSBlbmQgdG8gNE1CICovCi0gICAgICAgIC8qCi0gICAgICAgICAqIFdlIG5lZWQgc29tZSBmcmVlIHZpcnR1YWwgc3BhY2UgdG8gYmUgYWJsZSB0byBkbyB2bWFsbG9jLgotICAgICAgICAgKiBPbiBhIG1hY2hpbmUgd2l0aCAyR0IgbWVtb3J5IHdlIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYXQKLSAgICAgICAgICogbGVhc3QgMTI4IE1CIGZyZWUgc3BhY2UgZm9yIHZtYWxsb2MuCi0gICAgICAgICAqLwotICAgICAgICBpZiAobWVtb3J5X2VuZCA+IDE5MjAqMTAyNCoxMDI0KQotICAgICAgICAgICAgICAgIG1lbW9yeV9lbmQgPSAxOTIwKjEwMjQqMTAyNDsKLSNlbHNlIC8qIENPTkZJR19BUkNIX1MzOTBYICovCi0JbWVtb3J5X2VuZCA9IG1lbW9yeV9zaXplICYgfjB4MjAwMDAwVUw7ICAvKiBkZXRlY3RlZCBpbiBoZWFkLnMgKi8KLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9TMzkwWCAqLwotICAgICAgICBpbml0X21tLnN0YXJ0X2NvZGUgPSBQQUdFX09GRlNFVDsKLSAgICAgICAgaW5pdF9tbS5lbmRfY29kZSA9ICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0OwotICAgICAgICBpbml0X21tLmVuZF9kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZfZWRhdGE7Ci0gICAgICAgIGluaXRfbW0uYnJrID0gKHVuc2lnbmVkIGxvbmcpICZfZW5kOworCS8qIFNhdmUgdW5wYXJzZWQgY29tbWFuZCBsaW5lIGNvcHkgZm9yIC9wcm9jL2NtZGxpbmUgKi8KKwltZW1jcHkoc2F2ZWRfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkUsIENPTU1BTkRfTElORV9TSVpFKTsKKwlzYXZlZF9jb21tYW5kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkUtMV0gPSAnXDAnOwogCi0JY29kZV9yZXNvdXJjZS5zdGFydCA9ICh1bnNpZ25lZCBsb25nKSAmX3RleHQ7Ci0JY29kZV9yZXNvdXJjZS5lbmQgPSAodW5zaWduZWQgbG9uZykgJl9ldGV4dCAtIDE7Ci0JZGF0YV9yZXNvdXJjZS5zdGFydCA9ICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0OwotCWRhdGFfcmVzb3VyY2UuZW5kID0gKHVuc2lnbmVkIGxvbmcpICZfZWRhdGEgLSAxOwotCi0gICAgICAgIC8qIFNhdmUgdW5wYXJzZWQgY29tbWFuZCBsaW5lIGNvcHkgZm9yIC9wcm9jL2NtZGxpbmUgKi8KLSAgICAgICAgbWVtY3B5KHNhdmVkX2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FLCBDT01NQU5EX0xJTkVfU0laRSk7Ci0gICAgICAgIHNhdmVkX2NvbW1hbmRfbGluZVtDT01NQU5EX0xJTkVfU0laRS0xXSA9ICdcMCc7Ci0KLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogIm1lbT1YWFhba0ttTV0iIHNldHMgbWVtc2l6ZSAKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnICcgJiYgc3RybmNtcChmcm9tLCAibWVtPSIsIDQpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeV9lbmQgPSBzaW1wbGVfc3RydG91bChmcm9tKzQsICZmcm9tLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKmZyb20gPT0gJ0snIHx8ICpmcm9tID09ICdrJyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5X2VuZCA9IG1lbW9yeV9lbmQgPDwgMTA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20rKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICpmcm9tID09ICdNJyB8fCAqZnJvbSA9PSAnbScgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeV9lbmQgPSBtZW1vcnlfZW5kIDw8IDIwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogImlwbGRlbGF5PVhYWFtzbV0iIHNldHMgaXBsIGRlbGF5IGluIHNlY29uZHMgb3IgbWludXRlcwotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmIChjID09ICcgJyAmJiBzdHJuY21wKGZyb20sICJpcGxkZWxheT0iLCA5KSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxheSA9IHNpbXBsZV9zdHJ0b3VsKGZyb20rOSwgJmZyb20sIDApOworCWZvciAoOzspIHsKKwkJLyoKKwkJICogIm1lbT1YWFhba0ttTV0iIHNldHMgbWVtc2l6ZQorCQkgKi8KKwkJaWYgKGMgPT0gJyAnICYmIHN0cm5jbXAoZnJvbSwgIm1lbT0iLCA0KSA9PSAwKSB7CisJCQltZW1vcnlfZW5kID0gc2ltcGxlX3N0cnRvdWwoZnJvbSs0LCAmZnJvbSwgMCk7CisJCQlpZiAoICpmcm9tID09ICdLJyB8fCAqZnJvbSA9PSAnaycgKSB7CisJCQkJbWVtb3J5X2VuZCA9IG1lbW9yeV9lbmQgPDwgMTA7CisJCQkJZnJvbSsrOworCQkJfSBlbHNlIGlmICggKmZyb20gPT0gJ00nIHx8ICpmcm9tID09ICdtJyApIHsKKwkJCQltZW1vcnlfZW5kID0gbWVtb3J5X2VuZCA8PCAyMDsKKwkJCQlmcm9tKys7CisJCQl9CisJCX0KKwkJLyoKKwkJICogImlwbGRlbGF5PVhYWFtzbV0iIHNldHMgaXBsIGRlbGF5IGluIHNlY29uZHMgb3IgbWludXRlcworCQkgKi8KKwkJaWYgKGMgPT0gJyAnICYmIHN0cm5jbXAoZnJvbSwgImlwbGRlbGF5PSIsIDkpID09IDApIHsKKwkJCWRlbGF5ID0gc2ltcGxlX3N0cnRvdWwoZnJvbSs5LCAmZnJvbSwgMCk7CiAJCQlpZiAoKmZyb20gPT0gJ3MnIHx8ICpmcm9tID09ICdTJykgewogCQkJCWRlbGF5ID0gZGVsYXkqMTAwMDAwMDsKIAkJCQlmcm9tKys7CkBAIC00MDMsMTE2ICszNzAsNDAgQEAKIAkJCX0KIAkJCS8qIG5vdyB3YWl0IGZvciB0aGUgcmVxdWVzdGVkIGFtb3VudCBvZiB0aW1lICovCiAJCQl1ZGVsYXkoZGVsYXkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjbiA9ICooZnJvbSsrKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNuKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKGNuID09ICdcbicpCi0gICAgICAgICAgICAgICAgICAgICAgICBjbiA9ICcgJzsgIC8qIHJlcGxhY2UgbmV3bGluZXMgd2l0aCBzcGFjZSAqLworCQl9CisJCWNuID0gKihmcm9tKyspOworCQlpZiAoIWNuKQorCQkJYnJlYWs7CisJCWlmIChjbiA9PSAnXG4nKQorCQkJY24gPSAnICc7ICAvKiByZXBsYWNlIG5ld2xpbmVzIHdpdGggc3BhY2UgKi8KIAkJaWYgKGNuID09IDB4MGQpCiAJCQljbiA9ICcgJzsgIC8qIHJlcGxhY2UgMHgwZCB3aXRoIHNwYWNlICovCi0gICAgICAgICAgICAgICAgaWYgKGNuID09ICcgJyAmJiBjID09ICcgJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgLyogcmVtb3ZlIGFkZGl0aW9uYWwgc3BhY2VzICovCi0gICAgICAgICAgICAgICAgYyA9IGNuOwotICAgICAgICAgICAgICAgIGlmICh0byAtIGNvbW1hbmRfbGluZSA+PSBDT01NQU5EX0xJTkVfU0laRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICoodG8rKykgPSBjOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjID09ICcgJyAmJiB0byA+IGNvbW1hbmRfbGluZSkgdG8tLTsKLSAgICAgICAgKnRvID0gJ1wwJzsKLSAgICAgICAgKmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTsKLQotCS8qCi0JICogcGFydGlhbGx5IHVzZWQgcGFnZXMgYXJlIG5vdCB1c2FibGUgLSB0aHVzCi0JICogd2UgYXJlIHJvdW5kaW5nIHVwd2FyZHM6Ci0JICovCi0Jc3RhcnRfcGZuID0gKF9fcGEoJl9lbmQpICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQllbmRfcGZuID0gbWF4X3BmbiA9IG1lbW9yeV9lbmQgPj4gUEFHRV9TSElGVDsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgYm9vdC10aW1lIGFsbG9jYXRvciAod2l0aCBsb3cgbWVtb3J5IG9ubHkpOgotCSAqLwotCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbShzdGFydF9wZm4sIGVuZF9wZm4pOwotCi0JLyoKLQkgKiBSZWdpc3RlciBSQU0gYXJlYXMgd2l0aCB0aGUgYm9vdG1lbSBhbGxvY2F0b3IuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IDE2ICYmIG1lbW9yeV9jaHVua1tpXS5zaXplID4gMDsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnRfY2h1bmssIGVuZF9jaHVuazsKLQotCQlpZiAobWVtb3J5X2NodW5rW2ldLnR5cGUgIT0gQ0hVTktfUkVBRF9XUklURSkKLQkJCWNvbnRpbnVlOwotCQlzdGFydF9jaHVuayA9IChtZW1vcnlfY2h1bmtbaV0uYWRkciArIFBBR0VfU0laRSAtIDEpOwotCQlzdGFydF9jaHVuayA+Pj0gUEFHRV9TSElGVDsKLQkJZW5kX2NodW5rID0gKG1lbW9yeV9jaHVua1tpXS5hZGRyICsgbWVtb3J5X2NodW5rW2ldLnNpemUpOwotCQllbmRfY2h1bmsgPj49IFBBR0VfU0hJRlQ7Ci0JCWlmIChzdGFydF9jaHVuayA8IHN0YXJ0X3BmbikKLQkJCXN0YXJ0X2NodW5rID0gc3RhcnRfcGZuOwotCQlpZiAoZW5kX2NodW5rID4gZW5kX3BmbikKLQkJCWVuZF9jaHVuayA9IGVuZF9wZm47Ci0JCWlmIChzdGFydF9jaHVuayA8IGVuZF9jaHVuaykKLQkJCWZyZWVfYm9vdG1lbShzdGFydF9jaHVuayA8PCBQQUdFX1NISUZULAotCQkJCSAgICAgKGVuZF9jaHVuayAtIHN0YXJ0X2NodW5rKSA8PCBQQUdFX1NISUZUKTsKLQl9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogUmVzZXJ2ZSB0aGUgYm9vdG1lbSBiaXRtYXAgaXRzZWxmIGFzIHdlbGwuIFdlIGRvIHRoaXMgaW4gdHdvCi0gICAgICAgICAqIHN0ZXBzIChmaXJzdCBzdGVwIHdhcyBpbml0X2Jvb3RtZW0oKSkgYmVjYXVzZSB0aGlzIGNhdGNoZXMKLSAgICAgICAgICogdGhlICh2ZXJ5IHVubGlrZWx5KSBjYXNlIG9mIHVzIGFjY2lkZW50YWxseSBpbml0aWFsaXppbmcgdGhlCi0gICAgICAgICAqIGJvb3RtZW0gYWxsb2NhdG9yIHdpdGggYW4gaW52YWxpZCBSQU0gYXJlYS4KLSAgICAgICAgICovCi0gICAgICAgIHJlc2VydmVfYm9vdG1lbShzdGFydF9wZm4gPDwgUEFHRV9TSElGVCwgYm9vdG1hcF9zaXplKTsKLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotICAgICAgICBpZiAoSU5JVFJEX1NUQVJUKSB7Ci0JCWlmIChJTklUUkRfU1RBUlQgKyBJTklUUkRfU0laRSA8PSBtZW1vcnlfZW5kKSB7Ci0JCQlyZXNlcnZlX2Jvb3RtZW0oSU5JVFJEX1NUQVJULCBJTklUUkRfU0laRSk7Ci0JCQlpbml0cmRfc3RhcnQgPSBJTklUUkRfU1RBUlQ7Ci0JCQlpbml0cmRfZW5kID0gaW5pdHJkX3N0YXJ0ICsgSU5JVFJEX1NJWkU7Ci0JCX0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImluaXRyZCBleHRlbmRzIGJleW9uZCBlbmQgb2YgbWVtb3J5ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKDB4JTA4bHggPiAweCUwOGx4KVxuZGlzYWJsaW5nIGluaXRyZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0cmRfc3RhcnQgKyBJTklUUkRfU0laRSwgbWVtb3J5X2VuZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbml0cmRfc3RhcnQgPSBpbml0cmRfZW5kID0gMDsKLQkJfQotICAgICAgICB9Ci0jZW5kaWYKLQotCWZvciAoaSA9IDA7IGkgPCAxNiAmJiBtZW1vcnlfY2h1bmtbaV0uc2l6ZSA+IDA7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQotCQlyZXMgPSBhbGxvY19ib290bWVtX2xvdyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7Ci0JCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1kgfCBJT1JFU09VUkNFX01FTTsKLQotCQlzd2l0Y2ggKG1lbW9yeV9jaHVua1tpXS50eXBlKSB7Ci0JCWNhc2UgQ0hVTktfUkVBRF9XUklURToKLQkJCXJlcy0+bmFtZSA9ICJTeXN0ZW0gUkFNIjsKKwkJaWYgKGNuID09ICcgJyAmJiBjID09ICcgJykKKwkJCWNvbnRpbnVlOyAgLyogcmVtb3ZlIGFkZGl0aW9uYWwgc3BhY2VzICovCisJCWMgPSBjbjsKKwkJaWYgKHRvIC0gY29tbWFuZF9saW5lID49IENPTU1BTkRfTElORV9TSVpFKQogCQkJYnJlYWs7Ci0JCWNhc2UgQ0hVTktfUkVBRF9PTkxZOgotCQkJcmVzLT5uYW1lID0gIlN5c3RlbSBST00iOwotCQkJcmVzLT5mbGFncyB8PSBJT1JFU09VUkNFX1JFQURPTkxZOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXMtPm5hbWUgPSAicmVzZXJ2ZWQiOwotCQl9Ci0JCXJlcy0+c3RhcnQgPSBtZW1vcnlfY2h1bmtbaV0uYWRkcjsKLQkJcmVzLT5lbmQgPSBtZW1vcnlfY2h1bmtbaV0uYWRkciArICBtZW1vcnlfY2h1bmtbaV0uc2l6ZSAtIDE7Ci0JCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMpOwotCQlyZXF1ZXN0X3Jlc291cmNlKHJlcywgJmNvZGVfcmVzb3VyY2UpOwotCQlyZXF1ZXN0X3Jlc291cmNlKHJlcywgJmRhdGFfcmVzb3VyY2UpOworCQkqKHRvKyspID0gYzsKIAl9CisJaWYgKGMgPT0gJyAnICYmIHRvID4gY29tbWFuZF9saW5lKSB0by0tOworCSp0byA9ICdcMCc7CisJKmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTsKK30KIAotICAgICAgICAvKgotICAgICAgICAgKiBTZXR1cCBsb3djb3JlIGZvciBib290IGNwdQotICAgICAgICAgKi8KLSNpZm5kZWYgQ09ORklHX0FSQ0hfUzM5MFgKLQlsYyA9IChzdHJ1Y3QgX2xvd2NvcmUgKikgX19hbGxvY19ib290bWVtKFBBR0VfU0laRSwgUEFHRV9TSVpFLCAwKTsKLQltZW1zZXQobGMsIDAsIFBBR0VfU0laRSk7Ci0jZWxzZSAvKiBDT05GSUdfQVJDSF9TMzkwWCAqLwotCWxjID0gKHN0cnVjdCBfbG93Y29yZSAqKSBfX2FsbG9jX2Jvb3RtZW0oMipQQUdFX1NJWkUsIDIqUEFHRV9TSVpFLCAwKTsKLQltZW1zZXQobGMsIDAsIDIqUEFHRV9TSVpFKTsKLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9TMzkwWCAqLwotCWxjLT5yZXN0YXJ0X3Bzdy5tYXNrID0gUFNXX0JBU0VfQklUUzsKK3N0YXRpYyB2b2lkIF9faW5pdAorc2V0dXBfbG93Y29yZSh2b2lkKQoreworCXN0cnVjdCBfbG93Y29yZSAqbGM7CisJaW50IGxjX3BhZ2VzOworCisJLyoKKwkgKiBTZXR1cCBsb3djb3JlIGZvciBib290IGNwdQorCSAqLworCWxjX3BhZ2VzID0gc2l6ZW9mKHZvaWQgKikgPT0gOCA/IDIgOiAxOworCWxjID0gKHN0cnVjdCBfbG93Y29yZSAqKQorCQlfX2FsbG9jX2Jvb3RtZW0obGNfcGFnZXMgKiBQQUdFX1NJWkUsIGxjX3BhZ2VzICogUEFHRV9TSVpFLCAwKTsKKwltZW1zZXQobGMsIDAsIGxjX3BhZ2VzICogUEFHRV9TSVpFKTsKKwlsYy0+cmVzdGFydF9wc3cubWFzayA9IFBTV19CQVNFX0JJVFMgfCBQU1dfREVGQVVMVF9LRVk7CiAJbGMtPnJlc3RhcnRfcHN3LmFkZHIgPQogCQlQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSByZXN0YXJ0X2ludF9oYW5kbGVyOwogCWxjLT5leHRlcm5hbF9uZXdfcHN3Lm1hc2sgPSBQU1dfS0VSTkVMX0JJVFM7CkBAIC01NDYsNiArNDM3LDE3MCBAQAogCQlsYy0+ZGlhZzQ0X29wY29kZSA9IDB4MDcwMDA3MDA7CiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfUzM5MFggKi8KIAlzZXRfcHJlZml4KCh1MzIpKHVuc2lnbmVkIGxvbmcpIGxjKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0CitzZXR1cF9yZXNvdXJjZXModm9pZCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNRU1PUllfQ0hVTktTICYmIG1lbW9yeV9jaHVua1tpXS5zaXplID4gMDsgaSsrKSB7CisJCXJlcyA9IGFsbG9jX2Jvb3RtZW1fbG93KHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKKwkJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWSB8IElPUkVTT1VSQ0VfTUVNOworCQlzd2l0Y2ggKG1lbW9yeV9jaHVua1tpXS50eXBlKSB7CisJCWNhc2UgQ0hVTktfUkVBRF9XUklURToKKwkJCXJlcy0+bmFtZSA9ICJTeXN0ZW0gUkFNIjsKKwkJCWJyZWFrOworCQljYXNlIENIVU5LX1JFQURfT05MWToKKwkJCXJlcy0+bmFtZSA9ICJTeXN0ZW0gUk9NIjsKKwkJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9SRUFET05MWTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmVzLT5uYW1lID0gInJlc2VydmVkIjsKKwkJfQorCQlyZXMtPnN0YXJ0ID0gbWVtb3J5X2NodW5rW2ldLmFkZHI7CisJCXJlcy0+ZW5kID0gbWVtb3J5X2NodW5rW2ldLmFkZHIgKyAgbWVtb3J5X2NodW5rW2ldLnNpemUgLSAxOworCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKTsKKwkJcmVxdWVzdF9yZXNvdXJjZShyZXMsICZjb2RlX3Jlc291cmNlKTsKKwkJcmVxdWVzdF9yZXNvdXJjZShyZXMsICZkYXRhX3Jlc291cmNlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorc2V0dXBfbWVtb3J5KHZvaWQpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYm9vdG1hcF9zaXplOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuLCBpbml0X3BmbjsKKwl1bnNpZ25lZCBsb25nIGxhc3RfcndfZW5kOworCWludCBpOworCisJLyoKKwkgKiBwYXJ0aWFsbHkgdXNlZCBwYWdlcyBhcmUgbm90IHVzYWJsZSAtIHRodXMKKwkgKiB3ZSBhcmUgcm91bmRpbmcgdXB3YXJkczoKKwkgKi8KKwlzdGFydF9wZm4gPSAoX19wYSgmX2VuZCkgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOworCWVuZF9wZm4gPSBtYXhfcGZuID0gbWVtb3J5X2VuZCA+PiBQQUdFX1NISUZUOworCisJLyogSW5pdGlhbGl6ZSBzdG9yYWdlIGtleSBmb3Iga2VybmVsIHBhZ2VzICovCisJZm9yIChpbml0X3BmbiA9IDAgOyBpbml0X3BmbiA8IHN0YXJ0X3BmbjsgaW5pdF9wZm4rKykKKwkJcGFnZV9zZXRfc3RvcmFnZV9rZXkoaW5pdF9wZm4gPDwgUEFHRV9TSElGVCwgUEFHRV9ERUZBVUxUX0tFWSk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGJvb3QtdGltZSBhbGxvY2F0b3IgKHdpdGggbG93IG1lbW9yeSBvbmx5KToKKwkgKi8KKwlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW0oc3RhcnRfcGZuLCBlbmRfcGZuKTsKKworCS8qCisJICogUmVnaXN0ZXIgUkFNIGFyZWFzIHdpdGggdGhlIGJvb3RtZW0gYWxsb2NhdG9yLgorCSAqLworCWxhc3RfcndfZW5kID0gc3RhcnRfcGZuOworCisJZm9yIChpID0gMDsgaSA8IE1FTU9SWV9DSFVOS1MgJiYgbWVtb3J5X2NodW5rW2ldLnNpemUgPiAwOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9jaHVuaywgZW5kX2NodW5rOworCisJCWlmIChtZW1vcnlfY2h1bmtbaV0udHlwZSAhPSBDSFVOS19SRUFEX1dSSVRFKQorCQkJY29udGludWU7CisJCXN0YXJ0X2NodW5rID0gKG1lbW9yeV9jaHVua1tpXS5hZGRyICsgUEFHRV9TSVpFIC0gMSk7CisJCXN0YXJ0X2NodW5rID4+PSBQQUdFX1NISUZUOworCQllbmRfY2h1bmsgPSAobWVtb3J5X2NodW5rW2ldLmFkZHIgKyBtZW1vcnlfY2h1bmtbaV0uc2l6ZSk7CisJCWVuZF9jaHVuayA+Pj0gUEFHRV9TSElGVDsKKwkJaWYgKHN0YXJ0X2NodW5rIDwgc3RhcnRfcGZuKQorCQkJc3RhcnRfY2h1bmsgPSBzdGFydF9wZm47CisJCWlmIChlbmRfY2h1bmsgPiBlbmRfcGZuKQorCQkJZW5kX2NodW5rID0gZW5kX3BmbjsKKwkJaWYgKHN0YXJ0X2NodW5rIDwgZW5kX2NodW5rKSB7CisJCQkvKiBJbml0aWFsaXplIHN0b3JhZ2Uga2V5IGZvciBSQU0gcGFnZXMgKi8KKwkJCWZvciAoaW5pdF9wZm4gPSBzdGFydF9jaHVuayA7IGluaXRfcGZuIDwgZW5kX2NodW5rOworCQkJICAgICBpbml0X3BmbisrKQorCQkJCXBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KGluaXRfcGZuIDw8IFBBR0VfU0hJRlQsCisJCQkJCQkgICAgIFBBR0VfREVGQVVMVF9LRVkpOworCQkJZnJlZV9ib290bWVtKHN0YXJ0X2NodW5rIDw8IFBBR0VfU0hJRlQsCisJCQkJICAgICAoZW5kX2NodW5rIC0gc3RhcnRfY2h1bmspIDw8IFBBR0VfU0hJRlQpOworCQkJaWYgKGxhc3RfcndfZW5kIDwgc3RhcnRfY2h1bmspCisJCQkJYWRkX21lbW9yeV9ob2xlKGxhc3RfcndfZW5kLCBzdGFydF9jaHVuayAtIDEpOworCQkJbGFzdF9yd19lbmQgPSBlbmRfY2h1bms7CisJCX0KKwl9CisKKwlwc3dfc2V0X2tleShQQUdFX0RFRkFVTFRfS0VZKTsKKworCWlmIChsYXN0X3J3X2VuZCA8IGVuZF9wZm4gLSAxKQorCQlhZGRfbWVtb3J5X2hvbGUobGFzdF9yd19lbmQsIGVuZF9wZm4gLSAxKTsKKworCS8qCisJICogUmVzZXJ2ZSB0aGUgYm9vdG1lbSBiaXRtYXAgaXRzZWxmIGFzIHdlbGwuIFdlIGRvIHRoaXMgaW4gdHdvCisJICogc3RlcHMgKGZpcnN0IHN0ZXAgd2FzIGluaXRfYm9vdG1lbSgpKSBiZWNhdXNlIHRoaXMgY2F0Y2hlcworCSAqIHRoZSAodmVyeSB1bmxpa2VseSkgY2FzZSBvZiB1cyBhY2NpZGVudGFsbHkgaW5pdGlhbGl6aW5nIHRoZQorCSAqIGJvb3RtZW0gYWxsb2NhdG9yIHdpdGggYW4gaW52YWxpZCBSQU0gYXJlYS4KKwkgKi8KKwlyZXNlcnZlX2Jvb3RtZW0oc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQsIGJvb3RtYXBfc2l6ZSk7CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKwlpZiAoSU5JVFJEX1NUQVJUKSB7CisJCWlmIChJTklUUkRfU1RBUlQgKyBJTklUUkRfU0laRSA8PSBtZW1vcnlfZW5kKSB7CisJCQlyZXNlcnZlX2Jvb3RtZW0oSU5JVFJEX1NUQVJULCBJTklUUkRfU0laRSk7CisJCQlpbml0cmRfc3RhcnQgPSBJTklUUkRfU1RBUlQ7CisJCQlpbml0cmRfZW5kID0gaW5pdHJkX3N0YXJ0ICsgSU5JVFJEX1NJWkU7CisJCX0gZWxzZSB7CisJCQlwcmludGsoImluaXRyZCBleHRlbmRzIGJleW9uZCBlbmQgb2YgbWVtb3J5ICIKKwkJCSAgICAgICAiKDB4JTA4bHggPiAweCUwOGx4KVxuZGlzYWJsaW5nIGluaXRyZFxuIiwKKwkJCSAgICAgICBpbml0cmRfc3RhcnQgKyBJTklUUkRfU0laRSwgbWVtb3J5X2VuZCk7CisJCQlpbml0cmRfc3RhcnQgPSBpbml0cmRfZW5kID0gMDsKKwkJfQorCX0KKyNlbmRpZgorfQorCisvKgorICogU2V0dXAgZnVuY3Rpb24gY2FsbGVkIGZyb20gaW5pdC9tYWluLmMganVzdCBhZnRlciB0aGUgYmFubmVyCisgKiB3YXMgcHJpbnRlZC4KKyAqLworCit2b2lkIF9faW5pdAorc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQoreworICAgICAgICAvKgorICAgICAgICAgKiBwcmludCB3aGF0IGhlYWQuUyBoYXMgZm91bmQgb3V0IGFib3V0IHRoZSBtYWNoaW5lCisgICAgICAgICAqLworI2lmbmRlZiBDT05GSUdfQVJDSF9TMzkwWAorCXByaW50aygoTUFDSElORV9JU19WTSkgPworCSAgICAgICAiV2UgYXJlIHJ1bm5pbmcgdW5kZXIgVk0gKDMxIGJpdCBtb2RlKVxuIiA6CisJICAgICAgICJXZSBhcmUgcnVubmluZyBuYXRpdmUgKDMxIGJpdCBtb2RlKVxuIik7CisJcHJpbnRrKChNQUNISU5FX0hBU19JRUVFKSA/CisJICAgICAgICJUaGlzIG1hY2hpbmUgaGFzIGFuIElFRUUgZnB1XG4iIDoKKwkgICAgICAgIlRoaXMgbWFjaGluZSBoYXMgbm8gSUVFRSBmcHVcbiIpOworI2Vsc2UgLyogQ09ORklHX0FSQ0hfUzM5MFggKi8KKwlwcmludGsoKE1BQ0hJTkVfSVNfVk0pID8KKwkgICAgICAgIldlIGFyZSBydW5uaW5nIHVuZGVyIFZNICg2NCBiaXQgbW9kZSlcbiIgOgorCSAgICAgICAiV2UgYXJlIHJ1bm5pbmcgbmF0aXZlICg2NCBiaXQgbW9kZSlcbiIpOworI2VuZGlmIC8qIENPTkZJR19BUkNIX1MzOTBYICovCisKKyAgICAgICAgUk9PVF9ERVYgPSBSb290X1JBTTA7CisjaWZuZGVmIENPTkZJR19BUkNIX1MzOTBYCisJbWVtb3J5X2VuZCA9IG1lbW9yeV9zaXplICYgfjB4NDAwMDAwVUw7ICAvKiBhbGlnbiBtZW1vcnkgZW5kIHRvIDRNQiAqLworICAgICAgICAvKgorICAgICAgICAgKiBXZSBuZWVkIHNvbWUgZnJlZSB2aXJ0dWFsIHNwYWNlIHRvIGJlIGFibGUgdG8gZG8gdm1hbGxvYy4KKyAgICAgICAgICogT24gYSBtYWNoaW5lIHdpdGggMkdCIG1lbW9yeSB3ZSBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGF0CisgICAgICAgICAqIGxlYXN0IDEyOCBNQiBmcmVlIHNwYWNlIGZvciB2bWFsbG9jLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKG1lbW9yeV9lbmQgPiAxOTIwKjEwMjQqMTAyNCkKKyAgICAgICAgICAgICAgICBtZW1vcnlfZW5kID0gMTkyMCoxMDI0KjEwMjQ7CisjZWxzZSAvKiBDT05GSUdfQVJDSF9TMzkwWCAqLworCW1lbW9yeV9lbmQgPSBtZW1vcnlfc2l6ZSAmIH4weDIwMDAwMFVMOyAgLyogZGV0ZWN0ZWQgaW4gaGVhZC5zICovCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfUzM5MFggKi8KKworCWluaXRfbW0uc3RhcnRfY29kZSA9IFBBR0VfT0ZGU0VUOworCWluaXRfbW0uZW5kX2NvZGUgPSAodW5zaWduZWQgbG9uZykgJl9ldGV4dDsKKwlpbml0X21tLmVuZF9kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZfZWRhdGE7CisJaW5pdF9tbS5icmsgPSAodW5zaWduZWQgbG9uZykgJl9lbmQ7CisKKwlwYXJzZV9jbWRsaW5lX2Vhcmx5KGNtZGxpbmVfcCk7CisKKwlzZXR1cF9tZW1vcnkoKTsKKwlzZXR1cF9yZXNvdXJjZXMoKTsKKwlzZXR1cF9sb3djb3JlKCk7CisKICAgICAgICAgY3B1X2luaXQoKTsKICAgICAgICAgX19jcHVfbG9naWNhbF9tYXBbMF0gPSBTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2FkZHI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKaW5kZXggMDYxZTgxMS4uOGNhNDg1NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKQEAgLTI0NCw3ICsyNDQsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc3RvcF9oel90aW1lcih2b2lkKQogewotCV9fdTY0IHRpbWVyOworCV9fdTY0IHRpbWVyLCB0b2R2YWw7CiAKIAlpZiAoc3lzY3RsX2h6X3RpbWVyICE9IDApCiAJCXJldHVybjsKQEAgLTI2NSw4ICsyNjUsMTQgQEAKIAkgKiBmb3IgdGhlIG5leHQgZXZlbnQuCiAJICovCiAJdGltZXIgPSAoX191NjQpIChuZXh0X3RpbWVyX2ludGVycnVwdCgpIC0gamlmZmllcykgKyBqaWZmaWVzXzY0OwotCXRpbWVyID0gamlmZmllc190aW1lcl9jYyArIHRpbWVyICogQ0xLX1RJQ0tTX1BFUl9KSUZGWTsKLQlhc20gdm9sYXRpbGUgKCJTQ0tDICUwIiA6IDogIm0iICh0aW1lcikpOworCXRvZHZhbCA9IC0xVUxMOworCS8qIEJlIGNhcmVmdWwgYWJvdXQgb3ZlcmZsb3dzLiAqLworCWlmICh0aW1lciA8ICgtMVVMTCAvIENMS19USUNLU19QRVJfSklGRlkpKSB7CisJCXRpbWVyID0gamlmZmllc190aW1lcl9jYyArIHRpbWVyICogQ0xLX1RJQ0tTX1BFUl9KSUZGWTsKKwkJaWYgKHRpbWVyID49IGppZmZpZXNfdGltZXJfY2MpCisJCQl0b2R2YWwgPSB0aW1lcjsKKwl9CisJYXNtIHZvbGF0aWxlICgiU0NLQyAlMCIgOiA6ICJtIiAodG9kdmFsKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMgYi9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMKaW5kZXggYmI2Y2YwMi4uZmEwNzI2NSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92dGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYwpAQCAtMTIyLDEyICsxMjIsMTcgQEAKIAlzdHJ1Y3QgdnRpbWVyX3F1ZXVlICp2dF9saXN0OwogCiAJdnRfbGlzdCA9ICZwZXJfY3B1KHZpcnRfY3B1X3RpbWVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCXNldF92dGltZXIodnRfbGlzdC0+aWRsZSk7CisKKwkvKiBDUFUgdGltZXIgaW50ZXJydXB0IGlzIHBlbmRpbmcsIGRvbid0IHJlcHJvZ3JhbW0gaXQgKi8KKwlpZiAodnRfbGlzdC0+aWRsZSAmIDFMTDw8NjMpCisJCXJldHVybjsKKworCWlmICghbGlzdF9lbXB0eSgmdnRfbGlzdC0+bGlzdCkpCisJCXNldF92dGltZXIodnRfbGlzdC0+aWRsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0b3BfY3B1X3RpbWVyKHZvaWQpCiB7Ci0JX191NjQgZG9uZTsKIAlzdHJ1Y3QgdnRpbWVyX3F1ZXVlICp2dF9saXN0OwogCiAJdnRfbGlzdCA9ICZwZXJfY3B1KHZpcnRfY3B1X3RpbWVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwpAQCAtMTM4LDIxICsxNDMsMTcgQEAKIAkJZ290byBmaXJlOwogCX0KIAotCS8qIHN0b3JlIHByb2dyZXNzICovCi0JYXNtIHZvbGF0aWxlICgiU1RQVCAlMCIgOiAiPW0iIChkb25lKSk7CisJLyogc3RvcmUgdGhlIGFjdHVhbCBleHBpcmUgdmFsdWUgKi8KKwlhc20gdm9sYXRpbGUgKCJTVFBUICUwIiA6ICI9bSIgKHZ0X2xpc3QtPmlkbGUpKTsKIAogCS8qCi0JICogSWYgZG9uZSBpcyBuZWdhdGl2ZSB3ZSBkbyBub3Qgc3RvcCB0aGUgQ1BVIHRpbWVyCi0JICogYmVjYXVzZSB3ZSB3aWxsIGdldCBpbnN0YW50bHkgYW4gaW50ZXJydXB0IHRoYXQKLQkgKiB3aWxsIHN0YXJ0IHRoZSBDUFUgdGltZXIgYWdhaW4uCisJICogSWYgdGhlIENQVSB0aW1lciBpcyBuZWdhdGl2ZSB3ZSBkb24ndCByZXByb2dyYW1tCisJICogaXQgYmVjYXVzZSB3ZSB3aWxsIGdldCBpbnN0YW50bHkgYW4gaW50ZXJydXB0LgogCSAqLwotCWlmIChkb25lICYgMUxMPDw2MykKKwlpZiAodnRfbGlzdC0+aWRsZSAmIDFMTDw8NjMpCiAJCXJldHVybjsKLQllbHNlCi0JCXZ0X2xpc3QtPm9mZnNldCArPSB2dF9saXN0LT50b19leHBpcmUgLSBkb25lOwogCi0JLyogc2F2ZSB0aGUgYWN0dWFsIGV4cGlyZSB2YWx1ZSAqLwotCXZ0X2xpc3QtPmlkbGUgPSBkb25lOworCXZ0X2xpc3QtPm9mZnNldCArPSB2dF9saXN0LT50b19leHBpcmUgLSB2dF9saXN0LT5pZGxlOwogCiAJLyoKIAkgKiBXZSBjYW5ub3QgaGFsdCB0aGUgQ1BVIHRpbWVyLCB3ZSBqdXN0IHdyaXRlIGEgdmFsdWUgdGhhdApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2NtbS5jIGIvYXJjaC9zMzkwL21tL2NtbS5jCmluZGV4IGQzMGNkYjQuLmY1YTViYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9jbW0uYworKysgYi9hcmNoL3MzOTAvbW0vY21tLmMKQEAgLTIwLDYgKzIwLDExIEBACiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCitzdGF0aWMgY2hhciAqc2VuZGVyID0gIlZNUk1TVk0iOworbW9kdWxlX3BhcmFtKHNlbmRlciwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyhzZW5kZXIsCisJCSAiR3Vlc3QgbmFtZSB0aGF0IG1heSBzZW5kIFNNU0cgbWVzc2FnZXMgKGRlZmF1bHQgVk1STVNWTSkiKTsKKwogI2luY2x1ZGUgIi4uLy4uLy4uL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuaCIKIAogI2RlZmluZSBDTU1fTlJfUEFHRVMgKChQQUdFX1NJWkUgLyBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMikKQEAgLTM2NywxMCArMzcyLDEyIEBACiAjaWZkZWYgQ09ORklHX0NNTV9JVUNWCiAjZGVmaW5lIFNNU0dfUFJFRklYICJDTU0iCiBzdGF0aWMgdm9pZAotY21tX3Ntc2dfdGFyZ2V0KGNoYXIgKm1zZykKK2NtbV9zbXNnX3RhcmdldChjaGFyICpmcm9tLCBjaGFyICptc2cpCiB7CiAJbG9uZyBwYWdlcywgc2Vjb25kczsKIAorCWlmIChzdHJsZW4oc2VuZGVyKSA+IDAgJiYgc3RyY21wKGZyb20sIHNlbmRlcikgIT0gMCkKKwkJcmV0dXJuOwogCWlmICghY21tX3NraXBfYmxhbmtzKG1zZyArIHN0cmxlbihTTVNHX1BSRUZJWCksICZtc2cpKQogCQlyZXR1cm47CiAJaWYgKHN0cm5jbXAobXNnLCAiU0hSSU5LIiwgNikgPT0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggOGU3MjNiYy4uNmVjNWNkOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC0xMDEsNiArMTAxLDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdF9iZWdpbjsKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdF9lbmQ7CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgemhvbGVzX3NpemVbXTsKIC8qCiAgKiBwYWdpbmdfaW5pdCgpIHNldHMgdXAgdGhlIHBhZ2UgdGFibGVzCiAgKi8KQEAgLTE2MywxMCArMTY0LDEzIEBACiAgICAgICAgIGxvY2FsX2ZsdXNoX3RsYigpOwogCiAJewotCQl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXSA9IHsgMCwgMCwgMH07CisJCXVuc2lnbmVkIGxvbmcgem9uZXNfc2l6ZVtNQVhfTlJfWk9ORVNdOwogCisJCW1lbXNldCh6b25lc19zaXplLCAwLCBzaXplb2Yoem9uZXNfc2l6ZSkpOwogCQl6b25lc19zaXplW1pPTkVfRE1BXSA9IG1heF9sb3dfcGZuOwotCQlmcmVlX2FyZWFfaW5pdCh6b25lc19zaXplKTsKKwkJZnJlZV9hcmVhX2luaXRfbm9kZSgwLCAmY29udGlnX3BhZ2VfZGF0YSwgem9uZXNfc2l6ZSwKKwkJCQkgICAgX19wYShQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCwKKwkJCQkgICAgemhvbGVzX3NpemUpOwogCX0KICAgICAgICAgcmV0dXJuOwogfQpAQCAtMTg0LDkgKzE4OCwxMCBAQAogICAgICAgICAgIF9LRVJOX1JFR0lPTl9UQUJMRTsKIAlzdGF0aWMgY29uc3QgaW50IHNzbV9tYXNrID0gMHgwNDAwMDAwMEw7CiAKLQl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXSA9IHswLCAwLCAwfTsKKwl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKIAl1bnNpZ25lZCBsb25nIGRtYV9wZm4sIGhpZ2hfcGZuOwogCisJbWVtc2V0KHpvbmVzX3NpemUsIDAsIHNpemVvZih6b25lc19zaXplKSk7CiAJZG1hX3BmbiA9IE1BWF9ETUFfQUREUkVTUyA+PiBQQUdFX1NISUZUOwogCWhpZ2hfcGZuID0gbWF4X2xvd19wZm47CiAKQEAgLTE5OCw4ICsyMDMsOCBAQAogCX0KIAogCS8qIEluaXRpYWxpemUgbWVtX21hcFtdLiAgKi8KLQlmcmVlX2FyZWFfaW5pdCh6b25lc19zaXplKTsKLQorCWZyZWVfYXJlYV9pbml0X25vZGUoMCwgJmNvbnRpZ19wYWdlX2RhdGEsIHpvbmVzX3NpemUsCisJCQkgICAgX19wYShQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCwgemhvbGVzX3NpemUpOwogCiAJLyoKIAkgKiBtYXAgd2hvbGUgcGh5c2ljYWwgbWVtb3J5IHRvIHZpcnR1YWwgbWVtb3J5IChpZGVudGl0eSBtYXBwaW5nKSAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCA3MjJlYTFkLi4zNDY4ZDUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC02OTMsNiArNjkzLDEwIEBACiAKIGVuZG1lbnUKIAorY29uZmlnIElTQV9ETUFfQVBJCisJYm9vbAorCWRlcGVuZHMgb24gTVBDMTIxMQorCWRlZmF1bHQgeQogCiBtZW51ICJCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIE1DQSwgSVNBKSIKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2UuYwppbmRleCAxYjBkZmI0Li5iMjg5MTliIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xOTcsNyArMTk4LDcgQEAKIAljYXNlIFBUUkFDRV9TWVNDQUxMOiAvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwogCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkKIAkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKQEAgLTIyOCw3ICsyMjksNyBAQAogCQlzdHJ1Y3QgcHRfcmVncyAqZHVtbXkgPSBOVUxMOwogCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKIAkJaWYgKChjaGlsZC0+cHRyYWNlICYgUFRfRFRSQUNFKSA9PSAwKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zaDY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCA4MDAyODhjLi5mZDIwMDA5IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvc2g2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0yNTUsNyArMjU2LDcgQEAKIAljYXNlIFBUUkFDRV9TWVNDQUxMOiAvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwogCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkKIAkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKQEAgLTI4NSw3ICsyODYsNyBAQAogCQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKIAogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CiAJCWlmICgoY2hpbGQtPnB0cmFjZSAmIFBUX0RUUkFDRSkgPT0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9zeXNfc2g2NC5jIGIvYXJjaC9zaDY0L2tlcm5lbC9zeXNfc2g2NC5jCmluZGV4IDQ1NDY4NDUuLjU4ZmY3ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvc3lzX3NoNjQuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3N5c19zaDY0LmMKQEAgLTI4MywxOCArMjgzLDMgQEAKIAl1cF9yZWFkKCZ1dHNfc2VtKTsKIAlyZXR1cm4gZXJyPy1FRkFVTFQ6MDsKIH0KLQotLyogQ29weSBmcm9tIG1pcHMgdmVyc2lvbiAqLwotYXNtbGlua2FnZSBsb25nIHN5c19zaG1hdGNhbGwoaW50IHNobWlkLCBjaGFyIF9fdXNlciAqc2htYWRkciwKLQkJaW50IHNobWZsZykKLXsKLQl1bnNpZ25lZCBsb25nIHJhZGRyOwotCWludCBlcnI7Ci0KLQllcnIgPSBkb19zaG1hdChzaG1pZCwgc2htYWRkciwgc2htZmxnLCAmcmFkZHIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSByYWRkcjsKLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9zaDY0L2tlcm5lbC9zeXNjYWxscy5TCmluZGV4IDhlZDQxN2QuLjZhYWJjNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvc3lzY2FsbHMuUworKysgYi9hcmNoL3NoNjQva2VybmVsL3N5c2NhbGxzLlMKQEAgLTI2OCw3ICsyNjgsNyBAQAogCS5sb25nIHN5c19tc2dyY3YKIAkubG9uZyBzeXNfbXNnZ2V0CiAJLmxvbmcgc3lzX21zZ2N0bAotCS5sb25nIHN5c19zaG1hdGNhbGwKKwkubG9uZyBzeXNfc2htYXQKIAkubG9uZyBzeXNfc2htZHQJCQkvKiAyNDUgKi8KIAkubG9uZyBzeXNfc2htZ2V0CiAJLmxvbmcgc3lzX3NobWN0bApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDE0M2ZlMmYuLjJjMjE2ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTgzLDkgKzgzLDYgQEAKICAqLwogdm9pZCBjcHVfaWRsZSh2b2lkKQogewotCWlmIChjdXJyZW50LT5waWQgIT0gMCkKLQkJZ290byBvdXQ7Ci0KIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwogCWZvciAoOzspIHsKIAkJaWYgKEFSQ0hfU1VONENfU1VONCkgewpAQCAtMTI2LDggKzEyMyw2IEBACiAJCXNjaGVkdWxlKCk7CiAJCWNoZWNrX3BndF9jYWNoZSgpOwogCX0KLW91dDoKLQlyZXR1cm47CiB9CiAKICNlbHNlCkBAIC0zMzMsNiArMzI4LDE3IEBACiAJcHJpbnRrKCJcbiIpOwogfQogCit2b2lkIGR1bXBfc3RhY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nICprc3A7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92CSUlZnAsICUwIgorCQkJICAgICA6ICI9ciIgKGtzcCkpOworCXNob3dfc3RhY2soY3VycmVudCwga3NwKTsKK30KKworRVhQT1JUX1NZTUJPTChkdW1wX3N0YWNrKTsKKwogLyoKICAqIE5vdGU6IHNwYXJjNjQgaGFzIGEgcHJldHR5IGludHJpY2F0ZWQgdGhyZWFkX3NhdmVkX3BjLCBjaGVjayBpdCBvdXQuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggYzRmOTNiZC4uNDc1YzRjMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTUyNiw3ICs1MjcsNyBAQAogCQlhZGRyID0gMTsKIAogCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCi0JCWlmIChkYXRhID4gX05TSUcpIHsKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpIHsKIAkJCXB0X2Vycm9yX3JldHVybihyZWdzLCBFSU8pOwogCQkJZ290byBvdXRfdHNrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXMuYwppbmRleCBmOTFiMGU4Li4xYmQ0MzBkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpZmRlZiBDT05GSUdfUENJCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjZW5kaWYKQEAgLTg5LDYgKzkwLDkgQEAKIGV4dGVybiB2b2lkIF9fX3NldF9iaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfX19jbGVhcl9iaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfX19jaGFuZ2VfYml0KHZvaWQpOworZXh0ZXJuIHZvaWQgX19fcndfcmVhZF9lbnRlcih2b2lkKTsKK2V4dGVybiB2b2lkIF9fX3J3X3JlYWRfZXhpdCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fX3J3X3dyaXRlX2VudGVyKHZvaWQpOwogCiAvKiBBbGlhcyBmdW5jdGlvbnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCAiLiIgYW5kIGV4cG9ydCB0aGUgYWxpYXNlcy4KICAqIFRoZSBtb2R1bGUgcmVmZXJlbmNlcyB3aWxsIGJlIGZpeGVkIHVwIGJ5IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMuCkBAIC0xMjEsOSArMTI1LDkgQEAKICNlbmRpZgogI2Vsc2UKIC8vIFhYWCBmaW5kIHdoYXQgdXNlcyAob3IgdXNlZCkgdGhlc2UuCi0vLyBFWFBPUlRfU1lNQk9MX1BSSVZBVEUoX3J3X3JlYWRfZW50ZXIpOwotLy8gRVhQT1JUX1NZTUJPTF9QUklWQVRFKF9yd19yZWFkX2V4aXQpOwotLy8gRVhQT1JUX1NZTUJPTF9QUklWQVRFKF9yd193cml0ZV9lbnRlcik7CitFWFBPUlRfU1lNQk9MKF9fX3J3X3JlYWRfZW50ZXIpOworRVhQT1JUX1NZTUJPTChfX19yd19yZWFkX2V4aXQpOworRVhQT1JUX1NZTUJPTChfX19yd193cml0ZV9lbnRlcik7CiAjZW5kaWYKIC8qIHNlbWFwaG9yZXMgKi8KIEVYUE9SVF9TWU1CT0woX191cCk7CkBAIC0xNDQsNiArMTQ4LDkgQEAKIEVYUE9SVF9TWU1CT0woX19fY2xlYXJfYml0KTsKIEVYUE9SVF9TWU1CT0woX19fY2hhbmdlX2JpdCk7CiAKKy8qIFBlci1DUFUgaW5mb3JtYXRpb24gdGFibGUgKi8KK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChfX2NwdV9kYXRhKTsKKwogI2lmZGVmIENPTkZJR19TTVAKIC8qIElSUSBpbXBsZW1lbnRhdGlvbi4gKi8KIEVYUE9SVF9TWU1CT0woc3luY2hyb25pemVfaXJxKTsKQEAgLTE1MSw2ICsxNTgsMTAgQEAKIC8qIE1pc2MgU01QIGluZm9ybWF0aW9uICovCiBFWFBPUlRfU1lNQk9MKF9fY3B1X251bWJlcl9tYXApOwogRVhQT1JUX1NZTUJPTChfX2NwdV9sb2dpY2FsX21hcCk7CisKKy8qIENQVSBvbmxpbmUgbWFwIGFuZCBhY3RpdmUgY291bnQuICovCitFWFBPUlRfU1lNQk9MKGNwdV9vbmxpbmVfbWFwKTsKK0VYUE9SVF9TWU1CT0wocGh5c19jcHVfcHJlc2VudF9tYXApOwogI2VuZGlmCiAKIEVYUE9SVF9TWU1CT0woX191ZGVsYXkpOwpAQCAtMzMyLDMgKzM0Myw2IEBACiAKIC8qIFN1biBQb3dlciBNYW5hZ2VtZW50IElkbGUgSGFuZGxlciAqLwogRVhQT1JUX1NZTUJPTChwbV9pZGxlKTsKKworLyogQmluZm10X21pc2MgbmVlZHMgdGhpcyAqLworRVhQT1JUX1NZTUJPTChzeXNfY2xvc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9wcm9tL21lbW9yeS5jIGIvYXJjaC9zcGFyYy9wcm9tL21lbW9yeS5jCmluZGV4IDQ2YWE1MWEuLmMyMGU1MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9tZW1vcnkuYworKysgYi9hcmNoL3NwYXJjL3Byb20vbWVtb3J5LmMKQEAgLTQ3LDkgKzQ3LDkgQEAKIAljaGFyICp0bXBhZGRyOwogCWNoYXIgKmxvd2VzdDsKIAotCWZvcihpPTA7IHRoaXNsaXN0W2ldLnRoZXJlc19tb3JlICE9IDA7IGkrKykgeworCWZvcihpPTA7IHRoaXNsaXN0W2ldLnRoZXJlc19tb3JlOyBpKyspIHsKIAkJbG93ZXN0ID0gdGhpc2xpc3RbaV0uc3RhcnRfYWRyOwotCQlmb3IobWl0ciA9IGkrMTsgdGhpc2xpc3RbbWl0ci0xXS50aGVyZXNfbW9yZSAhPSAwOyBtaXRyKyspCisJCWZvcihtaXRyID0gaSsxOyB0aGlzbGlzdFttaXRyLTFdLnRoZXJlc19tb3JlOyBtaXRyKyspCiAJCQlpZih0aGlzbGlzdFttaXRyXS5zdGFydF9hZHIgPCBsb3dlc3QpIHsKIAkJCQlsb3dlc3QgPSB0aGlzbGlzdFttaXRyXS5zdGFydF9hZHI7CiAJCQkJc3dhcGkgPSBtaXRyOwpAQCAtODUsNyArODUsNyBAQAogCQkJcHJvbV9waHlzX3RvdGFsW2l0ZXJdLm51bV9ieXRlcyA9IG1wdHItPm51bV9ieXRlczsKIAkJCXByb21fcGh5c190b3RhbFtpdGVyXS50aGVyZXNfbW9yZSA9ICZwcm9tX3BoeXNfdG90YWxbaXRlcisxXTsKIAkJfQotCQlwcm9tX3BoeXNfdG90YWxbaXRlci0xXS50aGVyZXNfbW9yZSA9IDB4MDsKKwkJcHJvbV9waHlzX3RvdGFsW2l0ZXItMV0udGhlcmVzX21vcmUgPSBOVUxMOwogCQkvKiBTZWNvbmQsIHRoZSB0b3RhbCBwcm9tIHRha2VuIGRlc2NyaXB0b3JzLiAqLwogCQlmb3IobXB0ciA9ICgqKHJvbXZlYy0+cHZfdjBtZW0udjBfcHJvbW1hcCkpLCBpdGVyPTA7CiAJCSAgICBtcHRyOyBtcHRyPW1wdHItPnRoZXJlc19tb3JlLCBpdGVyKyspIHsKQEAgLTkzLDcgKzkzLDcgQEAKIAkJCXByb21fcHJvbV90YWtlbltpdGVyXS5udW1fYnl0ZXMgPSBtcHRyLT5udW1fYnl0ZXM7CiAJCQlwcm9tX3Byb21fdGFrZW5baXRlcl0udGhlcmVzX21vcmUgPSAmcHJvbV9wcm9tX3Rha2VuW2l0ZXIrMV07CiAJCX0KLQkJcHJvbV9wcm9tX3Rha2VuW2l0ZXItMV0udGhlcmVzX21vcmUgPSAweDA7CisJCXByb21fcHJvbV90YWtlbltpdGVyLTFdLnRoZXJlc19tb3JlID0gTlVMTDsKIAkJLyogTGFzdCwgdGhlIGF2YWlsYWJsZSBwaHlzaWNhbCBkZXNjcmlwdG9ycy4gKi8KIAkJZm9yKG1wdHIgPSAoKihyb212ZWMtPnB2X3YwbWVtLnYwX2F2YWlsYWJsZSkpLCBpdGVyPTA7CiAJCSAgICBtcHRyOyBtcHRyPW1wdHItPnRoZXJlc19tb3JlLCBpdGVyKyspIHsKQEAgLTEwMSw3ICsxMDEsNyBAQAogCQkJcHJvbV9waHlzX2F2YWlsW2l0ZXJdLm51bV9ieXRlcyA9IG1wdHItPm51bV9ieXRlczsKIAkJCXByb21fcGh5c19hdmFpbFtpdGVyXS50aGVyZXNfbW9yZSA9ICZwcm9tX3BoeXNfYXZhaWxbaXRlcisxXTsKIAkJfQotCQlwcm9tX3BoeXNfYXZhaWxbaXRlci0xXS50aGVyZXNfbW9yZSA9IDB4MDsKKwkJcHJvbV9waHlzX2F2YWlsW2l0ZXItMV0udGhlcmVzX21vcmUgPSBOVUxMOwogCQkvKiBTb3J0IGFsbCB0aGUgbGlzdHMuICovCiAJCXByb21fc29ydG1lbWxpc3QocHJvbV9waHlzX3RvdGFsKTsKIAkJcHJvbV9zb3J0bWVtbGlzdChwcm9tX3Byb21fdGFrZW4pOwpAQCAtMTI0LDcgKzEyNCw3IEBACiAJCQlwcm9tX3BoeXNfYXZhaWxbaXRlcl0udGhlcmVzX21vcmUgPQogCQkJCSZwcm9tX3BoeXNfYXZhaWxbaXRlcisxXTsKIAkJfQotCQlwcm9tX3BoeXNfYXZhaWxbaXRlci0xXS50aGVyZXNfbW9yZSA9IDB4MDsKKwkJcHJvbV9waHlzX2F2YWlsW2l0ZXItMV0udGhlcmVzX21vcmUgPSBOVUxMOwogCiAJCW51bV9yZWdzID0gcHJvbV9nZXRwcm9wZXJ0eShub2RlLCAicmVnIiwKIAkJCQkJICAgIChjaGFyICopIHByb21fcmVnX21lbWxpc3QsCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJCXByb21fcGh5c190b3RhbFtpdGVyXS50aGVyZXNfbW9yZSA9CiAJCQkJJnByb21fcGh5c190b3RhbFtpdGVyKzFdOwogCQl9Ci0JCXByb21fcGh5c190b3RhbFtpdGVyLTFdLnRoZXJlc19tb3JlID0gMHgwOworCQlwcm9tX3BoeXNfdG90YWxbaXRlci0xXS50aGVyZXNfbW9yZSA9IE5VTEw7CiAKIAkJbm9kZSA9IHByb21fZ2V0Y2hpbGQocHJvbV9yb290X25vZGUpOwogCQlub2RlID0gcHJvbV9zZWFyY2hzaWJsaW5ncyhub2RlLCAidmlydHVhbC1tZW1vcnkiKTsKQEAgLTE1OCw3ICsxNTgsNyBAQAogCQkJcHJvbV9wcm9tX3Rha2VuW2l0ZXJdLnRoZXJlc19tb3JlID0KIAkJCQkmcHJvbV9wcm9tX3Rha2VuW2l0ZXIrMV07CiAJCX0KLQkJcHJvbV9wcm9tX3Rha2VuW2l0ZXItMV0udGhlcmVzX21vcmUgPSAweDA7CisJCXByb21fcHJvbV90YWtlbltpdGVyLTFdLnRoZXJlc19tb3JlID0gTlVMTDsKIAogCQlwcm9tX3NvcnRtZW1saXN0KHByb21fcHJvbV90YWtlbik7CiAKQEAgLTE4MiwxNSArMTgyLDE1IEBACiAJY2FzZSBQUk9NX1NVTjQ6CiAjaWZkZWYgQ09ORklHX1NVTjQJCiAJCS8qIGhvdyBzaW1wbGUgOikgKi8KLQkJcHJvbV9waHlzX3RvdGFsWzBdLnN0YXJ0X2FkciA9IDB4MDsKKwkJcHJvbV9waHlzX3RvdGFsWzBdLnN0YXJ0X2FkciA9IE5VTEw7CiAJCXByb21fcGh5c190b3RhbFswXS5udW1fYnl0ZXMgPSAqKHN1bjRfcm9tdmVjLT5tZW1vcnlzaXplKTsKLQkJcHJvbV9waHlzX3RvdGFsWzBdLnRoZXJlc19tb3JlID0gMHgwOwotCQlwcm9tX3Byb21fdGFrZW5bMF0uc3RhcnRfYWRyID0gMHgwOyAKKwkJcHJvbV9waHlzX3RvdGFsWzBdLnRoZXJlc19tb3JlID0gTlVMTDsKKwkJcHJvbV9wcm9tX3Rha2VuWzBdLnN0YXJ0X2FkciA9IE5VTEw7IAogCQlwcm9tX3Byb21fdGFrZW5bMF0ubnVtX2J5dGVzID0gMHgwOwotCQlwcm9tX3Byb21fdGFrZW5bMF0udGhlcmVzX21vcmUgPSAweDA7Ci0JCXByb21fcGh5c19hdmFpbFswXS5zdGFydF9hZHIgPSAweDA7CisJCXByb21fcHJvbV90YWtlblswXS50aGVyZXNfbW9yZSA9IE5VTEw7CisJCXByb21fcGh5c19hdmFpbFswXS5zdGFydF9hZHIgPSBOVUxMOwogCQlwcm9tX3BoeXNfYXZhaWxbMF0ubnVtX2J5dGVzID0gKihzdW40X3JvbXZlYy0+bWVtb3J5YXZhaWwpOwotCQlwcm9tX3BoeXNfYXZhaWxbMF0udGhlcmVzX21vcmUgPSAweDA7CisJCXByb21fcGh5c19hdmFpbFswXS50aGVyZXNfbW9yZSA9IE5VTEw7CiAjZW5kaWYKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9zdW40cHJvbS5jIGIvYXJjaC9zcGFyYy9wcm9tL3N1bjRwcm9tLmMKaW5kZXggNjljYTczNS4uMDAzOTBhMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL3N1bjRwcm9tLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL3N1bjRwcm9tLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCSAqIGhhdmUgbW9yZSB0aW1lLCB3ZSBjYW4gdGVhY2ggdGhlIHBlbmd1aW4gdG8gc2F5ICJCeSB5b3VyCiAJICogY29tbWFuZCIgb3IgIkFjdGl2YXRpbmcgdHVyYm8gYm9vc3QsIE1pY2hhZWwiLiA6LSkKIAkgKi8KLQlzdW40X3JvbXZlYy0+c2V0TEVEcygweDApOworCXN1bjRfcm9tdmVjLT5zZXRMRURzKE5VTEwpOwogCQogCXByaW50aygiUFJPTUxJQjogT2xkIFN1bjQgYm9vdCBQUk9NIG1vbml0b3IgJXMsIHJvbXZlYyB2ZXJzaW9uICVkXG4iLAogCQlzdW40X3JvbXZlYy0+bW9uaWQsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvS2NvbmZpZyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnCmluZGV4IGZiMTE4OTYuLmE3MmZkMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnCkBAIC0xMTgsNiArMTE4LDcgQEAKIAogY29uZmlnIEhXX0NPTlNPTEUKIAlib29sCisJZGVwZW5kcyBvbiBWVAogCWRlZmF1bHQgeQogCiBjb25maWcgU01QCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYwppbmRleCBhMzhjYjUwLi40ZGNiOGFmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXJxLmMKQEAgLTc1Niw3ICs3NTYsNyBAQAogCQljbGVhcl9zb2Z0aW50KGNscl9tYXNrKTsKIAl9CiAjZWxzZQotCWludCBzaG91bGRfZm9yd2FyZCA9IDE7CisJaW50IHNob3VsZF9mb3J3YXJkID0gMDsKIAogCWNsZWFyX3NvZnRpbnQoMSA8PCBpcnEpOwogI2VuZGlmCkBAIC0xMDA3LDEwICsxMDA3LDEwIEBACiAJfQogCXVwYV93cml0ZWwodGlkIHwgSU1BUF9WQUxJRCwgaW1hcCk7CiAKLQl3aGlsZSAoIWNwdV9vbmxpbmUoZ29hbF9jcHUpKSB7CisJZG8gewogCQlpZiAoKytnb2FsX2NwdSA+PSBOUl9DUFVTKQogCQkJZ29hbF9jcHUgPSAwOwotCX0KKwl9IHdoaWxlICghY3B1X29ubGluZShnb2FsX2NwdSkpOwogCiAJcmV0dXJuIGdvYWxfY3B1OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCAyNmQzZWM0Li5hMGNkMmIyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtNjIsOSArNjIsNiBAQAogICovCiB2b2lkIGNwdV9pZGxlKHZvaWQpCiB7Ci0JaWYgKGN1cnJlbnQtPnBpZCAhPSAwKQotCQlyZXR1cm47Ci0KIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwogCWZvciAoOzspIHsKIAkJLyogSWYgY3VycmVudC0+d29yay5uZWVkX3Jlc2NoZWQgaXMgemVybyB3ZSBzaG91bGQgcmVhbGx5CkBAIC04MCw3ICs3Nyw2IEBACiAJCXNjaGVkdWxlKCk7CiAJCWNoZWNrX3BndF9jYWNoZSgpOwogCX0KLQlyZXR1cm47CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCA1ZjA4MGNmLi44MGE3NmUyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vYXNpLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTU1OSw3ICs1NjAsNyBAQAogCQlhZGRyID0gMTsKIAogCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCi0JCWlmIChkYXRhID4gX05TSUcpIHsKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpIHsKIAkJCXB0X2Vycm9yX3JldHVybihyZWdzLCBFSU8pOwogCQkJZ290byBvdXRfdHNrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jCmluZGV4IGNhZDVhMTEuLmU3OGNjNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAogRVhQT1JUX1NZTUJPTChkdW1wX3RocmVhZCk7CiBFWFBPUlRfU1lNQk9MKGR1bXBfZnB1KTsKLUVYUE9SVF9TWU1CT0woX19wdGVfYWxsb2Nfb25lX2tlcm5lbCk7CitFWFBPUlRfU1lNQk9MKHB0ZV9hbGxvY19vbmVfa2VybmVsKTsKICNpZm5kZWYgQ09ORklHX1NNUAogRVhQT1JUX1NZTUJPTChwZ3RfcXVpY2tsaXN0cyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKaW5kZXggNmE3MTdkNC4uNzFiNGUzOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogREVGSU5FX1NQSU5MT0NLKG1vc3Rla19sb2NrKTsKIERFRklORV9TUElOTE9DSyhydGNfbG9jayk7Ci11bnNpZ25lZCBsb25nIG1zdGs0OHQwMl9yZWdzID0gMFVMOwordm9pZCBfX2lvbWVtICptc3RrNDh0MDJfcmVncyA9IE5VTEw7CiAjaWZkZWYgQ09ORklHX1BDSQogdW5zaWduZWQgbG9uZyBkczEyODdfcmVncyA9IDBVTDsKICNlbmRpZgpAQCAtNTksOCArNTksOCBAQAogCiBFWFBPUlRfU1lNQk9MKGppZmZpZXNfNjQpOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBtc3RrNDh0MDhfcmVncyA9IDBVTDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1zdGs0OHQ1OV9yZWdzID0gMFVMOworc3RhdGljIHZvaWQgX19pb21lbSAqbXN0azQ4dDA4X3JlZ3M7CitzdGF0aWMgdm9pZCBfX2lvbWVtICptc3RrNDh0NTlfcmVnczsKIAogc3RhdGljIGludCBzZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyk7CiAKQEAgLTUyMCw3ICs1MjAsNyBAQAogLyogS2ljayBzdGFydCBhIHN0b3BwZWQgY2xvY2sgKHByb2NlZHVyZSBmcm9tIHRoZSBTdW4gTlZSQU0vaG9zdGlkIEZBUSkuICovCiBzdGF0aWMgdm9pZCBfX2luaXQga2lja19zdGFydF9jbG9jayh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgcmVncyA9IG1zdGs0OHQwMl9yZWdzOworCXZvaWQgX19pb21lbSAqcmVncyA9IG1zdGs0OHQwMl9yZWdzOwogCXU4IHNlYywgdG1wOwogCWludCBpLCBjb3VudDsKIApAQCAtNjA0LDcgKzYwNCw3IEBACiAvKiBSZXR1cm4gbm9uemVybyBpZiB0aGUgY2xvY2sgY2hpcCBiYXR0ZXJ5IGlzIGxvdy4gKi8KIHN0YXRpYyBpbnQgX19pbml0IGhhc19sb3dfYmF0dGVyeSh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgcmVncyA9IG1zdGs0OHQwMl9yZWdzOworCXZvaWQgX19pb21lbSAqcmVncyA9IG1zdGs0OHQwMl9yZWdzOwogCXU4IGRhdGExLCBkYXRhMjsKIAogCXNwaW5fbG9ja19pcnEoJm1vc3Rla19sb2NrKTsKQEAgLTYyMyw3ICs2MjMsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IHNldF9zeXN0ZW1fdGltZSh2b2lkKQogewogCXVuc2lnbmVkIGludCB5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWM7Ci0JdW5zaWduZWQgbG9uZyBtcmVncyA9IG1zdGs0OHQwMl9yZWdzOworCXZvaWQgX19pb21lbSAqbXJlZ3MgPSBtc3RrNDh0MDJfcmVnczsKICNpZmRlZiBDT05GSUdfUENJCiAJdW5zaWduZWQgbG9uZyBkcmVncyA9IGRzMTI4N19yZWdzOwogI2Vsc2UKQEAgLTg0Myw3ICs4NDMsOCBAQAogCQkJICAgICFzdHJjbXAobW9kZWwsICJtNTgyMyIpKSB7CiAJCQkJZHMxMjg3X3JlZ3MgPSBlZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKIAkJCX0gZWxzZSB7Ci0JCQkJbXN0azQ4dDU5X3JlZ3MgPSBlZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKKwkJCQltc3RrNDh0NTlfcmVncyA9ICh2b2lkIF9faW9tZW0gKikKKwkJCQkJZWRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CiAJCQkJbXN0azQ4dDAyX3JlZ3MgPSBtc3RrNDh0NTlfcmVncyArIE1PU1RFS180OFQ1OV80OFQwMjsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtODY1LDcgKzg2Niw4IEBACiAJCQkgICAgIXN0cmNtcChtb2RlbCwgIm01ODIzIikpIHsKIAkJCQlkczEyODdfcmVncyA9IGlzYWRldi0+cmVzb3VyY2Uuc3RhcnQ7CiAJCQl9IGVsc2UgewotCQkJCW1zdGs0OHQ1OV9yZWdzID0gaXNhZGV2LT5yZXNvdXJjZS5zdGFydDsKKwkJCQltc3RrNDh0NTlfcmVncyA9ICh2b2lkIF9faW9tZW0gKikKKwkJCQkJaXNhZGV2LT5yZXNvdXJjZS5zdGFydDsKIAkJCQltc3RrNDh0MDJfcmVncyA9IG1zdGs0OHQ1OV9yZWdzICsgTU9TVEVLXzQ4VDU5XzQ4VDAyOwogCQkJfQogCQkJYnJlYWs7CkBAIC04OTMsMjEgKzg5NSwyNCBAQAogCQl9CiAKIAkJaWYobW9kZWxbNV0gPT0gJzAnICYmIG1vZGVsWzZdID09ICcyJykgewotCQkJbXN0azQ4dDAyX3JlZ3MgPSAoKCh1NjQpY2xrX3JlZ1swXS5waHlzX2FkZHIpIHwKLQkJCQkJICAoKCh1NjQpY2xrX3JlZ1swXS53aGljaF9pbyk8PDMyVUwpKTsKKwkJCW1zdGs0OHQwMl9yZWdzID0gKHZvaWQgX19pb21lbSAqKQorCQkJCSgoKHU2NCljbGtfcmVnWzBdLnBoeXNfYWRkcikgfAorCQkJCSAoKCh1NjQpY2xrX3JlZ1swXS53aGljaF9pbyk8PDMyVUwpKTsKIAkJfSBlbHNlIGlmKG1vZGVsWzVdID09ICcwJyAmJiBtb2RlbFs2XSA9PSAnOCcpIHsKLQkJCW1zdGs0OHQwOF9yZWdzID0gKCgodTY0KWNsa19yZWdbMF0ucGh5c19hZGRyKSB8Ci0JCQkJCSAgKCgodTY0KWNsa19yZWdbMF0ud2hpY2hfaW8pPDwzMlVMKSk7CisJCQltc3RrNDh0MDhfcmVncyA9ICh2b2lkIF9faW9tZW0gKikKKwkJCQkoKCh1NjQpY2xrX3JlZ1swXS5waHlzX2FkZHIpIHwKKwkJCQkgKCgodTY0KWNsa19yZWdbMF0ud2hpY2hfaW8pPDwzMlVMKSk7CiAJCQltc3RrNDh0MDJfcmVncyA9IG1zdGs0OHQwOF9yZWdzICsgTU9TVEVLXzQ4VDA4XzQ4VDAyOwogCQl9IGVsc2UgewotCQkJbXN0azQ4dDU5X3JlZ3MgPSAoKCh1NjQpY2xrX3JlZ1swXS5waHlzX2FkZHIpIHwKLQkJCQkJICAoKCh1NjQpY2xrX3JlZ1swXS53aGljaF9pbyk8PDMyVUwpKTsKKwkJCW1zdGs0OHQ1OV9yZWdzID0gKHZvaWQgX19pb21lbSAqKQorCQkJCSgoKHU2NCljbGtfcmVnWzBdLnBoeXNfYWRkcikgfAorCQkJCSAoKCh1NjQpY2xrX3JlZ1swXS53aGljaF9pbyk8PDMyVUwpKTsKIAkJCW1zdGs0OHQwMl9yZWdzID0gbXN0azQ4dDU5X3JlZ3MgKyBNT1NURUtfNDhUNTlfNDhUMDI7CiAJCX0KIAkJYnJlYWs7CiAJfQogCi0JaWYgKG1zdGs0OHQwMl9yZWdzICE9IDBVTCkgeworCWlmIChtc3RrNDh0MDJfcmVncyAhPSBOVUxMKSB7CiAJCS8qIFJlcG9ydCBhIGxvdyBiYXR0ZXJ5IHZvbHRhZ2UgY29uZGl0aW9uLiAqLwogCQlpZiAoaGFzX2xvd19iYXR0ZXJ5KCkpCiAJCQlwcm9tX3ByaW50ZigiTlZSQU06IExvdyBiYXR0ZXJ5IHZvbHRhZ2UhXG4iKTsKQEAgLTEwODcsNyArMTA5Miw3IEBACiBzdGF0aWMgaW50IHNldF9ydGNfbW1zcyh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCiB7CiAJaW50IHJlYWxfc2Vjb25kcywgcmVhbF9taW51dGVzLCBjaGlwX21pbnV0ZXM7Ci0JdW5zaWduZWQgbG9uZyBtcmVncyA9IG1zdGs0OHQwMl9yZWdzOworCXZvaWQgX19pb21lbSAqbXJlZ3MgPSBtc3RrNDh0MDJfcmVnczsKICNpZmRlZiBDT05GSUdfUENJCiAJdW5zaWduZWQgbG9uZyBkcmVncyA9IGRzMTI4N19yZWdzOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMgYi9hcmNoL3NwYXJjNjQvbW0vaW5pdC5jCmluZGV4IGRiNmZhNzcuLjljNTIyMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL2luaXQuYwpAQCAtMTExNCw3ICsxMTE0LDcgQEAKICNlbHNlCiAjZGVmaW5lIERDX0FMSUFTX1NISUZUCTAKICNlbmRpZgotcHRlX3QgKl9fcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3B0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgY29sb3I7CmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcgYi9hcmNoL3VtL0tjb25maWcKaW5kZXggOWEyM2RmMS4uYzUyOTIxOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnCisrKyBiL2FyY2gvdW0vS2NvbmZpZwpAQCAtMjQ0LDYgKzI0NCw3IEBACiAKIGNvbmZpZyBISUdITUVNCiAJYm9vbCAiSGlnaG1lbSBzdXBwb3J0IgorCWRlcGVuZHMgb24gITY0QklUCiAKIGNvbmZpZyBLRVJORUxfU1RBQ0tfT1JERVIKIAlpbnQgIktlcm5lbCBzdGFjayBzaXplIG9yZGVyIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnX2kzODYgYi9hcmNoL3VtL0tjb25maWdfaTM4NgppbmRleCAyMDNjMjQyLi5lNDFmMzc0IDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWdfaTM4NgorKysgYi9hcmNoL3VtL0tjb25maWdfaTM4NgpAQCAtMSw0ICsxLDggQEAKLWNvbmZpZyA2NF9CSVQKK2NvbmZpZyBVTUxfWDg2CisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgNjRCSVQKIAlib29sCiAJZGVmYXVsdCBuCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZ194ODZfNjQgYi9hcmNoL3VtL0tjb25maWdfeDg2XzY0CmluZGV4IDc2OGRjNjYuLmZkOGQ3ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vS2NvbmZpZ194ODZfNjQKKysrIGIvYXJjaC91bS9LY29uZmlnX3g4Nl82NApAQCAtMSw0ICsxLDggQEAKLWNvbmZpZyA2NF9CSVQKK2NvbmZpZyBVTUxfWDg2CisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgNjRCSVQKIAlib29sCiAJZGVmYXVsdCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUgYi9hcmNoL3VtL01ha2VmaWxlCmluZGV4IDk3YmNhNmIuLmYyYTBjNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vTWFrZWZpbGUKKysrIGIvYXJjaC91bS9NYWtlZmlsZQpAQCAtMTcsNyArMTcsNyBAQAogCiAjIEhhdmUgdG8gcHJlY2VkZSB0aGUgaW5jbHVkZSBiZWNhdXNlIHRoZSBpbmNsdWRlZCBNYWtlZmlsZXMgcmVmZXJlbmNlIHRoZW0uCiBTWU1MSU5LX0hFQURFUlMgOj0gYXJjaHBhcmFtLmggc3lzdGVtLmggc2lnY29udGV4dC5oIHByb2Nlc3Nvci5oIHB0cmFjZS5oIFwKLQlhcmNoLXNpZ25hbC5oIG1vZHVsZS5oIHZtLWZsYWdzLmgKKwltb2R1bGUuaCB2bS1mbGFncy5oIGVsZi5oCiBTWU1MSU5LX0hFQURFUlMgOj0gJChmb3JlYWNoIGhlYWRlciwkKFNZTUxJTktfSEVBREVSUyksaW5jbHVkZS9hc20tdW0vJChoZWFkZXIpKQogCiAjIFhYWDogVGhlICJvcyIgc3ltbGluayBpcyBvbmx5IHVzZWQgYnkgYXJjaC91bS9pbmNsdWRlL29zLmgsIHdoaWNoIGluY2x1ZGVzCkBAIC00NCw2ICs0NCwxMSBAQAogZW5kaWYKIAogQVJDSF9JTkNMVURFCTo9IC1JJChBUkNIX0RJUikvaW5jbHVkZQoraWZuZXEgKCQoS0JVSUxEX1NSQyksKQorQVJDSF9JTkNMVURFCSs9IC1JJChBUkNIX0RJUikvaW5jbHVkZTIKK0FSQ0hfSU5DTFVERQkrPSAtSSQoc3JjdHJlZSkvJChBUkNIX0RJUikvaW5jbHVkZQorTVJQUk9QRVJfRElSUwkrPSAkKEFSQ0hfRElSKS9pbmNsdWRlMgorZW5kaWYKIFNZU19ESVIJCTo9ICQoQVJDSF9ESVIpL2luY2x1ZGUvc3lzZGVwLSQoU1VCQVJDSCkKIAogaW5jbHVkZSAkKHNyY3RyZWUpLyQoQVJDSF9ESVIpL01ha2VmaWxlLSQoU1VCQVJDSCkKQEAgLTk0LDE3ICs5OSwxOCBAQAogICBlY2hvICcJCSAgIGZpbmQgaW4gdGhlIGtlcm5lbCByb290LicKIGVuZGVmCiAKK2lmbmVxICgkKEtCVUlMRF9TUkMpLCkKKyQoc2hlbGwgbWtkaXIgLXAgJChBUkNIX0RJUikgJiYgbG4gLWZzbiAkKHNyY3RyZWUpLyQoQVJDSF9ESVIpL0tjb25maWdfJChTVUJBUkNIKSAkKEFSQ0hfRElSKS9LY29uZmlnX2FyY2gpCitDTEVBTl9GSUxFUyArPSAkKEFSQ0hfRElSKS9LY29uZmlnX2FyY2gKK2Vsc2UKICQoc2hlbGwgY2QgJChBUkNIX0RJUikgJiYgbG4gLXNmIEtjb25maWdfJChTVUJBUkNIKSBLY29uZmlnX2FyY2gpCitlbmRpZgogCi1wcmVwYXJlOiAkKEFSQ0hfU1lNTElOS1MpICQoU1lTX0hFQURFUlMpICQoR0VOX0hFQURFUlMpIFwKLQkkKEFSQ0hfRElSKS9rZXJuZWwvdm1saW51eC5sZHMuUworcHJlcGFyZTogJChBUkNIX1NZTUxJTktTKSAkKFNZU19IRUFERVJTKSAkKEdFTl9IRUFERVJTKQogCiBMSU5LLSQoQ09ORklHX0xEX1NDUklQVF9TVEFUSUMpICs9IC1zdGF0aWMKIExJTkstJChDT05GSUdfTERfU0NSSVBUX0RZTikgKz0gLVdsLC1ycGF0aCwvbGliCiAKLUxEX1NDUklQVC0kKENPTkZJR19MRF9TQ1JJUFRfU1RBVElDKSA6PSB1bWwubGRzLlMKLUxEX1NDUklQVC0kKENPTkZJR19MRF9TQ1JJUFRfRFlOKSA6PSBkeW4ubGRzLlMKLQogQ1BQX01PREUtJChDT05GSUdfTU9ERV9UVCkgOj0gLURNT0RFX1RUCiBDT05GSUdfS0VSTkVMX1NUQUNLX09SREVSID89IDIKIFNUQUNLX1NJWkUgOj0gJChzaGVsbCBlY2hvICQkWyA0MDk2ICogKDEgPDwgJChDT05GSUdfS0VSTkVMX1NUQUNLX09SREVSKSkgXSApCkBAIC0xMjYsNyArMTMyLDcgQEAKIAkkKENDKSAkKENGTEFHU192bWxpbnV4KSAtbyAkQCBcCiAJLVdsLC1ULCQodm1saW51eC1sZHMpICQodm1saW51eC1pbml0KSBcCiAJLVdsLC0tc3RhcnQtZ3JvdXAgJCh2bWxpbnV4LW1haW4pIC1XbCwtLWVuZC1ncm91cCBcCi0JLUwvdXNyL2xpYiAtbHV0aWwgXAorCS1sdXRpbCBcCiAJJChmaWx0ZXItb3V0ICQodm1saW51eC1sZHMpICQodm1saW51eC1pbml0KSAkKHZtbGludXgtbWFpbikgXAogCUZPUkNFICwkXikgOyBybSAtZiBsaW51eAogZW5kZWYKQEAgLTE0NSwzMSArMTUxLDQyIEBACiAJQGZpbmQgLiBcKCAtbmFtZSAnKi5iYicgLW8gLW5hbWUgJyouYmJnJyAtbyAtbmFtZSAnKi5kYScgXAogCQktbyAtbmFtZSAnKi5nY292JyBcKSAtdHlwZSBmIC1wcmludCB8IHhhcmdzIHJtIC1mCiAKLSNXZSBuZWVkIHRvIHJlLXByZXByb2Nlc3MgdGhpcyB3aGVuIHRoZSBzeW1saW5rIGRlc3QgY2hhbmdlcy4KLSNTbyB3ZSB0b3VjaCBpdCB3aGVuIG5lZWRlZC4KLSQoQVJDSF9ESVIpL2tlcm5lbC92bWxpbnV4Lmxkcy5TOiBGT1JDRQotCSQoUSlpZiBbICIkKHNoZWxsIHJlYWRsaW5rICRAKSIgIT0gIiQoTERfU0NSSVBULXkpIiBdOyB0aGVuIFwKLQkJZWNobyAnICBTWU1MSU5LICRAJzsgXAotCQlsbiAtc2YgJChMRF9TQ1JJUFQteSkgJEA7IFwKLQkJdG91Y2ggJEA7IFwKLQlmaTsKLQogJChTWU1MSU5LX0hFQURFUlMpOgogCUBlY2hvICcgIFNZTUxJTksgJEAnCitpZm5lcSAoJChLQlVJTERfU1JDKSwpCisJbG4gLWZzbiAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLXVtLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS0kKFNVQkFSQ0gpJChzdWZmaXggJEApICRACitlbHNlCiAJJChRKWNkICQoVE9QRElSKS8kKGRpciAkQCkgOyBcCiAJbG4gLXNmICQoYmFzZW5hbWUgJChub3RkaXIgJEApKS0kKFNVQkFSQ0gpJChzdWZmaXggJEApICQobm90ZGlyICRAKQorZW5kaWYKIAogaW5jbHVkZS9hc20tdW0vYXJjaDoKIAlAZWNobyAnICBTWU1MSU5LICRAJworaWZuZXEgKCQoS0JVSUxEX1NSQyksKQorCSQoUSlta2RpciAtcCBpbmNsdWRlL2FzbS11bQorCSQoUSlsbiAtZnNuICQoc3JjdHJlZSkvaW5jbHVkZS9hc20tJChTVUJBUkNIKSBpbmNsdWRlL2FzbS11bS9hcmNoCitlbHNlCiAJJChRKWNkICQoVE9QRElSKS9pbmNsdWRlL2FzbS11bSAmJiBsbiAtc2YgLi4vYXNtLSQoU1VCQVJDSCkgYXJjaAorZW5kaWYKIAogJChBUkNIX0RJUikvaW5jbHVkZS9zeXNkZXA6CiAJQGVjaG8gJyAgU1lNTElOSyAkQCcKK2lmbmVxICgkKEtCVUlMRF9TUkMpLCkKKwkkKFEpbWtkaXIgLXAgJChBUkNIX0RJUikvaW5jbHVkZQorCSQoUSlta2RpciAtcCAkKEFSQ0hfRElSKS9pbmNsdWRlMgorCSQoUSlsbiAtZnNuIHN5c2RlcC0kKFNVQkFSQ0gpICQoQVJDSF9ESVIpL2luY2x1ZGUvc3lzZGVwCisJJChRKWxuIC1mc24gJChzcmN0cmVlKS8kKEFSQ0hfRElSKS9pbmNsdWRlL3N5c2RlcC0kKFNVQkFSQ0gpICQoQVJDSF9ESVIpL2luY2x1ZGUyL3N5c2RlcAorZWxzZQogCSQoUSljZCAkKEFSQ0hfRElSKS9pbmNsdWRlICYmIGxuIC1zZiBzeXNkZXAtJChTVUJBUkNIKSBzeXNkZXAKK2VuZGlmCiAKICQoQVJDSF9ESVIpL29zOgogCUBlY2hvICcgIFNZTUxJTksgJEAnCitpZm5lcSAoJChLQlVJTERfU1JDKSwpCisJJChRKWxuIC1mc24gJChzcmN0cmVlKS8kKEFSQ0hfRElSKS9vcy0kKE9TKSAkKEFSQ0hfRElSKS9vcworZWxzZQogCSQoUSljZCAkKEFSQ0hfRElSKSAmJiBsbiAtc2Ygb3MtJChPUykgb3MKK2VuZGlmCiAKICMgR2VuZXJhdGVkIGZpbGVzCiBkZWZpbmUgZmlsZWNoa191bWxjb25maWcKQEAgLTE3OSwxMCArMTk2LDMxIEBACiAkKEFSQ0hfRElSKS9pbmNsdWRlL3VtbC1jb25maWcuaCA6IGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaAogCSQoY2FsbCBmaWxlY2hrLHVtbGNvbmZpZykKIAorJChBUkNIX0RJUikvdXNlci1vZmZzZXRzLnM6ICQoQVJDSF9ESVIpL3N5cy0kKFNVQkFSQ0gpL3VzZXItb2Zmc2V0cy5jCisJJChDQykgJChVU0VSX0NGTEFHUykgLVMgLW8gJEAgJDwKKworJChBUkNIX0RJUikvdXNlci1vZmZzZXRzLmg6ICQoQVJDSF9ESVIpL3VzZXItb2Zmc2V0cy5zCisJJChjYWxsIGZpbGVjaGssZ2VuLWFzbS1vZmZzZXRzKQorCitDTEVBTl9GSUxFUyArPSAkKEFSQ0hfRElSKS91c2VyLW9mZnNldHMucyAgJChBUkNIX0RJUikvdXNlci1vZmZzZXRzLmgKKworJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMuczogJChBUkNIX0RJUikvc3lzLSQoU1VCQVJDSCkva2VybmVsLW9mZnNldHMuYyBcCisJCQkJICAgJChBUkNIX1NZTUxJTktTKSBcCisJCQkJICAgJChTWVNfRElSKS9zYy5oIFwKKwkJCQkgICBpbmNsdWRlL2FzbSBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCBcCisJCQkJICAgaW5jbHVkZS9jb25maWcvTUFSS0VSIFwKKwkJCQkgICAkKEFSQ0hfRElSKS9pbmNsdWRlL3VzZXJfY29uc3RhbnRzLmgKKwkkKENDKSAkKENGTEFHUykgJChOT1NURElOQ19GTEFHUykgJChDUFBGTEFHUykgLVMgLW8gJEAgJDwKKworJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMuaDogJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMucworCSQoY2FsbCBmaWxlY2hrLGdlbi1hc20tb2Zmc2V0cykKKworQ0xFQU5fRklMRVMgKz0gJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMucyAgJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMuaAorCiAkKEFSQ0hfRElSKS9pbmNsdWRlL3Rhc2suaDogJChBUkNIX0RJUikvdXRpbC9ta190YXNrCiAJJChjYWxsIGZpbGVjaGssZ2VuX2hlYWRlcikKIAotJChBUkNIX0RJUikvaW5jbHVkZS91c2VyX2NvbnN0YW50cy5oOiAkKEFSQ0hfRElSKS9vcy91dGlsL21rX3VzZXJfY29uc3RhbnRzCiskKEFSQ0hfRElSKS9pbmNsdWRlL3VzZXJfY29uc3RhbnRzLmg6ICQoQVJDSF9ESVIpL29zLSQoT1MpL3V0aWwvbWtfdXNlcl9jb25zdGFudHMKIAkkKGNhbGwgZmlsZWNoayxnZW5faGVhZGVyKQogCiAkKEFSQ0hfRElSKS9pbmNsdWRlL2tlcm5fY29uc3RhbnRzLmg6ICQoQVJDSF9ESVIpL3V0aWwvbWtfY29uc3RhbnRzCkBAIC0xOTEsMjAgKzIyOSwyMCBAQAogJChBUkNIX0RJUikvaW5jbHVkZS9za2FzX3B0cmVncy5oOiAkKEFSQ0hfRElSKS9rZXJuZWwvc2thcy91dGlsL21rX3B0cmVncwogCSQoY2FsbCBmaWxlY2hrLGdlbl9oZWFkZXIpCiAKLSQoQVJDSF9ESVIpL29zL3V0aWwvbWtfdXNlcl9jb25zdGFudHM6ICQoQVJDSF9ESVIpL29zL3V0aWwgRk9SQ0UgOworJChBUkNIX0RJUikvb3MtJChPUykvdXRpbC9ta191c2VyX2NvbnN0YW50czogJChBUkNIX0RJUikvb3MtJChPUykvdXRpbCBGT1JDRSA7CiAKICQoQVJDSF9ESVIpL3V0aWwvbWtfdGFzayAkKEFSQ0hfRElSKS91dGlsL21rX2NvbnN0YW50czogJChBUkNIX0RJUikvaW5jbHVkZS91c2VyX2NvbnN0YW50cy5oICQoQVJDSF9ESVIpL3V0aWwgXAogCUZPUkNFIDsKIAogJChBUkNIX0RJUikva2VybmVsL3NrYXMvdXRpbC9ta19wdHJlZ3M6ICQoQVJDSF9ESVIpL2tlcm5lbC9za2FzL3V0aWwgRk9SQ0UgOwogCi0kKEFSQ0hfRElSKS91dGlsOiBzY3JpcHRzX2Jhc2ljICQoU1lTX0RJUikvc2MuaCBGT1JDRQorJChBUkNIX0RJUikvdXRpbDogc2NyaXB0c19iYXNpYyAkKFNZU19ESVIpL3NjLmggJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMuaCBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSRACiAKLSQoQVJDSF9ESVIpL2tlcm5lbC9za2FzL3V0aWw6IHNjcmlwdHNfYmFzaWMgRk9SQ0UKKyQoQVJDSF9ESVIpL2tlcm5lbC9za2FzL3V0aWw6IHNjcmlwdHNfYmFzaWMgJChBUkNIX0RJUikvdXNlci1vZmZzZXRzLmggRk9SQ0UKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kQAogCi0kKEFSQ0hfRElSKS9vcy91dGlsOiBzY3JpcHRzX2Jhc2ljIEZPUkNFCiskKEFSQ0hfRElSKS9vcy0kKE9TKS91dGlsOiBzY3JpcHRzX2Jhc2ljIEZPUkNFCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JEAKIAogZXhwb3J0IFNVQkFSQ0ggVVNFUl9DRkxBR1MgT1MKZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUtaTM4NiBiL2FyY2gvdW0vTWFrZWZpbGUtaTM4NgppbmRleCA5N2IyMjNiLi4yOWUxODJkIDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlLWkzODYKKysrIGIvYXJjaC91bS9NYWtlZmlsZS1pMzg2CkBAIC0xLDQgKzEsNCBAQAotU1VCQVJDSF9DT1JFIDo9IGFyY2gvdW0vc3lzLWkzODYvCitTVUJBUkNIX0NPUkUgOj0gYXJjaC91bS9zeXMtaTM4Ni8gYXJjaC9pMzg2L2NyeXB0by8KIAogVE9QX0FERFIgOj0gJChDT05GSUdfVE9QX0FERFIpCiAKQEAgLTMyLDEwICszMiwxMCBAQAogJChTWVNfRElSKS90aHJlYWQuaDogJChTWVNfVVRJTF9ESVIpL21rX3RocmVhZCAKIAkkKGNhbGwgZmlsZWNoayxnZW5faGVhZGVyKQogCi0kKFNZU19VVElMX0RJUikvbWtfc2M6IHNjcmlwdHNfYmFzaWMgRk9SQ0UKKyQoU1lTX1VUSUxfRElSKS9ta19zYzogc2NyaXB0c19iYXNpYyAkKEFSQ0hfRElSKS91c2VyLW9mZnNldHMuaCBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoU1lTX1VUSUxfRElSKSAkQAogCi0kKFNZU19VVElMX0RJUikvbWtfdGhyZWFkOiBzY3JpcHRzX2Jhc2ljICQoQVJDSF9TWU1MSU5LUykgJChHRU5fSEVBREVSUykgRk9SQ0UKKyQoU1lTX1VUSUxfRElSKS9ta190aHJlYWQ6IHNjcmlwdHNfYmFzaWMgJChBUkNIX0RJUikva2VybmVsLW9mZnNldHMuaCBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoU1lTX1VUSUxfRElSKSAkQAogCiAkKFNZU19VVElMX0RJUik6IHNjcmlwdHNfYmFzaWMgaW5jbHVkZS9hc20gRk9SQ0UKZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUteDg2XzY0IGIvYXJjaC91bS9NYWtlZmlsZS14ODZfNjQKaW5kZXggYTc3OTcxMS4uMzIxNDQ1NiAxMDA2NDQKLS0tIGEvYXJjaC91bS9NYWtlZmlsZS14ODZfNjQKKysrIGIvYXJjaC91bS9NYWtlZmlsZS14ODZfNjQKQEAgLTIzLDEwICsyMywxMCBAQAogJChTWVNfRElSKS90aHJlYWQuaDogJChTWVNfVVRJTF9ESVIpL21rX3RocmVhZAogCSQoY2FsbCBmaWxlY2hrLGdlbl9oZWFkZXIpCiAKLSQoU1lTX1VUSUxfRElSKS9ta19zYzogc2NyaXB0c19iYXNpYyBGT1JDRQorJChTWVNfVVRJTF9ESVIpL21rX3NjOiBzY3JpcHRzX2Jhc2ljICQoQVJDSF9ESVIpL3VzZXItb2Zmc2V0cy5oIEZPUkNFCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChTWVNfVVRJTF9ESVIpICRACiAKLSQoU1lTX1VUSUxfRElSKS9ta190aHJlYWQ6IHNjcmlwdHNfYmFzaWMgJChBUkNIX1NZTUxJTktTKSAkKEdFTl9IRUFERVJTKSBGT1JDRQorJChTWVNfVVRJTF9ESVIpL21rX3RocmVhZDogc2NyaXB0c19iYXNpYyAkKEdFTl9IRUFERVJTKSAkKEFSQ0hfRElSKS9rZXJuZWwtb2Zmc2V0cy5oIEZPUkNFCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChTWVNfVVRJTF9ESVIpICRACiAKIENMRUFOX0ZJTEVTICs9ICQoU1lTX0hFQURFUlMpCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RlZmNvbmZpZyBiL2FyY2gvdW0vZGVmY29uZmlnCmluZGV4IGZjMzA3NWMuLjQwNjdjM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZGVmY29uZmlnCisrKyBiL2FyY2gvdW0vZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazEKLSMgU3VuIE1hciAyMCAxNjo1MzowMCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMzLXNrYXMzLXY5LXByZTIKKyMgU3VuIEFwciAyNCAxOTo0NjoxMCAyMDA1CiAjCiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfVU1MPXkKQEAgLTE1LDcgKzE1LDggQEAKICMKIENPTkZJR19NT0RFX1RUPXkKIENPTkZJR19NT0RFX1NLQVM9eQotIyBDT05GSUdfNjRfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19VTUxfWDg2PXkKKyMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19UT1BfQUREUj0weGMwMDAwMDAwCiAjIENPTkZJR18zX0xFVkVMX1BHVEFCTEVTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hBU19TQ19TSUdOQUxTPXkKQEAgLTQxLDYgKzQyLDcgQEAKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTE1OCw3ICsxNjAsNiBAQAogIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC00MTIsNiArNDEzLDUgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19QVF9QUk9YWT15Ci0jIENPTkZJR19HUFJPRiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQ09WIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NBTExfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2NoYW5fa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL2NoYW5fa2Vybi5jCmluZGV4IDFmNzdkZWIuLjAxNTAwMzggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9jaGFuX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvY2hhbl9rZXJuLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpZmRlZiBDT05GSUdfTk9DT05GSUdfQ0hBTgogc3RhdGljIHZvaWQgKm5vdF9jb25maWdnZWRfaW5pdChjaGFyICpzdHIsIGludCBkZXZpY2UsIHN0cnVjdCBjaGFuX29wdHMgKm9wdHMpCiB7Ci0JcHJpbnRrKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCisJcHJpbnRmKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCiAJICAgICAgICJVTUxcbiIpOwogCXJldHVybihOVUxMKTsKIH0KQEAgLTMwLDI3ICszMCwyNyBAQAogc3RhdGljIGludCBub3RfY29uZmlnZ2VkX29wZW4oaW50IGlucHV0LCBpbnQgb3V0cHV0LCBpbnQgcHJpbWFyeSwgdm9pZCAqZGF0YSwKIAkJCSAgICAgIGNoYXIgKipkZXZfb3V0KQogewotCXByaW50ayhLRVJOX0VSUiAiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgorCXByaW50ZihLRVJOX0VSUiAiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgogCSAgICAgICAiVU1MXG4iKTsKIAlyZXR1cm4oLUVOT0RFVik7CiB9CiAKIHN0YXRpYyB2b2lkIG5vdF9jb25maWdnZWRfY2xvc2UoaW50IGZkLCB2b2lkICpkYXRhKQogewotCXByaW50ayhLRVJOX0VSUiAiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgorCXByaW50ZihLRVJOX0VSUiAiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgogCSAgICAgICAiVU1MXG4iKTsKIH0KIAogc3RhdGljIGludCBub3RfY29uZmlnZ2VkX3JlYWQoaW50IGZkLCBjaGFyICpjX291dCwgdm9pZCAqZGF0YSkKIHsKLQlwcmludGsoS0VSTl9FUlIgIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKKwlwcmludGYoS0VSTl9FUlIgIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKIAkgICAgICAgIlVNTFxuIik7CiAJcmV0dXJuKC1FSU8pOwogfQogCiBzdGF0aWMgaW50IG5vdF9jb25maWdnZWRfd3JpdGUoaW50IGZkLCBjb25zdCBjaGFyICpidWYsIGludCBsZW4sIHZvaWQgKmRhdGEpCiB7Ci0JcHJpbnRrKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCisJcHJpbnRmKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCiAJICAgICAgICJVTUxcbiIpOwogCXJldHVybigtRUlPKTsKIH0KQEAgLTU4LDcgKzU4LDcgQEAKIHN0YXRpYyBpbnQgbm90X2NvbmZpZ2dlZF9jb25zb2xlX3dyaXRlKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuLAogCQkJCSAgICAgICB2b2lkICpkYXRhKQogewotCXByaW50ayhLRVJOX0VSUiAiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgorCXByaW50ZihLRVJOX0VSUiAiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgogCSAgICAgICAiVU1MXG4iKTsKIAlyZXR1cm4oLUVJTyk7CiB9CkBAIC02NiwxNCArNjYsMTQgQEAKIHN0YXRpYyBpbnQgbm90X2NvbmZpZ2dlZF93aW5kb3dfc2l6ZShpbnQgZmQsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNob3J0ICpyb3dzLAogCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgKmNvbHMpCiB7Ci0JcHJpbnRrKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCisJcHJpbnRmKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCiAJICAgICAgICJVTUxcbiIpOwogCXJldHVybigtRU5PREVWKTsKIH0KIAogc3RhdGljIHZvaWQgbm90X2NvbmZpZ2dlZF9mcmVlKHZvaWQgKmRhdGEpCiB7Ci0JcHJpbnRrKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCisJcHJpbnRmKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCiAJICAgICAgICJVTUxcbiIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwppbmRleCA2OTI0ZjI3Li4wMjVkM2JlIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKQEAgLTM5LDE5ICszOSw2OSBAQAogCWxpbmVfaW50ZXJydXB0KGxpbmUtPmRyaXZlci0+cmVhZF9pcnEsIGFyZywgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfcm9vbShzdHJ1Y3QgbGluZSAqZGV2KQorLyogUmV0dXJucyB0aGUgZnJlZSBzcGFjZSBpbnNpZGUgdGhlIHJpbmcgYnVmZmVyIG9mIHRoaXMgbGluZS4KKyAqCisgKiBTaG91bGQgYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgbGluZS0+bG9jayAodGhpcyBkb2VzIG5vdCBtb2RpZnkgZGF0YXMpLgorICovCitzdGF0aWMgaW50IHdyaXRlX3Jvb20oc3RydWN0IGxpbmUgKmxpbmUpCiB7CiAJaW50IG47CiAKLQlpZiAoZGV2LT5idWZmZXIgPT0gTlVMTCkKLQkJcmV0dXJuIChMSU5FX0JVRlNJWkUgLSAxKTsKKwlpZiAobGluZS0+YnVmZmVyID09IE5VTEwpCisJCXJldHVybiBMSU5FX0JVRlNJWkUgLSAxOwogCi0JbiA9IGRldi0+aGVhZCAtIGRldi0+dGFpbDsKKwkvKiBUaGlzIGlzIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgYnVmZmVyIGlzIHdyYXBwZWQhICovCisJbiA9IGxpbmUtPmhlYWQgLSBsaW5lLT50YWlsOworCiAJaWYgKG4gPD0gMCkKLQkJbiA9IExJTkVfQlVGU0laRSArIG47Ci0JcmV0dXJuIChuIC0gMSk7CisJCW4gPSBMSU5FX0JVRlNJWkUgKyBuOyAvKiBUaGUgb3RoZXIgY2FzZSAqLworCXJldHVybiBuIC0gMTsKIH0KIAoraW50IGxpbmVfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBsaW5lICpsaW5lID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByb29tOworCisJaWYgKHR0eS0+c3RvcHBlZCkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZS0+bG9jaywgZmxhZ3MpOworCXJvb20gPSB3cml0ZV9yb29tKGxpbmUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmUtPmxvY2ssIGZsYWdzKTsKKworCS8qWFhYOiBXYXJuaW5nIHRvIHJlbW92ZSAqLworCWlmICgwID09IHJvb20pCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogJXM6IG5vIHJvb20gbGVmdCBpbiBidWZmZXJcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sdHR5LT5uYW1lKTsKKwlyZXR1cm4gcm9vbTsKK30KKworaW50IGxpbmVfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGxpbmUgKmxpbmUgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lLT5sb2NrLCBmbGFncyk7CisKKwkvKndyaXRlX3Jvb20gc3VidHJhY3RzIDEgZm9yIHRoZSBuZWVkZWQgTlVMTCwgc28gd2UgcmVhZGQgaXQuKi8KKwlyZXQgPSBMSU5FX0JVRlNJWkUgLSAod3JpdGVfcm9vbShsaW5lKSArIDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmUtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGNvcGllcyB0aGUgY29udGVudCBvZiBidWYgaW50byB0aGUgY2lyY3VsYXIgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aAorICogdGhpcyBsaW5lLgorICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkgY29waWVkLCBpLmUuIHRoZSBvbmVzCisgKiBmb3Igd2hpY2ggdGhlcmUgd2FzIHNwYWNlOiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3NlZCB0byBldmVyIGZsdXNoIG91dAorICogdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGxpbmUtPmxvY2shCisgKi8KIHN0YXRpYyBpbnQgYnVmZmVyX2RhdGEoc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgZW5kLCByb29tOwpAQCAtNzAsNDggKzEyMCw5NSBAQAogCWxlbiA9IChsZW4gPiByb29tKSA/IHJvb20gOiBsZW47CiAKIAllbmQgPSBsaW5lLT5idWZmZXIgKyBMSU5FX0JVRlNJWkUgLSBsaW5lLT50YWlsOwotCWlmKGxlbiA8IGVuZCl7CisKKwlpZiAobGVuIDwgZW5kKXsKIAkJbWVtY3B5KGxpbmUtPnRhaWwsIGJ1ZiwgbGVuKTsKIAkJbGluZS0+dGFpbCArPSBsZW47Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CisJCS8qIFRoZSBjaXJjdWxhciBidWZmZXIgaXMgd3JhcHBpbmcgKi8KIAkJbWVtY3B5KGxpbmUtPnRhaWwsIGJ1ZiwgZW5kKTsKIAkJYnVmICs9IGVuZDsKIAkJbWVtY3B5KGxpbmUtPmJ1ZmZlciwgYnVmLCBsZW4gLSBlbmQpOwogCQlsaW5lLT50YWlsID0gbGluZS0+YnVmZmVyICsgbGVuIC0gZW5kOwogCX0KIAotCXJldHVybihsZW4pOworCXJldHVybiBsZW47CiB9CiAKKy8qCisgKiBGbHVzaGVzIHRoZSByaW5nIGJ1ZmZlciB0byB0aGUgb3V0cHV0IGNoYW5uZWxzLiBUaGF0IGlzLCB3cml0ZV9jaGFuIGlzCisgKiBjYWxsZWQsIHBhc3NpbmcgaXQgbGluZS0+aGVhZCBhcyBidWZmZXIsIGFuZCBhbiBhcHByb3ByaWF0ZSBjb3VudC4KKyAqCisgKiBPbiBleGl0LCByZXR1cm5zIDEgd2hlbiB0aGUgYnVmZmVyIGlzIGVtcHR5LAorICogMCB3aGVuIHRoZSBidWZmZXIgaXMgbm90IGVtcHR5IG9uIGV4aXQsCisgKiBhbmQgLWVycm5vIHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBsaW5lLT5sb2NrISovCiBzdGF0aWMgaW50IGZsdXNoX2J1ZmZlcihzdHJ1Y3QgbGluZSAqbGluZSkKIHsKIAlpbnQgbiwgY291bnQ7CiAKIAlpZiAoKGxpbmUtPmJ1ZmZlciA9PSBOVUxMKSB8fCAobGluZS0+aGVhZCA9PSBsaW5lLT50YWlsKSkKLQkJcmV0dXJuKDEpOworCQlyZXR1cm4gMTsKIAogCWlmIChsaW5lLT50YWlsIDwgbGluZS0+aGVhZCkgeworCQkvKiBsaW5lLT5idWZmZXIgKyBMSU5FX0JVRlNJWkUgaXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyISAqLwogCQljb3VudCA9IGxpbmUtPmJ1ZmZlciArIExJTkVfQlVGU0laRSAtIGxpbmUtPmhlYWQ7CisKIAkJbiA9IHdyaXRlX2NoYW4oJmxpbmUtPmNoYW5fbGlzdCwgbGluZS0+aGVhZCwgY291bnQsCiAJCQkgICAgICAgbGluZS0+ZHJpdmVyLT53cml0ZV9pcnEpOwogCQlpZiAobiA8IDApCi0JCQlyZXR1cm4obik7Ci0JCWlmIChuID09IGNvdW50KQorCQkJcmV0dXJuIG47CisJCWlmIChuID09IGNvdW50KSB7CisJCQkvKiBXZSBoYXZlIGZsdXNoZWQgZnJvbSAtPmhlYWQgdG8gYnVmZmVyIGVuZCwgbm93IHdlCisJCQkgKiBtdXN0IGZsdXNoIG9ubHkgZnJvbSB0aGUgYmVnaW5uaW5nIHRvIC0+dGFpbC4qLwogCQkJbGluZS0+aGVhZCA9IGxpbmUtPmJ1ZmZlcjsKLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlsaW5lLT5oZWFkICs9IG47Ci0JCQlyZXR1cm4oMCk7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAogCWNvdW50ID0gbGluZS0+dGFpbCAtIGxpbmUtPmhlYWQ7CiAJbiA9IHdyaXRlX2NoYW4oJmxpbmUtPmNoYW5fbGlzdCwgbGluZS0+aGVhZCwgY291bnQsIAogCQkgICAgICAgbGluZS0+ZHJpdmVyLT53cml0ZV9pcnEpOwotCWlmKG4gPCAwKSByZXR1cm4obik7CisKKwlpZihuIDwgMCkKKwkJcmV0dXJuIG47CiAKIAlsaW5lLT5oZWFkICs9IG47Ci0JcmV0dXJuKGxpbmUtPmhlYWQgPT0gbGluZS0+dGFpbCk7CisJcmV0dXJuIGxpbmUtPmhlYWQgPT0gbGluZS0+dGFpbDsKK30KKwordm9pZCBsaW5lX2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBsaW5lICpsaW5lID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwkvKlhYWDogY29waWVkIGZyb20gbGluZV93cml0ZSwgdmVyaWZ5IGlmIGl0IGlzIGNvcnJlY3QhKi8KKwlpZih0dHktPnN0b3BwZWQpCisJCXJldHVybjsKKwkJLy9yZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lLT5sb2NrLCBmbGFncyk7CisJZXJyID0gZmx1c2hfYnVmZmVyKGxpbmUpOworCS8qaWYgKGVyciA9PSAxKQorCQllcnIgPSAwOyovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZS0+bG9jaywgZmxhZ3MpOworCS8vcmV0dXJuIGVycjsKK30KKworLyogV2UgbWFwIGJvdGggLT5mbHVzaF9jaGFycyBhbmQgLT5wdXRfY2hhciAod2hpY2ggZ28gaW4gcGFpcikgb250byAtPmZsdXNoX2J1ZmZlcgorICogYW5kIC0+d3JpdGUuIEhvcGUgaXQncyBub3QgdGhhdCBiYWQuKi8KK3ZvaWQgbGluZV9mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCWxpbmVfZmx1c2hfYnVmZmVyKHR0eSk7Cit9CisKK3ZvaWQgbGluZV9wdXRfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKQoreworCWxpbmVfd3JpdGUodHR5LCAmY2gsIHNpemVvZihjaCkpOwogfQogCiBpbnQgbGluZV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pCkBAIC0xMjAsMzggKzIxNywzMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG4sIGVyciwgcmV0ID0gMDsKIAotCWlmKHR0eS0+c3RvcHBlZCkgcmV0dXJuIDA7CisJaWYodHR5LT5zdG9wcGVkKQorCQlyZXR1cm4gMDsKIAotCWRvd24oJmxpbmUtPnNlbSk7Ci0JaWYobGluZS0+aGVhZCAhPSBsaW5lLT50YWlsKXsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lLT5sb2NrLCBmbGFncyk7CisJaWYgKGxpbmUtPmhlYWQgIT0gbGluZS0+dGFpbCkgewogCQlyZXQgPSBidWZmZXJfZGF0YShsaW5lLCBidWYsIGxlbik7CiAJCWVyciA9IGZsdXNoX2J1ZmZlcihsaW5lKTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQlpZihlcnIgPD0gMCAmJiAoZXJyICE9IC1FQUdBSU4gfHwgIXJldCkpCisJCWlmIChlcnIgPD0gMCAmJiAoZXJyICE9IC1FQUdBSU4gfHwgIXJldCkpCiAJCQlyZXQgPSBlcnI7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCW4gPSB3cml0ZV9jaGFuKCZsaW5lLT5jaGFuX2xpc3QsIGJ1ZiwgbGVuLCAKIAkJCSAgICAgICBsaW5lLT5kcml2ZXItPndyaXRlX2lycSk7Ci0JCWlmKG4gPCAwKXsKKwkJaWYgKG4gPCAwKSB7CiAJCQlyZXQgPSBuOwogCQkJZ290byBvdXRfdXA7CiAJCX0KIAogCQlsZW4gLT0gbjsKIAkJcmV0ICs9IG47Ci0JCWlmKGxlbiA+IDApCisJCWlmIChsZW4gPiAwKQogCQkJcmV0ICs9IGJ1ZmZlcl9kYXRhKGxpbmUsIGJ1ZiArIG4sIGxlbik7CiAJfQotIG91dF91cDoKLQl1cCgmbGluZS0+c2VtKTsKLQlyZXR1cm4ocmV0KTsKLX0KLQotdm9pZCBsaW5lX3B1dF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpCi17Ci0JbGluZV93cml0ZSh0dHksICZjaCwgc2l6ZW9mKGNoKSk7CitvdXRfdXA6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgbGluZV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCkKQEAgLTE1OSwxMSArMjQ5LDYgQEAKIAkvKiBub3RoaW5nICovCiB9CiAKLWludCBsaW5lX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHsKIAlpbnQgIGNtZDsKIAljaGFyICpsZXZlbDsKQEAgLTI1MCw3ICszMzUsNyBAQAogCQlyZXQgPSAtRU5PSU9DVExDTUQ7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4ocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbGluZV93cml0ZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSwKQEAgLTI2MCwxOCArMzQ1LDIzIEBACiAJc3RydWN0IGxpbmUgKmxpbmUgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCBlcnI7CiAKKwkvKiBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGhlcmUgYmVjYXVzZSB3ZSByZWdpc3RlcmVkIHRoZSBpbnRlcnJ1cHQgd2l0aAorCSAqIFNBX0lOVEVSUlVQVCAoc2VlIGxpbmVfc2V0dXBfaXJxKS4qLworCisJc3Bpbl9sb2NrX2lycSgmbGluZS0+bG9jayk7CiAJZXJyID0gZmx1c2hfYnVmZmVyKGxpbmUpOwotCWlmKGVyciA9PSAwKQotCQlyZXR1cm4oSVJRX05PTkUpOwotCWVsc2UgaWYoZXJyIDwgMCl7CisJaWYgKGVyciA9PSAwKSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9IGVsc2UgaWYoZXJyIDwgMCkgewogCQlsaW5lLT5oZWFkID0gbGluZS0+YnVmZmVyOwogCQlsaW5lLT50YWlsID0gbGluZS0+YnVmZmVyOwogCX0KKwlzcGluX3VubG9ja19pcnEoJmxpbmUtPmxvY2spOwogCiAJaWYodHR5ID09IE5VTEwpCi0JCXJldHVybihJUlFfTk9ORSk7CisJCXJldHVybiBJUlFfTk9ORTsKIAotCWlmKHRlc3RfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0dHktPmZsYWdzKSAmJgorCWlmICh0ZXN0X2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCAmdHR5LT5mbGFncykgJiYKIAkgICAodHR5LT5sZGlzYy53cml0ZV93YWtldXAgIT0gTlVMTCkpCiAJCSh0dHktPmxkaXNjLndyaXRlX3dha2V1cCkodHR5KTsKIAkKQEAgLTI4MSw5ICszNzEsOSBAQAogCSAqIHdyaXRlcy4KIAkgKi8KIAotCWlmKHdhaXRxdWV1ZV9hY3RpdmUoJnR0eS0+d3JpdGVfd2FpdCkpCisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnR0eS0+d3JpdGVfd2FpdCkpCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLQlyZXR1cm4oSVJRX0hBTkRMRUQpOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogaW50IGxpbmVfc2V0dXBfaXJxKGludCBmZCwgaW50IGlucHV0LCBpbnQgb3V0cHV0LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtMjkyLDE1ICszODIsMTggQEAKIAlzdHJ1Y3QgbGluZV9kcml2ZXIgKmRyaXZlciA9IGxpbmUtPmRyaXZlcjsKIAlpbnQgZXJyID0gMCwgZmxhZ3MgPSBTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET007CiAKLQlpZihpbnB1dCkgZXJyID0gdW1fcmVxdWVzdF9pcnEoZHJpdmVyLT5yZWFkX2lycSwgZmQsIElSUV9SRUFELCAKKwlpZiAoaW5wdXQpCisJCWVyciA9IHVtX3JlcXVlc3RfaXJxKGRyaXZlci0+cmVhZF9pcnEsIGZkLCBJUlFfUkVBRCwKIAkJCQkgICAgICAgbGluZV9pbnRlcnJ1cHQsIGZsYWdzLCAKIAkJCQkgICAgICAgZHJpdmVyLT5yZWFkX2lycV9uYW1lLCB0dHkpOwotCWlmKGVycikgcmV0dXJuKGVycik7Ci0JaWYob3V0cHV0KSBlcnIgPSB1bV9yZXF1ZXN0X2lycShkcml2ZXItPndyaXRlX2lycSwgZmQsIElSUV9XUklURSwgCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAob3V0cHV0KQorCQllcnIgPSB1bV9yZXF1ZXN0X2lycShkcml2ZXItPndyaXRlX2lycSwgZmQsIElSUV9XUklURSwKIAkJCQkJbGluZV93cml0ZV9pbnRlcnJ1cHQsIGZsYWdzLCAKIAkJCQkJZHJpdmVyLT53cml0ZV9pcnFfbmFtZSwgdHR5KTsKIAlsaW5lLT5oYXZlX2lycSA9IDE7Ci0JcmV0dXJuKGVycik7CisJcmV0dXJuIGVycjsKIH0KIAogdm9pZCBsaW5lX2Rpc2FibGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGN1cnJlbnRfaXJxKQpAQCAtMzM2LDcgKzQyOSw5IEBACiAJbGluZSA9ICZsaW5lc1t0dHktPmluZGV4XTsKIAl0dHktPmRyaXZlcl9kYXRhID0gbGluZTsKIAotCWRvd24oJmxpbmUtPnNlbSk7CisJLyogVGhlIElSUSB3aGljaCB0YWtlcyB0aGlzIGxvY2sgaXMgbm90IHlldCBlbmFibGVkIGFuZCB3b24ndCBiZSBydW4KKwkgKiBiZWZvcmUgdGhlIGVuZCwgc28gd2UgZG9uJ3QgbmVlZCB0byB1c2Ugc3Bpbl9sb2NrX2lycS4qLworCXNwaW5fbG9jaygmbGluZS0+bG9jayk7CiAJaWYgKHR0eS0+Y291bnQgPT0gMSkgewogCQlpZiAoIWxpbmUtPnZhbGlkKSB7CiAJCQllcnIgPSAtRU5PREVWOwpAQCAtMzQ5LDYgKzQ0NCw3IEBACiAJCQllcnIgPSBvcGVuX2NoYW4oJmxpbmUtPmNoYW5fbGlzdCk7CiAJCQlpZihlcnIpIGdvdG8gb3V0OwogCQl9CisJCS8qIEhlcmUgdGhlIGludGVycnVwdCBpcyByZWdpc3RlcmVkLiovCiAJCWVuYWJsZV9jaGFuKCZsaW5lLT5jaGFuX2xpc3QsIHR0eSk7CiAJCUlOSVRfV09SSygmbGluZS0+dGFzaywgbGluZV90aW1lcl9jYiwgdHR5KTsKIAl9CkBAIC0zNjIsMjEgKzQ1OCwzNiBAQAogCWxpbmUtPmNvdW50Kys7CiAKIG91dDoKLQl1cCgmbGluZS0+c2VtKTsKLQlyZXR1cm4oZXJyKTsKKwlzcGluX3VubG9jaygmbGluZS0+bG9jayk7CisJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl93aW5jaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKwogdm9pZCBsaW5lX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlscCkKIHsKIAlzdHJ1Y3QgbGluZSAqbGluZSA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKLQlkb3duKCZsaW5lLT5zZW0pOworCS8qIFhYWDogSSBhc3N1bWUgdGhpcyBzaG91bGQgYmUgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dCwgbm90IHdpdGgKKyAgICAgICAgICogIGludGVycnVwdHMgZGlzYWJsZWQhCisgICAgICAgICAqLworCXNwaW5fbG9ja19pcnEoJmxpbmUtPmxvY2spOworCisJLyogV2UgaWdub3JlIHRoZSBlcnJvciBhbnl3YXkhICovCisJZmx1c2hfYnVmZmVyKGxpbmUpOworCiAJbGluZS0+Y291bnQtLTsKIAlpZiAodHR5LT5jb3VudCA9PSAxKSB7CiAJCWxpbmVfZGlzYWJsZSh0dHksIC0xKTsKIAkJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAJfQotCXVwKCZsaW5lLT5zZW0pOworCisgICAgICAgIGlmKChsaW5lLT5jb3VudCA9PSAwKSAmJiBsaW5lLT5zaWdpbyl7CisgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl93aW5jaCh0dHkpOworICAgICAgICAgICAgICAgIGxpbmUtPnNpZ2lvID0gMDsKKyAgICAgICAgfQorCisJc3Bpbl91bmxvY2tfaXJxKCZsaW5lLT5sb2NrKTsKIH0KIAogdm9pZCBjbG9zZV9saW5lcyhzdHJ1Y3QgbGluZSAqbGluZXMsIGludCBubGluZXMpCkBAIC0zODcsMzEgKzQ5OCw0MSBAQAogCQljbG9zZV9jaGFuKCZsaW5lc1tpXS5jaGFuX2xpc3QpOwogfQogCi1pbnQgbGluZV9zZXR1cChzdHJ1Y3QgbGluZSAqbGluZXMsIGludCBudW0sIGNoYXIgKmluaXQsIGludCBhbGxfYWxsb3dlZCkKKy8qIENvbW1vbiBzZXR1cCBjb2RlIGZvciBib3RoIHN0YXJ0dXAgY29tbWFuZCBsaW5lIGFuZCBtY29uc29sZSBpbml0aWFsaXphdGlvbi4KKyAqIEBsaW5lcyBjb250YWlucyB0aGUgdGhlIGFycmF5IChvZiBzaXplIEBudW0pIHRvIG1vZGlmeTsKKyAqIEBpbml0IGlzIHRoZSBzZXR1cCBzdHJpbmc7CisgKiBAYWxsX2FsbG93ZWQgaXMgYSBib29sZWFuIHNheWluZyBpZiB3ZSBjYW4gc2V0dXAgdGhlIHdob2xlIEBsaW5lcworICogYXQgb25jZS4gRm9yIGluc3RhbmNlLCBpdCB3aWxsIGJlIHVzdWFsbHkgdHJ1ZSBmb3Igc3RhcnR1cCBpbml0LiAod2hlcmUgd2UKKyAqIGNhbiB1c2UgY29uPXh0ZXJtKSBhbmQgZmFsc2UgZm9yIG1jb25zb2xlLiovCisKK2ludCBsaW5lX3NldHVwKHN0cnVjdCBsaW5lICpsaW5lcywgdW5zaWduZWQgaW50IG51bSwgY2hhciAqaW5pdCwgaW50IGFsbF9hbGxvd2VkKQogewogCWludCBpLCBuOwogCWNoYXIgKmVuZDsKIAotCWlmKCppbml0ID09ICc9JykgbiA9IC0xOwotCWVsc2UgeworCWlmKCppbml0ID09ICc9JykgeworCQkvKiBXZSBzYWlkIGNvbj0vc3NsPSBpbnN0ZWFkIG9mIGNvbiM9LCBzbyB3ZSBhcmUgY29uZmlndXJpbmcgYWxsCisJCSAqIGNvbnNvbGVzIGF0IG9uY2UuKi8KKwkJbiA9IC0xOworCX0gZWxzZSB7CiAJCW4gPSBzaW1wbGVfc3RydG91bChpbml0LCAmZW5kLCAwKTsKIAkJaWYoKmVuZCAhPSAnPScpewogCQkJcHJpbnRrKEtFUk5fRVJSICJsaW5lX3NldHVwIGZhaWxlZCB0byBwYXJzZSBcIiVzXCJcbiIsIAogCQkJICAgICAgIGluaXQpOwotCQkJcmV0dXJuKDApOworCQkJcmV0dXJuIDA7CiAJCX0KIAkJaW5pdCA9IGVuZDsKIAl9CiAJaW5pdCsrOwotCWlmKChuID49IDApICYmIChuID49IG51bSkpeworCisJaWYgKG4gPj0gKHNpZ25lZCBpbnQpIG51bSkgewogCQlwcmludGsoImxpbmVfc2V0dXAgLSAlZCBvdXQgb2YgcmFuZ2UgKCgwIC4uLiAlZCkgYWxsb3dlZClcbiIsCiAJCSAgICAgICBuLCBudW0gLSAxKTsKLQkJcmV0dXJuKDApOwotCX0KLQllbHNlIGlmIChuID49IDApeworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKG4gPj0gMCl7CiAJCWlmIChsaW5lc1tuXS5jb3VudCA+IDApIHsKIAkJCXByaW50aygibGluZV9zZXR1cCAtIGRldmljZSAlZCBpcyBvcGVuXG4iLCBuKTsKLQkJCXJldHVybigwKTsKKwkJCXJldHVybiAwOwogCQl9CiAJCWlmIChsaW5lc1tuXS5pbml0X3ByaSA8PSBJTklUX09ORSl7CiAJCQlsaW5lc1tuXS5pbml0X3ByaSA9IElOSVRfT05FOwpAQCAtNDIyLDEzICs1NDMsMTEgQEAKIAkJCQlsaW5lc1tuXS52YWxpZCA9IDE7CiAJCQl9CQogCQl9Ci0JfQotCWVsc2UgaWYoIWFsbF9hbGxvd2VkKXsKKwl9IGVsc2UgaWYoIWFsbF9hbGxvd2VkKXsKIAkJcHJpbnRrKCJsaW5lX3NldHVwIC0gY2FuJ3QgY29uZmlndXJlIGFsbCBkZXZpY2VzIGZyb20gIgogCQkgICAgICAgIm1jb25zb2xlXG4iKTsKLQkJcmV0dXJuKDApOwotCX0KLQllbHNlIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKIAkJZm9yKGkgPSAwOyBpIDwgbnVtOyBpKyspewogCQkJaWYobGluZXNbaV0uaW5pdF9wcmkgPD0gSU5JVF9BTEwpewogCQkJCWxpbmVzW2ldLmluaXRfcHJpID0gSU5JVF9BTEw7CkBAIC00NDAsMjEgKzU1OSwyMSBAQAogCQkJfQogCQl9CiAJfQotCXJldHVybigxKTsKKwlyZXR1cm4gMTsKIH0KIAotaW50IGxpbmVfY29uZmlnKHN0cnVjdCBsaW5lICpsaW5lcywgaW50IG51bSwgY2hhciAqc3RyKQoraW50IGxpbmVfY29uZmlnKHN0cnVjdCBsaW5lICpsaW5lcywgdW5zaWduZWQgaW50IG51bSwgY2hhciAqc3RyKQogewogCWNoYXIgKm5ldyA9IHVtbF9zdHJkdXAoc3RyKTsKIAogCWlmKG5ldyA9PSBOVUxMKXsKIAkJcHJpbnRrKCJsaW5lX2NvbmZpZyAtIHVtbF9zdHJkdXAgZmFpbGVkXG4iKTsKLQkJcmV0dXJuKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JcmV0dXJuKCFsaW5lX3NldHVwKGxpbmVzLCBudW0sIG5ldywgMCkpOworCXJldHVybiAhbGluZV9zZXR1cChsaW5lcywgbnVtLCBuZXcsIDApOwogfQogCi1pbnQgbGluZV9nZXRfY29uZmlnKGNoYXIgKm5hbWUsIHN0cnVjdCBsaW5lICpsaW5lcywgaW50IG51bSwgY2hhciAqc3RyLCAKK2ludCBsaW5lX2dldF9jb25maWcoY2hhciAqbmFtZSwgc3RydWN0IGxpbmUgKmxpbmVzLCB1bnNpZ25lZCBpbnQgbnVtLCBjaGFyICpzdHIsCiAJCSAgICBpbnQgc2l6ZSwgY2hhciAqKmVycm9yX291dCkKIHsKIAlzdHJ1Y3QgbGluZSAqbGluZTsKQEAgLTQ2NCw0NyArNTgzLDMzIEBACiAJZGV2ID0gc2ltcGxlX3N0cnRvdWwobmFtZSwgJmVuZCwgMCk7CiAJaWYoKCplbmQgIT0gJ1wwJykgfHwgKGVuZCA9PSBuYW1lKSl7CiAJCSplcnJvcl9vdXQgPSAibGluZV9nZXRfY29uZmlnIGZhaWxlZCB0byBwYXJzZSBkZXZpY2UgbnVtYmVyIjsKLQkJcmV0dXJuKDApOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZigoZGV2IDwgMCkgfHwgKGRldiA+PSBudW0pKXsKLQkJKmVycm9yX291dCA9ICJkZXZpY2UgbnVtYmVyIG9mIG9mIHJhbmdlIjsKLQkJcmV0dXJuKDApOworCQkqZXJyb3Jfb3V0ID0gImRldmljZSBudW1iZXIgb3V0IG9mIHJhbmdlIjsKKwkJcmV0dXJuIDA7CiAJfQogCiAJbGluZSA9ICZsaW5lc1tkZXZdOwogCi0JZG93bigmbGluZS0+c2VtKTsKKwlzcGluX2xvY2soJmxpbmUtPmxvY2spOwogCWlmKCFsaW5lLT52YWxpZCkKIAkJQ09ORklHX0NIVU5LKHN0ciwgc2l6ZSwgbiwgIm5vbmUiLCAxKTsKIAllbHNlIGlmKGxpbmUtPmNvdW50ID09IDApCiAJCUNPTkZJR19DSFVOSyhzdHIsIHNpemUsIG4sIGxpbmUtPmluaXRfc3RyLCAxKTsKIAllbHNlIG4gPSBjaGFuX2NvbmZpZ19zdHJpbmcoJmxpbmUtPmNoYW5fbGlzdCwgc3RyLCBzaXplLCBlcnJvcl9vdXQpOwotCXVwKCZsaW5lLT5zZW0pOworCXNwaW5fdW5sb2NrKCZsaW5lLT5sb2NrKTsKIAotCXJldHVybihuKTsKKwlyZXR1cm4gbjsKIH0KIAotaW50IGxpbmVfcmVtb3ZlKHN0cnVjdCBsaW5lICpsaW5lcywgaW50IG51bSwgY2hhciAqc3RyKQoraW50IGxpbmVfcmVtb3ZlKHN0cnVjdCBsaW5lICpsaW5lcywgdW5zaWduZWQgaW50IG51bSwgY2hhciAqc3RyKQogewogCWNoYXIgY29uZmlnW3NpemVvZigiY29ueHh4eD1ub25lXDAiKV07CiAKIAlzcHJpbnRmKGNvbmZpZywgIiVzPW5vbmUiLCBzdHIpOwotCXJldHVybighbGluZV9zZXR1cChsaW5lcywgbnVtLCBjb25maWcsIDApKTsKLX0KLQotaW50IGxpbmVfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXN0cnVjdCBsaW5lICpkZXYgPSB0dHktPmRyaXZlcl9kYXRhOwotCWludCByb29tOwotCi0JaWYgKHR0eS0+c3RvcHBlZCkKLQkJcmV0dXJuIDA7Ci0Jcm9vbSA9IHdyaXRlX3Jvb20oZGV2KTsKLQlpZiAoMCA9PSByb29tKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVzOiBubyByb29tIGxlZnQgaW4gYnVmZmVyXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLHR0eS0+bmFtZSk7Ci0JcmV0dXJuIHJvb207CisJcmV0dXJuICFsaW5lX3NldHVwKGxpbmVzLCBudW0sIGNvbmZpZywgMCk7CiB9CiAKIHN0cnVjdCB0dHlfZHJpdmVyICpsaW5lX3JlZ2lzdGVyX2RldmZzKHN0cnVjdCBsaW5lcyAqc2V0LApAQCAtNTUzLDcgKzY1OCw3IEBACiAJZm9yKGkgPSAwOyBpIDwgbmxpbmVzOyBpKyspewogCQlsaW5lID0gJmxpbmVzW2ldOwogCQlJTklUX0xJU1RfSEVBRCgmbGluZS0+Y2hhbl9saXN0KTsKLQkJc2VtYV9pbml0KCZsaW5lLT5zZW0sIDEpOworCQlzcGluX2xvY2tfaW5pdCgmbGluZS0+bG9jayk7CiAJCWlmKGxpbmUtPmluaXRfc3RyICE9IE5VTEwpewogCQkJbGluZS0+aW5pdF9zdHIgPSB1bWxfc3RyZHVwKGxpbmUtPmluaXRfc3RyKTsKIAkJCWlmKGxpbmUtPmluaXRfc3RyID09IE5VTEwpCkBAIC01ODcsNyArNjkyLDcgQEAKIAkJCQkgICAgICAgImVycm5vID0gJWRcbiIsIC1lcnIpOwogCQkJCXByaW50aygiZmQgJWQgaXMgbG9zaW5nIFNJR1dJTkNIIHN1cHBvcnRcbiIsCiAJCQkJICAgICAgIHdpbmNoLT50dHlfZmQpOwotCQkJCXJldHVybihJUlFfSEFORExFRCk7CisJCQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCQkJfQogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTYwMyw3ICs3MDgsNyBAQAogIG91dDoKIAlpZih3aW5jaC0+ZmQgIT0gLTEpCiAJCXJlYWN0aXZhdGVfZmQod2luY2gtPmZkLCBXSU5DSF9JUlEpOwotCXJldHVybihJUlFfSEFORExFRCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBERUNMQVJFX01VVEVYKHdpbmNoX2hhbmRsZXJfc2VtKTsKQEAgLTYyNSw3ICs3MzAsNyBAQAogCQkJCSAgIC5waWQgIAk9IHBpZCwKIAkJCQkgICAudHR5IAk9IHR0eSB9KTsKIAlsaXN0X2FkZCgmd2luY2gtPmxpc3QsICZ3aW5jaF9oYW5kbGVycyk7Ci0JaWYodW1fcmVxdWVzdF9pcnEoV0lOQ0hfSVJRLCBmZCwgSVJRX1JFQUQsIHdpbmNoX2ludGVycnVwdCwgCisJaWYodW1fcmVxdWVzdF9pcnEoV0lOQ0hfSVJRLCBmZCwgSVJRX1JFQUQsIHdpbmNoX2ludGVycnVwdCwKIAkJCSAgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEgfCBTQV9TQU1QTEVfUkFORE9NLCAKIAkJCSAgIndpbmNoIiwgd2luY2gpIDwgMCkKIAkJcHJpbnRrKCJyZWdpc3Rlcl93aW5jaF9pcnEgLSBmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRXG4iKTsKQEAgLTYzMyw2ICs3MzgsMzQgQEAKIAl1cCgmd2luY2hfaGFuZGxlcl9zZW0pOwogfQogCitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3dpbmNoKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZWxlOworCXN0cnVjdCB3aW5jaCAqd2luY2gsICpmb3VuZCA9IE5VTEw7CisKKwlkb3duKCZ3aW5jaF9oYW5kbGVyX3NlbSk7CisJbGlzdF9mb3JfZWFjaChlbGUsICZ3aW5jaF9oYW5kbGVycyl7CisJCXdpbmNoID0gbGlzdF9lbnRyeShlbGUsIHN0cnVjdCB3aW5jaCwgbGlzdCk7CisgICAgICAgICAgICAgICAgaWYod2luY2gtPnR0eSA9PSB0dHkpeworICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB3aW5jaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKGZvdW5kID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBvdXQ7CisKKyAgICAgICAgaWYod2luY2gtPnBpZCAhPSAtMSkKKyAgICAgICAgICAgICAgICBvc19raWxsX3Byb2Nlc3Mod2luY2gtPnBpZCwgMSk7CisKKyAgICAgICAgZnJlZV9pcnFfYnlfaXJxX2FuZF9kZXYoV0lOQ0hfSVJRLCB3aW5jaCk7CisgICAgICAgIGZyZWVfaXJxKFdJTkNIX0lSUSwgd2luY2gpOworICAgICAgICBsaXN0X2RlbCgmd2luY2gtPmxpc3QpOworICAgICAgICBrZnJlZSh3aW5jaCk7Cisgb3V0OgorCXVwKCZ3aW5jaF9oYW5kbGVyX3NlbSk7Cit9CisKIHN0YXRpYyB2b2lkIHdpbmNoX2NsZWFudXAodm9pZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGU7CkBAIC02NTYsMjYgKzc4OSwxNiBAQAogCWludCBsZW47CiAKIAl1bWlkID0gZ2V0X3VtaWQoMSk7Ci0JaWYodW1pZCA9PSBOVUxMKSByZXR1cm4oYmFzZSk7CisJaWYodW1pZCA9PSBOVUxMKQorCQlyZXR1cm4gYmFzZTsKIAkKIAlsZW4gPSBzdHJsZW4oYmFzZSkgKyBzdHJsZW4oIiAoKSIpICsgc3RybGVuKHVtaWQpICsgMTsKIAl0aXRsZSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZih0aXRsZSA9PSBOVUxMKXsKIAkJcHJpbnRrKCJGYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciB4dGVybSB0aXRsZVxuIik7Ci0JCXJldHVybihiYXNlKTsKKwkJcmV0dXJuIGJhc2U7CiAJfQogCiAJc25wcmludGYodGl0bGUsIGxlbiwgIiVzICglcykiLCBiYXNlLCB1bWlkKTsKLQlyZXR1cm4odGl0bGUpOworCXJldHVybiB0aXRsZTsKIH0KLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zc2wuYyBiL2FyY2gvdW0vZHJpdmVycy9zc2wuYwppbmRleCBjNTgzOWMzLi5hMmJhYzQyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvc3NsLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3NzbC5jCkBAIC0xMDcsMTEgKzEwNyw2IEBACiB9CiAKICNpZiAwCi1zdGF0aWMgaW50IHNzbF9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlyZXR1cm4oMCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNzbF9mbHVzaF9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlyZXR1cm47CkBAIC0xNDksMTEgKzE0NCwxMSBAQAogCS5wdXRfY2hhciAJCT0gbGluZV9wdXRfY2hhciwKIAkud3JpdGVfcm9vbQkJPSBsaW5lX3dyaXRlX3Jvb20sCiAJLmNoYXJzX2luX2J1ZmZlciAJPSBsaW5lX2NoYXJzX2luX2J1ZmZlciwKKwkuZmx1c2hfYnVmZmVyIAkJPSBsaW5lX2ZsdXNoX2J1ZmZlciwKKwkuZmx1c2hfY2hhcnMgCQk9IGxpbmVfZmx1c2hfY2hhcnMsCiAJLnNldF90ZXJtaW9zIAkJPSBsaW5lX3NldF90ZXJtaW9zLAogCS5pb2N0bCAJIAkJPSBsaW5lX2lvY3RsLAogI2lmIDAKLQkuZmx1c2hfY2hhcnMgCQk9IHNzbF9mbHVzaF9jaGFycywKLQkuZmx1c2hfYnVmZmVyIAkJPSBzc2xfZmx1c2hfYnVmZmVyLAogCS50aHJvdHRsZSAJCT0gc3NsX3Rocm90dGxlLAogCS51bnRocm90dGxlIAkJPSBzc2xfdW50aHJvdHRsZSwKIAkuc3RvcCAJIAkJPSBzc2xfc3RvcCwKQEAgLTE3MSwxMCArMTY2LDExIEBACiAJCQkgICAgICB1bnNpZ25lZCBsZW4pCiB7CiAJc3RydWN0IGxpbmUgKmxpbmUgPSAmc2VyaWFsX2xpbmVzW2MtPmluZGV4XTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZG93bigmbGluZS0+c2VtKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZS0+bG9jaywgZmxhZ3MpOwogCWNvbnNvbGVfd3JpdGVfY2hhbigmbGluZS0+Y2hhbl9saXN0LCBzdHJpbmcsIGxlbik7Ci0JdXAoJmxpbmUtPnNlbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZS0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKnNzbF9jb25zb2xlX2RldmljZShzdHJ1Y3QgY29uc29sZSAqYywgaW50ICppbmRleCkKQEAgLTIzOCwxNCArMjM0LDMgQEAKIAogX19zZXR1cCgic3NsIiwgc3NsX2NoYW5fc2V0dXApOwogX19jaGFubmVsX2hlbHAoc3NsX2NoYW5fc2V0dXAsICJzc2wiKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zdGRpb19jb25zb2xlLmMgYi9hcmNoL3VtL2RyaXZlcnMvc3RkaW9fY29uc29sZS5jCmluZGV4IGU2MDRkN2MuLjM2MWQwYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9zdGRpb19jb25zb2xlLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3N0ZGlvX2NvbnNvbGUuYwpAQCAtMTE2LDggKzExNiwxMSBAQAogCS5vcGVuIAkgCQk9IGNvbl9vcGVuLAogCS5jbG9zZSAJIAkJPSBsaW5lX2Nsb3NlLAogCS53cml0ZSAJIAkJPSBsaW5lX3dyaXRlLAorCS5wdXRfY2hhciAJCT0gbGluZV9wdXRfY2hhciwKICAJLndyaXRlX3Jvb20JCT0gbGluZV93cml0ZV9yb29tLAogCS5jaGFyc19pbl9idWZmZXIgCT0gbGluZV9jaGFyc19pbl9idWZmZXIsCisJLmZsdXNoX2J1ZmZlciAJCT0gbGluZV9mbHVzaF9idWZmZXIsCisJLmZsdXNoX2NoYXJzIAkJPSBsaW5lX2ZsdXNoX2NoYXJzLAogCS5zZXRfdGVybWlvcyAJCT0gbGluZV9zZXRfdGVybWlvcywKIAkuaW9jdGwgCSAJCT0gbGluZV9pb2N0bCwKIH07CkBAIC0xMjYsMTAgKzEyOSwxMSBAQAogCQkJICB1bnNpZ25lZCBsZW4pCiB7CiAJc3RydWN0IGxpbmUgKmxpbmUgPSAmdnRzW2NvbnNvbGUtPmluZGV4XTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZG93bigmbGluZS0+c2VtKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZS0+bG9jaywgZmxhZ3MpOwogCWNvbnNvbGVfd3JpdGVfY2hhbigmbGluZS0+Y2hhbl9saXN0LCBzdHJpbmcsIGxlbik7Ci0JdXAoJmxpbmUtPnNlbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZS0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKnVtbF9jb25zb2xlX2RldmljZShzdHJ1Y3QgY29uc29sZSAqYywgaW50ICppbmRleCkKQEAgLTE5MiwxNCArMTk2LDMgQEAKIH0KIF9fc2V0dXAoImNvbiIsIGNvbnNvbGVfY2hhbl9zZXR1cCk7CiBfX2NoYW5uZWxfaGVscChjb25zb2xlX2NoYW5fc2V0dXAsICJjb24iKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKaW5kZXggNGQ4YjE2NS4uOWE1NmZmOSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKQEAgLTE1Niw2ICsxNTYsNyBAQAogc3RhdGljIHN0cnVjdCBvcGVuZmxhZ3MgZ2xvYmFsX29wZW5mbGFncyA9IE9QRU5fRkxBR1M7CiAKIHN0cnVjdCBjb3cgeworCS8qIFRoaXMgaXMgdGhlIGJhY2tpbmcgZmlsZSwgYWN0dWFsbHkgKi8KIAljaGFyICpmaWxlOwogCWludCBmZDsKIAl1bnNpZ25lZCBsb25nICpiaXRtYXA7CkBAIC05MjcsMTAgKzkyOCwxNCBAQAogCQl9CiAJfQogCWRldi0+Y291bnQrKzsKLQlpZigoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmICFkZXYtPm9wZW5mbGFncy53KXsKKwlzZXRfZGlza19ybyhkaXNrLCAhZGV2LT5vcGVuZmxhZ3Mudyk7CisKKwkvKiBUaGlzIHNob3VsZCBubyBtb3JlIGJlIG5lZWRlZC4gQW5kIGl0IGRpZG4ndCB3b3JrIGFueXdheSB0byBleGNsdWRlCisJICogcmVhZC13cml0ZSByZW1vdW50aW5nIG9mIGZpbGVzeXN0ZW1zLiovCisJLyppZigoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmICFkZXYtPm9wZW5mbGFncy53KXsKIAkgICAgICAgIGlmKC0tZGV2LT5jb3VudCA9PSAwKSB1YmRfY2xvc2UoZGV2KTsKIAkgICAgICAgIGVyciA9IC1FUk9GUzsKLQl9CisJfSovCiAgb3V0OgogCXJldHVybihlcnIpOwogfQpAQCAtMTA5Niw2ICsxMTAxLDcgQEAKIAogCWlmKHJlcS0+cnFfc3RhdHVzID09IFJRX0lOQUNUSVZFKSByZXR1cm4oMSk7CiAKKwkvKiBUaGlzIHNob3VsZCBiZSBpbXBvc3NpYmxlIG5vdyAqLwogCWlmKChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSAmJiAhZGV2LT5vcGVuZmxhZ3Mudyl7CiAJCXByaW50aygiV3JpdGUgYXR0ZW1wdGVkIG9uIHJlYWRvbmx5IHViZCBkZXZpY2UgJXNcbiIsIAogCQkgICAgICAgZGlzay0+ZGlza19uYW1lKTsKQEAgLTEyNDMsNiArMTI0OSw3IEBACiAKIAkJLyogSXQncyBhIHdyaXRlIHRvIGEgdWJkIGRldmljZSAqLwogCisJCS8qIFRoaXMgc2hvdWxkIGJlIGltcG9zc2libGUgbm93ICovCiAJCWlmKCFkZXYtPm9wZW5mbGFncy53KXsKIAkJCS8qIEl0J3MgYSB3cml0ZSBhY2Nlc3Mgb24gYSByZWFkLW9ubHkgZGV2aWNlIC0gcHJvYmFibHkKIAkJCSAqIHNob3VsZG4ndCBoYXBwZW4uICBJZiB0aGUga2VybmVsIGlzIHRyeWluZyB0byBjaGFuZ2UKQEAgLTE2MDUsOCArMTYxMiw3IEBACiAJCQkJfQogCQkJfSB3aGlsZSgobiA8IGxlbikgJiYgKG4gIT0gMCkpOwogCQkJaWYgKG4gPCBsZW4pIG1lbXNldCgmYnVmW25dLCAwLCBsZW4gLSBuKTsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCW4gPSBvc193cml0ZV9maWxlKHJlcS0+ZmRzW2JpdF0sIGJ1ZiwgbGVuKTsKIAkJCWlmKG4gIT0gbGVuKXsKIAkJCQlwcmludGsoImRvX2lvIC0gd3JpdGUgZmFpbGVkIGVyciA9ICVkICIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy94dGVybV9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMveHRlcm1fa2Vybi5jCmluZGV4IDc5MTdiOWQuLmE0ZmRmMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy94dGVybV9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3h0ZXJtX2tlcm4uYwpAQCAtNyw3ICs3LDYgQEAKICNpbmNsdWRlICJsaW51eC9zbGFiLmgiCiAjaW5jbHVkZSAibGludXgvc2lnbmFsLmgiCiAjaW5jbHVkZSAibGludXgvaW50ZXJydXB0LmgiCi0jaW5jbHVkZSAiYXNtL3NlbWFwaG9yZS5oIgogI2luY2x1ZGUgImFzbS9pcnEuaCIKICNpbmNsdWRlICJpcnFfdXNlci5oIgogI2luY2x1ZGUgImlycV9rZXJuLmgiCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvY29tbW9uLW9mZnNldHMuaCBiL2FyY2gvdW0vaW5jbHVkZS9jb21tb24tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MDVkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvY29tbW9uLW9mZnNldHMuaApAQCAtMCwwICsxLDE0IEBACisvKiBmb3IgdXNlIGJ5IHN5cy0kU1VCQVJDSC9rZXJuZWwtb2Zmc2V0cy5jICovCisKK09GRlNFVChUQVNLX1JFR1MsIHRhc2tfc3RydWN0LCB0aHJlYWQucmVncyk7CitPRkZTRVQoVEFTS19QSUQsIHRhc2tfc3RydWN0LCBwaWQpOworREVGSU5FKFVNX0tFUk5fUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworREVGSU5FKFVNX05TRUNfUEVSX1NFQywgTlNFQ19QRVJfU0VDKTsKK0RFRklORV9TVFIoVU1fS0VSTl9FTUVSRywgS0VSTl9FTUVSRyk7CitERUZJTkVfU1RSKFVNX0tFUk5fQUxFUlQsIEtFUk5fQUxFUlQpOworREVGSU5FX1NUUihVTV9LRVJOX0NSSVQsIEtFUk5fQ1JJVCk7CitERUZJTkVfU1RSKFVNX0tFUk5fRVJSLCBLRVJOX0VSUik7CitERUZJTkVfU1RSKFVNX0tFUk5fV0FSTklORywgS0VSTl9XQVJOSU5HKTsKK0RFRklORV9TVFIoVU1fS0VSTl9OT1RJQ0UsIEtFUk5fTk9USUNFKTsKK0RFRklORV9TVFIoVU1fS0VSTl9JTkZPLCBLRVJOX0lORk8pOworREVGSU5FX1NUUihVTV9LRVJOX0RFQlVHLCBLRVJOX0RFQlVHKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9rZXJuX3V0aWwuaCBiL2FyY2gvdW0vaW5jbHVkZS9rZXJuX3V0aWwuaAppbmRleCAxNTM4OWM4Li5lNWZlYzU1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2tlcm5fdXRpbC5oCkBAIC04LDYgKzgsNyBAQAogCiAjaW5jbHVkZSAibGludXgvdGhyZWFkcy5oIgogI2luY2x1ZGUgInN5c2RlcC9wdHJhY2UuaCIKKyNpbmNsdWRlICJzeXNkZXAvZmF1bHRpbmZvLmgiCiAKIGV4dGVybiBpbnQgbmNwdXM7CiBleHRlcm4gY2hhciAqbGludXhfcHJvZzsKQEAgLTMxLDggKzMyLDggQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGFsbG9jX3N0YWNrKGludCBvcmRlciwgaW50IGF0b21pYyk7CiBleHRlcm4gaW50IGRvX3NpZ25hbCh2b2lkKTsKIGV4dGVybiBpbnQgaXNfc3RhY2tfZmF1bHQodW5zaWduZWQgbG9uZyBzcCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzZWd2KHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBpcCwgCi0JCQkgIGludCBpc193cml0ZSwgaW50IGlzX3VzZXIsIHZvaWQgKnNjKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNlZ3Yoc3RydWN0IGZhdWx0aW5mbyBmaSwgdW5zaWduZWQgbG9uZyBpcCwKKwkJCSAgaW50IGlzX3VzZXIsIHZvaWQgKnNjKTsKIGV4dGVybiBpbnQgaGFuZGxlX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGlwLAogCQkJICAgICBpbnQgaXNfd3JpdGUsIGludCBpc191c2VyLCBpbnQgKmNvZGVfb3V0KTsKIGV4dGVybiB2b2lkIHN5c2NhbGxfcmVhZHkodm9pZCk7CkBAIC04Miw3ICs4Myw3IEBACiBleHRlcm4gdm9pZCB1bnByb3RlY3Rfc3RhY2sodW5zaWduZWQgbG9uZyBzdGFjayk7CiBleHRlcm4gdm9pZCBkb191bWxfZXhpdGNhbGxzKHZvaWQpOwogZXh0ZXJuIGludCBhdHRhY2hfZGVidWdnZXIoaW50IGlkbGVfcGlkLCBpbnQgcGlkLCBpbnQgc3RvcCk7Ci1leHRlcm4gdm9pZCBiYWRfc2Vndih1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgaXAsIGludCBpc193cml0ZSk7CitleHRlcm4gdm9pZCBiYWRfc2VndihzdHJ1Y3QgZmF1bHRpbmZvIGZpLCB1bnNpZ25lZCBsb25nIGlwKTsKIGV4dGVybiBpbnQgY29uZmlnX2dkYihjaGFyICpzdHIpOwogZXh0ZXJuIGludCByZW1vdmVfZ2RiKHZvaWQpOwogZXh0ZXJuIGNoYXIgKnVtbF9zdHJkdXAoY2hhciAqc3RyaW5nKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9saW5lLmggYi9hcmNoL3VtL2luY2x1ZGUvbGluZS5oCmluZGV4IDZkODFlY2MuLjRjNWU5MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9saW5lLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2xpbmUuaApAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgImxpbnV4L3dvcmtxdWV1ZS5oIgogI2luY2x1ZGUgImxpbnV4L3R0eS5oIgogI2luY2x1ZGUgImxpbnV4L2ludGVycnVwdC5oIgotI2luY2x1ZGUgImFzbS9zZW1hcGhvcmUuaCIKKyNpbmNsdWRlICJsaW51eC9zcGlubG9jay5oIgogI2luY2x1ZGUgImNoYW5fdXNlci5oIgogI2luY2x1ZGUgIm1jb25zb2xlX2tlcm4uaCIKIApAQCAtMzcsMTAgKzM3LDE4IEBACiAJc3RydWN0IGxpc3RfaGVhZCBjaGFuX2xpc3Q7CiAJaW50IHZhbGlkOwogCWludCBjb3VudDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwkvKlRoaXMgbG9jayBpcyBhY3R1YWxseSwgbW9zdGx5LCBsb2NhbCB0byovCisJc3BpbmxvY2tfdCBsb2NrOworCisJLyogWWVzLCB0aGlzIGlzIGEgcmVhbCBjaXJjdWxhciBidWZmZXIuCisJICogWFhYOiBBbmQgdGhpcyBzaG91bGQgYmVjb21lIGEgc3RydWN0IGtmaWZvIQorCSAqCisJICogYnVmZmVyIHBvaW50cyB0byBhIGJ1ZmZlciBhbGxvY2F0ZWQgb24gZGVtYW5kLCBvZiBsZW5ndGgKKwkgKiBMSU5FX0JVRlNJWkUsIGhlYWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSByaW5nLCB0YWlsIHRvIHRoZSBlbmQuKi8KIAljaGFyICpidWZmZXI7CiAJY2hhciAqaGVhZDsKIAljaGFyICp0YWlsOworCiAJaW50IHNpZ2lvOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB0YXNrOwogCXN0cnVjdCBsaW5lX2RyaXZlciAqZHJpdmVyOwpAQCAtNTIsNyArNjAsNiBAQAogCSAgaW5pdF9wcmkgOglJTklUX1NUQVRJQywgXAogCSAgY2hhbl9saXN0IDogCXsgfSwgXAogCSAgdmFsaWQgOgkxLCBcCi0JICBzZW0gOiAJeyB9LCBcCiAJICBidWZmZXIgOglOVUxMLCBcCiAJICBoZWFkIDoJTlVMTCwgXAogCSAgdGFpbCA6CU5VTEwsIFwKQEAgLTY5LDE1ICs3NiwxOCBAQAogZXh0ZXJuIHZvaWQgbGluZV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwogZXh0ZXJuIGludCBsaW5lX29wZW4oc3RydWN0IGxpbmUgKmxpbmVzLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCAKIAkJICAgICBzdHJ1Y3QgY2hhbl9vcHRzICpvcHRzKTsKLWV4dGVybiBpbnQgbGluZV9zZXR1cChzdHJ1Y3QgbGluZSAqbGluZXMsIGludCBudW0sIGNoYXIgKmluaXQsIAorZXh0ZXJuIGludCBsaW5lX3NldHVwKHN0cnVjdCBsaW5lICpsaW5lcywgdW5zaWduZWQgaW50IHNpemVvZl9saW5lcywgY2hhciAqaW5pdCwKIAkJICAgICAgaW50IGFsbF9hbGxvd2VkKTsKIGV4dGVybiBpbnQgbGluZV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pOwogZXh0ZXJuIHZvaWQgbGluZV9wdXRfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKTsKIGV4dGVybiB2b2lkIGxpbmVfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOwogZXh0ZXJuIGludCBsaW5lX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiB2b2lkIGxpbmVfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworZXh0ZXJuIHZvaWQgbGluZV9mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiBpbnQgbGluZV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIGludCBsaW5lX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKIAkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCiBleHRlcm4gY2hhciAqYWRkX3h0ZXJtX3VtaWQoY2hhciAqYmFzZSk7CiBleHRlcm4gaW50IGxpbmVfc2V0dXBfaXJxKGludCBmZCwgaW50IGlucHV0LCBpbnQgb3V0cHV0LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiB2b2lkIGxpbmVfY2xvc2VfY2hhbihzdHJ1Y3QgbGluZSAqbGluZSk7CkBAIC04OSwyMCArOTksMTAgQEAKIAkJCQlpbnQgbmxpbmVzKTsKIGV4dGVybiB2b2lkIGxpbmVzX2luaXQoc3RydWN0IGxpbmUgKmxpbmVzLCBpbnQgbmxpbmVzKTsKIGV4dGVybiB2b2lkIGNsb3NlX2xpbmVzKHN0cnVjdCBsaW5lICpsaW5lcywgaW50IG5saW5lcyk7Ci1leHRlcm4gaW50IGxpbmVfY29uZmlnKHN0cnVjdCBsaW5lICpsaW5lcywgaW50IG51bSwgY2hhciAqc3RyKTsKLWV4dGVybiBpbnQgbGluZV9yZW1vdmUoc3RydWN0IGxpbmUgKmxpbmVzLCBpbnQgbnVtLCBjaGFyICpzdHIpOwotZXh0ZXJuIGludCBsaW5lX2dldF9jb25maWcoY2hhciAqZGV2LCBzdHJ1Y3QgbGluZSAqbGluZXMsIGludCBudW0sIGNoYXIgKnN0ciwgCisKK2V4dGVybiBpbnQgbGluZV9jb25maWcoc3RydWN0IGxpbmUgKmxpbmVzLCB1bnNpZ25lZCBpbnQgc2l6ZW9mX2xpbmVzLCBjaGFyICpzdHIpOworZXh0ZXJuIGludCBsaW5lX3JlbW92ZShzdHJ1Y3QgbGluZSAqbGluZXMsIHVuc2lnbmVkIGludCBzaXplb2ZfbGluZXMsIGNoYXIgKnN0cik7CitleHRlcm4gaW50IGxpbmVfZ2V0X2NvbmZpZyhjaGFyICpkZXYsIHN0cnVjdCBsaW5lICpsaW5lcywgdW5zaWduZWQgaW50IHNpemVvZl9saW5lcywgY2hhciAqc3RyLAogCQkJICAgaW50IHNpemUsIGNoYXIgKiplcnJvcl9vdXQpOwogCiAjZW5kaWYKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9vcy5oIGIvYXJjaC91bS9pbmNsdWRlL29zLmgKaW5kZXggMDczNDBjOC4uZDI0NmQ1YSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL29zLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL29zLmgKQEAgLTE2MCw2ICsxNjAsNyBAQAogZXh0ZXJuIHZvaWQgb3Nfa2lsbF9wdHJhY2VkX3Byb2Nlc3MoaW50IHBpZCwgaW50IHJlYXBfY2hpbGQpOwogZXh0ZXJuIHZvaWQgb3NfdXNyMV9wcm9jZXNzKGludCBwaWQpOwogZXh0ZXJuIGludCBvc19nZXRwaWQodm9pZCk7CitleHRlcm4gaW50IG9zX2dldHBncnAodm9pZCk7CiAKIGV4dGVybiBpbnQgb3NfbWFwX21lbW9yeSh2b2lkICp2aXJ0LCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmYsCiAJCQkgdW5zaWduZWQgbG9uZyBsZW4sIGludCByLCBpbnQgdywgaW50IHgpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NrYXNfcHRyYWNlLmggYi9hcmNoL3VtL2luY2x1ZGUvc2thc19wdHJhY2UuaAppbmRleCBjZmI1ZmI0Li5jZDIzMjdkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc2thc19wdHJhY2UuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2thc19wdHJhY2UuaApAQCAtNiwyMiArNiwxMSBAQAogI2lmbmRlZiBfX1NLQVNfUFRSQUNFX0gKICNkZWZpbmUgX19TS0FTX1BUUkFDRV9ICiAKLXN0cnVjdCBwdHJhY2VfZmF1bHRpbmZvIHsKLQlpbnQgaXNfd3JpdGU7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotfTsKLQotc3RydWN0IHB0cmFjZV9sZHQgewotCWludCBmdW5jOwotICAJdm9pZCAqcHRyOwotCXVuc2lnbmVkIGxvbmcgYnl0ZWNvdW50OwotfTsKLQogI2RlZmluZSBQVFJBQ0VfRkFVTFRJTkZPIDUyCi0jZGVmaW5lIFBUUkFDRV9TSUdQRU5ESU5HIDUzCi0jZGVmaW5lIFBUUkFDRV9MRFQgNTQKICNkZWZpbmUgUFRSQUNFX1NXSVRDSF9NTSA1NQogCisjaW5jbHVkZSAic3lzZGVwL3NrYXNfcHRyYWNlLmgiCisKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2NoZWNrc3VtLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvY2hlY2tzdW0uaAppbmRleCAzYTJhNDU4Li43NjRiYTRkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvY2hlY2tzdW0uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvY2hlY2tzdW0uaApAQCAtMjQsMTkgKzI0LDYgQEAKIAkJCSAgdW5zaWduZWQgaW50IHN1bSk7CiAKIC8qCi0gKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBzcmMgd2hpbGUgaXQKLSAqIGNoZWNrc3VtcywgYW5kIGhhbmRsZXMgdXNlci1zcGFjZSBwb2ludGVyIGV4Y2VwdGlvbnMgY29ycmVjdGx5LCB3aGVuIG5lZWRlZC4KLSAqCi0gKiBoZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KLSAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5Ci0gKi8KLQotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X3RvKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LAotCQkJCSAgaW50IGxlbiwgaW50IHN1bSwgaW50ICplcnJfcHRyKTsKLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LAotCQkJCSAgICBpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKmVycl9wdHIpOwotCi0vKgogICoJTm90ZTogd2hlbiB5b3UgZ2V0IGEgTlVMTCBwb2ludGVyIGV4Y2VwdGlvbiBoZXJlIHRoaXMgbWVhbnMgc29tZW9uZQogICoJcGFzc2VkIGluIGFuIGluY29ycmVjdCBrZXJuZWwgYWRkcmVzcyB0byBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zLgogICoKQEAgLTUyLDExICszOSwyNCBAQAogCXJldHVybihjc3VtX3BhcnRpYWwoZHN0LCBsZW4sIHN1bSkpOwogfQogCisvKgorICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0CisgKiBjaGVja3N1bXMsIGFuZCBoYW5kbGVzIHVzZXItc3BhY2UgcG9pbnRlciBleGNlcHRpb25zIGNvcnJlY3RseSwgd2hlbiBuZWVkZWQuCisgKgorICogaGVyZSBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvciBldmVuCisgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQorICovCisKIHN0YXRpYyBfX2lubGluZV9fCiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LAogCQkJCQkgaW50IGxlbiwgaW50IHN1bSwgaW50ICplcnJfcHRyKQogewotCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9mcm9tKHNyYywgZHN0LCBsZW4sIHN1bSwgZXJyX3B0cik7CisJaWYoY29weV9mcm9tX3VzZXIoZHN0LCBzcmMsIGxlbikpeworCQkqZXJyX3B0ciA9IC1FRkFVTFQ7CisJCXJldHVybigtMSk7CisJfQorCisJcmV0dXJuIGNzdW1fcGFydGlhbChkc3QsIGxlbiwgc3VtKTsKIH0KIAogLyoKQEAgLTY3LDcgKzY3LDYgQEAKICAqLwogCiAjZGVmaW5lIGNzdW1fcGFydGlhbF9jb3B5X2Zyb211c2VyIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcgotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLCBpbnQgc3VtKTsKIAogLyoKICAqCVRoaXMgaXMgYSB2ZXJzaW9uIG9mIGlwX2NvbXB1dGVfY3N1bSgpIG9wdGltaXplZCBmb3IgSVAgaGVhZGVycywKQEAgLTE5Niw4ICsxOTUsMTQgQEAKIAkJCQkJCSAgICAgdW5zaWduZWQgY2hhciAqZHN0LAogCQkJCQkJICAgICBpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKmVycl9wdHIpCiB7Ci0JaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGRzdCwgbGVuKSkKLQkJcmV0dXJuKGNzdW1fcGFydGlhbF9jb3B5X3RvKHNyYywgZHN0LCBsZW4sIHN1bSwgZXJyX3B0cikpOworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBkc3QsIGxlbikpeworCQlpZihjb3B5X3RvX3VzZXIoZHN0LCBzcmMsIGxlbikpeworCQkJKmVycl9wdHIgPSAtRUZBVUxUOworCQkJcmV0dXJuKC0xKTsKKwkJfQorCisJCXJldHVybiBjc3VtX3BhcnRpYWwoc3JjLCBsZW4sIHN1bSk7CisJfQogCiAJaWYgKGxlbikKIAkJKmVycl9wdHIgPSAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2ZhdWx0aW5mby5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2ZhdWx0aW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNDM3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvZmF1bHRpbmZvLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBGdWppdHN1IFNpZW1lbnMgQ29tcHV0ZXJzIEdtYkgKKyAqIEF1dGhvcjogQm9kbyBTdHJvZXNzZXIgPGJzdHJvZXNzZXJAZnVqaXRzdS1zaWVtZW5zLmNvbT4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fRkFVTFRJTkZPX0kzODZfSAorI2RlZmluZSBfX0ZBVUxUSU5GT19JMzg2X0gKKworLyogdGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGZ1bGwgYXJjaC1zcGVjaWZpYyBmYXVsdGluZm8KKyAqIGZyb20gdGhlIHRyYXBzLgorICogT24gaTM4NiwgcHRyYWNlX2ZhdWx0aW5mbyB1bmZvcnR1bmF0ZWx5IGRvZXNuJ3QgcHJvdmlkZQorICogYWxsIHRoZSBpbmZvLCBzaW5jZSB0cmFwX25vIGlzIG1pc3NpbmcuCisgKiBBbGwgY29tbW9uIGVsZW1lbnRzIGFyZSBkZWZpbmVkIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluCisgKiBib3RoIHN0cnVjdHVyZXMsIHRodXMgbWFraW5nIGl0IGVhc3kgdG8gY29weSB0aGUKKyAqIGNvbnRlbnRzIHdpdGhvdXQga25vd2xlZGdlIGFib3V0IHRoZSBzdHJ1Y3R1cmUgZWxlbWVudHMuCisgKi8KK3N0cnVjdCBmYXVsdGluZm8geworICAgICAgICBpbnQgZXJyb3JfY29kZTsgLyogaW4gcHRyYWNlX2ZhdWx0aW5mbyBtaXNsZWFkaW5nbHkgY2FsbGVkIGlzX3dyaXRlICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgY3IyOyAvKiBpbiBwdHJhY2VfZmF1bHRpbmZvIGNhbGxlZCBhZGRyICovCisgICAgICAgIGludCB0cmFwX25vOyAvKiBtaXNzaW5nIGluIHB0cmFjZV9mYXVsdGluZm8gKi8KK307CisKKyNkZWZpbmUgRkFVTFRfV1JJVEUoZmkpICgoZmkpLmVycm9yX2NvZGUgJiAyKQorI2RlZmluZSBGQVVMVF9BRERSRVNTKGZpKSAoKGZpKS5jcjIpCisKKyNkZWZpbmUgUFRSQUNFX0ZVTExfRkFVTFRJTkZPIDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvcHRyYWNlLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvcHRyYWNlLmgKaW5kZXggNjYxZDQ5NS4uODRlYzdmZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3B0cmFjZS5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9wdHJhY2UuaApAQCAtMzEsNiArMzEsNyBAQAogI2lmZGVmIFVNTF9DT05GSUdfTU9ERV9TS0FTCiAKICNpbmNsdWRlICJza2FzX3B0cmVncy5oIgorI2luY2x1ZGUgInN5c2RlcC9mYXVsdGluZm8uaCIKIAogI2RlZmluZSBSRUdTX0lQKHIpICgocilbSE9TVF9JUF0pCiAjZGVmaW5lIFJFR1NfU1AocikgKChyKVtIT1NUX1NQXSkKQEAgLTUzLDEyICs1NCw2IEBACiAKICNkZWZpbmUgUkVHU19SRVNUQVJUX1NZU0NBTEwocikgSVBfUkVTVEFSVF9TWVNDQUxMKFJFR1NfSVAocikpCiAKLSNkZWZpbmUgUkVHU19TRUdWX0lTX0ZJWEFCTEUocikgU0VHVl9JU19GSVhBQkxFKChyKS0+dHJhcF90eXBlKQotCi0jZGVmaW5lIFJFR1NfRkFVTFRfQUREUihyKSAoKHIpLT5mYXVsdF9hZGRyKQotCi0jZGVmaW5lIFJFR1NfRkFVTFRfV1JJVEUocikgRkFVTFRfV1JJVEUoKHIpLT5mYXVsdF90eXBlKQotCiAjZW5kaWYKICNpZm5kZWYgUFRSQUNFX1NZU0VNVV9TSU5HTEVTVEVQCiAjZGVmaW5lIFBUUkFDRV9TWVNFTVVfU0lOR0xFU1RFUCAzMgpAQCAtNzEsNiArNjYsNyBAQAogCXN0cnVjdCB0dF9yZWdzIHsKIAkJbG9uZyBzeXNjYWxsOwogCQl2b2lkICpzYzsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZmF1bHRpbmZvIGZhdWx0aW5mbzsKIAl9IHR0OwogI2VuZGlmCiAjaWZkZWYgVU1MX0NPTkZJR19NT0RFX1NLQVMKQEAgLTc4LDkgKzc0LDcgQEAKIAkJdW5zaWduZWQgbG9uZyByZWdzW0hPU1RfRlJBTUVfU0laRV07CiAJCXVuc2lnbmVkIGxvbmcgZnBbSE9TVF9GUF9TSVpFXTsKIAkJdW5zaWduZWQgbG9uZyB4ZnBbSE9TVF9YRlBfU0laRV07Ci0JCXVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkcjsKLQkJdW5zaWduZWQgbG9uZyBmYXVsdF90eXBlOwotCQl1bnNpZ25lZCBsb25nIHRyYXBfdHlwZTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZmF1bHRpbmZvIGZhdWx0aW5mbzsKIAkJbG9uZyBzeXNjYWxsOwogCQlpbnQgaXNfdXNlcjsKIAl9IHNrYXM7CkBAIC0yMTcsMTUgKzIxMSw4IEBACiAjZGVmaW5lIFVQVF9TWVNDQUxMX05SKHIpIFVQVF9PUklHX0VBWChyKQogI2RlZmluZSBVUFRfU1lTQ0FMTF9SRVQocikgVVBUX0VBWChyKQogCi0jZGVmaW5lIFVQVF9TRUdWX0lTX0ZJWEFCTEUocikgXAotCUNIT09TRV9NT0RFKFNDX1NFR1ZfSVNfRklYQUJMRShVUFRfU0MocikpLCBcCi0gICAgICAgICAgICAgICAgICAgIFJFR1NfU0VHVl9JU19GSVhBQkxFKCZyLT5za2FzKSkKLQotI2RlZmluZSBVUFRfRkFVTFRfQUREUihyKSBcCi0JX19DSE9PU0VfTU9ERShTQ19GQVVMVF9BRERSKFVQVF9TQyhyKSksIFJFR1NfRkFVTFRfQUREUigmci0+c2thcykpCi0KLSNkZWZpbmUgVVBUX0ZBVUxUX1dSSVRFKHIpIFwKLQlDSE9PU0VfTU9ERShTQ19GQVVMVF9XUklURShVUFRfU0MocikpLCBSRUdTX0ZBVUxUX1dSSVRFKCZyLT5za2FzKSkKKyNkZWZpbmUgVVBUX0ZBVUxUSU5GTyhyKSBcCisgICAgICAgIENIT09TRV9NT0RFKCgmKHIpLT50dC5mYXVsdGluZm8pLCAoJihyKS0+c2thcy5mYXVsdGluZm8pKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3NpZ2NvbnRleHQuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9zaWdjb250ZXh0LmgKaW5kZXggZGZlZTU4OS4uMWZlNzI5MiAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3NpZ2NvbnRleHQuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvc2lnY29udGV4dC5oCkBAIC0xMywxNSArMTMsMTIgQEAKICNkZWZpbmUgU0NfUkVTVEFSVF9TWVNDQUxMKHNjKSBJUF9SRVNUQVJUX1NZU0NBTEwoU0NfSVAoc2MpKQogI2RlZmluZSBTQ19TRVRfU1lTQ0FMTF9SRVRVUk4oc2MsIHJlc3VsdCkgU0NfRUFYKHNjKSA9IChyZXN1bHQpCiAKLSNkZWZpbmUgU0NfRkFVTFRfQUREUihzYykgU0NfQ1IyKHNjKQotI2RlZmluZSBTQ19GQVVMVF9UWVBFKHNjKSBTQ19FUlIoc2MpCi0KLSNkZWZpbmUgRkFVTFRfV1JJVEUoZXJyKSAoZXJyICYgMikKLSNkZWZpbmUgVE9fU0NfRVJSKGlzX3dyaXRlKSAoKGlzX3dyaXRlKSA/IDIgOiAwKQotCi0jZGVmaW5lIFNDX0ZBVUxUX1dSSVRFKHNjKSAoRkFVTFRfV1JJVEUoU0NfRVJSKHNjKSkpCi0KLSNkZWZpbmUgU0NfVFJBUF9UWVBFKHNjKSBTQ19UUkFQTk8oc2MpCisjZGVmaW5lIEdFVF9GQVVMVElORk9fRlJPTV9TQyhmaSxzYykgXAorCXsgXAorCQkoZmkpLmNyMiA9IFNDX0NSMihzYyk7IFwKKwkJKGZpKS5lcnJvcl9jb2RlID0gU0NfRVJSKHNjKTsgXAorCQkoZmkpLnRyYXBfbm8gPSBTQ19UUkFQTk8oc2MpOyBcCisJfQogCiAvKiBwdHJhY2UgZXhwZWN0cyB0aGF0LCBhdCB0aGUgc3RhcnQgb2YgYSBzeXN0ZW0gY2FsbCwgJWVheCBjb250YWlucwogICogLUVOT1NZUywgc28gdGhpcyBtYWtlcyBpdCBzby4KQEAgLTI5LDkgKzI2LDcgQEAKICNkZWZpbmUgU0NfU1RBUlRfU1lTQ0FMTChzYykgZG8gU0NfRUFYKHNjKSA9IC1FTk9TWVM7IHdoaWxlKDApCiAKIC8qIFRoaXMgaXMgUGFnZSBGYXVsdCAqLwotI2RlZmluZSBTRUdWX0lTX0ZJWEFCTEUodHJhcCkgKHRyYXAgPT0gMTQpCi0KLSNkZWZpbmUgU0NfU0VHVl9JU19GSVhBQkxFKHNjKSAoU0VHVl9JU19GSVhBQkxFKFNDX1RSQVBOTyhzYykpKQorI2RlZmluZSBTRUdWX0lTX0ZJWEFCTEUoZmkpICgoZmkpLT50cmFwX25vID09IDE0KQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyAqc2Nfc2lnbWFzayh2b2lkICpzY19wdHIpOwogZXh0ZXJuIGludCBzY19nZXRfZnByZWdzKHVuc2lnbmVkIGxvbmcgYnVmLCB2b2lkICpzY19wdHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3NpZ25hbC5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3NpZ25hbC5oCmluZGV4IGIxZTFmN2EuLjA3NTE4YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9zaWduYWwuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvc2lnbmFsLmgKQEAgLTgsNiArOCw4IEBACiAKICNpbmNsdWRlIDxzaWduYWwuaD4KIAorI2RlZmluZSBBUkNIX1NJR0hETFJfUEFSQU0gaW50IHNpZworCiAjZGVmaW5lIEFSQ0hfR0VUX1NJR0NPTlRFWFQoc2MsIHNpZykgXAogCWRvIHNjID0gKHN0cnVjdCBzaWdjb250ZXh0ICopICgmc2lnICsgMSk7IHdoaWxlKDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9za2FzX3B0cmFjZS5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3NrYXNfcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3YjhhNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9za2FzX3B0cmFjZS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisKKyNpZm5kZWYgX19TWVNERVBfSTM4Nl9TS0FTX1BUUkFDRV9ICisjZGVmaW5lIF9fU1lTREVQX0kzODZfU0tBU19QVFJBQ0VfSAorCitzdHJ1Y3QgcHRyYWNlX2ZhdWx0aW5mbyB7CisgICAgICAgIGludCBpc193cml0ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyOworfTsKKworc3RydWN0IHB0cmFjZV9sZHQgeworICAgICAgICBpbnQgZnVuYzsKKyAgICAgICAgdm9pZCAqcHRyOworICAgICAgICB1bnNpZ25lZCBsb25nIGJ5dGVjb3VudDsKK307CisKKyNkZWZpbmUgUFRSQUNFX0xEVCA1NAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9zeXNjYWxscy5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3N5c2NhbGxzLmgKaW5kZXggNWRiODFlYy4uYmUwYTNlMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3N5c2NhbGxzLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3N5c2NhbGxzLmgKQEAgLTIyLDEwMiArMjIsMyBAQAogZXh0ZXJuIGxvbmcgc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJICAgICAgdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7Ci0KLS8qIE9uIGkzODYgdGhleSBjaG9vc2UgYSBtZWFuaW5nbGVzcyBuYW1pbmcuKi8KLSNkZWZpbmUgX19OUl9rZXhlY19sb2FkIF9fTlJfc3lzX2tleGVjX2xvYWQKLQotI2RlZmluZSBBUkNIX1NZU0NBTExTIFwKLQlbIF9fTlJfd2FpdHBpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c193YWl0cGlkLCBcCi0JWyBfX05SX2JyZWFrIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsIFwKLQlbIF9fTlJfb2xkc3RhdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zdGF0LCBcCi0JWyBfX05SX3Vtb3VudCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19vbGR1bW91bnQsIFwKLQlbIF9fTlJfc3RpbWUgXSA9IHVtX3N0aW1lLCBcCi0JWyBfX05SX29sZGZzdGF0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2ZzdGF0LCBcCi0JWyBfX05SX3N0dHkgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9ndHR5IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsIFwKLQlbIF9fTlJfbmljZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaWNlLCBcCi0JWyBfX05SX2Z0aW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsIFwKLQlbIF9fTlJfcHJvZiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX3NpZ25hbCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zaWduYWwsIFwKLQlbIF9fTlJfbG9jayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX21weCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX3VsaW1pdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX29sZG9sZHVuYW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX29sZHVuYW1lLCBcCi0JWyBfX05SX3NpZ2FjdGlvbiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zaWdhY3Rpb24sIFwKLQlbIF9fTlJfc2dldG1hc2sgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2dldG1hc2ssIFwKLQlbIF9fTlJfc3NldG1hc2sgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc3NldG1hc2ssIFwKLQlbIF9fTlJfc2lnc3VzcGVuZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zaWdzdXNwZW5kLCBcCi0JWyBfX05SX3NpZ3BlbmRpbmcgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2lncGVuZGluZywgXAotCVsgX19OUl9vbGRsc3RhdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19sc3RhdCwgXAotCVsgX19OUl9yZWFkZGlyIF0gPSBvbGRfcmVhZGRpciwgXAotCVsgX19OUl9wcm9maWwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9zb2NrZXRjYWxsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NvY2tldGNhbGwsIFwKLQlbIF9fTlJfb2xkdW5hbWUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdW5hbWUsIFwKLQlbIF9fTlJfaW9wbCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX2lkbGUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9pcGMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfaXBjLCBcCi0JWyBfX05SX3NpZ3JldHVybiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zaWdyZXR1cm4sIFwKLQlbIF9fTlJfc2lncHJvY21hc2sgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2lncHJvY21hc2ssIFwKLQlbIF9fTlJfYmRmbHVzaCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19iZGZsdXNoLCBcCi0JWyBfX05SX19sbHNlZWsgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbGxzZWVrLCBcCi0JWyBfX05SX19uZXdzZWxlY3QgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2VsZWN0LCBcCi0JWyBfX05SX3ZtODYgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9tbWFwIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgb2xkX21tYXBfaTM4NiwgXAotCVsgX19OUl91Z2V0cmxpbWl0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHJsaW1pdCwgXAotCVsgX19OUl9tbWFwMiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tbWFwMiwgXAotCVsgX19OUl90cnVuY2F0ZTY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3RydW5jYXRlNjQsIFwKLQlbIF9fTlJfZnRydW5jYXRlNjQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZnRydW5jYXRlNjQsIFwKLQlbIF9fTlJfc3RhdDY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3N0YXQ2NCwgXAotCVsgX19OUl9sc3RhdDY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2xzdGF0NjQsIFwKLQlbIF9fTlJfZnN0YXQ2NCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mc3RhdDY0LCBcCi0JWyBfX05SX2ZjbnRsNjQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZmNudGw2NCwgXAotCVsgX19OUl9zZW5kZmlsZTY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NlbmRmaWxlNjQsIFwKLQlbIF9fTlJfc3RhdGZzNjQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc3RhdGZzNjQsIFwKLQlbIF9fTlJfZnN0YXRmczY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2ZzdGF0ZnM2NCwgXAotCVsgX19OUl9mYWR2aXNlNjRfNjQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZmFkdmlzZTY0XzY0LCBcCi0JWyBfX05SX3NlbGVjdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIG9sZF9zZWxlY3QsIFwKLQlbIF9fTlJfdm04Nm9sZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX21vZGlmeV9sZHQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbW9kaWZ5X2xkdCwgXAotCVsgX19OUl9sY2hvd24zMiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19sY2hvd24sIFwKLQlbIF9fTlJfZ2V0dWlkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0dWlkLCBcCi0JWyBfX05SX2dldGdpZDMyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldGdpZCwgXAotCVsgX19OUl9nZXRldWlkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0ZXVpZCwgXAotCVsgX19OUl9nZXRlZ2lkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0ZWdpZCwgXAotCVsgX19OUl9zZXRyZXVpZDMyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldHJldWlkLCBcCi0JWyBfX05SX3NldHJlZ2lkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0cmVnaWQsIFwKLQlbIF9fTlJfZ2V0Z3JvdXBzMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0Z3JvdXBzLCBcCi0JWyBfX05SX3NldGdyb3VwczMyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldGdyb3VwcywgXAotCVsgX19OUl9mY2hvd24zMiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mY2hvd24sIFwKLQlbIF9fTlJfc2V0cmVzdWlkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0cmVzdWlkLCBcCi0JWyBfX05SX2dldHJlc3VpZDMyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHJlc3VpZCwgXAotCVsgX19OUl9zZXRyZXNnaWQzMiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXRyZXNnaWQsIFwKLQlbIF9fTlJfZ2V0cmVzZ2lkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0cmVzZ2lkLCBcCi0JWyBfX05SX2Nob3duMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfY2hvd24sIFwKLQlbIF9fTlJfc2V0dWlkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0dWlkLCBcCi0JWyBfX05SX3NldGdpZDMyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldGdpZCwgXAotCVsgX19OUl9zZXRmc3VpZDMyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldGZzdWlkLCBcCi0JWyBfX05SX3NldGZzZ2lkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0ZnNnaWQsIFwKLQlbIF9fTlJfcGl2b3Rfcm9vdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19waXZvdF9yb290LCBcCi0JWyBfX05SX21pbmNvcmUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbWluY29yZSwgXAotCVsgX19OUl9tYWR2aXNlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21hZHZpc2UsIFwKLQlbIDIyMiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyAyMjMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9zZXRfdGhyZWFkX2FyZWEgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9nZXRfdGhyZWFkX2FyZWEgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgMjUxIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsIFwKLQlbIDI4NSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLAotCi0vKiAyMjIgZG9lc24ndCB5ZXQgaGF2ZSBhIG5hbWUgaW4gaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaCAqLwotCi0jZGVmaW5lIExBU1RfQVJDSF9TWVNDQUxMIDI4NQotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pYTY0L3NrYXNfcHRyYWNlLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWlhNjQvc2thc19wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWEzOGU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pYTY0L3NrYXNfcHRyYWNlLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX1NZU0RFUF9JQTY0X1NLQVNfUFRSQUNFX0gKKyNkZWZpbmUgX19TWVNERVBfSUE2NF9TS0FTX1BUUkFDRV9ICisKK3N0cnVjdCBwdHJhY2VfZmF1bHRpbmZvIHsKKyAgICAgICAgaW50IGlzX3dyaXRlOworICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHI7Cit9OworCitzdHJ1Y3QgcHRyYWNlX2xkdCB7CisgICAgICAgIGludCBmdW5jOworICAgICAgICB2b2lkICpwdHI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYnl0ZWNvdW50OworfTsKKworI2RlZmluZSBQVFJBQ0VfTERUIDU0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1wcGMvc2thc19wdHJhY2UuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtcHBjL3NrYXNfcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlmYmJhYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtcHBjL3NrYXNfcHRyYWNlLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX1NZU0RFUF9QUENfU0tBU19QVFJBQ0VfSAorI2RlZmluZSBfX1NZU0RFUF9QUENfU0tBU19QVFJBQ0VfSAorCitzdHJ1Y3QgcHRyYWNlX2ZhdWx0aW5mbyB7CisgICAgICAgIGludCBpc193cml0ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyOworfTsKKworc3RydWN0IHB0cmFjZV9sZHQgeworICAgICAgICBpbnQgZnVuYzsKKyAgICAgICAgdm9pZCAqcHRyOworICAgICAgICB1bnNpZ25lZCBsb25nIGJ5dGVjb3VudDsKK307CisKKyNkZWZpbmUgUFRSQUNFX0xEVCA1NAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2ZhdWx0aW5mby5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvZmF1bHRpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5MTdiMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2ZhdWx0aW5mby5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgRnVqaXRzdSBTaWVtZW5zIENvbXB1dGVycyBHbWJICisgKiBBdXRob3I6IEJvZG8gU3Ryb2Vzc2VyIDxic3Ryb2Vzc2VyQGZ1aml0c3Utc2llbWVucy5jb20+CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2lmbmRlZiBfX0ZBVUxUSU5GT19YODZfNjRfSAorI2RlZmluZSBfX0ZBVUxUSU5GT19YODZfNjRfSAorCisvKiB0aGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgZnVsbCBhcmNoLXNwZWNpZmljIGZhdWx0aW5mbworICogZnJvbSB0aGUgdHJhcHMuCisgKiBPbiBpMzg2LCBwdHJhY2VfZmF1bHRpbmZvIHVuZm9ydHVuYXRlbHkgZG9lc24ndCBwcm92aWRlCisgKiBhbGwgdGhlIGluZm8sIHNpbmNlIHRyYXBfbm8gaXMgbWlzc2luZy4KKyAqIEFsbCBjb21tb24gZWxlbWVudHMgYXJlIGRlZmluZWQgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4KKyAqIGJvdGggc3RydWN0dXJlcywgdGh1cyBtYWtpbmcgaXQgZWFzeSB0byBjb3B5IHRoZQorICogY29udGVudHMgd2l0aG91dCBrbm93bGVkZ2UgYWJvdXQgdGhlIHN0cnVjdHVyZSBlbGVtZW50cy4KKyAqLworc3RydWN0IGZhdWx0aW5mbyB7CisgICAgICAgIGludCBlcnJvcl9jb2RlOyAvKiBpbiBwdHJhY2VfZmF1bHRpbmZvIG1pc2xlYWRpbmdseSBjYWxsZWQgaXNfd3JpdGUgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBjcjI7IC8qIGluIHB0cmFjZV9mYXVsdGluZm8gY2FsbGVkIGFkZHIgKi8KKyAgICAgICAgaW50IHRyYXBfbm87IC8qIG1pc3NpbmcgaW4gcHRyYWNlX2ZhdWx0aW5mbyAqLworfTsKKworI2RlZmluZSBGQVVMVF9XUklURShmaSkgKChmaSkuZXJyb3JfY29kZSAmIDIpCisjZGVmaW5lIEZBVUxUX0FERFJFU1MoZmkpICgoZmkpLmNyMikKKworI2RlZmluZSBQVFJBQ0VfRlVMTF9GQVVMVElORk8gMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3B0cmFjZS5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvcHRyYWNlLmgKaW5kZXggOTE1YzgyZC4uMzQ4ZThmYyAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvcHRyYWNlLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvcHRyYWNlLmgKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlICJ1bWwtY29uZmlnLmgiCiAjaW5jbHVkZSAidXNlcl9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJzeXNkZXAvZmF1bHRpbmZvLmgiCiAKICNkZWZpbmUgTUFYX1JFR19PRkZTRVQgKFVNX0ZSQU1FX1NJWkUpCiAjZGVmaW5lIE1BWF9SRUdfTlIgKChNQVhfUkVHX09GRlNFVCkgLyBzaXplb2YodW5zaWduZWQgbG9uZykpCkBAIC04Myw2ICs4NCw3IEBACiAJCWxvbmcgc3lzY2FsbDsKIAkJdW5zaWduZWQgbG9uZyBvcmlnX3JheDsKIAkJdm9pZCAqc2M7CisgICAgICAgICAgICAgICAgc3RydWN0IGZhdWx0aW5mbyBmYXVsdGluZm87CiAJfSB0dDsKICNlbmRpZgogI2lmZGVmIFVNTF9DT05GSUdfTU9ERV9TS0FTCkBAIC05MCw5ICs5Miw3IEBACiAJCS8qIFhYWCAqLwogCQl1bnNpZ25lZCBsb25nIHJlZ3NbMjddOwogCQl1bnNpZ25lZCBsb25nIGZwWzY1XTsKLQkJdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyOwotCQl1bnNpZ25lZCBsb25nIGZhdWx0X3R5cGU7Ci0JCXVuc2lnbmVkIGxvbmcgdHJhcF90eXBlOworICAgICAgICAgICAgICAgIHN0cnVjdCBmYXVsdGluZm8gZmF1bHRpbmZvOwogCQlsb25nIHN5c2NhbGw7CiAJCWludCBpc191c2VyOwogCX0gc2thczsKQEAgLTI0MSwxNCArMjQxLDggQEAKIAlDSE9PU0VfTU9ERShTQ19TRUdWX0lTX0ZJWEFCTEUoVVBUX1NDKHIpKSwgXAogICAgICAgICAgICAgICAgICAgICBSRUdTX1NFR1ZfSVNfRklYQUJMRSgmci0+c2thcykpCiAKLSNkZWZpbmUgVVBUX0ZBVUxUX0FERFIocikgXAotCV9fQ0hPT1NFX01PREUoU0NfRkFVTFRfQUREUihVUFRfU0MocikpLCBSRUdTX0ZBVUxUX0FERFIoJnItPnNrYXMpKQotCi0jZGVmaW5lIFVQVF9GQVVMVF9XUklURShyKSBcCi0JQ0hPT1NFX01PREUoU0NfRkFVTFRfV1JJVEUoVVBUX1NDKHIpKSwgUkVHU19GQVVMVF9XUklURSgmci0+c2thcykpCi0KLSNkZWZpbmUgVVBUX1RSQVAocikgX19DSE9PU0VfTU9ERShTQ19UUkFQX1RZUEUoVVBUX1NDKHIpKSwgUkVHU19UUkFQKCZyLT5za2FzKSkKLSNkZWZpbmUgVVBUX0VSUihyKSBfX0NIT09TRV9NT0RFKFNDX0ZBVUxUX1RZUEUoVVBUX1NDKHIpKSwgUkVHU19FUlIoJnItPnNrYXMpKQorI2RlZmluZSBVUFRfRkFVTFRJTkZPKHIpIFwKKyAgICAgICAgQ0hPT1NFX01PREUoKCYociktPnR0LmZhdWx0aW5mbyksICgmKHIpLT5za2FzLmZhdWx0aW5mbykpCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zaWdjb250ZXh0LmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zaWdjb250ZXh0LmgKaW5kZXggMWUzOGE1NC4uMmE3ODI2MCAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc2lnY29udGV4dC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3NpZ2NvbnRleHQuaApAQCAtMTcsMTEgKzE3LDEyIEBACiAjZGVmaW5lIFNDX0ZBVUxUX0FERFIoc2MpIFNDX0NSMihzYykKICNkZWZpbmUgU0NfRkFVTFRfVFlQRShzYykgU0NfRVJSKHNjKQogCi0jZGVmaW5lIEZBVUxUX1dSSVRFKGVycikgKChlcnIpICYgMikKLQotI2RlZmluZSBTQ19GQVVMVF9XUklURShzYykgRkFVTFRfV1JJVEUoU0NfRkFVTFRfVFlQRShzYykpCi0KLSNkZWZpbmUgU0NfVFJBUF9UWVBFKHNjKSBTQ19UUkFQTk8oc2MpCisjZGVmaW5lIEdFVF9GQVVMVElORk9fRlJPTV9TQyhmaSxzYykgXAorCXsgXAorCQkoZmkpLmNyMiA9IFNDX0NSMihzYyk7IFwKKwkJKGZpKS5lcnJvcl9jb2RlID0gU0NfRVJSKHNjKTsgXAorCQkoZmkpLnRyYXBfbm8gPSBTQ19UUkFQTk8oc2MpOyBcCisJfQogCiAvKiBwdHJhY2UgZXhwZWN0cyB0aGF0LCBhdCB0aGUgc3RhcnQgb2YgYSBzeXN0ZW0gY2FsbCwgJWVheCBjb250YWlucwogICogLUVOT1NZUywgc28gdGhpcyBtYWtlcyBpdCBzby4KQEAgLTI5LDggKzMwLDggQEAKIAogI2RlZmluZSBTQ19TVEFSVF9TWVNDQUxMKHNjKSBkbyBTQ19SQVgoc2MpID0gLUVOT1NZUzsgd2hpbGUoMCkKIAotI2RlZmluZSBTRUdWX0lTX0ZJWEFCTEUodHJhcCkgKCh0cmFwKSA9PSAxNCkKLSNkZWZpbmUgU0NfU0VHVl9JU19GSVhBQkxFKHNjKSBTRUdWX0lTX0ZJWEFCTEUoU0NfVFJBUF9UWVBFKHNjKSkKKy8qIFRoaXMgaXMgUGFnZSBGYXVsdCAqLworI2RlZmluZSBTRUdWX0lTX0ZJWEFCTEUoZmkpICgoZmkpLT50cmFwX25vID09IDE0KQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyAqc2Nfc2lnbWFzayh2b2lkICpzY19wdHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zaWduYWwuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3NpZ25hbC5oCmluZGV4IGU1ZTUyNzUuLjYxNDI4OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3NpZ25hbC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3NpZ25hbC5oCkBAIC02LDYgKzYsOCBAQAogI2lmbmRlZiBfX1g4Nl82NF9TSUdOQUxfSF8KICNkZWZpbmUgX19YODZfNjRfU0lHTkFMX0hfCiAKKyNkZWZpbmUgQVJDSF9TSUdIRExSX1BBUkFNIGludCBzaWcKKwogI2RlZmluZSBBUkNIX0dFVF9TSUdDT05URVhUKHNjLCBzaWdfYWRkcikgXAogCWRvIHsgXAogCQlzdHJ1Y3QgdWNvbnRleHQgKl9fdWM7IFwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3NrYXNfcHRyYWNlLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9za2FzX3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZGI0YmU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc2thc19wdHJhY2UuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZuZGVmIF9fU1lTREVQX1g4Nl82NF9TS0FTX1BUUkFDRV9ICisjZGVmaW5lIF9fU1lTREVQX1g4Nl82NF9TS0FTX1BUUkFDRV9ICisKK3N0cnVjdCBwdHJhY2VfZmF1bHRpbmZvIHsKKyAgICAgICAgaW50IGlzX3dyaXRlOworICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHI7Cit9OworCitzdHJ1Y3QgcHRyYWNlX2xkdCB7CisgICAgICAgIGludCBmdW5jOworICAgICAgICB2b2lkICpwdHI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYnl0ZWNvdW50OworfTsKKworI2RlZmluZSBQVFJBQ0VfTERUIDU0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc3lzY2FsbHMuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3N5c2NhbGxzLmgKaW5kZXggYjE4N2E0MS4uNjc5MjNjYyAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc3lzY2FsbHMuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zeXNjYWxscy5oCkBAIC0yNiw2NiArMjYsOSBAQAogZXh0ZXJuIGxvbmcgb2xkX21tYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJICAgICB1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgd3JhcF9zeXNfc2htYXQ7CiBleHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX21vZGlmeV9sZHQ7CiBleHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX2FyY2hfcHJjdGw7CiAKLSNkZWZpbmUgQVJDSF9TWVNDQUxMUyBcCi0JWyBfX05SX21tYXAgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBvbGRfbW1hcCwgXAotCVsgX19OUl9zZWxlY3QgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2VsZWN0LCBcCi0JWyBfX05SX21pbmNvcmUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbWluY29yZSwgXAotCVsgX19OUl9tYWR2aXNlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21hZHZpc2UsIFwKLQlbIF9fTlJfc2htZ2V0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NobWdldCwgXAotCVsgX19OUl9zaG1hdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHdyYXBfc3lzX3NobWF0LCBcCi0JWyBfX05SX3NobWN0bCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zaG1jdGwsIFwKLQlbIF9fTlJfc2Vtb3AgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2Vtb3AsIFwKLQlbIF9fTlJfc2VtZ2V0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NlbWdldCwgXAotCVsgX19OUl9zZW1jdGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2VtY3RsLCBcCi0JWyBfX05SX3NobWR0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NobWR0LCBcCi0JWyBfX05SX21zZ2dldCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tc2dnZXQsIFwKLQlbIF9fTlJfbXNnc25kIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21zZ3NuZCwgXAotCVsgX19OUl9tc2dyY3YgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbXNncmN2LCBcCi0JWyBfX05SX21zZ2N0bCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tc2djdGwsIFwKLQlbIF9fTlJfcGl2b3Rfcm9vdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19waXZvdF9yb290LCBcCi0JWyBfX05SX3R1eGNhbGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9zZWN1cml0eSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX2Vwb2xsX2N0bF9vbGQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9lcG9sbF93YWl0X29sZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX21vZGlmeV9sZHQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbW9kaWZ5X2xkdCwgXAotCVsgX19OUl9hcmNoX3ByY3RsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2FyY2hfcHJjdGwsIFwKLQlbIF9fTlJfc29ja2V0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NvY2tldCwgXAotCVsgX19OUl9jb25uZWN0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2Nvbm5lY3QsIFwKLQlbIF9fTlJfYWNjZXB0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2FjY2VwdCwgXAotCVsgX19OUl9yZWN2ZnJvbSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19yZWN2ZnJvbSwgXAotCVsgX19OUl9yZWN2bXNnIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3JlY3Ztc2csIFwKLQlbIF9fTlJfc2VuZG1zZyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZW5kbXNnLCBcCi0JWyBfX05SX2JpbmQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfYmluZCwgXAotCVsgX19OUl9saXN0ZW4gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbGlzdGVuLCBcCi0JWyBfX05SX2dldHNvY2tuYW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHNvY2tuYW1lLCBcCi0JWyBfX05SX2dldHBlZXJuYW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHBlZXJuYW1lLCBcCi0JWyBfX05SX3NvY2tldHBhaXIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc29ja2V0cGFpciwgXAotCVsgX19OUl9zZW5kdG8gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2VuZHRvLCBcCi0JWyBfX05SX3NodXRkb3duIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NodXRkb3duLCBcCi0JWyBfX05SX3NldHNvY2tvcHQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0c29ja29wdCwgXAotCVsgX19OUl9nZXRzb2Nrb3B0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHNvY2tvcHQsIFwKLQlbIF9fTlJfaW9wbCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX3NldF90aHJlYWRfYXJlYSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX2dldF90aHJlYWRfYXJlYSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX3NlbXRpbWVkb3AgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2VtdGltZWRvcCwgXAotCVsgMjUxIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsCi0KLSNkZWZpbmUgTEFTVF9BUkNIX1NZU0NBTEwgMjUxCi0jZGVmaW5lIE5SX3N5c2NhbGxzIDEwMjQKKyNkZWZpbmUgTlJfc3lzY2FsbHMgKF9fTlJfc3lzY2FsbF9tYXggKyAxKQogCiAjZW5kaWYKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL01ha2VmaWxlIGIvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZGM3OTZjMS4uZGNhNjU0MiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUKQEAgLTQsMTMgKzQsMTMgQEAKICMKIAogZXh0cmEteSA6PSB2bWxpbnV4LmxkcwotY2xlYW4tZmlsZXMgOj0gdm1saW51eC5sZHMuUyBjb25maWcudG1wCitjbGVhbi1maWxlcyA6PQogCi1vYmoteSA9IGNoZWNrc3VtLm8gY29uZmlnLm8gZXhlY19rZXJuLm8gZXhpdGNvZGUubyBcCitvYmoteSA9IGNvbmZpZy5vIGV4ZWNfa2Vybi5vIGV4aXRjb2RlLm8gXAogCWhlbHBlci5vIGluaXRfdGFzay5vIGlycS5vIGlycV91c2VyLm8ga3N5bXMubyBtYWluLm8gbWVtLm8gbWVtX3VzZXIubyBcCiAJcGh5c21lbS5vIHByb2Nlc3MubyBwcm9jZXNzX2tlcm4ubyBwdHJhY2UubyByZWJvb3QubyByZXNvdXJjZS5vIFwKIAlzaWdpb191c2VyLm8gc2lnaW9fa2Vybi5vIHNpZ25hbF9rZXJuLm8gc2lnbmFsX3VzZXIubyBzbXAubyBcCi0Jc3lzY2FsbF9rZXJuLm8gc3lzcnEubyBzeXNfY2FsbF90YWJsZS5vIHRlbXBmaWxlLm8gdGltZS5vIHRpbWVfa2Vybi5vIFwKKwlzeXNjYWxsX2tlcm4ubyBzeXNycS5vIHRlbXBmaWxlLm8gdGltZS5vIHRpbWVfa2Vybi5vIFwKIAl0bGIubyB0cmFwX2tlcm4ubyB0cmFwX3VzZXIubyB1YWNjZXNzX3VzZXIubyB1bV9hcmNoLm8gdW1pZC5vIFwKIAl1c2VyX3V0aWwubwogCkBAIC0zNCw3ICszNCw3IEBACiAKIGluY2x1ZGUgYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCiAKLXRhcmdldHMgKz0gY29uZmlnLmMKK3RhcmdldHMgOj0gY29uZmlnLmMgY29uZmlnLnRtcAogCiAjIEJlIGNhcmVmdWwgd2l0aCB0aGUgYmVsb3cgU2VkIGNvZGUgLSBzZWQgaXMgcGl0ZmFsbC1yaWNoIQogIyBXZSB1c2Ugc2VkIHRvIGxvd2VyIGJ1aWxkIHJlcXVpcmVtZW50cywgZm9yICJlbWJlZGRlZCIgYnVpbGRlcnMgZm9yIGluc3RhbmNlLgpAQCAtNTMsNiArNTMsNyBAQAogICAgICAgY21kX3F1b3RlMiA9IHNlZCAtZSAnL0NPTkZJRy97JyAgICAgICAgICBcCiAJCSAgLWUgJ3MvIkNPTkZJRyJcOy8iIi8nICAgICAgICBcCiAJCSAgLWUgJ3IgJChvYmopL2NvbmZpZy50bXAnICAgICBcCi0JCSAgLWUgJ2EiIlw7JyAgICAgICAgICAgICAgICAgICBcCisJCSAgLWUgJ2EgXCcgICAgICAgICAgICAgICAgICAgICBcCisJCSAgLWUgJyIiXDsnICAgICAgICAgICAgICAgICAgICBcCiAJCSAgLWUgJ30nICAgICAgICAgICAgICAgICAgICAgICBcCiAJCSAgJDwgPiAkQApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvY2hlY2tzdW0uYyBiL2FyY2gvdW0va2VybmVsL2NoZWNrc3VtLmMKaW5kZXggZTY5YjJiZS4uZTY5ZGUyOSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvY2hlY2tzdW0uYworKysgYi9hcmNoL3VtL2tlcm5lbC9jaGVja3N1bS5jCkBAIC0xLDM2ICswLDAgQEAKLSNpbmNsdWRlICJhc20vdWFjY2Vzcy5oIgotI2luY2x1ZGUgImxpbnV4L2Vycm5vLmgiCi0jaW5jbHVkZSAibGludXgvbW9kdWxlLmgiCi0KLXVuc2lnbmVkIGludCBhcmNoX2NzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgbGVuLCBpbnQgc3VtKTsKLQotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbCh1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgbGVuLCBpbnQgc3VtKQotewotICAgICAgICByZXR1cm4gYXJjaF9jc3VtX3BhcnRpYWwoYnVmZiwgbGVuLCBzdW0pOwotfQotCi1FWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7Ci0KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV90byhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRzdCwgaW50IGxlbiwgaW50IHN1bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmVycl9wdHIpCi17Ci0gICAgICAgIGlmKGNvcHlfdG9fdXNlcihkc3QsIHNyYywgbGVuKSl7Ci0gICAgICAgICAgICAgICAgKmVycl9wdHIgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4oYXJjaF9jc3VtX3BhcnRpYWwoc3JjLCBsZW4sIHN1bSkpOwotfQotCi11bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbShjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0LAlpbnQgbGVuLCBpbnQgc3VtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICplcnJfcHRyKQotewotICAgICAgICBpZihjb3B5X2Zyb21fdXNlcihkc3QsIHNyYywgbGVuKSl7Ci0gICAgICAgICAgICAgICAgKmVycl9wdHIgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYXJjaF9jc3VtX3BhcnRpYWwoZHN0LCBsZW4sIHN1bSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9pcnEuYyBiL2FyY2gvdW0va2VybmVsL2lycS5jCmluZGV4IGQ3MWU4ZjAuLmQ0NGZiNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvdW0va2VybmVsL2lycS5jCkBAIC0xNjMsNyArMTYzLDYgQEAKIAkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZTSUdJT19pcnFfdHlwZTsKIAkJZW5hYmxlX2lycShpKTsKIAl9Ci0JaW5pdF9pcnFfc2lnbmFscygwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2tzeW1zLmMgYi9hcmNoL3VtL2tlcm5lbC9rc3ltcy5jCmluZGV4IGI0MWQzMzkuLjc4ZDY5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2tzeW1zLmMKKysrIGIvYXJjaC91bS9rZXJuZWwva3N5bXMuYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgImxpbnV4L3NwaW5sb2NrLmgiCiAjaW5jbHVkZSAibGludXgvaGlnaG1lbS5oIgogI2luY2x1ZGUgImFzbS9jdXJyZW50LmgiCi0jaW5jbHVkZSAiYXNtL2RlbGF5LmgiCiAjaW5jbHVkZSAiYXNtL3Byb2Nlc3Nvci5oIgogI2luY2x1ZGUgImFzbS91bmlzdGQuaCIKICNpbmNsdWRlICJhc20vcGdhbGxvYy5oIgpAQCAtMjgsOCArMjcsNiBAQAogRVhQT1JUX1NZTUJPTChzZXRfc2lnbmFscyk7CiBFWFBPUlRfU1lNQk9MKGdldF9zaWduYWxzKTsKIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7Ci1FWFBPUlRfU1lNQk9MKF9fY29uc3RfdWRlbGF5KTsKLUVYUE9SVF9TWU1CT0woX191ZGVsYXkpOwogRVhQT1JUX1NZTUJPTChzeXNfd2FpdHBpZCk7CiBFWFBPUlRfU1lNQk9MKHRhc2tfc2l6ZSk7CiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9yYW5nZSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZjc2YTI2OS4uNTFmOGU1YSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdW0va2VybmVsL3Byb2Nlc3MuYwpAQCAtNjUsOCArNjUsNiBAQAogCQkgICAgU0lHVVNSMSwgU0lHSU8sIFNJR1dJTkNILCBTSUdBTFJNLCBTSUdWVEFMUk0sIC0xKTsKIAlzZXRfaGFuZGxlcihTSUdCVVMsIChfX3NpZ2hhbmRsZXJfdCkgc2lnX2hhbmRsZXIsIGZsYWdzLCAKIAkJICAgIFNJR1VTUjEsIFNJR0lPLCBTSUdXSU5DSCwgU0lHQUxSTSwgU0lHVlRBTFJNLCAtMSk7Ci0Jc2V0X2hhbmRsZXIoU0lHV0lOQ0gsIChfX3NpZ2hhbmRsZXJfdCkgc2lnX2hhbmRsZXIsIGZsYWdzLCAKLQkJICAgIFNJR1VTUjEsIFNJR0lPLCBTSUdXSU5DSCwgU0lHQUxSTSwgU0lHVlRBTFJNLCAtMSk7CiAJc2V0X2hhbmRsZXIoU0lHVVNSMiwgKF9fc2lnaGFuZGxlcl90KSBzaWdfaGFuZGxlciwgCiAJCSAgICBmbGFncywgU0lHVVNSMSwgU0lHSU8sIFNJR1dJTkNILCBTSUdBTFJNLCBTSUdWVEFMUk0sIC0xKTsKIAlzaWduYWwoU0lHSFVQLCBTSUdfSUdOKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3Byb2Nlc3Nfa2Vybi5jIGIvYXJjaC91bS9rZXJuZWwvcHJvY2Vzc19rZXJuLmMKaW5kZXggMWQ3MTlkNS4uN2E5NDM2OSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvcHJvY2Vzc19rZXJuLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvcHJvY2Vzc19rZXJuLmMKQEAgLTE2MSwxMCArMTYxLDYgQEAKIAlyZXR1cm4oY3VycmVudCk7CiB9CiAKLXZvaWQgcHJlcGFyZV90b19jb3B5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotfQotCiBpbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHNwLAogCQl1bnNpZ25lZCBsb25nIHN0YWNrX3RvcCwgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgCiAJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYwppbmRleCAzYTk5ZWU2Li4zZWZhNTlhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYwpAQCAtOTgsMTIgKzk4LDE0IEBACiAJCWlmKGFkZHIgPCBNQVhfUkVHX09GRlNFVCl7CiAJCQl0bXAgPSBnZXRyZWcoY2hpbGQsIGFkZHIpOwogCQl9CisjaWYgZGVmaW5lZChDT05GSUdfVU1MX1g4NikgJiYgIWRlZmluZWQoQ09ORklHXzY0QklUKQogCQllbHNlIGlmKChhZGRyID49IG9mZnNldG9mKHN0cnVjdCB1c2VyLCB1X2RlYnVncmVnWzBdKSkgJiYKIAkJCShhZGRyIDw9IG9mZnNldG9mKHN0cnVjdCB1c2VyLCB1X2RlYnVncmVnWzddKSkpewogCQkJYWRkciAtPSBvZmZzZXRvZihzdHJ1Y3QgdXNlciwgdV9kZWJ1Z3JlZ1swXSk7CiAJCQlhZGRyID0gYWRkciA+PiAyOwogCQkJdG1wID0gY2hpbGQtPnRocmVhZC5hcmNoLmRlYnVncmVnc1thZGRyXTsKIAkJfQorI2VuZGlmCiAJCXJldCA9IHB1dF91c2VyKHRtcCwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopIGRhdGEpOwogCQlicmVhazsKIAl9CkBAIC0xMjcsNyArMTI5LDcgQEAKIAkJCXJldCA9IHB1dHJlZyhjaGlsZCwgYWRkciwgZGF0YSk7CiAJCQlicmVhazsKIAkJfQotI2lmIDAgLyogWFhYIHg4Nl82NCAqLworI2lmIGRlZmluZWQoQ09ORklHX1VNTF9YODYpICYmICFkZWZpbmVkKENPTkZJR182NEJJVCkKIAkJZWxzZSBpZigoYWRkciA+PSBvZmZzZXRvZihzdHJ1Y3QgdXNlciwgdV9kZWJ1Z3JlZ1swXSkpICYmCiAJCQkoYWRkciA8PSBvZmZzZXRvZihzdHJ1Y3QgdXNlciwgdV9kZWJ1Z3JlZ1s3XSkpKXsKIAkJCSAgYWRkciAtPSBvZmZzZXRvZihzdHJ1Y3QgdXNlciwgdV9kZWJ1Z3JlZ1swXSk7CkBAIC0xNDMsNyArMTQ1LDcgQEAKIAljYXNlIFBUUkFDRV9TWVNDQUxMOiAvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwogCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCiAJCWNoaWxkLT5wdHJhY2UgJj0gflBUX0RUUkFDRTsKQEAgLTE3OSw3ICsxODEsNyBAQAogCiAJY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDogeyAgLyogc2V0IHRoZSB0cmFwIGZsYWcuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKIAkJY2hpbGQtPnB0cmFjZSB8PSBQVF9EVFJBQ0U7CkBAIC0yNTAsMjMgKzI1MiwxOSBAQAogCQlicmVhazsKICNlbmRpZgogCWNhc2UgUFRSQUNFX0ZBVUxUSU5GTzogewotCQlzdHJ1Y3QgcHRyYWNlX2ZhdWx0aW5mbyBmYXVsdDsKLQotCQlmYXVsdCA9ICgoc3RydWN0IHB0cmFjZV9mYXVsdGluZm8pIAotCQkJeyAuaXNfd3JpdGUJPSBjaGlsZC0+dGhyZWFkLmVyciwKLQkJCSAgLmFkZHIJCT0gY2hpbGQtPnRocmVhZC5jcjIgfSk7Ci0JCXJldCA9IGNvcHlfdG9fdXNlcigodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgZGF0YSwgJmZhdWx0LAotCQkJCSAgIHNpemVvZihmYXVsdCkpOworICAgICAgICAgICAgICAgIC8qIFRha2UgdGhlIGluZm8gZnJvbSB0aHJlYWQtPmFyY2gtPmZhdWx0aW5mbywKKyAgICAgICAgICAgICAgICAgKiBidXQgdHJhbnNmZXIgbWF4LiBzaXplb2Yoc3RydWN0IHB0cmFjZV9mYXVsdGluZm8pLgorICAgICAgICAgICAgICAgICAqIE9uIGkzODYsIHB0cmFjZV9mYXVsdGluZm8gaXMgc21hbGxlciEKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBjb3B5X3RvX3VzZXIoKHVuc2lnbmVkIGxvbmcgX191c2VyICopIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGlsZC0+dGhyZWFkLmFyY2guZmF1bHRpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHB0cmFjZV9mYXVsdGluZm8pKTsKIAkJaWYocmV0KQogCQkJYnJlYWs7CiAJCWJyZWFrOwogCX0KLQljYXNlIFBUUkFDRV9TSUdQRU5ESU5HOgotCQlyZXQgPSBjb3B5X3RvX3VzZXIoKHVuc2lnbmVkIGxvbmcgX191c2VyICopIGRhdGEsCi0JCQkJICAgJmNoaWxkLT5wZW5kaW5nLnNpZ25hbCwKLQkJCQkgICBzaXplb2YoY2hpbGQtPnBlbmRpbmcuc2lnbmFsKSk7Ci0JCWJyZWFrOwogCisjaWZkZWYgUFRSQUNFX0xEVAogCWNhc2UgUFRSQUNFX0xEVDogewogCQlzdHJ1Y3QgcHRyYWNlX2xkdCBsZHQ7CiAKQEAgLTI4Miw2ICsyODAsNyBAQAogCQlyZXQgPSAtRUlPOwogCQlicmVhazsKIAl9CisjZW5kaWYKICNpZmRlZiBDT05GSUdfUFJPQ19NTQogCWNhc2UgUFRSQUNFX1NXSVRDSF9NTTogewogCQlzdHJ1Y3QgbW1fc3RydWN0ICpvbGQgPSBjaGlsZC0+bW07CkBAIC0zMzcsMTUgKzMzNiwxOCBAQAogCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKSB7CiAJCWlmICghZW50cnlleGl0KQotCQkJYXVkaXRfc3lzY2FsbF9lbnRyeShjdXJyZW50LCAKLQkJCQkJICAgIFVQVF9TWVNDQUxMX05SKCZyZWdzLT5yZWdzKSwKLQkJCQkJICAgIFVQVF9TWVNDQUxMX0FSRzEoJnJlZ3MtPnJlZ3MpLAotCQkJCQkgICAgVVBUX1NZU0NBTExfQVJHMigmcmVncy0+cmVncyksCi0JCQkJCSAgICBVUFRfU1lTQ0FMTF9BUkczKCZyZWdzLT5yZWdzKSwKLQkJCQkJICAgIFVQVF9TWVNDQUxMX0FSRzQoJnJlZ3MtPnJlZ3MpKTsKLQkJZWxzZQotCQkJYXVkaXRfc3lzY2FsbF9leGl0KGN1cnJlbnQsIAotCQkJCQkgICBVUFRfU1lTQ0FMTF9SRVQoJnJlZ3MtPnJlZ3MpKTsKKwkJCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9TVF9BVURJVF9BUkNILAorCQkJCQkgICAgVVBUX1NZU0NBTExfTlIocmVncyksCisJCQkJCSAgICBVUFRfU1lTQ0FMTF9BUkcxKHJlZ3MpLAorCQkJCQkgICAgVVBUX1NZU0NBTExfQVJHMihyZWdzKSwKKwkJCQkJICAgIFVQVF9TWVNDQUxMX0FSRzMocmVncyksCisJCQkJCSAgICBVUFRfU1lTQ0FMTF9BUkc0KHJlZ3MpKTsKKwkJZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzID0gVVBUX1NZU0NBTExfUkVUKHJlZ3MpOworCQkJYXVkaXRfc3lzY2FsbF9leGl0KGN1cnJlbnQsIEFVRElUU0NfUkVTVUxUKHJlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzKTsKKyAgICAgICAgICAgICAgICB9CiAJfQogCiAJLyogRmFrZSBhIGRlYnVnIHRyYXAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NpZ2lvX3VzZXIuYyBiL2FyY2gvdW0va2VybmVsL3NpZ2lvX3VzZXIuYwppbmRleCA2NjhkZjEzLi5lODkyMTg5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9zaWdpb191c2VyLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvc2lnaW9fdXNlci5jCkBAIC0xODIsNiArMTgyLDcgQEAKIAlpbnQgaSwgbiwgcmVzcG9uZF9mZDsKIAljaGFyIGM7CiAKKyAgICAgICAgc2lnbmFsKFNJR1dJTkNILCBTSUdfSUdOKTsKIAlmZHMgPSAmY3VycmVudF9wb2xsOwogCXdoaWxlKDEpewogCQluID0gcG9sbChmZHMtPnBvbGwsIGZkcy0+dXNlZCwgLTEpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9pbmNsdWRlL3NrYXMuaCBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS9za2FzLmgKaW5kZXggZjA3MDJjMi4uOTZiNTFkYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9pbmNsdWRlL3NrYXMuaAorKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL2luY2x1ZGUvc2thcy5oCkBAIC0yNyw5ICsyNywxMCBAQAogZXh0ZXJuIGludCB1bm1hcChpbnQgZmQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKIGV4dGVybiBpbnQgcHJvdGVjdChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIAogCQkgICBpbnQgciwgaW50IHcsIGludCB4KTsKLWV4dGVybiB2b2lkIHVzZXJfc2lnbmFsKGludCBzaWcsIHVuaW9uIHVtbF9wdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIHVzZXJfc2lnbmFsKGludCBzaWcsIHVuaW9uIHVtbF9wdF9yZWdzICpyZWdzLCBpbnQgcGlkKTsKIGV4dGVybiBpbnQgbmV3X21tKGludCBmcm9tKTsKIGV4dGVybiB2b2lkIHN0YXJ0X3VzZXJzcGFjZShpbnQgY3B1KTsKK2V4dGVybiB2b2lkIGdldF9za2FzX2ZhdWx0aW5mbyhpbnQgcGlkLCBzdHJ1Y3QgZmF1bHRpbmZvICogZmkpOwogZXh0ZXJuIGxvbmcgZXhlY3V0ZV9zeXNjYWxsX3NrYXModm9pZCAqcik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9pbmNsdWRlL3VhY2Nlc3Mtc2thcy5oIGIvYXJjaC91bS9rZXJuZWwvc2thcy9pbmNsdWRlL3VhY2Nlc3Mtc2thcy5oCmluZGV4IDExOTg2YzkuLmMzNTYyMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS91YWNjZXNzLXNrYXMuaAorKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL2luY2x1ZGUvdWFjY2Vzcy1za2FzLmgKQEAgLTE4LDcgKzE4LDcgQEAKIAkgICgodW5zaWduZWQgbG9uZykgKGFkZHIpICsgKHNpemUpIDw9IEZJWEFERFJfVVNFUl9FTkQpICYmIFwKIAkgICgodW5zaWduZWQgbG9uZykgKGFkZHIpICsgKHNpemUpID49ICh1bnNpZ25lZCBsb25nKShhZGRyKSkpKQogCi1zdGF0aWMgaW5saW5lIGludCB2ZXJpZnlfYXJlYV9za2FzKGludCB0eXBlLCBjb25zdCB2b2lkICogYWRkciwKK3N0YXRpYyBpbmxpbmUgaW50IF9fZGVwcmVjYXRlZCB2ZXJpZnlfYXJlYV9za2FzKGludCB0eXBlLCBjb25zdCB2b2lkICogYWRkciwKIAkJCQkgICB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJcmV0dXJuKGFjY2Vzc19va19za2FzKHR5cGUsIGFkZHIsIHNpemUpID8gMCA6IC1FRkFVTFQpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9wcm9jZXNzLmMgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3MuYwppbmRleCBiNGZmYWFhLi40ZGMxM2JjIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3MuYworKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3MuYwpAQCAtNCw2ICs0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KQEAgLTI3LDI3ICsyOCwzNyBAQAogI2luY2x1ZGUgImNoYW5fdXNlci5oIgogI2luY2x1ZGUgInNpZ25hbF91c2VyLmgiCiAjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAicHJvY2Vzcy5oIgogCiBpbnQgaXNfc2thc193aW5jaChpbnQgcGlkLCBpbnQgZmQsIHZvaWQgKmRhdGEpCiB7Ci0JaWYocGlkICE9IG9zX2dldHBpZCgpKQorICAgICAgICBpZihwaWQgIT0gb3NfZ2V0cGdycCgpKQogCQlyZXR1cm4oMCk7CiAKIAlyZWdpc3Rlcl93aW5jaF9pcnEoLTEsIGZkLCAtMSwgZGF0YSk7CiAJcmV0dXJuKDEpOwogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfc2VndihpbnQgcGlkKQordm9pZCBnZXRfc2thc19mYXVsdGluZm8oaW50IHBpZCwgc3RydWN0IGZhdWx0aW5mbyAqIGZpKQogewotCXN0cnVjdCBwdHJhY2VfZmF1bHRpbmZvIGZhdWx0OwogCWludCBlcnI7CiAKLQllcnIgPSBwdHJhY2UoUFRSQUNFX0ZBVUxUSU5GTywgcGlkLCAwLCAmZmF1bHQpOworICAgICAgICBlcnIgPSBwdHJhY2UoUFRSQUNFX0ZBVUxUSU5GTywgcGlkLCAwLCBmaSk7CiAJaWYoZXJyKQotCQlwYW5pYygiaGFuZGxlX3NlZ3YgLSBQVFJBQ0VfRkFVTFRJTkZPIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwKLQkJICAgICAgZXJybm8pOworICAgICAgICAgICAgICAgIHBhbmljKCJnZXRfc2thc19mYXVsdGluZm8gLSBQVFJBQ0VfRkFVTFRJTkZPIGZhaWxlZCwgIgorICAgICAgICAgICAgICAgICAgICAgICJlcnJubyA9ICVkXG4iLCBlcnJubyk7CiAKLQlzZWd2KGZhdWx0LmFkZHIsIDAsIEZBVUxUX1dSSVRFKGZhdWx0LmlzX3dyaXRlKSwgMSwgTlVMTCk7CisgICAgICAgIC8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGkzODYsIHdoaWNoIGhhcyBkaWZmZXJlbnQgc3RydWN0cyAqLworICAgICAgICBpZiAoc2l6ZW9mKHN0cnVjdCBwdHJhY2VfZmF1bHRpbmZvKSA8IHNpemVvZihzdHJ1Y3QgZmF1bHRpbmZvKSkKKyAgICAgICAgICAgICAgICBtZW1zZXQoKGNoYXIgKilmaSArIHNpemVvZihzdHJ1Y3QgcHRyYWNlX2ZhdWx0aW5mbyksIDAsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgZmF1bHRpbmZvKSAtCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgcHRyYWNlX2ZhdWx0aW5mbykpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfc2VndihpbnQgcGlkLCB1bmlvbiB1bWxfcHRfcmVncyAqIHJlZ3MpCit7CisgICAgICAgIGdldF9za2FzX2ZhdWx0aW5mbyhwaWQsICZyZWdzLT5za2FzLmZhdWx0aW5mbyk7CisgICAgICAgIHNlZ3YocmVncy0+c2thcy5mYXVsdGluZm8sIDAsIDEsIE5VTEwpOwogfQogCiAvKlRvIHVzZSB0aGUgc2FtZSB2YWx1ZSBvZiB1c2luZ19zeXNlbXUgYXMgdGhlIGNhbGxlciwgYXNrIGl0IHRoYXQgdmFsdWUgKGluIGxvY2FsX3VzaW5nX3N5c2VtdSkqLwpAQCAtMTYzLDcgKzE3NCw3IEBACiAJCWlmKFdJRlNUT1BQRUQoc3RhdHVzKSl7CiAJCSAgCXN3aXRjaChXU1RPUFNJRyhzdGF0dXMpKXsKIAkJCWNhc2UgU0lHU0VHVjoKLQkJCQloYW5kbGVfc2VndihwaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfc2VndihwaWQsIHJlZ3MpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBTSUdUUkFQICsgMHg4MDoKIAkJCSAgICAgICAgaGFuZGxlX3RyYXAocGlkLCByZWdzLCBsb2NhbF91c2luZ19zeXNlbXUpOwpAQCAtMTc3LDcgKzE4OCw3IEBACiAJCQljYXNlIFNJR0JVUzoKIAkJCWNhc2UgU0lHRlBFOgogCQkJY2FzZSBTSUdXSU5DSDoKLQkJCQl1c2VyX3NpZ25hbChXU1RPUFNJRyhzdGF0dXMpLCByZWdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9zaWduYWwoV1NUT1BTSUcoc3RhdHVzKSwgcmVncywgcGlkKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkgICAgICAgIHByaW50aygidXNlcnNwYWNlIC0gY2hpbGQgc3RvcHBlZCB3aXRoIHNpZ25hbCAiCkBAIC0yNDksNiArMjYwLDEwIEBACiAJc2lnam1wX2J1ZiAqKnN3aXRjaF9idWYgPSBzd2l0Y2hfYnVmX3B0cjsKIAlpbnQgbjsKIAorCXNldF9oYW5kbGVyKFNJR1dJTkNILCAoX19zaWdoYW5kbGVyX3QpIHNpZ19oYW5kbGVyLAorCQkgICAgU0FfT05TVEFDSyB8IFNBX1JFU1RBUlQsIFNJR1VTUjEsIFNJR0lPLCBTSUdBTFJNLAorCQkgICAgU0lHVlRBTFJNLCAtMSk7CisKIAkqZm9ya19idWZfcHRyID0gJmluaXRpYWxfam1wYnVmOwogCW4gPSBzaWdzZXRqbXAoaW5pdGlhbF9qbXBidWYsIDEpOwogCWlmKG4gPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvdHJhcF91c2VyLmMgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3RyYXBfdXNlci5jCmluZGV4IDhlOWI0NmQuLjBkZWUxZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvdHJhcF91c2VyLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy90cmFwX3VzZXIuYwpAQCAtNSwxMiArNSwxNSBAQAogCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJzeXNkZXAvcHRyYWNlLmgiCiAjaW5jbHVkZSAic2lnbmFsX3VzZXIuaCIKICNpbmNsdWRlICJ1c2VyX3V0aWwuaCIKICNpbmNsdWRlICJrZXJuX3V0aWwuaCIKICNpbmNsdWRlICJ0YXNrLmgiCiAjaW5jbHVkZSAic2lnY29udGV4dC5oIgorI2luY2x1ZGUgInNrYXMuaCIKKyNpbmNsdWRlICJwdHJhY2VfdXNlci5oIgorI2luY2x1ZGUgInN5c2RlcC9wdHJhY2UuaCIKKyNpbmNsdWRlICJzeXNkZXAvcHRyYWNlX3VzZXIuaCIKIAogdm9pZCBzaWdfaGFuZGxlcl9jb21tb25fc2thcyhpbnQgc2lnLCB2b2lkICpzY19wdHIpCiB7CkBAIC0zMSw5ICszNCwxMSBAQAogCXIgPSAmVEFTS19SRUdTKGdldF9jdXJyZW50KCkpLT5za2FzOwogCXNhdmVfdXNlciA9IHItPmlzX3VzZXI7CiAJci0+aXNfdXNlciA9IDA7Ci0Jci0+ZmF1bHRfYWRkciA9IFNDX0ZBVUxUX0FERFIoc2MpOwotCXItPmZhdWx0X3R5cGUgPSBTQ19GQVVMVF9UWVBFKHNjKTsKLQlyLT50cmFwX3R5cGUgPSBTQ19UUkFQX1RZUEUoc2MpOworICAgICAgICBpZiAoIHNpZyA9PSBTSUdGUEUgfHwgc2lnID09IFNJR1NFR1YgfHwKKyAgICAgICAgICAgICBzaWcgPT0gU0lHQlVTIHx8IHNpZyA9PSBTSUdJTEwgfHwKKyAgICAgICAgICAgICBzaWcgPT0gU0lHVFJBUCApIHsKKyAgICAgICAgICAgICAgICBHRVRfRkFVTFRJTkZPX0ZST01fU0Moci0+ZmF1bHRpbmZvLCBzYyk7CisgICAgICAgIH0KIAogCWNoYW5nZV9zaWcoU0lHVVNSMSwgMSk7CiAJaW5mbyA9ICZzaWdfaW5mb1tzaWddOwpAQCAtNDUsMTQgKzUwLDE3IEBACiAJci0+aXNfdXNlciA9IHNhdmVfdXNlcjsKIH0KIAotdm9pZCB1c2VyX3NpZ25hbChpbnQgc2lnLCB1bmlvbiB1bWxfcHRfcmVncyAqcmVncykKK2V4dGVybiBpbnQgcHRyYWNlX2ZhdWx0aW5mbzsKKwordm9pZCB1c2VyX3NpZ25hbChpbnQgc2lnLCB1bmlvbiB1bWxfcHRfcmVncyAqcmVncywgaW50IHBpZCkKIHsKIAlzdHJ1Y3Qgc2lnbmFsX2luZm8gKmluZm87CisgICAgICAgIGludCBzZWd2ID0gKChzaWcgPT0gU0lHRlBFKSB8fCAoc2lnID09IFNJR1NFR1YpIHx8IChzaWcgPT0gU0lHQlVTKSB8fAorICAgICAgICAgICAgICAgICAgICAoc2lnID09IFNJR0lMTCkgfHwgKHNpZyA9PSBTSUdUUkFQKSk7CiAKIAlyZWdzLT5za2FzLmlzX3VzZXIgPSAxOwotCXJlZ3MtPnNrYXMuZmF1bHRfYWRkciA9IDA7Ci0JcmVncy0+c2thcy5mYXVsdF90eXBlID0gMDsKLQlyZWdzLT5za2FzLnRyYXBfdHlwZSA9IDA7CisJaWYgKHNlZ3YpCisJCWdldF9za2FzX2ZhdWx0aW5mbyhwaWQsICZyZWdzLT5za2FzLmZhdWx0aW5mbyk7CiAJaW5mbyA9ICZzaWdfaW5mb1tzaWddOwogCSgqaW5mby0+aGFuZGxlcikoc2lnLCByZWdzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy91YWNjZXNzLmMgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3VhY2Nlc3MuYwppbmRleCA3NTc1ZWM0Li5mN2RhOWQwIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3VhY2Nlc3MuYworKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3VhY2Nlc3MuYwpAQCAtMyw2ICszLDcgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKICAqLwogCisjaW5jbHVkZSAibGludXgvY29tcGlsZXIuaCIKICNpbmNsdWRlICJsaW51eC9zdGRkZWYuaCIKICNpbmNsdWRlICJsaW51eC9rZXJuZWwuaCIKICNpbmNsdWRlICJsaW51eC9zdHJpbmcuaCIKQEAgLTYxLDggKzYyLDcgQEAKIAl2b2lkICphcmc7CiAJaW50ICpyZXM7CiAKLQkvKiBTb21lIG9sZCBnY2NzIHJlY29nbml6ZSBfX3ZhX2NvcHksIGJ1dCBub3QgdmFfY29weSAqLwotCV9fdmFfY29weShhcmdzLCAqKHZhX2xpc3QgKilhcmdfcHRyKTsKKwl2YV9jb3B5KGFyZ3MsICoodmFfbGlzdCAqKWFyZ19wdHIpOwogCWFkZHIgPSB2YV9hcmcoYXJncywgdW5zaWduZWQgbG9uZyk7CiAJbGVuID0gdmFfYXJnKGFyZ3MsIGludCk7CiAJaXNfd3JpdGUgPSB2YV9hcmcoYXJncywgaW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvdXRpbC9NYWtlZmlsZSBiL2FyY2gvdW0va2VybmVsL3NrYXMvdXRpbC9NYWtlZmlsZQppbmRleCAxN2Y1OTA5Li5mN2I3ZWJhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3V0aWwvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy91dGlsL01ha2VmaWxlCkBAIC0yLDMgKzIsNCBAQAogYWx3YXlzCQkJOj0gJChob3N0cHJvZ3MteSkKIAogbWtfcHRyZWdzLW9ianMgOj0gbWtfcHRyZWdzLSQoU1VCQVJDSCkubworSE9TVENGTEFHU19ta19wdHJlZ3MtJChTVUJBUkNIKS5vIDo9IC1JJChvYmp0cmVlKS9hcmNoL3VtCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3V0aWwvbWtfcHRyZWdzLWkzODYuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvdXRpbC9ta19wdHJlZ3MtaTM4Ni5jCmluZGV4IDA3ODhkZDAuLjFmOTZlMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvdXRpbC9ta19wdHJlZ3MtaTM4Ni5jCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvdXRpbC9ta19wdHJlZ3MtaTM4Ni5jCkBAIC0xLDggKzEsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS91c2VyLmg+CisjaW5jbHVkZSA8dXNlci1vZmZzZXRzLmg+CiAKLSNkZWZpbmUgUFJJTlRfUkVHKG5hbWUsIHZhbCkgcHJpbnRmKCIjZGVmaW5lIEhPU1RfJXMgJWRcbiIsIChuYW1lKSwgKHZhbCkpCisjZGVmaW5lIFNIT1cobmFtZSkgcHJpbnRmKCIjZGVmaW5lICVzICVkXG4iLCAjbmFtZSwgbmFtZSkKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewpAQCAtMTIsMjggKzExLDI3IEBACiAJcHJpbnRmKCIjaWZuZGVmIF9fU0tBU19QVF9SRUdTX1xuIik7CiAJcHJpbnRmKCIjZGVmaW5lIF9fU0tBU19QVF9SRUdTX1xuIik7CiAJcHJpbnRmKCJcbiIpOwotCXByaW50ZigiI2RlZmluZSBIT1NUX0ZSQU1FX1NJWkUgJWRcbiIsIEZSQU1FX1NJWkUpOwotCXByaW50ZigiI2RlZmluZSBIT1NUX0ZQX1NJWkUgJWRcbiIsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCkgLyBzaXplb2YodW5zaWduZWQgbG9uZykpOwotCXByaW50ZigiI2RlZmluZSBIT1NUX1hGUF9TSVpFICVkXG4iLAotCSAgICAgICBzaXplb2Yoc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlTSE9XKEhPU1RfRlJBTUVfU0laRSk7CisJU0hPVyhIT1NUX0ZQX1NJWkUpOworCVNIT1coSE9TVF9YRlBfU0laRSk7CiAKLQlQUklOVF9SRUcoIklQIiwgRUlQKTsKLQlQUklOVF9SRUcoIlNQIiwgVUVTUCk7Ci0JUFJJTlRfUkVHKCJFRkxBR1MiLCBFRkwpOwotCVBSSU5UX1JFRygiRUFYIiwgRUFYKTsKLQlQUklOVF9SRUcoIkVCWCIsIEVCWCk7Ci0JUFJJTlRfUkVHKCJFQ1giLCBFQ1gpOwotCVBSSU5UX1JFRygiRURYIiwgRURYKTsKLQlQUklOVF9SRUcoIkVTSSIsIEVTSSk7Ci0JUFJJTlRfUkVHKCJFREkiLCBFREkpOwotCVBSSU5UX1JFRygiRUJQIiwgRUJQKTsKLQlQUklOVF9SRUcoIkNTIiwgQ1MpOwotCVBSSU5UX1JFRygiU1MiLCBTUyk7Ci0JUFJJTlRfUkVHKCJEUyIsIERTKTsKLQlQUklOVF9SRUcoIkZTIiwgRlMpOwotCVBSSU5UX1JFRygiRVMiLCBFUyk7Ci0JUFJJTlRfUkVHKCJHUyIsIEdTKTsKKwlTSE9XKEhPU1RfSVApOworCVNIT1coSE9TVF9TUCk7CisJU0hPVyhIT1NUX0VGTEFHUyk7CisJU0hPVyhIT1NUX0VBWCk7CisJU0hPVyhIT1NUX0VCWCk7CisJU0hPVyhIT1NUX0VDWCk7CisJU0hPVyhIT1NUX0VEWCk7CisJU0hPVyhIT1NUX0VTSSk7CisJU0hPVyhIT1NUX0VESSk7CisJU0hPVyhIT1NUX0VCUCk7CisJU0hPVyhIT1NUX0NTKTsKKwlTSE9XKEhPU1RfU1MpOworCVNIT1coSE9TVF9EUyk7CisJU0hPVyhIT1NUX0ZTKTsKKwlTSE9XKEhPU1RfRVMpOworCVNIT1coSE9TVF9HUyk7CisKIAlwcmludGYoIlxuIik7CiAJcHJpbnRmKCIjZW5kaWZcbiIpOwogCXJldHVybigwKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvdXRpbC9ta19wdHJlZ3MteDg2XzY0LmMgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3V0aWwvbWtfcHRyZWdzLXg4Nl82NC5jCmluZGV4IDY3YWVlOTIuLjVmY2NiZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvdXRpbC9ta19wdHJlZ3MteDg2XzY0LmMKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy91dGlsL21rX3B0cmVncy14ODZfNjQuYwpAQCAtNSwxMSArNSwxMCBAQAogICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgotI2RlZmluZSBfX0ZSQU1FX09GRlNFVFMKLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8dXNlci1vZmZzZXRzLmg+CiAKLSNkZWZpbmUgUFJJTlRfUkVHKG5hbWUsIHZhbCkgXAotCXByaW50ZigiI2RlZmluZSBIT1NUXyVzICglZCAvIHNpemVvZih1bnNpZ25lZCBsb25nKSlcbiIsIChuYW1lKSwgKHZhbCkpCisjZGVmaW5lIFNIT1cobmFtZSkgXAorCXByaW50ZigiI2RlZmluZSAlcyAoJWQgLyBzaXplb2YodW5zaWduZWQgbG9uZykpXG4iLCAjbmFtZSwgbmFtZSkKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewpAQCAtMTgsMzYgKzE3LDM1IEBACiAJcHJpbnRmKCJcbiIpOwogCXByaW50ZigiI2lmbmRlZiBfX1NLQVNfUFRfUkVHU19cbiIpOwogCXByaW50ZigiI2RlZmluZSBfX1NLQVNfUFRfUkVHU19cbiIpOwotCXByaW50ZigiI2RlZmluZSBIT1NUX0ZSQU1FX1NJWkUgKCVkIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKVxuIiwKLQkgICAgICAgRlJBTUVfU0laRSk7Ci0JUFJJTlRfUkVHKCJSQlgiLCBSQlgpOwotCVBSSU5UX1JFRygiUkNYIiwgUkNYKTsKLQlQUklOVF9SRUcoIlJESSIsIFJESSk7Ci0JUFJJTlRfUkVHKCJSU0kiLCBSU0kpOwotCVBSSU5UX1JFRygiUkRYIiwgUkRYKTsKLQlQUklOVF9SRUcoIlJCUCIsIFJCUCk7Ci0JUFJJTlRfUkVHKCJSQVgiLCBSQVgpOwotCVBSSU5UX1JFRygiUjgiLCBSOCk7Ci0JUFJJTlRfUkVHKCJSOSIsIFI5KTsKLQlQUklOVF9SRUcoIlIxMCIsIFIxMCk7Ci0JUFJJTlRfUkVHKCJSMTEiLCBSMTEpOwotCVBSSU5UX1JFRygiUjEyIiwgUjEyKTsKLQlQUklOVF9SRUcoIlIxMyIsIFIxMyk7Ci0JUFJJTlRfUkVHKCJSMTQiLCBSMTQpOwotCVBSSU5UX1JFRygiUjE1IiwgUjE1KTsKLQlQUklOVF9SRUcoIk9SSUdfUkFYIiwgT1JJR19SQVgpOwotCVBSSU5UX1JFRygiQ1MiLCBDUyk7Ci0JUFJJTlRfUkVHKCJTUyIsIFNTKTsKLQlQUklOVF9SRUcoIkVGTEFHUyIsIEVGTEFHUyk7CisJU0hPVyhIT1NUX0ZSQU1FX1NJWkUpOworCVNIT1coSE9TVF9SQlgpOworCVNIT1coSE9TVF9SQ1gpOworCVNIT1coSE9TVF9SREkpOworCVNIT1coSE9TVF9SU0kpOworCVNIT1coSE9TVF9SRFgpOworCVNIT1coSE9TVF9SQlApOworCVNIT1coSE9TVF9SQVgpOworCVNIT1coSE9TVF9SOCk7CisJU0hPVyhIT1NUX1I5KTsKKwlTSE9XKEhPU1RfUjEwKTsKKwlTSE9XKEhPU1RfUjExKTsKKwlTSE9XKEhPU1RfUjEyKTsKKwlTSE9XKEhPU1RfUjEzKTsKKwlTSE9XKEhPU1RfUjE0KTsKKwlTSE9XKEhPU1RfUjE1KTsKKwlTSE9XKEhPU1RfT1JJR19SQVgpOworCVNIT1coSE9TVF9DUyk7CisJU0hPVyhIT1NUX1NTKTsKKwlTSE9XKEhPU1RfRUZMQUdTKTsKICNpZiAwCi0JUFJJTlRfUkVHKCJGUyIsIEZTKTsKLQlQUklOVF9SRUcoIkdTIiwgR1MpOwotCVBSSU5UX1JFRygiRFMiLCBEUyk7Ci0JUFJJTlRfUkVHKCJFUyIsIEVTKTsKKwlTSE9XKEhPU1RfRlMpOworCVNIT1coSE9TVF9HUyk7CisJU0hPVyhIT1NUX0RTKTsKKwlTSE9XKEhPU1RfRVMpOwogI2VuZGlmCiAKLQlQUklOVF9SRUcoIklQIiwgUklQKTsKLQlQUklOVF9SRUcoIlNQIiwgUlNQKTsKKwlTSE9XKEhPU1RfSVApOworCVNIT1coSE9TVF9TUCk7CiAJcHJpbnRmKCIjZGVmaW5lIEhPU1RfRlBfU0laRSAwXG4iKTsKIAlwcmludGYoIiNkZWZpbmUgSE9TVF9YRlBfU0laRSAwXG4iKTsKIAlwcmludGYoIlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9zeXNfY2FsbF90YWJsZS5jIGIvYXJjaC91bS9rZXJuZWwvc3lzX2NhbGxfdGFibGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZjMDZjOC4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL2tlcm5lbC9zeXNfY2FsbF90YWJsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDAwIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKLSAqIENvcHlyaWdodCAyMDAzIFBhdGhTY2FsZSwgSW5jLgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKLSNpbmNsdWRlICJsaW51eC91bmlzdGQuaCIKLSNpbmNsdWRlICJsaW51eC9zeXMuaCIKLSNpbmNsdWRlICJsaW51eC9zd2FwLmgiCi0jaW5jbHVkZSAibGludXgvc3lzY2FsbHMuaCIKLSNpbmNsdWRlICJsaW51eC9zeXNjdGwuaCIKLSNpbmNsdWRlICJhc20vc2lnbmFsLmgiCi0jaW5jbHVkZSAic3lzZGVwL3N5c2NhbGxzLmgiCi0jaW5jbHVkZSAia2Vybl91dGlsLmgiCi0KLSNpZmRlZiBDT05GSUdfTkZTRAotI2RlZmluZSBORlNTRVJWQ1RMIHN5c19uZnNzZXJ2Y3RsCi0jZWxzZQotI2RlZmluZSBORlNTRVJWQ1RMIHN5c19uaV9zeXNjYWxsCi0jZW5kaWYKLQotI2RlZmluZSBMQVNUX0dFTkVSSUNfU1lTQ0FMTCBfX05SX2tleWN0bAotCi0jaWYgTEFTVF9HRU5FUklDX1NZU0NBTEwgPiBMQVNUX0FSQ0hfU1lTQ0FMTAotI2RlZmluZSBMQVNUX1NZU0NBTEwgTEFTVF9HRU5FUklDX1NZU0NBTEwKLSNlbHNlCi0jZGVmaW5lIExBU1RfU1lTQ0FMTCBMQVNUX0FSQ0hfU1lTQ0FMTAotI2VuZGlmCi0KLWV4dGVybiBzeXNjYWxsX2hhbmRsZXJfdCBzeXNfZm9yazsKLWV4dGVybiBzeXNjYWxsX2hhbmRsZXJfdCBzeXNfZXhlY3ZlOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHVtX3RpbWU7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3QgdW1fc3RpbWU7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX3BpcGU7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX29sZHVuYW1lOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19zaWdhY3Rpb247Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX3NpZ3N1c3BlbmQ7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgb2xkX3JlYWRkaXI7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX3VuYW1lOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19pcGM7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX3NpZ3JldHVybjsKLWV4dGVybiBzeXNjYWxsX2hhbmRsZXJfdCBzeXNfY2xvbmU7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX3J0X3NpZ3JldHVybjsKLWV4dGVybiBzeXNjYWxsX2hhbmRsZXJfdCBzeXNfc2lnYWx0c3RhY2s7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX3Zmb3JrOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IG9sZF9zZWxlY3Q7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX21vZGlmeV9sZHQ7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX3J0X3NpZ3N1c3BlbmQ7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX21iaW5kOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19nZXRfbWVtcG9saWN5OwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19zZXRfbWVtcG9saWN5OwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19zeXNfc2V0YWx0cm9vdDsKLQotc3lzY2FsbF9oYW5kbGVyX3QgKnN5c19jYWxsX3RhYmxlW10gPSB7Ci0JWyBfX05SX3Jlc3RhcnRfc3lzY2FsbCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19yZXN0YXJ0X3N5c2NhbGwsCi0JWyBfX05SX2V4aXQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZXhpdCwKLQlbIF9fTlJfZm9yayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mb3JrLAotCVsgX19OUl9yZWFkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3JlYWQsCi0JWyBfX05SX3dyaXRlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3dyaXRlLAotCi0JLyogVGhlc2UgdGhyZWUgYXJlIGRlY2xhcmVkIGRpZmZlcmVudGx5IGluIGFzbS91bmlzdGQuaCAqLwotCVsgX19OUl9vcGVuIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX29wZW4sCi0JWyBfX05SX2Nsb3NlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2Nsb3NlLAotCVsgX19OUl9jcmVhdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19jcmVhdCwKLQlbIF9fTlJfbGluayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19saW5rLAotCVsgX19OUl91bmxpbmsgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdW5saW5rLAotCVsgX19OUl9leGVjdmUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZXhlY3ZlLAotCi0JLyogZGVjbGFyZWQgZGlmZmVyZW50bHkgaW4ga2Vybl91dGlsLmggKi8KLQlbIF9fTlJfY2hkaXIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfY2hkaXIsCi0JWyBfX05SX3RpbWUgXSA9IHVtX3RpbWUsCi0JWyBfX05SX21rbm9kIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21rbm9kLAotCVsgX19OUl9jaG1vZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19jaG1vZCwKLQlbIF9fTlJfbGNob3duIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2xjaG93bjE2LAotCVsgX19OUl9sc2VlayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19sc2VlaywKLQlbIF9fTlJfZ2V0cGlkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHBpZCwKLQlbIF9fTlJfbW91bnQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbW91bnQsCi0JWyBfX05SX3NldHVpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXR1aWQxNiwKLQlbIF9fTlJfZ2V0dWlkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHVpZDE2LAotIAlbIF9fTlJfcHRyYWNlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3B0cmFjZSwKLQlbIF9fTlJfYWxhcm0gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfYWxhcm0sCi0JWyBfX05SX3BhdXNlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3BhdXNlLAotCVsgX19OUl91dGltZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c191dGltZSwKLQlbIF9fTlJfYWNjZXNzIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2FjY2VzcywKLQlbIF9fTlJfc3luYyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zeW5jLAotCVsgX19OUl9raWxsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2tpbGwsCi0JWyBfX05SX3JlbmFtZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19yZW5hbWUsCi0JWyBfX05SX21rZGlyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21rZGlyLAotCVsgX19OUl9ybWRpciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19ybWRpciwKLQotCS8qIERlY2xhcmVkIGRpZmZlcmVudGx5IGluIGFzbS91bmlzdGQuaCAqLwotCVsgX19OUl9kdXAgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZHVwLAotCVsgX19OUl9waXBlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3BpcGUsCi0JWyBfX05SX3RpbWVzIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3RpbWVzLAotCVsgX19OUl9icmsgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfYnJrLAotCVsgX19OUl9zZXRnaWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0Z2lkMTYsCi0JWyBfX05SX2dldGdpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRnaWQxNiwKLQlbIF9fTlJfZ2V0ZXVpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRldWlkMTYsCi0JWyBfX05SX2dldGVnaWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0ZWdpZDE2LAotCVsgX19OUl9hY2N0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2FjY3QsCi0JWyBfX05SX3Vtb3VudDIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdW1vdW50LAotCVsgX19OUl9pb2N0bCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19pb2N0bCwKLQlbIF9fTlJfZmNudGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZmNudGwsCi0JWyBfX05SX3NldHBnaWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0cGdpZCwKLQlbIF9fTlJfdW1hc2sgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdW1hc2ssCi0JWyBfX05SX2Nocm9vdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19jaHJvb3QsCi0JWyBfX05SX3VzdGF0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3VzdGF0LAotCVsgX19OUl9kdXAyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2R1cDIsCi0JWyBfX05SX2dldHBwaWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0cHBpZCwKLQlbIF9fTlJfZ2V0cGdycCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRwZ3JwLAotCVsgX19OUl9zZXRzaWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0c2lkLAotCVsgX19OUl9zZXRyZXVpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXRyZXVpZDE2LAotCVsgX19OUl9zZXRyZWdpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXRyZWdpZDE2LAotCVsgX19OUl9zZXRob3N0bmFtZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXRob3N0bmFtZSwKLQlbIF9fTlJfc2V0cmxpbWl0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldHJsaW1pdCwKLQlbIF9fTlJfZ2V0cmxpbWl0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX29sZF9nZXRybGltaXQsCi0JWyBfX05SX2dldHJ1c2FnZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRydXNhZ2UsCi0JWyBfX05SX2dldHRpbWVvZmRheSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXR0aW1lb2ZkYXksCi0JWyBfX05SX3NldHRpbWVvZmRheSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXR0aW1lb2ZkYXksCi0JWyBfX05SX2dldGdyb3VwcyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRncm91cHMxNiwKLQlbIF9fTlJfc2V0Z3JvdXBzIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldGdyb3VwczE2LAotCVsgX19OUl9zeW1saW5rIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3N5bWxpbmssCi0JWyBfX05SX3JlYWRsaW5rIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3JlYWRsaW5rLAotCVsgX19OUl91c2VsaWIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdXNlbGliLAotCVsgX19OUl9zd2Fwb24gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc3dhcG9uLAotCVsgX19OUl9yZWJvb3QgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcmVib290LAotCVsgX19OUl9tdW5tYXAgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbXVubWFwLAotCVsgX19OUl90cnVuY2F0ZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c190cnVuY2F0ZSwKLQlbIF9fTlJfZnRydW5jYXRlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2Z0cnVuY2F0ZSwKLQlbIF9fTlJfZmNobW9kIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2ZjaG1vZCwKLQlbIF9fTlJfZmNob3duIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2ZjaG93bjE2LAotCVsgX19OUl9nZXRwcmlvcml0eSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRwcmlvcml0eSwKLQlbIF9fTlJfc2V0cHJpb3JpdHkgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0cHJpb3JpdHksCi0JWyBfX05SX3N0YXRmcyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zdGF0ZnMsCi0JWyBfX05SX2ZzdGF0ZnMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZnN0YXRmcywKLQlbIF9fTlJfaW9wZXJtIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsCi0JWyBfX05SX3N5c2xvZyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zeXNsb2csCi0JWyBfX05SX3NldGl0aW1lciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXRpdGltZXIsCi0JWyBfX05SX2dldGl0aW1lciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRpdGltZXIsCi0JWyBfX05SX3N0YXQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmV3c3RhdCwKLQlbIF9fTlJfbHN0YXQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmV3bHN0YXQsCi0JWyBfX05SX2ZzdGF0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25ld2ZzdGF0LAotCVsgX19OUl92aGFuZ3VwIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3ZoYW5ndXAsCi0JWyBfX05SX3dhaXQ0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3dhaXQ0LAotCVsgX19OUl9zd2Fwb2ZmIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3N3YXBvZmYsCi0JWyBfX05SX3N5c2luZm8gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc3lzaW5mbywKLQlbIF9fTlJfZnN5bmMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZnN5bmMsCi0JWyBfX05SX2Nsb25lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2Nsb25lLAotCVsgX19OUl9zZXRkb21haW5uYW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldGRvbWFpbm5hbWUsCi0JWyBfX05SX3VuYW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25ld3VuYW1lLAotCVsgX19OUl9hZGp0aW1leCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19hZGp0aW1leCwKLQlbIF9fTlJfbXByb3RlY3QgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbXByb3RlY3QsCi0JWyBfX05SX2NyZWF0ZV9tb2R1bGUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwKLQlbIF9fTlJfaW5pdF9tb2R1bGUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfaW5pdF9tb2R1bGUsCi0JWyBfX05SX2RlbGV0ZV9tb2R1bGUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZGVsZXRlX21vZHVsZSwKLQlbIF9fTlJfZ2V0X2tlcm5lbF9zeW1zIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsCi0JWyBfX05SX3F1b3RhY3RsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3F1b3RhY3RsLAotCVsgX19OUl9nZXRwZ2lkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHBnaWQsCi0JWyBfX05SX2ZjaGRpciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mY2hkaXIsCi0JWyBfX05SX3N5c2ZzIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3N5c2ZzLAotCVsgX19OUl9wZXJzb25hbGl0eSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19wZXJzb25hbGl0eSwKLQlbIF9fTlJfYWZzX3N5c2NhbGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwKLQlbIF9fTlJfc2V0ZnN1aWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0ZnN1aWQxNiwKLQlbIF9fTlJfc2V0ZnNnaWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0ZnNnaWQxNiwKLQlbIF9fTlJfZ2V0ZGVudHMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0ZGVudHMsCi0JWyBfX05SX2Zsb2NrIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2Zsb2NrLAotCVsgX19OUl9tc3luYyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tc3luYywKLQlbIF9fTlJfcmVhZHYgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcmVhZHYsCi0JWyBfX05SX3dyaXRldiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c193cml0ZXYsCi0JWyBfX05SX2dldHNpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRzaWQsCi0JWyBfX05SX2ZkYXRhc3luYyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mZGF0YXN5bmMsCi0JWyBfX05SX19zeXNjdGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc3lzY3RsLAotCVsgX19OUl9tbG9jayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tbG9jaywKLQlbIF9fTlJfbXVubG9jayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tdW5sb2NrLAotCVsgX19OUl9tbG9ja2FsbCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tbG9ja2FsbCwKLQlbIF9fTlJfbXVubG9ja2FsbCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tdW5sb2NrYWxsLAotCVsgX19OUl9zY2hlZF9zZXRwYXJhbSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zY2hlZF9zZXRwYXJhbSwKLQlbIF9fTlJfc2NoZWRfZ2V0cGFyYW0gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2NoZWRfZ2V0cGFyYW0sCi0JWyBfX05SX3NjaGVkX3NldHNjaGVkdWxlciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIsCi0JWyBfX05SX3NjaGVkX2dldHNjaGVkdWxlciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zY2hlZF9nZXRzY2hlZHVsZXIsCi0JWyBfX05SX3NjaGVkX3lpZWxkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgeWllbGQsCi0JWyBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXggXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCwKLQlbIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluLAotCVsgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsLAotCVsgX19OUl9uYW5vc2xlZXAgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmFub3NsZWVwLAotCVsgX19OUl9tcmVtYXAgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbXJlbWFwLAotCVsgX19OUl9zZXRyZXN1aWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0cmVzdWlkMTYsCi0JWyBfX05SX2dldHJlc3VpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRyZXN1aWQxNiwKLQlbIF9fTlJfcXVlcnlfbW9kdWxlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsCi0JWyBfX05SX3BvbGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcG9sbCwKLQlbIF9fTlJfbmZzc2VydmN0bCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIE5GU1NFUlZDVEwsCi0JWyBfX05SX3NldHJlc2dpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXRyZXNnaWQxNiwKLQlbIF9fTlJfZ2V0cmVzZ2lkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHJlc2dpZDE2LAotCVsgX19OUl9wcmN0bCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19wcmN0bCwKLQlbIF9fTlJfcnRfc2lncmV0dXJuIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3J0X3NpZ3JldHVybiwKLQlbIF9fTlJfcnRfc2lnYWN0aW9uIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3J0X3NpZ2FjdGlvbiwKLQlbIF9fTlJfcnRfc2lncHJvY21hc2sgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcnRfc2lncHJvY21hc2ssCi0JWyBfX05SX3J0X3NpZ3BlbmRpbmcgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcnRfc2lncGVuZGluZywKLQlbIF9fTlJfcnRfc2lndGltZWR3YWl0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3J0X3NpZ3RpbWVkd2FpdCwKLQlbIF9fTlJfcnRfc2lncXVldWVpbmZvIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3J0X3NpZ3F1ZXVlaW5mbywKLQlbIF9fTlJfcnRfc2lnc3VzcGVuZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19ydF9zaWdzdXNwZW5kLAotCVsgX19OUl9wcmVhZDY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3ByZWFkNjQsCi0JWyBfX05SX3B3cml0ZTY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3B3cml0ZTY0LAotCVsgX19OUl9jaG93biBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19jaG93bjE2LAotCVsgX19OUl9nZXRjd2QgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0Y3dkLAotCVsgX19OUl9jYXBnZXQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfY2FwZ2V0LAotCVsgX19OUl9jYXBzZXQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfY2Fwc2V0LAotCVsgX19OUl9zaWdhbHRzdGFjayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zaWdhbHRzdGFjaywKLQlbIF9fTlJfc2VuZGZpbGUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2VuZGZpbGUsCi0JWyBfX05SX2dldHBtc2cgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwKLQlbIF9fTlJfcHV0cG1zZyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLAotCVsgX19OUl92Zm9yayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c192Zm9yaywKLQlbIF9fTlJfZ2V0ZGVudHM2NCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRkZW50czY0LAotCVsgX19OUl9nZXR0aWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0dGlkLAotCVsgX19OUl9yZWFkYWhlYWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcmVhZGFoZWFkLAotCVsgX19OUl9zZXR4YXR0ciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXR4YXR0ciwKLQlbIF9fTlJfbHNldHhhdHRyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2xzZXR4YXR0ciwKLQlbIF9fTlJfZnNldHhhdHRyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2ZzZXR4YXR0ciwKLQlbIF9fTlJfZ2V0eGF0dHIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0eGF0dHIsCi0JWyBfX05SX2xnZXR4YXR0ciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19sZ2V0eGF0dHIsCi0JWyBfX05SX2ZnZXR4YXR0ciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mZ2V0eGF0dHIsCi0JWyBfX05SX2xpc3R4YXR0ciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19saXN0eGF0dHIsCi0JWyBfX05SX2xsaXN0eGF0dHIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbGxpc3R4YXR0ciwKLQlbIF9fTlJfZmxpc3R4YXR0ciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mbGlzdHhhdHRyLAotCVsgX19OUl9yZW1vdmV4YXR0ciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19yZW1vdmV4YXR0ciwKLQlbIF9fTlJfbHJlbW92ZXhhdHRyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2xyZW1vdmV4YXR0ciwKLQlbIF9fTlJfZnJlbW92ZXhhdHRyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2ZyZW1vdmV4YXR0ciwKLQlbIF9fTlJfdGtpbGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdGtpbGwsCi0JWyBfX05SX2Z1dGV4IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2Z1dGV4LAotCVsgX19OUl9zY2hlZF9zZXRhZmZpbml0eSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zY2hlZF9zZXRhZmZpbml0eSwKLQlbIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2NoZWRfZ2V0YWZmaW5pdHksCi0JWyBfX05SX2lvX3NldHVwIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2lvX3NldHVwLAotCVsgX19OUl9pb19kZXN0cm95IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2lvX2Rlc3Ryb3ksCi0JWyBfX05SX2lvX2dldGV2ZW50cyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19pb19nZXRldmVudHMsCi0JWyBfX05SX2lvX3N1Ym1pdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19pb19zdWJtaXQsCi0JWyBfX05SX2lvX2NhbmNlbCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19pb19jYW5jZWwsCi0JWyBfX05SX2V4aXRfZ3JvdXAgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZXhpdF9ncm91cCwKLQlbIF9fTlJfbG9va3VwX2Rjb29raWUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbG9va3VwX2Rjb29raWUsCi0JWyBfX05SX2Vwb2xsX2NyZWF0ZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19lcG9sbF9jcmVhdGUsCi0JWyBfX05SX2Vwb2xsX2N0bCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19lcG9sbF9jdGwsCi0JWyBfX05SX2Vwb2xsX3dhaXQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZXBvbGxfd2FpdCwKLQlbIF9fTlJfcmVtYXBfZmlsZV9wYWdlcyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19yZW1hcF9maWxlX3BhZ2VzLAotCVsgX19OUl9zZXRfdGlkX2FkZHJlc3MgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0X3RpZF9hZGRyZXNzLAotCVsgX19OUl90aW1lcl9jcmVhdGUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdGltZXJfY3JlYXRlLAotCVsgX19OUl90aW1lcl9zZXR0aW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3RpbWVyX3NldHRpbWUsCi0JWyBfX05SX3RpbWVyX2dldHRpbWUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdGltZXJfZ2V0dGltZSwKLQlbIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1biBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c190aW1lcl9nZXRvdmVycnVuLAotCVsgX19OUl90aW1lcl9kZWxldGUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdGltZXJfZGVsZXRlLAotCVsgX19OUl9jbG9ja19zZXR0aW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2Nsb2NrX3NldHRpbWUsCi0JWyBfX05SX2Nsb2NrX2dldHRpbWUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfY2xvY2tfZ2V0dGltZSwKLQlbIF9fTlJfY2xvY2tfZ2V0cmVzIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2Nsb2NrX2dldHJlcywKLQlbIF9fTlJfY2xvY2tfbmFub3NsZWVwIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2Nsb2NrX25hbm9zbGVlcCwKLQlbIF9fTlJfdGdraWxsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3Rna2lsbCwKLQlbIF9fTlJfdXRpbWVzIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3V0aW1lcywKLQlbIF9fTlJfZmFkdmlzZTY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2ZhZHZpc2U2NCwKLQlbIF9fTlJfdnNlcnZlciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLAotCVsgX19OUl9tYmluZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tYmluZCwKLQlbIF9fTlJfZ2V0X21lbXBvbGljeSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRfbWVtcG9saWN5LAotCVsgX19OUl9zZXRfbWVtcG9saWN5IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldF9tZW1wb2xpY3ksCi0JWyBfX05SX21xX29wZW4gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbXFfb3BlbiwKLQlbIF9fTlJfbXFfdW5saW5rIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21xX3VubGluaywKLQlbIF9fTlJfbXFfdGltZWRzZW5kIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21xX3RpbWVkc2VuZCwKLQlbIF9fTlJfbXFfdGltZWRyZWNlaXZlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21xX3RpbWVkcmVjZWl2ZSwKLQlbIF9fTlJfbXFfbm90aWZ5IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21xX25vdGlmeSwKLQlbIF9fTlJfbXFfZ2V0c2V0YXR0ciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tcV9nZXRzZXRhdHRyLAotCVsgX19OUl9rZXhlY19sb2FkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsCi0JWyBfX05SX3dhaXRpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c193YWl0aWQsCi0JWyBfX05SX2FkZF9rZXkgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfYWRkX2tleSwKLQlbIF9fTlJfcmVxdWVzdF9rZXkgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcmVxdWVzdF9rZXksCi0JWyBfX05SX2tleWN0bCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19rZXljdGwsCi0KLQlBUkNIX1NZU0NBTExTCi0JWyBMQVNUX1NZU0NBTEwgKyAxIC4uLiBOUl9zeXNjYWxscyBdID0gCi0JCShzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RpbWVfa2Vybi5jIGIvYXJjaC91bS9rZXJuZWwvdGltZV9rZXJuLmMKaW5kZXggMjQ2MWNkNy4uNjUxNmZjNSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdGltZV9rZXJuLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdGltZV9rZXJuLmMKQEAgLTQ4LDggKzQ4LDYgQEAKIHN0YXRpYyBsb25nIGxvbmcgZGVsdGE7ICAgCQkvKiBEZXZpYXRpb24gcGVyIGludGVydmFsICovCiAjZW5kaWYKIAotI2RlZmluZSBNSUxMSU9OIDEwMDAwMDAKLQogdm9pZCB0aW1lcl9pcnEodW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRpY2tzID0gMDsKQEAgLTEzNiwyMiArMTM0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQotewotCWludCBpLCBuOwotCi0JbiA9IChsb29wc19wZXJfamlmZnkgKiBIWiAqIHVzZWNzKSAvIE1JTExJT047Ci0JZm9yKGk9MDtpPG47aSsrKSA7Ci19Ci0KLXZvaWQgX19jb25zdF91ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjcykKLXsKLQlpbnQgaSwgbjsKLQotCW4gPSAobG9vcHNfcGVyX2ppZmZ5ICogSFogKiB1c2VjcykgLyBNSUxMSU9OOwotCWZvcihpPTA7aTxuO2krKykgOwotfQotCiB2b2lkIHRpbWVyX2hhbmRsZXIoaW50IHNpZywgdW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpCiB7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RyYXBfa2Vybi5jIGIvYXJjaC91bS9rZXJuZWwvdHJhcF9rZXJuLmMKaW5kZXggNDdlNzY2ZS4uNTRlMmVjMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdHJhcF9rZXJuLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdHJhcF9rZXJuLmMKQEAgLTEzMywxMiArMTMzLDE5IEBACiAJcmV0dXJuKDApOwogfQogCi11bnNpZ25lZCBsb25nIHNlZ3YodW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGlwLCBpbnQgaXNfd3JpdGUsIAotCQkgICBpbnQgaXNfdXNlciwgdm9pZCAqc2MpCisvKgorICogV2UgZ2l2ZSBhICpjb3B5KiBvZiB0aGUgZmF1bHRpbmZvIGluIHRoZSByZWdzIHRvIHNlZ3YuCisgKiBUaGlzIG11c3QgYmUgZG9uZSwgc2luY2UgbmVzdGluZyBTRUdWcyBjb3VsZCBvdmVyd3JpdGUKKyAqIHRoZSBpbmZvIGluIHRoZSByZWdzLiBBIHBvaW50ZXIgdG8gdGhlIGluZm8gdGhlbiB3b3VsZAorICogZ2l2ZSB1cyBiYWQgZGF0YSEKKyAqLwordW5zaWduZWQgbG9uZyBzZWd2KHN0cnVjdCBmYXVsdGluZm8gZmksIHVuc2lnbmVkIGxvbmcgaXAsIGludCBpc191c2VyLCB2b2lkICpzYykKIHsKIAlzdHJ1Y3Qgc2lnaW5mbyBzaTsKIAl2b2lkICpjYXRjaGVyOwogCWludCBlcnI7CisgICAgICAgIGludCBpc193cml0ZSA9IEZBVUxUX1dSSVRFKGZpKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gRkFVTFRfQUREUkVTUyhmaSk7CiAKICAgICAgICAgaWYoIWlzX3VzZXIgJiYgKGFkZHJlc3MgPj0gc3RhcnRfdm0pICYmIChhZGRyZXNzIDwgZW5kX3ZtKSl7CiAgICAgICAgICAgICAgICAgZmx1c2hfdGxiX2tlcm5lbF92bSgpOwpAQCAtMTU5LDcgKzE2Niw3IEBACiAJfSAKIAllbHNlIGlmKGN1cnJlbnQtPnRocmVhZC5mYXVsdF9hZGRyICE9IE5VTEwpCiAJCXBhbmljKCJmYXVsdF9hZGRyIHNldCBidXQgbm8gZmF1bHQgY2F0Y2hlciIpOwotCWVsc2UgaWYoYXJjaF9maXh1cChpcCwgc2MpKQorICAgICAgICBlbHNlIGlmKCFpc191c2VyICYmIGFyY2hfZml4dXAoaXAsIHNjKSkKIAkJcmV0dXJuKDApOwogCiAgCWlmKCFpc191c2VyKSAKQEAgLTE3MSw2ICsxNzgsNyBAQAogCQlzaS5zaV9lcnJubyA9IDA7CiAJCXNpLnNpX2NvZGUgPSBCVVNfQURSRVJSOwogCQlzaS5zaV9hZGRyID0gKHZvaWQgKilhZGRyZXNzOworICAgICAgICAgICAgICAgIGN1cnJlbnQtPnRocmVhZC5hcmNoLmZhdWx0aW5mbyA9IGZpOwogCQlmb3JjZV9zaWdfaW5mbyhTSUdCVVMsICZzaSwgY3VycmVudCk7CiAJfQogCWVsc2UgaWYoZXJyID09IC1FTk9NRU0pewpAQCAtMTgwLDIyICsxODgsMjAgQEAKIAllbHNlIHsKIAkJc2kuc2lfc2lnbm8gPSBTSUdTRUdWOwogCQlzaS5zaV9hZGRyID0gKHZvaWQgKikgYWRkcmVzczsKLQkJY3VycmVudC0+dGhyZWFkLmNyMiA9IGFkZHJlc3M7Ci0JCWN1cnJlbnQtPnRocmVhZC5lcnIgPSBpc193cml0ZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50LT50aHJlYWQuYXJjaC5mYXVsdGluZm8gPSBmaTsKIAkJZm9yY2Vfc2lnX2luZm8oU0lHU0VHViwgJnNpLCBjdXJyZW50KTsKIAl9CiAJcmV0dXJuKDApOwogfQogCi12b2lkIGJhZF9zZWd2KHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBpcCwgaW50IGlzX3dyaXRlKQordm9pZCBiYWRfc2VndihzdHJ1Y3QgZmF1bHRpbmZvIGZpLCB1bnNpZ25lZCBsb25nIGlwKQogewogCXN0cnVjdCBzaWdpbmZvIHNpOwogCiAJc2kuc2lfc2lnbm8gPSBTSUdTRUdWOwogCXNpLnNpX2NvZGUgPSBTRUdWX0FDQ0VSUjsKLQlzaS5zaV9hZGRyID0gKHZvaWQgKikgYWRkcmVzczsKLQljdXJyZW50LT50aHJlYWQuY3IyID0gYWRkcmVzczsKLQljdXJyZW50LT50aHJlYWQuZXJyID0gaXNfd3JpdGU7CisgICAgICAgIHNpLnNpX2FkZHIgPSAodm9pZCAqKSBGQVVMVF9BRERSRVNTKGZpKTsKKyAgICAgICAgY3VycmVudC0+dGhyZWFkLmFyY2guZmF1bHRpbmZvID0gZmk7CiAJZm9yY2Vfc2lnX2luZm8oU0lHU0VHViwgJnNpLCBjdXJyZW50KTsKIH0KIApAQCAtMjA0LDYgKzIxMCw3IEBACiAJaWYoYXJjaF9oYW5kbGVfc2lnbmFsKHNpZywgcmVncykpIHJldHVybjsKIAlpZighVVBUX0lTX1VTRVIocmVncykpCiAJCXBhbmljKCJLZXJuZWwgbW9kZSBzaWduYWwgJWQiLCBzaWcpOworICAgICAgICBjdXJyZW50LT50aHJlYWQuYXJjaC5mYXVsdGluZm8gPSAqVVBUX0ZBVUxUSU5GTyhyZWdzKTsKIAlmb3JjZV9zaWcoc2lnLCBjdXJyZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdHJhcF91c2VyLmMgYi9hcmNoL3VtL2tlcm5lbC90cmFwX3VzZXIuYwppbmRleCA1MGE0MDQyLi5mODI1YTZlIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90cmFwX3VzZXIuYworKysgYi9hcmNoL3VtL2tlcm5lbC90cmFwX3VzZXIuYwpAQCAtNTQsMjMgKzU0LDIyIEBACiB2b2lkIHNlZ3ZfaGFuZGxlcihpbnQgc2lnLCB1bmlvbiB1bWxfcHRfcmVncyAqcmVncykKIHsKIAlpbnQgaW5kZXgsIG1heDsKKyAgICAgICAgc3RydWN0IGZhdWx0aW5mbyAqIGZpID0gVVBUX0ZBVUxUSU5GTyhyZWdzKTsKIAotCWlmKFVQVF9JU19VU0VSKHJlZ3MpICYmICFVUFRfU0VHVl9JU19GSVhBQkxFKHJlZ3MpKXsKLQkJYmFkX3NlZ3YoVVBUX0ZBVUxUX0FERFIocmVncyksIFVQVF9JUChyZWdzKSwgCi0JCQkgVVBUX0ZBVUxUX1dSSVRFKHJlZ3MpKTsKKyAgICAgICAgaWYoVVBUX0lTX1VTRVIocmVncykgJiYgIVNFR1ZfSVNfRklYQUJMRShmaSkpeworICAgICAgICAgICAgICAgIGJhZF9zZWd2KCpmaSwgVVBUX0lQKHJlZ3MpKTsKIAkJcmV0dXJuOwogCX0KIAltYXggPSBzaXplb2Yoc2VnZmF1bHRfcmVjb3JkKS9zaXplb2Yoc2VnZmF1bHRfcmVjb3JkWzBdKTsKIAlpbmRleCA9IG5leHRfdHJhcF9pbmRleChtYXgpOwogCiAJbnNlZ2ZhdWx0cysrOwotCXNlZ2ZhdWx0X3JlY29yZFtpbmRleF0uYWRkcmVzcyA9IFVQVF9GQVVMVF9BRERSKHJlZ3MpOworICAgICAgICBzZWdmYXVsdF9yZWNvcmRbaW5kZXhdLmFkZHJlc3MgPSBGQVVMVF9BRERSRVNTKCpmaSk7CiAJc2VnZmF1bHRfcmVjb3JkW2luZGV4XS5waWQgPSBvc19nZXRwaWQoKTsKLQlzZWdmYXVsdF9yZWNvcmRbaW5kZXhdLmlzX3dyaXRlID0gVVBUX0ZBVUxUX1dSSVRFKHJlZ3MpOworICAgICAgICBzZWdmYXVsdF9yZWNvcmRbaW5kZXhdLmlzX3dyaXRlID0gRkFVTFRfV1JJVEUoKmZpKTsKIAlzZWdmYXVsdF9yZWNvcmRbaW5kZXhdLnNwID0gVVBUX1NQKHJlZ3MpOwogCXNlZ2ZhdWx0X3JlY29yZFtpbmRleF0uaXNfdXNlciA9IFVQVF9JU19VU0VSKHJlZ3MpOwotCXNlZ3YoVVBUX0ZBVUxUX0FERFIocmVncyksIFVQVF9JUChyZWdzKSwgVVBUX0ZBVUxUX1dSSVRFKHJlZ3MpLAotCSAgICAgVVBUX0lTX1VTRVIocmVncyksIHJlZ3MpOworICAgICAgICBzZWd2KCpmaSwgVVBUX0lQKHJlZ3MpLCBVUFRfSVNfVVNFUihyZWdzKSwgcmVncyk7CiB9CiAKIHZvaWQgdXNyMl9oYW5kbGVyKGludCBzaWcsIHVuaW9uIHVtbF9wdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdHQvTWFrZWZpbGUgYi9hcmNoL3VtL2tlcm5lbC90dC9NYWtlZmlsZQppbmRleCAzZDUxNzdkLi5jM2ZhZWEyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90dC9NYWtlZmlsZQorKysgYi9hcmNoL3VtL2tlcm5lbC90dC9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKICMKIAogZXh0cmEteSA6PSB1bm1hcF9maW4ubwordGFyZ2V0cyA6PSB1bm1hcC5vCiBjbGVhbi1maWxlcyA6PSB1bm1hcF90bXAubwogCiBvYmoteSA9IGV4ZWNfa2Vybi5vIGV4ZWNfdXNlci5vIGdkYi5vIGtzeW1zLm8gbWVtLm8gbWVtX3VzZXIubyBwcm9jZXNzX2tlcm4ubyBcCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90dC9pbmNsdWRlL3VhY2Nlc3MtdHQuaCBiL2FyY2gvdW0va2VybmVsL3R0L2luY2x1ZGUvdWFjY2Vzcy10dC5oCmluZGV4IGYwYmFkMDEuLmJiNjlkNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3R0L2luY2x1ZGUvdWFjY2Vzcy10dC5oCisrKyBiL2FyY2gvdW0va2VybmVsL3R0L2luY2x1ZGUvdWFjY2Vzcy10dC5oCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAoKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgPD0gKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgKyAoc2l6ZSkpKSAmJiBcCiAgICAgICAgICAgKHVuZGVyX3Rhc2tfc2l6ZShhZGRyLCBzaXplKSB8fCBpc19zdGFjayhhZGRyLCBzaXplKSkpKQogCi1zdGF0aWMgaW5saW5lIGludCB2ZXJpZnlfYXJlYV90dChpbnQgdHlwZSwgY29uc3Qgdm9pZCAqIGFkZHIsCitzdGF0aWMgaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgdmVyaWZ5X2FyZWFfdHQoaW50IHR5cGUsIGNvbnN0IHZvaWQgKiBhZGRyLAogCQkJCSB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJcmV0dXJuKGFjY2Vzc19va190dCh0eXBlLCBhZGRyLCBzaXplKSA/IDAgOiAtRUZBVUxUKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3R0L3RyYWNlci5jIGIvYXJjaC91bS9rZXJuZWwvdHQvdHJhY2VyLmMKaW5kZXggN2I1ZDkzNy4uZDExZTczOSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdHQvdHJhY2VyLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdHQvdHJhY2VyLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJrZXJuX3V0aWwuaCIKICNpbmNsdWRlICJjaGFuX3VzZXIuaCIKICNpbmNsdWRlICJwdHJhY2VfdXNlci5oIgorI2luY2x1ZGUgImlycV91c2VyLmgiCiAjaW5jbHVkZSAibW9kZS5oIgogI2luY2x1ZGUgInR0LmgiCiAKQEAgLTMzLDcgKzM0LDcgQEAKIAogaW50IGlzX3RyYWNlcl93aW5jaChpbnQgcGlkLCBpbnQgZmQsIHZvaWQgKmRhdGEpCiB7Ci0JaWYocGlkICE9IHRyYWNpbmdfcGlkKQorCWlmKHBpZCAhPSBvc19nZXRwZ3JwKCkpCiAJCXJldHVybigwKTsKIAogCXJlZ2lzdGVyX3dpbmNoX2lycSh0cmFjZXJfd2luY2hbMF0sIGZkLCAtMSwgZGF0YSk7CkBAIC04OSw4ICs5MCwxMCBAQAogCiBzdGF0aWMgdm9pZCB0cmFjZXJfc2VndihpbnQgc2lnLCBzdHJ1Y3Qgc2lnY29udGV4dCBzYykKIHsKKyAgICAgICAgc3RydWN0IGZhdWx0aW5mbyBmaTsKKyAgICAgICAgR0VUX0ZBVUxUSU5GT19GUk9NX1NDKGZpLCAmc2MpOwogCXByaW50ZigiVHJhY2luZyB0aHJlYWQgc2VnZmF1bHQgYXQgYWRkcmVzcyAweCVseCwgaXAgMHglbHhcbiIsCi0JICAgICAgIFNDX0ZBVUxUX0FERFIoJnNjKSwgU0NfSVAoJnNjKSk7CisgICAgICAgICAgICAgICBGQVVMVF9BRERSRVNTKGZpKSwgU0NfSVAoJnNjKSk7CiAJd2hpbGUoMSkKIAkJcGF1c2UoKTsKIH0KQEAgLTExNyw2ICsxMjAsNyBAQAogCXNpZ25hbChTSUdTRUdWLCAoX19zaWdoYW5kbGVyX3QpIHNpZ19oYW5kbGVyKTsKIAlzZXRfY21kbGluZSgiKGlkbGUgdGhyZWFkKSIpOwogCXNldF9pbml0X3BpZChvc19nZXRwaWQoKSk7CisJaW5pdF9pcnFfc2lnbmFscygwKTsKIAlwcm9jID0gYXJnOwogCXJldHVybigoKnByb2MpKE5VTEwpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3R0L3RyYXBfdXNlci5jIGIvYXJjaC91bS9rZXJuZWwvdHQvdHJhcF91c2VyLmMKaW5kZXggOTJhMzgyMC4uZmMxMDg2MSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdHQvdHJhcF91c2VyLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdHQvdHJhcF91c2VyLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlICJzeXNkZXAvcHRyYWNlLmgiCisjaW5jbHVkZSAic3lzZGVwL3NpZ2NvbnRleHQuaCIKICNpbmNsdWRlICJzaWduYWxfdXNlci5oIgogI2luY2x1ZGUgInVzZXJfdXRpbC5oIgogI2luY2x1ZGUgImtlcm5fdXRpbC5oIgpAQCAtMjgsNiArMjksMTEgQEAKIAkJY2hhbmdlX3NpZyhTSUdTRUdWLCAxKTsKIAogCXIgPSAmVEFTS19SRUdTKGdldF9jdXJyZW50KCkpLT50dDsKKyAgICAgICAgaWYgKCBzaWcgPT0gU0lHRlBFIHx8IHNpZyA9PSBTSUdTRUdWIHx8CisgICAgICAgICAgICAgc2lnID09IFNJR0JVUyB8fCBzaWcgPT0gU0lHSUxMIHx8CisgICAgICAgICAgICAgc2lnID09IFNJR1RSQVAgKSB7CisgICAgICAgICAgICAgICAgR0VUX0ZBVUxUSU5GT19GUk9NX1NDKHItPmZhdWx0aW5mbywgc2MpOworICAgICAgICB9CiAJc2F2ZV9yZWdzID0gKnI7CiAJaXNfdXNlciA9IHVzZXJfY29udGV4dChTQ19TUChzYykpOwogCXItPnNjID0gc2M7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC91bS9rZXJuZWwvdm1saW51eC5sZHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjYwYTc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpZmRlZiBDT05GSUdfTERfU0NSSVBUX1NUQVRJQworI2luY2x1ZGUgInVtbC5sZHMuUyIKKyNlbHNlCisjaW5jbHVkZSAiZHluLmxkcy5TIgorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3Byb2Nlc3MuYyBiL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jCmluZGV4IGJhOWNhMWMuLjFlMTI2YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jCkBAIC0xMjMsNiArMTIzLDExIEBACiAJcmV0dXJuKGdldHBpZCgpKTsKIH0KIAoraW50IG9zX2dldHBncnAodm9pZCkKK3sKKwlyZXR1cm4gZ2V0cGdycCgpOworfQorCiBpbnQgb3NfbWFwX21lbW9yeSh2b2lkICp2aXJ0LCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmYsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkgIGludCByLCBpbnQgdywgaW50IHgpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3NpZ25hbC5jIGIvYXJjaC91bS9vcy1MaW51eC9zaWduYWwuYwppbmRleCA3ZWFjMWJhLi5jN2JmZDVlIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3NpZ25hbC5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc2lnbmFsLmMKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSAibW9kZS5oIgogI2luY2x1ZGUgInN5c2RlcC9zaWduYWwuaCIKIAotdm9pZCBzaWdfaGFuZGxlcihpbnQgc2lnKQordm9pZCBzaWdfaGFuZGxlcihBUkNIX1NJR0hETFJfUEFSQU0pCiB7CiAJc3RydWN0IHNpZ2NvbnRleHQgKnNjOwogCkBAIC0xOSw3ICsxOSw3IEBACiAKIGV4dGVybiBpbnQgdGltZXJfaXJxX2luaXRlZDsKIAotdm9pZCBhbGFybV9oYW5kbGVyKGludCBzaWcpCit2b2lkIGFsYXJtX2hhbmRsZXIoQVJDSF9TSUdIRExSX1BBUkFNKQogewogCXN0cnVjdCBzaWdjb250ZXh0ICpzYzsKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni9yZWdpc3RlcnMuYyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvcmVnaXN0ZXJzLmMKaW5kZXggMTQ4NjQ1Yi4uOWEwYWQwOSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni9yZWdpc3RlcnMuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3JlZ2lzdGVycy5jCkBAIC0xMDUsMTQgKzEwNSwxNSBAQAogCQlwYW5pYygiY2hlY2tfcHRyYWNlIDogUFRSQUNFX0dFVFJFR1MgZmFpbGVkLCBlcnJubyA9ICVkIiwKIAkJICAgICAgZXJyKTsKIAorCWVycm5vID0gMDsKIAllcnIgPSBwdHJhY2UoUFRSQUNFX0dFVEZQWFJFR1MsIHBpZCwgMCwgZXhlY19mcHhfcmVncyk7CiAJaWYoIWVycikKIAkJcmV0dXJuOworCWlmKGVycm5vICE9IEVJTykKKwkJcGFuaWMoImNoZWNrX3B0cmFjZSA6IFBUUkFDRV9HRVRGUFhSRUdTIGZhaWxlZCwgZXJybm8gPSAlZCIsCisJCSAgICAgIGVycm5vKTsKIAogCWhhdmVfZnB4X3JlZ3MgPSAwOwotCWlmKGVyciAhPSBFSU8pCi0JCXBhbmljKCJjaGVja19wdHJhY2UgOiBQVFJBQ0VfR0VURlBYUkVHUyBmYWlsZWQsIGVycm5vID0gJWQiLAotCQkgICAgICBlcnIpOwogCiAJZXJyID0gcHRyYWNlKFBUUkFDRV9HRVRGUFJFR1MsIHBpZCwgMCwgZXhlY19mcF9yZWdzKTsKIAlpZihlcnIpCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3V0aWwvTWFrZWZpbGUgYi9hcmNoL3VtL29zLUxpbnV4L3V0aWwvTWFrZWZpbGUKaW5kZXggZmIwMGRkZi4uOTc3OGFlZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC91dGlsL01ha2VmaWxlCisrKyBiL2FyY2gvdW0vb3MtTGludXgvdXRpbC9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKIGhvc3Rwcm9ncy15CQk6PSBta191c2VyX2NvbnN0YW50cwogYWx3YXlzCQkJOj0gJChob3N0cHJvZ3MteSkKIAotbWtfdXNlcl9jb25zdGFudHMtb2Jqcwk6PSBta191c2VyX2NvbnN0YW50cy5vCitIT1NUQ0ZMQUdTX21rX3VzZXJfY29uc3RhbnRzLm8gOj0gLUkkKG9ianRyZWUpL2FyY2gvdW0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdXRpbC9ta191c2VyX2NvbnN0YW50cy5jIGIvYXJjaC91bS9vcy1MaW51eC91dGlsL21rX3VzZXJfY29uc3RhbnRzLmMKaW5kZXggMDkzMzUxOC4uNDgzOGYzMCAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC91dGlsL21rX3VzZXJfY29uc3RhbnRzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC91dGlsL21rX3VzZXJfY29uc3RhbnRzLmMKQEAgLTEsMTEgKzEsNSBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0vKiBGb3Igc29tZSByZWFzb24sIHg4Nl82NCBub3doZXJlIGRlZmluZXMgdTY0IGFuZCB1MzIsIGV2ZW4gdGhvdWdoIHRoZXkncmUKLSAqIHVzZWQgdGhyb3VnaG91dCB0aGUgaGVhZGVycy4KLSAqLwotdHlwZWRlZiBfX3U2NCB1NjQ7Ci10eXBlZGVmIF9fdTMyIHUzMjsKLSNpbmNsdWRlIDxhc20vdXNlci5oPgorI2luY2x1ZGUgPHVzZXItb2Zmc2V0cy5oPgogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CkBAIC0yMCw3ICsxNCw3IEBACiAgICAqIHg4Nl82NCAoMjE2IHZzIDE2OCBieXRlcykuICB1c2VyX3JlZ3Nfc3RydWN0IGlzIHRoZSBjb3JyZWN0IHNpemUgb24KICAgICogYm90aCB4ODZfNjQgYW5kIGkzODYuCiAgICAqLwotICBwcmludGYoIiNkZWZpbmUgVU1fRlJBTUVfU0laRSAlZFxuIiwgKGludCkgc2l6ZW9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSk7CisgIHByaW50ZigiI2RlZmluZSBVTV9GUkFNRV9TSVpFICVkXG4iLCBfX1VNX0ZSQU1FX1NJWkUpOwogCiAgIHByaW50ZigiXG4iKTsKICAgcHJpbnRmKCIjZW5kaWZcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzIGIvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCmluZGV4IDE0M2Y2ZmUuLjBiMjQ5MTggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcworKysgYi9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKQEAgLTIsMTIgKzIsMjcgQEAKICMgYXJjaC91bTogR2VuZXJpYyBkZWZpbml0aW9ucwogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVVNFUl9TSU5HTEVfT0JKUyA9ICQoZm9yZWFjaCBmLCQocGF0c3Vic3QgJS5vLCUsJChvYmoteSkgJChvYmotbSkpLCQoJChmKS1vYmpzKSkKLVVTRVJfT0JKUyArPSAkKGZpbHRlciAlX3VzZXIubywkKG9iai15KSAkKG9iai1tKSAkKFVTRVJfU0lOR0xFX09CSlMpKQotCitVU0VSX1NJTkdMRV9PQkpTIDo9IFwKKwkkKGZvcmVhY2ggZiwkKHBhdHN1YnN0ICUubywlLCQob2JqLXkpICQob2JqLW0pKSwkKCQoZiktb2JqcykpCitVU0VSX09CSlMgKz0gJChmaWx0ZXIgJV91c2VyLm8sJChvYmoteSkgJChvYmotbSkgICQoVVNFUl9TSU5HTEVfT0JKUykpCiBVU0VSX09CSlMgOj0gJChmb3JlYWNoIGZpbGUsJChVU0VSX09CSlMpLCQob2JqKS8kKGZpbGUpKQogCi0kKFVTRVJfT0JKUyk6IGNfZmxhZ3MgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChVU0VSX0NGTEFHUykgJChDRkxBR1NfJChub3RkaXIgJEApKQorJChVU0VSX09CSlMpIDogY19mbGFncyA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKFVTRVJfQ0ZMQUdTKSBcCisJJChDRkxBR1NfJChub3RkaXIgJEApKQogCiBxdWlldF9jbWRfbWFrZV9saW5rID0gU1lNTElOSyAkQAotY21kX21ha2VfbGluayAgICAgICA9IHJtIC1mICRAOyBsbiAtc2YgJChzcmN0cmVlKS9hcmNoLyQoU1VCQVJDSCkvJCgkKG5vdGRpciAkQCktZGlyKS8kKG5vdGRpciAkQCkgJEAKK2NtZF9tYWtlX2xpbmsgICAgICAgPSBsbiAtc2YgJChzcmN0cmVlKS9hcmNoLyQoU1VCQVJDSCkvJCgkKG5vdGRpciAkQCktZGlyKS8kKG5vdGRpciAkQCkgJEAKKworIyB0aGlzIG5lZWRzIHRvIGJlIGJlZm9yZSB0aGUgZm9yZWFjaCwgYmVjYXVzZSB0YXJnZXRzIGRvZXMgbm90IGFjY2VwdAorIyBjb21wbGV0ZSBwYXRocyBsaWtlICQob2JqKS8kKGYpLiBUbyBtYWtlIHN1cmUgdGhpcyB3b3JrcywgdXNlIGEgOj0gYXNzaWdubWVudCwKKyMgb3Igd2Ugd2lsbCBnZXQgJChvYmopLyQoZikgaW4gdGhlICJ0YXJnZXRzIiB2YWx1ZS4KKyMgQWxzbywgdGhpcyBmb3JjZXMgeW91IHRvIHVzZSB0aGUgOj0gc3ludGF4IHdoZW4gYXNzaWduaW5nIHRvIHRhcmdldHMuCisjIE90aGVyd2lzZSB0aGUgbGluZSBiZWxvdyB3aWxsIGNhdXNlIGFuIGluZmluaXRlIGxvb3AgKGlmIHlvdSBkb24ndCBrbm93IHdoeSwKKyMganVzdCBkbyBpdCkuCisKK3RhcmdldHMgOj0gJCh0YXJnZXRzKSAkKFNZTUxJTktTKQorCitTWU1MSU5LUyA6PSAkKGZvcmVhY2ggZiwkKFNZTUxJTktTKSwkKG9iaikvJChmKSkKKworJChTWU1MSU5LUyk6IEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsbWFrZV9saW5rKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZSBiL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKaW5kZXggNzFiNDdlNi4uZmNkNjdjMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCkBAIC0xLDI5ICsxLDE5IEBACiBvYmoteSA9IGJpdG9wcy5vIGJ1Z3MubyBjaGVja3N1bS5vIGRlbGF5Lm8gZmF1bHQubyBrc3ltcy5vIGxkdC5vIHB0cmFjZS5vIFwKLQlwdHJhY2VfdXNlci5vIHNlbWFwaG9yZS5vIHNpZ25hbC5vIHNpZ2NvbnRleHQubyBzeXNjYWxscy5vIHN5c3JxLm8KKwlwdHJhY2VfdXNlci5vIHNlbWFwaG9yZS5vIHNpZ25hbC5vIHNpZ2NvbnRleHQubyBzeXNjYWxscy5vIHN5c3JxLm8gXAorCXN5c19jYWxsX3RhYmxlLm8KIAogb2JqLSQoQ09ORklHX0hJR0hNRU0pICs9IGhpZ2htZW0ubwogb2JqLSQoQ09ORklHX01PRFVMRVMpICs9IG1vZHVsZS5vCiAKIFVTRVJfT0JKUyA6PSBidWdzLm8gcHRyYWNlX3VzZXIubyBzaWdjb250ZXh0Lm8gZmF1bHQubwogCi1pbmNsdWRlIGFyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwotCiBTWU1MSU5LUyA9IGJpdG9wcy5jIHNlbWFwaG9yZS5jIGhpZ2htZW0uYyBtb2R1bGUuYwogCi0jIHRoaXMgbmVlZHMgdG8gYmUgYmVmb3JlIHRoZSBmb3JlYWNoLCBiZWNhdXNlIGNsZWFuLWZpbGVzIGRvZXMgbm90IGFjY2VwdAotIyBjb21wbGV0ZSBwYXRocyBsaWtlICQoc3JjKS8kZi4KLWNsZWFuLWZpbGVzIDo9ICQoU1lNTElOS1MpCi0KLXRhcmdldHMgKz0gJChTWU1MSU5LUykKLQotU1lNTElOS1MgOj0gJChmb3JlYWNoIGYsJChTWU1MSU5LUyksJChvYmopLyRmKQotCiBiaXRvcHMuYy1kaXIgPSBsaWIKIHNlbWFwaG9yZS5jLWRpciA9IGtlcm5lbAogaGlnaG1lbS5jLWRpciA9IG1tCiBtb2R1bGUuYy1kaXIgPSBrZXJuZWwKIAotJChTWU1MSU5LUyk6IEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsbWFrZV9saW5rKQotCiBzdWJkaXItIDo9IHV0aWwKKworaW5jbHVkZSBhcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvY2hlY2tzdW0uUyBiL2FyY2gvdW0vc3lzLWkzODYvY2hlY2tzdW0uUwppbmRleCBhMTExNzFmLi5kOThiMmZmIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L2NoZWNrc3VtLlMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9jaGVja3N1bS5TCkBAIC0zOCw3ICszOCw3IEBACiAJCQogLnRleHQKIC5hbGlnbiA0Ci0uZ2xvYmwgYXJjaF9jc3VtX3BhcnRpYWwJCQkJCQkJCQorLmdsb2JsIGNzdW1fcGFydGlhbAogCQkKICNpZm5kZWYgQ09ORklHX1g4Nl9VU0VfUFBST19DSEVDS1NVTQogCkBAIC00OSw3ICs0OSw3IEBACiAJICAgKiBGb3J0dW5hdGVseSwgaXQgaXMgZWFzeSB0byBjb252ZXJ0IDItYnl0ZSBhbGlnbm1lbnQgdG8gNC1ieXRlCiAJICAgKiBhbGlnbm1lbnQgZm9yIHRoZSB1bnJvbGxlZCBsb29wLgogCSAgICovCQkKLWFyY2hfY3N1bV9wYXJ0aWFsOgkKK2NzdW1fcGFydGlhbDoKIAlwdXNobCAlZXNpCiAJcHVzaGwgJWVieAogCW1vdmwgMjAoJWVzcCksJWVheAkjIEZ1bmN0aW9uIGFyZzogdW5zaWduZWQgaW50IHN1bQpAQCAtMTE5LDcgKzExOSw3IEBACiAKIC8qIFZlcnNpb24gZm9yIFBlbnRpdW1JSS9QUHJvICovCiAKLWFyY2hfY3N1bV9wYXJ0aWFsOgorY3N1bV9wYXJ0aWFsOgogCXB1c2hsICVlc2kKIAlwdXNobCAlZWJ4CiAJbW92bCAyMCglZXNwKSwlZWF4CSMgRnVuY3Rpb24gYXJnOiB1bnNpZ25lZCBpbnQgc3VtCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2RlbGF5LmMgYi9hcmNoL3VtL3N5cy1pMzg2L2RlbGF5LmMKaW5kZXggMjBkMzdkYi4uZTk4OTJlZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9kZWxheS5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvZGVsYXkuYwpAQCAtMSwzICsxLDYgQEAKKyNpbmNsdWRlICJsaW51eC9kZWxheS5oIgorI2luY2x1ZGUgImFzbS9wYXJhbS5oIgorCiB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyB0aW1lKQogewogCS8qIFN0b2xlbiBmcm9tIHRoZSBpMzg2IF9fbG9vcF9kZWxheSAqLwpAQCAtMTIsMyArMTUsMTggQEAKIAkJOiIwIiAodGltZSkpOwogfQogCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCit7CisJaW50IGksIG47CisKKwluID0gKGxvb3BzX3Blcl9qaWZmeSAqIEhaICogdXNlY3MpIC8gTUlMTElPTjsKKwlmb3IoaT0wO2k8bjtpKyspIDsKK30KKwordm9pZCBfX2NvbnN0X3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQoreworCWludCBpLCBuOworCisJbiA9IChsb29wc19wZXJfamlmZnkgKiBIWiAqIHVzZWNzKSAvIE1JTExJT047CisJZm9yKGk9MDtpPG47aSsrKSA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2tlcm5lbC1vZmZzZXRzLmMgYi9hcmNoL3VtL3N5cy1pMzg2L2tlcm5lbC1vZmZzZXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4ZWNkMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vc3lzLWkzODYva2VybmVsLW9mZnNldHMuYwpAQCAtMCwwICsxLDI1IEBACisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBERUZJTkUoc3ltLCB2YWwpIFwKKyAgICAgICAgYXNtIHZvbGF0aWxlKCJcbi0+IiAjc3ltICIgJTAgIiAjdmFsIDogOiAiaSIgKHZhbCkpCisKKyNkZWZpbmUgU1RSKHgpICN4CisjZGVmaW5lIERFRklORV9TVFIoc3ltLCB2YWwpIGFzbSB2b2xhdGlsZSgiXG4tPiIgI3N5bSAiICIgU1RSKHZhbCkgIiAiICN2YWw6IDogKQorCisjZGVmaW5lIEJMQU5LKCkgYXNtIHZvbGF0aWxlKCJcbi0+IiA6IDogKQorCisjZGVmaW5lIE9GRlNFVChzeW0sIHN0ciwgbWVtKSBcCisJREVGSU5FKHN5bSwgb2Zmc2V0b2Yoc3RydWN0IHN0ciwgbWVtKSk7CisKK3ZvaWQgZm9vKHZvaWQpCit7CisJT0ZGU0VUKFRBU0tfREVCVUdSRUdTLCB0YXNrX3N0cnVjdCwgdGhyZWFkLmFyY2guZGVidWdyZWdzKTsKKyNpZmRlZiBDT05GSUdfTU9ERV9UVAorCU9GRlNFVChUQVNLX0VYVEVSTl9QSUQsIHRhc2tfc3RydWN0LCB0aHJlYWQubW9kZS50dC5leHRlcm5fcGlkKTsKKyNlbmRpZgorI2luY2x1ZGUgPGNvbW1vbi1vZmZzZXRzLmg+Cit9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMgYi9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMKaW5kZXggNzRmNzBhMS4uZGI1MjRhYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYva3N5bXMuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMKQEAgLTIsNiArMiw3IEBACiAjaW5jbHVkZSAibGludXgvaW42LmgiCiAjaW5jbHVkZSAibGludXgvcndzZW0uaCIKICNpbmNsdWRlICJhc20vYnl0ZW9yZGVyLmgiCisjaW5jbHVkZSAiYXNtL2RlbGF5LmgiCiAjaW5jbHVkZSAiYXNtL3NlbWFwaG9yZS5oIgogI2luY2x1ZGUgImFzbS91YWNjZXNzLmgiCiAjaW5jbHVkZSAiYXNtL2NoZWNrc3VtLmgiCkBAIC0xMyw1ICsxNCw4IEBACiBFWFBPUlRfU1lNQk9MKF9fdXBfd2FrZXVwKTsKIAogLyogTmV0d29ya2luZyBoZWxwZXIgcm91dGluZXMuICovCi1FWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X2Zyb20pOwotRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weV90byk7CitFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CisKKy8qIGRlbGF5IGNvcmUgZnVuY3Rpb25zICovCitFWFBPUlRfU1lNQk9MKF9fY29uc3RfdWRlbGF5KTsKK0VYUE9SVF9TWU1CT0woX191ZGVsYXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9sZHQuYyBiL2FyY2gvdW0vc3lzLWkzODYvbGR0LmMKaW5kZXggMzFiY2IyZi4uZGM3NTViMCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9sZHQuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L2xkdC5jCkBAIC0yNSw3ICsyNSw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NT0RFX1NLQVMKLWV4dGVybiBpbnQgdXNlcnNwYWNlX3BpZDsKK2V4dGVybiBpbnQgdXNlcnNwYWNlX3BpZFtdOwogCiAjaW5jbHVkZSAic2thc19wdHJhY2UuaCIKIApAQCAtNTYsNyArNTYsOCBAQAogCWxkdCA9ICgoc3RydWN0IHB0cmFjZV9sZHQpIHsgLmZ1bmMJPSBmdW5jLAogCQkJCSAgICAgLnB0cgk9IGJ1ZiwKIAkJCQkgICAgIC5ieXRlY291bnQgPSBieXRlY291bnQgfSk7Ci0JcmVzID0gcHRyYWNlKFBUUkFDRV9MRFQsIHVzZXJzcGFjZV9waWQsIDAsICh1bnNpZ25lZCBsb25nKSAmbGR0KTsKKyN3YXJuaW5nIE5lZWQgdG8gbG9vayB1cCB1c2Vyc3BhY2VfcGlkIGJ5IGNwdQorCXJlcyA9IHB0cmFjZShQVFJBQ0VfTERULCB1c2Vyc3BhY2VfcGlkWzBdLCAwLCAodW5zaWduZWQgbG9uZykgJmxkdCk7CiAJaWYocmVzIDwgMCkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMgYi9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jCmluZGV4IDc2YmE4NzIuLjAzOTEzY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zaWduYWwuYwpAQCAtNDcsOSArNDcsNiBAQAogCVJFR1NfQ1MocmVncy0+cmVncy5za2FzLnJlZ3MpID0gc2MuY3M7CiAJUkVHU19FRkxBR1MocmVncy0+cmVncy5za2FzLnJlZ3MpID0gc2MuZWZsYWdzOwogCVJFR1NfU1MocmVncy0+cmVncy5za2FzLnJlZ3MpID0gc2Muc3M7Ci0JcmVncy0+cmVncy5za2FzLmZhdWx0X2FkZHIgPSBzYy5jcjI7Ci0JcmVncy0+cmVncy5za2FzLmZhdWx0X3R5cGUgPSBGQVVMVF9XUklURShzYy5lcnIpOwotCXJlZ3MtPnJlZ3Muc2thcy50cmFwX3R5cGUgPSBzYy50cmFwbm87CiAKIAllcnIgPSByZXN0b3JlX2ZwX3JlZ2lzdGVycyh1c2Vyc3BhY2VfcGlkWzBdLCBmcHJlZ3MpOwogCWlmKGVyciA8IDApewpAQCAtNjIsMTEgKzU5LDExIEBACiB9CiAKIGludCBjb3B5X3NjX3RvX3VzZXJfc2thcyhzdHJ1Y3Qgc2lnY29udGV4dCAqdG8sIHN0cnVjdCBfZnBzdGF0ZSAqdG9fZnAsCi0JCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkciwKLQkJCSBpbnQgZmF1bHRfdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKICAgCXN0cnVjdCBzaWdjb250ZXh0IHNjOwogCXVuc2lnbmVkIGxvbmcgZnByZWdzW0hPU1RfRlBfU0laRV07CisJc3RydWN0IGZhdWx0aW5mbyAqIGZpID0gJmN1cnJlbnQtPnRocmVhZC5hcmNoLmZhdWx0aW5mbzsKIAlpbnQgZXJyOwogCiAJc2MuZ3MgPSBSRUdTX0dTKHJlZ3MtPnJlZ3Muc2thcy5yZWdzKTsKQEAgLTg2LDkgKzgzLDkgQEAKIAlzYy5lZmxhZ3MgPSBSRUdTX0VGTEFHUyhyZWdzLT5yZWdzLnNrYXMucmVncyk7CiAJc2MuZXNwX2F0X3NpZ25hbCA9IHJlZ3MtPnJlZ3Muc2thcy5yZWdzW1VFU1BdOwogCXNjLnNzID0gcmVncy0+cmVncy5za2FzLnJlZ3NbU1NdOwotCXNjLmNyMiA9IGZhdWx0X2FkZHI7Ci0Jc2MuZXJyID0gVE9fU0NfRVJSKGZhdWx0X3R5cGUpOwotCXNjLnRyYXBubyA9IHJlZ3MtPnJlZ3Muc2thcy50cmFwX3R5cGU7CisgICAgICAgIHNjLmNyMiA9IGZpLT5jcjI7CisgICAgICAgIHNjLmVyciA9IGZpLT5lcnJvcl9jb2RlOworICAgICAgICBzYy50cmFwbm8gPSBmaS0+dHJhcF9ubzsKIAogCWVyciA9IHNhdmVfZnBfcmVnaXN0ZXJzKHVzZXJzcGFjZV9waWRbMF0sIGZwcmVncyk7CiAJaWYoZXJyIDwgMCl7CkBAIC0xNjcsOSArMTY0LDcgQEAKIHsKIAlyZXR1cm4oQ0hPT1NFX01PREUoY29weV9zY190b191c2VyX3R0KHRvLCBmcCwgVVBUX1NDKCZmcm9tLT5yZWdzKSwKIAkJCQkJICAgICAgc2l6ZW9mKCpmcCkpLAotCQkJICAgY29weV9zY190b191c2VyX3NrYXModG8sIGZwLCBmcm9tLAotCQkJCQkJY3VycmVudC0+dGhyZWFkLmNyMiwKLQkJCQkJCWN1cnJlbnQtPnRocmVhZC5lcnIpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X3NjX3RvX3VzZXJfc2thcyh0bywgZnAsIGZyb20pKSk7CiB9CiAKIHN0YXRpYyBpbnQgY29weV91Y29udGV4dF90b191c2VyKHN0cnVjdCB1Y29udGV4dCAqdWMsIHN0cnVjdCBfZnBzdGF0ZSAqZnAsCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3N5c19jYWxsX3RhYmxlLlMgYi9hcmNoL3VtL3N5cy1pMzg2L3N5c19jYWxsX3RhYmxlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3NWMyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc3lzX2NhbGxfdGFibGUuUwpAQCAtMCwwICsxLDE2IEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorLyogU3RlYWwgaTM4NiBzeXNjYWxsIHRhYmxlIGZvciBvdXIgcHVycG9zZXMsIGJ1dCB3aXRoIHNvbWUgc2xpZ2h0IGNoYW5nZXMuKi8KKworI2RlZmluZSBzeXNfaW9wbCBzeXNfbmlfc3lzY2FsbAorI2RlZmluZSBzeXNfaW9wZXJtIHN5c19uaV9zeXNjYWxsCisKKyNkZWZpbmUgc3lzX3ZtODZvbGQgc3lzX25pX3N5c2NhbGwKKyNkZWZpbmUgc3lzX3ZtODYgc3lzX25pX3N5c2NhbGwKKyNkZWZpbmUgc3lzX3NldF90aHJlYWRfYXJlYSBzeXNfbmlfc3lzY2FsbAorI2RlZmluZSBzeXNfZ2V0X3RocmVhZF9hcmVhIHN5c19uaV9zeXNjYWxsCisKKyNkZWZpbmUgc3lzX3N0aW1lIHVtX3N0aW1lCisjZGVmaW5lIHN5c190aW1lIHVtX3RpbWUKKyNkZWZpbmUgb2xkX21tYXAgb2xkX21tYXBfaTM4NgorCisjaW5jbHVkZSAiLi4vLi4vaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni91c2VyLW9mZnNldHMuYyBiL2FyY2gvdW0vc3lzLWkzODYvdXNlci1vZmZzZXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlYWFiYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvdXNlci1vZmZzZXRzLmMKQEAgLTAsMCArMSw2OSBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisKKyNkZWZpbmUgREVGSU5FKHN5bSwgdmFsKSBcCisgICAgICAgIGFzbSB2b2xhdGlsZSgiXG4tPiIgI3N5bSAiICUwICIgI3ZhbCA6IDogImkiICh2YWwpKQorCisjZGVmaW5lIE9GRlNFVChzeW0sIHN0ciwgbWVtKSBcCisJREVGSU5FKHN5bSwgb2Zmc2V0b2Yoc3RydWN0IHN0ciwgbWVtKSk7CisKK3ZvaWQgZm9vKHZvaWQpCit7CisJT0ZGU0VUKFNDX0lQLCBzaWdjb250ZXh0LCBlaXApOworCU9GRlNFVChTQ19TUCwgc2lnY29udGV4dCwgZXNwKTsKKwlPRkZTRVQoU0NfRlMsIHNpZ2NvbnRleHQsIGZzKTsKKwlPRkZTRVQoU0NfR1MsIHNpZ2NvbnRleHQsIGdzKTsKKwlPRkZTRVQoU0NfRFMsIHNpZ2NvbnRleHQsIGRzKTsKKwlPRkZTRVQoU0NfRVMsIHNpZ2NvbnRleHQsIGVzKTsKKwlPRkZTRVQoU0NfU1MsIHNpZ2NvbnRleHQsIHNzKTsKKwlPRkZTRVQoU0NfQ1MsIHNpZ2NvbnRleHQsIGNzKTsKKwlPRkZTRVQoU0NfRUZMQUdTLCBzaWdjb250ZXh0LCBlZmxhZ3MpOworCU9GRlNFVChTQ19FQVgsIHNpZ2NvbnRleHQsIGVheCk7CisJT0ZGU0VUKFNDX0VCWCwgc2lnY29udGV4dCwgZWJ4KTsKKwlPRkZTRVQoU0NfRUNYLCBzaWdjb250ZXh0LCBlY3gpOworCU9GRlNFVChTQ19FRFgsIHNpZ2NvbnRleHQsIGVkeCk7CisJT0ZGU0VUKFNDX0VESSwgc2lnY29udGV4dCwgZWRpKTsKKwlPRkZTRVQoU0NfRVNJLCBzaWdjb250ZXh0LCBlc2kpOworCU9GRlNFVChTQ19FQlAsIHNpZ2NvbnRleHQsIGVicCk7CisJT0ZGU0VUKFNDX1RSQVBOTywgc2lnY29udGV4dCwgdHJhcG5vKTsKKwlPRkZTRVQoU0NfRVJSLCBzaWdjb250ZXh0LCBlcnIpOworCU9GRlNFVChTQ19DUjIsIHNpZ2NvbnRleHQsIGNyMik7CisJT0ZGU0VUKFNDX0ZQU1RBVEUsIHNpZ2NvbnRleHQsIGZwc3RhdGUpOworCU9GRlNFVChTQ19TSUdNQVNLLCBzaWdjb250ZXh0LCBvbGRtYXNrKTsKKwlPRkZTRVQoU0NfRlBfQ1csIF9mcHN0YXRlLCBjdyk7CisJT0ZGU0VUKFNDX0ZQX1NXLCBfZnBzdGF0ZSwgc3cpOworCU9GRlNFVChTQ19GUF9UQUcsIF9mcHN0YXRlLCB0YWcpOworCU9GRlNFVChTQ19GUF9JUE9GRiwgX2Zwc3RhdGUsIGlwb2ZmKTsKKwlPRkZTRVQoU0NfRlBfQ1NTRUwsIF9mcHN0YXRlLCBjc3NlbCk7CisJT0ZGU0VUKFNDX0ZQX0RBVEFPRkYsIF9mcHN0YXRlLCBkYXRhb2ZmKTsKKwlPRkZTRVQoU0NfRlBfREFUQVNFTCwgX2Zwc3RhdGUsIGRhdGFzZWwpOworCU9GRlNFVChTQ19GUF9TVCwgX2Zwc3RhdGUsIF9zdCk7CisJT0ZGU0VUKFNDX0ZYU1JfRU5WLCBfZnBzdGF0ZSwgX2Z4c3JfZW52KTsKKworCURFRklORShIT1NUX0ZSQU1FX1NJWkUsIEZSQU1FX1NJWkUpOworCURFRklORShIT1NUX0ZQX1NJWkUsCisJCXNpemVvZihzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCkgLyBzaXplb2YodW5zaWduZWQgbG9uZykpOworCURFRklORShIT1NUX1hGUF9TSVpFLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKworCURFRklORShIT1NUX0lQLCBFSVApOworCURFRklORShIT1NUX1NQLCBVRVNQKTsKKwlERUZJTkUoSE9TVF9FRkxBR1MsIEVGTCk7CisJREVGSU5FKEhPU1RfRUFYLCBFQVgpOworCURFRklORShIT1NUX0VCWCwgRUJYKTsKKwlERUZJTkUoSE9TVF9FQ1gsIEVDWCk7CisJREVGSU5FKEhPU1RfRURYLCBFRFgpOworCURFRklORShIT1NUX0VTSSwgRVNJKTsKKwlERUZJTkUoSE9TVF9FREksIEVESSk7CisJREVGSU5FKEhPU1RfRUJQLCBFQlApOworCURFRklORShIT1NUX0NTLCBDUyk7CisJREVGSU5FKEhPU1RfU1MsIFNTKTsKKwlERUZJTkUoSE9TVF9EUywgRFMpOworCURFRklORShIT1NUX0ZTLCBGUyk7CisJREVGSU5FKEhPU1RfRVMsIEVTKTsKKwlERUZJTkUoSE9TVF9HUywgR1MpOworCURFRklORShfX1VNX0ZSQU1FX1NJWkUsIHNpemVvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni91dGlsL01ha2VmaWxlIGIvYXJjaC91bS9zeXMtaTM4Ni91dGlsL01ha2VmaWxlCmluZGV4IDM0ODYwZjkuLmJmNjFhZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvdXRpbC9NYWtlZmlsZQorKysgYi9hcmNoL3VtL3N5cy1pMzg2L3V0aWwvTWFrZWZpbGUKQEAgLTEsOCArMSw1IEBACi0KIGhvc3Rwcm9ncy15CTo9IG1rX3NjIG1rX3RocmVhZAogYWx3YXlzCQk6PSAkKGhvc3Rwcm9ncy15KQogCi1ta190aHJlYWQtb2Jqcwk6PSBta190aHJlYWRfa2Vybi5vIG1rX3RocmVhZF91c2VyLm8KLQotSE9TVENGTEFHU19ta190aHJlYWRfa2Vybi5vCTo9ICQoQ0ZMQUdTKSAkKENQUEZMQUdTKQotSE9TVENGTEFHU19ta190aHJlYWRfdXNlci5vCTo9ICQoVVNFUl9DRkxBR1MpCitIT1NUQ0ZMQUdTX21rX3NjLm8gOj0gLUkkKG9ianRyZWUpL2FyY2gvdW0KK0hPU1RDRkxBR1NfbWtfdGhyZWFkLm8gOj0gLUkkKG9ianRyZWUpL2FyY2gvdW0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvdXRpbC9ta19zYy5jIGIvYXJjaC91bS9zeXMtaTM4Ni91dGlsL21rX3NjLmMKaW5kZXggODVjYmQzMC4uMDRjMGQ3MyAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni91dGlsL21rX3NjLmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni91dGlsL21rX3NjLmMKQEAgLTEsNTIgKzEsNTEgQEAKICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPHVzZXItb2Zmc2V0cy5oPgogCiAjZGVmaW5lIFNDX09GRlNFVChuYW1lLCBmaWVsZCkgXAotICBwcmludGYoIiNkZWZpbmUgIiBuYW1lICIoc2MpICooKHVuc2lnbmVkIGxvbmcgKikgJigoKGNoYXIgKikgKHNjKSlbJWRdKSlcbiIsXAotCSBvZmZzZXRvZihzdHJ1Y3Qgc2lnY29udGV4dCwgZmllbGQpKQorICBwcmludGYoIiNkZWZpbmUgIiAjbmFtZSAiKHNjKSAqKCh1bnNpZ25lZCBsb25nICopICYoKChjaGFyICopIChzYykpWyVkXSkpXG4iLFwKKwkgbmFtZSkKIAogI2RlZmluZSBTQ19GUF9PRkZTRVQobmFtZSwgZmllbGQpIFwKLSAgcHJpbnRmKCIjZGVmaW5lICIgbmFtZSBcCisgIHByaW50ZigiI2RlZmluZSAiICNuYW1lIFwKIAkgIihzYykgKigodW5zaWduZWQgbG9uZyAqKSAmKCgoY2hhciAqKSAoU0NfRlBTVEFURShzYykpKVslZF0pKVxuIixcCi0JIG9mZnNldG9mKHN0cnVjdCBfZnBzdGF0ZSwgZmllbGQpKQorCSBuYW1lKQogCiAjZGVmaW5lIFNDX0ZQX09GRlNFVF9QVFIobmFtZSwgZmllbGQsIHR5cGUpIFwKLSAgcHJpbnRmKCIjZGVmaW5lICIgbmFtZSBcCisgIHByaW50ZigiI2RlZmluZSAiICNuYW1lIFwKIAkgIihzYykgKCgiIHR5cGUgIiAqKSAmKCgoY2hhciAqKSAoU0NfRlBTVEFURShzYykpKVslZF0pKVxuIixcCi0JIG9mZnNldG9mKHN0cnVjdCBfZnBzdGF0ZSwgZmllbGQpKQorCSBuYW1lKQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7Ci0gIFNDX09GRlNFVCgiU0NfSVAiLCBlaXApOwotICBTQ19PRkZTRVQoIlNDX1NQIiwgZXNwKTsKLSAgU0NfT0ZGU0VUKCJTQ19GUyIsIGZzKTsKLSAgU0NfT0ZGU0VUKCJTQ19HUyIsIGdzKTsKLSAgU0NfT0ZGU0VUKCJTQ19EUyIsIGRzKTsKLSAgU0NfT0ZGU0VUKCJTQ19FUyIsIGVzKTsKLSAgU0NfT0ZGU0VUKCJTQ19TUyIsIHNzKTsKLSAgU0NfT0ZGU0VUKCJTQ19DUyIsIGNzKTsKLSAgU0NfT0ZGU0VUKCJTQ19FRkxBR1MiLCBlZmxhZ3MpOwotICBTQ19PRkZTRVQoIlNDX0VBWCIsIGVheCk7Ci0gIFNDX09GRlNFVCgiU0NfRUJYIiwgZWJ4KTsKLSAgU0NfT0ZGU0VUKCJTQ19FQ1giLCBlY3gpOwotICBTQ19PRkZTRVQoIlNDX0VEWCIsIGVkeCk7Ci0gIFNDX09GRlNFVCgiU0NfRURJIiwgZWRpKTsKLSAgU0NfT0ZGU0VUKCJTQ19FU0kiLCBlc2kpOwotICBTQ19PRkZTRVQoIlNDX0VCUCIsIGVicCk7Ci0gIFNDX09GRlNFVCgiU0NfVFJBUE5PIiwgdHJhcG5vKTsKLSAgU0NfT0ZGU0VUKCJTQ19FUlIiLCBlcnIpOwotICBTQ19PRkZTRVQoIlNDX0NSMiIsIGNyMik7Ci0gIFNDX09GRlNFVCgiU0NfRlBTVEFURSIsIGZwc3RhdGUpOwotICBTQ19PRkZTRVQoIlNDX1NJR01BU0siLCBvbGRtYXNrKTsKLSAgU0NfRlBfT0ZGU0VUKCJTQ19GUF9DVyIsIGN3KTsKLSAgU0NfRlBfT0ZGU0VUKCJTQ19GUF9TVyIsIHN3KTsKLSAgU0NfRlBfT0ZGU0VUKCJTQ19GUF9UQUciLCB0YWcpOwotICBTQ19GUF9PRkZTRVQoIlNDX0ZQX0lQT0ZGIiwgaXBvZmYpOwotICBTQ19GUF9PRkZTRVQoIlNDX0ZQX0NTU0VMIiwgY3NzZWwpOwotICBTQ19GUF9PRkZTRVQoIlNDX0ZQX0RBVEFPRkYiLCBkYXRhb2ZmKTsKLSAgU0NfRlBfT0ZGU0VUKCJTQ19GUF9EQVRBU0VMIiwgZGF0YXNlbCk7Ci0gIFNDX0ZQX09GRlNFVF9QVFIoIlNDX0ZQX1NUIiwgX3N0LCAic3RydWN0IF9mcHN0YXRlIik7Ci0gIFNDX0ZQX09GRlNFVF9QVFIoIlNDX0ZYU1JfRU5WIiwgX2Z4c3JfZW52LCAidm9pZCIpOworICBTQ19PRkZTRVQoU0NfSVAsIGVpcCk7CisgIFNDX09GRlNFVChTQ19TUCwgZXNwKTsKKyAgU0NfT0ZGU0VUKFNDX0ZTLCBmcyk7CisgIFNDX09GRlNFVChTQ19HUywgZ3MpOworICBTQ19PRkZTRVQoU0NfRFMsIGRzKTsKKyAgU0NfT0ZGU0VUKFNDX0VTLCBlcyk7CisgIFNDX09GRlNFVChTQ19TUywgc3MpOworICBTQ19PRkZTRVQoU0NfQ1MsIGNzKTsKKyAgU0NfT0ZGU0VUKFNDX0VGTEFHUywgZWZsYWdzKTsKKyAgU0NfT0ZGU0VUKFNDX0VBWCwgZWF4KTsKKyAgU0NfT0ZGU0VUKFNDX0VCWCwgZWJ4KTsKKyAgU0NfT0ZGU0VUKFNDX0VDWCwgZWN4KTsKKyAgU0NfT0ZGU0VUKFNDX0VEWCwgZWR4KTsKKyAgU0NfT0ZGU0VUKFNDX0VESSwgZWRpKTsKKyAgU0NfT0ZGU0VUKFNDX0VTSSwgZXNpKTsKKyAgU0NfT0ZGU0VUKFNDX0VCUCwgZWJwKTsKKyAgU0NfT0ZGU0VUKFNDX1RSQVBOTywgdHJhcG5vKTsKKyAgU0NfT0ZGU0VUKFNDX0VSUiwgZXJyKTsKKyAgU0NfT0ZGU0VUKFNDX0NSMiwgY3IyKTsKKyAgU0NfT0ZGU0VUKFNDX0ZQU1RBVEUsIGZwc3RhdGUpOworICBTQ19PRkZTRVQoU0NfU0lHTUFTSywgb2xkbWFzayk7CisgIFNDX0ZQX09GRlNFVChTQ19GUF9DVywgY3cpOworICBTQ19GUF9PRkZTRVQoU0NfRlBfU1csIHN3KTsKKyAgU0NfRlBfT0ZGU0VUKFNDX0ZQX1RBRywgdGFnKTsKKyAgU0NfRlBfT0ZGU0VUKFNDX0ZQX0lQT0ZGLCBpcG9mZik7CisgIFNDX0ZQX09GRlNFVChTQ19GUF9DU1NFTCwgY3NzZWwpOworICBTQ19GUF9PRkZTRVQoU0NfRlBfREFUQU9GRiwgZGF0YW9mZik7CisgIFNDX0ZQX09GRlNFVChTQ19GUF9EQVRBU0VMLCBkYXRhc2VsKTsKKyAgU0NfRlBfT0ZGU0VUX1BUUihTQ19GUF9TVCwgX3N0LCAic3RydWN0IF9mcHN0YXRlIik7CisgIFNDX0ZQX09GRlNFVF9QVFIoU0NfRlhTUl9FTlYsIF9meHNyX2VudiwgInZvaWQiKTsKICAgcmV0dXJuKDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni91dGlsL21rX3RocmVhZC5jIGIvYXJjaC91bS9zeXMtaTM4Ni91dGlsL21rX3RocmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NzBkMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy1pMzg2L3V0aWwvbWtfdGhyZWFkLmMKQEAgLTAsMCArMSwyMiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8a2VybmVsLW9mZnNldHMuaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBwcmludGYoIi8qXG4iKTsKKyAgcHJpbnRmKCIgKiBHZW5lcmF0ZWQgYnkgbWtfdGhyZWFkXG4iKTsKKyAgcHJpbnRmKCIgKi9cbiIpOworICBwcmludGYoIlxuIik7CisgIHByaW50ZigiI2lmbmRlZiBfX1VNX1RIUkVBRF9IXG4iKTsKKyAgcHJpbnRmKCIjZGVmaW5lIF9fVU1fVEhSRUFEX0hcbiIpOworICBwcmludGYoIlxuIik7CisgIHByaW50ZigiI2RlZmluZSBUQVNLX0RFQlVHUkVHUyh0YXNrKSAoKHVuc2lnbmVkIGxvbmcgKikgIgorCSAiJigoKGNoYXIgKikgKHRhc2spKVslZF0pKVxuIiwgVEFTS19ERUJVR1JFR1MpOworI2lmZGVmIFRBU0tfRVhURVJOX1BJRAorICBwcmludGYoIiNkZWZpbmUgVEFTS19FWFRFUk5fUElEKHRhc2spICooKGludCAqKSAmKCgoY2hhciAqKSAodGFzaykpWyVkXSkpXG4iLAorCSBUQVNLX0VYVEVSTl9QSUQpOworI2VuZGlmCisgIHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCIjZW5kaWZcbiIpOworICByZXR1cm4oMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3V0aWwvbWtfdGhyZWFkX2tlcm4uYyBiL2FyY2gvdW0vc3lzLWkzODYvdXRpbC9ta190aHJlYWRfa2Vybi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDhiMWNlLi4wMDAwMDAwCi0tLSBhL2FyY2gvdW0vc3lzLWkzODYvdXRpbC9ta190aHJlYWRfa2Vybi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotI2luY2x1ZGUgImxpbnV4L2NvbmZpZy5oIgotI2luY2x1ZGUgImxpbnV4L3N0ZGRlZi5oIgotI2luY2x1ZGUgImxpbnV4L3NjaGVkLmgiCi0KLWV4dGVybiB2b2lkIHByaW50X2hlYWQodm9pZCk7Ci1leHRlcm4gdm9pZCBwcmludF9jb25zdGFudF9wdHIoY2hhciAqbmFtZSwgaW50IHZhbHVlKTsKLWV4dGVybiB2b2lkIHByaW50X2NvbnN0YW50KGNoYXIgKm5hbWUsIGNoYXIgKnR5cGUsIGludCB2YWx1ZSk7Ci1leHRlcm4gdm9pZCBwcmludF90YWlsKHZvaWQpOwotCi0jZGVmaW5lIFRIUkVBRF9PRkZTRVQoZmllbGQpIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZpZWxkKQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gIHByaW50X2hlYWQoKTsKLSAgcHJpbnRfY29uc3RhbnRfcHRyKCJUQVNLX0RFQlVHUkVHUyIsIFRIUkVBRF9PRkZTRVQoYXJjaC5kZWJ1Z3JlZ3MpKTsKLSNpZmRlZiBDT05GSUdfTU9ERV9UVAotICBwcmludF9jb25zdGFudCgiVEFTS19FWFRFUk5fUElEIiwgImludCIsIFRIUkVBRF9PRkZTRVQobW9kZS50dC5leHRlcm5fcGlkKSk7Ci0jZW5kaWYKLSAgcHJpbnRfdGFpbCgpOwotICByZXR1cm4oMCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvdXRpbC9ta190aHJlYWRfdXNlci5jIGIvYXJjaC91bS9zeXMtaTM4Ni91dGlsL21rX3RocmVhZF91c2VyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MjBjZDYuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni91dGlsL21rX3RocmVhZF91c2VyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotdm9pZCBwcmludF9oZWFkKHZvaWQpCi17Ci0gIHByaW50ZigiLypcbiIpOwotICBwcmludGYoIiAqIEdlbmVyYXRlZCBieSBta190aHJlYWRcbiIpOwotICBwcmludGYoIiAqL1xuIik7Ci0gIHByaW50ZigiXG4iKTsKLSAgcHJpbnRmKCIjaWZuZGVmIF9fVU1fVEhSRUFEX0hcbiIpOwotICBwcmludGYoIiNkZWZpbmUgX19VTV9USFJFQURfSFxuIik7Ci0gIHByaW50ZigiXG4iKTsKLX0KLQotdm9pZCBwcmludF9jb25zdGFudF9wdHIoY2hhciAqbmFtZSwgaW50IHZhbHVlKQotewotICBwcmludGYoIiNkZWZpbmUgJXModGFzaykgKCh1bnNpZ25lZCBsb25nICopICIKLQkgIiYoKChjaGFyICopICh0YXNrKSlbJWRdKSlcbiIsIG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBwcmludF9jb25zdGFudChjaGFyICpuYW1lLCBjaGFyICp0eXBlLCBpbnQgdmFsdWUpCi17Ci0gIHByaW50ZigiI2RlZmluZSAlcyh0YXNrKSAqKCglcyAqKSAmKCgoY2hhciAqKSAodGFzaykpWyVkXSkpXG4iLCBuYW1lLCB0eXBlLCAKLQkgdmFsdWUpOwotfQotCi12b2lkIHByaW50X3RhaWwodm9pZCkKLXsKLSAgcHJpbnRmKCJcbiIpOwotICBwcmludGYoIiNlbmRpZlxuIik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKaW5kZXggMjEyOWUzMS4uM2Q3ZGE5MSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZQpAQCAtNCwyNCArNCwyMCBAQAogIyBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAjCiAKKyNYWFg6IHdoeSBpbnRvIGxpYi15PwogbGliLXkgPSBiaXRvcHMubyBidWdzLm8gY3N1bS1wYXJ0aWFsLm8gZGVsYXkubyBmYXVsdC5vIG1lbS5vIG1lbWNweS5vIFwKIAlwdHJhY2UubyBwdHJhY2VfdXNlci5vIHNlbWFwaG9yZS5vIHNpZ2NvbnRleHQubyBzaWduYWwubyBcCi0Jc3lzY2FsbHMubyBzeXNycS5vIHRodW5rLm8KKwlzeXNjYWxscy5vIHN5c3JxLm8gdGh1bmsubyBzeXNjYWxsX3RhYmxlLm8KKworb2JqLXkgOj0ga3N5bXMubworb2JqLSQoQ09ORklHX01PRFVMRVMpICs9IG1vZHVsZS5vIHVtX21vZHVsZS5vCiAKIFVTRVJfT0JKUyA6PSBwdHJhY2VfdXNlci5vIHNpZ2NvbnRleHQubwogCiBpbmNsdWRlIGFyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwogCiBTWU1MSU5LUyA9IGJpdG9wcy5jIGNzdW0tY29weS5TIGNzdW0tcGFydGlhbC5jIGNzdW0td3JhcHBlcnMuYyBtZW1jcHkuUyBcCi0Jc2VtYXBob3JlLmMgdGh1bmsuUwotCi0jIHRoaXMgbmVlZHMgdG8gYmUgYmVmb3JlIHRoZSBmb3JlYWNoLCBiZWNhdXNlIGNsZWFuLWZpbGVzIGRvZXMgbm90IGFjY2VwdAotIyBjb21wbGV0ZSBwYXRocyBsaWtlICQoc3JjKS8kZi4KLWNsZWFuLWZpbGVzIDo9ICQoU1lNTElOS1MpCi0KLXRhcmdldHMgKz0gJChTWU1MSU5LUykKLQotU1lNTElOS1MgOj0gJChmb3JlYWNoIGYsJChTWU1MSU5LUyksJChvYmopLyRmKQorCXNlbWFwaG9yZS5jIHRodW5rLlMgbW9kdWxlLmMKIAogYml0b3BzLmMtZGlyID0gbGliCiBjc3VtLWNvcHkuUy1kaXIgPSBsaWIKQEAgLTMwLDggKzI2LDggQEAKIG1lbWNweS5TLWRpciA9IGxpYgogc2VtYXBob3JlLmMtZGlyID0ga2VybmVsCiB0aHVuay5TLWRpciA9IGxpYgotCi0kKFNZTUxJTktTKTogRk9SQ0UKLQkkKGNhbGwgaWZfY2hhbmdlZCxtYWtlX2xpbmspCittb2R1bGUuYy1kaXIgPSBrZXJuZWwKIAogQ0ZMQUdTX2NzdW0tcGFydGlhbC5vIDo9IC1EY3N1bV9wYXJ0aWFsPWFyY2hfY3N1bV9wYXJ0aWFsCisKK3N1YmRpci0gOj0gdXRpbApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L2RlbGF5LmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvZGVsYXkuYwppbmRleCBmM2I1MTg3Li42NTEzMzJhIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvZGVsYXkuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvZGVsYXkuYwpAQCAtNSw3ICs1LDkgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKICAqLwogCisjaW5jbHVkZSAibGludXgvZGVsYXkuaCIKICNpbmNsdWRlICJhc20vcHJvY2Vzc29yLmgiCisjaW5jbHVkZSAiYXNtL3BhcmFtLmgiCiAKIHZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKQogewpAQCAtMTQsNiArMTYsMjIgQEAKIAlmb3IoaSA9IDA7IGkgPCBsb29wczsgaSsrKSA7CiB9CiAKK3ZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjcykKK3sKKwlpbnQgaSwgbjsKKworCW4gPSAobG9vcHNfcGVyX2ppZmZ5ICogSFogKiB1c2VjcykgLyBNSUxMSU9OOworCWZvcihpPTA7aTxuO2krKykgOworfQorCit2b2lkIF9fY29uc3RfdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCit7CisJaW50IGksIG47CisKKwluID0gKGxvb3BzX3Blcl9qaWZmeSAqIEhaICogdXNlY3MpIC8gTUlMTElPTjsKKwlmb3IoaT0wO2k8bjtpKyspIDsKK30KKwogLyoKICAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgogICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQva2VybmVsLW9mZnNldHMuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9rZXJuZWwtb2Zmc2V0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMGU4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQva2VybmVsLW9mZnNldHMuYwpAQCAtMCwwICsxLDI0IEBACisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBERUZJTkUoc3ltLCB2YWwpIFwKKyAgICAgICAgYXNtIHZvbGF0aWxlKCJcbi0+IiAjc3ltICIgJTAgIiAjdmFsIDogOiAiaSIgKHZhbCkpCisKKyNkZWZpbmUgREVGSU5FX1NUUjEoeCkgI3gKKyNkZWZpbmUgREVGSU5FX1NUUihzeW0sIHZhbCkgYXNtIHZvbGF0aWxlKCJcbi0+IiAjc3ltICIgIiBERUZJTkVfU1RSMSh2YWwpICIgIiAjdmFsOiA6ICkKKworI2RlZmluZSBCTEFOSygpIGFzbSB2b2xhdGlsZSgiXG4tPiIgOiA6ICkKKworI2RlZmluZSBPRkZTRVQoc3ltLCBzdHIsIG1lbSkgXAorCURFRklORShzeW0sIG9mZnNldG9mKHN0cnVjdCBzdHIsIG1lbSkpOworCit2b2lkIGZvbyh2b2lkKQoreworI2lmZGVmIENPTkZJR19NT0RFX1RUCisJT0ZGU0VUKFRBU0tfRVhURVJOX1BJRCwgdGFza19zdHJ1Y3QsIHRocmVhZC5tb2RlLnR0LmV4dGVybl9waWQpOworI2VuZGlmCisjaW5jbHVkZSA8Y29tbW9uLW9mZnNldHMuaD4KK30KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9rc3ltcy5jIGIvYXJjaC91bS9zeXMteDg2XzY0L2tzeW1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI3ZjBlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9rc3ltcy5jCkBAIC0wLDAgKzEsMjAgQEAKKyNpbmNsdWRlICJsaW51eC9tb2R1bGUuaCIKKyNpbmNsdWRlICJsaW51eC9pbjYuaCIKKyNpbmNsdWRlICJsaW51eC9yd3NlbS5oIgorI2luY2x1ZGUgImFzbS9ieXRlb3JkZXIuaCIKKyNpbmNsdWRlICJhc20vc2VtYXBob3JlLmgiCisjaW5jbHVkZSAiYXNtL3VhY2Nlc3MuaCIKKyNpbmNsdWRlICJhc20vY2hlY2tzdW0uaCIKKyNpbmNsdWRlICJhc20vZXJybm8uaCIKKworRVhQT1JUX1NZTUJPTChfX2Rvd25fZmFpbGVkKTsKK0VYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKTsKK0VYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF90cnlsb2NrKTsKK0VYUE9SVF9TWU1CT0woX191cF93YWtldXApOworCisvKlhYWDogd2UgbmVlZCB0aGVtIGJlY2F1c2UgdGhleSB3b3VsZCBiZSBleHBvcnRlZCBieSB4ODZfNjQgKi8KK0VYUE9SVF9TWU1CT0woX19tZW1jcHkpOworCisvKiBOZXR3b3JraW5nIGhlbHBlciByb3V0aW5lcy4gKi8KKy8qRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weV9mcm9tKTsKK0VYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsX2NvcHlfdG8pOyovCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvc2lnbmFsLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvc2lnbmFsLmMKaW5kZXggNWJjNWEwZC4uYjc0MDE3NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L3NpZ25hbC5jCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zaWduYWwuYwpAQCAtNTcsNyArNTcsNyBAQAogaW50IGNvcHlfc2NfdG9fdXNlcl9za2FzKHN0cnVjdCBzaWdjb250ZXh0ICp0bywgc3RydWN0IF9mcHN0YXRlICp0b19mcCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG1hc2spCiB7Ci0JdW5zaWduZWQgbG9uZyBlZmxhZ3M7CisgICAgICAgIHN0cnVjdCBmYXVsdGluZm8gKiBmaSA9ICZjdXJyZW50LT50aHJlYWQuYXJjaC5mYXVsdGluZm87CiAJaW50IGVyciA9IDA7CiAKIAllcnIgfD0gX19wdXRfdXNlcigwLCAmdG8tPmdzKTsKQEAgLTg0LDE0ICs4NCwxNiBAQAogCWVyciB8PSBQVVRSRUcocmVncywgUjE0LCB0bywgcjE0KTsKIAllcnIgfD0gUFVUUkVHKHJlZ3MsIFIxNSwgdG8sIHIxNSk7CiAJZXJyIHw9IFBVVFJFRyhyZWdzLCBDUywgdG8sIGNzKTsgLyogWFhYIHg4Nl82NCBkb2Vzbid0IGRvIHRoaXMgKi8KLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuZXJyLCAmdG8tPmVycik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sICZ0by0+dHJhcG5vKTsKKworICAgICAgICBlcnIgfD0gX19wdXRfdXNlcihmaS0+Y3IyLCAmdG8tPmNyMik7CisgICAgICAgIGVyciB8PSBfX3B1dF91c2VyKGZpLT5lcnJvcl9jb2RlLCAmdG8tPmVycik7CisgICAgICAgIGVyciB8PSBfX3B1dF91c2VyKGZpLT50cmFwX25vLCAmdG8tPnRyYXBubyk7CisKIAllcnIgfD0gUFVUUkVHKHJlZ3MsIFJJUCwgdG8sIHJpcCk7CiAJZXJyIHw9IFBVVFJFRyhyZWdzLCBFRkxBR1MsIHRvLCBlZmxhZ3MpOwogI3VuZGVmIFBVVFJFRwogCiAJZXJyIHw9IF9fcHV0X3VzZXIobWFzaywgJnRvLT5vbGRtYXNrKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuY3IyLCAmdG8tPmNyMik7CiAKIAlyZXR1cm4oZXJyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNjYWxsX3RhYmxlLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbF90YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YjJlODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbF90YWJsZS5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qIFN5c3RlbSBjYWxsIHRhYmxlIGZvciBVTUwveDg2LTY0LCBjb3BpZWQgZnJvbSBhcmNoL3g4Nl82NC9rZXJuZWwvc3lzY2FsbC5jCisgKiB3aXRoIHNvbWUgY2hhbmdlcyBmb3IgVU1MLiAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNkZWZpbmUgX19OT19TVFVCUworCisvKiBCZWxvdyB5b3UgY2FuIHNlZSwgaW4gdGVybXMgb2YgI2RlZmluZSdzLCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgeDg2LTY0CisgKiBhbmQgdGhlIFVNTCBzeXNjYWxsIHRhYmxlLiAqLworCisvKiBOb3QgZ29pbmcgdG8gYmUgaW1wbGVtZW50ZWQgYnkgVU1MLCBzaW5jZSB3ZSBoYXZlIG5vIGhhcmR3YXJlLiAqLworI2RlZmluZSBzdHViX2lvcGwgc3lzX25pX3N5c2NhbGwKKyNkZWZpbmUgc3lzX2lvcGVybSBzeXNfbmlfc3lzY2FsbAorCisvKiBUaGUgVU1MIFRMUyBwcm9ibGVtLiBOb3RlIHRoYXQgeDg2XzY0IGRvZXMgbm90IGltcGxlbWVudCB0aGlzLCBzbyB0aGUgYmVsb3cKKyAqIGlzIG5lZWRlZCBvbmx5IGZvciB0aGUgaWEzMiBjb21wYXRpYmlsaXR5LiAqLworLyojZGVmaW5lIHN5c19zZXRfdGhyZWFkX2FyZWEgc3lzX25pX3N5c2NhbGwKKyNkZWZpbmUgc3lzX2dldF90aHJlYWRfYXJlYSBzeXNfbmlfc3lzY2FsbCovCisKKy8qIEZvciBfX05SX3RpbWUuIFRoZSB4ODYtNjQgbmFtZSBob3BlZnVsbHkgd2lsbCBjaGFuZ2UgZnJvbSBzeXNfdGltZTY0IHRvCisgKiBzeXNfdGltZSAoc2luY2UgdGhlIGN1cnJlbnQgc2l0dWF0aW9uIGlzIGJvZ3VzKS4gSSd2ZSBzZW50IGEgcGF0Y2ggdG8gY2xlYW51cAorICogdGhpcy4gUmVtb3ZlIGJlbG93IHRoZSBvYnNvbGV0ZWQgbGluZS4gKi8KKyNkZWZpbmUgc3lzX3RpbWU2NCB1bV90aW1lCisjZGVmaW5lIHN5c190aW1lIHVtX3RpbWUKKworLyogT24gVU1MIHdlIGNhbGwgaXQgdGhpcyB3YXkgKCJvbGQiIG1lYW5zIGl0J3Mgbm90IG1tYXAyKSAqLworI2RlZmluZSBzeXNfbW1hcCBvbGRfbW1hcAorLyogT24geDg2LTY0IHN5c191bmFtZSBpcyBhY3R1YWxseSBzeXNfbmV3dW5hbWUgcGx1cyBhIGNvbXBhdGliaWxpdHkgdHJpY2suCisgKiBTZWUgYXJjaC94ODZfNjQva2VybmVsL3N5c194ODZfNjQuYyAqLworI2RlZmluZSBzeXNfdW5hbWUgc3lzX3VuYW1lNjQKKworI2RlZmluZSBzdHViX2Nsb25lIHN5c19jbG9uZQorI2RlZmluZSBzdHViX2Zvcmsgc3lzX2ZvcmsKKyNkZWZpbmUgc3R1Yl92Zm9yayBzeXNfdmZvcmsKKyNkZWZpbmUgc3R1Yl9leGVjdmUgc3lzX2V4ZWN2ZQorI2RlZmluZSBzdHViX3J0X3NpZ3N1c3BlbmQgc3lzX3J0X3NpZ3N1c3BlbmQKKyNkZWZpbmUgc3R1Yl9zaWdhbHRzdGFjayBzeXNfc2lnYWx0c3RhY2sKKyNkZWZpbmUgc3R1Yl9ydF9zaWdyZXR1cm4gc3lzX3J0X3NpZ3JldHVybgorCisjZGVmaW5lIF9fU1lTQ0FMTChuciwgc3ltKSBleHRlcm4gYXNtbGlua2FnZSB2b2lkIHN5bSh2b2lkKSA7CisjdW5kZWYgX0FTTV9YODZfNjRfVU5JU1REX0hfCisjaW5jbHVkZSA8YXNtLXg4Nl82NC91bmlzdGQuaD4KKworI3VuZGVmIF9fU1lTQ0FMTAorI2RlZmluZSBfX1NZU0NBTEwobnIsIHN5bSkgWyBuciBdID0gc3ltLAorI3VuZGVmIF9BU01fWDg2XzY0X1VOSVNURF9IXworCit0eXBlZGVmIHZvaWQgKCpzeXNfY2FsbF9wdHJfdCkodm9pZCk7CisKK2V4dGVybiB2b2lkIHN5c19uaV9zeXNjYWxsKHZvaWQpOworCitzeXNfY2FsbF9wdHJfdCBzeXNfY2FsbF90YWJsZVtfX05SX3N5c2NhbGxfbWF4KzFdIF9fY2FjaGVsaW5lX2FsaWduZWQgPSB7CisJLyogU21lbGxzIGxpa2UgYSBsaWtlIGEgY29tcGlsZXIgYnVnIC0tIGl0IGRvZXNuJ3Qgd29yayB3aGVuIHRoZSAmIGJlbG93IGlzIHJlbW92ZWQuICovCisJWzAgLi4uIF9fTlJfc3lzY2FsbF9tYXhdID0gJnN5c19uaV9zeXNjYWxsLAorI2luY2x1ZGUgPGFzbS14ODZfNjQvdW5pc3RkLmg+Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3N5c2NhbGxzLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYwppbmRleCA2ODIwNWEwLi4yYTU3NWVmIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYwpAQCAtNyw2ICs3LDggQEAKICNpbmNsdWRlICJsaW51eC9saW5rYWdlLmgiCiAjaW5jbHVkZSAibGludXgvc2xhYi5oIgogI2luY2x1ZGUgImxpbnV4L3NobS5oIgorI2luY2x1ZGUgImxpbnV4L3V0c25hbWUuaCIKKyNpbmNsdWRlICJsaW51eC9wZXJzb25hbGl0eS5oIgogI2luY2x1ZGUgImFzbS91YWNjZXNzLmgiCiAjZGVmaW5lIF9fRlJBTUVfT0ZGU0VUUwogI2luY2x1ZGUgImFzbS9wdHJhY2UuaCIKQEAgLTE0LDExICsxNiwxNSBAQAogI2luY2x1ZGUgImFzbS9wcmN0bC5oIiAvKiBYWFggVGhpcyBzaG91bGQgZ2V0IHRoZSBjb25zdGFudHMgZnJvbSBsaWJjICovCiAjaW5jbHVkZSAiY2hvb3NlLW1vZGUuaCIKIAotYXNtbGlua2FnZSBsb25nIHdyYXBfc3lzX3NobWF0KGludCBzaG1pZCwgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcpCithc21saW5rYWdlIGxvbmcgc3lzX3VuYW1lNjQoc3RydWN0IG5ld191dHNuYW1lIF9fdXNlciAqIG5hbWUpCiB7Ci0JdW5zaWduZWQgbG9uZyByYWRkcjsKLQotCXJldHVybiBkb19zaG1hdChzaG1pZCwgc2htYWRkciwgc2htZmxnLCAmcmFkZHIpID86IChsb25nKSByYWRkcjsKKwlpbnQgZXJyOworCWRvd25fcmVhZCgmdXRzX3NlbSk7CisJZXJyID0gY29weV90b191c2VyKG5hbWUsICZzeXN0ZW1fdXRzbmFtZSwgc2l6ZW9mICgqbmFtZSkpOworCXVwX3JlYWQoJnV0c19zZW0pOworCWlmIChwZXJzb25hbGl0eShjdXJyZW50LT5wZXJzb25hbGl0eSkgPT0gUEVSX0xJTlVYMzIpCisJCWVyciB8PSBjb3B5X3RvX3VzZXIoJm5hbWUtPm1hY2hpbmUsICJpNjg2IiwgNSk7CisJcmV0dXJuIGVyciA/IC1FRkFVTFQgOiAwOwogfQogCiAjaWZkZWYgQ09ORklHX01PREVfVFQKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC91bV9tb2R1bGUuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC91bV9tb2R1bGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjhlZmYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3VtX21vZHVsZS5jCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CisKKy8qQ29waWVkIGZyb20gaTM4NiBhcmNoL2kzODYva2VybmVsL21vZHVsZS5jICovCit2b2lkICptb2R1bGVfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmIChzaXplID09IDApCisJCXJldHVybiBOVUxMOworCXJldHVybiB2bWFsbG9jX2V4ZWMoc2l6ZSk7Cit9CisKKy8qIEZyZWUgbWVtb3J5IHJldHVybmVkIGZyb20gbW9kdWxlX2FsbG9jICovCit2b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK3sKKwl2ZnJlZShtb2R1bGVfcmVnaW9uKTsKKwkvKiBGSVhNRTogSWYgbW9kdWxlX3JlZ2lvbiA9PSBtb2QtPmluaXRfcmVnaW9uLCB0cmltIGV4Y2VwdGlvbgorICAgICAgICAgICB0YWJsZSBlbnRyaWVzLiAqLworfQorCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvdXNlci1vZmZzZXRzLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvdXNlci1vZmZzZXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxNDc5MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC91c2VyLW9mZnNldHMuYwpAQCAtMCwwICsxLDc4IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNkZWZpbmUgX19GUkFNRV9PRkZTRVRTCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisKKyNkZWZpbmUgREVGSU5FKHN5bSwgdmFsKSBcCisgICAgICAgIGFzbSB2b2xhdGlsZSgiXG4tPiIgI3N5bSAiICUwICIgI3ZhbCA6IDogImkiICh2YWwpKQorCisjZGVmaW5lIE9GRlNFVChzeW0sIHN0ciwgbWVtKSBcCisJREVGSU5FKHN5bSwgb2Zmc2V0b2Yoc3RydWN0IHN0ciwgbWVtKSk7CisKK3ZvaWQgZm9vKHZvaWQpCit7CisJT0ZGU0VUKFNDX1JCWCwgc2lnY29udGV4dCwgcmJ4KTsKKwlPRkZTRVQoU0NfUkNYLCBzaWdjb250ZXh0LCByY3gpOworCU9GRlNFVChTQ19SRFgsIHNpZ2NvbnRleHQsIHJkeCk7CisJT0ZGU0VUKFNDX1JTSSwgc2lnY29udGV4dCwgcnNpKTsKKwlPRkZTRVQoU0NfUkRJLCBzaWdjb250ZXh0LCByZGkpOworCU9GRlNFVChTQ19SQlAsIHNpZ2NvbnRleHQsIHJicCk7CisJT0ZGU0VUKFNDX1JBWCwgc2lnY29udGV4dCwgcmF4KTsKKwlPRkZTRVQoU0NfUjgsIHNpZ2NvbnRleHQsIHI4KTsKKwlPRkZTRVQoU0NfUjksIHNpZ2NvbnRleHQsIHI5KTsKKwlPRkZTRVQoU0NfUjEwLCBzaWdjb250ZXh0LCByMTApOworCU9GRlNFVChTQ19SMTEsIHNpZ2NvbnRleHQsIHIxMSk7CisJT0ZGU0VUKFNDX1IxMiwgc2lnY29udGV4dCwgcjEyKTsKKwlPRkZTRVQoU0NfUjEzLCBzaWdjb250ZXh0LCByMTMpOworCU9GRlNFVChTQ19SMTQsIHNpZ2NvbnRleHQsIHIxNCk7CisJT0ZGU0VUKFNDX1IxNSwgc2lnY29udGV4dCwgcjE1KTsKKwlPRkZTRVQoU0NfSVAsIHNpZ2NvbnRleHQsIHJpcCk7CisJT0ZGU0VUKFNDX1NQLCBzaWdjb250ZXh0LCByc3ApOworCU9GRlNFVChTQ19DUjIsIHNpZ2NvbnRleHQsIGNyMik7CisJT0ZGU0VUKFNDX0VSUiwgc2lnY29udGV4dCwgZXJyKTsKKwlPRkZTRVQoU0NfVFJBUE5PLCBzaWdjb250ZXh0LCB0cmFwbm8pOworCU9GRlNFVChTQ19DUywgc2lnY29udGV4dCwgY3MpOworCU9GRlNFVChTQ19GUywgc2lnY29udGV4dCwgZnMpOworCU9GRlNFVChTQ19HUywgc2lnY29udGV4dCwgZ3MpOworCU9GRlNFVChTQ19FRkxBR1MsIHNpZ2NvbnRleHQsIGVmbGFncyk7CisJT0ZGU0VUKFNDX1NJR01BU0ssIHNpZ2NvbnRleHQsIG9sZG1hc2spOworI2lmIDAKKwlPRkZTRVQoU0NfT1JJR19SQVgsIHNpZ2NvbnRleHQsIG9yaWdfcmF4KTsKKwlPRkZTRVQoU0NfRFMsIHNpZ2NvbnRleHQsIGRzKTsKKwlPRkZTRVQoU0NfRVMsIHNpZ2NvbnRleHQsIGVzKTsKKwlPRkZTRVQoU0NfU1MsIHNpZ2NvbnRleHQsIHNzKTsKKyNlbmRpZgorCisJREVGSU5FKEhPU1RfRlJBTUVfU0laRSwgRlJBTUVfU0laRSk7CisJREVGSU5FKEhPU1RfUkJYLCBSQlgpOworCURFRklORShIT1NUX1JDWCwgUkNYKTsKKwlERUZJTkUoSE9TVF9SREksIFJESSk7CisJREVGSU5FKEhPU1RfUlNJLCBSU0kpOworCURFRklORShIT1NUX1JEWCwgUkRYKTsKKwlERUZJTkUoSE9TVF9SQlAsIFJCUCk7CisJREVGSU5FKEhPU1RfUkFYLCBSQVgpOworCURFRklORShIT1NUX1I4LCBSOCk7CisJREVGSU5FKEhPU1RfUjksIFI5KTsKKwlERUZJTkUoSE9TVF9SMTAsIFIxMCk7CisJREVGSU5FKEhPU1RfUjExLCBSMTEpOworCURFRklORShIT1NUX1IxMiwgUjEyKTsKKwlERUZJTkUoSE9TVF9SMTMsIFIxMyk7CisJREVGSU5FKEhPU1RfUjE0LCBSMTQpOworCURFRklORShIT1NUX1IxNSwgUjE1KTsKKwlERUZJTkUoSE9TVF9PUklHX1JBWCwgT1JJR19SQVgpOworCURFRklORShIT1NUX0NTLCBDUyk7CisJREVGSU5FKEhPU1RfU1MsIFNTKTsKKwlERUZJTkUoSE9TVF9FRkxBR1MsIEVGTEFHUyk7CisjaWYgMAorCURFRklORShIT1NUX0ZTLCBGUyk7CisJREVGSU5FKEhPU1RfR1MsIEdTKTsKKwlERUZJTkUoSE9TVF9EUywgRFMpOworCURFRklORShIT1NUX0VTLCBFUyk7CisjZW5kaWYKKworCURFRklORShIT1NUX0lQLCBSSVApOworCURFRklORShIT1NUX1NQLCBSU1ApOworCURFRklORShfX1VNX0ZSQU1FX1NJWkUsIHNpemVvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3V0aWwvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy14ODZfNjQvdXRpbC9NYWtlZmlsZQppbmRleCAwMDI2MDc5Li43NWIwNTJjIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvdXRpbC9NYWtlZmlsZQorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvdXRpbC9NYWtlZmlsZQpAQCAtNCw3ICs0LDUgQEAKIGhvc3Rwcm9ncy15CTo9IG1rX3NjIG1rX3RocmVhZAogYWx3YXlzCQk6PSAkKGhvc3Rwcm9ncy15KQogCi1ta190aHJlYWQtb2Jqcwk6PSBta190aHJlYWRfa2Vybi5vIG1rX3RocmVhZF91c2VyLm8KLQotSE9TVENGTEFHU19ta190aHJlYWRfa2Vybi5vCTo9ICQoQ0ZMQUdTKSAkKENQUEZMQUdTKQotSE9TVENGTEFHU19ta190aHJlYWRfdXNlci5vCTo9ICQoVVNFUl9DRkxBR1MpCitIT1NUQ0ZMQUdTX21rX3NjLm8gOj0gLUkkKG9ianRyZWUpL2FyY2gvdW0KK0hPU1RDRkxBR1NfbWtfdGhyZWFkLm8gOj0gLUkkKG9ianRyZWUpL2FyY2gvdW0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC91dGlsL21rX3NjLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvdXRpbC9ta19zYy5jCmluZGV4IGMyMzZlMjEuLjc2MTliYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC91dGlsL21rX3NjLmMKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3V0aWwvbWtfc2MuYwpAQCAtMyw1NiArMyw0NSBAQAogICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPHVzZXItb2Zmc2V0cy5oPgogCi0jZGVmaW5lIFNDX09GRlNFVChuYW1lLCBmaWVsZCkgXAotICBwcmludGYoIiNkZWZpbmUgIiBuYW1lIFwKLQkgIihzYykgKigodW5zaWduZWQgbG9uZyAqKSAmKCgoY2hhciAqKSAoc2MpKVslbGRdKSlcbiIsXAotCSBvZmZzZXRvZihzdHJ1Y3Qgc2lnY29udGV4dCwgZmllbGQpKQotCi0jZGVmaW5lIFNDX0ZQX09GRlNFVChuYW1lLCBmaWVsZCkgXAotICBwcmludGYoIiNkZWZpbmUgIiBuYW1lIFwKLQkgIihzYykgKigodW5zaWduZWQgbG9uZyAqKSAmKCgoY2hhciAqKSAoU0NfRlBTVEFURShzYykpKVslbGRdKSlcbiIsXAotCSBvZmZzZXRvZihzdHJ1Y3QgX2Zwc3RhdGUsIGZpZWxkKSkKLQotI2RlZmluZSBTQ19GUF9PRkZTRVRfUFRSKG5hbWUsIGZpZWxkLCB0eXBlKSBcCi0gIHByaW50ZigiI2RlZmluZSAiIG5hbWUgXAotCSAiKHNjKSAoKCIgdHlwZSAiICopICYoKChjaGFyICopIChTQ19GUFNUQVRFKHNjKSkpWyVkXSkpXG4iLFwKLQkgb2Zmc2V0b2Yoc3RydWN0IF9mcHN0YXRlLCBmaWVsZCkpCisjZGVmaW5lIFNDX09GRlNFVChuYW1lKSBcCisgIHByaW50ZigiI2RlZmluZSAiICNuYW1lIFwKKwkgIihzYykgKigodW5zaWduZWQgbG9uZyAqKSAmKCgoY2hhciAqKSAoc2MpKVslZF0pKVxuIixcCisJIG5hbWUpCiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKLSAgU0NfT0ZGU0VUKCJTQ19SQlgiLCByYngpOwotICBTQ19PRkZTRVQoIlNDX1JDWCIsIHJjeCk7Ci0gIFNDX09GRlNFVCgiU0NfUkRYIiwgcmR4KTsKLSAgU0NfT0ZGU0VUKCJTQ19SU0kiLCByc2kpOwotICBTQ19PRkZTRVQoIlNDX1JESSIsIHJkaSk7Ci0gIFNDX09GRlNFVCgiU0NfUkJQIiwgcmJwKTsKLSAgU0NfT0ZGU0VUKCJTQ19SQVgiLCByYXgpOwotICBTQ19PRkZTRVQoIlNDX1I4IiwgcjgpOwotICBTQ19PRkZTRVQoIlNDX1I5IiwgcjkpOwotICBTQ19PRkZTRVQoIlNDX1IxMCIsIHIxMCk7Ci0gIFNDX09GRlNFVCgiU0NfUjExIiwgcjExKTsKLSAgU0NfT0ZGU0VUKCJTQ19SMTIiLCByMTIpOwotICBTQ19PRkZTRVQoIlNDX1IxMyIsIHIxMyk7Ci0gIFNDX09GRlNFVCgiU0NfUjE0IiwgcjE0KTsKLSAgU0NfT0ZGU0VUKCJTQ19SMTUiLCByMTUpOwotICBTQ19PRkZTRVQoIlNDX0lQIiwgcmlwKTsKLSAgU0NfT0ZGU0VUKCJTQ19TUCIsIHJzcCk7Ci0gIFNDX09GRlNFVCgiU0NfQ1IyIiwgY3IyKTsKLSAgU0NfT0ZGU0VUKCJTQ19FUlIiLCBlcnIpOwotICBTQ19PRkZTRVQoIlNDX1RSQVBOTyIsIHRyYXBubyk7Ci0gIFNDX09GRlNFVCgiU0NfQ1MiLCBjcyk7Ci0gIFNDX09GRlNFVCgiU0NfRlMiLCBmcyk7Ci0gIFNDX09GRlNFVCgiU0NfR1MiLCBncyk7Ci0gIFNDX09GRlNFVCgiU0NfRUZMQUdTIiwgZWZsYWdzKTsKLSAgU0NfT0ZGU0VUKCJTQ19TSUdNQVNLIiwgb2xkbWFzayk7CisgIFNDX09GRlNFVChTQ19SQlgpOworICBTQ19PRkZTRVQoU0NfUkNYKTsKKyAgU0NfT0ZGU0VUKFNDX1JEWCk7CisgIFNDX09GRlNFVChTQ19SU0kpOworICBTQ19PRkZTRVQoU0NfUkRJKTsKKyAgU0NfT0ZGU0VUKFNDX1JCUCk7CisgIFNDX09GRlNFVChTQ19SQVgpOworICBTQ19PRkZTRVQoU0NfUjgpOworICBTQ19PRkZTRVQoU0NfUjkpOworICBTQ19PRkZTRVQoU0NfUjEwKTsKKyAgU0NfT0ZGU0VUKFNDX1IxMSk7CisgIFNDX09GRlNFVChTQ19SMTIpOworICBTQ19PRkZTRVQoU0NfUjEzKTsKKyAgU0NfT0ZGU0VUKFNDX1IxNCk7CisgIFNDX09GRlNFVChTQ19SMTUpOworICBTQ19PRkZTRVQoU0NfSVApOworICBTQ19PRkZTRVQoU0NfU1ApOworICBTQ19PRkZTRVQoU0NfQ1IyKTsKKyAgU0NfT0ZGU0VUKFNDX0VSUik7CisgIFNDX09GRlNFVChTQ19UUkFQTk8pOworICBTQ19PRkZTRVQoU0NfQ1MpOworICBTQ19PRkZTRVQoU0NfRlMpOworICBTQ19PRkZTRVQoU0NfR1MpOworICBTQ19PRkZTRVQoU0NfRUZMQUdTKTsKKyAgU0NfT0ZGU0VUKFNDX1NJR01BU0spOwogI2lmIDAKLSAgU0NfT0ZGU0VUKCJTQ19PUklHX1JBWCIsIG9yaWdfcmF4KTsKLSAgU0NfT0ZGU0VUKCJTQ19EUyIsIGRzKTsKLSAgU0NfT0ZGU0VUKCJTQ19FUyIsIGVzKTsKLSAgU0NfT0ZGU0VUKCJTQ19TUyIsIHNzKTsKKyAgU0NfT0ZGU0VUKFNDX09SSUdfUkFYKTsKKyAgU0NfT0ZGU0VUKFNDX0RTKTsKKyAgU0NfT0ZGU0VUKFNDX0VTKTsKKyAgU0NfT0ZGU0VUKFNDX1NTKTsKICNlbmRpZgogICByZXR1cm4oMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvdXRpbC9ta190aHJlYWQuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC91dGlsL21rX3RocmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NTE3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvdXRpbC9ta190aHJlYWQuYwpAQCAtMCwwICsxLDIwIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxrZXJuZWwtb2Zmc2V0cy5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIHByaW50ZigiLypcbiIpOworICBwcmludGYoIiAqIEdlbmVyYXRlZCBieSBta190aHJlYWRcbiIpOworICBwcmludGYoIiAqL1xuIik7CisgIHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCIjaWZuZGVmIF9fVU1fVEhSRUFEX0hcbiIpOworICBwcmludGYoIiNkZWZpbmUgX19VTV9USFJFQURfSFxuIik7CisgIHByaW50ZigiXG4iKTsKKyNpZmRlZiBUQVNLX0VYVEVSTl9QSUQKKyAgcHJpbnRmKCIjZGVmaW5lIFRBU0tfRVhURVJOX1BJRCh0YXNrKSAqKChpbnQgKikgJigoKGNoYXIgKikgKHRhc2spKVslZF0pKVxuIiwKKwkgVEFTS19FWFRFUk5fUElEKTsKKyNlbmRpZgorICBwcmludGYoIlxuIik7CisgIHByaW50ZigiI2VuZGlmXG4iKTsKKyAgcmV0dXJuKDApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3V0aWwvbWtfdGhyZWFkX2tlcm4uYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC91dGlsL21rX3RocmVhZF9rZXJuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODE2NzMuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L3V0aWwvbWtfdGhyZWFkX2tlcm4uYworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKLSNpbmNsdWRlICJsaW51eC9zdGRkZWYuaCIKLSNpbmNsdWRlICJsaW51eC9zY2hlZC5oIgotCi1leHRlcm4gdm9pZCBwcmludF9oZWFkKHZvaWQpOwotZXh0ZXJuIHZvaWQgcHJpbnRfY29uc3RhbnRfcHRyKGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7Ci1leHRlcm4gdm9pZCBwcmludF9jb25zdGFudChjaGFyICpuYW1lLCBjaGFyICp0eXBlLCBpbnQgdmFsdWUpOwotZXh0ZXJuIHZvaWQgcHJpbnRfdGFpbCh2b2lkKTsKLQotI2RlZmluZSBUSFJFQURfT0ZGU0VUKGZpZWxkKSBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5maWVsZCkKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBwcmludF9oZWFkKCk7Ci0jaWZkZWYgQ09ORklHX01PREVfVFQKLSAgcHJpbnRfY29uc3RhbnQoIlRBU0tfRVhURVJOX1BJRCIsICJpbnQiLCBUSFJFQURfT0ZGU0VUKG1vZGUudHQuZXh0ZXJuX3BpZCkpOwotI2VuZGlmCi0gIHByaW50X3RhaWwoKTsKLSAgcmV0dXJuKDApOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvdXRpbC9ta190aHJlYWRfdXNlci5jIGIvYXJjaC91bS9zeXMteDg2XzY0L3V0aWwvbWtfdGhyZWFkX3VzZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk4OTcyNS4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvdXRpbC9ta190aHJlYWRfdXNlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLXZvaWQgcHJpbnRfaGVhZCh2b2lkKQotewotICBwcmludGYoIi8qXG4iKTsKLSAgcHJpbnRmKCIgKiBHZW5lcmF0ZWQgYnkgbWtfdGhyZWFkXG4iKTsKLSAgcHJpbnRmKCIgKi9cbiIpOwotICBwcmludGYoIlxuIik7Ci0gIHByaW50ZigiI2lmbmRlZiBfX1VNX1RIUkVBRF9IXG4iKTsKLSAgcHJpbnRmKCIjZGVmaW5lIF9fVU1fVEhSRUFEX0hcbiIpOwotICBwcmludGYoIlxuIik7Ci19Ci0KLXZvaWQgcHJpbnRfY29uc3RhbnRfcHRyKGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKLXsKLSAgcHJpbnRmKCIjZGVmaW5lICVzKHRhc2spICgodW5zaWduZWQgbG9uZyAqKSAiCi0JICImKCgoY2hhciAqKSAodGFzaykpWyVkXSkpXG4iLCBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgcHJpbnRfY29uc3RhbnQoY2hhciAqbmFtZSwgY2hhciAqdHlwZSwgaW50IHZhbHVlKQotewotICBwcmludGYoIiNkZWZpbmUgJXModGFzaykgKigoJXMgKikgJigoKGNoYXIgKikgKHRhc2spKVslZF0pKVxuIiwgbmFtZSwgdHlwZSwKLQkgdmFsdWUpOwotfQotCi12b2lkIHByaW50X3RhaWwodm9pZCkKLXsKLSAgcHJpbnRmKCJcbiIpOwotICBwcmludGYoIiNlbmRpZlxuIik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3VtL3V0aWwvTWFrZWZpbGUgYi9hcmNoL3VtL3V0aWwvTWFrZWZpbGUKaW5kZXggZTJhYjcxMi4uNGM3NTUxYyAxMDA2NDQKLS0tIGEvYXJjaC91bS91dGlsL01ha2VmaWxlCisrKyBiL2FyY2gvdW0vdXRpbC9NYWtlZmlsZQpAQCAtMSw4ICsxLDUgQEAKIGhvc3Rwcm9ncy15CQk6PSBta190YXNrIG1rX2NvbnN0YW50cwogYWx3YXlzCQkJOj0gJChob3N0cHJvZ3MteSkKIAotbWtfdGFzay1vYmpzCQk6PSBta190YXNrX3VzZXIubyBta190YXNrX2tlcm4ubwotbWtfY29uc3RhbnRzLW9ianMJOj0gbWtfY29uc3RhbnRzX3VzZXIubyBta19jb25zdGFudHNfa2Vybi5vCi0KLUhPU1RDRkxBR1NfbWtfdGFza19rZXJuLm8JOj0gJChDRkxBR1MpICQoQ1BQRkxBR1MpCi1IT1NUQ0ZMQUdTX21rX2NvbnN0YW50c19rZXJuLm8JOj0gJChDRkxBR1MpICQoQ1BQRkxBR1MpCitIT1NUQ0ZMQUdTX21rX3Rhc2subyA6PSAtSSQob2JqdHJlZSkvYXJjaC91bQorSE9TVENGTEFHU19ta19jb25zdGFudHMubyA6PSAtSSQob2JqdHJlZSkvYXJjaC91bQpkaWZmIC0tZ2l0IGEvYXJjaC91bS91dGlsL21rX2NvbnN0YW50cy5jIGIvYXJjaC91bS91dGlsL21rX2NvbnN0YW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMjE3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3V0aWwvbWtfY29uc3RhbnRzLmMKQEAgLTAsMCArMSwzMiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8a2VybmVsLW9mZnNldHMuaD4KKworI2RlZmluZSBTSE9XX0lOVChzeW0pIHByaW50ZigiI2RlZmluZSAlcyAlZFxuIiwgI3N5bSwgc3ltKQorI2RlZmluZSBTSE9XX1NUUihzeW0pIHByaW50ZigiI2RlZmluZSAlcyAlc1xuIiwgI3N5bSwgc3ltKQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIHByaW50ZigiLypcbiIpOworICBwcmludGYoIiAqIEdlbmVyYXRlZCBieSBta19jb25zdGFudHNcbiIpOworICBwcmludGYoIiAqL1xuIik7CisgIHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCIjaWZuZGVmIF9fVU1fQ09OU1RBTlRTX0hcbiIpOworICBwcmludGYoIiNkZWZpbmUgX19VTV9DT05TVEFOVFNfSFxuIik7CisgIHByaW50ZigiXG4iKTsKKworICBTSE9XX0lOVChVTV9LRVJOX1BBR0VfU0laRSk7CisKKyAgU0hPV19TVFIoVU1fS0VSTl9FTUVSRyk7CisgIFNIT1dfU1RSKFVNX0tFUk5fQUxFUlQpOworICBTSE9XX1NUUihVTV9LRVJOX0NSSVQpOworICBTSE9XX1NUUihVTV9LRVJOX0VSUik7CisgIFNIT1dfU1RSKFVNX0tFUk5fV0FSTklORyk7CisgIFNIT1dfU1RSKFVNX0tFUk5fTk9USUNFKTsKKyAgU0hPV19TVFIoVU1fS0VSTl9JTkZPKTsKKyAgU0hPV19TVFIoVU1fS0VSTl9ERUJVRyk7CisKKyAgU0hPV19JTlQoVU1fTlNFQ19QRVJfU0VDKTsKKyAgcHJpbnRmKCJcbiIpOworICBwcmludGYoIiNlbmRpZlxuIik7CisgIHJldHVybigwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdW0vdXRpbC9ta19jb25zdGFudHNfa2Vybi5jIGIvYXJjaC91bS91dGlsL21rX2NvbnN0YW50c19rZXJuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkY2IxMjMuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS91dGlsL21rX2NvbnN0YW50c19rZXJuLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jaW5jbHVkZSAibGludXgva2VybmVsLmgiCi0jaW5jbHVkZSAibGludXgvc3RyaW5naWZ5LmgiCi0jaW5jbHVkZSAibGludXgvdGltZS5oIgotI2luY2x1ZGUgImFzbS9wYWdlLmgiCi0KLWV4dGVybiB2b2lkIHByaW50X2hlYWQodm9pZCk7Ci1leHRlcm4gdm9pZCBwcmludF9jb25zdGFudF9zdHIoY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOwotZXh0ZXJuIHZvaWQgcHJpbnRfY29uc3RhbnRfaW50KGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7Ci1leHRlcm4gdm9pZCBwcmludF90YWlsKHZvaWQpOwotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gIHByaW50X2hlYWQoKTsKLSAgcHJpbnRfY29uc3RhbnRfaW50KCJVTV9LRVJOX1BBR0VfU0laRSIsIFBBR0VfU0laRSk7Ci0KLSAgcHJpbnRfY29uc3RhbnRfc3RyKCJVTV9LRVJOX0VNRVJHIiwgS0VSTl9FTUVSRyk7Ci0gIHByaW50X2NvbnN0YW50X3N0cigiVU1fS0VSTl9BTEVSVCIsIEtFUk5fQUxFUlQpOwotICBwcmludF9jb25zdGFudF9zdHIoIlVNX0tFUk5fQ1JJVCIsIEtFUk5fQ1JJVCk7Ci0gIHByaW50X2NvbnN0YW50X3N0cigiVU1fS0VSTl9FUlIiLCBLRVJOX0VSUik7Ci0gIHByaW50X2NvbnN0YW50X3N0cigiVU1fS0VSTl9XQVJOSU5HIiwgS0VSTl9XQVJOSU5HKTsKLSAgcHJpbnRfY29uc3RhbnRfc3RyKCJVTV9LRVJOX05PVElDRSIsIEtFUk5fTk9USUNFKTsKLSAgcHJpbnRfY29uc3RhbnRfc3RyKCJVTV9LRVJOX0lORk8iLCBLRVJOX0lORk8pOwotICBwcmludF9jb25zdGFudF9zdHIoIlVNX0tFUk5fREVCVUciLCBLRVJOX0RFQlVHKTsKLQotICBwcmludF9jb25zdGFudF9pbnQoIlVNX05TRUNfUEVSX1NFQyIsIE5TRUNfUEVSX1NFQyk7Ci0gIHByaW50X3RhaWwoKTsKLSAgcmV0dXJuKDApOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS91dGlsL21rX2NvbnN0YW50c191c2VyLmMgYi9hcmNoL3VtL3V0aWwvbWtfY29uc3RhbnRzX3VzZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY0ZDdlNS4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL3V0aWwvbWtfY29uc3RhbnRzX3VzZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSNpbmNsdWRlIDxzdGRpby5oPgotCi12b2lkIHByaW50X2hlYWQodm9pZCkKLXsKLSAgcHJpbnRmKCIvKlxuIik7Ci0gIHByaW50ZigiICogR2VuZXJhdGVkIGJ5IG1rX2NvbnN0YW50c1xuIik7Ci0gIHByaW50ZigiICovXG4iKTsKLSAgcHJpbnRmKCJcbiIpOwotICBwcmludGYoIiNpZm5kZWYgX19VTV9DT05TVEFOVFNfSFxuIik7Ci0gIHByaW50ZigiI2RlZmluZSBfX1VNX0NPTlNUQU5UU19IXG4iKTsKLSAgcHJpbnRmKCJcbiIpOwotfQotCi12b2lkIHByaW50X2NvbnN0YW50X3N0cihjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKLXsKLSAgcHJpbnRmKCIjZGVmaW5lICVzIFwiJXNcIlxuIiwgbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIHByaW50X2NvbnN0YW50X2ludChjaGFyICpuYW1lLCBpbnQgdmFsdWUpCi17Ci0gIHByaW50ZigiI2RlZmluZSAlcyAlZFxuIiwgbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIHByaW50X3RhaWwodm9pZCkKLXsKLSAgcHJpbnRmKCJcbiIpOwotICBwcmludGYoIiNlbmRpZlxuIik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3VtL3V0aWwvbWtfdGFza191c2VyLmMgYi9hcmNoL3VtL3V0aWwvbWtfdGFzay5jCnNpbWlsYXJpdHkgaW5kZXggNzUlCnJlbmFtZSBmcm9tIGFyY2gvdW0vdXRpbC9ta190YXNrX3VzZXIuYwpyZW5hbWUgdG8gYXJjaC91bS91dGlsL21rX3Rhc2suYwppbmRleCA5ZGI4NDlmLi4zNmM5NjA2IDEwMDY0NAotLS0gYS9hcmNoL3VtL3V0aWwvbWtfdGFza191c2VyLmMKKysrIGIvYXJjaC91bS91dGlsL21rX3Rhc2suYwpAQCAtMSwxMCArMSw1IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KLQotdm9pZCBwcmludChjaGFyICpuYW1lLCBjaGFyICp0eXBlLCBpbnQgb2Zmc2V0KQotewotICBwcmludGYoIiNkZWZpbmUgJXModGFzaykgKigoJXMgKikgJigoKGNoYXIgKikgKHRhc2spKVslZF0pKVxuIiwgbmFtZSwgdHlwZSwKLQkgb2Zmc2V0KTsKLX0KKyNpbmNsdWRlIDxrZXJuZWwtb2Zmc2V0cy5oPgogCiB2b2lkIHByaW50X3B0cihjaGFyICpuYW1lLCBjaGFyICp0eXBlLCBpbnQgb2Zmc2V0KQogewpAQCAtMTIsNyArNywxMyBAQAogCSBvZmZzZXQpOwogfQogCi12b2lkIHByaW50X2hlYWQodm9pZCkKK3ZvaWQgcHJpbnQoY2hhciAqbmFtZSwgY2hhciAqdHlwZSwgaW50IG9mZnNldCkKK3sKKyAgcHJpbnRmKCIjZGVmaW5lICVzKHRhc2spICooKCVzICopICYoKChjaGFyICopICh0YXNrKSlbJWRdKSlcbiIsIG5hbWUsIHR5cGUsCisJIG9mZnNldCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKICAgcHJpbnRmKCIvKlxuIik7CiAgIHByaW50ZigiICogR2VuZXJhdGVkIGJ5IG1rX3Rhc2tcbiIpOwpAQCAtMjEsMTAgKzIyLDkgQEAKICAgcHJpbnRmKCIjaWZuZGVmIF9fVEFTS19IXG4iKTsKICAgcHJpbnRmKCIjZGVmaW5lIF9fVEFTS19IXG4iKTsKICAgcHJpbnRmKCJcbiIpOwotfQotCi12b2lkIHByaW50X3RhaWwodm9pZCkKLXsKKyAgcHJpbnRfcHRyKCJUQVNLX1JFR1MiLCAidW5pb24gdW1sX3B0X3JlZ3MiLCBUQVNLX1JFR1MpOworICBwcmludCgiVEFTS19QSUQiLCAiaW50IiwgVEFTS19QSUQpOwogICBwcmludGYoIlxuIik7CiAgIHByaW50ZigiI2VuZGlmXG4iKTsKKyAgcmV0dXJuKDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS91dGlsL21rX3Rhc2tfa2Vybi5jIGIvYXJjaC91bS91dGlsL21rX3Rhc2tfa2Vybi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjE4MTAzLi4wMDAwMDAwCi0tLSBhL2FyY2gvdW0vdXRpbC9ta190YXNrX2tlcm4uYworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpbmNsdWRlICJsaW51eC9zY2hlZC5oIgotI2luY2x1ZGUgImxpbnV4L3N0ZGRlZi5oIgotCi1leHRlcm4gdm9pZCBwcmludChjaGFyICpuYW1lLCBjaGFyICp0eXBlLCBpbnQgb2Zmc2V0KTsKLWV4dGVybiB2b2lkIHByaW50X3B0cihjaGFyICpuYW1lLCBjaGFyICp0eXBlLCBpbnQgb2Zmc2V0KTsKLWV4dGVybiB2b2lkIHByaW50X2hlYWQodm9pZCk7Ci1leHRlcm4gdm9pZCBwcmludF90YWlsKHZvaWQpOwotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gIHByaW50X2hlYWQoKTsKLSAgcHJpbnRfcHRyKCJUQVNLX1JFR1MiLCAidW5pb24gdW1sX3B0X3JlZ3MiLCAKLQkgICAgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQucmVncykpOwotICBwcmludCgiVEFTS19QSUQiLCAiaW50Iiwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBwaWQpKTsKLSAgcHJpbnRfdGFpbCgpOwotICByZXR1cm4oMCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3B0cmFjZS5jIGIvYXJjaC92ODUwL2tlcm5lbC9wdHJhY2UuYwppbmRleCA4ZmE3ODA3Li40NzI2Yjg3IDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvcHRyYWNlLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CkBAIC0yMDgsNyArMjA5LDcgQEAKIAkvKiBFeGVjdXRlIGEgc2luZ2xlIGluc3RydWN0aW9uLiAqLwogCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6CiAJCXJ2YWwgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAogCQkvKiBUdXJuIENISUxEJ3Mgc2luZ2xlLXN0ZXAgZmxhZyBvbiBvciBvZmYuICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvS2NvbmZpZyBiL2FyY2gveDg2XzY0L0tjb25maWcKaW5kZXggODBjMzhjNS4uNDRlZTdmNiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvS2NvbmZpZworKysgYi9hcmNoL3g4Nl82NC9LY29uZmlnCkBAIC0zNzksNiArMzc5LDExIEBACiAJYm9vbAogCWRlZmF1bHQgeQogCisjIHdlIGhhdmUgbm8gSVNBIHNsb3RzLCBidXQgd2UgZG8gaGF2ZSBJU0Etc3R5bGUgRE1BLgorY29uZmlnIElTQV9ETUFfQVBJCisJYm9vbAorCWRlZmF1bHQgeQorCiBtZW51ICJQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMiCiAKIHNvdXJjZSBrZXJuZWwvcG93ZXIvS2NvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvYm9vdC9ib290c2VjdC5TIGIvYXJjaC94ODZfNjQvYm9vdC9ib290c2VjdC5TCmluZGV4IGJiMTVkNDAuLjAxMWI3YTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2Jvb3QvYm9vdHNlY3QuUworKysgYi9hcmNoL3g4Nl82NC9ib290L2Jvb3RzZWN0LlMKQEAgLTYzLDcgKzYzLDcgQEAKIAlqeglkaWUKIAltb3ZiCSQweGUsICVhaAogCW1vdncJJDcsICVieAotIAlpbnQJJDB4MTAKKwlpbnQJJDB4MTAKIAlqbXAJbXNnX2xvb3AKIAogZGllOgpAQCAtNzEsNyArNzEsNyBAQAogCXhvcncJJWF4LCAlYXgKIAlpbnQJJDB4MTYKIAlpbnQJJDB4MTkKLQkKKwogCSMgaW50IDB4MTkgc2hvdWxkIG5ldmVyIHJldHVybi4gIEluIGNhc2UgaXQgZG9lcyBhbnl3YXksCiAJIyBpbnZva2UgdGhlIEJJT1MgcmVzZXQgY29kZS4uLgogCWxqbXAJJDB4ZjAwMCwkMHhmZmYwCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9ib290L3NldHVwLlMgYi9hcmNoL3g4Nl82NC9ib290L3NldHVwLlMKaW5kZXggM2U4MzhiZS4uNzVkNGQyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvYm9vdC9zZXR1cC5TCisrKyBiL2FyY2gveDg2XzY0L2Jvb3Qvc2V0dXAuUwpAQCAtMTYwLDcgKzE2MCw3IEBACiB0cmFtcG9saW5lOgljYWxsCXN0YXJ0X29mX3NldHVwCiAJCS5hbGlnbiAxNgogCQkJCQkjIFRoZSBvZmZzZXQgYXQgdGhpcyBwb2ludCBpcyAweDI0MAotCQkuc3BhY2UgICgweDdmZi0weDI0MCsxKQkjIEU4MjAgJiBFREQgc3BhY2UgKGVuZGluZyBhdCAweDdmZikKKwkJLnNwYWNlICAoMHhlZmYtMHgyNDArMSkJIyBFODIwICYgRUREIHNwYWNlIChlbmRpbmcgYXQgMHhlZmYpCiAjIEVuZCBvZiBzZXR1cCBoZWFkZXIgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogc3RhcnRfb2Zfc2V0dXA6CkBAIC00MTIsOSArNDEyLDkgQEAKIAkjIHNpemVvZihlODIwcmVjKS4KIAkjCiBnb29kODIwOgotCW1vdmIJKEU4MjBOUiksICVhbAkJCSMgdXAgdG8gMzIgZW50cmllcworCW1vdmIJKEU4MjBOUiksICVhbAkJCSMgdXAgdG8gMTI4IGVudHJpZXMKIAljbXBiCSRFODIwTUFYLCAlYWwKLQlqbmwJYmFpbDgyMAorCWphZQliYWlsODIwCiAKIAlpbmNiCShFODIwTlIpCiAJbW92dwklZGksICVheApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi92c3lzY2FsbC5sZHMgYi9hcmNoL3g4Nl82NC9pYTMyL3ZzeXNjYWxsLmxkcwppbmRleCBmYTRiNGRkLi5mMmU3NWVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL3ZzeXNjYWxsLmxkcworKysgYi9hcmNoL3g4Nl82NC9pYTMyL3ZzeXNjYWxsLmxkcwpAQCAtMzYsNiArMzYsNyBAQAogCiAgIC50ZXh0LnJ0c2lncmV0dXJuIDogeyAqKC50ZXh0LnJ0c2lncmV0dXJuKSB9ICAgOnRleHQgPTB4OTA5MDkwOTAKIAkKKyAgLm5vdGUJCSAgOiB7ICooLm5vdGUuKikgfQkJOnRleHQgOm5vdGUKICAgLmVoX2ZyYW1lX2hkciAgIDogeyAqKC5laF9mcmFtZV9oZHIpIH0JOnRleHQgOmVoX2ZyYW1lX2hkcgogICAuZWhfZnJhbWUgICAgICAgOiB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQk6dGV4dAogICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0JCTp0ZXh0IDpkeW5hbWljCkBAIC01NSw2ICs1Niw3IEBACiB7CiAgIHRleHQgUFRfTE9BRCBGSUxFSERSIFBIRFJTIEZMQUdTKDUpOyAvKiBQRl9SfFBGX1ggKi8KICAgZHluYW1pYyBQVF9EWU5BTUlDIEZMQUdTKDQpOyAvKiBQRl9SICovCisgIG5vdGUgUFRfTk9URSBGTEFHUyg0KTsgLyogUEZfUiAqLwogICBlaF9mcmFtZV9oZHIgMHg2NDc0ZTU1MDsgLyogUFRfR05VX0VIX0ZSQU1FLCBidXQgbGQgZG9lc24ndCBtYXRjaCB0aGUgbmFtZSAqLwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYwppbmRleCA1NjUxNmFjLi43YzE1NGRmIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKQEAgLTIsNiArMiwxMiBAQAogICogSGFuZGxlIHRoZSBtZW1vcnkgbWFwLgogICogVGhlIGZ1bmN0aW9ucyBoZXJlIGRvIHRoZSBqb2IgdW50aWwgYm9vdG1lbSB0YWtlcyBvdmVyLgogICogJElkOiBlODIwLmMsdiAxLjQgMjAwMi8wOS8xOSAxOToyNTozMiBhayBFeHAgJAorICoKKyAqICBHZXR0aW5nIHNhbml0aXplX2U4MjBfbWFwKCkgaW4gc3luYyB3aXRoIGkzODYgdmVyc2lvbiBieSBhcHBseWluZyBjaGFuZ2U6CisgKiAgLSAgUHJvdmlzaW9ucyBmb3IgZW1wdHkgRTgyMCBtZW1vcnkgcmVnaW9ucyAocmVwb3J0ZWQgYnkgY2VydGFpbiBCSU9TZXMpLgorICogICAgIEFsZXggQWNoZW5iYWNoIDx4ZWxhQHNsaXQuZGU+LCBEZWNlbWJlciAyMDAyLgorICogIFZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPgorICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjc3LDcgKzI4Myw3IEBACiAJaW50IGNoZ2lkeCwgc3RpbGxfY2hhbmdpbmc7CiAJaW50IG92ZXJsYXBfZW50cmllczsKIAlpbnQgbmV3X2Jpb3NfZW50cnk7Ci0JaW50IG9sZF9uciwgbmV3X25yOworCWludCBvbGRfbnIsIG5ld19uciwgY2hnX25yOwogCWludCBpOwogCiAJLyoKQEAgLTMzMSwyMCArMzM3LDI0IEBACiAJZm9yIChpPTA7IGkgPCAyKm9sZF9ucjsgaSsrKQogCQljaGFuZ2VfcG9pbnRbaV0gPSAmY2hhbmdlX3BvaW50X2xpc3RbaV07CiAKLQkvKiByZWNvcmQgYWxsIGtub3duIGNoYW5nZS1wb2ludHMgKHN0YXJ0aW5nIGFuZCBlbmRpbmcgYWRkcmVzc2VzKSAqLworCS8qIHJlY29yZCBhbGwga25vd24gY2hhbmdlLXBvaW50cyAoc3RhcnRpbmcgYW5kIGVuZGluZyBhZGRyZXNzZXMpLAorCSAgIG9taXR0aW5nIHRob3NlIHRoYXQgYXJlIGZvciBlbXB0eSBtZW1vcnkgcmVnaW9ucyAqLwogCWNoZ2lkeCA9IDA7CiAJZm9yIChpPTA7IGkgPCBvbGRfbnI7IGkrKykJewotCQljaGFuZ2VfcG9pbnRbY2hnaWR4XS0+YWRkciA9IGJpb3NtYXBbaV0uYWRkcjsKLQkJY2hhbmdlX3BvaW50W2NoZ2lkeCsrXS0+cGJpb3MgPSAmYmlvc21hcFtpXTsKLQkJY2hhbmdlX3BvaW50W2NoZ2lkeF0tPmFkZHIgPSBiaW9zbWFwW2ldLmFkZHIgKyBiaW9zbWFwW2ldLnNpemU7Ci0JCWNoYW5nZV9wb2ludFtjaGdpZHgrK10tPnBiaW9zID0gJmJpb3NtYXBbaV07CisJCWlmIChiaW9zbWFwW2ldLnNpemUgIT0gMCkgeworCQkJY2hhbmdlX3BvaW50W2NoZ2lkeF0tPmFkZHIgPSBiaW9zbWFwW2ldLmFkZHI7CisJCQljaGFuZ2VfcG9pbnRbY2hnaWR4KytdLT5wYmlvcyA9ICZiaW9zbWFwW2ldOworCQkJY2hhbmdlX3BvaW50W2NoZ2lkeF0tPmFkZHIgPSBiaW9zbWFwW2ldLmFkZHIgKyBiaW9zbWFwW2ldLnNpemU7CisJCQljaGFuZ2VfcG9pbnRbY2hnaWR4KytdLT5wYmlvcyA9ICZiaW9zbWFwW2ldOworCQl9CiAJfQorCWNoZ19uciA9IGNoZ2lkeDsKIAogCS8qIHNvcnQgY2hhbmdlLXBvaW50IGxpc3QgYnkgbWVtb3J5IGFkZHJlc3NlcyAobG93IC0+IGhpZ2gpICovCiAJc3RpbGxfY2hhbmdpbmcgPSAxOwogCXdoaWxlIChzdGlsbF9jaGFuZ2luZykJewogCQlzdGlsbF9jaGFuZ2luZyA9IDA7Ci0JCWZvciAoaT0xOyBpIDwgMipvbGRfbnI7IGkrKykgIHsKKwkJZm9yIChpPTE7IGkgPCBjaGdfbnI7IGkrKykgIHsKIAkJCS8qIGlmIDxjdXJyZW50X2FkZHI+ID4gPGxhc3RfYWRkcj4sIHN3YXAgKi8KIAkJCS8qIG9yLCBpZiBjdXJyZW50PTxzdGFydF9hZGRyPiAmIGxhc3Q9PGVuZF9hZGRyPiwgc3dhcCAqLwogCQkJaWYgKChjaGFuZ2VfcG9pbnRbaV0tPmFkZHIgPCBjaGFuZ2VfcG9pbnRbaS0xXS0+YWRkcikgfHwKQEAgLTM2Nyw3ICszNzcsNyBAQAogCWxhc3RfdHlwZSA9IDA7CQkgLyogc3RhcnQgd2l0aCB1bmRlZmluZWQgbWVtb3J5IHR5cGUgKi8KIAlsYXN0X2FkZHIgPSAwOwkJIC8qIHN0YXJ0IHdpdGggMCBhcyBsYXN0IHN0YXJ0aW5nIGFkZHJlc3MgKi8KIAkvKiBsb29wIHRocm91Z2ggY2hhbmdlLXBvaW50cywgZGV0ZXJtaW5pbmcgYWZmZWN0IG9uIHRoZSBuZXcgYmlvcyBtYXAgKi8KLQlmb3IgKGNoZ2lkeD0wOyBjaGdpZHggPCAyKm9sZF9ucjsgY2hnaWR4KyspCisJZm9yIChjaGdpZHg9MDsgY2hnaWR4IDwgY2hnX25yOyBjaGdpZHgrKykKIAl7CiAJCS8qIGtlZXAgdHJhY2sgb2YgYWxsIG92ZXJsYXBwaW5nIGJpb3MgZW50cmllcyAqLwogCQlpZiAoY2hhbmdlX3BvaW50W2NoZ2lkeF0tPmFkZHIgPT0gY2hhbmdlX3BvaW50W2NoZ2lkeF0tPnBiaW9zLT5hZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IDc1MGJjZDAuLmUzYTE5ZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAogLyogU2VyaWFsIGZ1bmN0aW9ucyBsb29zZWx5IGJhc2VkIG9uIGEgc2ltaWxhciBwYWNrYWdlIGZyb20gS2xhdXMgUC4gR2VybGljaGVyICovIAogCi1pbnQgZWFybHlfc2VyaWFsX2Jhc2UgPSAweDNmODsgIC8qIHR0eVMwICovIAorc3RhdGljIGludCBlYXJseV9zZXJpYWxfYmFzZSA9IDB4M2Y4OyAgLyogdHR5UzAgKi8KIAogI2RlZmluZSBYTVRSRFkgICAgICAgICAgMHgyMAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IDMyMzNhMTUuLjEwODZiNWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCkBAIC0yOTYsNiArMjk2LDcgQEAKIAljYWxsIHN5c2NhbGxfdHJhY2VfbGVhdmUKIAlwb3BxICVyZGkKIAlhbmRsICR+KF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVR8X1RJRl9TSU5HTEVTVEVQKSwlZWRpCisJY2xpCiAJam1wIGludF9yZXN0b3JlX3Jlc3QKIAkKIGludF9zaWduYWw6CkBAIC0zMDcsNiArMzA4LDcgQEAKIDE6CW1vdmwgJF9USUZfTkVFRF9SRVNDSEVELCVlZGkJCiBpbnRfcmVzdG9yZV9yZXN0OgogCVJFU1RPUkVfUkVTVAorCWNsaQogCWptcCBpbnRfd2l0aF9jaGVjawogCUNGSV9FTkRQUk9DCiAJCQpAQCAtNDkwLDcgKzQ5Miw4IEBACiAJY2FsbCBkb19ub3RpZnlfcmVzdW1lCiAJUkVTVE9SRV9SRVNUCiAJY2xpCi0JR0VUX1RIUkVBRF9JTkZPKCVyY3gpCQorCUdFVF9USFJFQURfSU5GTyglcmN4KQorCW1vdmwgJF9USUZfV09SS19NQVNLLCVlZGkKIAlqbXAgcmV0aW50X2NoZWNrCiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2hlYWQ2NC5jIGIvYXJjaC94ODZfNjQva2VybmVsL2hlYWQ2NC5jCmluZGV4IDZjYWQ0NmMuLjBmOGM3OGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9oZWFkNjQuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZDY0LmMKQEAgLTI5LDggKzI5LDYgQEAKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcpIF9fYnNzX2VuZCAtICh1bnNpZ25lZCBsb25nKSBfX2Jzc19zdGFydCk7CiB9CiAKLWV4dGVybiBjaGFyIHg4Nl9ib290X3BhcmFtc1syMDQ4XTsKLQogI2RlZmluZSBORVdfQ0xfUE9JTlRFUgkJMHgyMjgJLyogUmVsYXRpdmUgdG8gcmVhbCBtb2RlIGRhdGEgKi8KICNkZWZpbmUgT0xEX0NMX01BR0lDX0FERFIJMHg5MDAyMAogI2RlZmluZSBPTERfQ0xfTUFHSUMgICAgICAgICAgICAweEEzM0YKQEAgLTQ0LDcgKzQyLDcgQEAKIAlpbnQgbmV3X2RhdGE7CiAJY2hhciAqIGNvbW1hbmRfbGluZTsKIAotCW1lbWNweSh4ODZfYm9vdF9wYXJhbXMsIHJlYWxfbW9kZV9kYXRhLCAyMDQ4KTsgCisJbWVtY3B5KHg4Nl9ib290X3BhcmFtcywgcmVhbF9tb2RlX2RhdGEsIEJPT1RfUEFSQU1fU0laRSk7CiAJbmV3X2RhdGEgPSAqKGludCAqKSAoeDg2X2Jvb3RfcGFyYW1zICsgTkVXX0NMX1BPSU5URVIpOwogCWlmICghbmV3X2RhdGEpIHsKIAkJaWYgKE9MRF9DTF9NQUdJQyAhPSAqICh1MTYgKikgT0xEX0NMX01BR0lDX0FERFIpIHsKQEAgLTkzLDkgKzkxLDYgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJY3B1X3NldCgwLCBjcHVfb25saW5lX21hcCk7CiAjZW5kaWYKLQkvKiBkZWZhdWx0IGNvbnNvbGU6ICovCi0JaWYgKCFzdHJzdHIoc2F2ZWRfY29tbWFuZF9saW5lLCAiY29uc29sZT0iKSkKLQkJc3RyY2F0KHNhdmVkX2NvbW1hbmRfbGluZSwgIiBjb25zb2xlPXR0eTAiKTsgCiAJcyA9IHN0cnN0cihzYXZlZF9jb21tYW5kX2xpbmUsICJlYXJseXByaW50az0iKTsKIAlpZiAocyAhPSBOVUxMKQogCQlzZXR1cF9lYXJseV9wcmludGsocyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jIGIvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYwppbmRleCAyOWEyNTcyLi42MGJlNTg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKQEAgLTE2MDcsNyArMTYwNyw2IEBACiAJCQkJZGlzYWJsZV84MjU5QV9pcnEoMCk7CiAJCQkJc2V0dXBfbm1pKCk7CiAJCQkJZW5hYmxlXzgyNTlBX2lycSgwKTsKLQkJCQljaGVja19ubWlfd2F0Y2hkb2coKTsKIAkJCX0KIAkJCXJldHVybjsKIAkJfQpAQCAtMTYyNyw3ICsxNjI2LDYgQEAKIAkJCW5taV93YXRjaGRvZ19kZWZhdWx0KCk7CiAJCQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7CiAJCQkJc2V0dXBfbm1pKCk7Ci0JCQkJY2hlY2tfbm1pX3dhdGNoZG9nKCk7CiAJCQl9CiAJCQlyZXR1cm47CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDRmMmE4NTIuLmY3N2Y4YTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2twcm9iZXMuYwpAQCAtMzU1LDYgKzM1NSwxMyBAQAogCQkqdG9zICY9IH4oVEZfTUFTSyB8IElGX01BU0spOwogCQkqdG9zIHw9IGtwcm9iZV9vbGRfcmZsYWdzOwogCQlicmVhazsKKwljYXNlIDB4YzM6CQkvKiByZXQvbHJldCAqLworCWNhc2UgMHhjYjoKKwljYXNlIDB4YzI6CisJY2FzZSAweGNhOgorCQlyZWdzLT5lZmxhZ3MgJj0gflRGX01BU0s7CisJCS8qIHJpcCBpcyBhbHJlYWR5IGFkanVzdGVkLCBubyBtb3JlIGNoYW5nZXMgcmVxdWlyZWQqLworCQlyZXR1cm47CiAJY2FzZSAweGU4OgkJLyogY2FsbCByZWxhdGl2ZSAtIEZpeCByZXR1cm4gYWRkciAqLwogCQkqdG9zID0gb3JpZ19yaXAgKyAoKnRvcyAtIGNvcHlfcmlwKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYzJmZmVhOC4uYmFjMTk1YyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tb2R1bGUuYwpAQCAtMzAsOSArMzAsMTIgQEAKIAogI2RlZmluZSBERUJVR1AoZm10Li4uKSAKIAorI2lmbmRlZiBDT05GSUdfVU1MCiB2b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKIHsKIAl2ZnJlZShtb2R1bGVfcmVnaW9uKTsKKwkvKiBGSVhNRTogSWYgbW9kdWxlX3JlZ2lvbiA9PSBtb2QtPmluaXRfcmVnaW9uLCB0cmltIGV4Y2VwdGlvbgorICAgICAgICAgICB0YWJsZSBlbnRyaWVzLiAqLwogfQogCiB2b2lkICptb2R1bGVfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQpAQCAtNTEsNiArNTQsNyBAQAogCiAJcmV0dXJuIF9fdm1hbGxvY19hcmVhKGFyZWEsIEdGUF9LRVJORUwsIFBBR0VfS0VSTkVMX0VYRUMpOwogfQorI2VuZGlmCiAKIC8qIFdlIGRvbid0IG5lZWQgYW55dGhpbmcgc3BlY2lhbC4gKi8KIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMKaW5kZXggZTAwZDRhZC4uNjFkZTBiMyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL25taS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYwpAQCAtMTEyLDE3ICsxMTIsMjAgQEAKIAl9IAkKIH0KIAotaW50IF9faW5pdCBjaGVja19ubWlfd2F0Y2hkb2cgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjaGVja19ubWlfd2F0Y2hkb2cgKHZvaWQpCiB7CiAJaW50IGNvdW50c1tOUl9DUFVTXTsKIAlpbnQgY3B1OwogCisJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfTk9ORSkKKwkJcmV0dXJuIDA7CisKIAlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDICYmICFjcHVfaGFzX2xhcGljKCkpICB7CiAJCW5taV93YXRjaGRvZyA9IE5NSV9OT05FOwogCQlyZXR1cm4gLTE7IAogCX0JCiAKLQlwcmludGsoS0VSTl9JTkZPICJ0ZXN0aW5nIE5NSSB3YXRjaGRvZyAuLi4gIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiVGVzdGluZyBOTUkgd2F0Y2hkb2cgLi4uICIpOwogCiAJZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykKIAkJY291bnRzW2NwdV0gPSBjcHVfcGRhW2NwdV0uX19ubWlfY291bnQ7IApAQCAtMTQ4LDYgKzE1MSw4IEBACiAKIAlyZXR1cm4gMDsKIH0KKy8qIEhhdmUgdGhpcyBjYWxsZWQgbGF0ZXIgZHVyaW5nIGJvb3Qgc28gY291bnRlcnMgYXJlIHVwZGF0aW5nICovCitsYXRlX2luaXRjYWxsKGNoZWNrX25taV93YXRjaGRvZyk7CiAKIGludCBfX2luaXQgc2V0dXBfbm1pX3dhdGNoZG9nKGNoYXIgKnN0cikKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDk5MjJkMmIuLjc2MWI2ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtNDAyLDEwICs0MDIsMTAgQEAKIAlwLT50aHJlYWQuZnMgPSBtZS0+dGhyZWFkLmZzOwogCXAtPnRocmVhZC5ncyA9IG1lLT50aHJlYWQuZ3M7CiAKLQlhc20oIm1vdmwgJSVncywlMCIgOiAiPW0iIChwLT50aHJlYWQuZ3NpbmRleCkpOwotCWFzbSgibW92bCAlJWZzLCUwIiA6ICI9bSIgKHAtPnRocmVhZC5mc2luZGV4KSk7Ci0JYXNtKCJtb3ZsICUlZXMsJTAiIDogIj1tIiAocC0+dGhyZWFkLmVzKSk7Ci0JYXNtKCJtb3ZsICUlZHMsJTAiIDogIj1tIiAocC0+dGhyZWFkLmRzKSk7CisJYXNtKCJtb3YgJSVncywlMCIgOiAiPW0iIChwLT50aHJlYWQuZ3NpbmRleCkpOworCWFzbSgibW92ICUlZnMsJTAiIDogIj1tIiAocC0+dGhyZWFkLmZzaW5kZXgpKTsKKwlhc20oIm1vdiAlJWVzLCUwIiA6ICI9bSIgKHAtPnRocmVhZC5lcykpOworCWFzbSgibW92ICUlZHMsJTAiIDogIj1tIiAocC0+dGhyZWFkLmRzKSk7CiAKIAlpZiAodW5saWtlbHkobWUtPnRocmVhZC5pb19iaXRtYXBfcHRyICE9IE5VTEwpKSB7IAogCQlwLT50aHJlYWQuaW9fYml0bWFwX3B0ciA9IGttYWxsb2MoSU9fQklUTUFQX0JZVEVTLCBHRlBfS0VSTkVMKTsKQEAgLTQ2OCwxMSArNDY4LDExIEBACiAJICogU3dpdGNoIERTIGFuZCBFUy4KIAkgKiBUaGlzIHdvbid0IHBpY2sgdXAgdGhyZWFkIHNlbGVjdG9yIGNoYW5nZXMsIGJ1dCBJIGd1ZXNzIHRoYXQgaXMgb2suCiAJICovCi0JYXNtIHZvbGF0aWxlKCJtb3ZsICUlZXMsJTAiIDogIj1tIiAocHJldi0+ZXMpKTsgCisJYXNtIHZvbGF0aWxlKCJtb3YgJSVlcywlMCIgOiAiPW0iIChwcmV2LT5lcykpOwogCWlmICh1bmxpa2VseShuZXh0LT5lcyB8IHByZXYtPmVzKSkKIAkJbG9hZHNlZ21lbnQoZXMsIG5leHQtPmVzKTsgCiAJCi0JYXNtIHZvbGF0aWxlICgibW92bCAlJWRzLCUwIiA6ICI9bSIgKHByZXYtPmRzKSk7IAorCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRzLCUwIiA6ICI9bSIgKHByZXYtPmRzKSk7CiAJaWYgKHVubGlrZWx5KG5leHQtPmRzIHwgcHJldi0+ZHMpKQogCQlsb2Fkc2VnbWVudChkcywgbmV4dC0+ZHMpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggYzcwMTE2Ny4uZTI2ZTg2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wdHJhY2UuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZWNjb21wLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC00NjcsNyArNDY4LDcgQEAKIAljYXNlIFBUUkFDRV9DT05UOiAgICAvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KIAogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCiAJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLFRJRl9TWVNDQUxMX1RSQUNFKTsKQEAgLTUyOSw3ICs1MzAsNyBAQAogCiAJY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDogICAgLyogc2V0IHRoZSB0cmFwIGZsYWcuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsVElGX1NZU0NBTExfVFJBQ0UpOwogCQlzZXRfc2luZ2xlc3RlcChjaGlsZCk7CkBAIC02MzQsMjAgKzYzNSwyOSBAQAogCS8qIGRvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGNoZWNrIGZpcnN0ICovCiAJc2VjdXJlX2NvbXB1dGluZyhyZWdzLT5vcmlnX3JheCk7CiAKLQlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCi0JCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwgcmVncy0+b3JpZ19yYXgsCi0JCQkJICAgIHJlZ3MtPnJkaSwgcmVncy0+cnNpLAotCQkJCSAgICByZWdzLT5yZHgsIHJlZ3MtPnIxMCk7Ci0KIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkKIAkgICAgJiYgKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpKQogCQlzeXNjYWxsX3RyYWNlKHJlZ3MpOworCisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKSB7CisJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSkgeworCQkJYXVkaXRfc3lzY2FsbF9lbnRyeShjdXJyZW50LCBBVURJVF9BUkNIX0kzODYsCisJCQkJCSAgICByZWdzLT5vcmlnX3JheCwKKwkJCQkJICAgIHJlZ3MtPnJieCwgcmVncy0+cmN4LAorCQkJCQkgICAgcmVncy0+cmR4LCByZWdzLT5yc2kpOworCQl9IGVsc2UgeworCQkJYXVkaXRfc3lzY2FsbF9lbnRyeShjdXJyZW50LCBBVURJVF9BUkNIX1g4Nl82NCwKKwkJCQkJICAgIHJlZ3MtPm9yaWdfcmF4LAorCQkJCQkgICAgcmVncy0+cmRpLCByZWdzLT5yc2ksCisJCQkJCSAgICByZWdzLT5yZHgsIHJlZ3MtPnIxMCk7CisJCX0KKwl9CiB9CiAKIGFzbWxpbmthZ2Ugdm9pZCBzeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKLQkJYXVkaXRfc3lzY2FsbF9leGl0KGN1cnJlbnQsIHJlZ3MtPnJheCk7CisJCWF1ZGl0X3N5c2NhbGxfZXhpdChjdXJyZW50LCBBVURJVFNDX1JFU1VMVChyZWdzLT5yYXgpLCByZWdzLT5yYXgpOwogCiAJaWYgKCh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKQogCSAgICAgfHwgdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IGIxOGMxMTQuLjIxMjljZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCkBAIC05NzcsNyArOTc3LDcgQEAKIAlpZiAoKHhsdmwgJiAweGZmZmYwMDAwKSA9PSAweDgwMDAwMDAwKSB7CiAJCWlmICh4bHZsID49IDB4ODAwMDAwMDEpIHsKIAkJCWMtPng4Nl9jYXBhYmlsaXR5WzFdID0gY3B1aWRfZWR4KDB4ODAwMDAwMDEpOwotCQkJYy0+eDg2X2NhcGFiaWxpdHlbNV0gPSBjcHVpZF9lY3goMHg4MDAwMDAwMSk7CisJCQljLT54ODZfY2FwYWJpbGl0eVs2XSA9IGNwdWlkX2VjeCgweDgwMDAwMDAxKTsKIAkJfQogCQlpZiAoeGx2bCA+PSAweDgwMDAwMDA0KQogCQkJZ2V0X21vZGVsX25hbWUoYyk7IC8qIERlZmF1bHQgbmFtZSAqLwpAQCAtMTA3Niw3ICsxMDc2LDcgQEAKIAkgICAgICAgICJmeHNyIiwgInNzZSIsICJzc2UyIiwgInNzIiwgImh0IiwgInRtIiwgImlhNjQiLCBOVUxMLAogCiAJCS8qIEFNRC1kZWZpbmVkICovCi0JCSJwbmkiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCQlOVUxMLCBOVUxMLCBOVUxMLCAic3lzY2FsbCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJueCIsIE5VTEwsICJtbXhleHQiLCBOVUxMLAogCQlOVUxMLCAiZnhzcl9vcHQiLCBOVUxMLCBOVUxMLCBOVUxMLCAibG0iLCAiM2Rub3dleHQiLCAiM2Rub3ciLApAQCAtMTEwMCwxMSArMTEwMCwxNyBAQAogCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCisJCS8qIFZJQS9DeXJpeC9DZW50YXVyLWRlZmluZWQgKi8KKwkJTlVMTCwgTlVMTCwgInJuZyIsICJybmdfZW4iLCBOVUxMLCBOVUxMLCAiYWNlIiwgImFjZV9lbiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisKIAkJLyogQU1ELWRlZmluZWQgKCMyKSAqLwogCQkibGFoZl9sbSIsICJjbXBfbGVnYWN5IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCX07CiAJc3RhdGljIGNoYXIgKng4Nl9wb3dlcl9mbGFnc1tdID0geyAKIAkJInRzIiwJLyogdGVtcGVyYXR1cmUgc2Vuc29yICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXA2NC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwNjQuYwppbmRleCBiNTMwNWIwLi42NzhiN2FjIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXA2NC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cDY0LmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RzZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9wZGEuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTI2LDcgKzI3LDcgQEAKICNpbmNsdWRlIDxhc20vbW1hbi5oPgogI2luY2x1ZGUgPGFzbS9udW1hLmg+CiAKLWNoYXIgeDg2X2Jvb3RfcGFyYW1zWzIwNDhdIF9faW5pdGRhdGEgPSB7MCx9OworY2hhciB4ODZfYm9vdF9wYXJhbXNbQk9PVF9QQVJBTV9TSVpFXSBfX2luaXRkYXRhID0gezAsfTsKIAogY3B1bWFza190IGNwdV9pbml0aWFsaXplZCBfX2luaXRkYXRhID0gQ1BVX01BU0tfTk9ORTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NpZ25hbC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3NpZ25hbC5jCmluZGV4IDc3NjAyMjQuLmQ0MzljZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2lnbmFsLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAogc3RydWN0IHJ0X3NpZ2ZyYW1lCiB7Ci0JY2hhciAqcHJldGNvZGU7CisJY2hhciBfX3VzZXIgKnByZXRjb2RlOwogCXN0cnVjdCB1Y29udGV4dCB1YzsKIAlzdHJ1Y3Qgc2lnaW5mbyBpbmZvOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zeXNfeDg2XzY0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc3lzX3g4Nl82NC5jCmluZGV4IDQ3N2Q4YmUuLmRiZWJkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zeXNfeDg2XzY0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3N5c194ODZfNjQuYwpAQCAtMTUyLDEyICsxNTIsNiBAQAogCXJldHVybiBlcnIgPyAtRUZBVUxUIDogMDsKIH0KIAotYXNtbGlua2FnZSBsb25nIHdyYXBfc3lzX3NobWF0KGludCBzaG1pZCwgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcpCi17Ci0JdW5zaWduZWQgbG9uZyByYWRkcjsKLQlyZXR1cm4gZG9fc2htYXQoc2htaWQsc2htYWRkcixzaG1mbGcsJnJhZGRyKSA/OiAobG9uZylyYWRkcjsKLX0KLQogYXNtbGlua2FnZSBsb25nIHN5c190aW1lNjQobG9uZyBfX3VzZXIgKiB0bG9jKQogewogCXN0cnVjdCB0aW1ldmFsIG5vdzsgCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwveDg2NjRfa3N5bXMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCmluZGV4IDg4NjI2ZTYuLmE0M2RlZGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jCkBAIC0xMzksMzUgKzEzOSwyMyBAQAogI3VuZGVmIG1lbW1vdmUKICN1bmRlZiBtZW1jaHIKICN1bmRlZiBzdHJsZW4KLSN1bmRlZiBzdHJjcHkKICN1bmRlZiBzdHJuY21wCiAjdW5kZWYgc3RybmNweQogI3VuZGVmIHN0cmNocgkKLSN1bmRlZiBzdHJjbXAgCi0jdW5kZWYgc3RyY3B5IAotI3VuZGVmIHN0cmNhdAotI3VuZGVmIG1lbWNtcAogCiBleHRlcm4gdm9pZCAqIG1lbXNldCh2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7CiBleHRlcm4gc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopOwogZXh0ZXJuIHZvaWQgKiBtZW1tb3ZlKHZvaWQgKiBkZXN0LGNvbnN0IHZvaWQgKnNyYyxzaXplX3QgY291bnQpOwotZXh0ZXJuIGNoYXIgKiBzdHJjcHkoY2hhciAqIGRlc3QsY29uc3QgY2hhciAqc3JjKTsKLWV4dGVybiBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3QpOwogZXh0ZXJuIHZvaWQgKm1lbWNocihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pOwogZXh0ZXJuIHZvaWQgKiBtZW1jcHkodm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwogZXh0ZXJuIHZvaWQgKiBfX21lbWNweSh2b2lkICosY29uc3Qgdm9pZCAqLF9fa2VybmVsX3NpemVfdCk7Ci1leHRlcm4gY2hhciAqIHN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICogY3MsY29uc3Qgdm9pZCAqIGN0LHNpemVfdCBjb3VudCk7CiAKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKIEVYUE9SVF9TWU1CT0wobWVtbW92ZSk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNweSk7CiBFWFBPUlRfU1lNQk9MKHN0cm5jbXApOwogRVhQT1JUX1NZTUJPTChzdHJuY3B5KTsKIEVYUE9SVF9TWU1CT0woc3RyY2hyKTsKLUVYUE9SVF9TWU1CT0woc3RyY21wKTsKLUVYUE9SVF9TWU1CT0woc3RyY2F0KTsKIEVYUE9SVF9TWU1CT0woc3RybmNhdCk7CiBFWFBPUlRfU1lNQk9MKG1lbWNocik7CiBFWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwpAQCAtMTc1LDcgKzE2Myw2IEBACiBFWFBPUlRfU1lNQk9MKG1lbXNjYW4pOwogRVhQT1JUX1NZTUJPTChtZW1jcHkpOwogRVhQT1JUX1NZTUJPTChfX21lbWNweSk7Ci1FWFBPUlRfU1lNQk9MKG1lbWNtcCk7CiAKICNpZmRlZiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0KIC8qIHByb3RvdHlwZXMgYXJlIHdyb25nLCB0aGVzZSBhcmUgYXNzZW1ibHkgd2l0aCBjdXN0b20gY2FsbGluZyBmdW5jdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2xpYi9wdXR1c2VyLlMgYi9hcmNoL3g4Nl82NC9saWIvcHV0dXNlci5TCmluZGV4IGQ5ZDNlNWUuLjU4MjhiODEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2xpYi9wdXR1c2VyLlMKKysrIGIvYXJjaC94ODZfNjQvbGliL3B1dHVzZXIuUwpAQCAtNDksOCArNDksOCBAQAogCWpjIDIwZgogCWNtcHEgdGhyZWFkaW5mb19hZGRyX2xpbWl0KCVyOCksJXJjeAogCWphZSAyMGYKLTI6CWRlY3EgJXJjeAotCW1vdncgJWR4LCglcmN4KQorCWRlY3EgJXJjeAorMjoJbW92dyAlZHgsKCVyY3gpCiAJeG9ybCAlZWF4LCVlYXgKIAlyZXQKIDIwOglkZWNxICVyY3gKQEAgLTY0LDggKzY0LDggQEAKIAlqYyAzMGYKIAljbXBxIHRocmVhZGluZm9fYWRkcl9saW1pdCglcjgpLCVyY3gKIAlqYWUgMzBmCi0zOglzdWJxICQzLCVyY3gKLQltb3ZsICVlZHgsKCVyY3gpCisJc3VicSAkMywlcmN4CiszOgltb3ZsICVlZHgsKCVyY3gpCiAJeG9ybCAlZWF4LCVlYXgKIAlyZXQKIDMwOglzdWJxICQzLCVyY3gKQEAgLTc5LDggKzc5LDggQEAKIAlqYyA0MGYKIAljbXBxIHRocmVhZGluZm9fYWRkcl9saW1pdCglcjgpLCVyY3gKIAlqYWUgNDBmCi00OglzdWJxICQ3LCVyY3gKLQltb3ZxICVyZHgsKCVyY3gpCisJc3VicSAkNywlcmN4Cis0Ogltb3ZxICVyZHgsKCVyY3gpCiAJeG9ybCAlZWF4LCVlYXgKIAlyZXQKIDQwOglzdWJxICQ3LCVyY3gKZGlmZiAtLWdpdCBhL2NyeXB0by9LY29uZmlnIGIvY3J5cHRvL0tjb25maWcKaW5kZXggNTM2NzU0Zi4uOTBkNjA4OSAxMDA2NDQKLS0tIGEvY3J5cHRvL0tjb25maWcKKysrIGIvY3J5cHRvL0tjb25maWcKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiBjb25maWcgQ1JZUFRPX0FFUwogCXRyaXN0YXRlICJBRVMgY2lwaGVyIGFsZ29yaXRobXMiCi0JZGVwZW5kcyBvbiBDUllQVE8gJiYgIShYODYgJiYgIVg4Nl82NCkKKwlkZXBlbmRzIG9uIENSWVBUTyAmJiAhKChYODYgfHwgVU1MX1g4NikgJiYgITY0QklUKQogCWhlbHAKIAkgIEFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoRklQUy0xOTcpLiBBRVMgdXNlcyB0aGUgUmlqbmRhZWwgCiAJICBhbGdvcml0aG0uCkBAIC0xNjYsNyArMTY2LDcgQEAKIAogY29uZmlnIENSWVBUT19BRVNfNTg2CiAJdHJpc3RhdGUgIkFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoaTU4NikiCi0JZGVwZW5kcyBvbiBDUllQVE8gJiYgKFg4NiAmJiAhWDg2XzY0KQorCWRlcGVuZHMgb24gQ1JZUFRPICYmICgoWDg2IHx8IFVNTF9YODYpICYmICE2NEJJVCkKIAloZWxwCiAJICBBRVMgY2lwaGVyIGFsZ29yaXRobXMgKEZJUFMtMTk3KS4gQUVTIHVzZXMgdGhlIFJpam5kYWVsIAogCSAgYWxnb3JpdGhtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCAwNWExNzgxLi5mZjY0ZDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtODM4LDcgKzgzOCw3IEBACiAKIAkvKiBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgaWRsZSBsb29wICovCiAJcG1faWRsZSA9IHBtX2lkbGVfc2F2ZTsKLQlzeW5jaHJvbml6ZV9rZXJuZWwoKTsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOyAgLyogUmVsaWVzIG9uIGludGVycnVwdHMgZm9yY2luZyBleGl0IGZyb20gaWRsZS4gKi8KIAogCXByLT5mbGFncy5wb3dlciA9IDA7CiAJcmVzdWx0ID0gYWNwaV9wcm9jZXNzb3JfZ2V0X3Bvd2VyX2luZm8ocHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggZTdjYTA2Ni4uMTE5Yzk0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NjYW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCkBAIC0zNzksOCArMzc5LDggQEAKIAogLyoqCiAgKiBzZXR1cF9zeXNfZnNfZGV2aWNlX2ZpbGVzIC0gc2V0cyB1cCB0aGUgZGV2aWNlIGZpbGVzIHVuZGVyIGRldmljZSBuYW1lc3BhY2UKLSAqIEBAZGV2OglhY3BpX2RldmljZSBvYmplY3QKLSAqIEBAZnVuYzoJZnVuY3Rpb24gcG9pbnRlciB0byBjcmVhdGUgb3IgZGVzdHJveSB0aGUgZGV2aWNlIGZpbGUKKyAqIEBkZXY6CWFjcGlfZGV2aWNlIG9iamVjdAorICogQGZ1bmM6CWZ1bmN0aW9uIHBvaW50ZXIgdG8gY3JlYXRlIG9yIGRlc3Ryb3kgdGhlIGRldmljZSBmaWxlCiAgKi8KIHN0YXRpYyB2b2lkCiBzZXR1cF9zeXNfZnNfZGV2aWNlX2ZpbGVzICgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2VuaS5jIGIvZHJpdmVycy9hdG0vZW5pLmMKaW5kZXggNzhlMzRlZS4uMTBkYTM2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZW5pLmMKKysrIGIvZHJpdmVycy9hdG0vZW5pLmMKQEAgLTU5LDcgKzU5LDYgQEAKICAqIC0gZG9lc24ndCBzdXBwb3J0IE9BTSBjZWxscwogICogLSBlbmlfcHV0X2ZyZWUgbWF5IGhhbmcgaWYgbm90IHB1dHRpbmcgbWVtb3J5IGZyYWdtZW50cyB0aGF0IF9jb21wbGV0ZV8KICAqICAgMl5uIGJsb2NrIChuZXZlciBoYXBwZW5zIGluIHJlYWwgbGlmZSwgdGhvdWdoKQotICogLSBrZWVwcyBJUlEgZXZlbiBpZiBpbml0aWFsaXphdGlvbiBmYWlscwogICovCiAKIApAQCAtMTgwMiwyMiArMTgwMSwyMiBAQAogCWlmIChyZXF1ZXN0X2lycShlbmlfZGV2LT5pcnEsJmVuaV9pbnQsU0FfU0hJUlEsREVWX0xBQkVMLGRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERFVl9MQUJFTCAiKGl0ZiAlZCk6IElSUSVkIGlzIGFscmVhZHkgaW4gdXNlXG4iLAogCQkgICAgZGV2LT5udW1iZXIsZW5pX2Rldi0+aXJxKTsKLQkJcmV0dXJuIC1FQUdBSU47CisJCWVycm9yID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CiAJfQotCS8qIEBAQCBzaG91bGQgcmVsZWFzZSBJUlEgb24gZXJyb3IgKi8KIAlwY2lfc2V0X21hc3RlcihlbmlfZGV2LT5wY2lfZGV2KTsKIAlpZiAoKGVycm9yID0gcGNpX3dyaXRlX2NvbmZpZ193b3JkKGVuaV9kZXYtPnBjaV9kZXYsUENJX0NPTU1BTkQsCiAJICAgIFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUiB8CiAJICAgIChlbmlfZGV2LT5hc2ljID8gUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfU0VSUiA6IDApKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERFVl9MQUJFTCAiKGl0ZiAlZCk6IGNhbid0IGVuYWJsZSBtZW1vcnkrIgogCQkgICAgIm1hc3RlciAoMHglMDJ4KVxuIixkZXYtPm51bWJlcixlcnJvcik7Ci0JCXJldHVybiBlcnJvcjsKKwkJZ290byBmcmVlX2lycTsKIAl9CiAJaWYgKChlcnJvciA9IHBjaV93cml0ZV9jb25maWdfYnl0ZShlbmlfZGV2LT5wY2lfZGV2LFBDSV9UT05HQV9DVFJMLAogCSAgICBFTkRfU1dBUF9ETUEpKSkgewogCQlwcmludGsoS0VSTl9FUlIgREVWX0xBQkVMICIoaXRmICVkKTogY2FuJ3Qgc2V0IGVuZGlhbiBzd2FwICIKIAkJICAgICIoMHglMDJ4KVxuIixkZXYtPm51bWJlcixlcnJvcik7Ci0JCXJldHVybiBlcnJvcjsKKwkJZ290byBmcmVlX2lycTsKIAl9CiAJLyogZGV0ZXJtaW5lIGFkZHJlc3NlcyBvZiBpbnRlcm5hbCB0YWJsZXMgKi8KIAllbmlfZGV2LT52Y2kgPSBlbmlfZGV2LT5yYW07CkBAIC0xODM5LDcgKzE4MzgsOCBAQAogCWlmICghZW5pX2Rldi0+ZnJlZV9saXN0KSB7CiAJCXByaW50ayhLRVJOX0VSUiBERVZfTEFCRUwgIihpdGYgJWQpOiBjb3VsZG4ndCBnZXQgZnJlZSBwYWdlXG4iLAogCQkgICAgZGV2LT5udW1iZXIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfaXJxOwogCX0KIAllbmlfZGV2LT5mcmVlX2xlbiA9IDA7CiAJZW5pX3B1dF9mcmVlKGVuaV9kZXYsYnVmLGJ1ZmZlcl9tZW0pOwpAQCAtMTg1NSwxNyArMTg1NSwyNiBAQAogCSAqLwogCWVuaV9vdXQoMHhmZmZmZmZmZixNSURfSUUpOwogCWVycm9yID0gc3RhcnRfdHgoZGV2KTsKLQlpZiAoZXJyb3IpIHJldHVybiBlcnJvcjsKKwlpZiAoZXJyb3IpIGdvdG8gZnJlZV9saXN0OwogCWVycm9yID0gc3RhcnRfcngoZGV2KTsKLQlpZiAoZXJyb3IpIHJldHVybiBlcnJvcjsKKwlpZiAoZXJyb3IpIGdvdG8gZnJlZV9saXN0OwogCWVycm9yID0gZGV2LT5waHktPnN0YXJ0KGRldik7Ci0JaWYgKGVycm9yKSByZXR1cm4gZXJyb3I7CisJaWYgKGVycm9yKSBnb3RvIGZyZWVfbGlzdDsKIAllbmlfb3V0KGVuaV9pbihNSURfTUNfUykgfCAoMSA8PCBNSURfSU5UX1NFTF9TSElGVCkgfAogCSAgICBNSURfVFhfTE9DS19NT0RFIHwgTUlEX0RNQV9FTkFCTEUgfCBNSURfVFhfRU5BQkxFIHwgTUlEX1JYX0VOQUJMRSwKIAkgICAgTUlEX01DX1MpOwogCSAgICAvKiBUb25nYSB1c2VzIFNCdXMgSU5UUmVxMSAqLwogCSh2b2lkKSBlbmlfaW4oTUlEX0lTQSk7IC8qIGNsZWFyIE1pZHdheSBpbnRlcnJ1cHRzICovCiAJcmV0dXJuIDA7CisKK2ZyZWVfbGlzdDoKKwlrZnJlZShlbmlfZGV2LT5mcmVlX2xpc3QpOworCitmcmVlX2lycToKKwlmcmVlX2lycShlbmlfZGV2LT5pcnEsIGVuaV9kZXYpOworCitvdXQ6CisJcmV0dXJuIGVycm9yOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCmluZGV4IDE5NmIzMzYuLjllNjViZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKKysrIGIvZHJpdmVycy9hdG0vZm9yZTIwMGUuYwpAQCAtMjc5Miw4ICsyNzkyLDYgQEAKIAogICAgIGZvcmUyMDBlID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOwogCi0gICAgbGlzdF9kZWwoJmZvcmUyMDBlLT5lbnRyeSk7Ci0KICAgICBmb3JlMjAwZV9zaHV0ZG93bihmb3JlMjAwZSk7CiAgICAga2ZyZWUoZm9yZTIwMGUpOwogICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKQEAgLTI4NTAsNyArMjg0OCw3IEBACiAgICAgfQogCiAjaWZkZWYgQ09ORklHX0FUTV9GT1JFMjAwRV9QQ0EKLSAgICBpZiAoIXBjaV9tb2R1bGVfaW5pdCgmZm9yZTIwMGVfcGNhX2RyaXZlcikpCisgICAgaWYgKCFwY2lfcmVnaXN0ZXJfZHJpdmVyKCZmb3JlMjAwZV9wY2FfZHJpdmVyKSkKIAlyZXR1cm4gMDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9oZS5jIGIvZHJpdmVycy9hdG0vaGUuYwppbmRleCBjMmMzMWE1Li4zMDIyYzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9oZS5jCisrKyBiL2RyaXZlcnMvYXRtL2hlLmMKQEAgLTcwLDYgKzcwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTM3MSw3ICszNzIsNyBAQAogCiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpKQogCQlyZXR1cm4gLUVJTzsKLQlpZiAocGNpX3NldF9kbWFfbWFzayhwY2lfZGV2LCBIRV9ETUFfTUFTSykgIT0gMCkgeworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIERNQV8zMkJJVF9NQVNLKSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImhlOiBubyBzdWl0YWJsZSBkbWEgYXZhaWxhYmxlXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBpbml0X29uZV9mYWlsdXJlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaGUuaCBiL2RyaXZlcnMvYXRtL2hlLmgKaW5kZXggMWE5MDM4NS4uMWRjMjc3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaGUuaAorKysgYi9kcml2ZXJzL2F0bS9oZS5oCkBAIC0zODAsOCArMzgwLDYgQEAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GT1JFCTB4MTEyNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0ZPUkVfSEUJMHg0MDAKIAotI2RlZmluZSBIRV9ETUFfTUFTSwkJMHhmZmZmZmZmZgotCiAjZGVmaW5lIEdFTl9DTlRMXzAJCQkJMHg0MAogI2RlZmluZSAgSU5UX1BST0NfRU5CTAkJKDE8PDI1KQogI2RlZmluZSAgU0xBVkVfRU5ESUFOX01PREUJKDE8PDE2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2J1cy5jIGIvZHJpdmVycy9iYXNlL2J1cy5jCmluZGV4IGY0ZmEyNzMuLjJiMzkwMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9idXMuYworKysgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKQEAgLTQwNSw5ICs0MDUsOCBAQAogCiBzdGF0aWMgdm9pZCBkcml2ZXJfZGV0YWNoKHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZHJ2KQogewotCXN0cnVjdCBsaXN0X2hlYWQgKiBlbnRyeSwgKiBuZXh0OwotCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgbmV4dCwgJmRydi0+ZGV2aWNlcykgewotCQlzdHJ1Y3QgZGV2aWNlICogZGV2ID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgZGV2aWNlLCBkcml2ZXJfbGlzdCk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcnYtPmRldmljZXMpKSB7CisJCXN0cnVjdCBkZXZpY2UgKiBkZXYgPSBjb250YWluZXJfb2YoZHJ2LT5kZXZpY2VzLm5leHQsIHN0cnVjdCBkZXZpY2UsIGRyaXZlcl9saXN0KTsKIAkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggYTdjZWRkOC4uMjY4YTljOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAlidWZmZXIgPSAmYnVmZmVyW2xlbmd0aF07CiAJYnVmZmVyX3NpemUgLT0gbGVuZ3RoOwogCi0JaWYgKGRldi0+YnVzLT5ob3RwbHVnKSB7CisJaWYgKGRldi0+YnVzICYmIGRldi0+YnVzLT5ob3RwbHVnKSB7CiAJCS8qIGhhdmUgdGhlIGJ1cyBzcGVjaWZpYyBmdW5jdGlvbiBhZGQgaXRzIHN0dWZmICovCiAJCXJldHZhbCA9IGRldi0+YnVzLT5ob3RwbHVnIChkZXYsIGVudnAsIG51bV9lbnZwLCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKIAkJCWlmIChyZXR2YWwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggY2Q2NDUzOS4uM2E1ZjRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAvKioKICAqCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlciAtIGFkZCBhIHBsYXRmb3JtLWxldmVsIGRldmljZQotICoJQGRldjoJcGxhdGZvcm0gZGV2aWNlIHdlJ3JlIGFkZGluZworICoJQHBkZXY6CXBsYXRmb3JtIGRldmljZSB3ZSdyZSBhZGRpbmcKICAqCiAgKi8KIGludCBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIHBkZXYpCkBAIC0xNzQsNyArMTc0LDcgQEAKIAogLyoqCiAgKglwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlciAtIHJlbW92ZSBhIHBsYXRmb3JtLWxldmVsIGRldmljZQotICoJQGRldjoJcGxhdGZvcm0gZGV2aWNlIHdlJ3JlIHJlbW92aW5nCisgKglAcGRldjoJcGxhdGZvcm0gZGV2aWNlIHdlJ3JlIHJlbW92aW5nCiAgKgogICoJTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIHJlbGVhc2UgYWxsIG1lbW9yeS0gYW5kIHBvcnQtYmFzZWQKICAqCXJlc291cmNlcyBvd25lZCBieSB0aGUgZGV2aWNlIChAZGV2LT5yZXNvdXJjZSkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwppbmRleCA0MjNiYmYyLi4zNzYwZWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCisrKyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKQEAgLTMsNiArMyw3IEBACiAgIExpbnV4IERyaXZlciBmb3IgTXlsZXggREFDOTYwL0FjY2VsZVJBSUQvZVh0cmVtZVJBSUQgUENJIFJBSUQgQ29udHJvbGxlcnMKIAogICBDb3B5cmlnaHQgMTk5OC0yMDAxIGJ5IExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisgIFBvcnRpb25zIENvcHlyaWdodCAyMDAyIGJ5IE15bGV4IChBbiBJQk0gQnVzaW5lc3MgVW5pdCkKIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgogICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC01MzIsNiArNTMzLDM0IEBACiAgIHNwaW5fbG9ja19pcnEoJkNvbnRyb2xsZXItPnF1ZXVlX2xvY2spOwogfQogCisvKgorICBEQUM5NjBfR0VNX1F1ZXVlQ29tbWFuZCBxdWV1ZXMgQ29tbWFuZCBmb3IgREFDOTYwIEdFTSBTZXJpZXMgQ29udHJvbGxlcnMuCisqLworCitzdGF0aWMgdm9pZCBEQUM5NjBfR0VNX1F1ZXVlQ29tbWFuZChEQUM5NjBfQ29tbWFuZF9UICpDb21tYW5kKQoreworICBEQUM5NjBfQ29udHJvbGxlcl9UICpDb250cm9sbGVyID0gQ29tbWFuZC0+Q29udHJvbGxlcjsKKyAgdm9pZCBfX2lvbWVtICpDb250cm9sbGVyQmFzZUFkZHJlc3MgPSBDb250cm9sbGVyLT5CYXNlQWRkcmVzczsKKyAgREFDOTYwX1YyX0NvbW1hbmRNYWlsYm94X1QgKkNvbW1hbmRNYWlsYm94ID0gJkNvbW1hbmQtPlYyLkNvbW1hbmRNYWlsYm94OworICBEQUM5NjBfVjJfQ29tbWFuZE1haWxib3hfVCAqTmV4dENvbW1hbmRNYWlsYm94ID0KKyAgICAgIENvbnRyb2xsZXItPlYyLk5leHRDb21tYW5kTWFpbGJveDsKKworICBDb21tYW5kTWFpbGJveC0+Q29tbW9uLkNvbW1hbmRJZGVudGlmaWVyID0gQ29tbWFuZC0+Q29tbWFuZElkZW50aWZpZXI7CisgIERBQzk2MF9HRU1fV3JpdGVDb21tYW5kTWFpbGJveChOZXh0Q29tbWFuZE1haWxib3gsIENvbW1hbmRNYWlsYm94KTsKKworICBpZiAoQ29udHJvbGxlci0+VjIuUHJldmlvdXNDb21tYW5kTWFpbGJveDEtPldvcmRzWzBdID09IDAgfHwKKyAgICAgIENvbnRyb2xsZXItPlYyLlByZXZpb3VzQ29tbWFuZE1haWxib3gyLT5Xb3Jkc1swXSA9PSAwKQorICAgICAgREFDOTYwX0dFTV9NZW1vcnlNYWlsYm94TmV3Q29tbWFuZChDb250cm9sbGVyQmFzZUFkZHJlc3MpOworCisgIENvbnRyb2xsZXItPlYyLlByZXZpb3VzQ29tbWFuZE1haWxib3gyID0KKyAgICAgIENvbnRyb2xsZXItPlYyLlByZXZpb3VzQ29tbWFuZE1haWxib3gxOworICBDb250cm9sbGVyLT5WMi5QcmV2aW91c0NvbW1hbmRNYWlsYm94MSA9IE5leHRDb21tYW5kTWFpbGJveDsKKworICBpZiAoKytOZXh0Q29tbWFuZE1haWxib3ggPiBDb250cm9sbGVyLT5WMi5MYXN0Q29tbWFuZE1haWxib3gpCisgICAgICBOZXh0Q29tbWFuZE1haWxib3ggPSBDb250cm9sbGVyLT5WMi5GaXJzdENvbW1hbmRNYWlsYm94OworCisgIENvbnRyb2xsZXItPlYyLk5leHRDb21tYW5kTWFpbGJveCA9IE5leHRDb21tYW5kTWFpbGJveDsKK30KIAogLyoKICAgREFDOTYwX0JBX1F1ZXVlQ29tbWFuZCBxdWV1ZXMgQ29tbWFuZCBmb3IgREFDOTYwIEJBIFNlcmllcyBDb250cm9sbGVycy4KQEAgLTE0NjQsNiArMTQ5MywxNyBAQAogICAgIAkJCQkJQ29udHJvbGxlci0+VjIuRmlyc3RTdGF0dXNNYWlsYm94RE1BOwogICBzd2l0Y2ggKENvbnRyb2xsZXItPkhhcmR3YXJlVHlwZSkKICAgICB7CisgICAgY2FzZSBEQUM5NjBfR0VNX0NvbnRyb2xsZXI6CisgICAgICB3aGlsZSAoREFDOTYwX0dFTV9IYXJkd2FyZU1haWxib3hGdWxsUChDb250cm9sbGVyQmFzZUFkZHJlc3MpKQorCXVkZWxheSgxKTsKKyAgICAgIERBQzk2MF9HRU1fV3JpdGVIYXJkd2FyZU1haWxib3goQ29udHJvbGxlckJhc2VBZGRyZXNzLCBDb21tYW5kTWFpbGJveERNQSk7CisgICAgICBEQUM5NjBfR0VNX0hhcmR3YXJlTWFpbGJveE5ld0NvbW1hbmQoQ29udHJvbGxlckJhc2VBZGRyZXNzKTsKKyAgICAgIHdoaWxlICghREFDOTYwX0dFTV9IYXJkd2FyZU1haWxib3hTdGF0dXNBdmFpbGFibGVQKENvbnRyb2xsZXJCYXNlQWRkcmVzcykpCisJdWRlbGF5KDEpOworICAgICAgQ29tbWFuZFN0YXR1cyA9IERBQzk2MF9HRU1fUmVhZENvbW1hbmRTdGF0dXMoQ29udHJvbGxlckJhc2VBZGRyZXNzKTsKKyAgICAgIERBQzk2MF9HRU1fQWNrbm93bGVkZ2VIYXJkd2FyZU1haWxib3hJbnRlcnJ1cHQoQ29udHJvbGxlckJhc2VBZGRyZXNzKTsKKyAgICAgIERBQzk2MF9HRU1fQWNrbm93bGVkZ2VIYXJkd2FyZU1haWxib3hTdGF0dXMoQ29udHJvbGxlckJhc2VBZGRyZXNzKTsKKyAgICAgIGJyZWFrOwogICAgIGNhc2UgREFDOTYwX0JBX0NvbnRyb2xsZXI6CiAgICAgICB3aGlsZSAoREFDOTYwX0JBX0hhcmR3YXJlTWFpbGJveEZ1bGxQKENvbnRyb2xsZXJCYXNlQWRkcmVzcykpCiAJdWRlbGF5KDEpOwpAQCAtMjYyNyw2ICsyNjY3LDkgQEAKICAgaWYgKENvbnRyb2xsZXItPk1lbW9yeU1hcHBlZEFkZHJlc3MpIHsKICAgCXN3aXRjaChDb250cm9sbGVyLT5IYXJkd2FyZVR5cGUpCiAgIAl7CisJCWNhc2UgREFDOTYwX0dFTV9Db250cm9sbGVyOgorCQkJREFDOTYwX0dFTV9EaXNhYmxlSW50ZXJydXB0cyhDb250cm9sbGVyLT5CYXNlQWRkcmVzcyk7CisJCQlicmVhazsKIAkJY2FzZSBEQUM5NjBfQkFfQ29udHJvbGxlcjoKIAkJCURBQzk2MF9CQV9EaXNhYmxlSW50ZXJydXB0cyhDb250cm9sbGVyLT5CYXNlQWRkcmVzcyk7CiAJCQlicmVhazsKQEAgLTI3MDUsNiArMjc0OCw5IEBACiAKICAgc3dpdGNoIChDb250cm9sbGVyLT5IYXJkd2FyZVR5cGUpCiAgIHsKKwljYXNlIERBQzk2MF9HRU1fQ29udHJvbGxlcjoKKwkgIENvbnRyb2xsZXItPlBDSV9BZGRyZXNzID0gcGNpX3Jlc291cmNlX3N0YXJ0KFBDSV9EZXZpY2UsIDApOworCSAgYnJlYWs7CiAJY2FzZSBEQUM5NjBfQkFfQ29udHJvbGxlcjoKIAkgIENvbnRyb2xsZXItPlBDSV9BZGRyZXNzID0gcGNpX3Jlc291cmNlX3N0YXJ0KFBDSV9EZXZpY2UsIDApOwogCSAgYnJlYWs7CkBAIC0yNzU2LDYgKzI4MDIsMzYgQEAKICAgQmFzZUFkZHJlc3MgPSBDb250cm9sbGVyLT5CYXNlQWRkcmVzczsKICAgc3dpdGNoIChDb250cm9sbGVyLT5IYXJkd2FyZVR5cGUpCiAgIHsKKwljYXNlIERBQzk2MF9HRU1fQ29udHJvbGxlcjoKKwkgIERBQzk2MF9HRU1fRGlzYWJsZUludGVycnVwdHMoQmFzZUFkZHJlc3MpOworCSAgREFDOTYwX0dFTV9BY2tub3dsZWRnZUhhcmR3YXJlTWFpbGJveFN0YXR1cyhCYXNlQWRkcmVzcyk7CisJICB1ZGVsYXkoMTAwMCk7CisJICB3aGlsZSAoREFDOTYwX0dFTV9Jbml0aWFsaXphdGlvbkluUHJvZ3Jlc3NQKEJhc2VBZGRyZXNzKSkKKwkgICAgeworCSAgICAgIGlmIChEQUM5NjBfR0VNX1JlYWRFcnJvclN0YXR1cyhCYXNlQWRkcmVzcywgJkVycm9yU3RhdHVzLAorCQkJCQkgICAgJlBhcmFtZXRlcjAsICZQYXJhbWV0ZXIxKSAmJgorCQkgIERBQzk2MF9SZXBvcnRFcnJvclN0YXR1cyhDb250cm9sbGVyLCBFcnJvclN0YXR1cywKKwkJCQkJICAgUGFyYW1ldGVyMCwgUGFyYW1ldGVyMSkpCisJCWdvdG8gRmFpbHVyZTsKKwkgICAgICB1ZGVsYXkoMTApOworCSAgICB9CisJICBpZiAoIURBQzk2MF9WMl9FbmFibGVNZW1vcnlNYWlsYm94SW50ZXJmYWNlKENvbnRyb2xsZXIpKQorCSAgICB7CisJICAgICAgREFDOTYwX0Vycm9yKCJVbmFibGUgdG8gRW5hYmxlIE1lbW9yeSBNYWlsYm94IEludGVyZmFjZSAiCisJCQkgICAiZm9yIENvbnRyb2xsZXIgYXRcbiIsIENvbnRyb2xsZXIpOworCSAgICAgIGdvdG8gRmFpbHVyZTsKKwkgICAgfQorCSAgREFDOTYwX0dFTV9FbmFibGVJbnRlcnJ1cHRzKEJhc2VBZGRyZXNzKTsKKwkgIENvbnRyb2xsZXItPlF1ZXVlQ29tbWFuZCA9IERBQzk2MF9HRU1fUXVldWVDb21tYW5kOworCSAgQ29udHJvbGxlci0+UmVhZENvbnRyb2xsZXJDb25maWd1cmF0aW9uID0KKwkgICAgREFDOTYwX1YyX1JlYWRDb250cm9sbGVyQ29uZmlndXJhdGlvbjsKKwkgIENvbnRyb2xsZXItPlJlYWREZXZpY2VDb25maWd1cmF0aW9uID0KKwkgICAgREFDOTYwX1YyX1JlYWREZXZpY2VDb25maWd1cmF0aW9uOworCSAgQ29udHJvbGxlci0+UmVwb3J0RGV2aWNlQ29uZmlndXJhdGlvbiA9CisJICAgIERBQzk2MF9WMl9SZXBvcnREZXZpY2VDb25maWd1cmF0aW9uOworCSAgQ29udHJvbGxlci0+UXVldWVSZWFkV3JpdGVDb21tYW5kID0KKwkgICAgREFDOTYwX1YyX1F1ZXVlUmVhZFdyaXRlQ29tbWFuZDsKKwkgIGJyZWFrOwogCWNhc2UgREFDOTYwX0JBX0NvbnRyb2xsZXI6CiAJICBEQUM5NjBfQkFfRGlzYWJsZUludGVycnVwdHMoQmFzZUFkZHJlc3MpOwogCSAgREFDOTYwX0JBX0Fja25vd2xlZGdlSGFyZHdhcmVNYWlsYm94U3RhdHVzKEJhc2VBZGRyZXNzKTsKQEAgLTUxODksNiArNTI2NSw0NyBAQAogICB3YWtlX3VwKCZDb250cm9sbGVyLT5Db21tYW5kV2FpdFF1ZXVlKTsKIH0KIAorLyoKKyAgREFDOTYwX0dFTV9JbnRlcnJ1cHRIYW5kbGVyIGhhbmRsZXMgaGFyZHdhcmUgaW50ZXJydXB0cyBmcm9tIERBQzk2MCBHRU0gU2VyaWVzCisgIENvbnRyb2xsZXJzLgorKi8KKworc3RhdGljIGlycXJldHVybl90IERBQzk2MF9HRU1fSW50ZXJydXB0SGFuZGxlcihpbnQgSVJRX0NoYW5uZWwsCisJCQkJICAgICAgIHZvaWQgKkRldmljZUlkZW50aWZpZXIsCisJCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpJbnRlcnJ1cHRSZWdpc3RlcnMpCit7CisgIERBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKSBEZXZpY2VJZGVudGlmaWVyOworICB2b2lkIF9faW9tZW0gKkNvbnRyb2xsZXJCYXNlQWRkcmVzcyA9IENvbnRyb2xsZXItPkJhc2VBZGRyZXNzOworICBEQUM5NjBfVjJfU3RhdHVzTWFpbGJveF9UICpOZXh0U3RhdHVzTWFpbGJveDsKKyAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworICBzcGluX2xvY2tfaXJxc2F2ZSgmQ29udHJvbGxlci0+cXVldWVfbG9jaywgZmxhZ3MpOworICBEQUM5NjBfR0VNX0Fja25vd2xlZGdlSW50ZXJydXB0KENvbnRyb2xsZXJCYXNlQWRkcmVzcyk7CisgIE5leHRTdGF0dXNNYWlsYm94ID0gQ29udHJvbGxlci0+VjIuTmV4dFN0YXR1c01haWxib3g7CisgIHdoaWxlIChOZXh0U3RhdHVzTWFpbGJveC0+RmllbGRzLkNvbW1hbmRJZGVudGlmaWVyID4gMCkKKyAgICB7CisgICAgICAgREFDOTYwX1YyX0NvbW1hbmRJZGVudGlmaWVyX1QgQ29tbWFuZElkZW50aWZpZXIgPQorICAgICAgICAgICBOZXh0U3RhdHVzTWFpbGJveC0+RmllbGRzLkNvbW1hbmRJZGVudGlmaWVyOworICAgICAgIERBQzk2MF9Db21tYW5kX1QgKkNvbW1hbmQgPSBDb250cm9sbGVyLT5Db21tYW5kc1tDb21tYW5kSWRlbnRpZmllci0xXTsKKyAgICAgICBDb21tYW5kLT5WMi5Db21tYW5kU3RhdHVzID0gTmV4dFN0YXR1c01haWxib3gtPkZpZWxkcy5Db21tYW5kU3RhdHVzOworICAgICAgIENvbW1hbmQtPlYyLlJlcXVlc3RTZW5zZUxlbmd0aCA9CisgICAgICAgICAgIE5leHRTdGF0dXNNYWlsYm94LT5GaWVsZHMuUmVxdWVzdFNlbnNlTGVuZ3RoOworICAgICAgIENvbW1hbmQtPlYyLkRhdGFUcmFuc2ZlclJlc2lkdWUgPQorICAgICAgICAgICBOZXh0U3RhdHVzTWFpbGJveC0+RmllbGRzLkRhdGFUcmFuc2ZlclJlc2lkdWU7CisgICAgICAgTmV4dFN0YXR1c01haWxib3gtPldvcmRzWzBdID0gMDsKKyAgICAgICBpZiAoKytOZXh0U3RhdHVzTWFpbGJveCA+IENvbnRyb2xsZXItPlYyLkxhc3RTdGF0dXNNYWlsYm94KQorICAgICAgICAgICBOZXh0U3RhdHVzTWFpbGJveCA9IENvbnRyb2xsZXItPlYyLkZpcnN0U3RhdHVzTWFpbGJveDsKKyAgICAgICBEQUM5NjBfVjJfUHJvY2Vzc0NvbXBsZXRlZENvbW1hbmQoQ29tbWFuZCk7CisgICAgfQorICBDb250cm9sbGVyLT5WMi5OZXh0U3RhdHVzTWFpbGJveCA9IE5leHRTdGF0dXNNYWlsYm94OworICAvKgorICAgIEF0dGVtcHQgdG8gcmVtb3ZlIGFkZGl0aW9uYWwgSS9PIFJlcXVlc3RzIGZyb20gdGhlIENvbnRyb2xsZXIncworICAgIEkvTyBSZXF1ZXN0IFF1ZXVlIGFuZCBxdWV1ZSB0aGVtIHRvIHRoZSBDb250cm9sbGVyLgorICAqLworICBEQUM5NjBfUHJvY2Vzc1JlcXVlc3QoQ29udHJvbGxlcik7CisgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJkNvbnRyb2xsZXItPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKyAgcmV0dXJuIElSUV9IQU5ETEVEOworfQogCiAvKgogICBEQUM5NjBfQkFfSW50ZXJydXB0SGFuZGxlciBoYW5kbGVzIGhhcmR3YXJlIGludGVycnVwdHMgZnJvbSBEQUM5NjAgQkEgU2VyaWVzCkBAIC02OTYyLDYgKzcwNzksMTQgQEAKIAogI2VuZGlmIC8qIERBQzk2MF9HQU1fTUlOT1IgKi8KIAorc3RhdGljIHN0cnVjdCBEQUM5NjBfcHJpdmRhdGEgREFDOTYwX0dFTV9wcml2ZGF0YSA9IHsKKwkuSGFyZHdhcmVUeXBlID0JCURBQzk2MF9HRU1fQ29udHJvbGxlciwKKwkuRmlybXdhcmVUeXBlIAk9CURBQzk2MF9WMl9Db250cm9sbGVyLAorCS5JbnRlcnJ1cHRIYW5kbGVyID0JREFDOTYwX0dFTV9JbnRlcnJ1cHRIYW5kbGVyLAorCS5NZW1vcnlXaW5kb3dTaXplID0JREFDOTYwX0dFTV9SZWdpc3RlcldpbmRvd1NpemUsCit9OworCisKIHN0YXRpYyBzdHJ1Y3QgREFDOTYwX3ByaXZkYXRhIERBQzk2MF9CQV9wcml2ZGF0YSA9IHsKIAkuSGFyZHdhcmVUeXBlID0JCURBQzk2MF9CQV9Db250cm9sbGVyLAogCS5GaXJtd2FyZVR5cGUgCT0JREFDOTYwX1YyX0NvbnRyb2xsZXIsCkBAIC03MDA3LDYgKzcxMzIsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBEQUM5NjBfaWRfdGFibGVbXSA9IHsKIAl7CiAJCS52ZW5kb3IgCT0gUENJX1ZFTkRPUl9JRF9NWUxFWCwKKwkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX01ZTEVYX0RBQzk2MF9HRU0sCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhCT0gKHVuc2lnbmVkIGxvbmcpICZEQUM5NjBfR0VNX3ByaXZkYXRhLAorCX0sCisJeworCQkudmVuZG9yIAk9IFBDSV9WRU5ET1JfSURfTVlMRVgsCiAJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfQkEsCiAJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAogCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmggYi9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5oCmluZGV4IGQ1ZThlNzEuLmE4MmYzN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmgKKysrIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuaApAQCAtMjExNCw3ICsyMTE0LDggQEAKICAgREFDOTYwX0xBX0NvbnRyb2xsZXIgPQkJCTMsCS8qIERBQzExNjRQICovCiAgIERBQzk2MF9QR19Db250cm9sbGVyID0JCQk0LAkvKiBEQUM5NjBQVEwvUEovUEcgKi8KICAgREFDOTYwX1BEX0NvbnRyb2xsZXIgPQkJCTUsCS8qIERBQzk2MFBVL1BEL1BML1AgKi8KLSAgREFDOTYwX1BfQ29udHJvbGxlciA9CQkJCTYJLyogREFDOTYwUFUvUEQvUEwvUCAqLworICBEQUM5NjBfUF9Db250cm9sbGVyID0JCQkJNiwJLyogREFDOTYwUFUvUEQvUEwvUCAqLworICBEQUM5NjBfR0VNX0NvbnRyb2xsZXIgPQkJCTcsCS8qIEFjY2VsZVJBSUQgNC81LzYwMCAqLwogfQogREFDOTYwX0hhcmR3YXJlVHlwZV9UOwogCkBAIC0yNTQxLDYgKzI1NDIsMzIwIEBACiB9CiAKIC8qCisgIERlZmluZSB0aGUgREFDOTYwIEdFTSBTZXJpZXMgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXIgT2Zmc2V0cy4KKyAqLworCisjZGVmaW5lIERBQzk2MF9HRU1fUmVnaXN0ZXJXaW5kb3dTaXplCTB4NjAwCisKK3R5cGVkZWYgZW51bQoreworICBEQUM5NjBfR0VNX0luYm91bmREb29yQmVsbFJlZ2lzdGVyUmVhZFNldE9mZnNldCAgID0gICAweDIxNCwKKyAgREFDOTYwX0dFTV9JbmJvdW5kRG9vckJlbGxSZWdpc3RlckNsZWFyT2Zmc2V0ICAgICA9ICAgMHgyMTgsCisgIERBQzk2MF9HRU1fT3V0Ym91bmREb29yQmVsbFJlZ2lzdGVyUmVhZFNldE9mZnNldCAgPSAgIDB4MjI0LAorICBEQUM5NjBfR0VNX091dGJvdW5kRG9vckJlbGxSZWdpc3RlckNsZWFyT2Zmc2V0ICAgID0gICAweDIyOCwKKyAgREFDOTYwX0dFTV9JbnRlcnJ1cHRTdGF0dXNSZWdpc3Rlck9mZnNldCAgICAgICAgICA9ICAgMHgyMDgsCisgIERBQzk2MF9HRU1fSW50ZXJydXB0TWFza1JlZ2lzdGVyUmVhZFNldE9mZnNldCAgICAgPSAgIDB4MjJDLAorICBEQUM5NjBfR0VNX0ludGVycnVwdE1hc2tSZWdpc3RlckNsZWFyT2Zmc2V0ICAgICAgID0gICAweDIzMCwKKyAgREFDOTYwX0dFTV9Db21tYW5kTWFpbGJveEJ1c0FkZHJlc3NPZmZzZXQgICAgICAgICA9ICAgMHg1MTAsCisgIERBQzk2MF9HRU1fQ29tbWFuZFN0YXR1c09mZnNldCAgICAgICAgICAgICAgICAgICAgPSAgIDB4NTE4LAorICBEQUM5NjBfR0VNX0Vycm9yU3RhdHVzUmVnaXN0ZXJSZWFkU2V0T2Zmc2V0ICAgICAgID0gICAweDIyNCwKKyAgREFDOTYwX0dFTV9FcnJvclN0YXR1c1JlZ2lzdGVyQ2xlYXJPZmZzZXQgICAgICAgICA9ICAgMHgyMjgsCit9CitEQUM5NjBfR0VNX1JlZ2lzdGVyT2Zmc2V0c19UOworCisvKgorICBEZWZpbmUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgREFDOTYwIEdFTSBTZXJpZXMgSW5ib3VuZCBEb29yIEJlbGwKKyAqLworCit0eXBlZGVmIHVuaW9uIERBQzk2MF9HRU1fSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXIKK3sKKyAgdW5zaWduZWQgaW50IEFsbDsKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgOjI0OworICAgIGJvb2xlYW4gSGFyZHdhcmVNYWlsYm94TmV3Q29tbWFuZDoxOworICAgIGJvb2xlYW4gQWNrbm93bGVkZ2VIYXJkd2FyZU1haWxib3hTdGF0dXM6MTsKKyAgICBib29sZWFuIEdlbmVyYXRlSW50ZXJydXB0OjE7CisgICAgYm9vbGVhbiBDb250cm9sbGVyUmVzZXQ6MTsKKyAgICBib29sZWFuIE1lbW9yeU1haWxib3hOZXdDb21tYW5kOjE7CisgICAgdW5zaWduZWQgaW50IDozOworICB9IFdyaXRlOworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCA6MjQ7CisgICAgYm9vbGVhbiBIYXJkd2FyZU1haWxib3hGdWxsOjE7CisgICAgYm9vbGVhbiBJbml0aWFsaXphdGlvbkluUHJvZ3Jlc3M6MTsKKyAgICB1bnNpZ25lZCBpbnQgOjY7CisgIH0gUmVhZDsKK30KK0RBQzk2MF9HRU1fSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXJfVDsKKworLyoKKyAgRGVmaW5lIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIERBQzk2MCBHRU0gU2VyaWVzIE91dGJvdW5kIERvb3IgQmVsbCBSZWdpc3Rlci4KKyAqLwordHlwZWRlZiB1bmlvbiBEQUM5NjBfR0VNX091dGJvdW5kRG9vckJlbGxSZWdpc3RlcgoreworICB1bnNpZ25lZCBpbnQgQWxsOworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCA6MjQ7CisgICAgYm9vbGVhbiBBY2tub3dsZWRnZUhhcmR3YXJlTWFpbGJveEludGVycnVwdDoxOworICAgIGJvb2xlYW4gQWNrbm93bGVkZ2VNZW1vcnlNYWlsYm94SW50ZXJydXB0OjE7CisgICAgdW5zaWduZWQgaW50IDo2OworICB9IFdyaXRlOworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCA6MjQ7CisgICAgYm9vbGVhbiBIYXJkd2FyZU1haWxib3hTdGF0dXNBdmFpbGFibGU6MTsKKyAgICBib29sZWFuIE1lbW9yeU1haWxib3hTdGF0dXNBdmFpbGFibGU6MTsKKyAgICB1bnNpZ25lZCBpbnQgOjY7CisgIH0gUmVhZDsKK30KK0RBQzk2MF9HRU1fT3V0Ym91bmREb29yQmVsbFJlZ2lzdGVyX1Q7CisKKy8qCisgIERlZmluZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBEQUM5NjAgR0VNIFNlcmllcyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlci4KKyAqLwordHlwZWRlZiB1bmlvbiBEQUM5NjBfR0VNX0ludGVycnVwdE1hc2tSZWdpc3RlcgoreworICB1bnNpZ25lZCBpbnQgQWxsOworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCA6MTY7CisgICAgdW5zaWduZWQgaW50IDo4OworICAgIHVuc2lnbmVkIGludCBIYXJkd2FyZU1haWxib3hJbnRlcnJ1cHQ6MTsKKyAgICB1bnNpZ25lZCBpbnQgTWVtb3J5TWFpbGJveEludGVycnVwdDoxOworICAgIHVuc2lnbmVkIGludCA6NjsKKyAgfSBCaXRzOworfQorREFDOTYwX0dFTV9JbnRlcnJ1cHRNYXNrUmVnaXN0ZXJfVDsKKworLyoKKyAgRGVmaW5lIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIERBQzk2MCBHRU0gU2VyaWVzIEVycm9yIFN0YXR1cyBSZWdpc3Rlci4KKyAqLworCit0eXBlZGVmIHVuaW9uIERBQzk2MF9HRU1fRXJyb3JTdGF0dXNSZWdpc3RlcgoreworICB1bnNpZ25lZCBpbnQgQWxsOworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCA6MjQ7CisgICAgdW5zaWduZWQgaW50IDo1OworICAgIGJvb2xlYW4gRXJyb3JTdGF0dXNQZW5kaW5nOjE7CisgICAgdW5zaWduZWQgaW50IDoyOworICB9IEJpdHM7Cit9CitEQUM5NjBfR0VNX0Vycm9yU3RhdHVzUmVnaXN0ZXJfVDsKKworLyoKKyAgRGVmaW5lIGlubGluZSBmdW5jdGlvbnMgdG8gcHJvdmlkZSBhbiBhYnN0cmFjdGlvbiBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0aGUKKyAgREFDOTYwIEdFTSBTZXJpZXMgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzLgorKi8KKworc3RhdGljIGlubGluZQordm9pZCBEQUM5NjBfR0VNX0hhcmR3YXJlTWFpbGJveE5ld0NvbW1hbmQodm9pZCBfX2lvbWVtICpDb250cm9sbGVyQmFzZUFkZHJlc3MpCit7CisgIERBQzk2MF9HRU1fSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXJfVCBJbmJvdW5kRG9vckJlbGxSZWdpc3RlcjsKKyAgSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXIuQWxsID0gMDsKKyAgSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXIuV3JpdGUuSGFyZHdhcmVNYWlsYm94TmV3Q29tbWFuZCA9IHRydWU7CisgIHdyaXRlbChJbmJvdW5kRG9vckJlbGxSZWdpc3Rlci5BbGwsCisJIENvbnRyb2xsZXJCYXNlQWRkcmVzcyArIERBQzk2MF9HRU1fSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXJSZWFkU2V0T2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZQordm9pZCBEQUM5NjBfR0VNX0Fja25vd2xlZGdlSGFyZHdhcmVNYWlsYm94U3RhdHVzKHZvaWQgX19pb21lbSAqQ29udHJvbGxlckJhc2VBZGRyZXNzKQoreworICBEQUM5NjBfR0VNX0luYm91bmREb29yQmVsbFJlZ2lzdGVyX1QgSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXI7CisgIEluYm91bmREb29yQmVsbFJlZ2lzdGVyLkFsbCA9IDA7CisgIEluYm91bmREb29yQmVsbFJlZ2lzdGVyLldyaXRlLkFja25vd2xlZGdlSGFyZHdhcmVNYWlsYm94U3RhdHVzID0gdHJ1ZTsKKyAgd3JpdGVsKEluYm91bmREb29yQmVsbFJlZ2lzdGVyLkFsbCwKKwkgQ29udHJvbGxlckJhc2VBZGRyZXNzICsgREFDOTYwX0dFTV9JbmJvdW5kRG9vckJlbGxSZWdpc3RlckNsZWFyT2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZQordm9pZCBEQUM5NjBfR0VNX0dlbmVyYXRlSW50ZXJydXB0KHZvaWQgX19pb21lbSAqQ29udHJvbGxlckJhc2VBZGRyZXNzKQoreworICBEQUM5NjBfR0VNX0luYm91bmREb29yQmVsbFJlZ2lzdGVyX1QgSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXI7CisgIEluYm91bmREb29yQmVsbFJlZ2lzdGVyLkFsbCA9IDA7CisgIEluYm91bmREb29yQmVsbFJlZ2lzdGVyLldyaXRlLkdlbmVyYXRlSW50ZXJydXB0ID0gdHJ1ZTsKKyAgd3JpdGVsKEluYm91bmREb29yQmVsbFJlZ2lzdGVyLkFsbCwKKwkgQ29udHJvbGxlckJhc2VBZGRyZXNzICsgREFDOTYwX0dFTV9JbmJvdW5kRG9vckJlbGxSZWdpc3RlclJlYWRTZXRPZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIERBQzk2MF9HRU1fQ29udHJvbGxlclJlc2V0KHZvaWQgX19pb21lbSAqQ29udHJvbGxlckJhc2VBZGRyZXNzKQoreworICBEQUM5NjBfR0VNX0luYm91bmREb29yQmVsbFJlZ2lzdGVyX1QgSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXI7CisgIEluYm91bmREb29yQmVsbFJlZ2lzdGVyLkFsbCA9IDA7CisgIEluYm91bmREb29yQmVsbFJlZ2lzdGVyLldyaXRlLkNvbnRyb2xsZXJSZXNldCA9IHRydWU7CisgIHdyaXRlbChJbmJvdW5kRG9vckJlbGxSZWdpc3Rlci5BbGwsCisJIENvbnRyb2xsZXJCYXNlQWRkcmVzcyArIERBQzk2MF9HRU1fSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXJSZWFkU2V0T2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZQordm9pZCBEQUM5NjBfR0VNX01lbW9yeU1haWxib3hOZXdDb21tYW5kKHZvaWQgX19pb21lbSAqQ29udHJvbGxlckJhc2VBZGRyZXNzKQoreworICBEQUM5NjBfR0VNX0luYm91bmREb29yQmVsbFJlZ2lzdGVyX1QgSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXI7CisgIEluYm91bmREb29yQmVsbFJlZ2lzdGVyLkFsbCA9IDA7CisgIEluYm91bmREb29yQmVsbFJlZ2lzdGVyLldyaXRlLk1lbW9yeU1haWxib3hOZXdDb21tYW5kID0gdHJ1ZTsKKyAgd3JpdGVsKEluYm91bmREb29yQmVsbFJlZ2lzdGVyLkFsbCwKKwkgQ29udHJvbGxlckJhc2VBZGRyZXNzICsgREFDOTYwX0dFTV9JbmJvdW5kRG9vckJlbGxSZWdpc3RlclJlYWRTZXRPZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lCitib29sZWFuIERBQzk2MF9HRU1fSGFyZHdhcmVNYWlsYm94RnVsbFAodm9pZCBfX2lvbWVtICpDb250cm9sbGVyQmFzZUFkZHJlc3MpCit7CisgIERBQzk2MF9HRU1fSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXJfVCBJbmJvdW5kRG9vckJlbGxSZWdpc3RlcjsKKyAgSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXIuQWxsID0KKyAgICByZWFkbChDb250cm9sbGVyQmFzZUFkZHJlc3MgKworICAgICAgICAgIERBQzk2MF9HRU1fSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXJSZWFkU2V0T2Zmc2V0KTsKKyAgcmV0dXJuIEluYm91bmREb29yQmVsbFJlZ2lzdGVyLlJlYWQuSGFyZHdhcmVNYWlsYm94RnVsbDsKK30KKworc3RhdGljIGlubGluZQorYm9vbGVhbiBEQUM5NjBfR0VNX0luaXRpYWxpemF0aW9uSW5Qcm9ncmVzc1Aodm9pZCBfX2lvbWVtICpDb250cm9sbGVyQmFzZUFkZHJlc3MpCit7CisgIERBQzk2MF9HRU1fSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXJfVCBJbmJvdW5kRG9vckJlbGxSZWdpc3RlcjsKKyAgSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXIuQWxsID0KKyAgICByZWFkbChDb250cm9sbGVyQmFzZUFkZHJlc3MgKworICAgICAgICAgIERBQzk2MF9HRU1fSW5ib3VuZERvb3JCZWxsUmVnaXN0ZXJSZWFkU2V0T2Zmc2V0KTsKKyAgcmV0dXJuIEluYm91bmREb29yQmVsbFJlZ2lzdGVyLlJlYWQuSW5pdGlhbGl6YXRpb25JblByb2dyZXNzOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIERBQzk2MF9HRU1fQWNrbm93bGVkZ2VIYXJkd2FyZU1haWxib3hJbnRlcnJ1cHQodm9pZCBfX2lvbWVtICpDb250cm9sbGVyQmFzZUFkZHJlc3MpCit7CisgIERBQzk2MF9HRU1fT3V0Ym91bmREb29yQmVsbFJlZ2lzdGVyX1QgT3V0Ym91bmREb29yQmVsbFJlZ2lzdGVyOworICBPdXRib3VuZERvb3JCZWxsUmVnaXN0ZXIuQWxsID0gMDsKKyAgT3V0Ym91bmREb29yQmVsbFJlZ2lzdGVyLldyaXRlLkFja25vd2xlZGdlSGFyZHdhcmVNYWlsYm94SW50ZXJydXB0ID0gdHJ1ZTsKKyAgd3JpdGVsKE91dGJvdW5kRG9vckJlbGxSZWdpc3Rlci5BbGwsCisJIENvbnRyb2xsZXJCYXNlQWRkcmVzcyArIERBQzk2MF9HRU1fT3V0Ym91bmREb29yQmVsbFJlZ2lzdGVyQ2xlYXJPZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIERBQzk2MF9HRU1fQWNrbm93bGVkZ2VNZW1vcnlNYWlsYm94SW50ZXJydXB0KHZvaWQgX19pb21lbSAqQ29udHJvbGxlckJhc2VBZGRyZXNzKQoreworICBEQUM5NjBfR0VNX091dGJvdW5kRG9vckJlbGxSZWdpc3Rlcl9UIE91dGJvdW5kRG9vckJlbGxSZWdpc3RlcjsKKyAgT3V0Ym91bmREb29yQmVsbFJlZ2lzdGVyLkFsbCA9IDA7CisgIE91dGJvdW5kRG9vckJlbGxSZWdpc3Rlci5Xcml0ZS5BY2tub3dsZWRnZU1lbW9yeU1haWxib3hJbnRlcnJ1cHQgPSB0cnVlOworICB3cml0ZWwoT3V0Ym91bmREb29yQmVsbFJlZ2lzdGVyLkFsbCwKKwkgQ29udHJvbGxlckJhc2VBZGRyZXNzICsgREFDOTYwX0dFTV9PdXRib3VuZERvb3JCZWxsUmVnaXN0ZXJDbGVhck9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgREFDOTYwX0dFTV9BY2tub3dsZWRnZUludGVycnVwdCh2b2lkIF9faW9tZW0gKkNvbnRyb2xsZXJCYXNlQWRkcmVzcykKK3sKKyAgREFDOTYwX0dFTV9PdXRib3VuZERvb3JCZWxsUmVnaXN0ZXJfVCBPdXRib3VuZERvb3JCZWxsUmVnaXN0ZXI7CisgIE91dGJvdW5kRG9vckJlbGxSZWdpc3Rlci5BbGwgPSAwOworICBPdXRib3VuZERvb3JCZWxsUmVnaXN0ZXIuV3JpdGUuQWNrbm93bGVkZ2VIYXJkd2FyZU1haWxib3hJbnRlcnJ1cHQgPSB0cnVlOworICBPdXRib3VuZERvb3JCZWxsUmVnaXN0ZXIuV3JpdGUuQWNrbm93bGVkZ2VNZW1vcnlNYWlsYm94SW50ZXJydXB0ID0gdHJ1ZTsKKyAgd3JpdGVsKE91dGJvdW5kRG9vckJlbGxSZWdpc3Rlci5BbGwsCisJIENvbnRyb2xsZXJCYXNlQWRkcmVzcyArIERBQzk2MF9HRU1fT3V0Ym91bmREb29yQmVsbFJlZ2lzdGVyQ2xlYXJPZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lCitib29sZWFuIERBQzk2MF9HRU1fSGFyZHdhcmVNYWlsYm94U3RhdHVzQXZhaWxhYmxlUCh2b2lkIF9faW9tZW0gKkNvbnRyb2xsZXJCYXNlQWRkcmVzcykKK3sKKyAgREFDOTYwX0dFTV9PdXRib3VuZERvb3JCZWxsUmVnaXN0ZXJfVCBPdXRib3VuZERvb3JCZWxsUmVnaXN0ZXI7CisgIE91dGJvdW5kRG9vckJlbGxSZWdpc3Rlci5BbGwgPQorICAgIHJlYWRsKENvbnRyb2xsZXJCYXNlQWRkcmVzcyArCisgICAgICAgICAgREFDOTYwX0dFTV9PdXRib3VuZERvb3JCZWxsUmVnaXN0ZXJSZWFkU2V0T2Zmc2V0KTsKKyAgcmV0dXJuIE91dGJvdW5kRG9vckJlbGxSZWdpc3Rlci5SZWFkLkhhcmR3YXJlTWFpbGJveFN0YXR1c0F2YWlsYWJsZTsKK30KKworc3RhdGljIGlubGluZQorYm9vbGVhbiBEQUM5NjBfR0VNX01lbW9yeU1haWxib3hTdGF0dXNBdmFpbGFibGVQKHZvaWQgX19pb21lbSAqQ29udHJvbGxlckJhc2VBZGRyZXNzKQoreworICBEQUM5NjBfR0VNX091dGJvdW5kRG9vckJlbGxSZWdpc3Rlcl9UIE91dGJvdW5kRG9vckJlbGxSZWdpc3RlcjsKKyAgT3V0Ym91bmREb29yQmVsbFJlZ2lzdGVyLkFsbCA9CisgICAgcmVhZGwoQ29udHJvbGxlckJhc2VBZGRyZXNzICsKKyAgICAgICAgICBEQUM5NjBfR0VNX091dGJvdW5kRG9vckJlbGxSZWdpc3RlclJlYWRTZXRPZmZzZXQpOworICByZXR1cm4gT3V0Ym91bmREb29yQmVsbFJlZ2lzdGVyLlJlYWQuTWVtb3J5TWFpbGJveFN0YXR1c0F2YWlsYWJsZTsKK30KKworc3RhdGljIGlubGluZQordm9pZCBEQUM5NjBfR0VNX0VuYWJsZUludGVycnVwdHModm9pZCBfX2lvbWVtICpDb250cm9sbGVyQmFzZUFkZHJlc3MpCit7CisgIERBQzk2MF9HRU1fSW50ZXJydXB0TWFza1JlZ2lzdGVyX1QgSW50ZXJydXB0TWFza1JlZ2lzdGVyOworICBJbnRlcnJ1cHRNYXNrUmVnaXN0ZXIuQWxsID0gMDsKKyAgSW50ZXJydXB0TWFza1JlZ2lzdGVyLkJpdHMuSGFyZHdhcmVNYWlsYm94SW50ZXJydXB0ID0gdHJ1ZTsKKyAgSW50ZXJydXB0TWFza1JlZ2lzdGVyLkJpdHMuTWVtb3J5TWFpbGJveEludGVycnVwdCA9IHRydWU7CisgIHdyaXRlbChJbnRlcnJ1cHRNYXNrUmVnaXN0ZXIuQWxsLAorCSBDb250cm9sbGVyQmFzZUFkZHJlc3MgKyBEQUM5NjBfR0VNX0ludGVycnVwdE1hc2tSZWdpc3RlckNsZWFyT2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZQordm9pZCBEQUM5NjBfR0VNX0Rpc2FibGVJbnRlcnJ1cHRzKHZvaWQgX19pb21lbSAqQ29udHJvbGxlckJhc2VBZGRyZXNzKQoreworICBEQUM5NjBfR0VNX0ludGVycnVwdE1hc2tSZWdpc3Rlcl9UIEludGVycnVwdE1hc2tSZWdpc3RlcjsKKyAgSW50ZXJydXB0TWFza1JlZ2lzdGVyLkFsbCA9IDA7CisgIEludGVycnVwdE1hc2tSZWdpc3Rlci5CaXRzLkhhcmR3YXJlTWFpbGJveEludGVycnVwdCA9IHRydWU7CisgIEludGVycnVwdE1hc2tSZWdpc3Rlci5CaXRzLk1lbW9yeU1haWxib3hJbnRlcnJ1cHQgPSB0cnVlOworICB3cml0ZWwoSW50ZXJydXB0TWFza1JlZ2lzdGVyLkFsbCwKKwkgQ29udHJvbGxlckJhc2VBZGRyZXNzICsgREFDOTYwX0dFTV9JbnRlcnJ1cHRNYXNrUmVnaXN0ZXJSZWFkU2V0T2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZQorYm9vbGVhbiBEQUM5NjBfR0VNX0ludGVycnVwdHNFbmFibGVkUCh2b2lkIF9faW9tZW0gKkNvbnRyb2xsZXJCYXNlQWRkcmVzcykKK3sKKyAgREFDOTYwX0dFTV9JbnRlcnJ1cHRNYXNrUmVnaXN0ZXJfVCBJbnRlcnJ1cHRNYXNrUmVnaXN0ZXI7CisgIEludGVycnVwdE1hc2tSZWdpc3Rlci5BbGwgPQorICAgIHJlYWRsKENvbnRyb2xsZXJCYXNlQWRkcmVzcyArCisgICAgICAgICAgREFDOTYwX0dFTV9JbnRlcnJ1cHRNYXNrUmVnaXN0ZXJSZWFkU2V0T2Zmc2V0KTsKKyAgcmV0dXJuICEoSW50ZXJydXB0TWFza1JlZ2lzdGVyLkJpdHMuSGFyZHdhcmVNYWlsYm94SW50ZXJydXB0IHx8CisgICAgICAgICAgIEludGVycnVwdE1hc2tSZWdpc3Rlci5CaXRzLk1lbW9yeU1haWxib3hJbnRlcnJ1cHQpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIERBQzk2MF9HRU1fV3JpdGVDb21tYW5kTWFpbGJveChEQUM5NjBfVjJfQ29tbWFuZE1haWxib3hfVAorCQkJCSAgICAgKk1lbW9yeUNvbW1hbmRNYWlsYm94LAorCQkJCSAgIERBQzk2MF9WMl9Db21tYW5kTWFpbGJveF9UCisJCQkJICAgICAqQ29tbWFuZE1haWxib3gpCit7CisgIG1lbWNweSgmTWVtb3J5Q29tbWFuZE1haWxib3gtPldvcmRzWzFdLCAmQ29tbWFuZE1haWxib3gtPldvcmRzWzFdLAorCSBzaXplb2YoREFDOTYwX1YyX0NvbW1hbmRNYWlsYm94X1QpIC0gc2l6ZW9mKHVuc2lnbmVkIGludCkpOworICB3bWIoKTsKKyAgTWVtb3J5Q29tbWFuZE1haWxib3gtPldvcmRzWzBdID0gQ29tbWFuZE1haWxib3gtPldvcmRzWzBdOworICBtYigpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIERBQzk2MF9HRU1fV3JpdGVIYXJkd2FyZU1haWxib3godm9pZCBfX2lvbWVtICpDb250cm9sbGVyQmFzZUFkZHJlc3MsCisJCQkJICAgIGRtYV9hZGRyX3QgQ29tbWFuZE1haWxib3hETUEpCit7CisJZG1hX2FkZHJfd3JpdGVxbChDb21tYW5kTWFpbGJveERNQSwKKwkJQ29udHJvbGxlckJhc2VBZGRyZXNzICsKKwkJREFDOTYwX0dFTV9Db21tYW5kTWFpbGJveEJ1c0FkZHJlc3NPZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIERBQzk2MF9WMl9Db21tYW5kSWRlbnRpZmllcl9UCitEQUM5NjBfR0VNX1JlYWRDb21tYW5kSWRlbnRpZmllcih2b2lkIF9faW9tZW0gKkNvbnRyb2xsZXJCYXNlQWRkcmVzcykKK3sKKyAgcmV0dXJuIHJlYWR3KENvbnRyb2xsZXJCYXNlQWRkcmVzcyArIERBQzk2MF9HRU1fQ29tbWFuZFN0YXR1c09mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgREFDOTYwX1YyX0NvbW1hbmRTdGF0dXNfVAorREFDOTYwX0dFTV9SZWFkQ29tbWFuZFN0YXR1cyh2b2lkIF9faW9tZW0gKkNvbnRyb2xsZXJCYXNlQWRkcmVzcykKK3sKKyAgcmV0dXJuIHJlYWR3KENvbnRyb2xsZXJCYXNlQWRkcmVzcyArIERBQzk2MF9HRU1fQ29tbWFuZFN0YXR1c09mZnNldCArIDIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2xlYW4KK0RBQzk2MF9HRU1fUmVhZEVycm9yU3RhdHVzKHZvaWQgX19pb21lbSAqQ29udHJvbGxlckJhc2VBZGRyZXNzLAorCQkJICB1bnNpZ25lZCBjaGFyICpFcnJvclN0YXR1cywKKwkJCSAgdW5zaWduZWQgY2hhciAqUGFyYW1ldGVyMCwKKwkJCSAgdW5zaWduZWQgY2hhciAqUGFyYW1ldGVyMSkKK3sKKyAgREFDOTYwX0dFTV9FcnJvclN0YXR1c1JlZ2lzdGVyX1QgRXJyb3JTdGF0dXNSZWdpc3RlcjsKKyAgRXJyb3JTdGF0dXNSZWdpc3Rlci5BbGwgPQorICAgIHJlYWRsKENvbnRyb2xsZXJCYXNlQWRkcmVzcyArIERBQzk2MF9HRU1fRXJyb3JTdGF0dXNSZWdpc3RlclJlYWRTZXRPZmZzZXQpOworICBpZiAoIUVycm9yU3RhdHVzUmVnaXN0ZXIuQml0cy5FcnJvclN0YXR1c1BlbmRpbmcpIHJldHVybiBmYWxzZTsKKyAgRXJyb3JTdGF0dXNSZWdpc3Rlci5CaXRzLkVycm9yU3RhdHVzUGVuZGluZyA9IGZhbHNlOworICAqRXJyb3JTdGF0dXMgPSBFcnJvclN0YXR1c1JlZ2lzdGVyLkFsbDsKKyAgKlBhcmFtZXRlcjAgPQorICAgIHJlYWRiKENvbnRyb2xsZXJCYXNlQWRkcmVzcyArIERBQzk2MF9HRU1fQ29tbWFuZE1haWxib3hCdXNBZGRyZXNzT2Zmc2V0ICsgMCk7CisgICpQYXJhbWV0ZXIxID0KKyAgICByZWFkYihDb250cm9sbGVyQmFzZUFkZHJlc3MgKyBEQUM5NjBfR0VNX0NvbW1hbmRNYWlsYm94QnVzQWRkcmVzc09mZnNldCArIDEpOworICB3cml0ZWwoMHgwMzAwMDAwMCwgQ29udHJvbGxlckJhc2VBZGRyZXNzICsKKyAgICAgICAgIERBQzk2MF9HRU1fRXJyb3JTdGF0dXNSZWdpc3RlckNsZWFyT2Zmc2V0KTsKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qCiAgIERlZmluZSB0aGUgREFDOTYwIEJBIFNlcmllcyBDb250cm9sbGVyIEludGVyZmFjZSBSZWdpc3RlciBPZmZzZXRzLgogKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCmluZGV4IGU4MzBiZTEuLmI1OTQ3NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKQEAgLTYsNyArNiw3IEBACiAKIGNvbmZpZyBCTEtfREVWX0ZECiAJdHJpc3RhdGUgIk5vcm1hbCBmbG9wcHkgZGlzayBzdXBwb3J0IgotCWRlcGVuZHMgb24gKCFBUkNIX1MzOTAgJiYgIU02OEsgJiYgIUlBNjQgJiYgIVVNTCkgfHwgUTQwIHx8IChTVU4zWCAmJiBCUk9LRU4pIHx8IEFSQ0hfUlBDIHx8IEFSQ0hfRUJTQTI4NQorCWRlcGVuZHMgb24gKCFBUkNIX1MzOTAgJiYgIU02OEsgJiYgIUlBNjQgJiYgIVVNTCAmJiAhQVJNKSB8fCBRNDAgfHwgKFNVTjNYICYmIEJST0tFTikgfHwgQVJDSF9SUEMgfHwgQVJDSF9FQlNBMjg1CiAJLS0taGVscC0tLQogCSAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBmbG9wcHkgZGlzayBkcml2ZShzKSBvZiB5b3VyIFBDIHVuZGVyIExpbnV4LAogCSAgc2F5IFkuIEluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLCBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgSUJNCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogY29uZmlnIEJMS19ERVZfWEQKIAl0cmlzdGF0ZSAiWFQgaGFyZCBkaXNrIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0EKKwlkZXBlbmRzIG9uIElTQSAmJiBJU0FfRE1BX0FQSQogCWhlbHAKIAkgIFZlcnkgb2xkIDggYml0IGhhcmQgZGlzayBjb250cm9sbGVycyB1c2VkIGluIHRoZSBJQk0gWFQgY29tcHV0ZXIKIAkgIHdpbGwgYmUgc3VwcG9ydGVkIGlmIHlvdSBzYXkgWSBoZXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lLmggYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2UuaAppbmRleCBhYThiNTQ3Li43MjFiYTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2UuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2UuaApAQCAtMSw1ICsxLDUgQEAKIC8qIENvcHlyaWdodCAoYykgMjAwNCBDb3JhaWQsIEluYy4gIFNlZSBDT1BZSU5HIGZvciBHUEwgdGVybXMuICovCi0jZGVmaW5lIFZFUlNJT04gIjYiCisjZGVmaW5lIFZFUlNJT04gIjEwIgogI2RlZmluZSBBT0VfTUFKT1IgMTUyCiAjZGVmaW5lIERFVklDRV9OQU1FICJhb2UiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMKaW5kZXggNDc4MGY3OS4uMGU5N2ZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMKQEAgLTM3LDYgKzM3LDEzIEBACiAKIAlyZXR1cm4gc25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXNcbiIsIGQtPmlmcC0+bmFtZSk7CiB9CisvKiBmaXJtd2FyZSB2ZXJzaW9uICovCitzdGF0aWMgc3NpemVfdCBhb2VkaXNrX3Nob3dfZnd2ZXIoc3RydWN0IGdlbmRpc2sgKiBkaXNrLCBjaGFyICpwYWdlKQoreworCXN0cnVjdCBhb2VkZXYgKmQgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gc25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiMHglMDR4XG4iLCAodW5zaWduZWQgaW50KSBkLT5md192ZXIpOworfQogCiBzdGF0aWMgc3RydWN0IGRpc2tfYXR0cmlidXRlIGRpc2tfYXR0cl9zdGF0ZSA9IHsKIAkuYXR0ciA9IHsubmFtZSA9ICJzdGF0ZSIsIC5tb2RlID0gU19JUlVHTyB9LApAQCAtNTAsNiArNTcsMTAgQEAKIAkuYXR0ciA9IHsubmFtZSA9ICJuZXRpZiIsIC5tb2RlID0gU19JUlVHTyB9LAogCS5zaG93ID0gYW9lZGlza19zaG93X25ldGlmCiB9Oworc3RhdGljIHN0cnVjdCBkaXNrX2F0dHJpYnV0ZSBkaXNrX2F0dHJfZnd2ZXIgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAiZmlybXdhcmUtdmVyc2lvbiIsIC5tb2RlID0gU19JUlVHTyB9LAorCS5zaG93ID0gYW9lZGlza19zaG93X2Z3dmVyCit9OwogCiBzdGF0aWMgdm9pZAogYW9lZGlza19hZGRfc3lzZnMoc3RydWN0IGFvZWRldiAqZCkKQEAgLTU3LDYgKzY4LDcgQEAKIAlzeXNmc19jcmVhdGVfZmlsZSgmZC0+Z2QtPmtvYmosICZkaXNrX2F0dHJfc3RhdGUuYXR0cik7CiAJc3lzZnNfY3JlYXRlX2ZpbGUoJmQtPmdkLT5rb2JqLCAmZGlza19hdHRyX21hYy5hdHRyKTsKIAlzeXNmc19jcmVhdGVfZmlsZSgmZC0+Z2QtPmtvYmosICZkaXNrX2F0dHJfbmV0aWYuYXR0cik7CisJc3lzZnNfY3JlYXRlX2ZpbGUoJmQtPmdkLT5rb2JqLCAmZGlza19hdHRyX2Z3dmVyLmF0dHIpOwogfQogdm9pZAogYW9lZGlza19ybV9zeXNmcyhzdHJ1Y3QgYW9lZGV2ICpkKQpAQCAtNjQsNiArNzYsNyBAQAogCXN5c2ZzX3JlbW92ZV9saW5rKCZkLT5nZC0+a29iaiwgInN0YXRlIik7CiAJc3lzZnNfcmVtb3ZlX2xpbmsoJmQtPmdkLT5rb2JqLCAibWFjIik7CiAJc3lzZnNfcmVtb3ZlX2xpbmsoJmQtPmdkLT5rb2JqLCAibmV0aWYiKTsKKwlzeXNmc19yZW1vdmVfbGluaygmZC0+Z2QtPmtvYmosICJmaXJtd2FyZS12ZXJzaW9uIik7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWRldi5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lZGV2LmMKaW5kZXggZWMxNmM2NC4uNmUyMzFjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lZGV2LmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lZGV2LmMKQEAgLTEwOSwyNSArMTA5LDIyIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmxpc3RfbG9jaywgZmxhZ3MpOwogCiAJZm9yIChkPWRldmxpc3Q7IGQ7IGQ9ZC0+bmV4dCkKLQkJaWYgKGQtPnN5c21pbm9yID09IHN5c21pbm9yCi0JCXx8IG1lbWNtcChkLT5hZGRyLCBhZGRyLCBzaXplb2YgZC0+YWRkcikgPT0gMCkKKwkJaWYgKGQtPnN5c21pbm9yID09IHN5c21pbm9yKQogCQkJYnJlYWs7CiAKIAlpZiAoZCA9PSBOVUxMICYmIChkID0gYW9lZGV2X25ld2RldihidWZjbnQpKSA9PSBOVUxMKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmxpc3RfbG9jaywgZmxhZ3MpOwogCQlwcmludGsoS0VSTl9JTkZPICJhb2U6IGFvZWRldl9zZXQ6IGFvZWRldl9uZXdkZXYgZmFpbHVyZS5cbiIpOwogCQlyZXR1cm4gTlVMTDsKLQl9CisJfSAvKiBpZiBuZXdkZXYsIChkLT5mbGFncyAmIERFVkZMX1VQKSA9PSAwIGZvciBiZWxvdyAqLwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2bGlzdF9sb2NrLCBmbGFncyk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmQtPmxvY2ssIGZsYWdzKTsKIAogCWQtPmlmcCA9IGlmcDsKLQotCWlmIChkLT5zeXNtaW5vciAhPSBzeXNtaW5vcgotCXx8IChkLT5mbGFncyAmIERFVkZMX1VQKSA9PSAwKSB7CisJbWVtY3B5KGQtPmFkZHIsIGFkZHIsIHNpemVvZiBkLT5hZGRyKTsKKwlpZiAoKGQtPmZsYWdzICYgREVWRkxfVVApID09IDApIHsKIAkJYW9lZGV2X2Rvd25kZXYoZCk7IC8qIGZsdXNoZXMgb3V0c3RhbmRpbmcgZnJhbWVzICovCi0JCW1lbWNweShkLT5hZGRyLCBhZGRyLCBzaXplb2YgZC0+YWRkcik7CiAJCWQtPnN5c21pbm9yID0gc3lzbWlub3I7CiAJCWQtPmFvZW1ham9yID0gQU9FTUFKT1Ioc3lzbWlub3IpOwogCQlkLT5hb2VtaW5vciA9IEFPRU1JTk9SKHN5c21pbm9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKaW5kZXggYmM5MmFhYy4uOWU2ZjUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgImFvZS5oIgogCiAjZGVmaW5lIE5FQ09ERVMgNQpAQCAtMjYsNiArMjcsMTkgQEAKIH07CiAKIHN0YXRpYyBjaGFyIGFvZV9pZmxpc3RbSUZMSVNUU1pdOworbW9kdWxlX3BhcmFtX3N0cmluZyhhb2VfaWZsaXN0LCBhb2VfaWZsaXN0LCBJRkxJU1RTWiwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGFvZV9pZmxpc3QsICJhb2VfaWZsaXN0PVwiZGV2MSBbZGV2MiAuLi5dXCJcbiIpOworCisjaWZuZGVmIE1PRFVMRQorc3RhdGljIGludCBfX2luaXQgYW9lX2lmbGlzdF9zZXR1cChjaGFyICpzdHIpCit7CisJc3RybmNweShhb2VfaWZsaXN0LCBzdHIsIElGTElTVFNaKTsKKwlhb2VfaWZsaXN0W0lGTElTVFNaIC0gMV0gPSAnXDAnOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJhb2VfaWZsaXN0PSIsIGFvZV9pZmxpc3Rfc2V0dXApOworI2VuZGlmCiAKIGludAogaXNfYW9lX25ldGlmKHN0cnVjdCBuZXRfZGV2aWNlICppZnApCkBAIC0zNiw3ICs1MCw4IEBACiAJaWYgKGFvZV9pZmxpc3RbMF0gPT0gJ1wwJykKIAkJcmV0dXJuIDE7CiAKLQlmb3IgKHAgPSBhb2VfaWZsaXN0OyAqcDsgcCA9IHEgKyBzdHJzcG4ocSwgV0hJVEVTUEFDRSkpIHsKKwlwID0gYW9lX2lmbGlzdCArIHN0cnNwbihhb2VfaWZsaXN0LCBXSElURVNQQUNFKTsKKwlmb3IgKDsgKnA7IHAgPSBxICsgc3Ryc3BuKHEsIFdISVRFU1BBQ0UpKSB7CiAJCXEgPSBwICsgc3RyY3NwbihwLCBXSElURVNQQUNFKTsKIAkJaWYgKHEgIT0gcCkKIAkJCWxlbiA9IHEgLSBwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggNDJkZmEyOC4uZjBjMTA4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC0zMzQ1LDcgKzMzNDUsNyBAQAogCQkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IG9wZW5lZF9iZGV2W2NudF07CiAJCQlpZiAoIWJkZXYgfHwgSVRZUEUoZHJpdmVfc3RhdGVbY250XS5mZF9kZXZpY2UpICE9IHR5cGUpCiAJCQkJY29udGludWU7Ci0JCQlfX2ludmFsaWRhdGVfZGV2aWNlKGJkZXYsIDApOworCQkJX19pbnZhbGlkYXRlX2RldmljZShiZGV2KTsKIAkJfQogCQl1cCgmb3Blbl9sb2NrKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9nZW5oZC5jIGIvZHJpdmVycy9ibG9jay9nZW5oZC5jCmluZGV4IGFiNGRiNzEuLjhiYmUwMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZ2VuaGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL2dlbmhkLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmpfbWFwLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KIAogI2RlZmluZSBNQVhfUFJPQkVfSEFTSCAyNTUJLyogcmFuZG9tICovCiAKQEAgLTY3Niw3ICs2NzcsOCBAQAogCWludCByZXMgPSAwOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBiZGdldF9kaXNrKGRpc2ssIGluZGV4KTsKIAlpZiAoYmRldikgewotCQlyZXMgPSBfX2ludmFsaWRhdGVfZGV2aWNlKGJkZXYsIDEpOworCQlmc3luY19iZGV2KGJkZXYpOworCQlyZXMgPSBfX2ludmFsaWRhdGVfZGV2aWNlKGJkZXYpOwogCQliZHB1dChiZGV2KTsKIAl9CiAJcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IGVmZGYwNDQuLjllMjY4ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9uYmQuYwpAQCAtNzgsNiArNzgsNyBAQAogI2RlZmluZSBEQkdfUlggICAgICAgICAgMHgwMjAwCiAjZGVmaW5lIERCR19UWCAgICAgICAgICAweDA0MDAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWdmbGFnczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmJkc19tYXggPSAxNjsKICNlbmRpZiAvKiBOREVCVUcgKi8KIAogc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlIG5iZF9kZXZbTUFYX05CRF07CkBAIC02NDcsNyArNjQ4LDEzIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfTkJEOyBpKyspIHsKKwlpZiAobmJkc19tYXggPiBNQVhfTkJEKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIm5iZDogY2Fubm90IGFsbG9jYXRlIG1vcmUgdGhhbiAldSBuYmRzOyAldSByZXF1ZXN0ZWQuXG4iLCBNQVhfTkJELAorCQkJCW5iZHNfbWF4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5iZHNfbWF4OyBpKyspIHsKIAkJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBhbGxvY19kaXNrKDEpOwogCQlpZiAoIWRpc2spCiAJCQlnb3RvIG91dDsKQEAgLTY3Myw3ICs2ODAsNyBAQAogCWRwcmludGsoREJHX0lOSVQsICJuYmQ6IGRlYnVnZmxhZ3M9MHgleFxuIiwgZGVidWdmbGFncyk7CiAKIAlkZXZmc19ta19kaXIoIm5iZCIpOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfTkJEOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbmJkc19tYXg7IGkrKykgewogCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IG5iZF9kZXZbaV0uZGlzazsKIAkJbmJkX2RldltpXS5maWxlID0gTlVMTDsKIAkJbmJkX2RldltpXS5tYWdpYyA9IExPX01BR0lDOwpAQCAtNzA2LDggKzcxMyw5IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbmJkX2NsZWFudXAodm9pZCkKIHsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX05CRDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5iZHNfbWF4OyBpKyspIHsKIAkJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBuYmRfZGV2W2ldLmRpc2s7CisJCW5iZF9kZXZbaV0ubWFnaWMgPSAwOwogCQlpZiAoZGlzaykgewogCQkJZGVsX2dlbmRpc2soZGlzayk7CiAJCQlibGtfY2xlYW51cF9xdWV1ZShkaXNrLT5xdWV1ZSk7CkBAIC03MjUsNiArNzMzLDggQEAKIE1PRFVMRV9ERVNDUklQVElPTigiTmV0d29yayBCbG9jayBEZXZpY2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgIkhvdyBtYW55IG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplLiIpOwogI2lmbmRlZiBOREVCVUcKIG1vZHVsZV9wYXJhbShkZWJ1Z2ZsYWdzLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z2ZsYWdzLCAiZmxhZ3MgZm9yIGNvbnRyb2xsaW5nIGRlYnVnIG91dHB1dCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9ub29wLWlvc2NoZWQuYyBiL2RyaXZlcnMvYmxvY2svbm9vcC1pb3NjaGVkLmMKaW5kZXggODg4YzQ3Ny4uYjE3MzBiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9ub29wLWlvc2NoZWQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25vb3AtaW9zY2hlZC5jCkBAIC0xMywzNCArMTMsMTMgQEAKIHN0YXRpYyBpbnQgZWxldmF0b3Jfbm9vcF9tZXJnZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICoqcmVxLAogCQkJICAgICAgIHN0cnVjdCBiaW8gKmJpbykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSA9ICZxLT5xdWV1ZV9oZWFkOwotCXN0cnVjdCByZXF1ZXN0ICpfX3JxOwogCWludCByZXQ7CiAKLQlpZiAoKHJldCA9IGVsdl90cnlfbGFzdF9tZXJnZShxLCBiaW8pKSkgeworCXJldCA9IGVsdl90cnlfbGFzdF9tZXJnZShxLCBiaW8pOworCWlmIChyZXQgIT0gRUxFVkFUT1JfTk9fTUVSR0UpCiAJCSpyZXEgPSBxLT5sYXN0X21lcmdlOwotCQlyZXR1cm4gcmV0OwotCX0KIAotCXdoaWxlICgoZW50cnkgPSBlbnRyeS0+cHJldikgIT0gJnEtPnF1ZXVlX2hlYWQpIHsKLQkJX19ycSA9IGxpc3RfZW50cnlfcnEoZW50cnkpOwotCi0JCWlmIChfX3JxLT5mbGFncyAmIChSRVFfU09GVEJBUlJJRVIgfCBSRVFfSEFSREJBUlJJRVIpKQotCQkJYnJlYWs7Ci0JCWVsc2UgaWYgKF9fcnEtPmZsYWdzICYgUkVRX1NUQVJURUQpCi0JCQlicmVhazsKLQotCQlpZiAoIWJsa19mc19yZXF1ZXN0KF9fcnEpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChyZXQgPSBlbHZfdHJ5X21lcmdlKF9fcnEsIGJpbykpKSB7Ci0JCQkqcmVxID0gX19ycTsKLQkJCXEtPmxhc3RfbWVyZ2UgPSBfX3JxOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCXJldHVybiBFTEVWQVRPUl9OT19NRVJHRTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBlbGV2YXRvcl9ub29wX21lcmdlX3JlcXVlc3RzKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcmQuYyBiL2RyaXZlcnMvYmxvY2svcmQuYwppbmRleCAxNDVjMWZiLi5mOGE4YjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3JkLmMKKysrIGIvZHJpdmVycy9ibG9jay9yZC5jCkBAIC03NCw3ICs3NCw3IEBACiAgKiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dXAgcm91dGluZSAoZnJvbSB0aGUgc3RvcmVkIGJvb3Qgc2VjdG9yCiAgKiBpbmZvcm1hdGlvbikuCiAgKi8KLWludCByZF9zaXplID0gQ09ORklHX0JMS19ERVZfUkFNX1NJWkU7CQkvKiBTaXplIG9mIHRoZSBSQU0gZGlza3MgKi8KK3N0YXRpYyBpbnQgcmRfc2l6ZSA9IENPTkZJR19CTEtfREVWX1JBTV9TSVpFOwkvKiBTaXplIG9mIHRoZSBSQU0gZGlza3MgKi8KIC8qCiAgKiBJdCB3b3VsZCBiZSB2ZXJ5IGRlc2lyYWJsZSB0byBoYXZlIGEgc29mdC1ibG9ja3NpemUgKHRoYXQgaW4gdGhlIGNhc2UKICAqIG9mIHRoZSByYW1kaXNrIGRyaXZlciBpcyBhbHNvIHRoZSBoYXJkYmxvY2tzaXplIDspIG9mIFBBR0VfU0laRSBiZWNhdXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKaW5kZXggOWRlY2E0OS4uYmVhYTU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jCisrKyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwpAQCAtNjQ1LDcgKzY0NSw3IEBACiAJCXJldCA9IGNkcm9tX21yd19iZ2Zvcm1hdF9zdXNwKGNkaSwgMCk7CiAJfQogCi0JaWYgKCFyZXQpCisJaWYgKCFyZXQgJiYgY2RpLT5tZWRpYV93cml0dGVuKQogCQlyZXQgPSBjZHJvbV9mbHVzaF9jYWNoZShjZGkpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vY2R1MzFhLmMgYi9kcml2ZXJzL2Nkcm9tL2NkdTMxYS5jCmluZGV4IDY0N2E3MWIuLmFjOTZkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2R1MzFhLmMKKysrIGIvZHJpdmVycy9jZHJvbS9jZHUzMWEuYwpAQCAtMjkyLDcgKzI5Miw3IEBACiAKIC8qIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIHdha2UgdGhpcyBxdWV1ZSB1cCB3aGVuIGl0IGdldHMgYW4KICAgIGludGVycnVwdHMuICovCi1ERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChjZHUzMWFfaXJxX3dhaXQpOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGNkdTMxYV9pcnFfd2FpdCk7CiBzdGF0aWMgaW50IGlycV9mbGFnID0gMDsKIAogc3RhdGljIGludCBjdXJyX2NvbnRyb2xfcmVnID0gMDsJLyogQ3VycmVudCB2YWx1ZSBvZiB0aGUgY29udHJvbCByZWdpc3RlciAqLwpAQCAtMjk0Nyw3ICsyOTQ3LDcgQEAKIAlyZXR1cm4gY2Ryb21fbWVkaWFfY2hhbmdlZCgmc2NkX2luZm8pOwogfQogCi1zdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgc2NkX2Jkb3BzID0KK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgc2NkX2Jkb3BzID0KIHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gc2NkX2Jsb2NrX29wZW4sCkBAIC0zMjE2LDcgKzMyMTYsNyBAQAogfQogCiAKLXZvaWQgX19leGl0IGNkdTMxYV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2R1MzFhX2V4aXQodm9pZCkKIHsKIAlkZWxfZ2VuZGlzayhzY2RfZ2VuZGlzayk7CiAJcHV0X2Rpc2soc2NkX2dlbmRpc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9tY2R4LmMgYi9kcml2ZXJzL2Nkcm9tL21jZHguYwppbmRleCBjY2RlN2FiLi4wN2JiZDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL21jZHguYworKysgYi9kcml2ZXJzL2Nkcm9tL21jZHguYwpAQCAtMTA3LDIwICsxMDcsMjAgQEAKICAgIFRoZSBfZGlyZWN0XyBzaXplIGlzIHRoZSBudW1iZXIgb2Ygc2VjdG9ycyB3ZSdyZSBhbGxvd2VkIHRvIHNraXAKICAgIGRpcmVjdGx5IChwZXJmb3JtaW5nIGEgcmVhZCBpbnN0ZWFkIG9mIHJlcXVlc3RpbmcgdGhlIG5ldyBzZWN0b3IKICAgIG5lZWRlZCAqLwotY29uc3QgaW50IFJFUVVFU1RfU0laRSA9IDgwMDsJLyogc2hvdWxkIGJlIGxlc3MgdGhlbiAyNTUgKiA0ICovCi1jb25zdCBpbnQgRElSRUNUX1NJWkUgPSA0MDA7CS8qIHNob3VsZCBiZSBsZXNzIHRoZW4gUkVRVUVTVF9TSVpFICovCitzdGF0aWMgY29uc3QgaW50IFJFUVVFU1RfU0laRSA9IDgwMDsJLyogc2hvdWxkIGJlIGxlc3MgdGhlbiAyNTUgKiA0ICovCitzdGF0aWMgY29uc3QgaW50IERJUkVDVF9TSVpFID0gNDAwOwkvKiBzaG91bGQgYmUgbGVzcyB0aGVuIFJFUVVFU1RfU0laRSAqLwogCiBlbnVtIGRyaXZlbW9kZXMgeyBUT0MsIERBVEEsIFJBVywgQ09PS0VEIH07CiBlbnVtIGRhdGFtb2RlcyB7IE1PREUwLCBNT0RFMSwgTU9ERTIgfTsKIGVudW0gcmVzZXRtb2RlcyB7IFNPRlQsIEhBUkQgfTsKIAotY29uc3QgaW50IFNJTkdMRSA9IDB4MDE7CS8qIHNpbmdsZSBzcGVlZCBkcml2ZSAoRlgwMDFTLCBMVSkgKi8KLWNvbnN0IGludCBET1VCTEUgPSAweDAyOwkvKiBkb3VibGUgc3BlZWQgZHJpdmUgKEZYMDAxRCwgLi4/ICovCi1jb25zdCBpbnQgRE9PUiA9IDB4MDQ7CQkvKiBkb29yIGxvY2tpbmcgY2FwYWJpbGl0eSAqLwotY29uc3QgaW50IE1VTFRJID0gMHgwODsJCS8qIG11bHRpIHNlc3Npb24gY2FwYWJpbGl0eSAqLworc3RhdGljIGNvbnN0IGludCBTSU5HTEUgPSAweDAxOwkJLyogc2luZ2xlIHNwZWVkIGRyaXZlIChGWDAwMVMsIExVKSAqLworc3RhdGljIGNvbnN0IGludCBET1VCTEUgPSAweDAyOwkJLyogZG91YmxlIHNwZWVkIGRyaXZlIChGWDAwMUQsIC4uPyAqLworc3RhdGljIGNvbnN0IGludCBET09SID0gMHgwNDsJCS8qIGRvb3IgbG9ja2luZyBjYXBhYmlsaXR5ICovCitzdGF0aWMgY29uc3QgaW50IE1VTFRJID0gMHgwODsJCS8qIG11bHRpIHNlc3Npb24gY2FwYWJpbGl0eSAqLwogCi1jb25zdCB1bnNpZ25lZCBjaGFyIFJFQUQxWCA9IDB4YzA7Ci1jb25zdCB1bnNpZ25lZCBjaGFyIFJFQUQyWCA9IDB4YzE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBSRUFEMVggPSAweGMwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgUkVBRDJYID0gMHhjMTsKIAogCiAvKiBERUNMQVJBVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIxMCw5ICsyMTAsNyBAQAogIAlyZXBlYXRlZCBoZXJlIHRvIHNob3cgd2hhdCdzIGdvaW5nIG9uLiAgQW5kIHRvIHNlbnNlLCBpZiB0aGV5J3JlCiAJY2hhbmdlZCBlbHNld2hlcmUuICovCiAKLS8qIGRlY2xhcmVkIGluIGJsay5oICovCi1pbnQgbWNkeF9pbml0KHZvaWQpOwotdm9pZCBkb19tY2R4X3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICogcSk7CitzdGF0aWMgaW50IG1jZHhfaW5pdCh2b2lkKTsKIAogc3RhdGljIGludCBtY2R4X2Jsb2NrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC01NjksNyArNTY3LDcgQEAKIAl9CiB9CiAKLXZvaWQgZG9fbWNkeF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqIHEpCitzdGF0aWMgdm9pZCBkb19tY2R4X3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICogcSkKIHsKIAlzdHJ1Y3Qgc19kcml2ZV9zdHVmZiAqc3R1ZmZwOwogCXN0cnVjdCByZXF1ZXN0ICpyZXE7CkBAIC0xMDI4LDcgKzEwMjYsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fZXhpdCBtY2R4X2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBtY2R4X2V4aXQodm9pZCkKIHsKIAlpbnQgaTsKIApAQCAtMTA3NSw3ICsxMDczLDcgQEAKIAogLyogU3VwcG9ydCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1pbnQgX19pbml0IG1jZHhfaW5pdF9kcml2ZShpbnQgZHJpdmUpCitzdGF0aWMgaW50IF9faW5pdCBtY2R4X2luaXRfZHJpdmUoaW50IGRyaXZlKQogewogCXN0cnVjdCBzX3ZlcnNpb24gdmVyc2lvbjsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKQEAgLTEyNjEsNyArMTI1OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBfX2luaXQgbWNkeF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtY2R4X2luaXQodm9pZCkKIHsKIAlpbnQgZHJpdmU7CiAJeHdhcm4oIlZlcnNpb24gMi4xNChocykgXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vc2JwY2QuYyBiL2RyaXZlcnMvY2Ryb20vc2JwY2QuYwppbmRleCBmYzJjNDMzLi40NTJkMzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL3NicGNkLmMKKysrIGIvZHJpdmVycy9jZHJvbS9zYnBjZC5jCkBAIC01ODk1LDcgKzU4OTUsNyBAQAogfQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAjaWZkZWYgTU9EVUxFCi12b2lkIHNicGNkX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIHNicGNkX2V4aXQodm9pZCkKIHsKIAlpbnQgajsKIAkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggMDk2YTEyMC4uNWVkNjUxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAgLTE1Myw3ICsxNTMsNyBAQAogCiBjb25maWcgRVNQU0VSSUFMCiAJdHJpc3RhdGUgIkhheWVzIEVTUCBzZXJpYWwgcG9ydCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIElTQSAmJiBCUk9LRU5fT05fU01QCisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgSVNBICYmIEJST0tFTl9PTl9TTVAgJiYgSVNBX0RNQV9BUEkKIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIHdoaWNoIHN1cHBvcnRzIEhheWVzIEVTUCBzZXJpYWwgcG9ydHMuICBCb3RoIHNpbmdsZQogCSAgcG9ydCBjYXJkcyBhbmQgbXVsdGlwb3J0IGNhcmRzIGFyZSBzdXBwb3J0ZWQuICBNYWtlIHN1cmUgdG8gcmVhZApAQCAtMTk1LDcgKzE5NSw3IEBACiAKIGNvbmZpZyBTWU5DTElOSwogCXRyaXN0YXRlICJNaWNyb2dhdGUgU3luY0xpbmsgY2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIFBDSQorCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIFBDSSAmJiBJU0FfRE1BX0FQSQogCWhlbHAKIAkgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBTeW5jTGluayBJU0EgYW5kIFBDSSBtdWx0aXByb3RvY29sIHNlcmlhbAogCSAgYWRhcHRlcnMuIFRoZXNlIGFkYXB0ZXJzIHN1cHBvcnQgYXN5bmNocm9ub3VzIGFuZCBIRExDIGJpdApAQCAtMzk5LDYgKzM5OSwyMCBAQAogCSAgY29udHJvbGxlciBjb21tdW5pY2F0aW9uIGZyb20gdXNlciBzcGFjZSAoeW91IHdhbnQgdGhpcyEpLAogCSAgc2F5IFkuICBPdGhlcndpc2UsIHNheSBOLgogCitjb25maWcgU0dJX1RJT0NYCisgICAgICAgYm9vbCAiU0dJIFRJTyBDWCBkcml2ZXIgc3VwcG9ydCIKKyAgICAgICBkZXBlbmRzIG9uIChJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDKQorICAgICAgIGhlbHAKKyAgICAgICAgIElmIHlvdSBoYXZlIGFuIFNHSSBBbHRpeCBhbmQgeW91IGhhdmUgZnBnYSBkZXZpY2VzIGF0dGFjaGVkCisgICAgICAgICB0byB5b3VyIFRJTywgc2F5IFkgaGVyZSwgb3RoZXJ3aXNlIHNheSBOLgorCitjb25maWcgU0dJX01CQ1MKKyAgICAgICB0cmlzdGF0ZSAiU0dJIEZQR0EgQ29yZSBTZXJ2aWNlcyBkcml2ZXIgc3VwcG9ydCIKKyAgICAgICBkZXBlbmRzIG9uIFNHSV9USU9DWAorICAgICAgIGhlbHAKKyAgICAgICAgIElmIHlvdSBoYXZlIGFuIFNHSSBBbHRpeCB3aXRoIGFuIGF0dGFjaGVkIFNBQnJpY2sKKyAgICAgICAgIHNheSBZIG9yIE0gaGVyZSwgb3RoZXJ3aXNlIHNheSBOLgorCiBzb3VyY2UgImRyaXZlcnMvc2VyaWFsL0tjb25maWciCiAKIGNvbmZpZyBVTklYOThfUFRZUwpAQCAtOTY4LDcgKzk4Miw3IEBACiAKIGNvbmZpZyBIQU5HQ0hFQ0tfVElNRVIKIAl0cmlzdGF0ZSAiSGFuZ2NoZWNrIHRpbWVyIgotCWRlcGVuZHMgb24gWDg2XzY0IHx8IFg4NgorCWRlcGVuZHMgb24gWDg2XzY0IHx8IFg4NiB8fCBJQTY0IHx8IFBQQzY0IHx8IEFSQ0hfUzM5MAogCWhlbHAKIAkgIFRoZSBoYW5nY2hlY2stdGltZXIgbW9kdWxlIGRldGVjdHMgd2hlbiB0aGUgc3lzdGVtIGhhcyBnb25lCiAJICBvdXQgdG8gbHVuY2ggcGFzdCBhIGNlcnRhaW4gbWFyZ2luLiAgSXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggNTRlZDc2YS4uZTNmNWMzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtNDIsMTEgKzQyLDEyIEBACiBvYmotJChDT05GSUdfUklPKQkJKz0gcmlvLyBnZW5lcmljX3NlcmlhbC5vCiBvYmotJChDT05GSUdfSFZDX0NPTlNPTEUpCSs9IGh2Y19jb25zb2xlLm8gaHZzaS5vCiBvYmotJChDT05GSUdfUkFXX0RSSVZFUikJKz0gcmF3Lm8KLW9iai0kKENPTkZJR19TR0lfU05TQykJCSs9IHNuc2Mubworb2JqLSQoQ09ORklHX1NHSV9TTlNDKQkJKz0gc25zYy5vIHNuc2NfZXZlbnQubwogb2JqLSQoQ09ORklHX01NVElNRVIpCQkrPSBtbXRpbWVyLm8KIG9iai0kKENPTkZJR19WSU9DT05TKSArPSB2aW9jb25zLm8KIG9iai0kKENPTkZJR19WSU9UQVBFKQkJKz0gdmlvdGFwZS5vCiBvYmotJChDT05GSUdfSFZDUykJCSs9IGh2Y3Mubworb2JqLSQoQ09ORklHX1NHSV9NQkNTKQkJKz0gbWJjcy5vCiAKIG9iai0kKENPTkZJR19QUklOVEVSKSArPSBscC5vCiBvYmotJChDT05GSUdfVElQQVIpICs9IHRpcGFyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKaW5kZXggYzg2YTIyYy4uMDIxMmZlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXs0LCAxMDI0LCAwLCAzfQogfTsKIAotc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGFsaV9nZW5lcmljX2JyaWRnZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgYWxpX2dlbmVyaWNfYnJpZGdlID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmFwZXJ0dXJlX3NpemVzCQk9IGFsaV9nZW5lcmljX3NpemVzLAogCS5zaXplX3R5cGUJCT0gVTMyX0FQRVJfU0laRSwKQEAgLTIxNSw3ICsyMTUsNyBAQAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWxpX2Rlc3Ryb3lfcGFnZSwKIH07CiAKLXN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbGlfbTE1NDFfYnJpZGdlID0geworc3RhdGljIHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbGlfbTE1NDFfYnJpZGdlID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmFwZXJ0dXJlX3NpemVzCQk9IGFsaV9nZW5lcmljX3NpemVzLAogCS5zaXplX3R5cGUJCT0gVTMyX0FQRVJfU0laRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKaW5kZXggZjFlYTg3ZS4uZTYyYTNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKQEAgLTM1OCw3ICszNTgsNyBAQAogCXsubWFzayA9IDEsIC50eXBlID0gMH0KIH07CiAKLXN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbWRfaXJvbmdhdGVfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbWRfaXJvbmdhdGVfZHJpdmVyID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmFwZXJ0dXJlX3NpemVzCQk9IGFtZF9pcm9uZ2F0ZV9zaXplcywKIAkuc2l6ZV90eXBlCQk9IExWTDJfQVBFUl9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKaW5kZXggOTA1ZjA2Mi4uMzk5YzA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCkBAIC0yNDMsNyArMjQzLDcgQEAKIH0KIAogCi1zdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgYW1kXzgxNTFfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbWRfODE1MV9kcml2ZXIgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuYXBlcnR1cmVfc2l6ZXMJCT0gYW1kXzgxNTFfc2l6ZXMsCiAJLnNpemVfdHlwZQkJPSBVMzJfQVBFUl9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwppbmRleCA3NTdkZGUwLi5hNjVmODgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhdGlfZ2VuZXJpY19icmlkZ2UgPSB7CitzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGF0aV9nZW5lcmljX2JyaWRnZSA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5hcGVydHVyZV9zaXplcwkJPSBhdGlfZ2VuZXJpY19zaXplcywKIAkuc2l6ZV90eXBlCQk9IExWTDJfQVBFUl9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYwppbmRleCBjMzQ0MmYzYy4uMmYzZGZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKQEAgLTk3LDcgKzk3LDcgQEAKIEVYUE9SVF9TWU1CT0woYWdwX2JhY2tlbmRfcmVsZWFzZSk7CiAKIAotc3RydWN0IHsgaW50IG1lbSwgYWdwOyB9IG1heGVzX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IHsgaW50IG1lbSwgYWdwOyB9IG1heGVzX3RhYmxlW10gPSB7CiAJezAsIDB9LAogCXszMiwgNH0sCiAJezY0LCAyOH0sCkBAIC0zMjIsNyArMzIyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2V4aXQgYWdwX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZ3BfZXhpdCh2b2lkKQogewogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYwppbmRleCAyYTg3Y2VjLi4xMzgzYzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogfQogCiAKLXN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBlZmZpY2Vvbl9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGVmZmljZW9uX2RyaXZlciA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5hcGVydHVyZV9zaXplcwkJPSBlZmZpY2Vvbl9nZW5lcmljX3NpemVzLAogCS5zaXplX3R5cGUJCT0gTFZMMl9BUEVSX1NJWkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2Zyb250ZW5kLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2Zyb250ZW5kLmMKaW5kZXggZjYzMzYyMy4uM2RmYjY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZnJvbnRlbmQuYwpAQCAtMjM1LDcgKzIzNSw3IEBACiAKIC8qIEZpbGUgcHJpdmF0ZSBsaXN0IHJvdXRpbmVzICovCiAKLXN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICphZ3BfZmluZF9wcml2YXRlKHBpZF90IHBpZCkKK3N0YXRpYyBzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqYWdwX2ZpbmRfcHJpdmF0ZShwaWRfdCBwaWQpCiB7CiAJc3RydWN0IGFncF9maWxlX3ByaXZhdGUgKmN1cnI7CiAKQEAgLTI1MCw3ICsyNTAsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkIGFncF9pbnNlcnRfZmlsZV9wcml2YXRlKHN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICogcHJpdikKK3N0YXRpYyB2b2lkIGFncF9pbnNlcnRfZmlsZV9wcml2YXRlKHN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICogcHJpdikKIHsKIAlzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJldjsKIApAQCAtMjYyLDcgKzI2Miw3IEBACiAJYWdwX2ZlLmZpbGVfcHJpdl9saXN0ID0gcHJpdjsKIH0KIAotdm9pZCBhZ3BfcmVtb3ZlX2ZpbGVfcHJpdmF0ZShzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqIHByaXYpCitzdGF0aWMgdm9pZCBhZ3BfcmVtb3ZlX2ZpbGVfcHJpdmF0ZShzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqIHByaXYpCiB7CiAJc3RydWN0IGFncF9maWxlX3ByaXZhdGUgKm5leHQ7CiAJc3RydWN0IGFncF9maWxlX3ByaXZhdGUgKnByZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCmluZGV4IDRmN2EzZTguLjgwZGFmYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCkBAIC0yODgsNyArMjg4LDcgQEAKIH07CiAKIAotc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIG52aWRpYV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIG52aWRpYV9kcml2ZXIgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuYXBlcnR1cmVfc2l6ZXMJCT0gbnZpZGlhX2dlbmVyaWNfc2l6ZXMsCiAJLnNpemVfdHlwZQkJPSBVOF9BUEVSX1NJWkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3Npcy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jCmluZGV4IGNmY2NhY2IuLmViYzA1NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAl7NCwgMTAyNCwgMCwgM30KIH07CiAKLXN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBzaXNfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBzaXNfZHJpdmVyID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmFwZXJ0dXJlX3NpemVzIAk9IHNpc19nZW5lcmljX3NpemVzLAogCS5zaXplX3R5cGUJCT0gVThfQVBFUl9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYwppbmRleCBiYjMzOGQ5Li4xMGMyMzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJYWdwX2RldmljZV9jb21tYW5kKGNvbW1hbmQsIDApOwogfQogCi1zdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgc3dvcmtzX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgc3dvcmtzX2RyaXZlciA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5hcGVydHVyZV9zaXplcwkJPSBzZXJ2ZXJ3b3Jrc19zaXplcywKIAkuc2l6ZV90eXBlCQk9IExWTDJfQVBFUl9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwppbmRleCBlMTQ1MWRkLi5jODQ3ZGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiB9CiAKIAotc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIHZpYV9hZ3AzX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgdmlhX2FncDNfZHJpdmVyID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmFwZXJ0dXJlX3NpemVzCQk9IGFncDNfZ2VuZXJpY19zaXplcywKIAkuc2l6ZV90eXBlCQk9IFU4X0FQRVJfU0laRSwKQEAgLTE5Myw3ICsxOTMsNyBAQAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWdwX2dlbmVyaWNfZGVzdHJveV9wYWdlLAogfTsKIAotc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIHZpYV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIHZpYV9kcml2ZXIgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuYXBlcnR1cmVfc2l6ZXMJCT0gdmlhX2dlbmVyaWNfc2l6ZXMsCiAJLnNpemVfdHlwZQkJPSBVOF9BUEVSX1NJWkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHRsay5jIGIvZHJpdmVycy9jaGFyL2R0bGsuYwppbmRleCA5MDNlNGMzLi5hMjI5OTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHRsay5jCisrKyBiL2RyaXZlcnMvY2hhci9kdGxrLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNkZWZpbmUgS0VSTkVMCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3IgdmVyaWZ5X2FyZWEgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIGZvciAtRUJVU1kgKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogZm9yIHJlcXVlc3RfcmVnaW9uICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogZm9yIGxvb3BzX3Blcl9qaWZmeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2hhbmdjaGVjay10aW1lci5jIGIvZHJpdmVycy9jaGFyL2hhbmdjaGVjay10aW1lci5jCmluZGV4IDgzZDZiMzcuLjc4ZTY1MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9oYW5nY2hlY2stdGltZXIuYworKysgYi9kcml2ZXJzL2NoYXIvaGFuZ2NoZWNrLXRpbWVyLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogRHJpdmVyIGZvciBhIGxpdHRsZSBpbyBmZW5jaW5nIHRpbWVyLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBPcmFjbGUgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQXV0aG9yOiBKb2VsIEJlY2tlciA8am9lbC5iZWNrZXJAb3JhY2xlLmNvbT4KICAqCkBAIC00NCwxMSArNDQsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiAKIAotI2RlZmluZSBWRVJTSU9OX1NUUiAiMC41LjAiCisjZGVmaW5lIFZFUlNJT05fU1RSICIwLjkuMCIKIAogI2RlZmluZSBERUZBVUxUX0lPRkVOQ0VfTUFSR0lOIDYwCS8qIERlZmF1bHQgZnVkZ2UgZmFjdG9yLCBpbiBzZWNvbmRzICovCiAjZGVmaW5lIERFRkFVTFRfSU9GRU5DRV9USUNLIDE4MAkvKiBEZWZhdWx0IHRpbWVyIHRpbWVvdXQsIGluIHNlY29uZHMgKi8KQEAgLTU2LDE4ICs1OSw4OSBAQAogc3RhdGljIGludCBoYW5nY2hlY2tfdGljayA9IERFRkFVTFRfSU9GRU5DRV9USUNLOwogc3RhdGljIGludCBoYW5nY2hlY2tfbWFyZ2luID0gREVGQVVMVF9JT0ZFTkNFX01BUkdJTjsKIHN0YXRpYyBpbnQgaGFuZ2NoZWNrX3JlYm9vdDsgIC8qIERlZmF1bHRzIHRvIG5vdCByZWJvb3QgKi8KK3N0YXRpYyBpbnQgaGFuZ2NoZWNrX2R1bXBfdGFza3M7ICAvKiBEZWZhdWx0cyB0byBub3QgZHVtcGluZyBTeXNSUSBUICovCiAKLS8qIERyaXZlciBvcHRpb25zICovCisvKiBvcHRpb25zIC0gbW9kdWxhciAqLwogbW9kdWxlX3BhcmFtKGhhbmdjaGVja190aWNrLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhoYW5nY2hlY2tfdGljaywgIlRpbWVyIGRlbGF5LiIpOwogbW9kdWxlX3BhcmFtKGhhbmdjaGVja19tYXJnaW4sIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGhhbmdjaGVja19tYXJnaW4sICJJZiB0aGUgaGFuZ2NoZWNrIHRpbWVyIGhhcyBiZWVuIGRlbGF5ZWQgbW9yZSB0aGFuIGhhbmdjaGVja19tYXJnaW4gc2Vjb25kcywgdGhlIGRyaXZlciB3aWxsIGZpcmUuIik7CiBtb2R1bGVfcGFyYW0oaGFuZ2NoZWNrX3JlYm9vdCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaGFuZ2NoZWNrX3JlYm9vdCwgIklmIG5vbnplcm8sIHRoZSBtYWNoaW5lIHdpbGwgcmVib290IHdoZW4gdGhlIHRpbWVyIG1hcmdpbiBpcyBleGNlZWRlZC4iKTsKK21vZHVsZV9wYXJhbShoYW5nY2hlY2tfZHVtcF90YXNrcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaGFuZ2NoZWNrX2R1bXBfdGFza3MsICJJZiBub256ZXJvLCB0aGUgbWFjaGluZSB3aWxsIGR1bXAgdGhlIHN5c3RlbSB0YXNrIHN0YXRlIHdoZW4gdGhlIHRpbWVyIG1hcmdpbiBpcyBleGNlZWRlZC4iKTsKIAotTU9EVUxFX0FVVEhPUigiSm9lbCBCZWNrZXIiKTsKK01PRFVMRV9BVVRIT1IoIk9yYWNsZSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJIYW5nY2hlY2stdGltZXIgZGV0ZWN0cyB3aGVuIHRoZSBzeXN0ZW0gaGFzIGdvbmUgb3V0IHRvIGx1bmNoIHBhc3QgYSBjZXJ0YWluIG1hcmdpbi4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFZFUlNJT05fU1RSKTsKKworLyogb3B0aW9ucyAtIG5vbm1vZHVsYXIgKi8KKyNpZm5kZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgX19pbml0IGhhbmdjaGVja19wYXJzZV90aWNrKGNoYXIgKnN0cikKK3sKKwlpbnQgcGFyOworCWlmIChnZXRfb3B0aW9uKCZzdHIsJnBhcikpCisJCWhhbmdjaGVja190aWNrID0gcGFyOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9faW5pdCBoYW5nY2hlY2tfcGFyc2VfbWFyZ2luKGNoYXIgKnN0cikKK3sKKwlpbnQgcGFyOworCWlmIChnZXRfb3B0aW9uKCZzdHIsJnBhcikpCisJCWhhbmdjaGVja19tYXJnaW4gPSBwYXI7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGhhbmdjaGVja19wYXJzZV9yZWJvb3QoY2hhciAqc3RyKQoreworCWludCBwYXI7CisJaWYgKGdldF9vcHRpb24oJnN0ciwmcGFyKSkKKwkJaGFuZ2NoZWNrX3JlYm9vdCA9IHBhcjsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2luaXQgaGFuZ2NoZWNrX3BhcnNlX2R1bXBfdGFza3MoY2hhciAqc3RyKQoreworCWludCBwYXI7CisJaWYgKGdldF9vcHRpb24oJnN0ciwmcGFyKSkKKwkJaGFuZ2NoZWNrX2R1bXBfdGFza3MgPSBwYXI7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoImhjaGVja190aWNrIiwgaGFuZ2NoZWNrX3BhcnNlX3RpY2spOworX19zZXR1cCgiaGNoZWNrX21hcmdpbiIsIGhhbmdjaGVja19wYXJzZV9tYXJnaW4pOworX19zZXR1cCgiaGNoZWNrX3JlYm9vdCIsIGhhbmdjaGVja19wYXJzZV9yZWJvb3QpOworX19zZXR1cCgiaGNoZWNrX2R1bXBfdGFza3MiLCBoYW5nY2hlY2tfcGFyc2VfZHVtcF90YXNrcyk7CisjZW5kaWYgLyogbm90IE1PRFVMRSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjIGRlZmluZSBIQVZFX01PTk9UT05JQworIyBkZWZpbmUgVElNRVJfRlJFUSAxMDAwMDAwMDAwVUxMCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX1MzOTApCisvKiBGQTI0MDAwMCBpcyAxIFNlY29uZCBpbiB0aGUgSUJNIHRpbWUgdW5pdmVyc2UgKFBhZ2UgNC0zOCBQcmluY2lwbGVzIG9mIE9wIGZvciB6U2VyaWVzICovCisjIGRlZmluZSBUSU1FUl9GUkVRIDB4RkEyNDAwMDBVTEwKKyNlbGlmIGRlZmluZWQoQ09ORklHX0lBNjQpCisjIGRlZmluZSBUSU1FUl9GUkVRICgodW5zaWduZWQgbG9uZyBsb25nKWxvY2FsX2NwdV9kYXRhLT5pdGNfZnJlcSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQzY0KQorIyBkZWZpbmUgVElNRVJfRlJFUSAoSFoqbG9vcHNfcGVyX2ppZmZ5KQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX01PTk9UT05JQworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBtb25vdG9uaWNfY2xvY2sodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbW9ub3RvbmljX2Nsb2NrKHZvaWQpCit7CisjIGlmZGVmIF9fczM5MF9fCisJLyogcmV0dXJucyB0aGUgVE9ELiAgc2VlIDQtMzggUHJpbmNpcGxlcyBvZiBPcCBvZiB6U2VyaWVzICovCisJcmV0dXJuIGdldF9jbG9jaygpOworIyBlbHNlCisJcmV0dXJuIGdldF9jeWNsZXMoKTsKKyMgZW5kaWYgIC8qIF9fczM5MF9fICovCit9CisjZW5kaWYgIC8qIEhBVkVfTU9OT1RPTklDICovCiAKIAogLyogTGFzdCB0aW1lIHNjaGVkdWxlZCAqLwpAQCAtNzgsNyArMTUyLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBoYW5nY2hlY2tfdGlja3RvY2sgPQogCQlUSU1FUl9JTklUSUFMSVpFUihoYW5nY2hlY2tfZmlyZSwgMCwgMCk7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbW9ub3RvbmljX2Nsb2NrKHZvaWQpOwogCiBzdGF0aWMgdm9pZCBoYW5nY2hlY2tfZmlyZSh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC05Miw2ICsxNjUsMTIgQEAKIAkJdHNjX2RpZmYgPSAoY3VyX3RzYyArICh+MFVMTCAtIGhhbmdjaGVja190c2MpKTsgLyogb3Igc29tZXRoaW5nICovCiAKIAlpZiAodHNjX2RpZmYgPiBoYW5nY2hlY2tfdHNjX21hcmdpbikgeworCQlpZiAoaGFuZ2NoZWNrX2R1bXBfdGFza3MpIHsKKwkJCXByaW50ayhLRVJOX0NSSVQgIkhhbmdjaGVjazogVGFzayBzdGF0ZTpcbiIpOworI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQorCQkJaGFuZGxlX3N5c3JxKCd0JywgTlVMTCwgTlVMTCk7CisjZW5kaWYgIC8qIENPTkZJR19NQUdJQ19TWVNSUSAqLworCQl9CiAJCWlmIChoYW5nY2hlY2tfcmVib290KSB7CiAJCQlwcmludGsoS0VSTl9DUklUICJIYW5nY2hlY2s6IGhhbmdjaGVjayBpcyByZXN0YXJ0aW5nIHRoZSBtYWNoaW5lLlxuIik7CiAJCQltYWNoaW5lX3Jlc3RhcnQoTlVMTCk7CkBAIC0xMDgsMTAgKzE4NywxNiBAQAogewogCXByaW50aygiSGFuZ2NoZWNrOiBzdGFydGluZyBoYW5nY2hlY2sgdGltZXIgJXMgKHRpY2sgaXMgJWQgc2Vjb25kcywgbWFyZ2luIGlzICVkIHNlY29uZHMpLlxuIiwKIAkgICAgICAgVkVSU0lPTl9TVFIsIGhhbmdjaGVja190aWNrLCBoYW5nY2hlY2tfbWFyZ2luKTsKLQotCWhhbmdjaGVja190c2NfbWFyZ2luID0gaGFuZ2NoZWNrX21hcmdpbiArIGhhbmdjaGVja190aWNrOwotCWhhbmdjaGVja190c2NfbWFyZ2luICo9IDEwMDAwMDAwMDA7Ci0KKyNpZiBkZWZpbmVkIChIQVZFX01PTk9UT05JQykKKwlwcmludGsoIkhhbmdjaGVjazogVXNpbmcgbW9ub3RvbmljX2Nsb2NrKCkuXG4iKTsKKyNlbGlmIGRlZmluZWQoX19zMzkwX18pCisJcHJpbnRrKCJIYW5nY2hlY2s6IFVzaW5nIFRPRC5cbiIpOworI2Vsc2UKKwlwcmludGsoIkhhbmdjaGVjazogVXNpbmcgZ2V0X2N5Y2xlcygpLlxuIik7CisjZW5kaWYgIC8qIEhBVkVfTU9OT1RPTklDICovCisJaGFuZ2NoZWNrX3RzY19tYXJnaW4gPQorCQkodW5zaWduZWQgbG9uZyBsb25nKShoYW5nY2hlY2tfbWFyZ2luICsgaGFuZ2NoZWNrX3RpY2spOworCWhhbmdjaGVja190c2NfbWFyZ2luICo9ICh1bnNpZ25lZCBsb25nIGxvbmcpVElNRVJfRlJFUTsKIAogCWhhbmdjaGVja190c2MgPSBtb25vdG9uaWNfY2xvY2soKTsKIAltb2RfdGltZXIoJmhhbmdjaGVja190aWNrdG9jaywgamlmZmllcyArIChoYW5nY2hlY2tfdGljaypIWikpOwpAQCAtMTIzLDYgKzIwOCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgaGFuZ2NoZWNrX2V4aXQodm9pZCkKIHsKIAlkZWxfdGltZXJfc3luYygmaGFuZ2NoZWNrX3RpY2t0b2NrKTsKKyAgICAgICAgcHJpbnRrKCJIYW5nY2hlY2s6IFN0b3BwZWQgaGFuZ2NoZWNrIHRpbWVyLlxuIik7CiB9CiAKIG1vZHVsZV9pbml0KGhhbmdjaGVja19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfYnRfc20uYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfYnRfc20uYwppbmRleCAyMjViMzMwLi41Y2U5YzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2J0X3NtLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9idF9zbS5jCkBAIC0yMzUsNyArMjM1LDYgQEAKIAlpZiAoQlRfU1RBVFVTICYgQlRfQl9CVVNZKSBCVF9DT05UUk9MKEJUX0JfQlVTWSk7CiAJQlRfQ09OVFJPTChCVF9DTFJfV1JfUFRSKTsKIAlCVF9DT05UUk9MKEJUX1NNU19BVE4pOwotCUJUX0lOVE1BU0tfVyhCVF9CTUNfSFdSU1QpOwogI2lmZGVmIERFVkVMT1BNRU5UX09OTFlfTk9UX0ZPUl9QUk9EVUNUSU9OCiAJaWYgKEJUX1NUQVRVUyAmIEJUX0IySF9BVE4pIHsKIAkJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCmluZGV4IGE2NjA2YTEuLmQ3ZmI0NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCkBAIC0yNTg4LDI4ICsyNTg4LDIwIEBACiAJZGVsaXZlcl9yZXNwb25zZShtc2cpOwogfQogCi1zdGF0aWMgdm9pZAotc2VuZF9mcm9tX3JlY3ZfbXNnKGlwbWlfc21pX3QgaW50Ziwgc3RydWN0IGlwbWlfcmVjdl9tc2cgKnJlY3ZfbXNnLAotCQkgICBzdHJ1Y3QgaXBtaV9zbWlfbXNnICpzbWlfbXNnLAotCQkgICB1bnNpZ25lZCBjaGFyIHNlcSwgbG9uZyBzZXFpZCkKK3N0YXRpYyBzdHJ1Y3QgaXBtaV9zbWlfbXNnICoKK3NtaV9mcm9tX3JlY3ZfbXNnKGlwbWlfc21pX3QgaW50Ziwgc3RydWN0IGlwbWlfcmVjdl9tc2cgKnJlY3ZfbXNnLAorCQkgIHVuc2lnbmVkIGNoYXIgc2VxLCBsb25nIHNlcWlkKQogewotCWlmICghc21pX21zZykKLQkJc21pX21zZyA9IGlwbWlfYWxsb2Nfc21pX21zZygpOworCXN0cnVjdCBpcG1pX3NtaV9tc2cgKnNtaV9tc2cgPSBpcG1pX2FsbG9jX3NtaV9tc2coKTsKIAlpZiAoIXNtaV9tc2cpCiAJCS8qIElmIHdlIGNhbid0IGFsbG9jYXRlIHRoZSBtZXNzYWdlLCB0aGVuIGp1c3QgcmV0dXJuLCB3ZQogCQkgICBnZXQgNCByZXRyaWVzLCBzbyB0aGlzIHNob3VsZCBiZSBvay4gKi8KLQkJcmV0dXJuOworCQlyZXR1cm4gTlVMTDsKIAogCW1lbWNweShzbWlfbXNnLT5kYXRhLCByZWN2X21zZy0+bXNnLmRhdGEsIHJlY3ZfbXNnLT5tc2cuZGF0YV9sZW4pOwogCXNtaV9tc2ctPmRhdGFfc2l6ZSA9IHJlY3ZfbXNnLT5tc2cuZGF0YV9sZW47CiAJc21pX21zZy0+bXNnaWQgPSBTVE9SRV9TRVFfSU5fTVNHSUQoc2VxLCBzZXFpZCk7CiAJCQotCS8qIFNlbmQgdGhlIG5ldyBtZXNzYWdlLiAgV2Ugc2VuZCB3aXRoIGEgemVybyBwcmlvcml0eS4gIEl0Ci0JICAgdGltZWQgb3V0LCBJIGRvdWJ0IHRpbWUgaXMgdGhhdCBjcml0aWNhbCBub3csIGFuZCBoaWdoCi0JICAgcHJpb3JpdHkgbWVzc2FnZXMgYXJlIHJlYWxseSBvbmx5IGZvciBtZXNzYWdlcyB0byB0aGUgbG9jYWwKLQkgICBNQywgd2hpY2ggZG9uJ3QgZ2V0IHJlc2VudC4gKi8KLQlpbnRmLT5oYW5kbGVycy0+c2VuZGVyKGludGYtPnNlbmRfaW5mbywgc21pX21zZywgMCk7Ci0KICNpZmRlZiBERUJVR19NU0dJTkcKIAl7CiAJCWludCBtOwpAQCAtMjYxOSw2ICsyNjExLDcgQEAKIAkJcHJpbnRrKCJcbiIpOwogCX0KICNlbmRpZgorCXJldHVybiBzbWlfbXNnOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjY4MywxNCArMjY3NiwxMyBAQAogCQkJCQlpbnRmLT50aW1lZF9vdXRfaXBtYl9jb21tYW5kcysrOwogCQkJCXNwaW5fdW5sb2NrKCZpbnRmLT5jb3VudGVyX2xvY2spOwogCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3QgaXBtaV9zbWlfbXNnICpzbWlfbXNnOwogCQkJCS8qIE1vcmUgcmV0cmllcywgc2VuZCBhZ2Fpbi4gKi8KIAogCQkJCS8qIFN0YXJ0IHdpdGggdGhlIG1heCB0aW1lciwgc2V0IHRvIG5vcm1hbAogCQkJCSAgIHRpbWVyIGFmdGVyIHRoZSBtZXNzYWdlIGlzIHNlbnQuICovCiAJCQkJZW50LT50aW1lb3V0ID0gTUFYX01TR19USU1FT1VUOwogCQkJCWVudC0+cmV0cmllc19sZWZ0LS07Ci0JCQkJc2VuZF9mcm9tX3JlY3ZfbXNnKGludGYsIGVudC0+cmVjdl9tc2csIE5VTEwsCi0JCQkJCQkgICBqLCBlbnQtPnNlcWlkKTsKIAkJCQlzcGluX2xvY2soJmludGYtPmNvdW50ZXJfbG9jayk7CiAJCQkJaWYgKGVudC0+cmVjdl9tc2ctPmFkZHIuYWRkcl90eXBlCiAJCQkJICAgID09IElQTUlfTEFOX0FERFJfVFlQRSkKQEAgLTI2OTgsNiArMjY5MCwyMCBAQAogCQkJCWVsc2UKIAkJCQkJaW50Zi0+cmV0cmFuc21pdHRlZF9pcG1iX2NvbW1hbmRzKys7CiAJCQkJc3Bpbl91bmxvY2soJmludGYtPmNvdW50ZXJfbG9jayk7CisJCQkJc21pX21zZyA9IHNtaV9mcm9tX3JlY3ZfbXNnKGludGYsCisJCQkJCQllbnQtPnJlY3ZfbXNnLCBqLCBlbnQtPnNlcWlkKTsKKwkJCQlpZighc21pX21zZykKKwkJCQkJY29udGludWU7CisKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoaW50Zi0+c2VxX2xvY2spLGZsYWdzKTsKKwkJCQkvKiBTZW5kIHRoZSBuZXcgbWVzc2FnZS4gIFdlIHNlbmQgd2l0aCBhIHplcm8KKwkJCQkgKiBwcmlvcml0eS4gIEl0IHRpbWVkIG91dCwgSSBkb3VidCB0aW1lIGlzCisJCQkJICogdGhhdCBjcml0aWNhbCBub3csIGFuZCBoaWdoIHByaW9yaXR5CisJCQkJICogbWVzc2FnZXMgYXJlIHJlYWxseSBvbmx5IGZvciBtZXNzYWdlcyB0byB0aGUKKwkJCQkgKiBsb2NhbCBNQywgd2hpY2ggZG9uJ3QgZ2V0IHJlc2VudC4gKi8KKwkJCQlpbnRmLT5oYW5kbGVycy0+c2VuZGVyKGludGYtPnNlbmRfaW5mbywKKwkJCQkJCQlzbWlfbXNnLCAwKTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmKGludGYtPnNlcV9sb2NrKSwgZmxhZ3MpOwogCQkJfQogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihpbnRmLT5zZXFfbG9jayksIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggMjlkZTI1OS4uMjk4NTc0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTEwMCw2ICsxMDAsMTEgQEAKIAkvKiBGSVhNRSAtIGFkZCB3YXRjaGRvZyBzdHVmZi4gKi8KIH07CiAKKy8qIFNvbWUgQlQtc3BlY2lmaWMgZGVmaW5lcyB3ZSBuZWVkIGhlcmUuICovCisjZGVmaW5lIElQTUlfQlRfSU5UTUFTS19SRUcJCTIKKyNkZWZpbmUgSVBNSV9CVF9JTlRNQVNLX0NMRUFSX0lSUV9CSVQJMgorI2RlZmluZSBJUE1JX0JUX0lOVE1BU0tfRU5BQkxFX0lSUV9CSVQJMQorCiBlbnVtIHNpX3R5cGUgewogICAgIFNJX0tDUywgU0lfU01JQywgU0lfQlQKIH07CkBAIC04NzUsNiArODgwLDE3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2lfYnRfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHNtaV9pbmZvICpzbWlfaW5mbyA9IGRhdGE7CisJLyogV2UgbmVlZCB0byBjbGVhciB0aGUgSVJRIGZsYWcgZm9yIHRoZSBCVCBpbnRlcmZhY2UuICovCisJc21pX2luZm8tPmlvLm91dHB1dGIoJnNtaV9pbmZvLT5pbywgSVBNSV9CVF9JTlRNQVNLX1JFRywKKwkJCSAgICAgSVBNSV9CVF9JTlRNQVNLX0NMRUFSX0lSUV9CSVQKKwkJCSAgICAgfCBJUE1JX0JUX0lOVE1BU0tfRU5BQkxFX0lSUV9CSVQpOworCXJldHVybiBzaV9pcnFfaGFuZGxlcihpcnEsIGRhdGEsIHJlZ3MpOworfQorCisKIHN0YXRpYyBzdHJ1Y3QgaXBtaV9zbWlfaGFuZGxlcnMgaGFuZGxlcnMgPQogewogCS5vd25lciAgICAgICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCkBAIC0xMDAxLDExICsxMDE3LDIyIEBACiAJaWYgKCFpbmZvLT5pcnEpCiAJCXJldHVybiAwOwogCi0JcnYgPSByZXF1ZXN0X2lycShpbmZvLT5pcnEsCi0JCQkgc2lfaXJxX2hhbmRsZXIsCi0JCQkgU0FfSU5URVJSVVBULAotCQkJIERFVklDRV9OQU1FLAotCQkJIGluZm8pOworCWlmIChpbmZvLT5zaV90eXBlID09IFNJX0JUKSB7CisJCXJ2ID0gcmVxdWVzdF9pcnEoaW5mby0+aXJxLAorCQkJCSBzaV9idF9pcnFfaGFuZGxlciwKKwkJCQkgU0FfSU5URVJSVVBULAorCQkJCSBERVZJQ0VfTkFNRSwKKwkJCQkgaW5mbyk7CisJCWlmICghcnYpCisJCQkvKiBFbmFibGUgdGhlIGludGVycnVwdCBpbiB0aGUgQlQgaW50ZXJmYWNlLiAqLworCQkJaW5mby0+aW8ub3V0cHV0YigmaW5mby0+aW8sIElQTUlfQlRfSU5UTUFTS19SRUcsCisJCQkJCSBJUE1JX0JUX0lOVE1BU0tfRU5BQkxFX0lSUV9CSVQpOworCX0gZWxzZQorCQlydiA9IHJlcXVlc3RfaXJxKGluZm8tPmlycSwKKwkJCQkgc2lfaXJxX2hhbmRsZXIsCisJCQkJIFNBX0lOVEVSUlVQVCwKKwkJCQkgREVWSUNFX05BTUUsCisJCQkJIGluZm8pOwogCWlmIChydikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiaXBtaV9zaTogJXMgdW5hYmxlIHRvIGNsYWltIGludGVycnVwdCAlZCwiCkBAIC0xMDI0LDYgKzEwNTEsOSBAQAogCWlmICghaW5mby0+aXJxKQogCQlyZXR1cm47CiAKKwlpZiAoaW5mby0+c2lfdHlwZSA9PSBTSV9CVCkKKwkJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IGluIHRoZSBCVCBpbnRlcmZhY2UuICovCisJCWluZm8tPmlvLm91dHB1dGIoJmluZm8tPmlvLCBJUE1JX0JUX0lOVE1BU0tfUkVHLCAwKTsKIAlmcmVlX2lycShpbmZvLT5pcnEsIGluZm8pOwogfQogCkBAIC0xNTI2LDggKzE1NTYsMTcgQEAKIAkJaW5mby0+aXJxX3NldHVwID0gTlVMTDsKIAl9CiAKLQlyZWdzcGFjaW5nc1tpbnRmX251bV0gPSBzcG1pLT5hZGRyLnJlZ2lzdGVyX2JpdF93aWR0aCAvIDg7Ci0JaW5mby0+aW8ucmVnc3BhY2luZyA9IHNwbWktPmFkZHIucmVnaXN0ZXJfYml0X3dpZHRoIC8gODsKKwlpZiAoc3BtaS0+YWRkci5yZWdpc3Rlcl9iaXRfd2lkdGgpIHsKKwkJLyogQSAoaG9wZWZ1bGx5KSBwcm9wZXJseSBmb3JtZWQgcmVnaXN0ZXIgYml0IHdpZHRoLiAqLworCQlyZWdzcGFjaW5nc1tpbnRmX251bV0gPSBzcG1pLT5hZGRyLnJlZ2lzdGVyX2JpdF93aWR0aCAvIDg7CisJCWluZm8tPmlvLnJlZ3NwYWNpbmcgPSBzcG1pLT5hZGRyLnJlZ2lzdGVyX2JpdF93aWR0aCAvIDg7CisJfSBlbHNlIHsKKwkJLyogU29tZSBicm9rZW4gc3lzdGVtcyBnZXQgdGhpcyB3cm9uZyBhbmQgc2V0IHRoZSB2YWx1ZQorCQkgKiB0byB6ZXJvLiAgQXNzdW1lIGl0IGlzIHRoZSBkZWZhdWx0IHNwYWNpbmcuICBJZiB0aGF0CisJCSAqIGlzIHdyb25nLCB0b28gYmFkLCB0aGUgdmVuZG9yIHNob3VsZCBmaXggdGhlIHRhYmxlcy4gKi8KKwkJcmVnc3BhY2luZ3NbaW50Zl9udW1dID0gREVGQVVMVF9SRUdTUEFDSU5HOworCQlpbmZvLT5pby5yZWdzcGFjaW5nID0gREVGQVVMVF9SRUdTUEFDSU5HOworCX0KIAlyZWdzaXplc1tpbnRmX251bV0gPSByZWdzcGFjaW5nc1tpbnRmX251bV07CiAJaW5mby0+aW8ucmVnc2l6ZSA9IHJlZ3NpemVzW2ludGZfbnVtXTsKIAlyZWdzaGlmdHNbaW50Zl9udW1dID0gc3BtaS0+YWRkci5yZWdpc3Rlcl9iaXRfb2Zmc2V0OwpAQCAtMTU3OCwxNSArMTYxNywxNSBAQAogCXUxNgloYW5kbGU7CiB9IGRtaV9oZWFkZXJfdDsKIAotc3RhdGljIGludCBkZWNvZGVfZG1pKGRtaV9oZWFkZXJfdCAqZG0sIGludCBpbnRmX251bSkKK3N0YXRpYyBpbnQgZGVjb2RlX2RtaShkbWlfaGVhZGVyX3QgX19pb21lbSAqZG0sIGludCBpbnRmX251bSkKIHsKLQl1OAkJKmRhdGEgPSAodTggKilkbTsKKwl1OAkJX19pb21lbSAqZGF0YSA9ICh1OCBfX2lvbWVtICopZG07CiAJdW5zaWduZWQgbG9uZyAgCWJhc2VfYWRkcjsKIAl1OAkJcmVnX3NwYWNpbmc7Ci0JdTggICAgICAgICAgICAgIGxlbiA9IGRtLT5sZW5ndGg7CisJdTggICAgICAgICAgICAgIGxlbiA9IHJlYWRiKCZkbS0+bGVuZ3RoKTsKIAlkbWlfaXBtaV9kYXRhX3QgKmlwbWlfZGF0YSA9IGRtaV9kYXRhK2ludGZfbnVtOwogCi0JaXBtaV9kYXRhLT50eXBlID0gZGF0YVs0XTsKKwlpcG1pX2RhdGEtPnR5cGUgPSByZWFkYigmZGF0YVs0XSk7CiAKIAltZW1jcHkoJmJhc2VfYWRkciwgZGF0YSs4LCBzaXplb2YodW5zaWduZWQgbG9uZykpOwogCWlmIChsZW4gPj0gMHgxMSkgewpAQCAtMTYwMSwxMiArMTY0MCwxMiBAQAogCQl9CiAJCS8qIElmIGJpdCA0IG9mIGJ5dGUgMHgxMCBpcyBzZXQsIHRoZW4gdGhlIGxzYiBmb3IgdGhlIGFkZHJlc3MKIAkJICAgaXMgb2RkLiAqLwotCQlpcG1pX2RhdGEtPmJhc2VfYWRkciA9IGJhc2VfYWRkciB8ICgoZGF0YVsweDEwXSAmIDB4MTApID4+IDQpOworCQlpcG1pX2RhdGEtPmJhc2VfYWRkciA9IGJhc2VfYWRkciB8ICgocmVhZGIoJmRhdGFbMHgxMF0pICYgMHgxMCkgPj4gNCk7CiAKLQkJaXBtaV9kYXRhLT5pcnEgPSBkYXRhWzB4MTFdOworCQlpcG1pX2RhdGEtPmlycSA9IHJlYWRiKCZkYXRhWzB4MTFdKTsKIAogCQkvKiBUaGUgdG9wIHR3byBiaXRzIG9mIGJ5dGUgMHgxMCBob2xkIHRoZSByZWdpc3RlciBzcGFjaW5nLiAqLwotCQlyZWdfc3BhY2luZyA9IChkYXRhWzB4MTBdICYgMHhDMCkgPj4gNjsKKwkJcmVnX3NwYWNpbmcgPSAocmVhZGIoJmRhdGFbMHgxMF0pICYgMHhDMCkgPj4gNjsKIAkJc3dpdGNoKHJlZ19zcGFjaW5nKXsKIAkJY2FzZSAweDAwOiAvKiBCeXRlIGJvdW5kYXJpZXMgKi8KIAkJICAgIGlwbWlfZGF0YS0+b2Zmc2V0ID0gMTsKQEAgLTE2MjMsMTIgKzE2NjIsMTggQEAKIAkJfQogCX0gZWxzZSB7CiAJCS8qIE9sZCBETUkgc3BlYy4gKi8KLQkJaXBtaV9kYXRhLT5iYXNlX2FkZHIgPSBiYXNlX2FkZHI7CisJCS8qIE5vdGUgdGhhdCB0ZWNobmljYWxseSwgdGhlIGxvd2VyIGJpdCBvZiB0aGUgYmFzZQorCQkgKiBhZGRyZXNzIHNob3VsZCBiZSAxIGlmIHRoZSBhZGRyZXNzIGlzIEkvTyBhbmQgMCBpZgorCQkgKiB0aGUgYWRkcmVzcyBpcyBpbiBtZW1vcnkuICBTbyBtYW55IHN5c3RlbXMgZ2V0IHRoYXQKKwkJICogd3JvbmcgKGFuZCBhbGwgdGhhdCBJIGhhdmUgc2VlbiBhcmUgSS9PKSBzbyB3ZSBqdXN0CisJCSAqIGlnbm9yZSB0aGF0IGJpdCBhbmQgYXNzdW1lIEkvTy4gIFN5c3RlbXMgdGhhdCB1c2UKKwkJICogbWVtb3J5IHNob3VsZCB1c2UgdGhlIG5ld2VyIHNwZWMsIGFueXdheS4gKi8KKwkJaXBtaV9kYXRhLT5iYXNlX2FkZHIgPSBiYXNlX2FkZHIgJiAweGZmZmU7CiAJCWlwbWlfZGF0YS0+YWRkcl9zcGFjZSA9IElQTUlfSU9fQUREUl9TUEFDRTsKIAkJaXBtaV9kYXRhLT5vZmZzZXQgPSAxOwogCX0KIAotCWlwbWlfZGF0YS0+c2xhdmVfYWRkciA9IGRhdGFbNl07CisJaXBtaV9kYXRhLT5zbGF2ZV9hZGRyID0gcmVhZGIoJmRhdGFbNl0pOwogCiAJaWYgKGlzX25ld19pbnRlcmZhY2UoLTEsIGlwbWlfZGF0YS0+YWRkcl9zcGFjZSxpcG1pX2RhdGEtPmJhc2VfYWRkcikpIHsKIAkJZG1pX2RhdGFfZW50cmllcysrOwpAQCAtMTY0Miw5ICsxNjg3LDkgQEAKIAogc3RhdGljIGludCBkbWlfdGFibGUodTMyIGJhc2UsIGludCBsZW4sIGludCBudW0pCiB7Ci0JdTggCQkgICpidWY7Ci0Jc3RydWN0IGRtaV9oZWFkZXIgKmRtOwotCXU4IAkJICAqZGF0YTsKKwl1OCAJCSAgX19pb21lbSAqYnVmOworCXN0cnVjdCBkbWlfaGVhZGVyIF9faW9tZW0gKmRtOworCXU4IAkJICBfX2lvbWVtICpkYXRhOwogCWludCAJCSAgaT0xOwogCWludAkJICBzdGF0dXM9LTE7CiAJaW50ICAgICAgICAgICAgICAgaW50Zl9udW0gPSAwOwpAQCAtMTY1NywxMiArMTcwMiwxMiBAQAogCiAJd2hpbGUoaTxudW0gJiYgKGRhdGEgLSBidWYpIDwgbGVuKQogCXsKLQkJZG09KGRtaV9oZWFkZXJfdCAqKWRhdGE7CisJCWRtPShkbWlfaGVhZGVyX3QgX19pb21lbSAqKWRhdGE7CiAKLQkJaWYoKGRhdGEtYnVmK2RtLT5sZW5ndGgpID49IGxlbikKKwkJaWYoKGRhdGEtYnVmK3JlYWRiKCZkbS0+bGVuZ3RoKSkgPj0gbGVuKQogICAgICAgICAJCWJyZWFrOwogCi0JCWlmIChkbS0+dHlwZSA9PSAzOCkgeworCQlpZiAocmVhZGIoJmRtLT50eXBlKSA9PSAzOCkgewogCQkJaWYgKGRlY29kZV9kbWkoZG0sIGludGZfbnVtKSA9PSAwKSB7CiAJCQkJaW50Zl9udW0rKzsKIAkJCQlpZiAoaW50Zl9udW0gPj0gU0lfTUFYX0RSSVZFUlMpCkBAIC0xNjcwLDggKzE3MTUsOCBAQAogCQkJfQogCQl9CiAKLQkgICAgICAgIGRhdGErPWRtLT5sZW5ndGg7Ci0JCXdoaWxlKChkYXRhLWJ1ZikgPCBsZW4gJiYgKCpkYXRhIHx8IGRhdGFbMV0pKQorCSAgICAgICAgZGF0YSs9cmVhZGIoJmRtLT5sZW5ndGgpOworCQl3aGlsZSgoZGF0YS1idWYpIDwgbGVuICYmIChyZWFkYihkYXRhKXx8cmVhZGIoZGF0YSsxKSkpCiAJCQlkYXRhKys7CiAJCWRhdGErPTI7CiAJCWkrKzsKQEAgLTIxOTksNyArMjI0NCw3IEBACiAJLyogV2FpdCB1bnRpbCB3ZSBrbm93IHRoYXQgd2UgYXJlIG91dCBvZiBhbnkgaW50ZXJydXB0CiAJICAgaGFuZGxlcnMgbWlnaHQgaGF2ZSBiZWVuIHJ1bm5pbmcgYmVmb3JlIHdlIGZyZWVkIHRoZQogCSAgIGludGVycnVwdC4gKi8KLQlzeW5jaHJvbml6ZV9rZXJuZWwoKTsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOwogCiAJaWYgKG5ld19zbWktPnNpX3NtKSB7CiAJCWlmIChuZXdfc21pLT5oYW5kbGVycykKQEAgLTIzMTIsNyArMjM1Nyw3IEBACiAJLyogV2FpdCB1bnRpbCB3ZSBrbm93IHRoYXQgd2UgYXJlIG91dCBvZiBhbnkgaW50ZXJydXB0CiAJICAgaGFuZGxlcnMgbWlnaHQgaGF2ZSBiZWVuIHJ1bm5pbmcgYmVmb3JlIHdlIGZyZWVkIHRoZQogCSAgIGludGVycnVwdC4gKi8KLQlzeW5jaHJvbml6ZV9rZXJuZWwoKTsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOwogCiAJLyogV2FpdCBmb3IgdGhlIHRpbWVyIHRvIHN0b3AuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoIHJhY2UKIAkgICBjb25kaXRpb25zIHJlbW92aW5nIHRoZSB0aW1lciBoZXJlLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9zbS5oIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9zbS5oCmluZGV4IGEwMjEyYjAuLjYyNzkxZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfc20uaAorKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX3NtLmgKQEAgLTUxLDcgKzUxLDcgQEAKIAkvKiBHZW5lcmljIGluZm8gdXNlZCBieSB0aGUgYWN0dWFsIGhhbmRsaW5nIHJvdXRpbmVzLCB0aGUKICAgICAgICAgICAgc3RhdGUgbWFjaGluZSBzaG91bGRuJ3QgdG91Y2ggdGhlc2UuICovCiAJdm9pZCAqaW5mbzsKLQl2b2lkICphZGRyOworCXZvaWQgX19pb21lbSAqYWRkcjsKIAlpbnQgIHJlZ3NwYWNpbmc7CiAJaW50ICByZWdzaXplOwogCWludCAgcmVnc2hpZnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMKaW5kZXggZmQ3MDkzOC4uZmNkMWMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfd2F0Y2hkb2cuYwpAQCAtNzA5LDExICs3MDksMTEgQEAKIAkJaWYgKGV4cGVjdF9jbG9zZSA9PSA0MikgewogCQkJaXBtaV93YXRjaGRvZ19zdGF0ZSA9IFdET0dfVElNRU9VVF9OT05FOwogCQkJaXBtaV9zZXRfdGltZW91dChJUE1JX1NFVF9USU1FT1VUX05PX0hCKTsKLQkJCWNsZWFyX2JpdCgwLCAmaXBtaV93ZG9nX29wZW4pOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOwogCQkJaXBtaV9oZWFydGJlYXQoKTsKIAkJfQorCQljbGVhcl9iaXQoMCwgJmlwbWlfd2RvZ19vcGVuKTsKIAl9CiAKIAlpcG1pX2Zhc3luYyAoLTEsIGZpbGVwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKaW5kZXggM2NlNTFjNi4uN2IxOWUwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKQEAgLTEwMjYsNyArMTAyNiw4IEBACiAJCXB1dF9xdWV1ZSh2YywgZGF0YSk7CiB9CiAKLXZvaWQga2JkX2tleWNvZGUodW5zaWduZWQgaW50IGtleWNvZGUsIGludCBkb3duLCBpbnQgaHdfcmF3LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGtiZF9rZXljb2RlKHVuc2lnbmVkIGludCBrZXljb2RlLCBpbnQgZG93biwKKwkJCWludCBod19yYXcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB2Y19kYXRhICp2YyA9IHZjX2NvbnNbZmdfY29uc29sZV0uZDsKIAl1bnNpZ25lZCBzaG9ydCBrZXlzeW0sICprZXlfbWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21iY3MuYyBiL2RyaXZlcnMvY2hhci9tYmNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5Y2ZhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9tYmNzLmMKQEAgLTAsMCArMSw4NDkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisvKgorICoJTU9BVEIgQ29yZSBTZXJ2aWNlcyBkcml2ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC91aW8uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgorI2luY2x1ZGUgPGFzbS9zbi9pbnRyLmg+CisjaW5jbHVkZSA8YXNtL3NuL3Rpb2N4Lmg+CisjaW5jbHVkZSAibWJjcy5oIgorCisjZGVmaW5lIE1CQ1NfREVCVUcgMAorI2lmIE1CQ1NfREVCVUcKKyNkZWZpbmUgREJHKGZtdC4uLikgICAgcHJpbnRrKEtFUk5fQUxFUlQgZm10KQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikKKyNlbmRpZgoraW50IG1iY3NfbWFqb3I7CisKK0xJU1RfSEVBRChzb2Z0X2xpc3QpOworCisvKgorICogZmlsZSBvcGVyYXRpb25zCisgKi8KK3N0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWJjc19vcHMgPSB7CisJLm9wZW4gPSBtYmNzX29wZW4sCisJLmxsc2VlayA9IG1iY3Nfc3JhbV9sbHNlZWssCisJLnJlYWQgPSBtYmNzX3NyYW1fcmVhZCwKKwkud3JpdGUgPSBtYmNzX3NyYW1fd3JpdGUsCisJLm1tYXAgPSBtYmNzX2dzY3JfbW1hcCwKK307CisKK3N0cnVjdCBtYmNzX2NhbGxiYWNrX2FyZyB7CisJaW50IG1pbm9yOworCXN0cnVjdCBjeF9kZXYgKmN4X2RldjsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYmNzX2dldGRtYV9pbml0KHN0cnVjdCBnZXRkbWEgKmdkbWEpCit7CisJbWVtc2V0KGdkbWEsIDAsIHNpemVvZihzdHJ1Y3QgZ2V0ZG1hKSk7CisJZ2RtYS0+RG9uZUludEVuYWJsZSA9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYmNzX3B1dGRtYV9pbml0KHN0cnVjdCBwdXRkbWEgKnBkbWEpCit7CisJbWVtc2V0KHBkbWEsIDAsIHNpemVvZihzdHJ1Y3QgcHV0ZG1hKSk7CisJcGRtYS0+RG9uZUludEVuYWJsZSA9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYmNzX2FsZ29faW5pdChzdHJ1Y3QgYWxnb2Jsb2NrICphbGdvX3NvZnQpCit7CisJbWVtc2V0KGFsZ29fc29mdCwgMCwgc2l6ZW9mKHN0cnVjdCBhbGdvYmxvY2spKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1iY3NfZ2V0ZG1hX3NldCh2b2lkICptbXIsCisJCSAgICAgICB1aW50NjRfdCBob3N0QWRkciwKKwkJICAgICAgIHVpbnQ2NF90IGxvY2FsQWRkciwKKwkJICAgICAgIHVpbnQ2NF90IGxvY2FsUmFtU2VsLAorCQkgICAgICAgdWludDY0X3QgbnVtUGt0cywKKwkJICAgICAgIHVpbnQ2NF90IGFtb0VuYWJsZSwKKwkJICAgICAgIHVpbnQ2NF90IGludHJFbmFibGUsCisJCSAgICAgICB1aW50NjRfdCBwZWVySU8sCisJCSAgICAgICB1aW50NjRfdCBhbW9Ib3N0RGVzdCwKKwkJICAgICAgIHVpbnQ2NF90IGFtb01vZFR5cGUsIHVpbnQ2NF90IGludHJIb3N0RGVzdCwKKwkJICAgICAgIHVpbnQ2NF90IGludHJWZWN0b3IpCit7CisJdW5pb24gZG1hX2NvbnRyb2wgcmRtYV9jb250cm9sOworCXVuaW9uIGRtYV9hbW9fZGVzdCBhbW9fZGVzdDsKKwl1bmlvbiBpbnRyX2Rlc3QgaW50cl9kZXN0OworCXVuaW9uIGRtYV9sb2NhbGFkZHIgbG9jYWxfYWRkcjsKKwl1bmlvbiBkbWFfaG9zdGFkZHIgaG9zdF9hZGRyOworCisJcmRtYV9jb250cm9sLmRtYV9jb250cm9sX3JlZyA9IDA7CisJYW1vX2Rlc3QuZG1hX2Ftb19kZXN0X3JlZyA9IDA7CisJaW50cl9kZXN0LmludHJfZGVzdF9yZWcgPSAwOworCWxvY2FsX2FkZHIuZG1hX2xvY2FsYWRkcl9yZWcgPSAwOworCWhvc3RfYWRkci5kbWFfaG9zdGFkZHJfcmVnID0gMDsKKworCWhvc3RfYWRkci5kbWFfc3lzX2FkZHIgPSBob3N0QWRkcjsKKwlNQkNTX01NUl9TRVQobW1yLCBNQkNTX1JEX0RNQV9TWVNfQUREUiwgaG9zdF9hZGRyLmRtYV9ob3N0YWRkcl9yZWcpOworCisJbG9jYWxfYWRkci5kbWFfcmFtX2FkZHIgPSBsb2NhbEFkZHI7CisJbG9jYWxfYWRkci5kbWFfcmFtX3NlbCA9IGxvY2FsUmFtU2VsOworCU1CQ1NfTU1SX1NFVChtbXIsIE1CQ1NfUkRfRE1BX0xPQ19BRERSLCBsb2NhbF9hZGRyLmRtYV9sb2NhbGFkZHJfcmVnKTsKKworCXJkbWFfY29udHJvbC5kbWFfb3BfbGVuZ3RoID0gbnVtUGt0czsKKwlyZG1hX2NvbnRyb2wuZG9uZV9hbW9fZW4gPSBhbW9FbmFibGU7CisJcmRtYV9jb250cm9sLmRvbmVfaW50X2VuID0gaW50ckVuYWJsZTsKKwlyZG1hX2NvbnRyb2wucGlvX21lbV9uID0gcGVlcklPOworCU1CQ1NfTU1SX1NFVChtbXIsIE1CQ1NfUkRfRE1BX0NUUkwsIHJkbWFfY29udHJvbC5kbWFfY29udHJvbF9yZWcpOworCisJYW1vX2Rlc3QuZG1hX2Ftb19zeXNfYWRkciA9IGFtb0hvc3REZXN0OworCWFtb19kZXN0LmRtYV9hbW9fbW9kX3R5cGUgPSBhbW9Nb2RUeXBlOworCU1CQ1NfTU1SX1NFVChtbXIsIE1CQ1NfUkRfRE1BX0FNT19ERVNULCBhbW9fZGVzdC5kbWFfYW1vX2Rlc3RfcmVnKTsKKworCWludHJfZGVzdC5hZGRyZXNzID0gaW50ckhvc3REZXN0OworCWludHJfZGVzdC5pbnRfdmVjdG9yID0gaW50clZlY3RvcjsKKwlNQkNTX01NUl9TRVQobW1yLCBNQkNTX1JEX0RNQV9JTlRfREVTVCwgaW50cl9kZXN0LmludHJfZGVzdF9yZWcpOworCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYmNzX3B1dGRtYV9zZXQodm9pZCAqbW1yLAorCQkgICAgICAgdWludDY0X3QgaG9zdEFkZHIsCisJCSAgICAgICB1aW50NjRfdCBsb2NhbEFkZHIsCisJCSAgICAgICB1aW50NjRfdCBsb2NhbFJhbVNlbCwKKwkJICAgICAgIHVpbnQ2NF90IG51bVBrdHMsCisJCSAgICAgICB1aW50NjRfdCBhbW9FbmFibGUsCisJCSAgICAgICB1aW50NjRfdCBpbnRyRW5hYmxlLAorCQkgICAgICAgdWludDY0X3QgcGVlcklPLAorCQkgICAgICAgdWludDY0X3QgYW1vSG9zdERlc3QsCisJCSAgICAgICB1aW50NjRfdCBhbW9Nb2RUeXBlLAorCQkgICAgICAgdWludDY0X3QgaW50ckhvc3REZXN0LCB1aW50NjRfdCBpbnRyVmVjdG9yKQoreworCXVuaW9uIGRtYV9jb250cm9sIHdkbWFfY29udHJvbDsKKwl1bmlvbiBkbWFfYW1vX2Rlc3QgYW1vX2Rlc3Q7CisJdW5pb24gaW50cl9kZXN0IGludHJfZGVzdDsKKwl1bmlvbiBkbWFfbG9jYWxhZGRyIGxvY2FsX2FkZHI7CisJdW5pb24gZG1hX2hvc3RhZGRyIGhvc3RfYWRkcjsKKworCXdkbWFfY29udHJvbC5kbWFfY29udHJvbF9yZWcgPSAwOworCWFtb19kZXN0LmRtYV9hbW9fZGVzdF9yZWcgPSAwOworCWludHJfZGVzdC5pbnRyX2Rlc3RfcmVnID0gMDsKKwlsb2NhbF9hZGRyLmRtYV9sb2NhbGFkZHJfcmVnID0gMDsKKwlob3N0X2FkZHIuZG1hX2hvc3RhZGRyX3JlZyA9IDA7CisKKwlob3N0X2FkZHIuZG1hX3N5c19hZGRyID0gaG9zdEFkZHI7CisJTUJDU19NTVJfU0VUKG1tciwgTUJDU19XUl9ETUFfU1lTX0FERFIsIGhvc3RfYWRkci5kbWFfaG9zdGFkZHJfcmVnKTsKKworCWxvY2FsX2FkZHIuZG1hX3JhbV9hZGRyID0gbG9jYWxBZGRyOworCWxvY2FsX2FkZHIuZG1hX3JhbV9zZWwgPSBsb2NhbFJhbVNlbDsKKwlNQkNTX01NUl9TRVQobW1yLCBNQkNTX1dSX0RNQV9MT0NfQUREUiwgbG9jYWxfYWRkci5kbWFfbG9jYWxhZGRyX3JlZyk7CisKKwl3ZG1hX2NvbnRyb2wuZG1hX29wX2xlbmd0aCA9IG51bVBrdHM7CisJd2RtYV9jb250cm9sLmRvbmVfYW1vX2VuID0gYW1vRW5hYmxlOworCXdkbWFfY29udHJvbC5kb25lX2ludF9lbiA9IGludHJFbmFibGU7CisJd2RtYV9jb250cm9sLnBpb19tZW1fbiA9IHBlZXJJTzsKKwlNQkNTX01NUl9TRVQobW1yLCBNQkNTX1dSX0RNQV9DVFJMLCB3ZG1hX2NvbnRyb2wuZG1hX2NvbnRyb2xfcmVnKTsKKworCWFtb19kZXN0LmRtYV9hbW9fc3lzX2FkZHIgPSBhbW9Ib3N0RGVzdDsKKwlhbW9fZGVzdC5kbWFfYW1vX21vZF90eXBlID0gYW1vTW9kVHlwZTsKKwlNQkNTX01NUl9TRVQobW1yLCBNQkNTX1dSX0RNQV9BTU9fREVTVCwgYW1vX2Rlc3QuZG1hX2Ftb19kZXN0X3JlZyk7CisKKwlpbnRyX2Rlc3QuYWRkcmVzcyA9IGludHJIb3N0RGVzdDsKKwlpbnRyX2Rlc3QuaW50X3ZlY3RvciA9IGludHJWZWN0b3I7CisJTUJDU19NTVJfU0VUKG1tciwgTUJDU19XUl9ETUFfSU5UX0RFU1QsIGludHJfZGVzdC5pbnRyX2Rlc3RfcmVnKTsKKworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWJjc19hbGdvX3NldCh2b2lkICptbXIsCisJCSAgICAgdWludDY0X3QgYW1vSG9zdERlc3QsCisJCSAgICAgdWludDY0X3QgYW1vTW9kVHlwZSwKKwkJICAgICB1aW50NjRfdCBpbnRySG9zdERlc3QsCisJCSAgICAgdWludDY0X3QgaW50clZlY3RvciwgdWludDY0X3QgYWxnb1N0ZXBDb3VudCkKK3sKKwl1bmlvbiBkbWFfYW1vX2Rlc3QgYW1vX2Rlc3Q7CisJdW5pb24gaW50cl9kZXN0IGludHJfZGVzdDsKKwl1bmlvbiBhbGdvX3N0ZXAgc3RlcDsKKworCXN0ZXAuYWxnb19zdGVwX3JlZyA9IDA7CisJaW50cl9kZXN0LmludHJfZGVzdF9yZWcgPSAwOworCWFtb19kZXN0LmRtYV9hbW9fZGVzdF9yZWcgPSAwOworCisJYW1vX2Rlc3QuZG1hX2Ftb19zeXNfYWRkciA9IGFtb0hvc3REZXN0OworCWFtb19kZXN0LmRtYV9hbW9fbW9kX3R5cGUgPSBhbW9Nb2RUeXBlOworCU1CQ1NfTU1SX1NFVChtbXIsIE1CQ1NfQUxHX0FNT19ERVNULCBhbW9fZGVzdC5kbWFfYW1vX2Rlc3RfcmVnKTsKKworCWludHJfZGVzdC5hZGRyZXNzID0gaW50ckhvc3REZXN0OworCWludHJfZGVzdC5pbnRfdmVjdG9yID0gaW50clZlY3RvcjsKKwlNQkNTX01NUl9TRVQobW1yLCBNQkNTX0FMR19JTlRfREVTVCwgaW50cl9kZXN0LmludHJfZGVzdF9yZWcpOworCisJc3RlcC5hbGdfc3RlcF9jbnQgPSBhbGdvU3RlcENvdW50OworCU1CQ1NfTU1SX1NFVChtbXIsIE1CQ1NfQUxHX1NURVAsIHN0ZXAuYWxnb19zdGVwX3JlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1iY3NfZ2V0ZG1hX3N0YXJ0KHN0cnVjdCBtYmNzX3NvZnQgKnNvZnQpCit7CisJdm9pZCAqbW1yX2Jhc2U7CisJc3RydWN0IGdldGRtYSAqZ2RtYTsKKwl1aW50NjRfdCBudW1Qa3RzOworCXVuaW9uIGNtX2NvbnRyb2wgY21fY29udHJvbDsKKworCW1tcl9iYXNlID0gc29mdC0+bW1yX2Jhc2U7CisJZ2RtYSA9ICZzb2Z0LT5nZXRkbWE7CisKKwkvKiBjaGVjayB0aGF0IGhvc3QgYWRkcmVzcyBnb3Qgc2V0dXAgKi8KKwlpZiAoIWdkbWEtPmhvc3RBZGRyKQorCQlyZXR1cm4gLTE7CisKKwludW1Qa3RzID0KKwkgICAgKGdkbWEtPmJ5dGVzICsgKE1CQ1NfQ0FDSEVMSU5FX1NJWkUgLSAxKSkgLyBNQkNTX0NBQ0hFTElORV9TSVpFOworCisJLyogcHJvZ3JhbSBlbmdpbmUgKi8KKwltYmNzX2dldGRtYV9zZXQobW1yX2Jhc2UsIHRpb2N4X2RtYV9hZGRyKGdkbWEtPmhvc3RBZGRyKSwKKwkJICAgZ2RtYS0+bG9jYWxBZGRyLAorCQkgICAoZ2RtYS0+bG9jYWxBZGRyIDwgTUIyKSA/IDAgOgorCQkgICAoZ2RtYS0+bG9jYWxBZGRyIDwgTUI0KSA/IDEgOgorCQkgICAoZ2RtYS0+bG9jYWxBZGRyIDwgTUI2KSA/IDIgOiAzLAorCQkgICBudW1Qa3RzLAorCQkgICBnZG1hLT5Eb25lQW1vRW5hYmxlLAorCQkgICBnZG1hLT5Eb25lSW50RW5hYmxlLAorCQkgICBnZG1hLT5wZWVySU8sCisJCSAgIGdkbWEtPmFtb0hvc3REZXN0LAorCQkgICBnZG1hLT5hbW9Nb2RUeXBlLAorCQkgICBnZG1hLT5pbnRySG9zdERlc3QsIGdkbWEtPmludHJWZWN0b3IpOworCisJLyogc3RhcnQgZW5naW5lICovCisJY21fY29udHJvbC5jbV9jb250cm9sX3JlZyA9IE1CQ1NfTU1SX0dFVChtbXJfYmFzZSwgTUJDU19DTV9DT05UUk9MKTsKKwljbV9jb250cm9sLnJkX2RtYV9nbyA9IDE7CisJTUJDU19NTVJfU0VUKG1tcl9iYXNlLCBNQkNTX0NNX0NPTlRST0wsIGNtX2NvbnRyb2wuY21fY29udHJvbF9yZWcpOworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGlubGluZSBpbnQgbWJjc19wdXRkbWFfc3RhcnQoc3RydWN0IG1iY3Nfc29mdCAqc29mdCkKK3sKKwl2b2lkICptbXJfYmFzZTsKKwlzdHJ1Y3QgcHV0ZG1hICpwZG1hOworCXVpbnQ2NF90IG51bVBrdHM7CisJdW5pb24gY21fY29udHJvbCBjbV9jb250cm9sOworCisJbW1yX2Jhc2UgPSBzb2Z0LT5tbXJfYmFzZTsKKwlwZG1hID0gJnNvZnQtPnB1dGRtYTsKKworCS8qIGNoZWNrIHRoYXQgaG9zdCBhZGRyZXNzIGdvdCBzZXR1cCAqLworCWlmICghcGRtYS0+aG9zdEFkZHIpCisJCXJldHVybiAtMTsKKworCW51bVBrdHMgPQorCSAgICAocGRtYS0+Ynl0ZXMgKyAoTUJDU19DQUNIRUxJTkVfU0laRSAtIDEpKSAvIE1CQ1NfQ0FDSEVMSU5FX1NJWkU7CisKKwkvKiBwcm9ncmFtIGVuZ2luZSAqLworCW1iY3NfcHV0ZG1hX3NldChtbXJfYmFzZSwgdGlvY3hfZG1hX2FkZHIocGRtYS0+aG9zdEFkZHIpLAorCQkgICBwZG1hLT5sb2NhbEFkZHIsCisJCSAgIChwZG1hLT5sb2NhbEFkZHIgPCBNQjIpID8gMCA6CisJCSAgIChwZG1hLT5sb2NhbEFkZHIgPCBNQjQpID8gMSA6CisJCSAgIChwZG1hLT5sb2NhbEFkZHIgPCBNQjYpID8gMiA6IDMsCisJCSAgIG51bVBrdHMsCisJCSAgIHBkbWEtPkRvbmVBbW9FbmFibGUsCisJCSAgIHBkbWEtPkRvbmVJbnRFbmFibGUsCisJCSAgIHBkbWEtPnBlZXJJTywKKwkJICAgcGRtYS0+YW1vSG9zdERlc3QsCisJCSAgIHBkbWEtPmFtb01vZFR5cGUsCisJCSAgIHBkbWEtPmludHJIb3N0RGVzdCwgcGRtYS0+aW50clZlY3Rvcik7CisKKwkvKiBzdGFydCBlbmdpbmUgKi8KKwljbV9jb250cm9sLmNtX2NvbnRyb2xfcmVnID0gTUJDU19NTVJfR0VUKG1tcl9iYXNlLCBNQkNTX0NNX0NPTlRST0wpOworCWNtX2NvbnRyb2wud3JfZG1hX2dvID0gMTsKKwlNQkNTX01NUl9TRVQobW1yX2Jhc2UsIE1CQ1NfQ01fQ09OVFJPTCwgY21fY29udHJvbC5jbV9jb250cm9sX3JlZyk7CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW5saW5lIGludCBtYmNzX2FsZ29fc3RhcnQoc3RydWN0IG1iY3Nfc29mdCAqc29mdCkKK3sKKwlzdHJ1Y3QgYWxnb2Jsb2NrICphbGdvX3NvZnQgPSAmc29mdC0+YWxnbzsKKwl2b2lkICptbXJfYmFzZSA9IHNvZnQtPm1tcl9iYXNlOworCXVuaW9uIGNtX2NvbnRyb2wgY21fY29udHJvbDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNvZnQtPmFsZ29sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWF0b21pY19zZXQoJnNvZnQtPmFsZ29fZG9uZSwgMCk7CisKKwltYmNzX2FsZ29fc2V0KG1tcl9iYXNlLAorCQkgYWxnb19zb2Z0LT5hbW9Ib3N0RGVzdCwKKwkJIGFsZ29fc29mdC0+YW1vTW9kVHlwZSwKKwkJIGFsZ29fc29mdC0+aW50ckhvc3REZXN0LAorCQkgYWxnb19zb2Z0LT5pbnRyVmVjdG9yLCBhbGdvX3NvZnQtPmFsZ29TdGVwQ291bnQpOworCisJLyogc3RhcnQgYWxnb3JpdGhtICovCisJY21fY29udHJvbC5jbV9jb250cm9sX3JlZyA9IE1CQ1NfTU1SX0dFVChtbXJfYmFzZSwgTUJDU19DTV9DT05UUk9MKTsKKwljbV9jb250cm9sLmFsZ19kb25lX2ludF9lbiA9IDE7CisJY21fY29udHJvbC5hbGdfZ28gPSAxOworCU1CQ1NfTU1SX1NFVChtbXJfYmFzZSwgTUJDU19DTV9DT05UUk9MLCBjbV9jb250cm9sLmNtX2NvbnRyb2xfcmVnKTsKKworCXVwKCZzb2Z0LT5hbGdvbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzc2l6ZV90Citkb19tYmNzX3NyYW1fZG1hd3JpdGUoc3RydWN0IG1iY3Nfc29mdCAqc29mdCwgdWludDY0X3QgaG9zdEFkZHIsCisJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqIG9mZikKK3sKKwlpbnQgcnYgPSAwOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc29mdC0+ZG1hd3JpdGVsb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWF0b21pY19zZXQoJnNvZnQtPmRtYXdyaXRlX2RvbmUsIDApOworCisJc29mdC0+cHV0ZG1hLmhvc3RBZGRyID0gaG9zdEFkZHI7CisJc29mdC0+cHV0ZG1hLmxvY2FsQWRkciA9ICpvZmY7CisJc29mdC0+cHV0ZG1hLmJ5dGVzID0gbGVuOworCisJaWYgKG1iY3NfcHV0ZG1hX3N0YXJ0KHNvZnQpIDwgMCkgeworCQlEQkcoS0VSTl9BTEVSVCAiZG9fbWJjc19zcmFtX2RtYXdyaXRlOiAiCisJCQkJCSJtYmNzX3B1dGRtYV9zdGFydCBmYWlsZWRcbiIpOworCQlydiA9IC1FQUdBSU47CisJCWdvdG8gZG1hd3JpdGVfZXhpdDsKKwl9CisKKwlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvZnQtPmRtYXdyaXRlX3F1ZXVlLAorCQkJCQlhdG9taWNfcmVhZCgmc29mdC0+ZG1hd3JpdGVfZG9uZSkpKSB7CisJCXJ2ID0gLUVSRVNUQVJUU1lTOworCQlnb3RvIGRtYXdyaXRlX2V4aXQ7CisJfQorCisJcnYgPSBsZW47CisJKm9mZiArPSBsZW47CisKK2RtYXdyaXRlX2V4aXQ6CisJdXAoJnNvZnQtPmRtYXdyaXRlbG9jayk7CisKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3NpemVfdAorZG9fbWJjc19zcmFtX2RtYXJlYWQoc3RydWN0IG1iY3Nfc29mdCAqc29mdCwgdWludDY0X3QgaG9zdEFkZHIsCisJCSAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICogb2ZmKQoreworCWludCBydiA9IDA7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzb2Z0LT5kbWFyZWFkbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlhdG9taWNfc2V0KCZzb2Z0LT5kbWF3cml0ZV9kb25lLCAwKTsKKworCXNvZnQtPmdldGRtYS5ob3N0QWRkciA9IGhvc3RBZGRyOworCXNvZnQtPmdldGRtYS5sb2NhbEFkZHIgPSAqb2ZmOworCXNvZnQtPmdldGRtYS5ieXRlcyA9IGxlbjsKKworCWlmIChtYmNzX2dldGRtYV9zdGFydChzb2Z0KSA8IDApIHsKKwkJREJHKEtFUk5fQUxFUlQgIm1iY3Nfc3RyYXRlZ3k6IG1iY3NfZ2V0ZG1hX3N0YXJ0IGZhaWxlZFxuIik7CisJCXJ2ID0gLUVBR0FJTjsKKwkJZ290byBkbWFyZWFkX2V4aXQ7CisJfQorCisJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzb2Z0LT5kbWFyZWFkX3F1ZXVlLAorCQkJCQlhdG9taWNfcmVhZCgmc29mdC0+ZG1hcmVhZF9kb25lKSkpIHsKKwkJcnYgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gZG1hcmVhZF9leGl0OworCX0KKworCXJ2ID0gbGVuOworCSpvZmYgKz0gbGVuOworCitkbWFyZWFkX2V4aXQ6CisJdXAoJnNvZnQtPmRtYXJlYWRsb2NrKTsKKworCXJldHVybiBydjsKK30KKworaW50IG1iY3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZmlsZSAqZnApCit7CisJc3RydWN0IG1iY3Nfc29mdCAqc29mdDsKKwlpbnQgbWlub3I7CisKKwltaW5vciA9IGltaW5vcihpcCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNvZnQsICZzb2Z0X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHNvZnQtPm5hc2lkID09IG1pbm9yKSB7CisJCQlmcC0+cHJpdmF0ZV9kYXRhID0gc29mdC0+Y3hkZXY7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtRU5PREVWOworfQorCitzc2l6ZV90IG1iY3Nfc3JhbV9yZWFkKHN0cnVjdCBmaWxlICogZnAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqIG9mZikKK3sKKwlzdHJ1Y3QgY3hfZGV2ICpjeF9kZXYgPSBmcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtYmNzX3NvZnQgKnNvZnQgPSBjeF9kZXYtPnNvZnQ7CisJdWludDY0X3QgaG9zdEFkZHI7CisJaW50IHJ2ID0gMDsKKworCWhvc3RBZGRyID0gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihsZW4pKTsKKwlpZiAoaG9zdEFkZHIgPT0gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IGRvX21iY3Nfc3JhbV9kbWF3cml0ZShzb2Z0LCBob3N0QWRkciwgbGVuLCBvZmYpOworCWlmIChydiA8IDApCisJCWdvdG8gZXhpdDsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAodm9pZCAqKWhvc3RBZGRyLCBsZW4pKQorCQlydiA9IC1FRkFVTFQ7CisKKyAgICAgIGV4aXQ6CisJZnJlZV9wYWdlcyhob3N0QWRkciwgZ2V0X29yZGVyKGxlbikpOworCisJcmV0dXJuIHJ2OworfQorCitzc2l6ZV90CittYmNzX3NyYW1fd3JpdGUoc3RydWN0IGZpbGUgKiBmcCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICogb2ZmKQoreworCXN0cnVjdCBjeF9kZXYgKmN4X2RldiA9IGZwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG1iY3Nfc29mdCAqc29mdCA9IGN4X2Rldi0+c29mdDsKKwl1aW50NjRfdCBob3N0QWRkcjsKKwlpbnQgcnYgPSAwOworCisJaG9zdEFkZHIgPSBfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCwgZ2V0X29yZGVyKGxlbikpOworCWlmIChob3N0QWRkciA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCAqKWhvc3RBZGRyLCBidWYsIGxlbikpIHsKKwkJcnYgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJcnYgPSBkb19tYmNzX3NyYW1fZG1hcmVhZChzb2Z0LCBob3N0QWRkciwgbGVuLCBvZmYpOworCisgICAgICBleGl0OgorCWZyZWVfcGFnZXMoaG9zdEFkZHIsIGdldF9vcmRlcihsZW4pKTsKKworCXJldHVybiBydjsKK30KKworbG9mZl90IG1iY3Nfc3JhbV9sbHNlZWsoc3RydWN0IGZpbGUgKiBmaWxwLCBsb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKQoreworCWxvZmZfdCBuZXdwb3M7CisKKwlzd2l0Y2ggKHdoZW5jZSkgeworCWNhc2UgMDoJCS8qIFNFRUtfU0VUICovCisJCW5ld3BvcyA9IG9mZjsKKwkJYnJlYWs7CisKKwljYXNlIDE6CQkvKiBTRUVLX0NVUiAqLworCQluZXdwb3MgPSBmaWxwLT5mX3BvcyArIG9mZjsKKwkJYnJlYWs7CisKKwljYXNlIDI6CQkvKiBTRUVLX0VORCAqLworCQluZXdwb3MgPSBNQkNTX1NSQU1fU0laRSArIG9mZjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgkJLyogY2FuJ3QgaGFwcGVuICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChuZXdwb3MgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZpbHAtPmZfcG9zID0gbmV3cG9zOworCisJcmV0dXJuIG5ld3BvczsKK30KKworc3RhdGljIHVpbnQ2NF90IG1iY3NfcGlvYWRkcihzdHJ1Y3QgbWJjc19zb2Z0ICpzb2Z0LCB1aW50NjRfdCBvZmZzZXQpCit7CisJdWludDY0X3QgbW1yX2Jhc2U7CisKKwltbXJfYmFzZSA9ICh1aW50NjRfdCkgKHNvZnQtPm1tcl9iYXNlICsgb2Zmc2V0KTsKKworCXJldHVybiBtbXJfYmFzZTsKK30KKworc3RhdGljIHZvaWQgbWJjc19kZWJ1Z19waW9hZGRyX3NldChzdHJ1Y3QgbWJjc19zb2Z0ICpzb2Z0KQoreworCXNvZnQtPmRlYnVnX2FkZHIgPSBtYmNzX3Bpb2FkZHIoc29mdCwgTUJDU19ERUJVR19TVEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG1iY3NfZ3Njcl9waW9hZGRyX3NldChzdHJ1Y3QgbWJjc19zb2Z0ICpzb2Z0KQoreworCXNvZnQtPmdzY3JfYWRkciA9IG1iY3NfcGlvYWRkcihzb2Z0LCBNQkNTX0dTQ1JfU1RBUlQpOworfQorCitpbnQgbWJjc19nc2NyX21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgY3hfZGV2ICpjeF9kZXYgPSBmcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtYmNzX3NvZnQgKnNvZnQgPSBjeF9kZXYtPnNvZnQ7CisKKwlpZiAodm1hLT52bV9wZ29mZiAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisKKwkvKiBSZW1hcC1wZm4tcmFuZ2Ugd2lsbCBtYXJrIHRoZSByYW5nZSBWTV9JTyBhbmQgVk1fUkVTRVJWRUQgKi8KKwlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwKKwkJCSAgICB2bWEtPnZtX3N0YXJ0LAorCQkJICAgIF9fcGEoc29mdC0+Z3Njcl9hZGRyKSA+PiBQQUdFX1NISUZULAorCQkJICAgIFBBR0VfU0laRSwKKwkJCSAgICB2bWEtPnZtX3BhZ2VfcHJvdCkpCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbWJjc19jb21wbGV0aW9uX2ludHJfaGFuZGxlciAtIFByaW1hcnkgY29tcGxldGlvbiBoYW5kbGVyLgorICogQGlycTogaXJxCisgKiBAYXJnOiBzb2Z0IHN0cnVjdCBmb3IgZGV2aWNlCisgKiBAZXA6IHJlZ3MKKyAqCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdAorbWJjc19jb21wbGV0aW9uX2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcsIHN0cnVjdCBwdF9yZWdzICplcCkKK3sKKwlzdHJ1Y3QgbWJjc19zb2Z0ICpzb2Z0ID0gKHN0cnVjdCBtYmNzX3NvZnQgKilhcmc7CisJdm9pZCAqbW1yX2Jhc2U7CisJdW5pb24gY21fc3RhdHVzIGNtX3N0YXR1czsKKwl1bmlvbiBjbV9jb250cm9sIGNtX2NvbnRyb2w7CisKKwltbXJfYmFzZSA9IHNvZnQtPm1tcl9iYXNlOworCWNtX3N0YXR1cy5jbV9zdGF0dXNfcmVnID0gTUJDU19NTVJfR0VUKG1tcl9iYXNlLCBNQkNTX0NNX1NUQVRVUyk7CisKKwlpZiAoY21fc3RhdHVzLnJkX2RtYV9kb25lKSB7CisJCS8qIHN0b3AgZG1hLXJlYWQgZW5naW5lLCBjbGVhciBzdGF0dXMgKi8KKwkJY21fY29udHJvbC5jbV9jb250cm9sX3JlZyA9CisJCSAgICBNQkNTX01NUl9HRVQobW1yX2Jhc2UsIE1CQ1NfQ01fQ09OVFJPTCk7CisJCWNtX2NvbnRyb2wucmRfZG1hX2NsciA9IDE7CisJCU1CQ1NfTU1SX1NFVChtbXJfYmFzZSwgTUJDU19DTV9DT05UUk9MLAorCQkJICAgICBjbV9jb250cm9sLmNtX2NvbnRyb2xfcmVnKTsKKwkJYXRvbWljX3NldCgmc29mdC0+ZG1hcmVhZF9kb25lLCAxKTsKKwkJd2FrZV91cCgmc29mdC0+ZG1hcmVhZF9xdWV1ZSk7CisJfQorCWlmIChjbV9zdGF0dXMud3JfZG1hX2RvbmUpIHsKKwkJLyogc3RvcCBkbWEtd3JpdGUgZW5naW5lLCBjbGVhciBzdGF0dXMgKi8KKwkJY21fY29udHJvbC5jbV9jb250cm9sX3JlZyA9CisJCSAgICBNQkNTX01NUl9HRVQobW1yX2Jhc2UsIE1CQ1NfQ01fQ09OVFJPTCk7CisJCWNtX2NvbnRyb2wud3JfZG1hX2NsciA9IDE7CisJCU1CQ1NfTU1SX1NFVChtbXJfYmFzZSwgTUJDU19DTV9DT05UUk9MLAorCQkJICAgICBjbV9jb250cm9sLmNtX2NvbnRyb2xfcmVnKTsKKwkJYXRvbWljX3NldCgmc29mdC0+ZG1hd3JpdGVfZG9uZSwgMSk7CisJCXdha2VfdXAoJnNvZnQtPmRtYXdyaXRlX3F1ZXVlKTsKKwl9CisJaWYgKGNtX3N0YXR1cy5hbGdfZG9uZSkgeworCQkvKiBjbGVhciBzdGF0dXMgKi8KKwkJY21fY29udHJvbC5jbV9jb250cm9sX3JlZyA9CisJCSAgICBNQkNTX01NUl9HRVQobW1yX2Jhc2UsIE1CQ1NfQ01fQ09OVFJPTCk7CisJCWNtX2NvbnRyb2wuYWxnX2RvbmVfY2xyID0gMTsKKwkJTUJDU19NTVJfU0VUKG1tcl9iYXNlLCBNQkNTX0NNX0NPTlRST0wsCisJCQkgICAgIGNtX2NvbnRyb2wuY21fY29udHJvbF9yZWcpOworCQlhdG9taWNfc2V0KCZzb2Z0LT5hbGdvX2RvbmUsIDEpOworCQl3YWtlX3VwKCZzb2Z0LT5hbGdvX3F1ZXVlKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogbWJjc19pbnRyX2FsbG9jIC0gQWxsb2NhdGUgaW50ZXJydXB0cy4KKyAqIEBkZXY6IGRldmljZSBwb2ludGVyCisgKgorICovCitzdGF0aWMgaW50IG1iY3NfaW50cl9hbGxvYyhzdHJ1Y3QgY3hfZGV2ICpkZXYpCit7CisJc3RydWN0IHNuX2lycV9pbmZvICpzbl9pcnE7CisJc3RydWN0IG1iY3Nfc29mdCAqc29mdDsKKwlzdHJ1Y3QgZ2V0ZG1hICpnZXRkbWE7CisJc3RydWN0IHB1dGRtYSAqcHV0ZG1hOworCXN0cnVjdCBhbGdvYmxvY2sgKmFsZ287CisKKwlzb2Z0ID0gZGV2LT5zb2Z0OworCWdldGRtYSA9ICZzb2Z0LT5nZXRkbWE7CisJcHV0ZG1hID0gJnNvZnQtPnB1dGRtYTsKKwlhbGdvID0gJnNvZnQtPmFsZ287CisKKwlzb2Z0LT5nZXRfc25faXJxID0gTlVMTDsKKwlzb2Z0LT5wdXRfc25faXJxID0gTlVMTDsKKwlzb2Z0LT5hbGdvX3NuX2lycSA9IE5VTEw7CisKKwlzbl9pcnEgPSB0aW9jeF9pcnFfYWxsb2MoZGV2LT5jeF9pZC5uYXNpZCwgVElPQ1hfQ09SRUxFVCwgLTEsIC0xLCAtMSk7CisJaWYgKHNuX2lycSA9PSBOVUxMKQorCQlyZXR1cm4gLUVBR0FJTjsKKwlzb2Z0LT5nZXRfc25faXJxID0gc25faXJxOworCWdldGRtYS0+aW50ckhvc3REZXN0ID0gc25faXJxLT5pcnFfeHRhbGthZGRyOworCWdldGRtYS0+aW50clZlY3RvciA9IHNuX2lycS0+aXJxX2lycTsKKwlpZiAocmVxdWVzdF9pcnEoc25faXJxLT5pcnFfaXJxLAorCQkJKHZvaWQgKiltYmNzX2NvbXBsZXRpb25faW50cl9oYW5kbGVyLCBTQV9TSElSUSwKKwkJCSJNQkNTIGdldCBpbnRyIiwgKHZvaWQgKilzb2Z0KSkgeworCQl0aW9jeF9pcnFfZnJlZShzb2Z0LT5nZXRfc25faXJxKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJc25faXJxID0gdGlvY3hfaXJxX2FsbG9jKGRldi0+Y3hfaWQubmFzaWQsIFRJT0NYX0NPUkVMRVQsIC0xLCAtMSwgLTEpOworCWlmIChzbl9pcnEgPT0gTlVMTCkgeworCQlmcmVlX2lycShzb2Z0LT5nZXRfc25faXJxLT5pcnFfaXJxLCBzb2Z0KTsKKwkJdGlvY3hfaXJxX2ZyZWUoc29mdC0+Z2V0X3NuX2lycSk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlzb2Z0LT5wdXRfc25faXJxID0gc25faXJxOworCXB1dGRtYS0+aW50ckhvc3REZXN0ID0gc25faXJxLT5pcnFfeHRhbGthZGRyOworCXB1dGRtYS0+aW50clZlY3RvciA9IHNuX2lycS0+aXJxX2lycTsKKwlpZiAocmVxdWVzdF9pcnEoc25faXJxLT5pcnFfaXJxLAorCQkJKHZvaWQgKiltYmNzX2NvbXBsZXRpb25faW50cl9oYW5kbGVyLCBTQV9TSElSUSwKKwkJCSJNQkNTIHB1dCBpbnRyIiwgKHZvaWQgKilzb2Z0KSkgeworCQl0aW9jeF9pcnFfZnJlZShzb2Z0LT5wdXRfc25faXJxKTsKKwkJZnJlZV9pcnEoc29mdC0+Z2V0X3NuX2lycS0+aXJxX2lycSwgc29mdCk7CisJCXRpb2N4X2lycV9mcmVlKHNvZnQtPmdldF9zbl9pcnEpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlzbl9pcnEgPSB0aW9jeF9pcnFfYWxsb2MoZGV2LT5jeF9pZC5uYXNpZCwgVElPQ1hfQ09SRUxFVCwgLTEsIC0xLCAtMSk7CisJaWYgKHNuX2lycSA9PSBOVUxMKSB7CisJCWZyZWVfaXJxKHNvZnQtPnB1dF9zbl9pcnEtPmlycV9pcnEsIHNvZnQpOworCQl0aW9jeF9pcnFfZnJlZShzb2Z0LT5wdXRfc25faXJxKTsKKwkJZnJlZV9pcnEoc29mdC0+Z2V0X3NuX2lycS0+aXJxX2lycSwgc29mdCk7CisJCXRpb2N4X2lycV9mcmVlKHNvZnQtPmdldF9zbl9pcnEpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJc29mdC0+YWxnb19zbl9pcnEgPSBzbl9pcnE7CisJYWxnby0+aW50ckhvc3REZXN0ID0gc25faXJxLT5pcnFfeHRhbGthZGRyOworCWFsZ28tPmludHJWZWN0b3IgPSBzbl9pcnEtPmlycV9pcnE7CisJaWYgKHJlcXVlc3RfaXJxKHNuX2lycS0+aXJxX2lycSwKKwkJCSh2b2lkICopbWJjc19jb21wbGV0aW9uX2ludHJfaGFuZGxlciwgU0FfU0hJUlEsCisJCQkiTUJDUyBhbGdvIGludHIiLCAodm9pZCAqKXNvZnQpKSB7CisJCXRpb2N4X2lycV9mcmVlKHNvZnQtPmFsZ29fc25faXJxKTsKKwkJZnJlZV9pcnEoc29mdC0+cHV0X3NuX2lycS0+aXJxX2lycSwgc29mdCk7CisJCXRpb2N4X2lycV9mcmVlKHNvZnQtPnB1dF9zbl9pcnEpOworCQlmcmVlX2lycShzb2Z0LT5nZXRfc25faXJxLT5pcnFfaXJxLCBzb2Z0KTsKKwkJdGlvY3hfaXJxX2ZyZWUoc29mdC0+Z2V0X3NuX2lycSk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIG1iY3NfaW50cl9kZWFsbG9jIC0gUmVtb3ZlIGludGVycnVwdHMuCisgKiBAZGV2OiBkZXZpY2UgcG9pbnRlcgorICoKKyAqLworc3RhdGljIHZvaWQgbWJjc19pbnRyX2RlYWxsb2Moc3RydWN0IGN4X2RldiAqZGV2KQoreworCXN0cnVjdCBtYmNzX3NvZnQgKnNvZnQ7CisKKwlzb2Z0ID0gZGV2LT5zb2Z0OworCisJZnJlZV9pcnEoc29mdC0+Z2V0X3NuX2lycS0+aXJxX2lycSwgc29mdCk7CisJdGlvY3hfaXJxX2ZyZWUoc29mdC0+Z2V0X3NuX2lycSk7CisJZnJlZV9pcnEoc29mdC0+cHV0X3NuX2lycS0+aXJxX2lycSwgc29mdCk7CisJdGlvY3hfaXJxX2ZyZWUoc29mdC0+cHV0X3NuX2lycSk7CisJZnJlZV9pcnEoc29mdC0+YWxnb19zbl9pcnEtPmlycV9pcnEsIHNvZnQpOworCXRpb2N4X2lycV9mcmVlKHNvZnQtPmFsZ29fc25faXJxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWJjc19od19pbml0KHN0cnVjdCBtYmNzX3NvZnQgKnNvZnQpCit7CisJdm9pZCAqbW1yX2Jhc2UgPSBzb2Z0LT5tbXJfYmFzZTsKKwl1bmlvbiBjbV9jb250cm9sIGNtX2NvbnRyb2w7CisJdW5pb24gY21fcmVxX3RpbWVvdXQgY21fcmVxX3RpbWVvdXQ7CisJdWludDY0X3QgZXJyX3N0YXQ7CisKKwljbV9yZXFfdGltZW91dC5jbV9yZXFfdGltZW91dF9yZWcgPQorCSAgICBNQkNTX01NUl9HRVQobW1yX2Jhc2UsIE1CQ1NfQ01fUkVRX1RPVVQpOworCisJY21fcmVxX3RpbWVvdXQudGltZV9vdXQgPSBNQkNTX0NNX0NPTlRST0xfUkVRX1RPVVRfTUFTSzsKKwlNQkNTX01NUl9TRVQobW1yX2Jhc2UsIE1CQ1NfQ01fUkVRX1RPVVQsCisJCSAgICAgY21fcmVxX3RpbWVvdXQuY21fcmVxX3RpbWVvdXRfcmVnKTsKKworCW1iY3NfZ3Njcl9waW9hZGRyX3NldChzb2Z0KTsKKwltYmNzX2RlYnVnX3Bpb2FkZHJfc2V0KHNvZnQpOworCisJLyogY2xlYXIgZXJyb3JzICovCisJZXJyX3N0YXQgPSBNQkNTX01NUl9HRVQobW1yX2Jhc2UsIE1CQ1NfQ01fRVJSX1NUQVQpOworCU1CQ1NfTU1SX1NFVChtbXJfYmFzZSwgTUJDU19DTV9DTFJfRVJSX1NUQVQsIGVycl9zdGF0KTsKKwlNQkNTX01NUl9aRVJPKG1tcl9iYXNlLCBNQkNTX0NNX0VSUk9SX0RFVEFJTDEpOworCisJLyogZW5hYmxlIGludGVycnVwdHMgKi8KKwkvKiB0dXJuIG9mZiAyXjIzIChJTlRfRU5fUElPX1JFUV9BRERSX0lOVikgKi8KKwlNQkNTX01NUl9TRVQobW1yX2Jhc2UsIE1CQ1NfQ01fRVJSX0lOVF9FTiwgMHgzZmZmZmZmN2UwMGZmVUwpOworCisJLyogYXJtIHN0YXR1cyByZWdzIGFuZCBjbGVhciBlbmdpbmVzICovCisJY21fY29udHJvbC5jbV9jb250cm9sX3JlZyA9IE1CQ1NfTU1SX0dFVChtbXJfYmFzZSwgTUJDU19DTV9DT05UUk9MKTsKKwljbV9jb250cm9sLnJlYXJtX3N0YXRfcmVncyA9IDE7CisJY21fY29udHJvbC5hbGdfY2xyID0gMTsKKwljbV9jb250cm9sLndyX2RtYV9jbHIgPSAxOworCWNtX2NvbnRyb2wucmRfZG1hX2NsciA9IDE7CisKKwlNQkNTX01NUl9TRVQobW1yX2Jhc2UsIE1CQ1NfQ01fQ09OVFJPTCwgY21fY29udHJvbC5jbV9jb250cm9sX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19hbGdvKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBjeF9kZXYgKmN4X2RldiA9IHRvX2N4X2RldihkZXYpOworCXN0cnVjdCBtYmNzX3NvZnQgKnNvZnQgPSBjeF9kZXYtPnNvZnQ7CisJdWludDY0X3QgZGVidWcwOworCisJLyoKKwkgKiBCeSBjb252ZW50aW9uLCB0aGUgZmlyc3QgZGVidWcgcmVnaXN0ZXIgY29udGFpbnMgdGhlCisJICogYWxnb3JpdGhtIG51bWJlciBhbmQgcmV2aXNpb24uCisJICovCisJZGVidWcwID0gKih1aW50NjRfdCAqKSBzb2Z0LT5kZWJ1Z19hZGRyOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglbHggMHglbHhcbiIsCisJCSAgICAgICAoZGVidWcwID4+IDMyKSwgKGRlYnVnMCAmIDB4ZmZmZmZmZmYpKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfYWxnbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBuOworCXN0cnVjdCBjeF9kZXYgKmN4X2RldiA9IHRvX2N4X2RldihkZXYpOworCXN0cnVjdCBtYmNzX3NvZnQgKnNvZnQgPSBjeF9kZXYtPnNvZnQ7CisKKwlpZiAoY291bnQgPD0gMCkKKwkJcmV0dXJuIDA7CisKKwluID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKKworCWlmIChuID09IDEpIHsKKwkJbWJjc19hbGdvX3N0YXJ0KHNvZnQpOworCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvZnQtPmFsZ29fcXVldWUsCisJCQkJCWF0b21pY19yZWFkKCZzb2Z0LT5hbGdvX2RvbmUpKSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitERVZJQ0VfQVRUUihhbGdvLCAwNjQ0LCBzaG93X2FsZ28sIHN0b3JlX2FsZ28pOworCisvKioKKyAqIG1iY3NfcHJvYmUgLSBJbml0aWFsaXplIGZvciBkZXZpY2UKKyAqIEBkZXY6IGRldmljZSBwb2ludGVyCisgKiBAZGV2aWNlX2lkOiBpZCB0YWJsZSBwb2ludGVyCisgKgorICovCitzdGF0aWMgaW50IG1iY3NfcHJvYmUoc3RydWN0IGN4X2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgY3hfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgbWJjc19zb2Z0ICpzb2Z0OworCisJZGV2LT5zb2Z0ID0gTlVMTDsKKworCXNvZnQgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbWJjc19zb2Z0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNvZnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzb2Z0LT5uYXNpZCA9IGRldi0+Y3hfaWQubmFzaWQ7CisJbGlzdF9hZGQoJnNvZnQtPmxpc3QsICZzb2Z0X2xpc3QpOworCXNvZnQtPm1tcl9iYXNlID0gKHZvaWQgKil0aW9jeF9zd2luX2Jhc2UoZGV2LT5jeF9pZC5uYXNpZCk7CisJZGV2LT5zb2Z0ID0gc29mdDsKKwlzb2Z0LT5jeGRldiA9IGRldjsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNvZnQtPmRtYXdyaXRlX3F1ZXVlKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzb2Z0LT5kbWFyZWFkX3F1ZXVlKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzb2Z0LT5hbGdvX3F1ZXVlKTsKKworCWluaXRfTVVURVgoJnNvZnQtPmRtYXdyaXRlbG9jayk7CisJaW5pdF9NVVRFWCgmc29mdC0+ZG1hcmVhZGxvY2spOworCWluaXRfTVVURVgoJnNvZnQtPmFsZ29sb2NrKTsKKworCW1iY3NfZ2V0ZG1hX2luaXQoJnNvZnQtPmdldGRtYSk7CisJbWJjc19wdXRkbWFfaW5pdCgmc29mdC0+cHV0ZG1hKTsKKwltYmNzX2FsZ29faW5pdCgmc29mdC0+YWxnbyk7CisKKwltYmNzX2h3X2luaXQoc29mdCk7CisKKwkvKiBBbGxvY2F0ZSBpbnRlcnJ1cHRzICovCisJbWJjc19pbnRyX2FsbG9jKGRldik7CisKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfYWxnbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYmNzX3JlbW92ZShzdHJ1Y3QgY3hfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+c29mdCkgeworCQltYmNzX2ludHJfZGVhbGxvYyhkZXYpOworCQlrZnJlZShkZXYtPnNvZnQpOworCX0KKworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9hbGdvKTsKKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3QgY3hfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgbWJjc19pZF90YWJsZVtdID0geworCXsKKwkgLnBhcnRfbnVtID0gTUJDU19QQVJUX05VTSwKKwkgLm1mZ19udW0gPSBNQkNTX01GR19OVU0sCisJIH0sCisJeworCSAucGFydF9udW0gPSBNQkNTX1BBUlRfTlVNX0FMRzAsCisJIC5tZmdfbnVtID0gTUJDU19NRkdfTlVNLAorCSB9LAorCXswLCAwfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShjeCwgbWJjc19pZF90YWJsZSk7CisKK3N0cnVjdCBjeF9kcnYgbWJjc19kcml2ZXIgPSB7CisJLm5hbWUgPSBERVZJQ0VfTkFNRSwKKwkuaWRfdGFibGUgPSBtYmNzX2lkX3RhYmxlLAorCS5wcm9iZSA9IG1iY3NfcHJvYmUsCisJLnJlbW92ZSA9IG1iY3NfcmVtb3ZlLAorfTsKKworc3RhdGljIHZvaWQgX19leGl0IG1iY3NfZXhpdCh2b2lkKQoreworCWludCBydjsKKworCXJ2ID0gdW5yZWdpc3Rlcl9jaHJkZXYobWJjc19tYWpvciwgREVWSUNFX05BTUUpOworCWlmIChydiA8IDApCisJCURCRyhLRVJOX0FMRVJUICJFcnJvciBpbiB1bnJlZ2lzdGVyX2NocmRldjogJWRcbiIsIHJ2KTsKKworCWN4X2RyaXZlcl91bnJlZ2lzdGVyKCZtYmNzX2RyaXZlcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1iY3NfaW5pdCh2b2lkKQoreworCWludCBydjsKKworCS8vIFB1dCBkcml2ZXIgaW50byBjaHJkZXZzW10uICBHZXQgbWFqb3IgbnVtYmVyLgorCXJ2ID0gcmVnaXN0ZXJfY2hyZGV2KG1iY3NfbWFqb3IsIERFVklDRV9OQU1FLCAmbWJjc19vcHMpOworCWlmIChydiA8IDApIHsKKwkJREJHKEtFUk5fQUxFUlQgIm1iY3NfaW5pdDogY2FuJ3QgZ2V0IG1ham9yIG51bWJlci4gJWRcbiIsIHJ2KTsKKwkJcmV0dXJuIHJ2OworCX0KKwltYmNzX21ham9yID0gcnY7CisKKwlyZXR1cm4gY3hfZHJpdmVyX3JlZ2lzdGVyKCZtYmNzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1iY3NfaW5pdCk7Cittb2R1bGVfZXhpdChtYmNzX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJCcnVjZSBMb3N1cmUgPGJsb3N1cmVAc2dpLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBNT0FUQiBDb3JlIFNlcnZpY2VzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWJjcy5oIGIvZHJpdmVycy9jaGFyL21iY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2ZkNDdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL21iY3MuaApAQCAtMCwwICsxLDU1MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX19NQkNTX0hfXworI2RlZmluZSBfX01CQ1NfSF9fCisKKy8qCisgKiBHZW5lcmFsIG1hY3JvcworICovCisjZGVmaW5lIE1CCSgxMDI0KjEwMjQpCisjZGVmaW5lIE1CMgkoMipNQikKKyNkZWZpbmUgTUI0CSg0Kk1CKQorI2RlZmluZSBNQjYJKDYqTUIpCisKKy8qCisgKiBPZmZzZXRzIGFuZCBtYXNrcworICovCisjZGVmaW5lIE1CQ1NfQ01fSUQJCTB4MDAwMAkvKiBJZGVudGlmaWNhdGlvbiAqLworI2RlZmluZSBNQkNTX0NNX1NUQVRVUwkJMHgwMDA4CS8qIFN0YXR1cyAqLworI2RlZmluZSBNQkNTX0NNX0VSUk9SX0RFVEFJTDEJMHgwMDEwCS8qIEVycm9yIERldGFpbDEgKi8KKyNkZWZpbmUgTUJDU19DTV9FUlJPUl9ERVRBSUwyCTB4MDAxOAkvKiBFcnJvciBEZXRhaWwyICovCisjZGVmaW5lIE1CQ1NfQ01fQ09OVFJPTAkJMHgwMDIwCS8qIENvbnRyb2wgKi8KKyNkZWZpbmUgTUJDU19DTV9SRVFfVE9VVAkweDAwMjgJLyogUmVxdWVzdCBUaW1lLW91dCAqLworI2RlZmluZSBNQkNTX0NNX0VSUl9JTlRfREVTVAkweDAwMzgJLyogRXJyb3IgSW50ZXJydXB0IERlc3RpbmF0aW9uICovCisjZGVmaW5lIE1CQ1NfQ01fVEFSR19GTAkJMHgwMDUwCS8qIFRhcmdldCBGbHVzaCAqLworI2RlZmluZSBNQkNTX0NNX0VSUl9TVEFUCTB4MDA2MAkvKiBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgTUJDU19DTV9DTFJfRVJSX1NUQVQJMHgwMDY4CS8qIENsZWFyIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSBNQkNTX0NNX0VSUl9JTlRfRU4JMHgwMDcwCS8qIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTUJDU19SRF9ETUFfU1lTX0FERFIJMHgwMTAwCS8qIFJlYWQgRE1BIFN5c3RlbSBBZGRyZXNzICovCisjZGVmaW5lIE1CQ1NfUkRfRE1BX0xPQ19BRERSCTB4MDEwOAkvKiBSZWFkIERNQSBMb2NhbCBBZGRyZXNzICovCisjZGVmaW5lIE1CQ1NfUkRfRE1BX0NUUkwJMHgwMTEwCS8qIFJlYWQgRE1BIENvbnRyb2wgKi8KKyNkZWZpbmUgTUJDU19SRF9ETUFfQU1PX0RFU1QJMHgwMTE4CS8qIFJlYWQgRE1BIEFNTyBEZXN0aW5hdGlvbiAqLworI2RlZmluZSBNQkNTX1JEX0RNQV9JTlRfREVTVAkweDAxMjAJLyogUmVhZCBETUEgSW50ZXJydXB0IERlc3RpbmF0aW9uICovCisjZGVmaW5lIE1CQ1NfUkRfRE1BX0FVWF9TVEFUCTB4MDEzMAkvKiBSZWFkIERNQSBBdXhpbGxhcnkgU3RhdHVzICovCisjZGVmaW5lIE1CQ1NfV1JfRE1BX1NZU19BRERSCTB4MDIwMAkvKiBXcml0ZSBETUEgU3lzdGVtIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUJDU19XUl9ETUFfTE9DX0FERFIJMHgwMjA4CS8qIFdyaXRlIERNQSBMb2NhbCBBZGRyZXNzICovCisjZGVmaW5lIE1CQ1NfV1JfRE1BX0NUUkwJMHgwMjEwCS8qIFdyaXRlIERNQSBDb250cm9sICovCisjZGVmaW5lIE1CQ1NfV1JfRE1BX0FNT19ERVNUCTB4MDIxOAkvKiBXcml0ZSBETUEgQU1PIERlc3RpbmF0aW9uICovCisjZGVmaW5lIE1CQ1NfV1JfRE1BX0lOVF9ERVNUCTB4MDIyMAkvKiBXcml0ZSBETUEgSW50ZXJydXB0IERlc3RpbmF0aW9uICovCisjZGVmaW5lIE1CQ1NfV1JfRE1BX0FVWF9TVEFUCTB4MDIzMAkvKiBXcml0ZSBETUEgQXV4aWxsYXJ5IFN0YXR1cyAqLworI2RlZmluZSBNQkNTX0FMR19BTU9fREVTVAkweDAzMDAJLyogQWxnb3JpdGhtIEFNTyBEZXN0aW5hdGlvbiAqLworI2RlZmluZSBNQkNTX0FMR19JTlRfREVTVAkweDAzMDgJLyogQWxnb3JpdGhtIEludGVycnVwdCBEZXN0aW5hdGlvbiAqLworI2RlZmluZSBNQkNTX0FMR19PRkZTRVRTCTB4MDMxMAorI2RlZmluZSBNQkNTX0FMR19TVEVQCQkweDAzMTgJLyogQWxnb3JpdGhtIFN0ZXAgKi8KKworI2RlZmluZSBNQkNTX0dTQ1JfU1RBUlQJCTB4MDAwMDAwMAorI2RlZmluZSBNQkNTX0RFQlVHX1NUQVJUCTB4MDEwMDAwMAorI2RlZmluZSBNQkNTX1JBTTBfU1RBUlQJCTB4MDIwMDAwMAorI2RlZmluZSBNQkNTX1JBTTFfU1RBUlQJCTB4MDQwMDAwMAorI2RlZmluZSBNQkNTX1JBTTJfU1RBUlQJCTB4MDYwMDAwMAorCisjZGVmaW5lIE1CQ1NfQ01fQ09OVFJPTF9SRVFfVE9VVF9NQVNLIDB4MDAwMDAwMDAwMGZmZmZmZlVMCisvLyNkZWZpbmUgUElPX0JBU0VfQUREUl9CQVNFX09GRlNFVF9NQVNLIDB4MDBmZmZmZmZmZmYwMDAwMFVMCisKKyNkZWZpbmUgTUJDU19TUkFNX1NJWkUJCSgxMDI0KjEwMjQpCisjZGVmaW5lIE1CQ1NfQ0FDSEVMSU5FX1NJWkUJMTI4CisKKy8qCisgKiBNTVIgZ2V0J3MgYW5kIHB1dCdzCisgKi8KKyNkZWZpbmUgTUJDU19NTVJfQUREUihtbXJfYmFzZSwgb2Zmc2V0KSgodWludDY0X3QgKikobW1yX2Jhc2UgKyBvZmZzZXQpKQorI2RlZmluZSBNQkNTX01NUl9TRVQobW1yX2Jhc2UsIG9mZnNldCwgdmFsdWUpIHsJCQlcCisJdWludDY0X3QgKm1iY3NfbW1yX3NldF91NjRwLCByZWFkYmFjazsJCQkJXAorCW1iY3NfbW1yX3NldF91NjRwID0gKHVpbnQ2NF90ICopKG1tcl9iYXNlICsgb2Zmc2V0KTsJXAorCSptYmNzX21tcl9zZXRfdTY0cCA9IHZhbHVlOwkJCQkJXAorCXJlYWRiYWNrID0gKm1iY3NfbW1yX3NldF91NjRwOyBcCit9CisjZGVmaW5lIE1CQ1NfTU1SX0dFVChtbXJfYmFzZSwgb2Zmc2V0KSAqKHVpbnQ2NF90ICopKG1tcl9iYXNlICsgb2Zmc2V0KQorI2RlZmluZSBNQkNTX01NUl9aRVJPKG1tcl9iYXNlLCBvZmZzZXQpIE1CQ1NfTU1SX1NFVChtbXJfYmFzZSwgb2Zmc2V0LCAwKQorCisvKgorICogTUJDUyBtbXIgc3RydWN0dXJlcworICovCit1bmlvbiBjbV9pZCB7CisJdWludDY0X3QgY21faWRfcmVnOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGFsd2F5c19vbmU6MSwJLy8gMAorCQkgbWZnX2lkOjExLAkvLyAxMToxCisJCSBwYXJ0X251bToxNiwJLy8gMjc6MTIKKwkJIGJpdHN0cmVhbV9yZXY6OCwJLy8gMzU6MjgKKwkJOjI4OwkJLy8gNjM6MzYKKwl9OworfTsKKwordW5pb24gY21fc3RhdHVzIHsKKwl1aW50NjRfdCBjbV9zdGF0dXNfcmVnOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IHBlbmRpbmdfcmVhZHM6OCwJLy8gNzowCisJCSBwZW5kaW5nX3dyaXRlczo4LAkvLyAxNTo4CisJCSBpY2VfcnNwX2NyZWRpdHM6OCwJLy8gMjM6MTYKKwkJIGljZV9yZXFfY3JlZGl0czo4LAkvLyAzMToyNAorCQkgY21fcmVxX2NyZWRpdHM6OCwJLy8gMzk6MzIKKwkJOjEsCQkvLyA0MAorCQkgcmRfZG1hX2luX3Byb2dyZXNzOjEsCS8vIDQxCisJCSByZF9kbWFfZG9uZToxLAkvLyA0MgorCQk6MSwJCS8vIDQzCisJCSB3cl9kbWFfaW5fcHJvZ3Jlc3M6MSwJLy8gNDQKKwkJIHdyX2RtYV9kb25lOjEsCS8vIDQ1CisJCSBhbGdfd2FpdGluZzoxLAkvLyA0NgorCQkgYWxnX3BpcGVfcnVubmluZzoxLAkvLyA0NworCQkgYWxnX2RvbmU6MSwJLy8gNDgKKwkJOjMsCQkvLyA1MTo0OQorCQkgcGVuZGluZ19pbnRfcmVxczo4LAkvLyA1OTo1MgorCQk6MywJCS8vIDYyOjYwCisJCSBhbGdfaGFsZl9zcGVlZF9zZWw6MTsJLy8gNjMKKwl9OworfTsKKwordW5pb24gY21fZXJyb3JfZGV0YWlsMSB7CisJdWludDY0X3QgY21fZXJyb3JfZGV0YWlsMV9yZWc7CisJc3RydWN0IHsKKwkJdWludDY0X3QgcGFja2V0X3R5cGU6NCwJLy8gMzowCisJCSBzb3VyY2VfaWQ6MiwJLy8gNTo0CisJCSBkYXRhX3NpemU6MiwJLy8gNzo2CisJCSB0bnVtOjgsCS8vIDE1OjgKKwkJIGJ5dGVfZW5hYmxlOjgsCS8vIDIzOjE2CisJCSBnZnhfY3JlZDo4LAkvLyAzMToyNAorCQkgcmVhZF90eXBlOjIsCS8vIDMzOjMyCisJCSBwaW9fb3JfbWVtb3J5OjEsCS8vIDM0CisJCSBoZWFkX2N3X2Vycm9yOjEsCS8vIDM1CisJCToxMiwJCS8vIDQ3OjM2CisJCSBoZWFkX2Vycm9yX2JpdDoxLAkvLyA0OAorCQkgZGF0YV9lcnJvcl9iaXQ6MSwJLy8gNDkKKwkJOjEzLAkJLy8gNjI6NTAKKwkJIHZhbGlkOjE7CS8vIDYzCisJfTsKK307CisKK3VuaW9uIGNtX2Vycm9yX2RldGFpbDIgeworCXVpbnQ2NF90IGNtX2Vycm9yX2RldGFpbDJfcmVnOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGFkZHJlc3M6NTYsCS8vIDU1OjAKKwkJOjg7CQkvLyA2Mzo1NgorCX07Cit9OworCit1bmlvbiBjbV9jb250cm9sIHsKKwl1aW50NjRfdCBjbV9jb250cm9sX3JlZzsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBjbV9pZDoyLAkvLyAxOjAKKwkJOjIsCQkvLyAzOjIKKwkJIG1heF90cmFuczo1LAkvLyA4OjQKKwkJOjMsCQkvLyAxMTo5CisJCSBhZGRyZXNzX21vZGU6MSwJLy8gMTIKKwkJOjcsCQkvLyAxOToxMworCQkgY3JlZGl0X2xpbWl0OjgsCS8vIDI3OjIwCisJCTo1LAkJLy8gMzI6MjgKKwkJIHJlYXJtX3N0YXRfcmVnczoxLAkvLyAzMworCQkgcHJlc2NhbGFyX2J5cDoxLAkvLyAzNAorCQkgZm9yY2VfZ2FwX3dhcjoxLAkvLyAzNQorCQkgcmRfZG1hX2dvOjEsCS8vIDM2CisJCSB3cl9kbWFfZ286MSwJLy8gMzcKKwkJIGFsZ19nbzoxLAkvLyAzOAorCQkgcmRfZG1hX2NscjoxLAkvLyAzOQorCQkgd3JfZG1hX2NscjoxLAkvLyA0MAorCQkgYWxnX2NscjoxLAkvLyA0MQorCQk6MiwJCS8vIDQzOjQyCisJCSBhbGdfd2FpdF9zdGVwOjEsCS8vIDQ0CisJCSBhbGdfZG9uZV9hbW9fZW46MSwJLy8gNDUKKwkJIGFsZ19kb25lX2ludF9lbjoxLAkvLyA0NgorCQk6MSwJCS8vIDQ3CisJCSBhbGdfc3JhbTBfbG9ja2VkOjEsCS8vIDQ4CisJCSBhbGdfc3JhbTFfbG9ja2VkOjEsCS8vIDQ5CisJCSBhbGdfc3JhbTJfbG9ja2VkOjEsCS8vIDUwCisJCSBhbGdfZG9uZV9jbHI6MSwJLy8gNTEKKwkJOjEyOwkJLy8gNjM6NTIKKwl9OworfTsKKwordW5pb24gY21fcmVxX3RpbWVvdXQgeworCXVpbnQ2NF90IGNtX3JlcV90aW1lb3V0X3JlZzsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCB0aW1lX291dDoyNCwJLy8gMjM6MAorCQk6NDA7CQkvLyA2MzoyNAorCX07Cit9OworCit1bmlvbiBpbnRyX2Rlc3QgeworCXVpbnQ2NF90IGludHJfZGVzdF9yZWc7CisJc3RydWN0IHsKKwkJdWludDY0X3QgYWRkcmVzczo1NiwJLy8gNTU6MAorCQkgaW50X3ZlY3Rvcjo4OwkvLyA2Mzo1NgorCX07Cit9OworCit1bmlvbiBjbV9lcnJvcl9zdGF0dXMgeworCXVpbnQ2NF90IGNtX2Vycm9yX3N0YXR1c19yZWc7CisJc3RydWN0IHsKKwkJdWludDY0X3QgZWNjX3NiZToxLAkvLyAwCisJCSBlY2NfbWJlOjEsCS8vIDEKKwkJIHVuc3VwcG9ydGVkX3JlcToxLAkvLyAyCisJCSB1bmV4cGVjdGVkX3JzcDoxLAkvLyAzCisJCSBiYWRfbGVuZ3RoOjEsCS8vIDQKKwkJIGJhZF9kYXRhdmFsaWQ6MSwJLy8gNQorCQkgYnVmZmVyX292ZXJmbG93OjEsCS8vIDYKKwkJIHJlcXVlc3RfdGltZW91dDoxLAkvLyA3CisJCTo4LAkJLy8gMTU6OAorCQkgaGVhZF9pbnZfZGF0YV9zaXplOjEsCS8vIDE2CisJCSByc3BfcGFjdHlwZV9pbnY6MSwJLy8gMTcKKwkJIGhlYWRfc2JfZXJyOjEsCS8vIDE4CisJCSBtaXNzaW5nX2hlYWQ6MSwJLy8gMTkKKwkJIGhlYWRfaW52X3JkX3R5cGU6MSwJLy8gMjAKKwkJIGhlYWRfY21kX2Vycl9iaXQ6MSwJLy8gMjEKKwkJIHJlcV9hZGRyX2FsaWduX2ludjoxLAkvLyAyMgorCQkgcGlvX3JlcV9hZGRyX2ludjoxLAkvLyAyMworCQkgcmVxX3JhbmdlX2RzaXplX2ludjoxLAkvLyAyNAorCQkgZWFybHlfdGVybToxLAkvLyAyNQorCQkgZWFybHlfdGFpbDoxLAkvLyAyNgorCQkgbWlzc2luZ190YWlsOjEsCS8vIDI3CisJCSBkYXRhX2ZsaXRfc2JfZXJyOjEsCS8vIDI4CisJCSBjbTJoY21fcmVxX2NyZWRfb2Y6MSwJLy8gMjkKKwkJIGNtMmhjbV9yc3BfY3JlZF9vZjoxLAkvLyAzMAorCQkgcnhfYmFkX2RpZG46MSwJLy8gMzEKKwkJIHJkX2RtYV9lcnJfcnNwOjEsCS8vIDMyCisJCSByZF9kbWFfdG51bV90b3V0OjEsCS8vIDMzCisJCSByZF9kbWFfbXVsdGlfdG51bV90b3U6MSwJLy8gMzQKKwkJIHdyX2RtYV9lcnJfcnNwOjEsCS8vIDM1CisJCSB3cl9kbWFfdG51bV90b3V0OjEsCS8vIDM2CisJCSB3cl9kbWFfbXVsdGlfdG51bV90b3U6MSwJLy8gMzcKKwkJIGFsZ19kYXRhX292ZXJmbG93OjEsCS8vIDM4CisJCSBhbGdfZGF0YV91bmRlcmZsb3c6MSwJLy8gMzkKKwkJIHJhbTBfYWNjZXNzX2NvbmZsaWN0OjEsCS8vIDQwCisJCSByYW0xX2FjY2Vzc19jb25mbGljdDoxLAkvLyA0MQorCQkgcmFtMl9hY2Nlc3NfY29uZmxpY3Q6MSwJLy8gNDIKKwkJIHJhbTBfcGVycjoxLAkvLyA0MworCQkgcmFtMV9wZXJyOjEsCS8vIDQ0CisJCSByYW0yX3BlcnI6MSwJLy8gNDUKKwkJIGludF9nZW5fcnNwX2VycjoxLAkvLyA0NgorCQkgaW50X2dlbl90bnVtX3RvdXQ6MSwJLy8gNDcKKwkJIHJkX2RtYV9wcm9nX2VycjoxLAkvLyA0OAorCQkgd3JfZG1hX3Byb2dfZXJyOjEsCS8vIDQ5CisJCToxNDsJCS8vIDYzOjUwCisJfTsKK307CisKK3VuaW9uIGNtX2Nscl9lcnJvcl9zdGF0dXMgeworCXVpbnQ2NF90IGNtX2Nscl9lcnJvcl9zdGF0dXNfcmVnOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGNscl9lY2Nfc2JlOjEsCS8vIDAKKwkJIGNscl9lY2NfbWJlOjEsCS8vIDEKKwkJIGNscl91bnN1cHBvcnRlZF9yZXE6MSwJLy8gMgorCQkgY2xyX3VuZXhwZWN0ZWRfcnNwOjEsCS8vIDMKKwkJIGNscl9iYWRfbGVuZ3RoOjEsCS8vIDQKKwkJIGNscl9iYWRfZGF0YXZhbGlkOjEsCS8vIDUKKwkJIGNscl9idWZmZXJfb3ZlcmZsb3c6MSwJLy8gNgorCQkgY2xyX3JlcXVlc3RfdGltZW91dDoxLAkvLyA3CisJCTo4LAkJLy8gMTU6OAorCQkgY2xyX2hlYWRfaW52X2RhdGFfc2l6OjEsCS8vIDE2CisJCSBjbHJfcnNwX3BhY3R5cGVfaW52OjEsCS8vIDE3CisJCSBjbHJfaGVhZF9zYl9lcnI6MSwJLy8gMTgKKwkJIGNscl9taXNzaW5nX2hlYWQ6MSwJLy8gMTkKKwkJIGNscl9oZWFkX2ludl9yZF90eXBlOjEsCS8vIDIwCisJCSBjbHJfaGVhZF9jbWRfZXJyX2JpdDoxLAkvLyAyMQorCQkgY2xyX3JlcV9hZGRyX2FsaWduX2luOjEsCS8vIDIyCisJCSBjbHJfcGlvX3JlcV9hZGRyX2ludjoxLAkvLyAyMworCQkgY2xyX3JlcV9yYW5nZV9kc2l6ZV9pOjEsCS8vIDI0CisJCSBjbHJfZWFybHlfdGVybToxLAkvLyAyNQorCQkgY2xyX2Vhcmx5X3RhaWw6MSwJLy8gMjYKKwkJIGNscl9taXNzaW5nX3RhaWw6MSwJLy8gMjcKKwkJIGNscl9kYXRhX2ZsaXRfc2JfZXJyOjEsCS8vIDI4CisJCSBjbHJfY20yaGNtX3JlcV9jcmVkX286MSwJLy8gMjkKKwkJIGNscl9jbTJoY21fcnNwX2NyZWRfbzoxLAkvLyAzMAorCQkgY2xyX3J4X2JhZF9kaWRuOjEsCS8vIDMxCisJCSBjbHJfcmRfZG1hX2Vycl9yc3A6MSwJLy8gMzIKKwkJIGNscl9yZF9kbWFfdG51bV90b3V0OjEsCS8vIDMzCisJCSBjbHJfcmRfZG1hX211bHRpX3RudW06MSwJLy8gMzQKKwkJIGNscl93cl9kbWFfZXJyX3JzcDoxLAkvLyAzNQorCQkgY2xyX3dyX2RtYV90bnVtX3RvdXQ6MSwJLy8gMzYKKwkJIGNscl93cl9kbWFfbXVsdGlfdG51bToxLAkvLyAzNworCQkgY2xyX2FsZ19kYXRhX292ZXJmbG93OjEsCS8vIDM4CisJCSBjbHJfYWxnX2RhdGFfdW5kZXJmbG86MSwJLy8gMzkKKwkJIGNscl9yYW0wX2FjY2Vzc19jb25mbDoxLAkvLyA0MAorCQkgY2xyX3JhbTFfYWNjZXNzX2NvbmZsOjEsCS8vIDQxCisJCSBjbHJfcmFtMl9hY2Nlc3NfY29uZmw6MSwJLy8gNDIKKwkJIGNscl9yYW0wX3BlcnI6MSwJLy8gNDMKKwkJIGNscl9yYW0xX3BlcnI6MSwJLy8gNDQKKwkJIGNscl9yYW0yX3BlcnI6MSwJLy8gNDUKKwkJIGNscl9pbnRfZ2VuX3JzcF9lcnI6MSwJLy8gNDYKKwkJIGNscl9pbnRfZ2VuX3RudW1fdG91dDoxLAkvLyA0NworCQkgY2xyX3JkX2RtYV9wcm9nX2VycjoxLAkvLyA0OAorCQkgY2xyX3dyX2RtYV9wcm9nX2VycjoxLAkvLyA0OQorCQk6MTQ7CQkvLyA2Mzo1MAorCX07Cit9OworCit1bmlvbiBjbV9lcnJvcl9pbnRyX2VuYWJsZSB7CisJdWludDY0X3QgY21fZXJyb3JfaW50cl9lbmFibGVfcmVnOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGludF9lbl9lY2Nfc2JlOjEsCS8vIDAKKwkJIGludF9lbl9lY2NfbWJlOjEsCS8vIDEKKwkJIGludF9lbl91bnN1cHBvcnRlZF9yZToxLAkvLyAyCisJCSBpbnRfZW5fdW5leHBlY3RlZF9yc3A6MSwJLy8gMworCQkgaW50X2VuX2JhZF9sZW5ndGg6MSwJLy8gNAorCQkgaW50X2VuX2JhZF9kYXRhdmFsaWQ6MSwJLy8gNQorCQkgaW50X2VuX2J1ZmZlcl9vdmVyZmxvOjEsCS8vIDYKKwkJIGludF9lbl9yZXF1ZXN0X3RpbWVvdToxLAkvLyA3CisJCTo4LAkJLy8gMTU6OAorCQkgaW50X2VuX2hlYWRfaW52X2RhdGFfOjEsCS8vIDE2CisJCSBpbnRfZW5fcnNwX3BhY3R5cGVfaW46MSwJLy8gMTcKKwkJIGludF9lbl9oZWFkX3NiX2VycjoxLAkvLyAxOAorCQkgaW50X2VuX21pc3NpbmdfaGVhZDoxLAkvLyAxOQorCQkgaW50X2VuX2hlYWRfaW52X3JkX3R5OjEsCS8vIDIwCisJCSBpbnRfZW5faGVhZF9jbWRfZXJyX2I6MSwJLy8gMjEKKwkJIGludF9lbl9yZXFfYWRkcl9hbGlnbjoxLAkvLyAyMgorCQkgaW50X2VuX3Bpb19yZXFfYWRkcl9pOjEsCS8vIDIzCisJCSBpbnRfZW5fcmVxX3JhbmdlX2RzaXo6MSwJLy8gMjQKKwkJIGludF9lbl9lYXJseV90ZXJtOjEsCS8vIDI1CisJCSBpbnRfZW5fZWFybHlfdGFpbDoxLAkvLyAyNgorCQkgaW50X2VuX21pc3NpbmdfdGFpbDoxLAkvLyAyNworCQkgaW50X2VuX2RhdGFfZmxpdF9zYl9lOjEsCS8vIDI4CisJCSBpbnRfZW5fY20yaGNtX3JlcV9jcmU6MSwJLy8gMjkKKwkJIGludF9lbl9jbTJoY21fcnNwX2NyZToxLAkvLyAzMAorCQkgaW50X2VuX3J4X2JhZF9kaWRuOjEsCS8vIDMxCisJCSBpbnRfZW5fcmRfZG1hX2Vycl9yc3A6MSwJLy8gMzIKKwkJIGludF9lbl9yZF9kbWFfdG51bV90bzoxLAkvLyAzMworCQkgaW50X2VuX3JkX2RtYV9tdWx0aV90OjEsCS8vIDM0CisJCSBpbnRfZW5fd3JfZG1hX2Vycl9yc3A6MSwJLy8gMzUKKwkJIGludF9lbl93cl9kbWFfdG51bV90bzoxLAkvLyAzNgorCQkgaW50X2VuX3dyX2RtYV9tdWx0aV90OjEsCS8vIDM3CisJCSBpbnRfZW5fYWxnX2RhdGFfb3ZlcmY6MSwJLy8gMzgKKwkJIGludF9lbl9hbGdfZGF0YV91bmRlcjoxLAkvLyAzOQorCQkgaW50X2VuX3JhbTBfYWNjZXNzX2NvOjEsCS8vIDQwCisJCSBpbnRfZW5fcmFtMV9hY2Nlc3NfY286MSwJLy8gNDEKKwkJIGludF9lbl9yYW0yX2FjY2Vzc19jbzoxLAkvLyA0MgorCQkgaW50X2VuX3JhbTBfcGVycjoxLAkvLyA0MworCQkgaW50X2VuX3JhbTFfcGVycjoxLAkvLyA0NAorCQkgaW50X2VuX3JhbTJfcGVycjoxLAkvLyA0NQorCQkgaW50X2VuX2ludF9nZW5fcnNwX2VyOjEsCS8vIDQ2CisJCSBpbnRfZW5faW50X2dlbl90bnVtX3Q6MSwJLy8gNDcKKwkJIGludF9lbl9yZF9kbWFfcHJvZ19lcjoxLAkvLyA0OAorCQkgaW50X2VuX3dyX2RtYV9wcm9nX2VyOjEsCS8vIDQ5CisJCToxNDsJCS8vIDYzOjUwCisJfTsKK307CisKK3N0cnVjdCBjbV9tbXIgeworCXVuaW9uIGNtX2lkIGlkOworCXVuaW9uIGNtX3N0YXR1cyBzdGF0dXM7CisJdW5pb24gY21fZXJyb3JfZGV0YWlsMSBlcnJfZGV0YWlsMTsKKwl1bmlvbiBjbV9lcnJvcl9kZXRhaWwyIGVycl9kZXRhaWwyOworCXVuaW9uIGNtX2NvbnRyb2wgY29udHJvbDsKKwl1bmlvbiBjbV9yZXFfdGltZW91dCByZXFfdGltZW91dDsKKwl1aW50NjRfdCByZXNlcnZlZDFbMV07CisJdW5pb24gaW50cl9kZXN0IGludF9kZXN0OworCXVpbnQ2NF90IHJlc2VydmVkMlsyXTsKKwl1aW50NjRfdCB0YXJnX2ZsdXNoOworCXVpbnQ2NF90IHJlc2VydmVkM1sxXTsKKwl1bmlvbiBjbV9lcnJvcl9zdGF0dXMgZXJyX3N0YXR1czsKKwl1bmlvbiBjbV9jbHJfZXJyb3Jfc3RhdHVzIGNscl9lcnJfc3RhdHVzOworCXVuaW9uIGNtX2Vycm9yX2ludHJfZW5hYmxlIGludF9lbmFibGU7Cit9OworCit1bmlvbiBkbWFfaG9zdGFkZHIgeworCXVpbnQ2NF90IGRtYV9ob3N0YWRkcl9yZWc7CisJc3RydWN0IHsKKwkJdWludDY0X3QgZG1hX3N5c19hZGRyOjU2LAkvLyA1NTowCisJCTo4OwkJLy8gNjM6NTYKKwl9OworfTsKKwordW5pb24gZG1hX2xvY2FsYWRkciB7CisJdWludDY0X3QgZG1hX2xvY2FsYWRkcl9yZWc7CisJc3RydWN0IHsKKwkJdWludDY0X3QgZG1hX3JhbV9hZGRyOjIxLAkvLyAyMDowCisJCSBkbWFfcmFtX3NlbDoyLAkvLyAyMjoyMQorCQk6NDE7CQkvLyA2MzoyMworCX07Cit9OworCit1bmlvbiBkbWFfY29udHJvbCB7CisJdWludDY0X3QgZG1hX2NvbnRyb2xfcmVnOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGRtYV9vcF9sZW5ndGg6MTYsCS8vIDE1OjAKKwkJOjE4LAkJLy8gMzM6MTYKKwkJIGRvbmVfYW1vX2VuOjEsCS8vIDM0CisJCSBkb25lX2ludF9lbjoxLAkvLyAzNQorCQk6MSwJCS8vIDM2CisJCSBwaW9fbWVtX246MSwJLy8gMzcKKwkJOjI2OwkJLy8gNjM6MzgKKwl9OworfTsKKwordW5pb24gZG1hX2Ftb19kZXN0IHsKKwl1aW50NjRfdCBkbWFfYW1vX2Rlc3RfcmVnOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGRtYV9hbW9fc3lzX2FkZHI6NTYsCS8vIDU1OjAKKwkJIGRtYV9hbW9fbW9kX3R5cGU6MywJLy8gNTg6NTYKKwkJOjU7CQkvLyA2Mzo1OQorCX07Cit9OworCit1bmlvbiByZG1hX2F1eF9zdGF0dXMgeworCXVpbnQ2NF90IHJkbWFfYXV4X3N0YXR1c19yZWc7CisJc3RydWN0IHsKKwkJdWludDY0X3Qgb3BfbnVtX3BhY3NfbGVmdDoxNywJLy8gMTY6MAorCQk6NSwJCS8vIDIxOjE3CisJCSBscnNwX2J1ZmZfZW1wdHk6MSwJLy8gMjIKKwkJOjE3LAkJLy8gMzk6MjMKKwkJIHBlbmRpbmdfcmVxc19sZWZ0OjYsCS8vIDQ1OjQwCisJCToxODsJCS8vIDYzOjQ2CisJfTsKK307CisKK3N0cnVjdCByZG1hX21tciB7CisJdW5pb24gZG1hX2hvc3RhZGRyIGhvc3RfYWRkcjsKKwl1bmlvbiBkbWFfbG9jYWxhZGRyIGxvY2FsX2FkZHI7CisJdW5pb24gZG1hX2NvbnRyb2wgY29udHJvbDsKKwl1bmlvbiBkbWFfYW1vX2Rlc3QgYW1vX2Rlc3Q7CisJdW5pb24gaW50cl9kZXN0IGludHJfZGVzdDsKKwl1bmlvbiByZG1hX2F1eF9zdGF0dXMgYXV4X3N0YXR1czsKK307CisKK3VuaW9uIHdkbWFfYXV4X3N0YXR1cyB7CisJdWludDY0X3Qgd2RtYV9hdXhfc3RhdHVzX3JlZzsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBvcF9udW1fcGFjc19sZWZ0OjE3LAkvLyAxNjowCisJCTo0LAkJLy8gMjA6MTcKKwkJIGxyZXFfYnVmZl9lbXB0eToxLAkvLyAyMQorCQk6MTgsCQkvLyAzOToyMgorCQkgcGVuZGluZ19yZXFzX2xlZnQ6NiwJLy8gNDU6NDAKKwkJOjE4OwkJLy8gNjM6NDYKKwl9OworfTsKKworc3RydWN0IHdkbWFfbW1yIHsKKwl1bmlvbiBkbWFfaG9zdGFkZHIgaG9zdF9hZGRyOworCXVuaW9uIGRtYV9sb2NhbGFkZHIgbG9jYWxfYWRkcjsKKwl1bmlvbiBkbWFfY29udHJvbCBjb250cm9sOworCXVuaW9uIGRtYV9hbW9fZGVzdCBhbW9fZGVzdDsKKwl1bmlvbiBpbnRyX2Rlc3QgaW50cl9kZXN0OworCXVuaW9uIHdkbWFfYXV4X3N0YXR1cyBhdXhfc3RhdHVzOworfTsKKwordW5pb24gYWxnb19zdGVwIHsKKwl1aW50NjRfdCBhbGdvX3N0ZXBfcmVnOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGFsZ19zdGVwX2NudDoxNiwJLy8gMTU6MAorCQk6NDg7CQkvLyA2MzoxNgorCX07Cit9OworCitzdHJ1Y3QgYWxnb19tbXIgeworCXVuaW9uIGRtYV9hbW9fZGVzdCBhbW9fZGVzdDsKKwl1bmlvbiBpbnRyX2Rlc3QgaW50cl9kZXN0OworCXVuaW9uIHsKKwkJdWludDY0X3QgYWxnb19vZmZzZXRfcmVnOworCQlzdHJ1Y3QgeworCQkJdWludDY0X3Qgc3JhbTBfb2Zmc2V0OjcsCS8vIDY6MAorCQkJcmVzZXJ2ZWQwOjEsCS8vIDcKKwkJCXNyYW0xX29mZnNldDo3LAkvLyAxNDo4CisJCQlyZXNlcnZlZDE6MSwJLy8gMTUKKwkJCXNyYW0yX29mZnNldDo3LAkvLyAyMjoxNgorCQkJcmVzZXJ2ZWQyOjE0OwkvLyA2MzoyMworCQl9OworCX0gc3JhbV9vZmZzZXQ7CisJdW5pb24gYWxnb19zdGVwIHN0ZXA7Cit9OworCitzdHJ1Y3QgbWJjc19tbXIgeworCXN0cnVjdCBjbV9tbXIgY207CisJdWludDY0X3QgcmVzZXJ2ZWQxWzE3XTsKKwlzdHJ1Y3QgcmRtYV9tbXIgcmREbWE7CisJdWludDY0X3QgcmVzZXJ2ZWQyWzI1XTsKKwlzdHJ1Y3Qgd2RtYV9tbXIgd3JEbWE7CisJdWludDY0X3QgcmVzZXJ2ZWQzWzI1XTsKKwlzdHJ1Y3QgYWxnb19tbXIgYWxnbzsKKwl1aW50NjRfdCByZXNlcnZlZDRbMTU2XTsKK307CisKKy8qCisgKiBkZWZpbmVzCisgKi8KKyNkZWZpbmUgREVWSUNFX05BTUUgIm1iY3MiCisjZGVmaW5lIE1CQ1NfUEFSVF9OVU0gMHhmZmYwCisjZGVmaW5lIE1CQ1NfUEFSVF9OVU1fQUxHMCAweGYwMDEKKyNkZWZpbmUgTUJDU19NRkdfTlVNICAweDEKKworc3RydWN0IGFsZ29ibG9jayB7CisJdWludDY0X3QgYW1vSG9zdERlc3Q7CisJdWludDY0X3QgYW1vTW9kVHlwZTsKKwl1aW50NjRfdCBpbnRySG9zdERlc3Q7CisJdWludDY0X3QgaW50clZlY3RvcjsKKwl1aW50NjRfdCBhbGdvU3RlcENvdW50OworfTsKKworc3RydWN0IGdldGRtYSB7CisJdWludDY0X3QgaG9zdEFkZHI7CisJdWludDY0X3QgbG9jYWxBZGRyOworCXVpbnQ2NF90IGJ5dGVzOworCXVpbnQ2NF90IERvbmVBbW9FbmFibGU7CisJdWludDY0X3QgRG9uZUludEVuYWJsZTsKKwl1aW50NjRfdCBwZWVySU87CisJdWludDY0X3QgYW1vSG9zdERlc3Q7CisJdWludDY0X3QgYW1vTW9kVHlwZTsKKwl1aW50NjRfdCBpbnRySG9zdERlc3Q7CisJdWludDY0X3QgaW50clZlY3RvcjsKK307CisKK3N0cnVjdCBwdXRkbWEgeworCXVpbnQ2NF90IGhvc3RBZGRyOworCXVpbnQ2NF90IGxvY2FsQWRkcjsKKwl1aW50NjRfdCBieXRlczsKKwl1aW50NjRfdCBEb25lQW1vRW5hYmxlOworCXVpbnQ2NF90IERvbmVJbnRFbmFibGU7CisJdWludDY0X3QgcGVlcklPOworCXVpbnQ2NF90IGFtb0hvc3REZXN0OworCXVpbnQ2NF90IGFtb01vZFR5cGU7CisJdWludDY0X3QgaW50ckhvc3REZXN0OworCXVpbnQ2NF90IGludHJWZWN0b3I7Cit9OworCitzdHJ1Y3QgbWJjc19zb2Z0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGN4X2RldiAqY3hkZXY7CisJaW50IG1ham9yOworCWludCBuYXNpZDsKKwl2b2lkICptbXJfYmFzZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkbWF3cml0ZV9xdWV1ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkbWFyZWFkX3F1ZXVlOworCXdhaXRfcXVldWVfaGVhZF90IGFsZ29fcXVldWU7CisJc3RydWN0IHNuX2lycV9pbmZvICpnZXRfc25faXJxOworCXN0cnVjdCBzbl9pcnFfaW5mbyAqcHV0X3NuX2lycTsKKwlzdHJ1Y3Qgc25faXJxX2luZm8gKmFsZ29fc25faXJxOworCXN0cnVjdCBnZXRkbWEgZ2V0ZG1hOworCXN0cnVjdCBwdXRkbWEgcHV0ZG1hOworCXN0cnVjdCBhbGdvYmxvY2sgYWxnbzsKKwl1aW50NjRfdCBnc2NyX2FkZHI7CS8vIHBpbyBhZGRyCisJdWludDY0X3QgcmFtMF9hZGRyOwkvLyBwaW8gYWRkcgorCXVpbnQ2NF90IHJhbTFfYWRkcjsJLy8gcGlvIGFkZHIKKwl1aW50NjRfdCByYW0yX2FkZHI7CS8vIHBpbyBhZGRyCisJdWludDY0X3QgZGVidWdfYWRkcjsJLy8gcGlvIGFkZHIKKwlhdG9taWNfdCBkbWF3cml0ZV9kb25lOworCWF0b21pY190IGRtYXJlYWRfZG9uZTsKKwlhdG9taWNfdCBhbGdvX2RvbmU7CisJc3RydWN0IHNlbWFwaG9yZSBkbWF3cml0ZWxvY2s7CisJc3RydWN0IHNlbWFwaG9yZSBkbWFyZWFkbG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlIGFsZ29sb2NrOworfTsKKworZXh0ZXJuIGludCBtYmNzX29wZW4oc3RydWN0IGlub2RlICppcCwgc3RydWN0IGZpbGUgKmZwKTsKK2V4dGVybiBzc2l6ZV90IG1iY3Nfc3JhbV9yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCSAgICAgIGxvZmZfdCAqIG9mZik7CitleHRlcm4gc3NpemVfdCBtYmNzX3NyYW1fd3JpdGUoc3RydWN0IGZpbGUgKmZwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLAorCQkJICAgICAgIGxvZmZfdCAqIG9mZik7CitleHRlcm4gbG9mZl90IG1iY3Nfc3JhbV9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbHAsIGxvZmZfdCBvZmYsIGludCB3aGVuY2UpOworZXh0ZXJuIGludCBtYmNzX2dzY3JfbW1hcChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKworI2VuZGlmCQkJCS8vIF9fTUJDU19IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jCmluZGV4IGE5MWFlMjcuLjc2Mzg5M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAvKiBTZXQgdGhlIG1hc2sgdG8gYWxsLW9uZXMuIFRoaXMgYWxhcywgb25seSBzdXBwb3J0cyAzMiBpbnRlcnJ1cHRzLiAKICAgIFNvbWUgYXJjaGl0ZWN0dXJlcyBtYXkgbmVlZCBtb3JlLiAtLSBDaGFuZ2VkIHRvIExPTkcgdG8KICAgIHN1cHBvcnQgdXAgdG8gNjQgYml0cyBvbiA2NGJpdCBhcmNoaXRlY3R1cmVzLiAtLSBSRVcgMjAvMDYvOTkgKi8KLWxvbmcgcmlvX2lycW1hc2sgPSAtMTsKK3N0YXRpYyBsb25nIHJpb19pcnFtYXNrID0gLTE7CiAKIE1PRFVMRV9BVVRIT1IoIlJvZ2llciBXb2xmZiA8Ui5FLldvbGZmQGJpdHdpemFyZC5ubD4sIFBhdHJpY2sgdmFuIGRlIExhZ2V3ZWcgPHBhdHJpY2tAYml0d2l6YXJkLm5sPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJSSU8gZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYyBiL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCmluZGV4IDhlNjFiZTMuLmVkODY3ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogLyogVGltZSByZWFkL3dyaXRlICovCiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfcnRjX2dldHRpbWUoc3RydWN0IHJ0Y190aW1lICpydGNfdG0pCitzdGF0aWMgaW50IHMzYzI0MTBfcnRjX2dldHRpbWUoc3RydWN0IHJ0Y190aW1lICpydGNfdG0pCiB7CiAJdW5zaWduZWQgaW50IGhhdmVfcmV0cmllZCA9IDA7CiAKQEAgLTE1MSw2ICsxNTEsOCBAQAogCiAJcnRjX3RtLT50bV95ZWFyICs9IDEwMDsKIAlydGNfdG0tPnRtX21vbiAtPSAxOworCisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTcxLDcgKzE3Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfcnRjX2dldGFsYXJtKHN0cnVjdCBydGNfd2thbHJtICphbHJtKQorc3RhdGljIGludCBzM2MyNDEwX3J0Y19nZXRhbGFybShzdHJ1Y3QgcnRjX3drYWxybSAqYWxybSkKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUgKmFsbV90bSA9ICZhbHJtLT50aW1lOwogCXVuc2lnbmVkIGludCBhbG1fZW47CkBAIC0yMzEsNiArMjMzLDggQEAKIAl9CiAKIAkvKiB0b2RvIC0gc2V0IGFscm0tPmVuYWJsZWQgPyAqLworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgczNjMjQxMF9ydGNfc2V0YWxhcm0oc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc25zYy5jIGIvZHJpdmVycy9jaGFyL3Nuc2MuYwppbmRleCBmZmI5MTQzLi5lM2MwYjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc25zYy5jCisrKyBiL2RyaXZlcnMvY2hhci9zbnNjLmMKQEAgLTM3NCw2ICszNzQsNyBAQAogCXZvaWQgKnNhbGJ1ZjsKIAlzdHJ1Y3QgY2xhc3Nfc2ltcGxlICpzbnNjX2NsYXNzOwogCWRldl90IGZpcnN0X2RldiwgZGV2OworCW5hc2lkX3QgZXZlbnRfbmFzaWQgPSBpYTY0X3NuX2dldF9jb25zb2xlX25hc2lkKCk7CiAKIAlpZiAoYWxsb2NfY2hyZGV2X3JlZ2lvbigmZmlyc3RfZGV2LCAwLCBudW1pb25vZGVzLAogCQkJCVNZU0NUTF9CQVNFTkFNRSkgPCAwKSB7CkBAIC00NDEsNiArNDQyLDEzIEBACiAJCQlpYTY0X3NuX2lydHJfaW50cl9lbmFibGUoc2NkLT5zY2RfbmFzaWQsCiAJCQkJCQkgMCAvKmlnbm9yZWQgKi8gLAogCQkJCQkJIFNBTF9JUk9VVEVSX0lOVFJfUkVDVik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9uIHRoZSBjb25zb2xlIG5hc2lkLCBwcmVwYXJlIHRvIHJlY2VpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHN5c3RlbSBjb250cm9sbGVyIGVudmlyb25tZW50YWwgZXZlbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNjZC0+c2NkX25hc2lkID09IGV2ZW50X25hc2lkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjZHJ2X2V2ZW50X2luaXQoc2NkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc25zYy5oIGIvZHJpdmVycy9jaGFyL3Nuc2MuaAppbmRleCBjMjJjNmM1Li5hOWVmYzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc25zYy5oCisrKyBiL2RyaXZlcnMvY2hhci9zbnNjLmgKQEAgLTQ3LDQgKzQ3LDQ0IEBACiAJbmFzaWRfdCBzY2RfbmFzaWQ7CS8qIE5vZGUgb24gd2hpY2ggc3ViY2hhbm5lbHMgYXJlIG9wZW5lZC4gKi8KIH07CiAKKworLyogYXJndW1lbnQgdHlwZXMgKi8KKyNkZWZpbmUgSVJfQVJHX0lOVCAgICAgICAgICAgICAgMHgwMCAgICAvKiA0LWJ5dGUgaW50ZWdlciAoYmlnLWVuZGlhbikgICovCisjZGVmaW5lIElSX0FSR19BU0NJSSAgICAgICAgICAgIDB4MDEgICAgLyogbnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyAqLworI2RlZmluZSBJUl9BUkdfVU5LTk9XTiAgICAgICAgICAweDgwICAgIC8qIHVua25vd24gZGF0YSB0eXBlLiAgVGhlIGxvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDcgYml0cyB3aWxsIGNvbnRhaW4gdGhlIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBsZW5ndGguICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElSX0FSR19VTktOT1dOX0xFTkdUSF9NQVNLCTB4N2YKKworCisvKiBzeXN0ZW0gY29udHJvbGxlciBldmVudCBjb2RlcyAqLworI2RlZmluZSBFVl9DTEFTU19NQVNLCQkweGYwMDB1bAorI2RlZmluZSBFVl9TRVZFUklUWV9NQVNLCTB4MGYwMHVsCisjZGVmaW5lIEVWX0NPTVBPTkVOVF9NQVNLCTB4MDBmZnVsCisKKyNkZWZpbmUgRVZfQ0xBU1NfUE9XRVIJCTB4MTAwMHVsCisjZGVmaW5lIEVWX0NMQVNTX0ZBTgkJMHgyMDAwdWwKKyNkZWZpbmUgRVZfQ0xBU1NfVEVNUAkJMHgzMDAwdWwKKyNkZWZpbmUgRVZfQ0xBU1NfRU5WCQkweDQwMDB1bAorI2RlZmluZSBFVl9DTEFTU19URVNUX0ZBVUxUCTB4NTAwMHVsCisjZGVmaW5lIEVWX0NMQVNTX1RFU1RfV0FSTklORwkweDYwMDB1bAorI2RlZmluZSBFVl9DTEFTU19QV1JEX05PVElGWQkweDgwMDB1bAorCisjZGVmaW5lIEVWX1NFVkVSSVRZX1BPV0VSX1NUQUJMRQkweDAwMDB1bAorI2RlZmluZSBFVl9TRVZFUklUWV9QT1dFUl9MT1dfV0FSTklORwkweDAxMDB1bAorI2RlZmluZSBFVl9TRVZFUklUWV9QT1dFUl9ISUdIX1dBUk5JTkcJMHgwMjAwdWwKKyNkZWZpbmUgRVZfU0VWRVJJVFlfUE9XRVJfSElHSF9GQVVMVAkweDAzMDB1bAorI2RlZmluZSBFVl9TRVZFUklUWV9QT1dFUl9MT1dfRkFVTFQJMHgwNDAwdWwKKworI2RlZmluZSBFVl9TRVZFUklUWV9GQU5fU1RBQkxFCQkweDAwMDB1bAorI2RlZmluZSBFVl9TRVZFUklUWV9GQU5fV0FSTklORwkJMHgwMTAwdWwKKyNkZWZpbmUgRVZfU0VWRVJJVFlfRkFOX0ZBVUxUCQkweDAyMDB1bAorCisjZGVmaW5lIEVWX1NFVkVSSVRZX1RFTVBfU1RBQkxFCQkweDAwMDB1bAorI2RlZmluZSBFVl9TRVZFUklUWV9URU1QX0FEVklTT1JZCTB4MDEwMHVsCisjZGVmaW5lIEVWX1NFVkVSSVRZX1RFTVBfQ1JJVElDQUwJMHgwMjAwdWwKKyNkZWZpbmUgRVZfU0VWRVJJVFlfVEVNUF9GQVVMVAkJMHgwMzAwdWwKKwordm9pZCBzY2Rydl9ldmVudF9pbml0KHN0cnVjdCBzeXNjdGxfZGF0YV9zICopOworCiAjZW5kaWYgLyogX1NOX1NZU0NUTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Nuc2NfZXZlbnQuYyBiL2RyaXZlcnMvY2hhci9zbnNjX2V2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY5MmFmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9zbnNjX2V2ZW50LmMKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKiBTTiBQbGF0Zm9ybSBzeXN0ZW0gY29udHJvbGxlciBjb21tdW5pY2F0aW9uIHN1cHBvcnQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKy8qCisgKiBTeXN0ZW0gY29udHJvbGxlciBldmVudCBoYW5kbGVyCisgKgorICogVGhlc2Ugcm91dGluZXMgZGVhbCB3aXRoIGVudmlyb25tZW50YWwgZXZlbnRzIGFycml2aW5nIGZyb20gdGhlCisgKiBzeXN0ZW0gY29udHJvbGxlcnMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxhc20vc24vc25fc2FsLmg+CisjaW5jbHVkZSAic25zYy5oIgorCitzdGF0aWMgc3RydWN0IHN1YmNoX2RhdGFfcyAqZXZlbnRfc2Q7CisKK3ZvaWQgc2NkcnZfZXZlbnQodW5zaWduZWQgbG9uZyk7CitERUNMQVJFX1RBU0tMRVQoc25fc3lzY3RsX2V2ZW50LCBzY2Rydl9ldmVudCwgMCk7CisKKy8qCisgKiBzY2Rydl9ldmVudF9pbnRlcnJ1cHQKKyAqCisgKiBQdWxsIGluY29taW5nIGVudmlyb25tZW50YWwgZXZlbnRzIG9mZiB0aGUgcGh5c2ljYWwgbGluayB0byB0aGUKKyAqIHN5c3RlbSBjb250cm9sbGVyIGFuZCBwdXQgdGhlbSBpbiBhIHRlbXBvcmFyeSBob2xkaW5nIGFyZWEgaW4gU0FMLgorICogU2NoZWR1bGUgc2NkcnZfZXZlbnQoKSB0byBtb3ZlIHRoZW0gYWxvbmcgdG8gdGhlaXIgdWx0aW1hdGUKKyAqIGRlc3RpbmF0aW9uLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QKK3NjZHJ2X2V2ZW50X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpzdWJjaF9kYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc3ViY2hfZGF0YV9zICpzZCA9IHN1YmNoX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkLT5zZF9ybG9jaywgZmxhZ3MpOworCXN0YXR1cyA9IGlhNjRfc25faXJ0cl9pbnRyKHNkLT5zZF9uYXNpZCwgc2QtPnNkX3N1YmNoKTsKKworCWlmICgoc3RhdHVzID4gMCkgJiYgKHN0YXR1cyAmIFNBTF9JUk9VVEVSX0lOVFJfUkVDVikpIHsKKwkJdGFza2xldF9zY2hlZHVsZSgmc25fc3lzY3RsX2V2ZW50KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2QtPnNkX3Jsb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKy8qCisgKiBzY2Rydl9wYXJzZV9ldmVudAorICoKKyAqIEJyZWFrIGFuIGV2ZW50IChhcyByZWFkIGZyb20gU0FMKSBpbnRvIHVzZWZ1bCBwaWVjZXMgc28gd2UgY2FuIGRlY2lkZQorICogd2hhdCB0byBkbyB3aXRoIGl0LgorICovCitzdGF0aWMgaW50CitzY2Rydl9wYXJzZV9ldmVudChjaGFyICpldmVudCwgaW50ICpzcmMsIGludCAqY29kZSwgaW50ICplc3BfY29kZSwgY2hhciAqZGVzYykKK3sKKwljaGFyICpkZXNjX2VuZDsKKworCS8qIHJlY29yZCBldmVudCBzb3VyY2UgYWRkcmVzcyAqLworCSpzcmMgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKWV2ZW50KTsKKwlldmVudCArPSA0OyAJCQkvKiBtb3ZlIG9uIHRvIGV2ZW50IGNvZGUgKi8KKworCS8qIHJlY29yZCB0aGUgc3lzdGVtIGNvbnRyb2xsZXIncyBldmVudCBjb2RlICovCisJKmNvZGUgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKWV2ZW50KTsKKwlldmVudCArPSA0OwkJCS8qIG1vdmUgb24gdG8gZXZlbnQgYXJndW1lbnRzICovCisKKwkvKiBob3cgbWFueSBhcmd1bWVudHMgYXJlIGluIHRoZSBwYWNrZXQ/ICovCisJaWYgKCpldmVudCsrICE9IDIpIHsKKwkJLyogaWYgbm90IDIsIGdpdmUgdXAgKi8KKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHBhcnNlIG91dCB0aGUgRVNQIGNvZGUgKi8KKwlpZiAoKmV2ZW50KysgIT0gSVJfQVJHX0lOVCkgeworCQkvKiBub3QgYW4gaW50ZWdlciBhcmd1bWVudCwgc28gZ2l2ZSB1cCAqLworCQlyZXR1cm4gLTE7CisJfQorCSplc3BfY29kZSA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopZXZlbnQpOworCWV2ZW50ICs9IDQ7CisKKwkvKiBwYXJzZSBvdXQgdGhlIGV2ZW50IGRlc2NyaXB0aW9uICovCisJaWYgKCpldmVudCsrICE9IElSX0FSR19BU0NJSSkgeworCQkvKiBub3QgYW4gQVNDSUkgc3RyaW5nLCBzbyBnaXZlIHVwICovCisJCXJldHVybiAtMTsKKwl9CisJZXZlbnRbQ0hVTktTSVpFLTFdID0gJ1wwJzsJLyogZW5zdXJlIHRoaXMgc3RyaW5nIGVuZHMhICovCisJZXZlbnQgKz0gMjsgCQkJLyogc2tpcCBsZWFkaW5nIENSL0xGICovCisJZGVzY19lbmQgPSBkZXNjICsgc3ByaW50ZihkZXNjLCAiJXMiLCBldmVudCk7CisKKwkvKiBzdHJpcCB0cmFpbGluZyBDUi9MRiAoaWYgYW55KSAqLworCWZvciAoZGVzY19lbmQtLTsKKwkgICAgIChkZXNjX2VuZCAhPSBkZXNjKSAmJiAoKCpkZXNjX2VuZCA9PSAweGQpIHx8ICgqZGVzY19lbmQgPT0gMHhhKSk7CisJICAgICBkZXNjX2VuZC0tKSB7CisJCSpkZXNjX2VuZCA9ICdcMCc7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIHNjZHJ2X2V2ZW50X3NldmVyaXR5CisgKgorICogRmlndXJlIG91dCBob3cgdXJnZW50IGEgbWVzc2FnZSB3ZSBzaG91bGQgd3JpdGUgdG8gdGhlIGNvbnNvbGUvc3lzbG9nCisgKiB2aWEgcHJpbnRrLgorICovCitzdGF0aWMgY2hhciAqCitzY2Rydl9ldmVudF9zZXZlcml0eShpbnQgY29kZSkKK3sKKwlpbnQgZXZfY2xhc3MgPSAoY29kZSAmIEVWX0NMQVNTX01BU0spOworCWludCBldl9zZXZlcml0eSA9IChjb2RlICYgRVZfU0VWRVJJVFlfTUFTSyk7CisJY2hhciAqcGtfc2V2ZXJpdHkgPSBLRVJOX05PVElDRTsKKworCXN3aXRjaCAoZXZfY2xhc3MpIHsKKwljYXNlIEVWX0NMQVNTX1BPV0VSOgorCQlzd2l0Y2ggKGV2X3NldmVyaXR5KSB7CisJCWNhc2UgRVZfU0VWRVJJVFlfUE9XRVJfTE9XX1dBUk5JTkc6CisJCWNhc2UgRVZfU0VWRVJJVFlfUE9XRVJfSElHSF9XQVJOSU5HOgorCQkJcGtfc2V2ZXJpdHkgPSBLRVJOX1dBUk5JTkc7CisJCQlicmVhazsKKwkJY2FzZSBFVl9TRVZFUklUWV9QT1dFUl9ISUdIX0ZBVUxUOgorCQljYXNlIEVWX1NFVkVSSVRZX1BPV0VSX0xPV19GQVVMVDoKKwkJCXBrX3NldmVyaXR5ID0gS0VSTl9BTEVSVDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgRVZfQ0xBU1NfRkFOOgorCQlzd2l0Y2ggKGV2X3NldmVyaXR5KSB7CisJCWNhc2UgRVZfU0VWRVJJVFlfRkFOX1dBUk5JTkc6CisJCQlwa19zZXZlcml0eSA9IEtFUk5fV0FSTklORzsKKwkJCWJyZWFrOworCQljYXNlIEVWX1NFVkVSSVRZX0ZBTl9GQVVMVDoKKwkJCXBrX3NldmVyaXR5ID0gS0VSTl9DUklUOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFVl9DTEFTU19URU1QOgorCQlzd2l0Y2ggKGV2X3NldmVyaXR5KSB7CisJCWNhc2UgRVZfU0VWRVJJVFlfVEVNUF9BRFZJU09SWToKKwkJCXBrX3NldmVyaXR5ID0gS0VSTl9XQVJOSU5HOworCQkJYnJlYWs7CisJCWNhc2UgRVZfU0VWRVJJVFlfVEVNUF9DUklUSUNBTDoKKwkJCXBrX3NldmVyaXR5ID0gS0VSTl9DUklUOworCQkJYnJlYWs7CisJCWNhc2UgRVZfU0VWRVJJVFlfVEVNUF9GQVVMVDoKKwkJCXBrX3NldmVyaXR5ID0gS0VSTl9BTEVSVDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgRVZfQ0xBU1NfRU5WOgorCQlwa19zZXZlcml0eSA9IEtFUk5fQUxFUlQ7CisJCWJyZWFrOworCWNhc2UgRVZfQ0xBU1NfVEVTVF9GQVVMVDoKKwkJcGtfc2V2ZXJpdHkgPSBLRVJOX0FMRVJUOworCQlicmVhazsKKwljYXNlIEVWX0NMQVNTX1RFU1RfV0FSTklORzoKKwkJcGtfc2V2ZXJpdHkgPSBLRVJOX1dBUk5JTkc7CisJCWJyZWFrOworCWNhc2UgRVZfQ0xBU1NfUFdSRF9OT1RJRlk6CisJCXBrX3NldmVyaXR5ID0gS0VSTl9BTEVSVDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHBrX3NldmVyaXR5OworfQorCisKKy8qCisgKiBzY2Rydl9kaXNwYXRjaF9ldmVudAorICoKKyAqIERvIHRoZSByaWdodCB0aGluZyB3aXRoIGFuIGluY29taW5nIGV2ZW50LiAgVGhhdCdzIG9mdGVuIG5vdGhpbmcKKyAqIG1vcmUgdGhhbiBwcmludGluZyBpdCB0byB0aGUgc3lzdGVtIGxvZy4gIEZvciBwb3dlci1kb3duIG5vdGlmaWNhdGlvbnMKKyAqIHdlIHN0YXJ0IGEgZ3JhY2VmdWwgc2h1dGRvd24uCisgKi8KK3N0YXRpYyB2b2lkCitzY2Rydl9kaXNwYXRjaF9ldmVudChjaGFyICpldmVudCwgaW50IGxlbikKK3sKKwlpbnQgY29kZSwgZXNwX2NvZGUsIHNyYzsKKwljaGFyIGRlc2NbQ0hVTktTSVpFXTsKKwljaGFyICpzZXZlcml0eTsKKworCWlmIChzY2Rydl9wYXJzZV9ldmVudChldmVudCwgJnNyYywgJmNvZGUsICZlc3BfY29kZSwgZGVzYykgPCAwKSB7CisJCS8qIGlnbm9yZSB1bmludGVycHJldGlibGUgZXZlbnQgKi8KKwkJcmV0dXJuOworCX0KKworCS8qIGhvdyB1cmdlbnQgaXMgdGhlIG1lc3NhZ2U/ICovCisJc2V2ZXJpdHkgPSBzY2Rydl9ldmVudF9zZXZlcml0eShjb2RlKTsKKworCWlmICgoY29kZSAmIEVWX0NMQVNTX01BU0spID09IEVWX0NMQVNTX1BXUkRfTk9USUZZKSB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKworCQkvKiBnaXZlIGEgU0lHUFdSIHNpZ25hbCB0byBpbml0IHByb2MgKi8KKworCQkvKiBmaXJzdCBmaW5kIGluaXQncyB0YXNrICovCisJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJCWZvcl9lYWNoX3Byb2Nlc3MocCkgeworCQkJaWYgKHAtPnBpZCA9PSAxKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChwKSB7IC8qIHdlIGZvdW5kIGluaXQncyB0YXNrICovCisJCQlwcmludGsoS0VSTl9FTUVSRyAiUG93ZXIgb2ZmIGluZGljYXRpb24gcmVjZWl2ZWQuIEluaXRpYXRpbmcgcG93ZXIgZmFpbCBzZXF1ZW5jZS4uLlxuIik7CisJCQlmb3JjZV9zaWcoU0lHUFdSLCBwKTsKKwkJfSBlbHNlIHsgLyogZmFpbGVkIHRvIGZpbmQgaW5pdCdzIHRhc2sgLSBqdXN0IGdpdmUgbWVzc2FnZShzKSAqLworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGZpbmQgaW5pdCBwcm9jIHRvIGhhbmRsZSBwb3dlciBvZmYhXG4iKTsKKwkJCXByaW50aygiJXN8JCgweCV4KSVzXG4iLCBzZXZlcml0eSwgZXNwX2NvZGUsIGRlc2MpOworCQl9CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwl9IGVsc2UgeworCQkvKiBwcmludCB0byBzeXN0ZW0gbG9nICovCisJCXByaW50aygiJXN8JCgweCV4KSVzXG4iLCBzZXZlcml0eSwgZXNwX2NvZGUsIGRlc2MpOworCX0KK30KKworCisvKgorICogc2NkcnZfZXZlbnQKKyAqCisgKiBDYWxsZWQgYXMgYSB0YXNrbGV0IHdoZW4gYW4gZXZlbnQgYXJyaXZlcyBmcm9tIHRoZSBMMS4gIFJlYWQgdGhlIGV2ZW50CisgKiBmcm9tIHdoZXJlIGl0J3MgdGVtcG9yYXJpbHkgc3RvcmVkIGluIFNBTCBhbmQgY2FsbCBzY2Rydl9kaXNwYXRjaF9ldmVudCgpCisgKiB0byBzZW5kIGl0IG9uIGl0cyB3YXkuICBLZWVwIHRyeWluZyB0byByZWFkIGV2ZW50cyB1bnRpbCBTQUwgaW5kaWNhdGVzCisgKiB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4KKyAqLwordm9pZAorc2NkcnZfZXZlbnQodW5zaWduZWQgbG9uZyBkdW1teSkKK3sKKwlpbnQgc3RhdHVzOworCWludCBsZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3ViY2hfZGF0YV9zICpzZCA9IGV2ZW50X3NkOworCisJLyogYW55dGhpbmcgdG8gcmVhZD8gKi8KKwlsZW4gPSBDSFVOS1NJWkU7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkLT5zZF9ybG9jaywgZmxhZ3MpOworCXN0YXR1cyA9IGlhNjRfc25faXJ0cl9yZWN2KHNkLT5zZF9uYXNpZCwgc2QtPnNkX3N1YmNoLAorCQkJCSAgIHNkLT5zZF9yYiwgJmxlbik7CisKKwl3aGlsZSAoIShzdGF0dXMgPCAwKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZC0+c2RfcmxvY2ssIGZsYWdzKTsKKwkJc2NkcnZfZGlzcGF0Y2hfZXZlbnQoc2QtPnNkX3JiLCBsZW4pOworCQlsZW4gPSBDSFVOS1NJWkU7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzZC0+c2RfcmxvY2ssIGZsYWdzKTsKKwkJc3RhdHVzID0gaWE2NF9zbl9pcnRyX3JlY3Yoc2QtPnNkX25hc2lkLCBzZC0+c2Rfc3ViY2gsCisJCQkJCSAgIHNkLT5zZF9yYiwgJmxlbik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkLT5zZF9ybG9jaywgZmxhZ3MpOworfQorCisKKy8qCisgKiBzY2Rydl9ldmVudF9pbml0CisgKgorICogU2V0cyB1cCBhIHN5c3RlbSBjb250cm9sbGVyIHN1YmNoYW5uZWwgdG8gYmVnaW4gcmVjZWl2aW5nIGV2ZW50CisgKiBtZXNzYWdlcy4gVGhpcyBpcyBzb3J0IG9mIGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBzY2Rydl9vcGVuKCkKKyAqIGluIGRyaXZlcnMvY2hhci9zbl9zeXNjdGwuYy4KKyAqLwordm9pZAorc2NkcnZfZXZlbnRfaW5pdChzdHJ1Y3Qgc3lzY3RsX2RhdGFfcyAqc2NkKQoreworCWludCBydjsKKworCWV2ZW50X3NkID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBzdWJjaF9kYXRhX3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXZlbnRfc2QgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY291bGRuJ3QgYWxsb2NhdGUgc3ViY2hhbm5lbCBpbmZvIgorCQkgICAgICAgIiBmb3IgZXZlbnQgbW9uaXRvcmluZ1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGluaXRpYWxpemUgc3ViY2hfZGF0YV9zIGZpZWxkcyAqLworCW1lbXNldChldmVudF9zZCwgMCwgc2l6ZW9mIChzdHJ1Y3Qgc3ViY2hfZGF0YV9zKSk7CisJZXZlbnRfc2QtPnNkX25hc2lkID0gc2NkLT5zY2RfbmFzaWQ7CisJc3Bpbl9sb2NrX2luaXQoJmV2ZW50X3NkLT5zZF9ybG9jayk7CisKKwkvKiBhc2sgdGhlIHN5c3RlbSBjb250cm9sbGVycyB0byBzZW5kIGV2ZW50cyB0byB0aGlzIG5vZGUgKi8KKwlldmVudF9zZC0+c2Rfc3ViY2ggPSBpYTY0X3NuX3N5c2N0bF9ldmVudF9pbml0KHNjZC0+c2NkX25hc2lkKTsKKworCWlmIChldmVudF9zZC0+c2Rfc3ViY2ggPCAwKSB7CisJCWtmcmVlKGV2ZW50X3NkKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNvdWxkbid0IG9wZW4gZXZlbnQgc3ViY2hhbm5lbFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBob29rIGV2ZW50IHN1YmNoYW5uZWwgdXAgdG8gdGhlIHN5c3RlbSBjb250cm9sbGVyIGludGVycnVwdCAqLworCXJ2ID0gcmVxdWVzdF9pcnEoU0dJX1VBUlRfVkVDVE9SLCBzY2Rydl9ldmVudF9pbnRlcnJ1cHQsCisJCQkgU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsCisJCQkgInN5c3RlbSBjb250cm9sbGVyIGV2ZW50cyIsIGV2ZW50X3NkKTsKKwlpZiAocnYpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGlycSByZXF1ZXN0IGZhaWxlZCAoJWQpXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBydik7CisJCWlhNjRfc25faXJ0cl9jbG9zZShldmVudF9zZC0+c2RfbmFzaWQsIGV2ZW50X3NkLT5zZF9zdWJjaCk7CisJCWtmcmVlKGV2ZW50X3NkKTsKKwkJcmV0dXJuOworCX0KK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKaW5kZXggYzgxMjE5MS4uZmQwNDIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jCisrKyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwpAQCAtMTAyMSwxMSArMTAyMSwxMSBAQAogCQkJcmV0ID0gLUVJTzsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChjb3B5X3RvX3VzZXIoKHU4ICopYXJnLCAmdmFsOCwgc2l6ZW9mKHZhbDgpKSkKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmFsOCwgc2l6ZW9mKHZhbDgpKSkKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCWNhc2UgU09OWVBJX0lPQ1NGQU46Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsOCwgKHU4ICopYXJnLCBzaXplb2YodmFsOCkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsOCwgYXJncCwgc2l6ZW9mKHZhbDgpKSkgewogCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMDM4LDcgKzEwMzgsNyBAQAogCQkJcmV0ID0gLUVJTzsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChjb3B5X3RvX3VzZXIoKHU4ICopYXJnLCAmdmFsOCwgc2l6ZW9mKHZhbDgpKSkKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmFsOCwgc2l6ZW9mKHZhbDgpKSkKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKaW5kZXggYzc4OWQ1Yy4uNTBlMGI2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCisrKyBiL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYwpAQCAtMTk4NywxMCArMTk4Nyw5IEBACiAKIAlmdW5jX2VudGVyKCk7CiAJLyoKLQllcnJvciA9IHZlcmlmeV9hcmVhKFZFUklGWV9SRUFELCAodm9pZCAqKSBuZXdpbmZvLCBzaXplb2YodG1wKSk7Ci0JaWYgKGVycm9yKSB7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICh2b2lkICopIG5ld2luZm8sIHNpemVvZih0bXApKSkgewogCQlmdW5jX2V4aXQoKTsKLQkJcmV0dXJuIGVycm9yOworCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAJKi8KIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgbmV3aW5mbywgc2l6ZW9mKHRtcCkpKSB7CkBAIC0yMDQ2LDE0ICsyMDQ1LDEyIEBACiB7CiAJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgdG1wOwogCXN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwID0gcG9ydF9Cb2FyZChwb3J0KTsKLQkvLwlpbnQgZXJyb3I7CiAJCiAJZnVuY19lbnRlcigpOwogCiAJLyoKLQllcnJvciA9IHZlcmlmeV9hcmVhKFZFUklGWV9XUklURSwgKHZvaWQgKikgcmV0aW5mbywgc2l6ZW9mKHRtcCkpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgKHZvaWQgKikgcmV0aW5mbywgc2l6ZW9mKHRtcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKIAkqLwogCiAJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKaW5kZXggZGUxNjY2MC4uYjg4OTlmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGxfYXRvbChjaGFyICpzdHIpOwogCi1pbnQJCXN0bF9pbml0KHZvaWQpOworc3RhdGljIGludAlzdGxfaW5pdCh2b2lkKTsKIHN0YXRpYyBpbnQJc3RsX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOwogc3RhdGljIHZvaWQJc3RsX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyBpbnQJc3RsX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKQEAgLTMwNjMsNyArMzA2Myw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotaW50IF9faW5pdCBzdGxfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc3RsX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIAlwcmludGsoS0VSTl9JTkZPICIlczogdmVyc2lvbiAlc1xuIiwgc3RsX2RydnRpdGxlLCBzdGxfZHJ2dmVyc2lvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwppbmRleCBjYTM2MDg3Li44NzIzNTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCQlyZXR1cm4gLUVOT0RBVEE7CiAJaWYgKGNvdW50ID4gYnVmc2l6KSB7CiAJCWRldl9lcnIoJmNoaXAtPnBjaV9kZXYtPmRldiwKLQkJCSJpbnZhbGlkIGNvdW50IHZhbHVlICV4ICV4IFxuIiwgY291bnQsIGJ1ZnNpeik7CisJCQkiaW52YWxpZCBjb3VudCB2YWx1ZSAleCAlenggXG4iLCBjb3VudCwgYnVmc2l6KTsKIAkJcmV0dXJuIC1FMkJJRzsKIAl9CiAKQEAgLTE1MSw3ICsxNTEsNyBAQAogCiAJaWYgKChsZW4gPSBjaGlwLT52ZW5kb3ItPnNlbmQoY2hpcCwgKHU4ICopIGJ1ZiwgY291bnQpKSA8IDApIHsKIAkJZGV2X2VycigmY2hpcC0+cGNpX2Rldi0+ZGV2LAotCQkJInRwbV90cmFuc21pdDogdHBtX3NlbmQ6IGVycm9yICVkXG4iLCBsZW4pOworCQkJInRwbV90cmFuc21pdDogdHBtX3NlbmQ6IGVycm9yICV6ZFxuIiwgbGVuKTsKIAkJcmV0dXJuIGxlbjsKIAl9CiAKQEAgLTE4OCw3ICsxODgsNyBAQAogCWxlbiA9IGNoaXAtPnZlbmRvci0+cmVjdihjaGlwLCAodTggKikgYnVmLCBidWZzaXopOwogCWlmIChsZW4gPCAwKQogCQlkZXZfZXJyKCZjaGlwLT5wY2lfZGV2LT5kZXYsCi0JCQkidHBtX3RyYW5zbWl0OiB0cG1fcmVjdjogZXJyb3IgJWRcbiIsIGxlbik7CisJCQkidHBtX3RyYW5zbWl0OiB0cG1fcmVjdjogZXJyb3IgJXpkXG4iLCBsZW4pOwogCXVwKCZjaGlwLT50cG1fbXV0ZXgpOwogCXJldHVybiBsZW47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggMDZlNWEzZi4uMjZlNWUxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAKIEVYUE9SVF9TWU1CT0wodHR5X25hbWUpOwogCi1pbmxpbmUgaW50IHR0eV9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IHR0eV9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICAgY29uc3QgY2hhciAqcm91dGluZSkKIHsKICNpZmRlZiBUVFlfUEFSQU5PSUFfQ0hFQ0sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKaW5kZXggNWQzODZmNC4uODk3MTQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTY0MSw3ICs2NDIsNyBAQAogCQlleHRlcm4gaW50IHNwYXducGlkLCBzcGF3bnNpZzsKIAkJaWYgKCFwZXJtIHx8ICFjYXBhYmxlKENBUF9LSUxMKSkKIAkJICByZXR1cm4gLUVQRVJNOwotCQlpZiAoYXJnIDwgMSB8fCBhcmcgPiBfTlNJRyB8fCBhcmcgPT0gU0lHS0lMTCkKKwkJaWYgKCF2YWxpZF9zaWduYWwoYXJnKSB8fCBhcmcgPCAxIHx8IGFyZyA9PSBTSUdLSUxMKQogCQkgIHJldHVybiAtRUlOVkFMOwogCQlzcGF3bnBpZCA9IGN1cnJlbnQtPnBpZDsKIAkJc3Bhd25zaWcgPSBhcmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwppbmRleCBiMzAwMDFmLi44ZTU2MTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCX0KIAlpZiAoKHZhbCA9PSBDUFVGUkVRX1BSRUNIQU5HRSAgJiYgY2ktPm9sZCA8IGNpLT5uZXcpIHx8CiAJICAgICh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFICYmIGNpLT5vbGQgPiBjaS0+bmV3KSB8fAotCSAgICAodmFsID09IENQVUZSRVFfUkVTVU1FQ0hBTkdFKSkgeworCSAgICAodmFsID09IENQVUZSRVFfUkVTVU1FQ0hBTkdFIHx8IHZhbCA9PSBDUFVGUkVRX1NVU1BFTkRDSEFOR0UpKSB7CiAJCWxvb3BzX3Blcl9qaWZmeSA9IGNwdWZyZXFfc2NhbGUobF9wX2pfcmVmLCBsX3Bfal9yZWZfZnJlcSwgY2ktPm5ldyk7CiAJCWRwcmludGsoInNjYWxpbmcgbG9vcHNfcGVyX2ppZmZ5IHRvICVsdSBmb3IgZnJlcXVlbmN5ICV1IGtIelxuIiwgbG9vcHNfcGVyX2ppZmZ5LCBjaS0+bmV3KTsKIAl9CkBAIC04NjYsMTEgKzg2Niw5MCBAQAogCiAKIC8qKgorICoJY3B1ZnJlcV9zdXNwZW5kIC0gbGV0IHRoZSBsb3cgbGV2ZWwgZHJpdmVyIHByZXBhcmUgZm9yIHN1c3BlbmQKKyAqLworCitzdGF0aWMgaW50IGNwdWZyZXFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldiwgdTMyIHN0YXRlKQoreworCWludCBjcHUgPSBzeXNkZXYtPmlkOworCXVuc2lnbmVkIGludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBjdXJfZnJlcSA9IDA7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjcHVfcG9saWN5OworCisJZHByaW50aygicmVzdW1pbmcgY3B1ICV1XG4iLCBjcHUpOworCisJaWYgKCFjcHVfb25saW5lKGNwdSkpCisJCXJldHVybiAwOworCisJLyogd2UgbWF5IGJlIGxheCBoZXJlIGFzIGludGVycnVwdHMgYXJlIG9mZi4gTm9uZXRoZWxlc3MKKwkgKiB3ZSBuZWVkIHRvIGdyYWIgdGhlIGNvcnJlY3QgY3B1IHBvbGljeSwgYXMgdG8gY2hlY2sKKwkgKiB3aGV0aGVyIHdlIHJlYWxseSBydW4gb24gdGhpcyBDUFUuCisJICovCisKKwljcHVfcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGNwdSk7CisJaWYgKCFjcHVfcG9saWN5KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIG9ubHkgaGFuZGxlIGVhY2ggQ1BVIGdyb3VwIG9uY2UgKi8KKwlpZiAodW5saWtlbHkoY3B1X3BvbGljeS0+Y3B1ICE9IGNwdSkpIHsKKwkJY3B1ZnJlcV9jcHVfcHV0KGNwdV9wb2xpY3kpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY3B1ZnJlcV9kcml2ZXItPnN1c3BlbmQpIHsKKwkJcmV0ID0gY3B1ZnJlcV9kcml2ZXItPnN1c3BlbmQoY3B1X3BvbGljeSwgc3RhdGUpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IHN1c3BlbmQgZmFpbGVkIGluIC0+c3VzcGVuZCAiCisJCQkJCSJzdGVwIG9uIENQVSAldVxuIiwgY3B1X3BvbGljeS0+Y3B1KTsKKwkJCWNwdWZyZXFfY3B1X3B1dChjcHVfcG9saWN5KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKworCWlmIChjcHVmcmVxX2RyaXZlci0+ZmxhZ3MgJiBDUFVGUkVRX0NPTlNUX0xPT1BTKQorCQlnb3RvIG91dDsKKworCWlmIChjcHVmcmVxX2RyaXZlci0+Z2V0KQorCQljdXJfZnJlcSA9IGNwdWZyZXFfZHJpdmVyLT5nZXQoY3B1X3BvbGljeS0+Y3B1KTsKKworCWlmICghY3VyX2ZyZXEgfHwgIWNwdV9wb2xpY3ktPmN1cikgeworCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IHN1c3BlbmQgZmFpbGVkIHRvIGFzc2VydCBjdXJyZW50ICIKKwkJICAgICAgICJmcmVxdWVuY3kgaXMgd2hhdCB0aW1pbmcgY29yZSB0aGlua3MgaXQgaXMuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHVubGlrZWx5KGN1cl9mcmVxICE9IGNwdV9wb2xpY3ktPmN1cikpIHsKKwkJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CisKKwkJaWYgKCEoY3B1ZnJlcV9kcml2ZXItPmZsYWdzICYgQ1BVRlJFUV9QTV9OT19XQVJOKSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICJXYXJuaW5nOiBDUFUgZnJlcXVlbmN5IGlzICV1LCAiCisJCQkgICAgICAgImNwdWZyZXEgYXNzdW1lZCAldSBrSHouXG4iLAorCQkJICAgICAgIGN1cl9mcmVxLCBjcHVfcG9saWN5LT5jdXIpOworCisJCWZyZXFzLmNwdSA9IGNwdTsKKwkJZnJlcXMub2xkID0gY3B1X3BvbGljeS0+Y3VyOworCQlmcmVxcy5uZXcgPSBjdXJfZnJlcTsKKworCQlub3RpZmllcl9jYWxsX2NoYWluKCZjcHVmcmVxX3RyYW5zaXRpb25fbm90aWZpZXJfbGlzdCwKKwkJCQkgICAgQ1BVRlJFUV9TVVNQRU5EQ0hBTkdFLCAmZnJlcXMpOworCQlhZGp1c3RfamlmZmllcyhDUFVGUkVRX1NVU1BFTkRDSEFOR0UsICZmcmVxcyk7CisKKwkJY3B1X3BvbGljeS0+Y3VyID0gY3VyX2ZyZXE7CisJfQorCisgb3V0OgorCWNwdWZyZXFfY3B1X3B1dChjcHVfcG9saWN5KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKgljcHVmcmVxX3Jlc3VtZSAtICByZXN0b3JlIHByb3BlciBDUFUgZnJlcXVlbmN5IGhhbmRsaW5nIGFmdGVyIHJlc3VtZQogICoKICAqCTEuKSByZXN1bWUgQ1BVZnJlcSBoYXJkd2FyZSBzdXBwb3J0IChjcHVmcmVxX2RyaXZlci0+cmVzdW1lKCkpCiAgKgkyLikgaWYgLT50YXJnZXQgYW5kICFDUFVGUkVRX0NPTlNUX0xPT1BTOiB2ZXJpZnkgd2UncmUgaW4gc3luYwotICoJMy4pIHNjaGVkdWxlIGNhbGwgY3B1ZnJlcV91cGRhdGVfcG9saWN5KCkgQVNBUCBhcyBpbnRlcnJ1cHRzIGFyZSByZXN0b3JlZC4KKyAqCTMuKSBzY2hlZHVsZSBjYWxsIGNwdWZyZXFfdXBkYXRlX3BvbGljeSgpIEFTQVAgYXMgaW50ZXJydXB0cyBhcmUKKyAqCSAgICByZXN0b3JlZC4KICAqLwogc3RhdGljIGludCBjcHVmcmVxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldikKIHsKQEAgLTkxNSwyMSArOTk0LDI2IEBACiAJCQljdXJfZnJlcSA9IGNwdWZyZXFfZHJpdmVyLT5nZXQoY3B1X3BvbGljeS0+Y3B1KTsKIAogCQlpZiAoIWN1cl9mcmVxIHx8ICFjcHVfcG9saWN5LT5jdXIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogcmVzdW1lIGZhaWxlZCB0byBhc3NlcnQgY3VycmVudCBmcmVxdWVuY3kgaXMgd2hhdCB0aW1pbmcgY29yZSB0aGlua3MgaXQgaXMuXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogcmVzdW1lIGZhaWxlZCB0byBhc3NlcnQgIgorCQkJCQkiY3VycmVudCBmcmVxdWVuY3kgaXMgd2hhdCB0aW1pbmcgY29yZSAiCisJCQkJCSJ0aGlua3MgaXQgaXMuXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKIAkJaWYgKHVubGlrZWx5KGN1cl9mcmVxICE9IGNwdV9wb2xpY3ktPmN1cikpIHsKIAkJCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiBDUFUgZnJlcXVlbmN5IGlzICV1LCAiCi0JCQkgICAgICAgImNwdWZyZXEgYXNzdW1lZCAldSBrSHouXG4iLCBjdXJfZnJlcSwgY3B1X3BvbGljeS0+Y3VyKTsKKwkJCWlmICghKGNwdWZyZXFfZHJpdmVyLT5mbGFncyAmIENQVUZSRVFfUE1fTk9fV0FSTikpCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogQ1BVIGZyZXF1ZW5jeSIKKwkJCQkgICAgICAgImlzICV1LCBjcHVmcmVxIGFzc3VtZWQgJXUga0h6LlxuIiwKKwkJCQkgICAgICAgY3VyX2ZyZXEsIGNwdV9wb2xpY3ktPmN1cik7CiAKIAkJCWZyZXFzLmNwdSA9IGNwdTsKIAkJCWZyZXFzLm9sZCA9IGNwdV9wb2xpY3ktPmN1cjsKIAkJCWZyZXFzLm5ldyA9IGN1cl9mcmVxOwogCi0JCQlub3RpZmllcl9jYWxsX2NoYWluKCZjcHVmcmVxX3RyYW5zaXRpb25fbm90aWZpZXJfbGlzdCwgQ1BVRlJFUV9SRVNVTUVDSEFOR0UsICZmcmVxcyk7CisJCQlub3RpZmllcl9jYWxsX2NoYWluKCZjcHVmcmVxX3RyYW5zaXRpb25fbm90aWZpZXJfbGlzdCwKKwkJCQkJQ1BVRlJFUV9SRVNVTUVDSEFOR0UsICZmcmVxcyk7CiAJCQlhZGp1c3RfamlmZmllcyhDUFVGUkVRX1JFU1VNRUNIQU5HRSwgJmZyZXFzKTsKIAogCQkJY3B1X3BvbGljeS0+Y3VyID0gY3VyX2ZyZXE7CkBAIC05NDUsNiArMTAyOSw3IEBACiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgY3B1ZnJlcV9zeXNkZXZfZHJpdmVyID0gewogCS5hZGQJCT0gY3B1ZnJlcV9hZGRfZGV2LAogCS5yZW1vdmUJCT0gY3B1ZnJlcV9yZW1vdmVfZGV2LAorCS5zdXNwZW5kCT0gY3B1ZnJlcV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gY3B1ZnJlcV9yZXN1bWUsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IGEyODI3ZTQuLmEwMDE4ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0yMzcsNyArMjM3LDcgQEAKIAogY29uZmlnIEkyQ19NUEMKIAl0cmlzdGF0ZSAiTVBDMTA3LzgyNHgvODV4eC81Mnh4IgotCWRlcGVuZHMgb24gSTJDICYmIFBQQworCWRlcGVuZHMgb24gSTJDICYmIFBQQzMyCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlCiAJICBidWlsdC1pbiBJMkMgaW50ZXJmYWNlIG9uIHRoZSBNUEMxMDcvVHNpMTA3L01QQzgyNDAvTVBDODI0NSBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCmluZGV4IDc1YjhkODYuLjZmMzM0OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwpAQCAtNTUsNyArNTUsNyBAQAogI2RlZmluZSBDU1JfUlhBSyAweDAxCiAKIHN0cnVjdCBtcGNfaTJjIHsKLQljaGFyICpiYXNlOworCXZvaWQgX19pb21lbSAqYmFzZTsKIAl1MzIgaW50ZXJydXB0OwogCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOwogCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwOwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAKICAgICAgIGZhaWxfYWRkOgogCWlmIChpMmMtPmlycSAhPSAwKQotCQlmcmVlX2lycShpMmMtPmlycSwgMCk7CisJCWZyZWVfaXJxKGkyYy0+aXJxLCBOVUxMKTsKICAgICAgIGZhaWxfaXJxOgogCWlvdW5tYXAoaTJjLT5iYXNlKTsKICAgICAgIGZhaWxfbWFwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYyBiL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMKaW5kZXggOWQ3MGJhNS4uMTZiM2UyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jCkBAIC03MjYsNyArNzI2LDcgQEAKICovCiAKIC8qIENoaXAgZGV0ZWN0aW9uIGFuZCBnZW5lcmFsIGNvbmZpZyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW5pdF9jaGlwc2V0X3NpczU1MTMgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdCBpbml0X2NoaXBzZXRfc2lzNTUxMyAoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqaG9zdDsKIAlpbnQgaSA9IDA7CkBAIC04NzksNyArODc5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgYXRhNjZfc2lzNTUxMyAoaWRlX2h3aWZfdCAqaHdpZikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IGF0YTY2X3NpczU1MTMgKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJdTggYXRhNjYgPSAwOwogCkBAIC04OTcsNyArODk3LDcgQEAKICAgICAgICAgcmV0dXJuIGF0YTY2OwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9od2lmX3NpczU1MTMgKGlkZV9od2lmX3QgKmh3aWYpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX3NpczU1MTMgKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJaHdpZi0+YXV0b2RtYSA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMgYi9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCmluZGV4IDZkYzI3M2EuLjU2OWYxNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKKysrIGIvZHJpdmVycy9pZGUvcHBjL3BtYWMuYwpAQCAtMTIwNCw2ICsxMjA0LDggQEAKIAl9CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQkxJTksgKi8KIAorCWRpc2FibGVfaXJxKHBtaWYtPmlycSk7CisKIAkvKiBUaGUgbWVkaWEgYmF5IHdpbGwgaGFuZGxlIGl0c2VsZiBqdXN0IGZpbmUgKi8KIAlpZiAocG1pZi0+bWVkaWFiYXkpCiAJCXJldHVybiAwOwpAQCAtMTIzNiw3ICsxMjM4LDYgQEAKIAkJcHBjX21kLmZlYXR1cmVfY2FsbChQTUFDX0ZUUl9JREVfRU5BQkxFLCBwbWlmLT5ub2RlLCBwbWlmLT5hYXBsX2J1c19pZCwgMSk7CiAJCW1zbGVlcCgxMCk7CiAJCXBwY19tZC5mZWF0dXJlX2NhbGwoUE1BQ19GVFJfSURFX1JFU0VULCBwbWlmLT5ub2RlLCBwbWlmLT5hYXBsX2J1c19pZCwgMCk7Ci0JCW1zbGVlcChqaWZmaWVzX3RvX21zZWNzKElERV9XQUtFVVBfREVMQVkpKTsKIAogCQkvKiBLYXVhaSBoYXMgaXQgZGlmZmVyZW50ICovCiAJCWlmIChwbWlmLT5rYXVhaV9mY3IpIHsKQEAgLTEyNDQsMTEgKzEyNDUsMTUgQEAKIAkJCWZjciB8PSBLQVVBSV9GQ1JfVUFUQV9SRVNFVF9OIHwgS0FVQUlfRkNSX1VBVEFfRU5BQkxFOwogCQkJd3JpdGVsKGZjciwgcG1pZi0+a2F1YWlfZmNyKTsKIAkJfQorCisJCW1zbGVlcChqaWZmaWVzX3RvX21zZWNzKElERV9XQUtFVVBfREVMQVkpKTsKIAl9CiAKIAkvKiBTYW5pdGl6ZSBkcml2ZSB0aW1pbmdzICovCiAJc2FuaXRpemVfdGltaW5ncyhwbWlmKTsKIAorCWVuYWJsZV9pcnEocG1pZi0+aXJxKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMKaW5kZXggOTdmZjM2NC4uNmNiMGI1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYwpAQCAtNTM5LDEwICs1MzksOCBAQAogCWluaXRpYWxpemVfZG1hX3RybV9jdHgoJm9oY2ktPmF0X3JlcV9jb250ZXh0KTsKIAlpbml0aWFsaXplX2RtYV90cm1fY3R4KCZvaGNpLT5hdF9yZXNwX2NvbnRleHQpOwogCQotCS8qIEluaXRpYWxpemUgSVIgTGVnYWN5IERNQSAqLworCS8qIEluaXRpYWxpemUgSVIgTGVnYWN5IERNQSBjaGFubmVsIG1hc2sgKi8KIAlvaGNpLT5pcl9sZWdhY3lfY2hhbm5lbHMgPSAwOwotCWluaXRpYWxpemVfZG1hX3Jjdl9jdHgoJm9oY2ktPmlyX2xlZ2FjeV9jb250ZXh0LCAxKTsKLQlEQkdNU0coIklTTyByZWNlaXZlIGxlZ2FjeSBjb250ZXh0IGFjdGl2YXRlZCIpOwogCiAJLyoKIAkgKiBBY2NlcHQgQVQgcmVxdWVzdHMgZnJvbSBhbGwgbm9kZXMuIFRoaXMgcHJvYmFibHkKQEAgLTEwMzIsNiArMTAzMCw4IEBACiAJY2FzZSBJU09fTElTVEVOX0NIQU5ORUw6CiAgICAgICAgIHsKIAkJdTY0IG1hc2s7CisJCXN0cnVjdCBkbWFfcmN2X2N0eCAqZCA9ICZvaGNpLT5pcl9sZWdhY3lfY29udGV4dDsKKwkJaW50IGlyX2xlZ2FjeV9hY3RpdmU7CiAKIAkJaWYgKGFyZzwwIHx8IGFyZz42MykgewogCQkJUFJJTlQoS0VSTl9FUlIsCkBAIC0xMDUyLDkgKzEwNTIsMzcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAKKwkJaXJfbGVnYWN5X2FjdGl2ZSA9IG9oY2ktPmlyX2xlZ2FjeV9jaGFubmVsczsKKwogCQlvaGNpLT5JU09fY2hhbm5lbF91c2FnZSB8PSBtYXNrOwogCQlvaGNpLT5pcl9sZWdhY3lfY2hhbm5lbHMgfD0gbWFzazsKIAorICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oY2ktPklSX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCisJCWlmICghaXJfbGVnYWN5X2FjdGl2ZSkgeworCQkJaWYgKG9oY2kxMzk0X3JlZ2lzdGVyX2lzb190YXNrbGV0KG9oY2ksCisJCQkJCSAgJm9oY2ktPmlyX2xlZ2FjeV90YXNrbGV0KSA8IDApIHsKKwkJCQlQUklOVChLRVJOX0VSUiwgIk5vIElSIERNQSBjb250ZXh0IGF2YWlsYWJsZSIpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisKKwkJCS8qIHRoZSBJUiBjb250ZXh0IGNhbiBiZSBhc3NpZ25lZCB0byBhbnkgRE1BIGNvbnRleHQKKwkJCSAqIGJ5IG9oY2kxMzk0X3JlZ2lzdGVyX2lzb190YXNrbGV0ICovCisJCQlkLT5jdHggPSBvaGNpLT5pcl9sZWdhY3lfdGFza2xldC5jb250ZXh0OworCQkJZC0+Y3RybFNldCA9IE9IQ0kxMzk0X0lzb1JjdkNvbnRleHRDb250cm9sU2V0ICsKKwkJCQkzMipkLT5jdHg7CisJCQlkLT5jdHJsQ2xlYXIgPSBPSENJMTM5NF9Jc29SY3ZDb250ZXh0Q29udHJvbENsZWFyICsKKwkJCQkzMipkLT5jdHg7CisJCQlkLT5jbWRQdHIgPSBPSENJMTM5NF9Jc29SY3ZDb21tYW5kUHRyICsgMzIqZC0+Y3R4OworCQkJZC0+Y3R4dE1hdGNoID0gT0hDSTEzOTRfSXNvUmN2Q29udGV4dE1hdGNoICsgMzIqZC0+Y3R4OworCisJCQlpbml0aWFsaXplX2RtYV9yY3ZfY3R4KCZvaGNpLT5pcl9sZWdhY3lfY29udGV4dCwgMSk7CisKKwkJCVBSSU5UKEtFUk5fRVJSLCAiSVIgbGVnYWN5IGFjdGl2YXRlZCIpOworCQl9CisKKyAgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmb2hjaS0+SVJfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisKIAkJaWYgKGFyZz4zMSkKIAkJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9JUk11bHRpQ2hhbk1hc2tIaVNldCwKIAkJCQkgIDE8PChhcmctMzIpKTsKQEAgLTExMDEsNiArMTEyOSwxMiBAQAogCiAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+SVJfY2hhbm5lbF9sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICAgICAgREJHTVNHKCJMaXN0ZW5pbmcgZGlzYWJsZWQgb24gY2hhbm5lbCAlZCIsIGFyZyk7CisKKwkJaWYgKG9oY2ktPmlyX2xlZ2FjeV9jaGFubmVscyA9PSAwKSB7CisJCQlzdG9wX2RtYV9yY3ZfY3R4KCZvaGNpLT5pcl9sZWdhY3lfY29udGV4dCk7CisJCQlEQkdNU0coIklTTyBsZWdhY3kgcmVjZWl2ZSBjb250ZXh0IHN0b3BwZWQiKTsKKwkJfQorCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAlkZWZhdWx0OgpAQCAtMTI3MCw4ICsxMzA0LDEwIEBACiAJCQkJICAgICAgICAgICAgICAgICAgICAgICBPSENJX0lTT19SRUNFSVZFLAogCQkJCSAgb2hjaV9pc29fcmVjdl90YXNrLCAodW5zaWduZWQgbG9uZykgaXNvKTsKIAotCWlmIChvaGNpMTM5NF9yZWdpc3Rlcl9pc29fdGFza2xldChyZWN2LT5vaGNpLCAmcmVjdi0+dGFzaykgPCAwKQorCWlmIChvaGNpMTM5NF9yZWdpc3Rlcl9pc29fdGFza2xldChyZWN2LT5vaGNpLCAmcmVjdi0+dGFzaykgPCAwKSB7CisJCXJldCA9IC1FQlVTWTsKIAkJZ290byBlcnI7CisJfQogCiAJcmVjdi0+dGFza19hY3RpdmUgPSAxOwogCkBAIC0xODk2LDggKzE5MzIsMTAgQEAKIAlvaGNpMTM5NF9pbml0X2lzb190YXNrbGV0KCZ4bWl0LT50YXNrLCBPSENJX0lTT19UUkFOU01JVCwKIAkJCQkgIG9oY2lfaXNvX3htaXRfdGFzaywgKHVuc2lnbmVkIGxvbmcpIGlzbyk7CiAKLQlpZiAob2hjaTEzOTRfcmVnaXN0ZXJfaXNvX3Rhc2tsZXQoeG1pdC0+b2hjaSwgJnhtaXQtPnRhc2spIDwgMCkKKwlpZiAob2hjaTEzOTRfcmVnaXN0ZXJfaXNvX3Rhc2tsZXQoeG1pdC0+b2hjaSwgJnhtaXQtPnRhc2spIDwgMCkgeworCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZXJyOworCX0KIAogCXhtaXQtPnRhc2tfYWN0aXZlID0gMTsKIApAQCAtMjY5MSw3ICsyNzI5LDcgQEAKIAkJCQkoY29uZF9sZTMyX3RvX2NwdShkLT5zcGJbbGVuZ3RoLzQtMV0sIG9oY2ktPm5vX3N3YXBfaW5jb21pbmcpPj4xNikmMHgxZiwKIAkJCQkoY29uZF9sZTMyX3RvX2NwdShkLT5zcGJbbGVuZ3RoLzQtMV0sIG9oY2ktPm5vX3N3YXBfaW5jb21pbmcpPj4yMSkmMHgzLAogCQkJCXRjb2RlLCBsZW5ndGgsIGQtPmN0eCwKLQkJCQkoY29uZF9sZTMyX3RvX2NwdShkLT5zcGJbbGVuZ3RoLzQtMV0sIG9oY2ktPm5vX3N3YXBfaW5jb21pbmcpPj4xMCkmMHgzZik7CisJCQkJKGNvbmRfbGUzMl90b19jcHUoZC0+c3BiWzBdLCBvaGNpLT5ub19zd2FwX2luY29taW5nKT4+MTApJjB4M2YpOwogCiAJCQlhY2sgPSAoKChjb25kX2xlMzJfdG9fY3B1KGQtPnNwYltsZW5ndGgvNC0xXSwgb2hjaS0+bm9fc3dhcF9pbmNvbWluZyk+PjE2KSYweDFmKQogCQkJCT09IDB4MTEpID8gMSA6IDA7CkBAIC0yNzU0LDcgKzI3OTIsNyBAQAogCQkJCSAgICAgICBkLT5jdHgpOwogCQkJZWxzZQogCQkJCURCR01TRygiUGFja2V0IHNlbnQgdG8gbm9kZSAlZCB0Y29kZT0weCVYIHRMYWJlbD0iCi0JCQkJICAgICAgICIweCUwMlggYWNrPTB4JVggc3BkPSVkIGRhdGFMZW5ndGg9JWQgY3R4PSVkIiwKKwkJCQkgICAgICAgIiVkIGFjaz0weCVYIHNwZD0lZCBkYXRhTGVuZ3RoPSVkIGN0eD0lZCIsCiAJCQkJICAgICAgIChsZTMyX3RvX2NwdShkLT5wcmdfY3B1W2QtPnNlbnRfaW5kXS0+ZGF0YVsxXSk+PjE2KSYweDNmLAogCQkJCSAgICAgICAobGUzMl90b19jcHUoZC0+cHJnX2NwdVtkLT5zZW50X2luZF0tPmRhdGFbMF0pPj40KSYweGYsCiAJCQkJICAgICAgIChsZTMyX3RvX2NwdShkLT5wcmdfY3B1W2QtPnNlbnRfaW5kXS0+ZGF0YVswXSk+PjEwKSYweDNmLApAQCAtMjc2Myw3ICsyODAxLDcgQEAKIAkJCQkgICAgICAgZC0+Y3R4KTsKIAkJZWxzZQogCQkJREJHTVNHKCJQYWNrZXQgc2VudCB0byBub2RlICVkIHRjb2RlPTB4JVggdExhYmVsPSIKLQkJCSAgICAgICAiMHglMDJYIGFjaz0weCVYIHNwZD0lZCBkYXRhPTB4JTA4WCBjdHg9JWQiLAorCQkJICAgICAgICIlZCBhY2s9MHglWCBzcGQ9JWQgZGF0YT0weCUwOFggY3R4PSVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlMzJfdG9fY3B1KGQtPnByZ19jcHVbZC0+c2VudF9pbmRdLT5kYXRhWzFdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+MTYpJjB4M2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZTMyX3RvX2NwdShkLT5wcmdfY3B1W2QtPnNlbnRfaW5kXS0+ZGF0YVswXSkKQEAgLTI5OTksMjAgKzMwMzcsNiBAQAogCQlvaGNpMTM5NF9pbml0X2lzb190YXNrbGV0KCZvaGNpLT5pcl9sZWdhY3lfdGFza2xldCwKIAkJCQkJICBPSENJX0lTT19NVUxUSUNIQU5ORUxfUkVDRUlWRSwKIAkJCQkJICBkbWFfcmN2X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKSBkKTsKLQkJaWYgKG9oY2kxMzk0X3JlZ2lzdGVyX2lzb190YXNrbGV0KG9oY2ksCi0JCQkJCQkgICZvaGNpLT5pcl9sZWdhY3lfdGFza2xldCkgPCAwKSB7Ci0JCQlQUklOVChLRVJOX0VSUiwgIk5vIElSIERNQSBjb250ZXh0IGF2YWlsYWJsZSIpOwotCQkJZnJlZV9kbWFfcmN2X2N0eChkKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQotCQkvKiB0aGUgSVIgY29udGV4dCBjYW4gYmUgYXNzaWduZWQgdG8gYW55IERNQSBjb250ZXh0Ci0JCSAqIGJ5IG9oY2kxMzk0X3JlZ2lzdGVyX2lzb190YXNrbGV0ICovCi0JCWQtPmN0eCA9IG9oY2ktPmlyX2xlZ2FjeV90YXNrbGV0LmNvbnRleHQ7Ci0JCWQtPmN0cmxTZXQgPSBPSENJMTM5NF9Jc29SY3ZDb250ZXh0Q29udHJvbFNldCArIDMyKmQtPmN0eDsKLQkJZC0+Y3RybENsZWFyID0gT0hDSTEzOTRfSXNvUmN2Q29udGV4dENvbnRyb2xDbGVhciArIDMyKmQtPmN0eDsKLQkJZC0+Y21kUHRyID0gT0hDSTEzOTRfSXNvUmN2Q29tbWFuZFB0ciArIDMyKmQtPmN0eDsKLQkJZC0+Y3R4dE1hdGNoID0gT0hDSTEzOTRfSXNvUmN2Q29udGV4dE1hdGNoICsgMzIqZC0+Y3R4OwogCX0gZWxzZSB7CiAJCWQtPmN0cmxTZXQgPSBjb250ZXh0X2Jhc2UgKyBPSENJMTM5NF9Db250ZXh0Q29udHJvbFNldDsKIAkJZC0+Y3RybENsZWFyID0gY29udGV4dF9iYXNlICsgT0hDSTEzOTRfQ29udGV4dENvbnRyb2xDbGVhcjsKQEAgLTM0MTMsNyArMzQzNyw2IEBACiAKIAlzd2l0Y2ggKG9oY2ktPmluaXRfc3RhdGUpIHsKIAljYXNlIE9IQ0lfSU5JVF9ET05FOgotCQlzdG9wX2RtYV9yY3ZfY3R4KCZvaGNpLT5pcl9sZWdhY3lfY29udGV4dCk7CiAJCWhwc2JfcmVtb3ZlX2hvc3Qob2hjaS0+aG9zdCk7CiAKIAkJLyogQ2xlYXIgb3V0IEJVUyBPcHRpb25zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuYwppbmRleCA1ODI0YjZkLi42MzdiMzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMKQEAgLTMyLDYgKzMyLDggQEAKICAqICRJZCQKICAqLwogCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKwogI2luY2x1ZGUgIm10aGNhX21lbWZyZWUuaCIKICNpbmNsdWRlICJtdGhjYV9kZXYuaCIKICNpbmNsdWRlICJtdGhjYV9jbWQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3BhY2VvcmIuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3BhY2VvcmIuYwppbmRleCBjNzZjZjhmLi44NzQzNjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlb3JiLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zcGFjZW9yYi5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogCQljYXNlICdLJzoJCQkJLyogQnV0dG9uIGRhdGEgKi8KIAkJCWlmIChzcGFjZW9yYi0+aWR4ICE9IDUpIHJldHVybjsKLQkJCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBzcGFjZW9yYl9idXR0b25zW2ldLCAoZGF0YVsyXSA+PiBpKSAmIDEpOwogCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwppbmRleCBmNzMwNGYwLi5mZjY2ZWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCkBAIC02NzgsNyArNjc4LDcgQEAKIAlhdGtiZF9kaXNhYmxlKGF0a2JkKTsKIAogCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGEgY29tbWFuZCBpbiBmbGlnaHQgKi8KLQlzeW5jaHJvbml6ZV9rZXJuZWwoKTsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOyAgLyogQWxsb3cgYXRrYmRfaW50ZXJydXB0KClzIHRvIGNvbXBsZXRlLiAqLwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNlcmlvLT5kZXYsICZhdGtiZF9hdHRyX2V4dHJhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwppbmRleCAwNjE2MzUzLi4xMmRlZThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCkBAIC02MCwxMiArNjAsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBjbGFzc19zaW1wbGUgKmNhcGlfY2xhc3M7CiAKLWludCBjYXBpX21ham9yID0gNjg7CQkvKiBhbGxvY2F0ZWQgKi8KK3N0YXRpYyBpbnQgY2FwaV9tYWpvciA9IDY4OwkJLyogYWxsb2NhdGVkICovCiAjaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCiAjZGVmaW5lIENBUElOQ19OUl9QT1JUUwkzMgogI2RlZmluZSBDQVBJTkNfTUFYX1BPUlRTCTI1NgotaW50IGNhcGlfdHR5bWFqb3IgPSAxOTE7Ci1pbnQgY2FwaV90dHltaW5vcnMgPSBDQVBJTkNfTlJfUE9SVFM7CitzdGF0aWMgaW50IGNhcGlfdHR5bWFqb3IgPSAxOTE7CitzdGF0aWMgaW50IGNhcGlfdHR5bWlub3JzID0gQ0FQSU5DX05SX1BPUlRTOwogI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLwogCiBtb2R1bGVfcGFyYW1fbmFtZWQobWFqb3IsIGNhcGlfbWFqb3IsIHVpbnQsIDApOwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJa2ZyZWUobXApOwogfQogCi1zdHJ1Y3QgY2FwaW1pbm9yICpjYXBpbWlub3JfZmluZCh1bnNpZ25lZCBpbnQgbWlub3IpCitzdGF0aWMgc3RydWN0IGNhcGltaW5vciAqY2FwaW1pbm9yX2ZpbmQodW5zaWduZWQgaW50IG1pbm9yKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmw7CiAJc3RydWN0IGNhcGltaW5vciAqcCA9IE5VTEw7CkBAIC0xMTY2LDcgKzExNjYsNyBAQAogCXJldHVybiByb29tOwogfQogCi1pbnQgY2FwaW5jX3R0eV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3N0YXRpYyBpbnQgY2FwaW5jX3R0eV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IChzdHJ1Y3QgY2FwaW1pbm9yICopdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIW1wIHx8ICFtcC0+bmNjaXApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYwppbmRleCAxNmRjNTQxLi4yY2M4YjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCkBAIC04OSwxNCArODksMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHNlcV9vcGVyYXRpb25zIHNlcV9jb250cm9sbGVyX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2NvbnRyb2xsZXJfb3BzID0gewogCS5zdGFydAk9IGNvbnRyb2xsZXJfc3RhcnQsCiAJLm5leHQJPSBjb250cm9sbGVyX25leHQsCiAJLnN0b3AJPSBjb250cm9sbGVyX3N0b3AsCiAJLnNob3cJPSBjb250cm9sbGVyX3Nob3csCiB9OwogCi1zdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2NvbnRyc3RhdHNfb3BzID0geworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfY29udHJzdGF0c19vcHMgPSB7CiAJLnN0YXJ0CT0gY29udHJvbGxlcl9zdGFydCwKIAkubmV4dAk9IGNvbnRyb2xsZXJfbmV4dCwKIAkuc3RvcAk9IGNvbnRyb2xsZXJfc3RvcCwKQEAgLTE5MiwxNCArMTkyLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfYXBwbGljYXRpb25zX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2FwcGxpY2F0aW9uc19vcHMgPSB7CiAJLnN0YXJ0CT0gYXBwbGljYXRpb25zX3N0YXJ0LAogCS5uZXh0CT0gYXBwbGljYXRpb25zX25leHQsCiAJLnN0b3AJPSBhcHBsaWNhdGlvbnNfc3RvcCwKIAkuc2hvdwk9IGFwcGxpY2F0aW9uc19zaG93LAogfTsKIAotc3RydWN0IHNlcV9vcGVyYXRpb25zIHNlcV9hcHBsc3RhdHNfb3BzID0geworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfYXBwbHN0YXRzX29wcyA9IHsKIAkuc3RhcnQJPSBhcHBsaWNhdGlvbnNfc3RhcnQsCiAJLm5leHQJPSBhcHBsaWNhdGlvbnNfbmV4dCwKIAkuc3RvcAk9IGFwcGxpY2F0aW9uc19zdG9wLApAQCAtMjg3LDcgKzI4Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfY2FwaV9kcml2ZXJfb3BzID0geworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfY2FwaV9kcml2ZXJfb3BzID0gewogCS5zdGFydAk9IGNhcGlfZHJpdmVyX3N0YXJ0LAogCS5uZXh0CT0gY2FwaV9kcml2ZXJfbmV4dCwKIAkuc3RvcAk9IGNhcGlfZHJpdmVyX3N0b3AsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2lzZG5fZGl2ZXJ0LmMgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2lzZG5fZGl2ZXJ0LmMKaW5kZXggMWViMTEyMi4uMGJmZDY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2RpdmVydC9pc2RuX2RpdmVydC5jCisrKyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvaXNkbl9kaXZlcnQuYwpAQCAtMzgzLDcgKzM4Myw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGNhbGxlZCBmcm9tIGNvbW1vbiBtb2R1bGUgb24gYW4gaW5jb21pbmcgY2FsbCAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgaXNkbl9kaXZlcnRfaWNhbGwoaXNkbl9jdHJsICppYykKK3N0YXRpYyBpbnQgaXNkbl9kaXZlcnRfaWNhbGwoaXNkbl9jdHJsICppYykKIHsgaW50IHJldHZhbCA9IDA7CiAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgIHN0cnVjdCBjYWxsX3N0cnVjICpjcyA9IE5VTEw7IApAQCAtNTUyLDcgKzU1Miw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIHB1dCBhIGFkZHJlc3MgaW5jbHVkaW5nIGFkZHJlc3MgdHlwZSBpbnRvIGJ1ZmZlciAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgcHV0X2FkZHJlc3MoY2hhciAqc3QsIHVfY2hhciAqcCwgaW50IGxlbikKK3N0YXRpYyBpbnQgcHV0X2FkZHJlc3MoY2hhciAqc3QsIHVfY2hhciAqcCwgaW50IGxlbikKIHsgdV9jaGFyIHJldHZhbCA9IDA7CiAgIHVfY2hhciBhZHJfdHlwID0gMDsgLyogbmV0d29yayBzdGFuZGFyZCAqLwogCkBAIC01OTUsNyArNTk1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogcmVwb3J0IGEgc3VjY2VzZnVsbCBpbnRlcnJvZ2F0aW9uICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBpbnRlcnJvZ2F0ZV9zdWNjZXNzKGlzZG5fY3RybCAqaWMsIHN0cnVjdCBjYWxsX3N0cnVjICpjcykKK3N0YXRpYyBpbnQgaW50ZXJyb2dhdGVfc3VjY2Vzcyhpc2RuX2N0cmwgKmljLCBzdHJ1Y3QgY2FsbF9zdHJ1YyAqY3MpCiB7IGNoYXIgKnNyYyA9IGljLT5wYXJtLmRzczFfaW8uZGF0YTsKICAgaW50IHJlc3RsZW4gPSBpYy0+cGFybS5kc3MxX2lvLmRhdGFsZW47CiAgIGludCBjbnQgPSAxOwpAQCAtNjg5LDcgKzY4OSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogY2FsbGJhY2sgZm9yIHByb3RvY29sIHNwZWNpZmljIGV4dGVuc2lvbnMgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgcHJvdF9zdGF0X2NhbGxiYWNrKGlzZG5fY3RybCAqaWMpCitzdGF0aWMgaW50IHByb3Rfc3RhdF9jYWxsYmFjayhpc2RuX2N0cmwgKmljKQogeyBzdHJ1Y3QgY2FsbF9zdHJ1YyAqY3MsICpjczE7CiAgIGludCBpOwogICB1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzgxLDcgKzc4MSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogc3RhdHVzIGNhbGxiYWNrIGZyb20gSEwgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgaXNkbl9kaXZlcnRfc3RhdF9jYWxsYmFjayhpc2RuX2N0cmwgKmljKQorc3RhdGljIGludCBpc2RuX2RpdmVydF9zdGF0X2NhbGxiYWNrKGlzZG5fY3RybCAqaWMpCiB7IHN0cnVjdCBjYWxsX3N0cnVjICpjcywgKmNzMTsKICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgaW50IHJldHZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmM0czhzX2wxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjNHM4c19sMS5jCmluZGV4IDFhYzQ2YzIuLmJhMWQwMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmM0czhzX2wxLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmYzRzOHNfbDEuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgImhpc2F4X2lmLmgiCiAjaW5jbHVkZSAiaGZjNHM4c19sMS5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9hZGJoaWQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jCmluZGV4IDhmOTNkMDEuLmRiNjU0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jCkBAIC01NTUsNiArNTU1LDQyIEBACiAjZW5kaWYgLyogQ09ORklHX1BNQUNfQkFDS0xJR0hUICovCiAJCQlpbnB1dF9yZXBvcnRfa2V5KCZhZGJoaWRbaWRdLT5pbnB1dCwgS0VZX0JSSUdIVE5FU1NVUCwgZG93bik7CiAJCQlicmVhazsKKworCQljYXNlIDB4YzoJLyogdmlkZW9tb2RlIHN3aXRjaCAqLworCQkJaW5wdXRfcmVwb3J0X2tleSgmYWRiaGlkW2lkXS0+aW5wdXQsIEtFWV9TV0lUQ0hWSURFT01PREUsIGRvd24pOworCQkJYnJlYWs7CisKKwkJY2FzZSAweGQ6CS8qIGtleWJvYXJkIGlsbHVtaW5hdGlvbiB0b2dnbGUgKi8KKwkJCWlucHV0X3JlcG9ydF9rZXkoJmFkYmhpZFtpZF0tPmlucHV0LCBLRVlfS0JESUxMVU1UT0dHTEUsIGRvd24pOworCQkJYnJlYWs7CisKKwkJY2FzZSAweGU6CS8qIGtleWJvYXJkIGlsbHVtaW5hdGlvbiBkZWNyZWFzZSAqLworCQkJaW5wdXRfcmVwb3J0X2tleSgmYWRiaGlkW2lkXS0+aW5wdXQsIEtFWV9LQkRJTExVTURPV04sIGRvd24pOworCQkJYnJlYWs7CisKKwkJY2FzZSAweGY6CisJCQlzd2l0Y2ggKGRhdGFbMV0pIHsKKwkJCWNhc2UgMHg4ZjoKKwkJCWNhc2UgMHgwZjoKKwkJCQkvKiBrZXlib2FyZCBpbGx1bWluYXRpb24gaW5jcmVhc2UgKi8KKwkJCQlpbnB1dF9yZXBvcnRfa2V5KCZhZGJoaWRbaWRdLT5pbnB1dCwgS0VZX0tCRElMTFVNVVAsIGRvd24pOworCQkJCWJyZWFrOworCisJCQljYXNlIDB4N2Y6CisJCQljYXNlIDB4ZmY6CisJCQkJLyoga2V5cGFkIG92ZXJsYXkgdG9vZ2xlICovCisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiVW5oYW5kbGVkIEFEQl9NSVNDIGV2ZW50ICUwMngsICUwMngsICUwMngsICUwMnhcbiIsCisJCQkJICAgICAgIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9JTkZPICJVbmhhbmRsZWQgQURCX01JU0MgZXZlbnQgJTAyeCwgJTAyeCwgJTAyeCwgJTAyeFxuIiwKKwkJCSAgICAgICBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKKwkJCWJyZWFrOwogCQl9CiAJICB9CiAJICBicmVhazsKQEAgLTc3NSw2ICs4MTEsMTAgQEAKIAkJCXNldF9iaXQoS0VZX0JSSUdIVE5FU1NVUCwgYWRiaGlkW2lkXS0+aW5wdXQua2V5Yml0KTsKIAkJCXNldF9iaXQoS0VZX0JSSUdIVE5FU1NET1dOLCBhZGJoaWRbaWRdLT5pbnB1dC5rZXliaXQpOwogCQkJc2V0X2JpdChLRVlfRUpFQ1RDRCwgYWRiaGlkW2lkXS0+aW5wdXQua2V5Yml0KTsKKwkJCXNldF9iaXQoS0VZX1NXSVRDSFZJREVPTU9ERSwgYWRiaGlkW2lkXS0+aW5wdXQua2V5Yml0KTsKKwkJCXNldF9iaXQoS0VZX0tCRElMTFVNVE9HR0xFLCBhZGJoaWRbaWRdLT5pbnB1dC5rZXliaXQpOworCQkJc2V0X2JpdChLRVlfS0JESUxMVU1ET1dOLCBhZGJoaWRbaWRdLT5pbnB1dC5rZXliaXQpOworCQkJc2V0X2JpdChLRVlfS0JESUxMVU1VUCwgYWRiaGlkW2lkXS0+aW5wdXQua2V5Yml0KTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChhZGJoaWRbaWRdLT5uYW1lWzBdKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCmluZGV4IGZkZWExYTMuLmU2NTRhYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKQEAgLTIzNTEsNiArMjM1MSwxMCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAorCS8qIERpc2FibGUgY2xvY2sgc3ByZWFkaW5nIG9uIHNvbWUgbWFjaGluZXMgKi8KKwlwbWFjX3R3ZWFrX2Nsb2NrX3NwcmVhZGluZygwKTsKKworCS8qIFN0b3AgcHJlZW1wdGlvbiAqLwogCXByZWVtcHRfZGlzYWJsZSgpOwogCiAJLyogTWFrZSBzdXJlIHRoZSBkZWNyZW1lbnRlciB3b24ndCBpbnRlcnJ1cHQgdXMgKi8KQEAgLTI0MTcsMTEgKzI0MjEsMTIgQEAKIAogCS8qIFJlLWVuYWJsZSBsb2NhbCBDUFUgaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKLQogCW1kZWxheSgxMDApOwotCiAJcHJlZW1wdF9lbmFibGUoKTsKIAorCS8qIFJlLWVuYWJsZSBjbG9jayBzcHJlYWRpbmcgb24gc29tZSBtYWNoaW5lcyAqLworCXBtYWNfdHdlYWtfY2xvY2tfc3ByZWFkaW5nKDEpOworCiAJLyogUmVzdW1lIGRldmljZXMgKi8KIAlkZXZpY2VfcmVzdW1lKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwppbmRleCA3NzYxOWE1Li4wZGQ2YzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMKKysrIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCkBAIC0zMzEsMjUgKzMzMSwxOSBAQAogCXN0cnVjdCBiaW8gKmJpbzsKIAl1bnNpZ25lZCBpbnQgbnJfaW92ZWNzID0gKHNpemUgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwogCWludCBnZnBfbWFzayA9IEdGUF9OT0lPIHwgX19HRlBfSElHSE1FTTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gY3VycmVudC0+ZmxhZ3M7CiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKgotCSAqIFRlbGwgVk0gdG8gYWN0IGxlc3MgYWdncmVzc2l2ZWx5IGFuZCBmYWlsIGVhcmxpZXIuCi0JICogVGhpcyBpcyBub3QgbmVjZXNzYXJ5IGJ1dCBpbmNyZWFzZXMgdGhyb3VnaHB1dC4KKwkgKiBVc2UgX19HRlBfTk9NRU1BTExPQyB0byB0ZWxsIHRoZSBWTSB0byBhY3QgbGVzcyBhZ2dyZXNzaXZlbHkgYW5kCisJICogdG8gZmFpbCBlYXJsaWVyLiAgVGhpcyBpcyBub3QgbmVjZXNzYXJ5IGJ1dCBpbmNyZWFzZXMgdGhyb3VnaHB1dC4KIAkgKiBGSVhNRTogSXMgdGhpcyByZWFsbHkgaW50ZWxsaWdlbnQ/CiAJICovCi0JY3VycmVudC0+ZmxhZ3MgJj0gflBGX01FTUFMTE9DOwotCiAJaWYgKGJhc2VfYmlvKQotCQliaW8gPSBiaW9fY2xvbmUoYmFzZV9iaW8sIEdGUF9OT0lPKTsKKwkJYmlvID0gYmlvX2Nsb25lKGJhc2VfYmlvLCBHRlBfTk9JT3xfX0dGUF9OT01FTUFMTE9DKTsKIAllbHNlCi0JCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9JTywgbnJfaW92ZWNzKTsKLQlpZiAoIWJpbykgewotCQlpZiAoZmxhZ3MgJiBQRl9NRU1BTExPQykKLQkJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOworCQliaW8gPSBiaW9fYWxsb2MoR0ZQX05PSU98X19HRlBfTk9NRU1BTExPQywgbnJfaW92ZWNzKTsKKwlpZiAoIWJpbykKIAkJcmV0dXJuIE5VTEw7Ci0JfQogCiAJLyogaWYgdGhlIGxhc3QgYmlvIHdhcyBub3QgY29tcGxldGUsIGNvbnRpbnVlIHdoZXJlIHRoYXQgb25lIGVuZGVkICovCiAJYmlvLT5iaV9pZHggPSAqYmlvX3ZlY19pZHg7CkBAIC0zODYsOSArMzgwLDYgQEAKIAkJc2l6ZSAtPSBidi0+YnZfbGVuOwogCX0KIAotCWlmIChmbGFncyAmIFBGX01FTUFMTE9DKQotCQljdXJyZW50LT5mbGFncyB8PSBQRl9NRU1BTExPQzsKLQogCWlmICghYmlvLT5iaV9zaXplKSB7CiAJCWJpb19wdXQoYmlvKTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWVtYy5jIGIvZHJpdmVycy9tZC9kbS1lbWMuYwppbmRleCA3MDA2NTg2Li5jNzA2NzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWVtYy5jCisrKyBiL2RyaXZlcnMvbWQvZG0tZW1jLmMKQEAgLTIyMyw4ICsyMjMsMTAgQEAKIHsKIAlzdHJ1Y3QgZW1jX2hhbmRsZXIgKmggPSBrbWFsbG9jKHNpemVvZigqaCksIEdGUF9LRVJORUwpOwogCi0JaWYgKGgpCisJaWYgKGgpIHsKKwkJbWVtc2V0KGgsIDAsIHNpemVvZigqaCkpOwogCQlzcGluX2xvY2tfaW5pdCgmaC0+bG9jayk7CisJfQogCiAJcmV0dXJuIGg7CiB9CkBAIC0yNTksOCArMjYxLDYgQEAKIAlpZiAoIWgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KGgsIDAsIHNpemVvZigqaCkpOwotCiAJaHdoLT5jb250ZXh0ID0gaDsKIAogCWlmICgoaC0+c2hvcnRfdHJlc3Bhc3MgPSBzaG9ydF90cmVzcGFzcykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWh3LWhhbmRsZXIuYyBiL2RyaXZlcnMvbWQvZG0taHctaGFuZGxlci5jCmluZGV4IGFlNjM3NzIuLjRjYzAwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0taHctaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvbWQvZG0taHctaGFuZGxlci5jCkBAIC0yMyw3ICsyMyw3IEBACiBzdGF0aWMgTElTVF9IRUFEKF9od19oYW5kbGVycyk7CiBzdGF0aWMgREVDTEFSRV9SV1NFTShfaHdoX2xvY2spOwogCi1zdHJ1Y3QgaHdoX2ludGVybmFsICpfX2ZpbmRfaHdfaGFuZGxlcl90eXBlKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc3RydWN0IGh3aF9pbnRlcm5hbCAqX19maW5kX2h3X2hhbmRsZXJfdHlwZShjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBod2hfaW50ZXJuYWwgKmh3aGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbXBhdGguYyBiL2RyaXZlcnMvbWQvZG0tbXBhdGguYwppbmRleCA0Mzc2M2EwLi4xZTk3YjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLW1wYXRoLmMKKysrIGIvZHJpdmVycy9tZC9kbS1tcGF0aC5jCkBAIC0xMDEsNiArMTAxLDcgQEAKIAogc3RhdGljIGttZW1fY2FjaGVfdCAqX21waW9fY2FjaGU7CiAKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprbXVsdGlwYXRoZDsKIHN0YXRpYyB2b2lkIHByb2Nlc3NfcXVldWVkX2lvcyh2b2lkICpkYXRhKTsKIHN0YXRpYyB2b2lkIHRyaWdnZXJfZXZlbnQodm9pZCAqZGF0YSk7CiAKQEAgLTMwOCw3ICszMDksNyBAQAogCQliaW9fbGlzdF9hZGQoJm0tPnF1ZXVlZF9pb3MsIGJpbyk7CiAJCW0tPnF1ZXVlX3NpemUrKzsKIAkJaWYgKG0tPnBnX2luaXRfcmVxdWlyZWQgfHwgIW0tPnF1ZXVlX2lvKQotCQkJc2NoZWR1bGVfd29yaygmbS0+cHJvY2Vzc19xdWV1ZWRfaW9zKTsKKwkJCXF1ZXVlX3dvcmsoa211bHRpcGF0aGQsICZtLT5wcm9jZXNzX3F1ZXVlZF9pb3MpOwogCQlwZ3BhdGggPSBOVUxMOwogCQlyID0gMDsKIAl9IGVsc2UgaWYgKCFwZ3BhdGgpCkBAIC0zMzQsNyArMzM1LDcgQEAKIAogCW0tPnF1ZXVlX2lmX25vX3BhdGggPSBxdWV1ZV9pZl9ub19wYXRoOwogCWlmICghbS0+cXVldWVfaWZfbm9fcGF0aCkKLQkJc2NoZWR1bGVfd29yaygmbS0+cHJvY2Vzc19xdWV1ZWRfaW9zKTsKKwkJcXVldWVfd29yayhrbXVsdGlwYXRoZCwgJm0tPnByb2Nlc3NfcXVldWVkX2lvcyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtLT5sb2NrLCBmbGFncyk7CiAKQEAgLTgwMCw3ICs4MDEsNyBAQAogCWlmIChwZ3BhdGggPT0gbS0+Y3VycmVudF9wZ3BhdGgpCiAJCW0tPmN1cnJlbnRfcGdwYXRoID0gTlVMTDsKIAotCXNjaGVkdWxlX3dvcmsoJm0tPnRyaWdnZXJfZXZlbnQpOworCXF1ZXVlX3dvcmsoa211bHRpcGF0aGQsICZtLT50cmlnZ2VyX2V2ZW50KTsKIAogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKQEAgLTgzNyw5ICs4MzgsOSBAQAogCiAJbS0+Y3VycmVudF9wZ3BhdGggPSBOVUxMOwogCWlmICghbS0+bnJfdmFsaWRfcGF0aHMrKykKLQkJc2NoZWR1bGVfd29yaygmbS0+cHJvY2Vzc19xdWV1ZWRfaW9zKTsKKwkJcXVldWVfd29yayhrbXVsdGlwYXRoZCwgJm0tPnByb2Nlc3NfcXVldWVkX2lvcyk7CiAKLQlzY2hlZHVsZV93b3JrKCZtLT50cmlnZ2VyX2V2ZW50KTsKKwlxdWV1ZV93b3JrKGttdWx0aXBhdGhkLCAmbS0+dHJpZ2dlcl9ldmVudCk7CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtLT5sb2NrLCBmbGFncyk7CkBAIC04ODMsNyArODg0LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKIAotCXNjaGVkdWxlX3dvcmsoJm0tPnRyaWdnZXJfZXZlbnQpOworCXF1ZXVlX3dvcmsoa211bHRpcGF0aGQsICZtLT50cmlnZ2VyX2V2ZW50KTsKIH0KIAogLyoKQEAgLTkxMyw3ICs5MTQsNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtLT5sb2NrLCBmbGFncyk7CiAKLQlzY2hlZHVsZV93b3JrKCZtLT50cmlnZ2VyX2V2ZW50KTsKKwlxdWV1ZV93b3JrKGttdWx0aXBhdGhkLCAmbS0+dHJpZ2dlcl9ldmVudCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk2OCw3ICs5NjksNyBAQAogCQltLT5jdXJyZW50X3BncGF0aCA9IE5VTEw7CiAJCW0tPmN1cnJlbnRfcGcgPSBOVUxMOwogCX0KLQlzY2hlZHVsZV93b3JrKCZtLT5wcm9jZXNzX3F1ZXVlZF9pb3MpOworCXF1ZXVlX3dvcmsoa211bHRpcGF0aGQsICZtLT5wcm9jZXNzX3F1ZXVlZF9pb3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTAxOCw3ICsxMDE5LDcgQEAKIAliaW9fbGlzdF9hZGQoJm0tPnF1ZXVlZF9pb3MsIGJpbyk7CiAJbS0+cXVldWVfc2l6ZSsrOwogCWlmICghbS0+cXVldWVfaW8pCi0JCXNjaGVkdWxlX3dvcmsoJm0tPnByb2Nlc3NfcXVldWVkX2lvcyk7CisJCXF1ZXVlX3dvcmsoa211bHRpcGF0aGQsICZtLT5wcm9jZXNzX3F1ZXVlZF9pb3MpOwogCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKIAogCXJldHVybiAxOwkvKiBpbyBub3QgY29tcGxldGUgKi8KQEAgLTEwNTcsNyArMTA1OCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJm0tPmxvY2ssIGZsYWdzKTsKIAltLT5zdXNwZW5kZWQgPSAxOwogCWlmIChtLT5xdWV1ZV9pZl9ub19wYXRoKQotCQlzY2hlZHVsZV93b3JrKCZtLT5wcm9jZXNzX3F1ZXVlZF9pb3MpOworCQlxdWV1ZV93b3JrKGttdWx0aXBhdGhkLCAmbS0+cHJvY2Vzc19xdWV1ZWRfaW9zKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTEyNzQsNiArMTI3NSwxNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlrbXVsdGlwYXRoZCA9IGNyZWF0ZV93b3JrcXVldWUoImttcGF0aGQiKTsKKwlpZiAoIWttdWx0aXBhdGhkKSB7CisJCURNRVJSKCIlczogZmFpbGVkIHRvIGNyZWF0ZSB3b3JrcXVldWUga21wYXRoZCIsCisJCQkJbXVsdGlwYXRoX3RhcmdldC5uYW1lKTsKKwkJZG1fdW5yZWdpc3Rlcl90YXJnZXQoJm11bHRpcGF0aF90YXJnZXQpOworCQlrbWVtX2NhY2hlX2Rlc3Ryb3koX21waW9fY2FjaGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKIAlETUlORk8oImRtLW11bHRpcGF0aCB2ZXJzaW9uICV1LiV1LiV1IGxvYWRlZCIsCiAJICAgICAgIG11bHRpcGF0aF90YXJnZXQudmVyc2lvblswXSwgbXVsdGlwYXRoX3RhcmdldC52ZXJzaW9uWzFdLAogCSAgICAgICBtdWx0aXBhdGhfdGFyZ2V0LnZlcnNpb25bMl0pOwpAQCAtMTI4NSw2ICsxMjk1LDggQEAKIHsKIAlpbnQgcjsKIAorCWRlc3Ryb3lfd29ya3F1ZXVlKGttdWx0aXBhdGhkKTsKKwogCXIgPSBkbV91bnJlZ2lzdGVyX3RhcmdldCgmbXVsdGlwYXRoX3RhcmdldCk7CiAJaWYgKHIgPCAwKQogCQlETUVSUigiJXM6IHRhcmdldCB1bnJlZ2lzdGVyIGZhaWxlZCAlZCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXBhdGgtc2VsZWN0b3IuYyBiL2RyaXZlcnMvbWQvZG0tcGF0aC1zZWxlY3Rvci5jCmluZGV4IGFjNWM0YmIuLmEyOGMxYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcGF0aC1zZWxlY3Rvci5jCisrKyBiL2RyaXZlcnMvbWQvZG0tcGF0aC1zZWxlY3Rvci5jCkBAIC0yNiw3ICsyNiw3IEBACiBzdGF0aWMgTElTVF9IRUFEKF9wYXRoX3NlbGVjdG9ycyk7CiBzdGF0aWMgREVDTEFSRV9SV1NFTShfcHNfbG9jayk7CiAKLXN0cnVjdCBwc19pbnRlcm5hbCAqX19maW5kX3BhdGhfc2VsZWN0b3JfdHlwZShjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHN0cnVjdCBwc19pbnRlcm5hbCAqX19maW5kX3BhdGhfc2VsZWN0b3JfdHlwZShjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBwc19pbnRlcm5hbCAqcHNpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXRhYmxlLmMgYi9kcml2ZXJzL21kL2RtLXRhYmxlLmMKaW5kZXggZWUxNzVkNC4uMThlOWI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS10YWJsZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdGFibGUuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJfQogfQogCi12b2lkIHRhYmxlX2Rlc3Ryb3koc3RydWN0IGRtX3RhYmxlICp0KQorc3RhdGljIHZvaWQgdGFibGVfZGVzdHJveShzdHJ1Y3QgZG1fdGFibGUgKnQpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0temVyby5jIGIvZHJpdmVycy9tZC9kbS16ZXJvLmMKaW5kZXggN2ZlYmMyYy4uNTFjMDYzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS16ZXJvLmMKKysrIGIvZHJpdmVycy9tZC9kbS16ZXJvLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAkubWFwICAgID0gemVyb19tYXAsCiB9OwogCi1pbnQgX19pbml0IGRtX3plcm9faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZG1femVyb19pbml0KHZvaWQpCiB7CiAJaW50IHIgPSBkbV9yZWdpc3Rlcl90YXJnZXQoJnplcm9fdGFyZ2V0KTsKIApAQCAtNjUsNyArNjUsNyBAQAogCXJldHVybiByOwogfQogCi12b2lkIF9fZXhpdCBkbV96ZXJvX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBkbV96ZXJvX2V4aXQodm9pZCkKIHsKIAlpbnQgciA9IGRtX3VucmVnaXN0ZXJfdGFyZ2V0KCZ6ZXJvX3RhcmdldCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCAyNDNmZjY4Li5mNmIwMzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC05Nyw2ICs5Nyw3IEBACiAJICogZnJlZXplL3RoYXcgc3VwcG9ydCByZXF1aXJlIGhvbGRpbmcgb250byBhIHN1cGVyIGJsb2NrCiAJICovCiAJc3RydWN0IHN1cGVyX2Jsb2NrICpmcm96ZW5fc2I7CisJc3RydWN0IGJsb2NrX2RldmljZSAqZnJvemVuX2JkZXY7CiB9OwogCiAjZGVmaW5lIE1JTl9JT1MgMjU2CkBAIC05OTAsNDQgKzk5MSw1MCBAQAogICovCiBzdGF0aWMgaW50IF9fbG9ja19mcyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoRE1GX0ZTX0xPQ0tFRCwgJm1kLT5mbGFncykpCiAJCXJldHVybiAwOwogCi0JYmRldiA9IGJkZ2V0X2Rpc2sobWQtPmRpc2ssIDApOwotCWlmICghYmRldikgeworCW1kLT5mcm96ZW5fYmRldiA9IGJkZ2V0X2Rpc2sobWQtPmRpc2ssIDApOworCWlmICghbWQtPmZyb3plbl9iZGV2KSB7CiAJCURNV0FSTigiYmRnZXQgZmFpbGVkIGluIF9fbG9ja19mcyIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAJfQogCiAJV0FSTl9PTihtZC0+ZnJvemVuX3NiKTsKLQltZC0+ZnJvemVuX3NiID0gZnJlZXplX2JkZXYoYmRldik7CisKKwltZC0+ZnJvemVuX3NiID0gZnJlZXplX2JkZXYobWQtPmZyb3plbl9iZGV2KTsKKwlpZiAoSVNfRVJSKG1kLT5mcm96ZW5fc2IpKSB7CisJCWVycm9yID0gUFRSX0VSUihtZC0+ZnJvemVuX3NiKTsKKwkJZ290byBvdXRfYmRwdXQ7CisJfQorCiAJLyogZG9uJ3QgYmRwdXQgcmlnaHQgbm93LCB3ZSBkb24ndCB3YW50IHRoZSBiZGV2CiAJICogdG8gZ28gYXdheSB3aGlsZSBpdCBpcyBsb2NrZWQuICBXZSdsbCBiZHB1dAogCSAqIGluIF9fdW5sb2NrX2ZzCiAJICovCiAJcmV0dXJuIDA7CisKK291dF9iZHB1dDoKKwliZHB1dChtZC0+ZnJvemVuX2JkZXYpOworCW1kLT5mcm96ZW5fc2IgPSBOVUxMOworCW1kLT5mcm96ZW5fYmRldiA9IE5VTEw7CitvdXQ6CisJY2xlYXJfYml0KERNRl9GU19MT0NLRUQsICZtZC0+ZmxhZ3MpOworCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBfX3VubG9ja19mcyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCitzdGF0aWMgdm9pZCBfX3VubG9ja19mcyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKLQogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KERNRl9GU19MT0NLRUQsICZtZC0+ZmxhZ3MpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCi0JYmRldiA9IGJkZ2V0X2Rpc2sobWQtPmRpc2ssIDApOwotCWlmICghYmRldikgewotCQlETVdBUk4oImJkZ2V0IGZhaWxlZCBpbiBfX3VubG9ja19mcyIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJdGhhd19iZGV2KG1kLT5mcm96ZW5fYmRldiwgbWQtPmZyb3plbl9zYik7CisJYmRwdXQobWQtPmZyb3plbl9iZGV2KTsKIAotCXRoYXdfYmRldihiZGV2LCBtZC0+ZnJvemVuX3NiKTsKIAltZC0+ZnJvemVuX3NiID0gTlVMTDsKLQliZHB1dChiZGV2KTsKLQliZHB1dChiZGV2KTsKLQlyZXR1cm4gMDsKKwltZC0+ZnJvemVuX2JkZXYgPSBOVUxMOwogfQogCiAvKgpAQCAtMTA0MSwzNyArMTA0OCwzNyBAQAogewogCXN0cnVjdCBkbV90YWJsZSAqbWFwOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCWludCBlcnJvciA9IC1FSU5WQUw7CiAKIAkvKiBGbHVzaCBJL08gdG8gdGhlIGRldmljZS4gKi8KIAlkb3duX3JlYWQoJm1kLT5sb2NrKTsKLQlpZiAodGVzdF9iaXQoRE1GX0JMT0NLX0lPLCAmbWQtPmZsYWdzKSkgewotCQl1cF9yZWFkKCZtZC0+bG9jayk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwlpZiAodGVzdF9iaXQoRE1GX0JMT0NLX0lPLCAmbWQtPmZsYWdzKSkKKwkJZ290byBvdXRfcmVhZF91bmxvY2s7CisKKwllcnJvciA9IF9fbG9ja19mcyhtZCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9yZWFkX3VubG9jazsKIAogCW1hcCA9IGRtX2dldF90YWJsZShtZCk7CiAJaWYgKG1hcCkKIAkJZG1fdGFibGVfcHJlc3VzcGVuZF90YXJnZXRzKG1hcCk7Ci0JX19sb2NrX2ZzKG1kKTsKIAogCXVwX3JlYWQoJm1kLT5sb2NrKTsKIAogCS8qCi0JICogRmlyc3Qgd2Ugc2V0IHRoZSBCTE9DS19JTyBmbGFnIHNvIG5vIG1vcmUgaW9zIHdpbGwgYmUKLQkgKiBtYXBwZWQuCisJICogRmlyc3Qgd2Ugc2V0IHRoZSBCTE9DS19JTyBmbGFnIHNvIG5vIG1vcmUgaW9zIHdpbGwgYmUgbWFwcGVkLgorCSAqCisJICogSWYgdGhlIGZsYWcgaXMgYWxyZWFkeSBzZXQgd2Uga25vdyBhbm90aGVyIHRocmVhZCBpcyB0cnlpbmcgdG8KKwkgKiBzdXNwZW5kIGFzIHdlbGwsIHNvIHdlIGxlYXZlIHRoZSBmcyBsb2NrZWQgZm9yIHRoaXMgdGhyZWFkLgogCSAqLworCWVycm9yID0gLUVJTlZBTDsKIAlkb3duX3dyaXRlKCZtZC0+bG9jayk7Ci0JaWYgKHRlc3RfYml0KERNRl9CTE9DS19JTywgJm1kLT5mbGFncykpIHsKLQkJLyoKLQkJICogSWYgd2UgZ2V0IGhlcmUgd2Uga25vdyBhbm90aGVyIHRocmVhZCBpcwotCQkgKiB0cnlpbmcgdG8gc3VzcGVuZCBhcyB3ZWxsLCBzbyB3ZSBsZWF2ZSB0aGUgZnMKLQkJICogbG9ja2VkIGZvciB0aGlzIHRocmVhZC4KLQkJICovCi0JCXVwX3dyaXRlKCZtZC0+bG9jayk7Ci0JCXJldHVybiAtRUlOVkFMOworCWlmICh0ZXN0X2FuZF9zZXRfYml0KERNRl9CTE9DS19JTywgJm1kLT5mbGFncykpIHsKKwkJaWYgKG1hcCkKKwkJCWRtX3RhYmxlX3B1dChtYXApOworCQlnb3RvIG91dF93cml0ZV91bmxvY2s7CiAJfQogCi0Jc2V0X2JpdChETUZfQkxPQ0tfSU8sICZtZC0+ZmxhZ3MpOwogCWFkZF93YWl0X3F1ZXVlKCZtZC0+d2FpdCwgJndhaXQpOwogCXVwX3dyaXRlKCZtZC0+bG9jayk7CiAKQEAgLTEwOTksMTIgKzExMDYsOSBAQAogCXJlbW92ZV93YWl0X3F1ZXVlKCZtZC0+d2FpdCwgJndhaXQpOwogCiAJLyogd2VyZSB3ZSBpbnRlcnJ1cHRlZCA/ICovCi0JaWYgKGF0b21pY19yZWFkKCZtZC0+cGVuZGluZykpIHsKLQkJX191bmxvY2tfZnMobWQpOwotCQljbGVhcl9iaXQoRE1GX0JMT0NLX0lPLCAmbWQtPmZsYWdzKTsKLQkJdXBfd3JpdGUoJm1kLT5sb2NrKTsKLQkJcmV0dXJuIC1FSU5UUjsKLQl9CisJZXJyb3IgPSAtRUlOVFI7CisJaWYgKGF0b21pY19yZWFkKCZtZC0+cGVuZGluZykpCisJCWdvdG8gb3V0X3VuZnJlZXplOwogCiAJc2V0X2JpdChETUZfU1VTUEVOREVELCAmbWQtPmZsYWdzKTsKIApAQCAtMTExNSw2ICsxMTE5LDE4IEBACiAJdXBfd3JpdGUoJm1kLT5sb2NrKTsKIAogCXJldHVybiAwOworCitvdXRfdW5mcmVlemU6CisJLyogRklYTUUgVW5kbyBkbV90YWJsZV9wcmVzdXNwZW5kX3RhcmdldHMgKi8KKwlfX3VubG9ja19mcyhtZCk7CisJY2xlYXJfYml0KERNRl9CTE9DS19JTywgJm1kLT5mbGFncyk7CitvdXRfd3JpdGVfdW5sb2NrOgorCXVwX3dyaXRlKCZtZC0+bG9jayk7CisJcmV0dXJuIGVycm9yOworCitvdXRfcmVhZF91bmxvY2s6CisJdXBfcmVhZCgmbWQtPmxvY2spOworCXJldHVybiBlcnJvcjsKIH0KIAogaW50IGRtX3Jlc3VtZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggOTdhZjg1Ny4uZDg5OTIwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtOTU3LDcgKzk1Nyw3IEBACiB9CiAKIAotc3RydWN0IHN1cGVyX3R5cGUgc3VwZXJfdHlwZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc3VwZXJfdHlwZSBzdXBlcl90eXBlc1tdID0gewogCVswXSA9IHsKIAkJLm5hbWUJPSAiMC45MC4wIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCkBAIC0yNzQwLDcgKzI3NDAsNyBAQAogCS5yZXZhbGlkYXRlX2Rpc2s9IG1kX3JldmFsaWRhdGUsCiB9OwogCi1pbnQgbWRfdGhyZWFkKHZvaWQgKiBhcmcpCitzdGF0aWMgaW50IG1kX3RocmVhZCh2b2lkICogYXJnKQogewogCW1ka190aHJlYWRfdCAqdGhyZWFkID0gYXJnOwogCkBAIC0zMjMyLDcgKzMyMzIsNyBAQAogfQogCiAKLURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJlc3luY193YWl0KTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZXN5bmNfd2FpdCk7CiAKICNkZWZpbmUgU1lOQ19NQVJLUwkxMAogI2RlZmluZQlTWU5DX01BUktfU1RFUAkoMypIWikKQEAgLTM1NzUsOCArMzU3NSw4IEBACiAJfQogfQogCi1pbnQgbWRfbm90aWZ5X3JlYm9vdChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCi0JCQkJCXVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqeCkKK3N0YXRpYyBpbnQgbWRfbm90aWZ5X3JlYm9vdChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkgICAgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp4KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAltZGRldl90ICptZGRldjsKQEAgLTM1OTksNyArMzU5OSw3IEBACiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCi1zdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbWRfbm90aWZpZXIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG1kX25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsCT0gbWRfbm90aWZ5X3JlYm9vdCwKIAkubmV4dAkJPSBOVUxMLAogCS5wcmlvcml0eQk9IElOVF9NQVgsIC8qIGJlZm9yZSBhbnkgcmVhbCBkZXZpY2VzICovCkBAIC0zNjE2LDcgKzM2MTYsNyBAQAogCQlwLT5wcm9jX2ZvcHMgPSAmbWRfc2VxX2ZvcHM7CiB9CiAKLWludCBfX2luaXQgbWRfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbWRfaW5pdCh2b2lkKQogewogCWludCBtaW5vcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKaW5kZXggYzliMTM0Yy4uNGU0YmZkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYworKysgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCkBAIC0xMDMsNyArMTAzLDggQEAKIAltZW1wb29sX2ZyZWUobXBfYmgsIGNvbmYtPnBvb2wpOwogfQogCi1pbnQgbXVsdGlwYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsIGludCBlcnJvcikKK3N0YXRpYyBpbnQgbXVsdGlwYXRoX2VuZF9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsCisJCQkJIGludCBlcnJvcikKIHsKIAlpbnQgdXB0b2RhdGUgPSB0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKIAlzdHJ1Y3QgbXVsdGlwYXRoX2JoICogbXBfYmggPSAoc3RydWN0IG11bHRpcGF0aF9iaCAqKShiaW8tPmJpX3ByaXZhdGUpOwpAQCAtMzU1LDcgKzM1Niw3IEBACiAJCQlnb3RvIGFib3J0OwogCQl9CiAJCXAtPnJkZXYgPSBOVUxMOwotCQlzeW5jaHJvbml6ZV9rZXJuZWwoKTsKKwkJc3luY2hyb25pemVfcmN1KCk7CiAJCWlmIChhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCS8qIGxvc3QgdGhlIHJhY2UsIHRyeSBsYXRlciAqLwogCQkJZXJyID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGEzODkzOTQuLjgzMzgwYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTc5Nyw3ICs3OTcsNyBAQAogCQkJZ290byBhYm9ydDsKIAkJfQogCQlwLT5yZGV2ID0gTlVMTDsKLQkJc3luY2hyb25pemVfa2VybmVsKCk7CisJCXN5bmNocm9uaXplX3JjdSgpOwogCQlpZiAoYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQkvKiBsb3N0IHRoZSByYWNlLCB0cnkgbGF0ZXIgKi8KIAkJCWVyciA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IGIxMDBiZmUuLmU5ZGMyODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtOTc3LDcgKzk3Nyw3IEBACiAJCQlnb3RvIGFib3J0OwogCQl9CiAJCXAtPnJkZXYgPSBOVUxMOwotCQlzeW5jaHJvbml6ZV9rZXJuZWwoKTsKKwkJc3luY2hyb25pemVfcmN1KCk7CiAJCWlmIChhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCS8qIGxvc3QgdGhlIHJhY2UsIHRyeSBsYXRlciAqLwogCQkJZXJyID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IDUyYzNhODEuLmU5NmUyYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTE4NzMsNyArMTg3Myw3IEBACiAJCQlnb3RvIGFib3J0OwogCQl9CiAJCXAtPnJkZXYgPSBOVUxMOwotCQlzeW5jaHJvbml6ZV9rZXJuZWwoKTsKKwkJc3luY2hyb25pemVfcmN1KCk7CiAJCWlmIChhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCS8qIGxvc3QgdGhlIHJhY2UsIHRyeSBsYXRlciAqLwogCQkJZXJyID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNm1haW4uYyBiL2RyaXZlcnMvbWQvcmFpZDZtYWluLmMKaW5kZXggN2UzMGFiMi4uOGEzM2YzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNm1haW4uYworKysgYi9kcml2ZXJzL21kL3JhaWQ2bWFpbi5jCkBAIC0yMDM4LDcgKzIwMzgsNyBAQAogCQkJZ290byBhYm9ydDsKIAkJfQogCQlwLT5yZGV2ID0gTlVMTDsKLQkJc3luY2hyb25pemVfa2VybmVsKCk7CisJCXN5bmNocm9uaXplX3JjdSgpOwogCQlpZiAoYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQkvKiBsb3N0IHRoZSByYWNlLCB0cnkgbGF0ZXIgKi8KIAkJCWVyciA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXItY29tbW9uLmMKaW5kZXggOGM4NDJlMi4uODRhNDlkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXItY29tbW9uLmMKQEAgLTEzMSwxMCArMTMxLDEwIEBACiAJWyAxOCBdID0gS0VZX0tQMCwKIAogCVsgIDAgXSA9IEtFWV9QT1dFUiwKLS8vICAgICAgWyAyNyBdID0gTVRTIGJ1dHRvbgorCVsgMjcgXSA9IEtFWV9MQU5HVUFHRSwgIC8vTVRTIGJ1dHRvbgogCVsgIDIgXSA9IEtFWV9UVU5FUiwgICAgIC8vIFRWL0ZNCiAJWyAzMCBdID0gS0VZX1ZJREVPLAotLy8gICAgICBbIDIyIF0gPSBkaXNwbGF5IGJ1dHRvbgorCVsgMjIgXSA9IEtFWV9JTkZPLCAgICAgIC8vZGlzcGxheSBidXR0b24KIAlbICA0IF0gPSBLRVlfVk9MVU1FVVAsCiAJWyAgOCBdID0gS0VZX1ZPTFVNRURPV04sCiAJWyAxMiBdID0gS0VZX0NIQU5ORUxVUCwKQEAgLTE0Miw3ICsxNDIsNyBAQAogCVsgIDMgXSA9IEtFWV9aT09NLCAgICAgIC8vIGZ1bGxzY3JlZW4KIAlbIDMxIF0gPSBLRVlfU1VCVElUTEUsICAvLyBjbG9zZWQgY2FwdGlvbi90ZWxldGV4dAogCVsgMzIgXSA9IEtFWV9TTEVFUCwKLS8vICAgICAgWyA0MSBdID0gYm9zcyBrZXkKKwlbIDQxIF0gPSBLRVlfU0VBUkNILCAgICAvL2Jvc3Mga2V5CiAJWyAyMCBdID0gS0VZX01VVEUsCiAJWyA0MyBdID0gS0VZX1JFRCwKIAlbIDQ0IF0gPSBLRVlfR1JFRU4sCkBAIC0xNTAsMTcgKzE1MCwxNyBAQAogCVsgNDYgXSA9IEtFWV9CTFVFLAogCVsgMjQgXSA9IEtFWV9LUFBMVVMsICAgIC8vZmluZSB0dW5lICsKIAlbIDI1IF0gPSBLRVlfS1BNSU5VUywgICAvL2ZpbmUgdHVuZSAtCi0vLyAgICAgIFsgNDIgXSA9IHBpY3R1cmUgaW4gcGljdHVyZQotICAgICAgICBbIDMzIF0gPSBLRVlfS1BET1QsCisJWyA0MiBdID0gS0VZX0FOR0xFLCAgICAgLy9waWN0dXJlIGluIHBpY3R1cmUKKwlbIDMzIF0gPSBLRVlfS1BET1QsCiAJWyAxOSBdID0gS0VZX0tQRU5URVIsCi0vLyAgICAgIFsgMTcgXSA9IHJlY2FsbAorCVsgMTcgXSA9IEtFWV9BR0FJTiwgICAgIC8vcmVjYWxsCiAJWyAzNCBdID0gS0VZX0JBQ0ssCiAJWyAzNSBdID0gS0VZX1BMQVlQQVVTRSwKIAlbIDM2IF0gPSBLRVlfTkVYVCwKLS8vICAgICAgWyAzNyBdID0gdGltZSBzaGlmdGluZworCVsgMzcgXSA9IEtFWV9ULCAgICAgICAgIC8vdGltZSBzaGlmdGluZwogCVsgMzggXSA9IEtFWV9TVE9QLAotCVsgMzkgXSA9IEtFWV9SRUNPUkQKLS8vICAgICAgWyA0MCBdID0gc25hcHNob3QKKwlbIDM5IF0gPSBLRVlfUkVDT1JELAorCVsgNDAgXSA9IEtFWV9TSFVGRkxFICAgIC8vc25hcHNob3QKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc193aW5mYXN0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKaW5kZXggMTkzMGI1MS4uMDExODYwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiZHZiLXBsbC5oIgogI2luY2x1ZGUgImN4MjI3MDIuaCIKIAogCkBAIC0yMDMsNyArMjA0LDE5IEBACiAKIAkvKiBzZXQgUExMICovCiAgICAgICAgIGN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDBELCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsMHgwRCkgJjB4ZmUpOwotCXN0YXRlLT5jb25maWctPnBsbF9zZXQoZmUsIHApOworCWlmIChzdGF0ZS0+Y29uZmlnLT5wbGxfc2V0KSB7CisJCXN0YXRlLT5jb25maWctPnBsbF9zZXQoZmUsIHApOworCX0gZWxzZSBpZiAoc3RhdGUtPmNvbmZpZy0+cGxsX2Rlc2MpIHsKKwkJdTggcGxsYnVmWzRdOworCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+cGxsX2FkZHJlc3MsCisJCQkJICAgICAgIC5idWYgPSBwbGxidWYsIC5sZW4gPSA0IH07CisJCWR2Yl9wbGxfY29uZmlndXJlKHN0YXRlLT5jb25maWctPnBsbF9kZXNjLCBwbGxidWYsCisJCQkJICBwLT5mcmVxdWVuY3ksCisJCQkJICBwLT51Lm9mZG0uYmFuZHdpZHRoKTsKKwkJaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCX0gZWxzZSB7CisJCUJVRygpOworCX0KICAgICAgICAgY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEQsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwweDBEKSB8IDEpOwogCiAJLyogc2V0IGludmVyc2lvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmgKaW5kZXggNmUzNGY5OS4uNTU5ZmRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5oCkBAIC0zNiw2ICszNiw5IEBACiAJdTggZGVtb2RfYWRkcmVzczsKIAogCS8qIFBMTCBtYWludGVuYW5jZSAqLworCXU4IHBsbF9hZGRyZXNzOworCXN0cnVjdCBkdmJfcGxsX2Rlc2MgKnBsbF9kZXNjOworCiAJaW50ICgqcGxsX2luaXQpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKIAlpbnQgKCpwbGxfc2V0KShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMpOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCBjMWIzNTQyLi5kM2RkNDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0yNTIsNiArMjUyLDcgQEAKIAlkZXBlbmRzIG9uIFZJREVPX1NBQTcxMzQgJiYgRFZCX0NPUkUKIAlzZWxlY3QgVklERU9fQlVGX0RWQgogCXNlbGVjdCBEVkJfTVQzNTIKKwlzZWxlY3QgRFZCX0NYMjI3MDIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRFZCIGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgUGhpbGlwcyBzYWE3MTM0IGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZHJpdmVyLmMKaW5kZXggYzEzZjIyMi4uMDMzY2M1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1kcml2ZXIuYwpAQCAtMzE2OSw3ICszMTY5LDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBzb21lIGRlYnVnIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1pbnQgYnR0dl9yaXNjX2RlY29kZSh1MzIgcmlzYykKK3N0YXRpYyBpbnQgYnR0dl9yaXNjX2RlY29kZSh1MzIgcmlzYykKIHsKIAlzdGF0aWMgY2hhciAqaW5zdHJbMTZdID0gewogCQlbIEJUODQ4X1JJU0NfV1JJVEUgICAgID4+IDI4IF0gPSAid3JpdGUiLApAQCAtMzIwNiw4ICszMjA2LDggQEAKIAlyZXR1cm4gaW5jcltyaXNjID4+IDI4XSA/IGluY3JbcmlzYyA+PiAyOF0gOiAxOwogfQogCi12b2lkIGJ0dHZfcmlzY19kaXNhc20oc3RydWN0IGJ0dHYgKmJ0diwKLQkJICAgICAgc3RydWN0IGJ0Y3hfcmlzY21lbSAqcmlzYykKK3N0YXRpYyB2b2lkIGJ0dHZfcmlzY19kaXNhc20oc3RydWN0IGJ0dHYgKmJ0diwKKwkJCSAgICAgc3RydWN0IGJ0Y3hfcmlzY21lbSAqcmlzYykKIHsKIAl1bnNpZ25lZCBpbnQgaSxqLG47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pMmMuYwppbmRleCBlNDJmMWVjMS4uZTNmNDc3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pMmMuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAiYnR0dnAuaCIKQEAgLTEzMCwxNyArMTMxLDE0IEBACiBzdGF0aWMgaW50CiBidHR2X2kyY193YWl0X2RvbmUoc3RydWN0IGJ0dHYgKmJ0dikKIHsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAlpbnQgcmMgPSAwOwogCi0JYWRkX3dhaXRfcXVldWUoJmJ0di0+aTJjX3F1ZXVlLCAmd2FpdCk7Ci0JaWYgKDAgPT0gYnR2LT5pMmNfZG9uZSkKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMjApOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZidHYtPmkyY19xdWV1ZSwgJndhaXQpOworCS8qIHRpbWVvdXQgKi8KKwlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYnR2LT5pMmNfcXVldWUsCisJCWJ0di0+aTJjX2RvbmUsIG1zZWNzX3RvX2ppZmZpZXMoODUpKSA9PSAtRVJFU1RBUlRTWVMpCiAKLQlpZiAoMCA9PSBidHYtPmkyY19kb25lKQotCQkvKiB0aW1lb3V0ICovCi0JCXJjID0gLUVJTzsKKwlyYyA9IC1FSU87CisKIAlpZiAoYnR2LT5pMmNfZG9uZSAmIEJUODQ4X0lOVF9SQUNLKQogCQlyYyA9IDE7CiAJYnR2LT5pMmNfZG9uZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKaW5kZXggMjZhNjEzOC4uMWZmNzliNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwpAQCAtNDI5LDcgKzQyOSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGRlYnVnIGhlbHBlciBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1pbnQgY3g4OF9yaXNjX2RlY29kZSh1MzIgcmlzYykKK3N0YXRpYyBpbnQgY3g4OF9yaXNjX2RlY29kZSh1MzIgcmlzYykKIHsKIAlzdGF0aWMgY2hhciAqaW5zdHJbMTZdID0gewogCQlbIFJJU0NfU1lOQyAgICA+PiAyOCBdID0gInN5bmMiLApAQCAtNTQyLDcgKzU0Miw3IEBACiAJICAgICAgIGNvcmUtPm5hbWUsY3hfcmVhZChjaC0+Y250Ml9yZWcpKTsKIH0KIAotY2hhciAqY3g4OF9wY2lfaXJxc1szMl0gPSB7CitzdGF0aWMgY2hhciAqY3g4OF9wY2lfaXJxc1szMl0gPSB7CiAJInZpZCIsICJhdWQiLCAidHMiLCAidmlwIiwgImhzdCIsICI1IiwgIjYiLCAidG0xIiwKIAkic3JjX2RtYSIsICJkc3RfZG1hIiwgInJpc2NfcmRfZXJyIiwgInJpc2Nfd3JfZXJyIiwKIAkiYnJkZ19lcnIiLCAic3JjX2RtYV9lcnIiLCAiZHN0X2RtYV9lcnIiLCAiaXBiX2RtYV9lcnIiLApAQCAtMTIwNiw3ICsxMjA2LDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBFWFBPUlRfU1lNQk9MKGN4ODhfcHJpbnRfaW9jdGwpOwotRVhQT1JUX1NZTUJPTChjeDg4X3BjaV9pcnFzKTsKIEVYUE9SVF9TWU1CT0woY3g4OF92aWRfaXJxcyk7CiBFWFBPUlRfU1lNQk9MKGN4ODhfbXBlZ19pcnFzKTsKIEVYUE9SVF9TWU1CT0woY3g4OF9wcmludF9pcnFiaXRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggYmM2ZjE4Yy4uOWQxNWQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAKIC8qIHRob3NlIHR3byBmcm9udGVuZHMgbmVlZCBtZXJnaW5nIHZpYSBsaW51eHR2IGN2cyAuLi4gKi8KLSNkZWZpbmUgSEFWRV9DWDIyNzAyIDAKKyNkZWZpbmUgSEFWRV9DWDIyNzAyIDEKICNkZWZpbmUgSEFWRV9PUjUxMTMyIDEKIAogI2luY2x1ZGUgImN4ODguaCIKQEAgLTkxLDcgKzkxLDcgQEAKIAljeDg4X2ZyZWVfYnVmZmVyKGRldi0+cGNpLCAoc3RydWN0IGN4ODhfYnVmZmVyKil2Yik7CiB9CiAKLXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgZHZiX3FvcHMgPSB7CitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBkdmJfcW9wcyA9IHsKIAkuYnVmX3NldHVwICAgID0gZHZiX2J1Zl9zZXR1cCwKIAkuYnVmX3ByZXBhcmUgID0gZHZiX2J1Zl9wcmVwYXJlLAogCS5idWZfcXVldWUgICAgPSBkdmJfYnVmX3F1ZXVlLApAQCAtMTkxLDcgKzE5MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBvcjUxMTMyX2NvbmZpZyBwY2hkdHZfaGQzMDAwID0geworc3RhdGljIHN0cnVjdCBvcjUxMTMyX2NvbmZpZyBwY2hkdHZfaGQzMDAwID0gewogCS5kZW1vZF9hZGRyZXNzICAgID0gMHgxNSwKIAkucGxsX2FkZHJlc3MgICAgICA9IDB4NjEsCiAJLnBsbF9kZXNjICAgICAgICAgPSAmZHZiX3BsbF90aG9tc29uX2R0dDc2MTAsCkBAIC0yNDMsMTAgKzI0Myw4IEBACiAJCWJyZWFrOwogI2VuZGlmCiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iCi0JCSAgICAgICAiJXM6IHlvdSBtaWdodCB3YW50IHRvIGxvb2sgb3V0IGZvciBwYXRjaGVzIGhlcmU6XG4iCi0JCSAgICAgICAiJXM6ICAgICBodHRwOi8vZGwuYnl0ZXNleC5vcmcvcGF0Y2hlcy9cbiIsCi0JCSAgICAgICBkZXYtPmNvcmUtPm5hbWUsIGRldi0+Y29yZS0+bmFtZSwgZGV2LT5jb3JlLT5uYW1lKTsKKwkJcHJpbnRrKCIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLAorCQkgICAgICAgZGV2LT5jb3JlLT5uYW1lKTsKIAkJYnJlYWs7CiAJfQogCWlmIChOVUxMID09IGRldi0+ZHZiLmZyb250ZW5kKSB7CkBAIC0zMDgsOSArMzA2LDExIEBACiAJCQkgICAgZGV2KTsKIAllcnIgPSBkdmJfcmVnaXN0ZXIoZGV2KTsKIAlpZiAoMCAhPSBlcnIpCi0JCWdvdG8gZmFpbF9mcmVlOworCQlnb3RvIGZhaWxfZmluaTsKIAlyZXR1cm4gMDsKIAorIGZhaWxfZmluaToKKwljeDg4MDJfZmluaV9jb21tb24oZGV2KTsKICBmYWlsX2ZyZWU6CiAJa2ZyZWUoZGV2KTsKICBmYWlsX2NvcmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCmluZGV4IDYwODAwMTcuLjA3MjViMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCkBAIC00NSw3ICs0NSw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXZvaWQgY3g4ODAwX2JpdF9zZXRzY2wodm9pZCAqZGF0YSwgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgY3g4ODAwX2JpdF9zZXRzY2wodm9pZCAqZGF0YSwgaW50IHN0YXRlKQogewogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkYXRhOwogCkBAIC01Nyw3ICs1Nyw3IEBACiAJY3hfcmVhZChNT19JMkMpOwogfQogCi12b2lkIGN4ODgwMF9iaXRfc2V0c2RhKHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKK3N0YXRpYyB2b2lkIGN4ODgwMF9iaXRfc2V0c2RhKHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGF0YTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12YmkuYwppbmRleCA0NzFlNTA4Li4wNTg0ZmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12YmkuYwpAQCAtNDYsOSArNDYsOSBAQAogCX0KIH0KIAotaW50IGN4ODgwMF9zdGFydF92YmlfZG1hKHN0cnVjdCBjeDg4MDBfZGV2ICAgICpkZXYsCi0JCQkgc3RydWN0IGN4ODhfZG1hcXVldWUgKnEsCi0JCQkgc3RydWN0IGN4ODhfYnVmZmVyICAgKmJ1ZikKK3N0YXRpYyBpbnQgY3g4ODAwX3N0YXJ0X3ZiaV9kbWEoc3RydWN0IGN4ODgwMF9kZXYgICAgKmRldiwKKwkJCQlzdHJ1Y3QgY3g4OF9kbWFxdWV1ZSAqcSwKKwkJCQlzdHJ1Y3QgY3g4OF9idWZmZXIgICAqYnVmKQogewogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCmluZGV4IDcwMWY1OTQuLmQxZjVjOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJCS5zaGlmdCAgICAgICAgICAgICAgICAgPSAwLAogCX0KIH07Ci1jb25zdCBpbnQgQ1g4ODAwX0NUTFMgPSBBUlJBWV9TSVpFKGN4ODgwMF9jdGxzKTsKK3N0YXRpYyBjb25zdCBpbnQgQ1g4ODAwX0NUTFMgPSBBUlJBWV9TSVpFKGN4ODgwMF9jdGxzKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogcmVzb3VyY2UgbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNjY1LDcgKzY2NSw3IEBACiAJY3g4OF9mcmVlX2J1ZmZlcihmaC0+ZGV2LT5wY2ksYnVmKTsKIH0KIAotc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDg4MDBfdmlkZW9fcW9wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4ODgwMF92aWRlb19xb3BzID0gewogCS5idWZfc2V0dXAgICAgPSBidWZmZXJfc2V0dXAsCiAJLmJ1Zl9wcmVwYXJlICA9IGJ1ZmZlcl9wcmVwYXJlLAogCS5idWZfcXVldWUgICAgPSBidWZmZXJfcXVldWUsCkBAIC0xOTI0LDcgKzE5MjQsNyBAQAogCS5sbHNlZWsgICAgICAgID0gbm9fbGxzZWVrLAogfTsKIAotc3RydWN0IHZpZGVvX2RldmljZSBjeDg4MDBfdmlkZW9fdGVtcGxhdGUgPQorc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY3g4ODAwX3ZpZGVvX3RlbXBsYXRlID0KIHsKIAkubmFtZSAgICAgICAgICA9ICJjeDg4MDAtdmlkZW8iLAogCS50eXBlICAgICAgICAgID0gVklEX1RZUEVfQ0FQVFVSRXxWSURfVFlQRV9UVU5FUnxWSURfVFlQRV9TQ0FMRVMsCkBAIC0xOTMzLDcgKzE5MzMsNyBAQAogCS5taW5vciAgICAgICAgID0gLTEsCiB9OwogCi1zdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4ODgwMF92YmlfdGVtcGxhdGUgPQorc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY3g4ODAwX3ZiaV90ZW1wbGF0ZSA9CiB7CiAJLm5hbWUgICAgICAgICAgPSAiY3g4ODAwLXZiaSIsCiAJLnR5cGUgICAgICAgICAgPSBWSURfVFlQRV9URUxFVEVYVHxWSURfVFlQRV9UVU5FUiwKQEAgLTE5NTEsNyArMTk1MSw3IEBACiAJLmxsc2VlayAgICAgICAgPSBub19sbHNlZWssCiB9OwogCi1zdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4ODgwMF9yYWRpb190ZW1wbGF0ZSA9CitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBjeDg4MDBfcmFkaW9fdGVtcGxhdGUgPQogewogCS5uYW1lICAgICAgICAgID0gImN4ODgwMC1yYWRpbyIsCiAJLnR5cGUgICAgICAgICAgPSBWSURfVFlQRV9UVU5FUiwKQEAgLTIyMjYsNyArMjIyNiw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0cnVjdCBwY2lfZGV2aWNlX2lkIGN4ODgwMF9wY2lfdGJsW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3g4ODAwX3BjaV90YmxbXSA9IHsKIAl7CiAJCS52ZW5kb3IgICAgICAgPSAweDE0ZjEsCiAJCS5kZXZpY2UgICAgICAgPSAweDg4MDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAppbmRleCBiMzUxZDllLi44OGVhYWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKQEAgLTQyMCw3ICs0MjAsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4ODgtY29yZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLWV4dGVybiBjaGFyICpjeDg4X3BjaV9pcnFzWzMyXTsKIGV4dGVybiBjaGFyICpjeDg4X3ZpZF9pcnFzWzMyXTsKIGV4dGVybiBjaGFyICpjeDg4X21wZWdfaXJxc1szMl07CiBleHRlcm4gdm9pZCBjeDg4X3ByaW50X2lycWJpdHMoY2hhciAqbmFtZSwgY2hhciAqdGFnLCBjaGFyICoqc3RyaW5ncywKQEAgLTQ3Miw5ICs0NzEsNiBAQAogLyogY3g4OC12YmkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogdm9pZCBjeDg4MDBfdmJpX2ZtdChzdHJ1Y3QgY3g4ODAwX2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOwotaW50IGN4ODgwMF9zdGFydF92YmlfZG1hKHN0cnVjdCBjeDg4MDBfZGV2ICAgICpkZXYsCi0JCQkgc3RydWN0IGN4ODhfZG1hcXVldWUgKnEsCi0JCQkgc3RydWN0IGN4ODhfYnVmZmVyICAgKmJ1Zik7CiBpbnQgY3g4ODAwX3N0b3BfdmJpX2RtYShzdHJ1Y3QgY3g4ODAwX2RldiAqZGV2KTsKIGludCBjeDg4MDBfcmVzdGFydF92YmlfcXVldWUoc3RydWN0IGN4ODgwMF9kZXYgICAgKmRldiwKIAkJCSAgICAgc3RydWN0IGN4ODhfZG1hcXVldWUgKnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAuYwppbmRleCBjOTdkZjcwLi43ZmJiODU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAuYwpAQCAtMzgwLDcgKzM4MCw5IEBACiAJaW50IHZhbCA9IDAsIGJhbCA9IDA7CiAKIAlpZiAoIW11dGVkKSB7Ci0JCXZhbCA9ICh2b2x1bWUgKiAweDdGIC8gNjU1MzUpIDw8IDg7CisJCS8qIDB4N2YgaW5zdGVhZCBpZiAweDczIGhlcmUgaGFzIHNvdW5kIHF1YWxpdHkgaXNzdWVzLAorCQkgKiBwcm9iYWJseSBkdWUgdG8gb3Zlcm1vZHVsYXRpb24gKyBjbGlwcGluZyAuLi4gKi8KKwkJdmFsID0gKHZvbHVtZSAqIDB4NzMgLyA2NTUzNSkgPDwgODsKIAl9CiAJaWYgKHZhbCkgewogCQliYWwgPSAoYmFsYW5jZSAvIDI1NikgLSAxMjg7CkBAIC05OTcsNyArOTk5LDEzIEBACiB7CiAJc3dpdGNoIChub3JtKSB7CiAJY2FzZSBWSURFT19NT0RFX1BBTDoKKyNpZiAxCisJCS8qIGV4cGVyaW1lbnRhbDogbm90IHN1cmUgdGhpcyB3b3JrcyB3aXRoIGFsbCBjaGlwIHZlcnNpb25zICovCisJCXJldHVybiAweDcwMDM7CisjZWxzZQorCQkvKiBwcmV2aW91cyB2YWx1ZSwgdHJ5IHRoaXMgaWYgaXQgYnJlYWtzIC4uLiAqLwogCQlyZXR1cm4gMHgxMDAzOworI2VuZGlmCiAJY2FzZSBWSURFT19NT0RFX05UU0M6ICAvKiBCVFNDICovCiAJCXJldHVybiAweDIwMDM7CiAJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgpAQCAtMTI2NCw2ICsxMjcyLDcgQEAKIAlpbnQgdmFsLCBzdGQsIGk7CiAKIAlwcmludGsoIm1zcDM0eHhnOiBkYWVtb24gc3RhcnRlZFxuIik7CisJbXNwLT5zb3VyY2UgPSAxOyAvKiBkZWZhdWx0ICovCiAJZm9yICg7OykgewogCQlkMnByaW50ayhLRVJOX0RFQlVHICJtc3AzNHh4ZzogdGhyZWFkOiBzbGVlcFxuIik7CiAJCW1zcDM0eHhfc2xlZXAobXNwLC0xKTsKQEAgLTEzMzQsOCArMTM0Myw5IEBACiAKIAkvKiBmaXggbWF0cml4IG1vZGUgdG8gc3RlcmVvIGFuZCBsZXQgdGhlIG1zcCBjaG9vc2Ugd2hhdAogCSAqIHRvIG91dHB1dCBhY2NvcmRpbmcgdG8gJ3NvdXJjZScsIGFzIHJlY29tbWVuZGVkCisJICogZm9yIE1PTk8gKHNvdXJjZT09MCkgZG93bm1peGluZyBzZXQgYml0Wzc6MF0gdG8gMHgzMAogCSAqLwotCWludCB2YWx1ZSA9IChzb3VyY2UmMHgwNyk8PDh8KHNvdXJjZT09MCA/IDB4MDA6MHgyMCk7CisJaW50IHZhbHVlID0gKHNvdXJjZSYweDA3KTw8OHwoc291cmNlPT0wID8gMHgzMDoweDIwKTsKIAlkcHJpbnRrKCJtc3AzNHh4Zzogc2V0IHNvdXJjZSB0byAlZCAoMHgleClcbiIsIHNvdXJjZSwgdmFsdWUpOwogCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwKIAkJICAgICAgIEkyQ19NU1AzNDAwQ19ERlAsCkBAIC0xMzU5LDcgKzEzNjksNyBAQAogCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwKIAkJICAgICAgIEkyQ19NU1AzNDAwQ19ERU0sCiAJCSAgICAgICAweDIyLCAvKiBhMiB0aHJlc2hvbGQgZm9yIHN0ZXJlby9iaWxpbmd1YWwgKi8KLQkJICAgICAgIHNvdXJjZT09MCA/IDB4N2YwOnN0ZXJlb190aHJlc2hvbGQpOworCQkgICAgICAgc3RlcmVvX3RocmVzaG9sZCk7CiAJbXNwLT5zb3VyY2U9c291cmNlOwogfQogCkBAIC0xMzk0LDcgKzE0MDQsNyBAQAogc3RhdGljIHZvaWQgbXNwMzR4eGdfc2V0X2F1ZG1vZGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGF1ZG1vZGUpCiB7CiAJc3RydWN0IG1zcDM0MDBjICptc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgc291cmNlID0gMDsKKwlpbnQgc291cmNlOwogCiAJc3dpdGNoIChhdWRtb2RlKSB7CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKQEAgLTE0MTAsOSArMTQyMCwxMCBAQAogCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgogCQlzb3VyY2U9NDsgLyogc3RlcmVvIG9yIEIgKi8KIAkJYnJlYWs7Ci0JZGVmYXVsdDogLyogZG9pbmcgbm90aGluZzogYSBzYWZlLCBzYW5lIGRlZmF1bHQgKi8KKwlkZWZhdWx0OgogCQlhdWRtb2RlID0gMDsKLQkJcmV0dXJuOworCQlzb3VyY2UgID0gMTsKKwkJYnJlYWs7CiAJfQogCW1zcC0+YXVkbW9kZSA9IGF1ZG1vZGU7CiAJbXNwMzR4eGdfc2V0X3NvdXJjZShjbGllbnQsIHNvdXJjZSk7CkBAIC0xNTE0LDEyICsxNTI1LDkgQEAKIAogCW1zcC0+b3Btb2RlID0gb3Btb2RlOwogCWlmIChPUE1PREVfQVVUTyA9PSBtc3AtPm9wbW9kZSkgewotI2lmIDAgLyogc2VlbXMgdG8gd29yayBmb3IgaXZ0diBvbmx5LCBkaXNhYmxlIGJ5IGRlZmF1bHQgZm9yIG5vdyAuLi4gKi8KIAkJaWYgKEhBVkVfU0lNUExFUihtc3ApKQogCQkJbXNwLT5vcG1vZGUgPSBPUE1PREVfU0lNUExFUjsKLQkJZWxzZQotI2VuZGlmCi0JCWlmIChIQVZFX1NJTVBMRShtc3ApKQorCQllbHNlIGlmIChIQVZFX1NJTVBMRShtc3ApKQogCQkJbXNwLT5vcG1vZGUgPSBPUE1PREVfU0lNUExFOwogCQllbHNlCiAJCQltc3AtPm9wbW9kZSA9IE9QTU9ERV9NQU5VQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKaW5kZXggY2VlMTM1OC4uZmU2YWJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYwpAQCAtMzIsOSArMzIsMzIgQEAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXI7CiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlOwogCitlbnVtIHNhYTY3NTJoc192aWRlb2Zvcm1hdCB7CisJU0FBNjc1MkhTX1ZGX0QxID0gMCwgICAgLyogc3RhbmRhcmQgRDEgdmlkZW8gZm9ybWF0OiA3MjB4NTc2ICovCisJU0FBNjc1MkhTX1ZGXzJfM19EMSA9IDEsLyogMi8zRDEgdmlkZW8gZm9ybWF0OiA0ODB4NTc2ICovCisJU0FBNjc1MkhTX1ZGXzFfMl9EMSA9IDIsLyogMS8yRDEgdmlkZW8gZm9ybWF0OiAzNTJ4NTc2ICovCisJU0FBNjc1MkhTX1ZGX1NJRiA9IDMsICAgLyogU0lGIHZpZGVvIGZvcm1hdDogMzUyeDI4OCAqLworCVNBQTY3NTJIU19WRl9VTktOT1dOLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2Zvcm1hdCB2NGwyX2Zvcm1hdF90YWJsZVtdID0KK3sKKwlbU0FBNjc1MkhTX1ZGX0QxXSA9IHsKKwkJLmZtdC5waXgud2lkdGggPSA3MjAsIC5mbXQucGl4LmhlaWdodCA9IDU3NiB9LAorCVtTQUE2NzUySFNfVkZfMl8zX0QxXSA9IHsKKwkJLmZtdC5waXgud2lkdGggPSA0ODAsIC5mbXQucGl4LmhlaWdodCA9IDU3NiB9LAorCVtTQUE2NzUySFNfVkZfMV8yX0QxXSA9IHsKKwkJLmZtdC5waXgud2lkdGggPSAzNTIsIC5mbXQucGl4LmhlaWdodCA9IDU3NiB9LAorCVtTQUE2NzUySFNfVkZfU0lGXSA9IHsKKwkJLmZtdC5waXgud2lkdGggPSAzNTIsIC5mbXQucGl4LmhlaWdodCA9IDI4OCB9LAorCVtTQUE2NzUySFNfVkZfVU5LTk9XTl0gPSB7CisJCS5mbXQucGl4LndpZHRoID0gMCwgLmZtdC5waXguaGVpZ2h0ID0gMH0sCit9OworCiBzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAgICAgICAgICAgICBjbGllbnQ7CiAJc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiAgcGFyYW1zOworCWVudW0gc2FhNjc1MmhzX3ZpZGVvZm9ybWF0ICAgIHZpZGVvX2Zvcm1hdDsKIH07CiAKIGVudW0gc2FhNjc1MmhzX2NvbW1hbmQgewpAQCAtMjU2LDYgKzI3OSw1MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzYWE2NzUyaHNfc2V0X3N1YnNhbXBsaW5nKHN0cnVjdCBpMmNfY2xpZW50KiBjbGllbnQsCisJCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0KiBmKQoreworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgZGlzdF8zNTIsIGRpc3RfNDgwLCBkaXN0XzcyMDsKKworCS8qCisJICBGSVhNRTogdHJhbnNsYXRlIGFuZCByb3VuZCB3aWR0aC9oZWlnaHQgaW50byBFTVBSRVNTCisJICBzdWJzYW1wbGUgdHlwZToKKworCSAgdHlwZSAgIHwgICBQQUwgICB8ICBOVFNDCisJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgIFNJRiAgICB8IDM1MngyODggfCAzNTJ4MjQwCisJICAxLzIgRDEgfCAzNTJ4NTc2IHwgMzUyeDQ4MAorCSAgMi8zIEQxIHwgNDgweDU3NiB8IDQ4MHg0ODAKKwkgIEQxICAgICB8IDcyMHg1NzYgfCA3MjB4NDgwCisJKi8KKworCWRpc3RfMzUyID0gYWJzKGYtPmZtdC5waXgud2lkdGggLSAzNTIpOworCWRpc3RfNDgwID0gYWJzKGYtPmZtdC5waXgud2lkdGggLSA0ODApOworCWRpc3RfNzIwID0gYWJzKGYtPmZtdC5waXgud2lkdGggLSA3MjApOworCWlmIChkaXN0XzcyMCA8IGRpc3RfNDgwKSB7CisJCWYtPmZtdC5waXgud2lkdGggPSA3MjA7CisJCWYtPmZtdC5waXguaGVpZ2h0ID0gNTc2OworCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfRDE7CisJfQorCWVsc2UgaWYgKGRpc3RfNDgwIDwgZGlzdF8zNTIpIHsKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDQ4MDsKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSA1NzY7CisJCWgtPnZpZGVvX2Zvcm1hdCA9IFNBQTY3NTJIU19WRl8yXzNfRDE7CisJfQorCWVsc2UgeworCQlmLT5mbXQucGl4LndpZHRoID0gMzUyOworCQlpZiAoYWJzKGYtPmZtdC5waXguaGVpZ2h0IC0gNTc2KSA8CisJCSAgICBhYnMoZi0+Zm10LnBpeC5oZWlnaHQgLSAyODgpKSB7CisJCQlmLT5mbXQucGl4LmhlaWdodCA9IDU3NjsKKwkJCWgtPnZpZGVvX2Zvcm1hdCA9IFNBQTY3NTJIU19WRl8xXzJfRDE7CisJCX0KKwkJZWxzZSB7CisJCQlmLT5mbXQucGl4LmhlaWdodCA9IDI4ODsKKwkJCWgtPnZpZGVvX2Zvcm1hdCA9IFNBQTY3NTJIU19WRl9TSUY7CisJCX0KKwl9Cit9CisKIAogc3RhdGljIHZvaWQgc2FhNjc1MmhzX3NldF9wYXJhbXMoc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCwKIAkJCQkgc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiogcGFyYW1zKQpAQCAtMzE1LDcgKzM4Myw3IEBACiAKIAkvLyBTZXQgdmlkZW8gZm9ybWF0IC0gbXVzdCBiZSBkb25lIGZpcnN0IGFzIGl0IHJlc2V0cyBvdGhlciBzZXR0aW5ncwogCWJ1ZlswXSA9IDB4NDE7Ci0JYnVmWzFdID0gMCAvKiBNUEVHX1ZJREVPX0ZPUk1BVF9EMSAqLzsKKwlidWZbMV0gPSBoLT52aWRlb19mb3JtYXQ7CiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKTsKIAogICAgICAgICAvLyBzZXQgYml0cmF0ZQpAQCAtNDk0LDYgKzU2MiwyNSBAQAogCWNhc2UgVklESU9DX0dfTVBFR0NPTVA6CiAJCSpwYXJhbXMgPSBoLT5wYXJhbXM7CiAJCWJyZWFrOworCWNhc2UgVklESU9DX0dfRk1UOgorCXsKKyAgICAgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOworCisJICAgaWYgKGgtPnZpZGVvX2Zvcm1hdCA9PSBTQUE2NzUySFNfVkZfVU5LTk9XTikKKwkJICAgaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGX0QxOworCSAgIGYtPmZtdC5waXgud2lkdGggPQorCQkgICB2NGwyX2Zvcm1hdF90YWJsZVtoLT52aWRlb19mb3JtYXRdLmZtdC5waXgud2lkdGg7CisJICAgZi0+Zm10LnBpeC5oZWlnaHQgPQorCQkgICB2NGwyX2Zvcm1hdF90YWJsZVtoLT52aWRlb19mb3JtYXRdLmZtdC5waXguaGVpZ2h0OworCSAgIGJyZWFrIDsKKwl9CisJY2FzZSBWSURJT0NfU19GTVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7CisKKwkJc2FhNjc1MmhzX3NldF9zdWJzYW1wbGluZyhjbGllbnQsIGYpOworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJLyogbm90aGluZyAqLwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCmluZGV4IDE4MGQzMTcuLmM1MWViN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwpAQCAtMTgzLDEyICsxODMsMTIgQEAKIAkJLm5hbWUgICAgICAgICAgID0gIkxpZmVWaWV3IEZseVRWIFBsYXRpbnVtIEZNIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAotLy8JCS5ncGlvbWFzayAgICAgICA9IDB4ZTAwMCwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgxRTAwMCwJLyogU2V0IEdQMTYgYW5kIHVudXNlZCAxNSwxNCwxMyB0byBPdXRwdXQgKi8KIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV90diwKIAkJCS52bXV4ID0gMSwKIAkJCS5hbXV4ID0gVFYsCi0vLwkJCS5ncGlvID0gMHgwMDAwLAorCQkJLmdwaW8gPSAweDEwMDAwLAkvKiBHUDE2PTEgc2VsZWN0cyBUViBpbnB1dCAqLwogCQkJLnR2ICAgPSAxLAogICAgICAgICAgICAgICAgIH0sewogLyoJCQkubmFtZSA9IG5hbWVfdHZfbW9ubywKQEAgLTIxMiwxMiArMjEyLDEyIEBACiAJCQkuYW11eCA9IExJTkUyLAogLy8JCQkuZ3BpbyA9IDB4NDAwMCwKIAkJfX0sCi0vKgkJLnJhZGlvID0geworCQkucmFkaW8gPSB7CiAJCQkubmFtZSA9IG5hbWVfcmFkaW8sCi0JCQkuYW11eCA9IExJTkUyLAotCQkJLmdwaW8gPSAweDIwMDAsCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDAwMDAwLAkvKiBHUDE2PTAgc2VsZWN0cyBGTSByYWRpbyBhbnRlbm5hICovCiAJCX0sCi0qLwl9LAorCX0sCiAJW1NBQTcxMzRfQk9BUkRfRU1QUkVTU10gPSB7CiAJCS8qICJHZXJ0IFZlcnZvb3J0IiA8Z2VydC52ZXJ2b29ydEBwaGlsaXBzLmNvbT4gKi8KIAkJLm5hbWUJCT0gIkVNUFJFU1MiLApAQCAtMTYyOCwxMSArMTYyOCwxNyBAQAogICAgICAgICB9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAotCQkuc3VidmVuZG9yICAgID0gMHg1MTY4LAorCQkuc3VidmVuZG9yICAgID0gMHg1MTY4LAkvKiBBbmltYXRpb24gVGVjaG5vbG9naWVzIChMaWZlVmlldykgKi8KIAkJLnN1YmRldmljZSAgICA9IDB4MDIxNCwgLyogU3RhbmRhcmQgUENJLCBMUjIxNFdGICovCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fRk0sCiAgICAgICAgIH0sewogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE0ODksIC8qIEtZRSAqLworCQkuc3ViZGV2aWNlICAgID0gMHgwMjE0LCAvKiBHZW5pdXMgVmlkZW9Xb25kZXIgUHJvVFYgKi8KKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9GTSwgLyogaXMgYW4gTFIyMTRXRiBhY3R1YWxseSAqLworICAgICAgICB9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LAogCQkuc3VidmVuZG9yICAgID0gMHgxNmJlLAogCQkuc3ViZGV2aWNlICAgID0gMHgwMDAzLApAQCAtMTk0OCw2ICsxOTU0LDcgQEAKIAkJZGV2LT5oYXNfcmVtb3RlID0gMTsKIAkJYm9hcmRfZmx5dmlkZW8oZGV2KTsKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fRk06CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1k0MDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1k2MDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1k2MDBfTUszOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCBkZDRhNmM4Li5jMjg3M2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJcmV0dXJuIHJlcXVlc3RfZmlybXdhcmUoZncsIG5hbWUsICZkZXYtPnBjaS0+ZGV2KTsKIH0KIAotc3RydWN0IHRkYTEwMDR4X2NvbmZpZyBtZWRpb25fY2FyZGJ1cyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIG1lZGlvbl9jYXJkYnVzID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHgwOCwgIC8qIG5vdCBzdXJlIHRoaXMgaXMgY29ycmVjdCAqLwogCS5pbnZlcnQgICAgICAgID0gMCwKICAgICAgICAgLmludmVydF9vY2xrICAgPSAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCmluZGV4IDIwMjFlMDkuLmZhMTM1NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKQEAgLTIzMywxMCArMjMzLDcgQEAKIAkJbWVtc2V0KGYsMCxzaXplb2YoKmYpKTsKIAkJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAotCQkvKiBGSVhNRTogdHJhbnNsYXRlIHN1YnNhbXBsaW5nIHR5cGUgRU1QUkVTUyBpbnRvCi0JCSAqICAgICAgICB3aWR0aC9oZWlnaHQ6ICovCi0JCWYtPmZtdC5waXgud2lkdGggICAgICAgID0gNzIwOyAvKiBEMSAqLwotCQlmLT5mbXQucGl4LmhlaWdodCAgICAgICA9IDU3NjsKKwkJc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgY21kLCBhcmcpOwogCQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOwogCQlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9IFRTX1BBQ0tFVF9TSVpFICogZGV2LT50cy5ucl9wYWNrZXRzOwogCQlyZXR1cm4gMDsKQEAgLTI0OSwyMCArMjQ2LDcgQEAKIAkJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQkgICAgcmV0dXJuIC1FSU5WQUw7CiAKLQkJLyoKLQkJICBGSVhNRTogdHJhbnNsYXRlIGFuZCByb3VuZCB3aWR0aC9oZWlnaHQgaW50byBFTVBSRVNTCi0JCSAgc3Vic2FtcGxlIHR5cGU6Ci0KLQkJICAgICAgICAgIHR5cGUgIHwgICBQQUwgICB8ICBOVFNDCi0JCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJCSAgU0lGICAgfCAzNTJ4Mjg4IHwgMzUyeDI0MAotCQkJIDEvMiBEMSB8IDM1Mng1NzYgfCAzNTJ4NDgwCi0JCQkgMi8zIEQxIHwgNDgweDU3NiB8IDQ4MHg0ODAKLQkJCSAgRDEgICAgfCA3MjB4NTc2IHwgNzIweDQ4MAotCQkqLwotCi0JCWYtPmZtdC5waXgud2lkdGggICAgICAgID0gNzIwOyAvKiBEMSAqLwotCQlmLT5mbXQucGl4LmhlaWdodCAgICAgICA9IDU3NjsKKwkJc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgY21kLCBhcmcpOwogCQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOwogCQlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9IFRTX1BBQ0tFVF9TSVpFKiBkZXYtPnRzLm5yX3BhY2tldHM7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggNzI3ZDQzNy4uY2E1MGNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC0zNzksNiArMzc5LDcgQEAKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZVklERU8yMDAwOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlWSURFTzMwMDA6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fRk06CiAJCWlyX2NvZGVzICAgICA9IGZseXZpZGVvX2NvZGVzOwogCQltYXNrX2tleWNvZGUgPSAweEVDMDAwMDA7CiAJCW1hc2tfa2V5ZG93biA9IDB4MDA0MDAwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKaW5kZXggMDY1ZWI0MC4uODBkYzM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKQEAgLTk5MSw3ICs5OTEsNyBAQAogewogCWlmICh0ZGE5ODc0YV9TSUYgPiAyKQogCQl0ZGE5ODc0YV9TSUYgPSAxOwotCWlmICh0ZGE5ODc0YV9TVEQgPj0gOCkKKwlpZiAodGRhOTg3NGFfU1REID4gOCkKIAkJdGRhOTg3NGFfU1REID0gMDsKIAlpZih0ZGE5ODc0YV9BTVNFTCA+IDEpCiAJCXRkYTk4NzRhX0FNU0VMID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL0tjb25maWcgYi9kcml2ZXJzL21tYy9LY29uZmlnCmluZGV4IDcyZjJiNDYuLjJlNzBkNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvS2NvbmZpZwpAQCAtNTEsNyArNTEsNyBAQAogCiBjb25maWcgTU1DX1dCU0QKIAl0cmlzdGF0ZSAiV2luYm9uZCBXODNMNTF4RCBTRC9NTUMgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1NQyAmJiBJU0EKKwlkZXBlbmRzIG9uIE1NQyAmJiBJU0EgJiYgSVNBX0RNQV9BUEkKIAloZWxwCiAJICBUaGlzIHNlbGVjdHMgdGhlIFdpbmJvbmQoUikgVzgzTDUxeEQgU2VjdXJlIGRpZ2l0YWwgYW5kCiAgICAgICAgICAgTXVsdGltZWRpYSBjYXJkIEludGVyZmFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTl4LmMgYi9kcml2ZXJzL25ldC8zYzU5eC5jCmluZGV4IDQzZTJhYzUuLmI1ZTA3NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTl4LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1OXguYwpAQCAtMTU4MSw3ICsxNTgxLDggQEAKIAogCWlmIChWT1JURVhfUENJKHZwKSkgewogCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKFZPUlRFWF9QQ0kodnApLCBQQ0lfRDApOwkvKiBHbyBhY3RpdmUgKi8KLQkJcGNpX3Jlc3RvcmVfc3RhdGUoVk9SVEVYX1BDSSh2cCkpOworCQlpZiAodnAtPnBtX3N0YXRlX3ZhbGlkKQorCQkJcGNpX3Jlc3RvcmVfc3RhdGUoVk9SVEVYX1BDSSh2cCkpOwogCQlwY2lfZW5hYmxlX2RldmljZShWT1JURVhfUENJKHZwKSk7CiAJfQogCkBAIC0yNzQxLDYgKzI3NDIsNyBAQAogCQlvdXRsKDAsIGlvYWRkciArIERvd25MaXN0UHRyKTsKIAogCWlmIChmaW5hbF9kb3duICYmIFZPUlRFWF9QQ0kodnApKSB7CisJCXZwLT5wbV9zdGF0ZV92YWxpZCA9IDE7CiAJCXBjaV9zYXZlX3N0YXRlKFZPUlRFWF9QQ0kodnApKTsKIAkJYWNwaV9zZXRfV09MKGRldik7CiAJfQpAQCAtMzI0Myw5ICszMjQ1LDEwIEBACiAJCW91dHcoUnhFbmFibGUsIGlvYWRkciArIEVMM19DTUQpOwogCiAJCXBjaV9lbmFibGVfd2FrZShWT1JURVhfUENJKHZwKSwgMCwgMSk7CisKKwkJLyogQ2hhbmdlIHRoZSBwb3dlciBzdGF0ZSB0byBEMzsgUnhFbmFibGUgZG9lc24ndCB0YWtlIGVmZmVjdC4gKi8KKwkJcGNpX3NldF9wb3dlcl9zdGF0ZShWT1JURVhfUENJKHZwKSwgUENJX0QzaG90KTsKIAl9Ci0JLyogQ2hhbmdlIHRoZSBwb3dlciBzdGF0ZSB0byBEMzsgUnhFbmFibGUgZG9lc24ndCB0YWtlIGVmZmVjdC4gKi8KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKFZPUlRFWF9QQ0kodnApLCBQQ0lfRDNob3QpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IDY4MjQyYmQuLjNhMGE1NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtNTg5LDcgKzU4OSw3IEBACiAKIGNvbmZpZyBFTFBMVVMKIAl0cmlzdGF0ZSAiM2M1MDUgXCJFdGhlckxpbmsgUGx1c1wiIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfVkVORE9SXzNDT00gJiYgSVNBCisJZGVwZW5kcyBvbiBORVRfVkVORE9SXzNDT00gJiYgSVNBICYmIElTQV9ETUFfQVBJCiAJLS0taGVscC0tLQogCSAgSW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBjYW4gYmUgZm91bmQgaW4KIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzUwNS50eHQ+LiAgSWYgeW91IGhhdmUgYSBjYXJkIG9mCkBAIC02MzAsNyArNjMwLDcgQEAKIAogY29uZmlnIDNDNTE1CiAJdHJpc3RhdGUgIjNjNTE1IElTQSBcIkZhc3QgRXRoZXJMaW5rXCIiCi0JZGVwZW5kcyBvbiBORVRfVkVORE9SXzNDT00gJiYgKElTQSB8fCBFSVNBKQorCWRlcGVuZHMgb24gTkVUX1ZFTkRPUl8zQ09NICYmIChJU0EgfHwgRUlTQSkgJiYgSVNBX0RNQV9BUEkKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBhIDNDb20gSVNBIEV0aGVyTGluayBYTCAiQ29ya3NjcmV3IiAzYzUxNSBGYXN0IEV0aGVybmV0CiAJICBuZXR3b3JrIGNhcmQsIHNheSBZIGFuZCByZWFkIHRoZSBFdGhlcm5ldC1IT1dUTywgYXZhaWxhYmxlIGZyb20KQEAgLTcwOCw3ICs3MDgsNyBAQAogCiBjb25maWcgTEFOQ0UKIAl0cmlzdGF0ZSAiQU1EIExBTkNFIGFuZCBQQ25ldCAoQVQxNTAwIGFuZCBORTIxMDApIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgSVNBCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgSVNBICYmIElTQV9ETUFfQVBJCiAJaGVscAogCSAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBvZiB0aGlzIHR5cGUsIHNheSBZIGFuZCByZWFkCiAJICB0aGUgRXRoZXJuZXQtSE9XVE8sIGF2YWlsYWJsZSBmcm9tCkBAIC04NjQsNyArODY0LDcgQEAKIAogY29uZmlnIE5JNjUKIAl0cmlzdGF0ZSAiTkk2NTEwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfVkVORE9SX1JBQ0FMICYmIElTQQorCWRlcGVuZHMgb24gTkVUX1ZFTkRPUl9SQUNBTCAmJiBJU0EgJiYgSVNBX0RNQV9BUEkKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIG9mIHRoaXMgdHlwZSwgc2F5IFkgYW5kIHJlYWQKIAkgIHRoZSBFdGhlcm5ldC1IT1dUTywgYXZhaWxhYmxlIGZyb20KQEAgLTEwNzIsNyArMTA3Miw3IEBACiAKIGNvbmZpZyBaTkVUCiAJdHJpc3RhdGUgIlplbml0aCBaLU5vdGUgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIE5FVF9JU0EgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBORVRfSVNBICYmIEVYUEVSSU1FTlRBTCAmJiBJU0FfRE1BX0FQSQogCWhlbHAKIAkgIFRoZSBaZW5pdGggWi1Ob3RlIG5vdGVib29rIGNvbXB1dGVyIGhhcyBhIGJ1aWx0LWluIG5ldHdvcmsKIAkgIChFdGhlcm5ldCkgY2FyZCwgYW5kIHRoaXMgaXMgdGhlIExpbnV4IGRyaXZlciBmb3IgaXQuIE5vdGUgdGhhdCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L1NwYWNlLmMgYi9kcml2ZXJzL25ldC9TcGFjZS5jCmluZGV4IGZjNTE5MzcuLmZiNDMzMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L1NwYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvU3BhY2UuYwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOglAKCMpU3BhY2UuYwkxLjAuNwkwOC8xMi85MwogICoKLSAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCURvbmFsZCBKLiBCZWNrZXIsIDxiZWNrZXJAc2N5bGQuY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9LY29uZmlnIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL0tjb25maWcKaW5kZXggNjBiMTk2Ny4uNjljNDg4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL0tjb25maWcKQEAgLTEzLDcgKzEzLDcgQEAKIAogY29uZmlnIExUUEMKIAl0cmlzdGF0ZSAiQXBwbGUvRmFyYWxsb24gTG9jYWxUYWxrIFBDIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBERVZfQVBQTEVUQUxLICYmIChJU0EgfHwgRUlTQSkKKwlkZXBlbmRzIG9uIERFVl9BUFBMRVRBTEsgJiYgKElTQSB8fCBFSVNBKSAmJiBJU0FfRE1BX0FQSQogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgdGhlIEFwcGxlVGFsayBQQyBjYXJkIHRvIGNvbm5lY3QgdG8gTG9jYWxUYWxrCiAJICBuZXR3b3Jrcy4gVGhlIGNhcmQgaXMgYWxzbyBrbm93biBhcyB0aGUgRmFyYWxsb24gUGhvbmVOZXQgUEMgY2FyZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jCmluZGV4IDIxNjFjMmQuLjllZGFhMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMKKysrIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYwpAQCAtNjUsNyArNjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfbHRhbGsuaD4JLyogRm9yIGx0YWxrX3NldHVwKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9pZl9sdGFsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIEZvciB1ZGVsYXkoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2F0YWxrLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTIyMyw3ICsyMjMsNyBAQAogCWludCBiYXNlX2FkZHI7CiAJaW50IGVyciA9IDA7CiAKLQlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBjb3BzX2xvY2FsKSwgImx0JWQiLCBsdGFsa19zZXR1cCk7CisJZGV2ID0gYWxsb2NfbHRhbGtkZXYoc2l6ZW9mKHN0cnVjdCBjb3BzX2xvY2FsKSk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wc19mZmRydi5oIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHNfZmZkcnYuaAppbmRleCA0MTMxYjRhLi4zMWNmOGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wc19mZmRydi5oCisrKyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzX2ZmZHJ2LmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmZGVmIENPTkZJR19DT1BTX0RBWU5BCiAKLXVuc2lnbmVkIGNoYXIgZmZkcnZfY29kZVtdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZmZkcnZfY29kZVtdID0gewogCTU4LDMsMCw1MCwyMjgsMTQ5LDMzLDI1NSwyNTUsMzQsMjI2LDE0OSwKIAkyNDksMTcsNDAsMTUyLDMzLDIwMiwxNTQsMTgzLDIzNyw4Miw3Nyw2OCwKIAkxMSwxMDcsOTgsMTksNTQsMCwyMzcsMTc2LDE3NSw1MCw4MCwwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHNfbHRkcnYuaCBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzX2x0ZHJ2LmgKaW5kZXggMDVkZTY2ZC4uNGFmYjhlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHNfbHRkcnYuaAorKysgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wc19sdGRydi5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZmRlZiBDT05GSUdfQ09QU19UQU5HRU5UCiAKLXVuc2lnbmVkIGNoYXIgbHRkcnZfY29kZVtdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbHRkcnZfY29kZVtdID0gewogCTU4LDMsMCw1MCwxNDgsMTAsMzMsMTQzLDE1LDYyLDg1LDExOSwKIAkxOTAsMzIsOSw2MiwxNzAsMTE5LDE5MCwzMiwzLDM1LDI0LDI0MSwKIAkzNCwxNDYsMTAsMjQ5LDE3LDE1MCwxMCwzMywxNDMsMTUsMTgzLDIzNywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jCmluZGV4IGFkOGU5NDMuLmRiNGYzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMKKysrIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2x0cGMuYwpAQCAtMTAzOSw3ICsxMDM5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGY7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCi0JZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgbHRwY19wcml2YXRlKSwgImx0JWQiLCBsdGFsa19zZXR1cCk7CisJZGV2ID0gYWxsb2NfbHRhbGtkZXYoc2l6ZW9mKHN0cnVjdCBsdHBjX3ByaXZhdGUpKTsKIAlpZiAoIWRldikKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jCmluZGV4IDE2ZTE1NWIuLjY2NDg1NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NhcG1vZGUuYwpAQCAtNDgsNyArNDgsNyBAQAogc3RhdGljIGludCBhY2tfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGFja2VkKTsKIAogCi1zdHJ1Y3QgQXJjUHJvdG8gY2FwbW9kZV9wcm90byA9CitzdGF0aWMgc3RydWN0IEFyY1Byb3RvIGNhcG1vZGVfcHJvdG8gPQogewogCSdyJywKIAlYTVRVLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5oIGIvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5oCmluZGV4IDJmNGJmZDQuLjM5NTg2OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2d0OTYxMDBldGguaAorKysgYi9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmgKQEAgLTIxNCw3ICsyMTQsNyBAQAogCXUzMiBjbWRzdGF0OwogCXUzMiBuZXh0OwogCXUzMiBidWZmX3B0cjsKLX0gZ3Q5NjEwMF90ZF90IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGd0OTYxMDBfdGRfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogI2lmZGVmIERFU0NfQkUKQEAgLTIyNyw3ICsyMjcsNyBAQAogCXUzMiBjbWRzdGF0OwogCXUzMiBuZXh0OwogCXUzMiBidWZmX3B0cjsKLX0gZ3Q5NjEwMF9yZF90IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGd0OTYxMDBfcmRfdDsKIAogCiAvKiBWYWx1ZXMgZm9yIHRoZSBUeCBjb21tYW5kLXN0YXR1cyBkZXNjcmlwdG9yIGVudHJ5LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKaW5kZXggMDY3YjM1My4uODk0NTQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCkBAIC0zOTQsMTMgKzM5NCwxMSBAQAogCWlmICgoc2tiID0gZGV2X2FsbG9jX3NrYihjb3VudCkpID09IE5VTEwpCiAJCWdvdG8gb3V0X21lbTsKIAotCXNrYi0+ZGV2ID0gc3AtPmRldjsKIAlwdHIgPSBza2JfcHV0KHNrYiwgY291bnQpOwogCSpwdHIrKyA9IGNtZDsJLyogS0lTUyBjb21tYW5kICovCiAKIAltZW1jcHkocHRyLCBzcC0+Y29va2VkX2J1ZiArIDEsIGNvdW50KTsKLQlza2ItPm1hYy5yYXcgPSBza2ItPmRhdGE7Ci0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0FYMjUpOworCXNrYi0+cHJvdG9jb2wgPSBheDI1X3R5cGVfdHJhbnMoc2tiLCBzcC0+ZGV2KTsKIAluZXRpZl9yeChza2IpOwogCXNwLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCXNwLT5zdGF0cy5yeF9wYWNrZXRzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9LY29uZmlnIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vS2NvbmZpZwppbmRleCAzNDA2OGY4Li43Y2RlYmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL0tjb25maWcKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogY29uZmlnIERNQVNDQwogCXRyaXN0YXRlICJIaWdoLXNwZWVkIChETUEpIFNDQyBkcml2ZXIgZm9yIEFYLjI1IgotCWRlcGVuZHMgb24gSVNBICYmIEFYMjUgJiYgQlJPS0VOX09OX1NNUAorCWRlcGVuZHMgb24gSVNBICYmIEFYMjUgJiYgQlJPS0VOX09OX1NNUCAmJiBJU0FfRE1BX0FQSQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIGhpZ2gtc3BlZWQgU0NDIGJvYXJkcywgaS5lLiB0aG9zZSBzdXBwb3J0aW5nCiAJICBETUEgb24gb25lIHBvcnQuIFlvdSB1c3VhbGx5IHVzZSB0aG9zZSBib2FyZHMgdG8gY29ubmVjdCB5b3VyCkBAIC03OCw3ICs3OCw3IEBACiAKIGNvbmZpZyBTQ0MKIAl0cmlzdGF0ZSAiWjg1MzAgU0NDIGRyaXZlciIKLQlkZXBlbmRzIG9uIElTQSAmJiBBWDI1CisJZGVwZW5kcyBvbiBJU0EgJiYgQVgyNSAmJiBJU0FfRE1BX0FQSQogCS0tLWhlbHAtLS0KIAkgIFRoZXNlIGNhcmRzIGFyZSB1c2VkIHRvIGNvbm5lY3QgeW91ciBMaW51eCBib3ggdG8gYW4gYW1hdGV1ciByYWRpbwogCSAgaW4gb3JkZXIgdG8gY29tbXVuaWNhdGUgd2l0aCBvdGhlciBjb21wdXRlcnMuIElmIHlvdSB3YW50IHRvIHVzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCmluZGV4IGU4Y2I4N2QuLjFjNTYzZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKQEAgLTYwMSwxMiArNjAxLDEwIEBACiAJCWJjLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9Ci0Jc2tiLT5kZXYgPSBkZXY7CiAJY3AgPSBza2JfcHV0KHNrYiwgcGt0bGVuKTsKIAkqY3ArKyA9IDA7IC8qIEtJU1Mga2x1ZGdlICovCiAJbWVtY3B5KGNwLCBiYy0+aGRsY3J4LmJ1ZiwgcGt0bGVuIC0gMSk7Ci0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0FYMjUpOwotCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKKwlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAluZXRpZl9yeChza2IpOwogCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJYmMtPnN0YXRzLnJ4X3BhY2tldHMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCmluZGV4IGVmMWEzNTkuLmJhOWYwNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwpAQCAtMjExLDExICsyMTEsNyBAQAogCXB0ciA9IHNrYl9wdXNoKHNrYiwgMSk7CiAJKnB0ciA9IDA7CiAKLQlza2ItPmRldiA9IGRldjsKLQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfQVgyNSk7Ci0Jc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOwotCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKLQorCXNrYi0+cHJvdG9jb2wgPSBheDI1X3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCW5ldGlmX3J4KHNrYik7CiAJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIHVubG9jazoKQEAgLTI3Miw4ICsyNjgsNiBAQAogCQlza2IgPSBuZXdza2I7CiAJfQogCi0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0FYMjUpOwotCiAJcHRyID0gc2tiX3B1c2goc2tiLCAyKTsKIAogCSpwdHIrKyA9IChzaXplICsgNSkgJSAyNTY7CkBAIC0yODcsNyArMjgxLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0Jc2tiLT5kZXYgPSBkZXY7CisJc2tiLT5wcm90b2NvbCA9IGF4MjVfdHlwZV90cmFucyhza2IsIGRldik7CiAJc2tiLT5uaC5yYXcgPSBza2ItPmRhdGE7CiAJZGV2LT5oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfQlBRLCBicHEtPmRlc3RfYWRkciwgTlVMTCwgMCk7CiAJYnBxLT5zdGF0cy50eF9wYWNrZXRzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jCmluZGV4IGYzMjY5YjcuLmY1MTUyNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jCkBAIC0xMzA2LDkgKzEzMDYsNyBAQAogCQkJZGF0YSA9IHNrYl9wdXQoc2tiLCBjYiArIDEpOwogCQkJZGF0YVswXSA9IDA7CiAJCQltZW1jcHkoJmRhdGFbMV0sIHByaXYtPnJ4X2J1ZltpXSwgY2IpOwotCQkJc2tiLT5kZXYgPSBwcml2LT5kZXY7Ci0JCQlza2ItPnByb3RvY29sID0gbnRvaHMoRVRIX1BfQVgyNSk7Ci0JCQlza2ItPm1hYy5yYXcgPSBza2ItPmRhdGE7CisJCQlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgcHJpdi0+ZGV2KTsKIAkJCW5ldGlmX3J4KHNrYik7CiAJCQlwcml2LT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQkJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCmluZGV4IGI4OTk1OWEuLmI0YzgzNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKQEAgLTE3NCwxMiArMTc0LDEwIEBACiAJCXMtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KLQlza2ItPmRldiA9IGRldjsKIAljcCA9IHNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKIAkqY3ArKyA9IDA7IC8qIEtJU1Mga2x1ZGdlICovCiAJbWVtY3B5KGNwLCBzLT5oZGxjcnguYnVmZmVyLCBwa3RfbGVuIC0gMSk7Ci0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0FYMjUpOwotCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKKwlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAluZXRpZl9yeChza2IpOwogCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJcy0+c3RhdHMucnhfcGFja2V0cysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKaW5kZXggZDllYTA4MC4uNjI3OTA1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCkBAIC0zMzIsMTIgKzMzMiwxMCBAQAogCQlyZXR1cm47CiAJfQogCi0Jc2tiLT5kZXYgICAgICA9IGF4LT5kZXY7CiAJc3Bpbl9sb2NrX2JoKCZheC0+YnVmbG9jayk7CiAJbWVtY3B5KHNrYl9wdXQoc2tiLGNvdW50KSwgYXgtPnJidWZmLCBjb3VudCk7CiAJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKLQlza2ItPm1hYy5yYXcgID0gc2tiLT5kYXRhOwotCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9BWDI1KTsKKwlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgYXgtPmRldik7CiAJbmV0aWZfcngoc2tiKTsKIAlheC0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAlheC0+cnhfcGFja2V0cysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYwppbmRleCBjZTllN2FmLi5lY2UxYjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYwpAQCAtMTYzMCwxMCArMTYzMCw3IEBACiAJc2NjLT5kZXZfc3RhdC5yeF9wYWNrZXRzKys7CiAJc2NjLT5kZXZfc3RhdC5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAotCXNrYi0+ZGV2ICAgICAgPSBzY2MtPmRldjsKLQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfQVgyNSk7Ci0Jc2tiLT5tYWMucmF3ICA9IHNrYi0+ZGF0YTsKLQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CisJc2tiLT5wcm90b2NvbCA9IGF4MjVfdHlwZV90cmFucyhza2IsIHNjYy0+ZGV2KTsKIAkKIAluZXRpZl9yeChza2IpOwogCXNjYy0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKaW5kZXggZmQ3YjAwZi4uNDEyMTNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKQEAgLTUyMiwxMiArNTIyLDEwIEBACiAJCQkJKyt5cC0+c3RhdHMucnhfZHJvcHBlZDsKIAkJCX0gZWxzZSB7CiAJCQkJdW5zaWduZWQgY2hhciAqY3A7Ci0JCQkJc2tiLT5kZXYgPSBkZXY7CiAJCQkJY3AgPSBza2JfcHV0KHNrYiwgcGt0X2xlbik7CiAJCQkJKmNwKysgPSAwOwkJLyogS0lTUyBrbHVkZ2UgKi8KIAkJCQltZW1jcHkoY3AsIHlwLT5yeF9idWYsIHBrdF9sZW4gLSAxKTsKLQkJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfQVgyNSk7Ci0JCQkJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOworCQkJCXNrYi0+cHJvdG9jb2wgPSBheDI1X3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCQkJCW5ldGlmX3J4KHNrYik7CiAJCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJCQkrK3lwLT5zdGF0cy5yeF9wYWNrZXRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggYWNiMTcwMS4uYjNhODk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC0xMyw4ICsxMyw4IEBACiAqKiBUaGlzIGRyaXZlciBoYXMgb25seSBiZWVuIHRlc3RlZCB3aXRoCiAqKiAtLSBIUCBKMjU4NUIgMTAvMTAwIE1iaXQvcyBQQ0kgQnVzbWFzdGVyCiAqKiAtLSBIUCBKMjU4NUEgMTAvMTAwIE1iaXQvcyBQQ0kgCi0qKiAtLSBIUCBKMjk3MCAgMTAgTWJpdC9zIFBDSSBDb21ibyAxMGJhc2UtVC9CTkMKLSoqIC0tIEhQIEoyOTczICAxMCBNYml0L3MgUENJIDEwYmFzZS1UCisqKiAtLSBIUCBKMjk3MEEgMTAgTWJpdC9zIFBDSSBDb21ibyAxMGJhc2UtVC9CTkMKKyoqIC0tIEhQIEoyOTczQSAxMCBNYml0L3MgUENJIDEwYmFzZS1UCiAqKiAtLSBIUCBKMjU3MyAgMTAvMTAwIElTQQogKiogLS0gQ29tcGV4IFJlYWR5TGluayBFTkVUMTAwLVZHNCAgMTAvMTAwIE1iaXQvcyBQQ0kgLyBFSVNBCiAqKiAtLSBDb21wZXggRnJlZWRvbUxpbmUgMTAwL1ZHICAxMC8xMDAgTWJpdC9zIElTQSAvIEVJU0EgLyBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZwppbmRleCA2YmY3NmE0Li4xYzU1M2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnCkBAIC0zMTAsNyArMzEwLDcgQEAKIAogY29uZmlnIE5TQ19GSVIKIAl0cmlzdGF0ZSAiTlNDIFBDODcxMDgvUEM4NzMzOCIKLQlkZXBlbmRzIG9uIElSREEKKwlkZXBlbmRzIG9uIElSREEgJiYgSVNBX0RNQV9BUEkKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBOU0MgUEM4NzEwOCBhbmQKIAkgIFBDODczMzggSXJEQSBjaGlwc2V0cy4gIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFNJUiwKQEAgLTMyMSw3ICszMjEsNyBAQAogCiBjb25maWcgV0lOQk9ORF9GSVIKIAl0cmlzdGF0ZSAiV2luYm9uZCBXODM5NzdBRiAoSVIpIgotCWRlcGVuZHMgb24gSVJEQQorCWRlcGVuZHMgb24gSVJEQSAmJiBJU0FfRE1BX0FQSQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgSXJEQSBzdXBwb3J0IGZvciB0aGUgV2luYm9uZAogCSAgVzgzOTc3QUYgc3VwZXItaW8gY2hpcHNldC4gIFRoaXMgZHJpdmVyIHNob3VsZCBiZSB1c2VkIGZvciB0aGUgSXJEQQpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAKIGNvbmZpZyBTTUNfSVJDQ19GSVIKIAl0cmlzdGF0ZSAiU01TQyBJckNDIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIElSREEKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBJUkRBICYmIElTQV9ETUFfQVBJCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgU01DIEluZnJhcmVkCiAJICBDb21tdW5pY2F0aW9ucyBDb250cm9sbGVyLiAgSXQgaXMgdXNlZCBpbiBhIHdpZGUgdmFyaWV0eSBvZgpAQCAtMzU3LDcgKzM1Nyw3IEBACiAKIGNvbmZpZyBBTElfRklSCiAJdHJpc3RhdGUgIkFMaSBNNTEyMyBGSVIgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgSVJEQQorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIElSREEgJiYgSVNBX0RNQV9BUEkKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBBTGkgTTUxMjMgRklSCiAJICBDb250cm9sbGVyLiAgVGhlIEFMaSBNNTEyMyBGSVIgQ29udHJvbGxlciBpcyBlbWJlZGRlZCBpbiBBTGkgTTE1NDNDLApAQCAtMzg1LDcgKzM4NSw3IEBACiAKIGNvbmZpZyBWSUFfRklSCiAJdHJpc3RhdGUgIlZJQSBWVDgyMzEvVlQxMjExIFNJUi9NSVIvRklSIgotCWRlcGVuZHMgb24gSVJEQQorCWRlcGVuZHMgb24gSVJEQSAmJiBJU0FfRE1BX0FQSQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIFZJQSBWVDgyMzEKIAkgIGFuZCBWSUEgVlQxMjExIElyREEgY29udHJvbGxlcnMsIGZvdW5kIG9uIHRoZSBtb3RoZXJib2FyZHMgdXNpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCmluZGV4IDJmZmMzMTcuLmIzMzExMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOglAKCMpbG9vcGJhY2suYwkxLjAuNGIJMDgvMTYvOTMKICAqCi0gKiBBdXRob3JzOglSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKiBBdXRob3JzOglSb3NzIEJpcm8KICAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCQlEb25hbGQgQmVja2VyLCA8YmVja2VyQHNjeWxkLmNvbT4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwppbmRleCA3ZTk0ZDQ1Li4wNDA1ZTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAogc3RhdGljIGlubGluZSB1MzIgbXZfcmVhZChpbnQgb2Zmc2V0KQogewotCXZvaWQgKl9faW9tZW0gcmVnX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKIAogCXJlZ19iYXNlID0gbXY2NDN4eF9ldGhfc2hhcmVkX2Jhc2UgLSBNVjY0M1hYX0VUSF9TSEFSRURfUkVHUzsKIApAQCAtMTA4LDcgKzEwOCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtdl93cml0ZShpbnQgb2Zmc2V0LCB1MzIgZGF0YSkKIHsKLQl2b2lkICogX19pb21lbSByZWdfYmFzZTsKKwl2b2lkIF9faW9tZW0gKnJlZ19iYXNlOwogCiAJcmVnX2Jhc2UgPSBtdjY0M3h4X2V0aF9zaGFyZWRfYmFzZSAtIE1WNjQzWFhfRVRIX1NIQVJFRF9SRUdTOwogCXdyaXRlbChkYXRhLCByZWdfYmFzZSArIG9mZnNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZGVmbGF0ZS5jIGIvZHJpdmVycy9uZXQvcHBwX2RlZmxhdGUuYwppbmRleCA1MDdkNjMyLi4zODcyMDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZGVmbGF0ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9kZWZsYXRlLmMKQEAgLTg3LDggKzg3LDcgQEAKIAogCWlmIChzdGF0ZSkgewogCQl6bGliX2RlZmxhdGVFbmQoJnN0YXRlLT5zdHJtKTsKLQkJaWYgKHN0YXRlLT5zdHJtLndvcmtzcGFjZSkKLQkJCXZmcmVlKHN0YXRlLT5zdHJtLndvcmtzcGFjZSk7CisJCXZmcmVlKHN0YXRlLT5zdHJtLndvcmtzcGFjZSk7CiAJCWtmcmVlKHN0YXRlKTsKIAl9CiB9CkBAIC0zMDgsOCArMzA3LDcgQEAKIAogCWlmIChzdGF0ZSkgewogCQl6bGliX2luZmxhdGVFbmQoJnN0YXRlLT5zdHJtKTsKLQkJaWYgKHN0YXRlLT5zdHJtLndvcmtzcGFjZSkKLQkJCWtmcmVlKHN0YXRlLT5zdHJtLndvcmtzcGFjZSk7CisJCWtmcmVlKHN0YXRlLT5zdHJtLndvcmtzcGFjZSk7CiAJCWtmcmVlKHN0YXRlKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwppbmRleCBjNDU2ZGM4Li4zYjM3N2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKQEAgLTI0NjcsMTQgKzI0NjcsMTAgQEAKIAlza2JfcXVldWVfcHVyZ2UoJnBwcC0+bXJxKTsKICNlbmRpZiAvKiBDT05GSUdfUFBQX01VTFRJTElOSyAqLwogI2lmZGVmIENPTkZJR19QUFBfRklMVEVSCi0JaWYgKHBwcC0+cGFzc19maWx0ZXIpIHsKLQkJa2ZyZWUocHBwLT5wYXNzX2ZpbHRlcik7Ci0JCXBwcC0+cGFzc19maWx0ZXIgPSBOVUxMOwotCX0KLQlpZiAocHBwLT5hY3RpdmVfZmlsdGVyKSB7Ci0JCWtmcmVlKHBwcC0+YWN0aXZlX2ZpbHRlcik7Ci0JCXBwcC0+YWN0aXZlX2ZpbHRlciA9IE5VTEw7Ci0JfQorCWtmcmVlKHBwcC0+cGFzc19maWx0ZXIpOworCXBwcC0+cGFzc19maWx0ZXIgPSBOVUxMOworCWtmcmVlKHBwcC0+YWN0aXZlX2ZpbHRlcik7CisJcHBwLT5hY3RpdmVfZmlsdGVyID0gTlVMTDsKICNlbmRpZiAvKiBDT05GSUdfUFBQX0ZJTFRFUiAqLwogCiAJa2ZyZWUocHBwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IDA3ZTJkZjAuLmM1OTUwN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtMjM4NSw3ICsyMzg1LDcgQEAKIAl9CiAKIAkvKiBHaXZlIGEgcmFjaW5nIGhhcmRfc3RhcnRfeG1pdCBhIGZldyBjeWNsZXMgdG8gY29tcGxldGUuICovCi0Jc3luY2hyb25pemVfa2VybmVsKCk7CisJc3luY2hyb25pemVfc2NoZWQoKTsgIC8qIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBzeW5jaHJvbml6ZV9pcnEoKT8gKi8KIAogCS8qCiAJICogQW5kIG5vdyBmb3IgdGhlIDUwayQgcXVlc3Rpb246IGFyZSBJUlEgZGlzYWJsZWQgb3Igbm90ID8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAuYwppbmRleCA0Y2U1MmY1Li44Zjc4NDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwLmMKKysrIGIvZHJpdmVycy9uZXQvc2xpcC5jCkBAIC0xODUsMTUgKzE4NSwxMiBAQAogCS8qIENsZWFudXAgKi8KIGVycl9leGl0OgogI2lmZGVmIFNMX0lOQ0xVREVfQ1NMSVAKLQlpZiAoY2J1ZmYpCi0JCWtmcmVlKGNidWZmKTsKKwlrZnJlZShjYnVmZik7CiAJaWYgKHNsY29tcCkKIAkJc2xoY19mcmVlKHNsY29tcCk7CiAjZW5kaWYKLQlpZiAoeGJ1ZmYpCi0JCWtmcmVlKHhidWZmKTsKLQlpZiAocmJ1ZmYpCi0JCWtmcmVlKHJidWZmKTsKKwlrZnJlZSh4YnVmZik7CisJa2ZyZWUocmJ1ZmYpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIwNCwxMyArMjAxLDEzIEBACiAJdm9pZCAqIHRtcDsKIAogCS8qIEZyZWUgYWxsIFNMSVAgZnJhbWUgYnVmZmVycy4gKi8KLQlpZiAoKHRtcCA9IHhjaGcoJnNsLT5yYnVmZiwgTlVMTCkpICE9IE5VTEwpCi0JCWtmcmVlKHRtcCk7Ci0JaWYgKCh0bXAgPSB4Y2hnKCZzbC0+eGJ1ZmYsIE5VTEwpKSAhPSBOVUxMKQotCQlrZnJlZSh0bXApOworCXRtcCA9IHhjaGcoJnNsLT5yYnVmZiwgTlVMTCk7CisJa2ZyZWUodG1wKTsKKwl0bXAgPSB4Y2hnKCZzbC0+eGJ1ZmYsIE5VTEwpOworCWtmcmVlKHRtcCk7CiAjaWZkZWYgU0xfSU5DTFVERV9DU0xJUAotCWlmICgodG1wID0geGNoZygmc2wtPmNidWZmLCBOVUxMKSkgIT0gTlVMTCkKLQkJa2ZyZWUodG1wKTsKKwl0bXAgPSB4Y2hnKCZzbC0+Y2J1ZmYsIE5VTEwpOworCWtmcmVlKHRtcCk7CiAJaWYgKCh0bXAgPSB4Y2hnKCZzbC0+c2xjb21wLCBOVUxMKSkgIT0gTlVMTCkKIAkJc2xoY19mcmVlKHRtcCk7CiAjZW5kaWYKQEAgLTI5NywxMyArMjk0LDEwIEBACiAJc3Bpbl91bmxvY2tfYmgoJnNsLT5sb2NrKTsKIAogZG9uZToKLQlpZiAoeGJ1ZmYpCi0JCWtmcmVlKHhidWZmKTsKLQlpZiAocmJ1ZmYpCi0JCWtmcmVlKHJidWZmKTsKKwlrZnJlZSh4YnVmZik7CisJa2ZyZWUocmJ1ZmYpOwogI2lmZGVmIFNMX0lOQ0xVREVfQ1NMSVAKLQlpZiAoY2J1ZmYpCi0JCWtmcmVlKGNidWZmKTsKKwlrZnJlZShjYnVmZik7CiAjZW5kaWYKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuYm1hYy5jIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCmluZGV4IDAyNWRjZDguLmY4OGY1ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYworKysgYi9kcml2ZXJzL25ldC9zdW5ibWFjLmMKQEAgLTM3LDggKzM3LDE4IEBACiAKICNpbmNsdWRlICJzdW5ibWFjLmgiCiAKKyNkZWZpbmUgRFJWX05BTUUJInN1bmJtYWMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIyLjAiCisjZGVmaW5lIERSVl9SRUxEQVRFCSIxMS8yNC8wMyIKKyNkZWZpbmUgRFJWX0FVVEhPUgkiRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKSIKKwogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPQotICAgICAgICAic3VuYm1hYy5jOnYyLjAgMjQvTm92LzAzIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSlcbiI7CisJRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiICIgRFJWX0FVVEhPUiAiXG4iOworCitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQVVUSE9SKERSVl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdW4gQmlnTUFDIDEwMGJhc2VUIGV0aGVybmV0IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjdW5kZWYgREVCVUdfUFJPQkUKICN1bmRlZiBERUJVR19UWApAQCAtMTMyMSw0ICsxMzMxLDMgQEAKIAogbW9kdWxlX2luaXQoYmlnbWFjX3Byb2JlKTsKIG1vZHVsZV9leGl0KGJpZ21hY19jbGVhbnVwKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKaW5kZXggZDgzN2IzYy4uZjAyZmU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuaG1lLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKQEAgLTEzLDkgKzEzLDYgQEAKICAqICAgICBhcmd1bWVudCA6IG1hY2FkZHI9MHgwMCwweDEwLDB4MjAsMHgzMCwweDQwLDB4NTAKICAqLwogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gPQotICAgICAgICAic3VuaG1lLmM6djIuMDIgMjQvQXVnLzIwMDMgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKVxuIjsKLQogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNjcsMTUgKzY0LDI0IEBACiAKICNpbmNsdWRlICJzdW5obWUuaCIKIAorI2RlZmluZSBEUlZfTkFNRQkic3VuaG1lIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4wMiIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIjgvMjQvMDMiCisjZGVmaW5lIERSVl9BVVRIT1IJIkRhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkiCiAKLSNkZWZpbmUgRFJWX05BTUUgInN1bmhtZSIKK3N0YXRpYyBjaGFyIHZlcnNpb25bXSA9CisJRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiICIgRFJWX0FVVEhPUiAiXG4iOworCitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQVVUSE9SKERSVl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdW4gSGFwcHlNZWFsRXRoZXJuZXQoSE1FKSAxMC8xMDBiYXNlVCBldGhlcm5ldCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIGludCBtYWNhZGRyWzZdOwogCiAvKiBhY2NlcHQgTUFDIGFkZHJlc3Mgb2YgdGhlIGZvcm0gbWFjYWRkcj0weDA4LDB4MDAsMHgyMCwweDMwLDB4NDAsMHg1MCAqLwogbW9kdWxlX3BhcmFtX2FycmF5KG1hY2FkZHIsIGludCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1hY2FkZHIsICJIYXBweSBNZWFsIE1BQyBhZGRyZXNzIHRvIHNldCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgc3RydWN0IGhhcHB5X21lYWwgKnJvb3RfaGFwcHlfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwppbmRleCA2MmQ0NjRjLi5iN2Q4N2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKQEAgLTY5LDkgKzY5LDYgQEAKIAogI3VuZGVmIERFQlVHX0RSSVZFUgogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gPQotCSJzdW5sYW5jZS5jOnYyLjAyIDI0L0F1Zy8wMyBNaWd1ZWwgZGUgSWNhemEgKG1pZ3VlbEBudWNsZWN1LnVuYW0ubXgpXG4iOwotCiBzdGF0aWMgY2hhciBsYW5jZXN0cltdID0gIkxBTkNFIjsKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTA4LDYgKzEwNSwxOSBAQAogI2luY2x1ZGUgPGFzbS9hdXhpby5oPgkJLyogRm9yIHRwZS1saW5rLXRlc3Q/IHNldHRpbmcgKi8KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKKyNkZWZpbmUgRFJWX05BTUUJInN1bmxhbmNlIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4wMiIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIjgvMjQvMDMiCisjZGVmaW5lIERSVl9BVVRIT1IJIk1pZ3VlbCBkZSBJY2F6YSAobWlndWVsQG51Y2xlY3UudW5hbS5teCkiCisKK3N0YXRpYyBjaGFyIHZlcnNpb25bXSA9CisJRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiICIgRFJWX0FVVEhPUiAiXG4iOworCitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQVVUSE9SKERSVl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdW4gTGFuY2UgZXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKIC8qIERlZmluZTogMl40IFR4IGJ1ZmZlcnMgYW5kIDJeNCBSeCBidWZmZXJzICovCiAjaWZuZGVmIExBTkNFX0xPR19UWF9CVUZGRVJTCiAjZGVmaW5lIExBTkNFX0xPR19UWF9CVUZGRVJTIDQKQEAgLTE2MTEsNCArMTYyMSwzIEBACiAKIG1vZHVsZV9pbml0KHNwYXJjX2xhbmNlX3Byb2JlKTsKIG1vZHVsZV9leGl0KHNwYXJjX2xhbmNlX2NsZWFudXApOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VucWUuYyBiL2RyaXZlcnMvbmV0L3N1bnFlLmMKaW5kZXggMzdlZjFiOC4uMWYyMzIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VucWUuYworKysgYi9kcml2ZXJzL25ldC9zdW5xZS5jCkBAIC03LDkgKzcsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk5LCAyMDAzIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKICAqLwogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gPQotICAgICAgICAic3VucWUuYzp2My4wIDgvMjQvMDMgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKVxuIjsKLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC00Myw2ICs0MCwxOSBAQAogCiAjaW5jbHVkZSAic3VucWUuaCIKIAorI2RlZmluZSBEUlZfTkFNRQkic3VucWUiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIzLjAiCisjZGVmaW5lIERSVl9SRUxEQVRFCSI4LzI0LzAzIgorI2RlZmluZSBEUlZfQVVUSE9SCSJEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pIgorCitzdGF0aWMgY2hhciB2ZXJzaW9uW10gPQorCURSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiAiIERSVl9BVVRIT1IgIlxuIjsKKworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0FVVEhPUihEUlZfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3VuIFF1YWRFdGhlcm5ldCAxMGJhc2VUIFNCVVMgY2FyZCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwogc3RhdGljIHN0cnVjdCBzdW5xZWMgKnJvb3RfcWVjX2RldjsKIAogc3RhdGljIHZvaWQgcWVfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTEwNDAsNCArMTA1MCwzIEBACiAKIG1vZHVsZV9pbml0KHFlY19wcm9iZSk7CiBtb2R1bGVfZXhpdChxZWNfY2xlYW51cCk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDEyZGU4MDguLmY3OWIwMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02MSw4ICs2MSw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjI1IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1hcmNoIDI0LCAyMDA1IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuMjciCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiTWF5IDUsIDIwMDUiCiAKICNkZWZpbmUgVEczX0RFRl9NQUNfTU9ERQkwCiAjZGVmaW5lIFRHM19ERUZfUlhfTU9ERQkJMApAQCAtODUsOCArODUsNyBAQAogLyogaGFyZHdhcmUgbWluaW11bSBhbmQgbWF4aW11bSBmb3IgYSBzaW5nbGUgZnJhbWUncyBkYXRhIHBheWxvYWQgKi8KICNkZWZpbmUgVEczX01JTl9NVFUJCQk2MAogI2RlZmluZSBURzNfTUFYX01UVSh0cCkJXAotCSgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDUgJiYgXAotCSAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NTApID8gOTAwMCA6IDE1MDApCisJKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpID8gOTAwMCA6IDE1MDApCiAKIC8qIFRoZXNlIG51bWJlcnMgc2VlbSB0byBiZSBoYXJkIGNvZGVkIGluIHRoZSBOSUMgZmlybXdhcmUgc29tZWhvdy4KICAqIFlvdSBjYW4ndCBjaGFuZ2UgdGhlIHJpbmcgc2l6ZXMsIGJ1dCB5b3UgY2FuIGNoYW5nZSB3aGVyZSB5b3UgcGxhY2UKQEAgLTIwNSw2ICsyMDQsOCBAQAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUxRiwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAorCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1MiwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAogCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1MywKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAogCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1M00sCkBAIC00MjUsOSArNDI2LDMwIEBACiAJdGczX2NvbmRfaW50KHRwKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGczX2hhc193b3JrKHN0cnVjdCB0ZzMgKnRwKQoreworCXN0cnVjdCB0ZzNfaHdfc3RhdHVzICpzYmxrID0gdHAtPmh3X3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgd29ya19leGlzdHMgPSAwOworCisJLyogY2hlY2sgZm9yIHBoeSBldmVudHMgKi8KKwlpZiAoISh0cC0+dGczX2ZsYWdzICYKKwkgICAgICAoVEczX0ZMQUdfVVNFX0xJTktDSEdfUkVHIHwKKwkgICAgICAgVEczX0ZMQUdfUE9MTF9TRVJERVMpKSkgeworCQlpZiAoc2Jsay0+c3RhdHVzICYgU0RfU1RBVFVTX0xJTktfQ0hHKQorCQkJd29ya19leGlzdHMgPSAxOworCX0KKwkvKiBjaGVjayBmb3IgUlgvVFggd29yayB0byBkbyAqLworCWlmIChzYmxrLT5pZHhbMF0udHhfY29uc3VtZXIgIT0gdHAtPnR4X2NvbnMgfHwKKwkgICAgc2Jsay0+aWR4WzBdLnJ4X3Byb2R1Y2VyICE9IHRwLT5yeF9yY2JfcHRyKQorCQl3b3JrX2V4aXN0cyA9IDE7CisKKwlyZXR1cm4gd29ya19leGlzdHM7Cit9CisKIC8qIHRnM19yZXN0YXJ0X2ludHMKLSAqICBzaW1pbGFyIHRvIHRnM19lbmFibGVfaW50cywgYnV0IGl0IGNhbiByZXR1cm4gd2l0aG91dCBmbHVzaGluZyB0aGUKLSAqICBQSU8gd3JpdGUgd2hpY2ggcmVlbmFibGVzIGludGVycnVwdHMKKyAqICBzaW1pbGFyIHRvIHRnM19lbmFibGVfaW50cywgYnV0IGl0IGFjY3VyYXRlbHkgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZXJlCisgKiAgaXMgbmV3IHdvcmsgcGVuZGluZyBhbmQgY2FuIHJldHVybiB3aXRob3V0IGZsdXNoaW5nIHRoZSBQSU8gd3JpdGUKKyAqICB3aGljaCByZWVuYWJsZXMgaW50ZXJydXB0cyAKICAqLwogc3RhdGljIHZvaWQgdGczX3Jlc3RhcnRfaW50cyhzdHJ1Y3QgdGczICp0cCkKIHsKQEAgLTQzNiw3ICs0NTgsOSBAQAogCXR3MzJfbWFpbGJveChNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1csIDB4MDAwMDAwMDApOwogCW1taW93YigpOwogCi0JdGczX2NvbmRfaW50KHRwKTsKKwlpZiAodGczX2hhc193b3JrKHRwKSkKKwkJdHczMihIT1NUQ0NfTU9ERSwgdHAtPmNvYWxlc2NlX21vZGUgfAorCQkgICAgIChIT1NUQ0NfTU9ERV9FTkFCTEUgfCBIT1NUQ0NfTU9ERV9OT1cpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRnM19uZXRpZl9zdG9wKHN0cnVjdCB0ZzMgKnRwKQpAQCAtODYwLDggKzg4NCw3IEBACiAJaWYgKCh0cC0+cGh5X2lkICYgUEhZX0lEX01BU0spID09IFBIWV9JRF9CQ001NDAxKSB7CiAJCS8qIENhbm5vdCBkbyByZWFkLW1vZGlmeS13cml0ZSBvbiA1NDAxICovCiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHg0YzIwKTsKLQl9IGVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzA1ICYmCi0JCSAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzUwKSB7CisJfSBlbHNlIGlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgewogCQl1MzIgcGh5X3JlZzsKIAogCQkvKiBTZXQgYml0IDE0IHdpdGggcmVhZC1tb2RpZnktd3JpdGUgdG8gcHJlc2VydmUgb3RoZXIgYml0cyAqLwpAQCAtODczLDggKzg5Niw3IEBACiAJLyogU2V0IHBoeSByZWdpc3RlciAweDEwIGJpdCAwIHRvIGhpZ2ggZmlmbyBlbGFzdGljaXR5IHRvIHN1cHBvcnQKIAkgKiBqdW1ibyBmcmFtZXMgdHJhbnNtaXNzaW9uLgogCSAqLwotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwNSAmJgotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc1MCkgeworCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgewogCQl1MzIgcGh5X3JlZzsKIAogCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0VYVF9DVFJMLCAmcGh5X3JlZykpCkBAIC0xMDA2LDggKzEwMjgsMTMgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHRwLT5wZGV2LAogCQkJCSAgICAgIHBtICsgUENJX1BNX0NUUkwsCiAJCQkJICAgICAgcG93ZXJfY29udHJvbCk7Ci0JCXR3MzJfZihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsKTsKLQkJdWRlbGF5KDEwMCk7CisJCXVkZWxheSgxMDApOwkvKiBEZWxheSBhZnRlciBwb3dlciBzdGF0ZSBjaGFuZ2UgKi8KKworCQkvKiBTd2l0Y2ggb3V0IG9mIFZhdXggaWYgaXQgaXMgbm90IGEgTE9NICovCisJCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVCkpIHsKKwkJCXR3MzJfZihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsKTsKKwkJCXVkZWxheSgxMDApOworCQl9CiAKIAkJcmV0dXJuIDA7CiAKQEAgLTEwNjgsNyArMTA5NSw3IEBACiAJCQltYWNfbW9kZSA9IE1BQ19NT0RFX1BPUlRfTU9ERV9UQkk7CiAJCX0KIAotCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NTApCisJCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSkKIAkJCXR3MzIoTUFDX0xFRF9DVFJMLCB0cC0+bGVkX2N0cmwpOwogCiAJCWlmICgoKHBvd2VyX2NhcHMgJiBQQ0lfUE1fQ0FQX1BNRV9EM2NvbGQpICYmCkBAIC0xMDk1LDcgKzExMjIsNyBAQAogCQkgICAgIENMT0NLX0NUUkxfQUxUQ0xLIHwKIAkJICAgICBDTE9DS19DVFJMX1BXUkRPV05fUExMMTMzKTsKIAkJdWRlbGF5KDQwKTsKLQl9IGVsc2UgaWYgKCEoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSA1NzUwKSAmJgorCX0gZWxzZSBpZiAoISgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCiAJCSAgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkpIHsKIAkJdTMyIG5ld2JpdHMxLCBuZXdiaXRzMjsKIApAQCAtMTE1Miw2ICsxMTc5LDcgQEAKIAogCS8qIEZpbmFsbHksIHNldCB0aGUgbmV3IHBvd2VyIHN0YXRlLiAqLwogCXBjaV93cml0ZV9jb25maWdfd29yZCh0cC0+cGRldiwgcG0gKyBQQ0lfUE1fQ1RSTCwgcG93ZXJfY29udHJvbCk7CisJdWRlbGF5KDEwMCk7CS8qIERlbGF5IGFmdGVyIHBvd2VyIHN0YXRlIGNoYW5nZSAqLwogCiAJdGczX3dyaXRlX3NpZ19wb3N0X3Jlc2V0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOKTsKIApAQCAtMjY4MSw4ICsyNzA5LDggQEAKIHN0YXRpYyBpbnQgdGczX3J4KHN0cnVjdCB0ZzMgKnRwLCBpbnQgYnVkZ2V0KQogewogCXUzMiB3b3JrX21hc2s7Ci0JdTMyIHJ4X3JjYl9wdHIgPSB0cC0+cnhfcmNiX3B0cjsKLQl1MTYgaHdfaWR4LCBzd19pZHg7CisJdTMyIHN3X2lkeCA9IHRwLT5yeF9yY2JfcHRyOworCXUxNiBod19pZHg7CiAJaW50IHJlY2VpdmVkOwogCiAJaHdfaWR4ID0gdHAtPmh3X3N0YXR1cy0+aWR4WzBdLnJ4X3Byb2R1Y2VyOwpAQCAtMjY5MSw3ICsyNzE5LDYgQEAKIAkgKiB0aGUgb3BhcXVlIGNvb2tpZS4KIAkgKi8KIAlybWIoKTsKLQlzd19pZHggPSByeF9yY2JfcHRyICUgVEczX1JYX1JDQl9SSU5HX1NJWkUodHApOwogCXdvcmtfbWFzayA9IDA7CiAJcmVjZWl2ZWQgPSAwOwogCXdoaWxlIChzd19pZHggIT0gaHdfaWR4ICYmIGJ1ZGdldCA+IDApIHsKQEAgLTI3OTYsMTQgKzI4MjMsMTkgQEAKIG5leHRfcGt0OgogCQkoKnBvc3RfcHRyKSsrOwogbmV4dF9wa3Rfbm9wb3N0OgotCQlyeF9yY2JfcHRyKys7Ci0JCXN3X2lkeCA9IHJ4X3JjYl9wdHIgJSBURzNfUlhfUkNCX1JJTkdfU0laRSh0cCk7CisJCXN3X2lkeCsrOworCQlzd19pZHggJT0gVEczX1JYX1JDQl9SSU5HX1NJWkUodHApOworCisJCS8qIFJlZnJlc2ggaHdfaWR4IHRvIHNlZSBpZiB0aGVyZSBpcyBuZXcgd29yayAqLworCQlpZiAoc3dfaWR4ID09IGh3X2lkeCkgeworCQkJaHdfaWR4ID0gdHAtPmh3X3N0YXR1cy0+aWR4WzBdLnJ4X3Byb2R1Y2VyOworCQkJcm1iKCk7CisJCX0KIAl9CiAKIAkvKiBBQ0sgdGhlIHN0YXR1cyByaW5nLiAqLwotCXRwLT5yeF9yY2JfcHRyID0gcnhfcmNiX3B0cjsKLQl0dzMyX3J4X21ib3goTUFJTEJPWF9SQ1ZSRVRfQ09OX0lEWF8wICsgVEczXzY0QklUX1JFR19MT1csCi0JCSAgICAgKHJ4X3JjYl9wdHIgJSBURzNfUlhfUkNCX1JJTkdfU0laRSh0cCkpKTsKKwl0cC0+cnhfcmNiX3B0ciA9IHN3X2lkeDsKKwl0dzMyX3J4X21ib3goTUFJTEJPWF9SQ1ZSRVRfQ09OX0lEWF8wICsgVEczXzY0QklUX1JFR19MT1csIHN3X2lkeCk7CiAKIAkvKiBSZWZpbGwgUlggcmluZyhzKS4gKi8KIAlpZiAod29ya19tYXNrICYgUlhEX09QQVFVRV9SSU5HX1NURCkgewpAQCAtMjg4MiwyNCArMjkxNCw0MSBAQAogCXJldHVybiAoZG9uZSA/IDAgOiAxKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGczX2hhc193b3JrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB0ZzMgKnRwKQorLyogTVNJIElTUiAtIE5vIG5lZWQgdG8gY2hlY2sgZm9yIGludGVycnVwdCBzaGFyaW5nIGFuZCBubyBuZWVkIHRvCisgKiBmbHVzaCBzdGF0dXMgYmxvY2sgYW5kIGludGVycnVwdCBtYWlsYm94LiBQQ0kgb3JkZXJpbmcgcnVsZXMKKyAqIGd1YXJhbnRlZSB0aGF0IE1TSSB3aWxsIGFycml2ZSBhZnRlciB0aGUgc3RhdHVzIGJsb2NrLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgdGczX21zaShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCB0ZzNfaHdfc3RhdHVzICpzYmxrID0gdHAtPmh3X3N0YXR1czsKLQl1bnNpZ25lZCBpbnQgd29ya19leGlzdHMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBjaGVjayBmb3IgcGh5IGV2ZW50cyAqLwotCWlmICghKHRwLT50ZzNfZmxhZ3MgJgotCSAgICAgIChURzNfRkxBR19VU0VfTElOS0NIR19SRUcgfAotCSAgICAgICBURzNfRkxBR19QT0xMX1NFUkRFUykpKSB7Ci0JCWlmIChzYmxrLT5zdGF0dXMgJiBTRF9TVEFUVVNfTElOS19DSEcpCi0JCQl3b3JrX2V4aXN0cyA9IDE7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIHdyaXRpbmcgYW55IHZhbHVlIHRvIGludHItbWJveC0wIGNsZWFycyBQQ0kgSU5UQSMgYW5kCisJICogY2hpcC1pbnRlcm5hbCBpbnRlcnJ1cHQgcGVuZGluZyBldmVudHMuCisJICogd3JpdGluZyBub24temVybyB0byBpbnRyLW1ib3gtMCBhZGRpdGlvbmFsIHRlbGxzIHRoZQorCSAqIE5JQyB0byBzdG9wIHNlbmRpbmcgdXMgaXJxcywgZW5nYWdpbmcgImluLWludHItaGFuZGxlciIKKwkgKiBldmVudCBjb2FsZXNjaW5nLgorCSAqLworCXR3MzJfbWFpbGJveChNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1csIDB4MDAwMDAwMDEpOworCXNibGstPnN0YXR1cyAmPSB+U0RfU1RBVFVTX1VQREFURUQ7CisKKwlpZiAobGlrZWx5KHRnM19oYXNfd29yayh0cCkpKQorCQluZXRpZl9yeF9zY2hlZHVsZShkZXYpOwkJLyogc2NoZWR1bGUgTkFQSSBwb2xsICovCisJZWxzZSB7CisJCS8qIG5vIHdvcmssIHJlLWVuYWJsZSBpbnRlcnJ1cHRzCisJCSAqLworCQl0dzMyX21haWxib3goTUFJTEJPWF9JTlRFUlJVUFRfMCArIFRHM182NEJJVF9SRUdfTE9XLAorCQkJICAgICAweDAwMDAwMDAwKTsKIAl9Ci0JLyogY2hlY2sgZm9yIFJYL1RYIHdvcmsgdG8gZG8gKi8KLQlpZiAoc2Jsay0+aWR4WzBdLnR4X2NvbnN1bWVyICE9IHRwLT50eF9jb25zIHx8Ci0JICAgIHNibGstPmlkeFswXS5yeF9wcm9kdWNlciAhPSB0cC0+cnhfcmNiX3B0cikKLQkJd29ya19leGlzdHMgPSAxOwogCi0JcmV0dXJuIHdvcmtfZXhpc3RzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTCgxKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHRnM19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTI5MzUsNyArMjk4NCw3IEBACiAJCXRyMzIoTUFJTEJPWF9JTlRFUlJVUFRfMCArIFRHM182NEJJVF9SRUdfTE9XKTsKIAkJc2Jsay0+c3RhdHVzICY9IH5TRF9TVEFUVVNfVVBEQVRFRDsKIAotCQlpZiAobGlrZWx5KHRnM19oYXNfd29yayhkZXYsIHRwKSkpCisJCWlmIChsaWtlbHkodGczX2hhc193b3JrKHRwKSkpCiAJCQluZXRpZl9yeF9zY2hlZHVsZShkZXYpOwkJLyogc2NoZWR1bGUgTkFQSSBwb2xsICovCiAJCWVsc2UgewogCQkJLyogbm8gd29yaywgc2hhcmVkIGludGVycnVwdCBwZXJoYXBzPyAgcmUtZW5hYmxlCkBAIC0yOTU0LDEzICszMDAzLDMxIEBACiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKKy8qIElTUiBmb3IgaW50ZXJydXB0IHRlc3QgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB0ZzNfdGVzdF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdGczX2h3X3N0YXR1cyAqc2JsayA9IHRwLT5od19zdGF0dXM7CisKKwlpZiAoc2Jsay0+c3RhdHVzICYgU0RfU1RBVFVTX1VQREFURUQpIHsKKwkJdHczMl9tYWlsYm94KE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVywKKwkJCSAgICAgMHgwMDAwMDAwMSk7CisJCXJldHVybiBJUlFfUkVUVkFMKDEpOworCX0KKwlyZXR1cm4gSVJRX1JFVFZBTCgwKTsKK30KKwogc3RhdGljIGludCB0ZzNfaW5pdF9odyhzdHJ1Y3QgdGczICopOwotc3RhdGljIGludCB0ZzNfaGFsdChzdHJ1Y3QgdGczICopOworc3RhdGljIGludCB0ZzNfaGFsdChzdHJ1Y3QgdGczICosIGludCk7CiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgdGczX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXRnM19pbnRlcnJ1cHQoZGV2LT5pcnEsIGRldiwgTlVMTCk7CisJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJdGczX2ludGVycnVwdCh0cC0+cGRldi0+aXJxLCBkZXYsIE5VTEwpOwogfQogI2VuZGlmCiAKQEAgLTI5NzcsNyArMzA0NCw3IEBACiAJcmVzdGFydF90aW1lciA9IHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUkVTVEFSVF9USU1FUjsKIAl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUkVTVEFSVF9USU1FUjsKIAotCXRnM19oYWx0KHRwKTsKKwl0ZzNfaGFsdCh0cCwgMCk7CiAJdGczX2luaXRfaHcodHApOwogCiAJdGczX25ldGlmX3N0YXJ0KHRwKTsKQEAgLTMzMjMsNyArMzM5MCw3IEBACiAJc3Bpbl9sb2NrX2lycSgmdHAtPmxvY2spOwogCXNwaW5fbG9jaygmdHAtPnR4X2xvY2spOwogCi0JdGczX2hhbHQodHApOworCXRnM19oYWx0KHRwLCAxKTsKIAogCXRnM19zZXRfbXR1KGRldiwgdHAsIG5ld19tdHUpOwogCkBAIC0zNTkwLDcgKzM2NTcsNyBAQAogLyogVG8gc3RvcCBhIGJsb2NrLCBjbGVhciB0aGUgZW5hYmxlIGJpdCBhbmQgcG9sbCB0aWxsIGl0CiAgKiBjbGVhcnMuICB0cC0+bG9jayBpcyBoZWxkLgogICovCi1zdGF0aWMgaW50IHRnM19zdG9wX2Jsb2NrKHN0cnVjdCB0ZzMgKnRwLCB1bnNpZ25lZCBsb25nIG9mcywgdTMyIGVuYWJsZV9iaXQpCitzdGF0aWMgaW50IHRnM19zdG9wX2Jsb2NrKHN0cnVjdCB0ZzMgKnRwLCB1bnNpZ25lZCBsb25nIG9mcywgdTMyIGVuYWJsZV9iaXQsIGludCBzaWxlbnQpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJdTMyIHZhbDsKQEAgLTM2MjMsNyArMzY5MCw3IEBACiAJCQlicmVhazsKIAl9CiAKLQlpZiAoaSA9PSBNQVhfV0FJVF9DTlQpIHsKKwlpZiAoaSA9PSBNQVhfV0FJVF9DTlQgJiYgIXNpbGVudCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJ0ZzNfc3RvcF9ibG9jayB0aW1lZCBvdXQsICIKIAkJICAgICAgICJvZnM9JWx4IGVuYWJsZV9iaXQ9JXhcbiIsCiAJCSAgICAgICBvZnMsIGVuYWJsZV9iaXQpOwpAQCAtMzYzNCw3ICszNzAxLDcgQEAKIH0KIAogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KLXN0YXRpYyBpbnQgdGczX2Fib3J0X2h3KHN0cnVjdCB0ZzMgKnRwKQorc3RhdGljIGludCB0ZzNfYWJvcnRfaHcoc3RydWN0IHRnMyAqdHAsIGludCBzaWxlbnQpCiB7CiAJaW50IGksIGVycjsKIApAQCAtMzY0NCwyMiArMzcxMSwyMCBAQAogCXR3MzJfZihNQUNfUlhfTU9ERSwgdHAtPnJ4X21vZGUpOwogCXVkZWxheSgxMCk7CiAKLQllcnIgID0gdGczX3N0b3BfYmxvY2sodHAsIFJDVkJESV9NT0RFLCBSQ1ZCRElfTU9ERV9FTkFCTEUpOwotCWVyciB8PSB0ZzNfc3RvcF9ibG9jayh0cCwgUkNWTFBDX01PREUsIFJDVkxQQ19NT0RFX0VOQUJMRSk7Ci0JZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBSQ1ZMU0NfTU9ERSwgUkNWTFNDX01PREVfRU5BQkxFKTsKLQllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIFJDVkRCRElfTU9ERSwgUkNWREJESV9NT0RFX0VOQUJMRSk7Ci0JZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBSQ1ZEQ0NfTU9ERSwgUkNWRENDX01PREVfRU5BQkxFKTsKLQllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIFJDVkNDX01PREUsIFJDVkNDX01PREVfRU5BQkxFKTsKKwllcnIgID0gdGczX3N0b3BfYmxvY2sodHAsIFJDVkJESV9NT0RFLCBSQ1ZCRElfTU9ERV9FTkFCTEUsIHNpbGVudCk7CisJZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBSQ1ZMUENfTU9ERSwgUkNWTFBDX01PREVfRU5BQkxFLCBzaWxlbnQpOworCWVyciB8PSB0ZzNfc3RvcF9ibG9jayh0cCwgUkNWTFNDX01PREUsIFJDVkxTQ19NT0RFX0VOQUJMRSwgc2lsZW50KTsKKwllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIFJDVkRCRElfTU9ERSwgUkNWREJESV9NT0RFX0VOQUJMRSwgc2lsZW50KTsKKwllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIFJDVkRDQ19NT0RFLCBSQ1ZEQ0NfTU9ERV9FTkFCTEUsIHNpbGVudCk7CisJZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBSQ1ZDQ19NT0RFLCBSQ1ZDQ19NT0RFX0VOQUJMRSwgc2lsZW50KTsKIAotCWVyciB8PSB0ZzNfc3RvcF9ibG9jayh0cCwgU05EQkRTX01PREUsIFNOREJEU19NT0RFX0VOQUJMRSk7Ci0JZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBTTkRCRElfTU9ERSwgU05EQkRJX01PREVfRU5BQkxFKTsKLQllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIFNORERBVEFJX01PREUsIFNORERBVEFJX01PREVfRU5BQkxFKTsKLQllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIFJETUFDX01PREUsIFJETUFDX01PREVfRU5BQkxFKTsKLQllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIFNORERBVEFDX01PREUsIFNORERBVEFDX01PREVfRU5BQkxFKTsKLQllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIERNQUNfTU9ERSwgRE1BQ19NT0RFX0VOQUJMRSk7Ci0JZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBTTkRCRENfTU9ERSwgU05EQkRDX01PREVfRU5BQkxFKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKKwllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIFNOREJEU19NT0RFLCBTTkRCRFNfTU9ERV9FTkFCTEUsIHNpbGVudCk7CisJZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBTTkRCRElfTU9ERSwgU05EQkRJX01PREVfRU5BQkxFLCBzaWxlbnQpOworCWVyciB8PSB0ZzNfc3RvcF9ibG9jayh0cCwgU05EREFUQUlfTU9ERSwgU05EREFUQUlfTU9ERV9FTkFCTEUsIHNpbGVudCk7CisJZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBSRE1BQ19NT0RFLCBSRE1BQ19NT0RFX0VOQUJMRSwgc2lsZW50KTsKKwllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIFNORERBVEFDX01PREUsIFNORERBVEFDX01PREVfRU5BQkxFLCBzaWxlbnQpOworCWVyciB8PSB0ZzNfc3RvcF9ibG9jayh0cCwgRE1BQ19NT0RFLCBETUFDX01PREVfRU5BQkxFLCBzaWxlbnQpOworCWVyciB8PSB0ZzNfc3RvcF9ibG9jayh0cCwgU05EQkRDX01PREUsIFNOREJEQ19NT0RFX0VOQUJMRSwgc2lsZW50KTsKIAogCXRwLT5tYWNfbW9kZSAmPSB+TUFDX01PREVfVERFX0VOQUJMRTsKIAl0dzMyX2YoTUFDX01PREUsIHRwLT5tYWNfbW9kZSk7CkBAIC0zNjc3LDI3ICszNzQyLDI0IEBACiAJCXByaW50ayhLRVJOX0VSUiBQRlggInRnM19hYm9ydF9odyB0aW1lZCBvdXQgZm9yICVzLCAiCiAJCSAgICAgICAiVFhfTU9ERV9FTkFCTEUgd2lsbCBub3QgY2xlYXIgTUFDX1RYX01PREU9JTA4eFxuIiwKIAkJICAgICAgIHRwLT5kZXYtPm5hbWUsIHRyMzIoTUFDX1RYX01PREUpKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVyciB8PSAtRU5PREVWOwogCX0KIAotCWVyciAgPSB0ZzNfc3RvcF9ibG9jayh0cCwgSE9TVENDX01PREUsIEhPU1RDQ19NT0RFX0VOQUJMRSk7Ci0JZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBXRE1BQ19NT0RFLCBXRE1BQ19NT0RFX0VOQUJMRSk7Ci0JZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBNQkZSRUVfTU9ERSwgTUJGUkVFX01PREVfRU5BQkxFKTsKKwllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIEhPU1RDQ19NT0RFLCBIT1NUQ0NfTU9ERV9FTkFCTEUsIHNpbGVudCk7CisJZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBXRE1BQ19NT0RFLCBXRE1BQ19NT0RFX0VOQUJMRSwgc2lsZW50KTsKKwllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIE1CRlJFRV9NT0RFLCBNQkZSRUVfTU9ERV9FTkFCTEUsIHNpbGVudCk7CiAKIAl0dzMyKEZUUV9SRVNFVCwgMHhmZmZmZmZmZik7CiAJdHczMihGVFFfUkVTRVQsIDB4MDAwMDAwMDApOwogCi0JZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBCVUZNR1JfTU9ERSwgQlVGTUdSX01PREVfRU5BQkxFKTsKLQllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIE1FTUFSQl9NT0RFLCBNRU1BUkJfTU9ERV9FTkFCTEUpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCWVyciB8PSB0ZzNfc3RvcF9ibG9jayh0cCwgQlVGTUdSX01PREUsIEJVRk1HUl9NT0RFX0VOQUJMRSwgc2lsZW50KTsKKwllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIE1FTUFSQl9NT0RFLCBNRU1BUkJfTU9ERV9FTkFCTEUsIHNpbGVudCk7CiAKIAlpZiAodHAtPmh3X3N0YXR1cykKIAkJbWVtc2V0KHRwLT5od19zdGF0dXMsIDAsIFRHM19IV19TVEFUVVNfU0laRSk7CiAJaWYgKHRwLT5od19zdGF0cykKIAkJbWVtc2V0KHRwLT5od19zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCB0ZzNfaHdfc3RhdHMpKTsKIAotb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTM3MjcsNiArMzc4OSwyOCBAQAogfQogCiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLworc3RhdGljIHZvaWQgdGczX2VuYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IHRnMyAqdHApCit7CisJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgJiYKKwkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BST1RFQ1RFRF9OVlJBTSkpIHsKKwkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOworCisJCXR3MzIoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyB8IEFDQ0VTU19FTkFCTEUpOworCX0KK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KK3N0YXRpYyB2b2lkIHRnM19kaXNhYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgorCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNKSkgeworCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7CisKKwkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzICYgfkFDQ0VTU19FTkFCTEUpOworCX0KK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyB2b2lkIHRnM193cml0ZV9zaWdfcHJlX3Jlc2V0KHN0cnVjdCB0ZzMgKnRwLCBpbnQga2luZCkKIHsKIAlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSkKQEAgLTM5NjcsNyArNDA1MSw3IEBACiAJCXRnM19yZWFkX21lbSh0cCwgTklDX1NSQU1fREFUQV9DRkcsICZuaWNfY2ZnKTsKIAkJaWYgKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19BU0ZfRU5BQkxFKSB7CiAJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VOQUJMRV9BU0Y7Ci0JCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTApCisJCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpCiAJCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfQVNGX05FV19IQU5EU0hBS0U7CiAJCX0KIAl9CkBAIC0zOTk3LDcgKzQwODEsNyBAQAogfQogCiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwotc3RhdGljIGludCB0ZzNfaGFsdChzdHJ1Y3QgdGczICp0cCkKK3N0YXRpYyBpbnQgdGczX2hhbHQoc3RydWN0IHRnMyAqdHAsIGludCBzaWxlbnQpCiB7CiAJaW50IGVycjsKIApAQCAtNDAwNSw3ICs0MDg5LDcgQEAKIAogCXRnM193cml0ZV9zaWdfcHJlX3Jlc2V0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOKTsKIAotCXRnM19hYm9ydF9odyh0cCk7CisJdGczX2Fib3J0X2h3KHRwLCBzaWxlbnQpOwogCWVyciA9IHRnM19jaGlwX3Jlc2V0KHRwKTsKIAogCXRnM193cml0ZV9zaWdfbGVnYWN5KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOKTsKQEAgLTQ5NzQsOSArNTA1OCw3IEBACiAJdGczX3dyaXRlX3NpZ19wcmVfcmVzZXQodHAsIFJFU0VUX0tJTkRfSU5JVCk7CiAKIAlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0lOSVRfQ09NUExFVEUpIHsKLQkJZXJyID0gdGczX2Fib3J0X2h3KHRwKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJCXRnM19hYm9ydF9odyh0cCwgMSk7CiAJfQogCiAJZXJyID0gdGczX2NoaXBfcmVzZXQodHApOwpAQCAtNTA0MSw3ICs1MTIzLDcgQEAKIAl0dzMyKEdSQ19NSVNDX0NGRywgdmFsKTsKIAogCS8qIEluaXRpYWxpemUgTUJVRi9ERVNDIHBvb2wuICovCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUwKSB7CisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSB7CiAJCS8qIERvIG5vdGhpbmcuICAqLwogCX0gZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDUpIHsKIAkJdHczMihCVUZNR1JfTUJfUE9PTF9BRERSLCBOSUNfU1JBTV9NQlVGX1BPT0xfQkFTRSk7CkBAIC01MjM4LDYgKzUzMjAsOCBAQAogCQkgICAgICBSRE1BQ19NT0RFX0xOR1JFQURfRU5BQik7CiAJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TUExJVF9NT0RFKQogCQlyZG1hY19tb2RlIHw9IFJETUFDX01PREVfU1BMSVRfRU5BQkxFOworCisJLyogSWYgc3RhdGVtZW50IGFwcGxpZXMgdG8gNTcwNSBhbmQgNTc1MCBQQ0kgZGV2aWNlcyBvbmx5ICovCiAJaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSAmJgogCSAgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCAhPSBDSElQUkVWX0lEXzU3MDVfQTApIHx8CiAJICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MCkpIHsKQEAgLTUyNTEsNiArNTMzNSw5IEBACiAJCX0KIAl9CiAKKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykKKwkJcmRtYWNfbW9kZSB8PSBSRE1BQ19NT0RFX0ZJRk9fTE9OR19CVVJTVDsKKwogI2lmIFRHM19UU09fU1VQUE9SVCAhPSAwCiAJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPKQogCQlyZG1hY19tb2RlIHw9ICgxIDw8IDI3KTsKQEAgLTUzMzIsMTAgKzU0MTksMjggQEAKIAl0dzMyX2YoTUFDX01PREUsIHRwLT5tYWNfbW9kZSB8IE1BQ19NT0RFX1JYU1RBVF9DTEVBUiB8IE1BQ19NT0RFX1RYU1RBVF9DTEVBUik7CiAJdWRlbGF5KDQwKTsKIAotCXRwLT5ncmNfbG9jYWxfY3RybCA9IEdSQ19MQ0xDVFJMX0lOVF9PTl9BVFROIHwgR1JDX0xDTENUUkxfQVVUT19TRUVQUk9NOwotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCkKKwkvKiB0cC0+Z3JjX2xvY2FsX2N0cmwgaXMgcGFydGlhbGx5IHNldCB1cCBkdXJpbmcgdGczX2dldF9pbnZhcmlhbnRzKCkuCisJICogSWYgVEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1QgaXMgc2V0LCB3ZSBzaG91bGQgcmVhZCB0aGUKKwkgKiByZWdpc3RlciB0byBwcmVzZXJ2ZSB0aGUgR1BJTyBzZXR0aW5ncyBmb3IgTE9Ncy4gVGhlIEdQSU9zLAorCSAqIHdoZXRoZXIgdXNlZCBhcyBpbnB1dHMgb3Igb3V0cHV0cywgYXJlIHNldCBieSBib290IGNvZGUgYWZ0ZXIKKwkgKiByZXNldC4KKwkgKi8KKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UKSB7CisJCXUzMiBncGlvX21hc2s7CisKKwkJZ3Bpb19tYXNrID0gR1JDX0xDTENUUkxfR1BJT19PRTAgfCBHUkNfTENMQ1RSTF9HUElPX09FMiB8CisJCQkgICAgR1JDX0xDTENUUkxfR1BJT19PVVRQVVQwIHwgR1JDX0xDTENUUkxfR1BJT19PVVRQVVQyOworCisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MikKKwkJCWdwaW9fbWFzayB8PSBHUkNfTENMQ1RSTF9HUElPX09FMyB8CisJCQkJICAgICBHUkNfTENMQ1RSTF9HUElPX09VVFBVVDM7CisKKwkJdHAtPmdyY19sb2NhbF9jdHJsIHw9IHRyMzIoR1JDX0xPQ0FMX0NUUkwpICYgZ3Bpb19tYXNrOworCisJCS8qIEdQSU8xIG11c3QgYmUgZHJpdmVuIGhpZ2ggZm9yIGVlcHJvbSB3cml0ZSBwcm90ZWN0ICovCiAJCXRwLT5ncmNfbG9jYWxfY3RybCB8PSAoR1JDX0xDTENUUkxfR1BJT19PRTEgfAogCQkJCSAgICAgICBHUkNfTENMQ1RSTF9HUElPX09VVFBVVDEpOworCX0KIAl0dzMyX2YoR1JDX0xPQ0FMX0NUUkwsIHRwLT5ncmNfbG9jYWxfY3RybCk7CiAJdWRlbGF5KDEwMCk7CiAKQEAgLTUzNTMsNiArNTQ1OCw3IEBACiAJICAgICAgIFdETUFDX01PREVfRklGT1VSVU5fRU5BQiB8IFdETUFDX01PREVfRklGT09SRUFEX0VOQUIgfAogCSAgICAgICBXRE1BQ19NT0RFX0xOR1JFQURfRU5BQik7CiAKKwkvKiBJZiBzdGF0ZW1lbnQgYXBwbGllcyB0byA1NzA1IGFuZCA1NzUwIFBDSSBkZXZpY2VzIG9ubHkgKi8KIAlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA1ICYmCiAJICAgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTcwNV9BMCkgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTApIHsKQEAgLTU3MDYsNiArNTgxMiwxMTggQEAKIAlhZGRfdGltZXIoJnRwLT50aW1lcik7CiB9CiAKK3N0YXRpYyBpbnQgdGczX3Rlc3RfaW50ZXJydXB0KHN0cnVjdCB0ZzMgKnRwKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC0+ZGV2OworCWludCBlcnIsIGk7CisJdTMyIGludF9tYm94ID0gMDsKKworCXRnM19kaXNhYmxlX2ludHModHApOworCisJZnJlZV9pcnEodHAtPnBkZXYtPmlycSwgZGV2KTsKKworCWVyciA9IHJlcXVlc3RfaXJxKHRwLT5wZGV2LT5pcnEsIHRnM190ZXN0X2lzciwKKwkJCSAgU0FfU0hJUlEgfCBTQV9TQU1QTEVfUkFORE9NLCBkZXYtPm5hbWUsIGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXRnM19lbmFibGVfaW50cyh0cCk7CisKKwl0dzMyX2YoSE9TVENDX01PREUsIHRwLT5jb2FsZXNjZV9tb2RlIHwgSE9TVENDX01PREVfRU5BQkxFIHwKKwkgICAgICAgSE9TVENDX01PREVfTk9XKTsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJaW50X21ib3ggPSB0cjMyKE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVyk7CisJCWlmIChpbnRfbWJveCAhPSAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxMCk7CisJfQorCisJdGczX2Rpc2FibGVfaW50cyh0cCk7CisKKwlmcmVlX2lycSh0cC0+cGRldi0+aXJxLCBkZXYpOworCQorCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkKKwkJZXJyID0gcmVxdWVzdF9pcnEodHAtPnBkZXYtPmlycSwgdGczX21zaSwKKwkJCQkgIFNBX1NBTVBMRV9SQU5ET00sIGRldi0+bmFtZSwgZGV2KTsKKwllbHNlCisJCWVyciA9IHJlcXVlc3RfaXJxKHRwLT5wZGV2LT5pcnEsIHRnM19pbnRlcnJ1cHQsCisJCQkJICBTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET00sIGRldi0+bmFtZSwgZGV2KTsKKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoaW50X21ib3ggIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTzsKK30KKworLyogUmV0dXJucyAwIGlmIE1TSSB0ZXN0IHN1Y2NlZWRzIG9yIE1TSSB0ZXN0IGZhaWxzIGFuZCBJTlR4IG1vZGUgaXMKKyAqIHN1Y2Nlc3NmdWxseSByZXN0b3JlZAorICovCitzdGF0aWMgaW50IHRnM190ZXN0X21zaShzdHJ1Y3QgdGczICp0cCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtPmRldjsKKwlpbnQgZXJyOworCXUxNiBwY2lfY21kOworCisJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpKQorCQlyZXR1cm4gMDsKKworCS8qIFR1cm4gb2ZmIFNFUlIgcmVwb3J0aW5nIGluIGNhc2UgTVNJIHRlcm1pbmF0ZXMgd2l0aCBNYXN0ZXIKKwkgKiBBYm9ydC4KKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZCh0cC0+cGRldiwgUENJX0NPTU1BTkQsICZwY2lfY21kKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQodHAtPnBkZXYsIFBDSV9DT01NQU5ELAorCQkJICAgICAgcGNpX2NtZCAmIH5QQ0lfQ09NTUFORF9TRVJSKTsKKworCWVyciA9IHRnM190ZXN0X2ludGVycnVwdCh0cCk7CisKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQodHAtPnBkZXYsIFBDSV9DT01NQU5ELCBwY2lfY21kKTsKKworCWlmICghZXJyKQorCQlyZXR1cm4gMDsKKworCS8qIG90aGVyIGZhaWx1cmVzICovCisJaWYgKGVyciAhPSAtRUlPKQorCQlyZXR1cm4gZXJyOworCisJLyogTVNJIHRlc3QgZmFpbGVkLCBnbyBiYWNrIHRvIElOVHggbW9kZSAqLworCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogTm8gaW50ZXJydXB0IHdhcyBnZW5lcmF0ZWQgdXNpbmcgTVNJLCAiCisJICAgICAgICJzd2l0Y2hpbmcgdG8gSU5UeCBtb2RlLiBQbGVhc2UgcmVwb3J0IHRoaXMgZmFpbHVyZSB0byAiCisJICAgICAgICJ0aGUgUENJIG1haW50YWluZXIgYW5kIGluY2x1ZGUgc3lzdGVtIGNoaXBzZXQgaW5mb3JtYXRpb24uXG4iLAorCQkgICAgICAgdHAtPmRldi0+bmFtZSk7CisKKwlmcmVlX2lycSh0cC0+cGRldi0+aXJxLCBkZXYpOworCXBjaV9kaXNhYmxlX21zaSh0cC0+cGRldik7CisKKwl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfVVNJTkdfTVNJOworCisJZXJyID0gcmVxdWVzdF9pcnEodHAtPnBkZXYtPmlycSwgdGczX2ludGVycnVwdCwKKwkJCSAgU0FfU0hJUlEgfCBTQV9TQU1QTEVfUkFORE9NLCBkZXYtPm5hbWUsIGRldik7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogTmVlZCB0byByZXNldCB0aGUgY2hpcCBiZWNhdXNlIHRoZSBNU0kgY3ljbGUgbWF5IGhhdmUgdGVybWluYXRlZAorCSAqIHdpdGggTWFzdGVyIEFib3J0LgorCSAqLworCXNwaW5fbG9ja19pcnEoJnRwLT5sb2NrKTsKKwlzcGluX2xvY2soJnRwLT50eF9sb2NrKTsKKworCXRnM19oYWx0KHRwLCAxKTsKKwllcnIgPSB0ZzNfaW5pdF9odyh0cCk7CisKKwlzcGluX3VubG9jaygmdHAtPnR4X2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmdHAtPmxvY2spOworCisJaWYgKGVycikKKwkJZnJlZV9pcnEodHAtPnBkZXYtPmlycSwgZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgdGczX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC01NzI3LDEwICs1OTQ1LDI5IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCB0ZzNfaW50ZXJydXB0LAotCQkJICBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpOworCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCisJICAgIChHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQ0hJUFJFVl81NzUwX0FYKSAmJgorCSAgICAoR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IENISVBSRVZfNTc1MF9CWCkpIHsKKwkJaWYgKHBjaV9lbmFibGVfbXNpKHRwLT5wZGV2KSA9PSAwKSB7CisJCQl1MzIgbXNpX21vZGU7CisKKwkJCW1zaV9tb2RlID0gdHIzMihNU0dJTlRfTU9ERSk7CisJCQl0dzMyKE1TR0lOVF9NT0RFLCBtc2lfbW9kZSB8IE1TR0lOVF9NT0RFX0VOQUJMRSk7CisJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9VU0lOR19NU0k7CisJCX0KKwl9CisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKQorCQllcnIgPSByZXF1ZXN0X2lycSh0cC0+cGRldi0+aXJxLCB0ZzNfbXNpLAorCQkJCSAgU0FfU0FNUExFX1JBTkRPTSwgZGV2LT5uYW1lLCBkZXYpOworCWVsc2UKKwkJZXJyID0gcmVxdWVzdF9pcnEodHAtPnBkZXYtPmlycSwgdGczX2ludGVycnVwdCwKKwkJCQkgIFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTSwgZGV2LT5uYW1lLCBkZXYpOwogCiAJaWYgKGVycikgeworCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpIHsKKwkJCXBjaV9kaXNhYmxlX21zaSh0cC0+cGRldik7CisJCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfVVNJTkdfTVNJOworCQl9CiAJCXRnM19mcmVlX2NvbnNpc3RlbnQodHApOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTU3NDAsNyArNTk3Nyw3IEBACiAKIAllcnIgPSB0ZzNfaW5pdF9odyh0cCk7CiAJaWYgKGVycikgewotCQl0ZzNfaGFsdCh0cCk7CisJCXRnM19oYWx0KHRwLCAxKTsKIAkJdGczX2ZyZWVfcmluZ3ModHApOwogCX0gZWxzZSB7CiAJCXRwLT50aW1lcl9vZmZzZXQgPSBIWiAvIDEwOwpAQCAtNTc1MSwyMyArNTk4OCw0NyBAQAogCQl0cC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyB0cC0+dGltZXJfb2Zmc2V0OwogCQl0cC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB0cDsKIAkJdHAtPnRpbWVyLmZ1bmN0aW9uID0gdGczX3RpbWVyOwotCQlhZGRfdGltZXIoJnRwLT50aW1lcik7Ci0KLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19JTklUX0NPTVBMRVRFOwogCX0KIAogCXNwaW5fdW5sb2NrKCZ0cC0+dHhfbG9jayk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ0cC0+bG9jayk7CiAKIAlpZiAoZXJyKSB7Ci0JCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCQlmcmVlX2lycSh0cC0+cGRldi0+aXJxLCBkZXYpOworCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpIHsKKwkJCXBjaV9kaXNhYmxlX21zaSh0cC0+cGRldik7CisJCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfVVNJTkdfTVNJOworCQl9CiAJCXRnM19mcmVlX2NvbnNpc3RlbnQodHApOwogCQlyZXR1cm4gZXJyOwogCX0KIAorCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkgeworCQllcnIgPSB0ZzNfdGVzdF9tc2kodHApOworCQlpZiAoZXJyKSB7CisJCQlzcGluX2xvY2tfaXJxKCZ0cC0+bG9jayk7CisJCQlzcGluX2xvY2soJnRwLT50eF9sb2NrKTsKKworCQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKSB7CisJCQkJcGNpX2Rpc2FibGVfbXNpKHRwLT5wZGV2KTsKKwkJCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfVVNJTkdfTVNJOworCQkJfQorCQkJdGczX2hhbHQodHAsIDEpOworCQkJdGczX2ZyZWVfcmluZ3ModHApOworCQkJdGczX2ZyZWVfY29uc2lzdGVudCh0cCk7CisKKwkJCXNwaW5fdW5sb2NrKCZ0cC0+dHhfbG9jayk7CisJCQlzcGluX3VubG9ja19pcnEoJnRwLT5sb2NrKTsKKworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwogCXNwaW5fbG9ja19pcnEoJnRwLT5sb2NrKTsKIAlzcGluX2xvY2soJnRwLT50eF9sb2NrKTsKIAorCWFkZF90aW1lcigmdHAtPnRpbWVyKTsKKwl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0lOSVRfQ09NUExFVEU7CiAJdGczX2VuYWJsZV9pbnRzKHRwKTsKIAogCXNwaW5fdW5sb2NrKCZ0cC0+dHhfbG9jayk7CkBAIC02MDI1LDcgKzYyODYsNyBAQAogCiAJdGczX2Rpc2FibGVfaW50cyh0cCk7CiAKLQl0ZzNfaGFsdCh0cCk7CisJdGczX2hhbHQodHAsIDEpOwogCXRnM19mcmVlX3JpbmdzKHRwKTsKIAl0cC0+dGczX2ZsYWdzICY9CiAJCX4oVEczX0ZMQUdfSU5JVF9DT01QTEVURSB8CkBAIC02MDM1LDcgKzYyOTYsMTEgQEAKIAlzcGluX3VubG9jaygmdHAtPnR4X2xvY2spOwogCXNwaW5fdW5sb2NrX2lycSgmdHAtPmxvY2spOwogCi0JZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJZnJlZV9pcnEodHAtPnBkZXYtPmlycSwgZGV2KTsKKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpIHsKKwkJcGNpX2Rpc2FibGVfbXNpKHRwLT5wZGV2KTsKKwkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1VTSU5HX01TSTsKKwl9CiAKIAltZW1jcHkoJnRwLT5uZXRfc3RhdHNfcHJldiwgdGczX2dldF9zdGF0cyh0cC0+ZGV2KSwKIAkgICAgICAgc2l6ZW9mKHRwLT5uZXRfc3RhdHNfcHJldikpOwpAQCAtNjUwOSwxMCArNjc3NCwxMiBAQAogCQlzdGFydCA9IGNwdV90b19sZTMyKHN0YXJ0KTsKIAkJbGVuICs9IGJfb2Zmc2V0OwogCQlvZmZzZXQgJj0gfjM7CisJCWlmIChsZW4gPCA0KQorCQkJbGVuID0gNDsKIAl9CiAKIAlvZGRfbGVuID0gMDsKLQlpZiAoKGxlbiAmIDMpICYmICgobGVuID4gNCkgfHwgKGJfb2Zmc2V0ID09IDApKSkgeworCWlmIChsZW4gJiAzKSB7CiAJCS8qIGFkanVzdG1lbnRzIHRvIGVuZCBvbiByZXF1aXJlZCA0IGJ5dGUgYm91bmRhcnkgKi8KIAkJb2RkX2xlbiA9IDE7CiAJCWxlbiA9IChsZW4gKyAzKSAmIH4zOwpAQCAtNjczOSw3ICs3MDA2LDcgQEAKIAl0cC0+dHhfcGVuZGluZyA9IGVyaW5nLT50eF9wZW5kaW5nOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQl0ZzNfaGFsdCh0cCk7CisJCXRnM19oYWx0KHRwLCAxKTsKIAkJdGczX2luaXRfaHcodHApOwogCQl0ZzNfbmV0aWZfc3RhcnQodHApOwogCX0KQEAgLTY3ODIsNyArNzA0OSw3IEBACiAJCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX1RYX1BBVVNFOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQl0ZzNfaGFsdCh0cCk7CisJCXRnM19oYWx0KHRwLCAxKTsKIAkJdGczX2luaXRfaHcodHApOwogCQl0ZzNfbmV0aWZfc3RhcnQodHApOwogCX0KQEAgLTcwNjcsNiArNzMzNCw2NyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19nZXRfNTc1Ml9udnJhbV9pbmZvKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiBudmNmZzE7CisKKwludmNmZzEgPSB0cjMyKE5WUkFNX0NGRzEpOworCisJLyogTlZSQU0gcHJvdGVjdGlvbiBmb3IgVFBNICovCisJaWYgKG52Y2ZnMSAmICgxIDw8IDI3KSkKKwkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNOworCisJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJWRU5ET1JfTUFTSykgeworCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfQVRNRUxfRUVQUk9NXzY0S0haOgorCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfQVRNRUxfRUVQUk9NXzM3NktIWjoKKwkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfQVRNRUxfRkxBU0hfQlVGRkVSRUQ6CisJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKKwkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUxMDoKKwkJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMjA6CisJCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTQwOgorCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7CisJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCQlicmVhazsKKwl9CisKKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgeworCQlzd2l0Y2ggKG52Y2ZnMSAmIE5WUkFNX0NGRzFfNTc1MlBBR0VfU0laRV9NQVNLKSB7CisJCQljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfMjU2OgorCQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKKwkJCQlicmVhazsKKwkJCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV81MTI6CisJCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gNTEyOworCQkJCWJyZWFrOworCQkJY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzFLOgorCQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDEwMjQ7CisJCQkJYnJlYWs7CisJCQljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfMks6CisJCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjA0ODsKKwkJCQlicmVhazsKKwkJCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV80SzoKKwkJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSA0MDk2OworCQkJCWJyZWFrOworCQkJY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzI2NDoKKwkJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNjQ7CisJCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSB7CisJCS8qIEZvciBlZXByb20sIHNldCBwYWdlc2l6ZSB0byBtYXhpbXVtIGVlcHJvbSBzaXplICovCisJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUMjRDNTEyX0NISVBfU0laRTsKKworCQludmNmZzEgJj0gfk5WUkFNX0NGRzFfQ09NUEFUX0JZUEFTUzsKKwkJdHczMihOVlJBTV9DRkcxLCBudmNmZzEpOworCX0KK30KKwogLyogQ2hpcHMgb3RoZXIgdGhhbiA1NzAwLzU3MDEgdXNlIHRoZSBOVlJBTSBmb3IgZmV0Y2hpbmcgaW5mby4gKi8KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfbnZyYW1faW5pdChzdHJ1Y3QgdGczICp0cCkKIHsKQEAgLTcwOTMsMjAgKzc0MjEsMTYgQEAKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDEpIHsKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTTsKIAotCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTApIHsKLQkJCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKKwkJdGczX2VuYWJsZV9udnJhbV9hY2Nlc3ModHApOwogCi0JCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgfCBBQ0NFU1NfRU5BQkxFKTsKLQkJfQorCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTIpCisJCQl0ZzNfZ2V0XzU3NTJfbnZyYW1faW5mbyh0cCk7CisJCWVsc2UKKwkJCXRnM19nZXRfbnZyYW1faW5mbyh0cCk7CiAKLQkJdGczX2dldF9udnJhbV9pbmZvKHRwKTsKIAkJdGczX2dldF9udnJhbV9zaXplKHRwKTsKIAotCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTApIHsKLQkJCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKLQotCQkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzICYgfkFDQ0VTU19FTkFCTEUpOwotCQl9CisJCXRnM19kaXNhYmxlX252cmFtX2FjY2Vzcyh0cCk7CiAKIAl9IGVsc2UgewogCQl0cC0+dGczX2ZsYWdzICY9IH4oVEczX0ZMQUdfTlZSQU0gfCBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCk7CkBAIC03MTk1LDExICs3NTE5LDcgQEAKIAogCXRnM19udnJhbV9sb2NrKHRwKTsKIAotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MCkgewotCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7Ci0KLQkJdHczMl9mKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgfCBBQ0NFU1NfRU5BQkxFKTsKLQl9CisJdGczX2VuYWJsZV9udnJhbV9hY2Nlc3ModHApOwogCiAJdHczMihOVlJBTV9BRERSLCBvZmZzZXQpOwogCXJldCA9IHRnM19udnJhbV9leGVjX2NtZCh0cCwgTlZSQU1fQ01EX1JEIHwgTlZSQU1fQ01EX0dPIHwKQEAgLTcyMTAsMTEgKzc1MzAsNyBAQAogCiAJdGczX252cmFtX3VubG9jayh0cCk7CiAKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTApIHsKLQkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOwotCi0JCXR3MzJfZihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzICYgfkFDQ0VTU19FTkFCTEUpOwotCX0KKwl0ZzNfZGlzYWJsZV9udnJhbV9hY2Nlc3ModHApOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTcyNzcsNyArNzU5Myw3IEBACiAKIAl3aGlsZSAobGVuKSB7CiAJCWludCBqOwotCQl1MzIgcGh5X2FkZHIsIHBhZ2Vfb2ZmLCBzaXplLCBudmFjY2VzczsKKwkJdTMyIHBoeV9hZGRyLCBwYWdlX29mZiwgc2l6ZTsKIAogCQlwaHlfYWRkciA9IG9mZnNldCAmIH5wYWdlbWFzazsKIAkKQEAgLTczMDAsOCArNzYxNiw3IEBACiAKIAkJb2Zmc2V0ID0gb2Zmc2V0ICsgKHBhZ2VzaXplIC0gcGFnZV9vZmYpOwogCi0JCW52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOwotCQl0dzMyX2YoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyB8IEFDQ0VTU19FTkFCTEUpOworCQl0ZzNfZW5hYmxlX252cmFtX2FjY2Vzcyh0cCk7CiAKIAkJLyoKIAkJICogQmVmb3JlIHdlIGNhbiBlcmFzZSB0aGUgZmxhc2ggcGFnZSwgd2UgbmVlZApAQCAtNzQyNSw4ICs3NzQwLDggQEAKIAl9CiAKIAlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UKSB7Ci0JCXR3MzJfZihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsIHwKLQkJICAgICAgIEdSQ19MQ0xDVFJMX0dQSU9fT0UxKTsKKwkJdHczMl9mKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwgJgorCQkgICAgICAgfkdSQ19MQ0xDVFJMX0dQSU9fT1VUUFVUMSk7CiAJCXVkZWxheSg0MCk7CiAJfQogCkBAIC03NDM4LDEzICs3NzUzLDEwIEBACiAKIAkJdGczX252cmFtX2xvY2sodHApOwogCi0JCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MCkgewotCQkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOwotCi0JCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgfCBBQ0NFU1NfRU5BQkxFKTsKLQorCQl0ZzNfZW5hYmxlX252cmFtX2FjY2Vzcyh0cCk7CisJCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCisJCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNKSkKIAkJCXR3MzIoTlZSQU1fV1JJVEUxLCAweDQwNik7Ci0JCX0KIAogCQlncmNfbW9kZSA9IHRyMzIoR1JDX01PREUpOwogCQl0dzMyKEdSQ19NT0RFLCBncmNfbW9kZSB8IEdSQ19NT0RFX05WUkFNX1dSX0VOQUJMRSk7CkBAIC03NDYzLDE3ICs3Nzc1LDEyIEBACiAJCWdyY19tb2RlID0gdHIzMihHUkNfTU9ERSk7CiAJCXR3MzIoR1JDX01PREUsIGdyY19tb2RlICYgfkdSQ19NT0RFX05WUkFNX1dSX0VOQUJMRSk7CiAKLQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUwKSB7Ci0JCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7Ci0KLQkJCXR3MzIoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyAmIH5BQ0NFU1NfRU5BQkxFKTsKLQkJfQorCQl0ZzNfZGlzYWJsZV9udnJhbV9hY2Nlc3ModHApOwogCQl0ZzNfbnZyYW1fdW5sb2NrKHRwKTsKIAl9CiAKIAlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UKSB7Ci0JCXR3MzJfZihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsIHwKLQkJICAgICAgIEdSQ19MQ0xDVFJMX0dQSU9fT0UxIHwgR1JDX0xDTENUUkxfR1BJT19PVVRQVVQxKTsKKwkJdHczMl9mKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwpOwogCQl1ZGVsYXkoNDApOwogCX0KIApAQCAtNzUzNywyMSArNzg0NCwyNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB0ZzNfcGh5X3Byb2JlKHN0cnVjdCB0ZzMgKnRwKQorLyogU2luY2UgdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGluIEQzLWhvdCBwb3dlciBzdGF0ZSBkdXJpbmcKKyAqIHRnM19pbml0X29uZSgpLCBvbmx5IGNvbmZpZyBjeWNsZXMgYXJlIGFsbG93ZWQuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfZ2V0X2VlcHJvbV9od19jZmcoc3RydWN0IHRnMyAqdHApCiB7Ci0JdTMyIGVlcHJvbV9waHlfaWQsIGh3X3BoeV9pZF8xLCBod19waHlfaWRfMjsKLQl1MzIgaHdfcGh5X2lkLCBod19waHlfaWRfbWFza2VkOwogCXUzMiB2YWw7Ci0JaW50IGVlcHJvbV9zaWduYXR1cmVfZm91bmQsIGVlcHJvbV9waHlfc2VyZGVzLCBlcnI7CisKKwkvKiBNYWtlIHN1cmUgcmVnaXN0ZXIgYWNjZXNzZXMgKGluZGlyZWN0IG9yIG90aGVyd2lzZSkKKwkgKiB3aWxsIGZ1bmN0aW9uIGNvcnJlY3RseS4KKwkgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUlTQ19IT1NUX0NUUkwsCisJCQkgICAgICAgdHAtPm1pc2NfaG9zdF9jdHJsKTsKIAogCXRwLT5waHlfaWQgPSBQSFlfSURfSU5WQUxJRDsKLQllZXByb21fcGh5X2lkID0gUEhZX0lEX0lOVkFMSUQ7Ci0JZWVwcm9tX3BoeV9zZXJkZXMgPSAwOwotCWVlcHJvbV9zaWduYXR1cmVfZm91bmQgPSAwOworCXRwLT5sZWRfY3RybCA9IExFRF9DVFJMX01PREVfUEhZXzE7CisKIAl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0RBVEFfU0lHLCAmdmFsKTsKIAlpZiAodmFsID09IE5JQ19TUkFNX0RBVEFfU0lHX01BR0lDKSB7CiAJCXUzMiBuaWNfY2ZnLCBsZWRfY2ZnOwotCQl1MzIgbmljX3BoeV9pZCwgdmVyLCBjZmcyID0gMDsKKwkJdTMyIG5pY19waHlfaWQsIHZlciwgY2ZnMiA9IDAsIGVlcHJvbV9waHlfaWQ7CisJCWludCBlZXByb21fcGh5X3NlcmRlcyA9IDA7CiAKIAkJdGczX3JlYWRfbWVtKHRwLCBOSUNfU1JBTV9EQVRBX0NGRywgJm5pY19jZmcpOwogCQl0cC0+bmljX3NyYW1fZGF0YV9jZmcgPSBuaWNfY2ZnOwpAQCAtNzU2NCw4ICs3ODc3LDYgQEAKIAkJICAgICh2ZXIgPiAwKSAmJiAodmVyIDwgMHgxMDApKQogCQkJdGczX3JlYWRfbWVtKHRwLCBOSUNfU1JBTV9EQVRBX0NGR18yLCAmY2ZnMik7CiAKLQkJZWVwcm9tX3NpZ25hdHVyZV9mb3VuZCA9IDE7Ci0KIAkJaWYgKChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfUEhZX1RZUEVfTUFTSykgPT0KIAkJICAgIE5JQ19TUkFNX0RBVEFfQ0ZHX1BIWV9UWVBFX0ZJQkVSKQogCQkJZWVwcm9tX3BoeV9zZXJkZXMgPSAxOwpAQCAtNzU4MSwxMCArNzg5MiwxNCBAQAogCQl9IGVsc2UKIAkJCWVlcHJvbV9waHlfaWQgPSAwOwogCi0JCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MCkgeworCQl0cC0+cGh5X2lkID0gZWVwcm9tX3BoeV9pZDsKKwkJaWYgKGVlcHJvbV9waHlfc2VyZGVzKQorCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX1NFUkRFUzsKKworCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpCiAJCQlsZWRfY2ZnID0gY2ZnMiAmIChOSUNfU1JBTV9EQVRBX0NGR19MRURfTU9ERV9NQVNLIHwKIAkJCQkgICAgU0hBU1RBX0VYVF9MRURfTU9ERV9NQVNLKTsKLQkJfSBlbHNlCisJCWVsc2UKIAkJCWxlZF9jZmcgPSBuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfTEVEX01PREVfTUFTSzsKIAogCQlzd2l0Y2ggKGxlZF9jZmcpIHsKQEAgLTc2MzQsNyArNzk0OSw3IEBACiAKIAkJaWYgKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19BU0ZfRU5BQkxFKSB7CiAJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VOQUJMRV9BU0Y7Ci0JCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTApCisJCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpCiAJCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfQVNGX05FV19IQU5EU0hBS0U7CiAJCX0KIAkJaWYgKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19GSUJFUl9XT0wpCkBAIC03NjQ4LDYgKzc5NjMsMTMgQEAKIAkJaWYgKGNmZzIgJiAoMSA8PCAxOCkpCiAJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9TRVJERVNfUFJFRU1QSEFTSVM7CiAJfQorfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0ZzNfcGh5X3Byb2JlKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiBod19waHlfaWRfMSwgaHdfcGh5X2lkXzI7CisJdTMyIGh3X3BoeV9pZCwgaHdfcGh5X2lkX21hc2tlZDsKKwlpbnQgZXJyOwogCiAJLyogUmVhZGluZyB0aGUgUEhZIElEIHJlZ2lzdGVyIGNhbiBjb25mbGljdCB3aXRoIEFTRgogCSAqIGZpcndtYXJlIGFjY2VzcyB0byB0aGUgUEhZIGhhcmR3YXJlLgpAQCAtNzY3NiwxMCArNzk5OCwxMCBAQAogCQlpZiAoaHdfcGh5X2lkX21hc2tlZCA9PSBQSFlfSURfQkNNODAwMikKIAkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV9TRVJERVM7CiAJfSBlbHNlIHsKLQkJaWYgKGVlcHJvbV9zaWduYXR1cmVfZm91bmQpIHsKLQkJCXRwLT5waHlfaWQgPSBlZXByb21fcGh5X2lkOwotCQkJaWYgKGVlcHJvbV9waHlfc2VyZGVzKQotCQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV9TRVJERVM7CisJCWlmICh0cC0+cGh5X2lkICE9IFBIWV9JRF9JTlZBTElEKSB7CisJCQkvKiBEbyBub3RoaW5nLCBwaHkgSUQgYWxyZWFkeSBzZXQgdXAgaW4KKwkJCSAqIHRnM19nZXRfZWVwcm9tX2h3X2NmZygpLgorCQkJICovCiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3Qgc3Vic3lzX3RibF9lbnQgKnA7CiAKQEAgLTc3NTAsOSArODA3Miw2IEBACiAJCWVyciA9IHRnM19pbml0XzU0MDFwaHlfZHNwKHRwKTsKIAl9CiAKLQlpZiAoIWVlcHJvbV9zaWduYXR1cmVfZm91bmQpCi0JCXRwLT5sZWRfY3RybCA9IExFRF9DVFJMX01PREVfUEhZXzE7Ci0KIAlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfU0VSREVTKQogCQl0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgPQogCQkJKEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfApAQCAtNzkxNyw2ICs4MjM2LDEyIEBACiAJdHAtPnBjaV9jaGlwX3Jldl9pZCA9IChtaXNjX2N0cmxfcmVnID4+CiAJCQkgICAgICAgTUlTQ19IT1NUX0NUUkxfQ0hJUFJFVl9TSElGVCk7CiAKKwkvKiBXcm9uZyBjaGlwIElEIGluIDU3NTIgQTAuIFRoaXMgY29kZSBjYW4gYmUgcmVtb3ZlZCBsYXRlcgorCSAqIGFzIEEwIGlzIG5vdCBpbiBwcm9kdWN0aW9uLgorCSAqLworCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTc1Ml9BMF9IVykKKwkJdHAtPnBjaV9jaGlwX3Jldl9pZCA9IENISVBSRVZfSURfNTc1Ml9BMDsKKwogCS8qIEluaXRpYWxpemUgbWlzYyBob3N0IGNvbnRyb2wgaW4gUENJIGJsb2NrLiAqLwogCXRwLT5taXNjX2hvc3RfY3RybCB8PSAobWlzY19jdHJsX3JlZyAmCiAJCQkgICAgICAgTUlTQ19IT1NUX0NUUkxfQ0hJUFJFVik7CkBAIC03OTMxLDExICs4MjU2LDE1IEBACiAJdHAtPnBjaV9oZHJfdHlwZSAgICAgPSAoY2FjaGVsaW5lX3N6X3JlZyA+PiAxNikgJiAweGZmOwogCXRwLT5wY2lfYmlzdCAgICAgICAgID0gKGNhY2hlbGluZV9zel9yZWcgPj4gMjQpICYgMHhmZjsKIAorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MCB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MikKKwkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfNTc1MF9QTFVTOworCiAJaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSkgfHwKLQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUwKSkKKwkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSkKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfNTcwNV9QTFVTOwogCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUwKQorCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfSFdfVFNPOwogCiAJaWYgKHBjaV9maW5kX2NhcGFiaWxpdHkodHAtPnBkZXYsIFBDSV9DQVBfSURfRVhQKSAhPSAwKQpAQCAtODAxMyw2ICs4MzQyLDMxIEBACiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9QQ0lTVEFURSwgcGNpX3N0YXRlX3JlZyk7CiAJfQogCisJLyogR2V0IGVlcHJvbSBodyBjb25maWcgYmVmb3JlIGNhbGxpbmcgdGczX3NldF9wb3dlcl9zdGF0ZSgpLgorCSAqIEluIHBhcnRpY3VsYXIsIHRoZSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVCBmbGFnIG11c3QgYmUKKwkgKiBkZXRlcm1pbmVkIGJlZm9yZSBjYWxsaW5nIHRnM19zZXRfcG93ZXJfc3RhdGUoKSBzbyB0aGF0CisJICogd2Uga25vdyB3aGV0aGVyIG9yIG5vdCB0byBzd2l0Y2ggb3V0IG9mIFZhdXggcG93ZXIuCisJICogV2hlbiB0aGUgZmxhZyBpcyBzZXQsIGl0IG1lYW5zIHRoYXQgR1BJTzEgaXMgdXNlZCBmb3IgZWVwcm9tCisJICogd3JpdGUgcHJvdGVjdCBhbmQgYWxzbyBpbXBsaWVzIHRoYXQgaXQgaXMgYSBMT00gd2hlcmUgR1BJT3MKKwkgKiBhcmUgbm90IHVzZWQgdG8gc3dpdGNoIHBvd2VyLgorCSAqLyAKKwl0ZzNfZ2V0X2VlcHJvbV9od19jZmcodHApOworCisJLyogU2V0IHVwIHRwLT5ncmNfbG9jYWxfY3RybCBiZWZvcmUgY2FsbGluZyB0ZzNfc2V0X3Bvd2VyX3N0YXRlKCkuCisJICogR1BJTzEgZHJpdmVuIGhpZ2ggd2lsbCBicmluZyA1NzAwJ3MgZXh0ZXJuYWwgUEhZIG91dCBvZiByZXNldC4KKwkgKiBJdCBpcyBhbHNvIHVzZWQgYXMgZWVwcm9tIHdyaXRlIHByb3RlY3Qgb24gTE9Ncy4KKwkgKi8KKwl0cC0+Z3JjX2xvY2FsX2N0cmwgPSBHUkNfTENMQ1RSTF9JTlRfT05fQVRUTiB8IEdSQ19MQ0xDVFJMX0FVVE9fU0VFUFJPTTsKKwlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAwKSB8fAorCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UKSkKKwkJdHAtPmdyY19sb2NhbF9jdHJsIHw9IChHUkNfTENMQ1RSTF9HUElPX09FMSB8CisJCQkJICAgICAgIEdSQ19MQ0xDVFJMX0dQSU9fT1VUUFVUMSk7CisJLyogVW51c2VkIEdQSU8zIG11c3QgYmUgZHJpdmVuIGFzIG91dHB1dCBvbiA1NzUyIGJlY2F1c2UgdGhlcmUKKwkgKiBhcmUgbm8gcHVsbC11cCByZXNpc3RvcnMgb24gdW51c2VkIEdQSU8gcGlucy4KKwkgKi8KKwllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MikKKwkJdHAtPmdyY19sb2NhbF9jdHJsIHw9IEdSQ19MQ0xDVFJMX0dQSU9fT0UzOworCiAJLyogRm9yY2UgdGhlIGNoaXAgaW50byBEMC4gKi8KIAllcnIgPSB0ZzNfc2V0X3Bvd2VyX3N0YXRlKHRwLCAwKTsKIAlpZiAoZXJyKSB7CkBAIC04MDY1LDggKzg0MTksNyBAQAogCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwNF9BMCkKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZXzU3MDRfQTBfQlVHOwogCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA1IHx8Ci0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUwKQorCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX0JFUl9CVUc7CiAKIAkvKiBPbmx5IDU3MDEgYW5kIGxhdGVyIHN1cHBvcnQgdGFnZ2VkIGlycSBzdGF0dXMgbW9kZS4KQEAgLTg2MjgsNiArODk4MSw3IEBACiAJY2FzZSBQSFlfSURfQkNNNTcwNDoJcmV0dXJuICI1NzA0IjsKIAljYXNlIFBIWV9JRF9CQ001NzA1OglyZXR1cm4gIjU3MDUiOwogCWNhc2UgUEhZX0lEX0JDTTU3NTA6CXJldHVybiAiNTc1MCI7CisJY2FzZSBQSFlfSURfQkNNNTc1MjoJcmV0dXJuICI1NzUyIjsKIAljYXNlIFBIWV9JRF9CQ004MDAyOglyZXR1cm4gIjgwMDIvc2VyZGVzIjsKIAljYXNlIDA6CQkJcmV0dXJuICJzZXJkZXMiOwogCWRlZmF1bHQ6CQlyZXR1cm4gInVua25vd24iOwpAQCAtODg3OCw3ICs5MjMyLDcgQEAKIAkgICAgKHRyMzIoV0RNQUNfTU9ERSkgJiBXRE1BQ19NT0RFX0VOQUJMRSkpIHsKIAkJcGNpX3NhdmVfc3RhdGUodHAtPnBkZXYpOwogCQl0dzMyKE1FTUFSQl9NT0RFLCBNRU1BUkJfTU9ERV9FTkFCTEUpOwotCQl0ZzNfaGFsdCh0cCk7CisJCXRnM19oYWx0KHRwLCAxKTsKIAl9CiAKIAllcnIgPSB0ZzNfdGVzdF9kbWEodHApOwpAQCAtOTAwMSw3ICs5MzU1LDcgQEAKIAogCXNwaW5fbG9ja19pcnEoJnRwLT5sb2NrKTsKIAlzcGluX2xvY2soJnRwLT50eF9sb2NrKTsKLQl0ZzNfaGFsdCh0cCk7CisJdGczX2hhbHQodHAsIDEpOwogCXNwaW5fdW5sb2NrKCZ0cC0+dHhfbG9jayk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ0cC0+bG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggZDQ4ODg3ZC4uOGRlNmYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTEyNSw2ICsxMjUsOSBAQAogI2RlZmluZSAgQ0hJUFJFVl9JRF81NzUwX0EwCQkgMHg0MDAwCiAjZGVmaW5lICBDSElQUkVWX0lEXzU3NTBfQTEJCSAweDQwMDEKICNkZWZpbmUgIENISVBSRVZfSURfNTc1MF9BMwkJIDB4NDAwMworI2RlZmluZSAgQ0hJUFJFVl9JRF81NzUyX0EwX0hXCQkgMHg1MDAwCisjZGVmaW5lICBDSElQUkVWX0lEXzU3NTJfQTAJCSAweDYwMDAKKyNkZWZpbmUgIENISVBSRVZfSURfNTc1Ml9BMQkJIDB4NjAwMQogI2RlZmluZSAgR0VUX0FTSUNfUkVWKENISVBfUkVWX0lEKQkoKENISVBfUkVWX0lEKSA+PiAxMikKICNkZWZpbmUgICBBU0lDX1JFVl81NzAwCQkJIDB4MDcKICNkZWZpbmUgICBBU0lDX1JFVl81NzAxCQkJIDB4MDAKQEAgLTEzMiw2ICsxMzUsNyBAQAogI2RlZmluZSAgIEFTSUNfUkVWXzU3MDQJCQkgMHgwMgogI2RlZmluZSAgIEFTSUNfUkVWXzU3MDUJCQkgMHgwMwogI2RlZmluZSAgIEFTSUNfUkVWXzU3NTAJCQkgMHgwNAorI2RlZmluZSAgIEFTSUNfUkVWXzU3NTIJCQkgMHgwNgogI2RlZmluZSAgR0VUX0NISVBfUkVWKENISVBfUkVWX0lEKQkoKENISVBfUkVWX0lEKSA+PiA4KQogI2RlZmluZSAgIENISVBSRVZfNTcwMF9BWAkJIDB4NzAKICNkZWZpbmUgICBDSElQUkVWXzU3MDBfQlgJCSAweDcxCkBAIC0xMzA3LDYgKzEzMTEsOSBAQAogI2RlZmluZSAgR1JDX0xDTENUUkxfQ0xFQVJJTlQJCTB4MDAwMDAwMDIKICNkZWZpbmUgIEdSQ19MQ0xDVFJMX1NFVElOVAkJMHgwMDAwMDAwNAogI2RlZmluZSAgR1JDX0xDTENUUkxfSU5UX09OX0FUVE4JMHgwMDAwMDAwOAorI2RlZmluZSAgR1JDX0xDTENUUkxfR1BJT19JTlBVVDMJMHgwMDAwMDAyMAorI2RlZmluZSAgR1JDX0xDTENUUkxfR1BJT19PRTMJCTB4MDAwMDAwNDAKKyNkZWZpbmUgIEdSQ19MQ0xDVFJMX0dQSU9fT1VUUFVUMwkweDAwMDAwMDgwCiAjZGVmaW5lICBHUkNfTENMQ1RSTF9HUElPX0lOUFVUMAkweDAwMDAwMTAwCiAjZGVmaW5lICBHUkNfTENMQ1RSTF9HUElPX0lOUFVUMQkweDAwMDAwMjAwCiAjZGVmaW5lICBHUkNfTENMQ1RSTF9HUElPX0lOUFVUMgkweDAwMDAwNDAwCkBAIC0xMzkyLDYgKzEzOTksMjAgQEAKICNkZWZpbmUgIEZMQVNIX1ZFTkRPUl9TQUlGVU4JCSAweDAxMDAwMDAzCiAjZGVmaW5lICBGTEFTSF9WRU5ET1JfU1NUX1NNQUxMCQkgMHgwMDAwMDAwMQogI2RlZmluZSAgRkxBU0hfVkVORE9SX1NTVF9MQVJHRQkJIDB4MDIwMDAwMDEKKyNkZWZpbmUgIE5WUkFNX0NGRzFfNTc1MlZFTkRPUl9NQVNLCSAweDAzYzAwMDAzCisjZGVmaW5lICBGTEFTSF81NzUyVkVORE9SX0FUTUVMX0VFUFJPTV82NEtIWgkgMHgwMDAwMDAwMAorI2RlZmluZSAgRkxBU0hfNTc1MlZFTkRPUl9BVE1FTF9FRVBST01fMzc2S0haCSAweDAyMDAwMDAwCisjZGVmaW5lICBGTEFTSF81NzUyVkVORE9SX0FUTUVMX0ZMQVNIX0JVRkZFUkVECSAweDAyMDAwMDAzCisjZGVmaW5lICBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMTAJIDB4MDI0MDAwMDAKKyNkZWZpbmUgIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUyMAkgMHgwMjQwMDAwMgorI2RlZmluZSAgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTQwCSAweDAyNDAwMDAxCisjZGVmaW5lICBOVlJBTV9DRkcxXzU3NTJQQUdFX1NJWkVfTUFTSwkgMHg3MDAwMDAwMAorI2RlZmluZSAgRkxBU0hfNTc1MlBBR0VfU0laRV8yNTYJIDB4MDAwMDAwMDAKKyNkZWZpbmUgIEZMQVNIXzU3NTJQQUdFX1NJWkVfNTEyCSAweDEwMDAwMDAwCisjZGVmaW5lICBGTEFTSF81NzUyUEFHRV9TSVpFXzFLCQkgMHgyMDAwMDAwMAorI2RlZmluZSAgRkxBU0hfNTc1MlBBR0VfU0laRV8ySwkJIDB4MzAwMDAwMDAKKyNkZWZpbmUgIEZMQVNIXzU3NTJQQUdFX1NJWkVfNEsJCSAweDQwMDAwMDAwCisjZGVmaW5lICBGTEFTSF81NzUyUEFHRV9TSVpFXzI2NAkgMHg1MDAwMDAwMAogI2RlZmluZSBOVlJBTV9DRkcyCQkJMHgwMDAwNzAxOAogI2RlZmluZSBOVlJBTV9DRkczCQkJMHgwMDAwNzAxYwogI2RlZmluZSBOVlJBTV9TV0FSQgkJCTB4MDAwMDcwMjAKQEAgLTIxMDAsNiArMjEyMSw5IEBACiAjZGVmaW5lIFRHM19GTEcyX0hXX1RTTwkJCTB4MDAwMTAwMDAKICNkZWZpbmUgVEczX0ZMRzJfU0VSREVTX1BSRUVNUEhBU0lTCTB4MDAwMjAwMDAKICNkZWZpbmUgVEczX0ZMRzJfNTcwNV9QTFVTCQkweDAwMDQwMDAwCisjZGVmaW5lIFRHM19GTEcyXzU3NTBfUExVUwkJMHgwMDA4MDAwMAorI2RlZmluZSBURzNfRkxHMl9QUk9URUNURURfTlZSQU0JMHgwMDEwMDAwMAorI2RlZmluZSBURzNfRkxHMl9VU0lOR19NU0kJCTB4MDAyMDAwMDAKIAogCXUzMgkJCQlzcGxpdF9tb2RlX21heF9yZXFzOwogI2RlZmluZSBTUExJVF9NT0RFXzU3MDRfTUFYX1JFUQkJMwpAQCAtMjE0NSw2ICsyMTY5LDcgQEAKICNkZWZpbmUgUEhZX0lEX0JDTTU3MDQJCQkweDYwMDA4MTkwCiAjZGVmaW5lIFBIWV9JRF9CQ001NzA1CQkJMHg2MDAwODFhMAogI2RlZmluZSBQSFlfSURfQkNNNTc1MAkJCTB4NjAwMDgxODAKKyNkZWZpbmUgUEhZX0lEX0JDTTU3NTIJCQkweDYwMDA4MTAwCiAjZGVmaW5lIFBIWV9JRF9CQ004MDAyCQkJMHg2MDAxMDE0MAogI2RlZmluZSBQSFlfSURfSU5WQUxJRAkJCTB4ZmZmZmZmZmYKICNkZWZpbmUgUEhZX0lEX1JFVl9NQVNLCQkJMHgwMDAwMDAwZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC93YW4vS2NvbmZpZwppbmRleCAzNTc5MTkzLi42NmI5NDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93YW4vS2NvbmZpZwpAQCAtMjYsNyArMjYsNyBAQAogIyBUaGVyZSBpcyBubyB3YXkgdG8gZGV0ZWN0IGEgY29tdHJvbCBzdjExIC0gZm9yY2UgaXQgbW9kdWxhciBmb3Igbm93LgogY29uZmlnIEhPU1RFU1NfU1YxMQogCXRyaXN0YXRlICJDb210cm9sIEhvc3Rlc3MgU1YtMTEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFdBTiAmJiBJU0EgJiYgbQorCWRlcGVuZHMgb24gV0FOICYmIElTQSAmJiBtICYmIElTQV9ETUFfQVBJCiAJaGVscAogCSAgRHJpdmVyIGZvciBDb210cm9sIEhvc3Rlc3MgU1YtMTEgbmV0d29yayBjYXJkIHdoaWNoCiAJICBvcGVyYXRlcyBvbiBsb3cgc3BlZWQgc3luY2hyb25vdXMgc2VyaWFsIGxpbmtzIGF0IHVwIHRvCkBAIC0zOCw3ICszOCw3IEBACiAjIFRoZSBDT1NBL1NSUCBkcml2ZXIgaGFzIG5vdCBiZWVuIHRlc3RlZCBhcyBub24tbW9kdWxhciB5ZXQuCiBjb25maWcgQ09TQQogCXRyaXN0YXRlICJDT1NBL1NSUCBzeW5jIHNlcmlhbCBib2FyZHMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFdBTiAmJiBJU0EgJiYgbQorCWRlcGVuZHMgb24gV0FOICYmIElTQSAmJiBtICYmIElTQV9ETUFfQVBJCiAJLS0taGVscC0tLQogCSAgRHJpdmVyIGZvciBDT1NBIGFuZCBTUlAgc3luY2hyb25vdXMgc2VyaWFsIGJvYXJkcy4KIApAQCAtMTI3LDcgKzEyNyw3IEBACiAjIFRoZXJlIGlzIG5vIHdheSB0byBkZXRlY3QgYSBTZWFsZXZlbCBib2FyZC4gRm9yY2UgaXQgbW9kdWxhcgogY29uZmlnIFNFQUxFVkVMXzQwMjEKIAl0cmlzdGF0ZSAiU2VhbGV2ZWwgU3lzdGVtcyA0MDIxIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBXQU4gJiYgSVNBICYmIG0KKwlkZXBlbmRzIG9uIFdBTiAmJiBJU0EgJiYgbSAmJiBJU0FfRE1BX0FQSQogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBTZWFsZXZlbCBTeXN0ZW1zIEFDQiA1NiBzZXJpYWwgSS9PIGFkYXB0ZXIuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jIGIvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMKaW5kZXggNWI0OGNkOC4uMDJkNTdjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMKQEAgLTQzNiw5ICs0MzYsNyBAQAogCX0KIAogCWlmIChlcnIpIHsKLQkJaWYgKGNoYW4tPmxvY2FsX2FkZHIpCi0JCQlrZnJlZShjaGFuLT5sb2NhbF9hZGRyKTsKLQorCQlrZnJlZShjaGFuLT5sb2NhbF9hZGRyKTsKIAkJa2ZyZWUoY2hhbik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtNDU4LDkgKzQ1Niw3IEBACiAJCXN0cnVjdCBjeWN4X3gyNV9jaGFubmVsICpjaGFuID0gZGV2LT5wcml2OwogCiAJCWlmIChjaGFuLT5zdmMpIHsKLQkJCWlmIChjaGFuLT5sb2NhbF9hZGRyKQotCQkJCWtmcmVlKGNoYW4tPmxvY2FsX2FkZHIpOwotCisJCQlrZnJlZShjaGFuLT5sb2NhbF9hZGRyKTsKIAkJCWlmIChjaGFuLT5zdGF0ZSA9PSBXQU5fQ09OTkVDVEVEKQogCQkJCWRlbF90aW1lcigmY2hhbi0+dGltZXIpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMgYi9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMKaW5kZXggZDY3YmUyNS4uM2U3NzUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYwpAQCAtMzQyNyw3ICszNDI3LDcgQEAKIHsKIAlzdGF0aWMgaW50IGZpcnN0X3RpbWUgPSAxOwogCXVjY2hhciBjcGNfcmV2X2lkOwotCWludCBlcnIgPSAwLCBlZXByb21fb3V0ZGF0ZWQgPSAwOworCWludCBlcnIsIGVlcHJvbV9vdXRkYXRlZCA9IDA7CiAJdWNzaG9ydCBkZXZpY2VfaWQ7CiAJcGMzMDBfdCAqY2FyZDsKIApAQCAtMzQzOSwxNSArMzQzOSwyMSBAQAogI2VuZGlmCiAJfQogCisJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJY2FyZCA9IChwYzMwMF90ICopIGttYWxsb2Moc2l6ZW9mKHBjMzAwX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2FyZCA9PSBOVUxMKSB7CiAJCXByaW50aygiUEMzMDAgZm91bmQgYXQgUkFNIDB4JTA4bHgsICIKIAkJICAgICAgICJidXQgY291bGQgbm90IGFsbG9jYXRlIGNhcmQgc3RydWN0dXJlLlxuIiwKIAkJICAgICAgIHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAzKSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9kaXNhYmxlX2RldjsKIAl9CiAJbWVtc2V0KGNhcmQsIDAsIHNpemVvZihwYzMwMF90KSk7CiAKKwllcnIgPSAtRU5PREVWOworCiAJLyogcmVhZCBQQ0kgY29uZmlndXJhdGlvbiBhcmVhICovCiAJZGV2aWNlX2lkID0gZW50LT5kZXZpY2U7CiAJY2FyZC0+aHcuaXJxID0gcGRldi0+aXJxOwpAQCAtMzUwNyw3ICszNTEzLDYgQEAKIAkJcHJpbnRrKCJQQzMwMCBmb3VuZCBhdCBSQU0gMHglMDh4LCAiCiAJCSAgICAgICAiYnV0IGNvdWxkIG5vdCBhbGxvY2F0ZSBQTFggbWVtIHJlZ2lvbi5cbiIsCiAJCSAgICAgICBjYXJkLT5ody5yYW1waHlzKTsKLQkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJfcmVsZWFzZV9pbzsKIAl9CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oY2FyZC0+aHcucmFtcGh5cywgY2FyZC0+aHcuYWxsb2NfcmFtc2l6ZSwKQEAgLTM1MTUsNyArMzUyMCw2IEBACiAJCXByaW50aygiUEMzMDAgZm91bmQgYXQgUkFNIDB4JTA4eCwgIgogCQkgICAgICAgImJ1dCBjb3VsZCBub3QgYWxsb2NhdGUgUkFNIG1lbSByZWdpb24uXG4iLAogCQkgICAgICAgY2FyZC0+aHcucmFtcGh5cyk7Ci0JCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX3JlbGVhc2VfcGx4OwogCX0KIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihjYXJkLT5ody5zY2FwaHlzLCBjYXJkLT5ody5zY2FzaXplLApAQCAtMzUyMywxMyArMzUyNyw5IEBACiAJCXByaW50aygiUEMzMDAgZm91bmQgYXQgUkFNIDB4JTA4eCwgIgogCQkgICAgICAgImJ1dCBjb3VsZCBub3QgYWxsb2NhdGUgU0NBIG1lbSByZWdpb24uXG4iLAogCQkgICAgICAgY2FyZC0+aHcucmFtcGh5cyk7Ci0JCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX3JlbGVhc2VfcmFtOwogCX0KIAotCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpICE9IDApCi0JCWdvdG8gZXJyX3JlbGVhc2Vfc2NhOwotCiAJY2FyZC0+aHcucGx4YmFzZSA9IGlvcmVtYXAoY2FyZC0+aHcucGx4cGh5cywgY2FyZC0+aHcucGx4c2l6ZSk7CiAJY2FyZC0+aHcucmFtYmFzZSA9IGlvcmVtYXAoY2FyZC0+aHcucmFtcGh5cywgY2FyZC0+aHcuYWxsb2NfcmFtc2l6ZSk7CiAJY2FyZC0+aHcuc2NhYmFzZSA9IGlvcmVtYXAoY2FyZC0+aHcuc2NhcGh5cywgY2FyZC0+aHcuc2Nhc2l6ZSk7CkBAIC0zNjE5LDcgKzM2MTksNiBAQAogCQlpb3VubWFwKGNhcmQtPmh3LmZhbGNiYXNlKTsKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKGNhcmQtPmh3LmZhbGNwaHlzLCBjYXJkLT5ody5mYWxjc2l6ZSk7CiAJfQotZXJyX3JlbGVhc2Vfc2NhOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihjYXJkLT5ody5zY2FwaHlzLCBjYXJkLT5ody5zY2FzaXplKTsKIGVycl9yZWxlYXNlX3JhbToKIAlyZWxlYXNlX21lbV9yZWdpb24oY2FyZC0+aHcucmFtcGh5cywgY2FyZC0+aHcuYWxsb2NfcmFtc2l6ZSk7CkBAIC0zNjI4LDcgKzM2MjcsOSBAQAogZXJyX3JlbGVhc2VfaW86CiAJcmVsZWFzZV9yZWdpb24oY2FyZC0+aHcuaW9waHlzLCBjYXJkLT5ody5pb3NpemUpOwogCWtmcmVlKGNhcmQpOwotCXJldHVybiAtRU5PREVWOworZXJyX2Rpc2FibGVfZGV2OgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgY3BjX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0zNjYyLDYgKzM2NjMsNyBAQAogCQlpZiAoY2FyZC0+aHcuaXJxKQogCQkJZnJlZV9pcnEoY2FyZC0+aHcuaXJxLCBjYXJkKTsKIAkJa2ZyZWUoY2FyZCk7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF90dHkuYyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF90dHkuYwppbmRleCAyOWY4NGFkLi44NDU0YmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGMzMDBfdHR5LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwX3R0eS5jCkBAIC00MDAsMTAgKzQwMCw4IEBACiAJCWNwY190dHktPmJ1Zl9yeC5sYXN0ID0gTlVMTDsKIAl9CiAJCi0JaWYgKGNwY190dHktPmJ1Zl90eCkgewotCQlrZnJlZShjcGNfdHR5LT5idWZfdHgpOwotCQljcGNfdHR5LT5idWZfdHggPSBOVUxMOwotCX0KKwlrZnJlZShjcGNfdHR5LT5idWZfdHgpOworCWNwY190dHktPmJ1Zl90eCA9IE5VTEw7CiAKIAlDUENfVFRZX0RCRygiJXM6IFRUWSBjbG9zZWRcbiIsY3BjX3R0eS0+bmFtZSk7CiAJCkBAIC02NjYsNyArNjY0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAJaW50IGksIGo7CiAJc3RfY3BjX3R0eV9hcmVhICpjcGNfdHR5OyAKLQl2b2xhdGlsZSBzdF9jcGNfcnhfYnVmICogYnVmOworCXZvbGF0aWxlIHN0X2NwY19yeF9idWYgKmJ1ZjsKIAljaGFyIGZsYWdzPTAsZmxnX3J4PTE7IAogCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwogCkBAIC02ODAsOSArNjc4LDkgQEAKIAkJCWNwY190dHkgPSAmY3BjX3R0eV9hcmVhW3BvcnRdOwogCQkKIAkJCWlmICgoYnVmPWNwY190dHktPmJ1Zl9yeC5maXJzdCkgIT0gMCkgewotCQkJCWlmKGNwY190dHktPnR0eSkgeworCQkJCWlmIChjcGNfdHR5LT50dHkpIHsKIAkJCQkJbGQgPSB0dHlfbGRpc2NfcmVmKGNwY190dHktPnR0eSk7Ci0JCQkJCWlmKGxkKSB7CisJCQkJCWlmIChsZCkgewogCQkJCQkJaWYgKGxkLT5yZWNlaXZlX2J1ZikgewogCQkJCQkJCUNQQ19UVFlfREJHKCIlczogY2FsbCBsaW5lIGRpc2MuIHJlY2VpdmVfYnVmXG4iLGNwY190dHktPm5hbWUpOwogCQkJCQkJCWxkLT5yZWNlaXZlX2J1ZihjcGNfdHR5LT50dHksIChjaGFyICopKGJ1Zi0+ZGF0YSksICZmbGFncywgYnVmLT5zaXplKTsKQEAgLTY5MSw3ICs2ODksNyBAQAogCQkJCQl9CiAJCQkJfQkKIAkJCQljcGNfdHR5LT5idWZfcnguZmlyc3QgPSBjcGNfdHR5LT5idWZfcnguZmlyc3QtPm5leHQ7Ci0JCQkJa2ZyZWUoKHVuc2lnbmVkIGNoYXIgKilidWYpOworCQkJCWtmcmVlKGJ1Zik7CiAJCQkJYnVmID0gY3BjX3R0eS0+YnVmX3J4LmZpcnN0OwogCQkJCWZsZ19yeCA9IDE7CiAJCQl9CkBAIC03MzMsNyArNzMxLDcgQEAKIAogdm9pZCBjcGNfdHR5X3JlY2VpdmUocGMzMDBkZXZfdCAqcGMzMDBkZXYpCiB7Ci0Jc3RfY3BjX3R0eV9hcmVhICAgICpjcGNfdHR5OyAKKwlzdF9jcGNfdHR5X2FyZWEgKmNwY190dHk7IAogCXBjMzAwY2hfdCAqcGMzMDBjaGFuID0gKHBjMzAwY2hfdCAqKXBjMzAwZGV2LT5jaGFuOyAKIAlwYzMwMF90ICpjYXJkID0gKHBjMzAwX3QgKilwYzMwMGNoYW4tPmNhcmQ7IAogCWludCBjaCA9IHBjMzAwY2hhbi0+Y2hhbm5lbDsgCkBAIC03NDIsNyArNzQwLDcgQEAKIAlpbnQgcnhfbGVuLCByeF9hdXg7IAogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc3RhdHVzOyAKIAl1bnNpZ25lZCBzaG9ydCBmaXJzdF9iZCA9IHBjMzAwY2hhbi0+cnhfZmlyc3RfYmQ7Ci0Jc3RfY3BjX3J4X2J1ZgkqbmV3PU5VTEw7CisJc3RfY3BjX3J4X2J1ZiAqbmV3ID0gTlVMTDsKIAl1bnNpZ25lZCBjaGFyIGRzcl9yeDsKIAogCWlmIChwYzMwMGRldi0+Y3BjX3R0eSA9PSBOVUxMKSB7IApAQCAtNzYyLDcgKzc2MCw3IEBACiAJCQlpZiAoc3RhdHVzICYgRFNUX0VPTSkgewogCQkJCWJyZWFrOwogCQkJfQotCQkJcHRkZXNjcj0ocGNzY2FfYmRfdCBfX2lvbWVtICopKGNhcmQtPmh3LnJhbWJhc2UrY3BjX3JlYWRsKCZwdGRlc2NyLT5uZXh0KSk7CisJCQlwdGRlc2NyID0gKHBjc2NhX2JkX3QgX19pb21lbSAqKShjYXJkLT5ody5yYW1iYXNlK2NwY19yZWFkbCgmcHRkZXNjci0+bmV4dCkpOwogCQl9CiAJCQkKIAkJaWYgKCFyeF9sZW4pIHsgCkBAIC03NzEsMTAgKzc2OSw3IEBACiAJCQkJY3BjX3dyaXRlbChjYXJkLT5ody5zY2FiYXNlICsgRFJYX1JFRyhFREFMLCBjaCksIAogCQkJCQkJUlhfQkRfQUREUihjaCwgcGMzMDBjaGFuLT5yeF9sYXN0X2JkKSk7IAogCQkJfQotCQkJaWYgKG5ldykgewotCQkJCWtmcmVlKG5ldyk7Ci0JCQkJbmV3ID0gTlVMTDsKLQkJCX0KKwkJCWtmcmVlKG5ldyk7CiAJCQlyZXR1cm47IAogCQl9CiAJCQpAQCAtNzg3LDcgKzc4Miw3IEBACiAJCQljb250aW51ZTsKIAkJfSAKIAkJCi0JCW5ldyA9IChzdF9jcGNfcnhfYnVmICopIGttYWxsb2MocnhfbGVuICsgc2l6ZW9mKHN0X2NwY19yeF9idWYpLCBHRlBfQVRPTUlDKTsKKwkJbmV3ID0gKHN0X2NwY19yeF9idWYgKilrbWFsbG9jKHJ4X2xlbiArIHNpemVvZihzdF9jcGNfcnhfYnVmKSwgR0ZQX0FUT01JQyk7CiAJCWlmIChuZXcgPT0gMCkgewogCQkJY3BjX3R0eV9yeF9kaXNjX2ZyYW1lKHBjMzAwY2hhbik7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2NoZGxjLmMgYi9kcml2ZXJzL25ldC93YW4vc2RsYV9jaGRsYy5jCmluZGV4IGFmYmUwMDIuLjQ5NmQyOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhX2NoZGxjLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3NkbGFfY2hkbGMuYwpAQCAtMzY2NCwxNSArMzY2NCwxMCBAQAogCQljaGRsY19kaXNhYmxlX2NvbW1fc2h1dGRvd24oY2FyZCk7CiAJCXVubG9ja19hZGFwdGVyX2lycSgmY2FyZC0+d2FuZGV2LmxvY2ssJnNtcF9mbGFncyk7CiAKLQkJaWYgKGNhcmQtPnR0eV9idWYpewotCQkJa2ZyZWUoY2FyZC0+dHR5X2J1Zik7Ci0JCQljYXJkLT50dHlfYnVmPU5VTEw7CQkJCi0JCX0KLQotCQlpZiAoY2FyZC0+dHR5X3J4KXsKLQkJCWtmcmVlKGNhcmQtPnR0eV9yeCk7Ci0JCQljYXJkLT50dHlfcng9TlVMTDsKLQkJfQorCQlrZnJlZShjYXJkLT50dHlfYnVmKTsKKwkJY2FyZC0+dHR5X2J1ZiA9IE5VTEw7CQkJCisJCWtmcmVlKGNhcmQtPnR0eV9yeCk7CisJCWNhcmQtPnR0eV9yeCA9IE5VTEw7CiAJfQogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCmluZGV4IDhjNWNmY2IuLjFjNTQwZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYwpAQCAtMTA3LDEzICsxMDcsOSBAQAogc3RhdGljIHZvaWQgeDI1X2FzeV9mcmVlKHN0cnVjdCB4MjVfYXN5ICpzbCkKIHsKIAkvKiBGcmVlIGFsbCBYLjI1IGZyYW1lIGJ1ZmZlcnMuICovCi0JaWYgKHNsLT5yYnVmZikgIHsKLQkJa2ZyZWUoc2wtPnJidWZmKTsKLQl9CisJa2ZyZWUoc2wtPnJidWZmKTsKIAlzbC0+cmJ1ZmYgPSBOVUxMOwotCWlmIChzbC0+eGJ1ZmYpICB7Ci0JCWtmcmVlKHNsLT54YnVmZik7Ci0JfQorCWtmcmVlKHNsLT54YnVmZik7CiAJc2wtPnhidWZmID0gTlVMTDsKIAogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFNMRl9JTlVTRSwgJnNsLT5mbGFncykpIHsKQEAgLTEzNCwxMCArMTMwLDggQEAKIAl7CiAJCXByaW50aygiJXM6IHVuYWJsZSB0byBncm93IFguMjUgYnVmZmVycywgTVRVIGNoYW5nZSBjYW5jZWxsZWQuXG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJaWYgKHhidWZmICE9IE5VTEwpICAKLQkJCWtmcmVlKHhidWZmKTsKLQkJaWYgKHJidWZmICE9IE5VTEwpICAKLQkJCWtmcmVlKHJidWZmKTsKKwkJa2ZyZWUoeGJ1ZmYpOworCQlrZnJlZShyYnVmZik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTY5LDEwICsxNjMsOCBAQAogCiAJc3Bpbl91bmxvY2tfYmgoJnNsLT5sb2NrKTsKIAotCWlmICh4YnVmZiAhPSBOVUxMKSAKLQkJa2ZyZWUoeGJ1ZmYpOwotCWlmIChyYnVmZiAhPSBOVUxMKQotCQlrZnJlZShyYnVmZik7CisJa2ZyZWUoeGJ1ZmYpOworCWtmcmVlKHJidWZmKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9maWxlcy5jIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9maWxlcy5jCmluZGV4IDlhYmVkZWEuLmE3MjAwNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVfZmlsZXMuYworKysgYi9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX2ZpbGVzLmMKQEAgLTE4LDEzICsxOCwxMyBAQAogdW5zaWduZWQgbG9uZyBmc19jcHVfYnVmZmVyX3NpemUgPSA4MTkyOwogdW5zaWduZWQgbG9uZyBmc19idWZmZXJfd2F0ZXJzaGVkID0gMzI3Njg7IC8qIEZJWE1FOiB0dW5lICovCiAKLXN0YXRpYyBzc2l6ZV90IGRlcHRoX3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKK3N0YXRpYyBzc2l6ZV90IGRlcHRoX3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmZzZXQpCiB7CiAJcmV0dXJuIG9wcm9maWxlZnNfdWxvbmdfdG9fdXNlcihiYWNrdHJhY2VfZGVwdGgsIGJ1ZiwgY291bnQsIG9mZnNldCk7CiB9CiAKIAotc3RhdGljIHNzaXplX3QgZGVwdGhfd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIGNvbnN0ICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKK3N0YXRpYyBzc2l6ZV90IGRlcHRoX3dyaXRlKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBjb25zdCBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogb2Zmc2V0KQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZyBiL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnCmluZGV4IDczMTAxMGUuLjE2YTJlNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnCkBAIC0zNCw3ICszNCw3IEBACiAKIGNvbmZpZyBQQVJQT1JUX1BDCiAJdHJpc3RhdGUgIlBDLXN0eWxlIGhhcmR3YXJlIgotCWRlcGVuZHMgb24gUEFSUE9SVCAmJiAoIVNQQVJDNjQgfHwgUENJKSAmJiAoIVNQQVJDMzIgfHwgQlJPS0VOKQorCWRlcGVuZHMgb24gUEFSUE9SVCAmJiAoIVNQQVJDNjQgfHwgUENJKSAmJiAhU1BBUkMzMgogCS0tLWhlbHAtLS0KIAkgIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFBDLXN0eWxlIHBhcmFsbGVsIHBvcnQuIEFsbAogCSAgSUJNIFBDIGNvbXBhdGlibGUgY29tcHV0ZXJzIGFuZCBzb21lIEFscGhhcyBoYXZlIFBDLXN0eWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYwppbmRleCBjNTc3NGU3Li5lN2YzYmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKQEAgLTY3LDYgKzY3LDEwIEBACiAKICNkZWZpbmUgUEFSUE9SVF9QQ19NQVhfUE9SVFMgUEFSUE9SVF9NQVgKIAorI2lmZGVmIENPTkZJR19JU0FfRE1BX0FQSQorI2RlZmluZSBIQVNfRE1BCisjZW5kaWYKKwogLyogRUNSIG1vZGVzICovCiAjZGVmaW5lIEVDUl9TUFAgMDAKICNkZWZpbmUgRUNSX1BTMiAwMQpAQCAtNjEwLDYgKzYxNCw3IEBACiAJcmV0dXJuIGxlbmd0aCAtIGxlZnQ7CiB9CiAKKyNpZmRlZiBIQVNfRE1BCiBzdGF0aWMgc2l6ZV90IHBhcnBvcnRfcGNfZmlmb193cml0ZV9ibG9ja19kbWEgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LAogCQkJCQkgICAgICAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuZ3RoKQogewpAQCAtNzMyLDYgKzczNywxNyBAQAogZHVtcF9wYXJwb3J0X3N0YXRlICgibGVhdmUgZmlmb193cml0ZV9ibG9ja19kbWEiLCBwb3J0KTsKIAlyZXR1cm4gbGVuZ3RoIC0gbGVmdDsKIH0KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHNpemVfdCBwYXJwb3J0X3BjX2ZpZm9fd3JpdGVfYmxvY2soc3RydWN0IHBhcnBvcnQgKnBvcnQsCisJCQkJCSAgICAgICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW5ndGgpCit7CisjaWZkZWYgSEFTX0RNQQorCWlmIChwb3J0LT5kbWEgIT0gUEFSUE9SVF9ETUFfTk9ORSkKKwkJcmV0dXJuIHBhcnBvcnRfcGNfZmlmb193cml0ZV9ibG9ja19kbWEgKHBvcnQsIGJ1ZiwgbGVuZ3RoKTsKKyNlbmRpZgorCXJldHVybiBwYXJwb3J0X3BjX2ZpZm9fd3JpdGVfYmxvY2tfcGlvIChwb3J0LCBidWYsIGxlbmd0aCk7Cit9CiAKIC8qIFBhcmFsbGVsIFBvcnQgRklGTyBtb2RlIChFQ1AgY2hpcHNldHMpICovCiBzdGF0aWMgc2l6ZV90IHBhcnBvcnRfcGNfY29tcGF0X3dyaXRlX2Jsb2NrX3BpbyAoc3RydWN0IHBhcnBvcnQgKnBvcnQsCkBAIC03NTgsMTAgKzc3NCw3IEBACiAJcG9ydC0+cGh5c3BvcnQtPmllZWUxMjg0LnBoYXNlID0gSUVFRTEyODRfUEhfRldEX0RBVEE7CiAKIAkvKiBXcml0ZSB0aGUgZGF0YSB0byB0aGUgRklGTy4gKi8KLQlpZiAocG9ydC0+ZG1hICE9IFBBUlBPUlRfRE1BX05PTkUpCi0JCXdyaXR0ZW4gPSBwYXJwb3J0X3BjX2ZpZm9fd3JpdGVfYmxvY2tfZG1hIChwb3J0LCBidWYsIGxlbmd0aCk7Ci0JZWxzZQotCQl3cml0dGVuID0gcGFycG9ydF9wY19maWZvX3dyaXRlX2Jsb2NrX3BpbyAocG9ydCwgYnVmLCBsZW5ndGgpOworCXdyaXR0ZW4gPSBwYXJwb3J0X3BjX2ZpZm9fd3JpdGVfYmxvY2socG9ydCwgYnVmLCBsZW5ndGgpOwogCiAJLyogRmluaXNoIHVwLiAqLwogCS8qIEZvciBzb21lIGhhcmR3YXJlIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIG1vZGUgdW50aWwKQEAgLTg1NiwxMCArODY5LDcgQEAKIAlwb3J0LT5waHlzcG9ydC0+aWVlZTEyODQucGhhc2UgPSBJRUVFMTI4NF9QSF9GV0RfREFUQTsKIAogCS8qIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBGSUZPLiAqLwotCWlmIChwb3J0LT5kbWEgIT0gUEFSUE9SVF9ETUFfTk9ORSkKLQkJd3JpdHRlbiA9IHBhcnBvcnRfcGNfZmlmb193cml0ZV9ibG9ja19kbWEgKHBvcnQsIGJ1ZiwgbGVuZ3RoKTsKLQllbHNlCi0JCXdyaXR0ZW4gPSBwYXJwb3J0X3BjX2ZpZm9fd3JpdGVfYmxvY2tfcGlvIChwb3J0LCBidWYsIGxlbmd0aCk7CisJd3JpdHRlbiA9IHBhcnBvcnRfcGNfZmlmb193cml0ZV9ibG9jayhwb3J0LCBidWYsIGxlbmd0aCk7CiAKIAkvKiBGaW5pc2ggdXAuICovCiAJLyogRm9yIHNvbWUgaGFyZHdhcmUgd2UgZG9uJ3Qgd2FudCB0byB0b3VjaCB0aGUgbW9kZSB1bnRpbApAQCAtMjI4NSw2ICsyMjk1LDcgQEAKIAkJfQogCiAjaWZkZWYgQ09ORklHX1BBUlBPUlRfUENfRklGTworI2lmZGVmIEhBU19ETUEKIAkJaWYgKHAtPmRtYSAhPSBQQVJQT1JUX0RNQV9OT05FKSB7CiAJCQlpZiAocmVxdWVzdF9kbWEgKHAtPmRtYSwgcC0+bmFtZSkpIHsKIAkJCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IGRtYSAlZCBpbiB1c2UsICIKQEAgLTIzMDYsNyArMjMxNyw4IEBACiAJCQkJfQogCQkJfQogCQl9Ci0jZW5kaWYgLyogQ09ORklHX1BBUlBPUlRfUENfRklGTyAqLworI2VuZGlmCisjZW5kaWYKIAl9CiAKIAkvKiBEb25lIHByb2JpbmcuICBOb3cgcHV0IHRoZSBwb3J0IGludG8gYSBzZW5zaWJsZSBzdGFydC11cCBzdGF0ZS4gKi8KQEAgLTIzNjcsMTEgKzIzNzksMTMgQEAKIAlpZiAocC0+bW9kZXMgJiBQQVJQT1JUX01PREVfRUNQKQogCQlyZWxlYXNlX3JlZ2lvbihwLT5iYXNlX2hpLCAzKTsKICNpZmRlZiBDT05GSUdfUEFSUE9SVF9QQ19GSUZPCisjaWZkZWYgSEFTX0RNQQogCWlmIChwcml2LT5kbWFfYnVmKQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPmRldiwgUEFHRV9TSVpFLAogCQkJCSAgICBwcml2LT5kbWFfYnVmLAogCQkJCSAgICBwcml2LT5kbWFfaGFuZGxlKTsKLSNlbmRpZiAvKiBDT05GSUdfUEFSUE9SVF9QQ19GSUZPICovCisjZW5kaWYKKyNlbmRpZgogCWtmcmVlIChwLT5wcml2YXRlX2RhdGEpOwogCXBhcnBvcnRfcHV0X3BvcnQocCk7CiAJa2ZyZWUgKG9wcyk7IC8qIGhvcGUgbm8tb25lIGNhY2hlZCBpdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy5jCmluZGV4IGQ0NzFiM2UuLjAyMWQwZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnLmMKQEAgLTEyMCw2ICsxMjAsMTAgQEAKIAogLyoqCiAgKiBwY2lfdmlzaXRfZGV2IC0gc2NhbnMgdGhlIHBjaSBidXNlcy4KKyAqIEBmbjogY2FsbGJhY2sgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCB3aGlsZSB2aXNpdGluZworICogQHdyYXBwZWRfZGV2OiB0aGUgZGV2aWNlIHRvIHNjYW4KKyAqIEB3cmFwcGVkX3BhcmVudDogdGhlIGJ1cyB3aGVyZSBAd3JhcHBlZF9kZXYgaXMgY29ubmVjdGVkIHRvCisgKgogICogRXZlcnkgYnVzIGFuZCBldmVyeSBmdW5jdGlvbiBpcyBwcmVzZW50ZWQgdG8gYSBjdXN0b20KICAqIGZ1bmN0aW9uIHRoYXQgY2FuIGFjdCB1cG9uIGl0LgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHAuaAppbmRleCA1YmMwMzlkLi5jMjJlMDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwLmgKQEAgLTE5Niw3ICsxOTYsNyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgIFRIUkVFIFRZUEUgT0YgSE9UIFBMVUcgQ09OVFJPTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgVEhSRUUgVFlQRSBPRiBIT1QgUExVRyBDT05UUk9MTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RydWN0IGlzYV9jdGxyX2FjY2VzcyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2hwYy5jCmluZGV4IDY4OTRiNTQuLjFhM2ViOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2hwYy5jCkBAIC02NCw3ICs2NCw3IEBACiAjZGVmaW5lIFdQR19JMkNfT1IJCTB4MjAwMAkvLyBJMkMgT1Igb3BlcmF0aW9uCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29tbWFuZCBzZXQgZm9yIEkyQyBNYXN0ZXIgT3BlcmF0aW9uIFNldHVwIFJlZ2lzZXRyCisvLyBDb21tYW5kIHNldCBmb3IgSTJDIE1hc3RlciBPcGVyYXRpb24gU2V0dXAgUmVnaXN0ZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2RlZmluZSBXUEdfUkVBREFUQUREUl9NQVNLCTB4MDAwMTAwMDAJLy8gcmVhZCxieXRlcyxJMkMgc2hpZnRlZCxpbmRleAogI2RlZmluZSBXUEdfV1JJVEVBVEFERFJfTUFTSwkweDQwMDEwMDAwCS8vIHdyaXRlLGJ5dGVzLEkyQyBzaGlmdGVkLGluZGV4CkBAIC04MzUsNyArODM1LDcgQEAKIAkJaWYgKGlibXBocF9zaHV0ZG93bikgCiAJCQlicmVhazsKIAkJCi0JCS8qIHRyeSB0byBnZXQgdGhlIGxvY2sgdG8gZG8gc29tZSBraW5kIG9mIGhhcndhcmUgYWNjZXNzICovCisJCS8qIHRyeSB0byBnZXQgdGhlIGxvY2sgdG8gZG8gc29tZSBraW5kIG9mIGhhcmR3YXJlIGFjY2VzcyAqLwogCQlkb3duICgmc2VtT3BlcmF0aW9ucyk7CiAKIAkJc3dpdGNoIChwb2xsX3N0YXRlKSB7CkBAIC05MDYsNyArOTA2LDcgQEAKIAkJCQlwb2xsX3N0YXRlID0gUE9MTF9MQVRDSF9SRUdJU1RFUjsKIAkJCWJyZWFrOwogCQl9CQotCQkvKiBnaXZlIHVwIHRoZSBoYXJ3YXJlIHNlbWFwaG9yZSAqLworCQkvKiBnaXZlIHVwIHRoZSBoYXJkd2FyZSBzZW1hcGhvcmUgKi8KIAkJdXAgKCZzZW1PcGVyYXRpb25zKTsKIAkJLyogc2xlZXAgZm9yIGEgc2hvcnQgdGltZSBqdXN0IGZvciBnb29kIG1lYXN1cmUgKi8KIAkJbXNsZWVwKDEwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX3BjaS5jCmluZGV4IDIzMzVmYWMuLjgxMjJmZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX3BjaS5jCkBAIC0xMzA4LDEwICsxMzA4LDEwIEBACiAJCQkvKiA/Pz8/Pz8/Pz8gRE8gV0UgTkVFRCBUTyBXUklURSBBTllUSElORyBJTlRPIFRIRSBQQ0kgQ09ORklHIFNQQUNFIEJBQ0sgPz8/Pz8/Pz8/PyAqLwogCQl9IGVsc2UgewogCQkJLyogVGhpcyBpcyBNZW1vcnkgKi8KLQkJCXN0YXJ0X2FkZHJlc3MgJj0gUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKIAkJCWlmIChzdGFydF9hZGRyZXNzICYgUENJX0JBU0VfQUREUkVTU19NRU1fUFJFRkVUQ0gpIHsKIAkJCQkvKiBwZm1lbSAqLwogCQkJCWRlYnVnICgic3RhcnQgYWRkcmVzcyBvZiBwZm1lbSBpcyAleFxuIiwgc3RhcnRfYWRkcmVzcyk7CisJCQkJc3RhcnRfYWRkcmVzcyAmPSBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOwogCiAJCQkJaWYgKGlibXBocF9maW5kX3Jlc291cmNlIChidXMsIHN0YXJ0X2FkZHJlc3MsICZwZm1lbSwgUEZNRU0pIDwgMCkgewogCQkJCQllcnIgKCJjYW5ub3QgZmluZCBjb3JyZXNwb25kaW5nIFBGTUVNIHJlc291cmNlIHRvIHJlbW92ZVxuIik7CkBAIC0xMzI1LDYgKzEzMjUsOCBAQAogCQkJfSBlbHNlIHsKIAkJCQkvKiByZWd1bGFyIG1lbW9yeSAqLwogCQkJCWRlYnVnICgic3RhcnQgYWRkcmVzcyBvZiBtZW0gaXMgJXhcbiIsIHN0YXJ0X2FkZHJlc3MpOworCQkJCXN0YXJ0X2FkZHJlc3MgJj0gUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKKwogCQkJCWlmIChpYm1waHBfZmluZF9yZXNvdXJjZSAoYnVzLCBzdGFydF9hZGRyZXNzLCAmbWVtLCBNRU0pIDwgMCkgewogCQkJCQllcnIgKCJjYW5ub3QgZmluZCBjb3JyZXNwb25kaW5nIE1FTSByZXNvdXJjZSB0byByZW1vdmVcbiIpOwogCQkJCQlyZXR1cm4gLUVJTzsKQEAgLTE0MjIsOSArMTQyNCw5IEBACiAJCQkvKiA/Pz8/Pz8/Pz8gRE8gV0UgTkVFRCBUTyBXUklURSBBTllUSElORyBJTlRPIFRIRSBQQ0kgQ09ORklHIFNQQUNFIEJBQ0sgPz8/Pz8/Pz8/PyAqLwogCQl9IGVsc2UgewogCQkJLyogVGhpcyBpcyBNZW1vcnkgKi8KLQkJCXN0YXJ0X2FkZHJlc3MgJj0gUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKIAkJCWlmIChzdGFydF9hZGRyZXNzICYgUENJX0JBU0VfQUREUkVTU19NRU1fUFJFRkVUQ0gpIHsKIAkJCQkvKiBwZm1lbSAqLworCQkJCXN0YXJ0X2FkZHJlc3MgJj0gUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKIAkJCQlpZiAoaWJtcGhwX2ZpbmRfcmVzb3VyY2UgKGJ1cywgc3RhcnRfYWRkcmVzcywgJnBmbWVtLCBQRk1FTSkgPCAwKSB7CiAJCQkJCWVyciAoImNhbm5vdCBmaW5kIGNvcnJlc3BvbmRpbmcgUEZNRU0gcmVzb3VyY2UgdG8gcmVtb3ZlXG4iKTsKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDM2LDYgKzE0MzgsNyBAQAogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJLyogcmVndWxhciBtZW1vcnkgKi8KKwkJCQlzdGFydF9hZGRyZXNzICY9IFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7CiAJCQkJaWYgKGlibXBocF9maW5kX3Jlc291cmNlIChidXMsIHN0YXJ0X2FkZHJlc3MsICZtZW0sIE1FTSkgPCAwKSB7CiAJCQkJCWVyciAoImNhbm5vdCBmaW5kIGNvcnJlc3BvbmRpbmcgTUVNIHJlc291cmNlIHRvIHJlbW92ZVxuIik7CiAJCQkJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Zy5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Zy5oCmluZGV4IDU3YWNlMzIuLjg4ZDQ0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWcuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnLmgKQEAgLTE1MCw3ICsxNTAsNyBAQAogICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBzbG90IGJlaW5nIHJlZ2lzdGVyZWQuICBUaGlzIHN0cmluZyBtdXN0CiAgKiBiZSB1bmlxdWUgYW1vdW5nIHNsb3RzIHJlZ2lzdGVyZWQgb24gdGhpcyBzeXN0ZW0uCiAgKiBAb3BzOiBwb2ludGVyIHRvIHRoZSAmc3RydWN0IGhvdHBsdWdfc2xvdF9vcHMgdG8gYmUgdXNlZCBmb3IgdGhpcyBzbG90Ci0gKiBAaW5mbzogcG9pbnRlciB0byB0aGUgJnN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyBmb3IgdGhlIGluaXRhbCB2YWx1ZXMgZm9yCisgKiBAaW5mbzogcG9pbnRlciB0byB0aGUgJnN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyBmb3IgdGhlIGluaXRpYWwgdmFsdWVzIGZvcgogICogdGhpcyBzbG90LgogICogQHJlbGVhc2U6IGNhbGxlZCBkdXJpbmcgcGNpX2hwX2RlcmVnaXN0ZXIgdG8gZnJlZSBtZW1vcnkgYWxsb2NhdGVkIGluIGEKICAqIGhvdHBsdWdfc2xvdCBzdHJ1Y3R1cmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKaW5kZXggNzJiYWY3NC4uZWQxZmQ4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYwpAQCAtOTAsNiArOTAsMjIgQEAKICAgCS5nZXRfY3VyX2J1c19zcGVlZCA9CWdldF9jdXJfYnVzX3NwZWVkLAogfTsKIAorLyoqCisgKiByZWxlYXNlX3Nsb3QgLSBmcmVlIHVwIHRoZSBtZW1vcnkgdXNlZCBieSBhIHNsb3QKKyAqIEBob3RwbHVnX3Nsb3Q6IHNsb3QgdG8gZnJlZQorICovCitzdGF0aWMgdm9pZCByZWxlYXNlX3Nsb3Qoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90KQoreworCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOworCisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCisJa2ZyZWUoc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvKTsKKwlrZnJlZShzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOworCWtmcmVlKHNsb3QtPmhvdHBsdWdfc2xvdCk7CisJa2ZyZWUoc2xvdCk7Cit9CisKIHN0YXRpYyBpbnQgaW5pdF9zbG90cyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKIHsKIAlzdHJ1Y3Qgc2xvdCAqbmV3X3Nsb3Q7CkBAIC0xMzksNyArMTU1LDggQEAKIAogCQkvKiByZWdpc3RlciB0aGlzIHNsb3Qgd2l0aCB0aGUgaG90cGx1ZyBwY2kgY29yZSAqLwogCQluZXdfc2xvdC0+aG90cGx1Z19zbG90LT5wcml2YXRlID0gbmV3X3Nsb3Q7Ci0JCW1ha2Vfc2xvdF9uYW1lIChuZXdfc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lLCBTTE9UX05BTUVfU0laRSwgbmV3X3Nsb3QpOworCQluZXdfc2xvdC0+aG90cGx1Z19zbG90LT5yZWxlYXNlID0gJnJlbGVhc2Vfc2xvdDsKKwkJbWFrZV9zbG90X25hbWUobmV3X3Nsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSwgU0xPVF9OQU1FX1NJWkUsIG5ld19zbG90KTsKIAkJbmV3X3Nsb3QtPmhvdHBsdWdfc2xvdC0+b3BzID0gJnBjaWVocF9ob3RwbHVnX3Nsb3Rfb3BzOwogCiAJCW5ld19zbG90LT5ocGNfb3BzLT5nZXRfcG93ZXJfc3RhdHVzKG5ld19zbG90LCAmKG5ld19zbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPnBvd2VyX3N0YXR1cykpOwpAQCAtMTg4LDEwICsyMDUsNiBAQAogCXdoaWxlIChvbGRfc2xvdCkgewogCQluZXh0X3Nsb3QgPSBvbGRfc2xvdC0+bmV4dDsKIAkJcGNpX2hwX2RlcmVnaXN0ZXIgKG9sZF9zbG90LT5ob3RwbHVnX3Nsb3QpOwotCQlrZnJlZShvbGRfc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvKTsKLQkJa2ZyZWUob2xkX3Nsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7Ci0JCWtmcmVlKG9sZF9zbG90LT5ob3RwbHVnX3Nsb3QpOwotCQlrZnJlZShvbGRfc2xvdCk7CiAJCW9sZF9zbG90ID0gbmV4dF9zbG90OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2locF9za2VsZXRvbi5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2locF9za2VsZXRvbi5jCmluZGV4IDY2MDVkNmIuLjMxOTRkNTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWhwX3NrZWxldG9uLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2locF9za2VsZXRvbi5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIAkJaG90cGx1Z19zbG90LT5vcHMgPSAmc2tlbF9ob3RwbHVnX3Nsb3Rfb3BzOwogCQkKIAkJLyoKLQkJICogSW5pdGlsaXplIHRoZSBzbG90IGluZm8gc3RydWN0dXJlIHdpdGggc29tZSBrbm93bgorCQkgKiBJbml0aWFsaXplIHRoZSBzbG90IGluZm8gc3RydWN0dXJlIHdpdGggc29tZSBrbm93bgogCQkgKiBnb29kIHZhbHVlcy4KIAkJICovCiAJCWluZm8tPnBvd2VyX3N0YXR1cyA9IGdldF9wb3dlcl9zdGF0dXMoc2xvdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5jCmluZGV4IDIyZWNkM2IuLjMwMjA2YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL21zaS5jCisrKyBiL2RyaXZlcnMvcGNpL21zaS5jCkBAIC01MjIsNyArNTIyLDcgQEAKICAqIG1zaV9jYXBhYmlsaXR5X2luaXQgLSBjb25maWd1cmUgZGV2aWNlJ3MgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlCiAgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBwY2lfZGV2IGRhdGEgc3RydWN0dXJlIG9mIE1TSSBkZXZpY2UgZnVuY3Rpb24KICAqCi0gKiBTZXR1cCB0aGUgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlIG9mIGRldmljZSBmdW50aW9uIHdpdGggYSBzaW5nbGUKKyAqIFNldHVwIHRoZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgb2YgZGV2aWNlIGZ1bmN0aW9uIHdpdGggYSBzaW5nbGUKICAqIE1TSSB2ZWN0b3IsIHJlZ2FyZGxlc3Mgb2YgZGV2aWNlIGZ1bmN0aW9uIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcKICAqIG11bHRpcGxlIG1lc3NhZ2VzLiBBIHJldHVybiBvZiB6ZXJvIGluZGljYXRlcyB0aGUgc3VjY2Vzc2Z1bCBzZXR1cAogICogb2YgYW4gZW50cnkgemVybyB3aXRoIHRoZSBuZXcgTVNJIHZlY3RvciBvciBub24temVybyBmb3Igb3RoZXJ3aXNlLgpAQCAtNTk5LDcgKzU5OSw3IEBACiAgKiBtc2l4X2NhcGFiaWxpdHlfaW5pdCAtIGNvbmZpZ3VyZSBkZXZpY2UncyBNU0ktWCBjYXBhYmlsaXR5CiAgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBwY2lfZGV2IGRhdGEgc3RydWN0dXJlIG9mIE1TSS1YIGRldmljZSBmdW5jdGlvbgogICoKLSAqIFNldHVwIHRoZSBNU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSBvZiBkZXZpY2UgZnVudGlvbiB3aXRoIGEKKyAqIFNldHVwIHRoZSBNU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSBvZiBkZXZpY2UgZnVuY3Rpb24gd2l0aCBhCiAgKiBzaW5nbGUgTVNJLVggdmVjdG9yLiBBIHJldHVybiBvZiB6ZXJvIGluZGljYXRlcyB0aGUgc3VjY2Vzc2Z1bCBzZXR1cCBvZgogICogcmVxdWVzdGVkIE1TSS1YIGVudHJpZXMgd2l0aCBhbGxvY2F0ZWQgdmVjdG9ycyBvciBub24temVybyBmb3Igb3RoZXJ3aXNlLgogICoqLwpAQCAtMTA3NCw3ICsxMDc0LDcgQEAKICAqIG1zaV9yZW1vdmVfcGNpX2lycV92ZWN0b3JzIC0gcmVjbGFpbSBNU0koWCkgdmVjdG9ycyB0byB1bnVzZWQgc3RhdGUKICAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHBjaV9kZXYgZGF0YSBzdHJ1Y3R1cmUgb2YgTVNJKFgpIGRldmljZSBmdW5jdGlvbgogICoKLSAqIEJlaW5nIGNhbGxlZCBkdXJpbmcgaG90cGx1ZyByZW1vdmUsIGZyb20gd2hpY2ggdGhlIGRldmljZSBmdW5jaXRvbgorICogQmVpbmcgY2FsbGVkIGR1cmluZyBob3RwbHVnIHJlbW92ZSwgZnJvbSB3aGljaCB0aGUgZGV2aWNlIGZ1bmN0aW9uCiAgKiBpcyBob3QtcmVtb3ZlZC4gQWxsIHByZXZpb3VzIGFzc2lnbmVkIE1TSS9NU0ktWCB2ZWN0b3JzLCBpZgogICogYWxsb2NhdGVkIGZvciB0aGlzIGRldmljZSBmdW5jdGlvbiwgYXJlIHJlY2xhaW1lZCB0byB1bnVzZWQgc3RhdGUsCiAgKiB3aGljaCBtYXkgYmUgdXNlZCBsYXRlciBvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCmluZGV4IDk2OGViMzIuLmJjMDFkMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwpAQCAtMTksNyArMTksNyBAQAogCiBzdGF0aWMgdTMyIGN0cmxzZXRfYnVmWzNdID0gezAsIDAsIDB9Owogc3RhdGljIHUzMiBnbG9iYWxfY3RybHNldHMgPSAwOwotdTggT1NDX1VVSURbMTZdID0gezB4NUIsIDB4NEQsIDB4REIsIDB4MzMsIDB4RjcsIDB4MUYsIDB4MUMsIDB4NDAsIDB4OTYsIDB4NTcsIDB4NzQsIDB4NDEsIDB4QzAsIDB4M0QsIDB4RDcsIDB4NjZ9Oworc3RhdGljIHU4IE9TQ19VVUlEWzE2XSA9IHsweDVCLCAweDRELCAweERCLCAweDMzLCAweEY3LCAweDFGLCAweDFDLCAweDQwLCAweDk2LCAweDU3LCAweDc0LCAweDQxLCAweEMwLCAweDNELCAweEQ3LCAweDY2fTsKIAogc3RhdGljIGFjcGlfc3RhdHVzICAKIGFjcGlfcXVlcnlfb3NjICgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCAzN2I3OTYxLi5mZTk4NTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCkBAIC0zMTgsNiArMzE4LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHBjaV9kZXZpY2Vfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBwY2lfZHJpdmVyICpkcnYgPSBwY2lfZGV2LT5kcml2ZXI7CisKKwlpZiAoZHJ2ICYmIGRydi0+c2h1dGRvd24pCisJCWRydi0+c2h1dGRvd24ocGNpX2Rldik7Cit9CiAKICNkZWZpbmUga29ial90b19wY2lfZHJpdmVyKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9kcml2ZXIsIGtvYmopCiAjZGVmaW5lIGF0dHJfdG9fZHJpdmVyX2F0dHJpYnV0ZShvYmopIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlLCBhdHRyKQpAQCAtMzczLDcgKzM4MSw3IEBACiAgKiAKICAqIEFkZHMgdGhlIGRyaXZlciBzdHJ1Y3R1cmUgdG8gdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBkcml2ZXJzLgogICogUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLCBvdGhlcndpc2UgMC4gCi0gKiBJZiBubyBlcnJvciBvY2N1cmVkLCB0aGUgZHJpdmVyIHJlbWFpbnMgcmVnaXN0ZXJlZCBldmVuIGlmIAorICogSWYgbm8gZXJyb3Igb2NjdXJyZWQsIHRoZSBkcml2ZXIgcmVtYWlucyByZWdpc3RlcmVkIGV2ZW4gaWYgCiAgKiBubyBkZXZpY2Ugd2FzIGNsYWltZWQgZHVyaW5nIHJlZ2lzdHJhdGlvbi4KICAqLwogaW50IHBjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRydikKQEAgLTM4NSw2ICszOTMsNyBAQAogCWRydi0+ZHJpdmVyLmJ1cyA9ICZwY2lfYnVzX3R5cGU7CiAJZHJ2LT5kcml2ZXIucHJvYmUgPSBwY2lfZGV2aWNlX3Byb2JlOwogCWRydi0+ZHJpdmVyLnJlbW92ZSA9IHBjaV9kZXZpY2VfcmVtb3ZlOworCWRydi0+ZHJpdmVyLnNodXRkb3duID0gcGNpX2RldmljZV9zaHV0ZG93biwKIAlkcnYtPmRyaXZlci5vd25lciA9IGRydi0+b3duZXI7CiAJZHJ2LT5kcml2ZXIua29iai5rdHlwZSA9ICZwY2lfZHJpdmVyX2tvYmpfdHlwZTsKIAlwY2lfaW5pdF9keW5pZHMoJmRydi0+ZHluaWRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggZDU3YWU3MS4uODU2OGIyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTkxLDYgKzkxLDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihjb250YWluZXJfb2Yoa29iaixzdHJ1Y3QgZGV2aWNlLGtvYmopKTsKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IDY0OwogCWxvZmZfdCBpbml0X29mZiA9IG9mZjsKKwl1OCAqZGF0YSA9ICh1OCopIGJ1ZjsKIAogCS8qIFNldmVyYWwgY2hpcHMgbG9jayB1cCB0cnlpbmcgdG8gcmVhZCB1bmRlZmluZWQgY29uZmlnIHNwYWNlICovCiAJaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKQEAgLTEwOCwzMCArMTA5LDQ3IEBACiAJCXNpemUgPSBjb3VudDsKIAl9CiAKLQl3aGlsZSAob2ZmICYgMykgewotCQl1bnNpZ25lZCBjaGFyIHZhbDsKKwlpZiAoKG9mZiAmIDEpICYmIHNpemUpIHsKKwkJdTggdmFsOwogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIG9mZiwgJnZhbCk7Ci0JCWJ1ZltvZmYgLSBpbml0X29mZl0gPSB2YWw7CisJCWRhdGFbb2ZmIC0gaW5pdF9vZmZdID0gdmFsOwogCQlvZmYrKzsKLQkJaWYgKC0tc2l6ZSA9PSAwKQotCQkJYnJlYWs7CisJCXNpemUtLTsKKwl9CisKKwlpZiAoKG9mZiAmIDMpICYmIHNpemUgPiAyKSB7CisJCXUxNiB2YWw7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgb2ZmLCAmdmFsKTsKKwkJZGF0YVtvZmYgLSBpbml0X29mZl0gPSB2YWwgJiAweGZmOworCQlkYXRhW29mZiAtIGluaXRfb2ZmICsgMV0gPSAodmFsID4+IDgpICYgMHhmZjsKKwkJb2ZmICs9IDI7CisJCXNpemUgLT0gMjsKIAl9CiAKIAl3aGlsZSAoc2l6ZSA+IDMpIHsKLQkJdW5zaWduZWQgaW50IHZhbDsKKwkJdTMyIHZhbDsKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgb2ZmLCAmdmFsKTsKLQkJYnVmW29mZiAtIGluaXRfb2ZmXSA9IHZhbCAmIDB4ZmY7Ci0JCWJ1ZltvZmYgLSBpbml0X29mZiArIDFdID0gKHZhbCA+PiA4KSAmIDB4ZmY7Ci0JCWJ1ZltvZmYgLSBpbml0X29mZiArIDJdID0gKHZhbCA+PiAxNikgJiAweGZmOwotCQlidWZbb2ZmIC0gaW5pdF9vZmYgKyAzXSA9ICh2YWwgPj4gMjQpICYgMHhmZjsKKwkJZGF0YVtvZmYgLSBpbml0X29mZl0gPSB2YWwgJiAweGZmOworCQlkYXRhW29mZiAtIGluaXRfb2ZmICsgMV0gPSAodmFsID4+IDgpICYgMHhmZjsKKwkJZGF0YVtvZmYgLSBpbml0X29mZiArIDJdID0gKHZhbCA+PiAxNikgJiAweGZmOworCQlkYXRhW29mZiAtIGluaXRfb2ZmICsgM10gPSAodmFsID4+IDI0KSAmIDB4ZmY7CiAJCW9mZiArPSA0OwogCQlzaXplIC09IDQ7CiAJfQogCi0Jd2hpbGUgKHNpemUgPiAwKSB7Ci0JCXVuc2lnbmVkIGNoYXIgdmFsOworCWlmIChzaXplID49IDIpIHsKKwkJdTE2IHZhbDsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBvZmYsICZ2YWwpOworCQlkYXRhW29mZiAtIGluaXRfb2ZmXSA9IHZhbCAmIDB4ZmY7CisJCWRhdGFbb2ZmIC0gaW5pdF9vZmYgKyAxXSA9ICh2YWwgPj4gOCkgJiAweGZmOworCQlvZmYgKz0gMjsKKwkJc2l6ZSAtPSAyOworCX0KKworCWlmIChzaXplID4gMCkgeworCQl1OCB2YWw7CiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgb2ZmLCAmdmFsKTsKLQkJYnVmW29mZiAtIGluaXRfb2ZmXSA9IHZhbDsKKwkJZGF0YVtvZmYgLSBpbml0X29mZl0gPSB2YWw7CiAJCW9mZisrOwogCQktLXNpemU7CiAJfQpAQCAtMTQ1LDYgKzE2Myw3IEBACiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoY29udGFpbmVyX29mKGtvYmosc3RydWN0IGRldmljZSxrb2JqKSk7CiAJdW5zaWduZWQgaW50IHNpemUgPSBjb3VudDsKIAlsb2ZmX3QgaW5pdF9vZmYgPSBvZmY7CisJdTggKmRhdGEgPSAodTgqKSBidWY7CiAKIAlpZiAob2ZmID4gZGV2LT5jZmdfc2l6ZSkKIAkJcmV0dXJuIDA7CkBAIC0xNTIsMjYgKzE3MSw0MSBAQAogCQlzaXplID0gZGV2LT5jZmdfc2l6ZSAtIG9mZjsKIAkJY291bnQgPSBzaXplOwogCX0KLQotCXdoaWxlIChvZmYgJiAzKSB7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIG9mZiwgYnVmW29mZiAtIGluaXRfb2ZmXSk7CisJCisJaWYgKChvZmYgJiAxKSAmJiBzaXplKSB7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIG9mZiwgZGF0YVtvZmYgLSBpbml0X29mZl0pOwogCQlvZmYrKzsKLQkJaWYgKC0tc2l6ZSA9PSAwKQotCQkJYnJlYWs7CisJCXNpemUtLTsKIAl9CisJCisJaWYgKChvZmYgJiAzKSAmJiBzaXplID4gMikgeworCQl1MTYgdmFsID0gZGF0YVtvZmYgLSBpbml0X29mZl07CisJCXZhbCB8PSAodTE2KSBkYXRhW29mZiAtIGluaXRfb2ZmICsgMV0gPDwgODsKKyAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBvZmYsIHZhbCk7CisgICAgICAgICAgICAgICAgb2ZmICs9IDI7CisgICAgICAgICAgICAgICAgc2l6ZSAtPSAyOworICAgICAgICB9CiAKIAl3aGlsZSAoc2l6ZSA+IDMpIHsKLQkJdW5zaWduZWQgaW50IHZhbCA9IGJ1ZltvZmYgLSBpbml0X29mZl07Ci0JCXZhbCB8PSAodW5zaWduZWQgaW50KSBidWZbb2ZmIC0gaW5pdF9vZmYgKyAxXSA8PCA4OwotCQl2YWwgfD0gKHVuc2lnbmVkIGludCkgYnVmW29mZiAtIGluaXRfb2ZmICsgMl0gPDwgMTY7Ci0JCXZhbCB8PSAodW5zaWduZWQgaW50KSBidWZbb2ZmIC0gaW5pdF9vZmYgKyAzXSA8PCAyNDsKKwkJdTMyIHZhbCA9IGRhdGFbb2ZmIC0gaW5pdF9vZmZdOworCQl2YWwgfD0gKHUzMikgZGF0YVtvZmYgLSBpbml0X29mZiArIDFdIDw8IDg7CisJCXZhbCB8PSAodTMyKSBkYXRhW29mZiAtIGluaXRfb2ZmICsgMl0gPDwgMTY7CisJCXZhbCB8PSAodTMyKSBkYXRhW29mZiAtIGluaXRfb2ZmICsgM10gPDwgMjQ7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBvZmYsIHZhbCk7CiAJCW9mZiArPSA0OwogCQlzaXplIC09IDQ7CiAJfQorCQorCWlmIChzaXplID49IDIpIHsKKwkJdTE2IHZhbCA9IGRhdGFbb2ZmIC0gaW5pdF9vZmZdOworCQl2YWwgfD0gKHUxNikgZGF0YVtvZmYgLSBpbml0X29mZiArIDFdIDw8IDg7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIG9mZiwgdmFsKTsKKwkJb2ZmICs9IDI7CisJCXNpemUgLT0gMjsKKwl9CiAKLQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgb2ZmLCBidWZbb2ZmIC0gaW5pdF9vZmZdKTsKKwlpZiAoc2l6ZSkgeworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBvZmYsIGRhdGFbb2ZmIC0gaW5pdF9vZmZdKTsKIAkJb2ZmKys7CiAJCS0tc2l6ZTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IGJmYmZmODMuLmYwNGI5ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CS8qIGlzYV9kbWFfYnJpZGdlX2J1Z2d5ICovCisjaW5jbHVkZSAicGNpLmgiCiAKIAogLyoqCkBAIC0zOTgsMTAgKzM5OSwxMCBAQAogewogCWludCBlcnI7CiAKLQlkZXYtPmlzX2VuYWJsZWQgPSAxOwogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfYmFycyhkZXYsICgxIDw8IFBDSV9OVU1fUkVTT1VSQ0VTKSAtIDEpKSkKIAkJcmV0dXJuIGVycjsKIAlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9lbmFibGUsIGRldik7CisJZGV2LT5pc19lbmFibGVkID0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDI3LDE2ICs0MjgsMTUgQEAKIHsKIAl1MTYgcGNpX2NvbW1hbmQ7CiAJCi0JZGV2LT5pc19lbmFibGVkID0gMDsKLQlkZXYtPmlzX2J1c21hc3RlciA9IDA7Ci0KIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NvbW1hbmQpOwogCWlmIChwY2lfY29tbWFuZCAmIFBDSV9DT01NQU5EX01BU1RFUikgewogCQlwY2lfY29tbWFuZCAmPSB+UENJX0NPTU1BTkRfTUFTVEVSOwogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgcGNpX2NvbW1hbmQpOwogCX0KKwlkZXYtPmlzX2J1c21hc3RlciA9IDA7CiAKIAlwY2liaW9zX2Rpc2FibGVfZGV2aWNlKGRldik7CisJZGV2LT5pc19lbmFibGVkID0gMDsKIH0KIAogLyoqCkBAIC03NDksMTcgKzc0OSw2IEBACiB9CiAgICAgCiBpbnQKLXBjaV9kYWNfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKQotewotCWlmICghcGNpX2RhY19kbWFfc3VwcG9ydGVkKGRldiwgbWFzaykpCi0JCXJldHVybiAtRUlPOwotCi0JZGV2LT5kbWFfbWFzayA9IG1hc2s7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50CiBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spCiB7CiAJaWYgKCFwY2lfZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQpAQCAtODIxLDcgKzgxMCw2IEBACiBFWFBPUlRfU1lNQk9MKHBjaV9zZXRfbXdpKTsKIEVYUE9SVF9TWU1CT0wocGNpX2NsZWFyX213aSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9zZXRfZG1hX21hc2spOwotRVhQT1JUX1NZTUJPTChwY2lfZGFjX3NldF9kbWFfbWFzayk7CiBFWFBPUlRfU1lNQk9MKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayk7CiBFWFBPUlRfU1lNQk9MKHBjaV9hc3NpZ25fcmVzb3VyY2UpOwogRVhQT1JUX1NZTUJPTChwY2lfZmluZF9wYXJlbnRfcmVzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKaW5kZXggNmYwZWRhZC4uYjdhZTg3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuYworKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSAicGNpLmgiCiAKICNkZWZpbmUgQ0FSREJVU19MQVRFTkNZX1RJTUVSCTE3NgkvKiBzZWNvbmRhcnkgbGF0ZW5jeSB0aW1lciAqLwogI2RlZmluZSBDQVJEQlVTX1JFU0VSVkVfQlVTTlIJMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYy5jIGIvZHJpdmVycy9wY2kvcHJvYy5jCmluZGV4IDg0Y2M0ZjYuLmU2OGJiZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Byb2MuYworKysgYi9kcml2ZXJzL3BjaS9wcm9jLmMKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgInBjaS5oIgogCiBzdGF0aWMgaW50IHByb2NfaW5pdGlhbGl6ZWQ7CS8qID0gMCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDE1YTM5ODAuLjAyNmFhMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAicGNpLmgiCiAKIC8qIERlYWwgd2l0aCBicm9rZW4gQklPUydlcyB0aGF0IG5lZ2xlY3QgdG8gZW5hYmxlIHBhc3NpdmUgcmVsZWFzZSwKICAgIHdoaWNoIGNhbiBjYXVzZSBwcm9ibGVtcyBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSA4MjQ0MUZYL1BQcm8gTVRSUnMgKi8KQEAgLTMyOCw2ICszMjksNyBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8wLAkJcXVpcmtfaWNoNF9scGNfYWNwaSApOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMiwJcXVpcmtfaWNoNF9scGNfYWNwaSApOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8wLAkJcXVpcmtfaWNoNF9scGNfYWNwaSApOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzEsCQlxdWlya19pY2g0X2xwY19hY3BpICk7CiAKIC8qCiAgKiBWSUEgQUNQSTogT25lIElPIHJlZ2lvbiBwb2ludGVkIHRvIGJ5IGxvbmd3b3JkIGF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9yb20uYyBiL2RyaXZlcnMvcGNpL3JvbS5jCmluZGV4IDNlNjRmZjYuLjgzODU3NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3JvbS5jCisrKyBiL2RyaXZlcnMvcGNpL3JvbS5jCkBAIC0xNCw3ICsxNCw3IEBACiAKIC8qKgogICogcGNpX2VuYWJsZV9yb20gLSBlbmFibGUgUk9NIGRlY29kaW5nIGZvciBhIFBDSSBkZXZpY2UKLSAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gZW5hYmxlCisgKiBAcGRldjogUENJIGRldmljZSB0byBlbmFibGUKICAqCiAgKiBFbmFibGUgUk9NIGRlY29kaW5nIG9uIEBkZXYuICBUaGlzIGludm9sdmVzIHNpbXBseSB0dXJuaW5nIG9uIHRoZSBsYXN0CiAgKiBiaXQgb2YgdGhlIFBDSSBST00gQkFSLiAgTm90ZSB0aGF0IHNvbWUgY2FyZHMgbWF5IHNoYXJlIGFkZHJlc3MgZGVjb2RlcnMKQEAgLTMyLDcgKzMyLDcgQEAKIAogLyoqCiAgKiBwY2lfZGlzYWJsZV9yb20gLSBkaXNhYmxlIFJPTSBkZWNvZGluZyBmb3IgYSBQQ0kgZGV2aWNlCi0gKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGRpc2FibGUKKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIGRpc2FibGUKICAqCiAgKiBEaXNhYmxlIFJPTSBkZWNvZGluZyBvbiBhIFBDSSBkZXZpY2UgYnkgdHVybmluZyBvZmYgdGhlIGxhc3QgYml0IGluIHRoZQogICogUk9NIEJBUi4KQEAgLTQ3LDcgKzQ3LDcgQEAKIAogLyoqCiAgKiBwY2lfbWFwX3JvbSAtIG1hcCBhIFBDSSBST00gdG8ga2VybmVsIHNwYWNlCi0gKiBAZGV2OiBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugc3RydWN0CisgKiBAcGRldjogcG9pbnRlciB0byBwY2kgZGV2aWNlIHN0cnVjdAogICogQHNpemU6IHBvaW50ZXIgdG8gcmVjZWl2ZSBzaXplIG9mIHBjaSB3aW5kb3cgb3ZlciBST00KICAqIEByZXR1cm46IGtlcm5lbCB2aXJ0dWFsIHBvaW50ZXIgdG8gaW1hZ2Ugb2YgUk9NCiAgKgpAQCAtMTMyLDcgKzEzMiw3IEBACiAKIC8qKgogICogcGNpX21hcF9yb21fY29weSAtIG1hcCBhIFBDSSBST00gdG8ga2VybmVsIHNwYWNlLCBjcmVhdGUgYSBjb3B5Ci0gKiBAZGV2OiBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugc3RydWN0CisgKiBAcGRldjogcG9pbnRlciB0byBwY2kgZGV2aWNlIHN0cnVjdAogICogQHNpemU6IHBvaW50ZXIgdG8gcmVjZWl2ZSBzaXplIG9mIHBjaSB3aW5kb3cgb3ZlciBST00KICAqIEByZXR1cm46IGtlcm5lbCB2aXJ0dWFsIHBvaW50ZXIgdG8gaW1hZ2Ugb2YgUk9NCiAgKgpAQCAtMTY2LDcgKzE2Niw3IEBACiAKIC8qKgogICogcGNpX3VubWFwX3JvbSAtIHVubWFwIHRoZSBST00gZnJvbSBrZXJuZWwgc3BhY2UKLSAqIEBkZXY6IHBvaW50ZXIgdG8gcGNpIGRldmljZSBzdHJ1Y3QKKyAqIEBwZGV2OiBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugc3RydWN0CiAgKiBAcm9tOiB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIG1hcHBpbmcKICAqCiAgKiBSZW1vdmUgYSBtYXBwaW5nIG9mIGEgcHJldmlvdXNseSBtYXBwZWQgUk9NCkBAIC0xODcsNyArMTg3LDcgQEAKIAogLyoqCiAgKiBwY2lfcmVtb3ZlX3JvbSAtIGRpc2FibGUgdGhlIFJPTSBhbmQgcmVtb3ZlIGl0cyBzeXNmcyBhdHRyaWJ1dGUKLSAqIEBkZXY6IHBvaW50ZXIgdG8gcGNpIGRldmljZSBzdHJ1Y3QKKyAqIEBwZGV2OiBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugc3RydWN0CiAgKgogICogUmVtb3ZlIHRoZSByb20gZmlsZSBpbiBzeXNmcyBhbmQgZGlzYWJsZSBST00gZGVjb2RpbmcuCiAgKi8KQEAgLTIwNiw3ICsyMDYsNyBAQAogLyoqCiAgKiBwY2lfY2xlYW51cF9yb20gLSBpbnRlcm5hbCByb3V0aW5lIGZvciBmcmVlaW5nIHRoZSBST00gY29weSBjcmVhdGVkCiAgKiBieSBwY2lfbWFwX3JvbV9jb3B5IGNhbGxlZCBmcm9tIHJlbW92ZS5jCi0gKiBAZGV2OiBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugc3RydWN0CisgKiBAcGRldjogcG9pbnRlciB0byBwY2kgZGV2aWNlIHN0cnVjdAogICoKICAqIEZyZWUgdGhlIGNvcGllZCBST00gaWYgd2UgYWxsb2NhdGVkIG9uZS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMgYi9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYwppbmRleCAzZjQzNjQzLi4yMDY0MmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYwpAQCAtNzQ0LDcgKzc0NCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1NPQ0tFVFM7IGkrKykgewogCQlzb2NrZXRbaV0uaW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOwotCQlzb2NrZXRbaV0uc29ja2V0LmZlYXR1cmVzIHw9IFNTX0NBUF9QQ0NBUkQ7CisJCXNvY2tldFtpXS5zb2NrZXQuZmVhdHVyZXMgfD0gU1NfQ0FQX1BBR0VfUkVHUyB8IFNTX0NBUF9QQ0NBUkQ7CiAJCXNvY2tldFtpXS5zb2NrZXQubWFwX3NpemUgPSAweDEwMDA7CiAJCXNvY2tldFtpXS5zb2NrZXQuaXJxX21hc2sgPSBtYXNrOwogCQlzb2NrZXRbaV0uc29ja2V0LnBjaV9pcnEgID0gZGV2LT5pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS90aTExM3guaCBiL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oCmluZGV4IDUyYzA3M2EuLmE4YTFkMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oCkBAIC00NDIsNiArNDQyLDI1IEBACiB9CiAKIAorLyogY2hhbmdlcyB0aGUgaXJxIG9mIGZ1bmMxIHRvIG1hdGNoIHRoYXQgb2YgZnVuYzAgKi8KK3N0YXRpYyBpbnQgdGkxMnh4X2FsaWduX2lycXMoc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0LCBpbnQgKm9sZF9pcnEpCit7CisJc3RydWN0IHBjaV9kZXYgKmZ1bmMwOworCisJLyogZmluZCBmdW5jMCBkZXZpY2UgKi8KKwlmdW5jMCA9IHBjaV9nZXRfc2xvdChzb2NrZXQtPmRldi0+YnVzLCBzb2NrZXQtPmRldi0+ZGV2Zm4gJiB+MHgwNyk7CisJaWYgKCFmdW5jMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAob2xkX2lycSkKKwkJKm9sZF9pcnEgPSBzb2NrZXQtPmNiX2lycTsKKwlzb2NrZXQtPmNiX2lycSA9IHNvY2tldC0+ZGV2LT5pcnEgPSBmdW5jMC0+aXJxOworCisJcGNpX2Rldl9wdXQoZnVuYzApOworCisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiB0aWVzIElOVEEgYW5kIElOVEIgdG9nZXRoZXIuIGFsc28gY2hhbmdlcyB0aGUgZGV2aWNlcyBpcnEgdG8gdGhhdCBvZgogICogdGhlIGZ1bmN0aW9uIDAgZGV2aWNlLiBjYWxsIGZyb20gZnVuYzEgb25seS4KQEAgLTQ0OSwyNiArNDY4LDIyIEBACiAgKi8KIHN0YXRpYyBpbnQgdGkxMnh4X3RpZV9pbnRlcnJ1cHRzKHN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCwgaW50ICpvbGRfaXJxKQogewotCXN0cnVjdCBwY2lfZGV2ICpmdW5jMDsKIAl1MzIgc3lzY3RsOworCWludCByZXQ7CiAKIAlzeXNjdGwgPSBjb25maWdfcmVhZGwoc29ja2V0LCBUSTExM1hfU1lTVEVNX0NPTlRST0wpOwogCWlmIChzeXNjdGwgJiBUSTEyMlhfU0NSX0lOVFJUSUUpCiAJCXJldHVybiAwOwogCi0JLyogZmluZCBmdW5jMCBkZXZpY2UgKi8KLQlmdW5jMCA9IHBjaV9nZXRfc2xvdChzb2NrZXQtPmRldi0+YnVzLCBzb2NrZXQtPmRldi0+ZGV2Zm4gJiB+MHgwNyk7Ci0JaWYgKCFmdW5jMCkKKwkvKiBhbGlnbiAqLworCXJldCA9IHRpMTJ4eF9hbGlnbl9pcnFzKHNvY2tldCwgb2xkX2lycSk7CisJaWYgKCFyZXQpCiAJCXJldHVybiAwOwogCi0JLyogY2hhbmdlIHRoZSBpbnRlcnJ1cHQgdG8gbWF0Y2ggZnVuYzAsIHRpZSAnZW0gdXAgKi8KLQkqb2xkX2lycSA9IHNvY2tldC0+Y2JfaXJxOwotCXNvY2tldC0+Y2JfaXJxID0gc29ja2V0LT5kZXYtPmlycSA9IGZ1bmMwLT5pcnE7CisJLyogdGllICovCiAJc3lzY3RsIHw9IFRJMTIyWF9TQ1JfSU5UUlRJRTsKIAljb25maWdfd3JpdGVsKHNvY2tldCwgVEkxMTNYX1NZU1RFTV9DT05UUk9MLCBzeXNjdGwpOwogCi0JcGNpX2Rldl9wdXQoZnVuYzApOwotCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQ4OSw3ICs1MDQsNyBAQAogICovCiBzdGF0aWMgdm9pZCB0aTEyeHhfaXJxcm91dGVfZnVuYzEoc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0KQogewotCXUzMiBtZnVuYywgbWZ1bmNfb2xkLCBkZXZjdGw7CisJdTMyIG1mdW5jLCBtZnVuY19vbGQsIGRldmN0bCwgc3lzY3RsOwogCWludCBwY2lfaXJxX3N0YXR1czsKIAogCW1mdW5jID0gbWZ1bmNfb2xkID0gY29uZmlnX3JlYWRsKHNvY2tldCwgVEkxMjJYX01GVU5DKTsKQEAgLTQ5Nyw2ICs1MTIsMTEgQEAKIAlwcmludGsoS0VSTl9JTkZPICJZZW50YSBUSTogc29ja2V0ICVzLCBtZnVuYyAweCUwOHgsIGRldmN0bCAweCUwMnhcbiIsCiAJICAgICAgIHBjaV9uYW1lKHNvY2tldC0+ZGV2KSwgbWZ1bmMsIGRldmN0bCk7CiAKKwkvKiBpZiBJUlFzIGFyZSBjb25maWd1cmVkIGFzIHRpZWQsIGFsaWduIGlycSBvZiBmdW5jMSB3aXRoIGZ1bmMwICovCisJc3lzY3RsID0gY29uZmlnX3JlYWRsKHNvY2tldCwgVEkxMTNYX1NZU1RFTV9DT05UUk9MKTsKKwlpZiAoc3lzY3RsICYgVEkxMjJYX1NDUl9JTlRSVElFKQorCQl0aTEyeHhfYWxpZ25faXJxcyhzb2NrZXQsIE5VTEwpOworCiAJLyogbWFrZSBzdXJlIFBDSSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGJlZm9yZSBwcm9iaW5nICovCiAJdGlfaW5pdChzb2NrZXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9tYW5hZ2VyLmMgYi9kcml2ZXJzL3BucC9tYW5hZ2VyLmMKaW5kZXggNjM5ZTA0Mi4uNjVlY2VmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvcG5wL21hbmFnZXIuYwpAQCAtMjUzLDcgKzI1Myw3IEBACiAKIC8qKgogICogcG5wX2NsZWFuX3Jlc291cmNlcyAtIGNsZWFycyByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBtYW51YWxseSBzZXQKLSAqIEByZXMgLSB0aGUgcmVzb3VyY2VzIHRvIGNsZWFuCisgKiBAcmVzOiB0aGUgcmVzb3VyY2VzIHRvIGNsZWFuCiAgKgogICovCiBzdGF0aWMgdm9pZCBwbnBfY2xlYW5fcmVzb3VyY2VfdGFibGUoc3RydWN0IHBucF9yZXNvdXJjZV90YWJsZSAqIHJlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYwppbmRleCBjMGRkYjFlLi5kZDYxZTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9yc3BhcnNlci5jCkBAIC05NCw4ICs5NCw4IEBACiBwbnBhY3BpX3BhcnNlX2FsbG9jYXRlZF9kbWFyZXNvdXJjZShzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICogcmVzLCBpbnQgZG1hKQogewogCWludCBpID0gMDsKLQl3aGlsZSAoIShyZXMtPmRtYV9yZXNvdXJjZVtpXS5mbGFncyAmIElPUkVTT1VSQ0VfVU5TRVQpICYmCi0JCQlpIDwgUE5QX01BWF9ETUEpCisJd2hpbGUgKGkgPCBQTlBfTUFYX0RNQSAmJgorCQkJIShyZXMtPmRtYV9yZXNvdXJjZVtpXS5mbGFncyAmIElPUkVTT1VSQ0VfVU5TRVQpKQogCQlpKys7CiAJaWYgKGkgPCBQTlBfTUFYX0RNQSkgewogCQlyZXMtPmRtYV9yZXNvdXJjZVtpXS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BOyAgLy8gQWxzbyBjbGVhcnMgX1VOU0VUIGZsYWcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYwppbmRleCA2MThhYzE1Li43OWJjZTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBiaW9zL3JzcGFyc2VyLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9yc3BhcnNlci5jCkBAIC03Miw3ICs3Miw5IEBACiBwbnBiaW9zX3BhcnNlX2FsbG9jYXRlZF9kbWFyZXNvdXJjZShzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICogcmVzLCBpbnQgZG1hKQogewogCWludCBpID0gMDsKLQl3aGlsZSAoIShyZXMtPmRtYV9yZXNvdXJjZVtpXS5mbGFncyAmIElPUkVTT1VSQ0VfVU5TRVQpICYmIGkgPCBQTlBfTUFYX0RNQSkgaSsrOworCXdoaWxlIChpIDwgUE5QX01BWF9ETUEgJiYKKwkJCSEocmVzLT5kbWFfcmVzb3VyY2VbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX1VOU0VUKSkKKwkJaSsrOwogCWlmIChpIDwgUE5QX01BWF9ETUEpIHsKIAkJcmVzLT5kbWFfcmVzb3VyY2VbaV0uZmxhZ3MgPSBJT1JFU09VUkNFX0RNQTsgIC8vIEFsc28gY2xlYXJzIF9VTlNFVCBmbGFnCiAJCWlmIChkbWEgPT0gLTEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IGI3NTViYWMuLjAyY2ZlMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtNyw3ICs3LDcgQEAKICAqIEJ1Z3JlcG9ydHMudG8uLjogPExpbnV4MzkwQGRlLmlibS5jb20+CiAgKiAoQykgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgMTk5OS0yMDAxCiAgKgotICogJFJldmlzaW9uOiAxLjE1OCAkCisgKiAkUmV2aXNpb246IDEuMTYxICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0xMTMxLDEzICsxMTMxLDE3IEBACiAJcmVxdWVzdF9xdWV1ZV90ICpxdWV1ZTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKLQlpbnQgbnJfcXVldWVkOworCWludCBucl9xdWV1ZWQsIGZlYXR1cmVfcm87CiAKIAlxdWV1ZSA9IGRldmljZS0+cmVxdWVzdF9xdWV1ZTsKIAkvKiBObyBxdWV1ZSA/IFRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkby4gKi8KIAlpZiAocXVldWUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCisJZmVhdHVyZV9ybyA9IGRhc2RfZ2V0X2ZlYXR1cmUoZGV2aWNlLT5jZGV2LCBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkpOworCWlmIChmZWF0dXJlX3JvIDwgMCkgCS8qIG5vIGRldm1hcCAqLworCQlyZXR1cm47CisKIAkvKgogCSAqIFdlIHJlcXVldWUgcmVxdWVzdCBmcm9tIHRoZSBibG9jayBkZXZpY2UgcXVldWUgdG8gdGhlIGNjdwogCSAqIHF1ZXVlIG9ubHkgaW4gdHdvIHN0YXRlcy4gSW4gc3RhdGUgREFTRF9TVEFURV9SRUFEWSB0aGUKQEAgLTExNTcsOCArMTE2MSw4IEBACiAJICAgICAgIGVsdl9uZXh0X3JlcXVlc3QocXVldWUpICYmCiAJCW5yX3F1ZXVlZCA8IERBU0RfQ0hBTlFfTUFYX1NJWkUpIHsKIAkJcmVxID0gZWx2X25leHRfcmVxdWVzdChxdWV1ZSk7Ci0JCWlmICh0ZXN0X2JpdChEQVNEX0ZMQUdfUk8sICZkZXZpY2UtPmZsYWdzKSAmJgotCQkgICAgcnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgeworCisJCWlmIChmZWF0dXJlX3JvICYmIHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpIHsKIAkJCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLAogCQkJCSAgICAgICJSZWplY3Rpbmcgd3JpdGUgcmVxdWVzdCAlcCIsCiAJCQkJICAgICAgcmVxKTsKQEAgLTE2MzEsNiArMTYzNSw3IEBACiAJYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhkZXZpY2UtPnJlcXVlc3RfcXVldWUsIC0xTCk7CiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwogCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KGRldmljZS0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKKwlibGtfcXVldWVfb3JkZXJlZChkZXZpY2UtPnJlcXVlc3RfcXVldWUsIDEpOwogfQogCiAvKgpAQCAtMTgwMywxMyArMTgwOCwxNyBAQAogCiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7Ci0JaW50IHJjOworCWludCBmZWF0dXJlX2RpYWcsIHJjOworCisJZmVhdHVyZV9kaWFnID0gZGFzZF9nZXRfZmVhdHVyZShjZGV2LCBEQVNEX0ZFQVRVUkVfVVNFRElBRyk7CisJaWYgKGZlYXR1cmVfZGlhZyA8IDApCisJCXJldHVybiBmZWF0dXJlX2RpYWc7CiAKIAlkZXZpY2UgPSBkYXNkX2NyZWF0ZV9kZXZpY2UoY2Rldik7CiAJaWYgKElTX0VSUihkZXZpY2UpKQogCQlyZXR1cm4gUFRSX0VSUihkZXZpY2UpOwogCi0JaWYgKHRlc3RfYml0KERBU0RfRkxBR19VU0VfRElBRywgJmRldmljZS0+ZmxhZ3MpKSB7CisJaWYgKGZlYXR1cmVfZGlhZykgewogCSAgCWlmICghZGFzZF9kaWFnX2Rpc2NpcGxpbmVfcG9pbnRlcikgewogCQkgICAgICAgIHByaW50ayAoS0VSTl9XQVJOSU5HCiAJCQkJImRhc2RfZ2VuZXJpYyBjb3VsZG4ndCBvbmxpbmUgZGV2aWNlICVzICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2NtYi5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfY21iLmMKaW5kZXggZWQxYWI0Ny4uNGYzNjViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfY21iLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfY21iLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfY21iLmMgKCRSZXZpc2lvbjogMS42ICQpCisgKiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9jbWIuYyAoJFJldmlzaW9uOiAxLjkgJCkKICAqCiAgKiBMaW51eCBvbiB6U2VyaWVzIENoYW5uZWwgTWVhc3VyZW1lbnQgRmFjaWxpdHkgc3VwcG9ydAogICogIChkYXNkIGRldmljZSBkcml2ZXIgaW50ZXJmYWNlKQpAQCAtMjMsNyArMjMsNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwzMi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KICNpbmNsdWRlIDxhc20vY21iLmg+CkBAIC04NCwyNyArODMsMTMgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBpb2N0bF9yZWcodW5zaWduZWQgaW50IG5vLCBkYXNkX2lvY3RsX2ZuX3QgaGFuZGxlcikKIHsKLQlpbnQgcmV0OwotCXJldCA9IGRhc2RfaW9jdGxfbm9fcmVnaXN0ZXIoVEhJU19NT0RVTEUsIG5vLCBoYW5kbGVyKTsKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihubywgTlVMTCk7Ci0JaWYgKHJldCkKLQkJZGFzZF9pb2N0bF9ub191bnJlZ2lzdGVyKFRISVNfTU9EVUxFLCBubywgaGFuZGxlcik7Ci0jZW5kaWYKLQlyZXR1cm4gcmV0OworCXJldHVybiBkYXNkX2lvY3RsX25vX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCBubywgaGFuZGxlcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogaW9jdGxfdW5yZWcodW5zaWduZWQgaW50IG5vLCBkYXNkX2lvY3RsX2ZuX3QgaGFuZGxlcikKIHsKIAlkYXNkX2lvY3RsX25vX3VucmVnaXN0ZXIoVEhJU19NT0RVTEUsIG5vLCBoYW5kbGVyKTsKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JdW5yZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24obm8pOwotI2VuZGlmCi0KIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKaW5kZXggYWQxODQxYS4uMWFlZGM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKQEAgLTExLDcgKzExLDcgQEAKICAqIGZ1bmN0aW9ucyBtYXkgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LiBJbiBwYXJ0aWN1bGFyCiAgKiBkYXNkX2dldF9kZXZpY2UgaXMgYSBuby1ubyBmcm9tIGludGVycnVwdCBjb250ZXh0LgogICoKLSAqICRSZXZpc2lvbjogMS4zNyAkCisgKiAkUmV2aXNpb246IDEuNDAgJAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTUxMywxNCArNTEzLDYgQEAKIAlpZiAoIWRldm1hcC0+ZGV2aWNlKSB7CiAJCWRldm1hcC0+ZGV2aWNlID0gZGV2aWNlOwogCQlkZXZpY2UtPmRldmluZGV4ID0gZGV2bWFwLT5kZXZpbmRleDsKLQkJaWYgKGRldm1hcC0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkpCi0JCQlzZXRfYml0KERBU0RfRkxBR19STywgJmRldmljZS0+ZmxhZ3MpOwotCQllbHNlCi0JCQljbGVhcl9iaXQoREFTRF9GTEFHX1JPLCAmZGV2aWNlLT5mbGFncyk7Ci0JCWlmIChkZXZtYXAtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1VTRURJQUcpCi0JCQlzZXRfYml0KERBU0RfRkxBR19VU0VfRElBRywgJmRldmljZS0+ZmxhZ3MpOwotCQllbHNlCi0JCQljbGVhcl9iaXQoREFTRF9GTEFHX1VTRV9ESUFHLCAmZGV2aWNlLT5mbGFncyk7CiAJCWdldF9kZXZpY2UoJmNkZXYtPmRldik7CiAJCWRldmljZS0+Y2RldiA9IGNkZXY7CiAJCXJjID0gMDsKQEAgLTY1MSwxNCArNjQzLDggQEAKIAkJZGV2bWFwLT5mZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfUkVBRE9OTFk7CiAJZWxzZQogCQlkZXZtYXAtPmZlYXR1cmVzICY9IH5EQVNEX0ZFQVRVUkVfUkVBRE9OTFk7Ci0JaWYgKGRldm1hcC0+ZGV2aWNlKSB7Ci0JCWlmIChkZXZtYXAtPmRldmljZS0+Z2RwKQotCQkJc2V0X2Rpc2tfcm8oZGV2bWFwLT5kZXZpY2UtPmdkcCwgcm9fZmxhZyk7Ci0JCWlmIChyb19mbGFnKQotCQkJc2V0X2JpdChEQVNEX0ZMQUdfUk8sICZkZXZtYXAtPmRldmljZS0+ZmxhZ3MpOwotCQllbHNlCi0JCQljbGVhcl9iaXQoREFTRF9GTEFHX1JPLCAmZGV2bWFwLT5kZXZpY2UtPmZsYWdzKTsKLQl9CisJaWYgKGRldm1hcC0+ZGV2aWNlICYmIGRldm1hcC0+ZGV2aWNlLT5nZHApCisJCXNldF9kaXNrX3JvKGRldm1hcC0+ZGV2aWNlLT5nZHAsIHJvX2ZsYWcpOwogCXNwaW5fdW5sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC03MzksNiArNzI1LDQ1IEBACiAJLmF0dHJzID0gZGFzZF9hdHRycywKIH07CiAKKy8qCisgKiBSZXR1cm4gdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBmZWF0dXJlLgorICovCitpbnQKK2Rhc2RfZ2V0X2ZlYXR1cmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIGludCBmZWF0dXJlKQoreworCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOworCisJZGV2bWFwID0gZGFzZF9maW5kX2J1c2lkKGNkZXYtPmRldi5idXNfaWQpOworCWlmIChJU19FUlIoZGV2bWFwKSkKKwkJcmV0dXJuIChpbnQpIFBUUl9FUlIoZGV2bWFwKTsKKworCXJldHVybiAoKGRldm1hcC0+ZmVhdHVyZXMgJiBmZWF0dXJlKSAhPSAwKTsKK30KKworLyoKKyAqIFNldCAvIHJlc2V0IGdpdmVuIGZlYXR1cmUuCisgKiBGbGFnIGluZGljYXRlcyB3ZXRoZXIgdG8gc2V0ICghPTApIG9yIHRoZSByZXNldCAoPTApIHRoZSBmZWF0dXJlLgorICovCitpbnQKK2Rhc2Rfc2V0X2ZlYXR1cmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIGludCBmZWF0dXJlLCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKworCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChjZGV2LT5kZXYuYnVzX2lkKTsKKwlpZiAoSVNfRVJSKGRldm1hcCkpCisJCXJldHVybiAoaW50KSBQVFJfRVJSKGRldm1hcCk7CisKKwlzcGluX2xvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCWlmIChmbGFnKQorCQlkZXZtYXAtPmZlYXR1cmVzIHw9IGZlYXR1cmU7CisJZWxzZQorCQlkZXZtYXAtPmZlYXR1cmVzICY9IH5mZWF0dXJlOworCisJc3Bpbl91bmxvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCXJldHVybiAwOworfQorCisKIGludAogZGFzZF9hZGRfc3lzZnNfZmlsZXMoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggODM4YWVkZi4uODExMDYwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtNyw3ICs3LDcgQEAKICAqIEJ1Z3JlcG9ydHMudG8uLjogPExpbnV4MzkwQGRlLmlibS5jb20+CiAgKiAoQykgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgMTk5OSwyMDAwCiAgKgotICogJFJldmlzaW9uOiAxLjY5ICQKKyAqICRSZXZpc2lvbjogMS43MSAkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTEwMSw3ICsxMTAxLDggQEAKIAkJCQlpZiAoZGFzZF9lY2tkX2NkbF9zcGVjaWFsKGJsa19wZXJfdHJrLCByZWNpZCkpewogCQkJCQlyY21kIHw9IDB4ODsKIAkJCQkJY291bnQgPSBkYXNkX2Vja2RfY2RsX3JlY2xlbihyZWNpZCk7Ci0JCQkJCWlmIChjb3VudCA8IGJsa3NpemUpCisJCQkJCWlmIChjb3VudCA8IGJsa3NpemUgJiYKKwkJCQkJICAgIHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCkKIAkJCQkJCW1lbXNldChkc3QgKyBjb3VudCwgMHhlNSwKIAkJCQkJCSAgICAgICBibGtzaXplIC0gY291bnQpOwogCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCmluZGV4IDFkNTJkYjQuLjk2YzQ5MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwpAQCAtOSw3ICs5LDcgQEAKICAqCiAgKiBnZW5kaXNrIHJlbGF0ZWQgZnVuY3Rpb25zIGZvciB0aGUgZGFzZCBkcml2ZXIuCiAgKgotICogJFJldmlzaW9uOiAxLjQ4ICQKKyAqICRSZXZpc2lvbjogMS41MCAkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMzEsMTIgKzMxLDE2IEBACiBkYXNkX2dlbmRpc2tfYWxsb2Moc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGdlbmRpc2sgKmdkcDsKLQlpbnQgbGVuOworCWludCBsZW4sIGZlYXR1cmVfcm87CiAKIAkvKiBNYWtlIHN1cmUgdGhlIG1pbm9yIGZvciB0aGlzIGRldmljZSBleGlzdHMuICovCiAJaWYgKGRldmljZS0+ZGV2aW5kZXggPj0gREFTRF9QRVJfTUFKT1IpCiAJCXJldHVybiAtRUJVU1k7CiAKKwlmZWF0dXJlX3JvID0gZGFzZF9nZXRfZmVhdHVyZShkZXZpY2UtPmNkZXYsIERBU0RfRkVBVFVSRV9SRUFET05MWSk7CisJaWYgKGZlYXR1cmVfcm8gPCAwKQorCQlyZXR1cm4gZmVhdHVyZV9ybzsKKwogCWdkcCA9IGFsbG9jX2Rpc2soMSA8PCBEQVNEX1BBUlROX0JJVFMpOwogCWlmICghZ2RwKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTcxLDcgKzc1LDcgQEAKIAogIAlzcHJpbnRmKGdkcC0+ZGV2ZnNfbmFtZSwgImRhc2QvJXMiLCBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQpOwogCi0JaWYgKHRlc3RfYml0KERBU0RfRkxBR19STywgJmRldmljZS0+ZmxhZ3MpKQorCWlmIChmZWF0dXJlX3JvKQogCQlzZXRfZGlza19ybyhnZHAsIDEpOwogCWdkcC0+cHJpdmF0ZV9kYXRhID0gZGV2aWNlOwogCWdkcC0+cXVldWUgPSBkZXZpY2UtPnJlcXVlc3RfcXVldWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCmluZGV4IDQ1ODZlMGUuLmE5ZjM4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCkBAIC02LDcgKzYsNyBAQAogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KICAqIChDKSBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCAxOTk5LDIwMDAKICAqCi0gKiAkUmV2aXNpb246IDEuNjMgJAorICogJFJldmlzaW9uOiAxLjY0ICQKICAqLwogCiAjaWZuZGVmIERBU0RfSU5UX0gKQEAgLTMyOSw4ICszMjksNiBAQAogI2RlZmluZSBEQVNEX1NUT1BQRURfRENfRUlPICAxNiAgICAgICAgLyogZGlzY29ubmVjdGVkLCByZXR1cm4gLUVJTyAqLwogCiAvKiBwZXIgZGV2aWNlIGZsYWdzICovCi0jZGVmaW5lIERBU0RfRkxBR19STwkJMAkvKiBkZXZpY2UgaXMgcmVhZC1vbmx5ICovCi0jZGVmaW5lIERBU0RfRkxBR19VU0VfRElBRwkxCS8qIHVzZSBkaWFnIGRpc2NpcGxuaWUgKi8KICNkZWZpbmUgREFTRF9GTEFHX0RTQ19FUlJPUgkyCS8qIHJldHVybiAtRUlPIHdoZW4gZGlzY29ubmVjdGVkICovCiAjZGVmaW5lIERBU0RfRkxBR19PRkZMSU5FCTMJLyogZGV2aWNlIGlzIGluIG9mZmxpbmUgcHJvY2Vzc2luZyAqLwogCkBAIC01MDEsNiArNDk5LDkgQEAKIHN0cnVjdCBkYXNkX2RldmljZSAqZGFzZF9jcmVhdGVfZGV2aWNlKHN0cnVjdCBjY3dfZGV2aWNlICopOwogdm9pZCBkYXNkX2RlbGV0ZV9kZXZpY2Uoc3RydWN0IGRhc2RfZGV2aWNlICopOwogCitpbnQgZGFzZF9nZXRfZmVhdHVyZShzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQpOworaW50IGRhc2Rfc2V0X2ZlYXR1cmUoc3RydWN0IGNjd19kZXZpY2UgKiwgaW50LCBpbnQpOworCiBpbnQgZGFzZF9hZGRfc3lzZnNfZmlsZXMoc3RydWN0IGNjd19kZXZpY2UgKik7CiB2b2lkIGRhc2RfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHN0cnVjdCBjY3dfZGV2aWNlICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwppbmRleCBmMTg5MmJhLi45ODBjNTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKQEAgLTcsNiArNyw4IEBACiAgKiBCdWdyZXBvcnRzLnRvLi46IDxMaW51eDM5MEBkZS5pYm0uY29tPgogICogKEMpIElCTSBDb3Jwb3JhdGlvbiwgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIDE5OTktMjAwMQogICoKKyAqICRSZXZpc2lvbjogMS40NSAkCisgKgogICogaS9vIGNvbnRyb2xzIGZvciB0aGUgZGFzZCBkcml2ZXIuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTI5NCw2ICsyOTYsNyBAQAogewogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBmb3JtYXRfZGF0YV90IGZkYXRhOworCWludCBmZWF0dXJlX3JvOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTMwNCw3ICszMDcsMTEgQEAKIAogCWlmIChkZXZpY2UgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHRlc3RfYml0KERBU0RfRkxBR19STywgJmRldmljZS0+ZmxhZ3MpKQorCisJZmVhdHVyZV9ybyA9IGRhc2RfZ2V0X2ZlYXR1cmUoZGV2aWNlLT5jZGV2LCBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkpOworCWlmIChmZWF0dXJlX3JvIDwgMCkKKwkJcmV0dXJuIGZlYXR1cmVfcm87CisJaWYgKGZlYXR1cmVfcm8pCiAJCXJldHVybiAtRVJPRlM7CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZmZGF0YSwgKHZvaWQgX191c2VyICopIGFyZ3MsCiAJCQkgICBzaXplb2YgKHN0cnVjdCBmb3JtYXRfZGF0YV90KSkpCkBAIC0zNzcsNyArMzg0LDcgQEAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAlzdHJ1Y3QgZGFzZF9pbmZvcm1hdGlvbjJfdCAqZGFzZF9pbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjOworCWludCByYywgZmVhdHVyZV9ybzsKIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKIAogCWRldmljZSA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKQEAgLTM4Nyw2ICszOTQsMTAgQEAKIAlpZiAoIWRldmljZS0+ZGlzY2lwbGluZS0+ZmlsbF9pbmZvKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWZlYXR1cmVfcm8gPSBkYXNkX2dldF9mZWF0dXJlKGRldmljZS0+Y2RldiwgREFTRF9GRUFUVVJFX1JFQURPTkxZKTsKKwlpZiAoZmVhdHVyZV9ybyA8IDApCisJCXJldHVybiBmZWF0dXJlX3JvOworCiAJZGFzZF9pbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfaW5mb3JtYXRpb24yX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGFzZF9pbmZvID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNDE1LDkgKzQyNiw4IEBACiAJaWYgKChkZXZpY2UtPnN0YXRlIDwgREFTRF9TVEFURV9SRUFEWSkgfHwKIAkgICAgKGRhc2RfY2hlY2tfYmxvY2tzaXplKGRldmljZS0+YnBfYmxvY2spKSkKIAkJZGFzZF9pbmZvLT5mb3JtYXQgPSBEQVNEX0ZPUk1BVF9OT05FOwotCQotCWRhc2RfaW5mby0+ZmVhdHVyZXMgfD0gdGVzdF9iaXQoREFTRF9GTEFHX1JPLCAmZGV2aWNlLT5mbGFncykgPwotCQlEQVNEX0ZFQVRVUkVfUkVBRE9OTFkgOiBEQVNEX0ZFQVRVUkVfREVGQVVMVDsKKworCWRhc2RfaW5mby0+ZmVhdHVyZXMgfD0gZmVhdHVyZV9ybzsKIAogCWlmIChkZXZpY2UtPmRpc2NpcGxpbmUpCiAJCW1lbWNweShkYXNkX2luZm8tPnR5cGUsIGRldmljZS0+ZGlzY2lwbGluZS0+bmFtZSwgNCk7CkBAIC00NjAsNyArNDcwLDcgQEAKIGRhc2RfaW9jdGxfc2V0X3JvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBubywgbG9uZyBhcmdzKQogewogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwotCWludCBpbnR2YWw7CisJaW50IGludHZhbCwgcmM7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwpAQCAtNDcyLDEyICs0ODIsMTEgQEAKIAlkZXZpY2UgPSAgYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCWlmIChkZXZpY2UgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CisKIAlzZXRfZGlza19ybyhiZGV2LT5iZF9kaXNrLCBpbnR2YWwpOwotCWlmIChpbnR2YWwpCi0JCXNldF9iaXQoREFTRF9GTEFHX1JPLCAmZGV2aWNlLT5mbGFncyk7Ci0JZWxzZQotCQljbGVhcl9iaXQoREFTRF9GTEFHX1JPLCAmZGV2aWNlLT5mbGFncyk7Ci0JcmV0dXJuIDA7CisJcmMgPSBkYXNkX3NldF9mZWF0dXJlKGRldmljZS0+Y2RldiwgREFTRF9GRUFUVVJFX1JFQURPTkxZLCBpbnR2YWwpOworCisJcmV0dXJuIHJjOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCmluZGV4IDM1M2Q0MTEuLmQ3ZjE5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTksNyArOSw3IEBACiAgKgogICogL3Byb2MgaW50ZXJmYWNlIGZvciB0aGUgZGFzZCBkcml2ZXIuCiAgKgotICogJFJldmlzaW9uOiAxLjMwICQKKyAqICRSZXZpc2lvbjogMS4zMSAkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtNTQsNiArNTQsNyBAQAogewogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCWNoYXIgKnN1YnN0cjsKKwlpbnQgZmVhdHVyZTsKIAogCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fZGV2aW5kZXgoKHVuc2lnbmVkIGxvbmcpIHYgLSAxKTsKIAlpZiAoSVNfRVJSKGRldmljZSkpCkBAIC03Nyw3ICs3OCwxMCBAQAogCWVsc2UKIAkJc2VxX3ByaW50ZihtLCAiIGlzID8/Pz8/Pz8/Iik7CiAJLyogUHJpbnQgZGV2aWNlcyBmZWF0dXJlcy4gKi8KLQlzdWJzdHIgPSB0ZXN0X2JpdChEQVNEX0ZMQUdfUk8sICZkZXZpY2UtPmZsYWdzKSA/ICIocm8pIiA6ICIgIjsKKwlmZWF0dXJlID0gZGFzZF9nZXRfZmVhdHVyZShkZXZpY2UtPmNkZXYsIERBU0RfRkVBVFVSRV9SRUFET05MWSk7CisJaWYgKGZlYXR1cmUgPCAwKQorCQlyZXR1cm4gMDsKKwlzdWJzdHIgPSBmZWF0dXJlID8gIihybykiIDogIiAiOwogCXNlcV9wcmludGYobSwgIiU0czogIiwgc3Vic3RyKTsKIAkvKiBQcmludCBkZXZpY2Ugc3RhdHVzIGluZm9ybWF0aW9uLiAqLwogCXN3aXRjaCAoKGRldmljZSAhPSBOVUxMKSA/IGRldmljZS0+c3RhdGUgOiAtMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9haXJxLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYwppbmRleCAzNzIwZTc3Li44M2U2YTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYwpAQCAtNDUsNyArNDUsNyBAQAogCWVsc2UKIAkJcmV0ID0gKGNtcHhjaGcoJmFkYXB0ZXJfaGFuZGxlciwgTlVMTCwgaGFuZGxlcikgPyAtRUJVU1kgOiAwKTsKIAlpZiAoIXJldCkKLQkJc3luY2hyb25pemVfa2VybmVsKCk7CisJCXN5bmNocm9uaXplX3NjaGVkKCk7ICAvKiBBbGxvdyBpbnRlcnJ1cHRzIHRvIGNvbXBsZXRlLiAqLwogCiAJc3ByaW50ZiAoZGJmX3R4dCwgInJldDolZCIsIHJldCk7CiAJQ0lPX1RSQUNFX0VWRU5UICg0LCBkYmZfdHh0KTsKQEAgLTY1LDcgKzY1LDcgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAllbHNlIHsKIAkJYWRhcHRlcl9oYW5kbGVyID0gTlVMTDsKLQkJc3luY2hyb25pemVfa2VybmVsKCk7CisJCXN5bmNocm9uaXplX3NjaGVkKCk7ICAvKiBBbGxvdyBpbnRlcnJ1cHRzIHRvIGNvbXBsZXRlLiAqLwogCQlyZXQgPSAwOwogCX0KIAlzcHJpbnRmIChkYmZfdHh0LCAicmV0OiVkIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCmluZGV4IDk5Y2U1YTUuLjFkOWIzZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgZHJpdmVycy9zMzkwL2Npby9jaW8uYwogICogICBTLzM5MCBjb21tb24gSS9PIHJvdXRpbmVzIC0tIGxvdyBsZXZlbCBpL28gY2FsbHMKLSAqICAgJFJldmlzaW9uOiAxLjEzMSAkCisgKiAgICRSZXZpc2lvbjogMS4xMzMgJAogICoKICAqICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILAogICoJCQkgICAgICBJQk0gQ29ycG9yYXRpb24KQEAgLTIyOCw3ICsyMjgsNyBAQAogaW50CiBjaW9fc3RhcnQgKHN0cnVjdCBzdWJjaGFubmVsICpzY2gsIHN0cnVjdCBjY3cxICpjcGEsIF9fdTggbHBtKQogewotCXJldHVybiBjaW9fc3RhcnRfa2V5KHNjaCwgY3BhLCBscG0sIGRlZmF1bHRfc3RvcmFnZV9rZXkpOworCXJldHVybiBjaW9fc3RhcnRfa2V5KHNjaCwgY3BhLCBscG0sIFBBR0VfREVGQVVMVF9LRVkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwppbmRleCAxMWUyNjBlLi4wMmQwMWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKICAqCi0gKiAgICRSZXZpc2lvbjogMS41NSAkCisgKiAgICRSZXZpc2lvbjogMS41NiAkCiAgKgogICogICAgQ29weXJpZ2h0IChDKSAyMDAyIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILAogICoJCQkgSUJNIENvcnBvcmF0aW9uCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJIHVuc2lnbmVkIGxvbmcgaW50cGFybSwgX191OCBscG0sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJcmV0dXJuIGNjd19kZXZpY2Vfc3RhcnRfa2V5KGNkZXYsIGNwYSwgaW50cGFybSwgbHBtLAotCQkJCSAgICBkZWZhdWx0X3N0b3JhZ2Vfa2V5LCBmbGFncyk7CisJCQkJICAgIFBBR0VfREVGQVVMVF9LRVksIGZsYWdzKTsKIH0KIAogaW50CkBAIC0xMzcsNyArMTM3LDcgQEAKIAkJCSBpbnQgZXhwaXJlcykKIHsKIAlyZXR1cm4gY2N3X2RldmljZV9zdGFydF90aW1lb3V0X2tleShjZGV2LCBjcGEsIGludHBhcm0sIGxwbSwKLQkJCQkJICAgIGRlZmF1bHRfc3RvcmFnZV9rZXksIGZsYWdzLAorCQkJCQkgICAgUEFHRV9ERUZBVUxUX0tFWSwgZmxhZ3MsCiAJCQkJCSAgICBleHBpcmVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCA5YWQxNGRiLi5iNmRhYWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMSw3ICsxLDkgQEAKICNpZm5kZWYgX0NJT19RRElPX0gKICNkZWZpbmUgX0NJT19RRElPX0gKIAotI2RlZmluZSBWRVJTSU9OX0NJT19RRElPX0ggIiRSZXZpc2lvbjogMS4yNiAkIgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgVkVSU0lPTl9DSU9fUURJT19IICIkUmV2aXNpb246IDEuMzIgJCIKIAogI2lmZGVmIENPTkZJR19RRElPX0RFQlVHCiAjZGVmaW5lIFFESU9fVkVSQk9TRV9MRVZFTCA5CkBAIC00Miw3ICs0NCw3IEBACiAKICNkZWZpbmUgUURJT19RX0xBUFMgNQogCi0jZGVmaW5lIFFESU9fU1RPUkFHRV9LRVkgMAorI2RlZmluZSBRRElPX1NUT1JBR0VfS0VZIFBBR0VfREVGQVVMVF9LRVkKIAogI2RlZmluZSBMMl9DQUNIRUxJTkVfU0laRSAyNTYKICNkZWZpbmUgSU5ESUNBVE9SU19QRVJfQ0FDSEVMSU5FIChMMl9DQUNIRUxJTkVfU0laRS9zaXplb2YoX191MzIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYwppbmRleCBhOThjMDBjLi45ZWMyOWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYwpAQCAtMzg1LDggKzM4NSw4IEBACiBzdGF0aWMgc3NpemVfdCB6OTBjcnlwdF9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOwogc3RhdGljIHNzaXplX3QgejkwY3J5cHRfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwKIAkJCQkJCQlzaXplX3QsIGxvZmZfdCAqKTsKLXN0YXRpYyBpbnQgejkwY3J5cHRfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosCi0JCQkgIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgbG9uZyB6OTBjcnlwdF91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIGxvbmcgejkwY3J5cHRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAKIHN0YXRpYyB2b2lkIHo5MGNyeXB0X3JlYWRlcl90YXNrKHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHZvaWQgejkwY3J5cHRfc2NoZWR1bGVfcmVhZGVyX3Rhc2sodW5zaWduZWQgbG9uZyk7CkBAIC00MzMsMTIgKzQzMywxNSBAQAogc3RhdGljIGF0b21pY190IHo5MGNyeXB0X3N0ZXA7CiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHo5MGNyeXB0X2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5yZWFkCSA9IHo5MGNyeXB0X3JlYWQsCi0JLndyaXRlCSA9IHo5MGNyeXB0X3dyaXRlLAotCS5pb2N0bAkgPSB6OTBjcnlwdF9pb2N0bCwKLQkub3BlbgkgPSB6OTBjcnlwdF9vcGVuLAotCS5yZWxlYXNlID0gejkwY3J5cHRfcmVsZWFzZQorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSB6OTBjcnlwdF9yZWFkLAorCS53cml0ZQkJPSB6OTBjcnlwdF93cml0ZSwKKwkudW5sb2NrZWRfaW9jdGwJPSB6OTBjcnlwdF91bmxvY2tlZF9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bAk9IHo5MGNyeXB0X2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorCS5vcGVuCQk9IHo5MGNyeXB0X29wZW4sCisJLnJlbGVhc2UJPSB6OTBjcnlwdF9yZWxlYXNlCiB9OwogCiAjaWZuZGVmIFo5MENSWVBUX1VTRV9IT1RQTFVHCkBAIC00NzQsMTQgKzQ3NywxMyBAQAogCWNvbXBhdF91cHRyX3QJbl9tb2R1bHVzOwogfTsKIAotc3RhdGljIGludAotdHJhbnNfbW9kZXhwbzMyKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsCi0JCXN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGxvbmcKK3RyYW5zX21vZGV4cG8zMihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGljYV9yc2FfbW9kZXhwb18zMiBfX3VzZXIgKm1leDMydSA9IGNvbXBhdF9wdHIoYXJnKTsKIAlzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvXzMyICBtZXgzMms7CiAJc3RydWN0IGljYV9yc2FfbW9kZXhwbyBfX3VzZXIgKm1leDY0OwotCWludCByZXQgPSAwOworCWxvbmcgcmV0ID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgbWV4MzJ1LCBzaXplb2Yoc3RydWN0IGljYV9yc2FfbW9kZXhwb18zMikpKQpAQCAtNDk4LDcgKzUwMCw3IEBACiAJICAgIF9fcHV0X3VzZXIoY29tcGF0X3B0cihtZXgzMmsuYl9rZXkpLCAmbWV4NjQtPmJfa2V5KSAgICAgICAgICAgfHwKIAkgICAgX19wdXRfdXNlcihjb21wYXRfcHRyKG1leDMyay5uX21vZHVsdXMpLCAmbWV4NjQtPm5fbW9kdWx1cykpCiAJCXJldHVybiAtRUZBVUxUOwotCXJldCA9IHN5c19pb2N0bChmZCwgY21kLCAodW5zaWduZWQgbG9uZyltZXg2NCk7CisJcmV0ID0gejkwY3J5cHRfdW5sb2NrZWRfaW9jdGwoZmlscCwgY21kLCAodW5zaWduZWQgbG9uZyltZXg2NCk7CiAJaWYgKCFyZXQpCiAJCWlmIChfX2dldF91c2VyKGksICZtZXg2NC0+b3V0cHV0ZGF0YWxlbmd0aCkgfHwKIAkJICAgIF9fcHV0X3VzZXIoaSwgJm1leDMydS0+b3V0cHV0ZGF0YWxlbmd0aCkpCkBAIC01MTgsMTQgKzUyMCwxMyBAQAogCWNvbXBhdF91cHRyX3QJdV9tdWx0X2ludjsKIH07CiAKLXN0YXRpYyBpbnQKLXRyYW5zX21vZGV4cG9fY3J0MzIodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywKLQkJICAgIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGxvbmcKK3RyYW5zX21vZGV4cG9fY3J0MzIoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0XzMyIF9fdXNlciAqY3J0MzJ1ID0gY29tcGF0X3B0cihhcmcpOwogCXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0XzMyICBjcnQzMms7CiAJc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQgX191c2VyICpjcnQ2NDsKLQlpbnQgcmV0ID0gMDsKKwlsb25nIHJldCA9IDA7CiAJdW5zaWduZWQgaW50IGk7CiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGNydDMydSwKQEAgLTU0Niw5ICs1NDcsOCBAQAogCSAgICBfX3B1dF91c2VyKGNvbXBhdF9wdHIoY3J0MzJrLm5wX3ByaW1lKSwgJmNydDY0LT5ucF9wcmltZSkgICAgIHx8CiAJICAgIF9fcHV0X3VzZXIoY29tcGF0X3B0cihjcnQzMmsubnFfcHJpbWUpLCAmY3J0NjQtPm5xX3ByaW1lKSAgICAgfHwKIAkgICAgX19wdXRfdXNlcihjb21wYXRfcHRyKGNydDMyay51X211bHRfaW52KSwgJmNydDY0LT51X211bHRfaW52KSkKLQkJcmV0ID0gLUVGQVVMVDsKLQlpZiAoIXJldCkKLQkJcmV0ID0gc3lzX2lvY3RsKGZkLCBjbWQsICh1bnNpZ25lZCBsb25nKWNydDY0KTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0ID0gejkwY3J5cHRfdW5sb2NrZWRfaW9jdGwoZmlscCwgY21kLCAodW5zaWduZWQgbG9uZyljcnQ2NCk7CiAJaWYgKCFyZXQpCiAJCWlmIChfX2dldF91c2VyKGksICZjcnQ2NC0+b3V0cHV0ZGF0YWxlbmd0aCkgfHwKIAkJICAgIF9fcHV0X3VzZXIoaSwgJmNydDMydS0+b3V0cHV0ZGF0YWxlbmd0aCkpCkBAIC01NTYsNjYgKzU1NiwzNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGF0aWJsZV9pb2N0bHNbXSA9IHsKLQlJQ0FaOTBTVEFUVVMsIFo5MFFVSUVTQ0UsIFo5MFNUQVRfVE9UQUxDT1VOVCwgWjkwU1RBVF9QQ0lDQUNPVU5ULAotCVo5MFNUQVRfUENJQ0NDT1VOVCwgWjkwU1RBVF9QQ0lYQ0NDT1VOVCwgWjkwU1RBVF9QQ0lYQ0NNQ0wyQ09VTlQsCi0JWjkwU1RBVF9QQ0lYQ0NNQ0wzQ09VTlQsIFo5MFNUQVRfQ0VYMkNDT1VOVCwgWjkwU1RBVF9SRVFVRVNUUV9DT1VOVCwKLQlaOTBTVEFUX1BFTkRJTkdRX0NPVU5ULCBaOTBTVEFUX1RPVEFMT1BFTl9DT1VOVCwgWjkwU1RBVF9ET01BSU5fSU5ERVgsCi0JWjkwU1RBVF9TVEFUVVNfTUFTSywgWjkwU1RBVF9RREVQVEhfTUFTSywgWjkwU1RBVF9QRVJERVZfUkVRQ05ULAotfTsKLQotc3RhdGljIHZvaWQgejkwX3VucmVnaXN0ZXJfaW9jdGwzMnModm9pZCkKK3N0YXRpYyBsb25nCit6OTBjcnlwdF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWludCBpOwotCi0JdW5yZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oSUNBUlNBTU9ERVhQTyk7Ci0JdW5yZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oSUNBUlNBQ1JUKTsKLQotCWZvcihpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tcGF0aWJsZV9pb2N0bHMpOyBpKyspCi0JCXVucmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKGNvbXBhdGlibGVfaW9jdGxzW2ldKTsKLX0KLQotc3RhdGljIGludCB6OTBfcmVnaXN0ZXJfaW9jdGwzMnModm9pZCkKLXsKLQlpbnQgcmVzdWx0LCBpOwotCi0JcmVzdWx0ID0gcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKElDQVJTQU1PREVYUE8sIHRyYW5zX21vZGV4cG8zMik7Ci0JaWYgKHJlc3VsdCA9PSAtRUJVU1kpIHsKLQkJdW5yZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oSUNBUlNBTU9ERVhQTyk7Ci0JCXJlc3VsdCA9IHJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihJQ0FSU0FNT0RFWFBPLAotCQkJCQkJICAgICB0cmFuc19tb2RleHBvMzIpOwotCX0KLQlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OwotCXJlc3VsdCA9IHJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihJQ0FSU0FDUlQsIHRyYW5zX21vZGV4cG9fY3J0MzIpOwotCWlmIChyZXN1bHQgPT0gLUVCVVNZKSB7Ci0JCXVucmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKElDQVJTQUNSVCk7Ci0JCXJlc3VsdCA9IHJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihJQ0FSU0FDUlQsCi0JCQkJCQkgICAgIHRyYW5zX21vZGV4cG9fY3J0MzIpOwotCX0KLQlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OwotCi0JZm9yKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21wYXRpYmxlX2lvY3Rscyk7IGkrKykgewotCQlyZXN1bHQgPSByZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oY29tcGF0aWJsZV9pb2N0bHNbaV0sIDApOwotCQlpZiAocmVzdWx0ID09IC1FQlVTWSkgewotCQkJdW5yZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oY29tcGF0aWJsZV9pb2N0bHNbaV0pOwotCQkJcmVzdWx0ID0gcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKAotCQkJCQkJICAgICAgIGNvbXBhdGlibGVfaW9jdGxzW2ldLCAwKTsKLQkJfQotCQlpZiAocmVzdWx0KQotCQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0jZWxzZSAvLyAhQ09ORklHX0NPTVBBVAotc3RhdGljIGlubGluZSB2b2lkIHo5MF91bnJlZ2lzdGVyX2lvY3RsMzJzKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHo5MF9yZWdpc3Rlcl9pb2N0bDMycyh2b2lkKQotewotCXJldHVybiAwOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBJQ0FaOTBTVEFUVVM6CisJY2FzZSBaOTBRVUlFU0NFOgorCWNhc2UgWjkwU1RBVF9UT1RBTENPVU5UOgorCWNhc2UgWjkwU1RBVF9QQ0lDQUNPVU5UOgorCWNhc2UgWjkwU1RBVF9QQ0lDQ0NPVU5UOgorCWNhc2UgWjkwU1RBVF9QQ0lYQ0NDT1VOVDoKKwljYXNlIFo5MFNUQVRfUENJWENDTUNMMkNPVU5UOgorCWNhc2UgWjkwU1RBVF9QQ0lYQ0NNQ0wzQ09VTlQ6CisJY2FzZSBaOTBTVEFUX0NFWDJDQ09VTlQ6CisJY2FzZSBaOTBTVEFUX1JFUVVFU1RRX0NPVU5UOgorCWNhc2UgWjkwU1RBVF9QRU5ESU5HUV9DT1VOVDoKKwljYXNlIFo5MFNUQVRfVE9UQUxPUEVOX0NPVU5UOgorCWNhc2UgWjkwU1RBVF9ET01BSU5fSU5ERVg6CisJY2FzZSBaOTBTVEFUX1NUQVRVU19NQVNLOgorCWNhc2UgWjkwU1RBVF9RREVQVEhfTUFTSzoKKwljYXNlIFo5MFNUQVRfUEVSREVWX1JFUUNOVDoKKwkJcmV0dXJuIHo5MGNyeXB0X3VubG9ja2VkX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKKwljYXNlIElDQVJTQU1PREVYUE86CisJCXJldHVybiB0cmFuc19tb2RleHBvMzIoZmlscCwgY21kLCBhcmcpOworCWNhc2UgSUNBUlNBQ1JUOgorCQlyZXR1cm4gdHJhbnNfbW9kZXhwb19jcnQzMihmaWxwLCBjbWQsIGFyZyk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKyAgCX0KIH0KICNlbmRpZgogCkBAIC03MzAsMTQgKzY5OCw5IEBACiAJcmVhZGVyX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKFJFQURFUlRJTUUgKiBIWiAvIDEwMDApOwogCWFkZF90aW1lcigmcmVhZGVyX3RpbWVyKTsKIAotCWlmICgocmVzdWx0ID0gejkwX3JlZ2lzdGVyX2lvY3RsMzJzKCkpKQotCQlnb3RvIGluaXRfbW9kdWxlX2NsZWFudXA7Ci0KIAlyZXR1cm4gMDsgLy8gc3VjY2VzcwogCiBpbml0X21vZHVsZV9jbGVhbnVwOgotCXo5MF91bnJlZ2lzdGVyX2lvY3RsMzJzKCk7Ci0KICNpZm5kZWYgWjkwQ1JZUFRfVVNFX0hPVFBMVUcKIAlpZiAoKG5yZXN1bHQgPSBtaXNjX2RlcmVnaXN0ZXIoJno5MGNyeXB0X21pc2NfZGV2aWNlKSkpCiAJCVBSSU5USygibWlzY19kZXJlZ2lzdGVyIGZhaWxlZCB3aXRoICVkLlxuIiwgbnJlc3VsdCk7CkBAIC03NjMsOCArNzI2LDYgQEAKIAogCVBERUJVRygiUElEICVkXG4iLCBQSUQoKSk7CiAKLQl6OTBfdW5yZWdpc3Rlcl9pb2N0bDMycygpOwotCiAJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci96OTBjcnlwdCIsIDApOwogCiAjaWZuZGVmIFo5MENSWVBUX1VTRV9IT1RQTFVHCkBAIC04MDAsNyArNzYxLDcgQEAKICAqICAgICB6OTBjcnlwdF9yZWxlYXNlCiAgKiAgICAgejkwY3J5cHRfcmVhZAogICogICAgIHo5MGNyeXB0X3dyaXRlCi0gKiAgICAgejkwY3J5cHRfaW9jdGwKKyAqICAgICB6OTBjcnlwdF91bmxvY2tlZF9pb2N0bAogICogICAgIHo5MGNyeXB0X3N0YXR1cwogICogICAgIHo5MGNyeXB0X3N0YXR1c193cml0ZQogICoJIGRpc2FibGVfY2FyZApAQCAtMTgwNCw5ICsxNzY1LDggQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgYSBsaXR0bGUgbG9uZywgYnV0IGl0J3MgcmVhbGx5IGp1c3Qgb25lIGxhcmdlIHN3aXRjaAogICogc3RhdGVtZW50LgogICovCi1zdGF0aWMgaW50Ci16OTBjcnlwdF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZworejkwY3J5cHRfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBwcml2X2RhdGEgKnByaXZhdGVfZGF0YV9wID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGNoYXIgKnN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYwppbmRleCBhM2QyODU4Li4xZTNmN2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCkBAIC0zMiw3ICszMiw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWNoYXIgKnByZWZpeDsKIAlpbnQgbGVuOwotCXZvaWQgKCpjYWxsYmFjaykoY2hhciAqc3RyKTsKKwl2b2lkICgqY2FsbGJhY2spKGNoYXIgKmZyb20sIGNoYXIgKnN0cik7CiB9OwogCiBNT0RVTEVfQVVUSE9SCkBAIC01NSw4ICs1NSw5IEBACiB7CiAJc3RydWN0IHNtc2dfY2FsbGJhY2sgKmNiOwogCXVuc2lnbmVkIGNoYXIgKm1zZzsKKwl1bnNpZ25lZCBjaGFyIHNlbmRlcls5XTsKIAl1bnNpZ25lZCBzaG9ydCBsZW47Ci0JaW50IHJjOworCWludCByYywgaTsKIAogCWxlbiA9IGVpYi0+bG4xbXNnMi5pcGJmbG4xZjsKIAltc2cgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9BVE9NSUN8R0ZQX0RNQSk7CkBAIC02OSwxMCArNzAsMTggQEAKIAlpZiAocmMgPT0gMCkgewogCQltc2dbbGVuXSA9IDA7CiAJCUVCQ0FTQyhtc2csIGxlbik7CisJCW1lbWNweShzZW5kZXIsIG1zZywgOCk7CisJCXNlbmRlcls4XSA9IDA7CisJCS8qIFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIHNlbmRlciBuYW1lLiAqLworCQlmb3IgKGkgPSA3OyBpID49IDA7IGktLSkgeworCQkJaWYgKHNlbmRlcltpXSAhPSAnICcgJiYgc2VuZGVyW2ldICE9ICdcdCcpCisJCQkJYnJlYWs7CisJCQlzZW5kZXJbaV0gPSAwOworCQl9CiAJCXNwaW5fbG9jaygmc21zZ19saXN0X2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNiLCAmc21zZ19saXN0LCBsaXN0KQogCQkJaWYgKHN0cm5jbXAobXNnICsgOCwgY2ItPnByZWZpeCwgY2ItPmxlbikgPT0gMCkgewotCQkJCWNiLT5jYWxsYmFjayhtc2cgKyA4KTsKKwkJCQljYi0+Y2FsbGJhY2soc2VuZGVyLCBtc2cgKyA4KTsKIAkJCQlicmVhazsKIAkJCX0KIAkJc3Bpbl91bmxvY2soJnNtc2dfbGlzdF9sb2NrKTsKQEAgLTkxLDcgKzEwMCw3IEBACiB9OwogCiBpbnQKLXNtc2dfcmVnaXN0ZXJfY2FsbGJhY2soY2hhciAqcHJlZml4LCB2b2lkICgqY2FsbGJhY2spKGNoYXIgKnN0cikpCitzbXNnX3JlZ2lzdGVyX2NhbGxiYWNrKGNoYXIgKnByZWZpeCwgdm9pZCAoKmNhbGxiYWNrKShjaGFyICpmcm9tLCBjaGFyICpzdHIpKQogewogCXN0cnVjdCBzbXNnX2NhbGxiYWNrICpjYjsKIApAQCAtMTA4LDcgKzExNyw3IEBACiB9CiAKIHZvaWQKLXNtc2dfdW5yZWdpc3Rlcl9jYWxsYmFjayhjaGFyICpwcmVmaXgsIHZvaWQgKCpjYWxsYmFjaykoY2hhciAqc3RyKSkKK3Ntc2dfdW5yZWdpc3Rlcl9jYWxsYmFjayhjaGFyICpwcmVmaXgsIHZvaWQgKCpjYWxsYmFjaykoY2hhciAqZnJvbSwgY2hhciAqc3RyKSkKIHsKIAlzdHJ1Y3Qgc21zZ19jYWxsYmFjayAqY2IsICp0bXA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuaCBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuaAppbmRleCAwNGNkODcxLi42N2Y1ZDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5oCkBAIC01LDYgKzUsNiBAQAogICogQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCiAgKi8KIAotaW50ICBzbXNnX3JlZ2lzdGVyX2NhbGxiYWNrKGNoYXIgKiwgdm9pZCAoKikoY2hhciAqKSk7Ci12b2lkIHNtc2dfdW5yZWdpc3Rlcl9jYWxsYmFjayhjaGFyICosIHZvaWQgKCopKGNoYXIgKikpOworaW50ICBzbXNnX3JlZ2lzdGVyX2NhbGxiYWNrKGNoYXIgKiwgdm9pZCAoKikoY2hhciAqLCBjaGFyICopKTsKK3ZvaWQgc21zZ191bnJlZ2lzdGVyX2NhbGxiYWNrKGNoYXIgKiwgdm9pZCAoKikoY2hhciAqLCBjaGFyICopKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvcnRjLmMgYi9kcml2ZXJzL3NidXMvY2hhci9ydGMuYwppbmRleCBiZjMyNzNlLi45Yjk4OGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9ydGMuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9ydGMuYwpAQCAtMjgsMTAgKzI4LDQ2IEBACiAKIHN0YXRpYyBpbnQgcnRjX2J1c3kgPSAwOwogCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0IHVzZWQgYnkgZHJpdmVycy9jaGFyL3J0Yy5jLCB3ZQorICogc3VwcG9ydCB0aGF0IGRyaXZlcidzIGlvY3RscyBzbyB0aGF0IHRoaW5ncyBhcmUgbGVzcyBtZXNzeSBpbgorICogdXNlcnNwYWNlLgorICovCitzdHJ1Y3QgcnRjX3RpbWVfZ2VuZXJpYyB7CisJaW50IHRtX3NlYzsKKwlpbnQgdG1fbWluOworCWludCB0bV9ob3VyOworCWludCB0bV9tZGF5OworCWludCB0bV9tb247CisJaW50IHRtX3llYXI7CisJaW50IHRtX3dkYXk7CisJaW50IHRtX3lkYXk7CisJaW50IHRtX2lzZHN0OworfTsKKyNkZWZpbmUgUlRDX0FJRV9PTglfSU8oJ3AnLCAweDAxKQkvKiBBbGFybSBpbnQuIGVuYWJsZSBvbgkJKi8KKyNkZWZpbmUgUlRDX0FJRV9PRkYJX0lPKCdwJywgMHgwMikJLyogLi4uIG9mZgkJCSovCisjZGVmaW5lIFJUQ19VSUVfT04JX0lPKCdwJywgMHgwMykJLyogVXBkYXRlIGludC4gZW5hYmxlIG9uCSovCisjZGVmaW5lIFJUQ19VSUVfT0ZGCV9JTygncCcsIDB4MDQpCS8qIC4uLiBvZmYJCQkqLworI2RlZmluZSBSVENfUElFX09OCV9JTygncCcsIDB4MDUpCS8qIFBlcmlvZGljIGludC4gZW5hYmxlIG9uCSovCisjZGVmaW5lIFJUQ19QSUVfT0ZGCV9JTygncCcsIDB4MDYpCS8qIC4uLiBvZmYJCQkqLworI2RlZmluZSBSVENfV0lFX09OCV9JTygncCcsIDB4MGYpICAvKiBXYXRjaGRvZyBpbnQuIGVuYWJsZSBvbgkqLworI2RlZmluZSBSVENfV0lFX09GRglfSU8oJ3AnLCAweDEwKSAgLyogLi4uIG9mZgkJCSovCisjZGVmaW5lIFJUQ19SRF9USU1FCV9JT1IoJ3AnLCAweDA5LCBzdHJ1Y3QgcnRjX3RpbWVfZ2VuZXJpYykgLyogUmVhZCBSVEMgdGltZSAgICovCisjZGVmaW5lIFJUQ19TRVRfVElNRQlfSU9XKCdwJywgMHgwYSwgc3RydWN0IHJ0Y190aW1lX2dlbmVyaWMpIC8qIFNldCBSVEMgdGltZSAgICAqLworI2RlZmluZSBSVENfQUxNX1NFVAlfSU9XKCdwJywgMHgwNywgc3RydWN0IHJ0Y190aW1lKSAvKiBTZXQgYWxhcm0gdGltZSAgKi8KKyNkZWZpbmUgUlRDX0FMTV9SRUFECV9JT1IoJ3AnLCAweDA4LCBzdHJ1Y3QgcnRjX3RpbWUpIC8qIFJlYWQgYWxhcm0gdGltZSAqLworI2RlZmluZSBSVENfSVJRUF9SRUFECV9JT1IoJ3AnLCAweDBiLCB1bnNpZ25lZCBsb25nKQkgLyogUmVhZCBJUlEgcmF0ZSAgICovCisjZGVmaW5lIFJUQ19JUlFQX1NFVAlfSU9XKCdwJywgMHgwYywgdW5zaWduZWQgbG9uZykJIC8qIFNldCBJUlEgcmF0ZSAgICAqLworI2RlZmluZSBSVENfRVBPQ0hfUkVBRAlfSU9SKCdwJywgMHgwZCwgdW5zaWduZWQgbG9uZykJIC8qIFJlYWQgZXBvY2ggICAgICAqLworI2RlZmluZSBSVENfRVBPQ0hfU0VUCV9JT1coJ3AnLCAweDBlLCB1bnNpZ25lZCBsb25nKQkgLyogU2V0IGVwb2NoICAgICAgICovCisjZGVmaW5lIFJUQ19XS0FMTV9TRVQJX0lPVygncCcsIDB4MGYsIHN0cnVjdCBydGNfd2thbHJtKS8qIFNldCB3YWtldXAgYWxhcm0qLworI2RlZmluZSBSVENfV0tBTE1fUkQJX0lPUigncCcsIDB4MTAsIHN0cnVjdCBydGNfd2thbHJtKS8qIEdldCB3YWtldXAgYWxhcm0qLworI2RlZmluZSBSVENfUExMX0dFVAlfSU9SKCdwJywgMHgxMSwgc3RydWN0IHJ0Y19wbGxfaW5mbykgIC8qIEdldCBQTEwgY29ycmVjdGlvbiAqLworI2RlZmluZSBSVENfUExMX1NFVAlfSU9XKCdwJywgMHgxMiwgc3RydWN0IHJ0Y19wbGxfaW5mbykgIC8qIFNldCBQTEwgY29ycmVjdGlvbiAqLworCiAvKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIGZyb20gdGhlIHJlYWwgdGltZSBjbG9jay4gKi8KIHN0YXRpYyB2b2lkIGdldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnQpCiB7Ci0Jdm9pZCAqIF9faW9tZW0gcmVncyA9IG1zdGs0OHQwMl9yZWdzOworCXZvaWQgX19pb21lbSAqcmVncyA9IG1zdGs0OHQwMl9yZWdzOwogCXU4IHRtcDsKIAogCXNwaW5fbG9ja19pcnEoJm1vc3Rla19sb2NrKTsKQEAgLTU4LDcgKzk0LDcgQEAKIC8qIFNldCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIGludGhlIHJlYWwgdGltZSBjbG9jay4gKi8KIHZvaWQgc2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdCkKIHsKLQl2b2lkICogX19pb21lbSByZWdzID0gbXN0azQ4dDAyX3JlZ3M7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXN0azQ4dDAyX3JlZ3M7CiAJdTggdG1wOwogCiAJc3Bpbl9sb2NrX2lycSgmbW9zdGVrX2xvY2spOwpAQCAtODIsMjkgKzExOCw4NyBAQAogCXNwaW5fdW5sb2NrX2lycSgmbW9zdGVrX2xvY2spOwogfQogCitzdGF0aWMgaW50IHB1dF9ydGNfdGltZV9nZW5lcmljKHZvaWQgX191c2VyICphcmdwLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBydGNfdGltZV9nZW5lcmljIF9fdXNlciAqdXRtID0gYXJncDsKKworCWlmIChfX3B1dF91c2VyKHRtLT5zZWMsICZ1dG0tPnRtX3NlYykgfHwKKwkgICAgX19wdXRfdXNlcih0bS0+bWluLCAmdXRtLT50bV9taW4pIHx8CisJICAgIF9fcHV0X3VzZXIodG0tPmhvdXIsICZ1dG0tPnRtX2hvdXIpIHx8CisJICAgIF9fcHV0X3VzZXIodG0tPmRvbSwgJnV0bS0+dG1fbWRheSkgfHwKKwkgICAgX19wdXRfdXNlcih0bS0+bW9udGgsICZ1dG0tPnRtX21vbikgfHwKKwkgICAgX19wdXRfdXNlcih0bS0+eWVhciwgJnV0bS0+dG1feWVhcikgfHwKKwkgICAgX19wdXRfdXNlcih0bS0+ZG93LCAmdXRtLT50bV93ZGF5KSB8fAorCSAgICBfX3B1dF91c2VyKDAsICZ1dG0tPnRtX3lkYXkpIHx8CisJICAgIF9fcHV0X3VzZXIoMCwgJnV0bS0+dG1faXNkc3QpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9ydGNfdGltZV9nZW5lcmljKHN0cnVjdCBydGNfdGltZSAqdG0sIHZvaWQgX191c2VyICphcmdwKQoreworCXN0cnVjdCBydGNfdGltZV9nZW5lcmljIF9fdXNlciAqdXRtID0gYXJncDsKKworCWlmIChfX2dldF91c2VyKHRtLT5zZWMsICZ1dG0tPnRtX3NlYykgfHwKKwkgICAgX19nZXRfdXNlcih0bS0+bWluLCAmdXRtLT50bV9taW4pIHx8CisJICAgIF9fZ2V0X3VzZXIodG0tPmhvdXIsICZ1dG0tPnRtX2hvdXIpIHx8CisJICAgIF9fZ2V0X3VzZXIodG0tPmRvbSwgJnV0bS0+dG1fbWRheSkgfHwKKwkgICAgX19nZXRfdXNlcih0bS0+bW9udGgsICZ1dG0tPnRtX21vbikgfHwKKwkgICAgX19nZXRfdXNlcih0bS0+eWVhciwgJnV0bS0+dG1feWVhcikgfHwKKwkgICAgX19nZXRfdXNlcih0bS0+ZG93LCAmdXRtLT50bV93ZGF5KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBydGNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHJ0Y190aW1lIHJ0Y190bTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAotCXN3aXRjaCAoY21kKQotCXsKKwlzd2l0Y2ggKGNtZCkgeworCS8qIE5vIGludGVycnVwdCBzdXBwb3J0LCByZXR1cm4gYW4gZXJyb3IKKwkgKiBjb21wYXRpYmxlIHdpdGggZHJpdmVycy9jaGFyL3J0Yy5jCisJICovCisJY2FzZSBSVENfQUlFX09GRjoKKwljYXNlIFJUQ19BSUVfT046CisJY2FzZSBSVENfUElFX09GRjoKKwljYXNlIFJUQ19QSUVfT046CisJY2FzZSBSVENfVUlFX09GRjoKKwljYXNlIFJUQ19VSUVfT046CisJY2FzZSBSVENfSVJRUF9SRUFEOgorCWNhc2UgUlRDX0lSUVBfU0VUOgorCWNhc2UgUlRDX0VQT0NIX1NFVDoKKwljYXNlIFJUQ19FUE9DSF9SRUFEOgorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWNhc2UgUlRDR0VUOgorCWNhc2UgUlRDX1JEX1RJTUU6CiAJCW1lbXNldCgmcnRjX3RtLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSk7CiAJCWdldF9ydGNfdGltZSgmcnRjX3RtKTsKIAotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZydGNfdG0sIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKSkKKwkJaWYgKGNtZCA9PSBSVENHRVQpIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnJ0Y190bSwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfSBlbHNlIGlmIChwdXRfcnRjX3RpbWVfZ2VuZXJpYyhhcmdwLCAmcnRjX3RtKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCXJldHVybiAwOwogCiAKIAljYXNlIFJUQ1NFVDoKKwljYXNlIFJUQ19TRVRfVElNRToKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfVElNRSkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmcnRjX3RtLCBhcmdwLCBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSkpCisJCWlmIChjbWQgPT0gUlRDU0VUKSB7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoJnJ0Y190bSwgYXJncCwKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQl9IGVsc2UgaWYgKGdldF9ydGNfdGltZV9nZW5lcmljKCZydGNfdG0sIGFyZ3ApKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJc2V0X3J0Y190aW1lKCZydGNfdG0pOwpAQCAtMTU2LDcgKzI1MCw3IEBACiAJLyogSXQgaXMgcG9zc2libGUgd2UgYXJlIGJlaW5nIGRyaXZlbiBieSBzb21lIG90aGVyIFJUQyBjaGlwCiAJICogYW5kIHRodXMgYW5vdGhlciBSVEMgZHJpdmVyIGlzIGhhbmRsaW5nIHRoaW5ncy4KIAkgKi8KLQlpZiAobXN0azQ4dDAyX3JlZ3MgPT0gMCkKKwlpZiAoIW1zdGs0OHQwMl9yZWdzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWVycm9yID0gbWlzY19yZWdpc3RlcigmcnRjX2Rldik7CkBAIC0xNjQsNiArMjU4LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJydGM6IHVuYWJsZSB0byBnZXQgbWlzYyBtaW5vciBmb3IgTW9zdGVrXG4iKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KKwlwcmludGsoInJ0Y19zdW5faW5pdDogUmVnaXN0ZXJlZCBNb3N0ZWsgUlRDIGRyaXZlci5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IDc1MGIxMWMuLjE4MTFjYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC0yNjAsNyArMjYwLDcgQEAKIAogY29uZmlnIFNDU0lfNzAwMEZBU1NUCiAJdHJpc3RhdGUgIjcwMDBGQVNTVCBTQ1NJIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0EgJiYgU0NTSQorCWRlcGVuZHMgb24gSVNBICYmIFNDU0kgJiYgSVNBX0RNQV9BUEkKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgV2VzdGVybiBEaWdpdGFsIDcwMDAgU0NTSSBob3N0IGFkYXB0ZXIKIAkgIGZhbWlseS4gIFNvbWUgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHNvdXJjZToKQEAgLTI5NSw3ICsyOTUsNyBAQAogCiBjb25maWcgU0NTSV9BSEExNTQyCiAJdHJpc3RhdGUgIkFkYXB0ZWMgQUhBMTU0MiBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVNBICYmIFNDU0kKKwlkZXBlbmRzIG9uIElTQSAmJiBTQ1NJICYmIElTQV9ETUFfQVBJCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBzdXBwb3J0IGZvciBhIFNDU0kgaG9zdCBhZGFwdGVyLiAgSXQgaXMgZXhwbGFpbmVkIGluIHNlY3Rpb24KIAkgIDMuNCBvZiB0aGUgU0NTSS1IT1dUTywgYXZhaWxhYmxlIGZyb20KQEAgLTUxNSw3ICs1MTUsNyBAQAogCiBjb25maWcgU0NTSV9CVVNMT0dJQwogCXRyaXN0YXRlICJCdXNMb2dpYyBTQ1NJIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAoUENJIHx8IElTQSB8fCBNQ0EpICYmIFNDU0kgJiYgKEJST0tFTiB8fCAhU1BBUkM2NCkKKwlkZXBlbmRzIG9uIChQQ0kgfHwgSVNBIHx8IE1DQSkgJiYgU0NTSSAmJiBJU0FfRE1BX0FQSQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgc3VwcG9ydCBmb3IgQnVzTG9naWMgTXVsdGlNYXN0ZXIgYW5kIEZsYXNoUG9pbnQgU0NTSSBIb3N0CiAJICBBZGFwdGVycy4gQ29uc3VsdCB0aGUgU0NTSS1IT1dUTywgYXZhaWxhYmxlIGZyb20KQEAgLTU3MSw3ICs1NzEsNyBAQAogCiBjb25maWcgU0NTSV9FQVRBCiAJdHJpc3RhdGUgIkVBVEEgSVNBL0VJU0EvUENJIChEUFQgYW5kIGdlbmVyaWMgRUFUQS9ETUEtY29tcGxpYW50IGJvYXJkcykgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChJU0EgfHwgRUlTQSB8fCBQQ0kpICYmIFNDU0kgJiYgKEJST0tFTiB8fCAhU1BBUkM2NCkKKwlkZXBlbmRzIG9uIChJU0EgfHwgRUlTQSB8fCBQQ0kpICYmIFNDU0kgJiYgSVNBX0RNQV9BUEkKIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBhbGwgRUFUQS9ETUEtY29tcGxpYW50IFNDU0kgaG9zdCBhZGFwdGVycy4gIERQVAogCSAgSVNBIGFuZCBhbGwgRUlTQSBJL08gYWRkcmVzc2VzIGFyZSBwcm9iZWQgbG9va2luZyBmb3IgdGhlICJFQVRBIgpAQCAtNjY1LDcgKzY2NSw3IEBACiAKIGNvbmZpZyBTQ1NJX0dEVEgKIAl0cmlzdGF0ZSAiSW50ZWwvSUNQIChmb3JtZXIgR0RUIFNDU0kgRGlzayBBcnJheSkgUkFJRCBDb250cm9sbGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAoSVNBIHx8IEVJU0EgfHwgUENJKSAmJiBTQ1NJICYmIChCUk9LRU4gfHwgIVNQQVJDNjQpCisJZGVwZW5kcyBvbiAoSVNBIHx8IEVJU0EgfHwgUENJKSAmJiBTQ1NJICYmIElTQV9ETUFfQVBJCiAJLS0taGVscC0tLQogCSAgRm9ybWVybHkgY2FsbGVkIEdEVCBTQ1NJIERpc2sgQXJyYXkgQ29udHJvbGxlciBTdXBwb3J0LgogCkBAIC0xNDE2LDcgKzE0MTYsNyBAQAogCiBjb25maWcgU0NTSV9VMTRfMzRGCiAJdHJpc3RhdGUgIlVsdHJhU3RvciAxNEYvMzRGIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0EgJiYgU0NTSQorCWRlcGVuZHMgb24gSVNBICYmIFNDU0kgJiYgSVNBX0RNQV9BUEkKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHN1cHBvcnQgZm9yIHRoZSBVbHRyYVN0b3IgMTRGIGFuZCAzNEYgU0NTSS0yIGhvc3QgYWRhcHRlcnMuCiAJICBUaGUgc291cmNlIGF0IDxmaWxlOmRyaXZlcnMvc2NzaS91MTQtMzRmLmM+IGNvbnRhaW5zIHNvbWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9OQ1I1M0M5eC5jIGIvZHJpdmVycy9zY3NpL05DUjUzQzl4LmMKaW5kZXggM2M4NjY1NS4uNzRiOTM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL05DUjUzQzl4LmMKKysrIGIvZHJpdmVycy9zY3NpL05DUjUzQzl4LmMKQEAgLTE4MjQsNyArMTgyNCwxMCBAQAogCQkvKiBsb29wICovCiAJCXdoaWxlIChobXVjaCkgewogCQkJaW50IGosIGZpZm9fc3R1Y2sgPSAwLCBuZXdwaGFzZTsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRpbWVvdXQ7CisJCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisjaWYgMAorCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNlbmRpZgogI2lmIDAKIAkJCWlmICggaSAlIDEwICkKIAkJCQlFU1BEQVRBKCgiXHIiKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNwLmMgYi9kcml2ZXJzL3Njc2kvZXNwLmMKaW5kZXggZDhhYjczYi4uZjY5MDA1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VzcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9lc3AuYwpAQCAtNDksNiArNDksOCBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgogCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjEwMSIKKwogI2RlZmluZSBERUJVR19FU1AKIC8qICNkZWZpbmUgREVCVUdfRVNQX0hNRSAqLwogLyogI2RlZmluZSBERUJVR19FU1BfREFUQSAqLwpAQCAtMTE0NSw3ICsxMTQ3LDcgQEAKIAlzdGF0aWMgc3RydWN0IHNidXNfZGV2IGVzcF9kZXY7CiAJaW50IGVzcHNfaW5fdXNlID0gMDsKIAotCWVzcGNoYWluID0gMDsKKwllc3BjaGFpbiA9IE5VTEw7CiAKIAlpZiAoc3VuNF9lc3BfcGh5c2FkZHIpIHsKIAkJbWVtc2V0ICgmZXNwX2RldiwgMCwgc2l6ZW9mKGVzcF9kZXYpKTsKQEAgLTI1MTEsNyArMjUxMyw3IEBACiAJCUVTUExPRygoImVzcCVkOiBXZWlyZCwgYmVpbmcgcmVzZWxlY3RlZCBidXQgZGlzY29ubmVjdGVkICIKIAkJCSJjb21tYW5kIHF1ZXVlIGlzIGVtcHR5LlxuIiwgZXNwLT5lc3BfaWQpKTsKIAllc3AtPnNuaXAgPSAwOwotCWVzcC0+Y3VycmVudF9TQyA9IDA7CisJZXNwLT5jdXJyZW50X1NDID0gTlVMTDsKIAlzcC0+U0NwLnBoYXNlID0gbm90X2lzc3VlZDsKIAlhcHBlbmRfU0MoJmVzcC0+aXNzdWVfU0MsIHNwKTsKIH0KQEAgLTQxNDYsNyArNDE0OCw3IEBACiB9CiAKIHN0YXRpYyBlc3BmdW5jX3QgaXN2Y192ZWN0b3JbXSA9IHsKLQkwLAorCU5VTEwsCiAJZXNwX2RvX3BoYXNlX2RldGVybWluZSwKIAllc3BfZG9fcmVzZXRidXMsCiAJZXNwX2ZpbmlzaF9yZXNldCwKQEAgLTQzOTgsNSArNDQwMCw4IEBACiAKICNpbmNsdWRlICJzY3NpX21vZHVsZS5jIgogCitNT0RVTEVfREVTQ1JJUFRJT04oIkVuaGFuY2VkU2NzaVByb2Nlc3NvciBTdW4gU0NTSSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BhczE2LmMgYi9kcml2ZXJzL3Njc2kvcGFzMTYuYwppbmRleCBlNzBkZWRiLi43OTc2OTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGFzMTYuYworKysgYi9kcml2ZXJzL3Njc2kvcGFzMTYuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiBzdGF0aWMgaW50IHBhczE2X2lycSA9IDA7CiAgCiAKLWludCBzY3NpX2lycV90cmFuc2xhdGVbXSA9CitzdGF0aWMgY29uc3QgaW50IHNjc2lfaXJxX3RyYW5zbGF0ZVtdID0KIAl7IDAsICAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAwLCAgMCwgIDcsICA4LCAgOSwgIDAsIDEwLCAxMSB9OwogCiAvKiBUaGUgZGVmYXVsdF9pcnFzIGFycmF5IGNvbnRhaW5zIHZhbHVlcyB1c2VkIHRvIHNldCB0aGUgaXJxIGludG8gdGhlCkBAIC0xNDUsNyArMTQ1LDcgQEAKICAqIGlycSBqdW1wZXJzIG9uIHRoZSBib2FyZCkuICBUaGUgZmlyc3QgdmFsdWUgaW4gdGhlIGFycmF5IHdpbGwgYmUKICAqIGFzc2lnbmVkIHRvIGxvZ2ljYWwgYm9hcmQgMCwgdGhlIG5leHQgdG8gYm9hcmQgMSwgZXRjLgogICovCi1pbnQgZGVmYXVsdF9pcnFzW10gX19pbml0ZGF0YSA9IAorc3RhdGljIGludCBkZWZhdWx0X2lycXNbXSBfX2luaXRkYXRhID0KIAl7ICBQQVMxNl9ERUZBVUxUX0JPQVJEXzFfSVJRLAogCSAgIFBBUzE2X0RFRkFVTFRfQk9BUkRfMl9JUlEsCiAJICAgUEFTMTZfREVGQVVMVF9CT0FSRF8zX0lSUSwKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCiAjZGVmaW5lIE5PX0JBU0VTIChzaXplb2YgKGJhc2VzKSAvIHNpemVvZiAoc3RydWN0IGJhc2UpKQogCi11bnNpZ25lZCBzaG9ydCAgcGFzMTZfb2Zmc2V0WyA4IF0gPQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0ICBwYXMxNl9vZmZzZXRbIDggXSA9CiAgICAgewogCTB4MWMwMCwgICAgLyogT1VUUFVUX0RBVEFfUkVHICovCiAJMHgxYzAxLCAgICAvKiBJTklUSUFUT1JfQ09NTUFORF9SRUcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbHV0by5jIGIvZHJpdmVycy9zY3NpL3BsdXRvLmMKaW5kZXggN2JiMGEyZS4uYzAxYjcxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BsdXRvLmMKKysrIGIvZHJpdmVycy9zY3NpL3BsdXRvLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAlTY3NpX0NtbmQgY21kOwogCWNoYXIgaW5xdWlyeVsyNTZdOwogCWZjX2NoYW5uZWwgKmZjOwotfSAqZmNzIF9faW5pdGRhdGEgPSB7IDAgfTsKK30gKmZjcyBfX2luaXRkYXRhOwogc3RhdGljIGludCBmY3Njb3VudCBfX2luaXRkYXRhID0gMDsKIHN0YXRpYyBhdG9taWNfdCBmY3NzIF9faW5pdGRhdGEgPSBBVE9NSUNfSU5JVCgwKTsKIERFQ0xBUkVfTVVURVhfTE9DS0VEKGZjX3NlbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMKaW5kZXggMGU3NWZiYi4uMzI1ODNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zdXAuYwpAQCAtODUsNyArODUsNyBAQAogdm9pZAogcWxhMngwMF9yZWxlYXNlX252cmFtX3Byb3RlY3Rpb24oc2NzaV9xbGFfaG9zdF90ICpoYSkKIHsKLQlkZXZpY2VfcmVnX3QgKnJlZzsKKwlkZXZpY2VfcmVnX3QgX19pb21lbSAqcmVnOwogCXVpbnQzMl90IHdvcmQ7CiAKIAlyZWcgPSBoYS0+aW9iYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggMWExMzVmMy4uMmJmMWVlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC01ODQsNyArNTg0LDcgQEAKIAogCW1lbWNweShzY21kLT5jbW5kLCBnZW5lcmljX3NlbnNlLCBzaXplb2YoZ2VuZXJpY19zZW5zZSkpOwogCi0Jc2NzaV9yZXN1bHQgPSBrbWFsbG9jKDI1MiwgR0ZQX0FUT01JQyB8IChzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3R0LT51bmNoZWNrZWRfaXNhX2RtYSkgPyBfX0dGUF9ETUEgOiAwKTsKKwlzY3NpX3Jlc3VsdCA9IGttYWxsb2MoMjUyLCBHRlBfQVRPTUlDIHwgKChzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3R0LT51bmNoZWNrZWRfaXNhX2RtYSkgPyBfX0dGUF9ETUEgOiAwKSk7CiAKIAogCWlmICh1bmxpa2VseSghc2NzaV9yZXN1bHQpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggMjg3ZDE5Ny4uY2NhNzcyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtODAxLDcgKzgwMSw3IEBACiAJaWYgKCFzcmVxKQogCQlnb3RvIG91dF9mcmVlX3NkZXY7CiAJcmVzdWx0ID0ga21hbGxvYygyNTYsIEdGUF9BVE9NSUMgfAotCQkJKHNob3N0LT51bmNoZWNrZWRfaXNhX2RtYSkgPyBfX0dGUF9ETUEgOiAwKTsKKwkJCSgoc2hvc3QtPnVuY2hlY2tlZF9pc2FfZG1hKSA/IF9fR0ZQX0RNQSA6IDApKTsKIAlpZiAoIXJlc3VsdCkKIAkJZ290byBvdXRfZnJlZV9zcmVxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjNDE2LmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjNDE2LmMKaW5kZXggZjI2YzNhMi4uZWJmZGRkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzQxNi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M0MTYuYwpAQCAtODA5LDcgKzgwOSw3IEBACiAJLyogcHJpbnRrKCJzeW01M2M0MTZfcmVzZXRcbiIpOyAqLwogCWJhc2UgPSBTQ3BudC0+ZGV2aWNlLT5ob3N0LT5pb19wb3J0OwogCS8qIHNlYXJjaCBzY3NpX2lkIC0gZml4bWUsIHdlIHNob3VsZG50IG5lZWQgdG8gaXRlcmF0ZSBmb3IgdGhpcyEgKi8KLQlmb3IoaSA9IDA7IGkgPCBob3N0X2luZGV4ICYmIHNjc2lfaWQgIT0gLTE7IGkrKykKKwlmb3IoaSA9IDA7IGkgPCBob3N0X2luZGV4ICYmIHNjc2lfaWQgPT0gLTE7IGkrKykKIAkJaWYoaG9zdHNbaV0uYmFzZSA9PSBiYXNlKQogCQkJc2NzaV9pZCA9IGhvc3RzW2ldLnNjc2lfaWQ7CiAJb3V0YihSRVNFVF9DSElQLCBiYXNlICsgQ09NTUFORF9SRUcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3VsdHJhc3Rvci5jIGIvZHJpdmVycy9zY3NpL3VsdHJhc3Rvci5jCmluZGV4IGEwMDA5NWMuLjk3ZjRkOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS91bHRyYXN0b3IuYworKysgYi9kcml2ZXJzL3Njc2kvdWx0cmFzdG9yLmMKQEAgLTk0NSw3ICs5NDUsNyBAQAogCSAgICAgICBjb25maWcubXNjcFttc2NwX2luZGV4XS5TQ2ludCwgU0NwbnQpOwogI2VuZGlmCiAgICAgaWYgKGNvbmZpZy5tc2NwW21zY3BfaW5kZXhdLlNDaW50ID09IDApCi0JcmV0dXJuIEZBSUxVUkU7CisJcmV0dXJuIEZBSUxFRDsKIAogICAgIGlmIChjb25maWcubXNjcFttc2NwX2luZGV4XS5TQ2ludCAhPSBTQ3BudCkgcGFuaWMoIkJhZCBhYm9ydCIpOwogICAgIGNvbmZpZy5tc2NwW21zY3BfaW5kZXhdLlNDaW50ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMgYi9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCmluZGV4IGY4NTA0YjAuLjMzZmJkYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvMjEyODUuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJCXBvcnQtPmljb3VudC5yeCsrOwogCiAJCXJ4cyA9ICpDU1JfUlhTVEFUIHwgUlhTVEFUX0RVTU1ZX1JFQUQ7Ci0JCWlmIChyeHMgJiBSWFNUQVRfQU5ZRVJSKSB7CisJCWlmICh1bmxpa2VseShyeHMgJiBSWFNUQVRfQU5ZRVJSKSkgewogCQkJaWYgKHJ4cyAmIFJYU1RBVF9QQVJJVFkpCiAJCQkJcG9ydC0+aWNvdW50LnBhcml0eSsrOwogCQkJZWxzZSBpZiAocnhzICYgUlhTVEFUX0ZSQU1FKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCmluZGV4IDIxOGI2OTMuLjBkOTM1ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTUxLDcgKzUxLDcgQEAKICAqICAgc2hhcmVfaXJxcyAtIHdoZXRoZXIgd2UgcGFzcyBTQV9TSElSUSB0byByZXF1ZXN0X2lycSgpLiAgVGhpcyBvcHRpb24KICAqICAgICAgICAgICAgICAgIGlzIHVuc2FmZSB3aGVuIHVzZWQgb24gZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cy4KICAqLwotdW5zaWduZWQgaW50IHNoYXJlX2lycXMgPSBTRVJJQUw4MjUwX1NIQVJFX0lSUVM7CitzdGF0aWMgdW5zaWduZWQgaW50IHNoYXJlX2lycXMgPSBTRVJJQUw4MjUwX1NIQVJFX0lSUVM7CiAKIC8qCiAgKiBEZWJ1Z2dpbmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX2hwMzAwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2hwMzAwLmMKaW5kZXggYjhkNTFlYi4uNDMxNWFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9ocDMwMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfaHAzMDAuYwpAQCAtOSwxNSArOSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxQLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Rpby5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAorI2luY2x1ZGUgIjgyNTAuaCIKKwogI2lmICFkZWZpbmVkKENPTkZJR19IUERDQSkgJiYgIWRlZmluZWQoQ09ORklHX0hQQVBDSSkKICN3YXJuaW5nIENPTkZJR184MjUwIGRlZmluZWQgYnV0IG5laXRoZXIgQ09ORklHX0hQRENBIG5vciBDT05GSUdfSFBBUENJIGRlZmluZWQsIGFyZSB5b3Ugc3VyZT8KICNlbmRpZgpAQCAtMTYzLDcgKzE2Myw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBocGRjYV9pbml0X29uZShzdHJ1Y3QgZGlvX2RldiAqZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGRpb19kZXZpY2VfaWQgKmVudCkKIHsKLQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzZXJpYWxfcmVxOworCXN0cnVjdCB1YXJ0X3BvcnQgcG9ydDsKIAlpbnQgbGluZTsKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCkBAIC0xNzIsMjEgKzE3MiwyMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYKLQltZW1zZXQoJnNlcmlhbF9yZXEsIDAsIHNpemVvZihzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkpOworCW1lbXNldCgmcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X3BvcnQpKTsKIAogCS8qIE1lbW9yeSBtYXBwZWQgSS9PICovCi0Jc2VyaWFsX3JlcS5pb190eXBlID0gU0VSSUFMX0lPX01FTTsKLQlzZXJpYWxfcmVxLmZsYWdzID0gVVBGX1NLSVBfVEVTVCB8IFVQRl9TSEFSRV9JUlEgfCBVUEZfQk9PVF9BVVRPQ09ORjsKLQlzZXJpYWxfcmVxLmlycSA9IGQtPmlwbDsKLQlzZXJpYWxfcmVxLmJhdWRfYmFzZSA9IEhQRENBX0JBVURfQkFTRTsKLQlzZXJpYWxfcmVxLmlvbWFwX2Jhc2UgPSAoZC0+cmVzb3VyY2Uuc3RhcnQgKyBVQVJUX09GRlNFVCk7Ci0Jc2VyaWFsX3JlcS5pb21lbV9iYXNlID0gKGNoYXIgKikoc2VyaWFsX3JlcS5pb21hcF9iYXNlICsgRElPX1ZJUkFERFJCQVNFKTsKLQlzZXJpYWxfcmVxLmlvbWVtX3JlZ19zaGlmdCA9IDE7Ci0JbGluZSA9IHJlZ2lzdGVyX3NlcmlhbCgmc2VyaWFsX3JlcSk7CisJcG9ydC5pb3R5cGUgPSBVUElPX01FTTsKKwlwb3J0LmZsYWdzID0gVVBGX1NLSVBfVEVTVCB8IFVQRl9TSEFSRV9JUlEgfCBVUEZfQk9PVF9BVVRPQ09ORjsKKwlwb3J0LmlycSA9IGQtPmlwbDsKKwlwb3J0LnVhcnRjbGsgPSBIUERDQV9CQVVEX0JBU0UgKiAxNjsKKwlwb3J0Lm1hcGJhc2UgPSAoZC0+cmVzb3VyY2Uuc3RhcnQgKyBVQVJUX09GRlNFVCk7CisJcG9ydC5tZW1iYXNlID0gKGNoYXIgKikocG9ydC5tYXBiYXNlICsgRElPX1ZJUkFERFJCQVNFKTsKKwlwb3J0LnJlZ3NoaWZ0ID0gMTsKKwlwb3J0LmRldiA9ICZkLT5kZXY7CisJbGluZSA9IHNlcmlhbDgyNTBfcmVnaXN0ZXJfcG9ydCgmcG9ydCk7CiAKIAlpZiAobGluZSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICI4MjUwX2hwMzAwOiByZWdpc3Rlcl9zZXJpYWwoKSBEQ0Egc2NvZGUgJWQiCi0JCSAgICAgICAiIGlycSAlZCBmYWlsZWRcbiIsIGQtPnNjb2RlLCBzZXJpYWxfcmVxLmlycSk7CisJCSAgICAgICAiIGlycSAlZCBmYWlsZWRcbiIsIGQtPnNjb2RlLCBwb3J0LmlycSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMjA5LDcgKzIxMCw3IEBACiAjaWZkZWYgQ09ORklHX0hQQVBDSQogCWludCBsaW5lOwogCXVuc2lnbmVkIGxvbmcgYmFzZTsKLQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzZXJpYWxfcmVxOworCXN0cnVjdCB1YXJ0X3BvcnQgdXBvcnQ7CiAJc3RydWN0IGhwMzAwX3BvcnQgKnBvcnQ7CiAJaW50IGk7CiAjZW5kaWYKQEAgLTI1MSwyNSArMjUyLDI1IEBACiAJCWlmICghcG9ydCkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCW1lbXNldCgmc2VyaWFsX3JlcSwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJpYWxfc3RydWN0KSk7CisJCW1lbXNldCgmdXBvcnQsIDAsIHNpemVvZihzdHJ1Y3QgdWFydF9wb3J0KSk7CiAKIAkJYmFzZSA9IChGUk9ET19CQVNFICsgRlJPRE9fQVBDSV9PRkZTRVQoaSkpOwogCiAJCS8qIE1lbW9yeSBtYXBwZWQgSS9PICovCi0JCXNlcmlhbF9yZXEuaW9fdHlwZSA9IFNFUklBTF9JT19NRU07Ci0JCXNlcmlhbF9yZXEuZmxhZ3MgPSBVUEZfU0tJUF9URVNUIHwgVVBGX1NIQVJFX0lSUSB8IFVQRl9CT09UX0FVVE9DT05GOworCQl1cG9ydC5pb3R5cGUgPSBVUElPX01FTTsKKwkJdXBvcnQuZmxhZ3MgPSBVUEZfU0tJUF9URVNUIHwgVVBGX1NIQVJFX0lSUSB8IFVQRl9CT09UX0FVVE9DT05GOwogCQkvKiBYWFggLSBubyBpbnRlcnJ1cHQgc3VwcG9ydCB5ZXQgKi8KLQkJc2VyaWFsX3JlcS5pcnEgPSAwOwotCQlzZXJpYWxfcmVxLmJhdWRfYmFzZSA9IEhQQVBDSV9CQVVEX0JBU0U7Ci0JCXNlcmlhbF9yZXEuaW9tYXBfYmFzZSA9IGJhc2U7Ci0JCXNlcmlhbF9yZXEuaW9tZW1fYmFzZSA9IChjaGFyICopKHNlcmlhbF9yZXEuaW9tYXBfYmFzZSArIERJT19WSVJBRERSQkFTRSk7Ci0JCXNlcmlhbF9yZXEuaW9tZW1fcmVnX3NoaWZ0ID0gMjsKKwkJdXBvcnQuaXJxID0gMDsKKwkJdXBvcnQudWFydGNsayA9IEhQQVBDSV9CQVVEX0JBU0UgKiAxNjsKKwkJdXBvcnQubWFwYmFzZSA9IGJhc2U7CisJCXVwb3J0Lm1lbWJhc2UgPSAoY2hhciAqKShiYXNlICsgRElPX1ZJUkFERFJCQVNFKTsKKwkJdXBvcnQucmVnc2hpZnQgPSAyOwogCi0JCWxpbmUgPSByZWdpc3Rlcl9zZXJpYWwoJnNlcmlhbF9yZXEpOworCQlsaW5lID0gc2VyaWFsODI1MF9yZWdpc3Rlcl9wb3J0KCZ1cG9ydCk7CiAKIAkJaWYgKGxpbmUgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIjgyNTBfaHAzMDA6IHJlZ2lzdGVyX3NlcmlhbCgpIEFQQ0kgJWQiCi0JCQkgICAgICAgIiBpcnEgJWQgZmFpbGVkXG4iLCBpLCBzZXJpYWxfcmVxLmlycSk7CisJCQkgICAgICAgIiBpcnEgJWQgZmFpbGVkXG4iLCBpLCB1cG9ydC5pcnEpOwogCQkJa2ZyZWUocG9ydCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjk5LDcgKzMwMCw3IEBACiAJCS8qIERpc2FibGUgYm9hcmQtaW50ZXJydXB0cyAqLwogCQlvdXRfOChkLT5yZXNvdXJjZS5zdGFydCArIERJT19WSVJBRERSQkFTRSArIERDQV9JQywgMCk7CiAJfQotCXVucmVnaXN0ZXJfc2VyaWFsKGxpbmUpOworCXNlcmlhbDgyNTBfdW5yZWdpc3Rlcl9wb3J0KGxpbmUpOwogfQogI2VuZGlmCiAKQEAgLTMwOSw3ICszMTAsNyBAQAogCXN0cnVjdCBocDMwMF9wb3J0ICpwb3J0LCAqdG9fZnJlZTsKIAogCWZvciAocG9ydCA9IGhwMzAwX3BvcnRzOyBwb3J0OyApIHsKLQkJdW5yZWdpc3Rlcl9zZXJpYWwocG9ydC0+bGluZSk7CisJCXNlcmlhbDgyNTBfdW5yZWdpc3Rlcl9wb3J0KHBvcnQtPmxpbmUpOwogCQl0b19mcmVlID0gcG9ydDsKIAkJcG9ydCA9IHBvcnQtPm5leHQ7CiAJCWtmcmVlKHRvX2ZyZWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKaW5kZXggZjhkOTBkMC4uZGU1NGJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCkBAIC0xMDA5LDYgKzEwMDksOCBAQAogICogIG4gICAgPSBudW1iZXIgb2Ygc2VyaWFsIHBvcnRzCiAgKiAgYmF1ZCA9IGJhdWQgcmF0ZQogICoKKyAqIFRoaXMgdGFibGUgaXMgc29ydGVkIGJ5IChpbiBvcmRlcik6IGJhdWQsIGJ0LCBibiwgbi4KKyAqCiAgKiBQbGVhc2Ugbm90ZTogaW4gdGhlb3J5IGlmIG4gPSAxLCBfYnQgaW5maXggc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZS4KICAqIGllLCBwYm5fYjBfMV8xMTUyMDAgaXMgdGhlIHNhbWUgYXMgcGJuX2IwX2J0XzFfMTE1MjAwCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYwppbmRleCA0ODRmNmZiLi5mMmE1ZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJICogb3V0IG9mIHRoZSBtYWluIGV4ZWN1dGlvbiBwYXRoCiAJCSAqLwogCQlyc3IgPSBVQVJUX0dFVF9SU1IocG9ydCkgfCBVQVJUX0RVTU1ZX1JTUl9SWDsKLQkJaWYgKHJzciAmIFVBUlQwMXhfUlNSX0FOWSkgeworCQlpZiAodW5saWtlbHkocnNyICYgVUFSVDAxeF9SU1JfQU5ZKSkgewogCQkJaWYgKHJzciAmIFVBUlQwMXhfUlNSX0JFKSB7CiAJCQkJcnNyICY9IH4oVUFSVDAxeF9SU1JfRkUgfCBVQVJUMDF4X1JTUl9QRSk7CiAJCQkJcG9ydC0+aWNvdW50LmJyaysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IGZmNjU4YTguLmQ1Y2JlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQkgKiBvdXQgb2YgdGhlIG1haW4gZXhlY3V0aW9uIHBhdGgKIAkJICovCiAJCXJzciA9IHJlYWR3KHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxeF9SU1IpIHwgVUFSVF9EVU1NWV9SU1JfUlg7Ci0JCWlmIChyc3IgJiBVQVJUMDF4X1JTUl9BTlkpIHsKKwkJaWYgKHVubGlrZWx5KHJzciAmIFVBUlQwMXhfUlNSX0FOWSkpIHsKIAkJCWlmIChyc3IgJiBVQVJUMDF4X1JTUl9CRSkgewogCQkJCXJzciAmPSB+KFVBUlQwMXhfUlNSX0ZFIHwgVUFSVDAxeF9SU1JfUEUpOwogCQkJCXVhcC0+cG9ydC5pY291bnQuYnJrKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jIGIvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYwppbmRleCAxNjU5MmZhLi42MjQyZjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMKQEAgLTExNiw1NCArMTE2LDQzIEBACiAJCSAqIE5vdGUgdGhhdCB0aGUgZXJyb3IgaGFuZGxpbmcgY29kZSBpcwogCQkgKiBvdXQgb2YgdGhlIG1haW4gZXhlY3V0aW9uIHBhdGgKIAkJICovCi0JCWlmIChjaCAmIFVBUlRfQU5ZX0VSUikKLQkJCWdvdG8gaGFuZGxlX2Vycm9yOworCQlpZiAodW5saWtlbHkoY2ggJiBVQVJUX0FOWV9FUlIpKSB7CisJCQlpZiAoY2ggJiBVQVJURFJfUEFSRVJSKQorCQkJCXBvcnQtPmljb3VudC5wYXJpdHkrKzsKKwkJCWVsc2UgaWYgKGNoICYgVUFSVERSX0ZSTUVSUikKKwkJCQlwb3J0LT5pY291bnQuZnJhbWUrKzsKKwkJCWlmIChjaCAmIFVBUlREUl9PVkVSUikKKwkJCQlwb3J0LT5pY291bnQub3ZlcnJ1bisrOworCisJCQljaCAmPSBwb3J0LT5yZWFkX3N0YXR1c19tYXNrOworCisJCQlpZiAoY2ggJiBVQVJURFJfUEFSRVJSKQorCQkJCWZsZyA9IFRUWV9QQVJJVFk7CisJCQllbHNlIGlmIChjaCAmIFVBUlREUl9GUk1FUlIpCisJCQkJZmxnID0gVFRZX0ZSQU1FOworCisjaWZkZWYgU1VQUE9SVF9TWVNSUQorCQkJcG9ydC0+c3lzcnEgPSAwOworI2VuZGlmCisJCX0KIAogCQlpZiAodWFydF9oYW5kbGVfc3lzcnFfY2hhcihwb3J0LCBjaCwgcmVncykpCiAJCQlnb3RvIGlnbm9yZV9jaGFyOwogCi0JZXJyb3JfcmV0dXJuOgotCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGcpOwotCWlnbm9yZV9jaGFyOgotCQlzdGF0dXMgPSBjbHBzX3JlYWRsKFNZU0ZMRyhwb3J0KSk7Ci0JfQotIG91dDoKLQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCXJldHVybiBJUlFfSEFORExFRDsKLQotIGhhbmRsZV9lcnJvcjoKLQlpZiAoY2ggJiBVQVJURFJfUEFSRVJSKQotCQlwb3J0LT5pY291bnQucGFyaXR5Kys7Ci0JZWxzZSBpZiAoY2ggJiBVQVJURFJfRlJNRVJSKQotCQlwb3J0LT5pY291bnQuZnJhbWUrKzsKLQlpZiAoY2ggJiBVQVJURFJfT1ZFUlIpCi0JCXBvcnQtPmljb3VudC5vdmVycnVuKys7Ci0KLQlpZiAoY2ggJiBwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2spIHsKLQkJaWYgKCsraWdub3JlZCA+IDEwMCkKLQkJCWdvdG8gb3V0OwotCQlnb3RvIGlnbm9yZV9jaGFyOwotCX0KLQljaCAmPSBwb3J0LT5yZWFkX3N0YXR1c19tYXNrOwotCi0JaWYgKGNoICYgVUFSVERSX1BBUkVSUikKLQkJZmxnID0gVFRZX1BBUklUWTsKLQllbHNlIGlmIChjaCAmIFVBUlREUl9GUk1FUlIpCi0JCWZsZyA9IFRUWV9GUkFNRTsKLQotCWlmIChjaCAmIFVBUlREUl9PVkVSUikgewogCQkvKgogCQkgKiBDSEVDSzogZG9lcyBvdmVycnVuIGFmZmVjdCB0aGUgY3VycmVudCBjaGFyYWN0ZXI/CiAJCSAqIEFTU1VNUFRJT046IGl0IGRvZXMgbm90LgogCQkgKi8KLQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgZmxnKTsKLQkJY2ggPSAwOwotCQlmbGcgPSBUVFlfT1ZFUlJVTjsKKwkJaWYgKChjaCAmIHBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayAmIH5SWFNUQVRfT1ZFUlJVTikgPT0gMCkKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgY2gsIGZsZyk7CisJCWlmICgoY2ggJiB+cG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICYgUlhTVEFUX09WRVJSVU4pID09IDApCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKTsKKworCWlnbm9yZV9jaGFyOgorCQlzdGF0dXMgPSBjbHBzX3JlYWRsKFNZU0ZMRyhwb3J0KSk7CiAJfQotI2lmZGVmIFNVUFBPUlRfU1lTUlEKLQlwb3J0LT5zeXNycSA9IDA7Ci0jZW5kaWYKLQlnb3RvIGVycm9yX3JldHVybjsKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGNscHM3MTF4dWFydF9pbnRfdHgoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lteC5jIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKaW5kZXggYzY4MmM2My4uMDFhODcyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW14LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKQEAgLTMyMSwxOCArMzIxLDM5IEBACiAjZGVmaW5lIFRYVEwgMiAvKiByZXNldCBkZWZhdWx0ICovCiAjZGVmaW5lIFJYVEwgMSAvKiByZXNldCBkZWZhdWx0ICovCiAKK3N0YXRpYyBpbnQgaW14X3NldHVwX3VmY3Ioc3RydWN0IGlteF9wb3J0ICpzcG9ydCwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwl1bnNpZ25lZCBpbnQgdWZjcl9yZmRpdjsKKworCS8qIHNldCByZWNlaXZlciAvIHRyYW5zbWl0dGVyIHRyaWdnZXIgbGV2ZWwuCisJICogUkZESVYgaXMgc2V0IHN1Y2ggd2F5IHRvIHNhdGlzZnkgcmVxdWVzdGVkIHVhcnRjbGsgdmFsdWUKKwkgKi8KKwl2YWwgPSBUWFRMPDwxMCB8IFJYVEw7CisJdWZjcl9yZmRpdiA9IChpbXhfZ2V0X3BlcmNsazEoKSArIHNwb3J0LT5wb3J0LnVhcnRjbGsgLyAyKSAvIHNwb3J0LT5wb3J0LnVhcnRjbGs7CisKKwlpZighdWZjcl9yZmRpdikKKwkJdWZjcl9yZmRpdiA9IDE7CisKKwlpZih1ZmNyX3JmZGl2ID49IDcpCisJCXVmY3JfcmZkaXYgPSA2OworCWVsc2UKKwkJdWZjcl9yZmRpdiA9IDYgLSB1ZmNyX3JmZGl2OworCisJdmFsIHw9IFVGQ1JfUkZESVYgJiAodWZjcl9yZmRpdiA8PCA3KTsKKworCVVGQ1IoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSA9IHZhbDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGlteF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IChzdHJ1Y3QgaW14X3BvcnQgKilwb3J0OwogCWludCByZXR2YWw7Ci0JdW5zaWduZWQgaW50IHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogc2V0IHJlY2VpdmVyIC8gdHJhbnNtaXR0ZXIgdHJpZ2dlciBsZXZlbC4gV2UgYXNzdW1lCi0JICogdGhhdCBSRkRJViBoYXMgYmVlbiBzZXQgYnkgdGhlIGFyY2ggc2V0dXAgb3IgYnkgdGhlIGJvb3Rsb2FkZXIuCi0JICovCi0JdmFsID0gKFVGQ1IoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSAmIFVGQ1JfUkZESVYpICB8IFRYVEw8PDEwIHwgUlhUTDsKLQlVRkNSKCh1MzIpc3BvcnQtPnBvcnQubWVtYmFzZSkgPSB2YWw7CisJaW14X3NldHVwX3VmY3Ioc3BvcnQsIDApOwogCiAJLyogZGlzYWJsZSB0aGUgRFJFTiBiaXQgKERhdGEgUmVhZHkgaW50ZXJydXB0IGVuYWJsZSkgYmVmb3JlCiAJICogcmVxdWVzdGluZyBJUlFzCkBAIC03MzcsOSArNzU4LDEyIEBACiBpbXhfY29uc29sZV9nZXRfb3B0aW9ucyhzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0LCBpbnQgKmJhdWQsCiAJCQkgICBpbnQgKnBhcml0eSwgaW50ICpiaXRzKQogeworCiAJaWYgKCBVQ1IxKCh1MzIpc3BvcnQtPnBvcnQubWVtYmFzZSkgfCBVQ1IxX1VBUlRFTiApIHsKIAkJLyogb2ssIHRoZSBwb3J0IHdhcyBlbmFibGVkICovCiAJCXVuc2lnbmVkIGludCB1Y3IyLCB1YmlyLHVibXIsIHVhcnRjbGs7CisJCXVuc2lnbmVkIGludCBiYXVkX3JhdzsKKwkJdW5zaWduZWQgaW50IHVjZnJfcmZkaXY7CiAKIAkJdWNyMiA9IFVDUjIoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKTsKIApAQCAtNzU4LDkgKzc4MiwzNSBAQAogCiAJCXViaXIgPSBVQklSKCh1MzIpc3BvcnQtPnBvcnQubWVtYmFzZSkgJiAweGZmZmY7CiAJCXVibXIgPSBVQk1SKCh1MzIpc3BvcnQtPnBvcnQubWVtYmFzZSkgJiAweGZmZmY7Ci0JCXVhcnRjbGsgPSBzcG9ydC0+cG9ydC51YXJ0Y2xrOwogCi0JCSpiYXVkID0gKCh1YXJ0Y2xrLzE2KSAqICh1YmlyICsgMSkpIC8gKHVibXIgKyAxKTsKKworCQl1Y2ZyX3JmZGl2ID0gKFVGQ1IoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSAmIFVGQ1JfUkZESVYpID4+IDc7CisJCWlmICh1Y2ZyX3JmZGl2ID09IDYpCisJCQl1Y2ZyX3JmZGl2ID0gNzsKKwkJZWxzZQorCQkJdWNmcl9yZmRpdiA9IDYgLSB1Y2ZyX3JmZGl2OworCisJCXVhcnRjbGsgPSBpbXhfZ2V0X3BlcmNsazEoKTsKKwkJdWFydGNsayAvPSB1Y2ZyX3JmZGl2OworCisJCXsJLyoKKwkJCSAqIFRoZSBuZXh0IGNvZGUgcHJvdmlkZXMgZXhhY3QgY29tcHV0YXRpb24gb2YKKwkJCSAqICAgYmF1ZF9yYXcgPSByb3VuZCgoKHVhcnRjbGsvMTYpICogKHViaXIgKyAxKSkgLyAodWJtciArIDEpKQorCQkJICogd2l0aG91dCBuZWVkIG9mIGZsb2F0IHN1cHBvcnQgb3IgbG9uZyBsb25nIGRpdmlzaW9uLAorCQkJICogd2hpY2ggd291bGQgYmUgcmVxdWlyZWQgdG8gcHJldmVudCAzMmJpdCBhcml0aG1ldGljIG92ZXJmbG93CisJCQkgKi8KKwkJCXVuc2lnbmVkIGludCBtdWwgPSB1YmlyICsgMTsKKwkJCXVuc2lnbmVkIGludCBkaXYgPSAxNiAqICh1Ym1yICsgMSk7CisJCQl1bnNpZ25lZCBpbnQgcmVtID0gdWFydGNsayAlIGRpdjsKKworCQkJYmF1ZF9yYXcgPSAodWFydGNsayAvIGRpdikgKiBtdWw7CisJCQliYXVkX3JhdyArPSAocmVtICogbXVsICsgZGl2IC8gMikgLyBkaXY7CisJCQkqYmF1ZCA9IChiYXVkX3JhdyArIDUwKSAvIDEwMCAqIDEwMDsKKwkJfQorCisJCWlmKCpiYXVkICE9IGJhdWRfcmF3KQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiBDb25zb2xlIElNWCByb3VuZGVkIGJhdWQgcmF0ZSBmcm9tICVkIHRvICVkXG4iLAorCQkJCWJhdWRfcmF3LCAqYmF1ZCk7CiAJfQogfQogCkBAIC03ODcsNiArODM3LDggQEAKIAllbHNlCiAJCWlteF9jb25zb2xlX2dldF9vcHRpb25zKHNwb3J0LCAmYmF1ZCwgJnBhcml0eSwgJmJpdHMpOwogCisJaW14X3NldHVwX3VmY3Ioc3BvcnQsIDApOworCiAJcmV0dXJuIHVhcnRfc2V0X29wdGlvbnMoJnNwb3J0LT5wb3J0LCBjbywgYmF1ZCwgcGFyaXR5LCBiaXRzLCBmbG93KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKaW5kZXggZDA1NGYxMi4uYmE0ZTEzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCkBAIC04MzgsNyArODM4LDcgQEAKIAlwb3J0LT5pcF90eF9wcm9kID0gcmVhZGwoJnBvcnQtPmlwX3NlcmlhbF9yZWdzLT5zdGNpcikgJiBQUk9EX0NPTlNfTUFTSzsKIAl3cml0ZWwocG9ydC0+aXBfdHhfcHJvZCwgJnBvcnQtPmlwX3NlcmlhbF9yZWdzLT5zdHBpcik7CiAJcG9ydC0+aXBfcnhfY29ucyA9IHJlYWRsKCZwb3J0LT5pcF9zZXJpYWxfcmVncy0+c3JwaXIpICYgUFJPRF9DT05TX01BU0s7Ci0Jd3JpdGVsKHBvcnQtPmlwX3J4X2NvbnMsICZwb3J0LT5pcF9zZXJpYWxfcmVncy0+c3JjaXIpOworCXdyaXRlbChwb3J0LT5pcF9yeF9jb25zIHwgSU9DNF9TUkNJUl9BUk0sICZwb3J0LT5pcF9zZXJpYWxfcmVncy0+c3JjaXIpOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGlzIDE2NTUwICovCiAJdWFydCA9IHBvcnQtPmlwX3VhcnRfcmVnczsKQEAgLTEyNzIsOCArMTI3Miw5IEBACiAJICogYW5kIHNldCB0aGUgcnggdGhyZXNob2xkIHRvIHRoYXQgYW1vdW50LiAgVGhlcmUgYXJlIDQgY2hhcnMKIAkgKiBwZXIgcmluZyBlbnRyeSwgc28gd2UnbGwgZGl2aWRlIHRoZSBudW1iZXIgb2YgY2hhcnMgdGhhdCB3aWxsCiAJICogYXJyaXZlIGluIHRpbWVvdXQgYnkgNC4KKwkgKiBTbyAuLi4uIHRpbWVvdXQgKiBiYXVkIC8gMTAgLyBIWiAvIDQsIHdpdGggSFogPSAxMDAuCiAJICovCi0JdGhyZXNob2xkID0gdGltZW91dCAqIHBvcnQtPmlwX2JhdWQgLyAxMCAvIEhaIC8gNDsKKwl0aHJlc2hvbGQgPSB0aW1lb3V0ICogcG9ydC0+aXBfYmF1ZCAvIDQwMDA7CiAJaWYgKHRocmVzaG9sZCA9PSAwKQogCQl0aHJlc2hvbGQgPSAxOwkvKiBvdGhlcndpc2Ugd2UnbGwgaW50ciBhbGwgdGhlIHRpbWUhICovCiAKQEAgLTEyODUsOCArMTI4NiwxMCBAQAogCiAJd3JpdGVsKHBvcnQtPmlwX3NzY3IsICZwb3J0LT5pcF9zZXJpYWxfcmVncy0+c3Njcik7CiAKLQkvKiBOb3cgc2V0IHRoZSByeCB0aW1lb3V0IHRvIHRoZSBnaXZlbiB2YWx1ZSAqLwotCXRpbWVvdXQgPSB0aW1lb3V0ICogSU9DNF9TUlRSX0haIC8gSFo7CisJLyogTm93IHNldCB0aGUgcnggdGltZW91dCB0byB0aGUgZ2l2ZW4gdmFsdWUKKwkgKiBhZ2FpbiB0aW1lb3V0ICogSU9DNF9TUlRSX0haIC8gSFoKKwkgKi8KKwl0aW1lb3V0ID0gdGltZW91dCAqIElPQzRfU1JUUl9IWiAvIDEwMDsKIAlpZiAodGltZW91dCA+IElPQzRfU1JUUl9DTlQpCiAJCXRpbWVvdXQgPSBJT0M0X1NSVFJfQ05UOwogCkBAIC0xMzgwLDcgKzEzODMsNyBAQAogCWlmIChwb3J0LT5pcF90eF9sb3dhdCA9PSAwKQogCQlwb3J0LT5pcF90eF9sb3dhdCA9IDE7CiAKLQlzZXRfcnhfdGltZW91dChwb3J0LCBwb3J0LT5pcF9yeF90aW1lb3V0KTsKKwlzZXRfcnhfdGltZW91dChwb3J0LCAyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTY4NSw4ICsxNjg4LDggQEAKIHsKIAlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCk7CiAJaW50IGJhdWQsIGJpdHM7Ci0JdW5zaWduZWQgY2ZsYWcsIGN2YWw7Ci0JaW50IG5ld19wYXJpdHkgPSAwLCBuZXdfcGFyaXR5X2VuYWJsZSA9IDAsIG5ld19zdG9wID0gMSwgbmV3X2RhdGEgPSA4OworCXVuc2lnbmVkIGNmbGFnOworCWludCBuZXdfcGFyaXR5ID0gMCwgbmV3X3Bhcml0eV9lbmFibGUgPSAwLCBuZXdfc3RvcCA9IDAsIG5ld19kYXRhID0gODsKIAlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gdGhlX3BvcnQtPmluZm87CiAKIAljZmxhZyA9IG5ld190ZXJtaW9zLT5jX2NmbGFnOwpAQCAtMTY5NCw0OCArMTY5NywzNSBAQAogCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewogCWNhc2UgQ1M1OgogCQluZXdfZGF0YSA9IDU7Ci0JCWN2YWwgPSAweDAwOwogCQliaXRzID0gNzsKIAkJYnJlYWs7CiAJY2FzZSBDUzY6CiAJCW5ld19kYXRhID0gNjsKLQkJY3ZhbCA9IDB4MDE7CiAJCWJpdHMgPSA4OwogCQlicmVhazsKIAljYXNlIENTNzoKIAkJbmV3X2RhdGEgPSA3OwotCQljdmFsID0gMHgwMjsKIAkJYml0cyA9IDk7CiAJCWJyZWFrOwogCWNhc2UgQ1M4OgogCQluZXdfZGF0YSA9IDg7Ci0JCWN2YWwgPSAweDAzOwogCQliaXRzID0gMTA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIGN1eiB3ZSBhbHdheXMgbmVlZCBhIGRlZmF1bHQgLi4uICovCiAJCW5ld19kYXRhID0gNTsKLQkJY3ZhbCA9IDB4MDA7CiAJCWJpdHMgPSA3OwogCQlicmVhazsKIAl9CiAJaWYgKGNmbGFnICYgQ1NUT1BCKSB7Ci0JCWN2YWwgfD0gMHgwNDsKIAkJYml0cysrOwogCQluZXdfc3RvcCA9IDE7CiAJfQogCWlmIChjZmxhZyAmIFBBUkVOQikgewotCQljdmFsIHw9IFVBUlRfTENSX1BBUklUWTsKIAkJYml0cysrOwogCQluZXdfcGFyaXR5X2VuYWJsZSA9IDE7Ci0JfQotCWlmIChjZmxhZyAmIFBBUk9ERCkgewotCQljdmFsIHw9IFVBUlRfTENSX0VQQVI7Ci0JCW5ld19wYXJpdHkgPSAxOwotCX0KLQlpZiAoY2ZsYWcgJiBJR05QQVIpIHsKLQkJY3ZhbCAmPSB+VUFSVF9MQ1JfUEFSSVRZOwotCQluZXdfcGFyaXR5X2VuYWJsZSA9IDA7CisJCWlmIChjZmxhZyAmIFBBUk9ERCkKKwkJCW5ld19wYXJpdHkgPSAxOwogCX0KIAliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHRoZV9wb3J0LCBuZXdfdGVybWlvcywgb2xkX3Rlcm1pb3MsCiAJCQkJTUlOX0JBVURfU1VQUE9SVEVELCBNQVhfQkFVRF9TVVBQT1JURUQpOwpAQCAtMTc2NSwxMCArMTc1NSwxNSBAQAogCQl0aGVfcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICY9IH5OX0RBVEFfUkVBRFk7CiAJfQogCi0JaWYgKGNmbGFnICYgQ1JUU0NUUykKKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CiAJCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NUU19GTE9XOwotCWVsc2UKKwkJcG9ydC0+aXBfc3NjciB8PSBJT0M0X1NTQ1JfSEZDX0VOOworCX0KKwllbHNlIHsKIAkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0NUU19GTE9XOworCQlwb3J0LT5pcF9zc2NyICY9IH5JT0M0X1NTQ1JfSEZDX0VOOworCX0KKwl3cml0ZWwocG9ydC0+aXBfc3NjciwgJnBvcnQtPmlwX3NlcmlhbF9yZWdzLT5zc2NyKTsKIAogCS8qIFNldCB0aGUgY29uZmlndXJhdGlvbiBhbmQgcHJvcGVyIG5vdGlmaWNhdGlvbiBjYWxsICovCiAJRFBSSU5UX0NPTkZJRygoIiVzIDogcG9ydCAweCVwIGNmbGFnIDAlbyAiCkBAIC0xODI1LDEyICsxODIwLDYgQEAKIAkvKiBzZXQgdGhlIHNwZWVkIG9mIHRoZSBzZXJpYWwgcG9ydCAqLwogCWlvYzRfY2hhbmdlX3NwZWVkKHRoZV9wb3J0LCBpbmZvLT50dHktPnRlcm1pb3MsIChzdHJ1Y3QgdGVybWlvcyAqKTApOwogCi0JLyogZW5hYmxlIGhhcmR3YXJlIGZsb3cgY29udHJvbCAtIGFmdGVyIGlvYzRfY2hhbmdlX3NwZWVkIGJlY2F1c2UKLQkgKiBBU1lOQ19DVFNfRkxPVyBpcyBzZXQgdGhlcmUgKi8KLQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DVFNfRkxPVykgewotCQlwb3J0LT5pcF9zc2NyIHw9IElPQzRfU1NDUl9IRkNfRU47Ci0JCXdyaXRlbChwb3J0LT5pcF9zc2NyLCAmcG9ydC0+aXBfc2VyaWFsX3JlZ3MtPnNzY3IpOwotCX0KIAlpbmZvLT5mbGFncyB8PSBVSUZfSU5JVElBTElaRUQ7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODQ3LDcgKzE4MzYsNiBAQAogCX0KIH0KIAotCiAvKioKICAqIGhhbmRsZV9pbnRyIC0gc2VydmljZSBhbnkgaW50ZXJydXB0cyBmb3IgdGhlIGdpdmVuIHBvcnQgLSAybmQgbGV2ZWwKICAqCQkJY2FsbGVkIHZpYSBzZF9pbnRyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtLmggYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtLmgKaW5kZXggZTA3MTc2MS4uNzc3ODI5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbS5oCisrKyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc20uaApAQCAtMzkzLDcgKzM5Myw2IEBACiBpbnQganNtX3VhcnRfcG9ydF9pbml0KHN0cnVjdCBqc21fYm9hcmQgKik7CiBpbnQganNtX3JlbW92ZV91YXJ0X3BvcnQoc3RydWN0IGpzbV9ib2FyZCAqKTsKIHZvaWQganNtX2lucHV0KHN0cnVjdCBqc21fY2hhbm5lbCAqY2gpOwotdm9pZCBqc21fY2FycmllcihzdHJ1Y3QganNtX2NoYW5uZWwgKmNoKTsKIHZvaWQganNtX2NoZWNrX3F1ZXVlX2Zsb3dfY29udHJvbChzdHJ1Y3QganNtX2NoYW5uZWwgKmNoKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9uZW8uYwppbmRleCA5Yjc5YzFmLi4zYTExYTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMKQEAgLTY4OCw3ICs2ODgsNyBAQAogLyoKICAqIE5vIGxvY2tzIGFyZSBhc3N1bWVkIHRvIGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXZvaWQgbmVvX2NsZWFyX2JyZWFrKHN0cnVjdCBqc21fY2hhbm5lbCAqY2gsIGludCBmb3JjZSkKK3N0YXRpYyB2b2lkIG5lb19jbGVhcl9icmVhayhzdHJ1Y3QganNtX2NoYW5uZWwgKmNoLCBpbnQgZm9yY2UpCiB7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYwppbmRleCAyNGZlNzZjLi45OGRlMjI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMKQEAgLTMxLDYgKzMxLDggQEAKIAogI2luY2x1ZGUgImpzbS5oIgogCitzdGF0aWMgdm9pZCBqc21fY2FycmllcihzdHJ1Y3QganNtX2NoYW5uZWwgKmNoKTsKKwogc3RhdGljIGlubGluZSBpbnQganNtX2dldF9tc3RhdChzdHJ1Y3QganNtX2NoYW5uZWwgKmNoKQogewogCXVuc2lnbmVkIGNoYXIgbXN0YXQ7CkBAIC03NTUsNyArNzU3LDcgQEAKIAlqc21fcHJpbnRrKElPQ1RMLCBJTkZPLCAmY2gtPmNoX2JkLT5wY2lfZGV2LCAiZmluaXNoXG4iKTsKIH0KIAotdm9pZCBqc21fY2FycmllcihzdHJ1Y3QganNtX2NoYW5uZWwgKmNoKQorc3RhdGljIHZvaWQganNtX2NhcnJpZXIoc3RydWN0IGpzbV9jaGFubmVsICpjaCkKIHsKIAlzdHJ1Y3QganNtX2JvYXJkICpiZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBzYy5jIGIvZHJpdmVycy9zZXJpYWwvbXBzYy5jCmluZGV4IGQwZGZjM2MuLmE4MzE0YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wc2MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKQEAgLTMyOSw4ICszMjksOCBAQAogCW1wc2Nfc2RtYV9jbWQocGksIFNETUFfU0RDTV9BUiB8IFNETUFfU0RDTV9BVCk7CiAKIAkvKiBDbGVhciB0aGUgU0RNQSBjdXJyZW50IGFuZCBmaXJzdCBUWCBhbmQgUlggcG9pbnRlcnMgKi8KLQltcHNjX3NkbWFfc2V0X3R4X3JpbmcocGksIDApOwotCW1wc2Nfc2RtYV9zZXRfcnhfcmluZyhwaSwgMCk7CisJbXBzY19zZG1hX3NldF90eF9yaW5nKHBpLCBOVUxMKTsKKwltcHNjX3NkbWFfc2V0X3J4X3JpbmcocGksIE5VTEwpOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJbXBzY19zZG1hX2ludHJfbWFzayhwaSwgMHhmKTsKQEAgLTE1NDAsOCArMTU0MCw4IEBACiAJCQlNUFNDX1NETUFfSU5UUl9SRUdfQkxPQ0tfU0laRSk7CiAJfQogCi0JbXBzY19zaGFyZWRfcmVncy5tcHNjX3JvdXRpbmdfYmFzZSA9IDA7Ci0JbXBzY19zaGFyZWRfcmVncy5zZG1hX2ludHJfYmFzZSA9IDA7CisJbXBzY19zaGFyZWRfcmVncy5tcHNjX3JvdXRpbmdfYmFzZSA9IE5VTEw7CisJbXBzY19zaGFyZWRfcmVncy5zZG1hX2ludHJfYmFzZSA9IE5VTEw7CiAKIAltcHNjX3NoYXJlZF9yZWdzLm1wc2Nfcm91dGluZ19iYXNlX3AgPSAwOwogCW1wc2Nfc2hhcmVkX3JlZ3Muc2RtYV9pbnRyX2Jhc2VfcCA9IDA7CkBAIC0xNjc4LDkgKzE2NzgsOSBAQAogCQlyZWxlYXNlX21lbV9yZWdpb24ocGktPmJyZ19iYXNlX3AsIE1QU0NfQlJHX1JFR19CTE9DS19TSVpFKTsKIAl9CiAKLQlwaS0+bXBzY19iYXNlID0gMDsKLQlwaS0+c2RtYV9iYXNlID0gMDsKLQlwaS0+YnJnX2Jhc2UgPSAwOworCXBpLT5tcHNjX2Jhc2UgPSBOVUxMOworCXBpLT5zZG1hX2Jhc2UgPSBOVUxMOworCXBpLT5icmdfYmFzZSA9IE5VTEw7CiAKIAlwaS0+bXBzY19iYXNlX3AgPSAwOwogCXBpLT5zZG1hX2Jhc2VfcCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcHNjLmggYi9kcml2ZXJzL3NlcmlhbC9tcHNjLmgKaW5kZXggMWY3Mjk0Yi4uNjc4ZGJjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBzYy5oCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wc2MuaApAQCAtODMsOCArODMsOCBAQAogCXBoeXNfYWRkcl90IG1wc2Nfcm91dGluZ19iYXNlX3A7CiAJcGh5c19hZGRyX3Qgc2RtYV9pbnRyX2Jhc2VfcDsKIAotCXZvaWQgKm1wc2Nfcm91dGluZ19iYXNlOwotCXZvaWQgKnNkbWFfaW50cl9iYXNlOworCXZvaWQgX19pb21lbSAqbXBzY19yb3V0aW5nX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpzZG1hX2ludHJfYmFzZTsKIAogCXUzMiBNUFNDX01SUl9tOwogCXUzMiBNUFNDX1JDUlJfbTsKQEAgLTEyMCw5ICsxMjAsOSBAQAogCXBoeXNfYWRkcl90IGJyZ19iYXNlX3A7CiAKIAkvKiBWaXJ0dWFsIGFkZHJlc3NlcyBvZiB2YXJpb3VzIGJsb2NrcyBvZiByZWdpc3RlcnMgKGZyb20gcGxhdGZvcm0pICovCi0Jdm9pZCAqbXBzY19iYXNlOwotCXZvaWQgKnNkbWFfYmFzZTsKLQl2b2lkICpicmdfYmFzZTsKKwl2b2lkIF9faW9tZW0gKm1wc2NfYmFzZTsKKwl2b2lkIF9faW9tZW0gKnNkbWFfYmFzZTsKKwl2b2lkIF9faW9tZW0gKmJyZ19iYXNlOwogCiAJLyogRGVzY3JpcHRvciByaW5nIGFuZCBidWZmZXIgYWxsb2NhdGlvbnMgKi8KIAl2b2lkICpkbWFfcmVnaW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jIGIvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCmluZGV4IGJkNjc4MmEuLjQzNTc1MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKQEAgLTM2NCw3ICszNjQsNyBAQAogCQlmbGFnID0gVFRZX05PUk1BTDsKIAkJcG9ydC0+aWNvdW50LnJ4Kys7CiAKLQkJaWYgKHVlcnN0YXQgJiBTM0MyNDEwX1VFUlNUQVRfQU5ZKSB7CisJCWlmICh1bmxpa2VseSh1ZXJzdGF0ICYgUzNDMjQxMF9VRVJTVEFUX0FOWSkpIHsKIAkJCWRiZygicnhlcnI6IHBvcnQgY2g9MHglMDJ4LCByeHM9MHglMDh4XG4iLAogCQkJICAgIGNoLCB1ZXJzdGF0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwppbmRleCAwODYwNjUyLi4xNTcyMThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwpAQCAtMjE0LDU2ICsyMTQsMzkgQEAKIAkJICogbm90ZSB0aGF0IHRoZSBlcnJvciBoYW5kbGluZyBjb2RlIGlzCiAJCSAqIG91dCBvZiB0aGUgbWFpbiBleGVjdXRpb24gcGF0aAogCQkgKi8KLQkJaWYgKHN0YXR1cyAmIFVUU1IxX1RPX1NNKFVUU1IxX1BSRSB8IFVUU1IxX0ZSRSB8IFVUU1IxX1JPUikpCi0JCQlnb3RvIGhhbmRsZV9lcnJvcjsKKwkJaWYgKHN0YXR1cyAmIFVUU1IxX1RPX1NNKFVUU1IxX1BSRSB8IFVUU1IxX0ZSRSB8IFVUU1IxX1JPUikpIHsKKwkJCWlmIChzdGF0dXMgJiBVVFNSMV9UT19TTShVVFNSMV9QUkUpKQorCQkJCXNwb3J0LT5wb3J0Lmljb3VudC5wYXJpdHkrKzsKKwkJCWVsc2UgaWYgKHN0YXR1cyAmIFVUU1IxX1RPX1NNKFVUU1IxX0ZSRSkpCisJCQkJc3BvcnQtPnBvcnQuaWNvdW50LmZyYW1lKys7CisJCQlpZiAoc3RhdHVzICYgVVRTUjFfVE9fU00oVVRTUjFfUk9SKSkKKwkJCQlzcG9ydC0+cG9ydC5pY291bnQub3ZlcnJ1bisrOworCisJCQlzdGF0dXMgJj0gc3BvcnQtPnBvcnQucmVhZF9zdGF0dXNfbWFzazsKKworCQkJaWYgKHN0YXR1cyAmIFVUU1IxX1RPX1NNKFVUU1IxX1BSRSkpCisJCQkJZmxnID0gVFRZX1BBUklUWTsKKwkJCWVsc2UgaWYgKHN0YXR1cyAmIFVUU1IxX1RPX1NNKFVUU1IxX0ZSRSkpCisJCQkJZmxnID0gVFRZX0ZSQU1FOworCisjaWZkZWYgU1VQUE9SVF9TWVNSUQorCQkJc3BvcnQtPnBvcnQuc3lzcnEgPSAwOworI2VuZGlmCisJCX0KIAogCQlpZiAodWFydF9oYW5kbGVfc3lzcnFfY2hhcigmc3BvcnQtPnBvcnQsIGNoLCByZWdzKSkKIAkJCWdvdG8gaWdub3JlX2NoYXI7CiAKLQllcnJvcl9yZXR1cm46Ci0JCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgY2gsIGZsZyk7CisJCWlmICgoc3RhdHVzICYgcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICYgflVUU1IxX1RPX1NNKFVUU1IxX1JPUikpID09IDApCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGcpOworCQlpZiAoc3RhdHVzICYgfnBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayAmIFVUU1IxX1RPX1NNKFVUU1IxX1JPUikpCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKTsKKwogCWlnbm9yZV9jaGFyOgogCQlzdGF0dXMgPSBVVFNSMV9UT19TTShVQVJUX0dFVF9VVFNSMShzcG9ydCkpIHwKIAkJCSBVVFNSMF9UT19TTShVQVJUX0dFVF9VVFNSMChzcG9ydCkpOwogCX0KLSBvdXQ6CiAJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQlyZXR1cm47Ci0KLSBoYW5kbGVfZXJyb3I6Ci0JaWYgKHN0YXR1cyAmIFVUU1IxX1RPX1NNKFVUU1IxX1BSRSkpCi0JCXNwb3J0LT5wb3J0Lmljb3VudC5wYXJpdHkrKzsKLQllbHNlIGlmIChzdGF0dXMgJiBVVFNSMV9UT19TTShVVFNSMV9GUkUpKQotCQlzcG9ydC0+cG9ydC5pY291bnQuZnJhbWUrKzsKLQlpZiAoc3RhdHVzICYgVVRTUjFfVE9fU00oVVRTUjFfUk9SKSkKLQkJc3BvcnQtPnBvcnQuaWNvdW50Lm92ZXJydW4rKzsKLQotCWlmIChzdGF0dXMgJiBzcG9ydC0+cG9ydC5pZ25vcmVfc3RhdHVzX21hc2spIHsKLQkJaWYgKCsraWdub3JlZCA+IDEwMCkKLQkJCWdvdG8gb3V0OwotCQlnb3RvIGlnbm9yZV9jaGFyOwotCX0KLQotCXN0YXR1cyAmPSBzcG9ydC0+cG9ydC5yZWFkX3N0YXR1c19tYXNrOwotCi0JaWYgKHN0YXR1cyAmIFVUU1IxX1RPX1NNKFVUU1IxX1BSRSkpCi0JCWZsZyA9IFRUWV9QQVJJVFk7Ci0JZWxzZSBpZiAoc3RhdHVzICYgVVRTUjFfVE9fU00oVVRTUjFfRlJFKSkKLQkJZmxnID0gVFRZX0ZSQU1FOwotCi0JaWYgKHN0YXR1cyAmIFVUU1IxX1RPX1NNKFVUU1IxX1JPUikpIHsKLQkJLyoKLQkJICogb3ZlcnJ1biBkb2VzICpub3QqIGFmZmVjdCB0aGUgY2hhcmFjdGVyCi0JCSAqIHdlIHJlYWQgZnJvbSB0aGUgRklGTwotCQkgKi8KLQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgZmxnKTsKLQkJY2ggPSAwOwotCQlmbGcgPSBUVFlfT1ZFUlJVTjsKLQl9Ci0jaWZkZWYgU1VQUE9SVF9TWVNSUQotCXNwb3J0LT5wb3J0LnN5c3JxID0gMDsKLSNlbmRpZgotCWdvdG8gZXJyb3JfcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBzYTExMDBfdHhfY2hhcnMoc3RydWN0IHNhMTEwMF9wb3J0ICpzcG9ydCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKaW5kZXggOTAzNGY5YS4uNmVlYjQ4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKQEAgLTEwNyw2ICsxMDcsMTMgQEAKIAlpbnQJCQlsaW5lWzRdOwogfTsKIAorc3RydWN0IHNlcmlhbF9jZmdfbWVtIHsKKwl0dXBsZV90IHR1cGxlOworCWNpc3BhcnNlX3QgcGFyc2U7CisJdV9jaGFyIGJ1ZlsyNTZdOworfTsKKworCiBzdGF0aWMgdm9pZCBzZXJpYWxfY29uZmlnKGRldl9saW5rX3QgKiBsaW5rKTsKIHN0YXRpYyBpbnQgc2VyaWFsX2V2ZW50KGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSwKIAkJCWV2ZW50X2NhbGxiYWNrX2FyZ3NfdCAqIGFyZ3MpOwpAQCAtMzU3LDE0ICszNjQsMjQgQEAKIAlzdGF0aWMgaW50IHNpemVfdGFibGVbMl0gPSB7IDgsIDE2IH07CiAJY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlzdHJ1Y3Qgc2VyaWFsX2luZm8gKmluZm8gPSBsaW5rLT5wcml2OwotCXR1cGxlX3QgdHVwbGU7Ci0JdV9jaGFyIGJ1ZlsyNTZdOwotCWNpc3BhcnNlX3QgcGFyc2U7Ci0JY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKKwlzdHJ1Y3Qgc2VyaWFsX2NmZ19tZW0gKmNmZ19tZW07CisJdHVwbGVfdCAqdHVwbGU7CisJdV9jaGFyICpidWY7CisJY2lzcGFyc2VfdCAqcGFyc2U7CisJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2Y7CiAJY29uZmlnX2luZm9fdCBjb25maWc7CiAJaW50IGksIGosIHRyeTsKIAlpbnQgczsKIAorCWNmZ19tZW0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaWFsX2NmZ19tZW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNmZ19tZW0pCisJCXJldHVybiAtMTsKKworCXR1cGxlID0gJmNmZ19tZW0tPnR1cGxlOworCXBhcnNlID0gJmNmZ19tZW0tPnBhcnNlOworCWNmID0gJnBhcnNlLT5jZnRhYmxlX2VudHJ5OworCWJ1ZiA9IGNmZ19tZW0tPmJ1ZjsKKwogCS8qIElmIHRoZSBjYXJkIGlzIGFscmVhZHkgY29uZmlndXJlZCwgbG9vayB1cCB0aGUgcG9ydCBhbmQgaXJxICovCiAJaSA9IHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmZpZyk7CiAJaWYgKChpID09IENTX1NVQ0NFU1MpICYmIChjb25maWcuQXR0cmlidXRlcyAmIENPTkZfVkFMSURfQ0xJRU5UKSkgewpAQCAtMzc3LDIxICszOTQsMjMgQEAKIAkJCXBvcnQgPSBjb25maWcuQmFzZVBvcnQxICsgMHgyODsKIAkJCWluZm8tPnNsYXZlID0gMTsKIAkJfQotCQlpZiAoaW5mby0+c2xhdmUpCisJCWlmIChpbmZvLT5zbGF2ZSkgeworCQkJa2ZyZWUoY2ZnX21lbSk7CiAJCQlyZXR1cm4gc2V0dXBfc2VyaWFsKGhhbmRsZSwgaW5mbywgcG9ydCwgY29uZmlnLkFzc2lnbmVkSVJRKTsKKwkJfQogCX0KIAlsaW5rLT5jb25mLlZjYyA9IGNvbmZpZy5WY2M7CiAKIAkvKiBGaXJzdCBwYXNzOiBsb29rIGZvciBhIGNvbmZpZyBlbnRyeSB0aGF0IGxvb2tzIG5vcm1hbC4gKi8KLQl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOworCXR1cGxlLT5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKKwl0dXBsZS0+VHVwbGVPZmZzZXQgPSAwOworCXR1cGxlLT5UdXBsZURhdGFNYXggPSAyNTU7CisJdHVwbGUtPkF0dHJpYnV0ZXMgPSAwOworCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKIAkvKiBUd28gdHJpZXM6IHdpdGhvdXQgSU8gYWxpYXNlcywgdGhlbiB3aXRoIGFsaWFzZXMgKi8KIAlmb3IgKHMgPSAwOyBzIDwgMjsgcysrKSB7CiAJCWZvciAodHJ5ID0gMDsgdHJ5IDwgMjsgdHJ5KyspIHsKLQkJCWkgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwkJCWkgPSBmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiAJCQl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJCQkJaWYgKGkgIT0gQ1NfU1VDQ0VTUykKIAkJCQkJZ290byBuZXh0X2VudHJ5OwpAQCAtNDA5LDE0ICs0MjgsMTQgQEAKIAkJCQkJCWdvdG8gZm91bmRfcG9ydDsKIAkJCQl9CiBuZXh0X2VudHJ5OgotCQkJCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCQkJCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIAkJCX0KIAkJfQogCX0KIAkvKiBTZWNvbmQgcGFzczogdHJ5IHRvIGZpbmQgYW4gZW50cnkgdGhhdCBpc24ndCBwaWNreSBhYm91dAogCSAgIGl0cyBiYXNlIGFkZHJlc3MsIHRoZW4gdHJ5IHRvIGdyYWIgYW55IHN0YW5kYXJkIHNlcmlhbCBwb3J0CiAJICAgYWRkcmVzcywgYW5kIGZpbmFsbHkgdHJ5IHRvIGdldCBhbnkgZnJlZSBwb3J0LiAqLwotCWkgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKIAkJaWYgKChpID09IENTX1NVQ0NFU1MpICYmIChjZi0+aW8ubndpbiA+IDApICYmCiAJCSAgICAoKGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSA8PSAzKSkgewpAQCAtNDI5LDcgKzQ0OCw3IEBACiAJCQkJCWdvdG8gZm91bmRfcG9ydDsKIAkJCX0KIAkJfQotCQlpID0gbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwkJaSA9IG5leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogCX0KIAogICAgICAgZm91bmRfcG9ydDoKQEAgLTQzNyw2ICs0NTYsNyBAQAogCQlwcmludGsoS0VSTl9OT1RJQ0UKIAkJICAgICAgICJzZXJpYWxfY3M6IG5vIHVzYWJsZSBwb3J0IHJhbmdlIGZvdW5kLCBnaXZpbmcgdXBcbiIpOwogCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJTywgaSk7CisJCWtmcmVlKGNmZ19tZW0pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC00NTAsOSArNDcwLDEwIEBACiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKKwkJa2ZyZWUoY2ZnX21lbSk7CiAJCXJldHVybiAtMTsKIAl9Ci0KKwlrZnJlZShjZmdfbWVtKTsKIAlyZXR1cm4gc2V0dXBfc2VyaWFsKGhhbmRsZSwgaW5mbywgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwogfQogCkBAIC00NjAsMjkgKzQ4MSwzOSBAQAogewogCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJc3RydWN0IHNlcmlhbF9pbmZvICppbmZvID0gbGluay0+cHJpdjsKLQl0dXBsZV90IHR1cGxlOwotCXVfY2hhciBidWZbMjU2XTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7CisJc3RydWN0IHNlcmlhbF9jZmdfbWVtICpjZmdfbWVtOworCXR1cGxlX3QgKnR1cGxlOworCXVfY2hhciAqYnVmOworCWNpc3BhcnNlX3QgKnBhcnNlOworCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmOwogCWNvbmZpZ19pbmZvX3QgY29uZmlnOwotCWludCBpLCBiYXNlMiA9IDA7CisJaW50IGksIHJjLCBiYXNlMiA9IDA7CisKKwljZmdfbWVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlhbF9jZmdfbWVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZmdfbWVtKQorCQlyZXR1cm4gLTE7CisJdHVwbGUgPSAmY2ZnX21lbS0+dHVwbGU7CisJcGFyc2UgPSAmY2ZnX21lbS0+cGFyc2U7CisJY2YgPSAmcGFyc2UtPmNmdGFibGVfZW50cnk7CisJYnVmID0gY2ZnX21lbS0+YnVmOwogCiAJaSA9IHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJmNvbmZpZyk7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCQljc19lcnJvcihoYW5kbGUsIEdldENvbmZpZ3VyYXRpb25JbmZvLCBpKTsKLQkJcmV0dXJuIC0xOworCQlyYyA9IC0xOworCQlnb3RvIGZyZWVfY2ZnX21lbTsKIAl9CiAJbGluay0+Y29uZi5WY2MgPSBjb25maWcuVmNjOwogCi0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKKwl0dXBsZS0+VHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7CisJdHVwbGUtPlR1cGxlT2Zmc2V0ID0gMDsKKwl0dXBsZS0+VHVwbGVEYXRhTWF4ID0gMjU1OworCXR1cGxlLT5BdHRyaWJ1dGVzID0gMDsKKwl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CiAKIAkvKiBGaXJzdCwgbG9vayBmb3IgYSBnZW5lcmljIGZ1bGwtc2l6ZWQgd2luZG93ICovCiAJbGluay0+aW8uTnVtUG9ydHMxID0gaW5mby0+bXVsdGkgKiA4OwotCWkgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKIAkJLyogVGhlIHF1YWQgcG9ydCBjYXJkcyBoYXZlIGJhZCBDSVMncywgc28ganVzdCBsb29rIGZvciBhCiAJCSAgIHdpbmRvdyBsYXJnZXIgdGhhbiA4IHBvcnRzIGFuZCBhc3N1bWUgaXQgd2lsbCBiZSByaWdodCAqLwpAQCAtNDk3LDE0ICs1MjgsMTQgQEAKIAkJCWlmIChpID09IENTX1NVQ0NFU1MpCiAJCQkJYnJlYWs7CiAJCX0KLQkJaSA9IG5leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIAl9CiAKIAkvKiBJZiB0aGF0IGRpZG4ndCB3b3JrLCBsb29rIGZvciB0d28gd2luZG93cyAqLwogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKIAkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gODsKIAkJaW5mby0+bXVsdGkgPSAyOwotCQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJCWkgPSBmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiAJCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKIAkJCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY2YtPmlvLm53aW4gPT0gMikpIHsKIAkJCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwpAQCAtNTE3LDEzICs1NDgsMTQgQEAKIAkJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQogCQkJCQlicmVhazsKIAkJCX0KLQkJCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCQkJaSA9IG5leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogCQl9CiAJfQogCiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RJTywgaSk7Ci0JCXJldHVybiAtMTsKKwkJcmMgPSAtMTsKKwkJZ290byBmcmVlX2NmZ19tZW07CiAJfQogCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOwpAQCAtNTQxLDcgKzU3Myw4IEBACiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewogCQljc19lcnJvcihsaW5rLT5oYW5kbGUsIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKLQkJcmV0dXJuIC0xOworCQlyYyA9IC0xOworCQlnb3RvIGZyZWVfY2ZnX21lbTsKIAl9CiAKIAkvKiBUaGUgT3hmb3JkIFNlbWljb25kdWN0b3IgT1hDRjk1MCBjYXJkcyBhcmUgaW4gZmFjdCBzaW5nbGUtcG9ydDoKQEAgLTU1NCwxNyArNTg3LDIzIEBACiAJCQlzZXR1cF9zZXJpYWwoaGFuZGxlLCBpbmZvLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAJCQlvdXRiKDEyLCBiYXNlMiArIDEpOwogCQl9Ci0JCXJldHVybiAwOworCQlyYyA9IDA7CisJCWdvdG8gZnJlZV9jZmdfbWVtOwogCX0KIAogCXNldHVwX3NlcmlhbChoYW5kbGUsIGluZm8sIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIAkvKiBUaGUgTm9raWEgY2FyZHMgYXJlIG5vdCByZWFsbHkgbXVsdGlwb3J0IGNhcmRzICovCi0JaWYgKGluZm8tPm1hbmZpZCA9PSBNQU5GSURfTk9LSUEpCi0JCXJldHVybiAwOworCWlmIChpbmZvLT5tYW5maWQgPT0gTUFORklEX05PS0lBKSB7CisJCXJjID0gMDsKKwkJZ290byBmcmVlX2NmZ19tZW07CisJfQogCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5tdWx0aSAtIDE7IGkrKykKLQkJc2V0dXBfc2VyaWFsKGhhbmRsZSwgaW5mbywgYmFzZTIgKyAoOCAqIGkpLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwotCi0JcmV0dXJuIDA7CisJCXNldHVwX3NlcmlhbChoYW5kbGUsIGluZm8sIGJhc2UyICsgKDggKiBpKSwKKwkJCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEpOworCXJjID0gMDsKK2ZyZWVfY2ZnX21lbToKKwlrZnJlZShjZmdfbWVtKTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNTc5LDM5ICs2MTgsNDkgQEAKIHsKIAljbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogCXN0cnVjdCBzZXJpYWxfaW5mbyAqaW5mbyA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQl1X3Nob3J0IGJ1ZlsxMjhdOwotCWNpc3BhcnNlX3QgcGFyc2U7Ci0JY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKKwlzdHJ1Y3Qgc2VyaWFsX2NmZ19tZW0gKmNmZ19tZW07CisJdHVwbGVfdCAqdHVwbGU7CisJdV9jaGFyICpidWY7CisJY2lzcGFyc2VfdCAqcGFyc2U7CisJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2Y7CiAJaW50IGksIGxhc3RfcmV0LCBsYXN0X2ZuOwogCiAJREVCVUcoMCwgInNlcmlhbF9jb25maWcoMHglcClcbiIsIGxpbmspOwogCi0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwljZmdfbWVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlhbF9jZmdfbWVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZmdfbWVtKQorCQlnb3RvIGZhaWxlZDsKKworCXR1cGxlID0gJmNmZ19tZW0tPnR1cGxlOworCXBhcnNlID0gJmNmZ19tZW0tPnBhcnNlOworCWNmID0gJnBhcnNlLT5jZnRhYmxlX2VudHJ5OworCWJ1ZiA9IGNmZ19tZW0tPmJ1ZjsKKworCXR1cGxlLT5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKKwl0dXBsZS0+VHVwbGVPZmZzZXQgPSAwOworCXR1cGxlLT5UdXBsZURhdGFNYXggPSAyNTU7CisJdHVwbGUtPkF0dHJpYnV0ZXMgPSAwOwogCS8qIEdldCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGluZm9ybWF0aW9uICovCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLQlsYXN0X3JldCA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOworCWxhc3RfcmV0ID0gZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogCWlmIChsYXN0X3JldCAhPSBDU19TVUNDRVNTKSB7CiAJCWxhc3RfZm4gPSBQYXJzZVR1cGxlOwogCQlnb3RvIGNzX2ZhaWxlZDsKIAl9Ci0JbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7Ci0JbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOworCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLT5jb25maWcuYmFzZTsKKwlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS0+Y29uZmlnLnJtYXNrWzBdOwogCiAJLyogQ29uZmlndXJlIGNhcmQgKi8KIAlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOwogCiAJLyogSXMgdGhpcyBhIGNvbXBsaWFudCBtdWx0aWZ1bmN0aW9uIGNhcmQ/ICovCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0xPTkdMSU5LX01GQzsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTiB8IFRVUExFX1JFVFVSTl9MSU5LOwotCWluZm8tPm11bHRpID0gKGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpID09IENTX1NVQ0NFU1MpOworCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOworCXR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTiB8IFRVUExFX1JFVFVSTl9MSU5LOworCWluZm8tPm11bHRpID0gKGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKSA9PSBDU19TVUNDRVNTKTsKIAogCS8qIElzIHRoaXMgYSBtdWx0aXBvcnQgY2FyZD8gKi8KLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwotCWlmIChmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSA9PSBDU19TVUNDRVNTKSB7CisJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7CisJaWYgKGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKSA9PSBDU19TVUNDRVNTKSB7CiAJCWluZm8tPm1hbmZpZCA9IGxlMTZfdG9fY3B1KGJ1ZlswXSk7CiAJCWZvciAoaSA9IDA7IGkgPCBNVUxUSV9DT1VOVDsgaSsrKQogCQkJaWYgKChpbmZvLT5tYW5maWQgPT0gbXVsdGlfaWRbaV0ubWFuZmlkKSAmJgpAQCAtNjIzLDEzICs2NzIsMTMgQEAKIAogCS8qIEFub3RoZXIgY2hlY2sgZm9yIGR1YWwtc2VyaWFsIGNhcmRzOiBsb29rIGZvciBlaXRoZXIgc2VyaWFsIG9yCiAJICAgbXVsdGlmdW5jdGlvbiBjYXJkcyB0aGF0IGFzayBmb3IgYXBwcm9wcmlhdGUgSU8gcG9ydCByYW5nZXMgKi8KLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfRlVOQ0lEOworCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfRlVOQ0lEOwogCWlmICgoaW5mby0+bXVsdGkgPT0gMCkgJiYKLQkgICAgKChmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSAhPSBDU19TVUNDRVNTKSB8fAotCSAgICAgKHBhcnNlLmZ1bmNpZC5mdW5jID09IENJU1RQTF9GVU5DSURfTVVMVEkpIHx8Ci0JICAgICAocGFyc2UuZnVuY2lkLmZ1bmMgPT0gQ0lTVFBMX0ZVTkNJRF9TRVJJQUwpKSkgewotCQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQkJaWYgKGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpID09IENTX1NVQ0NFU1MpIHsKKwkgICAgKChmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSkgIT0gQ1NfU1VDQ0VTUykgfHwKKwkgICAgIChwYXJzZS0+ZnVuY2lkLmZ1bmMgPT0gQ0lTVFBMX0ZVTkNJRF9NVUxUSSkgfHwKKwkgICAgIChwYXJzZS0+ZnVuY2lkLmZ1bmMgPT0gQ0lTVFBMX0ZVTkNJRF9TRVJJQUwpKSkgeworCQl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJCWlmIChmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSkgPT0gQ1NfU1VDQ0VTUykgewogCQkJaWYgKChjZi0+aW8ubndpbiA9PSAxKSAmJiAoY2YtPmlvLndpblswXS5sZW4gJSA4ID09IDApKQogCQkJCWluZm8tPm11bHRpID0gY2YtPmlvLndpblswXS5sZW4gPj4gMzsKIAkJCWlmICgoY2YtPmlvLm53aW4gPT0gMikgJiYgKGNmLT5pby53aW5bMF0ubGVuID09IDgpICYmCkBAIC02NjQsNiArNzEzLDcgQEAKIAogCWxpbmstPmRldiA9ICZpbmZvLT5ub2RlWzBdOwogCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisJa2ZyZWUoY2ZnX21lbSk7CiAJcmV0dXJuOwogCiAgY3NfZmFpbGVkOgpAQCAtNjcxLDYgKzcyMSw3IEBACiAgZmFpbGVkOgogCXNlcmlhbF9yZW1vdmUobGluayk7CiAJbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKwlrZnJlZShjZmdfbWVtKTsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwppbmRleCA0Y2UzYTQxLi44NWNmYTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQlmbGFnID0gVFRZX05PUk1BTDsKIAkJKytwb3J0LT5pY291bnQucng7CiAKLQkJaWYgKGRhdGEgJiBSeEVycm9yKSB7CS8qIFF1aWNrIGNoZWNrLCBzaG9ydC1jaXJjdWl0ICovCisJCWlmICh1bmxpa2VseShkYXRhICYgUnhFcnJvcikpIHsJLyogUXVpY2sgY2hlY2ssIHNob3J0LWNpcmN1aXQgKi8KIAkJCWlmIChkYXRhICYgUnhCcmVhaykgewogCQkJCWRhdGEgJj0gfihSeEZyYW1pbmdFcnJvciB8IFJ4UGFyaXR5RXJyb3IpOwogCQkJCSsrcG9ydC0+aWNvdW50LmJyazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYyBiL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYwppbmRleCBmZmFhYjliLi5mZWU2NDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCkBAIC03ODcsNyArNzg3LDcgQEAKIAogc3RhdGljIHZvaWQgc25fc2FsX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCk7CiBzdGF0aWMgaW50IF9faW5pdCBzbl9zYWxfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqLCBjaGFyICopOwotZXh0ZXJuIHN0cnVjdCB1YXJ0X2RyaXZlciBzYWxfY29uc29sZV91YXJ0Oworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBzYWxfY29uc29sZV91YXJ0OwogZXh0ZXJuIHN0cnVjdCB0dHlfZHJpdmVyICp1YXJ0X2NvbnNvbGVfZGV2aWNlKHN0cnVjdCBjb25zb2xlICosIGludCAqKTsKIAogc3RhdGljIHN0cnVjdCBjb25zb2xlIHNhbF9jb25zb2xlID0gewpAQCAtODAxLDcgKzgwMSw3IEBACiAKICNkZWZpbmUgU0FMX0NPTlNPTEUJJnNhbF9jb25zb2xlCiAKLXN0cnVjdCB1YXJ0X2RyaXZlciBzYWxfY29uc29sZV91YXJ0ID0geworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBzYWxfY29uc29sZV91YXJ0ID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5kcml2ZXJfbmFtZSA9ICJzbl9jb25zb2xlIiwKIAkuZGV2X25hbWUgPSBERVZJQ0VfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5jIGIvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMKaW5kZXggOGNhYWYyZS4uMzliNzg4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMKQEAgLTY4Miw3ICs2ODIsOCBAQAogCiAvKiBJbnRlcm5hbCByb3V0aW5lLCBwb3J0LT5sb2NrIGlzIGhlbGQgYW5kIGxvY2FsIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiAgKi8KIHN0YXRpYyB2b2lkIHN1bnNhYl9jb252ZXJ0X3RvX3NhYihzdHJ1Y3QgdWFydF9zdW5zYWJfcG9ydCAqdXAsIHVuc2lnbmVkIGludCBjZmxhZywKLQkJCQkgIHVuc2lnbmVkIGludCBpZmxhZywgaW50IGJhdWQpCisJCQkJICB1bnNpZ25lZCBpbnQgaWZsYWcsIHVuc2lnbmVkIGludCBiYXVkLAorCQkJCSAgdW5zaWduZWQgaW50IHF1b3QpCiB7CiAJdW5zaWduZWQgaW50IGVicmc7CiAJdW5zaWduZWQgY2hhciBkYWZvOwpAQCAtNzY2LDYgKzc2Nyw5IEBACiAJCXVwLT5wb3J0Lmlnbm9yZV9zdGF0dXNfbWFzayB8PSAoU0FCODI1MzJfSVNSMF9SUEYgfAogCQkJCQkJU0FCODI1MzJfSVNSMF9UQ0QpOwogCisJdWFydF91cGRhdGVfdGltZW91dCgmdXAtPnBvcnQsIGNmbGFnLAorCQkJICAgICh1cC0+cG9ydC51YXJ0Y2xrIC8gKDE2ICogcXVvdCkpKTsKKwogCS8qIE5vdyBiYW5nIHRoZSBuZXcgc2V0dGluZ3MgaW50byB0aGUgY2hpcC4gICovCiAJc3Vuc2FiX2NlY193YWl0KHVwKTsKIAlzdW5zYWJfdGVjX3dhaXQodXApOwpAQCAtNzg0LDEwICs3ODgsMTEgQEAKIHsKIAlzdHJ1Y3QgdWFydF9zdW5zYWJfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfc3Vuc2FiX3BvcnQgKikgcG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBiYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgNDAwMDAwMCk7CisJdW5zaWduZWQgaW50IGJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCA0MDAwMDAwKTsKKwl1bnNpZ25lZCBpbnQgcXVvdCA9IHVhcnRfZ2V0X2Rpdmlzb3IocG9ydCwgYmF1ZCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwotCXN1bnNhYl9jb252ZXJ0X3RvX3NhYih1cCwgdGVybWlvcy0+Y19jZmxhZywgdGVybWlvcy0+Y19pZmxhZywgYmF1ZCk7CisJc3Vuc2FiX2NvbnZlcnRfdG9fc2FiKHVwLCB0ZXJtaW9zLT5jX2NmbGFnLCB0ZXJtaW9zLT5jX2lmbGFnLCBiYXVkLCBxdW90KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTg4MCw3ICs4ODUsNyBAQAogewogCXN0cnVjdCB1YXJ0X3N1bnNhYl9wb3J0ICp1cCA9ICZzdW5zYWJfcG9ydHNbY29uLT5pbmRleF07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgYmF1ZDsKKwl1bnNpZ25lZCBpbnQgYmF1ZCwgcXVvdDsKIAogCXByaW50aygiQ29uc29sZTogdHR5UyVkIChTQUI4MjUzMilcbiIsCiAJICAgICAgIChzdW5zYWJfcmVnLm1pbm9yIC0gNjQpICsgY29uLT5pbmRleCk7CkBAIC05MjYsNyArOTMxLDggQEAKIAkJCQlTQUI4MjUzMl9JTVIxX1hQUjsKIAl3cml0ZWIodXAtPmludGVycnVwdF9tYXNrMSwgJnVwLT5yZWdzLT53LmltcjEpOwogCi0Jc3Vuc2FiX2NvbnZlcnRfdG9fc2FiKHVwLCBjb24tPmNmbGFnLCAwLCBiYXVkKTsKKwlxdW90ID0gdWFydF9nZXRfZGl2aXNvcigmdXAtPnBvcnQsIGJhdWQpOworCXN1bnNhYl9jb252ZXJ0X3RvX3NhYih1cCwgY29uLT5jZmxhZywgMCwgYmF1ZCwgcXVvdCk7CiAJc3Vuc2FiX3NldF9tY3RybCgmdXAtPnBvcnQsIFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jIGIvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYwppbmRleCAyM2QxOWQzLi5kZGM5N2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKQEAgLTEyODUsNiArMTI4NSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHN1bnN1X2tiZF9tc19pbml0KHN0cnVjdCB1YXJ0X3N1bnN1X3BvcnQgKnVwLCBpbnQgY2hhbm5lbCkKIHsKKwlpbnQgcXVvdCwgYmF1ZDsKICNpZmRlZiBDT05GSUdfU0VSSU8KIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvOwogI2VuZGlmCkBAIC0xMjkzLDEwICsxMjk0LDE0IEBACiAJdXAtPnBvcnQudHlwZSA9IFBPUlRfVU5LTk9XTjsKIAl1cC0+cG9ydC51YXJ0Y2xrID0gKFNVX0JBU0VfQkFVRCAqIDE2KTsKIAotCWlmICh1cC0+c3VfdHlwZSA9PSBTVV9QT1JUX0tCRCkKKwlpZiAodXAtPnN1X3R5cGUgPT0gU1VfUE9SVF9LQkQpIHsKIAkJdXAtPmNmbGFnID0gQjEyMDAgfCBDUzggfCBDTE9DQUwgfCBDUkVBRDsKLQllbHNlCisJCWJhdWQgPSAxMjAwOworCX0gZWxzZSB7CiAJCXVwLT5jZmxhZyA9IEI0ODAwIHwgQ1M4IHwgQ0xPQ0FMIHwgQ1JFQUQ7CisJCWJhdWQgPSA0ODAwOworCX0KKwlxdW90ID0gdXAtPnBvcnQudWFydGNsayAvICgxNiAqIGJhdWQpOwogCiAJc3Vuc3VfYXV0b2NvbmZpZyh1cCk7CiAJaWYgKHVwLT5wb3J0LnR5cGUgPT0gUE9SVF9VTktOT1dOKQpAQCAtMTMzNyw2ICsxMzQyLDggQEAKIAl9CiAjZW5kaWYKIAorCXN1bnN1X2NoYW5nZV9zcGVlZCgmdXAtPnBvcnQsIHVwLT5jZmxhZywgMCwgcXVvdCk7CisKIAlzdW5zdV9zdGFydHVwKCZ1cC0+cG9ydCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9peGouYyBiL2RyaXZlcnMvdGVsZXBob255L2l4ai5jCmluZGV4IDU1Mzg3NTYuLmQ1ODYzYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGVsZXBob255L2l4ai5jCisrKyBiL2RyaXZlcnMvdGVsZXBob255L2l4ai5jCkBAIC00MSw5ICs0MSw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGNoYXIgaXhqX2NfcmNzaWRbXSA9ICIkSWQ6IGl4ai5jLHYgNC43IDIwMDEvMDgvMTMgMDY6MTk6MzMgY3JhaWdzIEV4cCAkIjsKLXN0YXRpYyBjaGFyIGl4al9jX3JldmlzaW9uW10gPSAiJFJldmlzaW9uOiA0LjcgJCI7Ci0KIC8qCiAgKiAkTG9nOiBpeGouYyx2ICQKICAqCkBAIC02MTcyLDggKzYxNjksMTQgQEAKIAkJcmV0dmFsID0gai0+c2VyaWFsOwogCQlicmVhazsKIAljYXNlIElYSkNUTF9WRVJTSU9OOgotCQlpZiAoY29weV90b191c2VyKGFyZ3AsIGl4al9jX3JldmlzaW9uLCBzdHJsZW4oaXhqX2NfcmV2aXNpb24pKSkgCi0JCQlyZXR2YWwgPSAtRUZBVUxUOworCQl7CisJCQljaGFyIGFyZ19zdHJbMTAwXTsKKwkJCXNucHJpbnRmKGFyZ19zdHIsIHNpemVvZihhcmdfc3RyKSwKKwkJCQkiXG5Ecml2ZXIgdmVyc2lvbiAlaS4laS4laSIsIElYSl9WRVJfTUFKT1IsCisJCQkJSVhKX1ZFUl9NSU5PUiwgSVhKX0JMRF9WRVIpOworCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBhcmdfc3RyLCBzdHJsZW4oYXJnX3N0cikpKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBQSE9ORV9SSU5HX0NBREVOQ0U6CiAJCWotPnJpbmdfY2FkZW5jZSA9IGFyZzsKQEAgLTcxNjgsOSArNzE3MSw2IEBACiAJaW50IGNudDsKIAlJWEogKmo7CiAJbGVuID0gMDsKLQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlcyIsIGl4al9jX3Jjc2lkKTsKLQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJcbiVzIiwgaXhqX2hfcmNzaWQpOwotCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlxuJXMiLCBpeGp1c2VyX2hfcmNzaWQpOwogCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlxuRHJpdmVyIHZlcnNpb24gJWkuJWkuJWkiLCBJWEpfVkVSX01BSk9SLCBJWEpfVkVSX01JTk9SLCBJWEpfQkxEX1ZFUik7CiAJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiXG5zaXplb2YgSVhKIHN0cnVjdCAlWmQgYnl0ZXMiLCBzaXplb2YoSVhKKSk7CiAJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiXG5zaXplb2YgREFBIHN0cnVjdCAlWmQgYnl0ZXMiLCBzaXplb2YoREFBX1JFR1MpKTsKQEAgLTc3OTAsNyArNzc5MCw3IEBACiAJaWYgKChwcm9iZSA9IGl4al9wcm9iZV9wY2koJmNudCkpIDwgMCkgewogCQlyZXR1cm4gcHJvYmU7CiAJfQotCXByaW50aygiJXNcbiIsIGl4al9jX3Jjc2lkKTsKKwlwcmludGsoS0VSTl9JTkZPICJpeGogZHJpdmVyIGluaXRpYWxpemVkLlxuIik7CiAJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSAoIml4aiIsIDAsIE5VTEwsIGl4al9yZWFkX3Byb2MsIE5VTEwpOwogCXJldHVybiBwcm9iZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVsZXBob255L2l4ai5oIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmgKaW5kZXggMTQzODE4YS4uNTFlM2Y3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmgKKysrIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmgKQEAgLTM4LDggKzM4LDYgQEAKICAqIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgY2hhciBpeGpfaF9yY3NpZFtdID0gIiRJZDogaXhqLmgsdiA0LjEgMjAwMS8wOC8wNCAxNDo0OToyNyBjcmFpZ3MgRXhwICQiOwotCiAjZGVmaW5lIElYSl9WRVJTSU9OIDMwMzEKIAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggZTEyYzViZS4uZjUwYWFmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTQzMSw3ICs0MzEsNyBAQAogICogKDIpIGVycm9yLCB3aGVyZSBpby0+c3RhdHVzIGlzIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUuICBUaGUgbnVtYmVyCiAgKiAgICAgb2YgaW8tPmJ5dGVzIHRyYW5zZmVycmVkIGJlZm9yZSB0aGUgZXJyb3IgaXMgdXN1YWxseSBsZXNzCiAgKiAgICAgdGhhbiByZXF1ZXN0ZWQsIGFuZCBjYW4gYmUgbm9uemVyby4KLSAqICgzKSBjYW5jZWxhdGlvbiwgYSB0eXBlIG9mIGVycm9yIHdpdGggc3RhdHVzIC1FQ09OTlJFU0VUIHRoYXQKKyAqICgzKSBjYW5jZWxsYXRpb24sIGEgdHlwZSBvZiBlcnJvciB3aXRoIHN0YXR1cyAtRUNPTk5SRVNFVCB0aGF0CiAgKiAgICAgaXMgaW5pdGlhdGVkIGJ5IHVzYl9zZ19jYW5jZWwoKS4KICAqCiAgKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgdGhyb3VnaCB1c2Jfc2dfaW5pdCgpIG9yCkBAIC0xMjgyLDcgKzEyODIsNyBAQAogICogYnVzIHJ3c2VtOyB1c2IgZGV2aWNlIGRyaXZlciBwcm9iZSgpIG1ldGhvZHMgY2Fubm90IHVzZSB0aGlzIHJvdXRpbmUuCiAgKgogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIGVsc2UgdGhlIHN0YXR1cyBjb2RlIHJldHVybmVkIGJ5IHRoZQotICogdW5kZXJseWluZyBjYWxsIHRoYXQgZmFpbGVkLiAgT24gc3VjY2VzZnVsIGNvbXBsZXRpb24sIGVhY2ggaW50ZXJmYWNlCisgKiB1bmRlcmx5aW5nIGNhbGwgdGhhdCBmYWlsZWQuICBPbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIGVhY2ggaW50ZXJmYWNlCiAgKiBpbiB0aGUgb3JpZ2luYWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gZGVzdHJveWVkLCBhbmQgZWFjaCBvbmUKICAqIGluIHRoZSBuZXcgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBwcm9iZWQgYnkgYWxsIHJlbGV2YW50IHVzYiBkZXZpY2UKICAqIGRyaXZlcnMgY3VycmVudGx5IGtub3duIHRvIHRoZSBrZXJuZWwuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwppbmRleCAxNjk3MjE1Li4wZmFmMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogICogZGVzY3JpYmluZyB0aGF0IHJlcXVlc3QgdG8gdGhlIFVTQiBzdWJzeXN0ZW0uICBSZXF1ZXN0IGNvbXBsZXRpb24gd2lsbAogICogYmUgaW5kaWNhdGVkIGxhdGVyLCBhc3luY2hyb25vdXNseSwgYnkgY2FsbGluZyB0aGUgY29tcGxldGlvbiBoYW5kbGVyLgogICogVGhlIHRocmVlIHR5cGVzIG9mIGNvbXBsZXRpb24gYXJlIHN1Y2Nlc3MsIGVycm9yLCBhbmQgdW5saW5rCi0gKiAoYSBzb2Z0d2FyZS1pbmR1Y2VkIGZhdWx0LCBhbHNvIGNhbGxlZCAicmVxdWVzdCBjYW5jZWxhdGlvbiIpLiAgCisgKiAoYSBzb2Z0d2FyZS1pbmR1Y2VkIGZhdWx0LCBhbHNvIGNhbGxlZCAicmVxdWVzdCBjYW5jZWxsYXRpb24iKS4gIAogICoKICAqIFVSQnMgbWF5IGJlIHN1Ym1pdHRlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KICAqCkBAIC0xNzAsNyArMTcwLDcgQEAKICAqIEFzIG9mIExpbnV4IDIuNiwgYWxsIFVTQiBlbmRwb2ludCB0cmFuc2ZlciBxdWV1ZXMgc3VwcG9ydCBkZXB0aHMgZ3JlYXRlcgogICogdGhhbiBvbmUuICBUaGlzIHdhcyBwcmV2aW91c2x5IGEgSENELXNwZWNpZmljIGJlaGF2aW9yLCBleGNlcHQgZm9yIElTTwogICogdHJhbnNmZXJzLiAgTm9uLWlzb2Nocm9ub3VzIGVuZHBvaW50IHF1ZXVlcyBhcmUgaW5hY3RpdmUgZHVyaW5nIGNsZWFudXAKLSAqIGFmdGVyIGZhdWx0cyAodHJhbnNmZXIgZXJyb3JzIG9yIGNhbmNlbGF0aW9uKS4KKyAqIGFmdGVyIGZhdWx0cyAodHJhbnNmZXIgZXJyb3JzIG9yIGNhbmNlbGxhdGlvbikuCiAgKgogICogUmVzZXJ2ZWQgQmFuZHdpZHRoIFRyYW5zZmVyczoKICAqCkBAIC0zOTUsNyArMzk1LDcgQEAKICAqCiAgKiBUaGlzIHJvdXRpbmUgY2FuY2VscyBhbiBpbi1wcm9ncmVzcyByZXF1ZXN0LiAgVVJCcyBjb21wbGV0ZSBvbmx5CiAgKiBvbmNlIHBlciBzdWJtaXNzaW9uLCBhbmQgbWF5IGJlIGNhbmNlbGVkIG9ubHkgb25jZSBwZXIgc3VibWlzc2lvbi4KLSAqIFN1Y2Nlc3NmdWwgY2FuY2VsYXRpb24gbWVhbnMgdGhlIHJlcXVlc3RzJ3MgY29tcGxldGlvbiBoYW5kbGVyIHdpbGwKKyAqIFN1Y2Nlc3NmdWwgY2FuY2VsbGF0aW9uIG1lYW5zIHRoZSByZXF1ZXN0cydzIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsCiAgKiBiZSBjYWxsZWQgd2l0aCBhIHN0YXR1cyBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgcmVxdWVzdCBoYXMgYmVlbgogICogY2FuY2VsZWQgKHJhdGhlciB0aGFuIGFueSBvdGhlciBjb2RlKSBhbmQgd2lsbCBxdWlja2x5IGJlIHJlbW92ZWQKICAqIGZyb20gaG9zdCBjb250cm9sbGVyIGRhdGEgc3RydWN0dXJlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCmluZGV4IGMyMzFiNGIuLjI1Y2Y3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwpAQCAtNjExLDExICs2MTEsMTAgQEAKIAogCQlpZiAoYWRkX2hvdHBsdWdfZW52X3ZhcihlbnZwLCBudW1fZW52cCwgJmksCiAJCQkJCWJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCi0JCQkJCSJNT0RBTElBUz11c2I6diUwNFhwJTA0WGRsJTA0WGRoJTA0WGRjJTAyWGRzYyUwMlhkcCUwMlhpYyUwMlhpc2MlMDJYaXAlMDJYIiwKKwkJCQkJIk1PREFMSUFTPXVzYjp2JTA0WHAlMDRYZCUwNFhkYyUwMlhkc2MlMDJYZHAlMDJYaWMlMDJYaXNjJTAyWGlwJTAyWCIsCiAJCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAogCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCiAJCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwKLQkJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpLAogCQkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcywKIAkJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlU3ViQ2xhc3MsCiAJCQkJCXVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZVByb3RvY29sLApAQCAtNjI2LDExICs2MjUsMTAgQEAKICAJfSBlbHNlIHsKIAkJaWYgKGFkZF9ob3RwbHVnX2Vudl92YXIoZW52cCwgbnVtX2VudnAsICZpLAogCQkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAotCQkJCQkiTU9EQUxJQVM9dXNiOnYlMDRYcCUwNFhkbCUwNFhkaCUwNFhkYyUwMlhkc2MlMDJYZHAlMDJYaWMqaXNjKmlwKiIsCisJCQkJCSJNT0RBTElBUz11c2I6diUwNFhwJTA0WGQlMDRYZGMlMDJYZHNjJTAyWGRwJTAyWGljKmlzYyppcCoiLAogCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAogCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksCi0JCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwKIAkJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MsCiAJCQkJCXVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZVN1YkNsYXNzLAogCQkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VQcm90b2NvbCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCmluZGV4IDM5OTMxNTYuLjNmNzgzY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCkBAIC01NjksNyArNTY5LDcgQEAKIAogLyogaW5jbHVkZSB0aGUgc3RhdHVzIGVuZHBvaW50IGlmIHdlIGNhbiwgZXZlbiB3aGVyZSBpdCdzIG9wdGlvbmFsLgogICogdXNlIHdNYXhQYWNrZXRTaXplIGJpZyBlbm91Z2ggdG8gZml0IENEQ19OT1RJRllfU1BFRURfQ0hBTkdFIGluIG9uZQotICogcGFja2V0LCB0byBzaW1wbGlmeSBjYW5jZWxhdGlvbjsgYW5kIGEgYmlnIHRyYW5zZmVyIGludGVydmFsLCB0bworICogcGFja2V0LCB0byBzaW1wbGlmeSBjYW5jZWxsYXRpb247IGFuZCBhIGJpZyB0cmFuc2ZlciBpbnRlcnZhbCwgdG8KICAqIHdhc3RlIGxlc3MgYmFuZHdpZHRoLgogICoKICAqIHNvbWUgZHJpdmVycyAobGlrZSBMaW51eCAyLjQgY2RjLWV0aGVyISkgIm5lZWQiIGl0IHRvIGV4aXN0IGV2ZW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggMmNmZjY3Yy4uMWU1ZTZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogICoKICAqIEFmdGVyIG9wZW5pbmcsIGNvbmZpZ3VyZSBub24tY29udHJvbCBlbmRwb2ludHMuICBUaGVuIHVzZSBub3JtYWwKICAqIHN0cmVhbSByZWFkKCkgYW5kIHdyaXRlKCkgcmVxdWVzdHM7IGFuZCBtYXliZSBpb2N0bCgpIHRvIGdldCBtb3JlCi0gKiBwcmVjaXNlIEZJRk8gc3RhdHVzIHdoZW4gcmVjb3ZlcmluZyBmcm9tIGNhbmNlbGF0aW9uLgorICogcHJlY2lzZSBGSUZPIHN0YXR1cyB3aGVuIHJlY292ZXJpbmcgZnJvbSBjYW5jZWxsYXRpb24uCiAgKi8KIAogc3RhdGljIHZvaWQgZXBpb19jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYwppbmRleCAwZGVmOWY3Li5kZjc1YWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYwpAQCAtNzA1LDcgKzcwNSw3IEBACiAJCWRvbmUoZXAsIHJlcSwgc3RhdHVzKTsKIAl9CiAKLQkvKiBEaXNhYmxlIElSUSBpZiBFUCBpcyBlbmFibGVkIChoYXMgZGVjcmlwdG9yKSAqLworCS8qIERpc2FibGUgSVJRIGlmIEVQIGlzIGVuYWJsZWQgKGhhcyBkZXNjcmlwdG9yKSAqLwogCWlmIChlcC0+ZGVzYykKIAkJcGlvX2lycV9kaXNhYmxlKGVwX2luZGV4KGVwKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKaW5kZXggZjE3NjJlZC4uNGQ1OTFjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJc3RydWN0IHVzYl9lcAkJKmRldl9ub3RpZnlfZXA7CS8qIGFkZHJlc3Mgb2Ygbm90aWZ5IGVuZHBvaW50ICovCiAJc3RydWN0IHVzYl9lcAkJKmRldl9pbl9lcDsJLyogYWRkcmVzcyBvZiBpbiBlbmRwb2ludCAqLwogCXN0cnVjdCB1c2JfZXAJCSpkZXZfb3V0X2VwOwkvKiBhZGRyZXNzIG9mIG91dCBlbmRwb2ludCAqLwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkJLyogZGVzY2lwdG9yIG9mIG5vdGlmeSBlcCAqLworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkJLyogZGVzY3JpcHRvciBvZiBub3RpZnkgZXAgKi8KIAkJCQkqZGV2X25vdGlmeV9lcF9kZXNjOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkJLyogZGVzY3JpcHRvciBvZiBpbiBlbmRwb2ludCAqLwogCQkJCSpkZXZfaW5fZXBfZGVzYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCA4NGQyYjkzLi5iYzY5YmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC0zNDYsNiArMzQ2LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGVoY2lfcG9ydF9wb3dlciAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBpbnQgaXNfb24pCit7CisJdW5zaWduZWQgcG9ydDsKKworCWlmICghSENTX1BQQyAoZWhjaS0+aGNzX3BhcmFtcykpCisJCXJldHVybjsKKworCWVoY2lfZGJnIChlaGNpLCAiLi4ucG93ZXIlcyBwb3J0cy4uLlxuIiwgaXNfb24gPyAidXAiIDogImRvd24iKTsKKwlmb3IgKHBvcnQgPSBIQ1NfTl9QT1JUUyAoZWhjaS0+aGNzX3BhcmFtcyk7IHBvcnQgPiAwOyApCisJCSh2b2lkKSBlaGNpX2h1Yl9jb250cm9sKGVoY2lfdG9faGNkKGVoY2kpLAorCQkJCWlzX29uID8gU2V0UG9ydEZlYXR1cmUgOiBDbGVhclBvcnRGZWF0dXJlLAorCQkJCVVTQl9QT1JUX0ZFQVRfUE9XRVIsCisJCQkJcG9ydC0tLCBOVUxMLCAwKTsKKwltc2xlZXAoMjApOworfQorCiAKIC8qIGNhbGxlZCBieSBraHViZCBvciByb290IGh1YiBpbml0IHRocmVhZHMgKi8KIApAQCAtMzYyLDggKzM3OCwxMCBAQAogCWRiZ19oY3NfcGFyYW1zIChlaGNpLCAicmVzZXQiKTsKIAlkYmdfaGNjX3BhcmFtcyAoZWhjaSwgInJlc2V0Iik7CiAKKwkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KKwllaGNpLT5oY3NfcGFyYW1zID0gcmVhZGwgKCZlaGNpLT5jYXBzLT5oY3NfcGFyYW1zKTsKKwogI2lmZGVmCUNPTkZJR19QQ0kKLQkvKiBFSENJIDAuOTYgYW5kIGxhdGVyIG1heSBoYXZlICJleHRlbmRlZCBjYXBhYmlsaXRpZXMiICovCiAJaWYgKGhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMgPT0gJnBjaV9idXNfdHlwZSkgewogCQlzdHJ1Y3QgcGNpX2RldgkqcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOwogCkBAIC0zODMsOSArNDAxLDMwIEBACiAJCQlicmVhazsKIAkJfQogCisJCS8qIG9wdGlvbmFsIGRlYnVnIHBvcnQsIG5vcm1hbGx5IGluIHRoZSBmaXJzdCBCQVIgKi8KKwkJdGVtcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkgKHBkZXYsIDB4MGEpOworCQlpZiAodGVtcCkgeworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHRlbXAsICZ0ZW1wKTsKKwkJCXRlbXAgPj49IDE2OworCQkJaWYgKCh0ZW1wICYgKDMgPDwgMTMpKSA9PSAoMSA8PCAxMykpIHsKKwkJCQl0ZW1wICY9IDB4MWZmZjsKKwkJCQllaGNpLT5kZWJ1ZyA9IGhjZC0+cmVncyArIHRlbXA7CisJCQkJdGVtcCA9IHJlYWRsICgmZWhjaS0+ZGVidWctPmNvbnRyb2wpOworCQkJCWVoY2lfaW5mbyAoZWhjaSwgImRlYnVnIHBvcnQgJWQlc1xuIiwKKwkJCQkJSENTX0RFQlVHX1BPUlQoZWhjaS0+aGNzX3BhcmFtcyksCisJCQkJCSh0ZW1wICYgREJHUF9FTkFCTEVEKQorCQkJCQkJPyAiIElOIFVTRSIKKwkJCQkJCTogIiIpOworCQkJCWlmICghKHRlbXAgJiBEQkdQX0VOQUJMRUQpKQorCQkJCQllaGNpLT5kZWJ1ZyA9IE5VTEw7CisJCQl9CisJCX0KKwogCQl0ZW1wID0gSENDX0VYVF9DQVBTIChyZWFkbCAoJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpKTsKIAl9IGVsc2UKIAkJdGVtcCA9IDA7CisKKwkvKiBFSENJIDAuOTYgYW5kIGxhdGVyIG1heSBoYXZlICJleHRlbmRlZCBjYXBhYmlsaXRpZXMiICovCiAJd2hpbGUgKHRlbXAgJiYgY291bnQtLSkgewogCQl1MzIJCWNhcDsKIApAQCAtNDE0LDggKzQ1Myw3IEBACiAJCWVoY2lfcmVzZXQgKGVoY2kpOwogI2VuZGlmCiAKLQkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIFBDSSByZWFkcyAqLwotCWVoY2ktPmhjc19wYXJhbXMgPSByZWFkbCAoJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOworCWVoY2lfcG9ydF9wb3dlciAoZWhjaSwgMCk7CiAKIAkvKiBhdCBsZWFzdCB0aGUgR2VuZXN5cyBHTDg4MFMgbmVlZHMgZml4dXAgaGVyZSAqLwogCXRlbXAgPSBIQ1NfTl9DQyhlaGNpLT5oY3NfcGFyYW1zKSAqIEhDU19OX1BDQyhlaGNpLT5oY3NfcGFyYW1zKTsKQEAgLTY1NywxNiArNjk1LDExIEBACiBzdGF0aWMgdm9pZCBlaGNpX3N0b3AgKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwotCXU4CQkJcmhfcG9ydHMsIHBvcnQ7CiAKIAllaGNpX2RiZyAoZWhjaSwgInN0b3BcbiIpOwogCiAJLyogVHVybiBvZmYgcG9ydCBwb3dlciBvbiBhbGwgcm9vdCBodWIgcG9ydHMuICovCi0JcmhfcG9ydHMgPSBIQ1NfTl9QT1JUUyAoZWhjaS0+aGNzX3BhcmFtcyk7Ci0JZm9yIChwb3J0ID0gMTsgcG9ydCA8PSByaF9wb3J0czsgcG9ydCsrKQotCQkodm9pZCkgZWhjaV9odWJfY29udHJvbChoY2QsCi0JCQlDbGVhclBvcnRGZWF0dXJlLCBVU0JfUE9SVF9GRUFUX1BPV0VSLAotCQkJcG9ydCwgTlVMTCwgMCk7CisJZWhjaV9wb3J0X3Bvd2VyIChlaGNpLCAwKTsKIAogCS8qIG5vIG1vcmUgaW50ZXJydXB0cyAuLi4gKi8KIAlkZWxfdGltZXJfc3luYyAoJmVoY2ktPndhdGNoZG9nKTsKQEAgLTc0OCw3ICs3ODEsNiBAQAogCXVuc2lnbmVkCQlwb3J0OwogCXN0cnVjdCB1c2JfZGV2aWNlCSpyb290ID0gaGNkLT5zZWxmLnJvb3RfaHViOwogCWludAkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JaW50CQkJcG93ZXJ1cCA9IDA7CiAKIAkvLyBtYXliZSByZXN0b3JlIChQQ0kpIEZMQURKCiAKQEAgLTc2Niw4ICs3OTgsNiBAQAogCQkJdXAgKCZoY2QtPnNlbGYucm9vdF9odWItPnNlcmlhbGl6ZSk7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoKHN0YXR1cyAmIFBPUlRfUE9XRVIpID09IDApCi0JCQlwb3dlcnVwID0gMTsKIAkJaWYgKCFyb290LT5jaGlsZHJlbiBbcG9ydF0pCiAJCQljb250aW51ZTsKIAkJZGJnX3BvcnQgKGVoY2ksIF9fRlVOQ1RJT05fXywgcG9ydCArIDEsIHN0YXR1cyk7CkBAIC03OTQsMTYgKzgyNCw5IEBACiAJCXJldHZhbCA9IGVoY2lfc3RhcnQgKGhjZCk7CiAKIAkJLyogaGVyZSB3ZSAia25vdyIgcm9vdCBwb3J0cyBzaG91bGQgYWx3YXlzIHN0YXkgcG93ZXJlZDsKLQkJICogYnV0IHNvbWUgY29udHJvbGxlcnMgbWF5IGxvc3QgYWxsIHBvd2VyLgorCQkgKiBidXQgc29tZSBjb250cm9sbGVycyBtYXkgbG9zZSBhbGwgcG93ZXIuCiAJCSAqLwotCQlpZiAocG93ZXJ1cCkgewotCQkJZWhjaV9kYmcgKGVoY2ksICIuLi5wb3dlcnVwIHBvcnRzLi4uXG4iKTsKLQkJCWZvciAocG9ydCA9IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsgcG9ydCA+IDA7ICkKLQkJCQkodm9pZCkgZWhjaV9odWJfY29udHJvbChoY2QsCi0JCQkJCVNldFBvcnRGZWF0dXJlLCBVU0JfUE9SVF9GRUFUX1BPV0VSLAotCQkJCQkJcG9ydC0tLCBOVUxMLCAwKTsKLQkJCW1zbGVlcCgyMCk7Ci0JCX0KKwkJZWhjaV9wb3J0X3Bvd2VyIChlaGNpLCAxKTsKIAl9CiAKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCmluZGV4IDIzNzM1MzcuLjAyZmVmYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKQEAgLTI4MSw2ICsyODEsOCBAQAogCXRlbXAgPSAweDAwMDg7CQkJLyogcGVyLXBvcnQgb3ZlcmN1cnJlbnQgcmVwb3J0aW5nICovCiAJaWYgKEhDU19QUEMgKGVoY2ktPmhjc19wYXJhbXMpKQogCQl0ZW1wIHw9IDB4MDAwMTsJCS8qIHBlci1wb3J0IHBvd2VyIGNvbnRyb2wgKi8KKwllbHNlCisJCXRlbXAgfD0gMHgwMDAyOwkJLyogbm8gcG93ZXIgc3dpdGNoaW5nICovCiAjaWYgMAogLy8gcmUtZW5hYmxlIHdoZW4gd2Ugc3VwcG9ydCBVU0JfUE9SVF9GRUFUX0lORElDQVRPUiBiZWxvdy4KIAlpZiAoSENTX0lORElDQVRPUiAoZWhjaS0+aGNzX3BhcmFtcykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IGU3NjNhODMuLjRkZjQ5ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC00Nyw2ICs0NywxMiBAQAogI2RlZmluZQlFSENJX01BWF9ST09UX1BPUlRTCTE1CQkvKiBzZWUgSENTX05fUE9SVFMgKi8KIAogc3RydWN0IGVoY2lfaGNkIHsJCQkvKiBvbmUgcGVyIGNvbnRyb2xsZXIgKi8KKwkvKiBnbHVlIHRvIFBDSSBhbmQgSENEIGZyYW1ld29yayAqLworCXN0cnVjdCBlaGNpX2NhcHMgX19pb21lbSAqY2FwczsKKwlzdHJ1Y3QgZWhjaV9yZWdzIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGVoY2lfZGJnX3BvcnQgX19pb21lbSAqZGVidWc7CisKKwlfX3UzMgkJCWhjc19wYXJhbXM7CS8qIGNhY2hlZCByZWdpc3RlciBjb3B5ICovCiAJc3BpbmxvY2tfdAkJbG9jazsKIAogCS8qIGFzeW5jIHNjaGVkdWxlIHN1cHBvcnQgKi8KQEAgLTg0LDExICs5MCw2IEBACiAKIAl1bnNpZ25lZAkJaXNfdGRpX3JoX3R0OjE7CS8qIFRESSByb290aHViIHdpdGggVFQgKi8KIAotCS8qIGdsdWUgdG8gUENJIGFuZCBIQ0QgZnJhbWV3b3JrICovCi0Jc3RydWN0IGVoY2lfY2FwcyBfX2lvbWVtICpjYXBzOwotCXN0cnVjdCBlaGNpX3JlZ3MgX19pb21lbSAqcmVnczsKLQlfX3UzMgkJCWhjc19wYXJhbXM7CS8qIGNhY2hlZCByZWdpc3RlciBjb3B5ICovCi0KIAkvKiBpcnEgc3RhdGlzdGljcyAqLwogI2lmZGVmIEVIQ0lfU1RBVFMKIAlzdHJ1Y3QgZWhjaV9zdGF0cwlzdGF0czsKQEAgLTE2NSw3ICsxNjYsNyBAQAogCS8qIHRoZXNlIGZpZWxkcyBhcmUgc3BlY2lmaWVkIGFzIDggYW5kIDE2IGJpdCByZWdpc3RlcnMsCiAJICogYnV0IHNvbWUgaG9zdHMgY2FuJ3QgcGVyZm9ybSA4IG9yIDE2IGJpdCBQQ0kgYWNjZXNzZXMuCiAJICovCi0JdTMyCWhjX2NhcGJhc2U7CisJdTMyCQloY19jYXBiYXNlOwogI2RlZmluZSBIQ19MRU5HVEgocCkJCSgoKHApPj4wMCkmMHgwMGZmKQkvKiBiaXRzIDc6MCAqLwogI2RlZmluZSBIQ19WRVJTSU9OKHApCQkoKChwKT4+MTYpJjB4ZmZmZikJLyogYml0cyAzMToxNiAqLwogCXUzMgkJaGNzX3BhcmFtczsgICAgIC8qIEhDU1BBUkFNUyAtIG9mZnNldCAweDQgKi8KQEAgLTI3Myw3ICsyNzQsNyBAQAogI2RlZmluZSBEQkdQX0VOQUJMRUQJKDE8PDI4KQogI2RlZmluZSBEQkdQX0RPTkUJKDE8PDE2KQogI2RlZmluZSBEQkdQX0lOVVNFCSgxPDwxMCkKLSNkZWZpbmUgREJHUF9FUlJDT0RFKHgpCSgoKHgpPj43KSYweDBmKQorI2RlZmluZSBEQkdQX0VSUkNPREUoeCkJKCgoeCk+PjcpJjB4MDcpCiAjCWRlZmluZSBEQkdQX0VSUl9CQUQJMQogIwlkZWZpbmUgREJHUF9FUlJfU0lHTkFMCTIKICNkZWZpbmUgREJHUF9FUlJPUgkoMTw8NikKQEAgLTI4MiwxMSArMjgzLDExIEBACiAjZGVmaW5lIERCR1BfTEVOKHgpCSgoKHgpPj4wKSYweDBmKQogCXUzMglwaWRzOwogI2RlZmluZSBEQkdQX1BJRF9HRVQoeCkJCSgoKHgpPj4xNikmMHhmZikKLSNkZWZpbmUgREJHUF9QSURfU0VUKGRhdGEsdG9rKQkoKChkYXRhKTw8OCl8KHRvaykpOworI2RlZmluZSBEQkdQX1BJRF9TRVQoZGF0YSx0b2spCSgoKGRhdGEpPDw4KXwodG9rKSkKIAl1MzIJZGF0YTAzOwogCXUzMglkYXRhNDc7CiAJdTMyCWFkZHJlc3M7Ci0jZGVmaW5lIERCR1BfRVBBRERSKGRldixlcCkJKCgoZGV2KTw8OCl8KGVwKSk7CisjZGVmaW5lIERCR1BfRVBBRERSKGRldixlcCkJKCgoZGV2KTw8OCl8KGVwKSkKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9oY19jcmlzdjEwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2hjX2NyaXN2MTAuYwppbmRleCAzNzZmOGEwLi5kOTg4M2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2hjX2NyaXN2MTAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2hjX2NyaXN2MTAuYwpAQCAtNDMyOSw3ICs0MzI5LDcgQEAKIAlidXMtPmJ1c19uYW1lPSJFVFJBWCAxMDBMWCI7CiAJYnVzLT5oY3ByaXYgPSBoYzsKIAotCS8qIEluaXRhbGl6ZSBSSCB0byB0aGUgZGVmYXVsdCBhZGRyZXNzLgorCS8qIEluaXRpYWxpemUgUkggdG8gdGhlIGRlZmF1bHQgYWRkcmVzcy4KIAkgICBBbmQgbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBubyBzdGF0dXMgY2hhbmdlIGluZGljYXRpb24gKi8KIAloYy0+cmgubnVtcG9ydHMgPSAyOyAgLyogVGhlIFJIIGhhcyB0d28gcG9ydHMgKi8KIAloYy0+cmguZGV2bnVtID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCmluZGV4IGQzMDllMjkuLmEzNzRiNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAKIC8qIFRoaXMgaXMgYSBQSU8tb25seSBIQ0QuICBRdWV1ZWluZyBhcHBlbmRzIFVSQnMgdG8gdGhlIGVuZHBvaW50J3MgcXVldWUsCiAgKiBhbmQgbWF5IHN0YXJ0IEkvTy4gIEVuZHBvaW50IHF1ZXVlcyBhcmUgc2Nhbm5lZCBkdXJpbmcgY29tcGxldGlvbiBpcnEKLSAqIGhhbmRsZXJzIChvbmUgcGVyIHBhY2tldDogQUNLLCBOQUssIGZhdWx0cywgZXRjKSBhbmQgdXJiIGNhbmNlbGF0aW9uLgorICogaGFuZGxlcnMgKG9uZSBwZXIgcGFja2V0OiBBQ0ssIE5BSywgZmF1bHRzLCBldGMpIGFuZCB1cmIgY2FuY2VsbGF0aW9uLgogICoKICAqIFVzaW5nIGFuIGV4dGVybmFsIERNQSBlbmdpbmUgdG8gY29weSBhIHBhY2tldCBhdCBhIHRpbWUgY291bGQgd29yaywKICAqIHRob3VnaCBzZXR1cC90ZWFyZG93biBjb3N0cyBtYXkgYmUgdG9vIGJpZyB0byBtYWtlIGl0IHdvcnRod2hpbGUuCkBAIC03MzgsNyArNzM4LDcgQEAKIAkJfQogI2VuZGlmCiAKLQkJLyogcG9ydCBzdGF0dXMgc2VlbXMgd2llcmQgdW50aWwgYWZ0ZXIgcmVzZXQsIHNvCisJCS8qIHBvcnQgc3RhdHVzIHNlZW1zIHdlaXJkIHVudGlsIGFmdGVyIHJlc2V0LCBzbwogCQkgKiBmb3JjZSB0aGUgcmVzZXQgYW5kIG1ha2Uga2h1YmQgY2xlYW4gdXAgbGF0ZXIuCiAJCSAqLwogCQlzbDgxMS0+cG9ydDEgfD0gKDEgPDwgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCmluZGV4IDU3OTE3MjMuLmEzMzBhNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC0yMyw3ICsyMyw3IEBACiAgKgogICoKICAqIFRoZSBkcml2ZXIgYnJpbmdzIHRoZSBVU0IgZnVuY3Rpb25zIG9mIHRoZSBNREM4MDAgdG8gTGludXguCi0gKiBUbyB1c2UgdGhlIENhbWVyYSB5b3UgbXVzdCBzdXBwb3J0IHRoZSBVU0IgUHJvdG9jb2xsIG9mIHRoZSBjYW1lcmEKKyAqIFRvIHVzZSB0aGUgQ2FtZXJhIHlvdSBtdXN0IHN1cHBvcnQgdGhlIFVTQiBQcm90b2NvbCBvZiB0aGUgY2FtZXJhCiAgKiB0byB0aGUgS2VybmVsIE5vZGUuCiAgKiBUaGUgRHJpdmVyIHVzZXMgYSBtaXNjIGRldmljZSBOb2RlLiBDcmVhdGUgaXQgd2l0aCA6CiAgKiBta25vZCAvZGV2L211c3RlayBjIDE4MCAzMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKaW5kZXggY2FiODlhOS4uN2QyMWE0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYworKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIAogCW10c191cmJfYWJvcnQoZGVzYyk7CiAKLQlyZXR1cm4gRkFJTFVSRTsKKwlyZXR1cm4gRkFJTEVEOwogfQogCiBzdGF0aWMgaW50IG10c19zY3NpX2hvc3RfcmVzZXQgKFNjc2lfQ21uZCAqc3JiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvYWlwdGVrLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9haXB0ZWsuYwppbmRleCAyZDc2YmU2Li45NGNlMmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9haXB0ZWsuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9haXB0ZWsuYwpAQCAtMzg2LDcgKzM4Niw3IEBACiAgKiBjb252ZW50aW9uIGFib3ZlLikgSSB0aGVyZWZvcmUgaGF2ZSB0YWtlbiBvdmVyIFJFTF9NSVNDIGFuZCBBQlNfTUlTQwogICogKGZvciByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgcmVwb3J0cywgcmVzcGVjdGl2ZWx5KSBmb3IgY29tbXVuaWNhdGluZwogICogUHJveGltaXR5LiBXaHkgdHdvIGV2ZW50cz8gSSB0aG91Z2h0IGl0IGludGVyZXN0aW5nIHRvIGtub3cgaWYgdGhlCi0gKiBQcm94aW1pdHkgZXZlbnQgb2NjdXJlZCB3aGlsZSB0aGUgdGFibGV0IHdhcyBpbiBhYnNvbHV0ZSBvciByZWxhdGl2ZQorICogUHJveGltaXR5IGV2ZW50IG9jY3VycmVkIHdoaWxlIHRoZSB0YWJsZXQgd2FzIGluIGFic29sdXRlIG9yIHJlbGF0aXZlCiAgKiBtb2RlLgogICoKICAqIE90aGVyIHRhYmxldHMgdXNlIHRoZSBub3Rpb24gb2YgYSBjZXJ0YWluIG1pbmltdW0gc3R5bHVzIHByZXNzdXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlLmMKaW5kZXggMzU1YWRkNS4uODYwZGYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYwpAQCAtNjE5LDcgKzYxOSw3IEBACiAJCQogCWlmIChhdGlfcmVtb3RlLT5vdXRidWYpCiAJCXVzYl9idWZmZXJfZnJlZShhdGlfcmVtb3RlLT51ZGV2LCBEQVRBX0JVRlNJWkUsIAotCQkJCWF0aV9yZW1vdGUtPmluYnVmLCBhdGlfcmVtb3RlLT5vdXRidWZfZG1hKTsKKwkJCQlhdGlfcmVtb3RlLT5vdXRidWYsIGF0aV9yZW1vdGUtPm91dGJ1Zl9kbWEpOwogCQogCWlmIChhdGlfcmVtb3RlLT5pcnFfdXJiKQogCQl1c2JfZnJlZV91cmIoYXRpX3JlbW90ZS0+aXJxX3VyYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9tdG91Y2h1c2IuYyBiL2RyaXZlcnMvdXNiL2lucHV0L210b3VjaHVzYi5jCmluZGV4IDZiNDVhNjYuLmFiMWEyYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L210b3VjaHVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L210b3VjaHVzYi5jCkBAIC0zMiw3ICszMiw3IEBACiAgKiAgICBDaGFuZ2VkIHJlc2V0IGZyb20gc3RhbmRhcmQgVVNCIGRldiByZXNldCB0byB2ZW5kb3IgcmVzZXQKICAqICAgIENoYW5nZWQgZGF0YSBzZW50IHRvIGhvc3QgZnJvbSBjb21wZW5zYXRlZCB0byByYXcgY29vcmRpbmF0ZXMKICAqICAgIEVsaW1pbmF0ZWQgdmVuZG9yL3Byb2R1Y3QgbW9kdWxlIHBhcmFtcwotICogICAgUGVyZm9ybWVkIG11bHRpcGxlIHN1Y2Nlc3NmdWxsIHRlc3RzIHdpdGggYW4gRVhJSS01MDEwVUMKKyAqICAgIFBlcmZvcm1lZCBtdWx0aXBsZSBzdWNjZXNzZnVsIHRlc3RzIHdpdGggYW4gRVhJSS01MDEwVUMKICAqCiAgKiAgMS41IDAyLzI3LzIwMDUgZGRzdHJlZXRAaWVlZS5vcmcKICAqICAgIEFkZGVkIG1vZHVsZSBwYXJhbWV0ZXIgdG8gc2VsZWN0IHJhdyBvciBody1jYWxpYnJhdGVkIGNvb3JkaW5hdGUgcmVwb3J0aW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC91c2JrYmQuYyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYmtiZC5jCmluZGV4IDAxNTE0YjAuLjcwMzhmYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L3VzYmtiZC5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYmtiZC5jCkBAIC0xMzMsNyArMTMzLDggQEAKIAkJCQlrYmQtPnVzYmRldi0+ZGV2cGF0aCwgaSk7CiB9CiAKLWludCB1c2Jfa2JkX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IHVzYl9rYmRfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwKKwkJCSB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQogewogCXN0cnVjdCB1c2Jfa2JkICprYmQgPSBkZXYtPnByaXZhdGU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL292NTExLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5jCmluZGV4IGQ2MDUxODIuLjAzNmM0ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL292NTExLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuYwpAQCAtNTA0MSw3ICs1MDQxLDcgQEAKIAkJeyBPVjUxMV9JMkNfQlVTLCAweDJhLCAweDA0IH0sIC8qIERpc2FibGUgZnJhbWVyYXRlIGFkanVzdCAqLwogLy8JCXsgT1Y1MTFfSTJDX0JVUywgMHgyYiwgMHhhYyB9LCAvKiBGcmFtZXJhdGU7IFNldCAyYVs3XSBmaXJzdCAqLwogCQl7IE9WNTExX0kyQ19CVVMsIDB4MmQsIDB4OTkgfSwKLQkJeyBPVjUxMV9JMkNfQlVTLCAweDMzLCAweGEwIH0sIC8qIENvbG9yIFByb2Nlc2luZyBQYXJhbWV0ZXIgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDMzLCAweGEwIH0sIC8qIENvbG9yIFByb2Nlc3NpbmcgUGFyYW1ldGVyICovCiAJCXsgT1Y1MTFfSTJDX0JVUywgMHgzNCwgMHhkMiB9LCAvKiBNYXggQS9EIHJhbmdlICovCiAJCXsgT1Y1MTFfSTJDX0JVUywgMHgzOCwgMHg4YiB9LAogCQl7IE9WNTExX0kyQ19CVVMsIDB4MzksIDB4NDAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtY3RybC5jIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1jdHJsLmMKaW5kZXggMjZhYTkxNC4uNDJlYzQ2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1jdHJsLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1jdHJsLmMKQEAgLTQxOCw2ICs0MTgsNDQgQEAKIAogCiAKK3N0YXRpYyB2b2lkIHB3Y19zZXRfaW1hZ2VfYnVmZmVyX3NpemUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJaW50IGksIGZhY3RvciA9IDAsIGZpbGxlciA9IDA7CisKKwkvKiBmb3IgUEFMRVRURV9ZVVY0MjBQICovCisJc3dpdGNoKHBkZXYtPnZwYWxldHRlKQorCXsKKwljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIwUDoKKwkJZmFjdG9yID0gNjsKKwkJZmlsbGVyID0gMTI4OworCQlicmVhazsKKwljYXNlIFZJREVPX1BBTEVUVEVfUkFXOgorCQlmYWN0b3IgPSA2OyAvKiBjYW4gYmUgdW5jb21wcmVzc2VkIFlVVjQyMFAgKi8KKwkJZmlsbGVyID0gMDsKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IHNpemVzIGluIGJ5dGVzICovCisJcGRldi0+aW1hZ2Uuc2l6ZSA9IHBkZXYtPmltYWdlLnggKiBwZGV2LT5pbWFnZS55ICogZmFjdG9yIC8gNDsKKwlwZGV2LT52aWV3LnNpemUgID0gcGRldi0+dmlldy54ICAqIHBkZXYtPnZpZXcueSAgKiBmYWN0b3IgLyA0OworCisJLyogQWxpZ24gb2Zmc2V0LCBvciB5b3UnbGwgZ2V0IHNvbWUgdmVyeSB3ZWlyZCByZXN1bHRzIGluCisJICAgWVVWNDIwIG1vZGUuLi4geCBtdXN0IGJlIG11bHRpcGxlIG9mIDQgKHRvIGdldCB0aGUgWSdzIGluCisJICAgcGxhY2UpLCBhbmQgeSBldmVuIChvciB5b3UnbGwgbWl4dXAgVSAmIFYpLiBUaGlzIGlzIGxlc3Mgb2YgYQorCSAgIHByb2JsZW0gZm9yIFlVVjQyMFAuCisJICovCisJcGRldi0+b2Zmc2V0LnggPSAoKHBkZXYtPnZpZXcueCAtIHBkZXYtPmltYWdlLngpIC8gMikgJiAweEZGRkM7CisJcGRldi0+b2Zmc2V0LnkgPSAoKHBkZXYtPnZpZXcueSAtIHBkZXYtPmltYWdlLnkpIC8gMikgJiAweEZGRkU7CisKKwkvKiBGaWxsIGJ1ZmZlcnMgd2l0aCBncmF5IG9yIGJsYWNrICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9JTUFHRVM7IGkrKykgeworCQlpZiAocGRldi0+aW1hZ2VfcHRyW2ldICE9IE5VTEwpCisJCQltZW1zZXQocGRldi0+aW1hZ2VfcHRyW2ldLCBmaWxsZXIsIHBkZXYtPnZpZXcuc2l6ZSk7CisJfQorfQorCisKKwogLyoqCiAgICBAcGRldjogZGV2aWNlIHN0cnVjdHVyZQogICAgQHdpZHRoOiB2aWV3cG9ydCB3aWR0aApAQCAtNDc1LDQ0ICs1MTMsNiBAQAogfQogCiAKLXZvaWQgcHdjX3NldF9pbWFnZV9idWZmZXJfc2l6ZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKLXsKLQlpbnQgaSwgZmFjdG9yID0gMCwgZmlsbGVyID0gMDsKLQotCS8qIGZvciBQQUxFVFRFX1lVVjQyMFAgKi8KLQlzd2l0Y2gocGRldi0+dnBhbGV0dGUpCi0JewotCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjBQOgotCQlmYWN0b3IgPSA2OwotCQlmaWxsZXIgPSAxMjg7Ci0JCWJyZWFrOwotCWNhc2UgVklERU9fUEFMRVRURV9SQVc6Ci0JCWZhY3RvciA9IDY7IC8qIGNhbiBiZSB1bmNvbXByZXNzZWQgWVVWNDIwUCAqLwotCQlmaWxsZXIgPSAwOwotCQlicmVhazsKLQl9Ci0KLQkvKiBTZXQgc2l6ZXMgaW4gYnl0ZXMgKi8KLQlwZGV2LT5pbWFnZS5zaXplID0gcGRldi0+aW1hZ2UueCAqIHBkZXYtPmltYWdlLnkgKiBmYWN0b3IgLyA0OwotCXBkZXYtPnZpZXcuc2l6ZSAgPSBwZGV2LT52aWV3LnggICogcGRldi0+dmlldy55ICAqIGZhY3RvciAvIDQ7Ci0KLQkvKiBBbGlnbiBvZmZzZXQsIG9yIHlvdSdsbCBnZXQgc29tZSB2ZXJ5IHdlaXJkIHJlc3VsdHMgaW4KLQkgICBZVVY0MjAgbW9kZS4uLiB4IG11c3QgYmUgbXVsdGlwbGUgb2YgNCAodG8gZ2V0IHRoZSBZJ3MgaW4KLQkgICBwbGFjZSksIGFuZCB5IGV2ZW4gKG9yIHlvdSdsbCBtaXh1cCBVICYgVikuIFRoaXMgaXMgbGVzcyBvZiBhCi0JICAgcHJvYmxlbSBmb3IgWVVWNDIwUC4KLQkgKi8KLQlwZGV2LT5vZmZzZXQueCA9ICgocGRldi0+dmlldy54IC0gcGRldi0+aW1hZ2UueCkgLyAyKSAmIDB4RkZGQzsKLQlwZGV2LT5vZmZzZXQueSA9ICgocGRldi0+dmlldy55IC0gcGRldi0+aW1hZ2UueSkgLyAyKSAmIDB4RkZGRTsKLQotCS8qIEZpbGwgYnVmZmVycyB3aXRoIGdyYXkgb3IgYmxhY2sgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lNQUdFUzsgaSsrKSB7Ci0JCWlmIChwZGV2LT5pbWFnZV9wdHJbaV0gIT0gTlVMTCkKLQkJCW1lbXNldChwZGV2LT5pbWFnZV9wdHJbaV0sIGZpbGxlciwgcGRldi0+dmlldy5zaXplKTsKLQl9Ci19Ci0KLQotCiAvKiBCUklHSFRORVNTICovCiAKIGludCBwd2NfZ2V0X2JyaWdodG5lc3Moc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCkBAIC05NDksNyArOTQ5LDcgQEAKIAlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX1NUQVRVU19DVEwsIExFRF9GT1JNQVRURVIsIDIpOwogfQogCi1pbnQgcHdjX2dldF9sZWRzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKm9uX3ZhbHVlLCBpbnQgKm9mZl92YWx1ZSkKK3N0YXRpYyBpbnQgcHdjX2dldF9sZWRzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKm9uX3ZhbHVlLCBpbnQgKm9mZl92YWx1ZSkKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKIAlpbnQgcmV0OwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAKIAl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKIAkKIAkvKiBzZXQgbmV3IHJlbGF0aXZlIGFuZ2xlOyBhbmdsZXMgYXJlIGV4cHJlc3NlZCBpbiBkZWdyZWVzICogMTAwLAotCSAgIGJ1dCBjYW0gYXMgLjUgZGVncmVlIHJlc29sdXRpb24sIGhlbmNlIGRldmlkZSBieSAyMDAuIEFsc28KKwkgICBidXQgY2FtIGFzIC41IGRlZ3JlZSByZXNvbHV0aW9uLCBoZW5jZSBkaXZpZGUgYnkgMjAwLiBBbHNvCiAJICAgdGhlIGFuZ2xlIG11c3QgYmUgbXVsdGlwbGllZCBieSA2NCBiZWZvcmUgaXQncyBzZW5kIHRvCiAJICAgdGhlIGNhbSAoPz8pCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWlmLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWlmLmMKaW5kZXggMTAwYTVhNC4uY2NhNDdmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pZi5jCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaWYuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgaW50IHB3Y190cmFjZSA9IFRSQUNFX01PRFVMRSB8IFRSQUNFX0ZMT1cgfCBUUkFDRV9QV0NYOwogc3RhdGljIGludCBwb3dlcl9zYXZlID0gMDsKIHN0YXRpYyBpbnQgbGVkX29uID0gMTAwLCBsZWRfb2ZmID0gMDsgLyogZGVmYXVsdHMgdG8gTEVEIHRoYXQgaXMgb24gd2hpbGUgaW4gdXNlICovCi0gICAgICAgaW50IHB3Y19wcmVmZXJyZWRfY29tcHJlc3Npb24gPSAyOyAvKiAwLi4zID0gdW5jb21wcmVzc2VkLi5oaWdoICovCitzdGF0aWMgaW50IHB3Y19wcmVmZXJyZWRfY29tcHJlc3Npb24gPSAyOyAvKiAwLi4zID0gdW5jb21wcmVzc2VkLi5oaWdoICovCiBzdGF0aWMgc3RydWN0IHsKIAlpbnQgdHlwZTsKIAljaGFyIHNlcmlhbF9udW1iZXJbMzBdOwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogI2VuZGlmCQotCS8qIEFsbG9jYXRlIElzb2Nocm9udW91cyBwaXBlIGJ1ZmZlcnMgKi8KKwkvKiBBbGxvY2F0ZSBJc29jaHJvbm91cyBwaXBlIGJ1ZmZlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0lTT19CVUZTOyBpKyspIHsKIAkJaWYgKHBkZXYtPnNidWZbaV0uZGF0YSA9PSBOVUxMKSB7CiAJCQlrYnVmID0ga21hbGxvYyhJU09fQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJICBjYXNlIDczMDoKIAkgIGNhc2UgNzQwOgogCSAgY2FzZSA3NTA6Ci0JICAgIFRyYWNlKFRSQUNFX01FTU9SWSwicHJpdmF0ZV9kYXRhKCVaZClcbiIsc2l6ZW9mKHN0cnVjdCBwd2NfZGVjMjNfcHJpdmF0ZSkpOworCSAgICBUcmFjZShUUkFDRV9NRU1PUlksInByaXZhdGVfZGF0YSglenUpXG4iLHNpemVvZihzdHJ1Y3QgcHdjX2RlYzIzX3ByaXZhdGUpKTsKIAkgICAga2J1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwd2NfZGVjMjNfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwkvKiBUaW1vbiAmIEtpYXJhICovCiAJICAgIGJyZWFrOwogCSAgY2FzZSA2NDU6CkBAIC04NTAsNyArODUwLDcgQEAKIAkKIAlpZiAocGRldi0+dm1heF9wYWNrZXRfc2l6ZSA8IDAgfHwgcGRldi0+dm1heF9wYWNrZXRfc2l6ZSA+IElTT19NQVhfRlJBTUVfU0laRSkgewogCQlFcnIoIkZhaWxlZCB0byBmaW5kIHBhY2tldCBzaXplIGZvciB2aWRlbyBlbmRwb2ludCBpbiBjdXJyZW50IGFsdGVybmF0ZSBzZXR0aW5nLlxuIik7Ci0JCXJldHVybiAtRU5GSUxFOyAvKiBPZGQgZXJyb3IsIHRoYXQgc2hvdWxkIGJlIG5vdGljYWJsZSAqLworCQlyZXR1cm4gLUVORklMRTsgLyogT2RkIGVycm9yLCB0aGF0IHNob3VsZCBiZSBub3RpY2VhYmxlICovCiAJfQogCiAJLyogU2V0IGFsdGVybmF0ZSBpbnRlcmZhY2UgKi8KQEAgLTExNzksNyArMTE3OSw3IEBACiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAgICAgICAgIGludCBieXRlc190b19yZWFkOwogCi0JVHJhY2UoVFJBQ0VfUkVBRCwgInZpZGVvX3JlYWQoMHglcCwgJXAsICVaZCkgY2FsbGVkLlxuIiwgdmRldiwgYnVmLCBjb3VudCk7CisJVHJhY2UoVFJBQ0VfUkVBRCwgInZpZGVvX3JlYWQoMHglcCwgJXAsICV6dSkgY2FsbGVkLlxuIiwgdmRldiwgYnVmLCBjb3VudCk7CiAJaWYgKHZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcGRldiA9IHZkZXYtPnByaXY7CkBAIC0yMTI4LDcgKzIxMjgsNyBAQAogCWlmIChsZWRzWzFdID49IDApCiAJCWxlZF9vZmYgPSBsZWRzWzFdOwogCi0JLyogQmlnIGRldmljZSBub2RlIHdob29wbGEuIEJhc2ljbHksIGl0IGFsbG93cyB5b3UgdG8gYXNzaWduIGEKKwkvKiBCaWcgZGV2aWNlIG5vZGUgd2hvb3BsYS4gQmFzaWNhbGx5LCBpdCBhbGxvd3MgeW91IHRvIGFzc2lnbiBhCiAJICAgZGV2aWNlIG5vZGUgKC9kZXYvdmlkZW9YKSB0byBhIGNhbWVyYSwgYmFzZWQgb24gaXRzIHR5cGUKIAkgICAmIHNlcmlhbCBudW1iZXIuIFRoZSBmb3JtYXQgaXMgW3R5cGVbLnNlcmlhbG51bWJlcl06XW5vZGUuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaW9jdGwuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaW9jdGwuaAppbmRleCA2NTgwNWVhLi41ZjljYjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWlvY3RsLmgKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pb2N0bC5oCkBAIC03NSw3ICs3NSw3IEBACiAjZGVmaW5lIFBXQ19GUFNfU05BUFNIT1QJMHgwMDQwMDAwMAogCiAKLS8qIHN0cnVjdHVyZSBmb3IgdHJhbnNmZXJpbmcgeCAmIHkgY29vcmRpbmF0ZXMgKi8KKy8qIHN0cnVjdHVyZSBmb3IgdHJhbnNmZXJyaW5nIHggJiB5IGNvb3JkaW5hdGVzICovCiBzdHJ1Y3QgcHdjX2Nvb3JkCiB7CiAJaW50IHgsIHk7CQkvKiBndWVzcyB3aGF0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLmgKaW5kZXggNTNiNTE2ZC4uMjY3ODY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy5oCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MuaApAQCAtMjI2LDkgKzIyNiw4IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0vKiBHbG9iYWwgdmFyaWFibGVzICovCisvKiBHbG9iYWwgdmFyaWFibGUgKi8KIGV4dGVybiBpbnQgcHdjX3RyYWNlOwotZXh0ZXJuIGludCBwd2NfcHJlZmVycmVkX2NvbXByZXNzaW9uOwogCiAvKiogZnVuY3Rpb25zIGluIHB3Yy1pZi5jICovCiBpbnQgcHdjX3RyeV92aWRlb19tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuZXdfZnBzLCBpbnQgbmV3X2NvbXByZXNzaW9uLCBpbnQgbmV3X3NuYXBzaG90KTsKQEAgLTI0Myw4ICsyNDIsNiBAQAogLyoqIEZ1bmN0aW9ucyBpbiBwd2MtY3RybC5jICovCiAvKiBSZXF1ZXN0IGEgY2VydGFpbiB2aWRlbyBtb2RlLiBSZXR1cm5zIDwgMCBpZiBub3QgcG9zc2libGUgKi8KIGV4dGVybiBpbnQgcHdjX3NldF92aWRlb19tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXMsIGludCBjb21wcmVzc2lvbiwgaW50IHNuYXBzaG90KTsKLS8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBlciBpbWFnZSAobm90IGZyYW1lKSAqLwotZXh0ZXJuIHZvaWQgcHdjX3NldF9pbWFnZV9idWZmZXJfc2l6ZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7CiAKIC8qIFZhcmlvdXMgY29udHJvbHM7IHNob3VsZCBiZSBvYnZpb3VzLiBWYWx1ZSAwLi42NTUzNSwgb3IgPCAwIG9uIGVycm9yICovCiBleHRlcm4gaW50IHB3Y19nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7CkBAIC0yNTYsNyArMjUzLDYgQEAKIGV4dGVybiBpbnQgcHdjX2dldF9zYXR1cmF0aW9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKIGV4dGVybiBpbnQgcHdjX3NldF9zYXR1cmF0aW9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpOwogZXh0ZXJuIGludCBwd2Nfc2V0X2xlZHMoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBvbl92YWx1ZSwgaW50IG9mZl92YWx1ZSk7Ci1leHRlcm4gaW50IHB3Y19nZXRfbGVkcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpvbl92YWx1ZSwgaW50ICpvZmZfdmFsdWUpOwogZXh0ZXJuIGludCBwd2NfZ2V0X2Ntb3Nfc2Vuc29yKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnNlbnNvcik7CiAKIC8qIFBvd2VyIGRvd24gb3IgdXAgdGhlIGNhbWVyYTsgbm90IHN1cHBvcnRlZCBieSBhbGwgbW9kZWxzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX2NvcmUuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfY29yZS5jCmluZGV4IDg5ODQwMWMuLjMxZDU3NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfY29yZS5jCkBAIC00MjksNyArNDI5LDcgQEAKIH0KIAogCi1pbnQgCitzdGF0aWMgaW50IAogc245YzEwMl9pMmNfdHJ5X3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBhZGRyZXNzLCB1OCB2YWx1ZSkKIHsKQEAgLTc4NSw3ICs3ODUsNyBAQAogfQogCiAKLWludCBzbjljMTAyX3N0cmVhbV9pbnRlcnJ1cHQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCitzdGF0aWMgaW50IHNuOWMxMDJfc3RyZWFtX2ludGVycnVwdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKIHsKIAlpbnQgZXJyID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9zZW5zb3IuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfc2Vuc29yLmgKaW5kZXggMTZmNzQ4My4uNmE3YWRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9zZW5zb3IuaAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3NlbnNvci5oCkBAIC0xNDUsOCArMTQ1LDYgQEAKICovCiAKIC8qIFRoZSAidHJ5IiBJMkMgSS9PIHZlcnNpb25zIGFyZSB1c2VkIHdoZW4gcHJvYmluZyB0aGUgc2Vuc29yICovCi1leHRlcm4gaW50IHNuOWMxMDJfaTJjX3RyeV93cml0ZShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLHN0cnVjdCBzbjljMTAyX3NlbnNvciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBhZGRyZXNzLCB1OCB2YWx1ZSk7CiBleHRlcm4gaW50IHNuOWMxMDJfaTJjX3RyeV9yZWFkKHN0cnVjdCBzbjljMTAyX2RldmljZSosc3RydWN0IHNuOWMxMDJfc2Vuc29yKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggYWRkcmVzcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCmluZGV4IGRkNDU4MGMuLjdkMDYxMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYwpAQCAtODU5LDcgKzg1OSw3IEBACiAJCWluZm8gKCJ1ZGV2IGlzIE5VTEwuIik7CiAJfQogCi0JLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KIAogCWRldiA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgbGVnb191c2JfdG93ZXIpLCBHRlBfS0VSTkVMKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYwppbmRleCA1N2I4MmQ1Li4yZmQxMjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYwpAQCAtOTgzLDcgKzk4Myw3IEBACiAJCQkJbXNnY291bnQrKzsKIAkJCQlpZiAobXNnY291bnQgPCA1MDApCiAJCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkJInNpc3VzYnZnYVslZF06IFdyb3RlICVaZCBvZiAiCisJCQkJCQkic2lzdXNidmdhWyVkXTogV3JvdGUgJXpkIG9mICIKIAkJCQkJCSIlZCBieXRlcywgZXJyb3IgJWRcbiIsCiAJCQkJCQlzaXN1c2ItPm1pbm9yLCAqYnl0ZXNfd3JpdHRlbiwKIAkJCQkJCWxlbmd0aCwgcmV0KTsKQEAgLTMxMDUsNiArMzEwNSw3IEBACiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2lzdXNiX3RhYmxlIFtdID0gewogCXsgVVNCX0RFVklDRSgweDA3MTEsIDB4MDkwMCkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxODJkLCAweDAyMWMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTgyZCwgMHgwMjY5KSB9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYyBiL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMKaW5kZXggYTAyYmU3OS4uZDk3Njc5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jCkBAIC0xMzg4LDExICsxMzg4LDExIEBACiAJaWYgKG5ldGlmX3J1bm5pbmcocGVnYXN1cy0+bmV0KSkgewogCQlwZWdhc3VzLT5yeF91cmItPnN0YXR1cyA9IDA7CiAJCXBlZ2FzdXMtPnJ4X3VyYi0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0JCXJlYWRfYnVsa19jYWxsYmFjayhwZWdhc3VzLT5yeF91cmIsIDApOworCQlyZWFkX2J1bGtfY2FsbGJhY2socGVnYXN1cy0+cnhfdXJiLCBOVUxMKTsKIAogCQlwZWdhc3VzLT5pbnRyX3VyYi0+c3RhdHVzID0gMDsKIAkJcGVnYXN1cy0+aW50cl91cmItPmFjdHVhbF9sZW5ndGggPSAwOwotCQlpbnRyX2NhbGxiYWNrKHBlZ2FzdXMtPmludHJfdXJiLCAwKTsKKwkJaW50cl9jYWxsYmFjayhwZWdhc3VzLT5pbnRyX3VyYiwgTlVMTCk7CiAKIAkJcXVldWVfZGVsYXllZF93b3JrKHBlZ2FzdXNfd29ya3F1ZXVlLCAmcGVnYXN1cy0+Y2Fycmllcl9jaGVjaywKIAkJCQkJQ0FSUklFUl9DSEVDS19ERUxBWSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMgYi9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMKaW5kZXggYmJhZWYwNC4uZjZiYzZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC91c2JuZXQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBVU0IgTmV0d29ya2luZyBMaW5rcwotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgYnkgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNSBieSBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAqIENvcHlyaWdodCAoQykgMjAwMiBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4KICAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IERhdmlkIEhvbGxpcyA8ZGhvbGxpc0BkYXZlaG9sbGlzLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwNSBQaGlsIENoYW5nIDxwY2hhbmcyM0BzYmNnbG9iYWwubmV0PgpAQCAtMjEwLDYgKzIxMCw3IEBACiAjCQlkZWZpbmUgRVZFTlRfUlhfSEFMVAkxCiAjCQlkZWZpbmUgRVZFTlRfUlhfTUVNT1JZCTIKICMJCWRlZmluZSBFVkVOVF9TVFNfU1BMSVQJMworIwkJZGVmaW5lIEVWRU5UX0xJTktfUkVTRVQJNAogfTsKIAogLy8gZGV2aWNlLXNwZWNpZmljIGluZm8gdXNlZCBieSB0aGUgZHJpdmVyCkBAIC0yNDMsNiArMjQ0LDkgQEAKIAkvKiBmb3Igc3RhdHVzIHBvbGxpbmcgKi8KIAl2b2lkCSgqc3RhdHVzKShzdHJ1Y3QgdXNibmV0ICosIHN0cnVjdCB1cmIgKik7CiAKKwkvKiBsaW5rIHJlc2V0IGhhbmRsaW5nLCBjYWxsZWQgZnJvbSBkZWZlcl9rZXZlbnQgKi8KKwlpbnQJKCpsaW5rX3Jlc2V0KShzdHJ1Y3QgdXNibmV0ICopOworCiAJLyogZml4dXAgcnggcGFja2V0IChzdHJpcCBmcmFtaW5nKSAqLwogCWludAkoKnJ4X2ZpeHVwKShzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogCkBAIC0zMDQsNiArMzA4LDcgQEAKIHN0YXRpYyB1MzIgdXNibmV0X2dldF9saW5rIChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB1MzIgdXNibmV0X2dldF9tc2dsZXZlbCAoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZCB1c2JuZXRfc2V0X21zZ2xldmVsIChzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIpOworc3RhdGljIHZvaWQgZGVmZXJfa2V2ZW50IChzdHJ1Y3QgdXNibmV0ICosIGludCk7CiAKIC8qIG1vc3RseSBmb3IgUERBIHN0eWxlIGRldmljZXMsIHdoaWNoIGFyZSBhbHdheXMgY29ubmVjdGVkIGlmIHByZXNlbnQgKi8KIHN0YXRpYyBpbnQgYWx3YXlzX2Nvbm5lY3RlZCAoc3RydWN0IHVzYm5ldCAqZGV2KQpAQCAtNDI2LDcgKzQzMSw3IEBACiAJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAogCWlmIChuZXRpZl9tc2dfcnhfc3RhdHVzIChkZXYpKQotCQlkZXZkYmcgKGRldiwgIjwgcngsIGxlbiAlemQsIHR5cGUgMHgleCIsCisJCWRldmRiZyAoZGV2LCAiPCByeCwgbGVuICV6dSwgdHlwZSAweCV4IiwKIAkJCXNrYi0+bGVuICsgc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSwgc2tiLT5wcm90b2NvbCk7CiAJbWVtc2V0IChza2ItPmNiLCAwLCBzaXplb2YgKHN0cnVjdCBza2JfZGF0YSkpOwogCXN0YXR1cyA9IG5ldGlmX3J4IChza2IpOwpAQCAtNTAxLDYgKzUwNiw3IEBACiAjZGVmaW5lIEFYX0NNRF9XUklURV9NVUxUSV9GSUxURVIJMHgxNgogI2RlZmluZSBBWF9DTURfUkVBRF9OT0RFX0lECQkweDE3CiAjZGVmaW5lIEFYX0NNRF9SRUFEX1BIWV9JRAkJMHgxOQorI2RlZmluZSBBWF9DTURfUkVBRF9NRURJVU1fU1RBVFVTCTB4MWEKICNkZWZpbmUgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFCTB4MWIKICNkZWZpbmUgQVhfQ01EX1JFQURfTU9OSVRPUl9NT0RFCTB4MWMKICNkZWZpbmUgQVhfQ01EX1dSSVRFX01PTklUT1JfTU9ERQkweDFkCkBAIC01MTUsMTEgKzUyMSwxNCBAQAogI2RlZmluZSBBWF9NT05JVE9SX01BR0lDCQkweDA0CiAjZGVmaW5lIEFYX01PTklUT1JfSFNGUwkJCTB4MTAKIAorLyogQVg4ODE3MiBNZWRpdW0gU3RhdHVzIFJlZ2lzdGVyIHZhbHVlcyAqLworI2RlZmluZSBBWF9NRURJVU1fRlVMTF9EVVBMRVgJCTB4MDIKKyNkZWZpbmUgQVhfTUVESVVNX1RYX0FCT1JUX0FMTE9XCTB4MDQKKyNkZWZpbmUgQVhfTUVESVVNX0ZMT1dfQ09OVFJPTF9FTgkweDEwCisKICNkZWZpbmUgQVhfTUNBU1RfRklMVEVSX1NJWkUJCTgKICNkZWZpbmUgQVhfTUFYX01DQVNUCQkJNjQKIAotI2RlZmluZSBBWF9JTlRFUlJVUFRfQlVGU0laRQkJOAotCiAjZGVmaW5lIEFYX0VFUFJPTV9MRU4JCQkweDQwCiAKICNkZWZpbmUgQVhfU1dSRVNFVF9DTEVBUgkJMHgwMApAQCAtNTM1LDE1ICs1NDQsMzMgQEAKICNkZWZpbmUgQVg4ODc3Ml9JUEcxX0RFRkFVTFQJCTB4MGMKICNkZWZpbmUgQVg4ODc3Ml9JUEcyX0RFRkFVTFQJCTB4MTIKIAorI2RlZmluZSBBWDg4NzcyX01FRElVTV9GVUxMX0RVUExFWAkweDAwMDIKKyNkZWZpbmUgQVg4ODc3Ml9NRURJVU1fUkVTRVJWRUQJCTB4MDAwNAorI2RlZmluZSBBWDg4NzcyX01FRElVTV9SWF9GQ19FTkFCTEUJMHgwMDEwCisjZGVmaW5lIEFYODg3NzJfTUVESVVNX1RYX0ZDX0VOQUJMRQkweDAwMjAKKyNkZWZpbmUgQVg4ODc3Ml9NRURJVU1fUEFVU0VfRk9STUFUCTB4MDA4MAorI2RlZmluZSBBWDg4NzcyX01FRElVTV9SWF9FTkFCTEUJMHgwMTAwCisjZGVmaW5lIEFYODg3NzJfTUVESVVNXzEwME1CCQkweDAyMDAKKyNkZWZpbmUgQVg4ODc3Ml9NRURJVU1fREVGQVVMVAlcCisJKEFYODg3NzJfTUVESVVNX0ZVTExfRFVQTEVYIHwgQVg4ODc3Ml9NRURJVU1fUlhfRkNfRU5BQkxFIHwgXAorCSBBWDg4NzcyX01FRElVTV9UWF9GQ19FTkFCTEUgfCBBWDg4NzcyX01FRElVTV8xMDBNQiB8IFwKKwkgQVg4ODc3Ml9NRURJVU1fUkVTRVJWRUQgfCBBWDg4NzcyX01FRElVTV9SWF9FTkFCTEUgKQorCiAjZGVmaW5lIEFYX0VFUFJPTV9NQUdJQwkJCTB4ZGVhZGJlZWYKIAogLyogVGhpcyBzdHJ1Y3R1cmUgY2Fubm90IGV4Y2VlZCBzaXplb2YodW5zaWduZWQgbG9uZyBbNV0pIEFLQSAyMCBieXRlcyAqLwogc3RydWN0IGF4ODgxN3hfZGF0YSB7CiAJdTggbXVsdGlfZmlsdGVyW0FYX01DQVNUX0ZJTFRFUl9TSVpFXTsKLQlzdHJ1Y3QgdXJiICppbnRfdXJiOwotCXU4ICppbnRfYnVmOwogfTsKIAorc3RydWN0IGF4ODgxNzJfaW50X2RhdGEgeworCXUxNiByZXMxOworCXU4IGxpbms7CisJdTE2IHJlczI7CisJdTggc3RhdHVzOworCXUxNiByZXMzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0YXRpYyBpbnQgYXg4ODE3eF9yZWFkX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCiAJCQkgICAgdTE2IHNpemUsIHZvaWQgKmRhdGEpCiB7CkBAIC01ODYsMjUgKzYxMywyMyBAQAogCXVzYl9mcmVlX3VyYih1cmIpOwogfQogCi1zdGF0aWMgdm9pZCBheDg4MTd4X2ludGVycnVwdF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgYXg4ODE3eF9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RydWN0IHVzYm5ldCAqZGV2ID0gKHN0cnVjdCB1c2JuZXQgKil1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IGF4ODgxN3hfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXg4ODE3eF9kYXRhICopJmRldi0+ZGF0YTsKKwlzdHJ1Y3QgYXg4ODE3Ml9pbnRfZGF0YSAqZXZlbnQ7CiAJaW50IGxpbms7CiAKLQlpZiAodXJiLT5zdGF0dXMgPCAwKSB7Ci0JCWRldmRiZyhkZXYsImF4ODgxN3hfaW50ZXJydXB0X2NvbXBsZXRlKCkgZmFpbGVkIHdpdGggJWQiLAotCQkJdXJiLT5zdGF0dXMpOwotCX0gZWxzZSB7Ci0JCWxpbmsgPSBkYXRhLT5pbnRfYnVmWzJdICYgMHgwMTsKLQkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2LT5uZXQpICE9IGxpbmspIHsKLQkJCWlmIChsaW5rKQotCQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2LT5uZXQpOwotCQkJZWxzZQotCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldi0+bmV0KTsKLQkJCWRldmRiZyhkZXYsICJheDg4MTd4IC0gTGluayBTdGF0dXMgaXM6ICVkIiwgbGluayk7Ci0JCX0KLQkJdXNiX3N1Ym1pdF91cmIoZGF0YS0+aW50X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IDgpCisJCXJldHVybjsKKworCWV2ZW50ID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJbGluayA9IGV2ZW50LT5saW5rICYgMHgwMTsKKwlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYtPm5ldCkgIT0gbGluaykgeworCQlpZiAobGluaykgeworCQkJbmV0aWZfY2Fycmllcl9vbihkZXYtPm5ldCk7CisJCQlkZWZlcl9rZXZlbnQgKGRldiwgRVZFTlRfTElOS19SRVNFVCApOworCQl9IGVsc2UKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldi0+bmV0KTsKKwkJZGV2ZGJnKGRldiwgImF4ODgxN3ggLSBMaW5rIFN0YXR1cyBpczogJWQiLCBsaW5rKTsKIAl9CiB9CiAKQEAgLTcxMSw2ICs3MzYsMjAgQEAKIAlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfSFdfTUlJLCAwLCAwLCAwLCAmYnVmKTsKIH0KIAorc3RhdGljIGludCBheDg4MTcyX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXUxNiBscGE7CisJdTggbW9kZTsKKworCW1vZGUgPSBBWF9NRURJVU1fVFhfQUJPUlRfQUxMT1cgfCBBWF9NRURJVU1fRkxPV19DT05UUk9MX0VOOworCWxwYSA9IGF4ODgxN3hfbWRpb19yZWFkKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9MUEEpOworCWlmIChscGEgJiBMUEFfRFVQTEVYKQorCQltb2RlIHw9IEFYX01FRElVTV9GVUxMX0RVUExFWDsKKwlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NRURJVU1fTU9ERSwgbW9kZSwgMCwgMCwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgYXg4ODE3eF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKQEAgLTgyNCwzNSArODYzLDEzIEBACiAJdm9pZCAqYnVmOwogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZ3Bpb19iaXRzID0gZGV2LT5kcml2ZXJfaW5mby0+ZGF0YTsKLQlzdHJ1Y3QgYXg4ODE3eF9kYXRhICpkYXRhID0gKHN0cnVjdCBheDg4MTd4X2RhdGEgKilkZXYtPmRhdGE7CiAKIAlnZXRfZW5kcG9pbnRzKGRldixpbnRmKTsKIAotCWlmICgoZGF0YS0+aW50X3VyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCWRiZyAoIiVzOiBjYW5ub3QgYWxsb2NhdGUgaW50ZXJydXB0IFVSQiIsCi0JCQlkZXYtPm5ldC0+bmFtZSk7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0MTsKLQl9Ci0JCi0JaWYgKChkYXRhLT5pbnRfYnVmID0ga21hbGxvYyhBWF9JTlRFUlJVUFRfQlVGU0laRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJZGJnICgiJXM6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGludGVycnVwdCBidWZmZXIiLAotCQkJZGV2LT5uZXQtPm5hbWUpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDE7Ci0JfQotCW1lbXNldChkYXRhLT5pbnRfYnVmLCAwLCBBWF9JTlRFUlJVUFRfQlVGU0laRSk7Ci0KLQl1c2JfZmlsbF9pbnRfdXJiIChkYXRhLT5pbnRfdXJiLCBkZXYtPnVkZXYsCi0JCXVzYl9yY3ZpbnRwaXBlIChkZXYtPnVkZXYsIDEpLAotCQlkYXRhLT5pbnRfYnVmLCBBWF9JTlRFUlJVUFRfQlVGU0laRSwKLQkJYXg4ODE3eF9pbnRlcnJ1cHRfY29tcGxldGUsIGRldiwKLQkJZGV2LT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCA/IDggOiAxMDApOwotCiAJYnVmID0ga21hbGxvYyhFVEhfQUxFTiwgR0ZQX0tFUk5FTCk7CiAJaWYoIWJ1ZikgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDI7CisJCWdvdG8gb3V0MTsKIAl9CiAKIAkvKiBUb2dnbGUgdGhlIEdQSU9zIGluIGEgbWFudWZhY3R1cmVyL21vZGVsIHNwZWNpZmljIHdheSAqLwpAQCAtODYwLDMyICs4NzcsMzIgQEAKIAkJaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9HUElPUywKIAkJCQkJKGdwaW9fYml0cyA+PiAoaSAqIDgpKSAmIDB4ZmYsIDAsIDAsCiAJCQkJCWJ1ZikpIDwgMCkKLQkJCWdvdG8gb3V0MzsKKwkJCWdvdG8gb3V0MjsKIAkJbXNsZWVwKDUpOwogCX0KIAogCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfUlhfQ1RMLCAweDgwLCAwLCAwLCBidWYpKSA8IDApIHsKIAkJZGJnKCJzZW5kIEFYX0NNRF9XUklURV9SWF9DVEwgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0MzsKKwkJZ290byBvdXQyOwogCX0KIAogCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi8KIAltZW1zZXQoYnVmLCAwLCBFVEhfQUxFTik7CiAJaWYgKChyZXQgPSBheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTk9ERV9JRCwgMCwgMCwgNiwgYnVmKSkgPCAwKSB7CiAJCWRiZygicmVhZCBBWF9DTURfUkVBRF9OT0RFX0lEIGZhaWxlZDogJWQiLCByZXQpOwotCQlnb3RvIG91dDM7CisJCWdvdG8gb3V0MjsKIAl9CiAJbWVtY3B5KGRldi0+bmV0LT5kZXZfYWRkciwgYnVmLCBFVEhfQUxFTik7CiAKIAkvKiBHZXQgdGhlIFBIWSBpZCAqLwogCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX1BIWV9JRCwgMCwgMCwgMiwgYnVmKSkgPCAwKSB7CiAJCWRiZygiZXJyb3Igb24gcmVhZCBBWF9DTURfUkVBRF9QSFlfSUQ6ICUwMngiLCByZXQpOwotCQlnb3RvIG91dDM7CisJCWdvdG8gb3V0MjsKIAl9IGVsc2UgaWYgKHJldCA8IDIpIHsKIAkJLyogdGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiAyIGJ5dGVzICovCiAJCWRiZygiQVhfQ01EX1JFQURfUEhZX0lEIHJldHVybmVkIGxlc3MgdGhhbiAyIGJ5dGVzOiByZXQ9JTAyeCIsIHJldCk7CiAJCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0MzsKKwkJZ290byBvdXQyOwogCX0KIAogCS8qIEluaXRpYWxpemUgTUlJIHN0cnVjdHVyZSAqLwpAQCAtODk5LDM2ICs5MTYsMTggQEAKIAlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXg4ODE3eF9zZXRfbXVsdGljYXN0OwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4MTd4X2V0aHRvb2xfb3BzOwogCi0JYXg4ODE3eF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLAotCQkJY3B1X3RvX2xlMTYoQk1DUl9SRVNFVCkpOworCWF4ODgxN3hfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CiAJYXg4ODE3eF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsCi0JCQljcHVfdG9fbGUxNihBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFX0NTTUEgfCAweDA0MDApKTsKKwkJQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV9DU01BIHwgQURWRVJUSVNFX1BBVVNFX0NBUCk7CiAJbWlpX253YXlfcmVzdGFydCgmZGV2LT5taWkpOwogCi0JaWYoKHJldCA9IHVzYl9zdWJtaXRfdXJiKGRhdGEtPmludF91cmIsIEdGUF9LRVJORUwpKSA8IDApIHsKLQkJZGJnKCJGYWlsZWQgdG8gc3VibWl0IGludGVycnVwdCBVUkI6ICUwMngiLCByZXQpOwotCQlnb3RvIG91dDI7Ci0JfQotCiAJcmV0dXJuIDA7Ci1vdXQzOgotCWtmcmVlKGJ1Zik7CiBvdXQyOgotCWtmcmVlKGRhdGEtPmludF9idWYpOworCWtmcmVlKGJ1Zik7CiBvdXQxOgotCXVzYl9mcmVlX3VyYihkYXRhLT5pbnRfdXJiKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBheDg4MTd4X3VuYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXN0cnVjdCBheDg4MTd4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGF4ODgxN3hfZGF0YSAqKWRldi0+ZGF0YTsKLQotCXVzYl9raWxsX3VyYihkYXRhLT5pbnRfdXJiKTsKLQl1c2JfZnJlZV91cmIoZGF0YS0+aW50X3VyYik7Ci0Ja2ZyZWUoZGF0YS0+aW50X2J1Zik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODc3Ml9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gYXg4ODE3eF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKQEAgLTk0Niw2NCArOTQ1LDQ0IEBACiB7CiAJaW50IHJldDsKIAl2b2lkICpidWY7Ci0Jc3RydWN0IGF4ODgxN3hfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXg4ODE3eF9kYXRhICopZGV2LT5kYXRhOwogCiAJZ2V0X2VuZHBvaW50cyhkZXYsaW50Zik7CiAKLQlpZiAoKGRhdGEtPmludF91cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKSkgPT0gMCkgewotCQlkYmcgKCJDYW5ub3QgYWxsb2NhdGUgaW50ZXJydXB0IFVSQiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDE7Ci0JfQotCQotCWlmICgoZGF0YS0+aW50X2J1ZiA9IGttYWxsb2MoQVhfSU5URVJSVVBUX0JVRlNJWkUsIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCWRiZyAoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGludGVycnVwdCBidWZmZXIiKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQxOwotCX0KLQltZW1zZXQoZGF0YS0+aW50X2J1ZiwgMCwgQVhfSU5URVJSVVBUX0JVRlNJWkUpOwotCi0JdXNiX2ZpbGxfaW50X3VyYiAoZGF0YS0+aW50X3VyYiwgZGV2LT51ZGV2LAotCQl1c2JfcmN2aW50cGlwZSAoZGV2LT51ZGV2LCAxKSwKLQkJZGF0YS0+aW50X2J1ZiwgQVhfSU5URVJSVVBUX0JVRlNJWkUsCi0JCWF4ODgxN3hfaW50ZXJydXB0X2NvbXBsZXRlLCBkZXYsCi0JCWRldi0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggPyA4IDogMTAwKTsKLQogCWJ1ZiA9IGttYWxsb2MoNiwgR0ZQX0tFUk5FTCk7CiAJaWYoIWJ1ZikgewogCQlkYmcgKCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXIiKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQyOworCQlnb3RvIG91dDE7CiAJfQogCiAJaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9HUElPUywKIAkJCQkgICAgIDB4MDBCMCwgMCwgMCwgYnVmKSkgPCAwKQotCQlnb3RvIG91dDM7CisJCWdvdG8gb3V0MjsKIAogCW1zbGVlcCg1KTsKIAlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1BIWV9TRUxFQ1QsIDB4MDAwMSwgMCwgMCwgYnVmKSkgPCAwKSB7CiAJCWRiZygiU2VsZWN0IFBIWSAjMSBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQzOworCQlnb3RvIG91dDI7CiAJfQogCiAJaWYgKChyZXQgPQogCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUkVTRVQsIEFYX1NXUkVTRVRfSVBQRCwgMCwgMCwgYnVmKSkgPCAwKSB7CiAJCWRiZygiRmFpbGVkIHRvIHBvd2VyIGRvd24gaW50ZXJuYWwgUEhZOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0MzsKKwkJZ290byBvdXQyOwogCX0KIAogCW1zbGVlcCgxNTApOwogCWlmICgocmV0ID0KIAkgICAgIGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULCBBWF9TV1JFU0VUX0NMRUFSLCAwLCAwLCBidWYpKSA8IDApIHsKIAkJZGJnKCJGYWlsZWQgdG8gcGVyZm9ybSBzb2Z0d2FyZSByZXNldDogJWQiLCByZXQpOwotCQlnb3RvIG91dDM7CisJCWdvdG8gb3V0MjsKIAl9CiAKIAltc2xlZXAoMTUwKTsKIAlpZiAoKHJldCA9CiAJICAgICBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwgQVhfU1dSRVNFVF9JUFJMIHwgQVhfU1dSRVNFVF9QUkwsIDAsIDAsIGJ1ZikpIDwgMCkgewogCQlkYmcoIkZhaWxlZCB0byBzZXQgSW50ZXJuYWwvRXh0ZXJuYWwgUEhZIHJlc2V0IGNvbnRyb2w6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQzOworCQlnb3RvIG91dDI7CiAJfQogCiAJbXNsZWVwKDE1MCk7CkBAIC0xMDExLDI3ICs5OTAsMjcgQEAKIAkgICAgIGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgMHgwMDAwLCAwLCAwLAogCQkJICAgICAgIGJ1ZikpIDwgMCkgewogCQlkYmcoIkZhaWxlZCB0byByZXNldCBSWF9DVEw6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQzOworCQlnb3RvIG91dDI7CiAJfQogCiAJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLwogCW1lbXNldChidWYsIDAsIEVUSF9BTEVOKTsKIAlpZiAoKHJldCA9IGF4ODgxN3hfcmVhZF9jbWQoZGV2LCBBWDg4NzcyX0NNRF9SRUFEX05PREVfSUQsIDAsIDAsIEVUSF9BTEVOLCBidWYpKSA8IDApIHsKIAkJZGJnKCJGYWlsZWQgdG8gcmVhZCBNQUMgYWRkcmVzczogJWQiLCByZXQpOwotCQlnb3RvIG91dDM7CisJCWdvdG8gb3V0MjsKIAl9CiAJbWVtY3B5KGRldi0+bmV0LT5kZXZfYWRkciwgYnVmLCBFVEhfQUxFTik7CiAKIAlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9TV19NSUksIDAsIDAsIDAsIGJ1ZikpIDwgMCkgewogCQlkYmcoIkVuYWJsaW5nIHNvZnR3YXJlIE1JSSBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQzOworCQlnb3RvIG91dDI7CiAJfQogCiAJaWYgKCgocmV0ID0KIAkgICAgICBheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTUlJX1JFRywgMHgwMDEwLCAyLCAyLCBidWYpKSA8IDApCiAJICAgIHx8ICgqKCh1MTYgKilidWYpICE9IDB4MDAzYikpIHsKIAkJZGJnKCJSZWFkIFBIWSByZWdpc3RlciAyIG11c3QgYmUgMHgzYjAwOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0MzsKKwkJZ290byBvdXQyOwogCX0KIAogCS8qIEluaXRpYWxpemUgTUlJIHN0cnVjdHVyZSAqLwpAQCAtMTA0NCwyNiArMTAyMywyNiBAQAogCS8qIEdldCB0aGUgUEhZIGlkICovCiAJaWYgKChyZXQgPSBheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfUEhZX0lELCAwLCAwLCAyLCBidWYpKSA8IDApIHsKIAkJZGJnKCJFcnJvciByZWFkaW5nIFBIWSBJRDogJTAyeCIsIHJldCk7Ci0JCWdvdG8gb3V0MzsKKwkJZ290byBvdXQyOwogCX0gZWxzZSBpZiAocmV0IDwgMikgewogCQkvKiB0aGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIDIgYnl0ZXMgKi8KIAkJZGJnKCJBWF9DTURfUkVBRF9QSFlfSUQgcmV0dXJuZWQgbGVzcyB0aGFuIDIgYnl0ZXM6IHJldD0lMDJ4IiwKIAkJICAgIHJldCk7CiAJCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0MzsKKwkJZ290byBvdXQyOwogCX0KIAlkZXYtPm1paS5waHlfaWQgPSAqKCh1OCAqKWJ1ZiArIDEpOwogCiAJaWYgKChyZXQgPQogCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUkVTRVQsIEFYX1NXUkVTRVRfUFJMLCAwLCAwLCBidWYpKSA8IDApIHsKIAkJZGJnKCJTZXQgZXh0ZXJuYWwgUEhZIHJlc2V0IHBpbiBsZXZlbDogJWQiLCByZXQpOwotCQlnb3RvIG91dDM7CisJCWdvdG8gb3V0MjsKIAl9CiAJbXNsZWVwKDE1MCk7CiAJaWYgKChyZXQgPQogCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUkVTRVQsIEFYX1NXUkVTRVRfSVBSTCB8IEFYX1NXUkVTRVRfUFJMLCAwLCAwLCBidWYpKSA8IDApIHsKIAkJZGJnKCJTZXQgSW50ZXJuYWwvRXh0ZXJuYWwgUEhZIHJlc2V0IGNvbnRyb2w6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQzOworCQlnb3RvIG91dDI7CiAJfQogCW1zbGVlcCgxNTApOwogCkBAIC0xMDcxLDI1ICsxMDUwLDI0IEBACiAJZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxN3hfc2V0X211bHRpY2FzdDsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODc3Ml9ldGh0b29sX29wczsKIAotCWF4ODgxN3hfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQk1DUiwKLQkJCWNwdV90b19sZTE2KEJNQ1JfUkVTRVQpKTsKKwlheDg4MTd4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOwogCWF4ODgxN3hfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLAotCQkJY3B1X3RvX2xlMTYoQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV9DU01BKSk7CisJCQlBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFX0NTTUEpOwogCW1paV9ud2F5X3Jlc3RhcnQoJmRldi0+bWlpKTsKIAotCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUVESVVNX01PREUsIDB4MDMzNiwgMCwgMCwgYnVmKSkgPCAwKSB7CisJaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NRURJVU1fTU9ERSwgQVg4ODc3Ml9NRURJVU1fREVGQVVMVCwgMCwgMCwgYnVmKSkgPCAwKSB7CiAJCWRiZygiV3JpdGUgbWVkaXVtIG1vZGUgcmVnaXN0ZXI6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQzOworCQlnb3RvIG91dDI7CiAJfQogCiAJaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9JUEcwLCBBWDg4NzcyX0lQRzBfREVGQVVMVCB8IEFYODg3NzJfSVBHMV9ERUZBVUxULEFYODg3NzJfSVBHMl9ERUZBVUxULCAwLCBidWYpKSA8IDApIHsKIAkJZGJnKCJXcml0ZSBJUEcsSVBHMSxJUEcyIGZhaWxlZDogJWQiLCByZXQpOwotCQlnb3RvIG91dDM7CisJCWdvdG8gb3V0MjsKIAl9CiAJaWYgKChyZXQgPQogCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX0hXX01JSSwgMCwgMCwgMCwgJmJ1ZikpIDwgMCkgewogCQlkYmcoIkZhaWxlZCB0byBzZXQgaGFyZHdhcmUgTUlJOiAlMDJ4IiwgcmV0KTsKLQkJZ290byBvdXQzOworCQlnb3RvIG91dDI7CiAJfQogCiAJLyogU2V0IFJYX0NUTCB0byBkZWZhdWx0IHZhbHVlcyB3aXRoIDJrIGJ1ZmZlciwgYW5kIGVuYWJsZSBjYWN0dXMgKi8KQEAgLTEwOTcsMjUgKzEwNzUsMTYgQEAKIAkgICAgIGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgMHgwMDg4LCAwLCAwLAogCQkJICAgICAgIGJ1ZikpIDwgMCkgewogCQlkYmcoIlJlc2V0IFJYX0NUTCBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQzOwotCX0KLQotCWlmKChyZXQgPSB1c2Jfc3VibWl0X3VyYihkYXRhLT5pbnRfdXJiLCBHRlBfS0VSTkVMKSkgPCAwKSB7Ci0JCWRiZygiRmFpbGVkIHRvIHN1Ym1pdCBpbnRlcnJ1cHQgVVJCOiAlMDJ4IiwgcmV0KTsKLQkJZ290byBvdXQzOworCQlnb3RvIG91dDI7CiAJfQogCiAJa2ZyZWUoYnVmKTsKIAogCXJldHVybiAwOwogCi1vdXQzOgotCWtmcmVlKGJ1Zik7CiBvdXQyOgotCWtmcmVlKGRhdGEtPmludF9idWYpOworCWtmcmVlKGJ1Zik7CiBvdXQxOgotCXVzYl9mcmVlX3VyYihkYXRhLT5pbnRfdXJiKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyMTMsMTAgKzExODIsMjkgQEAKIAlyZXR1cm4gc2tiOwogfQogCitzdGF0aWMgaW50IGF4ODg3NzJfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJdTE2IGxwYTsKKwl1MTYgbW9kZTsKKworCW1vZGUgPSBBWDg4NzcyX01FRElVTV9ERUZBVUxUOworCWxwYSA9IGF4ODgxN3hfbWRpb19yZWFkKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9MUEEpOworCisJaWYgKChscGEgJiBMUEFfRFVQTEVYKSA9PSAwKQorCQltb2RlICY9IH5BWDg4NzcyX01FRElVTV9GVUxMX0RVUExFWDsKKwlpZiAoKGxwYSAmIExQQV8xMDApID09IDApCisJCW1vZGUgJj0gfkFYODg3NzJfTUVESVVNXzEwME1COworCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLCBtb2RlLCAwLCAwLCBOVUxMKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxN3hfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPSAiQVNJWCBBWDg4MTd4IFVTQiAyLjAgRXRoZXJuZXQiLAogCS5iaW5kID0gYXg4ODE3eF9iaW5kLAotCS51bmJpbmQgPSBheDg4MTd4X3VuYmluZCwKKwkuc3RhdHVzID0gYXg4ODE3eF9zdGF0dXMsCisJLmxpbmtfcmVzZXQgPSBheDg4MTcyX2xpbmtfcmVzZXQsCisJLnJlc2V0ID0gYXg4ODE3Ml9saW5rX3Jlc2V0LAogCS5mbGFncyA9ICBGTEFHX0VUSEVSLAogCS5kYXRhID0gMHgwMDEzMDEwMywKIH07CkBAIC0xMjI0LDcgKzEyMTIsOSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBkbGlua19kdWJfZTEwMF9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9ICJETGluayBEVUItRTEwMCBVU0IgRXRoZXJuZXQiLAogCS5iaW5kID0gYXg4ODE3eF9iaW5kLAotCS51bmJpbmQgPSBheDg4MTd4X3VuYmluZCwKKwkuc3RhdHVzID0gYXg4ODE3eF9zdGF0dXMsCisJLmxpbmtfcmVzZXQgPSBheDg4MTcyX2xpbmtfcmVzZXQsCisJLnJlc2V0ID0gYXg4ODE3Ml9saW5rX3Jlc2V0LAogCS5mbGFncyA9ICBGTEFHX0VUSEVSLAogCS5kYXRhID0gMHgwMDlmOWQ5ZiwKIH07CkBAIC0xMjMyLDcgKzEyMjIsOSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBuZXRnZWFyX2ZhMTIwX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIk5ldGdlYXIgRkEtMTIwIFVTQiBFdGhlcm5ldCIsCiAJLmJpbmQgPSBheDg4MTd4X2JpbmQsCi0JLnVuYmluZCA9IGF4ODgxN3hfdW5iaW5kLAorCS5zdGF0dXMgPSBheDg4MTd4X3N0YXR1cywKKwkubGlua19yZXNldCA9IGF4ODgxNzJfbGlua19yZXNldCwKKwkucmVzZXQgPSBheDg4MTcyX2xpbmtfcmVzZXQsCiAJLmZsYWdzID0gIEZMQUdfRVRIRVIsCiAJLmRhdGEgPSAweDAwMTMwMTAzLAogfTsKQEAgLTEyNDAsNyArMTIzMiw5IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGhhd2tpbmdfdWYyMDBfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPSAiSGF3a2luZyBVRjIwMCBVU0IgRXRoZXJuZXQiLAogCS5iaW5kID0gYXg4ODE3eF9iaW5kLAotCS51bmJpbmQgPSBheDg4MTd4X3VuYmluZCwKKwkuc3RhdHVzID0gYXg4ODE3eF9zdGF0dXMsCisJLmxpbmtfcmVzZXQgPSBheDg4MTcyX2xpbmtfcmVzZXQsCisJLnJlc2V0ID0gYXg4ODE3Ml9saW5rX3Jlc2V0LAogCS5mbGFncyA9ICBGTEFHX0VUSEVSLAogCS5kYXRhID0gMHgwMDFmMWQxZiwKIH07CkBAIC0xMjQ4LDcgKzEyNDIsOSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4NzcyX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gIkFTSVggQVg4ODc3MiBVU0IgMi4wIEV0aGVybmV0IiwKIAkuYmluZCA9IGF4ODg3NzJfYmluZCwKLQkudW5iaW5kID0gYXg4ODE3eF91bmJpbmQsCisJLnN0YXR1cyA9IGF4ODgxN3hfc3RhdHVzLAorCS5saW5rX3Jlc2V0ID0gYXg4ODc3Ml9saW5rX3Jlc2V0LAorCS5yZXNldCA9IGF4ODg3NzJfbGlua19yZXNldCwKIAkuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYLAogCS5yeF9maXh1cCA9IGF4ODg3NzJfcnhfZml4dXAsCiAJLnR4X2ZpeHVwID0gYXg4ODc3Ml90eF9maXh1cCwKQEAgLTI2NjEsNyArMjY1Nyw3IEBACiAgKiBBbGwga25vd24gWmF1cmlpIGxpZSBhYm91dCB0aGVpciBzdGFuZGFyZHMgY29uZm9ybWFuY2UuICBNb3N0IGxpZSBieQogICogc2F5aW5nIHRoZXkgc3VwcG9ydCBDREMgRXRoZXJuZXQuICBTb21lIGxpZSBhbmQgc2F5IHRoZXkgc3VwcG9ydCBDREMKICAqIE1ETE0gKGFzIGlmIGZvciBhY2Nlc3MgdG8gY2VsbCBwaG9uZSBtb2RlbXMpLiAgU29tZW9uZSwgcGxlYXNlIGJlYXQgCi0gKiBvbiBTaGFycCBmb3IgYSB3aGlsZSB3aXRoIGEgY2x1ZXN0aWNrLgorICogb24gU2hhcnAgKGFuZCBvdGhlciBzdWNoIHZlbmRvcnMpIGZvciBhIHdoaWxlIHdpdGggYSBjbHVlc3RpY2suCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjcxNCwxMyArMjcxMCw2IEBACiB9OwogI2RlZmluZQlaQVVSVVNfUFhBX0lORk8JCSgodW5zaWduZWQgbG9uZykmemF1cnVzX3B4YV9pbmZvKQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCXphdXJ1c19weGFfbWRsbV9pbmZvID0gewotCS5kZXNjcmlwdGlvbiA9CSJTaGFycCBaYXVydXMsIFBYQS0yNTUgYmFzZWQiLAotCS5mbGFncyA9CUZMQUdfRlJBTUlOR19aLAotCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKLQkudHhfZml4dXAgPSAJemF1cnVzX3R4X2ZpeHVwLAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwlvbHltcHVzX214bF9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJPbHltcHVzIFIxMDAwIiwKIAkuZmxhZ3MgPQlGTEFHX0ZSQU1JTkdfWiwKQEAgLTI3MzEsNiArMjcyMCwxMzMgQEAKIH07CiAjZGVmaW5lCU9MWU1QVVNfTVhMX0lORk8JKCh1bnNpZ25lZCBsb25nKSZvbHltcHVzX214bF9pbmZvKQogCisKKy8qIFNvbWUgbW9yZSByZWNlbnQgcHJvZHVjdHMgdXNpbmcgTGluZW8vQmVsY2FycmEgY29kZSB3aWxsIHdyb25nbHkgY2xhaW0KKyAqIENEQyBNRExNIGNvbmZvcm1hbmNlLiAgVGhleSBhcmVuJ3QgY29uZm9ybWFudDogIGRhdGEgZW5kcG9pbnRzIGxpdmUKKyAqIGluIHRoZSBjb250cm9sIGludGVyZmFjZSwgdGhlcmUncyBubyBkYXRhIGludGVyZmFjZSwgYW5kIGl0J3Mgbm90IHVzZWQKKyAqIHRvIHRhbGsgdG8gYSBjZWxsIHBob25lIHJhZGlvLiAgQnV0IGF0IGxlYXN0IHdlIGNhbiBkZXRlY3QgdGhlc2UgdHdvCisgKiBwc2V1ZG8tY2xhc3NlcywgcmF0aGVyIHRoYW4gZ3Jvd2luZyB0aGlzIHByb2R1Y3QgbGlzdCB3aXRoIGVudHJpZXMgZm9yCisgKiBlYWNoIG5ldyBub25jb25mb3JtYW50IHByb2R1Y3QgKHNpZ2gpLgorICovCitzdGF0aWMgY29uc3QgdTggc2FmZV9ndWlkWzE2XSA9IHsKKwkweDVkLCAweDM0LCAweGNmLCAweDY2LCAweDExLCAweDE4LCAweDExLCAweGQ2LAorCTB4YTIsIDB4MWEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2EsIDB4OWEsIDB4N2YsCit9Oworc3RhdGljIGNvbnN0IHU4IGJsYW5fZ3VpZFsxNl0gPSB7CisJMHg3NCwgMHhmMCwgMHgzZCwgMHhiZCwgMHgxZSwgMHhjMSwgMHg0NCwgMHg3MCwKKwkweGEzLCAweDY3LCAweDcxLCAweDM0LCAweGM5LCAweGY1LCAweDU0LCAweDM3LAorfTsKKworc3RhdGljIGludCBibGFuX21kbG1fYmluZCAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwl1OAkJCQkqYnVmID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmV4dHJhOworCWludAkJCQlsZW4gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZXh0cmFsZW47CisJc3RydWN0IHVzYl9jZGNfbWRsbV9kZXNjCSpkZXNjID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2NkY19tZGxtX2RldGFpbF9kZXNjCSpkZXRhaWwgPSBOVUxMOworCisJd2hpbGUgKGxlbiA+IDMpIHsKKwkJaWYgKGJ1ZiBbMV0gIT0gVVNCX0RUX0NTX0lOVEVSRkFDRSkKKwkJCWdvdG8gbmV4dF9kZXNjOworCisJCS8qIHVzZSBiRGVzY3JpcHRvclN1YlR5cGUsIGFuZCBqdXN0IHZlcmlmeSB0aGF0IHdlIGdldCBhCisJCSAqICJCTEFOIiAob3IgIlNBRkUiKSBkZXNjcmlwdG9yLgorCQkgKi8KKwkJc3dpdGNoIChidWYgWzJdKSB7CisJCWNhc2UgVVNCX0NEQ19NRExNX1RZUEU6CisJCQlpZiAoZGVzYykgeworCQkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJleHRyYSBNRExNXG4iKTsKKwkJCQlnb3RvIGJhZF9kZXNjOworCQkJfQorCQkJZGVzYyA9ICh2b2lkICopIGJ1ZjsKKwkJCWlmIChkZXNjLT5iTGVuZ3RoICE9IHNpemVvZiAqZGVzYykgeworCQkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJNRExNIGxlbiAldVxuIiwKKwkJCQkJZGVzYy0+Ykxlbmd0aCk7CisJCQkJZ290byBiYWRfZGVzYzsKKwkJCX0KKwkJCS8qIGV4cGVjdCBiY2RWZXJzaW9uIDEuMCwgaWdub3JlICovCisJCQlpZiAobWVtY21wKCZkZXNjLT5iR1VJRCwgYmxhbl9ndWlkLCAxNikKKwkJCQkgICAgfHwgbWVtY21wKCZkZXNjLT5iR1VJRCwgYmxhbl9ndWlkLCAxNikgKSB7CisJCQkJLyogaGV5LCB0aGlzIG9uZSBtaWdodCBfcmVhbGx5XyBiZSBNRExNISAqLworCQkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJNRExNIGd1aWRcbiIpOworCQkJCWdvdG8gYmFkX2Rlc2M7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfQ0RDX01ETE1fREVUQUlMX1RZUEU6CisJCQlpZiAoZGV0YWlsKSB7CisJCQkJZGV2X2RiZyAoJmludGYtPmRldiwgImV4dHJhIE1ETE0gZGV0YWlsXG4iKTsKKwkJCQlnb3RvIGJhZF9kZXNjOworCQkJfQorCQkJZGV0YWlsID0gKHZvaWQgKikgYnVmOworCQkJc3dpdGNoIChkZXRhaWwtPmJHdWlkRGVzY3JpcHRvclR5cGUpIHsKKwkJCWNhc2UgMDoJCQkvKiAiU0FGRSIgKi8KKwkJCQlpZiAoZGV0YWlsLT5iTGVuZ3RoICE9IChzaXplb2YgKmRldGFpbCArIDIpKQorCQkJCQlnb3RvIGJhZF9kZXRhaWw7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CQkJLyogIkJMQU4iICovCisJCQkJaWYgKGRldGFpbC0+Ykxlbmd0aCAhPSAoc2l6ZW9mICpkZXRhaWwgKyAzKSkKKwkJCQkJZ290byBiYWRfZGV0YWlsOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlnb3RvIGJhZF9kZXRhaWw7CisJCQl9CisKKwkJCS8qIGFzc3VtaW5nIHdlIGVpdGhlciBub3RpY2VkIEJMQU4gYWxyZWFkeSwgb3Igd2lsbAorCQkJICogZmluZCBpdCBzb29uLCB0aGVyZSBhcmUgc29tZSBkYXRhIGJ5dGVzIGhlcmU6CisJCQkgKiAgLSBibU5ldHdvcmtDYXBhYmlsaXRpZXMgKHVudXNlZCkKKwkJCSAqICAtIGJtRGF0YUNhcGFiaWxpdGllcyAoYml0cywgc2VlIGJlbG93KQorCQkJICogIC0gYlBhZCAoaWdub3JlZCwgZm9yIFBBREFGVEVSIC0tIEJMQU4tb25seSkKKwkJCSAqIGJpdHMgYXJlOgorCQkJICogIC0gMHgwMSAtLSBaYXVydXMgZnJhbWluZyAoYWRkIENSQykKKwkJCSAqICAtIDB4MDIgLS0gUEFEQkVGT1JFCisJCQkgKiAgLSAweDA0IC0tIFBBREFGVEVSCisJCQkgKiAgLSAweDA4IC0tICJmZXJtYXQiIHBhY2tldCBtYW5nbGluZyAoZm9yIGh3IGJ1Z3MpCisJCQkgKi8KKwkJCWlmIChkZXRhaWwtPmJEZXRhaWxEYXRhWzFdICE9IDB4MDEpIHsKKwkJCQkvKiBibURhdGFDYXBhYmlsaXRlcyA9PSAwIHdvdWxkIGJlIGZpbmUgdG9vLAorCQkJCSAqIGJ1dCBmcmFtaW5nIGlzIG1pbmlkcml2ZXItY291cGxlZCBmb3Igbm93LgorCQkJCSAqLworYmFkX2RldGFpbDoKKwkJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJCQkJImJhZCBNRExNIGRldGFpbCwgJWQgJWQgJWRcbiIsCisJCQkJCQlkZXRhaWwtPmJMZW5ndGgsCisJCQkJCQlkZXRhaWwtPmJEZXRhaWxEYXRhWzBdLAorCQkJCQkJZGV0YWlsLT5iRGV0YWlsRGF0YVsyXSk7CisJCQkJZ290byBiYWRfZGVzYzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CituZXh0X2Rlc2M6CisJCWxlbiAtPSBidWYgWzBdOwkvKiBiTGVuZ3RoICovCisJCWJ1ZiArPSBidWYgWzBdOworCX0KKworCWlmICghZGVzYyB8fCAhZGV0YWlsKSB7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJtaXNzaW5nIGNkYyBtZGxtICVzJXNkZXNjcmlwdG9yXG4iLAorCQkJZGVzYyA/ICIiIDogImZ1bmMgIiwKKwkJCWRldGFpbCA/ICIiIDogImRldGFpbCAiKTsKKwkJZ290byBiYWRfZGVzYzsKKwl9CisKKwkvKiBUaGVyZSdzIHByb2JhYmx5IGEgQ0RDIEV0aGVybmV0IGRlc2NyaXB0b3IgdGhlcmUsIGJ1dCB3ZSBjYW4ndAorCSAqIHJlbHkgb24gdGhlIEV0aGVybmV0IGFkZHJlc3MgaXQgcHJvdmlkZXMgc2luY2Ugbm90IGFsbCB2ZW5kb3JzCisJICogYm90aGVyIHRvIG1ha2UgaXQgdW5pcXVlLiAgTGlrZXdpc2UgdGhlcmUncyBubyBwb2ludCBpbiB0cmFja2luZworCSAqIG9mIHRoZSBDREMgZXZlbnQgbm90aWZpY2F0aW9ucy4KKwkgKi8KKwlyZXR1cm4gZ2V0X2VuZHBvaW50cyAoZGV2LCBpbnRmKTsKKworYmFkX2Rlc2M6CisJZGV2X2luZm8gKCZkZXYtPnVkZXYtPmRldiwgInVuc3VwcG9ydGVkIE1ETE0gZGVzY3JpcHRvcnNcbiIpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWJvZ3VzX21kbG1faW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkicHNldWRvLU1ETE0gKEJMQU4pIGRldmljZSIsCisJLmZsYWdzID0JRkxBR19GUkFNSU5HX1osCisJLmNoZWNrX2Nvbm5lY3QgPSBhbHdheXNfY29ubmVjdGVkLAorCS50eF9maXh1cCA9IAl6YXVydXNfdHhfZml4dXAsCisJLmJpbmQgPQkJYmxhbl9tZGxtX2JpbmQsCit9OworCiAjZWxzZQogCiAvKiBibGFja2xpc3QgYWxsIHRob3NlIGRldmljZXMgKi8KQEAgLTMzMDcsNiArMzQyMywxOSBAQAogCQl9CiAJfQogCisJaWYgKHRlc3RfYml0IChFVkVOVF9MSU5LX1JFU0VULCAmZGV2LT5mbGFncykpIHsKKwkJc3RydWN0IGRyaXZlcl9pbmZvIAkqaW5mbyA9IGRldi0+ZHJpdmVyX2luZm87CisJCWludAkJCXJldHZhbCA9IDA7CisKKwkJY2xlYXJfYml0IChFVkVOVF9MSU5LX1JFU0VULCAmZGV2LT5mbGFncyk7CisJCWlmKGluZm8tPmxpbmtfcmVzZXQgJiYgKHJldHZhbCA9IGluZm8tPmxpbmtfcmVzZXQoZGV2KSkgPCAwKSB7CisJCQlkZXZpbmZvKGRldiwgImxpbmsgcmVzZXQgZmFpbGVkICglZCkgdXNibmV0IHVzYi0lcy0lcywgJXMiLAorCQkJCXJldHZhbCwKKwkJCQlkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+dWRldi0+ZGV2cGF0aCwKKwkJCQlpbmZvLT5kZXNjcmlwdGlvbik7CisJCX0KKwl9CisKIAlpZiAoZGV2LT5mbGFncykKIAkJZGV2ZGJnIChkZXYsICJrZXZlbnQgZG9uZSwgZmxhZ3MgPSAweCVseCIsCiAJCQlkZXYtPmZsYWdzKTsKQEAgLTM5NDIsNiArNDA3MSw5IEBACiAJVVNCX0RFVklDRSAoMHg4MDg2LCAweDA3ZDMpLAkvLyAiYmxvYiIgYm9vdGxvYWRlcgogCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmYmxvYl9pbmZvLAogfSwgeworCVVTQl9ERVZJQ0UgKDB4MjJiOCwgMHg2MDBjKSwJLy8gVVNCTkVUIE1vdG9yb2xhIEU2ODAKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmxpbnV4ZGV2X2luZm8sCit9LCB7CiAJLy8gTGludXggRXRoZXJuZXQvUk5ESVMgZ2FkZ2V0IG9uIHB4YTIxMC8yNXgvMjZ4CiAJLy8gZS5nLiBHdW1zdGl4LCBjdXJyZW50IE9wZW5aYXVydXMsIC4uLgogCVVTQl9ERVZJQ0VfVkVSICgweDA1MjUsIDB4YTRhMiwgMHgwMjAzLCAweDAyMDMpLApAQCAtNDAyMCwzMCArNDE1MiwxNCBAQAogfSwKIAogI2lmZGVmCUNPTkZJR19VU0JfWkFVUlVTCi0JLyogYXQgbGVhc3Qgc29tZSAocmVwb3J0cyB2YXJ5KSBQWEEgdW5pdHMgaGF2ZSB2ZXJ5IGRpZmZlcmVudAotCSAqIGxpZXMgYWJvdXQgdGhlaXIgc3RhbmRhcmRzIHN1cHBvcnQ6ICB0aGV5IGNsYWltIHRvIGJlIGNlbGwKLQkgKiBwaG9uZXMgZ2l2aW5nIGRpcmVjdCByYWRpbyBhY2Nlc3MgKHdoaWNoIHRoZXkgYXJlbid0KS4KKwkvKiBBdCBsZWFzdCBzb21lIChyZXBvcnRzIHZhcnkpIFBYQSB1bml0cyBoYXZlIHZlcnkgZGlmZmVyZW50IGxpZXMKKwkgKiBhYm91dCB0aGVpciBzdGFuZGFyZHMgc3VwcG9ydDogIHRoZXkgY2xhaW0gdG8gYmUgY2VsbCBwaG9uZXMgd2l0aAorCSAqIGRpcmVjdCBhY2Nlc3MgdG8gdGhlaXIgcmFkaW9zLiAgKFRoZXkgZG9uJ3QgY29uZm9ybSB0byBDREMgTURMTS4pCiAJICovCiB7Ci0JLm1hdGNoX2ZsYWdzICAgID0gICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPCi0JCSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAotCS5pZFZlbmRvciAgICAgICAgICAgICAgID0gMHgwNERELAotCS8qIFNoYXJwIFJPTSB2MS4zMiAqLwotCS5pZFByb2R1Y3QJCT0gMHg4MDA2LAkvKiBTTC01NjAwICovCi0JLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19DT01NLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MJPSBVU0JfQ0RDX1NVQkNMQVNTX01ETE0sCi0JLmJJbnRlcmZhY2VQcm90b2NvbAk9IFVTQl9DRENfUFJPVE9fTk9ORSwKLQkuZHJpdmVyX2luZm8gCQk9ICh1bnNpZ25lZCBsb25nKSAmemF1cnVzX3B4YV9tZGxtX2luZm8sCi19LCB7Ci0JLm1hdGNoX2ZsYWdzICAgID0gICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPCi0JCSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAotCS5pZFZlbmRvciAgICAgICAgICAgICAgID0gMHgwNERELAotCS8qIHJlcG9ydGVkIHdpdGggc29tZSBDODYwIHVuaXRzICovCi0JLmlkUHJvZHVjdCAgICAgICAgICAgICAgPSAweDkwMzEsCS8qIEMtODYwICovCi0JLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19DT01NLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MJPSBVU0JfQ0RDX1NVQkNMQVNTX01ETE0sCi0JLmJJbnRlcmZhY2VQcm90b2NvbAk9IFVTQl9DRENfUFJPVE9fTk9ORSwKLQkuZHJpdmVyX2luZm8gCQk9ICh1bnNpZ25lZCBsb25nKSAmemF1cnVzX3B4YV9tZGxtX2luZm8sCisJVVNCX0lOVEVSRkFDRV9JTkZPIChVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19NRExNLAorCQkJVVNCX0NEQ19QUk9UT19OT05FKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmJvZ3VzX21kbG1faW5mbywKIH0sCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3pkMTIwMS5jIGIvZHJpdmVycy91c2IvbmV0L3pkMTIwMS5jCmluZGV4IGM4MWNkMGEuLjM0MWFlNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC96ZDEyMDEuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB6ZDEyMDFfdGFibGUpOwogCiAKLWludCB6ZDEyMDFfZndfdXBsb2FkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBhcGZ3KQorc3RhdGljIGludCB6ZDEyMDFfZndfdXBsb2FkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBhcGZ3KQogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CiAJY2hhciogZGF0YTsKQEAgLTExMSw3ICsxMTEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgemQxMjAxX3VzYmZyZWUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHpkMTIwMV91c2JmcmVlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHpkMTIwMSAqemQgPSB1cmItPmNvbnRleHQ7CiAKQEAgLTE0Miw3ICsxNDIsOCBAQAogCiAJdG90YWw6IDQgKyAyICsgMiArIDIgKyAyICsgNCA9IDE2CiAqLwotaW50IHpkMTIwMV9kb2NtZChzdHJ1Y3QgemQxMjAxICp6ZCwgaW50IGNtZCwgaW50IHBhcm0wLCBpbnQgcGFybTEsIGludCBwYXJtMikKK3N0YXRpYyBpbnQgemQxMjAxX2RvY21kKHN0cnVjdCB6ZDEyMDEgKnpkLCBpbnQgY21kLCBpbnQgcGFybTAsCisJCQlpbnQgcGFybTEsIGludCBwYXJtMikKIHsKIAl1bnNpZ25lZCBjaGFyICpjb21tYW5kOwogCWludCByZXQ7CkBAIC0xNzUsMTUgKzE3NiwxNSBAQAogfQogCiAvKiBDYWxsYmFjayBhZnRlciBzZW5kaW5nIG91dCBhIHBhY2tldCAqLwotdm9pZCB6ZDEyMDFfdXNidHgoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHpkMTIwMV91c2J0eChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB6ZDEyMDEgKnpkID0gdXJiLT5jb250ZXh0OwogCW5ldGlmX3dha2VfcXVldWUoemQtPmRldik7CiAJcmV0dXJuOwogfQogCi0vKiBJbmNvbW1pbmcgZGF0YSAqLwotdm9pZCB6ZDEyMDFfdXNicngoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKKy8qIEluY29taW5nIGRhdGEgKi8KK3N0YXRpYyB2b2lkIHpkMTIwMV91c2JyeChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB6ZDEyMDEgKnpkID0gdXJiLT5jb250ZXh0OwogCWludCBmcmVlID0gMDsKQEAgLTYxMyw3ICs2MTQsNyBAQAogCXJldHVybiAoemQxMjAxX3NldGNvbmZpZyh6ZCwgcmlkLCAmemR2YWwsIHNpemVvZihfX2xlMTYpLCAxKSk7CiB9CiAKLWludCB6ZDEyMDFfZHJ2cl9zdGFydChzdHJ1Y3QgemQxMjAxICp6ZCkKK3N0YXRpYyBpbnQgemQxMjAxX2RydnJfc3RhcnQoc3RydWN0IHpkMTIwMSAqemQpCiB7CiAJaW50IGVyciwgaTsKIAlzaG9ydCBtYXg7CkBAIC03NzEsNyArNzcyLDcgQEAKIC8qCiAJUkZDIDEwNDIgZW5jYXBzdWxhdGVzIEV0aGVybmV0IGZyYW1lcyBpbiA4MDIuMTEgZnJhbWVzCiAJYnkgcHJlZml4aW5nIHRoZW0gd2l0aCAweGFhLCAweGFhLCAweDAzKSBmb2xsb3dlZCBieSBhIFNOQVAgT0lEIG9mIDAKLQkoMHgwMCwgMHgwMCwgMHgwMCkuIFpkIHJlcXVpcmVzIGFuIGFkZGl0aW9ubmFsIHBhZGRpbmcsIGNvcHkKKwkoMHgwMCwgMHgwMCwgMHgwMCkuIFpkIHJlcXVpcmVzIGFuIGFkZGl0aW9uYWwgcGFkZGluZywgY29weQogCW9mIGV0aGVybmV0IGFkZHJlc3NlcywgbGVuZ3RoIG9mIHRoZSBzdGFuZGFyZCBSRkMgMTA0MiBwYWNrZXQKIAlhbmQgYSBjb21tYW5kIGJ5dGUgKHdoaWNoIGlzIG51bCBmb3IgdHgpLgogCQpAQCAtMTA5Nyw3ICsxMDk4LDcgQEAKIAogLyoJTGl0dGxlIGJpdCBvZiBtYWdpYyBoZXJlOiB3ZSBvbmx5IGdldCB0aGUgcXVhbGl0eSBpZiB3ZSBwb2xsCiAgKglmb3IgaXQsIGFuZCB3ZSBuZXZlciBnZXQgYW4gYWN0dWFsIHJlcXVlc3QgdG8gdHJpZ2dlciBzdWNoCi0gKglhIHBvbGwuIFRoZXJlZm9yZSB3ZSAnYXN1bWUnIHRoYXQgdGhlIHVzZXIgd2lsbCBzb29uIGFzayBmb3IKKyAqCWEgcG9sbC4gVGhlcmVmb3JlIHdlICdhc3N1bWUnIHRoYXQgdGhlIHVzZXIgd2lsbCBzb29uIGFzayBmb3IKICAqCXRoZSBzdGF0cyBhZnRlciBhc2tpbmcgdGhlIGJzc2lkLgogICovCiBzdGF0aWMgaW50IHpkMTIwMV9nZXRfd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xMTA3LDcgKzExMDgsNyBAQAogCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzZdOwogCiAJaWYgKCF6ZDEyMDFfZ2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NPTU1TUVVBTElUWSwgYnVmZmVyLCA2KSkgewotCQkvKiBVbmZvcnR1bmF0bHkgdGhlIHF1YWxpdHkgYW5kIG5vaXNlIHJlcG9ydGVkIGlzIHVzZWxlc3MuCisJCS8qIFVuZm9ydHVuYXRlbHkgdGhlIHF1YWxpdHkgYW5kIG5vaXNlIHJlcG9ydGVkIGlzIHVzZWxlc3MuCiAJCSAgIHRoZXkgc2VlbSB0byBiZSBhY2N1bXVsYXRvcnMgdGhhdCBpbmNyZWFzZSB1bnRpbCB5b3UKIAkJICAgcmVhZCB0aGVtLCB1bmxlc3Mgd2UgcG9sbCBvbiBhIGZpeGVkIGludGVydmFsIHdlIGNhbid0CiAJCSAgIHVzZSB0aGVtCkBAIC0xNzM5LDcgKzE3NDAsOCBAQAogCS5wcml2YXRlX2FyZ3MgCQk9IChzdHJ1Y3QgaXdfcHJpdl9hcmdzICopIHpkMTIwMV9wcml2YXRlX2FyZ3MsCiB9OwogCi1pbnQgemQxMjAxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgemQxMjAxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHpkMTIwMSAqemQ7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYjsKQEAgLTE4NTEsNyArMTg1Myw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotdm9pZCB6ZDEyMDFfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQorc3RhdGljIHZvaWQgemQxMjAxX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAlzdHJ1Y3QgemQxMjAxICp6ZD0oc3RydWN0IHpkMTIwMSAqKXVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5vZGUyOwpAQCAtMTg4Miw3ICsxODg0LDcgQEAKIAlrZnJlZSh6ZCk7CiB9CiAKLXN0cnVjdCB1c2JfZHJpdmVyIHpkMTIwMV91c2IgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgemQxMjAxX3VzYiA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSA9ICJ6ZDEyMDEiLAogCS5wcm9iZSA9IHpkMTIwMV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKaW5kZXggYjg2OTA3Ni4uYmM3OThlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKQEAgLTUzLDYgKzUzLDE1IEBACiAJICBzdXBwb3J0IiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSBmb3IgdGhpcyBkcml2ZXIgdG8gYmUgdXNlZAogCSAgcHJvcGVybHkuCiAKK2NvbmZpZyBVU0JfU0VSSUFMX0FJUlBSSU1FCisJdHJpc3RhdGUgIlVTQiBBaXJQcmltZSBDRE1BIFdpcmVsZXNzIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIEFpclByaW1lIENETUEgV2lyZWxlc3MgUEMgY2FyZC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWlycHJpbWUuCisKIGNvbmZpZyBVU0JfU0VSSUFMX0JFTEtJTgogCXRyaXN0YXRlICJVU0IgQmVsa2luIGFuZCBQZXJhY29tIFNpbmdsZSBQb3J0IFNlcmlhbCBEcml2ZXIiCiAJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCkBAIC0zOTUsNiArNDA0LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwbDIzMDMuCiAKK2NvbmZpZyBVU0JfU0VSSUFMX0hQNFgKKyAgICAgICAgdHJpc3RhdGUgIlVTQiBIUDR4IENhbGN1bGF0b3JzIHN1cHBvcnQiCisgICAgICAgIGRlcGVuZHMgb24gVVNCX1NFUklBTAorICAgICAgICBoZWxwCisgICAgICAgICAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYW4gSGV3bGV0dC1QYWNrYXJkIDR4IENhbGN1bGF0b3IuCisKKyAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKyAgICAgICAgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaHA0eC4KKwogY29uZmlnIFVTQl9TRVJJQUxfU0FGRQogCXRyaXN0YXRlICJVU0IgU2FmZSBTZXJpYWwgKEVuY2Fwc3VsYXRlZCkgRHJpdmVyIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQppbmRleCAzNTFiODE4Li5kNTZmZjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCkBAIC0xMSw2ICsxMSw3IEBACiAKIHVzYnNlcmlhbC1vYmpzCTo9IHVzYi1zZXJpYWwubyBnZW5lcmljLm8gYnVzLm8gJCh1c2JzZXJpYWwtb2JqLXkpCiAKK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FKQkJKz0gYWlycHJpbWUubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOKQkJCSs9IGJlbGtpbl9zYS5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEpCQkJKz0gY3AyMTAxLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSykJCSs9IGN5YmVyamFjay5vCkBAIC0yMSw2ICsyMiw3IEBACiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9FTVBFRykJCQkrPSBlbXBlZy5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTykJCSs9IGZ0ZGlfc2lvLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTikJCQkrPSBnYXJtaW5fZ3BzLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0hQNFgpCQkJKz0gaHA0eC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9JUEFRKQkJCSs9IGlwYXEubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfSVBXKQkJCSs9IGlwdy5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9JUikJCQkrPSBpci11c2IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYWlycHJpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGNlMDAwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIEFpclByaW1lIENETUEgV2lyZWxlc3MgU2VyaWFsIFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4ZjNkLCAweDAxMTIpIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhaXJwcmltZV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImFpcnByaW1lIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGFpcnByaW1lX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJhaXJwcmltZSIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0ID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cyA9CQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWlycHJpbWVfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZhaXJwcmltZV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZhaXJwcmltZV9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYWlycHJpbWVfZGV2aWNlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWlycHJpbWVfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZhaXJwcmltZV9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYWlycHJpbWVfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoYWlycHJpbWVfaW5pdCk7Cittb2R1bGVfZXhpdChhaXJwcmltZV9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCmluZGV4IGQxNjVmNDIuLmYzNGE5YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwpAQCAtMTYsNiArMTYsMTQgQEAKICAqIFNlZSBodHRwOi8vZ2VvY2l0aWVzLmNvbS9pMHhveDBpIGZvciBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciBhbmQgdGhlCiAgKiBlYXJ0aG1hdGUgdXNiIGRldmljZS4KICAqCisgKiAgTG9ubmllIE1lbmRleiA8ZGlnbm9tZUBnbWFpbC5jb20+CisgKiAgNC0yOS0yMDA1CisgKglGaXhlZCBwcm9ibGVtIHdoZXJlIHNldHRpbmcgb3IgcmV0cmVpdmluZyB0aGUgc2VyaWFsIGNvbmZpZyB3b3VsZCBmYWlsIHdpdGgKKyAqIAlFUElQRS4gIFJlbW92ZWQgQ1JUUyB0b2dnbGluZyBzbyB0aGUgZHJpdmVyIGJlaGF2ZXMgbW9yZSBsaWtlIG90aGVyIHVzYnNlcmlhbAorICogCWFkYXB0ZXJzLiAgSXNzdWVkIG5ldyBpbnRlcnZhbCBvZiAxbXMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAxMG1zLiAgQXMgYQorICogCXJlc3VsdCwgdHJhbnNmZXIgc3BlZWQgaGFzIGJlZW4gc3Vic3RhbnRpYWxseSBpbmNyZWFzZWQuICBGcm9tIGF2Zy4gODUwYnBzIHRvCisgKiAJYXZnLiAzMzAwYnBzLiAgaW5pdGlhbCB0ZXJtaW9zIGhhcyBhbHNvIGJlZW4gbW9kaWZpZWQuICBDbGVhbmVkIHVwIGNvZGUgYW5kCisgKiAJZm9ybWF0dGluZyBpc3N1ZXMgc28gaXQgaXMgbW9yZSByZWFkYWJsZS4gIFJlcGxhY2VkIHRoZSBDKysgc3R5bGUgY29tbWVudHMuCiAgKgogICogIExvbm5pZSBNZW5kZXogPGRpZ25vbWVAZ21haWwuY29tPgogICogIDEyLTE1LTIwMDQKQEAgLTMyLDEyICs0MCw2IEBACiAgKiAgMTAtMjAwMwogICoJRHJpdmVyIGZpcnN0IHJlbGVhc2VkLgogICoKLSAqCi0gKiBMb25nIFRlcm0gVE9ETzoKLSAqCUltcHJvdmUgdHJhbnNmZXIgc3BlZWRzIC0gYm90aCByZWFkL3dyaXRlIGFyZSBzb21ld2hhdCBzbG93Ci0gKiAgIGF0IHRoaXMgcG9pbnQuCi0gKiAgICAgIEltcHJvdmUgZGVidWdnaW5nLiAgU2hvdyBtb2RlbSBsaW5lIHN0YXR1cyB3aXRoIGRlYnVnIG91dHB1dCBhbmQKLSAqICAgaW1wbGVtZW50IGZpbHRlcmluZyBmb3IgY2VydGFpbiBkYXRhIGFzIGEgbW9kdWxlIHBhcmFtZXRlci4KICAqLwogCiAvKiBUaGFua3MgdG8gTmVpbCBXaGVsY2hlbCBmb3Igd3JpdGluZyB0aGUgZmlyc3QgY3lwcmVzcyBtOCBpbXBsZW1lbnRhdGlvbiBmb3IgbGludXguICovCkBAIC03MiwxMSArNzQsMTIgQEAKIAlzdGF0aWMgaW50IGRlYnVnOwogI2VuZGlmCiBzdGF0aWMgaW50IHN0YXRzOworc3RhdGljIGludCBpbnRlcnZhbDsKIAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMDgiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4wOSIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTG9ubmllIE1lbmRleiA8ZGlnbm9tZUBnbWFpbC5jb20+LCBOZWlsIFdoZWxjaGVsIDxrb3lhbWFAZmlyc3RsaWdodC5uZXQ+IgogI2RlZmluZSBEUklWRVJfREVTQyAiQ3lwcmVzcyBVU0IgdG8gU2VyaWFsIERyaXZlciIKIApAQCAtMTMwLDcgKzEzMyw2IEBACiAJY2hhciBwcmV2X3N0YXR1cywgZGlmZl9zdGF0dXM7CSAgIC8qIHVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KIAkvKiB3ZSBwYXNzIGEgcG9pbnRlciB0byB0aGlzIGFzIHRoZSBhcmd1ZW1lbnQgc2VudCB0byBjeXByZXNzX3NldF90ZXJtaW9zIG9sZF90ZXJtaW9zICovCiAJc3RydWN0IHRlcm1pb3MgdG1wX3Rlcm1pb3M7IAkgICAvKiBzdG9yZXMgdGhlIG9sZCB0ZXJtaW9zIHNldHRpbmdzICovCi0JY2hhciBjYWxsZWRmcm9tb3BlbjsJCSAgIC8qIHVzZWQgd2hlbiBpc3N1aW5nIGxpbmVzIG9uIG9wZW4gLSBmaXhlcyBydHMgZHJvcCBidWcgKi8KIH07CiAKIC8qIHdyaXRlIGJ1ZmZlciBzdHJ1Y3R1cmUgKi8KQEAgLTE2OCwxMCArMTcwLDggQEAKIHN0YXRpYyB2b2lkCQkgIGN5cHJlc3NfYnVmX2NsZWFyKHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IpOwogc3RhdGljIHVuc2lnbmVkIGludAkgIGN5cHJlc3NfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGN5cHJlc3NfYnVmICpjYik7CiBzdGF0aWMgdW5zaWduZWQgaW50CSAgY3lwcmVzc19idWZfc3BhY2VfYXZhaWwoc3RydWN0IGN5cHJlc3NfYnVmICpjYik7Ci1zdGF0aWMgdW5zaWduZWQgaW50CSAgY3lwcmVzc19idWZfcHV0KHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkJICB1bnNpZ25lZCBpbnQgY291bnQpOwotc3RhdGljIHVuc2lnbmVkIGludAkgIGN5cHJlc3NfYnVmX2dldChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiLCBjaGFyICpidWYsCi0JCQkJCSAgdW5zaWduZWQgaW50IGNvdW50KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJICBjeXByZXNzX2J1Zl9wdXQoc3RydWN0IGN5cHJlc3NfYnVmICpjYiwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpOworc3RhdGljIHVuc2lnbmVkIGludAkgIGN5cHJlc3NfYnVmX2dldChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBjb3VudCk7CiAKIAogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGN5cHJlc3NfZWFydGhtYXRlX2RldmljZSA9IHsKQEAgLTIzNCwxNCArMjM0LDEzIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotLyogVGhpcyBmdW5jdGlvbiBjYW4gZWl0aGVyIHNldCBvciByZXRyZWl2ZSB0aGUgY3VycmVudCBzZXJpYWwgbGluZSBzZXR0aW5ncyAqLworLyogVGhpcyBmdW5jdGlvbiBjYW4gZWl0aGVyIHNldCBvciByZXRyaWV2ZSB0aGUgY3VycmVudCBzZXJpYWwgbGluZSBzZXR0aW5ncyAqLwogc3RhdGljIGludCBjeXByZXNzX3NlcmlhbF9jb250cm9sIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBiYXVkX21hc2ssIGludCBkYXRhX2JpdHMsIGludCBzdG9wX2JpdHMsCiAJCQkJICAgaW50IHBhcml0eV9lbmFibGUsIGludCBwYXJpdHlfdHlwZSwgaW50IHJlc2V0LCBpbnQgY3lwcmVzc19yZXF1ZXN0X3R5cGUpCiB7Ci0JaW50IGksIG5fYmF1ZF9yYXRlID0gMCwgcmV0dmFsID0gMDsKKwlpbnQgbmV3X2JhdWRyYXRlID0gMCwgcmV0dmFsID0gMCwgdHJpZXMgPSAwOwogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXY7Ci0JX191OCBmZWF0dXJlX2J1ZmZlcls1XTsKLQlfX3U4IGNvbmZpZzsKKwlfX3U4IGZlYXR1cmVfYnVmZmVyWzhdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKQEAgLTI1Niw3ICsyNTUsOCBAQAogIAkJCSAqIG9mIDU3NjAwYnBzIChJIGhhdmUgbm8gaWRlYSB3aGV0aGVyIERlTG9ybWUgY2hvc2UgdG8gdXNlIHRoZSBnZW5lcmFsIHB1cnBvc2UKIAkJCSAqIGZpcm13YXJlIG9yIG5vdCksIGlmIHlvdSBuZWVkIHRvIG1vZGlmeSB0aGlzIHNwZWVkIHNldHRpbmcgZm9yIHlvdXIgb3duCiAJCQkgKiBwcm9qZWN0IHBsZWFzZSBhZGQgeW91ciBvd24gY2hpcHR5cGUgYW5kIG1vZGlmeSB0aGUgY29kZSBsaWtld2lzZS4gIFRoZQotCQkJICogQ3lwcmVzcyBISUQtPkNPTSBkZXZpY2Ugd2lsbCB3b3JrIHN1Y2Nlc3NmdWxseSB1cCB0byAxMTUyMDBicHMuCisJCQkgKiBDeXByZXNzIEhJRC0+Q09NIGRldmljZSB3aWxsIHdvcmsgc3VjY2Vzc2Z1bGx5IHVwIHRvIDExNTIwMGJwcyAoYnV0IHRoZQorCQkJICogYWN0dWFsIHRocm91Z2hwdXQgaXMgYXJvdW5kIDNrQnBzKS4KIAkJCSAqLwogCQkJaWYgKGJhdWRfbWFzayAhPSBwcml2LT5jYnJfbWFzaykgewogCQkJCWRiZygiJXMgLSBiYXVkIHJhdGUgaXMgY2hhbmdpbmciLCBfX0ZVTkNUSU9OX18pOwpAQCAtMjY1LDEwOSArMjY1LDExNCBAQAogCQkJCQkgKiBidXQgYXJlIG5vdCB1c2VkIHdpdGggTk1FQSBhbmQgU2lSRiBwcm90b2NvbHMgKi8KIAkJCQkJCiAJCQkJCWlmICggKGJhdWRfbWFzayA9PSBCMzAwKSB8fCAoYmF1ZF9tYXNrID09IEI2MDApICkgewotCQkJCQkJZXJyKCIlcyAtIGZhaWxlZCBzZXR0aW5nIGJhdWQgcmF0ZSwgdW5zdXBwb3J0ZWQgc3BlZWQgKGRlZmF1bHQgdG8gNDgwMCkiLAorCQkJCQkJZXJyKCIlcyAtIGZhaWxlZCBzZXR0aW5nIGJhdWQgcmF0ZSwgdW5zdXBwb3J0ZWQgc3BlZWQiLAogCQkJCQkJICAgIF9fRlVOQ1RJT05fXyk7Ci0JCQkJCQluX2JhdWRfcmF0ZSA9IDQ4MDA7Ci0JCQkJCX0gZWxzZSBpZiAoIChuX2JhdWRfcmF0ZSA9IG1hc2tfdG9fcmF0ZShiYXVkX21hc2spKSA9PSAtMSkgewotCQkJCQkJZXJyKCIlcyAtIGZhaWxlZCBzZXR0aW5nIGJhdWQgcmF0ZSwgdW5zdXBwb3J0ZWQgc3BlZWQgKGRlZmF1bHQgdG8gNDgwMCkiLAorCQkJCQkJbmV3X2JhdWRyYXRlID0gcHJpdi0+YmF1ZF9yYXRlOworCQkJCQl9IGVsc2UgaWYgKCAobmV3X2JhdWRyYXRlID0gbWFza190b19yYXRlKGJhdWRfbWFzaykpID09IC0xKSB7CisJCQkJCQllcnIoIiVzIC0gZmFpbGVkIHNldHRpbmcgYmF1ZCByYXRlLCB1bnN1cHBvcnRlZCBzcGVlZCIsCiAJCQkJCQkgICAgX19GVU5DVElPTl9fKTsKLQkJCQkJCW5fYmF1ZF9yYXRlID0gNDgwMDsKKwkJCQkJCW5ld19iYXVkcmF0ZSA9IHByaXYtPmJhdWRfcmF0ZTsKIAkJCQkJfQogCQkJCX0gZWxzZSBpZiAocHJpdi0+Y2hpcHR5cGUgPT0gQ1RfQ1lQSElEQ09NKSB7Ci0JCQkJCWlmICggKG5fYmF1ZF9yYXRlID0gbWFza190b19yYXRlKGJhdWRfbWFzaykpID09IC0xKSB7Ci0JCQkJCQllcnIoIiVzIC0gZmFpbGVkIHNldHRpbmcgYmF1ZCByYXRlLCB1bnN1cHBvcnRlZCBzcGVlZCAoZGVmYXVsdCB0byA0ODAwKSIsCisJCQkJCWlmICggKG5ld19iYXVkcmF0ZSA9IG1hc2tfdG9fcmF0ZShiYXVkX21hc2spKSA9PSAtMSkgeworCQkJCQkJZXJyKCIlcyAtIGZhaWxlZCBzZXR0aW5nIGJhdWQgcmF0ZSwgdW5zdXBwb3J0ZWQgc3BlZWQiLAogCQkJCQkJICAgIF9fRlVOQ1RJT05fXyk7Ci0JCQkJCQluX2JhdWRfcmF0ZSA9IDQ4MDA7CisJCQkJCQluZXdfYmF1ZHJhdGUgPSBwcml2LT5iYXVkX3JhdGU7CiAJCQkJCX0KIAkJCQl9IGVsc2UgaWYgKHByaXYtPmNoaXB0eXBlID09IENUX0dFTkVSSUMpIHsKLQkJCQkJaWYgKCAobl9iYXVkX3JhdGUgPSBtYXNrX3RvX3JhdGUoYmF1ZF9tYXNrKSkgPT0gLTEpIHsKLQkJCQkJCWVycigiJXMgLSBmYWlsZWQgc2V0dGluZyBiYXVkIHJhdGUsIHVuc3VwcG9ydGVkIHNwZWVkIChkZWZhdWx0IHRvIDQ4MDApIiwKKwkJCQkJaWYgKCAobmV3X2JhdWRyYXRlID0gbWFza190b19yYXRlKGJhdWRfbWFzaykpID09IC0xKSB7CisJCQkJCQllcnIoIiVzIC0gZmFpbGVkIHNldHRpbmcgYmF1ZCByYXRlLCB1bnN1cHBvcnRlZCBzcGVlZCIsCiAJCQkJCQkgICAgX19GVU5DVElPTl9fKTsKLQkJCQkJCW5fYmF1ZF9yYXRlID0gNDgwMDsKKwkJCQkJCW5ld19iYXVkcmF0ZSA9IHByaXYtPmJhdWRfcmF0ZTsKIAkJCQkJfQogCQkJCX0gZWxzZSB7Ci0JCQkJCWluZm8oIiVzIC0gcGxlYXNlIGRlZmluZSB5b3VyIGNoaXB0eXBlLCB1c2luZyA0ODAwYnBzIGRlZmF1bHQiLCBfX0ZVTkNUSU9OX18pOwotCQkJCQluX2JhdWRfcmF0ZSA9IDQ4MDA7CisJCQkJCWluZm8oIiVzIC0gcGxlYXNlIGRlZmluZSB5b3VyIGNoaXB0eXBlIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJbmV3X2JhdWRyYXRlID0gcHJpdi0+YmF1ZF9yYXRlOwogCQkJCX0KIAkJCX0gZWxzZSB7ICAvKiBiYXVkIHJhdGUgbm90IGNoYW5naW5nLCBrZWVwIHRoZSBvbGQgKi8KLQkJCQluX2JhdWRfcmF0ZSA9IHByaXYtPmJhdWRfcmF0ZTsKKwkJCQluZXdfYmF1ZHJhdGUgPSBwcml2LT5iYXVkX3JhdGU7CiAJCQl9Ci0JCQlkYmcoIiVzIC0gYmF1ZCByYXRlIGlzIGJlaW5nIHNlbnQgYXMgJWQiLCBfX0ZVTkNUSU9OX18sIG5fYmF1ZF9yYXRlKTsKLQorCQkJZGJnKCIlcyAtIGJhdWQgcmF0ZSBpcyBiZWluZyBzZW50IGFzICVkIiwgX19GVU5DVElPTl9fLCBuZXdfYmF1ZHJhdGUpOwogCQkJCi0JCQkvKgotCQkJICogVGhpcyBhbGdvcml0aG0gYWNjcmVkaXRlZCB0byBKaWFuZyBKYXkgWmhhbmcuLi4gdGhhbmtzIGZvciBhbGwgdGhlIGhlbHAhCi0JCQkgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKLQkJCQlmZWF0dXJlX2J1ZmZlcltpXSA9ICggbl9iYXVkX3JhdGUgPj4gKGkqOCkgJiAweEZGICk7Ci0JCQl9CisJCQltZW1zZXQoZmVhdHVyZV9idWZmZXIsIDAsIDgpOworCQkJLyogZmlsbCB0aGUgZmVhdHVyZV9idWZmZXIgd2l0aCBuZXcgY29uZmlndXJhdGlvbiAqLworCQkJKigodV9pbnQzMl90ICopZmVhdHVyZV9idWZmZXIpID0gbmV3X2JhdWRyYXRlOwogCi0JCQljb25maWcgPSAwOwkgICAgICAgICAgICAgICAgIC8vIHJlc2V0IGNvbmZpZyBieXRlCi0JCQljb25maWcgfD0gZGF0YV9iaXRzOwkgICAgICAgICAvLyBhc3NpZ24gZGF0YSBiaXRzIGluIDIgYml0IHNwYWNlICggbWF4IDMgKQorCQkJZmVhdHVyZV9idWZmZXJbNF0gfD0gZGF0YV9iaXRzOyAgIC8qIGFzc2lnbiBkYXRhIGJpdHMgaW4gMiBiaXQgc3BhY2UgKCBtYXggMyApICovCiAJCQkvKiAxIGJpdCBnYXAgKi8KLQkJCWNvbmZpZyB8PSAoc3RvcF9iaXRzIDw8IDMpOyAgICAgIC8vIGFzc2lnbiBzdG9wIGJpdHMgaW4gMSBiaXQgc3BhY2UKLQkJCWNvbmZpZyB8PSAocGFyaXR5X2VuYWJsZSA8PCA0KTsgIC8vIGFzc2lnbiBwYXJpdHkgZmxhZyBpbiAxIGJpdCBzcGFjZQotCQkJY29uZmlnIHw9IChwYXJpdHlfdHlwZSA8PCA1KTsgCSAvLyBhc3NpZ24gcGFyaXR5IHR5cGUgaW4gMSBiaXQgc3BhY2UKKwkJCWZlYXR1cmVfYnVmZmVyWzRdIHw9IChzdG9wX2JpdHMgPDwgMyk7ICAgLyogYXNzaWduIHN0b3AgYml0cyBpbiAxIGJpdCBzcGFjZSAqLworCQkJZmVhdHVyZV9idWZmZXJbNF0gfD0gKHBhcml0eV9lbmFibGUgPDwgNCk7ICAgLyogYXNzaWduIHBhcml0eSBmbGFnIGluIDEgYml0IHNwYWNlICovCisJCQlmZWF0dXJlX2J1ZmZlcls0XSB8PSAocGFyaXR5X3R5cGUgPDwgNSk7ICAgLyogYXNzaWduIHBhcml0eSB0eXBlIGluIDEgYml0IHNwYWNlICovCiAJCQkvKiAxIGJpdCBnYXAgKi8KLQkJCWNvbmZpZyB8PSAocmVzZXQgPDwgNyk7CQkgLy8gYXNzaWduIHJlc2V0IGF0IGVuZCBvZiBieXRlLCAxIGJpdCBzcGFjZQotCi0JCQlmZWF0dXJlX2J1ZmZlcls0XSA9IGNvbmZpZzsKKwkJCWZlYXR1cmVfYnVmZmVyWzRdIHw9IChyZXNldCA8PCA3KTsgICAvKiBhc3NpZ24gcmVzZXQgYXQgZW5kIG9mIGJ5dGUsIDEgYml0IHNwYWNlICovCiAJCQkJCiAJCQlkYmcoIiVzIC0gZGV2aWNlIGlzIGJlaW5nIHNlbnQgdGhpcyBmZWF0dXJlIHJlcG9ydDoiLCBfX0ZVTkNUSU9OX18pOwogCQkJZGJnKCIlcyAtICUwMlggLSAlMDJYIC0gJTAyWCAtICUwMlggLSAlMDJYIiwgX19GVU5DVElPTl9fLCBmZWF0dXJlX2J1ZmZlclswXSwgZmVhdHVyZV9idWZmZXJbMV0sCiAJCSAgICAgICAgICAgIGZlYXR1cmVfYnVmZmVyWzJdLCBmZWF0dXJlX2J1ZmZlclszXSwgZmVhdHVyZV9idWZmZXJbNF0pOwogCQkJCisJCQlkbyB7CiAJCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHBvcnQtPnNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAogCQkJCQkgIAkgIEhJRF9SRVFfU0VUX1JFUE9SVCwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MsCi0JCQkJCSAgCSAgMHgwMzAwLCAwLCBmZWF0dXJlX2J1ZmZlciwgNSwgNTAwKTsKKwkJCQkJCSAgCSAgMHgwMzAwLCAwLCBmZWF0dXJlX2J1ZmZlciwgOCwgNTAwKTsKIAotCQkJaWYgKHJldHZhbCAhPSA1KQorCQkJCWlmICh0cmllcysrID49IDMpCisJCQkJCWJyZWFrOworCisJCQkJaWYgKHJldHZhbCA9PSBFUElQRSkKKwkJCQkJdXNiX2NsZWFyX2hhbHQocG9ydC0+c2VyaWFsLT5kZXYsIDB4MDApOworCQkJfSB3aGlsZSAocmV0dmFsICE9IDggJiYgcmV0dmFsICE9IEVOT0RFVik7CisKKwkJCWlmIChyZXR2YWwgIT0gOCkKIAkJCQllcnIoIiVzIC0gZmFpbGVkIHNlbmRpbmcgc2VyaWFsIGxpbmUgc2V0dGluZ3MgLSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKIAkJCWVsc2UgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQkJcHJpdi0+YmF1ZF9yYXRlID0gbl9iYXVkX3JhdGU7CisJCQkJcHJpdi0+YmF1ZF9yYXRlID0gbmV3X2JhdWRyYXRlOwogCQkJCXByaXYtPmNicl9tYXNrID0gYmF1ZF9tYXNrOwotCQkJCXByaXYtPmN1cnJlbnRfY29uZmlnID0gY29uZmlnOwotCQkJCSsrcHJpdi0+Y21kX2NvdW50OworCQkJCXByaXYtPmN1cnJlbnRfY29uZmlnID0gZmVhdHVyZV9idWZmZXJbNF07CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQkJfQogCQlicmVhazsKIAkJY2FzZSBDWVBSRVNTX0dFVF9DT05GSUc6CiAJCQlkYmcoIiVzIC0gcmV0cmVpdmluZyBzZXJpYWwgbGluZSBzZXR0aW5ncyIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkvKiByZXNldCB2YWx1ZXMgaW4gZmVhdHVyZSBidWZmZXIgKi8KLQkJCW1lbXNldChmZWF0dXJlX2J1ZmZlciwgMCwgNSk7CisJCQkvKiBzZXQgaW5pdGlhbCB2YWx1ZXMgaW4gZmVhdHVyZSBidWZmZXIgKi8KKwkJCW1lbXNldChmZWF0dXJlX2J1ZmZlciwgMCwgOCk7CiAKKwkJCWRvIHsKIAkJCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAocG9ydC0+c2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCiAJCQkJCQkgIEhJRF9SRVFfR0VUX1JFUE9SVCwgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUywKLQkJCQkJCSAgMHgwMzAwLCAwLCBmZWF0dXJlX2J1ZmZlciwgNSwgNTAwKTsKKwkJCQkJCQkgIDB4MDMwMCwgMCwgZmVhdHVyZV9idWZmZXIsIDgsIDUwMCk7CisJCQkJCisJCQkJaWYgKHRyaWVzKysgPj0gMykKKwkJCQkJYnJlYWs7CisKKwkJCQlpZiAocmV0dmFsID09IEVQSVBFKQorCQkJCQl1c2JfY2xlYXJfaGFsdChwb3J0LT5zZXJpYWwtPmRldiwgMHgwMCk7CisJCQl9IHdoaWxlIChyZXR2YWwgIT0gNSAmJiByZXR2YWwgIT0gRU5PREVWKTsKKwogCQkJaWYgKHJldHZhbCAhPSA1KSB7CiAJCQkJZXJyKCIlcyAtIGZhaWxlZCB0byByZXRyZWl2ZSBzZXJpYWwgbGluZSBzZXR0aW5ncyAtICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOwogCQkJCXJldHVybiByZXR2YWw7CiAJCQl9IGVsc2UgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKIAkJCQkvKiBzdG9yZSB0aGUgY29uZmlnIGluIG9uZSBieXRlLCBhbmQgbGF0ZXIgdXNlIGJpdCBtYXNrcyB0byBjaGVjayB2YWx1ZXMgKi8KIAkJCQlwcml2LT5jdXJyZW50X2NvbmZpZyA9IGZlYXR1cmVfYnVmZmVyWzRdOwotCQkJCS8qIHJldmVyc2UgdGhlIHByb2Nlc3MgYWJvdmUgdG8gZ2V0IHRoZSBiYXVkX21hc2sgdmFsdWUgKi8KLQkJCQluX2JhdWRfcmF0ZSA9IDA7IC8vIHJlc2V0IGJpdHMKLQkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0JCQkJCW5fYmF1ZF9yYXRlIHw9ICggZmVhdHVyZV9idWZmZXJbaV0gPDwgKGkqOCkgKTsKLQkJCQl9CisJCQkJcHJpdi0+YmF1ZF9yYXRlID0gKigodV9pbnQzMl90ICopZmVhdHVyZV9idWZmZXIpOwogCQkJCQotCQkJCXByaXYtPmJhdWRfcmF0ZSA9IG5fYmF1ZF9yYXRlOwotCQkJCWlmICggKHByaXYtPmNicl9tYXNrID0gcmF0ZV90b19tYXNrKG5fYmF1ZF9yYXRlKSkgPT0gMHg0MCkKKwkJCQlpZiAoIChwcml2LT5jYnJfbWFzayA9IHJhdGVfdG9fbWFzayhwcml2LT5iYXVkX3JhdGUpKSA9PSAweDQwKQogCQkJCQlkYmcoIiVzIC0gZmFpbGVkIHNldHRpbmcgdGhlIGJhdWQgbWFzayAobm90IGRlZmluZWQpIiwgX19GVU5DVElPTl9fKTsKLQkJCQkrK3ByaXYtPmNtZF9jb3VudDsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVycigiJXMgLSB1bnN1cHBvcnRlZCBzZXJpYWwgY29udHJvbCBjb21tYW5kIGlzc3VlZCIsIF9fRlVOQ1RJT05fXyk7CiAJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJKytwcml2LT5jbWRfY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCiAJcmV0dXJuIHJldHZhbDsKIH0gLyogY3lwcmVzc19zZXJpYWxfY29udHJvbCAqLwogCiAKLS8qIGdpdmVuIGEgYmF1ZCBtYXNrLCBpdCB3aWxsIHJldHVybiBzcGVlZCBvbiBzdWNjZXNzICovCisvKiBnaXZlbiBhIGJhdWQgbWFzaywgaXQgd2lsbCByZXR1cm4gaW50ZWdlciBiYXVkIG9uIHN1Y2Nlc3MgKi8KIHN0YXRpYyBpbnQgbWFza190b19yYXRlICh1bnNpZ25lZCBtYXNrKQogewogCWludCByYXRlOwpAQCAtNDM4LDExICs0NDMsMTIgQEAKIAkKIAl1c2JfcmVzZXRfY29uZmlndXJhdGlvbiAoc2VyaWFsLT5kZXYpOwogCQorCWludGVydmFsID0gMTsKIAlwcml2LT5jbWRfY3RybCA9IDA7CiAJcHJpdi0+bGluZV9jb250cm9sID0gMDsKIAlwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkID0gMDsKLQlwcml2LT5jYWxsZWRmcm9tb3BlbiA9IDA7CiAJcHJpdi0+cnhfZmxhZ3MgPSAwOworCXByaXYtPmNicl9tYXNrID0gQjMwMDsKIAl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdLCBwcml2KTsKIAkKIAlyZXR1cm4gKDApOwkKQEAgLTUxMyw3ICs1MTksNiBAQAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCiAJLyogY2xlYXIgaGFsdHMgYmVmb3JlIG9wZW4gKi8KLQl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgMHgwMCk7CiAJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIDB4ODEpOwogCXVzYl9jbGVhcl9oYWx0KHNlcmlhbC0+ZGV2LCAweDAyKTsKIApAQCAtNTMxLDcgKzUzNiw2IEBACiAJLyogcmFpc2UgYm90aCBsaW5lcyBhbmQgc2V0IHRlcm1pb3MgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXByaXYtPmxpbmVfY29udHJvbCA9IENPTlRST0xfRFRSIHwgQ09OVFJPTF9SVFM7Ci0JcHJpdi0+Y2FsbGVkZnJvbW9wZW4gPSAxOwogCXByaXYtPmNtZF9jdHJsID0gMTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJcmVzdWx0ID0gY3lwcmVzc193cml0ZShwb3J0LCBOVUxMLCAwKTsKQEAgLTU1Myw3ICs1NTcsNyBAQAogCXVzYl9maWxsX2ludF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgc2VyaWFsLT5kZXYsCiAJCXVzYl9yY3ZpbnRwaXBlKHNlcmlhbC0+ZGV2LCBwb3J0LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKIAkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQljeXByZXNzX3JlYWRfaW50X2NhbGxiYWNrLCBwb3J0LCBwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5pbnRlcnZhbCk7CisJCWN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2ssIHBvcnQsIGludGVydmFsKTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAogCWlmIChyZXN1bHQpewpAQCAtNjgwLDEyICs2ODQsMTIgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXN3aXRjaCAocG9ydC0+aW50ZXJydXB0X291dF9zaXplKSB7CiAJCWNhc2UgMzI6Ci0JCQkvLyB0aGlzIGlzIGZvciB0aGUgQ1k3QzY0MDEzLi4uCisJCQkvKiB0aGlzIGlzIGZvciB0aGUgQ1k3QzY0MDEzLi4uICovCiAJCQlvZmZzZXQgPSAyOwogCQkJcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXJbMF0gPSBwcml2LT5saW5lX2NvbnRyb2w7CiAJCQlicmVhazsKIAkJY2FzZSA4OgotCQkJLy8gdGhpcyBpcyBmb3IgdGhlIENZN0M2Mzc0My4uLgorCQkJLyogdGhpcyBpcyBmb3IgdGhlIENZN0M2Mzc0My4uLiAqLwogCQkJb2Zmc2V0ID0gMTsKIAkJCXBvcnQtPmludGVycnVwdF9vdXRfYnVmZmVyWzBdID0gcHJpdi0+bGluZV9jb250cm9sOwogCQkJYnJlYWs7CkBAIC03MzgsNiArNzQyLDcgQEAKIAogCXBvcnQtPmludGVycnVwdF9vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYWN0dWFsX3NpemU7CiAJcG9ydC0+aW50ZXJydXB0X291dF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXBvcnQtPmludGVycnVwdF9vdXRfdXJiLT5pbnRlcnZhbCA9IGludGVydmFsOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiIChwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywKQEAgLTkxMCw3ICs5MTUsNyBAQAogCXVuc2lnbmVkIGNmbGFnLCBpZmxhZywgYmF1ZF9tYXNrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX191OCBvbGRsaW5lczsKLQlpbnQgbGluZWNoYW5nZTsKKwlpbnQgbGluZWNoYW5nZSA9IDA7CiAJCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CiAKQEAgLTk5NiwxNSArMTAwMSw3IEBACiAJCQljYXNlIEIxMTUyMDA6IGRiZygiJXMgLSBzZXR0aW5nIGJhdWQgMTE1MjAwYnBzIiwgX19GVU5DVElPTl9fKTsgYnJlYWs7CiAJCQlkZWZhdWx0OiBkYmcoIiVzIC0gdW5rbm93biBtYXNrZWQgYmF1ZCByYXRlIiwgX19GVU5DVElPTl9fKTsKIAkJfQotCQlwcml2LT5saW5lX2NvbnRyb2wgfD0gQ09OVFJPTF9EVFI7Ci0JCQotCQkvKiB0b2dnbGUgQ1JUU0NUUz8gLSBkb24ndCBkbyB0aGlzIGlmIGJlaW5nIGNhbGxlZCBmcm9tIGN5cHJlc3Nfb3BlbiAqLwotCQlpZiAoIXByaXYtPmNhbGxlZGZyb21vcGVuKSB7Ci0JCQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQotCQkJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDT05UUk9MX1JUUzsKLQkJCWVsc2UKLQkJCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNPTlRST0xfUlRTOwotCQl9CisJCXByaXYtPmxpbmVfY29udHJvbCA9IChDT05UUk9MX0RUUiB8IENPTlRST0xfUlRTKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQpAQCAtMTAxNCw4ICsxMDExLDYgQEAKIAljeXByZXNzX3NlcmlhbF9jb250cm9sKHBvcnQsIGJhdWRfbWFzaywgZGF0YV9iaXRzLCBzdG9wX2JpdHMsIHBhcml0eV9lbmFibGUsCiAJCQkgICAgICAgcGFyaXR5X3R5cGUsIDAsIENZUFJFU1NfU0VUX0NPTkZJRyk7CiAKLQltc2xlZXAoNTApOwkJCS8qIGdpdmUgc29tZSB0aW1lIGJldHdlZW4gY2hhbmdlIGFuZCByZWFkICg1MG1zKSAqLwotCiAJLyogd2UgcGVyZm9ybSBhIENZUFJFU1NfR0VUX0NPTkZJRyBzbyB0aGF0IHRoZSBjdXJyZW50IHNldHRpbmdzIGFyZSBmaWxsZWQgaW50byB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAgICAgICAgICogdGhpcyBzaG91bGQgY29uZmlybSB0aGF0IGFsbCBpcyB3b3JraW5nIGlmIGl0IHJldHVybnMgd2hhdCB3ZSBqdXN0IHNldCAqLwogCWN5cHJlc3Nfc2VyaWFsX2NvbnRyb2wocG9ydCwgMCwgMCwgMCwgMCwgMCwgMCwgQ1lQUkVTU19HRVRfQ09ORklHKTsKQEAgLTEwMzEsNyArMTAyNiw2IEBACiAJCWRiZygiVXNpbmcgY3VzdG9tIHRlcm1pb3Mgc2V0dGluZ3MgZm9yIGEgYmF1ZCByYXRlIG9mIDQ4MDBicHMuIik7CiAJCS8qIGRlZmluZSBjdXN0b20gdGVybWlvcyBzZXR0aW5ncyBmb3IgTk1FQSBwcm90b2NvbCAqLwogCi0JCQogCQl0dHktPnRlcm1pb3MtPmNfaWZsYWcgLyogaW5wdXQgbW9kZXMgLSAqLwogCQkJJj0gfihJR05CUksJCS8qIGRpc2FibGUgaWdub3JlIGJyZWFrICovCiAJCQl8IEJSS0lOVAkJLyogZGlzYWJsZSBicmVhayBjYXVzZXMgaW50ZXJydXB0ICovCkBAIC0xMDUyLDIzICsxMDQ2LDE2IEBACiAJCQl8IElTSUcJCQkvKiBkaXNhYmxlIGludGVycnVwdCwgcXVpdCwgYW5kIHN1c3BlbmQgc3BlY2lhbCBjaGFyYWN0ZXJzICovCiAJCQl8IElFWFRFTik7CQkvKiBkaXNhYmxlIG5vbi1QT1NJWCBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KIAotCX0gZWxzZSBpZiAocHJpdi0+Y2hpcHR5cGUgPT0gQ1RfQ1lQSElEQ09NKSB7CisJfSAvKiBDVF9DWVBISURDT006IEFwcGxpY2F0aW9uIHNob3VsZCBoYW5kbGUgdGhpcyBmb3IgZGV2aWNlICovCiAKLQkJLy8gU29mdHdhcmUgYXBwIGhhbmRsaW5nIGl0IGZvciBkZXZpY2UuLi4JCi0KLQl9CiAJbGluZWNoYW5nZSA9IChwcml2LT5saW5lX2NvbnRyb2wgIT0gb2xkbGluZXMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIGlmIG5lY2Vzc2FyeSwgc2V0IGxpbmVzICovCi0JaWYgKCFwcml2LT5jYWxsZWRmcm9tb3BlbiAmJiBsaW5lY2hhbmdlKSB7CisJaWYgKGxpbmVjaGFuZ2UpIHsKIAkJcHJpdi0+Y21kX2N0cmwgPSAxOwogCQljeXByZXNzX3dyaXRlKHBvcnQsIE5VTEwsIDApOwogCX0KLQotCWlmIChwcml2LT5jYWxsZWRmcm9tb3BlbikKLQkJcHJpdi0+Y2FsbGVkZnJvbW9wZW4gPSAwOwotCQogfSAvKiBjeXByZXNzX3NldF90ZXJtaW9zICovCiAKICAKQEAgLTExNjQsNyArMTE1MSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlzd2l0Y2godXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCWNhc2UgMzI6Ci0JCQkvLyBUaGlzIGlzIGZvciB0aGUgQ1k3QzY0MDEzLi4uCisJCQkvKiBUaGlzIGlzIGZvciB0aGUgQ1k3QzY0MDEzLi4uICovCiAJCQlwcml2LT5jdXJyZW50X3N0YXR1cyA9IGRhdGFbMF0gJiAweEY4OwogCQkJYnl0ZXMgPSBkYXRhWzFdKzI7CiAJCQlpPTI7CkBAIC0xMTcyLDcgKzExNTksNyBAQAogCQkJCWhhdmVkYXRhID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIDg6Ci0JCQkvLyBUaGlzIGlzIGZvciB0aGUgQ1k3QzYzNzQzLi4uCisJCQkvKiBUaGlzIGlzIGZvciB0aGUgQ1k3QzYzNzQzLi4uICovCiAJCQlwcml2LT5jdXJyZW50X3N0YXR1cyA9IGRhdGFbMF0gJiAweEY4OwogCQkJYnl0ZXMgPSAoZGF0YVswXSAmIDB4MDcpKzE7CiAJCQlpPTE7CkBAIC0xMjQ1LDcgKzEyMzIsNyBAQAogCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJCXBvcnQtPmludGVycnVwdF9pbl91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCiAJCWN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2ssIHBvcnQsCi0JCXBvcnQtPmludGVycnVwdF9pbl91cmItPmludGVydmFsKTsKKwkJaW50ZXJ2YWwpOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpCiAJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CkBAIC0xMjc0LDYgKzEyNjEsOCBAQAogCQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwogCQkJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDA7CiAJCQlyZXR1cm47CisJCWNhc2UgLUVQSVBFOiAvKiBubyBicmVhayBuZWVkZWQgKi8KKwkJCXVzYl9jbGVhcl9oYWx0KHBvcnQtPnNlcmlhbC0+ZGV2LCAweDAyKTsKIAkJZGVmYXVsdDoKIAkJCS8qIGVycm9yIGluIHRoZSB1cmIsIHNvIHdlIGhhdmUgdG8gcmVzdWJtaXQgaXQgKi8KIAkJCWRiZygiJXMgLSBPdmVyZmxvdyBpbiB3cml0ZSIsIF9fRlVOQ1RJT05fXyk7CkBAIC0xNTM1LDMgKzE1MjQsNSBAQAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CiBtb2R1bGVfcGFyYW0oc3RhdHMsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0Moc3RhdHMsICJFbmFibGUgc3RhdGlzdGljcyBvciBub3QiKTsKK21vZHVsZV9wYXJhbShpbnRlcnZhbCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGludGVydmFsLCAiT3ZlcnJpZGVzIGludGVycnVwdCBpbnRlcnZhbCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCA0Yzc4OGM3Li41MjM5NGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNzYsNyArNzYsNyBAQAogICogICAgICBEZWZlcmVyZW5jZSBwb2ludGVycyBhZnRlciBhbnkgcGFyYW5vaWQgY2hlY2tzLCBub3QgYmVmb3JlLgogICoKICAqICgyMS9KdW4vMjAwMykgRXJpayBOeWdyZW4KLSAqICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgSG9tZSBFbGVjdHJvbmljcyBUaXJhLTEgSVIgdHJhbmNlaXZlciB1c2luZyBGVDIzMkJNIGNoaXAuCisgKiAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIEhvbWUgRWxlY3Ryb25pY3MgVGlyYS0xIElSIHRyYW5zY2VpdmVyIHVzaW5nIEZUMjMyQk0gY2hpcC4KICAqICAgICAgU2VlIDxodHRwOi8vd3d3LmhvbWUtZWxlY3Ryby5jb20vdGlyYTEuaHRtPi4gIE9ubHkgb3BlcmF0ZXMgcHJvcGVybHkgCiAgKiAgICAgIGF0IDEwMDAwMCBhbmQgUlRTLUNUUywgc28gc2V0IGN1c3RvbSBkaXZpc29yIG1vZGUgb24gc3RhcnR1cC4KICAqICAgICAgQWxzbyBmb3JjZSB0aGUgVGlyYS0xIGFuZCBVU0ItVUlSVCB0byBvbmx5IHVzZSB0aGVpciBjdXN0b20gYmF1ZCByYXRlcy4KQEAgLTkxLDcgKzkxLDcgQEAKICAqICAgICAgTWlub3Igd2hpdGVzcGFjZSBhbmQgY29tbWVudCBjaGFuZ2VzLgogICoKICAqICgxMi9KdW4vMjAwMykgRGF2aWQgTm9yd29vZAotICogICAgICBBZGRlZCBzdXBwb3J0IGZvciBVU0ItVUlSVCBJUiB0cmFuY2VpdmVyIHVzaW5nIDhVMjMyQU0gY2hpcC4KKyAqICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgVVNCLVVJUlQgSVIgdHJhbnNjZWl2ZXIgdXNpbmcgOFUyMzJBTSBjaGlwLgogICogICAgICBTZWUgPGh0dHA6Ly9ob21lLmVhcnRobGluay5uZXQvfmpyaGVlcy9VU0JVSVJUL2luZGV4Lmh0bT4uICBPbmx5CiAgKiAgICAgIG9wZXJhdGVzIHByb3Blcmx5IGF0IDMxMjUwMCwgc28gc2V0IGN1c3RvbSBkaXZpc29yIG1vZGUgb24gc3RhcnR1cC4KICAqCkBAIC0yNzIsNiArMjcyLDcgQEAKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX3NpbyBbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfU0lPX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTU9CSUxJVFlfVklELCBNT0JJTElUWV9VU0JfU0VSSUFMX1BJRCkgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApAQCAtMjk2LDcgKzI5Nyw2IEBACiAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9JUlRSQU5TX1BJRCwgMCwgMHgzZmYpIH0sCiAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV84VTIzMkFNX1BJRCwgMCwgMHgzZmYpIH0sCiAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV84VTIzMkFNX0FMVF9QSUQsIDAsIDB4M2ZmKSB9LAotCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfOFUyMzJBTV9BTFRfQUxUX1BJRCwgMCwgMHgzZmYpIH0sCiAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9SRUxBSVNfUElELCAwLCAweDNmZikgfSwKIAl7IFVTQl9ERVZJQ0UoSU5URVJCSU9NRVRSSUNTX1ZJRCwgSU5URVJCSU9NRVRSSUNTX0lPQk9BUkRfUElEKSB9LAogCXsgVVNCX0RFVklDRShJTlRFUkJJT01FVFJJQ1NfVklELCBJTlRFUkJJT01FVFJJQ1NfTUlOSV9JT0JPQVJEX1BJRCkgfSwKQEAgLTM2OSwxMSArMzY5LDE0IEBACiAJeyBVU0JfREVWSUNFX1ZFUihJTlRSRVBJRF9WSUQsIElOVFJFUElEX05FT1ZJX1BJRCwgMCwgMHgzZmYpIH0sCiAJeyBVU0JfREVWSUNFX1ZFUihGQUxDT01fVklELCBGQUxDT01fVFdJU1RfUElELCAwLCAweDNmZikgfSwKIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1NVVU5UT19TUE9SVFNfUElELCAwLCAweDNmZikgfSwKLQl7IFVTQl9ERVZJQ0VfVkVSKEZURElfUk1fVklELCBGVERJX1JNQ0FOVklFV19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfUk1fQ0FOVklFV19QSUQsIDAsIDB4M2ZmKSB9LAogCXsgVVNCX0RFVklDRV9WRVIoQkFOREJfVklELCBCQU5EQl9VU09UTDRfUElELCAwLCAweDNmZikgfSwKIAl7IFVTQl9ERVZJQ0VfVkVSKEJBTkRCX1ZJRCwgQkFOREJfVVNUTDRfUElELCAwLCAweDNmZikgfSwKIAl7IFVTQl9ERVZJQ0VfVkVSKEJBTkRCX1ZJRCwgQkFOREJfVVNPOU1MMl9QSUQsIDAsIDB4M2ZmKSB9LAogCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEVWRVJfRUNPX1BST19DRFMsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfNE5fR0FMQVhZX0RFXzBfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJXzROX0dBTEFYWV9ERV8xX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV80Tl9HQUxBWFlfREVfMl9QSUQsIDAsIDB4M2ZmKSB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCkBAIC0zODIsNyArMzg1LDYgQEAKIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0lSVFJBTlNfUElELCAweDQwMCwgMHhmZmZmKSB9LAogCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfOFUyMzJBTV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCiAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV84VTIzMkFNX0FMVF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCi0JeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV84VTIzMkFNX0FMVF9BTFRfUElELCAweDQwMCwgMHhmZmZmKSB9LAogCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfUkVMQUlTX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfTkZfUklDX1ZJRCwgRlRESV9ORl9SSUNfUElELCAweDQwMCwgMHhmZmZmKSB9LAogCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjMyX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKQEAgLTQ4NSwxMSArNDg3LDE1IEBACiAJeyBVU0JfREVWSUNFX1ZFUihJTlRSRVBJRF9WSUQsIElOVFJFUElEX05FT1ZJX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKIAl7IFVTQl9ERVZJQ0VfVkVSKEZBTENPTV9WSUQsIEZBTENPTV9UV0lTVF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCiAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9TVVVOVE9fU1BPUlRTX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKLQl7IFVTQl9ERVZJQ0VfVkVSKEZURElfUk1fVklELCBGVERJX1JNQ0FOVklFV19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9STV9DQU5WSUVXX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKIAl7IFVTQl9ERVZJQ0VfVkVSKEJBTkRCX1ZJRCwgQkFOREJfVVNPVEw0X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKIAl7IFVTQl9ERVZJQ0VfVkVSKEJBTkRCX1ZJRCwgQkFOREJfVVNUTDRfUElELCAweDQwMCwgMHhmZmZmKSB9LAogCXsgVVNCX0RFVklDRV9WRVIoQkFOREJfVklELCBCQU5EQl9VU085TUwyX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBFVkVSX0VDT19QUk9fQ0RTLCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfNE5fR0FMQVhZX0RFXzBfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfNE5fR0FMQVhZX0RFXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfNE5fR0FMQVhZX0RFXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfQUNUSVZFX1JPQk9UU19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKQEAgLTUxNyw3ICs1MjMsNiBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9TSU9fUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV84VTIzMkFNX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfOFUyMzJBTV9BTFRfUElEKSB9LAotCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV84VTIzMkFNX0FMVF9BTFRfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV84VTIyMzJDX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUkVMQUlTX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoSU5URVJCSU9NRVRSSUNTX1ZJRCwgSU5URVJCSU9NRVRSSUNTX0lPQk9BUkRfUElEKSB9LApAQCAtNTk2LDYgKzYwMSwyMiBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgUFJPVEVHT19SMlgwKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgUFJPVEVHT19TUEVDSUFMXzMpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBQUk9URUdPX1NQRUNJQUxfNCkgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTgwOF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4MDlfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODBBX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTgwQl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4MENfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODBEX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTgwRV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4MEZfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODg4X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTg4OV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4OEFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODhCX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTg4Q19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4OERfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODhFX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTg4Rl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9VTzEwMF9QSUQpIH0sCiAgCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIExJTlhfU0RNVVNCUVNTX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKICAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgTElOWF9NQVNURVJERVZFTDJfUElELCAweDQwMCwgMHhmZmZmKSB9LApAQCAtNjA5LDExICs2MzAsMTYgQEAKIAl7IFVTQl9ERVZJQ0UoSU5UUkVQSURfVklELCBJTlRSRVBJRF9ORU9WSV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZBTENPTV9WSUQsIEZBTENPTV9UV0lTVF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1NVVU5UT19TUE9SVFNfUElEKSB9LAotCXsgVVNCX0RFVklDRShGVERJX1JNX1ZJRCwgRlRESV9STUNBTlZJRVdfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9STV9DQU5WSUVXX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQkFOREJfVklELCBCQU5EQl9VU09UTDRfUElEKSB9LAogCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTVEw0X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQkFOREJfVklELCBCQU5EQl9VU085TUwyX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEVWRVJfRUNPX1BST19DRFMpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzROX0dBTEFYWV9ERV8wX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfNE5fR0FMQVhZX0RFXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV80Tl9HQUxBWFlfREVfMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE1PQklMSVRZX1ZJRCwgTU9CSUxJVFlfVVNCX1NFUklBTF9QSUQpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9BQ1RJVkVfUk9CT1RTX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApAQCAtMTQ1NywxMCArMTQ4MywxMCBAQAogCWludGVyID0gc2VyaWFsLT5pbnRlcmZhY2UtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKIAogCWlmIChpbnRlcikgewotCQlwcml2LT5pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfQjsKKwkJcHJpdi0+aW50ZXJmYWNlID0gUElUX1NJT0I7CiAJfQogCWVsc2UgIHsKLQkJcHJpdi0+aW50ZXJmYWNlID0gSU5URVJGQUNFX0E7CisJCXByaXYtPmludGVyZmFjZSA9IFBJVF9TSU9BOwogCX0KIAlwcml2LT5iYXVkX2Jhc2UgPSA0ODAwMDAwMCAvIDI7IC8qIFdvdWxkIGJlIC8gMTYsIGJ1dCBGVDIyMzJDIHN1cHBvcnRzIG11bHRpcGxlIG9mIDAuMTI1IGRpdmlzb3IgZnJhY3Rpb25zISAqLwogCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAppbmRleCBiZTVkNjBiLi5hNTJiYjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBGVERJX1NJT19QSUQJMHg4MzcyCS8qIFByb2R1Y3QgSWQgU0lPIGFwcGxpY2F0aW9uIG9mIDhVMTAwQVggICovCiAjZGVmaW5lIEZURElfOFUyMzJBTV9QSUQgMHg2MDAxIC8qIFNpbWlsYXIgZGV2aWNlIHRvIFNJTyBhYm92ZSAqLwogI2RlZmluZSBGVERJXzhVMjMyQU1fQUxUX1BJRCAweDYwMDYgLyogRlRESSdzIGFsdGVybmF0ZSBQSUQgZm9yIGFib3ZlICovCi0jZGVmaW5lIEZURElfOFUyMzJBTV9BTFRfQUxUX1BJRCAweGYzYzAgLyogRlRESSdzIHNlY29uZCBhbHRlcm5hdGUgUElEIGZvciBhYm92ZSAqLwogI2RlZmluZSBGVERJXzhVMjIzMkNfUElEIDB4NjAxMCAvKiBEdWFsIGNoYW5uZWwgZGV2aWNlICovCiAjZGVmaW5lIEZURElfUkVMQUlTX1BJRAkweEZBMTAgIC8qIFJlbGFpcyBkZXZpY2UgZnJvbSBSdWRvbGYgR3VnbGVyICovCiAjZGVmaW5lIEZURElfTkZfUklDX1ZJRAkweDBEQ0QJLyogVmVuZG9yIElkICovCkBAIC0xMzcsNyArMTM2LDcgQEAKIC8qCiAgKiBIb21lIEVsZWN0cm9uaWNzICh3d3cuaG9tZS1lbGVjdHJvLmNvbSkgVVNCIGdhZGdldHMKICAqLwotI2RlZmluZSBGVERJX0hFX1RJUkExX1BJRAkweEZBNzgJLyogVGlyYS0xIElSIHRyYW5jZWl2ZXIgKi8KKyNkZWZpbmUgRlRESV9IRV9USVJBMV9QSUQJMHhGQTc4CS8qIFRpcmEtMSBJUiB0cmFuc2NlaXZlciAqLwogCiAvKiBVU0ItVUlSVCAtIEFuIGluZnJhcmVkIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciB1c2luZyB0aGUgOFUyMzJBTSBjaGlwICovCiAvKiBodHRwOi8vaG9tZS5lYXJ0aGxpbmsubmV0L35qcmhlZXMvVVNCVUlSVC9pbmRleC5odG0gKi8KQEAgLTE1Nyw3ICsxNTYsOCBAQAogICovCiAjZGVmaW5lIE9DVF9WSUQJCQkweDBCMzkJLyogT0NUIHZlbmRvciBJRCAqLwogLyogTm90ZTogT0NUIFVTMTAxIGlzIGFsc28gcmViYWRnZWQgYXMgRGljayBTbWl0aCBFbGVjdHJvbmljcyAoTlopIFhINjM4MSAqLwotLyogQWxzbyByZWJhZGdlZCBhcyBTSUlHIEluYy4gbW9kZWwgVVMyMzA4ICovCisvKiBBbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKEF1cykgWEg2NDUxICovCisvKiBBbHNvIHJlYmFkZ2VkIGFzIFNJSUcgSW5jLiBtb2RlbCBVUzIzMDggaGFyZHdhcmUgdmVyc2lvbiAxICovCiAjZGVmaW5lIE9DVF9VUzEwMV9QSUQJCTB4MDQyMQkvKiBPQ1QgVVMxMDEgVVNCIHRvIFJTLTIzMiAqLwogCiAvKiBhbiBpbmZyYXJlZCByZWNlaXZlciBmb3IgdXNlciBhY2Nlc3MgY29udHJvbCB3aXRoIElSIHRhZ3MgKi8KQEAgLTIzNiwxMCArMjM2LDEwIEBACiAKIC8qCiAgKiBSTSBNaWNoYWVsaWRlcyBDQU52aWV3IFVTQiAoaHR0cDovL3d3dy5ybWNhbi5jb20pCi0gKiBDQU4gZmlsZWRidXMgaW50ZXJmYWNlIGFkYXB0ZXIsIGFkZGFkIGJ5IHBvcnQgR21iSCB3d3cucG9ydC5kZSkKKyAqIENBTiBmaWVsZGJ1cyBpbnRlcmZhY2UgYWRhcHRlciwgYWRkZWQgYnkgcG9ydCBHbWJIIHd3dy5wb3J0LmRlKQorICogSWFuIEFiYm90dCBjaGFuZ2VkIHRoZSBtYWNybyBuYW1lcyBmb3IgY29uc2lzdGVuY3kuCiAgKi8KLSNkZWZpbmUgRlRESV9STV9WSUQJCTB4MDQwMwkvKiBWZW5kb3IgIElkICovCi0jZGVmaW5lIEZURElfUk1DQU5WSUVXX1BJRAkweGZkNjAJLyogUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX1JNX0NBTlZJRVdfUElECTB4ZmQ2MAkvKiBQcm9kdWN0IElkICovCiAKIC8qCiAgKiBFVkVSIEVjbyBQcm8gVVBTIChodHRwOi8vd3d3LmV2ZXIuY29tLnBsLykKQEAgLTI0Nyw2ICsyNDcsMjYgQEAKIAogI2RlZmluZQlFVkVSX0VDT19QUk9fQ0RTCTB4ZTUyMAkvKiBSUy0yMzIgY29udmVydGVyICovCiAKKy8qCisgKiA0Ti1HQUxBWFkuREUgUElEcyBmb3IgQ0FOLVVTQiwgVVNCLVJTMjMyLCBVU0ItUlM0MjIsIFVTQi1SUzQ4NSwKKyAqIFVTQi1UVFkgYWN0aXYsIFVTQi1UVFkgcGFzc2l2LiAgU29tZSBQSURzIGFyZSB1c2VkIGJ5IHNldmVyYWwgZGV2aWNlcworICogYW5kIEknbSBub3QgZW50aXJlbHkgc3VyZSB3aGljaCBhcmUgdXNlZCBieSB3aGljaC4KKyAqLworI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8wX1BJRAkweDgzNzIKKyNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMV9QSUQJMHhGM0MwCisjZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzJfUElECTB4RjNDMQorCisvKgorICogTW9iaWxpdHkgRWxlY3Ryb25pY3MgcHJvZHVjdHMuCisgKi8KKyNkZWZpbmUgTU9CSUxJVFlfVklECQkJMHgxMzQyCisjZGVmaW5lIE1PQklMSVRZX1VTQl9TRVJJQUxfUElECQkweDAyMDIJLyogRWFzaURvY2sgVVNCIDIwMCBzZXJpYWwgKi8KKworLyoKKyAqIEFjdGl2ZSBSb2JvdHMgcHJvZHVjdCBpZHMuCisgKi8KKyNkZWZpbmUgRlRESV9BQ1RJVkVfUk9CT1RTX1BJRAkweEU1NDgJLyogVVNCIGNvbW1zIGJvYXJkICovCisKIC8qIENvbW1hbmRzICovCiAjZGVmaW5lIEZURElfU0lPX1JFU0VUIAkJMCAvKiBSZXNldCB0aGUgcG9ydCAqLwogI2RlZmluZSBGVERJX1NJT19NT0RFTV9DVFJMIAkxIC8qIFNldCB0aGUgbW9kZW0gY29udHJvbCByZWdpc3RlciAqLwpAQCAtMjU5LDEwICsyNzksNiBAQAogI2RlZmluZSBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgk5IC8qIFNldCB0aGUgbGF0ZW5jeSB0aW1lciAqLwogI2RlZmluZSBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUgkxMCAvKiBHZXQgdGhlIGxhdGVuY3kgdGltZXIgKi8KIAotLyogUG9ydCBpbnRlcmZhY2UgY29kZSBmb3IgRlQyMjMyQyAqLwotI2RlZmluZSBJTlRFUkZBQ0VfQQkJMQotI2RlZmluZSBJTlRFUkZBQ0VfQgkJMgotCiAKIC8qCiAgKiAgIEJtUmVxdWVzdFR5cGU6ICAxMTAwIDAwMDBiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGQ1NWZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYwpAQCAtMCwwICsxLDg1IEBACisvKgorICogSFA0eCBDYWxjdWxhdG9ycyBTZXJpYWwgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcnRodXIgSHVpbGxldCAoYWh1aWxsZXRAdXNlcnMuc2YubmV0KQorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4wMCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkhQNHggKDQ4LzQ5KSBHZW5lcmljIFNlcmlhbCBkcml2ZXIiCisKKyNkZWZpbmUgSFBfVkVORE9SX0lEIDB4MDNmMAorI2RlZmluZSBIUDQ5R1BfUFJPRFVDVF9JRCAweDAxMjEKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShIUF9WRU5ET1JfSUQsIEhQNDlHUF9QUk9EVUNUX0lEKSB9LAorCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBocDQ5Z3BfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJIUDRYIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGhwNDlncF9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiSFA0WCIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0ID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cyA9CQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaHA0OWdwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmhwNDlncF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZocDQ5Z3BfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmhwNDlncF9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhwNDlncF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmhwNDlncF9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaHA0OWdwX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGhwNDlncF9pbml0KTsKK21vZHVsZV9leGl0KGhwNDlncF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb191c2J2ZW5kLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdXNidmVuZC5oCmluZGV4IDhjMWZhNWUuLmYxODA0ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb191c2J2ZW5kLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3VzYnZlbmQuaApAQCAtMjg5LDcgKzI4OSw3IEBACiAvLwogCiAvLwotLy8gRWRnZXBvcnQgQ29tcGF0aWJsaXR5IERlc2NyaXB0b3IKKy8vIEVkZ2Vwb3J0IENvbXBhdGliaWxpdHkgRGVzY3JpcHRvcgogLy8KIC8vIFRoaXMgZGVzY3JpcHRvciBpcyBvbmx5IHJldHVybmVkIGJ5IEVkZ2Vwb3J0LWNvbXBhdGlibGUgZGV2aWNlcwogLy8gc3VwcG9ydGluZyB0aGUgRVBpQyBzcGVjLiBUcnVlIElPTiBkZXZpY2VzIGRvIG5vdCByZXR1cm4gdGhpcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhOTBtc2cuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTkwbXNnLmgKaW5kZXggZGQ5MzViNi4uODY3MDhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhOTBtc2cuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2E5MG1zZy5oCkBAIC0xOSw3ICsxOSw3IEBACiAKICAgICAgICAgCVRoaXMgZmlsZSBpcyBhdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgY29weXJpZ2h0CiAKLQkyLiBUaGUgbmFtZSBvZiBJbm5vU3lzIEluY29ycHJhdGVkIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKwkyLiBUaGUgbmFtZSBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCiAgICAJcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCiAgICAJcGVybWlzc2lvbi4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5jCmluZGV4IGQ3NjQ4MzcuLjVhOTMyMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgogCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJzY3NpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCmluZGV4IDdlZmYwM2QuLmYzYjYwMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCkBAIC03ODYsNyArNzg2LDcgQEAKIAlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCi0JLy8gQ2hlY2sgZm9yIG1lZGlhIGV4aXN0YW5jZQorCS8vIENoZWNrIGZvciBtZWRpYSBleGlzdGVuY2UKIAlyYyA9IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhX3ByZXNlbnQodWlvKTsKIAlpZiAocmMgPT0gVVNCQVRfRkxBU0hfTUVESUFfTk9ORSkgewogCQlpbmZvLT5zZW5zZV9rZXkgPSAweDAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggZmE2OGRlYS4uZDI4OTFmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0xLDUgKzEsNSBAQAogLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCi0gKiBVbnVuc3VhbCBEZXZpY2VzIEZpbGUKKyAqIFVudXN1YWwgRGV2aWNlcyBGaWxlCiAgKgogICogJElkOiB1bnVzdWFsX2RldnMuaCx2IDEuMzIgMjAwMi8wMi8yNSAwMjo0MToyNCBtZGhhcm0gRXhwICQKICAqCkBAIC00OCw2ICs0OCwxNCBAQAogICogVVNCIGRldmVsb3BtZW50IGxpc3QgPGxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+LgogICovCiAKKy8qIHBhdGNoIHN1Ym1pdHRlZCBieSBWaXZpYW4gQnJlZ2llciA8Vml2aWFuLkJyZWdpZXJAaW1hZy5mcj4KKyAqLworVU5VU1VBTF9ERVYoICAweDAzZWIsIDB4MjAwMiwgMHgwMTAwLCAweDAxMDAsCisgICAgICAgICAgICAgICAgIkFUTUVMIiwKKyAgICAgICAgICAgICAgICAiU05EMSBTdG9yYWdlIiwKKyAgICAgICAgICAgICAgICBVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKyAgICAgICAgICAgICAgICBVU19GTF9JR05PUkVfUkVTSURVRSksCisKIFVOVVNVQUxfREVWKCAgMHgwM2VlLCAweDY5MDEsIDB4MDAwMCwgMHgwMTAwLAogCQkiTWl0c3VtaSIsCiAJCSJVU0IgRkREIiwKQEAgLTUxNywxNCArNTI1LDMyIEBACiAJCTAgKSwKICNlbmRpZgogCi0vKiBSZXBvcnRlZCBieSBBdmkgS2l2aXR5IDxhdmlAYXJnby5jby5pbD4gKi8KLVVOVVNVQUxfREVWKCAweDA1YWMsIDB4MTIwMywgMHgwMDAxLCAweDAwMDEsCisvKiBTdWJtaXR0ZWQgYnkgU3ZlbiBBbmRlcnNvbiA8c3Zlbi1saW51eEBhbmRlcnNvbi5kZT4KKyAqIFRoZXJlIGFyZSBhdCBsZWFzdCBmb3VyIFByb2R1Y3RJRHMgdXNlZCBmb3IgaVBvZHMsIHNvIEkgYWRkZWQgMHgxMjAyIGFuZAorICogMHgxMjA0LiBUaGV5IGp1c3QgbmVlZCB0aGUgVVNfRkxfRklYX0NBUEFDSVRZLiBBcyB0aGUgYmNkRGV2aWNlIGFwcGVhcnMKKyAqIHRvIGNoYW5nZSB3aXRoIGZpcm13YXJlIHVwZGF0ZXMsIEkgY2hhbmdlZCB0aGUgcmFuZ2UgdG8gbWF4aW11bSBmb3IgYWxsCisgKiBpUG9kIGVudHJpZXMuCisgKi8KK1VOVVNVQUxfREVWKCAweDA1YWMsIDB4MTIwMiwgMHgwMDAwLCAweDk5OTksCiAJCSJBcHBsZSIsCiAJCSJpUG9kIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAogCi1VTlVTVUFMX0RFViggMHgwNWFjLCAweDEyMDUsIDB4MDAwMSwgMHgwMDAxLAorLyogUmVwb3J0ZWQgYnkgQXZpIEtpdml0eSA8YXZpQGFyZ28uY28uaWw+ICovCitVTlVTVUFMX0RFViggMHgwNWFjLCAweDEyMDMsIDB4MDAwMCwgMHg5OTk5LAorCQkiQXBwbGUiLAorCQkiaVBvZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKworVU5VU1VBTF9ERVYoIDB4MDVhYywgMHgxMjA0LCAweDAwMDAsIDB4OTk5OSwKKwkJIkFwcGxlIiwKKwkJImlQb2QiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0NBUEFDSVRZICksCisKK1VOVVNVQUxfREVWKCAweDA1YWMsIDB4MTIwNSwgMHgwMDAwLCAweDk5OTksCiAJCSJBcHBsZSIsCiAJCSJpUG9kIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCkBAIC05NzYsNiArMTAwMiwxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfdWNyNjFzMmJfaW5pdCwKIAkJMCApLAogCisvKiBSZXBvcnRlZCBieSBWaWxpdXMgQmlsaW5rZXZpY2l1cyA8dmlsaXNhcyBBVCB4eHggRE9UIGx0KSAqLworVU5VU1VBTF9ERVYoICAweDEzMmIsIDB4MDAwYiwgMHgwMDAxLCAweDAwMDEsCisJCSJNaW5vbHRhIiwKKwkJIkRpbWFnZSBaMTAiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJMCApLAorCiAvKiBSZXBvcnRlZCBieSBLb3RybGEgVml0ZXpzbGF2IDxrb3RybGFAY2ViLmN6PiAqLwogVU5VU1VBTF9ERVYoICAweDEzNzAsIDB4NjgyOCwgMHgwMTEwLCAweDAxMTAsCiAJCSJTV0lTU0JJVCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggMmExYzU5Ni4uNmJlOGZiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMTk4LDYgKzE5OCwxNCBAQAogCSAgSWYgeW91IHBsYW4gdG8gdXNlIHRoZSBMQ0QgZGlzcGxheSB3aXRoIHlvdXIgU0EtMTEwMCBzeXN0ZW0sIHNheQogCSAgWSBoZXJlLgogCitjb25maWcgRkJfSU1YCisJdHJpc3RhdGUgIk1vdG9yb2xhIGkuTVggTENEIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQiAmJiBBUk0gJiYgQVJDSF9JTVgKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJc2VsZWN0IEZCX1NPRlRfQ1VSU09SCisKIGNvbmZpZyBGQl9DWUJFUjIwMDAKIAl0cmlzdGF0ZSAiQ3liZXJQcm8gMjAwMC8yMDEwLzUwMDAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFBDSSAmJiAoQlJPS0VOIHx8ICFTUEFSQzY0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKaW5kZXggOTIyNjViNy4uYmQ4ZGMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCkBAIC05MCw2ICs5MCw3IEBACiBvYmotJChDT05GSUdfRkJfTUFYSU5FKQkJICArPSBtYXhpbmVmYi5vCiBvYmotJChDT05GSUdfRkJfVFgzOTEyKQkJICArPSB0eDM5MTJmYi5vCiBvYmotJChDT05GSUdfRkJfUzFEMTNYWFgpCSAgKz0gczFkMTN4eHhmYi5vCitvYmotJChDT05GSUdfRkJfSU1YKSAgICAgICAgICAgICAgKz0gaW14ZmIubwogCiAjIFBsYXRmb3JtIG9yIGZhbGxiYWNrIGRyaXZlcnMgZ28gaGVyZQogb2JqLSQoQ09ORklHX0ZCX1ZFU0EpICAgICAgICAgICAgICs9IHZlc2FmYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2FtYmEtY2xjZC5jIGIvZHJpdmVycy92aWRlby9hbWJhLWNsY2QuYwppbmRleCBhY2RiYTBjLi4zMjFkYmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2FtYmEtY2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMKQEAgLTEyNSwyOCArMTI1LDI4IEBACiAJY2FzZSAyOgogCWNhc2UgNDoKIAljYXNlIDg6Ci0JCXZhci0+cmVkLmxlbmd0aAkJPSA4OworCQl2YXItPnJlZC5sZW5ndGgJCT0gdmFyLT5iaXRzX3Blcl9waXhlbDsKIAkJdmFyLT5yZWQub2Zmc2V0CQk9IDA7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoCT0gODsKKwkJdmFyLT5ncmVlbi5sZW5ndGgJPSB2YXItPmJpdHNfcGVyX3BpeGVsOwogCQl2YXItPmdyZWVuLm9mZnNldAk9IDA7Ci0JCXZhci0+Ymx1ZS5sZW5ndGgJPSA4OworCQl2YXItPmJsdWUubGVuZ3RoCT0gdmFyLT5iaXRzX3Blcl9waXhlbDsKIAkJdmFyLT5ibHVlLm9mZnNldAk9IDA7CiAJCWJyZWFrOwogCWNhc2UgMTY6CiAJCXZhci0+cmVkLmxlbmd0aAkJPSA1OwotCQl2YXItPmdyZWVuLmxlbmd0aAk9IDU7CisJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gNjsKIAkJdmFyLT5ibHVlLmxlbmd0aAk9IDU7CiAJCWlmIChmYi0+cGFuZWwtPmNudGwgJiBDTlRMX0JHUikgewotCQkJdmFyLT5yZWQub2Zmc2V0CQk9IDEwOworCQkJdmFyLT5yZWQub2Zmc2V0CQk9IDExOwogCQkJdmFyLT5ncmVlbi5vZmZzZXQJPSA1OwogCQkJdmFyLT5ibHVlLm9mZnNldAk9IDA7CiAJCX0gZWxzZSB7CiAJCQl2YXItPnJlZC5vZmZzZXQJCT0gMDsKIAkJCXZhci0+Z3JlZW4ub2Zmc2V0CT0gNTsKLQkJCXZhci0+Ymx1ZS5vZmZzZXQJPSAxMDsKKwkJCXZhci0+Ymx1ZS5vZmZzZXQJPSAxMTsKIAkJfQogCQlicmVhazsKLQljYXNlIDI0OgorCWNhc2UgMzI6CiAJCWlmIChmYi0+cGFuZWwtPmNudGwgJiBDTlRMX0xDRFRGVCkgewogCQkJdmFyLT5yZWQubGVuZ3RoCQk9IDg7CiAJCQl2YXItPmdyZWVuLmxlbmd0aAk9IDg7CkBAIC0xNzgsNiArMTc4LDEyIEBACiAKIAlpZiAoZmItPmJvYXJkLT5jaGVjaykKIAkJcmV0ID0gZmItPmJvYXJkLT5jaGVjayhmYiwgdmFyKTsKKworCWlmIChyZXQgPT0gMCAmJgorCSAgICB2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4ICoKKwkgICAgdmFyLT55cmVzX3ZpcnR1YWwgPiBmYi0+ZmIuZml4LnNtZW1fbGVuKQorCQlyZXQgPSAtRUlOVkFMOworCiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBjbGNkZmJfc2V0X2JpdGZpZWxkcyhmYiwgdmFyKTsKIApAQCAtMjUwLDcgKzI1Niw3IEBACiAJCQkJICBjb252ZXJ0X2JpdGZpZWxkKGdyZWVuLCAmZmItPmZiLnZhci5ncmVlbikgfAogCQkJCSAgY29udmVydF9iaXRmaWVsZChyZWQsICZmYi0+ZmIudmFyLnJlZCk7CiAKLQlpZiAoZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9PSA4ICYmIHJlZ25vIDwgMjU2KSB7CisJaWYgKGZiLT5mYi5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUiAmJiByZWdubyA8IDI1NikgewogCQlpbnQgaHdfcmVnID0gQ0xDRF9QQUxFVFRFICsgKChyZWdubyAqIDIpICYgfjMpOwogCQl1MzIgdmFsLCBtYXNrLCBuZXd2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCmluZGV4IGU4ZWIxMjQuLmVlMjViOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYwpAQCAtMTA1NywxMyArMTA1NywxNCBAQAogCXJldHVybiByYWRlb25fc2NyZWVuX2JsYW5rKHJpbmZvLCBibGFuaywgMCk7CiB9CiAKLXN0YXRpYyBpbnQgcmFkZW9uZmJfc2V0Y29scmVnICh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgcmFkZW9uX3NldGNvbHJlZyAodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwKKwkJCSAgICAgc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKQogewotICAgICAgICBzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8gPSBpbmZvLT5wYXI7CiAJdTMyIHBpbmRleDsKIAl1bnNpZ25lZCBpbnQgaTsKLQkKKworCiAJaWYgKHJlZ25vID4gMjU1KQogCQlyZXR1cm4gMTsKIApAQCAtMTA3OCwyMCArMTA3OSw3IEBACiAgICAgICAgIHBpbmRleCA9IHJlZ25vOwogCiAgICAgICAgIGlmICghcmluZm8tPmFzbGVlcCkgewotICAgICAgICAJdTMyIGRhY19jbnRsMiwgdmNsa19jbnRsID0gMDsKLSAgICAgICAgCQogCQlyYWRlb25fZmlmb193YWl0KDkpOwotCQlpZiAocmluZm8tPmlzX21vYmlsaXR5KSB7Ci0JCQl2Y2xrX2NudGwgPSBJTlBMTChWQ0xLX0VDUF9DTlRMKTsKLQkJCU9VVFBMTChWQ0xLX0VDUF9DTlRMLCB2Y2xrX2NudGwgJiB+UElYQ0xLX0RBQ19BTFdBWVNfT05iKTsKLQkJfQotCi0JCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgb24gZmlyc3QgcGFsZXR0ZSAqLwotCQlpZiAocmluZm8tPmhhc19DUlRDMikgewotCQkJZGFjX2NudGwyID0gSU5SRUcoREFDX0NOVEwyKTsKLQkJCWRhY19jbnRsMiAmPSB+REFDMl9QQUxFVFRFX0FDQ0VTU19DTlRMOwotCQkJT1VUUkVHKERBQ19DTlRMMiwgZGFjX2NudGwyKTsKLQkJfQogCiAJCWlmIChyaW5mby0+YnBwID09IDE2KSB7CiAJCQlwaW5kZXggPSByZWdubyAqIDg7CkBAIC0xMTAxLDI0ICsxMDg5LDI3IEBACiAJCQlpZiAocmluZm8tPmRlcHRoID09IDE1ICYmIHJlZ25vID4gMzEpCiAJCQkJcmV0dXJuIDE7CiAKLQkJCS8qIEZvciA1NjUsIHRoZSBncmVlbiBjb21wb25lbnQgaXMgbWl4ZWQgb25lIG9yZGVyIGJlbG93ICovCisJCQkvKiBGb3IgNTY1LCB0aGUgZ3JlZW4gY29tcG9uZW50IGlzIG1peGVkIG9uZSBvcmRlcgorCQkJICogYmVsb3cKKwkJCSAqLwogCQkJaWYgKHJpbmZvLT5kZXB0aCA9PSAxNikgewogCQkgICAgICAgICAgICAgICAgT1VUUkVHKFBBTEVUVEVfSU5ERVgsIHBpbmRleD4+MSk7Ci0JICAgICAgIAkgICAgICAgICAJT1VUUkVHKFBBTEVUVEVfREFUQSwgKHJpbmZvLT5wYWxldHRlW3JlZ25vPj4xXS5yZWQgPDwgMTYpIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAJKGdyZWVuIDw8IDgpIHwgKHJpbmZvLT5wYWxldHRlW3JlZ25vPj4xXS5ibHVlKSk7CisJICAgICAgIAkgICAgICAgICAJT1VUUkVHKFBBTEVUVEVfREFUQSwKKwkJCQkgICAgICAgKHJpbmZvLT5wYWxldHRlW3JlZ25vPj4xXS5yZWQgPDwgMTYpIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAJKGdyZWVuIDw8IDgpIHwKKwkJCQkgICAgICAgKHJpbmZvLT5wYWxldHRlW3JlZ25vPj4xXS5ibHVlKSk7CiAJICAgICAgICAgICAgICAgIAlncmVlbiA9IHJpbmZvLT5wYWxldHRlW3JlZ25vPDwxXS5ncmVlbjsKIAkgICAgICAgIAl9CiAJCX0KIAogCQlpZiAocmluZm8tPmRlcHRoICE9IDE2IHx8IHJlZ25vIDwgMzIpIHsKIAkJCU9VVFJFRyhQQUxFVFRFX0lOREVYLCBwaW5kZXgpOwotCQkJT1VUUkVHKFBBTEVUVEVfREFUQSwgKHJlZCA8PCAxNikgfCAoZ3JlZW4gPDwgOCkgfCBibHVlKTsKKwkJCU9VVFJFRyhQQUxFVFRFX0RBVEEsIChyZWQgPDwgMTYpIHwKKwkJCSAgICAgICAoZ3JlZW4gPDwgOCkgfCBibHVlKTsKIAkJfQotCQlpZiAocmluZm8tPmlzX21vYmlsaXR5KQotCQkJT1VUUExMKFZDTEtfRUNQX0NOVEwsIHZjbGtfY250bCk7CiAJfQogIAlpZiAocmVnbm8gPCAxNikgewotCQl1MzIgKnBhbCA9IGluZm8tPnBzZXVkb19wYWxldHRlOworCQl1MzIgKnBhbCA9IHJpbmZvLT5pbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKICAgICAgICAgCXN3aXRjaCAocmluZm8tPmRlcHRoKSB7CiAJCWNhc2UgMTU6CiAJCQlwYWxbcmVnbm9dID0gKHJlZ25vIDw8IDEwKSB8IChyZWdubyA8PCA1KSB8IHJlZ25vOwpAQCAtMTEzOCw2ICsxMTI5LDg0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcmFkZW9uZmJfc2V0Y29scmVnICh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKKwkJCSAgICAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCisJCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisgICAgICAgIHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyA9IGluZm8tPnBhcjsKKwl1MzIgZGFjX2NudGwyLCB2Y2xrX2NudGwgPSAwOworCWludCByYzsKKworICAgICAgICBpZiAoIXJpbmZvLT5hc2xlZXApIHsKKwkJaWYgKHJpbmZvLT5pc19tb2JpbGl0eSkgeworCQkJdmNsa19jbnRsID0gSU5QTEwoVkNMS19FQ1BfQ05UTCk7CisJCQlPVVRQTEwoVkNMS19FQ1BfQ05UTCwKKwkJCSAgICAgICB2Y2xrX2NudGwgJiB+UElYQ0xLX0RBQ19BTFdBWVNfT05iKTsKKwkJfQorCisJCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgb24gZmlyc3QgcGFsZXR0ZSAqLworCQlpZiAocmluZm8tPmhhc19DUlRDMikgeworCQkJZGFjX2NudGwyID0gSU5SRUcoREFDX0NOVEwyKTsKKwkJCWRhY19jbnRsMiAmPSB+REFDMl9QQUxFVFRFX0FDQ0VTU19DTlRMOworCQkJT1VUUkVHKERBQ19DTlRMMiwgZGFjX2NudGwyKTsKKwkJfQorCX0KKworCXJjID0gcmFkZW9uX3NldGNvbHJlZyAocmVnbm8sIHJlZCwgZ3JlZW4sIGJsdWUsIHRyYW5zcCwgcmluZm8pOworCisJaWYgKCFyaW5mby0+YXNsZWVwICYmIHJpbmZvLT5pc19tb2JpbGl0eSkKKwkJT1VUUExMKFZDTEtfRUNQX0NOVEwsIHZjbGtfY250bCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcmFkZW9uZmJfc2V0Y21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisgICAgICAgIHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyA9IGluZm8tPnBhcjsKKwl1MTYgKnJlZCwgKmdyZWVuLCAqYmx1ZSwgKnRyYW5zcDsKKwl1MzIgZGFjX2NudGwyLCB2Y2xrX2NudGwgPSAwOworCWludCBpLCBzdGFydCwgcmMgPSAwOworCisgICAgICAgIGlmICghcmluZm8tPmFzbGVlcCkgeworCQlpZiAocmluZm8tPmlzX21vYmlsaXR5KSB7CisJCQl2Y2xrX2NudGwgPSBJTlBMTChWQ0xLX0VDUF9DTlRMKTsKKwkJCU9VVFBMTChWQ0xLX0VDUF9DTlRMLAorCQkJICAgICAgIHZjbGtfY250bCAmIH5QSVhDTEtfREFDX0FMV0FZU19PTmIpOworCQl9CisKKwkJLyogTWFrZSBzdXJlIHdlIGFyZSBvbiBmaXJzdCBwYWxldHRlICovCisJCWlmIChyaW5mby0+aGFzX0NSVEMyKSB7CisJCQlkYWNfY250bDIgPSBJTlJFRyhEQUNfQ05UTDIpOworCQkJZGFjX2NudGwyICY9IH5EQUMyX1BBTEVUVEVfQUNDRVNTX0NOVEw7CisJCQlPVVRSRUcoREFDX0NOVEwyLCBkYWNfY250bDIpOworCQl9CisJfQorCisJcmVkID0gY21hcC0+cmVkOworCWdyZWVuID0gY21hcC0+Z3JlZW47CisJYmx1ZSA9IGNtYXAtPmJsdWU7CisJdHJhbnNwID0gY21hcC0+dHJhbnNwOworCXN0YXJ0ID0gY21hcC0+c3RhcnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY21hcC0+bGVuOyBpKyspIHsKKwkJdV9pbnQgaHJlZCwgaGdyZWVuLCBoYmx1ZSwgaHRyYW5zcCA9IDB4ZmZmZjsKKworCQlocmVkID0gKnJlZCsrOworCQloZ3JlZW4gPSAqZ3JlZW4rKzsKKwkJaGJsdWUgPSAqYmx1ZSsrOworCQlpZiAodHJhbnNwKQorCQkJaHRyYW5zcCA9ICp0cmFuc3ArKzsKKwkJcmMgPSByYWRlb25fc2V0Y29scmVnIChzdGFydCsrLCBocmVkLCBoZ3JlZW4sIGhibHVlLCBodHJhbnNwLAorCQkJCSAgICAgICByaW5mbyk7CisJCWlmIChyYykKKwkJCWJyZWFrOworCX0KKworCWlmICghcmluZm8tPmFzbGVlcCAmJiByaW5mby0+aXNfbW9iaWxpdHkpCisJCU9VVFBMTChWQ0xLX0VDUF9DTlRMLCB2Y2xrX2NudGwpOworCisJcmV0dXJuIHJjOworfQogCiBzdGF0aWMgdm9pZCByYWRlb25fc2F2ZV9zdGF0ZSAoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLAogCQkJICAgICAgIHN0cnVjdCByYWRlb25fcmVncyAqc2F2ZSkKQEAgLTE3OTYsNiArMTg2NSw3IEBACiAJLmZiX2NoZWNrX3ZhcgkJPSByYWRlb25mYl9jaGVja192YXIsCiAJLmZiX3NldF9wYXIJCT0gcmFkZW9uZmJfc2V0X3BhciwKIAkuZmJfc2V0Y29scmVnCQk9IHJhZGVvbmZiX3NldGNvbHJlZywKKwkuZmJfc2V0Y21hcAkJPSByYWRlb25mYl9zZXRjbWFwLAogCS5mYl9wYW5fZGlzcGxheSAJPSByYWRlb25mYl9wYW5fZGlzcGxheSwKIAkuZmJfYmxhbmsJCT0gcmFkZW9uZmJfYmxhbmssCiAJLmZiX2lvY3RsCQk9IHJhZGVvbmZiX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCA1OWUzYjRiLi5iMjA5YWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtOTA2LDEwICs5MDYsMTMgQEAKIAlzdHJ1Y3QgdmNfZGF0YSAqc3ZjID0gKmRlZmF1bHRfbW9kZTsKIAlzdHJ1Y3QgZGlzcGxheSAqdCwgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKIAlpbnQgbG9nbyA9IDEsIG5ld19yb3dzLCBuZXdfY29scywgcm93cywgY29scywgY2hhcmNudCA9IDI1NjsKLQlpbnQgY2FwID0gaW5mby0+ZmxhZ3M7CisJaW50IGNhcDsKIAogCWlmIChpbmZvX2lkeCA9PSAtMSB8fCBpbmZvID09IE5VTEwpCiAJICAgIHJldHVybjsKKworCWNhcCA9IGluZm8tPmZsYWdzOworCiAJaWYgKHZjICE9IHN2YyB8fCBsb2dvX3Nob3duID09IEZCQ09OX0xPR09fRE9OVFNIT1cgfHwKIAkgICAgKGluZm8tPmZpeC50eXBlID09IEZCX1RZUEVfVEVYVCkpCiAJCWxvZ28gPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCmluZGV4IDdkMWFlMDYuLmJjZjU5YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKQEAgLTMzNyw2ICszMzcsOCBAQAogCWMtPnZjX3NjYW5fbGluZXMgPSB2Z2Ffc2Nhbl9saW5lczsKIAljLT52Y19mb250LmhlaWdodCA9IHZnYV92aWRlb19mb250X2hlaWdodDsKIAljLT52Y19jb21wbGVtZW50X21hc2sgPSAweDc3MDA7CisJaWYgKHZnYV81MTJfY2hhcnMpCisJCWMtPnZjX2hpX2ZvbnRfbWFzayA9IDB4MDgwMDsKIAlwID0gKmMtPnZjX3VuaV9wYWdlZGlyX2xvYzsKIAlpZiAoYy0+dmNfdW5pX3BhZ2VkaXJfbG9jID09ICZjLT52Y191bmlfcGFnZWRpciB8fAogCSAgICAhLS1jLT52Y191bmlfcGFnZWRpcl9sb2NbMV0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKaW5kZXggOGIxYjdjNi4uMzg5NGIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYwpAQCAtOTAsNiArOTAsOCBAQAogCSAqLwogCXVfY2hhcgkJCXJhbWRhY19jdHJsOwogCXVfY2hhcgkJCXJhbWRhY19wb3dlcmRvd247CisKKwl1MzIJCQlwc2V1ZG9fcGFsZXR0ZVsxNl07CiB9OwogCiBzdGF0aWMgY2hhciAqZGVmYXVsdF9mb250ID0gIkFjb3JuOHg4IjsKQEAgLTEyMjMsOSArMTIyNSw3IEBACiB7CiAJc3RydWN0IGNmYl9pbmZvICpjZmI7CiAKLQljZmIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2ZiX2luZm8pICsKLQkJICAgICAgIHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwpOwotCisJY2ZiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNmYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjZmIpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xMjgxLDcgKzEyODEsNyBAQAogCiAJY2ZiLT5mYi5mYm9wcwkJPSAmY3liZXIyMDAwZmJfb3BzOwogCWNmYi0+ZmIuZmxhZ3MJCT0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fSFdBQ0NFTF9ZUEFOOwotCWNmYi0+ZmIucHNldWRvX3BhbGV0dGUJPSAodm9pZCAqKShjZmIgKyAxKTsKKwljZmItPmZiLnBzZXVkb19wYWxldHRlCT0gY2ZiLT5wc2V1ZG9fcGFsZXR0ZTsKIAogCWZiX2FsbG9jX2NtYXAoJmNmYi0+ZmIuY21hcCwgTlJfUEFMRVRURSwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJjbWFwLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiY21hcC5jCmluZGV4IGM1MWY4ZmIuLjRlNWNlOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJjbWFwLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmNtYXAuYwpAQCAtMjIyLDggKzIyMiwxMSBAQAogCXRyYW5zcCA9IGNtYXAtPnRyYW5zcDsKIAlzdGFydCA9IGNtYXAtPnN0YXJ0OwogCi0JaWYgKHN0YXJ0IDwgMCB8fCAhaW5mby0+ZmJvcHMtPmZiX3NldGNvbHJlZykKKwlpZiAoc3RhcnQgPCAwIHx8ICghaW5mby0+ZmJvcHMtPmZiX3NldGNvbHJlZyAmJgorCQkJICAhaW5mby0+ZmJvcHMtPmZiX3NldGNtYXApKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaW5mby0+ZmJvcHMtPmZiX3NldGNtYXApCisJCXJldHVybiBpbmZvLT5mYm9wcy0+ZmJfc2V0Y21hcChjbWFwLCBpbmZvKTsKIAlmb3IgKGkgPSAwOyBpIDwgY21hcC0+bGVuOyBpKyspIHsKIAkJaHJlZCA9ICpyZWQrKzsKIAkJaGdyZWVuID0gKmdyZWVuKys7CkBAIC0yNTAsOCArMjUzLDMzIEBACiAJdHJhbnNwID0gY21hcC0+dHJhbnNwOwogCXN0YXJ0ID0gY21hcC0+c3RhcnQ7CiAKLQlpZiAoc3RhcnQgPCAwIHx8ICFpbmZvLT5mYm9wcy0+ZmJfc2V0Y29scmVnKQorCWlmIChzdGFydCA8IDAgfHwgKCFpbmZvLT5mYm9wcy0+ZmJfc2V0Y29scmVnICYmCisJCQkgICFpbmZvLT5mYm9wcy0+ZmJfc2V0Y21hcCkpCiAJCXJldHVybiAtRUlOVkFMOworCisJLyogSWYgd2UgY2FuIGJhdGNoLCBkbyBpdCAqLworCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2V0Y21hcCAmJiBjbWFwLT5sZW4gPiAxKSB7CisJCXN0cnVjdCBmYl9jbWFwIHVtYXA7CisJCWludCBzaXplID0gY21hcC0+bGVuICogc2l6ZW9mKHUxNik7CisJCWludCByYzsKKworCQltZW1zZXQoJnVtYXAsIDAsIHNpemVvZihzdHJ1Y3QgZmJfY21hcCkpOworCQlyYyA9IGZiX2FsbG9jX2NtYXAoJnVtYXAsIGNtYXAtPmxlbiwgdHJhbnNwICE9IE5VTEwpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJCWlmIChjb3B5X2Zyb21fdXNlcih1bWFwLnJlZCwgcmVkLCBzaXplKSB8fAorCQkgICAgY29weV9mcm9tX3VzZXIodW1hcC5ncmVlbiwgZ3JlZW4sIHNpemUpIHx8CisJCSAgICBjb3B5X2Zyb21fdXNlcih1bWFwLmJsdWUsIGJsdWUsIHNpemUpIHx8CisJCSAgICAodHJhbnNwICYmIGNvcHlfZnJvbV91c2VyKHVtYXAudHJhbnNwLCB0cmFuc3AsIHNpemUpKSkgeworCQkJcmMgPSAtRUZBVUxUOworCQl9CisJCXVtYXAuc3RhcnQgPSBzdGFydDsKKwkJaWYgKHJjID09IDApCisJCQlyYyA9IGluZm8tPmZib3BzLT5mYl9zZXRjbWFwKCZ1bWFwLCBpbmZvKTsKKwkJZmJfZGVhbGxvY19jbWFwKCZ1bWFwKTsKKwkJcmV0dXJuIHJjOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBjbWFwLT5sZW47IGkrKywgcmVkKyssIGJsdWUrKywgZ3JlZW4rKykgewogCQlpZiAoZ2V0X3VzZXIoaHJlZCwgcmVkKSB8fAogCQkgICAgZ2V0X3VzZXIoaGdyZWVuLCBncmVlbikgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCAyNWY0NjBjLi43NzA1MDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC0xMjU3LDYgKzEyNTcsOCBAQAogc3RhdGljIGNoYXIgKnZpZGVvX29wdGlvbnNbRkJfTUFYXTsKIHN0YXRpYyBpbnQgb2Zvbmx5OwogCitleHRlcm4gY29uc3QgY2hhciAqZ2xvYmFsX21vZGVfb3B0aW9uOworCiAvKioKICAqIGZiX2dldF9vcHRpb25zIC0gZ2V0IGtlcm5lbCBib290IHBhcmFtZXRlcnMKICAqIEBuYW1lOiAgIGZyYW1lYnVmZmVyIG5hbWUgYXMgaXQgd291bGQgYXBwZWFyIGluCkBAIC0xMjk3LDkgKzEyOTksNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLQotZXh0ZXJuIGNvbnN0IGNoYXIgKmdsb2JhbF9tb2RlX29wdGlvbjsKLQogLyoqCiAgKgl2aWRlb19zZXR1cCAtIHByb2Nlc3MgY29tbWFuZCBsaW5lIG9wdGlvbnMKICAqCUBvcHRpb25zOiBzdHJpbmcgb2Ygb3B0aW9ucwpAQCAtMTMxMyw3ICsxMzEyLDcgQEAKICAqCVJldHVybnMgemVyby4KICAqCiAgKi8KLWludCBfX2luaXQgdmlkZW9fc2V0dXAoY2hhciAqb3B0aW9ucykKK3N0YXRpYyBpbnQgX19pbml0IHZpZGVvX3NldHVwKGNoYXIgKm9wdGlvbnMpCiB7CiAJaW50IGksIGdsb2JhbCA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtb24uYyBiL2RyaXZlcnMvdmlkZW8vZmJtb24uYwppbmRleCA5NzhkZWYwLi42Y2QxOTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibW9uLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1vbi5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgogI2VuZGlmCi0jaW5jbHVkZSA8dmlkZW8vZWRpZC5oPgogI2luY2x1ZGUgImVkaWQuaCIKIAogLyogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYyBiL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jCmluZGV4IDJiZGRhNDAuLmM3OGEyYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jCkBAIC0zNTQsNyArMzU0LDcgQEAKIAkJCWZiX2luZm8tPnZhci54b2Zmc2V0KTsKIH0KIAotc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgY2xhc3NfZGV2aWNlX2F0dHJzW10gPSB7CitzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgY2xhc3NfZGV2aWNlX2F0dHJzW10gPSB7CiAJX19BVFRSKGJpdHNfcGVyX3BpeGVsLCBTX0lSVUdPfFNfSVdVU1IsIHNob3dfYnBwLCBzdG9yZV9icHApLAogCV9fQVRUUihibGFuaywgU19JUlVHT3xTX0lXVVNSLCBzaG93X2JsYW5rLCBzdG9yZV9ibGFuayksCiAJX19BVFRSKGNvbG9yX21hcCwgU19JUlVHT3xTX0lXVVNSLCBzaG93X2NtYXAsIHN0b3JlX2NtYXApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCmluZGV4IDllYzg3ODEuLmE5YTYxOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKQEAgLTk5OSw4ICs5OTksMTYgQEAKIAlpbmZvLT5tb25zcGVjcy5kY2xrbWluID0gMTUwMDAwMDA7CiAKIAlpZiAoZmJfdmFsaWRhdGVfbW9kZSh2YXIsIGluZm8pKSB7Ci0JCWlmIChmYl9nZXRfbW9kZShGQl9NQVhUSU1JTkdTLCAwLCB2YXIsIGluZm8pKQorCQlpZiAoZmJfZ2V0X21vZGUoRkJfTUFYVElNSU5HUywgMCwgdmFyLCBpbmZvKSkgeworCQkJaW50IGRlZmF1bHRfc3luYyA9IChpbmZvLT5tb25zcGVjcy5oZm1pbi1IRk1JTikKKwkJCQkJCXwoaW5mby0+bW9uc3BlY3MuaGZtYXgtSEZNQVgpCisJCQkJCQl8KGluZm8tPm1vbnNwZWNzLnZmbWluLVZGTUlOKQorCQkJCQkJfChpbmZvLT5tb25zcGVjcy52Zm1heC1WRk1BWCk7CisJCQlwcmludGsoImk4MTBmYjogaW52YWxpZCB2aWRlbyBtb2RlJXNcbiIsCisJCQkgICAgZGVmYXVsdF9zeW5jID8gIiIgOgorCQkJICAgICIuIFNwZWNpZnlpbmcgdnN5bmNOL2hzeW5jTiBwYXJhbWV0ZXJzIG1heSBoZWxwIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAkKIAl2YXItPnhyZXMgPSB4cmVzOwpAQCAtMjAyMywxMCArMjAzMSwxMCBAQAogCQkgIiAoZGVmYXVsdCA9IDQ4MCkiKTsKIG1vZHVsZV9wYXJhbShoc3luYzEsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGhzeW5jMSwgIk1pbmltdW0gaG9yaXpvbnRhbCBmcmVxdWVuY3kgb2YgbW9uaXRvciBpbiBLSHoiCi0JCSAiIChkZWZhdWx0ID0gMzEpIik7CisJCSAiIChkZWZhdWx0ID0gMjkpIik7CiBtb2R1bGVfcGFyYW0oaHN5bmMyLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhoc3luYzIsICJNYXhpbXVtIGhvcml6b250YWwgZnJlcXVlbmN5IG9mIG1vbml0b3IgaW4gS0h6IgotCQkgIiAoZGVmYXVsdCA9IDMxKSIpOworCQkgIiAoZGVmYXVsdCA9IDMwKSIpOwogbW9kdWxlX3BhcmFtKHZzeW5jMSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModnN5bmMxLCAiTWluaW11bSB2ZXJ0aWNhbCBmcmVxdWVuY3kgb2YgbW9uaXRvciBpbiBIeiIKIAkJICIgKGRlZmF1bHQgPSA1MCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW1zdHRmYi5jIGIvZHJpdmVycy92aWRlby9pbXN0dGZiLmMKaW5kZXggNWE3MmNhMy4uN2I5YmY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbXN0dGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9pbXN0dGZiLmMKQEAgLTEyODcsMTIgKzEyODcsMTIgQEAKIAkJY2FzZSBGQklNU1RUX1NFVENNQVBSRUc6CiAJCQlpZiAoY29weV9mcm9tX3VzZXIocmVnLCBhcmdwLCA4KSB8fCByZWdbMF0gPiAoMHgxMDAwIC0gc2l6ZW9mKHJlZ1swXSkpIC8gc2l6ZW9mKHJlZ1swXSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl3cml0ZV9yZWdfbGUzMigoKHVfaW50ICopcGFyLT5jbWFwX3JlZ3MpLCByZWdbMF0sIHJlZ1sxXSk7CisJCQl3cml0ZV9yZWdfbGUzMigoKHVfaW50IF9faW9tZW0gKilwYXItPmNtYXBfcmVncyksIHJlZ1swXSwgcmVnWzFdKTsKIAkJCXJldHVybiAwOwogCQljYXNlIEZCSU1TVFRfR0VUQ01BUFJFRzoKIAkJCWlmIChjb3B5X2Zyb21fdXNlcihyZWcsIGFyZ3AsIDQpIHx8IHJlZ1swXSA+ICgweDEwMDAgLSBzaXplb2YocmVnWzBdKSkgLyBzaXplb2YocmVnWzBdKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJlZ1sxXSA9IHJlYWRfcmVnX2xlMzIoKCh1X2ludCAqKXBhci0+Y21hcF9yZWdzKSwgcmVnWzBdKTsKKwkJCXJlZ1sxXSA9IHJlYWRfcmVnX2xlMzIoKCh1X2ludCBfX2lvbWVtICopcGFyLT5jbWFwX3JlZ3MpLCByZWdbMF0pOwogCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikoYXJnICsgNCksICZyZWdbMV0sIDQpKQogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZlMWMxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwpAQCAtMCwwICsxLDY5NSBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKKyAqCisgKiAgRnJlZXNjYWxlIGkuTVggRnJhbWUgQnVmZmVyIGRldmljZSBkcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXgKKyAqICAgQmFzZWQgb24gYWNvcm5mYi5jIENvcHlyaWdodCAoQykgUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBQbGVhc2UgZGlyZWN0IHlvdXIgcXVlc3Rpb25zIGFuZCBjb21tZW50cyBvbiB0aGlzIGRyaXZlciB0byB0aGUgZm9sbG93aW5nCisgKiBlbWFpbCBhZGRyZXNzOgorICoKKyAqCWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51aworICovCisKKy8vI2RlZmluZSBERUJVRyAxCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW14ZmIuaD4KKworLyoKKyAqIENvbXBsYWluIGlmIFZBUiBpcyBvdXQgb2YgcmFuZ2UuCisgKi8KKyNkZWZpbmUgREVCVUdfVkFSIDEKKworI2luY2x1ZGUgImlteGZiLmgiCisKK3N0YXRpYyBzdHJ1Y3QgaW14ZmJfcmdiIGRlZl9yZ2JfMTYgPSB7CisJLnJlZAk9IHsgLm9mZnNldCA9IDgsICAubGVuZ3RoID0gNCwgfSwKKwkuZ3JlZW4JPSB7IC5vZmZzZXQgPSA0LCAgLmxlbmd0aCA9IDQsIH0sCisJLmJsdWUJPSB7IC5vZmZzZXQgPSAwLCAgLmxlbmd0aCA9IDQsIH0sCisJLnRyYW5zcCA9IHsgLm9mZnNldCA9IDAsICAubGVuZ3RoID0gMCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14ZmJfcmdiIGRlZl9yZ2JfOCA9IHsKKwkucmVkCT0geyAub2Zmc2V0ID0gMCwgIC5sZW5ndGggPSA4LCB9LAorCS5ncmVlbgk9IHsgLm9mZnNldCA9IDAsICAubGVuZ3RoID0gOCwgfSwKKwkuYmx1ZQk9IHsgLm9mZnNldCA9IDAsICAubGVuZ3RoID0gOCwgfSwKKwkudHJhbnNwID0geyAub2Zmc2V0ID0gMCwgIC5sZW5ndGggPSAwLCB9LAorfTsKKworc3RhdGljIGludCBpbXhmYl9hY3RpdmF0ZV92YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKworc3RhdGljIGlubGluZSB1X2ludCBjaGFuX3RvX2ZpZWxkKHVfaW50IGNoYW4sIHN0cnVjdCBmYl9iaXRmaWVsZCAqYmYpCit7CisJY2hhbiAmPSAweGZmZmY7CisJY2hhbiA+Pj0gMTYgLSBiZi0+bGVuZ3RoOworCXJldHVybiBjaGFuIDw8IGJmLT5vZmZzZXQ7Cit9CisKKyNkZWZpbmUgTENEQ19QQUxFVFRFKHgpIF9fUkVHMihJTVhfTENEQ19CQVNFKzB4ODAwLCAoeCk8PDIpCitzdGF0aWMgaW50CitpbXhmYl9zZXRwYWxldHRlcmVnKHVfaW50IHJlZ25vLCB1X2ludCByZWQsIHVfaW50IGdyZWVuLCB1X2ludCBibHVlLAorCQkgICAgICAgdV9pbnQgdHJhbnMsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CisJdV9pbnQgdmFsLCByZXQgPSAxOworCisjZGVmaW5lIENOVlRfVE9IVyh2YWwsd2lkdGgpICgoKCh2YWwpPDwod2lkdGgpKSsweDdGRkYtKHZhbCkpPj4xNikKKwlpZiAocmVnbm8gPCBmYmktPnBhbGV0dGVfc2l6ZSkgeworCQl2YWwgPSAoQ05WVF9UT0hXKHJlZCwgNCkgPDwgOCkgfAorCQkgICAgICAoQ05WVF9UT0hXKGdyZWVuLDQpIDw8IDQpIHwKKwkJICAgICAgQ05WVF9UT0hXKGJsdWUsICA0KTsKKworCQlMQ0RDX1BBTEVUVEUocmVnbm8pID0gdmFsOworCQlyZXQgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitpbXhmYl9zZXRjb2xyZWcodV9pbnQgcmVnbm8sIHVfaW50IHJlZCwgdV9pbnQgZ3JlZW4sIHVfaW50IGJsdWUsCisJCSAgIHVfaW50IHRyYW5zLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IHJldCA9IDE7CisKKwkvKgorCSAqIElmIGludmVyc2UgbW9kZSB3YXMgc2VsZWN0ZWQsIGludmVydCBhbGwgdGhlIGNvbG91cnMKKwkgKiByYXRoZXIgdGhhbiB0aGUgcmVnaXN0ZXIgbnVtYmVyLiAgVGhlIHJlZ2lzdGVyIG51bWJlcgorCSAqIGlzIHdoYXQgeW91IHBva2UgaW50byB0aGUgZnJhbWVidWZmZXIgdG8gcHJvZHVjZSB0aGUKKwkgKiBjb2xvdXIgeW91IHJlcXVlc3RlZC4KKwkgKi8KKwlpZiAoZmJpLT5jbWFwX2ludmVyc2UpIHsKKwkJcmVkICAgPSAweGZmZmYgLSByZWQ7CisJCWdyZWVuID0gMHhmZmZmIC0gZ3JlZW47CisJCWJsdWUgID0gMHhmZmZmIC0gYmx1ZTsKKwl9CisKKwkvKgorCSAqIElmIGdyZXlzY2FsZSBpcyB0cnVlLCB0aGVuIHdlIGNvbnZlcnQgdGhlIFJHQiB2YWx1ZQorCSAqIHRvIGdyZXlzY2FsZSBubyBtYXRlciB3aGF0IHZpc3VhbCB3ZSBhcmUgdXNpbmcuCisJICovCisJaWYgKGluZm8tPnZhci5ncmF5c2NhbGUpCisJCXJlZCA9IGdyZWVuID0gYmx1ZSA9ICgxOTU5NSAqIHJlZCArIDM4NDcwICogZ3JlZW4gKworCQkJCQk3NDcxICogYmx1ZSkgPj4gMTY7CisKKwlzd2l0Y2ggKGluZm8tPmZpeC52aXN1YWwpIHsKKwljYXNlIEZCX1ZJU1VBTF9UUlVFQ09MT1I6CisJCS8qCisJCSAqIDEyIG9yIDE2LWJpdCBUcnVlIENvbG91ci4gIFdlIGVuY29kZSB0aGUgUkdCIHZhbHVlCisJCSAqIGFjY29yZGluZyB0byB0aGUgUkdCIGJpdGZpZWxkIGluZm9ybWF0aW9uLgorCQkgKi8KKwkJaWYgKHJlZ25vIDwgMTYpIHsKKwkJCXUzMiAqcGFsID0gaW5mby0+cHNldWRvX3BhbGV0dGU7CisKKwkJCXZhbCAgPSBjaGFuX3RvX2ZpZWxkKHJlZCwgJmluZm8tPnZhci5yZWQpOworCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoZ3JlZW4sICZpbmZvLT52YXIuZ3JlZW4pOworCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoYmx1ZSwgJmluZm8tPnZhci5ibHVlKTsKKworCQkJcGFsW3JlZ25vXSA9IHZhbDsKKwkJCXJldCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZCX1ZJU1VBTF9TVEFUSUNfUFNFVURPQ09MT1I6CisJY2FzZSBGQl9WSVNVQUxfUFNFVURPQ09MT1I6CisJCXJldCA9IGlteGZiX3NldHBhbGV0dGVyZWcocmVnbm8sIHJlZCwgZ3JlZW4sIGJsdWUsIHRyYW5zLCBpbmZvKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICBpbXhmYl9jaGVja192YXIoKToKKyAqICAgIFJvdW5kIHVwIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6IGJpdHNfcGVyX3BpeGVsLCB4cmVzLAorICogICAgeXJlcywgeHJlc192aXJ0dWFsLCB5cmVzX3ZpcnR1YWwsIHhvZmZzZXQsIHlvZmZzZXQsIGdyYXlzY2FsZSwKKyAqICAgIGJpdGZpZWxkcywgaG9yaXpvbnRhbCB0aW1pbmcsIHZlcnRpY2FsIHRpbWluZy4KKyAqLworc3RhdGljIGludAoraW14ZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOworCWludCByZ2JpZHg7CisKKwlpZiAodmFyLT54cmVzIDwgTUlOX1hSRVMpCisJCXZhci0+eHJlcyA9IE1JTl9YUkVTOworCWlmICh2YXItPnlyZXMgPCBNSU5fWVJFUykKKwkJdmFyLT55cmVzID0gTUlOX1lSRVM7CisJaWYgKHZhci0+eHJlcyA+IGZiaS0+bWF4X3hyZXMpCisJCXZhci0+eHJlcyA9IGZiaS0+bWF4X3hyZXM7CisJaWYgKHZhci0+eXJlcyA+IGZiaS0+bWF4X3lyZXMpCisJCXZhci0+eXJlcyA9IGZiaS0+bWF4X3lyZXM7CisJdmFyLT54cmVzX3ZpcnR1YWwgPSBtYXgodmFyLT54cmVzX3ZpcnR1YWwsIHZhci0+eHJlcyk7CisJdmFyLT55cmVzX3ZpcnR1YWwgPSBtYXgodmFyLT55cmVzX3ZpcnR1YWwsIHZhci0+eXJlcyk7CisKKwlwcl9kZWJ1ZygidmFyLT5iaXRzX3Blcl9waXhlbD0lZFxuIiwgdmFyLT5iaXRzX3Blcl9waXhlbCk7CisJc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSAxNjoKKwkJcmdiaWR4ID0gUkdCXzE2OworCQlicmVhazsKKwljYXNlIDg6CisJCXJnYmlkeCA9IFJHQl84OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZ2JpZHggPSBSR0JfMTY7CisJfQorCisJLyoKKwkgKiBDb3B5IHRoZSBSR0IgcGFyYW1ldGVycyBmb3IgdGhpcyBkaXNwbGF5CisJICogZnJvbSB0aGUgbWFjaGluZSBzcGVjaWZpYyBwYXJhbWV0ZXJzLgorCSAqLworCXZhci0+cmVkICAgID0gZmJpLT5yZ2JbcmdiaWR4XS0+cmVkOworCXZhci0+Z3JlZW4gID0gZmJpLT5yZ2JbcmdiaWR4XS0+Z3JlZW47CisJdmFyLT5ibHVlICAgPSBmYmktPnJnYltyZ2JpZHhdLT5ibHVlOworCXZhci0+dHJhbnNwID0gZmJpLT5yZ2JbcmdiaWR4XS0+dHJhbnNwOworCisJcHJfZGVidWcoIlJHQlQgbGVuZ3RoID0gJWQ6JWQ6JWQ6JWRcbiIsCisJCXZhci0+cmVkLmxlbmd0aCwgdmFyLT5ncmVlbi5sZW5ndGgsIHZhci0+Ymx1ZS5sZW5ndGgsCisJCXZhci0+dHJhbnNwLmxlbmd0aCk7CisKKwlwcl9kZWJ1ZygiUkdCVCBvZmZzZXQgPSAlZDolZDolZDolZFxuIiwKKwkJdmFyLT5yZWQub2Zmc2V0LCB2YXItPmdyZWVuLm9mZnNldCwgdmFyLT5ibHVlLm9mZnNldCwKKwkJdmFyLT50cmFuc3Aub2Zmc2V0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogaW14ZmJfc2V0X3BhcigpOgorICoJU2V0IHRoZSB1c2VyIGRlZmluZWQgcGFydCBvZiB0aGUgZGlzcGxheSBmb3IgdGhlIHNwZWNpZmllZCBjb25zb2xlCisgKi8KK3N0YXRpYyBpbnQgaW14ZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKKworCXByX2RlYnVnKCJzZXRfcGFyXG4iKTsKKworCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDE2KQorCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwllbHNlIGlmICghZmJpLT5jbWFwX3N0YXRpYykKKwkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKKwllbHNlIHsKKwkJLyoKKwkJICogU29tZSBwZW9wbGUgaGF2ZSB3ZWlyZCBpZGVhcyBhYm91dCB3YW50aW5nIHN0YXRpYworCQkgKiBwc2V1ZG9jb2xvciBtYXBzLiAgSSBzdXNwZWN0IHRoZWlyIHVzZXIgc3BhY2UKKwkJICogYXBwbGljYXRpb25zIGFyZSBicm9rZW4uCisJCSAqLworCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUjsKKwl9CisKKwlpbmZvLT5maXgubGluZV9sZW5ndGggPSB2YXItPnhyZXNfdmlydHVhbCAqCisJCQkJICB2YXItPmJpdHNfcGVyX3BpeGVsIC8gODsKKwlmYmktPnBhbGV0dGVfc2l6ZSA9IHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gOCA/IDI1NiA6IDE2OworCisJaW14ZmJfYWN0aXZhdGVfdmFyKHZhciwgaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW14ZmJfZW5hYmxlX2NvbnRyb2xsZXIoc3RydWN0IGlteGZiX2luZm8gKmZiaSkKK3sKKwlwcl9kZWJ1ZygiRW5hYmxpbmcgTENEIGNvbnRyb2xsZXJcbiIpOworCisJLyogaW5pdGlhbGl6ZSBMQ0RDICovCisJTENEQ19STUNSICY9IH5STUNSX0xDRENfRU47CQkvKiBqdXN0IHRvIGJlIHNhZmUuLi4gKi8KKworCUxDRENfU1NBCT0gZmJpLT5zY3JlZW5fZG1hOworCS8qIHBoeXNpY2FsIHNjcmVlbiBzdGFydCBhZGRyZXNzCSAgICAqLworCUxDRENfVlBXCT0gVlBXX1ZQVyhmYmktPm1heF94cmVzICogZmJpLT5tYXhfYnBwIC8gOCAvIDQpOworCisJTENEQ19QT1MJPSAweDAwMDAwMDAwOyAgIC8qIHBhbm5pbmcgb2Zmc2V0IDAgKDAgcGl4ZWwgb2Zmc2V0KSAgICAgICAgKi8KKworCS8qIGRpc2FibGUgaGFyZHdhcmUgY3Vyc29yICovCisJTENEQ19DUE9TCSY9IH4oQ1BPU19DQzAgfCBDUE9TX0NDMSk7CisKKwkvKiBmaXhlZCBidXJzdCBsZW5ndGggKHNlZSBlcnJhdHVtIDExKSAqLworCUxDRENfRE1BQ1IgPSBETUFDUl9CVVJTVCB8IERNQUNSX0hNKDgpIHwgRE1BQ1JfVE0oMik7CisKKwlMQ0RDX1JNQ1IgPSBSTUNSX0xDRENfRU47CisKKwlpZihmYmktPmJhY2tsaWdodF9wb3dlcikKKwkJZmJpLT5iYWNrbGlnaHRfcG93ZXIoMSk7CisJaWYoZmJpLT5sY2RfcG93ZXIpCisJCWZiaS0+bGNkX3Bvd2VyKDEpOworfQorCitzdGF0aWMgdm9pZCBpbXhmYl9kaXNhYmxlX2NvbnRyb2xsZXIoc3RydWN0IGlteGZiX2luZm8gKmZiaSkKK3sKKwlwcl9kZWJ1ZygiRGlzYWJsaW5nIExDRCBjb250cm9sbGVyXG4iKTsKKworCWlmKGZiaS0+YmFja2xpZ2h0X3Bvd2VyKQorCQlmYmktPmJhY2tsaWdodF9wb3dlcigwKTsKKwlpZihmYmktPmxjZF9wb3dlcikKKwkJZmJpLT5sY2RfcG93ZXIoMCk7CisKKwlMQ0RDX1JNQ1IgPSAwOworfQorCitzdGF0aWMgaW50IGlteGZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKKworCXByX2RlYnVnKCJpbXhmYl9ibGFuazogYmxhbms9JWRcbiIsIGJsYW5rKTsKKworCXN3aXRjaCAoYmxhbmspIHsKKwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKKwljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6CisJY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgorCWNhc2UgRkJfQkxBTktfTk9STUFMOgorCQlpbXhmYl9kaXNhYmxlX2NvbnRyb2xsZXIoZmJpKTsKKwkJYnJlYWs7CisKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CisJCWlteGZiX2VuYWJsZV9jb250cm9sbGVyKGZiaSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgaW14ZmJfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyCT0gaW14ZmJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyCT0gaW14ZmJfc2V0X3BhciwKKwkuZmJfc2V0Y29scmVnCT0gaW14ZmJfc2V0Y29scmVnLAorCS5mYl9maWxscmVjdAk9IGNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSBjZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCisJLmZiX2JsYW5rCT0gaW14ZmJfYmxhbmssCisJLmZiX2N1cnNvcgk9IHNvZnRfY3Vyc29yLCAvKiBGSVhNRTogaS5NWCBjYW4gZG8gaGFyZHdhcmUgY3Vyc29yICovCit9OworCisvKgorICogaW14ZmJfYWN0aXZhdGVfdmFyKCk6CisgKglDb25maWd1cmVzIExDRCBDb250cm9sbGVyIGJhc2VkIG9uIGVudHJpZXMgaW4gdmFyIHBhcmFtZXRlci4gIFNldHRpbmdzIGFyZQorICoJb25seSB3cml0dGVuIHRvIHRoZSBjb250cm9sbGVyIGlmIGNoYW5nZXMgd2VyZSBtYWRlLgorICovCitzdGF0aWMgaW50IGlteGZiX2FjdGl2YXRlX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKKwlwcl9kZWJ1ZygidmFyOiB4cmVzPSVkIGhzbGVuPSVkIGxtPSVkIHJtPSVkXG4iLAorCQl2YXItPnhyZXMsIHZhci0+aHN5bmNfbGVuLAorCQl2YXItPmxlZnRfbWFyZ2luLCB2YXItPnJpZ2h0X21hcmdpbik7CisJcHJfZGVidWcoInZhcjogeXJlcz0lZCB2c2xlbj0lZCB1bT0lZCBibT0lZFxuIiwKKwkJdmFyLT55cmVzLCB2YXItPnZzeW5jX2xlbiwKKwkJdmFyLT51cHBlcl9tYXJnaW4sIHZhci0+bG93ZXJfbWFyZ2luKTsKKworI2lmIERFQlVHX1ZBUgorCWlmICh2YXItPnhyZXMgPCAxNiAgICAgICAgfHwgdmFyLT54cmVzID4gMTAyNCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCB4cmVzICVkXG4iLAorCQkJaW5mby0+Zml4LmlkLCB2YXItPnhyZXMpOworCWlmICh2YXItPmhzeW5jX2xlbiA8IDEgICAgfHwgdmFyLT5oc3luY19sZW4gPiA2NCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBoc3luY19sZW4gJWRcbiIsCisJCQlpbmZvLT5maXguaWQsIHZhci0+aHN5bmNfbGVuKTsKKwlpZiAodmFyLT5sZWZ0X21hcmdpbiA+IDI1NSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBsZWZ0X21hcmdpbiAlZFxuIiwKKwkJCWluZm8tPmZpeC5pZCwgdmFyLT5sZWZ0X21hcmdpbik7CisJaWYgKHZhci0+cmlnaHRfbWFyZ2luID4gMjU1KQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHJpZ2h0X21hcmdpbiAlZFxuIiwKKwkJCWluZm8tPmZpeC5pZCwgdmFyLT5yaWdodF9tYXJnaW4pOworCWlmICh2YXItPnlyZXMgPCAxIHx8IHZhci0+eXJlcyA+IDUxMSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCB5cmVzICVkXG4iLAorCQkJaW5mby0+Zml4LmlkLCB2YXItPnlyZXMpOworCWlmICh2YXItPnZzeW5jX2xlbiA+IDEwMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCB2c3luY19sZW4gJWRcbiIsCisJCQlpbmZvLT5maXguaWQsIHZhci0+dnN5bmNfbGVuKTsKKwlpZiAodmFyLT51cHBlcl9tYXJnaW4gPiA2MykKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCB1cHBlcl9tYXJnaW4gJWRcbiIsCisJCQlpbmZvLT5maXguaWQsIHZhci0+dXBwZXJfbWFyZ2luKTsKKwlpZiAodmFyLT5sb3dlcl9tYXJnaW4gPiAyNTUpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgbG93ZXJfbWFyZ2luICVkXG4iLAorCQkJaW5mby0+Zml4LmlkLCB2YXItPmxvd2VyX21hcmdpbik7CisjZW5kaWYKKworCUxDRENfSENSCT0gSENSX0hfV0lEVEgodmFyLT5oc3luY19sZW4pIHwKKwkgICAgICAgICAgICAgICAgICBIQ1JfSF9XQUlUXzEodmFyLT5sZWZ0X21hcmdpbikgfAorCQkJICBIQ1JfSF9XQUlUXzIodmFyLT5yaWdodF9tYXJnaW4pOworCisJTENEQ19WQ1IJPSBWQ1JfVl9XSURUSCh2YXItPnZzeW5jX2xlbikgfAorCSAgICAgICAgICAgICAgICAgIFZDUl9WX1dBSVRfMSh2YXItPnVwcGVyX21hcmdpbikgfAorCQkJICBWQ1JfVl9XQUlUXzIodmFyLT5sb3dlcl9tYXJnaW4pOworCisJTENEQ19TSVpFCT0gU0laRV9YTUFYKHZhci0+eHJlcykgfCBTSVpFX1lNQVgodmFyLT55cmVzKTsKKwlMQ0RDX1BDUgk9IGZiaS0+cGNyOworCUxDRENfUFdNUgk9IGZiaS0+cHdtcjsKKwlMQ0RDX0xTQ1IxCT0gZmJpLT5sc2NyMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbXhmYl9zZXR1cF9ncGlvKHN0cnVjdCBpbXhmYl9pbmZvICpmYmkpCit7CisJaW50IHdpZHRoOworCisJTENEQ19STUNSCSY9IH4oUk1DUl9MQ0RDX0VOIHwgUk1DUl9TRUxGX1JFRik7CisKKwlpZiggZmJpLT5wY3IgJiBQQ1JfVEZUICkKKwkJd2lkdGggPSAxNjsKKwllbHNlCisJCXdpZHRoID0gMSA8PCAoKGZiaS0+cGNyID4+IDI4KSAmIDB4Myk7CisKKwlzd2l0Y2god2lkdGgpIHsKKwljYXNlIDE2OgorCQlpbXhfZ3Bpb19tb2RlKFBEMzBfUEZfTEQxNSk7CisJCWlteF9ncGlvX21vZGUoUEQyOV9QRl9MRDE0KTsKKwkJaW14X2dwaW9fbW9kZShQRDI4X1BGX0xEMTMpOworCQlpbXhfZ3Bpb19tb2RlKFBEMjdfUEZfTEQxMik7CisJCWlteF9ncGlvX21vZGUoUEQyNl9QRl9MRDExKTsKKwkJaW14X2dwaW9fbW9kZShQRDI1X1BGX0xEMTApOworCQlpbXhfZ3Bpb19tb2RlKFBEMjRfUEZfTEQ5KTsKKwkJaW14X2dwaW9fbW9kZShQRDIzX1BGX0xEOCk7CisJY2FzZSA4OgorCQlpbXhfZ3Bpb19tb2RlKFBEMjJfUEZfTEQ3KTsKKwkJaW14X2dwaW9fbW9kZShQRDIxX1BGX0xENik7CisJCWlteF9ncGlvX21vZGUoUEQyMF9QRl9MRDUpOworCQlpbXhfZ3Bpb19tb2RlKFBEMTlfUEZfTEQ0KTsKKwljYXNlIDQ6CisJCWlteF9ncGlvX21vZGUoUEQxOF9QRl9MRDMpOworCQlpbXhfZ3Bpb19tb2RlKFBEMTdfUEZfTEQyKTsKKwljYXNlIDI6CisJCWlteF9ncGlvX21vZGUoUEQxNl9QRl9MRDEpOworCWNhc2UgMToKKwkJaW14X2dwaW9fbW9kZShQRDE1X1BGX0xEMCk7CisJfQorCisJLyogaW5pdGlhbGl6ZSBHUElPcyAqLworCWlteF9ncGlvX21vZGUoUEQ2X1BGX0xTQ0xLKTsKKwlpbXhfZ3Bpb19tb2RlKFBEMTBfUEZfU1BMX1NQUik7CisJaW14X2dwaW9fbW9kZShQRDExX1BGX0NPTlRSQVNUKTsKKwlpbXhfZ3Bpb19tb2RlKFBEMTRfUEZfRkxNX1ZTWU5DKTsKKwlpbXhfZ3Bpb19tb2RlKFBEMTNfUEZfTFBfSFNZTkMpOworCWlteF9ncGlvX21vZGUoUEQ3X1BGX1JFVik7CisJaW14X2dwaW9fbW9kZShQRDhfUEZfQ0xTKTsKKworI2lmbmRlZiBDT05GSUdfTUFDSF9QSU1YMQorCS8qIG9uIFBpTVgxIHVzZWQgYXMgYnVmZmVycyBlbmFibGUgc2lnbmFsCisJICovCisJaW14X2dwaW9fbW9kZShQRDlfUEZfUFMpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX01BQ0hfTVgxRlMyCisJLyogb24gbXgxZnMyIHRoaXMgcGluIGlzIHVzZWQgdG8gKGRlKWFjdGl2YXRlIHRoZSBkaXNwbGF5LCBzbyB3ZSBuZWVkCisJICogaXQgYXMgYSBub3JtYWwgZ3BpbworCSAqLworCWlteF9ncGlvX21vZGUoUEQxMl9QRl9BQ0RfT0UpOworI2VuZGlmCisKK30KKworI2lmZGVmIENPTkZJR19QTQorLyoKKyAqIFBvd2VyIG1hbmFnZW1lbnQgaG9va3MuICBOb3RlIHRoYXQgd2Ugd29uJ3QgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQsCisgKiB1bmxpa2UgdGhlIGJsYW5rIGZ1bmN0aW9ucyBhYm92ZSwgc28gd2UgbWF5IHNsZWVwLgorICovCitzdGF0aWMgaW50IGlteGZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgc3RhdGUsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcHJfZGVidWcoIiVzXG4iLF9fRlVOQ1RJT05fXyk7CisKKwlpZiAobGV2ZWwgPT0gU1VTUEVORF9ESVNBQkxFIHx8IGxldmVsID09IFNVU1BFTkRfUE9XRVJfRE9XTikKKwkJaW14ZmJfZGlzYWJsZV9jb250cm9sbGVyKGZiaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW14ZmJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQoreworCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlwcl9kZWJ1ZygiJXNcbiIsX19GVU5DVElPTl9fKTsKKworCWlmIChsZXZlbCA9PSBSRVNVTUVfRU5BQkxFKQorCQlpbXhmYl9lbmFibGVfY29udHJvbGxlcihmYmkpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgaW14ZmJfc3VzcGVuZAlOVUxMCisjZGVmaW5lIGlteGZiX3Jlc3VtZQlOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgaW14ZmJfaW5pdF9mYmluZm8oc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpbXhmYl9tYWNoX2luZm8gKmluZiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CisKKwlwcl9kZWJ1ZygiJXNcbiIsX19GVU5DVElPTl9fKTsKKworCWluZm8tPnBzZXVkb19wYWxldHRlID0ga21hbGxvYyggc2l6ZW9mKHUzMikgKiAxNiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoZmJpLCAwLCBzaXplb2Yoc3RydWN0IGlteGZiX2luZm8pKTsKKwlmYmktPmRldiA9IGRldjsKKworCXN0cmxjcHkoaW5mby0+Zml4LmlkLCBJTVhfTkFNRSwgc2l6ZW9mKGluZm8tPmZpeC5pZCkpOworCisJaW5mby0+Zml4LnR5cGUJPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJaW5mby0+Zml4LnR5cGVfYXV4CQk9IDA7CisJaW5mby0+Zml4LnhwYW5zdGVwCQk9IDA7CisJaW5mby0+Zml4LnlwYW5zdGVwCQk9IDA7CisJaW5mby0+Zml4Lnl3cmFwc3RlcAkJPSAwOworCWluZm8tPmZpeC5hY2NlbAk9IEZCX0FDQ0VMX05PTkU7CisKKwlpbmZvLT52YXIubm9uc3RkCQk9IDA7CisJaW5mby0+dmFyLmFjdGl2YXRlCQk9IEZCX0FDVElWQVRFX05PVzsKKwlpbmZvLT52YXIuaGVpZ2h0CQk9IC0xOworCWluZm8tPnZhci53aWR0aAk9IC0xOworCWluZm8tPnZhci5hY2NlbF9mbGFncwkJPSAwOworCWluZm8tPnZhci52bW9kZQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQ7CisKKwlpbmZvLT5mYm9wcwkJCT0gJmlteGZiX29wczsKKwlpbmZvLT5mbGFncwkJCT0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKKwlpbmZvLT5wc2V1ZG9fcGFsZXR0ZQkJPSAoZmJpICsgMSk7CisKKwlmYmktPnJnYltSR0JfMTZdCQk9ICZkZWZfcmdiXzE2OworCWZiaS0+cmdiW1JHQl84XQkJCT0gJmRlZl9yZ2JfODsKKworCWZiaS0+bWF4X3hyZXMJCQk9IGluZi0+eHJlczsKKwlpbmZvLT52YXIueHJlcwkJCT0gaW5mLT54cmVzOworCWluZm8tPnZhci54cmVzX3ZpcnR1YWwJCT0gaW5mLT54cmVzOworCWZiaS0+bWF4X3lyZXMJCQk9IGluZi0+eXJlczsKKwlpbmZvLT52YXIueXJlcwkJCT0gaW5mLT55cmVzOworCWluZm8tPnZhci55cmVzX3ZpcnR1YWwJCT0gaW5mLT55cmVzOworCWZiaS0+bWF4X2JwcAkJCT0gaW5mLT5icHA7CisJaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsCT0gaW5mLT5icHA7CisJaW5mby0+dmFyLnBpeGNsb2NrCQk9IGluZi0+cGl4Y2xvY2s7CisJaW5mby0+dmFyLmhzeW5jX2xlbgkJPSBpbmYtPmhzeW5jX2xlbjsKKwlpbmZvLT52YXIubGVmdF9tYXJnaW4JCT0gaW5mLT5sZWZ0X21hcmdpbjsKKwlpbmZvLT52YXIucmlnaHRfbWFyZ2luCQk9IGluZi0+cmlnaHRfbWFyZ2luOworCWluZm8tPnZhci52c3luY19sZW4JCT0gaW5mLT52c3luY19sZW47CisJaW5mby0+dmFyLnVwcGVyX21hcmdpbgkJPSBpbmYtPnVwcGVyX21hcmdpbjsKKwlpbmZvLT52YXIubG93ZXJfbWFyZ2luCQk9IGluZi0+bG93ZXJfbWFyZ2luOworCWluZm8tPnZhci5zeW5jCQkJPSBpbmYtPnN5bmM7CisJaW5mby0+dmFyLmdyYXlzY2FsZQkJPSBpbmYtPmNtYXBfZ3JleXNjYWxlOworCWZiaS0+Y21hcF9pbnZlcnNlCQk9IGluZi0+Y21hcF9pbnZlcnNlOworCWZiaS0+cGNyCQkJPSBpbmYtPnBjcjsKKwlmYmktPmxzY3IxCQkJPSBpbmYtPmxzY3IxOworCWZiaS0+cHdtcgkJCT0gaW5mLT5wd21yOworCWZiaS0+bGNkX3Bvd2VyCQkJPSBpbmYtPmxjZF9wb3dlcjsKKwlmYmktPmJhY2tsaWdodF9wb3dlcgkJPSBpbmYtPmJhY2tsaWdodF9wb3dlcjsKKwlpbmZvLT5maXguc21lbV9sZW4JCT0gZmJpLT5tYXhfeHJlcyAqIGZiaS0+bWF4X3lyZXMgKgorCQkJCQkgIGZiaS0+bWF4X2JwcCAvIDg7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICAgICAgQWxsb2NhdGVzIHRoZSBEUkFNIG1lbW9yeSBmb3IgdGhlIGZyYW1lIGJ1ZmZlci4gIFRoaXMgYnVmZmVyIGlzCisgKglyZW1hcHBlZCBpbnRvIGEgbm9uLWNhY2hlZCwgbm9uLWJ1ZmZlcmVkLCBtZW1vcnkgcmVnaW9uIHRvCisgKiAgICAgIGFsbG93IHBpeGVsIHdyaXRlcyB0byBvY2N1ciB3aXRob3V0IGZsdXNoaW5nIHRoZSBjYWNoZS4KKyAqICAgICAgT25jZSB0aGlzIGFyZWEgaXMgcmVtYXBwZWQsIGFsbCB2aXJ0dWFsIG1lbW9yeSBhY2Nlc3MgdG8gdGhlCisgKiAgICAgIHZpZGVvIG1lbW9yeSBzaG91bGQgb2NjdXIgYXQgdGhlIG5ldyByZWdpb24uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGlteGZiX21hcF92aWRlb19tZW1vcnkoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKKworCWZiaS0+bWFwX3NpemUgPSBQQUdFX0FMSUdOKGluZm8tPmZpeC5zbWVtX2xlbik7CisJZmJpLT5tYXBfY3B1ID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZShmYmktPmRldiwgZmJpLT5tYXBfc2l6ZSwKKwkJCQkJJmZiaS0+bWFwX2RtYSxHRlBfS0VSTkVMKTsKKworCWlmIChmYmktPm1hcF9jcHUpIHsKKwkJaW5mby0+c2NyZWVuX2Jhc2UgPSBmYmktPm1hcF9jcHU7CisJCWZiaS0+c2NyZWVuX2NwdSA9IGZiaS0+bWFwX2NwdTsKKwkJZmJpLT5zY3JlZW5fZG1hID0gZmJpLT5tYXBfZG1hOworCQlpbmZvLT5maXguc21lbV9zdGFydCA9IGZiaS0+c2NyZWVuX2RtYTsKKwl9CisKKwlyZXR1cm4gZmJpLT5tYXBfY3B1ID8gMCA6IC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGlteGZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGlteGZiX2luZm8gKmZiaTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgaW14ZmJfbWFjaF9pbmZvICppbmY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldDsKKworCXByaW50aygiaS5NWCBGcmFtZWJ1ZmZlciBkcml2ZXJcbiIpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZighcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWluZiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpZighaW5mKSB7CisJCWRldl9lcnIoZGV2LCJObyBwbGF0Zm9ybV9kYXRhIGF2YWlsYWJsZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGlteGZiX2luZm8pLCBkZXYpOworCWlmKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZiaSA9IGluZm8tPnBhcjsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCisJcmV0ID0gaW14ZmJfaW5pdF9mYmluZm8oZGV2KTsKKwlpZiggcmV0IDwgMCApCisJCWdvdG8gZmFpbGVkX2luaXQ7CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgIklNWEZCIik7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGZhaWxlZF9yZWdzOworCX0KKworCWlmICghaW5mLT5maXhlZF9zY3JlZW5fY3B1KSB7CisJCXJldCA9IGlteGZiX21hcF92aWRlb19tZW1vcnkoaW5mbyk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHZpZGVvIFJBTTogJWRcbiIsIHJldCk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBmYWlsZWRfbWFwOworCQl9CisJfSBlbHNlIHsKKwkJLyogRml4ZWQgZnJhbWVidWZmZXIgbWFwcGluZyBlbmFibGVzIGxvY2F0aW9uIG9mIHRoZSBzY3JlZW4gaW4gZVNSQU0gKi8KKwkJZmJpLT5tYXBfY3B1ID0gaW5mLT5maXhlZF9zY3JlZW5fY3B1OworCQlmYmktPm1hcF9kbWEgPSBpbmYtPmZpeGVkX3NjcmVlbl9kbWE7CisJCWluZm8tPnNjcmVlbl9iYXNlID0gZmJpLT5tYXBfY3B1OworCQlmYmktPnNjcmVlbl9jcHUgPSBmYmktPm1hcF9jcHU7CisJCWZiaS0+c2NyZWVuX2RtYSA9IGZiaS0+bWFwX2RtYTsKKwkJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBmYmktPnNjcmVlbl9kbWE7CisJfQorCisJLyoKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvdXIgY29sb3VyIGJpdGZpZWxkCisJICogZGVzY3JpcHRvcnMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXNlZC4KKwkgKi8KKwlpbXhmYl9jaGVja192YXIoJmluZm8tPnZhciwgaW5mbyk7CisKKwlyZXQgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAxPDxpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZF9jbWFwOworCisJaW14ZmJfc2V0dXBfZ3BpbyhmYmkpOworCisJaW14ZmJfc2V0X3BhcihpbmZvKTsKKwlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIik7CisJCWdvdG8gZmFpbGVkX3JlZ2lzdGVyOworCX0KKworCWlteGZiX2VuYWJsZV9jb250cm9sbGVyKGZiaSk7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkX3JlZ2lzdGVyOgorCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CitmYWlsZWRfY21hcDoKKwlpZiAoIWluZi0+Zml4ZWRfc2NyZWVuX2NwdSkKKwkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKGRldixmYmktPm1hcF9zaXplLGZiaS0+bWFwX2NwdSwKKwkJICAgICAgICAgICBmYmktPm1hcF9kbWEpOworZmFpbGVkX21hcDoKKwlrZnJlZShpbmZvLT5wc2V1ZG9fcGFsZXR0ZSk7CitmYWlsZWRfcmVnczoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKK2ZhaWxlZF9pbml0OgorCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbXhmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKworCS8qIGRpc2FibGUgTENEIGNvbnRyb2xsZXIgKi8KKwlMQ0RDX1JNQ1IgJj0gflJNQ1JfTENEQ19FTjsKKworCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCWtmcmVlKGluZm8tPnBzZXVkb19wYWxldHRlKTsKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworCisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgIGlteGZiX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKiBkZXYpCit7CisJLyogZGlzYWJsZSBMQ0QgQ29udHJvbGxlciAqLworCUxDRENfUk1DUiAmPSB+Uk1DUl9MQ0RDX0VOOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaW14ZmJfZHJpdmVyID0geworCS5uYW1lCQk9ICJpbXgtZmIiLAorCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorCS5wcm9iZQkJPSBpbXhmYl9wcm9iZSwKKwkuc3VzcGVuZAk9IGlteGZiX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBpbXhmYl9yZXN1bWUsCisJLnJlbW92ZQkJPSBpbXhmYl9yZW1vdmUsCisJLnNodXRkb3duCT0gaW14ZmJfc2h1dGRvd24sCit9OworCitpbnQgX19pbml0IGlteGZiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpbXhmYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaW14ZmJfY2xlYW51cCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZpbXhmYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChpbXhmYl9pbml0KTsKK21vZHVsZV9leGl0KGlteGZiX2NsZWFudXApOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk1vdG9yb2xhIGkuTVggZnJhbWVidWZmZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmggYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4YzNlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogbGludXgvZHJpdmVycy92aWRlby9pbXhmYi5oCisgKgorICogIEZyZWVzY2FsZSBpLk1YIEZyYW1lIEJ1ZmZlciBkZXZpY2UgZHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBTLkhhdWVyLCBQZW5ndXRyb25peAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgRXJpYyBBLiBUaG9tYXMKKyAqICAgQmFzZWQgb24gYWNvcm5mYi5jIENvcHlyaWdodCAoQykgUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogVGhlc2UgYXJlIHRoZSBiaXRmaWVsZHMgZm9yIGVhY2gKKyAqIGRpc3BsYXkgZGVwdGggdGhhdCB3ZSBzdXBwb3J0LgorICovCitzdHJ1Y3QgaW14ZmJfcmdiIHsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJcmVkOworCXN0cnVjdCBmYl9iaXRmaWVsZAlncmVlbjsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJYmx1ZTsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJdHJhbnNwOworfTsKKworI2RlZmluZSBSR0JfMTYJKDApCisjZGVmaW5lIFJHQl84CSgxKQorI2RlZmluZSBOUl9SR0IJMgorCitzdHJ1Y3QgaW14ZmJfaW5mbyB7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3QgaW14ZmJfcmdiCSpyZ2JbTlJfUkdCXTsKKworCXVfaW50CQkJbWF4X2JwcDsKKwl1X2ludAkJCW1heF94cmVzOworCXVfaW50CQkJbWF4X3lyZXM7CisKKwkvKgorCSAqIFRoZXNlIGFyZSB0aGUgYWRkcmVzc2VzIHdlIG1hcHBlZAorCSAqIHRoZSBmcmFtZWJ1ZmZlciBtZW1vcnkgcmVnaW9uIHRvLgorCSAqLworCWRtYV9hZGRyX3QJCW1hcF9kbWE7CisJdV9jaGFyICoJCW1hcF9jcHU7CisJdV9pbnQJCQltYXBfc2l6ZTsKKworCXVfY2hhciAqCQlzY3JlZW5fY3B1OworCWRtYV9hZGRyX3QJCXNjcmVlbl9kbWE7CisJdV9pbnQJCQlwYWxldHRlX3NpemU7CisKKwlkbWFfYWRkcl90CQlkYmFyMTsKKwlkbWFfYWRkcl90CQlkYmFyMjsKKworCXVfaW50CQkJcGNyOworCXVfaW50CQkJcHdtcjsKKwl1X2ludAkJCWxzY3IxOworCXVfaW50CQkJY21hcF9pbnZlcnNlOjEsCisJCQkJY21hcF9zdGF0aWM6MSwKKwkJCQl1bnVzZWQ6MzA7CisKKwl2b2lkICgqbGNkX3Bvd2VyKShpbnQpOworCXZvaWQgKCpiYWNrbGlnaHRfcG93ZXIpKGludCk7Cit9OworCisjZGVmaW5lIElNWF9OQU1FCSJJTVgiCisKKy8qCisgKiBNaW5pbXVtIFggYW5kIFkgcmVzb2x1dGlvbnMKKyAqLworI2RlZmluZSBNSU5fWFJFUwk2NAorI2RlZmluZSBNSU5fWVJFUwk2NAorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwppbmRleCA2YTA1YjcwLi41NDllMjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKQEAgLTEzNSw5ICsxMzUsNDUgQEAKICNlbmRpZgogCiAjaW5jbHVkZSAiaW50ZWxmYi5oIgotI2luY2x1ZGUgImludGVsZmJkcnYuaCIKICNpbmNsdWRlICJpbnRlbGZiaHcuaCIKIAorc3RhdGljIHZvaWQgX19kZXZpbml0IGdldF9pbml0aWFsX21vZGUoc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8pOworc3RhdGljIHZvaWQgdXBkYXRlX2RpbmZvKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvLAorCQkJIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsKK3N0YXRpYyBpbnQgaW50ZWxmYl9nZXRfZml4KHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4LAorCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pOworCitzdGF0aWMgaW50IGludGVsZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CitzdGF0aWMgaW50IGludGVsZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CitzdGF0aWMgaW50IGludGVsZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAorCQkJICAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCisJCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKworc3RhdGljIGludCBpbnRlbGZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pOworc3RhdGljIGludCBpbnRlbGZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKworc3RhdGljIHZvaWQgaW50ZWxmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCSAgICAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KTsKK3N0YXRpYyB2b2lkIGludGVsZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkgICAgIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqcmVnaW9uKTsKK3N0YXRpYyB2b2lkIGludGVsZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSk7CitzdGF0aWMgaW50IGludGVsZmJfY3Vyc29yKHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJICAgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKTsKKworc3RhdGljIGludCBpbnRlbGZiX3N5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pOworCitzdGF0aWMgaW50IGludGVsZmJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsCisJCQkgc3RydWN0IGZiX2luZm8gKmluZm8pOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpbnRlbGZiX3BjaV9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpbnRlbGZiX3BjaV91bnJlZ2lzdGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGludGVsZmJfc2V0X2ZiaW5mbyhzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyk7CisKIC8qCiAgKiBMaW1pdGluZyB0aGUgY2xhc3MgdG8gUENJX0NMQVNTX0RJU1BMQVlfVkdBIHByZXZlbnRzIGZ1bmN0aW9uIDEgb2YgdGhlCiAgKiBtb2JpbGUgY2hpcHNldHMgZnJvbSBiZWluZyByZWdpc3RlcmVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuaCBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMzA1ODEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLSNpZm5kZWYgX0lOVEVMRkJEUlZfSAotI2RlZmluZSBfSU5URUxGQkRSVl9ICi0KLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBpbnRlbGZiCi0gKgotICogTGludXggZnJhbWVidWZmZXIgZHJpdmVyIGZvciBJbnRlbChSKSA4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHCi0gKiBpbnRlZ3JhdGVkIGdyYXBoaWNzIGNoaXBzLgotICoKLSAqIENvcHlyaWdodCCpIDIwMDQgU3lsdmFpbiBNZXllcgotICoKLSAqIEF1dGhvcjogU3lsdmFpbiBNZXllcgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotKi8KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IGdldF9pbml0aWFsX21vZGUoc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8pOwotc3RhdGljIHZvaWQgdXBkYXRlX2RpbmZvKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvLAotCQkJIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsKLXN0YXRpYyBpbnQgaW50ZWxmYl9nZXRfZml4KHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4LAotCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwotCi1zdGF0aWMgaW50IGludGVsZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IGludGVsZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IGludGVsZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAotCQkJICAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCi0JCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLQotc3RhdGljIGludCBpbnRlbGZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pOwotc3RhdGljIGludCBpbnRlbGZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLQotc3RhdGljIHZvaWQgaW50ZWxmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKLQkJCSAgICAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KTsKLXN0YXRpYyB2b2lkIGludGVsZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqcmVnaW9uKTsKLXN0YXRpYyB2b2lkIGludGVsZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSk7Ci1zdGF0aWMgaW50IGludGVsZmJfY3Vyc29yKHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQkJICAgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKTsKLQotc3RhdGljIGludCBpbnRlbGZiX3N5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pOwotCi1zdGF0aWMgaW50IGludGVsZmJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsCi0JCQkgc3RydWN0IGZiX2luZm8gKmluZm8pOwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpbnRlbGZiX3BjaV9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpbnRlbGZiX3BjaV91bnJlZ2lzdGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKLXN0YXRpYyBpbnQgX19kZXZpbml0IGludGVsZmJfc2V0X2ZiaW5mbyhzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9sb2dvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vS2NvbmZpZwppbmRleCA4NDliNDdiLi42YmExMGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2xvZ28vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vS2NvbmZpZwpAQCAtNDUsNyArNDUsNyBAQAogCiBjb25maWcgTE9HT19TVU5fQ0xVVDIyNAogCWJvb2wgIjIyNC1jb2xvciBTdW4gTGludXggbG9nbyIKLQlkZXBlbmRzIG9uIExPR08gJiYgKFNQQVJDIHx8IFNQQVJDNjQpCisJZGVwZW5kcyBvbiBMT0dPICYmIChTUEFSQzMyIHx8IFNQQVJDNjQpCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBMT0dPX1NVUEVSSF9NT05PCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCmluZGV4IDNhNjU1NWEuLjQ3NzMzZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCkBAIC00MDgsNiArNDA4LDcgQEAKIHN0YXRpYyBpbnQgbm9hY2NlbCBfX2RldmluaXRkYXRhID0gMDsKIHN0YXRpYyBpbnQgbm9zY2FsZSBfX2RldmluaXRkYXRhID0gMDsKIHN0YXRpYyBpbnQgcGFuZWx0d2VhayBfX2RldmluaXRkYXRhID0gMDsKK3N0YXRpYyBpbnQgdnJhbSBfX2RldmluaXRkYXRhID0gMDsKICNpZmRlZiBDT05GSUdfTVRSUgogc3RhdGljIGludCBub210cnIgX19kZXZpbml0ZGF0YSA9IDA7CiAjZW5kaWYKQEAgLTExODAsNyArMTE4MSw3IEBACiAKIAl2YXItPnhyZXNfdmlydHVhbCA9ICh2YXItPnhyZXNfdmlydHVhbCArIDYzKSAmIH42MzsKIAotCXZyYW1sZW4gPSBpbmZvLT5maXguc21lbV9sZW47CisJdnJhbWxlbiA9IGluZm8tPnNjcmVlbl9zaXplOwogCXBpdGNoID0gKCh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwpICsgNykgLyA4OwogCW1lbWxlbiA9IHBpdGNoICogdmFyLT55cmVzX3ZpcnR1YWw7CiAKQEAgLTEzNDMsNyArMTM0NCw3IEBACiAJLyogbWF4aW1pemUgdmlydHVhbCB2ZXJ0aWNhbCBsZW5ndGggKi8KIAlscGl0Y2ggPSBpbmZvLT52YXIueHJlc192aXJ0dWFsICoKIAkJKChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgKyA3KSA+PiAzKTsKLQlpbmZvLT52YXIueXJlc192aXJ0dWFsID0gaW5mby0+Zml4LnNtZW1fbGVuIC8gbHBpdGNoOworCWluZm8tPnZhci55cmVzX3ZpcnR1YWwgPSBpbmZvLT5zY3JlZW5fc2l6ZSAvIGxwaXRjaDsKIAogCWluZm8tPnBpeG1hcC5zY2FuX2FsaWduID0gNDsKIAlpbmZvLT5waXhtYXAuYnVmX2FsaWduID0gNDsKQEAgLTE1MDcsMTIgKzE1MDgsMjAgQEAKIAogCXBhci0+RmJBZGRyZXNzID0gbnZpZGlhZmJfZml4LnNtZW1fc3RhcnQ7CiAJcGFyLT5GYk1hcFNpemUgPSBwYXItPlJhbUFtb3VudEtCeXRlcyAqIDEwMjQ7CisJaWYgKHZyYW0gJiYgdnJhbSAqIDEwMjQgKiAxMDI0IDwgcGFyLT5GYk1hcFNpemUpCisJCXBhci0+RmJNYXBTaXplID0gdnJhbSAqIDEwMjQgKiAxMDI0OworCisJLyogTGltaXQgYW1vdW50IG9mIHZyYW0gdG8gNjQgTUIgKi8KKwlpZiAocGFyLT5GYk1hcFNpemUgPiA2NCAqIDEwMjQgKiAxMDI0KQorCQlwYXItPkZiTWFwU2l6ZSA9IDY0ICogMTAyNCAqIDEwMjQ7CisKIAlwYXItPkZiVXNhYmxlU2l6ZSA9IHBhci0+RmJNYXBTaXplIC0gKDEyOCAqIDEwMjQpOwogCXBhci0+U2NyYXRjaEJ1ZmZlclNpemUgPSAocGFyLT5BcmNoaXRlY3R1cmUgPCBOVl9BUkNIXzEwKSA/IDggKiAxMDI0IDoKIAkgICAgMTYgKiAxMDI0OwogCXBhci0+U2NyYXRjaEJ1ZmZlclN0YXJ0ID0gcGFyLT5GYlVzYWJsZVNpemUgLSBwYXItPlNjcmF0Y2hCdWZmZXJTaXplOwogCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcChudmlkaWFmYl9maXguc21lbV9zdGFydCwgcGFyLT5GYk1hcFNpemUpOwotCW52aWRpYWZiX2ZpeC5zbWVtX2xlbiA9IHBhci0+RmJVc2FibGVTaXplOworCWluZm8tPnNjcmVlbl9zaXplID0gcGFyLT5GYlVzYWJsZVNpemU7CisJbnZpZGlhZmJfZml4LnNtZW1fbGVuID0gcGFyLT5SYW1BbW91bnRLQnl0ZXMgKiAxMDI0OwogCiAJaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgaW9yZW1hcCBGQiBiYXNlXG4iKTsKQEAgLTE1MjQsNyArMTUzMyw4IEBACiAjaWZkZWYgQ09ORklHX01UUlIKIAlpZiAoIW5vbXRycikgewogCQlwYXItPm10cnIudnJhbSA9IG10cnJfYWRkKG52aWRpYWZiX2ZpeC5zbWVtX3N0YXJ0LAotCQkJCQkgIHBhci0+RmJNYXBTaXplLCBNVFJSX1RZUEVfV1JDT01CLCAxKTsKKwkJCQkJICBwYXItPlJhbUFtb3VudEtCeXRlcyAqIDEwMjQsCisJCQkJCSAgTVRSUl9UWVBFX1dSQ09NQiwgMSk7CiAJCWlmIChwYXItPm10cnIudnJhbSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBzZXR1cCBNVFJSXG4iKTsKIAkJfSBlbHNlIHsKQEAgLTE1NjYsOSArMTU3Niw5IEBACiAKICAgICAgIGVycl9vdXRfaW91bm1hcF9mYjoKIAlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKKyAgICAgIGVycl9vdXRfZnJlZV9iYXNlMToKIAlmYl9kZXN0cm95X21vZGVkYihpbmZvLT5tb25zcGVjcy5tb2RlZGIpOwogCW52aWRpYV9kZWxldGVfaTJjX2J1c3NlcyhwYXIpOwotICAgICAgZXJyX291dF9mcmVlX2Jhc2UxOgogCWlvdW5tYXAocGFyLT5SRUdTKTsKICAgICAgIGVycl9vdXRfZnJlZV9iYXNlMDoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkKTsKQEAgLTE2NDUsNiArMTY1NSw4IEBACiAJCQlub3NjYWxlID0gMTsKIAkJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInBhbmVsdHdlYWs6IiwgMTEpKSB7CiAJCQlwYW5lbHR3ZWFrID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrMTEsIE5VTEwsIDApOworCQl9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidnJhbToiLCA1KSkgeworCQkJdnJhbSA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0KzUsIE5VTEwsIDApOwogI2lmZGVmIENPTkZJR19NVFJSCiAJCX0gZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJub210cnIiLCA2KSkgewogCQkJbm9tdHJyID0gMTsKQEAgLTE3MTYsNiArMTcyOCwxMCBAQAogTU9EVUxFX1BBUk1fREVTQyhmb3JjZUNSVEMsCiAJCSAiRm9yY2VzIHVzYWdlIG9mIGEgcGFydGljdWxhciBDUlRDIGluIGNhc2UgYXV0b2RldGVjdGlvbiAiCiAJCSAiZmFpbHMuICgwIG9yIDEpIChkZWZhdWx0PWF1dG9kZXRlY3QpIik7Cittb2R1bGVfcGFyYW0odnJhbSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModnJhbSwKKwkJICJhbW91bnQgb2YgZnJhbWVidWZmZXIgbWVtb3J5IHRvIHJlbWFwIGluIE1pQiIKKwkJICIoZGVmYXVsdD0wIC0gcmVtYXAgZW50aXJlIG1lbW9yeSkiKTsKICNpZmRlZiBDT05GSUdfTVRSUgogbW9kdWxlX3BhcmFtKG5vbXRyciwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vbXRyciwgIkRpc2FibGVzIE1UUlIgc3VwcG9ydCAoMCBvciAxPWRpc2FibGVkKSAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3JhZGVvbmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3JhZGVvbmZiLmMKaW5kZXggZDlhMDg0ZS4uYzQ2Mzg3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9yYWRlb25mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcmFkZW9uZmIuYwpAQCAtMjEwNyw3ICsyMTA3LDcgQEAKIAogCiAJaWYgKHJpbmZvLT5hcmNoID09IFJBREVPTl9NNikgewotCQlmb3IgKGk9MDsgaTw4OyBpKyspCisJCWZvciAoaT0wOyBpPDc7IGkrKykKIAkJCU9VVFJFRyhjb21tb25fcmVnc19tNltpXS5yZWcsIGNvbW1vbl9yZWdzX202W2ldLnZhbCk7CiAJfSBlbHNlIHsKIAkJZm9yIChpPTA7IGk8OTsgaSsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwppbmRleCA1YmI4ZDYwLi4wM2Q3NGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwpAQCAtMTQ5OCw3ICsxNDk4LDcgQEAKIAlpbmZvLT5maXgubW1pb19zdGFydCA9IHBhci0+bW1pby5wYmFzZTsKIAlpbmZvLT5maXgubW1pb19sZW4gICA9IHBhci0+bW1pby5sZW47CiAKLQlwYXItPmJjaV9iYXNlID0gKHUzMiopKHBhci0+bW1pby52YmFzZSArIEJDSV9CVUZGRVJfT0ZGU0VUKTsKKwlwYXItPmJjaV9iYXNlID0gKHUzMiBfX2lvbWVtICopKHBhci0+bW1pby52YmFzZSArIEJDSV9CVUZGRVJfT0ZGU0VUKTsKIAlwYXItPmJjaV9wdHIgID0gMDsKIAogCXNhdmFnZV9lbmFibGVfbW1pbyAocGFyKTsKQEAgLTE1MTQsNyArMTUxNCw3IEBACiAJc2F2YWdlX2Rpc2FibGVfbW1pbyhwYXIpOwogCiAJaWYgKHBhci0+bW1pby52YmFzZSkgewotCQlpb3VubWFwICgodm9pZCAqKXBhci0+bW1pby52YmFzZSk7CisJCWlvdW5tYXAocGFyLT5tbWlvLnZiYXNlKTsKIAkJcGFyLT5tbWlvLnZiYXNlID0gTlVMTDsKIAl9CiB9CkBAIC0xNTUzLDcgKzE1NTMsNyBAQAogI2VuZGlmCiAKIAkvKiBDbGVhciBmcmFtZWJ1ZmZlciwgaXQncyBhbGwgd2hpdGUgaW4gbWVtb3J5IGFmdGVyIGJvb3QgKi8KLQltZW1zZXQgKHBhci0+dmlkZW8udmJhc2UsIDAsIHBhci0+dmlkZW8ubGVuKTsKKwltZW1zZXRfaW8gKHBhci0+dmlkZW8udmJhc2UsIDAsIHBhci0+dmlkZW8ubGVuKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaXMvaW5pdC5jIGIvZHJpdmVycy92aWRlby9zaXMvaW5pdC5jCmluZGV4IDE5OTQwNTQuLmVjZmQ3MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQuYworKysgYi9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0LmMKQEAgLTEzODQsNyArMTM4NCw3IEBACiAvKiAgICAgICAgICAgICBIRUxQRVI6IFNldExWRFNldGMgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZAorc3RhdGljIHZvaWQKIFNpU1NldExWRFNldGMoU2lTX1ByaXZhdGUgKlNpU19QciwgUFNJU19IV19JTkZPIEh3SW5mbykKIHsKICAgIFVTSE9SVCB0ZW1wOwpAQCAtMTYyNSw3ICsxNjI1LDcgQEAKIC8qICAgICAgICAgICAgIEhFTFBFUjogR2V0VkJUeXBlICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkCitzdGF0aWMgdm9pZAogU2lTX0dldFZCVHlwZShTaVNfUHJpdmF0ZSAqU2lTX1ByLCBQU0lTX0hXX0lORk8gSHdJbmZvKQogewogICBVU0hPUlQgZmxhZz0wLCByZXY9MCwgbm9sY2Q9MCwgcDRfMGYsIHA0XzI1LCBwNF8yNzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQuaCBiL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQuaAppbmRleCAzNTAzMGQzLi43ZTM2YjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0LmgKKysrIGIvZHJpdmVycy92aWRlby9zaXMvaW5pdC5oCkBAIC0yMzk0LDExICsyMzk0LDkgQEAKIHZvaWQJU2lTX0Rpc3BsYXlPbihTaVNfUHJpdmF0ZSAqU2lTX1ByKTsKIHZvaWQJU2lTX0Rpc3BsYXlPZmYoU2lTX1ByaXZhdGUgKlNpU19Qcik7CiB2b2lkCVNpU1JlZ0luaXQoU2lTX1ByaXZhdGUgKlNpU19QciwgU0lTSU9BRERSRVNTIEJhc2VBZGRyKTsKLXZvaWQJU2lTU2V0TFZEU2V0YyhTaVNfUHJpdmF0ZSAqU2lTX1ByLCBQU0lTX0hXX0lORk8gSHdJbmZvKTsKIEJPT0xFQU4gU2lTRGV0ZXJtaW5lUk9NTGF5b3V0NjYxKFNpU19Qcml2YXRlICpTaVNfUHIsIFBTSVNfSFdfSU5GTyBId0luZm8pOwogdm9pZAlTaVNfU2V0RW5hYmxlRHN0bihTaVNfUHJpdmF0ZSAqU2lTX1ByLCBpbnQgZW5hYmxlKTsKIHZvaWQJU2lTX1NldEVuYWJsZUZzdG4oU2lTX1ByaXZhdGUgKlNpU19QciwgaW50IGVuYWJsZSk7Ci12b2lkCVNpU19HZXRWQlR5cGUoU2lTX1ByaXZhdGUgKlNpU19QciwgUFNJU19IV19JTkZPIEh3SW5mbyk7CiBCT09MRUFOCVNpU19TZWFyY2hNb2RlSUQoU2lTX1ByaXZhdGUgKlNpU19QciwgVVNIT1JUICpNb2RlTm8sIFVTSE9SVCAqTW9kZUlkSW5kZXgpOwogVUNIQVIJU2lTX0dldE1vZGVQdHIoU2lTX1ByaXZhdGUgKlNpU19QciwgVVNIT1JUIE1vZGVObywgVVNIT1JUIE1vZGVJZEluZGV4KTsKIFVTSE9SVAlTaVNfR2V0Q29sb3JEZXB0aChTaVNfUHJpdmF0ZSAqU2lTX1ByLCBVU0hPUlQgTW9kZU5vLCBVU0hPUlQgTW9kZUlkSW5kZXgpOwpAQCAtMjQ0NCw3ICsyNDQyLDYgQEAKIGV4dGVybiB2b2lkICAgICBTaVNfU2V0WVBiUHIoU2lTX1ByaXZhdGUgKlNpU19QciwgUFNJU19IV19JTkZPIEh3SW5mbyk7CiBleHRlcm4gdm9pZCAJU2lTX1NldFRWTW9kZShTaVNfUHJpdmF0ZSAqU2lTX1ByLCBVU0hPUlQgTW9kZU5vLCBVU0hPUlQgTW9kZUlkSW5kZXgsIFBTSVNfSFdfSU5GTyBId0luZm8pOwogZXh0ZXJuIHZvaWQgICAgIFNpU19VbkxvY2tDUlQyKFNpU19Qcml2YXRlICpTaVNfUHIsIFBTSVNfSFdfSU5GTyBId0luZm8pOwotZXh0ZXJuIHZvaWQgICAgIFNpU19Mb2NrQ1JUMihTaVNfUHJpdmF0ZSAqU2lTX1ByLCBQU0lTX0hXX0lORk8gSHdJbmZvKTsKIGV4dGVybiB2b2lkICAgICBTaVNfRGlzYWJsZUJyaWRnZShTaVNfUHJpdmF0ZSAqLCBQU0lTX0hXX0lORk8pOwogZXh0ZXJuIEJPT0xFQU4gIFNpU19TZXRDUlQyR3JvdXAoU2lTX1ByaXZhdGUgKiwgUFNJU19IV19JTkZPLCBVU0hPUlQpOwogZXh0ZXJuIFVTSE9SVCAgIFNpU19HZXRSYXRlUHRyKFNpU19Qcml2YXRlICpTaVNfUHIsIFVTSE9SVCBNb2RlTm8sIFVTSE9SVCBNb2RlSWRJbmRleCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQzMDEuYyBiL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQzMDEuYwppbmRleCAyYmM1YjgwLi4yNzRkYWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0MzAxLmMKKysrIGIvZHJpdmVycy92aWRlby9zaXMvaW5pdDMwMS5jCkBAIC04Niw2ICs4Niw3IEBACiAjZGVmaW5lIFNpU19JMkNERUxBWVNIT1JUICAxNTAKIAogc3RhdGljIFVTSE9SVCBTaVNfR2V0QklPU0xDRFJlc0luZm8oU2lTX1ByaXZhdGUgKlNpU19Qcik7CitzdGF0aWMgdm9pZCBTaVNfU2V0Q0g3MHh4KFNpU19Qcml2YXRlICpTaVNfUHIsIFVTSE9SVCB0ZW1wYngpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICBIRUxQRVI6IExvY2svVW5sb2NrIENSVDIgICAgICAgICAgKi8KQEAgLTEwMCw3ICsxMDEsNyBAQAogICAgICAgU2lTX1NldFJlZ09SKFNpU19Qci0+U2lTX1BhcnQxUG9ydCwweDI0LDB4MDEpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogU2lTX0xvY2tDUlQyKFNpU19Qcml2YXRlICpTaVNfUHIsIFBTSVNfSFdfSU5GTyBId0luZm8pCiB7CiAgICBpZihId0luZm8tPmpDaGlwVHlwZSA+PSBTSVNfMzE1SCkKQEAgLTQyMzYsNyArNDIzNyw3IEBACiAgKiBmcm9tIG91dHNpZGUgdGhlIGNvbnRleHQgb2YgYSBtb2RlIHN3aXRjaCEKICAqIE1VU1QgY2FsbCBnZXRWQlR5cGUgYmVmb3JlIGNhbGxpbmcgdGhpcwogICovCi12b2lkCitzdGF0aWMgdm9pZAogU2lTX0VuYWJsZUJyaWRnZShTaVNfUHJpdmF0ZSAqU2lTX1ByLCBQU0lTX0hXX0lORk8gSHdJbmZvKQogewogICBVU0hPUlQgdGVtcD0wLHRlbXBhaDsKQEAgLTkyMTksNyArOTIyMCw3IEBACiAgIFNpU19TZXRDaFJlZyhTaVNfUHIsIHRlbXBieCwgMCk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBTaVNfU2V0Q0g3MHh4KFNpU19Qcml2YXRlICpTaVNfUHIsIFVTSE9SVCB0ZW1wYngpCiB7CiAgIGlmKFNpU19Qci0+U2lTX0lGX0RFRl9DSDcweHggPT0gMSkKQEAgLTkzMjMsNyArOTMyNCw3IEBACiAKIC8qIFJlYWQgZnJvbSBDaHJvbnRlbCA3MHh4ICovCiAvKiBQYXJhbWV0ZXIgaXMgW1JlZ2lzdGVyIG5vIChTNy1TMCldICovCi1VU0hPUlQKK3N0YXRpYyBVU0hPUlQKIFNpU19HZXRDSDcweHgoU2lTX1ByaXZhdGUgKlNpU19QciwgVVNIT1JUIHRlbXBieCkKIHsKICAgaWYoU2lTX1ByLT5TaVNfSUZfREVGX0NINzB4eCA9PSAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaXMvaW5pdDMwMS5oIGIvZHJpdmVycy92aWRlby9zaXMvaW5pdDMwMS5oCmluZGV4IGYwNWFlYmMuLmY4NGViNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQzMDEuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0MzAxLmgKQEAgLTI5Myw3ICsyOTMsNiBAQAogI2VuZGlmCiAKIHZvaWQJU2lTX1VuTG9ja0NSVDIoU2lTX1ByaXZhdGUgKlNpU19QciwgUFNJU19IV19JTkZPIEh3SW5mbyk7Ci12b2lkCVNpU19Mb2NrQ1JUMihTaVNfUHJpdmF0ZSAqU2lTX1ByLCBQU0lTX0hXX0lORk8gSHdJbmZvKTsKIHZvaWQJU2lTX0VuYWJsZUNSVDIoU2lTX1ByaXZhdGUgKlNpU19Qcik7CiBVU0hPUlQJU2lTX0dldFJhdGVQdHIoU2lTX1ByaXZhdGUgKlNpU19QciwgVVNIT1JUIE1vZGVObywgVVNIT1JUIE1vZGVJZEluZGV4LCBQU0lTX0hXX0lORk8gSHdJbmZvKTsKIHZvaWQJU2lTX1dhaXRSZXRyYWNlMShTaVNfUHJpdmF0ZSAqU2lTX1ByKTsKQEAgLTMxMCw3ICszMDksNiBAQAogICAgICAgICAgICAgICAgIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBTSVNfSFdfSU5GTyBId0luZm8pOwogVVNIT1JUCVNpU19HZXRSZXNJbmZvKFNpU19Qcml2YXRlICpTaVNfUHIsVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgpOwogdm9pZAlTaVNfRGlzYWJsZUJyaWRnZShTaVNfUHJpdmF0ZSAqU2lTX1ByLCBQU0lTX0hXX0lORk8gSHdJbmZvKTsKLXZvaWQJU2lTX0VuYWJsZUJyaWRnZShTaVNfUHJpdmF0ZSAqU2lTX1ByLCBQU0lTX0hXX0lORk8gSHdJbmZvKTsKIEJPT0xFQU4JU2lTX1NldENSVDJHcm91cChTaVNfUHJpdmF0ZSAqU2lTX1ByLCBQU0lTX0hXX0lORk8gSHdJbmZvLCBVU0hPUlQgTW9kZU5vKTsKIHZvaWQJU2lTX1NpUzMweEJMT24oU2lTX1ByaXZhdGUgKlNpU19QciwgUFNJU19IV19JTkZPIEh3SW5mbyk7CiB2b2lkCVNpU19TaVMzMHhCTE9mZihTaVNfUHJpdmF0ZSAqU2lTX1ByLCBQU0lTX0hXX0lORk8gSHdJbmZvKTsKQEAgLTMxOSw4ICszMTcsNiBAQAogVVNIT1JUIAlTaVNfR2V0Q0g3MDB4KFNpU19Qcml2YXRlICpTaVNfUHIsIFVTSE9SVCB0ZW1wYXgpOwogdm9pZCAgIAlTaVNfU2V0Q0g3MDF4KFNpU19Qcml2YXRlICpTaVNfUHIsIFVTSE9SVCB0ZW1wYXgpOwogVVNIT1JUIAlTaVNfR2V0Q0g3MDF4KFNpU19Qcml2YXRlICpTaVNfUHIsIFVTSE9SVCB0ZW1wYXgpOwotdm9pZCAgIAlTaVNfU2V0Q0g3MHh4KFNpU19Qcml2YXRlICpTaVNfUHIsIFVTSE9SVCB0ZW1wYXgpOwotVVNIT1JUIAlTaVNfR2V0Q0g3MHh4KFNpU19Qcml2YXRlICpTaVNfUHIsIFVTSE9SVCB0ZW1wYXgpOwogdm9pZCAgIAlTaVNfU2V0Q0g3MHh4QU5ET1IoU2lTX1ByaXZhdGUgKlNpU19QciwgVVNIT1JUIHRlbXBheCxVU0hPUlQgdGVtcGJoKTsKICNpZmRlZiBTSVMzMTVICiBzdGF0aWMgdm9pZCAgIAlTaVNfQ2hyb250ZWw3MDF4T24oU2lTX1ByaXZhdGUgKlNpU19QciwgUFNJU19IV19JTkZPIEh3SW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jIGIvZHJpdmVycy92aWRlby9zaXMvc2lzX21haW4uYwppbmRleCBiNzczYzk4Li42OTgyNjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2lzL3Npc19tYWluLmMKQEAgLTQ3NjIsNyArNDc2Miw4IEBACiAjZW5kaWYKIAogCi1pbnQgX19kZXZpbml0IHNpc2ZiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQorc3RhdGljIGludCBfX2RldmluaXQgc2lzZmJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IHNpc2ZiX2NoaXBfaW5mbyAJKmNoaXBpbmZvID0gJnNpc2ZiX2NoaXBfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXTsKIAlzdHJ1Y3Qgc2lzX3ZpZGVvX2luZm8gCSppdmlkZW8gPSBOVUxMOwpAQCAtNTk0MCw3ICs1OTQxLDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLWludCBfX2RldmluaXQgc2lzZmJfaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNpc2ZiX2luaXRfbW9kdWxlKHZvaWQpCiB7CiAJc2lzZmJfc2V0ZGVmYXVsdHBhcm1zKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdGN4LmMgYi9kcml2ZXJzL3ZpZGVvL3RjeC5jCmluZGV4IGUyZmE5ZTEuLjE5ODZhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdGN4LmMKKysrIGIvZHJpdmVycy92aWRlby90Y3guYwpAQCAtMzYsNiArMzYsNyBAQAogc3RhdGljIGludCB0Y3hfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqLCBzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiBzdGF0aWMgaW50IHRjeF9pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAogCQkgICAgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBmYl9pbmZvICopOworc3RhdGljIGludCB0Y3hfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICosIHN0cnVjdCBmYl9pbmZvICopOwogCiAvKgogICogIEZyYW1lIGJ1ZmZlciBvcGVyYXRpb25zCkBAIC00NSw2ICs0Niw3IEBACiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuZmJfc2V0Y29scmVnCQk9IHRjeF9zZXRjb2xyZWcsCiAJLmZiX2JsYW5rCQk9IHRjeF9ibGFuaywKKwkuZmJfcGFuX2Rpc3BsYXkJCT0gdGN4X3Bhbl9kaXNwbGF5LAogCS5mYl9maWxscmVjdAkJPSBjZmJfZmlsbHJlY3QsCiAJLmZiX2NvcHlhcmVhCQk9IGNmYl9jb3B5YXJlYSwKIAkuZmJfaW1hZ2VibGl0CQk9IGNmYl9pbWFnZWJsaXQsCkBAIC0xNTMsNiArMTU1LDEyIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFyLT5sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgdGN4X3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwl0Y3hfcmVzZXQoaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogICAgICB0Y3hfc2V0Y29scmVnIC0gT3B0aW9uYWwgZnVuY3Rpb24uIFNldHMgYSBjb2xvciByZWdpc3Rlci4KICAqICAgICAgQHJlZ25vOiBib29sZWFuLCAwIGNvcHkgbG9jYWwsIDEgZ2V0X3VzZXIoKSBmdW5jdGlvbgpAQCAtMzY2LDYgKzM3NCw5IEBACiAJYWxsLT5wYXIubG93ZGVwdGggPSBwcm9tX2dldGJvb2woc2Rldi0+cHJvbV9ub2RlLCAidGN4LTgtYml0Iik7CiAKIAlzYnVzZmJfZmlsbF92YXIoJmFsbC0+aW5mby52YXIsIHNkZXYtPnByb21fbm9kZSwgOCk7CisJYWxsLT5pbmZvLnZhci5yZWQubGVuZ3RoID0gODsKKwlhbGwtPmluZm8udmFyLmdyZWVuLmxlbmd0aCA9IDg7CisJYWxsLT5pbmZvLnZhci5ibHVlLmxlbmd0aCA9IDg7CiAKIAlsaW5lYnl0ZXMgPSBwcm9tX2dldGludGRlZmF1bHQoc2Rldi0+cHJvbV9ub2RlLCAibGluZWJ5dGVzIiwKIAkJCQkgICAgICAgYWxsLT5pbmZvLnZhci54cmVzKTsKQEAgLTQzOSw2ICs0NTAsNyBAQAogCQlyZXR1cm47CiAJfQogCisJZmJfc2V0X2NtYXAoJmFsbC0+aW5mby5jbWFwLCAmYWxsLT5pbmZvKTsKIAl0Y3hfaW5pdF9maXgoJmFsbC0+aW5mbywgbGluZWJ5dGVzKTsKIAogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKSA8IDApIHsKQEAgLTQ2Niw3ICs0NzgsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWZvcl9hbGxfc2J1c2RldihzZGV2LCBzYnVzKSB7Ci0JCWlmICghc3RyY21wKHNkZXYtPnByb21fbmFtZSwgInRjeCIpKQorCQlpZiAoIXN0cmNtcChzZGV2LT5wcm9tX25hbWUsICJTVU5XLHRjeCIpKQogCQkJdGN4X2luaXRfb25lKHNkZXYpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90ZGZ4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKaW5kZXggYzM0YmEzOS4uNzA0NDIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90ZGZ4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCkBAIC0zMTcsMzAgKzMxNyw0OSBAQAogCiBzdGF0aWMgdTMyIGRvX2NhbGNfcGxsKGludCBmcmVxLCBpbnQqIGZyZXFfb3V0KSAKIHsKLQlpbnQgbSwgbiwgaywgYmVzdF9tLCBiZXN0X24sIGJlc3RfaywgZl9jdXIsIGJlc3RfZXJyb3I7CisJaW50IG0sIG4sIGssIGJlc3RfbSwgYmVzdF9uLCBiZXN0X2ssIGJlc3RfZXJyb3I7CiAJaW50IGZyZWYgPSAxNDMxODsKICAgCi0JLyogdGhpcyByZWFsbHkgY291bGQgYmUgZG9uZSB3aXRoIG1vcmUgaW50ZWxsaWdlbmNlIC0tCi0JICAgMjU1KjYzKjQgPSA2NDI2MCBpdGVyYXRpb25zIGlzIHNpbGx5ICovCiAJYmVzdF9lcnJvciA9IGZyZXE7CiAJYmVzdF9uID0gYmVzdF9tID0gYmVzdF9rID0gMDsKLQlmb3IgKG4gPSAxOyBuIDwgMjU2OyBuKyspIHsKLQkJZm9yIChtID0gMTsgbSA8IDY0OyBtKyspIHsKLQkJCWZvciAoayA9IDA7IGsgPCA0OyBrKyspIHsKLQkJCQlmX2N1ciA9IGZyZWYqKG4gKyAyKS8obSArIDIpLygxIDw8IGspOwotCQkJCWlmIChhYnMoZl9jdXIgLSBmcmVxKSA8IGJlc3RfZXJyb3IpIHsKLQkJCQkJYmVzdF9lcnJvciA9IGFicyhmX2N1ci1mcmVxKTsKLQkJCQkJYmVzdF9uID0gbjsKLQkJCQkJYmVzdF9tID0gbTsKLQkJCQkJYmVzdF9rID0gazsKKworCWZvciAoayA9IDM7IGsgPj0gMDsgay0tKSB7CisJCWZvciAobSA9IDYzOyBtID49IDA7IG0tLSkgeworCQkJLyoKKwkJCSAqIEVzdGltYXRlIHZhbHVlIG9mIG4gdGhhdCBwcm9kdWNlcyB0YXJnZXQgZnJlcXVlbmN5CisJCQkgKiB3aXRoIGN1cnJlbnQgbSBhbmQgaworCQkJICovCisJCQlpbnQgbl9lc3RpbWF0ZWQgPSAoZnJlcSAqIChtICsgMikgKiAoMSA8PCBrKSAvIGZyZWYpIC0gMjsKKworCQkJLyogU2VhcmNoIG5laWdoYm9yaG9vZCBvZiBlc3RpbWF0ZWQgbiAqLworCQkJZm9yIChuID0gbWF4KDAsIG5fZXN0aW1hdGVkIC0gMSk7CisJCQkJCW4gPD0gbWluKDI1NSwgbl9lc3RpbWF0ZWQgKyAxKTsgbisrKSB7CisJCQkJLyoKKwkJCQkgKiBDYWxjdWxhdGUgUExMIGZyZXFlbmN5IHdpdGggY3VycmVudCBtLCBrIGFuZAorCQkJCSAqIGVzdGltYXRlZCBuCisJCQkJICovCisJCQkJaW50IGYgPSBmcmVmICogKG4gKyAyKSAvIChtICsgMikgLyAoMSA8PCBrKTsKKwkJCQlpbnQgZXJyb3IgPSBhYnMgKGYgLSBmcmVxKTsKKworCQkJCS8qCisJCQkJICogIElmIHRoaXMgaXMgdGhlIGNsb3Nlc3Qgd2UndmUgY29tZSB0byB0aGUKKwkJCQkgKiB0YXJnZXQgZnJlcXVlbmN5IHRoZW4gcmVtZW1iZXIgbiwgbSBhbmQgaworCQkJCSAqLworCQkJCWlmIChlcnJvciAgPCBiZXN0X2Vycm9yKSB7CisJCQkJCWJlc3RfZXJyb3IgPSBlcnJvcjsKKwkJCQkJYmVzdF9uICAgICA9IG47CisJCQkJCWJlc3RfbSAgICAgPSBtOworCQkJCQliZXN0X2sgICAgID0gazsKIAkJCQl9CiAJCQl9CiAJCX0KIAl9CisKIAluID0gYmVzdF9uOwogCW0gPSBiZXN0X207CiAJayA9IGJlc3RfazsKIAkqZnJlcV9vdXQgPSBmcmVmKihuICsgMikvKG0gKyAyKS8oMSA8PCBrKTsKKwogCXJldHVybiAobiA8PCA4KSB8IChtIDw8IDIpIHwgazsKIH0KIApAQCAtNDExLDM2ICs0MzAsMzUgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fbGZiX3NpemUoc3RydWN0IHRkZnhfcGFyICpwYXIsIHVuc2lnbmVkIHNob3J0IGRldl9pZCkgCiB7Ci0JdTMyIGRyYW1pbml0MCA9IDA7Ci0JdTMyIGRyYW1pbml0MSA9IDA7Ci0JdTMyIG1pc2Npbml0MSA9IDA7Ci0JdTMyIGxmYnNpemUgICA9IDA7Ci0JaW50IHNncmFtX3AgICA9IDA7CisJdTMyIGRyYW1pbml0MDsKKwl1MzIgZHJhbWluaXQxOworCXUzMiBtaXNjaW5pdDE7CisKKwlpbnQgbnVtX2NoaXBzOworCWludCBjaGlwX3NpemU7IC8qIGluIE1CICovCisJdTMyIGxmYnNpemU7CisJaW50IGhhc19zZ3JhbTsKIAogCWRyYW1pbml0MCA9IHRkZnhfaW5sKHBhciwgRFJBTUlOSVQwKTsgIAogCWRyYW1pbml0MSA9IHRkZnhfaW5sKHBhciwgRFJBTUlOSVQxKTsKKworCW51bV9jaGlwcyA9IChkcmFtaW5pdDAgJiBEUkFNSU5JVDBfU0dSQU1fTlVNKSA/IDggOiA0OwogIAotCWlmICgoZGV2X2lkID09IFBDSV9ERVZJQ0VfSURfM0RGWF9CQU5TSEVFKSB8fAotCSAgICAoZGV2X2lkID09IFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET08zKSkgeyAgICAgICAgICAgICAJIAotCQlzZ3JhbV9wID0gKGRyYW1pbml0MSAmIERSQU1JTklUMV9NRU1fU0RSQU0pID8gMCA6IDE7Ci0gIAotCWxmYnNpemUgPSBzZ3JhbV9wID8KLQkJKCgoZHJhbWluaXQwICYgRFJBTUlOSVQwX1NHUkFNX05VTSkgID8gMiA6IDEpICogCi0JCSgoZHJhbWluaXQwICYgRFJBTUlOSVQwX1NHUkFNX1RZUEUpID8gOCA6IDQpICogMTAyNCAqIDEwMjQpIDoKLQkJMTYgKiAxMDI0ICogMTAyNDsKKwlpZiAoZGV2X2lkIDwgUENJX0RFVklDRV9JRF8zREZYX1ZPT0RPTzUpIHsKKwkJLyogQmFuc2hlZS9Wb29kb28zICovCisJCWhhc19zZ3JhbSA9IGRyYW1pbml0MSAmIERSQU1JTklUMV9NRU1fU0RSQU07CisJCWNoaXBfc2l6ZSA9IGhhc19zZ3JhbSA/ICgoZHJhbWluaXQwICYgRFJBTUlOSVQwX1NHUkFNX1RZUEUpID8gMiA6IDEpCisJCQkJICAgICAgOiAyOwogCX0gZWxzZSB7CiAJCS8qIFZvb2RvbzQvNSAqLwotCQl1MzIgY2hpcHMsIHBzaXplLCBiYW5rczsKKwkJaGFzX3NncmFtID0gMDsKKwkJY2hpcF9zaXplID0gMSA8PCAoKGRyYW1pbml0MCAmIERSQU1JTklUMF9TR1JBTV9UWVBFX01BU0spID4+IERSQU1JTklUMF9TR1JBTV9UWVBFX1NISUZUKTsKKwl9CisJbGZic2l6ZSA9IG51bV9jaGlwcyAqIGNoaXBfc2l6ZSAqIDEwMjQgKiAxMDI0OwogCi0JCWNoaXBzID0gKChkcmFtaW5pdDAgJiAoMSA8PCAyNikpID09IDApID8gNCA6IDg7Ci0JCXBzaXplID0gMSA8PCAoKGRyYW1pbml0MCAmIDB4MzgwMDAwMDApID4+IDI4KTsKLQkJYmFua3MgPSAoKGRyYW1pbml0MCAmICgxIDw8IDMwKSkgPT0gMCkgPyAyIDogNDsKLQkJbGZic2l6ZSA9IGNoaXBzICogcHNpemUgKiBiYW5rczsKLQkJbGZic2l6ZSA8PD0gMjA7Ci0JfSAgICAgICAgICAgICAgICAgCi0JLyogZGlzYWJsZSBibG9jayB3cml0ZXMgZm9yIFNEUkFNICh3aHk/KSAqLworCS8qIGRpc2FibGUgYmxvY2sgd3JpdGVzIGZvciBTRFJBTSAqLwogCW1pc2Npbml0MSA9IHRkZnhfaW5sKHBhciwgTUlTQ0lOSVQxKTsKLQltaXNjaW5pdDEgfD0gc2dyYW1fcCA/IDAgOiBNSVNDSU5JVDFfMkRCTE9DS19ESVM7CisJbWlzY2luaXQxIHw9IGhhc19zZ3JhbSA/IDAgOiBNSVNDSU5JVDFfMkRCTE9DS19ESVM7CiAJbWlzY2luaXQxIHw9IE1JU0NJTklUMV9DTFVUX0lOVjsKIAogCWJhbnNoZWVfbWFrZV9yb29tKHBhciwgMSk7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90Z2FmYi5jIGIvZHJpdmVycy92aWRlby90Z2FmYi5jCmluZGV4IDMwOTk2MzAuLjlkOWQyMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdGdhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RnYWZiLmMKQEAgLTQ1LDkgKzQ1LDcgQEAKIHN0YXRpYyB2b2lkIHRnYWZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICosIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqKTsKIAogc3RhdGljIGludCB0Z2FmYl9wY2lfcmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKik7Ci0jaWZkZWYgTU9EVUxFCiBzdGF0aWMgdm9pZCB0Z2FmYl9wY2lfdW5yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqKTsKLSNlbmRpZgogCiBzdGF0aWMgY29uc3QgY2hhciAqbW9kZV9vcHRpb24gPSAiNjQweDQ4MEA2MCI7CiAKQEAgLTE0ODQsNyArMTQ4Miw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIE1PRFVMRQogc3RhdGljIHZvaWQgX19leGl0CiB0Z2FmYl9wY2lfdW5yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTE1MDAsNiArMTQ5Nyw3IEBACiAJa2ZyZWUoaW5mbyk7CiB9CiAKKyNpZmRlZiBNT0RVTEUKIHN0YXRpYyB2b2lkIF9fZXhpdAogdGdhZmJfZXhpdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKaW5kZXggOGZjMTI3OC4uMzAyNzg0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92ZXNhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCkBAIC0xOSw5ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaWZkZWYgX19pMzg2X18KLSNpbmNsdWRlIDx2aWRlby9lZGlkLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgogCmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuYwppbmRleCA2YjZiYjdjLi4yM2MxMjUxIDEwMDY0NAotLS0gYS9mcy9hZnMvZmlsZS5jCisrKyBiL2ZzL2Fmcy9maWxlLmMKQEAgLTEzMSw4ICsxMzEsNyBAQAogCiAJdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7CiAKLQlpZiAoIVBhZ2VMb2NrZWQocGFnZSkpCi0JCVBBR0VfQlVHKHBhZ2UpOworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAKIAlyZXQgPSAtRVNUQUxFOwogCWlmICh2bm9kZS0+ZmxhZ3MgJiBBRlNfVk5PREVfREVMRVRFRCkKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggZDA2YTI2NjcuLjdhZmEyMjIgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCisrKyBiL2ZzL2Fpby5jCkBAIC00MCw5ICs0MCw2IEBACiAjZGVmaW5lIGRwcmludGsoeC4uLikJZG8geyA7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotbG9uZyBhaW9fcnVuID0gMDsgLyogZm9yIHRlc3Rpbmcgb25seSAqLwotbG9uZyBhaW9fd2FrZXVwcyA9IDA7IC8qIGZvciB0ZXN0aW5nIG9ubHkgKi8KLQogLyotLS0tLS0gc3lzY3RsIHZhcmlhYmxlcy0tLS0qLwogYXRvbWljX3QgYWlvX25yID0gQVRPTUlDX0lOSVQoMCk7CS8qIGN1cnJlbnQgc3lzdGVtIHdpZGUgbnVtYmVyIG9mIGFpbyByZXF1ZXN0cyAqLwogdW5zaWduZWQgYWlvX21heF9uciA9IDB4MTAwMDA7CS8qIHN5c3RlbSB3aWRlIG1heGltdW0gbnVtYmVyIG9mIGFpbyByZXF1ZXN0cyAqLwpAQCAtNTgsNyArNTUsNyBAQAogc3RhdGljIERFQ0xBUkVfV09SSyhmcHV0X3dvcmssIGFpb19mcHV0X3JvdXRpbmUsIE5VTEwpOwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZwdXRfbG9jayk7Ci1MSVNUX0hFQUQoZnB1dF9oZWFkKTsKK3N0YXRpYyBMSVNUX0hFQUQoZnB1dF9oZWFkKTsKIAogc3RhdGljIHZvaWQgYWlvX2tpY2tfaGFuZGxlcih2b2lkICopOwogCkBAIC0yOTAsNyArMjg3LDcgQEAKIAlzcGluX3VubG9ja19pcnEoJmN0eC0+Y3R4X2xvY2spOwogfQogCi12b2lkIHdhaXRfZm9yX2FsbF9haW9zKHN0cnVjdCBraW9jdHggKmN0eCkKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2FsbF9haW9zKHN0cnVjdCBraW9jdHggKmN0eCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgdHNrKTsKQEAgLTQwNSw3ICs0MDIsNiBAQAogCXJlcS0+a2lfY3R4ID0gY3R4OwogCXJlcS0+a2lfY2FuY2VsID0gTlVMTDsKIAlyZXEtPmtpX3JldHJ5ID0gTlVMTDsKLQlyZXEtPmtpX29iai51c2VyID0gTlVMTDsKIAlyZXEtPmtpX2R0b3IgPSBOVUxMOwogCXJlcS0+cHJpdmF0ZSA9IE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJnJlcS0+a2lfcnVuX2xpc3QpOwpAQCAtNDUxLDExICs0NDcsNiBAQAogewogCWlmIChyZXEtPmtpX2R0b3IpCiAJCXJlcS0+a2lfZHRvcihyZXEpOwotCXJlcS0+a2lfY3R4ID0gTlVMTDsKLQlyZXEtPmtpX2ZpbHAgPSBOVUxMOwotCXJlcS0+a2lfb2JqLnVzZXIgPSBOVUxMOwotCXJlcS0+a2lfZHRvciA9IE5VTEw7Ci0JcmVxLT5wcml2YXRlID0gTlVMTDsKIAlrbWVtX2NhY2hlX2ZyZWUoa2lvY2JfY2FjaGVwLCByZXEpOwogCWN0eC0+cmVxc19hY3RpdmUtLTsKIApAQCAtNTkyLDcgKzU4Myw3IEBACiAgKiBDb21tZW50czogQ2FsbGVkIHdpdGggY3R4LT5jdHhfbG9jayBoZWxkLiBUaGlzIG5lc3RzCiAgKiB0YXNrX2xvY2sgaW5zdGVhZCBjdHhfbG9jay4KICAqLwotdm9pZCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3N0YXRpYyB2b2lkIHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIApAQCAtNjIzLDcgKzYxNCw2IEBACiAJaWYgKGxpc3RfZW1wdHkoJmlvY2ItPmtpX3J1bl9saXN0KSkgewogCQlsaXN0X2FkZF90YWlsKCZpb2NiLT5raV9ydW5fbGlzdCwKIAkJCSZjdHgtPnJ1bl9saXN0KTsKLQkJaW9jYi0+a2lfcXVldWVkKys7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY2NCwxMCArNjU0LDggQEAKIAl9CiAKIAlpZiAoIShpb2NiLT5raV9yZXRyaWVkICYgMHhmZikpIHsKLQkJcHJfZGVidWcoIiVsZCByZXRyeTogJWQgb2YgJWQgKGtpY2sgJWxkLCBRICVsZCBydW4gJWxkLCB3YWtlICVsZClcbiIsCi0JCQlpb2NiLT5raV9yZXRyaWVkLAotCQkJaW9jYi0+a2lfbmJ5dGVzIC0gaW9jYi0+a2lfbGVmdCwgaW9jYi0+a2lfbmJ5dGVzLAotCQkJaW9jYi0+a2lfa2lja2VkLCBpb2NiLT5raV9xdWV1ZWQsIGFpb19ydW4sIGFpb193YWtldXBzKTsKKwkJcHJfZGVidWcoIiVsZCByZXRyeTogJWQgb2YgJWRcbiIsIGlvY2ItPmtpX3JldHJpZWQsCisJCQlpb2NiLT5raV9uYnl0ZXMgLSBpb2NiLT5raV9sZWZ0LCBpb2NiLT5raV9uYnl0ZXMpOwogCX0KIAogCWlmICghKHJldHJ5ID0gaW9jYi0+a2lfcmV0cnkpKSB7CkBAIC03NzQsNyArNzYyLDYgQEAKIHN0YXRpYyBpbnQgX19haW9fcnVuX2lvY2JzKHN0cnVjdCBraW9jdHggKmN0eCkKIHsKIAlzdHJ1Y3Qga2lvY2IgKmlvY2I7Ci0JaW50IGNvdW50ID0gMDsKIAlMSVNUX0hFQUQocnVuX2xpc3QpOwogCiAJbGlzdF9zcGxpY2VfaW5pdCgmY3R4LT5ydW5fbGlzdCwgJnJ1bl9saXN0KTsKQEAgLTc4OSw5ICs3NzYsNyBAQAogCQlhaW9fcnVuX2lvY2IoaW9jYik7CiAJCWlmIChfX2Fpb19wdXRfcmVxKGN0eCwgaW9jYikpICAvKiBkcm9wIGV4dHJhIHJlZiAqLwogCQkJcHV0X2lvY3R4KGN0eCk7Ci0JCWNvdW50Kys7CiAgCX0KLQlhaW9fcnVuKys7CiAJaWYgKCFsaXN0X2VtcHR5KCZjdHgtPnJ1bl9saXN0KSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CkBAIC04NzksNyArODY0LDcgQEAKICAqIGFuZCBpZiByZXF1aXJlZCBhY3RpdmF0ZSB0aGUgYWlvIHdvcmsgcXVldWUgdG8gcHJvY2VzcwogICogaXQKICAqLwotdm9pZCBxdWV1ZV9raWNrZWRfaW9jYihzdHJ1Y3Qga2lvY2IgKmlvY2IpCitzdGF0aWMgdm9pZCBxdWV1ZV9raWNrZWRfaW9jYihzdHJ1Y3Qga2lvY2IgKmlvY2IpCiB7CiAgCXN0cnVjdCBraW9jdHgJKmN0eCA9IGlvY2ItPmtpX2N0eDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODkwLDEwICs4NzUsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPmN0eF9sb2NrLCBmbGFncyk7CiAJcnVuID0gX19xdWV1ZV9raWNrZWRfaW9jYihpb2NiKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmN0eF9sb2NrLCBmbGFncyk7Ci0JaWYgKHJ1bikgeworCWlmIChydW4pCiAJCWFpb19xdWV1ZV93b3JrKGN0eCk7Ci0JCWFpb193YWtldXBzKys7Ci0JfQogfQogCiAvKgpAQCAtOTEzLDcgKzg5Niw2IEBACiAJCXJldHVybjsKIAl9CiAKLQlpb2NiLT5raV9raWNrZWQrKzsKIAkvKiBJZiBpdHMgYWxyZWFkeSBraWNrZWQgd2Ugc2hvdWxkbid0IHF1ZXVlIGl0IGFnYWluICovCiAJaWYgKCFraW9jYlRyeUtpY2soaW9jYikpIHsKIAkJcXVldWVfa2lja2VkX2lvY2IoaW9jYik7CkBAIC05ODQsNyArOTY2LDggQEAKIAogCXRhaWwgPSBpbmZvLT50YWlsOwogCWV2ZW50ID0gYWlvX3JpbmdfZXZlbnQoaW5mbywgdGFpbCwgS01fSVJRMCk7Ci0JdGFpbCA9ICh0YWlsICsgMSkgJSBpbmZvLT5ucjsKKwlpZiAoKyt0YWlsID49IGluZm8tPm5yKQorCQl0YWlsID0gMDsKIAogCWV2ZW50LT5vYmogPSAodTY0KSh1bnNpZ25lZCBsb25nKWlvY2ItPmtpX29iai51c2VyOwogCWV2ZW50LT5kYXRhID0gaW9jYi0+a2lfdXNlcl9kYXRhOwpAQCAtMTAwOCwxMCArOTkxLDggQEAKIAogCXByX2RlYnVnKCJhZGRlZCB0byByaW5nICVwIGF0IFslbHVdXG4iLCBpb2NiLCB0YWlsKTsKIAotCXByX2RlYnVnKCIlbGQgcmV0cmllczogJWQgb2YgJWQgKGtpY2tlZCAlbGQsIFEgJWxkIHJ1biAlbGQgd2FrZSAlbGQpXG4iLAotCQlpb2NiLT5raV9yZXRyaWVkLAotCQlpb2NiLT5raV9uYnl0ZXMgLSBpb2NiLT5raV9sZWZ0LCBpb2NiLT5raV9uYnl0ZXMsCi0JCWlvY2ItPmtpX2tpY2tlZCwgaW9jYi0+a2lfcXVldWVkLCBhaW9fcnVuLCBhaW9fd2FrZXVwcyk7CisJcHJfZGVidWcoIiVsZCByZXRyaWVzOiAlZCBvZiAlZFxuIiwgaW9jYi0+a2lfcmV0cmllZCwKKwkJaW9jYi0+a2lfbmJ5dGVzIC0gaW9jYi0+a2lfbGVmdCwgaW9jYi0+a2lfbmJ5dGVzKTsKIHB1dF9ycToKIAkvKiBldmVyeXRoaW5nIHR1cm5lZCBvdXQgd2VsbCwgZGlzcG9zZSBvZiB0aGUgYWlvY2IuICovCiAJcmV0ID0gX19haW9fcHV0X3JlcShjdHgsIGlvY2IpOwpAQCAtMTExOSw3ICsxMTAwLDYgQEAKIAlpbnQJCQlpID0gMDsKIAlzdHJ1Y3QgaW9fZXZlbnQJCWVudDsKIAlzdHJ1Y3QgYWlvX3RpbWVvdXQJdG87Ci0JaW50IAkJCWV2ZW50X2xvb3AgPSAwOyAvKiB0ZXN0aW5nIG9ubHkgKi8KIAlpbnQJCQlyZXRyeSA9IDA7CiAKIAkvKiBuZWVkZWQgdG8gemVybyBhbnkgcGFkZGluZyB3aXRoaW4gYW4gZW50cnkgKHRoZXJlIHNob3VsZG4ndCBiZSAKQEAgLTExODYsNyArMTE2Niw2IEBACiAJCQlpZiAodG8udGltZWRfb3V0KQkvKiBPbmx5IGNoZWNrIGFmdGVyIHJlYWQgZXZ0ICovCiAJCQkJYnJlYWs7CiAJCQlzY2hlZHVsZSgpOwotCQkJZXZlbnRfbG9vcCsrOwogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKHRzaykpIHsKIAkJCQlyZXQgPSAtRUlOVFI7CiAJCQkJYnJlYWs7CkBAIC0xMjE0LDkgKzExOTMsNiBAQAogCWlmICh0aW1lb3V0KQogCQljbGVhcl90aW1lb3V0KCZ0byk7CiBvdXQ6Ci0JcHJfZGVidWcoImV2ZW50IGxvb3AgZXhlY3V0ZWQgJWQgdGltZXNcbiIsIGV2ZW50X2xvb3ApOwotCXByX2RlYnVnKCJhaW9fcnVuICVsZFxuIiwgYWlvX3J1bik7Ci0JcHJfZGVidWcoImFpb193YWtldXBzICVsZFxuIiwgYWlvX3dha2V1cHMpOwogCXJldHVybiBpID8gaSA6IHJldDsKIH0KIApAQCAtMTQwMSw3ICsxMzc3LDcgQEAKICAqCVBlcmZvcm1zIHRoZSBpbml0aWFsIGNoZWNrcyBhbmQgYWlvIHJldHJ5IG1ldGhvZAogICoJc2V0dXAgZm9yIHRoZSBraW9jYiBhdCB0aGUgdGltZSBvZiBpbyBzdWJtaXNzaW9uLgogICovCi1zc2l6ZV90IGFpb19zZXR1cF9pb2NiKHN0cnVjdCBraW9jYiAqa2lvY2IpCitzdGF0aWMgc3NpemVfdCBhaW9fc2V0dXBfaW9jYihzdHJ1Y3Qga2lvY2IgKmtpb2NiKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0ga2lvY2ItPmtpX2ZpbHA7CiAJc3NpemVfdCByZXQgPSAwOwpAQCAtMTQ3MCw3ICsxNDQ2LDggQEAKICAqIGJlY2F1c2UgdGhpcyBjYWxsYmFjayBpc24ndCB1c2VkIGZvciB3YWl0IHF1ZXVlcyB3aGljaAogICogYXJlIG5lc3RlZCBpbnNpZGUgaW9jdHggbG9jayAoaS5lLiBjdHgtPndhaXQpCiAgKi8KLWludCBhaW9fd2FrZV9mdW5jdGlvbih3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpCitzdGF0aWMgaW50IGFpb193YWtlX2Z1bmN0aW9uKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwKKwkJCSAgICAgaW50IHN5bmMsIHZvaWQgKmtleSkKIHsKIAlzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBjb250YWluZXJfb2Yod2FpdCwgc3RydWN0IGtpb2NiLCBraV93YWl0KTsKIApAQCAtMTUxNCw4ICsxNDkxLDcgQEAKIAl9CiAKIAlyZXEtPmtpX2ZpbHAgPSBmaWxlOwotCWlvY2ItPmFpb19rZXkgPSByZXEtPmtpX2tleTsKLQlyZXQgPSBwdXRfdXNlcihpb2NiLT5haW9fa2V5LCAmdXNlcl9pb2NiLT5haW9fa2V5KTsKKwlyZXQgPSBwdXRfdXNlcihyZXEtPmtpX2tleSwgJnVzZXJfaW9jYi0+YWlvX2tleSk7CiAJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJZHByaW50aygiRUZBVUxUOiBhaW9fa2V5XG4iKTsKIAkJZ290byBvdXRfcHV0X3JlcTsKQEAgLTE1MzAsMTMgKzE1MDYsNyBAQAogCXJlcS0+a2lfb3Bjb2RlID0gaW9jYi0+YWlvX2xpb19vcGNvZGU7CiAJaW5pdF93YWl0cXVldWVfZnVuY19lbnRyeSgmcmVxLT5raV93YWl0LCBhaW9fd2FrZV9mdW5jdGlvbik7CiAJSU5JVF9MSVNUX0hFQUQoJnJlcS0+a2lfd2FpdC50YXNrX2xpc3QpOwotCXJlcS0+a2lfcnVuX2xpc3QubmV4dCA9IHJlcS0+a2lfcnVuX2xpc3QucHJldiA9IE5VTEw7Ci0JcmVxLT5raV9yZXRyeSA9IE5VTEw7CiAJcmVxLT5raV9yZXRyaWVkID0gMDsKLQlyZXEtPmtpX2tpY2tlZCA9IDA7Ci0JcmVxLT5raV9xdWV1ZWQgPSAwOwotCWFpb19ydW4gPSAwOwotCWFpb193YWtldXBzID0gMDsKIAogCXJldCA9IGFpb19zZXR1cF9pb2NiKHJlcSk7CiAKQEAgLTE1NDQsMTAgKzE1MTQsMTQgQEAKIAkJZ290byBvdXRfcHV0X3JlcTsKIAogCXNwaW5fbG9ja19pcnEoJmN0eC0+Y3R4X2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJnJlcS0+a2lfcnVuX2xpc3QsICZjdHgtPnJ1bl9saXN0KTsKLQkvKiBkcmFpbiB0aGUgcnVuIGxpc3QgKi8KLQl3aGlsZSAoX19haW9fcnVuX2lvY2JzKGN0eCkpCi0JCTsKKwlpZiAobGlrZWx5KGxpc3RfZW1wdHkoJmN0eC0+cnVuX2xpc3QpKSkgeworCQlhaW9fcnVuX2lvY2IocmVxKTsKKwl9IGVsc2UgeworCQlsaXN0X2FkZF90YWlsKCZyZXEtPmtpX3J1bl9saXN0LCAmY3R4LT5ydW5fbGlzdCk7CisJCS8qIGRyYWluIHRoZSBydW4gbGlzdCAqLworCQl3aGlsZSAoX19haW9fcnVuX2lvY2JzKGN0eCkpCisJCQk7CisJfQogCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5jdHhfbG9jayk7CiAJYWlvX3B1dF9yZXEocmVxKTsJLyogZHJvcCBleHRyYSByZWYgdG8gcmVxICovCiAJcmV0dXJuIDA7CkBAIC0xNjIwLDcgKzE1OTQsOCBAQAogICoJRmluZHMgYSBnaXZlbiBpb2NiIGZvciBjYW5jZWxsYXRpb24uCiAgKglNVVNUIGJlIGNhbGxlZCB3aXRoIGN0eC0+Y3R4X2xvY2sgaGVsZC4KICAqLwotc3RydWN0IGtpb2NiICpsb29rdXBfa2lvY2Ioc3RydWN0IGtpb2N0eCAqY3R4LCBzdHJ1Y3QgaW9jYiBfX3VzZXIgKmlvY2IsIHUzMiBrZXkpCitzdGF0aWMgc3RydWN0IGtpb2NiICpsb29rdXBfa2lvY2Ioc3RydWN0IGtpb2N0eCAqY3R4LCBzdHJ1Y3QgaW9jYiBfX3VzZXIgKmlvY2IsCisJCQkJICB1MzIga2V5KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAkvKiBUT0RPOiB1c2UgYSBoYXNoIG9yIGFycmF5LCB0aGlzIHN1Y2tzLiAqLwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCmluZGV4IGY1YTUyYzguLmM3YjJiODggMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAorKysgYi9mcy9hdXRvZnM0L2F1dG9mc19pLmgKQEAgLTg0LDYgKzg0LDcgQEAKIAljaGFyICpuYW1lOwogCS8qIFRoaXMgaXMgZm9yIHN0YXR1cyByZXBvcnRpbmcgdXBvbiByZXR1cm4gKi8KIAlpbnQgc3RhdHVzOworCWF0b21pY190IG5vdGlmaWVkOwogCWF0b21pY190IHdhaXRfY3RyOwogfTsKIApAQCAtMTAxLDYgKzEwMiw3IEBACiAJaW50IG5lZWRzX3JlZ2hvc3Q7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAlzdHJ1Y3Qgc2VtYXBob3JlIHdxX3NlbTsKKwlzcGlubG9ja190IGZzX2xvY2s7CiAJc3RydWN0IGF1dG9mc193YWl0X3F1ZXVlICpxdWV1ZXM7IC8qIFdhaXQgcXVldWUgcG9pbnRlciAqLwogfTsKIApAQCAtMTI2LDkgKzEyOCwxOCBAQAogc3RhdGljIGlubGluZSBpbnQgYXV0b2ZzNF9pc3BlbmRpbmcoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5mID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CisJaW50IHBlbmRpbmcgPSAwOwogCi0JcmV0dXJuIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfQVVUT0ZTX1BFTkRJTkcpIHx8Ci0JCShpbmYgIT0gTlVMTCAmJiBpbmYtPmZsYWdzICYgQVVUT0ZTX0lORl9FWFBJUklORyk7CisJaWYgKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9BVVRPRlNfUEVORElORykKKwkJcmV0dXJuIDE7CisKKwlpZiAoaW5mKSB7CisJCXNwaW5fbG9jaygmaW5mLT5zYmktPmZzX2xvY2spOworCQlwZW5kaW5nID0gaW5mLT5mbGFncyAmIEFVVE9GU19JTkZfRVhQSVJJTkc7CisJCXNwaW5fdW5sb2NrKCZpbmYtPnNiaS0+ZnNfbG9jayk7CisJfQorCisJcmV0dXJuIHBlbmRpbmc7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdXRvZnM0X2NvcHlfYXRpbWUoc3RydWN0IGZpbGUgKnNyYywgc3RydWN0IGZpbGUgKmRzdCkKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvZXhwaXJlLmMgYi9mcy9hdXRvZnM0L2V4cGlyZS5jCmluZGV4IDMxNTQwYTYuLjUwMDQyNWUgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvZXhwaXJlLmMKKysrIGIvZnMvYXV0b2ZzNC9leHBpcmUuYwpAQCAtOTksNiArOTksMTAgQEAKIAlpZiAoIWF1dG9mczRfY2FuX2V4cGlyZSh0b3AsIHRpbWVvdXQsIGRvX25vdykpCiAJCXJldHVybiAwOwogCisJLyogSXMgc29tZW9uZSB2aXNpdGluZyBhbnl3aGVyZSBpbiB0aGUgdHJlZSA/ICovCisJaWYgKG1heV91bW91bnRfdHJlZShtbnQpKQorCQlyZXR1cm4gMDsKKwogCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwogcmVwZWF0OgogCW5leHQgPSB0aGlzX3BhcmVudC0+ZF9zdWJkaXJzLm5leHQ7CkBAIC0yNzAsMTAgKzI3NCwxOCBAQAogCiAJCS8qIENhc2UgMjogdHJlZSBtb3VudCwgZXhwaXJlIGlmZiBlbnRpcmUgdHJlZSBpcyBub3QgYnVzeSAqLwogCQlpZiAoIWV4cF9sZWF2ZXMpIHsKKwkJCS8qIExvY2sgdGhlIHRyZWUgYXMgd2UgbXVzdCBleHBpcmUgYXMgYSB3aG9sZSAqLworCQkJc3Bpbl9sb2NrKCZzYmktPmZzX2xvY2spOwogCQkJaWYgKGF1dG9mczRfY2hlY2tfdHJlZShtbnQsIGRlbnRyeSwgdGltZW91dCwgZG9fbm93KSkgewotCQkJZXhwaXJlZCA9IGRlbnRyeTsKLQkJCWJyZWFrOworCQkJCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5mID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CisKKwkJCQkvKiBTZXQgdGhpcyBmbGFnIGVhcmx5IHRvIGNhdGNoIHN5c19jaGRpciBhbmQgdGhlIGxpa2UgKi8KKwkJCQlpbmYtPmZsYWdzIHw9IEFVVE9GU19JTkZfRVhQSVJJTkc7CisJCQkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisJCQkJZXhwaXJlZCA9IGRlbnRyeTsKKwkJCQlicmVhazsKIAkJCX0KKwkJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwogCQkvKiBDYXNlIDM6IGRpcmVjdCBtb3VudCwgZXhwaXJlIGluZGl2aWR1YWwgbGVhdmVzICovCiAJCX0gZWxzZSB7CiAJCQlleHBpcmVkID0gYXV0b2ZzNF9jaGVja19sZWF2ZXMobW50LCBkZW50cnksIHRpbWVvdXQsIGRvX25vdyk7CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2lub2RlLmMgYi9mcy9hdXRvZnM0L2lub2RlLmMKaW5kZXggYTUyNTYwNy4uNGJiMTRjYyAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9pbm9kZS5jCisrKyBiL2ZzL2F1dG9mczQvaW5vZGUuYwpAQCAtMjA2LDYgKzIwNiw3IEBACiAJc2JpLT52ZXJzaW9uID0gMDsKIAlzYmktPnN1Yl92ZXJzaW9uID0gMDsKIAlpbml0X01VVEVYKCZzYmktPndxX3NlbSk7CisJc3Bpbl9sb2NrX2luaXQoJnNiaS0+ZnNfbG9jayk7CiAJc2JpLT5xdWV1ZXMgPSBOVUxMOwogCXMtPnNfYmxvY2tzaXplID0gMTAyNDsKIAlzLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gMTA7CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L3dhaXRxLmMgYi9mcy9hdXRvZnM0L3dhaXRxLmMKaW5kZXggMWFiMjRhNi4uNWE0MGQzNiAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC93YWl0cS5jCisrKyBiL2ZzL2F1dG9mczQvd2FpdHEuYwpAQCAtMjEwLDE3ICsyMTAsOCBAQAogCQl3cS0+bGVuID0gbGVuOwogCQl3cS0+c3RhdHVzID0gLUVJTlRSOyAvKiBTdGF0dXMgcmV0dXJuIGlmIGludGVycnVwdGVkICovCiAJCWF0b21pY19zZXQoJndxLT53YWl0X2N0ciwgMik7CisJCWF0b21pY19zZXQoJndxLT5ub3RpZmllZCwgMSk7CiAJCXVwKCZzYmktPndxX3NlbSk7Ci0KLQkJRFBSSU5USygibmV3IHdhaXQgaWQgPSAweCUwOGx4LCBuYW1lID0gJS4qcywgbmZ5PSVkIiwKLQkJCSh1bnNpZ25lZCBsb25nKSB3cS0+d2FpdF9xdWV1ZV90b2tlbiwgd3EtPmxlbiwgd3EtPm5hbWUsIG5vdGlmeSk7Ci0JCS8qIGF1dG9mczRfbm90aWZ5X2RhZW1vbigpIG1heSBibG9jayAqLwotCQlpZiAobm90aWZ5ICE9IE5GWV9OT05FKSB7Ci0JCQlhdXRvZnM0X25vdGlmeV9kYWVtb24oc2JpLHdxLCAKLQkJCQkJbm90aWZ5ID09IE5GWV9NT1VOVCA/Ci0JCQkJCQkgIGF1dG9mc19wdHlwZV9taXNzaW5nIDoKLQkJCQkJCSAgYXV0b2ZzX3B0eXBlX2V4cGlyZV9tdWx0aSk7Ci0JCX0KIAl9IGVsc2UgewogCQlhdG9taWNfaW5jKCZ3cS0+d2FpdF9jdHIpOwogCQl1cCgmc2JpLT53cV9zZW0pOwpAQCAtMjI5LDYgKzIyMCwxNyBAQAogCQkJKHVuc2lnbmVkIGxvbmcpIHdxLT53YWl0X3F1ZXVlX3Rva2VuLCB3cS0+bGVuLCB3cS0+bmFtZSwgbm90aWZ5KTsKIAl9CiAKKwlpZiAobm90aWZ5ICE9IE5GWV9OT05FICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJndxLT5ub3RpZmllZCkpIHsKKwkJaW50IHR5cGUgPSAobm90aWZ5ID09IE5GWV9NT1VOVCA/CisJCQlhdXRvZnNfcHR5cGVfbWlzc2luZyA6IGF1dG9mc19wdHlwZV9leHBpcmVfbXVsdGkpOworCisJCURQUklOVEsoKCJuZXcgd2FpdCBpZCA9IDB4JTA4bHgsIG5hbWUgPSAlLipzLCBuZnk9JWRcbiIsCisJCQkodW5zaWduZWQgbG9uZykgd3EtPndhaXRfcXVldWVfdG9rZW4sIHdxLT5sZW4sIHdxLT5uYW1lLCBub3RpZnkpKTsKKworCQkvKiBhdXRvZnM0X25vdGlmeV9kYWVtb24oKSBtYXkgYmxvY2sgKi8KKwkJYXV0b2ZzNF9ub3RpZnlfZGFlbW9uKHNiaSwgd3EsIHR5cGUpOworCX0KKwogCS8qIHdxLT5uYW1lIGlzIE5VTEwgaWYgYW5kIG9ubHkgaWYgdGhlIGxvY2sgaXMgYWxyZWFkeSByZWxlYXNlZCAqLwogCiAJaWYgKCBzYmktPmNhdGF0b25pYyApIHsKZGlmZiAtLWdpdCBhL2ZzL2JhZF9pbm9kZS5jIGIvZnMvYmFkX2lub2RlLmMKaW5kZXggNjcyYTMxOS4uZTE3MjE4MCAxMDA2NDQKLS0tIGEvZnMvYmFkX2lub2RlLmMKKysrIGIvZnMvYmFkX2lub2RlLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAkuZ2V0X3VubWFwcGVkX2FyZWEgPSBFSU9fRVJST1IsCiB9OwogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiYWRfaW5vZGVfb3BzID0KK3N0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiYWRfaW5vZGVfb3BzID0KIHsKIAkuY3JlYXRlCQk9IEVJT19FUlJPUiwKIAkubG9va3VwCQk9IEVJT19FUlJPUiwKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCA2YWU2MmNiLi5jZTk0MjNiIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKKysrIGIvZnMvYmluZm10X2VsZi5jCkBAIC05NDUsNyArOTQ1LDcgQEAKIAlyZXR2YWwgPSBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoYnBybSwgZXhlY3V0YWJsZV9zdGFjayk7CiAJaWYgKHJldHZhbCA8IDApIHsKIAkJc2VuZF9zaWcoU0lHS0lMTCwgY3VycmVudCwgMCk7Ci0JCWdvdG8gb3V0X2ZyZWVfZGVudHJ5OworCQlnb3RvIG91dDsKIAl9CiAjZW5kaWYgLyogQVJDSF9IQVNfU0VUVVBfQURESVRJT05BTF9QQUdFUyAqLwogCmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IGU1MzQ5ZTguLjNhMTQ3MmEgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0xNDAsNiArMTQwLDcgQEAKICAqIGJpb19hbGxvY19iaW9zZXQgLSBhbGxvY2F0ZSBhIGJpbyBmb3IgSS9PCiAgKiBAZ2ZwX21hc2s6ICAgdGhlIEdGUF8gbWFzayBnaXZlbiB0byB0aGUgc2xhYiBhbGxvY2F0b3IKICAqIEBucl9pb3ZlY3M6CW51bWJlciBvZiBpb3ZlY3MgdG8gcHJlLWFsbG9jYXRlCisgKiBAYnM6CQl0aGUgYmlvX3NldCB0byBhbGxvY2F0ZSBmcm9tCiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgIGJpb19hbGxvY19iaW9zZXQgd2lsbCBmaXJzdCB0cnkgaXQncyBvbiBtZW1wb29sIHRvIHNhdGlzZnkgdGhlIGFsbG9jYXRpb24uCkBAIC02MjksNiArNjMwLDcgQEAKIAogLyoqCiAgKgliaW9fbWFwX3VzZXIJLQltYXAgdXNlciBhZGRyZXNzIGludG8gYmlvCisgKglAcTogdGhlIHJlcXVlc3RfcXVldWVfdCBmb3IgdGhlIGJpbwogICoJQGJkZXY6IGRlc3RpbmF0aW9uIGJsb2NrIGRldmljZQogICoJQHVhZGRyOiBzdGFydCBvZiB1c2VyIGFkZHJlc3MKICAqCUBsZW46IGxlbmd0aCBpbiBieXRlcwpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCBkMTlkMDdjLi5jMGNiZDFiIDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtNTMwLDcgKzUzMCw3IEBACiAJaWYgKCFiZG9wcy0+bWVkaWFfY2hhbmdlZChiZGV2LT5iZF9kaXNrKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoX19pbnZhbGlkYXRlX2RldmljZShiZGV2LCAwKSkKKwlpZiAoX19pbnZhbGlkYXRlX2RldmljZShiZGV2KSkKIAkJcHJpbnRrKCJWRlM6IGJ1c3kgaW5vZGVzIG9uIGNoYW5nZWQgbWVkaWEuXG4iKTsKIAogCWlmIChiZG9wcy0+cmV2YWxpZGF0ZV9kaXNrKQpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCAzYjEyY2Y5Li42Zjg4ZGNjIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAJc2IgPSBnZXRfc3VwZXIoYmRldik7CiAJaWYgKHNiICYmICEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCXNiLT5zX2Zyb3plbiA9IFNCX0ZSRUVaRV9XUklURTsKLQkJd21iKCk7CisJCXNtcF93bWIoKTsKIAogCQlzeW5jX2lub2Rlc19zYihzYiwgMCk7CiAJCURRVU9UX1NZTkMoc2IpOwpAQCAtMjM1LDcgKzIzNSw3IEBACiAJCXN5bmNfaW5vZGVzX3NiKHNiLCAxKTsKIAogCQlzYi0+c19mcm96ZW4gPSBTQl9GUkVFWkVfVFJBTlM7Ci0JCXdtYigpOworCQlzbXBfd21iKCk7CiAKIAkJc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKIApAQCAtMjYzLDcgKzI2Myw3IEBACiAJCWlmIChzYi0+c19vcC0+dW5sb2NrZnMpCiAJCQlzYi0+c19vcC0+dW5sb2NrZnMoc2IpOwogCQlzYi0+c19mcm96ZW4gPSBTQl9VTkZST1pFTjsKLQkJd21iKCk7CisJCXNtcF93bWIoKTsKIAkJd2FrZV91cCgmc2ItPnNfd2FpdF91bmZyb3plbik7CiAJCWRyb3Bfc3VwZXIoc2IpOwogCX0KQEAgLTc3NCwxNSArNzc0LDE0IEBACiAvKioKICAqIHN5bmNfbWFwcGluZ19idWZmZXJzIC0gd3JpdGUgb3V0IGFuZCB3YWl0IHVwb24gYSBtYXBwaW5nJ3MgImFzc29jaWF0ZWQiCiAgKiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMKLSAqIEBidWZmZXJfbWFwcGluZyAtIHRoZSBtYXBwaW5nIHdoaWNoIGJhY2tzIHRoZSBidWZmZXJzJyBkYXRhCi0gKiBAbWFwcGluZyAtIHRoZSBtYXBwaW5nIHdoaWNoIHdhbnRzIHRob3NlIGJ1ZmZlcnMgd3JpdHRlbgorICogQG1hcHBpbmc6IHRoZSBtYXBwaW5nIHdoaWNoIHdhbnRzIHRob3NlIGJ1ZmZlcnMgd3JpdHRlbgogICoKICAqIFN0YXJ0cyBJL08gYWdhaW5zdCB0aGUgYnVmZmVycyBhdCBtYXBwaW5nLT5wcml2YXRlX2xpc3QsIGFuZCB3YWl0cyB1cG9uCiAgKiB0aGF0IEkvTy4KICAqCi0gKiBCYXNpY2FsbHksIHRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZnN5bmMoKS4gIEBidWZmZXJfbWFwcGluZyBpcwotICogdGhlIGJsb2NrZGV2IHdoaWNoICJvd25zIiB0aGUgYnVmZmVycyBhbmQgQG1hcHBpbmcgaXMgYSBmaWxlIG9yIGRpcmVjdG9yeQotICogd2hpY2ggbmVlZHMgdGhvc2UgYnVmZmVycyB0byBiZSB3cml0dGVuIGZvciBhIHN1Y2Nlc3NmdWwgZnN5bmMoKS4KKyAqIEJhc2ljYWxseSwgdGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBmc3luYygpLgorICogQG1hcHBpbmcgaXMgYSBmaWxlIG9yIGRpcmVjdG9yeSB3aGljaCBuZWVkcyB0aG9zZSBidWZmZXJzIHRvIGJlIHdyaXR0ZW4gZm9yCisgKiBhIHN1Y2Nlc3NmdWwgZnN5bmMoKS4KICAqLwogaW50IHN5bmNfbWFwcGluZ19idWZmZXJzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewpAQCAtMTIxMSw3ICsxMjEwLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RydWN0IGJ1ZmZlcl9oZWFkICoKK3N0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKgogX19nZXRibGtfc2xvdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgaW50IHNpemUpCiB7CiAJLyogU2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIGhhcmQgc2VjdG9yc2l6ZSAqLwpAQCAtMTI2Myw2ICsxMjYyLDcgQEAKIAogLyoqCiAgKiBtYXJrX2J1ZmZlcl9kaXJ0eSAtIG1hcmsgYSBidWZmZXJfaGVhZCBhcyBuZWVkaW5nIHdyaXRlb3V0CisgKiBAYmg6IHRoZSBidWZmZXJfaGVhZCB0byBtYXJrIGRpcnR5CiAgKgogICogbWFya19idWZmZXJfZGlydHkoKSB3aWxsIHNldCB0aGUgZGlydHkgYml0IGFnYWluc3QgdGhlIGJ1ZmZlciwgdGhlbiBzZXQgaXRzCiAgKiBiYWNraW5nIHBhZ2UgZGlydHksIHRoZW4gdGFnIHRoZSBwYWdlIGFzIGRpcnR5IGluIGl0cyBhZGRyZXNzX3NwYWNlJ3MgcmFkaXgKQEAgLTE1MDEsNiArMTUwMSw3IEBACiAKIC8qKgogICogIF9fYnJlYWQoKSAtIHJlYWRzIGEgc3BlY2lmaWVkIGJsb2NrIGFuZCByZXR1cm5zIHRoZSBiaAorICogIEBiZGV2OiB0aGUgYmxvY2tfZGV2aWNlIHRvIHJlYWQgZnJvbQogICogIEBibG9jazogbnVtYmVyIG9mIGJsb2NrCiAgKiAgQHNpemU6IHNpemUgKGluIGJ5dGVzKSB0byByZWFkCiAgKiAKQEAgLTE4MDgsNyArMTgwOSw2IEBACiAJfSB3aGlsZSAoYmggIT0gaGVhZCk7CiAKIAlkbyB7Ci0JCWdldF9iaChiaCk7CiAJCWlmICghYnVmZmVyX21hcHBlZChiaCkpCiAJCQljb250aW51ZTsKIAkJLyoKQEAgLTE4MzcsNyArMTgzNyw2IEBACiAJICovCiAJQlVHX09OKFBhZ2VXcml0ZWJhY2socGFnZSkpOwogCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKLQl1bmxvY2tfcGFnZShwYWdlKTsKIAogCWRvIHsKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXh0ID0gYmgtPmJfdGhpc19wYWdlOwpAQCAtMTg0NSw5ICsxODQ0LDkgQEAKIAkJCXN1Ym1pdF9iaChXUklURSwgYmgpOwogCQkJbnJfdW5kZXJ3YXkrKzsKIAkJfQotCQlwdXRfYmgoYmgpOwogCQliaCA9IG5leHQ7CiAJfSB3aGlsZSAoYmggIT0gaGVhZCk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CiAKIAllcnIgPSAwOwogZG9uZToKQEAgLTE4ODYsNyArMTg4NSw2IEBACiAJYmggPSBoZWFkOwogCS8qIFJlY292ZXJ5OiBsb2NrIGFuZCBzdWJtaXQgdGhlIG1hcHBlZCBidWZmZXJzICovCiAJZG8gewotCQlnZXRfYmgoYmgpOwogCQlpZiAoYnVmZmVyX21hcHBlZChiaCkgJiYgYnVmZmVyX2RpcnR5KGJoKSkgewogCQkJbG9ja19idWZmZXIoYmgpOwogCQkJbWFya19idWZmZXJfYXN5bmNfd3JpdGUoYmgpOwpAQCAtMTkwOSw3ICsxOTA3LDYgQEAKIAkJCXN1Ym1pdF9iaChXUklURSwgYmgpOwogCQkJbnJfdW5kZXJ3YXkrKzsKIAkJfQotCQlwdXRfYmgoYmgpOwogCQliaCA9IG5leHQ7CiAJfSB3aGlsZSAoYmggIT0gaGVhZCk7CiAJZ290byBkb25lOwpAQCAtMTk1Miw3ICsxOTQ5LDcgQEAKIAkJaWYgKCFidWZmZXJfbWFwcGVkKGJoKSkgewogCQkJZXJyID0gZ2V0X2Jsb2NrKGlub2RlLCBibG9jaywgYmgsIDEpOwogCQkJaWYgKGVycikKLQkJCQlnb3RvIG91dDsKKwkJCQlicmVhazsKIAkJCWlmIChidWZmZXJfbmV3KGJoKSkgewogCQkJCWNsZWFyX2J1ZmZlcl9uZXcoYmgpOwogCQkJCXVubWFwX3VuZGVybHlpbmdfbWV0YWRhdGEoYmgtPmJfYmRldiwKQEAgLTE5OTQsMTAgKzE5OTEsMTIgQEAKIAl3aGlsZSh3YWl0X2JoID4gd2FpdCkgewogCQl3YWl0X29uX2J1ZmZlcigqLS13YWl0X2JoKTsKIAkJaWYgKCFidWZmZXJfdXB0b2RhdGUoKndhaXRfYmgpKQotCQkJcmV0dXJuIC1FSU87CisJCQllcnIgPSAtRUlPOwogCX0KLQlyZXR1cm4gMDsKLW91dDoKKwlpZiAoIWVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIEVycm9yIGNhc2U6ICovCiAJLyoKIAkgKiBaZXJvIG91dCBhbnkgbmV3bHkgYWxsb2NhdGVkIGJsb2NrcyB0byBhdm9pZCBleHBvc2luZyBzdGFsZQogCSAqIGRhdGEuICBJZiBCSF9OZXcgaXMgc2V0LCB3ZSBrbm93IHRoYXQgdGhlIGJsb2NrIHdhcyBuZXdseQpAQCAtMjA3OCw4ICsyMDc3LDcgQEAKIAlpbnQgbnIsIGk7CiAJaW50IGZ1bGx5X21hcHBlZCA9IDE7CiAKLQlpZiAoIVBhZ2VMb2NrZWQocGFnZSkpCi0JCVBBR0VfQlVHKHBhZ2UpOworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAJYmxvY2tzaXplID0gMSA8PCBpbm9kZS0+aV9ibGtiaXRzOwogCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkKIAkJY3JlYXRlX2VtcHR5X2J1ZmZlcnMocGFnZSwgYmxvY2tzaXplLCAwKTsKQEAgLTI5MTcsNyArMjkxNSw3IEBACiAKIAliaCA9IGhlYWQ7CiAJZG8gewotCQlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkKKwkJaWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkgJiYgcGFnZS0+bWFwcGluZykKIAkJCXNldF9iaXQoQVNfRUlPLCAmcGFnZS0+bWFwcGluZy0+ZmxhZ3MpOwogCQlpZiAoYnVmZmVyX2J1c3koYmgpKQogCQkJZ290byBmYWlsZWQ7CkBAIC0zMTE1LDcgKzMxMTMsNyBAQAogCiAJYmhfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImJ1ZmZlcl9oZWFkIiwKIAkJCXNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQpLCAwLAotCQkJU0xBQl9QQU5JQywgaW5pdF9idWZmZXJfaGVhZCwgTlVMTCk7CisJCQlTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX1BBTklDLCBpbml0X2J1ZmZlcl9oZWFkLCBOVUxMKTsKIAogCS8qCiAJICogTGltaXQgdGhlIGJoIG9jY3VwYW5jeSB0byAxMCUgb2YgWk9ORV9OT1JNQUwKZGlmZiAtLWdpdCBhL2ZzL2NoYXJfZGV2LmMgYi9mcy9jaGFyX2Rldi5jCmluZGV4IGE3NDViMWQuLmMxZTM1MzcgMTAwNjQ0Ci0tLSBhL2ZzL2NoYXJfZGV2LmMKKysrIGIvZnMvY2hhcl9kZXYuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJc3Bpbl91bmxvY2soJmNkZXZfbG9jayk7CiB9CiAKLXZvaWQgY2Rldl9wdXJnZShzdHJ1Y3QgY2RldiAqY2RldikKK3N0YXRpYyB2b2lkIGNkZXZfcHVyZ2Uoc3RydWN0IGNkZXYgKmNkZXYpCiB7CiAJc3Bpbl9sb2NrKCZjZGV2X2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmY2Rldi0+bGlzdCkpIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQVVUSE9SUyBiL2ZzL2NpZnMvQVVUSE9SUwppbmRleCBhY2NlMzZlLi43MmZkYzEwIDEwMDY0NAotLS0gYS9mcy9jaWZzL0FVVEhPUlMKKysrIGIvZnMvY2lmcy9BVVRIT1JTCkBAIC00LDEzICs0LDE2IEBACiAKIFRoZSBhdXRob3Igd2lzaGVzIHRvIGV4cHJlc3MgaGlzIGFwcHJlY2lhdGlvbiBhbmQgdGhhbmtzIHRvOgogQW5kcmV3IFRyaWRnZWxsIChTYW1iYSB0ZWFtKSBmb3IgaGlzIGVhcmx5IHN1Z2dlc3Rpb25zIGFib3V0IHNtYi9jaWZzIFZGUwotaW1wcm92ZW1lbnRzLiBUaGFua3MgdG8gSUJNIGZvciBhbGxvd2luZyBtZSB0aGUgdGltZSBhbmQgdGVzdCByZXNvdXJjZXMgdG8gcHVyc3VlCi10aGlzIHByb2plY3QuIEppbSBNY0Rvbm91Z2ggZnJvbSBJQk0gKGFuZCB0aGUgU2FtYmEgVGVhbSkgZm9yIGhpcyBoZWxwLgotVGhlIElCTSBMaW51eCBKRlMgdGVhbSBmb3IgZXhwbGFpbmluZyBtYW55IGVzb3RlcmljIExpbnV4IGZpbGVzeXN0ZW0gZmVhdHVyZXMuCitpbXByb3ZlbWVudHMuIFRoYW5rcyB0byBJQk0gZm9yIGFsbG93aW5nIG1lIHRpbWUgYW5kIHRlc3QgcmVzb3VyY2VzIHRvIHB1cnN1ZQordGhpcyBwcm9qZWN0LCB0byBKaW0gTWNEb25vdWdoIGZyb20gSUJNIChhbmQgdGhlIFNhbWJhIFRlYW0pIGZvciBoaXMgaGVscCwgdG8KK3RoZSBJQk0gTGludXggSkZTIHRlYW0gZm9yIGV4cGxhaW5pbmcgbWFueSBlc290ZXJpYyBMaW51eCBmaWxlc3lzdGVtIGZlYXR1cmVzLgorSmVyZW15IEFsbGlzb24gb2YgdGhlIFNhbWJhIHRlYW0gaGFzIGRvbmUgaW52YWx1YWJsZSB3b3JrIGluIGFkZGluZyB0aGUgc2VydmVyCitzaWRlIG9mIHRoZSBvcmlnaW5hbCBDSUZTIFVuaXggZXh0ZW5zaW9ucyBhbmQgcmV2aWV3aW5nIGFuZCBpbXBsZW1lbnRpbmcKK3BvcnRpb25zIG9mIHRoZSBuZXdlciBDSUZTIFBPU0lYIGV4dGVuc2lvbnMgaW50byB0aGUgU2FtYmEgMyBmaWxlIHNlcnZlci4gVGhhbmsKIERhdmUgQm91dGNoZXIgb2YgSUJNIFJvY2hlc3RlciAoYXV0aG9yIG9mIHRoZSBPUy80MDAgc21iL2NpZnMgZmlsZXN5c3RlbSBjbGllbnQpCi1mb3IgcHJvdmluZyB5ZWFycyBhZ28gdGhhdCBhIHZlcnkgZ29vZCBzbWIvY2lmcyBjbGllbnQgY291bGQgYmUgZG9uZSBvbiBhIFVuaXggbGlrZSAKLW9wZXJhdGluZyBzeXN0ZW0uICBWb2xrZXIgTGVuZGVja2UsIEFuZHJldyBUcmlkZ2VsbCwgVXJiYW4gV2lkbWFyaywgSm9obiBOZXdiaWdpbiAKLWFuZCBvdGhlcnMgZm9yIHRoZWlyIHdvcmsgb24gdGhlIExpbnV4IHNtYmZzIG1vZHVsZSBvdmVyIHRoZSB5ZWFycy4gVGhhbmtzIHRvCitmb3IgcHJvdmluZyB5ZWFycyBhZ28gdGhhdCB2ZXJ5IGdvb2Qgc21iL2NpZnMgY2xpZW50cyBjb3VsZCBiZSBkb25lIG9uIFVuaXgtbGlrZQorb3BlcmF0aW5nIHN5c3RlbXMuICBWb2xrZXIgTGVuZGVja2UsIEFuZHJldyBUcmlkZ2VsbCwgVXJiYW4gV2lkbWFyaywgSm9obiAKK05ld2JpZ2luIGFuZCBvdGhlcnMgZm9yIHRoZWlyIHdvcmsgb24gdGhlIExpbnV4IHNtYmZzIG1vZHVsZS4gIFRoYW5rcyB0bwogdGhlIG90aGVyIG1lbWJlcnMgb2YgdGhlIFN0b3JhZ2UgTmV0d29yayBJbmR1c3RyeSBBc3NvY2lhdGlvbiBDSUZTIFRlY2huaWNhbAogV29ya2dyb3VwIGZvciB0aGVpciB3b3JrIHNwZWNpZnlpbmcgdGhpcyBoaWdobHkgY29tcGxleCBwcm90b2NvbCBhbmQgZmluYWxseQogdGhhbmtzIHRvIHRoZSBTYW1iYSB0ZWFtIGZvciB0aGVpciB0ZWNobmljYWwgYWR2aWNlIGFuZCBlbmNvdXJhZ2VtZW50LgpAQCAtMjQsOSArMjcsMTEgQEAKIFNlcmdleSBWbGFzb3YKIFJpY2hhcmQgSHVnaGVzCiBZdXJ5IFVtYW5ldHMKLU1hcmsgSGFtenkKK01hcmsgSGFtenkgKGZvciBzb21lIG9mIHRoZSBlYXJseSBjaWZzIElQdjYgd29yaykKIERvbWVuIFB1bmNlcgotSmVzcGVyIEp1aGwKK0plc3BlciBKdWhsIChpbiBwYXJ0aWN1bGFyIGZvciBsb3RzIG9mIHdoaXRlc3BhY2UvZm9ybWF0dGluZyBjbGVhbnVwKQorVmluY2UgTmVncmkgYW5kIERhdmUgU3RhaGwgKGZvciBmaW5kaW5nIGFuIGltcG9ydGFudCBjYWNoaW5nIGJ1ZykKK0FkcmlhbiBCdW5rIChrY2FsbG9jIGNsZWFudXBzKQogCiBUZXN0IGNhc2UgYW5kIEJ1ZyBSZXBvcnQgY29udHJpYnV0b3JzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNiw3ICs0MSw4IEBACiBMYXJzIE11bGxlciwgVXJiYW4gV2lkbWFyaywgTWFzc2ltaWxpYW5vIEZlcnJlcm8sIEhvd2FyZCBPd2VuLAogT2xhZiBLaXJjaCwgS2llcm9uIEJyaWdncywgTmljayBNaWxsaW5ndG9uIGFuZCBvdGhlcnMuIEFsc28gc3BlY2lhbAogbWVudGlvbiB0byB0aGUgU3RhbmZvcmQgQ2hlY2tlciAoU1dBVCkgd2hpY2ggcG9pbnRlZCBvdXQgbWFueSBtaW5vcgotYnVncyBpbiBlcnJvciBwYXRocy4KK2J1Z3MgaW4gZXJyb3IgcGF0aHMuICBWYWx1YWJsZSBzdWdnZXN0aW9ucyBhbHNvIGhhdmUgY29tZSBmcm9tIEFsIFZpcm8KK2FuZCBEYXZlIE1pbGxlci4KIAogQW5kIHRoYW5rcyB0byB0aGUgSUJNIExUQyBhbmQgUG93ZXIgdGVzdCB0ZWFtcyBhbmQgU3VTRSB0ZXN0ZXJzIGZvcgogZmluZGluZyBtdWx0aXBsZSBidWdzIGR1cmluZyBleGNlbGxlbnQgc3RyZXNzIHRlc3QgcnVucy4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCA1MzE2YzhkLi45NTQ4M2JhIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC0xLDcgKzEsNDQgQEAKLVZlcnNpb24gMS4zMQorVmVyc2lvbiAxLjM0CistLS0tLS0tLS0tLS0KK0ZpeCBlcnJvciBtYXBwaW5nIG9mIHRoZSBUT09fTUFOWV9MSU5LUyAoaGFyZGxpbmtzKSBjYXNlLgorRG8gbm90IG9vcHMgaWYgcm9vdCB1c2VyIGtpbGxzIGNpZnMgb3Bsb2NrIGtlcm5lbCB0aHJlYWQgb3IKK2tpbGxzIHRoZSBjaWZzZCB0aHJlYWQgKE5COiBraWxsaW5nIHRoZSBjaWZzIGtlcm5lbCB0aHJlYWRzIGlzIG5vdAorcmVjb21tZW5kZWQsIHVubW91bnQgYW5kIHJtbW9kIGNpZnMgd2lsbCBraWxsIHRoZW0gd2hlbiB0aGV5IGFyZQorbm8gbG9uZ2VyIG5lZWRlZCkuICBGaXggcmVhZGRpciB0byBBU0NJSSBzZXJ2ZXJzIChpZSBvbGRlciBzZXJ2ZXJzCit3aGljaCBkbyBub3Qgc3VwcG9ydCBVbmljb2RlKSBhbmQgYWxzbyByZXF1aXJlIGFzdGVyaWsuCisKKworVmVyc2lvbiAxLjMzCistLS0tLS0tLS0tLS0KK0ZpeCBjYWNoaW5nIHByb2JsZW0sIGluIHdoaWNoIHJlYWRkaXIgb2YgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYSBmaWxlCit3aGljaCB3YXMgY2FjaGVkIGNvdWxkIGNhdXNlIHRoZSBmaWxlJ3MgdGltZSBzdGFtcCB0byBiZSB1cGRhdGVkCit3aXRob3V0IGludmFsaWRhdGluZyB0aGUgcmVhZGFoZWFkIGRhdGEgKHNvIHdlIGNvdWxkIGdldCBzdGFsZQorZmlsZSBkYXRhIG9uIHRoZSBjbGllbnQgZm9yIHRoYXQgZmlsZSBldmVuIGFzIHRoZSBzZXJ2ZXIgY29weSBjaGFuZ2VkKS4KK0NsZWFudXAgcmVzcG9uc2UgcHJvY2Vzc2luZyBzbyBjaWZzZCBjYW4gbm90IGxvb3Agd2hlbiBhYm5vcm1hbGx5Cit0ZXJtaW5hdGVkLgorCisKK1ZlcnNpb24gMS4zMgogLS0tLS0tLS0tLS0tCiBGaXggb29wcyBpbiBscyB3aGVuIFRyYW5zYWN0MiBGaW5kRmlyc3QgKG9yIEZpbmROZXh0KSByZXR1cm5zIG1vcmUgdGhhbiBvbmUKIHRyYW5zYWN0IHJlc3BvbnNlIGZvciBhbiBTTUIgcmVxdWVzdCBhbmQgc2VhcmNoIGVudHJ5IHNwbGl0IGFjcm9zcyB0d28gZnJhbWVzLgorQWRkIHN1cHBvcnQgZm9yIGxzYXR0ciAoZ2V0dGluZyBleHQyL2V4dDMvcmVpc2VyZnMgYXR0ciBmbGFncyBmcm9tIHRoZSBzZXJ2ZXIpCithcyBuZXcgcHJvdG9jb2wgZXh0ZW5zaW9ucy4gRG8gbm90IHNlbmQgR2V0L1NldCBjYWxscyBmb3IgUE9TSVggQUNMcwordW5sZXNzIHNlcnZlciBleHBsaWNpdGx5IGNsYWltcyB0byBzdXBwb3J0IHRoZW0gaW4gQ0lGUyBVbml4IGV4dGVuc2lvbnMKK1BPU0lYIEFDTCBjYXBhYmlsaXR5IGJpdC4gRml4IHBhY2tldCBzaWduaW5nIHdoZW4gbXVsdGl1c2VyIG1vdW50aW5nIHdpdGgKK2RpZmZlcmVudCB1c2VycyBmcm9tIHRoZSBzYW1lIGNsaWVudCB0byB0aGUgc2FtZSBzZXJ2ZXIuIEZpeCBvb3BzIGluCitjaWZzX2Nsb3NlLiBBZGQgbW91bnQgb3B0aW9uIGZvciByZW1hcHBpbmcgcmVzZXJ2ZWQgY2hhcmFjdGVycyBpbgorZmlsZW5hbWVzIChhbHNvIGFsbG93IHJlY29nbml6aW5nIGZpbGVzIHdpdGggY3JlYXRlZCBieSBTRlUgd2hpY2ggaGF2ZSBhbnkKK29mIHRoZXNlIHNldmVuIHJlc2VydmVkIGNoYXJhY3RlcnMsIGV4Y2VwdCBiYWNrc2xhc2gsIHRvIGJlIHJlY29nbml6ZWQpLgorRml4IGludmFsaWQgdHJhbnNhY3QyIG1lc3NhZ2UgKHdlIHdlcmUgc29tZXRpbWVzIHRyeWluZyB0byBpbnRlcnByZXQKK29wbG9jayBicmVha3MgYXMgU01CIHJlc3BvbnNlcykuIEFkZCBpb2N0bCBmb3IgY2hlY2tpbmcgdGhhdCB0aGUKK2N1cnJlbnQgdWlkIG1hdGNoZXMgdGhlIHVpZCBvZiB0aGUgbW91bnRlciAobmVlZGVkIGJ5IHVtb3VudC5jaWZzKS4KK1JlZHVjZSB0aGUgbnVtYmVyIG9mIGxhcmdlIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBjaWZzIHJlc3BvbnNlIHByb2Nlc3NpbmcKKyhzaWduaWZpY2FudGx5IHJlZHVjZXMgbWVtb3J5IHByZXNzdXJlIHVuZGVyIGhlYXZ5IHN0cmVzcyB3aXRoIG11bHRpcGxlCitwcm9jZXNzZXMgYWNjZXNzaW5nIHRoZSBzYW1lIHNlcnZlciBhdCB0aGUgc2FtZSB0aW1lKS4KKworVmVyc2lvbiAxLjMxCistLS0tLS0tLS0tLS0KIEZpeCB1cGRhdGVzIG9mIERPUyBhdHRyaWJ1dGVzIGFuZCB0aW1lIGZpZWxkcyBzbyB0aGF0IGZpbGVzIG9uIE5UNCBzZXJ2ZXJzCiBkbyBub3QgZ2V0IG1hcmtlZCBkZWxldGUgb24gY2xvc2UuIERpc3BsYXkgc2l6ZXMgb2YgY2lmcyBidWZmZXIgcG9vbHMgaW4KIGNpZnMgc3RhdHMuIEZpeCBvb3BzIGluIHVubW91bnQgd2hlbiBjaWZzZCB0aHJlYWQgYmVpbmcga2lsbGVkIGJ5IApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9SRUFETUUgYi9mcy9jaWZzL1JFQURNRQppbmRleCAwZjIwZWRjLi5lNzRkZjBjIDEwMDY0NAotLS0gYS9mcy9jaWZzL1JFQURNRQorKysgYi9mcy9jaWZzL1JFQURNRQpAQCAtMzIsOSArMzIsOSBAQAogNikgbWFrZSBtb2R1bGVzIChvciAibWFrZSIgaWYgQ0lGUyBWRlMgbm90IHRvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlKQogCiBGb3IgTGludXggMi42OgotMSkgRG93bmxvYWQgdGhlIGtlcm5lbCAoZS5nLiBmcm9tIGh0dHA6Ly93d3cua2VybmVsLm9yZyBvciBmcm9tIGJpdGtlZXBlcgotYXQgYms6Ly9saW51eC5ia2JpdHMubmV0L2xpbnV4LTIuNSkgYW5kIGNoYW5nZSBkaXJlY3RvcnkgaW50byB0aGUgdG9wCi1vZiB0aGUga2VybmVsIGRpcmVjdG9yeSB0cmVlIChlLmcuIC91c3Ivc3JjL2xpbnV4LTIuNS43MykKKzEpIERvd25sb2FkIHRoZSBrZXJuZWwgKGUuZy4gZnJvbSBodHRwOi8vd3d3Lmtlcm5lbC5vcmcpCithbmQgY2hhbmdlIGRpcmVjdG9yeSBpbnRvIHRoZSB0b3Agb2YgdGhlIGtlcm5lbCBkaXJlY3RvcnkgdHJlZQorKGUuZy4gL3Vzci9zcmMvbGludXgtMi41LjczKQogMikgbWFrZSBtZW51Y29uZmlnIChvciBtYWtlIHhjb25maWcpCiAzKSBzZWxlY3QgY2lmcyBmcm9tIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIGNob2ljZXMKIDQpIHNhdmUgYW5kIGV4aXQKQEAgLTc1LDcgKzc1LDcgQEAKID09PT09PT09PT09PT09PT09PT09CiBUbyBwZXJtaXQgdXNlcnMgdG8gbW91bnQgYW5kIHVubW91bnQgb3ZlciBkaXJlY3RvcmllcyB0aGV5IG93biBpcyBwb3NzaWJsZQogd2l0aCB0aGUgY2lmcyB2ZnMuICBBIHdheSB0byBlbmFibGUgc3VjaCBtb3VudGluZyBpcyB0byBtYXJrIHRoZSBtb3VudC5jaWZzCi11dGlsaXR5IGFzIHN1aWQgKGUuZy4gImNobW9kICtzIC9zYmluL21vdW50L2NpZnMpLiBUbyBlbmFibGUgdXNlcnMgdG8gCit1dGlsaXR5IGFzIHN1aWQgKGUuZy4gImNobW9kICtzIC9zYmluL21vdW50LmNpZnMpLiBUbyBlbmFibGUgdXNlcnMgdG8gCiB1bW91bnQgc2hhcmVzIHRoZXkgbW91bnQgcmVxdWlyZXMKIDEpIG1vdW50LmNpZnMgdmVyc2lvbiAxLjQgb3IgbGF0ZXIKIDIpIGFuIGVudHJ5IGZvciB0aGUgc2hhcmUgaW4gL2V0Yy9mc3RhYiBpbmRpY2F0aW5nIHRoYXQgYSB1c2VyIG1heQpAQCAtOTcsNiArOTcsMjYgQEAKIFRoZXJlIGlzIGEgY29ycmVzcG9uZGluZyBtYW51YWwgcGFnZSBmb3IgY2lmcyBtb3VudGluZyBpbiB0aGUgU2FtYmEgMy4wIGFuZAogbGF0ZXIgc291cmNlIHRyZWUgaW4gZG9jcy9tYW5wYWdlcy9tb3VudC5jaWZzLjggCiAKK0FsbG93aW5nIFVzZXIgVW5tb3VudHMKKz09PT09PT09PT09PT09PT09PT09PT0KK1RvIHBlcm1pdCB1c2VycyB0byB1bW1vdW50IGRpcmVjdG9yaWVzIHRoYXQgdGhleSBoYXZlIHVzZXIgbW91bnRlZCAoc2VlIGFib3ZlKSwKK3RoZSB1dGlsaXR5IHVtb3VudC5jaWZzIG1heSBiZSB1c2VkLiAgSXQgbWF5IGJlIGludm9rZWQgZGlyZWN0bHksIG9yIGlmIAordW1vdW50LmNpZnMgaXMgcGxhY2VkIGluIC9zYmluLCB1bW91bnQgY2FuIGludm9rZSB0aGUgY2lmcyB1bW91bnQgaGVscGVyCisoYXQgbGVhc3QgZm9yIG1vc3QgdmVyc2lvbnMgb2YgdGhlIHVtb3VudCB1dGlsaXR5KSBmb3IgdW1vdW50IG9mIGNpZnMKK21vdW50cywgdW5sZXNzIHVtb3VudCBpcyBpbnZva2VkIHdpdGggLWkgKHdoaWNoIHdpbGwgYXZvaWQgaW52b2tpbmcgYSB1bW91bnQKK2hlbHBlcikuIEFzIHdpdGggbW91bnQuY2lmcywgdG8gZW5hYmxlIHVzZXIgdW5tb3VudHMgdW1vdW50LmNpZnMgbXVzdCBiZSBtYXJrZWQKK2FzIHN1aWQgKGUuZy4gImNobW9kICtzIC9zYmluL3Vtb3VudC5jaWZzIikgb3IgZXF1aXZhbGVudCAoc29tZSBkaXN0cmlidXRpb25zCithbGxvdyBhZGRpbmcgZW50cmllcyB0byBhIGZpbGUgdG8gdGhlIC9ldGMvcGVybWlzc2lvbnMgZmlsZSB0byBhY2hpZXZlIHRoZQorZXF1aXZhbGVudCBzdWlkIGVmZmVjdCkuICBGb3IgdGhpcyB1dGlsaXR5IHRvIHN1Y2NlZWQgdGhlIHRhcmdldCBwYXRoCittdXN0IGJlIGEgY2lmcyBtb3VudCwgYW5kIHRoZSB1aWQgb2YgdGhlIGN1cnJlbnQgdXNlciBtdXN0IG1hdGNoIHRoZSB1aWQKK29mIHRoZSB1c2VyIHdobyBtb3VudGVkIHRoZSByZXNvdXJjZS4KKworQWxzbyBub3RlIHRoYXQgdGhlIGN1c3RvbWFyeSB3YXkgb2YgYWxsb3dpbmcgdXNlciBtb3VudHMgYW5kIHVubW91bnRzIGlzIAorKGluc3RlYWQgb2YgdXNpbmcgbW91bnQuY2lmcyBhbmQgdW5tb3VudC5jaWZzIGFzIHN1aWQpIHRvIGFkZCBhIGxpbmUKK3RvIHRoZSBmaWxlIC9ldGMvZnN0YWIgZm9yIGVhY2ggLy9zZXJ2ZXIvc2hhcmUgeW91IHdpc2ggdG8gbW91bnQsIGJ1dAordGhpcyBjYW4gYmVjb21lIHVud2llbGR5IHdoZW4gcG90ZW50aWFsIG1vdW50IHRhcmdldHMgaW5jbHVkZSBtYW55CitvciAgdW5wcmVkaWN0YWJsZSBVTkMgbmFtZXMuCisKIFNhbWJhIENvbnNpZGVyYXRpb25zIAogPT09PT09PT09PT09PT09PT09PT0gCiBUbyBnZXQgdGhlIG1heGltdW0gYmVuZWZpdCBmcm9tIHRoZSBDSUZTIFZGUywgd2UgcmVjb21tZW5kIHVzaW5nIGEgc2VydmVyIHRoYXQgCkBAIC0zNzYsNiArMzk2LDE5IEBACiAJCWF0dHJpYnV0ZXMpIHRvIHRoZSBzZXJ2ZXIgKGRlZmF1bHQpIGUuZy4gdmlhIHNldGZhdHRyIAogCQlhbmQgZ2V0ZmF0dHIgdXRpbGl0aWVzLiAKICAgbm91c2VyX3hhdHRyICBEbyBub3QgYWxsb3cgZ2V0ZmF0dHIvc2V0ZmF0dHIgdG8gZ2V0L3NldCB4YXR0cnMgCisgIG1hcGNoYXJzICAgICAgVHJhbnNsYXRlIHNpeCBvZiB0aGUgc2V2ZW4gcmVzZXJ2ZWQgY2hhcmFjdGVycyAobm90IGJhY2tzbGFzaCkKKwkJCSo/PD58OgorCQl0byB0aGUgcmVtYXAgcmFuZ2UgKGFib3ZlIDB4RjAwMCksIHdoaWNoIGFsc28KKwkJYWxsb3dzIHRoZSBDSUZTIGNsaWVudCB0byByZWNvZ25pemUgZmlsZXMgY3JlYXRlZCB3aXRoCisJCXN1Y2ggY2hhcmFjdGVycyBieSBXaW5kb3dzJ3MgUE9TSVggZW11bGF0aW9uLiBUaGlzIGNhbgorCQlhbHNvIGJlIHVzZWZ1bCB3aGVuIG1vdW50aW5nIHRvIG1vc3QgdmVyc2lvbnMgb2YgU2FtYmEKKwkJKHdoaWNoIGFsc28gZm9yYmlkcyBjcmVhdGluZyBhbmQgb3BlbmluZyBmaWxlcworCQl3aG9zZSBuYW1lcyBjb250YWluIGFueSBvZiB0aGVzZSBzZXZlbiBjaGFyYWN0ZXJzKS4KKwkJVGhpcyBoYXMgbm8gZWZmZWN0IGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydAorCQlVbmljb2RlIG9uIHRoZSB3aXJlLgorIG5vbWFwY2hhcnMgICAgIERvIG5vdCB0cmFuc2xhdGUgYW55IG9mIHRoZXNlIHNldmVuIGNoYXJhY3RlcnMgKGRlZmF1bHQpLgorIHJlbW91bnQgICAgICAgIHJlbW91bnQgdGhlIHNoYXJlIChvZnRlbiB1c2VkIHRvIGNoYW5nZSBmcm9tIHJvIHRvIHJ3IG1vdW50cworCSAgICAgICAgb3IgdmljZSB2ZXJzYSkKIAkJCiBUaGUgbW91bnQuY2lmcyBtb3VudCBoZWxwZXIgYWxzbyBhY2NlcHRzIGEgZmV3IG1vdW50IG9wdGlvbnMgYmVmb3JlIC1vCiBpbmNsdWRpbmc6CkBAIC0zOTIsNyArNDI1LDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogSW5mb3JtYXRpb25hbCBwc2V1ZG8tZmlsZXM6CiBEZWJ1Z0RhdGEJCURpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IGFjdGl2ZSBDSUZTIHNlc3Npb25zCi0JCQlhbmQgc2hhcmVzLgorCQkJYW5kIHNoYXJlcywgYXMgd2VsbCBhcyB0aGUgY2lmcy5rbyB2ZXJzaW9uLgogU3RhdHMJCQlMaXN0cyBzdW1tYXJ5IHJlc291cmNlIHVzYWdlIGluZm9ybWF0aW9uIGFzIHdlbGwgYXMgcGVyCiAJCQlzaGFyZSBzdGF0aXN0aWNzLCBpZiBDT05GSUdfQ0lGU19TVEFUUyBpbiBlbmFibGVkCiAJCQlpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCkBAIC00NDksNyArNDgyLDcgQEAKIFR3byBvdGhlciBleHBlcmltZW50YWwgZmVhdHVyZXMgYXJlIHVuZGVyIGRldmVsb3BtZW50IGFuZCB0byB0ZXN0IAogcmVxdWlyZSBlbmFibGluZyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKIAotCU1vcmUgZWZmaWNpZW50IHdyaXRlIG9wZXJhdGlvbnMgYW5kIFNNQiBidWZmZXIgaGFuZGxpbmcKKwlNb3JlIGVmZmljaWVudCB3cml0ZSBvcGVyYXRpb25zCiAKIAlETk9USUZZIGZjbnRsOiBuZWVkZWQgZm9yIHN1cHBvcnQgb2YgZGlyZWN0b3J5IGNoYW5nZSAKIAkJCSAgICBub3RpZmljYXRpb24gYW5kIHBlcmhhcHMgbGF0ZXIgZm9yIGZpbGUgbGVhc2VzKQpAQCAtNDY3LDggKzUwMCw4IEBACiAJCiBBbHNvIG5vdGUgdGhhdCAiY2F0IC9wcm9jL2ZzL2NpZnMvRGVidWdEYXRhIiB3aWxsIGRpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgCiB0aGUgYWN0aXZlIHNlc3Npb25zIGFuZCB0aGUgc2hhcmVzIHRoYXQgYXJlIG1vdW50ZWQuICBOb3RlOiBOVExNdjIgZW5hYmxlbWVudCAKLXdpbGwgbm90IHdvcmsgc2luY2UgdGhleSBpdHMgaW1wbGVtZW50YXRpb24gaXMgbm90IHF1aXRlIGNvbXBsZXRlIHlldC4KLURvIG5vdCBhbHRlciB0aGVzZSBjb25maWd1cmF0aW9uIHZhbHVlcyB1bmxlc3MgeW91IGFyZSBkb2luZyBzcGVjaWZpYyB0ZXN0aW5nLiAgCit3aWxsIG5vdCB3b3JrIHNpbmNlIGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgcXVpdGUgY29tcGxldGUgeWV0LiBEbyBub3QgYWx0ZXIKK3RoZSBFeHRlbmRlZFNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gdmFsdWUgdW5sZXNzIHlvdSBhcmUgZG9pbmcgc3BlY2lmaWMgdGVzdGluZy4KIEVuYWJsaW5nIGV4dGVuZGVkIHNlY3VyaXR5IHdvcmtzIHRvIFdpbmRvd3MgMjAwMCBXb3Jrc3RhdGlvbnMgYW5kIFhQIGJ1dCBub3QgdG8gCiBXaW5kb3dzIDIwMDAgc2VydmVyIG9yIFNhbWJhIHNpbmNlIGl0IGRvZXMgbm90IHVzdWFsbHkgc2VuZCAicmF3IE5UTE1TU1AiIAogKGluc3RlYWQgaXQgc2VuZHMgTlRMTVNTUCBlbmNhcHN1bGF0ZWQgaW4gU1BORUdPL0dTU0FQSSwgd2hpY2ggc3VwcG9ydCBpcyBub3QgCmRpZmYgLS1naXQgYS9mcy9jaWZzL1RPRE8gYi9mcy9jaWZzL1RPRE8KaW5kZXggZjRlM2UxZi4uOGNjODgxNiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9UT0RPCisrKyBiL2ZzL2NpZnMvVE9ETwpAQCAtMSw0ICsxLDQgQEAKLXZlcnNpb24gMS4yMiBKdWx5IDMwLCAyMDA0IAordmVyc2lvbiAxLjM0IEFwcmlsIDI5LCAyMDA1CiAKIEEgUGFydGlhbCBMaXN0IG9mIE1pc3NpbmcgRmVhdHVyZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE0LDcgKzE0LDcgQEAKIGJldHRlcikKIAogYykgbXVsdGktdXNlciBtb3VudHMgLSBtdWx0aXBsZXhlZCBzZXNzaW9uc2V0dXBzIG92ZXIgc2luZ2xlIHZjCi0oaWUgdGNwIHNlc3Npb24pIC0gcHJldHR5aW5nIHVwIG5lZWRlZCwgYW5kIG1vcmUgdGVzdGluZyBuZWVkZWQKKyhpZSB0Y3Agc2Vzc2lvbikgLSBtb3JlIHRlc3RpbmcgbmVlZGVkCiAKIGQpIEtlcmJlcm9zL1NQTkVHTyBzZXNzaW9uIHNldHVwIHN1cHBvcnQgLSAoc3RhcnRlZCkKIApAQCAtNjcsMTIgKzY3LDI2IEBACiAKIHIpIEltcGxlbWVudCBPX0RJUkVDVCBmbGFnIG9uIG9wZW4gKGFscmVhZHkgc3VwcG9ydGVkIG9uIG1vdW50KQogCi1LTk9XTiBCVUdTICh1cGRhdGVkIERlY2VtYmVyIDEwLCAyMDA0KQorcykgQWxsb3cgcmVtYXBwaW5nIG9mIGxhc3QgcmVtYWluaW5nIGNoYXJhY3RlciAoXCkgdG8gKzB4RjAwMCB3aGljaAorKHRoaXMgY2hhcmFjdGVyIGlzIHZhbGlkIGZvciBQT1NJWCBidXQgbm90IGZvciBXaW5kb3dzKQorCit0KSBDcmVhdGUgVUlEIG1hcHBpbmcgZmFjaWxpdHkgc28gc2VydmVyIFVJRHMgY2FuIGJlIG1hcHBlZCBvbiBhIHBlcgorbW91bnQgb3IgYSBwZXIgc2VydmVyIGJhc2lzIHRvIGNsaWVudCBVSURzIG9yIG5vYm9keSBpZiBubyBtYXBwaW5nCitleGlzdHMuICBUaGlzIGlzIGhlbHBmdWwgd2hlbiBVbml4IGV4dGVuc2lvbnMgYXJlIG5lZ290aWF0ZWQgdG8KK2FsbG93IGJldHRlciBwZXJtaXNzaW9uIGNoZWNraW5nIHdoZW4gVUlEcyBkaWZmZXIgb24gdGhlIHNlcnZlcgorYW5kIGNsaWVudC4gIEFkZCBuZXcgcHJvdG9jb2wgcmVxdWVzdCB0byB0aGUgQ0lGUyBwcm90b2NvbCAKK3N0YW5kYXJkIGZvciBhc2tpbmcgdGhlIHNlcnZlciBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgbmFtZSBvZiBhCitwYXJ0aWN1bGFyIHVpZC4KKworS05PV04gQlVHUyAodXBkYXRlZCBBcHJpbCAyOSwgMjAwNSkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorU2VlIGh0dHA6Ly9idWd6aWxsYS5zYW1iYS5vcmcgLSBzZWFyY2ggb24gcHJvZHVjdCAiQ2lmc1ZGUyIgZm9yCitjdXJyZW50IGJ1ZyBsaXN0LgorCiAxKSBleGlzdGluZyBzeW1ib2xpYyBsaW5rcyAoV2luZG93cyByZXBhcnNlIHBvaW50cykgYXJlIHJlY29nbml6ZWQgYnV0CiBjYW4gbm90IGJlIGNyZWF0ZWQgcmVtb3RlbHkuIFRoZXkgYXJlIGltcGxlbWVudGVkIGZvciBTYW1iYSBhbmQgdGhvc2UgdGhhdAotc3VwcG9ydCB0aGUgQ0lGUyBVbml4IGV4dGVuc2lvbnMgYnV0IFNhbWJhIGhhcyBhIGJ1ZyBjdXJyZW50bHkgaGFuZGxpbmcKLXN5bWxpbmsgdGV4dCBiZWdpbm5pbmcgd2l0aCBzbGFzaAorc3VwcG9ydCB0aGUgQ0lGUyBVbml4IGV4dGVuc2lvbnMsIGFsdGhvdWdoIGVhcmxpZXIgdmVyc2lvbnMgb2YgU2FtYmEKK292ZXJseSByZXN0cmljdCB0aGUgcGF0aG5hbWVzLgogMikgZm9sbG93X2xpbmsgYW5kIHJlYWRkaXIgY29kZSBkb2VzIG5vdCBmb2xsb3cgZGZzIGp1bmN0aW9ucwogYnV0IHJlY29nbml6ZXMgdGhlbQogMykgY3JlYXRlIG9mIG5ldyBmaWxlcyB0byBGQVQgcGFydGl0aW9ucyBvbiBXaW5kb3dzIHNlcnZlcnMgY2FuCkBAIC05OCw3ICsxMTIsNSBAQAogYW5kIHdoZW4gc2lnbmluZyBpcyBkaXNhYmxlZCB0byByZXF1ZXN0IGxhcmdlciByZWFkIHNpemVzIChsYXJnZXIgdGhhbiAKIG5lZ290aWF0ZWQgc2l6ZSkgYW5kIHNlbmQgbGFyZ2VyIHdyaXRlIHNpemVzIHRvIG1vZGVybiBzZXJ2ZXJzLgogCi00KSBNb3JlIGV4aGF1c3RpdmVseSB0ZXN0IHRoZSByZWNlbnRseSBhZGRlZCBOVDQgc3VwcG9ydCBhZ2FpbnN0IHZhcmlvdXMKLU5UNCBzZXJ2aWNlIHBhY2sgbGV2ZWxzLCBhbmQgZml4IGNpZnNfc2V0YXR0ciBmb3Igc2V0dGluZyBmaWxlIHRpbWVzIGFuZCAKLXNpemUgdG8gZmFsbCBiYWNrIHRvIGxldmVsIDEgd2hlbiBlcnJvciBpbnZhbGlkIGxldmVsIHJldHVybmVkLgotCis0KSBNb3JlIGV4aGF1c3RpdmVseSB0ZXN0IGFnYWluc3QgbGVzcyBjb21tb24gc2VydmVycy4gIE1vcmUgdGVzdGluZworYWdhaW5zdCBXaW5kb3dzIDl4LCBXaW5kb3dzIE1FIHNlcnZlcnMuCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGVidWcuYyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCmluZGV4IGRiMjhiNTYuLjQwNjFlNDMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICAgZnMvY2lmc19kZWJ1Zy5jCiAgKgotICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAwLDIwMDMKKyAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMCwyMDA1CiAgKgogICogICBNb2RpZmllZCBieSBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKICAqCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY2lmc2dsb2IuaCIKICNpbmNsdWRlICJjaWZzcHJvdG8uaCIKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCisjaW5jbHVkZSAiY2lmc2ZzLmgiCiAKIHZvaWQKIGNpZnNfZHVtcF9tZW0oY2hhciAqbGFiZWwsIHZvaWQgKmRhdGEsIGludCBsZW5ndGgpCkBAIC03OCw4ICs3OSw5IEBACiAJCSAgICAiRGlzcGxheSBJbnRlcm5hbCBDSUZTIERhdGEgU3RydWN0dXJlcyBmb3IgRGVidWdnaW5nXG4iCiAJCSAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlidWYgKz0gbGVuZ3RoOwotCi0JbGVuZ3RoID0gc3ByaW50ZihidWYsICJTZXJ2ZXJzOlxuIik7CisJbGVuZ3RoID0gc3ByaW50ZihidWYsIkNJRlMgVmVyc2lvbiAlc1xuIixDSUZTX1ZFUlNJT04pOworCWJ1ZiArPSBsZW5ndGg7CisJbGVuZ3RoID0gc3ByaW50ZihidWYsICJTZXJ2ZXJzOiIpOwogCWJ1ZiArPSBsZW5ndGg7CiAKIAlpID0gMDsKQEAgLTg3LDEyICs4OSwyMSBAQAogCWxpc3RfZm9yX2VhY2godG1wLCAmR2xvYmFsU01CU2Vzc2lvbkxpc3QpIHsKIAkJaSsrOwogCQlzZXMgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGNpZnNTZXNJbmZvLCBjaWZzU2Vzc2lvbkxpc3QpOwotCQlsZW5ndGggPQotCQkgICAgc3ByaW50ZihidWYsCi0JCQkgICAgIlxuJWQpIE5hbWU6ICVzICBEb21haW46ICVzIE1vdW50czogJWQgU2VydmVyT1M6ICVzICBcblx0U2VydmVyTk9TOiAlc1x0Q2FwYWJpbGl0aWVzOiAweCV4XG5cdFNNQiBzZXNzaW9uIHN0YXR1czogJWRcdCIsCi0JCQkJaSwgc2VzLT5zZXJ2ZXJOYW1lLCBzZXMtPnNlcnZlckRvbWFpbiwgYXRvbWljX3JlYWQoJnNlcy0+aW5Vc2UpLAotCQkJCXNlcy0+c2VydmVyT1MsIHNlcy0+c2VydmVyTk9TLCBzZXMtPmNhcGFiaWxpdGllcyxzZXMtPnN0YXR1cyk7Ci0JCWJ1ZiArPSBsZW5ndGg7CisJCWlmKChzZXMtPnNlcnZlckRvbWFpbiA9PSBOVUxMKSB8fCAoc2VzLT5zZXJ2ZXJPUyA9PSBOVUxMKSB8fAorCQkgICAoc2VzLT5zZXJ2ZXJOT1MgPT0gTlVMTCkpIHsKKwkJCWJ1ZiArPSBzcHJpbnRmKCJcbmVudHJ5IGZvciAlcyBub3QgZnVsbHkgZGlzcGxheWVkXG5cdCIsCisJCQkJCXNlcy0+c2VydmVyTmFtZSk7CisJCQkKKwkJfSBlbHNlIHsKKwkJCWxlbmd0aCA9CisJCQkgICAgc3ByaW50ZihidWYsCisJCQkJICAgICJcbiVkKSBOYW1lOiAlcyAgRG9tYWluOiAlcyBNb3VudHM6ICVkIFNlcnZlck9TOiAlcyAgXG5cdFNlcnZlck5PUzogJXNcdENhcGFiaWxpdGllczogMHgleFxuXHRTTUIgc2Vzc2lvbiBzdGF0dXM6ICVkXHQiLAorCQkJCWksIHNlcy0+c2VydmVyTmFtZSwgc2VzLT5zZXJ2ZXJEb21haW4sCisJCQkJYXRvbWljX3JlYWQoJnNlcy0+aW5Vc2UpLAorCQkJCXNlcy0+c2VydmVyT1MsIHNlcy0+c2VydmVyTk9TLAorCQkJCXNlcy0+Y2FwYWJpbGl0aWVzLHNlcy0+c3RhdHVzKTsKKwkJCWJ1ZiArPSBsZW5ndGg7CisJCX0KIAkJaWYoc2VzLT5zZXJ2ZXIpIHsKIAkJCWJ1ZiArPSBzcHJpbnRmKGJ1ZiwgIlRDUCBzdGF0dXM6ICVkXG5cdExvY2FsIFVzZXJzIFRvIFNlcnZlcjogJWQgU2VjTW9kZTogMHgleCBSZXEgQWN0aXZlOiAlZCIsCiAJCQkJc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cywKQEAgLTEwMCw3ICsxMTEsNyBAQAogCQkJCXNlcy0+c2VydmVyLT5zZWNNb2RlLAogCQkJCWF0b21pY19yZWFkKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpKTsKIAkJCQotCQkJbGVuZ3RoID0gc3ByaW50ZihidWYsICJcbk1JRHM6IFxuIik7CisJCQlsZW5ndGggPSBzcHJpbnRmKGJ1ZiwgIlxuTUlEczpcbiIpOwogCQkJYnVmICs9IGxlbmd0aDsKIAogCQkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CkBAIC0xMDksNyArMTIwLDEyIEBACiAJCQkJCW1pZF9xX2VudHJ5LAogCQkJCQlxaGVhZCk7CiAJCQkJaWYobWlkX2VudHJ5KSB7Ci0JCQkJCWxlbmd0aCA9IHNwcmludGYoYnVmLCJTdGF0ZTogJWQgY29tOiAlZCBwaWQ6ICVkIHRzazogJXAgbWlkICVkXG4iLG1pZF9lbnRyeS0+bWlkU3RhdGUsbWlkX2VudHJ5LT5jb21tYW5kLG1pZF9lbnRyeS0+cGlkLG1pZF9lbnRyeS0+dHNrLG1pZF9lbnRyeS0+bWlkKTsKKwkJCQkJbGVuZ3RoID0gc3ByaW50ZihidWYsIlN0YXRlOiAlZCBjb206ICVkIHBpZDogJWQgdHNrOiAlcCBtaWQgJWRcbiIsCisJCQkJCQltaWRfZW50cnktPm1pZFN0YXRlLAorCQkJCQkJKGludCltaWRfZW50cnktPmNvbW1hbmQsCisJCQkJCQltaWRfZW50cnktPnBpZCwKKwkJCQkJCW1pZF9lbnRyeS0+dHNrLAorCQkJCQkJbWlkX2VudHJ5LT5taWQpOwogCQkJCQlidWYgKz0gbGVuZ3RoOwogCQkJCX0KIAkJCX0KQEAgLTEyMSw3ICsxMzcsNyBAQAogCXNwcmludGYoYnVmLCAiXG4iKTsKIAlidWYrKzsKIAotCWxlbmd0aCA9IHNwcmludGYoYnVmLCAiXG5TaGFyZXM6XG4iKTsKKwlsZW5ndGggPSBzcHJpbnRmKGJ1ZiwgIlNoYXJlczoiKTsKIAlidWYgKz0gbGVuZ3RoOwogCiAJaSA9IDA7CkBAIC0yMDAsNyArMjE2LDggQEAKIAlidWYgKz0gaXRlbV9sZW5ndGg7ICAgICAgCiAJaXRlbV9sZW5ndGggPSAKIAkJc3ByaW50ZihidWYsIlNNQiBSZXF1ZXN0L1Jlc3BvbnNlIEJ1ZmZlcjogJWQgUG9vbCBzaXplOiAlZFxuIiwKLQkJCWJ1ZkFsbG9jQ291bnQuY291bnRlcixjaWZzX21pbl9yY3YgKyB0Y3BTZXNBbGxvY0NvdW50LmNvdW50ZXIpOworCQkJYnVmQWxsb2NDb3VudC5jb3VudGVyLAorCQkJY2lmc19taW5fcmN2ICsgdGNwU2VzQWxsb2NDb3VudC5jb3VudGVyKTsKIAlsZW5ndGggKz0gaXRlbV9sZW5ndGg7CiAJYnVmICs9IGl0ZW1fbGVuZ3RoOwogCWl0ZW1fbGVuZ3RoID0gCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZnNfc2IuaCBiL2ZzL2NpZnMvY2lmc19mc19zYi5oCmluZGV4IDc3ZGE5MDIuLmVjMDBkNjEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19mc19zYi5oCisrKyBiL2ZzL2NpZnMvY2lmc19mc19zYi5oCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0gIDQgLyogaW5vZGUgbnVtYmVycyBmcm9tIHVuaXF1ZWlkIGZyb20gc2VydmVyICovCiAjZGVmaW5lIENJRlNfTU9VTlRfRElSRUNUX0lPICAgIDggLyogZG8gbm90IHdyaXRlIG5vciByZWFkIHRocm91Z2ggcGFnZSBjYWNoZSAqLwogI2RlZmluZSBDSUZTX01PVU5UX05PX1hBVFRSICAweDEwIC8qIGlmIHNldCAtIGRpc2FibGUgeGF0dHIgc3VwcG9ydCAqLworI2RlZmluZSBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUiAweDIwIC8qIHJlbWFwIGlsbGVnYWwgY2hhcnMgaW4gZmlsZW5hbWVzICovCiAKIHN0cnVjdCBjaWZzX3NiX2luZm8gewogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CS8qIHByaW1hcnkgbW91bnQgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc191bmljb2RlLmMgYi9mcy9jaWZzL2NpZnNfdW5pY29kZS5jCmluZGV4IGExN2FkZjQuLjk5YTA5NmQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc191bmljb2RlLmMKKysrIGIvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYwpAQCAtNzYsOCArNzYsOCBAQAogCQkJCWNoYXJsZW4pKTsKIAkJCXRvW2ldID0gY3B1X3RvX2xlMTYoMHgwMDNmKTsJLyogYSBxdWVzdGlvbiBtYXJrICovCiAJCQljaGFybGVuID0gMTsKLQkJfQotCQl0b1tpXSA9IGNwdV90b19sZTE2KHRvW2ldKTsKKwkJfSBlbHNlIAorCQkJdG9baV0gPSBjcHVfdG9fbGUxNih0b1tpXSk7CiAKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwppbmRleCA3ODgyOWU3Li4xOTU5YzdjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKKysrIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCkBAIC01MCw3ICs1MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjaWZzX3NpZ25fc21iKHN0cnVjdCBzbWJfaGRyICogY2lmc19wZHUsIHN0cnVjdCBjaWZzU2VzSW5mbyAqIHNlcywKK2ludCBjaWZzX3NpZ25fc21iKHN0cnVjdCBzbWJfaGRyICogY2lmc19wZHUsIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKiBzZXJ2ZXIsCiAJX191MzIgKiBwZXhwZWN0ZWRfcmVzcG9uc2Vfc2VxdWVuY2VfbnVtYmVyKQogewogCWludCByYyA9IDA7CkBAIC01OSwyMSArNTksMjEgQEAKIAkvKiBCQiByZW1lbWJlciB0byBpbml0aWFsaXplIHNlcXVlbmNlIG51bWJlciBlbHNld2hlcmUgYW5kIGluaXRpYWxpemUgbWFjX3NpZ25pbmcga2V5IGVsc2V3aGVyZSBCQiAqLwogCS8qIEJCIHJlbWVtYmVyIHRvIGFkZCBjb2RlIHRvIHNhdmUgZXhwZWN0ZWQgc2VxdWVuY2UgbnVtYmVyIGluIG1pZFEgZW50cnkgQkIgKi8KIAotCWlmKChjaWZzX3BkdSA9PSBOVUxMKSB8fCAoc2VzID09IE5VTEwpKQorCWlmKChjaWZzX3BkdSA9PSBOVUxMKSB8fCAoc2VydmVyID09IE5VTEwpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmKChjaWZzX3BkdS0+RmxhZ3MyICYgU01CRkxHMl9TRUNVUklUWV9TSUdOQVRVUkUpID09IDApIAogCQlyZXR1cm4gcmM7CiAKIAlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQljaWZzX3BkdS0+U2lnbmF0dXJlLlNlcXVlbmNlLlNlcXVlbmNlTnVtYmVyID0gY3B1X3RvX2xlMzIoc2VzLT5zZXF1ZW5jZV9udW1iZXIpOworCWNpZnNfcGR1LT5TaWduYXR1cmUuU2VxdWVuY2UuU2VxdWVuY2VOdW1iZXIgPSBjcHVfdG9fbGUzMihzZXJ2ZXItPnNlcXVlbmNlX251bWJlcik7CiAJY2lmc19wZHUtPlNpZ25hdHVyZS5TZXF1ZW5jZS5SZXNlcnZlZCA9IDA7CiAJCi0JKnBleHBlY3RlZF9yZXNwb25zZV9zZXF1ZW5jZV9udW1iZXIgPSBzZXMtPnNlcXVlbmNlX251bWJlcisrOwotCXNlcy0+c2VxdWVuY2VfbnVtYmVyKys7CisJKnBleHBlY3RlZF9yZXNwb25zZV9zZXF1ZW5jZV9udW1iZXIgPSBzZXJ2ZXItPnNlcXVlbmNlX251bWJlcisrOworCXNlcnZlci0+c2VxdWVuY2VfbnVtYmVyKys7CiAJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAotCXJjID0gY2lmc19jYWxjdWxhdGVfc2lnbmF0dXJlKGNpZnNfcGR1LCBzZXMtPm1hY19zaWduaW5nX2tleSxzbWJfc2lnbmF0dXJlKTsKKwlyYyA9IGNpZnNfY2FsY3VsYXRlX3NpZ25hdHVyZShjaWZzX3BkdSwgc2VydmVyLT5tYWNfc2lnbmluZ19rZXksc21iX3NpZ25hdHVyZSk7CiAJaWYocmMpCiAJCW1lbXNldChjaWZzX3BkdS0+U2lnbmF0dXJlLlNlY3VyaXR5U2lnbmF0dXJlLCAwLCA4KTsKIAllbHNlCkBAIC0xOTAsNyArMTkwLDcgQEAKIAlobWFjX21kNV91cGRhdGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgdW5pY29kZV9idWYsCiAJCSh1c2VyX25hbWVfbGVuK2RvbV9uYW1lX2xlbikqMiwmY3R4KTsKIAotCWhtYWNfbWQ1X2ZpbmFsKHNlcy0+bWFjX3NpZ25pbmdfa2V5LCZjdHgpOworCWhtYWNfbWQ1X2ZpbmFsKHNlcy0+c2VydmVyLT5tYWNfc2lnbmluZ19rZXksJmN0eCk7CiAJa2ZyZWUodWNhc2VfYnVmKTsKIAlrZnJlZSh1bmljb2RlX2J1Zik7CiAJcmV0dXJuIDA7CkBAIC0yMDAsNyArMjAwLDcgQEAKIAlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgY29udGV4dDsKIAltZW1jcHkodjJfc2Vzc2lvbl9yZXNwb25zZSArIDgsIHNlcy0+c2VydmVyLT5jcnlwdEtleSw4KTsKIAkvKiBnZW5fYmxvYih2Ml9zZXNzaW9uX3Jlc3BvbnNlICsgMTYpOyAqLwotCWhtYWNfbWQ1X2luaXRfbGltS190b182NChzZXMtPm1hY19zaWduaW5nX2tleSwgMTYsICZjb250ZXh0KTsKKwlobWFjX21kNV9pbml0X2xpbUtfdG9fNjQoc2VzLT5zZXJ2ZXItPm1hY19zaWduaW5nX2tleSwgMTYsICZjb250ZXh0KTsKIAogCWhtYWNfbWQ1X3VwZGF0ZShzZXMtPnNlcnZlci0+Y3J5cHRLZXksOCwmY29udGV4dCk7CiAvKglobWFjX21kNV91cGRhdGUodjJfc2Vzc2lvbl9yZXNwb25zZSsxNiljbGllbnQgdGhpbmcsOCwmY29udGV4dCk7ICovIC8qIEJCIGZpeCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggNTA4MmZjZS4uOGNjMjNlNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC0xNjksNyArMTY5LDggQEAKIHN0YXRpYyBpbnQKIGNpZnNfc3RhdGZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrc3RhdGZzICpidWYpCiB7Ci0JaW50IHhpZCwgcmMgPSAtRU9QTk9UU1VQUDsKKwlpbnQgeGlkOyAKKwlpbnQgcmMgPSAtRU9QTk9UU1VQUDsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOwogCkBAIC0xODEsMzEgKzE4MiwzNCBAQAogCWJ1Zi0+Zl90eXBlID0gQ0lGU19NQUdJQ19OVU1CRVI7CiAKIAkvKiBpbnN0ZWFkIGNvdWxkIGdldCB0aGUgcmVhbCB2YWx1ZSB2aWEgU01CX1FVRVJZX0ZTX0FUVFJJQlVURV9JTkZPICovCi0JYnVmLT5mX25hbWVsZW4gPSBQQVRIX01BWDsJLyogUEFUSF9NQVggbWF5IGJlIHRvbyBsb25nIC0gaXQgd291bGQgcHJlc3VtYWJseQotCQkJCQkgICBiZSBsZW5ndGggb2YgdG90YWwgcGF0aCwgbm90ZSB0aGF0IHNvbWUgc2VydmVycyBtYXkgYmUgCi0JCQkJCSAgIGFibGUgdG8gc3VwcG9ydCBtb3JlIHRoYW4gdGhpcywgYnV0IGJlc3QgdG8gYmUgc2FmZQotCQkJCQkgICBzaW5jZSBXaW4yayBhbmQgb3RoZXJzIGNhbiBub3QgaGFuZGxlIHZlcnkgbG9uZyBmaWxlbmFtZXMgKi8KKwlidWYtPmZfbmFtZWxlbiA9IFBBVEhfTUFYOyAvKiBQQVRIX01BWCBtYXkgYmUgdG9vIGxvbmcgLSBpdCB3b3VsZCAKKwkJCQkgICAgICBwcmVzdW1hYmx5IGJlIHRvdGFsIHBhdGgsIGJ1dCBub3RlCisJCQkJICAgICAgdGhhdCBzb21lIHNlcnZlcnMgKGluY2x1ZGlubmcgU2FtYmEgMykKKwkJCQkgICAgICBoYXZlIGEgc2hvcnRlciBtYXhpbXVtIHBhdGggKi8KIAlidWYtPmZfZmlsZXMgPSAwOwkvKiB1bmRlZmluZWQgKi8KIAlidWYtPmZfZmZyZWUgPSAwOwkvKiB1bmxpbWl0ZWQgKi8KIAogI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAogLyogQkIgd2UgY291bGQgYWRkIGEgc2Vjb25kIGNoZWNrIGZvciBhIFFGUyBVbml4IGNhcGFiaWxpdHkgYml0ICovCi0gICAgaWYgKHBUY29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKQotCSAgICByYyA9IENJRlNTTUJRRlNQb3NpeEluZm8oeGlkLCBwVGNvbiwgYnVmLCBjaWZzX3NiLT5sb2NhbF9ubHMpOworLyogQkIgRklYTUUgY2hlY2sgQ0lGU19QT1NJWF9FWFRFTlNJT05TIFVuaXggY2FwIGZpcnN0IEZJWE1FIEJCICovCisgICAgaWYgKChwVGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkgJiYgKENJRlNfUE9TSVhfRVhURU5TSU9OUyAmCisJCQlsZTY0X3RvX2NwdShwVGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkpCisJICAgIHJjID0gQ0lGU1NNQlFGU1Bvc2l4SW5mbyh4aWQsIHBUY29uLCBidWYpOwogCiAgICAgLyogT25seSBuZWVkIHRvIGNhbGwgdGhlIG9sZCBRRlNJbmZvIGlmIGZhaWxlZAogICAgIG9uIG5ld2VyIG9uZSAqLwogICAgIGlmKHJjKQogI2VuZGlmIC8qIENJRlNfRVhQRVJJTUVOVEFMICovCi0JcmMgPSBDSUZTU01CUUZTSW5mbyh4aWQsIHBUY29uLCBidWYsIGNpZnNfc2ItPmxvY2FsX25scyk7CisJcmMgPSBDSUZTU01CUUZTSW5mbyh4aWQsIHBUY29uLCBidWYpOwogCiAJLyogICAgIAogCSAgIGludCBmX3R5cGU7CiAJICAgX19mc2lkX3QgZl9mc2lkOwogCSAgIGludCBmX25hbWVsZW47ICAqLwotCS8qIEJCIGdldCBmcm9tIGluZm8gcHV0IGluIHRjb24gc3RydWN0IGF0IG1vdW50IHRpbWUgd2l0aCBjYWxsIHRvIFFGU0F0dHJJbmZvICovCisJLyogQkIgZ2V0IGZyb20gaW5mbyBpbiB0Y29uIHN0cnVjdCBhdCBtb3VudCB0aW1lIGNhbGwgdG8gUUZTQXR0ckluZm8gKi8KIAlGcmVlWGlkKHhpZCk7Ci0JcmV0dXJuIDA7CQkvKiBhbHdheXMgcmV0dXJuIHN1Y2Nlc3M/IHdoYXQgaWYgdm9sdW1lIGlzIG5vIGxvbmdlciBhdmFpbGFibGU/ICovCisJcmV0dXJuIDA7CQkvKiBhbHdheXMgcmV0dXJuIHN1Y2Nlc3M/IHdoYXQgaWYgdm9sdW1lIGlzIG5vCisJCQkJICAgbG9uZ2VyIGF2YWlsYWJsZT8gKi8KIH0KIAogc3RhdGljIGludCBjaWZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICogaW5vZGUsIGludCBtYXNrLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKQEAgLTU1OSw2ICs1NjMsMTAgQEAKIAkuZmx1c2ggPSBjaWZzX2ZsdXNoLAogCS5tbWFwICA9IGNpZnNfZmlsZV9tbWFwLAogCS5zZW5kZmlsZSA9IGdlbmVyaWNfZmlsZV9zZW5kZmlsZSwKKyNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWAorCS5pb2N0bAk9IGNpZnNfaW9jdGwsCisjZW5kaWYgLyogQ09ORklHX0NJRlNfUE9TSVggKi8KKwogI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAogCS5yZWFkdiA9IGdlbmVyaWNfZmlsZV9yZWFkdiwKIAkud3JpdGV2ID0gZ2VuZXJpY19maWxlX3dyaXRldiwKQEAgLTU3OSw2ICs1ODcsMTAgQEAKIAkuZnN5bmMgPSBjaWZzX2ZzeW5jLAogCS5mbHVzaCA9IGNpZnNfZmx1c2gsCiAJLnNlbmRmaWxlID0gZ2VuZXJpY19maWxlX3NlbmRmaWxlLCAvKiBCQiByZW1vdmVtZSBCQiAqLworI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYCisJLmlvY3RsICA9IGNpZnNfaW9jdGwsCisjZW5kaWYgLyogQ09ORklHX0NJRlNfUE9TSVggKi8KKwogI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAogCS5kaXJfbm90aWZ5ID0gY2lmc19kaXJfbm90aWZ5LAogI2VuZGlmIC8qIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCAqLwpAQCAtNTkxLDYgKzYwMyw3IEBACiAjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCiAJLmRpcl9ub3RpZnkgPSBjaWZzX2Rpcl9ub3RpZnksCiAjZW5kaWYgLyogQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMICovCisgICAgICAgIC5pb2N0bCAgPSBjaWZzX2lvY3RsLAogfTsKIAogc3RhdGljIHZvaWQKQEAgLTgyMiw2ICs4MzUsNyBAQAogCQl9CiAJfSB3aGlsZSghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOwogCWNvbXBsZXRlX2FuZF9leGl0ICgmY2lmc19vcGxvY2tfZXhpdGVkLCAwKTsKKwlvcGxvY2tUaHJlYWQgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IF9faW5pdApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuaCBiL2ZzL2NpZnMvY2lmc2ZzLmgKaW5kZXggNDUxZjE4YS4uZDAwYjNiZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuaAorKysgYi9mcy9jaWZzL2NpZnNmcy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICAgZnMvY2lmcy9jaWZzZnMuaAogICoKLSAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMgorICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLCAyMDA1CiAgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCiAgKgogICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtOTEsOCArOTEsMTAgQEAKIAkJCWNvbnN0IGNoYXIgKnN5bW5hbWUpOwogZXh0ZXJuIGludAljaWZzX3JlbW92ZXhhdHRyKHN0cnVjdCBkZW50cnkgKiwgY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgCWNpZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwKLQkJCSBzaXplX3QsIGludCk7CisJCQlzaXplX3QsIGludCk7CiBleHRlcm4gc3NpemVfdAljaWZzX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKiwgY29uc3QgY2hhciAqLCB2b2lkICosIHNpemVfdCk7CiBleHRlcm4gc3NpemVfdAljaWZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgKiwgc2l6ZV90KTsKLSNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuMzEiCitleHRlcm4gaW50IGNpZnNfaW9jdGwgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGVwLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKyNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuMzQiCiAjZW5kaWYJCQkJLyogX0NJRlNGU19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNnbG9iLmggYi9mcy9jaWZzL2NpZnNnbG9iLmgKaW5kZXggNjlhZmYxYTcuLjgxYmFiYWIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogICBmcy9jaWZzL2NpZnNnbG9iLmgKICAqCi0gKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwMworICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDUKICAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKICAqCiAgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xNDksNiArMTQ5LDggQEAKIAlfX3UxNiB0aW1lWm9uZTsKIAljaGFyIGNyeXB0S2V5W0NJRlNfQ1JZUFRPX0tFWV9TSVpFXTsKIAljaGFyIHdvcmtzdGF0aW9uX1JGQzEwMDFfbmFtZVsxNl07IC8qIDE2dGggYnl0ZSBpcyBhbHdheXMgemVybyAqLworCV9fdTMyIHNlcXVlbmNlX251bWJlcjsgLyogbmVlZGVkIGZvciBDSUZTIFBEVSBzaWduYXR1cmUgKi8KKwljaGFyIG1hY19zaWduaW5nX2tleVtDSUZTX1NFU1NJT05fS0VZX1NJWkUgKyAxNl07IAogfTsKIAogLyoKQEAgLTE3NCwxNyArMTc2LDE2IEBACiAJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyOwkvKiBwb2ludGVyIHRvIHNlcnZlciBpbmZvICovCiAJYXRvbWljX3QgaW5Vc2U7IC8qICMgb2YgbW91bnRzICh0cmVlIGNvbm5lY3Rpb25zKSBvbiB0aGlzIHNlcyAqLwogCWVudW0gc3RhdHVzRW51bSBzdGF0dXM7Ci0JX191MzIgc2VxdWVuY2VfbnVtYmVyOyAgLyogbmVlZGVkIGZvciBDSUZTIFBEVSBzaWduYXR1cmUgKi8KIAlfX3UxNiBpcGNfdGlkOwkJLyogc3BlY2lhbCB0aWQgZm9yIGNvbm5lY3Rpb24gdG8gSVBDIHNoYXJlICovCiAJX191MTYgZmxhZ3M7Ci0JY2hhciBtYWNfc2lnbmluZ19rZXlbQ0lGU19TRVNTSU9OX0tFWV9TSVpFICsgMTZdOwkKLQljaGFyICpzZXJ2ZXJPUzsJCS8qIG5hbWUgb2Ygb3BlcmF0aW5nIHN5c3RlbSB1bmRlcmx5aW5nIHRoZSBzZXJ2ZXIgKi8KLQljaGFyICpzZXJ2ZXJOT1M7CS8qIG5hbWUgb2YgbmV0d29yayBvcGVyYXRpbmcgc3lzdGVtIHRoYXQgdGhlIHNlcnZlciBpcyBydW5uaW5nICovCisJY2hhciAqc2VydmVyT1M7CQkvKiBuYW1lIG9mIG9wZXJhdGluZyBzeXN0ZW0gdW5kZXJseWluZyBzZXJ2ZXIgKi8KKwljaGFyICpzZXJ2ZXJOT1M7CS8qIG5hbWUgb2YgbmV0d29yayBvcGVyYXRpbmcgc3lzdGVtIG9mIHNlcnZlciAqLwogCWNoYXIgKnNlcnZlckRvbWFpbjsJLyogc2VjdXJpdHkgcmVhbG0gb2Ygc2VydmVyICovCiAJaW50IFN1aWQ7CQkvKiByZW1vdGUgc21iIHVpZCAgKi8KIAl1aWRfdCBsaW51eF91aWQ7ICAgICAgICAvKiBsb2NhbCBMaW51eCB1aWQgKi8KIAlpbnQgY2FwYWJpbGl0aWVzOwotCWNoYXIgc2VydmVyTmFtZVtTRVJWRVJfTkFNRV9MRU5fV0lUSF9OVUxMICogMl07CS8qIEJCIG1ha2UgYmlnZ2VyIGZvciB0Y3AgbmFtZXMgLSB3aWxsIGlwdjYgYW5kIHNjdHAgYWRkcmVzc2VzIGZpdCBoZXJlPz8gKi8KKwljaGFyIHNlcnZlck5hbWVbU0VSVkVSX05BTUVfTEVOX1dJVEhfTlVMTCAqIDJdOwkvKiBCQiBtYWtlIGJpZ2dlciBmb3IgCisJCQkJVENQIG5hbWVzIC0gd2lsbCBpcHY2IGFuZCBzY3RwIGFkZHJlc3NlcyBmaXQ/ICovCiAJY2hhciB1c2VyTmFtZVtNQVhfVVNFUk5BTUVfU0laRSArIDFdOwogCWNoYXIgZG9tYWluTmFtZVtNQVhfVVNFUk5BTUVfU0laRSArIDFdOwogCWNoYXIgKiBwYXNzd29yZDsKQEAgLTMxMiwxMiArMzEzLDE1IEBACiAJX191MTYgbWlkOwkJLyogbXVsdGlwbGV4IGlkICovCiAJX191MTYgcGlkOwkJLyogcHJvY2VzcyBpZCAqLwogCV9fdTMyIHNlcXVlbmNlX251bWJlcjsgIC8qIGZvciBDSUZTIHNpZ25pbmcgKi8KLQlfX3UxNiBjb21tYW5kOwkJLyogc21iIGNvbW1hbmQgY29kZSAqLwogCXN0cnVjdCB0aW1ldmFsIHdoZW5fc2VudDsJLyogdGltZSB3aGVuIHNtYiBzZW50ICovCiAJc3RydWN0IGNpZnNTZXNJbmZvICpzZXM7CS8qIHNtYiB3YXMgc2VudCB0byB0aGlzIHNlcnZlciAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwkvKiB0YXNrIHdhaXRpbmcgZm9yIHJlc3BvbnNlICovCiAJc3RydWN0IHNtYl9oZHIgKnJlc3BfYnVmOwkvKiByZXNwb25zZSBidWZmZXIgKi8KIAlpbnQgbWlkU3RhdGU7CS8qIHdpc2ggdGhpcyB3ZXJlIGVudW0gYnV0IGNhbiBub3QgcGFzcyB0byB3YWl0X2V2ZW50ICovCisJX191OCBjb21tYW5kOwkvKiBzbWIgY29tbWFuZCBjb2RlICovCisJdW5zaWduZWQgbXVsdGlQYXJ0OjE7CS8qIG11bHRpcGxlIHJlc3BvbnNlcyB0byBvbmUgU01CIHJlcXVlc3QgKi8KKwl1bnNpZ25lZCBsYXJnZUJ1ZjoxOyAgICAvKiBpZiB2YWxpZCByZXNwb25zZSwgaXMgcG9pbnRlciB0byBsYXJnZSBidWYgKi8KKwl1bnNpZ25lZCBtdWx0aVJlc3A6MTsgICAvKiBtdWx0aXBsZSB0cmFuczIgcmVzcG9uc2VzIGZvciBvbmUgcmVxdWVzdCAgKi8KIH07CiAKIHN0cnVjdCBvcGxvY2tfcV9lbnRyeSB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwZHUuaCBiL2ZzL2NpZnMvY2lmc3BkdS5oCmluZGV4IGJjZDRhNjEuLmFlZGU2YTggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3BkdS5oCisrKyBiL2ZzL2NpZnMvY2lmc3BkdS5oCkBAIC0zMzAsNyArMzMwLDcgQEAKIH07CiAvKiBnaXZlbiBhIHBvaW50ZXIgdG8gYW4gc21iX2hkciByZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYnl0ZSBjb3VudCAqLwogI2RlZmluZSBCQ0Moc21iX3ZhcikgKCAqKF9fdTE2ICopKChjaGFyICopc21iX3ZhciArIHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgKyAoMiogc21iX3Zhci0+V29yZENvdW50KSApICkKLQorI2RlZmluZSBCQ0NfTEUoc21iX3ZhcikgKCAqKF9fbGUxNiAqKSgoY2hhciAqKXNtYl92YXIgKyBzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgKDIqIHNtYl92YXItPldvcmRDb3VudCkgKSApCiAvKiBnaXZlbiBhIHBvaW50ZXIgdG8gYW4gc21iX2hkciByZXRyaWV2ZSB0aGUgcG9pbnRlciB0byB0aGUgYnl0ZSBhcmVhICovCiAjZGVmaW5lIHBCeXRlQXJlYShzbWJfdmFyKSAoKHVuc2lnbmVkIGNoYXIgKilzbWJfdmFyICsgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSArICgyKiBzbWJfdmFyLT5Xb3JkQ291bnQpICsgMiApCiAKQEAgLTc2Miw2ICs3NjIsMTYgQEAKIAlMT0NLSU5HX0FORFhfUkFOR0UgTG9ja3NbMV07CiB9IExPQ0tfUkVROwogCisKK3R5cGVkZWYgc3RydWN0IGNpZnNfcG9zaXhfbG9jayB7CisJX19sZTE2ICBsb2NrX3R5cGU7ICAvKiAwID0gUmVhZCwgMSA9IFdyaXRlLCAyID0gVW5sb2NrICovCisJX19sZTE2ICBsb2NrX2ZsYWdzOyAvKiAxID0gV2FpdCAob25seSB2YWxpZCBmb3Igc2V0bG9jaykgKi8KKwlfX2xlMzIgIHBpZDsKKwlfX2xlNjQJc3RhcnQ7CisJX19sZTY0CWxlbmd0aDsKKwkvKiBCQiB3aGF0IGFib3V0IGFkZGl0aW9uYWwgb3duZXIgaW5mbyB0byBpZGVudGlmeSBuZXR3b3JrIGNsaWVudCAqLworfSBDSUZTX1BPU0lYX0xPQ0s7CisKIHR5cGVkZWYgc3RydWN0IHNtYl9jb21fbG9ja19yc3AgewogCXN0cnVjdCBzbWJfaGRyIGhkcjsJLyogd2N0ID0gMiAqLwogCV9fdTggQW5kWENvbW1hbmQ7CkBAIC0xMDk4LDYgKzExMDgsOCBAQAogI2RlZmluZSBTTUJfUVVFUllfUE9TSVhfQUNMICAgICAgICAgICAgIDB4MjA0CiAjZGVmaW5lIFNNQl9RVUVSWV9YQVRUUiAgICAgICAgICAgICAgICAgMHgyMDUKICNkZWZpbmUgU01CX1FVRVJZX0FUVFJfRkxBR1MgICAgICAgICAgICAweDIwNiAgLyogYXBwZW5kLGltbXV0YWJsZSBldGMuICovCisjZGVmaW5lIFNNQl9RVUVSWV9QT1NJWF9QRVJNSVNTSU9OICAgICAgMHgyMDcKKyNkZWZpbmUgU01CX1FVRVJZX1BPU0lYX0xPQ0sgICAgICAgICAgICAweDIwOAogI2RlZmluZSBTTUJfUVVFUllfRklMRV9JTlRFUk5BTF9JTkZPICAgIDB4M2VlCiAjZGVmaW5lIFNNQl9RVUVSWV9GSUxFX0FDQ0VTU19JTkZPICAgICAgMHgzZjAKICNkZWZpbmUgU01CX1FVRVJZX0ZJTEVfTkFNRV9JTkZPMiAgICAgICAweDNmMSAvKiAweDMwIGJ5dGVzICovCkBAIC0xMTE2LDYgKzExMjgsNyBAQAogI2RlZmluZSBTTUJfU0VUX1BPU0lYX0FDTCAgICAgICAgICAgICAgIDB4MjA0CiAjZGVmaW5lIFNNQl9TRVRfWEFUVFIgICAgICAgICAgICAgICAgICAgMHgyMDUKICNkZWZpbmUgU01CX1NFVF9BVFRSX0ZMQUdTICAgICAgICAgICAgICAweDIwNiAgLyogYXBwZW5kLCBpbW11dGFibGUgZXRjLiAqLworI2RlZmluZSBTTUJfU0VUX1BPU0lYX0xPQ0sgICAgICAgICAgICAgIDB4MjA4CiAjZGVmaW5lIFNNQl9TRVRfRklMRV9CQVNJQ19JTkZPMiAgICAgICAgMHgzZWMKICNkZWZpbmUgU01CX1NFVF9GSUxFX1JFTkFNRV9JTkZPUk1BVElPTiAweDNmMiAvKiBCQiBjaGVjayBpZiBxcGF0aGluZm8gbGV2ZWwgdG9vICovCiAjZGVmaW5lIFNNQl9GSUxFX0FMTF9JTkZPMiAgICAgICAgICAgICAgMHgzZmEKQEAgLTEyMzcsOSArMTI1MCwyNSBAQAogCXN0cnVjdCBzbWJfaGRyIGhkcjsJLyogd2N0ID0gMTAgKyBTZXR1cENvdW50ICovCiAJc3RydWN0IHRyYW5zMl9yZXNwIHQyOwogCV9fdTE2IEJ5dGVDb3VudDsKLQlfX3UxNiBSZXNlcnZlZDI7CS8qIHBhcmFtZXRlciB3b3JkIHJlc2VydmVkIC0gcHJlc2VudCBmb3IgaW5mb2xldmVscyA+IDEwMCAqLworCV9fdTE2IFJlc2VydmVkMjsJLyogcGFyYW1ldGVyIHdvcmQgcmVzZXJ2ZWQgLSAKKwkJCQkJcHJlc2VudCBmb3IgaW5mb2xldmVscyA+IDEwMCAqLwogfTsKIAorc3RydWN0IHNtYl90Ml9xZmlfcmVxIHsKKyAgICAgICAgc3RydWN0CXNtYl9oZHIgaGRyOworICAgICAgICBzdHJ1Y3QJdHJhbnMyX3JlcSB0MjsKKwlfX3U4CVBhZDsKKwlfX3UxNglGaWQ7CisJX19sZTE2CUluZm9ybWF0aW9uTGV2ZWw7Cit9OworCitzdHJ1Y3Qgc21iX3QyX3FmaV9yc3AgeworICAgICAgICBzdHJ1Y3Qgc21iX2hkciBoZHI7ICAgICAvKiB3Y3QgPSAxMCArIFNldHVwQ291bnQgKi8KKyAgICAgICAgc3RydWN0IHRyYW5zMl9yZXNwIHQyOworICAgICAgICBfX3UxNiBCeXRlQ291bnQ7CisgICAgICAgIF9fdTE2IFJlc2VydmVkMjsgICAgICAgIC8qIHBhcmFtZXRlciB3b3JkIHJlc2VydmVkIC0gCisJCQkJCXByZXNlbnQgZm9yIGluZm9sZXZlbHMgPiAxMDAgKi8KK307CiAKIC8qCiAgKiBGbGFncyBvbiBUMiBGSU5ERklSU1QgYW5kIEZJTkRORVhUIApAQCAtMTUyNCw5ICsxNTUzLDEwIEBACiB9IEZJTEVfU1lTVEVNX1VOSVhfSU5GTzsJLyogVW5peCBleHRlbnNpb25zIGluZm8sIGxldmVsIDB4MjAwICovCiAvKiBMaW51eC9Vbml4IGV4dGVuc2lvbnMgY2FwYWJpbGl0eSBmbGFncyAqLwogI2RlZmluZSBDSUZTX1VOSVhfRkNOVExfQ0FQICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogc3VwcG9ydCBmb3IgZmNudGwgbG9ja3MgKi8KLSNkZWZpbmUgQ0lGU19VTklYX1BPU0lYX0FDTF9DQVAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIENJRlNfVU5JWF9YQVRUUl9DQVAgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKnN1cHBvcnQgZm9yIG5ldyBuYW1lc3BhY2UqLwotCisjZGVmaW5lIENJRlNfVU5JWF9QT1NJWF9BQ0xfQ0FQICAgICAgICAgMHgwMDAwMDAwMiAvKiBzdXBwb3J0IGdldGZhY2wvc2V0ZmFjbCAqLworI2RlZmluZSBDSUZTX1VOSVhfWEFUVFJfQ0FQICAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogc3VwcG9ydCBuZXcgbmFtZXNwYWNlICAgKi8KKyNkZWZpbmUgQ0lGU19VTklYX0VYVEFUVFJfQ0FQICAgICAgICAgICAweDAwMDAwMDA4IC8qIHN1cHBvcnQgY2hhdHRyL2NoZmxhZyAgICovCisjZGVmaW5lIENJRlNfUE9TSVhfRVhURU5TSU9OUyAgICAgICAgICAgMHgwMDAwMDAxMCAvKiBzdXBwb3J0IGZvciBuZXcgUUZTSW5mbyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCS8qIEZvciB1bmRlZmluZWQgcmVjb21tZW5kZWQgdHJhbnNmZXIgc2l6ZSByZXR1cm4gLTEgaW4gdGhhdCBmaWVsZCAqLwogCV9fbGUzMiBPcHRpbWFsVHJhbnNmZXJTaXplOyAgLyogYnNpemUgb24gc29tZSBvcywgaW9zaXplIG9uIG90aGVyIG9zICovCkBAIC0xOTcxLDE1ICsyMDAxLDQwIEBACiAJY2hhciBwYXRoWzEwMjRdOyAgCiB9OwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBmaWxlX3hhdHRyX2luZm8gewogCS8qIEJCIGRvIHdlIG5lZWQgYW5vdGhlciBmaWVsZCBmb3IgZmxhZ3M/IEJCICovCiAJX191MzIgeGF0dHJfbmFtZV9sZW47CiAJX191MzIgeGF0dHJfdmFsdWVfbGVuOwogCWNoYXIgIHhhdHRyX25hbWVbMF07CiAJLyogZm9sbG93ZWQgYnkgeGF0dHJfdmFsdWVbeGF0dHJfdmFsdWVfbGVuXSwgbm8gcGFkICovCi19IEZJTEVfWEFUVFJfSU5GTzsJLyogZXh0ZW5kZWQgYXR0cmlidXRlLCBpbmZvIGxldmVsIDIwNSAqLworfSBGSUxFX1hBVFRSX0lORk87CS8qIGV4dGVuZGVkIGF0dHJpYnV0ZSwgaW5mbyBsZXZlbCAweDIwNSAqLwogCiAKKy8qIGZsYWdzIGZvciBjaGF0dHIgY29tbWFuZCAqLworI2RlZmluZSBFWFRfU0VDVVJFX0RFTEVURQkJMHgwMDAwMDAwMSAvKiBFWFQzX1NFQ1JNX0ZMICovCisjZGVmaW5lIEVYVF9FTkFCTEVfVU5ERUxFVEUJCTB4MDAwMDAwMDIgLyogRVhUM19VTlJNX0ZMICovCisvKiBSZXNlcnZlZCBmb3IgY29tcHJlc3MgZmlsZSAweDQgKi8KKyNkZWZpbmUgRVhUX1NZTkNIUk9OT1VTCQkJMHgwMDAwMDAwOCAvKiBFWFQzX1NZTkNfRkwgKi8KKyNkZWZpbmUgRVhUX0lNTVVUQUJMRV9GTAkJMHgwMDAwMDAxMCAvKiBFWFQzX0lNTVVUQUJMRV9GTCAqLworI2RlZmluZSBFWFRfT1BFTl9BUFBFTkRfT05MWQkJMHgwMDAwMDAyMCAvKiBFWFQzX0FQUEVORF9GTCAqLworI2RlZmluZSBFWFRfRE9fTk9UX0JBQ0tVUAkJMHgwMDAwMDA0MCAvKiBFWFQzX05PRFVNUF9GTCAqLworI2RlZmluZSBFWFRfTk9fVVBEQVRFX0FUSU1FCQkweDAwMDAwMDgwIC8qIEVYVDNfTk9BVElNRV9GTCAqLworLyogMHgxMDAgdGhyb3VnaCAweDgwMCByZXNlcnZlZCBmb3IgY29tcHJlc3Npb24gZmxhZ3MgYW5kIGFyZSBHRVQtT05MWSAqLworI2RlZmluZSBFWFRfSEFTSF9UUkVFX0lOREVYRURfRElSCTB4MDAwMDEwMDAgLyogR0VULU9OTFkgRVhUM19JTkRFWF9GTCAqLworLyogMHgyMDAwIHJlc2VydmVkIGZvciBJTUFHSUNfRkwgKi8KKyNkZWZpbmUgRVhUX0pPVVJOQUxfVEhJU19GSUxFCTB4MDAwMDQwMDAgLyogR0VULU9OTFkgRVhUM19KT1VSTkFMX0RBVEFfRkwgKi8KKy8qIDB4ODAwMCByZXNlcnZlZCBmb3IgRVhUM19OT1RBSUxfRkwgKi8KKyNkZWZpbmUgRVhUX1NZTkNIUk9OT1VTX0RJUgkJMHgwMDAxMDAwMCAvKiBFWFQzX0RJUlNZTkNfRkwgKi8KKyNkZWZpbmUgRVhUX1RPUERJUgkJCTB4MDAwMjAwMDAgLyogRVhUM19UT1BESVJfRkwgKi8KKworI2RlZmluZSBFWFRfU0VUX01BU0sJCQkweDAwMDMwMEZGCisjZGVmaW5lIEVYVF9HRVRfTUFTSwkJCTB4MDAwM0RGRkYKKwordHlwZWRlZiBzdHJ1Y3QgZmlsZV9jaGF0dHJfaW5mbyB7CisJX19sZTY0CW1hc2s7IC8qIGxpc3Qgb2YgYWxsIHBvc3NpYmxlIGF0dHJpYnV0ZSBiaXRzICovCisJX19sZTY0CW1vZGU7IC8qIGxpc3Qgb2YgYWN0dWFsIGF0dHJpYnV0ZSBiaXRzIG9uIHRoaXMgaW5vZGUgKi8KK30gRklMRV9DSEFUVFJfSU5GTzsgIC8qIGV4dCBhdHRyaWJ1dGVzIChjaGF0dHIsIGNoZmxhZ3MpIGxldmVsIDB4MjA2ICovCisKICNlbmRpZiAKIAogI3ByYWdtYSBwYWNrKCkJCQkvKiByZXN1bWUgZGVmYXVsdCBzdHJ1Y3R1cmUgcGFja2luZyAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggNzg3ZWVmNC4uMDAxMDUxMSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC01NywxMCArNTcsMTEgQEAKIGV4dGVybiBpbnQgY2lmc19pbmV0X3B0b24oaW50LCBjaGFyICogc291cmNlLCB2b2lkICpkc3QpOwogZXh0ZXJuIGludCBtYXBfc21iX3RvX2xpbnV4X2Vycm9yKHN0cnVjdCBzbWJfaGRyICpzbWIpOwogZXh0ZXJuIHZvaWQgaGVhZGVyX2Fzc2VtYmxlKHN0cnVjdCBzbWJfaGRyICosIGNoYXIgLyogY29tbWFuZCAqLyAsCi0JCQljb25zdCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICosIGludAotCQkJLyogbGVuZ3RoIG9mIGZpeGVkIHNlY3Rpb24gKHdvcmQgY291bnQpIGluIHR3byBieXRlIHVuaXRzICAqLworCQkJY29uc3Qgc3RydWN0IGNpZnNUY29uSW5mbyAqLCBpbnQgLyogc3BlY2lmaWVzIGxlbmd0aAorCQkJICAgIG9mIGZpeGVkIHNlY3Rpb24gKHdvcmQgY291bnQpIGluIHR3byBieXRlIHVuaXRzICovCiAJCQkpOwotZXh0ZXJuIHN0cnVjdCBvcGxvY2tfcV9lbnRyeSAqIEFsbG9jT3Bsb2NrUUVudHJ5KHN0cnVjdCBpbm9kZSAqLCB1MTYsIHN0cnVjdCBjaWZzVGNvbkluZm8gKik7CitleHRlcm4gc3RydWN0IG9wbG9ja19xX2VudHJ5ICogQWxsb2NPcGxvY2tRRW50cnkoc3RydWN0IGlub2RlICosIHUxNiwgCisJCQkJCQkgc3RydWN0IGNpZnNUY29uSW5mbyAqKTsKIGV4dGVybiB2b2lkIERlbGV0ZU9wbG9ja1FFbnRyeShzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKik7CiBleHRlcm4gc3RydWN0IHRpbWVzcGVjIGNpZnNfTlR0aW1lVG9Vbml4KHU2NCAvKiB1dGMgbmFub3NlY29uZHMgc2luY2UgMTYwMSAqLyApOwogZXh0ZXJuIHU2NCBjaWZzX1VuaXhUaW1lVG9OVChzdHJ1Y3QgdGltZXNwZWMpOwpAQCAtODgsNyArODksNyBAQAogCiBleHRlcm4gaW50IENJRlNGaW5kRmlyc3QoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNlYXJjaE5hbWUsIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwKLSAgICAgICAgICAgIF9fdTE2ICpzZWFyY2hIYW5kbGUsIHN0cnVjdCBjaWZzX3NlYXJjaF9pbmZvICogcHNyY2hfaW5mKTsKKyAgICAgICAgICAgIF9fdTE2ICpzZWFyY2hIYW5kbGUsIHN0cnVjdCBjaWZzX3NlYXJjaF9pbmZvICogcHNyY2hfaW5mLCBpbnQgbWFwKTsKIAogZXh0ZXJuIGludCBDSUZTRmluZE5leHQoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKICAgICAgICAgICAgIF9fdTE2IHNlYXJjaEhhbmRsZSwgc3RydWN0IGNpZnNfc2VhcmNoX2luZm8gKiBwc3JjaF9pbmYpOwpAQCAtOTksNDIgKzEwMCw0MiBAQAogZXh0ZXJuIGludCBDSUZTU01CUVBhdGhJbmZvKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWFyY2hOYW1lLAogCQkJRklMRV9BTExfSU5GTyAqIGZpbmREYXRhLAotCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKKwkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKTsKIAogZXh0ZXJuIGludCBDSUZTU01CVW5peFFQYXRoSW5mbyhjb25zdCBpbnQgeGlkLAogCQkJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsCiAJCQlGSUxFX1VOSVhfQkFTSUNfSU5GTyAqIHBGaW5kRGF0YSwKLQkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7CisJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCk7CiAKIGV4dGVybiBpbnQgQ0lGU0dldERGU1JlZmVyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwKIAkJCXVuc2lnbmVkIGNoYXIgKip0YXJnZXRVTkNzLAogCQkJdW5zaWduZWQgaW50ICpudW1iZXJfb2ZfVU5DX2luX2FycmF5LAotCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKKwkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKTsKIAogZXh0ZXJuIGludCBjb25uZWN0X3RvX2Rmc19wYXRoKGludCB4aWQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqcFNlc0luZm8sCiAJCQljb25zdCBjaGFyICpvbGRfcGF0aCwKLQkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7CisJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCk7CiBleHRlcm4gaW50IGdldF9kZnNfcGF0aChpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnBTZXNJbmZvLAotCQkJY29uc3QgY2hhciAqb2xkX3BhdGgsIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgCi0JCQl1bnNpZ25lZCBpbnQgKnBudW1fcmVmZXJyYWxzLCB1bnNpZ25lZCBjaGFyICoqIHByZWZlcnJhbHMpOworCQkJY29uc3QgY2hhciAqb2xkX3BhdGgsIAorCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLAorCQkJdW5zaWduZWQgaW50ICpwbnVtX3JlZmVycmFscywgCisJCQl1bnNpZ25lZCBjaGFyICoqIHByZWZlcnJhbHMsCisJCQlpbnQgcmVtYXApOwogZXh0ZXJuIGludCBDSUZTU01CUUZTSW5mbyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAotCQkJc3RydWN0IGtzdGF0ZnMgKkZTRGF0YSwKLQkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7CisJCQlzdHJ1Y3Qga3N0YXRmcyAqRlNEYXRhKTsKIGV4dGVybiBpbnQgQ0lGU1NNQlFGU0F0dHJpYnV0ZUluZm8oY29uc3QgaW50IHhpZCwKLQkJCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCi0JCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpOwotZXh0ZXJuIGludCBDSUZTU01CUUZTRGV2aWNlSW5mbyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAotCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKLWV4dGVybiBpbnQgQ0lGU1NNQlFGU1VuaXhJbmZvKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCi0JCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpOworCQkJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbik7CitleHRlcm4gaW50IENJRlNTTUJRRlNEZXZpY2VJbmZvKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24pOworZXh0ZXJuIGludCBDSUZTU01CUUZTVW5peEluZm8oY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbik7CiBleHRlcm4gaW50IENJRlNTTUJRRlNQb3NpeEluZm8oY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKLQkJCXN0cnVjdCBrc3RhdGZzICpGU0RhdGEsIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7CisJCQlzdHJ1Y3Qga3N0YXRmcyAqRlNEYXRhKTsKIAogZXh0ZXJuIGludCBDSUZTU01CU2V0VGltZXMoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IGNoYXIgKmZpbGVOYW1lLCBjb25zdCBGSUxFX0JBU0lDX0lORk8gKiBkYXRhLAotCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKKwkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwKKwkJCWludCByZW1hcF9zcGVjaWFsX2NoYXJzKTsKIGV4dGVybiBpbnQgQ0lGU1NNQlNldEZpbGVUaW1lcyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgRklMRV9CQVNJQ19JTkZPICogZGF0YSwgX191MTYgZmlkKTsKICNpZiAwCkBAIC0xNDMsMzYgKzE0NCw0OSBAQAogCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKICNlbmRpZiAvKiBwb3NzaWJseSB1bm5lZWRlZCBmdW5jdGlvbiAqLwogZXh0ZXJuIGludCBDSUZTU01CU2V0RU9GKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCi0JCQljb25zdCBjaGFyICpmaWxlTmFtZSwgX191NjQgc2l6ZSxpbnQgc2V0QWxsb2NhdGlvblNpemVGbGFnLAotCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKKwkJCWNvbnN0IGNoYXIgKmZpbGVOYW1lLCBfX3U2NCBzaXplLAorCQkJaW50IHNldEFsbG9jYXRpb25TaXplRmxhZywKKwkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwKKwkJCWludCByZW1hcF9zcGVjaWFsX2NoYXJzKTsKIGV4dGVybiBpbnQgQ0lGU1NNQlNldEZpbGVTaXplKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCi0JCQkgX191NjQgc2l6ZSwgX191MTYgZmlsZUhhbmRsZSxfX3UzMiBvcGVuZXJfcGlkLCBpbnQgQWxsb2NTaXplRmxhZyk7CisJCQkgX191NjQgc2l6ZSwgX191MTYgZmlsZUhhbmRsZSxfX3UzMiBvcGVuZXJfcGlkLCAKKwkJCWludCBBbGxvY1NpemVGbGFnKTsKIGV4dGVybiBpbnQgQ0lGU1NNQlVuaXhTZXRQZXJtcyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbiwKIAkJCWNoYXIgKmZ1bGxfcGF0aCwgX191NjQgbW9kZSwgX191NjQgdWlkLAotCQkJX191NjQgZ2lkLCBkZXZfdCBkZXYsIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7CisJCQlfX3U2NCBnaWQsIGRldl90IGRldiwgCisJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsCisJCQlpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiAKIGV4dGVybiBpbnQgQ0lGU1NNQk1rRGlyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBjaGFyICpuZXdOYW1lLAotCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKKwkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwKKwkJCWludCByZW1hcF9zcGVjaWFsX2NoYXJzKTsKIGV4dGVybiBpbnQgQ0lGU1NNQlJtRGlyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCi0JCQljb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpOworCQkJY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLAorCQkJaW50IHJlbWFwX3NwZWNpYWxfY2hhcnMpOwogCiBleHRlcm4gaW50IENJRlNTTUJEZWxGaWxlKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBjaGFyICpuYW1lLAotCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKKwkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwKKwkJCWludCByZW1hcF9zcGVjaWFsX2NoYXJzKTsKIGV4dGVybiBpbnQgQ0lGU1NNQlJlbmFtZShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgY2hhciAqZnJvbU5hbWUsIGNvbnN0IGNoYXIgKnRvTmFtZSwKLQkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7CisJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsCisJCQlpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiBleHRlcm4gaW50IENJRlNTTUJSZW5hbWVPcGVuRmlsZShjb25zdCBpbnQgeGlkLHN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uLAotCQkJaW50IG5ldGZpZCwgY2hhciAqIHRhcmdldF9uYW1lLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpOworCQkJaW50IG5ldGZpZCwgY2hhciAqIHRhcmdldF9uYW1lLCAKKwkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwKKwkJCWludCByZW1hcF9zcGVjaWFsX2NoYXJzKTsKIGV4dGVybiBpbnQgQ0lGU0NyZWF0ZUhhcmRMaW5rKGNvbnN0IGludCB4aWQsCiAJCQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgY2hhciAqZnJvbU5hbWUsIGNvbnN0IGNoYXIgKnRvTmFtZSwKLQkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7CisJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsCisJCQlpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiBleHRlcm4gaW50IENJRlNVbml4Q3JlYXRlSGFyZExpbmsoY29uc3QgaW50IHhpZCwKIAkJCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBjaGFyICpmcm9tTmFtZSwgY29uc3QgY2hhciAqdG9OYW1lLAotCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKKwkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgCisJCQlpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiBleHRlcm4gaW50IENJRlNVbml4Q3JlYXRlU3ltTGluayhjb25zdCBpbnQgeGlkLAogCQkJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IGNoYXIgKmZyb21OYW1lLCBjb25zdCBjaGFyICp0b05hbWUsCkBAIC0xOTIsNyArMjA2LDcgQEAKIAkJCWNvbnN0IGNoYXIgKmZpbGVOYW1lLCBjb25zdCBpbnQgZGlzcG9zaXRpb24sCiAJCQljb25zdCBpbnQgYWNjZXNzX2ZsYWdzLCBjb25zdCBpbnQgb21vZGUsCiAJCQlfX3UxNiAqIG5ldGZpZCwgaW50ICpwT3Bsb2NrLCBGSUxFX0FMTF9JTkZPICosCi0JCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpOworCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXApOwogZXh0ZXJuIGludCBDSUZTU01CQ2xvc2UoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IGludCBzbWJfZmlsZV9pZCk7CiAKQEAgLTIxMSw4ICsyMjUsMTMgQEAKIAkJCWNvbnN0IGNoYXIgX191c2VyICpidWYsY29uc3QgaW50IGxvbmdfb3ApOwogZXh0ZXJuIGludCBDSUZTR2V0U3J2SW5vZGVOdW1iZXIoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsIF9fdTY0ICogaW5vZGVfbnVtYmVyLAotCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKKwkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgCisJCQlpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiAjZW5kaWYgLyogQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMICovCitleHRlcm4gaW50IGNpZnNfY29udmVydFVDU3BhdGgoY2hhciAqdGFyZ2V0LCBjb25zdCBfX3UxNiAqc291cmNlLCBpbnQgbWF4bGVuLAorCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqIGNvZGVwYWdlKTsKK2V4dGVybiBpbnQgY2lmc0NvbnZlcnRUb1VDUyhfX2xlMTYgKiB0YXJnZXQsIGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50IG1heGxlbiwKKwkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKiBjcCwgaW50IG1hcENoYXJzKTsKIAogZXh0ZXJuIGludCBDSUZTU01CTG9jayhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgX191MTYgbmV0ZmlkLCBjb25zdCBfX3U2NCBsZW4sCkBAIC0yMzAsNyArMjQ5LDcgQEAKIAogZXh0ZXJuIGludCBjaWZzX3JlY29ubmVjdChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpOwogCi1leHRlcm4gaW50IGNpZnNfc2lnbl9zbWIoc3RydWN0IHNtYl9oZHIgKiwgc3RydWN0IGNpZnNTZXNJbmZvICosX191MzIgKik7CitleHRlcm4gaW50IGNpZnNfc2lnbl9zbWIoc3RydWN0IHNtYl9oZHIgKiwgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqLF9fdTMyICopOwogZXh0ZXJuIGludCBjaWZzX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IHNtYl9oZHIgKiwgY29uc3QgY2hhciAqIG1hY19rZXksCiAJX191MzIgZXhwZWN0ZWRfc2VxdWVuY2VfbnVtYmVyKTsKIGV4dGVybiBpbnQgY2lmc19jYWxjdWxhdGVfbWFjX2tleShjaGFyICoga2V5LGNvbnN0IGNoYXIgKiBybixjb25zdCBjaGFyICogcGFzcyk7CkBAIC0yNDEsMjkgKzI2MCwzMSBAQAogCQkJY29uc3QgY2hhciAqZnJvbU5hbWUsCiAJCQljb25zdCBfX3UxNiB0YXJnZXRfdGlkLAogCQkJY29uc3QgY2hhciAqdG9OYW1lLCBjb25zdCBpbnQgZmxhZ3MsCi0JCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpOworCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCAKKwkJCWludCByZW1hcF9zcGVjaWFsX2NoYXJzKTsKIGV4dGVybiBpbnQgQ0lGU1NNQk5vdGlmeShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLCAKLQkJCWNvbnN0IGludCBub3RpZnlfc3ViZGlycyxjb25zdCBfX3UxNiBuZXRmaWQsX191MzIgZmlsdGVyLAotCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKKwkJCWNvbnN0IGludCBub3RpZnlfc3ViZGlycyxjb25zdCBfX3UxNiBuZXRmaWQsCisJCQlfX3UzMiBmaWx0ZXIsIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7CiBleHRlcm4gc3NpemVfdCBDSUZTU01CUUFsbEVBcyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwgY2hhciAqIEVBRGF0YSwKLQkJCXNpemVfdCBidWZzaXplLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpOworCQkJc2l6ZV90IGJ1ZnNpemUsIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwKKwkJCWludCByZW1hcF9zcGVjaWFsX2NoYXJzKTsKIGV4dGVybiBzc2l6ZV90IENJRlNTTUJRdWVyeUVBKGNvbnN0IGludCB4aWQsc3RydWN0IGNpZnNUY29uSW5mbyAqIHRjb24sCiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBzZWFyY2hOYW1lLGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBlYV9uYW1lLAogCQl1bnNpZ25lZCBjaGFyICogZWFfdmFsdWUsIHNpemVfdCBidWZfc2l6ZSwgCi0JCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7CisJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwX3NwZWNpYWxfY2hhcnMpOwogZXh0ZXJuIGludCBDSUZTU01CU2V0RUEoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwgCiAJCWNvbnN0IGNoYXIgKmZpbGVOYW1lLCBjb25zdCBjaGFyICogZWFfbmFtZSwgCiAJCWNvbnN0IHZvaWQgKiBlYV92YWx1ZSwgY29uc3QgX191MTYgZWFfdmFsdWVfbGVuLCAKLQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKKwkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiBleHRlcm4gaW50IENJRlNTTUJHZXRQb3NpeEFDTChjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWFyY2hOYW1lLAogCQljaGFyICphY2xfaW5mLCBjb25zdCBpbnQgYnVmbGVuLGNvbnN0IGludCBhY2xfdHlwZSwKLQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKKwkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiBleHRlcm4gaW50IENJRlNTTUJTZXRQb3NpeEFDTChjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQljb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlTmFtZSwKIAkJY29uc3QgY2hhciAqbG9jYWxfYWNsLCBjb25zdCBpbnQgYnVmbGVuLCBjb25zdCBpbnQgYWNsX3R5cGUsCi0JCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7Ci1pbnQgY2lmc19pb2N0bCAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZXAsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKwkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CitleHRlcm4gaW50IENJRlNHZXRFeHRBdHRyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCisgICAgICAgICAgICAgICAgY29uc3QgaW50IG5ldGZpZCwgX191NjQgKiBwRXh0QXR0ckJpdHMsIF9fdTY0ICpwTWFzayk7CiAjZW5kaWYJCQkvKiBfQ0lGU1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggZGY2YTYxOS4uNzQxZmYwYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTc1LDcgKzc1LDggQEAKIAkJfQogCX0KIAl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCS8qIEJCIEFkZCBjYWxsIHRvIGludmFsaWRhdGVfaW5vZGVzKHNiKSBmb3IgYWxsIHN1cGVyYmxvY2tzIG1vdW50ZWQgdG8gdGhpcyB0Y29uICovCisJLyogQkIgQWRkIGNhbGwgdG8gaW52YWxpZGF0ZV9pbm9kZXMoc2IpIGZvciBhbGwgc3VwZXJibG9ja3MgbW91bnRlZAorCSAgIHRvIHRoaXMgdGNvbiAqLwogfQogCiAvKiBJZiB0aGUgcmV0dXJuIGNvZGUgaXMgemVybywgdGhpcyBmdW5jdGlvbiBtdXN0IGZpbGwgaW4gcmVxdWVzdF9idWYgcG9pbnRlciAqLwpAQCAtODksMTEgKzkwLDEyIEBACiAJICAgY2hlY2sgZm9yIHRjcCBhbmQgc21iIHNlc3Npb24gc3RhdHVzIGRvbmUgZGlmZmVyZW50bHkKIAkgICBmb3IgdGhvc2UgdGhyZWUgLSBpbiB0aGUgY2FsbGluZyByb3V0aW5lICovCiAJaWYodGNvbikgewotCQlpZigodGNvbi0+c2VzKSAmJiAodGNvbi0+c2VzLT5zZXJ2ZXIpKXsKKwkJaWYoKHRjb24tPnNlcykgJiYgKHRjb24tPnNlcy0+c3RhdHVzICE9IENpZnNFeGl0aW5nKSAmJgorCQkJCSAgKHRjb24tPnNlcy0+c2VydmVyKSl7CiAJCQlzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2U7CiAJCQkJLyogR2l2ZSBEZW11bHRpcGxleCB0aHJlYWQgdXAgdG8gMTAgc2Vjb25kcyB0byAKLQkJCQkJcmVjb25uZWN0LCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIGNpZnMgc29ja2V0Ci0JCQkJCXRpbWVvdXQgd2hpY2ggaXMgNyBzZWNvbmRzICovCisJCQkJICAgcmVjb25uZWN0LCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIGNpZnMgc29ja2V0CisJCQkJICAgdGltZW91dCB3aGljaCBpcyA3IHNlY29uZHMgKi8KIAkJCXdoaWxlKHRjb24tPnNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05lZWRSZWNvbm5lY3QpIHsKIAkJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh0Y29uLT5zZXMtPnNlcnZlci0+cmVzcG9uc2VfcSwKIAkJCQkJKHRjb24tPnNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0dvb2QpLCAxMCAqIEhaKTsKQEAgLTEwMyw4ICsxMDUsOSBAQAogCQkJCQkgICAodGNvbi0+c2VzLT5zdGF0dXMgPT0gQ2lmc0V4aXRpbmcpKSB7CiAJCQkJCQljRllJKDEsKCJnYXZlIHVwIHdhaXRpbmcgb24gcmVjb25uZWN0IGluIHNtYl9pbml0IikpOwogCQkJCQkJcmV0dXJuIC1FSE9TVERPV047Ci0JCQkJCX0gLyogZWxzZSAiaGFyZCIgbW91bnQgLSBrZWVwIHJldHJ5aW5nIHVudGlsIAotCQkJCQlwcm9jZXNzIGlzIGtpbGxlZCBvciBzZXJ2ZXIgY29tZXMgYmFjayB1cCAqLworCQkJCQl9IC8qIGVsc2UgImhhcmQiIG1vdW50IC0ga2VlcCByZXRyeWluZworCQkJCQkgICAgIHVudGlsIHByb2Nlc3MgaXMga2lsbGVkIG9yIHNlcnZlcgorCQkJCQkgICAgIGNvbWVzIGJhY2sgb24tbGluZSAqLwogCQkJCX0gZWxzZSAvKiBUQ1Agc2Vzc2lvbiBpcyByZWVzdGFibGlzaGVkIG5vdyAqLwogCQkJCQlicmVhazsKIAkJCQkgCkBAIC0xMTUsMjMgKzExOCwyNCBAQAogCQlzaW11bHRhbmVvdXNseSByZWNvbm5lY3QgdGhlIHNhbWUgU01CIHNlc3Npb24gKi8KIAkJCWRvd24oJnRjb24tPnNlcy0+c2VzU2VtKTsKIAkJCWlmKHRjb24tPnNlcy0+c3RhdHVzID09IENpZnNOZWVkUmVjb25uZWN0KQotCQkJCXJjID0gY2lmc19zZXR1cF9zZXNzaW9uKDAsIHRjb24tPnNlcywgbmxzX2NvZGVwYWdlKTsKKwkJCQlyYyA9IGNpZnNfc2V0dXBfc2Vzc2lvbigwLCB0Y29uLT5zZXMsIAorCQkJCQkJCW5sc19jb2RlcGFnZSk7CiAJCQlpZighcmMgJiYgKHRjb24tPnRpZFN0YXR1cyA9PSBDaWZzTmVlZFJlY29ubmVjdCkpIHsKIAkJCQltYXJrX29wZW5fZmlsZXNfaW52YWxpZCh0Y29uKTsKLQkJCQlyYyA9IENJRlNUQ29uKDAsIHRjb24tPnNlcywgdGNvbi0+dHJlZU5hbWUsIHRjb24sCi0JCQkJCW5sc19jb2RlcGFnZSk7CisJCQkJcmMgPSBDSUZTVENvbigwLCB0Y29uLT5zZXMsIHRjb24tPnRyZWVOYW1lLCB0Y29uCisJCQkJCSwgbmxzX2NvZGVwYWdlKTsKIAkJCQl1cCgmdGNvbi0+c2VzLT5zZXNTZW0pOwogCQkJCWlmKHJjID09IDApCiAJCQkJCWF0b21pY19pbmMoJnRjb25JbmZvUmVjb25uZWN0Q291bnQpOwogCiAJCQkJY0ZZSSgxLCAoInJlY29ubmVjdCB0Y29uIHJjID0gJWQiLCByYykpOwogCQkJCS8qIFJlbW92ZWQgY2FsbCB0byByZW9wZW4gb3BlbiBmaWxlcyBoZXJlIC0gCi0JCQkJCWl0IGlzIHNhZmVyIChhbmQgZmFzdGVyKSB0byByZW9wZW4gZmlsZXMKLQkJCQkJb25lIGF0IGEgdGltZSBhcyBuZWVkZWQgaW4gcmVhZCBhbmQgd3JpdGUgKi8KKwkJCQkgICBpdCBpcyBzYWZlciAoYW5kIGZhc3RlcikgdG8gcmVvcGVuIGZpbGVzCisJCQkJICAgb25lIGF0IGEgdGltZSBhcyBuZWVkZWQgaW4gcmVhZCBhbmQgd3JpdGUgKi8KIAogCQkJCS8qIENoZWNrIGlmIGhhbmRsZSBiYXNlZCBvcGVyYXRpb24gc28gd2UgCi0JCQkJCWtub3cgd2hldGhlciB3ZSBjYW4gY29udGludWUgb3Igbm90IHdpdGhvdXQKLQkJCQkJcmV0dXJuaW5nIHRvIGNhbGxlciB0byByZXNldCBmaWxlIGhhbmRsZSAqLworCQkJCSAgIGtub3cgd2hldGhlciB3ZSBjYW4gY29udGludWUgb3Igbm90IHdpdGhvdXQKKwkJCQkgICByZXR1cm5pbmcgdG8gY2FsbGVyIHRvIHJlc2V0IGZpbGUgaGFuZGxlICovCiAJCQkJc3dpdGNoKHNtYl9jb21tYW5kKSB7CiAJCQkJCWNhc2UgU01CX0NPTV9SRUFEX0FORFg6CiAJCQkJCWNhc2UgU01CX0NPTV9XUklURV9BTkRYOgpAQCAtMTgyLDIyICsxODYsMjUgQEAKIAkgICBjaGVjayBmb3IgdGNwIGFuZCBzbWIgc2Vzc2lvbiBzdGF0dXMgZG9uZSBkaWZmZXJlbnRseQogCSAgIGZvciB0aG9zZSB0aHJlZSAtIGluIHRoZSBjYWxsaW5nIHJvdXRpbmUgKi8KIAlpZih0Y29uKSB7Ci0JCWlmKCh0Y29uLT5zZXMpICYmICh0Y29uLT5zZXMtPnNlcnZlcikpeworCQlpZigodGNvbi0+c2VzKSAmJiAodGNvbi0+c2VzLT5zdGF0dXMgIT0gQ2lmc0V4aXRpbmcpICYmIAorCQkJCSAgKHRjb24tPnNlcy0+c2VydmVyKSl7CiAJCQlzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2U7Ci0JCQkJLyogR2l2ZSBEZW11bHRpcGxleCB0aHJlYWQgdXAgdG8gMTAgc2Vjb25kcyB0byAKLQkJCQkJcmVjb25uZWN0LCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIGNpZnMgc29ja2V0Ci0JCQkJCXRpbWVvdXQgd2hpY2ggaXMgNyBzZWNvbmRzICovCisJCQkJLyogR2l2ZSBEZW11bHRpcGxleCB0aHJlYWQgdXAgdG8gMTAgc2Vjb25kcyB0bworCQkJCSAgIHJlY29ubmVjdCwgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBjaWZzIHNvY2tldAorCQkJCSAgIHRpbWVvdXQgd2hpY2ggaXMgNyBzZWNvbmRzICovCiAJCQl3aGlsZSh0Y29uLT5zZXMtPnNlcnZlci0+dGNwU3RhdHVzID09IENpZnNOZWVkUmVjb25uZWN0KSB7CiAJCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQodGNvbi0+c2VzLT5zZXJ2ZXItPnJlc3BvbnNlX3EsCiAJCQkJCSh0Y29uLT5zZXMtPnNlcnZlci0+dGNwU3RhdHVzID09IENpZnNHb29kKSwgMTAgKiBIWik7Ci0JCQkJaWYodGNvbi0+c2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzTmVlZFJlY29ubmVjdCkgeworCQkJCWlmKHRjb24tPnNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gCisJCQkJCQlDaWZzTmVlZFJlY29ubmVjdCkgewogCQkJCQkvKiBvbiAic29mdCIgbW91bnRzIHdlIHdhaXQgb25jZSAqLwogCQkJCQlpZigodGNvbi0+cmV0cnkgPT0gRkFMU0UpIHx8IAogCQkJCQkgICAodGNvbi0+c2VzLT5zdGF0dXMgPT0gQ2lmc0V4aXRpbmcpKSB7CiAJCQkJCQljRllJKDEsKCJnYXZlIHVwIHdhaXRpbmcgb24gcmVjb25uZWN0IGluIHNtYl9pbml0IikpOwogCQkJCQkJcmV0dXJuIC1FSE9TVERPV047Ci0JCQkJCX0gLyogZWxzZSAiaGFyZCIgbW91bnQgLSBrZWVwIHJldHJ5aW5nIHVudGlsIAotCQkJCQlwcm9jZXNzIGlzIGtpbGxlZCBvciBzZXJ2ZXIgY29tZXMgYmFjayB1cCAqLworCQkJCQl9IC8qIGVsc2UgImhhcmQiIG1vdW50IC0ga2VlcCByZXRyeWluZworCQkJCQkgICAgIHVudGlsIHByb2Nlc3MgaXMga2lsbGVkIG9yIHNlcnZlcgorCQkJCQkgICAgIGNvbWVzIG9uLWxpbmUgKi8KIAkJCQl9IGVsc2UgLyogVENQIHNlc3Npb24gaXMgcmVlc3RhYmxpc2hlZCBub3cgKi8KIAkJCQkJYnJlYWs7CiAJCQkJIApAQCAtMjA4LDIzICsyMTUsMjQgQEAKIAkJc2ltdWx0YW5lb3VzbHkgcmVjb25uZWN0IHRoZSBzYW1lIFNNQiBzZXNzaW9uICovCiAJCQlkb3duKCZ0Y29uLT5zZXMtPnNlc1NlbSk7CiAJCQlpZih0Y29uLT5zZXMtPnN0YXR1cyA9PSBDaWZzTmVlZFJlY29ubmVjdCkKLQkJCQlyYyA9IGNpZnNfc2V0dXBfc2Vzc2lvbigwLCB0Y29uLT5zZXMsIG5sc19jb2RlcGFnZSk7CisJCQkJcmMgPSBjaWZzX3NldHVwX3Nlc3Npb24oMCwgdGNvbi0+c2VzLCAKKwkJCQkJCQlubHNfY29kZXBhZ2UpOwogCQkJaWYoIXJjICYmICh0Y29uLT50aWRTdGF0dXMgPT0gQ2lmc05lZWRSZWNvbm5lY3QpKSB7CiAJCQkJbWFya19vcGVuX2ZpbGVzX2ludmFsaWQodGNvbik7Ci0JCQkJcmMgPSBDSUZTVENvbigwLCB0Y29uLT5zZXMsIHRjb24tPnRyZWVOYW1lLCB0Y29uLAotCQkJCQlubHNfY29kZXBhZ2UpOworCQkJCXJjID0gQ0lGU1RDb24oMCwgdGNvbi0+c2VzLCB0Y29uLT50cmVlTmFtZSwKKwkJCQkJICAgICAgdGNvbiwgbmxzX2NvZGVwYWdlKTsKIAkJCQl1cCgmdGNvbi0+c2VzLT5zZXNTZW0pOwogCQkJCWlmKHJjID09IDApCiAJCQkJCWF0b21pY19pbmMoJnRjb25JbmZvUmVjb25uZWN0Q291bnQpOwogCiAJCQkJY0ZZSSgxLCAoInJlY29ubmVjdCB0Y29uIHJjID0gJWQiLCByYykpOwogCQkJCS8qIFJlbW92ZWQgY2FsbCB0byByZW9wZW4gb3BlbiBmaWxlcyBoZXJlIC0gCi0JCQkJCWl0IGlzIHNhZmVyIChhbmQgZmFzdGVyKSB0byByZW9wZW4gZmlsZXMKLQkJCQkJb25lIGF0IGEgdGltZSBhcyBuZWVkZWQgaW4gcmVhZCBhbmQgd3JpdGUgKi8KKwkJCQkgICBpdCBpcyBzYWZlciAoYW5kIGZhc3RlcikgdG8gcmVvcGVuIGZpbGVzCisJCQkJICAgb25lIGF0IGEgdGltZSBhcyBuZWVkZWQgaW4gcmVhZCBhbmQgd3JpdGUgKi8KIAogCQkJCS8qIENoZWNrIGlmIGhhbmRsZSBiYXNlZCBvcGVyYXRpb24gc28gd2UgCi0JCQkJCWtub3cgd2hldGhlciB3ZSBjYW4gY29udGludWUgb3Igbm90IHdpdGhvdXQKLQkJCQkJcmV0dXJuaW5nIHRvIGNhbGxlciB0byByZXNldCBmaWxlIGhhbmRsZSAqLworCQkJCSAgIGtub3cgd2hldGhlciB3ZSBjYW4gY29udGludWUgb3Igbm90IHdpdGhvdXQKKwkJCQkgICByZXR1cm5pbmcgdG8gY2FsbGVyIHRvIHJlc2V0IGZpbGUgaGFuZGxlICovCiAJCQkJc3dpdGNoKHNtYl9jb21tYW5kKSB7CiAJCQkJCWNhc2UgU01CX0NPTV9SRUFEX0FORFg6CiAJCQkJCWNhc2UgU01CX0NPTV9XUklURV9BTkRYOgpAQCAtMjg2LDcgKzI5NCw4IEBACiAJCQlpZih0b3RhbF9zaXplIDwgNTEyKSB7CiAJCQkJdG90YWxfc2l6ZSs9bGUxNl90b19jcHUocFNNQi0+dDJfcnNwLkRhdGFDb3VudCk7CiAJCQkJLyogQkNDIGxlIGNvbnZlcnRlZCBpbiBTZW5kUmVjZWl2ZSAqLwotCQkJCXBCQ0MgPSAocFNNQi0+aGRyLldvcmRDb3VudCAqIDIpICsgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSArIAorCQkJCXBCQ0MgPSAocFNNQi0+aGRyLldvcmRDb3VudCAqIDIpICsgCisJCQkJCXNpemVvZihzdHJ1Y3Qgc21iX2hkcikgKwogCQkJCQkoY2hhciAqKXBTTUI7CiAJCQkJaWYoKHRvdGFsX3NpemUgPD0gKCoodTE2ICopcEJDQykpICYmIAogCQkJCSAgICh0b3RhbF9zaXplIDwgCkBAIC0zMzcsOCArMzQ2LDEwIEBACiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwogCWlmIChyYyA9PSAwKSB7CiAJCXNlcnZlci0+c2VjTW9kZSA9IHBTTUJyLT5TZWN1cml0eU1vZGU7CQotCQlzZXJ2ZXItPnNlY1R5cGUgPSBOVExNOyAvKiBCQiBvdmVycmlkZSBkZWZhdWx0IGZvciBOVExNdjIgb3Iga3JiKi8KLQkJLyogb25lIGJ5dGUgLSBubyBuZWVkIHRvIGNvbnZlcnQgdGhpcyBvciBFbmNyeXB0aW9uS2V5TGVuIGZyb20gbGUsKi8KKwkJc2VydmVyLT5zZWNUeXBlID0gTlRMTTsgLyogQkIgb3ZlcnJpZGUgZGVmYXVsdCBmb3IgCisJCQkJCSAgIE5UTE12MiBvciBrZXJiZXJvcyB2NSAqLworCQkvKiBvbmUgYnl0ZSAtIG5vIG5lZWQgdG8gY29udmVydCB0aGlzIG9yIEVuY3J5cHRpb25LZXlMZW4KKwkJICAgZnJvbSBsaXR0bGUgZW5kaWFuICovCiAJCXNlcnZlci0+bWF4UmVxID0gbGUxNl90b19jcHUocFNNQnItPk1heE1weENvdW50KTsKIAkJLyogcHJvYmFibHkgbm8gbmVlZCB0byBzdG9yZSBhbmQgY2hlY2sgbWF4dmNzICovCiAJCXNlcnZlci0+bWF4QnVmID0KQEAgLTM3NCw3ICszODUsNyBAQAogCQkJCQkJcFNNQnItPnUuZXh0ZW5kZWRfcmVzcG9uc2UuCiAJCQkJCQlHVUlELCAxNikgIT0gMCkgewogCQkJCQkJY0ZZSSgxLAotCQkJCQkJCSgiVUlEIG9mIHNlcnZlciBkb2VzIG5vdCBtYXRjaCBwcmV2aW91cyBjb25uZWN0aW9uIHRvIHNhbWUgaXAgYWRkcmVzcyIpKTsKKwkJCQkJCSAgICAgKCJVSUQgb2Ygc2VydmVyIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzIGNvbm5lY3Rpb24gdG8gc2FtZSBpcCBhZGRyZXNzIikpOwogCQkJCQkJbWVtY3B5KHNlcnZlci0+CiAJCQkJCQkJc2VydmVyX0dVSUQsCiAJCQkJCQkJcFNNQnItPnUuCkBAIC00NTQsMTcgKzQ2NSwxOCBAQAogCQl1cCgmdGNvbi0+dGNvblNlbSk7CiAJCXJldHVybiAtRUlPOwogCX0KLQlyYyA9IHNtYWxsX3NtYl9pbml0KFNNQl9DT01fVFJFRV9ESVNDT05ORUNULCAwLCB0Y29uLCAodm9pZCAqKikmc21iX2J1ZmZlcik7CisJcmMgPSBzbWFsbF9zbWJfaW5pdChTTUJfQ09NX1RSRUVfRElTQ09OTkVDVCwgMCwgdGNvbiwgCisJCQkgICAgKHZvaWQgKiopJnNtYl9idWZmZXIpOwogCWlmIChyYykgewogCQl1cCgmdGNvbi0+dGNvblNlbSk7CiAJCXJldHVybiByYzsKIAl9IGVsc2UgewogCQlzbWJfYnVmZmVyX3Jlc3BvbnNlID0gc21iX2J1ZmZlcjsgLyogQkIgcmVtb3ZlbWUgQkIgKi8KLSAgICB9CisJfQogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIHNtYl9idWZmZXIsIHNtYl9idWZmZXJfcmVzcG9uc2UsCiAJCQkgJmxlbmd0aCwgMCk7CiAJaWYgKHJjKQotCQljRllJKDEsICgiIFRyZWUgZGlzY29ubmVjdCBmYWlsZWQgJWQiLCByYykpOworCQljRllJKDEsICgiVHJlZSBkaXNjb25uZWN0IGZhaWxlZCAlZCIsIHJjKSk7CiAKIAlpZiAoc21iX2J1ZmZlcikKIAkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShzbWJfYnVmZmVyKTsKQEAgLTUzOCw4ICs1NTAsOCBAQAogfQogCiBpbnQKLUNJRlNTTUJEZWxGaWxlKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCi0JICAgICAgIGNvbnN0IGNoYXIgKmZpbGVOYW1lLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCitDSUZTU01CRGVsRmlsZShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLCBjb25zdCBjaGFyICpmaWxlTmFtZSwKKwkgICAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXApCiB7CiAJREVMRVRFX0ZJTEVfUkVRICpwU01CID0gTlVMTDsKIAlERUxFVEVfRklMRV9SU1AgKnBTTUJyID0gTlVMTDsKQEAgLTU1NSwxMiArNTY3LDExIEBACiAKIAlpZiAocFNNQi0+aGRyLkZsYWdzMiAmIFNNQkZMRzJfVU5JQ09ERSkgewogCQluYW1lX2xlbiA9Ci0JCSAgICBjaWZzX3N0cnRvVUNTKCh3Y2hhcl90ICopIHBTTUItPmZpbGVOYW1lLCBmaWxlTmFtZSwgUEFUSF9NQVgKLQkJCQkgIC8qIGZpbmQgZGVmaW5lIGZvciB0aGlzIG1heHBhdGhjb21wb25lbnQgKi8KLQkJCQkgICwgbmxzX2NvZGVwYWdlKTsKKwkJICAgIGNpZnNDb252ZXJ0VG9VQ1MoKF9fdTE2ICopIHBTTUItPmZpbGVOYW1lLCBmaWxlTmFtZSwgCisJCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKLQl9IGVsc2UgewkJLyogQkIgaW1wcm92ZSB0aGUgY2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVucyBCQiAqLworCX0gZWxzZSB7CQkvKiBCQiBpbXByb3ZlIGNoZWNrIGZvciBidWZmZXIgb3ZlcnJ1bnMgQkIgKi8KIAkJbmFtZV9sZW4gPSBzdHJubGVuKGZpbGVOYW1lLCBQQVRIX01BWCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJc3RybmNweShwU01CLT5maWxlTmFtZSwgZmlsZU5hbWUsIG5hbWVfbGVuKTsKQEAgLTU4OSw4ICs2MDAsOCBAQAogfQogCiBpbnQKLUNJRlNTTUJSbURpcihjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAotCSAgICAgY29uc3QgY2hhciAqZGlyTmFtZSwgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKQorQ0lGU1NNQlJtRGlyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sIGNvbnN0IGNoYXIgKmRpck5hbWUsIAorCSAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXApCiB7CiAJREVMRVRFX0RJUkVDVE9SWV9SRVEgKnBTTUIgPSBOVUxMOwogCURFTEVURV9ESVJFQ1RPUllfUlNQICpwU01CciA9IE5VTEw7CkBAIC02MDYsMTIgKzYxNywxMSBAQAogCQlyZXR1cm4gcmM7CiAKIAlpZiAocFNNQi0+aGRyLkZsYWdzMiAmIFNNQkZMRzJfVU5JQ09ERSkgewotCQluYW1lX2xlbiA9IGNpZnNfc3RydG9VQ1MoKHdjaGFyX3QgKikgcFNNQi0+RGlyTmFtZSwgZGlyTmFtZSwgUEFUSF9NQVgKLQkJCQkvKiBmaW5kIGRlZmluZSBmb3IgdGhpcyBtYXhwYXRoY29tcG9uZW50ICovCi0JCQkJLCBubHNfY29kZXBhZ2UpOworCQluYW1lX2xlbiA9IGNpZnNDb252ZXJ0VG9VQ1MoKF9fbGUxNiAqKSBwU01CLT5EaXJOYW1lLCBkaXJOYW1lLAorCQkJCQkgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwogCQluYW1lX2xlbisrOwkvKiB0cmFpbGluZyBudWxsICovCiAJCW5hbWVfbGVuICo9IDI7Ci0JfSBlbHNlIHsJCS8qIEJCIGltcHJvdmUgdGhlIGNoZWNrIGZvciBidWZmZXIgb3ZlcnJ1bnMgQkIgKi8KKwl9IGVsc2UgewkJLyogQkIgaW1wcm92ZSBjaGVjayBmb3IgYnVmZmVyIG92ZXJydW5zIEJCICovCiAJCW5hbWVfbGVuID0gc3RybmxlbihkaXJOYW1lLCBQQVRIX01BWCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJc3RybmNweShwU01CLT5EaXJOYW1lLCBkaXJOYW1lLCBuYW1lX2xlbik7CkBAIC02MzksNyArNjQ5LDcgQEAKIAogaW50CiBDSUZTU01CTWtEaXIoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKLQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSkKKwkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQogewogCWludCByYyA9IDA7CiAJQ1JFQVRFX0RJUkVDVE9SWV9SRVEgKnBTTUIgPSBOVUxMOwpAQCAtNjU1LDEyICs2NjUsMTEgQEAKIAkJcmV0dXJuIHJjOwogCiAJaWYgKHBTTUItPmhkci5GbGFnczIgJiBTTUJGTEcyX1VOSUNPREUpIHsKLQkJbmFtZV9sZW4gPSBjaWZzX3N0cnRvVUNTKCh3Y2hhcl90ICopIHBTTUItPkRpck5hbWUsIG5hbWUsIFBBVEhfTUFYCi0JCQkJCSAvKiBmaW5kIGRlZmluZSBmb3IgdGhpcyBtYXhwYXRoY29tcG9uZW50ICovCi0JCQkJCSAsIG5sc19jb2RlcGFnZSk7CisJCW5hbWVfbGVuID0gY2lmc0NvbnZlcnRUb1VDUygoX191MTYgKikgcFNNQi0+RGlyTmFtZSwgbmFtZSwgCisJCQkJCSAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKLQl9IGVsc2UgewkJLyogQkIgaW1wcm92ZSB0aGUgY2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVucyBCQiAqLworCX0gZWxzZSB7CQkvKiBCQiBpbXByb3ZlIGNoZWNrIGZvciBidWZmZXIgb3ZlcnJ1bnMgQkIgKi8KIAkJbmFtZV9sZW4gPSBzdHJubGVuKG5hbWUsIFBBVEhfTUFYKTsKIAkJbmFtZV9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLwogCQlzdHJuY3B5KHBTTUItPkRpck5hbWUsIG5hbWUsIG5hbWVfbGVuKTsKQEAgLTY5MCw3ICs2OTksNyBAQAogCSAgICBjb25zdCBjaGFyICpmaWxlTmFtZSwgY29uc3QgaW50IG9wZW5EaXNwb3NpdGlvbiwKIAkgICAgY29uc3QgaW50IGFjY2Vzc19mbGFncywgY29uc3QgaW50IGNyZWF0ZV9vcHRpb25zLCBfX3UxNiAqIG5ldGZpZCwKIAkgICAgaW50ICpwT3Bsb2NrLCBGSUxFX0FMTF9JTkZPICogcGZpbGVfaW5mbywgCi0JICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSkKKwkgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXApCiB7CiAJaW50IHJjID0gLUVBQ0NFUzsKIAlPUEVOX1JFUSAqcFNNQiA9IE5VTEw7CkBAIC03MTAsMTQgKzcxOSwxMiBAQAogCWlmIChwU01CLT5oZHIuRmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7CiAJCWNvdW50ID0gMTsJLyogYWNjb3VudCBmb3Igb25lIGJ5dGUgcGFkIHRvIHdvcmQgYm91bmRhcnkgKi8KIAkJbmFtZV9sZW4gPQotCQkgICAgY2lmc19zdHJ0b1VDUygod2NoYXJfdCAqKSAocFNNQi0+ZmlsZU5hbWUgKyAxKSwKLQkJCQkgIGZpbGVOYW1lLCBQQVRIX01BWAotCQkJCSAgLyogZmluZCBkZWZpbmUgZm9yIHRoaXMgbWF4cGF0aGNvbXBvbmVudCAqLwotCQkJCSAgLCBubHNfY29kZXBhZ2UpOworCQkgICAgY2lmc0NvbnZlcnRUb1VDUygoX191MTYgKikgKHBTTUItPmZpbGVOYW1lICsgMSksCisJCQkJICAgICBmaWxlTmFtZSwgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwogCQluYW1lX2xlbisrOwkvKiB0cmFpbGluZyBudWxsICovCiAJCW5hbWVfbGVuICo9IDI7CiAJCXBTTUItPk5hbWVMZW5ndGggPSBjcHVfdG9fbGUxNihuYW1lX2xlbik7Ci0JfSBlbHNlIHsJCS8qIEJCIGltcHJvdmUgdGhlIGNoZWNrIGZvciBidWZmZXIgb3ZlcnJ1bnMgQkIgKi8KKwl9IGVsc2UgewkJLyogQkIgaW1wcm92ZSBjaGVjayBmb3IgYnVmZmVyIG92ZXJydW5zIEJCICovCiAJCWNvdW50ID0gMDsJLyogbm8gcGFkICovCiAJCW5hbWVfbGVuID0gc3RybmxlbihmaWxlTmFtZSwgUEFUSF9NQVgpOwogCQluYW1lX2xlbisrOwkvKiB0cmFpbGluZyBudWxsICovCkBAIC03NDYsNyArNzUzLDggQEAKIAlwU01CLT5TaGFyZUFjY2VzcyA9IGNwdV90b19sZTMyKEZJTEVfU0hBUkVfQUxMKTsKIAlwU01CLT5DcmVhdGVEaXNwb3NpdGlvbiA9IGNwdV90b19sZTMyKG9wZW5EaXNwb3NpdGlvbik7CiAJcFNNQi0+Q3JlYXRlT3B0aW9ucyA9IGNwdV90b19sZTMyKGNyZWF0ZV9vcHRpb25zKTsKLQlwU01CLT5JbXBlcnNvbmF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUzMihTRUNVUklUWV9JTVBFUlNPTkFUSU9OKTsJLyogQkIgPz8qLworCS8qIEJCIEV4cGlyZW1lbnQgd2l0aCB2YXJpb3VzIGltcGVyc29uYXRpb24gbGV2ZWxzIGFuZCB2ZXJpZnkgKi8KKwlwU01CLT5JbXBlcnNvbmF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUzMihTRUNVUklUWV9JTVBFUlNPTkFUSU9OKTsKIAlwU01CLT5TZWN1cml0eUZsYWdzID0KIAkgICAgU0VDVVJJVFlfQ09OVEVYVF9UUkFDS0lORyB8IFNFQ1VSSVRZX0VGRkVDVElWRV9PTkxZOwogCkBAIC03NjAsNyArNzY4LDcgQEAKIAlpZiAocmMpIHsKIAkJY0ZZSSgxLCAoIkVycm9yIGluIE9wZW4gPSAlZCIsIHJjKSk7CiAJfSBlbHNlIHsKLQkJKnBPcGxvY2sgPSBwU01Cci0+T3Bsb2NrTGV2ZWw7CS8qIG9uZSBieXRlIG5vIG5lZWQgdG8gbGVfdG9fY3B1ICovCisJCSpwT3Bsb2NrID0gcFNNQnItPk9wbG9ja0xldmVsOyAvKiAxIGJ5dGUgbm8gbmVlZCB0byBsZV90b19jcHUgKi8KIAkJKm5ldGZpZCA9IHBTTUJyLT5GaWQ7CS8qIGNpZnMgZmlkIHN0YXlzIGluIGxlICovCiAJCS8qIExldCBjYWxsZXIga25vdyBmaWxlIHdhcyBjcmVhdGVkIHNvIHdlIGNhbiBzZXQgdGhlIG1vZGUuICovCiAJCS8qIERvIHdlIGNhcmUgYWJvdXQgdGhlIENyZWF0ZUFjdGlvbiBpbiBhbnkgb3RoZXIgY2FzZXM/ICovCkBAIC0xMDE3LDExICsxMDI1LDEzIEBACiAJX191MTYgY291bnQ7CiAKIAljRllJKDEsICgiSW4gQ0lGU1NNQkxvY2sgLSB0aW1lb3V0ICVkIG51bUxvY2sgJWQiLHdhaXRGbGFnLG51bUxvY2spKTsKLQlyYyA9IHNtYl9pbml0KFNNQl9DT01fTE9DS0lOR19BTkRYLCA4LCB0Y29uLCAodm9pZCAqKikgJnBTTUIsCi0JCSAgICAgICh2b2lkICoqKSAmcFNNQnIpOworCXJjID0gc21hbGxfc21iX2luaXQoU01CX0NPTV9MT0NLSU5HX0FORFgsIDgsIHRjb24sICh2b2lkICoqKSAmcFNNQik7CisKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAorCXBTTUJyID0gKExPQ0tfUlNQICopcFNNQjsgLyogQkIgcmVtb3ZlbWUgQkIgKi8KKwogCWlmKGxvY2tUeXBlID09IExPQ0tJTkdfQU5EWF9PUExPQ0tfUkVMRUFTRSkgewogCQl0aW1lb3V0ID0gLTE7IC8qIG5vIHJlc3BvbnNlIGV4cGVjdGVkICovCiAJCXBTTUItPlRpbWVvdXQgPSAwOwpAQCAtMTA1OSw3ICsxMDY5LDcgQEAKIAlpZiAocmMpIHsKIAkJY0ZZSSgxLCAoIlNlbmQgZXJyb3IgaW4gTG9jayA9ICVkIiwgcmMpKTsKIAl9Ci0JY2lmc19idWZfcmVsZWFzZShwU01CKTsKKwljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHBTTUIpOwogCiAJLyogTm90ZTogT24gLUVBR0FJTiBlcnJvciBvbmx5IGNhbGxlciBjYW4gcmV0cnkgb24gaGFuZGxlIGJhc2VkIGNhbGxzIAogCXNpbmNlIGZpbGUgaGFuZGxlIHBhc3NlZCBpbiBubyBsb25nZXIgdmFsaWQgKi8KQEAgLTExMDgsNyArMTExOCw3IEBACiBpbnQKIENJRlNTTUJSZW5hbWUoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkgICAgICBjb25zdCBjaGFyICpmcm9tTmFtZSwgY29uc3QgY2hhciAqdG9OYW1lLAotCSAgICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSkKKwkgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCkKIHsKIAlpbnQgcmMgPSAwOwogCVJFTkFNRV9SRVEgKnBTTUIgPSBOVUxMOwpAQCAtMTEzMSwxOCArMTE0MSwxNiBAQAogCiAJaWYgKHBTTUItPmhkci5GbGFnczIgJiBTTUJGTEcyX1VOSUNPREUpIHsKIAkJbmFtZV9sZW4gPQotCQkgICAgY2lmc19zdHJ0b1VDUygod2NoYXJfdCAqKSBwU01CLT5PbGRGaWxlTmFtZSwgZnJvbU5hbWUsIFBBVEhfTUFYCi0JCQkJICAvKiBmaW5kIGRlZmluZSBmb3IgdGhpcyBtYXhwYXRoY29tcG9uZW50ICovCi0JCQkJICAsIG5sc19jb2RlcGFnZSk7CisJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX3UxNiAqKSBwU01CLT5PbGRGaWxlTmFtZSwgZnJvbU5hbWUsIAorCQkJCSAgICAgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwogCQluYW1lX2xlbisrOwkvKiB0cmFpbGluZyBudWxsICovCiAJCW5hbWVfbGVuICo9IDI7CiAJCXBTTUItPk9sZEZpbGVOYW1lW25hbWVfbGVuXSA9IDB4MDQ7CS8qIHBhZCAqLwogCS8qIHByb3RvY29sIHJlcXVpcmVzIEFTQ0lJIHNpZ25hdHVyZSBieXRlIG9uIFVuaWNvZGUgc3RyaW5nICovCiAJCXBTTUItPk9sZEZpbGVOYW1lW25hbWVfbGVuICsgMV0gPSAweDAwOwogCQluYW1lX2xlbjIgPQotCQkgICAgY2lmc19zdHJ0b1VDUygod2NoYXJfdCAqKSAmIHBTTUItPgotCQkJCSAgT2xkRmlsZU5hbWVbbmFtZV9sZW4gKyAyXSwgdG9OYW1lLCBQQVRIX01BWCwKLQkJCQkgIG5sc19jb2RlcGFnZSk7CisJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX3UxNiAqKSAmcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW4gKyAyXSwKKwkJCQkgICAgIHRvTmFtZSwgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwogCQluYW1lX2xlbjIgKz0gMSAvKiB0cmFpbGluZyBudWxsICovICArIDEgLyogU2lnbmF0dXJlIHdvcmQgKi8gOwogCQluYW1lX2xlbjIgKj0gMjsJLyogY29udmVydCB0byBieXRlcyAqLwogCX0gZWxzZSB7CQkvKiBCQiBpbXByb3ZlIHRoZSBjaGVjayBmb3IgYnVmZmVyIG92ZXJydW5zIEJCICovCkBAIC0xMTgyLDcgKzExOTAsOCBAQAogfQogCiBpbnQgQ0lGU1NNQlJlbmFtZU9wZW5GaWxlKGNvbnN0IGludCB4aWQsc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb24sIAotCQlpbnQgbmV0ZmlkLCBjaGFyICogdGFyZ2V0X25hbWUsIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKiBubHNfY29kZXBhZ2UpIAorCQlpbnQgbmV0ZmlkLCBjaGFyICogdGFyZ2V0X25hbWUsIAorCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICogbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXApCiB7CiAJc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb24yX3NmaV9yZXEgKnBTTUIgID0gTlVMTDsKIAlzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JzcCAqcFNNQnIgPSBOVUxMOwpAQCAtMTIyNyw5ICsxMjM2LDExIEBACiAJLyogdW5pY29kZSBvbmx5IGNhbGwgKi8KIAlpZih0YXJnZXRfbmFtZSA9PSBOVUxMKSB7CiAJCXNwcmludGYoZHVtbXlfc3RyaW5nLCJjaWZzJXgiLHBTTUItPmhkci5NaWQpOwotCSAgICAgICAgbGVuX29mX3N0ciA9IGNpZnNfc3RydG9VQ1MoKHdjaGFyX3QgKikgcmVuYW1lX2luZm8tPnRhcmdldF9uYW1lLCBkdW1teV9zdHJpbmcsIDI0LCBubHNfY29kZXBhZ2UpOworCSAgICAgICAgbGVuX29mX3N0ciA9IGNpZnNDb252ZXJ0VG9VQ1MoKF9fdTE2ICopcmVuYW1lX2luZm8tPnRhcmdldF9uYW1lLAorCQkJCQlkdW1teV9zdHJpbmcsIDI0LCBubHNfY29kZXBhZ2UsIHJlbWFwKTsKIAl9IGVsc2UgewotCQlsZW5fb2Zfc3RyID0gY2lmc19zdHJ0b1VDUygod2NoYXJfdCAqKSByZW5hbWVfaW5mby0+dGFyZ2V0X25hbWUsIHRhcmdldF9uYW1lLCBQQVRIX01BWCwgbmxzX2NvZGVwYWdlKTsKKwkJbGVuX29mX3N0ciA9IGNpZnNDb252ZXJ0VG9VQ1MoKF9fdTE2ICopcmVuYW1lX2luZm8tPnRhcmdldF9uYW1lLAorCQkJCQl0YXJnZXRfbmFtZSwgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwogCX0KIAlyZW5hbWVfaW5mby0+dGFyZ2V0X25hbWVfbGVuID0gY3B1X3RvX2xlMzIoMiAqIGxlbl9vZl9zdHIpOwogCWNvdW50ID0gMTIgLyogc2l6ZW9mKHN0cnVjdCBzZXRfZmlsZV9yZW5hbWUpICovICsgKDIgKiBsZW5fb2Zfc3RyKSArIDI7CkBAIC0xMjYzLDcgKzEyNzQsNyBAQAogaW50CiBDSUZTU01CQ29weShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLCBjb25zdCBjaGFyICogZnJvbU5hbWUsIAogICAgICAgICAgICAgY29uc3QgX191MTYgdGFyZ2V0X3RpZCwgY29uc3QgY2hhciAqdG9OYW1lLCBjb25zdCBpbnQgZmxhZ3MsCi0gICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCisgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCkKIHsKIAlpbnQgcmMgPSAwOwogCUNPUFlfUkVRICpwU01CID0gTlVMTDsKQEAgLTEyODUsMTggKzEyOTYsMTYgQEAKIAlwU01CLT5GbGFncyA9IGNwdV90b19sZTE2KGZsYWdzICYgQ09QWV9UUkVFKTsKIAogCWlmIChwU01CLT5oZHIuRmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7Ci0JCW5hbWVfbGVuID0gY2lmc19zdHJ0b1VDUygod2NoYXJfdCAqKSBwU01CLT5PbGRGaWxlTmFtZSwgCi0JCQkJZnJvbU5hbWUsIAotCQkJCVBBVEhfTUFYIC8qIGZpbmQgZGVmaW5lIGZvciB0aGlzIG1heHBhdGhjb21wb25lbnQgKi8sCi0JCQkJbmxzX2NvZGVwYWdlKTsKKwkJbmFtZV9sZW4gPSBjaWZzQ29udmVydFRvVUNTKChfX3UxNiAqKSBwU01CLT5PbGRGaWxlTmFtZSwgCisJCQkJCSAgICBmcm9tTmFtZSwgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwKKwkJCQkJICAgIHJlbWFwKTsKIAkJbmFtZV9sZW4rKzsgICAgIC8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKIAkJcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW5dID0gMHgwNDsgICAgIC8qIHBhZCAqLwogCQkvKiBwcm90b2NvbCByZXF1aXJlcyBBU0NJSSBzaWduYXR1cmUgYnl0ZSBvbiBVbmljb2RlIHN0cmluZyAqLwogCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbiArIDFdID0gMHgwMDsKLQkJbmFtZV9sZW4yID0gY2lmc19zdHJ0b1VDUygod2NoYXJfdCAqKSAmIHBTTUItPgotCQkJCU9sZEZpbGVOYW1lW25hbWVfbGVuICsgMl0sIHRvTmFtZSwgUEFUSF9NQVgsCi0JCQkJbmxzX2NvZGVwYWdlKTsKKwkJbmFtZV9sZW4yID0gY2lmc0NvbnZlcnRUb1VDUygoX191MTYgKikmcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW4gKyAyXSwgCisJCQkJdG9OYW1lLCBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuMiArPSAxIC8qIHRyYWlsaW5nIG51bGwgKi8gICsgMSAvKiBTaWduYXR1cmUgd29yZCAqLyA7CiAJCW5hbWVfbGVuMiAqPSAyOyAvKiBjb252ZXJ0IHRvIGJ5dGVzICovCiAJfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogQkIgaW1wcm92ZSB0aGUgY2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVucyBCQiAqLwpAQCAtMTQyNSw3ICsxNDM0LDcgQEAKIGludAogQ0lGU1VuaXhDcmVhdGVIYXJkTGluayhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkgICAgICAgY29uc3QgY2hhciAqZnJvbU5hbWUsIGNvbnN0IGNoYXIgKnRvTmFtZSwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSkKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQogewogCVRSQU5TQUNUSU9OMl9TUElfUkVRICpwU01CID0gTlVMTDsKIAlUUkFOU0FDVElPTjJfU1BJX1JTUCAqcFNNQnIgPSBOVUxMOwpAQCAtMTQ0NCw5ICsxNDUzLDggQEAKIAkJcmV0dXJuIHJjOwogCiAJaWYgKHBTTUItPmhkci5GbGFnczIgJiBTTUJGTEcyX1VOSUNPREUpIHsKLQkJbmFtZV9sZW4gPSBjaWZzX3N0cnRvVUNTKCh3Y2hhcl90ICopIHBTTUItPkZpbGVOYW1lLCB0b05hbWUsIFBBVEhfTUFYCi0JCQkJCSAvKiBmaW5kIGRlZmluZSBmb3IgdGhpcyBtYXhwYXRoY29tcG9uZW50ICovCi0JCQkJCSAsIG5sc19jb2RlcGFnZSk7CisJCW5hbWVfbGVuID0gY2lmc0NvbnZlcnRUb1VDUygoX191MTYgKikgcFNNQi0+RmlsZU5hbWUsIHRvTmFtZSwKKwkJCQkJICAgIFBBVEhfTUFYLCBubHNfY29kZXBhZ2UsIHJlbWFwKTsKIAkJbmFtZV9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLwogCQluYW1lX2xlbiAqPSAyOwogCkBAIC0xNDY4LDkgKzE0NzYsOCBAQAogCWRhdGFfb2Zmc2V0ID0gKGNoYXIgKikgKCZwU01CLT5oZHIuUHJvdG9jb2wpICsgb2Zmc2V0OwogCWlmIChwU01CLT5oZHIuRmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7CiAJCW5hbWVfbGVuX3RhcmdldCA9Ci0JCSAgICBjaWZzX3N0cnRvVUNTKCh3Y2hhcl90ICopIGRhdGFfb2Zmc2V0LCBmcm9tTmFtZSwgUEFUSF9NQVgKLQkJCQkgIC8qIGZpbmQgZGVmaW5lIGZvciB0aGlzIG1heHBhdGhjb21wb25lbnQgKi8KLQkJCQkgICwgbmxzX2NvZGVwYWdlKTsKKwkJICAgIGNpZnNDb252ZXJ0VG9VQ1MoKF9fdTE2ICopIGRhdGFfb2Zmc2V0LCBmcm9tTmFtZSwgUEFUSF9NQVgsCisJCQkJICAgICBubHNfY29kZXBhZ2UsIHJlbWFwKTsKIAkJbmFtZV9sZW5fdGFyZ2V0Kys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW5fdGFyZ2V0ICo9IDI7CiAJfSBlbHNlIHsJCS8qIEJCIGltcHJvdmUgdGhlIGNoZWNrIGZvciBidWZmZXIgb3ZlcnJ1bnMgQkIgKi8KQEAgLTE1MTIsNyArMTUxOSw3IEBACiBpbnQKIENJRlNDcmVhdGVIYXJkTGluayhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkgICBjb25zdCBjaGFyICpmcm9tTmFtZSwgY29uc3QgY2hhciAqdG9OYW1lLAotCQkgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCisJCSAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQogewogCWludCByYyA9IDA7CiAJTlRfUkVOQU1FX1JFUSAqcFNNQiA9IE5VTEw7CkBAIC0xNTM5LDE3ICsxNTQ2LDE1IEBACiAKIAlpZiAocFNNQi0+aGRyLkZsYWdzMiAmIFNNQkZMRzJfVU5JQ09ERSkgewogCQluYW1lX2xlbiA9Ci0JCSAgICBjaWZzX3N0cnRvVUNTKCh3Y2hhcl90ICopIHBTTUItPk9sZEZpbGVOYW1lLCBmcm9tTmFtZSwgUEFUSF9NQVgKLQkJCQkgIC8qIGZpbmQgZGVmaW5lIGZvciB0aGlzIG1heHBhdGhjb21wb25lbnQgKi8KLQkJCQkgICwgbmxzX2NvZGVwYWdlKTsKKwkJICAgIGNpZnNDb252ZXJ0VG9VQ1MoKF9fdTE2ICopIHBTTUItPk9sZEZpbGVOYW1lLCBmcm9tTmFtZSwKKwkJCQkgICAgIFBBVEhfTUFYLCBubHNfY29kZXBhZ2UsIHJlbWFwKTsKIAkJbmFtZV9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLwogCQluYW1lX2xlbiAqPSAyOwogCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbl0gPSAwOwkvKiBwYWQgKi8KIAkJcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW4gKyAxXSA9IDB4MDQ7IAogCQluYW1lX2xlbjIgPQotCQkgICAgY2lmc19zdHJ0b1VDUygod2NoYXJfdCAqKSAmIHBTTUItPgotCQkJCSAgT2xkRmlsZU5hbWVbbmFtZV9sZW4gKyAyXSwgdG9OYW1lLCBQQVRIX01BWCwKLQkJCQkgIG5sc19jb2RlcGFnZSk7CisJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX3UxNiAqKSZwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbiArIDJdLCAKKwkJCQkgICAgIHRvTmFtZSwgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwogCQluYW1lX2xlbjIgKz0gMSAvKiB0cmFpbGluZyBudWxsICovICArIDEgLyogU2lnbmF0dXJlIHdvcmQgKi8gOwogCQluYW1lX2xlbjIgKj0gMjsJLyogY29udmVydCB0byBieXRlcyAqLwogCX0gZWxzZSB7CQkvKiBCQiBpbXByb3ZlIHRoZSBjaGVjayBmb3IgYnVmZmVyIG92ZXJydW5zIEJCICovCkBAIC0xNjU5LDYgKzE2NjQsNyBAQAogCQkJCW5hbWVfbGVuID0gVW5pU3Rybmxlbigod2NoYXJfdCAqKSAoKGNoYXIgKikKIAkJCQkJJnBTTUJyLT5oZHIuUHJvdG9jb2wgK2RhdGFfb2Zmc2V0KSwKIAkJCQkJbWluX3QoY29uc3QgaW50LCBidWZsZW4sY291bnQpIC8gMik7CisJCQkvKiBCQiBGSVhNRSBpbnZlc3RpZ2F0ZSByZW1hcHBpbmcgcmVzZXJ2ZWQgY2hhcnMgaGVyZSAqLwogCQkJCWNpZnNfc3RyZnJvbVVDU19sZShzeW1saW5raW5mbywKIAkJCQkJKHdjaGFyX3QgKikgKChjaGFyICopJnBTTUJyLT5oZHIuUHJvdG9jb2wgKwogCQkJCQkJZGF0YV9vZmZzZXQpLApAQCAtMTc5Myw3ICsxNzk5LDggQEAKIH0KIAogLyogQ29udmVydCBBQ0wgZnJvbSBDSUZTIFBPU0lYIHdpcmUgZm9ybWF0IHRvIGxvY2FsIExpbnV4IFBPU0lYIEFDTCB4YXR0ciAqLwotc3RhdGljIGludCBjaWZzX2NvcHlfcG9zaXhfYWNsKGNoYXIgKiB0cmd0LGNoYXIgKiBzcmMsIGNvbnN0IGludCBidWZsZW4sY29uc3QgaW50IGFjbF90eXBlLGNvbnN0IGludCBzaXplX29mX2RhdGFfYXJlYSkKK3N0YXRpYyBpbnQgY2lmc19jb3B5X3Bvc2l4X2FjbChjaGFyICogdHJndCxjaGFyICogc3JjLCBjb25zdCBpbnQgYnVmbGVuLAorCQkJCWNvbnN0IGludCBhY2xfdHlwZSxjb25zdCBpbnQgc2l6ZV9vZl9kYXRhX2FyZWEpCiB7CiAJaW50IHNpemUgPSAgMDsKIAlpbnQgaTsKQEAgLTE5MTIsNyArMTkxOSw3IEBACiBDSUZTU01CR2V0UG9zaXhBQ0woY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphY2xfaW5mLCBjb25zdCBpbnQgYnVmbGVuLCBjb25zdCBpbnQgYWNsX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCkKIHsKIC8qIFNNQl9RVUVSWV9QT1NJWF9BQ0wgKi8KIAlUUkFOU0FDVElPTjJfUVBJX1JFUSAqcFNNQiA9IE5VTEw7CkBAIC0xOTMyLDggKzE5MzksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAJaWYgKHBTTUItPmhkci5GbGFnczIgJiBTTUJGTEcyX1VOSUNPREUpIHsKIAkJbmFtZV9sZW4gPQotCQkJY2lmc19zdHJ0b1VDUygod2NoYXJfdCAqKSBwU01CLT5GaWxlTmFtZSwgc2VhcmNoTmFtZSwgUEFUSF9NQVgKLQkJCQksIG5sc19jb2RlcGFnZSk7CisJCQljaWZzQ29udmVydFRvVUNTKChfX3UxNiAqKSBwU01CLT5GaWxlTmFtZSwgc2VhcmNoTmFtZSwgCisJCQkJCSBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7ICAgICAvKiB0cmFpbGluZyBudWxsICovCiAJCW5hbWVfbGVuICo9IDI7CiAJCXBTTUItPkZpbGVOYW1lW25hbWVfbGVuXSA9IDA7CkBAIC0xOTk3LDggKzIwMDQsOSBAQAogaW50CiBDSUZTU01CU2V0UG9zaXhBQ0woY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxfYWNsLCBjb25zdCBpbnQgYnVmbGVuLCBjb25zdCBpbnQgYWNsX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NhbF9hY2wsIGNvbnN0IGludCBidWZsZW4sIAorCQkJY29uc3QgaW50IGFjbF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXApCiB7CiAJc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb24yX3NwaV9yZXEgKnBTTUIgPSBOVUxMOwogCXN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uMl9zcGlfcnNwICpwU01CciA9IE5VTEw7CkBAIC0yMDE2LDggKzIwMjQsOCBAQAogCQlyZXR1cm4gcmM7CiAJaWYgKHBTTUItPmhkci5GbGFnczIgJiBTTUJGTEcyX1VOSUNPREUpIHsKIAkJbmFtZV9sZW4gPQotCQkJY2lmc19zdHJ0b1VDUygod2NoYXJfdCAqKSBwU01CLT5GaWxlTmFtZSwgZmlsZU5hbWUsIFBBVEhfTUFYCi0JCQkJLCBubHNfY29kZXBhZ2UpOworCQkJY2lmc0NvbnZlcnRUb1VDUygoX191MTYgKikgcFNNQi0+RmlsZU5hbWUsIGZpbGVOYW1lLCAKKwkJCQkgICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7ICAgICAvKiB0cmFpbGluZyBudWxsICovCiAJCW5hbWVfbGVuICo9IDI7CiAJfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogQkIgaW1wcm92ZSB0aGUgY2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVucyBCQiAqLwpAQCAtMjA3MiwxMyArMjA4MCw5NiBAQAogCXJldHVybiByYzsKIH0KIAotI2VuZGlmCisvKiBCQiBmaXggdGFicyBpbiB0aGlzIGZ1bmN0aW9uIEZJWE1FIEJCICovCitpbnQKK0NJRlNHZXRFeHRBdHRyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCisgICAgICAgICAgICAgICAgY29uc3QgaW50IG5ldGZpZCwgX191NjQgKiBwRXh0QXR0ckJpdHMsIF9fdTY0ICpwTWFzaykKK3sKKyAgICAgICAgaW50IHJjID0gMDsKKyAgICAgICAgc3RydWN0IHNtYl90Ml9xZmlfcmVxICpwU01CID0gTlVMTDsKKyAgICAgICAgc3RydWN0IHNtYl90Ml9xZmlfcnNwICpwU01CciA9IE5VTEw7CisgICAgICAgIGludCBieXRlc19yZXR1cm5lZDsKKyAgICAgICAgX191MTYgcGFyYW1zLCBieXRlX2NvdW50OworCisgICAgICAgIGNGWUkoMSwoIkluIEdldEV4dEF0dHIiKSk7CisgICAgICAgIGlmKHRjb24gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKworR2V0RXh0QXR0clJldHJ5OgorICAgICAgICByYyA9IHNtYl9pbml0KFNNQl9DT01fVFJBTlNBQ1RJT04yLCAxNSwgdGNvbiwgKHZvaWQgKiopICZwU01CLAorICAgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSAmcFNNQnIpOworICAgICAgICBpZiAocmMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJjOworCisgICAgICAgIHBhcmFtcyA9IDIgLyogbGV2ZWwgKi8gKzIgLyogZmlkICovOworICAgICAgICBwU01CLT50Mi5Ub3RhbERhdGFDb3VudCA9IDA7CisgICAgICAgIHBTTUItPnQyLk1heFBhcmFtZXRlckNvdW50ID0gY3B1X3RvX2xlMTYoNCk7CisgICAgICAgIC8qIEJCIGZpbmQgZXhhY3QgbWF4IGRhdGEgY291bnQgYmVsb3cgZnJvbSBzZXNzIHN0cnVjdHVyZSBCQiAqLworICAgICAgICBwU01CLT50Mi5NYXhEYXRhQ291bnQgPSBjcHVfdG9fbGUxNig0MDAwKTsKKyAgICAgICAgcFNNQi0+dDIuTWF4U2V0dXBDb3VudCA9IDA7CisgICAgICAgIHBTTUItPnQyLlJlc2VydmVkID0gMDsKKyAgICAgICAgcFNNQi0+dDIuRmxhZ3MgPSAwOworICAgICAgICBwU01CLT50Mi5UaW1lb3V0ID0gMDsKKyAgICAgICAgcFNNQi0+dDIuUmVzZXJ2ZWQyID0gMDsKKyAgICAgICAgcFNNQi0+dDIuUGFyYW1ldGVyT2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmc2V0b2Yoc3RydWN0IHNtYl90Ml9xZmlfcmVxLAorCQkJRmlkKSAtIDQpOworICAgICAgICBwU01CLT50Mi5EYXRhQ291bnQgPSAwOworICAgICAgICBwU01CLT50Mi5EYXRhT2Zmc2V0ID0gMDsKKyAgICAgICAgcFNNQi0+dDIuU2V0dXBDb3VudCA9IDE7CisgICAgICAgIHBTTUItPnQyLlJlc2VydmVkMyA9IDA7CisgICAgICAgIHBTTUItPnQyLlN1YkNvbW1hbmQgPSBjcHVfdG9fbGUxNihUUkFOUzJfUVVFUllfRklMRV9JTkZPUk1BVElPTik7CisgICAgICAgIGJ5dGVfY291bnQgPSBwYXJhbXMgKyAxIC8qIHBhZCAqLyA7CisgICAgICAgIHBTTUItPnQyLlRvdGFsUGFyYW1ldGVyQ291bnQgPSBjcHVfdG9fbGUxNihwYXJhbXMpOworICAgICAgICBwU01CLT50Mi5QYXJhbWV0ZXJDb3VudCA9IHBTTUItPnQyLlRvdGFsUGFyYW1ldGVyQ291bnQ7CisgICAgICAgIHBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfUVVFUllfQVRUUl9GTEFHUyk7CisgICAgICAgIHBTTUItPlBhZCA9IDA7CisJcFNNQi0+RmlkID0gbmV0ZmlkOworICAgICAgICBwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKyAgICAgICAgcFNNQi0+dDIuQnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CisKKyAgICAgICAgcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCisgICAgICAgICAgICAgICAgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgICAgICBjRllJKDEsICgiZXJyb3IgJWQgaW4gR2V0RXh0QXR0ciIsIHJjKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogZGVjb2RlIHJlc3BvbnNlICovCisgICAgICAgICAgICAgICAgcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7CisgICAgICAgICAgICAgICAgaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgMikpCisgICAgICAgICAgICAgICAgLyogQkIgYWxzbyBjaGVjayBlbm91Z2ggdG90YWwgYnl0ZXMgcmV0dXJuZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHJjIHNob3VsZCB3ZSBjaGVjayBmb3IgRU9QTk9TVVBQIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZSB0aGUgc3J2aW5vIGZsYWc/IG9yIGluIGNhbGxlcj8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVJTzsgICAgICAvKiBiYWQgc21iICovCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfX3UxNiBkYXRhX29mZnNldCA9IGxlMTZfdG9fY3B1KHBTTUJyLT50Mi5EYXRhT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fdTE2IGNvdW50ID0gbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFDb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmlsZV9jaGF0dHJfaW5mbyAqIHBmaW5mbzsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJCIERvIHdlIG5lZWQgYSBjYXN0IG9yIGhhc2ggaGVyZSA/ICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3VudCAhPSAxNikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjRllJKDEsICgiSWxsZWdhbCBzaXplIHJldCBpbiBHZXRFeHRBdHRyIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IC1FSU87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gR2V0RXh0QXR0ck91dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBmaW5mbyA9IChzdHJ1Y3QgZmlsZV9jaGF0dHJfaW5mbyAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0YV9vZmZzZXQgKyAoY2hhciAqKSAmcFNNQnItPmhkci5Qcm90b2NvbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAqcEV4dEF0dHJCaXRzID0gbGU2NF90b19jcHUocGZpbmZvLT5tb2RlKTsKKwkJCSpwTWFzayA9IGxlNjRfdG9fY3B1KHBmaW5mby0+bWFzayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CitHZXRFeHRBdHRyT3V0OgorICAgICAgICBjaWZzX2J1Zl9yZWxlYXNlKHBTTUIpOworICAgICAgICBpZiAocmMgPT0gLUVBR0FJTikKKyAgICAgICAgICAgICAgICBnb3RvIEdldEV4dEF0dHJSZXRyeTsKKyAgICAgICAgcmV0dXJuIHJjOworfQorCisKKyNlbmRpZiAvKiBDT05GSUdfUE9TSVggKi8KIAogaW50CiBDSUZTU01CUVBhdGhJbmZvKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWFyY2hOYW1lLAogCQkgRklMRV9BTExfSU5GTyAqIHBGaW5kRGF0YSwKLQkJIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSkKKwkJIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQogewogLyogbGV2ZWwgMjYzIFNNQl9RVUVSWV9GSUxFX0FMTF9JTkZPICovCiAJVFJBTlNBQ1RJT04yX1FQSV9SRVEgKnBTTUIgPSBOVUxMOwpAQCAtMjA5Nyw5ICsyMTg4LDggQEAKIAogCWlmIChwU01CLT5oZHIuRmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7CiAJCW5hbWVfbGVuID0KLQkJICAgIGNpZnNfc3RydG9VQ1MoKHdjaGFyX3QgKikgcFNNQi0+RmlsZU5hbWUsIHNlYXJjaE5hbWUsIFBBVEhfTUFYCi0JCQkJICAvKiBmaW5kIGRlZmluZSBmb3IgdGhpcyBtYXhwYXRoY29tcG9uZW50ICovCi0JCQkJICAsIG5sc19jb2RlcGFnZSk7CisJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX3UxNiAqKSBwU01CLT5GaWxlTmFtZSwgc2VhcmNoTmFtZSwgCisJCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKIAl9IGVsc2UgewkJLyogQkIgaW1wcm92ZSB0aGUgY2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVucyBCQiAqLwpAQCAtMjE2MCw3ICsyMjUwLDcgQEAKIENJRlNTTUJVbml4UVBhdGhJbmZvKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwKIAkJICAgICBGSUxFX1VOSVhfQkFTSUNfSU5GTyAqIHBGaW5kRGF0YSwKLQkJICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCisJCSAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXApCiB7CiAvKiBTTUJfUVVFUllfRklMRV9VTklYX0JBU0lDICovCiAJVFJBTlNBQ1RJT04yX1FQSV9SRVEgKnBTTUIgPSBOVUxMOwpAQCAtMjE3OSw5ICsyMjY5LDggQEAKIAogCWlmIChwU01CLT5oZHIuRmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7CiAJCW5hbWVfbGVuID0KLQkJICAgIGNpZnNfc3RydG9VQ1MoKHdjaGFyX3QgKikgcFNNQi0+RmlsZU5hbWUsIHNlYXJjaE5hbWUsIFBBVEhfTUFYCi0JCQkJICAvKiBmaW5kIGRlZmluZSBmb3IgdGhpcyBtYXhwYXRoY29tcG9uZW50ICovCi0JCQkJICAsIG5sc19jb2RlcGFnZSk7CisJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX3UxNiAqKSBwU01CLT5GaWxlTmFtZSwgc2VhcmNoTmFtZSwKKwkJCQkgIFBBVEhfTUFYLCBubHNfY29kZXBhZ2UsIHJlbWFwKTsKIAkJbmFtZV9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLwogCQluYW1lX2xlbiAqPSAyOwogCX0gZWxzZSB7CQkvKiBCQiBpbXByb3ZlIHRoZSBjaGVjayBmb3IgYnVmZmVyIG92ZXJydW5zIEJCICovCkBAIC0yMjYxLDcgKzIzNTAsNyBAQAogCiAJaWYgKHBTTUItPmhkci5GbGFnczIgJiBTTUJGTEcyX1VOSUNPREUpIHsKIAkJbmFtZV9sZW4gPQotCQkgICAgY2lmc19zdHJ0b1VDUygod2NoYXJfdCAqKSBwU01CLT5GaWxlTmFtZSwgc2VhcmNoTmFtZSwgUEFUSF9NQVgKKwkJICAgIGNpZnNDb252ZXJ0VG9VQ1MoKHdjaGFyX3QgKikgcFNNQi0+RmlsZU5hbWUsIHNlYXJjaE5hbWUsIFBBVEhfTUFYCiAJCQkJICAvKiBmaW5kIGRlZmluZSBmb3IgdGhpcyBtYXhwYXRoY29tcG9uZW50ICovCiAJCQkJICAsIG5sc19jb2RlcGFnZSk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KQEAgLTIzMjUsNyArMjQxNCw3IEBACiAJICAgICAgY29uc3QgY2hhciAqc2VhcmNoTmFtZSwgCiAJICAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLAogCSAgICAgIF9fdTE2ICoJcG5ldGZpZCwKLQkgICAgICBzdHJ1Y3QgY2lmc19zZWFyY2hfaW5mbyAqIHBzcmNoX2luZikKKwkgICAgICBzdHJ1Y3QgY2lmc19zZWFyY2hfaW5mbyAqIHBzcmNoX2luZiwgaW50IHJlbWFwKQogewogLyogbGV2ZWwgMjU3IFNNQl8gKi8KIAlUUkFOU0FDVElPTjJfRkZJUlNUX1JFUSAqcFNNQiA9IE5VTEw7CkBAIC0yMzM2LDcgKzI0MjUsNyBAQAogCWludCBuYW1lX2xlbjsKIAlfX3UxNiBwYXJhbXMsIGJ5dGVfY291bnQ7CiAKLQljRllJKDEsICgiSW4gRmluZEZpcnN0IikpOworCWNGWUkoMSwgKCJJbiBGaW5kRmlyc3QgZm9yICVzIixzZWFyY2hOYW1lKSk7CiAKIGZpbmRGaXJzdFJldHJ5OgogCXJjID0gc21iX2luaXQoU01CX0NPTV9UUkFOU0FDVElPTjIsIDE1LCB0Y29uLCAodm9pZCAqKikgJnBTTUIsCkBAIC0yMzQ2LDIwICsyNDM1LDMwIEBACiAKIAlpZiAocFNNQi0+aGRyLkZsYWdzMiAmIFNNQkZMRzJfVU5JQ09ERSkgewogCQluYW1lX2xlbiA9Ci0JCSAgICBjaWZzX3N0cnRvVUNTKCh3Y2hhcl90ICopIHBTTUItPkZpbGVOYW1lLHNlYXJjaE5hbWUsCi0JCQkJIFBBVEhfTUFYLCBubHNfY29kZXBhZ2UpOwotCQluYW1lX2xlbisrOwkvKiB0cmFpbGluZyBudWxsICovCisJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX3UxNiAqKSBwU01CLT5GaWxlTmFtZSxzZWFyY2hOYW1lLAorCQkJCSBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CisJCS8qIFdlIGNhbiBub3QgYWRkIHRoZSBhc3RlcmlrIGVhcmxpZXIgaW4gY2FzZQorCQlpdCBnb3QgcmVtYXBwZWQgdG8gMHhGMDNBIGFzIGlmIGl0IHdlcmUgcGFydCBvZiB0aGUKKwkJZGlyZWN0b3J5IG5hbWUgaW5zdGVhZCBvZiBhIHdpbGRjYXJkICovCiAJCW5hbWVfbGVuICo9IDI7CisJCXBTTUItPkZpbGVOYW1lW25hbWVfbGVuXSA9ICdcXCc7CisJCXBTTUItPkZpbGVOYW1lW25hbWVfbGVuKzFdID0gMDsKKwkJcFNNQi0+RmlsZU5hbWVbbmFtZV9sZW4rMl0gPSAnKic7CisJCXBTTUItPkZpbGVOYW1lW25hbWVfbGVuKzNdID0gMDsKKwkJbmFtZV9sZW4gKz0gNDsgLyogbm93IHRoZSB0cmFpbGluZyBudWxsICovCiAJCXBTTUItPkZpbGVOYW1lW25hbWVfbGVuXSA9IDA7IC8qIG51bGwgdGVybWluYXRlIGp1c3QgaW4gY2FzZSAqLwogCQlwU01CLT5GaWxlTmFtZVtuYW1lX2xlbisxXSA9IDA7CisJCW5hbWVfbGVuICs9IDI7CiAJfSBlbHNlIHsJLyogQkIgYWRkIGNoZWNrIGZvciBvdmVycnVuIG9mIFNNQiBidWYgQkIgKi8KIAkJbmFtZV9sZW4gPSBzdHJubGVuKHNlYXJjaE5hbWUsIFBBVEhfTUFYKTsKLQkJbmFtZV9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLwogLyogQkIgZml4IGhlcmUgYW5kIGluIHVuaWNvZGUgY2xhdXNlIGFib3ZlIGllCiAJCWlmKG5hbWVfbGVuID4gYnVmZmVyc2l6ZS1oZWFkZXIpCiAJCQlmcmVlIGJ1ZmZlciBleGl0OyBCQiAqLwogCQlzdHJuY3B5KHBTTUItPkZpbGVOYW1lLCBzZWFyY2hOYW1lLCBuYW1lX2xlbik7Ci0JCXBTTUItPkZpbGVOYW1lW25hbWVfbGVuXSA9IDA7IC8qIGp1c3QgaW4gY2FzZSAqLworCQlwU01CLT5GaWxlTmFtZVtuYW1lX2xlbl0gPSAnXFwnOworCQlwU01CLT5GaWxlTmFtZVtuYW1lX2xlbisxXSA9ICcqJzsKKwkJcFNNQi0+RmlsZU5hbWVbbmFtZV9sZW4rMl0gPSAwOworCQluYW1lX2xlbiArPSAzOwogCX0KIAogCXBhcmFtcyA9IDEyICsgbmFtZV9sZW4gLyogaW5jbHVkZXMgbnVsbCAqLyA7CkBAIC0yNDIyLDcgKzI1MjEsNiBAQAogCQkJcHNyY2hfaW5mLT5zcmNoX2VudHJpZXNfc3RhcnQgPSAKIAkJCQkoY2hhciAqKSAmcFNNQnItPmhkci5Qcm90b2NvbCArIAogCQkJCQlsZTE2X3RvX2NwdShwU01Cci0+dDIuRGF0YU9mZnNldCk7Ci0KIAkJCXBhcm1zID0gKFQyX0ZGSVJTVF9SU1BfUEFSTVMgKikoKGNoYXIgKikgJnBTTUJyLT5oZHIuUHJvdG9jb2wgKwogCQkJICAgICAgIGxlMTZfdG9fY3B1KHBTTUJyLT50Mi5QYXJhbWV0ZXJPZmZzZXQpKTsKIApAQCAtMjQzNCw3ICsyNTMyLDYgQEAKIAkJCXBzcmNoX2luZi0+ZW50cmllc19pbl9idWZmZXIgID0gbGUxNl90b19jcHUocGFybXMtPlNlYXJjaENvdW50KTsKIAkJCXBzcmNoX2luZi0+aW5kZXhfb2ZfbGFzdF9lbnRyeSA9IAogCQkJCXBzcmNoX2luZi0+ZW50cmllc19pbl9idWZmZXI7Ci0vKmNGWUkoMSwoImVudHJpZXMgaW4gYnVmICVkIGluZGV4X29mX2xhc3QgJWQiLHBzcmNoX2luZi0+ZW50cmllc19pbl9idWZmZXIscHNyY2hfaW5mLT5pbmRleF9vZl9sYXN0X2VudHJ5KSk7ICAqLwogCQkJKnBuZXRmaWQgPSBwYXJtcy0+U2VhcmNoSGFuZGxlOwogCQl9IGVsc2UgewogCQkJY2lmc19idWZfcmVsZWFzZShwU01CKTsKQEAgLTI2MDgsNyArMjcwNSw3IEBACiBDSUZTR2V0U3J2SW5vZGVOdW1iZXIoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWFyY2hOYW1lLAogICAgICAgICAgICAgICAgIF9fdTY0ICogaW5vZGVfbnVtYmVyLAotICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSkKKyAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCkKIHsKIAlpbnQgcmMgPSAwOwogCVRSQU5TQUNUSU9OMl9RUElfUkVRICpwU01CID0gTlVMTDsKQEAgLTI2MjksOCArMjcyNiw4IEBACiAKIAlpZiAocFNNQi0+aGRyLkZsYWdzMiAmIFNNQkZMRzJfVU5JQ09ERSkgewogCQluYW1lX2xlbiA9Ci0JCQljaWZzX3N0cnRvVUNTKCh3Y2hhcl90ICopIHBTTUItPkZpbGVOYW1lLCBzZWFyY2hOYW1lLCAKLQkJCQlQQVRIX01BWCxubHNfY29kZXBhZ2UpOworCQkJY2lmc0NvbnZlcnRUb1VDUygoX191MTYgKikgcFNNQi0+RmlsZU5hbWUsIHNlYXJjaE5hbWUsCisJCQkJUEFUSF9NQVgsbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7ICAgICAvKiB0cmFpbGluZyBudWxsICovCiAJCW5hbWVfbGVuICo9IDI7CiAJfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogQkIgaW1wcm92ZSB0aGUgY2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVucyBCQiAqLwpAQCAtMjcwNCw3ICsyODAxLDcgQEAKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwKIAkJdW5zaWduZWQgY2hhciAqKnRhcmdldFVOQ3MsCiAJCXVuc2lnbmVkIGludCAqbnVtYmVyX29mX1VOQ19pbl9hcnJheSwKLQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKQorCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCkKIHsKIC8qIFRSQU5TMl9HRVRfREZTX1JFRkVSUkFMICovCiAJVFJBTlNBQ1RJT04yX0dFVF9ERlNfUkVGRVJfUkVRICpwU01CID0gTlVMTDsKQEAgLTI3NDAsMTAgKzI4MzcsOCBAQAogCWlmIChzZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklDT0RFKSB7CiAJCXBTTUItPmhkci5GbGFnczIgfD0gU01CRkxHMl9VTklDT0RFOwogCQluYW1lX2xlbiA9Ci0JCSAgICBjaWZzX3N0cnRvVUNTKCh3Y2hhcl90ICopIHBTTUItPlJlcXVlc3RGaWxlTmFtZSwKLQkJCQkgIHNlYXJjaE5hbWUsIFBBVEhfTUFYCi0JCQkJICAvKiBmaW5kIGRlZmluZSBmb3IgdGhpcyBtYXhwYXRoY29tcG9uZW50ICovCi0JCQkJICAsIG5sc19jb2RlcGFnZSk7CisJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX3UxNiAqKSBwU01CLT5SZXF1ZXN0RmlsZU5hbWUsCisJCQkJICAgICBzZWFyY2hOYW1lLCBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKIAl9IGVsc2UgewkJLyogQkIgaW1wcm92ZSB0aGUgY2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVucyBCQiAqLwpAQCAtMjg3MSw4ICsyOTY2LDcgQEAKIH0KIAogaW50Ci1DSUZTU01CUUZTSW5mbyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAotCSAgICAgICBzdHJ1Y3Qga3N0YXRmcyAqRlNEYXRhLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCitDSUZTU01CUUZTSW5mbyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLCBzdHJ1Y3Qga3N0YXRmcyAqRlNEYXRhKQogewogLyogbGV2ZWwgMHgxMDMgU01CX1FVRVJZX0ZJTEVfU1lTVEVNX0lORk8gKi8KIAlUUkFOU0FDVElPTjJfUUZTSV9SRVEgKnBTTUIgPSBOVUxMOwpAQCAtMjk1NSw4ICszMDQ5LDcgQEAKIH0KIAogaW50Ci1DSUZTU01CUUZTQXR0cmlidXRlSW5mbyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAotCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKQorQ0lGU1NNQlFGU0F0dHJpYnV0ZUluZm8oY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbikKIHsKIC8qIGxldmVsIDB4MTA1ICBTTUJfUVVFUllfRklMRV9TWVNURU1fSU5GTyAqLwogCVRSQU5TQUNUSU9OMl9RRlNJX1JFUSAqcFNNQiA9IE5VTEw7CkBAIC0zMDI0LDggKzMxMTcsNyBAQAogfQogCiBpbnQKLUNJRlNTTUJRRlNEZXZpY2VJbmZvKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCi0JCSAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKQorQ0lGU1NNQlFGU0RldmljZUluZm8oY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbikKIHsKIC8qIGxldmVsIDB4MTA0IFNNQl9RVUVSWV9GSUxFX1NZU1RFTV9JTkZPICovCiAJVFJBTlNBQ1RJT04yX1FGU0lfUkVRICpwU01CID0gTlVMTDsKQEAgLTMwNzgsOCArMzE3MCw4IEBACiAJCWVsc2UgewogCQkJX191MTYgZGF0YV9vZmZzZXQgPSBsZTE2X3RvX2NwdShwU01Cci0+dDIuRGF0YU9mZnNldCk7CiAJCQlyZXNwb25zZV9kYXRhID0KLQkJCSAgICAoRklMRV9TWVNURU1fREVWSUNFX0lORk8KLQkJCSAgICAgKikgKCgoY2hhciAqKSAmcFNNQnItPmhkci5Qcm90b2NvbCkgKworCQkJICAgIChGSUxFX1NZU1RFTV9ERVZJQ0VfSU5GTyAqKQorCQkJCSgoKGNoYXIgKikgJnBTTUJyLT5oZHIuUHJvdG9jb2wpICsKIAkJCQkgZGF0YV9vZmZzZXQpOwogCQkJbWVtY3B5KCZ0Y29uLT5mc0RldkluZm8sIHJlc3BvbnNlX2RhdGEsCiAJCQkgICAgICAgc2l6ZW9mIChGSUxFX1NZU1RFTV9ERVZJQ0VfSU5GTykpOwpAQCAtMzA5NCw4ICszMTg2LDcgQEAKIH0KIAogaW50Ci1DSUZTU01CUUZTVW5peEluZm8oY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKLQkJICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKQorQ0lGU1NNQlFGU1VuaXhJbmZvKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24pCiB7CiAvKiBsZXZlbCAweDIwMCAgU01CX1FVRVJZX0NJRlNfVU5JWF9JTkZPICovCiAJVFJBTlNBQ1RJT04yX1FGU0lfUkVRICpwU01CID0gTlVMTDsKQEAgLTMxNjYsNyArMzI1Nyw3IEBACiAKIGludAogQ0lGU1NNQlFGU1Bvc2l4SW5mbyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAotCQkgICBzdHJ1Y3Qga3N0YXRmcyAqRlNEYXRhLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCisJCSAgIHN0cnVjdCBrc3RhdGZzICpGU0RhdGEpCiB7CiAvKiBsZXZlbCAweDIwMSAgU01CX1FVRVJZX0NJRlNfUE9TSVhfSU5GTyAqLwogCVRSQU5TQUNUSU9OMl9RRlNJX1JFUSAqcFNNQiA9IE5VTEw7CkBAIC0zMjU4LDcgKzMzNDksOCBAQAogCiBpbnQKIENJRlNTTUJTZXRFT0YoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwgY29uc3QgY2hhciAqZmlsZU5hbWUsCi0JICAgICAgX191NjQgc2l6ZSwgaW50IFNldEFsbG9jYXRpb24sIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSkKKwkgICAgICBfX3U2NCBzaXplLCBpbnQgU2V0QWxsb2NhdGlvbiwgCisJICAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXApCiB7CiAJc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb24yX3NwaV9yZXEgKnBTTUIgPSBOVUxMOwogCXN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uMl9zcGlfcnNwICpwU01CciA9IE5VTEw7CkBAIC0zMjc3LDkgKzMzNjksOCBAQAogCiAJaWYgKHBTTUItPmhkci5GbGFnczIgJiBTTUJGTEcyX1VOSUNPREUpIHsKIAkJbmFtZV9sZW4gPQotCQkgICAgY2lmc19zdHJ0b1VDUygod2NoYXJfdCAqKSBwU01CLT5GaWxlTmFtZSwgZmlsZU5hbWUsIFBBVEhfTUFYCi0JCQkJICAvKiBmaW5kIGRlZmluZSBmb3IgdGhpcyBtYXhwYXRoY29tcG9uZW50ICovCi0JCQkJICAsIG5sc19jb2RlcGFnZSk7CisJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX3UxNiAqKSBwU01CLT5GaWxlTmFtZSwgZmlsZU5hbWUsCisJCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKIAl9IGVsc2UgewkJLyogQkIgaW1wcm92ZSB0aGUgY2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVucyBCQiAqLwpAQCAtMzM2MCwxMSArMzQ1MSwxMyBAQAogCiAJY0ZZSSgxLCAoIlNldEZpbGVTaXplICh2aWEgU2V0RmlsZUluZm8pICVsbGQiLAogCQkJKGxvbmcgbG9uZylzaXplKSk7Ci0JcmMgPSBzbWJfaW5pdChTTUJfQ09NX1RSQU5TQUNUSU9OMiwgMTUsIHRjb24sICh2b2lkICoqKSAmcFNNQiwKLQkJICAgICAgKHZvaWQgKiopICZwU01Ccik7CisJcmMgPSBzbWFsbF9zbWJfaW5pdChTTUJfQ09NX1RSQU5TQUNUSU9OMiwgMTUsIHRjb24sICh2b2lkICoqKSAmcFNNQik7CisKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAorCXBTTUJyID0gKHN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uMl9zZmlfcnNwICopcFNNQjsKKwogCXBTTUItPmhkci5QaWQgPSBjcHVfdG9fbGUxNigoX191MTYpcGlkX29mX29wZW5lcik7CiAJcFNNQi0+aGRyLlBpZEhpZ2ggPSBjcHVfdG9fbGUxNigoX191MTYpKHBpZF9vZl9vcGVuZXIgPj4gMTYpKTsKICAgICAKQEAgLTM0MjQsNyArMzUxNyw3IEBACiAJfQogCiAJaWYgKHBTTUIpCi0JCWNpZnNfYnVmX3JlbGVhc2UocFNNQik7CisJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UocFNNQik7CiAKIAkvKiBOb3RlOiBPbiAtRUFHQUlOIGVycm9yIG9ubHkgY2FsbGVyIGNhbiByZXRyeSBvbiBoYW5kbGUgYmFzZWQgY2FsbHMgCiAJCXNpbmNlIGZpbGUgaGFuZGxlIHBhc3NlZCBpbiBubyBsb25nZXIgdmFsaWQgKi8KQEAgLTM0NTAsMTEgKzM1NDMsMTMgQEAKIAlfX3UxNiBwYXJhbXMsIHBhcmFtX29mZnNldCwgb2Zmc2V0LCBieXRlX2NvdW50LCBjb3VudDsKIAogCWNGWUkoMSwgKCJTZXQgVGltZXMgKHZpYSBTZXRGaWxlSW5mbykiKSk7Ci0JcmMgPSBzbWJfaW5pdChTTUJfQ09NX1RSQU5TQUNUSU9OMiwgMTUsIHRjb24sICh2b2lkICoqKSAmcFNNQiwKLQkJICAgICAgKHZvaWQgKiopICZwU01Ccik7CisJcmMgPSBzbWFsbF9zbWJfaW5pdChTTUJfQ09NX1RSQU5TQUNUSU9OMiwgMTUsIHRjb24sICh2b2lkICoqKSAmcFNNQik7CisKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAorCXBTTUJyID0gKHN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uMl9zZmlfcnNwICopcFNNQjsKKwogCS8qIEF0IHRoaXMgcG9pbnQgdGhlcmUgaXMgbm8gbmVlZCB0byBvdmVycmlkZSB0aGUgY3VycmVudCBwaWQKIAl3aXRoIHRoZSBwaWQgb2YgdGhlIG9wZW5lciwgYnV0IHRoYXQgY291bGQgY2hhbmdlIGlmIHdlIHNvbWVkYXkKIAl1c2UgYW4gZXhpc3RpbmcgaGFuZGxlIChyYXRoZXIgdGhhbiBvcGVuaW5nIG9uZSBvbiB0aGUgZmx5KSAqLwpAQCAtMzUwMCw3ICszNTk1LDcgQEAKIAkJY0ZZSSgxLCgiU2VuZCBlcnJvciBpbiBTZXQgVGltZSAoU2V0RmlsZUluZm8pID0gJWQiLHJjKSk7CiAJfQogCi0JY2lmc19idWZfcmVsZWFzZShwU01CKTsKKwljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHBTTUIpOwogCiAJLyogTm90ZTogT24gLUVBR0FJTiBlcnJvciBvbmx5IGNhbGxlciBjYW4gcmV0cnkgb24gaGFuZGxlIGJhc2VkIGNhbGxzIAogCQlzaW5jZSBmaWxlIGhhbmRsZSBwYXNzZWQgaW4gbm8gbG9uZ2VyIHZhbGlkICovCkBAIC0zNTEyLDcgKzM2MDcsNyBAQAogaW50CiBDSUZTU01CU2V0VGltZXMoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwgY29uc3QgY2hhciAqZmlsZU5hbWUsCiAJCWNvbnN0IEZJTEVfQkFTSUNfSU5GTyAqIGRhdGEsIAotCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCisJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQogewogCVRSQU5TQUNUSU9OMl9TUElfUkVRICpwU01CID0gTlVMTDsKIAlUUkFOU0FDVElPTjJfU1BJX1JTUCAqcFNNQnIgPSBOVUxMOwpAQCAtMzUzMiw5ICszNjI3LDggQEAKIAogCWlmIChwU01CLT5oZHIuRmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7CiAJCW5hbWVfbGVuID0KLQkJICAgIGNpZnNfc3RydG9VQ1MoKHdjaGFyX3QgKikgcFNNQi0+RmlsZU5hbWUsIGZpbGVOYW1lLCBQQVRIX01BWAotCQkJCSAgLyogZmluZCBkZWZpbmUgZm9yIHRoaXMgbWF4cGF0aGNvbXBvbmVudCAqLwotCQkJCSAgLCBubHNfY29kZXBhZ2UpOworCQkgICAgY2lmc0NvbnZlcnRUb1VDUygoX191MTYgKikgcFNNQi0+RmlsZU5hbWUsIGZpbGVOYW1lLAorCQkJCSAgICAgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwogCQluYW1lX2xlbisrOwkvKiB0cmFpbGluZyBudWxsICovCiAJCW5hbWVfbGVuICo9IDI7CiAJfSBlbHNlIHsJCS8qIEJCIGltcHJvdmUgdGhlIGNoZWNrIGZvciBidWZmZXIgb3ZlcnJ1bnMgQkIgKi8KQEAgLTM2MTQsNyArMzcwOCw3IEBACiAKIAlpZiAocFNNQi0+aGRyLkZsYWdzMiAmIFNNQkZMRzJfVU5JQ09ERSkgewogCQluYW1lX2xlbiA9Ci0JCQljaWZzX3N0cnRvVUNTKCh3Y2hhcl90ICopIHBTTUItPmZpbGVOYW1lLCBmaWxlTmFtZSwgCisJCQlDb252ZXJ0VG9VQ1MoKHdjaGFyX3QgKikgcFNNQi0+ZmlsZU5hbWUsIGZpbGVOYW1lLCAKIAkJCQlQQVRIX01BWCwgbmxzX2NvZGVwYWdlKTsKIAkJbmFtZV9sZW4rKzsgICAgIC8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKQEAgLTM2NDQsOCArMzczOCw5IEBACiAKIGludAogQ0lGU1NNQlVuaXhTZXRQZXJtcyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAotCQkgICAgY2hhciAqZmlsZU5hbWUsIF9fdTY0IG1vZGUsIF9fdTY0IHVpZCwgX191NjQgZ2lkLAotCQkgICAgZGV2X3QgZGV2aWNlLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCisJCSAgICBjaGFyICpmaWxlTmFtZSwgX191NjQgbW9kZSwgX191NjQgdWlkLCBfX3U2NCBnaWQsIAorCQkgICAgZGV2X3QgZGV2aWNlLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIAorCQkgICAgaW50IHJlbWFwKQogewogCVRSQU5TQUNUSU9OMl9TUElfUkVRICpwU01CID0gTlVMTDsKIAlUUkFOU0FDVElPTjJfU1BJX1JTUCAqcFNNQnIgPSBOVUxMOwpAQCAtMzY2NCw5ICszNzU5LDggQEAKIAogCWlmIChwU01CLT5oZHIuRmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7CiAJCW5hbWVfbGVuID0KLQkJICAgIGNpZnNfc3RydG9VQ1MoKHdjaGFyX3QgKikgcFNNQi0+RmlsZU5hbWUsIGZpbGVOYW1lLCBQQVRIX01BWAotCQkJCSAgLyogZmluZCBkZWZpbmUgZm9yIHRoaXMgbWF4cGF0aGNvbXBvbmVudCAqLwotCQkJCSAgLCBubHNfY29kZXBhZ2UpOworCQkgICAgY2lmc0NvbnZlcnRUb1VDUygoX191MTYgKikgcFNNQi0+RmlsZU5hbWUsIGZpbGVOYW1lLCAKKwkJCQkgICAgIFBBVEhfTUFYLCBubHNfY29kZXBhZ2UsIHJlbWFwKTsKIAkJbmFtZV9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLwogCQluYW1lX2xlbiAqPSAyOwogCX0gZWxzZSB7CQkvKiBCQiBpbXByb3ZlIHRoZSBjaGVjayBmb3IgYnVmZmVyIG92ZXJydW5zIEJCICovCkBAIC0zNzg5LDcgKzM4ODMsNyBAQAogQ0lGU1NNQlFBbGxFQXMoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsCiAJCSBjaGFyICogRUFEYXRhLCBzaXplX3QgYnVmX3NpemUsCi0JCSBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCisJCSBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCkKIHsKIAkJLyogQkIgYXNzdW1lcyBvbmUgc2V0dXAgd29yZCAqLwogCVRSQU5TQUNUSU9OMl9RUElfUkVRICpwU01CID0gTlVMTDsKQEAgLTM4MTAsOSArMzkwNCw4IEBACiAKIAlpZiAocFNNQi0+aGRyLkZsYWdzMiAmIFNNQkZMRzJfVU5JQ09ERSkgewogCQluYW1lX2xlbiA9Ci0JCSAgICBjaWZzX3N0cnRvVUNTKCh3Y2hhcl90ICopIHBTTUItPkZpbGVOYW1lLCBzZWFyY2hOYW1lLCBQQVRIX01BWAotCQkJCSAgLyogZmluZCBkZWZpbmUgZm9yIHRoaXMgbWF4cGF0aGNvbXBvbmVudCAqLwotCQkJCSAgLCBubHNfY29kZXBhZ2UpOworCQkgICAgY2lmc0NvbnZlcnRUb1VDUygod2NoYXJfdCAqKSBwU01CLT5GaWxlTmFtZSwgc2VhcmNoTmFtZSwgCisJCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKIAl9IGVsc2UgewkvKiBCQiBpbXByb3ZlIHRoZSBjaGVjayBmb3IgYnVmZmVyIG92ZXJydW5zIEJCICovCkBAIC0zOTM0LDcgKzQwMjcsNyBAQAogc3NpemVfdCBDSUZTU01CUXVlcnlFQShjb25zdCBpbnQgeGlkLHN0cnVjdCBjaWZzVGNvbkluZm8gKiB0Y29uLAogCQljb25zdCB1bnNpZ25lZCBjaGFyICogc2VhcmNoTmFtZSxjb25zdCB1bnNpZ25lZCBjaGFyICogZWFfbmFtZSwKIAkJdW5zaWduZWQgY2hhciAqIGVhX3ZhbHVlLCBzaXplX3QgYnVmX3NpemUsIAotCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCisJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQogewogCVRSQU5TQUNUSU9OMl9RUElfUkVRICpwU01CID0gTlVMTDsKIAlUUkFOU0FDVElPTjJfUVBJX1JTUCAqcFNNQnIgPSBOVUxMOwpAQCAtMzk1NCw5ICs0MDQ3LDggQEAKIAogCWlmIChwU01CLT5oZHIuRmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7CiAJCW5hbWVfbGVuID0KLQkJICAgIGNpZnNfc3RydG9VQ1MoKHdjaGFyX3QgKikgcFNNQi0+RmlsZU5hbWUsIHNlYXJjaE5hbWUsIFBBVEhfTUFYCi0JCQkJICAvKiBmaW5kIGRlZmluZSBmb3IgdGhpcyBtYXhwYXRoY29tcG9uZW50ICovCi0JCQkJICAsIG5sc19jb2RlcGFnZSk7CisJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX3UxNiAqKSBwU01CLT5GaWxlTmFtZSwgc2VhcmNoTmFtZSwgCisJCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKIAl9IGVsc2UgewkvKiBCQiBpbXByb3ZlIHRoZSBjaGVjayBmb3IgYnVmZmVyIG92ZXJydW5zIEJCICovCkBAIC00MDgyLDcgKzQxNzQsOCBAQAogaW50CiBDSUZTU01CU2V0RUEoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwgY29uc3QgY2hhciAqZmlsZU5hbWUsCiAJCWNvbnN0IGNoYXIgKiBlYV9uYW1lLCBjb25zdCB2b2lkICogZWFfdmFsdWUsIAotCQljb25zdCBfX3UxNiBlYV92YWx1ZV9sZW4sIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSkKKwkJY29uc3QgX191MTYgZWFfdmFsdWVfbGVuLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsCisJCWludCByZW1hcCkKIHsKIAlzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc3BpX3JlcSAqcFNNQiA9IE5VTEw7CiAJc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb24yX3NwaV9yc3AgKnBTTUJyID0gTlVMTDsKQEAgLTQxMDEsOSArNDE5NCw4IEBACiAKIAlpZiAocFNNQi0+aGRyLkZsYWdzMiAmIFNNQkZMRzJfVU5JQ09ERSkgewogCQluYW1lX2xlbiA9Ci0JCSAgICBjaWZzX3N0cnRvVUNTKCh3Y2hhcl90ICopIHBTTUItPkZpbGVOYW1lLCBmaWxlTmFtZSwgUEFUSF9NQVgKLQkJCQkgIC8qIGZpbmQgZGVmaW5lIGZvciB0aGlzIG1heHBhdGhjb21wb25lbnQgKi8KLQkJCQkgICwgbmxzX2NvZGVwYWdlKTsKKwkJICAgIGNpZnNDb252ZXJ0VG9VQ1MoKF9fdTE2ICopIHBTTUItPkZpbGVOYW1lLCBmaWxlTmFtZSwgCisJCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKIAl9IGVsc2UgewkJLyogQkIgaW1wcm92ZSB0aGUgY2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVucyBCQiAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCA0MDQ3MGI5Li5lNTY4Y2M0IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgIGZzL2NpZnMvY29ubmVjdC5jCiAgKgotICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDQKKyAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA1CiAgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCiAgKgogICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgImNpZnNwZHUuaCIKQEAgLTcyLDYgKzczLDcgQEAKIAl1bnNpZ25lZCBub194YXR0cjoxOyAgIC8qIHNldCBpZiB4YXR0ciAoRUEpIHN1cHBvcnQgc2hvdWxkIGJlIGRpc2FibGVkKi8KIAl1bnNpZ25lZCBzZXJ2ZXJfaW5vOjE7IC8qIHVzZSBpbm9kZSBudW1iZXJzIGZyb20gc2VydmVyIGllIFVuaXF1ZUlkICovCiAJdW5zaWduZWQgZGlyZWN0X2lvOjE7CisJdW5zaWduZWQgcmVtYXA6MTsgICAvKiBzZXQgdG8gcmVtYXAgc2V2ZW4gcmVzZXJ2ZWQgY2hhcnMgaW4gZmlsZW5hbWVzICovCiAJdW5zaWduZWQgaW50IHJzaXplOwogCXVuc2lnbmVkIGludCB3c2l6ZTsKIAl1bnNpZ25lZCBpbnQgc29ja29wdDsKQEAgLTExNCw3ICsxMTYsNyBAQAogCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJc2VydmVyLT5tYXhCdWYgPSAwOwogCi0JY0ZZSSgxLCAoIlJlY29ubmVjdGluZyB0Y3Agc2Vzc2lvbiAiKSk7CisJY0ZZSSgxLCAoIlJlY29ubmVjdGluZyB0Y3Agc2Vzc2lvbiIpKTsKIAogCS8qIGJlZm9yZSByZWNvbm5lY3RpbmcgdGhlIHRjcCBzZXNzaW9uLCBtYXJrIHRoZSBzbWIgc2Vzc2lvbiAodWlkKQogCQlhbmQgdGhlIHRpZCBiYWQgc28gdGhleSBhcmUgbm90IHVzZWQgdW50aWwgcmVjb25uZWN0ZWQgKi8KQEAgLTE1NSw5ICsxNTcsMTAgQEAKIAkJCQkJcWhlYWQpOwogCQlpZihtaWRfZW50cnkpIHsKIAkJCWlmKG1pZF9lbnRyeS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSB7Ci0JCQkJLyogTWFyayBvdGhlciBpbnRyYW5zaXQgcmVxdWVzdHMgYXMgbmVlZGluZyByZXRyeSBzbyAKLQkJCQkgIHdlIGRvIG5vdCBpbW1lZGlhdGVseSBtYXJrIHRoZSBzZXNzaW9uIGJhZCBhZ2FpbiAKLQkJCQkgIChpZSBhZnRlciB3ZSByZWNvbm5lY3QgYmVsb3cpIGFzIHRoZXkgdGltZW91dCB0b28gKi8KKwkJCQkvKiBNYXJrIG90aGVyIGludHJhbnNpdCByZXF1ZXN0cyBhcyBuZWVkaW5nCisJCQkJICAgcmV0cnkgc28gd2UgZG8gbm90IGltbWVkaWF0ZWx5IG1hcmsgdGhlCisJCQkJICAgc2Vzc2lvbiBiYWQgYWdhaW4gKGllIGFmdGVyIHdlIHJlY29ubmVjdAorCQkJCSAgIGJlbG93KSBhcyB0aGV5IHRpbWVvdXQgdG9vICovCiAJCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9IE1JRF9SRVRSWV9ORUVERUQ7CiAJCQl9CiAJCX0KQEAgLTE3NSwxNCArMTc4LDE0IEBACiAJCQkJCXNlcnZlci0+d29ya3N0YXRpb25fUkZDMTAwMV9uYW1lKTsKIAkJfQogCQlpZihyYykgewotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCXNjaGVkdWxlX3RpbWVvdXQoMyAqIEhaKTsKKwkJCW1zbGVlcCgzMDAwKTsKIAkJfSBlbHNlIHsKIAkJCWF0b21pY19pbmMoJnRjcFNlc1JlY29ubmVjdENvdW50KTsKIAkJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwogCQkJaWYoc2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc0V4aXRpbmcpCiAJCQkJc2VydmVyLT50Y3BTdGF0dXMgPSBDaWZzR29vZDsKLQkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCQlzZXJ2ZXItPnNlcXVlbmNlX251bWJlciA9IDA7CisJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwkJCQogCS8qCQlhdG9taWNfc2V0KCZzZXJ2ZXItPmluRmxpZ2h0LDApOyovCiAJCQl3YWtlX3VwKCZzZXJ2ZXItPnJlc3BvbnNlX3EpOwogCQl9CkBAIC0xOTAsMTIgKzE5MywxMjkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qIAorCXJldHVybiBjb2RlczoKKwkJMCAJbm90IGEgdHJhbnNhY3QyLCBvciBhbGwgZGF0YSBwcmVzZW50CisJCT4wIAl0cmFuc2FjdDIgd2l0aCB0aGF0IG11Y2ggZGF0YSBtaXNzaW5nCisJCS1FSU5WQUwgPSBpbnZhbGlkIHRyYW5zYWN0MgorCisgKi8KK3N0YXRpYyBpbnQgY2hlY2sybmRUMihzdHJ1Y3Qgc21iX2hkciAqIHBTTUIsIHVuc2lnbmVkIGludCBtYXhCdWZTaXplKQoreworCXN0cnVjdCBzbWJfdDJfcnNwICogcFNNQnQ7CisgICAgICAgIGludCB0b3RhbF9kYXRhX3NpemU7CisJaW50IGRhdGFfaW5fdGhpc19yc3A7CisJaW50IHJlbWFpbmluZzsKKworCWlmKHBTTUItPkNvbW1hbmQgIT0gU01CX0NPTV9UUkFOU0FDVElPTjIpCisJCXJldHVybiAwOworCisgICAgICAgIC8qIGNoZWNrIGZvciBwbGF1c2libGUgd2N0LCBiY2MgYW5kIHQyIGRhdGEgYW5kIHBhcm0gc2l6ZXMgKi8KKyAgICAgICAgLyogY2hlY2sgZm9yIHBhcm0gYW5kIGRhdGEgb2Zmc2V0IGdvaW5nIGJleW9uZCBlbmQgb2Ygc21iICovCisJaWYocFNNQi0+V29yZENvdW50ICE9IDEwKSB7IC8qIGNvYWxlc2NlX3QyIGRlcGVuZHMgb24gdGhpcyAqLworCQljRllJKDEsKCJpbnZhbGlkIHRyYW5zYWN0MiB3b3JkIGNvdW50IikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwU01CdCA9IChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUI7CisKKwl0b3RhbF9kYXRhX3NpemUgPSBsZTE2X3RvX2NwdShwU01CdC0+dDJfcnNwLlRvdGFsRGF0YUNvdW50KTsKKwlkYXRhX2luX3RoaXNfcnNwID0gbGUxNl90b19jcHUocFNNQnQtPnQyX3JzcC5EYXRhQ291bnQpOworCisJcmVtYWluaW5nID0gdG90YWxfZGF0YV9zaXplIC0gZGF0YV9pbl90aGlzX3JzcDsKKworCWlmKHJlbWFpbmluZyA9PSAwKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmKHJlbWFpbmluZyA8IDApIHsKKwkJY0ZZSSgxLCgidG90YWwgZGF0YSAlZCBzbWFsbGVyIHRoYW4gZGF0YSBpbiBmcmFtZSAlZCIsCisJCQl0b3RhbF9kYXRhX3NpemUsIGRhdGFfaW5fdGhpc19yc3ApKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJY0ZZSSgxLCgibWlzc2luZyAlZCBieXRlcyBmcm9tIHRyYW5zYWN0MiwgY2hlY2sgbmV4dCByZXNwb25zZSIsCisJCQlyZW1haW5pbmcpKTsKKwkJaWYodG90YWxfZGF0YV9zaXplID4gbWF4QnVmU2l6ZSkgeworCQkJY0VSUk9SKDEsKCJUb3RhbERhdGFTaXplICVkIGlzIG92ZXIgbWF4aW11bSBidWZmZXIgJWQiLAorCQkJCXRvdGFsX2RhdGFfc2l6ZSxtYXhCdWZTaXplKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsgCisJCX0KKwkJcmV0dXJuIHJlbWFpbmluZzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY29hbGVzY2VfdDIoc3RydWN0IHNtYl9oZHIgKiBwc2Vjb25kLCBzdHJ1Y3Qgc21iX2hkciAqcFRhcmdldFNNQikKK3sKKwlzdHJ1Y3Qgc21iX3QyX3JzcCAqcFNNQjIgPSAoc3RydWN0IHNtYl90Ml9yc3AgKilwc2Vjb25kOworCXN0cnVjdCBzbWJfdDJfcnNwICpwU01CdCAgPSAoc3RydWN0IHNtYl90Ml9yc3AgKilwVGFyZ2V0U01COworCWludCB0b3RhbF9kYXRhX3NpemU7CisJaW50IHRvdGFsX2luX2J1ZjsKKwlpbnQgcmVtYWluaW5nOworCWludCB0b3RhbF9pbl9idWYyOworCWNoYXIgKiBkYXRhX2FyZWFfb2ZfdGFyZ2V0OworCWNoYXIgKiBkYXRhX2FyZWFfb2ZfYnVmMjsKKwlfX3UxNiBieXRlX2NvdW50OworCisJdG90YWxfZGF0YV9zaXplID0gbGUxNl90b19jcHUocFNNQnQtPnQyX3JzcC5Ub3RhbERhdGFDb3VudCk7CisKKwlpZih0b3RhbF9kYXRhX3NpemUgIT0gbGUxNl90b19jcHUocFNNQjItPnQyX3JzcC5Ub3RhbERhdGFDb3VudCkpIHsKKwkJY0ZZSSgxLCgidG90YWwgZGF0YSBzaXplcyBvZiBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgdDIgZGlmZmVyIikpOworCX0KKworCXRvdGFsX2luX2J1ZiA9IGxlMTZfdG9fY3B1KHBTTUJ0LT50Ml9yc3AuRGF0YUNvdW50KTsKKworCXJlbWFpbmluZyA9IHRvdGFsX2RhdGFfc2l6ZSAtIHRvdGFsX2luX2J1ZjsKKwkKKwlpZihyZW1haW5pbmcgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmKHJlbWFpbmluZyA9PSAwKSAvKiBub3RoaW5nIHRvIGRvLCBpZ25vcmUgKi8KKwkJcmV0dXJuIDA7CisJCisJdG90YWxfaW5fYnVmMiA9IGxlMTZfdG9fY3B1KHBTTUIyLT50Ml9yc3AuRGF0YUNvdW50KTsKKwlpZihyZW1haW5pbmcgPCB0b3RhbF9pbl9idWYyKSB7CisJCWNGWUkoMSwoInRyYW5zYWN0MiAybmQgcmVzcG9uc2UgY29udGFpbnMgdG9vIG11Y2ggZGF0YSIpKTsKKwl9CisKKwkvKiBmaW5kIGVuZCBvZiBmaXJzdCBTTUIgZGF0YSBhcmVhICovCisJZGF0YV9hcmVhX29mX3RhcmdldCA9IChjaGFyICopJnBTTUJ0LT5oZHIuUHJvdG9jb2wgKyAKKwkJCQlsZTE2X3RvX2NwdShwU01CdC0+dDJfcnNwLkRhdGFPZmZzZXQpOworCS8qIHZhbGlkYXRlIHRhcmdldCBhcmVhICovCisKKwlkYXRhX2FyZWFfb2ZfYnVmMiA9IChjaGFyICopICZwU01CMi0+aGRyLlByb3RvY29sICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZTE2X3RvX2NwdShwU01CMi0+dDJfcnNwLkRhdGFPZmZzZXQpOworCisJZGF0YV9hcmVhX29mX3RhcmdldCArPSB0b3RhbF9pbl9idWY7CisKKwkvKiBjb3B5IHNlY29uZCBidWZmZXIgaW50byBlbmQgb2YgZmlyc3QgYnVmZmVyICovCisJbWVtY3B5KGRhdGFfYXJlYV9vZl90YXJnZXQsZGF0YV9hcmVhX29mX2J1ZjIsdG90YWxfaW5fYnVmMik7CisJdG90YWxfaW5fYnVmICs9IHRvdGFsX2luX2J1ZjI7CisJcFNNQnQtPnQyX3JzcC5EYXRhQ291bnQgPSBjcHVfdG9fbGUxNih0b3RhbF9pbl9idWYpOworCWJ5dGVfY291bnQgPSBsZTE2X3RvX2NwdShCQ0NfTEUocFRhcmdldFNNQikpOworCWJ5dGVfY291bnQgKz0gdG90YWxfaW5fYnVmMjsKKwlCQ0NfTEUocFRhcmdldFNNQikgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKKworCWJ5dGVfY291bnQgPSBiZTMyX3RvX2NwdShwVGFyZ2V0U01CLT5zbWJfYnVmX2xlbmd0aCk7CisJYnl0ZV9jb3VudCArPSB0b3RhbF9pbl9idWYyOworCisJLyogQkIgYWxzbyBhZGQgY2hlY2sgdGhhdCB3ZSBhcmUgbm90IGJleW9uZCBtYXhpbXVtIGJ1ZmZlciBzaXplICovCisJCQorCXBUYXJnZXRTTUItPnNtYl9idWZfbGVuZ3RoID0gY3B1X3RvX2JlMzIoYnl0ZV9jb3VudCk7CisKKwlpZihyZW1haW5pbmcgPT0gdG90YWxfaW5fYnVmMikgeworCQljRllJKDEsKCJmb3VuZCB0aGUgbGFzdCBzZWNvbmRhcnkgcmVzcG9uc2UiKSk7CisJCXJldHVybiAwOyAvKiB3ZSBhcmUgZG9uZSAqLworCX0gZWxzZSAvKiBtb3JlIHJlc3BvbnNlcyB0byBnbyAqLworCQlyZXR1cm4gMTsKKworfQorCiBzdGF0aWMgaW50CiBjaWZzX2RlbXVsdGlwbGV4X3RocmVhZChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCiB7CiAJaW50IGxlbmd0aDsKIAl1bnNpZ25lZCBpbnQgcGR1X2xlbmd0aCwgdG90YWxfcmVhZDsKIAlzdHJ1Y3Qgc21iX2hkciAqc21iX2J1ZmZlciA9IE5VTEw7CisJc3RydWN0IHNtYl9oZHIgKmJpZ2J1ZiA9IE5VTEw7CisJc3RydWN0IHNtYl9oZHIgKnNtYWxsYnVmID0gTlVMTDsKIAlzdHJ1Y3QgbXNnaGRyIHNtYl9tc2c7CiAJc3RydWN0IGt2ZWMgaW92OwogCXN0cnVjdCBzb2NrZXQgKmNzb2NrZXQgPSBzZXJ2ZXItPnNzb2NrZXQ7CkBAIC0yMDQsNiArMzI0LDkgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfdG9fd2FrZSA9IE5VTEw7CiAJc3RydWN0IG1pZF9xX2VudHJ5ICptaWRfZW50cnk7CiAJY2hhciAqdGVtcDsKKwlpbnQgaXNMYXJnZUJ1ZiA9IEZBTFNFOworCWludCBpc011bHRpUnNwOworCWludCByZWNvbm5lY3Q7CiAKIAlkYWVtb25pemUoImNpZnNkIik7CiAJYWxsb3dfc2lnbmFsKFNJR0tJTEwpOwpAQCAtMjIxLDE3ICszNDQsMzQgQEAKIAl9CiAKIAl3aGlsZSAoc2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc0V4aXRpbmcpIHsKLQkJaWYgKHNtYl9idWZmZXIgPT0gTlVMTCkKLQkJCXNtYl9idWZmZXIgPSBjaWZzX2J1Zl9nZXQoKTsKLQkJZWxzZQotCQkJbWVtc2V0KHNtYl9idWZmZXIsIDAsIHNpemVvZiAoc3RydWN0IHNtYl9oZHIpKTsKLQotCQlpZiAoc21iX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQljRVJST1IoMSwoIkNhbiBub3QgZ2V0IG1lbW9yeSBmb3IgU01CIHJlc3BvbnNlIikpOwotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCXNjaGVkdWxlX3RpbWVvdXQoSFogKiAzKTsgLyogZ2l2ZSBzeXN0ZW0gdGltZSB0byBmcmVlIG1lbW9yeSAqLwotCQkJY29udGludWU7CisJCWlmIChiaWdidWYgPT0gTlVMTCkgeworCQkJYmlnYnVmID0gY2lmc19idWZfZ2V0KCk7CisJCQlpZihiaWdidWYgPT0gTlVMTCkgeworCQkJCWNFUlJPUigxLCgiTm8gbWVtb3J5IGZvciBsYXJnZSBTTUIgcmVzcG9uc2UiKSk7CisJCQkJbXNsZWVwKDMwMDApOworCQkJCS8qIHJldHJ5IHdpbGwgY2hlY2sgaWYgZXhpdGluZyAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVsc2UgaWYoaXNMYXJnZUJ1ZikgeworCQkJLyogd2UgYXJlIHJldXNpbmcgYSBkaXJ0cnkgbGFyZ2UgYnVmLCBjbGVhciBpdHMgc3RhcnQgKi8KKwkJCW1lbXNldChiaWdidWYsIDAsIHNpemVvZiAoc3RydWN0IHNtYl9oZHIpKTsKIAkJfQorCisJCWlmIChzbWFsbGJ1ZiA9PSBOVUxMKSB7CisJCQlzbWFsbGJ1ZiA9IGNpZnNfc21hbGxfYnVmX2dldCgpOworCQkJaWYoc21hbGxidWYgPT0gTlVMTCkgeworCQkJCWNFUlJPUigxLCgiTm8gbWVtb3J5IGZvciBTTUIgcmVzcG9uc2UiKSk7CisJCQkJbXNsZWVwKDEwMDApOworCQkJCS8qIHJldHJ5IHdpbGwgY2hlY2sgaWYgZXhpdGluZyAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogYmVnaW5uaW5nIG9mIHNtYiBidWZmZXIgaXMgY2xlYXJlZCBpbiBvdXIgYnVmX2dldCAqLworCQl9IGVsc2UgLyogaWYgZXhpc3Rpbmcgc21hbGwgYnVmIGNsZWFyIGJlZ2lubmluZyAqLworCQkJbWVtc2V0KHNtYWxsYnVmLCAwLCBzaXplb2YgKHN0cnVjdCBzbWJfaGRyKSk7CisKKwkJaXNMYXJnZUJ1ZiA9IEZBTFNFOworCQlpc011bHRpUnNwID0gRkFMU0U7CisJCXNtYl9idWZmZXIgPSBzbWFsbGJ1ZjsKIAkJaW92Lmlvdl9iYXNlID0gc21iX2J1ZmZlcjsKIAkJaW92Lmlvdl9sZW4gPSA0OwogCQlzbWJfbXNnLm1zZ19jb250cm9sID0gTlVMTDsKQEAgLTI0MywxNzYgKzM4MywyNTcgQEAKIAkJaWYoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHsKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKHNlcnZlci0+dGNwU3RhdHVzID09IENpZnNOZWVkUmVjb25uZWN0KSB7Ci0JCQljRllJKDEsKCJSZWNvbm5lY3RpbmcgYWZ0ZXIgc2VydmVyIHN0b3BwZWQgcmVzcG9uZGluZyIpKTsKKwkJCWNGWUkoMSwoIlJlY29ubmVjdCBhZnRlciBzZXJ2ZXIgc3RvcHBlZCByZXNwb25kaW5nIikpOwogCQkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKIAkJCWNGWUkoMSwoImNhbGwgdG8gcmVjb25uZWN0IGRvbmUiKSk7CiAJCQljc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OwogCQkJY29udGludWU7CiAJCX0gZWxzZSBpZiAoKGxlbmd0aCA9PSAtRVJFU1RBUlRTWVMpIHx8IChsZW5ndGggPT0gLUVBR0FJTikpIHsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlzY2hlZHVsZV90aW1lb3V0KDEpOyAvKiBtaW5pbXVtIHNsZWVwIHRvIHByZXZlbnQgbG9vcGluZworCQkJbXNsZWVwKDEpOyAvKiBtaW5pbXVtIHNsZWVwIHRvIHByZXZlbnQgbG9vcGluZwogCQkJCWFsbG93aW5nIHNvY2tldCB0byBjbGVhciBhbmQgYXBwIHRocmVhZHMgdG8gc2V0CiAJCQkJdGNwU3RhdHVzIENpZnNOZWVkUmVjb25uZWN0IGlmIHNlcnZlciBodW5nICovCiAJCQljb250aW51ZTsKIAkJfSBlbHNlIGlmIChsZW5ndGggPD0gMCkgewogCQkJaWYoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05ldykgewotCQkJCWNGWUkoMSwoInRjcCBzZXNzaW9uIGFiZW5kZWQgcHJlbWF0dXJlbHkgKGFmdGVyIFNNQm5lZ3Byb3QpIikpOwotCQkJCS8qIHNvbWUgc2VydmVycyBraWxsIHRjcCBzZXNzaW9uIHJhdGhlciB0aGFuIHJldHVybmluZwotCQkJCQlzbWIgbmVncHJvdCBlcnJvciBpbiB3aGljaCBjYXNlIHJlY29ubmVjdGluZyBoZXJlIGlzCi0JCQkJCW5vdCBnb2luZyB0byBoZWxwIC0gcmV0dXJuIGVycm9yIHRvIG1vdW50ICovCisJCQkJY0ZZSSgxLCgidGNwIHNlc3Npb24gYWJlbmQgYWZ0ZXIgU01CbmVncHJvdCIpKTsKKwkJCQkvKiBzb21lIHNlcnZlcnMga2lsbCB0aGUgVENQIHNlc3Npb24gcmF0aGVyIHRoYW4KKwkJCQkgICByZXR1cm5pbmcgYW4gU01CIG5lZ3Byb3QgZXJyb3IsIGluIHdoaWNoCisJCQkJICAgY2FzZSByZWNvbm5lY3RpbmcgaGVyZSBpcyBub3QgZ29pbmcgdG8gaGVscCwKKwkJCQkgICBhbmQgc28gc2ltcGx5IHJldHVybiBlcnJvciB0byBtb3VudCAqLwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYobGVuZ3RoID09IC1FSU5UUikgeyAKIAkJCQljRllJKDEsKCJjaWZzZCB0aHJlYWQga2lsbGVkIikpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJY0ZZSSgxLCgiUmVjb25uZWN0aW5nIGFmdGVyIHVuZXhwZWN0ZWQgcGVlayBlcnJvciAlZCIsbGVuZ3RoKSk7CisJCQljRllJKDEsKCJSZWNvbm5lY3QgYWZ0ZXIgdW5leHBlY3RlZCBwZWVrIGVycm9yICVkIiwKKwkJCQlsZW5ndGgpKTsKIAkJCWNpZnNfcmVjb25uZWN0KHNlcnZlcik7CiAJCQljc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OwogCQkJd2FrZV91cCgmc2VydmVyLT5yZXNwb25zZV9xKTsKIAkJCWNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKGxlbmd0aCA+IDMpIHsKLQkJCXBkdV9sZW5ndGggPSBudG9obChzbWJfYnVmZmVyLT5zbWJfYnVmX2xlbmd0aCk7Ci0JCS8qIE9ubHkgcmVhZCBwZHVfbGVuZ3RoIGFmdGVyIGJlbG93IGNoZWNrcyBmb3IgdG9vIHNob3J0IChkdWUKLQkJICAgdG8gZS5nLiBpbnQgb3ZlcmZsb3cpIGFuZCB0b28gbG9uZyBpZSBiZXlvbmQgZW5kIG9mIGJ1ZiAqLwotCQkJY0ZZSSgxLCgicmZjMTAwMiBsZW5ndGgoYmlnIGVuZGlhbikweCV4KSIsIHBkdV9sZW5ndGgrNCkpOwotCi0JCQl0ZW1wID0gKGNoYXIgKikgc21iX2J1ZmZlcjsKLQkJCWlmICh0ZW1wWzBdID09IChjaGFyKSBSRkMxMDAyX1NFU1NJT05fS0VFUF9BTElWRSkgewotCQkJCWNGWUkoMCwoIlJlY2VpdmVkIDQgYnl0ZSBrZWVwIGFsaXZlIHBhY2tldCIpKTsKLQkJCX0gZWxzZSBpZiAodGVtcFswXSA9PSAoY2hhcikgUkZDMTAwMl9QT1NJVElWRV9TRVNTSU9OX1JFU1BPTlNFKSB7Ci0JCQkJCWNGWUkoMSwoIkdvb2QgUkZDIDEwMDIgc2Vzc2lvbiByc3AiKSk7Ci0JCQl9IGVsc2UgaWYgKHRlbXBbMF0gPT0gKGNoYXIpUkZDMTAwMl9ORUdBVElWRV9TRVNTSU9OX1JFU1BPTlNFKSB7Ci0JCQkJLyogd2UgZ2V0IHRoaXMgZnJvbSBXaW5kb3dzIDk4IGluc3RlYWQgb2YgZXJyb3Igb24gU01CIG5lZ3Byb3QgcmVzcG9uc2UgKi8KLQkJCQljRllJKDEsKCJOZWdhdGl2ZSBSRkMgMTAwMiBTZXNzaW9uIFJlc3BvbnNlIEVycm9yIDB4JXgpIix0ZW1wWzRdKSk7Ci0JCQkJaWYoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05ldykgewotCQkJCQkvKiBpZiBuYWNrIG9uIG5lZ3Byb3QgKHJhdGhlciB0aGFuIAotCQkJCQlyZXQgb2Ygc21iIG5lZ3Byb3QgZXJyb3IpIHJlY29ubmVjdGluZwotCQkJCQlub3QgZ29pbmcgdG8gaGVscCwgcmV0IGVycm9yIHRvIG1vdW50ICovCi0JCQkJCWJyZWFrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIGdpdmUgc2VydmVyIGEgc2Vjb25kIHRvCi0JCQkJCWNsZWFuIHVwIGJlZm9yZSByZWNvbm5lY3QgYXR0ZW1wdCAqLwotCQkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKLQkJCQkJLyogYWx3YXlzIHRyeSA0NDUgZmlyc3Qgb24gcmVjb25uZWN0Ci0JCQkJCXNpbmNlIHdlIGdldCBOQUNLIG9uIHNvbWUgaWYgd2UgZXZlcgotCQkJCQljb25uZWN0ZWQgdG8gcG9ydCAxMzkgKHRoZSBOQUNLIGlzIAotCQkJCQlzaW5jZSB3ZSBkbyBub3QgYmVnaW4gd2l0aCBSRkMxMDAxCi0JCQkJCXNlc3Npb24gaW5pdGlhbGl6ZSBmcmFtZSkgKi8KLQkJCQkJc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9wb3J0ID0gaHRvbnMoQ0lGU19QT1JUKTsKLQkJCQkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKLQkJCQkJY3NvY2tldCA9IHNlcnZlci0+c3NvY2tldDsKLQkJCQkJd2FrZV91cCgmc2VydmVyLT5yZXNwb25zZV9xKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfSBlbHNlIGlmICh0ZW1wWzBdICE9IChjaGFyKSAwKSB7Ci0JCQkJY0VSUk9SKDEsKCJVbmtub3duIFJGQyAxMDAyIGZyYW1lIikpOwotCQkJCWNpZnNfZHVtcF9tZW0oIiBSZWNlaXZlZCBEYXRhOiAiLCB0ZW1wLCBsZW5ndGgpOwotCQkJCWNpZnNfcmVjb25uZWN0KHNlcnZlcik7Ci0JCQkJY3NvY2tldCA9IHNlcnZlci0+c3NvY2tldDsKLQkJCQljb250aW51ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYoKHBkdV9sZW5ndGggPiBDSUZTTWF4QnVmU2l6ZSArIE1BWF9DSUZTX0hEUl9TSVpFIC0gNCkKLQkJCQkgICAgfHwgKHBkdV9sZW5ndGggPCBzaXplb2YgKHN0cnVjdCBzbWJfaGRyKSAtIDEgLSA0KSkgewotCQkJCQljRVJST1IoMSwKLQkJCQkJICAgICgiSW52YWxpZCBzaXplIFNNQiBsZW5ndGggJWQgYW5kIHBkdV9sZW5ndGggJWQiLAotCQkJCQkJbGVuZ3RoLCBwZHVfbGVuZ3RoKzQpKTsKLQkJCQkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKLQkJCQkJY3NvY2tldCA9IHNlcnZlci0+c3NvY2tldDsKLQkJCQkJd2FrZV91cCgmc2VydmVyLT5yZXNwb25zZV9xKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfSBlbHNlIHsgLyogbGVuZ3RoIG9rICovCi0JCQkJCWxlbmd0aCA9IDA7Ci0JCQkJCWlvdi5pb3ZfYmFzZSA9IDQgKyAoY2hhciAqKXNtYl9idWZmZXI7Ci0JCQkJCWlvdi5pb3ZfbGVuID0gcGR1X2xlbmd0aDsKLQkJCQkJZm9yICh0b3RhbF9yZWFkID0gMDsgCi0JCQkJCSAgICAgdG90YWxfcmVhZCA8IHBkdV9sZW5ndGg7Ci0JCQkJCSAgICAgdG90YWxfcmVhZCArPSBsZW5ndGgpIHsKLQkJCQkJCWxlbmd0aCA9IGtlcm5lbF9yZWN2bXNnKGNzb2NrZXQsICZzbWJfbXNnLCAKLQkJCQkJCQkmaW92LCAxLAotCQkJCQkJCXBkdV9sZW5ndGggLSB0b3RhbF9yZWFkLCAwKTsKLQkJCQkJCWlmIChsZW5ndGggPT0gMCkgewotCQkJCQkJCWNFUlJPUigxLAotCQkJCQkJCSAgICAgICAoIlplcm8gbGVuZ3RoIHJlY2VpdmUgd2hlbiBleHBlY3RpbmcgJWQgIiwKLQkJCQkJCQkJcGR1X2xlbmd0aCAtIHRvdGFsX3JlYWQpKTsKLQkJCQkJCQljaWZzX3JlY29ubmVjdChzZXJ2ZXIpOwotCQkJCQkJCWNzb2NrZXQgPSBzZXJ2ZXItPnNzb2NrZXQ7Ci0JCQkJCQkJd2FrZV91cCgmc2VydmVyLT5yZXNwb25zZV9xKTsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlsZW5ndGggKz0gNDsgLyogYWNjb3VudCBmb3IgcmZjMTAwMiBoZHIgKi8KLQkJCQl9Ci0KLQkJCQlkdW1wX3NtYihzbWJfYnVmZmVyLCBsZW5ndGgpOwotCQkJCWlmIChjaGVja1NNQgotCQkJCSAgICAoc21iX2J1ZmZlciwgc21iX2J1ZmZlci0+TWlkLCB0b3RhbF9yZWFkKzQpKSB7Ci0JCQkJCWNFUlJPUigxLCAoIkJhZCBTTUIgUmVjZWl2ZWQgIikpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0KLQkJCQl0YXNrX3RvX3dha2UgPSBOVUxMOwotCQkJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwotCQkJCWxpc3RfZm9yX2VhY2godG1wLCAmc2VydmVyLT5wZW5kaW5nX21pZF9xKSB7Ci0JCQkJCW1pZF9lbnRyeSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QKLQkJCQkJCQkgICAgICAgbWlkX3FfZW50cnksCi0JCQkJCQkJICAgICAgIHFoZWFkKTsKLQotCQkJCQlpZiAoKG1pZF9lbnRyeS0+bWlkID09IHNtYl9idWZmZXItPk1pZCkgJiYgKG1pZF9lbnRyeS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSkgewotCQkJCQkJY0ZZSSgxLAotCQkJCQkJICAgICAoIiBNaWQgMHgleCBtYXRjaGVkIC0gd2FraW5nIHVwICIsbWlkX2VudHJ5LT5taWQpKTsKLQkJCQkJCXRhc2tfdG9fd2FrZSA9IG1pZF9lbnRyeS0+dHNrOwotCQkJCQkJbWlkX2VudHJ5LT5yZXNwX2J1ZiA9Ci0JCQkJCQkgICAgc21iX2J1ZmZlcjsKLQkJCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPQotCQkJCQkJICAgIE1JRF9SRVNQT05TRV9SRUNFSVZFRDsKLQkJCQkJfQotCQkJCX0KLQkJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwotCQkJCWlmICh0YXNrX3RvX3dha2UpIHsKLQkJCQkJc21iX2J1ZmZlciA9IE5VTEw7CS8qIHdpbGwgYmUgZnJlZWQgYnkgdXNlcnMgdGhyZWFkIGFmdGVyIGhlIGlzIGRvbmUgKi8KLQkJCQkJd2FrZV91cF9wcm9jZXNzKHRhc2tfdG9fd2FrZSk7Ci0JCQkJfSBlbHNlIGlmIChpc192YWxpZF9vcGxvY2tfYnJlYWsoc21iX2J1ZmZlcikgPT0gRkFMU0UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkJCQljRVJST1IoMSwgKCJObyB0YXNrIHRvIHdha2UsIHVua25vd24gZnJhbWUgcmN2ZCEiKSk7Ci0JCQkJCWNpZnNfZHVtcF9tZW0oIlJlY2VpdmVkIERhdGEgaXM6ICIsdGVtcCxzaXplb2Yoc3RydWN0IHNtYl9oZHIpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7CisJCX0gZWxzZSBpZiAobGVuZ3RoIDwgNCkgewogCQkJY0ZZSSgxLAotCQkJICAgICgiRnJhbWUgbGVzcyB0aGFuIGZvdXIgYnl0ZXMgcmVjZWl2ZWQgICVkIGJ5dGVzIGxvbmcuIiwKKwkJCSAgICAoIkZyYW1lIHVuZGVyIGZvdXIgYnl0ZXMgcmVjZWl2ZWQgKCVkIGJ5dGVzIGxvbmcpIiwKIAkJCSAgICAgIGxlbmd0aCkpOwogCQkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKIAkJCWNzb2NrZXQgPSBzZXJ2ZXItPnNzb2NrZXQ7CiAJCQl3YWtlX3VwKCZzZXJ2ZXItPnJlc3BvbnNlX3EpOwogCQkJY29udGludWU7CiAJCX0KLQl9CisKKwkJLyogdGhlIHJpZ2h0IGFtb3VudCB3YXMgcmVhZCBmcm9tIHNvY2tldCAtIDQgYnl0ZXMgKi8KKworCQlwZHVfbGVuZ3RoID0gbnRvaGwoc21iX2J1ZmZlci0+c21iX2J1Zl9sZW5ndGgpOworCQljRllJKDEsKCJyZmMxMDAyIGxlbmd0aChiaWcgZW5kaWFuKTB4JXgpIiwgcGR1X2xlbmd0aCs0KSk7CisKKwkJdGVtcCA9IChjaGFyICopIHNtYl9idWZmZXI7CisJCWlmICh0ZW1wWzBdID09IChjaGFyKSBSRkMxMDAyX1NFU1NJT05fS0VFUF9BTElWRSkgeworCQkJY29udGludWU7IAorCQl9IGVsc2UgaWYgKHRlbXBbMF0gPT0gKGNoYXIpUkZDMTAwMl9QT1NJVElWRV9TRVNTSU9OX1JFU1BPTlNFKSB7CisJCQljRllJKDEsKCJHb29kIFJGQyAxMDAyIHNlc3Npb24gcnNwIikpOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAodGVtcFswXSA9PSAoY2hhcilSRkMxMDAyX05FR0FUSVZFX1NFU1NJT05fUkVTUE9OU0UpIHsKKwkJCS8qIHdlIGdldCB0aGlzIGZyb20gV2luZG93cyA5OCBpbnN0ZWFkIG9mIAorCQkJICAgYW4gZXJyb3Igb24gU01CIG5lZ3Byb3QgcmVzcG9uc2UgKi8KKwkJCWNGWUkoMSwoIk5lZ2F0aXZlIFJGQzEwMDIgU2Vzc2lvbiBSZXNwb25zZSBFcnJvciAweCV4KSIsCisJCQkJdGVtcFs0XSkpOworCQkJaWYoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05ldykgeworCQkJCS8qIGlmIG5hY2sgb24gbmVncHJvdCAocmF0aGVyIHRoYW4gCisJCQkJcmV0IG9mIHNtYiBuZWdwcm90IGVycm9yKSByZWNvbm5lY3RpbmcKKwkJCQlub3QgZ29pbmcgdG8gaGVscCwgcmV0IGVycm9yIHRvIG1vdW50ICovCisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCS8qIGdpdmUgc2VydmVyIGEgc2Vjb25kIHRvCisJCQkJY2xlYW4gdXAgYmVmb3JlIHJlY29ubmVjdCBhdHRlbXB0ICovCisJCQkJbXNsZWVwKDEwMDApOworCQkJCS8qIGFsd2F5cyB0cnkgNDQ1IGZpcnN0IG9uIHJlY29ubmVjdAorCQkJCXNpbmNlIHdlIGdldCBOQUNLIG9uIHNvbWUgaWYgd2UgZXZlcgorCQkJCWNvbm5lY3RlZCB0byBwb3J0IDEzOSAodGhlIE5BQ0sgaXMgCisJCQkJc2luY2Ugd2UgZG8gbm90IGJlZ2luIHdpdGggUkZDMTAwMQorCQkJCXNlc3Npb24gaW5pdGlhbGl6ZSBmcmFtZSkgKi8KKwkJCQlzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX3BvcnQgPSAKKwkJCQkJaHRvbnMoQ0lGU19QT1JUKTsKKwkJCQljaWZzX3JlY29ubmVjdChzZXJ2ZXIpOworCQkJCWNzb2NrZXQgPSBzZXJ2ZXItPnNzb2NrZXQ7CisJCQkJd2FrZV91cCgmc2VydmVyLT5yZXNwb25zZV9xKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIGlmICh0ZW1wWzBdICE9IChjaGFyKSAwKSB7CisJCQljRVJST1IoMSwoIlVua25vd24gUkZDIDEwMDIgZnJhbWUiKSk7CisJCQljaWZzX2R1bXBfbWVtKCIgUmVjZWl2ZWQgRGF0YTogIiwgdGVtcCwgbGVuZ3RoKTsKKwkJCWNpZnNfcmVjb25uZWN0KHNlcnZlcik7CisJCQljc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OworCQkJY29udGludWU7CisJCX0KKworCQkvKiBlbHNlIHdlIGhhdmUgYW4gU01CIHJlc3BvbnNlICovCisJCWlmKChwZHVfbGVuZ3RoID4gQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSAtIDQpIHx8CisJCQkgICAgKHBkdV9sZW5ndGggPCBzaXplb2YgKHN0cnVjdCBzbWJfaGRyKSAtIDEgLSA0KSkgeworCQkJY0VSUk9SKDEsICgiSW52YWxpZCBzaXplIFNNQiBsZW5ndGggJWQgcGR1X2xlbmd0aCAlZCIsCisJCQkJCWxlbmd0aCwgcGR1X2xlbmd0aCs0KSk7CisJCQljaWZzX3JlY29ubmVjdChzZXJ2ZXIpOworCQkJY3NvY2tldCA9IHNlcnZlci0+c3NvY2tldDsKKwkJCXdha2VfdXAoJnNlcnZlci0+cmVzcG9uc2VfcSk7CisJCQljb250aW51ZTsKKwkJfSAKKworCQkvKiBlbHNlIGxlbmd0aCBvayAqLworCQlyZWNvbm5lY3QgPSAwOworCisJCWlmKHBkdV9sZW5ndGggPiBNQVhfQ0lGU19IRFJfU0laRSAtIDQpIHsKKwkJCWlzTGFyZ2VCdWYgPSBUUlVFOworCQkJbWVtY3B5KGJpZ2J1Ziwgc21hbGxidWYsIDQpOworCQkJc21iX2J1ZmZlciA9IGJpZ2J1ZjsKKwkJfQorCQlsZW5ndGggPSAwOworCQlpb3YuaW92X2Jhc2UgPSA0ICsgKGNoYXIgKilzbWJfYnVmZmVyOworCQlpb3YuaW92X2xlbiA9IHBkdV9sZW5ndGg7CisJCWZvciAodG90YWxfcmVhZCA9IDA7IHRvdGFsX3JlYWQgPCBwZHVfbGVuZ3RoOyAKKwkJICAgICB0b3RhbF9yZWFkICs9IGxlbmd0aCkgeworCQkJbGVuZ3RoID0ga2VybmVsX3JlY3Ztc2coY3NvY2tldCwgJnNtYl9tc2csICZpb3YsIDEsCisJCQkJCQlwZHVfbGVuZ3RoIC0gdG90YWxfcmVhZCwgMCk7CisJCQlpZigoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHx8CisJCQkgICAgKGxlbmd0aCA9PSAtRUlOVFIpKSB7CisJCQkJLyogdGhlbiB3aWxsIGV4aXQgKi8KKwkJCQlyZWNvbm5lY3QgPSAyOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzTmVlZFJlY29ubmVjdCkgeworCQkJCWNpZnNfcmVjb25uZWN0KHNlcnZlcik7CisJCQkJY3NvY2tldCA9IHNlcnZlci0+c3NvY2tldDsKKwkJCSAgICAgICAgLyogUmVjb25uZWN0IHdha2VzIHVwIHJzcG5zIHEgKi8KKwkJCQkvKiBOb3cgd2Ugd2lsbCByZXJlYWQgc29jayAqLworCQkJCXJlY29ubmVjdCA9IDE7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKChsZW5ndGggPT0gLUVSRVNUQVJUU1lTKSB8fCAKKwkJCQkgICAobGVuZ3RoID09IC1FQUdBSU4pKSB7CisJCQkJbXNsZWVwKDEpOyAvKiBtaW5pbXVtIHNsZWVwIHRvIHByZXZlbnQgbG9vcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2luZyBzb2NrZXQgdG8gY2xlYXIgYW5kIGFwcCAKKwkJCQkJICAgICAgdGhyZWFkcyB0byBzZXQgdGNwU3RhdHVzCisJCQkJCSAgICAgIENpZnNOZWVkUmVjb25uZWN0IGlmIHNlcnZlciBodW5nKi8KKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAobGVuZ3RoIDw9IDApIHsKKwkJCQljRVJST1IoMSwoIlJlY2VpdmVkIG5vIGRhdGEsIGV4cGVjdGluZyAlZCIsCisJCQkJCSAgICAgIHBkdV9sZW5ndGggLSB0b3RhbF9yZWFkKSk7CisJCQkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKKwkJCQljc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OworCQkJCXJlY29ubmVjdCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYocmVjb25uZWN0ID09IDIpCisJCQlicmVhazsKKwkJZWxzZSBpZihyZWNvbm5lY3QgPT0gMSkKKwkJCWNvbnRpbnVlOworCisJCWxlbmd0aCArPSA0OyAvKiBhY2NvdW50IGZvciByZmMxMDAyIGhkciAqLworCQorCisJCWR1bXBfc21iKHNtYl9idWZmZXIsIGxlbmd0aCk7CisJCWlmIChjaGVja1NNQiAoc21iX2J1ZmZlciwgc21iX2J1ZmZlci0+TWlkLCB0b3RhbF9yZWFkKzQpKSB7CisJCQljRVJST1IoMSwgKCJCYWQgU01CIFJlY2VpdmVkICIpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKworCQl0YXNrX3RvX3dha2UgPSBOVUxMOworCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJbGlzdF9mb3JfZWFjaCh0bXAsICZzZXJ2ZXItPnBlbmRpbmdfbWlkX3EpIHsKKwkJCW1pZF9lbnRyeSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgbWlkX3FfZW50cnksIHFoZWFkKTsKKworCQkJaWYgKChtaWRfZW50cnktPm1pZCA9PSBzbWJfYnVmZmVyLT5NaWQpICYmIAorCQkJICAgIChtaWRfZW50cnktPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgJiYKKwkJCSAgICAobWlkX2VudHJ5LT5jb21tYW5kID09IHNtYl9idWZmZXItPkNvbW1hbmQpKSB7CisJCQkJaWYoY2hlY2sybmRUMihzbWJfYnVmZmVyLHNlcnZlci0+bWF4QnVmKSA+IDApIHsKKwkJCQkJLyogV2UgaGF2ZSBhIG11bHRpcGFydCB0cmFuc2FjdDIgcmVzcCAqLworCQkJCQlpc011bHRpUnNwID0gVFJVRTsKKwkJCQkJaWYobWlkX2VudHJ5LT5yZXNwX2J1ZikgeworCQkJCQkJLyogbWVyZ2UgcmVzcG9uc2UgLSBmaXggdXAgMXN0Ki8KKwkJCQkJCWlmKGNvYWxlc2NlX3QyKHNtYl9idWZmZXIsIAorCQkJCQkJCW1pZF9lbnRyeS0+cmVzcF9idWYpKSB7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8qIGFsbCBwYXJ0cyByZWNlaXZlZCAqLworCQkJCQkJCWdvdG8gbXVsdGlfdDJfZm5kOyAKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlmKCFpc0xhcmdlQnVmKSB7CisJCQkJCQkJY0VSUk9SKDEsKCIxc3QgdHJhbnMyIHJlc3AgbmVlZHMgYmlnYnVmIikpOworCQkJCQkvKiBCQiBtYXliZSB3ZSBjYW4gZml4IHRoaXMgdXAsICBzd2l0Y2gKKwkJCQkgICAJICAgdG8gYWxyZWFkeSBhbGxvY2F0ZWQgbGFyZ2UgYnVmZmVyPyAqLworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvKiBIYXZlIGZpcnN0IGJ1ZmZlciAqLworCQkJCQkJCW1pZF9lbnRyeS0+cmVzcF9idWYgPQorCQkJCQkJCQkgc21iX2J1ZmZlcjsKKwkJCQkJCQltaWRfZW50cnktPmxhcmdlQnVmID0gMTsKKwkJCQkJCQliaWdidWYgPSBOVUxMOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0gCisJCQkJbWlkX2VudHJ5LT5yZXNwX2J1ZiA9IHNtYl9idWZmZXI7CisJCQkJaWYoaXNMYXJnZUJ1ZikKKwkJCQkJbWlkX2VudHJ5LT5sYXJnZUJ1ZiA9IDE7CisJCQkJZWxzZQorCQkJCQltaWRfZW50cnktPmxhcmdlQnVmID0gMDsKK211bHRpX3QyX2ZuZDoKKwkJCQl0YXNrX3RvX3dha2UgPSBtaWRfZW50cnktPnRzazsKKwkJCQltaWRfZW50cnktPm1pZFN0YXRlID0gTUlEX1JFU1BPTlNFX1JFQ0VJVkVEOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCWlmICh0YXNrX3RvX3dha2UpIHsKKwkJCS8qIFdhcyBwcmV2aW91cyBidWYgcHV0IGluIG1weCBzdHJ1Y3QgZm9yIG11bHRpLXJzcD8gKi8KKwkJCWlmKCFpc011bHRpUnNwKSB7CisJCQkJLyogc21iIGJ1ZmZlciB3aWxsIGJlIGZyZWVkIGJ5IHVzZXIgdGhyZWFkICovCisJCQkJaWYoaXNMYXJnZUJ1ZikgeworCQkJCQliaWdidWYgPSBOVUxMOworCQkJCX0gZWxzZQorCQkJCQlzbWFsbGJ1ZiA9IE5VTEw7CisJCQl9CisJCQl3YWtlX3VwX3Byb2Nlc3ModGFza190b193YWtlKTsKKwkJfSBlbHNlIGlmICgoaXNfdmFsaWRfb3Bsb2NrX2JyZWFrKHNtYl9idWZmZXIpID09IEZBTFNFKQorCQkgICAgJiYgKGlzTXVsdGlSc3AgPT0gRkFMU0UpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJCWNFUlJPUigxLCAoIk5vIHRhc2sgdG8gd2FrZSwgdW5rbm93biBmcmFtZSByY3ZkISIpKTsKKwkJCWNpZnNfZHVtcF9tZW0oIlJlY2VpdmVkIERhdGEgaXM6ICIsdGVtcCxzaXplb2Yoc3RydWN0IHNtYl9oZHIpKTsKKwkJfQorCX0gLyogZW5kIHdoaWxlICFFWElUSU5HICovCisKIAlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAlzZXJ2ZXItPnRjcFN0YXR1cyA9IENpZnNFeGl0aW5nOwogCXNlcnZlci0+dHNrID0gTlVMTDsKLQlhdG9taWNfc2V0KCZzZXJ2ZXItPmluRmxpZ2h0LCAwKTsKKwkvKiBjaGVjayBpZiB3ZSBoYXZlIGJsb2NrZWQgcmVxdWVzdHMgdGhhdCBuZWVkIHRvIGZyZWUgKi8KKwkvKiBOb3RlIHRoYXQgY2lmc19tYXhfcGVuZGluZyBpcyBub3JtYWxseSA1MCwgYnV0CisJY2FuIGJlIHNldCBhdCBtb2R1bGUgaW5zdGFsbCB0aW1lIHRvIGFzIGxpdHRsZSBhcyB0d28gKi8KKwlpZihhdG9taWNfcmVhZCgmc2VydmVyLT5pbkZsaWdodCkgPj0gY2lmc19tYXhfcGVuZGluZykKKwkJYXRvbWljX3NldCgmc2VydmVyLT5pbkZsaWdodCwgY2lmc19tYXhfcGVuZGluZyAtIDEpOworCS8qIFdlIGRvIG5vdCB3YW50IHRvIHNldCB0aGUgbWF4X3BlbmRpbmcgdG9vIGxvdyBvciB3ZQorCWNvdWxkIGVuZCB1cCB3aXRoIHRoZSBjb3VudGVyIGdvaW5nIG5lZ2F0aXZlICovCiAJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAkvKiBBbHRob3VnaCB0aGVyZSBzaG91bGQgbm90IGJlIGFueSByZXF1ZXN0cyBibG9ja2VkIG9uIAogCXRoaXMgcXVldWUgaXQgY2FuIG5vdCBodXJ0IHRvIGJlIHBhcmFub2lkIGFuZCB0cnkgdG8gd2FrZSB1cCByZXF1ZXN0cwotCXRoYXQgbWF5IGhhdmVuIGJlZW4gYmxvY2tlZCB3aGVuIG1vcmUgdGhhbiA1MCBhdCB0aW1lIHdlcmUgb24gdGhlIHdpcmUgCisJdGhhdCBtYXkgaGF2ZW4gYmVlbiBibG9ja2VkIHdoZW4gbW9yZSB0aGFuIDUwIGF0IHRpbWUgd2VyZSBvbiB0aGUgd2lyZQogCXRvIHRoZSBzYW1lIHNlcnZlciAtIHRoZXkgbm93IHdpbGwgc2VlIHRoZSBzZXNzaW9uIGlzIGluIGV4aXQgc3RhdGUKIAlhbmQgZ2V0IG91dCBvZiBTZW5kUmVjZWl2ZS4gICovCiAJd2FrZV91cF9hbGwoJnNlcnZlci0+cmVxdWVzdF9xKTsKIAkvKiBnaXZlIHRob3NlIHJlcXVlc3RzIHRpbWUgdG8gZXhpdCAqLwotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0Jc2NoZWR1bGVfdGltZW91dChIWi84KTsKLQorCW1zbGVlcCgxMjUpOworCQogCWlmKHNlcnZlci0+c3NvY2tldCkgewogCQlzb2NrX3JlbGVhc2UoY3NvY2tldCk7CiAJCXNlcnZlci0+c3NvY2tldCA9IE5VTEw7CiAJfQotCWlmIChzbWJfYnVmZmVyKSAvKiBidWZmZXIgdXN1YWxseSBmcmVlZCBpbiBmcmVlX21pZCAtIG5lZWQgdG8gZnJlZSBpdCBvbiBlcnJvciBvciBleGl0ICovCi0JCWNpZnNfYnVmX3JlbGVhc2Uoc21iX2J1ZmZlcik7CisJLyogYnVmZmVyIHVzdWFsbGx5IGZyZWVkIGluIGZyZWVfbWlkIC0gbmVlZCB0byBmcmVlIGl0IGhlcmUgb24gZXhpdCAqLworCWlmIChiaWdidWYgIT0gTlVMTCkKKwkJY2lmc19idWZfcmVsZWFzZShiaWdidWYpOworCWlmIChzbWFsbGJ1ZiAhPSBOVUxMKQorCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHNtYWxsYnVmKTsKIAogCXJlYWRfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJaWYgKGxpc3RfZW1wdHkoJnNlcnZlci0+cGVuZGluZ19taWRfcSkpIHsKLQkJLyogbG9vcCB0aHJvdWdoIHNlcnZlciBzZXNzaW9uIHN0cnVjdHVyZXMgYXR0YWNoZWQgdG8gdGhpcyBhbmQgbWFyayB0aGVtIGRlYWQgKi8KKwkJLyogbG9vcCB0aHJvdWdoIHNlcnZlciBzZXNzaW9uIHN0cnVjdHVyZXMgYXR0YWNoZWQgdG8gdGhpcyBhbmQKKwkJICAgIG1hcmsgdGhlbSBkZWFkICovCiAJCWxpc3RfZm9yX2VhY2godG1wLCAmR2xvYmFsU01CU2Vzc2lvbkxpc3QpIHsKIAkJCXNlcyA9CiAJCQkgICAgbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjaWZzU2VzSW5mbywKQEAgLTQyNCwxMiArNjQ1LDIzIEBACiAJCX0KIAkJcmVhZF91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCX0gZWxzZSB7CisJCS8qIGFsdGhvdWdoIHdlIGNhbiBub3QgemVybyB0aGUgc2VydmVyIHN0cnVjdCBwb2ludGVyIHlldCwKKwkJc2luY2UgdGhlcmUgYXJlIGFjdGl2ZSByZXF1ZXN0cyB3aGljaCBtYXkgZGVwbmQgb24gdGhlbSwKKwkJbWFyayB0aGUgY29ycmVzcG9uZGluZyBTTUIgc2Vzc2lvbnMgYXMgZXhpdGluZyB0b28gKi8KKwkJbGlzdF9mb3JfZWFjaCh0bXAsICZHbG9iYWxTTUJTZXNzaW9uTGlzdCkgeworCQkJc2VzID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjaWZzU2VzSW5mbywKKwkJCQkJIGNpZnNTZXNzaW9uTGlzdCk7CisJCQlpZiAoc2VzLT5zZXJ2ZXIgPT0gc2VydmVyKSB7CisJCQkJc2VzLT5zdGF0dXMgPSBDaWZzRXhpdGluZzsKKwkJCX0KKwkJfQorCiAJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwogCQlsaXN0X2Zvcl9lYWNoKHRtcCwgJnNlcnZlci0+cGVuZGluZ19taWRfcSkgewogCQltaWRfZW50cnkgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IG1pZF9xX2VudHJ5LCBxaGVhZCk7CiAJCQlpZiAobWlkX2VudHJ5LT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpIHsKIAkJCQljRllJKDEsCi0JCQkJCSAoIiBDbGVhcmluZyBNaWQgMHgleCAtIHdha2luZyB1cCAiLG1pZF9lbnRyeS0+bWlkKSk7CisJCQkJICAoIkNsZWFyaW5nIE1pZCAweCV4IC0gd2FraW5nIHVwICIsbWlkX2VudHJ5LT5taWQpKTsKIAkJCQl0YXNrX3RvX3dha2UgPSBtaWRfZW50cnktPnRzazsKIAkJCQlpZih0YXNrX3RvX3dha2UpIHsKIAkJCQkJd2FrZV91cF9wcm9jZXNzKHRhc2tfdG9fd2FrZSk7CkBAIC00MzgsNDcgKzY3MCw1MSBAQAogCQl9CiAJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJCXJlYWRfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJLyogMS84dGggb2Ygc2VjIGlzIG1vcmUgdGhhbiBlbm91Z2ggdGltZSBmb3IgdGhlbSB0byBleGl0ICovCi0JCXNjaGVkdWxlX3RpbWVvdXQoSFovOCk7IAorCQltc2xlZXAoMTI1KTsKIAl9CiAKIAlpZiAobGlzdF9lbXB0eSgmc2VydmVyLT5wZW5kaW5nX21pZF9xKSkgewogCQkvKiBtcHggdGhyZWFkcyBoYXZlIG5vdCBleGl0ZWQgeWV0IGdpdmUgdGhlbSAKIAkJYXQgbGVhc3QgdGhlIHNtYiBzZW5kIHRpbWVvdXQgdGltZSBmb3IgbG9uZyBvcHMgKi8KKwkJLyogZHVlIHRvIGRlbGF5cyBvbiBvcGxvY2sgYnJlYWsgcmVxdWVzdHMsIHdlIG5lZWQKKwkJdG8gd2FpdCBhdCBsZWFzdCA0NSBzZWNvbmRzIGJlZm9yZSBnaXZpbmcgdXAKKwkJb24gYSByZXF1ZXN0IGdldHRpbmcgYSByZXNwb25zZSBhbmQgZ29pbmcgYWhlYWQKKwkJYW5kIGtpbGxpbmcgY2lmc2QgKi8KIAkJY0ZZSSgxLCAoIldhaXQgZm9yIGV4aXQgZnJvbSBkZW11bHRpcGxleCB0aHJlYWQiKSk7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlX3RpbWVvdXQoNDYgKiBIWik7CQorCQltc2xlZXAoNDYwMDApOwogCQkvKiBpZiB0aHJlYWRzIHN0aWxsIGhhdmUgbm90IGV4aXRlZCB0aGV5IGFyZSBwcm9iYWJseSBuZXZlcgogCQljb21pbmcgaG9tZSBub3QgbXVjaCBlbHNlIHdlIGNhbiBkbyBidXQgZnJlZSB0aGUgbWVtb3J5ICovCiAJfQotCWtmcmVlKHNlcnZlcik7CiAKIAl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAlhdG9taWNfZGVjKCZ0Y3BTZXNBbGxvY0NvdW50KTsKIAlsZW5ndGggPSB0Y3BTZXNBbGxvY0NvdW50LmNvdW50ZXI7CisKKwkvKiBsYXN0IGNoYW5jZSB0byBtYXJrIHNlcyBwb2ludGVycyBpbnZhbGlkCisJaWYgdGhlcmUgYXJlIGFueSBwb2ludGluZyB0byB0aGlzIChlLmcKKwlpZiBhIGNyYXp5IHJvb3QgdXNlciB0cmllZCB0byBraWxsIGNpZnNkIAorCWtlcm5lbCB0aHJlYWQgZXhwbGljaXRseSB0aGlzIG1pZ2h0IGhhcHBlbikgKi8KKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJkdsb2JhbFNNQlNlc3Npb25MaXN0KSB7CisJCXNlcyA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgY2lmc1Nlc0luZm8sCisJCQkJY2lmc1Nlc3Npb25MaXN0KTsKKwkJaWYgKHNlcy0+c2VydmVyID09IHNlcnZlcikgeworCQkJc2VzLT5zZXJ2ZXIgPSBOVUxMOworCQl9CisJfQogCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisKKwlrZnJlZShzZXJ2ZXIpOwogCWlmKGxlbmd0aCAgPiAwKSB7CiAJCW1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLAogCQkJbGVuZ3RoICsgY2lmc19taW5fcmN2LAogCQkJR0ZQX0tFUk5FTCk7CiAJfQotCi0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQlzY2hlZHVsZV90aW1lb3V0KEhaLzQpOworCQorCW1zbGVlcCgyNTApOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCAqIAotY2lmc19rY2FsbG9jKHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QgdHlwZSkKLXsKLQl2b2lkICphZGRyOwotCWFkZHIgPSBrbWFsbG9jKHNpemUsIHR5cGUpOwotCWlmIChhZGRyKQotCQltZW1zZXQoYWRkciwgMCwgc2l6ZSk7Ci0JcmV0dXJuIGFkZHI7Ci19Ci0KIHN0YXRpYyBpbnQKIGNpZnNfcGFyc2VfbW91bnRfb3B0aW9ucyhjaGFyICpvcHRpb25zLCBjb25zdCBjaGFyICpkZXZuYW1lLHN0cnVjdCBzbWJfdm9sICp2b2wpCiB7CkBAIC00OTUsNyArNzMxLDggQEAKIAkJLyogZG9lcyBub3QgaGF2ZSB0byBiZSBhIHBlcmZlY3QgbWFwcGluZyBzaW5jZSB0aGUgZmllbGQgaXMKIAkJaW5mb3JtYXRpb25hbCwgb25seSB1c2VkIGZvciBzZXJ2ZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQKIAkJcG9ydCA0NDUgYW5kIGl0IGNhbiBiZSBvdmVycmlkZGVuIGF0IG1vdW50IHRpbWUgKi8KLQkJdm9sLT5zb3VyY2VfcmZjMTAwMV9uYW1lW2ldID0gdG91cHBlcihzeXN0ZW1fdXRzbmFtZS5ub2RlbmFtZVtpXSk7CisJCXZvbC0+c291cmNlX3JmYzEwMDFfbmFtZVtpXSA9IAorCQkJdG91cHBlcihzeXN0ZW1fdXRzbmFtZS5ub2RlbmFtZVtpXSk7CiAJfQogCXZvbC0+c291cmNlX3JmYzEwMDFfbmFtZVsxNV0gPSAwOwogCkBAIC01NzAsMTQgKzgwNywxNyBAQAogCQkJLyogTkI6IHBhc3N3b3JkIGxlZ2FsbHkgY2FuIGhhdmUgbXVsdGlwbGUgY29tbWFzIGFuZAogCQkJdGhlIG9ubHkgaWxsZWdhbCBjaGFyYWN0ZXIgaW4gYSBwYXNzd29yZCBpcyBudWxsICovCiAKLQkJCWlmICgodmFsdWVbdGVtcF9sZW5dID09IDApICYmICh2YWx1ZVt0ZW1wX2xlbisxXSA9PSBzZXBhcmF0b3JbMF0pKSB7CisJCQlpZiAoKHZhbHVlW3RlbXBfbGVuXSA9PSAwKSAmJiAKKwkJCSAgICAodmFsdWVbdGVtcF9sZW4rMV0gPT0gc2VwYXJhdG9yWzBdKSkgewogCQkJCS8qIHJlaW5zZXJ0IGNvbW1hICovCiAJCQkJdmFsdWVbdGVtcF9sZW5dID0gc2VwYXJhdG9yWzBdOwogCQkJCXRlbXBfbGVuKz0yOyAgLyogbW92ZSBhZnRlciB0aGUgc2Vjb25kIGNvbW1hICovCiAJCQkJd2hpbGUodmFsdWVbdGVtcF9sZW5dICE9IDApICB7CiAJCQkJCWlmICh2YWx1ZVt0ZW1wX2xlbl0gPT0gc2VwYXJhdG9yWzBdKSB7Ci0JCQkJCQlpZiAodmFsdWVbdGVtcF9sZW4rMV0gPT0gc2VwYXJhdG9yWzBdKSB7Ci0JCQkJCQkJdGVtcF9sZW4rKzsgLyogc2tpcCBzZWNvbmQgY29tbWEgKi8KKwkJCQkJCWlmICh2YWx1ZVt0ZW1wX2xlbisxXSA9PSAKKwkJCQkJCSAgICAgc2VwYXJhdG9yWzBdKSB7CisJCQkJCQkvKiBza2lwIHNlY29uZCBjb21tYSAqLworCQkJCQkJCXRlbXBfbGVuKys7CiAJCQkJCQl9IGVsc2UgeyAKIAkJCQkJCS8qIHNpbmdsZSBjb21tYSBpbmRpY2F0aW5nIHN0YXJ0CiAJCQkJCQkJIG9mIG5leHQgcGFybSAqLwpAQCAtNTk2LDE3ICs4MzYsMjYgQEAKIAkJCQkvKiBnbyBmcm9tIHZhbHVlIHRvIHZhbHVlICsgdGVtcF9sZW4gY29uZGVuc2luZyAKIAkJCQlkb3VibGUgY29tbWFzIHRvIHNpbmdsZXMuIE5vdGUgdGhhdCB0aGlzIGVuZHMgdXAKIAkJCQlhbGxvY2F0aW5nIGEgZmV3IGJ5dGVzIHRvbyBtYW55LCB3aGljaCBpcyBvayAqLwotCQkJCXZvbC0+cGFzc3dvcmQgPSBjaWZzX2tjYWxsb2ModGVtcF9sZW4sIEdGUF9LRVJORUwpOworCQkJCXZvbC0+cGFzc3dvcmQgPSBrY2FsbG9jKDEsIHRlbXBfbGVuLCBHRlBfS0VSTkVMKTsKKwkJCQlpZih2b2wtPnBhc3N3b3JkID09IE5VTEwpIHsKKwkJCQkJcHJpbnRrKCJDSUZTOiBubyBtZW1vcnkgZm9yIHBhc3NcbiIpOworCQkJCQlyZXR1cm4gMTsKKwkJCQl9CiAJCQkJZm9yKGk9MCxqPTA7aTx0ZW1wX2xlbjtpKyssaisrKSB7CiAJCQkJCXZvbC0+cGFzc3dvcmRbal0gPSB2YWx1ZVtpXTsKLQkJCQkJaWYodmFsdWVbaV0gPT0gc2VwYXJhdG9yWzBdICYmIHZhbHVlW2krMV0gPT0gc2VwYXJhdG9yWzBdKSB7CisJCQkJCWlmKHZhbHVlW2ldID09IHNlcGFyYXRvclswXQorCQkJCQkJJiYgdmFsdWVbaSsxXSA9PSBzZXBhcmF0b3JbMF0pIHsKIAkJCQkJCS8qIHNraXAgc2Vjb25kIGNvbW1hICovCiAJCQkJCQlpKys7CiAJCQkJCX0KIAkJCQl9CiAJCQkJdm9sLT5wYXNzd29yZFtqXSA9IDA7CiAJCQl9IGVsc2UgewotCQkJCXZvbC0+cGFzc3dvcmQgPSBjaWZzX2tjYWxsb2ModGVtcF9sZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJCQl2b2wtPnBhc3N3b3JkID0ga2NhbGxvYygxLCB0ZW1wX2xlbisxLCBHRlBfS0VSTkVMKTsKKwkJCQlpZih2b2wtPnBhc3N3b3JkID09IE5VTEwpIHsKKwkJCQkJcHJpbnRrKCJDSUZTOiBubyBtZW1vcnkgZm9yIHBhc3NcbiIpOworCQkJCQlyZXR1cm4gMTsKKwkJCQl9CiAJCQkJc3RyY3B5KHZvbC0+cGFzc3dvcmQsIHZhbHVlKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAiaXAiLCAyKSA9PSAwKSB7CkBAIC03NzAsNiArMTAxOSwxMCBAQAogCQkJdm9sLT5ub3Blcm0gPSAwOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub3Blcm0iLCA2KSA9PSAwKSB7CiAJCQl2b2wtPm5vcGVybSA9IDE7CisJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgIm1hcGNoYXJzIiwgOCkgPT0gMCkgeworCQkJdm9sLT5yZW1hcCA9IDE7CisJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgIm5vbWFwY2hhcnMiLCAxMCkgPT0gMCkgeworCQkJdm9sLT5yZW1hcCA9IDA7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgInNldHVpZHMiLCA3KSA9PSAwKSB7CiAJCQl2b2wtPnNldHVpZHMgPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub3NldHVpZHMiLCA5KSA9PSAwKSB7CkBAIC05MTgsMTQgKzExNzEsMTUgQEAKIAogaW50CiBjb25uZWN0X3RvX2Rmc19wYXRoKGludCB4aWQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqcFNlc0luZm8sCi0JCSAgICBjb25zdCBjaGFyICpvbGRfcGF0aCwgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKQorCQkgICAgY29uc3QgY2hhciAqb2xkX3BhdGgsIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwKKwkJICAgIGludCByZW1hcCkKIHsKIAl1bnNpZ25lZCBjaGFyICpyZWZlcnJhbHMgPSBOVUxMOwogCXVuc2lnbmVkIGludCBudW1fcmVmZXJyYWxzOwogCWludCByYyA9IDA7CiAKIAlyYyA9IGdldF9kZnNfcGF0aCh4aWQsIHBTZXNJbmZvLG9sZF9wYXRoLCBubHNfY29kZXBhZ2UsIAotCQkJJm51bV9yZWZlcnJhbHMsICZyZWZlcnJhbHMpOworCQkJJm51bV9yZWZlcnJhbHMsICZyZWZlcnJhbHMsIHJlbWFwKTsKIAogCS8qIEJCIEFkZCBpbiBjb2RlIHRvOiBpZiB2YWxpZCByZWZybCwgaWYgbm90IGlwIGFkZHJlc3MgY29udGFjdAogCQl0aGUgaGVscGVyIHRoYXQgcmVzb2x2ZXMgdGNwIG5hbWVzLCBtb3VudCB0byBpdCwgdHJ5IHRvIApAQCAtOTQwLDcgKzExOTQsOCBAQAogaW50CiBnZXRfZGZzX3BhdGgoaW50IHhpZCwgc3RydWN0IGNpZnNTZXNJbmZvICpwU2VzSW5mbywKIAkJCWNvbnN0IGNoYXIgKm9sZF9wYXRoLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIAotCQkJdW5zaWduZWQgaW50ICpwbnVtX3JlZmVycmFscywgdW5zaWduZWQgY2hhciAqKiBwcmVmZXJyYWxzKQorCQkJdW5zaWduZWQgaW50ICpwbnVtX3JlZmVycmFscywgCisJCQl1bnNpZ25lZCBjaGFyICoqIHByZWZlcnJhbHMsIGludCByZW1hcCkKIHsKIAljaGFyICp0ZW1wX3VuYzsKIAlpbnQgcmMgPSAwOwpAQCAtOTY1LDcgKzEyMjAsNyBAQAogCX0KIAlpZiAocmMgPT0gMCkKIAkJcmMgPSBDSUZTR2V0REZTUmVmZXIoeGlkLCBwU2VzSW5mbywgb2xkX3BhdGgsIHByZWZlcnJhbHMsCi0JCQkJICAgICBwbnVtX3JlZmVycmFscywgbmxzX2NvZGVwYWdlKTsKKwkJCQkgICAgIHBudW1fcmVmZXJyYWxzLCBubHNfY29kZXBhZ2UsIHJlbWFwKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTEwNjIsNyArMTMxNyw3IEBACiAJCXNlc3Npbml0IGlzIHNlbnQgYnV0IG5vIHNlY29uZCBuZWdwcm90ICovCiAJCXN0cnVjdCByZmMxMDAyX3Nlc3Npb25fcGFja2V0ICogc2VzX2luaXRfYnVmOwogCQlzdHJ1Y3Qgc21iX2hkciAqIHNtYl9idWY7Ci0JCXNlc19pbml0X2J1ZiA9IGNpZnNfa2NhbGxvYyhzaXplb2Yoc3RydWN0IHJmYzEwMDJfc2Vzc2lvbl9wYWNrZXQpLCBHRlBfS0VSTkVMKTsKKwkJc2VzX2luaXRfYnVmID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJmYzEwMDJfc2Vzc2lvbl9wYWNrZXQpLCBHRlBfS0VSTkVMKTsKIAkJaWYoc2VzX2luaXRfYnVmKSB7CiAJCQlzZXNfaW5pdF9idWYtPnRyYWlsZXIuc2Vzc2lvbl9yZXEuY2FsbGVkX2xlbiA9IDMyOwogCQkJcmZjMTAwMm1hbmdsZShzZXNfaW5pdF9idWYtPnRyYWlsZXIuc2Vzc2lvbl9yZXEuY2FsbGVkX25hbWUsCkBAIC0xMzUyLDYgKzE2MDcsNyBAQAogCQkJfSBlbHNlCiAJCQkJcmMgPSAwOwogCQkJbWVtY3B5KHNydlRjcC0+d29ya3N0YXRpb25fUkZDMTAwMV9uYW1lLCB2b2x1bWVfaW5mby5zb3VyY2VfcmZjMTAwMV9uYW1lLDE2KTsKKwkJCXNydlRjcC0+c2VxdWVuY2VfbnVtYmVyID0gMDsKIAkJfQogCX0KIApAQCAtMTQxOSw2ICsxNjc1LDggQEAKIAkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfU0VUX1VJRDsKIAkJaWYodm9sdW1lX2luZm8uc2VydmVyX2lubykKIAkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfU0VSVkVSX0lOVU07CisJCWlmKHZvbHVtZV9pbmZvLnJlbWFwKQorCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgfD0gQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFI7CiAJCWlmKHZvbHVtZV9pbmZvLm5vX3hhdHRyKQogCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgfD0gQ0lGU19NT1VOVF9OT19YQVRUUjsKIAkJaWYodm9sdW1lX2luZm8uZGlyZWN0X2lvKSB7CkBAIC0xNDQ3LDExICsxNzA1LDEwIEBACiAJCQkJaWYgKChzdHJjaHIodm9sdW1lX2luZm8uVU5DICsgMywgJ1xcJykgPT0gTlVMTCkKIAkJCQkgICAgJiYgKHN0cmNocih2b2x1bWVfaW5mby5VTkMgKyAzLCAnLycpID09CiAJCQkJCU5VTEwpKSB7Ci0JCQkJCXJjID0gY29ubmVjdF90b19kZnNfcGF0aCh4aWQsCi0JCQkJCQkJCSBwU2VzSW5mbywKLQkJCQkJCQkJICIiLAotCQkJCQkJCQkgY2lmc19zYi0+Ci0JCQkJCQkJCSBsb2NhbF9ubHMpOworCQkJCQlyYyA9IGNvbm5lY3RfdG9fZGZzX3BhdGgoeGlkLCBwU2VzSW5mbywKKwkJCQkJCQkiIiwgY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgCisJCQkJCQkJICBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJCQkJCWlmKHZvbHVtZV9pbmZvLlVOQykKIAkJCQkJCWtmcmVlKHZvbHVtZV9pbmZvLlVOQyk7CiAJCQkJCUZyZWVYaWQoeGlkKTsKQEAgLTE1MTQsMTAgKzE3NzEsMTAgQEAKIAkJdGNvbi0+c2VzID0gcFNlc0luZm87CiAKIAkJLyogZG8gbm90IGNhcmUgaWYgZm9sbG93aW5nIHR3byBjYWxscyBzdWNjZWVkIC0gaW5mb3JtYXRpb25hbCBvbmx5ICovCi0JCUNJRlNTTUJRRlNEZXZpY2VJbmZvKHhpZCwgdGNvbiwgY2lmc19zYi0+bG9jYWxfbmxzKTsKLQkJQ0lGU1NNQlFGU0F0dHJpYnV0ZUluZm8oeGlkLCB0Y29uLCBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQlDSUZTU01CUUZTRGV2aWNlSW5mbyh4aWQsIHRjb24pOworCQlDSUZTU01CUUZTQXR0cmlidXRlSW5mbyh4aWQsIHRjb24pOwogCQlpZiAodGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkgewotCQkJaWYoIUNJRlNTTUJRRlNVbml4SW5mbyh4aWQsIHRjb24sIGNpZnNfc2ItPmxvY2FsX25scykpIHsKKwkJCWlmKCFDSUZTU01CUUZTVW5peEluZm8oeGlkLCB0Y29uKSkgewogCQkJCWlmKCF2b2x1bWVfaW5mby5ub19wc3hfYWNsKSB7CiAJCQkJCWlmKENJRlNfVU5JWF9QT1NJWF9BQ0xfQ0FQICYgCiAJCQkJCSAgIGxlNjRfdG9fY3B1KHRjb24tPmZzVW5peEluZm8uQ2FwYWJpbGl0eSkpCkBAIC0xNzA3LDcgKzE5NjQsOSBAQAogLyogV2UgbG9vayBmb3Igb2J2aW91cyBtZXNzZWQgdXAgYmNjIG9yIHN0cmluZ3MgaW4gcmVzcG9uc2Ugc28gd2UgZG8gbm90IGdvIG9mZgogICAgdGhlIGVuZCBzaW5jZSAoYXQgbGVhc3QpIFdJTjJLIGFuZCBXaW5kb3dzIFhQIGhhdmUgYSBtYWpvciBidWcgaW4gbm90IG51bGwKICAgIHRlcm1pbmF0aW5nIGxhc3QgVW5pY29kZSBzdHJpbmcgaW4gcmVzcG9uc2UgICovCi0JCQkJc2VzLT5zZXJ2ZXJPUyA9IGNpZnNfa2NhbGxvYygyICogKGxlbiArIDEpLCBHRlBfS0VSTkVMKTsKKwkJCQlzZXMtPnNlcnZlck9TID0ga2NhbGxvYygxLCAyICogKGxlbiArIDEpLCBHRlBfS0VSTkVMKTsKKwkJCQlpZihzZXMtPnNlcnZlck9TID09IE5VTEwpCisJCQkJCWdvdG8gc2Vzc3NldHVwX25vbWVtOwogCQkJCWNpZnNfc3RyZnJvbVVDU19sZShzZXMtPnNlcnZlck9TLAogCQkJCQkgICAod2NoYXJfdCAqKWJjY19wdHIsIGxlbixubHNfY29kZXBhZ2UpOwogCQkJCWJjY19wdHIgKz0gMiAqIChsZW4gKyAxKTsKQEAgLTE3MTcsNyArMTk3Niw5IEBACiAJCQkJaWYgKHJlbWFpbmluZ193b3JkcyA+IDApIHsKIAkJCQkJbGVuID0gVW5pU3Rybmxlbigod2NoYXJfdCAqKWJjY19wdHIsCiAJCQkJCQkJIHJlbWFpbmluZ193b3Jkcy0xKTsKLQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPWNpZnNfa2NhbGxvYygyICogKGxlbiArIDEpLEdGUF9LRVJORUwpOworCQkJCQlzZXMtPnNlcnZlck5PUyA9IGtjYWxsb2MoMSwgMiAqIChsZW4gKyAxKSxHRlBfS0VSTkVMKTsKKwkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MgPT0gTlVMTCkKKwkJCQkJCWdvdG8gc2Vzc3NldHVwX25vbWVtOwogCQkJCQljaWZzX3N0cmZyb21VQ1NfbGUoc2VzLT5zZXJ2ZXJOT1MsCiAJCQkJCQkJICAgKHdjaGFyX3QgKiliY2NfcHRyLGxlbixubHNfY29kZXBhZ2UpOwogCQkJCQliY2NfcHRyICs9IDIgKiAobGVuICsgMSk7CkBAIC0xNzMwLDEwICsxOTkxLDEyIEBACiAJCQkJCX0KIAkJCQkJcmVtYWluaW5nX3dvcmRzIC09IGxlbiArIDE7CiAJCQkJCWlmIChyZW1haW5pbmdfd29yZHMgPiAwKSB7Ci0JCQkJCQlsZW4gPSBVbmlTdHJubGVuKCh3Y2hhcl90ICopIGJjY19wdHIsIHJlbWFpbmluZ193b3Jkcyk7CQorCQkJCQkJbGVuID0gVW5pU3Rybmxlbigod2NoYXJfdCAqKSBiY2NfcHRyLCByZW1haW5pbmdfd29yZHMpOwogICAgICAgICAgIC8qIGxhc3Qgc3RyaW5nIGlzIG5vdCBhbHdheXMgbnVsbCB0ZXJtaW5hdGVkIChmb3IgZS5nLiBmb3IgV2luZG93cyBYUCAmIDIwMDApICovCiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9Ci0JCQkJCQkgICAgY2lmc19rY2FsbG9jKDIqKGxlbisxKSxHRlBfS0VSTkVMKTsKKwkJCQkJCSAgICBrY2FsbG9jKDEsIDIqKGxlbisxKSxHRlBfS0VSTkVMKTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluID09IE5VTEwpCisJCQkJCQkJZ290byBzZXNzc2V0dXBfbm9tZW07CiAJCQkJCQljaWZzX3N0cmZyb21VQ1NfbGUoc2VzLT5zZXJ2ZXJEb21haW4sCiAJCQkJCQkgICAgICh3Y2hhcl90ICopYmNjX3B0cixsZW4sbmxzX2NvZGVwYWdlKTsKIAkJCQkJCWJjY19wdHIgKz0gMiAqIChsZW4gKyAxKTsKQEAgLTE3NDEsMjEgKzIwMDQsMjUgQEAKIAkJCQkJCXNlcy0+c2VydmVyRG9tYWluWzErKDIqbGVuKV0gPSAwOwogCQkJCQl9IC8qIGVsc2Ugbm8gbW9yZSByb29tIHNvIGNyZWF0ZSBkdW1teSBkb21haW4gc3RyaW5nICovCiAJCQkJCWVsc2UKLQkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KLQkJCQkJCSAgICBjaWZzX2tjYWxsb2MoMiwKLQkJCQkJCQkgICAgR0ZQX0tFUk5FTCk7CisJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IAorCQkJCQkJCWtjYWxsb2MoMSwgMiwgR0ZQX0tFUk5FTCk7CiAJCQkJfSBlbHNlIHsJLyogbm8gcm9vbSBzbyBjcmVhdGUgZHVtbXkgZG9tYWluIGFuZCBOT1Mgc3RyaW5nICovCisJCQkJCS8qIGlmIHRoZXNlIGtjYWxsb2NzIGZhaWwgbm90IG11Y2ggd2UKKwkJCQkJICAgY2FuIGRvLCBidXQgYmV0dGVyIHRvIG5vdCBmYWlsIHRoZQorCQkJCQkgICBzZXNzc2V0dXAgaXRzZWxmICovCiAJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KLQkJCQkJICAgIGNpZnNfa2NhbGxvYygyLCBHRlBfS0VSTkVMKTsKKwkJCQkJICAgIGtjYWxsb2MoMSwgMiwgR0ZQX0tFUk5FTCk7CiAJCQkJCXNlcy0+c2VydmVyTk9TID0KLQkJCQkJICAgIGNpZnNfa2NhbGxvYygyLCBHRlBfS0VSTkVMKTsKKwkJCQkJICAgIGtjYWxsb2MoMSwgMiwgR0ZQX0tFUk5FTCk7CiAJCQkJfQogCQkJfSBlbHNlIHsJLyogQVNDSUkgKi8KIAkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOwogCQkJCWlmICgoKGxvbmcpIGJjY19wdHIgKyBsZW4pIC0gKGxvbmcpCiAJCQkJICAgIHBCeXRlQXJlYShzbWJfYnVmZmVyX3Jlc3BvbnNlKQogCQkJCQkgICAgPD0gQkNDKHNtYl9idWZmZXJfcmVzcG9uc2UpKSB7Ci0JCQkJCXNlcy0+c2VydmVyT1MgPSBjaWZzX2tjYWxsb2MobGVuICsgMSxHRlBfS0VSTkVMKTsKKwkJCQkJc2VzLT5zZXJ2ZXJPUyA9IGtjYWxsb2MoMSwgbGVuICsgMSxHRlBfS0VSTkVMKTsKKwkJCQkJaWYoc2VzLT5zZXJ2ZXJPUyA9PSBOVUxMKQorCQkJCQkJZ290byBzZXNzc2V0dXBfbm9tZW07CiAJCQkJCXN0cm5jcHkoc2VzLT5zZXJ2ZXJPUyxiY2NfcHRyLCBsZW4pOwogCiAJCQkJCWJjY19wdHIgKz0gbGVuOwpAQCAtMTc2MywxNCArMjAzMCwxOCBAQAogCQkJCQliY2NfcHRyKys7CiAKIAkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKLQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBjaWZzX2tjYWxsb2MobGVuICsgMSxHRlBfS0VSTkVMKTsKKwkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBrY2FsbG9jKDEsIGxlbiArIDEsR0ZQX0tFUk5FTCk7CisJCQkJCWlmKHNlcy0+c2VydmVyTk9TID09IE5VTEwpCisJCQkJCQlnb3RvIHNlc3NzZXR1cF9ub21lbTsKIAkJCQkJc3RybmNweShzZXMtPnNlcnZlck5PUywgYmNjX3B0ciwgbGVuKTsKIAkJCQkJYmNjX3B0ciArPSBsZW47CiAJCQkJCWJjY19wdHJbMF0gPSAwOwogCQkJCQliY2NfcHRyKys7CiAKIAkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKLQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBjaWZzX2tjYWxsb2MobGVuICsgMSxHRlBfS0VSTkVMKTsKKwkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBrY2FsbG9jKDEsIGxlbiArIDEsR0ZQX0tFUk5FTCk7CisJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluID09IE5VTEwpCisJCQkJCQlnb3RvIHNlc3NzZXR1cF9ub21lbTsKIAkJCQkJc3RybmNweShzZXMtPnNlcnZlckRvbWFpbiwgYmNjX3B0ciwgbGVuKTsKIAkJCQkJYmNjX3B0ciArPSBsZW47CiAJCQkJCWJjY19wdHJbMF0gPSAwOwpAQCAtMTc5MCw3ICsyMDYxLDkgQEAKIAkJCXNtYl9idWZmZXJfcmVzcG9uc2UtPldvcmRDb3VudCkpOwogCQlyYyA9IC1FSU87CiAJfQotCQorc2Vzc3NldHVwX25vbWVtOgkvKiBkbyBub3QgcmV0dXJuIGFuIGVycm9yIG9uIG5vbWVtIGZvciB0aGUgaW5mbyBzdHJpbmdzLAorCQkJICAgc2luY2UgdGhhdCBjb3VsZCBtYWtlIHJlY29ubmVjdGlvbiBoYXJkZXIsIGFuZAorCQkJICAgcmVjb25uZWN0aW9uIG1pZ2h0IGJlIG5lZWRlZCB0byBmcmVlIG1lbW9yeSAqLwogCWlmIChzbWJfYnVmZmVyKQogCQljaWZzX2J1Zl9yZWxlYXNlKHNtYl9idWZmZXIpOwogCkBAIC0xOTY3LDcgKzIyNDAsNyBAQAogICAgdGhlIGVuZCBzaW5jZSAoYXQgbGVhc3QpIFdJTjJLIGFuZCBXaW5kb3dzIFhQIGhhdmUgYSBtYWpvciBidWcgaW4gbm90IG51bGwKICAgIHRlcm1pbmF0aW5nIGxhc3QgVW5pY29kZSBzdHJpbmcgaW4gcmVzcG9uc2UgICovCiAJCQkJCXNlcy0+c2VydmVyT1MgPQotCQkJCQkgICAgY2lmc19rY2FsbG9jKDIgKiAobGVuICsgMSksIEdGUF9LRVJORUwpOworCQkJCQkgICAga2NhbGxvYygxLCAyICogKGxlbiArIDEpLCBHRlBfS0VSTkVMKTsKIAkJCQkJY2lmc19zdHJmcm9tVUNTX2xlKHNlcy0+c2VydmVyT1MsCiAJCQkJCQkJICAgKHdjaGFyX3QgKikKIAkJCQkJCQkgICBiY2NfcHRyLCBsZW4sCkBAIC0xOTgxLDcgKzIyNTQsNyBAQAogCQkJCQkJCQkgcmVtYWluaW5nX3dvcmRzCiAJCQkJCQkJCSAtIDEpOwogCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPQotCQkJCQkJICAgIGNpZnNfa2NhbGxvYygyICogKGxlbiArIDEpLAorCQkJCQkJICAgIGtjYWxsb2MoMSwgMiAqIChsZW4gKyAxKSwKIAkJCQkJCQkgICAgR0ZQX0tFUk5FTCk7CiAJCQkJCQljaWZzX3N0cmZyb21VQ1NfbGUoc2VzLT5zZXJ2ZXJOT1MsCiAJCQkJCQkJCSAgICh3Y2hhcl90ICopYmNjX3B0ciwKQEAgLTE5OTQsNyArMjI2Nyw3IEBACiAJCQkJCQlpZiAocmVtYWluaW5nX3dvcmRzID4gMCkgewogCQkJCQkJCWxlbiA9IFVuaVN0cm5sZW4oKHdjaGFyX3QgKikgYmNjX3B0ciwgcmVtYWluaW5nX3dvcmRzKTsJCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGFzdCBzdHJpbmcgaXMgbm90IGFsd2F5cyBudWxsIHRlcm1pbmF0ZWQgKGZvciBlLmcuIGZvciBXaW5kb3dzIFhQICYgMjAwMCkgKi8KLQkJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IGNpZnNfa2NhbGxvYygyKihsZW4rMSksR0ZQX0tFUk5FTCk7CisJCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBrY2FsbG9jKDEsIDIqKGxlbisxKSxHRlBfS0VSTkVMKTsKIAkJCQkJCQljaWZzX3N0cmZyb21VQ1NfbGUoc2VzLT5zZXJ2ZXJEb21haW4sCiAJCQkJCQkJICAgICAod2NoYXJfdCAqKWJjY19wdHIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLApAQCAtMjAwNSwxMCArMjI3OCwxMCBAQAogCQkJCQkJfSAvKiBlbHNlIG5vIG1vcmUgcm9vbSBzbyBjcmVhdGUgZHVtbXkgZG9tYWluIHN0cmluZyAqLwogCQkJCQkJZWxzZQogCQkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KLQkJCQkJCQkgICAgY2lmc19rY2FsbG9jKDIsR0ZQX0tFUk5FTCk7CisJCQkJCQkJICAgIGtjYWxsb2MoMSwgMixHRlBfS0VSTkVMKTsKIAkJCQkJfSBlbHNlIHsJLyogbm8gcm9vbSBzbyBjcmVhdGUgZHVtbXkgZG9tYWluIGFuZCBOT1Mgc3RyaW5nICovCi0JCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IGNpZnNfa2NhbGxvYygyLCBHRlBfS0VSTkVMKTsKLQkJCQkJCXNlcy0+c2VydmVyTk9TID0gY2lmc19rY2FsbG9jKDIsIEdGUF9LRVJORUwpOworCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBrY2FsbG9jKDEsIDIsIEdGUF9LRVJORUwpOworCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBrY2FsbG9jKDEsIDIsIEdGUF9LRVJORUwpOwogCQkJCQl9CiAJCQkJfSBlbHNlIHsJLyogQVNDSUkgKi8KIApAQCAtMjAxNiw3ICsyMjg5LDcgQEAKIAkJCQkJaWYgKCgobG9uZykgYmNjX3B0ciArIGxlbikgLSAobG9uZykKIAkJCQkJICAgIHBCeXRlQXJlYShzbWJfYnVmZmVyX3Jlc3BvbnNlKQogCQkJCQkgICAgPD0gQkNDKHNtYl9idWZmZXJfcmVzcG9uc2UpKSB7Ci0JCQkJCQlzZXMtPnNlcnZlck9TID0gY2lmc19rY2FsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCQkJCQkJc2VzLT5zZXJ2ZXJPUyA9IGtjYWxsb2MoMSwgbGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJCQkJCQlzdHJuY3B5KHNlcy0+c2VydmVyT1MsIGJjY19wdHIsIGxlbik7CiAKIAkJCQkJCWJjY19wdHIgKz0gbGVuOwpAQCAtMjAyNCwxNCArMjI5NywxNCBAQAogCQkJCQkJYmNjX3B0cisrOwogCiAJCQkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOwotCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBjaWZzX2tjYWxsb2MobGVuICsgMSxHRlBfS0VSTkVMKTsKKwkJCQkJCXNlcy0+c2VydmVyTk9TID0ga2NhbGxvYygxLCBsZW4gKyAxLEdGUF9LRVJORUwpOwogCQkJCQkJc3RybmNweShzZXMtPnNlcnZlck5PUywgYmNjX3B0ciwgbGVuKTsKIAkJCQkJCWJjY19wdHIgKz0gbGVuOwogCQkJCQkJYmNjX3B0clswXSA9IDA7CiAJCQkJCQliY2NfcHRyKys7CiAKIAkJCQkJCWxlbiA9IHN0cm5sZW4oYmNjX3B0ciwgMTAyNCk7Ci0JCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IGNpZnNfa2NhbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0ga2NhbGxvYygxLCBsZW4gKyAxLCBHRlBfS0VSTkVMKTsKIAkJCQkJCXN0cm5jcHkoc2VzLT5zZXJ2ZXJEb21haW4sIGJjY19wdHIsIGxlbik7CiAJCQkJCQliY2NfcHRyICs9IGxlbjsKIAkJCQkJCWJjY19wdHJbMF0gPSAwOwpAQCAtMjI4MSw3ICsyNTU0LDcgQEAKICAgIHRoZSBlbmQgc2luY2UgKGF0IGxlYXN0KSBXSU4ySyBhbmQgV2luZG93cyBYUCBoYXZlIGEgbWFqb3IgYnVnIGluIG5vdCBudWxsCiAgICB0ZXJtaW5hdGluZyBsYXN0IFVuaWNvZGUgc3RyaW5nIGluIHJlc3BvbnNlICAqLwogCQkJCQlzZXMtPnNlcnZlck9TID0KLQkJCQkJICAgIGNpZnNfa2NhbGxvYygyICogKGxlbiArIDEpLCBHRlBfS0VSTkVMKTsKKwkJCQkJICAgIGtjYWxsb2MoMSwgMiAqIChsZW4gKyAxKSwgR0ZQX0tFUk5FTCk7CiAJCQkJCWNpZnNfc3RyZnJvbVVDU19sZShzZXMtPnNlcnZlck9TLAogCQkJCQkJCSAgICh3Y2hhcl90ICopCiAJCQkJCQkJICAgYmNjX3B0ciwgbGVuLApAQCAtMjI5Niw3ICsyNTY5LDcgQEAKIAkJCQkJCQkJIHJlbWFpbmluZ193b3JkcwogCQkJCQkJCQkgLSAxKTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0KLQkJCQkJCSAgICBjaWZzX2tjYWxsb2MoMiAqIChsZW4gKyAxKSwKKwkJCQkJCSAgICBrY2FsbG9jKDEsIDIgKiAobGVuICsgMSksCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwogCQkJCQkJY2lmc19zdHJmcm9tVUNTX2xlKHNlcy0+CiAJCQkJCQkJCSAgIHNlcnZlck5PUywKQEAgLTIzMTMsNyArMjU4Niw3IEBACiAJCQkJCQkJbGVuID0gVW5pU3Rybmxlbigod2NoYXJfdCAqKSBiY2NfcHRyLCByZW1haW5pbmdfd29yZHMpOwkKICAgICAgICAgICAgLyogbGFzdCBzdHJpbmcgaXMgbm90IGFsd2F5cyBudWxsIHRlcm1pbmF0ZWQgKGZvciBlLmcuIGZvciBXaW5kb3dzIFhQICYgMjAwMCkgKi8KIAkJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9Ci0JCQkJCQkJICAgIGNpZnNfa2NhbGxvYygyICoKKwkJCQkJCQkgICAga2NhbGxvYygxLCAyICoKIAkJCQkJCQkJICAgIChsZW4gKwogCQkJCQkJCQkgICAgIDEpLAogCQkJCQkJCQkgICAgR0ZQX0tFUk5FTCk7CkBAIC0yMzM5LDEzICsyNjEyLDEzIEBACiAJCQkJCQl9IC8qIGVsc2Ugbm8gbW9yZSByb29tIHNvIGNyZWF0ZSBkdW1teSBkb21haW4gc3RyaW5nICovCiAJCQkJCQllbHNlCiAJCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPQotCQkJCQkJCSAgICBjaWZzX2tjYWxsb2MoMiwKKwkJCQkJCQkgICAga2NhbGxvYygxLCAyLAogCQkJCQkJCQkgICAgR0ZQX0tFUk5FTCk7CiAJCQkJCX0gZWxzZSB7CS8qIG5vIHJvb20gc28gY3JlYXRlIGR1bW15IGRvbWFpbiBhbmQgTk9TIHN0cmluZyAqLwogCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPQotCQkJCQkJICAgIGNpZnNfa2NhbGxvYygyLCBHRlBfS0VSTkVMKTsKKwkJCQkJCSAgICBrY2FsbG9jKDEsIDIsIEdGUF9LRVJORUwpOwogCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPQotCQkJCQkJICAgIGNpZnNfa2NhbGxvYygyLCBHRlBfS0VSTkVMKTsKKwkJCQkJCSAgICBrY2FsbG9jKDEsIDIsIEdGUF9LRVJORUwpOwogCQkJCQl9CiAJCQkJfSBlbHNlIHsJLyogQVNDSUkgKi8KIAkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKQEAgLTIzNTMsNyArMjYyNiw3IEBACiAJCQkJCSAgICBwQnl0ZUFyZWEoc21iX2J1ZmZlcl9yZXNwb25zZSkKIAkJCQkJICAgIDw9IEJDQyhzbWJfYnVmZmVyX3Jlc3BvbnNlKSkgewogCQkJCQkJc2VzLT5zZXJ2ZXJPUyA9Ci0JCQkJCQkgICAgY2lmc19rY2FsbG9jKGxlbiArIDEsCisJCQkJCQkgICAga2NhbGxvYygxLCBsZW4gKyAxLAogCQkJCQkJCSAgICBHRlBfS0VSTkVMKTsKIAkJCQkJCXN0cm5jcHkoc2VzLT5zZXJ2ZXJPUywKIAkJCQkJCQliY2NfcHRyLCBsZW4pOwpAQCAtMjM2NCw3ICsyNjM3LDcgQEAKIAogCQkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0KLQkJCQkJCSAgICBjaWZzX2tjYWxsb2MobGVuICsgMSwKKwkJCQkJCSAgICBrY2FsbG9jKDEsIGxlbiArIDEsCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwogCQkJCQkJc3RybmNweShzZXMtPnNlcnZlck5PUywgYmNjX3B0ciwgbGVuKTsKIAkJCQkJCWJjY19wdHIgKz0gbGVuOwpAQCAtMjM3Myw3ICsyNjQ2LDcgQEAKIAogCQkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKIAkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KLQkJCQkJCSAgICBjaWZzX2tjYWxsb2MobGVuICsgMSwKKwkJCQkJCSAgICBrY2FsbG9jKDEsIGxlbiArIDEsCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwogCQkJCQkJc3RybmNweShzZXMtPnNlcnZlckRvbWFpbiwgYmNjX3B0ciwgbGVuKTsJCiAJCQkJCQliY2NfcHRyICs9IGxlbjsKQEAgLTI2NzUsNyArMjk0OCw3IEBACiAgIHRoZSBlbmQgc2luY2UgKGF0IGxlYXN0KSBXSU4ySyBhbmQgV2luZG93cyBYUCBoYXZlIGEgbWFqb3IgYnVnIGluIG5vdCBudWxsCiAgIHRlcm1pbmF0aW5nIGxhc3QgVW5pY29kZSBzdHJpbmcgaW4gcmVzcG9uc2UgICovCiAJCQkJCXNlcy0+c2VydmVyT1MgPQotCQkJCQkgICAgY2lmc19rY2FsbG9jKDIgKiAobGVuICsgMSksIEdGUF9LRVJORUwpOworCQkJCQkgICAga2NhbGxvYygxLCAyICogKGxlbiArIDEpLCBHRlBfS0VSTkVMKTsKIAkJCQkJY2lmc19zdHJmcm9tVUNTX2xlKHNlcy0+c2VydmVyT1MsCiAJCQkJCQkJICAgKHdjaGFyX3QgKikKIAkJCQkJCQkgICBiY2NfcHRyLCBsZW4sCkBAIC0yNjkwLDcgKzI5NjMsNyBAQAogCQkJCQkJCQkgcmVtYWluaW5nX3dvcmRzCiAJCQkJCQkJCSAtIDEpOwogCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPQotCQkJCQkJICAgIGNpZnNfa2NhbGxvYygyICogKGxlbiArIDEpLAorCQkJCQkJICAgIGtjYWxsb2MoMSwgMiAqIChsZW4gKyAxKSwKIAkJCQkJCQkgICAgR0ZQX0tFUk5FTCk7CiAJCQkJCQljaWZzX3N0cmZyb21VQ1NfbGUoc2VzLT4KIAkJCQkJCQkJICAgc2VydmVyTk9TLApAQCAtMjcwNiw3ICsyOTc5LDcgQEAKIAkJCQkJCQlsZW4gPSBVbmlTdHJubGVuKCh3Y2hhcl90ICopIGJjY19wdHIsIHJlbWFpbmluZ193b3Jkcyk7CQogICAgICAvKiBsYXN0IHN0cmluZyBub3QgYWx3YXlzIG51bGwgdGVybWluYXRlZCAoZS5nLiBmb3IgV2luZG93cyBYUCAmIDIwMDApICovCiAJCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPQotCQkJCQkJCSAgICBjaWZzX2tjYWxsb2MoMiAqCisJCQkJCQkJICAgIGtjYWxsb2MoMSwgMiAqCiAJCQkJCQkJCSAgICAobGVuICsKIAkJCQkJCQkJICAgICAxKSwKIAkJCQkJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtMjczMSwxNyArMzAwNCwxNyBAQAogCQkJCQkJCSAgICA9IDA7CiAJCQkJCQl9IC8qIGVsc2Ugbm8gbW9yZSByb29tIHNvIGNyZWF0ZSBkdW1teSBkb21haW4gc3RyaW5nICovCiAJCQkJCQllbHNlCi0JCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBjaWZzX2tjYWxsb2MoMixHRlBfS0VSTkVMKTsKKwkJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IGtjYWxsb2MoMSwgMixHRlBfS0VSTkVMKTsKIAkJCQkJfSBlbHNlIHsgIC8qIG5vIHJvb20gc28gY3JlYXRlIGR1bW15IGRvbWFpbiBhbmQgTk9TIHN0cmluZyAqLwotCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBjaWZzX2tjYWxsb2MoMiwgR0ZQX0tFUk5FTCk7Ci0JCQkJCQlzZXMtPnNlcnZlck5PUyA9IGNpZnNfa2NhbGxvYygyLCBHRlBfS0VSTkVMKTsKKwkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0ga2NhbGxvYygxLCAyLCBHRlBfS0VSTkVMKTsKKwkJCQkJCXNlcy0+c2VydmVyTk9TID0ga2NhbGxvYygxLCAyLCBHRlBfS0VSTkVMKTsKIAkJCQkJfQogCQkJCX0gZWxzZSB7CS8qIEFTQ0lJICovCiAJCQkJCWxlbiA9IHN0cm5sZW4oYmNjX3B0ciwgMTAyNCk7CiAJCQkJCWlmICgoKGxvbmcpIGJjY19wdHIgKyBsZW4pIC0gCiAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgcEJ5dGVBcmVhKHNtYl9idWZmZXJfcmVzcG9uc2UpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw9IEJDQyhzbWJfYnVmZmVyX3Jlc3BvbnNlKSkgewotCQkJCQkJc2VzLT5zZXJ2ZXJPUyA9IGNpZnNfa2NhbGxvYyhsZW4gKyAxLEdGUF9LRVJORUwpOworCQkJCQkJc2VzLT5zZXJ2ZXJPUyA9IGtjYWxsb2MoMSwgbGVuICsgMSxHRlBfS0VSTkVMKTsKIAkJCQkJCXN0cm5jcHkoc2VzLT5zZXJ2ZXJPUyxiY2NfcHRyLCBsZW4pOwogCiAJCQkJCQliY2NfcHRyICs9IGxlbjsKQEAgLTI3NDksMTQgKzMwMjIsMTQgQEAKIAkJCQkJCWJjY19wdHIrKzsKIAogCQkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKLQkJCQkJCXNlcy0+c2VydmVyTk9TID0gY2lmc19rY2FsbG9jKGxlbisxLEdGUF9LRVJORUwpOworCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBrY2FsbG9jKDEsIGxlbisxLEdGUF9LRVJORUwpOwogCQkJCQkJc3RybmNweShzZXMtPnNlcnZlck5PUywgYmNjX3B0ciwgbGVuKTsJCiAJCQkJCQliY2NfcHRyICs9IGxlbjsKIAkJCQkJCWJjY19wdHJbMF0gPSAwOwogCQkJCQkJYmNjX3B0cisrOwogCiAJCQkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOwotCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBjaWZzX2tjYWxsb2MobGVuKzEsR0ZQX0tFUk5FTCk7CisJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IGtjYWxsb2MoMSwgbGVuKzEsR0ZQX0tFUk5FTCk7CiAJCQkJCQlzdHJuY3B5KHNlcy0+c2VydmVyRG9tYWluLCBiY2NfcHRyLCBsZW4pOwogCQkJCQkJYmNjX3B0ciArPSBsZW47CiAJCQkJCQliY2NfcHRyWzBdID0gMDsKQEAgLTI4NjgsNyArMzE0MSw3IEBACiAJCQkJaWYodGNvbi0+bmF0aXZlRmlsZVN5c3RlbSkKIAkJCQkJa2ZyZWUodGNvbi0+bmF0aXZlRmlsZVN5c3RlbSk7CiAJCQkJdGNvbi0+bmF0aXZlRmlsZVN5c3RlbSA9Ci0JCQkJICAgIGNpZnNfa2NhbGxvYyhsZW5ndGggKyAyLCBHRlBfS0VSTkVMKTsKKwkJCQkgICAga2NhbGxvYygxLCBsZW5ndGggKyAyLCBHRlBfS0VSTkVMKTsKIAkJCQljaWZzX3N0cmZyb21VQ1NfbGUodGNvbi0+bmF0aXZlRmlsZVN5c3RlbSwKIAkJCQkJCSAgICh3Y2hhcl90ICopIGJjY19wdHIsCiAJCQkJCQkgICBsZW5ndGgsIG5sc19jb2RlcGFnZSk7CkBAIC0yODg2LDcgKzMxNTksNyBAQAogCQkJCWlmKHRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0pCiAJCQkJCWtmcmVlKHRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0pOwogCQkJCXRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0gPQotCQkJCSAgICBjaWZzX2tjYWxsb2MobGVuZ3RoICsgMSwgR0ZQX0tFUk5FTCk7CisJCQkJICAgIGtjYWxsb2MoMSwgbGVuZ3RoICsgMSwgR0ZQX0tFUk5FTCk7CiAJCQkJc3RybmNweSh0Y29uLT5uYXRpdmVGaWxlU3lzdGVtLCBiY2NfcHRyLAogCQkJCQlsZW5ndGgpOwogCQkJfQpAQCAtMjk1OSw2ICszMjMyLDcgQEAKIAlpbnQgcmMgPSAwOwogCWNoYXIgbnRsbV9zZXNzaW9uX2tleVtDSUZTX1NFU1NJT05fS0VZX1NJWkVdOwogCWludCBudGxtdjJfZmxhZyA9IEZBTFNFOworCWludCBmaXJzdF90aW1lID0gMDsKIAogCS8qIHdoYXQgaWYgc2VydmVyIGNoYW5nZXMgaXRzIGJ1ZmZlciBzaXplIGFmdGVyIGRyb3BwaW5nIHRoZSBzZXNzaW9uPyAqLwogCWlmKHBTZXNJbmZvLT5zZXJ2ZXItPm1heEJ1ZiA9PSAwKSAvKiBubyBuZWVkIHRvIHNlbmQgb24gcmVjb25uZWN0ICovIHsKQEAgLTI5NzcsMTIgKzMyNTEsMTMgQEAKIAkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAKIAkJfQorCQlmaXJzdF90aW1lID0gMTsKIAl9CiAJaWYgKCFyYykgewogCQlwU2VzSW5mby0+Y2FwYWJpbGl0aWVzID0gcFNlc0luZm8tPnNlcnZlci0+Y2FwYWJpbGl0aWVzOwogCQlpZihsaW51eEV4dEVuYWJsZWQgPT0gMCkKIAkJCXBTZXNJbmZvLT5jYXBhYmlsaXRpZXMgJj0gKH5DQVBfVU5JWCk7Ci0JCXBTZXNJbmZvLT5zZXF1ZW5jZV9udW1iZXIgPSAwOworCS8qCXBTZXNJbmZvLT5zZXF1ZW5jZV9udW1iZXIgPSAwOyovCiAJCWNGWUkoMSwoIlNlY3VyaXR5IE1vZGU6IDB4JXggQ2FwYWJpbGl0aWVzOiAweCV4IFRpbWUgWm9uZTogJWQiLAogCQkJcFNlc0luZm8tPnNlcnZlci0+c2VjTW9kZSwKIAkJCXBTZXNJbmZvLT5zZXJ2ZXItPmNhcGFiaWxpdGllcywKQEAgLTMwMTUsNyArMzI5MCwxMCBAQAogCQkJCQkJdjJfcmVzcG9uc2UgPSBrbWFsbG9jKDE2ICsgNjQgLyogYmxvYiAqLywgR0ZQX0tFUk5FTCk7CiAJCQkJCWlmKHYyX3Jlc3BvbnNlKSB7CiAJCQkJCQlDYWxjTlRMTXYyX3Jlc3BvbnNlKHBTZXNJbmZvLHYyX3Jlc3BvbnNlKTsKLS8qCQkJCQkJY2lmc19jYWxjdWxhdGVfbnRsbXYyX21hY19rZXkocFNlc0luZm8tPm1hY19zaWduaW5nX2tleSwgcmVzcG9uc2UsIG50bG1fc2Vzc2lvbl9rZXksICovCisJCQkJLyoJCWlmKGZpcnN0X3RpbWUpCisJCQkJCQkJY2lmc19jYWxjdWxhdGVfbnRsbXYyX21hY19rZXkoCisJCQkJCQkJICBwU2VzSW5mby0+c2VydmVyLT5tYWNfc2lnbmluZ19rZXksIAorCQkJCQkJCSAgcmVzcG9uc2UsIG50bG1fc2Vzc2lvbl9rZXksICovCiAJCQkJCQlrZnJlZSh2Ml9yZXNwb25zZSk7CiAJCQkJCS8qIEJCIFB1dCBkdW1teSBzaWcgaW4gU2Vzc1NldHVwIFBEVT8gKi8KIAkJCQkJfSBlbHNlIHsKQEAgLTMwMjgsOSArMzMwNiwxMSBAQAogCQkJCQkJcFNlc0luZm8tPnNlcnZlci0+Y3J5cHRLZXksCiAJCQkJCQludGxtX3Nlc3Npb25fa2V5KTsKIAotCQkJCQljaWZzX2NhbGN1bGF0ZV9tYWNfa2V5KHBTZXNJbmZvLT5tYWNfc2lnbmluZ19rZXksCi0JCQkJCQludGxtX3Nlc3Npb25fa2V5LAotCQkJCQkJcFNlc0luZm8tPnBhc3N3b3JkKTsKKwkJCQkJaWYoZmlyc3RfdGltZSkKKwkJCQkJCWNpZnNfY2FsY3VsYXRlX21hY19rZXkoCisJCQkJCQkJcFNlc0luZm8tPnNlcnZlci0+bWFjX3NpZ25pbmdfa2V5LAorCQkJCQkJCW50bG1fc2Vzc2lvbl9rZXksCisJCQkJCQkJcFNlc0luZm8tPnBhc3N3b3JkKTsKIAkJCQl9CiAJCQkvKiBmb3IgYmV0dGVyIHNlY3VyaXR5IHRoZSB3ZWFrZXIgbGFubWFuIGhhc2ggbm90IHNlbnQKIAkJCSAgIGluIEF1dGhTZXNzU2V0dXAgc28gd2Ugbm8gbG9uZ2VyIGNhbGN1bGF0ZSBpdCAqLwpAQCAtMzA0Niw4ICszMzI2LDExIEBACiAJCQkJcFNlc0luZm8tPnNlcnZlci0+Y3J5cHRLZXksCiAJCQkJbnRsbV9zZXNzaW9uX2tleSk7CiAKLQkJCWNpZnNfY2FsY3VsYXRlX21hY19rZXkocFNlc0luZm8tPm1hY19zaWduaW5nX2tleSwgCi0JCQkJbnRsbV9zZXNzaW9uX2tleSwgcFNlc0luZm8tPnBhc3N3b3JkKTsKKwkJCWlmKGZpcnN0X3RpbWUpIAkJCisJCQkJY2lmc19jYWxjdWxhdGVfbWFjX2tleSgKKwkJCQkJcFNlc0luZm8tPnNlcnZlci0+bWFjX3NpZ25pbmdfa2V5LAorCQkJCQludGxtX3Nlc3Npb25fa2V5LCBwU2VzSW5mby0+cGFzc3dvcmQpOworCiAJCQlyYyA9IENJRlNTZXNzU2V0dXAoeGlkLCBwU2VzSW5mbywKIAkJCQludGxtX3Nlc3Npb25fa2V5LCBubHNfaW5mbyk7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZGlyLmMgYi9mcy9jaWZzL2Rpci5jCmluZGV4IGY1NGUxODYuLmUzMTM3YWEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZGlyLmMKKysrIGIvZnMvY2lmcy9kaXIuYwpAQCAtMTAxLDY4ICsxMDEsMTUgQEAKIAlyZXR1cm4gZnVsbF9wYXRoOwogfQogCi0vKiBOb3RlOiBjYWxsZXIgbXVzdCBmcmVlIHJldHVybiBidWZmZXIgKi8KLWNoYXIgKgotYnVpbGRfd2lsZGNhcmRfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSkKKy8qIGNoYXIgKiBidWlsZF93aWxkY2FyZF9wYXRoX2Zyb21fZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5KQogewotCXN0cnVjdCBkZW50cnkgKnRlbXA7Ci0JaW50IG5hbWVsZW4gPSAwOwotCWNoYXIgKmZ1bGxfcGF0aDsKLQotCWlmKGRpcmVudHJ5ID09IE5VTEwpCi0JCXJldHVybiBOVUxMOyAgLyogbm90IG11Y2ggd2UgY2FuIGRvIGlmIGRlbnRyeSBpcyBmcmVlZCBhbmQKLQkJd2UgbmVlZCB0byByZW9wZW4gdGhlIGZpbGUgYWZ0ZXIgaXQgd2FzIGNsb3NlZCBpbXBsaWNpdGx5Ci0JCXdoZW4gdGhlIHNlcnZlciBjcmFzaGVkICovCi0KLWNpZnNfYndwX3JlbmFtZV9yZXRyeToKLQlmb3IgKHRlbXAgPSBkaXJlbnRyeTsgIUlTX1JPT1QodGVtcCk7KSB7Ci0JCW5hbWVsZW4gKz0gKDEgKyB0ZW1wLT5kX25hbWUubGVuKTsKLQkJdGVtcCA9IHRlbXAtPmRfcGFyZW50OwotCQlpZih0ZW1wID09IE5VTEwpIHsKLQkJCWNFUlJPUigxLCgiY29ycnVwdCBkZW50cnkiKSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0KLQotCWZ1bGxfcGF0aCA9IGttYWxsb2MobmFtZWxlbiszLCBHRlBfS0VSTkVMKTsKIAlpZihmdWxsX3BhdGggPT0gTlVMTCkKIAkJcmV0dXJuIGZ1bGxfcGF0aDsKIAogCWZ1bGxfcGF0aFtuYW1lbGVuXSA9ICdcXCc7CiAJZnVsbF9wYXRoW25hbWVsZW4rMV0gPSAnKic7Ci0JZnVsbF9wYXRoW25hbWVsZW4rMl0gPSAwOyAgLyogdHJhaWxpbmcgbnVsbCAqLwotCi0JZm9yICh0ZW1wID0gZGlyZW50cnk7ICFJU19ST09UKHRlbXApOykgewotCQluYW1lbGVuIC09IDEgKyB0ZW1wLT5kX25hbWUubGVuOwotCQlpZiAobmFtZWxlbiA8IDApIHsKLQkJCWJyZWFrOwotCQl9IGVsc2UgewotCQkJZnVsbF9wYXRoW25hbWVsZW5dID0gJ1xcJzsKLQkJCXN0cm5jcHkoZnVsbF9wYXRoICsgbmFtZWxlbiArIDEsIHRlbXAtPmRfbmFtZS5uYW1lLAotCQkJCXRlbXAtPmRfbmFtZS5sZW4pOwotCQkJY0ZZSSgwLCAoIiBuYW1lOiAlcyAiLCBmdWxsX3BhdGggKyBuYW1lbGVuKSk7Ci0JCX0KLQkJdGVtcCA9IHRlbXAtPmRfcGFyZW50OwotCQlpZih0ZW1wID09IE5VTEwpIHsKLQkJCWNFUlJPUigxLCgiY29ycnVwdCBkZW50cnkiKSk7Ci0JCQlrZnJlZShmdWxsX3BhdGgpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9Ci0JaWYgKG5hbWVsZW4gIT0gMCkgewotCQljRVJST1IoMSwKLQkJICAgICAgICgiV2UgZGlkIG5vdCBlbmQgcGF0aCBsb29rdXAgd2hlcmUgd2UgZXhwZWN0ZWQgbmFtZWxlbiBpcyAlZCIsCi0JCQluYW1lbGVuKSk7Ci0JCS8qIHByZXN1bWFibHkgdGhpcyBpcyBvbmx5IHBvc3NpYmxlIGlmIHdlIHdlcmUgcmFjaW5nIHdpdGggYSByZW5hbWUgCi0JCW9mIG9uZSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzICAod2UgY2FuIG5vdCBsb2NrIHRoZSBkZW50cmllcwotCQlhYm92ZSB1cyB0byBwcmV2ZW50IHRoaXMsIGJ1dCByZXRyeWluZyBzaG91bGQgYmUgaGFybWxlc3MpICovCi0JCWtmcmVlKGZ1bGxfcGF0aCk7Ci0JCW5hbWVsZW4gPSAwOwotCQlnb3RvIGNpZnNfYndwX3JlbmFtZV9yZXRyeTsKLQl9Ci0KLQlyZXR1cm4gZnVsbF9wYXRoOwotfQorCWZ1bGxfcGF0aFtuYW1lbGVuKzJdID0gMDsKK0JCIHJlbW92ZSBhYm92ZSBlaWdodCBsaW5lcyBCQiAqLwogCiAvKiBJbm9kZSBvcGVyYXRpb25zIGluIHNpbWlsYXIgb3JkZXIgdG8gaG93IHRoZXkgYXBwZWFyIGluIHRoZSBMaW51eCBmaWxlIGZzLmggKi8KIApAQCAtMjM1LDcgKzE4Miw4IEBACiAKIAlyYyA9IENJRlNTTUJPcGVuKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCiAJCQkgZGVzaXJlZEFjY2VzcywgQ1JFQVRFX05PVF9ESVIsCi0JCQkgJmZpbGVIYW5kbGUsICZvcGxvY2ssIGJ1ZiwgY2lmc19zYi0+bG9jYWxfbmxzKTsKKwkJCSAmZmlsZUhhbmRsZSwgJm9wbG9jaywgYnVmLCBjaWZzX3NiLT5sb2NhbF9ubHMsCisJCQkgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJaWYgKHJjKSB7CiAJCWNGWUkoMSwgKCJjaWZzX2NyZWF0ZSByZXR1cm5lZCAweCV4ICIsIHJjKSk7CiAJfSBlbHNlIHsKQEAgLTI0OCwxMyArMTk2LDE3IEBACiAJCQkJCShfX3U2NCljdXJyZW50LT5ldWlkLAogCQkJCQkoX191NjQpY3VycmVudC0+ZWdpZCwKIAkJCQkJMCAvKiBkZXYgKi8sCi0JCQkJCWNpZnNfc2ItPmxvY2FsX25scyk7CisJCQkJCWNpZnNfc2ItPmxvY2FsX25scywgCisJCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgCisJCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJCQl9IGVsc2UgewogCQkJCUNJRlNTTUJVbml4U2V0UGVybXMoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBtb2RlLAogCQkJCQkoX191NjQpLTEsCiAJCQkJCShfX3U2NCktMSwKIAkJCQkJMCAvKiBkZXYgKi8sCi0JCQkJCWNpZnNfc2ItPmxvY2FsX25scyk7CisJCQkJCWNpZnNfc2ItPmxvY2FsX25scywKKwkJCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiAKKwkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJCX0KIAkJZWxzZSB7CiAJCQkvKiBCQiBpbXBsZW1lbnQgdmlhIFdpbmRvd3Mgc2VjdXJpdHkgZGVzY3JpcHRvcnMgKi8KQEAgLTI4NCw1MSArMjM2LDQ4IEBACiAJCQkvKiBta25vZCBjYXNlIC0gZG8gbm90IGxlYXZlIGZpbGUgb3BlbiAqLwogCQkJQ0lGU1NNQkNsb3NlKHhpZCwgcFRjb24sIGZpbGVIYW5kbGUpOwogCQl9IGVsc2UgaWYobmV3aW5vZGUpIHsKLQkJCXBDaWZzRmlsZSA9IChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopCisJCQlwQ2lmc0ZpbGUgPQogCQkJICAga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjaWZzRmlsZUluZm8pLCBHRlBfS0VSTkVMKTsKLQkJCi0JCQlpZiAocENpZnNGaWxlKSB7Ci0JCQkJbWVtc2V0KChjaGFyICopcENpZnNGaWxlLCAwLAotCQkJCSAgICAgICBzaXplb2YgKHN0cnVjdCBjaWZzRmlsZUluZm8pKTsKLQkJCQlwQ2lmc0ZpbGUtPm5ldGZpZCA9IGZpbGVIYW5kbGU7Ci0JCQkJcENpZnNGaWxlLT5waWQgPSBjdXJyZW50LT50Z2lkOwotCQkJCXBDaWZzRmlsZS0+cElub2RlID0gbmV3aW5vZGU7Ci0JCQkJcENpZnNGaWxlLT5pbnZhbGlkSGFuZGxlID0gRkFMU0U7Ci0JCQkJcENpZnNGaWxlLT5jbG9zZVBlbmQgICAgID0gRkFMU0U7Ci0JCQkJaW5pdF9NVVRFWCgmcENpZnNGaWxlLT5maF9zZW0pOwotCQkJCS8qIHB1dCB0aGUgZm9sbG93aW5nIGluIGF0IG9wZW4gbm93ICovCi0JCQkJLyogcENpZnNGaWxlLT5wZmlsZSA9IGZpbGU7ICovIAotCQkJCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCQkJCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPnRsaXN0LCZwVGNvbi0+b3BlbkZpbGVMaXN0KTsKLQkJCQlwQ2lmc0lub2RlID0gQ0lGU19JKG5ld2lub2RlKTsKLQkJCQlpZihwQ2lmc0lub2RlKSB7CisJCQkKKwkJCWlmKHBDaWZzRmlsZSA9PSBOVUxMKQorCQkJCWdvdG8gY2lmc19jcmVhdGVfb3V0OworCQkJbWVtc2V0KChjaGFyICopcENpZnNGaWxlLCAwLAorCQkJICAgICAgIHNpemVvZiAoc3RydWN0IGNpZnNGaWxlSW5mbykpOworCQkJcENpZnNGaWxlLT5uZXRmaWQgPSBmaWxlSGFuZGxlOworCQkJcENpZnNGaWxlLT5waWQgPSBjdXJyZW50LT50Z2lkOworCQkJcENpZnNGaWxlLT5wSW5vZGUgPSBuZXdpbm9kZTsKKwkJCXBDaWZzRmlsZS0+aW52YWxpZEhhbmRsZSA9IEZBTFNFOworCQkJcENpZnNGaWxlLT5jbG9zZVBlbmQgICAgID0gRkFMU0U7CisJCQlpbml0X01VVEVYKCZwQ2lmc0ZpbGUtPmZoX3NlbSk7CisJCQkvKiBzZXQgdGhlIGZvbGxvd2luZyBpbiBvcGVuIG5vdyAKKwkJCQlwQ2lmc0ZpbGUtPnBmaWxlID0gZmlsZTsgKi8KKwkJCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQkJbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsJnBUY29uLT5vcGVuRmlsZUxpc3QpOworCQkJcENpZnNJbm9kZSA9IENJRlNfSShuZXdpbm9kZSk7CisJCQlpZihwQ2lmc0lub2RlKSB7CiAJCQkJLyogaWYgcmVhZGFibGUgZmlsZSBpbnN0YW5jZSBwdXQgZmlyc3QgaW4gbGlzdCovCi0JCQkJCWlmICh3cml0ZV9vbmx5ID09IFRSVUUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJbGlzdF9hZGRfdGFpbCgmcENpZnNGaWxlLT5mbGlzdCwKLQkJCQkJCQkmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPmZsaXN0LAotCQkJCQkJCSZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOwotCQkJCQl9Ci0JCQkJCWlmKChvcGxvY2sgJiAweEYpID09IE9QTE9DS19FWENMVVNJVkUpIHsKLQkJCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gVFJVRTsKLQkJCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IFRSVUU7Ci0JCQkJCQljRllJKDEsKCJFeGNsdXNpdmUgT3Bsb2NrIGdyYW50ZWQgb24gaW5vZGUgJXAiLAotCQkJCQkJCW5ld2lub2RlKSk7Ci0JCQkJCX0gZWxzZSBpZigob3Bsb2NrICYgMHhGKSA9PSBPUExPQ0tfUkVBRCkKLQkJCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IFRSVUU7CisJCQkJaWYgKHdyaXRlX29ubHkgPT0gVFJVRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWxpc3RfYWRkX3RhaWwoJnBDaWZzRmlsZS0+Zmxpc3QsCisJCQkJCQkmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKKwkJCQl9IGVsc2UgeworCQkJCQlsaXN0X2FkZCgmcENpZnNGaWxlLT5mbGlzdCwKKwkJCQkJCSZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOwogCQkJCX0KLQkJCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQkJCWlmKChvcGxvY2sgJiAweEYpID09IE9QTE9DS19FWENMVVNJVkUpIHsKKwkJCQkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPSBUUlVFOworCQkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSBUUlVFOworCQkJCQljRllJKDEsKCJFeGNsdXNpdmUgT3Bsb2NrIGZvciBpbm9kZSAlcCIsCisJCQkJCQluZXdpbm9kZSkpOworCQkJCX0gZWxzZSBpZigob3Bsb2NrICYgMHhGKSA9PSBPUExPQ0tfUkVBRCkKKwkJCQkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gVFJVRTsKIAkJCX0KKwkJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJCX0KIAl9IAotCi0JaWYgKGJ1ZikKLQkgICAga2ZyZWUoYnVmKTsKLQlpZiAoZnVsbF9wYXRoKQotCSAgICBrZnJlZShmdWxsX3BhdGgpOworY2lmc19jcmVhdGVfb3V0OgorCWtmcmVlKGJ1Zik7CisJa2ZyZWUoZnVsbF9wYXRoKTsKIAlGcmVlWGlkKHhpZCk7Ci0KIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTM1OSwxMSArMzA4LDE1IEBACiAJCWlmKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVRfVUlEKSB7CiAJCQlyYyA9IENJRlNTTUJVbml4U2V0UGVybXMoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLAogCQkJCW1vZGUsKF9fdTY0KWN1cnJlbnQtPmV1aWQsKF9fdTY0KWN1cnJlbnQtPmVnaWQsCi0JCQkJZGV2aWNlX251bWJlciwgY2lmc19zYi0+bG9jYWxfbmxzKTsKKwkJCQlkZXZpY2VfbnVtYmVyLCBjaWZzX3NiLT5sb2NhbF9ubHMsCisJCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiAKKwkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQl9IGVsc2UgewogCQkJcmMgPSBDSUZTU01CVW5peFNldFBlcm1zKHhpZCwgcFRjb24sCiAJCQkJZnVsbF9wYXRoLCBtb2RlLCAoX191NjQpLTEsIChfX3U2NCktMSwKLQkJCQlkZXZpY2VfbnVtYmVyLCBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJCWRldmljZV9udW1iZXIsIGNpZnNfc2ItPmxvY2FsX25scywKKwkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIAorCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJCX0KIAogCQlpZighcmMpIHsKQEAgLTM3NSwxMCArMzI4LDggQEAKIAkJfQogCX0KIAotCWlmIChmdWxsX3BhdGgpCi0JCWtmcmVlKGZ1bGxfcGF0aCk7CisJa2ZyZWUoZnVsbF9wYXRoKTsKIAlGcmVlWGlkKHhpZCk7Ci0KIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQ0Nyw0MyArMzk4LDExIEBACiAJCWlmIGZpbGUgZXhpc3RzIG9yIG5vdCBidXQgbm8gYWNjZXNzIEJCICovCiAJfQogCi0JaWYgKGZ1bGxfcGF0aCkKLQkJa2ZyZWUoZnVsbF9wYXRoKTsKKwlrZnJlZShmdWxsX3BhdGgpOwogCUZyZWVYaWQoeGlkKTsKIAlyZXR1cm4gRVJSX1BUUihyYyk7CiB9CiAKLWludAotY2lmc19kaXJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsJCQkJLyogTkI6IGN1cnJlbnRseSB1bnVzZWQgc2luY2Ugc2VhcmNoZXMgYXJlIG9wZW5lZCBpbiByZWFkZGlyICovCi0JaW50IHJjID0gMDsKLQlpbnQgeGlkOwotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7Ci0Jc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247Ci0JY2hhciAqZnVsbF9wYXRoID0gTlVMTDsKLQotCXhpZCA9IEdldFhpZCgpOwotCi0JY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwotCXBUY29uID0gY2lmc19zYi0+dGNvbjsKLQotCWlmKGZpbGUtPmZfZGVudHJ5KSB7Ci0JCWRvd24oJmZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfc2VtKTsKLQkJZnVsbF9wYXRoID0gYnVpbGRfd2lsZGNhcmRfcGF0aF9mcm9tX2RlbnRyeShmaWxlLT5mX2RlbnRyeSk7Ci0JCXVwKCZmaWxlLT5mX2RlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX3NlbSk7Ci0JfSBlbHNlIHsKLQkJRnJlZVhpZCh4aWQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQljRllJKDEsICgiaW5vZGUgPSAweCVwIGFuZCBmdWxsIHBhdGggaXMgJXMiLCBpbm9kZSwgZnVsbF9wYXRoKSk7Ci0KLQlpZiAoZnVsbF9wYXRoKQotCQlrZnJlZShmdWxsX3BhdGgpOwotCUZyZWVYaWQoeGlkKTsKLQlyZXR1cm4gcmM7Ci19Ci0KIHN0YXRpYyBpbnQKIGNpZnNfZF9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZmNudGwuYyBiL2ZzL2NpZnMvZmNudGwuYwppbmRleCA5ZDI0YzQwLi43ZDJhOTIwIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZjbnRsLmMKKysrIGIvZnMvY2lmcy9mY250bC5jCkBAIC05Miw3ICs5Miw4IEBACiAJCWNFUlJPUigxLCgiY2lmcyBkaXIgbm90aWZ5IG9uIGZpbGUgJXMgd2l0aCBhcmcgMHglbHgiLGZ1bGxfcGF0aCxhcmcpKTsgLyogQkIgcmVtb3ZlbWUgQkIgKi8KIAkJcmMgPSBDSUZTU01CT3Blbih4aWQsIHBUY29uLCBmdWxsX3BhdGgsIEZJTEVfT1BFTiwgCiAJCQlHRU5FUklDX1JFQUQgfCBTWU5DSFJPTklaRSwgMCAvKiBjcmVhdGUgb3B0aW9ucyAqLywKLQkJCSZuZXRmaWQsICZvcGxvY2ssTlVMTCwgY2lmc19zYi0+bG9jYWxfbmxzKTsKKwkJCSZuZXRmaWQsICZvcGxvY2ssTlVMTCwgY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJCS8qIEJCIGZpeG1lIC0gYWRkIHRoaXMgaGFuZGxlIHRvIGEgbm90aWZ5IGhhbmRsZSBsaXN0ICovCiAJCWlmKHJjKSB7CiAJCQljRVJST1IoMSwoIkNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSBmb3Igbm90aWZ5IikpOyAgLyogQkIgcmVtb3ZlIEJCICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGRjYWI3Y2YuLmRkZTJkMjUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0yNTQsNyArMjU0LDggQEAKIAl9CiAJcmMgPSBDSUZTU01CT3Blbih4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLCBkZXNpcmVkQWNjZXNzLAogCQkJIENSRUFURV9OT1RfRElSLCAmbmV0ZmlkLCAmb3Bsb2NrLCBidWYsCi0JCQkgY2lmc19zYi0+bG9jYWxfbmxzKTsKKwkJCSBjaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzCisJCQkJICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCWlmIChyYykgewogCQljRllJKDEsICgiY2lmc19vcGVuIHJldHVybmVkIDB4JXggIiwgcmMpKTsKIAkJZ290byBvdXQ7CkBAIC0yODcsNyArMjg4LDkgQEAKIAkJCUNJRlNTTUJVbml4U2V0UGVybXMoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLAogCQkJCQkgICAgaW5vZGUtPmlfbW9kZSwKIAkJCQkJICAgIChfX3U2NCktMSwgKF9fdTY0KS0xLCAwIC8qIGRldiAqLywKLQkJCQkJICAgIGNpZnNfc2ItPmxvY2FsX25scyk7CisJCQkJCSAgICBjaWZzX3NiLT5sb2NhbF9ubHMsCisJCQkJCSAgICBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIAorCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQl9IGVsc2UgewogCQkJLyogQkIgaW1wbGVtZW50IHZpYSBXaW5kb3dzIHNlY3VyaXR5IGRlc2NyaXB0b3JzIGVnCiAJCQkgICBDSUZTU01CV2luU2V0UGVybXMoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBtb2RlLApAQCAtMzg3LDcgKzM5MCw4IEBACiAJfSAqLwogCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwgZGVzaXJlZEFjY2VzcywKIAkJCSBDUkVBVEVfTk9UX0RJUiwgJm5ldGZpZCwgJm9wbG9jaywgTlVMTCwKLQkJCSBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJIGNpZnNfc2ItPmxvY2FsX25scywgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiAKKwkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJaWYgKHJjKSB7CiAJCXVwKCZwQ2lmc0ZpbGUtPmZoX3NlbSk7CiAJCWNGWUkoMSwgKCJjaWZzX29wZW4gcmV0dXJuZWQgMHgleCAiLCByYykpOwpAQCAtNDY1LDggKzQ2OSwxMCBAQAogCQkJCXdyaXRlX2xvY2soJmZpbGUtPmZfb3duZXIubG9jayk7CiAJCQl9CiAJCX0KKwkJd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJCWxpc3RfZGVsKCZwU01CRmlsZS0+Zmxpc3QpOwogCQlsaXN0X2RlbCgmcFNNQkZpbGUtPnRsaXN0KTsKKwkJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAkJd3JpdGVfdW5sb2NrKCZmaWxlLT5mX293bmVyLmxvY2spOwogCQlrZnJlZShwU01CRmlsZS0+c2VhcmNoX3Jlc3VtZV9uYW1lKTsKIAkJa2ZyZWUoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKQEAgLTUwNiw3ICs1MTIsOCBAQAogCQlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKIAkJY0ZZSSgxLCAoIkZyZWVpbmcgcHJpdmF0ZSBkYXRhIGluIGNsb3NlIGRpciIpKTsKLQkJaWYgKHBDRmlsZVN0cnVjdC0+c3JjaF9pbmYuZW5kT2ZTZWFyY2ggPT0gRkFMU0UpIHsKKwkJaWYgKChwQ0ZpbGVTdHJ1Y3QtPnNyY2hfaW5mLmVuZE9mU2VhcmNoID09IEZBTFNFKSAmJgorCQkgICAocENGaWxlU3RydWN0LT5pbnZhbGlkSGFuZGxlID09IEZBTFNFKSkgewogCQkJcENGaWxlU3RydWN0LT5pbnZhbGlkSGFuZGxlID0gVFJVRTsKIAkJCXJjID0gQ0lGU0ZpbmRDbG9zZSh4aWQsIHBUY29uLCBwQ0ZpbGVTdHJ1Y3QtPm5ldGZpZCk7CiAJCQljRllJKDEsICgiQ2xvc2luZyB1bmNvbXBsZXRlZCByZWFkZGlyIHdpdGggcmMgJWQiLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IGQ3M2IwYWEuLjY3MDk0NzIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTQ0LDcgKzQ0LDggQEAKIAljRllJKDEsICgiIEdldHRpbmcgaW5mbyBvbiAlcyAiLCBzZWFyY2hfcGF0aCkpOwogCS8qIGNvdWxkIGhhdmUgZG9uZSBhIGZpbmQgZmlyc3QgaW5zdGVhZCBidXQgdGhpcyByZXR1cm5zIG1vcmUgaW5mbyAqLwogCXJjID0gQ0lGU1NNQlVuaXhRUGF0aEluZm8oeGlkLCBwVGNvbiwgc2VhcmNoX3BhdGgsICZmaW5kRGF0YSwKLQkJCQkgIGNpZnNfc2ItPmxvY2FsX25scyk7CisJCQkJICBjaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKKwkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogLyoJZHVtcF9tZW0oIlxuVW5peFFQYXRoSW5mbyByZXR1cm4gZGF0YSIsICZmaW5kRGF0YSwKIAkJIHNpemVvZihmaW5kRGF0YSkpOyAqLwogCWlmIChyYykgewpAQCAtNjMsNyArNjQsOSBAQAogCQkJc3RybmNhdCh0bXBfcGF0aCwgc2VhcmNoX3BhdGgsIE1BWF9QQVRIQ09ORik7CiAJCQlyYyA9IGNvbm5lY3RfdG9fZGZzX3BhdGgoeGlkLCBwVGNvbi0+c2VzLAogCQkJCQkJIC8qIHRyZWVuYW1lICsgKi8gdG1wX3BhdGgsCi0JCQkJCQkgY2lmc19zYi0+bG9jYWxfbmxzKTsKKwkJCQkJCSBjaWZzX3NiLT5sb2NhbF9ubHMsIAorCQkJCQkJIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgCisJCQkJCQkgICAgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQkJa2ZyZWUodG1wX3BhdGgpOwogCiAJCQkvKiBCQiBmaXggdXAgaW5vZGUgZXRjLiAqLwpAQCAtMjEwLDcgKzIxMyw4IEBACiAJCXBmaW5kRGF0YSA9IChGSUxFX0FMTF9JTkZPICopYnVmOwogCQkvKiBjb3VsZCBkbyBmaW5kIGZpcnN0IGluc3RlYWQgYnV0IHRoaXMgcmV0dXJucyBtb3JlIGluZm8gKi8KIAkJcmMgPSBDSUZTU01CUVBhdGhJbmZvKHhpZCwgcFRjb24sIHNlYXJjaF9wYXRoLCBwZmluZERhdGEsCi0JCQkgICAgICBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJICAgICAgY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIAorCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAl9CiAJLyogZHVtcF9tZW0oIlxuUVBhdGhJbmZvIHJldHVybiBkYXRhIiwmZmluZERhdGEsIHNpemVvZihmaW5kRGF0YSkpOyAqLwogCWlmIChyYykgewpAQCAtMjMwLDcgKzIzNCw5IEBACiAJCQlzdHJuY2F0KHRtcF9wYXRoLCBzZWFyY2hfcGF0aCwgTUFYX1BBVEhDT05GKTsKIAkJCXJjID0gY29ubmVjdF90b19kZnNfcGF0aCh4aWQsIHBUY29uLT5zZXMsCiAJCQkJCQkgLyogdHJlZW5hbWUgKyAqLyB0bXBfcGF0aCwKLQkJCQkJCSBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJCQkJIGNpZnNfc2ItPmxvY2FsX25scywgCisJCQkJCQkgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiAKKwkJCQkJCSAgIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJCWtmcmVlKHRtcF9wYXRoKTsKIAkJCS8qIEJCIGZpeCB1cCBpbm9kZSBldGMuICovCiAJCX0gZWxzZSBpZiAocmMpIHsKQEAgLTI2OCw3ICsyNzQsOSBAQAogCiAJCQkJcmMxID0gQ0lGU0dldFNydklub2RlTnVtYmVyKHhpZCwgcFRjb24sIAogCQkJCQlzZWFyY2hfcGF0aCwgJmlub2RlX251bSwgCi0JCQkJCWNpZnNfc2ItPmxvY2FsX25scyk7CisJCQkJCWNpZnNfc2ItPmxvY2FsX25scywKKwkJCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgorCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQkJCWlmKHJjMSkgewogCQkJCQljRllJKDEsKCJHZXRTcnZJbm9kZU51bSByYyAlZCIsIHJjMSkpOwogCQkJCQkvKiBCQiBFT1BOT1NVUFAgZGlzYWJsZSBTRVJWRVJfSU5VTT8gKi8KQEAgLTQxMCw3ICs0MTgsOCBAQAogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlyYyA9IENJRlNTTUJEZWxGaWxlKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgY2lmc19zYi0+bG9jYWxfbmxzKTsKKwlyYyA9IENJRlNTTUJEZWxGaWxlKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAKIAlpZiAoIXJjKSB7CiAJCWRpcmVudHJ5LT5kX2lub2RlLT5pX25saW5rLS07CkBAIC00MjIsMTAgKzQzMSwxNCBAQAogCiAJCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBGSUxFX09QRU4sIERFTEVURSwKIAkJCQkgQ1JFQVRFX05PVF9ESVIgfCBDUkVBVEVfREVMRVRFX09OX0NMT1NFLAotCQkJCSAmbmV0ZmlkLCAmb3Bsb2NrLCBOVUxMLCBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJCSAmbmV0ZmlkLCAmb3Bsb2NrLCBOVUxMLCBjaWZzX3NiLT5sb2NhbF9ubHMsCisJCQkJIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgCisJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJaWYgKHJjPT0wKSB7CiAJCQlDSUZTU01CUmVuYW1lT3BlbkZpbGUoeGlkLCBwVGNvbiwgbmV0ZmlkLCBOVUxMLAotCQkJCQkgICAgICBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJCQkgICAgICBjaWZzX3NiLT5sb2NhbF9ubHMsIAorCQkJCQkgICAgICBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIAorCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQkJQ0lGU1NNQkNsb3NlKHhpZCwgcFRjb24sIG5ldGZpZCk7CiAJCQlkaXJlbnRyeS0+ZF9pbm9kZS0+aV9ubGluay0tOwogCQl9CkBAIC00MzksNyArNDUyLDkgQEAKIAkJCWlmICghKHBUY29uLT5zZXMtPmZsYWdzICYgQ0lGU19TRVNfTlQ0KSkKIAkJCQlyYyA9IENJRlNTTUJTZXRUaW1lcyh4aWQsIHBUY29uLCBmdWxsX3BhdGgsCiAJCQkJCQkgICAgIHBpbmZvX2J1ZiwKLQkJCQkJCSAgICAgY2lmc19zYi0+bG9jYWxfbmxzKTsKKwkJCQkJCSAgICAgY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJCQkJICAgICBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIAorCQkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJCWVsc2UKIAkJCQlyYyA9IC1FT1BOT1RTVVBQOwogCkBAIC00NjEsNyArNDc2LDkgQEAKIAkJCQkJCSBGSUxFX09QRU4sIFNZTkNIUk9OSVpFIHwKIAkJCQkJCSBGSUxFX1dSSVRFX0FUVFJJQlVURVMsIDAsCiAJCQkJCQkgJm5ldGZpZCwgJm9wbG9jaywgTlVMTCwKLQkJCQkJCSBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJCQkJIGNpZnNfc2ItPmxvY2FsX25scywKKwkJCQkJCSBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIAorCQkJCQkJICAgIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJCQlpZiAocmM9PTApIHsKIAkJCQkJcmMgPSBDSUZTU01CU2V0RmlsZVRpbWVzKHhpZCwgcFRjb24sCiAJCQkJCQkJCSBwaW5mb19idWYsCkBAIC00NzIsOCArNDg5LDEwIEBACiAJCQlrZnJlZShwaW5mb19idWYpOwogCQl9CiAJCWlmIChyYz09MCkgewotCQkJcmMgPSBDSUZTU01CRGVsRmlsZSh4aWQsIHBUY29uLCBmdWxsX3BhdGgsCi0JCQkJCSAgICBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJcmMgPSBDSUZTU01CRGVsRmlsZSh4aWQsIHBUY29uLCBmdWxsX3BhdGgsIAorCQkJCQkgICAgY2lmc19zYi0+bG9jYWxfbmxzLCAKKwkJCQkJICAgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgCisJCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJCQlpZiAoIXJjKSB7CiAJCQkJZGlyZW50cnktPmRfaW5vZGUtPmlfbmxpbmstLTsKIAkJCX0gZWxzZSBpZiAocmMgPT0gLUVUWFRCU1kpIHsKQEAgLTQ4NSwxMSArNTA0LDE1IEBACiAJCQkJCQkgQ1JFQVRFX05PVF9ESVIgfAogCQkJCQkJIENSRUFURV9ERUxFVEVfT05fQ0xPU0UsCiAJCQkJCQkgJm5ldGZpZCwgJm9wbG9jaywgTlVMTCwKLQkJCQkJCSBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJCQkJIGNpZnNfc2ItPmxvY2FsX25scywgCisJCQkJCQkgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiAKKwkJCQkJCSAgICBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJCQkJaWYgKHJjPT0wKSB7CiAJCQkJCUNJRlNTTUJSZW5hbWVPcGVuRmlsZSh4aWQsIHBUY29uLAogCQkJCQkJbmV0ZmlkLCBOVUxMLAotCQkJCQkJY2lmc19zYi0+bG9jYWxfbmxzKTsKKwkJCQkJCWNpZnNfc2ItPmxvY2FsX25scywKKwkJCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKKwkJCQkJCSAgICBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJCQkJCUNJRlNTTUJDbG9zZSh4aWQsIHBUY29uLCBuZXRmaWQpOwogCQkgICAgICAgICAgICAgICAgICAgICAgICBkaXJlbnRyeS0+ZF9pbm9kZS0+aV9ubGluay0tOwogCQkJCX0KQEAgLTUzNCw3ICs1NTcsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJLyogQkIgYWRkIHNldHRpbmcgdGhlIGVxdWl2YWxlbnQgb2YgbW9kZSB2aWEgQ3JlYXRlWCB3L0FDTHMgKi8KLQlyYyA9IENJRlNTTUJNa0Rpcih4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGNpZnNfc2ItPmxvY2FsX25scyk7CisJcmMgPSBDSUZTU01CTWtEaXIoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBjaWZzX3NiLT5sb2NhbF9ubHMsCisJCQkgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCWlmIChyYykgewogCQljRllJKDEsICgiY2lmc19ta2RpciByZXR1cm5lZCAweCV4ICIsIHJjKSk7CiAJCWRfZHJvcChkaXJlbnRyeSk7CkBAIC01NTgsMTIgKzU4MiwxNiBAQAogCQkJCQkJICAgIChfX3U2NCljdXJyZW50LT5ldWlkLAogCQkJCQkJICAgIChfX3U2NCljdXJyZW50LT5lZ2lkLAogCQkJCQkJICAgIDAgLyogZGV2X3QgKi8sCi0JCQkJCQkgICAgY2lmc19zYi0+bG9jYWxfbmxzKTsKKwkJCQkJCSAgICBjaWZzX3NiLT5sb2NhbF9ubHMsCisJCQkJCQkgICAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgorCQkJCQkJICAgIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJCX0gZWxzZSB7CiAJCQkJQ0lGU1NNQlVuaXhTZXRQZXJtcyh4aWQsIHBUY29uLCBmdWxsX3BhdGgsCiAJCQkJCQkgICAgbW9kZSwgKF9fdTY0KS0xLAogCQkJCQkJICAgIChfX3U2NCktMSwgMCAvKiBkZXZfdCAqLywKLQkJCQkJCSAgICBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJCQkJICAgIGNpZnNfc2ItPmxvY2FsX25scywKKwkJCQkJCSAgICBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIAorCQkJCQkJICAgIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJCX0KIAkJZWxzZSB7CiAJCQkvKiBCQiB0byBiZSBpbXBsZW1lbnRlZCB2aWEgV2luZG93cyBzZWNydHkgZGVzY3JpcHRvcnMKQEAgLTYwMCw3ICs2MjgsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlyYyA9IENJRlNTTUJSbURpcih4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGNpZnNfc2ItPmxvY2FsX25scyk7CisJcmMgPSBDSUZTU01CUm1EaXIoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBjaWZzX3NiLT5sb2NhbF9ubHMsCisJCQkgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCiAJaWYgKCFyYykgewogCQlpbm9kZS0+aV9ubGluay0tOwpAQCAtNjUzLDcgKzY4Miw5IEBACiAJfQogCiAJcmMgPSBDSUZTU01CUmVuYW1lKHhpZCwgcFRjb24sIGZyb21OYW1lLCB0b05hbWUsCi0JCQkgICBjaWZzX3NiX3NvdXJjZS0+bG9jYWxfbmxzKTsKKwkJCSAgIGNpZnNfc2Jfc291cmNlLT5sb2NhbF9ubHMsCisJCQkgICBjaWZzX3NiX3NvdXJjZS0+bW50X2NpZnNfZmxhZ3MgJgorCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAlpZiAocmMgPT0gLUVFWElTVCkgewogCQkvKiBjaGVjayBpZiB0aGV5IGFyZSB0aGUgc2FtZSBmaWxlIGJlY2F1c2UgcmVuYW1lIG9mIGhhcmRsaW5rZWQKIAkJICAgZmlsZXMgaXMgYSBub29wICovCkBAIC02NjUsMTEgKzY5NiwxNiBAQAogCQlpZiAoaW5mb19idWZfc291cmNlICE9IE5VTEwpIHsKIAkJCWluZm9fYnVmX3RhcmdldCA9IGluZm9fYnVmX3NvdXJjZSArIDE7CiAJCQlyYyA9IENJRlNTTUJVbml4UVBhdGhJbmZvKHhpZCwgcFRjb24sIGZyb21OYW1lLAotCQkJCWluZm9fYnVmX3NvdXJjZSwgY2lmc19zYl9zb3VyY2UtPmxvY2FsX25scyk7CisJCQkJaW5mb19idWZfc291cmNlLCBjaWZzX3NiX3NvdXJjZS0+bG9jYWxfbmxzLCAKKwkJCQljaWZzX3NiX3NvdXJjZS0+bW50X2NpZnNfZmxhZ3MgJgorCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJCQlpZiAocmMgPT0gMCkgewogCQkJCXJjID0gQ0lGU1NNQlVuaXhRUGF0aEluZm8oeGlkLCBwVGNvbiwgdG9OYW1lLAogCQkJCQkJaW5mb19idWZfdGFyZ2V0LAotCQkJCQkJY2lmc19zYl90YXJnZXQtPmxvY2FsX25scyk7CisJCQkJCQljaWZzX3NiX3RhcmdldC0+bG9jYWxfbmxzLAorCQkJCQkJLyogcmVtYXAgYmFzZWQgb24gc291cmNlIHNiICovCisJCQkJCQljaWZzX3NiX3NvdXJjZS0+bW50X2NpZnNfZmxhZ3MgJgorCQkJCQkJICAgIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJCX0KIAkJCWlmICgocmMgPT0gMCkgJiYKIAkJCSAgICAoaW5mb19idWZfc291cmNlLT5VbmlxdWVJZCA9PQpAQCAtNjg1LDcgKzcyMSw5IEBACiAJCQkJY2lmc191bmxpbmsodGFyZ2V0X2lub2RlLCB0YXJnZXRfZGlyZW50cnkpOwogCQkJCXJjID0gQ0lGU1NNQlJlbmFtZSh4aWQsIHBUY29uLCBmcm9tTmFtZSwKIAkJCQkJCSAgIHRvTmFtZSwKLQkJCQkJCSAgIGNpZnNfc2Jfc291cmNlLT5sb2NhbF9ubHMpOworCQkJCQkJICAgY2lmc19zYl9zb3VyY2UtPmxvY2FsX25scywKKwkJCQkJCSAgIGNpZnNfc2Jfc291cmNlLT5tbnRfY2lmc19mbGFncworCQkJCQkJICAgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJCQl9CiAJCQlrZnJlZShpbmZvX2J1Zl9zb3VyY2UpOwogCQl9IC8qIGlmIHdlIGNhbiBub3QgZ2V0IG1lbW9yeSBqdXN0IGxlYXZlIHJjIGFzIEVFWElTVCAqLwpAQCAtNzA1LDEwICs3NDMsMTQgQEAKIAkJICAgbWlnaHQgbm90IHJpZ2h0IGJlIHJpZ2h0IGFjY2VzcyB0byByZXF1ZXN0ICovCiAJCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCBwVGNvbiwgZnJvbU5hbWUsIEZJTEVfT1BFTiwgR0VORVJJQ19SRUFELAogCQkJCSBDUkVBVEVfTk9UX0RJUiwgJm5ldGZpZCwgJm9wbG9jaywgTlVMTCwKLQkJCQkgY2lmc19zYl9zb3VyY2UtPmxvY2FsX25scyk7CisJCQkJIGNpZnNfc2Jfc291cmNlLT5sb2NhbF9ubHMsIAorCQkJCSBjaWZzX3NiX3NvdXJjZS0+bW50X2NpZnNfZmxhZ3MgJiAKKwkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQlpZiAocmM9PTApIHsKIAkJCUNJRlNTTUJSZW5hbWVPcGVuRmlsZSh4aWQsIHBUY29uLCBuZXRmaWQsIHRvTmFtZSwKLQkJCQkJICAgICAgY2lmc19zYl9zb3VyY2UtPmxvY2FsX25scyk7CisJCQkJCSAgICAgIGNpZnNfc2Jfc291cmNlLT5sb2NhbF9ubHMsIAorCQkJCQkgICAgICBjaWZzX3NiX3NvdXJjZS0+bW50X2NpZnNfZmxhZ3MgJgorCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQkJQ0lGU1NNQkNsb3NlKHhpZCwgcFRjb24sIG5ldGZpZCk7CiAJCX0KIAl9CkBAIC05NjIsNyArMTAwNCw5IEBACiAJCQkgICBpdCBieSBoYW5kbGUgKi8KIAkJCXJjID0gQ0lGU1NNQlNldEVPRih4aWQsIHBUY29uLCBmdWxsX3BhdGgsCiAJCQkJCSAgIGF0dHJzLT5pYV9zaXplLCBGQUxTRSwKLQkJCQkJICAgY2lmc19zYi0+bG9jYWxfbmxzKTsKKwkJCQkJICAgY2lmc19zYi0+bG9jYWxfbmxzLCAKKwkJCQkJICAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgorCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQkJY0ZZSSgxLCAoIiBTZXRFT0YgYnkgcGF0aCAoc2V0YXR0cnMpIHJjID0gJWQiLCByYykpOwogCQl9CiAKQEAgLTk5OSw3ICsxMDQzLDkgQEAKIAlpZiAoKGNpZnNfc2ItPnRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpCiAJICAgICYmIChhdHRycy0+aWFfdmFsaWQgJiAoQVRUUl9NT0RFIHwgQVRUUl9HSUQgfCBBVFRSX1VJRCkpKQogCQlyYyA9IENJRlNTTUJVbml4U2V0UGVybXMoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBtb2RlLCB1aWQsIGdpZCwKLQkJCQkJIDAgLyogZGV2X3QgKi8sIGNpZnNfc2ItPmxvY2FsX25scyk7CisJCQkJCSAwIC8qIGRldl90ICovLCBjaWZzX3NiLT5sb2NhbF9ubHMsCisJCQkJCSBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIAorCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCWVsc2UgaWYgKGF0dHJzLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkgewogCQlpZiAoKG1vZGUgJiBTX0lXVUdPKSA9PSAwKSAvKiBub3Qgd3JpdGVhYmxlICovIHsKIAkJCWlmICgoY2lmc0lub2RlLT5jaWZzQXR0cnMgJiBBVFRSX1JFQURPTkxZKSA9PSAwKQpAQCAtMTA0OCw3ICsxMDk0LDkgQEAKIAkJICAgdmlhIEhhbmRsZSAoU2V0RmlsZUluZm8pIGluc3RlYWQgb2YgYnkgcGF0aCAqLwogCQlpZiAoIShwVGNvbi0+c2VzLT5mbGFncyAmIENJRlNfU0VTX05UNCkpCiAJCQlyYyA9IENJRlNTTUJTZXRUaW1lcyh4aWQsIHBUY29uLCBmdWxsX3BhdGgsICZ0aW1lX2J1ZiwKLQkJCQkJICAgICBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJCQkgICAgIGNpZnNfc2ItPmxvY2FsX25scywKKwkJCQkJICAgICBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCisJCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJCWVsc2UKIAkJCXJjID0gLUVPUE5PVFNVUFA7CiAKQEAgLTEwNjMsNyArMTExMSw5IEBACiAJCQlyYyA9IENJRlNTTUJPcGVuKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgRklMRV9PUEVOLAogCQkJCQkgU1lOQ0hST05JWkUgfCBGSUxFX1dSSVRFX0FUVFJJQlVURVMsCiAJCQkJCSBDUkVBVEVfTk9UX0RJUiwgJm5ldGZpZCwgJm9wbG9jaywKLQkJCQkJIE5VTEwsIGNpZnNfc2ItPmxvY2FsX25scyk7CisJCQkJCSBOVUxMLCBjaWZzX3NiLT5sb2NhbF9ubHMsCisJCQkJCSBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCisJCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJCQlpZiAocmM9PTApIHsKIAkJCQlyYyA9IENJRlNTTUJTZXRGaWxlVGltZXMoeGlkLCBwVGNvbiwgJnRpbWVfYnVmLAogCQkJCQkJCSBuZXRmaWQpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pb2N0bC5jIGIvZnMvY2lmcy9pb2N0bC5jCmluZGV4IGI0YjhlMjAuLmIwZWE2NjggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW9jdGwuYworKysgYi9mcy9jaWZzL2lvY3RsLmMKQEAgLTIwLDMwICsyMCw5MyBAQAogICogICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICovCisKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V4dDJfZnMuaD4KICNpbmNsdWRlICJjaWZzcGR1LmgiCiAjaW5jbHVkZSAiY2lmc2dsb2IuaCIKICNpbmNsdWRlICJjaWZzcHJvdG8uaCIKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCisjaW5jbHVkZSAiY2lmc2ZzLmgiCisKKyNkZWZpbmUgQ0lGU19JT0NfQ0hFQ0tVTU9VTlQgX0lPKDB4Q0YsIDIpCiAKIGludCBjaWZzX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlcCwgCiAJCXVuc2lnbmVkIGludCBjb21tYW5kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmMgPSAtRU5PVFRZOyAvKiBzdHJhbmdlIGVycm9yIC0gYnV0IHRoZSBwcmVjZWRlbnQgKi8KKwlpbnQgeGlkOworCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAjaWZkZWYgQ09ORklHX0NJRlNfUE9TSVgKLQljRllJKDEsKCJpb2N0bCBmaWxlICVwICBjbWQgJXUgIGFyZyAlbHUiLGZpbGVwLGNvbW1hbmQsYXJnKSk7Ci0Jc3dpdGNoKGNvbW1hbmQpIHsKLQkJY2FzZSBFWFQyX0lPQ19HRVRGTEFHUzoKLQkJCWNGWUkoMSwoImdldCBmbGFncyBub3QgaW1wbGVtZW50ZWQgeWV0IikpOwotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQljYXNlIEVYVDJfSU9DX1NFVEZMQUdTOgotCQkJY0ZZSSgxLCgic2V0IGZsYWdzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiKSk7Ci0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCWRlZmF1bHQ6Ci0JCQljRllJKDEsKCJ1bnN1cHBvcnRlZCBpb2N0bCIpKTsKLQkJCXJldHVybiByYzsKKwlfX3U2NAlFeHRBdHRyQml0cyA9IDA7CisJX191NjQJRXh0QXR0ck1hc2sgPSAwOworCV9fdTY0ICAgY2FwczsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOworCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBTTUJGaWxlID0KKwkJKHN0cnVjdCBjaWZzRmlsZUluZm8gKilmaWxlcC0+cHJpdmF0ZV9kYXRhOworI2VuZGlmIC8qIENPTkZJR19DSUZTX1BPU0lYICovCisKKwl4aWQgPSBHZXRYaWQoKTsKKworICAgICAgICBjRllJKDEsKCJpb2N0bCBmaWxlICVwICBjbWQgJXUgIGFyZyAlbHUiLGZpbGVwLGNvbW1hbmQsYXJnKSk7CisKKwljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CisKKyNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWAorCXRjb24gPSBjaWZzX3NiLT50Y29uOworCWlmKHRjb24pCisJCWNhcHMgPSBsZTY0X3RvX2NwdSh0Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpOworCWVsc2UgeworCQlyYyA9IC1FSU87CisJCUZyZWVYaWQoeGlkKTsKKwkJcmV0dXJuIC1FSU87CiAJfQogI2VuZGlmIC8qIENPTkZJR19DSUZTX1BPU0lYICovCisKKwlzd2l0Y2goY29tbWFuZCkgeworCQljYXNlIENJRlNfSU9DX0NIRUNLVU1PVU5UOgorCQkJY0ZZSSgxLCgiVXNlciB1bm1vdW50IGF0dGVtcHRlZCIpKTsKKwkJCWlmKGNpZnNfc2ItPm1udF91aWQgPT0gY3VycmVudC0+dWlkKQorCQkJCXJjID0gMDsKKwkJCWVsc2UgeworCQkJCXJjID0gLUVBQ0NFUzsKKwkJCQljRllJKDEsKCJ1aWRzIGRvIG5vdCBtYXRjaCIpKTsKKwkJCX0KKwkJCWJyZWFrOworI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYCisJCWNhc2UgRVhUMl9JT0NfR0VURkxBR1M6CisJCQlpZihDSUZTX1VOSVhfRVhUQVRUUl9DQVAgJiBjYXBzKSB7CisJCQkJaWYgKHBTTUJGaWxlID09IE5VTEwpCisJCQkJCWJyZWFrOworCQkJCXJjID0gQ0lGU0dldEV4dEF0dHIoeGlkLCB0Y29uLCBwU01CRmlsZS0+bmV0ZmlkLAorCQkJCQkmRXh0QXR0ckJpdHMsICZFeHRBdHRyTWFzayk7CisJCQkJaWYocmMgPT0gMCkKKwkJCQkJcmMgPSBwdXRfdXNlcihFeHRBdHRyQml0cyAmCisJCQkJCQlFWFQyX0ZMX1VTRVJfVklTSUJMRSwKKwkJCQkJCShpbnQgX191c2VyICopYXJnKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgRVhUMl9JT0NfU0VURkxBR1M6CisJCQlpZihDSUZTX1VOSVhfRVhUQVRUUl9DQVAgJiBjYXBzKSB7CisJCQkJaWYoZ2V0X3VzZXIoRXh0QXR0ckJpdHMsKGludCBfX3VzZXIgKilhcmcpKSB7CisJCQkJCXJjID0gLUVGQVVMVDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChwU01CRmlsZSA9PSBOVUxMKQorCQkJCQlicmVhazsKKwkJCQkvKiByYz0gQ0lGU0dldEV4dEF0dHIoeGlkLHRjb24scFNNQkZpbGUtPm5ldGZpZCwKKwkJCQkJZXh0QXR0ckJpdHMsICZFeHRBdHRyTWFzayk7Ki8KKwkJCQkKKwkJCX0KKwkJCWNGWUkoMSwoInNldCBmbGFncyBub3QgaW1wbGVtZW50ZWQgeWV0IikpOworCQkJYnJlYWs7CisjZW5kaWYgLyogQ09ORklHX0NJRlNfUE9TSVggKi8KKwkJZGVmYXVsdDoKKwkJCWNGWUkoMSwoInVuc3VwcG9ydGVkIGlvY3RsIikpOworCQkJYnJlYWs7CisJfQorCisJRnJlZVhpZCh4aWQpOwogCXJldHVybiByYzsKIH0gCmRpZmYgLS1naXQgYS9mcy9jaWZzL2xpbmsuYyBiL2ZzL2NpZnMvbGluay5jCmluZGV4IDE0NTU4MTAuLmJkZTBmYWIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbGluay5jCisrKyBiL2ZzL2NpZnMvbGluay5jCkBAIC01OSwxMCArNTksMTQgQEAKIAogCWlmIChjaWZzX3NiX3RhcmdldC0+dGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkKIAkJcmMgPSBDSUZTVW5peENyZWF0ZUhhcmRMaW5rKHhpZCwgcFRjb24sIGZyb21OYW1lLCB0b05hbWUsCi0JCQkJCSAgICBjaWZzX3NiX3RhcmdldC0+bG9jYWxfbmxzKTsKKwkJCQkJICAgIGNpZnNfc2JfdGFyZ2V0LT5sb2NhbF9ubHMsIAorCQkJCQkgICAgY2lmc19zYl90YXJnZXQtPm1udF9jaWZzX2ZsYWdzICYKKwkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAllbHNlIHsKIAkJcmMgPSBDSUZTQ3JlYXRlSGFyZExpbmsoeGlkLCBwVGNvbiwgZnJvbU5hbWUsIHRvTmFtZSwKLQkJCQkJY2lmc19zYl90YXJnZXQtPmxvY2FsX25scyk7CisJCQkJCWNpZnNfc2JfdGFyZ2V0LT5sb2NhbF9ubHMsIAorCQkJCQljaWZzX3NiX3RhcmdldC0+bW50X2NpZnNfZmxhZ3MgJgorCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQlpZihyYyA9PSAtRUlPKQogCQkJcmMgPSAtRU9QTk9UU1VQUDsgIAogCX0KQEAgLTI2MCw3ICsyNjQsMTAgQEAKIAkJCQljaWZzX3NiLT5sb2NhbF9ubHMpOwogCWVsc2UgewogCQlyYyA9IENJRlNTTUJPcGVuKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgRklMRV9PUEVOLCBHRU5FUklDX1JFQUQsCi0JCQkJT1BFTl9SRVBBUlNFX1BPSU5ULCZmaWQsICZvcGxvY2ssIE5VTEwsIGNpZnNfc2ItPmxvY2FsX25scyk7CisJCQkJT1BFTl9SRVBBUlNFX1BPSU5ULCZmaWQsICZvcGxvY2ssIE5VTEwsIAorCQkJCWNpZnNfc2ItPmxvY2FsX25scywgCisJCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiAKKwkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQlpZighcmMpIHsKIAkJCXJjID0gQ0lGU1NNQlF1ZXJ5UmVwYXJzZUxpbmtJbmZvKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwKIAkJCQl0bXBidWZmZXIsCkBAIC0yNzksNyArMjg2LDEwIEBACiAJCQkJCXN0cm5jcHkodG1wX3BhdGgsIHBUY29uLT50cmVlTmFtZSwgTUFYX1RSRUVfU0laRSk7CiAJCQkJCXN0cm5jYXQodG1wX3BhdGgsIGZ1bGxfcGF0aCwgTUFYX1BBVEhDT05GKTsKIAkJCQkJcmMgPSBnZXRfZGZzX3BhdGgoeGlkLCBwVGNvbi0+c2VzLCB0bXBfcGF0aCwKLQkJCQkJCWNpZnNfc2ItPmxvY2FsX25scywgJm51bV9yZWZlcnJhbHMsICZyZWZlcnJhbHMpOworCQkJCQkJY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJCQkJJm51bV9yZWZlcnJhbHMsICZyZWZlcnJhbHMsCisJCQkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCisJCQkJCQkgICAgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQkJCQljRllJKDEsKCJHZXQgREZTIGZvciAlcyByYyA9ICVkICIsdG1wX3BhdGgsIHJjKSk7CiAJCQkJCWlmKChudW1fcmVmZXJyYWxzID09IDApICYmIChyYyA9PSAwKSkKIAkJCQkJCXJjID0gLUVBQ0NFUzsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWlzYy5jIGIvZnMvY2lmcy9taXNjLmMKaW5kZXggN2IzOGQzMC4uZGIxNGI1MCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9taXNjLmMKKysrIGIvZnMvY2lmcy9taXNjLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCiAjaW5jbHVkZSAic21iZXJyLmgiCiAjaW5jbHVkZSAibnRlcnIuaCIKKyNpbmNsdWRlICJjaWZzX3VuaWNvZGUuaCIKIAogZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19zbV9yZXFfcG9vbHA7CiBleHRlcm4gbWVtcG9vbF90ICpjaWZzX3JlcV9wb29scDsKQEAgLTQ1MSwyNSArNDUyLDMwIEBACiAJCQlhdG9taWNfaW5jKCZ0Y29uLT5udW1fb3Bsb2NrX2Jya3MpOwogI2VuZGlmCiAJCQlsaXN0X2Zvcl9lYWNoKHRtcDEsJnRjb24tPm9wZW5GaWxlTGlzdCl7Ci0JCQkJbmV0ZmlsZSA9IGxpc3RfZW50cnkodG1wMSxzdHJ1Y3QgY2lmc0ZpbGVJbmZvLHRsaXN0KTsKKwkJCQluZXRmaWxlID0gbGlzdF9lbnRyeSh0bXAxLHN0cnVjdCBjaWZzRmlsZUluZm8sCisJCQkJCQkgICAgIHRsaXN0KTsKIAkJCQlpZihwU01CLT5GaWQgPT0gbmV0ZmlsZS0+bmV0ZmlkKSB7CiAJCQkJCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlOwogCQkJCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7Ci0JCQkJCWNGWUkoMSwoIk1hdGNoaW5nIGZpbGUgaWQsIHByb2Nlc3Npbmcgb3Bsb2NrIGJyZWFrIikpOworCQkJCQljRllJKDEsKCJmaWxlIGlkIG1hdGNoLCBvcGxvY2sgYnJlYWsiKSk7CiAJCQkJCXBDaWZzSW5vZGUgPSAKIAkJCQkJCUNJRlNfSShuZXRmaWxlLT5wSW5vZGUpOwogCQkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZUFsbCA9IEZBTFNFOwogCQkJCQlpZihwU01CLT5PcGxvY2tMZXZlbCA9PSAwKQotCQkJCQkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gRkFMU0U7CisJCQkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQKKwkJCQkJCQk9IEZBTFNFOwogCQkJCQlwQ2lmc0lub2RlLT5vcGxvY2tQZW5kaW5nID0gVFJVRTsKLQkJCQkJQWxsb2NPcGxvY2tRRW50cnkobmV0ZmlsZS0+cElub2RlLCBuZXRmaWxlLT5uZXRmaWQsIHRjb24pOworCQkJCQlBbGxvY09wbG9ja1FFbnRyeShuZXRmaWxlLT5wSW5vZGUsCisJCQkJCQkJICBuZXRmaWxlLT5uZXRmaWQsCisJCQkJCQkJICB0Y29uKTsKIAkJCQkJY0ZZSSgxLCgiYWJvdXQgdG8gd2FrZSB1cCBvcGxvY2sgdGhkIikpOwotCQkJCQl3YWtlX3VwX3Byb2Nlc3Mob3Bsb2NrVGhyZWFkKTsgICAgICAgICAgICAgICAKKwkJCQkJaWYob3Bsb2NrVGhyZWFkKQorCQkJCQkgICAgd2FrZV91cF9wcm9jZXNzKG9wbG9ja1RocmVhZCk7CiAJCQkJCXJldHVybiBUUlVFOwogCQkJCX0KIAkJCX0KIAkJCXJlYWRfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQkJCWNGWUkoMSwoIk5vIG1hdGNoaW5nIGZpbGUgZm9yIG9wbG9jayBicmVhayBvbiBjb25uZWN0aW9uIikpOworCQkJY0ZZSSgxLCgiTm8gbWF0Y2hpbmcgZmlsZSBmb3Igb3Bsb2NrIGJyZWFrIikpOwogCQkJcmV0dXJuIFRSVUU7CiAJCX0KIAl9CkBAIC00OTAsNyArNDk2LDcgQEAKIAogCWJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIHNtYl9idWY7CiAJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBzbWJfYnVmX2xlbmd0aDsgaSsrLCBqKyspIHsKLQkJaWYgKGkgJSA4ID09IDApIHsJLyogd2UgaGF2ZSByZWFjaGVkIHRoZSBiZWdpbm5pbmcgb2YgbGluZSAgKi8KKwkJaWYgKGkgJSA4ID09IDApIHsJLyogaGF2ZSByZWFjaGVkIHRoZSBiZWdpbm5pbmcgb2YgbGluZSAqLwogCQkJcHJpbnRrKEtFUk5fREVCVUcgInwgIik7CiAJCQlqID0gMDsKIAkJfQpAQCAtNTAxLDcgKzUwNyw3IEBACiAJCWVsc2UKIAkJCWRlYnVnX2xpbmVbMSArICgyICogaildID0gJ18nOwogCi0JCWlmIChpICUgOCA9PSA3KSB7CS8qIHdlIGhhdmUgcmVhY2hlZCBlbmQgb2YgbGluZSwgdGltZSB0byBwcmludCBhc2NpaSAqLworCQlpZiAoaSAlIDggPT0gNykgeyAvKiByZWFjaGVkIGVuZCBvZiBsaW5lLCB0aW1lIHRvIHByaW50IGFzY2lpICovCiAJCQlkZWJ1Z19saW5lWzE2XSA9IDA7CiAJCQlwcmludGsoIiB8ICVzXG4iLCBkZWJ1Z19saW5lKTsKIAkJfQpAQCAtNTE0LDMgKzUyMCwxNDEgQEAKIAlwcmludGsoICIgfCAlc1xuIiwgZGVidWdfbGluZSk7CiAJcmV0dXJuOwogfQorCisvKiBXaW5kb3dzIG1hcHMgdGhlc2UgdG8gdGhlIHVzZXIgZGVmaW5lZCAxNiBiaXQgVW5pY29kZSByYW5nZSBzaW5jZSB0aGV5IGFyZQorICAgcmVzZXJ2ZWQgc3ltYm9scyAoYWxvbmcgd2l0aCBcIGFuZCAvKSwgb3RoZXJ3aXNlIGlsbGVnYWwgdG8gc3RvcmUKKyAgIGluIGZpbGVuYW1lcyBpbiBOVEZTICovCisjZGVmaW5lIFVOSV9BU1RFUklLICAgICAoX191MTYpICgnKicgKyAweEYwMDApCisjZGVmaW5lIFVOSV9RVUVTVElPTiAgICAoX191MTYpICgnPycgKyAweEYwMDApCisjZGVmaW5lIFVOSV9DT0xPTiAgICAgICAoX191MTYpICgnOicgKyAweEYwMDApCisjZGVmaW5lIFVOSV9HUlRSVEhBTiAgICAoX191MTYpICgnPicgKyAweEYwMDApCisjZGVmaW5lIFVOSV9MRVNTVEhBTiAgICAoX191MTYpICgnPCcgKyAweEYwMDApCisjZGVmaW5lIFVOSV9QSVBFICAgICAgICAoX191MTYpICgnfCcgKyAweEYwMDApCisjZGVmaW5lIFVOSV9TTEFTSCAgICAgICAoX191MTYpICgnXFwnICsgMHhGMDAwKQorCisvKiBDb252ZXJ0IDE2IGJpdCBVbmljb2RlIHBhdGhuYW1lIGZyb20gd2lyZSBmb3JtYXQgdG8gc3RyaW5nIGluIGN1cnJlbnQgY29kZQorICAgcGFnZS4gIENvbnZlcnNpb24gbWF5IGludm9sdmUgcmVtYXBwaW5nIHVwIHRoZSBzZXZlbiBjaGFyYWN0ZXJzIHRoYXQgYXJlCisgICBvbmx5IGxlZ2FsIGluIFBPU0lYLWxpa2UgT1MgKGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIHN0cmluZykuIFBhdGgKKyAgIG5hbWVzIGFyZSBsaXR0bGUgZW5kaWFuIDE2IGJpdCBVbmljb2RlIG9uIHRoZSB3aXJlICovCitpbnQKK2NpZnNfY29udmVydFVDU3BhdGgoY2hhciAqdGFyZ2V0LCBjb25zdCBfX2xlMTYgKiBzb3VyY2UsIGludCBtYXhsZW4sCisJCSAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICogY3ApCit7CisJaW50IGksaixsZW47CisJX191MTYgc3JjX2NoYXI7CisKKwlmb3IoaSA9IDAsIGogPSAwOyBpIDwgbWF4bGVuOyBpKyspIHsKKwkJc3JjX2NoYXIgPSBsZTE2X3RvX2NwdShzb3VyY2VbaV0pOworCQlzd2l0Y2ggKHNyY19jaGFyKSB7CisJCQljYXNlIDA6CisJCQkJZ290byBjVUNTX291dDsgLyogQkIgY2hlY2sgdGhpcyBCQiAqLworCQkJY2FzZSBVTklfQ09MT046CisJCQkJdGFyZ2V0W2pdID0gJzonOworCQkJCWJyZWFrOworCQkJY2FzZSBVTklfQVNURVJJSzoKKwkJCQl0YXJnZXRbal0gPSAnKic7CisJCQkJYnJlYWs7CisJCQljYXNlIFVOSV9RVUVTVElPTjoKKwkJCQl0YXJnZXRbal0gPSAnPyc7CisJCQkJYnJlYWs7CisJCQkvKiBCQiBXZSBjYW4gbm90IGhhbmRsZSByZW1hcHBpbmcgc2xhc2ggdW50aWwKKwkJCSAgIGFsbCB0aGUgY2FsbHMgdG8gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeQorCQkJICAgYXJlIG1vZGlmaWVkLCBhcyB0aGV5IHVzZSBzbGFzaCBhcyBzZXBhcmF0b3IgQkIgKi8KKwkJCS8qIGNhc2UgVU5JX1NMQVNIOgorCQkJCXRhcmdldFtqXSA9ICdcXCc7CisJCQkJYnJlYWs7Ki8KKwkJCWNhc2UgVU5JX1BJUEU6CisJCQkJdGFyZ2V0W2pdID0gJ3wnOworCQkJCWJyZWFrOworCQkJY2FzZSBVTklfR1JUUlRIQU46CisJCQkJdGFyZ2V0W2pdID0gJz4nOworCQkJCWJyZWFrOworCQkJY2FzZSBVTklfTEVTU1RIQU46CisJCQkJdGFyZ2V0W2pdID0gJzwnOworCQkJZGVmYXVsdDogCisJCQkJbGVuID0gY3AtPnVuaTJjaGFyKHNyY19jaGFyLCAmdGFyZ2V0W2pdLCAKKwkJCQkJCU5MU19NQVhfQ0hBUlNFVF9TSVpFKTsKKwkJCQlpZihsZW4gPiAwKSB7CisJCQkJCWogKz0gbGVuOworCQkJCQljb250aW51ZTsKKwkJCQl9IGVsc2UgeworCQkJCQl0YXJnZXRbal0gPSAnPyc7CisJCQkJfQorCQl9CisJCWorKzsKKwkJLyogbWFrZSBzdXJlIHdlIGRvIG5vdCBvdmVycnVuIGNhbGxlcnMgYWxsb2NhdGVkIHRlbXAgYnVmZmVyICovCisJCWlmKGogPj0gKDIgKiBOQU1FX01BWCkpCisJCQlicmVhazsKKwl9CitjVUNTX291dDoKKwl0YXJnZXRbal0gPSAwOworCXJldHVybiBqOworfQorCisvKiBDb252ZXJ0IDE2IGJpdCBVbmljb2RlIHBhdGhuYW1lIHRvIHdpcmUgZm9ybWF0IGZyb20gc3RyaW5nIGluIGN1cnJlbnQgY29kZQorICAgcGFnZS4gIENvbnZlcnNpb24gbWF5IGludm9sdmUgcmVtYXBwaW5nIHVwIHRoZSBzZXZlbiBjaGFyYWN0ZXJzIHRoYXQgYXJlCisgICBvbmx5IGxlZ2FsIGluIFBPU0lYLWxpa2UgT1MgKGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIHN0cmluZykuIFBhdGgKKyAgIG5hbWVzIGFyZSBsaXR0bGUgZW5kaWFuIDE2IGJpdCBVbmljb2RlIG9uIHRoZSB3aXJlICovCitpbnQKK2NpZnNDb252ZXJ0VG9VQ1MoX19sZTE2ICogdGFyZ2V0LCBjb25zdCBjaGFyICpzb3VyY2UsIGludCBtYXhsZW4sIAorCQkgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqIGNwLCBpbnQgbWFwQ2hhcnMpCit7CisJaW50IGksaixjaGFybGVuOworCWludCBsZW5fcmVtYWluaW5nID0gbWF4bGVuOworCWNoYXIgc3JjX2NoYXI7CisKKwlpZighbWFwQ2hhcnMpIAorCQlyZXR1cm4gY2lmc19zdHJ0b1VDUygod2NoYXJfdCAqKSB0YXJnZXQsIHNvdXJjZSwgUEFUSF9NQVgsIGNwKTsKKworCWZvcihpID0gMCwgaiA9IDA7IGkgPCBtYXhsZW47IGorKykgeworCQlzcmNfY2hhciA9IHNvdXJjZVtpXTsKKwkJc3dpdGNoIChzcmNfY2hhcikgeworCQkJY2FzZSAwOgorCQkJCWdvdG8gY3RvVUNTX291dDsKKwkJCWNhc2UgJzonOgorCQkJCXRhcmdldFtqXSA9IGNwdV90b19sZTE2KFVOSV9DT0xPTik7CisJCQkJYnJlYWs7CisJCQljYXNlICcqJzoKKwkJCQl0YXJnZXRbal0gPSBjcHVfdG9fbGUxNihVTklfQVNURVJJSyk7CisJCQkJYnJlYWs7CisJCQljYXNlICc/JzoKKwkJCQl0YXJnZXRbal0gPSBjcHVfdG9fbGUxNihVTklfUVVFU1RJT04pOworCQkJCWJyZWFrOworCQkJY2FzZSAnPCc6CisJCQkJdGFyZ2V0W2pdID0gY3B1X3RvX2xlMTYoVU5JX0xFU1NUSEFOKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJz4nOgorCQkJCXRhcmdldFtqXSA9IGNwdV90b19sZTE2KFVOSV9HUlRSVEhBTik7CisJCQkJYnJlYWs7CisJCQljYXNlICd8JzoKKwkJCQl0YXJnZXRbal0gPSBjcHVfdG9fbGUxNihVTklfUElQRSk7CisJCQkJYnJlYWs7CQkJCisJCQkvKiBCQiBXZSBjYW4gbm90IGhhbmRsZSByZW1hcHBpbmcgc2xhc2ggdW50aWwKKwkJCSAgIGFsbCB0aGUgY2FsbHMgdG8gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeQorCQkJICAgYXJlIG1vZGlmaWVkLCBhcyB0aGV5IHVzZSBzbGFzaCBhcyBzZXBhcmF0b3IgQkIgKi8KKwkJCS8qIGNhc2UgJ1xcJzoKKwkJCQl0YXJnZXRbal0gPSBjcHVfdG9fbGUxNihVTklfU0xBU0gpOworCQkJCWJyZWFrOyovCisJCQlkZWZhdWx0OgorCQkJCWNoYXJsZW4gPSBjcC0+Y2hhcjJ1bmkoc291cmNlK2ksCisJCQkJCWxlbl9yZW1haW5pbmcsIHRhcmdldCtqKTsKKwkJCQkvKiBpZiBubyBtYXRjaCwgdXNlIHF1ZXN0aW9uIG1hcmssIHdoaWNoCisJCQkJYXQgbGVhc3QgaW4gc29tZSBjYXNlcyBzZXJ2ZXJzIGFzIHdpbGQgY2FyZCAqLworCQkJCWlmKGNoYXJsZW4gPCAxKSB7CisJCQkJCXRhcmdldFtqXSA9IGNwdV90b19sZTE2KDB4MDAzZik7CisJCQkJCWNoYXJsZW4gPSAxOworCQkJCX0KKwkJCQlsZW5fcmVtYWluaW5nIC09IGNoYXJsZW47CisJCQkJLyogY2hhcmFjdGVyIG1heSB0YWtlIG1vcmUgdGhhbiBvbmUgYnl0ZSBpbiB0aGUKKwkJCQkgICB0aGUgc291cmNlIHN0cmluZywgYnV0IHdpbGwgdGFrZSBleGFjdGx5IHR3bworCQkJCSAgIGJ5dGVzIGluIHRoZSB0YXJnZXQgc3RyaW5nICovCisJCQkJaSs9IGNoYXJsZW47CisJCQkJY29udGludWU7CisJCX0KKwkJaSsrOyAvKiBtb3ZlIHRvIG5leHQgY2hhciBpbiBzb3VyY2Ugc3RyaW5nICovCisJCWxlbl9yZW1haW5pbmctLTsKKwl9CisKK2N0b1VDU19vdXQ6CisJcmV0dXJuIGk7Cit9CmRpZmYgLS1naXQgYS9mcy9jaWZzL25ldG1pc2MuYyBiL2ZzL2NpZnMvbmV0bWlzYy5jCmluZGV4IDRlMzRjODkuLmE5MmFmNDEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbmV0bWlzYy5jCisrKyBiL2ZzL2NpZnMvbmV0bWlzYy5jCkBAIC03OCw2ICs3OCw3IEBACiAJe0VyclF1b3RhLCAtRURRVU9UfSwKIAl7RXJyTm90QUxpbmssIC1FTk9MSU5LfSwKIAl7RVJSbmV0bG9nb25Ob3RTdGFydGVkLC1FTk9QUk9UT09QVH0sCisJe0VyclRvb01hbnlMaW5rcywtRU1MSU5LfSwKIAl7MCwgMH0KIH07CiAKQEAgLTIwNiw3ICsyMDcsNyBAQAogCXsKIAlFUlJET1MsIEVSUmdlbmVyYWwsIE5UX1NUQVRVU19VTlNVQ0NFU1NGVUx9LCB7CiAJRVJSRE9TLCBFUlJiYWRmdW5jLCBOVF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEfSwgewotCUVSUkRPUywgODcsIE5UX1NUQVRVU19JTlZBTElEX0lORk9fQ0xBU1N9LCB7CisJRVJSRE9TLCBFUlJpbnZsZXZlbCwgTlRfU1RBVFVTX0lOVkFMSURfSU5GT19DTEFTU30sIHsKIAlFUlJET1MsIDI0LCBOVF9TVEFUVVNfSU5GT19MRU5HVEhfTUlTTUFUQ0h9LCB7CiAJRVJSSFJELCBFUlJnZW5lcmFsLCBOVF9TVEFUVVNfQUNDRVNTX1ZJT0xBVElPTn0sIHsKIAlFUlJIUkQsIEVSUmdlbmVyYWwsIE5UX1NUQVRVU19JTl9QQUdFX0VSUk9SfSwgewpAQCAtNzQyLDcgKzc0Myw3IEBACiAJRVJSRE9TLCAxODIsIE5UX1NUQVRVU19EUklWRVJfT1JESU5BTF9OT1RfRk9VTkR9LCB7CiAJRVJSRE9TLCAxMjcsIE5UX1NUQVRVU19EUklWRVJfRU5UUllQT0lOVF9OT1RfRk9VTkR9LCB7CiAJRVJSRE9TLCAyODgsIE5UX1NUQVRVU19SRVNPVVJDRV9OT1RfT1dORUR9LCB7Ci0JRVJSSFJELCBFUlJnZW5lcmFsLCBOVF9TVEFUVVNfVE9PX01BTllfTElOS1N9LCB7CisJRVJSRE9TLCBFcnJUb29NYW55TGlua3MsIE5UX1NUQVRVU19UT09fTUFOWV9MSU5LU30sIHsKIAlFUlJIUkQsIEVSUmdlbmVyYWwsIE5UX1NUQVRVU19RVU9UQV9MSVNUX0lOQ09OU0lTVEVOVH0sIHsKIAlFUlJIUkQsIEVSUmdlbmVyYWwsIE5UX1NUQVRVU19GSUxFX0lTX09GRkxJTkV9LCB7CiAJRVJSRE9TLCAyMSwgMHhjMDAwMDI2ZX0sIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggZjhiZWEzOS4uMjI1NTc3MSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogICBEaXJlY3Rvcnkgc2VhcmNoIGhhbmRsaW5nCiAgKiAKLSAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNAorICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDA0LCAyMDA1CiAgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCiAgKgogICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNjUsMTQgKzY1LDE0IEBACiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CiAJaW50IHJjID0gMDsKIAotCWNGWUkoMSwgKCJGb3IgJXMgIiwgcXN0cmluZy0+bmFtZSkpOworCWNGWUkoMSwgKCJGb3IgJXMiLCBxc3RyaW5nLT5uYW1lKSk7CiAJY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9kZW50cnktPmRfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAogCXFzdHJpbmctPmhhc2ggPSBmdWxsX25hbWVfaGFzaChxc3RyaW5nLT5uYW1lLCBxc3RyaW5nLT5sZW4pOwogCXRtcF9kZW50cnkgPSBkX2xvb2t1cChmaWxlLT5mX2RlbnRyeSwgcXN0cmluZyk7CiAJaWYgKHRtcF9kZW50cnkpIHsKLQkJY0ZZSSgwLCAoIiBleGlzdGluZyBkZW50cnkgd2l0aCBpbm9kZSAweCVwIiwgdG1wX2RlbnRyeS0+ZF9pbm9kZSkpOworCQljRllJKDAsICgiZXhpc3RpbmcgZGVudHJ5IHdpdGggaW5vZGUgMHglcCIsIHRtcF9kZW50cnktPmRfaW5vZGUpKTsKIAkJKnB0bXBfaW5vZGUgPSB0bXBfZGVudHJ5LT5kX2lub2RlOwogLyogQkIgb3ZlcndyaXRlIG9sZCBuYW1lPyBpLmUuIHRtcF9kZW50cnktPmRfbmFtZSBhbmQgdG1wX2RlbnRyeS0+ZF9uYW1lLmxlbj8/Ki8KIAkJaWYoKnB0bXBfaW5vZGUgPT0gTlVMTCkgewpAQCAtMTA1LDggKzEwNSwxMSBAQAogfQogCiBzdGF0aWMgdm9pZCBmaWxsX2luX2lub2RlKHN0cnVjdCBpbm9kZSAqdG1wX2lub2RlLAotCUZJTEVfRElSRUNUT1JZX0lORk8gKnBmaW5kRGF0YSwgaW50ICpwb2JqZWN0X3R5cGUpCisJRklMRV9ESVJFQ1RPUllfSU5GTyAqcGZpbmREYXRhLCBpbnQgKnBvYmplY3RfdHlwZSwgaW50IGlzTmV3SW5vZGUpCiB7CisJbG9mZl90IGxvY2FsX3NpemU7CisJc3RydWN0IHRpbWVzcGVjIGxvY2FsX210aW1lOworCiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNJbmZvID0gQ0lGU19JKHRtcF9pbm9kZSk7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IodG1wX2lub2RlLT5pX3NiKTsKIAlfX3UzMiBhdHRyID0gbGUzMl90b19jcHUocGZpbmREYXRhLT5FeHRGaWxlQXR0cmlidXRlcyk7CkBAIC0xMTYsNiArMTE5LDEwIEBACiAJY2lmc0luZm8tPmNpZnNBdHRycyA9IGF0dHI7CiAJY2lmc0luZm8tPnRpbWUgPSBqaWZmaWVzOwogCisJLyogc2F2ZSBtdGltZSBhbmQgc2l6ZSAqLworCWxvY2FsX210aW1lID0gdG1wX2lub2RlLT5pX210aW1lOworCWxvY2FsX3NpemUgID0gdG1wX2lub2RlLT5pX3NpemU7CisKIAkvKiBMaW51eCBjYW4gbm90IHN0b3JlIGZpbGUgY3JlYXRpb24gdGltZSB1bmZvcnR1bmF0ZWx5IHNvIGlnbm9yZSBpdCAqLwogCXRtcF9pbm9kZS0+aV9hdGltZSA9CiAJICAgIGNpZnNfTlR0aW1lVG9Vbml4KGxlNjRfdG9fY3B1KHBmaW5kRGF0YS0+TGFzdEFjY2Vzc1RpbWUpKTsKQEAgLTEzNCw3ICsxNDEsNiBAQAogCQl0bXBfaW5vZGUtPmlfbW9kZSA9IGNpZnNfc2ItPm1udF9maWxlX21vZGU7CiAJfQogCi0JY0ZZSSgwLCgiQ0lGUyBGRklSU1Q6IEF0dHJpYnV0ZXMgY2FtZSBpbiBhcyAweCV4IixhdHRyKSk7CiAJaWYgKGF0dHIgJiBBVFRSX0RJUkVDVE9SWSkgewogCQkqcG9iamVjdF90eXBlID0gRFRfRElSOwogCQkvKiBvdmVycmlkZSBkZWZhdWx0IHBlcm1zIHNpbmNlIHdlIGRvIG5vdCBsb2NrIGRpcnMgKi8KQEAgLTE3NSwzMCArMTgxLDQ2IEBACiAJICAgICAgKHVuc2lnbmVkIGxvbmcpdG1wX2lub2RlLT5pX3NpemUsIHRtcF9pbm9kZS0+aV9ibG9ja3MsCiAJICAgICAgdG1wX2lub2RlLT5pX2Jsa3NpemUpKTsKIAlpZiAoU19JU1JFRyh0bXBfaW5vZGUtPmlfbW9kZSkpIHsKLQkJY0ZZSSgxLCAoIiBGaWxlIGlub2RlICIpKTsKKwkJY0ZZSSgxLCAoIkZpbGUgaW5vZGUiKSk7CiAJCXRtcF9pbm9kZS0+aV9vcCA9ICZjaWZzX2ZpbGVfaW5vZGVfb3BzOwogCQlpZihjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfRElSRUNUX0lPKQogCQkJdG1wX2lub2RlLT5pX2ZvcCA9ICZjaWZzX2ZpbGVfZGlyZWN0X29wczsKIAkJZWxzZQogCQkJdG1wX2lub2RlLT5pX2ZvcCA9ICZjaWZzX2ZpbGVfb3BzOwogCQl0bXBfaW5vZGUtPmlfZGF0YS5hX29wcyA9ICZjaWZzX2FkZHJfb3BzOworCisJCWlmKGlzTmV3SW5vZGUpCisJCQlyZXR1cm47IC8qIE5vIHNlbnNlIGludmFsaWRhdGluZyBwYWdlcyBmb3IgbmV3IGlub2RlIHNpbmNlIHdlCisJCQkJCSAgIGhhdmUgbm90IHN0YXJ0ZWQgY2FjaGluZyByZWFkYWhlYWQgZmlsZSBkYXRhIHlldCAqLworCisJCWlmICh0aW1lc3BlY19lcXVhbCgmdG1wX2lub2RlLT5pX210aW1lLCAmbG9jYWxfbXRpbWUpICYmCisJCQkobG9jYWxfc2l6ZSA9PSB0bXBfaW5vZGUtPmlfc2l6ZSkpIHsKKwkJCWNGWUkoMSwgKCJpbm9kZSBleGlzdHMgYnV0IHVuY2hhbmdlZCIpKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGZpbGUgbWF5IGhhdmUgY2hhbmdlZCBvbiBzZXJ2ZXIgKi8KKwkJCWNGWUkoMSwgKCJpbnZhbGlkYXRlIGlub2RlLCByZWFkZGlyIGRldGVjdGVkIGNoYW5nZSIpKTsKKwkJCWludmFsaWRhdGVfcmVtb3RlX2lub2RlKHRtcF9pbm9kZSk7CisJCX0KIAl9IGVsc2UgaWYgKFNfSVNESVIodG1wX2lub2RlLT5pX21vZGUpKSB7Ci0JCWNGWUkoMSwgKCIgRGlyZWN0b3J5IGlub2RlIikpOworCQljRllJKDEsICgiRGlyZWN0b3J5IGlub2RlIikpOwogCQl0bXBfaW5vZGUtPmlfb3AgPSAmY2lmc19kaXJfaW5vZGVfb3BzOwogCQl0bXBfaW5vZGUtPmlfZm9wID0gJmNpZnNfZGlyX29wczsKIAl9IGVsc2UgaWYgKFNfSVNMTksodG1wX2lub2RlLT5pX21vZGUpKSB7Ci0JCWNGWUkoMSwgKCIgU3ltYm9saWMgTGluayBpbm9kZSAiKSk7CisJCWNGWUkoMSwgKCJTeW1ib2xpYyBMaW5rIGlub2RlIikpOwogCQl0bXBfaW5vZGUtPmlfb3AgPSAmY2lmc19zeW1saW5rX2lub2RlX29wczsKIAl9IGVsc2UgewotCQljRllJKDEsICgiIEluaXQgc3BlY2lhbCBpbm9kZSAiKSk7CisJCWNGWUkoMSwgKCJJbml0IHNwZWNpYWwgaW5vZGUiKSk7CiAJCWluaXRfc3BlY2lhbF9pbm9kZSh0bXBfaW5vZGUsIHRtcF9pbm9kZS0+aV9tb2RlLAogCQkJCSAgIHRtcF9pbm9kZS0+aV9yZGV2KTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHVuaXhfZmlsbF9pbl9pbm9kZShzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSwKLQlGSUxFX1VOSVhfSU5GTyAqcGZpbmREYXRhLCBpbnQgKnBvYmplY3RfdHlwZSkKKwlGSUxFX1VOSVhfSU5GTyAqcGZpbmREYXRhLCBpbnQgKnBvYmplY3RfdHlwZSwgaW50IGlzTmV3SW5vZGUpCiB7CisJbG9mZl90IGxvY2FsX3NpemU7CisJc3RydWN0IHRpbWVzcGVjIGxvY2FsX210aW1lOworCiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNJbmZvID0gQ0lGU19JKHRtcF9pbm9kZSk7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IodG1wX2lub2RlLT5pX3NiKTsKIApAQCAtMjA4LDYgKzIzMCwxMCBAQAogCWNpZnNJbmZvLT50aW1lID0gamlmZmllczsKIAlhdG9taWNfaW5jKCZjaWZzSW5mby0+aW5Vc2UpOwogCisJLyogc2F2ZSBtdGltZSBhbmQgc2l6ZSAqLworCWxvY2FsX210aW1lID0gdG1wX2lub2RlLT5pX210aW1lOworCWxvY2FsX3NpemUgID0gdG1wX2lub2RlLT5pX3NpemU7CisKIAl0bXBfaW5vZGUtPmlfYXRpbWUgPQogCSAgICBjaWZzX05UdGltZVRvVW5peChsZTY0X3RvX2NwdShwZmluZERhdGEtPkxhc3RBY2Nlc3NUaW1lKSk7CiAJdG1wX2lub2RlLT5pX210aW1lID0KQEAgLTI2NSw2ICsyOTEsMTkgQEAKIAkJZWxzZQogCQkJdG1wX2lub2RlLT5pX2ZvcCA9ICZjaWZzX2ZpbGVfb3BzOwogCQl0bXBfaW5vZGUtPmlfZGF0YS5hX29wcyA9ICZjaWZzX2FkZHJfb3BzOworCisJCWlmKGlzTmV3SW5vZGUpCisJCQlyZXR1cm47IC8qIE5vIHNlbnNlIGludmFsaWRhdGluZyBwYWdlcyBmb3IgbmV3IGlub2RlIHNpbmNlIHdlCisJCQkJCSAgIGhhdmUgbm90IHN0YXJ0ZWQgY2FjaGluZyByZWFkYWhlYWQgZmlsZSBkYXRhIHlldCAqLworCisJCWlmICh0aW1lc3BlY19lcXVhbCgmdG1wX2lub2RlLT5pX210aW1lLCAmbG9jYWxfbXRpbWUpICYmCisJCQkobG9jYWxfc2l6ZSA9PSB0bXBfaW5vZGUtPmlfc2l6ZSkpIHsKKwkJCWNGWUkoMSwgKCJpbm9kZSBleGlzdHMgYnV0IHVuY2hhbmdlZCIpKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGZpbGUgbWF5IGhhdmUgY2hhbmdlZCBvbiBzZXJ2ZXIgKi8KKwkJCWNGWUkoMSwgKCJpbnZhbGlkYXRlIGlub2RlLCByZWFkZGlyIGRldGVjdGVkIGNoYW5nZSIpKTsKKwkJCWludmFsaWRhdGVfcmVtb3RlX2lub2RlKHRtcF9pbm9kZSk7CisJCX0KIAl9IGVsc2UgaWYgKFNfSVNESVIodG1wX2lub2RlLT5pX21vZGUpKSB7CiAJCWNGWUkoMSwgKCJEaXJlY3RvcnkgaW5vZGUiKSk7CiAJCXRtcF9pbm9kZS0+aV9vcCA9ICZjaWZzX2Rpcl9pbm9kZV9vcHM7CkBAIC0zMTQsMTUgKzM1MywxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRvd24oJmZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfc2VtKTsKLQlmdWxsX3BhdGggPSBidWlsZF93aWxkY2FyZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGUtPmZfZGVudHJ5KTsKKwlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGUtPmZfZGVudHJ5KTsKIAl1cCgmZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9zZW0pOwogCiAJaWYoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JY0ZZSSgxLCAoIkZ1bGwgcGF0aDogJXMgc3RhcnQgYXQ6ICVsbGQgIiwgZnVsbF9wYXRoLCBmaWxlLT5mX3BvcykpOworCWNGWUkoMSwgKCJGdWxsIHBhdGg6ICVzIHN0YXJ0IGF0OiAlbGxkIiwgZnVsbF9wYXRoLCBmaWxlLT5mX3BvcykpOwogCitmZmlyc3RfcmV0cnk6CiAJLyogdGVzdCBmb3IgVW5peCBleHRlbnNpb25zICovCiAJaWYgKHBUY29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSB7CiAJCWNpZnNGaWxlLT5zcmNoX2luZi5pbmZvX2xldmVsID0gU01CX0ZJTkRfRklMRV9VTklYOyAKQEAgLTMzMiwxMCArMzcyLDE2IEBACiAJCWNpZnNGaWxlLT5zcmNoX2luZi5pbmZvX2xldmVsID0gU01CX0ZJTkRfRklMRV9ESVJFQ1RPUllfSU5GTzsKIAl9CiAKLQlyYyA9IENJRlNGaW5kRmlyc3QoeGlkLCBwVGNvbixmdWxsX3BhdGgsY2lmc19zYi0+bG9jYWxfbmxzLCAKLQkJJmNpZnNGaWxlLT5uZXRmaWQsICZjaWZzRmlsZS0+c3JjaF9pbmYpOyAKKwlyYyA9IENJRlNGaW5kRmlyc3QoeGlkLCBwVGNvbixmdWxsX3BhdGgsY2lmc19zYi0+bG9jYWxfbmxzLAorCQkmY2lmc0ZpbGUtPm5ldGZpZCwgJmNpZnNGaWxlLT5zcmNoX2luZiwKKwkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJaWYocmMgPT0gMCkKIAkJY2lmc0ZpbGUtPmludmFsaWRIYW5kbGUgPSBGQUxTRTsKKwlpZigocmMgPT0gLUVPUE5PVFNVUFApICYmIAorCQkoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1NFUlZFUl9JTlVNKSkgeworCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmPSB+Q0lGU19NT1VOVF9TRVJWRVJfSU5VTTsKKwkJZ290byBmZmlyc3RfcmV0cnk7CisJfQogCWtmcmVlKGZ1bGxfcGF0aCk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMzYzLDEwICs0MDksMTUgQEAKIAljRllJKDEsKCJuZXcgZW50cnkgJXAgb2xkIGVudHJ5ICVwIixuZXdfZW50cnksb2xkX2VudHJ5KSk7CiAJLyogdmFsaWRhdGUgdGhhdCBuZXdfZW50cnkgaXMgbm90IHBhc3QgZW5kIG9mIFNNQiAqLwogCWlmKG5ld19lbnRyeSA+PSBlbmRfb2Zfc21iKSB7Ci0JCWNGWUkoMSwoInNlYXJjaCBlbnRyeSAlcCBiZWdhbiBhZnRlciBlbmQgb2YgU01CICVwIG9sZCBlbnRyeSAlcCIsCi0JCQluZXdfZW50cnksZW5kX29mX3NtYixvbGRfZW50cnkpKTsgCisJCWNFUlJPUigxLAorCQkgICAgICAoInNlYXJjaCBlbnRyeSAlcCBiZWdhbiBhZnRlciBlbmQgb2YgU01CICVwIG9sZCBlbnRyeSAlcCIsCisJCQluZXdfZW50cnksIGVuZF9vZl9zbWIsIG9sZF9lbnRyeSkpOyAKIAkJcmV0dXJuIE5VTEw7Ci0JfSBlbHNlCisJfSBlbHNlIGlmIChuZXdfZW50cnkgKyBzaXplb2YoRklMRV9ESVJFQ1RPUllfSU5GTykgPiBlbmRfb2Zfc21iKSB7CisJCWNFUlJPUigxLCgic2VhcmNoIGVudHJ5ICVwIGV4dGVuZHMgYWZ0ZXIgZW5kIG9mIFNNQiAlcCIsCisJCQluZXdfZW50cnksIGVuZF9vZl9zbWIpKTsKKwkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIAogCQlyZXR1cm4gbmV3X2VudHJ5OwogCiB9CkBAIC01OTQsNyArNjQ1LDEyIEBACiAJaWYodW5pY29kZSkgewogCQkvKiBCQiBmaXhtZSAtIHRlc3Qgd2l0aCBsb25nIG5hbWVzICovCiAJCS8qIE5vdGUgY29udmVydGVkIGZpbGVuYW1lIGNhbiBiZSBsb25nZXIgdGhhbiBpbiB1bmljb2RlICovCi0JCXBxc3QtPmxlbiA9IGNpZnNfc3RyZnJvbVVDU19sZSgoY2hhciAqKXBxc3QtPm5hbWUsKHdjaGFyX3QgKilmaWxlbmFtZSxsZW4vMixubHQpOworCQlpZihjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKQorCQkJcHFzdC0+bGVuID0gY2lmc19jb252ZXJ0VUNTcGF0aCgoY2hhciAqKXBxc3QtPm5hbWUsCisJCQkJCShfX2xlMTYgKilmaWxlbmFtZSwgbGVuLzIsIG5sdCk7CisJCWVsc2UKKwkJCXBxc3QtPmxlbiA9IGNpZnNfc3RyZnJvbVVDU19sZSgoY2hhciAqKXBxc3QtPm5hbWUsCisJCQkJCSh3Y2hhcl90ICopZmlsZW5hbWUsbGVuLzIsbmx0KTsKIAl9IGVsc2UgewogCQlwcXN0LT5uYW1lID0gZmlsZW5hbWU7CiAJCXBxc3QtPmxlbiA9IGxlbjsKQEAgLTY1NCwxMCArNzEwLDE1IEBACiAJCWluc2VydF9pbm9kZV9oYXNoKHRtcF9pbm9kZSk7CiAJfQogCisJLyogd2UgcGFzcyBpbiByYyBiZWxvdywgaW5kaWNhdGluZyB3aGV0aGVyIGl0IGlzIGEgbmV3IGlub2RlLAorCSAgIHNvIHdlIGNhbiBmaWd1cmUgb3V0IHdoZXRoZXIgdG8gaW52YWxpZGF0ZSB0aGUgaW5vZGUgY2FjaGVkCisJICAgZGF0YSBpZiB0aGUgZmlsZSBoYXMgY2hhbmdlZCAqLwogCWlmKHBDaWZzRi0+c3JjaF9pbmYuaW5mb19sZXZlbCA9PSBTTUJfRklORF9GSUxFX1VOSVgpIHsKLQkJdW5peF9maWxsX2luX2lub2RlKHRtcF9pbm9kZSwoRklMRV9VTklYX0lORk8gKilwZmluZEVudHJ5LCZvYmpfdHlwZSk7CisJCXVuaXhfZmlsbF9pbl9pbm9kZSh0bXBfaW5vZGUsCisJCQkJICAgKEZJTEVfVU5JWF9JTkZPICopcGZpbmRFbnRyeSwmb2JqX3R5cGUsIHJjKTsKIAl9IGVsc2UgewotCQlmaWxsX2luX2lub2RlKHRtcF9pbm9kZSwoRklMRV9ESVJFQ1RPUllfSU5GTyAqKXBmaW5kRW50cnksJm9ial90eXBlKTsKKwkJZmlsbF9pbl9pbm9kZSh0bXBfaW5vZGUsCisJCQkgICAgICAoRklMRV9ESVJFQ1RPUllfSU5GTyAqKXBmaW5kRW50cnksJm9ial90eXBlLCByYyk7CiAJfQogCQogCXJjID0gZmlsbGRpcihkaXJlbnRyeSxxc3RyaW5nLm5hbWUscXN0cmluZy5sZW4sZmlsZS0+Zl9wb3MsdG1wX2lub2RlLT5pX2lubyxvYmpfdHlwZSk7CkBAIC04MjMsNyArODg0LDExIEBACiAJCWVuZF9vZl9zbWIgPSBjaWZzRmlsZS0+c3JjaF9pbmYubnR3cmtfYnVmX3N0YXJ0ICsKIAkJCXNtYkNhbGNTaXplKChzdHJ1Y3Qgc21iX2hkciAqKQogCQkJCSAgICBjaWZzRmlsZS0+c3JjaF9pbmYubnR3cmtfYnVmX3N0YXJ0KTsKLQkJdG1wX2J1ZiA9IGttYWxsb2MoTkFNRV9NQVgrMSxHRlBfS0VSTkVMKTsKKwkJLyogVG8gYmUgc2FmZSAtIGZvciBVQ1MgdG8gVVRGLTggd2l0aCBzdHJpbmdzIGxvYWRlZAorCQl3aXRoIHRoZSByYXJlIGxvbmcgY2hhcmFjdGVycyBhbGxvYyBtb3JlIHRvIGFjY291bnQgZm9yCisJCXN1Y2ggbXVsdGlieXRlIHRhcmdldCBVVEYtOCBjaGFyYWN0ZXJzLiBjaWZzX3VuaWNvZGUuYywKKwkJd2hpY2ggYWN0dWFsbHkgZG9lcyB0aGUgY29udmVyc2lvbiwgaGFzIHRoZSBzYW1lIGxpbWl0ICovCisJCXRtcF9idWYgPSBrbWFsbG9jKCgyICogTkFNRV9NQVgpICsgNCwgR0ZQX0tFUk5FTCk7CiAJCWZvcihpPTA7KGk8bnVtX3RvX2ZpbGwpICYmIChyYyA9PSAwKTtpKyspIHsKIAkJCWlmKGN1cnJlbnRfZW50cnkgPT0gTlVMTCkgewogCQkJCS8qIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBjYXNlIGlzIGFuIGVycm9yICovCkBAIC04MzIsMTkgKzg5Nyw2IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCS8qIEJCIEZJWE1FIC0gbmVlZCB0byBlbmFibGUgdGhlIGJlbG93IGNvZGUgQkIgKi8KLQotCQkvKiBpZigoIShjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0pKSB8fAotCQkJICAgKGNpZnNGaWxlLT5zcmNoX2luZi5pbmZvX2xldmVsICE9IAotCQkJCSAgIHNvbWV0aGluZyB0aGF0IHN1cHBvcnRzIHNlcnZlciBpbm9kZXMpKSB7Ci0JCQkJY3JlYXRlIGRlbnRyeQotCQkJCWNyZWF0ZSBpbm9kZQotCQkJCWZpbGwgaW4gaW5vZGUgbmV3X2lub2RlIChnZXR0aW5nIGxvY2FsIGlfaW5vKQotCQkJfQotCQkJYWxzbyBjcmVhdGUgbG9jYWwgaW5vZGUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgKHNvIHdlIAotCQkJaGF2ZSBhIGNhY2hlIG9mIGlub2RlIG1ldGFkYXRhKSB1bmxlc3MgdGhpcyBuZXcgbW91bnQgCi0JCQlwYXJtIHNheXMgb3RoZXJ3aXNlICovCi0KIAkJCXJjID0gY2lmc19maWxsZGlyKGN1cnJlbnRfZW50cnksIGZpbGUsIAogCQkJCQlmaWxsZGlyLCBkaXJlbnRyeSx0bXBfYnVmKTsKIAkJCWZpbGUtPmZfcG9zKys7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYmVyci5oIGIvZnMvY2lmcy9zbWJlcnIuaAppbmRleCBlMjFmMTM4Li5jZDQxYzY3IDEwMDY0NAotLS0gYS9mcy9jaWZzL3NtYmVyci5oCisrKyBiL2ZzL2NpZnMvc21iZXJyLmgKQEAgLTIyLDk0ICsyMiwxNTkgQEAKICAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EgCiAgKi8KIAotI2RlZmluZSBTVUNDRVNTIDAJCS8qIFRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsLiAqLwotI2RlZmluZSBFUlJET1MgMHgwMQkJLyogRXJyb3IgaXMgZnJvbSB0aGUgY29yZSBET1Mgb3BlcmF0aW5nIHN5c3RlbSBzZXQgKi8KLSNkZWZpbmUgRVJSU1JWIDB4MDIJCS8qIEVycm9yIGlzIGdlbmVyYXRlZCBieSB0aGUgZmlsZSBzZXJ2ZXIgZGFlbW9uICovCi0jZGVmaW5lIEVSUkhSRCAweDAzCQkvKiBFcnJvciBpcyBhIGhhcmR3YXJlIGVycm9yLiAqLwotI2RlZmluZSBFUlJDTUQgMHhGRgkJLyogIENvbW1hbmQgd2FzIG5vdCBpbiB0aGUgIlNNQiIgZm9ybWF0LiAqLworI2RlZmluZSBTVUNDRVNTCTB4MDAJLyogVGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWwuICovCisjZGVmaW5lIEVSUkRPUwkweDAxCS8qIEVycm9yIGlzIGZyb20gdGhlIGNvcmUgRE9TIG9wZXJhdGluZyBzeXN0ZW0gc2V0ICovCisjZGVmaW5lIEVSUlNSVgkweDAyCS8qIEVycm9yIGlzIGdlbmVyYXRlZCBieSB0aGUgZmlsZSBzZXJ2ZXIgZGFlbW9uICovCisjZGVmaW5lIEVSUkhSRAkweDAzCS8qIEVycm9yIGlzIGEgaGFyZHdhcmUgZXJyb3IuICovCisjZGVmaW5lIEVSUkNNRAkweEZGCS8qIENvbW1hbmQgd2FzIG5vdCBpbiB0aGUgIlNNQiIgZm9ybWF0LiAqLwogCiAvKiBUaGUgZm9sbG93aW5nIGVycm9yIGNvZGVzIG1heSBiZSBnZW5lcmF0ZWQgd2l0aCB0aGUgU1VDQ0VTUyBlcnJvciBjbGFzcy4qLwogCi0jZGVmaW5lIFNVQ0NFU1MgMAkJLyogVGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWwuICovCisvKiNkZWZpbmUgU1VDQ0VTUwkwCVRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsLiAqLwogCiAvKiBUaGUgZm9sbG93aW5nIGVycm9yIGNvZGVzIG1heSBiZSBnZW5lcmF0ZWQgd2l0aCB0aGUgRVJSRE9TIGVycm9yIGNsYXNzLiovCiAKLSNkZWZpbmUgRVJSYmFkZnVuYyAxCQkvKiBJbnZhbGlkIGZ1bmN0aW9uLiBUaGUgc2VydmVyIGRpZCBub3QgcmVjb2duaXplIG9yIGNvdWxkIG5vdCBwZXJmb3JtIGEgc3lzdGVtIGNhbGwgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2ZXIsIGUuZy4sIHNldCB0aGUgRElSRUNUT1JZIGF0dHJpYnV0ZSBvbiBhIGRhdGEgZmlsZSwgaW52YWxpZCBzZWVrIG1vZGUuICovCi0jZGVmaW5lIEVSUmJhZGZpbGUgMgkJLypGaWxlIG5vdCBmb3VuZC4gVGhlIGxhc3QgY29tcG9uZW50IG9mIGEgZmlsZSdzIHBhdGhuYW1lIGNvdWxkIG5vdCBiZSBmb3VuZC4gKi8KLSNkZWZpbmUgRVJSYmFkcGF0aCAzCQkvKiBEaXJlY3RvcnkgaW52YWxpZC4gQSBkaXJlY3RvcnkgY29tcG9uZW50IGluIGEgcGF0aG5hbWUgY291bGQgbm90IGJlIGZvdW5kLiAqLwotI2RlZmluZSBFUlJub2ZpZHMgNAkJLyogVG9vIG1hbnkgb3BlbiBmaWxlcy4gVGhlIHNlcnZlciBoYXMgbm8gZmlsZSBoYW5kbGVzIGF2YWlsYWJsZS4gKi8KLSNkZWZpbmUgRVJSbm9hY2Nlc3MgNQkJLyogQWNjZXNzIGRlbmllZCwgdGhlIGNsaWVudCdzIGNvbnRleHQgZG9lcyBub3QgcGVybWl0IHRoZSByZXF1ZXN0ZWQgZnVuY3Rpb24uIFRoaXMgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiBpbnZhbGlkIHJlbmFtZSBjb21tYW5kLCB3cml0ZSB0byBGaWQgb3BlbiBmb3IgcmVhZCBvbmx5LCByZWFkIG9uIEZpZCBvcGVuIGZvciB3cml0ZSBvbmx5LCBhdHRlbXB0IHRvIGRlbGV0ZSBhIG5vbi1lbXB0eSBkaXJlY3RvcnkgKi8KLSNkZWZpbmUgRVJSYmFkZmlkIDYJCS8qIEludmFsaWQgZmlsZSBoYW5kbGUuIFRoZSBmaWxlIGhhbmRsZSBzcGVjaWZpZWQgd2FzIG5vdCByZWNvZ25pemVkIGJ5IHRoZSBzZXJ2ZXIuICovCi0jZGVmaW5lIEVSUmJhZG1jYiA3CQkvKiBNZW1vcnkgY29udHJvbCBibG9ja3MgZGVzdHJveWVkLiAqLwotI2RlZmluZSBFUlJub21lbSA4CQkvKiBJbnN1ZmZpY2llbnQgc2VydmVyIG1lbW9yeSB0byBwZXJmb3JtIHRoZSByZXF1ZXN0ZWQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEVSUmJhZG1lbSA5CQkvKiBJbnZhbGlkIG1lbW9yeSBibG9jayBhZGRyZXNzLiAqLwotI2RlZmluZSBFUlJiYWRlbnYgMTAJCS8qIEludmFsaWQgZW52aXJvbm1lbnQuICovCi0jZGVmaW5lIEVSUmJhZGZvcm1hdCAxMQkJLyogSW52YWxpZCBmb3JtYXQuICovCi0jZGVmaW5lIEVSUmJhZGFjY2VzcyAxMgkJLyogSW52YWxpZCBvcGVuIG1vZGUuICovCi0jZGVmaW5lIEVSUmJhZGRhdGEgMTMJCS8qIEludmFsaWQgZGF0YSAoZ2VuZXJhdGVkIG9ubHkgYnkgSU9DVEwgY2FsbHMgd2l0aGluIHRoZSBzZXJ2ZXIpLiAqLwotI2RlZmluZSBFUlJiYWRkcml2ZSAxNQkJLyogSW52YWxpZCBkcml2ZSBzcGVjaWZpZWQuICovCi0jZGVmaW5lIEVSUnJlbWNkIDE2CQkvKiBBIERlbGV0ZSBEaXJlY3RvcnkgcmVxdWVzdCBhdHRlbXB0ZWQgdG8gcmVtb3ZlIHRoZSBzZXJ2ZXIncyBjdXJyZW50IGRpcmVjdG9yeS4gKi8KLSNkZWZpbmUgRVJSZGlmZmRldmljZSAxNwkvKiBOb3Qgc2FtZSBkZXZpY2UgKGUuZy4sIGEgY3Jvc3Mgdm9sdW1lIHJlbmFtZSB3YXMgYXR0ZW1wdGVkICovCi0jZGVmaW5lIEVSUm5vZmlsZXMgMTgJCS8qIEEgRmlsZSBTZWFyY2ggY29tbWFuZCBjYW4gZmluZCBubyBtb3JlIGZpbGVzIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEuICovCi0jZGVmaW5lIEVSUmdlbmVyYWwgMzEKLSNkZWZpbmUgRVJSYmFkc2hhcmUgMzIJCS8qIFRoZSBzaGFyaW5nIG1vZGUgc3BlY2lmaWVkIGZvciBhbiBPcGVuIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIEZJRHMgb24gdGhlIGZpbGUuICovCi0jZGVmaW5lIEVSUmxvY2sgMzMJCS8qIEEgTG9jayByZXF1ZXN0IGNvbmZsaWN0ZWQgd2l0aCBhbiBleGlzdGluZyBsb2NrIG9yIHNwZWNpZmllZCBhbiBpbnZhbGlkIG1vZGUsIG9yIGFuIFVubG9jayByZXF1ZXN0ZWQgYXR0ZW1wdGVkIHRvIHJlbW92ZSBhIGxvY2sgaGVsZCBieSBhbm90aGVyIHByb2Nlc3MuICovCi0jZGVmaW5lIEVSUnVuc3VwICAgICA1MAotI2RlZmluZSBFUlJub3N1Y2hzaGFyZSA2NwotI2RlZmluZSBFUlJmaWxleGlzdHMgODAJCS8qIFRoZSBmaWxlIG5hbWVkIGluIHRoZSByZXF1ZXN0IGFscmVhZHkgZXhpc3RzLiAqLwotI2RlZmluZSBFUlJpbnZwYXJtICAgODcKLSNkZWZpbmUgRVJSZGlza2Z1bGwgIDExMgotI2RlZmluZSBFUlJpbnZuYW1lICAgMTIzCi0jZGVmaW5lIEVSUmludmxldmVsICAxMjQKLSNkZWZpbmUgRVJSZGlybm90ZW1wdHkgMTQ1Ci0jZGVmaW5lIEVSUm5vdGxvY2tlZCAgIDE1OAotI2RlZmluZSBFUlJhbHJlYWR5ZXhpc3RzIDE4MwotI2RlZmluZSBFUlJiYWRwaXBlIDIzMAotI2RlZmluZSBFUlJwaXBlYnVzeSAyMzEKLSNkZWZpbmUgRVJScGlwZWNsb3NpbmcgMjMyCi0jZGVmaW5lIEVSUm5vdGNvbm5lY3RlZCAyMzMKLSNkZWZpbmUgRVJSbW9yZWRhdGEgICAgMjM0Ci0jZGVmaW5lIEVSUmVhc25vdHN1cHBvcnRlZCAyODIKLSNkZWZpbmUgRXJyUXVvdGEgMHgyMDAJCS8qIFRoZSBvcGVyYXRpb24gd291bGQgY2F1c2UgYSBxdW90YSBsaW1pdCB0byBiZSBleGNlZWRlZC4gKi8KLSNkZWZpbmUgRXJyTm90QUxpbmsgMHgyMDEJLyogQSBsaW5rIG9wZXJhdGlvbiB3YXMgcGVyZm9ybWVkIG9uIGEgcGF0aG5hbWUgdGhhdAotCQkJCSAgIHdhcyBub3QgYSBsaW5rLiAqLworI2RlZmluZSBFUlJiYWRmdW5jCQkxCS8qIEludmFsaWQgZnVuY3Rpb24uIFRoZSBzZXJ2ZXIgZGlkIG5vdAorCQkJCQkgICByZWNvZ25pemUgb3IgY291bGQgbm90IHBlcmZvcm0gYQorCQkJCQkgICBzeXN0ZW0gY2FsbCBnZW5lcmF0ZWQgYnkgdGhlIHNlcnZlciwKKwkJCQkJICAgZS5nLiwgc2V0IHRoZSBESVJFQ1RPUlkgYXR0cmlidXRlIG9uCisJCQkJCSAgIGEgZGF0YSBmaWxlLCBpbnZhbGlkIHNlZWsgbW9kZS4gKi8KKyNkZWZpbmUgRVJSYmFkZmlsZQkJMgkvKiBGaWxlIG5vdCBmb3VuZC4gVGhlIGxhc3QgY29tcG9uZW50CisJCQkJCSAgIG9mIGEgZmlsZSdzIHBhdGhuYW1lIGNvdWxkIG5vdCBiZQorCQkJCQkgICBmb3VuZC4gKi8KKyNkZWZpbmUgRVJSYmFkcGF0aAkJMwkvKiBEaXJlY3RvcnkgaW52YWxpZC4gQSBkaXJlY3RvcnkKKwkJCQkJICAgY29tcG9uZW50IGluIGEgcGF0aG5hbWUgY291bGQgbm90IGJlCisJCQkJCSAgIGZvdW5kLiAqLworI2RlZmluZSBFUlJub2ZpZHMJCTQJLyogVG9vIG1hbnkgb3BlbiBmaWxlcy4gVGhlIHNlcnZlciBoYXMKKwkJCQkJICAgbm8gZmlsZSBoYW5kbGVzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgRVJSbm9hY2Nlc3MJCTUJLyogQWNjZXNzIGRlbmllZCwgdGhlIGNsaWVudCdzIGNvbnRleHQKKwkJCQkJICAgZG9lcyBub3QgcGVybWl0IHRoZSByZXF1ZXN0ZWQKKwkJCQkJICAgZnVuY3Rpb24uIFRoaXMgaW5jbHVkZXMgdGhlCisJCQkJCSAgIGZvbGxvd2luZyBjb25kaXRpb25zOiBpbnZhbGlkIHJlbmFtZQorCQkJCQkgICBjb21tYW5kLCB3cml0ZSB0byBGaWQgb3BlbiBmb3IgcmVhZAorCQkJCQkgICBvbmx5LCByZWFkIG9uIEZpZCBvcGVuIGZvciB3cml0ZQorCQkJCQkgICBvbmx5LCBhdHRlbXB0IHRvIGRlbGV0ZSBhIG5vbi1lbXB0eQorCQkJCQkgICBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgRVJSYmFkZmlkCQk2CS8qIEludmFsaWQgZmlsZSBoYW5kbGUuIFRoZSBmaWxlIGhhbmRsZQorCQkJCQkgICBzcGVjaWZpZWQgd2FzIG5vdCByZWNvZ25pemVkIGJ5IHRoZQorCQkJCQkgICBzZXJ2ZXIuICovCisjZGVmaW5lIEVSUmJhZG1jYgkJNwkvKiBNZW1vcnkgY29udHJvbCBibG9ja3MgZGVzdHJveWVkLiAqLworI2RlZmluZSBFUlJub21lbQkJOAkvKiBJbnN1ZmZpY2llbnQgc2VydmVyIG1lbW9yeSB0bworCQkJCQkgICBwZXJmb3JtIHRoZSByZXF1ZXN0ZWQgZnVuY3Rpb24uICovCisjZGVmaW5lIEVSUmJhZG1lbQkJOQkvKiBJbnZhbGlkIG1lbW9yeSBibG9jayBhZGRyZXNzLiAqLworI2RlZmluZSBFUlJiYWRlbnYJCTEwCS8qIEludmFsaWQgZW52aXJvbm1lbnQuICovCisjZGVmaW5lIEVSUmJhZGZvcm1hdAkJMTEJLyogSW52YWxpZCBmb3JtYXQuICovCisjZGVmaW5lIEVSUmJhZGFjY2VzcwkJMTIJLyogSW52YWxpZCBvcGVuIG1vZGUuICovCisjZGVmaW5lIEVSUmJhZGRhdGEJCTEzCS8qIEludmFsaWQgZGF0YSAoZ2VuZXJhdGVkIG9ubHkgYnkKKwkJCQkJICAgSU9DVEwgY2FsbHMgd2l0aGluIHRoZSBzZXJ2ZXIpLiAqLworI2RlZmluZSBFUlJiYWRkcml2ZQkJMTUJLyogSW52YWxpZCBkcml2ZSBzcGVjaWZpZWQuICovCisjZGVmaW5lIEVSUnJlbWNkCQkxNgkvKiBBIERlbGV0ZSBEaXJlY3RvcnkgcmVxdWVzdCBhdHRlbXB0ZWQKKwkJCQkJICAgdG8gcmVtb3ZlIHRoZSBzZXJ2ZXIncyBjdXJyZW50CisJCQkJCSAgIGRpcmVjdG9yeS4gKi8KKyNkZWZpbmUgRVJSZGlmZmRldmljZQkJMTcJLyogTm90IHNhbWUgZGV2aWNlIChlLmcuLCBhIGNyb3NzCisJCQkJCSAgIHZvbHVtZSByZW5hbWUgd2FzIGF0dGVtcHRlZCAqLworI2RlZmluZSBFUlJub2ZpbGVzCQkxOAkvKiBBIEZpbGUgU2VhcmNoIGNvbW1hbmQgY2FuIGZpbmQgbm8KKwkJCQkJICAgbW9yZSBmaWxlcyBtYXRjaGluZyB0aGUgc3BlY2lmaWVkCisJCQkJCSAgIGNyaXRlcmlhLiAqLworI2RlZmluZSBFUlJnZW5lcmFsCQkzMQorI2RlZmluZSBFUlJiYWRzaGFyZQkJMzIJLyogVGhlIHNoYXJpbmcgbW9kZSBzcGVjaWZpZWQgZm9yIGFuCisJCQkJCSAgIE9wZW4gY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgRklEcyBvbgorCQkJCQkgICB0aGUgZmlsZS4gKi8KKyNkZWZpbmUgRVJSbG9jawkJCTMzCS8qIEEgTG9jayByZXF1ZXN0IGNvbmZsaWN0ZWQgd2l0aCBhbgorCQkJCQkgICBleGlzdGluZyBsb2NrIG9yIHNwZWNpZmllZCBhbgorCQkJCQkgICBpbnZhbGlkIG1vZGUsIG9yIGFuIFVubG9jayByZXF1ZXN0ZWQKKwkJCQkJICAgYXR0ZW1wdGVkIHRvIHJlbW92ZSBhIGxvY2sgaGVsZCBieQorCQkJCQkgICBhbm90aGVyIHByb2Nlc3MuICovCisjZGVmaW5lIEVSUnVuc3VwCQk1MAorI2RlZmluZSBFUlJub3N1Y2hzaGFyZQkJNjcKKyNkZWZpbmUgRVJSZmlsZXhpc3RzCQk4MAkvKiBUaGUgZmlsZSBuYW1lZCBpbiB0aGUgcmVxdWVzdAorCQkJCQkgICBhbHJlYWR5IGV4aXN0cy4gKi8KKyNkZWZpbmUgRVJSaW52cGFybQkJODcKKyNkZWZpbmUgRVJSZGlza2Z1bGwJCTExMgorI2RlZmluZSBFUlJpbnZuYW1lCQkxMjMKKyNkZWZpbmUgRVJSaW52bGV2ZWwJCTEyNAorI2RlZmluZSBFUlJkaXJub3RlbXB0eQkJMTQ1CisjZGVmaW5lIEVSUm5vdGxvY2tlZAkJMTU4CisjZGVmaW5lIEVSUmFscmVhZHlleGlzdHMJMTgzCisjZGVmaW5lIEVSUmJhZHBpcGUJCTIzMAorI2RlZmluZSBFUlJwaXBlYnVzeQkJMjMxCisjZGVmaW5lIEVSUnBpcGVjbG9zaW5nCQkyMzIKKyNkZWZpbmUgRVJSbm90Y29ubmVjdGVkCQkyMzMKKyNkZWZpbmUgRVJSbW9yZWRhdGEJCTIzNAorI2RlZmluZSBFUlJlYXNub3RzdXBwb3J0ZWQJMjgyCisjZGVmaW5lIEVyclF1b3RhCQkweDIwMAkvKiBUaGUgb3BlcmF0aW9uIHdvdWxkIGNhdXNlIGEgcXVvdGEKKwkJCQkJICAgbGltaXQgdG8gYmUgZXhjZWVkZWQuICovCisjZGVmaW5lIEVyck5vdEFMaW5rCQkweDIwMQkvKiBBIGxpbmsgb3BlcmF0aW9uIHdhcyBwZXJmb3JtZWQgb24gYQorCQkJCQkgICBwYXRobmFtZSB0aGF0IHdhcyBub3QgYSBsaW5rLiAqLwogCi0vKiBGb2xsb3dpbmcgZXJyb3IgY29kZXMgbWF5IGJlIGdlbmVyYXRlZCB3aXRoIHRoZSBFUlJTUlYgZXJyb3IKLWNsYXNzLiovCisvKiBCZWxvdyBlcnJvcnMgYXJlIHVzZWQgaW50ZXJuYWxseSAoZG8gbm90IGNvbWUgb3ZlciB0aGUgd2lyZSkgZm9yIHBhc3N0aHJvdWdoCisgICBmcm9tIFNUQVRVUyBjb2RlcyB0byBQT1NJWCBvbmx5ICAqLworI2RlZmluZSBFcnJUb29NYW55TGlua3MgICAgICAgICAweEZGRkUgICAKIAotI2RlZmluZSBFUlJlcnJvciAxCQkvKiBOb24tc3BlY2lmaWMgZXJyb3IgY29kZS4gSXQgaXMgcmV0dXJuZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiByZXNvdXJjZSBvdGhlciB0aGFuIGRpc2sgc3BhY2UgZXhoYXVzdGVkIChlLmcuIFRJRHMpLCBmaXJzdCBTTUIgY29tbWFuZCB3YXMgbm90IG5lZ290aWF0ZSwgbXVsdGlwbGUgbmVnb3RpYXRlcyBhdHRlbXB0ZWQsIGFuZCBpbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuICovCi0jZGVmaW5lIEVSUmJhZHB3IDIJCS8qIEJhZCBwYXNzd29yZCAtIG5hbWUvcGFzc3dvcmQgcGFpciBpbiBhIFRyZWVDb25uZWN0IG9yIFNlc3Npb24gU2V0dXAgYXJlIGludmFsaWQuICovCi0jZGVmaW5lIEVSUmJhZHR5cGUgMwkJLyogdXNlZCBmb3IgaW5kaWNhdGluZyBERlMgcmVmZXJyYWwgbmVlZGVkICovCi0jZGVmaW5lIEVSUmFjY2VzcyA0CQkvKiBUaGUgY2xpZW50IGRvZXMgbm90IGhhdmUgdGhlIG5lY2Vzc2FyeSBhY2Nlc3MgcmlnaHRzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGNvbnRleHQgZm9yIHJlcXVlc3RlZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgRVJSaW52dGlkIDUJCS8qIFRoZSBUaWQgc3BlY2lmaWVkIGluIGEgY29tbWFuZCB3YXMgaW52YWxpZC4gKi8KLSNkZWZpbmUgRVJSaW52bmV0bmFtZSA2CQkvKiBJbnZhbGlkIG5ldHdvcmsgbmFtZSBpbiB0cmVlIGNvbm5lY3QuICovCi0jZGVmaW5lIEVSUmludmRldmljZSA3CQkvKiBJbnZhbGlkIGRldmljZSAtIHByaW50ZXIgcmVxdWVzdCBtYWRlIHRvIG5vbi1wcmludGVyIGNvbm5lY3Rpb24gb3Igbm9uLXByaW50ZXIgcmVxdWVzdCBtYWRlIHRvIHByaW50ZXIgY29ubmVjdGlvbi4gKi8KLSNkZWZpbmUgRVJScWZ1bGwgNDkJCS8qIFByaW50IHF1ZXVlIGZ1bGwgKGZpbGVzKSAtLSByZXR1cm5lZCBieSBvcGVuIHByaW50IGZpbGUuICovCi0jZGVmaW5lIEVSUnF0b29iaWcgNTAJCS8qIFByaW50IHF1ZXVlIGZ1bGwgLS0gbm8gc3BhY2UuICovCi0jZGVmaW5lIEVSUnFlb2YgICAgICAgICA1MQkvKiBFT0Ygb24gcHJpbnQgcXVldWUgZHVtcCAqLwotI2RlZmluZSBFUlJpbnZwZmlkICAgICAgNTIJLyogSW52YWxpZCBwcmludCBmaWxlIEZJRC4gKi8KLSNkZWZpbmUgRVJSc21iY21kICAgICAgIDY0CS8qIFRoZSBzZXJ2ZXIgZGlkIG5vdCByZWNvZ25pemUgdGhlIGNvbW1hbmQgcmVjZWl2ZWQuICovCi0jZGVmaW5lIEVSUnNydmVycm9yICAgICA2NQkvKiBUaGUgc2VydmVyIGVuY291bnRlcmVkIGFuIGludGVybmFsIGVycm9yLCBlLmcuLCBzeXN0ZW0gZmlsZSB1bmF2YWlsYWJsZS4gKi8KLSNkZWZpbmUgRVJSYmFkQklEICAgICAgIDY2CS8qIChvYnNvbGV0ZSkgKi8KLSNkZWZpbmUgRVJSZmlsZXNwZWNzICAgIDY3CS8qIFRoZSBGaWQgYW5kIHBhdGhuYW1lIHBhcmFtZXRlcnMgY29udGFpbmVkIGFuIGludmFsaWQgY29tYmluYXRpb24gb2YgdmFsdWVzLiAqLwotI2RlZmluZSBFUlJiYWRMaW5rICAgICAgNjgJLyogKG9ic29sZXRlKSAqLwotI2RlZmluZSBFUlJiYWRwZXJtaXRzICAgNjkJLyogVGhlIGFjY2VzcyBwZXJtaXNzaW9ucyBzcGVjaWZpZWQgZm9yIGEgZmlsZSBvciBkaXJlY3RvcnkgYXJlIG5vdCBhIHZhbGlkIGNvbWJpbmF0aW9uLiAqLwotI2RlZmluZSBFUlJiYWRQSUQgICAgICAgNzAKLSNkZWZpbmUgRVJSc2V0YXR0cm1vZGUgIDcxCS8qIGF0dHJpYnV0ZSAobW9kZSkgaXMgaW52YWxpZCAqLwotI2RlZmluZSBFUlJwYXVzZWQgICAgICAgODEJLyogU2VydmVyIGlzIHBhdXNlZCAqLwotI2RlZmluZSBFUlJtc2dvZmYJODIJLyogcmVzZXJ2ZWQgLSBtZXNzYWdpbmcgb2ZmICovCi0jZGVmaW5lIEVSUm5vcm9vbSAgICAgICA4MwkvKiByZXNlcnZlZCAtIG5vIHJvb20gZm9yIG1lc3NhZ2UgKi8KLSNkZWZpbmUgRVJScm11bnMgICAgICAgIDg3CS8qIHJlc2VydmVkIC0gdG9vIG1hbnkgcmVtb3RlIG5hbWVzICovCi0jZGVmaW5lIEVSUnRpbWVvdXQgICAgICA4OAkvKiBvcGVyYXRpb24gdGltZWQgb3V0ICovCi0jZGVmaW5lIEVSUm5vcmVzb3VyY2UgICA4OQkvKiBObyByZXNvdXJjZXMgYXZhaWxhYmxlIGZvciByZXF1ZXN0ICovCi0jZGVmaW5lIEVSUnRvb21hbnl1aWRzICA5MAkvKiBUb28gbWFueSBVSURzIGFjdGl2ZSBvbiB0aGlzIHNlc3Npb24gKi8KLSNkZWZpbmUgRVJSYmFkdWlkICAgICAgIDkxCS8qIFRoZSBVSUQgaXMgbm90IGtub3duIGFzIGEgdmFsaWQgdXNlciAqLwotI2RlZmluZSBFUlJ1c2VtcHggICAgICAyNTAJLyogdGVtcG9yYXJpbHkgdW5hYmxlIHRvIHVzZSByYXcgKi8KLSNkZWZpbmUgRVJSdXNlc3RkICAgICAgMjUxCS8qIHRlbXBvcmFyaWx5IHVuYWJsZSB0byB1c2UgZWl0aGVyIHJhdyBvciBtcHggKi8KLSNkZWZpbmUgRVJSX05PVElGWV9FTlVNX0RJUiAxMDI0Ci0jZGVmaW5lIEVSUmFjY291bnRleHBpcmVkIDIyMzkKLSNkZWZpbmUgRVJSYmFkY2xpZW50ICAgICAgMjI0MAotI2RlZmluZSBFUlJiYWRMb2dvblRpbWUgICAyMjQxCi0jZGVmaW5lIEVSUnBhc3N3b3JkRXhwaXJlZCAyMjQyCi0jZGVmaW5lIEVSUm5ldGxvZ29uTm90U3RhcnRlZCAyNDU1Ci0jZGVmaW5lIEVSUm5vc3VwcG9ydCAgICAgICAweEZGRkYKKy8qIEZvbGxvd2luZyBlcnJvciBjb2RlcyBtYXkgYmUgZ2VuZXJhdGVkIHdpdGggdGhlIEVSUlNSViBlcnJvciBjbGFzcy4qLworCisjZGVmaW5lIEVSUmVycm9yCQkxCS8qIE5vbi1zcGVjaWZpYyBlcnJvciBjb2RlLiBJdCBpcworCQkJCQkgICByZXR1cm5lZCB1bmRlciB0aGUgZm9sbG93aW5nCisJCQkJCSAgIGNvbmRpdGlvbnM6IHJlc291cmNlIG90aGVyIHRoYW4gZGlzaworCQkJCQkgICBzcGFjZSBleGhhdXN0ZWQgKGUuZy4gVElEcyksIGZpcnN0CisJCQkJCSAgIFNNQiBjb21tYW5kIHdhcyBub3QgbmVnb3RpYXRlLAorCQkJCQkgICBtdWx0aXBsZSBuZWdvdGlhdGVzIGF0dGVtcHRlZCwgYW5kCisJCQkJCSAgIGludGVybmFsIHNlcnZlciBlcnJvci4gKi8KKyNkZWZpbmUgRVJSYmFkcHcJCTIJLyogQmFkIHBhc3N3b3JkIC0gbmFtZS9wYXNzd29yZCBwYWlyIGluCisJCQkJCSAgIGEgVHJlZUNvbm5lY3Qgb3IgU2Vzc2lvbiBTZXR1cCBhcmUKKwkJCQkJICAgaW52YWxpZC4gKi8KKyNkZWZpbmUgRVJSYmFkdHlwZQkJMwkvKiB1c2VkIGZvciBpbmRpY2F0aW5nIERGUyByZWZlcnJhbAorCQkJCQkgICBuZWVkZWQgKi8KKyNkZWZpbmUgRVJSYWNjZXNzCQk0CS8qIFRoZSBjbGllbnQgZG9lcyBub3QgaGF2ZSB0aGUKKwkJCQkJICAgbmVjZXNzYXJ5IGFjY2VzcyByaWdodHMgd2l0aGluIHRoZQorCQkJCQkgICBzcGVjaWZpZWQgY29udGV4dCBmb3IgcmVxdWVzdGVkCisJCQkJCSAgIGZ1bmN0aW9uLiAqLworI2RlZmluZSBFUlJpbnZ0aWQJCTUJLyogVGhlIFRpZCBzcGVjaWZpZWQgaW4gYSBjb21tYW5kIHdhcworCQkJCQkgICBpbnZhbGlkLiAqLworI2RlZmluZSBFUlJpbnZuZXRuYW1lCQk2CS8qIEludmFsaWQgbmV0d29yayBuYW1lIGluIHRyZWUKKwkJCQkJICAgY29ubmVjdC4gKi8KKyNkZWZpbmUgRVJSaW52ZGV2aWNlCQk3CS8qIEludmFsaWQgZGV2aWNlIC0gcHJpbnRlciByZXF1ZXN0CisJCQkJCSAgIG1hZGUgdG8gbm9uLXByaW50ZXIgY29ubmVjdGlvbiBvcgorCQkJCQkgICBub24tcHJpbnRlciByZXF1ZXN0IG1hZGUgdG8gcHJpbnRlcgorCQkJCQkgICBjb25uZWN0aW9uLiAqLworI2RlZmluZSBFUlJxZnVsbAkJNDkJLyogUHJpbnQgcXVldWUgZnVsbCAoZmlsZXMpIC0tIHJldHVybmVkCisJCQkJCSAgIGJ5IG9wZW4gcHJpbnQgZmlsZS4gKi8KKyNkZWZpbmUgRVJScXRvb2JpZwkJNTAJLyogUHJpbnQgcXVldWUgZnVsbCAtLSBubyBzcGFjZS4gKi8KKyNkZWZpbmUgRVJScWVvZgkJCTUxCS8qIEVPRiBvbiBwcmludCBxdWV1ZSBkdW1wICovCisjZGVmaW5lIEVSUmludnBmaWQJCTUyCS8qIEludmFsaWQgcHJpbnQgZmlsZSBGSUQuICovCisjZGVmaW5lIEVSUnNtYmNtZAkJNjQJLyogVGhlIHNlcnZlciBkaWQgbm90IHJlY29nbml6ZSB0aGUKKwkJCQkJICAgY29tbWFuZCByZWNlaXZlZC4gKi8KKyNkZWZpbmUgRVJSc3J2ZXJyb3IJCTY1CS8qIFRoZSBzZXJ2ZXIgZW5jb3VudGVyZWQgYW4gaW50ZXJuYWwKKwkJCQkJICAgZXJyb3IsIGUuZy4sIHN5c3RlbSBmaWxlCisJCQkJCSAgIHVuYXZhaWxhYmxlLiAqLworI2RlZmluZSBFUlJiYWRCSUQJCTY2CS8qIChvYnNvbGV0ZSkgKi8KKyNkZWZpbmUgRVJSZmlsZXNwZWNzCQk2NwkvKiBUaGUgRmlkIGFuZCBwYXRobmFtZSBwYXJhbWV0ZXJzCisJCQkJCSAgIGNvbnRhaW5lZCBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uIG9mCisJCQkJCSAgIHZhbHVlcy4gKi8KKyNkZWZpbmUgRVJSYmFkTGluawkJNjgJLyogKG9ic29sZXRlKSAqLworI2RlZmluZSBFUlJiYWRwZXJtaXRzCQk2OQkvKiBUaGUgYWNjZXNzIHBlcm1pc3Npb25zIHNwZWNpZmllZCBmb3IKKwkJCQkJICAgYSBmaWxlIG9yIGRpcmVjdG9yeSBhcmUgbm90IGEgdmFsaWQKKwkJCQkJICAgY29tYmluYXRpb24uICovCisjZGVmaW5lIEVSUmJhZFBJRAkJNzAKKyNkZWZpbmUgRVJSc2V0YXR0cm1vZGUJCTcxCS8qIGF0dHJpYnV0ZSAobW9kZSkgaXMgaW52YWxpZCAqLworI2RlZmluZSBFUlJwYXVzZWQJCTgxCS8qIFNlcnZlciBpcyBwYXVzZWQgKi8KKyNkZWZpbmUgRVJSbXNnb2ZmCQk4MgkvKiByZXNlcnZlZCAtIG1lc3NhZ2luZyBvZmYgKi8KKyNkZWZpbmUgRVJSbm9yb29tCQk4MwkvKiByZXNlcnZlZCAtIG5vIHJvb20gZm9yIG1lc3NhZ2UgKi8KKyNkZWZpbmUgRVJScm11bnMJCTg3CS8qIHJlc2VydmVkIC0gdG9vIG1hbnkgcmVtb3RlIG5hbWVzICovCisjZGVmaW5lIEVSUnRpbWVvdXQJCTg4CS8qIG9wZXJhdGlvbiB0aW1lZCBvdXQgKi8KKyNkZWZpbmUgRVJSbm9yZXNvdXJjZQkJODkJLyogTm8gcmVzb3VyY2VzIGF2YWlsYWJsZSBmb3IgcmVxdWVzdAorCQkJCQkgICAqLworI2RlZmluZSBFUlJ0b29tYW55dWlkcwkJOTAJLyogVG9vIG1hbnkgVUlEcyBhY3RpdmUgb24gdGhpcyBzZXNzaW9uCisJCQkJCSAgICovCisjZGVmaW5lIEVSUmJhZHVpZAkJOTEJLyogVGhlIFVJRCBpcyBub3Qga25vd24gYXMgYSB2YWxpZCB1c2VyCisJCQkJCSAgICovCisjZGVmaW5lIEVSUnVzZW1weAkJMjUwCS8qIHRlbXBvcmFyaWx5IHVuYWJsZSB0byB1c2UgcmF3ICovCisjZGVmaW5lIEVSUnVzZXN0ZAkJMjUxCS8qIHRlbXBvcmFyaWx5IHVuYWJsZSB0byB1c2UgZWl0aGVyIHJhdworCQkJCQkgICBvciBtcHggKi8KKyNkZWZpbmUgRVJSX05PVElGWV9FTlVNX0RJUgkxMDI0CisjZGVmaW5lIEVSUmFjY291bnRleHBpcmVkCTIyMzkKKyNkZWZpbmUgRVJSYmFkY2xpZW50CQkyMjQwCisjZGVmaW5lIEVSUmJhZExvZ29uVGltZQkJMjI0MQorI2RlZmluZSBFUlJwYXNzd29yZEV4cGlyZWQJMjI0MgorI2RlZmluZSBFUlJuZXRsb2dvbk5vdFN0YXJ0ZWQJMjQ1NQorI2RlZmluZSBFUlJub3N1cHBvcnQJCTB4RkZGRgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy90cmFuc3BvcnQuYyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKaW5kZXggYWYxM2U1Mi4uMDA0NmMyMSAxMDA2NDQKLS0tIGEvZnMvY2lmcy90cmFuc3BvcnQuYworKysgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICAgZnMvY2lmcy90cmFuc3BvcnQuYwogICoKLSAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA0CisgKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwNQogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQxLDcgKzQxLDcgQEAKIAlzdHJ1Y3QgbWlkX3FfZW50cnkgKnRlbXA7CiAKIAlpZiAoc2VzID09IE5VTEwpIHsKLQkJY0VSUk9SKDEsICgiTnVsbCBzZXNzaW9uIHBhc3NlZCBpbiB0byBBbGxvY01pZFFFbnRyeSAiKSk7CisJCWNFUlJPUigxLCAoIk51bGwgc2Vzc2lvbiBwYXNzZWQgaW4gdG8gQWxsb2NNaWRRRW50cnkiKSk7CiAJCXJldHVybiBOVUxMOwogCX0KIAlpZiAoc2VzLT5zZXJ2ZXIgPT0gTlVMTCkgewpAQCAtNzksNyArNzksMTAgQEAKIAlsaXN0X2RlbCgmbWlkRW50cnktPnFoZWFkKTsKIAlhdG9taWNfZGVjKCZtaWRDb3VudCk7CiAJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQljaWZzX2J1Zl9yZWxlYXNlKG1pZEVudHJ5LT5yZXNwX2J1Zik7CisJaWYobWlkRW50cnktPmxhcmdlQnVmKQorCQljaWZzX2J1Zl9yZWxlYXNlKG1pZEVudHJ5LT5yZXNwX2J1Zik7CisJZWxzZQorCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKG1pZEVudHJ5LT5yZXNwX2J1Zik7CiAJbWVtcG9vbF9mcmVlKG1pZEVudHJ5LCBjaWZzX21pZF9wb29scCk7CiB9CiAKQEAgLTE4MiwxNCArMTg1LDE0IEBACiAKIGludAogc21iX3NlbmR2KHN0cnVjdCBzb2NrZXQgKnNzb2NrZXQsIHN0cnVjdCBzbWJfaGRyICpzbWJfYnVmZmVyLAotCSB1bnNpZ25lZCBpbnQgc21iX2J1Zl9sZW5ndGgsIHN0cnVjdCBrdmVjICogd3JpdGVfdmVjdG9yIC8qIHBhZ2UgbGlzdCAqLywgc3RydWN0IHNvY2thZGRyICpzaW4pCisJIHVuc2lnbmVkIGludCBzbWJfYnVmX2xlbmd0aCwgc3RydWN0IGt2ZWMgKiB3cml0ZV92ZWN0b3IgCisJICAvKiBwYWdlIGxpc3QgKi8sIHN0cnVjdCBzb2NrYWRkciAqc2luKQogewogCWludCByYyA9IDA7CiAJaW50IGkgPSAwOwogCXN0cnVjdCBtc2doZHIgc21iX21zZzsKIAludW1iZXJfb2ZfcGFnZXMgKz0gMTsgLyogYWNjb3VudCBmb3IgU01CIGhlYWRlciAqLwogCXN0cnVjdCBrdmVjICogcGlvdiAgPSBrbWFsbG9jKG51bWJlcl9vZl9wYWdlcyAqIHNpemVvZihzdHJ1Y3Qga3ZlYykpOwotCWlmKGk9MDtpPG51bV9wYWdlcy0xO2krKwogCXVuc2lnbmVkIGxlbiA9IHNtYl9idWZfbGVuZ3RoICsgNDsKIAogCWlmKHNzb2NrZXQgPT0gTlVMTCkKQEAgLTIxMyw3ICsyMTYsOCBAQAogCWR1bXBfc21iKHNtYl9idWZmZXIsIGxlbik7CiAKIAl3aGlsZSAobGVuID4gMCkgewotCQlyYyA9IGtlcm5lbF9zZW5kbXNnKHNzb2NrZXQsICZzbWJfbXNnLCAmaW92LCBudW1iZXJfb2ZfcGFnZXMsIGxlbj8pOworCQlyYyA9IGtlcm5lbF9zZW5kbXNnKHNzb2NrZXQsICZzbWJfbXNnLCAmaW92LCBudW1iZXJfb2ZfcGFnZXMsIAorCQkJCSAgICBsZW4pOwogCQlpZiAoKHJjID09IC1FTk9TUEMpIHx8IChyYyA9PSAtRUFHQUlOKSkgewogCQkJaSsrOwogCQkJaWYoaSA+IDYwKSB7CkBAIC0yNjYsNiArMjcwLDkgQEAKIAogICAKIAorCWlmKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gQ0lGU19FWElUSU5HKQorCQlyZXR1cm4gLUVOT0VOVDsKKwogCS8qIEVuc3VyZSB0aGF0IHdlIGRvIG5vdCBzZW5kIG1vcmUgdGhhbiA1MCBvdmVybGFwcGluZyByZXF1ZXN0cyAKIAkgICB0byB0aGUgc2FtZSBzZXJ2ZXIuIFdlIG1heSBtYWtlIHRoaXMgY29uZmlndXJhYmxlIGxhdGVyIG9yCiAJICAgdXNlIHNlcy0+bWF4UmVxICovCkBAIC0zNDYsMTEgKzM1MywxMiBAQAogCX0KIAogCS8qIEJCIGNhbiB3ZSBzaWduIGVmZmljaWVudGx5IGluIHRoaXMgcGF0aD8gKi8KLQlyYyA9IGNpZnNfc2lnbl9zbWIoaW5fYnVmLCBzZXMsICZtaWRRLT5zZXF1ZW5jZV9udW1iZXIpOworCXJjID0gY2lmc19zaWduX3NtYihpbl9idWYsIHNlcy0+c2VydmVyLCAmbWlkUS0+c2VxdWVuY2VfbnVtYmVyKTsKIAogCW1pZFEtPm1pZFN0YXRlID0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEOwotLyoJcmMgPSBzbWJfc2VuZHYoc2VzLT5zZXJ2ZXItPnNzb2NrZXQsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCwgcGlvdmVjLAotCQkgICAgICAoc3RydWN0IHNvY2thZGRyICopICYoc2VzLT5zZXJ2ZXItPmFkZHIuc29ja0FkZHIpKTsqLworLyoJcmMgPSBzbWJfc2VuZHYoc2VzLT5zZXJ2ZXItPnNzb2NrZXQsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCwKKwkJICAgICAgIHBpb3ZlYywgCisJCSAgICAgICAoc3RydWN0IHNvY2thZGRyICopICYoc2VzLT5zZXJ2ZXItPmFkZHIuc29ja0FkZHIpKTsqLwogCWlmKHJjIDwgMCkgewogCQlEZWxldGVNaWRRRW50cnkobWlkUSk7CiAJCXVwKCZzZXMtPnNlcnZlci0+dGNwU2VtKTsKQEAgLTM5Niw2ICs0MDQsOSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKKwlpZihzZXMtPnNlcnZlci0+dGNwU3RhdHVzID09IENpZnNFeGl0aW5nKQorCQlyZXR1cm4gLUVOT0VOVDsKKwogCS8qIEVuc3VyZSB0aGF0IHdlIGRvIG5vdCBzZW5kIG1vcmUgdGhhbiA1MCBvdmVybGFwcGluZyByZXF1ZXN0cyAKIAkgICB0byB0aGUgc2FtZSBzZXJ2ZXIuIFdlIG1heSBtYWtlIHRoaXMgY29uZmlndXJhYmxlIGxhdGVyIG9yCiAJICAgdXNlIHNlcy0+bWF4UmVxICovCkBAIC00MDUsNyArNDE2LDggQEAKIAl9IGVsc2UgewogCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsgCiAJCXdoaWxlKDEpIHsgICAgICAgIAotCQkJaWYoYXRvbWljX3JlYWQoJnNlcy0+c2VydmVyLT5pbkZsaWdodCkgPj0gY2lmc19tYXhfcGVuZGluZyl7CisJCQlpZihhdG9taWNfcmVhZCgmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KSA+PSAKKwkJCQkJY2lmc19tYXhfcGVuZGluZyl7CiAJCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAkJCQl3YWl0X2V2ZW50KHNlcy0+c2VydmVyLT5yZXF1ZXN0X3EsCiAJCQkJCWF0b21pY19yZWFkKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpCkBAIC00NzUsNyArNDg3LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JcmMgPSBjaWZzX3NpZ25fc21iKGluX2J1Ziwgc2VzLCAmbWlkUS0+c2VxdWVuY2VfbnVtYmVyKTsKKwlyYyA9IGNpZnNfc2lnbl9zbWIoaW5fYnVmLCBzZXMtPnNlcnZlciwgJm1pZFEtPnNlcXVlbmNlX251bWJlcik7CiAKIAltaWRRLT5taWRTdGF0ZSA9IE1JRF9SRVFVRVNUX1NVQk1JVFRFRDsKIAlyYyA9IHNtYl9zZW5kKHNlcy0+c2VydmVyLT5zc29ja2V0LCBpbl9idWYsIGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgsCkBAIC00OTMsNyArNTA1LDcgQEAKIAkJdXAoJnNlcy0+c2VydmVyLT50Y3BTZW0pOwogCWlmIChsb25nX29wID09IC0xKQogCQlnb3RvIGNpZnNfbm9fcmVzcG9uc2VfZXhpdDsKLQllbHNlIGlmIChsb25nX29wID09IDIpIC8qIHdyaXRlcyBwYXN0IGVuZCBvZiBmaWxlIGNhbiB0YWtlIGxvb29vb25nIHRpbWUgKi8KKwllbHNlIGlmIChsb25nX29wID09IDIpIC8qIHdyaXRlcyBwYXN0IGVuZCBvZiBmaWxlIGNhbiB0YWtlIGxvb25nIHRpbWUgKi8KIAkJdGltZW91dCA9IDMwMCAqIEhaOwogCWVsc2UgaWYgKGxvbmdfb3AgPT0gMSkKIAkJdGltZW91dCA9IDQ1ICogSFo7IC8qIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gCkBAIC01NTksOCArNTcxLDcgQEAKIAl9CiAgIAogCWlmIChyZWNlaXZlX2xlbiA+IENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUpIHsKLQkJY0VSUk9SKDEsCi0JCSAgICAgICAoIkZyYW1lIHRvbyBsYXJnZSByZWNlaXZlZC4gIExlbmd0aDogJWQgIFhpZDogJWQiLAorCQljRVJST1IoMSwgKCJGcmFtZSB0b28gbGFyZ2UgcmVjZWl2ZWQuICBMZW5ndGg6ICVkICBYaWQ6ICVkIiwKIAkJCXJlY2VpdmVfbGVuLCB4aWQpKTsKIAkJcmMgPSAtRUlPOwogCX0gZWxzZSB7CQkvKiByY3ZkIGZyYW1lIGlzIG9rICovCkBAIC01NzUsMTUgKzU4NiwyMCBAQAogCQkJZHVtcF9zbWIob3V0X2J1ZiwgOTIpOwogCQkJLyogY29udmVydCB0aGUgbGVuZ3RoIGludG8gYSBtb3JlIHVzYWJsZSBmb3JtICovCiAJCQlpZigocmVjZWl2ZV9sZW4gPiAyNCkgJiYKLQkJCSAgIChzZXMtPnNlcnZlci0+c2VjTW9kZSAmIChTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpKSB7Ci0JCQkJcmMgPSBjaWZzX3ZlcmlmeV9zaWduYXR1cmUob3V0X2J1Ziwgc2VzLT5tYWNfc2lnbmluZ19rZXksbWlkUS0+c2VxdWVuY2VfbnVtYmVyKTsgLyogQkIgZml4IEJCICovCi0JCQkJaWYocmMpCi0JCQkJCWNGWUkoMSwoIlVuZXhwZWN0ZWQgc2lnbmF0dXJlIHJlY2VpdmVkIGZyb20gc2VydmVyIikpOworCQkJICAgKHNlcy0+c2VydmVyLT5zZWNNb2RlICYgKFNFQ01PREVfU0lHTl9SRVFVSVJFRCB8CisJCQkJCVNFQ01PREVfU0lHTl9FTkFCTEVEKSkpIHsKKwkJCQlyYyA9IGNpZnNfdmVyaWZ5X3NpZ25hdHVyZShvdXRfYnVmLAorCQkJCQkJc2VzLT5zZXJ2ZXItPm1hY19zaWduaW5nX2tleSwKKwkJCQkJCW1pZFEtPnNlcXVlbmNlX251bWJlcisxKTsKKwkJCQlpZihyYykgeworCQkJCQljRVJST1IoMSwoIlVuZXhwZWN0ZWQgU01CIHNpZ25hdHVyZSIpKTsKKwkJCQkJLyogQkIgRklYTUUgYWRkIGNvZGUgdG8ga2lsbCBzZXNzaW9uICovCisJCQkJfQogCQkJfQogCiAJCQkqcGJ5dGVzX3JldHVybmVkID0gb3V0X2J1Zi0+c21iX2J1Zl9sZW5ndGg7CiAKLQkJCS8qIEJCIHNwZWNpYWwgY2FzZSByZWNvbm5lY3QgdGlkIGFuZCByZWNvbm5lY3QgdWlkIGhlcmU/ICovCisJCQkvKiBCQiBzcGVjaWFsIGNhc2UgcmVjb25uZWN0IHRpZCBhbmQgdWlkIGhlcmU/ICovCiAJCQlyYyA9IG1hcF9zbWJfdG9fbGludXhfZXJyb3Iob3V0X2J1Zik7CiAKIAkJCS8qIGNvbnZlcnQgQnl0ZUNvdW50IGlmIG5lY2Vzc2FyeSAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy94YXR0ci5jIGIvZnMvY2lmcy94YXR0ci5jCmluZGV4IDU0OWFmYTEuLmMxZTAyZWYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMveGF0dHIuYworKysgYi9mcy9jaWZzL3hhdHRyLmMKQEAgLTgzLDcgKzgzLDggQEAKIAogCQllYV9uYW1lKz01OyAvKiBza2lwIHBhc3QgdXNlci4gcHJlZml4ICovCiAJCXJjID0gQ0lGU1NNQlNldEVBKHhpZCxwVGNvbixmdWxsX3BhdGgsZWFfbmFtZSxOVUxMLAotCQkJKF9fdTE2KTAsIGNpZnNfc2ItPmxvY2FsX25scyk7CisJCQkoX191MTYpMCwgY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJfQogcmVtb3ZlX2VhX2V4aXQ6CiAJaWYgKGZ1bGxfcGF0aCkKQEAgLTE0NywzMiArMTQ4LDQwIEBACiAJCX0KIAkJZWFfbmFtZSArPSA1OyAvKiBza2lwIHBhc3QgdXNlci4gcHJlZml4ICovCiAJCXJjID0gQ0lGU1NNQlNldEVBKHhpZCxwVGNvbixmdWxsX3BhdGgsZWFfbmFtZSxlYV92YWx1ZSwKLQkJCShfX3UxNil2YWx1ZV9zaXplLCBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJKF9fdTE2KXZhbHVlX3NpemUsIGNpZnNfc2ItPmxvY2FsX25scywKKwkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCX0gZWxzZSBpZihzdHJuY21wKGVhX25hbWUsIENJRlNfWEFUVFJfT1MyX1BSRUZJWCw0KSA9PSAwKSB7CiAJCWlmKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9OT19YQVRUUikKIAkJCWdvdG8gc2V0X2VhX2V4aXQ7CiAKIAkJZWFfbmFtZSArPSA0OyAvKiBza2lwIHBhc3Qgb3MyLiBwcmVmaXggKi8KIAkJcmMgPSBDSUZTU01CU2V0RUEoeGlkLHBUY29uLGZ1bGxfcGF0aCxlYV9uYW1lLGVhX3ZhbHVlLAotCQkJKF9fdTE2KXZhbHVlX3NpemUsIGNpZnNfc2ItPmxvY2FsX25scyk7CisJCQkoX191MTYpdmFsdWVfc2l6ZSwgY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJfSBlbHNlIHsKIAkJaW50IHRlbXA7IAogCQl0ZW1wID0gc3RybmNtcChlYV9uYW1lLFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MsCiAJCQlzdHJsZW4oUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUykpOwogCQlpZiAodGVtcCA9PSAwKSB7CiAjaWZkZWYgQ09ORklHX0NJRlNfUE9TSVgKLQkJCXJjID0gQ0lGU1NNQlNldFBvc2l4QUNMKHhpZCwgcFRjb24sZnVsbF9wYXRoLGVhX3ZhbHVlLAotCQkJCShjb25zdCBpbnQpdmFsdWVfc2l6ZSwgQUNMX1RZUEVfQUNDRVNTLAotCQkJCWNpZnNfc2ItPmxvY2FsX25scyk7CisJCQlpZihzYi0+c19mbGFncyAmIE1TX1BPU0lYQUNMKQorCQkJCXJjID0gQ0lGU1NNQlNldFBvc2l4QUNMKHhpZCwgcFRjb24sZnVsbF9wYXRoLAorCQkJCQllYV92YWx1ZSwgKGNvbnN0IGludCl2YWx1ZV9zaXplLCAKKwkJCQkJQUNMX1RZUEVfQUNDRVNTLGNpZnNfc2ItPmxvY2FsX25scywKKwkJCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiAKKwkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJCWNGWUkoMSwoInNldCBQT1NJWCBBQ0wgcmMgJWQiLHJjKSk7CiAjZWxzZQogCQkJY0ZZSSgxLCgic2V0IFBPU0lYIEFDTCBub3Qgc3VwcG9ydGVkIikpOwogI2VuZGlmCiAJCX0gZWxzZSBpZihzdHJuY21wKGVhX25hbWUsUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQsc3RybGVuKFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxUKSkgPT0gMCkgewogI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYCi0JCQlyYyA9IENJRlNTTUJTZXRQb3NpeEFDTCh4aWQsIHBUY29uLGZ1bGxfcGF0aCxlYV92YWx1ZSwKLQkJCQkoY29uc3QgaW50KXZhbHVlX3NpemUsIEFDTF9UWVBFX0RFRkFVTFQsCi0JCQkJY2lmc19zYi0+bG9jYWxfbmxzKTsKKwkJCWlmKHNiLT5zX2ZsYWdzICYgTVNfUE9TSVhBQ0wpCisJCQkJcmMgPSBDSUZTU01CU2V0UG9zaXhBQ0woeGlkLCBwVGNvbixmdWxsX3BhdGgsCisJCQkJCWVhX3ZhbHVlLCAoY29uc3QgaW50KXZhbHVlX3NpemUsIAorCQkJCQlBQ0xfVFlQRV9ERUZBVUxULCBjaWZzX3NiLT5sb2NhbF9ubHMsCisJCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgCisJCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJCQljRllJKDEsKCJzZXQgUE9TSVggZGVmYXVsdCBBQ0wgcmMgJWQiLHJjKSk7CiAjZWxzZQogCQkJY0ZZSSgxLCgic2V0IGRlZmF1bHQgUE9TSVggQUNMIG5vdCBzdXBwb3J0ZWQiKSk7CkBAIC0yMzgsMjcgKzI0NywzNSBAQAogCQl9IC8qIEJCIGFkZCBlbHNlIHdoZW4gYWJvdmUgaXMgaW1wbGVtZW50ZWQgKi8KIAkJZWFfbmFtZSArPSA1OyAvKiBza2lwIHBhc3QgdXNlci4gcHJlZml4ICovCiAJCXJjID0gQ0lGU1NNQlF1ZXJ5RUEoeGlkLHBUY29uLGZ1bGxfcGF0aCxlYV9uYW1lLGVhX3ZhbHVlLAotCQkJYnVmX3NpemUsIGNpZnNfc2ItPmxvY2FsX25scyk7CisJCQlidWZfc2l6ZSwgY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJfSBlbHNlIGlmKHN0cm5jbXAoZWFfbmFtZSwgQ0lGU19YQVRUUl9PUzJfUFJFRklYLDQpID09IDApIHsKIAkJaWYoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX05PX1hBVFRSKQogCQkJZ290byBnZXRfZWFfZXhpdDsKIAogCQllYV9uYW1lICs9IDQ7IC8qIHNraXAgcGFzdCBvczIuIHByZWZpeCAqLwogCQlyYyA9IENJRlNTTUJRdWVyeUVBKHhpZCxwVGNvbixmdWxsX3BhdGgsZWFfbmFtZSxlYV92YWx1ZSwKLQkJCWJ1Zl9zaXplLCBjaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJYnVmX3NpemUsIGNpZnNfc2ItPmxvY2FsX25scywKKwkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCX0gZWxzZSBpZihzdHJuY21wKGVhX25hbWUsUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUyxzdHJsZW4oUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUykpID09IDApIHsKICNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWAotCQlyYyA9IENJRlNTTUJHZXRQb3NpeEFDTCh4aWQsIHBUY29uLCBmdWxsX3BhdGgsCisJCWlmKHNiLT5zX2ZsYWdzICYgTVNfUE9TSVhBQ0wpCisJCQlyYyA9IENJRlNTTUJHZXRQb3NpeEFDTCh4aWQsIHBUY29uLCBmdWxsX3BhdGgsCiAJCQkJZWFfdmFsdWUsIGJ1Zl9zaXplLCBBQ0xfVFlQRV9BQ0NFU1MsIAotCQkJCWNpZnNfc2ItPmxvY2FsX25scyk7CisJCQkJY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgCisJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKICNlbHNlIAogCQljRllJKDEsKCJxdWVyeSBQT1NJWCBBQ0wgbm90IHN1cHBvcnRlZCB5ZXQiKSk7CiAjZW5kaWYgLyogQ09ORklHX0NJRlNfUE9TSVggKi8KIAl9IGVsc2UgaWYoc3RybmNtcChlYV9uYW1lLFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxULHN0cmxlbihQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCkpID09IDApIHsKICNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWAotCQlyYyA9IENJRlNTTUJHZXRQb3NpeEFDTCh4aWQsIHBUY29uLCBmdWxsX3BhdGgsCisJCWlmKHNiLT5zX2ZsYWdzICYgTVNfUE9TSVhBQ0wpCisJCQlyYyA9IENJRlNTTUJHZXRQb3NpeEFDTCh4aWQsIHBUY29uLCBmdWxsX3BhdGgsCiAJCQkJZWFfdmFsdWUsIGJ1Zl9zaXplLCBBQ0xfVFlQRV9ERUZBVUxULCAKLQkJCQljaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJCWNpZnNfc2ItPmxvY2FsX25scywKKwkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIAorCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAjZWxzZSAKIAkJY0ZZSSgxLCgicXVlcnkgUE9TSVggZGVmYXVsdCBBQ0wgbm90IHN1cHBvcnRlZCB5ZXQiKSk7CiAjZW5kaWYKQEAgLTMyNCw3ICszNDEsOSBAQAogCQlzZWFyY2ggc2VydmVyIGZvciBFQXMgb3Igc3RyZWFtcyB0byAKIAkJcmV0dXJucyBhcyB4YXR0cnMgKi8KIAlyYyA9IENJRlNTTUJRQWxsRUFzKHhpZCxwVGNvbixmdWxsX3BhdGgsZGF0YSxidWZfc2l6ZSwKLQkJCQljaWZzX3NiLT5sb2NhbF9ubHMpOworCQkJCWNpZnNfc2ItPmxvY2FsX25scywKKwkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIAorCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAKIAlpZiAoZnVsbF9wYXRoKQogCQlrZnJlZShmdWxsX3BhdGgpOwpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCA2N2MwYjk0Li43MjhjZDgzIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtODA5LDcgKzgwOSw3IEBACiAKIHN0cnVjdCBjb21wYXRfbmZzX3N0cmluZyB7CiAJY29tcGF0X3VpbnRfdCBsZW47Ci0JY29tcGF0X3VwdHJfdCBfX3VzZXIgZGF0YTsKKwljb21wYXRfdXB0cl90IGRhdGE7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29tcGF0X25mc19zdHJpbmcoc3RydWN0IG5mc19zdHJpbmcgKmRzdCwKQEAgLTgzNCwxMCArODM0LDEwIEBACiAJc3RydWN0IGNvbXBhdF9uZnNfc3RyaW5nIG1udF9wYXRoOwogCXN0cnVjdCBjb21wYXRfbmZzX3N0cmluZyBob3N0bmFtZTsKIAljb21wYXRfdWludF90IGhvc3RfYWRkcmxlbjsKLQljb21wYXRfdXB0cl90IF9fdXNlciBob3N0X2FkZHI7CisJY29tcGF0X3VwdHJfdCBob3N0X2FkZHI7CiAJY29tcGF0X2ludF90IHByb3RvOwogCWNvbXBhdF9pbnRfdCBhdXRoX2ZsYXZvdXJsZW47Ci0JY29tcGF0X3VwdHJfdCBfX3VzZXIgYXV0aF9mbGF2b3VyczsKKwljb21wYXRfdXB0cl90IGF1dGhfZmxhdm91cnM7CiB9OwogCiBzdGF0aWMgaW50IGRvX25mczRfc3VwZXJfZGF0YV9jb252KHZvaWQgKnJhd19kYXRhKQpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCA0OTZhNGUwLi4zYWE4YTdlIDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYworKysgYi9mcy9kY2FjaGUuYwpAQCAtMzksNyArMzksNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc3lzY3RsX3Zmc19jYWNoZV9wcmVzc3VyZSk7CiAKICBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU1BJTkxPQ0soZGNhY2hlX2xvY2spOwotc2VxbG9ja190IHJlbmFtZV9sb2NrIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wID0gU0VRTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBzZXFsb2NrX3QgcmVuYW1lX2xvY2sgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgPSBTRVFMT0NLX1VOTE9DS0VEOwogCiBFWFBPUlRfU1lNQk9MKGRjYWNoZV9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCAwNWI5NjZjLi45OTAwZTMzIDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtMzIwLDcgKzMyMCw3IEBACiAvKgogICogVGhpcyBzZW1hcGhvcmUgaXMgdXNlZCB0byBzZXJpYWxpemUgZXBfZnJlZSgpIGFuZCBldmVudHBvbGxfcmVsZWFzZV9maWxlKCkuCiAgKi8KLXN0cnVjdCBzZW1hcGhvcmUgZXBzZW07CitzdGF0aWMgc3RydWN0IHNlbWFwaG9yZSBlcHNlbTsKIAogLyogU2FmZSB3YWtlIHVwIGltcGxlbWVudGF0aW9uICovCiBzdGF0aWMgc3RydWN0IHBvbGxfc2FmZXdha2UgcHN3OwpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGE4Mzk0NDkuLmU1NmVlMjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTE5Nyw3ICsxOTcsOCBAQAogICogbWVtb3J5IHRvIGZyZWUgcGFnZXMgaW4ga2VybmVsIG1lbS4gVGhlc2UgYXJlIGluIGEgZm9ybWF0IHJlYWR5CiAgKiB0byBiZSBwdXQgZGlyZWN0bHkgaW50byB0aGUgdG9wIG9mIG5ldyB1c2VyIG1lbW9yeS4KICAqLwotaW50IGNvcHlfc3RyaW5ncyhpbnQgYXJnYyxjaGFyIF9fdXNlciAqIF9fdXNlciAqIGFyZ3YsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCitzdGF0aWMgaW50IGNvcHlfc3RyaW5ncyhpbnQgYXJnYywgY2hhciBfX3VzZXIgKiBfX3VzZXIgKiBhcmd2LAorCQkJc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKIAlzdHJ1Y3QgcGFnZSAqa21hcHBlZF9wYWdlID0gTlVMTDsKIAljaGFyICprYWRkciA9IE5VTEw7CkBAIC04NjgsOSArODY5LDExIEBACiAJaWYgKGN1cnJlbnQtPmV1aWQgPT0gY3VycmVudC0+dWlkICYmIGN1cnJlbnQtPmVnaWQgPT0gY3VycmVudC0+Z2lkKQogCQljdXJyZW50LT5tbS0+ZHVtcGFibGUgPSAxOwogCW5hbWUgPSBicHJtLT5maWxlbmFtZTsKKworCS8qIENvcGllcyB0aGUgYmluYXJ5IG5hbWUgZnJvbSBhZnRlciBsYXN0IHNsYXNoICovCiAJZm9yIChpPTA7IChjaCA9ICoobmFtZSsrKSkgIT0gJ1wwJzspIHsKIAkJaWYgKGNoID09ICcvJykKLQkJCWkgPSAwOworCQkJaSA9IDA7IC8qIG92ZXJ3cml0ZSB3aGF0IHdlIHdyb3RlICovCiAJCWVsc2UKIAkJCWlmIChpIDwgKHNpemVvZih0Y29tbSkgLSAxKSkKIAkJCQl0Y29tbVtpKytdID0gY2g7CmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggMDQwZWIyOC4uMGQ1ZmE3MyAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtNDU1LDEyICs0NTUsMTEgQEAKICAqCUBnb2FsOglwbGFjZSB0byBzdG9yZSB0aGUgcmVzdWx0LgogICoKICAqCU5vcm1hbGx5IHRoaXMgZnVuY3Rpb24gZmluZCB0aGUgcHJlZmVyZWQgcGxhY2UgZm9yIGJsb2NrIGFsbG9jYXRpb24sCi0gKglzdG9yZXMgaXQgaW4gKkBnb2FsIGFuZCByZXR1cm5zIHplcm8uIElmIHRoZSBicmFuY2ggaGFkIGJlZW4gY2hhbmdlZAotICoJdW5kZXIgdXMgd2UgcmV0dXJuIC1FQUdBSU4uCisgKglzdG9yZXMgaXQgaW4gKkBnb2FsIGFuZCByZXR1cm5zIHplcm8uCiAgKi8KIAotc3RhdGljIGludCBleHQzX2ZpbmRfZ29hbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGJsb2NrLCBJbmRpcmVjdCBjaGFpbls0XSwKLQkJCSAgSW5kaXJlY3QgKnBhcnRpYWwsIHVuc2lnbmVkIGxvbmcgKmdvYWwpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBleHQzX2ZpbmRfZ29hbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGJsb2NrLAorCQlJbmRpcmVjdCBjaGFpbls0XSwgSW5kaXJlY3QgKnBhcnRpYWwpCiB7CiAJc3RydWN0IGV4dDNfYmxvY2tfYWxsb2NfaW5mbyAqYmxvY2tfaSA9ICBFWFQzX0koaW5vZGUpLT5pX2Jsb2NrX2FsbG9jX2luZm87CiAKQEAgLTQ3MCwxNSArNDY5LDEwIEBACiAJICovCiAJaWYgKGJsb2NrX2kgJiYgKGJsb2NrID09IGJsb2NrX2ktPmxhc3RfYWxsb2NfbG9naWNhbF9ibG9jayArIDEpCiAJCSYmIChibG9ja19pLT5sYXN0X2FsbG9jX3BoeXNpY2FsX2Jsb2NrICE9IDApKSB7Ci0JCSpnb2FsID0gYmxvY2tfaS0+bGFzdF9hbGxvY19waHlzaWNhbF9ibG9jayArIDE7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gYmxvY2tfaS0+bGFzdF9hbGxvY19waHlzaWNhbF9ibG9jayArIDE7CiAJfQogCi0JaWYgKHZlcmlmeV9jaGFpbihjaGFpbiwgcGFydGlhbCkpIHsKLQkJKmdvYWwgPSBleHQzX2ZpbmRfbmVhcihpbm9kZSwgcGFydGlhbCk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gLUVBR0FJTjsKKwlyZXR1cm4gZXh0M19maW5kX25lYXIoaW5vZGUsIHBhcnRpYWwpOwogfQogCiAvKioKQEAgLTU4MiwxMiArNTc2LDkgQEAKICAqCUB3aGVyZTogbG9jYXRpb24gb2YgbWlzc2luZyBsaW5rCiAgKglAbnVtOiAgIG51bWJlciBvZiBibG9ja3Mgd2UgYXJlIGFkZGluZwogICoKLSAqCVRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgdGhhdCBjaGFpbiAodXAgdG8gdGhlIG1pc3NpbmcgbGluaykgaGFkIG5vdAotICoJY2hhbmdlZCwgZmlsbHMgdGhlIG1pc3NpbmcgbGluayBhbmQgZG9lcyBhbGwgaG91c2VrZWVwaW5nIG5lZWRlZCBpbgorICoJVGhpcyBmdW5jdGlvbiBmaWxscyB0aGUgbWlzc2luZyBsaW5rIGFuZCBkb2VzIGFsbCBob3VzZWtlZXBpbmcgbmVlZGVkIGluCiAgKglpbm9kZSAoLT5pX2Jsb2NrcywgZXRjLikuIEluIGNhc2Ugb2Ygc3VjY2VzcyB3ZSBlbmQgdXAgd2l0aCB0aGUgZnVsbAotICoJY2hhaW4gdG8gbmV3IGJsb2NrIGFuZCByZXR1cm4gMC4gT3RoZXJ3aXNlICg9PSBjaGFpbiBoYWQgYmVlbiBjaGFuZ2VkKQotICoJd2UgZnJlZSB0aGUgbmV3IGJsb2NrcyAoZm9yZ2V0dGluZyB0aGVpciBidWZmZXJfaGVhZHMsIGluZGVlZCkgYW5kCi0gKglyZXR1cm4gLUVBR0FJTi4KKyAqCWNoYWluIHRvIG5ldyBibG9jayBhbmQgcmV0dXJuIDAuCiAgKi8KIAogc3RhdGljIGludCBleHQzX3NwbGljZV9icmFuY2goaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBibG9jaywKQEAgLTYwOCwxMiArNTk5LDYgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyX291dDsKIAl9Ci0JLyogVmVyaWZ5IHRoYXQgcGxhY2Ugd2UgYXJlIHNwbGljaW5nIHRvIGlzIHN0aWxsIHRoZXJlIGFuZCB2YWNhbnQgKi8KLQotCWlmICghdmVyaWZ5X2NoYWluKGNoYWluLCB3aGVyZS0xKSB8fCAqd2hlcmUtPnApCi0JCS8qIFdyaXRlcjogZW5kICovCi0JCWdvdG8gY2hhbmdlZDsKLQogCS8qIFRoYXQncyBpdCAqLwogCiAJKndoZXJlLT5wID0gd2hlcmUtPmtleTsKQEAgLTY1NywyNiArNjQyLDExIEBACiAJfQogCXJldHVybiBlcnI7CiAKLWNoYW5nZWQ6Ci0JLyoKLQkgKiBBS1BNOiBpZiB3aGVyZVtpXS5iaCBpc24ndCBwYXJ0IG9mIHRoZSBjdXJyZW50IHVwZGF0aW5nCi0JICogdHJhbnNhY3Rpb24gdGhlbiB3ZSBleHBsb2RlIG5hc3RpbHkuICBUZXN0IHRoaXMgY29kZSBwYXRoLgotCSAqLwotCWpiZF9kZWJ1ZygxLCAidGhlIGNoYWluIGNoYW5nZWQ6IHRyeSBhZ2FpblxuIik7Ci0JZXJyID0gLUVBR0FJTjsKLQogZXJyX291dDoKIAlmb3IgKGkgPSAxOyBpIDwgbnVtOyBpKyspIHsKIAkJQlVGRkVSX1RSQUNFKHdoZXJlW2ldLmJoLCAiY2FsbCBqb3VybmFsX2ZvcmdldCIpOwogCQlleHQzX2pvdXJuYWxfZm9yZ2V0KGhhbmRsZSwgd2hlcmVbaV0uYmgpOwogCX0KLQkvKiBGb3IgdGhlIG5vcm1hbCBjb2xsaXNpb24gY2xlYW51cCBjYXNlLCB3ZSBmcmVlIHVwIHRoZSBibG9ja3MuCi0JICogT24gZ2VudWluZSBmaWxlc3lzdGVtIGVycm9ycyB3ZSBkb24ndCBldmVuIHRoaW5rIGFib3V0IGRvaW5nCi0JICogdGhhdC4gKi8KLQlpZiAoZXJyID09IC1FQUdBSU4pCi0JCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKLQkJCWV4dDNfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgCi0JCQkJCSBsZTMyX3RvX2NwdSh3aGVyZVtpXS5rZXkpLCAxKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MDgsNyArNjc4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGdvYWw7CiAJaW50IGxlZnQ7CiAJaW50IGJvdW5kYXJ5ID0gMDsKLQlpbnQgZGVwdGggPSBleHQzX2Jsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cywgJmJvdW5kYXJ5KTsKKwljb25zdCBpbnQgZGVwdGggPSBleHQzX2Jsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cywgJmJvdW5kYXJ5KTsKIAlzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvICplaSA9IEVYVDNfSShpbm9kZSk7CiAKIAlKX0FTU0VSVChoYW5kbGUgIT0gTlVMTCB8fCBjcmVhdGUgPT0gMCk7CkBAIC03MTYsNTQgKzY4Niw1NSBAQAogCWlmIChkZXB0aCA9PSAwKQogCQlnb3RvIG91dDsKIAotcmVyZWFkOgogCXBhcnRpYWwgPSBleHQzX2dldF9icmFuY2goaW5vZGUsIGRlcHRoLCBvZmZzZXRzLCBjaGFpbiwgJmVycik7CiAKIAkvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovCiAJaWYgKCFwYXJ0aWFsKSB7CiAJCWNsZWFyX2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKLWdvdF9pdDoKLQkJbWFwX2JoKGJoX3Jlc3VsdCwgaW5vZGUtPmlfc2IsIGxlMzJfdG9fY3B1KGNoYWluW2RlcHRoLTFdLmtleSkpOwotCQlpZiAoYm91bmRhcnkpCi0JCQlzZXRfYnVmZmVyX2JvdW5kYXJ5KGJoX3Jlc3VsdCk7Ci0JCS8qIENsZWFuIHVwIGFuZCBleGl0ICovCi0JCXBhcnRpYWwgPSBjaGFpbitkZXB0aC0xOyAvKiB0aGUgd2hvbGUgY2hhaW4gKi8KLQkJZ290byBjbGVhbnVwOworCQlnb3RvIGdvdF9pdDsKIAl9CiAKIAkvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovCi0JaWYgKCFjcmVhdGUgfHwgZXJyID09IC1FSU8pIHsKLWNsZWFudXA6CisJaWYgKCFjcmVhdGUgfHwgZXJyID09IC1FSU8pCisJCWdvdG8gY2xlYW51cDsKKworCWRvd24oJmVpLT50cnVuY2F0ZV9zZW0pOworCisJLyoKKwkgKiBJZiB0aGUgaW5kaXJlY3QgYmxvY2sgaXMgbWlzc2luZyB3aGlsZSB3ZSBhcmUgcmVhZGluZworCSAqIHRoZSBjaGFpbihleHQzX2dldF9icmFuY2goKSByZXR1cm5zIC1FQUdBSU4gZXJyKSwgb3IKKwkgKiBpZiB0aGUgY2hhaW4gaGFzIGJlZW4gY2hhbmdlZCBhZnRlciB3ZSBncmFiIHRoZSBzZW1hcGhvcmUsCisJICogKGVpdGhlciBiZWNhdXNlIGFub3RoZXIgcHJvY2VzcyB0cnVuY2F0ZWQgdGhpcyBicmFuY2gsIG9yCisJICogYW5vdGhlciBnZXRfYmxvY2sgYWxsb2NhdGVkIHRoaXMgYnJhbmNoKSByZS1ncmFiIHRoZSBjaGFpbiB0byBzZWUgaWYKKwkgKiB0aGUgcmVxdWVzdCBibG9jayBoYXMgYmVlbiBhbGxvY2F0ZWQgb3Igbm90LgorCSAqCisJICogU2luY2Ugd2UgYWxyZWFkeSBibG9jayB0aGUgdHJ1bmNhdGUvb3RoZXIgZ2V0X2Jsb2NrCisJICogYXQgdGhpcyBwb2ludCwgd2Ugd2lsbCBoYXZlIHRoZSBjdXJyZW50IGNvcHkgb2YgdGhlIGNoYWluIHdoZW4gd2UKKwkgKiBzcGxpY2UgdGhlIGJyYW5jaCBpbnRvIHRoZSB0cmVlLgorCSAqLworCWlmIChlcnIgPT0gLUVBR0FJTiB8fCAhdmVyaWZ5X2NoYWluKGNoYWluLCBwYXJ0aWFsKSkgewogCQl3aGlsZSAocGFydGlhbCA+IGNoYWluKSB7Ci0JCQlCVUZGRVJfVFJBQ0UocGFydGlhbC0+YmgsICJjYWxsIGJyZWxzZSIpOwogCQkJYnJlbHNlKHBhcnRpYWwtPmJoKTsKIAkJCXBhcnRpYWwtLTsKIAkJfQotCQlCVUZGRVJfVFJBQ0UoYmhfcmVzdWx0LCAicmV0dXJuZWQiKTsKLW91dDoKLQkJcmV0dXJuIGVycjsKKwkJcGFydGlhbCA9IGV4dDNfZ2V0X2JyYW5jaChpbm9kZSwgZGVwdGgsIG9mZnNldHMsIGNoYWluLCAmZXJyKTsKKwkJaWYgKCFwYXJ0aWFsKSB7CisJCQl1cCgmZWktPnRydW5jYXRlX3NlbSk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gY2xlYW51cDsKKwkJCWNsZWFyX2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKKwkJCWdvdG8gZ290X2l0OworCQl9CiAJfQogCiAJLyoKLQkgKiBJbmRpcmVjdCBibG9jayBtaWdodCBiZSByZW1vdmVkIGJ5IHRydW5jYXRlIHdoaWxlIHdlIHdlcmUKLQkgKiByZWFkaW5nIGl0LiBIYW5kbGluZyBvZiB0aGF0IGNhc2UgKGZvcmdldCB3aGF0IHdlJ3ZlIGdvdCBhbmQKLQkgKiByZXJlYWQpIGlzIHRha2VuIG91dCBvZiB0aGUgbWFpbiBwYXRoLgotCSAqLwotCWlmIChlcnIgPT0gLUVBR0FJTikKLQkJZ290byBjaGFuZ2VkOwotCi0JZ29hbCA9IDA7Ci0JZG93bigmZWktPnRydW5jYXRlX3NlbSk7Ci0KLQkvKiBsYXp5IGluaXRpYWxpemUgdGhlIGJsb2NrIGFsbG9jYXRpb24gaW5mbyBoZXJlIGlmIG5lY2Vzc2FyeSAqLwotCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpICYmICghZWktPmlfYmxvY2tfYWxsb2NfaW5mbykpIHsKKwkgKiBPa2F5LCB3ZSBuZWVkIHRvIGRvIGJsb2NrIGFsbG9jYXRpb24uICBMYXppbHkgaW5pdGlhbGl6ZSB0aGUgYmxvY2sKKwkgKiBhbGxvY2F0aW9uIGluZm8gaGVyZSBpZiBuZWNlc3NhcnkKKwkqLworCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpICYmICghZWktPmlfYmxvY2tfYWxsb2NfaW5mbykpCiAJCWV4dDNfaW5pdF9ibG9ja19hbGxvY19pbmZvKGlub2RlKTsKLQl9CiAKLQlpZiAoZXh0M19maW5kX2dvYWwoaW5vZGUsIGlibG9jaywgY2hhaW4sIHBhcnRpYWwsICZnb2FsKSA8IDApIHsKLQkJdXAoJmVpLT50cnVuY2F0ZV9zZW0pOwotCQlnb3RvIGNoYW5nZWQ7Ci0JfQorCWdvYWwgPSBleHQzX2ZpbmRfZ29hbChpbm9kZSwgaWJsb2NrLCBjaGFpbiwgcGFydGlhbCk7CiAKIAlsZWZ0ID0gKGNoYWluICsgZGVwdGgpIC0gcGFydGlhbDsKIApAQCAtNzcxLDM4ICs3NDIsNDUgQEAKIAkgKiBCbG9jayBvdXQgZXh0M190cnVuY2F0ZSB3aGlsZSB3ZSBhbHRlciB0aGUgdHJlZQogCSAqLwogCWVyciA9IGV4dDNfYWxsb2NfYnJhbmNoKGhhbmRsZSwgaW5vZGUsIGxlZnQsIGdvYWwsCi0JCQkJCW9mZnNldHMrKHBhcnRpYWwtY2hhaW4pLCBwYXJ0aWFsKTsKKwkJCQlvZmZzZXRzICsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpOwogCi0JLyogVGhlIGV4dDNfc3BsaWNlX2JyYW5jaCBjYWxsIHdpbGwgZnJlZSBhbmQgZm9yZ2V0IGFueSBidWZmZXJzCisJLyoKKwkgKiBUaGUgZXh0M19zcGxpY2VfYnJhbmNoIGNhbGwgd2lsbCBmcmVlIGFuZCBmb3JnZXQgYW55IGJ1ZmZlcnMKIAkgKiBvbiB0aGUgbmV3IGNoYWluIGlmIHRoZXJlIGlzIGEgZmFpbHVyZSwgYnV0IHRoYXQgcmlza3MgdXNpbmcKIAkgKiB1cCB0cmFuc2FjdGlvbiBjcmVkaXRzLCBlc3BlY2lhbGx5IGZvciBiaXRtYXBzIHdoZXJlIHRoZQogCSAqIGNyZWRpdHMgY2Fubm90IGJlIHJldHVybmVkLiAgQ2FuIHdlIGhhbmRsZSB0aGlzIHNvbWVob3c/ICBXZQotCSAqIG1heSBuZWVkIHRvIHJldHVybiAtRUFHQUlOIHVwd2FyZHMgaW4gdGhlIHdvcnN0IGNhc2UuICAtLXNjdCAqLworCSAqIG1heSBuZWVkIHRvIHJldHVybiAtRUFHQUlOIHVwd2FyZHMgaW4gdGhlIHdvcnN0IGNhc2UuICAtLXNjdAorCSAqLwogCWlmICghZXJyKQogCQllcnIgPSBleHQzX3NwbGljZV9icmFuY2goaGFuZGxlLCBpbm9kZSwgaWJsb2NrLCBjaGFpbiwKIAkJCQkJIHBhcnRpYWwsIGxlZnQpOwotCS8qIGlfZGlza3NpemUgZ3Jvd2luZyBpcyBwcm90ZWN0ZWQgYnkgdHJ1bmNhdGVfc2VtCi0JICogZG9uJ3QgZm9yZ2V0IHRvIHByb3RlY3QgaXQgaWYgeW91J3JlIGFib3V0IHRvIGltcGxlbWVudAotCSAqIGNvbmN1cnJlbnQgZXh0M19nZXRfYmxvY2soKSAtYnp6eiAqLworCS8qCisJICogaV9kaXNrc2l6ZSBncm93aW5nIGlzIHByb3RlY3RlZCBieSB0cnVuY2F0ZV9zZW0uICBEb24ndCBmb3JnZXQgdG8KKwkgKiBwcm90ZWN0IGl0IGlmIHlvdSdyZSBhYm91dCB0byBpbXBsZW1lbnQgY29uY3VycmVudAorCSAqIGV4dDNfZ2V0X2Jsb2NrKCkgLWJ6enoKKwkqLwogCWlmICghZXJyICYmIGV4dGVuZF9kaXNrc2l6ZSAmJiBpbm9kZS0+aV9zaXplID4gZWktPmlfZGlza3NpemUpCiAJCWVpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKIAl1cCgmZWktPnRydW5jYXRlX3NlbSk7Ci0JaWYgKGVyciA9PSAtRUFHQUlOKQotCQlnb3RvIGNoYW5nZWQ7CiAJaWYgKGVycikKIAkJZ290byBjbGVhbnVwOwogCiAJc2V0X2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKLQlnb3RvIGdvdF9pdDsKLQotY2hhbmdlZDoKK2dvdF9pdDoKKwltYXBfYmgoYmhfcmVzdWx0LCBpbm9kZS0+aV9zYiwgbGUzMl90b19jcHUoY2hhaW5bZGVwdGgtMV0ua2V5KSk7CisJaWYgKGJvdW5kYXJ5KQorCQlzZXRfYnVmZmVyX2JvdW5kYXJ5KGJoX3Jlc3VsdCk7CisJLyogQ2xlYW4gdXAgYW5kIGV4aXQgKi8KKwlwYXJ0aWFsID0gY2hhaW4gKyBkZXB0aCAtIDE7CS8qIHRoZSB3aG9sZSBjaGFpbiAqLworY2xlYW51cDoKIAl3aGlsZSAocGFydGlhbCA+IGNoYWluKSB7Ci0JCWpiZF9kZWJ1ZygxLCAiYnVmZmVyIGNoYWluIGNoYW5nZWQsIHJldHJ5aW5nXG4iKTsKLQkJQlVGRkVSX1RSQUNFKHBhcnRpYWwtPmJoLCAiYnJlbHNpbmciKTsKKwkJQlVGRkVSX1RSQUNFKHBhcnRpYWwtPmJoLCAiY2FsbCBicmVsc2UiKTsKIAkJYnJlbHNlKHBhcnRpYWwtPmJoKTsKIAkJcGFydGlhbC0tOwogCX0KLQlnb3RvIHJlcmVhZDsKKwlCVUZGRVJfVFJBQ0UoYmhfcmVzdWx0LCAicmV0dXJuZWQiKTsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGV4dDNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKQEAgLTg2NiwxMiArODQ0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGV4dDNfd3JpdGVwYWdlc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAotCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGNyZWF0ZSkKLXsKLQlyZXR1cm4gZXh0M19kaXJlY3RfaW9fZ2V0X2Jsb2Nrcyhpbm9kZSwgaWJsb2NrLCAxLCBiaCwgY3JlYXRlKTsKLX0KLQogLyoKICAqIGBoYW5kbGUnIGNhbiBiZSBOVUxMIGlmIGNyZWF0ZSBpcyB6ZXJvCiAgKi8KQEAgLTEzNDUsNDUgKzEzMTcsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQKLWV4dDNfd3JpdGViYWNrX3dyaXRlcGFnZV9oZWxwZXIoc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCi17Ci0JcmV0dXJuIGJsb2NrX3dyaXRlX2Z1bGxfcGFnZShwYWdlLCBleHQzX2dldF9ibG9jaywgd2JjKTsKLX0KLQotc3RhdGljIGludAotZXh0M193cml0ZWJhY2tfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKLQloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKLQlpbnQgZXJyLCByZXQgPSAwOwotCi0JaWYgKCFtYXBwaW5nX3RhZ2dlZChtYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX0RJUlRZKSkKLQkJcmV0dXJuIHJldDsKLQotCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChpbm9kZSwgZXh0M193cml0ZXBhZ2VfdHJhbnNfYmxvY2tzKGlub2RlKSk7Ci0JaWYgKElTX0VSUihoYW5kbGUpKSB7Ci0JCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLSAgICAgICAgcmV0ID0gX19tcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgZXh0M193cml0ZXBhZ2VzX2dldF9ibG9jaywKLQkJCQkJZXh0M193cml0ZWJhY2tfd3JpdGVwYWdlX2hlbHBlcik7Ci0KLQkvKgotCSAqIE5lZWQgdG8gcmVhcXVpcmUgdGhlIGhhbmRsZSBzaW5jZSBleHQzX3dyaXRlcGFnZXNfZ2V0X2Jsb2NrKCkKLQkgKiBjYW4gcmVzdGFydCB0aGUgaGFuZGxlCi0JICovCi0JaGFuZGxlID0gam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwotCi0JZXJyID0gZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gZXJyOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgZXh0M193cml0ZWJhY2tfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewpAQCAtMTYyMSw3ICsxNTU0LDYgQEAKIAkucmVhZHBhZ2UJPSBleHQzX3JlYWRwYWdlLAogCS5yZWFkcGFnZXMJPSBleHQzX3JlYWRwYWdlcywKIAkud3JpdGVwYWdlCT0gZXh0M193cml0ZWJhY2tfd3JpdGVwYWdlLAotCS53cml0ZXBhZ2VzCT0gZXh0M193cml0ZWJhY2tfd3JpdGVwYWdlcywKIAkuc3luY19wYWdlCT0gYmxvY2tfc3luY19wYWdlLAogCS5wcmVwYXJlX3dyaXRlCT0gZXh0M19wcmVwYXJlX3dyaXRlLAogCS5jb21taXRfd3JpdGUJPSBleHQzX3dyaXRlYmFja19jb21taXRfd3JpdGUsCmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCAzZTdhYjE2Li4yODZhOWY4IDEwMDY0NAotLS0gYS9mcy9mY250bC5jCisrKyBiL2ZzL2ZjbnRsLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3BvbGwuaD4KICNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgpAQCAtMzA4LDcgKzMwOSw3IEBACiAJCWJyZWFrOwogCWNhc2UgRl9TRVRTSUc6CiAJCS8qIGFyZyA9PSAwIHJlc3RvcmVzIGRlZmF1bHQgYmVoYXZpb3VyLiAqLwotCQlpZiAoYXJnIDwgMCB8fCBhcmcgPiBfTlNJRykgeworCQlpZiAoIXZhbGlkX3NpZ25hbChhcmcpKSB7CiAJCQlicmVhazsKIAkJfQogCQllcnIgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCBkNmVmYjM2Li44ZTA1MGZhIDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYworKysgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtNTEyLDcgKzUxMiw4IEBACiB9CiAKIC8qKgotICogc3luY19pbm9kZXMKKyAqIHN5bmNfaW5vZGVzIC0gd3JpdGVzIGFsbCBpbm9kZXMgdG8gZGlzaworICogQHdhaXQ6IHdhaXQgZm9yIGNvbXBsZXRpb24KICAqCiAgKiBzeW5jX2lub2RlcygpIGdvZXMgdGhyb3VnaCBlYWNoIHN1cGVyIGJsb2NrJ3MgZGlydHkgaW5vZGUgbGlzdCwgd3JpdGVzIHRoZQogICogaW5vZGVzIG91dCwgd2FpdHMgb24gdGhlIHdyaXRlb3V0IGFuZCBwdXRzIHRoZSBpbm9kZXMgYmFjayBvbiB0aGUgbm9ybWFsCkBAIC02MDQsNiArNjA1LDcgQEAKIC8qKgogICogZ2VuZXJpY19vc3luY19pbm9kZSAtIGZsdXNoIGFsbCBkaXJ0eSBkYXRhIGZvciBhIGdpdmVuIGlub2RlIHRvIGRpc2sKICAqIEBpbm9kZTogaW5vZGUgdG8gd3JpdGUKKyAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzc19zcGFjZSB0aGF0IHNob3VsZCBiZSBmbHVzaGVkCiAgKiBAd2hhdDogIHdoYXQgdG8gd3JpdGUgYW5kIHdhaXQgdXBvbgogICoKICAqIFRoaXMgY2FuIGJlIGNhbGxlZCBieSBmaWxlX3dyaXRlIGZ1bmN0aW9ucyBmb3IgZmlsZXMgd2hpY2ggaGF2ZSB0aGUKZGlmZiAtLWdpdCBhL2ZzL2hmcy9tZGIuYyBiL2ZzL2hmcy9tZGIuYwppbmRleCA0ZWZiNjQwLi4yMTdlMzJmIDEwMDY0NAotLS0gYS9mcy9oZnMvbWRiLmMKKysrIGIvZnMvaGZzL21kYi5jCkBAIC0zMzMsNiArMzMzLDggQEAKICAqIFJlbGVhc2UgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGluLWNvcmUgTURCLiAgKi8KIHZvaWQgaGZzX21kYl9wdXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKKwlpZiAoIUhGU19TQihzYikpCisJCXJldHVybjsKIAkvKiBmcmVlIHRoZSBCLXRyZWVzICovCiAJaGZzX2J0cmVlX2Nsb3NlKEhGU19TQihzYiktPmV4dF90cmVlKTsKIAloZnNfYnRyZWVfY2xvc2UoSEZTX1NCKHNiKS0+Y2F0X3RyZWUpOwpAQCAtMzQwLDQgKzM0Miw3IEBACiAJLyogZnJlZSB0aGUgYnVmZmVycyBob2xkaW5nIHRoZSBwcmltYXJ5IGFuZCBhbHRlcm5hdGUgTURCcyAqLwogCWJyZWxzZShIRlNfU0Ioc2IpLT5tZGJfYmgpOwogCWJyZWxzZShIRlNfU0Ioc2IpLT5hbHRfbWRiX2JoKTsKKworCWtmcmVlKEhGU19TQihzYikpOworCXNiLT5zX2ZzX2luZm8gPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvaGZzL3N1cGVyLmMgYi9mcy9oZnMvc3VwZXIuYwppbmRleCAxZTJjMTkzLi5hYjc4M2Y2IDEwMDY0NAotLS0gYS9mcy9oZnMvc3VwZXIuYworKysgYi9mcy9oZnMvc3VwZXIuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJcmVzID0gLUVJTlZBTDsKIAlpZiAoIXBhcnNlX29wdGlvbnMoKGNoYXIgKilkYXRhLCBzYmkpKSB7CiAJCWhmc193YXJuKCJoZnNfZnM6IHVuYWJsZSB0byBwYXJzZSBtb3VudCBvcHRpb25zLlxuIik7Ci0JCWdvdG8gYmFpbDM7CisJCWdvdG8gYmFpbDsKIAl9CiAKIAlzYi0+c19vcCA9ICZoZnNfc3VwZXJfb3BlcmF0aW9uczsKQEAgLTMxMCw3ICszMTAsNyBAQAogCQkJaGZzX3dhcm4oIlZGUzogQ2FuJ3QgZmluZCBhIEhGUyBmaWxlc3lzdGVtIG9uIGRldiAlcy5cbiIsCiAJCQkJaGZzX21kYl9uYW1lKHNiKSk7CiAJCXJlcyA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFpbDI7CisJCWdvdG8gYmFpbDsKIAl9CiAKIAkvKiB0cnkgdG8gZ2V0IHRoZSByb290IGlub2RlICovCkBAIC0zNDAsMTAgKzM0MCw4IEBACiAJaXB1dChyb290X2lub2RlKTsKIGJhaWxfbm9fcm9vdDoKIAloZnNfd2FybigiaGZzX2ZzOiBnZXQgcm9vdCBpbm9kZSBmYWlsZWQuXG4iKTsKK2JhaWw6CiAJaGZzX21kYl9wdXQoc2IpOwotYmFpbDI6Ci1iYWlsMzoKLQlrZnJlZShzYmkpOwogCXJldHVybiByZXM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvc3VwZXIuYyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwppbmRleCA1ZjgwNDQ2Li5kNTVhZDY3IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3N1cGVyLmMKKysrIGIvZnMvaGZzcGx1cy9zdXBlci5jCkBAIC0yMDgsNyArMjA4LDkgQEAKIHN0YXRpYyB2b2lkIGhmc3BsdXNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJZHByaW50KERCR19TVVBFUiwgImhmc3BsdXNfcHV0X3N1cGVyXG4iKTsKLQlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKKwlpZiAoIXNiLT5zX2ZzX2luZm8pCisJCXJldHVybjsKKwlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkgJiYgSEZTUExVU19TQihzYikuc192aGRyKSB7CiAJCXN0cnVjdCBoZnNwbHVzX3ZoICp2aGRyID0gSEZTUExVU19TQihzYikuc192aGRyOwogCiAJCXZoZHItPm1vZGlmeV9kYXRlID0gaGZzcF9ub3cybXQoKTsKQEAgLTIyNiw2ICsyMjgsOCBAQAogCWJyZWxzZShIRlNQTFVTX1NCKHNiKS5zX3ZoYmgpOwogCWlmIChIRlNQTFVTX1NCKHNiKS5ubHMpCiAJCXVubG9hZF9ubHMoSEZTUExVU19TQihzYikubmxzKTsKKwlrZnJlZShzYi0+c19mc19pbmZvKTsKKwlzYi0+c19mc19pbmZvID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBoZnNwbHVzX3N0YXRmcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQpkaWZmIC0tZ2l0IGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwppbmRleCBhODhhZDI5Li4xNGEwZDMzIDEwMDY0NAotLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYworKysgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwpAQCAtNTIxLDcgKzUyMSw3IEBACiBzdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBob3N0ZnNfYW9wcyA9IHsKIAkud3JpdGVwYWdlIAk9IGhvc3Rmc193cml0ZXBhZ2UsCiAJLnJlYWRwYWdlCT0gaG9zdGZzX3JlYWRwYWdlLAotLyogCS5zZXRfcGFnZV9kaXJ0eSA9IF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzLCAqLworCS5zZXRfcGFnZV9kaXJ0eSA9IF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzLAogCS5wcmVwYXJlX3dyaXRlCT0gaG9zdGZzX3ByZXBhcmVfd3JpdGUsCiAJLmNvbW1pdF93cml0ZQk9IGhvc3Rmc19jb21taXRfd3JpdGUKIH07CkBAIC05OTEsMTMgKzk5MSwxNyBAQAogCQlnb3RvIG91dF9wdXQ7CiAKIAllcnIgPSByZWFkX2lub2RlKHJvb3RfaW5vZGUpOwotCWlmKGVycikKLQkJZ290byBvdXRfcHV0OworCWlmKGVycil7CisgICAgICAgICAgICAgICAgLyogTm8gaXB1dCBpbiB0aGlzIGNhc2UgYmVjYXVzZSB0aGUgZHB1dCBkb2VzIHRoYXQgZm9yIHVzICovCisgICAgICAgICAgICAgICAgZHB1dChzYi0+c19yb290KTsKKyAgICAgICAgICAgICAgICBzYi0+c19yb290ID0gTlVMTDsKKwkJZ290byBvdXRfZnJlZTsKKyAgICAgICAgfQogCiAJcmV0dXJuKDApOwogCiAgb3V0X3B1dDoKLQlpcHV0KHJvb3RfaW5vZGUpOworICAgICAgICBpcHV0KHJvb3RfaW5vZGUpOwogIG91dF9mcmVlOgogCWtmcmVlKG5hbWUpOwogIG91dDoKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IGFmOGZkNzguLjgwMWZlN2YgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMjYsNyArMjYsNiBAQAogICogVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogICogIC0gaW5vZGVfaGFzX2J1ZmZlcnMKICAqICAtIGludmFsaWRhdGVfaW5vZGVfYnVmZmVycwotICogIC0gZnN5bmNfYmRldgogICogIC0gaW52YWxpZGF0ZV9iZGV2CiAgKgogICogRklYTUU6IHJlbW92ZSBhbGwga25vd2xlZGdlIG9mIHRoZSBidWZmZXIgbGF5ZXIgZnJvbSB0aGlzIGZpbGUKQEAgLTMzMiwxNCArMzMxLDYgQEAKIAlyZXR1cm4gYnVzeTsKIH0KIAotLyoKLSAqIFRoaXMgaXMgYSB0d28tc3RhZ2UgcHJvY2Vzcy4gRmlyc3Qgd2UgY29sbGVjdCBhbGwKLSAqIG9mZmVuZGluZyBpbm9kZXMgb250byB0aGUgdGhyb3ctYXdheSBsaXN0LCBhbmQgaW4KLSAqIHRoZSBzZWNvbmQgc3RhZ2Ugd2UgYWN0dWFsbHkgZGlzcG9zZSBvZiB0aGVtLiBUaGlzCi0gKiBpcyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gc2xlZXAgd2hpbGUgbWVzc2luZwotICogd2l0aCB0aGUgZ2xvYmFsIGxpc3RzLi4KLSAqLwotIAogLyoqCiAgKglpbnZhbGlkYXRlX2lub2RlcwktIGRpc2NhcmQgdGhlIGlub2RlcyBvbiBhIGRldmljZQogICoJQHNiOiBzdXBlcmJsb2NrCkBAIC0zNjYsMTYgKzM1NywxMSBAQAogCiBFWFBPUlRfU1lNQk9MKGludmFsaWRhdGVfaW5vZGVzKTsKICAKLWludCBfX2ludmFsaWRhdGVfZGV2aWNlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBkb19zeW5jKQoraW50IF9faW52YWxpZGF0ZV9kZXZpY2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwotCWludCByZXM7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGdldF9zdXBlcihiZGV2KTsKKwlpbnQgcmVzID0gMDsKIAotCWlmIChkb19zeW5jKQotCQlmc3luY19iZGV2KGJkZXYpOwotCi0JcmVzID0gMDsKLQlzYiA9IGdldF9zdXBlcihiZGV2KTsKIAlpZiAoc2IpIHsKIAkJLyoKIAkJICogbm8gbmVlZCB0byBsb2NrIHRoZSBzdXBlciwgZ2V0X3N1cGVyIGhvbGRzIHRoZQpAQCAtMzkwLDcgKzM3Niw2IEBACiAJaW52YWxpZGF0ZV9iZGV2KGJkZXYsIDApOwogCXJldHVybiByZXM7CiB9Ci0KIEVYUE9SVF9TWU1CT0woX19pbnZhbGlkYXRlX2RldmljZSk7CiAKIHN0YXRpYyBpbnQgY2FuX3VudXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC0xMzM2LDcgKzEzMjEsNyBAQAogCiAJLyogaW5vZGUgc2xhYiBjYWNoZSAqLwogCWlub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJpbm9kZV9jYWNoZSIsIHNpemVvZihzdHJ1Y3QgaW5vZGUpLAotCQkJCTAsIFNMQUJfUEFOSUMsIGluaXRfb25jZSwgTlVMTCk7CisJCQkJMCwgU0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9QQU5JQywgaW5pdF9vbmNlLCBOVUxMKTsKIAlzZXRfc2hyaW5rZXIoREVGQVVMVF9TRUVLUywgc2hyaW5rX2ljYWNoZV9tZW1vcnkpOwogCiAJLyogSGFzaCBtYXkgaGF2ZSBiZWVuIHNldCB1cCBpbiBpbm9kZV9pbml0X2Vhcmx5ICovCmRpZmYgLS1naXQgYS9mcy9pc29mcy9jb21wcmVzcy5jIGIvZnMvaXNvZnMvY29tcHJlc3MuYwppbmRleCBmYjQyYzNmLi4zNGE0NGU0IDEwMDY0NAotLS0gYS9mcy9pc29mcy9jb21wcmVzcy5jCisrKyBiL2ZzL2lzb2ZzL2NvbXByZXNzLmMKQEAgLTE4LDI5ICsxOCwxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lzb19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmxzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3psaWIuaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotCisjaW5jbHVkZSAiaXNvZnMuaCIKICNpbmNsdWRlICJ6aXNvZnMuaCIKIAogLyogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgZ2xvYmFsLiAqLwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvZGlyLmMgYi9mcy9pc29mcy9kaXIuYwppbmRleCAxNGQ4NmRlLi42MDMwOTU2IDEwMDY0NAotLS0gYS9mcy9pc29mcy9kaXIuYworKysgYi9mcy9pc29mcy9kaXIuYwpAQCAtMTAsMjAgKzEwLDkgQEAKICAqIAogICogIGlzb2ZzIGRpcmVjdG9yeSBoYW5kbGluZyBmdW5jdGlvbnMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pc29fZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSAiaXNvZnMuaCIKIAogc3RhdGljIGludCBpc29mc19yZWFkZGlyKHN0cnVjdCBmaWxlICosIHZvaWQgKiwgZmlsbGRpcl90KTsKIApkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvZXhwb3J0LmMgYi9mcy9pc29mcy9leHBvcnQuYwppbmRleCBlNDI1MmM5Li40YWY4NTZhIDEwMDY0NAotLS0gYS9mcy9pc29mcy9leHBvcnQuYworKysgYi9mcy9pc29mcy9leHBvcnQuYwpAQCAtMTMsMTEgKzEzLDcgQEAKICAqICAgICBmcy9leHBvcnRmcy9leHBmcy5jLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pc29fZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlICJpc29mcy5oIgogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqCiBpc29mc19leHBvcnRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLApkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaW5vZGUuYyBiL2ZzL2lzb2ZzL2lub2RlLmMKaW5kZXggYjkyNTZlNi4uYWJkN2IxMiAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvaW5vZGUuYworKysgYi9mcy9pc29mcy9pbm9kZS5jCkBAIC0xMiwyOSArMTIsMTggQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pc29fZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmxzLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmZzLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CisjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorI2luY2x1ZGUgImlzb2ZzLmgiCiAjaW5jbHVkZSAiemlzb2ZzLmgiCiAKICNkZWZpbmUgQkVRVUlFVApkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaXNvZnMuaCBiL2ZzL2lzb2ZzL2lzb2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNlN2I1MQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2lzb2ZzL2lzb2ZzLmgKQEAgLTAsMCArMSwxOTAgQEAKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvaXNvX2ZzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCitlbnVtIGlzb2ZzX2ZpbGVfZm9ybWF0IHsKKwlpc29mc19maWxlX25vcm1hbCA9IDAsCisJaXNvZnNfZmlsZV9zcGFyc2UgPSAxLAorCWlzb2ZzX2ZpbGVfY29tcHJlc3NlZCA9IDIsCit9OworCQorLyoKKyAqIGlzbyBmcyBpbm9kZSBkYXRhIGluIG1lbW9yeQorICovCitzdHJ1Y3QgaXNvX2lub2RlX2luZm8geworCXVuc2lnbmVkIGxvbmcgaV9pZ2V0NV9ibG9jazsKKwl1bnNpZ25lZCBsb25nIGlfaWdldDVfb2Zmc2V0OworCXVuc2lnbmVkIGludCBpX2ZpcnN0X2V4dGVudDsKKwl1bnNpZ25lZCBjaGFyIGlfZmlsZV9mb3JtYXQ7CisJdW5zaWduZWQgY2hhciBpX2Zvcm1hdF9wYXJtWzNdOworCXVuc2lnbmVkIGxvbmcgaV9uZXh0X3NlY3Rpb25fYmxvY2s7CisJdW5zaWduZWQgbG9uZyBpX25leHRfc2VjdGlvbl9vZmZzZXQ7CisJb2ZmX3QgaV9zZWN0aW9uX3NpemU7CisJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKK307CisKKy8qCisgKiBpc285NjYwIHN1cGVyLWJsb2NrIGRhdGEgaW4gbWVtb3J5CisgKi8KK3N0cnVjdCBpc29mc19zYl9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIHNfbmlub2RlczsKKwl1bnNpZ25lZCBsb25nIHNfbnpvbmVzOworCXVuc2lnbmVkIGxvbmcgc19maXJzdGRhdGF6b25lOworCXVuc2lnbmVkIGxvbmcgc19sb2dfem9uZV9zaXplOworCXVuc2lnbmVkIGxvbmcgc19tYXhfc2l6ZTsKKwkKKwl1bnNpZ25lZCBjaGFyIHNfaGlnaF9zaWVycmE7IC8qIEEgc2ltcGxlIGZsYWcgKi8KKwl1bnNpZ25lZCBjaGFyIHNfbWFwcGluZzsKKwlpbnQgICAgICAgICAgIHNfcm9ja19vZmZzZXQ7IC8qIG9mZnNldCBvZiBTVVNQIGZpZWxkcyB3aXRoaW4gU1UgYXJlYSAqLworCXVuc2lnbmVkIGNoYXIgc19yb2NrOworCXVuc2lnbmVkIGNoYXIgc19qb2xpZXRfbGV2ZWw7CisJdW5zaWduZWQgY2hhciBzX3V0Zjg7CisJdW5zaWduZWQgY2hhciBzX2NydWZ0OyAvKiBCcm9rZW4gZGlza3Mgd2l0aCBoaWdoCisJCQkJICBieXRlIG9mIGxlbmd0aCBjb250YWluaW5nCisJCQkJICBqdW5rICovCisJdW5zaWduZWQgY2hhciBzX3VuaGlkZTsKKwl1bnNpZ25lZCBjaGFyIHNfbm9zdWlkOworCXVuc2lnbmVkIGNoYXIgc19ub2RldjsKKwl1bnNpZ25lZCBjaGFyIHNfbm9jb21wcmVzczsKKworCW1vZGVfdCBzX21vZGU7CisJZ2lkX3Qgc19naWQ7CisJdWlkX3Qgc191aWQ7CisJc3RydWN0IG5sc190YWJsZSAqc19ubHNfaW9jaGFyc2V0OyAvKiBOYXRpdmUgbGFuZ3VhZ2Ugc3VwcG9ydCB0YWJsZSAqLworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqSVNPRlNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKklTT0ZTX0koc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgaXNvX2lub2RlX2luZm8sIHZmc19pbm9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzb251bV83MTEoY2hhciAqcCkKK3sKKwlyZXR1cm4gKih1OCAqKXA7Cit9CitzdGF0aWMgaW5saW5lIGludCBpc29udW1fNzEyKGNoYXIgKnApCit7CisJcmV0dXJuICooczggKilwOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXNvbnVtXzcyMShjaGFyICpwKQoreworCXJldHVybiBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKilwKSk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpc29udW1fNzIyKGNoYXIgKnApCit7CisJcmV0dXJuIGJlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiAqKXApKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlzb251bV83MjMoY2hhciAqcCkKK3sKKwkvKiBJZ25vcmUgYmlnZW5kaWFuIGRhdHVtIGR1ZSB0byBicm9rZW4gbWFzdGVyaW5nIHByb2dyYW1zICovCisJcmV0dXJuIGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiAqKXApKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlzb251bV83MzEoY2hhciAqcCkKK3sKKwlyZXR1cm4gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyICopcCkpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXNvbnVtXzczMihjaGFyICpwKQoreworCXJldHVybiBiZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMzIgKilwKSk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpc29udW1fNzMzKGNoYXIgKnApCit7CisJLyogSWdub3JlIGJpZ2VuZGlhbiBkYXR1bSBkdWUgdG8gYnJva2VuIG1hc3RlcmluZyBwcm9ncmFtcyAqLworCXJldHVybiBsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMzIgKilwKSk7Cit9CitleHRlcm4gaW50IGlzb19kYXRlKGNoYXIgKiwgaW50KTsKKworc3RydWN0IGlub2RlOwkJLyogVG8gbWFrZSBnY2MgaGFwcHkgKi8KKworZXh0ZXJuIGludCBwYXJzZV9yb2NrX3JpZGdlX2lub2RlKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqLCBzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gaW50IGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqLCBjaGFyICosIHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBpbnQgaXNvZnNfbmFtZV90cmFuc2xhdGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIGNoYXIgKiwgc3RydWN0IGlub2RlICopOworCitpbnQgZ2V0X2pvbGlldF9maWxlbmFtZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgdW5zaWduZWQgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7CitpbnQgZ2V0X2Fjb3JuX2ZpbGVuYW1lKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqLCBjaGFyICosIHN0cnVjdCBpbm9kZSAqKTsKKworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmlzb2ZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICopOworZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqaXNvZnNfYnJlYWQoc3RydWN0IGlub2RlICosIHNlY3Rvcl90KTsKK2V4dGVybiBpbnQgaXNvZnNfZ2V0X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqKiwgdW5zaWduZWQgbG9uZyk7CisKK2V4dGVybiBzdHJ1Y3QgaW5vZGUgKmlzb2ZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpOworCisvKiBCZWNhdXNlIHRoZSBpbm9kZSBudW1iZXIgaXMgbm8gbG9uZ2VyIHJlbGV2YW50IHRvIGZpbmRpbmcgdGhlCisgKiB1bmRlcmx5aW5nIG1ldGEtZGF0YSBmb3IgYW4gaW5vZGUsIHdlIGFyZSBmcmVlIHRvIGNob29zZSBhIG1vcmUKKyAqIGNvbnZlbmllbnQgMzItYml0IG51bWJlciBhcyB0aGUgaW5vZGUgbnVtYmVyLiAgVGhlIGlub2RlIG51bWJlcmluZworICogc2NoZW1lIHdhcyByZWNvbW1lbmRlZCBieSBTZXJnZXkgVmxhc292IGFuZCBFcmljIExhbW1lcnRzLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGlzb2ZzX2dldF9pbm8odW5zaWduZWQgbG9uZyBibG9jaywKKwkJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGJ1ZmJpdHMpCit7CisJcmV0dXJuIChibG9jayA8PCAoYnVmYml0cyAtIDUpKSB8IChvZmZzZXQgPj4gNSk7Cit9CisKKy8qIEV2ZXJ5IGRpcmVjdG9yeSBjYW4gaGF2ZSBtYW55IHJlZHVuZGFudCBkaXJlY3RvcnkgZW50cmllcyBzY2F0dGVyZWQKKyAqIHRocm91Z2hvdXQgdGhlIGRpcmVjdG9yeSB0cmVlLiAgRmlyc3QgdGhlcmUgaXMgdGhlIGRpcmVjdG9yeSBlbnRyeQorICogd2l0aCB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHN0b3JlZCBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKyAqIFRoZW4sIHRoZXJlIGlzIHRoZSAiLiIgZGlyZWN0b3J5IGVudHJ5IHN0b3JlZCBpbiB0aGUgZGlyZWN0b3J5CisgKiBpdHNlbGYuICBGaW5hbGx5LCB0aGVyZSBhcmUgcG9zc2libHkgbWFueSAiLi4iIGRpcmVjdG9yeSBlbnRyaWVzCisgKiBzdG9yZWQgaW4gYWxsIHRoZSBzdWJkaXJlY3Rvcmllcy4KKyAqCisgKiBJbiBvcmRlciBmb3IgdGhlIE5GUyBnZXRfcGFyZW50KCkgbWV0aG9kIHRvIHdvcmsgYW5kIGZvciB0aGUKKyAqIGdlbmVyYWwgY29uc2lzdGVuY3kgb2YgdGhlIGRjYWNoZSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlCisgKiAiaV9pZ2V0NV9ibG9jayIgYW5kICJpX2lnZXQ1X29mZnNldCIgYWxsIHBvaW50IHRvIGV4YWN0bHkgb25lIG9mCisgKiB0aGUgbWFueSByZWR1bmRhbnQgZW50cmllcyBmb3IgZWFjaCBkaXJlY3RvcnkuICBXZSBub3JtYWxpemUgdGhlCisgKiBibG9jayBhbmQgb2Zmc2V0IGJ5IGFsd2F5cyBtYWtpbmcgdGhlbSBwb2ludCB0byB0aGUgIi4iICBkaXJlY3RvcnkuCisgKgorICogTm90aWNlIHRoYXQgd2UgZG8gbm90IHVzZSB0aGUgZW50cnkgZm9yIHRoZSBkaXJlY3Rvcnkgd2l0aCB0aGUgbmFtZQorICogdGhhdCBpcyBsb2NhdGVkIGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5LiAgRXZlbiB0aG91Z2ggY2hvb3NpbmcgdGhpcworICogZmlyc3QgZGlyZWN0b3J5IGlzIG1vcmUgbmF0dXJhbCwgaXQgaXMgbXVjaCBlYXNpZXIgdG8gZmluZCB0aGUgIi4iCisgKiBlbnRyeSBpbiB0aGUgTkZTIGdldF9wYXJlbnQoKSBtZXRob2QgYmVjYXVzZSBpdCBpcyBpbXBsaWNpdGx5CisgKiBlbmNvZGVkIGluIHRoZSAiZXh0ZW50ICsgZXh0X2F0dHJfbGVuZ3RoIiBmaWVsZHMgb2YgX2FsbF8gdGhlCisgKiByZWR1bmRhbnQgZW50cmllcyBmb3IgdGhlIGRpcmVjdG9yeS4gIFRodXMsIGl0IGNhbiBhbHdheXMgYmUKKyAqIHJlYWNoZWQgcmVnYXJkbGVzcyBvZiB3aGljaCBkaXJlY3RvcnkgZW50cnkgeW91IGhhdmUgaW4gaGFuZC4KKyAqCisgKiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlICIuIiBlbnRyeSBpcyBzaW1wbHkgdGhlIGZpcnN0IGRpcmVjdG9yeQorICogcmVjb3JkIHdoZW4geW91IHN0YXJ0IHJlYWRpbmcgdGhlIGZpbGUgdGhhdCBob2xkcyBhbGwgdGhlIGRpcmVjdG9yeQorICogcmVjb3JkcywgYW5kIHRoaXMgZmlsZSBzdGFydHMgYXQgImV4dGVudCArIGV4dF9hdHRyX2xlbmd0aCIgYmxvY2tzLgorICogQmVjYXVzZSB0aGUgIi4iIGVudHJ5IGlzIGFsd2F5cyB0aGUgZmlyc3QgZW50cnkgbGlzdGVkIGluIHRoZQorICogZGlyZWN0b3JpZXMgZmlsZSwgdGhlIG5vcm1hbGl6ZWQgIm9mZnNldCIgdmFsdWUgaXMgYWx3YXlzIDAuCisgKgorICogWW91IHNob3VsZCBwYXNzIHRoZSBkaXJlY3RvcnkgZW50cnkgaW4gImRlIi4gIE9uIHJldHVybiwgImJsb2NrIgorICogYW5kICJvZmZzZXQiIHdpbGwgaG9sZCBub3JtYWxpemVkIHZhbHVlcy4gIE9ubHkgZGlyZWN0b3JpZXMgYXJlCisgKiBhZmZlY3RlZCBtYWtpbmcgaXQgc2FmZSB0byBjYWxsIGV2ZW4gZm9yIG5vbi1kaXJlY3RvcnkgZmlsZQorICogdHlwZXMuICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2lzb2ZzX25vcm1hbGl6ZV9ibG9ja19hbmRfb2Zmc2V0KHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCogZGUsCisJCQkJIHVuc2lnbmVkIGxvbmcgKmJsb2NrLAorCQkJCSB1bnNpZ25lZCBsb25nICpvZmZzZXQpCit7CisJLyogT25seSBkaXJlY3RvcmllcyBhcmUgbm9ybWFsaXplZC4gKi8KKwlpZiAoZGUtPmZsYWdzWzBdICYgMikgeworCQkqb2Zmc2V0ID0gMDsKKwkJKmJsb2NrID0gKHVuc2lnbmVkIGxvbmcpaXNvbnVtXzczMyhkZS0+ZXh0ZW50KQorCQkJKyAodW5zaWduZWQgbG9uZylpc29udW1fNzExKGRlLT5leHRfYXR0cl9sZW5ndGgpOworCX0KK30KKworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGlzb2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXNvZnNfZGlyX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBpc29mc19zeW1saW5rX2FvcHM7CitleHRlcm4gc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGlzb2ZzX2V4cG9ydF9vcHM7CisKKy8qIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSB1c2VkIHRvIGNoZWNrIGZvciBtZW1vcnkgbGVha3MuICovCisjaWZkZWYgTEVBS19DSEVDSworI2RlZmluZSBmcmVlX3MgbGVha19jaGVja19mcmVlX3MKKyNkZWZpbmUgbWFsbG9jIGxlYWtfY2hlY2tfbWFsbG9jCisjZGVmaW5lIHNiX2JyZWFkIGxlYWtfY2hlY2tfYnJlYWQKKyNkZWZpbmUgYnJlbHNlIGxlYWtfY2hlY2tfYnJlbHNlCitleHRlcm4gdm9pZCAqIGxlYWtfY2hlY2tfbWFsbG9jKHVuc2lnbmVkIGludCBzaXplKTsKK2V4dGVybiB2b2lkIGxlYWtfY2hlY2tfZnJlZV9zKHZvaWQgKiBvYmosIGludCBzaXplKTsKK2V4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBsZWFrX2NoZWNrX2JyZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBibG9jayk7CitleHRlcm4gdm9pZCBsZWFrX2NoZWNrX2JyZWxzZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCk7CisjZW5kaWYgLyogTEVBS19DSEVDSyAqLwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvam9saWV0LmMgYi9mcy9pc29mcy9qb2xpZXQuYwppbmRleCA4NmM1MGUyLi4yOTMxZGU3IDEwMDY0NAotLS0gYS9mcy9pc29mcy9qb2xpZXQuYworKysgYi9mcy9pc29mcy9qb2xpZXQuYwpAQCAtNiwxMSArNiw5IEBACiAgKiAgSm9saWV0OiBNaWNyb3NvZnQncyBVbmljb2RlIGV4dGVuc2lvbnMgdG8gaXNvOTY2MAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25scy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaXNvX2ZzLmg+Ci0jaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgImlzb2ZzLmgiCiAKIC8qCiAgKiBDb252ZXJ0IFVuaWNvZGUgMTYgdG8gVVRGOCBvciBBU0NJSS4KZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL25hbWVpLmMgYi9mcy9pc29mcy9uYW1laS5jCmluZGV4IDk1NjlmYzQuLjY5MGVkZjMgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL25hbWVpLmMKKysrIGIvZnMvaXNvZnMvbmFtZWkuYwpAQCAtNiwyMCArNiw5IEBACiAgKiAgKEMpIDE5OTEgIExpbnVzIFRvcnZhbGRzIC0gbWluaXggZmlsZXN5c3RlbQogICovCiAKLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvaXNvX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkvKiBKb2xpZXQ/ICovCiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJpc29mcy5oIgogCiAvKgogICogb2ssIHdlIGNhbm5vdCB1c2Ugc3RybmNtcCwgYXMgdGhlIG5hbWUgaXMgbm90IGluIG91ciBkYXRhIHNwYWNlLgpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvcm9jay5jIGIvZnMvaXNvZnMvcm9jay5jCmluZGV4IDhiZGQzZTQuLjA4OWU3OWMgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL3JvY2suYworKysgYi9mcy9pc29mcy9yb2NrLmMKQEAgLTYsMTcgKzYsMTEgQEAKICAqICBSb2NrIFJpZGdlIEV4dGVuc2lvbnMgdG8gaXNvOTY2MAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lzb19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAorI2luY2x1ZGUgImlzb2ZzLmgiCiAjaW5jbHVkZSAicm9jay5oIgogCiAvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2lnbmVkIHRvIHJlYWQgdGhlIHN5c3RlbSBhcmVhcyBvZiBhIGRpcmVjdG9yeSByZWNvcmQKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL3V0aWwuYyBiL2ZzL2lzb2ZzL3V0aWwuYwppbmRleCAzZjZkOWMxLi4wMWUxZWU3IDEwMDY0NAotLS0gYS9mcy9pc29mcy91dGlsLmMKKysrIGIvZnMvaXNvZnMvdXRpbC5jCkBAIC0yLDkgKzIsNyBAQAogICogIGxpbnV4L2ZzL2lzb2ZzL3V0aWwuYwogICovCiAKLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pc29fZnMuaD4KKyNpbmNsdWRlICJpc29mcy5oIgogCiAvKiAKICAqIFdlIGhhdmUgdG8gY29udmVydCBmcm9tIGEgTU0vREQvWVkgZm9ybWF0IHRvIHRoZSBVbml4IGN0aW1lIGZvcm1hdC4KQEAgLTgwLDQgKzc4LDMgQEAKIAl9CiAJcmV0dXJuIGNydGltZTsKIH0JCQotCQpkaWZmIC0tZ2l0IGEvZnMvamZmczIvY29tcHJfcnViaW4uYyBiL2ZzL2pmZnMyL2NvbXByX3J1YmluLmMKaW5kZXggNDUwZDY2Mi4uMDk0MjIzOCAxMDA2NDQKLS0tIGEvZnMvamZmczIvY29tcHJfcnViaW4uYworKysgYi9mcy9qZmZzMi9jb21wcl9ydWJpbi5jCkBAIC0yMjgsOCArMjI4LDEwIEBACiAJcmV0dXJuIHJ1YmluX2RvX2NvbXByZXNzKEJJVF9ESVZJREVSX01JUFMsIGJpdHNfbWlwcywgZGF0YV9pbiwgY3BhZ2Vfb3V0LCBzb3VyY2VsZW4sIGRzdGxlbik7CiB9CiAjZW5kaWYKLWludCBqZmZzMl9keW5ydWJpbl9jb21wcmVzcyh1bnNpZ25lZCBjaGFyICpkYXRhX2luLCB1bnNpZ25lZCBjaGFyICpjcGFnZV9vdXQsIAotCQkgICB1aW50MzJfdCAqc291cmNlbGVuLCB1aW50MzJfdCAqZHN0bGVuLCB2b2lkICptb2RlbCkKK3N0YXRpYyBpbnQgamZmczJfZHlucnViaW5fY29tcHJlc3ModW5zaWduZWQgY2hhciAqZGF0YV9pbiwKKwkJCQkgICB1bnNpZ25lZCBjaGFyICpjcGFnZV9vdXQsCisJCQkJICAgdWludDMyX3QgKnNvdXJjZWxlbiwgdWludDMyX3QgKmRzdGxlbiwKKwkJCQkgICB2b2lkICptb2RlbCkKIHsKIAlpbnQgYml0c1s4XTsKIAl1bnNpZ25lZCBjaGFyIGhpc3RvWzI1Nl07CkBAIC0zMDYsMTUgKzMwOCwxOSBAQAogfQkJICAgCiAKIAotaW50IGpmZnMyX3J1YmlubWlwc19kZWNvbXByZXNzKHVuc2lnbmVkIGNoYXIgKmRhdGFfaW4sIHVuc2lnbmVkIGNoYXIgKmNwYWdlX291dCwgCi0JCSAgIHVpbnQzMl90IHNvdXJjZWxlbiwgdWludDMyX3QgZHN0bGVuLCB2b2lkICptb2RlbCkKK3N0YXRpYyBpbnQgamZmczJfcnViaW5taXBzX2RlY29tcHJlc3ModW5zaWduZWQgY2hhciAqZGF0YV9pbiwKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpjcGFnZV9vdXQsCisJCQkJICAgICAgdWludDMyX3Qgc291cmNlbGVuLCB1aW50MzJfdCBkc3RsZW4sCisJCQkJICAgICAgdm9pZCAqbW9kZWwpCiB7CiAJcnViaW5fZG9fZGVjb21wcmVzcyhCSVRfRElWSURFUl9NSVBTLCBiaXRzX21pcHMsIGRhdGFfaW4sIGNwYWdlX291dCwgc291cmNlbGVuLCBkc3RsZW4pOwogICAgICAgICByZXR1cm4gMDsKIH0KIAotaW50IGpmZnMyX2R5bnJ1YmluX2RlY29tcHJlc3ModW5zaWduZWQgY2hhciAqZGF0YV9pbiwgdW5zaWduZWQgY2hhciAqY3BhZ2Vfb3V0LCAKLQkJICAgdWludDMyX3Qgc291cmNlbGVuLCB1aW50MzJfdCBkc3RsZW4sIHZvaWQgKm1vZGVsKQorc3RhdGljIGludCBqZmZzMl9keW5ydWJpbl9kZWNvbXByZXNzKHVuc2lnbmVkIGNoYXIgKmRhdGFfaW4sCisJCQkJICAgICB1bnNpZ25lZCBjaGFyICpjcGFnZV9vdXQsCisJCQkJICAgICB1aW50MzJfdCBzb3VyY2VsZW4sIHVpbnQzMl90IGRzdGxlbiwKKwkJCQkgICAgIHZvaWQgKm1vZGVsKQogewogCWludCBiaXRzWzhdOwogCWludCBjOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvY29tcHJfemxpYi5jIGIvZnMvamZmczIvY29tcHJfemxpYi5jCmluZGV4IDlmOTkzMmMuLjA3OGEzMGUgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2NvbXByX3psaWIuYworKysgYi9mcy9qZmZzMi9jb21wcl96bGliLmMKQEAgLTY5LDggKzY5LDEwIEBACiAjZGVmaW5lIGZyZWVfd29ya3NwYWNlcygpIGRvIHsgfSB3aGlsZSgwKQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAotaW50IGpmZnMyX3psaWJfY29tcHJlc3ModW5zaWduZWQgY2hhciAqZGF0YV9pbiwgdW5zaWduZWQgY2hhciAqY3BhZ2Vfb3V0LCAKLQkJICAgdWludDMyX3QgKnNvdXJjZWxlbiwgdWludDMyX3QgKmRzdGxlbiwgdm9pZCAqbW9kZWwpCitzdGF0aWMgaW50IGpmZnMyX3psaWJfY29tcHJlc3ModW5zaWduZWQgY2hhciAqZGF0YV9pbiwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpjcGFnZV9vdXQsCisJCQkgICAgICAgdWludDMyX3QgKnNvdXJjZWxlbiwgdWludDMyX3QgKmRzdGxlbiwKKwkJCSAgICAgICB2b2lkICptb2RlbCkKIHsKIAlpbnQgcmV0OwogCkBAIC0xMzUsOCArMTM3LDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGpmZnMyX3psaWJfZGVjb21wcmVzcyh1bnNpZ25lZCBjaGFyICpkYXRhX2luLCB1bnNpZ25lZCBjaGFyICpjcGFnZV9vdXQsCi0JCSAgICAgIHVpbnQzMl90IHNyY2xlbiwgdWludDMyX3QgZGVzdGxlbiwgdm9pZCAqbW9kZWwpCitzdGF0aWMgaW50IGpmZnMyX3psaWJfZGVjb21wcmVzcyh1bnNpZ25lZCBjaGFyICpkYXRhX2luLAorCQkJCSB1bnNpZ25lZCBjaGFyICpjcGFnZV9vdXQsCisJCQkJIHVpbnQzMl90IHNyY2xlbiwgdWludDMyX3QgZGVzdGxlbiwKKwkJCQkgdm9pZCAqbW9kZWwpCiB7CiAJaW50IHJldDsKIAlpbnQgd2JpdHMgPSBNQVhfV0JJVFM7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9maWxlLmMgYi9mcy9qZmZzMi9maWxlLmMKaW5kZXggMGM2MDdjMS4uNzcxYTU1NCAxMDA2NDQKLS0tIGEvZnMvamZmczIvZmlsZS5jCisrKyBiL2ZzL2pmZnMyL2ZpbGUuYwpAQCAtNzksOCArNzksNyBAQAogCiAJRDIocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2RvX3JlYWRwYWdlX25vbG9jaygpOiBpbm8gIyVsdSwgcGFnZSBhdCBvZmZzZXQgMHglbHhcbiIsIGlub2RlLT5pX2lubywgcGctPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpKTsKIAotCWlmICghUGFnZUxvY2tlZChwZykpCi0gICAgICAgICAgICAgICAgUEFHRV9CVUcocGcpOworCUJVR19PTighUGFnZUxvY2tlZChwZykpOwogCiAJcGdfYnVmID0ga21hcChwZyk7CiAJLyogRklYTUU6IENhbiBrbWFwIGZhaWw/ICovCmRpZmYgLS1naXQgYS9mcy9qZnMvaW5vZGUuYyBiL2ZzL2pmcy9pbm9kZS5jCmluZGV4IDdiYzkwNjYuLjI0YTY4OTEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9pbm9kZS5jCisrKyBiL2ZzL2pmcy9pbm9kZS5jCkBAIC0xNzUsMzEgKzE3NSwyMiBAQAogewogCXM2NCBsYmxvY2s2NCA9IGxibG9jazsKIAlpbnQgcmMgPSAwOwotCWludCB0YWtlX2xvY2tzOwogCXhhZF90IHhhZDsKIAlzNjQgeGFkZHI7CiAJaW50IHhmbGFnOwotCXMzMiB4bGVuOwotCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGEgc3BlY2lhbCBpbm9kZSAoaW1hcCwgZG1hcCkKLQkgKiB0aGUgbG9jayBzaG91bGQgYWxyZWFkeSBiZSB0YWtlbgotCSAqLwotCXRha2VfbG9ja3MgPSAoSkZTX0lQKGlwKS0+ZmlsZXNldCAhPSBBR0dSRUdBVEVfSSk7CisJczMyIHhsZW4gPSBtYXhfYmxvY2tzOwogCiAJLyoKIAkgKiBUYWtlIGFwcHJvcHJpYXRlIGxvY2sgb24gaW5vZGUKIAkgKi8KLQlpZiAodGFrZV9sb2NrcykgewotCQlpZiAoY3JlYXRlKQotCQkJSVdSSVRFX0xPQ0soaXApOwotCQllbHNlCi0JCQlJUkVBRF9MT0NLKGlwKTsKLQl9CisJaWYgKGNyZWF0ZSkKKwkJSVdSSVRFX0xPQ0soaXApOworCWVsc2UKKwkJSVJFQURfTE9DSyhpcCk7CiAKIAlpZiAoKChsYmxvY2s2NCA8PCBpcC0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgPCBpcC0+aV9zaXplKSAmJgotCSAgICAoeHRMb29rdXAoaXAsIGxibG9jazY0LCBtYXhfYmxvY2tzLCAmeGZsYWcsICZ4YWRkciwgJnhsZW4sIDApCi0JICAgICA9PSAwKSAmJiB4bGVuKSB7CisJICAgICgheHRMb29rdXAoaXAsIGxibG9jazY0LCBtYXhfYmxvY2tzLCAmeGZsYWcsICZ4YWRkciwgJnhsZW4sIDApKSAmJgorCSAgICB4YWRkcikgewogCQlpZiAoeGZsYWcgJiBYQURfTk9UUkVDT1JERUQpIHsKIAkJCWlmICghY3JlYXRlKQogCQkJCS8qCkBAIC0yMzgsNyArMjI5LDcgQEAKICNpZmRlZiBfSkZTXzRLCiAJaWYgKChyYyA9IGV4dEhpbnQoaXAsIGxibG9jazY0IDw8IGlwLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzLCAmeGFkKSkpCiAJCWdvdG8gdW5sb2NrOwotCXJjID0gZXh0QWxsb2MoaXAsIG1heF9ibG9ja3MsIGxibG9jazY0LCAmeGFkLCBGQUxTRSk7CisJcmMgPSBleHRBbGxvYyhpcCwgeGxlbiwgbGJsb2NrNjQsICZ4YWQsIEZBTFNFKTsKIAlpZiAocmMpCiAJCWdvdG8gdW5sb2NrOwogCkBAIC0yNTgsMTIgKzI0OSwxMCBAQAogCS8qCiAJICogUmVsZWFzZSBsb2NrIG9uIGlub2RlCiAJICovCi0JaWYgKHRha2VfbG9ja3MpIHsKLQkJaWYgKGNyZWF0ZSkKLQkJCUlXUklURV9VTkxPQ0soaXApOwotCQllbHNlCi0JCQlJUkVBRF9VTkxPQ0soaXApOwotCX0KKwlpZiAoY3JlYXRlKQorCQlJV1JJVEVfVU5MT0NLKGlwKTsKKwllbHNlCisJCUlSRUFEX1VOTE9DSyhpcCk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2RtYXAuYyBiL2ZzL2pmcy9qZnNfZG1hcC5jCmluZGV4IGQ4NmU0NjcuLjY5MDA3ZmQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZG1hcC5jCisrKyBiL2ZzL2pmcy9qZnNfZG1hcC5jCkBAIC00NzEsNiArNDcxLDcgQEAKIAlzdHJ1Y3QgbWV0YXBhZ2UgKm1wOwogCXN0cnVjdCBqZnNfbG9nICpsb2c7CiAJaW50IGxzbiwgZGlmZnQsIGRpZmZwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiB0aGUgYmxvY2tzIGJldHRlciBiZSB3aXRoaW4gdGhlIG1hcHNpemUuICovCiAJaWYgKGJsa25vICsgbmJsb2NrcyA+IGJtcC0+ZGJfbWFwc2l6ZSkgewpAQCAtNTA0LDYgKzUwNSw3IEBACiAJCQkJCSAgIDApOwogCQkJaWYgKG1wID09IE5VTEwpCiAJCQkJcmV0dXJuIC1FSU87CisJCQltZXRhcGFnZV93YWl0X2Zvcl9pbyhtcCk7CiAJCX0KIAkJZHAgPSAoc3RydWN0IGRtYXAgKikgbXAtPmRhdGE7CiAKQEAgLTU3OCwzNCArNTgwLDMyIEBACiAJCWlmIChtcC0+bHNuICE9IDApIHsKIAkJCS8qIGluaGVyaXQgb2xkZXIvc21hbGxlciBsc24gKi8KIAkJCWxvZ2RpZmYoZGlmZnAsIG1wLT5sc24sIGxvZyk7CisJCQlMT0dTWU5DX0xPQ0sobG9nLCBmbGFncyk7CiAJCQlpZiAoZGlmZnQgPCBkaWZmcCkgewogCQkJCW1wLT5sc24gPSBsc247CiAKIAkJCQkvKiBtb3ZlIGJwIGFmdGVyIHRibG9jayBpbiBsb2dzeW5jIGxpc3QgKi8KLQkJCQlMT0dTWU5DX0xPQ0sobG9nKTsKIAkJCQlsaXN0X21vdmUoJm1wLT5zeW5jbGlzdCwgJnRibGstPnN5bmNsaXN0KTsKLQkJCQlMT0dTWU5DX1VOTE9DSyhsb2cpOwogCQkJfQogCiAJCQkvKiBpbmhlcml0IHlvdW5nZXIvbGFyZ2VyIGNsc24gKi8KLQkJCUxPR1NZTkNfTE9DSyhsb2cpOwogCQkJbG9nZGlmZihkaWZmdCwgdGJsay0+Y2xzbiwgbG9nKTsKIAkJCWxvZ2RpZmYoZGlmZnAsIG1wLT5jbHNuLCBsb2cpOwogCQkJaWYgKGRpZmZ0ID4gZGlmZnApCiAJCQkJbXAtPmNsc24gPSB0YmxrLT5jbHNuOwotCQkJTE9HU1lOQ19VTkxPQ0sobG9nKTsKKwkJCUxPR1NZTkNfVU5MT0NLKGxvZywgZmxhZ3MpOwogCQl9IGVsc2UgewogCQkJbXAtPmxvZyA9IGxvZzsKIAkJCW1wLT5sc24gPSBsc247CiAKIAkJCS8qIGluc2VydCBicCBhZnRlciB0YmxvY2sgaW4gbG9nc3luYyBsaXN0ICovCi0JCQlMT0dTWU5DX0xPQ0sobG9nKTsKKwkJCUxPR1NZTkNfTE9DSyhsb2csIGZsYWdzKTsKIAogCQkJbG9nLT5jb3VudCsrOwogCQkJbGlzdF9hZGQoJm1wLT5zeW5jbGlzdCwgJnRibGstPnN5bmNsaXN0KTsKIAogCQkJbXAtPmNsc24gPSB0YmxrLT5jbHNuOwotCQkJTE9HU1lOQ19VTkxPQ0sobG9nKTsKKwkJCUxPR1NZTkNfVU5MT0NLKGxvZywgZmxhZ3MpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2R0cmVlLmMgYi9mcy9qZnMvamZzX2R0cmVlLmMKaW5kZXggZTM1Nzg5MC4uYWM0MWY3MiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19kdHJlZS5jCisrKyBiL2ZzL2pmcy9qZnNfZHRyZWUuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAJczMyIHhsZW47CiAKIAlyYyA9IHh0TG9va3VwKGlub2RlLCBibGtubywgMSwgJnhmbGFnLCAmeGFkZHIsICZ4bGVuLCAxKTsKLQlpZiAocmMgfHwgKHhsZW4gPT0gMCkpCisJaWYgKHJjIHx8ICh4YWRkciA9PSAwKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gcmVhZF9tZXRhcGFnZShpbm9kZSwgeGFkZHIsIFBTSVpFLCAxKTsKQEAgLTIzMSw3ICsyMzEsNyBAQAogCXMzMiB4bGVuOwogCiAJcmMgPSB4dExvb2t1cChpbm9kZSwgYmxrbm8sIDEsICZ4ZmxhZywgJnhhZGRyLCAmeGxlbiwgMSk7Ci0JaWYgKHJjIHx8ICh4bGVuID09IDApKQorCWlmIChyYyB8fCAoeGFkZHIgPT0gMCkpCiAJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIGdldF9tZXRhcGFnZShpbm9kZSwgeGFkZHIsIFBTSVpFLCAxKTsKQEAgLTMxODEsNyArMzE4MSw3IEBACiAJCQlkID0gKHN0cnVjdCBsZHRlbnRyeSAqKSAmIHAtPnNsb3Rbc3RibFtpXV07CiAKIAkJCWlmICgoKGxvbmcpIGpmc19kaXJlbnQgKyBkLT5uYW1sZW4gKyAxKSA+Ci0JCQkgICAgKGRpcmVudF9idWYgKyBQU0laRSkpIHsKKwkJCSAgICAoZGlyZW50X2J1ZiArIFBBR0VfU0laRSkpIHsKIAkJCQkvKiBEQkNTIGNvZGVwYWdlcyBjb3VsZCBvdmVycnVuIGRpcmVudF9idWYgKi8KIAkJCQlpbmRleCA9IGk7CiAJCQkJb3ZlcmZsb3cgPSAxOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbWFwLmMgYi9mcy9qZnMvamZzX2ltYXAuYwppbmRleCA3ODM4MzEzLi43YWNmZjJjIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2ltYXAuYworKysgYi9mcy9qZnMvamZzX2ltYXAuYwpAQCAtNTAyLDcgKzUwMiw3IEBACiAKIAl9CiAKLQlpcC0+aV9tYXBwaW5nLT5hX29wcyA9ICZqZnNfYW9wczsKKwlpcC0+aV9tYXBwaW5nLT5hX29wcyA9ICZqZnNfbWV0YXBhZ2VfYW9wczsKIAltYXBwaW5nX3NldF9nZnBfbWFzayhpcC0+aV9tYXBwaW5nLCBHRlBfTk9GUyk7CiAKIAkvKiBBbGxvY2F0aW9ucyB0byBtZXRhZGF0YSBpbm9kZXMgc2hvdWxkIG5vdCBhZmZlY3QgcXVvdGFzICovCkBAIC0yNTczLDkgKzI1NzMsMTggQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJLyogYXNzaWduIGEgYnVmZmVyIGZvciB0aGUgcGFnZSAqLwotCQltcCA9IGdldF9tZXRhcGFnZShpcGltYXAsIHhhZGRyLCBQU0laRSwgMSk7Ci0JCWlmICghbXApIHsKKwkJLyoKKwkJICogc3RhcnQgdHJhbnNhY3Rpb24gb2YgdXBkYXRlIG9mIHRoZSBpbm9kZSBtYXAKKwkJICogYWRkcmVzc2luZyBzdHJ1Y3R1cmUgcG9pbnRpbmcgdG8gdGhlIG5ldyBpYWcgcGFnZTsKKwkJICovCisJCXRpZCA9IHR4QmVnaW4oc2IsIENPTU1JVF9GT1JDRSk7CisJCWRvd24oJkpGU19JUChpcGltYXApLT5jb21taXRfc2VtKTsKKworCQkvKiB1cGRhdGUgdGhlIGlub2RlIG1hcCBhZGRyZXNzaW5nIHN0cnVjdHVyZSB0byBwb2ludCB0byBpdCAqLworCQlpZiAoKHJjID0KKwkJICAgICB4dEluc2VydCh0aWQsIGlwaW1hcCwgMCwgYmxrbm8sIHhsZW4sICZ4YWRkciwgMCkpKSB7CisJCQl0eEVuZCh0aWQpOworCQkJdXAoJkpGU19JUChpcGltYXApLT5jb21taXRfc2VtKTsKIAkJCS8qIEZyZWUgdGhlIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIHRoZSBpYWcgc2luY2UgaXQgd2FzCiAJCQkgKiBub3Qgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBpbm9kZSBtYXAKIAkJCSAqLwpAQCAtMjU4NCw2ICsyNTkzLDI5IEBACiAJCQkvKiByZWxlYXNlIHRoZSBpbm9kZSBtYXAgbG9jayAqLwogCQkJSVdSSVRFX1VOTE9DSyhpcGltYXApOwogCisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIHVwZGF0ZSB0aGUgaW5vZGUgbWFwJ3MgaW5vZGUgdG8gcmVmbGVjdCB0aGUgZXh0ZW5zaW9uICovCisJCWlwaW1hcC0+aV9zaXplICs9IFBTSVpFOworCQlpbm9kZV9hZGRfYnl0ZXMoaXBpbWFwLCBQU0laRSk7CisKKwkJLyogYXNzaWduIGEgYnVmZmVyIGZvciB0aGUgcGFnZSAqLworCQltcCA9IGdldF9tZXRhcGFnZShpcGltYXAsIGJsa25vLCBQU0laRSwgMCk7CisJCWlmICghbXApIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIHZlcnkgdW5saWtlbHkgc2luY2Ugd2UganVzdCBjcmVhdGVkIHRoZQorCQkJICogZXh0ZW50LCBidXQgbGV0J3MgdHJ5IHRvIGhhbmRsZSBpdCBjb3JyZWN0bHkKKwkJCSAqLworCQkJeHRUcnVuY2F0ZSh0aWQsIGlwaW1hcCwgaXBpbWFwLT5pX3NpemUgLSBQU0laRSwKKwkJCQkgICBDT01NSVRfUFdNQVApOworCisJCQl0eEFib3J0KHRpZCwgMCk7CisJCQl0eEVuZCh0aWQpOworCisJCQkvKiByZWxlYXNlIHRoZSBpbm9kZSBtYXAgbG9jayAqLworCQkJSVdSSVRFX1VOTE9DSyhpcGltYXApOworCiAJCQlyYyA9IC1FSU87CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMjYwNSw0MSArMjYzNywxMSBAQAogCQkJaWFncC0+aW5vc21hcFtpXSA9IGNwdV90b19sZTMyKE9ORVMpOwogCiAJCS8qCi0JCSAqIEludmFsaWRhdGUgdGhlIHBhZ2UgYWZ0ZXIgd3JpdGluZyBhbmQgc3luY2luZyBpdC4KLQkJICogQWZ0ZXIgaXQncyBpbml0aWFsaXplZCwgd2UgYWNjZXNzIGl0IGluIGEgZGlmZmVyZW50Ci0JCSAqIGFkZHJlc3Mgc3BhY2UKKwkJICogV3JpdGUgYW5kIHN5bmMgdGhlIG1ldGFwYWdlCiAJCSAqLwotCQlzZXRfYml0KE1FVEFfZGlzY2FyZCwgJm1wLT5mbGFnKTsKIAkJZmx1c2hfbWV0YXBhZ2UobXApOwogCiAJCS8qCi0JCSAqIHN0YXJ0IHR5cmFuc2FjdGlvbiBvZiB1cGRhdGUgb2YgdGhlIGlub2RlIG1hcAotCQkgKiBhZGRyZXNzaW5nIHN0cnVjdHVyZSBwb2ludGluZyB0byB0aGUgbmV3IGlhZyBwYWdlOwotCQkgKi8KLQkJdGlkID0gdHhCZWdpbihzYiwgQ09NTUlUX0ZPUkNFKTsKLQkJZG93bigmSkZTX0lQKGlwaW1hcCktPmNvbW1pdF9zZW0pOwotCi0JCS8qIHVwZGF0ZSB0aGUgaW5vZGUgbWFwIGFkZHJlc3Npbmcgc3RydWN0dXJlIHRvIHBvaW50IHRvIGl0ICovCi0JCWlmICgocmMgPQotCQkgICAgIHh0SW5zZXJ0KHRpZCwgaXBpbWFwLCAwLCBibGtubywgeGxlbiwgJnhhZGRyLCAwKSkpIHsKLQkJCXR4RW5kKHRpZCk7Ci0JCQl1cCgmSkZTX0lQKGlwaW1hcCktPmNvbW1pdF9zZW0pOwotCQkJLyogRnJlZSB0aGUgYmxvY2tzIGFsbG9jYXRlZCBmb3IgdGhlIGlhZyBzaW5jZSBpdCB3YXMKLQkJCSAqIG5vdCBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIGlub2RlIG1hcAotCQkJICovCi0JCQlkYkZyZWUoaXBpbWFwLCB4YWRkciwgKHM2NCkgeGxlbik7Ci0KLQkJCS8qIHJlbGVhc2UgdGhlIGlub2RlIG1hcCBsb2NrICovCi0JCQlJV1JJVEVfVU5MT0NLKGlwaW1hcCk7Ci0KLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJLyogdXBkYXRlIHRoZSBpbm9kZSBtYXAncyBpbm9kZSB0byByZWZsZWN0IHRoZSBleHRlbnNpb24gKi8KLQkJaXBpbWFwLT5pX3NpemUgKz0gUFNJWkU7Ci0JCWlub2RlX2FkZF9ieXRlcyhpcGltYXAsIFBTSVpFKTsKLQotCQkvKgogCQkgKiB0eENvbW1pdChDT01NSVRfRk9SQ0UpIHdpbGwgc3luY2hyb25vdXNseSB3cml0ZSBhZGRyZXNzIAogCQkgKiBpbmRleCBwYWdlcyBhbmQgaW5vZGUgYWZ0ZXIgY29tbWl0IGluIGNhcmVmdWwgdXBkYXRlIG9yZGVyIAogCQkgKiBvZiBhZGRyZXNzIGluZGV4IHBhZ2VzIChyaWdodCB0byBsZWZ0LCBib3R0b20gdXApOwpAQCAtMjc4OSw2ICsyNzkxLDcgQEAKIAl1MzIgbWFzazsKIAlzdHJ1Y3QgamZzX2xvZyAqbG9nOwogCWludCBsc24sIGRpZmZ0LCBkaWZmcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaW1hcCA9IEpGU19JUChpcGltYXApLT5pX2ltYXA7CiAJLyogZ2V0IHRoZSBpYWcgbnVtYmVyIGNvbnRhaW5pbmcgdGhlIGlub2RlICovCkBAIC0yODA1LDYgKzI4MDgsNyBAQAogCUlSRUFEX1VOTE9DSyhpcGltYXApOwogCWlmIChyYykKIAkJcmV0dXJuIChyYyk7CisJbWV0YXBhZ2Vfd2FpdF9mb3JfaW8obXApOwogCWlhZ3AgPSAoc3RydWN0IGlhZyAqKSBtcC0+ZGF0YTsKIAkvKiBnZXQgdGhlIGlub2RlIG51bWJlciBhbmQgZXh0ZW50IG51bWJlciBvZiB0aGUgaW5vZGUgd2l0aGluCiAJICogdGhlIGlhZyBhbmQgdGhlIGlub2RlIG51bWJlciB3aXRoaW4gdGhlIGV4dGVudC4KQEAgLTI4NjgsMzAgKzI4NzIsMjggQEAKIAkJLyogaW5oZXJpdCBvbGRlci9zbWFsbGVyIGxzbiAqLwogCQlsb2dkaWZmKGRpZmZ0LCBsc24sIGxvZyk7CiAJCWxvZ2RpZmYoZGlmZnAsIG1wLT5sc24sIGxvZyk7CisJCUxPR1NZTkNfTE9DSyhsb2csIGZsYWdzKTsKIAkJaWYgKGRpZmZ0IDwgZGlmZnApIHsKIAkJCW1wLT5sc24gPSBsc247CiAJCQkvKiBtb3ZlIG1wIGFmdGVyIHRibG9jayBpbiBsb2dzeW5jIGxpc3QgKi8KLQkJCUxPR1NZTkNfTE9DSyhsb2cpOwogCQkJbGlzdF9tb3ZlKCZtcC0+c3luY2xpc3QsICZ0YmxrLT5zeW5jbGlzdCk7Ci0JCQlMT0dTWU5DX1VOTE9DSyhsb2cpOwogCQl9CiAJCS8qIGluaGVyaXQgeW91bmdlci9sYXJnZXIgY2xzbiAqLwotCQlMT0dTWU5DX0xPQ0sobG9nKTsKIAkJYXNzZXJ0KG1wLT5jbHNuKTsKIAkJbG9nZGlmZihkaWZmdCwgdGJsay0+Y2xzbiwgbG9nKTsKIAkJbG9nZGlmZihkaWZmcCwgbXAtPmNsc24sIGxvZyk7CiAJCWlmIChkaWZmdCA+IGRpZmZwKQogCQkJbXAtPmNsc24gPSB0YmxrLT5jbHNuOwotCQlMT0dTWU5DX1VOTE9DSyhsb2cpOworCQlMT0dTWU5DX1VOTE9DSyhsb2csIGZsYWdzKTsKIAl9IGVsc2UgewogCQltcC0+bG9nID0gbG9nOwogCQltcC0+bHNuID0gbHNuOwogCQkvKiBpbnNlcnQgbXAgYWZ0ZXIgdGJsb2NrIGluIGxvZ3N5bmMgbGlzdCAqLwotCQlMT0dTWU5DX0xPQ0sobG9nKTsKKwkJTE9HU1lOQ19MT0NLKGxvZywgZmxhZ3MpOwogCQlsb2ctPmNvdW50Kys7CiAJCWxpc3RfYWRkKCZtcC0+c3luY2xpc3QsICZ0YmxrLT5zeW5jbGlzdCk7CiAJCW1wLT5jbHNuID0gdGJsay0+Y2xzbjsKLQkJTE9HU1lOQ19VTkxPQ0sobG9nKTsKKwkJTE9HU1lOQ19VTkxPQ0sobG9nLCBmbGFncyk7CiAJfQogCXdyaXRlX21ldGFwYWdlKG1wKTsKIAlyZXR1cm4gKDApOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbmNvcmUuaCBiL2ZzL2pmcy9qZnNfaW5jb3JlLmgKaW5kZXggZWJkNzdjMS4uYzBmZDdiMyAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbmNvcmUuaAorKysgYi9mcy9qZnMvamZzX2luY29yZS5oCkBAIC0xNjUsNiArMTY1LDcgQEAKICAgICAgICAgLyogRm9ybWVybHkgaW4gaXBibWFwICovCiAJc3RydWN0IGJtYXAJKmJtYXA7CQkvKiBpbmNvcmUgYm1hcCBkZXNjcmlwdG9yCSovCiAJc3RydWN0IG5sc190YWJsZSAqbmxzX3RhYjsJLyogY3VycmVudCBjb2RlcGFnZQkJKi8KKwlzdHJ1Y3QgaW5vZGUgKmRpcmVjdF9pbm9kZTsJLyogbWV0YWRhdGEgaW5vZGUgKi8KIAl1aW50CQlzdGF0ZTsJCS8qIG1vdW50L3JlY292ZXJ5IHN0YXRlCSovCiAJdW5zaWduZWQgbG9uZwlmbGFnOwkJLyogbW91bnQgdGltZSBmbGFncyAqLwogCXVpbnQJCXBfc3RhdGU7CS8qIHN0YXRlIHByaW9yIHRvIGdvaW5nIG5vIGludGVncml0eSAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19sb2dtZ3IuYyBiL2ZzL2pmcy9qZnNfbG9nbWdyLmMKaW5kZXggYjZhNjg2OS4uZGZhMTIwMCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19sb2dtZ3IuYworKysgYi9mcy9qZnMvamZzX2xvZ21nci5jCkBAIC0yMzQsNiArMjM0LDcgQEAKIAlpbnQgbHNuOwogCWludCBkaWZmcCwgZGlmZnQ7CiAJc3RydWN0IG1ldGFwYWdlICptcCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWpmc19pbmZvKCJsbUxvZzogbG9nOjB4JXAgdGJsazoweCVwLCBscmQ6MHglcCB0bGNrOjB4JXAiLAogCQkgbG9nLCB0YmxrLCBscmQsIHRsY2spOwpAQCAtMjU0LDcgKzI1NSw3IEBACiAJICovCiAJbHNuID0gbG9nLT5sc247CiAKLQlMT0dTWU5DX0xPQ0sobG9nKTsKKwlMT0dTWU5DX0xPQ0sobG9nLCBmbGFncyk7CiAKIAkvKgogCSAqIGluaXRpYWxpemUgcGFnZSBsc24gaWYgZmlyc3QgbG9nIHdyaXRlIG9mIHRoZSBwYWdlCkBAIC0zMTAsNyArMzExLDcgQEAKIAkJfQogCX0KIAotCUxPR1NZTkNfVU5MT0NLKGxvZyk7CisJTE9HU1lOQ19VTkxPQ0sobG9nLCBmbGFncyk7CiAKIAkvKgogCSAqICAgICAgd3JpdGUgdGhlIGxvZyByZWNvcmQKQEAgLTMzNCw3ICszMzUsNiBAQAogCXJldHVybiBsc247CiB9CiAKLQogLyoKICAqIE5BTUU6CWxtV3JpdGVSZWNvcmQoKQogICoKQEAgLTkyNyw5ICs5MjcsOCBAQAogICoJY2FsY3VsYXRlIG5ldyB2YWx1ZSBvZiBpX25leHRzeW5jIHdoaWNoIGRldGVybWluZXMgd2hlbgogICoJdGhpcyBjb2RlIGlzIGNhbGxlZCBhZ2Fpbi4KICAqCi0gKgl0aGlzIGlzIGNhbGxlZCBvbmx5IGZyb20gbG1Mb2coKS4KLSAqCi0gKiBQQVJBTUVURVI6CWlwCS0gcG9pbnRlciB0byBsb2dzIGlub2RlLgorICogUEFSQU1FVEVSUzoJbG9nCS0gbG9nIHN0cnVjdHVyZQorICogCQlub3N5bmN3YWl0IC0gMSBpZiBjYWxsZWQgYXN5bmNocm9ub3VzbHkKICAqCiAgKiBSRVRVUk46CTAKICAqCQkJCkBAIC05NDUsNiArOTQ0LDE1IEBACiAJc3RydWN0IGxyZCBscmQ7CiAJaW50IGxzbjsKIAlzdHJ1Y3QgbG9nc3luY2JsayAqbHA7CisJc3RydWN0IGpmc19zYl9pbmZvICpzYmk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIHB1c2ggZGlydHkgbWV0YXBhZ2VzIG91dCB0byBkaXNrICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYmksICZsb2ctPnNiX2xpc3QsIGxvZ19saXN0KSB7CisJCWZpbGVtYXBfZmx1c2goc2JpLT5pcGJtYXAtPmlfbWFwcGluZyk7CisJCWZpbGVtYXBfZmx1c2goc2JpLT5pcGltYXAtPmlfbWFwcGluZyk7CisJCWZpbGVtYXBfZmx1c2goc2JpLT5kaXJlY3RfaW5vZGUtPmlfbWFwcGluZyk7CisJfQogCiAJLyoKIAkgKiAgICAgIGZvcndhcmQgc3luY3B0CkBAIC05NTQsMTAgKzk2Miw3IEBACiAJICovCiAKIAlpZiAobG9nLT5zeW5jID09IGxvZy0+c3luY3B0KSB7Ci0JCUxPR1NZTkNfTE9DSyhsb2cpOwotCQkvKiBUb0RvOiBwdXNoIGRpcnR5IG1ldGFwYWdlcyBvdXQgdG8gZGlzayAqLwotLy8gICAgICAgICAgICAgIGJtTG9nU3luYyhsb2cpOwotCisJCUxPR1NZTkNfTE9DSyhsb2csIGZsYWdzKTsKIAkJaWYgKGxpc3RfZW1wdHkoJmxvZy0+c3luY2xpc3QpKQogCQkJbG9nLT5zeW5jID0gbG9nLT5sc247CiAJCWVsc2UgewpAQCAtOTY1LDcgKzk3MCw3IEBACiAJCQkJCXN0cnVjdCBsb2dzeW5jYmxrLCBzeW5jbGlzdCk7CiAJCQlsb2ctPnN5bmMgPSBscC0+bHNuOwogCQl9Ci0JCUxPR1NZTkNfVU5MT0NLKGxvZyk7CisJCUxPR1NZTkNfVU5MT0NLKGxvZywgZmxhZ3MpOwogCiAJfQogCkBAIC05NzQsMjcgKzk3OSw2IEBACiAJICogcmVzZXQgc3luY3B0ID0gc3luYwogCSAqLwogCWlmIChsb2ctPnN5bmMgIT0gbG9nLT5zeW5jcHQpIHsKLQkJc3RydWN0IGpmc19zYl9pbmZvICpzYmk7Ci0KLQkJLyoKLQkJICogV2UgbmVlZCB0byBtYWtlIHN1cmUgYWxsIG9mIHRoZSAid3JpdHRlbiIgbWV0YXBhZ2VzCi0JCSAqIGFjdHVhbGx5IG1ha2UgaXQgdG8gZGlzawotCQkgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzYmksICZsb2ctPnNiX2xpc3QsIGxvZ19saXN0KSB7Ci0JCQlpZiAoc2JpLT5mbGFnICYgSkZTX05PSU5URUdSSVRZKQotCQkJCWNvbnRpbnVlOwotCQkJZmlsZW1hcF9mZGF0YXdyaXRlKHNiaS0+aXBibWFwLT5pX21hcHBpbmcpOwotCQkJZmlsZW1hcF9mZGF0YXdyaXRlKHNiaS0+aXBpbWFwLT5pX21hcHBpbmcpOwotCQkJZmlsZW1hcF9mZGF0YXdyaXRlKHNiaS0+c2ItPnNfYmRldi0+YmRfaW5vZGUtPmlfbWFwcGluZyk7Ci0JCX0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzYmksICZsb2ctPnNiX2xpc3QsIGxvZ19saXN0KSB7Ci0JCQlpZiAoc2JpLT5mbGFnICYgSkZTX05PSU5URUdSSVRZKQotCQkJCWNvbnRpbnVlOwotCQkJZmlsZW1hcF9mZGF0YXdhaXQoc2JpLT5pcGJtYXAtPmlfbWFwcGluZyk7Ci0JCQlmaWxlbWFwX2ZkYXRhd2FpdChzYmktPmlwaW1hcC0+aV9tYXBwaW5nKTsKLQkJCWZpbGVtYXBfZmRhdGF3YWl0KHNiaS0+c2ItPnNfYmRldi0+YmRfaW5vZGUtPmlfbWFwcGluZyk7Ci0JCX0KLQogCQlscmQubG9ndGlkID0gMDsKIAkJbHJkLmJhY2tjaGFpbiA9IDA7CiAJCWxyZC50eXBlID0gY3B1X3RvX2xlMTYoTE9HX1NZTkNQVCk7CkBAIC0xMDY2LDYgKzEwNTAsMTggQEAKIAlyZXR1cm4gbHNuOwogfQogCisvKgorICogTkFNRToJamZzX3N5bmNwdAorICoKKyAqIEZVTkNUSU9OOgl3cml0ZSBsb2cgU1lOQ1BUIHJlY29yZCBmb3Igc3BlY2lmaWVkIGxvZworICoKKyAqIFBBUkFNRVRFUlM6CWxvZwktIGxvZyBzdHJ1Y3R1cmUKKyAqLwordm9pZCBqZnNfc3luY3B0KHN0cnVjdCBqZnNfbG9nICpsb2cpCit7CUxPR19MT0NLKGxvZyk7CisJbG1Mb2dTeW5jKGxvZywgMSk7CisJTE9HX1VOTE9DSyhsb2cpOworfQogCiAvKgogICogTkFNRToJbG1Mb2dPcGVuKCkKQEAgLTE1NDcsNiArMTU0Myw3IEBACiB7CiAJaW50IGk7CiAJc3RydWN0IHRibG9jayAqdGFyZ2V0ID0gTlVMTDsKKwlzdHJ1Y3QgamZzX3NiX2luZm8gKnNiaTsKIAogCS8qIGpmc193cml0ZV9pbm9kZSBtYXkgY2FsbCB1cyBkdXJpbmcgcmVhZC1vbmx5IG1vdW50ICovCiAJaWYgKCFsb2cpCkBAIC0xNjA4LDEyICsxNjA1LDE4IEBACiAJaWYgKHdhaXQgPCAyKQogCQlyZXR1cm47CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNiaSwgJmxvZy0+c2JfbGlzdCwgbG9nX2xpc3QpIHsKKwkJZmlsZW1hcF9mZGF0YXdyaXRlKHNiaS0+aXBibWFwLT5pX21hcHBpbmcpOworCQlmaWxlbWFwX2ZkYXRhd3JpdGUoc2JpLT5pcGltYXAtPmlfbWFwcGluZyk7CisJCWZpbGVtYXBfZmRhdGF3cml0ZShzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nKTsKKwl9CisKIAkvKgogCSAqIElmIHRoZXJlIHdhcyByZWNlbnQgYWN0aXZpdHksIHdlIG1heSBuZWVkIHRvIHdhaXQKIAkgKiBmb3IgdGhlIGxhenljb21taXQgdGhyZWFkIHRvIGNhdGNoIHVwCiAJICovCiAJaWYgKCghbGlzdF9lbXB0eSgmbG9nLT5jcXVldWUpKSB8fCAhbGlzdF9lbXB0eSgmbG9nLT5zeW5jbGlzdCkpIHsKLQkJZm9yIChpID0gMDsgaSA8IDgwMDsgaSsrKSB7CS8qIFRvbyBtdWNoPyAqLworCQlmb3IgKGkgPSAwOyBpIDwgMjAwOyBpKyspIHsJLyogVG9vIG11Y2g/ICovCiAJCQltc2xlZXAoMjUwKTsKIAkJCWlmIChsaXN0X2VtcHR5KCZsb2ctPmNxdWV1ZSkgJiYKIAkJCSAgICBsaXN0X2VtcHR5KCZsb2ctPnN5bmNsaXN0KSkKQEAgLTE2MjEsNyArMTYyNCwyNCBAQAogCQl9CiAJfQogCWFzc2VydChsaXN0X2VtcHR5KCZsb2ctPmNxdWV1ZSkpOwotCWFzc2VydChsaXN0X2VtcHR5KCZsb2ctPnN5bmNsaXN0KSk7CisJaWYgKCFsaXN0X2VtcHR5KCZsb2ctPnN5bmNsaXN0KSkgeworCQlzdHJ1Y3QgbG9nc3luY2JsayAqbHA7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShscCwgJmxvZy0+c3luY2xpc3QsIHN5bmNsaXN0KSB7CisJCQlpZiAobHAtPnhmbGFnICYgQ09NTUlUX1BBR0UpIHsKKwkJCQlzdHJ1Y3QgbWV0YXBhZ2UgKm1wID0gKHN0cnVjdCBtZXRhcGFnZSAqKWxwOworCQkJCWR1bXBfbWVtKCJvcnBoYW4gbWV0YXBhZ2UiLCBscCwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgbWV0YXBhZ2UpKTsKKwkJCQlkdW1wX21lbSgicGFnZSIsIG1wLT5wYWdlLCBzaXplb2Yoc3RydWN0IHBhZ2UpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlkdW1wX21lbSgib3JwaGFuIHRibG9jayIsIGxwLAorCQkJCQkgc2l6ZW9mKHN0cnVjdCB0YmxvY2spKTsKKwkJfQorLy8JCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworLy8JCXNjaGVkdWxlKCk7CisJfQorCS8vYXNzZXJ0KGxpc3RfZW1wdHkoJmxvZy0+c3luY2xpc3QpKTsKIAljbGVhcl9iaXQobG9nX0ZMVVNILCAmbG9nLT5mbGFnKTsKIH0KIApAQCAtMTY2OSw2ICsxNjg5LDcgQEAKIAlscC0+aC5lb3IgPSBscC0+dC5lb3IgPSBjcHVfdG9fbGUxNihicC0+bF9lb3IpOwogCWxibVdyaXRlKGxvZywgbG9nLT5icCwgbGJtV1JJVEUgfCBsYm1SRUxFQVNFIHwgbGJtU1lOQywgMCk7CiAJbGJtSU9XYWl0KGxvZy0+YnAsIGxibUZSRUUpOworCWxvZy0+YnAgPSBOVUxMOwogCiAJLyoKIAkgKiBzeW5jaHJvbm91cyB1cGRhdGUgbG9nIHN1cGVyYmxvY2sKQEAgLTE4MTksMjAgKzE4NDAsMzQgQEAKIAogCWxvZy0+bGJ1Zl9mcmVlID0gTlVMTDsKIAotCWZvciAoaSA9IDA7IGkgPCBMT0dQQUdFUzsgaSsrKSB7Ci0JCWxidWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGJ1ZiksIEdGUF9LRVJORUwpOwotCQlpZiAobGJ1ZiA9PSAwKQotCQkJZ290byBlcnJvcjsKLQkJbGJ1Zi0+bF9sZGF0YSA9IChjaGFyICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKGxidWYtPmxfbGRhdGEgPT0gMCkgewotCQkJa2ZyZWUobGJ1Zik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCWxidWYtPmxfbG9nID0gbG9nOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZsYnVmLT5sX2lvZXZlbnQpOworCWZvciAoaSA9IDA7IGkgPCBMT0dQQUdFUzspIHsKKwkJY2hhciAqYnVmZmVyOworCQl1aW50IG9mZnNldDsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQkJbGJ1Zi0+bF9mcmVlbGlzdCA9IGxvZy0+bGJ1Zl9mcmVlOwotCQlsb2ctPmxidWZfZnJlZSA9IGxidWY7CisJCWJ1ZmZlciA9IChjaGFyICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZmZlciA9PSBOVUxMKQorCQkJZ290byBlcnJvcjsKKwkJcGFnZSA9IHZpcnRfdG9fcGFnZShidWZmZXIpOworCQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IFBBR0VfU0laRTsgb2Zmc2V0ICs9IExPR1BTSVpFKSB7CisJCQlsYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxidWYpLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChsYnVmID09IE5VTEwpIHsKKwkJCQlpZiAob2Zmc2V0ID09IDApCisJCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYnVmZmVyKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJaWYgKG9mZnNldCkgLyogd2UgYWxyZWFkeSBoYXZlIG9uZSByZWZlcmVuY2UgKi8KKwkJCQlnZXRfcGFnZShwYWdlKTsKKwkJCWxidWYtPmxfb2Zmc2V0ID0gb2Zmc2V0OworCQkJbGJ1Zi0+bF9sZGF0YSA9IGJ1ZmZlciArIG9mZnNldDsKKwkJCWxidWYtPmxfcGFnZSA9IHBhZ2U7CisJCQlsYnVmLT5sX2xvZyA9IGxvZzsKKwkJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmxidWYtPmxfaW9ldmVudCk7CisKKwkJCWxidWYtPmxfZnJlZWxpc3QgPSBsb2ctPmxidWZfZnJlZTsKKwkJCWxvZy0+bGJ1Zl9mcmVlID0gbGJ1ZjsKKwkJCWkrKzsKKwkJfQogCX0KIAogCXJldHVybiAoMCk7CkBAIC0xODU3LDEyICsxODkyLDEwIEBACiAJbGJ1ZiA9IGxvZy0+bGJ1Zl9mcmVlOwogCXdoaWxlIChsYnVmKSB7CiAJCXN0cnVjdCBsYnVmICpuZXh0ID0gbGJ1Zi0+bF9mcmVlbGlzdDsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBsYnVmLT5sX2xkYXRhKTsKKwkJX19mcmVlX3BhZ2UobGJ1Zi0+bF9wYWdlKTsKIAkJa2ZyZWUobGJ1Zik7CiAJCWxidWYgPSBuZXh0OwogCX0KLQotCWxvZy0+YnAgPSBOVUxMOwogfQogCiAKQEAgLTE5NzQsOSArMjAwNyw5IEBACiAKIAliaW8tPmJpX3NlY3RvciA9IGJwLT5sX2Jsa25vIDw8IChsb2ctPmwyYnNpemUgLSA5KTsKIAliaW8tPmJpX2JkZXYgPSBsb2ctPmJkZXY7Ci0JYmlvLT5iaV9pb192ZWNbMF0uYnZfcGFnZSA9IHZpcnRfdG9fcGFnZShicC0+bF9sZGF0YSk7CisJYmlvLT5iaV9pb192ZWNbMF0uYnZfcGFnZSA9IGJwLT5sX3BhZ2U7CiAJYmlvLT5iaV9pb192ZWNbMF0uYnZfbGVuID0gTE9HUFNJWkU7Ci0JYmlvLT5iaV9pb192ZWNbMF0uYnZfb2Zmc2V0ID0gMDsKKwliaW8tPmJpX2lvX3ZlY1swXS5idl9vZmZzZXQgPSBicC0+bF9vZmZzZXQ7CiAKIAliaW8tPmJpX3ZjbnQgPSAxOwogCWJpby0+YmlfaWR4ID0gMDsKQEAgLTIxMTUsOSArMjE0OCw5IEBACiAJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0ZTLCAxKTsKIAliaW8tPmJpX3NlY3RvciA9IGJwLT5sX2Jsa25vIDw8IChsb2ctPmwyYnNpemUgLSA5KTsKIAliaW8tPmJpX2JkZXYgPSBsb2ctPmJkZXY7Ci0JYmlvLT5iaV9pb192ZWNbMF0uYnZfcGFnZSA9IHZpcnRfdG9fcGFnZShicC0+bF9sZGF0YSk7CisJYmlvLT5iaV9pb192ZWNbMF0uYnZfcGFnZSA9IGJwLT5sX3BhZ2U7CiAJYmlvLT5iaV9pb192ZWNbMF0uYnZfbGVuID0gTE9HUFNJWkU7Ci0JYmlvLT5iaV9pb192ZWNbMF0uYnZfb2Zmc2V0ID0gMDsKKwliaW8tPmJpX2lvX3ZlY1swXS5idl9vZmZzZXQgPSBicC0+bF9vZmZzZXQ7CiAKIAliaW8tPmJpX3ZjbnQgPSAxOwogCWJpby0+YmlfaWR4ID0gMDsKQEAgLTIxMjcsMTYgKzIxNjAsMTMgQEAKIAliaW8tPmJpX3ByaXZhdGUgPSBicDsKIAogCS8qIGNoZWNrIGlmIGpvdXJuYWxpbmcgdG8gZGlzayBoYXMgYmVlbiBkaXNhYmxlZCAqLwotCWlmICghbG9nLT5ub19pbnRlZ3JpdHkpIHsKKwlpZiAobG9nLT5ub19pbnRlZ3JpdHkpIHsKKwkJYmlvLT5iaV9zaXplID0gMDsKKwkJbGJtSU9Eb25lKGJpbywgMCwgMCk7CisJfSBlbHNlIHsKIAkJc3VibWl0X2JpbyhXUklURV9TWU5DLCBiaW8pOwogCQlJTkNSRU1FTlQobG1TdGF0LnN1Ym1pdHRlZCk7CiAJfQotCWVsc2UgewotCQliaW8tPmJpX3NpemUgPSAwOwotCQlsYm1JT0RvbmUoYmlvLCAwLCAwKTsgLyogMm5kIGFyZ3VtZW50IGFwcGVhcnMgdG8gbm90IGJlIHVzZWQgPT4gMAotCQkJCSAgICAgICAqICAzcmQgYXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgdXNlZCA9PiAwCi0JCQkJICAgICAgICovCi0JfQogfQogCiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbG9nbWdyLmggYi9mcy9qZnMvamZzX2xvZ21nci5oCmluZGV4IDE0MWFkNzQuLjUxMjkxZmIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbG9nbWdyLmgKKysrIGIvZnMvamZzL2pmc19sb2dtZ3IuaApAQCAtNDYzLDkgKzQ2MywxMCBAQAogCiAJczY0IGxfYmxrbm87CQkvKiA4OiBsb2cgcGFnZSBibG9jayBudW1iZXIgKi8KIAljYWRkcl90IGxfbGRhdGE7CS8qIDQ6IGRhdGEgcGFnZSAqLworCXN0cnVjdCBwYWdlICpsX3BhZ2U7CS8qIFRoZSBwYWdlIGl0c2VsZiAqLworCXVpbnQgbF9vZmZzZXQ7CQkvKiBPZmZzZXQgb2YgbF9sZGF0YSB3aXRoaW4gdGhlIHBhZ2UgKi8JCiAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBsX2lvZXZlbnQ7CS8qIDQ6IGkvbyBkb25lIGV2ZW50ICovCi0Jc3RydWN0IHBhZ2UgKmxfcGFnZTsJLyogVGhlIHBhZ2UgaXRzZWxmICovCiB9OwogCiAvKiBSZXVzZSBsX2ZyZWVsaXN0IGZvciByZWRyaXZlIGxpc3QgKi8KQEAgLTQ4OSw4ICs0OTAsOSBAQAogICovCiAKICNkZWZpbmUgTE9HU1lOQ19MT0NLX0lOSVQobG9nKSBzcGluX2xvY2tfaW5pdCgmKGxvZyktPnN5bmNsb2NrKQotI2RlZmluZSBMT0dTWU5DX0xPQ0sobG9nKSBzcGluX2xvY2soJihsb2cpLT5zeW5jbG9jaykKLSNkZWZpbmUgTE9HU1lOQ19VTkxPQ0sobG9nKSBzcGluX3VubG9jaygmKGxvZyktPnN5bmNsb2NrKQorI2RlZmluZSBMT0dTWU5DX0xPQ0sobG9nLCBmbGFncykgc3Bpbl9sb2NrX2lycXNhdmUoJihsb2cpLT5zeW5jbG9jaywgZmxhZ3MpCisjZGVmaW5lIExPR1NZTkNfVU5MT0NLKGxvZywgZmxhZ3MpIFwKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYobG9nKS0+c3luY2xvY2ssIGZsYWdzKQogCiAvKiBjb21wdXRlIHRoZSBkaWZmZXJlbmNlIGluIGJ5dGVzIG9mIGxzbiBmcm9tIHN5bmMgcG9pbnQgKi8KICNkZWZpbmUgbG9nZGlmZihkaWZmLCBsc24sIGxvZylcCkBAIC01MDYsNSArNTA4LDYgQEAKIGV4dGVybiBpbnQgbG1Mb2dJbml0KHN0cnVjdCBqZnNfbG9nICogbG9nKTsKIGV4dGVybiBpbnQgbG1Mb2dGb3JtYXQoc3RydWN0IGpmc19sb2cgKmxvZywgczY0IGxvZ0FkZHJlc3MsIGludCBsb2dTaXplKTsKIGV4dGVybiB2b2lkIGpmc19mbHVzaF9qb3VybmFsKHN0cnVjdCBqZnNfbG9nICogbG9nLCBpbnQgd2FpdCk7CitleHRlcm4gdm9pZCBqZnNfc3luY3B0KHN0cnVjdCBqZnNfbG9nICpsb2cpOwogCiAjZW5kaWYJCQkJLyogX0hfSkZTX0xPR01HUiAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19tZXRhcGFnZS5jIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCmluZGV4IDRjMGEzYWMuLjQxYmYwNzggMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYworKysgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4sIDIwMDAtMjAwMworICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4sIDIwMDAtMjAwNQogICogICBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIENocmlzdG9waCBIZWxsd2lnLCAyMDAxLTIwMDIKICAqCiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTgsMTAgKzE4LDExIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlICJqZnNfaW5jb3JlLmgiCiAjaW5jbHVkZSAiamZzX3N1cGVyYmxvY2suaCIKICNpbmNsdWRlICJqZnNfZmlsc3lzLmgiCkBAIC0yOSw4ICszMCw2IEBACiAjaW5jbHVkZSAiamZzX3R4bm1nci5oIgogI2luY2x1ZGUgImpmc19kZWJ1Zy5oIgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1ldGFfbG9jayk7Ci0KICNpZmRlZiBDT05GSUdfSkZTX1NUQVRJU1RJQ1MKIHN0YXRpYyBzdHJ1Y3QgewogCXVpbnQJcGFnZWFsbG9jOwkvKiAjIG9mIHBhZ2UgYWxsb2NhdGlvbnMgKi8KQEAgLTM5LDIyICszOCw4IEBACiB9IG1wU3RhdDsKICNlbmRpZgogCi0KLSNkZWZpbmUgSEFTSF9CSVRTIDEwCQkvKiBUaGlzIG1ha2VzIGhhc2hfdGFibGUgMSA0SyBwYWdlICovCi0jZGVmaW5lIEhBU0hfU0laRSAoMSA8PCBIQVNIX0JJVFMpCi1zdGF0aWMgc3RydWN0IG1ldGFwYWdlICoqaGFzaF90YWJsZSA9IE5VTEw7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBoYXNoX29yZGVyOwotCi0KLXN0YXRpYyBpbmxpbmUgaW50IG1ldGFwYWdlX2xvY2tlZChzdHJ1Y3QgbWV0YXBhZ2UgKm1wKQotewotCXJldHVybiB0ZXN0X2JpdChNRVRBX2xvY2tlZCwgJm1wLT5mbGFnKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdHJ5bG9ja19tZXRhcGFnZShzdHJ1Y3QgbWV0YXBhZ2UgKm1wKQotewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KE1FVEFfbG9ja2VkLCAmbXAtPmZsYWcpOwotfQorI2RlZmluZSBtZXRhcGFnZV9sb2NrZWQobXApIHRlc3RfYml0KE1FVEFfbG9ja2VkLCAmKG1wKS0+ZmxhZykKKyNkZWZpbmUgdHJ5bG9ja19tZXRhcGFnZShtcCkgdGVzdF9hbmRfc2V0X2JpdChNRVRBX2xvY2tlZCwgJihtcCktPmZsYWcpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICptcCkKIHsKQEAgLTYyLDI2ICs0NywyNiBAQAogCXdha2VfdXAoJm1wLT53YWl0KTsKIH0KIAotc3RhdGljIHZvaWQgX19sb2NrX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqbXApCitzdGF0aWMgaW5saW5lIHZvaWQgX19sb2NrX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqbXApCiB7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KIAlJTkNSRU1FTlQobXBTdGF0LmxvY2t3YWl0KTsKLQogCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSgmbXAtPndhaXQsICZ3YWl0KTsKIAlkbyB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKG1ldGFwYWdlX2xvY2tlZChtcCkpIHsKLQkJCXNwaW5fdW5sb2NrKCZtZXRhX2xvY2spOworCQkJdW5sb2NrX3BhZ2UobXAtPnBhZ2UpOwogCQkJc2NoZWR1bGUoKTsKLQkJCXNwaW5fbG9jaygmbWV0YV9sb2NrKTsKKwkJCWxvY2tfcGFnZShtcC0+cGFnZSk7CiAJCX0KIAl9IHdoaWxlICh0cnlsb2NrX21ldGFwYWdlKG1wKSk7CiAJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZtcC0+d2FpdCwgJndhaXQpOwogfQogCi0vKiBuZWVkcyBtZXRhX2xvY2sgKi8KKy8qCisgKiBNdXN0IGhhdmUgbXAtPnBhZ2UgbG9ja2VkCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqbXApCiB7CiAJaWYgKHRyeWxvY2tfbWV0YXBhZ2UobXApKQpAQCAtOTIsNiArNzcsMTEwIEBACiBzdGF0aWMga21lbV9jYWNoZV90ICptZXRhcGFnZV9jYWNoZTsKIHN0YXRpYyBtZW1wb29sX3QgKm1ldGFwYWdlX21lbXBvb2w7CiAKKyNkZWZpbmUgTVBTX1BFUl9QQUdFIChQQUdFX0NBQ0hFX1NJWkUgPj4gTDJQU0laRSkKKworI2lmIE1QU19QRVJfUEFHRSA+IDEKKworc3RydWN0IG1ldGFfYW5jaG9yIHsKKwlpbnQgbXBfY291bnQ7CisJYXRvbWljX3QgaW9fY291bnQ7CisJc3RydWN0IG1ldGFwYWdlICptcFtNUFNfUEVSX1BBR0VdOworfTsKKyNkZWZpbmUgbXBfYW5jaG9yKHBhZ2UpICgoc3RydWN0IG1ldGFfYW5jaG9yICopcGFnZS0+cHJpdmF0ZSkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKnBhZ2VfdG9fbXAoc3RydWN0IHBhZ2UgKnBhZ2UsIHVpbnQgb2Zmc2V0KQoreworCWlmICghUGFnZVByaXZhdGUocGFnZSkpCisJCXJldHVybiBOVUxMOworCXJldHVybiBtcF9hbmNob3IocGFnZSktPm1wW29mZnNldCA+PiBMMlBTSVpFXTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKQoreworCXN0cnVjdCBtZXRhX2FuY2hvciAqYTsKKwlpbnQgaW5kZXg7CisJaW50IGwybXBfYmxvY2tzOwkvKiBsb2cyIGJsb2NrcyBwZXIgbWV0YXBhZ2UgKi8KKworCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkKKwkJYSA9IG1wX2FuY2hvcihwYWdlKTsKKwllbHNlIHsKKwkJYSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZXRhX2FuY2hvciksIEdGUF9OT0ZTKTsKKwkJaWYgKCFhKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCW1lbXNldChhLCAwLCBzaXplb2Yoc3RydWN0IG1ldGFfYW5jaG9yKSk7CisJCXBhZ2UtPnByaXZhdGUgPSAodW5zaWduZWQgbG9uZylhOworCQlTZXRQYWdlUHJpdmF0ZShwYWdlKTsKKwkJa21hcChwYWdlKTsKKwl9CisKKwlpZiAobXApIHsKKwkJbDJtcF9ibG9ja3MgPSBMMlBTSVpFIC0gcGFnZS0+bWFwcGluZy0+aG9zdC0+aV9ibGtiaXRzOworCQlpbmRleCA9IChtcC0+aW5kZXggPj4gbDJtcF9ibG9ja3MpICYgKE1QU19QRVJfUEFHRSAtIDEpOworCQlhLT5tcF9jb3VudCsrOworCQlhLT5tcFtpbmRleF0gPSBtcDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1ldGFwYWdlICptcCkKK3sKKwlzdHJ1Y3QgbWV0YV9hbmNob3IgKmEgPSBtcF9hbmNob3IocGFnZSk7CisJaW50IGwybXBfYmxvY2tzID0gTDJQU0laRSAtIHBhZ2UtPm1hcHBpbmctPmhvc3QtPmlfYmxrYml0czsKKwlpbnQgaW5kZXg7CisKKwlpbmRleCA9IChtcC0+aW5kZXggPj4gbDJtcF9ibG9ja3MpICYgKE1QU19QRVJfUEFHRSAtIDEpOworCisJQlVHX09OKGEtPm1wW2luZGV4XSAhPSBtcCk7CisKKwlhLT5tcFtpbmRleF0gPSBOVUxMOworCWlmICgtLWEtPm1wX2NvdW50ID09IDApIHsKKwkJa2ZyZWUoYSk7CisJCXBhZ2UtPnByaXZhdGUgPSAwOworCQlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOworCQlrdW5tYXAocGFnZSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5jX2lvKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWF0b21pY19pbmMoJm1wX2FuY2hvcihwYWdlKS0+aW9fY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVjX2lvKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICgqaGFuZGxlcikgKHN0cnVjdCBwYWdlICopKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtcF9hbmNob3IocGFnZSktPmlvX2NvdW50KSkKKwkJaGFuZGxlcihwYWdlKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpwYWdlX3RvX21wKHN0cnVjdCBwYWdlICpwYWdlLCB1aW50IG9mZnNldCkKK3sKKwlyZXR1cm4gUGFnZVByaXZhdGUocGFnZSkgPyAoc3RydWN0IG1ldGFwYWdlICopcGFnZS0+cHJpdmF0ZSA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1ldGFwYWdlICptcCkKK3sKKwlpZiAobXApIHsKKwkJcGFnZS0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKW1wOworCQlTZXRQYWdlUHJpdmF0ZShwYWdlKTsKKwkJa21hcChwYWdlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfbWV0YXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZXRhcGFnZSAqbXApCit7CisJcGFnZS0+cHJpdmF0ZSA9IDA7CisJQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKTsKKwlrdW5tYXAocGFnZSk7Cit9CisKKyNkZWZpbmUgaW5jX2lvKHBhZ2UpIGRvIHt9IHdoaWxlKDApCisjZGVmaW5lIGRlY19pbyhwYWdlLCBoYW5kbGVyKSBoYW5kbGVyKHBhZ2UpCisKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vLCBrbWVtX2NhY2hlX3QgKmNhY2hlcCwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3QgbWV0YXBhZ2UgKm1wID0gKHN0cnVjdCBtZXRhcGFnZSAqKWZvbzsKQEAgLTEzOSwxNiArMjI4LDYgQEAKIAkJa21lbV9jYWNoZV9kZXN0cm95KG1ldGFwYWdlX2NhY2hlKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCS8qCi0JICogTm93IHRoZSBoYXNoIGxpc3QKLQkgKi8KLQlmb3IgKGhhc2hfb3JkZXIgPSAwOwotCSAgICAgKChQQUdFX1NJWkUgPDwgaGFzaF9vcmRlcikgLyBzaXplb2Yodm9pZCAqKSkgPCBIQVNIX1NJWkU7Ci0JICAgICBoYXNoX29yZGVyKyspOwotCWhhc2hfdGFibGUgPQotCSAgICAoc3RydWN0IG1ldGFwYWdlICoqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIGhhc2hfb3JkZXIpOwotCWFzc2VydChoYXNoX3RhYmxlKTsKLQltZW1zZXQoaGFzaF90YWJsZSwgMCwgUEFHRV9TSVpFIDw8IGhhc2hfb3JkZXIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTksNzMgKzIzOCwzODggQEAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kobWV0YXBhZ2VfY2FjaGUpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9tZXRhcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1ldGFwYWdlICptcCkKK3sKKwlpZiAobXAtPmNvdW50IHx8IG1wLT5ub2hvbWVvayB8fCB0ZXN0X2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpIHx8CisJICAgIHRlc3RfYml0KE1FVEFfaW8sICZtcC0+ZmxhZykpCisJCXJldHVybjsKKwlyZW1vdmVfbWV0YXBhZ2UocGFnZSwgbXApOworCUlOQ1JFTUVOVChtcFN0YXQucGFnZWZyZWUpOworCWZyZWVfbWV0YXBhZ2UobXApOworfQorCiAvKgotICogQmFzaWNhbGx5IHNhbWUgaGFzaCBhcyBpbiBwYWdlbWFwLmgsIGJ1dCB1c2luZyBvdXIgaGFzaCB0YWJsZQorICogTWV0YXBhZ2UgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbWV0YXBhZ2UgKiptZXRhX2hhc2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBpbmRleCkKKworc3RhdGljIHNlY3Rvcl90IG1ldGFwYWdlX2dldF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgbGJsb2NrLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmxlbikKIHsKLSNkZWZpbmUgaSAoKCh1bnNpZ25lZCBsb25nKW1hcHBpbmcpLyBcCi0JICAgKHNpemVvZihzdHJ1Y3QgaW5vZGUpICYgfihzaXplb2Yoc3RydWN0IGlub2RlKSAtMSApKSkKLSNkZWZpbmUgcyh4KSAoKHgpICsgKCh4KSA+PiBIQVNIX0JJVFMpKQotCXJldHVybiBoYXNoX3RhYmxlICsgKHMoaSArIGluZGV4KSAmIChIQVNIX1NJWkUgLSAxKSk7Ci0jdW5kZWYgaQotI3VuZGVmIHMKKwlpbnQgcmMgPSAwOworCWludCB4ZmxhZzsKKwlzNjQgeGFkZHI7CisJc2VjdG9yX3QgZmlsZV9ibG9ja3MgPSAoaW5vZGUtPmlfc2l6ZSArIGlub2RlLT5pX2Jsa3NpemUgLSAxKSA+PgorCQkJICAgICAgIGlub2RlLT5pX2Jsa2JpdHM7CisKKwlpZiAobGJsb2NrID49IGZpbGVfYmxvY2tzKQorCQlyZXR1cm4gMDsKKwlpZiAobGJsb2NrICsgKmxlbiA+IGZpbGVfYmxvY2tzKQorCQkqbGVuID0gZmlsZV9ibG9ja3MgLSBsYmxvY2s7CisKKwlpZiAoaW5vZGUtPmlfaW5vKSB7CisJCXJjID0geHRMb29rdXAoaW5vZGUsIChzNjQpbGJsb2NrLCAqbGVuLCAmeGZsYWcsICZ4YWRkciwgbGVuLCAwKTsKKwkJaWYgKChyYyA9PSAwKSAmJiAqbGVuKQorCQkJbGJsb2NrID0gKHNlY3Rvcl90KXhhZGRyOworCQllbHNlCisJCQlsYmxvY2sgPSAwOworCX0gLyogZWxzZSBubyBtYXBwaW5nICovCisKKwlyZXR1cm4gbGJsb2NrOwogfQogCi1zdGF0aWMgc3RydWN0IG1ldGFwYWdlICpzZWFyY2hfaGFzaChzdHJ1Y3QgbWV0YXBhZ2UgKiogaGFzaF9wdHIsCi0JCQkJICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpCitzdGF0aWMgdm9pZCBsYXN0X3JlYWRfY29tcGxldGUoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IG1ldGFwYWdlICpwdHI7CisJaWYgKCFQYWdlRXJyb3IocGFnZSkpCisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwl1bmxvY2tfcGFnZShwYWdlKTsKK30KIAotCWZvciAocHRyID0gKmhhc2hfcHRyOyBwdHI7IHB0ciA9IHB0ci0+aGFzaF9uZXh0KSB7Ci0JCWlmICgocHRyLT5tYXBwaW5nID09IG1hcHBpbmcpICYmIChwdHItPmluZGV4ID09IGluZGV4KSkKLQkJCXJldHVybiBwdHI7CitzdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsCisJCQkJaW50IGVycikKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJpby0+YmlfcHJpdmF0ZTsKKworCWlmIChiaW8tPmJpX3NpemUpCisJCXJldHVybiAxOworCisJaWYgKCF0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1ldGFwYWdlX3JlYWRfZW5kX2lvOiBJL08gZXJyb3JcbiIpOworCQlTZXRQYWdlRXJyb3IocGFnZSk7CiAJfQogCi0JcmV0dXJuIE5VTEw7CisJZGVjX2lvKHBhZ2UsIGxhc3RfcmVhZF9jb21wbGV0ZSk7CisJYmlvX3B1dChiaW8pOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF90b19oYXNoKHN0cnVjdCBtZXRhcGFnZSAqIG1wLCBzdHJ1Y3QgbWV0YXBhZ2UgKiogaGFzaF9wdHIpCitzdGF0aWMgdm9pZCByZW1vdmVfZnJvbV9sb2dzeW5jKHN0cnVjdCBtZXRhcGFnZSAqbXApCiB7Ci0JaWYgKCpoYXNoX3B0cikKLQkJKCpoYXNoX3B0ciktPmhhc2hfcHJldiA9IG1wOworCXN0cnVjdCBqZnNfbG9nICpsb2cgPSBtcC0+bG9nOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisvKgorICogVGhpcyBjYW4gcmFjZS4gIFJlY2hlY2sgdGhhdCBsb2cgaGFzbid0IGJlZW4gc2V0IHRvIG51bGwsIGFuZCBhZnRlcgorICogYWNxdWlyaW5nIGxvZ3N5bmMgbG9jaywgcmVjaGVjayBsc24KKyAqLworCWlmICghbG9nKQorCQlyZXR1cm47CiAKLQltcC0+aGFzaF9wcmV2ID0gTlVMTDsKLQltcC0+aGFzaF9uZXh0ID0gKmhhc2hfcHRyOwotCSpoYXNoX3B0ciA9IG1wOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVfZnJvbV9oYXNoKHN0cnVjdCBtZXRhcGFnZSAqIG1wLCBzdHJ1Y3QgbWV0YXBhZ2UgKiogaGFzaF9wdHIpCi17Ci0JaWYgKG1wLT5oYXNoX3ByZXYpCi0JCW1wLT5oYXNoX3ByZXYtPmhhc2hfbmV4dCA9IG1wLT5oYXNoX25leHQ7Ci0JZWxzZSB7Ci0JCWFzc2VydCgqaGFzaF9wdHIgPT0gbXApOwotCQkqaGFzaF9wdHIgPSBtcC0+aGFzaF9uZXh0OworCUxPR1NZTkNfTE9DSyhsb2csIGZsYWdzKTsKKwlpZiAobXAtPmxzbikgeworCQltcC0+bG9nID0gTlVMTDsKKwkJbXAtPmxzbiA9IDA7CisJCW1wLT5jbHNuID0gMDsKKwkJbG9nLT5jb3VudC0tOworCQlsaXN0X2RlbCgmbXAtPnN5bmNsaXN0KTsKIAl9Ci0KLQlpZiAobXAtPmhhc2hfbmV4dCkKLQkJbXAtPmhhc2hfbmV4dC0+aGFzaF9wcmV2ID0gbXAtPmhhc2hfcHJldjsKKwlMT0dTWU5DX1VOTE9DSyhsb2csIGZsYWdzKTsKIH0KIAorc3RhdGljIHZvaWQgbGFzdF93cml0ZV9jb21wbGV0ZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgbWV0YXBhZ2UgKm1wOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IFBBR0VfQ0FDSEVfU0laRTsgb2Zmc2V0ICs9IFBTSVpFKSB7CisJCW1wID0gcGFnZV90b19tcChwYWdlLCBvZmZzZXQpOworCQlpZiAobXAgJiYgdGVzdF9iaXQoTUVUQV9pbywgJm1wLT5mbGFnKSkgeworCQkJaWYgKG1wLT5sc24pCisJCQkJcmVtb3ZlX2Zyb21fbG9nc3luYyhtcCk7CisJCQljbGVhcl9iaXQoTUVUQV9pbywgJm1wLT5mbGFnKTsKKwkJfQorCQkvKgorCQkgKiBJJ2QgbGlrZSB0byBjYWxsIGRyb3BfbWV0YXBhZ2UgaGVyZSwgYnV0IEkgZG9uJ3QgdGhpbmsgaXQncworCQkgKiBzYWZlIHVubGVzcyBJIGhhdmUgdGhlIHBhZ2UgbG9ja2VkCisJCSAqLworCX0KKwllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7Cit9CisKK3N0YXRpYyBpbnQgbWV0YXBhZ2Vfd3JpdGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsCisJCQkJIGludCBlcnIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBiaW8tPmJpX3ByaXZhdGU7CisKKwlCVUdfT04oIVBhZ2VQcml2YXRlKHBhZ2UpKTsKKworCWlmIChiaW8tPmJpX3NpemUpCisJCXJldHVybiAxOworCisJaWYgKCEgdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZXRhcGFnZV93cml0ZV9lbmRfaW86IEkvTyBlcnJvclxuIik7CisJCVNldFBhZ2VFcnJvcihwYWdlKTsKKwl9CisJZGVjX2lvKHBhZ2UsIGxhc3Rfd3JpdGVfY29tcGxldGUpOworCWJpb19wdXQoYmlvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZXRhcGFnZV93cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCXN0cnVjdCBiaW8gKmJpbyA9IE5VTEw7CisJdW5zaWduZWQgaW50IGJsb2NrX29mZnNldDsJLyogYmxvY2sgb2Zmc2V0IG9mIG1wIHdpdGhpbiBwYWdlICovCisJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJdW5zaWduZWQgaW50IGJsb2Nrc19wZXJfbXAgPSBKRlNfU0JJKGlub2RlLT5pX3NiKS0+bmJwZXJwYWdlOworCXVuc2lnbmVkIGludCBsZW47CisJdW5zaWduZWQgaW50IHhsZW47CisJc3RydWN0IG1ldGFwYWdlICptcDsKKwlpbnQgcmVkaXJ0eSA9IDA7CisJc2VjdG9yX3QgbGJsb2NrOworCXNlY3Rvcl90IHBibG9jazsKKwlzZWN0b3JfdCBuZXh0X2Jsb2NrID0gMDsKKwlzZWN0b3JfdCBwYWdlX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgYmlvX2J5dGVzID0gMDsKKwl1bnNpZ25lZCBsb25nIGJpb19vZmZzZXQgPSAwOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwlwYWdlX3N0YXJ0ID0gKHNlY3Rvcl90KXBhZ2UtPmluZGV4IDw8CisJCSAgICAgKFBBR0VfQ0FDSEVfU0hJRlQgLSBpbm9kZS0+aV9ibGtiaXRzKTsKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCUJVR19PTihQYWdlV3JpdGViYWNrKHBhZ2UpKTsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgUEFHRV9DQUNIRV9TSVpFOyBvZmZzZXQgKz0gUFNJWkUpIHsKKwkJbXAgPSBwYWdlX3RvX21wKHBhZ2UsIG9mZnNldCk7CisKKwkJaWYgKCFtcCB8fCAhdGVzdF9iaXQoTUVUQV9kaXJ0eSwgJm1wLT5mbGFnKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChtcC0+bm9ob21lb2sgJiYgIXRlc3RfYml0KE1FVEFfZm9yY2V3cml0ZSwgJm1wLT5mbGFnKSkgeworCQkJcmVkaXJ0eSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNsZWFyX2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpOworCQlibG9ja19vZmZzZXQgPSBvZmZzZXQgPj4gaW5vZGUtPmlfYmxrYml0czsKKwkJbGJsb2NrID0gcGFnZV9zdGFydCArIGJsb2NrX29mZnNldDsKKwkJaWYgKGJpbykgeworCQkJaWYgKHhsZW4gJiYgbGJsb2NrID09IG5leHRfYmxvY2spIHsKKwkJCQkvKiBDb250aWd1b3VzLCBpbiBtZW1vcnkgJiBvbiBkaXNrICovCisJCQkJbGVuID0gbWluKHhsZW4sIGJsb2Nrc19wZXJfbXApOworCQkJCXhsZW4gLT0gbGVuOworCQkJCWJpb19ieXRlcyArPSBsZW4gPDwgaW5vZGUtPmlfYmxrYml0czsKKwkJCQlzZXRfYml0KE1FVEFfaW8sICZtcC0+ZmxhZyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBOb3QgY29udGlndW91cyAqLworCQkJaWYgKGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIGJpb19ieXRlcywgYmlvX29mZnNldCkgPAorCQkJICAgIGJpb19ieXRlcykKKwkJCQlnb3RvIGFkZF9mYWlsZWQ7CisJCQkvKgorCQkJICogSW5jcmVtZW50IGNvdW50ZXIgYmVmb3JlIHN1Ym1pdHRpbmcgaS9vIHRvIGtlZXAKKwkJCSAqIGNvdW50IGZyb20gaGl0dGluZyB6ZXJvIGJlZm9yZSB3ZSdyZSB0aHJvdWdoCisJCQkgKi8KKwkJCWluY19pbyhwYWdlKTsKKwkJCWlmICghYmlvLT5iaV9zaXplKQorCQkJCWdvdG8gZHVtcF9iaW87CisJCQlzdWJtaXRfYmlvKFdSSVRFLCBiaW8pOworCQkJYmlvID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKwkJCWluY19pbyhwYWdlKTsKKwkJfQorCQl4bGVuID0gKFBBR0VfQ0FDSEVfU0laRSAtIG9mZnNldCkgPj4gaW5vZGUtPmlfYmxrYml0czsKKwkJcGJsb2NrID0gbWV0YXBhZ2VfZ2V0X2Jsb2Nrcyhpbm9kZSwgbGJsb2NrLCAmeGxlbik7CisJCWlmICghcGJsb2NrKSB7CisJCQkvKiBOZWVkIGJldHRlciBlcnJvciBoYW5kbGluZyAqLworCQkJcHJpbnRrKEtFUk5fRVJSICJKRlM6IG1ldGFwYWdlX2dldF9ibG9ja3MgZmFpbGVkXG4iKTsKKwkJCWRlY19pbyhwYWdlLCBsYXN0X3dyaXRlX2NvbXBsZXRlKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNldF9iaXQoTUVUQV9pbywgJm1wLT5mbGFnKTsKKwkJbGVuID0gbWluKHhsZW4sICh1aW50KSBKRlNfU0JJKGlub2RlLT5pX3NiKS0+bmJwZXJwYWdlKTsKKworCQliaW8gPSBiaW9fYWxsb2MoR0ZQX05PRlMsIDEpOworCQliaW8tPmJpX2JkZXYgPSBpbm9kZS0+aV9zYi0+c19iZGV2OworCQliaW8tPmJpX3NlY3RvciA9IHBibG9jayA8PCAoaW5vZGUtPmlfYmxrYml0cyAtIDkpOworCQliaW8tPmJpX2VuZF9pbyA9IG1ldGFwYWdlX3dyaXRlX2VuZF9pbzsKKwkJYmlvLT5iaV9wcml2YXRlID0gcGFnZTsKKworCQkvKiBEb24ndCBjYWxsIGJpb19hZGRfcGFnZSB5ZXQsIHdlIG1heSBhZGQgdG8gdGhpcyB2ZWMgKi8KKwkJYmlvX29mZnNldCA9IG9mZnNldDsKKwkJYmlvX2J5dGVzID0gbGVuIDw8IGlub2RlLT5pX2Jsa2JpdHM7CisKKwkJeGxlbiAtPSBsZW47CisJCW5leHRfYmxvY2sgPSBsYmxvY2sgKyBsZW47CisJfQorCWlmIChiaW8pIHsKKwkJaWYgKGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIGJpb19ieXRlcywgYmlvX29mZnNldCkgPCBiaW9fYnl0ZXMpCisJCQkJZ290byBhZGRfZmFpbGVkOworCQlpZiAoIWJpby0+Ymlfc2l6ZSkKKwkJCWdvdG8gZHVtcF9iaW87CisJCQorCQlzdWJtaXRfYmlvKFdSSVRFLCBiaW8pOworCX0KKwlpZiAocmVkaXJ0eSkKKwkJcmVkaXJ0eV9wYWdlX2Zvcl93cml0ZXBhZ2Uod2JjLCBwYWdlKTsKKworCXVubG9ja19wYWdlKHBhZ2UpOworCisJcmV0dXJuIDA7CithZGRfZmFpbGVkOgorCS8qIFdlIHNob3VsZCBuZXZlciByZWFjaCBoZXJlLCBzaW5jZSB3ZSdyZSBvbmx5IGFkZGluZyBvbmUgdmVjICovCisJcHJpbnRrKEtFUk5fRVJSICJKRlM6IGJpb19hZGRfcGFnZSBmYWlsZWQgdW5leHBlY3RlZGx5XG4iKTsKKwlnb3RvIHNraXA7CitkdW1wX2JpbzoKKwlkdW1wX21lbSgiYmlvIiwgYmlvLCBzaXplb2YoKmJpbykpOworc2tpcDoKKwliaW9fcHV0KGJpbyk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CisJZGVjX2lvKHBhZ2UsIGxhc3Rfd3JpdGVfY29tcGxldGUpOworCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgbWV0YXBhZ2VfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMOworCXVuc2lnbmVkIGludCBibG9ja19vZmZzZXQ7CisJdW5zaWduZWQgaW50IGJsb2Nrc19wZXJfcGFnZSA9IFBBR0VfQ0FDSEVfU0laRSA+PiBpbm9kZS0+aV9ibGtiaXRzOworCXNlY3Rvcl90IHBhZ2Vfc3RhcnQ7CS8qIGFkZHJlc3Mgb2YgcGFnZSBpbiBmcyBibG9ja3MgKi8KKwlzZWN0b3JfdCBwYmxvY2s7CisJdW5zaWduZWQgaW50IHhsZW47CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKwlwYWdlX3N0YXJ0ID0gKHNlY3Rvcl90KXBhZ2UtPmluZGV4IDw8CisJCSAgICAgKFBBR0VfQ0FDSEVfU0hJRlQgLSBpbm9kZS0+aV9ibGtiaXRzKTsKKworCWJsb2NrX29mZnNldCA9IDA7CisJd2hpbGUgKGJsb2NrX29mZnNldCA8IGJsb2Nrc19wZXJfcGFnZSkgeworCQl4bGVuID0gYmxvY2tzX3Blcl9wYWdlIC0gYmxvY2tfb2Zmc2V0OworCQlwYmxvY2sgPSBtZXRhcGFnZV9nZXRfYmxvY2tzKGlub2RlLCBwYWdlX3N0YXJ0ICsgYmxvY2tfb2Zmc2V0LAorCQkJCQkgICAgICZ4bGVuKTsKKwkJaWYgKHBibG9jaykgeworCQkJaWYgKCFQYWdlUHJpdmF0ZShwYWdlKSkKKwkJCQlpbnNlcnRfbWV0YXBhZ2UocGFnZSwgTlVMTCk7CisJCQlpbmNfaW8ocGFnZSk7CisJCQlpZiAoYmlvKQorCQkJCXN1Ym1pdF9iaW8oUkVBRCwgYmlvKTsKKworCQkJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0ZTLCAxKTsKKwkJCWJpby0+YmlfYmRldiA9IGlub2RlLT5pX3NiLT5zX2JkZXY7CisJCQliaW8tPmJpX3NlY3RvciA9IHBibG9jayA8PCAoaW5vZGUtPmlfYmxrYml0cyAtIDkpOworCQkJYmlvLT5iaV9lbmRfaW8gPSBtZXRhcGFnZV9yZWFkX2VuZF9pbzsKKwkJCWJpby0+YmlfcHJpdmF0ZSA9IHBhZ2U7CisJCQlsZW4gPSB4bGVuIDw8IGlub2RlLT5pX2Jsa2JpdHM7CisJCQlvZmZzZXQgPSBibG9ja19vZmZzZXQgPDwgaW5vZGUtPmlfYmxrYml0czsKKwkJCWlmIChiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBsZW4sIG9mZnNldCkgPCBsZW4pCisJCQkJZ290byBhZGRfZmFpbGVkOworCQkJYmxvY2tfb2Zmc2V0ICs9IHhsZW47CisJCX0gZWxzZQorCQkJYmxvY2tfb2Zmc2V0Kys7CisJfQorCWlmIChiaW8pCisJCXN1Ym1pdF9iaW8oUkVBRCwgYmlvKTsKKwllbHNlCisJCXVubG9ja19wYWdlKHBhZ2UpOworCisJcmV0dXJuIDA7CisKK2FkZF9mYWlsZWQ6CisJcHJpbnRrKEtFUk5fRVJSICJKRlM6IGJpb19hZGRfcGFnZSBmYWlsZWQgdW5leHBlY3RlZGx5XG4iKTsKKwliaW9fcHV0KGJpbyk7CisJZGVjX2lvKHBhZ2UsIGxhc3RfcmVhZF9jb21wbGV0ZSk7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgbWV0YXBhZ2VfcmVsZWFzZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBnZnBfbWFzaykKK3sKKwlzdHJ1Y3QgbWV0YXBhZ2UgKm1wOworCWludCBidXN5ID0gMDsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBQQUdFX0NBQ0hFX1NJWkU7IG9mZnNldCArPSBQU0laRSkgeworCQltcCA9IHBhZ2VfdG9fbXAocGFnZSwgb2Zmc2V0KTsKKworCQlpZiAoIW1wKQorCQkJY29udGludWU7CisKKwkJamZzX2luZm8oIm1ldGFwYWdlX3JlbGVhc2VwYWdlOiBtcCA9IDB4JXAiLCBtcCk7CisJCWlmIChtcC0+Y291bnQgfHwgbXAtPm5vaG9tZW9rKSB7CisJCQlqZnNfaW5mbygiY291bnQgPSAlbGQsIG5vaG9tZW9rID0gJWQiLCBtcC0+Y291bnQsCisJCQkJIG1wLT5ub2hvbWVvayk7CisJCQlidXN5ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7CisJCS8vV0FSTl9PTih0ZXN0X2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpKTsKKwkJaWYgKHRlc3RfYml0KE1FVEFfZGlydHksICZtcC0+ZmxhZykpIHsKKwkJCWR1bXBfbWVtKCJkaXJ0eSBtcCBpbiBtZXRhcGFnZV9yZWxlYXNlcGFnZSIsIG1wLAorCQkJCSBzaXplb2Yoc3RydWN0IG1ldGFwYWdlKSk7CisJCQlkdW1wX21lbSgicGFnZSIsIHBhZ2UsIHNpemVvZihzdHJ1Y3QgcGFnZSkpOworCQkJZHVtcF9zdGFjaygpOworCQl9CisJCVdBUk5fT04obXAtPmxzbik7CisJCWlmIChtcC0+bHNuKQorCQkJcmVtb3ZlX2Zyb21fbG9nc3luYyhtcCk7CisJCXJlbW92ZV9tZXRhcGFnZShwYWdlLCBtcCk7CisJCUlOQ1JFTUVOVChtcFN0YXQucGFnZWZyZWUpOworCQlmcmVlX21ldGFwYWdlKG1wKTsKKwl9CisJaWYgKGJ1c3kpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1ldGFwYWdlX2ludmFsaWRhdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlCVUdfT04ob2Zmc2V0KTsKKworCWlmIChQYWdlV3JpdGViYWNrKHBhZ2UpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBtZXRhcGFnZV9yZWxlYXNlcGFnZShwYWdlLCAwKTsKK30KKworc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfbWV0YXBhZ2VfYW9wcyA9IHsKKwkucmVhZHBhZ2UJPSBtZXRhcGFnZV9yZWFkcGFnZSwKKwkud3JpdGVwYWdlCT0gbWV0YXBhZ2Vfd3JpdGVwYWdlLAorCS5zeW5jX3BhZ2UJPSBibG9ja19zeW5jX3BhZ2UsCisJLnJlbGVhc2VwYWdlCT0gbWV0YXBhZ2VfcmVsZWFzZXBhZ2UsCisJLmludmFsaWRhdGVwYWdlCT0gbWV0YXBhZ2VfaW52YWxpZGF0ZXBhZ2UsCisJLnNldF9wYWdlX2RpcnR5CT0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCit9OworCiBzdHJ1Y3QgbWV0YXBhZ2UgKl9fZ2V0X21ldGFwYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgbGJsb2NrLAogCQkJCXVuc2lnbmVkIGludCBzaXplLCBpbnQgYWJzb2x1dGUsCiAJCQkJdW5zaWduZWQgbG9uZyBuZXcpCiB7Ci0Jc3RydWN0IG1ldGFwYWdlICoqaGFzaF9wdHI7CiAJaW50IGwyQmxvY2tzUGVyUGFnZTsKIAlpbnQgbDJic2l6ZTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKLQlzdHJ1Y3QgbWV0YXBhZ2UgKm1wOworCXN0cnVjdCBtZXRhcGFnZSAqbXAgPSBOVUxMOworCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgcGFnZV9pbmRleDsKIAl1bnNpZ25lZCBsb25nIHBhZ2Vfb2Zmc2V0OwogCi0JamZzX2luZm8oIl9fZ2V0X21ldGFwYWdlOiBpbm9kZSA9IDB4JXAsIGxibG9jayA9IDB4JWx4IiwgaW5vZGUsIGxibG9jayk7CisJamZzX2luZm8oIl9fZ2V0X21ldGFwYWdlOiBpbm8gPSAlbGQsIGxibG9jayA9IDB4JWx4LCBhYnM9JWQiLAorCQkgaW5vZGUtPmlfaW5vLCBsYmxvY2ssIGFic29sdXRlKTsKIAorCWwyYnNpemUgPSBpbm9kZS0+aV9ibGtiaXRzOworCWwyQmxvY2tzUGVyUGFnZSA9IFBBR0VfQ0FDSEVfU0hJRlQgLSBsMmJzaXplOworCXBhZ2VfaW5kZXggPSBsYmxvY2sgPj4gbDJCbG9ja3NQZXJQYWdlOworCXBhZ2Vfb2Zmc2V0ID0gKGxibG9jayAtIChwYWdlX2luZGV4IDw8IGwyQmxvY2tzUGVyUGFnZSkpIDw8IGwyYnNpemU7CisJaWYgKChwYWdlX29mZnNldCArIHNpemUpID4gUEFHRV9DQUNIRV9TSVpFKSB7CisJCWpmc19lcnIoIk1ldGFEYXRhIGNyb3NzZXMgcGFnZSBib3VuZGFyeSEhIik7CisJCWpmc19lcnIoImxibG9jayA9ICVseCwgc2l6ZSAgPSAlZCIsIGxibG9jaywgc2l6ZSk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCWlmIChhYnNvbHV0ZSkKLQkJbWFwcGluZyA9IGlub2RlLT5pX3NiLT5zX2JkZXYtPmJkX2lub2RlLT5pX21hcHBpbmc7CisJCW1hcHBpbmcgPSBKRlNfU0JJKGlub2RlLT5pX3NiKS0+ZGlyZWN0X2lub2RlLT5pX21hcHBpbmc7CiAJZWxzZSB7CiAJCS8qCiAJCSAqIElmIGFuIG5mcyBjbGllbnQgdHJpZXMgdG8gcmVhZCBhbiBpbm9kZSB0aGF0IGlzIGxhcmdlcgpAQCAtMjM3LDMxMiArNjMxLDIxMiBAQAogCQltYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKIAl9CiAKLQloYXNoX3B0ciA9IG1ldGFfaGFzaChtYXBwaW5nLCBsYmxvY2spOwotYWdhaW46Ci0Jc3Bpbl9sb2NrKCZtZXRhX2xvY2spOwotCW1wID0gc2VhcmNoX2hhc2goaGFzaF9wdHIsIG1hcHBpbmcsIGxibG9jayk7CisJaWYgKG5ldyAmJiAoUFNJWkUgPT0gUEFHRV9DQUNIRV9TSVpFKSkgeworCQlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKG1hcHBpbmcsIHBhZ2VfaW5kZXgpOworCQlpZiAoIXBhZ2UpIHsKKwkJCWpmc19lcnIoImdyYWJfY2FjaGVfcGFnZSBmYWlsZWQhIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJfSBlbHNlIHsKKwkJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZShtYXBwaW5nLCBwYWdlX2luZGV4LAorCQkJICAgIChmaWxsZXJfdCAqKW1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZSwgTlVMTCk7CisJCWlmIChJU19FUlIocGFnZSkpIHsKKwkJCWpmc19lcnIoInJlYWRfY2FjaGVfcGFnZSBmYWlsZWQhIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlsb2NrX3BhZ2UocGFnZSk7CisJfQorCisJbXAgPSBwYWdlX3RvX21wKHBhZ2UsIHBhZ2Vfb2Zmc2V0KTsKIAlpZiAobXApIHsKLQkgICAgICBwYWdlX2ZvdW5kOgotCQlpZiAodGVzdF9iaXQoTUVUQV9zdGFsZSwgJm1wLT5mbGFnKSkgewotCQkJc3Bpbl91bmxvY2soJm1ldGFfbG9jayk7Ci0JCQltc2xlZXAoMSk7Ci0JCQlnb3RvIGFnYWluOworCQlpZiAobXAtPmxvZ2ljYWxfc2l6ZSAhPSBzaXplKSB7CisJCQlqZnNfZXJyb3IoaW5vZGUtPmlfc2IsCisJCQkJICAiX19nZXRfbWV0YXBhZ2U6IG1wLT5sb2dpY2FsX3NpemUgIT0gc2l6ZSIpOworCQkJamZzX2VycigibG9naWNhbF9zaXplID0gJWQsIHNpemUgPSAlZCIsCisJCQkJbXAtPmxvZ2ljYWxfc2l6ZSwgc2l6ZSk7CisJCQlkdW1wX3N0YWNrKCk7CisJCQlnb3RvIHVubG9jazsgCiAJCX0KIAkJbXAtPmNvdW50Kys7CiAJCWxvY2tfbWV0YXBhZ2UobXApOwotCQlzcGluX3VubG9jaygmbWV0YV9sb2NrKTsKIAkJaWYgKHRlc3RfYml0KE1FVEFfZGlzY2FyZCwgJm1wLT5mbGFnKSkgewogCQkJaWYgKCFuZXcpIHsKIAkJCQlqZnNfZXJyb3IoaW5vZGUtPmlfc2IsCiAJCQkJCSAgIl9fZ2V0X21ldGFwYWdlOiB1c2luZyBhICIKIAkJCQkJICAiZGlzY2FyZGVkIG1ldGFwYWdlIik7Ci0JCQkJcmVsZWFzZV9tZXRhcGFnZShtcCk7Ci0JCQkJcmV0dXJuIE5VTEw7CisJCQkJZGlzY2FyZF9tZXRhcGFnZShtcCk7CisJCQkJZ290byB1bmxvY2s7IAogCQkJfQogCQkJY2xlYXJfYml0KE1FVEFfZGlzY2FyZCwgJm1wLT5mbGFnKTsKIAkJfQotCQlqZnNfaW5mbygiX19nZXRfbWV0YXBhZ2U6IGZvdW5kIDB4JXAsIGluIGhhc2giLCBtcCk7Ci0JCWlmIChtcC0+bG9naWNhbF9zaXplICE9IHNpemUpIHsKLQkJCWpmc19lcnJvcihpbm9kZS0+aV9zYiwKLQkJCQkgICJfX2dldF9tZXRhcGFnZTogbXAtPmxvZ2ljYWxfc2l6ZSAhPSBzaXplIik7Ci0JCQlyZWxlYXNlX21ldGFwYWdlKG1wKTsKLQkJCXJldHVybiBOVUxMOwotCQl9CiAJfSBlbHNlIHsKLQkJbDJic2l6ZSA9IGlub2RlLT5pX2Jsa2JpdHM7Ci0JCWwyQmxvY2tzUGVyUGFnZSA9IFBBR0VfQ0FDSEVfU0hJRlQgLSBsMmJzaXplOwotCQlwYWdlX2luZGV4ID0gbGJsb2NrID4+IGwyQmxvY2tzUGVyUGFnZTsKLQkJcGFnZV9vZmZzZXQgPSAobGJsb2NrIC0gKHBhZ2VfaW5kZXggPDwgbDJCbG9ja3NQZXJQYWdlKSkgPDwKLQkJICAgIGwyYnNpemU7Ci0JCWlmICgocGFnZV9vZmZzZXQgKyBzaXplKSA+IFBBR0VfQ0FDSEVfU0laRSkgewotCQkJc3Bpbl91bmxvY2soJm1ldGFfbG9jayk7Ci0JCQlqZnNfZXJyKCJNZXRhRGF0YSBjcm9zc2VzIHBhZ2UgYm91bmRhcnkhISIpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJCi0JCS8qCi0JCSAqIExvY2tzIGhlbGQgb24gYWdncmVnYXRlIGlub2RlIHBhZ2VzIGFyZSB1c3VhbGx5Ci0JCSAqIG5vdCBoZWxkIGxvbmcsIGFuZCB0aGV5IGFyZSB0YWtlbiBpbiBjcml0aWNhbCBjb2RlCi0JCSAqIHBhdGhzIChjb21taXR0aW5nIGRpcnR5IGlub2RlcywgdHhDb21taXQgdGhyZWFkKSAKLQkJICogCi0JCSAqIEF0dGVtcHQgdG8gZ2V0IG1ldGFwYWdlIHdpdGhvdXQgYmxvY2tpbmcsIHRhcHBpbmcgaW50bwotCQkgKiByZXNlcnZlcyBpZiBuZWNlc3NhcnkuCi0JCSAqLwotCQltcCA9IE5VTEw7Ci0JCWlmIChKRlNfSVAoaW5vZGUpLT5maWxlc2V0ID09IEFHR1JFR0FURV9JKSB7Ci0JCQltcCA9IGFsbG9jX21ldGFwYWdlKEdGUF9BVE9NSUMpOwotCQkJaWYgKCFtcCkgewotCQkJCS8qCi0JCQkJICogbWVtcG9vbCBpcyBzdXBwb3NlZCB0byBwcm90ZWN0IHVzIGZyb20KLQkJCQkgKiBmYWlsaW5nIGhlcmUuICBXZSB3aWxsIHRyeSBhIGJsb2NraW5nCi0JCQkJICogY2FsbCwgYnV0IGEgZGVhZGxvY2sgaXMgcG9zc2libGUgaGVyZQotCQkJCSAqLwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgIl9fZ2V0X21ldGFwYWdlOiBhdG9taWMgY2FsbCB0byBtZW1wb29sX2FsbG9jIGZhaWxlZC5cbiIpOwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgIldpbGwgYXR0ZW1wdCBibG9ja2luZyBjYWxsXG4iKTsKLQkJCX0KLQkJfQotCQlpZiAoIW1wKSB7Ci0JCQlzdHJ1Y3QgbWV0YXBhZ2UgKm1wMjsKLQotCQkJc3Bpbl91bmxvY2soJm1ldGFfbG9jayk7Ci0JCQltcCA9IGFsbG9jX21ldGFwYWdlKEdGUF9OT0ZTKTsKLQkJCXNwaW5fbG9jaygmbWV0YV9sb2NrKTsKLQotCQkJLyogd2UgZHJvcHBlZCB0aGUgbWV0YV9sb2NrLCB3ZSBuZWVkIHRvIHNlYXJjaCB0aGUKLQkJCSAqIGhhc2ggYWdhaW4uCi0JCQkgKi8KLQkJCW1wMiA9IHNlYXJjaF9oYXNoKGhhc2hfcHRyLCBtYXBwaW5nLCBsYmxvY2spOwotCQkJaWYgKG1wMikgewotCQkJCWZyZWVfbWV0YXBhZ2UobXApOwotCQkJCW1wID0gbXAyOwotCQkJCWdvdG8gcGFnZV9mb3VuZDsKLQkJCX0KLQkJfQorCQlJTkNSRU1FTlQobXBTdGF0LnBhZ2VhbGxvYyk7CisJCW1wID0gYWxsb2NfbWV0YXBhZ2UoR0ZQX05PRlMpOworCQltcC0+cGFnZSA9IHBhZ2U7CiAJCW1wLT5mbGFnID0gMDsKLQkJbG9ja19tZXRhcGFnZShtcCk7Ci0JCWlmIChhYnNvbHV0ZSkKLQkJCXNldF9iaXQoTUVUQV9hYnNvbHV0ZSwgJm1wLT5mbGFnKTsKIAkJbXAtPnhmbGFnID0gQ09NTUlUX1BBR0U7CiAJCW1wLT5jb3VudCA9IDE7Ci0JCWF0b21pY19zZXQoJm1wLT5ub2hvbWVvaywwKTsKLQkJbXAtPm1hcHBpbmcgPSBtYXBwaW5nOwotCQltcC0+aW5kZXggPSBsYmxvY2s7Ci0JCW1wLT5wYWdlID0gTlVMTDsKKwkJbXAtPm5vaG9tZW9rID0gMDsKIAkJbXAtPmxvZ2ljYWxfc2l6ZSA9IHNpemU7Ci0JCWFkZF90b19oYXNoKG1wLCBoYXNoX3B0cik7Ci0JCXNwaW5fdW5sb2NrKCZtZXRhX2xvY2spOwotCi0JCWlmIChuZXcpIHsKLQkJCWpmc19pbmZvKCJfX2dldF9tZXRhcGFnZTogQ2FsbGluZyBncmFiX2NhY2hlX3BhZ2UiKTsKLQkJCW1wLT5wYWdlID0gZ3JhYl9jYWNoZV9wYWdlKG1hcHBpbmcsIHBhZ2VfaW5kZXgpOwotCQkJaWYgKCFtcC0+cGFnZSkgewotCQkJCWpmc19lcnIoImdyYWJfY2FjaGVfcGFnZSBmYWlsZWQhIik7Ci0JCQkJZ290byBmcmVlaXQ7Ci0JCQl9IGVsc2UgewotCQkJCUlOQ1JFTUVOVChtcFN0YXQucGFnZWFsbG9jKTsKLQkJCQl1bmxvY2tfcGFnZShtcC0+cGFnZSk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlqZnNfaW5mbygiX19nZXRfbWV0YXBhZ2U6IENhbGxpbmcgcmVhZF9jYWNoZV9wYWdlIik7Ci0JCQltcC0+cGFnZSA9IHJlYWRfY2FjaGVfcGFnZShtYXBwaW5nLCBsYmxvY2ssCi0JCQkJICAgIChmaWxsZXJfdCAqKW1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZSwgTlVMTCk7Ci0JCQlpZiAoSVNfRVJSKG1wLT5wYWdlKSkgewotCQkJCWpmc19lcnIoInJlYWRfY2FjaGVfcGFnZSBmYWlsZWQhIik7Ci0JCQkJZ290byBmcmVlaXQ7Ci0JCQl9IGVsc2UKLQkJCQlJTkNSRU1FTlQobXBTdGF0LnBhZ2VhbGxvYyk7CisJCW1wLT5kYXRhID0gcGFnZV9hZGRyZXNzKHBhZ2UpICsgcGFnZV9vZmZzZXQ7CisJCW1wLT5pbmRleCA9IGxibG9jazsKKwkJaWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShwYWdlLCBtcCkpKSB7CisJCQlmcmVlX21ldGFwYWdlKG1wKTsKKwkJCWdvdG8gdW5sb2NrOwogCQl9Ci0JCW1wLT5kYXRhID0ga21hcChtcC0+cGFnZSkgKyBwYWdlX29mZnNldDsKKwkJbG9ja19tZXRhcGFnZShtcCk7CiAJfQogCi0JaWYgKG5ldykKKwlpZiAobmV3KSB7CisJCWpmc19pbmZvKCJ6ZXJvaW5nIG1wID0gMHglcCIsIG1wKTsKIAkJbWVtc2V0KG1wLT5kYXRhLCAwLCBQU0laRSk7CisJfQogCi0JamZzX2luZm8oIl9fZ2V0X21ldGFwYWdlOiByZXR1cm5pbmcgPSAweCVwIiwgbXApOworCXVubG9ja19wYWdlKHBhZ2UpOworCWpmc19pbmZvKCJfX2dldF9tZXRhcGFnZTogcmV0dXJuaW5nID0gMHglcCBkYXRhID0gMHglcCIsIG1wLCBtcC0+ZGF0YSk7CiAJcmV0dXJuIG1wOwogCi1mcmVlaXQ6Ci0Jc3Bpbl9sb2NrKCZtZXRhX2xvY2spOwotCXJlbW92ZV9mcm9tX2hhc2gobXAsIGhhc2hfcHRyKTsKLQlmcmVlX21ldGFwYWdlKG1wKTsKLQlzcGluX3VubG9jaygmbWV0YV9sb2NrKTsKK3VubG9jazoKKwl1bmxvY2tfcGFnZShwYWdlKTsKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBob2xkX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqIG1wLCBpbnQgZm9yY2UpCit2b2lkIGdyYWJfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICogbXApCiB7Ci0Jc3Bpbl9sb2NrKCZtZXRhX2xvY2spOwotCi0JbXAtPmNvdW50Kys7Ci0KLQlpZiAoZm9yY2UpIHsKLQkJQVNTRVJUICghKHRlc3RfYml0KE1FVEFfZm9yY2VkLCAmbXAtPmZsYWcpKSk7Ci0JCWlmICh0cnlsb2NrX21ldGFwYWdlKG1wKSkKLQkJCXNldF9iaXQoTUVUQV9mb3JjZWQsICZtcC0+ZmxhZyk7Ci0JfSBlbHNlCi0JCWxvY2tfbWV0YXBhZ2UobXApOwotCi0Jc3Bpbl91bmxvY2soJm1ldGFfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fd3JpdGVfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICogbXApCi17Ci0JaW50IGwyYnNpemUgPSBtcC0+bWFwcGluZy0+aG9zdC0+aV9ibGtiaXRzOwotCWludCBsMkJsb2Nrc1BlclBhZ2UgPSBQQUdFX0NBQ0hFX1NISUZUIC0gbDJic2l6ZTsKLQl1bnNpZ25lZCBsb25nIHBhZ2VfaW5kZXg7Ci0JdW5zaWduZWQgbG9uZyBwYWdlX29mZnNldDsKLQlpbnQgcmM7Ci0KLQlqZnNfaW5mbygiX193cml0ZV9tZXRhcGFnZTogbXAgPSAweCVwIiwgbXApOwotCi0JcGFnZV9pbmRleCA9IG1wLT5wYWdlLT5pbmRleDsKLQlwYWdlX29mZnNldCA9Ci0JICAgIChtcC0+aW5kZXggLSAocGFnZV9pbmRleCA8PCBsMkJsb2Nrc1BlclBhZ2UpKSA8PCBsMmJzaXplOwotCisJamZzX2luZm8oImdyYWJfbWV0YXBhZ2U6IG1wID0gMHglcCIsIG1wKTsKKwlwYWdlX2NhY2hlX2dldChtcC0+cGFnZSk7CiAJbG9ja19wYWdlKG1wLT5wYWdlKTsKLQlyYyA9IG1wLT5tYXBwaW5nLT5hX29wcy0+cHJlcGFyZV93cml0ZShOVUxMLCBtcC0+cGFnZSwgcGFnZV9vZmZzZXQsCi0JCQkJCSAgICAgICBwYWdlX29mZnNldCArCi0JCQkJCSAgICAgICBtcC0+bG9naWNhbF9zaXplKTsKLQlpZiAocmMpIHsKLQkJamZzX2VycigicHJlcGFyZV93cml0ZSByZXR1cm4gJWQhIiwgcmMpOwotCQlDbGVhclBhZ2VVcHRvZGF0ZShtcC0+cGFnZSk7Ci0JCXVubG9ja19wYWdlKG1wLT5wYWdlKTsKLQkJY2xlYXJfYml0KE1FVEFfZGlydHksICZtcC0+ZmxhZyk7Ci0JCXJldHVybjsKLQl9Ci0JcmMgPSBtcC0+bWFwcGluZy0+YV9vcHMtPmNvbW1pdF93cml0ZShOVUxMLCBtcC0+cGFnZSwgcGFnZV9vZmZzZXQsCi0JCQkJCSAgICAgIHBhZ2Vfb2Zmc2V0ICsKLQkJCQkJICAgICAgbXAtPmxvZ2ljYWxfc2l6ZSk7Ci0JaWYgKHJjKSB7Ci0JCWpmc19lcnIoImNvbW1pdF93cml0ZSByZXR1cm5lZCAlZCIsIHJjKTsKLQl9Ci0KKwltcC0+Y291bnQrKzsKKwlsb2NrX21ldGFwYWdlKG1wKTsKIAl1bmxvY2tfcGFnZShtcC0+cGFnZSk7Ci0JY2xlYXJfYml0KE1FVEFfZGlydHksICZtcC0+ZmxhZyk7Ci0KLQlqZnNfaW5mbygiX193cml0ZV9tZXRhcGFnZSBkb25lIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqbXApCit2b2lkIGZvcmNlX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqbXApCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBtcC0+cGFnZTsKLQorCWpmc19pbmZvKCJmb3JjZV9tZXRhcGFnZTogbXAgPSAweCVwIiwgbXApOworCXNldF9iaXQoTUVUQV9mb3JjZXdyaXRlLCAmbXAtPmZsYWcpOworCWNsZWFyX2JpdChNRVRBX3N5bmMsICZtcC0+ZmxhZyk7CiAJcGFnZV9jYWNoZV9nZXQocGFnZSk7CiAJbG9ja19wYWdlKHBhZ2UpOwotCi0JLyogd2UncmUgZG9uZSB3aXRoIHRoaXMgcGFnZSAtIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGVycm9ycyAqLwotCWlmIChwYWdlX2hhc19idWZmZXJzKHBhZ2UpKQotCQl3cml0ZV9vbmVfcGFnZShwYWdlLCAxKTsKLQllbHNlCi0JCXVubG9ja19wYWdlKHBhZ2UpOworCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCXdyaXRlX29uZV9wYWdlKHBhZ2UsIDEpOworCWNsZWFyX2JpdChNRVRBX2ZvcmNld3JpdGUsICZtcC0+ZmxhZyk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogfQogCitleHRlcm4gdm9pZCBob2xkX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqbXApCit7CisJbG9ja19wYWdlKG1wLT5wYWdlKTsKK30KKworZXh0ZXJuIHZvaWQgcHV0X21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqbXApCit7CisJaWYgKG1wLT5jb3VudCB8fCBtcC0+bm9ob21lb2spIHsKKwkJLyogU29tZW9uZSBlbHNlIHdpbGwgcmVsZWFzZSB0aGlzICovCisJCXVubG9ja19wYWdlKG1wLT5wYWdlKTsKKwkJcmV0dXJuOworCX0KKwlwYWdlX2NhY2hlX2dldChtcC0+cGFnZSk7CisJbXAtPmNvdW50Kys7CisJbG9ja19tZXRhcGFnZShtcCk7CisJdW5sb2NrX3BhZ2UobXAtPnBhZ2UpOworCXJlbGVhc2VfbWV0YXBhZ2UobXApOworfQorCiB2b2lkIHJlbGVhc2VfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICogbXApCiB7Ci0Jc3RydWN0IGpmc19sb2cgKmxvZzsKLQorCXN0cnVjdCBwYWdlICpwYWdlID0gbXAtPnBhZ2U7CiAJamZzX2luZm8oInJlbGVhc2VfbWV0YXBhZ2U6IG1wID0gMHglcCwgZmxhZyA9IDB4JWx4IiwgbXAsIG1wLT5mbGFnKTsKIAotCXNwaW5fbG9jaygmbWV0YV9sb2NrKTsKLQlpZiAodGVzdF9iaXQoTUVUQV9mb3JjZWQsICZtcC0+ZmxhZykpIHsKLQkJY2xlYXJfYml0KE1FVEFfZm9yY2VkLCAmbXAtPmZsYWcpOwotCQltcC0+Y291bnQtLTsKLQkJc3Bpbl91bmxvY2soJm1ldGFfbG9jayk7Ci0JCXJldHVybjsKLQl9CisJQlVHX09OKCFwYWdlKTsKKworCWxvY2tfcGFnZShwYWdlKTsKKwl1bmxvY2tfbWV0YXBhZ2UobXApOwogCiAJYXNzZXJ0KG1wLT5jb3VudCk7Ci0JaWYgKC0tbXAtPmNvdW50IHx8IGF0b21pY19yZWFkKCZtcC0+bm9ob21lb2spKSB7Ci0JCXVubG9ja19tZXRhcGFnZShtcCk7Ci0JCXNwaW5fdW5sb2NrKCZtZXRhX2xvY2spOworCWlmICgtLW1wLT5jb3VudCB8fCBtcC0+bm9ob21lb2spIHsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChtcC0+cGFnZSkgewotCQlzZXRfYml0KE1FVEFfc3RhbGUsICZtcC0+ZmxhZyk7Ci0JCXNwaW5fdW5sb2NrKCZtZXRhX2xvY2spOwotCQlrdW5tYXAobXAtPnBhZ2UpOwotCQltcC0+ZGF0YSA9IE5VTEw7Ci0JCWlmICh0ZXN0X2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpKQotCQkJX193cml0ZV9tZXRhcGFnZShtcCk7CisJaWYgKHRlc3RfYml0KE1FVEFfZGlydHksICZtcC0+ZmxhZykpIHsKKwkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJCWlmICh0ZXN0X2JpdChNRVRBX3N5bmMsICZtcC0+ZmxhZykpIHsKLQkJCXN5bmNfbWV0YXBhZ2UobXApOwogCQkJY2xlYXJfYml0KE1FVEFfc3luYywgJm1wLT5mbGFnKTsKKwkJCXdyaXRlX29uZV9wYWdlKHBhZ2UsIDEpOworCQkJbG9ja19wYWdlKHBhZ2UpOyAvKiB3cml0ZV9vbmVfcGFnZSB1bmxvY2tzIHRoZSBwYWdlICovCiAJCX0KKwl9IGVsc2UgaWYgKG1wLT5sc24pCS8qIGRpc2NhcmRfbWV0YXBhZ2UgZG9lc24ndCByZW1vdmUgaXQgKi8KKwkJcmVtb3ZlX2Zyb21fbG9nc3luYyhtcCk7CiAKLQkJaWYgKHRlc3RfYml0KE1FVEFfZGlzY2FyZCwgJm1wLT5mbGFnKSkgewotCQkJbG9ja19wYWdlKG1wLT5wYWdlKTsKLQkJCWJsb2NrX2ludmFsaWRhdGVwYWdlKG1wLT5wYWdlLCAwKTsKLQkJCXVubG9ja19wYWdlKG1wLT5wYWdlKTsKKyNpZiBNUFNfUEVSX1BBR0UgPT0gMQorCS8qCisJICogSWYgd2Uga25vdyB0aGlzIGlzIHRoZSBvbmx5IHRoaW5nIGluIHRoZSBwYWdlLCB3ZSBjYW4gdGhyb3cKKwkgKiB0aGUgcGFnZSBvdXQgb2YgdGhlIHBhZ2UgY2FjaGUuICBJZiBwYWdlcyBhcmUgbGFyZ2VyLCB3ZQorCSAqIGRvbid0IHdhbnQgdG8gZG8gdGhpcy4KKwkgKi8KKworCS8qIFJldGVzdCBtcC0+Y291bnQgc2luY2Ugd2UgbWF5IGhhdmUgcmVsZWFzZWQgcGFnZSBsb2NrICovCisJaWYgKHRlc3RfYml0KE1FVEFfZGlzY2FyZCwgJm1wLT5mbGFnKSAmJiAhbXAtPmNvdW50KSB7CisJCWNsZWFyX3BhZ2VfZGlydHkocGFnZSk7CisJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOworI2lmZGVmIF9OT1RfWUVUCisJCWlmIChwYWdlLT5tYXBwaW5nKSB7CisJCS8qIFJlbW92ZSBmcm9tIHBhZ2UgY2FjaGUgYW5kIHBhZ2UgY2FjaGUgcmVmZXJlbmNlICovCisJCQlyZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOworCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkJbWV0YXBhZ2VfcmVsZWFzZXBhZ2UocGFnZSwgMCk7CiAJCX0KLQotCQlwYWdlX2NhY2hlX3JlbGVhc2UobXAtPnBhZ2UpOwotCQltcC0+cGFnZSA9IE5VTEw7Ci0JCUlOQ1JFTUVOVChtcFN0YXQucGFnZWZyZWUpOwotCQlzcGluX2xvY2soJm1ldGFfbG9jayk7CisjZW5kaWYKIAl9Ci0KLQlpZiAobXAtPmxzbikgewotCQkvKgotCQkgKiBSZW1vdmUgbWV0YXBhZ2UgZnJvbSBsb2dzeW5jbGlzdC4KLQkJICovCi0JCWxvZyA9IG1wLT5sb2c7Ci0JCUxPR1NZTkNfTE9DSyhsb2cpOwotCQltcC0+bG9nID0gTlVMTDsKLQkJbXAtPmxzbiA9IDA7Ci0JCW1wLT5jbHNuID0gMDsKLQkJbG9nLT5jb3VudC0tOwotCQlsaXN0X2RlbCgmbXAtPnN5bmNsaXN0KTsKLQkJTE9HU1lOQ19VTkxPQ0sobG9nKTsKLQl9Ci0JcmVtb3ZlX2Zyb21faGFzaChtcCwgbWV0YV9oYXNoKG1wLT5tYXBwaW5nLCBtcC0+aW5kZXgpKTsKLQlzcGluX3VubG9jaygmbWV0YV9sb2NrKTsKLQotCWZyZWVfbWV0YXBhZ2UobXApOworI2Vsc2UKKwkvKiBUcnkgdG8ga2VlcCBtZXRhcGFnZXMgZnJvbSB1c2luZyB1cCB0b28gbXVjaCBtZW1vcnkgKi8KKwlkcm9wX21ldGFwYWdlKHBhZ2UsIG1wKTsKKyNlbmRpZgorCXVubG9ja19wYWdlKHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIH0KIAogdm9pZCBfX2ludmFsaWRhdGVfbWV0YXBhZ2VzKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBhZGRyLCBpbnQgbGVuKQogewotCXN0cnVjdCBtZXRhcGFnZSAqKmhhc2hfcHRyOwotCXVuc2lnbmVkIGxvbmcgbGJsb2NrOworCXNlY3Rvcl90IGxibG9jazsKIAlpbnQgbDJCbG9ja3NQZXJQYWdlID0gUEFHRV9DQUNIRV9TSElGVCAtIGlwLT5pX2Jsa2JpdHM7CisJaW50IEJsb2Nrc1BlclBhZ2UgPSAxIDw8IGwyQmxvY2tzUGVyUGFnZTsKIAkvKiBBbGwgY2FsbGVycyBhcmUgaW50ZXJlc3RlZCBpbiBibG9jayBkZXZpY2UncyBtYXBwaW5nICovCi0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpcC0+aV9zYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0KKwkJSkZTX1NCSShpcC0+aV9zYiktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nOwogCXN0cnVjdCBtZXRhcGFnZSAqbXA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgaW50IG9mZnNldDsKIAogCS8qCi0JICogRmlyc3QsIG1hcmsgbWV0YXBhZ2VzIHRvIGRpc2NhcmQuICBUaGV5IHdpbGwgZXZlbnR1YWxseSBiZQorCSAqIE1hcmsgbWV0YXBhZ2VzIHRvIGRpc2NhcmQuICBUaGV5IHdpbGwgZXZlbnR1YWxseSBiZQogCSAqIHJlbGVhc2VkLCBidXQgc2hvdWxkIG5vdCBiZSB3cml0dGVuLgogCSAqLwotCWZvciAobGJsb2NrID0gYWRkcjsgbGJsb2NrIDwgYWRkciArIGxlbjsKLQkgICAgIGxibG9jayArPSAxIDw8IGwyQmxvY2tzUGVyUGFnZSkgewotCQloYXNoX3B0ciA9IG1ldGFfaGFzaChtYXBwaW5nLCBsYmxvY2spOwotYWdhaW46Ci0JCXNwaW5fbG9jaygmbWV0YV9sb2NrKTsKLQkJbXAgPSBzZWFyY2hfaGFzaChoYXNoX3B0ciwgbWFwcGluZywgbGJsb2NrKTsKLQkJaWYgKG1wKSB7Ci0JCQlpZiAodGVzdF9iaXQoTUVUQV9zdGFsZSwgJm1wLT5mbGFnKSkgewotCQkJCXNwaW5fdW5sb2NrKCZtZXRhX2xvY2spOwotCQkJCW1zbGVlcCgxKTsKLQkJCQlnb3RvIGFnYWluOwotCQkJfQorCWZvciAobGJsb2NrID0gYWRkciAmIH4oQmxvY2tzUGVyUGFnZSAtIDEpOyBsYmxvY2sgPCBhZGRyICsgbGVuOworCSAgICAgbGJsb2NrICs9IEJsb2Nrc1BlclBhZ2UpIHsKKwkJcGFnZSA9IGZpbmRfbG9ja19wYWdlKG1hcHBpbmcsIGxibG9jayA+PiBsMkJsb2Nrc1BlclBhZ2UpOworCQlpZiAoIXBhZ2UpCisJCQljb250aW51ZTsKKwkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBQQUdFX0NBQ0hFX1NJWkU7IG9mZnNldCArPSBQU0laRSkgeworCQkJbXAgPSBwYWdlX3RvX21wKHBhZ2UsIG9mZnNldCk7CisJCQlpZiAoIW1wKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG1wLT5pbmRleCA8IGFkZHIpCisJCQkJY29udGludWU7CisJCQlpZiAobXAtPmluZGV4ID49IGFkZHIgKyBsZW4pCisJCQkJYnJlYWs7CiAKIAkJCWNsZWFyX2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpOwogCQkJc2V0X2JpdChNRVRBX2Rpc2NhcmQsICZtcC0+ZmxhZyk7Ci0JCQlzcGluX3VubG9jaygmbWV0YV9sb2NrKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fdW5sb2NrKCZtZXRhX2xvY2spOwotCQkJcGFnZSA9IGZpbmRfbG9ja19wYWdlKG1hcHBpbmcsIGxibG9jaz4+bDJCbG9ja3NQZXJQYWdlKTsKLQkJCWlmIChwYWdlKSB7Ci0JCQkJYmxvY2tfaW52YWxpZGF0ZXBhZ2UocGFnZSwgMCk7Ci0JCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQkJfQorCQkJaWYgKG1wLT5sc24pCisJCQkJcmVtb3ZlX2Zyb21fbG9nc3luYyhtcCk7CiAJCX0KKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuaCBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuaAppbmRleCAwZTU4YWJhLi45OTFlOWZiIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX21ldGFwYWdlLmgKKysrIGIvZnMvamZzL2pmc19tZXRhcGFnZS5oCkBAIC0zMywzOCArMzMsMjcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWc7CS8qIFNlZSBCZWxvdyAqLwogCXVuc2lnbmVkIGxvbmcgY291bnQ7CS8qIFJlZmVyZW5jZSBjb3VudCAqLwogCXZvaWQgKmRhdGE7CQkvKiBEYXRhIHBvaW50ZXIgKi8KLQotCS8qIGxpc3QgbWFuYWdlbWVudCBzdHVmZiAqLwotCXN0cnVjdCBtZXRhcGFnZSAqaGFzaF9wcmV2OwotCXN0cnVjdCBtZXRhcGFnZSAqaGFzaF9uZXh0OwkvKiBBbHNvIHVzZWQgZm9yIGZyZWUgbGlzdCAqLwotCi0JLyoKLQkgKiBtYXBwaW5nICYgaW5kZXggYmVjb21lIHJlZHVuZGFudCwgYnV0IHdlIG5lZWQgdGhlc2UgaGVyZSB0bwotCSAqIGFkZCB0aGUgbWV0YXBhZ2UgdG8gdGhlIGhhc2ggYmVmb3JlIHdlIGhhdmUgdGhlIHJlYWwgcGFnZQotCSAqLwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwotCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisJc2VjdG9yX3QgaW5kZXg7IAkvKiBibG9jayBhZGRyZXNzIG9mIHBhZ2UgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCiAJLyogaW1wbGVtZW50YXRpb24gKi8KIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nIGxvZ2ljYWxfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgbG9naWNhbF9zaXplOwogCiAJLyogSm91cm5hbCBtYW5hZ2VtZW50ICovCiAJaW50IGNsc247Ci0JYXRvbWljX3Qgbm9ob21lb2s7CisJaW50IG5vaG9tZW9rOwogCXN0cnVjdCBqZnNfbG9nICpsb2c7CiB9OwogCiAvKiBtZXRhcGFnZSBmbGFnICovCiAjZGVmaW5lIE1FVEFfbG9ja2VkCTAKLSNkZWZpbmUgTUVUQV9hYnNvbHV0ZQkxCi0jZGVmaW5lIE1FVEFfZnJlZQkyCi0jZGVmaW5lIE1FVEFfZGlydHkJMwotI2RlZmluZSBNRVRBX3N5bmMJNAotI2RlZmluZSBNRVRBX2Rpc2NhcmQJNQotI2RlZmluZSBNRVRBX2ZvcmNlZAk2Ci0jZGVmaW5lIE1FVEFfc3RhbGUJNworI2RlZmluZSBNRVRBX2ZyZWUJMQorI2RlZmluZSBNRVRBX2RpcnR5CTIKKyNkZWZpbmUgTUVUQV9zeW5jCTMKKyNkZWZpbmUgTUVUQV9kaXNjYXJkCTQKKyNkZWZpbmUgTUVUQV9mb3JjZXdyaXRlCTUKKyNkZWZpbmUgTUVUQV9pbwkJNgogCiAjZGVmaW5lIG1hcmtfbWV0YXBhZ2VfZGlydHkobXApIHNldF9iaXQoTUVUQV9kaXJ0eSwgJihtcCktPmZsYWcpCiAKQEAgLTgwLDcgKzY5LDE2IEBACiAJIF9fZ2V0X21ldGFwYWdlKGlub2RlLCBsYmxvY2ssIHNpemUsIGFic29sdXRlLCBUUlVFKQogCiBleHRlcm4gdm9pZCByZWxlYXNlX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqKTsKLWV4dGVybiB2b2lkIGhvbGRfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICosIGludCk7CitleHRlcm4gdm9pZCBncmFiX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqKTsKK2V4dGVybiB2b2lkIGZvcmNlX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqKTsKKworLyoKKyAqIGhvbGRfbWV0YXBhZ2UgYW5kIHB1dF9tZXRhcGFnZSBhcmUgdXNlZCBpbiBjb25qdWN0aW9uLiAgVGhlIHBhZ2UgbG9jaworICogaXMgbm90IGRyb3BwZWQgYmV0d2VlbiB0aGUgdHdvLCBzbyBubyBvdGhlciB0aHJlYWRzIGNhbiBnZXQgb3IgcmVsZWFzZQorICogdGhlIG1ldGFwYWdlCisgKi8KK2V4dGVybiB2b2lkIGhvbGRfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICopOworZXh0ZXJuIHZvaWQgcHV0X21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqbXApCiB7CkBAIC0xMDEsNiArOTksNDYgQEAKIAlyZWxlYXNlX21ldGFwYWdlKG1wKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG1ldGFwYWdlX25vaG9tZW9rKHN0cnVjdCBtZXRhcGFnZSAqbXApCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBtcC0+cGFnZTsKKwlsb2NrX3BhZ2UocGFnZSk7CisJaWYgKCFtcC0+bm9ob21lb2srKykgeworCQltYXJrX21ldGFwYWdlX2RpcnR5KG1wKTsKKwkJcGFnZV9jYWNoZV9nZXQocGFnZSk7CisJCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7CisJfQorCXVubG9ja19wYWdlKHBhZ2UpOworfQorCisvKgorICogVGhpcyBzZXJpYWxpemVzIGFjY2VzcyB0byBtcC0+bHNuIHdoZW4gbWV0YXBhZ2VzIGFyZSBhZGRlZCB0byBsb2dzeW5jbGlzdAorICogd2l0aG91dCBzZXR0aW5nIG5vaG9tZW9rLiAgaS5lLiB1cGRhdGluZyBpbWFwICYgZG1hcAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbWV0YXBhZ2Vfd2FpdF9mb3JfaW8oc3RydWN0IG1ldGFwYWdlICptcCkKK3sKKwlpZiAodGVzdF9iaXQoTUVUQV9pbywgJm1wLT5mbGFnKSkKKwkJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhtcC0+cGFnZSk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIGFscmVhZHkgaG9sZGluZyB0aGUgbWV0YXBhZ2UKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9tZXRhcGFnZV9ob21lb2soc3RydWN0IG1ldGFwYWdlICptcCkKK3sKKwlpZiAoIS0tbXAtPm5vaG9tZW9rKQorCQlwYWdlX2NhY2hlX3JlbGVhc2UobXAtPnBhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWV0YXBhZ2VfaG9tZW9rKHN0cnVjdCBtZXRhcGFnZSAqbXApCit7CisJaG9sZF9tZXRhcGFnZShtcCk7CisJX21ldGFwYWdlX2hvbWVvayhtcCk7CisJcHV0X21ldGFwYWdlKG1wKTsKK30KKworZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZzX21ldGFwYWdlX2FvcHM7CisKIC8qCiAgKiBUaGlzIHJvdXRpbmVzIGludmFsaWRhdGUgYWxsIHBhZ2VzIGZvciBhbiBleHRlbnQuCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbW91bnQuYyBiL2ZzL2pmcy9qZnNfbW91bnQuYwppbmRleCBjNTM1ZmZkLi4wMzJkMTExIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX21vdW50LmMKKysrIGIvZnMvamZzL2pmc19tb3VudC5jCkBAIC0yODUsMTEgKzI4NSw2IEBACiAJICovCiAJbG9nTU9VTlQoc2IpOwogCi0JLyoKLQkgKiBTZXQgcGFnZSBjYWNoZSBhbGxvY2F0aW9uIHBvbGljeQotCSAqLwotCW1hcHBpbmdfc2V0X2dmcF9tYXNrKHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKLQogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc190eG5tZ3IuYyBiL2ZzL2pmcy9qZnNfdHhubWdyLmMKaW5kZXggZjQwMzAxZC4uZTkzZDAxYSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc190eG5tZ3IuYworKysgYi9mcy9qZnMvamZzX3R4bm1nci5jCkBAIC0yMjcsNiArMjI3LDcgQEAKIAogc3RhdGljIHZvaWQgdHhMb2NrRnJlZShsaWRfdCBsaWQpCiB7CisJVHhMb2NrW2xpZF0udGlkID0gMDsKIAlUeExvY2tbbGlkXS5uZXh0ID0gVHhBbmNob3IuZnJlZWxvY2s7CiAJVHhBbmNob3IuZnJlZWxvY2sgPSBsaWQ7CiAJVHhBbmNob3IudGxvY2tzSW5Vc2UtLTsKQEAgLTU2Niw5ICs1NjcsNiBAQAogCQkgKiBzeW5jaHJvbml6ZSB3aXRoIGxvZ3N5bmMgYmFycmllcgogCQkgKi8KIAkJaWYgKHRlc3RfYml0KGxvZ19TWU5DQkFSUklFUiwgJmxvZy0+ZmxhZykpIHsKLQkJCS8qIGZvcndhcmQgbG9nIHN5bmNwdCAqLwotCQkJLyogbG1TeW5jKGxvZyk7ICovCi0KIAkJCWpmc19pbmZvKCJsb2cgYmFycmllciBvZmY6IDB4JXgiLCBsb2ctPmxzbik7CiAKIAkJCS8qIGVuYWJsZSBuZXcgdHJhbnNhY3Rpb25zIHN0YXJ0ICovCkBAIC01NzYsMTUgKzU3NCwyMiBAQAogCiAJCQkvKiB3YWtldXAgYWxsIHdhaXRvcnMgZm9yIGxvZ3N5bmMgYmFycmllciAqLwogCQkJVFhOX1dBS0VVUCgmbG9nLT5zeW5jd2FpdCk7CisKKwkJCVRYTl9VTkxPQ0soKTsKKworCQkJLyogZm9yd2FyZCBsb2cgc3luY3B0ICovCisJCQlqZnNfc3luY3B0KGxvZyk7CisKKwkJCWdvdG8gd2FrZXVwOwogCQl9CiAJfQogCisJVFhOX1VOTE9DSygpOword2FrZXVwOgogCS8qCiAJICogd2FrZXVwIGFsbCB3YWl0b3JzIGZvciBhIGZyZWUgdGJsb2NrCiAJICovCiAJVFhOX1dBS0VVUCgmVHhBbmNob3IuZnJlZXdhaXQpOwotCi0JVFhOX1VOTE9DSygpOwogfQogCiAKQEAgLTYzMyw4ICs2MzgsMTAgQEAKIAogCS8qIGlzIHBhZ2UgbG9ja2VkIGJ5IHRoZSByZXF1ZXN0ZXIgdHJhbnNhY3Rpb24gPyAqLwogCXRsY2sgPSBsaWRfdG9fdGxvY2sobGlkKTsKLQlpZiAoKHh0aWQgPSB0bGNrLT50aWQpID09IHRpZCkKKwlpZiAoKHh0aWQgPSB0bGNrLT50aWQpID09IHRpZCkgeworCQlUWE5fVU5MT0NLKCk7CiAJCWdvdG8gZ3JhbnRMb2NrOworCX0KIAogCS8qCiAJICogaXMgcGFnZSBsb2NrZWQgYnkgYW5vbnltb3VzIHRyYW5zYWN0aW9uL2xvY2sgPwpAQCAtNjQ5LDYgKzY1Niw3IEBACiAJICovCiAJaWYgKHh0aWQgPT0gMCkgewogCQl0bGNrLT50aWQgPSB0aWQ7CisJCVRYTl9VTkxPQ0soKTsKIAkJdGJsayA9IHRpZF90b190YmxvY2sodGlkKTsKIAkJLyoKIAkJICogVGhlIG9yZGVyIG9mIHRoZSB0bG9ja3MgaW4gdGhlIHRyYW5zYWN0aW9uIGlzIGltcG9ydGFudApAQCAtNzA2LDE3ICs3MTQsMTggQEAKIAkgKi8KIAl0bGNrLT50aWQgPSB0aWQ7CiAKKwlUWE5fVU5MT0NLKCk7CisKIAkvKiBtYXJrIHRsb2NrIGZvciBtZXRhLWRhdGEgcGFnZSAqLwogCWlmIChtcC0+eGZsYWcgJiBDT01NSVRfUEFHRSkgewogCiAJCXRsY2stPmZsYWcgPSB0bGNrUEFHRUxPQ0s7CiAKIAkJLyogbWFyayB0aGUgcGFnZSBkaXJ0eSBhbmQgbm9ob21lb2sgKi8KLQkJbWFya19tZXRhcGFnZV9kaXJ0eShtcCk7Ci0JCWF0b21pY19pbmMoJm1wLT5ub2hvbWVvayk7CisJCW1ldGFwYWdlX25vaG9tZW9rKG1wKTsKIAogCQlqZnNfaW5mbygibG9ja2luZyBtcCA9IDB4JXAsIG5vaG9tZW9rID0gJWQgdGlkID0gJWQgdGxjayA9IDB4JXAiLAotCQkJIG1wLCBhdG9taWNfcmVhZCgmbXAtPm5vaG9tZW9rKSwgdGlkLCB0bGNrKTsKKwkJCSBtcCwgbXAtPm5vaG9tZW9rLCB0aWQsIHRsY2spOwogCiAJCS8qIGlmIGFub255bW91cyB0cmFuc2FjdGlvbiwgYW5kIGJ1ZmZlciBpcyBvbiB0aGUgZ3JvdXAKIAkJICogY29tbWl0IHN5bmNsaXN0LCBtYXJrIGlub2RlIHRvIHNob3cgdGhpcy4gIFRoaXMgd2lsbApAQCAtNzYyLDggKzc3MSwxMCBAQAogCQlpZiAodGxjay0+bmV4dCA9PSAwKSB7CiAJCQkvKiBUaGlzIGlub2RlJ3MgZmlyc3QgYW5vbnltb3VzIHRyYW5zYWN0aW9uICovCiAJCQlqZnNfaXAtPmF0bHRhaWwgPSBsaWQ7CisJCQlUWE5fTE9DSygpOwogCQkJbGlzdF9hZGRfdGFpbCgmamZzX2lwLT5hbm9uX2lub2RlX2xpc3QsCiAJCQkJICAgICAgJlR4QW5jaG9yLmFub25fbGlzdCk7CisJCQlUWE5fVU5MT0NLKCk7CiAJCX0KIAl9CiAKQEAgLTgyMSw4ICs4MzIsNiBAQAogICAgICAgZ3JhbnRMb2NrOgogCXRsY2stPnR5cGUgfD0gdHlwZTsKIAotCVRYTl9VTkxPQ0soKTsKLQogCXJldHVybiB0bGNrOwogCiAJLyoKQEAgLTg0MSwxMSArODUwLDE5IEBACiAJCUJVRygpOwogCX0KIAlJTkNSRU1FTlQoc3RhdHR4LndhaXRsb2NrKTsJLyogc3RhdGlzdGljcyAqLworCVRYTl9VTkxPQ0soKTsKIAlyZWxlYXNlX21ldGFwYWdlKG1wKTsKKwlUWE5fTE9DSygpOworCXh0aWQgPSB0bGNrLT50aWQ7CS8qIHJlYXF1aXJlIGFmdGVyIGRyb3BwaW5nIFRYTl9MT0NLICovCiAKIAlqZnNfaW5mbygidHhMb2NrOiBpbiB3YWl0TG9jaywgdGlkID0gJWQsIHh0aWQgPSAlZCwgbGlkID0gJWQiLAogCQkgdGlkLCB4dGlkLCBsaWQpOwotCVRYTl9TTEVFUF9EUk9QX0xPQ0soJnRpZF90b190YmxvY2soeHRpZCktPndhaXRvcik7CisKKwkvKiBSZWNoZWNrIGV2ZXJ5dGhpbmcgc2luY2UgZHJvcHBpbmcgVFhOX0xPQ0sgKi8KKwlpZiAoeHRpZCAmJiAodGxjay0+bXAgPT0gbXApICYmIChtcC0+bGlkID09IGxpZCkpCisJCVRYTl9TTEVFUF9EUk9QX0xPQ0soJnRpZF90b190YmxvY2soeHRpZCktPndhaXRvcik7CisJZWxzZQorCQlUWE5fVU5MT0NLKCk7CiAJamZzX2luZm8oInR4TG9jazogYXdha2VuZWQgICAgIHRpZCA9ICVkLCBsaWQgPSAlZCIsIHRpZCwgbGlkKTsKIAogCXJldHVybiBOVUxMOwpAQCAtOTA2LDYgKzkyMyw3IEBACiAJc3RydWN0IG1ldGFwYWdlICptcDsKIAlzdHJ1Y3QgamZzX2xvZyAqbG9nOwogCWludCBkaWZmdCwgZGlmZnA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWpmc19pbmZvKCJ0eFVubG9jazogdGJsayA9IDB4JXAiLCB0YmxrKTsKIAlsb2cgPSBKRlNfU0JJKHRibGstPnNiKS0+bG9nOwpAQCAtOTI1LDE5ICs5NDMsMTQgQEAKIAkJCWFzc2VydChtcC0+eGZsYWcgJiBDT01NSVRfUEFHRSk7CiAKIAkJCS8qIGhvbGQgYnVmZmVyCi0JCQkgKgotCQkJICogSXQncyBwb3NzaWJsZSB0aGF0IHNvbWVvbmUgZWxzZSBoYXMgdGhlIG1ldGFwYWdlLgotCQkJICogVGhlIG9ubHkgdGhpbmdzIHdlcmUgY2hhbmdpbmcgYXJlIG5vaG9tZW9rLCB3aGljaAotCQkJICogaXMgaGFuZGxlZCBhdG9taWNhbGx5LCBhbmQgY2xzbiB3aGljaCBpcyBwcm90ZWN0ZWQKLQkJCSAqIGJ5IHRoZSBMT0dTWU5DX0xPQ0suCiAJCQkgKi8KLQkJCWhvbGRfbWV0YXBhZ2UobXAsIDEpOworCQkJaG9sZF9tZXRhcGFnZShtcCk7CiAKLQkJCWFzc2VydChhdG9taWNfcmVhZCgmbXAtPm5vaG9tZW9rKSA+IDApOwotCQkJYXRvbWljX2RlYygmbXAtPm5vaG9tZW9rKTsKKwkJCWFzc2VydChtcC0+bm9ob21lb2sgPiAwKTsKKwkJCV9tZXRhcGFnZV9ob21lb2sobXApOwogCiAJCQkvKiBpbmhlcml0IHlvdW5nZXIvbGFyZ2VyIGNsc24gKi8KLQkJCUxPR1NZTkNfTE9DSyhsb2cpOworCQkJTE9HU1lOQ19MT0NLKGxvZywgZmxhZ3MpOwogCQkJaWYgKG1wLT5jbHNuKSB7CiAJCQkJbG9nZGlmZihkaWZmdCwgdGJsay0+Y2xzbiwgbG9nKTsKIAkJCQlsb2dkaWZmKGRpZmZwLCBtcC0+Y2xzbiwgbG9nKTsKQEAgLTk0NSwxNiArOTU4LDExIEBACiAJCQkJCW1wLT5jbHNuID0gdGJsay0+Y2xzbjsKIAkJCX0gZWxzZQogCQkJCW1wLT5jbHNuID0gdGJsay0+Y2xzbjsKLQkJCUxPR1NZTkNfVU5MT0NLKGxvZyk7CisJCQlMT0dTWU5DX1VOTE9DSyhsb2csIGZsYWdzKTsKIAogCQkJYXNzZXJ0KCEodGxjay0+ZmxhZyAmIHRsY2tGUkVFUEFHRSkpOwogCi0JCQlpZiAodGxjay0+ZmxhZyAmIHRsY2tXUklURVBBR0UpIHsKLQkJCQl3cml0ZV9tZXRhcGFnZShtcCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIHJlbGVhc2UgcGFnZSB3aGljaCBoYXMgYmVlbiBmb3JjZWQgKi8KLQkJCQlyZWxlYXNlX21ldGFwYWdlKG1wKTsKLQkJCX0KKwkJCXB1dF9tZXRhcGFnZShtcCk7CiAJCX0KIAogCQkvKiBpbnNlcnQgdGxvY2ssIGFuZCBsaW5lbG9jayhzKSBvZiB0aGUgdGxvY2sgaWYgYW55LApAQCAtOTgxLDEwICs5ODksMTAgQEAKIAkgKiBoYXMgYmVlbiBpbnNlcnRlZCBpbiBsb2dzeW5jIGxpc3QgYXQgdHhVcGRhdGVNYXAoKSkKIAkgKi8KIAlpZiAodGJsay0+bHNuKSB7Ci0JCUxPR1NZTkNfTE9DSyhsb2cpOworCQlMT0dTWU5DX0xPQ0sobG9nLCBmbGFncyk7CiAJCWxvZy0+Y291bnQtLTsKIAkJbGlzdF9kZWwoJnRibGstPnN5bmNsaXN0KTsKLQkJTE9HU1lOQ19VTkxPQ0sobG9nKTsKKwkJTE9HU1lOQ19VTkxPQ0sobG9nLCBmbGFncyk7CiAJfQogfQogCkBAIC0xNTczLDggKzE1ODEsOCBAQAogCQkgKiB0aGUgbGFzdCBlbnRyeSwgc28gZG9uJ3QgYm90aGVyIGxvZ2dpbmcgdGhpcwogCQkgKi8KIAkJbXAtPmxpZCA9IDA7Ci0JCWhvbGRfbWV0YXBhZ2UobXAsIDApOwotCQlhdG9taWNfZGVjKCZtcC0+bm9ob21lb2spOworCQlncmFiX21ldGFwYWdlKG1wKTsKKwkJbWV0YXBhZ2VfaG9tZW9rKG1wKTsKIAkJZGlzY2FyZF9tZXRhcGFnZShtcCk7CiAJCXRsY2stPm1wID0gTlVMTDsKIAkJcmV0dXJuIDA7CkBAIC0xNzEyLDcgKzE3MjAsNyBAQAogCXN0cnVjdCBtYXBsb2NrICptYXBsb2NrOwogCXN0cnVjdCB4ZGxpc3Rsb2NrICp4YWRsb2NrOwogCXN0cnVjdCBweGRfbG9jayAqcHhkbG9jazsKLQlweGRfdCAqcHhkOworCXB4ZF90ICpwYWdlX3B4ZDsKIAlpbnQgbmV4dCwgbHdtLCBod207CiAKIAlpcCA9IHRsY2stPmlwOwpAQCAtMTcyMiw3ICsxNzMwLDcgQEAKIAlscmQtPmxvZy5yZWRvcGFnZS50eXBlID0gY3B1X3RvX2xlMTYoTE9HX1hUUkVFKTsKIAlscmQtPmxvZy5yZWRvcGFnZS5sMmxpbmVzaXplID0gY3B1X3RvX2xlMTYoTDJYVFNMT1RTSVpFKTsKIAotCXB4ZCA9ICZscmQtPmxvZy5yZWRvcGFnZS5weGQ7CisJcGFnZV9weGQgPSAmbHJkLT5sb2cucmVkb3BhZ2UucHhkOwogCiAJaWYgKHRsY2stPnR5cGUgJiB0bGNrQlRST09UKSB7CiAJCWxyZC0+bG9nLnJlZG9wYWdlLnR5cGUgfD0gY3B1X3RvX2xlMTYoTE9HX0JUUk9PVCk7CkBAIC0xNzUyLDkgKzE3NjAsOSBAQAogCQkgKiBhcHBseWluZyB0aGUgYWZ0ZXItaW1hZ2UgdG8gdGhlIG1ldGEtZGF0YSBwYWdlLgogCQkgKi8KIAkJbHJkLT50eXBlID0gY3B1X3RvX2xlMTYoTE9HX1JFRE9QQUdFKTsKLS8vICAgICAgICAgICAgICAqcHhkID0gbXAtPmNtX3B4ZDsKLQkJUFhEYWRkcmVzcyhweGQsIG1wLT5pbmRleCk7Ci0JCVBYRGxlbmd0aChweGQsCisvLyAgICAgICAgICAgICAgKnBhZ2VfcHhkID0gbXAtPmNtX3B4ZDsKKwkJUFhEYWRkcmVzcyhwYWdlX3B4ZCwgbXAtPmluZGV4KTsKKwkJUFhEbGVuZ3RoKHBhZ2VfcHhkLAogCQkJICBtcC0+bG9naWNhbF9zaXplID4+IHRibGstPnNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKIAkJbHJkLT5iYWNrY2hhaW4gPSBjcHVfdG9fbGUzMihsbUxvZyhsb2csIHRibGssIGxyZCwgdGxjaykpOwogCkBAIC0xNzc2LDI1ICsxNzg0LDMxIEBACiAJCXRsY2stPmZsYWcgfD0gdGxja1VQREFURU1BUDsKIAkJeGFkbG9jay0+ZmxhZyA9IG1sY2tBTExPQ1hBRExJU1Q7CiAJCXhhZGxvY2stPmNvdW50ID0gbmV4dCAtIGx3bTsKLQkJaWYgKCh4YWRsb2NrLT5jb3VudCA8PSAyKSAmJiAodGJsay0+eGZsYWcgJiBDT01NSVRfTEFaWSkpIHsKKwkJaWYgKCh4YWRsb2NrLT5jb3VudCA8PSA0KSAmJiAodGJsay0+eGZsYWcgJiBDT01NSVRfTEFaWSkpIHsKIAkJCWludCBpOworCQkJcHhkX3QgKnB4ZDsKIAkJCS8qCiAJCQkgKiBMYXp5IGNvbW1pdCBtYXkgYWxsb3cgeHRyZWUgdG8gYmUgbW9kaWZpZWQgYmVmb3JlCiAJCQkgKiB0eFVwZGF0ZU1hcCBydW5zLiAgQ29weSB4YWQgaW50byBsaW5lbG9jayB0bwogCQkJICogcHJlc2VydmUgY29ycmVjdCBkYXRhLgorCQkJICoKKwkJCSAqIFdlIGNhbiBmaXQgdHdpY2UgYXMgbWF5IHB4ZCdzIGFzIHhhZHMgaW4gdGhlIGxvY2sKIAkJCSAqLwotCQkJeGFkbG9jay0+eGRsaXN0ID0gJnh0bGNrLT5weGRsb2NrOwotCQkJbWVtY3B5KHhhZGxvY2stPnhkbGlzdCwgJnAtPnhhZFtsd21dLAotCQkJICAgICAgIHNpemVvZih4YWRfdCkgKiB4YWRsb2NrLT5jb3VudCk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCB4YWRsb2NrLT5jb3VudDsgaSsrKQorCQkJeGFkbG9jay0+ZmxhZyA9IG1sY2tBTExPQ1BYRExJU1Q7CisJCQlweGQgPSB4YWRsb2NrLT54ZGxpc3QgPSAmeHRsY2stPnB4ZGxvY2s7CisJCQlmb3IgKGkgPSAwOyBpIDwgeGFkbG9jay0+Y291bnQ7IGkrKykgeworCQkJCVBYRGFkZHJlc3MocHhkLCBhZGRyZXNzWEFEKCZwLT54YWRbbHdtICsgaV0pKTsKKwkJCQlQWERsZW5ndGgocHhkLCBsZW5ndGhYQUQoJnAtPnhhZFtsd20gKyBpXSkpOwogCQkJCXAtPnhhZFtsd20gKyBpXS5mbGFnICY9CiAJCQkJICAgIH4oWEFEX05FVyB8IFhBRF9FWFRFTkRFRCk7CisJCQkJcHhkKys7CisJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogeGRsaXN0IHdpbGwgcG9pbnQgdG8gaW50byBpbm9kZSdzIHh0cmVlLCBlbnN1cmUKIAkJCSAqIHRoYXQgdHJhbnNhY3Rpb24gaXMgbm90IGNvbW1pdHRlZCBsYXppbHkuCiAJCQkgKi8KKwkJCXhhZGxvY2stPmZsYWcgPSBtbGNrQUxMT0NYQURMSVNUOwogCQkJeGFkbG9jay0+eGRsaXN0ID0gJnAtPnhhZFtsd21dOwogCQkJdGJsay0+eGZsYWcgJj0gfkNPTU1JVF9MQVpZOwogCQl9CkBAIC0xODM2LDggKzE4NTAsOCBAQAogCQlpZiAodGJsay0+eGZsYWcgJiBDT01NSVRfVFJVTkNBVEUpIHsKIAkJCS8qIHdyaXRlIE5PUkVET1BBR0UgZm9yIHRoZSBwYWdlICovCiAJCQlscmQtPnR5cGUgPSBjcHVfdG9fbGUxNihMT0dfTk9SRURPUEFHRSk7Ci0JCQlQWERhZGRyZXNzKHB4ZCwgbXAtPmluZGV4KTsKLQkJCVBYRGxlbmd0aChweGQsCisJCQlQWERhZGRyZXNzKHBhZ2VfcHhkLCBtcC0+aW5kZXgpOworCQkJUFhEbGVuZ3RoKHBhZ2VfcHhkLAogCQkJCSAgbXAtPmxvZ2ljYWxfc2l6ZSA+PiB0YmxrLT5zYi0+CiAJCQkJICBzX2Jsb2Nrc2l6ZV9iaXRzKTsKIAkJCWxyZC0+YmFja2NoYWluID0KQEAgLTE4NzIsMjIgKzE4ODYsMzIgQEAKIAkJICogZGVsZXRlZCBwYWdlIGl0c2VsZjsKIAkJICovCiAJCXRsY2stPmZsYWcgfD0gdGxja1VQREFURU1BUDsKLQkJeGFkbG9jay0+ZmxhZyA9IG1sY2tGUkVFWEFETElTVDsKIAkJeGFkbG9jay0+Y291bnQgPSBod20gLSBYVEVOVFJZU1RBUlQgKyAxOwotCQlpZiAoKHhhZGxvY2stPmNvdW50IDw9IDIpICYmICh0YmxrLT54ZmxhZyAmIENPTU1JVF9MQVpZKSkgeworCQlpZiAoKHhhZGxvY2stPmNvdW50IDw9IDQpICYmICh0YmxrLT54ZmxhZyAmIENPTU1JVF9MQVpZKSkgeworCQkJaW50IGk7CisJCQlweGRfdCAqcHhkOwogCQkJLyoKIAkJCSAqIExhenkgY29tbWl0IG1heSBhbGxvdyB4dHJlZSB0byBiZSBtb2RpZmllZCBiZWZvcmUKIAkJCSAqIHR4VXBkYXRlTWFwIHJ1bnMuICBDb3B5IHhhZCBpbnRvIGxpbmVsb2NrIHRvCiAJCQkgKiBwcmVzZXJ2ZSBjb3JyZWN0IGRhdGEuCisJCQkgKgorCQkJICogV2UgY2FuIGZpdCB0d2ljZSBhcyBtYXkgcHhkJ3MgYXMgeGFkcyBpbiB0aGUgbG9jawogCQkJICovCi0JCQl4YWRsb2NrLT54ZGxpc3QgPSAmeHRsY2stPnB4ZGxvY2s7Ci0JCQltZW1jcHkoeGFkbG9jay0+eGRsaXN0LCAmcC0+eGFkW1hURU5UUllTVEFSVF0sCi0JCQkgICAgICAgc2l6ZW9mKHhhZF90KSAqIHhhZGxvY2stPmNvdW50KTsKKwkJCXhhZGxvY2stPmZsYWcgPSBtbGNrRlJFRVBYRExJU1Q7CisJCQlweGQgPSB4YWRsb2NrLT54ZGxpc3QgPSAmeHRsY2stPnB4ZGxvY2s7CisJCQlmb3IgKGkgPSAwOyBpIDwgeGFkbG9jay0+Y291bnQ7IGkrKykgeworCQkJCVBYRGFkZHJlc3MocHhkLAorCQkJCQlhZGRyZXNzWEFEKCZwLT54YWRbWFRFTlRSWVNUQVJUICsgaV0pKTsKKwkJCQlQWERsZW5ndGgocHhkLAorCQkJCQlsZW5ndGhYQUQoJnAtPnhhZFtYVEVOVFJZU1RBUlQgKyBpXSkpOworCQkJCXB4ZCsrOworCQkJfQogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIHhkbGlzdCB3aWxsIHBvaW50IHRvIGludG8gaW5vZGUncyB4dHJlZSwgZW5zdXJlCiAJCQkgKiB0aGF0IHRyYW5zYWN0aW9uIGlzIG5vdCBjb21taXR0ZWQgbGF6aWx5LgogCQkJICovCisJCQl4YWRsb2NrLT5mbGFnID0gbWxja0ZSRUVYQURMSVNUOwogCQkJeGFkbG9jay0+eGRsaXN0ID0gJnAtPnhhZFtYVEVOVFJZU1RBUlRdOwogCQkJdGJsay0+eGZsYWcgJj0gfkNPTU1JVF9MQVpZOwogCQl9CkBAIC0xOTE4LDcgKzE5NDIsNyBAQAogCSAqIGhlYWRlciA/CiAJICovCiAJaWYgKHRsY2stPnR5cGUgJiB0bGNrVFJVTkNBVEUpIHsKLQkJcHhkX3QgdHB4ZDsJLyogdHJ1bmNhdGVkIGV4dGVudCBvZiB4YWQgKi8KKwkJcHhkX3QgcHhkOwkvKiB0cnVuY2F0ZWQgZXh0ZW50IG9mIHhhZCAqLwogCQlpbnQgdHdtOwogCiAJCS8qCkBAIC0xOTQ3LDggKzE5NzEsOSBAQAogCQkgKiBhcHBseWluZyB0aGUgYWZ0ZXItaW1hZ2UgdG8gdGhlIG1ldGEtZGF0YSBwYWdlLgogCQkgKi8KIAkJbHJkLT50eXBlID0gY3B1X3RvX2xlMTYoTE9HX1JFRE9QQUdFKTsKLQkJUFhEYWRkcmVzcyhweGQsIG1wLT5pbmRleCk7Ci0JCVBYRGxlbmd0aChweGQsIG1wLT5sb2dpY2FsX3NpemUgPj4gdGJsay0+c2ItPnNfYmxvY2tzaXplX2JpdHMpOworCQlQWERhZGRyZXNzKHBhZ2VfcHhkLCBtcC0+aW5kZXgpOworCQlQWERsZW5ndGgocGFnZV9weGQsCisJCQkgIG1wLT5sb2dpY2FsX3NpemUgPj4gdGJsay0+c2ItPnNfYmxvY2tzaXplX2JpdHMpOwogCQlscmQtPmJhY2tjaGFpbiA9IGNwdV90b19sZTMyKGxtTG9nKGxvZywgdGJsaywgbHJkLCB0bGNrKSk7CiAKIAkJLyoKQEAgLTE5NjYsNyArMTk5MSw3IEBACiAJCQlscmQtPmxvZy51cGRhdGVtYXAudHlwZSA9IGNwdV90b19sZTE2KExPR19GUkVFUFhEKTsKIAkJCWxyZC0+bG9nLnVwZGF0ZW1hcC5ueGQgPSBjcHVfdG9fbGUxNigxKTsKIAkJCWxyZC0+bG9nLnVwZGF0ZW1hcC5weGQgPSBweGRsb2NrLT5weGQ7Ci0JCQl0cHhkID0gcHhkbG9jay0+cHhkOwkvKiBzYXZlIHRvIGZvcm1hdCBtYXBsb2NrICovCisJCQlweGQgPSBweGRsb2NrLT5weGQ7CS8qIHNhdmUgdG8gZm9ybWF0IG1hcGxvY2sgKi8KIAkJCWxyZC0+YmFja2NoYWluID0KIAkJCSAgICBjcHVfdG9fbGUzMihsbUxvZyhsb2csIHRibGssIGxyZCwgTlVMTCkpOwogCQl9CkBAIC0yMDM1LDcgKzIwNjAsNyBAQAogCQkJcHhkbG9jayA9IChzdHJ1Y3QgcHhkX2xvY2sgKikgeGFkbG9jazsKIAkJCXB4ZGxvY2stPmZsYWcgPSBtbGNrRlJFRVBYRDsKIAkJCXB4ZGxvY2stPmNvdW50ID0gMTsKLQkJCXB4ZGxvY2stPnB4ZCA9IHRweGQ7CisJCQlweGRsb2NrLT5weGQgPSBweGQ7CiAKIAkJCWpmc19pbmZvKCJ4dExvZzogdHJ1bmNhdGUgaXA6MHglcCBtcDoweCVwIGNvdW50OiVkICIKIAkJCQkgImh3bTolZCIsIGlwLCBtcCwgcHhkbG9jay0+Y291bnQsIGh3bSk7CkBAIC0yMjUzLDcgKzIyNzgsOCBAQAogCQkJCXRsY2stPmZsYWcgJj0gfnRsY2tXUklURVBBR0U7CiAKIAkJCQkvKiBkbyBub3QgcmVsZWFzZSBwYWdlIHRvIGZyZWVsaXN0ICovCi0KKwkJCQlmb3JjZV9tZXRhcGFnZShtcCk7CisjaWYgMAogCQkJCS8qCiAJCQkJICogVGhlICJyaWdodCIgdGhpbmcgdG8gZG8gaGVyZSBpcyB0bwogCQkJCSAqIHN5bmNocm9ub3VzbHkgd3JpdGUgdGhlIG1ldGFkYXRhLgpAQCAtMjI2NSw5ICsyMjkxLDEwIEBACiAJCQkJICogd2UgY2FuIGdldCBieSB3aXRoIHN5bmNocm9ub3VzbHkgd3JpdGluZwogCQkJCSAqIHRoZSBwYWdlcyB3aGVuIHRoZXkgYXJlIHJlbGVhc2VkLgogCQkJCSAqLwotCQkJCWFzc2VydChhdG9taWNfcmVhZCgmbXAtPm5vaG9tZW9rKSk7CisJCQkJYXNzZXJ0KG1wLT5ub2hvbWVvayk7CiAJCQkJc2V0X2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpOwogCQkJCXNldF9iaXQoTUVUQV9zeW5jLCAmbXAtPmZsYWcpOworI2VuZGlmCiAJCQl9CiAJCX0KIAl9CkBAIC0yMzI3LDcgKzIzNTQsNyBAQAogCQkJICovCiAJCQltcCA9IHRsY2stPm1wOwogCQkJQVNTRVJUKG1wLT54ZmxhZyAmIENPTU1JVF9QQUdFKTsKLQkJCWhvbGRfbWV0YXBhZ2UobXAsIDApOworCQkJZ3JhYl9tZXRhcGFnZShtcCk7CiAJCX0KIAogCQkvKgpAQCAtMjM3Nyw4ICsyNDA0LDggQEAKIAkJCQlBU1NFUlQobXAtPmxpZCA9PSBsaWQpOwogCQkJCXRsY2stPm1wLT5saWQgPSAwOwogCQkJfQotCQkJYXNzZXJ0KGF0b21pY19yZWFkKCZtcC0+bm9ob21lb2spID09IDEpOwotCQkJYXRvbWljX2RlYygmbXAtPm5vaG9tZW9rKTsKKwkJCWFzc2VydChtcC0+bm9ob21lb2sgPT0gMSk7CisJCQltZXRhcGFnZV9ob21lb2sobXApOwogCQkJZGlzY2FyZF9tZXRhcGFnZShtcCk7CiAJCQl0bGNrLT5tcCA9IE5VTEw7CiAJCX0KQEAgLTI4NDQsMjQgKzI4NzEsOSBAQAogewogCXN0cnVjdCBqZnNfbG9nICpsb2cgPSBtcC0+bG9nOwogCi0JYXNzZXJ0KGF0b21pY19yZWFkKCZtcC0+bm9ob21lb2spKTsKKwlhc3NlcnQobXAtPm5vaG9tZW9rKTsKIAlhc3NlcnQobG9nKTsKLQlhdG9taWNfZGVjKCZtcC0+bm9ob21lb2spOwotCi0JaWYgKGF0b21pY19yZWFkKCZtcC0+bm9ob21lb2spKQotCQlyZXR1cm47Ci0KLQlob2xkX21ldGFwYWdlKG1wLCAwKTsKLQotCUxPR1NZTkNfTE9DSyhsb2cpOwotCW1wLT5sb2cgPSBOVUxMOwotCW1wLT5sc24gPSAwOwotCW1wLT5jbHNuID0gMDsKLQlsb2ctPmNvdW50LS07Ci0JbGlzdF9kZWxfaW5pdCgmbXAtPnN5bmNsaXN0KTsKLQlMT0dTWU5DX1VOTE9DSyhsb2cpOwotCi0JcmVsZWFzZV9tZXRhcGFnZShtcCk7CisJbWV0YXBhZ2VfaG9tZW9rKG1wKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfdW1vdW50LmMgYi9mcy9qZnMvamZzX3Vtb3VudC5jCmluZGV4IGYzMWE5ZTMuLjVjZjkxNzggMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfdW1vdW50LmMKKysrIGIvZnMvamZzL2pmc191bW91bnQuYwpAQCAtNDksNyArNDksNiBAQAogICovCiBpbnQgamZzX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICpiZGV2X21hcHBpbmcgPSBzYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nOwogCXN0cnVjdCBqZnNfc2JfaW5mbyAqc2JpID0gSkZTX1NCSShzYik7CiAJc3RydWN0IGlub2RlICppcGJtYXAgPSBzYmktPmlwYm1hcDsKIAlzdHJ1Y3QgaW5vZGUgKmlwaW1hcCA9IHNiaS0+aXBpbWFwOwpAQCAtMTA5LDggKzEwOCw4IEBACiAJICogTWFrZSBzdXJlIGFsbCBtZXRhZGF0YSBtYWtlcyBpdCB0byBkaXNrIGJlZm9yZSB3ZSBtYXJrCiAJICogdGhlIHN1cGVyYmxvY2sgYXMgY2xlYW4KIAkgKi8KLQlmaWxlbWFwX2ZkYXRhd3JpdGUoYmRldl9tYXBwaW5nKTsKLQlmaWxlbWFwX2ZkYXRhd2FpdChiZGV2X21hcHBpbmcpOworCWZpbGVtYXBfZmRhdGF3cml0ZShzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nKTsKKwlmaWxlbWFwX2ZkYXRhd2FpdChzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nKTsKIAogCS8qCiAJICogZW5zdXJlIGFsbCBmaWxlIHN5c3RlbSBmaWxlIHBhZ2VzIGFyZSBwcm9wYWdhdGVkIHRvIHRoZWlyCkBAIC0xMjMsOSArMTIyLDYgQEAKIAlpZiAobG9nKSB7CQkvKiBsb2cgPSBOVUxMIGlmIHJlYWQtb25seSBtb3VudCAqLwogCQl1cGRhdGVTdXBlcihzYiwgRk1fQ0xFQU4pOwogCi0JCS8qIFJlc3RvcmUgZGVmYXVsdCBnZnBfbWFzayBmb3IgYmRldiAqLwotCQltYXBwaW5nX3NldF9nZnBfbWFzayhiZGV2X21hcHBpbmcsIEdGUF9VU0VSKTsKLQogCQkvKgogCQkgKiBjbG9zZSBsb2c6IAogCQkgKgpAQCAtMTQwLDcgKzEzNiw2IEBACiAKIGludCBqZnNfdW1vdW50X3J3KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmJkZXZfbWFwcGluZyA9IHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX21hcHBpbmc7CiAJc3RydWN0IGpmc19zYl9pbmZvICpzYmkgPSBKRlNfU0JJKHNiKTsKIAlzdHJ1Y3QgamZzX2xvZyAqbG9nID0gc2JpLT5sb2c7CiAKQEAgLTE2NiwxMyArMTYxLDEwIEBACiAJICogbWFyayB0aGUgc3VwZXJibG9jayBjbGVhbiBiZWZvcmUgZXZlcnl0aGluZyBpcyBmbHVzaGVkIHRvCiAJICogZGlzay4KIAkgKi8KLQlmaWxlbWFwX2ZkYXRhd3JpdGUoYmRldl9tYXBwaW5nKTsKLQlmaWxlbWFwX2ZkYXRhd2FpdChiZGV2X21hcHBpbmcpOworCWZpbGVtYXBfZmRhdGF3cml0ZShzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nKTsKKwlmaWxlbWFwX2ZkYXRhd2FpdChzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nKTsKIAogCXVwZGF0ZVN1cGVyKHNiLCBGTV9DTEVBTik7CiAKLQkvKiBSZXN0b3JlIGRlZmF1bHQgZ2ZwX21hc2sgZm9yIGJkZXYgKi8KLQltYXBwaW5nX3NldF9nZnBfbWFzayhiZGV2X21hcHBpbmcsIEdGUF9VU0VSKTsKLQogCXJldHVybiBsbUxvZ0Nsb3NlKHNiKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfeHRyZWUuYyBiL2ZzL2pmcy9qZnNfeHRyZWUuYwppbmRleCAxMWM1OGM1Li4zMWIzNGRiIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX3h0cmVlLmMKKysrIGIvZnMvamZzL2pmc194dHJlZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnAuLCAyMDAwLTIwMDQKKyAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnAuLCAyMDAwLTIwMDUKICAqCiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTExLDggKzExMSw4IEBACiAvKgogICogZm9yd2FyZCByZWZlcmVuY2VzCiAgKi8KLXN0YXRpYyBpbnQgeHRTZWFyY2goc3RydWN0IGlub2RlICppcCwKLQkJICAgIHM2NCB4b2ZmLCBpbnQgKmNtcHAsIHN0cnVjdCBidHN0YWNrICogYnRzdGFjaywgaW50IGZsYWcpOworc3RhdGljIGludCB4dFNlYXJjaChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgeG9mZiwgczY0ICpuZXh0LCBpbnQgKmNtcHAsCisJCSAgICBzdHJ1Y3QgYnRzdGFjayAqIGJ0c3RhY2ssIGludCBmbGFnKTsKIAogc3RhdGljIGludCB4dFNwbGl0VXAodGlkX3QgdGlkLAogCQkgICAgIHN0cnVjdCBpbm9kZSAqaXAsCkBAIC0xNTksMTEgKzE1OSwxMiBAQAogCXh0cGFnZV90ICpwOwogCWludCBpbmRleDsKIAl4YWRfdCAqeGFkOwotCXM2NCBzaXplLCB4b2ZmLCB4ZW5kOworCXM2NCBuZXh0LCBzaXplLCB4b2ZmLCB4ZW5kOwogCWludCB4bGVuOwogCXM2NCB4YWRkcjsKIAotCSpwbGVuID0gMDsKKwkqcGFkZHIgPSAwOworCSpwbGVuID0gbGxlbjsKIAogCWlmICghbm9fY2hlY2spIHsKIAkJLyogaXMgbG9va3VwIG9mZnNldCBiZXlvbmQgZW9mID8gKi8KQEAgLTE4MCw3ICsxODEsNyBAQAogCSAqIHNlYXJjaCBmb3IgdGhlIHhhZCBlbnRyeSBjb3ZlcmluZyB0aGUgbG9naWNhbCBleHRlbnQKIAkgKi8KIC8vc2VhcmNoOgotCWlmICgocmMgPSB4dFNlYXJjaChpcCwgbHN0YXJ0LCAmY21wLCAmYnRzdGFjaywgMCkpKSB7CisJaWYgKChyYyA9IHh0U2VhcmNoKGlwLCBsc3RhcnQsICZuZXh0LCAmY21wLCAmYnRzdGFjaywgMCkpKSB7CiAJCWpmc19lcnIoInh0TG9va3VwOiB4dFNlYXJjaCByZXR1cm5lZCAlZCIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTE5OCw4ICsxOTksMTEgQEAKIAkgKiBsc3RhcnQgaXMgYSBwYWdlIHN0YXJ0IGFkZHJlc3MsCiAJICogaS5lLiwgbHN0YXJ0IGNhbm5vdCBzdGFydCBpbiBhIGhvbGU7CiAJICovCi0JaWYgKGNtcCkKKwlpZiAoY21wKSB7CisJCWlmIChuZXh0KQorCQkJKnBsZW4gPSBtaW4obmV4dCAtIGxzdGFydCwgbGxlbik7CiAJCWdvdG8gb3V0OworCX0KIAogCS8qCiAJICogbHhkIGNvdmVyZWQgYnkgeGFkCkBAIC0yODQsNyArMjg4LDcgQEAKIAlpZiAobHN0YXJ0ID49IHNpemUpCiAJCXJldHVybiAwOwogCi0JaWYgKChyYyA9IHh0U2VhcmNoKGlwLCBsc3RhcnQsICZjbXAsICZidHN0YWNrLCAwKSkpCisJaWYgKChyYyA9IHh0U2VhcmNoKGlwLCBsc3RhcnQsIE5VTEwsICZjbXAsICZidHN0YWNrLCAwKSkpCiAJCXJldHVybiByYzsKIAogCS8qCkBAIC00ODgsNiArNDkyLDcgQEAKICAqIHBhcmFtZXRlcnM6CiAgKiAgICAgIGlwICAgICAgLSBmaWxlIG9iamVjdDsKICAqICAgICAgeG9mZiAgICAtIGV4dGVudCBvZmZzZXQ7CisgKiAgICAgIG5leHRwCS0gYWRkcmVzcyBvZiBuZXh0IGV4dGVudCAoaWYgYW55KSBmb3Igc2VhcmNoIG1pc3MKICAqICAgICAgY21wcCAgICAtIGNvbXBhcmlzb24gcmVzdWx0OgogICogICAgICBidHN0YWNrIC0gdHJhdmVyc2Ugc3RhY2s7CiAgKiAgICAgIGZsYWcgICAgLSBzZWFyY2ggcHJvY2VzcyBmbGFnIChYVF9JTlNFUlQpOwpAQCAtNDk3LDcgKzUwMiw3IEBACiAgKiAgICAgICpjbXBwIGlzIHNldCB0byByZXN1bHQgb2YgY29tcGFyaXNvbiB3aXRoIHRoZSBlbnRyeSByZXR1cm5lZC4KICAqICAgICAgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgZW50cnkgaXMgcGlubmVkIGF0IGV4aXQuCiAgKi8KLXN0YXRpYyBpbnQgeHRTZWFyY2goc3RydWN0IGlub2RlICppcCwgczY0IHhvZmYsCS8qIG9mZnNldCBvZiBleHRlbnQgKi8KK3N0YXRpYyBpbnQgeHRTZWFyY2goc3RydWN0IGlub2RlICppcCwgczY0IHhvZmYsCXM2NCAqbmV4dHAsCiAJCSAgICBpbnQgKmNtcHAsIHN0cnVjdCBidHN0YWNrICogYnRzdGFjaywgaW50IGZsYWcpCiB7CiAJc3RydWN0IGpmc19pbm9kZV9pbmZvICpqZnNfaXAgPSBKRlNfSVAoaXApOwpAQCAtNTExLDYgKzUxNiw3IEBACiAJc3RydWN0IGJ0ZnJhbWUgKmJ0c3A7CiAJaW50IG5zcGxpdCA9IDA7CQkvKiBudW1iZXIgb2YgcGFnZXMgdG8gc3BsaXQgKi8KIAlzNjQgdDY0OworCXM2NCBuZXh0ID0gMDsKIAogCUlOQ1JFTUVOVCh4dFN0YXQuc2VhcmNoKTsKIApAQCAtNTc5LDYgKzU4NSw3IEBACiAJCQkJCQkgKiBwcmV2aW91cyBhbmQgdGhpcyBlbnRyeQogCQkJCQkJICovCiAJCQkJCQkqY21wcCA9IDE7CisJCQkJCQluZXh0ID0gdDY0OwogCQkJCQkJZ290byBvdXQ7CiAJCQkJCX0KIApAQCAtNjIzLDYgKzYzMCw5IEBACiAJCQkvKiB1cGRhdGUgc2VxdWVudGlhbCBhY2Nlc3MgaGV1cmlzdGljcyAqLwogCQkJamZzX2lwLT5idGluZGV4ID0gaW5kZXg7CiAKKwkJCWlmIChuZXh0cCkKKwkJCQkqbmV4dHAgPSBuZXh0OworCiAJCQlJTkNSRU1FTlQoeHRTdGF0LmZhc3RTZWFyY2gpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTY3NSwxMCArNjg1LDExIEBACiAKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQotCiAJCQkJLyogc2VhcmNoIGhpdCAtIGludGVybmFsIHBhZ2U6CiAJCQkJICogZGVzY2VuZC9zZWFyY2ggaXRzIGNoaWxkIHBhZ2UKIAkJCQkgKi8KKwkJCQlpZiAoaW5kZXggPCBsZTE2X3RvX2NwdShwLT5oZWFkZXIubmV4dGluZGV4KS0xKQorCQkJCQluZXh0ID0gb2Zmc2V0WEFEKCZwLT54YWRbaW5kZXggKyAxXSk7CiAJCQkJZ290byBuZXh0OwogCQkJfQogCkBAIC02OTQsNiArNzA1LDggQEAKIAkJICogYmFzZSBpcyB0aGUgc21hbGxlc3QgaW5kZXggd2l0aCBrZXkgKEtqKSBncmVhdGVyIHRoYW4KIAkJICogc2VhcmNoIGtleSAoSykgYW5kIG1heSBiZSB6ZXJvIG9yIG1heGVudHJ5IGluZGV4LgogCQkgKi8KKwkJaWYgKGJhc2UgPCBsZTE2X3RvX2NwdShwLT5oZWFkZXIubmV4dGluZGV4KSkKKwkJCW5leHQgPSBvZmZzZXRYQUQoJnAtPnhhZFtiYXNlXSk7CiAJCS8qCiAJCSAqIHNlYXJjaCBtaXNzIC0gbGVhZiBwYWdlOgogCQkgKgpAQCAtNzI3LDYgKzc0MCw5IEBACiAJCQkJamZzX2lwLT5idG9yZGVyID0gQlRfUkFORE9NOwogCQkJamZzX2lwLT5idGluZGV4ID0gYmFzZTsKIAorCQkJaWYgKG5leHRwKQorCQkJCSpuZXh0cCA9IG5leHQ7CisKIAkJCXJldHVybiAwOwogCQl9CiAKQEAgLTc5Myw2ICs4MDksNyBAQAogCXN0cnVjdCB4dHNwbGl0IHNwbGl0OwkvKiBzcGxpdCBpbmZvcm1hdGlvbiAqLwogCXhhZF90ICp4YWQ7CiAJaW50IGNtcDsKKwlzNjQgbmV4dDsKIAlzdHJ1Y3QgdGxvY2sgKnRsY2s7CiAJc3RydWN0IHh0bG9jayAqeHRsY2s7CiAKQEAgLTgwNiw3ICs4MjMsNyBAQAogCSAqIG4uYi4geHRTZWFyY2goKSBtYXkgcmV0dXJuIGluZGV4IG9mIG1heGVudHJ5IG9mCiAJICogdGhlIGZ1bGwgcGFnZS4KIAkgKi8KLQlpZiAoKHJjID0geHRTZWFyY2goaXAsIHhvZmYsICZjbXAsICZidHN0YWNrLCBYVF9JTlNFUlQpKSkKKwlpZiAoKHJjID0geHRTZWFyY2goaXAsIHhvZmYsICZuZXh0LCAmY21wLCAmYnRzdGFjaywgWFRfSU5TRVJUKSkpCiAJCXJldHVybiByYzsKIAogCS8qIHJldHJpZXZlIHNlYXJjaCByZXN1bHQgKi8KQEAgLTgxNCw3ICs4MzEsNyBAQAogCiAJLyogVGhpcyB0ZXN0IG11c3QgZm9sbG93IFhUX0dFVFNFQVJDSCBzaW5jZSBtcCBtdXN0IGJlIHZhbGlkIGlmCiAJICogd2UgYnJhbmNoIHRvIG91dDogKi8KLQlpZiAoY21wID09IDApIHsKKwlpZiAoKGNtcCA9PSAwKSB8fCAobmV4dCAmJiAoeGxlbiA+IG5leHQgLSB4b2ZmKSkpIHsKIAkJcmMgPSAtRUVYSVNUOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNjI2LDcgKzE2NDMsNyBAQAogCWpmc19pbmZvKCJ4dEV4dGVuZDogbnhvZmY6MHglbHggbnhsZW46MHgleCIsICh1bG9uZykgeG9mZiwgeGxlbik7CiAKIAkvKiB0aGVyZSBtdXN0IGV4aXN0IGV4dGVudCB0byBiZSBleHRlbmRlZCAqLwotCWlmICgocmMgPSB4dFNlYXJjaChpcCwgeG9mZiAtIDEsICZjbXAsICZidHN0YWNrLCBYVF9JTlNFUlQpKSkKKwlpZiAoKHJjID0geHRTZWFyY2goaXAsIHhvZmYgLSAxLCBOVUxMLCAmY21wLCAmYnRzdGFjaywgWFRfSU5TRVJUKSkpCiAJCXJldHVybiByYzsKIAogCS8qIHJldHJpZXZlIHNlYXJjaCByZXN1bHQgKi8KQEAgLTE3OTQsNyArMTgxMSw3IEBACiAqLwogCiAJLyogdGhlcmUgbXVzdCBleGlzdCBleHRlbnQgdG8gYmUgdGFpbGdhdGVkICovCi0JaWYgKChyYyA9IHh0U2VhcmNoKGlwLCB4b2ZmLCAmY21wLCAmYnRzdGFjaywgWFRfSU5TRVJUKSkpCisJaWYgKChyYyA9IHh0U2VhcmNoKGlwLCB4b2ZmLCBOVUxMLCAmY21wLCAmYnRzdGFjaywgWFRfSU5TRVJUKSkpCiAJCXJldHVybiByYzsKIAogCS8qIHJldHJpZXZlIHNlYXJjaCByZXN1bHQgKi8KQEAgLTE5NzcsNyArMTk5NCw3IEBACiAJbnhsZW4gPSBsZW5ndGhYQUQobnhhZCk7CiAJbnhhZGRyID0gYWRkcmVzc1hBRChueGFkKTsKIAotCWlmICgocmMgPSB4dFNlYXJjaChpcCwgbnhvZmYsICZjbXAsICZidHN0YWNrLCBYVF9JTlNFUlQpKSkKKwlpZiAoKHJjID0geHRTZWFyY2goaXAsIG54b2ZmLCBOVUxMLCAmY21wLCAmYnRzdGFjaywgWFRfSU5TRVJUKSkpCiAJCXJldHVybiByYzsKIAogCS8qIHJldHJpZXZlIHNlYXJjaCByZXN1bHQgKi8KQEAgLTIyOTEsNyArMjMwOCw3IEBACiAJaWYgKG5leHRpbmRleCA9PSBsZTE2X3RvX2NwdShwLT5oZWFkZXIubWF4ZW50cnkpKSB7CiAJCVhUX1BVVFBBR0UobXApOwogCi0JCWlmICgocmMgPSB4dFNlYXJjaChpcCwgbnhvZmYsICZjbXAsICZidHN0YWNrLCBYVF9JTlNFUlQpKSkKKwkJaWYgKChyYyA9IHh0U2VhcmNoKGlwLCBueG9mZiwgTlVMTCwgJmNtcCwgJmJ0c3RhY2ssIFhUX0lOU0VSVCkpKQogCQkJcmV0dXJuIHJjOwogCiAJCS8qIHJldHJpZXZlIHNlYXJjaCByZXN1bHQgKi8KQEAgLTI0MzgsNiArMjQ1NSw3IEBACiAJaW50IG5zcGxpdCwgbmJsb2NrcywgeGxlbjsKIAlzdHJ1Y3QgcHhkbGlzdCBweGRsaXN0OwogCXB4ZF90ICpweGQ7CisJczY0IG5leHQ7CiAKIAl4YWRkciA9ICp4YWRkcnA7CiAJeGxlbiA9ICp4bGVucDsKQEAgLTI0NTIsNyArMjQ3MCw3IEBACiAJICogbi5iLiB4dFNlYXJjaCgpIG1heSByZXR1cm4gaW5kZXggb2YgbWF4ZW50cnkgb2YKIAkgKiB0aGUgZnVsbCBwYWdlLgogCSAqLwotCWlmICgocmMgPSB4dFNlYXJjaChpcCwgeG9mZiwgJmNtcCwgJmJ0c3RhY2ssIFhUX0lOU0VSVCkpKQorCWlmICgocmMgPSB4dFNlYXJjaChpcCwgeG9mZiwgJm5leHQsICZjbXAsICZidHN0YWNrLCBYVF9JTlNFUlQpKSkKIAkJcmV0dXJuIHJjOwogCiAJLyogcmV0cmlldmUgc2VhcmNoIHJlc3VsdCAqLwpAQCAtMjQ2Miw2ICsyNDgwLDkgQEAKIAkJcmMgPSAtRUVYSVNUOwogCQlnb3RvIG91dDsKIAl9CisKKwlpZiAobmV4dCkKKwkJeGxlbiA9IG1pbih4bGVuLCAoaW50KShuZXh0IC0geG9mZikpOwogLy9pbnNlcnQ6CiAJLyoKIAkgKiAgICAgIGluc2VydCBlbnRyeSBmb3IgbmV3IGV4dGVudApAQCAtMjYwMCw3ICsyNjIxLDcgQEAKIAkvKgogCSAqIGZpbmQgdGhlIG1hdGNoaW5nIGVudHJ5OyB4dFNlYXJjaCgpIHBpbnMgdGhlIHBhZ2UKIAkgKi8KLQlpZiAoKHJjID0geHRTZWFyY2goaXAsIHhvZmYsICZjbXAsICZidHN0YWNrLCAwKSkpCisJaWYgKChyYyA9IHh0U2VhcmNoKGlwLCB4b2ZmLCBOVUxMLCAmY21wLCAmYnRzdGFjaywgMCkpKQogCQlyZXR1cm4gcmM7CiAKIAlYVF9HRVRTRUFSQ0goaXAsIGJ0c3RhY2sudG9wLCBibiwgbXAsIHAsIGluZGV4KTsKQEAgLTI4NTIsNyArMjg3Myw3IEBACiAJICovCiAJaWYgKHh0eXBlID09IERBVEFFWFQpIHsKIAkJLyogc2VhcmNoIGluIGxlYWYgZW50cnkgKi8KLQkJcmMgPSB4dFNlYXJjaChpcCwgeG9mZiwgJmNtcCwgJmJ0c3RhY2ssIDApOworCQlyYyA9IHh0U2VhcmNoKGlwLCB4b2ZmLCBOVUxMLCAmY21wLCAmYnRzdGFjaywgMCk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKIApAQCAtMjk1OCw3ICsyOTc5LDcgQEAKIAkJfQogCiAJCS8qIGdldCBiYWNrIHBhcmVudCBwYWdlICovCi0JCWlmICgocmMgPSB4dFNlYXJjaChpcCwgeG9mZiwgJmNtcCwgJmJ0c3RhY2ssIDApKSkKKwkJaWYgKChyYyA9IHh0U2VhcmNoKGlwLCB4b2ZmLCBOVUxMLCAmY21wLCAmYnRzdGFjaywgMCkpKQogCQkJcmV0dXJuIHJjOwogCiAJCVhUX0dFVFNFQVJDSChpcCwgYnRzdGFjay50b3AsIGJuLCBwbXAsIHBwLCBpbmRleCk7CkBAIC0zOTkxLDcgKzQwMTIsNyBAQAogCiAJaWYgKGNvbW1pdHRlZF9zaXplKSB7CiAJCXhvZmYgPSAoY29tbWl0dGVkX3NpemUgPj4gSkZTX1NCSShpcC0+aV9zYiktPmwyYnNpemUpIC0gMTsKLQkJcmMgPSB4dFNlYXJjaChpcCwgeG9mZiwgJmNtcCwgJmJ0c3RhY2ssIDApOworCQlyYyA9IHh0U2VhcmNoKGlwLCB4b2ZmLCBOVUxMLCAmY21wLCAmYnRzdGFjaywgMCk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKIApkaWZmIC0tZ2l0IGEvZnMvamZzL3Jlc2l6ZS5jIGIvZnMvamZzL3Jlc2l6ZS5jCmluZGV4IDJlYjY4NjkuLmM2ZGMyNTQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9yZXNpemUuYworKysgYi9mcy9qZnMvcmVzaXplLmMKQEAgLTIwOSw2ICsyMDksOSBAQAogCSAqLwogCXR4UXVpZXNjZShzYik7CiAKKwkvKiBSZXNldCBzaXplIG9mIGRpcmVjdCBpbm9kZSAqLworCXNiaS0+ZGlyZWN0X2lub2RlLT5pX3NpemUgPSAgc2ItPnNfYmRldi0+YmRfaW5vZGUtPmlfc2l6ZTsKKwogCWlmIChzYmktPm1udGZsYWcgJiBKRlNfSU5MSU5FTE9HKSB7CiAJCS8qCiAJCSAqIGRlYWN0aXZhdGUgb2xkIGlubGluZSBsb2cKZGlmZiAtLWdpdCBhL2ZzL2pmcy9zdXBlci5jIGIvZnMvamZzL3N1cGVyLmMKaW5kZXggNTg1Njg2Ni4uNWU3NzRlZCAxMDA2NDQKLS0tIGEvZnMvamZzL3N1cGVyLmMKKysrIGIvZnMvamZzL3N1cGVyLmMKQEAgLTIxMCw2ICsyMTAsMTAgQEAKIAkJdW5sb2FkX25scyhzYmktPm5sc190YWIpOwogCXNiaS0+bmxzX3RhYiA9IE5VTEw7CiAKKwl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nLCAwKTsKKwlpcHV0KHNiaS0+ZGlyZWN0X2lub2RlKTsKKwlzYmktPmRpcmVjdF9pbm9kZSA9IE5VTEw7CisKIAlrZnJlZShzYmkpOwogfQogCkBAIC0zNTgsNiArMzYyLDEyIEBACiAJfQogCiAJaWYgKChzYi0+c19mbGFncyAmIE1TX1JET05MWSkgJiYgISgqZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisJCS8qCisJCSAqIEludmFsaWRhdGUgYW55IHByZXZpb3VzbHkgcmVhZCBtZXRhZGF0YS4gIGZzY2sgbWF5IGhhdmUKKwkJICogY2hhbmdlZCB0aGUgb24tZGlzayBkYXRhIHNpbmNlIHdlIG1vdW50ZWQgci9vCisJCSAqLworCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhKRlNfU0JJKHNiKS0+ZGlyZWN0X2lub2RlLT5pX21hcHBpbmcsIDApOworCiAJCUpGU19TQkkoc2IpLT5mbGFnID0gZmxhZzsKIAkJcmV0dXJuIGpmc19tb3VudF9ydyhzYiwgMSk7CiAJfQpAQCAtNDI4LDEyICs0MzgsMjYgQEAKIAlzYi0+c19vcCA9ICZqZnNfc3VwZXJfb3BlcmF0aW9uczsKIAlzYi0+c19leHBvcnRfb3AgPSAmamZzX2V4cG9ydF9vcGVyYXRpb25zOwogCisJLyoKKwkgKiBJbml0aWFsaXplIGRpcmVjdC1tYXBwaW5nIGlub2RlL2FkZHJlc3Mtc3BhY2UKKwkgKi8KKwlpbm9kZSA9IG5ld19pbm9kZShzYik7CisJaWYgKGlub2RlID09IE5VTEwpCisJCWdvdG8gb3V0X2tmcmVlOworCWlub2RlLT5pX2lubyA9IDA7CisJaW5vZGUtPmlfbmxpbmsgPSAxOworCWlub2RlLT5pX3NpemUgPSBzYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9zaXplOworCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmpmc19tZXRhcGFnZV9hb3BzOworCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGlub2RlLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKKworCXNiaS0+ZGlyZWN0X2lub2RlID0gaW5vZGU7CisKIAlyYyA9IGpmc19tb3VudChzYik7CiAJaWYgKHJjKSB7CiAJCWlmICghc2lsZW50KSB7CiAJCQlqZnNfZXJyKCJqZnNfbW91bnQgZmFpbGVkIHcvcmV0dXJuIGNvZGUgPSAlZCIsIHJjKTsKIAkJfQotCQlnb3RvIG91dF9rZnJlZTsKKwkJZ290byBvdXRfbW91bnRfZmFpbGVkOwogCX0KIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXNiaS0+bG9nID0gTlVMTDsKQEAgLTQ4Miw2ICs1MDYsMTMgQEAKIAlpZiAocmMpIHsKIAkJamZzX2VycigiamZzX3Vtb3VudCBmYWlsZWQgd2l0aCByZXR1cm4gY29kZSAlZCIsIHJjKTsKIAl9CitvdXRfbW91bnRfZmFpbGVkOgorCWZpbGVtYXBfZmRhdGF3cml0ZShzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nKTsKKwlmaWxlbWFwX2ZkYXRhd2FpdChzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nKTsKKwl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nLCAwKTsKKwltYWtlX2JhZF9pbm9kZShzYmktPmRpcmVjdF9pbm9kZSk7CisJaXB1dChzYmktPmRpcmVjdF9pbm9kZSk7CisJc2JpLT5kaXJlY3RfaW5vZGUgPSBOVUxMOwogb3V0X2tmcmVlOgogCWlmIChzYmktPm5sc190YWIpCiAJCXVubG9hZF9ubHMoc2JpLT5ubHNfdGFiKTsKQEAgLTUyNyw4ICs1NTgsMTAgQEAKIAlzdHJ1Y3QgamZzX2xvZyAqbG9nID0gSkZTX1NCSShzYiktPmxvZzsKIAogCS8qIGxvZyA9PSBOVUxMIGluZGljYXRlcyByZWFkLW9ubHkgbW91bnQgKi8KLQlpZiAobG9nKQorCWlmIChsb2cpIHsKIAkJamZzX2ZsdXNoX2pvdXJuYWwobG9nLCB3YWl0KTsKKwkJamZzX3N5bmNwdChsb2cpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmMKaW5kZXggMTc5MmNlNS4uM2ZhNmE3YyAxMDA2NDQKLS0tIGEvZnMvbG9ja3MuYworKysgYi9mcy9sb2Nrcy5jCkBAIC00MDYsMTIgKzQwNiwxMiBAQAogCWZsLT5mbF9maWxlLT5mX293bmVyLnNpZ251bSA9IDA7CiB9CiAKLWludCBsZWFzZV9teWxlYXNlX2NhbGxiYWNrKHN0cnVjdCBmaWxlX2xvY2sgKmZsLCBzdHJ1Y3QgZmlsZV9sb2NrICp0cnkpCitzdGF0aWMgaW50IGxlYXNlX215bGVhc2VfY2FsbGJhY2soc3RydWN0IGZpbGVfbG9jayAqZmwsIHN0cnVjdCBmaWxlX2xvY2sgKnRyeSkKIHsKIAlyZXR1cm4gZmwtPmZsX2ZpbGUgPT0gdHJ5LT5mbF9maWxlOwogfQogCi1zdHJ1Y3QgbG9ja19tYW5hZ2VyX29wZXJhdGlvbnMgbGVhc2VfbWFuYWdlcl9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIGxlYXNlX21hbmFnZXJfb3BzID0gewogCS5mbF9icmVhayA9IGxlYXNlX2JyZWFrX2NhbGxiYWNrLAogCS5mbF9yZWxlYXNlX3ByaXZhdGUgPSBsZWFzZV9yZWxlYXNlX3ByaXZhdGVfY2FsbGJhY2ssCiAJLmZsX215bGVhc2UgPSBsZWFzZV9teWxlYXNlX2NhbGxiYWNrLApAQCAtMTI3NCw3ICsxMjc0LDcgQEAKICAqCiAgKglDYWxsZWQgd2l0aCBrZXJuZWwgbG9jayBoZWxkLgogICovCi1pbnQgX19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgbG9uZyBhcmcsIHN0cnVjdCBmaWxlX2xvY2sgKipmbHApCitzdGF0aWMgaW50IF9fc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGxvbmcgYXJnLCBzdHJ1Y3QgZmlsZV9sb2NrICoqZmxwKQogewogCXN0cnVjdCBmaWxlX2xvY2sgKmZsLCAqKmJlZm9yZSwgKipteV9iZWZvcmUgPSBOVUxMLCAqbGVhc2UgPSAqZmxwOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfZGVudHJ5OwpkaWZmIC0tZ2l0IGEvZnMvbWJjYWNoZS5jIGIvZnMvbWJjYWNoZS5jCmluZGV4IGY5ZTRkMjcuLmM3MTcwYjkgMTAwNjQ0Ci0tLSBhL2ZzL21iY2FjaGUuYworKysgYi9mcy9tYmNhY2hlLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAogI2RlZmluZSBNQl9DQUNIRV9XUklURVIgKCh1bnNpZ25lZCBzaG9ydCl+MFUgPj4gMSkKIAotREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobWJfY2FjaGVfcXVldWUpOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1iX2NhY2hlX3F1ZXVlKTsKIAkJCiBNT0RVTEVfQVVUSE9SKCJBbmRyZWFzIEdydWVuYmFjaGVyIDxhLmdydWVuYmFjaGVyQGNvbXB1dGVyLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTWV0YSBibG9jayBjYWNoZSAoZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMpIik7CmRpZmYgLS1naXQgYS9mcy9tcGFnZS5jIGIvZnMvbXBhZ2UuYwppbmRleCBlN2Q4ZDFhLi5iOTJjMGU2IDEwMDY0NAotLS0gYS9mcy9tcGFnZS5jCisrKyBiL2ZzL21wYWdlLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGJpbyAqbXBhZ2VfYmlvX3N1Ym1pdChpbnQgcncsIHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyBzdHJ1Y3QgYmlvICptcGFnZV9iaW9fc3VibWl0KGludCBydywgc3RydWN0IGJpbyAqYmlvKQogewogCWJpby0+YmlfZW5kX2lvID0gbXBhZ2VfZW5kX2lvX3JlYWQ7CiAJaWYgKHJ3ID09IFdSSVRFKQpAQCAtMTYwLDUyICsxNjAsNiBAQAogCX0gd2hpbGUgKHBhZ2VfYmggIT0gaGVhZCk7CiB9CiAKLS8qKgotICogbXBhZ2VfcmVhZHBhZ2VzIC0gcG9wdWxhdGUgYW4gYWRkcmVzcyBzcGFjZSB3aXRoIHNvbWUgcGFnZXMsIGFuZAotICogICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IHJlYWRzIGFnYWluc3QgdGhlbS4KLSAqCi0gKiBAbWFwcGluZzogdGhlIGFkZHJlc3Nfc3BhY2UKLSAqIEBwYWdlczogVGhlIGFkZHJlc3Mgb2YgYSBsaXN0X2hlYWQgd2hpY2ggY29udGFpbnMgdGhlIHRhcmdldCBwYWdlcy4gIFRoZXNlCi0gKiAgIHBhZ2VzIGhhdmUgdGhlaXIgLT5pbmRleCBwb3B1bGF0ZWQgYW5kIGFyZSBvdGhlcndpc2UgdW5pbml0aWFsaXNlZC4KLSAqCi0gKiAgIFRoZSBwYWdlIGF0IEBwYWdlcy0+cHJldiBoYXMgdGhlIGxvd2VzdCBmaWxlIG9mZnNldCwgYW5kIHJlYWRzIHNob3VsZCBiZQotICogICBpc3N1ZWQgaW4gQHBhZ2VzLT5wcmV2IHRvIEBwYWdlcy0+bmV4dCBvcmRlci4KLSAqCi0gKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgYXQgKkBwYWdlcwotICogQGdldF9ibG9jazogVGhlIGZpbGVzeXN0ZW0ncyBibG9jayBtYXBwZXIgZnVuY3Rpb24uCi0gKgotICogVGhpcyBmdW5jdGlvbiB3YWxrcyB0aGUgcGFnZXMgYW5kIHRoZSBibG9ja3Mgd2l0aGluIGVhY2ggcGFnZSwgYnVpbGRpbmcgYW5kCi0gKiBlbWl0dGluZyBsYXJnZSBCSU9zLgotICoKLSAqIElmIGFueXRoaW5nIHVudXN1YWwgaGFwcGVucywgc3VjaCBhczoKLSAqCi0gKiAtIGVuY291bnRlcmluZyBhIHBhZ2Ugd2hpY2ggaGFzIGJ1ZmZlcnMKLSAqIC0gZW5jb3VudGVyaW5nIGEgcGFnZSB3aGljaCBoYXMgYSBub24taG9sZSBhZnRlciBhIGhvbGUKLSAqIC0gZW5jb3VudGVyaW5nIGEgcGFnZSB3aXRoIG5vbi1jb250aWd1b3VzIGJsb2NrcwotICoKLSAqIHRoZW4gdGhpcyBjb2RlIGp1c3QgZ2l2ZXMgdXAgYW5kIGNhbGxzIHRoZSBidWZmZXJfaGVhZC1iYXNlZCByZWFkIGZ1bmN0aW9uLgotICogSXQgZG9lcyBoYW5kbGUgYSBwYWdlIHdoaWNoIGhhcyBob2xlcyBhdCB0aGUgZW5kIC0gdGhhdCBpcyBhIGNvbW1vbiBjYXNlOgotICogdGhlIGVuZC1vZi1maWxlIG9uIGJsb2Nrc2l6ZSA8IFBBR0VfQ0FDSEVfU0laRSBzZXR1cHMuCi0gKgotICogQkhfQm91bmRhcnkgZXhwbGFuYXRpb246Ci0gKgotICogVGhlcmUgaXMgYSBwcm9ibGVtLiAgVGhlIG1wYWdlIHJlYWQgY29kZSBhc3NlbWJsZXMgc2V2ZXJhbCBwYWdlcywgZ2V0cyBhbGwKLSAqIHRoZWlyIGRpc2sgbWFwcGluZ3MsIGFuZCB0aGVuIHN1Ym1pdHMgdGhlbSBhbGwuICBUaGF0J3MgZmluZSwgYnV0IG9idGFpbmluZwotICogdGhlIGRpc2sgbWFwcGluZ3MgbWF5IHJlcXVpcmUgSS9PLiAgUmVhZHMgb2YgaW5kaXJlY3QgYmxvY2tzLCBmb3IgZXhhbXBsZS4KLSAqCi0gKiBTbyBhbiBtcGFnZSByZWFkIG9mIHRoZSBmaXJzdCAxNiBibG9ja3Mgb2YgYW4gZXh0MiBmaWxlIHdpbGwgY2F1c2UgSS9PIHRvIGJlCi0gKiBzdWJtaXR0ZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKLSAqIAkxMiAwIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEzIDE0IDE1IDE2Ci0gKiBiZWNhdXNlIHRoZSBpbmRpcmVjdCBibG9jayBoYXMgdG8gYmUgcmVhZCB0byBnZXQgdGhlIG1hcHBpbmdzIG9mIGJsb2NrcwotICogMTMsMTQsMTUsMTYuICBPYnZpb3VzbHksIHRoaXMgaW1wYWN0cyBwZXJmb3JtYW5jZS4KLSAqIAotICogU28gd2hhdCB3ZSBkbyBpdCB0byBhbGxvdyB0aGUgZmlsZXN5c3RlbSdzIGdldF9ibG9jaygpIGZ1bmN0aW9uIHRvIHNldAotICogQkhfQm91bmRhcnkgd2hlbiBpdCBtYXBzIGJsb2NrIDExLiAgQkhfQm91bmRhcnkgc2F5czogbWFwcGluZyBvZiB0aGUgYmxvY2sKLSAqIGFmdGVyIHRoaXMgb25lIHdpbGwgcmVxdWlyZSBJL08gYWdhaW5zdCBhIGJsb2NrIHdoaWNoIGlzIHByb2JhYmx5IGNsb3NlIHRvCi0gKiB0aGlzIG9uZS4gIFNvIHlvdSBzaG91bGQgcHVzaCB3aGF0IEkvTyB5b3UgaGF2ZSBjdXJyZW50bHkgYWNjdW11bGF0ZWQuCi0gKgotICogVGhpcyBhbGwgY2F1c2VzIHRoZSBkaXNrIHJlcXVlc3RzIHRvIGJlIGlzc3VlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4KLSAqLwogc3RhdGljIHN0cnVjdCBiaW8gKgogZG9fbXBhZ2VfcmVhZHBhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbnJfcGFnZXMsCiAJCQlzZWN0b3JfdCAqbGFzdF9ibG9ja19pbl9iaW8sIGdldF9ibG9ja190IGdldF9ibG9jaykKQEAgLTMyMCw2ICsyNzQsNTIgQEAKIAlnb3RvIG91dDsKIH0KIAorLyoqCisgKiBtcGFnZV9yZWFkcGFnZXMgLSBwb3B1bGF0ZSBhbiBhZGRyZXNzIHNwYWNlIHdpdGggc29tZSBwYWdlcywgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgcmVhZHMgYWdhaW5zdCB0aGVtLgorICoKKyAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzc19zcGFjZQorICogQHBhZ2VzOiBUaGUgYWRkcmVzcyBvZiBhIGxpc3RfaGVhZCB3aGljaCBjb250YWlucyB0aGUgdGFyZ2V0IHBhZ2VzLiAgVGhlc2UKKyAqICAgcGFnZXMgaGF2ZSB0aGVpciAtPmluZGV4IHBvcHVsYXRlZCBhbmQgYXJlIG90aGVyd2lzZSB1bmluaXRpYWxpc2VkLgorICoKKyAqICAgVGhlIHBhZ2UgYXQgQHBhZ2VzLT5wcmV2IGhhcyB0aGUgbG93ZXN0IGZpbGUgb2Zmc2V0LCBhbmQgcmVhZHMgc2hvdWxkIGJlCisgKiAgIGlzc3VlZCBpbiBAcGFnZXMtPnByZXYgdG8gQHBhZ2VzLT5uZXh0IG9yZGVyLgorICoKKyAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyBhdCAqQHBhZ2VzCisgKiBAZ2V0X2Jsb2NrOiBUaGUgZmlsZXN5c3RlbSdzIGJsb2NrIG1hcHBlciBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdhbGtzIHRoZSBwYWdlcyBhbmQgdGhlIGJsb2NrcyB3aXRoaW4gZWFjaCBwYWdlLCBidWlsZGluZyBhbmQKKyAqIGVtaXR0aW5nIGxhcmdlIEJJT3MuCisgKgorICogSWYgYW55dGhpbmcgdW51c3VhbCBoYXBwZW5zLCBzdWNoIGFzOgorICoKKyAqIC0gZW5jb3VudGVyaW5nIGEgcGFnZSB3aGljaCBoYXMgYnVmZmVycworICogLSBlbmNvdW50ZXJpbmcgYSBwYWdlIHdoaWNoIGhhcyBhIG5vbi1ob2xlIGFmdGVyIGEgaG9sZQorICogLSBlbmNvdW50ZXJpbmcgYSBwYWdlIHdpdGggbm9uLWNvbnRpZ3VvdXMgYmxvY2tzCisgKgorICogdGhlbiB0aGlzIGNvZGUganVzdCBnaXZlcyB1cCBhbmQgY2FsbHMgdGhlIGJ1ZmZlcl9oZWFkLWJhc2VkIHJlYWQgZnVuY3Rpb24uCisgKiBJdCBkb2VzIGhhbmRsZSBhIHBhZ2Ugd2hpY2ggaGFzIGhvbGVzIGF0IHRoZSBlbmQgLSB0aGF0IGlzIGEgY29tbW9uIGNhc2U6CisgKiB0aGUgZW5kLW9mLWZpbGUgb24gYmxvY2tzaXplIDwgUEFHRV9DQUNIRV9TSVpFIHNldHVwcy4KKyAqCisgKiBCSF9Cb3VuZGFyeSBleHBsYW5hdGlvbjoKKyAqCisgKiBUaGVyZSBpcyBhIHByb2JsZW0uICBUaGUgbXBhZ2UgcmVhZCBjb2RlIGFzc2VtYmxlcyBzZXZlcmFsIHBhZ2VzLCBnZXRzIGFsbAorICogdGhlaXIgZGlzayBtYXBwaW5ncywgYW5kIHRoZW4gc3VibWl0cyB0aGVtIGFsbC4gIFRoYXQncyBmaW5lLCBidXQgb2J0YWluaW5nCisgKiB0aGUgZGlzayBtYXBwaW5ncyBtYXkgcmVxdWlyZSBJL08uICBSZWFkcyBvZiBpbmRpcmVjdCBibG9ja3MsIGZvciBleGFtcGxlLgorICoKKyAqIFNvIGFuIG1wYWdlIHJlYWQgb2YgdGhlIGZpcnN0IDE2IGJsb2NrcyBvZiBhbiBleHQyIGZpbGUgd2lsbCBjYXVzZSBJL08gdG8gYmUKKyAqIHN1Ym1pdHRlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorICogCTEyIDAgMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTMgMTQgMTUgMTYKKyAqIGJlY2F1c2UgdGhlIGluZGlyZWN0IGJsb2NrIGhhcyB0byBiZSByZWFkIHRvIGdldCB0aGUgbWFwcGluZ3Mgb2YgYmxvY2tzCisgKiAxMywxNCwxNSwxNi4gIE9idmlvdXNseSwgdGhpcyBpbXBhY3RzIHBlcmZvcm1hbmNlLgorICoKKyAqIFNvIHdoYXQgd2UgZG8gaXQgdG8gYWxsb3cgdGhlIGZpbGVzeXN0ZW0ncyBnZXRfYmxvY2soKSBmdW5jdGlvbiB0byBzZXQKKyAqIEJIX0JvdW5kYXJ5IHdoZW4gaXQgbWFwcyBibG9jayAxMS4gIEJIX0JvdW5kYXJ5IHNheXM6IG1hcHBpbmcgb2YgdGhlIGJsb2NrCisgKiBhZnRlciB0aGlzIG9uZSB3aWxsIHJlcXVpcmUgSS9PIGFnYWluc3QgYSBibG9jayB3aGljaCBpcyBwcm9iYWJseSBjbG9zZSB0bworICogdGhpcyBvbmUuICBTbyB5b3Ugc2hvdWxkIHB1c2ggd2hhdCBJL08geW91IGhhdmUgY3VycmVudGx5IGFjY3VtdWxhdGVkLgorICoKKyAqIFRoaXMgYWxsIGNhdXNlcyB0aGUgZGlzayByZXF1ZXN0cyB0byBiZSBpc3N1ZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCisgKi8KIGludAogbXBhZ2VfcmVhZHBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKIAkJCQl1bnNpZ25lZCBucl9wYWdlcywgZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrKQpAQCAtNjI3LDE1ICs2MjcsNiBAQAogbXBhZ2Vfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsIGdldF9ibG9ja190IGdldF9ibG9jaykKIHsKLQlyZXR1cm4gX19tcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgZ2V0X2Jsb2NrLAotCQltYXBwaW5nLT5hX29wcy0+d3JpdGVwYWdlKTsKLX0KLQotaW50Ci1fX21wYWdlX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2ssCi0JCXdyaXRlcGFnZV90IHdyaXRlcGFnZV9mbikKLXsKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKIAlzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMOwogCXNlY3Rvcl90IGxhc3RfYmxvY2tfaW5fYmlvID0gMDsKQEAgLTcyNSw4ICs3MTYsMTAgQEAKIAkJCX0gZWxzZSB7CiAJCQkJYmlvID0gX19tcGFnZV93cml0ZXBhZ2UoYmlvLCBwYWdlLCBnZXRfYmxvY2ssCiAJCQkJCQkmbGFzdF9ibG9ja19pbl9iaW8sICZyZXQsIHdiYywKLQkJCQkJCXdyaXRlcGFnZV9mbik7CisJCQkJCQlwYWdlLT5tYXBwaW5nLT5hX29wcy0+d3JpdGVwYWdlKTsKIAkJCX0KKwkJCWlmICh1bmxpa2VseShyZXQgPT0gV1JJVEVQQUdFX0FDVElWQVRFKSkKKwkJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJCWlmIChyZXQgfHwgKC0tKHdiYy0+bnJfdG9fd3JpdGUpIDw9IDApKQogCQkJCWRvbmUgPSAxOwogCQkJaWYgKHdiYy0+bm9uYmxvY2tpbmcgJiYgYmRpX3dyaXRlX2Nvbmdlc3RlZChiZGkpKSB7CkBAIC03NTMsNyArNzQ2LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChtcGFnZV93cml0ZXBhZ2VzKTsKLUVYUE9SVF9TWU1CT0woX19tcGFnZV93cml0ZXBhZ2VzKTsKIAogaW50IG1wYWdlX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrLAogCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggOWU0YWVmMi4uZGVmZTY3OCAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC02ODYsMTEgKzY4NiwxMSBAQAogCiAvKgogICogTmFtZSByZXNvbHV0aW9uLgorICogVGhpcyBpcyB0aGUgYmFzaWMgbmFtZSByZXNvbHV0aW9uIGZ1bmN0aW9uLCB0dXJuaW5nIGEgcGF0aG5hbWUgaW50bworICogdGhlIGZpbmFsIGRlbnRyeS4gV2UgZXhwZWN0ICdiYXNlJyB0byBiZSBwb3NpdGl2ZSBhbmQgYSBkaXJlY3RvcnkuCiAgKgotICogVGhpcyBpcyB0aGUgYmFzaWMgbmFtZSByZXNvbHV0aW9uIGZ1bmN0aW9uLCB0dXJuaW5nIGEgcGF0aG5hbWUKLSAqIGludG8gdGhlIGZpbmFsIGRlbnRyeS4KLSAqCi0gKiBXZSBleHBlY3QgJ2Jhc2UnIHRvIGJlIHBvc2l0aXZlIGFuZCBhIGRpcmVjdG9yeS4KKyAqIFJldHVybnMgMCBhbmQgbmQgd2lsbCBoYXZlIHZhbGlkIGRlbnRyeSBhbmQgbW50IG9uIHN1Y2Nlc3MuCisgKiBSZXR1cm5zIGVycm9yIGFuZCBkcm9wcyByZWZlcmVuY2UgdG8gaW5wdXQgbmFtZWkgZGF0YSBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgZmFzdGNhbGwgaW50IF9fbGlua19wYXRoX3dhbGsoY29uc3QgY2hhciAqIG5hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewpAQCAtOTI5LDggKzkyOSwxMCBAQAogCXJldHVybiBsaW5rX3BhdGhfd2FsayhuYW1lLCBuZCk7CiB9CiAKLS8qIFNNUC1zYWZlICovCi0vKiByZXR1cm5zIDEgaWYgZXZlcnl0aGluZyBpcyBkb25lICovCisvKiAKKyAqIFNNUC1zYWZlOiBSZXR1cm5zIDEgYW5kIG5kIHdpbGwgaGF2ZSB2YWxpZCBkZW50cnkgYW5kIG1udCwgaWYKKyAqIGV2ZXJ5dGhpbmcgaXMgZG9uZS4gUmV0dXJucyAwIGFuZCBkcm9wcyBpbnB1dCBuZCwgaWYgbG9va3VwIGZhaWxlZDsKKyAqLwogc3RhdGljIGludCBfX2VtdWxfbG9va3VwX2RlbnRyeShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAlpZiAocGF0aF93YWxrKG5hbWUsIG5kKSkKQEAgLTk5NCw5ICs5OTYsMTAgQEAKIAl9CiB9CiAKKy8qIFJldHVybnMgMCBhbmQgbmQgd2lsbCBiZSB2YWxpZCBvbiBzdWNjZXNzOyBSZXR1bnMgZXJyb3IsIG90aGVyd2lzZS4gKi8KIGludCBmYXN0Y2FsbCBwYXRoX2xvb2t1cChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IDA7CiAKIAluZC0+bGFzdF90eXBlID0gTEFTVF9ST09UOyAvKiBpZiB0aGVyZSBhcmUgb25seSBzbGFzaGVzLi4uICovCiAJbmQtPmZsYWdzID0gZmxhZ3M7CkBAIC0xMDA5LDcgKzEwMTIsNyBAQAogCQkJbmQtPmRlbnRyeSA9IGRnZXQoY3VycmVudC0+ZnMtPmFsdHJvb3QpOwogCQkJcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKIAkJCWlmIChfX2VtdWxfbG9va3VwX2RlbnRyeShuYW1lLG5kKSkKLQkJCQlyZXR1cm4gMDsKKwkJCQlnb3RvIG91dDsgLyogZm91bmQgaW4gYWx0cm9vdCAqLwogCQkJcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJCX0KIAkJbmQtPm1udCA9IG1udGdldChjdXJyZW50LT5mcy0+cm9vdG1udCk7CkBAIC0xMDIxLDYgKzEwMjQsNyBAQAogCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJY3VycmVudC0+dG90YWxfbGlua19jb3VudCA9IDA7CiAJcmV0dmFsID0gbGlua19wYXRoX3dhbGsobmFtZSwgbmQpOworb3V0OgogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0CiAJCSAgICAgJiYgbmQgJiYgbmQtPmRlbnRyeSAmJiBuZC0+ZGVudHJ5LT5kX2lub2RlKSkKIAkJYXVkaXRfaW5vZGUobmFtZSwgbmQtPmRlbnRyeS0+ZF9pbm9kZSk7CkBAIC0yMDY3LDggKzIwNzEsOCBAQAogICoJICAgLT5pX3NlbSBvbiBwYXJlbnRzLCB3aGljaCB3b3JrcyBidXQgbGVhZHMgdG8gc29tZSB0cnVlbHkgZXhjZXNzaXZlCiAgKgkgICBsb2NraW5nXS4KICAqLwotaW50IHZmc19yZW5hbWVfZGlyKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKLQkgICAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQorc3RhdGljIGludCB2ZnNfcmVuYW1lX2RpcihzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisJCQkgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlpbnQgZXJyb3IgPSAwOwogCXN0cnVjdCBpbm9kZSAqdGFyZ2V0OwpAQCAtMjExMiw4ICsyMTE2LDggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWludCB2ZnNfcmVuYW1lX290aGVyKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKLQkgICAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQorc3RhdGljIGludCB2ZnNfcmVuYW1lX290aGVyKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCSAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJc3RydWN0IGlub2RlICp0YXJnZXQ7CiAJaW50IGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2lkbWFwLmMgYi9mcy9uZnMvaWRtYXAuYwppbmRleCBiNzRjNGUzLi44N2Y0ZjlhIDEwMDY0NAotLS0gYS9mcy9uZnMvaWRtYXAuYworKysgYi9mcy9uZnMvaWRtYXAuYwpAQCAtNzksNyArNzksNyBAQAogCQkgICAgIGNoYXIgX191c2VyICosIHNpemVfdCk7CiBzdGF0aWMgc3NpemVfdCAgIGlkbWFwX3BpcGVfZG93bmNhbGwoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwKIAkJICAgICBzaXplX3QpOwotdm9pZCAgICAgICAgICAgICBpZG1hcF9waXBlX2Rlc3Ryb3lfbXNnKHN0cnVjdCBycGNfcGlwZV9tc2cgKik7CitzdGF0aWMgdm9pZCAgICAgIGlkbWFwX3BpcGVfZGVzdHJveV9tc2coc3RydWN0IHJwY19waXBlX21zZyAqKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBmbnZoYXNoMzIoY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogCkBAIC00MzQsNyArNDM0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogaWRtYXBfcGlwZV9kZXN0cm95X21zZyhzdHJ1Y3QgcnBjX3BpcGVfbXNnICptc2cpCiB7CiAJc3RydWN0IGlkbWFwX21zZyAqaW0gPSBtc2ctPmRhdGE7CmRpZmYgLS1naXQgYS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jCmluZGV4IDYzNDVmMjYuLmYyMzE3ZjMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbm9kZS5jCisrKyBiL2ZzL25mcy9pbm9kZS5jCkBAIC0xOTA0LDcgKzE5MDQsNyBAQAogCX0KIH0KICAKLWludCBuZnNfaW5pdF9pbm9kZWNhY2hlKHZvaWQpCitzdGF0aWMgaW50IG5mc19pbml0X2lub2RlY2FjaGUodm9pZCkKIHsKIAluZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoIm5mc19pbm9kZV9jYWNoZSIsCiAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBuZnNfaW5vZGUpLApAQCAtMTkxNiw3ICsxOTE2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBuZnNfZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCitzdGF0aWMgdm9pZCBuZnNfZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCiB7CiAJaWYgKGttZW1fY2FjaGVfZGVzdHJveShuZnNfaW5vZGVfY2FjaGVwKSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAibmZzX2lub2RlX2NhY2hlOiBub3QgYWxsIHN0cnVjdHVyZXMgd2VyZSBmcmVlZFxuIik7CmRpZmYgLS1naXQgYS9mcy9ubHMvbmxzX2Jhc2UuYyBiL2ZzL25scy9ubHNfYmFzZS5jCmluZGV4IDg5NzUxMjcuLmE5MTJkZWIgMTAwNjQ0Ci0tLSBhL2ZzL25scy9ubHNfYmFzZS5jCisrKyBiL2ZzL25scy9ubHNfYmFzZS5jCkBAIC0yNDMsNyArMjQzLDcgQEAKIAltb2R1bGVfcHV0KG5scy0+b3duZXIpOwogfQogCi13Y2hhcl90IGNoYXJzZXQydW5pWzI1Nl0gPSB7CitzdGF0aWMgd2NoYXJfdCBjaGFyc2V0MnVuaVsyNTZdID0gewogCS8qIDB4MDAqLwogCTB4MDAwMCwgMHgwMDAxLCAweDAwMDIsIDB4MDAwMywKIAkweDAwMDQsIDB4MDAwNSwgMHgwMDA2LCAweDAwMDcsCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDM5ZmQzMzYuLmUzMTkwM2EgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC04MjAsNyArODIwLDcgQEAKIAkJZ290byBvdXRfZnJlZV9wYWdlOwogCiAJfQotCWxlbmd0aCA9IGF1ZGl0X3NldF9sb2dpbnVpZCh0YXNrLT5hdWRpdF9jb250ZXh0LCBsb2dpbnVpZCk7CisJbGVuZ3RoID0gYXVkaXRfc2V0X2xvZ2ludWlkKHRhc2ssIGxvZ2ludWlkKTsKIAlpZiAobGlrZWx5KGxlbmd0aCA9PSAwKSkKIAkJbGVuZ3RoID0gY291bnQ7CiAKQEAgLTE0MTksNiArMTQxOSw4IEBACiBzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY190Z2lkX2F0dHJfaW5vZGVfb3BlcmF0aW9uczsKICNlbmRpZgogCitzdGF0aWMgaW50IGdldF90aWRfbGlzdChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCAqdGlkcywgc3RydWN0IGlub2RlICpkaXIpOworCiAvKiBTTVAtc2FmZSAqLwogc3RhdGljIHN0cnVjdCBkZW50cnkgKnByb2NfcGlkZW50X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgCiAJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC0xNDU4LDcgKzE0NjAsNyBAQAogCSAqLwogCXN3aXRjaChwLT50eXBlKSB7CiAJCWNhc2UgUFJPQ19UR0lEX1RBU0s6Ci0JCQlpbm9kZS0+aV9ubGluayA9IDM7CisJCQlpbm9kZS0+aV9ubGluayA9IDIgKyBnZXRfdGlkX2xpc3QoMiwgTlVMTCwgZGlyKTsKIAkJCWlub2RlLT5pX29wID0gJnByb2NfdGFza19pbm9kZV9vcGVyYXRpb25zOwogCQkJaW5vZGUtPmlfZm9wID0gJnByb2NfdGFza19vcGVyYXRpb25zOwogCQkJYnJlYWs7CkBAIC0xNzAxLDEzICsxNzAzLDEzIEBACiB9OwogCiAvKioKLSAqIHByb2NfcGlkX3VuaGFzaCAtICBVbmhhc2ggL3Byb2MvPHBpZD4gZW50cnkgZnJvbSB0aGUgZGNhY2hlLgorICogcHJvY19waWRfdW5oYXNoIC0gIFVuaGFzaCAvcHJvYy9AcGlkIGVudHJ5IGZyb20gdGhlIGRjYWNoZS4KICAqIEBwOiB0YXNrIHRoYXQgc2hvdWxkIGJlIGZsdXNoZWQuCiAgKgotICogRHJvcHMgdGhlIC9wcm9jLzxwaWQ+IGRjYWNoZSBlbnRyeSBmcm9tIHRoZSBoYXNoIGNoYWlucy4KKyAqIERyb3BzIHRoZSAvcHJvYy9AcGlkIGRjYWNoZSBlbnRyeSBmcm9tIHRoZSBoYXNoIGNoYWlucy4KICAqCi0gKiBEcm9wcGluZyAvcHJvYy88cGlkPiBlbnRyaWVzIGFuZCBkZXRhY2hfcGlkIG11c3QgYmUgc3luY2hyb25lb3VzLAotICogb3RoZXJ3aXNlIGUuZy4gL3Byb2MvPHBpZD4vZXhlIG1pZ2h0IHBvaW50IHRvIHRoZSB3cm9uZyBleGVjdXRhYmxlLAorICogRHJvcHBpbmcgL3Byb2MvQHBpZCBlbnRyaWVzIGFuZCBkZXRhY2hfcGlkIG11c3QgYmUgc3luY2hyb25lb3VzLAorICogb3RoZXJ3aXNlIGUuZy4gL3Byb2MvQHBpZC9leGUgbWlnaHQgcG9pbnQgdG8gdGhlIHdyb25nIGV4ZWN1dGFibGUsCiAgKiBpZiB0aGUgcGlkIHZhbHVlIGlzIGltbWVkaWF0ZWx5IHJldXNlZC4gVGhpcyBpcyBlbmZvcmNlZCBieQogICogLSBjYWxsZXIgbXVzdCBhY3F1aXJlIHNwaW5fbG9jayhwLT5wcm9jX2xvY2spCiAgKiAtIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZXRhY2hfcGlkKCkKQEAgLTE3MzksOCArMTc0MSw4IEBACiB9CiAKIC8qKgotICogcHJvY19waWRfZmx1c2ggLSByZWNvdmVyIG1lbW9yeSB1c2VkIGJ5IHN0YWxlIC9wcm9jLzxwaWQ+L3ggZW50cmllcwotICogQHByb2NfZW50cnk6IGRpcmVjdG95IHRvIHBydW5lLgorICogcHJvY19waWRfZmx1c2ggLSByZWNvdmVyIG1lbW9yeSB1c2VkIGJ5IHN0YWxlIC9wcm9jL0BwaWQveCBlbnRyaWVzCisgKiBAcHJvY19kZW50cnk6IGRpcmVjdG95IHRvIHBydW5lLgogICoKICAqIFNocmluayB0aGUgL3Byb2MgZGlyZWN0b3J5IHRoYXQgd2FzIHVzZWQgYnkgdGhlIGp1c3Qga2lsbGVkIHRocmVhZC4KICAqLwpAQCAtMTgwMCw4ICsxODAyLDEyIEBACiAJaW5vZGUtPmlfbW9kZSA9IFNfSUZESVJ8U19JUlVHT3xTX0lYVUdPOwogCWlub2RlLT5pX29wID0gJnByb2NfdGdpZF9iYXNlX2lub2RlX29wZXJhdGlvbnM7CiAJaW5vZGUtPmlfZm9wID0gJnByb2NfdGdpZF9iYXNlX29wZXJhdGlvbnM7Ci0JaW5vZGUtPmlfbmxpbmsgPSAzOwogCWlub2RlLT5pX2ZsYWdzfD1TX0lNTVVUQUJMRTsKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFkKKwlpbm9kZS0+aV9ubGluayA9IDU7CisjZWxzZQorCWlub2RlLT5pX25saW5rID0gNDsKKyNlbmRpZgogCiAJZGVudHJ5LT5kX29wID0gJnBpZF9iYXNlX2RlbnRyeV9vcGVyYXRpb25zOwogCkBAIC0xODU1LDggKzE4NjEsMTIgQEAKIAlpbm9kZS0+aV9tb2RlID0gU19JRkRJUnxTX0lSVUdPfFNfSVhVR087CiAJaW5vZGUtPmlfb3AgPSAmcHJvY190aWRfYmFzZV9pbm9kZV9vcGVyYXRpb25zOwogCWlub2RlLT5pX2ZvcCA9ICZwcm9jX3RpZF9iYXNlX29wZXJhdGlvbnM7Ci0JaW5vZGUtPmlfbmxpbmsgPSAzOwogCWlub2RlLT5pX2ZsYWdzfD1TX0lNTVVUQUJMRTsKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFkKKwlpbm9kZS0+aV9ubGluayA9IDQ7CisjZWxzZQorCWlub2RlLT5pX25saW5rID0gMzsKKyNlbmRpZgogCiAJZGVudHJ5LT5kX29wID0gJnBpZF9iYXNlX2RlbnRyeV9vcGVyYXRpb25zOwogCkBAIC0xOTM1LDcgKzE5NDUsOCBAQAogCiAJCWlmICgtLWluZGV4ID49IDApCiAJCQljb250aW51ZTsKLQkJdGlkc1tucl90aWRzXSA9IHRpZDsKKwkJaWYgKHRpZHMgIT0gTlVMTCkKKwkJCXRpZHNbbnJfdGlkc10gPSB0aWQ7CiAJCW5yX3RpZHMrKzsKIAkJaWYgKG5yX3RpZHMgPj0gUFJPQ19NQVhQSURTKQogCQkJYnJlYWs7CkBAIC0yMDM1LDYgKzIwNDYsNyBAQAogCX0KIAogCW5yX3RpZHMgPSBnZXRfdGlkX2xpc3QocG9zLCB0aWRfYXJyYXksIGlub2RlKTsKKwlpbm9kZS0+aV9ubGluayA9IHBvcyArIG5yX3RpZHM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfdGlkczsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgaiA9IFBST0NfTlVNQlVGOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvYml0bWFwLmMgYi9mcy9yZWlzZXJmcy9iaXRtYXAuYwppbmRleCBhNGUyZWQ1Li40OWM0NzljIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9iaXRtYXAuYworKysgYi9mcy9yZWlzZXJmcy9iaXRtYXAuYwpAQCAtMjYwLDggKzI2MCw5IEBACiAvKgogICogdGhlIHBhY2tpbmcgaXMgcmV0dXJuZWQgaW4gZGlzayBieXRlIG9yZGVyCiAgKi8KLXUzMiByZWlzZXJmc19jaG9vc2VfcGFja2luZyhzdHJ1Y3QgaW5vZGUgKmRpcikgewotICAgIHUzMiBwYWNraW5nOworX19sZTMyIHJlaXNlcmZzX2Nob29zZV9wYWNraW5nKHN0cnVjdCBpbm9kZSAqZGlyKQoreworICAgIF9fbGUzMiBwYWNraW5nOwogICAgIGlmIChURVNUX09QVElPTihwYWNraW5nX2dyb3VwcywgZGlyLT5pX3NiKSkgewogCXUzMiBwYXJlbnRfZGlyID0gbGUzMl90b19jcHUoSU5PREVfUEtFWShkaXIpLT5rX2Rpcl9pZCk7CiAJLyoKQEAgLTY1NSw3ICs2NTYsNyBAQAogICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoOwogICAgIHN0cnVjdCBpdGVtX2hlYWQgKiBpaDsKICAgICBpbnQgcG9zX2luX2l0ZW07Ci0gICAgX191MzIgKiBpdGVtOworICAgIF9fbGUzMiAqIGl0ZW07CiAgICAgaW50IHJldCA9IDA7CiAKICAgICBpZiAoIWhpbnQtPnBhdGgpCQkvKiByZWlzZXJmcyBjb2RlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdy9vIHBvaW50ZXIgdG8gcGF0aApAQCAtNzM2LDcgKzczNyw3IEBACiAjaWZkZWYgRElTUExBQ0VfTkVXX1BBQ0tJTkdfTE9DQUxJVElFUwogc3RhdGljIGlubGluZSB2b2lkIGRpc3BsYWNlX25ld19wYWNraW5nX2xvY2FsaXR5IChyZWlzZXJmc19ibG9ja25yX2hpbnRfdCAqaGludCkKIHsKLSAgICBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICoga2V5ID0gJmhpbnQtPmtleTsKKyAgICBzdHJ1Y3QgaW5fY29yZV9rZXkgKiBrZXkgPSAmaGludC0+a2V5OwogCiAgICAgaGludC0+dGgtPmRpc3BsYWNlX25ld19ibG9ja3MgPSAwOwogICAgIGhpbnQtPnNlYXJjaF9zdGFydCA9IGhpbnQtPmJlZyArIGtleWVkX2hhc2goKGNoYXIqKSgma2V5LT5rX29iamVjdGlkKSw0KSAlIChoaW50LT5lbmQgLSBoaW50LT5iZWcpOwpAQCAtNzc3LDcgKzc3OCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBodW5kcmVkdGhfc2xpY2VzIChyZWlzZXJmc19ibG9ja25yX2hpbnRfdCAqIGhpbnQpCiB7Ci0gICAgc3RydWN0IHJlaXNlcmZzX2tleSAqIGtleSA9ICZoaW50LT5rZXk7CisgICAgc3RydWN0IGluX2NvcmVfa2V5ICoga2V5ID0gJmhpbnQtPmtleTsKICAgICBiX2Jsb2NrbnJfdCBzbGljZV9zdGFydDsKIAogICAgIHNsaWNlX3N0YXJ0ID0gKGtleWVkX2hhc2goKGNoYXIqKSgma2V5LT5rX2Rpcl9pZCksNCkgJSAxMDApICogKGhpbnQtPmVuZCAvIDEwMCk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9kaXIuYyBiL2ZzL3JlaXNlcmZzL2Rpci5jCmluZGV4IGQxNTE0YTkuLmZiZGU0YjAgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2Rpci5jCisrKyBiL2ZzL3JlaXNlcmZzL2Rpci5jCkBAIC0yMDksOCArMjA5LDggQEAKIC8qIGNvbXBvc2UgZGlyZWN0b3J5IGl0ZW0gY29udGFpbmluZyAiLiIgYW5kICIuLiIgZW50cmllcyAoZW50cmllcyBhcmUKICAgIG5vdCBhbGlnbmVkIHRvIDQgYnl0ZSBib3VuZGFyeSkgKi8KIC8qIHRoZSBsYXN0IGZvdXIgcGFyYW1zIGFyZSBMRSAqLwotdm9pZCBtYWtlX2VtcHR5X2Rpcl9pdGVtX3YxIChjaGFyICogYm9keSwgX191MzIgZGlyaWQsIF9fdTMyIG9iamlkLAotCQkJICAgICBfX3UzMiBwYXJfZGlyaWQsIF9fdTMyIHBhcl9vYmppZCkKK3ZvaWQgbWFrZV9lbXB0eV9kaXJfaXRlbV92MSAoY2hhciAqIGJvZHksIF9fbGUzMiBkaXJpZCwgX19sZTMyIG9iamlkLAorCQkJICAgICBfX2xlMzIgcGFyX2RpcmlkLCBfX2xlMzIgcGFyX29iamlkKQogewogICAgIHN0cnVjdCByZWlzZXJmc19kZV9oZWFkICogZGVoOwogCkBAIC0yNDIsOCArMjQyLDggQEAKIH0KIAogLyogY29tcG9zZSBkaXJlY3RvcnkgaXRlbSBjb250YWluaW5nICIuIiBhbmQgIi4uIiBlbnRyaWVzICovCi12b2lkIG1ha2VfZW1wdHlfZGlyX2l0ZW0gKGNoYXIgKiBib2R5LCBfX3UzMiBkaXJpZCwgX191MzIgb2JqaWQsCi0JCQkgIF9fdTMyIHBhcl9kaXJpZCwgX191MzIgcGFyX29iamlkKQordm9pZCBtYWtlX2VtcHR5X2Rpcl9pdGVtIChjaGFyICogYm9keSwgX19sZTMyIGRpcmlkLCBfX2xlMzIgb2JqaWQsCisJCQkgIF9fbGUzMiBwYXJfZGlyaWQsIF9fbGUzMiBwYXJfb2JqaWQpCiB7CiAgICAgc3RydWN0IHJlaXNlcmZzX2RlX2hlYWQgKiBkZWg7CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2ZpbGUuYyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwppbmRleCAyNjk1MDExLi4yMjMwYWZmIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9maWxlLmMKKysrIGIvZnMvcmVpc2VyZnMvZmlsZS5jCkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICBzdHJ1Y3QgY3B1X2tleSBrZXk7IC8vIGNwdSBrZXkgb2YgaXRlbSB0aGF0IHdlIGFyZSBnb2luZyB0byBkZWFsIHdpdGgKICAgICBzdHJ1Y3QgaXRlbV9oZWFkICppaDsgLy8gcG9pbnRlciB0byBpdGVtIGhlYWQgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gZGVhbCB3aXRoCiAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsgLy8gQnVmZmVyIGhlYWQgdGhhdCBjb250YWlucyBpdGVtcyB0aGF0IHdlIGFyZSBnb2luZyB0byBkZWFsIHdpdGgKLSAgICBfX3UzMiAqIGl0ZW07IC8vIHBvaW50ZXIgdG8gaXRlbSB3ZSBhcmUgZ29pbmcgdG8gZGVhbCB3aXRoCisgICAgX19sZTMyICogaXRlbTsgLy8gcG9pbnRlciB0byBpdGVtIHdlIGFyZSBnb2luZyB0byBkZWFsIHdpdGgKICAgICBJTklUSUFMSVpFX1BBVEgocGF0aCk7IC8vIHBhdGggdG8gaXRlbSwgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gZGVhbCB3aXRoLgogICAgIGJfYmxvY2tucl90ICphbGxvY2F0ZWRfYmxvY2tzOyAvLyBQb2ludGVyIHRvIGEgcGxhY2Ugd2hlcmUgYWxsb2NhdGVkIGJsb2NrbnVtYmVycyB3b3VsZCBiZSBzdG9yZWQuCiAgICAgcmVpc2VyZnNfYmxvY2tucl9oaW50X3QgaGludDsgLy8gaGludCBzdHJ1Y3R1cmUgZm9yIGJsb2NrIGFsbG9jYXRvci4KQEAgLTg5MSw3ICs4OTEsNyBAQAogICAgIHN0cnVjdCBpdGVtX2hlYWQgKmloID0gTlVMTDsgLy8gcG9pbnRlciB0byBpdGVtIGhlYWQgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gZGVhbCB3aXRoCiAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICppdGVtYnVmPU5VTEw7IC8vIEJ1ZmZlciBoZWFkIHRoYXQgY29udGFpbnMgaXRlbXMgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gZGVhbCB3aXRoCiAgICAgSU5JVElBTElaRV9QQVRIKHBhdGgpOyAvLyBwYXRoIHRvIGl0ZW0sIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGRlYWwgd2l0aC4KLSAgICBfX3UzMiAqIGl0ZW09TlVMTDsgLy8gcG9pbnRlciB0byBpdGVtIHdlIGFyZSBnb2luZyB0byBkZWFsIHdpdGgKKyAgICBfX2xlMzIgKiBpdGVtPU5VTEw7IC8vIHBvaW50ZXIgdG8gaXRlbSB3ZSBhcmUgZ29pbmcgdG8gZGVhbCB3aXRoCiAgICAgaW50IGl0ZW1fcG9zPS0xOyAvKiBQb3NpdGlvbiBpbiBpbmRpcmVjdCBpdGVtICovCiAKIApAQCAtMTI4NCwxMCArMTI4NCwxMSBAQAogCXJlaXNlcmZzX2NsYWltX2Jsb2Nrc190b19iZV9hbGxvY2F0ZWQoaW5vZGUtPmlfc2IsIG51bV9wYWdlcyA8PCAoUEFHRV9DQUNIRV9TSElGVCAtIGlub2RlLT5pX2Jsa2JpdHMpKTsKIAlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwogCi0JaWYgKCAhbnVtX3BhZ2VzICkgeyAvKiBJZiB3ZSBkbyBub3QgaGF2ZSBlbm91Z2ggc3BhY2UgZXZlbiBmb3IgKi8KLQkgICAgcmVzID0gLUVOT1NQQzsgIC8qIHNpbmdsZSBwYWdlLCByZXR1cm4gLUVOT1NQQyAqLwotCSAgICBpZiAoIHBvcyA+IChpbm9kZS0+aV9zaXplICYgKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZS0xKSkpCi0JCWJyZWFrOyAvLyBJbiBjYXNlIHdlIGFyZSB3cml0aW5nIHBhc3QgdGhlIGZpbGUgZW5kLCBicmVhay4KKwlpZiAoICFudW1fcGFnZXMgKSB7IC8qIElmIHdlIGRvIG5vdCBoYXZlIGVub3VnaCBzcGFjZSBldmVuIGZvciBhIHNpbmdsZSBwYWdlLi4uICovCisJICAgIGlmICggcG9zID4gaW5vZGUtPmlfc2l6ZStpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUtKHBvcyAmIChpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUtMSkpKSB7CisJCXJlcyA9IC1FTk9TUEM7CisJCWJyZWFrOyAvLyBJbiBjYXNlIHdlIGFyZSB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgbGFzdCBmaWxlIGJsb2NrLCBicmVhay4KKwkgICAgfQogCSAgICAvLyBPdGhlcndpc2Ugd2UgYXJlIHBvc3NpYmx5IG92ZXJ3cml0aW5nIHRoZSBmaWxlLCBzbwogCSAgICAvLyBsZXQncyBzZXQgd3JpdGUgc2l6ZSB0byBiZSBlcXVhbCBvciBsZXNzIHRoYW4gYmxvY2tzaXplLgogCSAgICAvLyBUaGlzIHdheSB3ZSBnZXQgaXQgY29ycmVjdGx5IGZvciBmaWxlIGhvbGVzLgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW5vZGUuYyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKaW5kZXggNzU0MzAzMS4uMjcxMWRmZiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC0xNzMsNyArMTczLDcgQEAKICAgIGRvbmUgYWxyZWFkeSBvciBub24taG9sZSBwb3NpdGlvbiBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgaW5kaXJlY3QgaXRlbSAqLwogc3RhdGljIGlubGluZSBpbnQgYWxsb2NhdGlvbl9uZWVkZWQgKGludCByZXR2YWwsIGJfYmxvY2tucl90IGFsbG9jYXRlZCwgCiAJCQkJICAgICBzdHJ1Y3QgaXRlbV9oZWFkICogaWgsCi0JCQkJICAgICBfX3UzMiAqIGl0ZW0sIGludCBwb3NfaW5faXRlbSkKKwkJCQkgICAgIF9fbGUzMiAqIGl0ZW0sIGludCBwb3NfaW5faXRlbSkKIHsKICAgaWYgKGFsbG9jYXRlZCkKIAkgcmV0dXJuIDA7CkBAIC0yNzgsNyArMjc4LDcgQEAKICAgICBiaCA9IGdldF9sYXN0X2JoICgmcGF0aCk7CiAgICAgaWggPSBnZXRfaWggKCZwYXRoKTsKICAgICBpZiAoaXNfaW5kaXJlY3RfbGVfaWggKGloKSkgewotCV9fdTMyICogaW5kX2l0ZW0gPSAoX191MzIgKilCX0lfUElURU0gKGJoLCBpaCk7CisJX19sZTMyICogaW5kX2l0ZW0gPSAoX19sZTMyICopQl9JX1BJVEVNIChiaCwgaWgpOwogCQogCS8qIEZJWE1FOiBoZXJlIHdlIGNvdWxkIGNhY2hlIGluZGlyZWN0IGl0ZW0gb3IgcGFydCBvZiBpdCBpbgogCSAgIHRoZSBpbm9kZSB0byBhdm9pZCBzZWFyY2hfYnlfa2V5IGluIGNhc2Ugb2Ygc3Vic2VxdWVudApAQCAtNTgxLDcgKzU4MSw3IEBACiAgICAgc3RydWN0IGNwdV9rZXkga2V5OwogICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoLCAqIHVuYmggPSBOVUxMOwogICAgIHN0cnVjdCBpdGVtX2hlYWQgKiBpaCwgdG1wX2loOwotICAgIF9fdTMyICogaXRlbTsKKyAgICBfX2xlMzIgKiBpdGVtOwogICAgIGludCBkb25lOwogICAgIGludCBmc19nZW47CiAgICAgc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGggPSBOVUxMOwpAQCAtNzQ2LDcgKzc0Niw3IEBACiAgICAgZG9uZSA9IDA7CiAgICAgZG8gewogCWlmIChpc19zdGF0ZGF0YV9sZV9paCAoaWgpKSB7Ci0JICAgIF9fdTMyIHVucCA9IDA7CisJICAgIF9fbGUzMiB1bnAgPSAwOwogCSAgICBzdHJ1Y3QgY3B1X2tleSB0bXBfa2V5OwogCiAJICAgIC8qIGluZGlyZWN0IGl0ZW0gaGFzIHRvIGJlIGluc2VydGVkICovCkBAIC0xMzQxLDggKzEzNDEsOCBAQAogICAgIGtleS52ZXJzaW9uID0gS0VZX0ZPUk1BVF8zXzU7CiAgICAga2V5Lm9uX2Rpc2tfa2V5LmtfZGlyX2lkID0gZGlyaW5vOwogICAgIGtleS5vbl9kaXNrX2tleS5rX29iamVjdGlkID0gaW5vZGUtPmlfaW5vOwotICAgIGtleS5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YxLmtfb2Zmc2V0ID0gU0RfT0ZGU0VUOwotICAgIGtleS5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YxLmtfdW5pcXVlbmVzcyA9IFNEX1VOSVFVRU5FU1M7CisgICAga2V5Lm9uX2Rpc2tfa2V5Lmtfb2Zmc2V0ID0gMDsKKyAgICBrZXkub25fZGlza19rZXkua190eXBlID0gMDsKIAogICAgIC8qIGxvb2sgZm9yIHRoZSBvYmplY3QncyBzdGF0IGRhdGEgKi8KICAgICByZXR2YWwgPSBzZWFyY2hfaXRlbSAoaW5vZGUtPmlfc2IsICZrZXksICZwYXRoX3RvX3NkKTsKQEAgLTIwNjcsNyArMjA2Nyw3IEBACiAgICAgc3RydWN0IGl0ZW1faGVhZCB0bXBfaWggOwogICAgIHN0cnVjdCBpdGVtX2hlYWQgKmloIDsKICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoIDsKLSAgICBfX3UzMiAqaXRlbSA7CisgICAgX19sZTMyICppdGVtIDsKICAgICBzdHJ1Y3QgY3B1X2tleSBrZXkgOwogICAgIElOSVRJQUxJWkVfUEFUSChwYXRoKSA7CiAgICAgaW50IHBvc19pbl9pdGVtIDsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2l0ZW1fb3BzLmMgYi9mcy9yZWlzZXJmcy9pdGVtX29wcy5jCmluZGV4IDljZjdjMTMuLjBjZTMzZGIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2l0ZW1fb3BzLmMKKysrIGIvZnMvcmVpc2VyZnMvaXRlbV9vcHMuYwpAQCAtMjk2LDEwICsyOTYsMTEgQEAKIHN0YXRpYyB2b2lkIGluZGlyZWN0X3ByaW50X2l0ZW0gKHN0cnVjdCBpdGVtX2hlYWQgKiBpaCwgY2hhciAqIGl0ZW0pCiB7CiAgICAgaW50IGo7Ci0gICAgX191MzIgKiB1bnAsIHByZXYgPSBJTlRfTUFYOworICAgIF9fbGUzMiAqIHVucDsKKyAgICBfX3UzMiBwcmV2ID0gSU5UX01BWDsKICAgICBpbnQgbnVtOwogCi0gICAgdW5wID0gKF9fdTMyICopaXRlbTsKKyAgICB1bnAgPSAoX19sZTMyICopaXRlbTsKIAogICAgIGlmIChpaF9pdGVtX2xlbihpaCkgJSBVTkZNX1BfU0laRSkKIAlyZWlzZXJmc193YXJuaW5nIChOVUxMLCAiaW5kaXJlY3RfcHJpbnRfaXRlbTogaW52YWxpZCBpdGVtIGxlbiIpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvam91cm5hbC5jIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCmluZGV4IGM5YWQzYTcuLjMwNzJjZmQgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYworKysgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKQEAgLTIzMDYsMTMgKzIzMDYsMTYgQEAKIAlpZiggIUlTX0VSUiggam91cm5hbCAtPiBqX2Rldl9maWxlICkgKSB7CiAJCXN0cnVjdCBpbm9kZSAqamRldl9pbm9kZSA9IGpvdXJuYWwtPmpfZGV2X2ZpbGUtPmZfbWFwcGluZy0+aG9zdDsKIAkJaWYoICFTX0lTQkxLKCBqZGV2X2lub2RlIC0+IGlfbW9kZSApICkgewotCQkJcmVpc2VyZnNfd2FybmluZyAgKHN1cGVyLCAiam91cm5hbF9pbml0X2RldjogJyVzJyBpcyAiCi0JCQkJCSAgICJub3QgYSBibG9jayBkZXZpY2UiLCBqZGV2X25hbWUgKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc3VwZXIsICJqb3VybmFsX2luaXRfZGV2OiAnJXMnIGlzICIKKwkJCQkJICJub3QgYSBibG9jayBkZXZpY2UiLCBqZGV2X25hbWUgKTsKIAkJCXJlc3VsdCA9IC1FTk9UQkxLOworCQkJcmVsZWFzZV9qb3VybmFsX2Rldiggc3VwZXIsIGpvdXJuYWwgKTsKIAkJfSBlbHNlICB7CiAJCQkvKiBvayAqLwogCQkJam91cm5hbC0+al9kZXZfYmQgPSBJX0JERVYoamRldl9pbm9kZSk7CiAJCQlzZXRfYmxvY2tzaXplKGpvdXJuYWwtPmpfZGV2X2JkLCBzdXBlci0+c19ibG9ja3NpemUpOworCQkJcmVpc2VyZnNfaW5mbyhzdXBlciwgImpvdXJuYWxfaW5pdF9kZXY6IGpvdXJuYWwgZGV2aWNlOiAlc1xuIiwKKwkJCQkgICAgICBiZGV2bmFtZShqb3VybmFsLT5qX2Rldl9iZCwgYikpOwogCQl9CiAJfSBlbHNlIHsKIAkJcmVzdWx0ID0gUFRSX0VSUiggam91cm5hbCAtPiBqX2Rldl9maWxlICk7CkBAIC0yMzIxLDExICsyMzI0LDYgQEAKIAkJCQkgICJqb3VybmFsX2luaXRfZGV2OiBDYW5ub3Qgb3BlbiAnJXMnOiAlaSIsCiAJCQkJICBqZGV2X25hbWUsIHJlc3VsdCApOwogCX0KLQlpZiggcmVzdWx0ICE9IDAgKSB7Ci0JCXJlbGVhc2Vfam91cm5hbF9kZXYoIHN1cGVyLCBqb3VybmFsICk7Ci0JfQotCXJlaXNlcmZzX2luZm8oc3VwZXIsICJqb3VybmFsX2luaXRfZGV2OiBqb3VybmFsIGRldmljZTogJXNcbiIsCi0JCWJkZXZuYW1lKGpvdXJuYWwtPmpfZGV2X2JkLCBiKSk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjM5Myw3ICsyMzkxLDcgQEAKICAgICAgamggPSAoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfaGVhZGVyICopKGJoamgtPmJfZGF0YSk7CiAgICAgIAogICAgICAvKiBtYWtlIHN1cmUgdGhhdCBqb3VybmFsIG1hdGNoZXMgdG8gdGhlIHN1cGVyIGJsb2NrICovCi0gICAgIGlmIChpc19yZWlzZXJmc19qcihycykgJiYgKGpoLT5qaF9qb3VybmFsLmpwX2pvdXJuYWxfbWFnaWMgIT0gc2JfanBfam91cm5hbF9tYWdpYyhycykpKSB7CisgICAgIGlmIChpc19yZWlzZXJmc19qcihycykgJiYgKGxlMzJfdG9fY3B1KGpoLT5qaF9qb3VybmFsLmpwX2pvdXJuYWxfbWFnaWMpICE9IHNiX2pwX2pvdXJuYWxfbWFnaWMocnMpKSkgewogCSByZWlzZXJmc193YXJuaW5nIChwX3Nfc2IsICJzaC00NjA6IGpvdXJuYWwgaGVhZGVyIG1hZ2ljICV4ICIKIAkJCSAgICIoZGV2aWNlICVzKSBkb2VzIG5vdCBtYXRjaCB0byBtYWdpYyBmb3VuZCBpbiBzdXBlciAiCiAJCQkgICAiYmxvY2sgJXgiLApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbmFtZWkuYyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKaW5kZXggODBlOTJkOS4uN2Q0ZGM1ZiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbmFtZWkuYworKysgYi9mcy9yZWlzZXJmcy9uYW1laS5jCkBAIC02MDgsNyArNjA4LDcgQEAKICAgICAgICAgZ290byBvdXRfZmFpbGVkOwogICAgIH0KIAotICAgIHJldHZhbCA9IHJlaXNlcmZzX25ld19pbm9kZSAoJnRoLCBkaXIsIG1vZGUsIDAsIDAvKmlfc2l6ZSovLCBkZW50cnksIGlub2RlKTsKKyAgICByZXR2YWwgPSByZWlzZXJmc19uZXdfaW5vZGUgKCZ0aCwgZGlyLCBtb2RlLCBOVUxMLCAwLyppX3NpemUqLywgZGVudHJ5LCBpbm9kZSk7CiAgICAgaWYgKHJldHZhbCkKICAgICAgICAgZ290byBvdXRfZmFpbGVkOwogCQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvb2JqZWN0aWQuYyBiL2ZzL3JlaXNlcmZzL29iamVjdGlkLmMKaW5kZXggMDc4NWM0My4uYmZlOGUyNSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvb2JqZWN0aWQuYworKysgYi9mcy9yZWlzZXJmcy9vYmplY3RpZC5jCkBAIC0xMSwxMyArMTEsMTMgQEAKIAogLy8gZmluZCB3aGVyZSBvYmplY3RpZCBtYXAgc3RhcnRzCiAjZGVmaW5lIG9iamVjdGlkX21hcChzLHJzKSAob2xkX2Zvcm1hdF9vbmx5IChzKSA/IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoX191MzIgKikoKHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9ja192MSAqKShycykgKyAxKSA6XAotCQkJIChfX3UzMiAqKSgocnMpICsgMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbGUzMiAqKSgoc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrX3YxICopKHJzKSArIDEpIDpcCisJCQkgKF9fbGUzMiAqKSgocnMpICsgMSkpCiAKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCi1zdGF0aWMgdm9pZCBjaGVja19vYmplY3RpZF9tYXAgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHMsIF9fdTMyICogbWFwKQorc3RhdGljIHZvaWQgY2hlY2tfb2JqZWN0aWRfbWFwIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzLCBfX2xlMzIgKiBtYXApCiB7CiAgICAgaWYgKGxlMzJfdG9fY3B1IChtYXBbMF0pICE9IDEpCiAJcmVpc2VyZnNfcGFuaWMgKHMsICJ2cy0xNTAxMDogY2hlY2tfb2JqZWN0aWRfbWFwOiBtYXAgY29ycnVwdGVkOiAlbHgiLApAQCAtMjcsNyArMjcsNyBAQAogfQogCiAjZWxzZQotc3RhdGljIHZvaWQgY2hlY2tfb2JqZWN0aWRfbWFwIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzLCBfX3UzMiAqIG1hcCkKK3N0YXRpYyB2b2lkIGNoZWNrX29iamVjdGlkX21hcCAoc3RydWN0IHN1cGVyX2Jsb2NrICogcywgX19sZTMyICogbWFwKQogezt9CiAjZW5kaWYKIApAQCAtNTIsNyArNTIsNyBAQAogewogICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqIHMgPSB0aC0+dF9zdXBlcjsKICAgICBzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgKiBycyA9IFNCX0RJU0tfU1VQRVJfQkxPQ0sgKHMpOwotICAgIF9fdTMyICogbWFwID0gb2JqZWN0aWRfbWFwIChzLCBycyk7CisgICAgX19sZTMyICogbWFwID0gb2JqZWN0aWRfbWFwIChzLCBycyk7CiAgICAgX191MzIgdW51c2VkX29iamVjdGlkOwogCiAgICAgQlVHX09OICghdGgtPnRfdHJhbnNfaWQpOwpAQCAtOTcsNyArOTcsNyBAQAogewogICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqIHMgPSB0aC0+dF9zdXBlcjsKICAgICBzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgKiBycyA9IFNCX0RJU0tfU1VQRVJfQkxPQ0sgKHMpOwotICAgIF9fdTMyICogbWFwID0gb2JqZWN0aWRfbWFwIChzLCBycyk7CisgICAgX19sZTMyICogbWFwID0gb2JqZWN0aWRfbWFwIChzLCBycyk7CiAgICAgaW50IGkgPSAwOwogCiAgICAgQlVHX09OICghdGgtPnRfdHJhbnNfaWQpOwpAQCAtMTcyLDEyICsxNzIsMTIgQEAKICAgICBpbnQgbmV3X3NpemUgPSAocy0+c19ibG9ja3NpemUgLSBTQl9TSVpFKSAvIHNpemVvZihfX3UzMikgLyAyICogMiA7CiAgICAgaW50IG9sZF9tYXggPSBzYl9vaWRfbWF4c2l6ZShkaXNrX3NiKTsKICAgICBzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2tfdjEgKmRpc2tfc2JfdjEgOwotICAgIF9fdTMyICpvYmplY3RpZF9tYXAsICpuZXdfb2JqZWN0aWRfbWFwIDsKKyAgICBfX2xlMzIgKm9iamVjdGlkX21hcCwgKm5ld19vYmplY3RpZF9tYXAgOwogICAgIGludCBpIDsKIAogICAgIGRpc2tfc2JfdjE9KHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9ja192MSAqKShTQl9CVUZGRVJfV0lUSF9TQihzKS0+Yl9kYXRhKTsKLSAgICBvYmplY3RpZF9tYXAgPSAoX191MzIgKikoZGlza19zYl92MSArIDEpIDsKLSAgICBuZXdfb2JqZWN0aWRfbWFwID0gKF9fdTMyICopKGRpc2tfc2IgKyAxKSA7CisgICAgb2JqZWN0aWRfbWFwID0gKF9fbGUzMiAqKShkaXNrX3NiX3YxICsgMSkgOworICAgIG5ld19vYmplY3RpZF9tYXAgPSAoX19sZTMyICopKGRpc2tfc2IgKyAxKSA7CiAKICAgICBpZiAoY3VyX3NpemUgPiBuZXdfc2l6ZSkgewogCS8qIG1hcmsgZXZlcnlvbmUgdXNlZCB0aGF0IHdhcyBsaXN0ZWQgYXMgZnJlZSBhdCB0aGUgZW5kIG9mIHRoZSBvYmplY3RpZApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvcHJvY2ZzLmMgYi9mcy9yZWlzZXJmcy9wcm9jZnMuYwppbmRleCBmNGVhODFhLi5lMjQyZWJjIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9wcm9jZnMuYworKysgYi9mcy9yZWlzZXJmcy9wcm9jZnMuYwpAQCAtNzMsOCArNzMsOCBAQAogI2RlZmluZSBERkwoIHggKSBENEMoIHJzIC0+IHNfdjEueCApCiAKICNkZWZpbmUgb2JqZWN0aWRfbWFwKCBzLCBycyApIChvbGRfZm9ybWF0X29ubHkgKHMpID8JCQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgIChfX3UzMiAqKSgoc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrX3YxICopcnMgKyAxKSA6CVwKLQkJCSAoX191MzIgKikocnMgKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAoX19sZTMyICopKChzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2tfdjEgKilycyArIDEpIDoJXAorCQkJIChfX2xlMzIgKikocnMgKyAxKSkKICNkZWZpbmUgTUFQKCBpICkgRDRDKCBvYmplY3RpZF9tYXAoIHNiLCBycyApWyBpIF0gKQogCiAjZGVmaW5lIERKRiggeCApIGxlMzJfdG9fY3B1KCBycyAtPiB4ICkKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMgYi9mcy9yZWlzZXJmcy9zdHJlZS5jCmluZGV4IDczZWM1MjEuLmRhMjNiYTcgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMKKysrIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwpAQCAtODcsMjIgKzg3LDIwIEBACiBpbmxpbmUgaW50ICBjb21wX3Nob3J0X2tleXMgKGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKiBsZV9rZXksCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICogY3B1X2tleSkKIHsKLSAgX191MzIgKiBwX3NfbGVfdTMyLCAqIHBfc19jcHVfdTMyOwotICBpbnQgbl9rZXlfbGVuZ3RoID0gUkVJU0VSRlNfU0hPUlRfS0VZX0xFTjsKLQotICBwX3NfbGVfdTMyID0gKF9fdTMyICopbGVfa2V5OwotICBwX3NfY3B1X3UzMiA9IChfX3UzMiAqKSZjcHVfa2V5LT5vbl9kaXNrX2tleTsKLSAgZm9yKCA7IG5fa2V5X2xlbmd0aC0tOyArK3Bfc19sZV91MzIsICsrcF9zX2NwdV91MzIgKSB7Ci0gICAgaWYgKCBsZTMyX3RvX2NwdSAoKnBfc19sZV91MzIpIDwgKnBfc19jcHVfdTMyICkKKyAgX191MzIgbjsKKyAgbiA9IGxlMzJfdG9fY3B1KGxlX2tleS0+a19kaXJfaWQpOworICBpZiAobiA8IGNwdV9rZXktPm9uX2Rpc2tfa2V5LmtfZGlyX2lkKQogICAgICAgcmV0dXJuIC0xOwotICAgIGlmICggbGUzMl90b19jcHUgKCpwX3NfbGVfdTMyKSA+ICpwX3NfY3B1X3UzMiApCisgIGlmIChuID4gY3B1X2tleS0+b25fZGlza19rZXkua19kaXJfaWQpCiAgICAgICByZXR1cm4gMTsKLSAgfQotCisgIG4gPSBsZTMyX3RvX2NwdShsZV9rZXktPmtfb2JqZWN0aWQpOworICBpZiAobiA8IGNwdV9rZXktPm9uX2Rpc2tfa2V5Lmtfb2JqZWN0aWQpCisgICAgICByZXR1cm4gLTE7CisgIGlmIChuID4gY3B1X2tleS0+b25fZGlza19rZXkua19vYmplY3RpZCkKKyAgICAgIHJldHVybiAxOwogICByZXR1cm4gMDsKIH0KIAotCiAvKiBrMSBpcyBwb2ludGVyIHRvIG9uLWRpc2sgc3RydWN0dXJlIHdoaWNoIGlzIHN0b3JlZCBpbiBsaXR0bGUtZW5kaWFuCiAgICBmb3JtLiBrMiBpcyBwb2ludGVyIHRvIGNwdSB2YXJpYWJsZS4KICAgIENvbXBhcmUga2V5cyB1c2luZyBhbGwgNCBrZXkgZmllbGRzLgpAQCAtMTUyLDE4ICsxNTAsMTUgQEAKIAogaW5saW5lIHZvaWQgbGVfa2V5MmNwdV9rZXkgKHN0cnVjdCBjcHVfa2V5ICogdG8sIGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKiBmcm9tKQogeworICAgIGludCB2ZXJzaW9uOwogICAgIHRvLT5vbl9kaXNrX2tleS5rX2Rpcl9pZCA9IGxlMzJfdG9fY3B1IChmcm9tLT5rX2Rpcl9pZCk7CiAgICAgdG8tPm9uX2Rpc2tfa2V5Lmtfb2JqZWN0aWQgPSBsZTMyX3RvX2NwdSAoZnJvbS0+a19vYmplY3RpZCk7CiAgICAgCiAgICAgLy8gZmluZCBvdXQgdmVyc2lvbiBvZiB0aGUga2V5Ci0gICAgdG8tPnZlcnNpb24gPSBsZV9rZXlfdmVyc2lvbiAoZnJvbSk7Ci0gICAgaWYgKHRvLT52ZXJzaW9uID09IEtFWV9GT1JNQVRfM181KSB7Ci0JdG8tPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjEua19vZmZzZXQgPSBsZTMyX3RvX2NwdSAoZnJvbS0+dS5rX29mZnNldF92MS5rX29mZnNldCk7Ci0JdG8tPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjEua191bmlxdWVuZXNzID0gbGUzMl90b19jcHUgKGZyb20tPnUua19vZmZzZXRfdjEua191bmlxdWVuZXNzKTsKLSAgICB9IGVsc2UgewotCXRvLT5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YyLmtfb2Zmc2V0ID0gb2Zmc2V0X3YyX2tfb2Zmc2V0KCZmcm9tLT51Lmtfb2Zmc2V0X3YyKTsKLQl0by0+b25fZGlza19rZXkudS5rX29mZnNldF92Mi5rX3R5cGUgPSBvZmZzZXRfdjJfa190eXBlKCZmcm9tLT51Lmtfb2Zmc2V0X3YyKTsKLSAgICB9IAorICAgIHZlcnNpb24gPSBsZV9rZXlfdmVyc2lvbiAoZnJvbSk7CisgICAgdG8tPnZlcnNpb24gPSB2ZXJzaW9uOworICAgIHRvLT5vbl9kaXNrX2tleS5rX29mZnNldCA9IGxlX2tleV9rX29mZnNldCh2ZXJzaW9uLCBmcm9tKTsKKyAgICB0by0+b25fZGlza19rZXkua190eXBlID0gbGVfa2V5X2tfdHlwZSh2ZXJzaW9uLCBmcm9tKTsKIH0KIAogCkBAIC0yMjgsOCArMjIzLDE0IEBACiBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICBNSU5fS0VZID0gezAsIDAsIHt7MCwgMH0sfX07CiAKIC8qIE1heGltYWwgcG9zc2libGUga2V5LiBJdCBpcyBuZXZlciBpbiB0aGUgdHJlZS4gKi8KLWNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgIE1BWF9LRVkgPSB7MHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwge3sweGZmZmZmZmZmLCAweGZmZmZmZmZmfSx9fTsKK2NvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgIE1BWF9LRVkgPSB7CisJX19jb25zdGFudF9jcHVfdG9fbGUzMigweGZmZmZmZmZmKSwKKwlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4ZmZmZmZmZmYpLAorCXt7X19jb25zdGFudF9jcHVfdG9fbGUzMigweGZmZmZmZmZmKSwKKwlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4ZmZmZmZmZmYpfSx9Cit9OwogCitjb25zdCBzdHJ1Y3QgaW5fY29yZV9rZXkgIE1BWF9JTl9DT1JFX0tFWSA9IHt+MFUsIH4wVSwgfjBVTEw+PjQsIDE1fTsKIAogLyogR2V0IGRlbGltaXRpbmcga2V5IG9mIHRoZSBidWZmZXIgYnkgbG9va2luZyBmb3IgaXQgaW4gdGhlIGJ1ZmZlcnMgaW4gdGhlIHBhdGgsIHN0YXJ0aW5nIGZyb20gdGhlIGJvdHRvbQogICAgb2YgdGhlIHBhdGgsIGFuZCBnb2luZyB1cHdhcmRzLiAgV2UgbXVzdCBjaGVjayB0aGUgcGF0aCdzIHZhbGlkaXR5IGF0IGVhY2ggc3RlcC4gIElmIHRoZSBrZXkgaXMgbm90IGluCkBAIC05OTcsNyArOTk4LDcgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgbl91bmZtX251bWJlciwgICAgLyogTnVtYmVyIG9mIHRoZSBpdGVtIHVuZm9ybWF0dGVkIG5vZGVzLiAqLwogCSAgICBuX2NvdW50ZXIsCiAJICAgIG5fYmxrX3NpemU7Ci0JX191MzIgICAgICAgICAgICAgICAqIHBfbl91bmZtX3BvaW50ZXI7IC8qIFBvaW50ZXIgdG8gdGhlIHVuZm9ybWF0dGVkIG5vZGUgbnVtYmVyLiAqLworCV9fbGUzMiAgICAgICAgICAgICAgICogcF9uX3VuZm1fcG9pbnRlcjsgLyogUG9pbnRlciB0byB0aGUgdW5mb3JtYXR0ZWQgbm9kZSBudW1iZXIuICovCiAJX191MzIgdG1wOwogCXN0cnVjdCBpdGVtX2hlYWQgICAgICBzX2loOyAgICAgICAgICAgLyogSXRlbSBoZWFkZXIuICovCiAJY2hhciAgICAgICAgICAgICAgICAgIGNfbW9kZTsgICAgICAgICAgIC8qIFJldHVybmVkIG1vZGUgb2YgdGhlIGJhbGFuY2UuICovCkBAIC0xMDU5LDcgKzEwNjAsNyBAQAogCSAgICAvKiBwb2ludGVycyB0byBiZSBjdXQgKi8KIAkgICAgbl91bmZtX251bWJlciAtPSBwb3NfaW5faXRlbSAocF9zX3BhdGgpOwogCSAgICAvKiBTZXQgcG9pbnRlciB0byB0aGUgbGFzdCB1bmZvcm1hdHRlZCBub2RlIHBvaW50ZXIgdGhhdCBpcyB0byBiZSBjdXQuICovCi0JICAgIHBfbl91bmZtX3BvaW50ZXIgPSAoX191MzIgKilCX0lfUElURU0ocF9zX2JoLCAmc19paCkgKyBJX1VORk1fTlVNKCZzX2loKSAtIDEgLSAqcF9uX3JlbW92ZWQ7CisJICAgIHBfbl91bmZtX3BvaW50ZXIgPSAoX19sZTMyICopQl9JX1BJVEVNKHBfc19iaCwgJnNfaWgpICsgSV9VTkZNX05VTSgmc19paCkgLSAxIC0gKnBfbl9yZW1vdmVkOwogCiAKIAkgICAgLyogV2UgZ28gdGhyb3VnaCB0aGUgdW5mb3JtYXR0ZWQgbm9kZXMgcG9pbnRlcnMgb2YgdGhlIGluZGlyZWN0CkBAIC0xMDgxLDggKzEwODIsOCBAQAogCQkgICAgbmVlZF9yZXNlYXJjaCA9IDEgOwogCQkgICAgYnJlYWs7CiAJCX0KLQkJUkZBTFNFKCBwX25fdW5mbV9wb2ludGVyIDwgKF9fdTMyICopQl9JX1BJVEVNKHBfc19iaCwgJnNfaWgpIHx8Ci0JCQlwX25fdW5mbV9wb2ludGVyID4gKF9fdTMyICopQl9JX1BJVEVNKHBfc19iaCwgJnNfaWgpICsgSV9VTkZNX05VTSgmc19paCkgLSAxLAorCQlSRkFMU0UoIHBfbl91bmZtX3BvaW50ZXIgPCAoX19sZTMyICopQl9JX1BJVEVNKHBfc19iaCwgJnNfaWgpIHx8CisJCQlwX25fdW5mbV9wb2ludGVyID4gKF9fbGUzMiAqKUJfSV9QSVRFTShwX3NfYmgsICZzX2loKSArIElfVU5GTV9OVU0oJnNfaWgpIC0gMSwKIAkJCSJ2cy01MjY1OiBwb2ludGVyIG91dCBvZiByYW5nZSIpOwogCiAJCS8qIEhvbGUsIG5vdGhpbmcgdG8gcmVtb3ZlLiAqLwpAQCAtMTQzMSw3ICsxNDMyLDcgQEAKICNpZiBkZWZpbmVkKCBVU0VfSU5PREVfR0VORVJBVElPTl9DT1VOVEVSICkKICAgICBpZiggIW9sZF9mb3JtYXRfb25seSAoIHRoIC0+IHRfc3VwZXIgKSApCiAgICAgICB7Ci0gICAgICAgX191MzIgKmlub2RlX2dlbmVyYXRpb247CisgICAgICAgX19sZTMyICppbm9kZV9nZW5lcmF0aW9uOwogICAgICAgIAogICAgICAgIGlub2RlX2dlbmVyYXRpb24gPSAKICAgICAgICAgICZSRUlTRVJGU19TQih0aCAtPiB0X3N1cGVyKSAtPiBzX3JzIC0+IHNfaW5vZGVfZ2VuZXJhdGlvbjsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMgYi9mcy9yZWlzZXJmcy9zdXBlci5jCmluZGV4IGJjZGYyNDMuLjMxZTc1MTIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMKKysrIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAgIHJlaXNlcmZzX2FsbG93X3dyaXRlcyhzKSA7CiB9CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICBNQVhfS0VZOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbl9jb3JlX2tleSAgTUFYX0lOX0NPUkVfS0VZOwogCiAKIC8qIHRoaXMgaXMgdXNlZCB0byBkZWxldGUgInNhdmUgbGluayIgd2hlbiB0aGVyZSBhcmUgbm8gaXRlbXMgb2YgYQpAQCAtMTY0LDcgKzE2NCw3IEBACiAgCiAgICAgLyogY29tcG9zZSBrZXkgdG8gbG9vayBmb3IgInNhdmUiIGxpbmtzICovCiAgICAgbWF4X2NwdV9rZXkudmVyc2lvbiA9IEtFWV9GT1JNQVRfM181OwotICAgIG1heF9jcHVfa2V5Lm9uX2Rpc2tfa2V5ID0gTUFYX0tFWTsKKyAgICBtYXhfY3B1X2tleS5vbl9kaXNrX2tleSA9IE1BWF9JTl9DT1JFX0tFWTsKICAgICBtYXhfY3B1X2tleS5rZXlfbGVuZ3RoID0gMzsKIAogI2lmZGVmIENPTkZJR19RVU9UQQpAQCAtMjE2LDEwICsyMTYsMTAgQEAKICAKICAgICAgICAgLyogcmVpc2VyZnNfaWdldCBuZWVkcyBrX2RpcmlkIGFuZCBrX29iamVjdGlkIG9ubHkgKi8KICAgICAgICAgaXRlbSA9IEJfSV9QSVRFTSAoYmgsIGloKTsKLSAgICAgICAgb2JqX2tleS5vbl9kaXNrX2tleS5rX2Rpcl9pZCA9IGxlMzJfdG9fY3B1ICgqKF9fdTMyICopaXRlbSk7CisgICAgICAgIG9ial9rZXkub25fZGlza19rZXkua19kaXJfaWQgPSBsZTMyX3RvX2NwdSAoKihfX2xlMzIgKilpdGVtKTsKICAgICAgICAgb2JqX2tleS5vbl9kaXNrX2tleS5rX29iamVjdGlkID0gbGUzMl90b19jcHUgKGloLT5paF9rZXkua19vYmplY3RpZCk7Ci0Jb2JqX2tleS5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YxLmtfb2Zmc2V0ID0gMDsKLQlvYmpfa2V5Lm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjEua191bmlxdWVuZXNzID0gMDsKKwlvYmpfa2V5Lm9uX2Rpc2tfa2V5Lmtfb2Zmc2V0ID0gMDsKKwlvYmpfa2V5Lm9uX2Rpc2tfa2V5LmtfdHlwZSA9IDA7CiAJCiAgICAgICAgIHBhdGhyZWxzZSAoJnBhdGgpOwogIApAQCAtMzA0LDcgKzMwNCw3IEBACiAgICAgaW50IHJldHZhbDsKICAgICBzdHJ1Y3QgY3B1X2tleSBrZXk7CiAgICAgc3RydWN0IGl0ZW1faGVhZCBpaDsKLSAgICBfX3UzMiBsaW5rOworICAgIF9fbGUzMiBsaW5rOwogCiAgICAgQlVHX09OICghdGgtPnRfdHJhbnNfaWQpOwogCkBAIC04ODksMTIgKzg4OSwxOCBAQAogCSAgICBjaGFyICogcDsKIAkgICAgCiAJICAgIHAgPSBOVUxMOwotCSAgICAvKiAicmVzaXplPU5OTiIgKi8KLQkgICAgKmJsb2NrcyA9IHNpbXBsZV9zdHJ0b3VsIChhcmcsICZwLCAwKTsKLQkgICAgaWYgKCpwICE9ICdcMCcpIHsKLQkJLyogTk5OIGRvZXMgbm90IGxvb2sgbGlrZSBhIG51bWJlciAqLwotCQlyZWlzZXJmc193YXJuaW5nIChzLCAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogYmFkIHZhbHVlICVzIiwgYXJnKTsKLQkJcmV0dXJuIDA7CisJICAgIC8qICJyZXNpemU9Tk5OIiBvciAicmVzaXplPWF1dG8iICovCisKKwkgICAgaWYgKCFzdHJjbXAoYXJnLCAiYXV0byIpKSB7CisJCSAgICAvKiBGcm9tIEpGUyBjb2RlLCB0byBhdXRvLWdldCB0aGUgc2l6ZS4qLworCQkgICAgKmJsb2NrcyA9IHMtPnNfYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiBzLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCSAgICB9IGVsc2UgeworCQkgICAgKmJsb2NrcyA9IHNpbXBsZV9zdHJ0b3VsIChhcmcsICZwLCAwKTsKKwkJICAgIGlmICgqcCAhPSAnXDAnKSB7CisJCQkvKiBOTk4gZG9lcyBub3QgbG9vayBsaWtlIGEgbnVtYmVyICovCisJCQlyZWlzZXJmc193YXJuaW5nIChzLCAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogYmFkIHZhbHVlICVzIiwgYXJnKTsKKwkJCXJldHVybiAwOworCQkgICAgfQogCSAgICB9CiAJfQogCkBAIC05MDMsNyArOTA5LDggQEAKIAkJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bCAoYXJnLCAmcCwgMCk7CiAJCS8qIGNvbW1pdD1OTk4gKHRpbWUgaW4gc2Vjb25kcykgKi8KIAkJaWYgKCAqcCAhPSAnXDAnIHx8IHZhbCA+PSAodW5zaWduZWQgaW50KS0xKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nIChzLCAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogYmFkIHZhbHVlICVzIiwgYXJnKTsJCQlyZXR1cm4gMDsKKwkJCXJlaXNlcmZzX3dhcm5pbmcgKHMsICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBiYWQgdmFsdWUgJXMiLCBhcmcpOworCQkJcmV0dXJuIDA7CiAJCX0KIAkJKmNvbW1pdF9tYXhfYWdlID0gKHVuc2lnbmVkIGludCl2YWw7CiAJfQpAQCAtMTMyOSw3ICsxMzM2LDcgQEAKIAlyZXR1cm4gMTsKICAgICB9CiAKLSAgICBpZiAoIHJzLT5zX3YxLnNfcm9vdF9ibG9jayA9PSAtMSApIHsKKyAgICBpZiAoIHJzLT5zX3YxLnNfcm9vdF9ibG9jayA9PSBjcHVfdG9fbGUzMigtMSkgKSB7CiAgICAgICAgYnJlbHNlKGJoKSA7CiAgICAgICAgcmVpc2VyZnNfd2FybmluZyAocywgIlVuZmluaXNoZWQgcmVpc2VyZnNjayAtLXJlYnVpbGQtdHJlZSBydW4gZGV0ZWN0ZWQuIFBsZWFzZSBydW5cbiIKICAgICAgICAgICAgICAgInJlaXNlcmZzY2sgLS1yZWJ1aWxkLXRyZWUgYW5kIHdhaXQgZm9yIGEgY29tcGxldGlvbi4gSWYgdGhhdCBmYWlsc1xuIgpkaWZmIC0tZ2l0IGEvZnMvc2VsZWN0LmMgYi9mcy9zZWxlY3QuYwppbmRleCAyNWIxY2NhLi5iODBlN2ViIDEwMDY0NAotLS0gYS9mcy9zZWxlY3QuYworKysgYi9mcy9zZWxlY3QuYwpAQCAtNTUsNyArNTUsOCBAQAogICogYXMgYWxsIHNlbGVjdC9wb2xsIGZ1bmN0aW9ucyBoYXZlIHRvIGNhbGwgaXQgdG8gYWRkIGFuIGVudHJ5IHRvIHRoZQogICogcG9sbCB0YWJsZS4KICAqLwotdm9pZCBfX3BvbGx3YWl0KHN0cnVjdCBmaWxlICpmaWxwLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd2FpdF9hZGRyZXNzLCBwb2xsX3RhYmxlICpwKTsKK3N0YXRpYyB2b2lkIF9fcG9sbHdhaXQoc3RydWN0IGZpbGUgKmZpbHAsIHdhaXRfcXVldWVfaGVhZF90ICp3YWl0X2FkZHJlc3MsCisJCSAgICAgICBwb2xsX3RhYmxlICpwKTsKIAogdm9pZCBwb2xsX2luaXR3YWl0KHN0cnVjdCBwb2xsX3dxdWV1ZXMgKnB3cSkKIHsKQEAgLTg3LDcgKzg4LDggQEAKIAogRVhQT1JUX1NZTUJPTChwb2xsX2ZyZWV3YWl0KTsKIAotdm9pZCBfX3BvbGx3YWl0KHN0cnVjdCBmaWxlICpmaWxwLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd2FpdF9hZGRyZXNzLCBwb2xsX3RhYmxlICpfcCkKK3N0YXRpYyB2b2lkIF9fcG9sbHdhaXQoc3RydWN0IGZpbGUgKmZpbHAsIHdhaXRfcXVldWVfaGVhZF90ICp3YWl0X2FkZHJlc3MsCisJCSAgICAgICBwb2xsX3RhYmxlICpfcCkKIHsKIAlzdHJ1Y3QgcG9sbF93cXVldWVzICpwID0gY29udGFpbmVyX29mKF9wLCBzdHJ1Y3QgcG9sbF93cXVldWVzLCBwdCk7CiAJc3RydWN0IHBvbGxfdGFibGVfcGFnZSAqdGFibGUgPSBwLT50YWJsZTsKZGlmZiAtLWdpdCBhL2ZzL3NlcV9maWxlLmMgYi9mcy9zZXFfZmlsZS5jCmluZGV4IDY1MGM0M2IuLjM4ZWY5MTMgMTAwNjQ0Ci0tLSBhL2ZzL3NlcV9maWxlLmMKKysrIGIvZnMvc2VxX2ZpbGUuYwpAQCAtNTEsNyArNTEsMTAgQEAKIAogLyoqCiAgKglzZXFfcmVhZCAtCS0+cmVhZCgpIG1ldGhvZCBmb3Igc2VxdWVudGlhbCBmaWxlcy4KLSAqCUBmaWxlLCBAYnVmLCBAc2l6ZSwgQHBwb3M6IHNlZSBmaWxlX29wZXJhdGlvbnMgbWV0aG9kCisgKglAZmlsZTogdGhlIGZpbGUgdG8gcmVhZCBmcm9tCisgKglAYnVmOiB0aGUgYnVmZmVyIHRvIHJlYWQgdG8KKyAqCUBzaXplOiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICoJQHBwb3M6IHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBmaWxlCiAgKgogICoJUmVhZHktbWFkZSAtPmZfb3AtPnJlYWQoKQogICovCkBAIC0yMTksNyArMjIyLDkgQEAKIAogLyoqCiAgKglzZXFfbHNlZWsgLQktPmxsc2VlaygpIG1ldGhvZCBmb3Igc2VxdWVudGlhbCBmaWxlcy4KLSAqCUBmaWxlLCBAb2Zmc2V0LCBAb3JpZ2luOiBzZWUgZmlsZV9vcGVyYXRpb25zIG1ldGhvZAorICoJQGZpbGU6IHRoZSBmaWxlIGluIHF1ZXN0aW9uCisgKglAb2Zmc2V0OiBuZXcgcG9zaXRpb24KKyAqCUBvcmlnaW46IDAgZm9yIGFic29sdXRlLCAxIGZvciByZWxhdGl2ZSBwb3NpdGlvbgogICoKICAqCVJlYWR5LW1hZGUgLT5mX29wLT5sbHNlZWsoKQogICovCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9maWxlLmMgYi9mcy9zeXNmcy9maWxlLmMKaW5kZXggZGEyNWFlYi4uMzY0MjA4MCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZmlsZS5jCisrKyBiL2ZzL3N5c2ZzL2ZpbGUuYwpAQCAtOTYsNyArOTYsNyBAQAogLyoqCiAgKglmbHVzaF9yZWFkX2J1ZmZlciAtIHB1c2ggYnVmZmVyIHRvIHVzZXJzcGFjZS4KICAqCUBidWZmZXI6CWRhdGEgYnVmZmVyIGZvciBmaWxlLgotICoJQHVzZXJidWY6CXVzZXItcGFzc2VkIGJ1ZmZlci4KKyAqCUBidWY6CQl1c2VyLXBhc3NlZCBidWZmZXIuCiAgKglAY291bnQ6CQludW1iZXIgb2YgYnl0ZXMgcmVxdWVzdGVkLgogICoJQHBwb3M6CQlmaWxlIHBvc2l0aW9uLgogICoKQEAgLTE2NCw3ICsxNjQsNyBAQAogLyoqCiAgKglmaWxsX3dyaXRlX2J1ZmZlciAtIGNvcHkgYnVmZmVyIGZyb20gdXNlcnNwYWNlLgogICoJQGJ1ZmZlcjoJZGF0YSBidWZmZXIgZm9yIGZpbGUuCi0gKglAdXNlcmJ1ZjoJZGF0YSBmcm9tIHVzZXIuCisgKglAYnVmOgkJZGF0YSBmcm9tIHVzZXIuCiAgKglAY291bnQ6CQludW1iZXIgb2YgYnl0ZXMgaW4gQHVzZXJidWYuCiAgKgogICoJQWxsb2NhdGUgQGJ1ZmZlci0+cGFnZSBpZiBpdCBoYXNuJ3QgYmVlbiBhbHJlYWR5LCB0aGVuCmRpZmYgLS1naXQgYS9mcy91ZGYvZmlsZS5jIGIvZnMvdWRmL2ZpbGUuYwppbmRleCAyZmFhNDE3Li5iYjQwZDYzIDEwMDY0NAotLS0gYS9mcy91ZGYvZmlsZS5jCisrKyBiL2ZzL3VkZi9maWxlLmMKQEAgLTQ5LDggKzQ5LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAljaGFyICprYWRkcjsKIAotCWlmICghUGFnZUxvY2tlZChwYWdlKSkKLQkJUEFHRV9CVUcocGFnZSk7CisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAogCWthZGRyID0ga21hcChwYWdlKTsKIAltZW1zZXQoa2FkZHIsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CkBAIC02Nyw4ICs2Niw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CiAJY2hhciAqa2FkZHI7CiAKLQlpZiAoIVBhZ2VMb2NrZWQocGFnZSkpCi0JCVBBR0VfQlVHKHBhZ2UpOworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAKIAlrYWRkciA9IGttYXAocGFnZSk7CiAJbWVtY3B5KFVERl9JX0RBVEEoaW5vZGUpICsgVURGX0lfTEVORUFUVFIoaW5vZGUpLCBrYWRkciwgaW5vZGUtPmlfc2l6ZSk7CmRpZmYgLS1naXQgYS9mcy91ZGYvaW5vZGUuYyBiL2ZzL3VkZi9pbm9kZS5jCmluZGV4IDA1MDZlMTEuLjNkNjhkZTMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9pbm9kZS5jCisrKyBiL2ZzL3VkZi9pbm9kZS5jCkBAIC0xNjcsOCArMTY3LDggQEAKIAl9CiAKIAlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIDApOwotCWlmICghUGFnZUxvY2tlZChwYWdlKSkKLQkJUEFHRV9CVUcocGFnZSk7CisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKwogCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKQogCXsKIAkJa2FkZHIgPSBrbWFwKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZnRpbWUuYyBiL2ZzL3VkZi91ZGZ0aW1lLmMKaW5kZXggYzI2MzRiZC4uNDU3YThmZSAxMDA2NDQKLS0tIGEvZnMvdWRmL3VkZnRpbWUuYworKysgYi9mcy91ZGYvdWRmdGltZS5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJb2Zmc2V0ID0gMDsKIAogCWlmICgoc3JjLnllYXIgPCBFUE9DSF9ZRUFSKSB8fAotCQkoc3JjLnllYXIgPiBFUE9DSF9ZRUFSK01BWF9ZRUFSX1NFQ09ORFMpKQorCQkoc3JjLnllYXIgPj0gRVBPQ0hfWUVBUitNQVhfWUVBUl9TRUNPTkRTKSkKIAl7CiAJCSpkZXN0ID0gLTE7CiAJCSpkZXN0X3VzZWMgPSAtMTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZQppbmRleCA1NTRlNGExLi5kM2ZmNzgzIDEwMDY0NAotLS0gYS9mcy94ZnMvTWFrZWZpbGUKKysrIGIvZnMveGZzL01ha2VmaWxlCkBAIC00OSw3ICs0OSw3IEBACiAJRVhUUkFfQ0ZMQUdTICs9IC1EWEZTX0xPR19UUkFDRQogCUVYVFJBX0NGTEFHUyArPSAtRFhGU19SV19UUkFDRQogCUVYVFJBX0NGTEFHUyArPSAtRFBBR0VCVUZfVFJBQ0UKLQkjIEVYVFJBX0NGTEFHUyArPSAtRFhGU19WTk9ERV9UUkFDRQorCUVYVFJBX0NGTEFHUyArPSAtRFhGU19WTk9ERV9UUkFDRQogZW5kaWYKIAogb2JqLSQoQ09ORklHX1hGU19GUykJCSs9IHhmcy5vCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKaW5kZXggNzZhODQ3NS4uOTI3OGU5YSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwpAQCAtNTU4LDcgKzU1OCw4IEBACiAJaW50CQkJaTsKIAogCUJVR19PTihQYWdlV3JpdGViYWNrKHBhZ2UpKTsKLQlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CisJaWYgKGJoX2NvdW50KQorCQlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CiAJaWYgKGNsZWFyX2RpcnR5KQogCQljbGVhcl9wYWdlX2RpcnR5KHBhZ2UpOwogCXVubG9ja19wYWdlKHBhZ2UpOwpAQCAtNTc4LDkgKzU3OSw2IEBACiAKIAkJaWYgKHByb2JlZF9wYWdlICYmIGNsZWFyX2RpcnR5KQogCQkJd2JjLT5ucl90b193cml0ZS0tOwkvKiBXcm90ZSBhbiAiZXh0cmEiIHBhZ2UgKi8KLQl9IGVsc2UgewotCQllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7Ci0JCXdiYy0+cGFnZXNfc2tpcHBlZCsrOwkvKiBXZSBkaWRuJ3Qgd3JpdGUgdGhpcyBwYWdlICovCiAJfQogfQogCkBAIC02MDIsMjEgKzYwMCwyNiBAQAogewogCXN0cnVjdCBidWZmZXJfaGVhZAkqYmhfYXJyW01BWF9CVUZfUEVSX1BBR0VdLCAqYmgsICpoZWFkOwogCXhmc19pb21hcF90CQkqbXAgPSBpb21hcHAsICp0bXA7Ci0JdW5zaWduZWQgbG9uZwkJZW5kLCBvZmZzZXQ7Ci0JcGdvZmZfdAkJCWVuZF9pbmRleDsKLQlpbnQJCQlpID0gMCwgaW5kZXggPSAwOworCXVuc2lnbmVkIGxvbmcJCW9mZnNldCwgZW5kX29mZnNldDsKKwlpbnQJCQlpbmRleCA9IDA7CiAJaW50CQkJYmJpdHMgPSBpbm9kZS0+aV9ibGtiaXRzOworCWludAkJCWxlbiwgcGFnZV9kaXJ0eTsKIAotCWVuZF9pbmRleCA9IGlfc2l6ZV9yZWFkKGlub2RlKSA+PiBQQUdFX0NBQ0hFX1NISUZUOwotCWlmIChwYWdlLT5pbmRleCA8IGVuZF9pbmRleCkgewotCQllbmQgPSBQQUdFX0NBQ0hFX1NJWkU7Ci0JfSBlbHNlIHsKLQkJZW5kID0gaV9zaXplX3JlYWQoaW5vZGUpICYgKFBBR0VfQ0FDSEVfU0laRS0xKTsKLQl9CisJZW5kX29mZnNldCA9IChpX3NpemVfcmVhZChpbm9kZSkgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSkpOworCisJLyoKKwkgKiBwYWdlX2RpcnR5IGlzIGluaXRpYWxseSBhIGNvdW50IG9mIGJ1ZmZlcnMgb24gdGhlIHBhZ2UgYmVmb3JlCisJICogRU9GIGFuZCBpcyBkZWNyZW1lbXRlZCBhcyB3ZSBtb3ZlIGVhY2ggaW50byBhIGNsZWFuYWJsZSBzdGF0ZS4KKwkgKi8KKwlsZW4gPSAxIDw8IGlub2RlLT5pX2Jsa2JpdHM7CisJZW5kX29mZnNldCA9IG1heChlbmRfb2Zmc2V0LCBQQUdFX0NBQ0hFX1NJWkUpOworCWVuZF9vZmZzZXQgPSByb3VuZHVwKGVuZF9vZmZzZXQsIGxlbik7CisJcGFnZV9kaXJ0eSA9IGVuZF9vZmZzZXQgLyBsZW47CisKKwlvZmZzZXQgPSAwOwogCWJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKIAlkbyB7Ci0JCW9mZnNldCA9IGkgPDwgYmJpdHM7Ci0JCWlmIChvZmZzZXQgPj0gZW5kKQorCQlpZiAob2Zmc2V0ID49IGVuZF9vZmZzZXQpCiAJCQlicmVhazsKIAkJaWYgKCEoUGFnZVVwdG9kYXRlKHBhZ2UpIHx8IGJ1ZmZlcl91cHRvZGF0ZShiaCkpKQogCQkJY29udGludWU7CkBAIC02MjUsNiArNjI4LDcgQEAKIAkJCWlmIChzdGFydGlvKSB7CiAJCQkJbG9ja19idWZmZXIoYmgpOwogCQkJCWJoX2FycltpbmRleCsrXSA9IGJoOworCQkJCXBhZ2VfZGlydHktLTsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02NTcsMTAgKzY2MSwxMSBAQAogCQkJdW5sb2NrX2J1ZmZlcihiaCk7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCX0KLQl9IHdoaWxlIChpKyssIChiaCA9IGJoLT5iX3RoaXNfcGFnZSkgIT0gaGVhZCk7CisJCXBhZ2VfZGlydHktLTsKKwl9IHdoaWxlIChvZmZzZXQgKz0gbGVuLCAoYmggPSBiaC0+Yl90aGlzX3BhZ2UpICE9IGhlYWQpOwogCi0JaWYgKHN0YXJ0aW8pIHsKLQkJeGZzX3N1Ym1pdF9wYWdlKHBhZ2UsIHdiYywgYmhfYXJyLCBpbmRleCwgMSwgaW5kZXggPT0gaSk7CisJaWYgKHN0YXJ0aW8gJiYgaW5kZXgpIHsKKwkJeGZzX3N1Ym1pdF9wYWdlKHBhZ2UsIHdiYywgYmhfYXJyLCBpbmRleCwgMSwgIXBhZ2VfZGlydHkpOwogCX0gZWxzZSB7CiAJCXVubG9ja19wYWdlKHBhZ2UpOwogCX0KQEAgLTcyNSw4ICs3MzAsMTEgQEAKIAlfX3VpbnQ2NF90ICAgICAgICAgICAgICBlbmRfb2Zmc2V0OwogCXBnb2ZmX3QgICAgICAgICAgICAgICAgIGVuZF9pbmRleCwgbGFzdF9pbmRleCwgdGxhc3Q7CiAJaW50CQkJbGVuLCBlcnIsIGksIGNudCA9IDAsIHVwdG9kYXRlID0gMTsKLQlpbnQJCQlmbGFncyA9IHN0YXJ0aW8gPyAwIDogQk1BUElfVFJZTE9DSzsKLQlpbnQJCQlwYWdlX2RpcnR5LCBkZWxhbGxvYyA9IDA7CisJaW50CQkJZmxhZ3M7CisJaW50CQkJcGFnZV9kaXJ0eTsKKworCS8qIHdhaXQgZm9yIG90aGVyIElPIHRocmVhZHM/ICovCisJZmxhZ3MgPSAoc3RhcnRpbyAmJiB3YmMtPnN5bmNfbW9kZSAhPSBXQl9TWU5DX05PTkUpID8gMCA6IEJNQVBJX1RSWUxPQ0s7CiAKIAkvKiBJcyB0aGlzIHBhZ2UgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGU/ICovCiAJb2Zmc2V0ID0gaV9zaXplX3JlYWQoaW5vZGUpOwpAQCAtNzQwLDE5ICs3NDgsMjIgQEAKIAkJfQogCX0KIAotCW9mZnNldCA9IChsb2ZmX3QpcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVDsKIAllbmRfb2Zmc2V0ID0gbWluX3QodW5zaWduZWQgbG9uZyBsb25nLAotCQkJb2Zmc2V0ICsgUEFHRV9DQUNIRV9TSVpFLCBpX3NpemVfcmVhZChpbm9kZSkpOwotCi0JYmggPSBoZWFkID0gcGFnZV9idWZmZXJzKHBhZ2UpOwotCWlvbXAgPSBOVUxMOworCQkJKGxvZmZfdCkocGFnZS0+aW5kZXggKyAxKSA8PCBQQUdFX0NBQ0hFX1NISUZULCBvZmZzZXQpOworCW9mZnNldCA9IChsb2ZmX3QpcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVDsKIAogCS8qCi0JICogcGFnZV9kaXJ0eSBpcyBpbml0aWFsbHkgYSBjb3VudCBvZiBidWZmZXJzIG9uIHRoZSBwYWdlIGFuZAotCSAqIGlzIGRlY3JlbWVtdGVkIGFzIHdlIG1vdmUgZWFjaCBpbnRvIGEgY2xlYW5hYmxlIHN0YXRlLgorCSAqIHBhZ2VfZGlydHkgaXMgaW5pdGlhbGx5IGEgY291bnQgb2YgYnVmZmVycyBvbiB0aGUgcGFnZSBiZWZvcmUKKwkgKiBFT0YgYW5kIGlzIGRlY3JlbWVtdGVkIGFzIHdlIG1vdmUgZWFjaCBpbnRvIGEgY2xlYW5hYmxlIHN0YXRlLgogCSAqLwotCWxlbiA9IGJoLT5iX3NpemU7Ci0JcGFnZV9kaXJ0eSA9IFBBR0VfQ0FDSEVfU0laRSAvIGxlbjsKKwlsZW4gPSAxIDw8IGlub2RlLT5pX2Jsa2JpdHM7CisJcF9vZmZzZXQgPSBtYXgocF9vZmZzZXQsIFBBR0VfQ0FDSEVfU0laRSk7CisJcF9vZmZzZXQgPSByb3VuZHVwKHBfb2Zmc2V0LCBsZW4pOworCXBhZ2VfZGlydHkgPSBwX29mZnNldCAvIGxlbjsKKworCWlvbXAgPSBOVUxMOworCXBfb2Zmc2V0ID0gMDsKKwliaCA9IGhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CiAKIAlkbyB7CiAJCWlmIChvZmZzZXQgPj0gZW5kX29mZnNldCkKQEAgLTgwNCw3ICs4MTUsNiBAQAogCQkgKi8KIAkJfSBlbHNlIGlmIChidWZmZXJfZGVsYXkoYmgpKSB7CiAJCQlpZiAoIWlvbXApIHsKLQkJCQlkZWxhbGxvYyA9IDE7CiAJCQkJZXJyID0geGZzX21hcF9ibG9ja3MoaW5vZGUsIG9mZnNldCwgbGVuLCAmaW9tYXAsCiAJCQkJCQlCTUFQSV9BTExPQ0FURSB8IGZsYWdzKTsKIAkJCQlpZiAoZXJyKSB7CkBAIC04NzUsMTQgKzg4NSwxNSBAQAogCWlmICh1cHRvZGF0ZSAmJiBiaCA9PSBoZWFkKQogCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAKLQlpZiAoc3RhcnRpbykKLQkJeGZzX3N1Ym1pdF9wYWdlKHBhZ2UsIHdiYywgYmhfYXJyLCBjbnQsIDAsIDEpOworCWlmIChzdGFydGlvKSB7CisJCVdBUk5fT04ocGFnZV9kaXJ0eSk7CisJCXhmc19zdWJtaXRfcGFnZShwYWdlLCB3YmMsIGJoX2FyciwgY250LCAwLCAhcGFnZV9kaXJ0eSk7CisJfQogCiAJaWYgKGlvbXApIHsKLQkJdGxhc3QgPSAoaW9tcC0+aW9tYXBfb2Zmc2V0ICsgaW9tcC0+aW9tYXBfYnNpemUgLSAxKSA+PgorCQlvZmZzZXQgPSAoaW9tcC0+aW9tYXBfb2Zmc2V0ICsgaW9tcC0+aW9tYXBfYnNpemUgLSAxKSA+PgogCQkJCQlQQUdFX0NBQ0hFX1NISUZUOwotCQlpZiAoZGVsYWxsb2MgJiYgKHRsYXN0ID4gbGFzdF9pbmRleCkpCi0JCQl0bGFzdCA9IGxhc3RfaW5kZXg7CisJCXRsYXN0ID0gbWluX3QocGdvZmZfdCwgb2Zmc2V0LCBsYXN0X2luZGV4KTsKIAkJeGZzX2NsdXN0ZXJfd3JpdGUoaW5vZGUsIHBhZ2UtPmluZGV4ICsgMSwgaW9tcCwgd2JjLAogCQkJCQlzdGFydGlvLCB1bm1hcHBlZCwgdGxhc3QpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKaW5kZXggMjNlMGViNi4uOTk3OTYzZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKQEAgLTE3NDYsMTMgKzE3NDYsMTUgQEAKIFNUQVRJQyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhZ2VidWZfZGFlbW9uX3Rhc2s7CiBTVEFUSUMgaW50IHBhZ2VidWZfZGFlbW9uX2FjdGl2ZTsKIFNUQVRJQyBpbnQgZm9yY2VfZmx1c2g7Ci0KK1NUQVRJQyBpbnQgZm9yY2Vfc2xlZXA7CiAKIFNUQVRJQyBpbnQKIHBhZ2VidWZfZGFlbW9uX3dha2V1cCgKIAlpbnQJCQlwcmlvcml0eSwKIAl1bnNpZ25lZCBpbnQJCW1hc2spCiB7CisJaWYgKGZvcmNlX3NsZWVwKQorCQlyZXR1cm4gMDsKIAlmb3JjZV9mbHVzaCA9IDE7CiAJYmFycmllcigpOwogCXdha2VfdXBfcHJvY2VzcyhwYWdlYnVmX2RhZW1vbl90YXNrKTsKQEAgLTE3NzgsNyArMTc4MCwxMiBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJnRtcCk7CiAJZG8gewotCQl0cnlfdG9fZnJlZXplKFBGX0ZSRUVaRSk7CisJCWlmICh1bmxpa2VseShjdXJyZW50LT5mbGFncyAmIFBGX0ZSRUVaRSkpIHsKKwkJCWZvcmNlX3NsZWVwID0gMTsKKwkJCXJlZnJpZ2VyYXRvcihQRl9GUkVFWkUpOworCQl9IGVsc2UgeworCQkJZm9yY2Vfc2xlZXAgPSAwOworCQl9CiAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJc2NoZWR1bGVfdGltZW91dCgoeGZzX2J1Zl90aW1lcl9jZW50aXNlY3MgKiBIWikgLyAxMDApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCmluZGV4IDlmMDU3YTQuLmQwZDQxMmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKQEAgLTUxNSwxMCArNTE1LDQ5IEBACiB9CiAjZW5kaWYgLyogSEFWRV9GT1BfT1BFTl9FWEVDICovCiAKKy8qCisgKiBUZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byB0aGUgQUlPIGRpcmVjdCBJTyB3cml0ZSBwcm9ibGVtLgorICogVGhpcyBjb2RlIGNhbiBnbyBhbmQgd2UgY2FuIHJldmVydCB0byBkb19zeW5jX3dyaXRlIG9uY2UKKyAqIHRoZSB3cml0ZXBhZ2UocykgcmV3b3JrIGlzIG1lcmdlZC4KKyAqLworU1RBVElDIHNzaXplX3QKK2xpbnZmc193cml0ZSgKKwlzdHJ1Y3QgZmlsZQkqZmlscCwKKwljb25zdCBjaGFyCV9fdXNlciAqYnVmLAorCXNpemVfdAkJbGVuLAorCWxvZmZfdAkJKnBwb3MpCit7CisJc3RydWN0IGtpb2NiCWtpb2NiOworCXNzaXplX3QJCXJldDsKKworCWluaXRfc3luY19raW9jYigma2lvY2IsIGZpbHApOworCWtpb2NiLmtpX3BvcyA9ICpwcG9zOworCXJldCA9IF9fbGludmZzX3dyaXRlKCZraW9jYiwgYnVmLCAwLCBsZW4sIGtpb2NiLmtpX3Bvcyk7CisJKnBwb3MgPSBraW9jYi5raV9wb3M7CisJcmV0dXJuIHJldDsKK30KK1NUQVRJQyBzc2l6ZV90CitsaW52ZnNfd3JpdGVfaW52aXMoCisJc3RydWN0IGZpbGUJKmZpbHAsCisJY29uc3QgY2hhcglfX3VzZXIgKmJ1ZiwKKwlzaXplX3QJCWxlbiwKKwlsb2ZmX3QJCSpwcG9zKQoreworCXN0cnVjdCBraW9jYglraW9jYjsKKwlzc2l6ZV90CQlyZXQ7CisKKwlpbml0X3N5bmNfa2lvY2IoJmtpb2NiLCBmaWxwKTsKKwlraW9jYi5raV9wb3MgPSAqcHBvczsKKwlyZXQgPSBfX2xpbnZmc193cml0ZSgma2lvY2IsIGJ1ZiwgSU9fSU5WSVMsIGxlbiwga2lvY2Iua2lfcG9zKTsKKwkqcHBvcyA9IGtpb2NiLmtpX3BvczsKKwlyZXR1cm4gcmV0OworfQorCisKIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGludmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAotCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAorCS53cml0ZQkJPSBsaW52ZnNfd3JpdGUsCiAJLnJlYWR2CQk9IGxpbnZmc19yZWFkdiwKIAkud3JpdGV2CQk9IGxpbnZmc193cml0ZXYsCiAJLmFpb19yZWFkCT0gbGludmZzX2Fpb19yZWFkLApAQCAtNTQwLDcgKzU3OSw3IEBACiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxpbnZmc19pbnZpc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKLQkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKKwkud3JpdGUJCT0gbGludmZzX3dyaXRlX2ludmlzLAogCS5yZWFkdgkJPSBsaW52ZnNfcmVhZHZfaW52aXMsCiAJLndyaXRldgkJPSBsaW52ZnNfd3JpdGV2X2ludmlzLAogCS5haW9fcmVhZAk9IGxpbnZmc19haW9fcmVhZF9pbnZpcywKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKaW5kZXggZmYxNDVmZC4uYWE5ZGFhZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKQEAgLTY4Myw2ICs2ODMsOSBAQAogCQkJKHhpcC0+aV9kLmRpX2ZsYWdzICYgWEZTX0RJRkxBR19SRUFMVElNRSkgPwogCQkJCW1wLT5tX3J0ZGV2X3RhcmdwIDogbXAtPm1fZGRldl90YXJncDsKIAorCQlpZiAoaW9mbGFncyAmIElPX0lTQUlPKQorCQkJcmV0dXJuIFhGU19FUlJPUigtRU5PU1lTKTsKKwogCQlpZiAoKHBvcyAmIHRhcmdldC0+cGJyX3NtYXNrKSB8fCAoY291bnQgJiB0YXJnZXQtPnBicl9zbWFzaykpCiAJCQlyZXR1cm4gWEZTX0VSUk9SKC1FSU5WQUwpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuYwppbmRleCA4NDljNjFjLi5hODMyZDE2IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmMKQEAgLTE1Niw3ICsxNTYsNiBAQAogCiAjaWZkZWYJWEZTX1ZOT0RFX1RSQUNFCiAJdnAtPnZfdHJhY2UgPSBrdHJhY2VfYWxsb2MoVk5PREVfVFJBQ0VfU0laRSwgS01fU0xFRVApOwotCXByaW50aygiQWxsb2NhdGVkIFZOT0RFX1RSQUNFIGF0IDB4JXBcbiIsIHZwLT52X3RyYWNlKTsKICNlbmRpZgkvKiBYRlNfVk5PREVfVFJBQ0UgKi8KIAogCXZuX3RyYWNlX2V4aXQodnAsICJ2bl9pbml0aWFsaXplIiwgKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpOwpAQCAtNDI0LDEzICs0MjMsMTMgQEAKICAqIFZub2RlIHRyYWNpbmcgY29kZS4KICAqLwogdm9pZAotdm5fdHJhY2VfZW50cnkodm5vZGVfdCAqdnAsIGNoYXIgKmZ1bmMsIGluc3RfdCAqcmEpCit2bl90cmFjZV9lbnRyeSh2bm9kZV90ICp2cCwgY29uc3QgY2hhciAqZnVuYywgaW5zdF90ICpyYSkKIHsKIAlLVFJBQ0VfRU5URVIodnAsIFZOT0RFX0tUUkFDRV9FTlRSWSwgZnVuYywgMCwgcmEpOwogfQogCiB2b2lkCi12bl90cmFjZV9leGl0KHZub2RlX3QgKnZwLCBjaGFyICpmdW5jLCBpbnN0X3QgKnJhKQordm5fdHJhY2VfZXhpdCh2bm9kZV90ICp2cCwgY29uc3QgY2hhciAqZnVuYywgaW5zdF90ICpyYSkKIHsKIAlLVFJBQ0VfRU5URVIodnAsIFZOT0RFX0tUUkFDRV9FWElULCBmdW5jLCAwLCByYSk7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaAppbmRleCBkYTc2YzFmLi4wMDQ2NmMzIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKQEAgLTg2LDEwICs4NiwxMSBAQAogCXZudW1iZXJfdAl2X251bWJlcjsJCS8qIGluLWNvcmUgdm5vZGUgbnVtYmVyICovCiAJdm5fYmh2X2hlYWRfdAl2X2JoOwkJCS8qIGJlaGF2aW9yIGhlYWQgKi8KIAlzcGlubG9ja190CXZfbG9jazsJCQkvKiBWTl9MT0NLL1ZOX1VOTE9DSyAqLwotCXN0cnVjdCBpbm9kZQl2X2lub2RlOwkJLyogTGludXggaW5vZGUgKi8KICNpZmRlZiBYRlNfVk5PREVfVFJBQ0UKIAlzdHJ1Y3Qga3RyYWNlCSp2X3RyYWNlOwkJLyogdHJhY2UgaGVhZGVyIHN0cnVjdHVyZSAgICAqLwogI2VuZGlmCisJc3RydWN0IGlub2RlCXZfaW5vZGU7CQkvKiBMaW51eCBpbm9kZSAqLworCS8qIGlub2RlIE1VU1QgYmUgbGFzdCAqLwogfSB2bm9kZV90OwogCiAjZGVmaW5lIHZfZmJodgkJCXZfYmguYmhfZmlyc3QJICAgICAgIC8qIGZpcnN0IGJlaGF2aW9yICovCkBAIC00MDksNyArNDEwLDcgQEAKIAlpbnQJCXZhX21hc2s7CS8qIGJpdC1tYXNrIG9mIGF0dHJpYnV0ZXMgcHJlc2VudCAqLwogCWVudW0gdnR5cGUJdmFfdHlwZTsJLyogdm5vZGUgdHlwZSAoZm9yIGNyZWF0ZSkgKi8KIAltb2RlX3QJCXZhX21vZGU7CS8qIGZpbGUgYWNjZXNzIG1vZGUgYW5kIHR5cGUgKi8KLQlubGlua190CQl2YV9ubGluazsJLyogbnVtYmVyIG9mIHJlZmVyZW5jZXMgdG8gZmlsZSAqLworCXhmc19ubGlua190CXZhX25saW5rOwkvKiBudW1iZXIgb2YgcmVmZXJlbmNlcyB0byBmaWxlICovCiAJdWlkX3QJCXZhX3VpZDsJCS8qIG93bmVyIHVzZXIgaWQgKi8KIAlnaWRfdAkJdmFfZ2lkOwkJLyogb3duZXIgZ3JvdXAgaWQgKi8KIAl4ZnNfaW5vX3QJdmFfbm9kZWlkOwkvKiBmaWxlIGlkICovCkBAIC02MjUsNiArNjI2LDcgQEAKICNkZWZpbmUJQVRUUl9ETUkJMHgwOAkvKiBpbnZvY2F0aW9uIGZyb20gYSBETUkgZnVuY3Rpb24gKi8KICNkZWZpbmUJQVRUUl9MQVpZCTB4ODAJLyogc2V0L2dldCBhdHRyaWJ1dGVzIGxhemlseSAqLwogI2RlZmluZQlBVFRSX05PTkJMT0NLCTB4MTAwCS8qIHJldHVybiBFQUdBSU4gaWYgb3BlcmF0aW9uIHdvdWxkIGJsb2NrICovCisjZGVmaW5lIEFUVFJfTk9MT0NLCTB4MjAwCS8qIERvbid0IGdyYWIgYW55IGNvbmZsaWN0aW5nIGxvY2tzICovCiAKIC8qCiAgKiBGbGFncyB0byBWT1BfRlNZTkMgYW5kIFZPUF9SRUNMQUlNLgpAQCAtNjQ2LDggKzY0OCw4IEBACiAjZGVmaW5lCVZOT0RFX0tUUkFDRV9SRUYJNAogI2RlZmluZQlWTk9ERV9LVFJBQ0VfUkVMRQk1CiAKLWV4dGVybiB2b2lkIHZuX3RyYWNlX2VudHJ5KHN0cnVjdCB2bm9kZSAqLCBjaGFyICosIGluc3RfdCAqKTsKLWV4dGVybiB2b2lkIHZuX3RyYWNlX2V4aXQoc3RydWN0IHZub2RlICosIGNoYXIgKiwgaW5zdF90ICopOworZXh0ZXJuIHZvaWQgdm5fdHJhY2VfZW50cnkoc3RydWN0IHZub2RlICosIGNvbnN0IGNoYXIgKiwgaW5zdF90ICopOworZXh0ZXJuIHZvaWQgdm5fdHJhY2VfZXhpdChzdHJ1Y3Qgdm5vZGUgKiwgY29uc3QgY2hhciAqLCBpbnN0X3QgKik7CiBleHRlcm4gdm9pZCB2bl90cmFjZV9ob2xkKHN0cnVjdCB2bm9kZSAqLCBjaGFyICosIGludCwgaW5zdF90ICopOwogZXh0ZXJuIHZvaWQgdm5fdHJhY2VfcmVmKHN0cnVjdCB2bm9kZSAqLCBjaGFyICosIGludCwgaW5zdF90ICopOwogZXh0ZXJuIHZvaWQgdm5fdHJhY2VfcmVsZShzdHJ1Y3Qgdm5vZGUgKiwgY2hhciAqLCBpbnQsIGluc3RfdCAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuYyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwppbmRleCAwOGQ1NTFhLi42M2FiZGMyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmMKKysrIGIvZnMveGZzL3hmc19kZnJhZy5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAogCWlmIChWTl9DQUNIRUQodHZwKSAhPSAwKQogCQl4ZnNfaW52YWxfY2FjaGVkX3BhZ2VzKFhGU19JVE9WKHRpcCksICYodGlwLT5pX2lvY29yZSksCi0JCQkJCQkobG9mZl90KTAsIDAsIDApOworCQkJCQkJKHhmc19vZmZfdCkwLCAwLCAwKTsKIAogCS8qIFZlcmlmeSBPX0RJUkVDVCBmb3IgZnRtcCAqLwogCWlmIChWTl9DQUNIRUQodHZwKSAhPSAwKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lnZXQuYyBiL2ZzL3hmcy94ZnNfaWdldC5jCmluZGV4IDNhMGJhMWQuLmQzZGEwMDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWdldC5jCisrKyBiL2ZzL3hmcy94ZnNfaWdldC5jCkBAIC0xMzYsNiArMTM2LDQwIEBACiB9CiAKIC8qCisgKiBUcnkgdG8gbW92ZSBhbiBpbm9kZSB0byB0aGUgZnJvbnQgb2YgaXRzIGhhc2ggbGlzdCBpZiBwb3NzaWJsZQorICogKGFuZCBpZiBpdHMgbm90IHRoZXJlIGFscmVhZHkpLiAgQ2FsbGVkIHJpZ2h0IGFmdGVyIG9idGFpbmluZworICogdGhlIGxpc3QgdmVyc2lvbiBudW1iZXIgYW5kIHRoZW4gZHJvcHBpbmcgdGhlIHJlYWRfbG9jayBvbiB0aGUKKyAqIGhhc2ggbGlzdCBpbiBxdWVzdGlvbiAod2hpY2ggaXMgZG9uZSByaWdodCBhZnRlciBsb29raW5nIHVwIHRoZQorICogaW5vZGUgaW4gcXVlc3Rpb24uLi4pLgorICovCitTVEFUSUMgdm9pZAoreGZzX2loYXNoX3Byb21vdGUoCisJeGZzX2loYXNoX3QJKmloLAorCXhmc19pbm9kZV90CSppcCwKKwl1bG9uZwkJdmVyc2lvbikKK3sKKwl4ZnNfaW5vZGVfdAkqaXE7CisKKwlpZiAoKGlwLT5pX3ByZXZwICE9ICZpaC0+aWhfbmV4dCkgJiYgd3JpdGVfdHJ5bG9jaygmaWgtPmloX2xvY2spKSB7CisJCWlmIChsaWtlbHkodmVyc2lvbiA9PSBpaC0+aWhfdmVyc2lvbikpIHsKKwkJCS8qIHJlbW92ZSBmcm9tIGxpc3QgKi8KKwkJCWlmICgoaXEgPSBpcC0+aV9uZXh0KSkgeworCQkJCWlxLT5pX3ByZXZwID0gaXAtPmlfcHJldnA7CisJCQl9CisJCQkqaXAtPmlfcHJldnAgPSBpcTsKKworCQkJLyogaW5zZXJ0IGF0IGxpc3QgaGVhZCAqLworCQkJaXEgPSBpaC0+aWhfbmV4dDsKKwkJCWlxLT5pX3ByZXZwID0gJmlwLT5pX25leHQ7CisJCQlpcC0+aV9uZXh0ID0gaXE7CisJCQlpcC0+aV9wcmV2cCA9ICZpaC0+aWhfbmV4dDsKKwkJCWloLT5paF9uZXh0ID0gaXA7CisJCX0KKwkJd3JpdGVfdW5sb2NrKCZpaC0+aWhfbG9jayk7CisJfQorfQorCisvKgogICogTG9vayB1cCBhbiBpbm9kZSBieSBudW1iZXIgaW4gdGhlIGdpdmVuIGZpbGUgc3lzdGVtLgogICogVGhlIGlub2RlIGlzIGxvb2tlZCB1cCBpbiB0aGUgaGFzaCB0YWJsZSBmb3IgdGhlIGZpbGUgc3lzdGVtCiAgKiByZXByZXNlbnRlZCBieSB0aGUgbW91bnQgcG9pbnQgcGFyYW1ldGVyIG1wLiAgRWFjaCBidWNrZXQgb2YKQEAgLTIyOSw3ICsyNjMsOSBAQAogCQkJCVhGU19TVEFUU19JTkMoeHNfaWdfZm91bmQpOwogCiAJCQkJaXAtPmlfZmxhZ3MgJj0gflhGU19JUkVDTEFJTUFCTEU7CisJCQkJdmVyc2lvbiA9IGloLT5paF92ZXJzaW9uOwogCQkJCXJlYWRfdW5sb2NrKCZpaC0+aWhfbG9jayk7CisJCQkJeGZzX2loYXNoX3Byb21vdGUoaWgsIGlwLCB2ZXJzaW9uKTsKIAogCQkJCVhGU19NT1VOVF9JTE9DSyhtcCk7CiAJCQkJbGlzdF9kZWxfaW5pdCgmaXAtPmlfcmVjbGFpbSk7CkBAIC0yNTksOCArMjk1LDE1IEBACiAJCQkJCQlpbm9kZV92cCwgdnApOwogCQkJfQogCisJCQkvKgorCQkJICogSW5vZGUgY2FjaGUgaGl0OiBpZiBpcCBpcyBub3QgYXQgdGhlIGZyb250IG9mCisJCQkgKiBpdHMgaGFzaCBjaGFpbiwgbW92ZSBpdCB0aGVyZSBub3cuCisJCQkgKiBEbyB0aGlzIHdpdGggdGhlIGxvY2sgaGVsZCBmb3IgdXBkYXRlLCBidXQKKwkJCSAqIGRvIHN0YXRpc3RpY3MgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBsb2NrLgorCQkJICovCisJCQl2ZXJzaW9uID0gaWgtPmloX3ZlcnNpb247CiAJCQlyZWFkX3VubG9jaygmaWgtPmloX2xvY2spOwotCisJCQl4ZnNfaWhhc2hfcHJvbW90ZShpaCwgaXAsIHZlcnNpb24pOwogCQkJWEZTX1NUQVRTX0lOQyh4c19pZ19mb3VuZCk7CiAKIGZpbmlzaF9pbm9kZToKQEAgLTU0Nyw2ICs1OTAsNyBAQAogewogCXhmc19paGFzaF90CSppaDsKIAl4ZnNfaW5vZGVfdAkqaXA7CisJdWxvbmcJCXZlcnNpb247CiAKIAlpaCA9IFhGU19JSEFTSChtcCwgaW5vKTsKIAlyZWFkX2xvY2soJmloLT5paF9sb2NrKTsKQEAgLTU1NCwxMSArNTk4LDE1IEBACiAJCWlmIChpcC0+aV9pbm8gPT0gaW5vKSB7CiAJCQkvKgogCQkJICogSWYgd2UgZmluZCBpdCBhbmQgdHAgbWF0Y2hlcywgcmV0dXJuIGl0LgorCQkJICogQWxzbyBtb3ZlIGl0IHRvIHRoZSBmcm9udCBvZiB0aGUgaGFzaCBsaXN0CisJCQkgKiBpZiB3ZSBmaW5kIGl0IGFuZCBpdCBpcyBub3QgYWxyZWFkeSB0aGVyZS4KIAkJCSAqIE90aGVyd2lzZSBicmVhayBmcm9tIHRoZSBsb29wIGFuZCByZXR1cm4KIAkJCSAqIE5VTEwuCiAJCQkgKi8KIAkJCWlmIChpcC0+aV90cmFuc3AgPT0gdHApIHsKKwkJCQl2ZXJzaW9uID0gaWgtPmloX3ZlcnNpb247CiAJCQkJcmVhZF91bmxvY2soJmloLT5paF9sb2NrKTsKKwkJCQl4ZnNfaWhhc2hfcHJvbW90ZShpaCwgaXAsIHZlcnNpb24pOwogCQkJCXJldHVybiAoaXApOwogCQkJfQogCQkJYnJlYWs7CkBAIC02ODUsNiArNzMzLDcgQEAKIAkJaXEtPmlfcHJldnAgPSBpcC0+aV9wcmV2cDsKIAl9CiAJKmlwLT5pX3ByZXZwID0gaXE7CisJaWgtPmloX3ZlcnNpb24rKzsKIAl3cml0ZV91bmxvY2soJmloLT5paF9sb2NrKTsKIAogCS8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggNDNjNjMyYS4uYmM4YzhjNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtMTEzMCw3ICsxMTMwLDcgQEAKIAl4ZnNfdHJhbnNfdAkqdHAsCiAJeGZzX2lub2RlX3QJKnBpcCwKIAltb2RlX3QJCW1vZGUsCi0JbmxpbmtfdAkJbmxpbmssCisJeGZzX25saW5rX3QJbmxpbmssCiAJeGZzX2Rldl90CXJkZXYsCiAJY3JlZF90CQkqY3IsCiAJeGZzX3ByaWRfdAlwcmlkLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IGE1M2IxY2MuLjM3ZTFjMzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTQ5NSw5ICs0OTUsOSBAQAogaW50CQl4ZnNfaXJlYWQoc3RydWN0IHhmc19tb3VudCAqLCBzdHJ1Y3QgeGZzX3RyYW5zICosIHhmc19pbm9fdCwKIAkJCSAgeGZzX2lub2RlX3QgKiosIHhmc19kYWRkcl90KTsKIGludAkJeGZzX2lyZWFkX2V4dGVudHMoc3RydWN0IHhmc190cmFucyAqLCB4ZnNfaW5vZGVfdCAqLCBpbnQpOwotaW50CQl4ZnNfaWFsbG9jKHN0cnVjdCB4ZnNfdHJhbnMgKiwgeGZzX2lub2RlX3QgKiwgbW9kZV90LCBubGlua190LAotCQkJICAgeGZzX2Rldl90LCBzdHJ1Y3QgY3JlZCAqLCB4ZnNfcHJpZF90LCBpbnQsCi0JCQkgICBzdHJ1Y3QgeGZzX2J1ZiAqKiwgYm9vbGVhbl90ICosIHhmc19pbm9kZV90ICoqKTsKK2ludAkJeGZzX2lhbGxvYyhzdHJ1Y3QgeGZzX3RyYW5zICosIHhmc19pbm9kZV90ICosIG1vZGVfdCwKKwkJCSAgIHhmc19ubGlua190LCB4ZnNfZGV2X3QsIHN0cnVjdCBjcmVkICosIHhmc19wcmlkX3QsCisJCQkgICBpbnQsIHN0cnVjdCB4ZnNfYnVmICoqLCBib29sZWFuX3QgKiwgeGZzX2lub2RlX3QgKiopOwogdm9pZAkJeGZzX3hsYXRlX2Rpbm9kZV9jb3JlKHhmc19jYWRkcl90LCBzdHJ1Y3QgeGZzX2Rpbm9kZV9jb3JlICosCiAJCQkJCWludCk7CiB1aW50CQl4ZnNfaXAyeGZsYWdzKHN0cnVjdCB4ZnNfaW5vZGUgKik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmMKaW5kZXggMzgyNmU4Zi4uOTkxZjhhNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5jCisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwpAQCAtMzA4LDcgKzMwOCw4IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWVycm9yID0gWEZTX0lPTUFQX1dSSVRFX0FMTE9DQVRFKG1wLCBpbywgJmltYXAsICZuaW1hcHMpOworCQllcnJvciA9IFhGU19JT01BUF9XUklURV9BTExPQ0FURShtcCwgaW8sIG9mZnNldCwgY291bnQsCisJCQkJCQkgJmltYXAsICZuaW1hcHMpOwogCQlicmVhazsKIAljYXNlIEJNQVBJX1VOV1JJVFRFTjoKIAkJbG9ja21vZGUgPSAwOwpAQCAtMzY1LDcgKzM2Niw3IEBACiBpbnQKIHhmc19pb21hcF93cml0ZV9kaXJlY3QoCiAJeGZzX2lub2RlX3QJKmlwLAotCWxvZmZfdAkJb2Zmc2V0LAorCXhmc19vZmZfdAlvZmZzZXQsCiAJc2l6ZV90CQljb3VudCwKIAlpbnQJCWZsYWdzLAogCXhmc19ibWJ0X2lyZWNfdCAqcmV0X2ltYXAsCkBAIC01NDEsNyArNTQyLDcgQEAKIGludAogeGZzX2lvbWFwX3dyaXRlX2RlbGF5KAogCXhmc19pbm9kZV90CSppcCwKLQlsb2ZmX3QJCW9mZnNldCwKKwl4ZnNfb2ZmX3QJb2Zmc2V0LAogCXNpemVfdAkJY291bnQsCiAJaW50CQlpb2ZsYWcsCiAJeGZzX2JtYnRfaXJlY190ICpyZXRfaW1hcCwKQEAgLTc0Niw2ICs3NDcsOCBAQAogaW50CiB4ZnNfaW9tYXBfd3JpdGVfYWxsb2NhdGUoCiAJeGZzX2lub2RlX3QJKmlwLAorCXhmc19vZmZfdAlvZmZzZXQsCisJc2l6ZV90CQljb3VudCwKIAl4ZnNfYm1idF9pcmVjX3QgKm1hcCwKIAlpbnQJCSpyZXRtYXApCiB7CkBAIC03NzAsOSArNzczLDkgQEAKIAlpZiAoKGVycm9yID0gWEZTX1FNX0RRQVRUQUNIKG1wLCBpcCwgMCkpKQogCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKIAotCW9mZnNldF9mc2IgPSBtYXAtPmJyX3N0YXJ0b2ZmOworCW9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0JUKG1wLCBvZmZzZXQpOwogCWNvdW50X2ZzYiA9IG1hcC0+YnJfYmxvY2tjb3VudDsKLQltYXBfc3RhcnRfZnNiID0gb2Zmc2V0X2ZzYjsKKwltYXBfc3RhcnRfZnNiID0gbWFwLT5icl9zdGFydG9mZjsKIAogCVhGU19TVEFUU19BREQoeHNfeHN0cmF0X2J5dGVzLCBYRlNfRlNCX1RPX0IobXAsIGNvdW50X2ZzYikpOwogCkBAIC04NjgsOSArODcxLDkgQEAKIAkJCQkJaW1hcFtpXS5icl9zdGFydG9mZiwKIAkJCQkgICAgICAgIGltYXBbaV0uYnJfYmxvY2tjb3VudCxpbWFwW2ldLmJyX3N0YXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkJCWlmICgobWFwLT5icl9zdGFydG9mZiA+PSBpbWFwW2ldLmJyX3N0YXJ0b2ZmKSAmJgotCQkJICAgIChtYXAtPmJyX3N0YXJ0b2ZmIDwgKGltYXBbaV0uYnJfc3RhcnRvZmYgKwotCQkJCQkJIGltYXBbaV0uYnJfYmxvY2tjb3VudCkpKSB7CisJCQlpZiAoKG9mZnNldF9mc2IgPj0gaW1hcFtpXS5icl9zdGFydG9mZikgJiYKKwkJCSAgICAob2Zmc2V0X2ZzYiA8IChpbWFwW2ldLmJyX3N0YXJ0b2ZmICsKKwkJCQkJICAgaW1hcFtpXS5icl9ibG9ja2NvdW50KSkpIHsKIAkJCQkqbWFwID0gaW1hcFtpXTsKIAkJCQkqcmV0bWFwID0gMTsKIAkJCQlYRlNfU1RBVFNfSU5DKHhzX3hzdHJhdF9xdWljayk7CkBAIC04ODMsOSArODg2LDggQEAKIAkJICogZmlsZSwganVzdCBzdXJyb3VuZGluZyBkYXRhLCB0cnkgYWdhaW4uCiAJCSAqLwogCQluaW1hcHMtLTsKLQkJb2Zmc2V0X2ZzYiA9IGltYXBbbmltYXBzXS5icl9zdGFydG9mZiArCi0JCQkgICAgIGltYXBbbmltYXBzXS5icl9ibG9ja2NvdW50OwotCQltYXBfc3RhcnRfZnNiID0gb2Zmc2V0X2ZzYjsKKwkJbWFwX3N0YXJ0X2ZzYiA9IGltYXBbbmltYXBzXS5icl9zdGFydG9mZiArCisJCQkJaW1hcFtuaW1hcHNdLmJyX2Jsb2NrY291bnQ7CiAJfQogCiB0cmFuc19jYW5jZWw6CkBAIC04OTksNyArOTAxLDcgQEAKIGludAogeGZzX2lvbWFwX3dyaXRlX3Vud3JpdHRlbigKIAl4ZnNfaW5vZGVfdAkqaXAsCi0JbG9mZl90CQlvZmZzZXQsCisJeGZzX29mZl90CW9mZnNldCwKIAlzaXplX3QJCWNvdW50KQogewogCXhmc19tb3VudF90CSptcCA9IGlwLT5pX21vdW50OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5oIGIvZnMveGZzL3hmc19pb21hcC5oCmluZGV4IDMxYzkxMDguLjRkYWFhNTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuaAorKysgYi9mcy94ZnMveGZzX2lvbWFwLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDAzLDIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yOSw5ICsyOSw2IEBACiAgKgogICogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0dlbkluZm8vU0dJR1BMTm90aWNlRXhwbGFuLwogICovCi0KLQotCiAjaWZuZGVmIF9fWEZTX0lPTUFQX0hfXwogI2RlZmluZSBfX1hGU19JT01BUF9IX18KIApAQCAtNTYsNyArNTMsNyBAQAogCUJNQVBJX1VOV1JJVFRFTiAgPSAoMSA8PCAzKSwJLyogdW53cml0dGVuIGV4dGVudHMgdG8gcmVhbCBleHRlbnRzICovCiAJLyogbW9kaWZpZXJzICovCiAJQk1BUElfSUdOU1RBVEUgPSAoMSA8PCA0KSwJLyogaWdub3JlIHVud3JpdHRlbiBzdGF0ZSBvbiByZWFkICovCi0JQk1BUElfRElSRUNUID0gKDEgPDwgNSksCQkvKiBkaXJlY3QgaW5zdGVhZCBvZiBidWZmZXJlZCB3cml0ZSAqLworCUJNQVBJX0RJUkVDVCA9ICgxIDw8IDUpLAkvKiBkaXJlY3QgaW5zdGVhZCBvZiBidWZmZXJlZCB3cml0ZSAqLwogCUJNQVBJX01NQVAgPSAoMSA8PCA2KSwJCS8qIGFsbG9jYXRlIGZvciBtbWFwIHdyaXRlICovCiAJQk1BUElfU1lOQyA9ICgxIDw8IDcpLAkJLyogc3luYyB3cml0ZSB0byBmbHVzaCBkZWxhbGxvYyBzcGFjZSAqLwogCUJNQVBJX1RSWUxPQ0sgPSAoMSA8PCA4KSwJLyogbm9uLWJsb2NraW5nIHJlcXVlc3QgKi8KQEAgLTY3LDEzICs2NCwxMyBAQAogLyoKICAqIHhmc19pb21hcF90OiAgRmlsZSBzeXN0ZW0gSS9PIG1hcAogICoKLSAqIFRoZSBpb21hcF9ibiBmaWVsZCBpcyBleHByZXNzZWQgaW4gNTEyLWJ5dGUgYmxvY2tzLCBhbmQgaXMgd2hlcmUgdGhlIAorICogVGhlIGlvbWFwX2JuIGZpZWxkIGlzIGV4cHJlc3NlZCBpbiA1MTItYnl0ZSBibG9ja3MsIGFuZCBpcyB3aGVyZSB0aGUKICAqIG1hcHBpbmcgc3RhcnRzIG9uIGRpc2suCiAgKgogICogVGhlIGlvbWFwX29mZnNldCwgaW9tYXBfYnNpemUgYW5kIGlvbWFwX2RlbHRhIGZpZWxkcyBhcmUgaW4gYnl0ZXMuCiAgKiBpb21hcF9vZmZzZXQgaXMgdGhlIG9mZnNldCBvZiB0aGUgbWFwcGluZyBpbiB0aGUgZmlsZSBpdHNlbGYuCi0gKiBpb21hcF9ic2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgbWFwcGluZywgIGlvbWFwX2RlbHRhIGlzIHRoZSAKLSAqIGRlc2lyZWQgZGF0YSdzIG9mZnNldCBpbnRvIHRoZSBtYXBwaW5nLCBnaXZlbiB0aGUgb2Zmc2V0IHN1cHBsaWVkIAorICogaW9tYXBfYnNpemUgaXMgdGhlIHNpemUgb2YgdGhlIG1hcHBpbmcsICBpb21hcF9kZWx0YSBpcyB0aGUKKyAqIGRlc2lyZWQgZGF0YSdzIG9mZnNldCBpbnRvIHRoZSBtYXBwaW5nLCBnaXZlbiB0aGUgb2Zmc2V0IHN1cHBsaWVkCiAgKiB0byB0aGUgZmlsZSBJL08gbWFwIHJvdXRpbmUuCiAgKgogICogV2hlbiBhIHJlcXVlc3QgaXMgbWFkZSB0byByZWFkIGJleW9uZCB0aGUgbG9naWNhbCBlbmQgb2YgdGhlIG9iamVjdCwKQEAgLTg0LDggKzgxLDggQEAKIHR5cGVkZWYgc3RydWN0IHhmc19pb21hcCB7CiAJeGZzX2RhZGRyX3QJCWlvbWFwX2JuOwkvKiBmaXJzdCA1MTJiIGJsayBvZiBtYXBwaW5nICovCiAJeGZzX2J1ZnRhcmdfdAkJKmlvbWFwX3RhcmdldDsKLQlsb2ZmX3QJCQlpb21hcF9vZmZzZXQ7CS8qIG9mZnNldCBvZiBtYXBwaW5nLCBieXRlcyAqLwotCWxvZmZfdAkJCWlvbWFwX2JzaXplOwkvKiBzaXplIG9mIG1hcHBpbmcsIGJ5dGVzICovCisJeGZzX29mZl90CQlpb21hcF9vZmZzZXQ7CS8qIG9mZnNldCBvZiBtYXBwaW5nLCBieXRlcyAqLworCXhmc19vZmZfdAkJaW9tYXBfYnNpemU7CS8qIHNpemUgb2YgbWFwcGluZywgYnl0ZXMgKi8KIAlzaXplX3QJCQlpb21hcF9kZWx0YTsJLyogb2Zmc2V0IGludG8gbWFwcGluZywgYnl0ZXMgKi8KIAlpb21hcF9mbGFnc190CQlpb21hcF9mbGFnczsKIH0geGZzX2lvbWFwX3Q7CkBAIC05NiwxMiArOTMsMTIgQEAKIAogZXh0ZXJuIGludCB4ZnNfaW9tYXAoc3RydWN0IHhmc19pb2NvcmUgKiwgeGZzX29mZl90LCBzc2l6ZV90LCBpbnQsCiAJCSAgICAgc3RydWN0IHhmc19pb21hcCAqLCBpbnQgKik7Ci1leHRlcm4gaW50IHhmc19pb21hcF93cml0ZV9kaXJlY3Qoc3RydWN0IHhmc19pbm9kZSAqLCBsb2ZmX3QsIHNpemVfdCwKK2V4dGVybiBpbnQgeGZzX2lvbWFwX3dyaXRlX2RpcmVjdChzdHJ1Y3QgeGZzX2lub2RlICosIHhmc19vZmZfdCwgc2l6ZV90LAogCQkJCSAgaW50LCBzdHJ1Y3QgeGZzX2JtYnRfaXJlYyAqLCBpbnQgKiwgaW50KTsKLWV4dGVybiBpbnQgeGZzX2lvbWFwX3dyaXRlX2RlbGF5KHN0cnVjdCB4ZnNfaW5vZGUgKiwgbG9mZl90LCBzaXplX3QsIGludCwKK2V4dGVybiBpbnQgeGZzX2lvbWFwX3dyaXRlX2RlbGF5KHN0cnVjdCB4ZnNfaW5vZGUgKiwgeGZzX29mZl90LCBzaXplX3QsIGludCwKIAkJCQkgc3RydWN0IHhmc19ibWJ0X2lyZWMgKiwgaW50ICopOwotZXh0ZXJuIGludCB4ZnNfaW9tYXBfd3JpdGVfYWxsb2NhdGUoc3RydWN0IHhmc19pbm9kZSAqLAorZXh0ZXJuIGludCB4ZnNfaW9tYXBfd3JpdGVfYWxsb2NhdGUoc3RydWN0IHhmc19pbm9kZSAqLCB4ZnNfb2ZmX3QsIHNpemVfdCwKIAkJCQlzdHJ1Y3QgeGZzX2JtYnRfaXJlYyAqLCBpbnQgKik7Ci1leHRlcm4gaW50IHhmc19pb21hcF93cml0ZV91bndyaXR0ZW4oc3RydWN0IHhmc19pbm9kZSAqLCBsb2ZmX3QsIHNpemVfdCk7CitleHRlcm4gaW50IHhmc19pb21hcF93cml0ZV91bndyaXR0ZW4oc3RydWN0IHhmc19pbm9kZSAqLCB4ZnNfb2ZmX3QsIHNpemVfdCk7CiAKICNlbmRpZiAvKiBfX1hGU19JT01BUF9IX18qLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IGI1NzQyM2MuLjJlYzk2N2QgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTMwMSw2ICszMDEsMTUgQEAKIAl9CiAKIAkvKgorCSAqIFZlcnNpb24gMSBkaXJlY3RvcnkgZm9ybWF0IGhhcyBuZXZlciB3b3JrZWQgb24gTGludXguCisJICovCisJaWYgKHVubGlrZWx5KCFYRlNfU0JfVkVSU0lPTl9IQVNESVJWMihzYnApKSkgeworCQljbW5fZXJyKENFX1dBUk4sCisJIlhGUzogQXR0ZW1wdGVkIHRvIG1vdW50IGZpbGUgc3lzdGVtIHVzaW5nIHZlcnNpb24gMSBkaXJlY3RvcnkgZm9ybWF0Iik7CisJCXJldHVybiBYRlNfRVJST1IoRU5PU1lTKTsKKwl9CisKKwkvKgogCSAqIFVudGlsIHRoaXMgaXMgZml4ZWQgb25seSBwYWdlLXNpemVkIG9yIHNtYWxsZXIgZGF0YSBibG9ja3Mgd29yay4KIAkgKi8KIAlpZiAodW5saWtlbHkoc2JwLT5zYl9ibG9ja3NpemUgPiBQQUdFX1NJWkUpKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmgKaW5kZXggNWZjNjIwMS4uMzBkZDA4ZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtMjEwLDE1ICsyMTAsMTYgQEAKIAkJCQlzdHJ1Y3QgeGZzX2JtYXBfZnJlZSAqKTsKIHR5cGVkZWYgaW50CQkoKnhmc19ibWFwX2VvZl90KSh2b2lkICosIHhmc19maWxlb2ZmX3QsIGludCwgaW50ICopOwogdHlwZWRlZiBpbnQJCSgqeGZzX2lvbWFwX3dyaXRlX2RpcmVjdF90KSgKLQkJCQl2b2lkICosIGxvZmZfdCwgc2l6ZV90LCBpbnQsCisJCQkJdm9pZCAqLCB4ZnNfb2ZmX3QsIHNpemVfdCwgaW50LAogCQkJCXN0cnVjdCB4ZnNfYm1idF9pcmVjICosIGludCAqLCBpbnQpOwogdHlwZWRlZiBpbnQJCSgqeGZzX2lvbWFwX3dyaXRlX2RlbGF5X3QpKAotCQkJCXZvaWQgKiwgbG9mZl90LCBzaXplX3QsIGludCwKKwkJCQl2b2lkICosIHhmc19vZmZfdCwgc2l6ZV90LCBpbnQsCiAJCQkJc3RydWN0IHhmc19ibWJ0X2lyZWMgKiwgaW50ICopOwogdHlwZWRlZiBpbnQJCSgqeGZzX2lvbWFwX3dyaXRlX2FsbG9jYXRlX3QpKAotCQkJCXZvaWQgKiwgc3RydWN0IHhmc19ibWJ0X2lyZWMgKiwgaW50ICopOworCQkJCXZvaWQgKiwgeGZzX29mZl90LCBzaXplX3QsCisJCQkJc3RydWN0IHhmc19ibWJ0X2lyZWMgKiwgaW50ICopOwogdHlwZWRlZiBpbnQJCSgqeGZzX2lvbWFwX3dyaXRlX3Vud3JpdHRlbl90KSgKLQkJCQl2b2lkICosIGxvZmZfdCwgc2l6ZV90KTsKKwkJCQl2b2lkICosIHhmc19vZmZfdCwgc2l6ZV90KTsKIHR5cGVkZWYgdWludAkJKCp4ZnNfbGNrX21hcF9zaGFyZWRfdCkodm9pZCAqKTsKIHR5cGVkZWYgdm9pZAkJKCp4ZnNfbG9ja190KSh2b2lkICosIHVpbnQpOwogdHlwZWRlZiB2b2lkCQkoKnhmc19sb2NrX2RlbW90ZV90KSh2b2lkICosIHVpbnQpOwpAQCAtMjU4LDkgKzI1OSw5IEBACiAjZGVmaW5lIFhGU19JT01BUF9XUklURV9ERUxBWShtcCwgaW8sIG9mZnNldCwgY291bnQsIGZsYWdzLCBtdmFsLCBubWFwKSBcCiAJKCoobXApLT5tX2lvX29wcy54ZnNfaW9tYXBfd3JpdGVfZGVsYXkpIFwKIAkJKChpbyktPmlvX29iaiwgb2Zmc2V0LCBjb3VudCwgZmxhZ3MsIG12YWwsIG5tYXApCi0jZGVmaW5lIFhGU19JT01BUF9XUklURV9BTExPQ0FURShtcCwgaW8sIG12YWwsIG5tYXApIFwKKyNkZWZpbmUgWEZTX0lPTUFQX1dSSVRFX0FMTE9DQVRFKG1wLCBpbywgb2Zmc2V0LCBjb3VudCwgbXZhbCwgbm1hcCkgXAogCSgqKG1wKS0+bV9pb19vcHMueGZzX2lvbWFwX3dyaXRlX2FsbG9jYXRlKSBcCi0JCSgoaW8pLT5pb19vYmosIG12YWwsIG5tYXApCisJCSgoaW8pLT5pb19vYmosIG9mZnNldCwgY291bnQsIG12YWwsIG5tYXApCiAjZGVmaW5lIFhGU19JT01BUF9XUklURV9VTldSSVRURU4obXAsIGlvLCBvZmZzZXQsIGNvdW50KSBcCiAJKCoobXApLT5tX2lvX29wcy54ZnNfaW9tYXBfd3JpdGVfdW53cml0dGVuKSBcCiAJCSgoaW8pLT5pb19vYmosIG9mZnNldCwgY291bnQpCkBAIC00MjgsMTAgKzQyOSwxMCBAQAogI2RlZmluZSBYRlNfV1JJVEVJT19MT0dfTEFSR0UJMTYKIAogLyoKLSAqIE1heCBhbmQgbWluIHZhbHVlcyBmb3IgVUlPIGFuZCBtb3VudC1vcHRpb24gZGVmaW5lZCBJL08gc2l6ZXM7Ci0gKiBtaW4gdmFsdWUgY2FuJ3QgYmUgbGVzcyB0aGFuIGEgcGFnZS4gIEN1cnJlbnRseSB1bnVzZWQuCisgKiBNYXggYW5kIG1pbiB2YWx1ZXMgZm9yIG1vdW50LW9wdGlvbiBkZWZpbmVkIEkvTworICogcHJlYWxsb2NhdGlvbiBzaXplcy4KICAqLwotI2RlZmluZSBYRlNfTUFYX0lPX0xPRwkJMTYJLyogNjRLICovCisjZGVmaW5lIFhGU19NQVhfSU9fTE9HCQkzMAkvKiAxRyAqLwogI2RlZmluZSBYRlNfTUlOX0lPX0xPRwkJUEFHRV9TSElGVAogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190eXBlcy5oIGIvZnMveGZzL3hmc190eXBlcy5oCmluZGV4IDA0NjA5ZDIuLmU0YmY3MTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHlwZXMuaAorKysgYi9mcy94ZnMveGZzX3R5cGVzLmgKQEAgLTYzLDYgKzYzLDcgQEAKIHR5cGVkZWYgX19zNjQJCQl4ZnNfZGFkZHJfdDsJLyogPGRpc2sgYWRkcmVzcz4gdHlwZSAqLwogdHlwZWRlZiBjaGFyICoJCQl4ZnNfY2FkZHJfdDsJLyogPGNvcmUgYWRkcmVzcz4gdHlwZSAqLwogdHlwZWRlZiBfX3UzMgkJCXhmc19kZXZfdDsKK3R5cGVkZWYgX191MzIJCQl4ZnNfbmxpbmtfdDsKIAogLyogX19wc2ludF90IGlzIHRoZSBzYW1lIHNpemUgYXMgYSBwb2ludGVyICovCiAjaWYgKEJJVFNfUEVSX0xPTkcgPT0gMzIpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3V0aWxzLmMgYi9mcy94ZnMveGZzX3V0aWxzLmMKaW5kZXggODE2Yjk0NS4uZDFmODE0NiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc191dGlscy5jCisrKyBiL2ZzL3hmcy94ZnNfdXRpbHMuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJeGZzX2lub2RlX3QJKmRwLAkJLyogZGlyZWN0b3J5IHdpdGhpbiB3aG9zZSBhbGxvY2F0ZQogCQkJCQkgICB0aGUgaW5vZGUuICovCiAJbW9kZV90CQltb2RlLAotCW5saW5rX3QJCW5saW5rLAorCXhmc19ubGlua190CW5saW5rLAogCXhmc19kZXZfdAlyZGV2LAogCWNyZWRfdAkJKmNyZWRwLAogCXByaWRfdAkJcHJpZCwJCS8qIHByb2plY3QgaWQgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdXRpbHMuaCBiL2ZzL3hmcy94ZnNfdXRpbHMuaAppbmRleCBlMWVkNmE1Li4wMWQ5OGI0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3V0aWxzLmgKKysrIGIvZnMveGZzL3hmc191dGlscy5oCkBAIC00Miw3ICs0Miw3IEBACiBleHRlcm4gaW50IHhmc19kaXJfbG9va3VwX2ludCAoYmh2X2Rlc2NfdCAqLCB1aW50LCB2bmFtZV90ICosIHhmc19pbm9fdCAqLAogCQkJCXhmc19pbm9kZV90ICoqKTsKIGV4dGVybiBpbnQgeGZzX3RydW5jYXRlX2ZpbGUgKHhmc19tb3VudF90ICosIHhmc19pbm9kZV90ICopOwotZXh0ZXJuIGludCB4ZnNfZGlyX2lhbGxvYyAoeGZzX3RyYW5zX3QgKiosIHhmc19pbm9kZV90ICosIG1vZGVfdCwgbmxpbmtfdCwKK2V4dGVybiBpbnQgeGZzX2Rpcl9pYWxsb2MgKHhmc190cmFuc190ICoqLCB4ZnNfaW5vZGVfdCAqLCBtb2RlX3QsIHhmc19ubGlua190LAogCQkJCXhmc19kZXZfdCwgY3JlZF90ICosIHByaWRfdCwgaW50LAogCQkJCXhmc19pbm9kZV90ICoqLCBpbnQgKik7CiBleHRlcm4gaW50IHhmc19kcm9wbGluayAoeGZzX3RyYW5zX3QgKiwgeGZzX2lub2RlX3QgKik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zmc29wcy5jIGIvZnMveGZzL3hmc192ZnNvcHMuYwppbmRleCAwMGFhZTljLi5iNTM3MzY2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zmc29wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdmZzb3BzLmMKQEAgLTE2NDksNiArMTY0OSw3IEBACiAjZGVmaW5lIE1OVE9QVF9TV0lEVEgJInN3aWR0aCIJLyogZGF0YSB2b2x1bWUgc3RyaXBlIHdpZHRoICovCiAjZGVmaW5lIE1OVE9QVF9OT1VVSUQJIm5vdXVpZCIJLyogaWdub3JlIGZpbGVzeXN0ZW0gVVVJRCAqLwogI2RlZmluZSBNTlRPUFRfTVRQVAkibXRwdCIJCS8qIGZpbGVzeXN0ZW0gbW91bnQgcG9pbnQgKi8KKyNkZWZpbmUgTU5UT1BUX0FMTE9DU0laRSAgICAiYWxsb2NzaXplIiAgICAvKiBwcmVmZXJyZWQgYWxsb2NhdGlvbiBzaXplICovCiAjZGVmaW5lIE1OVE9QVF9JSEFTSFNJWkUgICAgImloYXNoc2l6ZSIgICAgLyogc2l6ZSBvZiBpbm9kZSBoYXNoIHRhYmxlICovCiAjZGVmaW5lIE1OVE9QVF9OT1JFQ09WRVJZICAgIm5vcmVjb3ZlcnkiICAgLyogZG9uJ3QgcnVuIFhGUyByZWNvdmVyeSAqLwogI2RlZmluZSBNTlRPUFRfTk9MT0dGTFVTSCAgICJub2xvZ2ZsdXNoIiAgIC8qIGRvbid0IGhhcmQgZmx1c2ggb24gbG9nIHdyaXRlcyAqLwpAQCAtMTY1Nyw2ICsxNjU4LDI4IEBACiAjZGVmaW5lIE1OVE9QVF9JS0VFUAkiaWtlZXAiCQkvKiBkbyBub3QgZnJlZSBlbXB0eSBpbm9kZSBjbHVzdGVycyAqLwogI2RlZmluZSBNTlRPUFRfTk9JS0VFUAkibm9pa2VlcCIJLyogZnJlZSBlbXB0eSBpbm9kZSBjbHVzdGVycyAqLwogCitTVEFUSUMgdW5zaWduZWQgbG9uZworc3VmZml4X3N0cnRvdWwoY29uc3QgY2hhciAqY3AsIGNoYXIgKiplbmRwLCB1bnNpZ25lZCBpbnQgYmFzZSkKK3sKKwlpbnQJbGFzdCwgc2hpZnRfbGVmdF9mYWN0b3IgPSAwOworCWNoYXIJKnZhbHVlID0gKGNoYXIgKiljcDsKKworCWxhc3QgPSBzdHJsZW4odmFsdWUpIC0gMTsKKwlpZiAodmFsdWVbbGFzdF0gPT0gJ0snIHx8IHZhbHVlW2xhc3RdID09ICdrJykgeworCQlzaGlmdF9sZWZ0X2ZhY3RvciA9IDEwOworCQl2YWx1ZVtsYXN0XSA9ICdcMCc7CisJfQorCWlmICh2YWx1ZVtsYXN0XSA9PSAnTScgfHwgdmFsdWVbbGFzdF0gPT0gJ20nKSB7CisJCXNoaWZ0X2xlZnRfZmFjdG9yID0gMjA7CisJCXZhbHVlW2xhc3RdID0gJ1wwJzsKKwl9CisJaWYgKHZhbHVlW2xhc3RdID09ICdHJyB8fCB2YWx1ZVtsYXN0XSA9PSAnZycpIHsKKwkJc2hpZnRfbGVmdF9mYWN0b3IgPSAzMDsKKwkJdmFsdWVbbGFzdF0gPSAnXDAnOworCX0KKworCXJldHVybiBzaW1wbGVfc3RydG91bChjcCwgZW5kcCwgYmFzZSkgPDwgc2hpZnRfbGVmdF9mYWN0b3I7Cit9CiAKIGludAogeGZzX3BhcnNlYXJncygKQEAgLTE2ODgsNjAgKzE3MTEsNjAgQEAKIAkJaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfTE9HQlVGUykpIHsKIAkJCWlmICghdmFsdWUgfHwgISp2YWx1ZSkgewogCQkJCXByaW50aygiWEZTOiAlcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIsCi0JCQkJCU1OVE9QVF9MT0dCVUZTKTsKKwkJCQkJdGhpc19jaGFyKTsKIAkJCQlyZXR1cm4gRUlOVkFMOwogCQkJfQogCQkJYXJncy0+bG9nYnVmcyA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCAmZW92LCAxMCk7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9MT0dCU0laRSkpIHsKLQkJCWludAlsYXN0LCBpbl9raWxvYnl0ZXMgPSAwOwotCiAJCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpIHsKIAkJCQlwcmludGsoIlhGUzogJXMgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iLAotCQkJCQlNTlRPUFRfTE9HQlNJWkUpOworCQkJCQl0aGlzX2NoYXIpOwogCQkJCXJldHVybiBFSU5WQUw7CiAJCQl9Ci0JCQlsYXN0ID0gc3RybGVuKHZhbHVlKSAtIDE7Ci0JCQlpZiAodmFsdWVbbGFzdF0gPT0gJ0snIHx8IHZhbHVlW2xhc3RdID09ICdrJykgewotCQkJCWluX2tpbG9ieXRlcyA9IDE7Ci0JCQkJdmFsdWVbbGFzdF0gPSAnXDAnOwotCQkJfQotCQkJYXJncy0+bG9nYnVmc2l6ZSA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCAmZW92LCAxMCk7Ci0JCQlpZiAoaW5fa2lsb2J5dGVzKQotCQkJCWFyZ3MtPmxvZ2J1ZnNpemUgPDw9IDEwOworCQkJYXJncy0+bG9nYnVmc2l6ZSA9IHN1ZmZpeF9zdHJ0b3VsKHZhbHVlLCAmZW92LCAxMCk7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9MT0dERVYpKSB7CiAJCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpIHsKIAkJCQlwcmludGsoIlhGUzogJXMgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iLAotCQkJCQlNTlRPUFRfTE9HREVWKTsKKwkJCQkJdGhpc19jaGFyKTsKIAkJCQlyZXR1cm4gRUlOVkFMOwogCQkJfQogCQkJc3RybmNweShhcmdzLT5sb2duYW1lLCB2YWx1ZSwgTUFYTkFNRUxFTik7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9NVFBUKSkgewogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7CiAJCQkJcHJpbnRrKCJYRlM6ICVzIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudFxuIiwKLQkJCQkJTU5UT1BUX01UUFQpOworCQkJCQl0aGlzX2NoYXIpOwogCQkJCXJldHVybiBFSU5WQUw7CiAJCQl9CiAJCQlzdHJuY3B5KGFyZ3MtPm10cHQsIHZhbHVlLCBNQVhOQU1FTEVOKTsKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX1JUREVWKSkgewogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7CiAJCQkJcHJpbnRrKCJYRlM6ICVzIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudFxuIiwKLQkJCQkJTU5UT1BUX1JUREVWKTsKKwkJCQkJdGhpc19jaGFyKTsKIAkJCQlyZXR1cm4gRUlOVkFMOwogCQkJfQogCQkJc3RybmNweShhcmdzLT5ydG5hbWUsIHZhbHVlLCBNQVhOQU1FTEVOKTsKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX0JJT1NJWkUpKSB7CiAJCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpIHsKIAkJCQlwcmludGsoIlhGUzogJXMgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iLAotCQkJCQlNTlRPUFRfQklPU0laRSk7IAorCQkJCQl0aGlzX2NoYXIpOwogCQkJCXJldHVybiBFSU5WQUw7CiAJCQl9CiAJCQlpb3NpemUgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgJmVvdiwgMTApOwogCQkJYXJncy0+ZmxhZ3MgfD0gWEZTTU5UX0lPU0laRTsKIAkJCWFyZ3MtPmlvc2l6ZWxvZyA9ICh1aW50OF90KSBpb3NpemU7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9BTExPQ1NJWkUpKSB7CisJCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpIHsKKwkJCQlwcmludGsoIlhGUzogJXMgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iLAorCQkJCQl0aGlzX2NoYXIpOworCQkJCXJldHVybiBFSU5WQUw7CisJCQl9CisJCQlpb3NpemUgPSBzdWZmaXhfc3RydG91bCh2YWx1ZSwgJmVvdiwgMTApOworCQkJYXJncy0+ZmxhZ3MgfD0gWEZTTU5UX0lPU0laRTsKKwkJCWFyZ3MtPmlvc2l6ZWxvZyA9IGZmcyhpb3NpemUpIC0gMTsKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX0lIQVNIU0laRSkpIHsKIAkJCWlmICghdmFsdWUgfHwgISp2YWx1ZSkgewogCQkJCXByaW50aygiWEZTOiAlcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIsCi0JCQkJCXRoaXNfY2hhcik7IAorCQkJCQl0aGlzX2NoYXIpOwogCQkJCXJldHVybiBFSU5WQUw7CiAJCQl9CiAJCQlhcmdzLT5mbGFncyB8PSBYRlNNTlRfSUhBU0hTSVpFOwpAQCAtMTc1Niw3ICsxNzc5LDcgQEAKIAkJCWFyZ3MtPmZsYWdzIHw9IFhGU01OVF9JTk82NDsKICNpZiAhWEZTX0JJR19JTlVNUwogCQkJcHJpbnRrKCJYRlM6ICVzIG9wdGlvbiBub3QgYWxsb3dlZCBvbiB0aGlzIHN5c3RlbVxuIiwKLQkJCQlNTlRPUFRfSU5PNjQpOworCQkJCXRoaXNfY2hhcik7CiAJCQlyZXR1cm4gRUlOVkFMOwogI2VuZGlmCiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9OT0FMSUdOKSkgewpAQCAtMTc2NiwxNCArMTc4OSwxNCBAQAogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfU1VOSVQpKSB7CiAJCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpIHsKIAkJCQlwcmludGsoIlhGUzogJXMgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iLAotCQkJCQlNTlRPUFRfU1VOSVQpOworCQkJCQl0aGlzX2NoYXIpOwogCQkJCXJldHVybiBFSU5WQUw7CiAJCQl9CiAJCQlkc3VuaXQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgJmVvdiwgMTApOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfU1dJRFRIKSkgewogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7CiAJCQkJcHJpbnRrKCJYRlM6ICVzIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudFxuIiwKLQkJCQkJTU5UT1BUX1NXSURUSCk7CisJCQkJCXRoaXNfY2hhcik7CiAJCQkJcmV0dXJuIEVJTlZBTDsKIAkJCX0KIAkJCWRzd2lkdGggPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgJmVvdiwgMTApOwpAQCAtMTc4MSw3ICsxODA0LDcgQEAKIAkJCWFyZ3MtPmZsYWdzICY9IH5YRlNNTlRfMzJCSVRJTk9ERVM7CiAjaWYgIVhGU19CSUdfSU5VTVMKIAkJCXByaW50aygiWEZTOiAlcyBvcHRpb24gbm90IGFsbG93ZWQgb24gdGhpcyBzeXN0ZW1cbiIsCi0JCQkJTU5UT1BUXzY0QklUSU5PREUpOworCQkJCXRoaXNfY2hhcik7CiAJCQlyZXR1cm4gRUlOVkFMOwogI2VuZGlmCiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9OT1VVSUQpKSB7CkBAIC0xODc3LDcgKzE5MDAsNyBAQAogCQlzZXFfcHJpbnRmKG0sICIsIiBNTlRPUFRfSUhBU0hTSVpFICI9JWQiLCBtcC0+bV9paHNpemUpOwogCiAJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0RGTFRfSU9TSVpFKQotCQlzZXFfcHJpbnRmKG0sICIsIiBNTlRPUFRfQklPU0laRSAiPSVkIiwgbXAtPm1fd3JpdGVpb19sb2cpOworCQlzZXFfcHJpbnRmKG0sICIsIiBNTlRPUFRfQUxMT0NTSVpFICI9JWQiLCAxPDxtcC0+bV93cml0ZWlvX2xvZyk7CiAKIAlpZiAobXAtPm1fbG9nYnVmcyA+IDApCiAJCXNlcV9wcmludGYobSwgIiwiIE1OVE9QVF9MT0dCVUZTICI9JWQiLCBtcC0+bV9sb2didWZzKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCA3MDA5Mjk2Li4yNWE1MjY2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIAlpbnQJCQltYW5kbG9ja19iZWZvcmUsIG1hbmRsb2NrX2FmdGVyOwogCXN0cnVjdCB4ZnNfZHF1b3QJKnVkcXAsICpnZHFwLCAqb2xkZHF1b3QxLCAqb2xkZHF1b3QyOwogCWludAkJCWZpbGVfb3duZXI7Ci0JaW50CQkJbmVlZF9pb2xvY2sgPSAoZmxhZ3MgJiBBVFRSX0RNSSkgPT0gMDsKKwlpbnQJCQluZWVkX2lvbG9jayA9IDE7CiAKIAl2cCA9IEJIVl9UT19WTk9ERShiZHApOwogCXZuX3RyYWNlX2VudHJ5KHZwLCBfX0ZVTkNUSU9OX18sIChpbnN0X3QgKilfX3JldHVybl9hZGRyZXNzKTsKQEAgLTM4NCw2ICszODQsOSBAQAogCSAqLwogCXRwID0gTlVMTDsKIAlsb2NrX2ZsYWdzID0gWEZTX0lMT0NLX0VYQ0w7CisJQVNTRVJUKGZsYWdzICYgQVRUUl9OT0xPQ0sgPyBmbGFncyAmIEFUVFJfRE1JIDogMSk7CisJaWYgKGZsYWdzICYgQVRUUl9OT0xPQ0spCisJCW5lZWRfaW9sb2NrID0gMDsKIAlpZiAoIShtYXNrICYgWEZTX0FUX1NJWkUpKSB7CiAJCWlmICgobWFzayAhPSAoWEZTX0FUX0NUSU1FfFhGU19BVF9BVElNRXxYRlNfQVRfTVRJTUUpKSB8fAogCQkgICAgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1dTWU5DKSkgewpAQCAtNDMyMCw3ICs0MzIzLDcgQEAKIAlpbnQJCQlydDsKIAl4ZnNfZmlsZW9mZl90CQlzdGFydG9mZnNldF9mc2I7CiAJeGZzX3RyYW5zX3QJCSp0cDsKLQlpbnQJCQluZWVkX2lvbG9jayA9IChhdHRyX2ZsYWdzICYgQVRUUl9ETUkpID09IDA7CisJaW50CQkJbmVlZF9pb2xvY2sgPSAxOwogCiAJdm5fdHJhY2VfZW50cnkoWEZTX0lUT1YoaXApLCBfX0ZVTkNUSU9OX18sIChpbnN0X3QgKilfX3JldHVybl9hZGRyZXNzKTsKIAltcCA9IGlwLT5pX21vdW50OwpAQCAtNDM0OCw4ICs0MzUxLDEyIEBACiAJCQlyZXR1cm4oZXJyb3IpOwogCX0KIAorCUFTU0VSVChhdHRyX2ZsYWdzICYgQVRUUl9OT0xPQ0sgPyBhdHRyX2ZsYWdzICYgQVRUUl9ETUkgOiAxKTsKKwlpZiAoYXR0cl9mbGFncyAmIEFUVFJfTk9MT0NLKQorCQluZWVkX2lvbG9jayA9IDA7CiAJaWYgKG5lZWRfaW9sb2NrKQogCQl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7CisKIAlyb3VuZGluZyA9IE1BWCgoX191aW50OF90KSgxIDw8IG1wLT5tX3NiLnNiX2Jsb2NrbG9nKSwKIAkJCShfX3VpbnQ4X3QpTkJQUCk7CiAJaWxlbiA9IGxlbiArIChvZmZzZXQgJiAocm91bmRpbmcgLSAxKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9idWcuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2J1Zy5oCmluZGV4IGFlMWUwYTUuLjM5YTNlMmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2J1Zy5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfQUxQSEFfQlVHX0gKICNkZWZpbmUgX0FMUEhBX0JVR19ICiAKKyNpZmRlZiBDT05GSUdfQlVHCiAjaW5jbHVkZSA8YXNtL3BhbC5oPgogCiAvKiA/Pz8gV291bGQgYmUgbmljZSB0byB1c2UgLmdwcmVsMzIgaGVyZSwgYnV0IHdlIGNhbid0IGJlIHN1cmUgdGhhdCB0aGUKQEAgLTEwLDYgKzExLDggQEAKIAkJICAgICAgIDogOiAiaSIgKFBBTF9idWdjaGspLCAiaSIoX19MSU5FX18pLCAiaSIoX19GSUxFX18pKQogCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvZXJybm8uaCBiL2luY2x1ZGUvYXNtLWFscGhhL2Vycm5vLmgKaW5kZXggYzg1YWI2Yi4uNjllMjY1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvZXJybm8uaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9lcnJuby5oCkBAIC0xMTYsNCArMTE2LDggQEAKICNkZWZpbmUJRUtFWVJFVk9LRUQJMTM0CS8qIEtleSBoYXMgYmVlbiByZXZva2VkICovCiAjZGVmaW5lCUVLRVlSRUpFQ1RFRAkxMzUJLyogS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlICovCiAKKy8qIGZvciByb2J1c3QgbXV0ZXhlcyAqLworI2RlZmluZQlFT1dORVJERUFECTEzNgkvKiBPd25lciBkaWVkICovCisjZGVmaW5lCUVOT1RSRUNPVkVSQUJMRQkxMzcJLyogU3RhdGUgbm90IHJlY292ZXJhYmxlICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc2lnaW5mby5oCmluZGV4IDg2YmNhYjUuLjk4MjIzNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zaWdpbmZvLmgKQEAgLTQsOCArNCw2IEBACiAjZGVmaW5lIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFCQkoNCAqIHNpemVvZihpbnQpKQogI2RlZmluZSBfX0FSQ0hfU0lfVFJBUE5PCiAKLSNkZWZpbmUgU0lHRVZfUEFEX1NJWkUJCQkoKFNJR0VWX01BWF9TSVpFL3NpemVvZihpbnQpKSAtIDQpCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zaWduYWwuaAppbmRleCAyNWY5OGJjLi4xYTJjNTJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zaWduYWwuaApAQCAtMTA5LDM0ICsxMDksMTEgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1oJNDA5NgogI2RlZmluZSBTSUdTVEtTWgkxNjM4NAogCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHg0MDAwMDAwMAotI2VuZGlmCi0KICNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDEJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDIJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMwkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KIAotLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KLXR5cGVkZWYgdm9pZCBfX3NpZ25hbGZuX3QoaW50KTsKLXR5cGVkZWYgX19zaWduYWxmbl90IF9fdXNlciAqX19zaWdoYW5kbGVyX3Q7Ci0KLXR5cGVkZWYgdm9pZCBfX3Jlc3RvcmVmbl90KHZvaWQpOwotdHlwZWRlZiBfX3Jlc3RvcmVmbl90IF9fdXNlciAqX19zaWdyZXN0b3JlX3Q7Ci0KLSNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCi0jZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCi0jZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3Qgb3NmX3NpZ2FjdGlvbiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL3ZtYWxsb2MuaAppbmRleCA5MTg4M2RlLi5iYThkN2E4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC92bWFsbG9jLmgKQEAgLTEsMTUgKzEsNCBAQAogLyoKICAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC92bWFsbG9jLmgKICAqLwotCi0vKgotICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCi0gKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCi0gKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKLSAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCi0gKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKLSAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKLSAqLwotI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQogI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoUEFHRV9PRkZTRVQgKyAweDFjMDAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdm1hbGxvYy5oCmluZGV4IDQyNTcxZWQuLmE1ZGZlOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3ZtYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC92bWFsbG9jLmgKQEAgLTE3LDE1ICsxNyw0IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCi0KLS8qCi0gKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKLSAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKLSAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAotICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KLSAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAotICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQotICovCi0jZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgKDgqMTAyNCoxMDI0KQotI2RlZmluZSBWTUFMTE9DX1NUQVJUCSAgKCgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCiAjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdm1hbGxvYy5oCmluZGV4IDc1OTY1OWIuLjI2Njc0YmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvdm1hbGxvYy5oCkBAIC03LDE1ICs3LDQgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotCi0vKgotICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCi0gKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCi0gKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKLSAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCi0gKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKLSAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKLSAqLwotI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQogI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoUEFHRV9PRkZTRVQgKyAweDFmMDAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3ZtYWxsb2MuaAppbmRleCBkZWY3MDVhLi5kMWNhOTU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3ZtYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3ZtYWxsb2MuaApAQCAtOCwxNyArOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAotLyoKLSAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQotICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQotICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0Ci0gKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgotICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCi0gKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCi0gKi8KLSNkZWZpbmUgVk1BTExPQ19PRkZTRVQJICAoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKLQogI2lmZGVmIENPTkZJR19BUkNIX0ZPT1RCUklER0UKICNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgzMDAwMDAwMCkKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcHhhMTBkYi92bWFsbG9jLmgKaW5kZXggZDMxZWY4NS4uNTQ2ZmI3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXB4YTEwZGIvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVweGExMGRiL3ZtYWxsb2MuaApAQCAtMTcsMTUgKzE3LDQgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KLQotLyoKLSAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQotICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQotICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0Ci0gKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgotICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCi0gKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCi0gKi8KLSNkZWZpbmUgVk1BTExPQ19PRkZTRVQJICAoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKICNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L3ZtYWxsb2MuaAppbmRleCA0YWY1MjNhLi5iNDY5M2NiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvdm1hbGxvYy5oCkBAIC01LDE3ICs1LDYgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9WTUFMTE9DX0gKICNkZWZpbmUgX19BUkNIX0FSTV9WTUFMTE9DX0gKIAotLyoKLSAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQotICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQotICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0Ci0gKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgotICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCi0gKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCi0gKi8KLSNkZWZpbmUgVk1BTExPQ19PRkZTRVQJICAoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKLSNkZWZpbmUgVk1BTExPQ19WTUFERFIoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSkKICNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaW14ZmIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pbXhmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNDZkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaW14ZmIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBtYWNoaW5lIHdoaWNoIHdlIGFyZSBydW5uaW5nIG9uLgorICovCitzdHJ1Y3QgaW14ZmJfbWFjaF9pbmZvIHsKKwl1X2xvbmcJCXBpeGNsb2NrOworCisJdV9zaG9ydAkJeHJlczsKKwl1X3Nob3J0CQl5cmVzOworCisJdV9jaGFyCQlicHA7CisJdV9jaGFyCQloc3luY19sZW47CisJdV9jaGFyCQlsZWZ0X21hcmdpbjsKKwl1X2NoYXIJCXJpZ2h0X21hcmdpbjsKKworCXVfY2hhcgkJdnN5bmNfbGVuOworCXVfY2hhcgkJdXBwZXJfbWFyZ2luOworCXVfY2hhcgkJbG93ZXJfbWFyZ2luOworCXVfY2hhcgkJc3luYzsKKworCXVfaW50CQljbWFwX2dyZXlzY2FsZToxLAorCQkJY21hcF9pbnZlcnNlOjEsCisJCQljbWFwX3N0YXRpYzoxLAorCQkJdW51c2VkOjI5OworCisJdV9pbnQJCXBjcjsKKwl1X2ludAkJcHdtcjsKKwl1X2ludAkJbHNjcjE7CisKKwl1X2NoYXIgKiBmaXhlZF9zY3JlZW5fY3B1OworCWRtYV9hZGRyX3QgZml4ZWRfc2NyZWVuX2RtYTsKKworCXZvaWQgKCpsY2RfcG93ZXIpKGludCk7CisJdm9pZCAoKmJhY2tsaWdodF9wb3dlcikoaW50KTsKK307Cit2b2lkIHNldF9pbXhfZmJfaW5mbyhzdHJ1Y3QgaW14ZmJfbWFjaF9pbmZvICpoYXJkX2lteF9mYl9pbmZvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvdm1hbGxvYy5oCmluZGV4IDI1MjAzOGYuLmNiNjE2OTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L3ZtYWxsb2MuaApAQCAtMTcsMTYgKzE3LDQgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KLQotLyoKLSAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQotICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQotICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0Ci0gKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgotICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCi0gKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCi0gKi8KLSNkZWZpbmUgVk1BTExPQ19PRkZTRVQJICAoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKLSNkZWZpbmUgVk1BTExPQ19WTUFERFIoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSkKICNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvY20uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvY20uaAppbmRleCBkMzFjMWE3Li4xYWIzNTNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2NtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9jbS5oCkBAIC0yNCw5ICsyNCw5IEBACiAjZGVmaW5lIENNX0NUUkxfTENEQklBU0ROCQkoMSA8PCAxMCkKICNkZWZpbmUgQ01fQ1RSTF9MQ0RNVVhTRUxfTUFTSwkJKDcgPDwgMTEpCiAjZGVmaW5lIENNX0NUUkxfTENETVVYU0VMX0dFTkxDRAkoMSA8PCAxMSkKLSNkZWZpbmUgQ01fQ1RSTF9MQ0RNVVhTRUxfU0hBUlBMQ0QxCSgzIDw8IDExKQotI2RlZmluZSBDTV9DVFJMX0xDRE1VWFNFTF9TSEFSUExDRDIJKDQgPDwgMTEpCi0jZGVmaW5lIENNX0NUUkxfTENETVVYU0VMX1ZHQQkJKDcgPDwgMTEpCisjZGVmaW5lIENNX0NUUkxfTENETVVYU0VMX1ZHQV8xNkJQUAkoMiA8PCAxMSkKKyNkZWZpbmUgQ01fQ1RSTF9MQ0RNVVhTRUxfU0hBUlBMQ0QJKDMgPDwgMTEpCisjZGVmaW5lIENNX0NUUkxfTENETVVYU0VMX1ZHQV84NDIxQlBQCSg0IDw8IDExKQogI2RlZmluZSBDTV9DVFJMX0xDREVOMAkJCSgxIDw8IDE0KQogI2RlZmluZSBDTV9DVFJMX0xDREVOMQkJCSgxIDw8IDE1KQogI2RlZmluZSBDTV9DVFJMX1NUQVRJQzEJCQkoMSA8PCAxNikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvcGxhdGZvcm0uaAppbmRleCA2YjY3ZTQxLi5iZDM2NGY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9wbGF0Zm9ybS5oCkBAIC0yMCwxNCArMjAsMTQgQEAKICAqICogQ29weXJpZ2h0IKkgQVJNIExpbWl0ZWQgMTk5OC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogCisgKgogICogICBJbnRlZ3JhdG9yIGFkZHJlc3MgbWFwCi0gKiAKKyAqCiAgKiAJTk9URTogVGhpcyBpcyBhIG11bHRpLWhvc3RlZCBoZWFkZXIgZmlsZSBmb3IgdXNlIHdpdGggdUhBTCBhbmQKICAqIAkgICAgICBzdXBwb3J0ZWQgZGVidWdnZXJzLgotICogCisgKgogICogCSRJZDogcGxhdGZvcm0ucyx2IDEuMzIgMjAwMC8wMi8xOCAxMDo1MTozOSBhc2ltcyBFeHAgJAotICogCisgKgogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpZm5kZWYgX19hZGRyZXNzX2gKQEAgLTQwLDIyICs0MCwyMiBAQAogICogIE1lbW9yeSBkZWZpbml0aW9ucwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgSW50ZWdyYXRvciBtZW1vcnkgbWFwCi0gKiAKKyAqCiAgKi8KICNkZWZpbmUgSU5URUdSQVRPUl9CT09UX1JPTV9MTyAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIElOVEVHUkFUT1JfQk9PVF9ST01fSEkgICAgICAgICAgMHgyMDAwMDAwMAogI2RlZmluZSBJTlRFR1JBVE9SX0JPT1RfUk9NX0JBU0UgICAgICAgIElOVEVHUkFUT1JfQk9PVF9ST01fSEkJIC8qICBOb3JtYWwgcG9zaXRpb24gKi8KICNkZWZpbmUgSU5URUdSQVRPUl9CT09UX1JPTV9TSVpFICAgICAgICBTWl81MTJLCiAKLS8qIAorLyoKICAqICBOZXcgQ29yZSBNb2R1bGVzIGhhdmUgZGlmZmVyZW50IGFtb3VudHMgb2YgU1NSQU0sIHRoZSBhbW91bnQgb2YgU1NSQU0KICAqICBmaXR0ZWQgY2FuIGJlIGZvdW5kIGluIEhEUl9TVEFULgotICogCisgKgogICogIFRoZSBzeW1ib2wgSU5URUdSQVRPUl9TU1JBTV9TSVpFIGlzIGtlcHQsIGhvd2V2ZXIgdGhpcyBub3cgcmVmZXJzIHRvCiAgKiAgdGhlIG1pbmltdW0gYW1vdW50IG9mIFNTUkFNIGZpdHRlZCBvbiBhbnkgY29yZSBtb2R1bGUuCi0gKiAKKyAqCiAgKiAgTmV3IENvcmUgTW9kdWxlcyBhbHNvIGFsaWFzIHRoZSBTU1JBTS4KLSAqIAorICoKICAqLwogI2RlZmluZSBJTlRFR1JBVE9SX1NTUkFNX0JBU0UgICAgICAgICAgIDB4MDAwMDAwMDAKICNkZWZpbmUgSU5URUdSQVRPUl9TU1JBTV9BTElBU19CQVNFICAgICAweDEwODAwMDAwCkBAIC02Nyw5ICs2Nyw5IEBACiAjZGVmaW5lIElOVEVHUkFUT1JfTUJSRF9TU1JBTV9CQVNFICAgICAgMHgyODAwMDAwMAogI2RlZmluZSBJTlRFR1JBVE9SX01CUkRfU1NSQU1fU0laRSAgICAgIFNaXzUxMksKIAotLyogCisvKgogICogIFNEUkFNIGlzIGEgU0lNTSB0aGVyZWZvcmUgdGhlIHNpemUgaXMgbm90IGtub3duLgotICogCisgKgogICovCiAjZGVmaW5lIElOVEVHUkFUT1JfU0RSQU1fQkFTRSAgICAgICAgICAgMHgwMDA0MDAwMAogCkBAIC03OSw5ICs3OSw5IEBACiAjZGVmaW5lIElOVEVHUkFUT1JfSERSMl9TRFJBTV9CQVNFICAgICAgMHhBMDAwMDAwMAogI2RlZmluZSBJTlRFR1JBVE9SX0hEUjNfU0RSQU1fQkFTRSAgICAgIDB4QjAwMDAwMDAKIAotLyogCisvKgogICogIExvZ2ljIGV4cGFuc2lvbiBtb2R1bGVzCi0gKiAKKyAqCiAgKi8KICNkZWZpbmUgSU5URUdSQVRPUl9MT0dJQ19NT0RVTEVTX0JBU0UgICAweEMwMDAwMDAwCiAjZGVmaW5lIElOVEVHUkFUT1JfTE9HSUNfTU9EVUxFMF9CQVNFICAgMHhDMDAwMDAwMApAQCAtOTIsNyArOTIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgSW50ZWdyYXRvciBoZWFkZXIgY2FyZCByZWdpc3RlcnMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogCisgKgogICovCiAjZGVmaW5lIElOVEVHUkFUT1JfSERSX0lEX09GRlNFVCAgICAgICAgMHgwMAogI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9QUk9DX09GRlNFVCAgICAgIDB4MDQKQEAgLTE4NSwxMiArMTg1LDEyIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBJbnRlZ3JhdG9yIHN5c3RlbSByZWdpc3RlcnMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogCisgKgogICovCiAKLS8qIAorLyoKICAqICBTeXN0ZW0gQ29udHJvbGxlcgotICogCisgKgogICovCiAjZGVmaW5lIElOVEVHUkFUT1JfU0NfSURfT0ZGU0VUICAgICAgICAgMHgwMAogI2RlZmluZSBJTlRFR1JBVE9SX1NDX09TQ19PRkZTRVQgICAgICAgIDB4MDQKQEAgLTIzMCwxMSArMjMwLDExIEBACiAjZGVmaW5lIElOVEVHUkFUT1JfU0NfQ1RSTF9VUlRTMSAgICAgICAgKDEgPDwgNikKICNkZWZpbmUgSU5URUdSQVRPUl9TQ19DVFJMX1VEVFIxICAgICAgICAoMSA8PCA3KQogCi0vKiAKKy8qCiAgKiAgRXh0ZXJuYWwgQnVzIEludGVyZmFjZQotICogCisgKgogICovCi0jZGVmaW5lIElOVEVHUkFUT1JfRUJJX0JBU0UgICAgICAgICAgICAgMHgxMjAwMDAwMCAKKyNkZWZpbmUgSU5URUdSQVRPUl9FQklfQkFTRSAgICAgICAgICAgICAweDEyMDAwMDAwCiAKICNkZWZpbmUgSU5URUdSQVRPUl9FQklfQ1NSMF9PRkZTRVQgICAgICAweDAwCiAjZGVmaW5lIElOVEVHUkFUT1JfRUJJX0NTUjFfT0ZGU0VUICAgICAgMHgwNApAQCAtMjc5LDkgKzI3OSw5IEBACiAjZGVmaW5lIElOVEVHUkFUT1JfS0JEX0JBU0UgICAgICAgICAgICAgMHgxODAwMDAwMAkgLyogIEtleWJvYXJkICovCiAjZGVmaW5lIElOVEVHUkFUT1JfTU9VU0VfQkFTRSAgICAgICAgICAgMHgxOTAwMDAwMAkgLyogIE1vdXNlICovCiAKLS8qIAorLyoKICAqICBMRUQncyAmIFN3aXRjaGVzCi0gKiAKKyAqCiAgKi8KICNkZWZpbmUgSU5URUdSQVRPUl9EQkdfQUxQSEFfT0ZGU0VUICAgICAweDAwCiAjZGVmaW5lIElOVEVHUkFUT1JfREJHX0xFRFNfT0ZGU0VUICAgICAgMHgwNApAQCAtMzAwLDcgKzMwMCw3IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogLyogUFMyIEtleWJvYXJkIGludGVyZmFjZSAqLwotI2RlZmluZSBLTUkwX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIElOVEVHUkFUT1JfS0JEX0JBU0UJCQorI2RlZmluZSBLTUkwX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIElOVEVHUkFUT1JfS0JEX0JBU0UKIAogLyogUFMyIE1vdXNlIGludGVyZmFjZSAqLwogI2RlZmluZSBLTUkxX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIElOVEVHUkFUT1JfTU9VU0VfQkFTRQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgKiAgVGhpcyByZXByZXNlbnRzIGEgZmFpcmx5IGxpYmVyYWwgdXNhZ2Ugb2YgYWRkcmVzcyBzcGFjZS4gIEV2ZW4gdGhvdWdoCiAgKiAgdGhlIFYzIG9ubHkgaGFzIHR3byB3aW5kb3dzICh0aGVyZWZvcmUgd2UgbmVlZCB0byBtYXAgc3R1ZmYgb24gdGhlIGZseSksCiAgKiAgd2UgbWFpbnRhaW4gdGhlIHNhbWUgYWRkcmVzc2VzLCBldmVuIGlmIHRoZXkncmUgbm90IG1hcHBlZC4KLSAqIAorICoKICAqLwogI2RlZmluZSBQSFlTX1BDSV9NRU1fQkFTRSAgICAgICAgICAgICAgIDB4NDAwMDAwMDAgICAvKiA1MTJNIHRvIHh4eCAqLwogLyogIHVudXNlZCAyNTZNIGZyb20gQTAwMDAwMDAtQUZGRkZGRkYgbWlnaHQgYmUgdXNlZCBmb3IgSTJPID8/PwpAQCAtMzI2LDcgKzMyNiw3IEBACiAgKi8KICNkZWZpbmUgUEhZU19QQ0lfVjNfQkFTRSAgICAgICAgICAgICAgICAweDYyMDAwMDAwCiAKLSNkZWZpbmUgUENJX0RSQU1TSVpFICAgICAgICAgICAgICAgICAgICBJTlRFR1JBVE9SX1NTUkFNX1NJWkUJCisjZGVmaW5lIFBDSV9EUkFNU0laRSAgICAgICAgICAgICAgICAgICAgSU5URUdSQVRPUl9TU1JBTV9TSVpFCiAKIC8qICdleHBvcnQnIHRoZXNlIHRvIFVIQUwgKi8KICNkZWZpbmUgVUhBTF9QQ0lfSU8gICAgICAgICAgICAgICAgICAgICBQQ0lfSU9fQkFTRQpAQCAtMzM0LDcgKzMzNCw3IEBACiAjZGVmaW5lIFVIQUxfUENJX0FMTE9DX0lPX0JBU0UgICAgICAgICAgMHgwMDAwNDAwMAogI2RlZmluZSBVSEFMX1BDSV9BTExPQ19NRU1fQkFTRSAgICAgICAgIFBDSV9NRU1fQkFTRQogI2RlZmluZSBVSEFMX1BDSV9NQVhfU0xPVCAgICAgICAgICAgICAgIDIwCi0JCisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogIFN0YXJ0IG9mIHVIQUwgZGVmaW5pdGlvbnMKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzQzLDE3ICszNDMsMTcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIEludGVncmF0b3IgSW50ZXJydXB0IENvbnRyb2xsZXJzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIAotICogIE9mZnNldHMgZnJvbSBpbnRlcnJ1cHQgY29udHJvbGxlciBiYXNlIAotICogCisgKgorICogIE9mZnNldHMgZnJvbSBpbnRlcnJ1cHQgY29udHJvbGxlciBiYXNlCisgKgogICogIFN5c3RlbSBDb250cm9sbGVyIGludGVycnVwdCBjb250cm9sbGVyIGJhc2UgaXMKLSAqIAorICoKICAqIAlJTlRFR1JBVE9SX0lDX0JBU0UgKyAoaGVhZGVyX251bWJlciA8PCA2KQotICogCisgKgogICogIENvcmUgTW9kdWxlIGludGVycnVwdCBjb250cm9sbGVyIGJhc2UgaXMKLSAqIAotICogCUlOVEVHUkFUT1JfSERSX0lDIAotICogCisgKgorICogCUlOVEVHUkFUT1JfSERSX0lDCisgKgogICovCiAjZGVmaW5lIElSUV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMAogI2RlZmluZSBJUlFfUkFXX1NUQVRVUyAgICAgICAgICAgICAgICAgIDB4MDQKQEAgLTM3NCwyMiArMzc0LDIyIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBJbnRlcnJ1cHRzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIAotICogIAorICoKKyAqCiAgKiAgRWFjaCBDb3JlIE1vZHVsZSBoYXMgdHdvIGludGVycnVwdHMgY29udHJvbGxlcnMsIG9uZSBvbiB0aGUgY29yZSBtb2R1bGUKICAqICBpdHNlbGYgYW5kIG9uZSBpbiB0aGUgc3lzdGVtIGNvbnRyb2xsZXIgb24gdGhlIG1vdGhlcmJvYXJkLiAgVGhlCiAgKiAgUkVBRF9JTlQgbWFjcm8gaW4gdGFyZ2V0LnMgcmVhZHMgYm90aCBpbnRlcnJ1cHQgY29udHJvbGxlcnMgYW5kIHJldHVybnMKICAqICBhIDMyIGJpdCBiaXRtYXNrLCBiaXRzIDAgdG8gMjMgYXJlIGludGVycnVwdHMgZnJvbSB0aGUgc3lzdGVtIGNvbnRyb2xsZXIKICAqICBhbmQgYml0cyAyNCB0byAzMSBhcmUgZnJvbSB0aGUgY29yZSBtb2R1bGUuCi0gKiAgCisgKgogICogIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgcmVsYXRlIHRvIHRoZSBiaXRtYXNrIHJldHVybmVkIGJ5IFJFQURfSU5ULgotICogCisgKgogICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIExFRCdzIC0gVGhlIGhlYWRlciBMRUQgaXMgbm90IGFjY2Vzc2libGUgdmlhIHRoZSB1SEFMIEFQSQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAKKyAqCiAgKi8KICNkZWZpbmUgR1JFRU5fTEVEICAgICAgICAgICAgICAgICAgICAgICAweDAxCiAjZGVmaW5lIFlFTExPV19MRUQgICAgICAgICAgICAgICAgICAgICAgMHgwMgpAQCAtMzk5LDQ0ICszOTksNDQgQEAKIAogI2RlZmluZSBMRURfQkFOSyAgICAgICAgICAgICAgICAgICAgICAgIElOVEVHUkFUT1JfREJHX0xFRFMKIAotLyogCisvKgogICogIE1lbW9yeSBkZWZpbml0aW9ucyAtIHJ1biB1SEFMIG91dCBvZiBTU1JBTS4KLSAqIAorICoKICAqLwogI2RlZmluZSB1SEFMX01FTU9SWV9TSVpFICAgICAgICAgICAgICAgIElOVEVHUkFUT1JfU1NSQU1fU0laRQogCi0vKiAKKy8qCiAgKiAgQXBwbGljYXRpb24gRmxhc2gKLSAqIAorICoKICAqLwogI2RlZmluZSBGTEFTSF9CQVNFICAgICAgICAgICAgICAgICAgICAgIElOVEVHUkFUT1JfRkxBU0hfQkFTRQogI2RlZmluZSBGTEFTSF9TSVpFICAgICAgICAgICAgICAgICAgICAgIElOVEVHUkFUT1JfRkxBU0hfU0laRQogI2RlZmluZSBGTEFTSF9FTkQgICAgICAgICAgICAgICAgICAgICAgIChGTEFTSF9CQVNFICsgRkxBU0hfU0laRSAtIDEpCiAjZGVmaW5lIEZMQVNIX0JMT0NLX1NJWkUgICAgICAgICAgICAgICAgU1pfMTI4SwogCi0vKiAKKy8qCiAgKiAgQm9vdCBGbGFzaAotICogCisgKgogICovCiAjZGVmaW5lIEVQUk9NX0JBU0UgICAgICAgICAgICAgICAgICAgICAgSU5URUdSQVRPUl9CT09UX1JPTV9ISQogI2RlZmluZSBFUFJPTV9TSVpFICAgICAgICAgICAgICAgICAgICAgIElOVEVHUkFUT1JfQk9PVF9ST01fU0laRQogI2RlZmluZSBFUFJPTV9FTkQgICAgICAgICAgICAgICAgICAgICAgIChFUFJPTV9CQVNFICsgRVBST01fU0laRSAtIDEpCiAKLS8qIAorLyoKICAqICBDbGVhbiBiYXNlIC0gZHVtbXkKLSAqIAorICoKICAqLwogI2RlZmluZSBDTEVBTl9CQVNFICAgICAgICAgICAgICAgICAgICAgIEVQUk9NX0JBU0UKIAotLyogCisvKgogICogIFRpbWVyIGRlZmluaXRpb25zCi0gKiAKKyAqCiAgKiAgT25seSB1c2UgdGltZXIgMSAmIDIKICAqICAoYm90aCBydW4gYXQgMjRNSHogYW5kIHdpbGwgbmVlZCB0aGUgY2xvY2sgZGl2aWRlciBzZXQgdG8gMTYpLgotICogCisgKgogICogIFRpbWVyIDAgcnVucyBhdCBidXMgZnJlcXVlbmN5IGFuZCB0aGVyZWZvcmUgY291bGQgdmFyeSBhbmQgY3VycmVudGx5CiAgKiAgdUhBTCBjYW4ndCBoYW5kbGUgdGhhdC4KLSAqIAorICoKICAqLwogCiAjZGVmaW5lIElOVEVHUkFUT1JfVElNRVIwX0JBU0UgICAgICAgICAgSU5URUdSQVRPUl9DVF9CQVNFCkBAIC00NDcsOSArNDQ3LDkgQEAKICNkZWZpbmUgTUFYX1BFUklPRCAgICAgICAgICAgICAgICAgICAgICA2OTkwNTAKICNkZWZpbmUgVElDS1NfUEVSX3VTRUMgICAgICAgICAgICAgICAgICAyNAogCi0vKiAKLSAqICBUaGVzZSBhcmUgdXNlY29uZHMgTk9UIHRpY2tzLiAgCi0gKiAKKy8qCisgKiAgVGhlc2UgYXJlIHVzZWNvbmRzIE5PVCB0aWNrcy4KKyAqCiAgKi8KICNkZWZpbmUgbVNFQ18xICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwCiAjZGVmaW5lIG1TRUNfNSAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TRUNfMSAqIDUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3Ivdm1hbGxvYy5oCmluZGV4IDUwZTlhZWUuLjE3MGNjY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3Ivdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3Ivdm1hbGxvYy5oCkBAIC0xNywxNSArMTcsNCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwotCi0vKgotICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCi0gKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCi0gKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKLSAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCi0gKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKLSAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKLSAqLwotI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQogI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoUEFHRV9PRkZTRVQgKyAweDEwMDAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC92bWFsbG9jLmgKaW5kZXggZGMxZDJhOS4uMGYyZjY4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3ZtYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdm1hbGxvYy5oCkBAIC0xMCw5ICsxMCw2IEBACiAgKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKICAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKICAqLwotI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQotI2RlZmluZSBWTUFMTE9DX1ZNQUREUih4KSAoKHVuc2lnbmVkIGxvbmcpKHgpKQogLy8jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweGU4MDAwMDAwKQogLyogaW5jcmVhc2UgdXNhYmxlIHBoeXNpY2FsIFJBTSB0byB+OTkyTSBwZXIgUk1LICovCiAjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweGZlMDAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9wbGF0Zm9ybS5oCmluZGV4IDUwOWU0NGQuLjkwMWJiYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BsYXRmb3JtLmgKQEAgLTEyMSw2ICsxMjEsNyBAQAogCiBzdHJ1Y3QgcGNpX3N5c19kYXRhOwogCit1MzIgKml4cDIwMDBfcGNpX2NvbmZpZ19hZGRyKHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlKTsKIHZvaWQgaXhwMjAwMF9wY2lfcHJlaW5pdCh2b2lkKTsKIGludCBpeHAyMDAwX3BjaV9zZXR1cChpbnQsIHN0cnVjdCBwY2lfc3lzX2RhdGEqKTsKIHN0cnVjdCBwY2lfYnVzKiBpeHAyMDAwX3BjaV9zY2FuX2J1cyhpbnQsIHN0cnVjdCBwY2lfc3lzX2RhdGEqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC92bWFsbG9jLmgKaW5kZXggMmU0YmNiYy4uNDczZGZmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC92bWFsbG9jLmgKQEAgLTE3LDcgKzE3LDQgQEAKICAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAogICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQogICovCi0jZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgICAoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQotI2RlZmluZSBWTUFMTE9DX1ZNQUREUih4KSAgICgodW5zaWduZWQgbG9uZykoeCkpCiAjZGVmaW5lIFZNQUxMT0NfRU5ECSAgICAweGZhZmZlZmZmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L3ZtYWxsb2MuaAppbmRleCBkYTQ2ZTU2Li4wNTBkNDZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC92bWFsbG9jLmgKQEAgLTEsMTcgKzEsNSBAQAogLyoKICAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC92bWFsbG9jLmgKICAqLwotCi0vKgotICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCi0gKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCi0gKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKLSAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCi0gKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKLSAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKLSAqLwotI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQotI2RlZmluZSBWTUFMTE9DX1ZNQUREUih4KSAoKHVuc2lnbmVkIGxvbmcpKHgpKQogI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhGRjAwMDAwMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvdm1hbGxvYy5oCmluZGV4IGVkZWFlYmUuLjgxNjIzMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3ZtYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC92bWFsbG9jLmgKQEAgLTEsMTUgKzEsNCBAQAogLyoKICAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3ZtYWxsb2MuaAogICovCi0KLS8qCi0gKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKLSAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKLSAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAotICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KLSAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAotICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQotICovCi0jZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgKDgqMTAyNCoxMDI0KQotI2RlZmluZSBWTUFMTE9DX1NUQVJUCSAgKCgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCiAjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvdm1hbGxvYy5oCmluZGV4IDVhYzYwNzkuLjgxNjNlNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvdm1hbGxvYy5oCkBAIC03LDE1ICs3LDQgQEAKICAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICovCi0KLS8qCi0gKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKLSAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlcgotICogdGhlIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQKLSAqIG1lYW5zIHRoYXQgYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlCi0gKiBjYXVnaHQuICBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIChvbmUgcGFnZSkKLSAqIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQgYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQotICovCi0jZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgKDgqMTAyNCoxMDI0KQotI2RlZmluZSBWTUFMTE9DX1NUQVJUCSAgKCgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCiAjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweGU4MDAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3ZtYWxsb2MuaAppbmRleCBjNmE4MzU4Li41YjhiZDhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3ZtYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3ZtYWxsb2MuaApAQCAtMTcsMTcgKzE3LDUgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICovCi0KLS8qCi0gKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKLSAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKLSAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAotICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KLSAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAotICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQotICovCi0jZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCSAgKDgqMTAyNCoxMDI0KQotI2RlZmluZSBWTUFMTE9DX1NUQVJUCSAgKCgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCi0jZGVmaW5lIFZNQUxMT0NfVk1BRERSKHgpICgodW5zaWduZWQgbG9uZykoeCkpCiAjZGVmaW5lIFZNQUxMT0NfRU5ECSAgKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS92bWFsbG9jLmgKaW5kZXggMzM4MWFmNi4uNWJiNDUwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3ZtYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdm1hbGxvYy5oCkBAIC04LDE1ICs4LDQgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotCi0vKgotICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCi0gKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCi0gKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKLSAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCi0gKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKLSAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKLSAqLwotI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQogI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhlODAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvdm1hbGxvYy5oCmluZGV4IGExM2MyN2YuLjA3NzA0NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL3ZtYWxsb2MuaApAQCAtNywxNSArNyw0IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLQotLyoKLSAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQotICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQotICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0Ci0gKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgotICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCi0gKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCi0gKi8KLSNkZWZpbmUgVk1BTExPQ19PRkZTRVQJICAoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKICNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgxYzAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1paXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1paXMuaAppbmRleCA3YWU4ZTFmLi4zODViMDdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtaWlzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWlpcy5oCkBAIC0xNCw2ICsxNCw3IEBACiAgKiAgICAyNi0wNi0yMDAzICAgICBCSkQgICAgIEZpbmlzaGVkIG9mZiBkZWZpbml0aW9ucyBmb3IgcmVnaXN0ZXIgYWRkcmVzc2VzCiAgKiAgICAxMi0wMy0yMDA0ICAgICBCSkQgICAgIFVwZGF0ZWQgaW5jbHVkZSBwcm90ZWN0aW9uCiAgKiAgICAwNy0wMy0yMDA1ICAgICBCSkQgICAgIEFkZGVkIEZJRk8gc2l6ZSBmbGFncyBhbmQgUzNDMjQ0MCBNUExMCisgKiAgICAwNS0wNC0yMDA1ICAgICBMQ1ZSICAgIEFkZGVkIElJU0ZDT04gZGVmaW5pdGlvbnMgZm9yIHRoZSBTM0MyNDAwCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfSUlTX0gKQEAgLTY4LDUgKzY5LDE0IEBACiAjZGVmaW5lIFMzQzI0MTBfSUlTRkNPTl9SWE1BU0sJICAoMHgzZikKICNkZWZpbmUgUzNDMjQxMF9JSVNGQ09OX1JYU0hJRlQJICAoMCkKIAorI2RlZmluZSBTM0MyNDAwX0lJU0ZDT05fVFhETUEgICAgICgxPDwxMSkKKyNkZWZpbmUgUzNDMjQwMF9JSVNGQ09OX1JYRE1BICAgICAoMTw8MTApCisjZGVmaW5lIFMzQzI0MDBfSUlTRkNPTl9UWEVOQUJMRSAgKDE8PDkpCisjZGVmaW5lIFMzQzI0MDBfSUlTRkNPTl9SWEVOQUJMRSAgKDE8PDgpCisjZGVmaW5lIFMzQzI0MDBfSUlTRkNPTl9UWE1BU0sJICAoMHgwNyA8PCA0KQorI2RlZmluZSBTM0MyNDAwX0lJU0ZDT05fVFhTSElGVAkgICg0KQorI2RlZmluZSBTM0MyNDAwX0lJU0ZDT05fUlhNQVNLCSAgKDB4MDcpCisjZGVmaW5lIFMzQzI0MDBfSUlTRkNPTl9SWFNISUZUCSAgKDApCisKICNkZWZpbmUgUzNDMjQxMF9JSVNGSUZPICAoMHgxMCkKICNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfSUlTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1tZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1tZW0uaAppbmRleCAxYTEzMjhhLi5hMmQ3ZDBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtbWVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLW1lbS5oCkBAIC0xMiw2ICsxMiw3IEBACiAgKiAgQ2hhbmdlbG9nOgogICoJMjktU2VwLTIwMDQgIEJKRCAgSW5pdGlhbCBpbmNsdWRlIGZvciBMaW51eAogICogICAgICAxMC1NYXItMjAwNSAgTENWUiBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQorICogICAgICAwNC1BcHItMjAwNSAgTENWUiBBZGRlZCBTM0MyNDAwIERSQU0vQkFOS1NJWkVfTUFTSyBkZWZpbml0aW9ucwogICoKICovCiAKQEAgLTE4Myw2ICsxODQsMTIgQEAKICNkZWZpbmUgUzNDMjQxMF9SRUZSRVNIX1RSUF8zY2xrCSgxPDwyMCkKICNkZWZpbmUgUzNDMjQxMF9SRUZSRVNIX1RSUF80Y2xrCSgyPDwyMCkKIAorI2RlZmluZSBTM0MyNDAwX1JFRlJFU0hfRFJBTV9UUlBfTUFTSyAgICgzPDwyMCkKKyNkZWZpbmUgUzNDMjQwMF9SRUZSRVNIX0RSQU1fVFJQXzFfNWNsayAoMDw8MjApCisjZGVmaW5lIFMzQzI0MDBfUkVGUkVTSF9EUkFNX1RSUF8yXzVjbGsgKDE8PDIwKQorI2RlZmluZSBTM0MyNDAwX1JFRlJFU0hfRFJBTV9UUlBfM181Y2xrICgyPDwyMCkKKyNkZWZpbmUgUzNDMjQwMF9SRUZSRVNIX0RSQU1fVFJQXzRfNWNsayAoMzw8MjApCisKICNkZWZpbmUgUzNDMjQxMF9SRUZSRVNIX1RTUkNfTUFTSwkoMzw8MTgpCiAjZGVmaW5lIFMzQzI0MTBfUkVGUkVTSF9UU1JDXzRjbGsJKDA8PDE4KQogI2RlZmluZSBTM0MyNDEwX1JFRlJFU0hfVFNSQ181Y2xrCSgxPDwxOCkKQEAgLTIwNSw2ICsyMTIsNyBAQAogI2RlZmluZSBTM0MyNDEwX0JBTktTSVpFXzRNCQkoMHg1IDw8IDApCiAjZGVmaW5lIFMzQzI0MTBfQkFOS1NJWkVfMk0JCSgweDQgPDwgMCkKICNkZWZpbmUgUzNDMjQxMF9CQU5LU0laRV9NQVNLCQkoMHg3IDw8IDApCisjZGVmaW5lIFMzQzI0MDBfQkFOS1NJWkVfTUFTSyAgICAgICAgICAgKDB4NCA8PCAwKQogI2RlZmluZSBTM0MyNDEwX0JBTktTSVpFX1NDTEtfRU4JKDE8PDQpCiAjZGVmaW5lIFMzQzI0MTBfQkFOS1NJWkVfU0NLRV9FTgkoMTw8NSkKICNkZWZpbmUgUzNDMjQxMF9CQU5LU0laRV9CVVJTVAkJKDE8PDcpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc3BpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc3BpLmgKaW5kZXggY2I1MDJhOC4uMzM4MjE3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNwaS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zcGkuaApAQCAtMTIsNiArMTIsNyBAQAogICogICAgMjAtMDQtMjAwNCAgICAgS0YgICAgICBDcmVhdGVkIGZpbGUKICAqICAgIDA0LTEwLTIwMDQgICAgIEJKRCAgICAgUmVtb3ZlZCBWQSBhZGRyZXNzIChubyBsb25nZXIgbWFwcGVkKQogICoJCQkgICAgIHRpZGllZCBmaWxlIGZvciBzdWJtaXNzaW9uCisgKiAgICAwMy0wNC0yMDA1ICAgICBMQ1ZSICAgIEFkZGVkIFMzQzI0MDBfU1BQSU5fbkNTIGRlZmluaXRpb24KICAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19TUElfSApAQCAtNDYsNiArNDcsNyBAQAogCiAjZGVmaW5lIFMzQzI0MTBfU1BQSU5fRU5NVUwJICAoMTw8MikJLyogTXVsdGkgTWFzdGVyIEVycm9yIGRldGVjdCAqLwogI2RlZmluZSBTM0MyNDEwX1NQUElOX1JFU0VSVkVECSAgKDE8PDEpCisjZGVmaW5lIFMzQzI0MDBfU1BQSU5fbkNTICAgICAJICAoMTw8MSkJLyogU1BJIENhcmQgU2VsZWN0ICovCiAjZGVmaW5lIFMzQzI0MTBfU1BQSU5fS0VFUAkgICgxPDwwKQkvKiBNYXN0ZXIgT3V0IGtlZXAgKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCmluZGV4IGFkNDI1MmUuLmQ3YTRhODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCkBAIC0xNiw2ICsxNiw3IEBACiAgKiAgMTItT2N0LTIwMDQgQkpEICBUYWtlIGFjY291bnQgb2YgZGVidWcgdWFydCBjb25maWd1cmF0aW9uCiAgKiAgMTUtTm92LTIwMDQgQkpEICBGaXhlZCB1YXJ0IGNvbmZpZ3VyYXRpb24KICAqICAyMi1GZWItMjAwNSBCSkQgIEFkZGVkIHdhdGNoZG9nIHRvIHVuY29tcHJlc3MKKyAqICAwNC1BcHItMjAwNSBMQ1ZSIEFkZGVkIHN1cHBvcnQgdG8gUzNDMjQwMCAobm8gY3B1aWQgYXQgR1NUQVRVUzEpCiAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICkBAIC02OSw5ICs3MCwxMiBAQAogc3RhdGljIHZvaWQKIHB1dGMoY2hhciBjaCkKIHsKLQlpbnQgY3B1aWQgPSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilTM0MyNDEwX0dTVEFUVVMxKTsKKwlpbnQgY3B1aWQgPSBTM0MyNDEwX0dTVEFUVVMxXzI0MTA7CiAKKyNpZm5kZWYgQ09ORklHX0NQVV9TM0MyNDAwCisJY3B1aWQgPSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilTM0MyNDEwX0dTVEFUVVMxKTsKIAljcHVpZCAmPSBTM0MyNDEwX0dTVEFUVVMxX0lETUFTSzsKKyNlbmRpZgogCiAJaWYgKGNoID09ICdcbicpCiAJCXB1dGMoJ1xyJyk7ICAgIC8qIGV4cGFuZCBuZXdsaW5lIHRvIFxyXG4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92bWFsbG9jLmgKaW5kZXggNWZlNzJhZC4uMzM5NjNjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92bWFsbG9jLmgKQEAgLTE5LDE4ICsxOSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICiAKLS8qCi0gKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKLSAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKLSAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAotICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KLSAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAotICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQotICovCi0KLSNkZWZpbmUgVk1BTExPQ19PRkZTRVQJICAoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKLSNkZWZpbmUgVk1BTExPQ19WTUFERFIoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSkKICNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhFMDAwMDAwMCkKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVk1BTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3ZtYWxsb2MuaAppbmRleCAxMzViYzk0Li4yZmIxYzZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC92bWFsbG9jLmgKQEAgLTEsMTUgKzEsNCBAQAogLyoKICAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC92bWFsbG9jLmgKICAqLwotCi0vKgotICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCi0gKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCi0gKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKLSAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCi0gKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKLSAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKLSAqLwotI2RlZmluZSBWTUFMTE9DX09GRlNFVAkgICg4KjEwMjQqMTAyNCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVAkgICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQogI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhlODAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL3ZtYWxsb2MuaAppbmRleCAxY2MyMDA5Li4xMGRiNWQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvdm1hbGxvYy5oCkBAIC0xLDE1ICsxLDQgQEAKIC8qCiAgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvdm1hbGxvYy5oCiAgKi8KLQotLyoKLSAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQotICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQotICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0Ci0gKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgotICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCi0gKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCi0gKi8KLSNkZWZpbmUgVk1BTExPQ19PRkZTRVQJICAoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJICAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKICNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvdm1hbGxvYy5oCmluZGV4IGFkZmIzNDgyLi5hYzc4MGRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS92bWFsbG9jLmgKQEAgLTE4LDE2ICsxOCw0IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCi0KLS8qCi0gKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKLSAqIGN1cnJlbnQgOE1CIHZhbHVlIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgOE1CICJob2xlIiBhZnRlciB0aGUKLSAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAotICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KLSAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAotICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQotICovCi0jZGVmaW5lIFZNQUxMT0NfT0ZGU0VUCQkoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJCSgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQotI2RlZmluZSBWTUFMTE9DX1ZNQUREUih4KQkoKHVuc2lnbmVkIGxvbmcpKHgpKQogI2RlZmluZSBWTUFMTE9DX0VORAkJKFBBR0VfT0ZGU0VUICsgMHgxODAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9idWcuaCBiL2luY2x1ZGUvYXNtLWFybS9idWcuaAppbmRleCA1ZTkxYjkwLi4yNGQxMTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2J1Zy5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKKyNpZmRlZiBDT05GSUdfQlVHCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKIGV4dGVybiB2b2xhdGlsZSB2b2lkIF9fYnVnKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCB2b2lkICpkYXRhKTsKIApAQCAtMTcsNiArMTgsOCBAQAogI2VuZGlmCiAKICNkZWZpbmUgSEFWRV9BUkNIX0JVRworI2VuZGlmCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvYW1iYV9jbGNkLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvYW1iYV9jbGNkLmgKaW5kZXggMjE0OWJlNy4uY2U0Y2Y1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2FtYmFfY2xjZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9hbWJhX2NsY2QuaApAQCAtMTUzLDcgKzE1Myw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGNkZmJfZGVjb2RlKHN0cnVjdCBjbGNkX2ZiICpmYiwgc3RydWN0IGNsY2RfcmVncyAqcmVncykKIHsKLQl1MzIgdmFsOworCXUzMiB2YWwsIGNwbDsKIAogCS8qCiAJICogUHJvZ3JhbSB0aGUgQ0xDRCBjb250cm9sbGVyIHJlZ2lzdGVycyBhbmQgc3RhcnQgdGhlIENMQ0QKQEAgLTE2NCw3ICsxNjQsMTAgQEAKIAl2YWwgfD0gKGZiLT5mYi52YXIubGVmdF9tYXJnaW4gLSAxKSA8PCAyNDsKIAlyZWdzLT50aW0wID0gdmFsOwogCi0JdmFsID0gZmItPmZiLnZhci55cmVzIC0gMTsKKwl2YWwgPSBmYi0+ZmIudmFyLnlyZXM7CisJaWYgKGZiLT5wYW5lbC0+Y250bCAmIENOVExfTENERFVBTCkKKwkJdmFsIC89IDI7CisJdmFsIC09IDE7CiAJdmFsIHw9IChmYi0+ZmIudmFyLnZzeW5jX2xlbiAtIDEpIDw8IDEwOwogCXZhbCB8PSBmYi0+ZmIudmFyLmxvd2VyX21hcmdpbiA8PCAxNjsKIAl2YWwgfD0gZmItPmZiLnZhci51cHBlcl9tYXJnaW4gPDwgMjQ7CkBAIC0xNzQsMTMgKzE3NywxNyBAQAogCXZhbCB8PSBmYi0+ZmIudmFyLnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCAgPyAwIDogVElNMl9JSFM7CiAJdmFsIHw9IGZiLT5mYi52YXIuc3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCA/IDAgOiBUSU0yX0lWUzsKIAotCWlmIChmYi0+cGFuZWwtPmNudGwgJiBDTlRMX0xDRFRGVCkKLQkJdmFsIHw9IChmYi0+ZmIudmFyLnhyZXNfdmlydHVhbCAtIDEpIDw8IDE2OwotCWVsc2UgaWYgKGZiLT5wYW5lbC0+Y250bCAmIENOVExfTENEQlcpCi0JCXByaW50aygid2hhdCB2YWx1ZSBmb3IgQ1BMIGZvciBzdG5tb25vIHBhbmVscz8iKTsKLQllbHNlCi0JCXZhbCB8PSAoKGZiLT5mYi52YXIueHJlc192aXJ0dWFsICogOCAvIDMpIC0gMSkgPDwgMTY7Ci0JcmVncy0+dGltMiA9IHZhbDsKKwljcGwgPSBmYi0+ZmIudmFyLnhyZXNfdmlydHVhbDsKKwlpZiAoZmItPnBhbmVsLT5jbnRsICYgQ05UTF9MQ0RURlQpCSAgLyogVEZUICovCisJCS8qIC8gMSAqLzsKKwllbHNlIGlmICghZmItPmZiLnZhci5ncmF5c2NhbGUpCQkgIC8qIFNUTiBjb2xvciAqLworCQljcGwgPSBjcGwgKiA4IC8gMzsKKwllbHNlIGlmIChmYi0+cGFuZWwtPmNudGwgJiBDTlRMX0xDRE1PTk84KSAvKiBTVE4gbW9ub2Nocm9tZSwgOGJpdCAqLworCQljcGwgLz0gODsKKwllbHNlCQkJCQkgIC8qIFNUTiBtb25vY2hyb21lLCA0Yml0ICovCisJCWNwbCAvPSA0OworCisJcmVncy0+dGltMiA9IHZhbCB8ICgoY3BsIC0gMSkgPDwgMTYpOwogCiAJcmVncy0+dGltMyA9IGZiLT5wYW5lbC0+dGltMzsKIApAQCAtMjA0LDcgKzIxMSw3IEBACiAJY2FzZSAxNjoKIAkJdmFsIHw9IENOVExfTENEQlBQMTY7CiAJCWJyZWFrOwotCWNhc2UgMjQ6CisJY2FzZSAzMjoKIAkJdmFsIHw9IENOVExfTENEQlBQMjQ7CiAJCWJyZWFrOwogCX0KQEAgLTIxNSw4ICsyMjIsOCBAQAogCiBzdGF0aWMgaW5saW5lIGludCBjbGNkZmJfY2hlY2soc3RydWN0IGNsY2RfZmIgKmZiLCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKIHsKLQl2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlcyA9ICh2YXItPnhyZXMgKyA3KSAmIH43OwotCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzOworCXZhci0+eHJlc192aXJ0dWFsID0gdmFyLT54cmVzID0gKHZhci0+eHJlcyArIDE1KSAmIH4xNTsKKwl2YXItPnlyZXNfdmlydHVhbCA9IHZhci0+eXJlcyA9ICh2YXItPnlyZXMgKyAxKSAmIH4xOwogCiAjZGVmaW5lIENIRUNLKGUsbCxoKSAodmFyLT5lIDwgbCB8fCB2YXItPmUgPiBoKQogCWlmIChDSEVDSyhyaWdodF9tYXJnaW4sICg1KzEpLCAyNTYpIHx8CS8qIGJhY2sgcG9yY2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9jbG9jay5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2Nsb2NrLmgKaW5kZXggNDk4MzQ0OS4uMTlkYTg2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2Nsb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2Nsb2NrLmgKQEAgLTI2LDEwICsyNiwxMyBAQAogLyoqCiAgKiBjbGtfZ2V0IC0gbG9va3VwIGFuZCBvYnRhaW4gYSByZWZlcmVuY2UgdG8gYSBjbG9jayBwcm9kdWNlci4KICAqIEBkZXY6IGRldmljZSBmb3IgY2xvY2sgImNvbnN1bWVyIgotICogQGlkOiBkZXZpY2UgSUQKKyAqIEBpZDogY2xvY2sgY29tc3VtZXIgSUQKICAqCiAgKiBSZXR1cm5zIGEgc3RydWN0IGNsayBjb3JyZXNwb25kaW5nIHRvIHRoZSBjbG9jayBwcm9kdWNlciwgb3IKLSAqIHZhbGlkIElTX0VSUigpIGNvbmRpdGlvbiBjb250YWluaW5nIGVycm5vLgorICogdmFsaWQgSVNfRVJSKCkgY29uZGl0aW9uIGNvbnRhaW5pbmcgZXJybm8uICBUaGUgaW1wbGVtZW50YXRpb24KKyAqIHVzZXMgQGRldiBhbmQgQGlkIHRvIGRldGVybWluZSB0aGUgY2xvY2sgY29uc3VtZXIsIGFuZCB0aGVyZWJ5CisgKiB0aGUgY2xvY2sgcHJvZHVjZXIuICAoSU9XLCBAaWQgbWF5IGJlIGlkZW50aWNhbCBzdHJpbmdzLCBidXQKKyAqIGNsa19nZXQgbWF5IHJldHVybiBkaWZmZXJlbnQgY2xvY2sgcHJvZHVjZXJzIGRlcGVuZGluZyBvbiBAZGV2LikKICAqLwogc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vaW8uaAppbmRleCA2OWJjN2EzLi42NThmZmEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaW8uaApAQCAtOTksMTIgKzk5LDE2IEBACiAgKi8KICNpZmRlZiBfX2lvCiAjZGVmaW5lIG91dGIodixwKQkJX19yYXdfd3JpdGViKHYsX19pbyhwKSkKLSNkZWZpbmUgb3V0dyh2LHApCQlfX3Jhd193cml0ZXcoY3B1X3RvX2xlMTYodiksX19pbyhwKSkKLSNkZWZpbmUgb3V0bCh2LHApCQlfX3Jhd193cml0ZWwoY3B1X3RvX2xlMzIodiksX19pbyhwKSkKKyNkZWZpbmUgb3V0dyh2LHApCQlfX3Jhd193cml0ZXcoKF9fZm9yY2UgX191MTYpIFwKKwkJCQkJY3B1X3RvX2xlMTYodiksX19pbyhwKSkKKyNkZWZpbmUgb3V0bCh2LHApCQlfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpIFwKKwkJCQkJY3B1X3RvX2xlMzIodiksX19pbyhwKSkKIAotI2RlZmluZSBpbmIocCkJKHsgdW5zaWduZWQgaW50IF9fdiA9IF9fcmF3X3JlYWRiKF9faW8ocCkpOyBfX3Y7IH0pCi0jZGVmaW5lIGludyhwKQkoeyB1bnNpZ25lZCBpbnQgX192ID0gbGUxNl90b19jcHUoX19yYXdfcmVhZHcoX19pbyhwKSkpOyBfX3Y7IH0pCi0jZGVmaW5lIGlubChwKQkoeyB1bnNpZ25lZCBpbnQgX192ID0gbGUzMl90b19jcHUoX19yYXdfcmVhZGwoX19pbyhwKSkpOyBfX3Y7IH0pCisjZGVmaW5lIGluYihwKQkoeyBfX3U4IF9fdiA9IF9fcmF3X3JlYWRiKF9faW8ocCkpOyBfX3Y7IH0pCisjZGVmaW5lIGludyhwKQkoeyBfX3UxNiBfX3YgPSBsZTE2X3RvX2NwdSgoX19mb3JjZSBfX2xlMTYpIFwKKwkJCV9fcmF3X3JlYWR3KF9faW8ocCkpKTsgX192OyB9KQorI2RlZmluZSBpbmwocCkJKHsgX191MzIgX192ID0gbGUzMl90b19jcHUoKF9fZm9yY2UgX19sZTMyKSBcCisJCQlfX3Jhd19yZWFkbChfX2lvKHApKSk7IF9fdjsgfSkKIAogI2RlZmluZSBvdXRzYihwLGQsbCkJCV9fcmF3X3dyaXRlc2IoX19pbyhwKSxkLGwpCiAjZGVmaW5lIG91dHN3KHAsZCxsKQkJX19yYXdfd3JpdGVzdyhfX2lvKHApLGQsbCkKQEAgLTE0OSw5ICsxNTMsMTEgQEAKICAqIElPIHBvcnQgcHJpbWl0aXZlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqLwogI2lmZGVmIF9fbWVtX3BjaQotI2RlZmluZSByZWFkYihjKSAoeyB1bnNpZ25lZCBpbnQgX192ID0gX19yYXdfcmVhZGIoX19tZW1fcGNpKGMpKTsgX192OyB9KQotI2RlZmluZSByZWFkdyhjKSAoeyB1bnNpZ25lZCBpbnQgX192ID0gbGUxNl90b19jcHUoX19yYXdfcmVhZHcoX19tZW1fcGNpKGMpKSk7IF9fdjsgfSkKLSNkZWZpbmUgcmVhZGwoYykgKHsgdW5zaWduZWQgaW50IF9fdiA9IGxlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKF9fbWVtX3BjaShjKSkpOyBfX3Y7IH0pCisjZGVmaW5lIHJlYWRiKGMpICh7IF9fdTggIF9fdiA9IF9fcmF3X3JlYWRiKF9fbWVtX3BjaShjKSk7IF9fdjsgfSkKKyNkZWZpbmUgcmVhZHcoYykgKHsgX191MTYgX192ID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KSBcCisJCQkJCV9fcmF3X3JlYWR3KF9fbWVtX3BjaShjKSkpOyBfX3Y7IH0pCisjZGVmaW5lIHJlYWRsKGMpICh7IF9fdTMyIF9fdiA9IGxlMzJfdG9fY3B1KChfX2ZvcmNlIF9fbGUzMikgXAorCQkJCQlfX3Jhd19yZWFkbChfX21lbV9wY2koYykpKTsgX192OyB9KQogI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpIHJlYWRiKGFkZHIpCiAjZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikgcmVhZHcoYWRkcikKICNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKSByZWFkbChhZGRyKQpAQCAtMTYxLDggKzE2NywxMCBAQAogI2RlZmluZSByZWFkc2wocCxkLGwpCQlfX3Jhd19yZWFkc2woX19tZW1fcGNpKHApLGQsbCkKIAogI2RlZmluZSB3cml0ZWIodixjKQkJX19yYXdfd3JpdGViKHYsX19tZW1fcGNpKGMpKQotI2RlZmluZSB3cml0ZXcodixjKQkJX19yYXdfd3JpdGV3KGNwdV90b19sZTE2KHYpLF9fbWVtX3BjaShjKSkKLSNkZWZpbmUgd3JpdGVsKHYsYykJCV9fcmF3X3dyaXRlbChjcHVfdG9fbGUzMih2KSxfX21lbV9wY2koYykpCisjZGVmaW5lIHdyaXRldyh2LGMpCQlfX3Jhd193cml0ZXcoKF9fZm9yY2UgX191MTYpIFwKKwkJCQkJY3B1X3RvX2xlMTYodiksX19tZW1fcGNpKGMpKQorI2RlZmluZSB3cml0ZWwodixjKQkJX19yYXdfd3JpdGVsKChfX2ZvcmNlIF9fdTMyKSBcCisJCQkJCWNwdV90b19sZTMyKHYpLF9fbWVtX3BjaShjKSkKIAogI2RlZmluZSB3cml0ZXNiKHAsZCxsKQkJX19yYXdfd3JpdGVzYihfX21lbV9wY2kocCksZCxsKQogI2RlZmluZSB3cml0ZXN3KHAsZCxsKQkJX19yYXdfd3JpdGVzdyhfX21lbV9wY2kocCksZCxsKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmgKaW5kZXggMmRmNGVhYy4uYTk4OTJlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oCkBAIC0xNyw2ICsxNywyMyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3ZtYWxsb2MuaD4KIAogLyoKKyAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQorICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0CisgKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgorICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCisgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCisgKgorICogTm90ZSB0aGF0IHBsYXRmb3JtcyBtYXkgb3ZlcnJpZGUgVk1BTExPQ19TVEFSVCwgYnV0IHRoZXkgbXVzdCBwcm92aWRlCisgKiBWTUFMTE9DX0VORC4gIFZNQUxMT0NfRU5EIGRlZmluZXMgdGhlIChleGNsdXNpdmUpIGxpbWl0IG9mIHRoaXMgc3BhY2UsCisgKiB3aGljaCBtYXkgbm90IG92ZXJsYXAgSU8gc3BhY2UuCisgKi8KKyNpZm5kZWYgVk1BTExPQ19TVEFSVAorI2RlZmluZSBWTUFMTE9DX09GRlNFVAkJKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKKyNlbmRpZgorCisvKgogICogSGFyZHdhcmUtd2lzZSwgd2UgaGF2ZSBhIHR3byBsZXZlbCBwYWdlIHRhYmxlIHN0cnVjdHVyZSwgd2hlcmUgdGhlIGZpcnN0CiAgKiBsZXZlbCBoYXMgNDA5NiBlbnRyaWVzLCBhbmQgdGhlIHNlY29uZCBsZXZlbCBoYXMgMjU2IGVudHJpZXMuICBFYWNoIGVudHJ5CiAgKiBpcyBvbmUgMzItYml0IHdvcmQuICBNb3N0IG9mIHRoZSBiaXRzIGluIHRoZSBzZWNvbmQgbGV2ZWwgZW50cnkgYXJlIHVzZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLWFybS9wcm9jZXNzb3IuaAppbmRleCA0YTk4NDU5Li43ZDQxMThlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3Byb2Nlc3Nvci5oCkBAIC0yMyw4ICsyMyw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKLSNkZWZpbmUgS0VSTkVMX1NUQUNLX1NJWkUJUEFHRV9TSVpFCi0KIHVuaW9uIGRlYnVnX2luc24gewogCXUzMglhcm07CiAJdTE2CXRodW1iOwpAQCAtODcsOCArODUsOSBAQAogICovCiBleHRlcm4gaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKLSNkZWZpbmUgS1NUS19FSVAodHNrKQkoKCh1bnNpZ25lZCBsb25nICopKDQwOTYrKHVuc2lnbmVkIGxvbmcpKHRzayktPnRocmVhZF9pbmZvKSlbMTAxOV0pCi0jZGVmaW5lIEtTVEtfRVNQKHRzaykJKCgodW5zaWduZWQgbG9uZyAqKSg0MDk2Kyh1bnNpZ25lZCBsb25nKSh0c2spLT50aHJlYWRfaW5mbykpWzEwMTddKQorI2RlZmluZSBLU1RLX1JFR1ModHNrKQkoKChzdHJ1Y3QgcHRfcmVncyAqKShUSFJFQURfU1RBUlRfU1AgKyAodW5zaWduZWQgbG9uZykodHNrKS0+dGhyZWFkX2luZm8pKSAtIDEpCisjZGVmaW5lIEtTVEtfRUlQKHRzaykJS1NUS19SRUdTKHRzayktPkFSTV9wYworI2RlZmluZSBLU1RLX0VTUCh0c2spCUtTVEtfUkVHUyh0c2spLT5BUk1fc3AKIAogLyoKICAqIFByZWZldGNoaW5nIHN1cHBvcnQgLSBvbmx5IEFSTXY1LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3J0Yy5oIGIvaW5jbHVkZS9hc20tYXJtL3J0Yy5oCmluZGV4IGFhN2UxNmIuLjM3MGRmZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9ydGMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcnRjLmgKQEAgLTE4LDkgKzE4LDkgQEAKIAl2b2lkCQkoKnJlbGVhc2UpKHZvaWQpOwogCWludAkJKCppb2N0bCkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAotCXZvaWQJCSgqcmVhZF90aW1lKShzdHJ1Y3QgcnRjX3RpbWUgKik7CisJaW50CQkoKnJlYWRfdGltZSkoc3RydWN0IHJ0Y190aW1lICopOwogCWludAkJKCpzZXRfdGltZSkoc3RydWN0IHJ0Y190aW1lICopOwotCXZvaWQJCSgqcmVhZF9hbGFybSkoc3RydWN0IHJ0Y193a2Fscm0gKik7CisJaW50CQkoKnJlYWRfYWxhcm0pKHN0cnVjdCBydGNfd2thbHJtICopOwogCWludAkJKCpzZXRfYWxhcm0pKHN0cnVjdCBydGNfd2thbHJtICopOwogCWludAkJKCpwcm9jKShjaGFyICpidWYpOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWFybS9zaWduYWwuaAppbmRleCBiMDMzZTVmLi40NmU2OWFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NpZ25hbC5oCkBAIC0xMTQsMzQgKzExNCwxMCBAQAogI2RlZmluZSBTSUdTVEtTWgk4MTkyCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUJCTB4ODAwMDAwMDAKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQkweDEwMDAwMDAwCiAjZGVmaW5lIFNBX0lSUU5PTUFTSwkJMHgwODAwMDAwMAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAogI2VuZGlmCiAKLSNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwotI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KLQotLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KLXR5cGVkZWYgdm9pZCBfX3NpZ25hbGZuX3QoaW50KTsKLXR5cGVkZWYgX19zaWduYWxmbl90IF9fdXNlciAqX19zaWdoYW5kbGVyX3Q7Ci0KLXR5cGVkZWYgdm9pZCBfX3Jlc3RvcmVmbl90KHZvaWQpOwotdHlwZWRlZiBfX3Jlc3RvcmVmbl90IF9fdXNlciAqX19zaWdyZXN0b3JlX3Q7Ci0KLSNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCi0jZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCi0jZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1hcm0vc3RyaW5nLmgKaW5kZXggMmE4YWIxNi4uZTUwYzRhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3N0cmluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9zdHJpbmcuaApAQCAtMjksMTUgKzI5LDIyIEBACiAKICNkZWZpbmUgbWVtc2V0KHAsdixuKQkJCQkJCQlcCiAJKHsJCQkJCQkJCVwKLQkJaWYgKChuKSAhPSAwKSB7CQkJCQkJXAorCSAJdm9pZCAqX19wID0gKHApOyBzaXplX3QgX19uID0gbjsJCQlcCisJCWlmICgoX19uKSAhPSAwKSB7CQkJCQlcCiAJCQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoKHYpKSAmJiAodikgPT0gMCkJXAotCQkJCV9fbWVtemVybygocCksKG4pKTsJCQlcCisJCQkJX19tZW16ZXJvKChfX3ApLChfX24pKTsJCQlcCiAJCQllbHNlCQkJCQkJXAotCQkJCW1lbXNldCgocCksKHYpLChuKSk7CQkJXAorCQkJCW1lbXNldCgoX19wKSwodiksKF9fbikpOwkJXAogCQl9CQkJCQkJCVwKLQkJKHApOwkJCQkJCQlcCisJCShfX3ApOwkJCQkJCQlcCiAJfSkKIAotI2RlZmluZSBtZW16ZXJvKHAsbikgKHsgaWYgKChuKSAhPSAwKSBfX21lbXplcm8oKHApLChuKSk7IChwKTsgfSkKKyNkZWZpbmUgbWVtemVybyhwLG4pIAkJCQkJCQlcCisJKHsgCQkJCQkJCQlcCisJIAl2b2lkICpfX3AgPSAocCk7IHNpemVfdCBfX24gPSBuOwkJCVwKKwkgCWlmICgoX19uKSAhPSAwKSAJCQkJCVwKKwkgCQlfX21lbXplcm8oKF9fcCksKF9fbikpOyAJCQlcCisJIAkoX19wKTsgCQkJCQkJCVwKKwkgfSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLWFybS90aHJlYWRfaW5mby5oCmluZGV4IGE2MTYxOGYuLjY2YzU4NWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS90aHJlYWRfaW5mby5oCkBAIC0xNCw2ICsxNCwxMCBAQAogCiAjaW5jbHVkZSA8YXNtL2Zwc3RhdGUuaD4KIAorI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkxCisjZGVmaW5lIFRIUkVBRF9TSVpFCQk4MTkyCisjZGVmaW5lIFRIUkVBRF9TVEFSVF9TUAkJKFRIUkVBRF9TSVpFIC0gOCkKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogc3RydWN0IHRhc2tfc3RydWN0OwpAQCAtNzcsOCArODEsNiBAQAogI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKICNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQogCi0jZGVmaW5lIFRIUkVBRF9TSVpFCQk4MTkyCi0KIC8qCiAgKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKaW5kZXggYTE5ZWMwOS4uYWNlMjc0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaApAQCAtMzU5LDggKzM1OSw3IEBACiAjZGVmaW5lIF9fQVJNX05SX2NhY2hlZmx1c2gJCShfX0FSTV9OUl9CQVNFKzIpCiAjZGVmaW5lIF9fQVJNX05SX3VzcjI2CQkJKF9fQVJNX05SX0JBU0UrMykKICNkZWZpbmUgX19BUk1fTlJfdXNyMzIJCQkoX19BUk1fTlJfQkFTRSs0KQotCi0jZGVmaW5lIF9fQVJNX05SX3NldF90bHMJCShfX0FSTV9OUl9CQVNFKzB4ODAwKQorI2RlZmluZSBfX0FSTV9OUl9zZXRfdGxzCQkoX19BUk1fTlJfQkFTRSs1KQogCiAjZGVmaW5lIF9fc3lzMih4KSAjeAogI2RlZmluZSBfX3N5czEoeCkgX19zeXMyKHgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9idWcuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2J1Zy5oCmluZGV4IDkyMGI3MDUuLjcxNzdjNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2J1Zy5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKKyNpZmRlZiBDT05GSUdfQlVHCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKIGV4dGVybiB2b2xhdGlsZSB2b2lkIF9fYnVnKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCB2b2lkICpkYXRhKTsKIC8qIGdpdmUgZmlsZS9saW5lIGluZm9ybWF0aW9uICovCkBAIC0xMiw2ICsxMyw4IEBACiAjZW5kaWYKIAogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvc2lnbmFsLmgKaW5kZXggNmY2MmU1MS4uZGVkYjI5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc2lnbmFsLmgKQEAgLTExNCwzMCArMTE0LDEwIEBACiAjZGVmaW5lIFNJR1NUS1NaCTgxOTIKIAogI2lmZGVmIF9fS0VSTkVMX18KLQotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJMHg4MDAwMDAwMAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCTB4MTAwMDAwMDAKICNkZWZpbmUgU0FfSVJRTk9NQVNLCQkweDA4MDAwMDAwCi0jZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCiAjZW5kaWYKIAotI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLwotI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCi0jZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAyCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLwotCi0vKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwotdHlwZWRlZiB2b2lkICgqX19zaWdoYW5kbGVyX3QpKGludCk7Ci0KLSNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCi0jZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCi0jZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWNyaXMvcGFnZS5oCmluZGV4IGRkZDg5MTUuLmM3NjdkYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvcGFnZS5oCkBAIC03NywxMCArNzcsNiBAQAogICBwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIFBBR0VfQlVHKHBhZ2UpIGRvIHsgXAotICAgICAgICAgQlVHKCk7IFwKLX0gd2hpbGUgKDApCi0KIC8qIFB1cmUgMl5uIHZlcnNpb24gb2YgZ2V0X29yZGVyICovCiBzdGF0aWMgaW5saW5lIGludCBnZXRfb3JkZXIodW5zaWduZWQgbG9uZyBzaXplKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWNyaXMvc2lnbmFsLmgKaW5kZXggM2YxODdlYy4uZGZlMDM5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3NpZ25hbC5oCkBAIC0xMDgsMzAgKzEwOCw3IEBACiAjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKICNkZWZpbmUgU0lHU1RLU1oJODE5MgogCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQKLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKLSNlbmRpZgotCi0jZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCi0jZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCi0KLS8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCi10eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKLQotI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KLSNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KLSNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KIHN0cnVjdCBvbGRfc2lnYWN0aW9uIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9idWcuaCBiL2luY2x1ZGUvYXNtLWZydi9idWcuaAppbmRleCAwMTE4NjBiLi4wNzRjMGQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2J1Zy5oCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAorI2lmZGVmIENPTkZJR19CVUcKIC8qCiAgKiBUZWxsIHRoZSB1c2VyIHRoZXJlIGlzIHNvbWUgcHJvYmxlbS4KICAqLwpAQCAtNDUsNiArNDYsNyBAQAogI2RlZmluZSBIQVZFX0FSQ0hfS0dEQl9CQURfUEFHRQogI2RlZmluZSBrZ2RiX2JhZF9wYWdlKHBhZ2UpIGRvIHsga2dkYl9yYWlzZShTSUdBQlJUKTsgfSB3aGlsZSgwKQogI2VuZGlmCisjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tZnJ2L3BndGFibGUuaAppbmRleCAzYzZkNDJhLi5kMGE5YzJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmgKQEAgLTM0OSw5ICszNDksOSBAQAogCiAvKgogICogRGVmaW5lIHRoaXMgdG8gd2FybiBhYm91dCBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIHRoYXQgYXJlCi0gKiBkb25lIHdpdGhvdXQgYSAndmVyaWZ5X2FyZWEoVkVSSUZZX1dSSVRFLC4uKScKKyAqIGRvbmUgd2l0aG91dCBhICdhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLC4uKScKICAqLwotI3VuZGVmIFRFU1RfVkVSSUZZX0FSRUEKKyN1bmRlZiBURVNUX0FDQ0VTU19PSwogCiAjZGVmaW5lIHB0ZV9wcmVzZW50KHgpCShwdGVfdmFsKHgpICYgX1BBR0VfUFJFU0VOVCkKICNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIseHApCWRvIHsgc2V0X3B0ZV9hdChtbSwgYWRkciwgeHAsIF9fcHRlKDApKTsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWZydi9zaWduYWwuaAppbmRleCBmMTg5NTJmLi5kNDA3YmRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3NpZ25hbC5oCkBAIC0xMDcsMzAgKzEwNyw3IEBACiAjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKICNkZWZpbmUgU0lHU1RLU1oJODE5MgogCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAotI2VuZGlmCi0KLSNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwotI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KLQotLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KLXR5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQpOwotCi0jZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLwotI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLwotI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IG9sZF9zaWdhY3Rpb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKaW5kZXggZTU5MTNjMy4uNDAwYzJiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKKyNpZmRlZiBDT05GSUdfQlVHCiAjaWZuZGVmIEhBVkVfQVJDSF9CVUcKICNkZWZpbmUgQlVHKCkgZG8geyBcCiAJcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXApAQCAtMTEsMTMgKzEyLDYgQEAKIH0gd2hpbGUgKDApCiAjZW5kaWYKIAotI2lmbmRlZiBIQVZFX0FSQ0hfUEFHRV9CVUcKLSNkZWZpbmUgUEFHRV9CVUcocGFnZSkgZG8geyBcCi0JcHJpbnRrKCJwYWdlIEJVRyBmb3IgcGFnZSBhdCAlcFxuIiwgcGFnZSk7IFwKLQlCVUcoKTsgXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCiAjaWZuZGVmIEhBVkVfQVJDSF9CVUdfT04KICNkZWZpbmUgQlVHX09OKGNvbmRpdGlvbikgZG8geyBpZiAodW5saWtlbHkoKGNvbmRpdGlvbikhPTApKSBCVUcoKTsgfSB3aGlsZSgwKQogI2VuZGlmCkBAIC0zMSw0ICsyNSwxOCBAQAogfSB3aGlsZSAoMCkKICNlbmRpZgogCisjZWxzZSAvKiAhQ09ORklHX0JVRyAqLworI2lmbmRlZiBIQVZFX0FSQ0hfQlVHCisjZGVmaW5lIEJVRygpCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0FSQ0hfQlVHX09OCisjZGVmaW5lIEJVR19PTihjb25kaXRpb24pIGRvIHsgaWYgKGNvbmRpdGlvbikgOyB9IHdoaWxlKDApCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0FSQ0hfV0FSTl9PTgorI2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikgZG8geyBpZiAoY29uZGl0aW9uKSA7IH0gd2hpbGUoMCkKKyNlbmRpZgorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9lcnJuby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9lcnJuby5oCmluZGV4IDRkZDIzODQuLmU4ODUyYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZXJybm8uaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2Vycm5vLmgKQEAgLTEwMiw0ICsxMDIsOCBAQAogI2RlZmluZQlFS0VZUkVWT0tFRAkxMjgJLyogS2V5IGhhcyBiZWVuIHJldm9rZWQgKi8KICNkZWZpbmUJRUtFWVJFSkVDVEVECTEyOQkvKiBLZXkgd2FzIHJlamVjdGVkIGJ5IHNlcnZpY2UgKi8KIAorLyogZm9yIHJvYnVzdCBtdXRleGVzICovCisjZGVmaW5lCUVPV05FUkRFQUQJMTMwCS8qIE93bmVyIGRpZWQgKi8KKyNkZWZpbmUJRU5PVFJFQ09WRVJBQkxFCTEzMQkvKiBTdGF0ZSBub3QgcmVjb3ZlcmFibGUgKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3Jlc291cmNlLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3Jlc291cmNlLmgKaW5kZXggYjFmY2RhOS4uY2ZlMzY5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9yZXNvdXJjZS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcmVzb3VyY2UuaApAQCAtNDEsOCArNDEsMTEgQEAKICNkZWZpbmUgUkxJTUlUX0xPQ0tTCQkxMAkvKiBtYXhpbXVtIGZpbGUgbG9ja3MgaGVsZCAqLwogI2RlZmluZSBSTElNSVRfU0lHUEVORElORwkxMQkvKiBtYXggbnVtYmVyIG9mIHBlbmRpbmcgc2lnbmFscyAqLwogI2RlZmluZSBSTElNSVRfTVNHUVVFVUUJCTEyCS8qIG1heGltdW0gYnl0ZXMgaW4gUE9TSVggbXF1ZXVlcyAqLworI2RlZmluZSBSTElNSVRfTklDRQkJMTMJLyogbWF4IG5pY2UgcHJpbyBhbGxvd2VkIHRvIHJhaXNlIHRvCisJCQkJCSAgIDAtMzkgZm9yIG5pY2UgbGV2ZWwgMTkgLi4gLTIwICovCisjZGVmaW5lIFJMSU1JVF9SVFBSSU8JCTE0CS8qIG1heGltdW0gcmVhbHRpbWUgcHJpb3JpdHkgKi8KIAotI2RlZmluZSBSTElNX05MSU1JVFMJCTEzCisjZGVmaW5lIFJMSU1fTkxJTUlUUwkJMTUKIAogLyoKICAqIFN1UyBzYXlzIGxpbWl0cyBoYXZlIHRvIGJlIHVuc2lnbmVkLgpAQCAtODEsNiArODQsOCBAQAogCVtSTElNSVRfTE9DS1NdCQk9IHsgIFJMSU1fSU5GSU5JVFksICBSTElNX0lORklOSVRZIH0sCVwKIAlbUkxJTUlUX1NJR1BFTkRJTkddCT0geyAJCTAsCSAgICAgICAwIH0sCVwKIAlbUkxJTUlUX01TR1FVRVVFXQk9IHsgICBNUV9CWVRFU19NQVgsICAgTVFfQllURVNfTUFYIH0sCVwKKwlbUkxJTUlUX05JQ0VdCQk9IHsgMCwgMCB9LAkJCQlcCisJW1JMSU1JVF9SVFBSSU9dCQk9IHsgMCwgMCB9LAkJCQlcCiB9CiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NlY3Rpb25zLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NlY3Rpb25zLmgKaW5kZXggOTc2YWMyOS4uMTk1Y2NkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2VjdGlvbnMuaApAQCAtOCw2ICs4LDggQEAKIGV4dGVybiBjaGFyIF9fYnNzX3N0YXJ0W10sIF9fYnNzX3N0b3BbXTsKIGV4dGVybiBjaGFyIF9faW5pdF9iZWdpbltdLCBfX2luaXRfZW5kW107CiBleHRlcm4gY2hhciBfc2luaXR0ZXh0W10sIF9laW5pdHRleHRbXTsKK2V4dGVybiBjaGFyIF9zZXh0cmF0ZXh0W10gX19hdHRyaWJ1dGVfXygod2VhaykpOworZXh0ZXJuIGNoYXIgX2VleHRyYXRleHRbXSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CiBleHRlcm4gY2hhciBfZW5kW107CiAKICNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfU0VDVElPTlNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKaW5kZXggOWNhYzhlOC4uODc4NmUwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKQEAgLTIzNiwxMSArMjM2LDE4IEBACiAjZGVmaW5lIFNJR0VWX1RIUkVBRAkyCS8qIGRlbGl2ZXIgdmlhIHRocmVhZCBjcmVhdGlvbiAqLwogI2RlZmluZSBTSUdFVl9USFJFQURfSUQgNAkvKiBkZWxpdmVyIHRvIHRocmVhZCAqLwogCi0jZGVmaW5lIFNJR0VWX01BWF9TSVpFCTY0Ci0jaWZuZGVmIFNJR0VWX1BBRF9TSVpFCi0jZGVmaW5lIFNJR0VWX1BBRF9TSVpFCSgoU0lHRVZfTUFYX1NJWkUvc2l6ZW9mKGludCkpIC0gMykKKy8qCisgKiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGFsaWdubWVudCBpcyBvayBvbiBhbGwgY3VycmVudCBhcmNoaXRlY3R1cmVzCisgKiBidXQgd2UgbGVhdmUgb3BlbiB0aGlzIGJlaW5nIG92ZXJyaWRkZW4gaW4gdGhlIGZ1dHVyZQorICovCisjaWZuZGVmIF9fQVJDSF9TSUdFVl9QUkVBTUJMRV9TSVpFCisjZGVmaW5lIF9fQVJDSF9TSUdFVl9QUkVBTUJMRV9TSVpFCShzaXplb2YoaW50KSAqIDIgKyBzaXplb2Yoc2lndmFsX3QpKQogI2VuZGlmCiAKKyNkZWZpbmUgU0lHRVZfTUFYX1NJWkUJNjQKKyNkZWZpbmUgU0lHRVZfUEFEX1NJWkUJKChTSUdFVl9NQVhfU0laRSAtIF9fQVJDSF9TSUdFVl9QUkVBTUJMRV9TSVpFKSBcCisJCS8gc2l6ZW9mKGludCkpCisKIHR5cGVkZWYgc3RydWN0IHNpZ2V2ZW50IHsKIAlzaWd2YWxfdCBzaWdldl92YWx1ZTsKIAlpbnQgc2lnZXZfc2lnbm87CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDE4ZDZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWduYWwuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIFNJR19CTE9DSworI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLworI2VuZGlmCisjaWZuZGVmIFNJR19VTkJMT0NLCisjZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KKyNlbmRpZgorI2lmbmRlZiBTSUdfU0VUTUFTSworI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXwordHlwZWRlZiB2b2lkIF9fc2lnbmFsZm5fdChpbnQpOwordHlwZWRlZiBfX3NpZ25hbGZuX3QgX191c2VyICpfX3NpZ2hhbmRsZXJfdDsKKwordHlwZWRlZiB2b2lkIF9fcmVzdG9yZWZuX3Qodm9pZCk7Cit0eXBlZGVmIF9fcmVzdG9yZWZuX3QgX191c2VyICpfX3NpZ3Jlc3RvcmVfdDsKKworI2RlZmluZSBTSUdfREZMCSgoX19mb3JjZSBfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLworI2RlZmluZSBTSUdfSUdOCSgoX19mb3JjZSBfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCisjZGVmaW5lIFNJR19FUlIJKChfX2ZvcmNlIF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5hbGlnbmVkLmgKaW5kZXggYzg1NmE0M2UuLjZjOTBmMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5hbGlnbmVkLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmFsaWduZWQuaApAQCAtNzYsNDYgKzc2LDQ3IEBACiAJcHRyLT54ID0gdmFsOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19nZXRfdW5hbGlnbmVkKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQl2YWwgPSAqKGNvbnN0IF9fdTggKilwdHI7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJdmFsID0gX191bGR3KChjb25zdCBfX3UxNiAqKXB0cik7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJdmFsID0gX191bGRsKChjb25zdCBfX3UzMiAqKXB0cik7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJdmFsID0gX191bGRxKChjb25zdCBfX3U2NCAqKXB0cik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJhZF91bmFsaWduZWRfYWNjZXNzX2xlbmd0aCgpOwotCX07Ci0JcmV0dXJuIHZhbDsKLX0KKyNkZWZpbmUgX19nZXRfdW5hbGlnbmVkKHB0ciwgc2l6ZSkgKHsJCVwKKwljb25zdCB2b2lkICpfX2d1X3AgPSBwdHI7CQlcCisJdW5zaWduZWQgbG9uZyB2YWw7CQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQlcCisJY2FzZSAxOgkJCQkJXAorCQl2YWwgPSAqKGNvbnN0IF9fdTggKilfX2d1X3A7CVwKKwkJYnJlYWs7CQkJCVwKKwljYXNlIDI6CQkJCQlcCisJCXZhbCA9IF9fdWxkdyhfX2d1X3ApOwkJXAorCQlicmVhazsJCQkJXAorCWNhc2UgNDoJCQkJCVwKKwkJdmFsID0gX191bGRsKF9fZ3VfcCk7CQlcCisJCWJyZWFrOwkJCQlcCisJY2FzZSA4OgkJCQkJXAorCQl2YWwgPSBfX3VsZHEoX19ndV9wKTsJCVwKKwkJYnJlYWs7CQkJCVwKKwlkZWZhdWx0OgkJCQlcCisJCWJhZF91bmFsaWduZWRfYWNjZXNzX2xlbmd0aCgpOwlcCisJfTsJCQkJCVwKKwl2YWw7CQkJCQlcCit9KQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19wdXRfdW5hbGlnbmVkKHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQotewotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJKihfX3U4ICopcHRyID0gdmFsOwotCSAgICAgICAgYnJlYWs7Ci0JY2FzZSAyOgotCQlfX3VzdHcodmFsLCAoX191MTYgKilwdHIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCV9fdXN0bCh2YWwsIChfX3UzMiAqKXB0cik7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJX191c3RxKHZhbCwgKF9fdTY0ICopcHRyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkgICAgCWJhZF91bmFsaWduZWRfYWNjZXNzX2xlbmd0aCgpOwotCX07Ci19CisjZGVmaW5lIF9fcHV0X3VuYWxpZ25lZCh2YWwsIHB0ciwgc2l6ZSkJCVwKK2RvIHsJCQkJCQlcCisJdm9pZCAqX19ndV9wID0gcHRyOwkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJXAorCWNhc2UgMToJCQkJCVwKKwkJKihfX3U4ICopX19ndV9wID0gdmFsOwkJXAorCSAgICAgICAgYnJlYWs7CQkJCVwKKwljYXNlIDI6CQkJCQlcCisJCV9fdXN0dyh2YWwsIF9fZ3VfcCk7CQlcCisJCWJyZWFrOwkJCQlcCisJY2FzZSA0OgkJCQkJXAorCQlfX3VzdGwodmFsLCBfX2d1X3ApOwkJXAorCQlicmVhazsJCQkJXAorCWNhc2UgODoJCQkJCVwKKwkJX191c3RxKHZhbCwgX19ndV9wKTsJCVwKKwkJYnJlYWs7CQkJCVwKKwlkZWZhdWx0OgkJCQlcCisJICAgIAliYWRfdW5hbGlnbmVkX2FjY2Vzc19sZW5ndGgoKTsJXAorCX07CQkJCQlcCit9IHdoaWxlKDApCiAKICNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfVU5BTElHTkVEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20taDgzMDAvc2lnbmFsLmgKaW5kZXggM2EwODU0NC4uOGVjY2RjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc2lnbmFsLmgKQEAgLTEwNywyOSArMTA3LDcgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAogI2RlZmluZSBTSUdTVEtTWgk4MTkyCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAotI2VuZGlmCi0KLSNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwotI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KLQotLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KLXR5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQpOwotCi0jZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLwotI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLwotI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IG9sZF9zaWdhY3Rpb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaAppbmRleCBlMWRlNjc0Li5hNTgxMGNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaApAQCAtMTA5LDcgKzEwOSw2IEBACiBleHRlcm4gdm9pZCBkaXNhYmxlX0FQSUNfdGltZXIodm9pZCk7CiBleHRlcm4gdm9pZCBlbmFibGVfQVBJQ190aW1lcih2b2lkKTsKIAotZXh0ZXJuIGludCBjaGVja19ubWlfd2F0Y2hkb2cgKHZvaWQpOwogZXh0ZXJuIHZvaWQgZW5hYmxlX05NSV90aHJvdWdoX0xWVDAgKHZvaWQgKiBkdW1teSk7CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbm1pX3dhdGNoZG9nOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9idWcuaCBiL2luY2x1ZGUvYXNtLWkzODYvYnVnLmgKaW5kZXggNzA2ZWI1MS4uOGY3OWRlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2J1Zy5oCkBAIC05LDYgKzksOCBAQAogICogdW5kZWZpbmVkIiBvcGNvZGUgZm9yIHBhcnNpbmcgaW4gdGhlIHRyYXAgaGFuZGxlci4KICAqLwogCisjaWZkZWYgQ09ORklHX0JVRworI2RlZmluZSBIQVZFX0FSQ0hfQlVHCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKICNkZWZpbmUgQlVHKCkJCQkJXAogIF9fYXNtX18gX192b2xhdGlsZV9fKAkidWQyXG4iCQlcCkBAIC0xOCw4ICsyMCw3IEBACiAjZWxzZQogI2RlZmluZSBCVUcoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygidWQyXG4iKQogI2VuZGlmCisjZW5kaWYKIAotI2RlZmluZSBIQVZFX0FSQ0hfQlVHCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20taTM4Ni9jaGVja3N1bS5oCmluZGV4IGQ3NmE1ZjAuLjY0MTM0MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2NoZWNrc3VtLmgKQEAgLTMzLDcgKzMzLDcgQEAKICAqCXBhc3NlZCBpbiBhbiBpbmNvcnJlY3Qga2VybmVsIGFkZHJlc3MgdG8gb25lIG9mIHRoZXNlIGZ1bmN0aW9ucy4KICAqCiAgKglJZiB5b3UgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSBwbGVhc2UgZG9uJ3QgZm9yZ2V0IHRoZQotICoJdmVyaWZ5X2FyZWEoKS4KKyAqCWFjY2Vzc19vaygpLgogICovCiBzdGF0aWMgX19pbmxpbmVfXwogdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2sgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9jcHVmZWF0dXJlLmggYi9pbmNsdWRlL2FzbS1pMzg2L2NwdWZlYXR1cmUuaAppbmRleCBlMTQ3Y2FiLi5mZjExODdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2NwdWZlYXR1cmUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2NwdWZlYXR1cmUuaApAQCAtODcsOCArODcsOCBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9YQ1JZUFRfRU4JKDUqMzIrIDcpIC8qIG9uLUNQVSBjcnlwdG8gZW5hYmxlZCAqLwogCiAvKiBNb3JlIGV4dGVuZGVkIEFNRCBmbGFnczogQ1BVSUQgbGV2ZWwgMHg4MDAwMDAwMSwgZWN4LCB3b3JkIDYgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTEFIRl9MTQkoNSozMisgMCkgLyogTEFIRi9TQUhGIGluIGxvbmcgbW9kZSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9DTVBfTEVHQUNZCSg1KjMyKyAxKSAvKiBJZiB5ZXMgSHlwZXJUaHJlYWRpbmcgbm90IHZhbGlkICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0xBSEZfTE0JKDYqMzIrIDApIC8qIExBSEYvU0FIRiBpbiBsb25nIG1vZGUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ01QX0xFR0FDWQkoNiozMisgMSkgLyogSWYgeWVzIEh5cGVyVGhyZWFkaW5nIG5vdCB2YWxpZCAqLwogCiAjZGVmaW5lIGNwdV9oYXMoYywgYml0KQkJdGVzdF9iaXQoYml0LCAoYyktPng4Nl9jYXBhYmlsaXR5KQogI2RlZmluZSBib290X2NwdV9oYXMoYml0KQl0ZXN0X2JpdChiaXQsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2U4MjAuaCBiL2luY2x1ZGUvYXNtLWkzODYvZTgyMC5oCmluZGV4IDVjMjg1YWUuLmVkZjY1YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvZTgyMC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZTgyMC5oCkBAIC0xMyw3ICsxMyw3IEBACiAjZGVmaW5lIF9fRTgyMF9IRUFERVIKIAogI2RlZmluZSBFODIwTUFQCTB4MmQwCQkvKiBvdXIgbWFwICovCi0jZGVmaW5lIEU4MjBNQVgJMzIJCS8qIG51bWJlciBvZiBlbnRyaWVzIGluIEU4MjBNQVAgKi8KKyNkZWZpbmUgRTgyME1BWAkxMjgJCS8qIG51bWJlciBvZiBlbnRyaWVzIGluIEU4MjBNQVAgKi8KICNkZWZpbmUgRTgyME5SCTB4MWU4CQkvKiAjIGVudHJpZXMgaW4gRTgyME1BUCAqLwogCiAjZGVmaW5lIEU4MjBfUkFNCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1pMzg2L2Zsb3BweS5oCmluZGV4IGY0NzgyMjguLjc5NzI3YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9mbG9wcHkuaApAQCAtMjU3LDcgKzI1Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBmZF9yb3V0aW5lX2wgeworc3RhdGljIHN0cnVjdCBmZF9yb3V0aW5lX2wgewogCWludCAoKl9yZXF1ZXN0X2RtYSkodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsKIAl2b2lkICgqX2ZyZWVfZG1hKSh1bnNpZ25lZCBpbnQgZG1hbnIpOwogCWludCAoKl9nZXRfZG1hX3Jlc2lkdWUpKHVuc2lnbmVkIGludCBkdW1teSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaCBiL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCmluZGV4IDZlMjBiMDcuLjE2ZWY5ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCkBAIC05Miw2ICs5Miw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGhwZXRfdGljazsgIAkvKiBocGV0IGNsa3MgY291bnQgcGVyIHRpY2sgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIGhwZXRfYWRkcmVzczsJLyogaHBldCBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KK2V4dGVybiBpbnQgaHBldF91c2VfdGltZXI7CiAKIGV4dGVybiBpbnQgaHBldF9ydGNfdGltZXJfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgaHBldF9lbmFibGUodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21vZHVsZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9tb2R1bGUuaAppbmRleCA1MDg4NjVlLi5lYjdmMmI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21vZHVsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbW9kdWxlLmgKQEAgLTUyLDggKzUyLDggQEAKICNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJDWVJJWElJSSAiCiAjZWxpZiBkZWZpbmVkIENPTkZJR19NVklBQzNfMgogI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIlZJQUMzLTIgIgotI2VsaWYgQ09ORklHX01HRU9ERQotI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIkdFT0RFICIKKyNlbGlmIENPTkZJR19NR0VPREVHWDEKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJHRU9ERUdYMSAiCiAjZWxzZQogI2Vycm9yIHVua25vd24gcHJvY2Vzc29yIGZhbWlseQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oCmluZGV4IDVjNzI1NDIuLjhkNjBjMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oCkBAIC0xOTMsOSArMTkzLDkgQEAKIC8qCiAgKiBEZWZpbmUgdGhpcyBpZiB0aGluZ3Mgd29yayBkaWZmZXJlbnRseSBvbiBhbiBpMzg2IGFuZCBhbiBpNDg2OgogICogaXQgd2lsbCAob24gYW4gaTQ4Nikgd2FybiBhYm91dCBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIHRoYXQgYXJlCi0gKiBkb25lIHdpdGhvdXQgYSAndmVyaWZ5X2FyZWEoVkVSSUZZX1dSSVRFLC4uKScKKyAqIGRvbmUgd2l0aG91dCBhICdhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLC4uKScKICAqLwotI3VuZGVmIFRFU1RfVkVSSUZZX0FSRUEKKyN1bmRlZiBURVNUX0FDQ0VTU19PSwogCiAvKiBUaGUgYm9vdCBwYWdlIHRhYmxlcyAoYWxsIGNyZWF0ZWQgYXMgYSBzaW5nbGUgYXJyYXkpICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBwZzBbXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc2V0dXAuaCBiL2luY2x1ZGUvYXNtLWkzODYvc2V0dXAuaAppbmRleCA4ODE0YjU0Li43YTMyMTg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3NldHVwLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zZXR1cC5oCkBAIC0xNiw3ICsxNiw3IEBACiAjZGVmaW5lIE1BWE1FTV9QRk4JUEZOX0RPV04oTUFYTUVNKQogI2RlZmluZSBNQVhfTk9OUEFFX1BGTgkoMSA8PCAyMCkKIAotI2RlZmluZSBQQVJBTV9TSVpFIDIwNDgKKyNkZWZpbmUgUEFSQU1fU0laRSA0MDk2CiAjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDI1NgogCiAjZGVmaW5lIE9MRF9DTF9NQUdJQ19BRERSCTB4OTAwMjAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NpZ25hbC5oCmluZGV4IDdlZjM0M2IuLmNiYjQ3ZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zaWduYWwuaApAQCAtMTEwLDM0ICsxMTAsNyBAQAogI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CiAjZGVmaW5lIFNJR1NUS1NaCTgxOTIKIAotI2lmZGVmIF9fS0VSTkVMX18KLQotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKLSNlbmRpZgotCi0jZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCi0jZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCi0KLS8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCi10eXBlZGVmIHZvaWQgX19zaWduYWxmbl90KGludCk7Ci10eXBlZGVmIF9fc2lnbmFsZm5fdCBfX3VzZXIgKl9fc2lnaGFuZGxlcl90OwotCi10eXBlZGVmIHZvaWQgX19yZXN0b3JlZm5fdCh2b2lkKTsKLXR5cGVkZWYgX19yZXN0b3JlZm5fdCBfX3VzZXIgKl9fc2lncmVzdG9yZV90OwotCi0jZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLwotI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLwotI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IG9sZF9zaWdhY3Rpb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zdHJpbmcuaCBiL2luY2x1ZGUvYXNtLWkzODYvc3RyaW5nLmgKaW5kZXggMTY3OTk4My4uNmE3OGFjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3N0cmluZy5oCkBAIC0xOTgsNDYgKzE5OCw3OSBAQAogaW50IGQwLCBkMSwgZDI7CiBfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkicmVwIDsgbW92c2xcblx0IgotCSJ0ZXN0YiAkMiwlYjRcblx0IgotCSJqZSAxZlxuXHQiCi0JIm1vdnN3XG4iCi0JIjE6XHR0ZXN0YiAkMSwlYjRcblx0IgotCSJqZSAyZlxuXHQiCi0JIm1vdnNiXG4iCi0JIjI6IgorCSJtb3ZsICU0LCUlZWN4XG5cdCIKKwkiYW5kbCAkMywlJWVjeFxuXHQiCisjaWYgMQkvKiB3YW50IHRvIHBheSAyIGJ5dGUgcGVuYWx0eSBmb3IgYSBjaGFuY2UgdG8gc2tpcCBtaWNyb2NvZGVkIHJlcD8gKi8KKwkianogMWZcblx0IgorI2VuZGlmCisJInJlcCA7IG1vdnNiXG5cdCIKKwkiMToiCiAJOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZTIiAoZDIpCi0JOiIwIiAobi80KSwgInEiIChuKSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkKKwk6ICIwIiAobi80KSwgImciIChuKSwgIjEiICgobG9uZykgdG8pLCAiMiIgKChsb25nKSBmcm9tKQogCTogIm1lbW9yeSIpOwogcmV0dXJuICh0byk7CiB9CiAKIC8qCi0gKiBUaGlzIGxvb2tzIGhvcnJpYmx5IHVnbHksIGJ1dCB0aGUgY29tcGlsZXIgY2FuIG9wdGltaXplIGl0IHRvdGFsbHksCisgKiBUaGlzIGxvb2tzIHVnbHksIGJ1dCB0aGUgY29tcGlsZXIgY2FuIG9wdGltaXplIGl0IHRvdGFsbHksCiAgKiBhcyB0aGUgY291bnQgaXMgY29uc3RhbnQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqIF9fY29uc3RhbnRfbWVtY3B5KHZvaWQgKiB0bywgY29uc3Qgdm9pZCAqIGZyb20sIHNpemVfdCBuKQogewotCWlmIChuIDw9IDEyOCkKLQkJcmV0dXJuIF9fYnVpbHRpbl9tZW1jcHkodG8sIGZyb20sIG4pOwotCi0jZGVmaW5lIENPTU1PTih4KSBcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXyggXAotCSJyZXAgOyBtb3ZzbCIgXAotCXggXAotCTogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSBcCi0JOiAiMCIgKG4vNCksIjEiICgobG9uZykgdG8pLCIyIiAoKGxvbmcpIGZyb20pIFwKLQk6ICJtZW1vcnkiKTsKLXsKLQlpbnQgZDAsIGQxLCBkMjsKLQlzd2l0Y2ggKG4gJSA0KSB7Ci0JCWNhc2UgMDogQ09NTU9OKCIiKTsgcmV0dXJuIHRvOwotCQljYXNlIDE6IENPTU1PTigiXG5cdG1vdnNiIik7IHJldHVybiB0bzsKLQkJY2FzZSAyOiBDT01NT04oIlxuXHRtb3ZzdyIpOyByZXR1cm4gdG87Ci0JCWRlZmF1bHQ6IENPTU1PTigiXG5cdG1vdnN3XG5cdG1vdnNiIik7IHJldHVybiB0bzsKKwlsb25nIGVzaSwgZWRpOworCWlmICghbikgcmV0dXJuIHRvOworI2lmIDEJLyogd2FudCB0byBkbyBzbWFsbCBjb3BpZXMgd2l0aCBub24tc3RyaW5nIG9wcz8gKi8KKwlzd2l0Y2ggKG4pIHsKKwkJY2FzZSAxOiAqKGNoYXIqKXRvID0gKihjaGFyKilmcm9tOyByZXR1cm4gdG87CisJCWNhc2UgMjogKihzaG9ydCopdG8gPSAqKHNob3J0Kilmcm9tOyByZXR1cm4gdG87CisJCWNhc2UgNDogKihpbnQqKXRvID0gKihpbnQqKWZyb207IHJldHVybiB0bzsKKyNpZiAxCS8qIGluY2x1ZGluZyB0aG9zZSBkb2FibGUgd2l0aCB0d28gbW92ZXM/ICovCisJCWNhc2UgMzogKihzaG9ydCopdG8gPSAqKHNob3J0Kilmcm9tOworCQkJKigoY2hhciopdG8rMikgPSAqKChjaGFyKilmcm9tKzIpOyByZXR1cm4gdG87CisJCWNhc2UgNTogKihpbnQqKXRvID0gKihpbnQqKWZyb207CisJCQkqKChjaGFyKil0bys0KSA9ICooKGNoYXIqKWZyb20rNCk7IHJldHVybiB0bzsKKwkJY2FzZSA2OiAqKGludCopdG8gPSAqKGludCopZnJvbTsKKwkJCSooKHNob3J0Kil0bysyKSA9ICooKHNob3J0Kilmcm9tKzIpOyByZXR1cm4gdG87CisJCWNhc2UgODogKihpbnQqKXRvID0gKihpbnQqKWZyb207CisJCQkqKChpbnQqKXRvKzEpID0gKigoaW50Kilmcm9tKzEpOyByZXR1cm4gdG87CisjZW5kaWYKIAl9Ci19Ci0gIAotI3VuZGVmIENPTU1PTgorI2VuZGlmCisJZXNpID0gKGxvbmcpIGZyb207CisJZWRpID0gKGxvbmcpIHRvOworCWlmIChuID49IDUqNCkgeworCQkvKiBsYXJnZSBibG9jazogdXNlIHJlcCBwcmVmaXggKi8KKwkJaW50IGVjeDsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCQkicmVwIDsgbW92c2wiCisJCQk6ICI9JmMiIChlY3gpLCAiPSZEIiAoZWRpKSwgIj0mUyIgKGVzaSkKKwkJCTogIjAiIChuLzQpLCAiMSIgKGVkaSksIjIiIChlc2kpCisJCQk6ICJtZW1vcnkiCisJCSk7CisJfSBlbHNlIHsKKwkJLyogc21hbGwgYmxvY2s6IGRvbid0IGNsb2JiZXIgZWN4ICsgc21hbGxlciBjb2RlICovCisJCWlmIChuID49IDQqNCkgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnNsIgorCQkJOiI9JkQiKGVkaSksIj0mUyIoZXNpKToiMCIoZWRpKSwiMSIoZXNpKToibWVtb3J5Iik7CisJCWlmIChuID49IDMqNCkgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnNsIgorCQkJOiI9JkQiKGVkaSksIj0mUyIoZXNpKToiMCIoZWRpKSwiMSIoZXNpKToibWVtb3J5Iik7CisJCWlmIChuID49IDIqNCkgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnNsIgorCQkJOiI9JkQiKGVkaSksIj0mUyIoZXNpKToiMCIoZWRpKSwiMSIoZXNpKToibWVtb3J5Iik7CisJCWlmIChuID49IDEqNCkgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnNsIgorCQkJOiI9JkQiKGVkaSksIj0mUyIoZXNpKToiMCIoZWRpKSwiMSIoZXNpKToibWVtb3J5Iik7CisJfQorCXN3aXRjaCAobiAlIDQpIHsKKwkJLyogdGFpbCAqLworCQljYXNlIDA6IHJldHVybiB0bzsKKwkJY2FzZSAxOiBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92c2IiCisJCQk6Ij0mRCIoZWRpKSwiPSZTIihlc2kpOiIwIihlZGkpLCIxIihlc2kpOiJtZW1vcnkiKTsKKwkJCXJldHVybiB0bzsKKwkJY2FzZSAyOiBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92c3ciCisJCQk6Ij0mRCIoZWRpKSwiPSZTIihlc2kpOiIwIihlZGkpLCIxIihlc2kpOiJtZW1vcnkiKTsKKwkJCXJldHVybiB0bzsKKwkJZGVmYXVsdDogX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnN3XG5cdG1vdnNiIgorCQkJOiI9JkQiKGVkaSksIj0mUyIoZXNpKToiMCIoZWRpKSwiMSIoZXNpKToibWVtb3J5Iik7CisJCQlyZXR1cm4gdG87CisJfQogfQogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWkzODYvc3lzdGVtLmgKaW5kZXggNmY3NGQ0Yy4uM2RiNzE3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oCkBAIC04MSw3ICs4MSw3IEBACiAjZGVmaW5lIGxvYWRzZWdtZW50KHNlZyx2YWx1ZSkJCQlcCiAJYXNtIHZvbGF0aWxlKCJcbiIJCQlcCiAJCSIxOlx0IgkJCQlcCi0JCSJtb3ZsICUwLCUlIiAjc2VnICJcbiIJCVwKKwkJIm1vdiAlMCwlJSIgI3NlZyAiXG4iCQlcCiAJCSIyOlxuIgkJCQlcCiAJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCVwKIAkJIjM6XHQiCQkJCVwKQEAgLTkzLDEzICs5MywxMyBAQAogCQkiLmFsaWduIDRcblx0IgkJCVwKIAkJIi5sb25nIDFiLDNiXG4iCQkJXAogCQkiLnByZXZpb3VzIgkJCVwKLQkJOiA6Im0iICgqKHVuc2lnbmVkIGludCAqKSYodmFsdWUpKSkKKwkJOiA6Im0iICh2YWx1ZSkpCiAKIC8qCiAgKiBTYXZlIGEgc2VnbWVudCByZWdpc3RlciBhd2F5CiAgKi8KICNkZWZpbmUgc2F2ZXNlZ21lbnQoc2VnLCB2YWx1ZSkgXAotCWFzbSB2b2xhdGlsZSgibW92bCAlJSIgI3NlZyAiLCUwIjoiPW0iICgqKGludCAqKSYodmFsdWUpKSkKKwlhc20gdm9sYXRpbGUoIm1vdiAlJSIgI3NlZyAiLCUwIjoiPW0iICh2YWx1ZSkpCiAKIC8qCiAgKiBDbGVhciBhbmQgc2V0ICdUUycgYml0IHJlc3BlY3RpdmVseQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvYml0b3BzLmgKaW5kZXggOTI1ZDU0Yy4uNzIzMjUyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2JpdG9wcy5oCkBAIC0zMTQsOCArMzE0LDggQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKIC8qCi0gKiBmaW5kX2xhc3RfemVyb19iaXQgLSBmaW5kIHRoZSBsYXN0IHplcm8gYml0IGluIGEgNjQgYml0IHF1YW50aXR5Ci0gKiBAeDogVGhlIHZhbHVlIHRvIHNlYXJjaAorICogUmV0dXJuIGJpdCBudW1iZXIgb2YgbGFzdCAobW9zdC1zaWduaWZpY2FudCkgYml0IHNldC4gIFVuZGVmaW5lZAorICogZm9yIHg9PTAuICBCaXRzIGFyZSBudW1iZXJlZCBmcm9tIDAuLjYzIChlLmcuLCBpYTY0X2Zscyg5KSA9PSAzKS4KICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCiBpYTY0X2ZscyAodW5zaWduZWQgbG9uZyB4KQpAQCAtMzI3LDEwICszMjcsMjMgQEAKIAlyZXR1cm4gZXhwIC0gMHhmZmZmOwogfQogCisvKgorICogRmluZCB0aGUgbGFzdCAobW9zdCBzaWduaWZpY2FudCkgYml0IHNldC4gIFJldHVybnMgMCBmb3IgeD09MCBhbmQKKyAqIGJpdHMgYXJlIG51bWJlcmVkIGZyb20gMS4uMzIgKGUuZy4sIGZscyg5KSA9PSA0KS4KKyAqLwogc3RhdGljIGlubGluZSBpbnQKLWZscyAoaW50IHgpCitmbHMgKGludCB0KQogewotCXJldHVybiBpYTY0X2ZscygodW5zaWduZWQgaW50KSB4KTsKKwl1bnNpZ25lZCBsb25nIHggPSB0ICYgMHhmZmZmZmZmZnU7CisKKwlpZiAoIXgpCisJCXJldHVybiAwOworCXggfD0geCA+PiAxOworCXggfD0geCA+PiAyOworCXggfD0geCA+PiA0OworCXggfD0geCA+PiA4OworCXggfD0geCA+PiAxNjsKKwlyZXR1cm4gaWE2NF9wb3BjbnQoeCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2J1Zy5oIGIvaW5jbHVkZS9hc20taWE2NC9idWcuaAppbmRleCAyYzBjZDUxLi4zYWEwYTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYnVnLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9BU01fSUE2NF9CVUdfSAogI2RlZmluZSBfQVNNX0lBNjRfQlVHX0gKIAorI2lmZGVmIENPTkZJR19CVUcKICNpZiAoX19HTlVDX18gPiAzKSB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAxKQogIyBkZWZpbmUgaWE2NF9hYm9ydCgpCV9fYnVpbHRpbl90cmFwKCkKICNlbHNlCkBAIC04LDggKzksMTAgQEAKICNlbmRpZgogI2RlZmluZSBCVUcoKSBkbyB7IHByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IGlhNjRfYWJvcnQoKTsgfSB3aGlsZSAoMCkKIAotLyogc2hvdWxkIHRoaXMgQlVHIHNob3VsZCBiZSBtYWRlIGdlbmVyaWM/ICovCisvKiBzaG91bGQgdGhpcyBCVUcgYmUgbWFkZSBnZW5lcmljPyAqLwogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvZ2NjX2ludHJpbi5oIGIvaW5jbHVkZS9hc20taWE2NC9nY2NfaW50cmluLmgKaW5kZXggN2MzNTdkZi4uNGZiNGU0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9nY2NfaW50cmluLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9nY2NfaW50cmluLmgKQEAgLTEzMywxMyArMTMzLDE3IEBACiAJaWE2NF9pbnRyaV9yZXM7CQkJCQkJCQlcCiB9KQogCi0jZGVmaW5lIGlhNjRfcG9wY250KHgpCQkJCQkJXAotKHsJCQkJCQkJCVwKKyNpZiBfX0dOVUNfXyA+PSA0IHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDQpCisjIGRlZmluZSBpYTY0X3BvcGNudCh4KQkJX19idWlsdGluX3BvcGNvdW50bCh4KQorI2Vsc2UKKyMgZGVmaW5lIGlhNjRfcG9wY250KHgpCQkJCQkJXAorICAoewkJCQkJCQkJXAogCV9fdTY0IGlhNjRfaW50cmlfcmVzOwkJCQkJXAogCWFzbSAoInBvcGNudCAlMD0lMSIgOiAiPXIiIChpYTY0X2ludHJpX3JlcykgOiAiciIgKHgpKTsJXAogCQkJCQkJCQlcCiAJaWE2NF9pbnRyaV9yZXM7CQkJCQkJXAotfSkKKyAgfSkKKyNlbmRpZgogCiAjZGVmaW5lIGlhNjRfZ2V0Zl9leHAoeCkJCQkJCVwKICh7CQkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2h3X2lycS5oIGIvaW5jbHVkZS9hc20taWE2NC9od19pcnEuaAppbmRleCAwNDFhYjhjLi5jZDRlMDZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaHdfaXJxLmgKQEAgLTgxLDYgKzgxLDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBpcnFfdHlwZV9pYTY0X2xzYXBpYzsJLyogQ1BVLWludGVybmFsIGludGVycnVwdCBjb250cm9sbGVyICovCiAKK2V4dGVybiBpbnQgYXNzaWduX2lycV92ZWN0b3Jfbm9wYW5pYyAoaW50IGlycSk7IC8qIGFsbG9jYXRlIGEgZnJlZSB2ZWN0b3Igd2l0aG91dCBwYW5pYyAqLwogZXh0ZXJuIGludCBhc3NpZ25faXJxX3ZlY3RvciAoaW50IGlycSk7CS8qIGFsbG9jYXRlIGEgZnJlZSB2ZWN0b3IgKi8KIGV4dGVybiB2b2lkIGZyZWVfaXJxX3ZlY3RvciAoaW50IHZlY3Rvcik7CiBleHRlcm4gdm9pZCBpYTY0X3NlbmRfaXBpIChpbnQgY3B1LCBpbnQgdmVjdG9yLCBpbnQgZGVsaXZlcnlfbW9kZSwgaW50IHJlZGlyZWN0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcGFsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BhbC5oCmluZGV4IDVkZDQ3N2YuLjIzMDNhMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGFsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wYWwuaApAQCAtNjcsNiArNjcsNyBAQAogI2RlZmluZSBQQUxfUkVHSVNURVJfSU5GTwkzOQkvKiByZXR1cm4gQVIgYW5kIENSIHJlZ2lzdGVyIGluZm9ybWF0aW9uKi8KICNkZWZpbmUgUEFMX1NIVVRET1dOCQk0MAkvKiBlbnRlciBwcm9jZXNzb3Igc2h1dGRvd24gc3RhdGUgKi8KICNkZWZpbmUgUEFMX1BSRUZFVENIX1ZJU0lCSUxJVFkJNDEJLyogTWFrZSBQcm9jZXNzb3IgUHJlZmV0Y2hlcyBWaXNpYmxlICovCisjZGVmaW5lIFBBTF9MT0dJQ0FMX1RPX1BIWVNJQ0FMIDQyCS8qIHJldHVybnMgaW5mb3JtYXRpb24gb24gbG9naWNhbCB0byBwaHlzaWNhbCBwcm9jZXNzb3IgbWFwcGluZyAqLwogCiAjZGVmaW5lIFBBTF9DT1BZX1BBTAkJMjU2CS8qIHJlbG9jYXRlIFBBTCBwcm9jZWR1cmVzIGFuZCBQQUwgUE1JICovCiAjZGVmaW5lIFBBTF9IQUxUX0lORk8JCTI1NwkvKiByZXR1cm4gdGhlIGxvdyBwb3dlciBjYXBhYmlsaXRpZXMgb2YgcHJvY2Vzc29yICovCkBAIC0xNTU5LDYgKzE1NjAsNzMgQEAKIAlyZXR1cm4gaXBydi5zdGF0dXM7CiB9CiAKKy8qIGRhdGEgc3RydWN0dXJlIGZvciBnZXR0aW5nIGluZm9ybWF0aW9uIG9uIGxvZ2ljYWwgdG8gcGh5c2ljYWwgbWFwcGluZ3MgKi8KK3R5cGVkZWYgdW5pb24gcGFsX2xvZ19vdmVydmlld191IHsKKwlzdHJ1Y3QgeworCQl1NjQJbnVtX2xvZwkJOjE2LAkvKiBUb3RhbCBudW1iZXIgb2YgbG9naWNhbAorCQkJCQkJICogcHJvY2Vzc29ycyBvbiB0aGlzIGRpZQorCQkJCQkJICovCisJCQl0cGMJCTo4LAkvKiBUaHJlYWRzIHBlciBjb3JlICovCisJCQlyZXNlcnZlZDMJOjgsCS8qIFJlc2VydmVkICovCisJCQljcHAJCTo4LAkvKiBDb3JlcyBwZXIgcHJvY2Vzc29yICovCisJCQlyZXNlcnZlZDIJOjgsCS8qIFJlc2VydmVkICovCisJCQlwcGlkCQk6OCwJLyogUGh5c2ljYWwgcHJvY2Vzc29yIElEICovCisJCQlyZXNlcnZlZDEJOjg7CS8qIFJlc2VydmVkICovCisJfSBvdmVydmlld19iaXRzOworCXU2NCBvdmVydmlld19kYXRhOworfSBwYWxfbG9nX292ZXJ2aWV3X3Q7CisKK3R5cGVkZWYgdW5pb24gcGFsX3Byb2Nfbl9sb2dfaW5mbzFfdXsKKwlzdHJ1Y3QgeworCQl1NjQJdGlkCQk6MTYsCS8qIFRocmVhZCBpZCAqLworCQkJcmVzZXJ2ZWQyCToxNiwJLyogUmVzZXJ2ZWQgKi8KKwkJCWNpZAkJOjE2LAkvKiBDb3JlIGlkICovCisJCQlyZXNlcnZlZDEJOjE2OwkvKiBSZXNlcnZlZCAqLworCX0gcHBsaTFfYml0czsKKwl1NjQJcHBsaTFfZGF0YTsKK30gcGFsX3Byb2Nfbl9sb2dfaW5mbzFfdDsKKwordHlwZWRlZiB1bmlvbiBwYWxfcHJvY19uX2xvZ19pbmZvMl91IHsKKwlzdHJ1Y3QgeworCQl1NjQJbGEJCToxNiwJLyogTG9naWNhbCBhZGRyZXNzICovCisJCQlyZXNlcnZlZAk6NDg7CS8qIFJlc2VydmVkICovCisJfSBwcGxpMl9iaXRzOworCXU2NAlwcGxpMl9kYXRhOworfSBwYWxfcHJvY19uX2xvZ19pbmZvMl90OworCit0eXBlZGVmIHN0cnVjdCBwYWxfbG9naWNhbF90b19waHlzaWNhbF9zCit7CisJcGFsX2xvZ19vdmVydmlld190IG92ZXJ2aWV3OworCXBhbF9wcm9jX25fbG9nX2luZm8xX3QgcHBsaTE7CisJcGFsX3Byb2Nfbl9sb2dfaW5mbzJfdCBwcGxpMjsKK30gcGFsX2xvZ2ljYWxfdG9fcGh5c2ljYWxfdDsKKworI2RlZmluZSBvdmVydmlld19udW1fbG9nCW92ZXJ2aWV3Lm92ZXJ2aWV3X2JpdHMubnVtX2xvZworI2RlZmluZSBvdmVydmlld190cGMJCW92ZXJ2aWV3Lm92ZXJ2aWV3X2JpdHMudHBjCisjZGVmaW5lIG92ZXJ2aWV3X2NwcAkJb3ZlcnZpZXcub3ZlcnZpZXdfYml0cy5jcHAKKyNkZWZpbmUgb3ZlcnZpZXdfcHBpZAkJb3ZlcnZpZXcub3ZlcnZpZXdfYml0cy5wcGlkCisjZGVmaW5lIGxvZzFfdGlkCQlwcGxpMS5wcGxpMV9iaXRzLnRpZAorI2RlZmluZSBsb2cxX2NpZAkJcHBsaTEucHBsaTFfYml0cy5jaWQKKyNkZWZpbmUgbG9nMl9sYQkJCXBwbGkyLnBwbGkyX2JpdHMubGEKKworLyogR2V0IGluZm9ybWF0aW9uIG9uIGxvZ2ljYWwgdG8gcGh5c2ljYWwgcHJvY2Vzc29yIG1hcHBpbmdzLiAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX2xvZ2ljYWxfdG9fcGh5cyh1NjQgcHJvY19udW1iZXIsIHBhbF9sb2dpY2FsX3RvX3BoeXNpY2FsX3QgKm1hcHBpbmcpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCisJUEFMX0NBTEwoaXBydiwgUEFMX0xPR0lDQUxfVE9fUEhZU0lDQUwsIHByb2NfbnVtYmVyLCAwLCAwKTsKKworCWlmIChpcHJ2LnN0YXR1cyA9PSBQQUxfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlpZiAocHJvY19udW1iZXIgPT0gMCkKKwkJCW1hcHBpbmctPm92ZXJ2aWV3Lm92ZXJ2aWV3X2RhdGEgPSBpcHJ2LnYwOworCQltYXBwaW5nLT5wcGxpMS5wcGxpMV9kYXRhID0gaXBydi52MTsKKwkJbWFwcGluZy0+cHBsaTIucHBsaTJfZGF0YSA9IGlwcnYudjI7CisJfQorCisJcmV0dXJuIGlwcnYuc3RhdHVzOworfQogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9JQTY0X1BBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BlcmZtb24uaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGVyZm1vbi5oCmluZGV4IDEzNmM2MGUuLmVkNTQxNmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGVyZm1vbi5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGVyZm1vbi5oCkBAIC0yNTQsNiArMjU0LDE4IEBACiAjZGVmaW5lIFBGTV9DUFVJTkZPX0RDUl9QUAkweDIJLyogaWYgc2V0IHRoZSBzeXN0ZW0gd2lkZSBzZXNzaW9uIGhhcyBzdGFydGVkICovCiAjZGVmaW5lIFBGTV9DUFVJTkZPX0VYQ0xfSURMRQkweDQJLyogdGhlIHN5c3RlbSB3aWRlIHNlc3Npb24gZXhjbHVkZXMgdGhlIGlkbGUgdGFzayAqLwogCisvKgorICogc3lzY3RsIGNvbnRyb2wgc3RydWN0dXJlLiB2aXNpYmxlIHRvIHNhbXBsaW5nIGZvcm1hdHMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWludAlkZWJ1ZzsJCS8qIHR1cm4gb24vb2ZmIGRlYnVnZ2luZyB2aWEgc3lzbG9nICovCisJaW50CWRlYnVnX292Zmw7CS8qIHR1cm4gb24vb2ZmIGRlYnVnIHByaW50ayBpbiBvdmVyZmxvdyBoYW5kbGVyICovCisJaW50CWZhc3RjdHhzdzsJLyogdHVybiBvbi9vZmYgZmFzdCAodW5zZWN1cmUpIGN0eHN3ICovCisJaW50CWV4cGVydF9tb2RlOwkvKiB0dXJuIG9uL29mZiB2YWx1ZSBjaGVja2luZyAqLworfSBwZm1fc3lzY3RsX3Q7CitleHRlcm4gcGZtX3N5c2N0bF90IHBmbV9zeXNjdGw7CisKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9BU01fSUE2NF9QRVJGTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20taWE2NC9wZ2FsbG9jLmgKaW5kZXggMGYwNWRjOC4uYTVmMjE0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wZ2FsbG9jLmgKQEAgLTIyLDE0NiArMjIsMTI0IEBACiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAotLyoKLSAqIFZlcnkgc3R1cGlkbHksIHdlIHVzZWQgdG8gZ2V0IG5ldyBwZ2QncyBhbmQgcG1kJ3MsIGluaXQgdGhlaXIgY29udGVudHMKLSAqIHRvIHBvaW50IHRvIHRoZSBOVUxMIHZlcnNpb25zIG9mIHRoZSBuZXh0IGxldmVsIHBhZ2UgdGFibGUsIGxhdGVyIG9uCi0gKiBjb21wbGV0ZWx5IHJlLWluaXQgdGhlbSB0aGUgc2FtZSB3YXksIHRoZW4gZnJlZSB0aGVtIHVwLiAgVGhpcyB3YXN0ZWQKLSAqIGEgbG90IG9mIHdvcmsgYW5kIGNhdXNlZCB1bm5lY2Vzc2FyeSBtZW1vcnkgdHJhZmZpYy4gIEhvdyBicm9rZW4uLi4KLSAqIFdlIGZpeCB0aGlzIGJ5IGNhY2hpbmcgdGhlbS4KLSAqLwotI2RlZmluZSBwZ2RfcXVpY2tsaXN0CQkobG9jYWxfY3B1X2RhdGEtPnBnZF9xdWljaykKLSNkZWZpbmUgcG1kX3F1aWNrbGlzdAkJKGxvY2FsX2NwdV9kYXRhLT5wbWRfcXVpY2spCi0jZGVmaW5lIHBndGFibGVfY2FjaGVfc2l6ZQkobG9jYWxfY3B1X2RhdGEtPnBndGFibGVfY2FjaGVfc3opCitERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgbG9uZyAqLCBfX3BndGFibGVfcXVpY2tsaXN0KTsKKyNkZWZpbmUgcGd0YWJsZV9xdWlja2xpc3QgX19pYTY0X3Blcl9jcHVfdmFyKF9fcGd0YWJsZV9xdWlja2xpc3QpCitERUNMQVJFX1BFUl9DUFUobG9uZywgX19wZ3RhYmxlX3F1aWNrbGlzdF9zaXplKTsKKyNkZWZpbmUgcGd0YWJsZV9xdWlja2xpc3Rfc2l6ZSBfX2lhNjRfcGVyX2NwdV92YXIoX19wZ3RhYmxlX3F1aWNrbGlzdF9zaXplKQogCi1zdGF0aWMgaW5saW5lIHBnZF90KgotcGdkX2FsbG9jX29uZV9mYXN0IChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3N0YXRpYyBpbmxpbmUgbG9uZyBwZ3RhYmxlX3F1aWNrbGlzdF90b3RhbF9zaXplKHZvaWQpCit7CisJbG9uZyBxbF9zaXplID0gMDsKKwlpbnQgY3B1aWQ7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdWlkKSB7CisJCXFsX3NpemUgKz0gcGVyX2NwdShfX3BndGFibGVfcXVpY2tsaXN0X3NpemUsIGNwdWlkKTsKKwl9CisJcmV0dXJuIHFsX3NpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGd0YWJsZV9xdWlja2xpc3RfYWxsb2Modm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nICpyZXQgPSBOVUxMOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKLQlyZXQgPSBwZ2RfcXVpY2tsaXN0OworCXJldCA9IHBndGFibGVfcXVpY2tsaXN0OwogCWlmIChsaWtlbHkocmV0ICE9IE5VTEwpKSB7Ci0JCXBnZF9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAqKSgqcmV0KTsKKwkJcGd0YWJsZV9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAqKSgqcmV0KTsKIAkJcmV0WzBdID0gMDsKLQkJLS1wZ3RhYmxlX2NhY2hlX3NpemU7Ci0JfSBlbHNlCi0JCXJldCA9IE5VTEw7Ci0KLQlwcmVlbXB0X2VuYWJsZSgpOwotCi0JcmV0dXJuIChwZ2RfdCAqKSByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGdkX3QqCi1wZ2RfYWxsb2MgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCS8qIHRoZSBWTSBzeXN0ZW0gbmV2ZXIgY2FsbHMgcGdkX2FsbG9jX29uZV9mYXN0KCksIHNvIHdlIGRvIGl0IGhlcmUuICovCi0JcGdkX3QgKnBnZCA9IHBnZF9hbGxvY19vbmVfZmFzdChtbSk7Ci0KLQlpZiAodW5saWtlbHkocGdkID09IE5VTEwpKSB7Ci0JCXBnZCA9IChwZ2RfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1pFUk8pOworCQktLXBndGFibGVfcXVpY2tsaXN0X3NpemU7CisJCXByZWVtcHRfZW5hYmxlKCk7CisJfSBlbHNlIHsKKwkJcHJlZW1wdF9lbmFibGUoKTsKKwkJcmV0ID0gKHVuc2lnbmVkIGxvbmcgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwogCX0KLQlyZXR1cm4gcGdkOworCisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1wZ2RfZnJlZSAocGdkX3QgKnBnZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX3F1aWNrbGlzdF9mcmVlKHZvaWQgKnBndGFibGVfZW50cnkpCiB7CisjaWZkZWYgQ09ORklHX05VTUEKKwl1bnNpZ25lZCBsb25nIG5pZCA9IHBhZ2VfdG9fbmlkKHZpcnRfdG9fcGFnZShwZ3RhYmxlX2VudHJ5KSk7CisKKwlpZiAodW5saWtlbHkobmlkICE9IG51bWFfbm9kZV9pZCgpKSkgeworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGd0YWJsZV9lbnRyeSk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwogCXByZWVtcHRfZGlzYWJsZSgpOwotCSoodW5zaWduZWQgbG9uZyAqKXBnZCA9ICh1bnNpZ25lZCBsb25nKSBwZ2RfcXVpY2tsaXN0OwotCXBnZF9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAqKSBwZ2Q7Ci0JKytwZ3RhYmxlX2NhY2hlX3NpemU7CisJKih1bnNpZ25lZCBsb25nICopcGd0YWJsZV9lbnRyeSA9ICh1bnNpZ25lZCBsb25nKXBndGFibGVfcXVpY2tsaXN0OworCXBndGFibGVfcXVpY2tsaXN0ID0gKHVuc2lnbmVkIGxvbmcgKilwZ3RhYmxlX2VudHJ5OworCSsrcGd0YWJsZV9xdWlja2xpc3Rfc2l6ZTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCitzdGF0aWMgaW5saW5lIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIHBndGFibGVfcXVpY2tsaXN0X2FsbG9jKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfZnJlZShwZ2RfdCAqIHBnZCkKK3sKKwlwZ3RhYmxlX3F1aWNrbGlzdF9mcmVlKHBnZCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAotcHVkX3BvcHVsYXRlIChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZF9lbnRyeSwgcG1kX3QgKnBtZCkKK3B1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKiBwdWRfZW50cnksIHBtZF90ICogcG1kKQogewogCXB1ZF92YWwoKnB1ZF9lbnRyeSkgPSBfX3BhKHBtZCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcG1kX3QqCi1wbWRfYWxsb2Nfb25lX2Zhc3QgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyAqcmV0ID0gTlVMTDsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCi0JcmV0ID0gKHVuc2lnbmVkIGxvbmcgKilwbWRfcXVpY2tsaXN0OwotCWlmIChsaWtlbHkocmV0ICE9IE5VTEwpKSB7Ci0JCXBtZF9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAqKSgqcmV0KTsKLQkJcmV0WzBdID0gMDsKLQkJLS1wZ3RhYmxlX2NhY2hlX3NpemU7Ci0JfQotCi0JcHJlZW1wdF9lbmFibGUoKTsKLQotCXJldHVybiAocG1kX3QgKilyZXQ7CisJcmV0dXJuIHBndGFibGVfcXVpY2tsaXN0X2FsbG9jKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcG1kX3QqCi1wbWRfYWxsb2Nfb25lIChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIHBtZF9mcmVlKHBtZF90ICogcG1kKQogewotCXBtZF90ICpwbWQgPSAocG1kX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTyk7Ci0KLQlyZXR1cm4gcG1kOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXBtZF9mcmVlIChwbWRfdCAqcG1kKQotewotCXByZWVtcHRfZGlzYWJsZSgpOwotCSoodW5zaWduZWQgbG9uZyAqKXBtZCA9ICh1bnNpZ25lZCBsb25nKSBwbWRfcXVpY2tsaXN0OwotCXBtZF9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAqKSBwbWQ7Ci0JKytwZ3RhYmxlX2NhY2hlX3NpemU7Ci0JcHJlZW1wdF9lbmFibGUoKTsKKwlwZ3RhYmxlX3F1aWNrbGlzdF9mcmVlKHBtZCk7CiB9CiAKICNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWQpCXBtZF9mcmVlKHBtZCkKIAogc3RhdGljIGlubGluZSB2b2lkCi1wbWRfcG9wdWxhdGUgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kX2VudHJ5LCBzdHJ1Y3QgcGFnZSAqcHRlKQorcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqIHBtZF9lbnRyeSwgc3RydWN0IHBhZ2UgKnB0ZSkKIHsKIAlwbWRfdmFsKCpwbWRfZW50cnkpID0gcGFnZV90b19waHlzKHB0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotcG1kX3BvcHVsYXRlX2tlcm5lbCAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRfZW50cnksIHB0ZV90ICpwdGUpCitwbWRfcG9wdWxhdGVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqIHBtZF9lbnRyeSwgcHRlX3QgKiBwdGUpCiB7CiAJcG1kX3ZhbCgqcG1kX2VudHJ5KSA9IF9fcGEocHRlKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqCi1wdGVfYWxsb2Nfb25lIChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlzdHJ1Y3QgcGFnZSAqcHRlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTywgMCk7Ci0KLQlyZXR1cm4gcHRlOworCXJldHVybiB2aXJ0X3RvX3BhZ2UocGd0YWJsZV9xdWlja2xpc3RfYWxsb2MoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgKgotcHRlX2FsbG9jX29uZV9rZXJuZWwgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcHRlX3QgKnB0ZSA9IChwdGVfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVHxfX0dGUF9aRVJPKTsKLQotCXJldHVybiBwdGU7CisJcmV0dXJuIHBndGFibGVfcXVpY2tsaXN0X2FsbG9jKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotcHRlX2ZyZWUgKHN0cnVjdCBwYWdlICpwdGUpCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IHBhZ2UgKnB0ZSkKIHsKLQlfX2ZyZWVfcGFnZShwdGUpOworCXBndGFibGVfcXVpY2tsaXN0X2ZyZWUocGFnZV9hZGRyZXNzKHB0ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXB0ZV9mcmVlX2tlcm5lbCAocHRlX3QgKnB0ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwocHRlX3QgKiBwdGUpCiB7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwdGUpOworCXBndGFibGVfcXVpY2tsaXN0X2ZyZWUocHRlKTsKIH0KIAotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSkJdGxiX3JlbW92ZV9wYWdlKCh0bGIpLCAocHRlKSkKKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUpCXB0ZV9mcmVlKHB0ZSkKIAotZXh0ZXJuIHZvaWQgY2hlY2tfcGd0X2NhY2hlICh2b2lkKTsKK2V4dGVybiB2b2lkIGNoZWNrX3BndF9jYWNoZSh2b2lkKTsKIAotI2VuZGlmIC8qIF9BU01fSUE2NF9QR0FMTE9DX0ggKi8KKyNlbmRpZgkJCQkvKiBfQVNNX0lBNjRfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaAppbmRleCAyODA3ZjhkLi45ZTFiYThiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgKQEAgLTEzNyw5ICsxMzcsNiBAQAogCV9fdTY0IG5zZWNfcGVyX2N5YzsJLyogKDEwMDAwMDAwMDA8PElBNjRfTlNFQ19QRVJfQ1lDX1NISUZUKS9pdGNfZnJlcSAqLwogCV9fdTY0IHVuaW1wbF92YV9tYXNrOwkvKiBtYXNrIG9mIHVuaW1wbGVtZW50ZWQgdmlydHVhbCBhZGRyZXNzIGJpdHMgKGZyb20gUEFMKSAqLwogCV9fdTY0IHVuaW1wbF9wYV9tYXNrOwkvKiBtYXNrIG9mIHVuaW1wbGVtZW50ZWQgcGh5c2ljYWwgYWRkcmVzcyBiaXRzIChmcm9tIFBBTCkgKi8KLQlfX3U2NCAqcGdkX3F1aWNrOwotCV9fdTY0ICpwbWRfcXVpY2s7Ci0JX191NjQgcGd0YWJsZV9jYWNoZV9zejsKIAlfX3U2NCBpdGNfZnJlcTsJCS8qIGZyZXF1ZW5jeSBvZiBJVEMgY291bnRlciAqLwogCV9fdTY0IHByb2NfZnJlcTsJLyogZnJlcXVlbmN5IG9mIHByb2Nlc3NvciAqLwogCV9fdTY0IGN5Y19wZXJfdXNlYzsJLyogaXRjX2ZyZXEvMTAwMDAwMCAqLwpAQCAtMTUxLDYgKzE0OCwxMyBAQAogI2lmZGVmIENPTkZJR19TTVAKIAlfX3U2NCBsb29wc19wZXJfamlmZnk7CiAJaW50IGNwdTsKKwlfX3UzMiBzb2NrZXRfaWQ7CS8qIHBoeXNpY2FsIHByb2Nlc3NvciBzb2NrZXQgaWQgKi8KKwlfX3UxNiBjb3JlX2lkOwkJLyogY29yZSBpZCAqLworCV9fdTE2IHRocmVhZF9pZDsJLyogdGhyZWFkIGlkICovCisJX191MTYgbnVtX2xvZzsJCS8qIFRvdGFsIG51bWJlciBvZiBsb2dpY2FsIHByb2Nlc3NvcnMgb24KKwkJCQkgKiB0aGlzIHNvY2tldCB0aGF0IHdlcmUgc3VjY2Vzc2Z1bGx5IGJvb3RlZCAqLworCV9fdTggIGNvcmVzX3Blcl9zb2NrZXQ7CS8qIENvcmVzIHBlciBwcm9jZXNzb3Igc29ja2V0ICovCisJX191OCAgdGhyZWFkc19wZXJfY29yZTsJLyogVGhyZWFkcyBwZXIgY29yZSAqLwogI2VuZGlmCiAKIAkvKiBDUFVJRC1kZXJpdmVkIGluZm9ybWF0aW9uOiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zYWwuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc2FsLmgKaW5kZXggZWExZWQzNy4uMjlkZjg4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zYWwuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NhbC5oCkBAIC05MSw2ICs5MSw3IEBACiAjZGVmaW5lIFNBTF9QQ0lfQ09ORklHX1JFQUQJCTB4MDEwMDAwMTAKICNkZWZpbmUgU0FMX1BDSV9DT05GSUdfV1JJVEUJCTB4MDEwMDAwMTEKICNkZWZpbmUgU0FMX0ZSRVFfQkFTRQkJCTB4MDEwMDAwMTIKKyNkZWZpbmUgU0FMX1BIWVNJQ0FMX0lEX0lORk8JCTB4MDEwMDAwMTMKIAogI2RlZmluZSBTQUxfVVBEQVRFX1BBTAkJCTB4MDEwMDAwMjAKIApAQCAtODE1LDYgKzgxNiwxNyBAQAogCXJldHVybiBpc3J2LnN0YXR1czsKIH0KIAorLyogR2V0IHBoeXNpY2FsIHByb2Nlc3NvciBkaWUgbWFwcGluZyBpbiB0aGUgcGxhdGZvcm0uICovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9zYWxfcGh5c2ljYWxfaWRfaW5mbyh1MTYgKnNwbGlkKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgaXNydjsKKwlTQUxfQ0FMTChpc3J2LCBTQUxfUEhZU0lDQUxfSURfSU5GTywgMCwgMCwgMCwgMCwgMCwgMCwgMCk7CisJaWYgKHNwbGlkKQorCQkqc3BsaWQgPSBpc3J2LnYwOworCXJldHVybiBpc3J2LnN0YXR1czsKK30KKwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2FsX3BsYXRmb3JtX2ZlYXR1cmVzOwogCiBleHRlcm4gaW50ICgqc2FsaW5mb19wbGF0Zm9ybV9vZW1kYXRhKShjb25zdCB1OCAqLCB1OCAqKiwgdTY0ICopOwpAQCAtODMyLDYgKzg0NCw0NCBAQAogCQkJCSAgIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKIGV4dGVybiBpbnQgaWE2NF9zYWxfb2VtY2FsbF9yZWVudHJhbnQoc3RydWN0IGlhNjRfc2FsX3JldHZhbCAqLCB1NjQsIHU2NCwgdTY0LAogCQkJCSAgICAgIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKy8qCisgKiBTeXN0ZW0gQWJzdHJhY3Rpb24gTGF5ZXIgU3BlY2lmaWNhdGlvbgorICogU2VjdGlvbiAzLjIuNS4xOiBPU19CT09UX1JFTkRFWiB0byBTQUwgcmV0dXJuIFN0YXRlLgorICogTm90ZTogcmVnaW9uIHJlZ3MgYXJlIHN0b3JlZCBmaXJzdCBpbiBoZWFkLlMgX3N0YXJ0LiBIZW5jZSB0aGV5IG11c3QKKyAqIHN0YXkgdXAgZnJvbnQuCisgKi8KK3N0cnVjdCBzYWxfdG9fb3NfYm9vdCB7CisJdTY0IHJyWzhdOwkJLyogUmVnaW9uIFJlZ2lzdGVycyAqLworCXU2NAlicls2XTsJCS8qIGJyMDogcmV0dXJuIGFkZHIgaW50byBTQUwgYm9vdCByZW5kZXogcm91dGluZSAqLworCXU2NCBncjE7CQkvKiBTQUw6R1AgKi8KKwl1NjQgZ3IxMjsJCS8qIFNBTDpTUCAqLworCXU2NCBncjEzOwkJLyogU0FMOiBUYXNrIFBvaW50ZXIgKi8KKwl1NjQgZnBzcjsKKwl1NjQJcGZzOworCXU2NCBybmF0OworCXU2NCB1bmF0OworCXU2NCBic3BzdG9yZTsKKwl1NjQgZGNyOwkJLyogRGVmYXVsdCBDb250cm9sIFJlZ2lzdGVyICovCisJdTY0IGl2YTsKKwl1NjQgcHRhOworCXU2NCBpdHY7CisJdTY0IHBtdjsKKwl1NjQgY21jdjsKKwl1NjQgbHJyWzJdOworCXU2NCBncls0XTsKKwl1NjQgcHI7CQkJLyogUHJlZGljYXRlIHJlZ2lzdGVycyAqLworCXU2NCBsYzsJCQkvKiBMb29wIENvdW50ICovCisJc3RydWN0IGlhNjRfZnByZWcgZnBbMjBdOworfTsKKworLyoKKyAqIEdsb2JhbCBhcnJheSBhbGxvY2F0ZWQgZm9yIE5SX0NQVVMgYXQgYm9vdCB0aW1lCisgKi8KK2V4dGVybiBzdHJ1Y3Qgc2FsX3RvX29zX2Jvb3Qgc2FsX2Jvb3RfcmVuZGV6X3N0YXRlW05SX0NQVVNdOworCitleHRlcm4gdm9pZCBpYTY0X2p1bXBfdG9fc2FsKHN0cnVjdCBzYWxfdG9fb3NfYm9vdCAqKTsKKyNlbmRpZgogCiBleHRlcm4gdm9pZCBpYTY0X3NhbF9oYW5kbGVyX2luaXQodm9pZCAqZW50cnlfcG9pbnQsIHZvaWQgKmdwdmFsKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NpZ2luZm8uaAppbmRleCBkNTVmMTM5Li45Mjk0ZTRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NpZ2luZm8uaApAQCAtOCw5ICs4LDcgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4sIEhld2xldHQtUGFja2FyZCBDbwogICovCiAKLSNkZWZpbmUgU0lfUEFEX1NJWkUJKChTSV9NQVhfU0laRS9zaXplb2YoaW50KSkgLSA0KQotCi0jZGVmaW5lIFNJR0VWX1BBRF9TSVpFCSgoU0lHRVZfTUFYX1NJWkUvc2l6ZW9mKGludCkpIC0gNCkKKyNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUJKDQgKiBzaXplb2YoaW50KSkKIAogI2RlZmluZSBIQVZFX0FSQ0hfU0lHSU5GT19UCiAjZGVmaW5lIEhBVkVfQVJDSF9DT1BZX1NJR0lORk8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NpZ25hbC5oCmluZGV4IDY2MGE3NTkuLjYwODE2OGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zaWduYWwuaApAQCAtMTE0LDI3ICsxMTQsMTEgQEAKICNkZWZpbmUgX05TSUdfQlBXCTY0CiAjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKIAotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKICNkZWZpbmUgU0FfUEVSQ1BVX0lSUQkJMHgwMjAwMDAwMAogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCi0jZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCi0jZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCi0KLSNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCi0jZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCi0jZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+CiAKICMgaWZuZGVmIF9fQVNTRU1CTFlfXwogCkBAIC0xNDMsOSArMTI3LDYgQEAKIC8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCiBzdHJ1Y3Qgc2lnaW5mbzsKIAotLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KLXR5cGVkZWYgdm9pZCBfX3VzZXIgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKLQogdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgewogCXZvaWQgX191c2VyICpzc19zcDsKIAlpbnQgc3NfZmxhZ3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbXAuaAppbmRleCBjNGEyMjdhLi4zYmExYTA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc21wLmgKQEAgLTU2LDYgKzU2LDEwIEBACiBleHRlcm4gY2hhciBub19pbnRfcm91dGluZyBfX2RldmluaXRkYXRhOwogCiBleHRlcm4gY3B1bWFza190IGNwdV9vbmxpbmVfbWFwOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY29yZV9tYXBbTlJfQ1BVU107CitleHRlcm4gY3B1bWFza190IGNwdV9zaWJsaW5nX21hcFtOUl9DUFVTXTsKK2V4dGVybiBpbnQgc21wX251bV9zaWJsaW5nczsKK2V4dGVybiBpbnQgc21wX251bV9jcHVjb3JlczsKIGV4dGVybiB2b2lkIF9faW9tZW0gKmlwaV9iYXNlX2FkZHI7CiBleHRlcm4gdW5zaWduZWQgY2hhciBzbXBfaW50X3JlZGlyZWN0OwogCkBAIC0xMjQsNiArMTI4LDcgQEAKIGV4dGVybiB2b2lkIHNtcF9zZW5kX3Jlc2NoZWR1bGUgKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgbG9ja19pcGlfY2FsbGxvY2sodm9pZCk7CiBleHRlcm4gdm9pZCB1bmxvY2tfaXBpX2NhbGxsb2NrKHZvaWQpOworZXh0ZXJuIHZvaWQgaWRlbnRpZnlfc2libGluZ3MgKHN0cnVjdCBjcHVpbmZvX2lhNjQgKik7CiAKICNlbHNlCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vYWRkcnMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYWRkcnMuaAppbmRleCBjOTE2YmQyLi4xYmZkZmI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2FkZHJzLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9hZGRycy5oCkBAIC0xMzYsNiArMTM2LDcgQEAKICAqLwogI2RlZmluZSBDQUNfQkFTRQkJKENBQ0hFRCAgIHwgQVNfQ0FDX1NQQUNFKQogI2RlZmluZSBBTU9fQkFTRQkJKFVOQ0FDSEVEIHwgQVNfQU1PX1NQQUNFKQorI2RlZmluZSBBTU9fUEhZU19CQVNFCQkoVU5DQUNIRURfUEhZUyB8IEFTX0FNT19TUEFDRSkKICNkZWZpbmUgR0VUX0JBU0UJCShDQUNIRUQgICB8IEFTX0dFVF9TUEFDRSkKIAogLyoKQEAgLTE1NCwxMiArMTU1LDIwIEBACiAgKiAgICAgICAgICAgdGhlIGNoaXBsZXQgaWQgaXMgemVyby4gIElmIHdlIGltcGxlbWVudCBUSU8tVElPIGRtYSwgd2UgbWlnaHQgbmVlZAogICogICAgICAgICAgIHRvIGluc2VydCBhIGNoaXBsZXQgaWQgaW50byB0aGlzIG1hY3JvLiAgSG93ZXZlciwgaXQgaXMgb3VyIGJlbGllZgogICogICAgICAgICAgIHJpZ2h0IG5vdyB0aGF0IHRoaXMgY2hpcGxldCBpZCB3aWxsIGJlIElDRSwgd2hpY2ggaXMgYWxzbyB6ZXJvLgorICogICAgICAgICAgIE5hc2lkIHN0YXJ0cyBvbiBiaXQgNDAuCiAgKi8KLSNkZWZpbmUgUEhZU19UT19USU9ETUEoeCkJKCAoKCh1NjQpKHgpICYgTkFTSURfTUFTSykgPDwgMikgfCBOT0RFX09GRlNFVCh4KSkKKyNkZWZpbmUgUEhZU19UT19USU9ETUEoeCkJKCAoKCh1NjQpKE5BU0lEX0dFVCh4KSkpIDw8IDQwKSB8IE5PREVfT0ZGU0VUKHgpKQogI2RlZmluZSBQSFlTX1RPX0RNQSh4KSAgICAgICAgICAoICgoKHU2NCkoeCkgJiBOQVNJRF9NQVNLKSA+PiAyKSB8IE5PREVfT0ZGU0VUKHgpKQogCiAKIC8qCisgKiBNYWNyb3MgdG8gdGVzdCBmb3IgYWRkcmVzcyB0eXBlLgorICovCisjZGVmaW5lIElTX0FNT19BRERSRVNTKHgpCSgoKHU2NCkoeCkgJiAoUkVHSU9OX0JJVFMgfCBBU19NQVNLKSkgPT0gQU1PX0JBU0UpCisjZGVmaW5lIElTX0FNT19QSFlTX0FERFJFU1MoeCkJKCgodTY0KSh4KSAmIChSRUdJT05fQklUUyB8IEFTX01BU0spKSA9PSBBTU9fUEhZU19CQVNFKQorCisKKy8qCiAgKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIHBlcnRhaW4gdG8gdGhlIElPIHNwZWNpYWwgYWRkcmVzcwogICogc3BhY2UuICBUaGV5IGRlZmluZSB0aGUgbG9jYXRpb24gb2YgdGhlIGJpZyBhbmQgbGl0dGxlIHdpbmRvd3MKICAqIG9mIGFueSBnaXZlbiBub2RlLgpAQCAtMTY4LDcgKzE3NywxMCBAQAogI2RlZmluZSBUSU9fQldJTl9TSVpFX0JJVFMJCTMwCS8qIGJpZyB3aW5kb3cgc2l6ZTogMUcgKi8KICNkZWZpbmUgTk9ERV9TV0lOX0JBU0UobiwgdykJCSgodyA9PSAwKSA/IE5PREVfQldJTl9CQVNFKChuKSwgU1dJTjBfQklHV0lOKSBcCiAJCTogUkFXX05PREVfU1dJTl9CQVNFKG4sIHcpKQorI2RlZmluZSBUSU9fU1dJTl9CQVNFKG4sIHcpIAkJKFRJT19JT19CQVNFKG4pICsgXAorCQkJCQkgICAgKCh1NjQpICh3KSA8PCBUSU9fU1dJTl9TSVpFX0JJVFMpKQogI2RlZmluZSBOT0RFX0lPX0JBU0UobikJCQkoR0xPQkFMX01NUl9TUEFDRSB8IE5BU0lEX1NQQUNFKG4pKQorI2RlZmluZSBUSU9fSU9fQkFTRShuKSAgICAgICAgICAgICAgICAgIChVTkNBQ0hFRCB8IE5BU0lEX1NQQUNFKG4pKQogI2RlZmluZSBCV0lOX1NJWkUJCQkoMVVMIDw8IEJXSU5fU0laRV9CSVRTKQogI2RlZmluZSBOT0RFX0JXSU5fQkFTRTAobikJCShOT0RFX0lPX0JBU0UobikgKyBCV0lOX1NJWkUpCiAjZGVmaW5lIE5PREVfQldJTl9CQVNFKG4sIHcpCQkoTk9ERV9CV0lOX0JBU0UwKG4pICsgKCh1NjQpICh3KSA8PCBCV0lOX1NJWkVfQklUUykpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2FyY2guaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oCmluZGV4IDdjMzQ5ZjAuLjYzNWZkY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIFNHSSBzcGVjaWZpYyBzZXR1cC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywxOTk5LDIwMDEtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsMTk5OSwyMDAxLTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMTk5OSBSYWxmIEJhZWNobGUgKHJhbGZAZ251Lm9yZykKICAqLwogI2lmbmRlZiBfQVNNX0lBNjRfU05fQVJDSF9ICkBAIC00Nyw2ICs0NywyMSBAQAogI2RlZmluZSBNQVhfQ09NUEFDVF9OT0RFUwkyMDQ4CiAjZGVmaW5lIENQVVNfUEVSX05PREUJCTQKIAorCisvKgorICogQ29tcGFjdCBub2RlIElEIHRvIG5hc2lkIG1hcHBpbmdzIGtlcHQgaW4gdGhlIHBlci1jcHUgZGF0YSBhcmVhcyBvZiBlYWNoCisgKiBjcHUuCisgKi8KK0RFQ0xBUkVfUEVSX0NQVShzaG9ydCwgX19zbl9jbm9kZWlkX3RvX25hc2lkW01BWF9OVU1OT0RFU10pOworI2RlZmluZSBzbl9jbm9kZWlkX3RvX25hc2lkCSgmX19nZXRfY3B1X3ZhcihfX3NuX2Nub2RlaWRfdG9fbmFzaWRbMF0pKQorCisKKworZXh0ZXJuIHU4IHNuX3BhcnRpdGlvbl9pZDsKK2V4dGVybiB1OCBzbl9zeXN0ZW1fc2l6ZTsKK2V4dGVybiB1OCBzbl9zaGFyaW5nX2RvbWFpbl9zaXplOworZXh0ZXJuIHU4IHNuX3JlZ2lvbl9zaXplOworCiBleHRlcm4gdm9pZCBzbl9mbHVzaF9hbGxfY2FjaGVzKGxvbmcgYWRkciwgbG9uZyBieXRlcyk7CiAKICNlbmRpZiAvKiBfQVNNX0lBNjRfU05fQVJDSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2J0ZS5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9idGUuaAppbmRleCAwZWMyN2Y5Li5mNTBkYTNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2J0ZS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYnRlLmgKQEAgLTMsNyArMyw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICovCiAKIApAQCAtMTMsOCArMTMsMTIgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vc24vcGRhLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NodWJfbW1yLmg+CiAKKyNkZWZpbmUgSUJDVF9OT1RJRlkgICAgICAgICAgICAgKDB4MVVMIDw8IDQpCisjZGVmaW5lIElCQ1RfWkZJTF9NT0RFICAgICAgICAgICgweDFVTCA8PCAwKQogCiAvKiAjZGVmaW5lIEJURV9ERUJVRyAqLwogLyogI2RlZmluZSBCVEVfREVCVUdfVkVSQk9TRSAqLwpAQCAtMzksOCArNDMsMzYgQEAKIAogCiAvKiBEZWZpbmUgaGFyZHdhcmUgKi8KLSNkZWZpbmUgQlRFU19QRVJfTk9ERSAyCisjZGVmaW5lIEJURVNfUEVSX05PREUgKGlzX3NodWIyKCkgPyA0IDogMikKKyNkZWZpbmUgTUFYX0JURVNfUEVSX05PREUgNAogCisjZGVmaW5lIEJURTJPRkZfQ1RSTAkoMCkKKyNkZWZpbmUgQlRFMk9GRl9TUkMJKFNIMl9CVF9FTkdfU1JDX0FERFJfMCAtIFNIMl9CVF9FTkdfQ1NSXzApCisjZGVmaW5lIEJURTJPRkZfREVTVAkoU0gyX0JUX0VOR19ERVNUX0FERFJfMCAtIFNIMl9CVF9FTkdfQ1NSXzApCisjZGVmaW5lIEJURTJPRkZfTk9USUZZCShTSDJfQlRfRU5HX05PVElGX0FERFJfMCAtIFNIMl9CVF9FTkdfQ1NSXzApCisKKyNkZWZpbmUgQlRFX0JBU0VfQUREUihpbnRlcmZhY2UpIAkJCQlcCisgICAgKGlzX3NodWIyKCkgPyAoaW50ZXJmYWNlID09IDApID8gU0gyX0JUX0VOR19DU1JfMCA6CQlcCisJCSAgKGludGVyZmFjZSA9PSAxKSA/IFNIMl9CVF9FTkdfQ1NSXzEgOgkJXAorCQkgIChpbnRlcmZhY2UgPT0gMikgPyBTSDJfQlRfRU5HX0NTUl8yIDoJCVwKKwkJICAJCSAgICAgU0gyX0JUX0VOR19DU1JfMyAJCVwKKwkJOiAoaW50ZXJmYWNlID09IDApID8gSUlPX0lCTFMwIDogSUlPX0lCTFMxKQorCisjZGVmaW5lIEJURV9TT1VSQ0VfQUREUihiYXNlKQkJCQkJXAorICAgIChpc19zaHViMigpID8gYmFzZSArIChCVEUyT0ZGX1NSQy84KSAJCQlcCisJCTogYmFzZSArIChCVEVPRkZfU1JDLzgpKQorCisjZGVmaW5lIEJURV9ERVNUX0FERFIoYmFzZSkJCQkJCVwKKyAgICAoaXNfc2h1YjIoKSA/IGJhc2UgKyAoQlRFMk9GRl9ERVNULzgpIAkJCVwKKwkJOiBiYXNlICsgKEJURU9GRl9ERVNULzgpKQorCisjZGVmaW5lIEJURV9DVFJMX0FERFIoYmFzZSkJCQkJCVwKKyAgICAoaXNfc2h1YjIoKSA/IGJhc2UgKyAoQlRFMk9GRl9DVFJMLzgpIAkJCVwKKwkJOiBiYXNlICsgKEJURU9GRl9DVFJMLzgpKQorCisjZGVmaW5lIEJURV9OT1RJRl9BRERSKGJhc2UpCQkJCQlcCisgICAgKGlzX3NodWIyKCkgPyBiYXNlICsgKEJURTJPRkZfTk9USUZZLzgpIAkJCVwKKwkJOiBiYXNlICsgKEJURU9GRl9OT1RJRlkvOCkpCiAKIC8qIERlZmluZSBoYXJkd2FyZSBtb2RlcyAqLwogI2RlZmluZSBCVEVfTk9USUZZIChJQkNUX05PVElGWSkKQEAgLTY4LDE0ICsxMDAsMTggQEAKICNkZWZpbmUgQlRFX0xOU1RBVF9TVE9SRShfYnRlLCBfeCkJCQkJCVwKIAkJCUhVQl9TKF9idGUtPmJ0ZV9iYXNlX2FkZHIsIChfeCkpCiAjZGVmaW5lIEJURV9TUkNfU1RPUkUoX2J0ZSwgX3gpCQkJCQkJXAotCQkJSFVCX1MoX2J0ZS0+YnRlX2Jhc2VfYWRkciArIChCVEVPRkZfU1JDLzgpLCAoX3gpKQorCQkJSFVCX1MoX2J0ZS0+YnRlX3NvdXJjZV9hZGRyLCAoX3gpKQogI2RlZmluZSBCVEVfREVTVF9TVE9SRShfYnRlLCBfeCkJCQkJCVwKLQkJCUhVQl9TKF9idGUtPmJ0ZV9iYXNlX2FkZHIgKyAoQlRFT0ZGX0RFU1QvOCksIChfeCkpCisJCQlIVUJfUyhfYnRlLT5idGVfZGVzdGluYXRpb25fYWRkciwgKF94KSkKICNkZWZpbmUgQlRFX0NUUkxfU1RPUkUoX2J0ZSwgX3gpCQkJCQlcCi0JCQlIVUJfUyhfYnRlLT5idGVfYmFzZV9hZGRyICsgKEJURU9GRl9DVFJMLzgpLCAoX3gpKQorCQkJSFVCX1MoX2J0ZS0+YnRlX2NvbnRyb2xfYWRkciwgKF94KSkKICNkZWZpbmUgQlRFX05PVElGX1NUT1JFKF9idGUsIF94KQkJCQkJXAotCQkJSFVCX1MoX2J0ZS0+YnRlX2Jhc2VfYWRkciArIChCVEVPRkZfTk9USUZZLzgpLCAoX3gpKQorCQkJSFVCX1MoX2J0ZS0+YnRlX25vdGlmeV9hZGRyLCAoX3gpKQogCisjZGVmaW5lIEJURV9TVEFSVF9UUkFOU0ZFUihfYnRlLCBfbGVuLCBfbW9kZSkJCQkJXAorCWlzX3NodWIyKCkgPyBCVEVfQ1RSTF9TVE9SRShfYnRlLCBJQkxTX0JVU1kgfCAoX21vZGUgPDwgMjQpIHwgX2xlbikgXAorCQk6IEJURV9MTlNUQVRfU1RPUkUoX2J0ZSwgX2xlbik7CQkJCVwKKwkJICBCVEVfQ1RSTF9TVE9SRShfYnRlLCBfbW9kZSkKIAogLyogUG9zc2libGUgcmVzdWx0cyBmcm9tIGJ0ZV9jb3B5IGFuZCBidGVfdW5hbGlnbmVkX2NvcHkgKi8KIC8qIFRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXMgbWFwIGludG8gdGhlIEJURSBoYXJkd2FyZSBjb2RlcwpAQCAtMTEwLDYgKzE0NiwxMCBAQAogc3RydWN0IGJ0ZWluZm9fcyB7CiAJdm9sYXRpbGUgdTY0IG5vdGlmeSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAJdTY0ICpidGVfYmFzZV9hZGRyIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwl1NjQgKmJ0ZV9zb3VyY2VfYWRkcjsKKwl1NjQgKmJ0ZV9kZXN0aW5hdGlvbl9hZGRyOworCXU2NCAqYnRlX2NvbnRyb2xfYWRkcjsKKwl1NjQgKmJ0ZV9ub3RpZnlfYWRkcjsKIAlzcGlubG9ja190IHNwaW5sb2NrOwogCWNub2RlaWRfdCBidGVfY25vZGU7CS8qIGNub2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAJaW50IGJ0ZV9lcnJvcl9jb3VudDsJLyogTnVtYmVyIG9mIGVycm9ycyBlbmNvdW50ZXJlZCAgICAgKi8KQEAgLTExNyw2ICsxNTcsNyBAQAogCWludCBjbGVhbnVwX2FjdGl2ZTsJLyogSW50ZXJmYWNlIGlzIGxvY2tlZCBmb3IgY2xlYW51cCAgKi8KIAl2b2xhdGlsZSBidGVfcmVzdWx0X3QgYmhfZXJyb3I7CS8qIGVycm9yIHdoaWxlIHByb2Nlc3NpbmcgICAqLwogCXZvbGF0aWxlIHU2NCAqbW9zdF9yY250X25hOworCXN0cnVjdCBidGVpbmZvX3MgKmJ0ZXNfdG9fdHJ5W01BWF9CVEVTX1BFUl9OT0RFXTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9mZXRjaG9wLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2ZldGNob3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY0YWQ4Zi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2ZldGNob3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotCi0jaWZuZGVmIF9BU01fSUE2NF9TTl9GRVRDSE9QX0gKLSNkZWZpbmUgX0FTTV9JQTY0X1NOX0ZFVENIT1BfSAotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNkZWZpbmUgRkVUQ0hPUF9CQVNFTkFNRQkic2dpX2ZldGNob3AiCi0jZGVmaW5lIEZFVENIT1BfRlVMTE5BTUUJIi9kZXYvc2dpX2ZldGNob3AiCi0KLQotCi0jZGVmaW5lIEZFVENIT1BfVkFSX1NJWkUgNjQgLyogNjQgYnl0ZSBwZXIgZmV0Y2hvcCB2YXJpYWJsZSAqLwotCi0jZGVmaW5lIEZFVENIT1BfTE9BRAkJMAotI2RlZmluZSBGRVRDSE9QX0lOQ1JFTUVOVAk4Ci0jZGVmaW5lIEZFVENIT1BfREVDUkVNRU5UCTE2Ci0jZGVmaW5lIEZFVENIT1BfQ0xFQVIJCTI0Ci0KLSNkZWZpbmUgRkVUQ0hPUF9TVE9SRQkJMAotI2RlZmluZSBGRVRDSE9QX0FORAkJMjQKLSNkZWZpbmUgRkVUQ0hPUF9PUgkJMzIKLQotI2RlZmluZSBGRVRDSE9QX0NMRUFSX0NBQ0hFCTU2Ci0KLSNkZWZpbmUgRkVUQ0hPUF9MT0FEX09QKGFkZHIsIG9wKSAoIFwKLSAgICAgICAgICoodm9sYXRpbGUgbG9uZyAqKSgoY2hhciopIChhZGRyKSArIChvcCkpKQotCi0jZGVmaW5lIEZFVENIT1BfU1RPUkVfT1AoYWRkciwgb3AsIHgpICggXAotICAgICAgICAgKih2b2xhdGlsZSBsb25nICopKChjaGFyKikgKGFkZHIpICsgKG9wKSkgPSAobG9uZykgKHgpKQotCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICogQ29udmVydCBhIHJlZ2lvbiA2IChrYWRkcikgYWRkcmVzcyB0byB0aGUgYWRkcmVzcyBvZiB0aGUgZmV0Y2hvcCB2YXJpYWJsZQotICovCi0jZGVmaW5lIEZFVENIT1BfS0FERFJfVE9fTVNQRUNfQUREUihrYWRkcikJVE9fTVNQRUMoa2FkZHIpCi0KLQotLyoKLSAqIEVhY2ggQXRvbWljIE1lbW9yeSBPcGVyYXRpb24gKEFNTyBmb3JtZXJseSBrbm93biBhcyBmZXRjaG9wKQotICogdmFyaWFibGUgaXMgNjQgYnl0ZXMgbG9uZy4gIFRoZSBmaXJzdCA4IGJ5dGVzIGFyZSB1c2VkLiAgVGhlCi0gKiByZW1haW5pbmcgNTYgYnl0ZXMgYXJlIHVuYWRkcmVzc2FibGUgZHVlIHRvIHRoZSBvcGVyYXRpb24gdGFraW5nCi0gKiB0aGF0IHBvcnRpb24gb2YgdGhlIGFkZHJlc3MuCi0gKiAKLSAqIE5PVEU6IFRoZSBBTU9fdCBfTVVTVF8gYmUgcGxhY2VkIGluIGVpdGhlciB0aGUgZmlyc3Qgb3Igc2Vjb25kIGhhbGYKLSAqIG9mIHRoZSBjYWNoZSBsaW5lLiAgVGhlIGNhY2hlIGxpbmUgX01VU1QgTk9UXyBiZSB1c2VkIGZvciBhbnl0aGluZwotICogb3RoZXIgdGhhbiBhZGRpdGlvbmFsIEFNT190IGVudHJpZXMuICBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgYXJlIHR3bwotICogYWRkcmVzc2VzIHdoaWNoIHJlZmVyZW5jZSB0aGUgc2FtZSBwaHlzaWNhbCBjYWNoZSBsaW5lLiAgT25lIHdpbGwKLSAqIGJlIGEgY2FjaGVkIGVudHJ5IHdpdGggdGhlIG1lbW9yeSB0eXBlIGJpdHMgYWxsIHNldC4gIFRoaXMgYWRkcmVzcwotICogbWF5IGJlIGxvYWRlZCBpbnRvIHByb2Nlc3NvciBjYWNoZS4gIFRoZSBBTU9fdCB3aWxsIGJlIHJlZmVyZW5jZWQKLSAqIHVuY2FjaGVkIHZpYSB0aGUgbWVtb3J5IHNwZWNpYWwgbWVtb3J5IHR5cGUuICBJZiBhbnkgcG9ydGlvbiBvZiB0aGUKLSAqIGNhY2hlZCBjYWNoZS1saW5lIGlzIG1vZGlmaWVkLCB3aGVuIHRoYXQgbGluZSBpcyBmbHVzaGVkLCBpdCB3aWxsCi0gKiBvdmVyd3JpdGUgdGhlIHVuY2FjaGVkIHZhbHVlIGluIHBoeXNpY2FsIG1lbW9yeSBhbmQgbGVhZCB0bwotICogaW5jb25zaXN0ZW5jeS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICAgICAgICB1NjQgdmFyaWFibGU7Ci0gICAgICAgIHU2NCB1bnVzZWRbN107Ci19IEFNT190OwotCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIEFQSXMgYXJlIGV4dGVybmFsaXplZCB0byB0aGUga2VybmVsIHRvIGFsbG9jYXRlL2ZyZWUgcGFnZXMgb2YKLSAqIGZldGNob3AgdmFyaWFibGVzLgotICoJZmV0Y2hvcF9rYWxsb2NfcGFnZQktIEFsbG9jYXRlL2luaXRpYWxpemUgMSBmZXRjaG9wIHBhZ2Ugb24gdGhlCi0gKgkJCQkgIHNwZWNpZmllZCBjbm9kZS4gCi0gKglmZXRjaG9wX2tmcmVlX3BhZ2UJLSBGcmVlIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgZmV0Y2hvcCBwYWdlCi0gKi8KLQotdW5zaWduZWQgbG9uZyBmZXRjaG9wX2thbGxvY19wYWdlKGludCBuaWQpOwotdm9pZCBmZXRjaG9wX2tmcmVlX3BhZ2UodW5zaWduZWQgbG9uZyBtYWRkcik7Ci0KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9GRVRDSE9QX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9nZW8uaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vZ2VvLmgKaW5kZXggZjU2NjM0My4uODRiMjU0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9nZW8uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2dlby5oCkBAIC0xOCwzMiArMTgsMzQgQEAKICNkZWZpbmUgR0VPSURfU0laRQk4CS8qIFdvdWxkIDE2IGJlIGJldHRlcj8gIFRoZSBzaXplIGNhbgogCQkJCSAgIGJlIGRpZmZlcmVudCBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLiAqLwogCi0jZGVmaW5lIE1BWF9TTEFCUwkweGUJLyogc2xhYnMgcGVyIG1vZHVsZSAqLworI2RlZmluZSBNQVhfU0xPVFMJMHhmCS8qIHNsb3RzIHBlciBtb2R1bGUgKi8KKyNkZWZpbmUgTUFYX1NMQUJTCTB4ZgkvKiBzbGFicyBwZXIgc2xvdCAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIJZ2VvX3R5cGVfdDsKIAogLyogRmllbGRzIGNvbW1vbiB0byBhbGwgc3Vic3RydWN0dXJlcyAqLwotdHlwZWRlZiBzdHJ1Y3QgZ2VvX2FueV9zIHsKK3R5cGVkZWYgc3RydWN0IGdlb19jb21tb25fcyB7CiAgICAgbW9kdWxlaWRfdAltb2R1bGU7CQkvKiBUaGUgbW9kdWxlIChib3gpIHRoaXMgaC93IGxpdmVzIGluICovCiAgICAgZ2VvX3R5cGVfdAl0eXBlOwkJLyogV2hhdCB0eXBlIG9mIGgvdyBpcyBuYW1lZCBieSB0aGlzIGdlb2lkX3QgKi8KLSAgICBzbGFiaWRfdAlzbGFiOwkJLyogVGhlIGxvZ2ljYWwgYXNzZW1ibHkgd2l0aGluIHRoZSBtb2R1bGUgKi8KLX0gZ2VvX2FueV90OworICAgIHNsYWJpZF90CXNsYWI6NDsJCS8qIHNsYWIgKEFTSUMpLCAwIC4uIDE1IHdpdGhpbiBzbG90ICovCisgICAgc2xvdGlkX3QJc2xvdDo0OwkJLyogc2xvdCAoQmxhZGUpLCAwIC4uIDE1IHdpdGhpbiBtb2R1bGUgKi8KK30gZ2VvX2NvbW1vbl90OwogCiAvKiBBZGRpdGlvbmFsIGZpZWxkcyBmb3IgcGFydGljdWxhciB0eXBlcyBvZiBoYXJkd2FyZSAqLwogdHlwZWRlZiBzdHJ1Y3QgZ2VvX25vZGVfcyB7Ci0gICAgZ2VvX2FueV90CWFueTsJCS8qIE5vIGFkZGl0aW9uYWwgZmllbGRzIG5lZWRlZCAqLworICAgIGdlb19jb21tb25fdAljb21tb247CQkvKiBObyBhZGRpdGlvbmFsIGZpZWxkcyBuZWVkZWQgKi8KIH0gZ2VvX25vZGVfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZ2VvX3J0cl9zIHsKLSAgICBnZW9fYW55X3QJYW55OwkJLyogTm8gYWRkaXRpb25hbCBmaWVsZHMgbmVlZGVkICovCisgICAgZ2VvX2NvbW1vbl90CWNvbW1vbjsJCS8qIE5vIGFkZGl0aW9uYWwgZmllbGRzIG5lZWRlZCAqLwogfSBnZW9fcnRyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGdlb19pb2NudGxfcyB7Ci0gICAgZ2VvX2FueV90CWFueTsJCS8qIE5vIGFkZGl0aW9uYWwgZmllbGRzIG5lZWRlZCAqLworICAgIGdlb19jb21tb25fdAljb21tb247CQkvKiBObyBhZGRpdGlvbmFsIGZpZWxkcyBuZWVkZWQgKi8KIH0gZ2VvX2lvY250bF90OwogCiB0eXBlZGVmIHN0cnVjdCBnZW9fcGNpY2FyZF9zIHsKLSAgICBnZW9faW9jbnRsX3QJYW55OworICAgIGdlb19pb2NudGxfdAljb21tb247CiAgICAgY2hhcgkJYnVzOwkvKiBCdXMvd2lkZ2V0IG51bWJlciAqLwogICAgIGNoYXIJCXNsb3Q7CS8qIFBDSSBzbG90IG51bWJlciAqLwogfSBnZW9fcGNpY2FyZF90OwpAQCAtNjIsMTQgKzY0LDE0IEBACiAKIAogdHlwZWRlZiB1bmlvbiBnZW9pZF91IHsKLSAgICBnZW9fYW55X3QJYW55OwotICAgIGdlb19ub2RlX3QJbm9kZTsKKyAgICBnZW9fY29tbW9uX3QJY29tbW9uOworICAgIGdlb19ub2RlX3QJCW5vZGU7CiAgICAgZ2VvX2lvY250bF90CWlvY250bDsKICAgICBnZW9fcGNpY2FyZF90CXBjaWNhcmQ7Ci0gICAgZ2VvX3J0cl90CXJ0cjsKLSAgICBnZW9fY3B1X3QJY3B1OwotICAgIGdlb19tZW1fdAltZW07Ci0gICAgY2hhcglwYWRzaXplW0dFT0lEX1NJWkVdOworICAgIGdlb19ydHJfdAkJcnRyOworICAgIGdlb19jcHVfdAkJY3B1OworICAgIGdlb19tZW1fdAkJbWVtOworICAgIGNoYXIJCXBhZHNpemVbR0VPSURfU0laRV07CiB9IGdlb2lkX3Q7CiAKIApAQCAtMTA0LDE5ICsxMDYsMjYgQEAKICNkZWZpbmUgSU5WQUxJRF9DTk9ERUlEICAgICAgICAgKChjbm9kZWlkX3QpLTEpCiAjZGVmaW5lIElOVkFMSURfUE5PREVJRCAgICAgICAgICgocG5vZGVpZF90KS0xKQogI2RlZmluZSBJTlZBTElEX1NMQUIgICAgICAgICAgICAoc2xhYmlkX3QpLTEKKyNkZWZpbmUgSU5WQUxJRF9TTE9UICAgICAgICAgICAgKHNsb3RpZF90KS0xCiAjZGVmaW5lIElOVkFMSURfTU9EVUxFICAgICAgICAgICgobW9kdWxlaWRfdCktMSkKICNkZWZpbmUgSU5WQUxJRF9QQVJUSUQgICAgICAgICAgKChwYXJ0aWRfdCktMSkKIAogc3RhdGljIGlubGluZSBzbGFiaWRfdCBnZW9fc2xhYihnZW9pZF90IGcpCiB7Ci0JcmV0dXJuIChnLmFueS50eXBlID09IEdFT19UWVBFX0lOVkFMSUQpID8KLQkJSU5WQUxJRF9TTEFCIDogZy5hbnkuc2xhYjsKKwlyZXR1cm4gKGcuY29tbW9uLnR5cGUgPT0gR0VPX1RZUEVfSU5WQUxJRCkgPworCQlJTlZBTElEX1NMQUIgOiBnLmNvbW1vbi5zbGFiOworfQorCitzdGF0aWMgaW5saW5lIHNsb3RpZF90IGdlb19zbG90KGdlb2lkX3QgZykKK3sKKwlyZXR1cm4gKGcuY29tbW9uLnR5cGUgPT0gR0VPX1RZUEVfSU5WQUxJRCkgPworCQlJTlZBTElEX1NMT1QgOiBnLmNvbW1vbi5zbG90OwogfQogCiBzdGF0aWMgaW5saW5lIG1vZHVsZWlkX3QgZ2VvX21vZHVsZShnZW9pZF90IGcpCiB7Ci0JcmV0dXJuIChnLmFueS50eXBlID09IEdFT19UWVBFX0lOVkFMSUQpID8KLQkJSU5WQUxJRF9NT0RVTEUgOiBnLmFueS5tb2R1bGU7CisJcmV0dXJuIChnLmNvbW1vbi50eXBlID09IEdFT19UWVBFX0lOVkFMSUQpID8KKwkJSU5WQUxJRF9NT0RVTEUgOiBnLmNvbW1vbi5tb2R1bGU7CiB9CiAKIGV4dGVybiBnZW9pZF90IGNub2RlaWRfZ2V0X2dlb2lkKGNub2RlaWRfdCBjbm9kZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2wxLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2wxLmgKaW5kZXggZDVkYmQ1NS4uMDgwNTBkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9sMS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vbDEuaApAQCAtMjksOCArMjksOSBAQAogI2RlZmluZSBMMV9CUklDS1RZUEVfQ0hJX0NHICAgICAweDc2ICAgICAgICAgICAgLyogdiAqLwogI2RlZmluZSBMMV9CUklDS1RZUEVfWCAgICAgICAgICAweDc4ICAgICAgICAgICAgLyogeCAqLwogI2RlZmluZSBMMV9CUklDS1RZUEVfWDIgICAgICAgICAweDc5ICAgICAgICAgICAgLyogeSAqLwotI2RlZmluZSBMMV9CUklDS1RZUEVfU0EJCTB4NWUgICAgICAgICAgICAvKiBeICovIC8qIFRJTyBicmluZ3VwIGJyaWNrICovCisjZGVmaW5lIEwxX0JSSUNLVFlQRV9TQQkJMHg1ZSAgICAgICAgICAgIC8qIF4gKi8KICNkZWZpbmUgTDFfQlJJQ0tUWVBFX1BBCQkweDZhICAgICAgICAgICAgLyogaiAqLwogI2RlZmluZSBMMV9CUklDS1RZUEVfSUEJCTB4NmIgICAgICAgICAgICAvKiBrICovCisjZGVmaW5lIEwxX0JSSUNLVFlQRV9BVEhFTkEJMHgyYiAgICAgICAgICAgIC8qICsgKi8KIAogI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9MMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL25vZGVwZGEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vbm9kZXBkYS5oCmluZGV4IDJmYmRlMzMuLjcxMzhiMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vbm9kZXBkYS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vbm9kZXBkYS5oCkBAIC0zLDcgKzMsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTIgLSAxOTk3LCAyMDAwLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NywgMjAwMC0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogI2lmbmRlZiBfQVNNX0lBNjRfU05fTk9ERVBEQV9ICiAjZGVmaW5lIF9BU01fSUE2NF9TTl9OT0RFUERBX0gKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2FyY2guaD4KICNpbmNsdWRlIDxhc20vc24vaW50ci5oPgotI2luY2x1ZGUgPGFzbS9zbi9wZGEuaD4KICNpbmNsdWRlIDxhc20vc24vYnRlLmg+CiAKIC8qCkBAIC00Myw3ICs0Miw3IEBACiAJLyoKIAkgKiBUaGUgQlRFcyBvbiB0aGlzIG5vZGUgYXJlIHNoYXJlZCBieSB0aGUgbG9jYWwgY3B1cwogCSAqLwotCXN0cnVjdCBidGVpbmZvX3MJYnRlX2lmW0JURVNfUEVSX05PREVdOwkvKiBWaXJ0dWFsIEludGVyZmFjZSAqLworCXN0cnVjdCBidGVpbmZvX3MJYnRlX2lmW01BWF9CVEVTX1BFUl9OT0RFXTsJLyogVmlydHVhbCBJbnRlcmZhY2UgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdAlidGVfcmVjb3ZlcnlfdGltZXI7CiAJc3BpbmxvY2tfdAkJYnRlX3JlY292ZXJ5X2xvY2s7CiAKQEAgLTY3LDIwICs2NiwxOCBAQAogICogVGhlIG5leHQgc2V0IG9mIGRlZmluaXRpb25zIHByb3ZpZGVzIHRoaXMuCiAgKiBSb3V0aW5lcyBhcmUgZXhwZWN0ZWQgdG8gdXNlIAogICoKLSAqCW5vZGVwZGEJCQktPiB0byBhY2Nlc3Mgbm9kZSBQREEgZm9yIHRoZSBub2RlIG9uIHdoaWNoIGNvZGUgaXMgcnVubmluZwotICoJc3Vibm9kZXBkYQkJLT4gdG8gYWNjZXNzIHN1Ym5vZGUgUERBIGZvciB0aGUgc3Vibm9kZSBvbiB3aGljaCBjb2RlIGlzIHJ1bm5pbmcKLSAqCi0gKglOT0RFUERBKGNub2RlKQkJLT4gdG8gYWNjZXNzIG5vZGUgUERBIGZvciBjbm9kZWlkIAotICoJU1VCTk9ERVBEQShjbm9kZSxzbikJLT4gdG8gYWNjZXNzIHN1Ym5vZGUgUERBIGZvciBjbm9kZWlkL3N1Ym5vZGUKKyAqCXNuX25vZGVwZGEgICAtIHRvIGFjY2VzcyBub2RlIFBEQSBmb3IgdGhlIG5vZGUgb24gd2hpY2ggY29kZSBpcyBydW5uaW5nCisgKglOT0RFUERBKGNub2RlaWQpICAgLSB0byBhY2Nlc3Mgbm9kZSBQREEgZm9yIGNub2RlaWQKICAqLwogCi0jZGVmaW5lCW5vZGVwZGEJCXBkYS0+cF9ub2RlcGRhCQkvKiBQdHIgdG8gdGhpcyBub2RlJ3MgUERBICovCi0jZGVmaW5lCU5PREVQREEoY25vZGUpCQkobm9kZXBkYS0+cGVybm9kZV9wZGFpbmRyW2Nub2RlXSkKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgbm9kZXBkYV9zICosIF9fc25fbm9kZXBkYSk7CisjZGVmaW5lIHNuX25vZGVwZGEJCShfX2dldF9jcHVfdmFyKF9fc25fbm9kZXBkYSkpCisjZGVmaW5lCU5PREVQREEoY25vZGVpZCkJKHNuX25vZGVwZGEtPnBlcm5vZGVfcGRhaW5kcltjbm9kZWlkXSkKIAogLyoKICAqIENoZWNrIGlmIGdpdmVuIGEgY29tcGFjdCBub2RlIGlkIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUgaGFzIGFsbCB0aGUKICAqIGNwdXMgZGlzYWJsZWQuIAogICovCi0jZGVmaW5lIGlzX2hlYWRsZXNzX25vZGUoY25vZGUpCQkobnJfY3B1c19ub2RlKGNub2RlKSA9PSAwKQorI2RlZmluZSBpc19oZWFkbGVzc19ub2RlKGNub2RlaWQpCShucl9jcHVzX25vZGUoY25vZGVpZCkgPT0gMCkKIAogI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9OT0RFUERBX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9pbmNsdWRlL3BjaS9wY2lidXNfcHJvdmlkZXJfZGVmcy5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9wY2lidXNfcHJvdmlkZXJfZGVmcy5oCnNpbWlsYXJpdHkgaW5kZXggNzMlCnJlbmFtZSBmcm9tIGFyY2gvaWE2NC9zbi9pbmNsdWRlL3BjaS9wY2lidXNfcHJvdmlkZXJfZGVmcy5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1pYTY0L3NuL3BjaWJ1c19wcm92aWRlcl9kZWZzLmgKaW5kZXggMDcwNjU2MS4uMDRlMjdkNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2luY2x1ZGUvcGNpL3BjaWJ1c19wcm92aWRlcl9kZWZzLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9wY2lidXNfcHJvdmlkZXJfZGVmcy5oCkBAIC0xNyw2ICsxNyw5IEBACiAjZGVmaW5lIFBDSUlPX0FTSUNfVFlQRV9QUEIJMQogI2RlZmluZSBQQ0lJT19BU0lDX1RZUEVfUElDCTIKICNkZWZpbmUgUENJSU9fQVNJQ19UWVBFX1RJT0NQCTMKKyNkZWZpbmUgUENJSU9fQVNJQ19UWVBFX1RJT0NBCTQKKworI2RlZmluZSBQQ0lJT19BU0lDX01BWF9UWVBFUwk1CiAKIC8qCiAgKiBDb21tb24gcGNpaW8gYnVzIHByb3ZpZGVyIGRhdGEuICBUaGVyZSBzaG91bGQgYmUgb25lIG9mIHRoZXNlIGFzIHRoZQpAQCAtMzUsOSArMzgsMTUgQEAKIH07CiAKIC8qCi0gKiBETUEgbWFwcGluZyBmbGFncworICogU04gcGNpIGJ1cyBpbmRpcmVjdGlvbgogICovCiAKLSNkZWZpbmUgU05fUENJRE1BX0NPTlNJU1RFTlQgICAgMHgwMDAxCitzdHJ1Y3Qgc25fcGNpYnVzX3Byb3ZpZGVyIHsKKwlkbWFfYWRkcl90CSgqZG1hX21hcCkoc3RydWN0IHBjaV9kZXYgKiwgdW5zaWduZWQgbG9uZywgc2l6ZV90KTsKKwlkbWFfYWRkcl90CSgqZG1hX21hcF9jb25zaXN0ZW50KShzdHJ1Y3QgcGNpX2RldiAqLCB1bnNpZ25lZCBsb25nLCBzaXplX3QpOworCXZvaWQJCSgqZG1hX3VubWFwKShzdHJ1Y3QgcGNpX2RldiAqLCBkbWFfYWRkcl90LCBpbnQpOworCXZvaWQgKgkJKCpidXNfZml4dXApKHN0cnVjdCBwY2lidXNfYnVzc29mdCAqKTsKK307CiAKK2V4dGVybiBzdHJ1Y3Qgc25fcGNpYnVzX3Byb3ZpZGVyICpzbl9wY2lfcHJvdmlkZXJbXTsKICNlbmRpZgkJCQkvKiBfQVNNX0lBNjRfU05fUENJX1BDSUJVU19QUk9WSURFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vaW5jbHVkZS9wY2kvcGNpZGV2LmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3BjaWRldi5oCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIGFyY2gvaWE2NC9zbi9pbmNsdWRlL3BjaS9wY2lkZXYuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20taWE2NC9zbi9wY2lkZXYuaAppbmRleCA4MWViOTVkLi5lZDQwMzFkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vaW5jbHVkZS9wY2kvcGNpZGV2LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9wY2lkZXYuaApAQCAtMzIsNiArMzIsOSBAQAogI2RlZmluZSBTTl9QQ0lERVZfQlVTU09GVChwY2lfZGV2KSBcCiAJKFNOX1BDSURFVl9JTkZPKHBjaV9kZXYpLT5wZGlfaG9zdF9wY2lkZXZfaW5mby0+cGRpX3BjaWJ1c19pbmZvKQogCisjZGVmaW5lIFNOX1BDSURFVl9CVVNQUk9WSURFUihwY2lfZGV2KSBcCisJKFNOX1BDSURFVl9JTkZPKHBjaV9kZXYpLT5wZGlfcHJvdmlkZXIpCisKICNkZWZpbmUgUENJSU9fQlVTX05PTkUJMjU1ICAgICAgLyogYnVzIDI1NSByZXNlcnZlZCAqLwogI2RlZmluZSBQQ0lJT19TTE9UX05PTkUgMjU1CiAjZGVmaW5lIFBDSUlPX0ZVTkNfTk9ORSAyNTUKQEAgLTQ2LDYgKzQ5LDcgQEAKIAlzdHJ1Y3QgcGNpX2RldgkJKnBkaV9saW51eF9wY2lkZXY7CS8qIEtlcm5lbCBwY2lfZGV2ICovCiAKIAlzdHJ1Y3Qgc25faXJxX2luZm8JKnBkaV9zbl9pcnFfaW5mbzsKKwlzdHJ1Y3Qgc25fcGNpYnVzX3Byb3ZpZGVyICpwZGlfcHJvdmlkZXI7CS8qIHNuIHBjaSBvcHMgKi8KIH07CiAKIGV4dGVybiB2b2lkIHNuX2lycV9maXh1cChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vcGRhLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3BkYS5oCmluZGV4IGU5NDBkMzYuLmVhNTU5MGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vcGRhLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9wZGEuaApAQCAtMyw3ICszLDcgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NywgMjAwMC0yMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMTk5MiAtIDE5OTcsIDIwMDAtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KICNpZm5kZWYgX0FTTV9JQTY0X1NOX1BEQV9ICiAjZGVmaW5lIF9BU01fSUE2NF9TTl9QREFfSApAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vc24vYnRlLmg+CiAKIAogLyoKQEAgLTI1LDE0ICsyNCw2IEBACiAKIHR5cGVkZWYgc3RydWN0IHBkYV9zIHsKIAotCS8qIEhhdmluZyBhIHBvaW50ZXIgaW4gdGhlIGJlZ2luaW5nIG9mIFBEQSB0ZW5kcyB0byBpbmNyZWFzZQotCSAqIHRoZSBjaGFuY2Ugb2YgaGF2aW5nIHRoaXMgcG9pbnRlciBpbiBjYWNoZS4gKFllcyBzb21ldGhpbmcKLQkgKiBlbHNlIGdldHMgcHVzaGVkIG91dCkuIERvaW5nIHRoaXMgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIG1lbW9yeQotCSAqIGFjY2VzcyB0byBhbGwgbm9kZXBkYSB2YXJpYWJsZXMgdG8gYmUgb25lCi0JICovCi0Jc3RydWN0IG5vZGVwZGFfcyAqcF9ub2RlcGRhOwkJLyogUG9pbnRlciB0byBQZXIgbm9kZSBQREEgKi8KLQlzdHJ1Y3Qgc3Vibm9kZXBkYV9zICpwX3N1Ym5vZGVwZGE7CS8qIFBvaW50ZXIgdG8gQ1BVICBzdWJub2RlIFBEQSAqLwotCiAJLyoKIAkgKiBTdXBwb3J0IGZvciBTTiBMRURzCiAJICovCkBAIC01MCw3ICs0MSw2IEBACiAKIAl1bnNpZ25lZCBsb25nCXNuX3NvZnRfaXJyWzRdOwogCXVuc2lnbmVkIGxvbmcJc25faW5fc2VydmljZV9pdmVjc1s0XTsKLQlzaG9ydAkJY25vZGVpZF90b19uYXNpZF90YWJsZVtNQVhfTlVNTk9ERVNdOwogCWludAkJc25fbGJfaW50X3dhcl90aWNrczsKIAlpbnQJCXNuX2xhc3RfaXJxOwogCWludAkJc25fZmlyc3RfaXJxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9zaHViX21tci5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zaHViX21tci5oCmluZGV4IDVjMmZjZjEuLjMyM2ZhMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc2h1Yl9tbXIuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NodWJfbW1yLmgKQEAgLTQsNyArNCw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICovCiAKICNpZm5kZWYgX0FTTV9JQTY0X1NOX1NIVUJfTU1SX0gKQEAgLTEyOSw2ICsxMjksMjMgQEAKICNkZWZpbmUgU0hfRVZFTlRfT0NDVVJSRURfSUlfSU5UMV9TSEZUICAgICAgICAgICAzMAogI2RlZmluZSBTSF9FVkVOVF9PQ0NVUlJFRF9JSV9JTlQxX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDA0MDAwMDAwMAogCisvKiAgIFNIMl9FVkVOVF9PQ0NVUlJFRF9FWFRJT19JTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBEZXNjcmlwdGlvbjogIFBlbmRpbmcgU0hVQiAyIEVYVCBJTyBJTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0gyX0VWRU5UX09DQ1VSUkVEX0VYVElPX0lOVDJfU0hGVCAgICAgICAzMworI2RlZmluZSBTSDJfRVZFTlRfT0NDVVJSRURfRVhUSU9fSU5UMl9NQVNLICAgICAgIDB4MDAwMDAwMDIwMDAwMDAwMAorCisvKiAgIFNIMl9FVkVOVF9PQ0NVUlJFRF9FWFRJT19JTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBEZXNjcmlwdGlvbjogIFBlbmRpbmcgU0hVQiAyIEVYVCBJTyBJTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0gyX0VWRU5UX09DQ1VSUkVEX0VYVElPX0lOVDNfU0hGVCAgICAgICAzNAorI2RlZmluZSBTSDJfRVZFTlRfT0NDVVJSRURfRVhUSU9fSU5UM19NQVNLICAgICAgIDB4MDAwMDAwMDQwMDAwMDAwMAorCisjZGVmaW5lIFNIX0FMTF9JTlRfTUFTSyBcCisJKFNIX0VWRU5UX09DQ1VSUkVEX1VBUlRfSU5UX01BU0sgfCBTSF9FVkVOVF9PQ0NVUlJFRF9JUElfSU5UX01BU0sgfCBcCisJIFNIX0VWRU5UX09DQ1VSUkVEX0lJX0lOVDBfTUFTSyB8IFNIX0VWRU5UX09DQ1VSUkVEX0lJX0lOVDFfTUFTSyB8IFwKKwkgU0hfRVZFTlRfT0NDVVJSRURfSUlfSU5UMV9NQVNLIHwgU0gyX0VWRU5UX09DQ1VSUkVEX0VYVElPX0lOVDJfTUFTSyB8IFwKKwkgU0gyX0VWRU5UX09DQ1VSUkVEX0VYVElPX0lOVDNfTUFTSykKKworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgTEVEUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC0zNjgsNiArMzg1LDE3IEBACiAjZGVmaW5lIFNIX0VWRU5UX09DQ1VSUkVEX1JUQzNfSU5UX01BU0sgICAgICAgICAgMHgwMDAwMDAwMDA0MDAwMDAwCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgIlNIX0lQSV9BQ0NFU1MiICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgIENQVSBpbnRlcnJ1cHQgQWNjZXNzIFBlcm1pc3Npb24gQml0cyAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgU0gxX0lQSV9BQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxMTAwNjA0ODAKKyNkZWZpbmUgU0gyX0lQSV9BQ0NFU1MwICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMTAwNjBjMDAKKyNkZWZpbmUgU0gyX0lQSV9BQ0NFU1MxICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMTAwNjBjODAKKyNkZWZpbmUgU0gyX0lQSV9BQ0NFU1MyICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMTAwNjBkMDAKKyNkZWZpbmUgU0gyX0lQSV9BQ0NFU1MzICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMTAwNjBkODAKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgIlNIX0lOVF9DTVBCIiAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgIFJUQyBDb21wYXJlIFZhbHVlIGZvciBQcm9jZXNzb3IgQiAgICAgICAgICAgICAgICAgICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KQEAgLTQxMiw2ICs0NDAsMTkgQEAKICNkZWZpbmUgU0hfSU5UX0NNUERfUkVBTF9USU1FX0NNUERfU0hGVCAgICAgICAgICAwCiAjZGVmaW5lIFNIX0lOVF9DTVBEX1JFQUxfVElNRV9DTVBEX01BU0sgICAgICAgICAgMHgwMDdmZmZmZmZmZmZmZmZmCiAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICBSZWdpc3RlciAiU0hfTURfRFFMUF9NTVJfRElSX1BSSVZFQzAiICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgcHJpdmlsZWdlIHZlY3RvciBmb3IgYWNjPTAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgU0gxX01EX0RRTFBfTU1SX0RJUl9QUklWRUMwICAgICAgICAgICAgICAweDAwMDAwMDAxMDAwMzAzMDAKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgIFJlZ2lzdGVyICJTSF9NRF9EUVJQX01NUl9ESVJfUFJJVkVDMCIgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICBwcml2aWxlZ2UgdmVjdG9yIGZvciBhY2M9MCAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2RlZmluZSBTSDFfTURfRFFSUF9NTVJfRElSX1BSSVZFQzAgICAgICAgICAgICAgIDB4MDAwMDAwMDEwMDA1MDMwMAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogU29tZSBNTVJzIGFyZSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIChvciBjbG9zZSBlbm91Z2gpIG9uIGJvdGggU0hVQjEgKi8KQEAgLTQzOCw0ICs0NzksMjIgQEAKICNkZWZpbmUgU0hfSU5UX0NNUEMJCXNodWJtbXIoU0gsIElOVF9DTVBDKQogI2RlZmluZSBTSF9JTlRfQ01QRAkJc2h1Ym1tcihTSCwgSU5UX0NNUEQpCiAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyICJTSDJfQlRfRU5HX0NTUl8wIiAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgIEVuZ2luZSAwIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgU0gyX0JUX0VOR19DU1JfMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMzAwNDAwMDAKKyNkZWZpbmUgU0gyX0JUX0VOR19TUkNfQUREUl8wICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMzAwNDAwODAKKyNkZWZpbmUgU0gyX0JUX0VOR19ERVNUX0FERFJfMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMzAwNDAxMDAKKyNkZWZpbmUgU0gyX0JUX0VOR19OT1RJRl9BRERSXzAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMzAwNDAxODAKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICBCVEUgaW50ZXJmYWNlcyAxLTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjZGVmaW5lIFNIMl9CVF9FTkdfQ1NSXzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDMwMDUwMDAwCisjZGVmaW5lIFNIMl9CVF9FTkdfQ1NSXzIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDMwMDYwMDAwCisjZGVmaW5lIFNIMl9CVF9FTkdfQ1NSXzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDMwMDcwMDAwCisKICNlbmRpZiAvKiBfQVNNX0lBNjRfU05fU0hVQl9NTVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9zaHViaW8uaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc2h1YmlvLmgKaW5kZXggZmJkODgwZS4uODMxYjcyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9zaHViaW8uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NodWJpby5oCkBAIC0zLDI5MiArMywyODcgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NywgMjAwMC0yMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMTk5MiAtIDE5OTcsIDIwMDAtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KIAogI2lmbmRlZiBfQVNNX0lBNjRfU05fU0hVQklPX0gKICNkZWZpbmUgX0FTTV9JQTY0X1NOX1NIVUJJT19ICiAKLSNkZWZpbmUgSFVCX1dJREdFVF9JRF9NQVggMHhmCi0jZGVmaW5lIElJT19OVU1fSVRURVMgICA3Ci0jZGVmaW5lIEhVQl9OVU1fQklHX1dJTkRPVyAgICAgIChJSU9fTlVNX0lUVEVTIC0gMSkKKyNkZWZpbmUgSFVCX1dJREdFVF9JRF9NQVgJMHhmCisjZGVmaW5lIElJT19OVU1fSVRURVMJCTcKKyNkZWZpbmUgSFVCX05VTV9CSUdfV0lORE9XCShJSU9fTlVNX0lUVEVTIC0gMSkKIAotI2RlZmluZSAgICBJSU9fV0lEICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAgICAgLyogQ3Jvc3N0YWxrIFdpZGdldCBJZGVudGlmaWNhdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyByZWdpc3RlciBpcyBhbHNvIGFjY2Vzc2libGUgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQ3Jvc3N0YWxrIGF0IGFkZHJlc3MgMHgwLiAgKi8KLSNkZWZpbmUgICAgSUlPX1dTVEFUICAgICAgICAgICAgICAgICAweDAwNDAwMDA4ICAgIC8qIENyb3NzdGFsayBXaWRnZXQgU3RhdHVzICovCi0jZGVmaW5lICAgIElJT19XQ1IgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAyMCAgICAvKiBDcm9zc3RhbGsgV2lkZ2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgSUlPX0lMQVBSICAgICAgICAgICAgICAgICAweDAwNDAwMTAwICAgIC8qIElPIExvY2FsIEFjY2VzcyBQcm90ZWN0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgIElJT19JTEFQTyAgICAgICAgICAgICAgICAgMHgwMDQwMDEwOCAgICAvKiBJTyBMb2NhbCBBY2Nlc3MgUHJvdGVjdGlvbiBPdmVycmlkZSAqLwotI2RlZmluZSAgICBJSU9fSU9XQSAgICAgICAgICAgICAgICAgIDB4MDA0MDAxMTAgICAgLyogSU8gT3V0Ym91bmQgV2lkZ2V0IEFjY2VzcyAqLwotI2RlZmluZSAgICBJSU9fSUlXQSAgICAgICAgICAgICAgICAgIDB4MDA0MDAxMTggICAgLyogSU8gSW5ib3VuZCBXaWRnZXQgQWNjZXNzICovCi0jZGVmaW5lICAgIElJT19JSURFTSAgICAgICAgICAgICAgICAgMHgwMDQwMDEyMCAgICAvKiBJTyBJbmJvdW5kIERldmljZSBFcnJvciBNYXNrICovCi0jZGVmaW5lICAgIElJT19JTENTUiAgICAgICAgICAgICAgICAgMHgwMDQwMDEyOCAgICAvKiBJTyBMTFAgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgIElJT19JTExSICAgICAgICAgICAgICAgICAgMHgwMDQwMDEzMCAgICAvKiBJTyBMTFAgTG9nIFJlZ2lzdGVyICAgICovCi0jZGVmaW5lICAgIElJT19JSURTUiAgICAgICAgICAgICAgICAgMHgwMDQwMDEzOCAgICAvKiBJTyBJbnRlcnJ1cHQgRGVzdGluYXRpb24gKi8KKyNkZWZpbmUJCUlJT19XSUQJCQkweDAwNDAwMDAwCS8qIENyb3NzdGFsayBXaWRnZXQgSWRlbnRpZmljYXRpb24gKi8KKwkJCQkJCQkvKiBUaGlzIHJlZ2lzdGVyIGlzIGFsc28gYWNjZXNzaWJsZSBmcm9tCisJCQkJCQkJICogQ3Jvc3N0YWxrIGF0IGFkZHJlc3MgMHgwLiAgKi8KKyNkZWZpbmUJCUlJT19XU1RBVAkJMHgwMDQwMDAwOAkvKiBDcm9zc3RhbGsgV2lkZ2V0IFN0YXR1cyAqLworI2RlZmluZQkJSUlPX1dDUgkJCTB4MDA0MDAwMjAJLyogQ3Jvc3N0YWxrIFdpZGdldCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCQlJSU9fSUxBUFIJCTB4MDA0MDAxMDAJLyogSU8gTG9jYWwgQWNjZXNzIFByb3RlY3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUlJT19JTEFQTwkJMHgwMDQwMDEwOAkvKiBJTyBMb2NhbCBBY2Nlc3MgUHJvdGVjdGlvbiBPdmVycmlkZSAqLworI2RlZmluZQkJSUlPX0lPV0EJCTB4MDA0MDAxMTAJLyogSU8gT3V0Ym91bmQgV2lkZ2V0IEFjY2VzcyAqLworI2RlZmluZQkJSUlPX0lJV0EJCTB4MDA0MDAxMTgJLyogSU8gSW5ib3VuZCBXaWRnZXQgQWNjZXNzICovCisjZGVmaW5lCQlJSU9fSUlERU0JCTB4MDA0MDAxMjAJLyogSU8gSW5ib3VuZCBEZXZpY2UgRXJyb3IgTWFzayAqLworI2RlZmluZQkJSUlPX0lMQ1NSCQkweDAwNDAwMTI4CS8qIElPIExMUCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUlJT19JTExSCQkweDAwNDAwMTMwCS8qIElPIExMUCBMb2cgUmVnaXN0ZXIgICAgKi8KKyNkZWZpbmUJCUlJT19JSURTUgkJMHgwMDQwMDEzOAkvKiBJTyBJbnRlcnJ1cHQgRGVzdGluYXRpb24gKi8KIAotI2RlZmluZSAgICBJSU9fSUdGWDAgICAgICAgICAgICAgICAgIDB4MDA0MDAxNDAgICAgLyogSU8gR3JhcGhpY3MgTm9kZS1XaWRnZXQgTWFwIDAgKi8KLSNkZWZpbmUgICAgSUlPX0lHRlgxICAgICAgICAgICAgICAgICAweDAwNDAwMTQ4ICAgIC8qIElPIEdyYXBoaWNzIE5vZGUtV2lkZ2V0IE1hcCAxICovCisjZGVmaW5lCQlJSU9fSUdGWDAJCTB4MDA0MDAxNDAJLyogSU8gR3JhcGhpY3MgTm9kZS1XaWRnZXQgTWFwIDAgKi8KKyNkZWZpbmUJCUlJT19JR0ZYMQkJMHgwMDQwMDE0OAkvKiBJTyBHcmFwaGljcyBOb2RlLVdpZGdldCBNYXAgMSAqLwogCi0jZGVmaW5lICAgIElJT19JU0NSMCAgICAgICAgICAgICAgICAgMHgwMDQwMDE1MCAgICAvKiBJTyBTY3JhdGNoIFJlZ2lzdGVyIDAgKi8KLSNkZWZpbmUgICAgSUlPX0lTQ1IxICAgICAgICAgICAgICAgICAweDAwNDAwMTU4ICAgIC8qIElPIFNjcmF0Y2ggUmVnaXN0ZXIgMSAqLworI2RlZmluZQkJSUlPX0lTQ1IwCQkweDAwNDAwMTUwCS8qIElPIFNjcmF0Y2ggUmVnaXN0ZXIgMCAqLworI2RlZmluZQkJSUlPX0lTQ1IxCQkweDAwNDAwMTU4CS8qIElPIFNjcmF0Y2ggUmVnaXN0ZXIgMSAqLwogCi0jZGVmaW5lICAgIElJT19JVFRFMSAgICAgICAgICAgICAgICAgMHgwMDQwMDE2MCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSAxICovCi0jZGVmaW5lICAgIElJT19JVFRFMiAgICAgICAgICAgICAgICAgMHgwMDQwMDE2OCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSAyICovCi0jZGVmaW5lICAgIElJT19JVFRFMyAgICAgICAgICAgICAgICAgMHgwMDQwMDE3MCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSAzICovCi0jZGVmaW5lICAgIElJT19JVFRFNCAgICAgICAgICAgICAgICAgMHgwMDQwMDE3OCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSA0ICovCi0jZGVmaW5lICAgIElJT19JVFRFNSAgICAgICAgICAgICAgICAgMHgwMDQwMDE4MCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSA1ICovCi0jZGVmaW5lICAgIElJT19JVFRFNiAgICAgICAgICAgICAgICAgMHgwMDQwMDE4OCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSA2ICovCi0jZGVmaW5lICAgIElJT19JVFRFNyAgICAgICAgICAgICAgICAgMHgwMDQwMDE5MCAgICAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSA3ICovCisjZGVmaW5lCQlJSU9fSVRURTEJCTB4MDA0MDAxNjAJLyogSU8gVHJhbnNsYXRpb24gVGFibGUgRW50cnkgMSAqLworI2RlZmluZQkJSUlPX0lUVEUyCQkweDAwNDAwMTY4CS8qIElPIFRyYW5zbGF0aW9uIFRhYmxlIEVudHJ5IDIgKi8KKyNkZWZpbmUJCUlJT19JVFRFMwkJMHgwMDQwMDE3MAkvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSAzICovCisjZGVmaW5lCQlJSU9fSVRURTQJCTB4MDA0MDAxNzgJLyogSU8gVHJhbnNsYXRpb24gVGFibGUgRW50cnkgNCAqLworI2RlZmluZQkJSUlPX0lUVEU1CQkweDAwNDAwMTgwCS8qIElPIFRyYW5zbGF0aW9uIFRhYmxlIEVudHJ5IDUgKi8KKyNkZWZpbmUJCUlJT19JVFRFNgkJMHgwMDQwMDE4OAkvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyeSA2ICovCisjZGVmaW5lCQlJSU9fSVRURTcJCTB4MDA0MDAxOTAJLyogSU8gVHJhbnNsYXRpb24gVGFibGUgRW50cnkgNyAqLwogCi0jZGVmaW5lICAgIElJT19JUFJCMCAgICAgICAgICAgICAgICAgMHgwMDQwMDE5OCAgICAvKiBJTyBQUkIgRW50cnkgMCAgICAgICAgICovCi0jZGVmaW5lICAgIElJT19JUFJCOCAgICAgICAgICAgICAgICAgMHgwMDQwMDFBMCAgICAvKiBJTyBQUkIgRW50cnkgOCAgICAgICAgICovCi0jZGVmaW5lICAgIElJT19JUFJCOSAgICAgICAgICAgICAgICAgMHgwMDQwMDFBOCAgICAvKiBJTyBQUkIgRW50cnkgOSAgICAgICAgICovCi0jZGVmaW5lICAgIElJT19JUFJCQSAgICAgICAgICAgICAgICAgMHgwMDQwMDFCMCAgICAvKiBJTyBQUkIgRW50cnkgQSAgICAgICAgICovCi0jZGVmaW5lICAgIElJT19JUFJCQiAgICAgICAgICAgICAgICAgMHgwMDQwMDFCOCAgICAvKiBJTyBQUkIgRW50cnkgQiAgICAgICAgICovCi0jZGVmaW5lICAgIElJT19JUFJCQyAgICAgICAgICAgICAgICAgMHgwMDQwMDFDMCAgICAvKiBJTyBQUkIgRW50cnkgQyAgICAgICAgICovCi0jZGVmaW5lICAgIElJT19JUFJCRCAgICAgICAgICAgICAgICAgMHgwMDQwMDFDOCAgICAvKiBJTyBQUkIgRW50cnkgRCAgICAgICAgICovCi0jZGVmaW5lICAgIElJT19JUFJCRSAgICAgICAgICAgICAgICAgMHgwMDQwMDFEMCAgICAvKiBJTyBQUkIgRW50cnkgRSAgICAgICAgICovCi0jZGVmaW5lICAgIElJT19JUFJCRiAgICAgICAgICAgICAgICAgMHgwMDQwMDFEOCAgICAvKiBJTyBQUkIgRW50cnkgRiAgICAgICAgICovCisjZGVmaW5lCQlJSU9fSVBSQjAJCTB4MDA0MDAxOTgJLyogSU8gUFJCIEVudHJ5IDAgICAqLworI2RlZmluZQkJSUlPX0lQUkI4CQkweDAwNDAwMUEwCS8qIElPIFBSQiBFbnRyeSA4ICAgKi8KKyNkZWZpbmUJCUlJT19JUFJCOQkJMHgwMDQwMDFBOAkvKiBJTyBQUkIgRW50cnkgOSAgICovCisjZGVmaW5lCQlJSU9fSVBSQkEJCTB4MDA0MDAxQjAJLyogSU8gUFJCIEVudHJ5IEEgICAqLworI2RlZmluZQkJSUlPX0lQUkJCCQkweDAwNDAwMUI4CS8qIElPIFBSQiBFbnRyeSBCICAgKi8KKyNkZWZpbmUJCUlJT19JUFJCQwkJMHgwMDQwMDFDMAkvKiBJTyBQUkIgRW50cnkgQyAgICovCisjZGVmaW5lCQlJSU9fSVBSQkQJCTB4MDA0MDAxQzgJLyogSU8gUFJCIEVudHJ5IEQgICAqLworI2RlZmluZQkJSUlPX0lQUkJFCQkweDAwNDAwMUQwCS8qIElPIFBSQiBFbnRyeSBFICAgKi8KKyNkZWZpbmUJCUlJT19JUFJCRgkJMHgwMDQwMDFEOAkvKiBJTyBQUkIgRW50cnkgRiAgICovCiAKLSNkZWZpbmUgICAgSUlPX0lYQ0MgICAgICAgICAgICAgICAgICAweDAwNDAwMUUwICAgIC8qIElPIENyb3NzdGFsayBDcmVkaXQgQ291bnQgVGltZW91dCAqLwotI2RlZmluZSAgICBJSU9fSU1FTSAgICAgICAgICAgICAgICAgIDB4MDA0MDAxRTggICAgLyogSU8gTWlzY2VsbGFuZW91cyBFcnJvciBNYXNrICovCi0jZGVmaW5lICAgIElJT19JWFRUICAgICAgICAgICAgICAgICAgMHgwMDQwMDFGMCAgICAvKiBJTyBDcm9zc3RhbGsgVGltZW91dCBUaHJlc2hvbGQgKi8KLSNkZWZpbmUgICAgSUlPX0lFQ0xSICAgICAgICAgICAgICAgICAweDAwNDAwMUY4ICAgIC8qIElPIEVycm9yIENsZWFyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgIElJT19JQkNSICAgICAgICAgICAgICAgICAgMHgwMDQwMDIwMCAgICAvKiBJTyBCVEUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQkJSUlPX0lYQ0MJCTB4MDA0MDAxRTAJLyogSU8gQ3Jvc3N0YWxrIENyZWRpdCBDb3VudCBUaW1lb3V0ICovCisjZGVmaW5lCQlJSU9fSU1FTQkJMHgwMDQwMDFFOAkvKiBJTyBNaXNjZWxsYW5lb3VzIEVycm9yIE1hc2sgKi8KKyNkZWZpbmUJCUlJT19JWFRUCQkweDAwNDAwMUYwCS8qIElPIENyb3NzdGFsayBUaW1lb3V0IFRocmVzaG9sZCAqLworI2RlZmluZQkJSUlPX0lFQ0xSCQkweDAwNDAwMUY4CS8qIElPIEVycm9yIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lCQlJSU9fSUJDUgkJMHgwMDQwMDIwMAkvKiBJTyBCVEUgQ29udHJvbCBSZWdpc3RlciAqLwogCi0jZGVmaW5lICAgIElJT19JWFNNICAgICAgICAgICAgICAgICAgMHgwMDQwMDIwOCAgICAvKiBJTyBDcm9zc3RhbGsgU3B1cmlvdXMgTWVzc2FnZSAqLwotI2RlZmluZSAgICBJSU9fSVhTUyAgICAgICAgICAgICAgICAgIDB4MDA0MDAyMTAgICAgLyogSU8gQ3Jvc3N0YWxrIFNwdXJpb3VzIFNpZGViYW5kICovCisjZGVmaW5lCQlJSU9fSVhTTQkJMHgwMDQwMDIwOAkvKiBJTyBDcm9zc3RhbGsgU3B1cmlvdXMgTWVzc2FnZSAqLworI2RlZmluZQkJSUlPX0lYU1MJCTB4MDA0MDAyMTAJLyogSU8gQ3Jvc3N0YWxrIFNwdXJpb3VzIFNpZGViYW5kICovCiAKLSNkZWZpbmUgICAgSUlPX0lMQ1QgICAgICAgICAgICAgICAgICAweDAwNDAwMjE4ICAgIC8qIElPIExMUCBDaGFubmVsIFRlc3QgICAgKi8KKyNkZWZpbmUJCUlJT19JTENUCQkweDAwNDAwMjE4CS8qIElPIExMUCBDaGFubmVsIFRlc3QgICAgKi8KIAotI2RlZmluZSAgICBJSU9fSUlFUEgxICAgICAgICAgICAgICAgIDB4MDA0MDAyMjAgICAgLyogSU8gSW5jb21pbmcgRXJyb3IgUGFja2V0IEhlYWRlciwgUGFydCAxICovCi0jZGVmaW5lICAgIElJT19JSUVQSDIgICAgICAgICAgICAgICAgMHgwMDQwMDIyOCAgICAvKiBJTyBJbmNvbWluZyBFcnJvciBQYWNrZXQgSGVhZGVyLCBQYXJ0IDIgKi8KKyNkZWZpbmUJCUlJT19JSUVQSDEgCQkweDAwNDAwMjIwCS8qIElPIEluY29taW5nIEVycm9yIFBhY2tldCBIZWFkZXIsIFBhcnQgMSAqLworI2RlZmluZQkJSUlPX0lJRVBIMiAJCTB4MDA0MDAyMjgJLyogSU8gSW5jb21pbmcgRXJyb3IgUGFja2V0IEhlYWRlciwgUGFydCAyICovCiAKKyNkZWZpbmUJCUlJT19JU0xBUFIgCQkweDAwNDAwMjMwCS8qIElPIFNYQiBMb2NhbCBBY2Nlc3MgUHJvdGVjdGlvbiBSZWdzdGVyICovCisjZGVmaW5lCQlJSU9fSVNMQVBPIAkJMHgwMDQwMDIzOAkvKiBJTyBTWEIgTG9jYWwgQWNjZXNzIFByb3RlY3Rpb24gT3ZlcnJpZGUgKi8KIAotI2RlZmluZSAgICBJSU9fSVNMQVBSICAgICAgICAgICAgICAgIDB4MDA0MDAyMzAgICAgLyogSU8gU1hCIExvY2FsIEFjY2VzcyBQcm90ZWN0aW9uIFJlZ3N0ZXIgKi8KLSNkZWZpbmUgICAgSUlPX0lTTEFQTyAgICAgICAgICAgICAgICAweDAwNDAwMjM4ICAgIC8qIElPIFNYQiBMb2NhbCBBY2Nlc3MgUHJvdGVjdGlvbiBPdmVycmlkZSAqLworI2RlZmluZQkJSUlPX0lXSQkJCTB4MDA0MDAyNDAJLyogSU8gV3JhcHBlciBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUlJT19JV0VMCQkweDAwNDAwMjQ4CS8qIElPIFdyYXBwZXIgRXJyb3IgTG9nIFJlZ2lzdGVyICovCisjZGVmaW5lCQlJSU9fSVdDCQkJMHgwMDQwMDI1MAkvKiBJTyBXcmFwcGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUlJT19JV1MJCQkweDAwNDAwMjU4CS8qIElPIFdyYXBwZXIgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCQlJSU9fSVdFSU0JCTB4MDA0MDAyNjAJLyogSU8gV3JhcHBlciBFcnJvciBJbnRlcnJ1cHQgTWFza2luZyBSZWdpc3RlciAqLwogCi0jZGVmaW5lICAgIElJT19JV0kgICAgICAgICAgICAgICAgICAgMHgwMDQwMDI0MCAgICAvKiBJTyBXcmFwcGVyIEludGVycnVwdCBSZWdpc3RlciAqLwotI2RlZmluZSAgICBJSU9fSVdFTCAgICAgICAgICAgICAgICAgIDB4MDA0MDAyNDggICAgLyogSU8gV3JhcHBlciBFcnJvciBMb2cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgSUlPX0lXQyAgICAgICAgICAgICAgICAgICAweDAwNDAwMjUwICAgIC8qIElPIFdyYXBwZXIgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICBJSU9fSVdTICAgICAgICAgICAgICAgICAgIDB4MDA0MDAyNTggICAgLyogSU8gV3JhcHBlciBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgSUlPX0lXRUlNICAgICAgICAgICAgICAgICAweDAwNDAwMjYwICAgIC8qIElPIFdyYXBwZXIgRXJyb3IgSW50ZXJydXB0IE1hc2tpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUlJT19JUENBCQkweDAwNDAwMzAwCS8qIElPIFBSQiBDb3VudGVyIEFkanVzdCAqLwogCi0jZGVmaW5lICAgIElJT19JUENBICAgICAgICAgICAgICAgICAgMHgwMDQwMDMwMCAgICAvKiBJTyBQUkIgQ291bnRlciBBZGp1c3QgKi8KKyNkZWZpbmUJCUlJT19JUFJURTBfQQkJMHgwMDQwMDMwOAkvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDAsIFBhcnQgQSAqLworI2RlZmluZQkJSUlPX0lQUlRFMV9BCQkweDAwNDAwMzEwCS8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgMSwgUGFydCBBICovCisjZGVmaW5lCQlJSU9fSVBSVEUyX0EJCTB4MDA0MDAzMTgJLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSAyLCBQYXJ0IEEgKi8KKyNkZWZpbmUJCUlJT19JUFJURTNfQQkJMHgwMDQwMDMyMAkvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDMsIFBhcnQgQSAqLworI2RlZmluZQkJSUlPX0lQUlRFNF9BCQkweDAwNDAwMzI4CS8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgNCwgUGFydCBBICovCisjZGVmaW5lCQlJSU9fSVBSVEU1X0EJCTB4MDA0MDAzMzAJLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSA1LCBQYXJ0IEEgKi8KKyNkZWZpbmUJCUlJT19JUFJURTZfQQkJMHgwMDQwMDMzOAkvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDYsIFBhcnQgQSAqLworI2RlZmluZQkJSUlPX0lQUlRFN19BCQkweDAwNDAwMzQwCS8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgNywgUGFydCBBICovCiAKLSNkZWZpbmUgICAgSUlPX0lQUlRFMF9BICAgICAgICAgICAgICAweDAwNDAwMzA4ICAgIC8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgMCwgUGFydCBBICovCi0jZGVmaW5lICAgIElJT19JUFJURTFfQSAgICAgICAgICAgICAgMHgwMDQwMDMxMCAgICAvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDEsIFBhcnQgQSAqLwotI2RlZmluZSAgICBJSU9fSVBSVEUyX0EgICAgICAgICAgICAgIDB4MDA0MDAzMTggICAgLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSAyLCBQYXJ0IEEgKi8KLSNkZWZpbmUgICAgSUlPX0lQUlRFM19BICAgICAgICAgICAgICAgMHgwMDQwMDMyMCAgICAvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDMsIFBhcnQgQSAqLwotI2RlZmluZSAgICBJSU9fSVBSVEU0X0EgICAgICAgICAgICAgICAweDAwNDAwMzI4ICAgIC8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgNCwgUGFydCBBICovCi0jZGVmaW5lICAgIElJT19JUFJURTVfQSAgICAgICAgICAgICAgIDB4MDA0MDAzMzAgICAgLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSA1LCBQYXJ0IEEgKi8KLSNkZWZpbmUgICAgSUlPX0lQUlRFNl9BICAgICAgICAgICAgICAgMHgwMDQwMDMzOCAgICAvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDYsIFBhcnQgQSAqLwotI2RlZmluZSAgICBJSU9fSVBSVEU3X0EgICAgICAgICAgICAgICAweDAwNDAwMzQwICAgIC8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgNywgUGFydCBBICovCisjZGVmaW5lCQlJSU9fSVBSVEUwX0IJCTB4MDA0MDAzNDgJLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSAwLCBQYXJ0IEIgKi8KKyNkZWZpbmUJCUlJT19JUFJURTFfQgkJMHgwMDQwMDM1MAkvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDEsIFBhcnQgQiAqLworI2RlZmluZQkJSUlPX0lQUlRFMl9CCQkweDAwNDAwMzU4CS8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgMiwgUGFydCBCICovCisjZGVmaW5lCQlJSU9fSVBSVEUzX0IJCTB4MDA0MDAzNjAJLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSAzLCBQYXJ0IEIgKi8KKyNkZWZpbmUJCUlJT19JUFJURTRfQgkJMHgwMDQwMDM2OAkvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDQsIFBhcnQgQiAqLworI2RlZmluZQkJSUlPX0lQUlRFNV9CCQkweDAwNDAwMzcwCS8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgNSwgUGFydCBCICovCisjZGVmaW5lCQlJSU9fSVBSVEU2X0IJCTB4MDA0MDAzNzgJLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSA2LCBQYXJ0IEIgKi8KKyNkZWZpbmUJCUlJT19JUFJURTdfQgkJMHgwMDQwMDM4MAkvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDcsIFBhcnQgQiAqLwogCi0jZGVmaW5lICAgIElJT19JUFJURTBfQiAgICAgICAgICAgICAgMHgwMDQwMDM0OCAgICAvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDAsIFBhcnQgQiAqLwotI2RlZmluZSAgICBJSU9fSVBSVEUxX0IgICAgICAgICAgICAgIDB4MDA0MDAzNTAgICAgLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSAxLCBQYXJ0IEIgKi8KLSNkZWZpbmUgICAgSUlPX0lQUlRFMl9CICAgICAgICAgICAgICAweDAwNDAwMzU4ICAgIC8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgMiwgUGFydCBCICovCi0jZGVmaW5lICAgIElJT19JUFJURTNfQiAgICAgICAgICAgICAgIDB4MDA0MDAzNjAgICAgLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSAzLCBQYXJ0IEIgKi8KLSNkZWZpbmUgICAgSUlPX0lQUlRFNF9CICAgICAgICAgICAgICAgMHgwMDQwMDM2OCAgICAvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDQsIFBhcnQgQiAqLwotI2RlZmluZSAgICBJSU9fSVBSVEU1X0IgICAgICAgICAgICAgICAweDAwNDAwMzcwICAgIC8qIElPIFBJTyBSZWFkIEFkZHJlc3MgVGFibGUgRW50cnkgNSwgUGFydCBCICovCi0jZGVmaW5lICAgIElJT19JUFJURTZfQiAgICAgICAgICAgICAgIDB4MDA0MDAzNzggICAgLyogSU8gUElPIFJlYWQgQWRkcmVzcyBUYWJsZSBFbnRyeSA2LCBQYXJ0IEIgKi8KLSNkZWZpbmUgICAgSUlPX0lQUlRFN19CICAgICAgICAgICAgICAgMHgwMDQwMDM4MCAgICAvKiBJTyBQSU8gUmVhZCBBZGRyZXNzIFRhYmxlIEVudHJ5IDcsIFBhcnQgQiAqLworI2RlZmluZQkJSUlPX0lQRFIJCTB4MDA0MDAzODgJLyogSU8gUElPIERlYWxsb2NhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQkJSUlPX0lDRFIJCTB4MDA0MDAzOTAJLyogSU8gQ1JCIEVudHJ5IERlYWxsb2NhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQkJSUlPX0lGRFIJCTB4MDA0MDAzOTgJLyogSU8gSU9RIEZJRk8gRGVwdGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUlJT19JSUFQCQkweDAwNDAwM0EwCS8qIElPIElJUSBBcmJpdHJhdGlvbiBQYXJhbWV0ZXJzICovCisjZGVmaW5lCQlJSU9fSUNNUgkJMHgwMDQwMDNBOAkvKiBJTyBDUkIgTWFuYWdlbWVudCBSZWdpc3RlciAqLworI2RlZmluZQkJSUlPX0lDQ1IJCTB4MDA0MDAzQjAJLyogSU8gQ1JCIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUlJT19JQ1RPCQkweDAwNDAwM0I4CS8qIElPIENSQiBUaW1lb3V0ICAgKi8KKyNkZWZpbmUJCUlJT19JQ1RQCQkweDAwNDAwM0MwCS8qIElPIENSQiBUaW1lb3V0IFByZXNjYWxhciAqLwogCi0jZGVmaW5lICAgIElJT19JUERSICAgICAgICAgICAgICAgICAgMHgwMDQwMDM4OCAgICAvKiBJTyBQSU8gRGVhbGxvY2F0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgIElJT19JQ0RSICAgICAgICAgICAgICAgICAgMHgwMDQwMDM5MCAgICAvKiBJTyBDUkIgRW50cnkgRGVhbGxvY2F0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgIElJT19JRkRSICAgICAgICAgICAgICAgICAgMHgwMDQwMDM5OCAgICAvKiBJTyBJT1EgRklGTyBEZXB0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICBJSU9fSUlBUCAgICAgICAgICAgICAgICAgIDB4MDA0MDAzQTAgICAgLyogSU8gSUlRIEFyYml0cmF0aW9uIFBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgICAgSUlPX0lDTVIgICAgICAgICAgICAgICAgICAweDAwNDAwM0E4ICAgIC8qIElPIENSQiBNYW5hZ2VtZW50IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgIElJT19JQ0NSICAgICAgICAgICAgICAgICAgMHgwMDQwMDNCMCAgICAvKiBJTyBDUkIgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICBJSU9fSUNUTyAgICAgICAgICAgICAgICAgIDB4MDA0MDAzQjggICAgLyogSU8gQ1JCIFRpbWVvdXQgICAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNUUCAgICAgICAgICAgICAgICAgIDB4MDA0MDAzQzAgICAgLyogSU8gQ1JCIFRpbWVvdXQgUHJlc2NhbGFyICovCisjZGVmaW5lCQlJSU9fSUNSQjBfQQkJMHgwMDQwMDQwMAkvKiBJTyBDUkIgRW50cnkgMF9BICovCisjZGVmaW5lCQlJSU9fSUNSQjBfQgkJMHgwMDQwMDQwOAkvKiBJTyBDUkIgRW50cnkgMF9CICovCisjZGVmaW5lCQlJSU9fSUNSQjBfQwkJMHgwMDQwMDQxMAkvKiBJTyBDUkIgRW50cnkgMF9DICovCisjZGVmaW5lCQlJSU9fSUNSQjBfRAkJMHgwMDQwMDQxOAkvKiBJTyBDUkIgRW50cnkgMF9EICovCisjZGVmaW5lCQlJSU9fSUNSQjBfRQkJMHgwMDQwMDQyMAkvKiBJTyBDUkIgRW50cnkgMF9FICovCiAKLSNkZWZpbmUgICAgSUlPX0lDUkIwX0EgICAgICAgICAgICAgICAweDAwNDAwNDAwICAgIC8qIElPIENSQiBFbnRyeSAwX0EgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkIwX0IgICAgICAgICAgICAgICAweDAwNDAwNDA4ICAgIC8qIElPIENSQiBFbnRyeSAwX0IgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkIwX0MgICAgICAgICAgICAgICAweDAwNDAwNDEwICAgIC8qIElPIENSQiBFbnRyeSAwX0MgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkIwX0QgICAgICAgICAgICAgICAweDAwNDAwNDE4ICAgIC8qIElPIENSQiBFbnRyeSAwX0QgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkIwX0UgICAgICAgICAgICAgICAweDAwNDAwNDIwICAgIC8qIElPIENSQiBFbnRyeSAwX0UgICAgICAgKi8KKyNkZWZpbmUJCUlJT19JQ1JCMV9BCQkweDAwNDAwNDMwCS8qIElPIENSQiBFbnRyeSAxX0EgKi8KKyNkZWZpbmUJCUlJT19JQ1JCMV9CCQkweDAwNDAwNDM4CS8qIElPIENSQiBFbnRyeSAxX0IgKi8KKyNkZWZpbmUJCUlJT19JQ1JCMV9DCQkweDAwNDAwNDQwCS8qIElPIENSQiBFbnRyeSAxX0MgKi8KKyNkZWZpbmUJCUlJT19JQ1JCMV9ECQkweDAwNDAwNDQ4CS8qIElPIENSQiBFbnRyeSAxX0QgKi8KKyNkZWZpbmUJCUlJT19JQ1JCMV9FCQkweDAwNDAwNDUwCS8qIElPIENSQiBFbnRyeSAxX0UgKi8KIAotI2RlZmluZSAgICBJSU9fSUNSQjFfQSAgICAgICAgICAgICAgIDB4MDA0MDA0MzAgICAgLyogSU8gQ1JCIEVudHJ5IDFfQSAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQjFfQiAgICAgICAgICAgICAgIDB4MDA0MDA0MzggICAgLyogSU8gQ1JCIEVudHJ5IDFfQiAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQjFfQyAgICAgICAgICAgICAgIDB4MDA0MDA0NDAgICAgLyogSU8gQ1JCIEVudHJ5IDFfQyAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQjFfRCAgICAgICAgICAgICAgIDB4MDA0MDA0NDggICAgLyogSU8gQ1JCIEVudHJ5IDFfRCAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQjFfRSAgICAgICAgICAgICAgIDB4MDA0MDA0NTAgICAgLyogSU8gQ1JCIEVudHJ5IDFfRSAgICAgICAqLworI2RlZmluZQkJSUlPX0lDUkIyX0EJCTB4MDA0MDA0NjAJLyogSU8gQ1JCIEVudHJ5IDJfQSAqLworI2RlZmluZQkJSUlPX0lDUkIyX0IJCTB4MDA0MDA0NjgJLyogSU8gQ1JCIEVudHJ5IDJfQiAqLworI2RlZmluZQkJSUlPX0lDUkIyX0MJCTB4MDA0MDA0NzAJLyogSU8gQ1JCIEVudHJ5IDJfQyAqLworI2RlZmluZQkJSUlPX0lDUkIyX0QJCTB4MDA0MDA0NzgJLyogSU8gQ1JCIEVudHJ5IDJfRCAqLworI2RlZmluZQkJSUlPX0lDUkIyX0UJCTB4MDA0MDA0ODAJLyogSU8gQ1JCIEVudHJ5IDJfRSAqLwogCi0jZGVmaW5lICAgIElJT19JQ1JCMl9BICAgICAgICAgICAgICAgMHgwMDQwMDQ2MCAgICAvKiBJTyBDUkIgRW50cnkgMl9BICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCMl9CICAgICAgICAgICAgICAgMHgwMDQwMDQ2OCAgICAvKiBJTyBDUkIgRW50cnkgMl9CICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCMl9DICAgICAgICAgICAgICAgMHgwMDQwMDQ3MCAgICAvKiBJTyBDUkIgRW50cnkgMl9DICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCMl9EICAgICAgICAgICAgICAgMHgwMDQwMDQ3OCAgICAvKiBJTyBDUkIgRW50cnkgMl9EICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCMl9FICAgICAgICAgICAgICAgMHgwMDQwMDQ4MCAgICAvKiBJTyBDUkIgRW50cnkgMl9FICAgICAgICovCisjZGVmaW5lCQlJSU9fSUNSQjNfQQkJMHgwMDQwMDQ5MAkvKiBJTyBDUkIgRW50cnkgM19BICovCisjZGVmaW5lCQlJSU9fSUNSQjNfQgkJMHgwMDQwMDQ5OAkvKiBJTyBDUkIgRW50cnkgM19CICovCisjZGVmaW5lCQlJSU9fSUNSQjNfQwkJMHgwMDQwMDRhMAkvKiBJTyBDUkIgRW50cnkgM19DICovCisjZGVmaW5lCQlJSU9fSUNSQjNfRAkJMHgwMDQwMDRhOAkvKiBJTyBDUkIgRW50cnkgM19EICovCisjZGVmaW5lCQlJSU9fSUNSQjNfRQkJMHgwMDQwMDRiMAkvKiBJTyBDUkIgRW50cnkgM19FICovCiAKLSNkZWZpbmUgICAgSUlPX0lDUkIzX0EgICAgICAgICAgICAgICAweDAwNDAwNDkwICAgIC8qIElPIENSQiBFbnRyeSAzX0EgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkIzX0IgICAgICAgICAgICAgICAweDAwNDAwNDk4ICAgIC8qIElPIENSQiBFbnRyeSAzX0IgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkIzX0MgICAgICAgICAgICAgICAweDAwNDAwNGEwICAgIC8qIElPIENSQiBFbnRyeSAzX0MgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkIzX0QgICAgICAgICAgICAgICAweDAwNDAwNGE4ICAgIC8qIElPIENSQiBFbnRyeSAzX0QgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkIzX0UgICAgICAgICAgICAgICAweDAwNDAwNGIwICAgIC8qIElPIENSQiBFbnRyeSAzX0UgICAgICAgKi8KKyNkZWZpbmUJCUlJT19JQ1JCNF9BCQkweDAwNDAwNGMwCS8qIElPIENSQiBFbnRyeSA0X0EgKi8KKyNkZWZpbmUJCUlJT19JQ1JCNF9CCQkweDAwNDAwNGM4CS8qIElPIENSQiBFbnRyeSA0X0IgKi8KKyNkZWZpbmUJCUlJT19JQ1JCNF9DCQkweDAwNDAwNGQwCS8qIElPIENSQiBFbnRyeSA0X0MgKi8KKyNkZWZpbmUJCUlJT19JQ1JCNF9ECQkweDAwNDAwNGQ4CS8qIElPIENSQiBFbnRyeSA0X0QgKi8KKyNkZWZpbmUJCUlJT19JQ1JCNF9FCQkweDAwNDAwNGUwCS8qIElPIENSQiBFbnRyeSA0X0UgKi8KIAotI2RlZmluZSAgICBJSU9fSUNSQjRfQSAgICAgICAgICAgICAgIDB4MDA0MDA0YzAgICAgLyogSU8gQ1JCIEVudHJ5IDRfQSAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQjRfQiAgICAgICAgICAgICAgIDB4MDA0MDA0YzggICAgLyogSU8gQ1JCIEVudHJ5IDRfQiAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQjRfQyAgICAgICAgICAgICAgIDB4MDA0MDA0ZDAgICAgLyogSU8gQ1JCIEVudHJ5IDRfQyAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQjRfRCAgICAgICAgICAgICAgIDB4MDA0MDA0ZDggICAgLyogSU8gQ1JCIEVudHJ5IDRfRCAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQjRfRSAgICAgICAgICAgICAgIDB4MDA0MDA0ZTAgICAgLyogSU8gQ1JCIEVudHJ5IDRfRSAgICAgICAqLworI2RlZmluZQkJSUlPX0lDUkI1X0EJCTB4MDA0MDA0ZjAJLyogSU8gQ1JCIEVudHJ5IDVfQSAqLworI2RlZmluZQkJSUlPX0lDUkI1X0IJCTB4MDA0MDA0ZjgJLyogSU8gQ1JCIEVudHJ5IDVfQiAqLworI2RlZmluZQkJSUlPX0lDUkI1X0MJCTB4MDA0MDA1MDAJLyogSU8gQ1JCIEVudHJ5IDVfQyAqLworI2RlZmluZQkJSUlPX0lDUkI1X0QJCTB4MDA0MDA1MDgJLyogSU8gQ1JCIEVudHJ5IDVfRCAqLworI2RlZmluZQkJSUlPX0lDUkI1X0UJCTB4MDA0MDA1MTAJLyogSU8gQ1JCIEVudHJ5IDVfRSAqLwogCi0jZGVmaW5lICAgIElJT19JQ1JCNV9BICAgICAgICAgICAgICAgMHgwMDQwMDRmMCAgICAvKiBJTyBDUkIgRW50cnkgNV9BICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCNV9CICAgICAgICAgICAgICAgMHgwMDQwMDRmOCAgICAvKiBJTyBDUkIgRW50cnkgNV9CICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCNV9DICAgICAgICAgICAgICAgMHgwMDQwMDUwMCAgICAvKiBJTyBDUkIgRW50cnkgNV9DICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCNV9EICAgICAgICAgICAgICAgMHgwMDQwMDUwOCAgICAvKiBJTyBDUkIgRW50cnkgNV9EICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCNV9FICAgICAgICAgICAgICAgMHgwMDQwMDUxMCAgICAvKiBJTyBDUkIgRW50cnkgNV9FICAgICAgICovCisjZGVmaW5lCQlJSU9fSUNSQjZfQQkJMHgwMDQwMDUyMAkvKiBJTyBDUkIgRW50cnkgNl9BICovCisjZGVmaW5lCQlJSU9fSUNSQjZfQgkJMHgwMDQwMDUyOAkvKiBJTyBDUkIgRW50cnkgNl9CICovCisjZGVmaW5lCQlJSU9fSUNSQjZfQwkJMHgwMDQwMDUzMAkvKiBJTyBDUkIgRW50cnkgNl9DICovCisjZGVmaW5lCQlJSU9fSUNSQjZfRAkJMHgwMDQwMDUzOAkvKiBJTyBDUkIgRW50cnkgNl9EICovCisjZGVmaW5lCQlJSU9fSUNSQjZfRQkJMHgwMDQwMDU0MAkvKiBJTyBDUkIgRW50cnkgNl9FICovCiAKLSNkZWZpbmUgICAgSUlPX0lDUkI2X0EgICAgICAgICAgICAgICAweDAwNDAwNTIwICAgIC8qIElPIENSQiBFbnRyeSA2X0EgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkI2X0IgICAgICAgICAgICAgICAweDAwNDAwNTI4ICAgIC8qIElPIENSQiBFbnRyeSA2X0IgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkI2X0MgICAgICAgICAgICAgICAweDAwNDAwNTMwICAgIC8qIElPIENSQiBFbnRyeSA2X0MgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkI2X0QgICAgICAgICAgICAgICAweDAwNDAwNTM4ICAgIC8qIElPIENSQiBFbnRyeSA2X0QgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkI2X0UgICAgICAgICAgICAgICAweDAwNDAwNTQwICAgIC8qIElPIENSQiBFbnRyeSA2X0UgICAgICAgKi8KKyNkZWZpbmUJCUlJT19JQ1JCN19BCQkweDAwNDAwNTUwCS8qIElPIENSQiBFbnRyeSA3X0EgKi8KKyNkZWZpbmUJCUlJT19JQ1JCN19CCQkweDAwNDAwNTU4CS8qIElPIENSQiBFbnRyeSA3X0IgKi8KKyNkZWZpbmUJCUlJT19JQ1JCN19DCQkweDAwNDAwNTYwCS8qIElPIENSQiBFbnRyeSA3X0MgKi8KKyNkZWZpbmUJCUlJT19JQ1JCN19ECQkweDAwNDAwNTY4CS8qIElPIENSQiBFbnRyeSA3X0QgKi8KKyNkZWZpbmUJCUlJT19JQ1JCN19FCQkweDAwNDAwNTcwCS8qIElPIENSQiBFbnRyeSA3X0UgKi8KIAotI2RlZmluZSAgICBJSU9fSUNSQjdfQSAgICAgICAgICAgICAgIDB4MDA0MDA1NTAgICAgLyogSU8gQ1JCIEVudHJ5IDdfQSAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQjdfQiAgICAgICAgICAgICAgIDB4MDA0MDA1NTggICAgLyogSU8gQ1JCIEVudHJ5IDdfQiAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQjdfQyAgICAgICAgICAgICAgIDB4MDA0MDA1NjAgICAgLyogSU8gQ1JCIEVudHJ5IDdfQyAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQjdfRCAgICAgICAgICAgICAgIDB4MDA0MDA1NjggICAgLyogSU8gQ1JCIEVudHJ5IDdfRCAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQjdfRSAgICAgICAgICAgICAgIDB4MDA0MDA1NzAgICAgLyogSU8gQ1JCIEVudHJ5IDdfRSAgICAgICAqLworI2RlZmluZQkJSUlPX0lDUkI4X0EJCTB4MDA0MDA1ODAJLyogSU8gQ1JCIEVudHJ5IDhfQSAqLworI2RlZmluZQkJSUlPX0lDUkI4X0IJCTB4MDA0MDA1ODgJLyogSU8gQ1JCIEVudHJ5IDhfQiAqLworI2RlZmluZQkJSUlPX0lDUkI4X0MJCTB4MDA0MDA1OTAJLyogSU8gQ1JCIEVudHJ5IDhfQyAqLworI2RlZmluZQkJSUlPX0lDUkI4X0QJCTB4MDA0MDA1OTgJLyogSU8gQ1JCIEVudHJ5IDhfRCAqLworI2RlZmluZQkJSUlPX0lDUkI4X0UJCTB4MDA0MDA1YTAJLyogSU8gQ1JCIEVudHJ5IDhfRSAqLwogCi0jZGVmaW5lICAgIElJT19JQ1JCOF9BICAgICAgICAgICAgICAgMHgwMDQwMDU4MCAgICAvKiBJTyBDUkIgRW50cnkgOF9BICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCOF9CICAgICAgICAgICAgICAgMHgwMDQwMDU4OCAgICAvKiBJTyBDUkIgRW50cnkgOF9CICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCOF9DICAgICAgICAgICAgICAgMHgwMDQwMDU5MCAgICAvKiBJTyBDUkIgRW50cnkgOF9DICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCOF9EICAgICAgICAgICAgICAgMHgwMDQwMDU5OCAgICAvKiBJTyBDUkIgRW50cnkgOF9EICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCOF9FICAgICAgICAgICAgICAgMHgwMDQwMDVhMCAgICAvKiBJTyBDUkIgRW50cnkgOF9FICAgICAgICovCisjZGVmaW5lCQlJSU9fSUNSQjlfQQkJMHgwMDQwMDViMAkvKiBJTyBDUkIgRW50cnkgOV9BICovCisjZGVmaW5lCQlJSU9fSUNSQjlfQgkJMHgwMDQwMDViOAkvKiBJTyBDUkIgRW50cnkgOV9CICovCisjZGVmaW5lCQlJSU9fSUNSQjlfQwkJMHgwMDQwMDVjMAkvKiBJTyBDUkIgRW50cnkgOV9DICovCisjZGVmaW5lCQlJSU9fSUNSQjlfRAkJMHgwMDQwMDVjOAkvKiBJTyBDUkIgRW50cnkgOV9EICovCisjZGVmaW5lCQlJSU9fSUNSQjlfRQkJMHgwMDQwMDVkMAkvKiBJTyBDUkIgRW50cnkgOV9FICovCiAKLSNkZWZpbmUgICAgSUlPX0lDUkI5X0EgICAgICAgICAgICAgICAweDAwNDAwNWIwICAgIC8qIElPIENSQiBFbnRyeSA5X0EgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkI5X0IgICAgICAgICAgICAgICAweDAwNDAwNWI4ICAgIC8qIElPIENSQiBFbnRyeSA5X0IgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkI5X0MgICAgICAgICAgICAgICAweDAwNDAwNWMwICAgIC8qIElPIENSQiBFbnRyeSA5X0MgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkI5X0QgICAgICAgICAgICAgICAweDAwNDAwNWM4ICAgIC8qIElPIENSQiBFbnRyeSA5X0QgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkI5X0UgICAgICAgICAgICAgICAweDAwNDAwNWQwICAgIC8qIElPIENSQiBFbnRyeSA5X0UgICAgICAgKi8KKyNkZWZpbmUJCUlJT19JQ1JCQV9BCQkweDAwNDAwNWUwCS8qIElPIENSQiBFbnRyeSBBX0EgKi8KKyNkZWZpbmUJCUlJT19JQ1JCQV9CCQkweDAwNDAwNWU4CS8qIElPIENSQiBFbnRyeSBBX0IgKi8KKyNkZWZpbmUJCUlJT19JQ1JCQV9DCQkweDAwNDAwNWYwCS8qIElPIENSQiBFbnRyeSBBX0MgKi8KKyNkZWZpbmUJCUlJT19JQ1JCQV9ECQkweDAwNDAwNWY4CS8qIElPIENSQiBFbnRyeSBBX0QgKi8KKyNkZWZpbmUJCUlJT19JQ1JCQV9FCQkweDAwNDAwNjAwCS8qIElPIENSQiBFbnRyeSBBX0UgKi8KIAotI2RlZmluZSAgICBJSU9fSUNSQkFfQSAgICAgICAgICAgICAgIDB4MDA0MDA1ZTAgICAgLyogSU8gQ1JCIEVudHJ5IEFfQSAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQkFfQiAgICAgICAgICAgICAgIDB4MDA0MDA1ZTggICAgLyogSU8gQ1JCIEVudHJ5IEFfQiAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQkFfQyAgICAgICAgICAgICAgIDB4MDA0MDA1ZjAgICAgLyogSU8gQ1JCIEVudHJ5IEFfQyAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQkFfRCAgICAgICAgICAgICAgIDB4MDA0MDA1ZjggICAgLyogSU8gQ1JCIEVudHJ5IEFfRCAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQkFfRSAgICAgICAgICAgICAgIDB4MDA0MDA2MDAgICAgLyogSU8gQ1JCIEVudHJ5IEFfRSAgICAgICAqLworI2RlZmluZQkJSUlPX0lDUkJCX0EJCTB4MDA0MDA2MTAJLyogSU8gQ1JCIEVudHJ5IEJfQSAqLworI2RlZmluZQkJSUlPX0lDUkJCX0IJCTB4MDA0MDA2MTgJLyogSU8gQ1JCIEVudHJ5IEJfQiAqLworI2RlZmluZQkJSUlPX0lDUkJCX0MJCTB4MDA0MDA2MjAJLyogSU8gQ1JCIEVudHJ5IEJfQyAqLworI2RlZmluZQkJSUlPX0lDUkJCX0QJCTB4MDA0MDA2MjgJLyogSU8gQ1JCIEVudHJ5IEJfRCAqLworI2RlZmluZQkJSUlPX0lDUkJCX0UJCTB4MDA0MDA2MzAJLyogSU8gQ1JCIEVudHJ5IEJfRSAqLwogCi0jZGVmaW5lICAgIElJT19JQ1JCQl9BICAgICAgICAgICAgICAgMHgwMDQwMDYxMCAgICAvKiBJTyBDUkIgRW50cnkgQl9BICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCQl9CICAgICAgICAgICAgICAgMHgwMDQwMDYxOCAgICAvKiBJTyBDUkIgRW50cnkgQl9CICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCQl9DICAgICAgICAgICAgICAgMHgwMDQwMDYyMCAgICAvKiBJTyBDUkIgRW50cnkgQl9DICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCQl9EICAgICAgICAgICAgICAgMHgwMDQwMDYyOCAgICAvKiBJTyBDUkIgRW50cnkgQl9EICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCQl9FICAgICAgICAgICAgICAgMHgwMDQwMDYzMCAgICAvKiBJTyBDUkIgRW50cnkgQl9FICAgICAgICovCisjZGVmaW5lCQlJSU9fSUNSQkNfQQkJMHgwMDQwMDY0MAkvKiBJTyBDUkIgRW50cnkgQ19BICovCisjZGVmaW5lCQlJSU9fSUNSQkNfQgkJMHgwMDQwMDY0OAkvKiBJTyBDUkIgRW50cnkgQ19CICovCisjZGVmaW5lCQlJSU9fSUNSQkNfQwkJMHgwMDQwMDY1MAkvKiBJTyBDUkIgRW50cnkgQ19DICovCisjZGVmaW5lCQlJSU9fSUNSQkNfRAkJMHgwMDQwMDY1OAkvKiBJTyBDUkIgRW50cnkgQ19EICovCisjZGVmaW5lCQlJSU9fSUNSQkNfRQkJMHgwMDQwMDY2MAkvKiBJTyBDUkIgRW50cnkgQ19FICovCiAKLSNkZWZpbmUgICAgSUlPX0lDUkJDX0EgICAgICAgICAgICAgICAweDAwNDAwNjQwICAgIC8qIElPIENSQiBFbnRyeSBDX0EgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkJDX0IgICAgICAgICAgICAgICAweDAwNDAwNjQ4ICAgIC8qIElPIENSQiBFbnRyeSBDX0IgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkJDX0MgICAgICAgICAgICAgICAweDAwNDAwNjUwICAgIC8qIElPIENSQiBFbnRyeSBDX0MgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkJDX0QgICAgICAgICAgICAgICAweDAwNDAwNjU4ICAgIC8qIElPIENSQiBFbnRyeSBDX0QgICAgICAgKi8KLSNkZWZpbmUgICAgSUlPX0lDUkJDX0UgICAgICAgICAgICAgICAweDAwNDAwNjYwICAgIC8qIElPIENSQiBFbnRyeSBDX0UgICAgICAgKi8KKyNkZWZpbmUJCUlJT19JQ1JCRF9BCQkweDAwNDAwNjcwCS8qIElPIENSQiBFbnRyeSBEX0EgKi8KKyNkZWZpbmUJCUlJT19JQ1JCRF9CCQkweDAwNDAwNjc4CS8qIElPIENSQiBFbnRyeSBEX0IgKi8KKyNkZWZpbmUJCUlJT19JQ1JCRF9DCQkweDAwNDAwNjgwCS8qIElPIENSQiBFbnRyeSBEX0MgKi8KKyNkZWZpbmUJCUlJT19JQ1JCRF9ECQkweDAwNDAwNjg4CS8qIElPIENSQiBFbnRyeSBEX0QgKi8KKyNkZWZpbmUJCUlJT19JQ1JCRF9FCQkweDAwNDAwNjkwCS8qIElPIENSQiBFbnRyeSBEX0UgKi8KIAotI2RlZmluZSAgICBJSU9fSUNSQkRfQSAgICAgICAgICAgICAgIDB4MDA0MDA2NzAgICAgLyogSU8gQ1JCIEVudHJ5IERfQSAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQkRfQiAgICAgICAgICAgICAgIDB4MDA0MDA2NzggICAgLyogSU8gQ1JCIEVudHJ5IERfQiAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQkRfQyAgICAgICAgICAgICAgIDB4MDA0MDA2ODAgICAgLyogSU8gQ1JCIEVudHJ5IERfQyAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQkRfRCAgICAgICAgICAgICAgIDB4MDA0MDA2ODggICAgLyogSU8gQ1JCIEVudHJ5IERfRCAgICAgICAqLwotI2RlZmluZSAgICBJSU9fSUNSQkRfRSAgICAgICAgICAgICAgIDB4MDA0MDA2OTAgICAgLyogSU8gQ1JCIEVudHJ5IERfRSAgICAgICAqLworI2RlZmluZQkJSUlPX0lDUkJFX0EJCTB4MDA0MDA2YTAJLyogSU8gQ1JCIEVudHJ5IEVfQSAqLworI2RlZmluZQkJSUlPX0lDUkJFX0IJCTB4MDA0MDA2YTgJLyogSU8gQ1JCIEVudHJ5IEVfQiAqLworI2RlZmluZQkJSUlPX0lDUkJFX0MJCTB4MDA0MDA2YjAJLyogSU8gQ1JCIEVudHJ5IEVfQyAqLworI2RlZmluZQkJSUlPX0lDUkJFX0QJCTB4MDA0MDA2YjgJLyogSU8gQ1JCIEVudHJ5IEVfRCAqLworI2RlZmluZQkJSUlPX0lDUkJFX0UJCTB4MDA0MDA2YzAJLyogSU8gQ1JCIEVudHJ5IEVfRSAqLwogCi0jZGVmaW5lICAgIElJT19JQ1JCRV9BICAgICAgICAgICAgICAgMHgwMDQwMDZhMCAgICAvKiBJTyBDUkIgRW50cnkgRV9BICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCRV9CICAgICAgICAgICAgICAgMHgwMDQwMDZhOCAgICAvKiBJTyBDUkIgRW50cnkgRV9CICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCRV9DICAgICAgICAgICAgICAgMHgwMDQwMDZiMCAgICAvKiBJTyBDUkIgRW50cnkgRV9DICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCRV9EICAgICAgICAgICAgICAgMHgwMDQwMDZiOCAgICAvKiBJTyBDUkIgRW50cnkgRV9EICAgICAgICovCi0jZGVmaW5lICAgIElJT19JQ1JCRV9FICAgICAgICAgICAgICAgMHgwMDQwMDZjMCAgICAvKiBJTyBDUkIgRW50cnkgRV9FICAgICAgICovCisjZGVmaW5lCQlJSU9fSUNTTUwJCTB4MDA0MDA3MDAJLyogSU8gQ1JCIFNwdXJpb3VzIE1lc3NhZ2UgTG93ICovCisjZGVmaW5lCQlJSU9fSUNTTU0JCTB4MDA0MDA3MDgJLyogSU8gQ1JCIFNwdXJpb3VzIE1lc3NhZ2UgTWlkZGxlICovCisjZGVmaW5lCQlJSU9fSUNTTUgJCTB4MDA0MDA3MTAJLyogSU8gQ1JCIFNwdXJpb3VzIE1lc3NhZ2UgSGlnaCAqLwogCi0jZGVmaW5lICAgIElJT19JQ1NNTCAgICAgICAgICAgICAgICAgMHgwMDQwMDcwMCAgICAvKiBJTyBDUkIgU3B1cmlvdXMgTWVzc2FnZSBMb3cgKi8KLSNkZWZpbmUgICAgSUlPX0lDU01NICAgICAgICAgICAgICAgICAweDAwNDAwNzA4ICAgIC8qIElPIENSQiBTcHVyaW91cyBNZXNzYWdlIE1pZGRsZSAqLwotI2RlZmluZSAgICBJSU9fSUNTTUggICAgICAgICAgICAgICAgIDB4MDA0MDA3MTAgICAgLyogSU8gQ1JCIFNwdXJpb3VzIE1lc3NhZ2UgSGlnaCAqLworI2RlZmluZQkJSUlPX0lEQlNTCQkweDAwNDAwNzE4CS8qIElPIERlYnVnIFN1Ym1lbnUgU2VsZWN0ICovCiAKLSNkZWZpbmUgICAgSUlPX0lEQlNTICAgICAgICAgICAgICAgICAweDAwNDAwNzE4ICAgIC8qIElPIERlYnVnIFN1Ym1lbnUgU2VsZWN0ICovCisjZGVmaW5lCQlJSU9fSUJMUzAJCTB4MDA0MTAwMDAJLyogSU8gQlRFIExlbmd0aCBTdGF0dXMgMCAqLworI2RlZmluZQkJSUlPX0lCU0EwCQkweDAwNDEwMDA4CS8qIElPIEJURSBTb3VyY2UgQWRkcmVzcyAwICovCisjZGVmaW5lCQlJSU9fSUJEQTAJCTB4MDA0MTAwMTAJLyogSU8gQlRFIERlc3RpbmF0aW9uIEFkZHJlc3MgMCAqLworI2RlZmluZQkJSUlPX0lCQ1QwCQkweDAwNDEwMDE4CS8qIElPIEJURSBDb250cm9sIFRlcm1pbmF0ZSAwICovCisjZGVmaW5lCQlJSU9fSUJOQTAJCTB4MDA0MTAwMjAJLyogSU8gQlRFIE5vdGlmaWNhdGlvbiBBZGRyZXNzIDAgKi8KKyNkZWZpbmUJCUlJT19JQklBMAkJMHgwMDQxMDAyOAkvKiBJTyBCVEUgSW50ZXJydXB0IEFkZHJlc3MgMCAqLworI2RlZmluZQkJSUlPX0lCTFMxCQkweDAwNDIwMDAwCS8qIElPIEJURSBMZW5ndGggU3RhdHVzIDEgKi8KKyNkZWZpbmUJCUlJT19JQlNBMQkJMHgwMDQyMDAwOAkvKiBJTyBCVEUgU291cmNlIEFkZHJlc3MgMSAqLworI2RlZmluZQkJSUlPX0lCREExCQkweDAwNDIwMDEwCS8qIElPIEJURSBEZXN0aW5hdGlvbiBBZGRyZXNzIDEgKi8KKyNkZWZpbmUJCUlJT19JQkNUMQkJMHgwMDQyMDAxOAkvKiBJTyBCVEUgQ29udHJvbCBUZXJtaW5hdGUgMSAqLworI2RlZmluZQkJSUlPX0lCTkExCQkweDAwNDIwMDIwCS8qIElPIEJURSBOb3RpZmljYXRpb24gQWRkcmVzcyAxICovCisjZGVmaW5lCQlJSU9fSUJJQTEJCTB4MDA0MjAwMjgJLyogSU8gQlRFIEludGVycnVwdCBBZGRyZXNzIDEgKi8KIAotI2RlZmluZSAgICBJSU9fSUJMUzAgICAgICAgICAgICAgICAgIDB4MDA0MTAwMDAgICAgLyogSU8gQlRFIExlbmd0aCBTdGF0dXMgMCAqLwotI2RlZmluZSAgICBJSU9fSUJTQTAgICAgICAgICAgICAgICAgIDB4MDA0MTAwMDggICAgLyogSU8gQlRFIFNvdXJjZSBBZGRyZXNzIDAgKi8KLSNkZWZpbmUgICAgSUlPX0lCREEwICAgICAgICAgICAgICAgICAweDAwNDEwMDEwICAgIC8qIElPIEJURSBEZXN0aW5hdGlvbiBBZGRyZXNzIDAgKi8KLSNkZWZpbmUgICAgSUlPX0lCQ1QwICAgICAgICAgICAgICAgICAweDAwNDEwMDE4ICAgIC8qIElPIEJURSBDb250cm9sIFRlcm1pbmF0ZSAwICovCi0jZGVmaW5lICAgIElJT19JQk5BMCAgICAgICAgICAgICAgICAgMHgwMDQxMDAyMCAgICAvKiBJTyBCVEUgTm90aWZpY2F0aW9uIEFkZHJlc3MgMCAqLwotI2RlZmluZSAgICBJSU9fSUJJQTAgICAgICAgICAgICAgICAgIDB4MDA0MTAwMjggICAgLyogSU8gQlRFIEludGVycnVwdCBBZGRyZXNzIDAgKi8KLSNkZWZpbmUgICAgSUlPX0lCTFMxICAgICAgICAgICAgICAgICAweDAwNDIwMDAwICAgIC8qIElPIEJURSBMZW5ndGggU3RhdHVzIDEgKi8KLSNkZWZpbmUgICAgSUlPX0lCU0ExICAgICAgICAgICAgICAgICAweDAwNDIwMDA4ICAgIC8qIElPIEJURSBTb3VyY2UgQWRkcmVzcyAxICovCi0jZGVmaW5lICAgIElJT19JQkRBMSAgICAgICAgICAgICAgICAgMHgwMDQyMDAxMCAgICAvKiBJTyBCVEUgRGVzdGluYXRpb24gQWRkcmVzcyAxICovCi0jZGVmaW5lICAgIElJT19JQkNUMSAgICAgICAgICAgICAgICAgMHgwMDQyMDAxOCAgICAvKiBJTyBCVEUgQ29udHJvbCBUZXJtaW5hdGUgMSAqLwotI2RlZmluZSAgICBJSU9fSUJOQTEgICAgICAgICAgICAgICAgIDB4MDA0MjAwMjAgICAgLyogSU8gQlRFIE5vdGlmaWNhdGlvbiBBZGRyZXNzIDEgKi8KLSNkZWZpbmUgICAgSUlPX0lCSUExICAgICAgICAgICAgICAgICAweDAwNDIwMDI4ICAgIC8qIElPIEJURSBJbnRlcnJ1cHQgQWRkcmVzcyAxICovCi0KLSNkZWZpbmUgICAgSUlPX0lQQ1IgICAgICAgICAgICAgICAgICAweDAwNDMwMDAwICAgIC8qIElPIFBlcmZvcm1hbmNlIENvbnRyb2wgKi8KLSNkZWZpbmUgICAgSUlPX0lQUFIgICAgICAgICAgICAgICAgICAweDAwNDMwMDA4ICAgIC8qIElPIFBlcmZvcm1hbmNlIFByb2ZpbGluZyAqLwotCisjZGVmaW5lCQlJSU9fSVBDUgkJMHgwMDQzMDAwMAkvKiBJTyBQZXJmb3JtYW5jZSBDb250cm9sICovCisjZGVmaW5lCQlJSU9fSVBQUgkJMHgwMDQzMDAwOAkvKiBJTyBQZXJmb3JtYW5jZSBQcm9maWxpbmcgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIFRoaXMgcmVnaXN0ZXIgZWNob2VzIHNvbWUgaW5mb3JtYXRpb24gZnJvbSB0aGUgICAgICAgICAqCiAgKiBMQl9SRVZfSUQgcmVnaXN0ZXIuIEl0IGlzIGF2YWlsYWJsZSB0aHJvdWdoIENyb3NzdGFsayBhcyBkZXNjcmliZWQgICAqCiAgKiBhYm92ZS4gVGhlIFJFVl9OVU0gYW5kIE1GR19OVU0gZmllbGRzIHJlY2VpdmUgdGhlaXIgdmFsdWVzIGZyb20gICAgICAqCiAgKiB0aGUgUkVWSVNJT04gYW5kIE1BTlVGQUNUVVJFUiBmaWVsZHMgaW4gdGhlIExCX1JFVl9JRCByZWdpc3Rlci4gICAgICAqCiAgKiBUaGUgUEFSVF9OVU0gZmllbGQncyB2YWx1ZSBpcyB0aGUgQ3Jvc3N0YWxrIGRldmljZSBJRCBudW1iZXIgdGhhdCAgICAqCiAgKiBTdGV2ZSBNaWxsZXIgYXNzaWduZWQgdG8gdGhlIFNIdWIgY2hpcC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfd2lkX3UgewotCXVpbnQ2NF90CWlpX3dpZF9yZWd2YWw7Ci0Jc3RydWN0CXsKLQkJdWludDY0X3QJd19yc3ZkXzEJCSAgOgkgMTsKLQkJdWludDY0X3QJd19tZmdfbnVtCQkgIDoJMTE7Ci0JCXVpbnQ2NF90CXdfcGFydF9udW0JCSAgOgkxNjsKLQkJdWludDY0X3QJd19yZXZfbnVtCQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CXdfcnN2ZAkJCSAgOgkzMjsKKwl1aW50NjRfdCBpaV93aWRfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IHdfcnN2ZF8xOjE7CisJCXVpbnQ2NF90IHdfbWZnX251bToxMTsKKwkJdWludDY0X3Qgd19wYXJ0X251bToxNjsKKwkJdWludDY0X3Qgd19yZXZfbnVtOjQ7CisJCXVpbnQ2NF90IHdfcnN2ZDozMjsKIAl9IGlpX3dpZF9mbGRfczsKIH0gaWlfd2lkX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGUgZmllbGRzIGluIHRoaXMgcmVnaXN0ZXIgYXJlIHNldCB1cG9uIGRldGVjdGlvbiBvZiBhbiBlcnJvciAgICAgICoKICAqIGFuZCBjbGVhcmVkIGJ5IHZhcmlvdXMgbWVjaGFuaXNtcywgYXMgZXhwbGFpbmVkIGluIHRoZSAgICAgICAgICAgICAgICoKICAqIGRlc2NyaXB0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV93c3RhdF91IHsKLQl1aW50NjRfdAlpaV93c3RhdF9yZWd2YWw7Ci0Jc3RydWN0CXsKLQkJdWludDY0X3QJd19wZW5kaW5nCQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CXdfeHRfY3JkX3RvCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CXdfeHRfdGFpbF90bwkJICA6CSAxOwotCQl1aW50NjRfdAl3X3JzdmRfMwkJICA6CSAzOwotCQl1aW50NjRfdCAgICAgICB3X3R4X214X3J0eSAgICAgICAgICAgICAgIDogICAgICAxOwotCQl1aW50NjRfdAl3X3JzdmRfMgkJICA6CSA2OwotCQl1aW50NjRfdAl3X2xscF90eF9jbnQJCSAgOgkgODsKLQkJdWludDY0X3QJd19yc3ZkXzEJCSAgOgkgODsKLQkJdWludDY0X3QJd19jcmF6eQkJCSAgOgkgMTsKLQkJdWludDY0X3QJd19yc3ZkCQkJICA6CTMxOworCXVpbnQ2NF90IGlpX3dzdGF0X3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCB3X3BlbmRpbmc6NDsKKwkJdWludDY0X3Qgd194dF9jcmRfdG86MTsKKwkJdWludDY0X3Qgd194dF90YWlsX3RvOjE7CisJCXVpbnQ2NF90IHdfcnN2ZF8zOjM7CisJCXVpbnQ2NF90IHdfdHhfbXhfcnR5OjE7CisJCXVpbnQ2NF90IHdfcnN2ZF8yOjY7CisJCXVpbnQ2NF90IHdfbGxwX3R4X2NudDo4OworCQl1aW50NjRfdCB3X3JzdmRfMTo4OworCQl1aW50NjRfdCB3X2NyYXp5OjE7CisJCXVpbnQ2NF90IHdfcnN2ZDozMTsKIAl9IGlpX3dzdGF0X2ZsZF9zOwogfSBpaV93c3RhdF91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIFRoaXMgaXMgYSByZWFkLXdyaXRlIGVuYWJsZWQgcmVnaXN0ZXIuIEl0IGNvbnRyb2xzICAgICAqCiAgKiB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlIENyb3NzdGFsayBmbG93IGNvbnRyb2wuICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfd2NyX3UgewotCXVpbnQ2NF90CWlpX3djcl9yZWd2YWw7Ci0Jc3RydWN0CXsKLQkJdWludDY0X3QJd193aWQJCQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CXdfdGFnCQkJICA6CSAxOwotCQl1aW50NjRfdAl3X3JzdmRfMQkJICA6CSA4OwotCQl1aW50NjRfdAl3X2RzdF9jcmQJCSAgOgkgMzsKLQkJdWludDY0X3QJd19mX2JhZF9wa3QJCSAgOgkgMTsKLQkJdWludDY0X3QJd19kaXJfY29uCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CXdfZV90aHJlc2gJCSAgOgkgNTsKLQkJdWludDY0X3QJd19yc3ZkCQkJICA6CTQxOworCXVpbnQ2NF90IGlpX3djcl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3Qgd193aWQ6NDsKKwkJdWludDY0X3Qgd190YWc6MTsKKwkJdWludDY0X3Qgd19yc3ZkXzE6ODsKKwkJdWludDY0X3Qgd19kc3RfY3JkOjM7CisJCXVpbnQ2NF90IHdfZl9iYWRfcGt0OjE7CisJCXVpbnQ2NF90IHdfZGlyX2NvbjoxOworCQl1aW50NjRfdCB3X2VfdGhyZXNoOjU7CisJCXVpbnQ2NF90IHdfcnN2ZDo0MTsKIAl9IGlpX3djcl9mbGRfczsKIH0gaWlfd2NyX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgVGhpcyByZWdpc3RlcidzIHZhbHVlIGlzIGEgYml0IHZlY3RvciB0aGF0IGd1YXJkcyAgICAgICoKICAqIGFjY2VzcyB0byBsb2NhbCByZWdpc3RlcnMgd2l0aGluIHRoZSBJSSBhcyB3ZWxsIGFzIHRvIGV4dGVybmFsICAgICAgICoKICAqIENyb3NzdGFsayB3aWRnZXRzLiBFYWNoIGJpdCBpbiB0aGUgcmVnaXN0ZXIgY29ycmVzcG9uZHMgdG8gYSAgICAgICAgICoKQEAgLTMxMSwyMSArMzA2LDE4IEBACiAgKiByZWdpb24gSUQgYml0cyBhcmUgZW5hYmxlZCBpbiB0aGlzIHNhbWUgcmVnaXN0ZXIuIEl0IGNhbiBhbHNvIGJlICAgICAqCiAgKiBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBJQWxpYXMgc3BhY2UgYnkgdGhlIGxvY2FsIHByb2Nlc3NvcnMuICAgICAgICAgICAqCiAgKiBUaGUgcmVzZXQgdmFsdWUgb2YgdGhpcyByZWdpc3RlciBhbGxvd3MgYWNjZXNzIGJ5IGFsbCBub2Rlcy4gICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWxhcHJfdSB7Ci0JdWludDY0X3QJaWlfaWxhcHJfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JlZ2lvbiAgICAgICAgICAgICAgICAgIDoJNjQ7CisJdWludDY0X3QgaWlfaWxhcHJfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfcmVnaW9uOjY0OwogCX0gaWlfaWxhcHJfZmxkX3M7CiB9IGlpX2lsYXByX3VfdDsKIAotCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIEEgd3JpdGUgdG8gdGhpcyByZWdpc3RlciBvZiB0aGUgNjQtYml0IHZhbHVlICAgICAgICAgICAqCiAgKiAiU0dJcnVsZXMiIGluIEFTQ0lJLCB3aWxsIGNhdXNlIHRoZSBiaXQgaW4gdGhlIElMQVBSIHJlZ2lzdGVyICAgICAgICAqCiAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSByZWdpb24gb2YgdGhlIHJlcXVlc3RvciB0byBiZSBzZXQgKGFsbG93ICAgICAgICAqCkBAIC0zMzQsNTkgKzMyNiw1NCBAQAogICogVGhpcyByZWdpc3RlciBjYW4gYWxzbyBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBJQWxpYXMgc3BhY2UuICAgICAgICAgKgogICogSG93ZXZlciwgdGhpcyBhY2Nlc3Mgd2lsbCBub3QgY2hhbmdlIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgaW4gdGhlICAgKgogICogSUxBUFIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lsYXBvX3UgewotCXVpbnQ2NF90CWlpX2lsYXBvX3JlZ3ZhbDsKLQlzdHJ1Y3QJewotCQl1aW50NjRfdAlpX2lvX292cnJpZGUgICAgICAgICAgICA6CTY0OworCXVpbnQ2NF90IGlpX2lsYXBvX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX2lvX292cnJpZGU6NjQ7CiAJfSBpaV9pbGFwb19mbGRfczsKIH0gaWlfaWxhcG9fdV90OwogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhpcyByZWdpc3RlciBxdWFsaWZpZXMgYWxsIHRoZSBQSU8gYW5kIEdyYXBoaWNzIHdyaXRlcyBsYXVuY2hlZCAgICAqCiAgKiBmcm9tIHRoZSBTSFVCIHRvd2FyZHMgYSB3aWRnZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaW93YV91IHsKLQl1aW50NjRfdAlpaV9pb3dhX3JlZ3ZhbDsKLQlzdHJ1Y3QJewotCQl1aW50NjRfdAlpX3cwX29hYwkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSA3OwotICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfd3hfb2FjICAgICAgICAgICAgICAgICAgOiAgICAgIDg7Ci0JCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgk0ODsKKwl1aW50NjRfdCBpaV9pb3dhX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3cwX29hYzoxOworCQl1aW50NjRfdCBpX3JzdmRfMTo3OworCQl1aW50NjRfdCBpX3d4X29hYzo4OworCQl1aW50NjRfdCBpX3JzdmQ6NDg7CiAJfSBpaV9pb3dhX2ZsZF9zOwogfSBpaV9pb3dhX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgVGhpcyByZWdpc3RlciBxdWFsaWZpZXMgYWxsIHRoZSByZXF1ZXN0cyBsYXVuY2hlZCAgICAgICoKICAqIGZyb20gYSB3aWRnZXQgdG93YXJkcyB0aGUgU2h1Yi4gVGhpcyByZWdpc3RlciBpcyBpbnRlbmRlZCB0byBiZSAgICAgICoKICAqIHVzZWQgYnkgc29mdHdhcmUgaW4gY2FzZSBvZiBtaXNiZWhhdmluZyB3aWRnZXRzLiAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lpd2FfdSB7Ci0JdWludDY0X3QJaWlfaWl3YV9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfdzBfaWFjICAgICAgICAgICAgICAgICAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgNzsKLQkJdWludDY0X3QJaV93eF9pYWMJCSAgOgkgODsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTQ4OworCXVpbnQ2NF90IGlpX2lpd2FfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfdzBfaWFjOjE7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjc7CisJCXVpbnQ2NF90IGlfd3hfaWFjOjg7CisJCXVpbnQ2NF90IGlfcnN2ZDo0ODsKIAl9IGlpX2lpd2FfZmxkX3M7CiB9IGlpX2lpd2FfdV90OwogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIFRoaXMgcmVnaXN0ZXIgcXVhbGlmaWVzIGFsbCB0aGUgb3BlcmF0aW9ucyBsYXVuY2hlZCAgICAqCiAgKiBmcm9tIGEgd2lkZ2V0IHRvd2FyZHMgdGhlIFNIdWIuIEl0IGFsbG93cyBpbmRpdmlkdWFsIGFjY2VzcyAgICAgICAgICAqCiAgKiBjb250cm9sIGZvciB1cCB0byA4IGRldmljZXMgcGVyIHdpZGdldC4gQSBkZXZpY2UgcmVmZXJzIHRvICAgICAgICAgICAqCkBAIC00MDEsNzIgKzM4OCw2OSBAQAogICogVGhlIGJpdHMgaW4gdGhpcyBmaWVsZCBhcmUgc2V0IGJ5IHdyaXRpbmcgYSAxIHRvIHRoZW0uIEluY29taW5nICAgICAgKgogICogcmVwbGllcyBmcm9tIENyb3NzdGFsayBhcmUgbm90IHN1YmplY3QgdG8gdGhpcyBhY2Nlc3MgY29udHJvbCAgICAgICAgKgogICogbWVjaGFuaXNtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lpZGVtX3UgewotCXVpbnQ2NF90CWlpX2lpZGVtX3JlZ3ZhbDsKLQlzdHJ1Y3QJewotCQl1aW50NjRfdAlpX3c4X2R4cwkJICA6CSA4OwotCQl1aW50NjRfdAlpX3c5X2R4cwkJICA6CSA4OwotCQl1aW50NjRfdAlpX3dhX2R4cwkJICA6CSA4OwotCQl1aW50NjRfdAlpX3diX2R4cwkJICA6CSA4OwotCQl1aW50NjRfdAlpX3djX2R4cwkJICA6CSA4OwotCQl1aW50NjRfdAlpX3dkX2R4cwkJICA6CSA4OwotCQl1aW50NjRfdAlpX3dlX2R4cwkJICA6CSA4OwotCQl1aW50NjRfdAlpX3dmX2R4cwkJICA6CSA4OworCXVpbnQ2NF90IGlpX2lpZGVtX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3c4X2R4czo4OworCQl1aW50NjRfdCBpX3c5X2R4czo4OworCQl1aW50NjRfdCBpX3dhX2R4czo4OworCQl1aW50NjRfdCBpX3diX2R4czo4OworCQl1aW50NjRfdCBpX3djX2R4czo4OworCQl1aW50NjRfdCBpX3dkX2R4czo4OworCQl1aW50NjRfdCBpX3dlX2R4czo4OworCQl1aW50NjRfdCBpX3dmX2R4czo4OwogCX0gaWlfaWlkZW1fZmxkX3M7CiB9IGlpX2lpZGVtX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSB2YXJpb3VzIHByb2dyYW1tYWJsZSBmaWVsZHMgbmVjZXNzYXJ5ICAgICoKICAqIGZvciBjb250cm9sbGluZyBhbmQgb2JzZXJ2aW5nIHRoZSBMTFAgc2lnbmFscy4gICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pbGNzcl91IHsKLQl1aW50NjRfdAlpaV9pbGNzcl9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfbnVsbHRvICAgICAgICAgICAgICAgICAgOgkgNjsKLQkJdWludDY0X3QJaV9yc3ZkXzQJCSAgOgkgMjsKLQkJdWludDY0X3QJaV93cm1yc3QJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkXzMJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9sbHBfZW4JCSAgOgkgMTsKLQkJdWludDY0X3QJaV9ibTgJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfbGxwX3N0YXQJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9yZW1vdGVfcG93ZXIJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9tYXhydHJ5CQkgIDoJMTA7Ci0JCXVpbnQ2NF90CWlfZF9hdmFpbF9zZWwJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgNDsKLQkJdWludDY0X3QJaV9tYXhicnN0CQkgIDoJMTA7Ci0gICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICAyMjsKKwl1aW50NjRfdCBpaV9pbGNzcl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9udWxsdG86NjsKKwkJdWludDY0X3QgaV9yc3ZkXzQ6MjsKKwkJdWludDY0X3QgaV93cm1yc3Q6MTsKKwkJdWludDY0X3QgaV9yc3ZkXzM6MTsKKwkJdWludDY0X3QgaV9sbHBfZW46MTsKKwkJdWludDY0X3QgaV9ibTg6MTsKKwkJdWludDY0X3QgaV9sbHBfc3RhdDoyOworCQl1aW50NjRfdCBpX3JlbW90ZV9wb3dlcjoxOworCQl1aW50NjRfdCBpX3JzdmRfMjoxOworCQl1aW50NjRfdCBpX21heHJ0cnk6MTA7CisJCXVpbnQ2NF90IGlfZF9hdmFpbF9zZWw6MjsKKwkJdWludDY0X3QgaV9yc3ZkXzE6NDsKKwkJdWludDY0X3QgaV9tYXhicnN0OjEwOworCQl1aW50NjRfdCBpX3JzdmQ6MjI7CiAKIAl9IGlpX2lsY3NyX2ZsZF9zOwogfSBpaV9pbGNzcl91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhpcyBpcyBzaW1wbHkgYSBzdGF0dXMgcmVnaXN0ZXJzIHRoYXQgbW9uaXRvcnMgdGhlIExMUCBlcnJvciAgICAgICAqCi0gKiByYXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiByYXRlLgkJCQkJCQkJKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lsbHJfdSB7Ci0JdWludDY0X3QJaWlfaWxscl9yZWd2YWw7Ci0Jc3RydWN0CXsKLQkJdWludDY0X3QJaV9zbl9jbnQJCSAgOgkxNjsKLQkJdWludDY0X3QJaV9jYl9jbnQJCSAgOgkxNjsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTMyOworCXVpbnQ2NF90IGlpX2lsbHJfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfc25fY250OjE2OworCQl1aW50NjRfdCBpX2NiX2NudDoxNjsKKwkJdWludDY0X3QgaV9yc3ZkOjMyOwogCX0gaWlfaWxscl9mbGRfczsKIH0gaWlfaWxscl91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIEFsbCBJSS1kZXRlY3RlZCBub24tQlRFIGVycm9yIGludGVycnVwdHMgYXJlICAgICAgICAgICAqCiAgKiBzcGVjaWZpZWQgdmlhIHRoaXMgcmVnaXN0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBOT1RFOiBUaGUgUEkgaW50ZXJydXB0IHJlZ2lzdGVyIGFkZHJlc3MgaXMgaGFyZGNvZGVkIGluIHRoZSBJSS4gSWYgICAqCkBAIC00NzYsMTA3ICs0NjAsMTAwIEBACiAgKiBQSV9JRD09MSwgdGhlbiB0aGUgSUkgc2VuZHMgdGhlIGludGVycnVwdCByZXF1ZXN0IHRvIGFkZHJlc3MgICAgICAgICAqCiAgKiBvZmZzZXQgMHgwMUEwXzAwOTAgd2l0aGluIHRoZSBsb2NhbCByZWdpc3RlciBhZGRyZXNzIHNwYWNlIG9mIFBJMSAgICAqCiAgKiBvbiB0aGUgbm9kZSBzcGVjaWZpZWQgYnkgdGhlIE5PREUgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWlkc3JfdSB7Ci0JdWludDY0X3QJaWlfaWlkc3JfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX2xldmVsICAgICAgICAgICAgICAgICAgIDoJIDg7Ci0JCXVpbnQ2NF90CWlfcGlfaWQJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfbm9kZQkJCSAgOgkxMTsKLQkJdWludDY0X3QgICAgICAgaV9yc3ZkXzMgICAgICAgICAgICAgICAgICA6ICAgICAgNDsKLQkJdWludDY0X3QJaV9lbmFibGUJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgkgMzsKLQkJdWludDY0X3QJaV9pbnRfc2VudAkJICA6CSAyOwotCQl1aW50NjRfdCAgICAgICBpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDogICAgICAyOwotCQl1aW50NjRfdAlpX3BpMF9mb3J3YXJkX2ludAkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcGkxX2ZvcndhcmRfaW50CSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTMwOworCXVpbnQ2NF90IGlpX2lpZHNyX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX2xldmVsOjg7CisJCXVpbnQ2NF90IGlfcGlfaWQ6MTsKKwkJdWludDY0X3QgaV9ub2RlOjExOworCQl1aW50NjRfdCBpX3JzdmRfMzo0OworCQl1aW50NjRfdCBpX2VuYWJsZToxOworCQl1aW50NjRfdCBpX3JzdmRfMjozOworCQl1aW50NjRfdCBpX2ludF9zZW50OjI7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjI7CisJCXVpbnQ2NF90IGlfcGkwX2ZvcndhcmRfaW50OjE7CisJCXVpbnQ2NF90IGlfcGkxX2ZvcndhcmRfaW50OjE7CisJCXVpbnQ2NF90IGlfcnN2ZDozMDsKIAl9IGlpX2lpZHNyX2ZsZF9zOwogfSBpaV9paWRzcl91X3Q7CiAKLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGVyZSBhcmUgdHdvIGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLiBUaGlzIHJlZ2lzdGVyIGlzIHVzZWQgICAgICoKICAqIGZvciBtYXRjaGluZyB1cCB0aGUgaW5jb21pbmcgcmVzcG9uc2VzIGZyb20gdGhlIGdyYXBoaWNzIHdpZGdldCB0byAgICoKICAqIHRoZSBwcm9jZXNzb3IgdGhhdCBpbml0aWF0ZWQgdGhlIGdyYXBoaWNzIG9wZXJhdGlvbi4gVGhlICAgICAgICAgICAgICoKICAqIHdyaXRlLXJlc3BvbnNlcyBhcmUgY29udmVydGVkIHRvIGdyYXBoaWNzIGNyZWRpdHMgYW5kIHJldHVybmVkIHRvICAgICoKICAqIHRoZSBwcm9jZXNzb3Igc28gdGhhdCB0aGUgcHJvY2Vzc29yIGludGVyZmFjZSBjYW4gbWFuYWdlIHRoZSBmbG93ICAgICoKICAqIGNvbnRyb2wuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pZ2Z4MF91IHsKLQl1aW50NjRfdAlpaV9pZ2Z4MF9yZWd2YWw7Ci0Jc3RydWN0CXsKLQkJdWludDY0X3QJaV93X251bQkJCSAgOgkgNDsKLQkJdWludDY0X3QgICAgICAgaV9waV9pZCAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKLQkJdWludDY0X3QJaV9uX251bQkJCSAgOgkxMjsKLQkJdWludDY0X3QgICAgICAgaV9wX251bSAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKLQkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA0NjsKKwl1aW50NjRfdCBpaV9pZ2Z4MF9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV93X251bTo0OworCQl1aW50NjRfdCBpX3BpX2lkOjE7CisJCXVpbnQ2NF90IGlfbl9udW06MTI7CisJCXVpbnQ2NF90IGlfcF9udW06MTsKKwkJdWludDY0X3QgaV9yc3ZkOjQ2OwogCX0gaWlfaWdmeDBfZmxkX3M7CiB9IGlpX2lnZngwX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGVyZSBhcmUgdHdvIGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLiBUaGlzIHJlZ2lzdGVyIGlzIHVzZWQgICAgICoKICAqIGZvciBtYXRjaGluZyB1cCB0aGUgaW5jb21pbmcgcmVzcG9uc2VzIGZyb20gdGhlIGdyYXBoaWNzIHdpZGdldCB0byAgICoKICAqIHRoZSBwcm9jZXNzb3IgdGhhdCBpbml0aWF0ZWQgdGhlIGdyYXBoaWNzIG9wZXJhdGlvbi4gVGhlICAgICAgICAgICAgICoKICAqIHdyaXRlLXJlc3BvbnNlcyBhcmUgY29udmVydGVkIHRvIGdyYXBoaWNzIGNyZWRpdHMgYW5kIHJldHVybmVkIHRvICAgICoKICAqIHRoZSBwcm9jZXNzb3Igc28gdGhhdCB0aGUgcHJvY2Vzc29yIGludGVyZmFjZSBjYW4gbWFuYWdlIHRoZSBmbG93ICAgICoKICAqIGNvbnRyb2wuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pZ2Z4MV91IHsKLQl1aW50NjRfdAlpaV9pZ2Z4MV9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfd19udW0JCQkgIDoJIDQ7Ci0JCXVpbnQ2NF90ICAgICAgIGlfcGlfaWQgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7Ci0JCXVpbnQ2NF90CWlfbl9udW0JCQkgIDoJMTI7Ci0JCXVpbnQ2NF90ICAgICAgIGlfcF9udW0gICAgICAgICAgICAgICAgICAgOiAgICAgIDE7Ci0JCXVpbnQ2NF90ICAgICAgIGlfcnN2ZCAgICAgICAgICAgICAgICAgICAgOiAgICAgNDY7CisJdWludDY0X3QgaWlfaWdmeDFfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfd19udW06NDsKKwkJdWludDY0X3QgaV9waV9pZDoxOworCQl1aW50NjRfdCBpX25fbnVtOjEyOworCQl1aW50NjRfdCBpX3BfbnVtOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDo0NjsKIAl9IGlpX2lnZngxX2ZsZF9zOwogfSBpaV9pZ2Z4MV91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhlcmUgYXJlIHR3byBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3RlcnMuIFRoZXNlIHJlZ2lzdGVycyBhcmUgICAgICAqCiAgKiB1c2VkIGFzIHNjcmF0Y2ggcmVnaXN0ZXJzIGZvciBzb2Z0d2FyZSB1c2UuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXNjcjBfdSB7Ci0JdWludDY0X3QJaWlfaXNjcjBfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3NjcmF0Y2ggICAgICAgICAgICAgICAgIDoJNjQ7CisJdWludDY0X3QgaWlfaXNjcjBfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfc2NyYXRjaDo2NDsKIAl9IGlpX2lzY3IwX2ZsZF9zOwogfSBpaV9pc2NyMF91X3Q7CiAKLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGVyZSBhcmUgdHdvIGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVycy4gVGhlc2UgcmVnaXN0ZXJzIGFyZSAgICAgICoKICAqIHVzZWQgYXMgc2NyYXRjaCByZWdpc3RlcnMgZm9yIHNvZnR3YXJlIHVzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pc2NyMV91IHsKLQl1aW50NjRfdAlpaV9pc2NyMV9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfc2NyYXRjaCAgICAgICAgICAgICAgICAgOgk2NDsKKwl1aW50NjRfdCBpaV9pc2NyMV9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9zY3JhdGNoOjY0OwogCX0gaWlfaXNjcjFfZmxkX3M7CiB9IGlpX2lzY3IxX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIHNldmVuIGluc3RhbmNlcyBvZiB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyeSAgICoKICAqIHJlZ2lzdGVycy4gRWFjaCByZWdpc3RlciBtYXBzIGEgU2h1YiBCaWcgV2luZG93IHRvIGEgNDgtYml0ICAgICAgICAgICoKICAqIGFkZHJlc3Mgb24gQ3Jvc3N0YWxrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTU5OSwyMyArNTc2LDIyIEBACiAgKiBDcm9zc3RhbGsgc3BhY2UgYWRkcmVzc2FibGUgYnkgdGhlIFNodWIgaXMgdGh1cyB0aGUgbG93ZXIgICAgICAgICAgICAqCiAgKiA4LUdCeXRlcyBwZXIgd2lkZ2V0IChOLW1vZGUpLCBvbmx5IDxTVVAgPjc8L1NVUD4vPFNVQiA+MzJuZHM8L1NVQj4gICAqCiAgKiBvZiB0aGlzIHNwYWNlIGNhbiBiZSBhY2Nlc3NlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXR0ZTFfdSB7Ci0JdWludDY0X3QJaWlfaXR0ZTFfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX29mZnNldCAgICAgICAgICAgICAgICAgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfd19udW0JCQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlfaW9zcAkJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTUxOworCXVpbnQ2NF90IGlpX2l0dGUxX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX29mZnNldDo1OworCQl1aW50NjRfdCBpX3JzdmRfMTozOworCQl1aW50NjRfdCBpX3dfbnVtOjQ7CisJCXVpbnQ2NF90IGlfaW9zcDoxOworCQl1aW50NjRfdCBpX3JzdmQ6NTE7CiAJfSBpaV9pdHRlMV9mbGRfczsKIH0gaWlfaXR0ZTFfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgc2V2ZW4gaW5zdGFuY2VzIG9mIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5ICAgKgogICogcmVnaXN0ZXJzLiBFYWNoIHJlZ2lzdGVyIG1hcHMgYSBTaHViIEJpZyBXaW5kb3cgdG8gYSA0OC1iaXQgICAgICAgICAgKgogICogYWRkcmVzcyBvbiBDcm9zc3RhbGsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtNjM4LDIzICs2MTQsMjIgQEAKICAqIENyb3NzdGFsayBzcGFjZSBhZGRyZXNzYWJsZSBieSB0aGUgU2h1YiBpcyB0aHVzIHRoZSBsb3dlciAgICAgICAgICAgICoKICAqIDgtR0J5dGVzIHBlciB3aWRnZXQgKE4tbW9kZSksIG9ubHkgPFNVUCA+NzwvU1VQPi88U1VCID4zMm5kczwvU1VCPiAgICoKICAqIG9mIHRoaXMgc3BhY2UgY2FuIGJlIGFjY2Vzc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pdHRlMl91IHsKLQl1aW50NjRfdAlpaV9pdHRlMl9yZWd2YWw7Ci0Jc3RydWN0CXsKLQkJdWludDY0X3QJaV9vZmZzZXQJCSAgOgkgNTsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMzsKLQkJdWludDY0X3QJaV93X251bQkJCSAgOgkgNDsKLQkJdWludDY0X3QJaV9pb3NwCQkJICA6CSAxOwotCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDUxOworCXVpbnQ2NF90IGlpX2l0dGUyX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX29mZnNldDo1OworCQl1aW50NjRfdCBpX3JzdmRfMTozOworCQl1aW50NjRfdCBpX3dfbnVtOjQ7CisJCXVpbnQ2NF90IGlfaW9zcDoxOworCQl1aW50NjRfdCBpX3JzdmQ6NTE7CiAJfSBpaV9pdHRlMl9mbGRfczsKIH0gaWlfaXR0ZTJfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgc2V2ZW4gaW5zdGFuY2VzIG9mIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5ICAgKgogICogcmVnaXN0ZXJzLiBFYWNoIHJlZ2lzdGVyIG1hcHMgYSBTaHViIEJpZyBXaW5kb3cgdG8gYSA0OC1iaXQgICAgICAgICAgKgogICogYWRkcmVzcyBvbiBDcm9zc3RhbGsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtNjc3LDIzICs2NTIsMjIgQEAKICAqIENyb3NzdGFsayBzcGFjZSBhZGRyZXNzYWJsZSBieSB0aGUgU0h1YiBpcyB0aHVzIHRoZSBsb3dlciAgICAgICAgICAgICoKICAqIDgtR0J5dGVzIHBlciB3aWRnZXQgKE4tbW9kZSksIG9ubHkgPFNVUCA+NzwvU1VQPi88U1VCID4zMm5kczwvU1VCPiAgICoKICAqIG9mIHRoaXMgc3BhY2UgY2FuIGJlIGFjY2Vzc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pdHRlM191IHsKLQl1aW50NjRfdAlpaV9pdHRlM19yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfb2Zmc2V0ICAgICAgICAgICAgICAgICAgOgkgNTsKLQkJdWludDY0X3QgICAgICAgaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6ICAgICAgMzsKLQkJdWludDY0X3QgICAgICAgaV93X251bSAgICAgICAgICAgICAgICAgICA6ICAgICAgNDsKLQkJdWludDY0X3QgICAgICAgaV9pb3NwICAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKLQkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA1MTsKKwl1aW50NjRfdCBpaV9pdHRlM19yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9vZmZzZXQ6NTsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MzsKKwkJdWludDY0X3QgaV93X251bTo0OworCQl1aW50NjRfdCBpX2lvc3A6MTsKKwkJdWludDY0X3QgaV9yc3ZkOjUxOwogCX0gaWlfaXR0ZTNfZmxkX3M7CiB9IGlpX2l0dGUzX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIHNldmVuIGluc3RhbmNlcyBvZiB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyeSAgICoKICAqIHJlZ2lzdGVycy4gRWFjaCByZWdpc3RlciBtYXBzIGEgU0h1YiBCaWcgV2luZG93IHRvIGEgNDgtYml0ICAgICAgICAgICoKICAqIGFkZHJlc3Mgb24gQ3Jvc3N0YWxrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTcxNiwyMyArNjkwLDIyIEBACiAgKiBDcm9zc3RhbGsgc3BhY2UgYWRkcmVzc2FibGUgYnkgdGhlIFNIdWIgaXMgdGh1cyB0aGUgbG93ZXIgICAgICAgICAgICAqCiAgKiA4LUdCeXRlcyBwZXIgd2lkZ2V0IChOLW1vZGUpLCBvbmx5IDxTVVAgPjc8L1NVUD4vPFNVQiA+MzJuZHM8L1NVQj4gICAqCiAgKiBvZiB0aGlzIHNwYWNlIGNhbiBiZSBhY2Nlc3NlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXR0ZTRfdSB7Ci0JdWludDY0X3QJaWlfaXR0ZTRfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX29mZnNldCAgICAgICAgICAgICAgICAgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDM7Ci0JCXVpbnQ2NF90ICAgICAgIGlfd19udW0gICAgICAgICAgICAgICAgICAgOiAgICAgIDQ7Ci0JCXVpbnQ2NF90ICAgICAgIGlfaW9zcCAgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7Ci0JCXVpbnQ2NF90ICAgICAgIGlfcnN2ZCAgICAgICAgICAgICAgICAgICAgOiAgICAgNTE7CisJdWludDY0X3QgaWlfaXR0ZTRfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfb2Zmc2V0OjU7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjM7CisJCXVpbnQ2NF90IGlfd19udW06NDsKKwkJdWludDY0X3QgaV9pb3NwOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDo1MTsKIAl9IGlpX2l0dGU0X2ZsZF9zOwogfSBpaV9pdHRlNF91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSBzZXZlbiBpbnN0YW5jZXMgb2YgdHJhbnNsYXRpb24gdGFibGUgZW50cnkgICAqCiAgKiByZWdpc3RlcnMuIEVhY2ggcmVnaXN0ZXIgbWFwcyBhIFNIdWIgQmlnIFdpbmRvdyB0byBhIDQ4LWJpdCAgICAgICAgICAqCiAgKiBhZGRyZXNzIG9uIENyb3NzdGFsay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC03NTUsMjMgKzcyOCwyMiBAQAogICogQ3Jvc3N0YWxrIHNwYWNlIGFkZHJlc3NhYmxlIGJ5IHRoZSBTaHViIGlzIHRodXMgdGhlIGxvd2VyICAgICAgICAgICAgKgogICogOC1HQnl0ZXMgcGVyIHdpZGdldCAoTi1tb2RlKSwgb25seSA8U1VQID43PC9TVVA+LzxTVUIgPjMybmRzPC9TVUI+ICAgKgogICogb2YgdGhpcyBzcGFjZSBjYW4gYmUgYWNjZXNzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2l0dGU1X3UgewotCXVpbnQ2NF90CWlpX2l0dGU1X3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV9vZmZzZXQgICAgICAgICAgICAgICAgICA6CSA1OwotCQl1aW50NjRfdCAgICAgICBpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDogICAgICAzOwotCQl1aW50NjRfdCAgICAgICBpX3dfbnVtICAgICAgICAgICAgICAgICAgIDogICAgICA0OwotCQl1aW50NjRfdCAgICAgICBpX2lvc3AgICAgICAgICAgICAgICAgICAgIDogICAgICAxOwotCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDUxOworCXVpbnQ2NF90IGlpX2l0dGU1X3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX29mZnNldDo1OworCQl1aW50NjRfdCBpX3JzdmRfMTozOworCQl1aW50NjRfdCBpX3dfbnVtOjQ7CisJCXVpbnQ2NF90IGlfaW9zcDoxOworCQl1aW50NjRfdCBpX3JzdmQ6NTE7CiAJfSBpaV9pdHRlNV9mbGRfczsKIH0gaWlfaXR0ZTVfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgc2V2ZW4gaW5zdGFuY2VzIG9mIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5ICAgKgogICogcmVnaXN0ZXJzLiBFYWNoIHJlZ2lzdGVyIG1hcHMgYSBTaHViIEJpZyBXaW5kb3cgdG8gYSA0OC1iaXQgICAgICAgICAgKgogICogYWRkcmVzcyBvbiBDcm9zc3RhbGsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtNzk0LDIzICs3NjYsMjIgQEAKICAqIENyb3NzdGFsayBzcGFjZSBhZGRyZXNzYWJsZSBieSB0aGUgU2h1YiBpcyB0aHVzIHRoZSBsb3dlciAgICAgICAgICAgICoKICAqIDgtR0J5dGVzIHBlciB3aWRnZXQgKE4tbW9kZSksIG9ubHkgPFNVUCA+NzwvU1VQPi88U1VCID4zMm5kczwvU1VCPiAgICoKICAqIG9mIHRoaXMgc3BhY2UgY2FuIGJlIGFjY2Vzc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pdHRlNl91IHsKLQl1aW50NjRfdAlpaV9pdHRlNl9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfb2Zmc2V0ICAgICAgICAgICAgICAgICAgOgkgNTsKLQkJdWludDY0X3QgICAgICAgaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6ICAgICAgMzsKLQkJdWludDY0X3QgICAgICAgaV93X251bSAgICAgICAgICAgICAgICAgICA6ICAgICAgNDsKLQkJdWludDY0X3QgICAgICAgaV9pb3NwICAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKLQkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA1MTsKKwl1aW50NjRfdCBpaV9pdHRlNl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9vZmZzZXQ6NTsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MzsKKwkJdWludDY0X3QgaV93X251bTo0OworCQl1aW50NjRfdCBpX2lvc3A6MTsKKwkJdWludDY0X3QgaV9yc3ZkOjUxOwogCX0gaWlfaXR0ZTZfZmxkX3M7CiB9IGlpX2l0dGU2X3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIHNldmVuIGluc3RhbmNlcyBvZiB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyeSAgICoKICAqIHJlZ2lzdGVycy4gRWFjaCByZWdpc3RlciBtYXBzIGEgU2h1YiBCaWcgV2luZG93IHRvIGEgNDgtYml0ICAgICAgICAgICoKICAqIGFkZHJlc3Mgb24gQ3Jvc3N0YWxrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTgzMywyMyArODA0LDIyIEBACiAgKiBDcm9zc3RhbGsgc3BhY2UgYWRkcmVzc2FibGUgYnkgdGhlIFNIdWIgaXMgdGh1cyB0aGUgbG93ZXIgICAgICAgICAgICAqCiAgKiA4LUdCeXRlcyBwZXIgd2lkZ2V0IChOLW1vZGUpLCBvbmx5IDxTVVAgPjc8L1NVUD4vPFNVQiA+MzJuZHM8L1NVQj4gICAqCiAgKiBvZiB0aGlzIHNwYWNlIGNhbiBiZSBhY2Nlc3NlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXR0ZTdfdSB7Ci0JdWludDY0X3QJaWlfaXR0ZTdfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX29mZnNldCAgICAgICAgICAgICAgICAgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDM7Ci0JCXVpbnQ2NF90ICAgICAgIGlfd19udW0gICAgICAgICAgICAgICAgICAgOiAgICAgIDQ7Ci0JCXVpbnQ2NF90ICAgICAgIGlfaW9zcCAgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7Ci0JCXVpbnQ2NF90ICAgICAgIGlfcnN2ZCAgICAgICAgICAgICAgICAgICAgOiAgICAgNTE7CisJdWludDY0X3QgaWlfaXR0ZTdfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfb2Zmc2V0OjU7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjM7CisJCXVpbnQ2NF90IGlfd19udW06NDsKKwkJdWludDY0X3QgaV9pb3NwOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDo1MTsKIAl9IGlpX2l0dGU3X2ZsZF9zOwogfSBpaV9pdHRlN191X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSA5IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLCBvbmUgcGVyICAgICAgICAqCiAgKiBhY3R1YWwgd2lkZ2V0IGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgU0h1YiBhbmQgQ3Jvc3Nib3cuICAgICAgICAgICAqCiAgKiBOb3RlOiBDcm9zc2JvdyBvbmx5IGhhcyBwb3J0cyBmb3IgV2lkZ2V0cyA4IHRocm91Z2ggRiwgd2lkZ2V0IDAgICAgICAqCkBAIC04NjgsMzMgKzgzOCwzMiBAQAogICogcmVnaXN0ZXI7IHRoZSB3cml0ZSB3aWxsIGNvcnJlY3QgdGhlIEMgZmllbGQgYW5kIGNhcHR1cmUgaXRzIG5ldyAgICAgKgogICogdmFsdWUgaW4gdGhlIGludGVybmFsIHJlZ2lzdGVyLiBFdmVuIGlmIElFQ0xSW0VfUFJCX3hdIGlzIHNldCwgdGhlICAgKgogICogU1BVUl9XUiBiaXQgd2lsbCBwZXJzaXN0IGlmIElQUkJ4IGhhc24ndCB5ZXQgYmVlbiB3cml0dGVuLiAgICAgICAgICAgKgotICogLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogLiAgICAJCQkJCQkJCSoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJiMF91IHsKLQl1aW50NjRfdAlpaV9pcHJiMF9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfYyAgICAgICAgICAgICAgICAgICAgICAgOgkgODsKLQkJdWludDY0X3QJaV9uYQkJCSAgOgkxNDsKLQkJdWludDY0X3QgICAgICAgaV9yc3ZkXzIgICAgICAgICAgICAgICAgICA6ICAgICAgMjsKLQkJdWludDY0X3QJaV9uYgkJCSAgOgkxNDsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9tCQkJICA6CSAyOwotCQl1aW50NjRfdAlpX2YJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfb2ZfY250CQkgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfZXJyb3IJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcmRfdG8JCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfc3B1cl93cgkJICA6CSAxOwotCQl1aW50NjRfdAlpX3NwdXJfcmQJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTExOwotCQl1aW50NjRfdAlpX211bHRfZXJyCQkgIDoJIDE7CisJdWludDY0X3QgaWlfaXByYjBfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfYzo4OworCQl1aW50NjRfdCBpX25hOjE0OworCQl1aW50NjRfdCBpX3JzdmRfMjoyOworCQl1aW50NjRfdCBpX25iOjE0OworCQl1aW50NjRfdCBpX3JzdmRfMToyOworCQl1aW50NjRfdCBpX206MjsKKwkJdWludDY0X3QgaV9mOjE7CisJCXVpbnQ2NF90IGlfb2ZfY250OjU7CisJCXVpbnQ2NF90IGlfZXJyb3I6MTsKKwkJdWludDY0X3QgaV9yZF90bzoxOworCQl1aW50NjRfdCBpX3NwdXJfd3I6MTsKKwkJdWludDY0X3QgaV9zcHVyX3JkOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDoxMTsKKwkJdWludDY0X3QgaV9tdWx0X2VycjoxOwogCX0gaWlfaXByYjBfZmxkX3M7CiB9IGlpX2lwcmIwX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIDkgaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIsIG9uZSBwZXIgICAgICAgICoKICAqIGFjdHVhbCB3aWRnZXQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBTSHViIGFuZCBDcm9zc2Jvdy4gICAgICAgICAgICoKICAqIE5vdGU6IENyb3NzYm93IG9ubHkgaGFzIHBvcnRzIGZvciBXaWRnZXRzIDggdGhyb3VnaCBGLCB3aWRnZXQgMCAgICAgICoKQEAgLTkxMywzMyArODgyLDMyIEBACiAgKiByZWdpc3RlcjsgdGhlIHdyaXRlIHdpbGwgY29ycmVjdCB0aGUgQyBmaWVsZCBhbmQgY2FwdHVyZSBpdHMgbmV3ICAgICAqCiAgKiB2YWx1ZSBpbiB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIuIEV2ZW4gaWYgSUVDTFJbRV9QUkJfeF0gaXMgc2V0LCB0aGUgICAqCiAgKiBTUFVSX1dSIGJpdCB3aWxsIHBlcnNpc3QgaWYgSVBSQnggaGFzbid0IHlldCBiZWVuIHdyaXR0ZW4uICAgICAgICAgICAqCi0gKiAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAuICAgIAkJCQkJCQkJKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcmI4X3UgewotCXVpbnQ2NF90CWlpX2lwcmI4X3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV9jICAgICAgICAgICAgICAgICAgICAgICA6CSA4OwotCQl1aW50NjRfdAlpX25hCQkJICA6CTE0OwotCQl1aW50NjRfdCAgICAgICBpX3JzdmRfMiAgICAgICAgICAgICAgICAgIDogICAgICAyOwotCQl1aW50NjRfdAlpX25iCQkJICA6CTE0OwotCQl1aW50NjRfdCAgICAgICBpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDogICAgICAyOwotCQl1aW50NjRfdCAgICAgICBpX20gICAgICAgICAgICAgICAgICAgICAgIDogICAgICAyOwotCQl1aW50NjRfdCAgICAgICBpX2YgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAxOwotCQl1aW50NjRfdCAgICAgICBpX29mX2NudCAgICAgICAgICAgICAgICAgIDogICAgICA1OwotCQl1aW50NjRfdCAgICAgICBpX2Vycm9yICAgICAgICAgICAgICAgICAgIDogICAgICAxOwotCQl1aW50NjRfdCAgICAgICBpX3JkX3RvICAgICAgICAgICAgICAgICAgIDogICAgICAxOwotCQl1aW50NjRfdCAgICAgICBpX3NwdXJfd3IgICAgICAgICAgICAgICAgIDogICAgICAxOwotCQl1aW50NjRfdAlpX3NwdXJfcmQJCSAgOgkgMTsKLQkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICAxMTsKLQkJdWludDY0X3QJaV9tdWx0X2VycgkJICA6CSAxOworCXVpbnQ2NF90IGlpX2lwcmI4X3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX2M6ODsKKwkJdWludDY0X3QgaV9uYToxNDsKKwkJdWludDY0X3QgaV9yc3ZkXzI6MjsKKwkJdWludDY0X3QgaV9uYjoxNDsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MjsKKwkJdWludDY0X3QgaV9tOjI7CisJCXVpbnQ2NF90IGlfZjoxOworCQl1aW50NjRfdCBpX29mX2NudDo1OworCQl1aW50NjRfdCBpX2Vycm9yOjE7CisJCXVpbnQ2NF90IGlfcmRfdG86MTsKKwkJdWludDY0X3QgaV9zcHVyX3dyOjE7CisJCXVpbnQ2NF90IGlfc3B1cl9yZDoxOworCQl1aW50NjRfdCBpX3JzdmQ6MTE7CisJCXVpbnQ2NF90IGlfbXVsdF9lcnI6MTsKIAl9IGlpX2lwcmI4X2ZsZF9zOwogfSBpaV9pcHJiOF91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSA5IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLCBvbmUgcGVyICAgICAgICAqCiAgKiBhY3R1YWwgd2lkZ2V0IGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgU0h1YiBhbmQgQ3Jvc3Nib3cuICAgICAgICAgICAqCiAgKiBOb3RlOiBDcm9zc2JvdyBvbmx5IGhhcyBwb3J0cyBmb3IgV2lkZ2V0cyA4IHRocm91Z2ggRiwgd2lkZ2V0IDAgICAgICAqCkBAIC05NTgsMzMgKzkyNiwzMiBAQAogICogcmVnaXN0ZXI7IHRoZSB3cml0ZSB3aWxsIGNvcnJlY3QgdGhlIEMgZmllbGQgYW5kIGNhcHR1cmUgaXRzIG5ldyAgICAgKgogICogdmFsdWUgaW4gdGhlIGludGVybmFsIHJlZ2lzdGVyLiBFdmVuIGlmIElFQ0xSW0VfUFJCX3hdIGlzIHNldCwgdGhlICAgKgogICogU1BVUl9XUiBiaXQgd2lsbCBwZXJzaXN0IGlmIElQUkJ4IGhhc24ndCB5ZXQgYmVlbiB3cml0dGVuLiAgICAgICAgICAgKgotICogLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogLiAgICAJCQkJCQkJCSoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJiOV91IHsKLQl1aW50NjRfdAlpaV9pcHJiOV9yZWd2YWw7Ci0Jc3RydWN0CXsKLQkJdWludDY0X3QJaV9jCQkJICA6CSA4OwotCQl1aW50NjRfdAlpX25hCQkJICA6CTE0OwotCQl1aW50NjRfdAlpX3JzdmRfMgkJICA6CSAyOwotCQl1aW50NjRfdAlpX25iCQkJICA6CTE0OwotCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSAyOwotCQl1aW50NjRfdAlpX20JCQkgIDoJIDI7Ci0JCXVpbnQ2NF90CWlfZgkJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9vZl9jbnQJCSAgOgkgNTsKLQkJdWludDY0X3QJaV9lcnJvcgkJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yZF90bwkJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9zcHVyX3dyCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfc3B1cl9yZAkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJMTE7Ci0JCXVpbnQ2NF90CWlfbXVsdF9lcnIJCSAgOgkgMTsKKwl1aW50NjRfdCBpaV9pcHJiOV9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9jOjg7CisJCXVpbnQ2NF90IGlfbmE6MTQ7CisJCXVpbnQ2NF90IGlfcnN2ZF8yOjI7CisJCXVpbnQ2NF90IGlfbmI6MTQ7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjI7CisJCXVpbnQ2NF90IGlfbToyOworCQl1aW50NjRfdCBpX2Y6MTsKKwkJdWludDY0X3QgaV9vZl9jbnQ6NTsKKwkJdWludDY0X3QgaV9lcnJvcjoxOworCQl1aW50NjRfdCBpX3JkX3RvOjE7CisJCXVpbnQ2NF90IGlfc3B1cl93cjoxOworCQl1aW50NjRfdCBpX3NwdXJfcmQ6MTsKKwkJdWludDY0X3QgaV9yc3ZkOjExOworCQl1aW50NjRfdCBpX211bHRfZXJyOjE7CiAJfSBpaV9pcHJiOV9mbGRfczsKIH0gaWlfaXByYjlfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgOSBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlciwgb25lIHBlciAgICAgICAgKgogICogYWN0dWFsIHdpZGdldCBpbiB0aGlzIGltcGxlbWVudGF0aW9uIG9mIFNIdWIgYW5kIENyb3NzYm93LiAgICAgICAgKgogICogTm90ZTogQ3Jvc3Nib3cgb25seSBoYXMgcG9ydHMgZm9yIFdpZGdldHMgOCB0aHJvdWdoIEYsIHdpZGdldCAwICAgICAgKgpAQCAtMTAwMywzMyArOTcwLDMyIEBACiAgKiByZWdpc3RlcjsgdGhlIHdyaXRlIHdpbGwgY29ycmVjdCB0aGUgQyBmaWVsZCBhbmQgY2FwdHVyZSBpdHMgbmV3ICAgICAqCiAgKiB2YWx1ZSBpbiB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIuIEV2ZW4gaWYgSUVDTFJbRV9QUkJfeF0gaXMgc2V0LCB0aGUgICAqCiAgKiBTUFVSX1dSIGJpdCB3aWxsIHBlcnNpc3QgaWYgSVBSQnggaGFzbid0IHlldCBiZWVuIHdyaXR0ZW4uICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJiYV91IHsKLQl1aW50NjRfdAlpaV9pcHJiYV9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfYyAgICAgICAgICAgICAgICAgICAgICAgOgkgODsKLQkJdWludDY0X3QJaV9uYQkJCSAgOgkxNDsKLQkJdWludDY0X3QgICAgICAgaV9yc3ZkXzIgICAgICAgICAgICAgICAgICA6ICAgICAgMjsKLQkJdWludDY0X3QJaV9uYgkJCSAgOgkxNDsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9tCQkJICA6CSAyOwotCQl1aW50NjRfdAlpX2YJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfb2ZfY250CQkgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfZXJyb3IJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcmRfdG8JCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfc3B1cl93cgkJICA6CSAxOwotCQl1aW50NjRfdAlpX3NwdXJfcmQJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTExOwotCQl1aW50NjRfdAlpX211bHRfZXJyCQkgIDoJIDE7CisJdWludDY0X3QgaWlfaXByYmFfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfYzo4OworCQl1aW50NjRfdCBpX25hOjE0OworCQl1aW50NjRfdCBpX3JzdmRfMjoyOworCQl1aW50NjRfdCBpX25iOjE0OworCQl1aW50NjRfdCBpX3JzdmRfMToyOworCQl1aW50NjRfdCBpX206MjsKKwkJdWludDY0X3QgaV9mOjE7CisJCXVpbnQ2NF90IGlfb2ZfY250OjU7CisJCXVpbnQ2NF90IGlfZXJyb3I6MTsKKwkJdWludDY0X3QgaV9yZF90bzoxOworCQl1aW50NjRfdCBpX3NwdXJfd3I6MTsKKwkJdWludDY0X3QgaV9zcHVyX3JkOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDoxMTsKKwkJdWludDY0X3QgaV9tdWx0X2VycjoxOwogCX0gaWlfaXByYmFfZmxkX3M7CiB9IGlpX2lwcmJhX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIDkgaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIsIG9uZSBwZXIgICAgICAgICoKICAqIGFjdHVhbCB3aWRnZXQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBTSHViIGFuZCBDcm9zc2Jvdy4gICAgICAgICAgICoKICAqIE5vdGU6IENyb3NzYm93IG9ubHkgaGFzIHBvcnRzIGZvciBXaWRnZXRzIDggdGhyb3VnaCBGLCB3aWRnZXQgMCAgICAgICoKQEAgLTEwNDgsMzMgKzEwMTQsMzIgQEAKICAqIHJlZ2lzdGVyOyB0aGUgd3JpdGUgd2lsbCBjb3JyZWN0IHRoZSBDIGZpZWxkIGFuZCBjYXB0dXJlIGl0cyBuZXcgICAgICoKICAqIHZhbHVlIGluIHRoZSBpbnRlcm5hbCByZWdpc3Rlci4gRXZlbiBpZiBJRUNMUltFX1BSQl94XSBpcyBzZXQsIHRoZSAgICoKICAqIFNQVVJfV1IgYml0IHdpbGwgcGVyc2lzdCBpZiBJUFJCeCBoYXNuJ3QgeWV0IGJlZW4gd3JpdHRlbi4gICAgICAgICAgICoKLSAqIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIC4gICAgCQkJCQkJCQkqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXByYmJfdSB7Ci0JdWludDY0X3QJaWlfaXByYmJfcmVndmFsOwotCXN0cnVjdAl7Ci0JCXVpbnQ2NF90CWlfYwkJCSAgOgkgODsKLQkJdWludDY0X3QJaV9uYQkJCSAgOgkxNDsKLQkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9uYgkJCSAgOgkxNDsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9tCQkJICA6CSAyOwotCQl1aW50NjRfdAlpX2YJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfb2ZfY250CQkgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfZXJyb3IJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcmRfdG8JCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfc3B1cl93cgkJICA6CSAxOwotCQl1aW50NjRfdAlpX3NwdXJfcmQJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTExOwotCQl1aW50NjRfdAlpX211bHRfZXJyCQkgIDoJIDE7CisJdWludDY0X3QgaWlfaXByYmJfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfYzo4OworCQl1aW50NjRfdCBpX25hOjE0OworCQl1aW50NjRfdCBpX3JzdmRfMjoyOworCQl1aW50NjRfdCBpX25iOjE0OworCQl1aW50NjRfdCBpX3JzdmRfMToyOworCQl1aW50NjRfdCBpX206MjsKKwkJdWludDY0X3QgaV9mOjE7CisJCXVpbnQ2NF90IGlfb2ZfY250OjU7CisJCXVpbnQ2NF90IGlfZXJyb3I6MTsKKwkJdWludDY0X3QgaV9yZF90bzoxOworCQl1aW50NjRfdCBpX3NwdXJfd3I6MTsKKwkJdWludDY0X3QgaV9zcHVyX3JkOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDoxMTsKKwkJdWludDY0X3QgaV9tdWx0X2VycjoxOwogCX0gaWlfaXByYmJfZmxkX3M7CiB9IGlpX2lwcmJiX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIDkgaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIsIG9uZSBwZXIgICAgICAgICoKICAqIGFjdHVhbCB3aWRnZXQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBTSHViIGFuZCBDcm9zc2Jvdy4gICAgICAgICAgICoKICAqIE5vdGU6IENyb3NzYm93IG9ubHkgaGFzIHBvcnRzIGZvciBXaWRnZXRzIDggdGhyb3VnaCBGLCB3aWRnZXQgMCAgICAgICoKQEAgLTEwOTMsMzMgKzEwNTgsMzIgQEAKICAqIHJlZ2lzdGVyOyB0aGUgd3JpdGUgd2lsbCBjb3JyZWN0IHRoZSBDIGZpZWxkIGFuZCBjYXB0dXJlIGl0cyBuZXcgICAgICoKICAqIHZhbHVlIGluIHRoZSBpbnRlcm5hbCByZWdpc3Rlci4gRXZlbiBpZiBJRUNMUltFX1BSQl94XSBpcyBzZXQsIHRoZSAgICoKICAqIFNQVVJfV1IgYml0IHdpbGwgcGVyc2lzdCBpZiBJUFJCeCBoYXNuJ3QgeWV0IGJlZW4gd3JpdHRlbi4gICAgICAgICAgICoKLSAqIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIC4gICAgCQkJCQkJCQkqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXByYmNfdSB7Ci0JdWludDY0X3QJaWlfaXByYmNfcmVndmFsOwotCXN0cnVjdAl7Ci0JCXVpbnQ2NF90CWlfYwkJCSAgOgkgODsKLQkJdWludDY0X3QJaV9uYQkJCSAgOgkxNDsKLQkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9uYgkJCSAgOgkxNDsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9tCQkJICA6CSAyOwotCQl1aW50NjRfdAlpX2YJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfb2ZfY250CQkgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfZXJyb3IJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcmRfdG8JCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfc3B1cl93cgkJICA6CSAxOwotCQl1aW50NjRfdAlpX3NwdXJfcmQJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTExOwotCQl1aW50NjRfdAlpX211bHRfZXJyCQkgIDoJIDE7CisJdWludDY0X3QgaWlfaXByYmNfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfYzo4OworCQl1aW50NjRfdCBpX25hOjE0OworCQl1aW50NjRfdCBpX3JzdmRfMjoyOworCQl1aW50NjRfdCBpX25iOjE0OworCQl1aW50NjRfdCBpX3JzdmRfMToyOworCQl1aW50NjRfdCBpX206MjsKKwkJdWludDY0X3QgaV9mOjE7CisJCXVpbnQ2NF90IGlfb2ZfY250OjU7CisJCXVpbnQ2NF90IGlfZXJyb3I6MTsKKwkJdWludDY0X3QgaV9yZF90bzoxOworCQl1aW50NjRfdCBpX3NwdXJfd3I6MTsKKwkJdWludDY0X3QgaV9zcHVyX3JkOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDoxMTsKKwkJdWludDY0X3QgaV9tdWx0X2VycjoxOwogCX0gaWlfaXByYmNfZmxkX3M7CiB9IGlpX2lwcmJjX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIDkgaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIsIG9uZSBwZXIgICAgICAgICoKICAqIGFjdHVhbCB3aWRnZXQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBTSHViIGFuZCBDcm9zc2Jvdy4gICAgICAgICAgICoKICAqIE5vdGU6IENyb3NzYm93IG9ubHkgaGFzIHBvcnRzIGZvciBXaWRnZXRzIDggdGhyb3VnaCBGLCB3aWRnZXQgMCAgICAgICoKQEAgLTExMzgsMzMgKzExMDIsMzIgQEAKICAqIHJlZ2lzdGVyOyB0aGUgd3JpdGUgd2lsbCBjb3JyZWN0IHRoZSBDIGZpZWxkIGFuZCBjYXB0dXJlIGl0cyBuZXcgICAgICoKICAqIHZhbHVlIGluIHRoZSBpbnRlcm5hbCByZWdpc3Rlci4gRXZlbiBpZiBJRUNMUltFX1BSQl94XSBpcyBzZXQsIHRoZSAgICoKICAqIFNQVVJfV1IgYml0IHdpbGwgcGVyc2lzdCBpZiBJUFJCeCBoYXNuJ3QgeWV0IGJlZW4gd3JpdHRlbi4gICAgICAgICAgICoKLSAqIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIC4gICAgCQkJCQkJCQkqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXByYmRfdSB7Ci0JdWludDY0X3QJaWlfaXByYmRfcmVndmFsOwotCXN0cnVjdAl7Ci0JCXVpbnQ2NF90CWlfYwkJCSAgOgkgODsKLQkJdWludDY0X3QJaV9uYQkJCSAgOgkxNDsKLQkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9uYgkJCSAgOgkxNDsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9tCQkJICA6CSAyOwotCQl1aW50NjRfdAlpX2YJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfb2ZfY250CQkgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfZXJyb3IJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcmRfdG8JCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfc3B1cl93cgkJICA6CSAxOwotCQl1aW50NjRfdAlpX3NwdXJfcmQJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTExOwotCQl1aW50NjRfdAlpX211bHRfZXJyCQkgIDoJIDE7CisJdWludDY0X3QgaWlfaXByYmRfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfYzo4OworCQl1aW50NjRfdCBpX25hOjE0OworCQl1aW50NjRfdCBpX3JzdmRfMjoyOworCQl1aW50NjRfdCBpX25iOjE0OworCQl1aW50NjRfdCBpX3JzdmRfMToyOworCQl1aW50NjRfdCBpX206MjsKKwkJdWludDY0X3QgaV9mOjE7CisJCXVpbnQ2NF90IGlfb2ZfY250OjU7CisJCXVpbnQ2NF90IGlfZXJyb3I6MTsKKwkJdWludDY0X3QgaV9yZF90bzoxOworCQl1aW50NjRfdCBpX3NwdXJfd3I6MTsKKwkJdWludDY0X3QgaV9zcHVyX3JkOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDoxMTsKKwkJdWludDY0X3QgaV9tdWx0X2VycjoxOwogCX0gaWlfaXByYmRfZmxkX3M7CiB9IGlpX2lwcmJkX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIDkgaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIsIG9uZSBwZXIgICAgICAgICoKICAqIGFjdHVhbCB3aWRnZXQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBTSHViIGFuZCBDcm9zc2Jvdy4gICAgICAgICAgICoKICAqIE5vdGU6IENyb3NzYm93IG9ubHkgaGFzIHBvcnRzIGZvciBXaWRnZXRzIDggdGhyb3VnaCBGLCB3aWRnZXQgMCAgICAgICoKQEAgLTExODMsMzMgKzExNDYsMzIgQEAKICAqIHJlZ2lzdGVyOyB0aGUgd3JpdGUgd2lsbCBjb3JyZWN0IHRoZSBDIGZpZWxkIGFuZCBjYXB0dXJlIGl0cyBuZXcgICAgICoKICAqIHZhbHVlIGluIHRoZSBpbnRlcm5hbCByZWdpc3Rlci4gRXZlbiBpZiBJRUNMUltFX1BSQl94XSBpcyBzZXQsIHRoZSAgICoKICAqIFNQVVJfV1IgYml0IHdpbGwgcGVyc2lzdCBpZiBJUFJCeCBoYXNuJ3QgeWV0IGJlZW4gd3JpdHRlbi4gICAgICAgICAgICoKLSAqIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIC4gICAgCQkJCQkJCQkqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXByYmVfdSB7Ci0JdWludDY0X3QJaWlfaXByYmVfcmVndmFsOwotCXN0cnVjdAl7Ci0JCXVpbnQ2NF90CWlfYwkJCSAgOgkgODsKLQkJdWludDY0X3QJaV9uYQkJCSAgOgkxNDsKLQkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9uYgkJCSAgOgkxNDsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9tCQkJICA6CSAyOwotCQl1aW50NjRfdAlpX2YJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfb2ZfY250CQkgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfZXJyb3IJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcmRfdG8JCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfc3B1cl93cgkJICA6CSAxOwotCQl1aW50NjRfdAlpX3NwdXJfcmQJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTExOwotCQl1aW50NjRfdAlpX211bHRfZXJyCQkgIDoJIDE7CisJdWludDY0X3QgaWlfaXByYmVfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfYzo4OworCQl1aW50NjRfdCBpX25hOjE0OworCQl1aW50NjRfdCBpX3JzdmRfMjoyOworCQl1aW50NjRfdCBpX25iOjE0OworCQl1aW50NjRfdCBpX3JzdmRfMToyOworCQl1aW50NjRfdCBpX206MjsKKwkJdWludDY0X3QgaV9mOjE7CisJCXVpbnQ2NF90IGlfb2ZfY250OjU7CisJCXVpbnQ2NF90IGlfZXJyb3I6MTsKKwkJdWludDY0X3QgaV9yZF90bzoxOworCQl1aW50NjRfdCBpX3NwdXJfd3I6MTsKKwkJdWludDY0X3QgaV9zcHVyX3JkOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDoxMTsKKwkJdWludDY0X3QgaV9tdWx0X2VycjoxOwogCX0gaWlfaXByYmVfZmxkX3M7CiB9IGlpX2lwcmJlX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgVGhlcmUgYXJlIDkgaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIsIG9uZSBwZXIgICAgICAgICoKICAqIGFjdHVhbCB3aWRnZXQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBTaHViIGFuZCBDcm9zc2Jvdy4gICAgICAgICAgICoKICAqIE5vdGU6IENyb3NzYm93IG9ubHkgaGFzIHBvcnRzIGZvciBXaWRnZXRzIDggdGhyb3VnaCBGLCB3aWRnZXQgMCAgICAgICoKQEAgLTEyMjgsMzMgKzExOTAsMzIgQEAKICAqIHJlZ2lzdGVyOyB0aGUgd3JpdGUgd2lsbCBjb3JyZWN0IHRoZSBDIGZpZWxkIGFuZCBjYXB0dXJlIGl0cyBuZXcgICAgICoKICAqIHZhbHVlIGluIHRoZSBpbnRlcm5hbCByZWdpc3Rlci4gRXZlbiBpZiBJRUNMUltFX1BSQl94XSBpcyBzZXQsIHRoZSAgICoKICAqIFNQVVJfV1IgYml0IHdpbGwgcGVyc2lzdCBpZiBJUFJCeCBoYXNuJ3QgeWV0IGJlZW4gd3JpdHRlbi4gICAgICAgICAgICoKLSAqIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIC4gICAgCQkJCQkJCQkqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXByYmZfdSB7Ci0gICAgICAgIHVpbnQ2NF90ICAgICAgIGlpX2lwcmJmX3JlZ3ZhbDsKLSAgICAgICAgc3RydWN0ICB7Ci0gICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV9jICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgODsKLSAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX25hICAgICAgICAgICAgICAgICAgICAgIDogICAgIDE0OwotICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfcnN2ZF8yICAgICAgICAgICAgICAgICAgOiAgICAgIDI7Ci0gICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV9uYiAgICAgICAgICAgICAgICAgICAgICA6ICAgICAxNDsKLSAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDogICAgICAyOwotICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfbSAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgIDI7Ci0gICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV9mICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKLSAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX29mX2NudCAgICAgICAgICAgICAgICAgIDogICAgICA1OwotICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfZXJyb3IgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7Ci0gICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV9yZF90byAgICAgICAgICAgICAgICAgICA6ICAgICAgMTsKLSAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX3NwdXJfd3IgICAgICAgICAgICAgICAgIDogICAgICAxOwotICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfc3B1cl9yZCAgICAgICAgICAgICAgICAgOiAgICAgIDE7Ci0gICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICAxMTsKLSAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX211bHRfZXJyICAgICAgICAgICAgICAgIDogICAgICAxOwotICAgICAgICB9IGlpX2lwcmJlX2ZsZF9zOworCXVpbnQ2NF90IGlpX2lwcmJmX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX2M6ODsKKwkJdWludDY0X3QgaV9uYToxNDsKKwkJdWludDY0X3QgaV9yc3ZkXzI6MjsKKwkJdWludDY0X3QgaV9uYjoxNDsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MjsKKwkJdWludDY0X3QgaV9tOjI7CisJCXVpbnQ2NF90IGlfZjoxOworCQl1aW50NjRfdCBpX29mX2NudDo1OworCQl1aW50NjRfdCBpX2Vycm9yOjE7CisJCXVpbnQ2NF90IGlfcmRfdG86MTsKKwkJdWludDY0X3QgaV9zcHVyX3dyOjE7CisJCXVpbnQ2NF90IGlfc3B1cl9yZDoxOworCQl1aW50NjRfdCBpX3JzdmQ6MTE7CisJCXVpbnQ2NF90IGlfbXVsdF9lcnI6MTsKKwl9IGlpX2lwcmJlX2ZsZF9zOwogfSBpaV9pcHJiZl91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhpcyByZWdpc3RlciBzcGVjaWZpZXMgdGhlIHRpbWVvdXQgdmFsdWUgdG8gdXNlIGZvciBtb25pdG9yaW5nICAgICAqCiAgKiBDcm9zc3RhbGsgY3JlZGl0cyB3aGljaCBhcmUgdXNlZCBvdXRib3VuZCB0byBDcm9zc3RhbGsuIEFuICAgICAgICAgICAqCiAgKiBpbnRlcm5hbCBjb3VudGVyIGNhbGxlZCB0aGUgQ3Jvc3N0YWxrIENyZWRpdCBUaW1lb3V0IENvdW50ZXIgICAgICAgICAqCkBAIC0xMjY3LDIwICsxMjI4LDE5IEBACiAgKiBDcm9zc3RhbGsgQ3JlZGl0IFRpbWVvdXQgaGFzIG9jY3VycmVkLiBUaGUgaW50ZXJuYWwgY291bnRlciBpcyBub3QgICAqCiAgKiByZWFkYWJsZSBmcm9tIHNvZnR3YXJlLCBhbmQgc3RvcHMgY291bnRpbmcgYXQgaXRzIG1heGltdW0gdmFsdWUsICAgICAqCiAgKiBzbyBpdCBjYW5ub3QgY2F1c2UgbW9yZSB0aGFuIG9uZSBpbnRlcnJ1cHQuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXhjY191IHsKLQl1aW50NjRfdAlpaV9peGNjX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV90aW1lX291dCAgICAgICAgICAgICAgICA6CTI2OwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJMzg7CisJdWludDY0X3QgaWlfaXhjY19yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV90aW1lX291dDoyNjsKKwkJdWludDY0X3QgaV9yc3ZkOjM4OwogCX0gaWlfaXhjY19mbGRfczsKIH0gaWlfaXhjY191X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIFRoaXMgcmVnaXN0ZXIgcXVhbGlmaWVzIGFsbCB0aGUgUElPIGFuZCBETUEgICAgICAgICAgICAqCiAgKiBvcGVyYXRpb25zIGxhdW5jaGVkIGZyb20gd2lkZ2V0IDAgdG93YXJkcyB0aGUgU0h1Yi4gSW4gICAgICAgICAgICAgICAqCiAgKiBhZGRpdGlvbiwgaXQgYWxzbyBxdWFsaWZpZXMgYWNjZXNzZXMgYnkgdGhlIEJURSBzdHJlYW1zLiAgICAgICAgICAgICAqCkBAIC0xMjkyLDI3ICsxMjUyLDI1IEBACiAgKiB0aGUgV3hfSUFDIGZpZWxkLiBUaGUgYml0cyBpbiB0aGlzIGZpZWxkIGFyZSBzZXQgYnkgd3JpdGluZyBhIDEgdG8gICAqCiAgKiB0aGVtLiBJbmNvbWluZyByZXBsaWVzIGZyb20gQ3Jvc3N0YWxrIGFyZSBub3Qgc3ViamVjdCB0byB0aGlzICAgICAgICAqCiAgKiBhY2Nlc3MgY29udHJvbCBtZWNoYW5pc20uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaW1lbV91IHsKLQl1aW50NjRfdAlpaV9pbWVtX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV93MF9lc2QgICAgICAgICAgICAgICAgICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmRfMwkJICA6CSAzOwotCQl1aW50NjRfdAlpX2IwX2VzZAkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmRfMgkJICA6CSAzOwotCQl1aW50NjRfdAlpX2IxX2VzZAkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSAzOwotCQl1aW50NjRfdAlpX2Nscl9wcmVjaXNlCQkgIDoJIDE7Ci0JCXVpbnQ2NF90ICAgICAgIGlfcnN2ZCAgICAgICAgICAgICAgICAgICAgOiAgICAgNTE7CisJdWludDY0X3QgaWlfaW1lbV9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV93MF9lc2Q6MTsKKwkJdWludDY0X3QgaV9yc3ZkXzM6MzsKKwkJdWludDY0X3QgaV9iMF9lc2Q6MTsKKwkJdWludDY0X3QgaV9yc3ZkXzI6MzsKKwkJdWludDY0X3QgaV9iMV9lc2Q6MTsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MzsKKwkJdWludDY0X3QgaV9jbHJfcHJlY2lzZToxOworCQl1aW50NjRfdCBpX3JzdmQ6NTE7CiAJfSBpaV9pbWVtX2ZsZF9zOwogfSBpaV9pbWVtX3VfdDsKIAotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogRGVzY3JpcHRpb246ICBUaGlzIHJlZ2lzdGVyIHNwZWNpZmllcyB0aGUgdGltZW91dCB2YWx1ZSB0byB1c2UgZm9yICAgKgogICogbW9uaXRvcmluZyBDcm9zc3RhbGsgdGFpbCBmbGl0cyBjb21pbmcgaW50byB0aGUgU2h1YiBpbiB0aGUgICAgICAgICAgKgogICogVEFJTF9UTyBmaWVsZC4gQW4gaW50ZXJuYWwgY291bnRlciBhc3NvY2lhdGVkIHdpdGggdGhpcyByZWdpc3RlciAgICAgKgpAQCAtMTMzMiw5MCArMTI5MCw4NyBAQAogICogdGhlIHZhbHVlIGluIHRoZSBSUlNQX1RPIGZpZWxkLCBhIFJlYWQgUmVzcG9uc2UgVGltZW91dCBoYXMgICAgICAgICAgKgogICogb2NjdXJyZWQsIGFuZCBlcnJvciBoYW5kbGluZyBvY2N1cnMgYXMgZGVzY3JpYmVkIGluIHRoZSBFcnJvciAgICAgICAgKgogICogSGFuZGxpbmcgc2VjdGlvbiBvZiB0aGlzIGRvY3VtZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2l4dHRfdSB7Ci0JdWludDY0X3QJaWlfaXh0dF9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfdGFpbF90byAgICAgICAgICAgICAgICAgOgkyNjsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgNjsKLQkJdWludDY0X3QJaV9ycnNwX3BzCQkgIDoJMjM7Ci0JCXVpbnQ2NF90CWlfcnJzcF90bwkJICA6CSA1OwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDQ7CisJdWludDY0X3QgaWlfaXh0dF9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV90YWlsX3RvOjI2OworCQl1aW50NjRfdCBpX3JzdmRfMTo2OworCQl1aW50NjRfdCBpX3Jyc3BfcHM6MjM7CisJCXVpbnQ2NF90IGlfcnJzcF90bzo1OworCQl1aW50NjRfdCBpX3JzdmQ6NDsKIAl9IGlpX2l4dHRfZmxkX3M7CiB9IGlpX2l4dHRfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIFdyaXRpbmcgYSAxIHRvIHRoZSBmaWVsZHMgb2YgdGhpcyByZWdpc3RlciBjbGVhcnMgdGhlIGFwcHJvcHJpYXRlICAgKgogICogZXJyb3IgYml0cyBpbiBvdGhlciBhcmVhcyBvZiBTSHViLiBOb3RlIHRoYXQgd2hlbiB0aGUgICAgICAgICAgICAgICAgKgogICogRV9QUkJfeCBiaXRzIGFyZSB1c2VkIHRvIGNsZWFyIGVycm9yIGJpdHMgaW4gUFJCIHJlZ2lzdGVycywgICAgICAgICAgKgogICogU1BVUl9SRCBhbmQgU1BVUl9XUiBtYXkgcGVyc2lzdCwgYmVjYXVzZSB0aGV5IHJlcXVpcmUgYWRkaXRpb25hbCAgICAgKgogICogYWN0aW9uIHRvIGNsZWFyIHRoZW0uIFNlZSB0aGUgSVBSQnggYW5kIElYU1MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKgogICogc3BlY2lmaWNhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2llY2xyX3UgewotCXVpbnQ2NF90CWlpX2llY2xyX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV9lX3ByYl8wICAgICAgICAgICAgICAgICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDc7Ci0JCXVpbnQ2NF90CWlfZV9wcmJfOAkJICA6CSAxOwotCQl1aW50NjRfdAlpX2VfcHJiXzkJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9lX3ByYl9hCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfZV9wcmJfYgkJICA6CSAxOwotCQl1aW50NjRfdAlpX2VfcHJiX2MJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9lX3ByYl9kCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfZV9wcmJfZQkJICA6CSAxOwotCQl1aW50NjRfdAlpX2VfcHJiX2YJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9lX2NyYXp5CQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfZV9idGVfMAkJICA6CSAxOwotCQl1aW50NjRfdAlpX2VfYnRlXzEJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yZXNlcnZlZF8xCQkgIDoJMTA7Ci0JCXVpbnQ2NF90CWlfc3B1cl9yZF9oZHIJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9jYW1faW50cl90bwkJICA6CSAxOwotCQl1aW50NjRfdAlpX2NhbV9vdmVyZmxvdwkJICA6CSAxOwotCQl1aW50NjRfdAlpX2NhbV9yZWFkX21pc3MJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9pb3FfcmVwX3VuZGVyZmxvdwkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfaW9xX3JlcV91bmRlcmZsb3cJICA6CSAxOwotCQl1aW50NjRfdAlpX2lvcV9yZXBfb3ZlcmZsb3cJICA6CSAxOwotCQl1aW50NjRfdAlpX2lvcV9yZXFfb3ZlcmZsb3cJICA6CSAxOwotCQl1aW50NjRfdAlpX2lpcV9yZXBfb3ZlcmZsb3cJICA6CSAxOwotCQl1aW50NjRfdAlpX2lpcV9yZXFfb3ZlcmZsb3cJICA6CSAxOwotCQl1aW50NjRfdAlpX2lpX3huX3JlcF9jcmVkX292ZXJmbG93IDoJIDE7Ci0JCXVpbnQ2NF90CWlfaWlfeG5fcmVxX2NyZWRfb3ZlcmZsb3cgOgkgMTsKLQkJdWludDY0X3QJaV9paV94bl9pbnZhbGlkX2NtZAkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfeG5faWlfaW52YWxpZF9jbWQJICA6CSAxOwotCQl1aW50NjRfdAlpX3Jlc2VydmVkXzIJCSAgOgkyMTsKKwl1aW50NjRfdCBpaV9pZWNscl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9lX3ByYl8wOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDo3OworCQl1aW50NjRfdCBpX2VfcHJiXzg6MTsKKwkJdWludDY0X3QgaV9lX3ByYl85OjE7CisJCXVpbnQ2NF90IGlfZV9wcmJfYToxOworCQl1aW50NjRfdCBpX2VfcHJiX2I6MTsKKwkJdWludDY0X3QgaV9lX3ByYl9jOjE7CisJCXVpbnQ2NF90IGlfZV9wcmJfZDoxOworCQl1aW50NjRfdCBpX2VfcHJiX2U6MTsKKwkJdWludDY0X3QgaV9lX3ByYl9mOjE7CisJCXVpbnQ2NF90IGlfZV9jcmF6eToxOworCQl1aW50NjRfdCBpX2VfYnRlXzA6MTsKKwkJdWludDY0X3QgaV9lX2J0ZV8xOjE7CisJCXVpbnQ2NF90IGlfcmVzZXJ2ZWRfMToxMDsKKwkJdWludDY0X3QgaV9zcHVyX3JkX2hkcjoxOworCQl1aW50NjRfdCBpX2NhbV9pbnRyX3RvOjE7CisJCXVpbnQ2NF90IGlfY2FtX292ZXJmbG93OjE7CisJCXVpbnQ2NF90IGlfY2FtX3JlYWRfbWlzczoxOworCQl1aW50NjRfdCBpX2lvcV9yZXBfdW5kZXJmbG93OjE7CisJCXVpbnQ2NF90IGlfaW9xX3JlcV91bmRlcmZsb3c6MTsKKwkJdWludDY0X3QgaV9pb3FfcmVwX292ZXJmbG93OjE7CisJCXVpbnQ2NF90IGlfaW9xX3JlcV9vdmVyZmxvdzoxOworCQl1aW50NjRfdCBpX2lpcV9yZXBfb3ZlcmZsb3c6MTsKKwkJdWludDY0X3QgaV9paXFfcmVxX292ZXJmbG93OjE7CisJCXVpbnQ2NF90IGlfaWlfeG5fcmVwX2NyZWRfb3ZlcmZsb3c6MTsKKwkJdWludDY0X3QgaV9paV94bl9yZXFfY3JlZF9vdmVyZmxvdzoxOworCQl1aW50NjRfdCBpX2lpX3huX2ludmFsaWRfY21kOjE7CisJCXVpbnQ2NF90IGlfeG5faWlfaW52YWxpZF9jbWQ6MTsKKwkJdWludDY0X3QgaV9yZXNlcnZlZF8yOjIxOwogCX0gaWlfaWVjbHJfZmxkX3M7CiB9IGlpX2llY2xyX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGlzIHJlZ2lzdGVyIGNvbnRyb2xzIGJvdGggQlRFcy4gU09GVF9SRVNFVCBpcyBpbnRlbmRlZCBmb3IgICAgICAgICoKICAqIHJlY292ZXJ5IGFmdGVyIGFuIGVycm9yLiBDT1VOVCBjb250cm9scyB0aGUgdG90YWwgbnVtYmVyIG9mIENSQnMgICAgICoKICAqIHRoYXQgYm90aCBCVEVzIChjb21iaW5lZCkgY2FuIHVzZSwgd2hpY2ggYWZmZWN0cyB0b3RhbCBCVEUgICAgICAgICAgICoKICAqIGJhbmR3aWR0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pYmNyX3UgewotCXVpbnQ2NF90CWlpX2liY3JfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX2NvdW50ICAgICAgICAgICAgICAgICAgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlfc29mdF9yZXNldAkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJNTU7CisJdWludDY0X3QgaWlfaWJjcl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9jb3VudDo0OworCQl1aW50NjRfdCBpX3JzdmRfMTo0OworCQl1aW50NjRfdCBpX3NvZnRfcmVzZXQ6MTsKKwkJdWludDY0X3QgaV9yc3ZkOjU1OwogCX0gaWlfaWJjcl9mbGRfczsKIH0gaWlfaWJjcl91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgaGVhZGVyIG9mIGEgc3B1cmlvdXMgcmVhZCByZXNwb25zZSAgICAgICAqCiAgKiByZWNlaXZlZCBmcm9tIENyb3NzdGFsay4gQSBzcHVyaW91cyByZWFkIHJlc3BvbnNlIGlzIGRlZmluZWQgYXMgYSAgICAqCiAgKiByZWFkIHJlc3BvbnNlIHJlY2VpdmVkIGJ5IElJIGZyb20gYSB3aWRnZXQgZm9yIHdoaWNoICgxKSB0aGUgU0lETiAgICAqCkBAIC0xNDQwLDQ5ICsxMzk1LDQ3IEBACiAgKiB3aWxsIGJlIHNldC4gQW55IFNQVVJfUkQgYml0cyBpbiBhbnkgb3RoZXIgUFJCIHJlZ2lzdGVycyBpbmRpY2F0ZSAgICAqCiAgKiBzcHVyaW91cyBtZXNzYWdlcyBmcm9tIG90aGVyIHdpZGV0cyB3aGljaCB3ZXJlIGRldGVjdGVkIGFmdGVyIHRoZSAgICAqCiAgKiBoZWFkZXIgd2FzIGNhcHR1cmVkLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXhzbV91IHsKLQl1aW50NjRfdAlpaV9peHNtX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV9ieXRlX2VuICAgICAgICAgICAgICAgICA6CTMyOwotCQl1aW50NjRfdAlpX3Jlc2VydmVkCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfdGFnCQkJICA6CSAzOwotCQl1aW50NjRfdAlpX2FsdF9wYWN0eXAJCSAgOgkgNDsKLQkJdWludDY0X3QJaV9ibwkJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9lcnJvcgkJCSAgOgkgMTsKLQkJdWludDY0X3QJaV92YnBtCQkJICA6CSAxOwotCQl1aW50NjRfdAlpX2dicgkJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9kcwkJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9jdAkJCSAgOgkgMTsKLQkJdWludDY0X3QJaV90bnVtCQkJICA6CSA1OwotCQl1aW50NjRfdAlpX3BhY3R5cAkJICA6CSA0OwotCQl1aW50NjRfdAlpX3NpZG4JCQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlfZGlkbgkJCSAgOgkgNDsKKwl1aW50NjRfdCBpaV9peHNtX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX2J5dGVfZW46MzI7CisJCXVpbnQ2NF90IGlfcmVzZXJ2ZWQ6MTsKKwkJdWludDY0X3QgaV90YWc6MzsKKwkJdWludDY0X3QgaV9hbHRfcGFjdHlwOjQ7CisJCXVpbnQ2NF90IGlfYm86MTsKKwkJdWludDY0X3QgaV9lcnJvcjoxOworCQl1aW50NjRfdCBpX3ZicG06MTsKKwkJdWludDY0X3QgaV9nYnI6MTsKKwkJdWludDY0X3QgaV9kczoyOworCQl1aW50NjRfdCBpX2N0OjE7CisJCXVpbnQ2NF90IGlfdG51bTo1OworCQl1aW50NjRfdCBpX3BhY3R5cDo0OworCQl1aW50NjRfdCBpX3NpZG46NDsKKwkJdWludDY0X3QgaV9kaWRuOjQ7CiAJfSBpaV9peHNtX2ZsZF9zOwogfSBpaV9peHNtX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBzaWRlYmFuZCBiaXRzIG9mIGEgc3B1cmlvdXMgcmVhZCAgICAgICAgICoKICAqIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gQ3Jvc3N0YWxrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9peHNzX3UgewotCXVpbnQ2NF90CWlpX2l4c3NfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3NpZGViYW5kICAgICAgICAgICAgICAgIDoJIDg7Ci0JCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgk1NTsKLQkJdWludDY0X3QJaV92YWxpZAkJCSAgOgkgMTsKKwl1aW50NjRfdCBpaV9peHNzX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3NpZGViYW5kOjg7CisJCXVpbnQ2NF90IGlfcnN2ZDo1NTsKKwkJdWludDY0X3QgaV92YWxpZDoxOwogCX0gaWlfaXhzc19mbGRfczsKIH0gaWlfaXhzc191X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhpcyByZWdpc3RlciBlbmFibGVzIHNvZnR3YXJlIHRvIGFjY2VzcyB0aGUgSUkgTExQJ3MgdGVzdCBwb3J0LiAgICAqCiAgKiBSZWZlciB0byB0aGUgTExQIDIuNSBkb2N1bWVudGF0aW9uIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgdGVzdCAgICAqCiAgKiBwb3J0LiBTb2Z0d2FyZSBjYW4gd3JpdGUgdG8gdGhpcyByZWdpc3RlciB0byBwcm9ncmFtIHRoZSB2YWx1ZXMgICAgICAqCkBAIC0xNDkwLDI3ICsxNDQzLDI2IEBACiAgKiBUZXN0TWFzayBhbmQgVGVzdFNlZWQpLiBTaW1pbGFybHksIHNvZnR3YXJlIGNhbiByZWFkIGZyb20gdGhpcyAgICAgICAqCiAgKiByZWdpc3RlciB0byBvYnRhaW4gdGhlIHZhbHVlcyBvZiB0aGUgdGVzdCBwb3J0J3Mgc3RhdHVzIG91dHB1dHMgICAgICAqCiAgKiAoVGVzdENCZXJyLCBUZXN0VmFsaWQgYW5kIFRlc3REYXRhKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWxjdF91IHsKLQl1aW50NjRfdAlpaV9pbGN0X3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV90ZXN0X3NlZWQgICAgICAgICAgICAgICA6CTIwOwotCQl1aW50NjRfdAlpX3Rlc3RfbWFzayAgICAgICAgICAgICAgIDoJIDg7Ci0JCXVpbnQ2NF90CWlfdGVzdF9kYXRhICAgICAgICAgICAgICAgOgkyMDsKLQkJdWludDY0X3QJaV90ZXN0X3ZhbGlkICAgICAgICAgICAgICA6CSAxOwotCQl1aW50NjRfdAlpX3Rlc3RfY2JlcnIgICAgICAgICAgICAgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfdGVzdF9mbGl0ICAgICAgICAgICAgICAgOgkgMzsKLQkJdWludDY0X3QJaV90ZXN0X2NsZWFyICAgICAgICAgICAgICA6CSAxOwotCQl1aW50NjRfdAlpX3Rlc3RfZXJyX2NhcHR1cmUgICAgICAgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnN2ZCAgICAgICAgICAgICAgICAgICAgOgkgOTsKKwl1aW50NjRfdCBpaV9pbGN0X3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3Rlc3Rfc2VlZDoyMDsKKwkJdWludDY0X3QgaV90ZXN0X21hc2s6ODsKKwkJdWludDY0X3QgaV90ZXN0X2RhdGE6MjA7CisJCXVpbnQ2NF90IGlfdGVzdF92YWxpZDoxOworCQl1aW50NjRfdCBpX3Rlc3RfY2JlcnI6MTsKKwkJdWludDY0X3QgaV90ZXN0X2ZsaXQ6MzsKKwkJdWludDY0X3QgaV90ZXN0X2NsZWFyOjE7CisJCXVpbnQ2NF90IGlfdGVzdF9lcnJfY2FwdHVyZToxOworCQl1aW50NjRfdCBpX3JzdmQ6OTsKIAl9IGlpX2lsY3RfZmxkX3M7CiB9IGlpX2lsY3RfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIElmIHRoZSBJSSBkZXRlY3RzIGFuIGlsbGVnYWwgaW5jb21pbmcgRHVwbG9uZXQgcGFja2V0IChyZXF1ZXN0IG9yICAgKgogICogcmVwbHkpIHdoZW4gVkFMSUQ9PTAgaW4gdGhlIElJRVBIMSByZWdpc3RlciwgdGhlbiBpdCBzYXZlcyB0aGUgICAgICAgKgogICogY29udGVudHMgb2YgdGhlIHBhY2tldCdzIGhlYWRlciBmbGl0IGluIHRoZSBJSUVQSDEgYW5kIElJRVBIMiAgICAgICAgKgpAQCAtMTUyNiw1NzUgKzE0NzgsNTQ5IEBACiAgKiBwYWNrZXQgd2hlbiBWQUxJRD09MSBpbiB0aGUgSUlFUEgxIHJlZ2lzdGVyLCB0aGVuIGl0IG1lcmVseSBzZXRzICAgICAqCiAgKiB0aGUgT1ZFUlJVTiBiaXQgdG8gaW5kaWNhdGUgdGhhdCBhIHN1YnNlcXVlbnQgZXJyb3IgaGFzIGhhcHBlbmVkLCAgICAqCiAgKiBhbmQgZG9lcyBub3RoaW5nIGZ1cnRoZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWllcGgxX3UgewotCXVpbnQ2NF90CWlpX2lpZXBoMV9yZWd2YWw7Ci0Jc3RydWN0CXsKLQkJdWludDY0X3QJaV9jb21tYW5kCQkgIDoJIDc7Ci0JCXVpbnQ2NF90CWlfcnN2ZF81CQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfc3VwcGwJCQkgIDoJMTQ7Ci0JCXVpbnQ2NF90CWlfcnN2ZF80CQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfc291cmNlCQkgIDoJMTQ7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8zCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfZXJyX3R5cGUJCSAgOgkgNDsKLQkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgkgNDsKLQkJdWludDY0X3QJaV9vdmVycnVuCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfdmFsaWQJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkxMzsKKwl1aW50NjRfdCBpaV9paWVwaDFfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfY29tbWFuZDo3OworCQl1aW50NjRfdCBpX3JzdmRfNToxOworCQl1aW50NjRfdCBpX3N1cHBsOjE0OworCQl1aW50NjRfdCBpX3JzdmRfNDoxOworCQl1aW50NjRfdCBpX3NvdXJjZToxNDsKKwkJdWludDY0X3QgaV9yc3ZkXzM6MTsKKwkJdWludDY0X3QgaV9lcnJfdHlwZTo0OworCQl1aW50NjRfdCBpX3JzdmRfMjo0OworCQl1aW50NjRfdCBpX292ZXJydW46MTsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MzsKKwkJdWludDY0X3QgaV92YWxpZDoxOworCQl1aW50NjRfdCBpX3JzdmQ6MTM7CiAJfSBpaV9paWVwaDFfZmxkX3M7CiB9IGlpX2lpZXBoMV91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhpcyByZWdpc3RlciBob2xkcyB0aGUgQWRkcmVzcyBmaWVsZCBmcm9tIHRoZSBoZWFkZXIgZmxpdCBvZiBhbiAgICAqCiAgKiBpbmNvbWluZyBlcnJvbmVvdXMgRHVwbG9uZXQgcGFja2V0LCBhbG9uZyB3aXRoIHRoZSB0YWlsIGJpdCB3aGljaCAgICAqCiAgKiBhY2NvbXBhbmllZCB0aGlzIGhlYWRlciBmbGl0LiBUaGlzIHJlZ2lzdGVyIGlzIGVzc2VudGlhbGx5IGFuICAgICAgICAqCiAgKiBleHRlbnNpb24gb2YgSUlFUEgxLiBUd28gcmVnaXN0ZXJzIHdlcmUgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIDY0ICAgICAqCiAgKiBiaXRzIGF2YWlsYWJsZSBpbiBvbmx5IGEgc2luZ2xlIHJlZ2lzdGVyIHdlcmUgaW5zdWZmaWNpZW50IHRvICAgICAgICAqCiAgKiBjYXB0dXJlIHRoZSBlbnRpcmUgaGVhZGVyIGZsaXQgb2YgYW4gZXJyb25lb3VzIHBhY2tldC4gICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWllcGgyX3UgewotCXVpbnQ2NF90CWlpX2lpZXBoMl9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8wCQkgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfYWRkcmVzcyAgICAgICAgICAgICAgICAgOgk0NzsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkxMDsKLQkJdWludDY0X3QJaV90YWlsCQkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDM7CisJdWludDY0X3QgaWlfaWllcGgyX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3JzdmRfMDozOworCQl1aW50NjRfdCBpX2FkZHJlc3M6NDc7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjEwOworCQl1aW50NjRfdCBpX3RhaWw6MTsKKwkJdWludDY0X3QgaV9yc3ZkOjM7CiAJfSBpaV9paWVwaDJfZmxkX3M7CiB9IGlpX2lpZXBoMl91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIFRoaXMgcmVnaXN0ZXIncyB2YWx1ZSBpcyBhIGJpdCB2ZWN0b3IgdGhhdCBndWFyZHMgYWNjZXNzIGZyb20gU1hCcyAgKgogICogdG8gbG9jYWwgcmVnaXN0ZXJzIHdpdGhpbiB0aGUgSUkgYXMgd2VsbCBhcyB0byBleHRlcm5hbCBDcm9zc3RhbGsgICAgKgogICogd2lkZ2V0cwkJCQkJCQkJKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lzbGFwcl91IHsKLQl1aW50NjRfdAlpaV9pc2xhcHJfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JlZ2lvbgkJICA6CTY0OworCXVpbnQ2NF90IGlpX2lzbGFwcl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9yZWdpb246NjQ7CiAJfSBpaV9pc2xhcHJfZmxkX3M7CiB9IGlpX2lzbGFwcl91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgQSB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyIG9mIHRoZSA1Ni1iaXQgdmFsdWUgIlB1cCtCdW4iIHdpbGwgY2F1c2UJKgogICogdGhlIGJpdCBpbiB0aGUgSVNMQVBSIHJlZ2lzdGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlZ2lvbiBvZiB0aGUJKgogICogcmVxdWVzdG9yIHRvIGJlIHNldCAoYWNjZXNzIGFsbG93ZWQpLgkJCQkoCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXNsYXBvX3UgewotCXVpbnQ2NF90CWlpX2lzbGFwb19yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfaW9fc2J4X292cnJpZGUJICA6CTU2OwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDg7CisJdWludDY0X3QgaWlfaXNsYXBvX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX2lvX3NieF9vdnJyaWRlOjU2OworCQl1aW50NjRfdCBpX3JzdmQ6ODsKIAl9IGlpX2lzbGFwb19mbGRfczsKIH0gaWlfaXNsYXBvX3VfdDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgRGV0ZXJtaW5lcyBob3cgbG9uZyB0aGUgd3JhcHBlciB3aWxsIHdhaXQgYWZ0ciBhbiBpbnRlcnJ1cHQgaXMJKgogICogaW5pdGlhbGx5IGlzc3VlZCBmcm9tIHRoZSBJSSBiZWZvcmUgaXQgdGltZXMgb3V0IHRoZSBvdXRzdGFuZGluZwkqCiAgKiBpbnRlcnJ1cHQgYW5kIGRyb3BzIGl0IGZyb20gdGhlIGludGVycnVwdCBxdWV1ZS4JCQkqIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2l3aV91IHsKLQl1aW50NjRfdAlpaV9pd2lfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3ByZXNjYWxlCQkgIDoJMjQ7Ci0JCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkgODsKLQkJdWludDY0X3QJaV90aW1lb3V0CQkgIDoJIDg7Ci0JCXVpbnQ2NF90CWlfcnN2ZDEJCQkgIDoJIDg7Ci0JCXVpbnQ2NF90CWlfaW50cnB0X3JldHJ5X3BlcmlvZAkgIDoJIDg7Ci0JCXVpbnQ2NF90CWlfcnN2ZDIJCQkgIDoJIDg7CisJdWludDY0X3QgaWlfaXdpX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3ByZXNjYWxlOjI0OworCQl1aW50NjRfdCBpX3JzdmQ6ODsKKwkJdWludDY0X3QgaV90aW1lb3V0Ojg7CisJCXVpbnQ2NF90IGlfcnN2ZDE6ODsKKwkJdWludDY0X3QgaV9pbnRycHRfcmV0cnlfcGVyaW9kOjg7CisJCXVpbnQ2NF90IGlfcnN2ZDI6ODsKIAl9IGlpX2l3aV9mbGRfczsKIH0gaWlfaXdpX3VfdDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgTG9nIGVycm9ycyB3aGljaCBoYXZlIG9jY3VycmVkIGluIHRoZSBJSSB3cmFwcGVyLiBUaGUgZXJyb3JzIGFyZQkqCiAgKiBjbGVhcmVkIGJ5IHdyaXRpbmcgdG8gdGhlIElFQ0xSIHJlZ2lzdGVyLgkJCQkqIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2l3ZWxfdSB7Ci0JdWludDY0X3QJaWlfaXdlbF9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfaW50cl90aW1lZF9vdXQJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDc7Ci0JCXVpbnQ2NF90CWlfY2FtX292ZXJmbG93CQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfY2FtX3JlYWRfbWlzcwkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmQxCQkJICA6CSAyOwotCQl1aW50NjRfdAlpX2lvcV9yZXBfdW5kZXJmbG93CSAgOgkgMTsKLQkJdWludDY0X3QJaV9pb3FfcmVxX3VuZGVyZmxvdwkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfaW9xX3JlcF9vdmVyZmxvdwkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfaW9xX3JlcV9vdmVyZmxvdwkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfaWlxX3JlcF9vdmVyZmxvdwkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfaWlxX3JlcV9vdmVyZmxvdwkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnN2ZDIJCQkgIDoJIDY7Ci0JCXVpbnQ2NF90CWlfaWlfeG5fcmVwX2NyZWRfb3Zlcl91bmRlcjoJIDE7Ci0JCXVpbnQ2NF90CWlfaWlfeG5fcmVxX2NyZWRfb3Zlcl91bmRlcjoJIDE7Ci0JCXVpbnQ2NF90CWlfcnN2ZDMJCQkgIDoJIDY7Ci0JCXVpbnQ2NF90CWlfaWlfeG5faW52YWxpZF9jbWQJICA6CSAxOwotCQl1aW50NjRfdAlpX3huX2lpX2ludmFsaWRfY21kCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkNAkJCSAgOgkzMDsKKwl1aW50NjRfdCBpaV9pd2VsX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX2ludHJfdGltZWRfb3V0OjE7CisJCXVpbnQ2NF90IGlfcnN2ZDo3OworCQl1aW50NjRfdCBpX2NhbV9vdmVyZmxvdzoxOworCQl1aW50NjRfdCBpX2NhbV9yZWFkX21pc3M6MTsKKwkJdWludDY0X3QgaV9yc3ZkMToyOworCQl1aW50NjRfdCBpX2lvcV9yZXBfdW5kZXJmbG93OjE7CisJCXVpbnQ2NF90IGlfaW9xX3JlcV91bmRlcmZsb3c6MTsKKwkJdWludDY0X3QgaV9pb3FfcmVwX292ZXJmbG93OjE7CisJCXVpbnQ2NF90IGlfaW9xX3JlcV9vdmVyZmxvdzoxOworCQl1aW50NjRfdCBpX2lpcV9yZXBfb3ZlcmZsb3c6MTsKKwkJdWludDY0X3QgaV9paXFfcmVxX292ZXJmbG93OjE7CisJCXVpbnQ2NF90IGlfcnN2ZDI6NjsKKwkJdWludDY0X3QgaV9paV94bl9yZXBfY3JlZF9vdmVyX3VuZGVyOjE7CisJCXVpbnQ2NF90IGlfaWlfeG5fcmVxX2NyZWRfb3Zlcl91bmRlcjoxOworCQl1aW50NjRfdCBpX3JzdmQzOjY7CisJCXVpbnQ2NF90IGlfaWlfeG5faW52YWxpZF9jbWQ6MTsKKwkJdWludDY0X3QgaV94bl9paV9pbnZhbGlkX2NtZDoxOworCQl1aW50NjRfdCBpX3JzdmQ0OjMwOwogCX0gaWlfaXdlbF9mbGRfczsKIH0gaWlfaXdlbF91X3Q7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIENvbnRyb2xzIHRoZSBJSSB3cmFwcGVyLgkJCQkJCSogCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXdjX3UgewotCXVpbnQ2NF90CWlpX2l3Y19yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfZG1hX2J5dGVfc3dhcAkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfY2FtX3JlYWRfbGluZXNfcmVzZXQJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmQxCQkJICA6CSAzOwotCQl1aW50NjRfdAlpX2lpX3huX2NyZWRfb3Zlcl91bmRlcl9sb2c6CSAxOwotCQl1aW50NjRfdAlpX3JzdmQyCQkJICA6CTE5OwotCQl1aW50NjRfdAlpX3huX3JlcF9pcV9kZXB0aAkgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfcnN2ZDMJCQkgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfeG5fcmVxX2lxX2RlcHRoCSAgOgkgNTsKLQkJdWludDY0X3QJaV9yc3ZkNAkJCSAgOgkgMzsKLQkJdWludDY0X3QJaV9paXFfZGVwdGgJCSAgOgkgNjsKLQkJdWludDY0X3QJaV9yc3ZkNQkJCSAgOgkxMjsKLQkJdWludDY0X3QJaV9mb3JjZV9yZXBfY3JlZAkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfZm9yY2VfcmVxX2NyZWQJICA6CSAxOworCXVpbnQ2NF90IGlpX2l3Y19yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9kbWFfYnl0ZV9zd2FwOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDozOworCQl1aW50NjRfdCBpX2NhbV9yZWFkX2xpbmVzX3Jlc2V0OjE7CisJCXVpbnQ2NF90IGlfcnN2ZDE6MzsKKwkJdWludDY0X3QgaV9paV94bl9jcmVkX292ZXJfdW5kZXJfbG9nOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDI6MTk7CisJCXVpbnQ2NF90IGlfeG5fcmVwX2lxX2RlcHRoOjU7CisJCXVpbnQ2NF90IGlfcnN2ZDM6MzsKKwkJdWludDY0X3QgaV94bl9yZXFfaXFfZGVwdGg6NTsKKwkJdWludDY0X3QgaV9yc3ZkNDozOworCQl1aW50NjRfdCBpX2lpcV9kZXB0aDo2OworCQl1aW50NjRfdCBpX3JzdmQ1OjEyOworCQl1aW50NjRfdCBpX2ZvcmNlX3JlcF9jcmVkOjE7CisJCXVpbnQ2NF90IGlfZm9yY2VfcmVxX2NyZWQ6MTsKIAl9IGlpX2l3Y19mbGRfczsKIH0gaWlfaXdjX3VfdDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgU3RhdHVzIGluIHRoZSBJSSB3cmFwcGVyLgkJCQkJCSogCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXdzX3UgewotCXVpbnQ2NF90CWlpX2l3c19yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfeG5fcmVwX2lxX2NyZWRpdHMJICA6CSA1OwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfeG5fcmVxX2lxX2NyZWRpdHMJICA6CSA1OwotCQl1aW50NjRfdAlpX3JzdmQxCQkJICA6CTUxOworCXVpbnQ2NF90IGlpX2l3c19yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV94bl9yZXBfaXFfY3JlZGl0czo1OworCQl1aW50NjRfdCBpX3JzdmQ6MzsKKwkJdWludDY0X3QgaV94bl9yZXFfaXFfY3JlZGl0czo1OworCQl1aW50NjRfdCBpX3JzdmQxOjUxOwogCX0gaWlfaXdzX2ZsZF9zOwogfSBpaV9pd3NfdV90OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBNYXNrcyBlcnJvcnMgaW4gdGhlIElXRUwgcmVnaXN0ZXIuCQkJCQkqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXdlaW1fdSB7Ci0JdWludDY0X3QJaWlfaXdlaW1fcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX2ludHJfdGltZWRfb3V0CSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CSA3OwotCQl1aW50NjRfdAlpX2NhbV9vdmVyZmxvdwkJICA6CSAxOwotCQl1aW50NjRfdAlpX2NhbV9yZWFkX21pc3MJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkMQkJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9pb3FfcmVwX3VuZGVyZmxvdwkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfaW9xX3JlcV91bmRlcmZsb3cJICA6CSAxOwotCQl1aW50NjRfdAlpX2lvcV9yZXBfb3ZlcmZsb3cJICA6CSAxOwotCQl1aW50NjRfdAlpX2lvcV9yZXFfb3ZlcmZsb3cJICA6CSAxOwotCQl1aW50NjRfdAlpX2lpcV9yZXBfb3ZlcmZsb3cJICA6CSAxOwotCQl1aW50NjRfdAlpX2lpcV9yZXFfb3ZlcmZsb3cJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmQyCQkJICA6CSA2OwotCQl1aW50NjRfdAlpX2lpX3huX3JlcF9jcmVkX292ZXJmbG93IDoJIDE7Ci0JCXVpbnQ2NF90CWlfaWlfeG5fcmVxX2NyZWRfb3ZlcmZsb3cgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkMwkJCSAgOgkgNjsKLQkJdWludDY0X3QJaV9paV94bl9pbnZhbGlkX2NtZAkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfeG5faWlfaW52YWxpZF9jbWQJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmQ0CQkJICA6CTMwOworCXVpbnQ2NF90IGlpX2l3ZWltX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX2ludHJfdGltZWRfb3V0OjE7CisJCXVpbnQ2NF90IGlfcnN2ZDo3OworCQl1aW50NjRfdCBpX2NhbV9vdmVyZmxvdzoxOworCQl1aW50NjRfdCBpX2NhbV9yZWFkX21pc3M6MTsKKwkJdWludDY0X3QgaV9yc3ZkMToyOworCQl1aW50NjRfdCBpX2lvcV9yZXBfdW5kZXJmbG93OjE7CisJCXVpbnQ2NF90IGlfaW9xX3JlcV91bmRlcmZsb3c6MTsKKwkJdWludDY0X3QgaV9pb3FfcmVwX292ZXJmbG93OjE7CisJCXVpbnQ2NF90IGlfaW9xX3JlcV9vdmVyZmxvdzoxOworCQl1aW50NjRfdCBpX2lpcV9yZXBfb3ZlcmZsb3c6MTsKKwkJdWludDY0X3QgaV9paXFfcmVxX292ZXJmbG93OjE7CisJCXVpbnQ2NF90IGlfcnN2ZDI6NjsKKwkJdWludDY0X3QgaV9paV94bl9yZXBfY3JlZF9vdmVyZmxvdzoxOworCQl1aW50NjRfdCBpX2lpX3huX3JlcV9jcmVkX292ZXJmbG93OjE7CisJCXVpbnQ2NF90IGlfcnN2ZDM6NjsKKwkJdWludDY0X3QgaV9paV94bl9pbnZhbGlkX2NtZDoxOworCQl1aW50NjRfdCBpX3huX2lpX2ludmFsaWRfY21kOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDQ6MzA7CiAJfSBpaV9pd2VpbV9mbGRfczsKIH0gaWlfaXdlaW1fdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIEEgd3JpdGUgdG8gdGhpcyByZWdpc3RlciBjYXVzZXMgYSBwYXJ0aWN1bGFyIGZpZWxkIGluIHRoZSAgICAgICAgICAgKgogICogY29ycmVzcG9uZGluZyB3aWRnZXQncyBQUkIgZW50cnkgdG8gYmUgYWRqdXN0ZWQgdXAgb3IgZG93biBieSAxLiAgICAgKgogICogVGhpcyBjb3VudGVyIHNob3VsZCBiZSB1c2VkIHdoZW4gcmVjb3ZlcmluZyBmcm9tIGVycm9yIGFuZCByZXNldCAgICAgKgogICogY29uZGl0aW9ucy4gTm90ZSB0aGF0IHNvZnR3YXJlIHdvdWxkIGJlIGNhcGFibGUgb2YgY2F1c2luZyAgICAgICAgICAgKgogICogaW5hZHZlcnRlbnQgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IG9mIHRoZXNlIGNvdW50ZXJzLiAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwY2FfdSB7Ci0JdWludDY0X3QJaWlfaXBjYV9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfd2lkICAgICAgICAgICAgICAgICAgICAgOgkgNDsKLQkJdWludDY0X3QJaV9hZGp1c3QJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMzsKLQkJdWludDY0X3QJaV9maWVsZAkJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTU0OworCXVpbnQ2NF90IGlpX2lwY2FfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfd2lkOjQ7CisJCXVpbnQ2NF90IGlfYWRqdXN0OjE7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjM7CisJCXVpbnQ2NF90IGlfZmllbGQ6MjsKKwkJdWludDY0X3QgaV9yc3ZkOjU0OwogCX0gaWlfaXBjYV9mbGRfczsKIH0gaWlfaXBjYV91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhlcmUgYXJlIDggaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgICAgICAqCiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGUgSUkgaGFzIHRvIHJlbWVtYmVyIG9uY2UgaXQgaGFzIGxhdW5jaGVkIGEgICAqCiAgKiBQSU8gUmVhZCBvcGVyYXRpb24uIFRoZSBjb250ZW50cyBhcmUgdXNlZCB0byBmb3JtIHRoZSBjb3JyZWN0ICAgICAgICAqCiAgKiBSb3V0ZXIgTmV0d29yayBwYWNrZXQgYW5kIGRpcmVjdCB0aGUgQ3Jvc3N0YWxrIHJlcGx5IHRvIHRoZSAgICAgICAgICAqCiAgKiBhcHByb3ByaWF0ZSBwcm9jZXNzb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTBhX3UgewotCXVpbnQ2NF90CWlpX2lwcnRlMGFfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJNTQ7Ci0JCXVpbnQ2NF90CWlfd2lkZ2V0CQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlfdG9fY250CQkgIDoJIDU7Ci0JCXVpbnQ2NF90ICAgICAgIGlfdmxkICAgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7CisJdWludDY0X3QgaWlfaXBydGUwYV9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9yc3ZkXzE6NTQ7CisJCXVpbnQ2NF90IGlfd2lkZ2V0OjQ7CisJCXVpbnQ2NF90IGlfdG9fY250OjU7CisJCXVpbnQ2NF90IGlfdmxkOjE7CiAJfSBpaV9pcHJ0ZTBhX2ZsZF9zOwogfSBpaV9pcHJ0ZTBhX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKICAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKICAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKICAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKICAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTFhX3UgewotCXVpbnQ2NF90CWlpX2lwcnRlMWFfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJNTQ7Ci0JCXVpbnQ2NF90CWlfd2lkZ2V0CQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlfdG9fY250CQkgIDoJIDU7Ci0JCXVpbnQ2NF90ICAgICAgIGlfdmxkICAgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7CisJdWludDY0X3QgaWlfaXBydGUxYV9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9yc3ZkXzE6NTQ7CisJCXVpbnQ2NF90IGlfd2lkZ2V0OjQ7CisJCXVpbnQ2NF90IGlfdG9fY250OjU7CisJCXVpbnQ2NF90IGlfdmxkOjE7CiAJfSBpaV9pcHJ0ZTFhX2ZsZF9zOwogfSBpaV9pcHJ0ZTFhX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKICAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKICAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKICAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKICAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTJhX3UgewotCXVpbnQ2NF90CWlpX2lwcnRlMmFfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJNTQ7Ci0JCXVpbnQ2NF90CWlfd2lkZ2V0CQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlfdG9fY250CQkgIDoJIDU7Ci0JCXVpbnQ2NF90ICAgICAgIGlfdmxkICAgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7CisJdWludDY0X3QgaWlfaXBydGUyYV9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9yc3ZkXzE6NTQ7CisJCXVpbnQ2NF90IGlfd2lkZ2V0OjQ7CisJCXVpbnQ2NF90IGlfdG9fY250OjU7CisJCXVpbnQ2NF90IGlfdmxkOjE7CiAJfSBpaV9pcHJ0ZTJhX2ZsZF9zOwogfSBpaV9pcHJ0ZTJhX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKICAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKICAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKICAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKICAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTNhX3UgewotCXVpbnQ2NF90CWlpX2lwcnRlM2FfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJNTQ7Ci0JCXVpbnQ2NF90CWlfd2lkZ2V0CQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlfdG9fY250CQkgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfdmxkCQkJICA6CSAxOworCXVpbnQ2NF90IGlpX2lwcnRlM2FfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjU0OworCQl1aW50NjRfdCBpX3dpZGdldDo0OworCQl1aW50NjRfdCBpX3RvX2NudDo1OworCQl1aW50NjRfdCBpX3ZsZDoxOwogCX0gaWlfaXBydGUzYV9mbGRfczsKIH0gaWlfaXBydGUzYV91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhlcmUgYXJlIDggaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgICAgICAqCiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGUgSUkgaGFzIHRvIHJlbWVtYmVyIG9uY2UgaXQgaGFzIGxhdW5jaGVkIGEgICAqCiAgKiBQSU8gUmVhZCBvcGVyYXRpb24uIFRoZSBjb250ZW50cyBhcmUgdXNlZCB0byBmb3JtIHRoZSBjb3JyZWN0ICAgICAgICAqCiAgKiBSb3V0ZXIgTmV0d29yayBwYWNrZXQgYW5kIGRpcmVjdCB0aGUgQ3Jvc3N0YWxrIHJlcGx5IHRvIHRoZSAgICAgICAgICAqCiAgKiBhcHByb3ByaWF0ZSBwcm9jZXNzb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXBydGU0YV91IHsKLQl1aW50NjRfdAlpaV9pcHJ0ZTRhX3JlZ3ZhbDsKLQlzdHJ1Y3QJewotCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CTU0OwotCQl1aW50NjRfdAlpX3dpZGdldAkJICA6CSA0OwotCQl1aW50NjRfdAlpX3RvX2NudAkJICA6CSA1OwotCQl1aW50NjRfdAlpX3ZsZAkJCSAgOgkgMTsKKwl1aW50NjRfdCBpaV9pcHJ0ZTRhX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3JzdmRfMTo1NDsKKwkJdWludDY0X3QgaV93aWRnZXQ6NDsKKwkJdWludDY0X3QgaV90b19jbnQ6NTsKKwkJdWludDY0X3QgaV92bGQ6MTsKIAl9IGlpX2lwcnRlNGFfZmxkX3M7CiB9IGlpX2lwcnRlNGFfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIFRoZXJlIGFyZSA4IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zICAgICAgKgogICogdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhlIElJIGhhcyB0byByZW1lbWJlciBvbmNlIGl0IGhhcyBsYXVuY2hlZCBhICAgKgogICogUElPIFJlYWQgb3BlcmF0aW9uLiBUaGUgY29udGVudHMgYXJlIHVzZWQgdG8gZm9ybSB0aGUgY29ycmVjdCAgICAgICAgKgogICogUm91dGVyIE5ldHdvcmsgcGFja2V0IGFuZCBkaXJlY3QgdGhlIENyb3NzdGFsayByZXBseSB0byB0aGUgICAgICAgICAgKgogICogYXBwcm9wcmlhdGUgcHJvY2Vzc29yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcnRlNWFfdSB7Ci0JdWludDY0X3QJaWlfaXBydGU1YV9yZWd2YWw7Ci0Jc3RydWN0CXsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgk1NDsKLQkJdWludDY0X3QJaV93aWRnZXQJCSAgOgkgNDsKLQkJdWludDY0X3QJaV90b19jbnQJCSAgOgkgNTsKLQkJdWludDY0X3QJaV92bGQJCQkgIDoJIDE7CisJdWludDY0X3QgaWlfaXBydGU1YV9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9yc3ZkXzE6NTQ7CisJCXVpbnQ2NF90IGlfd2lkZ2V0OjQ7CisJCXVpbnQ2NF90IGlfdG9fY250OjU7CisJCXVpbnQ2NF90IGlfdmxkOjE7CiAJfSBpaV9pcHJ0ZTVhX2ZsZF9zOwogfSBpaV9pcHJ0ZTVhX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKICAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKICAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKICAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKICAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTZhX3UgewotCXVpbnQ2NF90CWlpX2lwcnRlNmFfcmVndmFsOwotCXN0cnVjdAl7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJNTQ7Ci0JCXVpbnQ2NF90CWlfd2lkZ2V0CQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlfdG9fY250CQkgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfdmxkCQkJICA6CSAxOworCXVpbnQ2NF90IGlpX2lwcnRlNmFfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjU0OworCQl1aW50NjRfdCBpX3dpZGdldDo0OworCQl1aW50NjRfdCBpX3RvX2NudDo1OworCQl1aW50NjRfdCBpX3ZsZDoxOwogCX0gaWlfaXBydGU2YV9mbGRfczsKIH0gaWlfaXBydGU2YV91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhlcmUgYXJlIDggaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgICAgICAqCiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGUgSUkgaGFzIHRvIHJlbWVtYmVyIG9uY2UgaXQgaGFzIGxhdW5jaGVkIGEgICAqCiAgKiBQSU8gUmVhZCBvcGVyYXRpb24uIFRoZSBjb250ZW50cyBhcmUgdXNlZCB0byBmb3JtIHRoZSBjb3JyZWN0ICAgICAgICAqCiAgKiBSb3V0ZXIgTmV0d29yayBwYWNrZXQgYW5kIGRpcmVjdCB0aGUgQ3Jvc3N0YWxrIHJlcGx5IHRvIHRoZSAgICAgICAgICAqCiAgKiBhcHByb3ByaWF0ZSBwcm9jZXNzb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXBydGU3YV91IHsKLSAgICAgICAgdWludDY0X3QgICAgICAgaWlfaXBydGU3YV9yZWd2YWw7Ci0gICAgICAgIHN0cnVjdCAgewotICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfcnN2ZF8xICAgICAgICAgICAgICAgICAgOiAgICAgNTQ7Ci0gICAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgaV93aWRnZXQgICAgICAgICAgICAgICAgICA6ICAgICAgNDsKLSAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX3RvX2NudCAgICAgICAgICAgICAgICAgIDogICAgICA1OwotICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIGlfdmxkICAgICAgICAgICAgICAgICAgICAgOiAgICAgIDE7Ci0gICAgICAgIH0gaWlfaXBydGVhN19mbGRfczsKKwl1aW50NjRfdCBpaV9pcHJ0ZTdhX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3JzdmRfMTo1NDsKKwkJdWludDY0X3QgaV93aWRnZXQ6NDsKKwkJdWludDY0X3QgaV90b19jbnQ6NTsKKwkJdWludDY0X3QgaV92bGQ6MTsKKwl9IGlpX2lwcnRlYTdfZmxkX3M7CiB9IGlpX2lwcnRlN2FfdV90OwogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhlcmUgYXJlIDggaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgICAgICAqCiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGUgSUkgaGFzIHRvIHJlbWVtYmVyIG9uY2UgaXQgaGFzIGxhdW5jaGVkIGEgICAqCiAgKiBQSU8gUmVhZCBvcGVyYXRpb24uIFRoZSBjb250ZW50cyBhcmUgdXNlZCB0byBmb3JtIHRoZSBjb3JyZWN0ICAgICAgICAqCiAgKiBSb3V0ZXIgTmV0d29yayBwYWNrZXQgYW5kIGRpcmVjdCB0aGUgQ3Jvc3N0YWxrIHJlcGx5IHRvIHRoZSAgICAgICAgICAqCiAgKiBhcHByb3ByaWF0ZSBwcm9jZXNzb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTBiX3UgewotCXVpbnQ2NF90CWlpX2lwcnRlMGJfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfYWRkcmVzcwkJICA6CTQ3OwotCQl1aW50NjRfdAlpX2luaXQJCQkgIDoJIDM7Ci0JCXVpbnQ2NF90ICAgICAgIGlfc291cmNlICAgICAgICAgICAgICAgICAgOiAgICAgMTE7CisJdWludDY0X3QgaWlfaXBydGUwYl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MzsKKwkJdWludDY0X3QgaV9hZGRyZXNzOjQ3OworCQl1aW50NjRfdCBpX2luaXQ6MzsKKwkJdWludDY0X3QgaV9zb3VyY2U6MTE7CiAJfSBpaV9pcHJ0ZTBiX2ZsZF9zOwogfSBpaV9pcHJ0ZTBiX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKICAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKICAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKICAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKICAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTFiX3UgewotCXVpbnQ2NF90CWlpX2lwcnRlMWJfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfYWRkcmVzcwkJICA6CTQ3OwotCQl1aW50NjRfdAlpX2luaXQJCQkgIDoJIDM7Ci0JCXVpbnQ2NF90ICAgICAgIGlfc291cmNlICAgICAgICAgICAgICAgICAgOiAgICAgMTE7CisJdWludDY0X3QgaWlfaXBydGUxYl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MzsKKwkJdWludDY0X3QgaV9hZGRyZXNzOjQ3OworCQl1aW50NjRfdCBpX2luaXQ6MzsKKwkJdWludDY0X3QgaV9zb3VyY2U6MTE7CiAJfSBpaV9pcHJ0ZTFiX2ZsZF9zOwogfSBpaV9pcHJ0ZTFiX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKICAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKICAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKICAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKICAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTJiX3UgewotCXVpbnQ2NF90CWlpX2lwcnRlMmJfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfYWRkcmVzcwkJICA6CTQ3OwotCQl1aW50NjRfdAlpX2luaXQJCQkgIDoJIDM7Ci0JCXVpbnQ2NF90ICAgICAgIGlfc291cmNlICAgICAgICAgICAgICAgICAgOiAgICAgMTE7CisJdWludDY0X3QgaWlfaXBydGUyYl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MzsKKwkJdWludDY0X3QgaV9hZGRyZXNzOjQ3OworCQl1aW50NjRfdCBpX2luaXQ6MzsKKwkJdWludDY0X3QgaV9zb3VyY2U6MTE7CiAJfSBpaV9pcHJ0ZTJiX2ZsZF9zOwogfSBpaV9pcHJ0ZTJiX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKICAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKICAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKICAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKICAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTNiX3UgewotCXVpbnQ2NF90CWlpX2lwcnRlM2JfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfYWRkcmVzcwkJICA6CTQ3OwotCQl1aW50NjRfdAlpX2luaXQJCQkgIDoJIDM7Ci0JCXVpbnQ2NF90ICAgICAgIGlfc291cmNlICAgICAgICAgICAgICAgICAgOiAgICAgMTE7CisJdWludDY0X3QgaWlfaXBydGUzYl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MzsKKwkJdWludDY0X3QgaV9hZGRyZXNzOjQ3OworCQl1aW50NjRfdCBpX2luaXQ6MzsKKwkJdWludDY0X3QgaV9zb3VyY2U6MTE7CiAJfSBpaV9pcHJ0ZTNiX2ZsZF9zOwogfSBpaV9pcHJ0ZTNiX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGVyZSBhcmUgOCBpbnN0YW5jZXMgb2YgdGhpcyByZWdpc3Rlci4gVGhpcyByZWdpc3RlciBjb250YWlucyAgICAgICoKICAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBJSSBoYXMgdG8gcmVtZW1iZXIgb25jZSBpdCBoYXMgbGF1bmNoZWQgYSAgICoKICAqIFBJTyBSZWFkIG9wZXJhdGlvbi4gVGhlIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGNvcnJlY3QgICAgICAgICoKICAqIFJvdXRlciBOZXR3b3JrIHBhY2tldCBhbmQgZGlyZWN0IHRoZSBDcm9zc3RhbGsgcmVwbHkgdG8gdGhlICAgICAgICAgICoKICAqIGFwcHJvcHJpYXRlIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTRiX3UgewotCXVpbnQ2NF90CWlpX2lwcnRlNGJfcmVndmFsOwotCXN0cnVjdAl7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xICAgICAgICAgICAgICAgICAgOgkgMzsKLQkJdWludDY0X3QJaV9hZGRyZXNzCQkgIDoJNDc7Ci0JCXVpbnQ2NF90CWlfaW5pdAkJCSAgOgkgMzsKLQkJdWludDY0X3QgICAgICAgaV9zb3VyY2UgICAgICAgICAgICAgICAgICA6ICAgICAxMTsKKwl1aW50NjRfdCBpaV9pcHJ0ZTRiX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3JzdmRfMTozOworCQl1aW50NjRfdCBpX2FkZHJlc3M6NDc7CisJCXVpbnQ2NF90IGlfaW5pdDozOworCQl1aW50NjRfdCBpX3NvdXJjZToxMTsKIAl9IGlpX2lwcnRlNGJfZmxkX3M7CiB9IGlpX2lwcnRlNGJfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIFRoZXJlIGFyZSA4IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zICAgICAgKgogICogdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhlIElJIGhhcyB0byByZW1lbWJlciBvbmNlIGl0IGhhcyBsYXVuY2hlZCBhICAgKgogICogUElPIFJlYWQgb3BlcmF0aW9uLiBUaGUgY29udGVudHMgYXJlIHVzZWQgdG8gZm9ybSB0aGUgY29ycmVjdCAgICAgICAgKgogICogUm91dGVyIE5ldHdvcmsgcGFja2V0IGFuZCBkaXJlY3QgdGhlIENyb3NzdGFsayByZXBseSB0byB0aGUgICAgICAgICAgKgogICogYXBwcm9wcmlhdGUgcHJvY2Vzc29yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcnRlNWJfdSB7Ci0JdWludDY0X3QJaWlfaXBydGU1Yl9yZWd2YWw7Ci0Jc3RydWN0CXsKLQkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CSAzOwotCQl1aW50NjRfdAlpX2FkZHJlc3MJCSAgOgk0NzsKLQkJdWludDY0X3QJaV9pbml0CQkJICA6CSAzOwotCQl1aW50NjRfdCAgICAgICBpX3NvdXJjZSAgICAgICAgICAgICAgICAgIDogICAgIDExOworCXVpbnQ2NF90IGlpX2lwcnRlNWJfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjM7CisJCXVpbnQ2NF90IGlfYWRkcmVzczo0NzsKKwkJdWludDY0X3QgaV9pbml0OjM7CisJCXVpbnQ2NF90IGlfc291cmNlOjExOwogCX0gaWlfaXBydGU1Yl9mbGRfczsKIH0gaWlfaXBydGU1Yl91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhlcmUgYXJlIDggaW5zdGFuY2VzIG9mIHRoaXMgcmVnaXN0ZXIuIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgICAgICAqCiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGUgSUkgaGFzIHRvIHJlbWVtYmVyIG9uY2UgaXQgaGFzIGxhdW5jaGVkIGEgICAqCiAgKiBQSU8gUmVhZCBvcGVyYXRpb24uIFRoZSBjb250ZW50cyBhcmUgdXNlZCB0byBmb3JtIHRoZSBjb3JyZWN0ICAgICAgICAqCiAgKiBSb3V0ZXIgTmV0d29yayBwYWNrZXQgYW5kIGRpcmVjdCB0aGUgQ3Jvc3N0YWxrIHJlcGx5IHRvIHRoZSAgICAgICAgICAqCiAgKiBhcHByb3ByaWF0ZSBwcm9jZXNzb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXBydGU2Yl91IHsKLQl1aW50NjRfdAlpaV9pcHJ0ZTZiX3JlZ3ZhbDsKLQlzdHJ1Y3QJewotCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfYWRkcmVzcwkJICA6CTQ3OwotCQl1aW50NjRfdAlpX2luaXQJCQkgIDoJIDM7Ci0JCXVpbnQ2NF90ICAgICAgIGlfc291cmNlICAgICAgICAgICAgICAgICAgOiAgICAgMTE7CisJdWludDY0X3QgaWlfaXBydGU2Yl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MzsKKwkJdWludDY0X3QgaV9hZGRyZXNzOjQ3OworCQl1aW50NjRfdCBpX2luaXQ6MzsKKwkJdWludDY0X3QgaV9zb3VyY2U6MTE7CiAKIAl9IGlpX2lwcnRlNmJfZmxkX3M7CiB9IGlpX2lwcnRlNmJfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIFRoZXJlIGFyZSA4IGluc3RhbmNlcyBvZiB0aGlzIHJlZ2lzdGVyLiBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zICAgICAgKgogICogdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhlIElJIGhhcyB0byByZW1lbWJlciBvbmNlIGl0IGhhcyBsYXVuY2hlZCBhICAgKgogICogUElPIFJlYWQgb3BlcmF0aW9uLiBUaGUgY29udGVudHMgYXJlIHVzZWQgdG8gZm9ybSB0aGUgY29ycmVjdCAgICAgICAgKgogICogUm91dGVyIE5ldHdvcmsgcGFja2V0IGFuZCBkaXJlY3QgdGhlIENyb3NzdGFsayByZXBseSB0byB0aGUgICAgICAgICAgKgogICogYXBwcm9wcmlhdGUgcHJvY2Vzc29yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcnRlN2JfdSB7Ci0gICAgICAgIHVpbnQ2NF90ICAgICAgIGlpX2lwcnRlN2JfcmVndmFsOwotICAgICAgICBzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CSAzOwotCQl1aW50NjRfdAlpX2FkZHJlc3MJCSAgOgk0NzsKLQkJdWludDY0X3QJaV9pbml0CQkJICA6CSAzOwotCQl1aW50NjRfdCAgICAgICBpX3NvdXJjZSAgICAgICAgICAgICAgICAgIDogICAgIDExOwotICAgICAgICB9IGlpX2lwcnRlN2JfZmxkX3M7CisJdWludDY0X3QgaWlfaXBydGU3Yl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MzsKKwkJdWludDY0X3QgaV9hZGRyZXNzOjQ3OworCQl1aW50NjRfdCBpX2luaXQ6MzsKKwkJdWludDY0X3QgaV9zb3VyY2U6MTE7CisJfSBpaV9pcHJ0ZTdiX2ZsZF9zOwogfSBpaV9pcHJ0ZTdiX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgU0h1YiBJSSBjb250YWlucyBhIGZlYXR1cmUgd2hpY2ggZGlkIG5vdCBleGlzdCBpbiAgICAgICoKICAqIHRoZSBIdWIgd2hpY2ggYXV0b21hdGljYWxseSBjbGVhbnMgdXAgYWZ0ZXIgYSBSZWFkIFJlc3BvbnNlICAgICAgICAgICoKICAqIHRpbWVvdXQsIGluY2x1ZGluZyBkZWFsbG9jYXRpb24gb2YgdGhlIElQUlRFIGFuZCByZWNvdmVyeSBvZiBJQnVmICAgICoKQEAgLTIxMDgsMjMgKzIwMzQsMjIgQEAKICAqIE5vdGUgdGhhdCB0aGlzIHJlZ2lzdGVyIGRvZXMgbm90IGFmZmVjdCB0aGUgY29udGVudHMgb2YgdGhlIElQUlRFICAgICoKICAqIHJlZ2lzdGVycy4gVGhlIFZhbGlkIGJpdHMgaW4gdGhvc2UgcmVnaXN0ZXJzIGhhdmUgdG8gYmUgICAgICAgICAgICAgICoKICAqIHNwZWNpZmljYWxseSB0dXJuZWQgb2ZmIGJ5IHNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcGRyX3UgewotCXVpbnQ2NF90CWlpX2lwZHJfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3RlICAgICAgICAgICAgICAgICAgICAgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcG5kCQkJICA6CSAxOwotCQl1aW50NjRfdAlpX2luaXRfcnBjbnQJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTU4OworCXVpbnQ2NF90IGlpX2lwZHJfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfdGU6MzsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MTsKKwkJdWludDY0X3QgaV9wbmQ6MTsKKwkJdWludDY0X3QgaV9pbml0X3JwY250OjE7CisJCXVpbnQ2NF90IGlfcnN2ZDo1ODsKIAl9IGlpX2lwZHJfZmxkX3M7CiB9IGlpX2lwZHJfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIEEgd3JpdGUgdG8gdGhpcyByZWdpc3RlciBjYXVzZXMgYSBDUkIgZW50cnkgdG8gYmUgcmV0dXJuZWQgdG8gdGhlICAgKgogICogcXVldWUgb2YgZnJlZSBDUkJzLiBUaGUgZW50cnkgc2hvdWxkIGhhdmUgcHJldmlvdXNseSBiZWVuIGNsZWFyZWQgICAgKgogICogKG1hcmsgYml0KSB2aWEgYmFja2Rvb3IgYWNjZXNzIHRvIHRoZSBwZXJ0aW5lbnQgQ1JCIGVudHJ5LiBUaGlzICAgICAgKgpAQCAtMjEzNywyMSArMjA2MiwyMCBAQAogICogc29mdHdhcmUgY2xlYXJzIHRoZSBtYXJrIGJpdCwgYW5kIGZpbmFsbHkgNCkgc29mdHdhcmUgd3JpdGVzIHRvICAgICAgKgogICogdGhlIElDRFIgcmVnaXN0ZXIgdG8gcmV0dXJuIHRoZSBDUkIgZW50cnkgdG8gdGhlIGxpc3Qgb2YgZnJlZSBDUkIgICAgKgogICogZW50cmllcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2ljZHJfdSB7Ci0JdWludDY0X3QJaWlfaWNkcl9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfY3JiX251bSAgICAgICAgICAgICAgICAgOgkgNDsKLQkJdWludDY0X3QJaV9wbmQJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90ICAgICAgIGlfcnN2ZCAgICAgICAgICAgICAgICAgICAgOiAgICAgNTk7CisJdWludDY0X3QgaWlfaWNkcl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9jcmJfbnVtOjQ7CisJCXVpbnQ2NF90IGlfcG5kOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDo1OTsKIAl9IGlpX2ljZHJfZmxkX3M7CiB9IGlpX2ljZHJfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIFRoaXMgcmVnaXN0ZXIgcHJvdmlkZXMgZGVidWcgYWNjZXNzIHRvIHR3byBGSUZPcyBpbnNpZGUgb2YgSUkuICAgICAgKgogICogQm90aCBJT1FfTUFYKiBmaWVsZHMgb2YgdGhpcyByZWdpc3RlciBjb250YWluIHRoZSBpbnN0YW50YW5lb3VzICAgICAgKgogICogZGVwdGggKGluIHVuaXRzIG9mIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGVudHJpZXMpIG9mIHRoZSAgICAgICAgICAgKgpAQCAtMjE2NCwxMzAgKzIwODgsMTI0IEBACiAgKiB0aGlzIHJlZ2lzdGVyIGlzIHdyaXR0ZW4uIElmIHRoZXJlIGFyZSBhbnkgYWN0aXZlIGVudHJpZXMgaW4gYW55ICAgICAqCiAgKiBvZiB0aGVzZSBGSUZPcyB3aGVuIHRoaXMgcmVnaXN0ZXIgaXMgd3JpdHRlbiwgdGhlIHJlc3VsdHMgYXJlICAgICAgICAqCiAgKiB1bmRlZmluZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWZkcl91IHsKLQl1aW50NjRfdAlpaV9pZmRyX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV9pb3FfbWF4X3JxICAgICAgICAgICAgICA6CSA3OwotCQl1aW50NjRfdAlpX3NldF9pb3FfcnEJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9pb3FfbWF4X3JwCQkgIDoJIDc7Ci0JCXVpbnQ2NF90CWlfc2V0X2lvcV9ycAkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJNDg7CisJdWludDY0X3QgaWlfaWZkcl9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9pb3FfbWF4X3JxOjc7CisJCXVpbnQ2NF90IGlfc2V0X2lvcV9ycToxOworCQl1aW50NjRfdCBpX2lvcV9tYXhfcnA6NzsKKwkJdWludDY0X3QgaV9zZXRfaW9xX3JwOjE7CisJCXVpbnQ2NF90IGlfcnN2ZDo0ODsKIAl9IGlpX2lmZHJfZmxkX3M7CiB9IGlpX2lmZHJfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIFRoaXMgcmVnaXN0ZXIgYWxsb3dzIHRoZSBJSSB0byBiZWNvbWUgc2x1Z2dpc2ggaW4gcmVtb3ZpbmcgICAgICAgICAgKgogICogbWVzc2FnZXMgZnJvbSBpdHMgaW5ib3VuZCBxdWV1ZSAoSUlRKS4gVGhpcyB3aWxsIGNhdXNlIG1lc3NhZ2VzIHRvICAgKgogICogYmFjayB1cCBpbiBlaXRoZXIgdmlydHVhbCBjaGFubmVsLiBEaXNhYmxpbmcgdGhlICJtb2xhc3NlcyIgbW9kZSAgICAgKgogICogc3Vic2VxdWVudGx5IGFsbG93cyB0aGUgSUkgdG8gYmUgdGVzdGVkIHVuZGVyIHN0cmVzcy4gSW4gdGhlICAgICAgICAgKgogICogc2x1Z2dpc2ggKCJNb2xhc3NlcyIpIG1vZGUsIHRoZSBsb2NhbGl6ZWQgZWZmZWN0cyBvZiBjb25nZXN0aW9uICAgICAgKgogICogY2FuIGJlIG9ic2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lpYXBfdSB7Ci0gICAgICAgIHVpbnQ2NF90ICAgICAgIGlpX2lpYXBfcmVndmFsOwotICAgICAgICBzdHJ1Y3QgIHsKLSAgICAgICAgICAgICAgICB1aW50NjRfdCAgICAgICBpX3JxX21scyAgICAgICAgICAgICAgICAgIDogICAgICA2OwotCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSAyOwotCQl1aW50NjRfdAlpX3JwX21scwkJICA6CSA2OwotCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDUwOwotICAgICAgICB9IGlpX2lpYXBfZmxkX3M7CisJdWludDY0X3QgaWlfaWlhcF9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9ycV9tbHM6NjsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MjsKKwkJdWludDY0X3QgaV9ycF9tbHM6NjsKKwkJdWludDY0X3QgaV9yc3ZkOjUwOworCX0gaWlfaWlhcF9mbGRfczsKIH0gaWlfaWlhcF91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhpcyByZWdpc3RlciBhbGxvd3Mgc2V2ZXJhbCBwYXJhbWV0ZXJzIG9mIENSQiBvcGVyYXRpb24gdG8gYmUgICAgICAqCiAgKiBzZXQuIE5vdGUgdGhhdCB3cml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIgY2FuIGhhdmUgY2F0YXN0cm9waGljIHNpZGUgICAqCiAgKiBlZmZlY3RzLCBpZiB0aGUgQ1JCIGlzIG5vdCBxdWllc2NlbnQsIGkuZS4gaWYgdGhlIENSQiBpcyAgICAgICAgICAgICAqCiAgKiBwcm9jZXNzaW5nIHByb3RvY29sIG1lc3NhZ2VzIHdoZW4gdGhlIHdyaXRlIG9jY3Vycy4gICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWNtcl91IHsKLQl1aW50NjRfdAlpaV9pY21yX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV9zcF9tc2cgICAgICAgICAgICAgICAgICA6CSAxOwotCQl1aW50NjRfdAlpX3JkX2hkcgkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JzdmRfNAkJICA6CSAyOwotCQl1aW50NjRfdAlpX2NfY250CQkJICA6CSA0OwotCQl1aW50NjRfdAlpX3JzdmRfMwkJICA6CSA0OwotCQl1aW50NjRfdAlpX2Nscl9ycXBkCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfY2xyX3JwcGQJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkXzIJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9mY19jbnQJCSAgOgkgNDsKLQkJdWludDY0X3QJaV9jcmJfdmxkCQkgIDoJMTU7Ci0JCXVpbnQ2NF90CWlfY3JiX21hcmsJCSAgOgkxNTsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMjsKLQkJdWludDY0X3QJaV9wcmVjaXNlCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgkxMTsKKwl1aW50NjRfdCBpaV9pY21yX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3NwX21zZzoxOworCQl1aW50NjRfdCBpX3JkX2hkcjoxOworCQl1aW50NjRfdCBpX3JzdmRfNDoyOworCQl1aW50NjRfdCBpX2NfY250OjQ7CisJCXVpbnQ2NF90IGlfcnN2ZF8zOjQ7CisJCXVpbnQ2NF90IGlfY2xyX3JxcGQ6MTsKKwkJdWludDY0X3QgaV9jbHJfcnBwZDoxOworCQl1aW50NjRfdCBpX3JzdmRfMjoyOworCQl1aW50NjRfdCBpX2ZjX2NudDo0OworCQl1aW50NjRfdCBpX2NyYl92bGQ6MTU7CisJCXVpbnQ2NF90IGlfY3JiX21hcms6MTU7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjI7CisJCXVpbnQ2NF90IGlfcHJlY2lzZToxOworCQl1aW50NjRfdCBpX3JzdmQ6MTE7CiAJfSBpaV9pY21yX2ZsZF9zOwogfSBpaV9pY21yX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGlzIHJlZ2lzdGVyIGFsbG93cyBjb250cm9sIG9mIHRoZSB0YWJsZSBwb3J0aW9uIG9mIHRoZSBDUkIgICAgICAgICoKICAqIGxvZ2ljIHZpYSBzb2Z0d2FyZS4gQ29udHJvbCBvcGVyYXRpb25zIGZyb20gdGhpcyByZWdpc3RlciBoYXZlICAgICAgICoKICAqIHByaW9yaXR5IG92ZXIgYWxsIGluY29taW5nIENyb3NzdGFsayBvciBCVEUgcmVxdWVzdHMuICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pY2NyX3UgewotCXVpbnQ2NF90CWlpX2ljY3JfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX2NyYl9udW0gICAgICAgICAgICAgICAgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlfY21kCQkJICA6CSA4OwotCQl1aW50NjRfdAlpX3BlbmRpbmcJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTQ3OworCXVpbnQ2NF90IGlpX2ljY3JfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfY3JiX251bTo0OworCQl1aW50NjRfdCBpX3JzdmRfMTo0OworCQl1aW50NjRfdCBpX2NtZDo4OworCQl1aW50NjRfdCBpX3BlbmRpbmc6MTsKKwkJdWludDY0X3QgaV9yc3ZkOjQ3OwogCX0gaWlfaWNjcl9mbGRfczsKIH0gaWlfaWNjcl91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhpcyByZWdpc3RlciBhbGxvd3MgdGhlIG1heGltdW0gdGltZW91dCB2YWx1ZSB0byBiZSBwcm9ncmFtbWVkLiAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWN0b191IHsKLQl1aW50NjRfdAlpaV9pY3RvX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV90aW1lb3V0ICAgICAgICAgICAgICAgICA6CSA4OwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJNTY7CisJdWludDY0X3QgaWlfaWN0b19yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV90aW1lb3V0Ojg7CisJCXVpbnQ2NF90IGlfcnN2ZDo1NjsKIAl9IGlpX2ljdG9fZmxkX3M7CiB9IGlpX2ljdG9fdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIFRoaXMgcmVnaXN0ZXIgYWxsb3dzIHRoZSB0aW1lb3V0IHByZXNjYWxhciB0byBiZSBwcm9ncmFtbWVkLiBBbiAgICAgKgogICogaW50ZXJuYWwgY291bnRlciBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyByZWdpc3Rlci4gV2hlbiB0aGUgICAgICAgICAgKgogICogaW50ZXJuYWwgY291bnRlciByZWFjaGVzIHRoZSB2YWx1ZSBvZiB0aGUgUFJFU0NBTEUgZmllbGQsIHRoZSAgICAgICAgKgogICogdGltZXIgcmVnaXN0ZXJzIGluIGFsbCB2YWxpZCBDUkJzIGFyZSBpbmNyZW1lbnRlZCAoQ1JCeF9EW1RJTUVPVVRdICAgKgogICogZmllbGQpLiBUaGUgaW50ZXJuYWwgY291bnRlciByZXNldHMgdG8gemVybywgYW5kIHRoZW4gY29udGludWVzICAgICAgKgogICogY291bnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2ljdHBfdSB7Ci0JdWludDY0X3QJaWlfaWN0cF9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfcHJlc2NhbGUgICAgICAgICAgICAgICAgOgkyNDsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTQwOworCXVpbnQ2NF90IGlpX2ljdHBfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfcHJlc2NhbGU6MjQ7CisJCXVpbnQ2NF90IGlfcnN2ZDo0MDsKIAl9IGlpX2ljdHBfZmxkX3M7CiB9IGlpX2ljdHBfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogRGVzY3JpcHRpb246ICBUaGVyZSBhcmUgMTUgQ1JCIEVudHJpZXMgKElDUkIwIHRvIElDUkJFKSB0aGF0IGFyZSAgICAgKgogICogdXNlZCBmb3IgQ3Jvc3N0YWxrIG9wZXJhdGlvbnMgKGJvdGggY2FjaGVsaW5lIGFuZCBwYXJ0aWFsICAgICAgICAgICAgKgogICogb3BlcmF0aW9ucykgb3IgQlRFL0lPLiBCZWNhdXNlIHRoZSBDUkIgZW50cmllcyBhcmUgdmVyeSB3aWRlLCBmaXZlICAgKgpAQCAtMjMwNiwyNDMgKzIyMjQsMjM0IEBACiAgKiByZWNvdmVyaW5nIGFueSBwb3RlbnRpYWwgZXJyb3Igc3RhdGUgZnJvbSBiZWZvcmUgdGhlIHJlc2V0KS4gICAgICAgICAqCiAgKiBUaGUgZm9sbG93aW5nIGZvdXIgdGFibGVzIHN1bW1hcml6ZSB0aGUgZm9ybWF0IGZvciB0aGUgZm91ciAgICAgICAgICAqCiAgKiByZWdpc3RlcnMgdGhhdCBhcmUgdXNlZCBmb3IgZWFjaCBJQ1JCIyBFbnRyeS4gICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWNyYjBfYV91IHsKLQl1aW50NjRfdAlpaV9pY3JiMF9hX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaWFfaW93ICAgICAgICAgICAgICAgICAgICA6CSAxOwotCQl1aW50NjRfdAlpYV92bGQJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlhX2FkZHIJCQkgIDoJNDc7Ci0JCXVpbnQ2NF90CWlhX3RudW0JCQkgIDoJIDU7Ci0JCXVpbnQ2NF90CWlhX3NpZG4JCQkgIDoJIDQ7Ci0JCXVpbnQ2NF90ICAgICAgIGlhX3JzdmQgICAgICAgICAgICAgICAgICAgOiAgICAgIDY7CisJdWludDY0X3QgaWlfaWNyYjBfYV9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaWFfaW93OjE7CisJCXVpbnQ2NF90IGlhX3ZsZDoxOworCQl1aW50NjRfdCBpYV9hZGRyOjQ3OworCQl1aW50NjRfdCBpYV90bnVtOjU7CisJCXVpbnQ2NF90IGlhX3NpZG46NDsKKwkJdWludDY0X3QgaWFfcnN2ZDo2OwogCX0gaWlfaWNyYjBfYV9mbGRfczsKIH0gaWlfaWNyYjBfYV91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSAxNSBDUkIgRW50cmllcyAoSUNSQjAgdG8gSUNSQkUpIHRoYXQgYXJlICAgICAqCiAgKiB1c2VkIGZvciBDcm9zc3RhbGsgb3BlcmF0aW9ucyAoYm90aCBjYWNoZWxpbmUgYW5kIHBhcnRpYWwgICAgICAgICAgICAqCiAgKiBvcGVyYXRpb25zKSBvciBCVEUvSU8uIEJlY2F1c2UgdGhlIENSQiBlbnRyaWVzIGFyZSB2ZXJ5IHdpZGUsIGZpdmUgICAqCiAgKiByZWdpc3RlcnMgKF9BIHRvIF9FKSBhcmUgcmVxdWlyZWQgdG8gcmVhZCBhbmQgd3JpdGUgZWFjaCBlbnRyeS4gICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWNyYjBfYl91IHsKLQl1aW50NjRfdAlpaV9pY3JiMF9iX3JlZ3ZhbDsKLQlzdHJ1Y3QJewotCQl1aW50NjRfdAlpYl94dF9lcnIJCSAgOgkgMTsKLQkJdWludDY0X3QJaWJfbWFyawkJCSAgOgkgMTsKLQkJdWludDY0X3QJaWJfbG5fdWNlCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWliX2VycmNvZGUJCSAgOgkgMzsKLQkJdWludDY0X3QJaWJfZXJyb3IJCSAgOgkgMTsKLQkJdWludDY0X3QJaWJfc3RhbGxfX2J0ZV8xCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWliX3N0YWxsX19idGVfMAkJICA6CSAxOwotCQl1aW50NjRfdAlpYl9zdGFsbF9faW50cgkJICA6CSAxOwotCQl1aW50NjRfdAlpYl9zdGFsbF9pYgkJICA6CSAxOwotCQl1aW50NjRfdAlpYl9pbnR2bgkJICA6CSAxOwotCQl1aW50NjRfdAlpYl93YgkJCSAgOgkgMTsKLQkJdWludDY0X3QJaWJfaG9sZAkJCSAgOgkgMTsKLQkJdWludDY0X3QJaWJfYWNrCQkJICA6CSAxOwotCQl1aW50NjRfdAlpYl9yZXNwCQkJICA6CSAxOwotCQl1aW50NjRfdAlpYl9hY2tfY250CQkgIDoJMTE7Ci0JCXVpbnQ2NF90CWliX3JzdmQJCQkgIDoJIDc7Ci0JCXVpbnQ2NF90CWliX2V4YwkJCSAgOgkgNTsKLQkJdWludDY0X3QJaWJfaW5pdAkJCSAgOgkgMzsKLQkJdWludDY0X3QJaWJfaW1zZwkJCSAgOgkgODsKLQkJdWludDY0X3QJaWJfaW1zZ3R5cGUJCSAgOgkgMjsKLQkJdWludDY0X3QJaWJfdXNlX29sZAkJICA6CSAxOwotCQl1aW50NjRfdAlpYl9yc3ZkXzEJCSAgOgkxMTsKKwl1aW50NjRfdCBpaV9pY3JiMF9iX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpYl94dF9lcnI6MTsKKwkJdWludDY0X3QgaWJfbWFyazoxOworCQl1aW50NjRfdCBpYl9sbl91Y2U6MTsKKwkJdWludDY0X3QgaWJfZXJyY29kZTozOworCQl1aW50NjRfdCBpYl9lcnJvcjoxOworCQl1aW50NjRfdCBpYl9zdGFsbF9fYnRlXzE6MTsKKwkJdWludDY0X3QgaWJfc3RhbGxfX2J0ZV8wOjE7CisJCXVpbnQ2NF90IGliX3N0YWxsX19pbnRyOjE7CisJCXVpbnQ2NF90IGliX3N0YWxsX2liOjE7CisJCXVpbnQ2NF90IGliX2ludHZuOjE7CisJCXVpbnQ2NF90IGliX3diOjE7CisJCXVpbnQ2NF90IGliX2hvbGQ6MTsKKwkJdWludDY0X3QgaWJfYWNrOjE7CisJCXVpbnQ2NF90IGliX3Jlc3A6MTsKKwkJdWludDY0X3QgaWJfYWNrX2NudDoxMTsKKwkJdWludDY0X3QgaWJfcnN2ZDo3OworCQl1aW50NjRfdCBpYl9leGM6NTsKKwkJdWludDY0X3QgaWJfaW5pdDozOworCQl1aW50NjRfdCBpYl9pbXNnOjg7CisJCXVpbnQ2NF90IGliX2ltc2d0eXBlOjI7CisJCXVpbnQ2NF90IGliX3VzZV9vbGQ6MTsKKwkJdWludDY0X3QgaWJfcnN2ZF8xOjExOwogCX0gaWlfaWNyYjBfYl9mbGRfczsKIH0gaWlfaWNyYjBfYl91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSAxNSBDUkIgRW50cmllcyAoSUNSQjAgdG8gSUNSQkUpIHRoYXQgYXJlICAgICAqCiAgKiB1c2VkIGZvciBDcm9zc3RhbGsgb3BlcmF0aW9ucyAoYm90aCBjYWNoZWxpbmUgYW5kIHBhcnRpYWwgICAgICAgICAgICAqCiAgKiBvcGVyYXRpb25zKSBvciBCVEUvSU8uIEJlY2F1c2UgdGhlIENSQiBlbnRyaWVzIGFyZSB2ZXJ5IHdpZGUsIGZpdmUgICAqCiAgKiByZWdpc3RlcnMgKF9BIHRvIF9FKSBhcmUgcmVxdWlyZWQgdG8gcmVhZCBhbmQgd3JpdGUgZWFjaCBlbnRyeS4gICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWNyYjBfY191IHsKLQl1aW50NjRfdAlpaV9pY3JiMF9jX3JlZ3ZhbDsKLQlzdHJ1Y3QJewotCQl1aW50NjRfdAlpY19zb3VyY2UJCSAgOgkxNTsKLQkJdWludDY0X3QJaWNfc2l6ZQkJCSAgOgkgMjsKLQkJdWludDY0X3QJaWNfY3QJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWljX2J0ZV9udW0JCSAgOgkgMTsKLQkJdWludDY0X3QJaWNfZ2JyCQkJICA6CSAxOwotCQl1aW50NjRfdAlpY19yZXNwcnFkCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWljX2JvCQkJICA6CSAxOwotCQl1aW50NjRfdAlpY19zdXBwbAkJICA6CTE1OwotCQl1aW50NjRfdAlpY19yc3ZkCQkJICA6CTI3OworCXVpbnQ2NF90IGlpX2ljcmIwX2NfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGljX3NvdXJjZToxNTsKKwkJdWludDY0X3QgaWNfc2l6ZToyOworCQl1aW50NjRfdCBpY19jdDoxOworCQl1aW50NjRfdCBpY19idGVfbnVtOjE7CisJCXVpbnQ2NF90IGljX2dicjoxOworCQl1aW50NjRfdCBpY19yZXNwcnFkOjE7CisJCXVpbnQ2NF90IGljX2JvOjE7CisJCXVpbnQ2NF90IGljX3N1cHBsOjE1OworCQl1aW50NjRfdCBpY19yc3ZkOjI3OwogCX0gaWlfaWNyYjBfY19mbGRfczsKIH0gaWlfaWNyYjBfY191X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSAxNSBDUkIgRW50cmllcyAoSUNSQjAgdG8gSUNSQkUpIHRoYXQgYXJlICAgICAqCiAgKiB1c2VkIGZvciBDcm9zc3RhbGsgb3BlcmF0aW9ucyAoYm90aCBjYWNoZWxpbmUgYW5kIHBhcnRpYWwgICAgICAgICAgICAqCiAgKiBvcGVyYXRpb25zKSBvciBCVEUvSU8uIEJlY2F1c2UgdGhlIENSQiBlbnRyaWVzIGFyZSB2ZXJ5IHdpZGUsIGZpdmUgICAqCiAgKiByZWdpc3RlcnMgKF9BIHRvIF9FKSBhcmUgcmVxdWlyZWQgdG8gcmVhZCBhbmQgd3JpdGUgZWFjaCBlbnRyeS4gICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWNyYjBfZF91IHsKLQl1aW50NjRfdAlpaV9pY3JiMF9kX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaWRfcGFfYmUgICAgICAgICAgICAgICAgICA6CTQzOwotCQl1aW50NjRfdAlpZF9idGVfb3AJCSAgOgkgMTsKLQkJdWludDY0X3QJaWRfcHJfcHNjCQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlkX3ByX2NudAkJICA6CSA0OwotCQl1aW50NjRfdAlpZF9zbGVlcAkJICA6CSAxOwotCQl1aW50NjRfdAlpZF9yc3ZkCQkJICA6CTExOworCXVpbnQ2NF90IGlpX2ljcmIwX2RfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlkX3BhX2JlOjQzOworCQl1aW50NjRfdCBpZF9idGVfb3A6MTsKKwkJdWludDY0X3QgaWRfcHJfcHNjOjQ7CisJCXVpbnQ2NF90IGlkX3ByX2NudDo0OworCQl1aW50NjRfdCBpZF9zbGVlcDoxOworCQl1aW50NjRfdCBpZF9yc3ZkOjExOwogCX0gaWlfaWNyYjBfZF9mbGRfczsKIH0gaWlfaWNyYjBfZF91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIFRoZXJlIGFyZSAxNSBDUkIgRW50cmllcyAoSUNSQjAgdG8gSUNSQkUpIHRoYXQgYXJlICAgICAqCiAgKiB1c2VkIGZvciBDcm9zc3RhbGsgb3BlcmF0aW9ucyAoYm90aCBjYWNoZWxpbmUgYW5kIHBhcnRpYWwgICAgICAgICAgICAqCiAgKiBvcGVyYXRpb25zKSBvciBCVEUvSU8uIEJlY2F1c2UgdGhlIENSQiBlbnRyaWVzIGFyZSB2ZXJ5IHdpZGUsIGZpdmUgICAqCiAgKiByZWdpc3RlcnMgKF9BIHRvIF9FKSBhcmUgcmVxdWlyZWQgdG8gcmVhZCBhbmQgd3JpdGUgZWFjaCBlbnRyeS4gICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWNyYjBfZV91IHsKLQl1aW50NjRfdAlpaV9pY3JiMF9lX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaWVfdGltZW91dCAgICAgICAgICAgICAgICA6CSA4OwotCQl1aW50NjRfdAlpZV9jb250ZXh0CQkgIDoJMTU7Ci0JCXVpbnQ2NF90CWllX3JzdmQJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWllX3R2bGQJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWllX2N2bGQJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWllX3JzdmRfMAkJICA6CTM4OworCXVpbnQ2NF90IGlpX2ljcmIwX2VfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGllX3RpbWVvdXQ6ODsKKwkJdWludDY0X3QgaWVfY29udGV4dDoxNTsKKwkJdWludDY0X3QgaWVfcnN2ZDoxOworCQl1aW50NjRfdCBpZV90dmxkOjE7CisJCXVpbnQ2NF90IGllX2N2bGQ6MTsKKwkJdWludDY0X3QgaWVfcnN2ZF8wOjM4OwogCX0gaWlfaWNyYjBfZV9mbGRfczsKIH0gaWlfaWNyYjBfZV91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgbG93ZXIgNjQgYml0cyBvZiB0aGUgaGVhZGVyIG9mIHRoZSAgICAgICAqCiAgKiBzcHVyaW91cyBtZXNzYWdlIGNhcHR1cmVkIGJ5IElJLiBWYWxpZCB3aGVuIHRoZSBTUF9NU0cgYml0IGluIElDTVIgICAqCiAgKiByZWdpc3RlciBpcyBzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWNzbWxfdSB7Ci0JdWludDY0X3QJaWlfaWNzbWxfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3R0X2FkZHIgICAgICAgICAgICAgICAgIDoJNDc7Ci0JCXVpbnQ2NF90CWlfbmV3c3VwcGxfZXgJCSAgOgkxNDsKLQkJdWludDY0X3QJaV9yZXNlcnZlZAkJICA6CSAyOwotCQl1aW50NjRfdCAgICAgICBpX292ZXJmbG93ICAgICAgICAgICAgICAgIDogICAgICAxOworCXVpbnQ2NF90IGlpX2ljc21sX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3R0X2FkZHI6NDc7CisJCXVpbnQ2NF90IGlfbmV3c3VwcGxfZXg6MTQ7CisJCXVpbnQ2NF90IGlfcmVzZXJ2ZWQ6MjsKKwkJdWludDY0X3QgaV9vdmVyZmxvdzoxOwogCX0gaWlfaWNzbWxfZmxkX3M7CiB9IGlpX2ljc21sX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBtaWRkbGUgNjQgYml0cyBvZiB0aGUgaGVhZGVyIG9mIHRoZSAgICAgICoKICAqIHNwdXJpb3VzIG1lc3NhZ2UgY2FwdHVyZWQgYnkgSUkuIFZhbGlkIHdoZW4gdGhlIFNQX01TRyBiaXQgaW4gSUNNUiAgICoKICAqIHJlZ2lzdGVyIGlzIHNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pY3NtbV91IHsKLQl1aW50NjRfdAlpaV9pY3NtbV9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfdHRfYWNrX2NudCAgICAgICAgICAgICAgOgkxMTsKLQkJdWludDY0X3QJaV9yZXNlcnZlZAkJICA6CTUzOworCXVpbnQ2NF90IGlpX2ljc21tX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3R0X2Fja19jbnQ6MTE7CisJCXVpbnQ2NF90IGlfcmVzZXJ2ZWQ6NTM7CiAJfSBpaV9pY3NtbV9mbGRfczsKIH0gaWlfaWNzbW1fdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIG1pY3Jvc2NvcGljIHN0YXRlLCBhbGwgdGhlIGlucHV0cyB0byAgICAgKgogICogdGhlIHByb3RvY29sIHRhYmxlLCBjYXB0dXJlZCB3aXRoIHRoZSBzcHVyaW91cyBtZXNzYWdlLiBWYWxpZCB3aGVuICAgKgogICogdGhlIFNQX01TRyBiaXQgaW4gdGhlIElDTVIgcmVnaXN0ZXIgaXMgc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2ljc21oX3UgewotCXVpbnQ2NF90CWlpX2ljc21oX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV90dF92bGQgICAgICAgICAgICAgICAgICA6CSAxOwotCQl1aW50NjRfdAlpX3hlcnIJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfZnRfY3dhY3RfbwkJICA6CSAxOwotCQl1aW50NjRfdAlpX2Z0X3dhY3RfbwkJICA6CSAxOwotCQl1aW50NjRfdCAgICAgICBpX2Z0X2FjdGl2ZV9vICAgICAgICAgICAgIDogICAgICAxOwotCQl1aW50NjRfdAlpX3N5bmMJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfbW51c2cJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfbW51c3oJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcGx1c3oJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcGx1c2cJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfdHRfZXhjCQkgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfdHRfd2IJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfdHRfaG9sZAkJICA6CSAxOwotCQl1aW50NjRfdAlpX3R0X2FjawkJICA6CSAxOwotCQl1aW50NjRfdAlpX3R0X3Jlc3AJCSAgOgkgMTsKLQkJdWludDY0X3QJaV90dF9pbnR2bgkJICA6CSAxOwotCQl1aW50NjRfdAlpX2dfc3RhbGxfYnRlMQkJICA6CSAxOwotCQl1aW50NjRfdAlpX2dfc3RhbGxfYnRlMAkJICA6CSAxOwotCQl1aW50NjRfdAlpX2dfc3RhbGxfaWwJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9nX3N0YWxsX2liCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfdHRfaW1zZwkJICA6CSA4OwotCQl1aW50NjRfdAlpX3R0X2ltc2d0eXBlCQkgIDoJIDI7Ci0JCXVpbnQ2NF90CWlfdHRfdXNlX29sZAkJICA6CSAxOwotCQl1aW50NjRfdAlpX3R0X3Jlc3ByZXFkCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfdHRfYnRlX251bQkJICA6CSAxOwotCQl1aW50NjRfdAlpX2NibgkJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9tYXRjaAkJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9ycGNudF9sdF8zNAkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JwY250X2dlXzM0CQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnBjbnRfbHRfMTgJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9ycGNudF9nZV8xOAkJICA6CSAxOwotCQl1aW50NjRfdCAgICAgICBpX3JwY250X2x0XzIgICAgICAgICAgICAgIDogICAgICAxOwotCQl1aW50NjRfdAlpX3JwY250X2dlXzIJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9ycWNudF9sdF8xOAkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JxY250X2dlXzE4CQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnFjbnRfbHRfMgkJICA6CSAxOwotCQl1aW50NjRfdAlpX3JxY250X2dlXzIJCSAgOgkgMTsKLQkJdWludDY0X3QJaV90dF9kZXZpY2UJCSAgOgkgNzsKLQkJdWludDY0X3QJaV90dF9pbml0CQkgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfcmVzZXJ2ZWQJCSAgOgkgNTsKKwl1aW50NjRfdCBpaV9pY3NtaF9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV90dF92bGQ6MTsKKwkJdWludDY0X3QgaV94ZXJyOjE7CisJCXVpbnQ2NF90IGlfZnRfY3dhY3RfbzoxOworCQl1aW50NjRfdCBpX2Z0X3dhY3RfbzoxOworCQl1aW50NjRfdCBpX2Z0X2FjdGl2ZV9vOjE7CisJCXVpbnQ2NF90IGlfc3luYzoxOworCQl1aW50NjRfdCBpX21udXNnOjE7CisJCXVpbnQ2NF90IGlfbW51c3o6MTsKKwkJdWludDY0X3QgaV9wbHVzejoxOworCQl1aW50NjRfdCBpX3BsdXNnOjE7CisJCXVpbnQ2NF90IGlfdHRfZXhjOjU7CisJCXVpbnQ2NF90IGlfdHRfd2I6MTsKKwkJdWludDY0X3QgaV90dF9ob2xkOjE7CisJCXVpbnQ2NF90IGlfdHRfYWNrOjE7CisJCXVpbnQ2NF90IGlfdHRfcmVzcDoxOworCQl1aW50NjRfdCBpX3R0X2ludHZuOjE7CisJCXVpbnQ2NF90IGlfZ19zdGFsbF9idGUxOjE7CisJCXVpbnQ2NF90IGlfZ19zdGFsbF9idGUwOjE7CisJCXVpbnQ2NF90IGlfZ19zdGFsbF9pbDoxOworCQl1aW50NjRfdCBpX2dfc3RhbGxfaWI6MTsKKwkJdWludDY0X3QgaV90dF9pbXNnOjg7CisJCXVpbnQ2NF90IGlfdHRfaW1zZ3R5cGU6MjsKKwkJdWludDY0X3QgaV90dF91c2Vfb2xkOjE7CisJCXVpbnQ2NF90IGlfdHRfcmVzcHJlcWQ6MTsKKwkJdWludDY0X3QgaV90dF9idGVfbnVtOjE7CisJCXVpbnQ2NF90IGlfY2JuOjE7CisJCXVpbnQ2NF90IGlfbWF0Y2g6MTsKKwkJdWludDY0X3QgaV9ycGNudF9sdF8zNDoxOworCQl1aW50NjRfdCBpX3JwY250X2dlXzM0OjE7CisJCXVpbnQ2NF90IGlfcnBjbnRfbHRfMTg6MTsKKwkJdWludDY0X3QgaV9ycGNudF9nZV8xODoxOworCQl1aW50NjRfdCBpX3JwY250X2x0XzI6MTsKKwkJdWludDY0X3QgaV9ycGNudF9nZV8yOjE7CisJCXVpbnQ2NF90IGlfcnFjbnRfbHRfMTg6MTsKKwkJdWludDY0X3QgaV9ycWNudF9nZV8xODoxOworCQl1aW50NjRfdCBpX3JxY250X2x0XzI6MTsKKwkJdWludDY0X3QgaV9ycWNudF9nZV8yOjE7CisJCXVpbnQ2NF90IGlfdHRfZGV2aWNlOjc7CisJCXVpbnQ2NF90IGlfdHRfaW5pdDozOworCQl1aW50NjRfdCBpX3Jlc2VydmVkOjU7CiAJfSBpaV9pY3NtaF9mbGRfczsKIH0gaWlfaWNzbWhfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIFRoZSBTaHViIERFQlVHIHVuaXQgcHJvdmlkZXMgYSAzLWJpdCBzZWxlY3Rpb24gc2lnbmFsIHRvIHRoZSAgICAgICAgKgogICogSUkgY29yZSBhbmQgYSAzLWJpdCBzZWxlY3Rpb24gc2lnbmFsIHRvIHRoZSBmc2JjbGsgZG9tYWluIGluIHRoZSBJSSAgKgogICogd3JhcHBlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lkYnNzX3UgewotCXVpbnQ2NF90CWlpX2lkYnNzX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV9paW9jbGtfY29yZV9zdWJtZW51ICAgICA6CSAzOwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJIDU7Ci0JCXVpbnQ2NF90CWlfZnNiY2xrX3dyYXBwZXJfc3VibWVudSAgOgkgMzsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgNTsKLQkJdWludDY0X3QJaV9paW9jbGtfbWVudQkJICA6CSA1OwotCQl1aW50NjRfdAlpX3JzdmRfMgkJICA6CTQzOworCXVpbnQ2NF90IGlpX2lkYnNzX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX2lpb2Nsa19jb3JlX3N1Ym1lbnU6MzsKKwkJdWludDY0X3QgaV9yc3ZkOjU7CisJCXVpbnQ2NF90IGlfZnNiY2xrX3dyYXBwZXJfc3VibWVudTozOworCQl1aW50NjRfdCBpX3JzdmRfMTo1OworCQl1aW50NjRfdCBpX2lpb2Nsa19tZW51OjU7CisJCXVpbnQ2NF90IGlfcnN2ZF8yOjQzOwogCX0gaWlfaWRic3NfZmxkX3M7CiB9IGlpX2lkYnNzX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqIERlc2NyaXB0aW9uOiAgVGhpcyByZWdpc3RlciBpcyB1c2VkIHRvIHNldCB1cCB0aGUgbGVuZ3RoIGZvciBhICAgICAgICoKICAqIHRyYW5zZmVyIGFuZCB0aGVuIHRvIG1vbml0b3IgdGhlIHByb2dyZXNzIG9mIHRoYXQgdHJhbnNmZXIuIFRoaXMgICAgICoKICAqIHJlZ2lzdGVyIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSBhIHRyYW5zZmVyIGlzIHN0YXJ0ZWQuIEEgICAgICoKQEAgLTI1NTMsNjMgKzI0NjIsNjAgQEAKICAqIHRyYW5zZmVyIGNvbXBsZXRlcywgaGFyZHdhcmUgd2lsbCBjbGVhciB0aGUgQnVzeSBiaXQuIFRoZSBsZW5ndGggICAgICoKICAqIGZpZWxkIHdpbGwgYWxzbyBjb250YWluIHRoZSBudW1iZXIgb2YgY2FjaGUgbGluZXMgbGVmdCB0byBiZSAgICAgICAgICoKICAqIHRyYW5zZmVycmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pYmxzMF91IHsKLQl1aW50NjRfdAlpaV9pYmxzMF9yZWd2YWw7Ci0Jc3RydWN0CXsKLQkJdWludDY0X3QJaV9sZW5ndGgJCSAgOgkxNjsKLQkJdWludDY0X3QJaV9lcnJvcgkJCSAgOgkgMTsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgMzsKLQkJdWludDY0X3QJaV9idXN5CQkJICA6CSAxOwotCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDQzOworCXVpbnQ2NF90IGlpX2libHMwX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX2xlbmd0aDoxNjsKKwkJdWludDY0X3QgaV9lcnJvcjoxOworCQl1aW50NjRfdCBpX3JzdmRfMTozOworCQl1aW50NjRfdCBpX2J1c3k6MTsKKwkJdWludDY0X3QgaV9yc3ZkOjQzOwogCX0gaWlfaWJsczBfZmxkX3M7CiB9IGlpX2libHMwX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGlzIHJlZ2lzdGVyIHNob3VsZCBiZSBsb2FkZWQgYmVmb3JlIGEgdHJhbnNmZXIgaXMgc3RhcnRlZC4gVGhlICAgICoKICAqIGFkZHJlc3MgdG8gYmUgbG9hZGVkIGluIGJpdHMgMzk6MCBpcyB0aGUgNDAtYml0IFRSZXgrIHBoeXNpY2FsICAgICAgICoKICAqIGFkZHJlc3MgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMS4zLCBGaWd1cmUyIGFuZCBGaWd1cmUzLiBTaW5jZSAgICAgICoKICAqIHRoZSBib3R0b20gNyBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSBhbHdheXMgdGFrZW4gdG8gYmUgemVybywgQlRFICAgICoKICAqIHRyYW5zZmVycyBhcmUgYWx3YXlzIGNhY2hlbGluZS1hbGlnbmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pYnNhMF91IHsKLQl1aW50NjRfdAlpaV9pYnNhMF9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xICAgICAgICAgICAgICAgICAgOgkgNzsKLQkJdWludDY0X3QJaV9hZGRyCQkJICA6CTQyOwotCQl1aW50NjRfdCAgICAgICBpX3JzdmQgICAgICAgICAgICAgICAgICAgIDogICAgIDE1OworCXVpbnQ2NF90IGlpX2lic2EwX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3JzdmRfMTo3OworCQl1aW50NjRfdCBpX2FkZHI6NDI7CisJCXVpbnQ2NF90IGlfcnN2ZDoxNTsKIAl9IGlpX2lic2EwX2ZsZF9zOwogfSBpaV9pYnNhMF91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhpcyByZWdpc3RlciBzaG91bGQgYmUgbG9hZGVkIGJlZm9yZSBhIHRyYW5zZmVyIGlzIHN0YXJ0ZWQuIFRoZSAgICAqCiAgKiBhZGRyZXNzIHRvIGJlIGxvYWRlZCBpbiBiaXRzIDM5OjAgaXMgdGhlIDQwLWJpdCBUUmV4KyBwaHlzaWNhbCAgICAgICAqCiAgKiBhZGRyZXNzIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEuMywgRmlndXJlMiBhbmQgRmlndXJlMy4gU2luY2UgICAgICAqCiAgKiB0aGUgYm90dG9tIDcgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgYWx3YXlzIHRha2VuIHRvIGJlIHplcm8sIEJURSAgICAqCiAgKiB0cmFuc2ZlcnMgYXJlIGFsd2F5cyBjYWNoZWxpbmUtYWxpZ25lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWJkYTBfdSB7Ci0JdWludDY0X3QJaWlfaWJkYTBfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDc7Ci0JCXVpbnQ2NF90CWlfYWRkcgkJCSAgOgk0MjsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTE1OworCXVpbnQ2NF90IGlpX2liZGEwX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3JzdmRfMTo3OworCQl1aW50NjRfdCBpX2FkZHI6NDI7CisJCXVpbnQ2NF90IGlfcnN2ZDoxNTsKIAl9IGlpX2liZGEwX2ZsZF9zOwogfSBpaV9pYmRhMF91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgV3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyIHNldHMgdXAgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHRyYW5zZmVyICAgICAqCiAgKiBhbmQgaW5pdGlhdGVzIHRoZSB0cmFuc2ZlciBvcGVyYXRpb24uIFJlYWRpbmcgdGhpcyByZWdpc3RlciBoYXMgICAgICAqCiAgKiB0aGUgc2lkZSBlZmZlY3Qgb2YgdGVybWluYXRpbmcgYW55IHRyYW5zZmVyIGluIHByb2dyZXNzLiBOb3RlOiAgICAgICAqCkBAIC0yNjE3LDYxICsyNTIzLDU4IEBACiAgKiBvdGhlciBCVEUuIElmIGEgQlRFIHN0cmVhbSBoYXMgdG8gYmUgc3RvcHBlZCAoZHVlIHRvIGVycm9yICAgICAgICAgICAqCiAgKiBoYW5kbGluZyBmb3IgZXhhbXBsZSksIGJvdGggQlRFIHN0cmVhbXMgc2hvdWxkIGJlIHN0b3BwZWQgYW5kICAgICAgICAqCiAgKiB0aGVpciB0cmFuc2ZlcnMgZGlzY2FyZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWJjdDBfdSB7Ci0JdWludDY0X3QJaWlfaWJjdDBfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3plcm9maWxsICAgICAgICAgICAgICAgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8yCQkgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfbm90aWZ5CQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDM7Ci0JCXVpbnQ2NF90ICAgICAgIGlfcG9pc29uICAgICAgICAgICAgICAgICAgOiAgICAgIDE7Ci0JCXVpbnQ2NF90ICAgICAgIGlfcnN2ZCAgICAgICAgICAgICAgICAgICAgOiAgICAgNTU7CisJdWludDY0X3QgaWlfaWJjdDBfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfemVyb2ZpbGw6MTsKKwkJdWludDY0X3QgaV9yc3ZkXzI6MzsKKwkJdWludDY0X3QgaV9ub3RpZnk6MTsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MzsKKwkJdWludDY0X3QgaV9wb2lzb246MTsKKwkJdWludDY0X3QgaV9yc3ZkOjU1OwogCX0gaWlfaWJjdDBfZmxkX3M7CiB9IGlpX2liY3QwX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIHRvIHdoaWNoIHRoZSBXSU5WIGlzIHNlbnQuICAgICAgICoKICAqIFRoaXMgYWRkcmVzcyBoYXMgdG8gYmUgY2FjaGUgbGluZSBhbGlnbmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pYm5hMF91IHsKLQl1aW50NjRfdAlpaV9pYm5hMF9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xICAgICAgICAgICAgICAgICAgOgkgNzsKLQkJdWludDY0X3QJaV9hZGRyCQkJICA6CTQyOwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJMTU7CisJdWludDY0X3QgaWlfaWJuYTBfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjc7CisJCXVpbnQ2NF90IGlfYWRkcjo0MjsKKwkJdWludDY0X3QgaV9yc3ZkOjE1OwogCX0gaWlfaWJuYTBfZmxkX3M7CiB9IGlpX2libmEwX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBwcm9ncmFtbWFibGUgbGV2ZWwgYXMgd2VsbCBhcyB0aGUgbm9kZSAgICoKICAqIElEIGFuZCBQSSB1bml0IG9mIHRoZSBwcm9jZXNzb3IgdG8gd2hpY2ggdGhlIGludGVycnVwdCB3aWxsIGJlICAgICAgICoKLSAqIHNlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIHNlbnQuCQkJCQkJCQkqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWJpYTBfdSB7Ci0JdWludDY0X3QJaWlfaWJpYTBfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JzdmRfMiAgICAgICAgICAgICAgICAgICA6CSAxOwotCQl1aW50NjRfdAlpX25vZGVfaWQJCSAgOgkxMTsKLQkJdWludDY0X3QJaV9yc3ZkXzEJCSAgOgkgNDsKLQkJdWludDY0X3QJaV9sZXZlbAkJCSAgOgkgNzsKLQkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA0MTsKKwl1aW50NjRfdCBpaV9pYmlhMF9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9yc3ZkXzI6MTsKKwkJdWludDY0X3QgaV9ub2RlX2lkOjExOworCQl1aW50NjRfdCBpX3JzdmRfMTo0OworCQl1aW50NjRfdCBpX2xldmVsOjc7CisJCXVpbnQ2NF90IGlfcnN2ZDo0MTsKIAl9IGlpX2liaWEwX2ZsZF9zOwogfSBpaV9pYmlhMF91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiBEZXNjcmlwdGlvbjogIFRoaXMgcmVnaXN0ZXIgaXMgdXNlZCB0byBzZXQgdXAgdGhlIGxlbmd0aCBmb3IgYSAgICAgICAqCiAgKiB0cmFuc2ZlciBhbmQgdGhlbiB0byBtb25pdG9yIHRoZSBwcm9ncmVzcyBvZiB0aGF0IHRyYW5zZmVyLiBUaGlzICAgICAqCiAgKiByZWdpc3RlciBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgYSB0cmFuc2ZlciBpcyBzdGFydGVkLiBBICAgICAqCkBAIC0yNjgyLDYzICsyNTg1LDYwIEBACiAgKiB0cmFuc2ZlciBjb21wbGV0ZXMsIGhhcmR3YXJlIHdpbGwgY2xlYXIgdGhlIEJ1c3kgYml0LiBUaGUgbGVuZ3RoICAgICAqCiAgKiBmaWVsZCB3aWxsIGFsc28gY29udGFpbiB0aGUgbnVtYmVyIG9mIGNhY2hlIGxpbmVzIGxlZnQgdG8gYmUgICAgICAgICAqCiAgKiB0cmFuc2ZlcnJlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWJsczFfdSB7Ci0JdWludDY0X3QJaWlfaWJsczFfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX2xlbmd0aCAgICAgICAgICAgICAgICAgIDoJMTY7Ci0JCXVpbnQ2NF90CWlfZXJyb3IJCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfYnVzeQkJCSAgOgkgMTsKLQkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA0MzsKKwl1aW50NjRfdCBpaV9pYmxzMV9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV9sZW5ndGg6MTY7CisJCXVpbnQ2NF90IGlfZXJyb3I6MTsKKwkJdWludDY0X3QgaV9yc3ZkXzE6MzsKKwkJdWludDY0X3QgaV9idXN5OjE7CisJCXVpbnQ2NF90IGlfcnN2ZDo0MzsKIAl9IGlpX2libHMxX2ZsZF9zOwogfSBpaV9pYmxzMV91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhpcyByZWdpc3RlciBzaG91bGQgYmUgbG9hZGVkIGJlZm9yZSBhIHRyYW5zZmVyIGlzIHN0YXJ0ZWQuIFRoZSAgICAqCiAgKiBhZGRyZXNzIHRvIGJlIGxvYWRlZCBpbiBiaXRzIDM5OjAgaXMgdGhlIDQwLWJpdCBUUmV4KyBwaHlzaWNhbCAgICAgICAqCiAgKiBhZGRyZXNzIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEuMywgRmlndXJlMiBhbmQgRmlndXJlMy4gU2luY2UgICAgICAqCiAgKiB0aGUgYm90dG9tIDcgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgYWx3YXlzIHRha2VuIHRvIGJlIHplcm8sIEJURSAgICAqCiAgKiB0cmFuc2ZlcnMgYXJlIGFsd2F5cyBjYWNoZWxpbmUtYWxpZ25lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWJzYTFfdSB7Ci0JdWludDY0X3QJaWlfaWJzYTFfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDc7Ci0JCXVpbnQ2NF90CWlfYWRkcgkJCSAgOgkzMzsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTI0OworCXVpbnQ2NF90IGlpX2lic2ExX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3JzdmRfMTo3OworCQl1aW50NjRfdCBpX2FkZHI6MzM7CisJCXVpbnQ2NF90IGlfcnN2ZDoyNDsKIAl9IGlpX2lic2ExX2ZsZF9zOwogfSBpaV9pYnNhMV91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgVGhpcyByZWdpc3RlciBzaG91bGQgYmUgbG9hZGVkIGJlZm9yZSBhIHRyYW5zZmVyIGlzIHN0YXJ0ZWQuIFRoZSAgICAqCiAgKiBhZGRyZXNzIHRvIGJlIGxvYWRlZCBpbiBiaXRzIDM5OjAgaXMgdGhlIDQwLWJpdCBUUmV4KyBwaHlzaWNhbCAgICAgICAqCiAgKiBhZGRyZXNzIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEuMywgRmlndXJlMiBhbmQgRmlndXJlMy4gU2luY2UgICAgICAqCiAgKiB0aGUgYm90dG9tIDcgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgYWx3YXlzIHRha2VuIHRvIGJlIHplcm8sIEJURSAgICAqCiAgKiB0cmFuc2ZlcnMgYXJlIGFsd2F5cyBjYWNoZWxpbmUtYWxpZ25lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWJkYTFfdSB7Ci0JdWludDY0X3QJaWlfaWJkYTFfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3JzdmRfMSAgICAgICAgICAgICAgICAgIDoJIDc7Ci0JCXVpbnQ2NF90CWlfYWRkcgkJCSAgOgkzMzsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CTI0OworCXVpbnQ2NF90IGlpX2liZGExX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX3JzdmRfMTo3OworCQl1aW50NjRfdCBpX2FkZHI6MzM7CisJCXVpbnQ2NF90IGlfcnN2ZDoyNDsKIAl9IGlpX2liZGExX2ZsZF9zOwogfSBpaV9pYmRhMV91X3Q7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKiAgV3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyIHNldHMgdXAgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHRyYW5zZmVyICAgICAqCiAgKiBhbmQgaW5pdGlhdGVzIHRoZSB0cmFuc2ZlciBvcGVyYXRpb24uIFJlYWRpbmcgdGhpcyByZWdpc3RlciBoYXMgICAgICAqCiAgKiB0aGUgc2lkZSBlZmZlY3Qgb2YgdGVybWluYXRpbmcgYW55IHRyYW5zZmVyIGluIHByb2dyZXNzLiBOb3RlOiAgICAgICAqCkBAIC0yNzQ2LDYxICsyNjQ2LDU4IEBACiAgKiBvdGhlciBCVEUuIElmIGEgQlRFIHN0cmVhbSBoYXMgdG8gYmUgc3RvcHBlZCAoZHVlIHRvIGVycm9yICAgICAgICAgICAqCiAgKiBoYW5kbGluZyBmb3IgZXhhbXBsZSksIGJvdGggQlRFIHN0cmVhbXMgc2hvdWxkIGJlIHN0b3BwZWQgYW5kICAgICAgICAqCiAgKiB0aGVpciB0cmFuc2ZlcnMgZGlzY2FyZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWJjdDFfdSB7Ci0JdWludDY0X3QJaWlfaWJjdDFfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3plcm9maWxsICAgICAgICAgICAgICAgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8yCQkgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfbm90aWZ5CQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnN2ZF8xCQkgIDoJIDM7Ci0JCXVpbnQ2NF90CWlfcG9pc29uCQkgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfcnN2ZAkJCSAgOgk1NTsKKwl1aW50NjRfdCBpaV9pYmN0MV9yZWd2YWw7CisJc3RydWN0IHsKKwkJdWludDY0X3QgaV96ZXJvZmlsbDoxOworCQl1aW50NjRfdCBpX3JzdmRfMjozOworCQl1aW50NjRfdCBpX25vdGlmeToxOworCQl1aW50NjRfdCBpX3JzdmRfMTozOworCQl1aW50NjRfdCBpX3BvaXNvbjoxOworCQl1aW50NjRfdCBpX3JzdmQ6NTU7CiAJfSBpaV9pYmN0MV9mbGRfczsKIH0gaWlfaWJjdDFfdV90OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCQkJCQkJCQkJKgogICogIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGFkZHJlc3MgdG8gd2hpY2ggdGhlIFdJTlYgaXMgc2VudC4gICAgICAgKgogICogVGhpcyBhZGRyZXNzIGhhcyB0byBiZSBjYWNoZSBsaW5lIGFsaWduZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2libmExX3UgewotCXVpbnQ2NF90CWlpX2libmExX3JlZ3ZhbDsKLQlzdHJ1Y3QgIHsKLQkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CSA3OwotCQl1aW50NjRfdAlpX2FkZHIJCQkgIDoJMzM7Ci0JCXVpbnQ2NF90ICAgICAgIGlfcnN2ZCAgICAgICAgICAgICAgICAgICAgOiAgICAgMjQ7CisJdWludDY0X3QgaWlfaWJuYTFfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjc7CisJCXVpbnQ2NF90IGlfYWRkcjozMzsKKwkJdWludDY0X3QgaV9yc3ZkOjI0OwogCX0gaWlfaWJuYTFfZmxkX3M7CiB9IGlpX2libmExX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBwcm9ncmFtbWFibGUgbGV2ZWwgYXMgd2VsbCBhcyB0aGUgbm9kZSAgICoKICAqIElEIGFuZCBQSSB1bml0IG9mIHRoZSBwcm9jZXNzb3IgdG8gd2hpY2ggdGhlIGludGVycnVwdCB3aWxsIGJlICAgICAgICoKLSAqIHNlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIHNlbnQuCQkJCQkJCQkqCisgKgkJCQkJCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWJpYTFfdSB7Ci0JdWludDY0X3QJaWlfaWJpYTFfcmVndmFsOwotCXN0cnVjdCAgewotCQl1aW50NjRfdAlpX3BpX2lkICAgICAgICAgICAgICAgICAgIDoJIDE7Ci0JCXVpbnQ2NF90CWlfbm9kZV9pZAkJICA6CSA4OwotCQl1aW50NjRfdAlpX3JzdmRfMQkJICA6CSA3OwotCQl1aW50NjRfdAlpX2xldmVsCQkJICA6CSA3OwotCQl1aW50NjRfdAlpX3JzdmQJCQkgIDoJNDE7CisJdWludDY0X3QgaWlfaWJpYTFfcmVndmFsOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IGlfcGlfaWQ6MTsKKwkJdWludDY0X3QgaV9ub2RlX2lkOjg7CisJCXVpbnQ2NF90IGlfcnN2ZF8xOjc7CisJCXVpbnQ2NF90IGlfbGV2ZWw6NzsKKwkJdWludDY0X3QgaV9yc3ZkOjQxOwogCX0gaWlfaWJpYTFfZmxkX3M7CiB9IGlpX2liaWExX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKICAqICBUaGlzIHJlZ2lzdGVyIGRlZmluZXMgdGhlIHJlc291cmNlcyB0aGF0IGZlZWQgaW5mb3JtYXRpb24gaW50byAgICAgICoKICAqIHRoZSB0d28gcGVyZm9ybWFuY2UgY291bnRlcnMgbG9jYXRlZCBpbiB0aGUgSU8gUGVyZm9ybWFuY2UgICAgICAgICAgICoKICAqIFByb2ZpbGluZyBSZWdpc3Rlci4gVGhlcmUgYXJlIDE3IGRpZmZlcmVudCBxdWFudGl0aWVzIHRoYXQgY2FuIGJlICAgICoKQEAgLTI4MTEsMTMzICsyNzA4LDEyOSBAQAogICogb3RoZXIgaXMgYXZhaWxhYmxlIGZyb20gdGhlIG90aGVyIHBlcmZvcm1hbmNlIGNvdW50ZXIuIEhlbmNlLCB0aGUgICAgKgogICogSUkgc3VwcG9ydHMgYWxsIDE3KjE2PTI3MiBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgcXVhbnRpdGllcyB0byAgICAgKgogICogbWVhc3VyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwY3JfdSB7Ci0JdWludDY0X3QJaWlfaXBjcl9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfaXBwcjBfYyAgICAgICAgICAgICAgICAgOgkgNDsKLQkJdWludDY0X3QJaV9pcHByMV9jCQkgIDoJIDQ7Ci0JCXVpbnQ2NF90CWlfaWNjdAkJCSAgOgkgODsKLQkJdWludDY0X3QgICAgICAgaV9yc3ZkICAgICAgICAgICAgICAgICAgICA6ICAgICA0ODsKKwl1aW50NjRfdCBpaV9pcGNyX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX2lwcHIwX2M6NDsKKwkJdWludDY0X3QgaV9pcHByMV9jOjQ7CisJCXVpbnQ2NF90IGlfaWNjdDo4OworCQl1aW50NjRfdCBpX3JzdmQ6NDg7CiAJfSBpaV9pcGNyX2ZsZF9zOwogfSBpaV9pcGNyX3VfdDsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKgkJCQkJCQkJCSoKKyAqCQkJCQkJCQkJKgorICoJCQkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcHJfdSB7Ci0JdWludDY0X3QJaWlfaXBwcl9yZWd2YWw7Ci0Jc3RydWN0ICB7Ci0JCXVpbnQ2NF90CWlfaXBwcjAgICAgICAgICAgICAgICAgICAgOgkzMjsKLQkJdWludDY0X3QJaV9pcHByMQkJCSAgOgkzMjsKKwl1aW50NjRfdCBpaV9pcHByX3JlZ3ZhbDsKKwlzdHJ1Y3QgeworCQl1aW50NjRfdCBpX2lwcHIwOjMyOworCQl1aW50NjRfdCBpX2lwcHIxOjMyOwogCX0gaWlfaXBwcl9mbGRfczsKIH0gaWlfaXBwcl91X3Q7CiAKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIHdoaWNoIHdlcmUgbm90IGZvcm1lZCBpbnRvIHN0cnVjdHVyZXMgYXJlICAgICAgICAqCi0gKiBwcm9iYWJseSBpbmRlbnRpY2FsIHRvIGFub3RoZXIgcmVnaXN0ZXIsIGFuZCB0aGUgbmFtZSBvZiB0aGUgICAgICAgICAgICoKLSAqIHJlZ2lzdGVyIGlzIHByb3ZpZGVkIGFnYWluc3QgZWFjaCBvZiB0aGVzZSByZWdpc3RlcnMuIFRoaXMgICAgICAgICAgICAgKgotICogaW5mb3JtYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBjYXJlZnVsbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjFfQSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQSAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCMV9CICAgICAgICAgICAgICAgIElJT19JQ1JCMF9CICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkIxX0MgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0MgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjFfRCAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRCAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCMV9FICAgICAgICAgICAgICAgIElJT19JQ1JCMF9FICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkIyX0EgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0EgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjJfQiAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQiAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCMl9DICAgICAgICAgICAgICAgIElJT19JQ1JCMF9DICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkIyX0QgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0QgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjJfRSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRSAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCM19BICAgICAgICAgICAgICAgIElJT19JQ1JCMF9BICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkIzX0IgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0IgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjNfQyAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQyAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCM19EICAgICAgICAgICAgICAgIElJT19JQ1JCMF9EICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkIzX0UgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0UgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjRfQSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQSAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCNF9CICAgICAgICAgICAgICAgIElJT19JQ1JCMF9CICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkI0X0MgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0MgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjRfRCAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRCAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCNF9FICAgICAgICAgICAgICAgIElJT19JQ1JCMF9FICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkI1X0EgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0EgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjVfQiAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQiAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCNV9DICAgICAgICAgICAgICAgIElJT19JQ1JCMF9DICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkI1X0QgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0QgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjVfRSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRSAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCNl9BICAgICAgICAgICAgICAgIElJT19JQ1JCMF9BICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkI2X0IgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0IgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjZfQyAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQyAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCNl9EICAgICAgICAgICAgICAgIElJT19JQ1JCMF9EICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkI2X0UgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0UgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjdfQSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQSAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCN19CICAgICAgICAgICAgICAgIElJT19JQ1JCMF9CICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkI3X0MgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0MgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjdfRCAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRCAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCN19FICAgICAgICAgICAgICAgIElJT19JQ1JCMF9FICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkI4X0EgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0EgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjhfQiAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQiAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCOF9DICAgICAgICAgICAgICAgIElJT19JQ1JCMF9DICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkI4X0QgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0QgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjhfRSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRSAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCOV9BICAgICAgICAgICAgICAgIElJT19JQ1JCMF9BICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkI5X0IgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0IgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQjlfQyAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQyAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCOV9EICAgICAgICAgICAgICAgIElJT19JQ1JCMF9EICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkI5X0UgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0UgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQkFfQSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQSAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCQV9CICAgICAgICAgICAgICAgIElJT19JQ1JCMF9CICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkJBX0MgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0MgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQkFfRCAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRCAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCQV9FICAgICAgICAgICAgICAgIElJT19JQ1JCMF9FICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkJCX0EgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0EgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQkJfQiAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQiAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCQl9DICAgICAgICAgICAgICAgIElJT19JQ1JCMF9DICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkJCX0QgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0QgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQkJfRSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRSAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCQ19BICAgICAgICAgICAgICAgIElJT19JQ1JCMF9BICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkJDX0IgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0IgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQkNfQyAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQyAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCQ19EICAgICAgICAgICAgICAgIElJT19JQ1JCMF9EICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkJDX0UgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0UgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQkRfQSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQSAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCRF9CICAgICAgICAgICAgICAgIElJT19JQ1JCMF9CICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkJEX0MgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0MgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQkRfRCAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRCAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCRF9FICAgICAgICAgICAgICAgIElJT19JQ1JCMF9FICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkJFX0EgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0EgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQkVfQiAgICAgICAgICAgICAgICBJSU9fSUNSQjBfQiAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgIElJT19JQ1JCRV9DICAgICAgICAgICAgICAgIElJT19JQ1JCMF9DICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgSUlPX0lDUkJFX0QgICAgICAgICAgICAgICAgSUlPX0lDUkIwX0QgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICBJSU9fSUNSQkVfRSAgICAgICAgICAgICAgICBJSU9fSUNSQjBfRSAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkJCQkJCQkJKgorICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIHdoaWNoIHdlcmUgbm90IGZvcm1lZCBpbnRvIHN0cnVjdHVyZXMgYXJlCSoKKyAqIHByb2JhYmx5IGluZGVudGljYWwgdG8gYW5vdGhlciByZWdpc3RlciwgYW5kIHRoZSBuYW1lIG9mIHRoZQkJKgorICogcmVnaXN0ZXIgaXMgcHJvdmlkZWQgYWdhaW5zdCBlYWNoIG9mIHRoZXNlIHJlZ2lzdGVycy4gVGhpcwkJKgorICogaW5mb3JtYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBjYXJlZnVsbHkJCQkJKgorICoJCQkJCQkJCQkqCisgKgkJSUlPX0lDUkIxX0EJCUlJT19JQ1JCMF9BCQkJKgorICoJCUlJT19JQ1JCMV9CCQlJSU9fSUNSQjBfQgkJCSoKKyAqCQlJSU9fSUNSQjFfQwkJSUlPX0lDUkIwX0MJCQkqCisgKgkJSUlPX0lDUkIxX0QJCUlJT19JQ1JCMF9ECQkJKgorICoJCUlJT19JQ1JCMV9FCQlJSU9fSUNSQjBfRQkJCSoKKyAqCQlJSU9fSUNSQjJfQQkJSUlPX0lDUkIwX0EJCQkqCisgKgkJSUlPX0lDUkIyX0IJCUlJT19JQ1JCMF9CCQkJKgorICoJCUlJT19JQ1JCMl9DCQlJSU9fSUNSQjBfQwkJCSoKKyAqCQlJSU9fSUNSQjJfRAkJSUlPX0lDUkIwX0QJCQkqCisgKgkJSUlPX0lDUkIyX0UJCUlJT19JQ1JCMF9FCQkJKgorICoJCUlJT19JQ1JCM19BCQlJSU9fSUNSQjBfQQkJCSoKKyAqCQlJSU9fSUNSQjNfQgkJSUlPX0lDUkIwX0IJCQkqCisgKgkJSUlPX0lDUkIzX0MJCUlJT19JQ1JCMF9DCQkJKgorICoJCUlJT19JQ1JCM19ECQlJSU9fSUNSQjBfRAkJCSoKKyAqCQlJSU9fSUNSQjNfRQkJSUlPX0lDUkIwX0UJCQkqCisgKgkJSUlPX0lDUkI0X0EJCUlJT19JQ1JCMF9BCQkJKgorICoJCUlJT19JQ1JCNF9CCQlJSU9fSUNSQjBfQgkJCSoKKyAqCQlJSU9fSUNSQjRfQwkJSUlPX0lDUkIwX0MJCQkqCisgKgkJSUlPX0lDUkI0X0QJCUlJT19JQ1JCMF9ECQkJKgorICoJCUlJT19JQ1JCNF9FCQlJSU9fSUNSQjBfRQkJCSoKKyAqCQlJSU9fSUNSQjVfQQkJSUlPX0lDUkIwX0EJCQkqCisgKgkJSUlPX0lDUkI1X0IJCUlJT19JQ1JCMF9CCQkJKgorICoJCUlJT19JQ1JCNV9DCQlJSU9fSUNSQjBfQwkJCSoKKyAqCQlJSU9fSUNSQjVfRAkJSUlPX0lDUkIwX0QJCQkqCisgKgkJSUlPX0lDUkI1X0UJCUlJT19JQ1JCMF9FCQkJKgorICoJCUlJT19JQ1JCNl9BCQlJSU9fSUNSQjBfQQkJCSoKKyAqCQlJSU9fSUNSQjZfQgkJSUlPX0lDUkIwX0IJCQkqCisgKgkJSUlPX0lDUkI2X0MJCUlJT19JQ1JCMF9DCQkJKgorICoJCUlJT19JQ1JCNl9ECQlJSU9fSUNSQjBfRAkJCSoKKyAqCQlJSU9fSUNSQjZfRQkJSUlPX0lDUkIwX0UJCQkqCisgKgkJSUlPX0lDUkI3X0EJCUlJT19JQ1JCMF9BCQkJKgorICoJCUlJT19JQ1JCN19CCQlJSU9fSUNSQjBfQgkJCSoKKyAqCQlJSU9fSUNSQjdfQwkJSUlPX0lDUkIwX0MJCQkqCisgKgkJSUlPX0lDUkI3X0QJCUlJT19JQ1JCMF9ECQkJKgorICoJCUlJT19JQ1JCN19FCQlJSU9fSUNSQjBfRQkJCSoKKyAqCQlJSU9fSUNSQjhfQQkJSUlPX0lDUkIwX0EJCQkqCisgKgkJSUlPX0lDUkI4X0IJCUlJT19JQ1JCMF9CCQkJKgorICoJCUlJT19JQ1JCOF9DCQlJSU9fSUNSQjBfQwkJCSoKKyAqCQlJSU9fSUNSQjhfRAkJSUlPX0lDUkIwX0QJCQkqCisgKgkJSUlPX0lDUkI4X0UJCUlJT19JQ1JCMF9FCQkJKgorICoJCUlJT19JQ1JCOV9BCQlJSU9fSUNSQjBfQQkJCSoKKyAqCQlJSU9fSUNSQjlfQgkJSUlPX0lDUkIwX0IJCQkqCisgKgkJSUlPX0lDUkI5X0MJCUlJT19JQ1JCMF9DCQkJKgorICoJCUlJT19JQ1JCOV9ECQlJSU9fSUNSQjBfRAkJCSoKKyAqCQlJSU9fSUNSQjlfRQkJSUlPX0lDUkIwX0UJCQkqCisgKgkJSUlPX0lDUkJBX0EJCUlJT19JQ1JCMF9BCQkJKgorICoJCUlJT19JQ1JCQV9CCQlJSU9fSUNSQjBfQgkJCSoKKyAqCQlJSU9fSUNSQkFfQwkJSUlPX0lDUkIwX0MJCQkqCisgKgkJSUlPX0lDUkJBX0QJCUlJT19JQ1JCMF9ECQkJKgorICoJCUlJT19JQ1JCQV9FCQlJSU9fSUNSQjBfRQkJCSoKKyAqCQlJSU9fSUNSQkJfQQkJSUlPX0lDUkIwX0EJCQkqCisgKgkJSUlPX0lDUkJCX0IJCUlJT19JQ1JCMF9CCQkJKgorICoJCUlJT19JQ1JCQl9DCQlJSU9fSUNSQjBfQwkJCSoKKyAqCQlJSU9fSUNSQkJfRAkJSUlPX0lDUkIwX0QJCQkqCisgKgkJSUlPX0lDUkJCX0UJCUlJT19JQ1JCMF9FCQkJKgorICoJCUlJT19JQ1JCQ19BCQlJSU9fSUNSQjBfQQkJCSoKKyAqCQlJSU9fSUNSQkNfQgkJSUlPX0lDUkIwX0IJCQkqCisgKgkJSUlPX0lDUkJDX0MJCUlJT19JQ1JCMF9DCQkJKgorICoJCUlJT19JQ1JCQ19ECQlJSU9fSUNSQjBfRAkJCSoKKyAqCQlJSU9fSUNSQkNfRQkJSUlPX0lDUkIwX0UJCQkqCisgKgkJSUlPX0lDUkJEX0EJCUlJT19JQ1JCMF9BCQkJKgorICoJCUlJT19JQ1JCRF9CCQlJSU9fSUNSQjBfQgkJCSoKKyAqCQlJSU9fSUNSQkRfQwkJSUlPX0lDUkIwX0MJCQkqCisgKgkJSUlPX0lDUkJEX0QJCUlJT19JQ1JCMF9ECQkJKgorICoJCUlJT19JQ1JCRF9FCQlJSU9fSUNSQjBfRQkJCSoKKyAqCQlJSU9fSUNSQkVfQQkJSUlPX0lDUkIwX0EJCQkqCisgKgkJSUlPX0lDUkJFX0IJCUlJT19JQ1JCMF9CCQkJKgorICoJCUlJT19JQ1JCRV9DCQlJSU9fSUNSQjBfQwkJCSoKKyAqCQlJSU9fSUNSQkVfRAkJSUlPX0lDUkIwX0QJCQkqCisgKgkJSUlPX0lDUkJFX0UJCUlJT19JQ1JCMF9FCQkJKgorICoJCQkJCQkJCQkqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgogICogU2xpZ2h0bHkgZnJpZW5kbGllciBuYW1lcyBmb3Igc29tZSBjb21tb24gcmVnaXN0ZXJzLgogICovCi0jZGVmaW5lIElJT19XSURHRVQgICAgICAgICAgICAgIElJT19XSUQgICAgICAvKiBXaWRnZXQgaWRlbnRpZmljYXRpb24gKi8KLSNkZWZpbmUgSUlPX1dJREdFVF9TVEFUICAgICAgICAgSUlPX1dTVEFUICAgIC8qIFdpZGdldCBzdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgSUlPX1dJREdFVF9DVFJMICAgICAgICAgSUlPX1dDUiAgICAgIC8qIFdpZGdldCBjb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lIElJT19QUk9URUNUICAgICAgICAgICAgIElJT19JTEFQUiAgICAvKiBJTyBpbnRlcmZhY2UgcHJvdGVjdGlvbiAqLwotI2RlZmluZSBJSU9fUFJPVEVDVF9PVlJSRCAgICAgICBJSU9fSUxBUE8gICAgLyogSU8gcHJvdGVjdCBvdmVycmlkZSAqLwotI2RlZmluZSBJSU9fT1VUV0lER0VUX0FDQ0VTUyAgICBJSU9fSU9XQSAgICAgLyogT3V0Ym91bmQgd2lkZ2V0IGFjY2VzcyAqLwotI2RlZmluZSBJSU9fSU5XSURHRVRfQUNDRVNTICAgICBJSU9fSUlXQSAgICAgLyogSW5ib3VuZCB3aWRnZXQgYWNjZXNzICovCi0jZGVmaW5lIElJT19JTkRFVl9FUlJfTUFTSyAgICAgIElJT19JSURFTSAgICAvKiBJbmJvdW5kIGRldmljZSBlcnJvciBtYXNrICovCi0jZGVmaW5lIElJT19MTFBfQ1NSICAgICAgICAgICAgIElJT19JTENTUiAgICAvKiBMTFAgY29udHJvbCBhbmQgc3RhdHVzICovCi0jZGVmaW5lIElJT19MTFBfTE9HICAgICAgICAgICAgIElJT19JTExSICAgICAvKiBMTFAgbG9nICovCi0jZGVmaW5lIElJT19YVEFMS0NDX1RPVVQgICAgICAgIElJT19JWENDICAgICAvKiBYdGFsayBjcmVkaXQgY291bnQgdGltZW91dCovCi0jZGVmaW5lIElJT19YVEFMS1RUX1RPVVQgICAgICAgIElJT19JWFRUICAgICAvKiBYdGFsayB0YWlsIHRpbWVvdXQgKi8KLSNkZWZpbmUgSUlPX0lPX0VSUl9DTFIgICAgICAgICAgSUlPX0lFQ0xSICAgIC8qIElPIGVycm9yIGNsZWFyICovCisjZGVmaW5lIElJT19XSURHRVQgICAgICAgICAgICAgIElJT19XSUQJCS8qIFdpZGdldCBpZGVudGlmaWNhdGlvbiAqLworI2RlZmluZSBJSU9fV0lER0VUX1NUQVQgICAgICAgICBJSU9fV1NUQVQJLyogV2lkZ2V0IHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJSU9fV0lER0VUX0NUUkwgICAgICAgICBJSU9fV0NSCQkvKiBXaWRnZXQgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBJSU9fUFJPVEVDVCAgICAgICAgICAgICBJSU9fSUxBUFIJLyogSU8gaW50ZXJmYWNlIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgSUlPX1BST1RFQ1RfT1ZSUkQgICAgICAgSUlPX0lMQVBPCS8qIElPIHByb3RlY3Qgb3ZlcnJpZGUgKi8KKyNkZWZpbmUgSUlPX09VVFdJREdFVF9BQ0NFU1MgICAgSUlPX0lPV0EJLyogT3V0Ym91bmQgd2lkZ2V0IGFjY2VzcyAqLworI2RlZmluZSBJSU9fSU5XSURHRVRfQUNDRVNTICAgICBJSU9fSUlXQQkvKiBJbmJvdW5kIHdpZGdldCBhY2Nlc3MgKi8KKyNkZWZpbmUgSUlPX0lOREVWX0VSUl9NQVNLICAgICAgSUlPX0lJREVNCS8qIEluYm91bmQgZGV2aWNlIGVycm9yIG1hc2sgKi8KKyNkZWZpbmUgSUlPX0xMUF9DU1IgICAgICAgICAgICAgSUlPX0lMQ1NSCS8qIExMUCBjb250cm9sIGFuZCBzdGF0dXMgKi8KKyNkZWZpbmUgSUlPX0xMUF9MT0cgICAgICAgICAgICAgSUlPX0lMTFIJLyogTExQIGxvZyAqLworI2RlZmluZSBJSU9fWFRBTEtDQ19UT1VUICAgICAgICBJSU9fSVhDQwkvKiBYdGFsayBjcmVkaXQgY291bnQgdGltZW91dCAqLworI2RlZmluZSBJSU9fWFRBTEtUVF9UT1VUICAgICAgICBJSU9fSVhUVAkvKiBYdGFsayB0YWlsIHRpbWVvdXQgKi8KKyNkZWZpbmUgSUlPX0lPX0VSUl9DTFIgICAgICAgICAgSUlPX0lFQ0xSCS8qIElPIGVycm9yIGNsZWFyICovCiAjZGVmaW5lIElJT19JR0ZYXzAgCQlJSU9fSUdGWDAKICNkZWZpbmUgSUlPX0lHRlhfMSAJCUlJT19JR0ZYMQogI2RlZmluZSBJSU9fSUJDVF8wCQlJSU9fSUJDVDAKQEAgLTI5NTcsMTIgKzI4NTAsMTIgQEAKICNkZWZpbmUgSUlPX1BSVEVfQShfeCkJCShJSU9fSVBSVEUwX0EgKyAoOCAqIChfeCkpKQogI2RlZmluZSBJSU9fUFJURV9CKF94KQkJKElJT19JUFJURTBfQiArICg4ICogKF94KSkpCiAjZGVmaW5lIElJT19OVU1fUFJURVMJCTgJLyogVG90YWwgbnVtYmVyIG9mIFBSQiB0YWJsZSBlbnRyaWVzICovCi0jZGVmaW5lIElJT19XSURQUlRFX0EoeCkJSUlPX1BSVEVfQSgoKHgpIC0gOCkpIC8qIHdpZGdldCBJRCB0byBpdHMgUFJURSBudW0gKi8KLSNkZWZpbmUgSUlPX1dJRFBSVEVfQih4KQlJSU9fUFJURV9CKCgoeCkgLSA4KSkgLyogd2lkZ2V0IElEIHRvIGl0cyBQUlRFIG51bSAqLworI2RlZmluZSBJSU9fV0lEUFJURV9BKHgpCUlJT19QUlRFX0EoKCh4KSAtIDgpKQkvKiB3aWRnZXQgSUQgdG8gaXRzIFBSVEUgbnVtICovCisjZGVmaW5lIElJT19XSURQUlRFX0IoeCkJSUlPX1BSVEVfQigoKHgpIC0gOCkpCS8qIHdpZGdldCBJRCB0byBpdHMgUFJURSBudW0gKi8KIAotI2RlZmluZSBJSU9fTlVNX0lQUkJTIAkJKDkpIAorI2RlZmluZSBJSU9fTlVNX0lQUkJTIAkJOQogCi0jZGVmaW5lIElJT19MTFBfQ1NSX0lTX1VQICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBJSU9fTExQX0NTUl9JU19VUAkJMHgwMDAwMjAwMAogI2RlZmluZSBJSU9fTExQX0NTUl9MTFBfU1RBVF9NQVNLICAgICAgIDB4MDAwMDMwMDAKICNkZWZpbmUgSUlPX0xMUF9DU1JfTExQX1NUQVRfU0hGVCAgICAgICAxMgogCkBAIC0yOTcwLDMwICsyODYzLDI5IEBACiAjZGVmaW5lIElJT19MTFBfU05fTUFYICAweGZmZmYJLyogaW4gSUxMUiBTTl9DTlQsIE1heCBTZXF1ZW5jZSBOdW1iZXIgZXJyb3JzICovCiAKIC8qIGtleSB0byBJSU9fUFJPVEVDVF9PVlJSRCAqLwotI2RlZmluZSBJSU9fUFJPVEVDVF9PVlJSRF9LRVkgICAweDUzNDc0OTcyNzU2YzY1NzN1bGwgICAvKiAiU0dJcnVsZXMiICovCisjZGVmaW5lIElJT19QUk9URUNUX09WUlJEX0tFWSAgIDB4NTM0NzQ5NzI3NTZjNjU3M3VsbAkvKiAiU0dJcnVsZXMiICovCiAKIC8qIEJURSByZWdpc3RlciBuYW1lcyAqLwotI2RlZmluZSBJSU9fQlRFX1NUQVRfMCAgICAgICAgICBJSU9fSUJMU18wICAgLyogQWxzbyBCVEUgbGVuZ3RoL3N0YXR1cyAwICovCi0jZGVmaW5lIElJT19CVEVfU1JDXzAgICAgICAgICAgIElJT19JQlNBXzAgICAvKiBBbHNvIEJURSBzb3VyY2UgYWRkcmVzcyAgMCAqLwotI2RlZmluZSBJSU9fQlRFX0RFU1RfMCAgICAgICAgICBJSU9fSUJEQV8wICAgLyogQWxzbyBCVEUgZGVzdC4gYWRkcmVzcyAwICovCi0jZGVmaW5lIElJT19CVEVfQ1RSTF8wICAgICAgICAgIElJT19JQkNUXzAgICAvKiBBbHNvIEJURSBjb250cm9sL3Rlcm1pbmF0ZSAwICovCi0jZGVmaW5lIElJT19CVEVfTk9USUZZXzAgICAgICAgIElJT19JQk5BXzAgICAvKiBBbHNvIEJURSBub3RpZmljYXRpb24gMCAqLwotI2RlZmluZSBJSU9fQlRFX0lOVF8wICAgICAgICAgICBJSU9fSUJJQV8wICAgLyogQWxzbyBCVEUgaW50ZXJydXB0IDAgKi8KLSNkZWZpbmUgSUlPX0JURV9PRkZfMCAgICAgICAgICAgMCAgICAgICAgICAgIC8qIEJhc2Ugb2Zmc2V0IGZyb20gQlRFIDAgcmVncy4gKi8KLSNkZWZpbmUgSUlPX0JURV9PRkZfMSAgIAkoSUlPX0lCTFNfMSAtIElJT19JQkxTXzApIC8qIE9mZnNldCBmcm9tIGJhc2UgdG8gQlRFIDEgKi8KKyNkZWZpbmUgSUlPX0JURV9TVEFUXzAgICAgICAgICAgSUlPX0lCTFNfMAkvKiBBbHNvIEJURSBsZW5ndGgvc3RhdHVzIDAgKi8KKyNkZWZpbmUgSUlPX0JURV9TUkNfMCAgICAgICAgICAgSUlPX0lCU0FfMAkvKiBBbHNvIEJURSBzb3VyY2UgYWRkcmVzcyAgMCAqLworI2RlZmluZSBJSU9fQlRFX0RFU1RfMCAgICAgICAgICBJSU9fSUJEQV8wCS8qIEFsc28gQlRFIGRlc3QuIGFkZHJlc3MgMCAqLworI2RlZmluZSBJSU9fQlRFX0NUUkxfMCAgICAgICAgICBJSU9fSUJDVF8wCS8qIEFsc28gQlRFIGNvbnRyb2wvdGVybWluYXRlIDAgKi8KKyNkZWZpbmUgSUlPX0JURV9OT1RJRllfMCAgICAgICAgSUlPX0lCTkFfMAkvKiBBbHNvIEJURSBub3RpZmljYXRpb24gMCAqLworI2RlZmluZSBJSU9fQlRFX0lOVF8wICAgICAgICAgICBJSU9fSUJJQV8wCS8qIEFsc28gQlRFIGludGVycnVwdCAwICovCisjZGVmaW5lIElJT19CVEVfT0ZGXzAgICAgICAgICAgIDAJLyogQmFzZSBvZmZzZXQgZnJvbSBCVEUgMCByZWdzLiAqLworI2RlZmluZSBJSU9fQlRFX09GRl8xICAgCShJSU9fSUJMU18xIC0gSUlPX0lCTFNfMCkJLyogT2Zmc2V0IGZyb20gYmFzZSB0byBCVEUgMSAqLwogCiAvKiBCVEUgcmVnaXN0ZXIgb2Zmc2V0cyBmcm9tIGJhc2UgKi8KICNkZWZpbmUgQlRFT0ZGX1NUQVQgICAgICAgICAgICAgMAotI2RlZmluZSBCVEVPRkZfU1JDICAgICAgICAgICAgICAoSUlPX0JURV9TUkNfMCAtIElJT19CVEVfU1RBVF8wKQotI2RlZmluZSBCVEVPRkZfREVTVCAgICAgICAgICAgICAoSUlPX0JURV9ERVNUXzAgLSBJSU9fQlRFX1NUQVRfMCkKLSNkZWZpbmUgQlRFT0ZGX0NUUkwgICAgICAgICAgICAgKElJT19CVEVfQ1RSTF8wIC0gSUlPX0JURV9TVEFUXzApCi0jZGVmaW5lIEJURU9GRl9OT1RJRlkgICAgICAgICAgIChJSU9fQlRFX05PVElGWV8wIC0gSUlPX0JURV9TVEFUXzApCi0jZGVmaW5lIEJURU9GRl9JTlQgICAgICAgICAgICAgIChJSU9fQlRFX0lOVF8wIC0gSUlPX0JURV9TVEFUXzApCi0KKyNkZWZpbmUgQlRFT0ZGX1NSQyAgICAgIAkoSUlPX0JURV9TUkNfMCAtIElJT19CVEVfU1RBVF8wKQorI2RlZmluZSBCVEVPRkZfREVTVCAgICAgCShJSU9fQlRFX0RFU1RfMCAtIElJT19CVEVfU1RBVF8wKQorI2RlZmluZSBCVEVPRkZfQ1RSTCAgICAgCShJSU9fQlRFX0NUUkxfMCAtIElJT19CVEVfU1RBVF8wKQorI2RlZmluZSBCVEVPRkZfTk9USUZZICAgCShJSU9fQlRFX05PVElGWV8wIC0gSUlPX0JURV9TVEFUXzApCisjZGVmaW5lIEJURU9GRl9JTlQgICAgICAJKElJT19CVEVfSU5UXzAgLSBJSU9fQlRFX1NUQVRfMCkKIAogLyogbmFtZXMgdXNlZCBpbiBzaHViIGRpYWdzICovCi0jZGVmaW5lIElJT19CQVNFX0JURTAgICBJSU9fSUJMU18wCQkKLSNkZWZpbmUgSUlPX0JBU0VfQlRFMSAgIElJT19JQkxTXzEJCQorI2RlZmluZSBJSU9fQkFTRV9CVEUwICAgSUlPX0lCTFNfMAorI2RlZmluZSBJSU9fQkFTRV9CVEUxICAgSUlPX0lCTFNfMQogCiAvKgogICogTWFjcm8gd2hpY2ggdGFrZXMgdGhlIHdpZGdldCBudW1iZXIsIGFuZCByZXR1cm5zIHRoZQpAQCAtMzAwMSwxMCArMjg5Myw5IEBACiAgKiB2YWx1ZSBfeCBpcyBleHBlY3RlZCB0byBiZSBhIHdpZGdldCBudW1iZXIgaW4gdGhlIHJhbmdlCiAgKiAwLCA4IC0gMHhGCiAgKi8KLSNkZWZpbmUgSUlPX0lPUFJCKF94KSAgIChJSU9fSU9QUkJfMCArICggKCAoX3gpIDwgSFVCX1dJREdFVF9JRF9NSU4gPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoX3gpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgKF94KSAtIChIVUJfV0lER0VUX0lEX01JTi0xKSkgPDwgMykgKQotCisjZGVmaW5lIElJT19JT1BSQihfeCkJKElJT19JT1BSQl8wICsgKCAoIChfeCkgPCBIVUJfV0lER0VUX0lEX01JTiA/IFwKKyAgICAgICAgICAgICAgICAJKF94KSA6IFwKKyAgICAgICAgICAgICAgICAJKF94KSAtIChIVUJfV0lER0VUX0lEX01JTi0xKSkgPDwgMykgKQogCiAvKiBHRlggRmxvdyBDb250cm9sIE5vZGUvV2lkZ2V0IFJlZ2lzdGVyICovCiAjZGVmaW5lIElJT19JR0ZYX1dfTlVNX0JJVFMJNAkvKiBzaXplIG9mIHdpZGdldCBudW0gZmllbGQgKi8KQEAgLTMwMjUsNyArMjkxNiw2IEBACiAJKCgobm9kZSkgICAmIElJT19JR0ZYX05fTlVNX01BU0spIDw8IElJT19JR0ZYX05fTlVNX1NISUZUKSB8CSBcCiAJKCgoY3B1KSAgICAmIElJT19JR0ZYX1BfTlVNX01BU0spIDw8IElJT19JR0ZYX1BfTlVNX1NISUZUKSkKIAotCiAvKiBTY3JhdGNoIHJlZ2lzdGVycyAoYWxsIGJpdHMgYXZhaWxhYmxlKSAqLwogI2RlZmluZSBJSU9fU0NSQVRDSF9SRUcwICAgICAgICBJSU9fSVNDUjAKICNkZWZpbmUgSUlPX1NDUkFUQ0hfUkVHMSAgICAgICAgSUlPX0lTQ1IxCkBAIC0zMDQ2LDIxICsyOTM2LDIxIEBACiAjZGVmaW5lIElJT19TQ1JBVENIX0JJVDFfMCAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMVVMCiAjZGVmaW5lIElJT19TQ1JBVENIX0JJVDFfMSAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMlVMCiAvKiBJTyBUcmFuc2xhdGlvbiBUYWJsZSBFbnRyaWVzICovCi0jZGVmaW5lIElJT19OVU1fSVRURVMgICA3ICAgICAgICAgICAgICAgLyogSVRURXMgbnVtYmVyZWQgMC4uNiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEh3IG1hbnVhbHMgbnVtYmVyIHRoZW0gMS4uNyEgKi8KKyNkZWZpbmUgSUlPX05VTV9JVFRFUyAgIDcJLyogSVRURXMgbnVtYmVyZWQgMC4uNiAqLworCQkJCQkvKiBIdyBtYW51YWxzIG51bWJlciB0aGVtIDEuLjchICovCiAvKgogICogSUlPX0lNRU0gUmVnaXN0ZXIgZmllbGRzLgogICovCi0jZGVmaW5lIElJT19JTUVNX1cwRVNEICAweDFVTCAgICAgICAgICAgICAvKiBXaWRnZXQgMCBzaHV0IGRvd24gZHVlIHRvIGVycm9yICovCi0jZGVmaW5lIElJT19JTUVNX0IwRVNEICAoMVVMIDw8IDQpICAgICAgICAvKiBCVEUgMCBzaHV0IGRvd24gZHVlIHRvIGVycm9yICovCi0jZGVmaW5lIElJT19JTUVNX0IxRVNEICAoMVVMIDw8IDgpICAgICAgICAvKiBCVEUgMSBTaHV0IGRvd24gZHVlIHRvIGVycm9yICovCisjZGVmaW5lIElJT19JTUVNX1cwRVNEICAweDFVTAkvKiBXaWRnZXQgMCBzaHV0IGRvd24gZHVlIHRvIGVycm9yICovCisjZGVmaW5lIElJT19JTUVNX0IwRVNECSgxVUwgPDwgNCkJLyogQlRFIDAgc2h1dCBkb3duIGR1ZSB0byBlcnJvciAqLworI2RlZmluZSBJSU9fSU1FTV9CMUVTRAkoMVVMIDw8IDgpCS8qIEJURSAxIFNodXQgZG93biBkdWUgdG8gZXJyb3IgKi8KIAogLyoKICAqIEFzIGEgcGVybWFuZW50IHdvcmthcm91bmQgZm9yIGEgYnVnIGluIHRoZSBQSSBzaWRlIG9mIHRoZSBzaHViLCB3ZSd2ZQogICogcmVkZWZpbmVkIGJpZyB3aW5kb3cgNyBhcyBzbWFsbCB3aW5kb3cgMC4KICBYWFggZG9lcyB0aGlzIHN0aWxsIGFwcGx5IGZvciBTTjE/PwogICovCi0jZGVmaW5lIEhVQl9OVU1fQklHX1dJTkRPVyAgICAgIChJSU9fTlVNX0lUVEVTIC0gMSkKKyNkZWZpbmUgSFVCX05VTV9CSUdfV0lORE9XCShJSU9fTlVNX0lUVEVTIC0gMSkKIAogLyoKICAqIFVzZSB0aGUgdG9wIGJpZyB3aW5kb3cgYXMgYSBzdXJyb2dhdGUgZm9yIHRoZSBmaXJzdCBzbWFsbCB3aW5kb3cKQEAgLTMwNzEsMTEgKzI5NjEsMTEgQEAKIAogLyoKICAqIENSQiBtYW5pcHVsYXRpb24gbWFjcm9zCi0gKiAgICAgIFRoZSBDUkIgbWFjcm9zIGFyZSBzbGlnaHRseSBjb21wbGljYXRlZCwgc2luY2UgdGhlcmUgYXJlIHVwIHRvCi0gKiAgICAgIGZvdXIgcmVnaXN0ZXJzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIENSQiBlbnRyeS4KKyAqCVRoZSBDUkIgbWFjcm9zIGFyZSBzbGlnaHRseSBjb21wbGljYXRlZCwgc2luY2UgdGhlcmUgYXJlIHVwIHRvCisgKglmb3VyIHJlZ2lzdGVycyBhc3NvY2lhdGVkIHdpdGggZWFjaCBDUkIgZW50cnkuCiAgKi8KLSNkZWZpbmUgSUlPX05VTV9DUkJTICAgICAgICAgICAgMTUgICAgICAvKiBOdW1iZXIgb2YgQ1JCcyAqLwotI2RlZmluZSBJSU9fTlVNX1BDX0NSQlMgICAgICAgICA0ICAgICAgIC8qIE51bWJlciBvZiBwYXJ0aWFsIGNhY2hlIENSQnMgKi8KKyNkZWZpbmUgSUlPX05VTV9DUkJTICAgICAgICAgICAgMTUJLyogTnVtYmVyIG9mIENSQnMgKi8KKyNkZWZpbmUgSUlPX05VTV9QQ19DUkJTICAgICAgICAgNAkvKiBOdW1iZXIgb2YgcGFydGlhbCBjYWNoZSBDUkJzICovCiAjZGVmaW5lIElJT19JQ1JCX09GRlNFVCAgICAgICAgIDgKICNkZWZpbmUgSUlPX0lDUkJfMCAgICAgICAgICAgICAgSUlPX0lDUkIwX0EKICNkZWZpbmUgSUlPX0lDUkJfQUREUl9TSEZUCTIJLyogU2hpZnQgdG8gZ2V0IHByb3BlciBhZGRyZXNzICovCkBAIC0zMDgzLDQzICsyOTczLDQzIEBACiAgICAgICAgICNkZWZpbmUgSUlPX0ZJUlNUX1BDX0VOVFJZIDEyCiAgKi8KIAotI2RlZmluZSBJSU9fSUNSQl9BKF94KSAgKCh1NjQpKElJT19JQ1JCXzAgKyAoNiAqIElJT19JQ1JCX09GRlNFVCAqIChfeCkpKSkKLSNkZWZpbmUgSUlPX0lDUkJfQihfeCkgICgodTY0KSgoY2hhciAqKUlJT19JQ1JCX0EoX3gpICsgMSpJSU9fSUNSQl9PRkZTRVQpKQotI2RlZmluZSBJSU9fSUNSQl9DKF94KSAgKCh1NjQpKChjaGFyICopSUlPX0lDUkJfQShfeCkgKyAyKklJT19JQ1JCX09GRlNFVCkpCi0jZGVmaW5lIElJT19JQ1JCX0QoX3gpICAoKHU2NCkoKGNoYXIgKilJSU9fSUNSQl9BKF94KSArIDMqSUlPX0lDUkJfT0ZGU0VUKSkKLSNkZWZpbmUgSUlPX0lDUkJfRShfeCkgICgodTY0KSgoY2hhciAqKUlJT19JQ1JCX0EoX3gpICsgNCpJSU9fSUNSQl9PRkZTRVQpKQorI2RlZmluZSBJSU9fSUNSQl9BKF94KQkoKHU2NCkoSUlPX0lDUkJfMCArICg2ICogSUlPX0lDUkJfT0ZGU0VUICogKF94KSkpKQorI2RlZmluZSBJSU9fSUNSQl9CKF94KQkoKHU2NCkoKGNoYXIgKilJSU9fSUNSQl9BKF94KSArIDEqSUlPX0lDUkJfT0ZGU0VUKSkKKyNkZWZpbmUgSUlPX0lDUkJfQyhfeCkJKCh1NjQpKChjaGFyICopSUlPX0lDUkJfQShfeCkgKyAyKklJT19JQ1JCX09GRlNFVCkpCisjZGVmaW5lIElJT19JQ1JCX0QoX3gpCSgodTY0KSgoY2hhciAqKUlJT19JQ1JCX0EoX3gpICsgMypJSU9fSUNSQl9PRkZTRVQpKQorI2RlZmluZSBJSU9fSUNSQl9FKF94KQkoKHU2NCkoKGNoYXIgKilJSU9fSUNSQl9BKF94KSArIDQqSUlPX0lDUkJfT0ZGU0VUKSkKIAogI2RlZmluZSBUTlVNX1RPX1dJREdFVF9ERVYoX3RudW0pCShfdG51bSAmIDB4NykKIAogLyoKICAqIHZhbHVlcyBmb3IgImVjb2RlIiBmaWVsZAogICovCi0jZGVmaW5lIElJT19JQ1JCX0VDT0RFX0RFUlIgICAgIDAgICAgICAgLyogRGlyZWN0b3J5IGVycm9yIGR1ZSB0byBJSU8gYWNjZXNzICovCi0jZGVmaW5lIElJT19JQ1JCX0VDT0RFX1BFUlIgICAgIDEgICAgICAgLyogUG9pc29uIGVycm9yIG9uIElPIGFjY2VzcyAqLwotI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9XRVJSICAgICAyICAgICAgIC8qIFdyaXRlIGVycm9yIGJ5IElJTyBhY2Nlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBlLmcuIFdJTlYgdG8gYSBSZWFkIG9ubHkgbGluZS4gKi8KLSNkZWZpbmUgSUlPX0lDUkJfRUNPREVfQUVSUiAgICAgMyAgICAgICAvKiBBY2Nlc3MgZXJyb3IgY2F1c2VkIGJ5IElJTyBhY2Nlc3MgKi8KLSNkZWZpbmUgSUlPX0lDUkJfRUNPREVfUFdFUlIgICAgNCAgICAgICAvKiBFcnJvciBvbiBwYXJ0aWFsIHdyaXRlICAgICAgICovCi0jZGVmaW5lIElJT19JQ1JCX0VDT0RFX1BSRVJSICAgIDUgICAgICAgLyogRXJyb3Igb24gcGFydGlhbCByZWFkICAgICAgICAqLwotI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9UT1VUICAgICA2ICAgICAgIC8qIENSQiB0aW1lb3V0IGJlZm9yZSBkZWFsbG9jYXRpbmcgKi8KLSNkZWZpbmUgSUlPX0lDUkJfRUNPREVfWFRFUlIgICAgNyAgICAgICAvKiBJbmNvbWluZyB4dGFsayBwa3QgaGFkIGVycm9yIGJpdCAqLworI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9ERVJSICAgICAwCS8qIERpcmVjdG9yeSBlcnJvciBkdWUgdG8gSUlPIGFjY2VzcyAqLworI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9QRVJSICAgICAxCS8qIFBvaXNvbiBlcnJvciBvbiBJTyBhY2Nlc3MgKi8KKyNkZWZpbmUgSUlPX0lDUkJfRUNPREVfV0VSUiAgICAgMgkvKiBXcml0ZSBlcnJvciBieSBJSU8gYWNjZXNzCisJCQkJCSAqIGUuZy4gV0lOViB0byBhIFJlYWQgb25seSBsaW5lLiAqLworI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9BRVJSICAgICAzCS8qIEFjY2VzcyBlcnJvciBjYXVzZWQgYnkgSUlPIGFjY2VzcyAqLworI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9QV0VSUiAgICA0CS8qIEVycm9yIG9uIHBhcnRpYWwgd3JpdGUgKi8KKyNkZWZpbmUgSUlPX0lDUkJfRUNPREVfUFJFUlIgICAgNQkvKiBFcnJvciBvbiBwYXJ0aWFsIHJlYWQgICovCisjZGVmaW5lIElJT19JQ1JCX0VDT0RFX1RPVVQgICAgIDYJLyogQ1JCIHRpbWVvdXQgYmVmb3JlIGRlYWxsb2NhdGluZyAqLworI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9YVEVSUiAgICA3CS8qIEluY29taW5nIHh0YWxrIHBrdCBoYWQgZXJyb3IgYml0ICovCiAKIC8qCiAgKiBWYWx1ZXMgZm9yIGZpZWxkIGltc2d0eXBlCiAgKi8KLSNkZWZpbmUgSUlPX0lDUkJfSU1TR1RfWFRBTEsgICAgMCAgICAgICAvKiBJbmNvbWluZyBNZWVzc2FnZSBmcm9tIFh0YWxrICovCi0jZGVmaW5lIElJT19JQ1JCX0lNU0dUX0JURSAgICAgIDEgICAgICAgLyogSW5jb21pbmcgbWVzc2FnZSBmcm9tIEJURSAgICAqLwotI2RlZmluZSBJSU9fSUNSQl9JTVNHVF9TTjFORVQgICAyICAgICAgIC8qIEluY29taW5nIG1lc3NhZ2UgZnJvbSBTTjEgbmV0ICovCi0jZGVmaW5lIElJT19JQ1JCX0lNU0dUX0NSQiAgICAgIDMgICAgICAgLyogSW5jb21pbmcgbWVzc2FnZSBmcm9tIENSQiA/Pz8gICovCisjZGVmaW5lIElJT19JQ1JCX0lNU0dUX1hUQUxLICAgIDAJLyogSW5jb21pbmcgTWVlc3NhZ2UgZnJvbSBYdGFsayAqLworI2RlZmluZSBJSU9fSUNSQl9JTVNHVF9CVEUgICAgICAxCS8qIEluY29taW5nIG1lc3NhZ2UgZnJvbSBCVEUgICAgKi8KKyNkZWZpbmUgSUlPX0lDUkJfSU1TR1RfU04xTkVUICAgMgkvKiBJbmNvbWluZyBtZXNzYWdlIGZyb20gU04xIG5ldCAqLworI2RlZmluZSBJSU9fSUNSQl9JTVNHVF9DUkIgICAgICAzCS8qIEluY29taW5nIG1lc3NhZ2UgZnJvbSBDUkIgPz8/ICAqLwogCiAvKgogICogdmFsdWVzIGZvciBmaWVsZCBpbml0aWF0b3IuCiAgKi8KLSNkZWZpbmUgSUlPX0lDUkJfSU5JVF9YVEFMSyAgICAgMCAgICAgICAvKiBNZXNzYWdlIG9yaWdpbmF0ZWQgaW4geHRhbGsgICovCi0jZGVmaW5lIElJT19JQ1JCX0lOSVRfQlRFMCAgICAgIDB4MSAgICAgLyogTWVzc2FnZSBvcmlnaW5hdGVkIGluIEJURSAwICAqLwotI2RlZmluZSBJSU9fSUNSQl9JTklUX1NOMU5FVCAgICAweDIgICAgIC8qIE1lc3NhZ2Ugb3JpZ2luYXRlZCBpbiBTTjFuZXQgKi8KLSNkZWZpbmUgSUlPX0lDUkJfSU5JVF9DUkIgICAgICAgMHgzICAgICAvKiBNZXNzYWdlIG9yaWdpbmF0ZWQgaW4gQ1JCID8gICovCi0jZGVmaW5lIElJT19JQ1JCX0lOSVRfQlRFMSAgICAgIDB4NSAgICAgLyogTUVzc2FnZSBvcmlnaW5hdGVkIGluIEJURSAxICAqLworI2RlZmluZSBJSU9fSUNSQl9JTklUX1hUQUxLICAgICAwCS8qIE1lc3NhZ2Ugb3JpZ2luYXRlZCBpbiB4dGFsayAgKi8KKyNkZWZpbmUgSUlPX0lDUkJfSU5JVF9CVEUwICAgICAgMHgxCS8qIE1lc3NhZ2Ugb3JpZ2luYXRlZCBpbiBCVEUgMCAgKi8KKyNkZWZpbmUgSUlPX0lDUkJfSU5JVF9TTjFORVQgICAgMHgyCS8qIE1lc3NhZ2Ugb3JpZ2luYXRlZCBpbiBTTjFuZXQgKi8KKyNkZWZpbmUgSUlPX0lDUkJfSU5JVF9DUkIgICAgICAgMHgzCS8qIE1lc3NhZ2Ugb3JpZ2luYXRlZCBpbiBDUkIgPyAgKi8KKyNkZWZpbmUgSUlPX0lDUkJfSU5JVF9CVEUxICAgICAgMHg1CS8qIE1Fc3NhZ2Ugb3JpZ2luYXRlZCBpbiBCVEUgMSAgKi8KIAogLyoKICAqIE51bWJlciBvZiBjcmVkaXRzIEh1YiB3aWRnZXQgaGFzIHdoaWxlIHNlbmRpbmcgcmVxL3Jlc3BvbnNlIHRvCkBAIC0zMTI3LDggKzMwMTcsOCBAQAogICogVmFsdWUgb2YgMyBpcyByZXF1aXJlZCBieSBYYm93IDEuMQogICogV2UgbWF5IGJlIGFibGUgdG8gaW5jcmVhc2UgdGhpcyB0byA0IHdpdGggWGJvdyAxLjIuCiAgKi8KLSNkZWZpbmUgICAgICAgSFVCSUlfWEJPV19DUkVESVQgICAgICAgMwotI2RlZmluZSAgICAgICBIVUJJSV9YQk9XX1JFVjJfQ1JFRElUICA0CisjZGVmaW5lCQkgICBIVUJJSV9YQk9XX0NSRURJVCAgICAgICAzCisjZGVmaW5lCQkgICBIVUJJSV9YQk9XX1JFVjJfQ1JFRElUICA0CiAKIC8qCiAgKiBOdW1iZXIgb2YgY3JlZGl0cyB0aGF0IHh0YWxrIGRldmljZXMgc2hvdWxkIHVzZSB3aGVuIGNvbW11bmljYXRpbmcKQEAgLTMxNTksMjggKzMwNDksMjggQEAKICAqLwogCiAjZGVmaW5lIElJT19JQ01SX0NSQl9WTERfU0hGVCAgIDIwCi0jZGVmaW5lIElJT19JQ01SX0NSQl9WTERfTUFTSyAgICgweDdmZmZVTCA8PCBJSU9fSUNNUl9DUkJfVkxEX1NIRlQpCisjZGVmaW5lIElJT19JQ01SX0NSQl9WTERfTUFTSwkoMHg3ZmZmVUwgPDwgSUlPX0lDTVJfQ1JCX1ZMRF9TSEZUKQogCiAjZGVmaW5lIElJT19JQ01SX0ZDX0NOVF9TSEZUICAgIDE2Ci0jZGVmaW5lIElJT19JQ01SX0ZDX0NOVF9NQVNLICAgICgweGYgPDwgSUlPX0lDTVJfRkNfQ05UX1NIRlQpCisjZGVmaW5lIElJT19JQ01SX0ZDX0NOVF9NQVNLCSgweGYgPDwgSUlPX0lDTVJfRkNfQ05UX1NIRlQpCiAKICNkZWZpbmUgSUlPX0lDTVJfQ19DTlRfU0hGVCAgICAgNAotI2RlZmluZSBJSU9fSUNNUl9DX0NOVF9NQVNLICAgICAoMHhmIDw8IElJT19JQ01SX0NfQ05UX1NIRlQpCisjZGVmaW5lIElJT19JQ01SX0NfQ05UX01BU0sJKDB4ZiA8PCBJSU9fSUNNUl9DX0NOVF9TSEZUKQogCi0jZGVmaW5lIElJT19JQ01SX1BSRUNJU0UgICAgICAgICgxVUwgPDwgNTIpCi0jZGVmaW5lIElJT19JQ01SX0NMUl9SUFBEICAgICAgICgxVUwgPDwgMTMpCi0jZGVmaW5lIElJT19JQ01SX0NMUl9SUVBEICAgICAgICgxVUwgPDwgMTIpCisjZGVmaW5lIElJT19JQ01SX1BSRUNJU0UJKDFVTCA8PCA1MikKKyNkZWZpbmUgSUlPX0lDTVJfQ0xSX1JQUEQJKDFVTCA8PCAxMykKKyNkZWZpbmUgSUlPX0lDTVJfQ0xSX1JRUEQJKDFVTCA8PCAxMikKIAogLyoKICAqIElJTyBQSU8gRGVhbGxvY2F0aW9uIHJlZ2lzdGVyIGZpZWxkIG1hc2tzIDogKElJT19JUERSKQogIFhYWCBwcmVzZW50IGJ1dCBub3QgbmVlZGVkIGluIGJlZHJvY2s/ICBTZWUgdGhlIG1hbnVhbC4KICAqLwotI2RlZmluZSBJSU9fSVBEUl9QTkQgICAgKDEgPDwgNCkKKyNkZWZpbmUgSUlPX0lQRFJfUE5EICAgIAkoMSA8PCA0KQogCiAvKgogICogSUlPIENSQiBkZWFsbG9jYXRpb24gcmVnaXN0ZXIgZmllbGQgbWFza3M6IChJSU9fSUNEUikKICAqLwotI2RlZmluZSBJSU9fSUNEUl9QTkQgICAgKDEgPDwgNCkKKyNkZWZpbmUgSUlPX0lDRFJfUE5EICAgIAkoMSA8PCA0KQogCiAvKiAKICAqIElPIEJURSBMZW5ndGgvU3RhdHVzIChJSU9fSUJMUykgcmVnaXN0ZXIgYml0IGZpZWxkIGRlZmluaXRpb25zCkBAIC0zMjIzLDM1ICszMTEzLDM1IEBACiAvKgogICogSU8gRXJyb3IgQ2xlYXIgcmVnaXN0ZXIgYml0IGZpZWxkIGRlZmluaXRpb25zCiAgKi8KLSNkZWZpbmUgSUVDTFJfUEkxX0ZXRF9JTlQJKDFVTCA8PCAzMSkgIC8qIGNsZWFyIFBJMV9GT1JXQVJEX0lOVCBpbiBpaWRzciAqLwotI2RlZmluZSBJRUNMUl9QSTBfRldEX0lOVAkoMVVMIDw8IDMwKSAgLyogY2xlYXIgUEkwX0ZPUldBUkRfSU5UIGluIGlpZHNyICovCi0jZGVmaW5lIElFQ0xSX1NQVVJfUkRfSERSCSgxVUwgPDwgMjkpICAvKiBjbGVhciB2YWxpZCBiaXQgaW4gaXhzcyByZWcgKi8KLSNkZWZpbmUgSUVDTFJfQlRFMQkJKDFVTCA8PCAxOCkgIC8qIGNsZWFyIGJ0ZSBlcnJvciAxICovCi0jZGVmaW5lIElFQ0xSX0JURTAJCSgxVUwgPDwgMTcpICAvKiBjbGVhciBidGUgZXJyb3IgMCAqLwotI2RlZmluZSBJRUNMUl9DUkFaWQkJKDFVTCA8PCAxNikgIC8qIGNsZWFyIGNyYXp5IGJpdCBpbiB3c3RhdCByZWcgKi8KLSNkZWZpbmUgSUVDTFJfUFJCX0YJCSgxVUwgPDwgMTUpICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl9GIHJlZyAqLwotI2RlZmluZSBJRUNMUl9QUkJfRQkJKDFVTCA8PCAxNCkgIC8qIGNsZWFyIGVyciBiaXQgaW4gUFJCX0UgcmVnICovCi0jZGVmaW5lIElFQ0xSX1BSQl9ECQkoMVVMIDw8IDEzKSAgLyogY2xlYXIgZXJyIGJpdCBpbiBQUkJfRCByZWcgKi8KLSNkZWZpbmUgSUVDTFJfUFJCX0MJCSgxVUwgPDwgMTIpICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl9DIHJlZyAqLwotI2RlZmluZSBJRUNMUl9QUkJfQgkJKDFVTCA8PCAxMSkgIC8qIGNsZWFyIGVyciBiaXQgaW4gUFJCX0IgcmVnICovCi0jZGVmaW5lIElFQ0xSX1BSQl9BCQkoMVVMIDw8IDEwKSAgLyogY2xlYXIgZXJyIGJpdCBpbiBQUkJfQSByZWcgKi8KLSNkZWZpbmUgSUVDTFJfUFJCXzkJCSgxVUwgPDwgOSkgICAvKiBjbGVhciBlcnIgYml0IGluIFBSQl85IHJlZyAqLwotI2RlZmluZSBJRUNMUl9QUkJfOAkJKDFVTCA8PCA4KSAgIC8qIGNsZWFyIGVyciBiaXQgaW4gUFJCXzggcmVnICovCi0jZGVmaW5lIElFQ0xSX1BSQl8wCQkoMVVMIDw8IDApICAgLyogY2xlYXIgZXJyIGJpdCBpbiBQUkJfMCByZWcgKi8KKyNkZWZpbmUgSUVDTFJfUEkxX0ZXRF9JTlQJKDFVTCA8PCAzMSkJLyogY2xlYXIgUEkxX0ZPUldBUkRfSU5UIGluIGlpZHNyICovCisjZGVmaW5lIElFQ0xSX1BJMF9GV0RfSU5UCSgxVUwgPDwgMzApCS8qIGNsZWFyIFBJMF9GT1JXQVJEX0lOVCBpbiBpaWRzciAqLworI2RlZmluZSBJRUNMUl9TUFVSX1JEX0hEUgkoMVVMIDw8IDI5KQkvKiBjbGVhciB2YWxpZCBiaXQgaW4gaXhzcyByZWcgKi8KKyNkZWZpbmUgSUVDTFJfQlRFMQkJKDFVTCA8PCAxOCkJLyogY2xlYXIgYnRlIGVycm9yIDEgKi8KKyNkZWZpbmUgSUVDTFJfQlRFMAkJKDFVTCA8PCAxNykJLyogY2xlYXIgYnRlIGVycm9yIDAgKi8KKyNkZWZpbmUgSUVDTFJfQ1JBWlkJCSgxVUwgPDwgMTYpCS8qIGNsZWFyIGNyYXp5IGJpdCBpbiB3c3RhdCByZWcgKi8KKyNkZWZpbmUgSUVDTFJfUFJCX0YJCSgxVUwgPDwgMTUpCS8qIGNsZWFyIGVyciBiaXQgaW4gUFJCX0YgcmVnICovCisjZGVmaW5lIElFQ0xSX1BSQl9FCQkoMVVMIDw8IDE0KQkvKiBjbGVhciBlcnIgYml0IGluIFBSQl9FIHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfRAkJKDFVTCA8PCAxMykJLyogY2xlYXIgZXJyIGJpdCBpbiBQUkJfRCByZWcgKi8KKyNkZWZpbmUgSUVDTFJfUFJCX0MJCSgxVUwgPDwgMTIpCS8qIGNsZWFyIGVyciBiaXQgaW4gUFJCX0MgcmVnICovCisjZGVmaW5lIElFQ0xSX1BSQl9CCQkoMVVMIDw8IDExKQkvKiBjbGVhciBlcnIgYml0IGluIFBSQl9CIHJlZyAqLworI2RlZmluZSBJRUNMUl9QUkJfQQkJKDFVTCA8PCAxMCkJLyogY2xlYXIgZXJyIGJpdCBpbiBQUkJfQSByZWcgKi8KKyNkZWZpbmUgSUVDTFJfUFJCXzkJCSgxVUwgPDwgOSkJLyogY2xlYXIgZXJyIGJpdCBpbiBQUkJfOSByZWcgKi8KKyNkZWZpbmUgSUVDTFJfUFJCXzgJCSgxVUwgPDwgOCkJLyogY2xlYXIgZXJyIGJpdCBpbiBQUkJfOCByZWcgKi8KKyNkZWZpbmUgSUVDTFJfUFJCXzAJCSgxVUwgPDwgMCkJLyogY2xlYXIgZXJyIGJpdCBpbiBQUkJfMCByZWcgKi8KIAogLyoKICAqIElJTyBDUkIgY29udHJvbCByZWdpc3RlciBGaWVsZHM6IElJT19JQ0NSIAogICovCi0jZGVmaW5lCUlJT19JQ0NSX1BFTkRJTkcJKDB4MTAwMDApCi0jZGVmaW5lCUlJT19JQ0NSX0NNRF9NQVNLCSgweEZGKQotI2RlZmluZQlJSU9fSUNDUl9DTURfU0hGVAkoNykKLSNkZWZpbmUJSUlPX0lDQ1JfQ01EX05PUAkoMHgwKQkvKiBObyBPcCAqLwotI2RlZmluZQlJSU9fSUNDUl9DTURfV0FLRQkoMHgxMDApIC8qIFJlYWN0aXZhdGUgQ1JCIGVudHJ5IGFuZCBwcm9jZXNzICovCi0jZGVmaW5lCUlJT19JQ0NSX0NNRF9USU1FT1VUCSgweDIwMCkJLyogTWFrZSBDUkIgdGltZW91dCAmIG1hcmsgaW52YWxpZCAqLwotI2RlZmluZQlJSU9fSUNDUl9DTURfRUpFQ1QJKDB4NDAwKQkvKiBDb250ZW50cyBvZiBlbnRyeSB3cml0dGVuIHRvIG1lbW9yeSAKKyNkZWZpbmUJSUlPX0lDQ1JfUEVORElORwkweDEwMDAwCisjZGVmaW5lCUlJT19JQ0NSX0NNRF9NQVNLCTB4RkYKKyNkZWZpbmUJSUlPX0lDQ1JfQ01EX1NIRlQJNworI2RlZmluZQlJSU9fSUNDUl9DTURfTk9QCTB4MAkvKiBObyBPcCAqLworI2RlZmluZQlJSU9fSUNDUl9DTURfV0FLRQkweDEwMAkvKiBSZWFjdGl2YXRlIENSQiBlbnRyeSBhbmQgcHJvY2VzcyAqLworI2RlZmluZQlJSU9fSUNDUl9DTURfVElNRU9VVAkweDIwMAkvKiBNYWtlIENSQiB0aW1lb3V0ICYgbWFyayBpbnZhbGlkICovCisjZGVmaW5lCUlJT19JQ0NSX0NNRF9FSkVDVAkweDQwMAkvKiBDb250ZW50cyBvZiBlbnRyeSB3cml0dGVuIHRvIG1lbW9yeQogCQkJCQkgKiB2aWEgYSBXQgogCQkJCQkgKi8KLSNkZWZpbmUJSUlPX0lDQ1JfQ01EX0ZMVVNICSgweDgwMCkKKyNkZWZpbmUJSUlPX0lDQ1JfQ01EX0ZMVVNICTB4ODAwCiAKIC8qCiAgKgpAQCAtMzI4Myw4ICszMTczLDggQEAKICAqIEVhc3kgYWNjZXNzIG1hY3JvcyBmb3IgQ1JCcywgYWxsIDUgcmVnaXN0ZXJzIChBLUUpCiAgKi8KIHR5cGVkZWYgaWlfaWNyYjBfYV91X3QgaWNyYmFfdDsKLSNkZWZpbmUgYV9zaWRuICAgICAgICAgIGlpX2ljcmIwX2FfZmxkX3MuaWFfc2lkbgotI2RlZmluZSBhX3RudW0gICAgICAgICAgaWlfaWNyYjBfYV9mbGRfcy5pYV90bnVtCisjZGVmaW5lIGFfc2lkbgkJaWlfaWNyYjBfYV9mbGRfcy5pYV9zaWRuCisjZGVmaW5lIGFfdG51bQkJaWlfaWNyYjBfYV9mbGRfcy5pYV90bnVtCiAjZGVmaW5lIGFfYWRkciAgICAgICAgICBpaV9pY3JiMF9hX2ZsZF9zLmlhX2FkZHIKICNkZWZpbmUgYV92YWxpZCAgICAgICAgIGlpX2ljcmIwX2FfZmxkX3MuaWFfdmxkCiAjZGVmaW5lIGFfaW93ICAgICAgICAgICBpaV9pY3JiMF9hX2ZsZF9zLmlhX2lvdwpAQCAtMzMyNCwxNCArMzIxNCwxMyBAQAogI2RlZmluZSBjX3NvdXJjZSAgICAgICAgaWlfaWNyYjBfY19mbGRfcy5pY19zb3VyY2UKICNkZWZpbmUgY19yZWd2YWx1ZQlpaV9pY3JiMF9jX3JlZ3ZhbAogCi0KIHR5cGVkZWYgaWlfaWNyYjBfZF91X3QgaWNyYmRfdDsKICNkZWZpbmUgZF9zbGVlcCAgICAgICAgIGlpX2ljcmIwX2RfZmxkX3MuaWRfc2xlZXAKICNkZWZpbmUgZF9wcmljbnQgICAgICAgIGlpX2ljcmIwX2RfZmxkX3MuaWRfcHJfY250CiAjZGVmaW5lIGRfcHJpcHNjICAgICAgICBpaV9pY3JiMF9kX2ZsZF9zLmlkX3ByX3BzYwogI2RlZmluZSBkX2J0ZW9wICAgICAgICAgaWlfaWNyYjBfZF9mbGRfcy5pZF9idGVfb3AKLSNkZWZpbmUgZF9idGVhZGRyICAgICAgIGlpX2ljcmIwX2RfZmxkX3MuaWRfcGFfYmUgLyogaWNfcGFfYmUgZmxkIGhhcyAyIG5hbWVzKi8KLSNkZWZpbmUgZF9iZW5hYmxlICAgICAgIGlpX2ljcmIwX2RfZmxkX3MuaWRfcGFfYmUgLyogaWNfcGFfYmUgZmxkIGhhcyAyIG5hbWVzKi8KKyNkZWZpbmUgZF9idGVhZGRyICAgICAgIGlpX2ljcmIwX2RfZmxkX3MuaWRfcGFfYmUJLyogaWNfcGFfYmUgZmxkIGhhcyAyIG5hbWVzICovCisjZGVmaW5lIGRfYmVuYWJsZSAgICAgICBpaV9pY3JiMF9kX2ZsZF9zLmlkX3BhX2JlCS8qIGljX3BhX2JlIGZsZCBoYXMgMiBuYW1lcyAqLwogI2RlZmluZSBkX3JlZ3ZhbHVlCWlpX2ljcmIwX2RfcmVndmFsCiAKIHR5cGVkZWYgaWlfaWNyYjBfZV91X3QgaWNyYmVfdDsKQEAgLTMzNDEsNyArMzIzMCw2IEBACiAjZGVmaW5lIGljcmJlX3RpbWVvdXQgICBpaV9pY3JiMF9lX2ZsZF9zLmllX3RpbWVvdXQKICNkZWZpbmUgZV9yZWd2YWx1ZQlpaV9pY3JiMF9lX3JlZ3ZhbAogCi0KIC8qIE51bWJlciBvZiB3aWRnZXRzIHN1cHBvcnRlZCBieSBzaHViICovCiAjZGVmaW5lIEhVQl9OVU1fV0lER0VUICAgICAgICAgIDkKICNkZWZpbmUgSFVCX1dJREdFVF9JRF9NSU4gICAgICAgMHg4CkBAIC0zMzY3LDI3ICszMjU1LDI3IEBACiAKICNkZWZpbmUgTE5LX1NUQVRfV09SS0lORyAgICAgICAgMHgyCQkvKiBMTFAgaXMgd29ya2luZyAqLwogCi0jZGVmaW5lIElJT19XU1RBVF9FQ1JBWlkgICAgICAgICgxVUxMIDw8IDMyKSAgICAvKiBIdWIgZ29uZSBjcmF6eSAqLwotI2RlZmluZSBJSU9fV1NUQVRfVFhSRVRSWSAgICAgICAoMVVMTCA8PCA5KSAgICAgLyogSHViIFR4IFJldHJ5IHRpbWVvdXQgKi8KLSNkZWZpbmUgSUlPX1dTVEFUX1RYUkVUUllfTUFTSyAgKDB4N0YpICAgLyogc2hvdWxkIGJlIDB4RkY/PyAqLwotI2RlZmluZSBJSU9fV1NUQVRfVFhSRVRSWV9TSEZUICAoMTYpCi0jZGVmaW5lIElJT19XU1RBVF9UWFJFVFJZX0NOVCh3KSAgICAgICAgKCgodykgPj4gSUlPX1dTVEFUX1RYUkVUUllfU0hGVCkgJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJSU9fV1NUQVRfVFhSRVRSWV9NQVNLKQorI2RlZmluZSBJSU9fV1NUQVRfRUNSQVpZCSgxVUxMIDw8IDMyKQkvKiBIdWIgZ29uZSBjcmF6eSAqLworI2RlZmluZSBJSU9fV1NUQVRfVFhSRVRSWQkoMVVMTCA8PCA5KQkvKiBIdWIgVHggUmV0cnkgdGltZW91dCAqLworI2RlZmluZSBJSU9fV1NUQVRfVFhSRVRSWV9NQVNLICAweDdGCQkvKiBzaG91bGQgYmUgMHhGRj8/ICovCisjZGVmaW5lIElJT19XU1RBVF9UWFJFVFJZX1NIRlQgIDE2CisjZGVmaW5lIElJT19XU1RBVF9UWFJFVFJZX0NOVCh3KQkoKCh3KSA+PiBJSU9fV1NUQVRfVFhSRVRSWV9TSEZUKSAmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCQlJSU9fV1NUQVRfVFhSRVRSWV9NQVNLKQogCiAvKiBOdW1iZXIgb2YgSUkgcGVyZi4gY291bnRlcnMgd2UgY2FuIG11bHRpcGxleCBhdCBvbmNlICovCiAKICNkZWZpbmUgSU9fUEVSRl9TRVRTCTMyCiAKIC8qIEJpdCBmb3IgdGhlIHdpZGdldCBpbiBpbmJvdW5kIGFjY2VzcyByZWdpc3RlciAqLwotI2RlZmluZSBJSU9fSUlXQV9XSURHRVQoX3cpICAgICAoKHVpbnQ2NF90KSgxVUxMIDw8IF93KSkKKyNkZWZpbmUgSUlPX0lJV0FfV0lER0VUKF93KQkoKHVpbnQ2NF90KSgxVUxMIDw8IF93KSkKIC8qIEJpdCBmb3IgdGhlIHdpZGdldCBpbiBvdXRib3VuZCBhY2Nlc3MgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgSUlPX0lPV0FfV0lER0VUKF93KSAgICAgKCh1aW50NjRfdCkoMVVMTCA8PCBfdykpCisjZGVmaW5lIElJT19JT1dBX1dJREdFVChfdykJKCh1aW50NjRfdCkoMVVMTCA8PCBfdykpCiAKIC8qIE5PVEU6IFRoZSBmb2xsb3dpbmcgZGVmaW5lIGFzc3VtZXMgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gZ2V0CiAgKiB3aWRnZXQgbnVtYmVycyBmcm9tIDggdGhydSBGIGFuZCB0aGUgZGV2aWNlIG51bWJlcnMgd2l0aGluCiAgKiB3aWRnZXQgZnJvbSAwIHRocnUgNy4KICAqLwotI2RlZmluZSBJSU9fSUlERU1fV0lER0VUREVWX01BU0sodywgZCkgICgodWludDY0X3QpKDFVTEwgPDwgKDggKiAoKHcpIC0gOCkgKyAoZCkpKSkKKyNkZWZpbmUgSUlPX0lJREVNX1dJREdFVERFVl9NQVNLKHcsIGQpCSgodWludDY0X3QpKDFVTEwgPDwgKDggKiAoKHcpIC0gOCkgKyAoZCkpKSkKIAogLyogSU8gSW50ZXJydXB0IERlc3RpbmF0aW9uIFJlZ2lzdGVyICovCiAjZGVmaW5lIElJT19JSURTUl9TRU5UX1NISUZUICAgIDI4CkBAIC0zNDAyLDExICszMjkwLDExIEBACiAjZGVmaW5lIElJT19JSURTUl9MVkxfTUFTSyAgICAgIDB4MDAwMDAwZmYKIAogLyogWHRhbGsgdGltZW91dCB0aHJlc2hob2xkIHJlZ2lzdGVyIChJSU9fSVhUVCkgKi8KLSNkZWZpbmUgSVhUVF9SUlNQX1RPX1NIRlQJNTUJICAgLyogcmVhZCByZXNwb25zZSB0aW1lb3V0ICovCisjZGVmaW5lIElYVFRfUlJTUF9UT19TSEZUCTU1CS8qIHJlYWQgcmVzcG9uc2UgdGltZW91dCAqLwogI2RlZmluZSBJWFRUX1JSU1BfVE9fTUFTSwkoMHgxRlVMTCA8PCBJWFRUX1JSU1BfVE9fU0hGVCkKLSNkZWZpbmUgSVhUVF9SUlNQX1BTX1NIRlQJMzIJICAgLyogcmVhZCByZXNwb25zZWQgVE8gcHJlc2NhbGFyICovCisjZGVmaW5lIElYVFRfUlJTUF9QU19TSEZUCTMyCS8qIHJlYWQgcmVzcG9uc2VkIFRPIHByZXNjYWxhciAqLwogI2RlZmluZSBJWFRUX1JSU1BfUFNfTUFTSwkoMHg3RkZGRkZVTEwgPDwgSVhUVF9SUlNQX1BTX1NIRlQpCi0jZGVmaW5lIElYVFRfVEFJTF9UT19TSEZUCTAJICAgLyogdGFpbCB0aW1lb3V0IGNvdW50ZXIgdGhyZXNob2xkICovCisjZGVmaW5lIElYVFRfVEFJTF9UT19TSEZUCTAJLyogdGFpbCB0aW1lb3V0IGNvdW50ZXIgdGhyZXNob2xkICovCiAjZGVmaW5lIElYVFRfVEFJTF9UT19NQVNLCSgweDNGRkZGRkZVTEwgPDwgSVhUVF9UQUlMX1RPX1NIRlQpCiAKIC8qCkBAIC0zNDE0LDE3ICszMzAyLDE3IEBACiAgKi8KIAogdHlwZWRlZiB1bmlvbiBodWJpaV93Y3JfdSB7Ci0gICAgICAgIHVpbnQ2NF90ICAgICAgd2NyX3JlZ192YWx1ZTsKLSAgICAgICAgc3RydWN0IHsKLQkgIHVpbnQ2NF90CXdjcl93aWRnZXRfaWQ6ICAgNCwgICAgIC8qIExMUCBjcm9zc2JhciBjcmVkaXQgKi8KLQkJCXdjcl90YWdfbW9kZToJIDEsCS8qIFRhZyBtb2RlICovCi0JCQl3Y3JfcnN2ZDE6CSA4LAkvKiBSZXNlcnZlZCAqLwotCQkJd2NyX3hiYXJfY3JkOgkgMywJLyogTExQIGNyb3NzYmFyIGNyZWRpdCAqLwotCQkJd2NyX2ZfYmFkX3BrdDoJIDEsCS8qIEZvcmNlIGJhZCBsbHAgcGt0IGVuYWJsZSAqLwotCQkJd2NyX2Rpcl9jb246CSAxLAkvKiB3aWRnZXQgZGlyZWN0IGNvbm5lY3QgKi8KLQkJCXdjcl9lX3RocmVzaDoJIDUsCS8qIGVsYXN0aWNpdHkgdGhyZXNob2xkICovCi0JCQl3Y3JfcnN2ZDoJNDE7CS8qIHVudXNlZCAqLwotICAgICAgICB9IHdjcl9maWVsZHNfczsKKwl1aW50NjRfdCB3Y3JfcmVnX3ZhbHVlOworCXN0cnVjdCB7CisJCXVpbnQ2NF90IHdjcl93aWRnZXRfaWQ6NCwJLyogTExQIGNyb3NzYmFyIGNyZWRpdCAqLworCQkgd2NyX3RhZ19tb2RlOjEsCS8qIFRhZyBtb2RlICovCisJCSB3Y3JfcnN2ZDE6OCwJLyogUmVzZXJ2ZWQgKi8KKwkJIHdjcl94YmFyX2NyZDozLAkvKiBMTFAgY3Jvc3NiYXIgY3JlZGl0ICovCisJCSB3Y3JfZl9iYWRfcGt0OjEsCS8qIEZvcmNlIGJhZCBsbHAgcGt0IGVuYWJsZSAqLworCQkgd2NyX2Rpcl9jb246MSwJLyogd2lkZ2V0IGRpcmVjdCBjb25uZWN0ICovCisJCSB3Y3JfZV90aHJlc2g6NSwJLyogZWxhc3RpY2l0eSB0aHJlc2hvbGQgKi8KKwkJIHdjcl9yc3ZkOjQxOwkvKiB1bnVzZWQgKi8KKwl9IHdjcl9maWVsZHNfczsKIH0gaHViaWlfd2NyX3Q7CiAKICNkZWZpbmUgaXdjcl9kaXJfY29uICAgIHdjcl9maWVsZHNfcy53Y3JfZGlyX2NvbgpAQCAtMzQzNiw0MSArMzMyNCwzNSBAQAogICAgcGVyZm9ybWVkICovCiAKIHR5cGVkZWYgdW5pb24gaW9fcGVyZl9zZWwgewotICAgICAgICB1aW50NjRfdCBwZXJmX3NlbF9yZWc7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICB1aW50NjRfdAlwZXJmX2lwcHIwIDogIDQsCi0JCQkJcGVyZl9pcHByMSA6ICA0LAotCQkJCXBlcmZfaWNjdCAgOiAgOCwKLQkJCQlwZXJmX3JzdmQgIDogNDg7Ci0gICAgICAgIH0gcGVyZl9zZWxfYml0czsKKwl1aW50NjRfdCBwZXJmX3NlbF9yZWc7CisJc3RydWN0IHsKKwkJdWludDY0X3QgcGVyZl9pcHByMDo0LCBwZXJmX2lwcHIxOjQsIHBlcmZfaWNjdDo4LCBwZXJmX3JzdmQ6NDg7CisJfSBwZXJmX3NlbF9iaXRzOwogfSBpb19wZXJmX3NlbF90OwogCiAvKiBpb19wZXJmX2NudCBpcyB0byBleHRyYWN0IHRoZSBjb3VudCBmcm9tIHRoZSBzaHViIHJlZ2lzdGVycy4gRHVlIHRvCiAgICBoYXJkd2FyZSBwcm9ibGVtcyB0aGVyZSBpcyBvbmx5IG9uZSBjb3VudGVyLCBub3QgdHdvLiAqLwogCiB0eXBlZGVmIHVuaW9uIGlvX3BlcmZfY250IHsKLSAgICAgICAgdWludDY0X3QgICAgICBwZXJmX2NudDsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgIHVpbnQ2NF90CXBlcmZfY250ICAgOiAyMCwKLQkJCQlwZXJmX3JzdmQyIDogMTIsCi0JCQkJcGVyZl9yc3ZkMSA6IDMyOwotICAgICAgICB9IHBlcmZfY250X2JpdHM7CisJdWludDY0X3QgcGVyZl9jbnQ7CisJc3RydWN0IHsKKwkJdWludDY0X3QgcGVyZl9jbnQ6MjAsIHBlcmZfcnN2ZDI6MTIsIHBlcmZfcnN2ZDE6MzI7CisJfSBwZXJmX2NudF9iaXRzOwogCiB9IGlvX3BlcmZfY250X3Q7CiAKIHR5cGVkZWYgdW5pb24gaXBydGVfYSB7Ci0JdWludDY0X3QJZW50cnk7CisJdWludDY0X3QgZW50cnk7CiAJc3RydWN0IHsKLQkJdWludDY0X3QJaV9yc3ZkXzEgICAgICAgICAgICAgICAgICA6CSAzOwotCQl1aW50NjRfdAlpX2FkZHIJCQkgIDoJMzg7Ci0JCXVpbnQ2NF90CWlfaW5pdAkJCSAgOgkgMzsKLQkJdWludDY0X3QJaV9zb3VyY2UJCSAgOgkgODsKLQkJdWludDY0X3QJaV9yc3ZkCQkJICA6CSAyOwotCQl1aW50NjRfdAlpX3dpZGdldAkJICA6CSA0OwotCQl1aW50NjRfdAlpX3RvX2NudAkJICA6CSA1OwotCQl1aW50NjRfdCAgICAgICBpX3ZsZCAgICAgICAgICAgICAgICAgICAgIDogICAgICAxOworCQl1aW50NjRfdCBpX3JzdmRfMTozOworCQl1aW50NjRfdCBpX2FkZHI6Mzg7CisJCXVpbnQ2NF90IGlfaW5pdDozOworCQl1aW50NjRfdCBpX3NvdXJjZTo4OworCQl1aW50NjRfdCBpX3JzdmQ6MjsKKwkJdWludDY0X3QgaV93aWRnZXQ6NDsKKwkJdWludDY0X3QgaV90b19jbnQ6NTsKKwkJdWludDY0X3QgaV92bGQ6MTsKIAl9IGlwcnRlX2ZpZWxkczsKIH0gaXBydGVfYV90OwogCi0jZW5kaWYgLyogX0FTTV9JQTY0X1NOX1NIVUJJT19IICovCi0KKyNlbmRpZgkJCQkvKiBfQVNNX0lBNjRfU05fU0hVQklPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fY3B1aWQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fY3B1aWQuaAppbmRleCA2ODU0MzVhLi4yMGIzMDAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX2NwdWlkLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9jcHVpZC5oCkBAIC00LDcgKzQsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KIAogCkBAIC05MiwyNCArOTIsMjQgQEAKICAqIE5PVEU6IG9uIG5vbi1NUCBzeXN0ZW1zLCBvbmx5IGNwdWlkIDAgZXhpc3RzCiAgKi8KIAotZXh0ZXJuIHNob3J0IHBoeXNpY2FsX25vZGVfbWFwW107CQkJLyogaW5kZXhlZCBieSBuYXNpZCB0byBnZXQgY25vZGUgKi8KK2V4dGVybiBzaG9ydCBwaHlzaWNhbF9ub2RlX21hcFtdOwkvKiBpbmRleGVkIGJ5IG5hc2lkIHRvIGdldCBjbm9kZSAqLwogCiAvKgogICogTWFjcm9zIGZvciByZXRyaWV2aW5nIGluZm8gYWJvdXQgY3VycmVudCBjcHUKICAqLwotI2RlZmluZSBnZXRfbmFzaWQoKQkJCShub2RlcGRhLT5waHlzX2NwdWlkW3NtcF9wcm9jZXNzb3JfaWQoKV0ubmFzaWQpCi0jZGVmaW5lIGdldF9zdWJub2RlKCkJCQkobm9kZXBkYS0+cGh5c19jcHVpZFtzbXBfcHJvY2Vzc29yX2lkKCldLnN1Ym5vZGUpCi0jZGVmaW5lIGdldF9zbGljZSgpCQkJKG5vZGVwZGEtPnBoeXNfY3B1aWRbc21wX3Byb2Nlc3Nvcl9pZCgpXS5zbGljZSkKLSNkZWZpbmUgZ2V0X2Nub2RlKCkJCQkobm9kZXBkYS0+cGh5c19jcHVpZFtzbXBfcHJvY2Vzc29yX2lkKCldLmNub2RlKQotI2RlZmluZSBnZXRfc2FwaWNpZCgpCQkJKChpYTY0X2dldHJlZyhfSUE2NF9SRUdfQ1JfTElEKSA+PiAxNikgJiAweGZmZmYpCisjZGVmaW5lIGdldF9uYXNpZCgpCShzbl9ub2RlcGRhLT5waHlzX2NwdWlkW3NtcF9wcm9jZXNzb3JfaWQoKV0ubmFzaWQpCisjZGVmaW5lIGdldF9zdWJub2RlKCkJKHNuX25vZGVwZGEtPnBoeXNfY3B1aWRbc21wX3Byb2Nlc3Nvcl9pZCgpXS5zdWJub2RlKQorI2RlZmluZSBnZXRfc2xpY2UoKQkoc25fbm9kZXBkYS0+cGh5c19jcHVpZFtzbXBfcHJvY2Vzc29yX2lkKCldLnNsaWNlKQorI2RlZmluZSBnZXRfY25vZGUoKQkoc25fbm9kZXBkYS0+cGh5c19jcHVpZFtzbXBfcHJvY2Vzc29yX2lkKCldLmNub2RlKQorI2RlZmluZSBnZXRfc2FwaWNpZCgpCSgoaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0NSX0xJRCkgPj4gMTYpICYgMHhmZmZmKQogCiAvKgogICogTWFjcm9zIGZvciByZXRyaWV2aW5nIGluZm8gYWJvdXQgYW4gYXJiaXRyYXJ5IGNwdQogICoJY3B1aWQgLSBsb2dpY2FsIGNwdSBpZAogICovCi0jZGVmaW5lIGNwdWlkX3RvX25hc2lkKGNwdWlkKQkJKG5vZGVwZGEtPnBoeXNfY3B1aWRbY3B1aWRdLm5hc2lkKQotI2RlZmluZSBjcHVpZF90b19zdWJub2RlKGNwdWlkKQkJKG5vZGVwZGEtPnBoeXNfY3B1aWRbY3B1aWRdLnN1Ym5vZGUpCi0jZGVmaW5lIGNwdWlkX3RvX3NsaWNlKGNwdWlkKQkJKG5vZGVwZGEtPnBoeXNfY3B1aWRbY3B1aWRdLnNsaWNlKQorI2RlZmluZSBjcHVpZF90b19uYXNpZChjcHVpZCkJCShzbl9ub2RlcGRhLT5waHlzX2NwdWlkW2NwdWlkXS5uYXNpZCkKKyNkZWZpbmUgY3B1aWRfdG9fc3Vibm9kZShjcHVpZCkJCShzbl9ub2RlcGRhLT5waHlzX2NwdWlkW2NwdWlkXS5zdWJub2RlKQorI2RlZmluZSBjcHVpZF90b19zbGljZShjcHVpZCkJCShzbl9ub2RlcGRhLT5waHlzX2NwdWlkW2NwdWlkXS5zbGljZSkKICNkZWZpbmUgY3B1aWRfdG9fY25vZGVpZChjcHVpZCkJCShwaHlzaWNhbF9ub2RlX21hcFtjcHVpZF90b19uYXNpZChjcHVpZCldKQogCiAKQEAgLTEyMywxMSArMTIzLDggQEAKIAogLyoKICAqIGNub2RlaWRfdG9fbmFzaWQgLSBjb252ZXJ0IGEgY25vZGVpZCB0byBhIE5BU0lECi0gKglNYWNybyByZWxpZXMgb24gcGdfZGF0YSBmb3IgYSBub2RlIGJlaW5nIG9uIHRoZSBub2RlIGl0c2VsZi4KLSAqCUp1c3QgZXh0cmFjdCB0aGUgTkFTSUQgZnJvbSB0aGUgcG9pbnRlci4KLSAqCiAgKi8KLSNkZWZpbmUgY25vZGVpZF90b19uYXNpZChjbm9kZWlkKQlwZGEtPmNub2RlaWRfdG9fbmFzaWRfdGFibGVbY25vZGVpZF0KKyNkZWZpbmUgY25vZGVpZF90b19uYXNpZChjbm9kZWlkKQkoc25fY25vZGVpZF90b19uYXNpZFtjbm9kZWlkXSkKICAKIC8qCiAgKiBuYXNpZF90b19jbm9kZWlkIC0gY29udmVydCBhIE5BU0lEIHRvIGEgY25vZGVpZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9mcnUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fZnJ1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMjFhYzMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9mcnUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTItMTk5NywxOTk5LTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0jaWZuZGVmIF9BU01fSUE2NF9TTl9TTl9GUlVfSAotI2RlZmluZSBfQVNNX0lBNjRfU05fU05fRlJVX0gKLQotI2RlZmluZSBNQVhfRElNTVMJCQk4CSAvKiBtYXggIyBvZiBkaW1tIGJhbmtzICovCi0jZGVmaW5lIE1BWF9QQ0lERVYJCQk4CSAvKiBtYXggIyBvZiBwY2kgZGV2aWNlcyBvbiBhIHBjaSBidXMgKi8KLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGNvbmZpZGVuY2VfdDsKLQotdHlwZWRlZiBzdHJ1Y3Qga2ZfbWVtX3MgewotCWNvbmZpZGVuY2VfdCBrbV9jb25maWRlbmNlOyAvKiBjb25maWRlbmNlIGxldmVsIHRoYXQgdGhlIG1lbW9yeSBpcyBiYWQKLQkJCQkgICAgICogaXMgdGhpcyBuZWNlc3NhcnkgPwotCQkJCSAgICAgKi8KLQljb25maWRlbmNlX3Qga21fZGltbVtNQVhfRElNTVNdOwotCQkJCSAgICAvKiBjb25maWRlbmNlIGxldmVsIHRoYXQgZGltbVtpXSBpcyBiYWQKLQkJCQkgICAgICpJIHRoaW5rIHRoaXMgaXMgdGhlIHJpZ2h0IG51bWJlcgotCQkJCSAgICAgKi8KLQotfSBrZl9tZW1fdDsKLQotdHlwZWRlZiBzdHJ1Y3Qga2ZfY3B1X3MgewotCWNvbmZpZGVuY2VfdAlrY19jb25maWRlbmNlOyAvKiBjb25maWRlbmNlIGxldmVsIHRoYXQgY3B1IGlzIGJhZCAqLwotCWNvbmZpZGVuY2VfdAlrY19pY2FjaGU7IC8qIGNvbmZpZGVuY2UgbGV2ZWwgdGhhdCBpbnN0ci4gY2FjaGUgaXMgYmFkICovCi0JY29uZmlkZW5jZV90CWtjX2RjYWNoZTsgLyogY29uZmlkZW5jZSBsZXZlbCB0aGF0IGRhdGEgICBjYWNoZSBpcyBiYWQgKi8KLQljb25maWRlbmNlX3QJa2Nfc2NhY2hlOyAvKiBjb25maWRlbmNlIGxldmVsIHRoYXQgc2VjLiAgIGNhY2hlIGlzIGJhZCAqLwotCWNvbmZpZGVuY2VfdAlrY19zeXNidXM7IC8qIGNvbmZpZGVuY2UgbGV2ZWwgdGhhdCBzeXNhZC9jbWQvc3RhdGUgYnVzIGlzIGJhZCAqLwotfSBrZl9jcHVfdDsKLQotCi10eXBlZGVmIHN0cnVjdCBrZl9wY2lfYnVzX3MgewotCWNvbmZpZGVuY2VfdAlrcGJfYmVsaWVmOwkvKiBjb25maWRlbmNlIGxldmVsICB0aGF0IHRoZSAgcGNpIGJ1cyBpcyBiYWQgKi8KLQljb25maWRlbmNlX3QJa3BiX3BjaWRldl9iZWxpZWZbTUFYX1BDSURFVl07Ci0JCQkJCS8qIGNvbmZpZGVuY2UgbGV2ZWwgdGhhdCB0aGUgcGNpIGRldiBpcyBiYWQgKi8KLX0ga2ZfcGNpX2J1c190OwotCi0KLSNlbmRpZiAvKiBfQVNNX0lBNjRfU05fU05fRlJVX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKaW5kZXggODhjMzFiNS4uNTZkNzRjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCkBAIC04LDcgKzgsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogCiAKQEAgLTM1LDggKzM1LDggQEAKICNkZWZpbmUgIFNOX1NBTF9QUklOVF9FUlJPUgkJCSAgIDB4MDIwMDAwMTIKICNkZWZpbmUgIFNOX1NBTF9TRVRfRVJST1JfSEFORExJTkdfRkVBVFVSRVMJICAgMHgwMjAwMDAxYQkvLyByZWVudHJhbnQKICNkZWZpbmUgIFNOX1NBTF9HRVRfRklUX0NPTVBUCQkJICAgMHgwMjAwMDAxYgkvLyByZWVudHJhbnQKLSNkZWZpbmUgIFNOX1NBTF9HRVRfU05fSU5GTyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMWMKICNkZWZpbmUgIFNOX1NBTF9HRVRfU0FQSUNfSU5GTyAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMWQKKyNkZWZpbmUgIFNOX1NBTF9HRVRfU05fSU5GTyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMWUKICNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX1BVVEMgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMjEKICNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX0dFVEMgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMjIKICNkZWZpbmUgIFNOX1NBTF9DT05TT0xFX1BVVFMgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMjMKQEAgLTY0LDYgKzY0LDcgQEAKIAogI2RlZmluZSAgU05fU0FMX1NZU0NUTF9JT0JSSUNLX1BDSV9PUAkJICAgMHgwMjAwMDA0MgkvLyByZWVudHJhbnQKICNkZWZpbmUJIFNOX1NBTF9JUk9VVEVSX09QCQkJICAgMHgwMjAwMDA0MworI2RlZmluZSAgU05fU0FMX1NZU0NUTF9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDA0NAogI2RlZmluZSAgU05fU0FMX0lPSUZfSU5URVJSVVBUCQkJICAgMHgwMjAwMDA0YQogI2RlZmluZSAgU05fU0FMX0hXUEVSRl9PUAkJCSAgIDB4MDIwMDAwNTAgICAvLyBsb2NrCiAjZGVmaW5lICBTTl9TQUxfSU9JRl9FUlJPUl9JTlRFUlJVUFQJCSAgIDB4MDIwMDAwNTEKQEAgLTc2LDcgKzc3LDggQEAKICNkZWZpbmUgIFNOX1NBTF9JT0lGX0dFVF9XSURHRVRfRE1BRkxVU0hfTElTVAkgICAweDAyMDAwMDU4CiAKICNkZWZpbmUgU05fU0FMX0hVQl9FUlJPUl9JTlRFUlJVUFQJCSAgIDB4MDIwMDAwNjAKLQorI2RlZmluZSBTTl9TQUxfQlRFX1JFQ09WRVIJCQkgICAweDAyMDAwMDYxCisjZGVmaW5lIFNOX1NBTF9JT0lGX0dFVF9QQ0lfVE9QT0xPR1kJICAgICAgICAgICAweDAyMDAwMDYyCiAKIC8qCiAgKiBTZXJ2aWNlLXNwZWNpZmljIGNvbnN0YW50cwpAQCAtNTU1LDcgKzU1Nyw4IEBACiBpYTY0X3NuX3BhcnRpdGlvbl9zZXJpYWxfZ2V0KHZvaWQpCiB7CiAJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7Ci0JU0FMX0NBTEwocmV0X3N0dWZmLCBTTl9TQUxfUEFSVElUSU9OX1NFUklBTF9HRVQsIDAsIDAsIDAsIDAsIDAsIDAsIDApOworCWlhNjRfc2FsX29lbWNhbGxfcmVlbnRyYW50KCZyZXRfc3R1ZmYsIFNOX1NBTF9QQVJUSVRJT05fU0VSSUFMX0dFVCwgMCwKKwkJCQkgICAwLCAwLCAwLCAwLCAwLCAwKTsKIAlpZiAocmV0X3N0dWZmLnN0YXR1cyAhPSAwKQogCSAgICByZXR1cm4gMDsKIAlyZXR1cm4gcmV0X3N0dWZmLnYwOwpAQCAtNTYzLDExICs1NjYsMTAgQEAKIAogc3RhdGljIGlubGluZSB1NjQKIHNuX3BhcnRpdGlvbl9zZXJpYWxfbnVtYmVyX3ZhbCh2b2lkKSB7Ci0JaWYgKHNuX3BhcnRpdGlvbl9zZXJpYWxfbnVtYmVyKSB7Ci0JCXJldHVybihzbl9wYXJ0aXRpb25fc2VyaWFsX251bWJlcik7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuKHNuX3BhcnRpdGlvbl9zZXJpYWxfbnVtYmVyID0gaWE2NF9zbl9wYXJ0aXRpb25fc2VyaWFsX2dldCgpKTsKKwlpZiAodW5saWtlbHkoc25fcGFydGl0aW9uX3NlcmlhbF9udW1iZXIgPT0gMCkpIHsKKwkJc25fcGFydGl0aW9uX3NlcmlhbF9udW1iZXIgPSBpYTY0X3NuX3BhcnRpdGlvbl9zZXJpYWxfZ2V0KCk7CiAJfQorCXJldHVybiBzbl9wYXJ0aXRpb25fc2VyaWFsX251bWJlcjsKIH0KIAogLyoKQEAgLTU3OCw4ICs1ODAsOCBAQAogaWE2NF9zbl9zeXNjdGxfcGFydGl0aW9uX2dldChuYXNpZF90IG5hc2lkKQogewogCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOwotCVNBTF9DQUxMKHJldF9zdHVmZiwgU05fU0FMX1NZU0NUTF9QQVJUSVRJT05fR0VULCBuYXNpZCwKLQkJIDAsIDAsIDAsIDAsIDAsIDApOworCWlhNjRfc2FsX29lbWNhbGxfbm9sb2NrKCZyZXRfc3R1ZmYsIFNOX1NBTF9TWVNDVExfUEFSVElUSU9OX0dFVCwgbmFzaWQsCisJCQkJMCwgMCwgMCwgMCwgMCwgMCk7CiAJaWYgKHJldF9zdHVmZi5zdGF0dXMgIT0gMCkKIAkgICAgcmV0dXJuIElOVkFMSURfUEFSVElEOwogCXJldHVybiAoKHBhcnRpZF90KXJldF9zdHVmZi52MCk7CkBAIC01OTMsMTEgKzU5NSwzOCBAQAogCiBzdGF0aWMgaW5saW5lIHBhcnRpZF90CiBzbl9sb2NhbF9wYXJ0aWQodm9pZCkgewotCWlmIChzbl9wYXJ0aWQgPCAwKSB7Ci0JCXJldHVybiAoc25fcGFydGlkID0gaWE2NF9zbl9zeXNjdGxfcGFydGl0aW9uX2dldChjcHVpZF90b19uYXNpZChzbXBfcHJvY2Vzc29yX2lkKCkpKSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIHNuX3BhcnRpZDsKKwlpZiAodW5saWtlbHkoc25fcGFydGlkIDwgMCkpIHsKKwkJc25fcGFydGlkID0gaWE2NF9zbl9zeXNjdGxfcGFydGl0aW9uX2dldChjcHVpZF90b19uYXNpZChzbXBfcHJvY2Vzc29yX2lkKCkpKTsKIAl9CisJcmV0dXJuIHNuX3BhcnRpZDsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHBhcnRpdGlvbidzIHJlc2VydmVkIHBhZ2UgdGhyb3VnaAorICogYW4gaXRlcmF0aXZlIG51bWJlciBvZiBjYWxscy4KKyAqCisgKiBPbiBmaXJzdCBjYWxsLCAnY29va2llJyBhbmQgJ2xlbicgc2hvdWxkIGJlIHNldCB0byAwLCBhbmQgJ2FkZHInCisgKiBzZXQgdG8gdGhlIG5hc2lkIG9mIHRoZSBwYXJ0aXRpb24gd2hvc2UgcmVzZXJ2ZWQgcGFnZSdzIGFkZHJlc3MgaXMKKyAqIGJlaW5nIHNvdWdodC4KKyAqIE9uIHN1YnNlcXVlbnQgY2FsbHMsIHBhc3MgdGhlIHZhbHVlcywgdGhhdCB3ZXJlIHBhc3NlZCBiYWNrIG9uIHRoZQorICogcHJldmlvdXMgY2FsbC4KKyAqCisgKiBXaGlsZSB0aGUgcmV0dXJuIHN0YXR1cyBlcXVhbHMgU0FMUkVUX01PUkVfUEFTU0VTLCBrZWVwIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgZmlyc3QgY29weWluZyAnbGVuJyBieXRlcyBzdGFydGluZyBhdCAnYWRkcicKKyAqIGludG8gJ2J1ZicuIE9uY2UgdGhlIHJldHVybiBzdGF0dXMgZXF1YWxzIFNBTFJFVF9PSywgJ2FkZHInIHdpbGwKKyAqIGJlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBwYXJ0aXRpb24ncyByZXNlcnZlZCBwYWdlLiBJZiB0aGUKKyAqIHJldHVybiBzdGF0dXMgZXF1YWxzIG5laXRoZXIgb2YgdGhlc2UsIGFuIGVycm9yIGFzIG9jY3VycmVkLgorICovCitzdGF0aWMgaW5saW5lIHM2NAorc25fcGFydGl0aW9uX3Jlc2VydmVkX3BhZ2VfcGEodTY0IGJ1ZiwgdTY0ICpjb29raWUsIHU2NCAqYWRkciwgdTY0ICpsZW4pCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBydjsKKwlpYTY0X3NhbF9vZW1jYWxsX3JlZW50cmFudCgmcnYsIFNOX1NBTF9HRVRfUEFSVElUSU9OX0FERFIsICpjb29raWUsCisJCQkJICAgKmFkZHIsIGJ1ZiwgKmxlbiwgMCwgMCwgMCk7CisJKmNvb2tpZSA9IHJ2LnYwOworCSphZGRyID0gcnYudjE7CisJKmxlbiA9IHJ2LnYyOworCXJldHVybiBydi5zdGF0dXM7CiB9CiAKIC8qCkBAIC02MTksOCArNjQ4LDggQEAKIHNuX3JlZ2lzdGVyX3hwX2FkZHJfcmVnaW9uKHU2NCBwYWRkciwgdTY0IGxlbiwgaW50IG9wZXJhdGlvbikKIHsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJldF9zdHVmZjsKLQlTQUxfQ0FMTChyZXRfc3R1ZmYsIFNOX1NBTF9YUF9BRERSX1JFR0lPTiwgcGFkZHIsIGxlbiwgKHU2NClvcGVyYXRpb24sCi0JCSAwLCAwLCAwLCAwKTsKKwlpYTY0X3NhbF9vZW1jYWxsKCZyZXRfc3R1ZmYsIFNOX1NBTF9YUF9BRERSX1JFR0lPTiwgcGFkZHIsIGxlbiwKKwkJCSAodTY0KW9wZXJhdGlvbiwgMCwgMCwgMCwgMCk7CiAJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7CiB9CiAKQEAgLTY0NCw4ICs2NzMsOCBAQAogCX0gZWxzZSB7CiAJCWNhbGwgPSBTTl9TQUxfTk9fRkFVTFRfWk9ORV9QSFlTSUNBTDsKIAl9Ci0JU0FMX0NBTEwocmV0X3N0dWZmLCBjYWxsLCBzdGFydF9hZGRyLCBlbmRfYWRkciwgcmV0dXJuX2FkZHIsICh1NjQpMSwKLQkJIDAsIDAsIDApOworCWlhNjRfc2FsX29lbWNhbGwoJnJldF9zdHVmZiwgY2FsbCwgc3RhcnRfYWRkciwgZW5kX2FkZHIsIHJldHVybl9hZGRyLAorCQkJICh1NjQpMSwgMCwgMCwgMCk7CiAJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7CiB9CiAKQEAgLTY2Niw4ICs2OTUsOCBAQAogc25fY2hhbmdlX2NvaGVyZW5jZSh1NjQgKm5ld19kb21haW4sIHU2NCAqb2xkX2RvbWFpbikKIHsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJldF9zdHVmZjsKLQlTQUxfQ0FMTChyZXRfc3R1ZmYsIFNOX1NBTF9DT0hFUkVOQ0UsIG5ld19kb21haW4sIG9sZF9kb21haW4sIDAsIDAsCi0JCSAwLCAwLCAwKTsKKwlpYTY0X3NhbF9vZW1jYWxsKCZyZXRfc3R1ZmYsIFNOX1NBTF9DT0hFUkVOQ0UsICh1NjQpbmV3X2RvbWFpbiwKKwkJCSAodTY0KW9sZF9kb21haW4sIDAsIDAsIDAsIDAsIDApOwogCXJldHVybiByZXRfc3R1ZmYuc3RhdHVzOwogfQogCkBAIC02ODYsOCArNzE1LDggQEAKIAljbm9kZWlkID0gbmFzaWRfdG9fY25vZGVpZChnZXRfbm9kZV9udW1iZXIocGFkZHIpKTsKIAkvLyBzcGluX2xvY2soJk5PREVQREEoY25vZGVpZCktPmJpc3RfbG9jayk7CiAJbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKLQlTQUxfQ0FMTF9OT0xPQ0socmV0X3N0dWZmLCBTTl9TQUxfTUVNUFJPVEVDVCwgcGFkZHIsIGxlbiwgbmFzaWRfYXJyYXksCi0JCSBwZXJtcywgMCwgMCwgMCk7CisJaWE2NF9zYWxfb2VtY2FsbF9ub2xvY2soJnJldF9zdHVmZiwgU05fU0FMX01FTVBST1RFQ1QsIHBhZGRyLCBsZW4sCisJCQkJKHU2NCluYXNpZF9hcnJheSwgcGVybXMsIDAsIDAsIDApOwogCWxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7CiAJLy8gc3Bpbl91bmxvY2soJk5PREVQREEoY25vZGVpZCktPmJpc3RfbG9jayk7CiAJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7CkBAIC04NDksNiArODc4LDE5IEBACiAJcmV0dXJuIChpbnQpIHJ2LnYwOwogfQogCisvKgorICogU2V0IHVwIGEgbm9kZSBhcyB0aGUgcG9pbnQgb2YgY29udGFjdCBmb3Igc3lzdGVtIGNvbnRyb2xsZXIKKyAqIGVudmlyb25tZW50YWwgZXZlbnQgZGVsaXZlcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitpYTY0X3NuX3N5c2N0bF9ldmVudF9pbml0KG5hc2lkX3QgbmFzaWQpCit7CisgICAgICAgIHN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcnY7CisgICAgICAgIFNBTF9DQUxMX1JFRU5UUkFOVChydiwgU05fU0FMX1NZU0NUTF9FVkVOVCwgKHU2NCkgbmFzaWQsCisJCQkgICAwLCAwLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuIChpbnQpIHJ2LnYwOworfQorCiAvKioKICAqIGlhNjRfc25fZ2V0X2ZpdF9jb21wdCAtIHJlYWQgYSBGSVQgZW50cnkgZnJvbSB0aGUgUFJPTSBoZWFkZXIKICAqIEBuYXNpZDogTkFTSUQgb2Ygbm9kZSB0byByZWFkCkBAIC0xMDEyLDQgKzEwNTQsMjkgQEAKIAlyZXR1cm4gKGludCkgcnYuc3RhdHVzOwogfQogCitzdGF0aWMgaW5saW5lIGludAoraWE2NF9zbl9pb2lmX2dldF9wY2lfdG9wb2xvZ3kodTY0IHJhY2ssIHU2NCBiYXksIHU2NCBzbG90LCB1NjQgc2xhYiwKKwkJCSAgICAgIHU2NCBidWYsIHU2NCBsZW4pCit7CisJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBydjsKKwlTQUxfQ0FMTF9OT0xPQ0socnYsIFNOX1NBTF9JT0lGX0dFVF9QQ0lfVE9QT0xPR1ksCisJCXJhY2ssIGJheSwgc2xvdCwgc2xhYiwgYnVmLCBsZW4sIDApOworCXJldHVybiAoaW50KSBydi5zdGF0dXM7Cit9CisKKy8qCisgKiBCVEUgZXJyb3IgcmVjb3ZlcnkgaXMgaW1wbGVtZW50ZWQgaW4gU0FMCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitpYTY0X3NuX2J0ZV9yZWNvdmVyeShuYXNpZF90IG5hc2lkKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcnY7CisKKwlydi5zdGF0dXMgPSAwOworCVNBTF9DQUxMX05PTE9DSyhydiwgU05fU0FMX0JURV9SRUNPVkVSLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKKwlpZiAocnYuc3RhdHVzID09IFNBTFJFVF9OT1RfSU1QTEVNRU5URUQpCisJCXJldHVybiAwOworCXJldHVybiAoaW50KSBydi5zdGF0dXM7Cit9CisKICNlbmRpZiAvKiBfQVNNX0lBNjRfU05fU05fU0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25kcnYuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25kcnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEwMGQ0Mi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuZHJ2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqLwotCi0jaWZuZGVmIF9BU01fSUE2NF9TTl9TTkRSVl9ICi0jZGVmaW5lIF9BU01fSUE2NF9TTl9TTkRSVl9ICi0KLS8qIGlvY3RsIGNvbW1hbmRzICovCi0jZGVmaW5lIFNORFJWX0dFVF9ST1VURVJJTkZPCQkxCi0jZGVmaW5lIFNORFJWX0dFVF9JTkZPU0laRQkJMgotI2RlZmluZSBTTkRSVl9HRVRfSFVCSU5GTwkJMwotI2RlZmluZSBTTkRSVl9HRVRfRkxBU0hMT0dTSVpFCQk0Ci0jZGVmaW5lIFNORFJWX1NFVF9GTEFTSFNZTkMJCTUKLSNkZWZpbmUgU05EUlZfR0VUX0ZMQVNITE9HREFUQQkJNgotI2RlZmluZSBTTkRSVl9HRVRfRkxBU0hMT0dBTEwJCTcKLQotI2RlZmluZSBTTkRSVl9TRVRfSElTVE9HUkFNX1RZUEUJMTQKLQotI2RlZmluZSBTTkRSVl9FTFNDX0NPTU1BTkQJCTE5Ci0jZGVmaW5lCVNORFJWX0NMRUFSX0xPRwkJCTIwCi0jZGVmaW5lCVNORFJWX0lOSVRfTE9HCQkJMjEKLSNkZWZpbmUJU05EUlZfR0VUX1BJTU1fUFNDCQkyMgotI2RlZmluZSBTTkRSVl9TRVRfUEFSVElUSU9OCQkyMwotI2RlZmluZSBTTkRSVl9HRVRfUEFSVElUSU9OCQkyNAotCi0vKiBzZWUgc3luZXJneV9wZXJmX2lvY3RsKCkgKi8KLSNkZWZpbmUgU05EUlZfR0VUX1NZTkVSR1lfVkVSU0lPTgkzMAotI2RlZmluZSBTTkRSVl9HRVRfU1lORVJHWV9TVEFUVVMJMzEKLSNkZWZpbmUgU05EUlZfR0VUX1NZTkVSR1lJTkZPCQkzMgotI2RlZmluZSBTTkRSVl9TWU5FUkdZX0FQUEVORAkJMzMKLSNkZWZpbmUgU05EUlZfU1lORVJHWV9FTkFCTEUJCTM0Ci0jZGVmaW5lIFNORFJWX1NZTkVSR1lfRlJFUQkJMzUKLQotLyogRGV2aWNlcyAqLwotI2RlZmluZSBTTkRSVl9VS05PV05fREVWSUNFCQktMQotI2RlZmluZSBTTkRSVl9ST1VURVJfREVWSUNFCQkxCi0jZGVmaW5lIFNORFJWX0hVQl9ERVZJQ0UJCTIKLSNkZWZpbmUgU05EUlZfRUxTQ19OVlJBTV9ERVZJQ0UJCTMKLSNkZWZpbmUgU05EUlZfRUxTQ19DT05UUk9MTEVSX0RFVklDRQk0Ci0jZGVmaW5lIFNORFJWX1NZU0NUTF9TVUJDSAkJNQotI2RlZmluZSBTTkRSVl9TWU5FUkdZX0RFVklDRQkJNgotCi0jZW5kaWYgLyogX0FTTV9JQTY0X1NOX1NORFJWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2EuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzFhYWNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jYS5oCkBAIC0wLDAgKzEsNTk2IEBACisjaWZuZGVmIF9BU01fSUE2NF9TTl9USU9fVElPQ0FfSAorI2RlZmluZSBfQVNNX0lBNjRfU05fVElPX1RJT0NBX0gKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisKKyNkZWZpbmUgVElPQ0FfUEFSVF9OVU0JMHhFMDIwCisjZGVmaW5lIFRJT0NBX01GR1JfTlVNCTB4MjQKKyNkZWZpbmUgVElPQ0FfUkVWX0EJMHgxCisKKy8qCisgKiBSZWdpc3RlciBsYXlvdXQgZm9yIFRJTzpDQS4gIFNlZSBiZWxvdyBmb3IgYml0bWFza3MgZm9yIGVhY2ggcmVnaXN0ZXIuCisgKi8KKworc3RydWN0IHRpb2NhIHsKKwl1aW50NjRfdAljYV9pZDsJCQkJLyogMHgwMDAwMDAgKi8KKwl1aW50NjRfdAljYV9jb250cm9sMTsJCQkvKiAweDAwMDAwOCAqLworCXVpbnQ2NF90CWNhX2NvbnRyb2wyOwkJCS8qIDB4MDAwMDEwICovCisJdWludDY0X3QJY2Ffc3RhdHVzMTsJCQkvKiAweDAwMDAxOCAqLworCXVpbnQ2NF90CWNhX3N0YXR1czI7CQkJLyogMHgwMDAwMjAgKi8KKwl1aW50NjRfdAljYV9nYXJ0X2FwZXJhdHVyZTsJCS8qIDB4MDAwMDI4ICovCisJdWludDY0X3QJY2FfZ2Z4X2RldGFjaDsJCQkvKiAweDAwMDAzMCAqLworCXVpbnQ2NF90CWNhX2ludGFfZGVzdF9hZGRyOwkJLyogMHgwMDAwMzggKi8KKwl1aW50NjRfdAljYV9pbnRiX2Rlc3RfYWRkcjsJCS8qIDB4MDAwMDQwICovCisJdWludDY0X3QJY2FfZXJyX2ludF9kZXN0X2FkZHI7CQkvKiAweDAwMDA0OCAqLworCXVpbnQ2NF90CWNhX2ludF9zdGF0dXM7CQkJLyogMHgwMDAwNTAgKi8KKwl1aW50NjRfdAljYV9pbnRfc3RhdHVzX2FsaWFzOwkJLyogMHgwMDAwNTggKi8KKwl1aW50NjRfdAljYV9tdWx0X2Vycm9yOwkJCS8qIDB4MDAwMDYwICovCisJdWludDY0X3QJY2FfbXVsdF9lcnJvcl9hbGlhczsJCS8qIDB4MDAwMDY4ICovCisJdWludDY0X3QJY2FfZmlyc3RfZXJyb3I7CQkJLyogMHgwMDAwNzAgKi8KKwl1aW50NjRfdAljYV9pbnRfbWFzazsJCQkvKiAweDAwMDA3OCAqLworCXVpbnQ2NF90CWNhX2NybV9wa3RlcnJfdHlwZTsJCS8qIDB4MDAwMDgwICovCisJdWludDY0X3QJY2FfY3JtX3BrdGVycl90eXBlX2FsaWFzOwkvKiAweDAwMDA4OCAqLworCXVpbnQ2NF90CWNhX2NybV9jdF9lcnJvcl9kZXRhaWxfMTsJLyogMHgwMDAwOTAgKi8KKwl1aW50NjRfdAljYV9jcm1fY3RfZXJyb3JfZGV0YWlsXzI7CS8qIDB4MDAwMDk4ICovCisJdWludDY0X3QJY2FfY3JtX3RudW10bzsJCQkvKiAweDAwMDBBMCAqLworCXVpbnQ2NF90CWNhX2dhcnRfZXJyOwkJCS8qIDB4MDAwMEE4ICovCisJdWludDY0X3QJY2FfcGNpZXJyX3R5cGU7CQkJLyogMHgwMDAwQjAgKi8KKwl1aW50NjRfdAljYV9wY2llcnJfYWRkcjsJCQkvKiAweDAwMDBCOCAqLworCisJdWludDY0X3QJY2FfcGFkXzAwMDBDMFszXTsJCS8qIDB4MDAwMHtDMC4uRDB9ICovCisKKwl1aW50NjRfdAljYV9wY2lfcmRfYnVmX2ZsdXNoOwkJLyogMHgwMDAwRDggKi8KKwl1aW50NjRfdAljYV9wY2lfZG1hX2FkZHJfZXh0bjsJCS8qIDB4MDAwMEUwICovCisJdWludDY0X3QJY2FfYWdwX2RtYV9hZGRyX2V4dG47CQkvKiAweDAwMDBFOCAqLworCXVpbnQ2NF90CWNhX2ZvcmNlX2ludGE7CQkJLyogMHgwMDAwRjAgKi8KKwl1aW50NjRfdAljYV9mb3JjZV9pbnRiOwkJCS8qIDB4MDAwMEY4ICovCisJdWludDY0X3QJY2FfZGVidWdfdmVjdG9yX3NlbDsJCS8qIDB4MDAwMTAwICovCisJdWludDY0X3QJY2FfZGVidWdfbXV4X2NvcmVfc2VsOwkJLyogMHgwMDAxMDggKi8KKwl1aW50NjRfdAljYV9kZWJ1Z19tdXhfcGNpX3NlbDsJCS8qIDB4MDAwMTEwICovCisJdWludDY0X3QJY2FfZGVidWdfZG9tYWluX3NlbDsJCS8qIDB4MDAwMTE4ICovCisKKwl1aW50NjRfdAljYV9wYWRfMDAwMTIwWzI4XTsJCS8qIDB4MDAwMXsyMC4uRjh9ICovCisKKwl1aW50NjRfdAljYV9nYXJ0X3B0cl90YWJsZTsJCS8qIDB4MjAwICovCisJdWludDY0X3QJY2FfZ2FydF90bGJfYWRkcls4XTsJCS8qIDB4MnswOC4uNDB9ICovCit9OworCisvKgorICogTWFzay9zaGlmdCBkZWZpbml0aW9ucyBmb3IgVElPOkNBIHJlZ2lzdGVycy4gIFRoZSBjb252ZW50aW9uIGhlcmUgaXMKKyAqIHRvIG1haW5seSB1c2UgdGhlIG5hbWVzIGFzIHRoZXkgYXBwZWFyIGluIHRoZSAiVElPIEFFR0lTIFByb2dyYW1tZXJzJworICogUmVmZXJlbmNlIiB3aXRoIGEgQ0FfIHByZWZpeCBhZGRlZC4gIFNvbWUgZXhjZXB0aW9ucyB3ZXJlIG1hZGUgdG8gZml4CisgKiBkdXBsaWNhdGUgZmllbGQgbmFtZXMgb3IgdG8gZ2VuZXJhbGl6ZSBmaWVsZHMgdGhhdCBhcmUgY29tbW9uIHRvCisgKiBkaWZmZXJlbnQgcmVnaXN0ZXJzIChjYV9kZWJ1Z19tdXhfY29yZV9zZWwgYW5kIGNhX2RlYnVnX211eF9wY2lfc2VsIGZvcgorICogZXhhbXBsZSkuCisgKgorICogRmllbGRzIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgYml0IGhhdmUgYSBzaW5nbGUgI2RlZmluZSBoYXZlIGEgc2luZ2xlCisgKiBtYWNybyBkZWNsYXJhdGlvbiB0byBtYXNrIHRoZSBiaXQuICBGaWVsZHMgY29uc2lzdGluZyBvZiBtdWx0aXBsZSBiaXRzCisgKiBoYXZlIHR3byBkZWNsYXJhdGlvbnM6IG9uZSB0byBtYXNrIHRoZSBwcm9wZXIgYml0cyBpbiBhIHJlZ2lzdGVyLCBhbmQgCisgKiBhIHNlY29uZCB3aXRoIHRoZSBzdWZmaXggIl9TSEZUIiB0byBpZGVudGlmeSBob3cgZmFyIHRoZSBtYXNrIG5lZWRzIHRvCisgKiBiZSBzaGlmdGVkIHJpZ2h0IHRvIGdldCBpdHMgYmFzZSB2YWx1ZS4KKyAqLworCisvKiA9PT09IGNhX2NvbnRyb2wxICovCisjZGVmaW5lIENBX1NZU19CSUdfRU5ECQkJKDF1bGwgPDwgMCkKKyNkZWZpbmUgQ0FfRE1BX0FHUF9TV0FQCQkJKDF1bGwgPDwgMSkKKyNkZWZpbmUgQ0FfRE1BX1BDSV9TV0FQCQkJKDF1bGwgPDwgMikKKyNkZWZpbmUgQ0FfUElPX0lPX1NXQVAJCQkoMXVsbCA8PCAzKQorI2RlZmluZSBDQV9QSU9fTUVNX1NXQVAJCQkoMXVsbCA8PCA0KQorI2RlZmluZSBDQV9HRlhfV1JfU1dBUAkJCSgxdWxsIDw8IDUpCisjZGVmaW5lIENBX0FHUF9GV19FTkFCTEUJCSgxdWxsIDw8IDYpCisjZGVmaW5lIENBX0FHUF9DQUxfQ1lDTEUJCSgweDd1bGwgPDwgNykKKyNkZWZpbmUgQ0FfQUdQX0NBTF9DWUNMRV9TSEZUCQk3CisjZGVmaW5lIENBX0FHUF9DQUxfUFJTQ0xfQllQCQkoMXVsbCA8PCAxMCkKKyNkZWZpbmUgQ0FfQUdQX0lOSVRfQ0FMX0VOQgkJKDF1bGwgPDwgMTEpCisjZGVmaW5lIENBX0lOSl9BRERSX1BFUlIJCSgxdWxsIDw8IDEyKQorI2RlZmluZSBDQV9JTkpfREFUQV9QRVJSCQkoMXVsbCA8PCAxMykKKwkvKiBiaXRzIDE1OjE0IHVudXNlZCAqLworI2RlZmluZSBDQV9QQ0lNX0lPX05CRV9BRAkJKDB4N3VsbCA8PCAxNikKKyNkZWZpbmUgQ0FfUENJTV9JT19OQkVfQURfU0hGVAkJMTYKKyNkZWZpbmUgQ0FfUENJTV9GQVNUX0JUQl9FTkIJCSgxdWxsIDw8IDE5KQorCS8qIGJpdHMgMjM6MjAgdW51c2VkICovCisjZGVmaW5lIENBX1BJT19BRERSX09GRlNFVAkJKDB4ZmZ1bGwgPDwgMjQpCisjZGVmaW5lIENBX1BJT19BRERSX09GRlNFVF9TSEZUCQkyNAorCS8qIGJpdHMgMzU6MzIgdW51c2VkICovCisjZGVmaW5lIENBX0FHUERNQV9PUF9DT01CREVMQVkJCSgweDFmdWxsIDw8IDM2KQorI2RlZmluZSBDQV9BR1BETUFfT1BfQ09NQkRFTEFZX1NIRlQJMzYKKwkvKiBiaXQgNDEgdW51c2VkICovCisjZGVmaW5lIENBX0FHUERNQV9PUF9FTkJfQ09NQkRFTEFZCSgxdWxsIDw8IDQyKQorI2RlZmluZQlDQV9QQ0lfSU5UX0xQQ05UCQkoMHhmZnVsbCA8PCA0NCkKKyNkZWZpbmUgQ0FfUENJX0lOVF9MUENOVF9TSEZUCQk0NAorCS8qIGJpdHMgNjM6NTIgdW51c2VkICovCisKKy8qID09PT0gY2FfY29udHJvbDIgKi8KKyNkZWZpbmUgQ0FfQUdQX0xBVEVOQ1lfVE8JCSgweGZmdWxsIDw8IDApCisjZGVmaW5lIENBX0FHUF9MQVRFTkNZX1RPX1NIRlQJCTAKKyNkZWZpbmUgQ0FfUENJX0xBVEVOQ1lfVE8JCSgweGZmdWxsIDw8IDgpCisjZGVmaW5lIENBX1BDSV9MQVRFTkNZX1RPX1NIRlQJCTgKKyNkZWZpbmUgQ0FfUENJX01BWF9SRVRSWQkJKDB4M2ZmdWxsIDw8IDE2KQorI2RlZmluZSBDQV9QQ0lfTUFYX1JFVFJZX1NIRlQJCTE2CisJLyogYml0cyAyNzoyNiB1bnVzZWQgKi8KKyNkZWZpbmUgQ0FfUlRfSU5UX0VOCQkJKDB4M3VsbCA8PCAyOCkKKyNkZWZpbmUgQ0FfUlRfSU5UX0VOX1NIRlQJCQkyOAorI2RlZmluZSBDQV9NU0lfSU5UX0VOQgkJCSgxdWxsIDw8IDMwKQorI2RlZmluZSBDQV9QQ0lfQVJCX0VSUl9FTkIJCSgxdWxsIDw8IDMxKQorI2RlZmluZSBDQV9HQVJUX01FTV9QQVJBTQkJKDB4M3VsbCA8PCAzMikKKyNkZWZpbmUgQ0FfR0FSVF9NRU1fUEFSQU1fU0hGVAkJMzIKKyNkZWZpbmUgQ0FfR0FSVF9SRF9QUkVGRVRDSF9FTkIJCSgxdWxsIDw8IDM0KQorI2RlZmluZSBDQV9HQVJUX1dSX1BSRUZFVENIX0VOQgkJKDF1bGwgPDwgMzUpCisjZGVmaW5lIENBX0dBUlRfRkxVU0hfVExCCQkoMXVsbCA8PCAzNikKKwkvKiBiaXRzIDM5OjM3IHVudXNlZCAqLworI2RlZmluZSBDQV9DUk1fVE5VTVRPX1BFUklPRAkJKDB4MWZmZnVsbCA8PCA0MCkKKyNkZWZpbmUgQ0FfQ1JNX1ROVU1UT19QRVJJT0RfU0hGVAk0MAorCS8qIGJpdHMgNTU6NTMgdW51c2VkICovCisjZGVmaW5lIENBX0NSTV9UTlVNVE9fRU5CCQkoMXVsbCA8PCA1NikKKyNkZWZpbmUgQ0FfQ1JNX1BSRVNDQUxFUl9CWVAJCSgxdWxsIDw8IDU3KQorCS8qIGJpdHMgNTk6NTggdW51c2VkICovCisjZGVmaW5lIENBX0NSTV9NQVhfQ1JFRElUCQkoMHg3dWxsIDw8IDYwKQorI2RlZmluZSBDQV9DUk1fTUFYX0NSRURJVF9TSEZUCQk2MAorCS8qIGJpdCA2MyB1bnVzZWQgKi8KKworLyogPT09PSBjYV9zdGF0dXMxICovCisjZGVmaW5lIENBX0NPUkVMRVRfSUQJCQkoMHgzdWxsIDw8IDApCisjZGVmaW5lIENBX0NPUkVMRVRfSURfU0hGVAkJMAorI2RlZmluZSBDQV9JTlRBX04JCQkoMXVsbCA8PCAyKQorI2RlZmluZSBDQV9JTlRCX04JCQkoMXVsbCA8PCAzKQorI2RlZmluZSBDQV9DUk1fQ1JFRElUX0FWQUlMCQkoMHg3dWxsIDw8IDQpCisjZGVmaW5lIENBX0NSTV9DUkVESVRfQVZBSUxfU0hGVAk0CisJLyogYml0IDcgdW51c2VkICovCisjZGVmaW5lIENBX0NSTV9TUEFDRV9BVkFJTAkJKDB4N2Z1bGwgPDwgOCkKKyNkZWZpbmUgQ0FfQ1JNX1NQQUNFX0FWQUlMX1NIRlQJCTgKKwkvKiBiaXQgMTUgdW51c2VkICovCisjZGVmaW5lIENBX0dBUlRfVExCX1ZBTAkJCSgweGZmdWxsIDw8IDE2KQorI2RlZmluZSBDQV9HQVJUX1RMQl9WQUxfU0hGVAkJMTYKKwkvKiBiaXRzIDYzOjI0IHVudXNlZCAqLworCisvKiA9PT09IGNhX3N0YXR1czIgKi8KKyNkZWZpbmUgQ0FfR0ZYX0NSRURJVF9BVkFJTAkJKDB4ZmZ1bGwgPDwgMCkKKyNkZWZpbmUgQ0FfR0ZYX0NSRURJVF9BVkFJTF9TSEZUCTAKKyNkZWZpbmUgQ0FfR0ZYX09QUV9BVkFJTAkJKDB4ZmZ1bGwgPDwgOCkKKyNkZWZpbmUgQ0FfR0ZYX09QUV9BVkFJTF9TSEZUCQk4CisjZGVmaW5lIENBX0dGWF9XUkJVRkZfQVZBSUwJCSgweGZmdWxsIDw8IDE2KQorI2RlZmluZSBDQV9HRlhfV1JCVUZGX0FWQUlMX1NIRlQJMTYKKyNkZWZpbmUgQ0FfQURNQV9PUFFfQVZBSUwJCSgweGZmdWxsIDw8IDI0KQorI2RlZmluZSBDQV9BRE1BX09QUV9BVkFJTF9TSEZUCQkyNAorI2RlZmluZSBDQV9BRE1BX1dSQlVGRl9BVkFJTAkJKDB4ZmZ1bGwgPDwgMzIpCisjZGVmaW5lIENBX0FETUFfV1JCVUZGX0FWQUlMX1NIRlQJMzIKKyNkZWZpbmUgQ0FfQURNQV9SREJVRkZfQVZBSUwJCSgweDdmdWxsIDw8IDQwKQorI2RlZmluZSBDQV9BRE1BX1JEQlVGRl9BVkFJTF9TSEZUCTQwCisjZGVmaW5lIENBX1BDSV9QSU9fT1BfU1RBVAkJKDF1bGwgPDwgNDcpCisjZGVmaW5lIENBX1BETUFfT1BRX0FWQUlMCQkoMHhmdWxsIDw8IDQ4KQorI2RlZmluZSBDQV9QRE1BX09QUV9BVkFJTF9TSEZUCQk0OAorI2RlZmluZSBDQV9QRE1BX1dSQlVGRl9BVkFJTAkJKDB4ZnVsbCA8PCA1MikKKyNkZWZpbmUgQ0FfUERNQV9XUkJVRkZfQVZBSUxfU0hGVAk1MgorI2RlZmluZSBDQV9QRE1BX1JEQlVGRl9BVkFJTAkJKDB4M3VsbCA8PCA1NikKKyNkZWZpbmUgQ0FfUERNQV9SREJVRkZfQVZBSUxfU0hGVAk1NgorCS8qIGJpdHMgNjM6NTggdW51c2VkICovCisKKy8qID09PT0gY2FfZ2FydF9hcGVyYXR1cmUgKi8KKyNkZWZpbmUgQ0FfR0FSVF9BUF9FTkJfQUdQCQkoMXVsbCA8PCAwKQorI2RlZmluZSBDQV9HQVJUX1BBR0VfU0laRQkJKDF1bGwgPDwgMSkKKyNkZWZpbmUgQ0FfR0FSVF9BUF9FTkJfUENJCQkoMXVsbCA8PCAyKQorCS8qIGJpdHMgMTE6MyB1bnVzZWQgKi8KKyNkZWZpbmUgQ0FfR0FSVF9BUF9TSVpFCQkJKDB4M2ZmdWxsIDw8IDEyKQorI2RlZmluZSBDQV9HQVJUX0FQX1NJWkVfU0hGVAkJMTIKKyNkZWZpbmUgQ0FfR0FSVF9BUF9CQVNFCQkJKDB4M2ZmZmZmZmZmZmZ1bGwgPDwgMjIpCisjZGVmaW5lIENBX0dBUlRfQVBfQkFTRV9TSEZUCQkyMgorCisvKiA9PT09IGNhX2ludGFfZGVzdF9hZGRyCisgICA9PT09IGNhX2ludGJfZGVzdF9hZGRyIAorICAgPT09PSBjYV9lcnJfaW50X2Rlc3RfYWRkciAqLworCS8qIGJpdHMgMjowIHVudXNlZCAqLworI2RlZmluZSBDQV9JTlRfREVTVF9BRERSCQkoMHg3ZmZmZmZmZmZmZmZmdWxsIDw8IDMpCisjZGVmaW5lIENBX0lOVF9ERVNUX0FERFJfU0hGVAkJMworCS8qIGJpdHMgNTU6NTQgdW51c2VkICovCisjZGVmaW5lIENBX0lOVF9ERVNUX1ZFQ1QJCSgweGZmdWxsIDw8IDU2KQorI2RlZmluZSBDQV9JTlRfREVTVF9WRUNUX1NIRlQJCTU2CisKKy8qID09PT0gY2FfaW50X3N0YXR1cyAqLworLyogPT09PSBjYV9pbnRfc3RhdHVzX2FsaWFzICovCisvKiA9PT09IGNhX211bHRfZXJyb3IgKi8KKy8qID09PT0gY2FfbXVsdF9lcnJvcl9hbGlhcyAqLworLyogPT09PSBjYV9maXJzdF9lcnJvciAqLworLyogPT09PSBjYV9pbnRfbWFzayAqLworI2RlZmluZSBDQV9QQ0lfRVJSCQkJKDF1bGwgPDwgMCkKKwkvKiBiaXRzIDM6MSB1bnVzZWQgKi8KKyNkZWZpbmUgQ0FfR0FSVF9GRVRDSF9FUlIJCSgxdWxsIDw8IDQpCisjZGVmaW5lIENBX0dGWF9XUl9PVkZMVwkJCSgxdWxsIDw8IDUpCisjZGVmaW5lIENBX1BJT19SRVFfT1ZGTFcJCSgxdWxsIDw8IDYpCisjZGVmaW5lIENBX0NSTV9QS1RFUlIJCQkoMXVsbCA8PCA3KQorI2RlZmluZSBDQV9DUk1fRFZFUlIJCQkoMXVsbCA8PCA4KQorI2RlZmluZSBDQV9UTlVNVE8JCQkoMXVsbCA8PCA5KQorI2RlZmluZSBDQV9DWE1fUlNQX0NSRURfT1ZGTFcJCSgxdWxsIDw8IDEwKQorI2RlZmluZSBDQV9DWE1fUkVRX0NSRURfT1ZGTFcJCSgxdWxsIDw8IDExKQorI2RlZmluZSBDQV9QSU9fSU5WQUxJRF9BRERSCQkoMXVsbCA8PCAxMikKKyNkZWZpbmUgQ0FfUENJX0FSQl9UTwkJCSgxdWxsIDw8IDEzKQorI2RlZmluZSBDQV9BR1BfUkVRX09GTE9XCQkoMXVsbCA8PCAxNCkKKyNkZWZpbmUgQ0FfU0JBX1RZUEUxX0VSUgkJKDF1bGwgPDwgMTUpCisJLyogYml0IDE2IHVudXNlZCAqLworI2RlZmluZSBDQV9JTlRBCQkJCSgxdWxsIDw8IDE3KQorI2RlZmluZSBDQV9JTlRCCQkJCSgxdWxsIDw8IDE4KQorI2RlZmluZSBDQV9NVUxUX0lOVEEJCQkoMXVsbCA8PCAxOSkKKyNkZWZpbmUgQ0FfTVVMVF9JTlRCCQkJKDF1bGwgPDwgMjApCisjZGVmaW5lIENBX0dGWF9DUkVESVRfT1ZGTFcJCSgxdWxsIDw8IDIxKQorCS8qIGJpdHMgNjM6MjIgdW51c2VkICovCisKKy8qID09PT0gY2FfY3JtX3BrdGVycl90eXBlICovCisvKiA9PT09IGNhX2NybV9wa3RlcnJfdHlwZV9hbGlhcyAqLworI2RlZmluZSBDQV9DUk1fUEtURVJSX1NCRVJSX0hEUgkJKDF1bGwgPDwgMCkKKyNkZWZpbmUgQ0FfQ1JNX1BLVEVSUl9ESUROCQkoMXVsbCA8PCAxKQorI2RlZmluZSBDQV9DUk1fUEtURVJSX1BBQ1RZUEUJCSgxdWxsIDw8IDIpCisjZGVmaW5lIENBX0NSTV9QS1RFUlJfSU5WX1ROVU0JCSgxdWxsIDw8IDMpCisjZGVmaW5lIENBX0NSTV9QS1RFUlJfQUREUl9STkcJCSgxdWxsIDw8IDQpCisjZGVmaW5lIENBX0NSTV9QS1RFUlJfQUREUl9BTEdOCQkoMXVsbCA8PCA1KQorI2RlZmluZSBDQV9DUk1fUEtURVJSX0hEUl9QQVJBTQkJKDF1bGwgPDwgNikKKyNkZWZpbmUgQ0FfQ1JNX1BLVEVSUl9DV19FUlIJCSgxdWxsIDw8IDcpCisjZGVmaW5lIENBX0NSTV9QS1RFUlJfU0JFUlJfTkgJCSgxdWxsIDw8IDgpCisjZGVmaW5lIENBX0NSTV9QS1RFUlJfRUFSTFlfVEVSTQkoMXVsbCA8PCA5KQorI2RlZmluZSBDQV9DUk1fUEtURVJSX0VBUkxZX1RBSUwJKDF1bGwgPDwgMTApCisjZGVmaW5lIENBX0NSTV9QS1RFUlJfTVNTTkdfVEFJTAkoMXVsbCA8PCAxMSkKKyNkZWZpbmUgQ0FfQ1JNX1BLVEVSUl9NU1NOR19IRFIJCSgxdWxsIDw8IDEyKQorCS8qIGJpdHMgMTU6MTMgdW51c2VkICovCisjZGVmaW5lIENBX0ZJUlNUX0NSTV9QS1RFUlJfU0JFUlJfSERSCSgxdWxsIDw8IDE2KQorI2RlZmluZSBDQV9GSVJTVF9DUk1fUEtURVJSX0RJRE4JKDF1bGwgPDwgMTcpCisjZGVmaW5lIENBX0ZJUlNUX0NSTV9QS1RFUlJfUEFDVFlQRQkoMXVsbCA8PCAxOCkKKyNkZWZpbmUgQ0FfRklSU1RfQ1JNX1BLVEVSUl9JTlZfVE5VTQkoMXVsbCA8PCAxOSkKKyNkZWZpbmUgQ0FfRklSU1RfQ1JNX1BLVEVSUl9BRERSX1JORwkoMXVsbCA8PCAyMCkKKyNkZWZpbmUgQ0FfRklSU1RfQ1JNX1BLVEVSUl9BRERSX0FMR04JKDF1bGwgPDwgMjEpCisjZGVmaW5lIENBX0ZJUlNUX0NSTV9QS1RFUlJfSERSX1BBUkFNCSgxdWxsIDw8IDIyKQorI2RlZmluZSBDQV9GSVJTVF9DUk1fUEtURVJSX0NXX0VSUgkoMXVsbCA8PCAyMykKKyNkZWZpbmUgQ0FfRklSU1RfQ1JNX1BLVEVSUl9TQkVSUl9OSAkoMXVsbCA8PCAyNCkKKyNkZWZpbmUgQ0FfRklSU1RfQ1JNX1BLVEVSUl9FQVJMWV9URVJNCSgxdWxsIDw8IDI1KQorI2RlZmluZSBDQV9GSVJTVF9DUk1fUEtURVJSX0VBUkxZX1RBSUwJKDF1bGwgPDwgMjYpCisjZGVmaW5lIENBX0ZJUlNUX0NSTV9QS1RFUlJfTVNTTkdfVEFJTAkoMXVsbCA8PCAyNykKKyNkZWZpbmUgQ0FfRklSU1RfQ1JNX1BLVEVSUl9NU1NOR19IRFIJKDF1bGwgPDwgMjgpCisJLyogYml0cyA2MzoyOSB1bnVzZWQgKi8KKworLyogPT09PSBjYV9jcm1fY3RfZXJyb3JfZGV0YWlsXzEgKi8KKyNkZWZpbmUgQ0FfUEtUX1RZUEUJCQkoMHhmdWxsIDw8IDApCisjZGVmaW5lIENBX1BLVF9UWVBFX1NIRlQJCTAKKyNkZWZpbmUgQ0FfU1JDX0lECQkJKDB4M3VsbCA8PCA0KQorI2RlZmluZSBDQV9TUkNfSURfU0hGVAkJCTQKKyNkZWZpbmUgQ0FfREFUQV9TWgkJCSgweDN1bGwgPDwgNikKKyNkZWZpbmUgQ0FfREFUQV9TWl9TSEZUCQkJNgorI2RlZmluZSBDQV9UTlVNCQkJCSgweGZmdWxsIDw8IDgpCisjZGVmaW5lIENBX1ROVU1fU0hGVAkJCTgKKyNkZWZpbmUgQ0FfRFdfREFUQV9FTgkJCSgweGZmdWxsIDw8IDE2KQorI2RlZmluZSBDQV9EV19EQVRBX0VOX1NIRlQJCTE2CisjZGVmaW5lIENBX0dGWF9DUkVECQkJKDB4ZmZ1bGwgPDwgMjQpCisjZGVmaW5lIENBX0dGWF9DUkVEX1NIRlQJCTI0CisjZGVmaW5lIENBX01FTV9SRF9QQVJBTQkJCSgweDN1bGwgPDwgMzIpCisjZGVmaW5lIENBX01FTV9SRF9QQVJBTV9TSEZUCQkzMgorI2RlZmluZSBDQV9QSU9fT1AJCQkoMXVsbCA8PCAzNCkKKyNkZWZpbmUgQ0FfQ1dfRVJSCQkJKDF1bGwgPDwgMzUpCisJLyogYml0cyA2MjozNiB1bnVzZWQgKi8KKyNkZWZpbmUgQ0FfVkFMSUQJCQkoMXVsbCA8PCA2MykKKworLyogPT09PSBjYV9jcm1fY3RfZXJyb3JfZGV0YWlsXzIgKi8KKwkvKiBiaXRzIDI6MCB1bnVzZWQgKi8KKyNkZWZpbmUgQ0FfUEtUX0FERFIJCQkoMHgxZmZmZmZmZmZmZmZmZnVsbCA8PCAzKQorI2RlZmluZSBDQV9QS1RfQUREUl9TSEZUCQkzCisJLyogYml0cyA2Mzo1NiB1bnVzZWQgKi8KKworLyogPT09PSBjYV9jcm1fdG51bXRvICovCisjZGVmaW5lIENBX0NSTV9UTlVNVE9fVkFMCQkoMHhmZnVsbCA8PCAwKQorI2RlZmluZSBDQV9DUk1fVE5VTVRPX1ZBTF9TSEZUCQkwCisjZGVmaW5lIENBX0NSTV9UTlVNVE9fV1IJCSgxdWxsIDw8IDgpCisJLyogYml0cyA2Mzo5IHVudXNlZCAqLworCisvKiA9PT09IGNhX2dhcnRfZXJyICovCisjZGVmaW5lIENBX0dBUlRfRVJSX1NPVVJDRQkJKDB4M3VsbCA8PCAwKQorI2RlZmluZSBDQV9HQVJUX0VSUl9TT1VSQ0VfU0hGVAkJMAorCS8qIGJpdHMgMzoyIHVudXNlZCAqLworI2RlZmluZSBDQV9HQVJUX0VSUl9BRERSCQkoMHhmZmZmZmZmZmZ1bGwgPDwgNCkKKyNkZWZpbmUgQ0FfR0FSVF9FUlJfQUREUl9TSEZUCQk0CisJLyogYml0cyA2Mzo0MCB1bnVzZWQgKi8KKworLyogPT09PSBjYV9wY2llcnJfdHlwZSAqLworI2RlZmluZSBDQV9QQ0lFUlJfREFUQQkJCSgweGZmZmZmZmZmdWxsIDw8IDApCisjZGVmaW5lIENBX1BDSUVSUl9EQVRBX1NIRlQJCTAKKyNkZWZpbmUgQ0FfUENJRVJSX0VOQgkJCSgweGZ1bGwgPDwgMzIpCisjZGVmaW5lIENBX1BDSUVSUl9FTkJfU0hGVAkJMzIKKyNkZWZpbmUgQ0FfUENJRVJSX0NNRAkJCSgweGZ1bGwgPDwgMzYpCisjZGVmaW5lIENBX1BDSUVSUl9DTURfU0hGVAkJMzYKKyNkZWZpbmUgQ0FfUENJRVJSX0E2NAkJCSgxdWxsIDw8IDQwKQorI2RlZmluZSBDQV9QQ0lFUlJfU0xWX1NFUlIJCSgxdWxsIDw8IDQxKQorI2RlZmluZSBDQV9QQ0lFUlJfU0xWX1dSX1BFUlIJCSgxdWxsIDw8IDQyKQorI2RlZmluZSBDQV9QQ0lFUlJfU0xWX1JEX1BFUlIJCSgxdWxsIDw8IDQzKQorI2RlZmluZSBDQV9QQ0lFUlJfTVNUX1NFUlIJCSgxdWxsIDw8IDQ0KQorI2RlZmluZSBDQV9QQ0lFUlJfTVNUX1dSX1BFUlIJCSgxdWxsIDw8IDQ1KQorI2RlZmluZSBDQV9QQ0lFUlJfTVNUX1JEX1BFUlIJCSgxdWxsIDw8IDQ2KQorI2RlZmluZSBDQV9QQ0lFUlJfTVNUX01BQlQJCSgxdWxsIDw8IDQ3KQorI2RlZmluZSBDQV9QQ0lFUlJfTVNUX1RBQlQJCSgxdWxsIDw8IDQ4KQorI2RlZmluZSBDQV9QQ0lFUlJfTVNUX1JFVFJZX1RPVVQJKDF1bGwgPDwgNDkpCisKKyNkZWZpbmUgQ0FfUENJRVJSX1RZUEVTIFwKKwkoQ0FfUENJRVJSX0E2NHxDQV9QQ0lFUlJfU0xWX1NFUlJ8IFwKKwkgQ0FfUENJRVJSX1NMVl9XUl9QRVJSfENBX1BDSUVSUl9TTFZfUkRfUEVSUnwgXAorCSBDQV9QQ0lFUlJfTVNUX1NFUlJ8Q0FfUENJRVJSX01TVF9XUl9QRVJSfENBX1BDSUVSUl9NU1RfUkRfUEVSUnwgXAorCSBDQV9QQ0lFUlJfTVNUX01BQlR8Q0FfUENJRVJSX01TVF9UQUJUfENBX1BDSUVSUl9NU1RfUkVUUllfVE9VVCkKKworCS8qIGJpdHMgNjM6NTAgdW51c2VkICovCisKKy8qID09PT0gY2FfcGNpX2RtYV9hZGRyX2V4dG4gKi8KKyNkZWZpbmUgQ0FfVVBQRVJfTk9ERV9PRkZTRVQJCSgweDNmdWxsIDw8IDApCisjZGVmaW5lIENBX1VQUEVSX05PREVfT0ZGU0VUX1NIRlQJMAorCS8qIGJpdHMgNzo2IHVudXNlZCAqLworI2RlZmluZSBDQV9DSElQTEVUX0lECQkJKDB4M3VsbCA8PCA4KQorI2RlZmluZSBDQV9DSElQTEVUX0lEX1NIRlQJCTgKKwkvKiBiaXRzIDExOjEwIHVudXNlZCAqLworI2RlZmluZSBDQV9QQ0lfRE1BX05PREVfSUQJCSgweGZmZmZ1bGwgPDwgMTIpCisjZGVmaW5lIENBX1BDSV9ETUFfTk9ERV9JRF9TSEZUCQkxMgorCS8qIGJpdHMgMjc6MjYgdW51c2VkICovCisjZGVmaW5lIENBX1BDSV9ETUFfUElPX01FTV9UWVBFCQkoMXVsbCA8PCAyOCkKKwkvKiBiaXRzIDYzOjI5IHVudXNlZCAqLworCisKKy8qID09PT0gY2FfYWdwX2RtYV9hZGRyX2V4dG4gKi8KKwkvKiBiaXRzIDE5OjAgdW51c2VkICovCisjZGVmaW5lIENBX0FHUF9ETUFfTk9ERV9JRAkJKDB4ZmZmZnVsbCA8PCAyMCkKKyNkZWZpbmUgQ0FfQUdQX0RNQV9OT0RFX0lEX1NIRlQJCTIwCisJLyogYml0cyAyNzoyNiB1bnVzZWQgKi8KKyNkZWZpbmUgQ0FfQUdQX0RNQV9QSU9fTUVNX1RZUEUJCSgxdWxsIDw8IDI4KQorCS8qIGJpdHMgNjM6MjkgdW51c2VkICovCisKKy8qID09PT0gY2FfZGVidWdfdmVjdG9yX3NlbCAqLworI2RlZmluZSBDQV9ERUJVR19NTl9WU0VMCQkoMHhmdWxsIDw8IDApCisjZGVmaW5lIENBX0RFQlVHX01OX1ZTRUxfU0hGVAkJMAorI2RlZmluZSBDQV9ERUJVR19QUF9WU0VMCQkoMHhmdWxsIDw8IDQpCisjZGVmaW5lIENBX0RFQlVHX1BQX1ZTRUxfU0hGVAkJNAorI2RlZmluZSBDQV9ERUJVR19HV19WU0VMCQkoMHhmdWxsIDw8IDgpCisjZGVmaW5lIENBX0RFQlVHX0dXX1ZTRUxfU0hGVAkJOAorI2RlZmluZSBDQV9ERUJVR19HVF9WU0VMCQkoMHhmdWxsIDw8IDEyKQorI2RlZmluZSBDQV9ERUJVR19HVF9WU0VMX1NIRlQJCTEyCisjZGVmaW5lIENBX0RFQlVHX1BEX1ZTRUwJCSgweGZ1bGwgPDwgMTYpCisjZGVmaW5lIENBX0RFQlVHX1BEX1ZTRUxfU0hGVAkJMTYKKyNkZWZpbmUgQ0FfREVCVUdfQURfVlNFTAkJKDB4ZnVsbCA8PCAyMCkKKyNkZWZpbmUgQ0FfREVCVUdfQURfVlNFTF9TSEZUCQkyMAorI2RlZmluZSBDQV9ERUJVR19DWF9WU0VMCQkoMHhmdWxsIDw8IDI0KQorI2RlZmluZSBDQV9ERUJVR19DWF9WU0VMX1NIRlQJCTI0CisjZGVmaW5lIENBX0RFQlVHX0NSX1ZTRUwJCSgweGZ1bGwgPDwgMjgpCisjZGVmaW5lIENBX0RFQlVHX0NSX1ZTRUxfU0hGVAkJMjgKKyNkZWZpbmUgQ0FfREVCVUdfQkFfVlNFTAkJKDB4ZnVsbCA8PCAzMikKKyNkZWZpbmUgQ0FfREVCVUdfQkFfVlNFTF9TSEZUCQkzMgorI2RlZmluZSBDQV9ERUJVR19QRV9WU0VMCQkoMHhmdWxsIDw8IDM2KQorI2RlZmluZSBDQV9ERUJVR19QRV9WU0VMX1NIRlQJCTM2CisjZGVmaW5lIENBX0RFQlVHX0JPX1ZTRUwJCSgweGZ1bGwgPDwgNDApCisjZGVmaW5lIENBX0RFQlVHX0JPX1ZTRUxfU0hGVAkJNDAKKyNkZWZpbmUgQ0FfREVCVUdfQklfVlNFTAkJKDB4ZnVsbCA8PCA0NCkKKyNkZWZpbmUgQ0FfREVCVUdfQklfVlNFTF9TSEZUCQk0NAorI2RlZmluZSBDQV9ERUJVR19BU19WU0VMCQkoMHhmdWxsIDw8IDQ4KQorI2RlZmluZSBDQV9ERUJVR19BU19WU0VMX1NIRlQJCTQ4CisjZGVmaW5lIENBX0RFQlVHX1BTX1ZTRUwJCSgweGZ1bGwgPDwgNTIpCisjZGVmaW5lIENBX0RFQlVHX1BTX1ZTRUxfU0hGVAkJNTIKKyNkZWZpbmUgQ0FfREVCVUdfUE1fVlNFTAkJKDB4ZnVsbCA8PCA1NikKKyNkZWZpbmUgQ0FfREVCVUdfUE1fVlNFTF9TSEZUCQk1NgorCS8qIGJpdHMgNjM6NjAgdW51c2VkICovCisKKy8qID09PT0gY2FfZGVidWdfbXV4X2NvcmVfc2VsICovCisvKiA9PT09IGNhX2RlYnVnX211eF9wY2lfc2VsICovCisjZGVmaW5lIENBX0RFQlVHX01TRUwwCQkJKDB4N3VsbCA8PCAwKQorI2RlZmluZSBDQV9ERUJVR19NU0VMMF9TSEZUCQkwCisJLyogYml0IDMgdW51c2VkICovCisjZGVmaW5lIENBX0RFQlVHX05TRUwwCQkJKDB4N3VsbCA8PCA0KQorI2RlZmluZSBDQV9ERUJVR19OU0VMMF9TSEZUCQk0CisJLyogYml0IDcgdW51c2VkICovCisjZGVmaW5lIENBX0RFQlVHX01TRUwxCQkJKDB4N3VsbCA8PCA4KQorI2RlZmluZSBDQV9ERUJVR19NU0VMMV9TSEZUCQk4CisJLyogYml0IDExIHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19OU0VMMQkJCSgweDd1bGwgPDwgMTIpCisjZGVmaW5lIENBX0RFQlVHX05TRUwxX1NIRlQJCTEyCisJLyogYml0IDE1IHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19NU0VMMgkJCSgweDd1bGwgPDwgMTYpCisjZGVmaW5lIENBX0RFQlVHX01TRUwyX1NIRlQJCTE2CisJLyogYml0IDE5IHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19OU0VMMgkJCSgweDd1bGwgPDwgMjApCisjZGVmaW5lIENBX0RFQlVHX05TRUwyX1NIRlQJCTIwCisJLyogYml0IDIzIHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19NU0VMMwkJCSgweDd1bGwgPDwgMjQpCisjZGVmaW5lIENBX0RFQlVHX01TRUwzX1NIRlQJCTI0CisJLyogYml0IDI3IHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19OU0VMMwkJCSgweDd1bGwgPDwgMjgpCisjZGVmaW5lIENBX0RFQlVHX05TRUwzX1NIRlQJCTI4CisJLyogYml0IDMxIHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19NU0VMNAkJCSgweDd1bGwgPDwgMzIpCisjZGVmaW5lIENBX0RFQlVHX01TRUw0X1NIRlQJCTMyCisJLyogYml0IDM1IHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19OU0VMNAkJCSgweDd1bGwgPDwgMzYpCisjZGVmaW5lIENBX0RFQlVHX05TRUw0X1NIRlQJCTM2CisJLyogYml0IDM5IHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19NU0VMNQkJCSgweDd1bGwgPDwgNDApCisjZGVmaW5lIENBX0RFQlVHX01TRUw1X1NIRlQJCTQwCisJLyogYml0IDQzIHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19OU0VMNQkJCSgweDd1bGwgPDwgNDQpCisjZGVmaW5lIENBX0RFQlVHX05TRUw1X1NIRlQJCTQ0CisJLyogYml0IDQ3IHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19NU0VMNgkJCSgweDd1bGwgPDwgNDgpCisjZGVmaW5lIENBX0RFQlVHX01TRUw2X1NIRlQJCTQ4CisJLyogYml0IDUxIHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19OU0VMNgkJCSgweDd1bGwgPDwgNTIpCisjZGVmaW5lIENBX0RFQlVHX05TRUw2X1NIRlQJCTUyCisJLyogYml0IDU1IHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19NU0VMNwkJCSgweDd1bGwgPDwgNTYpCisjZGVmaW5lIENBX0RFQlVHX01TRUw3X1NIRlQJCTU2CisJLyogYml0IDU5IHVudXNlZCAqLworI2RlZmluZSBDQV9ERUJVR19OU0VMNwkJCSgweDd1bGwgPDwgNjApCisjZGVmaW5lIENBX0RFQlVHX05TRUw3X1NIRlQJCTYwCisJLyogYml0IDYzIHVudXNlZCAqLworCisKKy8qID09PT0gY2FfZGVidWdfZG9tYWluX3NlbCAqLworI2RlZmluZSBDQV9ERUJVR19ET01BSU5fTAkJKDF1bGwgPDwgMCkKKyNkZWZpbmUgQ0FfREVCVUdfRE9NQUlOX0gJCSgxdWxsIDw8IDEpCisJLyogYml0cyA2MzoyIHVudXNlZCAqLworCisvKiA9PT09IGNhX2dhcnRfcHRyX3RhYmxlICovCisjZGVmaW5lIENBX0dBUlRfUFRSX1ZBTAkJCSgxdWxsIDw8IDApCisJLyogYml0cyAxMToxIHVudXNlZCAqLworI2RlZmluZSBDQV9HQVJUX1BUUl9BRERSCQkoMHhmZmZmZmZmZmZmZnVsbCA8PCAxMikKKyNkZWZpbmUgQ0FfR0FSVF9QVFJfQUREUl9TSEZUCQkxMgorCS8qIGJpdHMgNjM6NTYgdW51c2VkICovCisKKy8qID09PT0gY2FfZ2FydF90bGJfYWRkclswLTddICovCisjZGVmaW5lIENBX0dBUlRfVExCX0FERFIJCSgweGZmZmZmZmZmZmZmZmZmdWxsIDw8IDApCisjZGVmaW5lIENBX0dBUlRfVExCX0FERFJfU0hGVAkJMAorCS8qIGJpdHMgNjI6NTYgdW51c2VkICovCisjZGVmaW5lIENBX0dBUlRfVExCX0VOVFJZX1ZBTAkJKDF1bGwgPDwgNjMpCisKKy8qCisgKiBQSU8gYWRkcmVzcyBzcGFjZSByYW5nZXMgZm9yIFRJTzpDQQorICovCisKKy8qIENBIGludGVybmFsIHJlZ2lzdGVycyAqLworI2RlZmluZSBDQV9QSU9fQURNSU4JCQkweDAwMDAwMDAwCisjZGVmaW5lIENBX1BJT19BRE1JTl9MRU4JCTB4MDAwMTAwMDAKKworLyogR0ZYIFdyaXRlIEJ1ZmZlciAtIERpYWdub3N0aWNzICovCisjZGVmaW5lIENBX1BJT19HRlgJCQkweDAwMDEwMDAwCisjZGVmaW5lIENBX1BJT19HRlhfTEVOCQkJMHgwMDAxMDAwMAorCisvKiBBR1AgRE1BIFdyaXRlIEJ1ZmZlciAtIERpYWdub3N0aWNzICovCisjZGVmaW5lIENBX1BJT19BR1BfRE1BV1JJVEUJCTB4MDAwMjAwMDAKKyNkZWZpbmUgQ0FfUElPX0FHUF9ETUFXUklURV9MRU4JCTB4MDAwMTAwMDAKKworLyogQUdQIERNQSBSRUFEIEJ1ZmZlciAtIERpYWdub3N0aWNzICovCisjZGVmaW5lIENBX1BJT19BR1BfRE1BUkVBRAkJMHgwMDAzMDAwMAorI2RlZmluZSBDQV9QSU9fQUdQX0RNQVJFQURfTEVOCQkweDAwMDEwMDAwCisKKy8qIFBDSSBDb25maWcgVHlwZSAwICovCisjZGVmaW5lIENBX1BJT19QQ0lfVFlQRTBfQ09ORklHCQkweDAxMDAwMDAwCisjZGVmaW5lIENBX1BJT19QQ0lfVFlQRTBfQ09ORklHX0xFTgkweDAxMDAwMDAwCisKKy8qIFBDSSBDb25maWcgVHlwZSAxICovCisjZGVmaW5lIENBX1BJT19QQ0lfVFlQRTFfQ09ORklHCQkweDAyMDAwMDAwCisjZGVmaW5lIENBX1BJT19QQ0lfVFlQRTFfQ09ORklHX0xFTgkweDAxMDAwMDAwCisKKy8qIFBDSSBJL08gQ3ljbGVzIC0gbWFwcGVkIHRvIFBDSSBBZGRyZXNzIDB4MDAwMDAwMDAtMHgwNGZmZmZmZiAqLworI2RlZmluZSBDQV9QSU9fUENJX0lPCQkJMHgwMzAwMDAwMAorI2RlZmluZSBDQV9QSU9fUENJX0lPX0xFTgkJMHgwNTAwMDAwMAorCisvKiBQQ0kgTUVNIEN5Y2xlcyAtIG1hcHBlZCB0byBQQ0kgd2l0aCBDQV9QSU9fQUREUl9PRkZTRVQgb2YgY2FfY29udHJvbDEgKi8KKy8qCXVzZSBGYXN0IFdyaXRlIGlmIGVuYWJsZWQgYW5kIGNvcmV0YWxrIHBhY2tldCB0eXBlIGlzIGEgR0ZYIHJlcXVlc3QgKi8KKyNkZWZpbmUgQ0FfUElPX1BDSV9NRU1fT0ZGU0VUCQkweDA4MDAwMDAwCisjZGVmaW5lIENBX1BJT19QQ0lfTUVNX09GRlNFVF9MRU4JMHgwODAwMDAwMAorCisvKiBQQ0kgTUVNIEN5Y2xlcyAtIG1hcHBlZCB0byBQQ0kgQWRkcmVzcyAweDAwMDAwMDAwLTB4YmZmZmZmZmYgKi8KKy8qCXVzZSBGYXN0IFdyaXRlIGlmIGVuYWJsZWQgYW5kIGNvcmV0YWxrIHBhY2tldCB0eXBlIGlzIGEgR0ZYIHJlcXVlc3QgKi8KKyNkZWZpbmUgQ0FfUElPX1BDSV9NRU0JCQkweDQwMDAwMDAwCisjZGVmaW5lIENBX1BJT19QQ0lfTUVNX0xFTgkJMHhjMDAwMDAwMAorCisvKgorICogRE1BIHNwYWNlCisgKgorICogVGhlIENBIGFwZXJhdHVyZSAoaWUuIGJ1cyBhZGRyZXNzIHJhbmdlKSBtYXBwZWQgYnkgdGhlIEdBUlQgaXMgc2VnbWVudGVkIGludG8KKyAqIHR3byBwYXJ0cy4gIFRoZSBsb3dlciBwb3J0aW9uIG9mIHRoZSBhcGVyYXR1cmUgaXMgdXNlZCBmb3IgbWFwcGluZyAzMiBiaXQKKyAqIFBDSSBhZGRyZXNzZXMgd2hpY2ggYXJlIG1hbmFnZWQgYnkgdGhlIGRtYSBpbnRlcmZhY2VzIGluIHRoaXMgZmlsZS4gIFRoZQorICogdXBwZXIgcG9wcnRpb24gb2YgdGhlIGFwZXJhdHVyZSBpcyB1c2VkIGZvciBtYXBwaW5nIDQ4IGJpdCBBR1AgYWRkcmVzc2VzLgorICogVGhlIEFHUCBwb3J0aW9uIG9mIHRoZSBhcGVyYXR1cmUgaXMgbWFuYWdlZCBieSB0aGUgYWdwZ2FydF9iZS5jIGRyaXZlcgorICogaW4gZHJpdmVycy9saW51eC9hZ3AuICBUaGVyZSBhcmUgY2Etc3BlY2lmaWMgaG9va3MgaW4gdGhhdCBkcml2ZXIgdG8KKyAqIG1hbmlwdWxhdGUgdGhlIGdhcnQsIGJ1dCBtYW5hZ2VtZW50IG9mIHRoZSBBR1AgcG9ydGlvbiBvZiB0aGUgYXBlcmF0dXJlCisgKiBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhhdCBkcml2ZXIuCisgKgorICogQ0EgYWxsb3dzIHRocmVlIG1haW4gdHlwZXMgb2YgRE1BIG1hcHBpbmc6CisgKgorICogUENJIDY0LWJpdAlNYW5hZ2VkIGJ5IHRoaXMgZHJpdmVyCisgKiBQQ0kgMzItYml0IAlNYW5hZ2VkIGJ5IHRoaXMgZHJpdmVyCisgKiBBR1AgNDgtYml0CU1hbmFnZWQgYnkgaG9va3MgaW4gdGhlIC9kZXYvYWdwZ2FydCBkcml2ZXIKKyAqCisgKiBBbGwgb2YgdGhlIGFib3ZlIGNhbiBvcHRpb25hbGx5IGJlIHJlbWFwcGVkIHRocm91Z2ggdGhlIEdBUlQuICBUaGUgZm9sbG93aW5nCisgKiB0YWJsZSBsaXN0cyB0aGUgY29tYmluYXRpb25zIG9mIGFkZHJlc3NpbmcgdHlwZXMgYW5kIEdBUlQgcmVtYXBwaW5nIHRoYXQKKyAqIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAoaC93IHN1cHBvcnRzIGFsbCwgcy93IGxpbWl0cyB0aGlzKToKKyAqCisgKgkJUENJNjQJCVBDSTMyCQlBR1A0OAorICogR0FSVAkJbm8JCXllcwkJeWVzCisgKiBEaXJlY3QJeWVzCQl5ZXMJCW5vCisgKgorICogR0FSVCByZW1hcHBpbmcgb2YgUENJNjQgaXMgbm90IGRvbmUgYmVjYXVzZSB0aGVyZSBpcyBubyBuZWVkIHRvLiAgVGhlCisgKiA2NCBiaXQgUENJIGFkZHJlc3MgaG9sZHMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gdGFyZ2V0IGFueQorICogbWVtb3J5IGluIHRoZSBzeXN0ZW0uCisgKgorICogQUdQNDggaXMgYWx3YXlzIG1hcHBlZCB0aHJvdWdoIHRoZSBHQVJULiAgTWFuYWdlbWVudCBvZiB0aGUgQUdQNDggcG9ydGlvbgorICogb2YgdGhlIGFwZXJhdHVyZSBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgY29kZSBpbiB0aGUgYWdwZ2FydF9iZSBkcml2ZXIuCisgKgorICogVGhlIG5vbi02NCBiaXQgYnVzIGFkZHJlc3Mgc3BhY2Ugd2lsbCBjdXJyZW50bHkgYmUgcGFydGl0aW9uZWQgbGlrZSB0aGlzOgorICoKKyAqCTB4ZmZmZl9mZmZmX2ZmZmYJKy0tLS0tLS0tCisgKgkJCQl8IEFHUDQ4IGRpcmVjdAorICoJCQkJfCBTcGFjZSBtYW5hZ2VkIGJ5IHRoaXMgZHJpdmVyCisgKglDQV9BR1BfRElSRUNUX0JBU0UJKy0tLS0tLS0tCisgKgkJCQl8IEFHUCBHQVJUIG1hcHBlZCAoZ2Z4IGFwZXJhdHVyZSkKKyAqCQkJCXwgU3BhY2UgbWFuYWdlZCBieSAvZGV2L2FncGdhcnQgZHJpdmVyCisgKgkJCQl8IFRoaXMgcmFuZ2UgaXMgZXhwb3NlZCB0byB0aGUgYWdwZ2FydAorICogCQkJCXwgZHJpdmVyIGFzIHRoZSAiZ3JhcGhpY3MgYXBlcmF0dXJlIgorICoJQ0FfQUdQX01BUFBFRF9CQVNFCSstLS0tLQorICoJCQkJfCBQQ0kgR0FSVCBtYXBwZWQKKyAqCQkJCXwgU3BhY2UgbWFuYWdlZCBieSB0aGlzIGRyaXZlcgkJCisgKglDQV9QQ0kzMl9NQVBQRURfQkFTRQkrLS0tLQorICoJCQkJfCBQQ0kzMiBkaXJlY3QKKyAqCQkJCXwgU3BhY2UgbWFuYWdlZCBieSB0aGlzIGRyaXZlcgorICoJMHhDMDAwXzAwMDAJCSstLS0tLS0tLQorICoJKENBX1BDSTMyX0RJUkVDVF9CQVNFKQorICoKKyAqIFRoZSBidXMgYWRkcmVzcyByYW5nZSBDQV9QQ0kzMl9NQVBQRURfQkFTRSB0aHJvdWdoIENBX0FHUF9ESVJFQ1RfQkFTRQorICogaXMgd2hhdCB3ZSBjYWxsIHRoZSBDQSBhcGVyYXR1cmUuICBBZGRyZXNzZXMgZmFsbGluZyBpbiB0aGlzIHJhbmdlIHdpbGwKKyAqIGJlIHJlbWFwcGVkIHVzaW5nIHRoZSBHQVJULgorICoKKyAqIFRoZSBidXMgYWRkcmVzcyByYW5nZSBDQV9BR1BfTUFQUEVEX0JBU0UgdGhyb3VnaCBDQV9BR1BfRElSRUNUX0JBU0UKKyAqIGlzIHdoYXQgd2UgY2FsbCB0aGUgZ3JhcGhpY3MgYXBlcmF0dXJlLiAgVGhpcyBpcyBhIHN1YnNldCBvZiB0aGUgQ0EKKyAqIGFwZXJhdHVyZSBhbmQgaXMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIGFncGdhcnRfYmUgZHJpdmVyLgorICoKKyAqIENBX1BDSTMyX01BUFBFRF9CQVNFLCBDQV9BR1BfTUFQUEVEX0JBU0UsIGFuZCBDQV9BR1BfRElSRUNUX0JBU0UgYXJlCisgKiBzb21ld2hhdCBhcmJpdHJhcnkgdmFsdWVzLiAgVGhlIGtub3duIGNvbnN0cmFpbnRzIG9uIGNob29zaW5nIHRoZXNlIGlzOgorICoKKyAqIDEpICBDQV9BR1BfRElSRUNUX0JBU0UtQ0FfUENJMzJfTUFQUEVEX0JBU0UrMSAodGhlIENBIGFwZXJhdHVyZSBzaXplKQorICogICAgIG11c3QgYmUgb25lIG9mIHRoZSB2YWx1ZXMgc3VwcG9ydGVkIGJ5IHRoZSBjYV9nYXJ0X2FwZXJhdHVyZSByZWdpc3Rlci4KKyAqICAgICBDdXJyZW50bHkgdmFsaWQgdmFsdWVzIGFyZTogNE1CIHRocm91Z2ggNDA5Nk1CIGluIHBvd2VycyBvZiAyIGluY3JlbWVudHMKKyAqCisgKiAyKSAgQ0FfQUdQX0RJUkVDVF9CQVNFLUNBX0FHUF9NQVBQRURfQkFTRSsxICh0aGUgZ2Z4IGFwZXJhdHVyZSBzaXplKQorICogICAgIG11c3QgYmUgaW4gTUIgdW5pdHMgc2luY2UgdGhhdCdzIHdoYXQgdGhlIGFncGdhcnQgZHJpdmVyIGFzc3VtZXMuCisgKi8KKworLyoKKyAqIERlZmluZSBCdXMgRE1BIHJhbmdlcy4gIFRoZXNlIGFyZSBjb25maWd1cmFibGUgKHNlZSBjb25zdHJhaW50cyBhYm92ZSkKKyAqIGFuZCB3aWxsIHByb2JhYmx5IG5lZWQgdHVuaW5nIGJhc2VkIG9uIGV4cGVyaWVuY2UuCisgKi8KKworCisvKgorICogMTEvMjQvMDMKKyAqIENBIGhhcyBhbiBhZGRyZXNzaW5nIGdsaXRjaCB3LnIudC4gUENJIGRpcmVjdCAzMiBiaXQgRE1BIHRoYXQgbWFrZXMgaXQKKyAqIGdlbmVyYWxseSB1bnVzYWJsZS4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgZm9yIFBDSSBkaXJlY3QgMzIgCisgKiBETUEncywgYWxsIDMyIGJpdHMgb2YgdGhlIGJ1cyBhZGRyZXNzIGFyZSB1c2VkIHRvIGZvcm0gdGhlIGxvd2VyIDMyIGJpdHMKKyAqIG9mIHRoZSBjb3JldGFsayBhZGRyZXNzLCBhbmQgY29yZXRhbGsgYml0cyAzODozMiBjb21lIGZyb20gYSByZWdpc3Rlci4KKyAqIFNpbmNlIG9ubHkgUENJIGJ1cyBhZGRyZXNzZXMgMHhDMDAwMDAwMC0weEZGRkZGRkZGICgxR0IpIGFyZSBhdmFpbGFibGUKKyAqIGZvciBETUEgKHRoZSByZXN0IGlzIGFsbG9jYXRlZCB0byBQSU8pLCBob3N0IG5vZGUgYWRkcmVzc2VzIG5lZWQgdG8gYmUKKyAqIHN1Y2ggdGhhdCB0aGVpciBsb3dlciAzMiBiaXRzIGZhbGwgaW4gdGhlIDB4QzAwMDAwMDAtMHhmZmZmZmZmZiByYW5nZQorICogYXMgd2VsbC4gIFNvIHRoZXJlIGNhbiBiZSBubyBQQ0kzMiBkaXJlY3QgRE1BIGJlbG93IDNHQiEhICBGb3IgdGhpcworICogcmVhc29uIHdlIHNldCB0aGUgQ0FfUENJMzJfRElSRUNUX1NJWkUgdG8gMCB3aGljaCBlc3NlbnRpYWxseSBtYWtlcworICogdGlvY2FfZG1hX2RpcmVjdDMyKCkgYSBub29wIGJ1dCBwcmVzZXJ2ZXMgdGhlIGNvZGUgZmxvdyBzaG91bGQgdGhpcyBpc3N1ZQorICogYmUgZml4ZWQgaW4gYSByZXNwaW4uCisgKgorICogRm9yIG5vdywgYWxsIFBDSTMyIERNQSdzIG11c3QgYmUgbWFwcGVkIHRocm91Z2ggdGhlIEdBUlQuCisgKi8KKworI2RlZmluZSBDQV9QQ0kzMl9ESVJFQ1RfQkFTRQkweEMwMDAwMDAwVUwJLyogQkFTRSBub3QgY29uZmlndXJhYmxlICovCisjZGVmaW5lIENBX1BDSTMyX0RJUkVDVF9TSVpFCTB4MDAwMDAwMDBVTAkvKiAwIE1CICovCisKKyNkZWZpbmUgQ0FfUENJMzJfTUFQUEVEX0JBU0UJMHhDMDAwMDAwMFVMCisjZGVmaW5lIENBX1BDSTMyX01BUFBFRF9TSVpFCTB4NDAwMDAwMDBVTAkvKiAyR0IgKi8KKworI2RlZmluZSBDQV9BR1BfTUFQUEVEX0JBU0UJMHg4MDAwMDAwMFVMCisjZGVmaW5lIENBX0FHUF9NQVBQRURfU0laRQkweDQwMDAwMDAwVUwJLyogMkdCICovCisKKyNkZWZpbmUgQ0FfQUdQX0RJUkVDVF9CQVNFCTB4NDAwMDAwMDBVTAkvKiAyR0IgKi8KKyNkZWZpbmUgQ0FfQUdQX0RJUkVDVF9TSVpFCTB4NDAwMDAwMDBVTAorCisjZGVmaW5lIENBX0FQRVJBVFVSRV9CQVNFCShDQV9BR1BfTUFQUEVEX0JBU0UpCisjZGVmaW5lIENBX0FQRVJBVFVSRV9TSVpFCShDQV9BR1BfTUFQUEVEX1NJWkUrQ0FfUENJMzJfTUFQUEVEX1NJWkUpCisKKyNlbmRpZiAgLyogX0FTTV9JQTY0X1NOX1RJT19USU9DQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NhX3Byb3ZpZGVyLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NhX3Byb3ZpZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhY2MyMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2FfcHJvdmlkZXIuaApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9BU01fSUE2NF9TTl9USU9fQ0FfQUdQX1BST1ZJREVSX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1NOX1RJT19DQV9BR1BfUFJPVklERVJfSAorCisjaW5jbHVkZSA8YXNtL3NuL3Rpb2NhLmg+CisKKy8qCisgKiBXQVIgZW5hYmxlcworICogRGVmaW5lcyBmb3IgaW5kaXZpZHVhbCBXQVJzLiBFYWNoIGlzIGEgYml0bWFzayBvZiBhcHBsaWNhYmxlCisgKiBwYXJ0IHJldmlzaW9uIG51bWJlcnMuICgxIDw8IDEpID09IHJldiBBLCAoMSA8PCAyKSA9PSByZXYgQiwKKyAqICgzIDw8IDEpID09IChyZXYgQSBvciByZXYgQiksIGV0YworICovCisKKyNkZWZpbmUgVElPQ0FfV0FSX0VOQUJMRUQocHYsIHRpb2NhX2NvbW1vbikgXAorCSgoMSA8PCB0aW9jYV9jb21tb24tPmNhX3JldikgJiBwdikKKworICAvKiBUSU86SUNFOkZSWjpGcmVlemVyIGxvc2VzIGEgUElPIGRhdGEgdWNyZWQgb24gUElPIFJEIFJTUCB3aXRoIENXIGVycm9yICovCisjZGVmaW5lIFBWOTA3OTA4ICgxIDw8IDEpCisgIC8qIEFUSSBjb25maWcgc3BhY2UgcHJvYmxlbXMgYWZ0ZXIgQklPUyBleGVjdXRpb24gc3RhcnRzICovCisjZGVmaW5lIFBWOTA4MjM0ICgxIDw8IDEpCisgIC8qIENBOkFHUERNQSB3cml0ZSByZXF1ZXN0IGRhdGEgbWlzbWF0Y2ggd2l0aCBBQkMxQ0wgbWVyZ2UgKi8KKyNkZWZpbmUgUFY4OTU0NjkgKDEgPDwgMSkKKyAgLyogVElPOkNBIFRMQiBpbnZhbGlkYXRlIG9mIHdyaXR0ZW4gR0FSVCBlbnRyaWVzIHBvc3NpYmx5IG5vdCBvY2N1cmluZyBpbiBDQSovCisjZGVmaW5lIFBWOTEwMjQ0ICgxIDw8IDEpCisKK3N0cnVjdCB0aW9jYV9kbWFtYXB7CisJc3RydWN0IGxpc3RfaGVhZAljYWRfbGlzdDsJLyogaGVhZGVkIGJ5IGNhX2xpc3QgKi8KKworCWRtYV9hZGRyX3QJCWNhZF9kbWFfYWRkcjsJLyogTGludXggZG1hIGhhbmRsZSAqLworCXVpbnQJCQljYWRfZ2FydF9lbnRyeTsgLyogc3RhcnQgZW50cnkgaW4gY2FfZ2FydF9wYWdlbWFwICovCisJdWludAkJCWNhZF9nYXJ0X3NpemU7CS8qICNlbnRyaWVzIGZvciB0aGlzIG1hcCAqLworfTsKKworLyoKKyAqIEtlcm5lbCBvbmx5IGZpZWxkcy4gIFByb20gbWF5IGxvb2sgYXQgdGhpcyBzdHVmZiBmb3IgZGVidWdnaW5nIG9ubHkuCisgKiBBY2Nlc3MgdGhpcyBzdHJ1Y3R1cmUgdGhyb3VnaCB0aGUgY2Ffa2VybmVsX3ByaXZhdGUgcHRyLgorICovCisKK3N0cnVjdCB0aW9jYV9jb21tb24gOworCitzdHJ1Y3QgdGlvY2Ffa2VybmVsIHsKKwlzdHJ1Y3QgdGlvY2FfY29tbW9uCSpjYV9jb21tb247CS8qIHRpb2NhIHRoaXMgYmVsb25ncyB0byAqLworCXN0cnVjdCBsaXN0X2hlYWQJY2FfbGlzdDsJLyogbGlzdCBvZiBhbGwgY2EncyAqLworCXN0cnVjdCBsaXN0X2hlYWQJY2FfZG1hbWFwczsKKwlzcGlubG9ja190CQljYV9sb2NrOwkvKiBLZXJuZWwgbG9jayAqLworCWNub2RlaWRfdAkJY2FfY2xvc2VzdF9ub2RlOworCXN0cnVjdCBsaXN0X2hlYWQJKmNhX2RldmljZXM7CS8qIGJ1cy0+ZGV2aWNlcyAqLworCisJLyoKKwkgKiBHZW5lcmFsIEdBUlQgc3R1ZmYKKwkgKi8KKwl1aW50NjRfdAljYV9hcF9zaXplOwkJLyogc2l6ZSBvZiBhcGVyYXR1cmUgaW4gYnl0ZXMgKi8KKwl1aW50MzJfdAljYV9nYXJ0X2VudHJpZXM7CS8qICMgdWludDY0X3QgZW50cmllcyBpbiBnYXJ0ICovCisJdWludDMyX3QJY2FfYXBfcGFnZXNpemU7IAkvKiBhcGVyYXR1cmUgcGFnZSBzaXplIGluIGJ5dGVzICovCisJdWludDY0X3QJY2FfYXBfYnVzX2Jhc2U7IAkvKiBidXMgYWRkcmVzcyBvZiBDQSBhcGVyYXR1cmUgKi8KKwl1aW50NjRfdAljYV9nYXJ0X3NpemU7CQkvKiBnYXJ0IHNpemUgaW4gYnl0ZXMgKi8KKwl1aW50NjRfdAkqY2FfZ2FydDsJCS8qIGdhcnQgdGFibGUgdmFkZHIgKi8KKwl1aW50NjRfdAljYV9nYXJ0X2NvcmV0YWxrX2FkZHI7CS8qIGdhcnQgY29yZXRhbGsgYWRkciAqLworCXVpbnQ4X3QJCWNhX2dhcnRfaXNjb2hlcmVudDsJLyogdXNlZCBpbiB0aW9jYV90bGJmbHVzaCAqLworCisJLyogUENJIEdBUlQgY29udmVuaWVuY2UgdmFsdWVzICovCisJdWludDY0X3QJY2FfcGNpYXBfYmFzZTsJCS8qIHBjaSBhcGVyYXR1cmUgYnVzIGJhc2UgYWRkcmVzcyAqLworCXVpbnQ2NF90CWNhX3BjaWFwX3NpemU7CQkvKiBwY2kgYXBlcmF0dXJlIHNpemUgKGJ5dGVzKSAqLworCXVpbnQ2NF90CWNhX3BjaWdhcnRfYmFzZTsJLyogZ2Z4IEdBUlQgYnVzIGJhc2UgYWRkcmVzcyAqLworCXVpbnQ2NF90CSpjYV9wY2lnYXJ0OwkJLyogZ2Z4IEdBUlQgdm0gYWRkcmVzcyAqLworCXVpbnQzMl90CWNhX3BjaWdhcnRfZW50cmllczsKKwl1aW50MzJfdAljYV9wY2lnYXJ0X3N0YXJ0OwkvKiBQQ0kgc3RhcnQgaW5kZXggaW4gY2FfZ2FydCAqLworCXZvaWQJCSpjYV9wY2lnYXJ0X3BhZ2VtYXA7CisKKwkvKiBBR1AgR0FSVCBjb252ZW5pZW5jZSB2YWx1ZXMgKi8KKwl1aW50NjRfdAljYV9nZnhhcF9iYXNlOwkJLyogZ2Z4IGFwZXJhdHVyZSBidXMgYmFzZSBhZGRyZXNzICovCisJdWludDY0X3QJY2FfZ2Z4YXBfc2l6ZTsJCS8qIGdmeCBhcGVyYXR1cmUgc2l6ZSAoYnl0ZXMpICovCisJdWludDY0X3QJY2FfZ2Z4Z2FydF9iYXNlOwkvKiBnZnggR0FSVCBidXMgYmFzZSBhZGRyZXNzICovCisJdWludDY0X3QJKmNhX2dmeGdhcnQ7CQkvKiBnZnggR0FSVCB2bSBhZGRyZXNzICovCisJdWludDMyX3QJY2FfZ2Z4Z2FydF9lbnRyaWVzOworCXVpbnQzMl90CWNhX2dmeGdhcnRfc3RhcnQ7CS8qIGFncGdhcnQgc3RhcnQgaW5kZXggaW4gY2FfZ2FydCAqLworfTsKKworLyoKKyAqIENvbW1vbiB0aW9jYSBpbmZvIHNoYXJlZCBiZXR3ZWVuIGtlcm5lbCBhbmQgcHJvbQorICoKKyAqIERPIE5PVCBDSEFOR0UgVEhJUyBTVFJVQ1QgV0lUSE9VVCBNQUtJTkcgQ09SUkVTUE9ORElORyBDSEFOR0VTCisgKiBUTyBUSEUgUFJPTSBWRVJTSU9OLgorICovCisKK3N0cnVjdCB0aW9jYV9jb21tb24geworCXN0cnVjdCBwY2lidXNfYnVzc29mdAljYV9jb21tb247CS8qIGNvbW1vbiBwY2lpbyBoZWFkZXIgKi8KKworCXVpbnQzMl90CQljYV9yZXY7CisJdWludDMyX3QJCWNhX2Nsb3Nlc3RfbmFzaWQ7CisKKwl1aW50NjRfdAkJY2FfcHJvbV9wcml2YXRlOworCXVpbnQ2NF90CQljYV9rZXJuZWxfcHJpdmF0ZTsKK307CisKKy8qKgorICogdGlvY2FfcGFkZHJfdG9fZ2FydCAtIENvbnZlcnQgYW4gU0dJIGNvcmV0YWxrIGFkZHJlc3MgdG8gYSBDQSBHQVJUIGVudHJ5CisgKiBAcGFkZHI6IHBhZ2UgYWRkcmVzcyB0byBjb252ZXJ0CisgKgorICogQ29udmVydCBhIHN5c3RlbSBbY29yZXRhbGtdIGFkZHJlc3MgdG8gYSBHQVJUIGVudHJ5LiAgR0FSVCBlbnRyaWVzIGFyZQorICogZm9ybWVkIHVzaW5nIHRoZSBmb2xsb3dpbmc6CisgKgorICogICAgIGRhdGEgPSAoICgxPDw2MykgfCAgKCAoUkVNQVBfTk9ERV9JRCA8PCA0MCkgfCAoTURfQ0hJUExFVF9JRCA8PCAzOCkgfCAKKyAqIChSRU1BUF9TWVNfQUREUikgKSA+PiAxMiApCisgKgorICogREFUQSB3cml0dGVuIHRvIDEgR0FSVCBUQUJMRSBFbnRyeSBpbiBzeXN0ZW0gbWVtb3J5IGlzIHJlbWFwcGVkIHN5c3RlbQorICogYWRkciBmb3IgMSBwYWdlIAorICoKKyAqIFRoZSBkYXRhIGlzIGZvciBjb3JldGFsayBhZGRyZXNzIGZvcm1hdCByaWdodCBzaGlmdGVkIDEyIGJpdHMgd2l0aCBhCisgKiB2YWxpZCBiaXQuCisgKgorICoJR0FSVF9UQUJMRV9FTlRSWSBbIDI1OjAgXSAgLS0gUkVNQVBfU1lTX0FERFJFU1NbMzc6MTJdLgorICoJR0FSVF9UQUJMRV9FTlRSWSBbIDI3OjI2IF0gLS0gU0hVQiBNRCBjaGlwbGV0IGlkLgorICoJR0FSVF9UQUJMRV9FTlRSWSBbIDQxOjI4IF0gLS0gUkVNQVBfTk9ERV9JRC4KKyAqCUdBUlRfVEFCTEVfRU5UUlkgWyA2MyBdICAgIC0tIFZhbGlkIEJpdCAKKyAqLworc3RhdGljIGlubGluZSB1NjQKK3Rpb2NhX3BhZGRyX3RvX2dhcnQodW5zaWduZWQgbG9uZyBwYWRkcikKK3sKKwkvKgorCSAqIFdlIGFyZSBhc3N1bWluZyByaWdodCBub3cgdGhhdCBwYWRkciBhbHJlYWR5IGhhcyB0aGUgY29ycmVjdAorCSAqIGZvcm1hdCBzaW5jZSB0aGUgYWRkcmVzcyBmcm9tIHh0YWxrX2RtYVhYWCBzaG91bGQgYWxyZWFkeSBoYXZlCisJICogTk9ERV9JRCwgQ0hJUExFVF9JRCwgYW5kIFNZU19BRERSIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9ucy4KKwkgKi8KKworCXJldHVybiAoKHBhZGRyKSA+PiAxMikgfCAoMVVMIDw8IDYzKTsKK30KKworLyoqCisgKiB0aW9jYV9waHlzcGFnZV90b19nYXJ0IC0gTWFwIGEgaG9zdCBwaHlzaWNhbCBwYWdlIGZvciBTR0kgQ0EgYmFzZWQgRE1BCisgKiBAcGFnZV9hZGRyOiBzeXN0ZW0gcGFnZSBhZGRyZXNzIHRvIG1hcAorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwordGlvY2FfcGh5c3BhZ2VfdG9fZ2FydCh1aW50NjRfdCBwYWdlX2FkZHIpCit7CisJdWludDY0X3QgY29yZXRhbGtfYWRkcjsKKworCWNvcmV0YWxrX2FkZHIgPSBQSFlTX1RPX1RJT0RNQShwYWdlX2FkZHIpOworCWlmICghY29yZXRhbGtfYWRkcikgeworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gdGlvY2FfcGFkZHJfdG9fZ2FydChjb3JldGFsa19hZGRyKTsKK30KKworLyoqCisgKiB0aW9jYV90bGJmbHVzaCAtIGludmFsaWRhdGUgY2FjaGVkIFNHSSBDQSBHQVJUIFRMQiBlbnRyaWVzCisgKiBAdGlvY2Ffa2VybmVsOiBDQSBjb250ZXh0IAorICoKKyAqIEludmFsaWRhdGUgdGxiIGVudHJpZXMgZm9yIGEgZ2l2ZW4gQ0EgR0FSVC4gIE1haW4gY29tcGxleGl0eSBpcyB0byBhY2NvdW50CisgKiBmb3IgcmV2QSBidWcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGlvY2FfdGxiZmx1c2goc3RydWN0IHRpb2NhX2tlcm5lbCAqdGlvY2Ffa2VybmVsKQoreworCXZvbGF0aWxlIHVpbnQ2NF90IHRtcDsKKwl2b2xhdGlsZSBzdHJ1Y3QgdGlvY2EgKmNhX2Jhc2U7CisJc3RydWN0IHRpb2NhX2NvbW1vbiAqdGlvY2FfY29tbW9uOworCisJdGlvY2FfY29tbW9uID0gdGlvY2Ffa2VybmVsLT5jYV9jb21tb247CisJY2FfYmFzZSA9IChzdHJ1Y3QgdGlvY2EgKil0aW9jYV9jb21tb24tPmNhX2NvbW1vbi5ic19iYXNlOworCisJLyoKKwkgKiBFeHBsaWNpdCBmbHVzaGVzIG5vdCBuZWVkZWQgaWYgR0FSVCBpcyBpbiBjYWNoZWQgbW9kZQorCSAqLworCWlmICh0aW9jYV9rZXJuZWwtPmNhX2dhcnRfaXNjb2hlcmVudCkgeworCQlpZiAoVElPQ0FfV0FSX0VOQUJMRUQoUFY5MTAyNDQsIHRpb2NhX2NvbW1vbikpIHsKKwkJCS8qCisJCQkgKiBQVjkxMDI0NDogIFJldkEgQ0EgbmVlZHMgZXhwbGljaXQgZmx1c2hlcy4KKwkJCSAqIE5lZWQgdG8gcHV0IEdBUlQgaW50byB1bmNhY2hlZCBtb2RlIGJlZm9yZQorCQkJICogZmx1c2hpbmcgb3RoZXJ3aXNlIHRoZSBleHBsaWNpdCBmbHVzaCBpcyBpZ25vcmVkLgorCQkJICoKKwkJCSAqIEFsdGVybmF0ZSBXQVIgd291bGQgYmUgdG8gbGVhdmUgR0FSVCBjYWNoZWQgYW5kCisJCQkgKiB0b3VjaCBldmVyeSBDTCBhbGlnbmVkIEdBUlQgZW50cnkuCisJCQkgKi8KKworCQkJY2FfYmFzZS0+Y2FfY29udHJvbDIgJj0gfihDQV9HQVJUX01FTV9QQVJBTSk7CisJCQljYV9iYXNlLT5jYV9jb250cm9sMiB8PSBDQV9HQVJUX0ZMVVNIX1RMQjsKKwkJCWNhX2Jhc2UtPmNhX2NvbnRyb2wyIHw9CisJCQkgICAgKDB4MnVsbCA8PCBDQV9HQVJUX01FTV9QQVJBTV9TSEZUKTsKKwkJCXRtcCA9IGNhX2Jhc2UtPmNhX2NvbnRyb2wyOworCQl9CisKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogR2FydCBpbiB1bmNhY2hlZCBtb2RlIC4uLiBuZWVkIGFuIGV4cGxpY2l0IGZsdXNoLgorCSAqLworCisJY2FfYmFzZS0+Y2FfY29udHJvbDIgfD0gQ0FfR0FSVF9GTFVTSF9UTEI7CisJdG1wID0gY2FfYmFzZS0+Y2FfY29udHJvbDI7Cit9CisKK2V4dGVybiB1aW50MzJfdAl0aW9jYV9nYXJ0X2ZvdW5kOworZXh0ZXJuIGludCB0aW9jYV9pbml0X3Byb3ZpZGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgdGlvY2FfZmFzdHdyaXRlX2VuYWJsZShzdHJ1Y3QgdGlvY2Ffa2VybmVsICp0aW9jYV9rZXJuKTsKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU05fVElPX0NBX0FHUF9QUk9WSURFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2N4LmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2N4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0NDdhNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY3guaApAQCAtMCwwICsxLDcxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9BU01fSUE2NF9TTl9USU9fVElPQ1hfSAorI2RlZmluZSBfQVNNX0lBNjRfU05fVElPX1RJT0NYX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IGN4X2lkX3MgeworCXVuc2lnbmVkIGludCBwYXJ0X251bTsKKwl1bnNpZ25lZCBpbnQgbWZnX251bTsKKwlpbnQgbmFzaWQ7Cit9OworCitzdHJ1Y3QgY3hfZGV2IHsKKwlzdHJ1Y3QgY3hfaWRfcyBjeF9pZDsKKwl2b2lkICpzb2Z0OwkJCS8qIGRyaXZlciBzcGVjaWZpYyAqLworCXN0cnVjdCBodWJkZXZfaW5mbyAqaHViZGV2OworCXN0cnVjdCBkZXZpY2UgZGV2OworCXN0cnVjdCBjeF9kcnYgKmRyaXZlcjsKK307CisKK3N0cnVjdCBjeF9kZXZpY2VfaWQgeworCXVuc2lnbmVkIGludCBwYXJ0X251bTsKKwl1bnNpZ25lZCBpbnQgbWZnX251bTsKK307CisKK3N0cnVjdCBjeF9kcnYgeworCWNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IGN4X2RldmljZV9pZCAqaWRfdGFibGU7CisJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworCWludCAoKnByb2JlKSAoc3RydWN0IGN4X2RldiAqIGRldiwgY29uc3Qgc3RydWN0IGN4X2RldmljZV9pZCAqIGlkKTsKKwlpbnQgKCpyZW1vdmUpIChzdHJ1Y3QgY3hfZGV2ICogZGV2KTsKK307CisKKy8qIGNyZWF0ZSBETUEgYWRkcmVzcyBieSBzdHJpcHBpbmcgQVMgYml0cyAqLworI2RlZmluZSBUSU9DWF9ETUFfQUREUihhKSAodWludDY0X3QpKCh1aW50NjRfdCkoYSkgJiAweGZmZmZjZmZmZmZmZmZmVUwpCisKKyNkZWZpbmUgVElPQ1hfVE9fVElPQ1hfRE1BX0FERFIoYSkgKHVpbnQ2NF90KSgoKHVpbnQ2NF90KShhKSAmIDB4ZmZmZmZmZmZmKSB8ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHVpbnQ2NF90KShhKSkgJiAweGZmZmZjMDAwMDAwMDAwVUwpIDw8MikpCisKKyNkZWZpbmUgVElPX0NFX0FTSUNfUEFSVE5VTSAweGNlMDAKKyNkZWZpbmUgVElPQ1hfQ09SRUxFVCAzCisKKy8qIFRoZXNlIGFyZSB0YWtlbiBmcm9tIHRpb19tbXJfYXMuaCAqLworI2RlZmluZSBUSU9fSUNFX0ZSWl9DRkcgICAgICAgICAgICAgICBUSU9fTU1SX0FERFJfTU9EKDB4MDAwMDAwMDBiMDAwODEwMFVMKQorI2RlZmluZSBUSU9fSUNFX1BNSV9UWF9DRkcgICAgICAgICAgICBUSU9fTU1SX0FERFJfTU9EKDB4MDAwMDAwMDBiMDAwYjEwMFVMKQorI2RlZmluZSBUSU9fSUNFX1BNSV9UWF9EWU5fQ1JFRElUX1NUQVRfQ0IzIFRJT19NTVJfQUREUl9NT0QoMHgwMDAwMDAwMGIwMDBiZTE4VUwpCisjZGVmaW5lIFRJT19JQ0VfUE1JX1RYX0RZTl9DUkVESVRfU1RBVF9DQjNfQ1JFRElUX0NOVF9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwZlVMCisKKyNkZWZpbmUgdG9fY3hfZGV2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgY3hfZGV2LCBkZXYpCisjZGVmaW5lIHRvX2N4X2RyaXZlcihkcnYpIGNvbnRhaW5lcl9vZihkcnYsIHN0cnVjdCBjeF9kcnYsIGRyaXZlcikKKworZXh0ZXJuIHN0cnVjdCBzbl9pcnFfaW5mbyAqdGlvY3hfaXJxX2FsbG9jKG5hc2lkX3QsIGludCwgaW50LCBuYXNpZF90LCBpbnQpOworZXh0ZXJuIHZvaWQgdGlvY3hfaXJxX2ZyZWUoc3RydWN0IHNuX2lycV9pbmZvICopOworZXh0ZXJuIGludCBjeF9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgY3hfZGV2ICopOworZXh0ZXJuIGludCBjeF9kZXZpY2VfcmVnaXN0ZXIobmFzaWRfdCwgaW50LCBpbnQsIHN0cnVjdCBodWJkZXZfaW5mbyAqKTsKK2V4dGVybiBpbnQgY3hfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGN4X2RydiAqKTsKK2V4dGVybiBpbnQgY3hfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBjeF9kcnYgKik7CitleHRlcm4gdWludDY0X3QgdGlvY3hfZG1hX2FkZHIodWludDY0X3QgYWRkcik7CitleHRlcm4gdWludDY0X3QgdGlvY3hfc3dpbl9iYXNlKGludCBuYXNpZCk7CitleHRlcm4gdm9pZCB0aW9jeF9tbXJfc3RvcmUoaW50IG5hc2lkLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHZhbHVlKTsKK2V4dGVybiB1aW50NjRfdCB0aW9jeF9tbXJfbG9hZChpbnQgbmFzaWQsIHVpbnQ2NF90IG9mZnNldCk7CisKKyNlbmRpZgkJCQkvLyAgX19LRVJORUxfXworI2VuZGlmCQkJCS8vIF9BU01fSUE2NF9TTl9USU9fVElPQ1hfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi90eXBlcy5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi90eXBlcy5oCmluZGV4IDU4NmVkNDcuLjhlMDRlZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3R5cGVzLmgKQEAgLTE2LDcgKzE2LDggQEAKIHR5cGVkZWYgc2lnbmVkIGNoYXIJcGFydGlkX3Q7CS8qIHBhcnRpdGlvbiBJRCB0eXBlICovCiB0eXBlZGVmIHVuc2lnbmVkIGludCAgICBtb2R1bGVpZF90OyAgICAgLyogdXNlci12aXNpYmxlIG1vZHVsZSBudW1iZXIgdHlwZSAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgY21vZHVsZWlkX3Q7ICAgIC8qIGtlcm5lbCBjb21wYWN0IG1vZHVsZSBpZCB0eXBlICovCi10eXBlZGVmIHNpZ25lZCBjaGFyICAgICBzbGFiaWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhcglzbG90aWRfdDsJLyogc2xvdCAoYmxhZGUpIHdpdGhpbiBtb2R1bGUgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhcglzbGFiaWRfdDsJLyogc2xhYiAoYXNpYykgd2l0aGluIHNsb3QgKi8KIHR5cGVkZWYgdTY0IG5pY190OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlvcGFkZHJfdDsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBwYWRkcl90OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi94cC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi94cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MDIxODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3hwLmgKQEAgLTAsMCArMSw0MzYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworCisvKgorICogRXh0ZXJuYWwgQ3Jvc3MgUGFydGl0aW9uIChYUCkgc3RydWN0dXJlcyBhbmQgZGVmaW5lcy4KKyAqLworCisKKyNpZm5kZWYgX0FTTV9JQTY0X1NOX1hQX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1NOX1hQX0gKKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zbi9idGUuaD4KKworCisjaWZkZWYgVVNFX0RCVUdfT04KKyNkZWZpbmUgREJVR19PTihjb25kaXRpb24pCUJVR19PTihjb25kaXRpb24pCisjZWxzZQorI2RlZmluZSBEQlVHX09OKGNvbmRpdGlvbikKKyNlbmRpZgorCisKKy8qCisgKiBEZWZpbmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxvZ2ljYWxseSBkZWZpbmVkIHBhcnRpdGlvbnMgdGhlIHN5c3RlbQorICogY2FuIHN1cHBvcnQuIEl0IGlzIGNvbnN0cmFpbmVkIGJ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBoYXJkd2FyZQorICogcGFydGl0aW9uYWJsZSByZWdpb25zLiBUaGUgdGVybSAncmVnaW9uJyBpbiB0aGlzIGNvbnRleHQgcmVmZXJzIHRvIHRoZQorICogbWluaW11bSBudW1iZXIgb2Ygbm9kZXMgdGhhdCBjYW4gY29tcHJpc2UgYW4gYWNjZXNzIHByb3RlY3Rpb24gZ3JvdXBpbmcuCisgKiBUaGUgYWNjZXNzIHByb3RlY3Rpb24gaXMgaW4gcmVnYXJkcyB0byBtZW1vcnksIElQSSBhbmQgSU9JLgorICoKKyAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBoYXJkd2FyZSBwYXJ0aXRpb25hYmxlIHJlZ2lvbnMgaXMgZXF1YWwgdG8gdGhlCisgKiBtYXhpbXVtIG51bWJlciBvZiBub2RlcyBpbiB0aGUgZW50aXJlIHN5c3RlbSBkaXZpZGVkIGJ5IHRoZSBtaW5pbXVtIG51bWJlcgorICogb2Ygbm9kZXMgdGhhdCBjb21wcmlzZSBhbiBhY2Nlc3MgcHJvdGVjdGlvbiBncm91cGluZy4KKyAqLworI2RlZmluZSBYUF9NQVhfUEFSVElUSU9OUwk2NAorCisKKy8qCisgKiBEZWZpbmUgdGhlIG51bWJlciBvZiB1NjRzIHJlcXVpcmVkIHRvIHJlcHJlc2VudCBhbGwgdGhlIEMtYnJpY2sgbmFzaWRzCisgKiBhcyBhIGJpdG1hcC4gIFRoZSBjcm9zcy1wYXJ0aXRpb24ga2VybmVsIG1vZHVsZXMgZGVhbCBvbmx5IHdpdGgKKyAqIEMtYnJpY2sgbmFzaWRzLCB0aHVzIHRoZSBuZWVkIGZvciBiaXRtYXBzIHdoaWNoIGRvbid0IGFjY291bnQgZm9yCisgKiBvZGQtbnVtYmVyZWQgKG5vbiBDLWJyaWNrKSBuYXNpZHMuCisgKi8KKyNkZWZpbmUgWFBfTUFYX1BIWVNOT0RFX0lECShNQVhfUEhZU05PREVfSUQgLyAyKQorI2RlZmluZSBYUF9OQVNJRF9NQVNLX0JZVEVTCSgoWFBfTUFYX1BIWVNOT0RFX0lEICsgNykgLyA4KQorI2RlZmluZSBYUF9OQVNJRF9NQVNLX1dPUkRTCSgoWFBfTUFYX1BIWVNOT0RFX0lEICsgNjMpIC8gNjQpCisKKworLyoKKyAqIFdyYXBwZXIgZm9yIGJ0ZV9jb3B5KCkgdGhhdCBzaG91bGQgaXQgcmV0dXJuIGEgZmFpbHVyZSBzdGF0dXMgd2lsbCByZXRyeQorICogdGhlIGJ0ZV9jb3B5KCkgb25jZSBpbiB0aGUgaG9wZSB0aGF0IHRoZSBmYWlsdXJlIHdhcyBkdWUgdG8gYSB0ZW1wb3JhcnkKKyAqIGFiZXJyYXRpb24gKGkuZS4sIHRoZSBsaW5rIGdvaW5nIGRvd24gdGVtcG9yYXJpbHkpLgorICoKKyAqIFNlZSBidGVfY29weSBmb3IgZGVmaW5pdGlvbiBvZiB0aGUgaW5wdXQgcGFyYW1ldGVycy4KKyAqCisgKiBOb3RlOiB4cF9idGVfY29weSgpIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBhIHNwaW5sb2NrLgorICovCitzdGF0aWMgaW5saW5lIGJ0ZV9yZXN1bHRfdAoreHBfYnRlX2NvcHkodTY0IHNyYywgdTY0IGRlc3QsIHU2NCBsZW4sIHU2NCBtb2RlLCB2b2lkICpub3RpZmljYXRpb24pCit7CisJYnRlX3Jlc3VsdF90IHJldDsKKworCisJcmV0ID0gYnRlX2NvcHkoc3JjLCBkZXN0LCBsZW4sIG1vZGUsIG5vdGlmaWNhdGlvbik7CisKKwlpZiAocmV0ICE9IEJURV9TVUNDRVNTKSB7CisJCWlmICghaW5faW50ZXJydXB0KCkpIHsKKwkJCWNvbmRfcmVzY2hlZCgpOworCQl9CisJCXJldCA9IGJ0ZV9jb3B5KHNyYywgZGVzdCwgbGVuLCBtb2RlLCBub3RpZmljYXRpb24pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKworLyoKKyAqIFhQQyBlc3RhYmxpc2hlcyBjaGFubmVsIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIGxvY2FsIHBhcnRpdGlvbiBhbmQgYW55CisgKiBvdGhlciBwYXJ0aXRpb24gdGhhdCBpcyBjdXJyZW50bHkgdXAuIE92ZXIgdGhlc2UgY2hhbm5lbHMsIGtlcm5lbC1sZXZlbAorICogYHVzZXJzJyBjYW4gY29tbXVuaWNhdGUgd2l0aCB0aGVpciBjb3VudGVycGFydHMgb24gdGhlIG90aGVyIHBhcnRpdGlvbnMuCisgKgorICogVGhlIG1heGludW0gbnVtYmVyIG9mIGNoYW5uZWxzIGlzIGxpbWl0ZWQgdG8gZWlnaHQuIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLAorICogdGhlIGludGVybmFsIGNyb3NzIHBhcnRpdGlvbiBzdHJ1Y3R1cmVzIHJlcXVpcmUgc2l4dGVlbiBieXRlcyBwZXIgY2hhbm5lbCwKKyAqIGFuZCBlaWdodCBhbGxvd3MgYWxsIG9mIHRoaXMgaW50ZXJmYWNlLXNoYXJlZCBpbmZvIHRvIGZpdCBpbiBvbmUgY2FjaGUgbGluZS4KKyAqCisgKiBYUENfTkNIQU5ORUxTIHJlZmxlY3RzIHRoZSB0b3RhbCBudW1iZXIgb2YgY2hhbm5lbHMgY3VycmVudGx5IGRlZmluZWQuCisgKiBJZiB0aGUgbmVlZCBmb3IgYWRkaXRpb25hbCBjaGFubmVscyBhcmlzZXMsIG9uZSBjYW4gc2ltcGx5IGluY3JlYXNlCisgKiBYUENfTkNIQU5ORUxTIGFjY29yZGluZ2x5LiBJZiB0aGUgZGF5IHNob3VsZCBjb21lIHdoZXJlIHRoYXQgbnVtYmVyCisgKiBleGNlZWRzIHRoZSBNQVhJTVVNIG51bWJlciBvZiBjaGFubmVscyBhbGxvd2VkIChlaWdodCksIHRoZW4gb25lIHdpbGwgbmVlZAorICogdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZSBYUEMgY29kZSB0byBhbGxvdyBmb3IgdGhpcy4KKyAqLworI2RlZmluZSBYUENfTUVNX0NIQU5ORUwJCTAJLyogbWVtb3J5IGNoYW5uZWwgbnVtYmVyICovCisjZGVmaW5lCVhQQ19ORVRfQ0hBTk5FTAkJMQkvKiBuZXR3b3JrIGNoYW5uZWwgbnVtYmVyICovCisKKyNkZWZpbmUJWFBDX05DSEFOTkVMUwkJMgkvKiAjb2YgZGVmaW5lZCBjaGFubmVscyAqLworI2RlZmluZSBYUENfTUFYX05DSEFOTkVMUwk4CS8qIG1heCAjb2YgY2hhbm5lbHMgYWxsb3dlZCAqLworCisjaWYgWFBDX05DSEFOTkVMUyA+IFhQQ19NQVhfTkNIQU5ORUxTCisjZXJyb3IJWFBDX05DSEFOTkVMUyBleGNlZWRzIE1BWElNVU0gYWxsb3dlZC4KKyNlbmRpZgorCisKKy8qCisgKiBUaGUgZm9ybWF0IG9mIGFuIFhQQyBtZXNzYWdlIGlzIGFzIGZvbGxvd3M6CisgKgorICogICAgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgfCBmbGFncyB8Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy98CisgKiAgICAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICB8ICAgICAgICAgICAgIG1lc3NhZ2UgIyAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgIHwgICAgIHBheWxvYWQgKHVzZXItZGVmaW5lZCBtZXNzYWdlKSAgICAgfAorICogICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgCQk6CisgKiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiBUaGUgc2l6ZSBvZiB0aGUgcGF5bG9hZCBpcyBkZWZpbmVkIGJ5IHRoZSB1c2VyIHZpYSB4cGNfY29ubmVjdCgpLiBBIHVzZXItCisgKiBkZWZpbmVkIG1lc3NhZ2UgcmVzaWRlcyBpbiB0aGUgcGF5bG9hZCBhcmVhLgorICoKKyAqIFRoZSB1c2VyIHNob3VsZCBoYXZlIG5vIGRlYWxpbmdzIHdpdGggdGhlIG1lc3NhZ2UgaGVhZGVyLCBidXQgb25seSB0aGUKKyAqIG1lc3NhZ2UncyBwYXlsb2FkLiBXaGVuIGEgbWVzc2FnZSBlbnRyeSBpcyBhbGxvY2F0ZWQgKHZpYSB4cGNfYWxsb2NhdGUoKSkKKyAqIGEgcG9pbnRlciB0byB0aGUgcGF5bG9hZCBhcmVhIGlzIHJldHVybmVkIGFuZCBub3QgdGhlIGFjdHVhbCBiZWdpbm5pbmcgb2YKKyAqIHRoZSBYUEMgbWVzc2FnZS4gVGhlIHVzZXIgdGhlbiBjb25zdHJ1Y3RzIGEgbWVzc2FnZSBpbiB0aGUgcGF5bG9hZCBhcmVhCisgKiBhbmQgcGFzc2VzIHRoYXQgcG9pbnRlciBhcyBhbiBhcmd1bWVudCBvbiB4cGNfc2VuZCgpIG9yIHhwY19zZW5kX25vdGlmeSgpLgorICoKKyAqIFRoZSBzaXplIG9mIGEgbWVzc2FnZSBlbnRyeSAod2l0aGluIGEgbWVzc2FnZSBxdWV1ZSkgbXVzdCBiZSBhIGNhY2hlbGluZQorICogc2l6ZWQgbXVsdGlwbGUgaW4gb3JkZXIgdG8gZmFjaWxpdGF0ZSB0aGUgQlRFIHRyYW5zZmVyIG9mIG1lc3NhZ2VzIGZyb20gb25lCisgKiBtZXNzYWdlIHF1ZXVlIHRvIGFub3RoZXIuIEEgbWFjcm8sIFhQQ19NU0dfU0laRSgpLCBpcyBwcm92aWRlZCBmb3IgdGhlIHVzZXIKKyAqIHRoYXQgd2FudHMgdG8gZml0IGFzIG1hbnkgbXNnIGVudHJpZXMgYXMgcG9zc2libGUgaW4gYSBnaXZlbiBtZW1vcnkgc2l6ZQorICogKGUuZy4gYSBtZW1vcnkgcGFnZSkuCisgKi8KK3N0cnVjdCB4cGNfbXNnIHsKKwl1OCBmbGFnczsJCS8qIEZPUiBYUEMgSU5URVJOQUwgVVNFIE9OTFkgKi8KKwl1OCByZXNlcnZlZFs3XTsJCS8qIEZPUiBYUEMgSU5URVJOQUwgVVNFIE9OTFkgKi8KKwlzNjQgbnVtYmVyOwkJLyogRk9SIFhQQyBJTlRFUk5BTCBVU0UgT05MWSAqLworCisJdTY0IHBheWxvYWQ7CQkvKiB1c2VyIGRlZmluZWQgcG9ydGlvbiBvZiBtZXNzYWdlICovCit9OworCisKKyNkZWZpbmUgWFBDX01TR19QQVlMT0FEX09GRlNFVAkodTY0KSAoJigoc3RydWN0IHhwY19tc2cgKikwKS0+cGF5bG9hZCkKKyNkZWZpbmUgWFBDX01TR19TSVpFKF9wYXlsb2FkX3NpemUpIFwKKwkJTDFfQ0FDSEVfQUxJR04oWFBDX01TR19QQVlMT0FEX09GRlNFVCArIChfcGF5bG9hZF9zaXplKSkKKworCisvKgorICogRGVmaW5lIHRoZSByZXR1cm4gdmFsdWVzIGFuZCB2YWx1ZXMgcGFzc2VkIHRvIHVzZXIncyBjYWxsb3V0IGZ1bmN0aW9ucy4KKyAqIChJdCBpcyBpbXBvcnRhbnQgdG8gYWRkIG5ldyB2YWx1ZSBjb2RlcyBhdCB0aGUgZW5kIGp1c3QgcHJlY2VkaW5nCisgKiB4cGNVbmtub3duUmVhc29uLCB3aGljaCBtdXN0IGhhdmUgdGhlIGhpZ2hlc3QgbnVtZXJpY2FsIHZhbHVlLikKKyAqLworZW51bSB4cGNfcmV0dmFsIHsKKwl4cGNTdWNjZXNzID0gMCwKKworCXhwY05vdENvbm5lY3RlZCwJLyogIDE6IGNoYW5uZWwgaXMgbm90IGNvbm5lY3RlZCAqLworCXhwY0Nvbm5lY3RlZCwJCS8qICAyOiBjaGFubmVsIGNvbm5lY3RlZCAob3BlbmVkKSAqLworCXhwY1JFVElSRUQxLAkJLyogIDM6IChmb3JtZXJseSB4cGNEaXNjb25uZWN0ZWQpICovCisKKwl4cGNNc2dSZWNlaXZlZCwJCS8qICA0OiBtZXNzYWdlIHJlY2VpdmVkICovCisJeHBjTXNnRGVsaXZlcmVkLAkvKiAgNTogbWVzc2FnZSBkZWxpdmVyZWQgYW5kIGFja25vd2xlZGdlZCAqLworCisJeHBjUkVUSVJFRDIsCQkvKiAgNjogKGZvcm1lcmx5IHhwY1RyYW5zZmVyRmFpbGVkKSAqLworCisJeHBjTm9XYWl0LAkJLyogIDc6IG9wZXJhdGlvbiB3b3VsZCByZXF1aXJlIHdhaXQgKi8KKwl4cGNSZXRyeSwJCS8qICA4OiByZXRyeSBvcGVyYXRpb24gKi8KKwl4cGNUaW1lb3V0LAkJLyogIDk6IHRpbWVvdXQgaW4geHBjX2FsbG9jYXRlX21zZ193YWl0KCkgKi8KKwl4cGNJbnRlcnJ1cHRlZCwJCS8qIDEwOiBpbnRlcnJ1cHRlZCB3YWl0ICovCisKKwl4cGNVbmVxdWFsTXNnU2l6ZXMsCS8qIDExOiBtZXNzYWdlIHNpemUgZGlzcGFyaXR5IGJldHdlZW4gc2lkZXMgKi8KKwl4cGNJbnZhbGlkQWRkcmVzcywJLyogMTI6IGludmFsaWQgYWRkcmVzcyAqLworCisJeHBjTm9NZW1vcnksCQkvKiAxMzogbm8gbWVtb3J5IGF2YWlsYWJsZSBmb3IgWFBDIHN0cnVjdHVyZXMgKi8KKwl4cGNMYWNrT2ZSZXNvdXJjZXMsCS8qIDE0OiBpbnN1ZmZpY2llbnQgcmVzb3VyY2VzIGZvciBvcGVyYXRpb24gKi8KKwl4cGNVbnJlZ2lzdGVyZWQsCS8qIDE1OiBjaGFubmVsIGlzIG5vdCByZWdpc3RlcmVkICovCisJeHBjQWxyZWFkeVJlZ2lzdGVyZWQsCS8qIDE2OiBjaGFubmVsIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAqLworCisJeHBjUGFydGl0aW9uRG93biwJLyogMTc6IHJlbW90ZSBwYXJ0aXRpb24gaXMgZG93biAqLworCXhwY05vdExvYWRlZCwJCS8qIDE4OiBYUEMgbW9kdWxlIGlzIG5vdCBsb2FkZWQgKi8KKwl4cGNVbmxvYWRpbmcsCQkvKiAxOTogdGhpcyBzaWRlIGlzIHVubG9hZGluZyBYUEMgbW9kdWxlICovCisKKwl4cGNCYWRNYWdpYywJCS8qIDIwOiBYUEMgTUFHSUMgc3RyaW5nIG5vdCBmb3VuZCAqLworCisJeHBjUmVhY3RpdmF0aW5nLAkvKiAyMTogcmVtb3RlIHBhcnRpdGlvbiB3YXMgcmVhY3RpdmF0ZWQgKi8KKworCXhwY1VucmVnaXN0ZXJpbmcsCS8qIDIyOiB0aGlzIHNpZGUgaXMgdW5yZWdpc3RlcmluZyBjaGFubmVsICovCisJeHBjT3RoZXJVbnJlZ2lzdGVyaW5nLAkvKiAyMzogb3RoZXIgc2lkZSBpcyB1bnJlZ2lzdGVyaW5nIGNoYW5uZWwgKi8KKworCXhwY0Nsb25lS1RocmVhZCwJLyogMjQ6IGNsb25pbmcga2VybmVsIHRocmVhZCAqLworCXhwY0Nsb25lS1RocmVhZEZhaWxlZCwJLyogMjU6IGNsb25pbmcga2VybmVsIHRocmVhZCBmYWlsZWQgKi8KKworCXhwY05vSGVhcnRiZWF0LAkJLyogMjY6IHJlbW90ZSBwYXJ0aXRpb24gaGFzIG5vIGhlYXJ0YmVhdCAqLworCisJeHBjUGlvUmVhZEVycm9yLAkvKiAyNzogUElPIHJlYWQgZXJyb3IgKi8KKwl4cGNQaHlzQWRkclJlZ0ZhaWxlZCwJLyogMjg6IHJlZ2lzdHJhdGlvbiBvZiBwaHlzIGFkZHIgcmFuZ2UgZmFpbGVkICovCisKKwl4cGNCdGVEaXJlY3RvcnlFcnJvciwJLyogMjk6IG1hcHMgdG8gQlRFRkFJTF9ESVIgKi8KKwl4cGNCdGVQb2lzb25FcnJvciwJLyogMzA6IG1hcHMgdG8gQlRFRkFJTF9QT0lTT04gKi8KKwl4cGNCdGVXcml0ZUVycm9yLAkvKiAzMTogbWFwcyB0byBCVEVGQUlMX1dFUlIgKi8KKwl4cGNCdGVBY2Nlc3NFcnJvciwJLyogMzI6IG1hcHMgdG8gQlRFRkFJTF9BQ0NFU1MgKi8KKwl4cGNCdGVQV3JpdGVFcnJvciwJLyogMzM6IG1hcHMgdG8gQlRFRkFJTF9QV0VSUiAqLworCXhwY0J0ZVBSZWFkRXJyb3IsCS8qIDM0OiBtYXBzIHRvIEJURUZBSUxfUFJFUlIgKi8KKwl4cGNCdGVUaW1lT3V0RXJyb3IsCS8qIDM1OiBtYXBzIHRvIEJURUZBSUxfVE9VVCAqLworCXhwY0J0ZVh0YWxrRXJyb3IsCS8qIDM2OiBtYXBzIHRvIEJURUZBSUxfWFRFUlIgKi8KKwl4cGNCdGVOb3RBdmFpbGFibGUsCS8qIDM3OiBtYXBzIHRvIEJURUZBSUxfTk9UQVZBSUwgKi8KKwl4cGNCdGVVbm1hcHBlZEVycm9yLAkvKiAzODogdW5tYXBwZWQgQlRFRkFJTF8gZXJyb3IgKi8KKworCXhwY0JhZFZlcnNpb24sCQkvKiAzOTogYmFkIHZlcnNpb24gbnVtYmVyICovCisJeHBjVmFyc05vdFNldCwJCS8qIDQwOiB0aGUgWFBDIHZhcmlhYmxlcyBhcmUgbm90IHNldCB1cCAqLworCXhwY05vUnN2ZFBhZ2VBZGRyLAkvKiA0MTogdW5hYmxlIHRvIGdldCByc3ZkIHBhZ2UncyBwaHlzIGFkZHIgKi8KKwl4cGNJbnZhbGlkUGFydGlkLAkvKiA0MjogaW52YWxpZCBwYXJ0aXRpb24gSUQgKi8KKwl4cGNMb2NhbFBhcnRpZCwJCS8qIDQzOiBsb2NhbCBwYXJ0aXRpb24gSUQgKi8KKworCXhwY1Vua25vd25SZWFzb24JLyogNDQ6IHVua25vd24gcmVhc29uIC0tIG11c3QgYmUgbGFzdCBpbiBsaXN0ICovCit9OworCisKKy8qCisgKiBEZWZpbmUgdGhlIGNhbGxvdXQgZnVuY3Rpb24gdHlwZXMgdXNlZCBieSBYUEMgdG8gdXBkYXRlIHRoZSB1c2VyIG9uCisgKiBjb25uZWN0aW9uIGFjdGl2aXR5IGFuZCBzdGF0ZSBjaGFuZ2VzICh2aWEgdGhlIHVzZXIgZnVuY3Rpb24gcmVnaXN0ZXJlZCBieQorICogeHBjX2Nvbm5lY3QoKSkgYW5kIHRvIG5vdGlmeSB0aGVtIG9mIG1lc3NhZ2VzIHJlY2VpdmVkIGFuZCBkZWxpdmVyZWQgKHZpYQorICogdGhlIHVzZXIgZnVuY3Rpb24gcmVnaXN0ZXJlZCBieSB4cGNfc2VuZF9ub3RpZnkoKSkuCisgKgorICogVGhlIHR3byBmdW5jdGlvbiB0eXBlcyBhcmUgeHBjX2NoYW5uZWxfZnVuYyBhbmQgeHBjX25vdGlmeV9mdW5jIGFuZAorICogYm90aCBzaGFyZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICJkYXRhIiwgd2hpY2gKKyAqIG9ubHkgeHBjX2NoYW5uZWxfZnVuYyBoYXMuCisgKgorICogQXJndW1lbnRzOgorICoKKyAqCXJlYXNvbiAtIHJlYXNvbiBjb2RlLiAoU2VlIGZvbGxvd2luZyB0YWJsZS4pCisgKglwYXJ0aWQgLSBwYXJ0aXRpb24gSUQgYXNzb2NpYXRlZCB3aXRoIGNvbmRpdGlvbi4KKyAqCWNoX251bWJlciAtIGNoYW5uZWwgIyBhc3NvY2lhdGVkIHdpdGggY29uZGl0aW9uLgorICoJZGF0YSAtIHBvaW50ZXIgdG8gb3B0aW9uYWwgZGF0YS4gKFNlZSBmb2xsb3dpbmcgdGFibGUuKQorICoJa2V5IC0gcG9pbnRlciB0byBvcHRpb25hbCB1c2VyLWRlZmluZWQgdmFsdWUgcHJvdmlkZWQgYXMgdGhlICJrZXkiCisgKgkgICAgICBhcmd1bWVudCB0byB4cGNfY29ubmVjdCgpIG9yIHhwY19zZW5kX25vdGlmeSgpLgorICoKKyAqIEluIHRoZSBmb2xsb3dpbmcgdGFibGUgdGhlICJPcHRpb25hbCBEYXRhIiBjb2x1bW4gYXBwbGllcyB0byBjYWxsb3V0cyBtYWRlCisgKiB0byBmdW5jdGlvbnMgcmVnaXN0ZXJlZCBieSB4cGNfY29ubmVjdCgpLiBBICJOQSIgaW4gdGhhdCBjb2x1bW4gaW5kaWNhdGVzCisgKiB0aGF0IHRoaXMgcmVhc29uIGNvZGUgY2FuIGJlIHBhc3NlZCB0byBmdW5jdGlvbnMgcmVnaXN0ZXJlZCBieQorICogeHBjX3NlbmRfbm90aWZ5KCkgKGkuZS4gdGhleSBkb24ndCBoYXZlIGRhdGEgYXJndW1lbnRzKS4KKyAqCisgKiBBbHNvLCB0aGUgZmlyc3QgdGhyZWUgcmVhc29uIGNvZGVzIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgaW5kaWNhdGUKKyAqIHN1Y2Nlc3MsIHdoZXJlYXMgdGhlIG90aGVycyBpbmRpY2F0ZSBmYWlsdXJlLiBXaGVuIGEgZmFpbHVyZSByZWFzb24gY29kZQorICogaXMgcmVjZWl2ZWQsIG9uZSBjYW4gYXNzdW1lIHRoYXQgdGhlIGNoYW5uZWwgaXMgbm90IGNvbm5lY3RlZC4KKyAqCisgKgorICogUmVhc29uIENvZGUgICAgICAgICAgfCBDYXVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCBEYXRhCisgKiA9PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09CisgKiB4cGNDb25uZWN0ZWQgICAgICAgICB8IGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWR8IG1heCAjb2YgZW50cmllcworICogICAgICAgICAgICAgICAgICAgICAgfCB0byB0aGUgc3BlY2lmaWVkIHBhcnRpdGlvbiBvbiAgfCBhbGxvd2VkIGluIG1lc3NhZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIHNwZWNpZmllZCBjaGFubmVsICAgICAgICAgIHwgcXVldWUKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHhwY01zZ1JlY2VpdmVkICAgICAgIHwgYW4gWFBDIG1lc3NhZ2UgYXJyaXZlZCBmcm9tICAgIHwgYWRkcmVzcyBvZiBwYXlsb2FkCisgKiAgICAgICAgICAgICAgICAgICAgICB8IHRoZSBzcGVjaWZpZWQgcGFydGl0aW9uIG9uIHRoZSB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8IHNwZWNpZmllZCBjaGFubmVsICAgICAgICAgICAgICB8IFt0aGUgdXNlciBtdXN0IGNhbGwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHBjX3JlY2VpdmVkKCkgd2hlbgorICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmaW5pc2hlZCB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwYXlsb2FkXQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeHBjTXNnRGVsaXZlcmVkICAgICAgfCBub3RpZmljYXRpb24gdGhhdCB0aGUgbWVzc2FnZSAgfCBOQQorICogICAgICAgICAgICAgICAgICAgICAgfCB3YXMgZGVsaXZlcmVkIHRvIHRoZSBpbnRlbmRlZCAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCByZWNpcGllbnQgYW5kIHRoYXQgdGhleSBoYXZlICAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCBhY2tub3dsZWRnZWQgaXRzIHJlY2VpcHQgYnkgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCBjYWxsaW5nIHhwY19yZWNlaXZlZCgpICAgICAgICAgfAorICogPT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PQorICogeHBjVW5lcXVhbE1zZ1NpemVzICAgfCBjYW4ndCBjb25uZWN0IHRvIHRoZSBzcGVjaWZpZWQgfCBOVUxMCisgKiAgICAgICAgICAgICAgICAgICAgICB8IHBhcnRpdGlvbiBvbiB0aGUgc3BlY2lmaWVkICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8IGNoYW5uZWwgYmVjYXVzZSBvZiBtaXNtYXRjaGVkICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8IG1lc3NhZ2Ugc2l6ZXMgICAgICAgICAgICAgICAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB4cGNOb01lbW9yeSAgICAgICAgICB8IGluc3VmZmljaWVudCBtZW1vcnkgYXZhaWFibGUgICB8IE5VTEwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgdG8gYWxsb2NhdGUgbWVzc2FnZSBxdWV1ZSAgICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHhwY0xhY2tPZlJlc291cmNlcyAgIHwgbGFjayBvZiByZXNvdXJjZXMgdG8gY3JlYXRlICAgIHwgTlVMTAorICogICAgICAgICAgICAgICAgICAgICAgfCB0aGUgbmVjZXNzYXJ5IGt0aHJlYWRzIHRvICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCBzdXBwb3J0IHRoZSBjaGFubmVsICAgICAgICAgICAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeHBjVW5yZWdpc3RlcmluZyAgICAgfCB0aGlzIHNpZGUncyB1c2VyIGhhcyAgICAgICAgICAgfCBOVUxMIG9yIE5BCisgKiAgICAgICAgICAgICAgICAgICAgICB8IHVucmVnaXN0ZXJlZCBieSBjYWxsaW5nICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8IHhwY19kaXNjb25uZWN0KCkgICAgICAgICAgICAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB4cGNPdGhlclVucmVnaXN0ZXJpbmd8IHRoZSBvdGhlciBzaWRlJ3MgdXNlciBoYXMgICAgICB8IE5VTEwgb3IgTkEKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgdW5yZWdpc3RlcmVkIGJ5IGNhbGxpbmcgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgeHBjX2Rpc2Nvbm5lY3QoKSAgICAgICAgICAgICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHhwY05vSGVhcnRiZWF0ICAgICAgIHwgdGhlIG90aGVyIHNpZGUncyBYUEMgaXMgbm8gICAgIHwgTlVMTCBvciBOQQorICogICAgICAgICAgICAgICAgICAgICAgfCBsb25nZXIgaGVhcnRiZWF0aW5nICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeHBjVW5sb2FkaW5nICAgICAgICAgfCB0aGlzIHNpZGUncyBYUEMgbW9kdWxlIGlzICAgICAgfCBOVUxMIG9yIE5BCisgKiAgICAgICAgICAgICAgICAgICAgICB8IGJlaW5nIHVubG9hZGVkICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB4cGNPdGhlclVubG9hZGluZyAgICB8IHRoZSBvdGhlciBzaWRlJ3MgWFBDIG1vZHVsZSBpcyB8IE5VTEwgb3IgTkEKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgaXMgYmVpbmcgdW5sb2FkZWQgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHhwY1Bpb1JlYWRFcnJvciAgICAgIHwgeHBfbm9mYXVsdF9QSU9SKCkgcmV0dXJuZWQgYW4gIHwgTlVMTCBvciBOQQorICogICAgICAgICAgICAgICAgICAgICAgfCBlcnJvciB3aGlsZSBzZW5kaW5nIGFuIElQSSAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogeHBjSW52YWxpZEFkZHJlc3MgICAgfCB0aGUgYWRkcmVzcyBlaXRoZXIgcmVjZWl2ZWQgb3IgfCBOVUxMIG9yIE5BCisgKiAgICAgICAgICAgICAgICAgICAgICB8IHNlbnQgYnkgdGhlIHNwZWNpZmllZCBwYXJ0aXRpb258CisgKiAgICAgICAgICAgICAgICAgICAgICB8IGlzIGludmFsaWQgICAgICAgICAgICAgICAgICAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB4cGNCdGVOb3RBdmFpbGFibGUgICB8IGF0dGVtcHQgdG8gcHVsbCBkYXRhIGZyb20gdGhlICB8IE5VTEwgb3IgTkEKKyAqIHhwY0J0ZVBvaXNvbkVycm9yICAgIHwgc3BlY2lmaWVkIHBhcnRpdGlvbiBvdmVyIHRoZSAgIHwKKyAqIHhwY0J0ZVdyaXRlRXJyb3IgICAgIHwgc3BlY2lmaWVkIGNoYW5uZWwgdmlhIGEgICAgICAgIHwKKyAqIHhwY0J0ZUFjY2Vzc0Vycm9yICAgIHwgYnRlX2NvcHkoKSBmYWlsZWQgICAgICAgICAgICAgIHwKKyAqIHhwY0J0ZVRpbWVPdXRFcnJvciAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHhwY0J0ZVh0YWxrRXJyb3IgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHhwY0J0ZURpcmVjdG9yeUVycm9yIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHhwY0J0ZUdlbmVyaWNFcnJvciAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHhwY0J0ZVVubWFwcGVkRXJyb3IgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHhwY1Vua25vd25SZWFzb24gICAgIHwgdGhlIHNwZWNpZmllZCBjaGFubmVsIHRvIHRoZSAgIHwgTlVMTCBvciBOQQorICogICAgICAgICAgICAgICAgICAgICAgfCBzcGVjaWZpZWQgcGFydGl0aW9uIHdhcyAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCB1bmF2YWlsYWJsZSBmb3IgdW5rbm93biByZWFzb25zfAorICogPT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PQorICovCisKK3R5cGVkZWYgdm9pZCAoKnhwY19jaGFubmVsX2Z1bmMpKGVudW0geHBjX3JldHZhbCByZWFzb24sIHBhcnRpZF90IHBhcnRpZCwKKwkJaW50IGNoX251bWJlciwgdm9pZCAqZGF0YSwgdm9pZCAqa2V5KTsKKwordHlwZWRlZiB2b2lkICgqeHBjX25vdGlmeV9mdW5jKShlbnVtIHhwY19yZXR2YWwgcmVhc29uLCBwYXJ0aWRfdCBwYXJ0aWQsCisJCWludCBjaF9udW1iZXIsIHZvaWQgKmtleSk7CisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgYSByZWdpc3RyYXRpb24gZW50cnkuIFRoZXJlIGlzIGEgZ2xvYmFsIGFycmF5IG9mIHRoZXNlLAorICogb25lIHBlciBjaGFubmVsLiBJdCBpcyB1c2VkIHRvIHJlY29yZCB0aGUgY29ubmVjdGlvbiByZWdpc3RyYXRpb24gbWFkZQorICogYnkgdGhlIHVzZXJzIG9mIFhQQy4gQXMgbG9uZyBhcyBhIHJlZ2lzdHJhdGlvbiBlbnRyeSBleGlzdHMsIGZvciBhbnkKKyAqIHBhcnRpdGlvbiB0aGF0IGNvbWVzIHVwLCBYUEMgd2lsbCBhdHRlbXB0IHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gb24KKyAqIHRoYXQgY2hhbm5lbC4gTm90aWZpY2F0aW9uIHRoYXQgYSBjb25uZWN0aW9uIGhhcyBiZWVuIG1hZGUgd2lsbCBvY2N1ciB2aWEKKyAqIHRoZSB4cGNfY2hhbm5lbF9mdW5jIGZ1bmN0aW9uLgorICoKKyAqIFRoZSAnZnVuYycgZmllbGQgcG9pbnRzIHRvIHRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYXluY2hyb25vdXMKKyAqIG5vdGlmaWNhdGlvbiBpcyByZXF1aXJlZCBmb3Igc3VjaCBldmVudHMgYXM6IGEgY29ubmVjdGlvbiBlc3RhYmxpc2hlZC9sb3N0LAorICogb3IgYW4gaW5jb21taW5nIG1lc3NhZ2UgcmVjZWl2ZWQsIG9yIGFuIGVycm9yIGNvbmRpdGlvbiBlbmNvdW50ZXJlZC4gQQorICogbm9uLU5VTEwgJ2Z1bmMnIGZpZWxkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGFuIGFjdGl2ZSByZWdpc3RyYXRpb24gZm9yCisgKiB0aGUgY2hhbm5lbC4KKyAqLworc3RydWN0IHhwY19yZWdpc3RyYXRpb24geworCXN0cnVjdCBzZW1hcGhvcmUgc2VtYTsKKwl4cGNfY2hhbm5lbF9mdW5jIGZ1bmM7CQkvKiBmdW5jdGlvbiB0byBjYWxsICovCisJdm9pZCAqa2V5OwkJCS8qIHBvaW50ZXIgdG8gdXNlcidzIGtleSAqLworCXUxNiBuZW50cmllczsJCQkvKiAjb2YgbXNnIGVudHJpZXMgaW4gbG9jYWwgbXNnIHF1ZXVlICovCisJdTE2IG1zZ19zaXplOwkJCS8qIG1lc3NhZ2UgcXVldWUncyBtZXNzYWdlIHNpemUgKi8KKwl1MzIgYXNzaWduZWRfbGltaXQ7CQkvKiBsaW1pdCBvbiAjb2YgYXNzaWduZWQga3RocmVhZHMgKi8KKwl1MzIgaWRsZV9saW1pdDsJCQkvKiBsaW1pdCBvbiAjb2YgaWRsZSBrdGhyZWFkcyAqLworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKKworI2RlZmluZSBYUENfQ0hBTk5FTF9SRUdJU1RFUkVEKF9jKQkoeHBjX3JlZ2lzdHJhdGlvbnNbX2NdLmZ1bmMgIT0gTlVMTCkKKworCisvKiB0aGUgZm9sbG93aW5nIGFyZSB2YWxpZCB4cGNfYWxsb2NhdGUoKSBmbGFncyAqLworI2RlZmluZSBYUENfV0FJVAkwCQkvKiB3YWl0IGZsYWcgKi8KKyNkZWZpbmUgWFBDX05PV0FJVAkxCQkvKiBubyB3YWl0IGZsYWcgKi8KKworCitzdHJ1Y3QgeHBjX2ludGVyZmFjZSB7CisJdm9pZCAoKmNvbm5lY3QpKGludCk7CisJdm9pZCAoKmRpc2Nvbm5lY3QpKGludCk7CisJZW51bSB4cGNfcmV0dmFsICgqYWxsb2NhdGUpKHBhcnRpZF90LCBpbnQsIHUzMiwgdm9pZCAqKik7CisJZW51bSB4cGNfcmV0dmFsICgqc2VuZCkocGFydGlkX3QsIGludCwgdm9pZCAqKTsKKwllbnVtIHhwY19yZXR2YWwgKCpzZW5kX25vdGlmeSkocGFydGlkX3QsIGludCwgdm9pZCAqLAorCQkJCQkJeHBjX25vdGlmeV9mdW5jLCB2b2lkICopOworCXZvaWQgKCpyZWNlaXZlZCkocGFydGlkX3QsIGludCwgdm9pZCAqKTsKKwllbnVtIHhwY19yZXR2YWwgKCpwYXJ0aWRfdG9fbmFzaWRzKShwYXJ0aWRfdCwgdm9pZCAqKTsKK307CisKKworZXh0ZXJuIHN0cnVjdCB4cGNfaW50ZXJmYWNlIHhwY19pbnRlcmZhY2U7CisKK2V4dGVybiB2b2lkIHhwY19zZXRfaW50ZXJmYWNlKHZvaWQgKCopKGludCksCisJCXZvaWQgKCopKGludCksCisJCWVudW0geHBjX3JldHZhbCAoKikocGFydGlkX3QsIGludCwgdTMyLCB2b2lkICoqKSwKKwkJZW51bSB4cGNfcmV0dmFsICgqKShwYXJ0aWRfdCwgaW50LCB2b2lkICopLAorCQllbnVtIHhwY19yZXR2YWwgKCopKHBhcnRpZF90LCBpbnQsIHZvaWQgKiwgeHBjX25vdGlmeV9mdW5jLAorCQkJCQkJCQl2b2lkICopLAorCQl2b2lkICgqKShwYXJ0aWRfdCwgaW50LCB2b2lkICopLAorCQllbnVtIHhwY19yZXR2YWwgKCopKHBhcnRpZF90LCB2b2lkICopKTsKK2V4dGVybiB2b2lkIHhwY19jbGVhcl9pbnRlcmZhY2Uodm9pZCk7CisKKworZXh0ZXJuIGVudW0geHBjX3JldHZhbCB4cGNfY29ubmVjdChpbnQsIHhwY19jaGFubmVsX2Z1bmMsIHZvaWQgKiwgdTE2LAorCQkJCQkJdTE2LCB1MzIsIHUzMik7CitleHRlcm4gdm9pZCB4cGNfZGlzY29ubmVjdChpbnQpOworCitzdGF0aWMgaW5saW5lIGVudW0geHBjX3JldHZhbAoreHBjX2FsbG9jYXRlKHBhcnRpZF90IHBhcnRpZCwgaW50IGNoX251bWJlciwgdTMyIGZsYWdzLCB2b2lkICoqcGF5bG9hZCkKK3sKKwlyZXR1cm4geHBjX2ludGVyZmFjZS5hbGxvY2F0ZShwYXJ0aWQsIGNoX251bWJlciwgZmxhZ3MsIHBheWxvYWQpOworfQorCitzdGF0aWMgaW5saW5lIGVudW0geHBjX3JldHZhbAoreHBjX3NlbmQocGFydGlkX3QgcGFydGlkLCBpbnQgY2hfbnVtYmVyLCB2b2lkICpwYXlsb2FkKQoreworCXJldHVybiB4cGNfaW50ZXJmYWNlLnNlbmQocGFydGlkLCBjaF9udW1iZXIsIHBheWxvYWQpOworfQorCitzdGF0aWMgaW5saW5lIGVudW0geHBjX3JldHZhbAoreHBjX3NlbmRfbm90aWZ5KHBhcnRpZF90IHBhcnRpZCwgaW50IGNoX251bWJlciwgdm9pZCAqcGF5bG9hZCwKKwkJCXhwY19ub3RpZnlfZnVuYyBmdW5jLCB2b2lkICprZXkpCit7CisJcmV0dXJuIHhwY19pbnRlcmZhY2Uuc2VuZF9ub3RpZnkocGFydGlkLCBjaF9udW1iZXIsIHBheWxvYWQsIGZ1bmMsIGtleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoreHBjX3JlY2VpdmVkKHBhcnRpZF90IHBhcnRpZCwgaW50IGNoX251bWJlciwgdm9pZCAqcGF5bG9hZCkKK3sKKwlyZXR1cm4geHBjX2ludGVyZmFjZS5yZWNlaXZlZChwYXJ0aWQsIGNoX251bWJlciwgcGF5bG9hZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSB4cGNfcmV0dmFsCit4cGNfcGFydGlkX3RvX25hc2lkcyhwYXJ0aWRfdCBwYXJ0aWQsIHZvaWQgKm5hc2lkcykKK3sKKwlyZXR1cm4geHBjX2ludGVyZmFjZS5wYXJ0aWRfdG9fbmFzaWRzKHBhcnRpZCwgbmFzaWRzKTsKK30KKworCitleHRlcm4gdTY0IHhwX25vZmF1bHRfUElPUl90YXJnZXQ7CitleHRlcm4gaW50IHhwX25vZmF1bHRfUElPUih2b2lkICopOworZXh0ZXJuIGludCB4cF9lcnJvcl9QSU9SKHZvaWQpOworCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfU05fWFBfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tbTMyci9zaWduYWwuaAppbmRleCBjZTQ2ZWFlLi45NWY2OWIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2lnbmFsLmgKQEAgLTExNCwzNCArMTE0LDcgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAogI2RlZmluZSBTSUdTVEtTWgk4MTkyCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCi0jZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCi0jZW5kaWYKLQotI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLwotI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCi0jZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAyCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLwotCi0vKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwotdHlwZWRlZiB2b2lkIF9fc2lnbmFsZm5fdChpbnQpOwotdHlwZWRlZiBfX3NpZ25hbGZuX3QgX191c2VyICpfX3NpZ2hhbmRsZXJfdDsKLQotdHlwZWRlZiB2b2lkIF9fcmVzdG9yZWZuX3Qodm9pZCk7Ci10eXBlZGVmIF9fcmVzdG9yZWZuX3QgX191c2VyICpfX3NpZ3Jlc3RvcmVfdDsKLQotI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KLSNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KLSNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KIHN0cnVjdCBvbGRfc2lnYWN0aW9uIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYnVnLmggYi9pbmNsdWRlL2FzbS1tNjhrL2J1Zy5oCmluZGV4IDNlMWQyMjYuLjA3MmNlMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9idWcuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCisjaWZkZWYgQ09ORklHX0JVRwogI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCiAjaWZuZGVmIENPTkZJR19TVU4zCiAjZGVmaW5lIEJVRygpIGRvIHsgXApAQCAtMjIsNiArMjMsOCBAQAogI2VuZGlmCiAKICNkZWZpbmUgSEFWRV9BUkNIX0JVRworI2VuZGlmCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tbTY4ay9zaWduYWwuaAppbmRleCA2NjgxYmI2Li5hMGNkZjkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc2lnbmFsLmgKQEAgLTEwNSw0MiArMTA1LDIwIEBACiAjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKICNkZWZpbmUgU0lHU1RLU1oJODE5MgogCi0jaWZkZWYgX19LRVJORUxfXwotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKLSNlbmRpZgotCi0jZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCi0jZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCi0KLS8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCi10eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKLQotI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KLSNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KLSNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KIHN0cnVjdCBvbGRfc2lnYWN0aW9uIHsKIAlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwogCW9sZF9zaWdzZXRfdCBzYV9tYXNrOwogCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0Jdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKKwlfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKIH07CiAKIHN0cnVjdCBzaWdhY3Rpb24gewogCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CiAJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLQl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOwogCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9NQzY4MzI4LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2ODMyOC5oCmluZGV4IDRmNWE5ODQuLmEzMzdlNTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9NQzY4MzI4LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjgzMjguaApAQCAtOTkzLDcgKzk5Myw3IEBACiAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBwYWQxOwogICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgcGFkMjsKICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHBhZDM7Ci19IG02ODMyOF91YXJ0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBtNjgzMjhfdWFydDsKIAogCiAvKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjhFWjMyOC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjhFWjMyOC5oCmluZGV4IDgwMTkzM2QuLjY5YjdmOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9NQzY4RVozMjguaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2OEVaMzI4LmgKQEAgLTgxNSw3ICs4MTUsNyBAQAogICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgbmlwcjsKICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHBhZDE7CiAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBwYWQyOwotfSBtNjgzMjhfdWFydCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbTY4MzI4X3VhcnQ7CiAKIAogLyoqKioqKioqKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9NQzY4VlozMjguaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9NQzY4VlozMjguaAppbmRleCBkZjc0MzIyLi4yYjliZjYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2OFZaMzI4LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjhWWjMyOC5oCkBAIC05MDksNyArOTA5LDcgQEAKICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IG5pcHI7CiAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBobWFyazsKICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHVudXNlZDsKLX0gbTY4MzI4X3VhcnQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIG02ODMyOF91YXJ0OwogCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NpZ25hbC5oCmluZGV4IDQ4NmNiYjAuLjFkMTMxODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2lnbmFsLmgKQEAgLTEwNSwyOSArMTA1LDcgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAogI2RlZmluZSBTSUdTVEtTWgk4MTkyCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAotI2VuZGlmCi0KLSNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwotI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KLQotLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KLXR5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQpOwotCi0jZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLwotI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLwotI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IG9sZF9zaWdhY3Rpb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9idWcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYnVnLmgKaW5kZXggZWI5NGJiOS4uM2Y1OTRiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2J1Zy5oCkBAIC0zLDEyICszLDE0IEBACiAKICNpbmNsdWRlIDxhc20vYnJlYWsuaD4KIAorI2lmZGVmIENPTkZJR19CVUcKKyNkZWZpbmUgSEFWRV9BUkNIX0JVRwogI2RlZmluZSBCVUcoKQkJCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYnJlYWsgJTAiIDogOiAiaSIgKEJSS19CVUcpKTsJCVwKIH0gd2hpbGUgKDApCisjZW5kaWYKIAotI2RlZmluZSBIQVZFX0FSQ0hfQlVHCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9lcnJuby5oIGIvaW5jbHVkZS9hc20tbWlwcy9lcnJuby5oCmluZGV4IDJiNDU4ZjkuLjNjMGQ4NDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZXJybm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2Vycm5vLmgKQEAgLTExNSw2ICsxMTUsMTAgQEAKICNkZWZpbmUJRUtFWVJFVk9LRUQJMTYzCS8qIEtleSBoYXMgYmVlbiByZXZva2VkICovCiAjZGVmaW5lCUVLRVlSRUpFQ1RFRAkxNjQJLyogS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlICovCiAKKy8qIGZvciByb2J1c3QgbXV0ZXhlcyAqLworI2RlZmluZQlFT1dORVJERUFECTE2NQkvKiBPd25lciBkaWVkICovCisjZGVmaW5lCUVOT1RSRUNPVkVSQUJMRQkxNjYJLyogU3RhdGUgbm90IHJlY292ZXJhYmxlICovCisKICNkZWZpbmUgRURRVU9UCQkxMTMzCS8qIFF1b3RhIGV4Y2VlZGVkICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnaW5mby5oCmluZGV4IDhkZGQzYzkuLmEwZTI2ZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnaW5mby5oCkBAIC0xMSw4ICsxMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAotI2RlZmluZSBTSUdFVl9IRUFEX1NJWkUJKHNpemVvZihsb25nKSArIDIqc2l6ZW9mKGludCkpCi0jZGVmaW5lIFNJR0VWX1BBRF9TSVpFCSgoU0lHRVZfTUFYX1NJWkUtU0lHRVZfSEVBRF9TSVpFKSAvIHNpemVvZihpbnQpKQogI3VuZGVmIF9fQVJDSF9TSV9UUkFQTk8JLyogZXhjZXB0aW9uIGNvZGUgbmVlZHMgdG8gZmlsbCB0aGlzIC4uLiAgKi8KIAogI2RlZmluZSBIQVZFX0FSQ0hfU0lHSU5GT19UCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaAppbmRleCA5OTQ5ODdkLi5mMmM0NzBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnbmFsLmgKQEAgLTk4LDM0ICs5OCwxMiBAQAogI2RlZmluZSBNSU5TSUdTVEtTWiAgICAyMDQ4CiAjZGVmaW5lIFNJR1NUS1NaICAgICAgIDgxOTIKIAotI2lmZGVmIF9fS0VSTkVMX18KLQotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBmbGFnIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHgwMjAwMDAwMAotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjZGVmaW5lIFNJR19CTE9DSwkxCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCiAjZGVmaW5lIFNJR19VTkJMT0NLCTIJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfU0VUTUFTSwkzCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLwogI2RlZmluZSBTSUdfU0VUTUFTSzMyCTI1NgkvKiBHb29kaWUgZnJvbSBTR0kgZm9yIEJTRCBjb21wYXRpYmlsaXR5OgogCQkJCSAgIHNldCBvbmx5IHRoZSBsb3cgMzIgYml0IG9mIHRoZSBzaWdzZXQuICAqLwotCi0vKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwotdHlwZWRlZiB2b2lkICgqX19zaWdoYW5kbGVyX3QpKGludCk7Ci0KLS8qIEZha2Ugc2lnbmFsIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KLSNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KLSNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KIAogc3RydWN0IHNpZ2FjdGlvbiB7CiAJdW5zaWduZWQgaW50CXNhX2ZsYWdzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2J1Zy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2J1Zy5oCmluZGV4IGU3MmY2ZTIuLjY5NTU4OGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvYnVnLmgKQEAgLTEsMTIgKzEsMTQgQEAKICNpZm5kZWYgX1BBUklTQ19CVUdfSAogI2RlZmluZSBfUEFSSVNDX0JVR19ICiAKKyNpZmRlZiBDT05GSUdfQlVHCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKICNkZWZpbmUgQlVHKCkgZG8geyBcCiAJcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAogCWR1bXBfc3RhY2soKTsgXAogCXBhbmljKCJCVUchIik7IFwKIH0gd2hpbGUgKDApCisjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZXJybm8uaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9lcnJuby5oCmluZGV4IGExMGYxMDkuLjA4NDY0YzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9lcnJuby5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9lcnJuby5oCkBAIC0xMTUsNSArMTE1LDkgQEAKICNkZWZpbmUgRU5PVFNVUAkJMjUyCS8qIEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCAoUE9TSVguNCAvIEhQVVgpICovCiAjZGVmaW5lIEVDQU5DRUxMRUQJMjUzCS8qIGFpbyByZXF1ZXN0IHdhcyBjYW5jZWxlZCBiZWZvcmUgY29tcGxldGUgKFBPU0lYLjQgLyBIUFVYKSAqLwogCisvKiBmb3Igcm9idXN0IG11dGV4ZXMgKi8KKyNkZWZpbmUgRU9XTkVSREVBRAkyNTQJLyogT3duZXIgZGllZCAqLworI2RlZmluZSBFTk9UUkVDT1ZFUkFCTEUJMjU1CS8qIFN0YXRlIG5vdCByZWNvdmVyYWJsZSAqLworCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2Zsb3BweS5oCmluZGV4IDQ3ZjUzZGYuLmNhM2FlZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9mbG9wcHkuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvZmxvcHB5LmgKQEAgLTIzNSw3ICsyMzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZmRfcm91dGluZV9sIHsKK3N0YXRpYyBzdHJ1Y3QgZmRfcm91dGluZV9sIHsKIAlpbnQgKCpfcmVxdWVzdF9kbWEpKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCk7CiAJdm9pZCAoKl9mcmVlX2RtYSkodW5zaWduZWQgaW50IGRtYW5yKTsKIAlpbnQgKCpfZ2V0X2RtYV9yZXNpZHVlKSh1bnNpZ25lZCBpbnQgZHVtbXkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NpZ25hbC5oCmluZGV4IDM1OGY1NzcuLjI1Y2IyM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc2lnbmFsLmgKQEAgLTg5LDE3ICs4OSw2IEBACiAjZGVmaW5lIF9OU0lHX0JQVwlCSVRTX1BFUl9MT05HCiAjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKIAotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy91YWNjZXNzLmgKaW5kZXggOGEwODQyMy4uYzFiNWJkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvdWFjY2Vzcy5oCkBAIC0yNCw3ICsyNCw3IEBACiAKIC8qCiAgKiBOb3RlIHRoYXQgc2luY2Uga2VybmVsIGFkZHJlc3NlcyBhcmUgaW4gYSBzZXBhcmF0ZSBhZGRyZXNzIHNwYWNlIG9uCi0gKiBwYXJpc2MsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIGFjY2Vzc19vaygpIG9yIHZlcmlmeV9hcmVhKCkuCisgKiBwYXJpc2MsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIGFjY2Vzc19vaygpLgogICogV2UganVzdCBsZXQgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBkbyB0aGUgcmlnaHQgdGhpbmcuIFRoaXMgYWxzbyBtZWFucwogICogdGhhdCBwdXRfdXNlciBpcyB0aGUgc2FtZSBhcyBfX3B1dF91c2VyLCBldGMuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9idWcuaCBiL2luY2x1ZGUvYXNtLXBwYy9idWcuaAppbmRleCBlOTljNmNiLi44YjM0ZmQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2J1Zy5oCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KICNkZWZpbmUgQlVHX1dBUk5JTkdfVFJBUAkweDEwMDAwMDAKIAorI2lmZGVmIENPTkZJR19CVUcKICNkZWZpbmUgQlVHKCkgZG8gewkJCQkJCQkgXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCSBcCiAJCSIxOgl0d2kgMzEsMCwwXG4iCQkJCQkgXApAQCAtNTAsNiArNTEsOCBAQAogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUdfT04KICNkZWZpbmUgSEFWRV9BUkNIX1dBUk5fT04KKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2h5ZHJhLmggYi9pbmNsdWRlL2FzbS1wcGMvaHlkcmEuaAppbmRleCAxMTM0NDMxLi44MzNhOGFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaHlkcmEuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaHlkcmEuaApAQCAtNTEsNyArNTEsNyBAQAogICAgIGNoYXIgT3BlblBJQ1sweDQwMDAwXTsKIH07CiAKLWV4dGVybiB2b2xhdGlsZSBzdHJ1Y3QgSHlkcmEgKkh5ZHJhOworZXh0ZXJuIHZvbGF0aWxlIHN0cnVjdCBIeWRyYSBfX2lvbWVtICpIeWRyYTsKIAogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wY2ktYnJpZGdlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGNpLWJyaWRnZS5oCmluZGV4IDc4ZTliZTYuLmZmYTQyMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wY2ktYnJpZGdlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BjaS1icmlkZ2UuaApAQCAtMTIsNyArMTIsNyBAQAogICogcGNpX2lvX2Jhc2UgcmV0dXJucyB0aGUgbWVtb3J5IGFkZHJlc3MgYXQgd2hpY2ggeW91IGNhbiBhY2Nlc3MKICAqIHRoZSBJL08gc3BhY2UgZm9yIFBDSSBidXMgbnVtYmVyIGBidXMnIChvciBOVUxMIG9uIGVycm9yKS4KICAqLwotZXh0ZXJuIHZvaWQgKnBjaV9idXNfaW9fYmFzZSh1bnNpZ25lZCBpbnQgYnVzKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKnBjaV9idXNfaW9fYmFzZSh1bnNpZ25lZCBpbnQgYnVzKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9idXNfaW9fYmFzZV9waHlzKHVuc2lnbmVkIGludCBidXMpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX2J1c19tZW1fYmFzZV9waHlzKHVuc2lnbmVkIGludCBidXMpOwogCkBAIC00OCw3ICs0OCw3IEBACiAJaW50IGxhc3RfYnVzbm87CiAJaW50IGJ1c19vZmZzZXQ7CiAKLQl2b2lkICppb19iYXNlX3ZpcnQ7CisJdm9pZCBfX2lvbWVtICppb19iYXNlX3ZpcnQ7CiAJdW5zaWduZWQgbG9uZyBpb19iYXNlX3BoeXM7CiAKIAkvKiBTb21lIG1hY2hpbmVzIChQUmVQKSBoYXZlIGEgbm9uIDE6MSBtYXBwaW5nIG9mCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcG1hY19mZWF0dXJlLmggYi9pbmNsdWRlL2FzbS1wcGMvcG1hY19mZWF0dXJlLmgKaW5kZXggNjM5YjY5MC4uOGJlYjE2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BtYWNfZmVhdHVyZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wbWFjX2ZlYXR1cmUuaApAQCAtMzE2LDYgKzMxNiw5IEBACiBleHRlcm4gdm9pZCBwbWFjX3N1c3BlbmRfYWdwX2Zvcl9jYXJkKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgcG1hY19yZXN1bWVfYWdwX2Zvcl9jYXJkKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCisvKiBVc2VkIGJ5IHRoZSB2aWEtcG11IGRyaXZlciBmb3Igc3VzcGVuZC9yZXN1bWUKKyAqLworZXh0ZXJuIHZvaWQgcG1hY190d2Vha19jbG9ja19zcHJlYWRpbmcoaW50IGVuYWJsZSk7CiAKIC8qCiAgKiBUaGUgcGFydCBiZWxvdyBpcyBmb3IgdXNlIGJ5IG1hY2lvX2FzaWMuYyBvbmx5LCBkbyBub3QgcmVseQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3JlZ19ib29rZS5oIGIvaW5jbHVkZS9hc20tcHBjL3JlZ19ib29rZS5oCmluZGV4IGU3MGMyNWYuLjQ1YzVlNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9yZWdfYm9va2UuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcmVnX2Jvb2tlLmgKQEAgLTMwNSw2ICszMDUsNyBAQAogI2RlZmluZSBFU1JfUElMCQkweDA4MDAwMDAwCS8qIFByb2dyYW0gRXhjZXB0aW9uIC0gSWxsZWdhbCAqLwogI2RlZmluZSBFU1JfUFBSCQkweDA0MDAwMDAwCS8qIFByb2dyYW0gRXhjZXB0aW9uIC0gUHJpdmVsZWdlZCAqLwogI2RlZmluZSBFU1JfUFRSCQkweDAyMDAwMDAwCS8qIFByb2dyYW0gRXhjZXB0aW9uIC0gVHJhcCAqLworI2RlZmluZSBFU1JfRlAJCTB4MDEwMDAwMDAJLyogRmxvYXRpbmcgUG9pbnQgT3BlcmF0aW9uICovCiAjZGVmaW5lIEVTUl9EU1QJCTB4MDA4MDAwMDAJLyogU3RvcmFnZSBFeGNlcHRpb24gLSBEYXRhIG1pc3MgKi8KICNkZWZpbmUgRVNSX0RJWgkJMHgwMDQwMDAwMAkvKiBTdG9yYWdlIEV4Y2VwdGlvbiAtIFpvbmUgZmF1bHQgKi8KICNkZWZpbmUgRVNSX1NUCQkweDAwODAwMDAwCS8qIFN0b3JlIE9wZXJhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXBwYy9zaWdjb250ZXh0LmgKaW5kZXggZmM1ZTM1OC4uZjgyZGNjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3NpZ2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvc2lnY29udGV4dC5oCkBAIC05LDcgKzksNyBAQAogCWludAkJc2lnbmFsOwogCXVuc2lnbmVkIGxvbmcJaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nCW9sZG1hc2s7Ci0Jc3RydWN0IHB0X3JlZ3MgCSpyZWdzOworCXN0cnVjdCBwdF9yZWdzIAlfX3VzZXIgKnJlZ3M7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXBwYy9zaWduYWwuaAppbmRleCA4Y2M4Yjg4Li5jYWY2ZWRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3NpZ25hbC5oCkBAIC05OSwzNCArOTksOCBAQAogCiAjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKICNkZWZpbmUgU0lHU1RLU1oJODE5MgotI2lmZGVmIF9fS0VSTkVMX18KIAotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwotI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KLQotLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KLXR5cGVkZWYgdm9pZCBfX3NpZ25hbGZuX3QoaW50KTsKLXR5cGVkZWYgX19zaWduYWxmbl90IF9fdXNlciAqX19zaWdoYW5kbGVyX3Q7Ci0KLXR5cGVkZWYgdm9pZCBfX3Jlc3RvcmVmbl90KHZvaWQpOwotdHlwZWRlZiBfX3Jlc3RvcmVmbl90IF9fdXNlciAqX19zaWdyZXN0b3JlX3Q7Ci0KLSNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCi0jZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCi0jZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+CiAKIHN0cnVjdCBvbGRfc2lnYWN0aW9uIHsKIAlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2Eub3V0LmgKaW5kZXggODAyMzM4ZS4uMzg3MWUyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvYS5vdXQuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9hLm91dC5oCkBAIC0xLDggKzEsNiBAQAogI2lmbmRlZiBfX1BQQzY0X0FfT1VUX0hfXwogI2RlZmluZSBfX1BQQzY0X0FfT1VUX0hfXwogCi0jaW5jbHVkZSA8YXNtL3BwY2RlYnVnLmg+Ci0KIC8qCiAgKiBjIDIwMDEgUFBDIDY0IFRlYW0sIElCTSBDb3JwCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvYnVnLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9idWcuaAppbmRleCBkYjMxZGQyLi4xNjk4NjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9idWcuaApAQCAtMjYsNiArMjYsOCBAQAogICovCiAjZGVmaW5lIEJVR19XQVJOSU5HX1RSQVAJMHgxMDAwMDAwCiAKKyNpZmRlZiBDT05GSUdfQlVHCisKICNkZWZpbmUgQlVHKCkgZG8gewkJCQkJCQkgXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCSBcCiAJCSIxOgl0d2kgMzEsMCwwXG4iCQkJCQkgXApAQCAtNTUsMTEgKzU3LDEyIEBACiAJCSAgICAiaSIgKF9fRklMRV9fKSwgImkiIChfX0ZVTkNUSU9OX18pKTsJXAogfSB3aGlsZSAoMCkKIAotI2VuZGlmCi0KICNkZWZpbmUgSEFWRV9BUkNIX0JVRwogI2RlZmluZSBIQVZFX0FSQ0hfQlVHX09OCiAjZGVmaW5lIEhBVkVfQVJDSF9XQVJOX09OCisjZW5kaWYKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvZWxmLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9lbGYuaAppbmRleCA4NDU3ZDkwLi42YzQyZDYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9lbGYuaApAQCAtMjI5LDkgKzIyOSwxMyBAQAogCiAvKgogICogQW4gZXhlY3V0YWJsZSBmb3Igd2hpY2ggZWxmX3JlYWRfaW1wbGllc19leGVjKCkgcmV0dXJucyBUUlVFIHdpbGwKLSAqIGhhdmUgdGhlIFJFQURfSU1QTElFU19FWEVDIHBlcnNvbmFsaXR5IGZsYWcgc2V0IGF1dG9tYXRpY2FsbHkuCisgKiBoYXZlIHRoZSBSRUFEX0lNUExJRVNfRVhFQyBwZXJzb25hbGl0eSBmbGFnIHNldCBhdXRvbWF0aWNhbGx5LiBUaGlzCisgKiBpcyBvbmx5IHJlcXVpcmVkIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gb2xkIDMyYml0IHRvb2xjaGFpbnMuIFNpbmNlCisgKiB0aGUgNjRiaXQgQUJJIGhhcyBuZXZlciBoYWQgdGhlc2UgaXNzdWVzIGRvbnQgZW5hYmxlIHRoZSB3b3JrYXJvdW5kCisgKiBldmVuIGlmIHdlIGhhdmUgYW4gZXhlY3V0YWJsZSBzdGFjay4KICAqLwotI2RlZmluZSBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoZXgsIGV4ZWNfc3RrKQkoZXhlY19zdGsgIT0gRVhTVEFDS19ESVNBQkxFX1gpCisjZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCwgZXhlY19zdGspICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkgPyBcCisJCShleGVjX3N0ayAhPSBFWFNUQUNLX0RJU0FCTEVfWCkgOiAwKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaW1hbGxvYy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvaW1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNDVlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9pbWFsbG9jLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfUFBDNjRfSU1BTExPQ19ICisjZGVmaW5lIF9QUEM2NF9JTUFMTE9DX0gKKworLyoKKyAqIERlZmluZSB0aGUgYWRkcmVzcyByYW5nZSBvZiB0aGUgaW1hbGxvYyBWTSBhcmVhLgorICovCisjZGVmaW5lIFBIQlNfSU9fQkFTRSAgCSAgSU9SRUdJT05CQVNFCisjZGVmaW5lIElNQUxMT0NfQkFTRSAgICAgIChJT1JFR0lPTkJBU0UgKyAweDgwMDAwMDAwdWwpCS8qIFJlc2VydmUgMiBnaWdzIGZvciBQSEJzICovCisjZGVmaW5lIElNQUxMT0NfRU5EICAgICAgIChJT1JFR0lPTkJBU0UgKyBFQUREUl9NQVNLKQorCisKKy8qIGltYWxsb2MgcmVnaW9uIHR5cGVzICovCisjZGVmaW5lIElNX1JFR0lPTl9VTlVTRUQJMHgxCisjZGVmaW5lIElNX1JFR0lPTl9TVUJTRVQJMHgyCisjZGVmaW5lIElNX1JFR0lPTl9FWElTVFMJMHg0CisjZGVmaW5lIElNX1JFR0lPTl9PVkVSTEFQCTB4OAorI2RlZmluZSBJTV9SRUdJT05fU1VQRVJTRVQJMHgxMAorCitleHRlcm4gc3RydWN0IHZtX3N0cnVjdCAqIGltX2dldF9mcmVlX2FyZWEodW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiBzdHJ1Y3Qgdm1fc3RydWN0ICogaW1fZ2V0X2FyZWEodW5zaWduZWQgbG9uZyB2X2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCWludCByZWdpb25fdHlwZSk7Cit1bnNpZ25lZCBsb25nIGltX2ZyZWUodm9pZCAqYWRkcik7CisKKyNlbmRpZiAvKiBfUFBDNjRfSU1BTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9tbXUuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L21tdS5oCmluZGV4IDE4ODk4N2UuLmM3ODI4MmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L21tdS5oCkBAIC0xNSwxOSArMTUsMTAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLS8qIFRpbWUgdG8gYWxsb3cgZm9yIG1vcmUgdGhpbmdzIGhlcmUgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X2lkX3Q7Ci10eXBlZGVmIHN0cnVjdCB7Ci0JbW1fY29udGV4dF9pZF90IGlkOwotI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKLQlwZ2RfdCAqaHVnZV9wZ2RpcjsKLQl1MTYgaHRsYl9zZWdzOyAvKiBiaXRtYXNrICovCi0jZW5kaWYKLX0gbW1fY29udGV4dF90OworLyoKKyAqIFNlZ21lbnQgdGFibGUKKyAqLwogCiAjZGVmaW5lIFNURV9FU0lEX1YJMHg4MAogI2RlZmluZSBTVEVfRVNJRF9LUwkweDIwCkBAIC0zNiwxNSArMjcsNDggQEAKIAogI2RlZmluZSBTVEVfVlNJRF9TSElGVAkxMgogCi1zdHJ1Y3Qgc3RhYl9lbnRyeSB7Ci0JdW5zaWduZWQgbG9uZyBlc2lkX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyB2c2lkX2RhdGE7Ci19OworLyogTG9jYXRpb24gb2YgY3B1MCdzIHNlZ21lbnQgdGFibGUgKi8KKyNkZWZpbmUgU1RBQjBfUEFHRQkweDkKKyNkZWZpbmUgU1RBQjBfUEhZU19BRERSCShTVEFCMF9QQUdFPDxQQUdFX1NISUZUKQorI2RlZmluZSBTVEFCMF9WSVJUX0FERFIJKEtFUk5FTEJBU0UrU1RBQjBfUEhZU19BRERSKQogCi0vKiBIYXJkd2FyZSBQYWdlIFRhYmxlIEVudHJ5ICovCisvKgorICogU0xCCisgKi8KKworI2RlZmluZSBTTEJfTlVNX0JPTFRFRAkJMworI2RlZmluZSBTTEJfQ0FDSEVfRU5UUklFUwk4CisKKy8qIEJpdHMgaW4gdGhlIFNMQiBFU0lEIHdvcmQgKi8KKyNkZWZpbmUgU0xCX0VTSURfVgkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwODAwMDAwMCkgLyogdmFsaWQgKi8KKworLyogQml0cyBpbiB0aGUgU0xCIFZTSUQgd29yZCAqLworI2RlZmluZSBTTEJfVlNJRF9TSElGVAkJMTIKKyNkZWZpbmUgU0xCX1ZTSURfS1MJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDA4MDApCisjZGVmaW5lIFNMQl9WU0lEX0tQCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwNDAwKQorI2RlZmluZSBTTEJfVlNJRF9OCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMjAwKSAvKiBuby1leGVjdXRlICovCisjZGVmaW5lIFNMQl9WU0lEX0wJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAxMDApIC8qIGxhcmdlcGFnZSAxNk0gKi8KKyNkZWZpbmUgU0xCX1ZTSURfQwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDA4MCkgLyogY2xhc3MgKi8KKworI2RlZmluZSBTTEJfVlNJRF9LRVJORUwJCShTTEJfVlNJRF9LUHxTTEJfVlNJRF9DKQorI2RlZmluZSBTTEJfVlNJRF9VU0VSCQkoU0xCX1ZTSURfS1B8U0xCX1ZTSURfS1MpCisKKy8qCisgKiBIYXNoIHRhYmxlCisgKi8KIAogI2RlZmluZSBIUFRFU19QRVJfR1JPVVAgOAogCisvKiBWYWx1ZXMgZm9yIFBQIChhc3N1bWVzIEtzPTAsIEtwPTEpICovCisvKiBwcDAgd2lsbCBhbHdheXMgYmUgMCBmb3IgbGludXggICAgICovCisjZGVmaW5lIFBQX1JXWFgJMAkvKiBTdXBlcnZpc29yIHJlYWQvd3JpdGUsIFVzZXIgbm9uZSAqLworI2RlZmluZSBQUF9SV1JYIDEJLyogU3VwZXJ2aXNvciByZWFkL3dyaXRlLCBVc2VyIHJlYWQgKi8KKyNkZWZpbmUgUFBfUldSVyAyCS8qIFN1cGVydmlzb3IgcmVhZC93cml0ZSwgVXNlciByZWFkL3dyaXRlICovCisjZGVmaW5lIFBQX1JYUlggMwkvKiBTdXBlcnZpc29yIHJlYWQsICAgICAgIFVzZXIgcmVhZCAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBIYXJkd2FyZSBQYWdlIFRhYmxlIEVudHJ5ICovCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBhdnBuOjU3OyAvKiB2c2lkIHwgYXBpID09IGF2cG4gICovCiAJdW5zaWduZWQgbG9uZyA6ICAgICAyOyAvKiBTb2Z0d2FyZSB1c2UgKi8KQEAgLTkwLDE0ICsxMTQsNiBAQAogCX0gZHcxOwogfSBIUFRFOyAKIAotLyogVmFsdWVzIGZvciBQUCAoYXNzdW1lcyBLcz0wLCBLcD0xKSAqLwotLyogcHAwIHdpbGwgYWx3YXlzIGJlIDAgZm9yIGxpbnV4ICAgICAqLwotI2RlZmluZSBQUF9SV1hYCTAJLyogU3VwZXJ2aXNvciByZWFkL3dyaXRlLCBVc2VyIG5vbmUgKi8KLSNkZWZpbmUgUFBfUldSWCAxCS8qIFN1cGVydmlzb3IgcmVhZC93cml0ZSwgVXNlciByZWFkICovCi0jZGVmaW5lIFBQX1JXUlcgMgkvKiBTdXBlcnZpc29yIHJlYWQvd3JpdGUsIFVzZXIgcmVhZC93cml0ZSAqLwotI2RlZmluZSBQUF9SWFJYIDMJLyogU3VwZXJ2aXNvciByZWFkLCAgICAgICBVc2VyIHJlYWQgKi8KLQotCiBleHRlcm4gSFBURSAqCQlodGFiX2FkZHJlc3M7CiBleHRlcm4gdW5zaWduZWQgbG9uZwlodGFiX2hhc2hfbWFzazsKIApAQCAtMTc0LDMxICsxOTAsNzAgQEAKIAogZXh0ZXJuIHZvaWQgaHRhYl9maW5pc2hfaW5pdCh2b2lkKTsKIAorZXh0ZXJuIHZvaWQgaHB0ZV9pbml0X25hdGl2ZSh2b2lkKTsKK2V4dGVybiB2b2lkIGhwdGVfaW5pdF9scGFyKHZvaWQpOworZXh0ZXJuIHZvaWQgaHB0ZV9pbml0X2lTZXJpZXModm9pZCk7CisKK2V4dGVybiBsb25nIHBTZXJpZXNfbHBhcl9ocHRlX2luc2VydCh1bnNpZ25lZCBsb25nIGhwdGVfZ3JvdXAsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhLCB1bnNpZ25lZCBsb25nIHBycG4sCisJCQkJICAgICBpbnQgc2Vjb25kYXJ5LCB1bnNpZ25lZCBsb25nIGhwdGVmbGFncywKKwkJCQkgICAgIGludCBib2x0ZWQsIGludCBsYXJnZSk7CitleHRlcm4gbG9uZyBuYXRpdmVfaHB0ZV9pbnNlcnQodW5zaWduZWQgbG9uZyBocHRlX2dyb3VwLCB1bnNpZ25lZCBsb25nIHZhLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcHJwbiwgaW50IHNlY29uZGFyeSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGhwdGVmbGFncywgaW50IGJvbHRlZCwgaW50IGxhcmdlKTsKKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAvKgotICogTG9jYXRpb24gb2YgY3B1MCdzIHNlZ21lbnQgdGFibGUKKyAqIFZTSUQgYWxsb2NhdGlvbgorICoKKyAqIFdlIGZpcnN0IGdlbmVyYXRlIGEgMzYtYml0ICJwcm90by1WU0lEIi4gIEZvciBrZXJuZWwgYWRkcmVzc2VzIHRoaXMKKyAqIGlzIGVxdWFsIHRvIHRoZSBFU0lELCBmb3IgdXNlciBhZGRyZXNzZXMgaXQgaXM6CisgKgkoY29udGV4dCA8PCAxNSkgfCAoZXNpZCAmIDB4N2ZmZikKKyAqCisgKiBUaGUgdHdvIGZvcm1zIGFyZSBkaXN0aW5ndWlzaGFibGUgYmVjYXVzZSB0aGUgdG9wIGJpdCBpcyAwIGZvciB1c2VyCisgKiBhZGRyZXNzZXMsIHdoZXJlYXMgdGhlIHRvcCB0d28gYml0cyBhcmUgMSBmb3Iga2VybmVsIGFkZHJlc3Nlcy4KKyAqIFByb3RvLVZTSURzIHdpdGggdGhlIHRvcCB0d28gYml0cyBlcXVhbCB0byAwYjEwIGFyZSByZXNlcnZlZCBmb3IKKyAqIG5vdy4KKyAqCisgKiBUaGUgcHJvdG8tVlNJRHMgYXJlIHRoZW4gc2NyYW1ibGVkIGludG8gcmVhbCBWU0lEcyB3aXRoIHRoZQorICogbXVsdGlwbGljYXRpdmUgaGFzaDoKKyAqCisgKglWU0lEID0gKHByb3RvLVZTSUQgKiBWU0lEX01VTFRJUExJRVIpICUgVlNJRF9NT0RVTFVTCisgKgl3aGVyZQlWU0lEX01VTFRJUExJRVIgPSAyNjg0MzUzOTkgPSAweEZGRkZGQzcKKyAqCQlWU0lEX01PRFVMVVMgPSAyXjM2LTEgPSAweEZGRkZGRkZGRgorICoKKyAqIFRoaXMgc2NyYW1ibGUgaXMgb25seSB3ZWxsIGRlZmluZWQgZm9yIHByb3RvLVZTSURzIGJlbG93CisgKiAweEZGRkZGRkZGRiwgc28gYm90aCBwcm90by1WU0lEIGFuZCBhY3R1YWwgVlNJRCAweEZGRkZGRkZGRiBhcmUKKyAqIHJlc2VydmVkLiAgVlNJRF9NVUxUSVBMSUVSIGlzIHByaW1lLCBzbyBpbiBwYXJ0aWN1bGFyIGl0IGlzCisgKiBjby1wcmltZSB0byBWU0lEX01PRFVMVVMsIG1ha2luZyB0aGlzIGEgMToxIHNjcmFtYmxpbmcgZnVuY3Rpb24uCisgKiBCZWNhdXNlIHRoZSBtb2R1bHVzIGlzIDJebi0xIHdlIGNhbiBjb21wdXRlIGl0IGVmZmljaWVudGx5IHdpdGhvdXQKKyAqIGEgZGl2aWRlIG9yIGV4dHJhIG11bHRpcGx5IChzZWUgYmVsb3cpLgorICoKKyAqIFRoaXMgc2NoZW1lIGhhcyBzZXZlcmFsIGFkdmFudGFnZXMgb3ZlciBvbGRlciBtZXRob2RzOgorICoKKyAqIAktIFdlIGhhdmUgVlNJRHMgYWxsb2NhdGVkIGZvciBldmVyeSBrZXJuZWwgYWRkcmVzcworICogKGkuZS4gZXZlcnl0aGluZyBhYm92ZSAweEMwMDAwMDAwMDAwMDAwMDApLCBleGNlcHQgdGhlIHZlcnkgdG9wCisgKiBzZWdtZW50LCB3aGljaCBzaW1wbGlmaWVzIHNldmVyYWwgdGhpbmdzLgorICoKKyAqIAktIFdlIGFsbG93IGZvciAxNSBzaWduaWZpY2FudCBiaXRzIG9mIEVTSUQgYW5kIDIwIGJpdHMgb2YKKyAqIGNvbnRleHQgZm9yIHVzZXIgYWRkcmVzc2VzLiAgaS5lLiA4VCAoNDMgYml0cykgb2YgYWRkcmVzcyBzcGFjZSBmb3IKKyAqIHVwIHRvIDFNIGNvbnRleHRzIChhbHRob3VnaCB0aGUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmUgYW5kIGNvbnRleHQKKyAqIGFsbG9jYXRpb24gd2lsbCBuZWVkIGNoYW5nZXMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcykuCisgKgorICogCS0gVGhlIHNjcmFtYmxlIGZ1bmN0aW9uIGdpdmVzIHJvYnVzdCBzY2F0dGVyaW5nIGluIHRoZSBoYXNoCisgKiB0YWJsZSAoYXQgbGVhc3QgYmFzZWQgb24gc29tZSBpbml0aWFsIHJlc3VsdHMpLiAgVGhlIHByZXZpb3VzCisgKiBtZXRob2Qgd2FzIG1vcmUgc3VzY2VwdGlibGUgdG8gcGF0aG9sb2dpY2FsIGNhc2VzIGdpdmluZyBleGNlc3NpdmUKKyAqIGhhc2ggY29sbGlzaW9ucy4KICAqLwotI2RlZmluZSBTVEFCMF9QQUdFCTB4OQotI2RlZmluZSBTVEFCMF9QSFlTX0FERFIJKFNUQUIwX1BBR0U8PFBBR0VfU0hJRlQpCi0jZGVmaW5lIFNUQUIwX1ZJUlRfQUREUgkoS0VSTkVMQkFTRStTVEFCMF9QSFlTX0FERFIpCi0KLSNkZWZpbmUgU0xCX05VTV9CT0xURUQJCTMKLSNkZWZpbmUgU0xCX0NBQ0hFX0VOVFJJRVMJOAotCi0vKiBCaXRzIGluIHRoZSBTTEIgRVNJRCB3b3JkICovCi0jZGVmaW5lIFNMQl9FU0lEX1YJCTB4MDAwMDAwMDAwODAwMDAwMAkvKiBlbnRyeSBpcyB2YWxpZCAqLwotCi0vKiBCaXRzIGluIHRoZSBTTEIgVlNJRCB3b3JkICovCi0jZGVmaW5lIFNMQl9WU0lEX1NISUZUCQkxMgotI2RlZmluZSBTTEJfVlNJRF9LUwkJMHgwMDAwMDAwMDAwMDAwODAwCi0jZGVmaW5lIFNMQl9WU0lEX0tQCQkweDAwMDAwMDAwMDAwMDA0MDAKLSNkZWZpbmUgU0xCX1ZTSURfTgkJMHgwMDAwMDAwMDAwMDAwMjAwCS8qIG5vLWV4ZWN1dGUgKi8KLSNkZWZpbmUgU0xCX1ZTSURfTAkJMHgwMDAwMDAwMDAwMDAwMTAwCS8qIGxhcmdlcGFnZSAoNE0pICovCi0jZGVmaW5lIFNMQl9WU0lEX0MJCTB4MDAwMDAwMDAwMDAwMDA4MAkvKiBjbGFzcyAqLwotCi0jZGVmaW5lIFNMQl9WU0lEX0tFUk5FTAkJKFNMQl9WU0lEX0tQfFNMQl9WU0lEX0MpCi0jZGVmaW5lIFNMQl9WU0lEX1VTRVIJCShTTEJfVlNJRF9LUHxTTEJfVlNJRF9LUykKKy8qCisgKiBXQVJOSU5HIC0gSWYgeW91IGNoYW5nZSB0aGVzZSB5b3UgbXVzdCBtYWtlIHN1cmUgdGhlIGFzbQorICogaW1wbGVtZW50YXRpb25zIGluIHNsYl9hbGxvY2F0ZSAoc2xiX2xvdy5TKSwgZG9fc3RhYl9ib2x0ZWQKKyAqIChoZWFkLlMpIGFuZCBBU01fVlNJRF9TQ1JBTUJMRSAoYmVsb3cpIGFyZSBjaGFuZ2VkIGFjY29yZGluZ2x5LgorICoKKyAqIFlvdSdsbCBhbHNvIG5lZWQgdG8gY2hhbmdlIHRoZSBwcmVjb21wdXRlZCBWU0lEIHZhbHVlcyBpbiBoZWFkLlMKKyAqIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBpU2VyaWVzIGZpcm13YXJlLgorICovCiAKICNkZWZpbmUgVlNJRF9NVUxUSVBMSUVSCUFTTV9DT05TVCgyMDA3MzAxMzkpCS8qIDI4LWJpdCBwcmltZSAqLwogI2RlZmluZSBWU0lEX0JJVFMJMzYKQEAgLTIzOSw0ICsyOTQsNTAgQEAKIAlzcmRpCXJ4LHJ4LFZTSURfQklUUzsJLyogZXh0cmFjdCAyXjM2IGJpdCAqLwkJXAogCWFkZAlydCxydCxyeAogCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X2lkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwltbV9jb250ZXh0X2lkX3QgaWQ7CisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorCXBnZF90ICpodWdlX3BnZGlyOworCXUxNiBodGxiX3NlZ3M7IC8qIGJpdG1hc2sgKi8KKyNlbmRpZgorfSBtbV9jb250ZXh0X3Q7CisKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZzaWRfc2NyYW1ibGUodW5zaWduZWQgbG9uZyBwcm90b3ZzaWQpCit7CisjaWYgMAorCS8qIFRoZSBjb2RlIGJlbG93IGlzIGVxdWl2YWxlbnQgdG8gdGhpcyBmdW5jdGlvbiBmb3IgYXJndW1lbnRzCisJICogPCAyXlZTSURfQklUUywgd2hpY2ggaXMgYWxsIHRoaXMgc2hvdWxkIGV2ZXIgYmUgY2FsbGVkCisJICogd2l0aC4gIEhvd2V2ZXIgZ2NjIGlzIG5vdCBjbGV2ZXIgZW5vdWdoIHRvIGNvbXB1dGUgdGhlCisJICogbW9kdWx1cyAoMl5uLTEpIHdpdGhvdXQgYSBzZWNvbmQgbXVsdGlwbHkuICovCisJcmV0dXJuICgocHJvdG92c2lkICogVlNJRF9NVUxUSVBMSUVSKSAlIFZTSURfTU9EVUxVUyk7CisjZWxzZSAvKiAxICovCisJdW5zaWduZWQgbG9uZyB4OworCisJeCA9IHByb3RvdnNpZCAqIFZTSURfTVVMVElQTElFUjsKKwl4ID0gKHggPj4gVlNJRF9CSVRTKSArICh4ICYgVlNJRF9NT0RVTFVTKTsKKwlyZXR1cm4gKHggKyAoKHgrMSkgPj4gVlNJRF9CSVRTKSkgJiBWU0lEX01PRFVMVVM7CisjZW5kaWYgLyogMSAqLworfQorCisvKiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIGFkZHJlc3NlcyA+PSBLRVJORUxCQVNFICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2tlcm5lbF92c2lkKHVuc2lnbmVkIGxvbmcgZWEpCit7CisJcmV0dXJuIHZzaWRfc2NyYW1ibGUoZWEgPj4gU0lEX1NISUZUKTsKK30KKworLyogVGhpcyBpcyBvbmx5IHZhbGlkIGZvciB1c2VyIGFkZHJlc3NlcyAod2hpY2ggYXJlIGJlbG93IDJeNDEpICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3ZzaWQodW5zaWduZWQgbG9uZyBjb250ZXh0LCB1bnNpZ25lZCBsb25nIGVhKQoreworCXJldHVybiB2c2lkX3NjcmFtYmxlKChjb250ZXh0IDw8IFVTRVJfRVNJRF9CSVRTKQorCQkJICAgICB8IChlYSA+PiBTSURfU0hJRlQpKTsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFkgKi8KKwogI2VuZGlmIC8qIF9QUEM2NF9NTVVfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9tbXVfY29udGV4dC5oCmluZGV4IGMyZThlMDQuLjc3YTc0MzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvbW11X2NvbnRleHQuaApAQCAtODQsODYgKzg0LDQgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLS8qIFZTSUQgYWxsb2NhdGlvbgotICogPT09PT09PT09PT09PT09Ci0gKgotICogV2UgZmlyc3QgZ2VuZXJhdGUgYSAzNi1iaXQgInByb3RvLVZTSUQiLiAgRm9yIGtlcm5lbCBhZGRyZXNzZXMgdGhpcwotICogaXMgZXF1YWwgdG8gdGhlIEVTSUQsIGZvciB1c2VyIGFkZHJlc3NlcyBpdCBpczoKLSAqCShjb250ZXh0IDw8IDE1KSB8IChlc2lkICYgMHg3ZmZmKQotICoKLSAqIFRoZSB0d28gZm9ybXMgYXJlIGRpc3Rpbmd1aXNoYWJsZSBiZWNhdXNlIHRoZSB0b3AgYml0IGlzIDAgZm9yIHVzZXIKLSAqIGFkZHJlc3Nlcywgd2hlcmVhcyB0aGUgdG9wIHR3byBiaXRzIGFyZSAxIGZvciBrZXJuZWwgYWRkcmVzc2VzLgotICogUHJvdG8tVlNJRHMgd2l0aCB0aGUgdG9wIHR3byBiaXRzIGVxdWFsIHRvIDBiMTAgYXJlIHJlc2VydmVkIGZvcgotICogbm93LgotICoKLSAqIFRoZSBwcm90by1WU0lEcyBhcmUgdGhlbiBzY3JhbWJsZWQgaW50byByZWFsIFZTSURzIHdpdGggdGhlCi0gKiBtdWx0aXBsaWNhdGl2ZSBoYXNoOgotICoKLSAqCVZTSUQgPSAocHJvdG8tVlNJRCAqIFZTSURfTVVMVElQTElFUikgJSBWU0lEX01PRFVMVVMKLSAqCXdoZXJlCVZTSURfTVVMVElQTElFUiA9IDI2ODQzNTM5OSA9IDB4RkZGRkZDNwotICoJCVZTSURfTU9EVUxVUyA9IDJeMzYtMSA9IDB4RkZGRkZGRkZGCi0gKgotICogVGhpcyBzY3JhbWJsZSBpcyBvbmx5IHdlbGwgZGVmaW5lZCBmb3IgcHJvdG8tVlNJRHMgYmVsb3cKLSAqIDB4RkZGRkZGRkZGLCBzbyBib3RoIHByb3RvLVZTSUQgYW5kIGFjdHVhbCBWU0lEIDB4RkZGRkZGRkZGIGFyZQotICogcmVzZXJ2ZWQuICBWU0lEX01VTFRJUExJRVIgaXMgcHJpbWUsIHNvIGluIHBhcnRpY3VsYXIgaXQgaXMKLSAqIGNvLXByaW1lIHRvIFZTSURfTU9EVUxVUywgbWFraW5nIHRoaXMgYSAxOjEgc2NyYW1ibGluZyBmdW5jdGlvbi4KLSAqIEJlY2F1c2UgdGhlIG1vZHVsdXMgaXMgMl5uLTEgd2UgY2FuIGNvbXB1dGUgaXQgZWZmaWNpZW50bHkgd2l0aG91dAotICogYSBkaXZpZGUgb3IgZXh0cmEgbXVsdGlwbHkgKHNlZSBiZWxvdykuCi0gKgotICogVGhpcyBzY2hlbWUgaGFzIHNldmVyYWwgYWR2YW50YWdlcyBvdmVyIG9sZGVyIG1ldGhvZHM6Ci0gKgotICogCS0gV2UgaGF2ZSBWU0lEcyBhbGxvY2F0ZWQgZm9yIGV2ZXJ5IGtlcm5lbCBhZGRyZXNzCi0gKiAoaS5lLiBldmVyeXRoaW5nIGFib3ZlIDB4QzAwMDAwMDAwMDAwMDAwMCksIGV4Y2VwdCB0aGUgdmVyeSB0b3AKLSAqIHNlZ21lbnQsIHdoaWNoIHNpbXBsaWZpZXMgc2V2ZXJhbCB0aGluZ3MuCi0gKgotICogCS0gV2UgYWxsb3cgZm9yIDE1IHNpZ25pZmljYW50IGJpdHMgb2YgRVNJRCBhbmQgMjAgYml0cyBvZgotICogY29udGV4dCBmb3IgdXNlciBhZGRyZXNzZXMuICBpLmUuIDhUICg0MyBiaXRzKSBvZiBhZGRyZXNzIHNwYWNlIGZvcgotICogdXAgdG8gMU0gY29udGV4dHMgKGFsdGhvdWdoIHRoZSBwYWdlIHRhYmxlIHN0cnVjdHVyZSBhbmQgY29udGV4dAotICogYWxsb2NhdGlvbiB3aWxsIG5lZWQgY2hhbmdlcyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGlzKS4KLSAqCi0gKiAJLSBUaGUgc2NyYW1ibGUgZnVuY3Rpb24gZ2l2ZXMgcm9idXN0IHNjYXR0ZXJpbmcgaW4gdGhlIGhhc2gKLSAqIHRhYmxlIChhdCBsZWFzdCBiYXNlZCBvbiBzb21lIGluaXRpYWwgcmVzdWx0cykuICBUaGUgcHJldmlvdXMKLSAqIG1ldGhvZCB3YXMgbW9yZSBzdXNjZXB0aWJsZSB0byBwYXRob2xvZ2ljYWwgY2FzZXMgZ2l2aW5nIGV4Y2Vzc2l2ZQotICogaGFzaCBjb2xsaXNpb25zLgotICovCi0KLS8qCi0gKiBXQVJOSU5HIC0gSWYgeW91IGNoYW5nZSB0aGVzZSB5b3UgbXVzdCBtYWtlIHN1cmUgdGhlIGFzbQotICogaW1wbGVtZW50YXRpb25zIGluIHNsYl9hbGxvY2F0ZSgpLCBkb19zdGFiX2JvbHRlZCBhbmQgbW11LmgKLSAqIChBU01fVlNJRF9TQ1JBTUJMRSBtYWNybykgYXJlIGNoYW5nZWQgYWNjb3JkaW5nbHkuCi0gKgotICogWW91J2xsIGFsc28gbmVlZCB0byBjaGFuZ2UgdGhlIHByZWNvbXB1dGVkIFZTSUQgdmFsdWVzIGluIGhlYWQuUwotICogd2hpY2ggYXJlIHVzZWQgYnkgdGhlIGlTZXJpZXMgZmlybXdhcmUuCi0gKi8KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZzaWRfc2NyYW1ibGUodW5zaWduZWQgbG9uZyBwcm90b3ZzaWQpCi17Ci0jaWYgMAotCS8qIFRoZSBjb2RlIGJlbG93IGlzIGVxdWl2YWxlbnQgdG8gdGhpcyBmdW5jdGlvbiBmb3IgYXJndW1lbnRzCi0JICogPCAyXlZTSURfQklUUywgd2hpY2ggaXMgYWxsIHRoaXMgc2hvdWxkIGV2ZXIgYmUgY2FsbGVkCi0JICogd2l0aC4gIEhvd2V2ZXIgZ2NjIGlzIG5vdCBjbGV2ZXIgZW5vdWdoIHRvIGNvbXB1dGUgdGhlCi0JICogbW9kdWx1cyAoMl5uLTEpIHdpdGhvdXQgYSBzZWNvbmQgbXVsdGlwbHkuICovCi0JcmV0dXJuICgocHJvdG92c2lkICogVlNJRF9NVUxUSVBMSUVSKSAlIFZTSURfTU9EVUxVUyk7Ci0jZWxzZSAvKiAxICovCi0JdW5zaWduZWQgbG9uZyB4OwotCi0JeCA9IHByb3RvdnNpZCAqIFZTSURfTVVMVElQTElFUjsKLQl4ID0gKHggPj4gVlNJRF9CSVRTKSArICh4ICYgVlNJRF9NT0RVTFVTKTsKLQlyZXR1cm4gKHggKyAoKHgrMSkgPj4gVlNJRF9CSVRTKSkgJiBWU0lEX01PRFVMVVM7Ci0jZW5kaWYgLyogMSAqLwotfQotCi0vKiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIGFkZHJlc3NlcyA+PSBLRVJORUxCQVNFICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2tlcm5lbF92c2lkKHVuc2lnbmVkIGxvbmcgZWEpCi17Ci0JcmV0dXJuIHZzaWRfc2NyYW1ibGUoZWEgPj4gU0lEX1NISUZUKTsKLX0KLQotLyogVGhpcyBpcyBvbmx5IHZhbGlkIGZvciB1c2VyIGFkZHJlc3NlcyAod2hpY2ggYXJlIGJlbG93IDJeNDEpICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3ZzaWQodW5zaWduZWQgbG9uZyBjb250ZXh0LCB1bnNpZ25lZCBsb25nIGVhKQotewotCXJldHVybiB2c2lkX3NjcmFtYmxlKChjb250ZXh0IDw8IFVTRVJfRVNJRF9CSVRTKQotCQkJICAgICB8IChlYSA+PiBTSURfU0hJRlQpKTsKLX0KLQogI2VuZGlmIC8qIF9fUFBDNjRfTU1VX0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGFnZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcGFnZS5oCmluZGV4IDIwZTBmMTkuLmJjZDIxNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wYWdlLmgKQEAgLTIzLDcgKzIzLDYgQEAKICNkZWZpbmUgUEFHRV9TSElGVAkxMgogI2RlZmluZSBQQUdFX1NJWkUJKEFTTV9DT05TVCgxKSA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBQQUdFX01BU0sJKH4oUEFHRV9TSVpFLTEpKQotI2RlZmluZSBQQUdFX09GRlNFVF9NQVNLIChQQUdFX1NJWkUtMSkKIAogI2RlZmluZSBTSURfU0hJRlQgICAgICAgMjgKICNkZWZpbmUgU0lEX01BU0sgICAgICAgIDB4ZmZmZmZmZmZmVUwKQEAgLTg1LDkgKzg0LDYgQEAKIC8qIGFsaWduIGFkZHIgb24gYSBzaXplIGJvdW5kYXJ5IC0gYWRqdXN0IGFkZHJlc3MgdXAgaWYgbmVlZGVkICovCiAjZGVmaW5lIF9BTElHTihhZGRyLHNpemUpICAgICBfQUxJR05fVVAoYWRkcixzaXplKQogCi0vKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byB0aGUgKG5leHQpIGRvdWJsZSB3b3JkIGJvdW5kYXJ5ICovCi0jZGVmaW5lIERPVUJMRVdPUkRfQUxJR04oYWRkcikJX0FMSUdOKGFkZHIsc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotCiAvKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byB0aGUgKG5leHQpIHBhZ2UgYm91bmRhcnkgKi8KICNkZWZpbmUgUEFHRV9BTElHTihhZGRyKQlfQUxJR04oYWRkciwgUEFHRV9TSVpFKQogCkBAIC0xMDAsNyArOTYsNiBAQAogI2RlZmluZSBSRUdJT05fU0laRSAgIDRVTAogI2RlZmluZSBSRUdJT05fU0hJRlQgIDYwVUwKICNkZWZpbmUgUkVHSU9OX01BU0sgICAoKCgxVUw8PFJFR0lPTl9TSVpFKS0xVUwpPDxSRUdJT05fU0hJRlQpCi0jZGVmaW5lIFJFR0lPTl9TVFJJREUgKDFVTCA8PCBSRUdJT05fU0hJRlQpCiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfcGFnZSh2b2lkICphZGRyKQogewpAQCAtMjA5LDEzICsyMDQsMTMgQEAKICNkZWZpbmUgVk1BTExPQ0JBU0UgICAgIEFTTV9DT05TVCgweEQwMDAwMDAwMDAwMDAwMDApCiAjZGVmaW5lIElPUkVHSU9OQkFTRSAgICBBU01fQ09OU1QoMHhFMDAwMDAwMDAwMDAwMDAwKQogCi0jZGVmaW5lIElPX1JFR0lPTl9JRCAgICAgICAoSU9SRUdJT05CQVNFPj5SRUdJT05fU0hJRlQpCi0jZGVmaW5lIFZNQUxMT0NfUkVHSU9OX0lEICAoVk1BTExPQ0JBU0U+PlJFR0lPTl9TSElGVCkKLSNkZWZpbmUgS0VSTkVMX1JFR0lPTl9JRCAgIChLRVJORUxCQVNFPj5SRUdJT05fU0hJRlQpCisjZGVmaW5lIElPX1JFR0lPTl9JRCAgICAgICAoSU9SRUdJT05CQVNFID4+IFJFR0lPTl9TSElGVCkKKyNkZWZpbmUgVk1BTExPQ19SRUdJT05fSUQgIChWTUFMTE9DQkFTRSA+PiBSRUdJT05fU0hJRlQpCisjZGVmaW5lIEtFUk5FTF9SRUdJT05fSUQgICAoS0VSTkVMQkFTRSA+PiBSRUdJT05fU0hJRlQpCiAjZGVmaW5lIFVTRVJfUkVHSU9OX0lEICAgICAoMFVMKQotI2RlZmluZSBSRUdJT05fSUQoWCkJICAgKCgodW5zaWduZWQgbG9uZykoWCkpPj5SRUdJT05fU0hJRlQpCisjZGVmaW5lIFJFR0lPTl9JRChlYSkJICAgKCgodW5zaWduZWQgbG9uZykoZWEpKSA+PiBSRUdJT05fU0hJRlQpCiAKLSNkZWZpbmUgX19icG5fdG9fYmEoeCkgKCgoKHVuc2lnbmVkIGxvbmcpKHgpKTw8UEFHRV9TSElGVCkgKyBLRVJORUxCQVNFKQorI2RlZmluZSBfX2Jwbl90b19iYSh4KSAoKCgodW5zaWduZWQgbG9uZykoeCkpIDw8IFBBR0VfU0hJRlQpICsgS0VSTkVMQkFTRSkKICNkZWZpbmUgX19iYV90b19icG4oeCkgKCgoKHVuc2lnbmVkIGxvbmcpKHgpKSAmIH5SRUdJT05fTUFTSykgPj4gUEFHRV9TSElGVCkKIAogI2RlZmluZSBfX3ZhKHgpICgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkgKyBLRVJORUxCQVNFKSkKQEAgLTI1MiwxMCArMjQ3LDE5IEBACiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGlmIGEgcHJvZ3JhbSBkb2Vzbid0IGhhdmUgYSBQVF9HTlVfU1RBQ0sKLSAqIHByb2dyYW0gaGVhZGVyIGVudHJ5LgorICogcHJvZ3JhbSBoZWFkZXIgZW50cnkuIFRoZSBQUEM2NCBFTEYgQUJJIGhhcyBhIG5vbiBleGVjdXRhYmxlIHN0YWNrCisgKiBzdGFjayBieSBkZWZhdWx0LCBzbyBpbiB0aGUgYWJzZW5zZSBvZiBhIFBUX0dOVV9TVEFDSyBwcm9ncmFtIGhlYWRlcgorICogd2UgdHVybiBleGVjdXRlIHBlcm1pc3Npb24gb2ZmLgogICovCi0jZGVmaW5lIFZNX1NUQUNLX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCi0JCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisjZGVmaW5lIFZNX1NUQUNLX0RFRkFVTFRfRkxBR1MzMgkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQyB8IFwKKwkJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisKKyNkZWZpbmUgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUzY0CShWTV9SRUFEIHwgVk1fV1JJVEUgfCBcCisJCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQorCisjZGVmaW5lIFZNX1NUQUNLX0RFRkFVTFRfRkxBR1MgXAorCSh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkgPyBcCisJIFZNX1NUQUNLX0RFRkFVTFRfRkxBR1MzMiA6IFZNX1NUQUNLX0RFRkFVTFRfRkxBR1M2NCkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfUFBDNjRfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wZ2FsbG9jLmgKaW5kZXggMTYyMzJkNy4uNGZjNGI3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BnYWxsb2MuaApAQCAtMjcsNyArMjcsNyBAQAogCWttZW1fY2FjaGVfZnJlZSh6ZXJvX2NhY2hlLCBwZ2QpOwogfQogCi0jZGVmaW5lIHBnZF9wb3B1bGF0ZShNTSwgUEdELCBQTUQpCXBnZF9zZXQoUEdELCBQTUQpCisjZGVmaW5lIHB1ZF9wb3B1bGF0ZShNTSwgUFVELCBQTUQpCXB1ZF9zZXQoUFVELCBQTUQpCiAKIHN0YXRpYyBpbmxpbmUgcG1kX3QgKgogcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcGd0YWJsZS5oCmluZGV4IGEyNjEyMDUuLjI2NGM0ZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wZ3RhYmxlLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9QUEM2NF9QR1RBQkxFX0gKICNkZWZpbmUgX1BQQzY0X1BHVEFCTEVfSAogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+Ci0KIC8qCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBhbmQgZGVmaW5lcyBuZWNlc3NhcnkgdG8gbW9kaWZ5IGFuZCB1c2UKICAqIHRoZSBwcGM2NCBoYXNoZWQgcGFnZSB0YWJsZS4KQEAgLTE3LDE1ICsxNSw3IEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKLS8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCi0jZGVmaW5lIFBNRF9TSElGVAkoUEFHRV9TSElGVCArIFBBR0VfU0hJRlQgLSAzKQotI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKLSNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCi0KLS8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLwotI2RlZmluZSBQR0RJUl9TSElGVAkoUEFHRV9TSElGVCArIChQQUdFX1NISUZUIC0gMykgKyAoUEFHRV9TSElGVCAtIDIpKQotI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCi0jZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmg+CiAKIC8qCiAgKiBFbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbC4gIFRoZSBQVEUgbGV2ZWwgbXVzdCB1c2UgYSA2NGIgcmVjb3JkCkBAIC00MCw0MCArMzAsMzAgQEAKICNkZWZpbmUgUFRSU19QRVJfUE1ECSgxIDw8IFBNRF9JTkRFWF9TSVpFKQogI2RlZmluZSBQVFJTX1BFUl9QR0QJKDEgPDwgUEdEX0lOREVYX1NJWkUpCiAKLSNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKDEwMjQpCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisvKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyBQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQogCi0jZGVmaW5lIEVBRERSX1NJWkUgKFBURV9JTkRFWF9TSVpFICsgUE1EX0lOREVYX1NJWkUgKyBcCi0gICAgICAgICAgICAgICAgICAgIFBHRF9JTkRFWF9TSVpFICsgUEFHRV9TSElGVCkgCisvKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJKFBNRF9TSElGVCArIFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKKworI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAogCiAvKgogICogU2l6ZSBvZiBFQSByYW5nZSBtYXBwZWQgYnkgb3VyIHBhZ2V0YWJsZXMuCiAgKi8KLSNkZWZpbmUgUEdUQUJMRV9FQV9CSVRTCTQxCi0jZGVmaW5lIFBHVEFCTEVfRUFfTUFTSwkoKDFVTDw8UEdUQUJMRV9FQV9CSVRTKS0xKQorI2RlZmluZSBFQUREUl9TSVpFIChQVEVfSU5ERVhfU0laRSArIFBNRF9JTkRFWF9TSVpFICsgXAorICAgICAgICAgICAgICAgICAgICBQR0RfSU5ERVhfU0laRSArIFBBR0VfU0hJRlQpCisjZGVmaW5lIEVBRERSX01BU0sgKCgxVUwgPDwgRUFERFJfU0laRSkgLSAxKQogCiAvKgogICogRGVmaW5lIHRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSB2bWFsbG9jIFZNIGFyZWEuCiAgKi8KICNkZWZpbmUgVk1BTExPQ19TVEFSVCAoMHhEMDAwMDAwMDAwMDAwMDAwdWwpCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgKFZNQUxMT0NfU1RBUlQgKyBQR1RBQkxFX0VBX01BU0spCi0KLS8qCi0gKiBEZWZpbmUgdGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIGltYWxsb2MgVk0gYXJlYS4KLSAqICh1c2VkIGZvciBpb3JlbWFwKQotICovCi0jZGVmaW5lIElNQUxMT0NfU1RBUlQgICAgIChpb3JlbWFwX2JvdCkKLSNkZWZpbmUgSU1BTExPQ19WTUFERFIoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSkKLSNkZWZpbmUgUEhCU19JT19CQVNFICAJICAoMHhFMDAwMDAwMDAwMDAwMDAwdWwpCS8qIFJlc2VydmUgMiBnaWdzIGZvciBQSEJzICovCi0jZGVmaW5lIElNQUxMT0NfQkFTRSAgICAgICgweEUwMDAwMDAwODAwMDAwMDB1bCkgIAotI2RlZmluZSBJTUFMTE9DX0VORCAgICAgICAoSU1BTExPQ19CQVNFICsgUEdUQUJMRV9FQV9NQVNLKQotCi0vKgotICogRGVmaW5lIHRoZSB1c2VyIGFkZHJlc3MgcmFuZ2UKLSAqLwotI2RlZmluZSBVU0VSX1NUQVJUICgwVUwpCi0jZGVmaW5lIFVTRVJfRU5EICAgKFVTRVJfU1RBUlQgKyBQR1RBQkxFX0VBX01BU0spCi0KKyNkZWZpbmUgVk1BTExPQ19FTkQgICAoVk1BTExPQ19TVEFSVCArIEVBRERSX01BU0spCiAKIC8qCiAgKiBCaXRzIGluIGEgbGludXgtc3R5bGUgUFRFLiAgVGhlc2UgbWF0Y2ggdGhlIGJpdHMgaW4gdGhlCkBAIC0xNjgsMTAgKzE0OCw2IEBACiAvKiBzaGlmdCB0byBwdXQgcGFnZSBudW1iZXIgaW50byBwdGUgKi8KICNkZWZpbmUgUFRFX1NISUZUICgxNykKIAotLyogV2UgYWxsb3cgMl40MSBieXRlcyBvZiByZWFsIG1lbW9yeSwgc28gd2UgbmVlZCAyOSBiaXRzIGluIHRoZSBQTUQKLSAqIHRvIGdpdmUgdGhlIFBURSBwYWdlIG51bWJlci4gIFRoZSBib3R0b20gdHdvIGJpdHMgYXJlIGZvciBmbGFncy4gKi8KLSNkZWZpbmUgUE1EX1RPX1BURVBBR0VfU0hJRlQgKDIpCi0KICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC0yMDAsMTMgKzE3NiwxNCBAQAogICovCiAjZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQogCi0jZGVmaW5lIHBmbl9wdGUocGZuLHBncHJvdCkJCQkJCQlcCi0oewkJCQkJCQkJCVwKLQlwdGVfdCBwdGU7CQkJCQkJCVwKLQlwdGVfdmFsKHB0ZSkgPSAoKHVuc2lnbmVkIGxvbmcpKHBmbikgPDwgUFRFX1NISUZUKSB8ICAgCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICBwZ3Byb3RfdmFsKHBncHJvdCk7CQkJCVwKLQlwdGU7CQkJCQkJCQlcCi19KQorc3RhdGljIGlubGluZSBwdGVfdCBwZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwZ3Byb3QpCit7CisJcHRlX3QgcHRlOworCisKKwlwdGVfdmFsKHB0ZSkgPSAocGZuIDw8IFBURV9TSElGVCkgfCBwZ3Byb3RfdmFsKHBncHJvdCk7CisJcmV0dXJuIHB0ZTsKK30KIAogI2RlZmluZSBwdGVfbW9kaWZ5KF9wdGUsIG5ld3Byb3QpIFwKICAgKF9fcHRlKChwdGVfdmFsKF9wdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KSkpCkBAIC0yMjAsMjAgKzE5NywyMCBAQAogI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKIAogI2RlZmluZSBwbWRfc2V0KHBtZHAsIHB0ZXApIAlcCi0JKHBtZF92YWwoKihwbWRwKSkgPSAoX19iYV90b19icG4ocHRlcCkgPDwgUE1EX1RPX1BURVBBR0VfU0hJRlQpKQorCShwbWRfdmFsKCoocG1kcCkpID0gX19iYV90b19icG4ocHRlcCkpCiAjZGVmaW5lIHBtZF9ub25lKHBtZCkJCSghcG1kX3ZhbChwbWQpKQogI2RlZmluZQlwbWRfYmFkKHBtZCkJCShwbWRfdmFsKHBtZCkgPT0gMCkKICNkZWZpbmUJcG1kX3ByZXNlbnQocG1kKQkocG1kX3ZhbChwbWQpICE9IDApCiAjZGVmaW5lCXBtZF9jbGVhcihwbWRwKQkJKHBtZF92YWwoKihwbWRwKSkgPSAwKQotI2RlZmluZSBwbWRfcGFnZV9rZXJuZWwocG1kKQlcCi0JKF9fYnBuX3RvX2JhKHBtZF92YWwocG1kKSA+PiBQTURfVE9fUFRFUEFHRV9TSElGVCkpCisjZGVmaW5lIHBtZF9wYWdlX2tlcm5lbChwbWQpCShfX2Jwbl90b19iYShwbWRfdmFsKHBtZCkpKQogI2RlZmluZSBwbWRfcGFnZShwbWQpCQl2aXJ0X3RvX3BhZ2UocG1kX3BhZ2Vfa2VybmVsKHBtZCkpCi0jZGVmaW5lIHBnZF9zZXQocGdkcCwgcG1kcCkJKHBnZF92YWwoKihwZ2RwKSkgPSAoX19iYV90b19icG4ocG1kcCkpKQotI2RlZmluZSBwZ2Rfbm9uZShwZ2QpCQkoIXBnZF92YWwocGdkKSkKLSNkZWZpbmUgcGdkX2JhZChwZ2QpCQkoKHBnZF92YWwocGdkKSkgPT0gMCkKLSNkZWZpbmUgcGdkX3ByZXNlbnQocGdkKQkocGdkX3ZhbChwZ2QpICE9IDBVTCkKLSNkZWZpbmUgcGdkX2NsZWFyKHBnZHApCQkocGdkX3ZhbCgqKHBnZHApKSA9IDBVTCkKLSNkZWZpbmUgcGdkX3BhZ2UocGdkKQkJKF9fYnBuX3RvX2JhKHBnZF92YWwocGdkKSkpIAorCisjZGVmaW5lIHB1ZF9zZXQocHVkcCwgcG1kcCkJKHB1ZF92YWwoKihwdWRwKSkgPSAoX19iYV90b19icG4ocG1kcCkpKQorI2RlZmluZSBwdWRfbm9uZShwdWQpCQkoIXB1ZF92YWwocHVkKSkKKyNkZWZpbmUgcHVkX2JhZChwdWQpCQkoKHB1ZF92YWwocHVkKSkgPT0gMFVMKQorI2RlZmluZSBwdWRfcHJlc2VudChwdWQpCShwdWRfdmFsKHB1ZCkgIT0gMFVMKQorI2RlZmluZSBwdWRfY2xlYXIocHVkcCkJCShwdWRfdmFsKCoocHVkcCkpID0gMFVMKQorI2RlZmluZSBwdWRfcGFnZShwdWQpCQkoX19icG5fdG9fYmEocHVkX3ZhbChwdWQpKSkKIAogLyogCiAgKiBGaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkuICBXZSBjb21iaW5lIHRoZSBhZGRyZXNzIHJlZ2lvbiAKQEAgLTI0NSwxMiArMjIyLDEzIEBACiAjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpCSAoKG1tKS0+cGdkICsgcGdkX2luZGV4KGFkZHJlc3MpKQogCiAvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCi0jZGVmaW5lIHBtZF9vZmZzZXQoZGlyLGFkZHIpIFwKLSAgKChwbWRfdCAqKSBwZ2RfcGFnZSgqKGRpcikpICsgKCgoYWRkcikgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQgLSAxKSkpCisjZGVmaW5lIHBtZF9vZmZzZXQocHVkcCxhZGRyKSBcCisgICgocG1kX3QgKikgcHVkX3BhZ2UoKihwdWRwKSkgKyAoKChhZGRyKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpKSkKIAogLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCiAjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpcixhZGRyKSBcCi0gICgocHRlX3QgKikgcG1kX3BhZ2Vfa2VybmVsKCooZGlyKSkgKyAoKChhZGRyKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkpCisgICgocHRlX3QgKikgcG1kX3BhZ2Vfa2VybmVsKCooZGlyKSkgXAorICsgKCgoYWRkcikgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpKQogCiAjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpcixhZGRyKQlwdGVfb2Zmc2V0X2tlcm5lbCgoZGlyKSwgKGFkZHIpKQogI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLGFkZHIpCXB0ZV9vZmZzZXRfa2VybmVsKChkaXIpLCAoYWRkcikpCkBAIC0yNjQsOCArMjQyLDYgQEAKIC8qIHRvIGZpbmQgYW4gZW50cnkgaW4gdGhlIGlvcmVtYXAgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KICNkZWZpbmUgcGdkX29mZnNldF9pKGFkZHJlc3MpIChpb3JlbWFwX3BnZCArIHBnZF9pbmRleChhZGRyZXNzKSkKIAotI2RlZmluZSBwYWdlc190b19tYih4KQkJKCh4KSA+PiAoMjAtUEFHRV9TSElGVCkpCi0KIC8qCiAgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCiAgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCkBAIC00NDAsNyArNDE2LDcgQEAKIAkJcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTsKIAkJZmx1c2hfdGxiX3BlbmRpbmcoKTsKIAl9Ci0JKnB0ZXAgPSBfX3B0ZShwdGVfdmFsKHB0ZSkpICYgfl9QQUdFX0hQVEVGTEFHUzsKKwkqcHRlcCA9IF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IUFRFRkxBR1MpOwogfQogCiAvKiBTZXQgdGhlIGRpcnR5IGFuZC9vciBhY2Nlc3NlZCBiaXRzIGF0b21pY2FsbHkgaW4gYSBsaW51eCBQVEUsIHRoaXMKQEAgLTQ4NSwxOCArNDYxLDEzIEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGlvcmVtYXBfYm90LCBpb3JlbWFwX2Jhc2U7CiAKLSNkZWZpbmUgVVNFUl9QR0RfUFRSUyAoUEFHRV9PRkZTRVQgPj4gUEdESVJfU0hJRlQpCi0jZGVmaW5lIEtFUk5FTF9QR0RfUFRSUyAoUFRSU19QRVJfUEdELVVTRVJfUEdEX1BUUlMpCi0KLSNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKLQlwcmludGsoIiVzOiVkOiBiYWQgcHRlICUwMTZseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcHRlX3ZhbChlKSkKICNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKIAlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwOHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBtZF92YWwoZSkpCiAjZGVmaW5lIHBnZF9FUlJPUihlKSBcCiAJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDh4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQogCi1leHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbMTAyNF07Ci1leHRlcm4gcGdkX3QgaW9yZW1hcF9kaXJbMTAyNF07CitleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbXTsKK2V4dGVybiBwZ2RfdCBpb3JlbWFwX2RpcltdOwogCiBleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKIApAQCAtNTM4LDQzICs1MDksMTEgQEAKICAqLwogI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCiAKLSNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHZhZGRyLCBwYWRkciwgc2l6ZSwgcHJvdCkJCVwKLQkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIChwYWRkcikgPj4gUEFHRV9TSElGVCwgc2l6ZSwgcHJvdCkKLQogI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQkJXAogCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQogCi0jZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4pCi0jZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCTAKLSNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbikKLQogdm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCk7CiAKLWV4dGVybiB2b2lkIGhwdGVfaW5pdF9uYXRpdmUodm9pZCk7Ci1leHRlcm4gdm9pZCBocHRlX2luaXRfbHBhcih2b2lkKTsKLWV4dGVybiB2b2lkIGhwdGVfaW5pdF9pU2VyaWVzKHZvaWQpOwotCi0vKiBpbWFsbG9jIHJlZ2lvbiB0eXBlcyAqLwotI2RlZmluZSBJTV9SRUdJT05fVU5VU0VECTB4MQotI2RlZmluZSBJTV9SRUdJT05fU1VCU0VUCTB4MgotI2RlZmluZSBJTV9SRUdJT05fRVhJU1RTCTB4NAotI2RlZmluZSBJTV9SRUdJT05fT1ZFUkxBUAkweDgKLSNkZWZpbmUgSU1fUkVHSU9OX1NVUEVSU0VUCTB4MTAKLQotZXh0ZXJuIHN0cnVjdCB2bV9zdHJ1Y3QgKiBpbV9nZXRfZnJlZV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gc3RydWN0IHZtX3N0cnVjdCAqIGltX2dldF9hcmVhKHVuc2lnbmVkIGxvbmcgdl9hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQlpbnQgcmVnaW9uX3R5cGUpOwotdW5zaWduZWQgbG9uZyBpbV9mcmVlKHZvaWQgKmFkZHIpOwotCi1leHRlcm4gbG9uZyBwU2VyaWVzX2xwYXJfaHB0ZV9pbnNlcnQodW5zaWduZWQgbG9uZyBocHRlX2dyb3VwLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YSwgdW5zaWduZWQgbG9uZyBwcnBuLAotCQkJCSAgICAgaW50IHNlY29uZGFyeSwgdW5zaWduZWQgbG9uZyBocHRlZmxhZ3MsCi0JCQkJICAgICBpbnQgYm9sdGVkLCBpbnQgbGFyZ2UpOwotCi1leHRlcm4gbG9uZyBuYXRpdmVfaHB0ZV9pbnNlcnQodW5zaWduZWQgbG9uZyBocHRlX2dyb3VwLCB1bnNpZ25lZCBsb25nIHZhLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcHJwbiwgaW50IHNlY29uZGFyeSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGhwdGVmbGFncywgaW50IGJvbHRlZCwgaW50IGxhcmdlKTsKLQogLyoKICAqIGZpbmRfbGludXhfcHRlIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgYSBsaW51eCBwdGUgZm9yIGEgZ2l2ZW4gCiAgKiBlZmZlY3RpdmUgYWRkcmVzcyBhbmQgZGlyZWN0b3J5LiAgSWYgbm90IGZvdW5kLCBpdCByZXR1cm5zIHplcm8uCkBAIC01ODIsMTkgKzUyMSwyMiBAQAogc3RhdGljIGlubGluZSBwdGVfdCAqZmluZF9saW51eF9wdGUocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGVhKQogewogCXBnZF90ICpwZzsKKwlwdWRfdCAqcHU7CiAJcG1kX3QgKnBtOwogCXB0ZV90ICpwdCA9IE5VTEw7CiAJcHRlX3QgcHRlOwogCiAJcGcgPSBwZ2RpciArIHBnZF9pbmRleChlYSk7CiAJaWYgKCFwZ2Rfbm9uZSgqcGcpKSB7Ci0KLQkJcG0gPSBwbWRfb2Zmc2V0KHBnLCBlYSk7Ci0JCWlmIChwbWRfcHJlc2VudCgqcG0pKSB7IAotCQkJcHQgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbSwgZWEpOwotCQkJcHRlID0gKnB0OwotCQkJaWYgKCFwdGVfcHJlc2VudChwdGUpKQotCQkJCXB0ID0gTlVMTDsKKwkJcHUgPSBwdWRfb2Zmc2V0KHBnLCBlYSk7CisJCWlmICghcHVkX25vbmUoKnB1KSkgeworCQkJcG0gPSBwbWRfb2Zmc2V0KHB1LCBlYSk7CisJCQlpZiAocG1kX3ByZXNlbnQoKnBtKSkgeworCQkJCXB0ID0gcHRlX29mZnNldF9rZXJuZWwocG0sIGVhKTsKKwkJCQlwdGUgPSAqcHQ7CisJCQkJaWYgKCFwdGVfcHJlc2VudChwdGUpKQorCQkJCQlwdCA9IE5VTEw7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc2lnbmFsLmgKaW5kZXggZmU1NDAxYS4uNDMyZGY3ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NpZ25hbC5oCkBAIC05Niw0NyArOTYsMjAgQEAKIAogI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CiAjZGVmaW5lIFNJR1NUS1NaCTgxOTIKLSNpZmRlZiBfX0tFUk5FTF9fCiAKLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCi0jZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCi0jZW5kaWYKLQotI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLwotI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCi0jZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAyCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLwotCi0vKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwotdHlwZWRlZiB2b2lkIF9fc2lnZnVuY3Rpb24oaW50KTsKLXR5cGVkZWYgX19zaWdmdW5jdGlvbiBfX3VzZXIgKiBfX3NpZ2hhbmRsZXJfdDsKLQotLyogVHlwZSBvZiB0aGUgcmVzdG9yZXIgZnVuY3Rpb24gKi8KLXR5cGVkZWYgdm9pZCBfX3NpZ3Jlc3RvcmVyKHZvaWQpOwotdHlwZWRlZiBfX3NpZ3Jlc3RvcmVyIF9fdXNlciAqIF9fc2lncmVzdG9yZXJfdDsKLQotI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KLSNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KLSNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KIAogc3RydWN0IG9sZF9zaWdhY3Rpb24gewogCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CiAJb2xkX3NpZ3NldF90IHNhX21hc2s7CiAJdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLQlfX3NpZ3Jlc3RvcmVyX3Qgc2FfcmVzdG9yZXI7CisJX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7CiB9OwogCiBzdHJ1Y3Qgc2lnYWN0aW9uIHsKIAlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwogCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0JX19zaWdyZXN0b3Jlcl90IHNhX3Jlc3RvcmVyOworCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOwogCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zcGlubG9jay5oCmluZGV4IGE5YjJhMTEuLmFjZDExNTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvc3BpbmxvY2suaApAQCAtMTEwLDcgKzExMCw3IEBACiAJCQlITVRfbG93KCk7CiAJCQlpZiAoU0hBUkVEX1BST0NFU1NPUikKIAkJCQlfX3NwaW5feWllbGQobG9jayk7Ci0JCX0gd2hpbGUgKGxpa2VseShsb2NrLT5sb2NrICE9IDApKTsKKwkJfSB3aGlsZSAodW5saWtlbHkobG9jay0+bG9jayAhPSAwKSk7CiAJCUhNVF9tZWRpdW0oKTsKIAl9CiB9CkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJCUhNVF9sb3coKTsKIAkJCWlmIChTSEFSRURfUFJPQ0VTU09SKQogCQkJCV9fc3Bpbl95aWVsZChsb2NrKTsKLQkJfSB3aGlsZSAobGlrZWx5KGxvY2stPmxvY2sgIT0gMCkpOworCQl9IHdoaWxlICh1bmxpa2VseShsb2NrLT5sb2NrICE9IDApKTsKIAkJSE1UX21lZGl1bSgpOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFnc19kaXMpOwogCX0KQEAgLTE5NCw3ICsxOTQsNyBAQAogCQkJSE1UX2xvdygpOwogCQkJaWYgKFNIQVJFRF9QUk9DRVNTT1IpCiAJCQkJX19yd195aWVsZChydyk7Ci0JCX0gd2hpbGUgKGxpa2VseShydy0+bG9jayA8IDApKTsKKwkJfSB3aGlsZSAodW5saWtlbHkocnctPmxvY2sgPCAwKSk7CiAJCUhNVF9tZWRpdW0oKTsKIAl9CiB9CkBAIC0yNTEsNyArMjUxLDcgQEAKIAkJCUhNVF9sb3coKTsKIAkJCWlmIChTSEFSRURfUFJPQ0VTU09SKQogCQkJCV9fcndfeWllbGQocncpOwotCQl9IHdoaWxlIChsaWtlbHkocnctPmxvY2sgIT0gMCkpOworCQl9IHdoaWxlICh1bmxpa2VseShydy0+bG9jayAhPSAwKSk7CiAJCUhNVF9tZWRpdW0oKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC94aWNzLmggYi9pbmNsdWRlL2FzbS1wcGM2NC94aWNzLmgKaW5kZXggMDAyN2RhNC4uZmRlYzVlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQveGljcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3hpY3MuaApAQCAtMzAsNyArMzAsNCBAQAogCiBleHRlcm4gc3RydWN0IHhpY3NfaXBpX3N0cnVjdCB4aWNzX2lwaV9tZXNzYWdlW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgZGVmYXVsdF9kaXN0cmliX3NlcnZlcjsKLWV4dGVybiB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3NlcnZlcl9zaXplOwotCiAjZW5kaWYgLyogX1BQQzY0X0tFUk5FTF9YSUNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvYnVnLmggYi9pbmNsdWRlL2FzbS1zMzkwL2J1Zy5oCmluZGV4IDJiOGQ2ZDQuLmEyZTc0MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9idWcuaApAQCAtMywxMiArMywxNSBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKKyNpZmRlZiBDT05GSUdfQlVHCiAjZGVmaW5lIEJVRygpIGRvIHsgXAogICAgICAgICBwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIubG9uZyAwIik7IFwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgSEFWRV9BUkNIX0JVRworI2VuZGlmCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2NtYi5oIGIvaW5jbHVkZS9hc20tczM5MC9jbWIuaAppbmRleCAxYmZlMmJkLi5kYWUxZGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2NtYi5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvY21iLmgKQEAgLTUyLDcgKzUyLDcgQEAKICNkZWZpbmUgQklPREFTRFJFQURBTExDTUIJX0lPV1IoREFTRF9JT0NUTF9MRVRURVIsMzMsc3RydWN0IGNtYmRhdGEpCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0KK3N0cnVjdCBjY3dfZGV2aWNlOwogLyoqCiAgKiBlbmFibGVfY21mKCkgLSBzd2l0Y2ggb24gdGhlIGNoYW5uZWwgbWVhc3VyZW1lbnQgZm9yIGEgc3BlY2lmaWMgZGV2aWNlCiAgKiAgQGNkZXY6CVRoZSBjY3cgZGV2aWNlIHRvIGJlIGVuYWJsZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZGVidWcuaCBiL2luY2x1ZGUvYXNtLXMzOTAvZGVidWcuaAppbmRleCAyOGVmMjM1Li42YmJjZGVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oCkBAIC00Myw3ICs0Myw3IEBACiAjZGVmaW5lIERFQlVHX09GRl9MRVZFTCAgICAgICAgICAgIC0xIC8qIGxldmVsIHdoZXJlIGRlYnVnIGlzIHN3aXRjaGVkIG9mZiAqLwogI2RlZmluZSBERUJVR19GTFVTSF9BTEwgICAgICAgICAgICAtMSAvKiBwYXJhbWV0ZXIgdG8gZmx1c2ggYWxsIGFyZWFzICovCiAjZGVmaW5lIERFQlVHX01BWF9WSUVXUyAgICAgICAgICAgIDEwIC8qIG1heCBudW1iZXIgb2Ygdmlld3MgaW4gcHJvYyBmcyAqLwotI2RlZmluZSBERUJVR19NQVhfUFJPQ0ZfTEVOICAgICAgICAxNiAvKiBtYXggbGVuZ3RoIGZvciBhIHByb2MgZmlsZSBuYW1lICovCisjZGVmaW5lIERFQlVHX01BWF9QUk9DRl9MRU4gICAgICAgIDY0IC8qIG1heCBsZW5ndGggZm9yIGEgcHJvYyBmaWxlIG5hbWUgKi8KICNkZWZpbmUgREVCVUdfREVGQVVMVF9MRVZFTCAgICAgICAgMyAgLyogaW5pdGlhbCBkZWJ1ZyBsZXZlbCAqLwogCiAjZGVmaW5lIERFQlVHX0RJUl9ST09UICJzMzkwZGJmIiAvKiBuYW1lIG9mIGRlYnVnIHJvb3QgZGlyZWN0b3J5IGluIHByb2MgZnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcGFnZS5oIGIvaW5jbHVkZS9hc20tczM5MC9wYWdlLmgKaW5kZXggNjE0ZTJhOS4uMmJlMjg3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wYWdlLmgKQEAgLTE2LDYgKzE2LDggQEAKICNkZWZpbmUgUEFHRV9TSElGVCAgICAgIDEyCiAjZGVmaW5lIFBBR0VfU0laRSAgICAgICAoMVVMIDw8IFBBR0VfU0hJRlQpCiAjZGVmaW5lIFBBR0VfTUFTSyAgICAgICAofihQQUdFX1NJWkUtMSkpCisjZGVmaW5lIFBBR0VfREVGQVVMVF9BQ0MJMAorI2RlZmluZSBQQUdFX0RFRkFVTFRfS0VZCShQQUdFX0RFRkFVTFRfQUNDIDw8IDQpCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcHJvY2Vzc29yLmgKaW5kZXggODhjMjcyYy4uZmI0NmU5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3Byb2Nlc3Nvci5oCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAlwc3dfdCB3YWl0X3BzdzsKIAogCXdhaXRfcHN3Lm1hc2sgPSBQU1dfQkFTRV9CSVRTIHwgUFNXX01BU0tfSU8gfCBQU1dfTUFTS19FWFQgfAotCQlQU1dfTUFTS19NQ0hFQ0sgfCBQU1dfTUFTS19XQUlUOworCQlQU1dfTUFTS19NQ0hFQ0sgfCBQU1dfTUFTS19XQUlUIHwgUFNXX0RFRkFVTFRfS0VZOwogI2lmbmRlZiBfX3MzOTB4X18KIAlhc20gdm9sYXRpbGUgKAogCQkiICAgIGJhc3IgJTAsMFxuIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcHRyYWNlLmgKaW5kZXggMWRjODA2Ni4uNGVmZjhmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3B0cmFjZS5oCkBAIC0xODUsNiArMTg1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIHR5cGVkZWYgdW5pb24KIHsKQEAgLTIzNSw2ICsyMzYsNyBAQAogI2RlZmluZSBQU1dfQUREUl9JTlNOCQkweDdGRkZGRkZGVUwKIAogI2RlZmluZSBQU1dfQkFTRV9CSVRTCQkweDAwMDgwMDAwVUwKKyNkZWZpbmUgUFNXX0RFRkFVTFRfS0VZCQkoKCh1bnNpZ25lZCBsb25nKSBQQUdFX0RFRkFVTFRfQUNDKSA8PCAyMCkKIAogI2RlZmluZSBQU1dfQVNDX1BSSU1BUlkJCTB4MDAwMDAwMDBVTAogI2RlZmluZSBQU1dfQVNDX0FDQ1JFRwkJMHgwMDAwNDAwMFVMCkBAIC0yNjAsNiArMjYyLDcgQEAKIAogI2RlZmluZSBQU1dfQkFTRV9CSVRTCQkweDAwMDAwMDAxODAwMDAwMDBVTAogI2RlZmluZSBQU1dfQkFTRTMyX0JJVFMJCTB4MDAwMDAwMDA4MDAwMDAwMFVMCisjZGVmaW5lIFBTV19ERUZBVUxUX0tFWQkJKCgodW5zaWduZWQgbG9uZykgUEFHRV9ERUZBVUxUX0FDQykgPDwgNTIpCiAKICNkZWZpbmUgUFNXX0FTQ19QUklNQVJZCQkweDAwMDAwMDAwMDAwMDAwMDBVTAogI2RlZmluZSBQU1dfQVNDX0FDQ1JFRwkJMHgwMDAwNDAwMDAwMDAwMDAwVUwKQEAgLTI2OCwxNCArMjcxLDE1IEBACiAKICNkZWZpbmUgUFNXX1VTRVIzMl9CSVRTIChQU1dfQkFTRTMyX0JJVFMgfCBQU1dfTUFTS19EQVQgfCBQU1dfQVNDX0hPTUUgfCBcCiAJCQkgUFNXX01BU0tfSU8gfCBQU1dfTUFTS19FWFQgfCBQU1dfTUFTS19NQ0hFQ0sgfCBcCi0JCQkgUFNXX01BU0tfUFNUQVRFKQorCQkJIFBTV19NQVNLX1BTVEFURSB8IFBTV19ERUZBVUxUX0tFWSkKIAogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCi0jZGVmaW5lIFBTV19LRVJORUxfQklUUwkoUFNXX0JBU0VfQklUUyB8IFBTV19NQVNLX0RBVCB8IFBTV19BU0NfUFJJTUFSWSkKKyNkZWZpbmUgUFNXX0tFUk5FTF9CSVRTCShQU1dfQkFTRV9CSVRTIHwgUFNXX01BU0tfREFUIHwgUFNXX0FTQ19QUklNQVJZIHwgXAorCQkJIFBTV19ERUZBVUxUX0tFWSkKICNkZWZpbmUgUFNXX1VTRVJfQklUUwkoUFNXX0JBU0VfQklUUyB8IFBTV19NQVNLX0RBVCB8IFBTV19BU0NfSE9NRSB8IFwKIAkJCSBQU1dfTUFTS19JTyB8IFBTV19NQVNLX0VYVCB8IFBTV19NQVNLX01DSEVDSyB8IFwKLQkJCSBQU1dfTUFTS19QU1RBVEUpCisJCQkgUFNXX01BU0tfUFNUQVRFIHwgUFNXX0RFRkFVTFRfS0VZKQogCiAvKiBUaGlzIG1hY3JvIG1lcmdlcyBhIE5FVyBQU1cgbWFzayBzcGVjaWZpZWQgYnkgdGhlIHVzZXIgaW50bwogICAgdGhlIGN1cnJlbnRseSBhY3RpdmUgUFNXIG1hc2sgQ1VSUkVOVCwgbW9kaWZ5aW5nIG9ubHkgdGhvc2UKQEAgLTQ3MCw2ICs0NzQsMTIgQEAKIGV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorcHN3X3NldF9rZXkodW5zaWduZWQgaW50IGtleSkKK3sKKwlhc20gdm9sYXRpbGUgKCAic3BrYSAwKCUwKSIgOiA6ICJkIiAoa2V5KSApOworfQorCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfUzM5MF9QVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ2luZm8uaAppbmRleCA3MjMwMzUzLi5lMGZmMWFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ2luZm8uaApAQCAtMTMsMTIgKzEzLDYgQEAKICNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUgKDQgKiBzaXplb2YoaW50KSkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfUzM5MFgKLSNkZWZpbmUgU0lHRVZfUEFEX1NJWkUgKChTSUdFVl9NQVhfU0laRS9zaXplb2YoaW50KSkgLSA0KQotI2Vsc2UKLSNkZWZpbmUgU0lHRVZfUEFEX1NJWkUgKChTSUdFVl9NQVhfU0laRS9zaXplb2YoaW50KSkgLSAzKQotI2VuZGlmCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc2lnbmFsLmgKaW5kZXggZjI3M2NkYy4uM2Q2ZTExYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ25hbC5oCkBAIC0xMTcsMzAgKzExNyw3IEBACiAjZGVmaW5lIE1JTlNJR1NUS1NaICAgICAyMDQ4CiAjZGVmaW5lIFNJR1NUS1NaICAgICAgICA4MTkyCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUgICAgICAgICAgICAgICAgU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NICAgICAgICBTQV9SRVNUQVJUCi0jZGVmaW5lIFNBX1NISVJRICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKLSNlbmRpZgotCi0jZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwICAgIC8qIGZvciBibG9ja2luZyBzaWduYWxzICovCi0jZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxICAgIC8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIgICAgLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCi0KLS8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCi10eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKLQotI2RlZmluZSBTSUdfREZMICgoX19zaWdoYW5kbGVyX3QpMCkgICAgIC8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCi0jZGVmaW5lIFNJR19JR04gKChfX3NpZ2hhbmRsZXJfdCkxKSAgICAgLyogaWdub3JlIHNpZ25hbCAqLwotI2RlZmluZSBTSUdfRVJSICgoX19zaWdoYW5kbGVyX3QpLTEpICAgIC8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IG9sZF9zaWdhY3Rpb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYnVnLmggYi9pbmNsdWRlL2FzbS1zaC9idWcuaAppbmRleCA3MDE3MjIxLi43MDUwOGEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9idWcuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCisjaWZkZWYgQ09ORklHX0JVRwogLyoKICAqIFRlbGwgdGhlIHVzZXIgdGhlcmUgaXMgc29tZSBwcm9ibGVtLgogICovCkBAIC0xMiw2ICsxMyw4IEBACiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLXNoL2NoZWNrc3VtLmgKaW5kZXggNTExM2M3Zi4uNWViZDBmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS1zaC9jaGVja3N1bS5oCkBAIC00Miw3ICs0Miw3IEBACiAgKglwYXNzZWQgaW4gYW4gaW5jb3JyZWN0IGtlcm5lbCBhZGRyZXNzIHRvIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMuIAogICoJCiAgKglJZiB5b3UgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSBwbGVhc2UgZG9uJ3QgZm9yZ2V0IHRoZSAKLSAqCXZlcmlmeV9hcmVhKCkuCisgKglhY2Nlc3Nfb2soKS4KICAqLwogc3RhdGljIF9faW5saW5lX18KIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrIChjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tc2gvZmxvcHB5LmgKaW5kZXggZjAzMGNhMC4uMzhkN2EyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20tc2gvZmxvcHB5LmgKQEAgLTIyNyw3ICsyMjcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZmRfcm91dGluZV9sIHsKK3N0YXRpYyBzdHJ1Y3QgZmRfcm91dGluZV9sIHsKIAlpbnQgKCpfcmVxdWVzdF9kbWEpKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCk7CiAJdm9pZCAoKl9mcmVlX2RtYSkodW5zaWduZWQgaW50IGRtYW5yKTsKIAlpbnQgKCpfZ2V0X2RtYV9yZXNpZHVlKSh1bnNpZ25lZCBpbnQgZHVtbXkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1zaC9zaWduYWwuaAppbmRleCAwYTdmZjcxLi5kNmU4ZWIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9zaWduYWwuaApAQCAtMTA4LDMwICsxMDgsNyBAQAogI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CiAjZGVmaW5lIFNJR1NUS1NaCTgxOTIKIAotI2lmZGVmIF9fS0VSTkVMX18KLQotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKLSNlbmRpZgotCi0jZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCi0jZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCi0KLS8qIFR5cGUgb2YgYSBzaWduYWwgaGFuZGxlci4gICovCi10eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKLQotI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KLSNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KLSNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KIHN0cnVjdCBvbGRfc2lnYWN0aW9uIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvYnVnLmggYi9pbmNsdWRlL2FzbS1zaDY0L2J1Zy5oCmluZGV4IDNhY2Q1NGQuLjVkNjU5ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9idWcuaApAQCAtMTcsMTAgKzE3LDYgQEAKIAkJQlVHKCk7IFwKIH0gd2hpbGUoMCkKIAotI2RlZmluZSBQQUdFX0JVRyhwYWdlKSBkbyB7IFwKLQlCVUcoKTsgXAotfSB3aGlsZSAoMCkKLQogI2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikgZG8geyBcCiAJaWYgKHVubGlrZWx5KChjb25kaXRpb24pIT0wKSkgeyBcCiAJCXByaW50aygiQmFkbmVzcyBpbiAlcyBhdCAlczolZFxuIiwgX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1zaDY0L2NoZWNrc3VtLmgKaW5kZXggYWEzOTExYS4uZmQwMzRlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvY2hlY2tzdW0uaApAQCAtMzQsNyArMzQsNyBAQAogICoJcGFzc2VkIGluIGFuIGluY29ycmVjdCBrZXJuZWwgYWRkcmVzcyB0byBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zLgogICoKICAqCUlmIHlvdSB1c2UgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5IHBsZWFzZSBkb24ndCBmb3JnZXQgdGhlCi0gKgl2ZXJpZnlfYXJlYSgpLgorICoJYWNjZXNzX29rKCkuCiAgKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tc2g2NC9zaWduYWwuaAppbmRleCA3Nzk1N2U5Li4yNDAwZGM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc2lnbmFsLmgKQEAgLTEwNywzMCArMTA3LDcgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAogI2RlZmluZSBTSUdTVEtTWglUSFJFQURfU0laRQogCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAotI2VuZGlmCi0KLSNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwotI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KLQotLyogVHlwZSBvZiBhIHNpZ25hbCBoYW5kbGVyLiAgKi8KLXR5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQpOwotCi0jZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLwotI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLwotI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IG9sZF9zaWdhY3Rpb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYnVnLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9idWcuaAppbmRleCAwZDMwYTY3Li4wNDE1MTIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9idWcuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX1NQQVJDX0JVR19ICiAjZGVmaW5lIF9TUEFSQ19CVUdfSAogCisjaWZkZWYgQ09ORklHX0JVRwogLyogT25seSB1c2UgdGhlIGlubGluZSBhc20gdW50aWwgYSBnY2MgcmVsZWFzZSB0aGF0IGNhbiBoYW5kbGUgX19idWlsdGluX3RyYXAKICAqIC1yb2IgMjAwMy0wNi0yNQogICoKQEAgLTI2LDYgKzI3LDggQEAKICNlbmRpZgogCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvZXJybm8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2Vycm5vLmgKaW5kZXggOGMwMWM1Zi4uZWQ0MWM4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvZXJybm8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9lcnJuby5oCkBAIC0xMDcsNCArMTA3LDggQEAKICNkZWZpbmUJRUtFWVJFVk9LRUQJMTMwCS8qIEtleSBoYXMgYmVlbiByZXZva2VkICovCiAjZGVmaW5lCUVLRVlSRUpFQ1RFRAkxMzEJLyogS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlICovCiAKKy8qIGZvciByb2J1c3QgbXV0ZXhlcyAqLworI2RlZmluZQlFT1dORVJERUFECTEzMgkvKiBPd25lciBkaWVkICovCisjZGVmaW5lCUVOT1RSRUNPVkVSQUJMRQkxMzMJLyogU3RhdGUgbm90IHJlY292ZXJhYmxlICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9mbG9wcHkuaAppbmRleCA3ODBlZTdmLi5jYWY5MjYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9mbG9wcHkuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9mbG9wcHkuaApAQCAtMjI3LDcgKzIyNyw3IEBACiAJZG9pbmdfcGRtYSA9IDA7CiAJaWYgKHBkbWFfYmFzZSkgewogCQltbXVfdW5sb2NrYXJlYShwZG1hX2Jhc2UsIHBkbWFfYXJlYXNpemUpOwotCQlwZG1hX2Jhc2UgPSAwOworCQlwZG1hX2Jhc2UgPSBOVUxMOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbXhjYy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbXhjYy5oCmluZGV4IGVmZTRlODQuLjYwZWY5ZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL214Y2MuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9teGNjLmgKQEAgLTExNSw4ICsxMTUsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgbXhjY19jb250cm9sOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oInNldCAtMSwgJSVnMlxuXHQiCi0JCQkgICAgICJzZXQgLTEsICUlZzNcblx0IgorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzZXQgMHhmZmZmZmZmZiwgJSVnMlxuXHQiCisJCQkgICAgICJzZXQgMHhmZmZmZmZmZiwgJSVnM1xuXHQiCiAJCQkgICAgICJzdGRhICUlZzIsIFslMV0gJTJcblx0IgogCQkJICAgICAibGRhIFslM10gJTIsICUwXG5cdCIgOgogCQkJICAgICAiPXIiIChteGNjX2NvbnRyb2wpIDoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnbmFsLmgKaW5kZXggZDgyMTFjYi4uYWE5OTYwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2lnbmFsLmgKQEAgLTE0Myw3ICsxNDMsNiBAQAogI2RlZmluZSBTQV9PTkVTSE9UCV9TVl9SRVNFVAogI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgxMHUKICNkZWZpbmUgU0FfTk9NQVNLCTB4MjB1Ci0jZGVmaW5lIFNBX1NISVJRCTB4NDB1CiAjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDEwMHUKICNkZWZpbmUgU0FfU0lHSU5GTwkweDIwMHUKIApAQCAtMTYyLDExICsxNjEsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgogICogREpIUgogICogU0FfU1RBVElDX0FMTE9DIGlzIHVzZWQgZm9yIHRoZSBTUEFSQyBzeXN0ZW0gdG8gaW5kaWNhdGUgdGhhdCB0aGlzCiAgKiBpbnRlcnJ1cHQgaGFuZGxlcidzIGlycSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkCkBAIC0xNzcsMjEgKzE3MSwxMCBAQAogICogc3RhdGljYWxseSBhbGxvY2F0ZWQgZGF0YS4uIHdoaWNoIGlzIE5PVCBHT09ELgogICoKICAqLwotI2RlZmluZSBTQV9QUk9CRSBTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00gU0FfUkVTVEFSVAogI2RlZmluZSBTQV9TVEFUSUNfQUxMT0MJCTB4ODAKICNlbmRpZgogCi0vKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwotI2lmZGVmIF9fS0VSTkVMX18KLXR5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQsIGludCwgc3RydWN0IHNpZ2NvbnRleHQgKiwgY2hhciAqKTsKLSNlbHNlCi10eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJfdCkoaW50KTsKLSNlbmRpZgotCi0jZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLwotI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLwotI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IF9fbmV3X3NpZ2FjdGlvbiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy91YWNjZXNzLmgKaW5kZXggM2Y0Nzg4OS4uZjQ2MTE0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3VhY2Nlc3MuaApAQCAtMTgsNyArMTgsNyBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0vKiBTcGFyYyBpcyBub3Qgc2VnbWVudGVkLCBob3dldmVyIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBmb29sIHZlcmlmeV9hcmVhKCkKKy8qIFNwYXJjIGlzIG5vdCBzZWdtZW50ZWQsIGhvd2V2ZXIgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGZvb2wgYWNjZXNzX29rKCkKICAqIHdoZW4gZG9pbmcgc3lzdGVtIGNhbGxzIGZyb20ga2VybmVsIG1vZGUgbGVnaXRpbWF0ZWx5LgogICoKICAqICJGb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGVzZSBtYWNyb3MgYXJlIGdyb3NzbHkgbWlzbmFtZWQuIiAtTGludXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYnVnLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2J1Zy5oCmluZGV4IDI1YzViMWQuLjUxNmJiMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9idWcuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX1NQQVJDNjRfQlVHX0gKICNkZWZpbmUgX1NQQVJDNjRfQlVHX0gKIAorI2lmZGVmIENPTkZJR19CVUcKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKQEAgLTE0LDYgKzE1LDggQEAKICNlbmRpZgogCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9lcnJuby5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9lcnJuby5oCmluZGV4IGNjOThhNzMuLmVhMzUwOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZXJybm8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2Vycm5vLmgKQEAgLTEwNyw0ICsxMDcsOCBAQAogI2RlZmluZQlFS0VZUkVWT0tFRAkxMzAJLyogS2V5IGhhcyBiZWVuIHJldm9rZWQgKi8KICNkZWZpbmUJRUtFWVJFSkVDVEVECTEzMQkvKiBLZXkgd2FzIHJlamVjdGVkIGJ5IHNlcnZpY2UgKi8KIAorLyogZm9yIHJvYnVzdCBtdXRleGVzICovCisjZGVmaW5lCUVPV05FUkRFQUQJMTMyCS8qIE93bmVyIGRpZWQgKi8KKyNkZWZpbmUJRU5PVFJFQ09WRVJBQkxFCTEzMwkvKiBTdGF0ZSBub3QgcmVjb3ZlcmFibGUgKi8KKwogI2VuZGlmIC8qICEoX1NQQVJDNjRfRVJSTk9fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW9zdGVrLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21vc3Rlay5oCmluZGV4IGNjZjJmNWYuLjA5YjVhYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW9zdGVrLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tb3N0ZWsuaApAQCAtMzgsNyArMzgsNyBAQAogICoKICAqIFdlIG5vdyBkZWFsIHdpdGggcGh5c2ljYWwgYWRkcmVzc2VzIGZvciBJL08gdG8gdGhlIGNoaXAuIC1EYXZlTQogICovCi1zdGF0aWMgX19pbmxpbmVfXyB1OCBtb3N0ZWtfcmVhZCh1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgX19pbmxpbmVfXyB1OCBtb3N0ZWtfcmVhZCh2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdTggcmV0OwogCkBAIC00OCw3ICs0OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBtb3N0ZWtfd3JpdGUodW5zaWduZWQgbG9uZyBhZGRyLCB1OCB2YWwpCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1vc3Rla193cml0ZSh2b2lkIF9faW9tZW0gKmFkZHIsIHU4IHZhbCkKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiYQklMCwgWyUxXSAlMiIKIAkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCkBAIC02Nyw3ICs2Nyw3IEBACiAjZGVmaW5lIE1PU1RFS19ZRUFSCQkweDA3ZmZVTAogCiBleHRlcm4gc3BpbmxvY2tfdCBtb3N0ZWtfbG9jazsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG1zdGs0OHQwMl9yZWdzOworZXh0ZXJuIHZvaWQgX19pb21lbSAqbXN0azQ4dDAyX3JlZ3M7CiAKIC8qIENvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzLiAqLwogI2RlZmluZQlNU1RLX0NSRUdfV1JJVEUJMHg4MAkvKiBNdXN0IHNldCB0aGlzIGJlZm9yZSBwbGFjaW5nIHZhbHVlcy4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFycG9ydC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJwb3J0LmgKaW5kZXggYWI4ODM0OS4uYjdlNjM1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJwb3J0LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJwb3J0LmgKQEAgLTEzLDYgKzEzLDEyIEBACiAKICNkZWZpbmUgUEFSUE9SVF9QQ19NQVhfUE9SVFMJUEFSUE9SVF9NQVgKIAorLyoKKyAqIFdoaWxlIHNwYXJjNjQgZG9lc24ndCBoYXZlIGFuIElTQSBETUEgQVBJLCB3ZSBwcm92aWRlIHNvbWV0aGluZyB0aGF0IGxvb2tzCisgKiBjbG9zZSBlbm91Z2ggdG8gbWFrZSBwYXJwb3J0X3BjIGhhcHB5CisgKi8KKyNkZWZpbmUgSEFTX0RNQQorCiBzdGF0aWMgc3RydWN0IHNwYXJjX2VidXNfaW5mbyB7CiAJc3RydWN0IGVidXNfZG1hX2luZm8gaW5mbzsKIAl1bnNpZ25lZCBpbnQgYWRkcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ2FsbG9jLmgKaW5kZXggMmMyOGUxZi4uYjliMTkxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ2FsbG9jLmgKQEAgLTEyMiwxNyArMTIyLDEyIEBACiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShNTSxQTUQsUFRFX1BBR0UpCQlcCiAJcG1kX3BvcHVsYXRlX2tlcm5lbChNTSxQTUQscGFnZV9hZGRyZXNzKFBURV9QQUdFKSkKIAotZXh0ZXJuIHB0ZV90ICpfX3B0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwotCi1zdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXJldHVybiBfX3B0ZV9hbGxvY19vbmVfa2VybmVsKG1tLCBhZGRyZXNzKTsKLX0KK2V4dGVybiBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgogcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXB0ZV90ICpwdGUgPSBfX3B0ZV9hbGxvY19vbmVfa2VybmVsKG1tLCBhZGRyKTsKKwlwdGVfdCAqcHRlID0gcHRlX2FsbG9jX29uZV9rZXJuZWwobW0sIGFkZHIpOwogCiAJaWYgKHB0ZSkKIAkJcmV0dXJuIHZpcnRfdG9fcGFnZShwdGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaAppbmRleCBhZjliZjE3Li5hZTJjZDViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaApAQCAtNDE2LDYgKzQxNiwxMSBAQAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7CiAKKy8qIENsZWFyIHZpcnR1YWwgYW5kIHBoeXNpY2FsIGNhY2hhYmlsaXR5LCBzZXQgc2lkZS1lZmZlY3QgYml0LiAgKi8KKyNkZWZpbmUgcGdwcm90X25vbmNhY2hlZChwcm90KSBcCisJKF9fcGdwcm90KChwZ3Byb3RfdmFsKHByb3QpICYgfihfUEFHRV9DUCB8IF9QQUdFX0NWKSkgfCBcCisJIF9QQUdFX0UpKQorCiAvKgogICogRm9yIHNwYXJjMzImNjQsIHRoZSBwZm4gaW4gaW9fcmVtYXBfcGZuX3JhbmdlKCkgY2FycmllcyA8aW9zcGFjZT4gaW4KICAqIGl0cyBoaWdoIDQgYml0cy4gIFRoZXNlIG1hY3Jvcy9mdW5jdGlvbnMgcHV0IGl0IHRoZXJlIG9yIGdldCBpdCBmcm9tIHRoZXJlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2luZm8uaAppbmRleCA3MTYwNDQ5Li5kZjE3ZTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2luZm8uaApAQCAtMyw4ICszLDYgQEAKIAogI2RlZmluZSBTSV9QQURfU0laRTMyCSgoU0lfTUFYX1NJWkUvc2l6ZW9mKGludCkpIC0gMykKIAotI2RlZmluZSBTSUdFVl9QQURfU0laRQkoKFNJR0VWX01BWF9TSVpFL3NpemVvZihpbnQpKSAtIDQpCi0KICNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUJKDQgKiBzaXplb2YoaW50KSkKICNkZWZpbmUgX19BUkNIX1NJX1RSQVBOTwogI2RlZmluZSBfX0FSQ0hfU0lfQkFORF9UIGludApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnbmFsLmgKaW5kZXggNjQyOGUzNi4uYmVjZGYxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ25hbC5oCkBAIC0xNDUsNyArMTQ1LDYgQEAKICNkZWZpbmUgU0FfT05FU0hPVAlfU1ZfUkVTRVQKICNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MTB1CiAjZGVmaW5lIFNBX05PTUFTSwkweDIwdQotI2RlZmluZSBTQV9TSElSUQkweDQwdQogI2RlZmluZSBTQV9OT0NMRFdBSVQgICAgMHgxMDB1CiAjZGVmaW5lIFNBX1NJR0lORk8gICAgICAweDIwMHUKIApAQCAtMTY1LDExICsxNjQsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgogICogREpIUgogICogU0FfU1RBVElDX0FMTE9DIGlzIHVzZWQgZm9yIHRoZSBTUEFSQyBzeXN0ZW0gdG8gaW5kaWNhdGUgdGhhdCB0aGlzCiAgKiBpbnRlcnJ1cHQgaGFuZGxlcidzIGlycSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkCkBAIC0xODAsMjYgKzE3NCwxMCBAQAogICogc3RhdGljYWxseSBhbGxvY2F0ZWQgZGF0YS4uIHdoaWNoIGlzIE5PVCBHT09ELgogICoKICAqLwotI2RlZmluZSBTQV9QUk9CRSBTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00gU0FfUkVTVEFSVAogI2RlZmluZSBTQV9TVEFUSUNfQUxMT0MJCTB4ODAKICNlbmRpZgogCi0vKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwotI2lmZGVmIF9fS0VSTkVMX18KLXR5cGVkZWYgdm9pZCBfX3NpZ25hbGZuX3QoaW50KTsKLXR5cGVkZWYgX19zaWduYWxmbl90IF9fdXNlciAqX19zaWdoYW5kbGVyX3Q7Ci0KLXR5cGVkZWYgdm9pZCBfX3Jlc3RvcmVmbl90KHZvaWQpOwotdHlwZWRlZiBfX3Jlc3RvcmVmbl90IF9fdXNlciAqX19zaWdyZXN0b3JlX3Q7Ci0jZWxzZQotdHlwZWRlZiB2b2lkICgqX19zaWdoYW5kbGVyX3QpKGludCk7Ci10eXBlZGVmIHZvaWQgKCpfX3NpZ3Jlc3RvcmVfdCkodm9pZCk7Ci0jZW5kaWYKLQotI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KLSNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KLSNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KIAogc3RydWN0IF9fbmV3X3NpZ2FjdGlvbiB7CiAJX19zaWdoYW5kbGVyX3QJCXNhX2hhbmRsZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaW5sb2NrLmgKaW5kZXggZDFmOTFhNC4uZGI3NTgxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BpbmxvY2suaApAQCAtNDQsNyArNDQsNyBAQAogCiAjZGVmaW5lIHNwaW5fdW5sb2NrX3dhaXQobHApCVwKIGRvIHsJbWVtYmFyKCIjTG9hZExvYWQiKTsJXAotfSB3aGlsZShscC0+bG9jaykKK30gd2hpbGUoKGxwKS0+bG9jaykKIAogc3RhdGljIGlubGluZSB2b2lkIF9yYXdfc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCiB7CkBAIC0xNDksNyArMTQ5LDcgQEAKIAl1bnNpZ25lZCBpbnQgYnJlYWtfbG9jazsKICNlbmRpZgogfSByd2xvY2tfdDsKLSNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRAl7MCx9CisjZGVmaW5lIFJXX0xPQ0tfVU5MT0NLRUQJKHJ3bG9ja190KSB7MCx9CiAjZGVmaW5lIHJ3bG9ja19pbml0KGxwKSBkbyB7ICoobHApID0gUldfTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSgwKQogCiBzdGF0aWMgdm9pZCBpbmxpbmUgX19yZWFkX2xvY2socndsb2NrX3QgKmxvY2spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9hcmNoLXNpZ25hbC1pMzg2LmggYi9pbmNsdWRlL2FzbS11bS9hcmNoLXNpZ25hbC1pMzg2LmgKaW5kZXggOTlhOWRlNC4uZTY5ZGUyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vYXJjaC1zaWduYWwtaTM4Ni5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2FyY2gtc2lnbmFsLWkzODYuaApAQCAtMSwyNCArMCwwIEBACi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwMiBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCi0gKi8KLQotI2lmbmRlZiBfX1VNX0FSQ0hfU0lHTkFMX0kzODZfSAotI2RlZmluZSBfX1VNX0FSQ0hfU0lHTkFMX0kzODZfSAotCi1zdHJ1Y3QgYXJjaF9zaWduYWxfY29udGV4dCB7Ci0JdW5zaWduZWQgbG9uZyBleHRyYXNpZ3NbX05TSUdfV09SRFNdOwotfTsKLQotI2VuZGlmCi0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9hcmNocGFyYW0taTM4Ni5oIGIvaW5jbHVkZS9hc20tdW0vYXJjaHBhcmFtLWkzODYuaAppbmRleCA2Zjc4ZGU1Li40OWU4OWI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9hcmNocGFyYW0taTM4Ni5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2FyY2hwYXJhbS1pMzg2LmgKQEAgLTYsMTQzICs2LDYgQEAKICNpZm5kZWYgX19VTV9BUkNIUEFSQU1fSTM4Nl9ICiAjZGVmaW5lIF9fVU1fQVJDSFBBUkFNX0kzODZfSAogCi0vKioqKioqKioqIEJpdHMgZm9yIGFzbS11bS9lbGYuaCAqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxhc20vdXNlci5oPgotCi1leHRlcm4gY2hhciAqIGVsZl9hdXhfcGxhdGZvcm07Ci0jZGVmaW5lIEVMRl9QTEFURk9STSAoZWxmX2F1eF9wbGF0Zm9ybSkKLQotI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgKDIgKiBUQVNLX1NJWkUgLyAzKQotCi10eXBlZGVmIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IGVsZl9mcHJlZ3NldF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7Ci0KLSNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKLXR5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107Ci0KLSNkZWZpbmUgRUxGX0RBVEEgICAgICAgIEVMRkRBVEEyTFNCCi0jZGVmaW5lIEVMRl9BUkNIICAgICAgICBFTV8zODYKLQotI2RlZmluZSBFTEZfUExBVF9JTklUKHJlZ3MsIGxvYWRfYWRkcikgZG8geyBcCi0JUFRfUkVHU19FQlgocmVncykgPSAwOyBcCi0JUFRfUkVHU19FQ1gocmVncykgPSAwOyBcCi0JUFRfUkVHU19FRFgocmVncykgPSAwOyBcCi0JUFRfUkVHU19FU0kocmVncykgPSAwOyBcCi0JUFRfUkVHU19FREkocmVncykgPSAwOyBcCi0JUFRfUkVHU19FQlAocmVncykgPSAwOyBcCi0JUFRfUkVHU19FQVgocmVncykgPSAwOyBcCi19IHdoaWxlKDApCi0KLS8qIFNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIGluY2x1ZGUvYXNtLWkzODYvZWxmLmggKi8KLQotI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKSBkbyB7CVwKLQlwcl9yZWdbMF0gPSBQVF9SRUdTX0VCWChyZWdzKTsJCVwKLQlwcl9yZWdbMV0gPSBQVF9SRUdTX0VDWChyZWdzKTsJCVwKLQlwcl9yZWdbMl0gPSBQVF9SRUdTX0VEWChyZWdzKTsJCVwKLQlwcl9yZWdbM10gPSBQVF9SRUdTX0VTSShyZWdzKTsJCVwKLQlwcl9yZWdbNF0gPSBQVF9SRUdTX0VESShyZWdzKTsJCVwKLQlwcl9yZWdbNV0gPSBQVF9SRUdTX0VCUChyZWdzKTsJCVwKLQlwcl9yZWdbNl0gPSBQVF9SRUdTX0VBWChyZWdzKTsJCVwKLQlwcl9yZWdbN10gPSBQVF9SRUdTX0RTKHJlZ3MpOwkJXAotCXByX3JlZ1s4XSA9IFBUX1JFR1NfRVMocmVncyk7CQlcCi0JLyogZmFrZSBvbmNlIHVzZWQgZnMgYW5kIGdzIHNlbGVjdG9ycz8gKi8JXAotCXByX3JlZ1s5XSA9IFBUX1JFR1NfRFMocmVncyk7CQlcCi0JcHJfcmVnWzEwXSA9IFBUX1JFR1NfRFMocmVncyk7CQlcCi0JcHJfcmVnWzExXSA9IFBUX1JFR1NfU1lTQ0FMTF9OUihyZWdzKTsJXAotCXByX3JlZ1sxMl0gPSBQVF9SRUdTX0lQKHJlZ3MpOwkJXAotCXByX3JlZ1sxM10gPSBQVF9SRUdTX0NTKHJlZ3MpOwkJXAotCXByX3JlZ1sxNF0gPSBQVF9SRUdTX0VGTEFHUyhyZWdzKTsJXAotCXByX3JlZ1sxNV0gPSBQVF9SRUdTX1NQKHJlZ3MpOwkJXAotCXByX3JlZ1sxNl0gPSBQVF9SRUdTX1NTKHJlZ3MpOwkJXAotfSB3aGlsZSgwKTsKLQotCi1leHRlcm4gdW5zaWduZWQgbG9uZyB2c3lzY2FsbF9laGRyOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdnN5c2NhbGxfZW5kOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19rZXJuZWxfdnN5c2NhbGw7Ci0KLSNkZWZpbmUgVlNZU0NBTExfQkFTRSB2c3lzY2FsbF9laGRyCi0jZGVmaW5lIFZTWVNDQUxMX0VORCB2c3lzY2FsbF9lbmQKLQotLyoKLSAqIFRoaXMgaXMgdGhlIHJhbmdlIHRoYXQgaXMgcmVhZGFibGUgYnkgdXNlciBtb2RlLCBhbmQgdGhpbmdzCi0gKiBhY3RpbmcgbGlrZSB1c2VyIG1vZGUgc3VjaCBhcyBnZXRfdXNlcl9wYWdlcy4KLSAqLwotI2RlZmluZSBGSVhBRERSX1VTRVJfU1RBUlQgICAgICBWU1lTQ0FMTF9CQVNFCi0jZGVmaW5lIEZJWEFERFJfVVNFUl9FTkQgICAgICAgIFZTWVNDQUxMX0VORAotCi0vKgotICogQXJjaGl0ZWN0dXJlLW5ldXRyYWwgQVRfIHZhbHVlcyBpbiAwLTE3LCBsZWF2ZSBzb21lIHJvb20KLSAqIGZvciBtb3JlIG9mIHRoZW0sIHN0YXJ0IHRoZSB4ODYtc3BlY2lmaWMgb25lcyBhdCAzMi4KLSAqLwotI2RlZmluZSBBVF9TWVNJTkZPCQkzMgotI2RlZmluZSBBVF9TWVNJTkZPX0VIRFIJCTMzCi0KLSNkZWZpbmUgQVJDSF9ETElORk8JCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0JaWYgKCB2c3lzY2FsbF9laGRyICkgewkJCQkJXAotCQlORVdfQVVYX0VOVChBVF9TWVNJTkZPLAlfX2tlcm5lbF92c3lzY2FsbCk7CVwKLQkJTkVXX0FVWF9FTlQoQVRfU1lTSU5GT19FSERSLCB2c3lzY2FsbF9laGRyKTsJXAotCX0JCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotLyoKLSAqIFRoZXNlIG1hY3JvcyBwYXJhbWV0ZXJpemUgZWxmX2NvcmVfZHVtcCBpbiBmcy9iaW5mbXRfZWxmLmMgdG8gd3JpdGUgb3V0Ci0gKiBleHRyYSBzZWdtZW50cyBjb250YWluaW5nIHRoZSB2c3lzY2FsbCBEU08gY29udGVudHMuICBEdW1waW5nIGl0cwotICogY29udGVudHMgbWFrZXMgcG9zdC1tb3J0ZW0gZnVsbHkgaW50ZXJwcmV0YWJsZSBsYXRlciB3aXRob3V0IG1hdGNoaW5nIHVwCi0gKiB0aGUgc2FtZSBrZXJuZWwgYW5kIGhhcmR3YXJlIGNvbmZpZyB0byBzZWUgd2hhdCBQQyB2YWx1ZXMgbWVhbnQuCi0gKiBEdW1waW5nIGl0cyBleHRyYSBFTEYgcHJvZ3JhbSBoZWFkZXJzIGluY2x1ZGVzIGFsbCB0aGUgb3RoZXIgaW5mb3JtYXRpb24KLSAqIGEgZGVidWdnZXIgbmVlZHMgdG8gZWFzaWx5IGZpbmQgaG93IHRoZSB2c3lzY2FsbCBEU08gd2FzIGJlaW5nIHVzZWQuCi0gKi8KLSNkZWZpbmUgRUxGX0NPUkVfRVhUUkFfUEhEUlMJCQkJCQkgICAgICBcCi0JKHZzeXNjYWxsX2VoZHIgPyAoKChzdHJ1Y3QgZWxmaGRyICopdnN5c2NhbGxfZWhkciktPmVfcGhudW0pIDogMCApCi0KLSNkZWZpbmUgRUxGX0NPUkVfV1JJVEVfRVhUUkFfUEhEUlMJCQkJCSAgICAgIFwKLWlmICggdnN5c2NhbGxfZWhkciApIHsJCQkJCQkJICAgICAgXAotCWNvbnN0IHN0cnVjdCBlbGZoZHIgKmNvbnN0IGVoZHJwID0gKHN0cnVjdCBlbGZoZHIgKil2c3lzY2FsbF9laGRyOyAgICBcCi0JY29uc3Qgc3RydWN0IGVsZl9waGRyICpjb25zdCBwaGRycCA9CQkJCSAgICAgIFwKLQkJKGNvbnN0IHN0cnVjdCBlbGZfcGhkciAqKSAodnN5c2NhbGxfZWhkciArIGVoZHJwLT5lX3Bob2ZmKTsgICBcCi0JaW50IGk7CQkJCQkJCQkgICAgICBcCi0JRWxmMzJfT2ZmIG9mcyA9IDA7CQkJCQkJICAgICAgXAotCWZvciAoaSA9IDA7IGkgPCBlaGRycC0+ZV9waG51bTsgKytpKSB7CQkJCSAgICAgIFwKLQkJc3RydWN0IGVsZl9waGRyIHBoZHIgPSBwaGRycFtpXTsJCQkgICAgICBcCi0JCWlmIChwaGRyLnBfdHlwZSA9PSBQVF9MT0FEKSB7CQkJCSAgICAgIFwKLQkJCW9mcyA9IHBoZHIucF9vZmZzZXQgPSBvZmZzZXQ7CQkJICAgICAgXAotCQkJb2Zmc2V0ICs9IHBoZHIucF9maWxlc3o7CQkJICAgICAgXAotCQl9CQkJCQkJCSAgICAgIFwKLQkJZWxzZQkJCQkJCQkgICAgICBcCi0JCQlwaGRyLnBfb2Zmc2V0ICs9IG9mczsJCQkJICAgICAgXAotCQlwaGRyLnBfcGFkZHIgPSAwOyAvKiBtYXRjaCBvdGhlciBjb3JlIHBoZHJzICovCQkgICAgICBcCi0JCURVTVBfV1JJVEUoJnBoZHIsIHNpemVvZihwaGRyKSk7CQkJICAgICAgXAotCX0JCQkJCQkJCSAgICAgIFwKLX0KLSNkZWZpbmUgRUxGX0NPUkVfV1JJVEVfRVhUUkFfREFUQQkJCQkJICAgICAgXAotaWYgKCB2c3lzY2FsbF9laGRyICkgewkJCQkJCQkgICAgICBcCi0JY29uc3Qgc3RydWN0IGVsZmhkciAqY29uc3QgZWhkcnAgPSAoc3RydWN0IGVsZmhkciAqKXZzeXNjYWxsX2VoZHI7ICAgIFwKLQljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IHBoZHJwID0JCQkJICAgICAgXAotCQkoY29uc3Qgc3RydWN0IGVsZl9waGRyICopICh2c3lzY2FsbF9laGRyICsgZWhkcnAtPmVfcGhvZmYpOyAgIFwKLQlpbnQgaTsJCQkJCQkJCSAgICAgIFwKLQlmb3IgKGkgPSAwOyBpIDwgZWhkcnAtPmVfcGhudW07ICsraSkgewkJCQkgICAgICBcCi0JCWlmIChwaGRycFtpXS5wX3R5cGUgPT0gUFRfTE9BRCkJCQkJICAgICAgXAotCQkJRFVNUF9XUklURSgodm9pZCAqKSBwaGRycFtpXS5wX3ZhZGRyLAkJICAgICAgXAotCQkJCSAgIHBoZHJwW2ldLnBfZmlsZXN6KTsJCQkgICAgICBcCi0JfQkJCQkJCQkJICAgICAgXAotfQotCi0jZGVmaW5lIFJfMzg2X05PTkUJMAotI2RlZmluZSBSXzM4Nl8zMgkxCi0jZGVmaW5lIFJfMzg2X1BDMzIJMgotI2RlZmluZSBSXzM4Nl9HT1QzMgkzCi0jZGVmaW5lIFJfMzg2X1BMVDMyCTQKLSNkZWZpbmUgUl8zODZfQ09QWQk1Ci0jZGVmaW5lIFJfMzg2X0dMT0JfREFUCTYKLSNkZWZpbmUgUl8zODZfSk1QX1NMT1QJNwotI2RlZmluZSBSXzM4Nl9SRUxBVElWRQk4Ci0jZGVmaW5lIFJfMzg2X0dPVE9GRgk5Ci0jZGVmaW5lIFJfMzg2X0dPVFBDCTEwCi0jZGVmaW5lIFJfMzg2X05VTQkxMQotCiAvKioqKioqKioqIE5vdGhpbmcgZm9yIGFzbS11bS9oYXJkaXJxLmggKioqKioqKioqKi8KIAogLyoqKioqKioqKiBOb3RoaW5nIGZvciBhc20tdW0vaHdfaXJxLmggKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2FyY2hwYXJhbS1wcGMuaCBiL2luY2x1ZGUvYXNtLXVtL2FyY2hwYXJhbS1wcGMuaAppbmRleCAwZWJjZWQ5Li4xNzJjZDZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9hcmNocGFyYW0tcHBjLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vYXJjaHBhcmFtLXBwYy5oCkBAIC0xLDI2ICsxLDYgQEAKICNpZm5kZWYgX19VTV9BUkNIUEFSQU1fUFBDX0gKICNkZWZpbmUgX19VTV9BUkNIUEFSQU1fUFBDX0gKIAotLyoqKioqKioqKiBCaXRzIGZvciBhc20tdW0vZWxmLmggKioqKioqKioqKioqLwotCi0jZGVmaW5lIEVMRl9QTEFURk9STSAoMCkKLQotI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgKDB4MDgwMDAwMDApCi0KLS8qIHRoZSBmb2xsb3dpbmcgc3RvbGVuIGZyb20gYXNtLXBwYy9lbGYuaCAqLwotI2RlZmluZSBFTEZfTkdSRUcJNDgJLyogaW5jbHVkZXMgbmlwLCBtc3IsIGxyLCBldGMuICovCi0jZGVmaW5lIEVMRl9ORlBSRUcJMzMJLyogaW5jbHVkZXMgZnBzY3IgKi8KLS8qIEdlbmVyYWwgcmVnaXN0ZXJzICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKLXR5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107Ci0KLS8qIEZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLwotdHlwZWRlZiBkb3VibGUgZWxmX2ZwcmVnX3Q7Ci10eXBlZGVmIGVsZl9mcHJlZ190IGVsZl9mcHJlZ3NldF90W0VMRl9ORlBSRUddOwotCi0jZGVmaW5lIEVMRl9EQVRBICAgICAgICBFTEZEQVRBMk1TQgotI2RlZmluZSBFTEZfQVJDSAlFTV9QUEMKLQogLyoqKioqKioqKiBCaXRzIGZvciBhc20tdW0vaHdfaXJxLmggKioqKioqKioqKi8KIAogc3RydWN0IGh3X2ludGVycnVwdF90eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vYXJjaHBhcmFtLXg4Nl82NC5oIGIvaW5jbHVkZS9hc20tdW0vYXJjaHBhcmFtLXg4Nl82NC5oCmluZGV4IDk2MzIxYzQuLjI3MGVkOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2FyY2hwYXJhbS14ODZfNjQuaAorKysgYi9pbmNsdWRlL2FzbS11bS9hcmNocGFyYW0teDg2XzY0LmgKQEAgLTcsNDIgKzcsNiBAQAogI2lmbmRlZiBfX1VNX0FSQ0hQQVJBTV9YODZfNjRfSAogI2RlZmluZSBfX1VNX0FSQ0hQQVJBTV9YODZfNjRfSAogCi0jaW5jbHVkZSA8YXNtL3VzZXIuaD4KLQotI2RlZmluZSBFTEZfUExBVEZPUk0gIng4Nl82NCIKLQotI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgKDIgKiBUQVNLX1NJWkUgLyAzKQotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKLXR5cGVkZWYgc3RydWN0IHsgfSBlbGZfZnByZWdzZXRfdDsKLQotI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZiAoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQotdHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKLQotI2RlZmluZSBFTEZfREFUQSAgICAgICAgRUxGREFUQTJMU0IKLSNkZWZpbmUgRUxGX0FSQ0ggICAgICAgIEVNX1g4Nl82NAotCi0jZGVmaW5lIEVMRl9QTEFUX0lOSVQocmVncywgbG9hZF9hZGRyKSAgICBkbyB7IFwKLQlQVF9SRUdTX1JCWChyZWdzKSA9IDA7IFwKLQlQVF9SRUdTX1JDWChyZWdzKSA9IDA7IFwKLQlQVF9SRUdTX1JEWChyZWdzKSA9IDA7IFwKLQlQVF9SRUdTX1JTSShyZWdzKSA9IDA7IFwKLQlQVF9SRUdTX1JESShyZWdzKSA9IDA7IFwKLQlQVF9SRUdTX1JCUChyZWdzKSA9IDA7IFwKLQlQVF9SRUdTX1JBWChyZWdzKSA9IDA7IFwKLQlQVF9SRUdTX1I4KHJlZ3MpID0gMDsgXAotCVBUX1JFR1NfUjkocmVncykgPSAwOyBcCi0JUFRfUkVHU19SMTAocmVncykgPSAwOyBcCi0JUFRfUkVHU19SMTEocmVncykgPSAwOyBcCi0JUFRfUkVHU19SMTIocmVncykgPSAwOyBcCi0JUFRfUkVHU19SMTMocmVncykgPSAwOyBcCi0JUFRfUkVHU19SMTQocmVncykgPSAwOyBcCi0JUFRfUkVHU19SMTUocmVncykgPSAwOyBcCi19IHdoaWxlICgwKQotCi0jaWZkZWYgVElGX0lBMzIgLyogWFhYICovCi0gICAgICAgIGNsZWFyX3RocmVhZF9mbGFnKFRJRl9JQTMyKTsKLSNlbmRpZgogCiAvKiBObyB1c2VyLWFjY2Vzc2libGUgZml4bWFwIGFkZHJlc3NlcywgaS5lLiB2c3lzY2FsbCAqLwogI2RlZmluZSBGSVhBRERSX1VTRVJfU1RBUlQJMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vY29tbW9uLmxkcy5TIGIvaW5jbHVkZS9hc20tdW0vY29tbW9uLmxkcy5TCmluZGV4IGEzZDZhYWIuLjEwMTAxNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2NvbW1vbi5sZHMuUworKysgYi9pbmNsdWRlL2FzbS11bS9jb21tb24ubGRzLlMKQEAgLTgsMTEgKzgsNiBAQAogICBfc2RhdGEgPSAuOwogICBQUk9WSURFIChzZGF0YSA9IC4pOwogCi0gIC4gPSBBTElHTigxNik7CQkvKiBFeGNlcHRpb24gdGFibGUgKi8KLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQogICBST0RBVEEKIAogICAudW5wcm90ZWN0ZWQgOiB7ICooLnVucHJvdGVjdGVkKSB9CkBAIC0yMCw2ICsxNSwxMCBAQAogICBQUk9WSURFIChfdW5wcm90ZWN0ZWRfZW5kID0gLik7CiAKICAgLiA9IEFMSUdOKDQwOTYpOworICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KKyAgX19zdG9wX19fZXhfdGFibGUgPSAuOworCiAgIF9fdW1sX3NldHVwX3N0YXJ0ID0gLjsKICAgLnVtbC5zZXR1cC5pbml0IDogeyAqKC51bWwuc2V0dXAuaW5pdCkgfQogICBfX3VtbF9zZXR1cF9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZGVsYXkuaCBiL2luY2x1ZGUvYXNtLXVtL2RlbGF5LmgKaW5kZXggNDA2OTU1Ny4uMDk4NWJkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vZGVsYXkuaAorKysgYi9pbmNsdWRlL2FzbS11bS9kZWxheS5oCkBAIC00LDQgKzQsNiBAQAogI2luY2x1ZGUgImFzbS9hcmNoL2RlbGF5LmgiCiAjaW5jbHVkZSAiYXNtL2FyY2hwYXJhbS5oIgogCisjZGVmaW5lIE1JTExJT04gMTAwMDAwMAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2VsZi1pMzg2LmggYi9pbmNsdWRlL2FzbS11bS9lbGYtaTM4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MmUyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9lbGYtaTM4Ni5oCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwMyBKZWZmIERpa2UgKGpkaWtlQGFkZHRvaXQuY29tKQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAorICovCisjaWZuZGVmIF9fVU1fRUxGX0kzODZfSAorI2RlZmluZSBfX1VNX0VMRl9JMzg2X0gKKworI2luY2x1ZGUgInVzZXIuaCIKKworI2RlZmluZSBSXzM4Nl9OT05FCTAKKyNkZWZpbmUgUl8zODZfMzIJMQorI2RlZmluZSBSXzM4Nl9QQzMyCTIKKyNkZWZpbmUgUl8zODZfR09UMzIJMworI2RlZmluZSBSXzM4Nl9QTFQzMgk0CisjZGVmaW5lIFJfMzg2X0NPUFkJNQorI2RlZmluZSBSXzM4Nl9HTE9CX0RBVAk2CisjZGVmaW5lIFJfMzg2X0pNUF9TTE9UCTcKKyNkZWZpbmUgUl8zODZfUkVMQVRJVkUJOAorI2RlZmluZSBSXzM4Nl9HT1RPRkYJOQorI2RlZmluZSBSXzM4Nl9HT1RQQwkxMAorI2RlZmluZSBSXzM4Nl9OVU0JMTEKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisKKyNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgZWxmX2ZwcmVnc2V0X3Q7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgorICovCisjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpIFwKKwkoKCh4KS0+ZV9tYWNoaW5lID09IEVNXzM4NikgfHwgKCh4KS0+ZV9tYWNoaW5lID09IEVNXzQ4NikpCisKKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKKyNkZWZpbmUgRUxGX0RBVEEgICAgICAgIEVMRkRBVEEyTFNCCisjZGVmaW5lIEVMRl9BUkNIICAgICAgICBFTV8zODYKKworI2RlZmluZSBFTEZfUExBVF9JTklUKHJlZ3MsIGxvYWRfYWRkcikgZG8geyBcCisJUFRfUkVHU19FQlgocmVncykgPSAwOyBcCisJUFRfUkVHU19FQ1gocmVncykgPSAwOyBcCisJUFRfUkVHU19FRFgocmVncykgPSAwOyBcCisJUFRfUkVHU19FU0kocmVncykgPSAwOyBcCisJUFRfUkVHU19FREkocmVncykgPSAwOyBcCisJUFRfUkVHU19FQlAocmVncykgPSAwOyBcCisJUFRfUkVHU19FQVgocmVncykgPSAwOyBcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUgNDA5NgorCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAoMiAqIFRBU0tfU0laRSAvIDMpCisKKy8qIFNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIGluY2x1ZGUvYXNtLWkzODYvZWxmLmggKi8KKworI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKSBkbyB7CVwKKwlwcl9yZWdbMF0gPSBQVF9SRUdTX0VCWChyZWdzKTsJCVwKKwlwcl9yZWdbMV0gPSBQVF9SRUdTX0VDWChyZWdzKTsJCVwKKwlwcl9yZWdbMl0gPSBQVF9SRUdTX0VEWChyZWdzKTsJCVwKKwlwcl9yZWdbM10gPSBQVF9SRUdTX0VTSShyZWdzKTsJCVwKKwlwcl9yZWdbNF0gPSBQVF9SRUdTX0VESShyZWdzKTsJCVwKKwlwcl9yZWdbNV0gPSBQVF9SRUdTX0VCUChyZWdzKTsJCVwKKwlwcl9yZWdbNl0gPSBQVF9SRUdTX0VBWChyZWdzKTsJCVwKKwlwcl9yZWdbN10gPSBQVF9SRUdTX0RTKHJlZ3MpOwkJXAorCXByX3JlZ1s4XSA9IFBUX1JFR1NfRVMocmVncyk7CQlcCisJLyogZmFrZSBvbmNlIHVzZWQgZnMgYW5kIGdzIHNlbGVjdG9ycz8gKi8JXAorCXByX3JlZ1s5XSA9IFBUX1JFR1NfRFMocmVncyk7CQlcCisJcHJfcmVnWzEwXSA9IFBUX1JFR1NfRFMocmVncyk7CQlcCisJcHJfcmVnWzExXSA9IFBUX1JFR1NfU1lTQ0FMTF9OUihyZWdzKTsJXAorCXByX3JlZ1sxMl0gPSBQVF9SRUdTX0lQKHJlZ3MpOwkJXAorCXByX3JlZ1sxM10gPSBQVF9SRUdTX0NTKHJlZ3MpOwkJXAorCXByX3JlZ1sxNF0gPSBQVF9SRUdTX0VGTEFHUyhyZWdzKTsJXAorCXByX3JlZ1sxNV0gPSBQVF9SRUdTX1NQKHJlZ3MpOwkJXAorCXByX3JlZ1sxNl0gPSBQVF9SRUdTX1NTKHJlZ3MpOwkJXAorfSB3aGlsZSgwKTsKKworZXh0ZXJuIGxvbmcgZWxmX2F1eF9od2NhcDsKKyNkZWZpbmUgRUxGX0hXQ0FQIChlbGZfYXV4X2h3Y2FwKQorCitleHRlcm4gY2hhciAqIGVsZl9hdXhfcGxhdGZvcm07CisjZGVmaW5lIEVMRl9QTEFURk9STSAoZWxmX2F1eF9wbGF0Zm9ybSkKKworI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBkbyA7IHdoaWxlKDApCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHZzeXNjYWxsX2VoZHI7CitleHRlcm4gdW5zaWduZWQgbG9uZyB2c3lzY2FsbF9lbmQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2tlcm5lbF92c3lzY2FsbDsKKworI2RlZmluZSBWU1lTQ0FMTF9CQVNFIHZzeXNjYWxsX2VoZHIKKyNkZWZpbmUgVlNZU0NBTExfRU5EIHZzeXNjYWxsX2VuZAorCisvKgorICogVGhpcyBpcyB0aGUgcmFuZ2UgdGhhdCBpcyByZWFkYWJsZSBieSB1c2VyIG1vZGUsIGFuZCB0aGluZ3MKKyAqIGFjdGluZyBsaWtlIHVzZXIgbW9kZSBzdWNoIGFzIGdldF91c2VyX3BhZ2VzLgorICovCisjZGVmaW5lIEZJWEFERFJfVVNFUl9TVEFSVCAgICAgIFZTWVNDQUxMX0JBU0UKKyNkZWZpbmUgRklYQUREUl9VU0VSX0VORCAgICAgICAgVlNZU0NBTExfRU5ECisKKy8qCisgKiBBcmNoaXRlY3R1cmUtbmV1dHJhbCBBVF8gdmFsdWVzIGluIDAtMTcsIGxlYXZlIHNvbWUgcm9vbQorICogZm9yIG1vcmUgb2YgdGhlbSwgc3RhcnQgdGhlIHg4Ni1zcGVjaWZpYyBvbmVzIGF0IDMyLgorICovCisjZGVmaW5lIEFUX1NZU0lORk8JCTMyCisjZGVmaW5lIEFUX1NZU0lORk9fRUhEUgkJMzMKKworI2RlZmluZSBBUkNIX0RMSU5GTwkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAoIHZzeXNjYWxsX2VoZHIgKSB7CQkJCQlcCisJCU5FV19BVVhfRU5UKEFUX1NZU0lORk8sCV9fa2VybmVsX3ZzeXNjYWxsKTsJXAorCQlORVdfQVVYX0VOVChBVF9TWVNJTkZPX0VIRFIsIHZzeXNjYWxsX2VoZHIpOwlcCisJfQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogVGhlc2UgbWFjcm9zIHBhcmFtZXRlcml6ZSBlbGZfY29yZV9kdW1wIGluIGZzL2JpbmZtdF9lbGYuYyB0byB3cml0ZSBvdXQKKyAqIGV4dHJhIHNlZ21lbnRzIGNvbnRhaW5pbmcgdGhlIHZzeXNjYWxsIERTTyBjb250ZW50cy4gIER1bXBpbmcgaXRzCisgKiBjb250ZW50cyBtYWtlcyBwb3N0LW1vcnRlbSBmdWxseSBpbnRlcnByZXRhYmxlIGxhdGVyIHdpdGhvdXQgbWF0Y2hpbmcgdXAKKyAqIHRoZSBzYW1lIGtlcm5lbCBhbmQgaGFyZHdhcmUgY29uZmlnIHRvIHNlZSB3aGF0IFBDIHZhbHVlcyBtZWFudC4KKyAqIER1bXBpbmcgaXRzIGV4dHJhIEVMRiBwcm9ncmFtIGhlYWRlcnMgaW5jbHVkZXMgYWxsIHRoZSBvdGhlciBpbmZvcm1hdGlvbgorICogYSBkZWJ1Z2dlciBuZWVkcyB0byBlYXNpbHkgZmluZCBob3cgdGhlIHZzeXNjYWxsIERTTyB3YXMgYmVpbmcgdXNlZC4KKyAqLworI2RlZmluZSBFTEZfQ09SRV9FWFRSQV9QSERSUwkJCQkJCSAgICAgIFwKKwkodnN5c2NhbGxfZWhkciA/ICgoKHN0cnVjdCBlbGZoZHIgKil2c3lzY2FsbF9laGRyKS0+ZV9waG51bSkgOiAwICkKKworI2RlZmluZSBFTEZfQ09SRV9XUklURV9FWFRSQV9QSERSUwkJCQkJICAgICAgXAoraWYgKCB2c3lzY2FsbF9laGRyICkgewkJCQkJCQkgICAgICBcCisJY29uc3Qgc3RydWN0IGVsZmhkciAqY29uc3QgZWhkcnAgPSAoc3RydWN0IGVsZmhkciAqKXZzeXNjYWxsX2VoZHI7ICAgIFwKKwljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IHBoZHJwID0JCQkJICAgICAgXAorCQkoY29uc3Qgc3RydWN0IGVsZl9waGRyICopICh2c3lzY2FsbF9laGRyICsgZWhkcnAtPmVfcGhvZmYpOyAgIFwKKwlpbnQgaTsJCQkJCQkJCSAgICAgIFwKKwlFbGYzMl9PZmYgb2ZzID0gMDsJCQkJCQkgICAgICBcCisJZm9yIChpID0gMDsgaSA8IGVoZHJwLT5lX3BobnVtOyArK2kpIHsJCQkJICAgICAgXAorCQlzdHJ1Y3QgZWxmX3BoZHIgcGhkciA9IHBoZHJwW2ldOwkJCSAgICAgIFwKKwkJaWYgKHBoZHIucF90eXBlID09IFBUX0xPQUQpIHsJCQkJICAgICAgXAorCQkJb2ZzID0gcGhkci5wX29mZnNldCA9IG9mZnNldDsJCQkgICAgICBcCisJCQlvZmZzZXQgKz0gcGhkci5wX2ZpbGVzejsJCQkgICAgICBcCisJCX0JCQkJCQkJICAgICAgXAorCQllbHNlCQkJCQkJCSAgICAgIFwKKwkJCXBoZHIucF9vZmZzZXQgKz0gb2ZzOwkJCQkgICAgICBcCisJCXBoZHIucF9wYWRkciA9IDA7IC8qIG1hdGNoIG90aGVyIGNvcmUgcGhkcnMgKi8JCSAgICAgIFwKKwkJRFVNUF9XUklURSgmcGhkciwgc2l6ZW9mKHBoZHIpKTsJCQkgICAgICBcCisJfQkJCQkJCQkJICAgICAgXAorfQorI2RlZmluZSBFTEZfQ09SRV9XUklURV9FWFRSQV9EQVRBCQkJCQkgICAgICBcCitpZiAoIHZzeXNjYWxsX2VoZHIgKSB7CQkJCQkJCSAgICAgIFwKKwljb25zdCBzdHJ1Y3QgZWxmaGRyICpjb25zdCBlaGRycCA9IChzdHJ1Y3QgZWxmaGRyICopdnN5c2NhbGxfZWhkcjsgICAgXAorCWNvbnN0IHN0cnVjdCBlbGZfcGhkciAqY29uc3QgcGhkcnAgPQkJCQkgICAgICBcCisJCShjb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKikgKHZzeXNjYWxsX2VoZHIgKyBlaGRycC0+ZV9waG9mZik7ICAgXAorCWludCBpOwkJCQkJCQkJICAgICAgXAorCWZvciAoaSA9IDA7IGkgPCBlaGRycC0+ZV9waG51bTsgKytpKSB7CQkJCSAgICAgIFwKKwkJaWYgKHBoZHJwW2ldLnBfdHlwZSA9PSBQVF9MT0FEKQkJCQkgICAgICBcCisJCQlEVU1QX1dSSVRFKCh2b2lkICopIHBoZHJwW2ldLnBfdmFkZHIsCQkgICAgICBcCisJCQkJICAgcGhkcnBbaV0ucF9maWxlc3opOwkJCSAgICAgIFwKKwl9CQkJCQkJCQkgICAgICBcCit9CisKKyNlbmRpZgorCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBmaWxlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oIGIvaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OThjZjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9lbGYtcHBjLmgKQEAgLTAsMCArMSw1NCBAQAorI2lmbmRlZiBfX1VNX0VMRl9QUENfSAorI2RlZmluZSBfX1VNX0VMRl9QUENfSAorCisjaW5jbHVkZSAibGludXgvY29uZmlnLmgiCisKK2V4dGVybiBsb25nIGVsZl9hdXhfaHdjYXA7CisjZGVmaW5lIEVMRl9IV0NBUCAoZWxmX2F1eF9od2NhcCkKKworI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBkbyA7IHdoaWxlKDApCisKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUgNDA5NgorCisjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpICgxKQorCisjaWZkZWYgQ09ORklHXzY0X0JJVAorI2RlZmluZSBFTEZfQ0xBU1MgRUxGQ0xBU1M2NAorI2Vsc2UKKyNkZWZpbmUgRUxGX0NMQVNTIEVMRkNMQVNTMzIKKyNlbmRpZgorCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisKKyNkZWZpbmUgUl8zODZfTk9ORQkwCisjZGVmaW5lIFJfMzg2XzMyCTEKKyNkZWZpbmUgUl8zODZfUEMzMgkyCisjZGVmaW5lIFJfMzg2X0dPVDMyCTMKKyNkZWZpbmUgUl8zODZfUExUMzIJNAorI2RlZmluZSBSXzM4Nl9DT1BZCTUKKyNkZWZpbmUgUl8zODZfR0xPQl9EQVQJNgorI2RlZmluZSBSXzM4Nl9KTVBfU0xPVAk3CisjZGVmaW5lIFJfMzg2X1JFTEFUSVZFCTgKKyNkZWZpbmUgUl8zODZfR09UT0ZGCTkKKyNkZWZpbmUgUl8zODZfR09UUEMJMTAKKyNkZWZpbmUgUl8zODZfTlVNCTExCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNICgwKQorCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAoMHgwODAwMDAwMCkKKworLyogdGhlIGZvbGxvd2luZyBzdG9sZW4gZnJvbSBhc20tcHBjL2VsZi5oICovCisjZGVmaW5lIEVMRl9OR1JFRwk0OAkvKiBpbmNsdWRlcyBuaXAsIG1zciwgbHIsIGV0Yy4gKi8KKyNkZWZpbmUgRUxGX05GUFJFRwkzMwkvKiBpbmNsdWRlcyBmcHNjciAqLworLyogR2VuZXJhbCByZWdpc3RlcnMgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OwordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKworLyogRmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCit0eXBlZGVmIGRvdWJsZSBlbGZfZnByZWdfdDsKK3R5cGVkZWYgZWxmX2ZwcmVnX3QgZWxmX2ZwcmVnc2V0X3RbRUxGX05GUFJFR107CisKKyNkZWZpbmUgRUxGX0RBVEEgICAgICAgIEVMRkRBVEEyTVNCCisjZGVmaW5lIEVMRl9BUkNICUVNX1BQQworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2VsZi14ODZfNjQuaCBiL2luY2x1ZGUvYXNtLXVtL2VsZi14ODZfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTMwOWQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vZWxmLXg4Nl82NC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMyBQYXRoU2NhbGUsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKyNpZm5kZWYgX19VTV9FTEZfWDg2XzY0X0gKKyNkZWZpbmUgX19VTV9FTEZfWDg2XzY0X0gKKworI2luY2x1ZGUgPGFzbS91c2VyLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisjZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mIChzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCkgLyBzaXplb2YoZWxmX2dyZWdfdCkpCit0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworCit0eXBlZGVmIHN0cnVjdCB7IH0gZWxmX2ZwcmVnc2V0X3Q7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgorICovCisjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpIFwKKwkoKHgpLT5lX21hY2hpbmUgPT0gRU1fWDg2XzY0KQorCisjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzY0CisjZGVmaW5lIEVMRl9EQVRBICAgICAgICBFTEZEQVRBMkxTQgorI2RlZmluZSBFTEZfQVJDSCAgICAgICAgRU1fWDg2XzY0CisKKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChyZWdzLCBsb2FkX2FkZHIpICAgIGRvIHsgXAorCVBUX1JFR1NfUkJYKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUkNYKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUkRYKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUlNJKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUkRJKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUkJQKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUkFYKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfUjgocmVncykgPSAwOyBcCisJUFRfUkVHU19SOShyZWdzKSA9IDA7IFwKKwlQVF9SRUdTX1IxMChyZWdzKSA9IDA7IFwKKwlQVF9SRUdTX1IxMShyZWdzKSA9IDA7IFwKKwlQVF9SRUdTX1IxMihyZWdzKSA9IDA7IFwKKwlQVF9SRUdTX1IxMyhyZWdzKSA9IDA7IFwKKwlQVF9SRUdTX1IxNChyZWdzKSA9IDA7IFwKKwlQVF9SRUdTX1IxNShyZWdzKSA9IDA7IFwKK30gd2hpbGUgKDApCisKKyNpZmRlZiBUSUZfSUEzMiAvKiBYWFggKi8KKyAgICAgICAgY2xlYXJfdGhyZWFkX2ZsYWcoVElGX0lBMzIpOyBcCisjZW5kaWYKKworI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAorI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRSA0MDk2CisKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICgyICogVEFTS19TSVpFIC8gMykKKworZXh0ZXJuIGxvbmcgZWxmX2F1eF9od2NhcDsKKyNkZWZpbmUgRUxGX0hXQ0FQIChlbGZfYXV4X2h3Y2FwKQorCisjZGVmaW5lIEVMRl9QTEFURk9STSAieDg2XzY0IgorCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIGRvIDsgd2hpbGUoMCkKKworI2VuZGlmCisKKy8qCisgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KKyAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQorICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAorICogb2YgdGhlIGZpbGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9lbGYuaCBiL2luY2x1ZGUvYXNtLXVtL2VsZi5oCmluZGV4IGIzYTcyNTguLmViZjdjNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2VsZi5oCkBAIC0xLDI1ICsxLDEzIEBACi0jaWZuZGVmIF9fVU1fRUxGX0gKLSNkZWZpbmUgX19VTV9FTEZfSAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDMgSmVmZiBEaWtlIChqZGlrZUBhZGR0b2l0LmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworI2lmbmRlZiBfX1VNX0VMRl9JMzg2X0gKKyNkZWZpbmUgX19VTV9FTEZfSTM4Nl9ICiAKLSNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKLSNpbmNsdWRlICJhc20vYXJjaHBhcmFtLmgiCisjaW5jbHVkZSAidXNlci5oIgogCi1leHRlcm4gbG9uZyBlbGZfYXV4X2h3Y2FwOwotI2RlZmluZSBFTEZfSFdDQVAgKGVsZl9hdXhfaHdjYXApCi0KLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgZG8gOyB3aGlsZSgwKQotCi0jZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFIDQwOTYKLQotI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoMSkKLQotI2lmZGVmIENPTkZJR182NF9CSVQKLSNkZWZpbmUgRUxGX0NMQVNTIEVMRkNMQVNTNjQKLSNlbHNlCi0jZGVmaW5lIEVMRl9DTEFTUyBFTEZDTEFTUzMyCi0jZW5kaWYKLQotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAorI2lmIGRlZmluZWQoQ09ORklHX1VNTF9YODYpICYmICFkZWZpbmVkKENPTkZJR182NEJJVCkKIAogI2RlZmluZSBSXzM4Nl9OT05FCTAKICNkZWZpbmUgUl8zODZfMzIJMQpAQCAtMzQsNCArMjIsMTc1IEBACiAjZGVmaW5lIFJfMzg2X0dPVFBDCTEwCiAjZGVmaW5lIFJfMzg2X05VTQkxMQogCisjZWxpZiBkZWZpbmVkKENPTkZJR19VTUxfWDg2KSAmJiBkZWZpbmVkKENPTkZJR182NEJJVCkKKworLyogeDg2LTY0IHJlbG9jYXRpb24gdHlwZXMgKi8KKyNkZWZpbmUgUl9YODZfNjRfTk9ORQkJMAkvKiBObyByZWxvYyAqLworI2RlZmluZSBSX1g4Nl82NF82NAkJMQkvKiBEaXJlY3QgNjQgYml0ICAqLworI2RlZmluZSBSX1g4Nl82NF9QQzMyCQkyCS8qIFBDIHJlbGF0aXZlIDMyIGJpdCBzaWduZWQgKi8KKyNkZWZpbmUgUl9YODZfNjRfR09UMzIJCTMJLyogMzIgYml0IEdPVCBlbnRyeSAqLworI2RlZmluZSBSX1g4Nl82NF9QTFQzMgkJNAkvKiAzMiBiaXQgUExUIGFkZHJlc3MgKi8KKyNkZWZpbmUgUl9YODZfNjRfQ09QWQkJNQkvKiBDb3B5IHN5bWJvbCBhdCBydW50aW1lICovCisjZGVmaW5lIFJfWDg2XzY0X0dMT0JfREFUCTYJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworI2RlZmluZSBSX1g4Nl82NF9KVU1QX1NMT1QJNwkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisjZGVmaW5lIFJfWDg2XzY0X1JFTEFUSVZFCTgJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZSAqLworI2RlZmluZSBSX1g4Nl82NF9HT1RQQ1JFTAk5CS8qIDMyIGJpdCBzaWduZWQgcGMgcmVsYXRpdmUKKwkJCQkJICAgb2Zmc2V0IHRvIEdPVCAqLworI2RlZmluZSBSX1g4Nl82NF8zMgkJMTAJLyogRGlyZWN0IDMyIGJpdCB6ZXJvIGV4dGVuZGVkICovCisjZGVmaW5lIFJfWDg2XzY0XzMyUwkJMTEJLyogRGlyZWN0IDMyIGJpdCBzaWduIGV4dGVuZGVkICovCisjZGVmaW5lIFJfWDg2XzY0XzE2CQkxMgkvKiBEaXJlY3QgMTYgYml0IHplcm8gZXh0ZW5kZWQgKi8KKyNkZWZpbmUgUl9YODZfNjRfUEMxNgkJMTMJLyogMTYgYml0IHNpZ24gZXh0ZW5kZWQgcGMgcmVsYXRpdmUgKi8KKyNkZWZpbmUgUl9YODZfNjRfOAkJMTQJLyogRGlyZWN0IDggYml0IHNpZ24gZXh0ZW5kZWQgICovCisjZGVmaW5lIFJfWDg2XzY0X1BDOAkJMTUJLyogOCBiaXQgc2lnbiBleHRlbmRlZCBwYyByZWxhdGl2ZSAqLworCisjZGVmaW5lIFJfWDg2XzY0X05VTQkJMTYKKwogI2VuZGlmCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisjZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mIChzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCkgLyBzaXplb2YoZWxmX2dyZWdfdCkpCit0eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOworCit0eXBlZGVmIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IGVsZl9mcHJlZ3NldF90OworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSBcCisJKCgoeCktPmVfbWFjaGluZSA9PSBFTV8zODYpIHx8ICgoeCktPmVfbWFjaGluZSA9PSBFTV80ODYpKQorCisjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCisjZGVmaW5lIEVMRl9EQVRBICAgICAgICBFTEZEQVRBMkxTQgorI2RlZmluZSBFTEZfQVJDSCAgICAgICAgRU1fMzg2CisKKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChyZWdzLCBsb2FkX2FkZHIpIGRvIHsgXAorCVBUX1JFR1NfRUJYKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfRUNYKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfRURYKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfRVNJKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfRURJKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfRUJQKHJlZ3MpID0gMDsgXAorCVBUX1JFR1NfRUFYKHJlZ3MpID0gMDsgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFIDQwOTYKKworI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgKDIgKiBUQVNLX1NJWkUgLyAzKQorCisvKiBTaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBpbmNsdWRlL2FzbS1pMzg2L2VsZi5oICovCisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykgZG8gewlcCisJcHJfcmVnWzBdID0gUFRfUkVHU19FQlgocmVncyk7CQlcCisJcHJfcmVnWzFdID0gUFRfUkVHU19FQ1gocmVncyk7CQlcCisJcHJfcmVnWzJdID0gUFRfUkVHU19FRFgocmVncyk7CQlcCisJcHJfcmVnWzNdID0gUFRfUkVHU19FU0kocmVncyk7CQlcCisJcHJfcmVnWzRdID0gUFRfUkVHU19FREkocmVncyk7CQlcCisJcHJfcmVnWzVdID0gUFRfUkVHU19FQlAocmVncyk7CQlcCisJcHJfcmVnWzZdID0gUFRfUkVHU19FQVgocmVncyk7CQlcCisJcHJfcmVnWzddID0gUFRfUkVHU19EUyhyZWdzKTsJCVwKKwlwcl9yZWdbOF0gPSBQVF9SRUdTX0VTKHJlZ3MpOwkJXAorCS8qIGZha2Ugb25jZSB1c2VkIGZzIGFuZCBncyBzZWxlY3RvcnM/ICovCVwKKwlwcl9yZWdbOV0gPSBQVF9SRUdTX0RTKHJlZ3MpOwkJXAorCXByX3JlZ1sxMF0gPSBQVF9SRUdTX0RTKHJlZ3MpOwkJXAorCXByX3JlZ1sxMV0gPSBQVF9SRUdTX1NZU0NBTExfTlIocmVncyk7CVwKKwlwcl9yZWdbMTJdID0gUFRfUkVHU19JUChyZWdzKTsJCVwKKwlwcl9yZWdbMTNdID0gUFRfUkVHU19DUyhyZWdzKTsJCVwKKwlwcl9yZWdbMTRdID0gUFRfUkVHU19FRkxBR1MocmVncyk7CVwKKwlwcl9yZWdbMTVdID0gUFRfUkVHU19TUChyZWdzKTsJCVwKKwlwcl9yZWdbMTZdID0gUFRfUkVHU19TUyhyZWdzKTsJCVwKK30gd2hpbGUoMCk7CisKK2V4dGVybiBsb25nIGVsZl9hdXhfaHdjYXA7CisjZGVmaW5lIEVMRl9IV0NBUCAoZWxmX2F1eF9od2NhcCkKKworZXh0ZXJuIGNoYXIgKiBlbGZfYXV4X3BsYXRmb3JtOworI2RlZmluZSBFTEZfUExBVEZPUk0gKGVsZl9hdXhfcGxhdGZvcm0pCisKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgZG8gOyB3aGlsZSgwKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyB2c3lzY2FsbF9laGRyOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdnN5c2NhbGxfZW5kOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19rZXJuZWxfdnN5c2NhbGw7CisKKyNkZWZpbmUgVlNZU0NBTExfQkFTRSB2c3lzY2FsbF9laGRyCisjZGVmaW5lIFZTWVNDQUxMX0VORCB2c3lzY2FsbF9lbmQKKworLyoKKyAqIFRoaXMgaXMgdGhlIHJhbmdlIHRoYXQgaXMgcmVhZGFibGUgYnkgdXNlciBtb2RlLCBhbmQgdGhpbmdzCisgKiBhY3RpbmcgbGlrZSB1c2VyIG1vZGUgc3VjaCBhcyBnZXRfdXNlcl9wYWdlcy4KKyAqLworI2RlZmluZSBGSVhBRERSX1VTRVJfU1RBUlQgICAgICBWU1lTQ0FMTF9CQVNFCisjZGVmaW5lIEZJWEFERFJfVVNFUl9FTkQgICAgICAgIFZTWVNDQUxMX0VORAorCisvKgorICogQXJjaGl0ZWN0dXJlLW5ldXRyYWwgQVRfIHZhbHVlcyBpbiAwLTE3LCBsZWF2ZSBzb21lIHJvb20KKyAqIGZvciBtb3JlIG9mIHRoZW0sIHN0YXJ0IHRoZSB4ODYtc3BlY2lmaWMgb25lcyBhdCAzMi4KKyAqLworI2RlZmluZSBBVF9TWVNJTkZPCQkzMgorI2RlZmluZSBBVF9TWVNJTkZPX0VIRFIJCTMzCisKKyNkZWZpbmUgQVJDSF9ETElORk8JCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKCB2c3lzY2FsbF9laGRyICkgewkJCQkJXAorCQlORVdfQVVYX0VOVChBVF9TWVNJTkZPLAlfX2tlcm5lbF92c3lzY2FsbCk7CVwKKwkJTkVXX0FVWF9FTlQoQVRfU1lTSU5GT19FSERSLCB2c3lzY2FsbF9laGRyKTsJXAorCX0JCQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIFRoZXNlIG1hY3JvcyBwYXJhbWV0ZXJpemUgZWxmX2NvcmVfZHVtcCBpbiBmcy9iaW5mbXRfZWxmLmMgdG8gd3JpdGUgb3V0CisgKiBleHRyYSBzZWdtZW50cyBjb250YWluaW5nIHRoZSB2c3lzY2FsbCBEU08gY29udGVudHMuICBEdW1waW5nIGl0cworICogY29udGVudHMgbWFrZXMgcG9zdC1tb3J0ZW0gZnVsbHkgaW50ZXJwcmV0YWJsZSBsYXRlciB3aXRob3V0IG1hdGNoaW5nIHVwCisgKiB0aGUgc2FtZSBrZXJuZWwgYW5kIGhhcmR3YXJlIGNvbmZpZyB0byBzZWUgd2hhdCBQQyB2YWx1ZXMgbWVhbnQuCisgKiBEdW1waW5nIGl0cyBleHRyYSBFTEYgcHJvZ3JhbSBoZWFkZXJzIGluY2x1ZGVzIGFsbCB0aGUgb3RoZXIgaW5mb3JtYXRpb24KKyAqIGEgZGVidWdnZXIgbmVlZHMgdG8gZWFzaWx5IGZpbmQgaG93IHRoZSB2c3lzY2FsbCBEU08gd2FzIGJlaW5nIHVzZWQuCisgKi8KKyNkZWZpbmUgRUxGX0NPUkVfRVhUUkFfUEhEUlMJCQkJCQkgICAgICBcCisJKHZzeXNjYWxsX2VoZHIgPyAoKChzdHJ1Y3QgZWxmaGRyICopdnN5c2NhbGxfZWhkciktPmVfcGhudW0pIDogMCApCisKKyNkZWZpbmUgRUxGX0NPUkVfV1JJVEVfRVhUUkFfUEhEUlMJCQkJCSAgICAgIFwKK2lmICggdnN5c2NhbGxfZWhkciApIHsJCQkJCQkJICAgICAgXAorCWNvbnN0IHN0cnVjdCBlbGZoZHIgKmNvbnN0IGVoZHJwID0gKHN0cnVjdCBlbGZoZHIgKil2c3lzY2FsbF9laGRyOyAgICBcCisJY29uc3Qgc3RydWN0IGVsZl9waGRyICpjb25zdCBwaGRycCA9CQkJCSAgICAgIFwKKwkJKGNvbnN0IHN0cnVjdCBlbGZfcGhkciAqKSAodnN5c2NhbGxfZWhkciArIGVoZHJwLT5lX3Bob2ZmKTsgICBcCisJaW50IGk7CQkJCQkJCQkgICAgICBcCisJRWxmMzJfT2ZmIG9mcyA9IDA7CQkJCQkJICAgICAgXAorCWZvciAoaSA9IDA7IGkgPCBlaGRycC0+ZV9waG51bTsgKytpKSB7CQkJCSAgICAgIFwKKwkJc3RydWN0IGVsZl9waGRyIHBoZHIgPSBwaGRycFtpXTsJCQkgICAgICBcCisJCWlmIChwaGRyLnBfdHlwZSA9PSBQVF9MT0FEKSB7CQkJCSAgICAgIFwKKwkJCW9mcyA9IHBoZHIucF9vZmZzZXQgPSBvZmZzZXQ7CQkJICAgICAgXAorCQkJb2Zmc2V0ICs9IHBoZHIucF9maWxlc3o7CQkJICAgICAgXAorCQl9CQkJCQkJCSAgICAgIFwKKwkJZWxzZQkJCQkJCQkgICAgICBcCisJCQlwaGRyLnBfb2Zmc2V0ICs9IG9mczsJCQkJICAgICAgXAorCQlwaGRyLnBfcGFkZHIgPSAwOyAvKiBtYXRjaCBvdGhlciBjb3JlIHBoZHJzICovCQkgICAgICBcCisJCURVTVBfV1JJVEUoJnBoZHIsIHNpemVvZihwaGRyKSk7CQkJICAgICAgXAorCX0JCQkJCQkJCSAgICAgIFwKK30KKyNkZWZpbmUgRUxGX0NPUkVfV1JJVEVfRVhUUkFfREFUQQkJCQkJICAgICAgXAoraWYgKCB2c3lzY2FsbF9laGRyICkgewkJCQkJCQkgICAgICBcCisJY29uc3Qgc3RydWN0IGVsZmhkciAqY29uc3QgZWhkcnAgPSAoc3RydWN0IGVsZmhkciAqKXZzeXNjYWxsX2VoZHI7ICAgIFwKKwljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IHBoZHJwID0JCQkJICAgICAgXAorCQkoY29uc3Qgc3RydWN0IGVsZl9waGRyICopICh2c3lzY2FsbF9laGRyICsgZWhkcnAtPmVfcGhvZmYpOyAgIFwKKwlpbnQgaTsJCQkJCQkJCSAgICAgIFwKKwlmb3IgKGkgPSAwOyBpIDwgZWhkcnAtPmVfcGhudW07ICsraSkgewkJCQkgICAgICBcCisJCWlmIChwaGRycFtpXS5wX3R5cGUgPT0gUFRfTE9BRCkJCQkJICAgICAgXAorCQkJRFVNUF9XUklURSgodm9pZCAqKSBwaGRycFtpXS5wX3ZhZGRyLAkJICAgICAgXAorCQkJCSAgIHBoZHJwW2ldLnBfZmlsZXN6KTsJCQkgICAgICBcCisJfQkJCQkJCQkJICAgICAgXAorfQorCisjZW5kaWYKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CisgKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCisgKiBvZiB0aGUgZmlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1maWxlLXN0eWxlOiAibGludXgiCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2ZpeG1hcC5oIGIvaW5jbHVkZS9hc20tdW0vZml4bWFwLmgKaW5kZXggOTAwZjNmYi4uYWUwY2EzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vZml4bWFwLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vZml4bWFwLmgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYXJjaHBhcmFtLmg+CisjaW5jbHVkZSA8YXNtL2VsZi5oPgogCiAvKgogICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2lwYy5oIGIvaW5jbHVkZS9hc20tdW0vaXBjLmgKaW5kZXggZTJkZGM0Ny4uYTQ2ZTNkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vaXBjLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vaXBjLmgKQEAgLTEsNiArMSBAQAotI2lmbmRlZiBfX1VNX0lQQ19ICi0jZGVmaW5lIF9fVU1fSVBDX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL2lwYy5oIgotCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLXVtL2xpbmthZ2UuaAppbmRleCAyNzAxMTY1Li43ZGZjZTM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9saW5rYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vbGlua2FnZS5oCkBAIC0xLDcgKzEsNiBAQAotI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKLSNkZWZpbmUgX19BU01fTElOS0FHRV9ICisjaWZuZGVmIF9fQVNNX1VNX0xJTktBR0VfSAorI2RlZmluZSBfX0FTTV9VTV9MSU5LQUdFX0gKIAotI2RlZmluZSBGQVNUQ0FMTCh4KQl4IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKQotI2RlZmluZSBmYXN0Y2FsbCAgICAgICAgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpCisjaW5jbHVkZSAiYXNtL2FyY2gvbGlua2FnZS5oIgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXVtL3BhZ2UuaAppbmRleCAzNjIwYTA4Li41MDRlYThlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vcGFnZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIGNsZWFyX3VzZXJfcGFnZShwYWdlLCB2YWRkciwgcGcpCWNsZWFyX3BhZ2UocGFnZSkKICNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyLCBwZykJY29weV9wYWdlKHRvLCBmcm9tKQogCi0jaWYgZGVmaW5lZChDT05GSUdfM19MRVZFTF9QR1RBQkxFUykgJiYgIWRlZmluZWQoQ09ORklHXzY0X0JJVCkKKyNpZiBkZWZpbmVkKENPTkZJR18zX0xFVkVMX1BHVEFCTEVTKSAmJiAhZGVmaW5lZChDT05GSUdfNjRCSVQpCiAKIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGVfbG93LCBwdGVfaGlnaDsgfSBwdGVfdDsKIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBsb25nIHBtZDsgfSBwbWRfdDsKQEAgLTQ1LDYgKzQ1LDkgQEAKIAkoeyAocHRlKS5wdGVfaGlnaCA9IChwaHlzKSA+PiAzMjsgXAogCSAgIChwdGUpLnB0ZV9sb3cgPSAocGh5cykgfCBwZ3Byb3RfdmFsKHByb3QpOyB9KQogCisjZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQpCisjZGVmaW5lIF9fcG1kKHgpICgocG1kX3QpIHsgKHgpIH0gKQorCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBwZm5fdDsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHBoeXNfdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS0zbGV2ZWwuaCBiL2luY2x1ZGUvYXNtLXVtL3BndGFibGUtM2xldmVsLmgKaW5kZXggYmRiYzNmOS4uNjVlOGJmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS0zbGV2ZWwuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wZ3RhYmxlLTNsZXZlbC5oCkBAIC0xNDUsMTEgKzE0NSwxMSBAQAogICovCiAjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTMyCiAKLSNpZmRlZiBDT05GSUdfNjRfQklUCisjaWZkZWYgQ09ORklHXzY0QklUCiAKICNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHApICgocCkucHRlID4+IDMyKQogCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpICgocHRlX3QpIHsgKChvZmYpIDwgMzIpIHwgX1BBR0VfRklMRSB9KQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSAoKHB0ZV90KSB7ICgob2ZmKSA8PCAzMikgfCBfUEFHRV9GSUxFIH0pCiAKICNlbHNlCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXVtL3BndGFibGUuaAppbmRleCA3MWY5YzBjLi41MTBlNTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS5oCkBAIC0xMDYsNyArMTA2LDcgQEAKIC8qCiAgKiBEZWZpbmUgdGhpcyBpZiB0aGluZ3Mgd29yayBkaWZmZXJlbnRseSBvbiBhbiBpMzg2IGFuZCBhbiBpNDg2OgogICogaXQgd2lsbCAob24gYW4gaTQ4Nikgd2FybiBhYm91dCBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIHRoYXQgYXJlCi0gKiBkb25lIHdpdGhvdXQgYSAndmVyaWZ5X2FyZWEoVkVSSUZZX1dSSVRFLC4uKScKKyAqIGRvbmUgd2l0aG91dCBhICdhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLC4uKScKICAqLwogI3VuZGVmIFRFU1RfVkVSSUZZX0FSRUEKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaCBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1nZW5lcmljLmgKaW5kZXggMDM4YmE2Zi4uYjJmYzk0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oCkBAIC0xNywxMiArMTcsMTMgQEAKIHN0cnVjdCBtbV9zdHJ1Y3Q7CiAKIHN0cnVjdCB0aHJlYWRfc3RydWN0IHsKKwkvKiBUaGlzIGZsYWcgaXMgc2V0IHRvIDEgYmVmb3JlIGNhbGxpbmcgZG9fZm9yayAoYW5kIGFuYWx5emVkIGluCisJICogY29weV90aHJlYWQpIHRvIG1hcmsgdGhhdCB3ZSBhcmUgYmVnaW4gY2FsbGVkIGZyb20gdXNlcnNwYWNlIChmb3JrIC8KKwkgKiB2Zm9yayAvIGNsb25lKSwgYW5kIHJlc2V0IHRvIDAgYWZ0ZXIuIEl0IGlzIGxlZnQgdG8gMCB3aGVuIGNhbGxlZAorCSAqIGZyb20ga2VybmVsc3BhY2UgKGkuZS4ga2VybmVsX3RocmVhZCgpIG9yIGZvcmtfaWRsZSgpLCBhcyBvZiAyLjYuMTEpLiAqLwogCWludCBmb3JraW5nOwogCWludCBuc3lzY2FsbHM7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKLQl1bnNpZ25lZCBsb25nIGNyMjsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgdHJhcF9ubzsKIAlpbnQgc2luZ2xlc3RlcF9zeXNjYWxsOwogCXZvaWQgKmZhdWx0X2FkZHI7CiAJdm9pZCAqZmF1bHRfY2F0Y2hlcjsKQEAgLTcwLDggKzcxLDYgQEAKIAkuZm9ya2luZwkJPSAwLCBcCiAJLm5zeXNjYWxscwkJPSAwLCBcCiAgICAgICAgIC5yZWdzCQkgICAJPSBFTVBUWV9SRUdTLCBcCi0JLmNyMgkJCT0gMCwgXAotCS5lcnIJCQk9IDAsIFwKIAkuZmF1bHRfYWRkcgkJPSBOVUxMLCBcCiAJLnByZXZfc2NoZWQJCT0gTlVMTCwgXAogCS50ZW1wX3N0YWNrCQk9IDAsIFwKQEAgLTg5LDcgKzg4LDExIEBACiBleHRlcm4gdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKiBhcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgZHVtcF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB1c2VyICp1KTsKLWV4dGVybiB2b2lkIHByZXBhcmVfdG9fY29weShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVwYXJlX3RvX2NvcHkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1pMzg2LmggYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItaTM4Ni5oCmluZGV4IDJkZWI4ZjEuLjQzMWJhZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1pMzg2LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWkzODYuaApAQCAtOSwxMyArOSwxOCBAQAogZXh0ZXJuIGludCBob3N0X2hhc194bW07CiBleHRlcm4gaW50IGhvc3RfaGFzX2Ntb3Y7CiAKKy8qIGluY2x1ZGUgZmF1bHRpbmZvIHN0cnVjdHVyZSAqLworI2luY2x1ZGUgInN5c2RlcC9mYXVsdGluZm8uaCIKKwogc3RydWN0IGFyY2hfdGhyZWFkIHsKIAl1bnNpZ25lZCBsb25nIGRlYnVncmVnc1s4XTsKIAlpbnQgZGVidWdyZWdzX3NlcTsKKwlzdHJ1Y3QgZmF1bHRpbmZvIGZhdWx0aW5mbzsKIH07CiAKICNkZWZpbmUgSU5JVF9BUkNIX1RIUkVBRCB7IC5kZWJ1Z3JlZ3MgIAkJPSB7IFsgMCAuLi4gNyBdID0gMCB9LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAuZGVidWdyZWdzX3NlcQk9IDAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRlYnVncmVnc19zZXEJPSAwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmF1bHRpbmZvCQk9IHsgMCwgMCwgMCB9IH0KIAogI2luY2x1ZGUgImFzbS9hcmNoL3VzZXIuaCIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLXg4Nl82NC5oIGIvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLXg4Nl82NC5oCmluZGV4IGExYWUzYTQuLjBiZWI5YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci14ODZfNjQuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3IteDg2XzY0LmgKQEAgLTcsOSArNywxMyBAQAogI2lmbmRlZiBfX1VNX1BST0NFU1NPUl9YODZfNjRfSAogI2RlZmluZSBfX1VNX1BST0NFU1NPUl9YODZfNjRfSAogCi0jaW5jbHVkZSAiYXNtL2FyY2gvdXNlci5oIgorLyogaW5jbHVkZSBmYXVsdGluZm8gc3RydWN0dXJlICovCisjaW5jbHVkZSAic3lzZGVwL2ZhdWx0aW5mby5oIgogCiBzdHJ1Y3QgYXJjaF90aHJlYWQgeworICAgICAgICB1bnNpZ25lZCBsb25nIGRlYnVncmVnc1s4XTsKKyAgICAgICAgaW50IGRlYnVncmVnc19zZXE7CisgICAgICAgIHN0cnVjdCBmYXVsdGluZm8gZmF1bHRpbmZvOwogfTsKIAogLyogUkVQIE5PUCAoUEFVU0UpIGlzIGEgZ29vZCB0aGluZyB0byBpbnNlcnQgaW50byBidXN5LXdhaXQgbG9vcHMuICovCkBAIC0yMCw3ICsyNCwxMSBAQAogCiAjZGVmaW5lIGNwdV9yZWxheCgpICAgcmVwX25vcCgpCiAKLSNkZWZpbmUgSU5JVF9BUkNIX1RIUkVBRCB7IH0KKyNkZWZpbmUgSU5JVF9BUkNIX1RIUkVBRCB7IC5kZWJ1Z3JlZ3MgIAkJPSB7IFsgMCAuLi4gNyBdID0gMCB9LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGVidWdyZWdzX3NlcQk9IDAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mYXVsdGluZm8JCT0geyAwLCAwLCAwIH0gfQorCisjaW5jbHVkZSAiYXNtL2FyY2gvdXNlci5oIgogCiAjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgXAogCSh7IHZvaWQgKnBjOyBfX2FzbV9fKCJtb3ZxICQxZiwlMFxuMToiOiI9ZyIgKHBjKSk7IHBjOyB9KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1pMzg2LmgKaW5kZXggOWU0NzU5MC4uMDQyMjJmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWkzODYuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wdHJhY2UtaTM4Ni5oCkBAIC02LDYgKzYsOCBAQAogI2lmbmRlZiBfX1VNX1BUUkFDRV9JMzg2X0gKICNkZWZpbmUgX19VTV9QVFJBQ0VfSTM4Nl9ICiAKKyNkZWZpbmUgSE9TVF9BVURJVF9BUkNIIEFVRElUX0FSQ0hfSTM4NgorCiAjaW5jbHVkZSAic3lzZGVwL3B0cmFjZS5oIgogI2luY2x1ZGUgImFzbS9wdHJhY2UtZ2VuZXJpYy5oIgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UteDg2XzY0LmggYi9pbmNsdWRlL2FzbS11bS9wdHJhY2UteDg2XzY0LmgKaW5kZXggYzM0YmUzOS4uYmU1MTIxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLXg4Nl82NC5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS14ODZfNjQuaApAQCAtMTQsNiArMTQsOCBAQAogI2luY2x1ZGUgImFzbS9wdHJhY2UtZ2VuZXJpYy5oIgogI3VuZGVmIHNpZ25hbF9mYXVsdAogCisjZGVmaW5lIEhPU1RfQVVESVRfQVJDSCBBVURJVF9BUkNIX1g4Nl82NAorCiB2b2lkIHNpZ25hbF9mYXVsdChzdHJ1Y3QgcHRfcmVnc19zdWJhcmNoICpyZWdzLCB2b2lkICpmcmFtZSwgY2hhciAqd2hlcmUpOwogCiAjZGVmaW5lIEZTX0JBU0UgKDIxICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmgKaW5kZXggYmZmYjU3Ny4uYTEwZWExNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oCkBAIC03MiwxMiArNzIsMTQgQEAKIAkJCQkJICovCiAjZGVmaW5lIFRJRl9SRVNUQVJUX0JMT0NLIAk0CiAjZGVmaW5lIFRJRl9NRU1ESUUJIAk1CisjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTYKIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcgICAgICgxIDw8IFRJRl9QT0xMSU5HX05SRkxBRykKLSNkZWZpbmUgX1RJRl9SRVNUQVJUX0JMT0NLCSgxIDw8IFRJRl9SRVNUQVJUX0JMT0NLKQorI2RlZmluZSBfVElGX01FTURJRQkJKDEgPDwgVElGX01FTURJRSkKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxIDw8IFRJRl9TWVNDQUxMX0FVRElUKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9idWcuaCBiL2luY2x1ZGUvYXNtLXY4NTAvYnVnLmgKaW5kZXggYzc3ODkxNi4uYjBlZDJkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9idWcuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2J1Zy5oCkBAIC0xNCw5ICsxNCwxMiBAQAogI2lmbmRlZiBfX1Y4NTBfQlVHX0hfXwogI2RlZmluZSBfX1Y4NTBfQlVHX0hfXwogCisjaWZkZWYgQ09ORklHX0JVRwogZXh0ZXJuIHZvaWQgX19idWcgKHZvaWQpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwogI2RlZmluZSBCVUcoKQkJX19idWcoKQogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogCiAjZW5kaWYgLyogX19WODUwX0JVR19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS12ODUwL3NpZ25hbC5oCmluZGV4IDQwN2RiODcuLmNiNTJjYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9zaWduYWwuaApAQCAtMTEwLDMyICsxMTAsNyBAQAogI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CiAjZGVmaW5lIFNJR1NUS1NaCTgxOTIKIAotCi0jaWZkZWYgX19LRVJORUxfXwotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLQotI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLwotI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCi0jZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAyCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLwotCi0vKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwotdHlwZWRlZiB2b2lkICgqX19zaWdoYW5kbGVyX3QpKGludCk7Ci0KLSNkZWZpbmUgU0lHX0RGTAkoKF9fc2lnaGFuZGxlcl90KTApCS8qIGRlZmF1bHQgc2lnbmFsIGhhbmRsaW5nICovCi0jZGVmaW5lIFNJR19JR04JKChfX3NpZ2hhbmRsZXJfdCkxKQkvKiBpZ25vcmUgc2lnbmFsICovCi0jZGVmaW5lIFNJR19FUlIJKChfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCi0KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hcGljLmgKaW5kZXggYzAyNWNjMy4uZTRiMTAxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYXBpYy5oCkBAIC05OSw3ICs5OSw2IEBACiBleHRlcm4gdm9pZCBlbmFibGVfQVBJQ190aW1lcih2b2lkKTsKIGV4dGVybiB2b2lkIGNsdXN0ZXJlZF9hcGljX2NoZWNrKHZvaWQpOwogCi1leHRlcm4gaW50IGNoZWNrX25taV93YXRjaGRvZyh2b2lkKTsKIGV4dGVybiB2b2lkIG5taV93YXRjaGRvZ19kZWZhdWx0KHZvaWQpOwogZXh0ZXJuIGludCBzZXR1cF9ubWlfd2F0Y2hkb2coY2hhciAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2Jvb3RzZXR1cC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2Jvb3RzZXR1cC5oCmluZGV4IGI1NzBhNDguLmI4MjlmN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9ib290c2V0dXAuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYm9vdHNldHVwLmgKQEAgLTIsNyArMiw4IEBACiAjaWZuZGVmIF9YODZfNjRfQk9PVFNFVFVQX0gKICNkZWZpbmUgX1g4Nl82NF9CT09UU0VUVVBfSCAxCiAKLWV4dGVybiBjaGFyIHg4Nl9ib290X3BhcmFtc1syMDQ4XTsKKyNkZWZpbmUgQk9PVF9QQVJBTV9TSVpFCQk0MDk2CitleHRlcm4gY2hhciB4ODZfYm9vdF9wYXJhbXNbQk9PVF9QQVJBTV9TSVpFXTsKIAogLyoKICAqIFRoaXMgaXMgc2V0IHVwIGJ5IHRoZSBzZXR1cC1yb3V0aW5lIGF0IGJvb3QtdGltZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2J1Zy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2J1Zy5oCmluZGV4IDE5YWVkNmUuLmJkYmY2NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9idWcuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYnVnLmgKQEAgLTE1LDExICsxNSwxMyBAQAogCXVuc2lnbmVkIHNob3J0IGxpbmU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisjaWZkZWYgQ09ORklHX0JVRwogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCiAjZGVmaW5lIEJVRygpIFwKIAlhc20gdm9sYXRpbGUoInVkMiA7IC5xdWFkICVjMSA7IC5zaG9ydCAlYzAiIDo6IFwKIAkJICAgICAiaSIoX19MSU5FX18pLCAiaSIgKF9fc3RyaW5naWZ5KF9fRklMRV9fKSkpCiB2b2lkIG91dF9vZl9saW5lX2J1Zyh2b2lkKTsKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KKyNlbmRpZgogCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jcHVmZWF0dXJlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvY3B1ZmVhdHVyZS5oCmluZGV4IGU2OGFkOTcuLmFlYTMwOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jcHVmZWF0dXJlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2NwdWZlYXR1cmUuaApAQCAtNyw3ICs3LDcgQEAKICNpZm5kZWYgX19BU01fWDg2NjRfQ1BVRkVBVFVSRV9ICiAjZGVmaW5lIF9fQVNNX1g4NjY0X0NQVUZFQVRVUkVfSAogCi0jZGVmaW5lIE5DQVBJTlRTCTYKKyNkZWZpbmUgTkNBUElOVFMJNwkvKiBOIDMyLWJpdCB3b3JkcyB3b3J0aCBvZiBpbmZvICovCiAKIC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDAxLCB3b3JkIDAgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfRlBVCQkoMCozMisgMCkgLyogT25ib2FyZCBGUFUgKi8KQEAgLTc0LDkgKzc0LDE1IEBACiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NYMTYJKDQqMzIrMTMpIC8qIENNUFhDSEcxNkIgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfWFRQUgkoNCozMisxNCkgLyogU2VuZCBUYXNrIFByaW9yaXR5IE1lc3NhZ2VzICovCiAKLS8qIE1vcmUgZXh0ZW5kZWQgQU1EIGZsYWdzOiBDUFVJRCBsZXZlbCAweDgwMDAwMDAxLCBlY3gsIHdvcmQgNSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9MQUhGX0xNCSg1KjMyKyAwKSAvKiBMQUhGL1NBSEYgaW4gbG9uZyBtb2RlICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NNUF9MRUdBQ1kJKDUqMzIrIDEpIC8qIElmIHllcyBIeXBlclRocmVhZGluZyBub3QgdmFsaWQgKi8KKy8qIFZJQS9DeXJpeC9DZW50YXVyLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweEMwMDAwMDAxLCB3b3JkIDUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWFNUT1JFCSg1KjMyKyAyKSAvKiBvbi1DUFUgUk5HIHByZXNlbnQgKHhzdG9yZSBpbnNuKSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9YU1RPUkVfRU4JKDUqMzIrIDMpIC8qIG9uLUNQVSBSTkcgZW5hYmxlZCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9YQ1JZUFQJKDUqMzIrIDYpIC8qIG9uLUNQVSBjcnlwdG8gKHhjcnlwdCBpbnNuKSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9YQ1JZUFRfRU4JKDUqMzIrIDcpIC8qIG9uLUNQVSBjcnlwdG8gZW5hYmxlZCAqLworCisvKiBNb3JlIGV4dGVuZGVkIEFNRCBmbGFnczogQ1BVSUQgbGV2ZWwgMHg4MDAwMDAwMSwgZWN4LCB3b3JkIDYgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTEFIRl9MTQkoNiozMisgMCkgLyogTEFIRi9TQUhGIGluIGxvbmcgbW9kZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DTVBfTEVHQUNZCSg2KjMyKyAxKSAvKiBJZiB5ZXMgSHlwZXJUaHJlYWRpbmcgbm90IHZhbGlkICovCiAKICNkZWZpbmUgY3B1X2hhcyhjLCBiaXQpICAgICAgICAgICAgICAgIHRlc3RfYml0KGJpdCwgKGMpLT54ODZfY2FwYWJpbGl0eSkKICNkZWZpbmUgYm9vdF9jcHVfaGFzKGJpdCkgICAgICB0ZXN0X2JpdChiaXQsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvZTgyMC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2U4MjAuaAppbmRleCAwOGY4M2E0Li44ZTk0ZWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZTgyMC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lODIwLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KIAogI2RlZmluZSBFODIwTUFQCTB4MmQwCQkvKiBvdXIgbWFwICovCi0jZGVmaW5lIEU4MjBNQVgJMzIJCS8qIG51bWJlciBvZiBlbnRyaWVzIGluIEU4MjBNQVAgKi8KKyNkZWZpbmUgRTgyME1BWAkxMjgJCS8qIG51bWJlciBvZiBlbnRyaWVzIGluIEU4MjBNQVAgKi8KICNkZWZpbmUgRTgyME5SCTB4MWU4CQkvKiAjIGVudHJpZXMgaW4gRTgyME1BUCAqLwogCiAjZGVmaW5lIEU4MjBfUkFNCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9mbG9wcHkuaAppbmRleCBiY2E5YjI4Li5hZjdkZWQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2Zsb3BweS5oCkBAIC0yMjMsNyArMjIzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGZkX3JvdXRpbmVfbCB7CitzdGF0aWMgc3RydWN0IGZkX3JvdXRpbmVfbCB7CiAJaW50ICgqX3JlcXVlc3RfZG1hKSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpOwogCXZvaWQgKCpfZnJlZV9kbWEpKHVuc2lnbmVkIGludCBkbWFucik7CiAJaW50ICgqX2dldF9kbWFfcmVzaWR1ZSkodW5zaWduZWQgaW50IGR1bW15KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc2lnaW5mby5oCmluZGV4IDdiYzE1OTguLmQwOWExZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zaWdpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NpZ2luZm8uaApAQCAtMyw4ICszLDYgQEAKIAogI2RlZmluZSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRQkoNCAqIHNpemVvZihpbnQpKQogCi0jZGVmaW5lIFNJR0VWX1BBRF9TSVpFICgoU0lHRVZfTUFYX1NJWkUvc2l6ZW9mKGludCkpIC0gNCkKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc2lnbmFsLmgKaW5kZXggNjQzYTIwZC4uZmU5Yjk2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zaWduYWwuaApAQCAtMTE2LDM1ICsxMTYsOSBAQAogI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CiAjZGVmaW5lIFNJR1NUS1NaCTgxOTIKIAotI2lmZGVmIF9fS0VSTkVMX18KLQotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKLSNlbmRpZgotCi0jZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCi0jZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwotdHlwZWRlZiB2b2lkIF9fc2lnbmFsZm5fdChpbnQpOwotdHlwZWRlZiBfX3NpZ25hbGZuX3QgX191c2VyICpfX3NpZ2hhbmRsZXJfdDsKLQotdHlwZWRlZiB2b2lkIF9fcmVzdG9yZWZuX3Qodm9pZCk7Ci10eXBlZGVmIF9fcmVzdG9yZWZuX3QgX191c2VyICpfX3NpZ3Jlc3RvcmVfdDsKLQotI2RlZmluZSBTSUdfREZMCSgoX19zaWdoYW5kbGVyX3QpMCkJLyogZGVmYXVsdCBzaWduYWwgaGFuZGxpbmcgKi8KLSNkZWZpbmUgU0lHX0lHTgkoKF9fc2lnaGFuZGxlcl90KTEpCS8qIGlnbm9yZSBzaWduYWwgKi8KLSNkZWZpbmUgU0lHX0VSUgkoKF9fc2lnaGFuZGxlcl90KS0xKQkvKiBlcnJvciByZXR1cm4gZnJvbSBzaWduYWwgKi8KIAogc3RydWN0IHNpZ2FjdGlvbiB7CiAJX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaAppbmRleCAzZDY1ZDI0Li4zYzlhZjZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oCkBAIC03Niw3ICs3Niw3IEBACiAjZGVmaW5lIF9fTlJfc2htZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQogX19TWVNDQUxMKF9fTlJfc2htZ2V0LCBzeXNfc2htZ2V0KQogI2RlZmluZSBfX05SX3NobWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLV9fU1lTQ0FMTChfX05SX3NobWF0LCB3cmFwX3N5c19zaG1hdCkKK19fU1lTQ0FMTChfX05SX3NobWF0LCBzeXNfc2htYXQpCiAjZGVmaW5lIF9fTlJfc2htY3RsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQogX19TWVNDQUxMKF9fTlJfc2htY3RsLCBzeXNfc2htY3RsKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmggYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKaW5kZXggMzYyOGY3Yy4uMTlmMDRiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdWRpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvYXVkaXQuaApAQCAtMSw0ICsxLDQgQEAKLS8qIGF1ZGl0LmggLS0gQXVkaXRpbmcgc3VwcG9ydCAtKi0gbGludXgtYyAtKi0KKy8qIGF1ZGl0LmggLS0gQXVkaXRpbmcgc3VwcG9ydAogICoKICAqIENvcHlyaWdodCAyMDAzLTIwMDQgUmVkIEhhdCBJbmMuLCBEdXJoYW0sIE5vcnRoIENhcm9saW5hLgogICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KQEAgLTI0LDYgKzI0LDkgQEAKICNpZm5kZWYgX0xJTlVYX0FVRElUX0hfCiAjZGVmaW5lIF9MSU5VWF9BVURJVF9IXwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKwogLyogUmVxdWVzdCBhbmQgcmVwbHkgdHlwZXMgKi8KICNkZWZpbmUgQVVESVRfR0VUICAgICAgMTAwMAkvKiBHZXQgc3RhdHVzICovCiAjZGVmaW5lIEFVRElUX1NFVCAgICAgIDEwMDEJLyogU2V0IHN0YXR1cyAoZW5hYmxlL2Rpc2FibGUvYXVkaXRkKSAqLwpAQCAtNjcsNiArNzAsNyBAQAogI2RlZmluZSBBVURJVF9GU0dJRAk4CiAjZGVmaW5lIEFVRElUX0xPR0lOVUlECTkKICNkZWZpbmUgQVVESVRfUEVSUwkxMAorI2RlZmluZSBBVURJVF9BUkNICTExCiAKIAkJCQkvKiBUaGVzZSBhcmUgT05MWSB1c2VmdWwgd2hlbiBjaGVja2luZwogCQkJCSAqIGF0IHN5c2NhbGwgZXhpdCB0aW1lIChBVURJVF9BVF9FWElUKS4gKi8KQEAgLTk2LDYgKzEwMCwzOCBAQAogI2RlZmluZSBBVURJVF9GQUlMX1BSSU5USwkxCiAjZGVmaW5lIEFVRElUX0ZBSUxfUEFOSUMJMgogCisvKiBkaXN0aW5ndWlzaCBzeXNjYWxsIHRhYmxlcyAqLworI2RlZmluZSBfX0FVRElUX0FSQ0hfNjRCSVQgMHg4MDAwMDAwMAorI2RlZmluZSBfX0FVRElUX0FSQ0hfTEUJICAgMHg0MDAwMDAwMAorI2RlZmluZSBBVURJVF9BUkNIX0FMUEhBCShFTV9BTFBIQXxfX0FVRElUX0FSQ0hfNjRCSVR8X19BVURJVF9BUkNIX0xFKQorI2RlZmluZSBBVURJVF9BUkNIX0FSTQkJKEVNX0FSTXxfX0FVRElUX0FSQ0hfTEUpCisjZGVmaW5lIEFVRElUX0FSQ0hfQVJNRUIJKEVNX0FSTSkKKyNkZWZpbmUgQVVESVRfQVJDSF9DUklTCQkoRU1fQ1JJU3xfX0FVRElUX0FSQ0hfTEUpCisjZGVmaW5lIEFVRElUX0FSQ0hfRlJWCQkoRU1fRlJWKQorI2RlZmluZSBBVURJVF9BUkNIX0g4MzAwCShFTV9IOF8zMDApCisjZGVmaW5lIEFVRElUX0FSQ0hfSTM4NgkJKEVNXzM4NnxfX0FVRElUX0FSQ0hfTEUpCisjZGVmaW5lIEFVRElUX0FSQ0hfSUE2NAkJKEVNX0lBXzY0fF9fQVVESVRfQVJDSF82NEJJVHxfX0FVRElUX0FSQ0hfTEUpCisjZGVmaW5lIEFVRElUX0FSQ0hfTTMyUgkJKEVNX00zMlIpCisjZGVmaW5lIEFVRElUX0FSQ0hfTTY4SwkJKEVNXzY4SykKKyNkZWZpbmUgQVVESVRfQVJDSF9NSVBTCQkoRU1fTUlQUykKKyNkZWZpbmUgQVVESVRfQVJDSF9NSVBTRUwJKEVNX01JUFN8X19BVURJVF9BUkNIX0xFKQorI2RlZmluZSBBVURJVF9BUkNIX01JUFM2NAkoRU1fTUlQU3xfX0FVRElUX0FSQ0hfNjRCSVQpCisjZGVmaW5lIEFVRElUX0FSQ0hfTUlQU0VMNjQJKEVNX01JUFN8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKKyNkZWZpbmUgQVVESVRfQVJDSF9QQVJJU0MJKEVNX1BBUklTQykKKyNkZWZpbmUgQVVESVRfQVJDSF9QQVJJU0M2NAkoRU1fUEFSSVNDfF9fQVVESVRfQVJDSF82NEJJVCkKKyNkZWZpbmUgQVVESVRfQVJDSF9QUEMJCShFTV9QUEMpCisjZGVmaW5lIEFVRElUX0FSQ0hfUFBDNjQJKEVNX1BQQzY0fF9fQVVESVRfQVJDSF82NEJJVCkKKyNkZWZpbmUgQVVESVRfQVJDSF9TMzkwCQkoRU1fUzM5MCkKKyNkZWZpbmUgQVVESVRfQVJDSF9TMzkwWAkoRU1fUzM5MHxfX0FVRElUX0FSQ0hfNjRCSVQpCisjZGVmaW5lIEFVRElUX0FSQ0hfU0gJCShFTV9TSCkKKyNkZWZpbmUgQVVESVRfQVJDSF9TSEVMCQkoRU1fU0h8X19BVURJVF9BUkNIX0xFKQorI2RlZmluZSBBVURJVF9BUkNIX1NINjQJCShFTV9TSHxfX0FVRElUX0FSQ0hfNjRCSVQpCisjZGVmaW5lIEFVRElUX0FSQ0hfU0hFTDY0CShFTV9TSHxfX0FVRElUX0FSQ0hfNjRCSVR8X19BVURJVF9BUkNIX0xFKQorI2RlZmluZSBBVURJVF9BUkNIX1NQQVJDCShFTV9TUEFSQykKKyNkZWZpbmUgQVVESVRfQVJDSF9TUEFSQzY0CShFTV9TUEFSQzY0fF9fQVVESVRfQVJDSF82NEJJVCkKKyNkZWZpbmUgQVVESVRfQVJDSF9WODUwCQkoRU1fVjg1MHxfX0FVRElUX0FSQ0hfTEUpCisjZGVmaW5lIEFVRElUX0FSQ0hfWDg2XzY0CShFTV9YODZfNjR8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKKwogI2lmbmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3QgYXVkaXRfbWVzc2FnZSB7CiAJc3RydWN0IG5sbXNnaGRyIG5saDsKQEAgLTEyOSwzMiArMTY1LDM2IEBACiBzdHJ1Y3QgYXVkaXRfY29udGV4dDsKIHN0cnVjdCBpbm9kZTsKIAorI2RlZmluZSBBVURJVFNDX0lOVkFMSUQgMAorI2RlZmluZSBBVURJVFNDX1NVQ0NFU1MgMQorI2RlZmluZSBBVURJVFNDX0ZBSUxVUkUgMgorI2RlZmluZSBBVURJVFNDX1JFU1VMVCh4KSAoICgobG9uZykoeCkpPDA/QVVESVRTQ19GQUlMVVJFOkFVRElUU0NfU1VDQ0VTUyApCiAjaWZkZWYgQ09ORklHX0FVRElUU1lTQ0FMTAogLyogVGhlc2UgYXJlIGRlZmluZWQgaW4gYXVkaXRzYy5jICovCiAJCQkJLyogUHVibGljIEFQSSAqLwogZXh0ZXJuIGludCAgYXVkaXRfYWxsb2Moc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIGV4dGVybiB2b2lkIGF1ZGl0X2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKLWV4dGVybiB2b2lkIGF1ZGl0X3N5c2NhbGxfZW50cnkoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorZXh0ZXJuIHZvaWQgYXVkaXRfc3lzY2FsbF9lbnRyeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBhcmNoLAogCQkJCWludCBtYWpvciwgdW5zaWduZWQgbG9uZyBhMCwgdW5zaWduZWQgbG9uZyBhMSwKIAkJCQl1bnNpZ25lZCBsb25nIGEyLCB1bnNpZ25lZCBsb25nIGEzKTsKLWV4dGVybiB2b2lkIGF1ZGl0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCByZXR1cm5fY29kZSk7CitleHRlcm4gdm9pZCBhdWRpdF9zeXNjYWxsX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgZmFpbGVkLCBsb25nIHJldHVybl9jb2RlKTsKIGV4dGVybiB2b2lkIGF1ZGl0X2dldG5hbWUoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBhdWRpdF9wdXRuYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIHZvaWQgYXVkaXRfaW5vZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7CiAKIAkJCQkvKiBQcml2YXRlIEFQSSAoZm9yIGF1ZGl0LmMgb25seSkgKi8KIGV4dGVybiBpbnQgIGF1ZGl0X3JlY2VpdmVfZmlsdGVyKGludCB0eXBlLCBpbnQgcGlkLCBpbnQgdWlkLCBpbnQgc2VxLAotCQkJCSB2b2lkICpkYXRhKTsKKwkJCQkgdm9pZCAqZGF0YSwgdWlkX3QgbG9naW51aWQpOwogZXh0ZXJuIHZvaWQgYXVkaXRfZ2V0X3N0YW1wKHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsCi0JCQkgICAgc3RydWN0IHRpbWVzcGVjICp0LCBpbnQgKnNlcmlhbCk7Ci1leHRlcm4gaW50ICBhdWRpdF9zZXRfbG9naW51aWQoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCwgdWlkX3QgbG9naW51aWQpOworCQkJICAgIHN0cnVjdCB0aW1lc3BlYyAqdCwgdW5zaWduZWQgaW50ICpzZXJpYWwpOworZXh0ZXJuIGludCAgYXVkaXRfc2V0X2xvZ2ludWlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdWlkX3QgbG9naW51aWQpOwogZXh0ZXJuIHVpZF90IGF1ZGl0X2dldF9sb2dpbnVpZChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4KTsKIGV4dGVybiBpbnQgYXVkaXRfaXBjX3Blcm1zKHVuc2lnbmVkIGxvbmcgcWJ5dGVzLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbW9kZV90IG1vZGUpOwogI2Vsc2UKICNkZWZpbmUgYXVkaXRfYWxsb2ModCkgKHsgMDsgfSkKICNkZWZpbmUgYXVkaXRfZnJlZSh0KSBkbyB7IDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYXVkaXRfc3lzY2FsbF9lbnRyeSh0LGEsYixjLGQsZSkgZG8geyA7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGF1ZGl0X3N5c2NhbGxfZXhpdCh0LHIpIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBhdWRpdF9zeXNjYWxsX2VudHJ5KHQsdGEsYSxiLGMsZCxlKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfc3lzY2FsbF9leGl0KHQsZixyKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfZ2V0bmFtZShuKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfcHV0bmFtZShuKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfaW5vZGUobixpKSBkbyB7IDsgfSB3aGlsZSAoMCkKQEAgLTE3NCwxMSArMjE0LDE1IEBACiAJCQkJCSAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCiAJCQkgICAgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwyLDMpKSk7CiBleHRlcm4gdm9pZAkJICAgIGF1ZGl0X2xvZ19lbmQoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIpOworZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9sb2dfaGV4KHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLAorCQkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkJICBzaXplX3QgbGVuKTsKK2V4dGVybiB2b2lkCQkgICAgYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwKKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyk7CiBleHRlcm4gdm9pZAkJICAgIGF1ZGl0X2xvZ19kX3BhdGgoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsCiAJCQkJCSAgICAgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQkJICAgICBzdHJ1Y3QgdmZzbW91bnQgKnZmc21udCk7Ci0KIAkJCQkvKiBQcml2YXRlIEFQSSAoZm9yIGF1ZGl0c2MuYyBvbmx5KSAqLwogZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9zZW5kX3JlcGx5KGludCBwaWQsIGludCBzZXEsIGludCB0eXBlLAogCQkJCQkgICAgIGludCBkb25lLCBpbnQgbXVsdGksCkBAIC0xOTAsNiArMjM0LDggQEAKICNkZWZpbmUgYXVkaXRfbG9nX3Zmb3JtYXQoYixmLGEpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9sb2dfZm9ybWF0KGIsZiwuLi4pIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9sb2dfZW5kKGIpIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBhdWRpdF9sb2dfaGV4KGEsYixsKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhLHMpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9sb2dfZF9wYXRoKGIscCxkLHYpIGRvIHsgOyB9IHdoaWxlICgwKQogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXV0b19mczQuaCBiL2luY2x1ZGUvbGludXgvYXV0b19mczQuaAppbmRleCBkMWM3YjBlLi5hMTY1N2ZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1dG9fZnM0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdXRvX2ZzNC5oCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIEFVVE9GU19NSU5fUFJPVE9fVkVSU0lPTgkzCiAjZGVmaW5lIEFVVE9GU19NQVhfUFJPVE9fVkVSU0lPTgk0CiAKLSNkZWZpbmUgQVVUT0ZTX1BST1RPX1NVQlZFUlNJT04gICAgICAgICA1CisjZGVmaW5lIEFVVE9GU19QUk9UT19TVUJWRVJTSU9OCQk2CiAKIC8qIE1hc2sgZm9yIGV4cGlyZSBiZWhhdmlvdXIgKi8KICNkZWZpbmUgQVVUT0ZTX0VYUF9JTU1FRElBVEUJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXdlX3ZvaWNlLmggYi9pbmNsdWRlL2xpbnV4L2F3ZV92b2ljZS5oCmluZGV4IGRhMGUyN2QuLjRiZjlmMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXdlX3ZvaWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9hd2Vfdm9pY2UuaApAQCAtMjksOSArMjksOSBAQAogI2RlZmluZSBTQU1QTEVfVFlQRV9BV0UzMgkweDIwCiAjZW5kaWYKIAotI2lmbmRlZiBfUEFUQ0hLRVkKLSNkZWZpbmUgX1BBVENIS0VZKGlkKSAoKGlkPDw4KXwweGZkKQotI2VuZGlmCisjZGVmaW5lIF9MSU5VWF9QQVRDSEtFWV9IX0lORElSRUNUCisjaW5jbHVkZSA8bGludXgvcGF0Y2hrZXkuaD4KKyN1bmRlZiBfTElOVVhfUEFUQ0hLRVlfSF9JTkRJUkVDVAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHBhdGNoIGluZm9ybWF0aW9uIHJlY29yZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAppbmRleCA1NGY4MjA4Li43ZTczNmUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaApAQCAtNzcsNyArNzcsNiBAQAogZXh0ZXJuIGludCBzZXR1cF9hcmdfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0sCiAJCQkgICB1bnNpZ25lZCBsb25nIHN0YWNrX3RvcCwKIAkJCSAgIGludCBleGVjdXRhYmxlX3N0YWNrKTsKLWV4dGVybiBpbnQgY29weV9zdHJpbmdzKGludCBhcmdjLGNoYXIgX191c2VyICogX191c2VyICogYXJndixzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTsgCiBleHRlcm4gaW50IGNvcHlfc3RyaW5nc19rZXJuZWwoaW50IGFyZ2MsY2hhciAqKiBhcmd2LHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOwogZXh0ZXJuIHZvaWQgY29tcHV0ZV9jcmVkcyhzdHJ1Y3QgbGludXhfYmlucHJtICpiaW5wcm0pOwogZXh0ZXJuIGludCBkb19jb3JlZHVtcChsb25nIHNpZ25yLCBpbnQgZXhpdF9jb2RlLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MyLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzIuaAppbmRleCA1YTM1OTE1Li5lYmVkMTc2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MyLmgKQEAgLTIyLDMgKzIyLDggQEAKICMgZGVmaW5lIF9fYXR0cmlidXRlX3B1cmVfXwlfX2F0dHJpYnV0ZV9fKChwdXJlKSkKICMgZGVmaW5lIF9fYXR0cmlidXRlX2NvbnN0X18JX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkKICNlbmRpZgorCisvKiBHQ0MgMi45NS54LzIuOTYgcmVjb2duaXplIF9fdmFfY29weSwgYnV0IG5vdCB2YV9jb3B5LiBBY3R1YWxseSBsYXRlciBHQ0MncworICogZGVmaW5lIGJvdGggdmFfY29weSBhbmQgX192YV9jb3B5LCBidXQgdGhlIGxhdHRlciBtYXkgZ28gYXdheSwgc28gbGltaXQgdGhpcworICogdG8gdGhpcyBoZWFkZXIgKi8KKyNkZWZpbmUgdmFfY29weQkJCV9fdmFfY29weQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCmluZGV4IDQ4NzcyNWMuLmQ3Mzc4MjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTkwLDYgKzkwLDEyIEBACiAjIGRlZmluZSBfX2RlcHJlY2F0ZWQJCS8qIHVuaW1wbGVtZW50ZWQgKi8KICNlbmRpZgogCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIF9fZGVwcmVjYXRlZF9mb3JfbW9kdWxlcyBfX2RlcHJlY2F0ZWQKKyNlbHNlCisjZGVmaW5lIF9fZGVwcmVjYXRlZF9mb3JfbW9kdWxlcworI2VuZGlmCisKICNpZm5kZWYgX19tdXN0X2NoZWNrCiAjZGVmaW5lIF9fbXVzdF9jaGVjawogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaCBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCmluZGV4IDkxMGVjYTMuLmYyMWFmMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCkBAIC0xMDMsNiArMTAzLDcgQEAKICNkZWZpbmUgQ1BVRlJFUV9QUkVDSEFOR0UJKDApCiAjZGVmaW5lIENQVUZSRVFfUE9TVENIQU5HRQkoMSkKICNkZWZpbmUgQ1BVRlJFUV9SRVNVTUVDSEFOR0UJKDgpCisjZGVmaW5lIENQVUZSRVFfU1VTUEVORENIQU5HRQkoOSkKIAogc3RydWN0IGNwdWZyZXFfZnJlcXMgewogCXVuc2lnbmVkIGludCBjcHU7CS8qIGNwdSBuciAqLwpAQCAtMjAwLDYgKzIwMSw3IEBACiAKIAkvKiBvcHRpb25hbCAqLwogCWludAkoKmV4aXQpCQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworCWludAkoKnN1c3BlbmQpCShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgdTMyIHN0YXRlKTsKIAlpbnQJKCpyZXN1bWUpCShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CiAJc3RydWN0IGZyZXFfYXR0cgkqKmF0dHI7CiB9OwpAQCAtMjExLDcgKzIxMyw4IEBACiAjZGVmaW5lIENQVUZSRVFfQ09OU1RfTE9PUFMgCTB4MDIJLyogbG9vcHNfcGVyX2ppZmZ5IG9yIG90aGVyIGtlcm5lbAogCQkJCQkgKiAiY29uc3RhbnRzIiBhcmVuJ3QgYWZmZWN0ZWQgYnkKIAkJCQkJICogZnJlcXVlbmN5IHRyYW5zaXRpb25zICovCi0KKyNkZWZpbmUgQ1BVRlJFUV9QTV9OT19XQVJOCTB4MDQJLyogZG9uJ3Qgd2FybiBvbiBzdXNwZW5kL3Jlc3VtZSBzcGVlZAorCQkJCQkgKiBtaXNtYXRjaGVzICovCiAKIGludCBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgKmRyaXZlcl9kYXRhKTsKIGludCBjcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBjcHVmcmVxX2RyaXZlciAqZHJpdmVyX2RhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGQuaCBiL2luY2x1ZGUvbGludXgvZWRkLmgKaW5kZXggYzZlNjc0Ny4uMTYyNTEyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VkZC5oCkBAIC0zMiw3ICszMiw3IEBACiAKICNkZWZpbmUgRURETlIgMHgxZTkJCS8qIGFkZHIgb2YgbnVtYmVyIG9mIGVkZF9pbmZvIHN0cnVjdHMgYXQgRUREQlVGCiAJCQkJICAgaW4gYm9vdF9wYXJhbXMgLSB0cmVhdCB0aGlzIGFzIDEgYnl0ZSAgKi8KLSNkZWZpbmUgRUREQlVGCTB4NjAwCQkvKiBhZGRyIG9mIGVkZF9pbmZvIHN0cnVjdHMgaW4gYm9vdF9wYXJhbXMgKi8KKyNkZWZpbmUgRUREQlVGCTB4ZDAwCQkvKiBhZGRyIG9mIGVkZF9pbmZvIHN0cnVjdHMgaW4gYm9vdF9wYXJhbXMgKi8KICNkZWZpbmUgRURETUFYTlIgNgkJLyogbnVtYmVyIG9mIGVkZF9pbmZvIHN0cnVjdHMgc3RhcnRpbmcgYXQgRUREQlVGICAqLwogI2RlZmluZSBFRERFWFRTSVpFIDgJCS8qIGNoYW5nZSB0aGVzZSBpZiB5b3UgbXVjayB3aXRoIHRoZSBzdHJ1Y3R1cmVzICovCiAjZGVmaW5lIEVERFBBUk1TSVpFIDc0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgKaW5kZXggMzk2YzQ4Yy4uMjIwNzQ4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaApAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOglAKCMpZXRoLmgJMS4wLjQJMDUvMTMvOTMKICAqCi0gKiBBdXRob3JzOglSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKiBBdXRob3JzOglSb3NzIEJpcm8KICAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCiAgKgkJUmVsb2NhdGVkIHRvIGluY2x1ZGUvbGludXggd2hlcmUgaXQgYmVsb25ncyBieSBBbGFuIENveCAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCBiNDVkM2UyLi5iNDY4YmY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC01NjMsNiArNTYzLDkgQEAKIAlpbnQgKCpmYl9zZXRjb2xyZWcpKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAogCQkJICAgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCisJLyogc2V0IGNvbG9yIHJlZ2lzdGVycyBpbiBiYXRjaCAqLworCWludCAoKmZiX3NldGNtYXApKHN0cnVjdCBmYl9jbWFwICpjbWFwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CisKIAkvKiBibGFuayBkaXNwbGF5ICovCiAJaW50ICgqZmJfYmxhbmspKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZkZGlkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZmRkaWRldmljZS5oCmluZGV4IDJlNWVlNDcuLjAwMmY2MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmRkaWRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZmRkaWRldmljZS5oCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBBdXRob3I6CUxhd3JlbmNlIFYuIFN0ZWZhbmksIDxzdGVmYW5pQGxrZy5kZWMuY29tPgogICoKICAqCQlmZGRpZGV2aWNlLmggaXMgYmFzZWQgb24gcHJldmlvdXMgdHJkZXZpY2UuaCB3b3JrIGJ5Ci0gKgkJCVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqCQkJUm9zcyBCaXJvCiAgKgkJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCQlBbGFuIENveCwgPGd3NHB0c0BndzRwdHMuYW1wci5vcmc+CiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDVkZjY4N2QuLjAxODAxMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTEwNTMsODMgKzEwNTMsODcgQEAKIGludCBzeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIAogLyoqCi0gKiAmZXhwb3J0X29wZXJhdGlvbnMgLSBmb3IgbmZzZCB0byBjb21tdW5pY2F0ZSB3aXRoIGZpbGUgc3lzdGVtcwotICogZGVjb2RlX2ZoOiAgICAgIGRlY29kZSBhIGZpbGUgaGFuZGxlIGZyYWdtZW50IGFuZCByZXR1cm4gYSAmc3RydWN0IGRlbnRyeQotICogZW5jb2RlX2ZoOiAgICAgIGVuY29kZSBhIGZpbGUgaGFuZGxlIGZyYWdtZW50IGZyb20gYSBkZW50cnkKLSAqIGdldF9uYW1lOiAgICAgICBmaW5kIHRoZSBuYW1lIGZvciBhIGdpdmVuIGlub2RlIGluIGEgZ2l2ZW4gZGlyZWN0b3J5Ci0gKiBnZXRfcGFyZW50OiAgICAgZmluZCB0aGUgcGFyZW50IG9mIGEgZ2l2ZW4gZGlyZWN0b3J5Ci0gKiBnZXRfZGVudHJ5OiAgICAgZmluZCBhIGRlbnRyeSBmb3IgdGhlIGlub2RlIGdpdmVuIGEgZmlsZSBoYW5kbGUgc3ViLWZyYWdtZW50CisgKiBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgLSBmb3IgbmZzZCB0byBjb21tdW5pY2F0ZSB3aXRoIGZpbGUgc3lzdGVtcworICogQGRlY29kZV9maDogICAgICBkZWNvZGUgYSBmaWxlIGhhbmRsZSBmcmFnbWVudCBhbmQgcmV0dXJuIGEgJnN0cnVjdCBkZW50cnkKKyAqIEBlbmNvZGVfZmg6ICAgICAgZW5jb2RlIGEgZmlsZSBoYW5kbGUgZnJhZ21lbnQgZnJvbSBhIGRlbnRyeQorICogQGdldF9uYW1lOiAgICAgICBmaW5kIHRoZSBuYW1lIGZvciBhIGdpdmVuIGlub2RlIGluIGEgZ2l2ZW4gZGlyZWN0b3J5CisgKiBAZ2V0X3BhcmVudDogICAgIGZpbmQgdGhlIHBhcmVudCBvZiBhIGdpdmVuIGRpcmVjdG9yeQorICogQGdldF9kZW50cnk6ICAgICBmaW5kIGEgZGVudHJ5IGZvciB0aGUgaW5vZGUgZ2l2ZW4gYSBmaWxlIGhhbmRsZSBzdWItZnJhZ21lbnQKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqICAgIFRoZSBleHBvcnRfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgcHJvdmlkZXMgYSBtZWFucyBmb3IgbmZzZCB0byBjb21tdW5pY2F0ZQogICogICAgd2l0aCBhIHBhcnRpY3VsYXIgZXhwb3J0ZWQgZmlsZSBzeXN0ZW0gIC0gcGFydGljdWxhcmx5IGVuYWJsaW5nIG5mc2QgYW5kCiAgKiAgICB0aGUgZmlsZXN5c3RlbSB0byBjby1vcGVyYXRlIHdoZW4gZGVhbGluZyB3aXRoIGZpbGUgaGFuZGxlcy4KICAqCi0gKiAgICBleHBvcnRfb3BlcmF0aW9ucyBjb250YWlucyB0d28gYmFzaWMgb3BlcmF0aW9uIGZvciBkZWFsaW5nIHdpdGggZmlsZSBoYW5kbGVzLAotICogICAgZGVjb2RlX2ZoKCkgYW5kIGVuY29kZV9maCgpLCBhbmQgYWxsb3dzIGZvciBzb21lIG90aGVyIG9wZXJhdGlvbnMgdG8gYmUgZGVmaW5lZAotICogICAgd2hpY2ggc3RhbmRhcmQgaGVscGVyIHJvdXRpbmVzIHVzZSB0byBnZXQgc3BlY2lmaWMgaW5mb3JtYXRpb24gZnJvbSB0aGUKLSAqICAgIGZpbGVzeXN0ZW0uCisgKiAgICBleHBvcnRfb3BlcmF0aW9ucyBjb250YWlucyB0d28gYmFzaWMgb3BlcmF0aW9uIGZvciBkZWFsaW5nIHdpdGggZmlsZQorICogICAgaGFuZGxlcywgZGVjb2RlX2ZoKCkgYW5kIGVuY29kZV9maCgpLCBhbmQgYWxsb3dzIGZvciBzb21lIG90aGVyCisgKiAgICBvcGVyYXRpb25zIHRvIGJlIGRlZmluZWQgd2hpY2ggc3RhbmRhcmQgaGVscGVyIHJvdXRpbmVzIHVzZSB0byBnZXQKKyAqICAgIHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20gdGhlIGZpbGVzeXN0ZW0uCiAgKgogICogICAgbmZzZCBlbmNvZGVzIGluZm9ybWF0aW9uIHVzZSB0byBkZXRlcm1pbmUgd2hpY2ggZmlsZXN5c3RlbSBhIGZpbGVoYW5kbGUKLSAqICAgIGFwcGxpZXMgdG8gaW4gdGhlIGluaXRpYWwgcGFydCBvZiB0aGUgZmlsZSBoYW5kbGUuICBUaGUgcmVtYWluZGVyLCB0ZXJtZWQgYQotICogICAgZmlsZSBoYW5kbGUgZnJhZ21lbnQsIGlzIGNvbnRyb2xsZWQgY29tcGxldGVseSBieSB0aGUgZmlsZXN5c3RlbS4KLSAqICAgIFRoZSBzdGFuZGFyZCBoZWxwZXIgcm91dGluZXMgYXNzdW1lIHRoYXQgdGhpcyBmcmFnbWVudCB3aWxsIGNvbnRhaW4gb25lIG9yIHR3bwotICogICAgc3ViLWZyYWdtZW50cywgb25lIHdoaWNoIGlkZW50aWZpZXMgdGhlIGZpbGUsIGFuZCBvbmUgd2hpY2ggbWF5IGJlIHVzZWQgdG8KLSAqICAgIGlkZW50aWZ5IHRoZSAoYSkgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZpbGUuCisgKiAgICBhcHBsaWVzIHRvIGluIHRoZSBpbml0aWFsIHBhcnQgb2YgdGhlIGZpbGUgaGFuZGxlLiAgVGhlIHJlbWFpbmRlciwgdGVybWVkCisgKiAgICBhIGZpbGUgaGFuZGxlIGZyYWdtZW50LCBpcyBjb250cm9sbGVkIGNvbXBsZXRlbHkgYnkgdGhlIGZpbGVzeXN0ZW0uICBUaGUKKyAqICAgIHN0YW5kYXJkIGhlbHBlciByb3V0aW5lcyBhc3N1bWUgdGhhdCB0aGlzIGZyYWdtZW50IHdpbGwgY29udGFpbiBvbmUgb3IKKyAqICAgIHR3byBzdWItZnJhZ21lbnRzLCBvbmUgd2hpY2ggaWRlbnRpZmllcyB0aGUgZmlsZSwgYW5kIG9uZSB3aGljaCBtYXkgYmUKKyAqICAgIHVzZWQgdG8gaWRlbnRpZnkgdGhlIChhKSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZmlsZS4KICAqCiAgKiAgICBJbiBzb21lIHNpdHVhdGlvbnMsIG5mc2QgbmVlZHMgdG8gZ2V0IGEgZGVudHJ5IHdoaWNoIGlzIGNvbm5lY3RlZCBpbnRvIGEKLSAqICAgIHNwZWNpZmljIHBhcnQgb2YgdGhlIGZpbGUgdHJlZS4gIFRvIGFsbG93IGZvciB0aGlzLCBpdCBwYXNzZXMgdGhlIGZ1bmN0aW9uCi0gKiAgICBhY2NlcHRhYmxlKCkgdG9nZXRoZXIgd2l0aCBhIEBjb250ZXh0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNlZSBpZiB0aGUgZGVudHJ5Ci0gKiAgICBpcyBhY2NlcHRhYmxlLiAgQXMgdGhlcmUgY2FuIGJlIG11bHRpcGxlIGRlbnRyeXMgZm9yIGEgZ2l2ZW4gZmlsZSwgdGhlIGZpbGVzeXN0ZW0KLSAqICAgIHNob3VsZCBjaGVjayBlYWNoIG9uZSBmb3IgYWNjZXB0YWJpbGl0eSBiZWZvcmUgbG9va2luZyBmb3IgdGhlIG5leHQuICBBcyBzb29uCi0gKiAgICBhcyBhbiBhY2NlcHRhYmxlIG9uZSBpcyBmb3VuZCwgaXQgc2hvdWxkIGJlIHJldHVybmVkLgorICogICAgc3BlY2lmaWMgcGFydCBvZiB0aGUgZmlsZSB0cmVlLiAgVG8gYWxsb3cgZm9yIHRoaXMsIGl0IHBhc3NlcyB0aGUKKyAqICAgIGZ1bmN0aW9uIGFjY2VwdGFibGUoKSB0b2dldGhlciB3aXRoIGEgQGNvbnRleHQgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc2VlCisgKiAgICBpZiB0aGUgZGVudHJ5IGlzIGFjY2VwdGFibGUuICBBcyB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgZGVudHJ5cyBmb3IgYQorICogICAgZ2l2ZW4gZmlsZSwgdGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNoZWNrIGVhY2ggb25lIGZvciBhY2NlcHRhYmlsaXR5IGJlZm9yZQorICogICAgbG9va2luZyBmb3IgdGhlIG5leHQuICBBcyBzb29uIGFzIGFuIGFjY2VwdGFibGUgb25lIGlzIGZvdW5kLCBpdCBzaG91bGQKKyAqICAgIGJlIHJldHVybmVkLgogICoKICAqIGRlY29kZV9maDoKLSAqICAgIEBkZWNvZGVfZmggaXMgZ2l2ZW4gYSAmc3RydWN0IHN1cGVyX2Jsb2NrIChAc2IpLCBhIGZpbGUgaGFuZGxlIGZyYWdtZW50IChAZmgsIEBmaF9sZW4pCi0gKiAgICBhbmQgYW4gYWNjZXB0YWJpbGl0eSB0ZXN0aW5nIGZ1bmN0aW9uIChAYWNjZXB0YWJsZSwgQGNvbnRleHQpLiAgSXQgc2hvdWxkIHJldHVybgotICogICAgYSAmc3RydWN0IGRlbnRyeSB3aGljaCByZWZlcnMgdG8gdGhlIHNhbWUgZmlsZSB0aGF0IHRoZSBmaWxlIGhhbmRsZSBmcmFnbWVudCByZWZlcnMKLSAqICAgIHRvLCAgYW5kIHdoaWNoIHBhc3NlcyB0aGUgYWNjZXB0YWJpbGl0eSB0ZXN0LiAgSWYgaXQgY2Fubm90LCBpdCBzaG91bGQgcmV0dXJuCi0gKiAgICBhICVOVUxMIHBvaW50ZXIgaWYgdGhlIGZpbGUgd2FzIGZvdW5kIGJ1dCBubyBhY2NlcHRhYmxlICZkZW50cmllcyB3ZXJlIGF2YWlsYWJsZSwgb3IKLSAqICAgIGEgJUVSUl9QVFIgZXJyb3IgY29kZSBpbmRpY2F0aW5nIHdoeSBpdCBjb3VsZG4ndCBiZSBmb3VuZCAoZS5nLiAlRU5PRU5UIG9yICVFTk9NRU0pLgorICogICAgQGRlY29kZV9maCBpcyBnaXZlbiBhICZzdHJ1Y3Qgc3VwZXJfYmxvY2sgKEBzYiksIGEgZmlsZSBoYW5kbGUgZnJhZ21lbnQKKyAqICAgIChAZmgsIEBmaF9sZW4pIGFuZCBhbiBhY2NlcHRhYmlsaXR5IHRlc3RpbmcgZnVuY3Rpb24gKEBhY2NlcHRhYmxlLAorICogICAgQGNvbnRleHQpLiAgSXQgc2hvdWxkIHJldHVybiBhICZzdHJ1Y3QgZGVudHJ5IHdoaWNoIHJlZmVycyB0byB0aGUgc2FtZQorICogICAgZmlsZSB0aGF0IHRoZSBmaWxlIGhhbmRsZSBmcmFnbWVudCByZWZlcnMgdG8sICBhbmQgd2hpY2ggcGFzc2VzIHRoZQorICogICAgYWNjZXB0YWJpbGl0eSB0ZXN0LiAgSWYgaXQgY2Fubm90LCBpdCBzaG91bGQgcmV0dXJuIGEgJU5VTEwgcG9pbnRlciBpZgorICogICAgdGhlIGZpbGUgd2FzIGZvdW5kIGJ1dCBubyBhY2NlcHRhYmxlICZkZW50cmllcyB3ZXJlIGF2YWlsYWJsZSwgb3IgYQorICogICAgJUVSUl9QVFIgZXJyb3IgY29kZSBpbmRpY2F0aW5nIHdoeSBpdCBjb3VsZG4ndCBiZSBmb3VuZCAoZS5nLiAlRU5PRU5UIG9yCisgKiAgICAlRU5PTUVNKS4KICAqCiAgKiBlbmNvZGVfZmg6Ci0gKiAgICBAZW5jb2RlX2ZoIHNob3VsZCBzdG9yZSBpbiB0aGUgZmlsZSBoYW5kbGUgZnJhZ21lbnQgQGZoICh1c2luZyBhdCBtb3N0IEBtYXhfbGVuIGJ5dGVzKQotICogICAgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgdXNlZCBieSBAZGVjb2RlX2ZoIHRvIHJlY292ZXIgdGhlIGZpbGUgcmVmZXJlZCB0byBieSB0aGUKLSAqICAgICZzdHJ1Y3QgZGVudHJ5IEBkZS4gIElmIHRoZSBAY29ubmVjdGFibGUgZmxhZyBpcyBzZXQsIHRoZSBlbmNvZGVfZmgoKSBzaG91bGQgc3RvcmUKLSAqICAgIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gc28gdGhhdCBhIGdvb2QgYXR0ZW1wdCBjYW4gYmUgbWFkZSB0byBmaW5kIG5vdCBvbmx5Ci0gKiAgICB0aGUgZmlsZSBidXQgYWxzbyBpdCdzIHBsYWNlIGluIHRoZSBmaWxlc3lzdGVtLiAgIFRoaXMgdHlwaWNhbGx5IG1lYW5zIHN0b3JpbmcKLSAqICAgIGEgcmVmZXJlbmNlIHRvIGRlLT5kX3BhcmVudCBpbiB0aGUgZmlsZWhhbmRsZSBmcmFnbWVudC4KLSAqICAgIGVuY29kZV9maCgpIHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBzdG9yZWQgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCi0gKiAgICBzdWNoIGFzICUtRU5PU1BDCisgKiAgICBAZW5jb2RlX2ZoIHNob3VsZCBzdG9yZSBpbiB0aGUgZmlsZSBoYW5kbGUgZnJhZ21lbnQgQGZoICh1c2luZyBhdCBtb3N0CisgKiAgICBAbWF4X2xlbiBieXRlcykgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgdXNlZCBieSBAZGVjb2RlX2ZoIHRvIHJlY292ZXIgdGhlCisgKiAgICBmaWxlIHJlZmVyZWQgdG8gYnkgdGhlICZzdHJ1Y3QgZGVudHJ5IEBkZS4gIElmIHRoZSBAY29ubmVjdGFibGUgZmxhZyBpcworICogICAgc2V0LCB0aGUgZW5jb2RlX2ZoKCkgc2hvdWxkIHN0b3JlIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gc28gdGhhdCBhIGdvb2QKKyAqICAgIGF0dGVtcHQgY2FuIGJlIG1hZGUgdG8gZmluZCBub3Qgb25seSB0aGUgZmlsZSBidXQgYWxzbyBpdCdzIHBsYWNlIGluIHRoZQorICogICAgZmlsZXN5c3RlbS4gICBUaGlzIHR5cGljYWxseSBtZWFucyBzdG9yaW5nIGEgcmVmZXJlbmNlIHRvIGRlLT5kX3BhcmVudCBpbgorICogICAgdGhlIGZpbGVoYW5kbGUgZnJhZ21lbnQuICBlbmNvZGVfZmgoKSBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAqICAgIHN0b3JlZCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgc3VjaCBhcyAlLUVOT1NQQwogICoKICAqIGdldF9uYW1lOgotICogICAgQGdldF9uYW1lIHNob3VsZCBmaW5kIGEgbmFtZSBmb3IgdGhlIGdpdmVuIEBjaGlsZCBpbiB0aGUgZ2l2ZW4gQHBhcmVudCBkaXJlY3RvcnkuCi0gKiAgICBUaGUgbmFtZSBzaG91bGQgYmUgc3RvcmVkIGluIHRoZSBAbmFtZSAod2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGl0IGlzIGFscmVhZHkKLSAqICAgIHBvaW50aW5nIHRvIGEgYSAlTkFNRV9NQVgrMSBzaXplZCBidWZmZXIuICAgZ2V0X25hbWUoKSBzaG91bGQgcmV0dXJuICUwIG9uIHN1Y2Nlc3MsCi0gKiAgICBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgZXJyb3IuCi0gKiAgICBAZ2V0X25hbWUgd2lsbCBiZSBjYWxsZWQgd2l0aG91dCBAcGFyZW50LT5pX3NlbSBoZWxkLgorICogICAgQGdldF9uYW1lIHNob3VsZCBmaW5kIGEgbmFtZSBmb3IgdGhlIGdpdmVuIEBjaGlsZCBpbiB0aGUgZ2l2ZW4gQHBhcmVudAorICogICAgZGlyZWN0b3J5LiAgVGhlIG5hbWUgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgQG5hbWUgKHdpdGggdGhlCisgKiAgICB1bmRlcnN0YW5kaW5nIHRoYXQgaXQgaXMgYWxyZWFkeSBwb2ludGluZyB0byBhIGEgJU5BTUVfTUFYKzEgc2l6ZWQKKyAqICAgIGJ1ZmZlci4gICBnZXRfbmFtZSgpIHNob3VsZCByZXR1cm4gJTAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKiAgICBvciBlcnJvci4gIEBnZXRfbmFtZSB3aWxsIGJlIGNhbGxlZCB3aXRob3V0IEBwYXJlbnQtPmlfc2VtIGhlbGQuCiAgKgogICogZ2V0X3BhcmVudDoKLSAqICAgIEBnZXRfcGFyZW50IHNob3VsZCBmaW5kIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZ2l2ZW4gQGNoaWxkIHdoaWNoIGlzIGFsc28KLSAqICAgIGEgZGlyZWN0b3J5LiAgSW4gdGhlIGV2ZW50IHRoYXQgaXQgY2Fubm90IGJlIGZvdW5kLCBvciBzdG9yYWdlIHNwYWNlIGNhbm5vdCBiZQotICogICAgYWxsb2NhdGVkLCBhICVFUlJfUFRSIHNob3VsZCBiZSByZXR1cm5lZC4KKyAqICAgIEBnZXRfcGFyZW50IHNob3VsZCBmaW5kIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZ2l2ZW4gQGNoaWxkIHdoaWNoCisgKiAgICBpcyBhbHNvIGEgZGlyZWN0b3J5LiAgSW4gdGhlIGV2ZW50IHRoYXQgaXQgY2Fubm90IGJlIGZvdW5kLCBvciBzdG9yYWdlCisgKiAgICBzcGFjZSBjYW5ub3QgYmUgYWxsb2NhdGVkLCBhICVFUlJfUFRSIHNob3VsZCBiZSByZXR1cm5lZC4KICAqCiAgKiBnZXRfZGVudHJ5OgotICogICAgR2l2ZW4gYSAmc3VwZXJfYmxvY2sgKEBzYikgYW5kIGEgcG9pbnRlciB0byBhIGZpbGUtc3lzdGVtIHNwZWNpZmljIGlub2RlIGlkZW50aWZpZXIsCi0gKiAgICBwb3NzaWJseSBhbiBpbm9kZSBudW1iZXIsIChAaW51bXApIGdldF9kZW50cnkoKSBzaG91bGQgZmluZCB0aGUgaWRlbnRpZmllZCBpbm9kZSBhbmQKLSAqICAgIHJldHVybiBhIGRlbnRyeSBmb3IgdGhhdCBpbm9kZS4KLSAqICAgIEFueSBzdWl0YWJsZSBkZW50cnkgY2FuIGJlIHJldHVybmVkIGluY2x1ZGluZywgaWYgbmVjZXNzYXJ5LCBhIG5ldyBkZW50cnkgY3JlYXRlZAotICogICAgd2l0aCBkX2FsbG9jX3Jvb3QuICBUaGUgY2FsbGVyIGNhbiB0aGVuIGZpbmQgYW55IG90aGVyIGV4dGFudCBkZW50cnlzIGJ5IGZvbGxvd2luZyB0aGUKLSAqICAgIGRfYWxpYXMgbGlua3MuICBJZiBhIG5ldyBkZW50cnkgd2FzIGNyZWF0ZWQgdXNpbmcgZF9hbGxvY19yb290LCBEQ0FDSEVfTkZTRF9ESVNDT05ORUNURUQKLSAqICAgIHNob3VsZCBiZSBzZXQsIGFuZCB0aGUgZGVudHJ5IHNob3VsZCBiZSBkX3JlaGFzaCgpZWQuCisgKiAgICBHaXZlbiBhICZzdXBlcl9ibG9jayAoQHNiKSBhbmQgYSBwb2ludGVyIHRvIGEgZmlsZS1zeXN0ZW0gc3BlY2lmaWMgaW5vZGUKKyAqICAgIGlkZW50aWZpZXIsIHBvc3NpYmx5IGFuIGlub2RlIG51bWJlciwgKEBpbnVtcCkgZ2V0X2RlbnRyeSgpIHNob3VsZCBmaW5kCisgKiAgICB0aGUgaWRlbnRpZmllZCBpbm9kZSBhbmQgcmV0dXJuIGEgZGVudHJ5IGZvciB0aGF0IGlub2RlLiAgQW55IHN1aXRhYmxlCisgKiAgICBkZW50cnkgY2FuIGJlIHJldHVybmVkIGluY2x1ZGluZywgaWYgbmVjZXNzYXJ5LCBhIG5ldyBkZW50cnkgY3JlYXRlZCB3aXRoCisgKiAgICBkX2FsbG9jX3Jvb3QuICBUaGUgY2FsbGVyIGNhbiB0aGVuIGZpbmQgYW55IG90aGVyIGV4dGFudCBkZW50cnlzIGJ5CisgKiAgICBmb2xsb3dpbmcgdGhlIGRfYWxpYXMgbGlua3MuICBJZiBhIG5ldyBkZW50cnkgd2FzIGNyZWF0ZWQgdXNpbmcKKyAqICAgIGRfYWxsb2Nfcm9vdCwgRENBQ0hFX05GU0RfRElTQ09OTkVDVEVEIHNob3VsZCBiZSBzZXQsIGFuZCB0aGUgZGVudHJ5CisgKiAgICBzaG91bGQgYmUgZF9yZWhhc2goKWVkLgogICoKLSAqICAgIElmIHRoZSBpbm9kZSBjYW5ub3QgYmUgZm91bmQsIGVpdGhlciBhICVOVUxMIHBvaW50ZXIgb3IgYW4gJUVSUl9QVFIgY29kZSBjYW4gYmUgcmV0dXJuZWQuCi0gKiAgICBUaGUgQGludW1wIHdpbGwgYmUgd2hhdGV2ZXIgd2FzIHBhc3NlZCB0byBuZnNkX2ZpbmRfZmhfZGVudHJ5KCkgaW4gZWl0aGVyIHRoZQotICogICAgQG9iaiBvciBAcGFyZW50IHBhcmFtZXRlcnMuCisgKiAgICBJZiB0aGUgaW5vZGUgY2Fubm90IGJlIGZvdW5kLCBlaXRoZXIgYSAlTlVMTCBwb2ludGVyIG9yIGFuICVFUlJfUFRSIGNvZGUKKyAqICAgIGNhbiBiZSByZXR1cm5lZC4gIFRoZSBAaW51bXAgd2lsbCBiZSB3aGF0ZXZlciB3YXMgcGFzc2VkIHRvCisgKiAgICBuZnNkX2ZpbmRfZmhfZGVudHJ5KCkgaW4gZWl0aGVyIHRoZSBAb2JqIG9yIEBwYXJlbnQgcGFyYW1ldGVycy4KICAqCiAgKiBMb2NraW5nIHJ1bGVzOgotICogIGdldF9wYXJlbnQgaXMgY2FsbGVkIHdpdGggY2hpbGQtPmRfaW5vZGUtPmlfc2VtIGRvd24KLSAqICBnZXRfbmFtZSBpcyBub3QgKHdoaWNoIGlzIHBvc3NpYmx5IGluY29uc2lzdGVudCkKKyAqICAgIGdldF9wYXJlbnQgaXMgY2FsbGVkIHdpdGggY2hpbGQtPmRfaW5vZGUtPmlfc2VtIGRvd24KKyAqICAgIGdldF9uYW1lIGlzIG5vdCAod2hpY2ggaXMgcG9zc2libHkgaW5jb25zaXN0ZW50KQogICovCiAKIHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyB7CkBAIC0xMzM3LDcgKzEzNDEsNyBAQAogCiBleHRlcm4gaW50IGNoZWNrX2Rpc2tfY2hhbmdlKHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiBleHRlcm4gaW50IGludmFsaWRhdGVfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgX19pbnZhbGlkYXRlX2RldmljZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGludCk7CitleHRlcm4gaW50IF9faW52YWxpZGF0ZV9kZXZpY2Uoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKIGV4dGVybiBpbnQgaW52YWxpZGF0ZV9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKiwgaW50KTsKIHVuc2lnbmVkIGxvbmcgaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCQlwZ29mZl90IHN0YXJ0LCBwZ29mZl90IGVuZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCA4NDhhMWJhLi5hZjc0MDdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTM4LDE0ICszOCwxNiBAQAogI2RlZmluZSBfX0dGUF9OT19HUk9XCTB4MjAwMHUJLyogU2xhYiBpbnRlcm5hbCB1c2FnZSAqLwogI2RlZmluZSBfX0dGUF9DT01QCTB4NDAwMHUJLyogQWRkIGNvbXBvdW5kIHBhZ2UgbWV0YWRhdGEgKi8KICNkZWZpbmUgX19HRlBfWkVSTwkweDgwMDB1CS8qIFJldHVybiB6ZXJvZWQgcGFnZSBvbiBzdWNjZXNzICovCisjZGVmaW5lIF9fR0ZQX05PTUVNQUxMT0MgMHgxMDAwMHUgLyogRG9uJ3QgdXNlIGVtZXJnZW5jeSByZXNlcnZlcyAqLwogCi0jZGVmaW5lIF9fR0ZQX0JJVFNfU0hJRlQgMTYJLyogUm9vbSBmb3IgMTYgX19HRlBfRk9PIGJpdHMgKi8KKyNkZWZpbmUgX19HRlBfQklUU19TSElGVCAyMAkvKiBSb29tIGZvciAyMCBfX0dGUF9GT08gYml0cyAqLwogI2RlZmluZSBfX0dGUF9CSVRTX01BU0sgKCgxIDw8IF9fR0ZQX0JJVFNfU0hJRlQpIC0gMSkKIAogLyogaWYgeW91IGZvcmdldCB0byBhZGQgdGhlIGJpdG1hc2sgaGVyZSBrZXJuZWwgd2lsbCBjcmFzaCwgcGVyaW9kICovCiAjZGVmaW5lIEdGUF9MRVZFTF9NQVNLIChfX0dGUF9XQUlUfF9fR0ZQX0hJR0h8X19HRlBfSU98X19HRlBfRlN8IFwKIAkJCV9fR0ZQX0NPTER8X19HRlBfTk9XQVJOfF9fR0ZQX1JFUEVBVHwgXAotCQkJX19HRlBfTk9GQUlMfF9fR0ZQX05PUkVUUll8X19HRlBfTk9fR1JPV3xfX0dGUF9DT01QKQorCQkJX19HRlBfTk9GQUlMfF9fR0ZQX05PUkVUUll8X19HRlBfTk9fR1JPV3xfX0dGUF9DT01QfCBcCisJCQlfX0dGUF9OT01FTUFMTE9DKQogCiAjZGVmaW5lIEdGUF9BVE9NSUMJKF9fR0ZQX0hJR0gpCiAjZGVmaW5lIEdGUF9OT0lPCShfX0dGUF9XQUlUKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaXBwaWRldmljZS5oIGIvaW5jbHVkZS9saW51eC9oaXBwaWRldmljZS5oCmluZGV4IDg5YjNhNGEuLjlkZWJlNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlwcGlkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpcHBpZGV2aWNlLmgKQEAgLTEwLDcgKzEwLDcgQEAKICAqIEF1dGhvcjoJSmVzIFNvcmVuc2VuLCA8SmVzLlNvcmVuc2VuQGNlcm4uY2g+CiAgKgogICoJCWhpcHBpZGV2aWNlLmggaXMgYmFzZWQgb24gcHJldmlvdXMgZmRkaWRldmljZS5oIHdvcmsgYnkKLSAqCQkJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICoJCQlSb3NzIEJpcm8KICAqCQkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJCUFsYW4gQ294LCA8Z3c0cHRzQGd3NHB0cy5hbXByLm9yZz4KICAqCQkJTGF3cmVuY2UgVi4gU3RlZmFuaSwgPHN0ZWZhbmlAbGtnLmRlYy5jb20+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmLmggYi9pbmNsdWRlL2xpbnV4L2lmLmgKaW5kZXggMTEwMjgyZC4uZDczYTlkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWYuaApAQCAtOCw3ICs4LDcgQEAKICAqIFZlcnNpb246CUAoIylpZi5oCTEuMC4yCTA0LzE4LzkzCiAgKgogICogQXV0aG9yczoJT3JpZ2luYWwgdGFrZW4gZnJvbSBCZXJrZWxleSBVTklYIDQuMywgKGMpIFVDQiAxOTgyLTE5ODgKLSAqCQlSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKgkJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgogICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfYXJwLmggYi9pbmNsdWRlL2xpbnV4L2lmX2FycC5oCmluZGV4IGJiZjQ5YmMuLjA4NTY1NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfYXJwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9hcnAuaApAQCAtOSw3ICs5LDcgQEAKICAqCiAgKiBBdXRob3JzOglPcmlnaW5hbCB0YWtlbiBmcm9tIEJlcmtlbGV5IFVOSVggNC4zLCAoYykgVUNCIDE5ODYtMTk4OAogICoJCVBvcnRpb25zIHRha2VuIGZyb20gdGhlIEtBOVEvTk9TICh2Mi4wMG0gUEEwR1JJKSBzb3VyY2UuCi0gKgkJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICoJCVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCUZsb3JpYW4gTGEgUm9jaGUsCiAgKgkJSm9uYXRoYW4gTGF5ZXMgPGxheWVzQGxvcmFuLmNvbT4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfbHRhbGsuaCBiL2luY2x1ZGUvbGludXgvaWZfbHRhbGsuaAppbmRleCBlNzVlODMyLi43NjUyNTc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2x0YWxrLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9sdGFsay5oCkBAIC02LDcgKzYsNyBAQAogI2RlZmluZSBMVEFMS19BTEVOCQkxCiAKICNpZmRlZiBfX0tFUk5FTF9fCi1leHRlcm4gdm9pZCBsdGFsa19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbHRhbGtkZXYoaW50IHNpemVvZl9wcml2KTsKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQuaAppbmRleCBiNzBkZjhmLi43MjczMWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCkBAIC0zMjgsNiArMzI4LDExIEBACiAjZGVmaW5lIEtFWV9CUklHSFRORVNTVVAJMjI1CiAjZGVmaW5lIEtFWV9NRURJQQkJMjI2CiAKKyNkZWZpbmUgS0VZX1NXSVRDSFZJREVPTU9ERQkyMjcKKyNkZWZpbmUgS0VZX0tCRElMTFVNVE9HR0xFCTIyOAorI2RlZmluZSBLRVlfS0JESUxMVU1ET1dOCTIyOQorI2RlZmluZSBLRVlfS0JESUxMVU1VUAkJMjMwCisKICNkZWZpbmUgS0VZX1VOS05PV04JCTI0MAogCiAjZGVmaW5lIEJUTl9NSVNDCQkweDEwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc29fZnMuaCBiL2luY2x1ZGUvbGludXgvaXNvX2ZzLmgKaW5kZXggMDk5MDM5ZC4uNDc5Njc4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pc29fZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lzb19mcy5oCkBAIC0xLDQgKzEsMyBAQAotCiAjaWZuZGVmIF9JU09GU19GU19ICiAjZGVmaW5lIF9JU09GU19GU19ICiAKQEAgLTE2MywxNTAgKzE2Miw0IEBACiAKICNkZWZpbmUgSVNPRlNfU1VQRVJfTUFHSUMgMHg5NjYwCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0vKiBOdW1iZXIgY29udmVyc2lvbiBpbmxpbmVzLCBuYW1lZCBhZnRlciB0aGUgc2VjdGlvbiBpbiBJU08gOTY2MAotICAgdGhleSBjb3JyZXNwb25kIHRvLiAqLwotCi0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pc29fZnNfaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lzb19mc19zYi5oPgotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpc29mc19zYl9pbmZvICpJU09GU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXJldHVybiBzYi0+c19mc19pbmZvOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpc29faW5vZGVfaW5mbyAqSVNPRlNfSShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBpc29faW5vZGVfaW5mbywgdmZzX2lub2RlKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNvbnVtXzcxMShjaGFyICpwKQotewotCXJldHVybiAqKHU4ICopcDsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IGlzb251bV83MTIoY2hhciAqcCkKLXsKLQlyZXR1cm4gKihzOCAqKXA7Ci19Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpc29udW1fNzIxKGNoYXIgKnApCi17Ci0JcmV0dXJuIGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiAqKXApKTsKLX0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlzb251bV83MjIoY2hhciAqcCkKLXsKLQlyZXR1cm4gYmUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopcCkpOwotfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXNvbnVtXzcyMyhjaGFyICpwKQotewotCS8qIElnbm9yZSBiaWdlbmRpYW4gZGF0dW0gZHVlIHRvIGJyb2tlbiBtYXN0ZXJpbmcgcHJvZ3JhbXMgKi8KLQlyZXR1cm4gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopcCkpOwotfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXNvbnVtXzczMShjaGFyICpwKQotewotCXJldHVybiBsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMzIgKilwKSk7Ci19Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpc29udW1fNzMyKGNoYXIgKnApCi17Ci0JcmV0dXJuIGJlMzJfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUzMiAqKXApKTsKLX0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlzb251bV83MzMoY2hhciAqcCkKLXsKLQkvKiBJZ25vcmUgYmlnZW5kaWFuIGRhdHVtIGR1ZSB0byBicm9rZW4gbWFzdGVyaW5nIHByb2dyYW1zICovCi0JcmV0dXJuIGxlMzJfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUzMiAqKXApKTsKLX0KLWV4dGVybiBpbnQgaXNvX2RhdGUoY2hhciAqLCBpbnQpOwotCi1zdHJ1Y3QgaW5vZGU7CQkvKiBUbyBtYWtlIGdjYyBoYXBweSAqLwotCi1leHRlcm4gaW50IHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIHN0cnVjdCBpbm9kZSAqKTsKLWV4dGVybiBpbnQgZ2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIGNoYXIgKiwgc3RydWN0IGlub2RlICopOwotZXh0ZXJuIGludCBpc29mc19uYW1lX3RyYW5zbGF0ZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7Ci0KLWludCBnZXRfam9saWV0X2ZpbGVuYW1lKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqLCB1bnNpZ25lZCBjaGFyICosIHN0cnVjdCBpbm9kZSAqKTsKLWludCBnZXRfYWNvcm5fZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIGNoYXIgKiwgc3RydWN0IGlub2RlICopOwotCi1leHRlcm4gc3RydWN0IGRlbnRyeSAqaXNvZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7Ci1leHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICppc29mc19icmVhZChzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QpOwotZXh0ZXJuIGludCBpc29mc19nZXRfYmxvY2tzKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqLCB1bnNpZ25lZCBsb25nKTsKLQotZXh0ZXJuIHN0cnVjdCBpbm9kZSAqaXNvZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0KLS8qIEJlY2F1c2UgdGhlIGlub2RlIG51bWJlciBpcyBubyBsb25nZXIgcmVsZXZhbnQgdG8gZmluZGluZyB0aGUKLSAqIHVuZGVybHlpbmcgbWV0YS1kYXRhIGZvciBhbiBpbm9kZSwgd2UgYXJlIGZyZWUgdG8gY2hvb3NlIGEgbW9yZQotICogY29udmVuaWVudCAzMi1iaXQgbnVtYmVyIGFzIHRoZSBpbm9kZSBudW1iZXIuICBUaGUgaW5vZGUgbnVtYmVyaW5nCi0gKiBzY2hlbWUgd2FzIHJlY29tbWVuZGVkIGJ5IFNlcmdleSBWbGFzb3YgYW5kIEVyaWMgTGFtbWVydHMuICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaXNvZnNfZ2V0X2lubyh1bnNpZ25lZCBsb25nIGJsb2NrLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgYnVmYml0cykKLXsKLQlyZXR1cm4gKGJsb2NrIDw8IChidWZiaXRzIC0gNSkpIHwgKG9mZnNldCA+PiA1KTsKLX0KLQotLyogRXZlcnkgZGlyZWN0b3J5IGNhbiBoYXZlIG1hbnkgcmVkdW5kYW50IGRpcmVjdG9yeSBlbnRyaWVzIHNjYXR0ZXJlZAotICogdGhyb3VnaG91dCB0aGUgZGlyZWN0b3J5IHRyZWUuICBGaXJzdCB0aGVyZSBpcyB0aGUgZGlyZWN0b3J5IGVudHJ5Ci0gKiB3aXRoIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3Rvcnkgc3RvcmVkIGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgotICogVGhlbiwgdGhlcmUgaXMgdGhlICIuIiBkaXJlY3RvcnkgZW50cnkgc3RvcmVkIGluIHRoZSBkaXJlY3RvcnkKLSAqIGl0c2VsZi4gIEZpbmFsbHksIHRoZXJlIGFyZSBwb3NzaWJseSBtYW55ICIuLiIgZGlyZWN0b3J5IGVudHJpZXMKLSAqIHN0b3JlZCBpbiBhbGwgdGhlIHN1YmRpcmVjdG9yaWVzLgotICoKLSAqIEluIG9yZGVyIGZvciB0aGUgTkZTIGdldF9wYXJlbnQoKSBtZXRob2QgdG8gd29yayBhbmQgZm9yIHRoZQotICogZ2VuZXJhbCBjb25zaXN0ZW5jeSBvZiB0aGUgZGNhY2hlLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUKLSAqICJpX2lnZXQ1X2Jsb2NrIiBhbmQgImlfaWdldDVfb2Zmc2V0IiBhbGwgcG9pbnQgdG8gZXhhY3RseSBvbmUgb2YKLSAqIHRoZSBtYW55IHJlZHVuZGFudCBlbnRyaWVzIGZvciBlYWNoIGRpcmVjdG9yeS4gIFdlIG5vcm1hbGl6ZSB0aGUKLSAqIGJsb2NrIGFuZCBvZmZzZXQgYnkgYWx3YXlzIG1ha2luZyB0aGVtIHBvaW50IHRvIHRoZSAiLiIgIGRpcmVjdG9yeS4KLSAqCi0gKiBOb3RpY2UgdGhhdCB3ZSBkbyBub3QgdXNlIHRoZSBlbnRyeSBmb3IgdGhlIGRpcmVjdG9yeSB3aXRoIHRoZSBuYW1lCi0gKiB0aGF0IGlzIGxvY2F0ZWQgaW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuICBFdmVuIHRob3VnaCBjaG9vc2luZyB0aGlzCi0gKiBmaXJzdCBkaXJlY3RvcnkgaXMgbW9yZSBuYXR1cmFsLCBpdCBpcyBtdWNoIGVhc2llciB0byBmaW5kIHRoZSAiLiIKLSAqIGVudHJ5IGluIHRoZSBORlMgZ2V0X3BhcmVudCgpIG1ldGhvZCBiZWNhdXNlIGl0IGlzIGltcGxpY2l0bHkKLSAqIGVuY29kZWQgaW4gdGhlICJleHRlbnQgKyBleHRfYXR0cl9sZW5ndGgiIGZpZWxkcyBvZiBfYWxsXyB0aGUKLSAqIHJlZHVuZGFudCBlbnRyaWVzIGZvciB0aGUgZGlyZWN0b3J5LiAgVGh1cywgaXQgY2FuIGFsd2F5cyBiZQotICogcmVhY2hlZCByZWdhcmRsZXNzIG9mIHdoaWNoIGRpcmVjdG9yeSBlbnRyeSB5b3UgaGF2ZSBpbiBoYW5kLgotICoKLSAqIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgIi4iIGVudHJ5IGlzIHNpbXBseSB0aGUgZmlyc3QgZGlyZWN0b3J5Ci0gKiByZWNvcmQgd2hlbiB5b3Ugc3RhcnQgcmVhZGluZyB0aGUgZmlsZSB0aGF0IGhvbGRzIGFsbCB0aGUgZGlyZWN0b3J5Ci0gKiByZWNvcmRzLCBhbmQgdGhpcyBmaWxlIHN0YXJ0cyBhdCAiZXh0ZW50ICsgZXh0X2F0dHJfbGVuZ3RoIiBibG9ja3MuCi0gKiBCZWNhdXNlIHRoZSAiLiIgZW50cnkgaXMgYWx3YXlzIHRoZSBmaXJzdCBlbnRyeSBsaXN0ZWQgaW4gdGhlCi0gKiBkaXJlY3RvcmllcyBmaWxlLCB0aGUgbm9ybWFsaXplZCAib2Zmc2V0IiB2YWx1ZSBpcyBhbHdheXMgMC4KLSAqCi0gKiBZb3Ugc2hvdWxkIHBhc3MgdGhlIGRpcmVjdG9yeSBlbnRyeSBpbiAiZGUiLiAgT24gcmV0dXJuLCAiYmxvY2siCi0gKiBhbmQgIm9mZnNldCIgd2lsbCBob2xkIG5vcm1hbGl6ZWQgdmFsdWVzLiAgT25seSBkaXJlY3RvcmllcyBhcmUKLSAqIGFmZmVjdGVkIG1ha2luZyBpdCBzYWZlIHRvIGNhbGwgZXZlbiBmb3Igbm9uLWRpcmVjdG9yeSBmaWxlCi0gKiB0eXBlcy4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotaXNvZnNfbm9ybWFsaXplX2Jsb2NrX2FuZF9vZmZzZXQoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkKiBkZSwKLQkJCQkgdW5zaWduZWQgbG9uZyAqYmxvY2ssCi0JCQkJIHVuc2lnbmVkIGxvbmcgKm9mZnNldCkKLXsKLQkvKiBPbmx5IGRpcmVjdG9yaWVzIGFyZSBub3JtYWxpemVkLiAqLwotCWlmIChkZS0+ZmxhZ3NbMF0gJiAyKSB7Ci0JCSpvZmZzZXQgPSAwOwotCQkqYmxvY2sgPSAodW5zaWduZWQgbG9uZylpc29udW1fNzMzKGRlLT5leHRlbnQpCi0JCQkrICh1bnNpZ25lZCBsb25nKWlzb251bV83MTEoZGUtPmV4dF9hdHRyX2xlbmd0aCk7Ci0JfQotfQotCi1leHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaXNvZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpc29mc19kaXJfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGlzb2ZzX3N5bWxpbmtfYW9wczsKLWV4dGVybiBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgaXNvZnNfZXhwb3J0X29wczsKLQotLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHVzZWQgdG8gY2hlY2sgZm9yIG1lbW9yeSBsZWFrcy4gKi8KLSNpZmRlZiBMRUFLX0NIRUNLCi0jZGVmaW5lIGZyZWVfcyBsZWFrX2NoZWNrX2ZyZWVfcwotI2RlZmluZSBtYWxsb2MgbGVha19jaGVja19tYWxsb2MKLSNkZWZpbmUgc2JfYnJlYWQgbGVha19jaGVja19icmVhZAotI2RlZmluZSBicmVsc2UgbGVha19jaGVja19icmVsc2UKLWV4dGVybiB2b2lkICogbGVha19jaGVja19tYWxsb2ModW5zaWduZWQgaW50IHNpemUpOwotZXh0ZXJuIHZvaWQgbGVha19jaGVja19mcmVlX3Modm9pZCAqIG9iaiwgaW50IHNpemUpOwotZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIGxlYWtfY2hlY2tfYnJlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKTsKLWV4dGVybiB2b2lkIGxlYWtfY2hlY2tfYnJlbHNlKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKTsKLSNlbmRpZiAvKiBMRUFLX0NIRUNLICovCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc29fZnNfaS5oIGIvaW5jbHVkZS9saW51eC9pc29fZnNfaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTA2NWU5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvaXNvX2ZzX2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSNpZm5kZWYgX0lTT19GU19JCi0jZGVmaW5lIF9JU09fRlNfSQotCi0jaW5jbHVkZSA8bGludXgvZnMuaD4KLQotZW51bSBpc29mc19maWxlX2Zvcm1hdCB7Ci0JaXNvZnNfZmlsZV9ub3JtYWwgPSAwLAotCWlzb2ZzX2ZpbGVfc3BhcnNlID0gMSwKLQlpc29mc19maWxlX2NvbXByZXNzZWQgPSAyLAotfTsKLQkKLS8qCi0gKiBpc28gZnMgaW5vZGUgZGF0YSBpbiBtZW1vcnkKLSAqLwotc3RydWN0IGlzb19pbm9kZV9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIGlfaWdldDVfYmxvY2s7Ci0JdW5zaWduZWQgbG9uZyBpX2lnZXQ1X29mZnNldDsKLQl1bnNpZ25lZCBpbnQgaV9maXJzdF9leHRlbnQ7Ci0JdW5zaWduZWQgY2hhciBpX2ZpbGVfZm9ybWF0OwotCXVuc2lnbmVkIGNoYXIgaV9mb3JtYXRfcGFybVszXTsKLQl1bnNpZ25lZCBsb25nIGlfbmV4dF9zZWN0aW9uX2Jsb2NrOwotCXVuc2lnbmVkIGxvbmcgaV9uZXh0X3NlY3Rpb25fb2Zmc2V0OwotCW9mZl90IGlfc2VjdGlvbl9zaXplOwotCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNvX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L2lzb19mc19zYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDNiOTdiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvaXNvX2ZzX3NiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jaWZuZGVmIF9JU09GU19GU19TQgotI2RlZmluZSBfSVNPRlNfRlNfU0IKLQotLyoKLSAqIGlzbzk2NjAgc3VwZXItYmxvY2sgZGF0YSBpbiBtZW1vcnkKLSAqLwotc3RydWN0IGlzb2ZzX3NiX2luZm8gewotCXVuc2lnbmVkIGxvbmcgc19uaW5vZGVzOwotCXVuc2lnbmVkIGxvbmcgc19uem9uZXM7Ci0JdW5zaWduZWQgbG9uZyBzX2ZpcnN0ZGF0YXpvbmU7Ci0JdW5zaWduZWQgbG9uZyBzX2xvZ196b25lX3NpemU7Ci0JdW5zaWduZWQgbG9uZyBzX21heF9zaXplOwotCQotCXVuc2lnbmVkIGNoYXIgc19oaWdoX3NpZXJyYTsgLyogQSBzaW1wbGUgZmxhZyAqLwotCXVuc2lnbmVkIGNoYXIgc19tYXBwaW5nOwotCWludCAgICAgICAgICAgc19yb2NrX29mZnNldDsgLyogb2Zmc2V0IG9mIFNVU1AgZmllbGRzIHdpdGhpbiBTVSBhcmVhICovCi0JdW5zaWduZWQgY2hhciBzX3JvY2s7Ci0JdW5zaWduZWQgY2hhciBzX2pvbGlldF9sZXZlbDsKLQl1bnNpZ25lZCBjaGFyIHNfdXRmODsKLQl1bnNpZ25lZCBjaGFyIHNfY3J1ZnQ7IC8qIEJyb2tlbiBkaXNrcyB3aXRoIGhpZ2gKLQkJCQkgIGJ5dGUgb2YgbGVuZ3RoIGNvbnRhaW5pbmcKLQkJCQkgIGp1bmsgKi8KLQl1bnNpZ25lZCBjaGFyIHNfdW5oaWRlOwotCXVuc2lnbmVkIGNoYXIgc19ub3N1aWQ7Ci0JdW5zaWduZWQgY2hhciBzX25vZGV2OwotCXVuc2lnbmVkIGNoYXIgc19ub2NvbXByZXNzOwotCi0JbW9kZV90IHNfbW9kZTsKLQlnaWRfdCBzX2dpZDsKLQl1aWRfdCBzX3VpZDsKLQlzdHJ1Y3QgbmxzX3RhYmxlICpzX25sc19pb2NoYXJzZXQ7IC8qIE5hdGl2ZSBsYW5ndWFnZSBzdXBwb3J0IHRhYmxlICovCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXhqdXNlci5oIGIvaW5jbHVkZS9saW51eC9peGp1c2VyLmgKaW5kZXggODgxMjExNi4uZmQxNzU2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9peGp1c2VyLmgKKysrIGIvaW5jbHVkZS9saW51eC9peGp1c2VyLmgKQEAgLTQyLDggKzQyLDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBjaGFyIGl4anVzZXJfaF9yY3NpZFtdID0gIiRJZDogaXhqdXNlci5oLHYgNC4xIDIwMDEvMDgvMDUgMDA6MTc6MzcgY3JhaWdzIEV4cCAkIjsKLQogI2luY2x1ZGUgPGxpbnV4L3RlbGVwaG9ueS5oPgogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDdjMWNiYTQuLmUyNWI5NzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTE1LDEwICsxMTUsMTkgQEAKIGV4dGVybiBpbnQga2VybmVsX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpOwogZXh0ZXJuIGludCBzZXNzaW9uX29mX3BncnAoaW50IHBncnApOwogCisjaWZkZWYgQ09ORklHX1BSSU5USwogYXNtbGlua2FnZSBpbnQgdnByaW50ayhjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDApKSk7CiBhc21saW5rYWdlIGludCBwcmludGsoY29uc3QgY2hhciAqIGZtdCwgLi4uKQogCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCB2cHJpbnRrKGNvbnN0IGNoYXIgKnMsIHZhX2xpc3QgYXJncykKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDApKSk7CitzdGF0aWMgaW5saW5lIGludCB2cHJpbnRrKGNvbnN0IGNoYXIgKnMsIHZhX2xpc3QgYXJncykgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKnMsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitzdGF0aWMgaW5saW5lIGludCBwcmludGsoY29uc3QgY2hhciAqcywgLi4uKSB7IHJldHVybiAwOyB9CisjZW5kaWYKIAogdW5zaWduZWQgbG9uZyBpbnRfc3FydCh1bnNpZ25lZCBsb25nKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmggYi9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaAppbmRleCBmMjBjMTYzLi45OWRkYmE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaApAQCAtNDMsNiArNDMsOSBAQAogc3RydWN0IGtwcm9iZSB7CiAJc3RydWN0IGhsaXN0X25vZGUgaGxpc3Q7CiAKKwkvKiBsaXN0IG9mIGtwcm9iZXMgZm9yIG11bHRpLWhhbmRsZXIgc3VwcG9ydCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwogCS8qIGxvY2F0aW9uIG9mIHRoZSBwcm9iZSBwb2ludCAqLwogCWtwcm9iZV9vcGNvZGVfdCAqYWRkcjsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGM3NGE3NGMuLjE3NTE4ZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTYzNyw5ICs2MzcsOSBAQAogICogVGhlc2UgZnVuY3Rpb25zIGFyZSBwYXNzZWQgYSBjb3VudCBgbnJfdG9fc2NhbicgYW5kIGEgZ2ZwbWFzay4gIFRoZXkgc2hvdWxkCiAgKiBzY2FuIGBucl90b19zY2FuJyBvYmplY3RzLCBhdHRlbXB0aW5nIHRvIGZyZWUgdGhlbS4KICAqCi0gKiBUaGUgY2FsbGJhY2sgbXVzdCB0aGUgbnVtYmVyIG9mIG9iamVjdHMgd2hpY2ggcmVtYWluIGluIHRoZSBjYWNoZS4KKyAqIFRoZSBjYWxsYmFjayBtdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgd2hpY2ggcmVtYWluIGluIHRoZSBjYWNoZS4KICAqCi0gKiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBwYXNzZXMgbnJfdG9fc2NhbiA9PSAwIHdoZW4gdGhlIFZNIGlzIHF1ZXJ5aW5nIHRoZQorICogVGhlIGNhbGxiYWNrIHdpbGwgYmUgcGFzc2VkIG5yX3RvX3NjYW4gPT0gMCB3aGVuIHRoZSBWTSBpcyBxdWVyeWluZyB0aGUKICAqIGNhY2hlIHNpemUsIHNvIGEgZmFzdHBhdGggZm9yIHRoYXQgY2FzZSBpcyBhcHByb3ByaWF0ZS4KICAqLwogdHlwZWRlZiBpbnQgKCpzaHJpbmtlcl90KShpbnQgbnJfdG9fc2NhbiwgdW5zaWduZWQgaW50IGdmcF9tYXNrKTsKQEAgLTcyNiw2ICs3MjYsNyBAQAogZXh0ZXJuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqLAogCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHBnb2ZmX3QgcGdvZmYpOwogZXh0ZXJuIHZvaWQgZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CitleHRlcm4gaW50IG1heV9leHBhbmRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXBhZ2UuaCBiL2luY2x1ZGUvbGludXgvbXBhZ2UuaAppbmRleCBkZWExYjAwLi4zY2E4ODA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21wYWdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tcGFnZS5oCkBAIC0yMCw5ICsyMCw2IEBACiAJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2spOwogaW50IG1wYWdlX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaywKIAkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwotaW50IF9fbXBhZ2Vfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsIGdldF9ibG9ja190IGdldF9ibG9jaywKLQkJd3JpdGVwYWdlX3Qgd3JpdGVwYWdlKTsKIAogc3RhdGljIGlubGluZSBpbnQKIGdlbmVyaWNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCA3ODIzYjM0Li42ZDk5N2ZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTcsNyArNyw3IEBACiAgKiBWZXJzaW9uOglAKCMpbmV0LmgJMS4wLjMJMDUvMjUvOTMKICAqCiAgKiBBdXRob3JzOglPcmVzdCBaYm9yb3dza2ksIDxvYnpAS29kYWsuQ09NPgotICoJCVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqCQlSb3NzIEJpcm8KICAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCiAgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNjQsMTkgKzY0LDE5IEBACiAjZGVmaW5lIFNPQ0tfUEFTU0NSRUQJCTMKIAogI2lmbmRlZiBBUkNIX0hBU19TT0NLRVRfVFlQRVMKLS8qKiBzb2NrX3R5cGUgLSBTb2NrZXQgdHlwZXMKLSAqIAorLyoqCisgKiBlbnVtIHNvY2tfdHlwZSAtIFNvY2tldCB0eXBlcworICogQFNPQ0tfU1RSRUFNOiBzdHJlYW0gKGNvbm5lY3Rpb24pIHNvY2tldAorICogQFNPQ0tfREdSQU06IGRhdGFncmFtIChjb25uLmxlc3MpIHNvY2tldAorICogQFNPQ0tfUkFXOiByYXcgc29ja2V0CisgKiBAU09DS19SRE06IHJlbGlhYmx5LWRlbGl2ZXJlZCBtZXNzYWdlCisgKiBAU09DS19TRVFQQUNLRVQ6IHNlcXVlbnRpYWwgcGFja2V0IHNvY2tldAorICogQFNPQ0tfUEFDS0VUOiBsaW51eCBzcGVjaWZpYyB3YXkgb2YgZ2V0dGluZyBwYWNrZXRzIGF0IHRoZSBkZXYgbGV2ZWwuCisgKgkJICBGb3Igd3JpdGluZyByYXJwIGFuZCBvdGhlciBzaW1pbGFyIHRoaW5ncyBvbiB0aGUgdXNlciBsZXZlbC4KKyAqCiAgKiBXaGVuIGFkZGluZyBzb21lIG5ldyBzb2NrZXQgdHlwZSBwbGVhc2UKICAqIGdyZXAgQVJDSF9IQVNfU09DS0VUX1RZUEUgaW5jbHVkZS9hc20tKiAvc29ja2V0LmgsIGF0IGxlYXN0IE1JUFMKICAqIG92ZXJyaWRlcyB0aGlzIGVudW0gZm9yIGJpbmFyeSBjb21wYXQgcmVhc29ucy4KLSAqIAotICogQFNPQ0tfU1RSRUFNIC0gc3RyZWFtIChjb25uZWN0aW9uKSBzb2NrZXQKLSAqIEBTT0NLX0RHUkFNIC0gZGF0YWdyYW0gKGNvbm4ubGVzcykgc29ja2V0Ci0gKiBAU09DS19SQVcgLSByYXcgc29ja2V0Ci0gKiBAU09DS19SRE0gLSByZWxpYWJseS1kZWxpdmVyZWQgbWVzc2FnZQotICogQFNPQ0tfU0VRUEFDS0VUIC0gc2VxdWVudGlhbCBwYWNrZXQgc29ja2V0IAotICogQFNPQ0tfUEFDS0VUIC0gbGludXggc3BlY2lmaWMgd2F5IG9mIGdldHRpbmcgcGFja2V0cyBhdCB0aGUgZGV2IGxldmVsLgotICoJCSAgRm9yIHdyaXRpbmcgcmFycCBhbmQgb3RoZXIgc2ltaWxhciB0aGluZ3Mgb24gdGhlIHVzZXIgbGV2ZWwuCiAgKi8KIGVudW0gc29ja190eXBlIHsKIAlTT0NLX1NUUkVBTQk9IDEsCkBAIC05MywxNSArOTMsMTUgQEAKIAogLyoqCiAgKiAgc3RydWN0IHNvY2tldCAtIGdlbmVyYWwgQlNEIHNvY2tldAotICogIEBzdGF0ZSAtIHNvY2tldCBzdGF0ZSAoJVNTX0NPTk5FQ1RFRCwgZXRjKQotICogIEBmbGFncyAtIHNvY2tldCBmbGFncyAoJVNPQ0tfQVNZTkNfTk9TUEFDRSwgZXRjKQotICogIEBvcHMgLSBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgb3BlcmF0aW9ucwotICogIEBmYXN5bmNfbGlzdCAtIEFzeW5jaHJvbm91cyB3YWtlIHVwIGxpc3QKLSAqICBAZmlsZSAtIEZpbGUgYmFjayBwb2ludGVyIGZvciBnYwotICogIEBzayAtIGludGVybmFsIG5ldHdvcmtpbmcgcHJvdG9jb2wgYWdub3N0aWMgc29ja2V0IHJlcHJlc2VudGF0aW9uCi0gKiAgQHdhaXQgLSB3YWl0IHF1ZXVlIGZvciBzZXZlcmFsIHVzZXMKLSAqICBAdHlwZSAtIHNvY2tldCB0eXBlICglU09DS19TVFJFQU0sIGV0YykKLSAqICBAcGFzc2NyZWQgLSBjcmVkZW50aWFscyAodXNlZCBvbmx5IGluIFVuaXggU29ja2V0cyAoYWthIFBGX0xPQ0FMKSkKKyAqICBAc3RhdGU6IHNvY2tldCBzdGF0ZSAoJVNTX0NPTk5FQ1RFRCwgZXRjKQorICogIEBmbGFnczogc29ja2V0IGZsYWdzICglU09DS19BU1lOQ19OT1NQQUNFLCBldGMpCisgKiAgQG9wczogcHJvdG9jb2wgc3BlY2lmaWMgc29ja2V0IG9wZXJhdGlvbnMKKyAqICBAZmFzeW5jX2xpc3Q6IEFzeW5jaHJvbm91cyB3YWtlIHVwIGxpc3QKKyAqICBAZmlsZTogRmlsZSBiYWNrIHBvaW50ZXIgZm9yIGdjCisgKiAgQHNrOiBpbnRlcm5hbCBuZXR3b3JraW5nIHByb3RvY29sIGFnbm9zdGljIHNvY2tldCByZXByZXNlbnRhdGlvbgorICogIEB3YWl0OiB3YWl0IHF1ZXVlIGZvciBzZXZlcmFsIHVzZXMKKyAqICBAdHlwZTogc29ja2V0IHR5cGUgKCVTT0NLX1NUUkVBTSwgZXRjKQorICogIEBwYXNzY3JlZDogY3JlZGVudGlhbHMgKHVzZWQgb25seSBpbiBVbml4IFNvY2tldHMgKGFrYSBQRl9MT0NBTCkpCiAgKi8KIHN0cnVjdCBzb2NrZXQgewogCXNvY2tldF9zdGF0ZQkJc3RhdGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA4ZDc3NWJlLi5hYzExZDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTcsNyArNyw3IEBACiAgKgogICogVmVyc2lvbjoJQCgjKWRldi5oCTEuMC4xMAkwOC8xMi85MwogICoKLSAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCUNvcmV5IE1pbnlhcmQgPHdmLXJjaCFtaW55YXJkQHJlbGF5LkVVLm5ldD4KICAqCQlEb25hbGQgSi4gQmVja2VyLCA8YmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292PgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCmluZGV4IGM5YmFjZjkuLjllNTc1MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKQEAgLTYyLDYgKzYyLDkgQEAKIAlORl9JUF9QUklfRklMVEVSID0gMCwKIAlORl9JUF9QUklfTkFUX1NSQyA9IDEwMCwKIAlORl9JUF9QUklfU0VMSU5VWF9MQVNUID0gMjI1LAorCU5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSID0gSU5UX01BWCAtIDIsCisJTkZfSVBfUFJJX05BVF9TRVFfQURKVVNUID0gSU5UX01BWCAtIDEsCisJTkZfSVBfUFJJX0NPTk5UUkFDS19DT05GSVJNID0gSU5UX01BWCwKIAlORl9JUF9QUklfTEFTVCA9IElOVF9NQVgsCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0bGluay5oCmluZGV4IGY3MzFhYmQuLmIyNzM4YWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0bGluay5oCkBAIC0xMTAsNiArMTEwLDcgQEAKIAlfX3UzMgkJCWRzdF9waWQ7CiAJX191MzIJCQlkc3RfZ3JvdXBzOwogCWtlcm5lbF9jYXBfdAkJZWZmX2NhcDsKKwlfX3UzMgkJCWxvZ2ludWlkOwkvKiBMb2dpbiAoYXVkaXQpIHVpZCAqLwogfTsKIAogI2RlZmluZSBORVRMSU5LX0NCKHNrYikJCSgqKHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyopJigoc2tiKS0+Y2IpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA2Yjc0ZmNmLi4zOWFiOGM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtMTMxLDYgKzEzMSw3IEBACiAJdW5zaWduZWQgbG9uZyBhbGxvY3N0YWxsOwkvKiBkaXJlY3QgcmVjbGFpbSBjYWxscyAqLwogCiAJdW5zaWduZWQgbG9uZyBwZ3JvdGF0ZWQ7CS8qIHBhZ2VzIHJvdGF0ZWQgdG8gdGFpbCBvZiB0aGUgTFJVICovCisJdW5zaWduZWQgbG9uZyBucl9ib3VuY2U7CS8qIHBhZ2VzIGZvciBib3VuY2UgYnVmZmVycyAqLwogfTsKIAogZXh0ZXJuIHZvaWQgZ2V0X3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2Vfc3RhdGUgKnJldCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhdGNoa2V5LmggYi9pbmNsdWRlL2xpbnV4L3BhdGNoa2V5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3NGE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGF0Y2hrZXkuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogPGxpbnV4L3BhdGNoa2V5Lmg+IC0tIGRlZmluaXRpb24gb2YgX1BBVENIS0VZIG1hY3JvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFN0dWFydCBCcmFkeQorICoKKyAqIFRoaXMgZXhpc3RzIGJlY2F1c2UgYXdlX3ZvaWNlLmggZGVmaW5lZCBpdHMgb3duIF9QQVRDSEtFWSBhbmQgaXQgd2Fzbid0CisgKiBjbGVhciB3aGV0aGVyIHJlbW92aW5nIHRoaXMgd291bGQgYnJlYWsgYW55dGhpbmcgaW4gdXNlcnNwYWNlLgorICoKKyAqIERvIG5vdCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseS4gIFBsZWFzZSB1c2UgPHN5cy9zb3VuZGNhcmQuaD4gaW5zdGVhZC4KKyAqIEZvciBrZXJuZWwgY29kZSwgdXNlIDxsaW51eC9zb3VuZGNhcmQuaD4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9QQVRDSEtFWV9IX0lORElSRUNUCisjZXJyb3IgInBhdGNoa2V5LmggaW5jbHVkZWQgZGlyZWN0bHkiCisjZW5kaWYKKworI2lmbmRlZiBfTElOVVhfUEFUQ0hLRVlfSAorI2RlZmluZSBfTElOVVhfUEFUQ0hLRVlfSAorCisvKiBFbmRpYW4gbWFjcm9zLiAqLworI2lmZGVmIF9fS0VSTkVMX18KKyMgIGluY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNlbHNlCisjICBpbmNsdWRlIDxlbmRpYW4uaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKQorIyAgaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisjICAgIGRlZmluZSBfUEFUQ0hLRVkoaWQpICgweGZkMDB8aWQpCisjICBlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorIyAgICBkZWZpbmUgX1BBVENIS0VZKGlkKSAoKGlkPDw4KXwweDAwZmQpCisjICBlbHNlCisjICAgIGVycm9yICJjb3VsZCBub3QgZGV0ZXJtaW5lIGJ5dGUgb3JkZXIiCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX0JZVEVfT1JERVIpCisjICBpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisjICAgIGRlZmluZSBfUEFUQ0hLRVkoaWQpICgweGZkMDB8aWQpCisjICBlbGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyMgICAgZGVmaW5lIF9QQVRDSEtFWShpZCkgKChpZDw8OCl8MHgwMGZkKQorIyAgZWxzZQorIyAgICBlcnJvciAiY291bGQgbm90IGRldGVybWluZSBieXRlIG9yZGVyIgorIyAgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX1BBVENIS0VZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDNjODkxNDguLmI1MjM4YmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtNjcxLDYgKzY3MSw3IEBACiAJaW50ICAoKnN1c3BlbmQpIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwkvKiBEZXZpY2Ugc3VzcGVuZGVkICovCiAJaW50ICAoKnJlc3VtZSkgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwkgICAgICAgICAgICAgICAgLyogRGV2aWNlIHdva2VuIHVwICovCiAJaW50ICAoKmVuYWJsZV93YWtlKSAoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUsIGludCBlbmFibGUpOyAgIC8qIEVuYWJsZSB3YWtlIGV2ZW50ICovCisJdm9pZCAoKnNodXRkb3duKSAoc3RydWN0IHBjaV9kZXYgKmRldik7CiAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglkcml2ZXI7CiAJc3RydWN0IHBjaV9keW5pZHMgZHluaWRzOwpAQCAtODEwLDcgKzgxMSw2IEBACiBpbnQgcGNpX3NldF9td2koc3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIHBjaV9jbGVhcl9td2koc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzayk7Ci1pbnQgcGNpX2RhY19zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spOwogaW50IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzayk7CiBpbnQgcGNpX2Fzc2lnbl9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaSk7CiAKQEAgLTk0MSw3ICs5NDEsNiBAQAogc3RhdGljIGlubGluZSBpbnQgcGNpX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gLUVJTzsgfQogc3RhdGljIGlubGluZSB2b2lkIHBjaV9kaXNhYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spIHsgcmV0dXJuIC1FSU87IH0KLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9kYWNfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKSB7IHJldHVybiAtRUlPOyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2lfYXNzaWduX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpKSB7IHJldHVybiAtRUJVU1k7fQogc3RhdGljIGlubGluZSBpbnQgcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KSB7IHJldHVybiAwO30KIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRydikgeyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGYxZjc1ZmQuLmFlMjc3OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC04NTQsNiArODU0LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfTEEJMHgwMDIwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlMRVhfREFDOTYwX0xQCTB4MDA1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01ZTEVYX0RBQzk2MF9CQQkweEJBNTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfR0VNCTB4QjE2NgogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUElDT1AJCTB4MTA2NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BJQ09QX1BUODZDNTJYCTB4MDAwMQpAQCAtMjA2Miw2ICsyMDYzLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BRkFWTEFCX1AwMzAJMHgyMTgyCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9CUk9BRENPTQkJMHgxNGU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTIJMHgxNjAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDAJMHgxNjQ0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDEJMHgxNjQ1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDIJMHgxNjQ2CkBAIC0yNDE0LDYgKzI0MTYsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMQkweDI3YjkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzIJMHgyN2MwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18zCTB4MjdjMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMzAJMHgyN2IwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18zMQkweDI3YmQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzUJMHgyN2M0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN182CTB4MjdjNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfNwkweDI3YzgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCA0ZDc0NzQzLi5mZDI3NmFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC0xNTcsOSArMTU3LDkgQEAKIC8qKgogICogcmN1X3JlYWRfbG9jayAtIG1hcmsgdGhlIGJlZ2lubmluZyBvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCiAgKgotICogV2hlbiBzeW5jaHJvbml6ZV9rZXJuZWwoKSBpcyBpbnZva2VkIG9uIG9uZSBDUFUgd2hpbGUgb3RoZXIgQ1BVcworICogV2hlbiBzeW5jaHJvbml6ZV9yY3UoKSBpcyBpbnZva2VkIG9uIG9uZSBDUFUgd2hpbGUgb3RoZXIgQ1BVcwogICogYXJlIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLCB0aGVuIHRoZQotICogc3luY2hyb25pemVfa2VybmVsKCkgaXMgZ3VhcmFudGVlZCB0byBibG9jayB1bnRpbCBhZnRlciBhbGwgdGhlIG90aGVyCisgKiBzeW5jaHJvbml6ZV9yY3UoKSBpcyBndWFyYW50ZWVkIHRvIGJsb2NrIHVudGlsIGFmdGVyIGFsbCB0aGUgb3RoZXIKICAqIENQVXMgZXhpdCB0aGVpciBjcml0aWNhbCBzZWN0aW9ucy4gIFNpbWlsYXJseSwgaWYgY2FsbF9yY3UoKSBpcyBpbnZva2VkCiAgKiBvbiBvbmUgQ1BVIHdoaWxlIG90aGVyIENQVXMgYXJlIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCiAgKiBzZWN0aW9ucywgaW52b2NhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBSQ1UgY2FsbGJhY2sgaXMgZGVmZXJyZWQKQEAgLTI1Niw2ICsyNTYsMjEgQEAKIAkJCQkJCShwKSA9ICh2KTsgXAogCQkJCQl9KQogCisvKioKKyAqIHN5bmNocm9uaXplX3NjaGVkIC0gYmxvY2sgdW50aWwgYWxsIENQVXMgaGF2ZSBleGl0ZWQgYW55IG5vbi1wcmVlbXB0aXZlCisgKiBrZXJuZWwgY29kZSBzZXF1ZW5jZXMuCisgKgorICogVGhpcyBtZWFucyB0aGF0IGFsbCBwcmVlbXB0X2Rpc2FibGUgY29kZSBzZXF1ZW5jZXMsIGluY2x1ZGluZyBOTUkgYW5kCisgKiBoYXJkd2FyZS1pbnRlcnJ1cHQgaGFuZGxlcnMsIGluIHByb2dyZXNzIG9uIGVudHJ5IHdpbGwgaGF2ZSBjb21wbGV0ZWQKKyAqIGJlZm9yZSB0aGlzIHByaW1pdGl2ZSByZXR1cm5zLiAgSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdAorICogc29mdGlycSBoYW5kbGVycyB3aWxsIGhhdmUgY29tcGxldGVkLCBzaW5jZSBpbiBzb21lIGtlcm5lbHMKKyAqCisgKiBUaGlzIHByaW1pdGl2ZSBwcm92aWRlcyB0aGUgZ3VhcmFudGVlcyBtYWRlIGJ5IHRoZSAoZGVwcmVjYXRlZCkKKyAqIHN5bmNocm9uaXplX2tlcm5lbCgpIEFQSS4gIEluIGNvbnRyYXN0LCBzeW5jaHJvbml6ZV9yY3UoKSBvbmx5CisgKiBndWFyYW50ZWVzIHRoYXQgcmN1X3JlYWRfbG9jaygpIHNlY3Rpb25zIHdpbGwgaGF2ZSBjb21wbGV0ZWQuCisgKi8KKyNkZWZpbmUgc3luY2hyb25pemVfc2NoZWQoKSBzeW5jaHJvbml6ZV9yY3UoKQorCiBleHRlcm4gdm9pZCByY3VfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IGNwdSwgaW50IHVzZXIpOwogZXh0ZXJuIHZvaWQgcmN1X3Jlc3RhcnRfY3B1KGludCBjcHUpOwpAQCAtMjY1LDcgKzI4MCw5IEBACiAJCQkJdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpKTsKIGV4dGVybiB2b2lkIEZBU1RDQUxMKGNhbGxfcmN1X2JoKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKIAkJCQl2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkKSkpOwotZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfa2VybmVsKHZvaWQpOworZXh0ZXJuIF9fZGVwcmVjYXRlZF9mb3JfbW9kdWxlcyB2b2lkIHN5bmNocm9uaXplX2tlcm5lbCh2b2lkKTsKK2V4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdSh2b2lkKTsKK3ZvaWQgc3luY2hyb25pemVfaWRsZSh2b2lkKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0xJTlVYX1JDVVBEQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVib290X2ZpeHVwcy5oIGIvaW5jbHVkZS9saW51eC9yZWJvb3RfZml4dXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgwZWEyZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmVib290X2ZpeHVwcy5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX0xJTlVYX1JFQk9PVF9GSVhVUFNfSAorI2RlZmluZSBfTElOVVhfUkVCT09UX0ZJWFVQU19ICisKKyNpZmRlZiBDT05GSUdfWDg2X1JFQk9PVEZJWFVQUworZXh0ZXJuIHZvaWQgbWFjaF9yZWJvb3RfZml4dXBzKHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgbWFjaF9yZWJvb3RfZml4dXBzKCkgKCh2b2lkKSgwKSkKKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX1JFQk9PVF9GSVhVUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfYWNsLmgKaW5kZXggYTU3ZTk3My4uMmFlZjljMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2FjbC5oCkBAIC01LDE4ICs1LDE4IEBACiAjZGVmaW5lIFJFSVNFUkZTX0FDTF9WRVJTSU9OCTB4MDAwMQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JX191MTYJCWVfdGFnOwotCV9fdTE2CQllX3Blcm07Ci0JX191MzIJCWVfaWQ7CisJX19sZTE2CQllX3RhZzsKKwlfX2xlMTYJCWVfcGVybTsKKwlfX2xlMzIJCWVfaWQ7CiB9IHJlaXNlcmZzX2FjbF9lbnRyeTsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCV9fdTE2CQllX3RhZzsKLQlfX3UxNgkJZV9wZXJtOworCV9fbGUxNgkJZV90YWc7CisJX19sZTE2CQllX3Blcm07CiB9IHJlaXNlcmZzX2FjbF9lbnRyeV9zaG9ydDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCV9fdTMyCQlhX3ZlcnNpb247CisJX19sZTMyCQlhX3ZlcnNpb247CiB9IHJlaXNlcmZzX2FjbF9oZWFkZXI7CiAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHJlaXNlcmZzX2FjbF9zaXplKGludCBjb3VudCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAppbmRleCBiY2NmZjhiLi4zMjE0ODYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCkBAIC0xMTQsNDcgKzExNCw0NyBAQAogCiAKIHN0cnVjdCBqb3VybmFsX3BhcmFtcyB7Ci0gICAgX191MzIganBfam91cm5hbF8xc3RfYmxvY2s7CSAgICAgIC8qIHdoZXJlIGRvZXMgam91cm5hbCBzdGFydCBmcm9tIG9uIGl0cworICAgIF9fbGUzMiBqcF9qb3VybmFsXzFzdF9ibG9jazsJICAgICAgLyogd2hlcmUgZG9lcyBqb3VybmFsIHN0YXJ0IGZyb20gb24gaXRzCiAJCQkJICAgICAgICogZGV2aWNlICovCi0gICAgX191MzIganBfam91cm5hbF9kZXY7CSAgICAgIC8qIGpvdXJuYWwgZGV2aWNlIHN0X3JkZXYgKi8KLSAgICBfX3UzMiBqcF9qb3VybmFsX3NpemU7CSAgICAgIC8qIHNpemUgb2YgdGhlIGpvdXJuYWwgKi8KLSAgICBfX3UzMiBqcF9qb3VybmFsX3RyYW5zX21heDsJICAgICAgLyogbWF4IG51bWJlciBvZiBibG9ja3MgaW4gYSB0cmFuc2FjdGlvbi4gKi8KLSAgICBfX3UzMiBqcF9qb3VybmFsX21hZ2ljOyAJICAgICAgLyogcmFuZG9tIHZhbHVlIG1hZGUgb24gZnMgY3JlYXRpb24gKHRoaXMKKyAgICBfX2xlMzIganBfam91cm5hbF9kZXY7CSAgICAgIC8qIGpvdXJuYWwgZGV2aWNlIHN0X3JkZXYgKi8KKyAgICBfX2xlMzIganBfam91cm5hbF9zaXplOwkgICAgICAvKiBzaXplIG9mIHRoZSBqb3VybmFsICovCisgICAgX19sZTMyIGpwX2pvdXJuYWxfdHJhbnNfbWF4OwkgICAgICAvKiBtYXggbnVtYmVyIG9mIGJsb2NrcyBpbiBhIHRyYW5zYWN0aW9uLiAqLworICAgIF9fbGUzMiBqcF9qb3VybmFsX21hZ2ljOyAJICAgICAgLyogcmFuZG9tIHZhbHVlIG1hZGUgb24gZnMgY3JlYXRpb24gKHRoaXMKIAkJCQkgICAgICAgKiB3YXMgc2Jfam91cm5hbF9ibG9ja19jb3VudCkgKi8KLSAgICBfX3UzMiBqcF9qb3VybmFsX21heF9iYXRjaDsJICAgICAgLyogbWF4IG51bWJlciBvZiBibG9ja3MgdG8gYmF0Y2ggaW50byBhCisgICAgX19sZTMyIGpwX2pvdXJuYWxfbWF4X2JhdGNoOwkgICAgICAvKiBtYXggbnVtYmVyIG9mIGJsb2NrcyB0byBiYXRjaCBpbnRvIGEKIAkJCQkgICAgICAgKiB0cmFucyAqLwotICAgIF9fdTMyIGpwX2pvdXJuYWxfbWF4X2NvbW1pdF9hZ2U7ICAvKiBpbiBzZWNvbmRzLCBob3cgb2xkIGNhbiBhbiBhc3luYworICAgIF9fbGUzMiBqcF9qb3VybmFsX21heF9jb21taXRfYWdlOyAgLyogaW4gc2Vjb25kcywgaG93IG9sZCBjYW4gYW4gYXN5bmMKIAkJCQkgICAgICAgKiBjb21taXQgYmUgKi8KLSAgICBfX3UzMiBqcF9qb3VybmFsX21heF90cmFuc19hZ2U7ICAgLyogaW4gc2Vjb25kcywgaG93IG9sZCBjYW4gYSB0cmFuc2FjdGlvbgorICAgIF9fbGUzMiBqcF9qb3VybmFsX21heF90cmFuc19hZ2U7ICAgLyogaW4gc2Vjb25kcywgaG93IG9sZCBjYW4gYSB0cmFuc2FjdGlvbgogCQkJCSAgICAgICAqIGJlICovCiB9OwogCiAvKiB0aGlzIGlzIHRoZSBzdXBlciBmcm9tIDMuNS5YLCB3aGVyZSBYID49IDEwICovCiBzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2tfdjEKIHsKLSAgICBfX3UzMiBzX2Jsb2NrX2NvdW50OwkgICAvKiBibG9ja3MgY291bnQgICAgICAgICAqLwotICAgIF9fdTMyIHNfZnJlZV9ibG9ja3M7ICAgICAgICAgICAvKiBmcmVlIGJsb2NrcyBjb3VudCAgICAqLwotICAgIF9fdTMyIHNfcm9vdF9ibG9jazsgICAgICAgICAgICAvKiByb290IGJsb2NrIG51bWJlciAgICAqLworICAgIF9fbGUzMiBzX2Jsb2NrX2NvdW50OwkgICAvKiBibG9ja3MgY291bnQgICAgICAgICAqLworICAgIF9fbGUzMiBzX2ZyZWVfYmxvY2tzOyAgICAgICAgICAgLyogZnJlZSBibG9ja3MgY291bnQgICAgKi8KKyAgICBfX2xlMzIgc19yb290X2Jsb2NrOyAgICAgICAgICAgIC8qIHJvb3QgYmxvY2sgbnVtYmVyICAgICovCiAgICAgc3RydWN0IGpvdXJuYWxfcGFyYW1zIHNfam91cm5hbDsKLSAgICBfX3UxNiBzX2Jsb2Nrc2l6ZTsgICAgICAgICAgICAgLyogYmxvY2sgc2l6ZSAqLwotICAgIF9fdTE2IHNfb2lkX21heHNpemU7CSAgIC8qIG1heCBzaXplIG9mIG9iamVjdCBpZCBhcnJheSwgc2VlCisgICAgX19sZTE2IHNfYmxvY2tzaXplOyAgICAgICAgICAgICAvKiBibG9jayBzaXplICovCisgICAgX19sZTE2IHNfb2lkX21heHNpemU7CSAgIC8qIG1heCBzaXplIG9mIG9iamVjdCBpZCBhcnJheSwgc2VlCiAJCQkJICAgICogZ2V0X29iamVjdGlkKCkgY29tbWVudGFyeSAgKi8KLSAgICBfX3UxNiBzX29pZF9jdXJzaXplOwkgICAvKiBjdXJyZW50IHNpemUgb2Ygb2JqZWN0IGlkIGFycmF5ICovCi0gICAgX191MTYgc191bW91bnRfc3RhdGU7ICAgICAgICAgIC8qIHRoaXMgaXMgc2V0IHRvIDEgd2hlbiBmaWxlc3lzdGVtIHdhcworICAgIF9fbGUxNiBzX29pZF9jdXJzaXplOwkgICAvKiBjdXJyZW50IHNpemUgb2Ygb2JqZWN0IGlkIGFycmF5ICovCisgICAgX19sZTE2IHNfdW1vdW50X3N0YXRlOyAgICAgICAgICAvKiB0aGlzIGlzIHNldCB0byAxIHdoZW4gZmlsZXN5c3RlbSB3YXMKIAkJCQkgICAgKiB1bW91bnRlZCwgdG8gMiAtIHdoZW4gbm90ICovICAgIAogICAgIGNoYXIgc19tYWdpY1sxMF07ICAgICAgICAgICAgICAvKiByZWlzZXJmcyBtYWdpYyBzdHJpbmcgaW5kaWNhdGVzIHRoYXQKIAkJCQkgICAgKiBmaWxlIHN5c3RlbSBpcyByZWlzZXJmczoKIAkJCQkgICAgKiAiUmVJc0VyRnMiIG9yICJSZUlzRXIyRnMiIG9yICJSZUlzRXIzRnMiICovCi0gICAgX191MTYgc19mc19zdGF0ZTsJICAgICAgICAgICAvKiBpdCBpcyBzZXQgdG8gdXNlZCBieSBmc2NrIHRvIG1hcmsgd2hpY2gKKyAgICBfX2xlMTYgc19mc19zdGF0ZTsJICAgICAgICAgICAvKiBpdCBpcyBzZXQgdG8gdXNlZCBieSBmc2NrIHRvIG1hcmsgd2hpY2gKIAkJCQkgICAgKiBwaGFzZSBvZiByZWJ1aWxkaW5nIGlzIGRvbmUgKi8KLSAgICBfX3UzMiBzX2hhc2hfZnVuY3Rpb25fY29kZTsgICAgLyogaW5kaWNhdGUsIHdoYXQgaGFzaCBmdW5jdGlvbiBpcyBiZWluZyB1c2UKKyAgICBfX2xlMzIgc19oYXNoX2Z1bmN0aW9uX2NvZGU7ICAgIC8qIGluZGljYXRlLCB3aGF0IGhhc2ggZnVuY3Rpb24gaXMgYmVpbmcgdXNlCiAJCQkJICAgICogdG8gc29ydCBuYW1lcyBpbiBhIGRpcmVjdG9yeSovCi0gICAgX191MTYgc190cmVlX2hlaWdodDsgICAgICAgICAgIC8qIGhlaWdodCBvZiBkaXNrIHRyZWUgKi8KLSAgICBfX3UxNiBzX2JtYXBfbnI7ICAgICAgICAgICAgICAgLyogYW1vdW50IG9mIGJpdG1hcCBibG9ja3MgbmVlZGVkIHRvIGFkZHJlc3MKKyAgICBfX2xlMTYgc190cmVlX2hlaWdodDsgICAgICAgICAgIC8qIGhlaWdodCBvZiBkaXNrIHRyZWUgKi8KKyAgICBfX2xlMTYgc19ibWFwX25yOyAgICAgICAgICAgICAgIC8qIGFtb3VudCBvZiBiaXRtYXAgYmxvY2tzIG5lZWRlZCB0byBhZGRyZXNzCiAJCQkJICAgICogZWFjaCBibG9jayBvZiBmaWxlIHN5c3RlbSAqLwotICAgIF9fdTE2IHNfdmVyc2lvbjsgICAgICAgICAgICAgICAvKiB0aGlzIGZpZWxkIGlzIG9ubHkgcmVsaWFibGUgb24gZmlsZXN5c3RlbQorICAgIF9fbGUxNiBzX3ZlcnNpb247ICAgICAgICAgICAgICAgLyogdGhpcyBmaWVsZCBpcyBvbmx5IHJlbGlhYmxlIG9uIGZpbGVzeXN0ZW0KIAkJCQkgICAgKiB3aXRoIG5vbi1zdGFuZGFyZCBqb3VybmFsICovCi0gICAgX191MTYgc19yZXNlcnZlZF9mb3Jfam91cm5hbDsgIC8qIHNpemUgaW4gYmxvY2tzIG9mIGpvdXJuYWwgYXJlYSBvbiBtYWluCisgICAgX19sZTE2IHNfcmVzZXJ2ZWRfZm9yX2pvdXJuYWw7ICAvKiBzaXplIGluIGJsb2NrcyBvZiBqb3VybmFsIGFyZWEgb24gbWFpbgogCQkJCSAgICAqIGRldmljZSwgd2UgbmVlZCB0byBrZWVwIGFmdGVyCiAJCQkJICAgICogbWFraW5nIGZzIHdpdGggbm9uLXN0YW5kYXJkIGpvdXJuYWwgKi8JCiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CkBAIC0xNjUsOCArMTY1LDggQEAKIHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jawogewogICAgIHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9ja192MSBzX3YxOwotICAgIF9fdTMyIHNfaW5vZGVfZ2VuZXJhdGlvbjsKLSAgICBfX3UzMiBzX2ZsYWdzOyAgICAgICAgICAgICAgICAgIC8qIFJpZ2h0IG5vdyB1c2VkIG9ubHkgYnkgaW5vZGUtYXR0cmlidXRlcywgaWYgZW5hYmxlZCAqLworICAgIF9fbGUzMiBzX2lub2RlX2dlbmVyYXRpb247CisgICAgX19sZTMyIHNfZmxhZ3M7ICAgICAgICAgICAgICAgICAgLyogUmlnaHQgbm93IHVzZWQgb25seSBieSBpbm9kZS1hdHRyaWJ1dGVzLCBpZiBlbmFibGVkICovCiAgICAgdW5zaWduZWQgY2hhciBzX3V1aWRbMTZdOyAgICAgICAvKiBmaWxlc3lzdGVtIHVuaXF1ZSBpZGVudGlmaWVyICovCiAgICAgdW5zaWduZWQgY2hhciBzX2xhYmVsWzE2XTsgICAgICAvKiBmaWxlc3lzdGVtIHZvbHVtZSBsYWJlbCAqLwogICAgIGNoYXIgc191bnVzZWRbODhdIDsgICAgICAgICAgICAgLyogemVybyBmaWxsZWQgYnkgbWtyZWlzZXJmcyBhbmQKQEAgLTIyNSw3ICsyMjUsNyBAQAogI2RlZmluZSBTQl9PTkRJU0tfSk9VUk5BTF9ERVZJQ0UocykgXAogICAgICAgICAgbGUzMl90b19jcHUgKChTQl9PTkRJU0tfSlAocyktPmpwX2pvdXJuYWxfZGV2KSkKICNkZWZpbmUgU0JfT05ESVNLX1JFU0VSVkVEX0ZPUl9KT1VSTkFMKHMpIFwKLSAgICAgICAgIGxlMzJfdG9fY3B1ICgoU0JfVjFfRElTS19TVVBFUl9CTE9DSyhzKS0+c19yZXNlcnZlZF9mb3Jfam91cm5hbCkpCisgICAgICAgICBsZTE2X3RvX2NwdSAoKFNCX1YxX0RJU0tfU1VQRVJfQkxPQ0socyktPnNfcmVzZXJ2ZWRfZm9yX2pvdXJuYWwpKQogCiAjZGVmaW5lIGlzX2Jsb2NrX2luX2xvZ19vcl9yZXNlcnZlZF9hcmVhKHMsIGJsb2NrKSBcCiAgICAgICAgICBibG9jayA+PSBTQl9KT1VSTkFMXzFzdF9SRVNFUlZFRF9CTE9DSyhzKSBcCkBAIC0yNjksNyArMjY5LDcgQEAKICNkZWZpbmUgUVVPVEFfRVhDRUVERUQgLTYKIAogdHlwZWRlZiBfX3UzMiBiX2Jsb2NrbnJfdDsKLXR5cGVkZWYgX191MzIgdW5wX3Q7Cit0eXBlZGVmIF9fbGUzMiB1bnBfdDsKIAogc3RydWN0IHVuZm1fbm9kZWluZm8gewogICAgIHVucF90IHVuZm1fbm9kZW51bTsKQEAgLTM3Niw3OCArMzc2LDU3IEBACiAvLyBkaXJlY3RvcmllcyB1c2UgdGhpcyBrZXkgYXMgd2VsbCBhcyBvbGQgZmlsZXMKIC8vCiBzdHJ1Y3Qgb2Zmc2V0X3YxIHsKLSAgICBfX3UzMiBrX29mZnNldDsKLSAgICBfX3UzMiBrX3VuaXF1ZW5lc3M7CisgICAgX19sZTMyIGtfb2Zmc2V0OworICAgIF9fbGUzMiBrX3VuaXF1ZW5lc3M7CiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKIHN0cnVjdCBvZmZzZXRfdjIgewotI2lmZGVmIF9fTElUVExFX0VORElBTgotCSAgICAvKiBsaXR0bGUgZW5kaWFuIHZlcnNpb24gKi8KLQkgICAgX191NjQga19vZmZzZXQ6NjA7Ci0JICAgIF9fdTY0IGtfdHlwZTogNDsKLSNlbHNlCi0JICAgIC8qIGJpZyBlbmRpYW4gdmVyc2lvbiAqLwotCSAgICBfX3U2NCBrX3R5cGU6IDQ7Ci0JICAgIF9fdTY0IGtfb2Zmc2V0OjYwOwotI2VuZGlmCisJX19sZTY0IHY7CiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKLSNpZm5kZWYgX19MSVRUTEVfRU5ESUFOCi10eXBlZGVmIHVuaW9uIHsKLSAgICBzdHJ1Y3Qgb2Zmc2V0X3YyIG9mZnNldF92MjsKLSAgICBfX3U2NCBsaW5lYXI7Ci19IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgb2Zmc2V0X3YyX2VzYWZlX292ZXJsYXk7Ci0KIHN0YXRpYyBpbmxpbmUgX191MTYgb2Zmc2V0X3YyX2tfdHlwZSggY29uc3Qgc3RydWN0IG9mZnNldF92MiAqdjIgKQogewotICAgIG9mZnNldF92Ml9lc2FmZV9vdmVybGF5IHRtcCA9ICooY29uc3Qgb2Zmc2V0X3YyX2VzYWZlX292ZXJsYXkgKil2MjsKLSAgICB0bXAubGluZWFyID0gbGU2NF90b19jcHUoIHRtcC5saW5lYXIgKTsKLSAgICByZXR1cm4gKHRtcC5vZmZzZXRfdjIua190eXBlIDw9IFRZUEVfTUFYVFlQRSk/dG1wLm9mZnNldF92Mi5rX3R5cGU6VFlQRV9BTlk7CisJX191OCB0eXBlID0gbGU2NF90b19jcHUodjItPnYpID4+IDYwOworCXJldHVybiAodHlwZSA8PSBUWVBFX01BWFRZUEUpP3R5cGU6VFlQRV9BTlk7CiB9CiAgCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X29mZnNldF92Ml9rX3R5cGUoIHN0cnVjdCBvZmZzZXRfdjIgKnYyLCBpbnQgdHlwZSApCiB7Ci0gICAgb2Zmc2V0X3YyX2VzYWZlX292ZXJsYXkgKnRtcCA9IChvZmZzZXRfdjJfZXNhZmVfb3ZlcmxheSAqKXYyOwotICAgIHRtcC0+bGluZWFyID0gbGU2NF90b19jcHUodG1wLT5saW5lYXIpOwotICAgIHRtcC0+b2Zmc2V0X3YyLmtfdHlwZSA9IHR5cGU7Ci0gICAgdG1wLT5saW5lYXIgPSBjcHVfdG9fbGU2NCh0bXAtPmxpbmVhcik7CisJdjItPnYgPSAodjItPnYgJiBjcHVfdG9fbGU2NCh+MFVMTD4+NCkpIHwgY3B1X3RvX2xlNjQoKF9fdTY0KXR5cGU8PDYwKTsKIH0KICAKIHN0YXRpYyBpbmxpbmUgbG9mZl90IG9mZnNldF92Ml9rX29mZnNldCggY29uc3Qgc3RydWN0IG9mZnNldF92MiAqdjIgKQogewotICAgIG9mZnNldF92Ml9lc2FmZV9vdmVybGF5IHRtcCA9ICooY29uc3Qgb2Zmc2V0X3YyX2VzYWZlX292ZXJsYXkgKil2MjsKLSAgICB0bXAubGluZWFyID0gbGU2NF90b19jcHUoIHRtcC5saW5lYXIgKTsKLSAgICByZXR1cm4gdG1wLm9mZnNldF92Mi5rX29mZnNldDsKKwlyZXR1cm4gbGU2NF90b19jcHUodjItPnYpICYgKH4wVUxMPj40KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9vZmZzZXRfdjJfa19vZmZzZXQoIHN0cnVjdCBvZmZzZXRfdjIgKnYyLCBsb2ZmX3Qgb2Zmc2V0ICl7Ci0gICAgb2Zmc2V0X3YyX2VzYWZlX292ZXJsYXkgKnRtcCA9IChvZmZzZXRfdjJfZXNhZmVfb3ZlcmxheSAqKXYyOwotICAgIHRtcC0+bGluZWFyID0gbGU2NF90b19jcHUodG1wLT5saW5lYXIpOwotICAgIHRtcC0+b2Zmc2V0X3YyLmtfb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHRtcC0+bGluZWFyID0gY3B1X3RvX2xlNjQodG1wLT5saW5lYXIpOworCW9mZnNldCAmPSAofjBVTEw+PjQpOworCXYyLT52ID0gKHYyLT52ICYgY3B1X3RvX2xlNjQoMTVVTEw8PDYwKSkgfCBjcHVfdG9fbGU2NChvZmZzZXQpOwogfQotI2Vsc2UKLSMgZGVmaW5lIG9mZnNldF92Ml9rX3R5cGUodjIpICAgICAgICAgICAoKHYyKS0+a190eXBlKQotIyBkZWZpbmUgc2V0X29mZnNldF92Ml9rX3R5cGUodjIsdmFsKSAgIChvZmZzZXRfdjJfa190eXBlKHYyKSA9ICh2YWwpKQotIyBkZWZpbmUgb2Zmc2V0X3YyX2tfb2Zmc2V0KHYyKSAgICAgICAgICgodjIpLT5rX29mZnNldCkKLSMgZGVmaW5lIHNldF9vZmZzZXRfdjJfa19vZmZzZXQodjIsdmFsKSAob2Zmc2V0X3YyX2tfb2Zmc2V0KHYyKSA9ICh2YWwpKQotI2VuZGlmCiAKIC8qIEtleSBvZiBhbiBpdGVtIGRldGVybWluZXMgaXRzIGxvY2F0aW9uIGluIHRoZSBTK3RyZWUsIGFuZAogICAgaXMgY29tcG9zZWQgb2YgNCBjb21wb25lbnRzICovCiBzdHJ1Y3QgcmVpc2VyZnNfa2V5IHsKLSAgICBfX3UzMiBrX2Rpcl9pZDsgICAgLyogcGFja2luZyBsb2NhbGl0eTogYnkgZGVmYXVsdCBwYXJlbnQKKyAgICBfX2xlMzIga19kaXJfaWQ7ICAgIC8qIHBhY2tpbmcgbG9jYWxpdHk6IGJ5IGRlZmF1bHQgcGFyZW50CiAJCQkgIGRpcmVjdG9yeSBvYmplY3QgaWQgKi8KLSAgICBfX3UzMiBrX29iamVjdGlkOyAgLyogb2JqZWN0IGlkZW50aWZpZXIgKi8KKyAgICBfX2xlMzIga19vYmplY3RpZDsgIC8qIG9iamVjdCBpZGVudGlmaWVyICovCiAgICAgdW5pb24gewogCXN0cnVjdCBvZmZzZXRfdjEga19vZmZzZXRfdjE7CiAJc3RydWN0IG9mZnNldF92MiBrX29mZnNldF92MjsKICAgICB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdTsKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAorc3RydWN0IGluX2NvcmVfa2V5IHsKKyAgICBfX3UzMiBrX2Rpcl9pZDsgICAgLyogcGFja2luZyBsb2NhbGl0eTogYnkgZGVmYXVsdCBwYXJlbnQKKwkJCSAgZGlyZWN0b3J5IG9iamVjdCBpZCAqLworICAgIF9fdTMyIGtfb2JqZWN0aWQ7ICAvKiBvYmplY3QgaWRlbnRpZmllciAqLworICAgIF9fdTY0IGtfb2Zmc2V0OworICAgIF9fdTgga190eXBlOworfTsKIAogc3RydWN0IGNwdV9rZXkgewotICAgIHN0cnVjdCByZWlzZXJmc19rZXkgb25fZGlza19rZXk7CisgICAgc3RydWN0IGluX2NvcmVfa2V5IG9uX2Rpc2tfa2V5OwogICAgIGludCB2ZXJzaW9uOwogICAgIGludCBrZXlfbGVuZ3RoOyAvKiAzIGluIGFsbCBjYXNlcyBidXQgZGlyZWN0MmluZGlyZWN0IGFuZAogCQkgICAgICAgaW5kaXJlY3QyZGlyZWN0IGNvbnZlcnNpb24gKi8KQEAgLTUwOCwxNSArNDg3LDE1IEBACiAJCSAgIGl0ZW0uIE5vdGUgdGhhdCB0aGUga2V5LCBub3QgdGhpcyBmaWVsZCwgaXMgdXNlZCB0bwogCQkgICBkZXRlcm1pbmUgdGhlIGl0ZW0gdHlwZSwgYW5kIHRodXMgd2hpY2ggZmllbGQgdGhpcwogCQkgICB1bmlvbiBjb250YWlucy4gKi8KLQkJX191MTYgaWhfZnJlZV9zcGFjZV9yZXNlcnZlZDsgCisJCV9fbGUxNiBpaF9mcmVlX3NwYWNlX3Jlc2VydmVkOwogCQkvKiBJZmYgdGhpcyBpcyBhIGRpcmVjdG9yeSBpdGVtLCB0aGlzIGZpZWxkIGVxdWFscyB0aGUKIAkJICAgbnVtYmVyIG9mIGRpcmVjdG9yeSBlbnRyaWVzIGluIHRoZSBkaXJlY3RvcnkgaXRlbS4gKi8KLQkJX191MTYgaWhfZW50cnlfY291bnQ7IAorCQlfX2xlMTYgaWhfZW50cnlfY291bnQ7CiAJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHU7Ci0JX191MTYgaWhfaXRlbV9sZW47ICAgICAgICAgICAvKiB0b3RhbCBzaXplIG9mIHRoZSBpdGVtIGJvZHkgKi8KLQlfX3UxNiBpaF9pdGVtX2xvY2F0aW9uOyAgICAgIC8qIGFuIG9mZnNldCB0byB0aGUgaXRlbSBib2R5CisJX19sZTE2IGloX2l0ZW1fbGVuOyAgICAgICAgICAgLyogdG90YWwgc2l6ZSBvZiB0aGUgaXRlbSBib2R5ICovCisJX19sZTE2IGloX2l0ZW1fbG9jYXRpb247ICAgICAgLyogYW4gb2Zmc2V0IHRvIHRoZSBpdGVtIGJvZHkKIAkJCQkgICAgICAqIHdpdGhpbiB0aGUgYmxvY2sgKi8KLQlfX3UxNiBpaF92ZXJzaW9uOwkgICAgIC8qIDAgZm9yIGFsbCBvbGQgaXRlbXMsIDIgZm9yIG5ldworCV9fbGUxNiBpaF92ZXJzaW9uOwkgICAgIC8qIDAgZm9yIGFsbCBvbGQgaXRlbXMsIDIgZm9yIG5ldwogCQkJCQlvbmVzLiBIaWdoZXN0IGJpdCBpcyBzZXQgYnkgZnNjawogCQkJCQl0ZW1wb3JhcnksIGNsZWFuZWQgYWZ0ZXIgYWxsCiAJCQkJCWRvbmUgKi8KQEAgLTY3MCw0MyArNjQ5LDI5IEBACiAvLwogc3RhdGljIGlubGluZSBsb2ZmX3QgY3B1X2tleV9rX29mZnNldCAoY29uc3Qgc3RydWN0IGNwdV9rZXkgKiBrZXkpCiB7Ci0gICAgcmV0dXJuIChrZXktPnZlcnNpb24gPT0gS0VZX0ZPUk1BVF8zXzUpID8KLSAgICAgICAga2V5LT5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YxLmtfb2Zmc2V0IDoKLQlrZXktPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjIua19vZmZzZXQ7CisgICAgcmV0dXJuIGtleS0+b25fZGlza19rZXkua19vZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgbG9mZl90IGNwdV9rZXlfa190eXBlIChjb25zdCBzdHJ1Y3QgY3B1X2tleSAqIGtleSkKIHsKLSAgICByZXR1cm4gKGtleS0+dmVyc2lvbiA9PSBLRVlfRk9STUFUXzNfNSkgPwotICAgICAgICB1bmlxdWVuZXNzMnR5cGUgKGtleS0+b25fZGlza19rZXkudS5rX29mZnNldF92MS5rX3VuaXF1ZW5lc3MpIDoKLQlrZXktPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjIua190eXBlOworICAgIHJldHVybiBrZXktPm9uX2Rpc2tfa2V5LmtfdHlwZTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9jcHVfa2V5X2tfb2Zmc2V0IChzdHJ1Y3QgY3B1X2tleSAqIGtleSwgbG9mZl90IG9mZnNldCkKIHsKLSAgICAoa2V5LT52ZXJzaW9uID09IEtFWV9GT1JNQVRfM181KSA/Ci0gICAgICAgIChrZXktPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjEua19vZmZzZXQgPSBvZmZzZXQpIDoKLQkoa2V5LT5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YyLmtfb2Zmc2V0ID0gb2Zmc2V0KTsKKwlrZXktPm9uX2Rpc2tfa2V5Lmtfb2Zmc2V0ID0gb2Zmc2V0OwogfQogCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3B1X2tleV9rX3R5cGUgKHN0cnVjdCBjcHVfa2V5ICoga2V5LCBpbnQgdHlwZSkKIHsKLSAgICAoa2V5LT52ZXJzaW9uID09IEtFWV9GT1JNQVRfM181KSA/Ci0gICAgICAgIChrZXktPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjEua191bmlxdWVuZXNzID0gdHlwZTJ1bmlxdWVuZXNzICh0eXBlKSk6Ci0JKGtleS0+b25fZGlza19rZXkudS5rX29mZnNldF92Mi5rX3R5cGUgPSB0eXBlKTsKKwlrZXktPm9uX2Rpc2tfa2V5LmtfdHlwZSA9IHR5cGU7CiB9CiAKLQogc3RhdGljIGlubGluZSB2b2lkIGNwdV9rZXlfa19vZmZzZXRfZGVjIChzdHJ1Y3QgY3B1X2tleSAqIGtleSkKIHsKLSAgICBpZiAoa2V5LT52ZXJzaW9uID09IEtFWV9GT1JNQVRfM181KQotCWtleS0+b25fZGlza19rZXkudS5rX29mZnNldF92MS5rX29mZnNldCAtLTsKLSAgICBlbHNlCi0Ja2V5LT5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YyLmtfb2Zmc2V0IC0tOworCWtleS0+b25fZGlza19rZXkua19vZmZzZXQgLS07CiB9CiAKLQogI2RlZmluZSBpc19kaXJlbnRyeV9jcHVfa2V5KGtleSkgKGNwdV9rZXlfa190eXBlIChrZXkpID09IFRZUEVfRElSRU5UUlkpCiAjZGVmaW5lIGlzX2RpcmVjdF9jcHVfa2V5KGtleSkgKGNwdV9rZXlfa190eXBlIChrZXkpID09IFRZUEVfRElSRUNUKQogI2RlZmluZSBpc19pbmRpcmVjdF9jcHVfa2V5KGtleSkgKGNwdV9rZXlfa190eXBlIChrZXkpID09IFRZUEVfSU5ESVJFQ1QpCkBAIC03NTIsMTAgKzcxNywxMCBAQAogLyogSGVhZGVyIG9mIGEgZGlzayBibG9jay4gIE1vcmUgcHJlY2lzZWx5LCBoZWFkZXIgb2YgYSBmb3JtYXR0ZWQgbGVhZgogICAgb3IgaW50ZXJuYWwgbm9kZSwgYW5kIG5vdCB0aGUgaGVhZGVyIG9mIGFuIHVuZm9ybWF0dGVkIG5vZGUuICovCiBzdHJ1Y3QgYmxvY2tfaGVhZCB7ICAgICAgIAotICBfX3UxNiBibGtfbGV2ZWw7ICAgICAgICAvKiBMZXZlbCBvZiBhIGJsb2NrIGluIHRoZSB0cmVlLiAqLwotICBfX3UxNiBibGtfbnJfaXRlbTsgICAgICAvKiBOdW1iZXIgb2Yga2V5cy9pdGVtcyBpbiBhIGJsb2NrLiAqLwotICBfX3UxNiBibGtfZnJlZV9zcGFjZTsgICAvKiBCbG9jayBmcmVlIHNwYWNlIGluIGJ5dGVzLiAqLwotICBfX3UxNiBibGtfcmVzZXJ2ZWQ7CisgIF9fbGUxNiBibGtfbGV2ZWw7ICAgICAgICAvKiBMZXZlbCBvZiBhIGJsb2NrIGluIHRoZSB0cmVlLiAqLworICBfX2xlMTYgYmxrX25yX2l0ZW07ICAgICAgLyogTnVtYmVyIG9mIGtleXMvaXRlbXMgaW4gYSBibG9jay4gKi8KKyAgX19sZTE2IGJsa19mcmVlX3NwYWNlOyAgIC8qIEJsb2NrIGZyZWUgc3BhY2UgaW4gYnl0ZXMuICovCisgIF9fbGUxNiBibGtfcmVzZXJ2ZWQ7CiAJCQkJLyogZHVtcCB0aGlzIGluIHY0L3BsYW5BICovCiAgIHN0cnVjdCByZWlzZXJmc19rZXkgIGJsa19yaWdodF9kZWxpbV9rZXk7IC8qIGtlcHQgb25seSBmb3IgY29tcGF0aWJpbGl0eSAqLwogfTsKQEAgLTgxOSwxOSArNzg0LDE5IEBACiAvLwogc3RydWN0IHN0YXRfZGF0YV92MQogewotICAgIF9fdTE2IHNkX21vZGU7CS8qIGZpbGUgdHlwZSwgcGVybWlzc2lvbnMgKi8KLSAgICBfX3UxNiBzZF9ubGluazsJLyogbnVtYmVyIG9mIGhhcmQgbGlua3MgKi8KLSAgICBfX3UxNiBzZF91aWQ7CQkvKiBvd25lciAqLwotICAgIF9fdTE2IHNkX2dpZDsJCS8qIGdyb3VwICovCi0gICAgX191MzIgc2Rfc2l6ZTsJLyogZmlsZSBzaXplICovCi0gICAgX191MzIgc2RfYXRpbWU7CS8qIHRpbWUgb2YgbGFzdCBhY2Nlc3MgKi8KLSAgICBfX3UzMiBzZF9tdGltZTsJLyogdGltZSBmaWxlIHdhcyBsYXN0IG1vZGlmaWVkICAqLwotICAgIF9fdTMyIHNkX2N0aW1lOwkvKiB0aW1lIGlub2RlIChzdGF0IGRhdGEpIHdhcyBsYXN0IGNoYW5nZWQgKGV4Y2VwdCBjaGFuZ2VzIHRvIHNkX2F0aW1lIGFuZCBzZF9tdGltZSkgKi8KKyAgICBfX2xlMTYgc2RfbW9kZTsJLyogZmlsZSB0eXBlLCBwZXJtaXNzaW9ucyAqLworICAgIF9fbGUxNiBzZF9ubGluazsJLyogbnVtYmVyIG9mIGhhcmQgbGlua3MgKi8KKyAgICBfX2xlMTYgc2RfdWlkOwkJLyogb3duZXIgKi8KKyAgICBfX2xlMTYgc2RfZ2lkOwkJLyogZ3JvdXAgKi8KKyAgICBfX2xlMzIgc2Rfc2l6ZTsJLyogZmlsZSBzaXplICovCisgICAgX19sZTMyIHNkX2F0aW1lOwkvKiB0aW1lIG9mIGxhc3QgYWNjZXNzICovCisgICAgX19sZTMyIHNkX210aW1lOwkvKiB0aW1lIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQgICovCisgICAgX19sZTMyIHNkX2N0aW1lOwkvKiB0aW1lIGlub2RlIChzdGF0IGRhdGEpIHdhcyBsYXN0IGNoYW5nZWQgKGV4Y2VwdCBjaGFuZ2VzIHRvIHNkX2F0aW1lIGFuZCBzZF9tdGltZSkgKi8KICAgICB1bmlvbiB7Ci0JX191MzIgc2RfcmRldjsKLQlfX3UzMiBzZF9ibG9ja3M7CS8qIG51bWJlciBvZiBibG9ja3MgZmlsZSB1c2VzICovCisJX19sZTMyIHNkX3JkZXY7CisJX19sZTMyIHNkX2Jsb2NrczsJLyogbnVtYmVyIG9mIGJsb2NrcyBmaWxlIHVzZXMgKi8KICAgICB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdTsKLSAgICBfX3UzMiBzZF9maXJzdF9kaXJlY3RfYnl0ZTsgLyogZmlyc3QgYnl0ZSBvZiBmaWxlIHdoaWNoIGlzIHN0b3JlZAorICAgIF9fbGUzMiBzZF9maXJzdF9kaXJlY3RfYnl0ZTsgLyogZmlyc3QgYnl0ZSBvZiBmaWxlIHdoaWNoIGlzIHN0b3JlZAogCQkJCSAgIGluIGEgZGlyZWN0IGl0ZW06IGV4Y2VwdCB0aGF0IGlmIGl0CiAJCQkJICAgZXF1YWxzIDEgaXQgaXMgYSBzeW1saW5rIGFuZCBpZiBpdAogCQkJCSAgIGVxdWFscyB+KF9fdTMyKTAgdGhlcmUgaXMgbm8KQEAgLTg5NywyMCArODYyLDIwIEBACiAvKiBTdGF0IERhdGEgb24gZGlzayAocmVpc2VyZnMgdmVyc2lvbiBvZiBVRlMgZGlzayBpbm9kZSBtaW51cyB0aGUKICAgIGFkZHJlc3MgYmxvY2tzKSAqLwogc3RydWN0IHN0YXRfZGF0YSB7Ci0gICAgX191MTYgc2RfbW9kZTsJLyogZmlsZSB0eXBlLCBwZXJtaXNzaW9ucyAqLwotICAgIF9fdTE2IHNkX2F0dHJzOyAgICAgLyogcGVyc2lzdGVudCBpbm9kZSBmbGFncyAqLwotICAgIF9fdTMyIHNkX25saW5rOwkvKiBudW1iZXIgb2YgaGFyZCBsaW5rcyAqLwotICAgIF9fdTY0IHNkX3NpemU7CS8qIGZpbGUgc2l6ZSAqLwotICAgIF9fdTMyIHNkX3VpZDsJCS8qIG93bmVyICovCi0gICAgX191MzIgc2RfZ2lkOwkJLyogZ3JvdXAgKi8KLSAgICBfX3UzMiBzZF9hdGltZTsJLyogdGltZSBvZiBsYXN0IGFjY2VzcyAqLwotICAgIF9fdTMyIHNkX210aW1lOwkvKiB0aW1lIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQgICovCi0gICAgX191MzIgc2RfY3RpbWU7CS8qIHRpbWUgaW5vZGUgKHN0YXQgZGF0YSkgd2FzIGxhc3QgY2hhbmdlZCAoZXhjZXB0IGNoYW5nZXMgdG8gc2RfYXRpbWUgYW5kIHNkX210aW1lKSAqLwotICAgIF9fdTMyIHNkX2Jsb2NrczsKKyAgICBfX2xlMTYgc2RfbW9kZTsJLyogZmlsZSB0eXBlLCBwZXJtaXNzaW9ucyAqLworICAgIF9fbGUxNiBzZF9hdHRyczsgICAgIC8qIHBlcnNpc3RlbnQgaW5vZGUgZmxhZ3MgKi8KKyAgICBfX2xlMzIgc2Rfbmxpbms7CS8qIG51bWJlciBvZiBoYXJkIGxpbmtzICovCisgICAgX19sZTY0IHNkX3NpemU7CS8qIGZpbGUgc2l6ZSAqLworICAgIF9fbGUzMiBzZF91aWQ7CQkvKiBvd25lciAqLworICAgIF9fbGUzMiBzZF9naWQ7CQkvKiBncm91cCAqLworICAgIF9fbGUzMiBzZF9hdGltZTsJLyogdGltZSBvZiBsYXN0IGFjY2VzcyAqLworICAgIF9fbGUzMiBzZF9tdGltZTsJLyogdGltZSBmaWxlIHdhcyBsYXN0IG1vZGlmaWVkICAqLworICAgIF9fbGUzMiBzZF9jdGltZTsJLyogdGltZSBpbm9kZSAoc3RhdCBkYXRhKSB3YXMgbGFzdCBjaGFuZ2VkIChleGNlcHQgY2hhbmdlcyB0byBzZF9hdGltZSBhbmQgc2RfbXRpbWUpICovCisgICAgX19sZTMyIHNkX2Jsb2NrczsKICAgICB1bmlvbiB7Ci0JX191MzIgc2RfcmRldjsKLQlfX3UzMiBzZF9nZW5lcmF0aW9uOwotICAgICAgLy9fX3UzMiBzZF9maXJzdF9kaXJlY3RfYnl0ZTsgCisJX19sZTMyIHNkX3JkZXY7CisJX19sZTMyIHNkX2dlbmVyYXRpb247CisgICAgICAvL19fbGUzMiBzZF9maXJzdF9kaXJlY3RfYnl0ZTsKICAgICAgIC8qIGZpcnN0IGJ5dGUgb2YgZmlsZSB3aGljaCBpcyBzdG9yZWQgaW4gYQogCQkJCSAgICAgICBkaXJlY3QgaXRlbTogZXhjZXB0IHRoYXQgaWYgaXQgZXF1YWxzIDEKIAkJCQkgICAgICAgaXQgaXMgYSBzeW1saW5rIGFuZCBpZiBpdCBlcXVhbHMKQEAgLTk5MywxMiArOTU4LDEyIEBACiAKIHN0cnVjdCByZWlzZXJmc19kZV9oZWFkCiB7Ci0gIF9fdTMyIGRlaF9vZmZzZXQ7CQkvKiB0aGlyZCBjb21wb25lbnQgb2YgdGhlIGRpcmVjdG9yeSBlbnRyeSBrZXkgKi8KLSAgX191MzIgZGVoX2Rpcl9pZDsJCS8qIG9iamVjdGlkIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBvYmplY3QsIHRoYXQgaXMgcmVmZXJlbmNlZAorICBfX2xlMzIgZGVoX29mZnNldDsJCS8qIHRoaXJkIGNvbXBvbmVudCBvZiB0aGUgZGlyZWN0b3J5IGVudHJ5IGtleSAqLworICBfX2xlMzIgZGVoX2Rpcl9pZDsJCS8qIG9iamVjdGlkIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBvYmplY3QsIHRoYXQgaXMgcmVmZXJlbmNlZAogCQkJCQkgICBieSBkaXJlY3RvcnkgZW50cnkgKi8KLSAgX191MzIgZGVoX29iamVjdGlkOwkJLyogb2JqZWN0aWQgb2YgdGhlIG9iamVjdCwgdGhhdCBpcyByZWZlcmVuY2VkIGJ5IGRpcmVjdG9yeSBlbnRyeSAqLwotICBfX3UxNiBkZWhfbG9jYXRpb247CQkvKiBvZmZzZXQgb2YgbmFtZSBpbiB0aGUgd2hvbGUgaXRlbSAqLwotICBfX3UxNiBkZWhfc3RhdGU7CQkvKiB3aGV0aGVyIDEpIGVudHJ5IGNvbnRhaW5zIHN0YXQgZGF0YSAoZm9yIGZ1dHVyZSksIGFuZCAyKSB3aGV0aGVyCisgIF9fbGUzMiBkZWhfb2JqZWN0aWQ7CQkvKiBvYmplY3RpZCBvZiB0aGUgb2JqZWN0LCB0aGF0IGlzIHJlZmVyZW5jZWQgYnkgZGlyZWN0b3J5IGVudHJ5ICovCisgIF9fbGUxNiBkZWhfbG9jYXRpb247CQkvKiBvZmZzZXQgb2YgbmFtZSBpbiB0aGUgd2hvbGUgaXRlbSAqLworICBfX2xlMTYgZGVoX3N0YXRlOwkJLyogd2hldGhlciAxKSBlbnRyeSBjb250YWlucyBzdGF0IGRhdGEgKGZvciBmdXR1cmUpLCBhbmQgMikgd2hldGhlcgogCQkJCQkgICBlbnRyeSBpcyBoaWRkZW4gKHVubGlua2VkKSAqLwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogI2RlZmluZSBERUhfU0laRSAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfZGVfaGVhZCkKQEAgLTEwNTgsMTAgKzEwMjMsMTAgQEAKICNkZWZpbmUgZGVfdmlzaWJsZShkZWgpCSAgICAJICAgIHRlc3RfYml0X3VuYWxpZ25lZCAoREVIX1Zpc2libGUsICYoKGRlaCktPmRlaF9zdGF0ZSkpCiAjZGVmaW5lIGRlX2hpZGRlbihkZWgpCSAgICAJICAgICF0ZXN0X2JpdF91bmFsaWduZWQgKERFSF9WaXNpYmxlLCAmKChkZWgpLT5kZWhfc3RhdGUpKQogCi1leHRlcm4gdm9pZCBtYWtlX2VtcHR5X2Rpcl9pdGVtX3YxIChjaGFyICogYm9keSwgX191MzIgZGlyaWQsIF9fdTMyIG9iamlkLAotCQkJCSAgICBfX3UzMiBwYXJfZGlyaWQsIF9fdTMyIHBhcl9vYmppZCk7Ci1leHRlcm4gdm9pZCBtYWtlX2VtcHR5X2Rpcl9pdGVtIChjaGFyICogYm9keSwgX191MzIgZGlyaWQsIF9fdTMyIG9iamlkLAotCQkJCSBfX3UzMiBwYXJfZGlyaWQsIF9fdTMyIHBhcl9vYmppZCk7CitleHRlcm4gdm9pZCBtYWtlX2VtcHR5X2Rpcl9pdGVtX3YxIChjaGFyICogYm9keSwgX19sZTMyIGRpcmlkLCBfX2xlMzIgb2JqaWQsCisJCQkJICAgIF9fbGUzMiBwYXJfZGlyaWQsIF9fbGUzMiBwYXJfb2JqaWQpOworZXh0ZXJuIHZvaWQgbWFrZV9lbXB0eV9kaXJfaXRlbSAoY2hhciAqIGJvZHksIF9fbGUzMiBkaXJpZCwgX19sZTMyIG9iamlkLAorCQkJCSBfX2xlMzIgcGFyX2RpcmlkLCBfX2xlMzIgcGFyX29iamlkKTsKIAogLyogYXJyYXkgb2YgdGhlIGVudHJ5IGhlYWRlcnMgKi8KICAvKiBnZXQgaXRlbSBib2R5ICovCkBAIC0xMTYwLDkgKzExMjUsOSBAQAogLyogRGlzayBjaGlsZCBwb2ludGVyOiBUaGUgcG9pbnRlciBmcm9tIGFuIGludGVybmFsIG5vZGUgb2YgdGhlIHRyZWUKICAgIHRvIGEgbm9kZSB0aGF0IGlzIG9uIGRpc2suICovCiBzdHJ1Y3QgZGlza19jaGlsZCB7Ci0gIF9fdTMyICAgICAgIGRjX2Jsb2NrX251bWJlcjsgICAgICAgICAgICAgIC8qIERpc2sgY2hpbGQncyBibG9jayBudW1iZXIuICovCi0gIF9fdTE2ICAgICAgIGRjX3NpemU7CQkgICAgICAgICAgICAvKiBEaXNrIGNoaWxkJ3MgdXNlZCBzcGFjZS4gICAqLwotICBfX3UxNiAgICAgICBkY19yZXNlcnZlZDsKKyAgX19sZTMyICAgICAgIGRjX2Jsb2NrX251bWJlcjsgICAgICAgICAgICAgIC8qIERpc2sgY2hpbGQncyBibG9jayBudW1iZXIuICovCisgIF9fbGUxNiAgICAgICBkY19zaXplOwkJICAgICAgICAgICAgLyogRGlzayBjaGlsZCdzIHVzZWQgc3BhY2UuICAgKi8KKyAgX19sZTE2ICAgICAgIGRjX3Jlc2VydmVkOwogfTsKIAogI2RlZmluZSBEQ19TSVpFIChzaXplb2Yoc3RydWN0IGRpc2tfY2hpbGQpKQpAQCAtMTQ3Niw3ICsxNDQxLDcgQEAKICAgaW50IGZzX2dlbjsgICAgICAgICAgICAgICAgICAvKiBzYXZlZCB2YWx1ZSBvZiBgcmVpc2VyZnNfZ2VuZXJhdGlvbicgY291bnRlcgogCQkJICAgICAgICAgIHNlZSBGSUxFU1lTVEVNX0NIQU5HRUQoKSBtYWNybyBpbiByZWlzZXJmc19mcy5oICovCiAjaWZkZWYgRElTUExBQ0VfTkVXX1BBQ0tJTkdfTE9DQUxJVElFUwotICBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICBrZXk7CSAgICAgIC8qIGtleSBwb2ludGVyLCB0byBwYXNzIHRvIGJsb2NrIGFsbG9jYXRvciBvcgorICBzdHJ1Y3QgaW5fY29yZV9rZXkgIGtleTsJICAgICAgLyoga2V5IHBvaW50ZXIsIHRvIHBhc3MgdG8gYmxvY2sgYWxsb2NhdG9yIG9yCiAJCQkJIGFub3RoZXIgbG93LWxldmVsIHN1YnN5c3RlbSAqLwogI2VuZGlmCiB9IDsKQEAgLTE2MzAsMTAgKzE1OTUsMTAgQEAKIAogLyogZmlyc3QgYmxvY2sgd3JpdHRlbiBpbiBhIGNvbW1pdC4gICovCiBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9kZXNjIHsKLSAgX191MzIgal90cmFuc19pZCA7CQkJLyogaWQgb2YgY29tbWl0ICovCi0gIF9fdTMyIGpfbGVuIDsJCQkvKiBsZW5ndGggb2YgY29tbWl0LiBsZW4gKzEgaXMgdGhlIGNvbW1pdCBibG9jayAqLwotICBfX3UzMiBqX21vdW50X2lkIDsJCQkJLyogbW91bnQgaWQgb2YgdGhpcyB0cmFucyovCi0gIF9fdTMyIGpfcmVhbGJsb2NrWzFdIDsgLyogcmVhbCBsb2NhdGlvbnMgZm9yIGVhY2ggYmxvY2sgKi8KKyAgX19sZTMyIGpfdHJhbnNfaWQgOwkJCS8qIGlkIG9mIGNvbW1pdCAqLworICBfX2xlMzIgal9sZW4gOwkJCS8qIGxlbmd0aCBvZiBjb21taXQuIGxlbiArMSBpcyB0aGUgY29tbWl0IGJsb2NrICovCisgIF9fbGUzMiBqX21vdW50X2lkIDsJCQkJLyogbW91bnQgaWQgb2YgdGhpcyB0cmFucyovCisgIF9fbGUzMiBqX3JlYWxibG9ja1sxXSA7IC8qIHJlYWwgbG9jYXRpb25zIGZvciBlYWNoIGJsb2NrICovCiB9IDsKIAogI2RlZmluZSBnZXRfZGVzY190cmFuc19pZChkKSAgIGxlMzJfdG9fY3B1KChkKS0+al90cmFuc19pZCkKQEAgLTE2NDYsOSArMTYxMSw5IEBACiAKIC8qIGxhc3QgYmxvY2sgd3JpdHRlbiBpbiBhIGNvbW1pdCAqLwogc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY29tbWl0IHsKLSAgX191MzIgal90cmFuc19pZCA7CQkJLyogbXVzdCBtYXRjaCBqX3RyYW5zX2lkIGZyb20gdGhlIGRlc2MgYmxvY2sgKi8KLSAgX191MzIgal9sZW4gOwkJCS8qIGRpdHRvICovCi0gIF9fdTMyIGpfcmVhbGJsb2NrWzFdIDsgLyogcmVhbCBsb2NhdGlvbnMgZm9yIGVhY2ggYmxvY2sgKi8KKyAgX19sZTMyIGpfdHJhbnNfaWQgOwkJCS8qIG11c3QgbWF0Y2ggal90cmFuc19pZCBmcm9tIHRoZSBkZXNjIGJsb2NrICovCisgIF9fbGUzMiBqX2xlbiA7CQkJLyogZGl0dG8gKi8KKyAgX19sZTMyIGpfcmVhbGJsb2NrWzFdIDsgLyogcmVhbCBsb2NhdGlvbnMgZm9yIGVhY2ggYmxvY2sgKi8KIH0gOwogCiAjZGVmaW5lIGdldF9jb21taXRfdHJhbnNfaWQoYykgbGUzMl90b19jcHUoKGMpLT5qX3RyYW5zX2lkKQpAQCAtMTY2Myw5ICsxNjI4LDkgQEAKICoqIGFuZCB0aGlzIHRyYW5zYWN0aW9uIGRvZXMgbm90IG5lZWQgdG8gYmUgcmVwbGF5ZWQuCiAqLwogc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfaGVhZGVyIHsKLSAgX191MzIgal9sYXN0X2ZsdXNoX3RyYW5zX2lkIDsJCS8qIGlkIG9mIGxhc3QgZnVsbHkgZmx1c2hlZCB0cmFuc2FjdGlvbiAqLwotICBfX3UzMiBqX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQgOyAgICAgIC8qIG9mZnNldCBpbiB0aGUgbG9nIG9mIHdoZXJlIHRvIHN0YXJ0IHJlcGxheSBhZnRlciBhIGNyYXNoICovCi0gIF9fdTMyIGpfbW91bnRfaWQgOworICBfX2xlMzIgal9sYXN0X2ZsdXNoX3RyYW5zX2lkIDsJCS8qIGlkIG9mIGxhc3QgZnVsbHkgZmx1c2hlZCB0cmFuc2FjdGlvbiAqLworICBfX2xlMzIgal9maXJzdF91bmZsdXNoZWRfb2Zmc2V0IDsgICAgICAvKiBvZmZzZXQgaW4gdGhlIGxvZyBvZiB3aGVyZSB0byBzdGFydCByZXBsYXkgYWZ0ZXIgYSBjcmFzaCAqLworICBfX2xlMzIgal9tb3VudF9pZCA7CiAgIC8qIDEyICovIHN0cnVjdCBqb3VybmFsX3BhcmFtcyBqaF9qb3VybmFsOwogfSA7CiAKQEAgLTIxMTcsNyArMjA4Miw3IEBACiAgc3RydWN0IF9fcmVpc2VyZnNfYmxvY2tucl9oaW50IHsKICAgICAgc3RydWN0IGlub2RlICogaW5vZGU7CQkvKiBpbm9kZSBwYXNzZWQgdG8gYWxsb2NhdG9yLCBpZiB3ZSBhbGxvY2F0ZSB1bmYuIG5vZGVzICovCiAgICAgIGxvbmcgYmxvY2s7CQkJLyogZmlsZSBvZmZzZXQsIGluIGJsb2NrcyAqLwotICAgICBzdHJ1Y3QgcmVpc2VyZnNfa2V5IGtleTsKKyAgICAgc3RydWN0IGluX2NvcmVfa2V5IGtleTsKICAgICAgc3RydWN0IHBhdGggKiBwYXRoOwkJLyogc2VhcmNoIHBhdGgsIHVzZWQgYnkgYWxsb2NhdG9yIHRvIGRldGVybmluZSBzZWFyY2hfc3RhcnQgYnkKIAkJCQkJICogdmFyaW91cyB3YXlzICovCiAgICAgIHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKiB0aDsgLyogdHJhbnNhY3Rpb24gaGFuZGxlIGlzIG5lZWRlZCB0byBsb2cgc3VwZXIgYmxvY2tzIGFuZApAQCAtMjE0NCw3ICsyMTA5LDcgQEAKICAqIHRvIHVzZSBmb3IgYSBuZXcgb2JqZWN0IHVuZGVybmVhdCBpdC4gIFRoZSBsb2NhbGl0eSBpcyByZXR1cm5lZAogICogaW4gZGlzayBieXRlIG9yZGVyIChsZSkuCiAgKi8KLXUzMiByZWlzZXJmc19jaG9vc2VfcGFja2luZyhzdHJ1Y3QgaW5vZGUgKmRpcik7CitfX2xlMzIgcmVpc2VyZnNfY2hvb3NlX3BhY2tpbmcoc3RydWN0IGlub2RlICpkaXIpOwogCiBpbnQgaXNfcmV1c2FibGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHMsIGJfYmxvY2tucl90IGJsb2NrLCBpbnQgYml0X3ZhbHVlKTsKIHZvaWQgcmVpc2VyZnNfZnJlZV9ibG9jayAoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsIHN0cnVjdCBpbm9kZSAqLCBiX2Jsb2NrbnJfdCwgaW50IGZvcl91bmZvcm1hdHRlZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKaW5kZXggMWVhYTQ4ZS4uOTI0NGM1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaApAQCAtMTAsOCArMTAsOCBAQAogI2RlZmluZSBSRUlTRVJGU19YQVRUUl9NQUdJQyAweDUyNDY1ODQxIC8qICJSRlhBIiAqLwogCiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGVhZGVyIHsKLSAgICBfX3UzMiBoX21hZ2ljOyAgICAgICAgICAgICAgLyogbWFnaWMgbnVtYmVyIGZvciBpZGVudGlmaWNhdGlvbiAqLwotICAgIF9fdTMyIGhfaGFzaDsgICAgICAgICAgICAgICAvKiBoYXNoIG9mIHRoZSB2YWx1ZSAqLworICAgIF9fbGUzMiBoX21hZ2ljOyAgICAgICAgICAgICAgLyogbWFnaWMgbnVtYmVyIGZvciBpZGVudGlmaWNhdGlvbiAqLworICAgIF9fbGUzMiBoX2hhc2g7ICAgICAgICAgICAgICAgLyogaGFzaCBvZiB0aGUgdmFsdWUgKi8KIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAppbmRleCAzMmU1Mjc2Li45MWFjOTdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKQEAgLTg5LDEwICs4OSwxNCBAQAogCVJUTV9HRVRBTllDQVNUCT0gNjIsCiAjZGVmaW5lIFJUTV9HRVRBTllDQVNUCVJUTV9HRVRBTllDQVNUCiAKLQlSVE1fTUFYLAotI2RlZmluZSBSVE1fTUFYCQlSVE1fTUFYCisJX19SVE1fTUFYLAorI2RlZmluZSBSVE1fTUFYCQkoKChfX1JUTV9NQVggKyAzKSAmIH4zKSAtIDEpCiB9OwogCisjZGVmaW5lIFJUTV9OUl9NU0dUWVBFUwkoUlRNX01BWCArIDEgLSBSVE1fQkFTRSkKKyNkZWZpbmUgUlRNX05SX0ZBTUlMSUVTCShSVE1fTlJfTVNHVFlQRVMgPj4gMikKKyNkZWZpbmUgUlRNX0ZBTShjbWQpCSgoKGNtZCkgLSBSVE1fQkFTRSkgPj4gMikKKwogLyogCiAgICBHZW5lcmljIHN0cnVjdHVyZSBmb3IgZW5jYXBzdWxhdGlvbiBvZiBvcHRpb25hbCByb3V0ZSBpbmZvcm1hdGlvbi4KICAgIEl0IGlzIHJlbWluaXNjZW50IG9mIHNvY2thZGRyLCBidXQgd2l0aCBzYV9mYW1pbHkgcmVwbGFjZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCAxY2NlZDk3Li40ZGJiMTA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC01NzgsNyArNTc4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwkvKiBwZXIgcHJvY2VzcyBmbGFncywgZGVmaW5lZCBiZWxvdyAqLwogCXVuc2lnbmVkIGxvbmcgcHRyYWNlOwogCi0JaW50IGxvY2tfZGVwdGg7CQkvKiBMb2NrIGRlcHRoICovCisJaW50IGxvY2tfZGVwdGg7CQkvKiBCS0wgbG9jayBkZXB0aCAqLwogCiAJaW50IHByaW8sIHN0YXRpY19wcmlvOwogCXN0cnVjdCBsaXN0X2hlYWQgcnVuX2xpc3Q7CkBAIC02NjEsNyArNjYxLDEwIEBACiAJc3RydWN0IGtleSAqdGhyZWFkX2tleXJpbmc7CS8qIGtleXJpbmcgcHJpdmF0ZSB0byB0aGlzIHRocmVhZCAqLwogI2VuZGlmCiAJaW50IG9vbWtpbGxhZGo7IC8qIE9PTSBraWxsIHNjb3JlIGFkanVzdG1lbnQgKGJpdCBzaGlmdCkuICovCi0JY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOworCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsgLyogZXhlY3V0YWJsZSBuYW1lIGV4Y2x1ZGluZyBwYXRoCisJCQkJICAgICAtIGFjY2VzcyB3aXRoIFtnc11ldF90YXNrX2NvbW0gKHdoaWNoIGxvY2sKKwkJCQkgICAgICAgaXQgd2l0aCB0YXNrX2xvY2soKSkKKwkJCQkgICAgIC0gaW5pdGlhbGl6ZWQgbm9ybWFsbHkgYnkgZmx1c2hfb2xkX2V4ZWMgKi8KIC8qIGZpbGUgc3lzdGVtIGluZm8gKi8KIAlpbnQgbGlua19jb3VudCwgdG90YWxfbGlua19jb3VudDsKIC8qIGlwYyBzdHVmZiAqLwpAQCAtODQ1LDYgKzg0OCw3IEBACiBleHRlcm4gdm9pZCBzZXRfdXNlcl9uaWNlKHRhc2tfdCAqcCwgbG9uZyBuaWNlKTsKIGV4dGVybiBpbnQgdGFza19wcmlvKGNvbnN0IHRhc2tfdCAqcCk7CiBleHRlcm4gaW50IHRhc2tfbmljZShjb25zdCB0YXNrX3QgKnApOworZXh0ZXJuIGludCBjYW5fbmljZShjb25zdCB0YXNrX3QgKnAsIGNvbnN0IGludCBuaWNlKTsKIGV4dGVybiBpbnQgdGFza19jdXJyKGNvbnN0IHRhc2tfdCAqcCk7CiBleHRlcm4gaW50IGlkbGVfY3B1KGludCBjcHUpOwogZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIoc3RydWN0IHRhc2tfc3RydWN0ICosIGludCwgc3RydWN0IHNjaGVkX3BhcmFtICopOwpAQCAtMTAxMSw3ICsxMDE1LDYgQEAKIGV4dGVybiB2b2lkIGZsdXNoX3RocmVhZCh2b2lkKTsKIGV4dGVybiB2b2lkIGV4aXRfdGhyZWFkKHZvaWQpOwogCi1leHRlcm4gdm9pZCBleGl0X21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIGV4aXRfZmlsZXMoc3RydWN0IHRhc2tfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgZXhpdF9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgX19leGl0X3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zaWduYWwuaAppbmRleCA5OWM5N2FkLi4wYTk4ZjVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKQEAgLTksNiArOSwxNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogLyoKKyAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKKyAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KKyAqCisgKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KKyAqLworI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAorI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKKyNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKKworLyoKICAqIFJlYWwgVGltZSBzaWduYWxzIG1heSBiZSBxdWV1ZWQuCiAgKi8KIApAQCAtMjA5LDYgKzIyMCwxMiBAQAogCUlOSVRfTElTVF9IRUFEKCZzaWctPmxpc3QpOwogfQogCisvKiBUZXN0IGlmICdzaWcnIGlzIHZhbGlkIHNpZ25hbC4gVXNlIHRoaXMgaW5zdGVhZCBvZiB0ZXN0aW5nIF9OU0lHIGRpcmVjdGx5ICovCitzdGF0aWMgaW5saW5lIGludCB2YWxpZF9zaWduYWwodW5zaWduZWQgbG9uZyBzaWcpCit7CisJcmV0dXJuIHNpZyA8PSBfTlNJRyA/IDEgOiAwOworfQorCiBleHRlcm4gaW50IGdyb3VwX3NlbmRfc2lnX2luZm8oaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiBleHRlcm4gaW50IF9fZ3JvdXBfc2VuZF9zaWdfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiBsb25nIGRvX3NpZ3BlbmRpbmcodm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgbG9uZyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCAyMmI3MDE4Li5jYzA0ZjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTE2NywxMyArMTY3LDE0IEBACiAgKglAaDogVHJhbnNwb3J0IGxheWVyIGhlYWRlcgogICoJQG5oOiBOZXR3b3JrIGxheWVyIGhlYWRlcgogICoJQG1hYzogTGluayBsYXllciBoZWFkZXIKLSAqCUBkc3Q6IEZJWE1FOiBEZXNjcmliZSB0aGlzIGZpZWxkCisgKglAZHN0OiBkZXN0aW5hdGlvbiBlbnRyeQorICoJQHNwOiB0aGUgc2VjdXJpdHkgcGF0aCwgdXNlZCBmb3IgeGZybQogICoJQGNiOiBDb250cm9sIGJ1ZmZlci4gRnJlZSBmb3IgdXNlIGJ5IGV2ZXJ5IGxheWVyLiBQdXQgcHJpdmF0ZSB2YXJzIGhlcmUKICAqCUBsZW46IExlbmd0aCBvZiBhY3R1YWwgZGF0YQogICoJQGRhdGFfbGVuOiBEYXRhIGxlbmd0aAogICoJQG1hY19sZW46IExlbmd0aCBvZiBsaW5rIGxheWVyIGhlYWRlcgogICoJQGNzdW06IENoZWNrc3VtCi0gKglAX191bnVzZWQ6IERlYWQgZmllbGQsIG1heSBiZSByZXVzZWQKKyAqCUBsb2NhbF9kZjogYWxsb3cgbG9jYWwgZnJhZ21lbnRhdGlvbgogICoJQGNsb25lZDogSGVhZCBtYXkgYmUgY2xvbmVkIChjaGVjayByZWZjbnQgdG8gYmUgc3VyZSkKICAqCUBub2hkcjogUGF5bG9hZCByZWZlcmVuY2Ugb25seSwgbXVzdCBub3QgbW9kaWZ5IGhlYWRlcgogICoJQHBrdF90eXBlOiBQYWNrZXQgY2xhc3MKQEAgLTk2OCw2ICs5NjksNyBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIH0KIAorI2lmbmRlZiBDT05GSUdfSEFWRV9BUkNIX0RFVl9BTExPQ19TS0IKIC8qKgogICoJX19kZXZfYWxsb2Nfc2tiIC0gYWxsb2NhdGUgYW4gc2tidWZmIGZvciBzZW5kaW5nCiAgKglAbGVuZ3RoOiBsZW5ndGggdG8gYWxsb2NhdGUKQEAgLTk4MCw3ICs5ODIsNiBAQAogICoKICAqCSVOVUxMIGlzIHJldHVybmVkIGluIHRoZXJlIGlzIG5vIGZyZWUgbWVtb3J5LgogICovCi0jaWZuZGVmIENPTkZJR19IQVZFX0FSQ0hfREVWX0FMTE9DX1NLQgogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX19kZXZfYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBsZW5ndGgsCiAJCQkJCSAgICAgIGludCBnZnBfbWFzaykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKaW5kZXggM2UzYzNhYi4uN2Q2NjM4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKQEAgLTYyLDE2ICs2Miw5IEBACiBleHRlcm4gaW50IGttZW1fY2FjaGVfZGVzdHJveShrbWVtX2NhY2hlX3QgKik7CiBleHRlcm4gaW50IGttZW1fY2FjaGVfc2hyaW5rKGttZW1fY2FjaGVfdCAqKTsKIGV4dGVybiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKGttZW1fY2FjaGVfdCAqLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOwotI2lmZGVmIENPTkZJR19OVU1BCi1leHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKGttZW1fY2FjaGVfdCAqLCBpbnQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKGttZW1fY2FjaGVfdCAqY2FjaGVwLCBpbnQgbm9kZSkKLXsKLQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhjYWNoZXAsIEdGUF9LRVJORUwpOwotfQotI2VuZGlmCiBleHRlcm4gdm9pZCBrbWVtX2NhY2hlX2ZyZWUoa21lbV9jYWNoZV90ICosIHZvaWQgKik7CiBleHRlcm4gdW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2l6ZShrbWVtX2NhY2hlX3QgKik7CitleHRlcm4ga21lbV9jYWNoZV90ICprbWVtX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZV90IHNpemUsIGludCBnZnBmbGFncyk7CiAKIC8qIFNpemUgZGVzY3JpcHRpb24gc3RydWN0IGZvciBnZW5lcmFsIGNhY2hlcy4gKi8KIHN0cnVjdCBjYWNoZV9zaXplcyB7CkBAIC0xMDksNiArMTAyLDIwIEBACiBleHRlcm4gdm9pZCBrZnJlZShjb25zdCB2b2lkICopOwogZXh0ZXJuIHVuc2lnbmVkIGludCBrc2l6ZShjb25zdCB2b2lkICopOwogCisjaWZkZWYgQ09ORklHX05VTUEKK2V4dGVybiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoa21lbV9jYWNoZV90ICosIGludCBmbGFncywgaW50IG5vZGUpOworZXh0ZXJuIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgbm9kZSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoa21lbV9jYWNoZV90ICpjYWNoZXAsIGludCBmbGFncywgaW50IG5vZGUpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncyk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgbm9kZSkKK3sKKwlyZXR1cm4ga21hbGxvYyhzaXplLCBmbGFncyk7Cit9CisjZW5kaWYKKwogZXh0ZXJuIGludCBGQVNUQ0FMTChrbWVtX2NhY2hlX3JlYXAoaW50KSk7CiBleHRlcm4gaW50IEZBU1RDQUxMKGttZW1fcHRyX3ZhbGlkYXRlKGttZW1fY2FjaGVfdCAqY2FjaGVwLCB2b2lkICpwdHIpKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NraW9zLmggYi9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaAppbmRleCA1ZWIzMzIwLi5lNmI5ZDFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaApAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOglAKCMpc29ja2lvcy5oCTEuMC4yCTAzLzA5LzkzCiAgKgotICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgogICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc291bmRjYXJkLmggYi9pbmNsdWRlL2xpbnV4L3NvdW5kY2FyZC5oCmluZGV4IDI4ZDJkMTguLjUyM2QwNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc291bmRjYXJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zb3VuZGNhcmQuaApAQCAtMzksNiArMzksMTMgQEAKIC8qIEluIExpbnV4IHdlIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIGNyb3NzIGNvbXBpbGluZyAqLwogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAKKy8qIEVuZGlhbiBtYWNyb3MuICovCisjaWZkZWYgX19LRVJORUxfXworIyAgaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgPGVuZGlhbi5oPgorI2VuZGlmCisKIC8qCiAgKglTdXBwb3J0ZWQgY2FyZCBJRCBudW1iZXJzIChTaG91bGQgYmUgc29tZXdoZXJlIGVsc2U/KQogICovCkBAIC0xNzksMTMgKzE4NiwyNiBAQAogICogU29tZSBiaWcgZW5kaWFuL2xpdHRsZSBlbmRpYW4gaGFuZGxpbmcgbWFjcm9zCiAgKi8KIAotI2lmIGRlZmluZWQoX0FJWCkgfHwgZGVmaW5lZChBSVgpIHx8IGRlZmluZWQoc3BhcmMpIHx8IGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKEhQUEEpIHx8IGRlZmluZWQoUFBDKSB8fCBkZWZpbmVkKF9fbWM2ODAwMF9fKQotLyogQmlnIGVuZGlhbiBtYWNoaW5lcyAqLwotIyAgZGVmaW5lIF9QQVRDSEtFWShpZCkgKDB4ZmQwMHxpZCkKLSMgIGRlZmluZSBBRk1UX1MxNl9ORSBBRk1UX1MxNl9CRQotI2Vsc2UKLSMgIGRlZmluZSBfUEFUQ0hLRVkoaWQpICgoaWQ8PDgpfDB4ZmQpCi0jICBkZWZpbmUgQUZNVF9TMTZfTkUgQUZNVF9TMTZfTEUKKyNkZWZpbmUgX0xJTlVYX1BBVENIS0VZX0hfSU5ESVJFQ1QKKyNpbmNsdWRlIDxsaW51eC9wYXRjaGtleS5oPgorI3VuZGVmIF9MSU5VWF9QQVRDSEtFWV9IX0lORElSRUNUCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisjICBpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKyMgICAgZGVmaW5lIEFGTVRfUzE2X05FIEFGTVRfUzE2X0JFCisjICBlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorIyAgICBkZWZpbmUgQUZNVF9TMTZfTkUgQUZNVF9TMTZfTEUKKyMgIGVsc2UKKyMgICAgZXJyb3IgImNvdWxkIG5vdCBkZXRlcm1pbmUgYnl0ZSBvcmRlciIKKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fQllURV9PUkRFUikKKyMgIGlmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKyMgICAgZGVmaW5lIEFGTVRfUzE2X05FIEFGTVRfUzE2X0JFCisjICBlbGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyMgICAgZGVmaW5lIEFGTVRfUzE2X05FIEFGTVRfUzE2X0xFCisjICBlbHNlCisjICAgIGVycm9yICJjb3VsZCBub3QgZGV0ZXJtaW5lIGJ5dGUgb3JkZXIiCisjICBlbmRpZgogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggNzU3Y2Q5Yi4uYzM5ZjZmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtNDU2LDggKzQ1Niw3IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX3NlbXRpbWVkb3AoaW50IHNlbWlkLCBzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqc29wcywKIAkJCQl1bnNpZ25lZCBuc29wcywKIAkJCQljb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICp0aW1lb3V0KTsKLWFzbWxpbmthZ2UgbG9uZyBzeXNfc2htYXQoaW50IHNobWlkLCBjaGFyIF9fdXNlciAqc2htYWRkciwKLQkJCQlpbnQgc2htZmxnLCB1bnNpZ25lZCBsb25nIF9fdXNlciAqYWRkcik7Cithc21saW5rYWdlIGxvbmcgc3lzX3NobWF0KGludCBzaG1pZCwgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcpOwogYXNtbGlua2FnZSBsb25nIHN5c19zaG1nZXQoa2V5X3Qga2V5LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWcpOwogYXNtbGlua2FnZSBsb25nIHN5c19zaG1kdChjaGFyIF9fdXNlciAqc2htYWRkcik7CiBhc21saW5rYWdlIGxvbmcgc3lzX3NobWN0bChpbnQgc2htaWQsIGludCBjbWQsIHN0cnVjdCBzaG1pZF9kcyBfX3VzZXIgKmJ1Zik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaAppbmRleCAzNThkNTJiLi43NzI5OTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTY0Myw2ICs2NDMsNyBAQAogCU5FVF9TQ1RQX01BWF9CVVJTVCAgICAgICAgICAgICAgID0gMTIsCiAJTkVUX1NDVFBfQURESVBfRU5BQkxFCQkgPSAxMywKIAlORVRfU0NUUF9QUlNDVFBfRU5BQkxFCQkgPSAxNCwKKwlORVRfU0NUUF9TTkRCVUZfUE9MSUNZCQkgPSAxNSwKIH07CiAKIC8qIC9wcm9jL3N5cy9uZXQvYnJpZGdlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19kZWZhY3QuaCBiL2luY2x1ZGUvbGludXgvdGNfYWN0L3RjX2RlZmFjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NGY0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RjX2FjdC90Y19kZWZhY3QuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9fTElOVVhfVENfREVGX0gKKyNkZWZpbmUgX19MSU5VWF9UQ19ERUZfSAorCisjaW5jbHVkZSA8bGludXgvcGt0X2Nscy5oPgorCitzdHJ1Y3QgdGNfZGVmYWN0Cit7CisJdGNfZ2VuOworfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitlbnVtCit7CisJVENBX0RFRl9VTlNQRUMsCisJVENBX0RFRl9UTSwKKwlUQ0FfREVGX1BBUk1TLAorCVRDQV9ERUZfREFUQSwKKwlfX1RDQV9ERUZfTUFYCit9OworI2RlZmluZSBUQ0FfREVGX01BWCAoX19UQ0FfREVGX01BWCAtIDEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmRldmljZS5oIGIvaW5jbHVkZS9saW51eC90cmRldmljZS5oCmluZGV4IGFhYTFmMzMuLjk5ZTAyZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyZGV2aWNlLmgKQEAgLTcsNyArNyw3IEBACiAgKgogICogVmVyc2lvbjoJQCgjKWV0aC5oCTEuMC40CTA1LzEzLzkzCiAgKgotICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgogICoJCVJlbG9jYXRlZCB0byBpbmNsdWRlL2xpbnV4IHdoZXJlIGl0IGJlbG9uZ3MgYnkgQWxhbiBDb3ggCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hmcm0uaCBiL2luY2x1ZGUvbGludXgveGZybS5oCmluZGV4IGYwZGYwMmEuLmZkMmVmNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgveGZybS5oCisrKyBiL2luY2x1ZGUvbGludXgveGZybS5oCkBAIC0xNDAsOCArMTQwLDExIEBACiAJWEZSTV9NU0dfRkxVU0hQT0xJQ1ksCiAjZGVmaW5lIFhGUk1fTVNHX0ZMVVNIUE9MSUNZIFhGUk1fTVNHX0ZMVVNIUE9MSUNZCiAKLQlYRlJNX01TR19NQVgKKwlfX1hGUk1fTVNHX01BWAogfTsKKyNkZWZpbmUgWEZSTV9NU0dfTUFYIChfX1hGUk1fTVNHX01BWCAtIDEpCisKKyNkZWZpbmUgWEZSTV9OUl9NU0dUWVBFUyAoWEZSTV9NU0dfTUFYICsgMSAtIFhGUk1fTVNHX0JBU0UpCiAKIHN0cnVjdCB4ZnJtX3VzZXJfdG1wbCB7CiAJc3RydWN0IHhmcm1faWQJCWlkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWN0X2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L2FjdF9nZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTViMTIwNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2FjdF9nZW5lcmljLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBpbmNsdWRlL25ldC9hY3RfZ2VuZXJpYy5oCisgKgorKi8KKyNpZm5kZWYgQUNUX0dFTkVSSUNfSAorI2RlZmluZSBBQ1RfR0VORVJJQ19ICitzdGF0aWMgaW5saW5lIGludCB0Y2ZfZGVmYWN0X3JlbGVhc2Uoc3RydWN0IHRjZl9kZWZhY3QgKnAsIGludCBiaW5kKQoreworCWludCByZXQgPSAwOworCWlmIChwKSB7CisJCWlmIChiaW5kKSB7CisJCQlwLT5iaW5kY250LS07CisJCX0KKwkJcC0+cmVmY250LS07CisJCWlmIChwLT5iaW5kY250IDw9IDAgJiYgcC0+cmVmY250IDw9IDApIHsKKwkJCWtmcmVlKHAtPmRlZmRhdGEpOworCQkJdGNmX2hhc2hfZGVzdHJveShwKTsKKwkJCXJldCA9IDE7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2FsbG9jX2RlZmRhdGEoc3RydWN0IHRjZl9kZWZhY3QgKnAsIHUzMiBkYXRhbGVuLCB2b2lkICpkZWZkYXRhKQoreworCXAtPmRlZmRhdGEgPSBrbWFsbG9jKGRhdGFsZW4sIEdGUF9LRVJORUwpOworCWlmIChwLT5kZWZkYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXAtPmRhdGFsZW4gPSBkYXRhbGVuOworCW1lbWNweShwLT5kZWZkYXRhLCBkZWZkYXRhLCBkYXRhbGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3JlYWxsb2NfZGVmZGF0YShzdHJ1Y3QgdGNmX2RlZmFjdCAqcCwgdTMyIGRhdGFsZW4sIHZvaWQgKmRlZmRhdGEpCit7CisJLyogc2FmZXIgdG8gYmUganVzdCBicnV0ZSBmb3JjZSBmb3Igbm93ICovCisJa2ZyZWUocC0+ZGVmZGF0YSk7CisJcmV0dXJuIGFsbG9jX2RlZmRhdGEocCwgZGF0YWxlbiwgZGVmZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0Y2ZfZGVmYWN0X2luaXQoc3RydWN0IHJ0YXR0ciAqcnRhLCBzdHJ1Y3QgcnRhdHRyICplc3QsCisJCXN0cnVjdCB0Y19hY3Rpb24gKmEsIGludCBvdnIsIGludCBiaW5kKQoreworCXN0cnVjdCBydGF0dHIgKnRiW1RDQV9ERUZfTUFYXTsKKwlzdHJ1Y3QgdGNfZGVmYWN0ICpwYXJtOworCXN0cnVjdCB0Y2ZfZGVmYWN0ICpwOworCXZvaWQgKmRlZmRhdGE7CisJdTMyIGRhdGFsZW4gPSAwOworCWludCByZXQgPSAwOworCisJaWYgKHJ0YSA9PSBOVUxMIHx8IHJ0YXR0cl9wYXJzZV9uZXN0ZWQodGIsIFRDQV9ERUZfTUFYLCBydGEpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodGJbVENBX0RFRl9QQVJNUyAtIDFdID09IE5VTEwgfHwgCisJICAgIFJUQV9QQVlMT0FEKHRiW1RDQV9ERUZfUEFSTVMgLSAxXSkgPCBzaXplb2YoKnBhcm0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBhcm0gPSBSVEFfREFUQSh0YltUQ0FfREVGX1BBUk1TIC0gMV0pOworCWRlZmRhdGEgPSBSVEFfREFUQSh0YltUQ0FfREVGX0RBVEEgLSAxXSk7CisJaWYgKGRlZmRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhbGVuID0gUlRBX1BBWUxPQUQodGJbVENBX0RFRl9EQVRBIC0gMV0pOworCWlmIChkYXRhbGVuIDw9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcCA9IHRjZl9oYXNoX2NoZWNrKHBhcm0tPmluZGV4LCBhLCBvdnIsIGJpbmQpOworCWlmIChwID09IE5VTEwpIHsKKwkJcCA9IHRjZl9oYXNoX2NyZWF0ZShwYXJtLT5pbmRleCwgZXN0LCBhLCBzaXplb2YoKnApLCBvdnIsIGJpbmQpOworCQlpZiAocCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0ID0gYWxsb2NfZGVmZGF0YShwLCBkYXRhbGVuLCBkZWZkYXRhKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWtmcmVlKHApOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlyZXQgPSBBQ1RfUF9DUkVBVEVEOworCX0gZWxzZSB7CisJCWlmICghb3ZyKSB7CisJCQl0Y2ZfZGVmYWN0X3JlbGVhc2UocCwgYmluZCk7CisJCQlyZXR1cm4gLUVFWElTVDsKKwkJfQorCQlyZWFsbG9jX2RlZmRhdGEocCwgZGF0YWxlbiwgZGVmZGF0YSk7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZwLT5sb2NrKTsKKwlwLT5hY3Rpb24gPSBwYXJtLT5hY3Rpb247CisJc3Bpbl91bmxvY2tfYmgoJnAtPmxvY2spOworCWlmIChyZXQgPT0gQUNUX1BfQ1JFQVRFRCkKKwkJdGNmX2hhc2hfaW5zZXJ0KHApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRjZl9kZWZhY3RfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphLCBpbnQgYmluZCkKK3sKKwlzdHJ1Y3QgdGNmX2RlZmFjdCAqcCA9IFBSSVYoYSwgZGVmYWN0KTsKKworCWlmIChwICE9IE5VTEwpCisJCXJldHVybiB0Y2ZfZGVmYWN0X3JlbGVhc2UocCwgYmluZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0Y2ZfZGVmYWN0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSwgaW50IGJpbmQsIGludCByZWYpCit7CisJdW5zaWduZWQgY2hhciAqYiA9IHNrYi0+dGFpbDsKKwlzdHJ1Y3QgdGNfZGVmYWN0IG9wdDsKKwlzdHJ1Y3QgdGNmX2RlZmFjdCAqcCA9IFBSSVYoYSwgZGVmYWN0KTsKKwlzdHJ1Y3QgdGNmX3QgdDsKKworCW9wdC5pbmRleCA9IHAtPmluZGV4OworCW9wdC5yZWZjbnQgPSBwLT5yZWZjbnQgLSByZWY7CisJb3B0LmJpbmRjbnQgPSBwLT5iaW5kY250IC0gYmluZDsKKwlvcHQuYWN0aW9uID0gcC0+YWN0aW9uOworCVJUQV9QVVQoc2tiLCBUQ0FfREVGX1BBUk1TLCBzaXplb2Yob3B0KSwgJm9wdCk7CisJUlRBX1BVVChza2IsIFRDQV9ERUZfREFUQSwgcC0+ZGF0YWxlbiwgcC0+ZGVmZGF0YSk7CisJdC5pbnN0YWxsID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBwLT50bS5pbnN0YWxsKTsKKwl0Lmxhc3R1c2UgPSBqaWZmaWVzX3RvX2Nsb2NrX3QoamlmZmllcyAtIHAtPnRtLmxhc3R1c2UpOworCXQuZXhwaXJlcyA9IGppZmZpZXNfdG9fY2xvY2tfdChwLT50bS5leHBpcmVzKTsKKwlSVEFfUFVUKHNrYiwgVENBX0RFRl9UTSwgc2l6ZW9mKHQpLCAmdCk7CisJcmV0dXJuIHNrYi0+bGVuOworCitydGF0dHJfZmFpbHVyZToKKwlza2JfdHJpbShza2IsIGIgLSBza2ItPmRhdGEpOworCXJldHVybiAtMTsKK30KKworI2RlZmluZSB0Y2FfdXNlX2RlZmF1bHRfb3BzIFwKKwkuZHVtcCAgICAgICAgICAgPSAgICAgICB0Y2ZfZGVmYWN0X2R1bXAsIFwKKwkuY2xlYW51cCAgICAgICAgPSAgICAgICB0Y2ZfZGVmYWN0X2NsZWFudXAsIFwKKwkuaW5pdCAgICAgICAgICAgPSAgICAgICB0Y2ZfZGVmYWN0X2luaXQsIFwKKwkud2FsayAgICAgICAgICAgPSAgICAgICB0Y2ZfZ2VuZXJpY193YWxrZXIsIFwKKworI2RlZmluZSB0Y2FfdXNlX2RlZmF1bHRfZGVmaW5lcyhuYW1lKSBcCisJc3RhdGljIHUzMiBpZHhfZ2VuOyBcCisJc3RhdGljIHN0cnVjdCB0Y2ZfZGVmYWN0ICp0Y2ZfIyNuYW1lX2h0W01ZX1RBQl9TSVpFXTsgXAorCXN0YXRpYyBERUZJTkVfUldMT0NLKCMjbmFtZV9sb2NrKTsKKyNlbmRpZiAvKiBfTkVUX0FDVF9HRU5FUklDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCmluZGV4IDdhZjlhMTMuLmEwZWQ5MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKKysrIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaApAQCAtMTcsNiArMTcsOCBAQAogCiAjZGVmaW5lIElQVjZfTUFYX0FERFJFU1NFUwkJMTYKIAorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorCiBzdHJ1Y3QgcHJlZml4X2luZm8gewogCV9fdTgJCQl0eXBlOwogCV9fdTgJCQlsZW5ndGg7CkBAIC00Myw5ICs0NSw5IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvaWZfaW5ldDYuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogCiAjZGVmaW5lIElONl9BRERSX0hTSVpFCQkxNgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9heDI1LmggYi9pbmNsdWRlL25ldC9heDI1LmgKaW5kZXggZmI5NWVjYi4uOWU2MzY4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXgyNS5oCisrKyBiL2luY2x1ZGUvbmV0L2F4MjUuaApAQCAtMjIwLDYgKzIyMCwxNCBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBheDI1X3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlza2ItPmRldiAgICAgID0gZGV2OworCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKKwlza2ItPm1hYy5yYXcgID0gc2tiLT5kYXRhOworCXJldHVybiBodG9ucyhFVEhfUF9BWDI1KTsKK30KKwogLyogYWZfYXgyNS5jICovCiBleHRlcm4gc3RydWN0IGhsaXN0X2hlYWQgYXgyNV9saXN0OwogZXh0ZXJuIHNwaW5sb2NrX3QgYXgyNV9saXN0X2xvY2s7CkBAIC0zMDUsNyArMzEzLDcgQEAKIGV4dGVybiB2b2lkIGF4MjVfb3V0cHV0KGF4MjVfY2IgKiwgaW50LCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIGV4dGVybiB2b2lkIGF4MjVfa2ljayhheDI1X2NiICopOwogZXh0ZXJuIHZvaWQgYXgyNV90cmFuc21pdF9idWZmZXIoYXgyNV9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgYXgyNV9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICopOworZXh0ZXJuIHZvaWQgYXgyNV9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCAgYXgyNV9jaGVja19pZnJhbWVzX2Fja2VkKGF4MjVfY2IgKiwgdW5zaWduZWQgc2hvcnQpOwogCiAvKiBheDI1X3JvdXRlLmMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2ljbXAuaCBiL2luY2x1ZGUvbmV0L2ljbXAuaAppbmRleCAzZmMxOTI0Li5lNWVmMGQxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWNtcC5oCisrKyBiL2luY2x1ZGUvbmV0L2ljbXAuaApAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOglAKCMpaWNtcC5oCTEuMC40CTA1LzEzLzkzCiAgKgotICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgogICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IGI0ZGIxMzcuLjNmNjM5OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOglAKCMpaXAuaAkxLjAuMgkwNS8wNy85MwogICoKLSAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCUFsYW4gQ294LCA8Z3c0cHRzQGd3NHB0cy5hbXByLm9yZz4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHY2LmggYi9pbmNsdWRlL25ldC9pcHY2LmgKaW5kZXggODdjNDVjYi4uNzcxYjQ3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lwdjYuaApAQCAtNDE2LDcgKzQxNiw3IEBACiAJCQkJCQkgICAgdTggKnByb3RvKTsKIAogZXh0ZXJuIGludAkJCWlwdjZfc2tpcF9leHRoZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKiwgaW50IHN0YXJ0LAotCQkJCQkgICAgICAgICB1OCAqbmV4dGhkcnAsIGludCBsZW4pOworCQkJCQkgICAgICAgICB1OCAqbmV4dGhkcnApOwogCiBleHRlcm4gaW50IAkJCWlwdjZfZXh0X2hkcih1OCBuZXh0aGRyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmggYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAppbmRleCA4NzQ5NmUzLi5mY2IwNWEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAorKysgYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaApAQCAtMTQwLDcgKzE0MCw3IEBACiAJaWYgKGJvdW5kIDw9IDEwMDAwMDAgfHwgZGVsdGFfc2VjID4gKDB4N0ZGRkZGRkYvMTAwMDAwMCktMSkKIAkJcmV0dXJuIGJvdW5kOwogCWRlbHRhID0gZGVsdGFfc2VjICogMTAwMDAwMDsKLQlpZiAoZGVsdGEgPiBib3VuZCkKKwlpZiAoZGVsdGEgPiBib3VuZCB8fCBkZWx0YSA8IDApCiAJCWRlbHRhID0gYm91bmQ7CiAJcmV0dXJuIGRlbHRhOwogfQpAQCAtMTU2LDcgKzE1Niw5IEBACiAJCSAgIF9fZGVsdGEgKz0gMTAwMDAwMDsgXAogCSAgIGNhc2UgMTogXAogCQkgICBfX2RlbHRhICs9IDEwMDAwMDA7IFwKLQkgICBjYXNlIDA6IDsgXAorCSAgIGNhc2UgMDogXAorIAkJICAgaWYgKF9fZGVsdGEgPiBib3VuZCB8fCBfX2RlbHRhIDwgMCkgXAorIAkJCV9fZGVsdGEgPSBib3VuZDsgXAogCSAgIH0gXAogCSAgIF9fZGVsdGE7IFwKIH0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvcm91dGUuaAppbmRleCAyMmRhNzU3Li5lZmU5MmIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKQEAgLTcsNyArNyw3IEBACiAgKgogICogVmVyc2lvbjoJQCgjKXJvdXRlLmgJMS4wLjQJMDUvMjcvOTMKICAqCi0gKiBBdXRob3JzOglSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKiBBdXRob3JzOglSb3NzIEJpcm8KICAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqIEZpeGVzOgogICoJCUFsYW4gQ294CToJUmVmb3JtYXR0ZWQuIEFkZGVkIGlwX3J0X2xvY2FsKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc20uaCBiL2luY2x1ZGUvbmV0L3NjdHAvc20uaAppbmRleCA1NTc2ZGI1Li5mNGZjZWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NtLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zbS5oCkBAIC00MDcsMzIgKzQwNywzOCBAQAogCXJldHVybiAwOwogfQogCi0vKiBDaGVjayBWVEFHIG9mIHRoZSBwYWNrZXQgbWF0Y2hlcyB0aGUgc2VuZGVyJ3Mgb3duIHRhZyBPUiBpdHMgcGVlcidzCi0gKiB0YWcgYW5kIHRoZSBUIGJpdCBpcyBzZXQgaW4gdGhlIENodW5rIEZsYWdzLgorLyogQ2hlY2sgVlRBRyBvZiB0aGUgcGFja2V0IG1hdGNoZXMgdGhlIHNlbmRlcidzIG93biB0YWcgYW5kIHRoZSBUIGJpdCBpcworICogbm90IHNldCwgT1IgaXRzIHBlZXIncyB0YWcgYW5kIHRoZSBUIGJpdCBpcyBzZXQgaW4gdGhlIENodW5rIEZsYWdzLgogICovCiBzdGF0aWMgaW5saW5lIGludAogc2N0cF92dGFnX3ZlcmlmeV9laXRoZXIoY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAogCQkJY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiB7Ci0gICAgICAgIC8qIFJGQyAyOTYwIFNlY3Rpb24gOC41LjEsIHNjdHBpbXBndWlkZS0wNiBTZWN0aW9uIDIuMTMuMgorICAgICAgICAvKiBSRkMgMjk2MCBTZWN0aW9uIDguNS4xLCBzY3RwaW1wZ3VpZGUgU2VjdGlvbiAyLjQxCiAJICoKLQkgKiBCKSBUaGUgcmVjZWl2ZXIgb2YgYSBBQk9SVCBzaGFsbCBhY2NlcHQgdGhlIHBhY2tldCBpZiB0aGUKLQkgKiBWZXJpZmljYXRpb24gVGFnIGZpZWxkIG9mIHRoZSBwYWNrZXQgbWF0Y2hlcyBpdHMgb3duIHRhZyBPUiBpdAotCSAqIGlzIHNldCB0byBpdHMgcGVlcidzIHRhZyBhbmQgdGhlIFQgYml0IGlzIHNldCBpbiB0aGUgQ2h1bmsKLQkgKiBGbGFncy4gT3RoZXJ3aXNlLCB0aGUgcmVjZWl2ZXIgTVVTVCBzaWxlbnRseSBkaXNjYXJkIHRoZSBwYWNrZXQKLQkgKiBhbmQgdGFrZSBubyBmdXJ0aGVyIGFjdGlvbi4KKwkgKiBCKSBUaGUgcmVjZWl2ZXIgb2YgYSBBQk9SVCBNVVNUIGFjY2VwdCB0aGUgcGFja2V0CisJICogICAgaWYgdGhlIFZlcmlmaWNhdGlvbiBUYWcgZmllbGQgb2YgdGhlIHBhY2tldCBtYXRjaGVzIGl0cyBvd24gdGFnCisJICogICAgYW5kIHRoZSBUIGJpdCBpcyBub3Qgc2V0CisJICogICAgT1IKKwkgKiAgICBpdCBpcyBzZXQgdG8gaXRzIHBlZXIncyB0YWcgYW5kIHRoZSBUIGJpdCBpcyBzZXQgaW4gdGhlIENodW5rCisJICogICAgRmxhZ3MuCisJICogICAgT3RoZXJ3aXNlLCB0aGUgcmVjZWl2ZXIgTVVTVCBzaWxlbnRseSBkaXNjYXJkIHRoZSBwYWNrZXQKKwkgKiAgICBhbmQgdGFrZSBubyBmdXJ0aGVyIGFjdGlvbi4KIAkgKgotCSAqIChDKSBUaGUgcmVjZWl2ZXIgb2YgYSBTSFVURE9XTiBDT01QTEVURSBzaGFsbCBhY2NlcHQgdGhlCi0JICogcGFja2V0IGlmIHRoZSBWZXJpZmljYXRpb24gVGFnIGZpZWxkIG9mIHRoZSBwYWNrZXQKLQkgKiBtYXRjaGVzIGl0cyBvd24gdGFnIE9SIGl0IGlzIHNldCB0byBpdHMgcGVlcidzIHRhZyBhbmQKLQkgKiB0aGUgVCBiaXQgaXMgc2V0IGluIHRoZSBDaHVuayBGbGFncy4gIE90aGVyd2lzZSwgdGhlCi0JICogcmVjZWl2ZXIgTVVTVCBzaWxlbnRseSBkaXNjYXJkIHRoZSBwYWNrZXQgYW5kIHRha2Ugbm8KLQkgKiBmdXJ0aGVyIGFjdGlvbi4uLi4KLQkgKgorCSAqIEMpIFRoZSByZWNlaXZlciBvZiBhIFNIVVRET1dOIENPTVBMRVRFIHNoYWxsIGFjY2VwdCB0aGUgcGFja2V0CisJICogICAgaWYgdGhlIFZlcmlmaWNhdGlvbiBUYWcgZmllbGQgb2YgdGhlIHBhY2tldCBtYXRjaGVzIGl0cyBvd24gdGFnCisJICogICAgYW5kIHRoZSBUIGJpdCBpcyBub3Qgc2V0CisJICogICAgT1IKKwkgKiAgICBpdCBpcyBzZXQgdG8gaXRzIHBlZXIncyB0YWcgYW5kIHRoZSBUIGJpdCBpcyBzZXQgaW4gdGhlIENodW5rCisJICogICAgRmxhZ3MuCisJICogICAgT3RoZXJ3aXNlLCB0aGUgcmVjZWl2ZXIgTVVTVCBzaWxlbnRseSBkaXNjYXJkIHRoZSBwYWNrZXQKKwkgKiAgICBhbmQgdGFrZSBubyBmdXJ0aGVyIGFjdGlvbi4gIEFuIGVuZHBvaW50IE1VU1QgaWdub3JlIHRoZQorCSAqICAgIFNIVVRET1dOIENPTVBMRVRFIGlmIGl0IGlzIG5vdCBpbiB0aGUgU0hVVERPV04tQUNLLVNFTlQgc3RhdGUuCiAJICovCi0gICAgICAgIGlmICgobnRvaGwoY2h1bmstPnNjdHBfaGRyLT52dGFnKSA9PSBhc29jLT5jLm15X3Z0YWcpIHx8Ci0JICAgIChzY3RwX3Rlc3RfVF9iaXQoY2h1bmspICYmIChudG9obChjaHVuay0+c2N0cF9oZHItPnZ0YWcpCi0JICAgID09IGFzb2MtPmMucGVlcl92dGFnKSkpIHsKKyAgICAgICAgaWYgKCghc2N0cF90ZXN0X1RfYml0KGNodW5rKSAmJgorICAgICAgICAgICAgIChudG9obChjaHVuay0+c2N0cF9oZHItPnZ0YWcpID09IGFzb2MtPmMubXlfdnRhZykpIHx8CisJICAgIChzY3RwX3Rlc3RfVF9iaXQoY2h1bmspICYmCisJICAgICAobnRvaGwoY2h1bmstPnNjdHBfaGRyLT52dGFnKSA9PSBhc29jLT5jLnBlZXJfdnRhZykpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAJfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IDdlNjRjZjYuLjZjMjRkOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC0xNTQsNiArMTU0LDEzIEBACiAJaW50IG1heF9yZXRyYW5zX3BhdGg7CiAJaW50IG1heF9yZXRyYW5zX2luaXQ7CiAKKwkvKgorCSAqIFBvbGljeSBmb3IgcHJlZm9ybWluZyBzY3RwL3NvY2tldCBhY2NvdW50aW5nCisJICogMCAgIC0gZG8gc29ja2V0IGxldmVsIGFjY291bnRpbmcsIGFsbCBhc3NvY3Mgc2hhcmUgc2tfc25kYnVmCisJICogMSAgIC0gZG8gc2N0cCBhY2NvdW50aW5nLCBlYWNoIGFzb2MgbWF5IHVzZSBza19zbmRidWYgYnl0ZXMKKwkgKi8KKwlpbnQgc25kYnVmX3BvbGljeTsKKwogCS8qIEhCLmludGVydmFsCQkgICAgLSAzMCBzZWNvbmRzICAqLwogCWludCBoYl9pbnRlcnZhbDsKIApAQCAtMjA3LDYgKzIxNCw3IEBACiAjZGVmaW5lIHNjdHBfdmFsaWRfY29va2llX2xpZmUJCShzY3RwX2dsb2JhbHMudmFsaWRfY29va2llX2xpZmUpCiAjZGVmaW5lIHNjdHBfY29va2llX3ByZXNlcnZlX2VuYWJsZQkoc2N0cF9nbG9iYWxzLmNvb2tpZV9wcmVzZXJ2ZV9lbmFibGUpCiAjZGVmaW5lIHNjdHBfbWF4X3JldHJhbnNfYXNzb2NpYXRpb24JKHNjdHBfZ2xvYmFscy5tYXhfcmV0cmFuc19hc3NvY2lhdGlvbikKKyNkZWZpbmUgc2N0cF9zbmRidWZfcG9saWN5CSAJKHNjdHBfZ2xvYmFscy5zbmRidWZfcG9saWN5KQogI2RlZmluZSBzY3RwX21heF9yZXRyYW5zX3BhdGgJCShzY3RwX2dsb2JhbHMubWF4X3JldHJhbnNfcGF0aCkKICNkZWZpbmUgc2N0cF9tYXhfcmV0cmFuc19pbml0CQkoc2N0cF9nbG9iYWxzLm1heF9yZXRyYW5zX2luaXQpCiAjZGVmaW5lIHNjdHBfaGJfaW50ZXJ2YWwJCShzY3RwX2dsb2JhbHMuaGJfaW50ZXJ2YWwpCkBAIC0xMjEyLDcgKzEyMjAsOCBAQAogCS8qIERlZmF1bHQgdGltZW91dHMuICAqLwogCWludCB0aW1lb3V0c1tTQ1RQX05VTV9USU1FT1VUX1RZUEVTXTsKIAotCS8qIFZhcmlvdXMgdGhyZXNob2xkcy4JKi8KKwkvKiBzZW5kYnVmIGFjY3QuIHBvbGljeS4JKi8KKwlfX3UzMiBzbmRidWZfcG9saWN5OwogCiAJLyogTmFtZSBmb3IgZGVidWdnaW5nIG91dHB1dC4uLiAqLwogCWNoYXIgKmRlYnVnX25hbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggYmU4MWNhYi4uYTllZjNhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOglAKCMpc29jay5oCTEuMC40CTA1LzEzLzkzCiAgKgotICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJQ29yZXkgTWlueWFyZCA8d2YtcmNoIW1pbnlhcmRAcmVsYXkuRVUubmV0PgogICoJCUZsb3JpYW4gTGEgUm9jaGUgPGZsbGFAc3R1ZC51bmktc2IuZGU+CkBAIC05MCwxNyArOTAsMTcgQEAKIHN0cnVjdCBzb2NrOwogCiAvKioKLSAgKglzdHJ1Y3Qgc29ja19jb21tb24gLSBtaW5pbWFsIG5ldHdvcmsgbGF5ZXIgcmVwcmVzZW50YXRpb24gb2Ygc29ja2V0cwotICAqCUBza2NfZmFtaWx5IC0gbmV0d29yayBhZGRyZXNzIGZhbWlseQotICAqCUBza2Nfc3RhdGUgLSBDb25uZWN0aW9uIHN0YXRlCi0gICoJQHNrY19yZXVzZSAtICVTT19SRVVTRUFERFIgc2V0dGluZwotICAqCUBza2NfYm91bmRfZGV2X2lmIC0gYm91bmQgZGV2aWNlIGluZGV4IGlmICE9IDAKLSAgKglAc2tjX25vZGUgLSBtYWluIGhhc2ggbGlua2FnZSBmb3IgdmFyaW91cyBwcm90b2NvbCBsb29rdXAgdGFibGVzCi0gICoJQHNrY19iaW5kX25vZGUgLSBiaW5kIGhhc2ggbGlua2FnZSBmb3IgdmFyaW91cyBwcm90b2NvbCBsb29rdXAgdGFibGVzCi0gICoJQHNrY19yZWZjbnQgLSByZWZlcmVuY2UgY291bnQKLSAgKgotICAqCVRoaXMgaXMgdGhlIG1pbmltYWwgbmV0d29yayBsYXllciByZXByZXNlbnRhdGlvbiBvZiBzb2NrZXRzLCB0aGUgaGVhZGVyCi0gICoJZm9yIHN0cnVjdCBzb2NrIGFuZCBzdHJ1Y3QgdGNwX3R3X2J1Y2tldC4KKyAqCXN0cnVjdCBzb2NrX2NvbW1vbiAtIG1pbmltYWwgbmV0d29yayBsYXllciByZXByZXNlbnRhdGlvbiBvZiBzb2NrZXRzCisgKglAc2tjX2ZhbWlseTogbmV0d29yayBhZGRyZXNzIGZhbWlseQorICoJQHNrY19zdGF0ZTogQ29ubmVjdGlvbiBzdGF0ZQorICoJQHNrY19yZXVzZTogJVNPX1JFVVNFQUREUiBzZXR0aW5nCisgKglAc2tjX2JvdW5kX2Rldl9pZjogYm91bmQgZGV2aWNlIGluZGV4IGlmICE9IDAKKyAqCUBza2Nfbm9kZTogbWFpbiBoYXNoIGxpbmthZ2UgZm9yIHZhcmlvdXMgcHJvdG9jb2wgbG9va3VwIHRhYmxlcworICoJQHNrY19iaW5kX25vZGU6IGJpbmQgaGFzaCBsaW5rYWdlIGZvciB2YXJpb3VzIHByb3RvY29sIGxvb2t1cCB0YWJsZXMKKyAqCUBza2NfcmVmY250OiByZWZlcmVuY2UgY291bnQKKyAqCisgKglUaGlzIGlzIHRoZSBtaW5pbWFsIG5ldHdvcmsgbGF5ZXIgcmVwcmVzZW50YXRpb24gb2Ygc29ja2V0cywgdGhlIGhlYWRlcgorICoJZm9yIHN0cnVjdCBzb2NrIGFuZCBzdHJ1Y3QgdGNwX3R3X2J1Y2tldC4KICAgKi8KIHN0cnVjdCBzb2NrX2NvbW1vbiB7CiAJdW5zaWduZWQgc2hvcnQJCXNrY19mYW1pbHk7CkBAIC0xMTQsNjAgKzExNCw2MiBAQAogCiAvKioKICAgKglzdHJ1Y3Qgc29jayAtIG5ldHdvcmsgbGF5ZXIgcmVwcmVzZW50YXRpb24gb2Ygc29ja2V0cwotICAqCUBfX3NrX2NvbW1vbiAtIHNoYXJlZCBsYXlvdXQgd2l0aCB0Y3BfdHdfYnVja2V0Ci0gICoJQHNrX3NodXRkb3duIC0gbWFzayBvZiAlU0VORF9TSFVURE9XTiBhbmQvb3IgJVJDVl9TSFVURE9XTgotICAqCUBza191c2VybG9ja3MgLSAlU09fU05EQlVGIGFuZCAlU09fUkNWQlVGIHNldHRpbmdzCi0gICoJQHNrX2xvY2sgLQlzeW5jaHJvbml6ZXIKLSAgKglAc2tfcmN2YnVmIC0gc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlciBpbiBieXRlcwotICAqCUBza19zbGVlcCAtIHNvY2sgd2FpdCBxdWV1ZQotICAqCUBza19kc3RfY2FjaGUgLSBkZXN0aW5hdGlvbiBjYWNoZQotICAqCUBza19kc3RfbG9jayAtIGRlc3RpbmF0aW9uIGNhY2hlIGxvY2sKLSAgKglAc2tfcG9saWN5IC0gZmxvdyBwb2xpY3kKLSAgKglAc2tfcm1lbV9hbGxvYyAtIHJlY2VpdmUgcXVldWUgYnl0ZXMgY29tbWl0dGVkCi0gICoJQHNrX3JlY2VpdmVfcXVldWUgLSBpbmNvbWluZyBwYWNrZXRzCi0gICoJQHNrX3dtZW1fYWxsb2MgLSB0cmFuc21pdCBxdWV1ZSBieXRlcyBjb21taXR0ZWQKLSAgKglAc2tfd3JpdGVfcXVldWUgLSBQYWNrZXQgc2VuZGluZyBxdWV1ZQotICAqCUBza19vbWVtX2FsbG9jIC0gIm8iIGlzICJvcHRpb24iIG9yICJvdGhlciIKLSAgKglAc2tfd21lbV9xdWV1ZWQgLSBwZXJzaXN0ZW50IHF1ZXVlIHNpemUKLSAgKglAc2tfZm9yd2FyZF9hbGxvYyAtIHNwYWNlIGFsbG9jYXRlZCBmb3J3YXJkCi0gICoJQHNrX2FsbG9jYXRpb24gLSBhbGxvY2F0aW9uIG1vZGUKLSAgKglAc2tfc25kYnVmIC0gc2l6ZSBvZiBzZW5kIGJ1ZmZlciBpbiBieXRlcwotICAqCUBza19mbGFncyAtICVTT19MSU5HRVIgKGxfb25vZmYpLCAlU09fQlJPQURDQVNULCAlU09fS0VFUEFMSVZFLCAlU09fT09CSU5MSU5FIHNldHRpbmdzCi0gICoJQHNrX25vX2NoZWNrIC0gJVNPX05PX0NIRUNLIHNldHRpbmcsIHdldGhlciBvciBub3QgY2hlY2t1cCBwYWNrZXRzCi0gICoJQHNrX3JvdXRlX2NhcHMgLSByb3V0ZSBjYXBhYmlsaXRpZXMgKGUuZy4gJU5FVElGX0ZfVFNPKQotICAqCUBza19saW5nZXJ0aW1lIC0gJVNPX0xJTkdFUiBsX2xpbmdlciBzZXR0aW5nCi0gICoJQHNrX2hhc2hlbnQgLSBoYXNoIGVudHJ5IGluIHNldmVyYWwgdGFibGVzIChlLmcuIHRjcF9laGFzaCkKLSAgKglAc2tfYmFja2xvZyAtIGFsd2F5cyB1c2VkIHdpdGggdGhlIHBlci1zb2NrZXQgc3BpbmxvY2sgaGVsZAotICAqCUBza19jYWxsYmFja19sb2NrIC0gdXNlZCB3aXRoIHRoZSBjYWxsYmFja3MgaW4gdGhlIGVuZCBvZiB0aGlzIHN0cnVjdAotICAqCUBza19lcnJvcl9xdWV1ZSAtIHJhcmVseSB1c2VkCi0gICoJQHNrX3Byb3QgLSBwcm90b2NvbCBoYW5kbGVycyBpbnNpZGUgYSBuZXR3b3JrIGZhbWlseQotICAqCUBza19lcnIgLSBsYXN0IGVycm9yCi0gICoJQHNrX2Vycl9zb2Z0IC0gZXJyb3JzIHRoYXQgZG9uJ3QgY2F1c2UgZmFpbHVyZSBidXQgYXJlIHRoZSBjYXVzZSBvZiBhIHBlcnNpc3RlbnQgZmFpbHVyZSBub3QganVzdCAndGltZWQgb3V0JwotICAqCUBza19hY2tfYmFja2xvZyAtIGN1cnJlbnQgbGlzdGVuIGJhY2tsb2cKLSAgKglAc2tfbWF4X2Fja19iYWNrbG9nIC0gbGlzdGVuIGJhY2tsb2cgc2V0IGluIGxpc3RlbigpCi0gICoJQHNrX3ByaW9yaXR5IC0gJVNPX1BSSU9SSVRZIHNldHRpbmcKLSAgKglAc2tfdHlwZSAtIHNvY2tldCB0eXBlICglU09DS19TVFJFQU0sIGV0YykKLSAgKglAc2tfcHJvdG9jb2wgLSB3aGljaCBwcm90b2NvbCB0aGlzIHNvY2tldCBiZWxvbmdzIGluIHRoaXMgbmV0d29yayBmYW1pbHkKLSAgKglAc2tfcGVlcmNyZWQgLSAlU09fUEVFUkNSRUQgc2V0dGluZwotICAqCUBza19yY3Zsb3dhdCAtICVTT19SQ1ZMT1dBVCBzZXR0aW5nCi0gICoJQHNrX3JjdnRpbWVvIC0gJVNPX1JDVlRJTUVPIHNldHRpbmcKLSAgKglAc2tfc25kdGltZW8gLSAlU09fU05EVElNRU8gc2V0dGluZwotICAqCUBza19maWx0ZXIgLSBzb2NrZXQgZmlsdGVyaW5nIGluc3RydWN0aW9ucwotICAqCUBza19wcm90aW5mbyAtIHByaXZhdGUgYXJlYSwgbmV0IGZhbWlseSBzcGVjaWZpYywgd2hlbiBub3QgdXNpbmcgc2xhYgotICAqCUBza190aW1lciAtIHNvY2sgY2xlYW51cCB0aW1lcgotICAqCUBza19zdGFtcCAtIHRpbWUgc3RhbXAgb2YgbGFzdCBwYWNrZXQgcmVjZWl2ZWQKLSAgKglAc2tfc29ja2V0IC0gSWRlbnRkIGFuZCByZXBvcnRpbmcgSU8gc2lnbmFscwotICAqCUBza191c2VyX2RhdGEgLSBSUEMgbGF5ZXIgcHJpdmF0ZSBkYXRhCi0gICoJQHNrX3NuZG1zZ19wYWdlIC0gY2FjaGVkIHBhZ2UgZm9yIHNlbmRtc2cKLSAgKglAc2tfc25kbXNnX29mZiAtIGNhY2hlZCBvZmZzZXQgZm9yIHNlbmRtc2cKLSAgKglAc2tfc2VuZF9oZWFkIC0gZnJvbnQgb2Ygc3R1ZmYgdG8gdHJhbnNtaXQKLSAgKglAc2tfd3JpdGVfcGVuZGluZyAtIGEgd3JpdGUgdG8gc3RyZWFtIHNvY2tldCB3YWl0cyB0byBzdGFydAotICAqCUBza19zdGF0ZV9jaGFuZ2UgLSBjYWxsYmFjayB0byBpbmRpY2F0ZSBjaGFuZ2UgaW4gdGhlIHN0YXRlIG9mIHRoZSBzb2NrCi0gICoJQHNrX2RhdGFfcmVhZHkgLSBjYWxsYmFjayB0byBpbmRpY2F0ZSB0aGVyZSBpcyBkYXRhIHRvIGJlIHByb2Nlc3NlZAotICAqCUBza193cml0ZV9zcGFjZSAtIGNhbGxiYWNrIHRvIGluZGljYXRlIHRoZXJlIGlzIGJmIHNlbmRpbmcgc3BhY2UgYXZhaWxhYmxlCi0gICoJQHNrX2Vycm9yX3JlcG9ydCAtIGNhbGxiYWNrIHRvIGluZGljYXRlIGVycm9ycyAoZS5nLiAlTVNHX0VSUlFVRVVFKQotICAqCUBza19iYWNrbG9nX3JjdiAtIGNhbGxiYWNrIHRvIHByb2Nlc3MgdGhlIGJhY2tsb2cKLSAgKglAc2tfZGVzdHJ1Y3QgLSBjYWxsZWQgYXQgc29jayBmcmVlaW5nIHRpbWUsIGkuZS4gd2hlbiBhbGwgcmVmY250ID09IDAKKyAgKglAX19za19jb21tb246IHNoYXJlZCBsYXlvdXQgd2l0aCB0Y3BfdHdfYnVja2V0CisgICoJQHNrX3NodXRkb3duOiBtYXNrIG9mICVTRU5EX1NIVVRET1dOIGFuZC9vciAlUkNWX1NIVVRET1dOCisgICoJQHNrX3VzZXJsb2NrczogJVNPX1NOREJVRiBhbmQgJVNPX1JDVkJVRiBzZXR0aW5ncworICAqCUBza19sb2NrOglzeW5jaHJvbml6ZXIKKyAgKglAc2tfcmN2YnVmOiBzaXplIG9mIHJlY2VpdmUgYnVmZmVyIGluIGJ5dGVzCisgICoJQHNrX3NsZWVwOiBzb2NrIHdhaXQgcXVldWUKKyAgKglAc2tfZHN0X2NhY2hlOiBkZXN0aW5hdGlvbiBjYWNoZQorICAqCUBza19kc3RfbG9jazogZGVzdGluYXRpb24gY2FjaGUgbG9jaworICAqCUBza19wb2xpY3k6IGZsb3cgcG9saWN5CisgICoJQHNrX3JtZW1fYWxsb2M6IHJlY2VpdmUgcXVldWUgYnl0ZXMgY29tbWl0dGVkCisgICoJQHNrX3JlY2VpdmVfcXVldWU6IGluY29taW5nIHBhY2tldHMKKyAgKglAc2tfd21lbV9hbGxvYzogdHJhbnNtaXQgcXVldWUgYnl0ZXMgY29tbWl0dGVkCisgICoJQHNrX3dyaXRlX3F1ZXVlOiBQYWNrZXQgc2VuZGluZyBxdWV1ZQorICAqCUBza19vbWVtX2FsbG9jOiAibyIgaXMgIm9wdGlvbiIgb3IgIm90aGVyIgorICAqCUBza193bWVtX3F1ZXVlZDogcGVyc2lzdGVudCBxdWV1ZSBzaXplCisgICoJQHNrX2ZvcndhcmRfYWxsb2M6IHNwYWNlIGFsbG9jYXRlZCBmb3J3YXJkCisgICoJQHNrX2FsbG9jYXRpb246IGFsbG9jYXRpb24gbW9kZQorICAqCUBza19zbmRidWY6IHNpemUgb2Ygc2VuZCBidWZmZXIgaW4gYnl0ZXMKKyAgKglAc2tfZmxhZ3M6ICVTT19MSU5HRVIgKGxfb25vZmYpLCAlU09fQlJPQURDQVNULCAlU09fS0VFUEFMSVZFLCAlU09fT09CSU5MSU5FIHNldHRpbmdzCisgICoJQHNrX25vX2NoZWNrOiAlU09fTk9fQ0hFQ0sgc2V0dGluZywgd2V0aGVyIG9yIG5vdCBjaGVja3VwIHBhY2tldHMKKyAgKglAc2tfcm91dGVfY2Fwczogcm91dGUgY2FwYWJpbGl0aWVzIChlLmcuICVORVRJRl9GX1RTTykKKyAgKglAc2tfbGluZ2VydGltZTogJVNPX0xJTkdFUiBsX2xpbmdlciBzZXR0aW5nCisgICoJQHNrX2hhc2hlbnQ6IGhhc2ggZW50cnkgaW4gc2V2ZXJhbCB0YWJsZXMgKGUuZy4gdGNwX2VoYXNoKQorICAqCUBza19iYWNrbG9nOiBhbHdheXMgdXNlZCB3aXRoIHRoZSBwZXItc29ja2V0IHNwaW5sb2NrIGhlbGQKKyAgKglAc2tfY2FsbGJhY2tfbG9jazogdXNlZCB3aXRoIHRoZSBjYWxsYmFja3MgaW4gdGhlIGVuZCBvZiB0aGlzIHN0cnVjdAorICAqCUBza19lcnJvcl9xdWV1ZTogcmFyZWx5IHVzZWQKKyAgKglAc2tfcHJvdDogcHJvdG9jb2wgaGFuZGxlcnMgaW5zaWRlIGEgbmV0d29yayBmYW1pbHkKKyAgKglAc2tfcHJvdF9jcmVhdG9yOiBza19wcm90IG9mIG9yaWdpbmFsIHNvY2sgY3JlYXRvciAoc2VlIGlwdjZfc2V0c29ja29wdCwgSVBWNl9BRERSRk9STSBmb3IgaW5zdGFuY2UpCisgICoJQHNrX2VycjogbGFzdCBlcnJvcgorICAqCUBza19lcnJfc29mdDogZXJyb3JzIHRoYXQgZG9uJ3QgY2F1c2UgZmFpbHVyZSBidXQgYXJlIHRoZSBjYXVzZSBvZiBhIHBlcnNpc3RlbnQgZmFpbHVyZSBub3QganVzdCAndGltZWQgb3V0JworICAqCUBza19hY2tfYmFja2xvZzogY3VycmVudCBsaXN0ZW4gYmFja2xvZworICAqCUBza19tYXhfYWNrX2JhY2tsb2c6IGxpc3RlbiBiYWNrbG9nIHNldCBpbiBsaXN0ZW4oKQorICAqCUBza19wcmlvcml0eTogJVNPX1BSSU9SSVRZIHNldHRpbmcKKyAgKglAc2tfdHlwZTogc29ja2V0IHR5cGUgKCVTT0NLX1NUUkVBTSwgZXRjKQorICAqCUBza19wcm90b2NvbDogd2hpY2ggcHJvdG9jb2wgdGhpcyBzb2NrZXQgYmVsb25ncyBpbiB0aGlzIG5ldHdvcmsgZmFtaWx5CisgICoJQHNrX3BlZXJjcmVkOiAlU09fUEVFUkNSRUQgc2V0dGluZworICAqCUBza19yY3Zsb3dhdDogJVNPX1JDVkxPV0FUIHNldHRpbmcKKyAgKglAc2tfcmN2dGltZW86ICVTT19SQ1ZUSU1FTyBzZXR0aW5nCisgICoJQHNrX3NuZHRpbWVvOiAlU09fU05EVElNRU8gc2V0dGluZworICAqCUBza19maWx0ZXI6IHNvY2tldCBmaWx0ZXJpbmcgaW5zdHJ1Y3Rpb25zCisgICoJQHNrX3Byb3RpbmZvOiBwcml2YXRlIGFyZWEsIG5ldCBmYW1pbHkgc3BlY2lmaWMsIHdoZW4gbm90IHVzaW5nIHNsYWIKKyAgKglAc2tfdGltZXI6IHNvY2sgY2xlYW51cCB0aW1lcgorICAqCUBza19zdGFtcDogdGltZSBzdGFtcCBvZiBsYXN0IHBhY2tldCByZWNlaXZlZAorICAqCUBza19zb2NrZXQ6IElkZW50ZCBhbmQgcmVwb3J0aW5nIElPIHNpZ25hbHMKKyAgKglAc2tfdXNlcl9kYXRhOiBSUEMgbGF5ZXIgcHJpdmF0ZSBkYXRhCisgICoJQHNrX3NuZG1zZ19wYWdlOiBjYWNoZWQgcGFnZSBmb3Igc2VuZG1zZworICAqCUBza19zbmRtc2dfb2ZmOiBjYWNoZWQgb2Zmc2V0IGZvciBzZW5kbXNnCisgICoJQHNrX3NlbmRfaGVhZDogZnJvbnQgb2Ygc3R1ZmYgdG8gdHJhbnNtaXQKKyAgKglAc2tfc2VjdXJpdHk6IHVzZWQgYnkgc2VjdXJpdHkgbW9kdWxlcworICAqCUBza193cml0ZV9wZW5kaW5nOiBhIHdyaXRlIHRvIHN0cmVhbSBzb2NrZXQgd2FpdHMgdG8gc3RhcnQKKyAgKglAc2tfc3RhdGVfY2hhbmdlOiBjYWxsYmFjayB0byBpbmRpY2F0ZSBjaGFuZ2UgaW4gdGhlIHN0YXRlIG9mIHRoZSBzb2NrCisgICoJQHNrX2RhdGFfcmVhZHk6IGNhbGxiYWNrIHRvIGluZGljYXRlIHRoZXJlIGlzIGRhdGEgdG8gYmUgcHJvY2Vzc2VkCisgICoJQHNrX3dyaXRlX3NwYWNlOiBjYWxsYmFjayB0byBpbmRpY2F0ZSB0aGVyZSBpcyBiZiBzZW5kaW5nIHNwYWNlIGF2YWlsYWJsZQorICAqCUBza19lcnJvcl9yZXBvcnQ6IGNhbGxiYWNrIHRvIGluZGljYXRlIGVycm9ycyAoZS5nLiAlTVNHX0VSUlFVRVVFKQorICAqCUBza19iYWNrbG9nX3JjdjogY2FsbGJhY2sgdG8gcHJvY2VzcyB0aGUgYmFja2xvZworICAqCUBza19kZXN0cnVjdDogY2FsbGVkIGF0IHNvY2sgZnJlZWluZyB0aW1lLCBpLmUuIHdoZW4gYWxsIHJlZmNudCA9PSAwCiAgKi8KIHN0cnVjdCBzb2NrIHsKIAkvKgpAQCAtMjE3LDYgKzIxOSw3IEBACiAJfSBza19iYWNrbG9nOwogCXN0cnVjdCBza19idWZmX2hlYWQJc2tfZXJyb3JfcXVldWU7CiAJc3RydWN0IHByb3RvCQkqc2tfcHJvdDsKKwlzdHJ1Y3QgcHJvdG8JCSpza19wcm90X2NyZWF0b3I7CiAJcndsb2NrX3QJCXNrX2NhbGxiYWNrX2xvY2s7CiAJaW50CQkJc2tfZXJyLAogCQkJCXNrX2Vycl9zb2Z0OwpAQCAtMTIyMyw4ICsxMjI2LDggQEAKIAogLyoqCiAgKiBza19lYXRfc2tiIC0gUmVsZWFzZSBhIHNrYiBpZiBpdCBpcyBubyBsb25nZXIgbmVlZGVkCi0gKiBAc2sgLSBzb2NrZXQgdG8gZWF0IHRoaXMgc2tiIGZyb20KLSAqIEBza2IgLSBzb2NrZXQgYnVmZmVyIHRvIGVhdAorICogQHNrOiBzb2NrZXQgdG8gZWF0IHRoaXMgc2tiIGZyb20KKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gZWF0CiAgKgogICogVGhpcyByb3V0aW5lIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBvciB3aXRoIHRoZSBzb2NrZXQKICAqIGxvY2tlZCBzbyB0aGF0IHRoZSBza19idWZmIHF1ZXVlIG9wZXJhdGlvbiBpcyBvay4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19kZWZhY3QuaCBiL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19kZWZhY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjNhYTY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2RlZmFjdC5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX19ORVRfVENfREVGX0gKKyNkZWZpbmUgX19ORVRfVENfREVGX0gKKworI2luY2x1ZGUgPG5ldC9hY3RfYXBpLmg+CisKK3N0cnVjdCB0Y2ZfZGVmYWN0Cit7CisJdGNhX2dlbihkZWZhY3QpOworCXUzMiAgICAgZGF0YWxlbjsKKwl2b2lkICAgICpkZWZkYXRhOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDUwMzgxMGEuLmU3MWY4YmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC03LDcgKzcsNyBAQAogICoKICAqIFZlcnNpb246CUAoIyl0Y3AuaAkxLjAuNQkwNS8yMy85MwogICoKLSAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoKICAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xNDE3LDE5ICsxNDE3LDIwIEBACiAJCSAgdGNwX21pbnNoYWxsX2NoZWNrKHRwKSkpKTsKIH0KIAotZXh0ZXJuIHZvaWQgdGNwX3NldF9za2JfdHNvX3NlZ3Moc3RydWN0IHNrX2J1ZmYgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIHRjcF9zZXRfc2tiX3Rzb19zZWdzKHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICopOwogCiAvKiBUaGlzIGNoZWNrcyBpZiB0aGUgZGF0YSBiZWFyaW5nIHBhY2tldCBTS0IgKHVzdWFsbHkgc2stPnNrX3NlbmRfaGVhZCkKICAqIHNob3VsZCBiZSBwdXQgb24gdGhlIHdpcmUgcmlnaHQgbm93LgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNwX3NuZF90ZXN0KGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAsIAorc3RhdGljIF9faW5saW5lX18gaW50IHRjcF9zbmRfdGVzdChzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICB1bnNpZ25lZCBjdXJfbXNzLCBpbnQgbm9uYWdsZSkKIHsKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlpbnQgcGt0cyA9IHRjcF9za2JfcGNvdW50KHNrYik7CiAKIAlpZiAoIXBrdHMpIHsKLQkJdGNwX3NldF9za2JfdHNvX3NlZ3Moc2tiLCB0cC0+bXNzX2NhY2hlX3N0ZCk7CisJCXRjcF9zZXRfc2tiX3Rzb19zZWdzKHNrLCBza2IpOwogCQlwa3RzID0gdGNwX3NrYl9wY291bnQoc2tiKTsKIAl9CiAKQEAgLTE0OTAsNyArMTQ5MSw3IEBACiAJaWYgKHNrYikgewogCQlpZiAoIXRjcF9za2JfaXNfbGFzdChzaywgc2tiKSkKIAkJCW5vbmFnbGUgPSBUQ1BfTkFHTEVfUFVTSDsKLQkJaWYgKCF0Y3Bfc25kX3Rlc3QodHAsIHNrYiwgY3VyX21zcywgbm9uYWdsZSkgfHwKKwkJaWYgKCF0Y3Bfc25kX3Rlc3Qoc2ssIHNrYiwgY3VyX21zcywgbm9uYWdsZSkgfHwKIAkJICAgIHRjcF93cml0ZV94bWl0KHNrLCBub25hZ2xlKSkKIAkJCXRjcF9jaGVja19wcm9iZV90aW1lcihzaywgdHApOwogCX0KQEAgLTE1MDgsNyArMTUwOSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrLT5za19zZW5kX2hlYWQ7CiAKIAlyZXR1cm4gKHNrYiAmJgotCQl0Y3Bfc25kX3Rlc3QodHAsIHNrYiwgdGNwX2N1cnJlbnRfbXNzKHNrLCAxKSwKKwkJdGNwX3NuZF90ZXN0KHNrLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaywgMSksCiAJCQkgICAgIHRjcF9za2JfaXNfbGFzdChzaywgc2tiKSA/IFRDUF9OQUdMRV9QVVNIIDogdHAtPm5vbmFnbGUpKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdWRwLmggYi9pbmNsdWRlL25ldC91ZHAuaAppbmRleCBjNDk2ZDEwLi5hYzIyOWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC91ZHAuaAorKysgYi9pbmNsdWRlL25ldC91ZHAuaApAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOglAKCMpdWRwLmgJMS4wLjIJMDUvMDcvOTMKICAqCi0gKiBBdXRob3JzOglSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKiBBdXRob3JzOglSb3NzIEJpcm8KICAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCiAgKiBGaXhlczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaAppbmRleCA3M2U5YThjLi5lMTQyYTI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94ZnJtLmgKKysrIGIvaW5jbHVkZS9uZXQveGZybS5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfTkVUX1hGUk1fSAogI2RlZmluZSBfTkVUX1hGUk1fSAogCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC94ZnJtLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC01MTYsNiArNTE3LDE1IEBACiAJdTMyIGNoaWxkX210dV9jYWNoZWQ7CiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgeGZybV9kc3RfZGVzdHJveShzdHJ1Y3QgeGZybV9kc3QgKnhkc3QpCit7CisJZHN0X3JlbGVhc2UoeGRzdC0+cm91dGUpOworCWlmIChsaWtlbHkoeGRzdC0+dS5kc3QueGZybSkpCisJCXhmcm1fc3RhdGVfcHV0KHhkc3QtPnUuZHN0Lnhmcm0pOworfQorCitleHRlcm4gdm9pZCB4ZnJtX2RzdF9pZmRvd24oc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwogLyogRGVjYXBzdWxhdGlvbiBzdGF0ZSwgdXNlZCBieSB0aGUgaW5wdXQgdG8gc3RvcmUgZGF0YSBkdXJpbmcKICAqIGRlY2Fwc3VsYXRpb24gcHJvY2VkdXJlLCB0byBiZSB1c2VkIGxhdGVyIChkdXJpbmcgdGhlIHBvbGljeQogICogY2hlY2sKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vZWRpZC5oIGIvaW5jbHVkZS92aWRlby9lZGlkLmgKaW5kZXggYWJjMWI0OC4uYjkxM2YxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9lZGlkLmgKKysrIGIvaW5jbHVkZS92aWRlby9lZGlkLmgKQEAgLTQsOSArNCw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaWZkZWYgQ09ORklHX1BQQ19PRgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2CiBzdHJ1Y3QgZWRpZF9pbmZvIHsKQEAgLTE0LDE0ICsxMSw4IEBACiB9OwogCiBleHRlcm4gc3RydWN0IGVkaWRfaW5mbyBlZGlkX2luZm87Ci1leHRlcm4gY2hhciAqZ2V0X0VESURfZnJvbV9CSU9TKHZvaWQgKik7Ci0KICNlbmRpZiAvKiBDT05GSUdfWDg2ICovCiAKLSNpZmRlZiBDT05GSUdfUFBDX09GCi1leHRlcm4gY2hhciAqZ2V0X0VESURfZnJvbV9PRihzdHJ1Y3QgcGNpX2RldiAqcGRldik7Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9fbGludXhfdmlkZW9fZWRpZF9oX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vdGRmeC5oIGIvaW5jbHVkZS92aWRlby90ZGZ4LmgKaW5kZXggYTg5NmU0NC4uMDQyMzc2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby90ZGZ4LmgKKysrIGIvaW5jbHVkZS92aWRlby90ZGZ4LmgKQEAgLTk5LDYgKzk5LDggQEAKICNkZWZpbmUgTUlTQ0lOSVQxXzJEQkxPQ0tfRElTICAgICAgICAgICBCSVQoMTUpCiAjZGVmaW5lIERSQU1JTklUMF9TR1JBTV9OVU0gICAgICAgICAgICAgQklUKDI2KQogI2RlZmluZSBEUkFNSU5JVDBfU0dSQU1fVFlQRSAgICAgICAgICAgIEJJVCgyNykKKyNkZWZpbmUgRFJBTUlOSVQwX1NHUkFNX1RZUEVfTUFTSyAgICAgICAoQklUKDI3KXxCSVQoMjgpfEJJVCgyOSkpCisjZGVmaW5lIERSQU1JTklUMF9TR1JBTV9UWVBFX1NISUZUICAgICAgMjcKICNkZWZpbmUgRFJBTUlOSVQxX01FTV9TRFJBTSAgICAgICAgICAgICBCSVQoMzApCiAjZGVmaW5lIFZHQUlOSVQwX1ZHQV9ESVNBQkxFICAgICAgICAgICAgQklUKDApCiAjZGVmaW5lIFZHQUlOSVQwX0VYVF9USU1JTkcgICAgICAgICAgICAgQklUKDEpCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggYWJlMjY4Mi4uZDkyMGJhZSAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMTczLDcgKzE3Myw3IEBACiAKIGNvbmZpZyBBVURJVFNZU0NBTEwKIAlib29sICJFbmFibGUgc3lzdGVtLWNhbGwgYXVkaXRpbmcgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFVRElUICYmIChYODYgfHwgUFBDNjQgfHwgQVJDSF9TMzkwIHx8IElBNjQpCisJZGVwZW5kcyBvbiBBVURJVCAmJiAoWDg2IHx8IFBQQzY0IHx8IEFSQ0hfUzM5MCB8fCBJQTY0IHx8IFVNTCkKIAlkZWZhdWx0IHkgaWYgU0VDVVJJVFlfU0VMSU5VWAogCWhlbHAKIAkgIEVuYWJsZSBsb3ctb3ZlcmhlYWQgc3lzdGVtLWNhbGwgYXVkaXRpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdApAQCAtMjc1LDYgKzI3NSwyNyBAQAogCSAgIHJlcG9ydGVkLiAgS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBvbmx5IGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgd2hpbGUKIAkgICB5b3Ugd2FpdCBmb3Iga2FsbHN5bXMgdG8gYmUgZml4ZWQuCiAKKworY29uZmlnIFBSSU5USworCWRlZmF1bHQgeQorCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciBwcmludGsiIGlmIEVNQkVEREVECisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBub3JtYWwgcHJpbnRrIHN1cHBvcnQuIFJlbW92aW5nIGl0CisJICBlbGltaW5hdGVzIG1vc3Qgb2YgdGhlIG1lc3NhZ2Ugc3RyaW5ncyBmcm9tIHRoZSBrZXJuZWwgaW1hZ2UKKwkgIGFuZCBtYWtlcyB0aGUga2VybmVsIG1vcmUgb3IgbGVzcyBzaWxlbnQuIEFzIHRoaXMgbWFrZXMgaXQKKwkgIHZlcnkgZGlmZmljdWx0IHRvIGRpYWdub3NlIHN5c3RlbSBwcm9ibGVtcywgc2F5aW5nIE4gaGVyZSBpcworCSAgc3Ryb25nbHkgZGlzY291cmFnZWQuCisKK2NvbmZpZyBCVUcKKwlib29sICJCVUcoKSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWRlZmF1bHQgeQorCWhlbHAKKyAgICAgICAgICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gZWxpbWluYXRlcyBzdXBwb3J0IGZvciBCVUcgYW5kIFdBUk4sIHJlZHVjaW5nCisgICAgICAgICAgdGhlIHNpemUgb2YgeW91ciBrZXJuZWwgaW1hZ2UgYW5kIHBvdGVudGlhbGx5IHF1aWV0bHkgaWdub3JpbmcKKyAgICAgICAgICBudW1lcm91cyBmYXRhbCBjb25kaXRpb25zLiBZb3Ugc2hvdWxkIG9ubHkgY29uc2lkZXIgZGlzYWJsaW5nIHRoaXMKKyAgICAgICAgICBvcHRpb24gZm9yIGVtYmVkZGVkIHN5c3RlbXMgd2l0aCBubyBmYWNpbGl0aWVzIGZvciByZXBvcnRpbmcgZXJyb3JzLgorICAgICAgICAgIEp1c3Qgc2F5IFkuCisKIGNvbmZpZyBCQVNFX0ZVTEwKIAlkZWZhdWx0IHkKIAlib29sICJFbmFibGUgZnVsbC1zaXplZCBkYXRhIHN0cnVjdHVyZXMgZm9yIGNvcmUiIGlmIEVNQkVEREVECmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggY2IwY2QzYy4uMGFjZjI0NSAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSAidXRpbC5oIgogCkBAIC03NjcsNyArNzY4LDcgQEAKIAlsaXN0X2RlbCgmcmVjZWl2ZXItPmxpc3QpOwogCXJlY2VpdmVyLT5zdGF0ZSA9IFNUQVRFX1BFTkRJTkc7CiAJd2FrZV91cF9wcm9jZXNzKHJlY2VpdmVyLT50YXNrKTsKLQl3bWIoKTsKKwlzbXBfd21iKCk7CiAJcmVjZWl2ZXItPnN0YXRlID0gU1RBVEVfUkVBRFk7CiB9CiAKQEAgLTc4Niw3ICs3ODcsNyBAQAogCWxpc3RfZGVsKCZzZW5kZXItPmxpc3QpOwogCXNlbmRlci0+c3RhdGUgPSBTVEFURV9QRU5ESU5HOwogCXdha2VfdXBfcHJvY2VzcyhzZW5kZXItPnRhc2spOwotCXdtYigpOworCXNtcF93bWIoKTsKIAlzZW5kZXItPnN0YXRlID0gU1RBVEVfUkVBRFk7CiB9CiAKQEAgLTk3Niw4ICs5NzcsNyBAQAogCQkJICAgICBub3RpZmljYXRpb24uc2lnZXZfbm90aWZ5ICE9IFNJR0VWX1RIUkVBRCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKG5vdGlmaWNhdGlvbi5zaWdldl9ub3RpZnkgPT0gU0lHRVZfU0lHTkFMICYmCi0JCQkobm90aWZpY2F0aW9uLnNpZ2V2X3NpZ25vIDwgMCB8fAotCQkJIG5vdGlmaWNhdGlvbi5zaWdldl9zaWdubyA+IF9OU0lHKSkgeworCQkJIXZhbGlkX3NpZ25hbChub3RpZmljYXRpb24uc2lnZXZfc2lnbm8pKSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAobm90aWZpY2F0aW9uLnNpZ2V2X25vdGlmeSA9PSBTSUdFVl9USFJFQUQpIHsKZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCAwNmNkNWM5MS4uY2NlMDIyNDMgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJ1dGlsLmgiCkBAIC03NzEsNiArNzczLDE4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorYXNtbGlua2FnZSBsb25nIHN5c19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCWxvbmcgZXJyOworCisJZXJyID0gZG9fc2htYXQoc2htaWQsIHNobWFkZHIsIHNobWZsZywgJnJldCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCk7CisJcmV0dXJuIChsb25nKXJldDsKK30KKwogLyoKICAqIGRldGFjaCBhbmQga2lsbCBzZWdtZW50IGlmIG1hcmtlZCBkZXN0cm95ZWQuCiAgKiBUaGUgd29yayBpcyBkb25lIGluIHNobV9jbG9zZS4KZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCBlYjg4YjQ0Li5iMDFkMjZmIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC0yOSw3ICsyOSw3IEBACiBvYmotJChDT05GSUdfR0VORVJJQ19IQVJESVJRUykgKz0gaXJxLwogb2JqLSQoQ09ORklHX1NFQ0NPTVApICs9IHNlY2NvbXAubwogCi1pZm5lcSAoJChDT05GSUdfSUE2NCkseSkKK2lmbmVxICgkKENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVIpLHkpCiAjIEFjY29yZGluZyB0byBBbGFuIE1vZHJhIDxhbGFuQGxpbnV4Y2FyZS5jb20uYXU+LCB0aGUgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgaXMKICMgbmVlZGVkIGZvciB4ODYgb25seS4gIFdoeSB0aGlzIHVzZWQgdG8gYmUgZW5hYmxlZCBmb3IgYWxsIGFyY2hpdGVjdHVyZXMgaXMgYmV5b25kCiAjIG1lLiAgSSBzdXNwZWN0IG1vc3QgcGxhdGZvcm1zIGRvbid0IG5lZWQgdGhpcywgYnV0IHVudGlsIHdlIGtub3cgdGhhdCBmb3Igc3VyZQpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmMgYi9rZXJuZWwvYXVkaXQuYwppbmRleCAwZjg0ZGQ3Li45YzRmMWFmIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXQuYworKysgYi9rZXJuZWwvYXVkaXQuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIGF1ZGl0LmMgLS0gQXVkaXRpbmcgc3VwcG9ydCAtKi0gbGludXgtYyAtKi0KKy8qIGF1ZGl0LmMgLS0gQXVkaXRpbmcgc3VwcG9ydAogICogR2F0ZXdheSBiZXR3ZWVuIHRoZSBrZXJuZWwgKGUuZy4sIHNlbGludXgpIGFuZCB0aGUgdXNlci1zcGFjZSBhdWRpdCBkYWVtb24uCiAgKiBTeXN0ZW0tY2FsbCBzcGVjaWZpYyBmZWF0dXJlcyBoYXZlIG1vdmVkIHRvIGF1ZGl0c2MuYwogICoKQEAgLTM4LDcgKzM4LDcgQEAKICAqCSAgNikgU3VwcG9ydCBsb3ctb3ZlcmhlYWQga2VybmVsLWJhc2VkIGZpbHRlcmluZyB0byBtaW5pbWl6ZSB0aGUKICAqCSAgICAgaW5mb3JtYXRpb24gdGhhdCBtdXN0IGJlIHBhc3NlZCB0byB1c2VyLXNwYWNlLgogICoKLSAqIEV4YW1wbGUgdXNlci1zcGFjZSB1dGlsaXRpZXM6IGh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9mYWl0aC9hdWRpdC8KKyAqIEV4YW1wbGUgdXNlci1zcGFjZSB1dGlsaXRpZXM6IGh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9zZ3J1YmIvYXVkaXQvCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTE0Miw3ICsxNDIsNiBAQAogCWludAkJICAgICB0b3RhbDsKIAlpbnQJCSAgICAgdHlwZTsKIAlpbnQJCSAgICAgcGlkOwotCWludAkJICAgICBjb3VudDsgLyogVGltZXMgcmVxdWV1ZWQgKi8KIH07CiAKIHZvaWQgYXVkaXRfc2V0X3R5cGUoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsIGludCB0eXBlKQpAQCAtMjM5LDM2ICsyMzgsMzYgQEAKIAogfQogCi1zdGF0aWMgaW50IGF1ZGl0X3NldF9yYXRlX2xpbWl0KGludCBsaW1pdCkKK3N0YXRpYyBpbnQgYXVkaXRfc2V0X3JhdGVfbGltaXQoaW50IGxpbWl0LCB1aWRfdCBsb2dpbnVpZCkKIHsKIAlpbnQgb2xkCQkgPSBhdWRpdF9yYXRlX2xpbWl0OwogCWF1ZGl0X3JhdGVfbGltaXQgPSBsaW1pdDsKLQlhdWRpdF9sb2coY3VycmVudC0+YXVkaXRfY29udGV4dCwgImF1ZGl0X3JhdGVfbGltaXQ9JWQgb2xkPSVkIiwKLQkJICBhdWRpdF9yYXRlX2xpbWl0LCBvbGQpOworCWF1ZGl0X2xvZyhOVUxMLCAiYXVkaXRfcmF0ZV9saW1pdD0lZCBvbGQ9JWQgYnkgYXVpZCAldSIsCisJCQlhdWRpdF9yYXRlX2xpbWl0LCBvbGQsIGxvZ2ludWlkKTsKIAlyZXR1cm4gb2xkOwogfQogCi1zdGF0aWMgaW50IGF1ZGl0X3NldF9iYWNrbG9nX2xpbWl0KGludCBsaW1pdCkKK3N0YXRpYyBpbnQgYXVkaXRfc2V0X2JhY2tsb2dfbGltaXQoaW50IGxpbWl0LCB1aWRfdCBsb2dpbnVpZCkKIHsKIAlpbnQgb2xkCQkgPSBhdWRpdF9iYWNrbG9nX2xpbWl0OwogCWF1ZGl0X2JhY2tsb2dfbGltaXQgPSBsaW1pdDsKLQlhdWRpdF9sb2coY3VycmVudC0+YXVkaXRfY29udGV4dCwgImF1ZGl0X2JhY2tsb2dfbGltaXQ9JWQgb2xkPSVkIiwKLQkJICBhdWRpdF9iYWNrbG9nX2xpbWl0LCBvbGQpOworCWF1ZGl0X2xvZyhOVUxMLCAiYXVkaXRfYmFja2xvZ19saW1pdD0lZCBvbGQ9JWQgYnkgYXVpZCAldSIsCisJCQlhdWRpdF9iYWNrbG9nX2xpbWl0LCBvbGQsIGxvZ2ludWlkKTsKIAlyZXR1cm4gb2xkOwogfQogCi1zdGF0aWMgaW50IGF1ZGl0X3NldF9lbmFibGVkKGludCBzdGF0ZSkKK3N0YXRpYyBpbnQgYXVkaXRfc2V0X2VuYWJsZWQoaW50IHN0YXRlLCB1aWRfdCBsb2dpbnVpZCkKIHsKIAlpbnQgb2xkCQkgPSBhdWRpdF9lbmFibGVkOwogCWlmIChzdGF0ZSAhPSAwICYmIHN0YXRlICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCWF1ZGl0X2VuYWJsZWQgPSBzdGF0ZTsKLQlhdWRpdF9sb2coY3VycmVudC0+YXVkaXRfY29udGV4dCwgImF1ZGl0X2VuYWJsZWQ9JWQgb2xkPSVkIiwKLQkJICBhdWRpdF9lbmFibGVkLCBvbGQpOworCWF1ZGl0X2xvZyhOVUxMLCAiYXVkaXRfZW5hYmxlZD0lZCBvbGQ9JWQgYnkgYXVpZCAldSIsCisJCSAgYXVkaXRfZW5hYmxlZCwgb2xkLCBsb2dpbnVpZCk7CiAJcmV0dXJuIG9sZDsKIH0KIAotc3RhdGljIGludCBhdWRpdF9zZXRfZmFpbHVyZShpbnQgc3RhdGUpCitzdGF0aWMgaW50IGF1ZGl0X3NldF9mYWlsdXJlKGludCBzdGF0ZSwgdWlkX3QgbG9naW51aWQpCiB7CiAJaW50IG9sZAkJID0gYXVkaXRfZmFpbHVyZTsKIAlpZiAoc3RhdGUgIT0gQVVESVRfRkFJTF9TSUxFTlQKQEAgLTI3Niw4ICsyNzUsOCBAQAogCSAgICAmJiBzdGF0ZSAhPSBBVURJVF9GQUlMX1BBTklDKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlhdWRpdF9mYWlsdXJlID0gc3RhdGU7Ci0JYXVkaXRfbG9nKGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQsICJhdWRpdF9mYWlsdXJlPSVkIG9sZD0lZCIsCi0JCSAgYXVkaXRfZmFpbHVyZSwgb2xkKTsKKwlhdWRpdF9sb2coTlVMTCwgImF1ZGl0X2ZhaWx1cmU9JWQgb2xkPSVkIGJ5IGF1aWQgJXUiLAorCQkgIGF1ZGl0X2ZhaWx1cmUsIG9sZCwgbG9naW51aWQpOwogCXJldHVybiBvbGQ7CiB9CiAKQEAgLTM0NCw2ICszNDMsNyBAQAogCWludAkJCWVycjsKIAlzdHJ1Y3QgYXVkaXRfYnVmZmVyCSphYjsKIAl1MTYJCQltc2dfdHlwZSA9IG5saC0+bmxtc2dfdHlwZTsKKwl1aWRfdAkJCWxvZ2ludWlkOyAvKiBsb2dpbnVpZCBvZiBzZW5kZXIgKi8KIAogCWVyciA9IGF1ZGl0X25ldGxpbmtfb2soTkVUTElOS19DQihza2IpLmVmZl9jYXAsIG1zZ190eXBlKTsKIAlpZiAoZXJyKQpAQCAtMzUxLDYgKzM1MSw3IEBACiAKIAlwaWQgID0gTkVUTElOS19DUkVEUyhza2IpLT5waWQ7CiAJdWlkICA9IE5FVExJTktfQ1JFRFMoc2tiKS0+dWlkOworCWxvZ2ludWlkID0gTkVUTElOS19DQihza2IpLmxvZ2ludWlkOwogCXNlcSAgPSBubGgtPm5sbXNnX3NlcTsKIAlkYXRhID0gTkxNU0dfREFUQShubGgpOwogCkBAIC0zNzEsMzQgKzM3MiwzNiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXN0YXR1c19nZXQgICA9IChzdHJ1Y3QgYXVkaXRfc3RhdHVzICopZGF0YTsKIAkJaWYgKHN0YXR1c19nZXQtPm1hc2sgJiBBVURJVF9TVEFUVVNfRU5BQkxFRCkgewotCQkJZXJyID0gYXVkaXRfc2V0X2VuYWJsZWQoc3RhdHVzX2dldC0+ZW5hYmxlZCk7CisJCQllcnIgPSBhdWRpdF9zZXRfZW5hYmxlZChzdGF0dXNfZ2V0LT5lbmFibGVkLCBsb2dpbnVpZCk7CiAJCQlpZiAoZXJyIDwgMCkgcmV0dXJuIGVycjsKIAkJfQogCQlpZiAoc3RhdHVzX2dldC0+bWFzayAmIEFVRElUX1NUQVRVU19GQUlMVVJFKSB7Ci0JCQllcnIgPSBhdWRpdF9zZXRfZmFpbHVyZShzdGF0dXNfZ2V0LT5mYWlsdXJlKTsKKwkJCWVyciA9IGF1ZGl0X3NldF9mYWlsdXJlKHN0YXR1c19nZXQtPmZhaWx1cmUsIGxvZ2ludWlkKTsKIAkJCWlmIChlcnIgPCAwKSByZXR1cm4gZXJyOwogCQl9CiAJCWlmIChzdGF0dXNfZ2V0LT5tYXNrICYgQVVESVRfU1RBVFVTX1BJRCkgewogCQkJaW50IG9sZCAgID0gYXVkaXRfcGlkOwogCQkJYXVkaXRfcGlkID0gc3RhdHVzX2dldC0+cGlkOwotCQkJYXVkaXRfbG9nKGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQsCi0JCQkJICAiYXVkaXRfcGlkPSVkIG9sZD0lZCIsIGF1ZGl0X3BpZCwgb2xkKTsKKwkJCWF1ZGl0X2xvZyhOVUxMLCAiYXVkaXRfcGlkPSVkIG9sZD0lZCBieSBhdWlkICV1IiwKKwkJCQkgIGF1ZGl0X3BpZCwgb2xkLCBsb2dpbnVpZCk7CiAJCX0KIAkJaWYgKHN0YXR1c19nZXQtPm1hc2sgJiBBVURJVF9TVEFUVVNfUkFURV9MSU1JVCkKLQkJCWF1ZGl0X3NldF9yYXRlX2xpbWl0KHN0YXR1c19nZXQtPnJhdGVfbGltaXQpOworCQkJYXVkaXRfc2V0X3JhdGVfbGltaXQoc3RhdHVzX2dldC0+cmF0ZV9saW1pdCwgbG9naW51aWQpOwogCQlpZiAoc3RhdHVzX2dldC0+bWFzayAmIEFVRElUX1NUQVRVU19CQUNLTE9HX0xJTUlUKQotCQkJYXVkaXRfc2V0X2JhY2tsb2dfbGltaXQoc3RhdHVzX2dldC0+YmFja2xvZ19saW1pdCk7CisJCQlhdWRpdF9zZXRfYmFja2xvZ19saW1pdChzdGF0dXNfZ2V0LT5iYWNrbG9nX2xpbWl0LAorCQkJCQkJCWxvZ2ludWlkKTsKIAkJYnJlYWs7CiAJY2FzZSBBVURJVF9VU0VSOgogCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMKTsKIAkJaWYgKCFhYikKIAkJCWJyZWFrOwkvKiBhdWRpdF9wYW5pYyBoYXMgYmVlbiBjYWxsZWQgKi8KIAkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKLQkJCQkgInVzZXIgcGlkPSVkIHVpZD0lZCBsZW5ndGg9JWQgbXNnPSclLjEwMjRzJyIsCisJCQkJICJ1c2VyIHBpZD0lZCB1aWQ9JWQgbGVuZ3RoPSVkIGxvZ2ludWlkPSV1IgorCQkJCSAiIG1zZz0nJS4xMDI0cyciLAogCQkJCSBwaWQsIHVpZCwKIAkJCQkgKGludCkobmxoLT5ubG1zZ19sZW4KIAkJCQkgICAgICAgLSAoKGNoYXIgKilkYXRhIC0gKGNoYXIgKilubGgpKSwKLQkJCQkgKGNoYXIgKilkYXRhKTsKKwkJCQkgbG9naW51aWQsIChjaGFyICopZGF0YSk7CiAJCWFiLT50eXBlID0gQVVESVRfVVNFUjsKIAkJYWItPnBpZCAgPSBwaWQ7CiAJCWF1ZGl0X2xvZ19lbmQoYWIpOwpAQCAtNDExLDcgKzQxNCw3IEBACiAJY2FzZSBBVURJVF9MSVNUOgogI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKIAkJZXJyID0gYXVkaXRfcmVjZWl2ZV9maWx0ZXIobmxoLT5ubG1zZ190eXBlLCBORVRMSU5LX0NCKHNrYikucGlkLAotCQkJCQkgICB1aWQsIHNlcSwgZGF0YSk7CisJCQkJCSAgIHVpZCwgc2VxLCBkYXRhLCBsb2dpbnVpZCk7CiAjZWxzZQogCQllcnIgPSAtRU9QTk9UU1VQUDsKICNlbmRpZgpAQCAtNDI3LDcgKzQzMCw3IEBACiAvKiBHZXQgbWVzc2FnZSBmcm9tIHNrYiAoYmFzZWQgb24gcnRuZXRsaW5rX3Jjdl9za2IpLiAgRWFjaCBtZXNzYWdlIGlzCiAgKiBwcm9jZXNzZWQgYnkgYXVkaXRfcmVjZWl2ZV9tc2cuICBNYWxmb3JtZWQgc2ticyB3aXRoIHdyb25nIGxlbmd0aCBhcmUKICAqIGRpc2NhcmRlZCBzaWxlbnRseS4gICovCi1zdGF0aWMgaW50IGF1ZGl0X3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBhdWRpdF9yZWNlaXZlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludAkJZXJyOwogCXN0cnVjdCBubG1zZ2hkcgkqbmxoOwpAQCAtNDM2LDcgKzQzOSw3IEBACiAJd2hpbGUgKHNrYi0+bGVuID49IE5MTVNHX1NQQUNFKDApKSB7CiAJCW5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilza2ItPmRhdGE7CiAJCWlmIChubGgtPm5sbXNnX2xlbiA8IHNpemVvZigqbmxoKSB8fCBza2ItPmxlbiA8IG5saC0+bmxtc2dfbGVuKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm47CiAJCXJsZW4gPSBOTE1TR19BTElHTihubGgtPm5sbXNnX2xlbik7CiAJCWlmIChybGVuID4gc2tiLT5sZW4pCiAJCQlybGVuID0gc2tiLT5sZW47CkBAIC00NDYsMjMgKzQ0OSwyMCBAQAogCQkJbmV0bGlua19hY2soc2tiLCBubGgsIDApOwogCQlza2JfcHVsbChza2IsIHJsZW4pOwogCX0KLQlyZXR1cm4gMDsKIH0KIAogLyogUmVjZWl2ZSBtZXNzYWdlcyBmcm9tIG5ldGxpbmsgc29ja2V0LiAqLwogc3RhdGljIHZvaWQgYXVkaXRfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW5ndGgpCiB7CiAJc3RydWN0IHNrX2J1ZmYgICpza2I7CisJdW5zaWduZWQgaW50IHFsZW47CiAKLQlpZiAoZG93bl90cnlsb2NrKCZhdWRpdF9uZXRsaW5rX3NlbSkpCi0JCXJldHVybjsKKwlkb3duKCZhdWRpdF9uZXRsaW5rX3NlbSk7CiAKLQkJCQkvKiBGSVhNRTogdGhpcyBtdXN0IG5vdCBjYXVzZSBzdGFydmF0aW9uICovCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSkgewotCQlpZiAoYXVkaXRfcmVjZWl2ZV9za2Ioc2tiKSAmJiBza2ItPmxlbikKLQkJCXNrYl9xdWV1ZV9oZWFkKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKLQkJZWxzZQotCQkJa2ZyZWVfc2tiKHNrYik7CisJZm9yIChxbGVuID0gc2tiX3F1ZXVlX2xlbigmc2stPnNrX3JlY2VpdmVfcXVldWUpOyBxbGVuOyBxbGVuLS0pIHsKKwkJc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKwkJYXVkaXRfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJfQogCXVwKCZhdWRpdF9uZXRsaW5rX3NlbSk7CiB9CkBAIC00ODMsNyArNDgzLDcgQEAKIAlpZiAoYWItPmxlbiA9PSAwKQogCQlyZXR1cm47CiAKLQlza2IgPSBza2JfcGVlaygmYWItPnNrbGlzdCk7CisJc2tiID0gc2tiX3BlZWtfdGFpbCgmYWItPnNrbGlzdCk7CiAJaWYgKCFza2IgfHwgc2tiX3RhaWxyb29tKHNrYikgPD0gYWItPmxlbiArIGV4dHJhKSB7CiAJCXNrYiA9IGFsbG9jX3NrYigyICogYWItPmxlbiArIGV4dHJhLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFza2IpIHsKQEAgLTUyMiw5ICs1MjIsOSBAQAogCQkJcmV0dmFsID0gbmV0bGlua191bmljYXN0KGF1ZGl0X3NvY2ssIHNrYiwgYXVkaXRfcGlkLAogCQkJCQkJIE1TR19ET05UV0FJVCk7CiAJCX0KLQkJaWYgKHJldHZhbCA9PSAtRUFHQUlOICYmIGFiLT5jb3VudCA8IDUpIHsKLQkJCSsrYWItPmNvdW50OwotCQkJc2tiX3F1ZXVlX3RhaWwoJmFiLT5za2xpc3QsIHNrYik7CisJCWlmIChyZXR2YWwgPT0gLUVBR0FJTiAmJgorCQkgICAgKGF0b21pY19yZWFkKCZhdWRpdF9iYWNrbG9nKSkgPCBhdWRpdF9iYWNrbG9nX2xpbWl0KSB7CisJCQlza2JfcXVldWVfaGVhZCgmYWItPnNrbGlzdCwgc2tiKTsKIAkJCWF1ZGl0X2xvZ19lbmRfaXJxKGFiKTsKIAkJCXJldHVybiAxOwogCQl9CkBAIC01NDAsOCArNTQwLDggQEAKIAkJaWYgKCFhdWRpdF9waWQpIHsgLyogTm8gZGFlbW9uICovCiAJCQlpbnQgb2Zmc2V0ID0gYWItPm5saCA/IE5MTVNHX1NQQUNFKDApIDogMDsKIAkJCWludCBsZW4gICAgPSBza2ItPmxlbiAtIG9mZnNldDsKLQkJCXByaW50ayhLRVJOX0VSUiAiJSouKnNcbiIsCi0JCQkgICAgICAgbGVuLCBsZW4sIHNrYi0+ZGF0YSArIG9mZnNldCk7CisJCQlza2ItPmRhdGFbb2Zmc2V0ICsgbGVuXSA9ICdcMCc7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzXG4iLCBza2ItPmRhdGEgKyBvZmZzZXQpOwogCQl9CiAJCWtmcmVlX3NrYihza2IpOwogCQlhYi0+bmxoID0gTlVMTDsKQEAgLTYyMCw3ICs2MjAsNyBAQAogCXN0cnVjdCBhdWRpdF9idWZmZXIJKmFiCT0gTlVMTDsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlzdHJ1Y3QgdGltZXNwZWMJCXQ7Ci0JaW50CQkJc2VyaWFsCT0gMDsKKwl1bnNpZ25lZCBpbnQJCXNlcmlhbDsKIAogCWlmICghYXVkaXRfaW5pdGlhbGl6ZWQpCiAJCXJldHVybiBOVUxMOwpAQCAtNjYyLDE1ICs2NjIsMTYgQEAKIAlhYi0+dG90YWwgPSAwOwogCWFiLT50eXBlICA9IEFVRElUX0tFUk5FTDsKIAlhYi0+cGlkICAgPSAwOwotCWFiLT5jb3VudCA9IDA7CiAKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiAJaWYgKGFiLT5jdHgpCiAJCWF1ZGl0X2dldF9zdGFtcChhYi0+Y3R4LCAmdCwgJnNlcmlhbCk7CiAJZWxzZQogI2VuZGlmCisJewogCQl0ID0gQ1VSUkVOVF9USU1FOwotCisJCXNlcmlhbCA9IDA7CisJfQogCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJhdWRpdCglbHUuJTAzbHU6JXUpOiAiLAogCQkJIHQudHZfc2VjLCB0LnR2X25zZWMvMTAwMDAwMCwgc2VyaWFsKTsKIAlyZXR1cm4gYWI7CkBAIC03MjAsNiArNzIxLDI5IEBACiAJdmFfZW5kKGFyZ3MpOwogfQogCit2b2lkIGF1ZGl0X2xvZ19oZXgoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpPGxlbjsgaSsrKQorCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiJTAyeCIsIGJ1ZltpXSk7Cit9CisKK3ZvaWQgYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgY29uc3QgY2hhciAqc3RyaW5nKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBzdHJpbmc7CisKKwl3aGlsZSAoKnApIHsKKwkJaWYgKCpwID09ICciJyB8fCAqcCA9PSAnICcgfHwgKnAgPCAweDIwIHx8ICpwID4gMHg3ZikgeworCQkJYXVkaXRfbG9nX2hleChhYiwgc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7CisJCQlyZXR1cm47CisJCX0KKwkJcCsrOworCX0KKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiXCIlc1wiIiwgc3RyaW5nKTsKK30KKworCiAvKiBUaGlzIGlzIGEgaGVscGVyLWZ1bmN0aW9uIHRvIHByaW50IHRoZSBkX3BhdGggd2l0aG91dCB1c2luZyBhIHN0YXRpYwogICogYnVmZmVyIG9yIGFsbG9jYXRpbmcgYW5vdGhlciBidWZmZXIgaW4gYWRkaXRpb24gdG8gdGhlIG9uZSBpbgogICogYXVkaXRfYnVmZmVyLiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggNmYxOTMxMy4uMzdiM2FjOSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC0xLDQgKzEsNCBAQAotLyogYXVkaXRzYy5jIC0tIFN5c3RlbS1jYWxsIGF1ZGl0aW5nIHN1cHBvcnQgLSotIGxpbnV4LWMgLSotCisvKiBhdWRpdHNjLmMgLS0gU3lzdGVtLWNhbGwgYXVkaXRpbmcgc3VwcG9ydAogICogSGFuZGxlcyBhbGwgc3lzdGVtLWNhbGwgc3BlY2lmaWMgYXVkaXRpbmcgZmVhdHVyZXMuCiAgKgogICogQ29weXJpZ2h0IDIwMDMtMjAwNCBSZWQgSGF0IEluYy4sIER1cmhhbSwgTm9ydGggQ2Fyb2xpbmEuCkBAIC0xMjMsNyArMTIzLDcgQEAKIAlpbnQJCSAgICBtYWpvcjsgICAgICAvKiBzeXNjYWxsIG51bWJlciAqLwogCXVuc2lnbmVkIGxvbmcJICAgIGFyZ3ZbNF07ICAgIC8qIHN5c2NhbGwgYXJndW1lbnRzICovCiAJaW50CQkgICAgcmV0dXJuX3ZhbGlkOyAvKiByZXR1cm4gY29kZSBpcyB2YWxpZCAqLwotCWludAkJICAgIHJldHVybl9jb2RlOy8qIHN5c2NhbGwgcmV0dXJuIGNvZGUgKi8KKwlsb25nCQkgICAgcmV0dXJuX2NvZGU7Lyogc3lzY2FsbCByZXR1cm4gY29kZSAqLwogCWludAkJICAgIGF1ZGl0YWJsZTsgIC8qIDEgaWYgcmVjb3JkIHNob3VsZCBiZSB3cml0dGVuICovCiAJaW50CQkgICAgbmFtZV9jb3VudDsKIAlzdHJ1Y3QgYXVkaXRfbmFtZXMgIG5hbWVzW0FVRElUX05BTUVTXTsKQEAgLTEzNSw2ICsxMzUsNyBAQAogCXVpZF90CQkgICAgdWlkLCBldWlkLCBzdWlkLCBmc3VpZDsKIAlnaWRfdAkJICAgIGdpZCwgZWdpZCwgc2dpZCwgZnNnaWQ7CiAJdW5zaWduZWQgbG9uZwkgICAgcGVyc29uYWxpdHk7CisJaW50CQkgICAgYXJjaDsKIAogI2lmIEFVRElUX0RFQlVHCiAJaW50CQkgICAgcHV0X2NvdW50OwpAQCAtMjUwLDcgKzI1MSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBhdWRpdF9yZWNlaXZlX2ZpbHRlcihpbnQgdHlwZSwgaW50IHBpZCwgaW50IHVpZCwgaW50IHNlcSwgdm9pZCAqZGF0YSkKK2ludCBhdWRpdF9yZWNlaXZlX2ZpbHRlcihpbnQgdHlwZSwgaW50IHBpZCwgaW50IHVpZCwgaW50IHNlcSwgdm9pZCAqZGF0YSwKKwkJCQkJCQl1aWRfdCBsb2dpbnVpZCkKIHsKIAl1MzIJCSAgIGZsYWdzOwogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnk7CkBAIC0yODUsNiArMjg3LDcgQEAKIAkJCWVyciA9IGF1ZGl0X2FkZF9ydWxlKGVudHJ5LCAmYXVkaXRfZW50bGlzdCk7CiAJCWlmICghZXJyICYmIChmbGFncyAmIEFVRElUX0FUX0VYSVQpKQogCQkJZXJyID0gYXVkaXRfYWRkX3J1bGUoZW50cnksICZhdWRpdF9leHRsaXN0KTsKKwkJYXVkaXRfbG9nKE5VTEwsICJhdWlkICV1IGFkZGVkIGFuIGF1ZGl0IHJ1bGVcbiIsIGxvZ2ludWlkKTsKIAkJYnJlYWs7CiAJY2FzZSBBVURJVF9ERUw6CiAJCWZsYWdzID0oKHN0cnVjdCBhdWRpdF9ydWxlICopZGF0YSktPmZsYWdzOwpAQCAtMjk0LDYgKzI5Nyw3IEBACiAJCQllcnIgPSBhdWRpdF9kZWxfcnVsZShkYXRhLCAmYXVkaXRfZW50bGlzdCk7CiAJCWlmICghZXJyICYmIChmbGFncyAmIEFVRElUX0FUX0VYSVQpKQogCQkJZXJyID0gYXVkaXRfZGVsX3J1bGUoZGF0YSwgJmF1ZGl0X2V4dGxpc3QpOworCQlhdWRpdF9sb2coTlVMTCwgImF1aWQgJXUgcmVtb3ZlZCBhbiBhdWRpdCBydWxlXG4iLCBsb2dpbnVpZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzQ4LDYgKzM1MiwxMCBAQAogCQljYXNlIEFVRElUX1BFUlM6CiAJCQlyZXN1bHQgPSAodHNrLT5wZXJzb25hbGl0eSA9PSB2YWx1ZSk7CiAJCQlicmVhazsKKwkJY2FzZSBBVURJVF9BUkNIOgorCQkJaWYgKGN0eCkgCisJCQkJcmVzdWx0ID0gKGN0eC0+YXJjaCA9PSB2YWx1ZSk7CisJCQlicmVhazsKIAogCQljYXNlIEFVRElUX0VYSVQ6CiAJCQlpZiAoY3R4ICYmIGN0eC0+cmV0dXJuX3ZhbGlkKQpAQCAtMzU1LDcgKzM2Myw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBBVURJVF9TVUNDRVNTOgogCQkJaWYgKGN0eCAmJiBjdHgtPnJldHVybl92YWxpZCkKLQkJCQlyZXN1bHQgPSAoY3R4LT5yZXR1cm5fY29kZSA+PSAwKTsKKwkJCQlyZXN1bHQgPSAoY3R4LT5yZXR1cm5fdmFsaWQgPT0gQVVESVRTQ19TVUNDRVNTKTsKIAkJCWJyZWFrOwogCQljYXNlIEFVRElUX0RFVk1BSk9SOgogCQkJaWYgKGN0eCkgewpAQCAtNjQ4LDggKzY1NiwxMSBAQAogCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJzeXNjYWxsPSVkIiwgY29udGV4dC0+bWFqb3IpOwogCWlmIChjb250ZXh0LT5wZXJzb25hbGl0eSAhPSBQRVJfTElOVVgpCiAJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgcGVyPSVseCIsIGNvbnRleHQtPnBlcnNvbmFsaXR5KTsKKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGFyY2g9JXgiLCBjb250ZXh0LT5hcmNoKTsKIAlpZiAoY29udGV4dC0+cmV0dXJuX3ZhbGlkKQotCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGV4aXQ9JWQiLCBjb250ZXh0LT5yZXR1cm5fY29kZSk7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgc3VjY2Vzcz0lcyBleGl0PSVsZCIsIAorCQkJCSAoY29udGV4dC0+cmV0dXJuX3ZhbGlkPT1BVURJVFNDX1NVQ0NFU1MpPyJ5ZXMiOiJubyIsCisJCQkJIGNvbnRleHQtPnJldHVybl9jb2RlKTsKIAlhdWRpdF9sb2dfZm9ybWF0KGFiLAogCQkgICIgYTA9JWx4IGExPSVseCBhMj0lbHggYTM9JWx4IGl0ZW1zPSVkIgogCQkgICIgcGlkPSVkIGxvZ2ludWlkPSVkIHVpZD0lZCBnaWQ9JWQiCkBAIC02OTYsOSArNzA3LDEwIEBACiAJCWlmICghYWIpCiAJCQljb250aW51ZTsgLyogYXVkaXRfcGFuaWMgaGFzIGJlZW4gY2FsbGVkICovCiAJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJpdGVtPSVkIiwgaSk7Ci0JCWlmIChjb250ZXh0LT5uYW1lc1tpXS5uYW1lKQotCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBuYW1lPSVzIiwKLQkJCQkJIGNvbnRleHQtPm5hbWVzW2ldLm5hbWUpOworCQlpZiAoY29udGV4dC0+bmFtZXNbaV0ubmFtZSkgeworCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBuYW1lPSIpOworCQkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgY29udGV4dC0+bmFtZXNbaV0ubmFtZSk7CisJCX0KIAkJaWYgKGNvbnRleHQtPm5hbWVzW2ldLmlubyAhPSAodW5zaWduZWQgbG9uZyktMSkKIAkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgaW5vZGU9JWx1IGRldj0lMDJ4OiUwMnggbW9kZT0lI28iCiAJCQkJCSAgICAgIiB1aWQ9JWQgZ2lkPSVkIHJkZXY9JTAyeDolMDJ4IiwKQEAgLTc3Miw3ICs3ODQsNyBAQAogICogdGhlbiB0aGUgcmVjb3JkIHdpbGwgYmUgd3JpdHRlbiBhdCBzeXNjYWxsIGV4aXQgdGltZSAob3RoZXJ3aXNlLCBpdAogICogd2lsbCBvbmx5IGJlIHdyaXR0ZW4gaWYgYW5vdGhlciBwYXJ0IG9mIHRoZSBrZXJuZWwgcmVxdWVzdHMgdGhhdCBpdAogICogYmUgd3JpdHRlbikuICovCi12b2lkIGF1ZGl0X3N5c2NhbGxfZW50cnkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBtYWpvciwKK3ZvaWQgYXVkaXRfc3lzY2FsbF9lbnRyeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGFyY2gsIGludCBtYWpvciwKIAkJCSB1bnNpZ25lZCBsb25nIGExLCB1bnNpZ25lZCBsb25nIGEyLAogCQkJIHVuc2lnbmVkIGxvbmcgYTMsIHVuc2lnbmVkIGxvbmcgYTQpCiB7CkBAIC04MjYsNiArODM4LDcgQEAKIAlpZiAoIWF1ZGl0X2VuYWJsZWQpCiAJCXJldHVybjsKIAorCWNvbnRleHQtPmFyY2gJICAgID0gYXJjaDsKIAljb250ZXh0LT5tYWpvciAgICAgID0gbWFqb3I7CiAJY29udGV4dC0+YXJndlswXSAgICA9IGExOwogCWNvbnRleHQtPmFyZ3ZbMV0gICAgPSBhMjsKQEAgLTg0OSwxMyArODYyLDEzIEBACiAgKiBmaWx0ZXJpbmcsIG9yIGJlY2F1c2Ugc29tZSBvdGhlciBwYXJ0IG9mIHRoZSBrZXJuZWwgd3JpdGUgYW4gYXVkaXQKICAqIG1lc3NhZ2UpLCB0aGVuIHdyaXRlIG91dCB0aGUgc3lzY2FsbCBpbmZvcm1hdGlvbi4gIEluIGNhbGwgY2FzZXMsCiAgKiBmcmVlIHRoZSBuYW1lcyBzdG9yZWQgZnJvbSBnZXRuYW1lKCkuICovCi12b2lkIGF1ZGl0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHJldHVybl9jb2RlKQordm9pZCBhdWRpdF9zeXNjYWxsX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCB2YWxpZCwgbG9uZyByZXR1cm5fY29kZSkKIHsKIAlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dDsKIAogCWdldF90YXNrX3N0cnVjdCh0c2spOwogCXRhc2tfbG9jayh0c2spOwotCWNvbnRleHQgPSBhdWRpdF9nZXRfY29udGV4dCh0c2ssIDEsIHJldHVybl9jb2RlKTsKKwljb250ZXh0ID0gYXVkaXRfZ2V0X2NvbnRleHQodHNrLCB2YWxpZCwgcmV0dXJuX2NvZGUpOwogCXRhc2tfdW5sb2NrKHRzayk7CiAKIAkvKiBOb3QgaGF2aW5nIGEgY29udGV4dCBoZXJlIGlzIG9rLCBzaW5jZSB0aGUgcGFyZW50IG1heSBoYXZlCkBAIC04NjgsNiArODgxLDcgQEAKIAogCWNvbnRleHQtPmluX3N5c2NhbGwgPSAwOwogCWNvbnRleHQtPmF1ZGl0YWJsZSAgPSAwOworCiAJaWYgKGNvbnRleHQtPnByZXZpb3VzKSB7CiAJCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpuZXdfY29udGV4dCA9IGNvbnRleHQtPnByZXZpb3VzOwogCQljb250ZXh0LT5wcmV2aW91cyAgPSBOVUxMOwpAQCAtOTgxLDcgKzk5NSw3IEBACiB9CiAKIHZvaWQgYXVkaXRfZ2V0X3N0YW1wKHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsCi0JCSAgICAgc3RydWN0IHRpbWVzcGVjICp0LCBpbnQgKnNlcmlhbCkKKwkJICAgICBzdHJ1Y3QgdGltZXNwZWMgKnQsIHVuc2lnbmVkIGludCAqc2VyaWFsKQogewogCWlmIChjdHgpIHsKIAkJdC0+dHZfc2VjICA9IGN0eC0+Y3RpbWUudHZfc2VjOwpAQCAtOTk2LDIwICsxMDEwLDIxIEBACiAKIGV4dGVybiBpbnQgYXVkaXRfc2V0X3R5cGUoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsIGludCB0eXBlKTsKIAotaW50IGF1ZGl0X3NldF9sb2dpbnVpZChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4LCB1aWRfdCBsb2dpbnVpZCkKK2ludCBhdWRpdF9zZXRfbG9naW51aWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1aWRfdCBsb2dpbnVpZCkKIHsKLQlpZiAoY3R4KSB7CisJaWYgKHRhc2stPmF1ZGl0X2NvbnRleHQpIHsKIAkJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWI7CiAKIAkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoTlVMTCk7CiAJCWlmIChhYikgewogCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImxvZ2luIHBpZD0lZCB1aWQ9JXUgIgogCQkJCSJvbGQgbG9naW51aWQ9JXUgbmV3IGxvZ2ludWlkPSV1IiwKLQkJCQljdHgtPnBpZCwgY3R4LT51aWQsIGN0eC0+bG9naW51aWQsIGxvZ2ludWlkKTsKKwkJCQl0YXNrLT5waWQsIHRhc2stPnVpZCwgCisJCQkJdGFzay0+YXVkaXRfY29udGV4dC0+bG9naW51aWQsIGxvZ2ludWlkKTsKIAkJCWF1ZGl0X3NldF90eXBlKGFiLCBBVURJVF9MT0dJTik7CiAJCQlhdWRpdF9sb2dfZW5kKGFiKTsKIAkJfQotCQljdHgtPmxvZ2ludWlkID0gbG9naW51aWQ7CisJCXRhc2stPmF1ZGl0X2NvbnRleHQtPmxvZ2ludWlkID0gbG9naW51aWQ7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggMzlkMzU5MzUuLmVkYWE1MGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdXNldC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KQEAgLTM4LDYgKzM5LDggQEAKIAogaW50IGdldHJ1c2FnZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqKTsKIAorc3RhdGljIHZvaWQgZXhpdF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0c2spOworCiBzdGF0aWMgdm9pZCBfX3VuaGFzaF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlucl90aHJlYWRzLS07CkBAIC0yMDksNyArMjEyLDcgQEAKIH0KIAogLyoqCi0gKiByZXBhcmVudF90b19pbml0KCkgLSBSZXBhcmVudCB0aGUgY2FsbGluZyBrZXJuZWwgdGhyZWFkIHRvIHRoZSBpbml0IHRhc2suCisgKiByZXBhcmVudF90b19pbml0IC0gUmVwYXJlbnQgdGhlIGNhbGxpbmcga2VybmVsIHRocmVhZCB0byB0aGUgaW5pdCB0YXNrLgogICoKICAqIElmIGEga2VybmVsIHRocmVhZCBpcyBsYXVuY2hlZCBhcyBhIHJlc3VsdCBvZiBhIHN5c3RlbSBjYWxsLCBvciBpZgogICogaXQgZXZlciBleGl0cywgaXQgc2hvdWxkIGdlbmVyYWxseSByZXBhcmVudCBpdHNlbGYgdG8gaW5pdCBzbyB0aGF0CkBAIC0yNzcsNyArMjgwLDcgQEAKICAqLwogaW50IGFsbG93X3NpZ25hbChpbnQgc2lnKQogewotCWlmIChzaWcgPCAxIHx8IHNpZyA+IF9OU0lHKQorCWlmICghdmFsaWRfc2lnbmFsKHNpZykgfHwgc2lnIDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKQEAgLTI5OCw3ICszMDEsNyBAQAogCiBpbnQgZGlzYWxsb3dfc2lnbmFsKGludCBzaWcpCiB7Ci0JaWYgKHNpZyA8IDEgfHwgc2lnID4gX05TSUcpCisJaWYgKCF2YWxpZF9zaWduYWwoc2lnKSB8fCBzaWcgPCAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwpAQCAtNDczLDcgKzQ3Niw3IEBACiAgKiBUdXJuIHVzIGludG8gYSBsYXp5IFRMQiBwcm9jZXNzIGlmIHdlCiAgKiBhcmVuJ3QgYWxyZWFkeS4uCiAgKi8KLXZvaWQgZXhpdF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0c2spCitzdGF0aWMgdm9pZCBleGl0X21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzaykKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+bW07CiAKQEAgLTUxNyw4ICs1MjAsNiBAQAogCSAqLwogCUJVR19PTihwID09IHJlYXBlciB8fCByZWFwZXItPmV4aXRfc3RhdGUgPj0gRVhJVF9aT01CSUUpOwogCXAtPnJlYWxfcGFyZW50ID0gcmVhcGVyOwotCWlmIChwLT5wYXJlbnQgPT0gcC0+cmVhbF9wYXJlbnQpCi0JCUJVRygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfdGhyZWFkKHRhc2tfdCAqcCwgdGFza190ICpmYXRoZXIsIGludCB0cmFjZWQpCkBAIC04NDUsNiArODQ2LDggQEAKIAlmb3IgKDs7KSA7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGRvX2V4aXQpOworCiBOT1JFVF9UWVBFIHZvaWQgY29tcGxldGVfYW5kX2V4aXQoc3RydWN0IGNvbXBsZXRpb24gKmNvbXAsIGxvbmcgY29kZSkKIHsKIAlpZiAoY29tcCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC5jIGIva2VybmVsL2Z1dGV4LmMKaW5kZXggN2I1NGE2Ny4uYzcxMzBmOCAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjZGVmaW5lIEZVVEVYX0hBU0hCSVRTIChDT05GSUdfQkFTRV9TTUFMTCA/IDQgOiA4KQogCkBAIC02NTQsNyArNjU1LDcgQEAKIAlpbnQgcmV0LCBlcnI7CiAKIAlyZXQgPSAtRUlOVkFMOwotCWlmIChzaWduYWwgPCAwIHx8IHNpZ25hbCA+IF9OU0lHKQorCWlmICghdmFsaWRfc2lnbmFsKHNpZ25hbCkpCiAJCWdvdG8gb3V0OwogCiAJcmV0ID0gZ2V0X3VudXNlZF9mZCgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2l0aW1lci5jIGIva2VybmVsL2l0aW1lci5jCmluZGV4IGU5YTQwZTkuLjFkYzk4OGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pdGltZXIuYworKysgYi9rZXJuZWwvaXRpbWVyLmMKQEAgLTEyMyw3ICsxMjMsMTEgQEAKIAkJcmV0dXJuOwogCWlmIChpbnRlcnZhbCA+ICh1bnNpZ25lZCBsb25nKSBMT05HX01BWCkKIAkJaW50ZXJ2YWwgPSBMT05HX01BWDsKLQlwLT5zaWduYWwtPnJlYWxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBpbnRlcnZhbDsKKwkvKiB0aGUgIisgMSIgYmVsb3cgbWFrZXMgc3VyZSB0aGF0IHRoZSB0aW1lciBkb2Vzbid0IGdvIG9mZiBiZWZvcmUKKwkgKiB0aGUgaW50ZXJ2YWwgcmVxdWVzdGVkLiBUaGlzIGNvdWxkIGhhcHBlbiBpZgorCSAqIHRpbWUgcmVxdWVzdGVkICUgKHVzZWNzIHBlciBqaWZmeSkgaXMgbW9yZSB0aGFuIHRoZSB1c2VjcyBsZWZ0CisJICogaW4gdGhlIGN1cnJlbnQgamlmZnkgKi8KKwlwLT5zaWduYWwtPnJlYWxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBpbnRlcnZhbCArIDE7CiAJYWRkX3RpbWVyKCZwLT5zaWduYWwtPnJlYWxfdGltZXIpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwva2FsbHN5bXMuYyBiL2tlcm5lbC9rYWxsc3ltcy5jCmluZGV4IDE2MjdmOGQuLjEzYmNlYzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rYWxsc3ltcy5jCisrKyBiL2tlcm5lbC9rYWxsc3ltcy5jCkBAIC00Niw2ICs0NiwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBpc19rZXJuZWxfZXh0cmF0ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAoYWRkciA+PSAodW5zaWduZWQgbG9uZylfc2V4dHJhdGV4dAorCSAgICAmJiBhZGRyIDw9ICh1bnNpZ25lZCBsb25nKV9lZXh0cmF0ZXh0KQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgaXNfa2VybmVsX3RleHQodW5zaWduZWQgbG9uZyBhZGRyKQogewogCWlmIChhZGRyID49ICh1bnNpZ25lZCBsb25nKV9zdGV4dCAmJiBhZGRyIDw9ICh1bnNpZ25lZCBsb25nKV9ldGV4dCkKQEAgLTE2OSw4ICsxNzcsOSBAQAogCW5hbWVidWZbMF0gPSAwOwogCiAJaWYgKChhbGxfdmFyICYmIGlzX2tlcm5lbChhZGRyKSkgfHwKLQkgICAgKCFhbGxfdmFyICYmIChpc19rZXJuZWxfdGV4dChhZGRyKSB8fCBpc19rZXJuZWxfaW5pdHRleHQoYWRkcikpKSkgewotCQl1bnNpZ25lZCBsb25nIHN5bWJvbF9lbmQ9MDsKKwkgICAgKCFhbGxfdmFyICYmIChpc19rZXJuZWxfdGV4dChhZGRyKSB8fCBpc19rZXJuZWxfaW5pdHRleHQoYWRkcikgfHwKKwkJCQlpc19rZXJuZWxfZXh0cmF0ZXh0KGFkZHIpKSkpIHsKKwkJdW5zaWduZWQgbG9uZyBzeW1ib2xfZW5kID0gMDsKIAogCQkvKiBkbyBhIGJpbmFyeSBzZWFyY2ggb24gdGhlIHNvcnRlZCBrYWxsc3ltc19hZGRyZXNzZXMgYXJyYXkgKi8KIAkJbG93ID0gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rcHJvYmVzLmMgYi9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDFkNWRkMTMuLjAzNzE0MmI3IDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogdW5zaWduZWQgaW50IGtwcm9iZV9jcHUgPSBOUl9DUFVTOwogc3RhdGljIERFRklORV9TUElOTE9DSyhrcHJvYmVfbG9jayk7CitzdGF0aWMgc3RydWN0IGtwcm9iZSAqY3Vycl9rcHJvYmU7CiAKIC8qIExvY2tzIGtwcm9iZTogaXJxcyBtdXN0IGJlIGRpc2FibGVkICovCiB2b2lkIGxvY2tfa3Byb2Jlcyh2b2lkKQpAQCAtNzMsMjIgKzc0LDEzOSBAQAogCXJldHVybiBOVUxMOwogfQogCisvKgorICogQWdncmVnYXRlIGhhbmRsZXJzIGZvciBtdWx0aXBsZSBrcHJvYmVzIHN1cHBvcnQgLSB0aGVzZSBoYW5kbGVycworICogdGFrZSBjYXJlIG9mIGludm9raW5nIHRoZSBpbmRpdmlkdWFsIGtwcm9iZSBoYW5kbGVycyBvbiBwLT5saXN0CisgKi8KK2ludCBhZ2dyX3ByZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrcHJvYmUgKmtwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShrcCwgJnAtPmxpc3QsIGxpc3QpIHsKKwkJaWYgKGtwLT5wcmVfaGFuZGxlcikgeworCQkJY3Vycl9rcHJvYmUgPSBrcDsKKwkJCWtwLT5wcmVfaGFuZGxlcihrcCwgcmVncyk7CisJCQljdXJyX2twcm9iZSA9IE5VTEw7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYWdncl9wb3N0X2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqa3A7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtwLCAmcC0+bGlzdCwgbGlzdCkgeworCQlpZiAoa3AtPnBvc3RfaGFuZGxlcikgeworCQkJY3Vycl9rcHJvYmUgPSBrcDsKKwkJCWtwLT5wb3N0X2hhbmRsZXIoa3AsIHJlZ3MsIGZsYWdzKTsKKwkJCWN1cnJfa3Byb2JlID0gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK2ludCBhZ2dyX2ZhdWx0X2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCit7CisJLyoKKwkgKiBpZiB3ZSBmYXVsdGVkICJkdXJpbmciIHRoZSBleGVjdXRpb24gb2YgYSB1c2VyIHNwZWNpZmllZAorCSAqIHByb2JlIGhhbmRsZXIsIGludm9rZSBqdXN0IHRoYXQgcHJvYmUncyBmYXVsdCBoYW5kbGVyCisJICovCisJaWYgKGN1cnJfa3Byb2JlICYmIGN1cnJfa3Byb2JlLT5mYXVsdF9oYW5kbGVyKSB7CisJCWlmIChjdXJyX2twcm9iZS0+ZmF1bHRfaGFuZGxlcihjdXJyX2twcm9iZSwgcmVncywgdHJhcG5yKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZpbGwgaW4gdGhlIHJlcXVpcmVkIGZpZWxkcyBvZiB0aGUgIm1hbmFnZXIga3Byb2JlIi4gUmVwbGFjZSB0aGUKKyAqIGVhcmxpZXIga3Byb2JlIGluIHRoZSBobGlzdCB3aXRoIHRoZSBtYW5hZ2VyIGtwcm9iZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX2FnZ3Jfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKmFwLCBzdHJ1Y3Qga3Byb2JlICpwKQoreworCWFwLT5hZGRyID0gcC0+YWRkcjsKKwlhcC0+b3Bjb2RlID0gcC0+b3Bjb2RlOworCW1lbWNweSgmYXAtPmFpbnNuLCAmcC0+YWluc24sIHNpemVvZihzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuKSk7CisKKwlhcC0+cHJlX2hhbmRsZXIgPSBhZ2dyX3ByZV9oYW5kbGVyOworCWFwLT5wb3N0X2hhbmRsZXIgPSBhZ2dyX3Bvc3RfaGFuZGxlcjsKKwlhcC0+ZmF1bHRfaGFuZGxlciA9IGFnZ3JfZmF1bHRfaGFuZGxlcjsKKworCUlOSVRfTElTVF9IRUFEKCZhcC0+bGlzdCk7CisJbGlzdF9hZGQoJnAtPmxpc3QsICZhcC0+bGlzdCk7CisKKwlJTklUX0hMSVNUX05PREUoJmFwLT5obGlzdCk7CisJaGxpc3RfZGVsKCZwLT5obGlzdCk7CisJaGxpc3RfYWRkX2hlYWQoJmFwLT5obGlzdCwKKwkJJmtwcm9iZV90YWJsZVtoYXNoX3B0cihhcC0+YWRkciwgS1BST0JFX0hBU0hfQklUUyldKTsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIHNlY29uZCBvciBzdWJzZXF1ZW50IGtwcm9iZSBhdCB0aGUgYWRkcmVzcyAtIGhhbmRsZQorICogdGhlIGludHJpY2FjaWVzCisgKiBUT0RPOiBNb3ZlIGtjYWxsb2Mgb3V0c2lkZSB0aGUgc3BpbmxvY2sKKyAqLworc3RhdGljIGludCByZWdpc3Rlcl9hZ2dyX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpvbGRfcCwgc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qga3Byb2JlICphcDsKKworCWlmIChvbGRfcC0+YnJlYWtfaGFuZGxlciB8fCBwLT5icmVha19oYW5kbGVyKSB7CisJCXJldCA9IC1FRVhJU1Q7CS8qIGtwcm9iZSBhbmQganByb2JlIGNhbid0ICh5ZXQpIGNvZXhpc3QgKi8KKwl9IGVsc2UgaWYgKG9sZF9wLT5wcmVfaGFuZGxlciA9PSBhZ2dyX3ByZV9oYW5kbGVyKSB7CisJCWxpc3RfYWRkKCZwLT5saXN0LCAmb2xkX3AtPmxpc3QpOworCX0gZWxzZSB7CisJCWFwID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGtwcm9iZSksIEdGUF9BVE9NSUMpOworCQlpZiAoIWFwKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWFkZF9hZ2dyX2twcm9iZShhcCwgb2xkX3ApOworCQlsaXN0X2FkZCgmcC0+bGlzdCwgJmFwLT5saXN0KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoga3Byb2JlIHJlbW92YWwgaG91c2Uta2VlcGluZyByb3V0aW5lcyAqLworc3RhdGljIGlubGluZSB2b2lkIGNsZWFudXBfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJKnAtPmFkZHIgPSBwLT5vcGNvZGU7CisJaGxpc3RfZGVsKCZwLT5obGlzdCk7CisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKSBwLT5hZGRyLAorCQkgICAodW5zaWduZWQgbG9uZykgcC0+YWRkciArIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrcHJvYmVfbG9jaywgZmxhZ3MpOworCWFyY2hfcmVtb3ZlX2twcm9iZShwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFudXBfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqb2xkX3AsCisJCXN0cnVjdCBrcHJvYmUgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJbGlzdF9kZWwoJnAtPmxpc3QpOworCWlmIChsaXN0X2VtcHR5KCZvbGRfcC0+bGlzdCkpIHsKKwkJY2xlYW51cF9rcHJvYmUob2xkX3AsIGZsYWdzKTsKKwkJa2ZyZWUob2xkX3ApOworCX0gZWxzZQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrcHJvYmVfbG9jaywgZmxhZ3MpOworfQorCiBpbnQgcmVnaXN0ZXJfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJc3RydWN0IGtwcm9iZSAqb2xkX3A7CiAKIAlpZiAoKHJldCA9IGFyY2hfcHJlcGFyZV9rcHJvYmUocCkpICE9IDApIHsKIAkJZ290byBybV9rcHJvYmU7CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZrcHJvYmVfbG9jaywgZmxhZ3MpOwotCUlOSVRfSExJU1RfTk9ERSgmcC0+aGxpc3QpOwotCWlmIChnZXRfa3Byb2JlKHAtPmFkZHIpKSB7Ci0JCXJldCA9IC1FRVhJU1Q7CisJb2xkX3AgPSBnZXRfa3Byb2JlKHAtPmFkZHIpOworCWlmIChvbGRfcCkgeworCQlyZXQgPSByZWdpc3Rlcl9hZ2dyX2twcm9iZShvbGRfcCwgcCk7CiAJCWdvdG8gb3V0OwogCX0KLQlhcmNoX2NvcHlfa3Byb2JlKHApOwogCisJYXJjaF9jb3B5X2twcm9iZShwKTsKKwlJTklUX0hMSVNUX05PREUoJnAtPmhsaXN0KTsKIAlobGlzdF9hZGRfaGVhZCgmcC0+aGxpc3QsCiAJCSAgICAgICAma3Byb2JlX3RhYmxlW2hhc2hfcHRyKHAtPmFkZHIsIEtQUk9CRV9IQVNIX0JJVFMpXSk7CiAKQEAgLTEwNywxMyArMjI1LDE3IEBACiB2b2lkIHVucmVnaXN0ZXJfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlhcmNoX3JlbW92ZV9rcHJvYmUocCk7CisJc3RydWN0IGtwcm9iZSAqb2xkX3A7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgma3Byb2JlX2xvY2ssIGZsYWdzKTsKLQkqcC0+YWRkciA9IHAtPm9wY29kZTsKLQlobGlzdF9kZWwoJnAtPmhsaXN0KTsKLQlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIsCi0JCQkgICAodW5zaWduZWQgbG9uZykgcC0+YWRkciArIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrcHJvYmVfbG9jaywgZmxhZ3MpOworCW9sZF9wID0gZ2V0X2twcm9iZShwLT5hZGRyKTsKKwlpZiAob2xkX3ApIHsKKwkJaWYgKG9sZF9wLT5wcmVfaGFuZGxlciA9PSBhZ2dyX3ByZV9oYW5kbGVyKQorCQkJY2xlYW51cF9hZ2dyX2twcm9iZShvbGRfcCwgcCwgZmxhZ3MpOworCQllbHNlCisJCQljbGVhbnVwX2twcm9iZShwLCBmbGFncyk7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtwcm9iZV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3Byb2JlX2V4Y2VwdGlvbnNfbmIgPSB7CmRpZmYgLS1naXQgYS9rZXJuZWwva3RocmVhZC5jIGIva2VybmVsL2t0aHJlYWQuYwppbmRleCBlMzc3ZTIyLi5mNTBmMTc0IDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCiAJLyogTXVzdCBpbml0IGNvbXBsZXRpb24gKmJlZm9yZSogdGhyZWFkIHNlZXMga3RocmVhZF9zdG9wX2luZm8uayAqLwogCWluaXRfY29tcGxldGlvbigma3RocmVhZF9zdG9wX2luZm8uZG9uZSk7Ci0Jd21iKCk7CisJc21wX3dtYigpOwogCiAJLyogTm93IHNldCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkgdG8gdHJ1ZSwgYW5kIHdha2UgaXQgdXAuICovCiAJa3RocmVhZF9zdG9wX2luZm8uayA9IGs7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggMmRiZmEwNy4uNTczNGFiMCAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtMTgwMSw3ICsxODAxLDcgQEAKIAkJLyogSW5pdCByb3V0aW5lIGZhaWxlZDogYWJvcnQuICBUcnkgdG8gcHJvdGVjdCB1cyBmcm9tCiAgICAgICAgICAgICAgICAgICAgYnVnZ3kgcmVmY291bnRlcnMuICovCiAJCW1vZC0+c3RhdGUgPSBNT0RVTEVfU1RBVEVfR09JTkc7Ci0JCXN5bmNocm9uaXplX2tlcm5lbCgpOworCQlzeW5jaHJvbml6ZV9zY2hlZCgpOwogCQlpZiAobW9kLT51bnNhZmUpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtb2R1bGUgaXMgbm93IHN0dWNrIVxuIiwKIAkJCSAgICAgICBtb2QtPm5hbWUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCAwZmEzZjNhLi4wODFmNzQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtMTAyLDkgKzEwMiw5IEBACiAjaWZkZWYgX19zcGFyY19fCiAJewogCQlleHRlcm4gaW50IHN0b3BfYV9lbmFibGVkOwotCQkvKiBNYWtlIHN1cmUgdGhlIHVzZXIgY2FuIGFjdHVhbGx5IHByZXNzIEwxLUEgKi8KKwkJLyogTWFrZSBzdXJlIHRoZSB1c2VyIGNhbiBhY3R1YWxseSBwcmVzcyBTdG9wLUEgKEwxLUEpICovCiAJCXN0b3BfYV9lbmFibGVkID0gMTsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIlByZXNzIEwxLUEgdG8gcmV0dXJuIHRvIHRoZSBib290IHByb21cbiIpOworCQlwcmludGsoS0VSTl9FTUVSRyAiUHJlc3MgU3RvcC1BIChMMS1BKSB0byByZXR1cm4gdG8gdGhlIGJvb3QgcHJvbVxuIik7CiAJfQogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9TMzkwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3c3VzcC5jIGIva2VybmVsL3Bvd2VyL3N3c3VzcC5jCmluZGV4IGFlNWJlYmMuLjkwYjNiNjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zd3N1c3AuYworKysgYi9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKQEAgLTEwOTksNyArMTA5OSw3IEBACiAJcmV0dXJuIHBibGlzdDsKIH0KIAotLyoqCisvKgogICoJVXNpbmcgYmlvIHRvIHJlYWQgZnJvbSBzd2FwLgogICoJVGhpcyBjb2RlIHJlcXVpcmVzIGEgYml0IG1vcmUgd29yayB0aGFuIGp1c3QgdXNpbmcgYnVmZmVyIGhlYWRzCiAgKglidXQsIGl0IGlzIHRoZSByZWNvbW1lbmRlZCB3YXkgZm9yIDIuNS8yLjYuCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggMTQ5ODY4OS4uMjkwYTA3YyAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtODUsMTAgKzg1LDYgQEAKICAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhsb2didWZfbG9jayk7CiAKLXN0YXRpYyBjaGFyIF9fbG9nX2J1ZltfX0xPR19CVUZfTEVOXTsKLXN0YXRpYyBjaGFyICpsb2dfYnVmID0gX19sb2dfYnVmOwotc3RhdGljIGludCBsb2dfYnVmX2xlbiA9IF9fTE9HX0JVRl9MRU47Ci0KICNkZWZpbmUgTE9HX0JVRl9NQVNLCShsb2dfYnVmX2xlbi0xKQogI2RlZmluZSBMT0dfQlVGKGlkeCkgKGxvZ19idWZbKGlkeCkgJiBMT0dfQlVGX01BU0tdKQogCkBAIC05OSw3ICs5NSw2IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb2dfc3RhcnQ7CS8qIEluZGV4IGludG8gbG9nX2J1ZjogbmV4dCBjaGFyIHRvIGJlIHJlYWQgYnkgc3lzbG9nKCkgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbl9zdGFydDsJLyogSW5kZXggaW50byBsb2dfYnVmOiBuZXh0IGNoYXIgdG8gYmUgc2VudCB0byBjb25zb2xlcyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9nX2VuZDsJLyogSW5kZXggaW50byBsb2dfYnVmOiBtb3N0LXJlY2VudGx5LXdyaXR0ZW4tY2hhciArIDEgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvZ2dlZF9jaGFyczsgLyogTnVtYmVyIG9mIGNoYXJzIHByb2R1Y2VkIHNpbmNlIGxhc3QgcmVhZCtjbGVhciBvcGVyYXRpb24gKi8KIAogLyoKICAqCUFycmF5IG9mIGNvbnNvbGVzIGJ1aWx0IGZyb20gY29tbWFuZCBsaW5lIG9wdGlvbnMgKGNvbnNvbGU9KQpAQCAtMTIwLDYgKzExNSwxMyBAQAogLyogRmxhZzogY29uc29sZSBjb2RlIG1heSBjYWxsIHNjaGVkdWxlKCkgKi8KIHN0YXRpYyBpbnQgY29uc29sZV9tYXlfc2NoZWR1bGU7CiAKKyNpZmRlZiBDT05GSUdfUFJJTlRLCisKK3N0YXRpYyBjaGFyIF9fbG9nX2J1ZltfX0xPR19CVUZfTEVOXTsKK3N0YXRpYyBjaGFyICpsb2dfYnVmID0gX19sb2dfYnVmOworc3RhdGljIGludCBsb2dfYnVmX2xlbiA9IF9fTE9HX0JVRl9MRU47CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb2dnZWRfY2hhcnM7IC8qIE51bWJlciBvZiBjaGFycyBwcm9kdWNlZCBzaW5jZSBsYXN0IHJlYWQrY2xlYXIgb3BlcmF0aW9uICovCisKIC8qCiAgKglTZXR1cCBhIGxpc3Qgb2YgY29uc29sZXMuIENhbGxlZCBmcm9tIGluaXQvbWFpbi5jCiAgKi8KQEAgLTUzNSw2ICs1MzcsNyBAQAogICogdGhlbiBjaGFuZ2VzIGNvbnNvbGVfbG9nbGV2ZWwgbWF5IGJyZWFrLiBUaGlzIGlzIGJlY2F1c2UgY29uc29sZV9sb2dsZXZlbAogICogaXMgaW5zcGVjdGVkIHdoZW4gdGhlIGFjdHVhbCBwcmludGluZyBvY2N1cnMuCiAgKi8KKwogYXNtbGlua2FnZSBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKQEAgLTY1NSw2ICs2NTgsMTggQEAKIEVYUE9SVF9TWU1CT0wocHJpbnRrKTsKIEVYUE9SVF9TWU1CT0wodnByaW50ayk7CiAKKyNlbHNlCisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc3lzbG9nKGludCB0eXBlLCBjaGFyIF9fdXNlciAqIGJ1ZiwgaW50IGxlbikKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IGRvX3N5c2xvZyhpbnQgdHlwZSwgY2hhciBfX3VzZXIgKiBidWYsIGludCBsZW4pIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyB2b2lkIGNhbGxfY29uc29sZV9kcml2ZXJzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKSB7fQorCisjZW5kaWYKKwogLyoqCiAgKiBhY3F1aXJlX2NvbnNvbGVfc2VtIC0gbG9jayB0aGUgY29uc29sZSBzeXN0ZW0gZm9yIGV4Y2x1c2l2ZSB1c2UuCiAgKgpAQCAtOTMxLDcgKzk0Niw3IEBACiAJcmV0dXJuIHJlczsKIH0KIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9jb25zb2xlKTsKLQkKKwogLyoqCiAgKiB0dHlfd3JpdGVfbWVzc2FnZSAtIHdyaXRlIGEgbWVzc2FnZSB0byBhIGNlcnRhaW4gdHR5LCBub3QganVzdCB0aGUgY29uc29sZS4KICAqCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJvZmlsZS5jIGIva2VybmVsL3Byb2ZpbGUuYwppbmRleCBhMzhmYTcwLi4wMjIxYTUwIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJvZmlsZS5jCisrKyBiL2tlcm5lbC9wcm9maWxlLmMKQEAgLTE4NCw3ICsxODQsNyBAQAogCVdBUk5fT04oaG9vayAhPSB0aW1lcl9ob29rKTsKIAl0aW1lcl9ob29rID0gTlVMTDsKIAkvKiBtYWtlIHN1cmUgYWxsIENQVXMgc2VlIHRoZSBOVUxMIGhvb2sgKi8KLQlzeW5jaHJvbml6ZV9rZXJuZWwoKTsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOyAgLyogQWxsb3cgb25nb2luZyBpbnRlcnJ1cHRzIHRvIGNvbXBsZXRlLiAqLwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl90aW1lcl9ob29rKTsKQEAgLTUyMiw3ICs1MjIsNyBAQAogCXJldHVybiAwOwogb3V0X2NsZWFudXA6CiAJcHJvZl9vbiA9IDA7Ci0JbWIoKTsKKwlzbXBfbWIoKTsKIAlvbl9lYWNoX2NwdShwcm9maWxlX25vcCwgTlVMTCwgMCwgMSk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7CmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggODhiMzA2Yy4uOGRjYjhmNiAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTEzNSw3ICsxMzYsNyBAQAogIAkgICAgKGN1cnJlbnQtPmdpZCAhPSB0YXNrLT5zZ2lkKSB8fAogIAkgICAgKGN1cnJlbnQtPmdpZCAhPSB0YXNrLT5naWQpKSAmJiAhY2FwYWJsZShDQVBfU1lTX1BUUkFDRSkpCiAJCWdvdG8gYmFkOwotCXJtYigpOworCXNtcF9ybWIoKTsKIAlpZiAoIXRhc2stPm1tLT5kdW1wYWJsZSAmJiAhY2FwYWJsZShDQVBfU1lTX1BUUkFDRSkpCiAJCWdvdG8gYmFkOwogCS8qIHRoZSBzYW1lIHByb2Nlc3MgY2Fubm90IGJlIGF0dGFjaGVkIG1hbnkgdGltZXMgKi8KQEAgLTE2Niw3ICsxNjcsNyBAQAogCiBpbnQgcHRyYWNlX2RldGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBpbnQgZGF0YSkKIHsKLQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJcmV0dXJuCS1FSU87CiAKIAkvKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgaGFyZHdhcmUgZGlzYWJsZSAuLiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXBkYXRlLmMgYi9rZXJuZWwvcmN1cGRhdGUuYwppbmRleCBkMDBlZGVkLi5mNDM2OTkzIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cGRhdGUuYworKysgYi9rZXJuZWwvcmN1cGRhdGUuYwpAQCAtNDQ0LDE1ICs0NDQsMTggQEAKIH0KIAogLyoqCi0gKiBzeW5jaHJvbml6ZV9rZXJuZWwgLSB3YWl0IHVudGlsIGEgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgorICogc3luY2hyb25pemVfcmN1IC0gd2FpdCB1bnRpbCBhIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4KICAqCiAgKiBDb250cm9sIHdpbGwgcmV0dXJuIHRvIHRoZSBjYWxsZXIgc29tZSB0aW1lIGFmdGVyIGEgZnVsbCBncmFjZQogICogcGVyaW9kIGhhcyBlbGFwc2VkLCBpbiBvdGhlciB3b3JkcyBhZnRlciBhbGwgY3VycmVudGx5IGV4ZWN1dGluZyBSQ1UKICAqIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKICAqIHNlY3Rpb25zIGFyZSBkZWxpbWl0ZWQgYnkgcmN1X3JlYWRfbG9jaygpIGFuZCByY3VfcmVhZF91bmxvY2soKSwKICAqIGFuZCBtYXkgYmUgbmVzdGVkLgorICoKKyAqIElmIHlvdXIgcmVhZC1zaWRlIGNvZGUgaXMgbm90IHByb3RlY3RlZCBieSByY3VfcmVhZF9sb2NrKCksIGRvIC1ub3QtCisgKiB1c2Ugc3luY2hyb25pemVfcmN1KCkuCiAgKi8KLXZvaWQgc3luY2hyb25pemVfa2VybmVsKHZvaWQpCit2b2lkIHN5bmNocm9uaXplX3JjdSh2b2lkKQogewogCXN0cnVjdCByY3Vfc3luY2hyb25pemUgcmN1OwogCkBAIC00NjQsNyArNDY3LDE2IEBACiAJd2FpdF9mb3JfY29tcGxldGlvbigmcmN1LmNvbXBsZXRpb24pOwogfQogCisvKgorICogRGVwcmVjYXRlZCwgdXNlIHN5bmNocm9uaXplX3JjdSgpIG9yIHN5bmNocm9uaXplX3NjaGVkKCkgaW5zdGVhZC4KKyAqLwordm9pZCBzeW5jaHJvbml6ZV9rZXJuZWwodm9pZCkKK3sKKwlzeW5jaHJvbml6ZV9yY3UoKTsKK30KKwogbW9kdWxlX3BhcmFtKG1heGJhdGNoLCBpbnQsIDApOwotRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpOwotRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3VfYmgpOwotRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfa2VybmVsKTsKK0VYUE9SVF9TWU1CT0woY2FsbF9yY3UpOyAgLyogV0FSTklORzogR1BMLW9ubHkgaW4gQXByaWwgMjAwNi4gKi8KK0VYUE9SVF9TWU1CT0woY2FsbF9yY3VfYmgpOyAgLyogV0FSTklORzogR1BMLW9ubHkgaW4gQXByaWwgMjAwNi4gKi8KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdSk7CitFWFBPUlRfU1lNQk9MKHN5bmNocm9uaXplX2tlcm5lbCk7ICAvKiBXQVJOSU5HOiBHUEwtb25seSBpbiBBcHJpbCAyMDA2LiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCA5YmI3NDg5Li4wZGMzMTU4IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMjkwNiw2ICsyOTA2LDcgQEAKICAqIEBxOiB0aGUgd2FpdHF1ZXVlCiAgKiBAbW9kZTogd2hpY2ggdGhyZWFkcwogICogQG5yX2V4Y2x1c2l2ZTogaG93IG1hbnkgd2FrZS1vbmUgb3Igd2FrZS1tYW55IHRocmVhZHMgdG8gd2FrZSB1cAorICogQGtleTogaXMgZGlyZWN0bHkgcGFzc2VkIHRvIHRoZSB3YWtldXAgZnVuY3Rpb24KICAqLwogdm9pZCBmYXN0Y2FsbCBfX3dha2VfdXAod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHVuc2lnbmVkIGludCBtb2RlLAogCQkJCWludCBucl9leGNsdXNpdmUsIHZvaWQgKmtleSkKQEAgLTI5MjgsNyArMjkyOSw3IEBACiB9CiAKIC8qKgotICogX193YWtlX3VwIC0gc3luYy0gd2FrZSB1cCB0aHJlYWRzIGJsb2NrZWQgb24gYSB3YWl0cXVldWUuCisgKiBfX3dha2VfdXBfc3luYyAtIHdha2UgdXAgdGhyZWFkcyBibG9ja2VkIG9uIGEgd2FpdHF1ZXVlLgogICogQHE6IHRoZSB3YWl0cXVldWUKICAqIEBtb2RlOiB3aGljaCB0aHJlYWRzCiAgKiBAbnJfZXhjbHVzaXZlOiBob3cgbWFueSB3YWtlLW9uZSBvciB3YWtlLW1hbnkgdGhyZWFkcyB0byB3YWtlIHVwCkBAIC0zMjIzLDYgKzMyMjQsMTkgQEAKIAogRVhQT1JUX1NZTUJPTChzZXRfdXNlcl9uaWNlKTsKIAorLyoKKyAqIGNhbl9uaWNlIC0gY2hlY2sgaWYgYSB0YXNrIGNhbiByZWR1Y2UgaXRzIG5pY2UgdmFsdWUKKyAqIEBwOiB0YXNrCisgKiBAbmljZTogbmljZSB2YWx1ZQorICovCitpbnQgY2FuX25pY2UoY29uc3QgdGFza190ICpwLCBjb25zdCBpbnQgbmljZSkKK3sKKwkvKiBjb252ZXJ0IG5pY2UgdmFsdWUgWzE5LC0yMF0gdG8gcmxpbWl0IHN0eWxlIHZhbHVlIFswLDM5XSAqLworCWludCBuaWNlX3JsaW0gPSAxOSAtIG5pY2U7CisJcmV0dXJuIChuaWNlX3JsaW0gPD0gcC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OSUNFXS5ybGltX2N1ciB8fAorCQljYXBhYmxlKENBUF9TWVNfTklDRSkpOworfQorCiAjaWZkZWYgX19BUkNIX1dBTlRfU1lTX05JQ0UKIAogLyoKQEAgLTMyNDIsMTIgKzMyNTYsOCBAQAogCSAqIFdlIGRvbid0IGhhdmUgdG8gd29ycnkuIENvbmNlcHR1YWxseSBvbmUgY2FsbCBvY2N1cnMgZmlyc3QKIAkgKiBhbmQgd2UgaGF2ZSBhIHNpbmdsZSB3aW5uZXIuCiAJICovCi0JaWYgKGluY3JlbWVudCA8IDApIHsKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfTklDRSkpCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlpZiAoaW5jcmVtZW50IDwgLTQwKQotCQkJaW5jcmVtZW50ID0gLTQwOwotCX0KKwlpZiAoaW5jcmVtZW50IDwgLTQwKQorCQlpbmNyZW1lbnQgPSAtNDA7CiAJaWYgKGluY3JlbWVudCA+IDQwKQogCQlpbmNyZW1lbnQgPSA0MDsKIApAQCAtMzI1Nyw2ICszMjY3LDkgQEAKIAlpZiAobmljZSA+IDE5KQogCQluaWNlID0gMTk7CiAKKwlpZiAoaW5jcmVtZW50IDwgMCAmJiAhY2FuX25pY2UoY3VycmVudCwgbmljZSkpCisJCXJldHVybiAtRVBFUk07CisKIAlyZXR2YWwgPSBzZWN1cml0eV90YXNrX3NldG5pY2UoY3VycmVudCwgbmljZSk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTMzNzIsNiArMzM4NSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKChwb2xpY3kgPT0gU0NIRURfRklGTyB8fCBwb2xpY3kgPT0gU0NIRURfUlIpICYmCisJICAgIHBhcmFtLT5zY2hlZF9wcmlvcml0eSA+IHAtPnNpZ25hbC0+cmxpbVtSTElNSVRfUlRQUklPXS5ybGltX2N1ciAmJgogCSAgICAhY2FwYWJsZShDQVBfU1lTX05JQ0UpKQogCQlyZXR1cm4gLUVQRVJNOwogCWlmICgoY3VycmVudC0+ZXVpZCAhPSBwLT5ldWlkKSAmJiAoY3VycmVudC0+ZXVpZCAhPSBwLT51aWQpICYmCmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZTY1NjdkNy4uOGYzZGViYyAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CkBAIC02NDYsNyArNjQ3LDcgQEAKIAkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICp0KQogewogCWludCBlcnJvciA9IC1FSU5WQUw7Ci0JaWYgKHNpZyA8IDAgfHwgc2lnID4gX05TSUcpCisJaWYgKCF2YWxpZF9zaWduYWwoc2lnKSkKIAkJcmV0dXJuIGVycm9yOwogCWVycm9yID0gLUVQRVJNOwogCWlmICgoIWluZm8gfHwgKCh1bnNpZ25lZCBsb25nKWluZm8gIT0gMSAmJgpAQCAtMTI0NSw3ICsxMjQ2LDcgQEAKIAkgKiBNYWtlIHN1cmUgbGVnYWN5IGtlcm5lbCB1c2VycyBkb24ndCBzZW5kIGluIGJhZCB2YWx1ZXMKIAkgKiAobm9ybWFsIHBhdGhzIGNoZWNrIHRoaXMgaW4gY2hlY2tfa2lsbF9wZXJtaXNzaW9uKS4KIAkgKi8KLQlpZiAoc2lnIDwgMCB8fCBzaWcgPiBfTlNJRykKKwlpZiAoIXZhbGlkX3NpZ25hbChzaWcpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCkBAIC0xNTIwLDcgKzE1MjEsNyBAQAogCQlpZiAocHNpZy0+YWN0aW9uW1NJR0NITEQtMV0uc2Euc2FfaGFuZGxlciA9PSBTSUdfSUdOKQogCQkJc2lnID0gMDsKIAl9Ci0JaWYgKHNpZyA+IDAgJiYgc2lnIDw9IF9OU0lHKQorCWlmICh2YWxpZF9zaWduYWwoc2lnKSAmJiBzaWcgPiAwKQogCQlfX2dyb3VwX3NlbmRfc2lnX2luZm8oc2lnLCAmaW5mbywgdHNrLT5wYXJlbnQpOwogCV9fd2FrZV91cF9wYXJlbnQodHNrLCB0c2stPnBhcmVudCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHNpZy0+c2lnbG9jaywgZmxhZ3MpOwpAQCAtMjM2NCw3ICsyMzY1LDcgQEAKIHsKIAlzdHJ1Y3Qga19zaWdhY3Rpb24gKms7CiAKLQlpZiAoc2lnIDwgMSB8fCBzaWcgPiBfTlNJRyB8fCAoYWN0ICYmIHNpZ19rZXJuZWxfb25seShzaWcpKSkKKwlpZiAoIXZhbGlkX3NpZ25hbChzaWcpIHx8IHNpZyA8IDEgfHwgKGFjdCAmJiBzaWdfa2VybmVsX29ubHkoc2lnKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJayA9ICZjdXJyZW50LT5zaWdoYW5kLT5hY3Rpb25bc2lnLTFdOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N0b3BfbWFjaGluZS5jIGIva2VybmVsL3N0b3BfbWFjaGluZS5jCmluZGV4IGMzOWVkNzAuLjYxMTZiMjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zdG9wX21hY2hpbmUuYworKysgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KChpbnQpKGxvbmcpY3B1KSk7CiAKIAkvKiBBY2s6IHdlIGFyZSBhbGl2ZSAqLwotCW1iKCk7IC8qIFRoZW9yZXRpY2FsbHkgdGhlIGFjayA9IDAgbWlnaHQgbm90IGJlIG9uIHRoaXMgQ1BVIHlldC4gKi8KKwlzbXBfbWIoKTsgLyogVGhlb3JldGljYWxseSB0aGUgYWNrID0gMCBtaWdodCBub3QgYmUgb24gdGhpcyBDUFUgeWV0LiAqLwogCWF0b21pY19pbmMoJnN0b3BtYWNoaW5lX3RocmVhZF9hY2spOwogCiAJLyogU2ltcGxlIHN0YXRlIG1hY2hpbmUgKi8KQEAgLTQzLDE0ICs0MywxNCBAQAogCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJCWlycXNfZGlzYWJsZWQgPSAxOwogCQkJLyogQWNrOiBpcnFzIGRpc2FibGVkLiAqLwotCQkJbWIoKTsgLyogTXVzdCByZWFkIHN0YXRlIGZpcnN0LiAqLworCQkJc21wX21iKCk7IC8qIE11c3QgcmVhZCBzdGF0ZSBmaXJzdC4gKi8KIAkJCWF0b21pY19pbmMoJnN0b3BtYWNoaW5lX3RocmVhZF9hY2spOwogCQl9IGVsc2UgaWYgKHN0b3BtYWNoaW5lX3N0YXRlID09IFNUT1BNQUNISU5FX1BSRVBBUkUKIAkJCSAgICYmICFwcmVwYXJlZCkgewogCQkJLyogRXZlcnlvbmUgaXMgaW4gcGxhY2UsIGhvbGQgQ1BVLiAqLwogCQkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCQlwcmVwYXJlZCA9IDE7Ci0JCQltYigpOyAvKiBNdXN0IHJlYWQgc3RhdGUgZmlyc3QuICovCisJCQlzbXBfbWIoKTsgLyogTXVzdCByZWFkIHN0YXRlIGZpcnN0LiAqLwogCQkJYXRvbWljX2luYygmc3RvcG1hY2hpbmVfdGhyZWFkX2Fjayk7CiAJCX0KIAkJLyogWWllbGQgaW4gZmlyc3Qgc3RhZ2U6IG1pZ3JhdGlvbiB0aHJlYWRzIG5lZWQgdG8KQEAgLTYyLDcgKzYyLDcgQEAKIAl9CiAKIAkvKiBBY2s6IHdlIGFyZSBleGl0aW5nLiAqLwotCW1iKCk7IC8qIE11c3QgcmVhZCBzdGF0ZSBmaXJzdC4gKi8KKwlzbXBfbWIoKTsgLyogTXVzdCByZWFkIHN0YXRlIGZpcnN0LiAqLwogCWF0b21pY19pbmMoJnN0b3BtYWNoaW5lX3RocmVhZF9hY2spOwogCiAJaWYgKGlycXNfZGlzYWJsZWQpCkBAIC03Nyw3ICs3Nyw3IEBACiBzdGF0aWMgdm9pZCBzdG9wbWFjaGluZV9zZXRfc3RhdGUoZW51bSBzdG9wbWFjaGluZV9zdGF0ZSBzdGF0ZSkKIHsKIAlhdG9taWNfc2V0KCZzdG9wbWFjaGluZV90aHJlYWRfYWNrLCAwKTsKLQl3bWIoKTsKKwlzbXBfd21iKCk7CiAJc3RvcG1hY2hpbmVfc3RhdGUgPSBzdGF0ZTsKIAl3aGlsZSAoYXRvbWljX3JlYWQoJnN0b3BtYWNoaW5lX3RocmVhZF9hY2spICE9IHN0b3BtYWNoaW5lX251bV90aHJlYWRzKQogCQljcHVfcmVsYXgoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCA0NjJkNzhkLi5mMDA2NjMyIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGNvb2tpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgpAQCAtMjI3LDcgKzIyOCw3IEBACiAJCWVycm9yID0gLUVQRVJNOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKG5pY2V2YWwgPCB0YXNrX25pY2UocCkgJiYgIWNhcGFibGUoQ0FQX1NZU19OSUNFKSkgeworCWlmIChuaWNldmFsIDwgdGFza19uaWNlKHApICYmICFjYW5fbmljZShwLCBuaWNldmFsKSkgewogCQllcnJvciA9IC1FQUNDRVM7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTUyNSw3ICs1MjYsNyBAQAogCWlmIChuZXdfZWdpZCAhPSBvbGRfZWdpZCkKIAl7CiAJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZSA9IDA7Ci0JCXdtYigpOworCQlzbXBfd21iKCk7CiAJfQogCWlmIChyZ2lkICE9IChnaWRfdCkgLTEgfHwKIAkgICAgKGVnaWQgIT0gKGdpZF90KSAtMSAmJiBlZ2lkICE9IG9sZF9yZ2lkKSkKQEAgLTU1Niw3ICs1NTcsNyBAQAogCQlpZihvbGRfZWdpZCAhPSBnaWQpCiAJCXsKIAkJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZT0wOwotCQkJd21iKCk7CisJCQlzbXBfd21iKCk7CiAJCX0KIAkJY3VycmVudC0+Z2lkID0gY3VycmVudC0+ZWdpZCA9IGN1cnJlbnQtPnNnaWQgPSBjdXJyZW50LT5mc2dpZCA9IGdpZDsKIAl9CkBAIC01NjUsNyArNTY2LDcgQEAKIAkJaWYob2xkX2VnaWQgIT0gZ2lkKQogCQl7CiAJCQljdXJyZW50LT5tbS0+ZHVtcGFibGU9MDsKLQkJCXdtYigpOworCQkJc21wX3dtYigpOwogCQl9CiAJCWN1cnJlbnQtPmVnaWQgPSBjdXJyZW50LT5mc2dpZCA9IGdpZDsKIAl9CkBAIC01OTYsNyArNTk3LDcgQEAKIAlpZihkdW1wY2xlYXIpCiAJewogCQljdXJyZW50LT5tbS0+ZHVtcGFibGUgPSAwOwotCQl3bWIoKTsKKwkJc21wX3dtYigpOwogCX0KIAljdXJyZW50LT51aWQgPSBuZXdfcnVpZDsKIAlyZXR1cm4gMDsKQEAgLTY1Myw3ICs2NTQsNyBAQAogCWlmIChuZXdfZXVpZCAhPSBvbGRfZXVpZCkKIAl7CiAJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZT0wOwotCQl3bWIoKTsKKwkJc21wX3dtYigpOwogCX0KIAljdXJyZW50LT5mc3VpZCA9IGN1cnJlbnQtPmV1aWQgPSBuZXdfZXVpZDsKIAlpZiAocnVpZCAhPSAodWlkX3QpIC0xIHx8CkBAIC03MDMsNyArNzA0LDcgQEAKIAlpZiAob2xkX2V1aWQgIT0gdWlkKQogCXsKIAkJY3VycmVudC0+bW0tPmR1bXBhYmxlID0gMDsKLQkJd21iKCk7CisJCXNtcF93bWIoKTsKIAl9CiAJY3VycmVudC0+ZnN1aWQgPSBjdXJyZW50LT5ldWlkID0gdWlkOwogCWN1cnJlbnQtPnN1aWQgPSBuZXdfc3VpZDsKQEAgLTc0OCw3ICs3NDksNyBAQAogCQlpZiAoZXVpZCAhPSBjdXJyZW50LT5ldWlkKQogCQl7CiAJCQljdXJyZW50LT5tbS0+ZHVtcGFibGUgPSAwOwotCQkJd21iKCk7CisJCQlzbXBfd21iKCk7CiAJCX0KIAkJY3VycmVudC0+ZXVpZCA9IGV1aWQ7CiAJfQpAQCAtNzk4LDcgKzc5OSw3IEBACiAJCWlmIChlZ2lkICE9IGN1cnJlbnQtPmVnaWQpCiAJCXsKIAkJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZSA9IDA7Ci0JCQl3bWIoKTsKKwkJCXNtcF93bWIoKTsKIAkJfQogCQljdXJyZW50LT5lZ2lkID0gZWdpZDsKIAl9CkBAIC04NDUsNyArODQ2LDcgQEAKIAkJaWYgKHVpZCAhPSBvbGRfZnN1aWQpCiAJCXsKIAkJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZSA9IDA7Ci0JCQl3bWIoKTsKKwkJCXNtcF93bWIoKTsKIAkJfQogCQljdXJyZW50LT5mc3VpZCA9IHVpZDsKIAl9CkBAIC04NzUsNyArODc2LDcgQEAKIAkJaWYgKGdpZCAhPSBvbGRfZnNnaWQpCiAJCXsKIAkJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZSA9IDA7Ci0JCQl3bWIoKTsKKwkJCXNtcF93bWIoKTsKIAkJfQogCQljdXJyZW50LT5mc2dpZCA9IGdpZDsKIAkJa2V5X2ZzZ2lkX2NoYW5nZWQoY3VycmVudCk7CkBAIC0xMTk0LDcgKzExOTUsNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBhIHNpbXBsZSBzaGVsbC1tZXR6bmVyIHNvcnQgKi8KKy8qIGEgc2ltcGxlIFNoZWxsIHNvcnQgKi8KIHN0YXRpYyB2b2lkIGdyb3Vwc19zb3J0KHN0cnVjdCBncm91cF9pbmZvICpncm91cF9pbmZvKQogewogCWludCBiYXNlLCBtYXgsIHN0cmlkZTsKQEAgLTE2MzcsNyArMTYzOCw3IEBACiAJc3dpdGNoIChvcHRpb24pIHsKIAkJY2FzZSBQUl9TRVRfUERFQVRIU0lHOgogCQkJc2lnID0gYXJnMjsKLQkJCWlmIChzaWcgPCAwIHx8IHNpZyA+IF9OU0lHKSB7CisJCQlpZiAoIXZhbGlkX3NpZ25hbChzaWcpKSB7CiAJCQkJZXJyb3IgPSAtRUlOVkFMOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c19uaS5jIGIva2VybmVsL3N5c19uaS5jCmluZGV4IDE4MDJhMzEuLjBkZGE3MGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNfbmkuYworKysgYi9rZXJuZWwvc3lzX25pLmMKQEAgLTUyLDYgKzUyLDcgQEAKIGNvbmRfc3lzY2FsbChzeXNfbXNncmN2KTsKIGNvbmRfc3lzY2FsbChzeXNfbXNnY3RsKTsKIGNvbmRfc3lzY2FsbChzeXNfc2htZ2V0KTsKK2NvbmRfc3lzY2FsbChzeXNfc2htYXQpOwogY29uZF9zeXNjYWxsKHN5c19zaG1kdCk7CiBjb25kX3N5c2NhbGwoc3lzX3NobWN0bCk7CiBjb25kX3N5c2NhbGwoc3lzX21xX29wZW4pOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDc5ZGJkOTMuLjcwMWQxMmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTE5OTEsNiArMTk5MSw4IEBACiAgKiBAZmlscDogdGhlIGZpbGUgc3RydWN0dXJlCiAgKiBAYnVmZmVyOiB0aGUgdXNlciBidWZmZXIKICAqIEBsZW5wOiB0aGUgc2l6ZSBvZiB0aGUgdXNlciBidWZmZXIKKyAqIEBwcG9zOiBmaWxlIHBvc2l0aW9uCisgKiBAcHBvczogdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGZpbGUKICAqCiAgKiBSZWFkcy93cml0ZXMgdXAgdG8gdGFibGUtPm1heGxlbi9zaXplb2YodW5zaWduZWQgaW50KSBpbnRlZ2VyCiAgKiB2YWx1ZXMgZnJvbS90byB0aGUgdXNlciBidWZmZXIsIHRyZWF0ZWQgYXMgYW4gQVNDSUkgc3RyaW5nLiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lLmMgYi9rZXJuZWwvdGltZS5jCmluZGV4IDk2ZmQwZjQuLmQ0MzM1YzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lLmMKKysrIGIva2VybmVsL3RpbWUuYwpAQCAtNTE2LDE0ICs1MTYsNiBAQAogCiAJd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOwogCXsKLQkJLyoKLQkJICogVGhpcyBpcyByZXZvbHRpbmcuIFdlIG5lZWQgdG8gc2V0ICJ4dGltZSIgY29ycmVjdGx5LiBIb3dldmVyLCB0aGUgdmFsdWUKLQkJICogaW4gdGhpcyBsb2NhdGlvbiBpcyB0aGUgdmFsdWUgYXQgdGhlIG1vc3QgcmVjZW50IHVwZGF0ZSBvZiB3YWxsIHRpbWUuCi0JCSAqIERpc2NvdmVyIHdoYXQgY29ycmVjdGlvbiBnZXR0aW1lb2ZkYXkgd291bGQgaGF2ZSBkb25lLCBhbmQgdGhlbiB1bmRvCi0JCSAqIGl0IQotCQkgKi8KLQkJbnNlYyAtPSB0aW1lX2ludGVycG9sYXRvcl9nZXRfb2Zmc2V0KCk7Ci0KIAkJd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKIAkJd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCBlY2IzZDY3Li4yMDdhYTRmMCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTEwMDcsNyArMTAwNyw3IEBACiAJCSAqIE1ha2Ugc3VyZSB3ZSByZWFkIHRoZSBwaWQgYmVmb3JlIHJlLXJlYWRpbmcgdGhlCiAJCSAqIHBhcmVudCBwb2ludGVyOgogCQkgKi8KLQkJcm1iKCk7CisJCXNtcF9ybWIoKTsKIAkJcGFyZW50ID0gbWUtPmdyb3VwX2xlYWRlci0+cmVhbF9wYXJlbnQ7CiAJCWlmIChvbGQgIT0gcGFyZW50KQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDQyNmEwY2YuLmFjMjM4NDcgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0xMDgsNiArMTA4LDcgQEAKIAogY29uZmlnIERFQlVHX0JVR1ZFUkJPU0UKIAlib29sICJWZXJib3NlIEJVRygpIHJlcG9ydGluZyAoYWRkcyA3MEspIiBpZiBERUJVR19LRVJORUwgJiYgRU1CRURERUQKKwlkZXBlbmRzIG9uIEJVRwogCWRlcGVuZHMgb24gQVJNIHx8IEFSTTI2IHx8IE0zMlIgfHwgTTY4SyB8fCBTUEFSQzMyIHx8IFNQQVJDNjQgfHwgKFg4NiAmJiAhWDg2XzY0KSB8fCBGUlYKIAlkZWZhdWx0ICFFTUJFRERFRAogCWhlbHAKZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0LmMgYi9saWIva29iamVjdC5jCmluZGV4IDVkZjg0NDEuLjk0MDQ4ODIgMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0LmMKKysrIGIvbGliL2tvYmplY3QuYwpAQCAtMjE2LDEzICsyMTYsMTIgQEAKIC8qKgogICoJa29iamVjdF9zZXRfbmFtZSAtIFNldCB0aGUgbmFtZSBvZiBhbiBvYmplY3QKICAqCUBrb2JqOglvYmplY3QuCi0gKglAbmFtZToJbmFtZS4gCisgKglAZm10Oglmb3JtYXQgc3RyaW5nIHVzZWQgdG8gYnVpbGQgdGhlIG5hbWUKICAqCiAgKglJZiBzdHJsZW4obmFtZSkgPj0gS09CSl9OQU1FX0xFTiwgdGhlbiB1c2UgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQKICAqCXN0cmluZyB0aGF0IEBrb2JqLT5rX25hbWUgcG9pbnRzIHRvLiBPdGhlcndpc2UsIHVzZSB0aGUgc3RhdGljIAogICoJQGtvYmotPm5hbWUgYXJyYXkuCiAgKi8KLQogaW50IGtvYmplY3Rfc2V0X25hbWUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBjb25zdCBjaGFyICogZm10LCAuLi4pCiB7CiAJaW50IGVycm9yID0gMDsKZGlmZiAtLWdpdCBhL2xpYi9yd3NlbS1zcGlubG9jay5jIGIvbGliL3J3c2VtLXNwaW5sb2NrLmMKaW5kZXggMjFmMGRiMi4uNDBmZmRlOSAxMDA2NDQKLS0tIGEvbGliL3J3c2VtLXNwaW5sb2NrLmMKKysrIGIvbGliL3J3c2VtLXNwaW5sb2NrLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkJbGlzdF9kZWwoJndhaXRlci0+bGlzdCk7CiAJCXRzayA9IHdhaXRlci0+dGFzazsKIAkJLyogRG9uJ3QgdG91Y2ggd2FpdGVyIGFmdGVyIC0+dGFzayBoYXMgYmVlbiBOVUxMZWQgKi8KLQkJbWIoKTsKKwkJc21wX21iKCk7CiAJCXdhaXRlci0+dGFzayA9IE5VTEw7CiAJCXdha2VfdXBfcHJvY2Vzcyh0c2spOwogCQlwdXRfdGFza19zdHJ1Y3QodHNrKTsKQEAgLTkxLDcgKzkxLDcgQEAKIAogCQlsaXN0X2RlbCgmd2FpdGVyLT5saXN0KTsKIAkJdHNrID0gd2FpdGVyLT50YXNrOwotCQltYigpOworCQlzbXBfbWIoKTsKIAkJd2FpdGVyLT50YXNrID0gTlVMTDsKIAkJd2FrZV91cF9wcm9jZXNzKHRzayk7CiAJCXB1dF90YXNrX3N0cnVjdCh0c2spOwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJbGlzdF9kZWwoJndhaXRlci0+bGlzdCk7CiAKIAl0c2sgPSB3YWl0ZXItPnRhc2s7Ci0JbWIoKTsKKwlzbXBfbWIoKTsKIAl3YWl0ZXItPnRhc2sgPSBOVUxMOwogCXdha2VfdXBfcHJvY2Vzcyh0c2spOwogCXB1dF90YXNrX3N0cnVjdCh0c2spOwpkaWZmIC0tZ2l0IGEvbGliL3J3c2VtLmMgYi9saWIvcndzZW0uYwppbmRleCA3NjQ0MDg5Li42MmZhNGViIDEwMDY0NAotLS0gYS9saWIvcndzZW0uYworKysgYi9saWIvcndzZW0uYwpAQCAtNzQsNyArNzQsNyBAQAogCSAqLwogCWxpc3RfZGVsKCZ3YWl0ZXItPmxpc3QpOwogCXRzayA9IHdhaXRlci0+dGFzazsKLQltYigpOworCXNtcF9tYigpOwogCXdhaXRlci0+dGFzayA9IE5VTEw7CiAJd2FrZV91cF9wcm9jZXNzKHRzayk7CiAJcHV0X3Rhc2tfc3RydWN0KHRzayk7CkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJd2FpdGVyID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgcndzZW1fd2FpdGVyLCBsaXN0KTsKIAkJbmV4dCA9IHdhaXRlci0+bGlzdC5uZXh0OwogCQl0c2sgPSB3YWl0ZXItPnRhc2s7Ci0JCW1iKCk7CisJCXNtcF9tYigpOwogCQl3YWl0ZXItPnRhc2sgPSBOVUxMOwogCQl3YWtlX3VwX3Byb2Nlc3ModHNrKTsKIAkJcHV0X3Rhc2tfc3RydWN0KHRzayk7CmRpZmYgLS1naXQgYS9saWIvc29ydC5jIGIvbGliL3NvcnQuYwppbmRleCBlYTNjYWVkLi5iNzNkYmIwIDEwMDY0NAotLS0gYS9saWIvc29ydC5jCisrKyBiL2xpYi9zb3J0LmMKQEAgLTkwLDcgKzkwLDcgQEAKIAogc3RhdGljIGludCBzb3J0X3Rlc3Qodm9pZCkKIHsKLQlpbnQgKmEsIGksIHIgPSAwOworCWludCAqYSwgaSwgciA9IDE7CiAKIAlhID0ga21hbGxvYygxMDAwICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOwogCUJVR19PTighYSk7CmRpZmYgLS1naXQgYS9saWIvc3RyaW5nLmMgYi9saWIvc3RyaW5nLmMKaW5kZXggNGJiOTNhZC4uZDg4NmVmMSAxMDA2NDQKLS0tIGEvbGliL3N0cmluZy5jCisrKyBiL2xpYi9zdHJpbmcuYwpAQCAtNjUsNiArNjUsNyBAQAogICogQGRlc3Q6IFdoZXJlIHRvIGNvcHkgdGhlIHN0cmluZyB0bwogICogQHNyYzogV2hlcmUgdG8gY29weSB0aGUgc3RyaW5nIGZyb20KICAqLworI3VuZGVmIHN0cmNweQogY2hhciAqIHN0cmNweShjaGFyICogZGVzdCxjb25zdCBjaGFyICpzcmMpCiB7CiAJY2hhciAqdG1wID0gZGVzdDsKQEAgLTg1LDYgKzg2LDEwIEBACiAgKgogICogVGhlIHJlc3VsdCBpcyBub3QgJU5VTC10ZXJtaW5hdGVkIGlmIHRoZSBzb3VyY2UgZXhjZWVkcwogICogQGNvdW50IGJ5dGVzLgorICoKKyAqIEluIHRoZSBjYXNlIHdoZXJlIHRoZSBsZW5ndGggb2YgQHNyYyBpcyBsZXNzIHRoYW4gIHRoYXQgIG9mCisgKiBjb3VudCwgdGhlIHJlbWFpbmRlciBvZiBAZGVzdCB3aWxsIGJlIHBhZGRlZCB3aXRoICVOVUwuCisgKgogICovCiBjaGFyICogc3RybmNweShjaGFyICogZGVzdCxjb25zdCBjaGFyICpzcmMsc2l6ZV90IGNvdW50KQogewpAQCAtMTMyLDYgKzEzNyw3IEBACiAgKiBAZGVzdDogVGhlIHN0cmluZyB0byBiZSBhcHBlbmRlZCB0bwogICogQHNyYzogVGhlIHN0cmluZyB0byBhcHBlbmQgdG8gaXQKICAqLworI3VuZGVmIHN0cmNhdAogY2hhciAqIHN0cmNhdChjaGFyICogZGVzdCwgY29uc3QgY2hhciAqIHNyYykKIHsKIAljaGFyICp0bXAgPSBkZXN0OwpAQCAtMjA5LDYgKzIxNSw3IEBACiAgKiBAY3M6IE9uZSBzdHJpbmcKICAqIEBjdDogQW5vdGhlciBzdHJpbmcKICAqLworI3VuZGVmIHN0cmNtcAogaW50IHN0cmNtcChjb25zdCBjaGFyICogY3MsY29uc3QgY2hhciAqIGN0KQogewogCXJlZ2lzdGVyIHNpZ25lZCBjaGFyIF9fcmVzOwpAQCAtNTE0LDYgKzUyMSw3IEBACiAgKiBAY3Q6IEFub3RoZXIgYXJlYSBvZiBtZW1vcnkKICAqIEBjb3VudDogVGhlIHNpemUgb2YgdGhlIGFyZWEuCiAgKi8KKyN1bmRlZiBtZW1jbXAKIGludCBtZW1jbXAoY29uc3Qgdm9pZCAqIGNzLGNvbnN0IHZvaWQgKiBjdCxzaXplX3QgY291bnQpCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqc3UxLCAqc3UyOwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDkzNTk1YzMuLjQ3MjYzYWMgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTI5LDExICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogLyoKLSAqIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKLSAqICAtIHRyeV90b19yZWxlYXNlX3BhZ2UKLSAqICAtIGJsb2NrX2ludmFsaWRhdGVwYWdlCi0gKiAgLSBnZW5lcmljX29zeW5jX2lub2RlCi0gKgogICogRklYTUU6IHJlbW92ZSBhbGwga25vd2xlZGdlIG9mIHRoZSBidWZmZXIgbGF5ZXIgZnJvbSB0aGUgY29yZSBWTQogICovCiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4gLyogZm9yIGdlbmVyaWNfb3N5bmNfaW5vZGUgKi8KQEAgLTEyMyw4ICsxMTgsNyBAQAogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKIAotCWlmICh1bmxpa2VseSghUGFnZUxvY2tlZChwYWdlKSkpCi0JCVBBR0VfQlVHKHBhZ2UpOworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAKIAl3cml0ZV9sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKIAlfX3JlbW92ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CkBAIC0xMzksNyArMTMzLDI1IEBACiAJcGFnZSA9IGNvbnRhaW5lcl9vZigocGFnZV9mbGFnc190ICopd29yZCwgc3RydWN0IHBhZ2UsIGZsYWdzKTsKIAogCS8qCi0JICogRklYTUUsIGZlcmNyaXNzYWtlLiAgV2hhdCBpcyB0aGlzIGJhcnJpZXIgaGVyZSBmb3I/CisJICogcGFnZV9tYXBwaW5nKCkgaXMgYmVpbmcgY2FsbGVkIHdpdGhvdXQgUEdfbG9ja2VkIGhlbGQuCisJICogU29tZSBrbm93bGVkZ2Ugb2YgdGhlIHN0YXRlIGFuZCB1c2Ugb2YgdGhlIHBhZ2UgaXMgdXNlZCB0bworCSAqIHJlZHVjZSB0aGUgcmVxdWlyZW1lbnRzIGRvd24gdG8gYSBtZW1vcnkgYmFycmllci4KKwkgKiBUaGUgZGFuZ2VyIGhlcmUgaXMgb2YgYSBzdGFsZSBwYWdlX21hcHBpbmcoKSByZXR1cm4gdmFsdWUKKwkgKiBpbmRpY2F0aW5nIGEgc3RydWN0IGFkZHJlc3Nfc3BhY2UgZGlmZmVyZW50IGZyb20gdGhlIG9uZSBpdCdzCisJICogYXNzb2NpYXRlZCB3aXRoIHdoZW4gaXQgaXMgYXNzb2NpYXRlZCB3aXRoIG9uZS4KKwkgKiBBZnRlciBzbXBfbWIoKSwgaXQncyBlaXRoZXIgdGhlIGNvcnJlY3QgcGFnZV9tYXBwaW5nKCkgZm9yCisJICogdGhlIHBhZ2UsIG9yIGFuIG9sZCBwYWdlX21hcHBpbmcoKSBhbmQgdGhlIHBhZ2UncyBvd24KKwkgKiBwYWdlX21hcHBpbmcoKSBoYXMgZ29uZSBOVUxMLgorCSAqIFRoZSAtPnN5bmNfcGFnZSgpIGFkZHJlc3Nfc3BhY2Ugb3BlcmF0aW9uIG11c3QgdG9sZXJhdGUKKwkgKiBwYWdlX21hcHBpbmcoKSBnb2luZyBOVUxMLiBCeSBhbiBhbWF6aW5nIGNvaW5jaWRlbmNlLAorCSAqIHRoaXMgY29tZXMgYWJvdXQgYmVjYXVzZSBub25lIG9mIHRoZSB1c2VycyBvZiB0aGUgcGFnZQorCSAqIGluIHRoZSAtPnN5bmNfcGFnZSgpIG1ldGhvZHMgbWFrZSBlc3NlbnRpYWwgdXNlIG9mIHRoZQorCSAqIHBhZ2VfbWFwcGluZygpLCBtZXJlbHkgcGFzc2luZyB0aGUgcGFnZSBkb3duIHRvIHRoZSBiYWNraW5nCisJICogZGV2aWNlJ3MgdW5wbHVnIGZ1bmN0aW9ucyB3aGVuIGl0J3Mgbm9uLU5VTEwsIHdoaWNoIGluIHR1cm4KKwkgKiBpZ25vcmUgaXQgZm9yIGFsbCBjYXNlcyBidXQgc3dhcCwgd2hlcmUgb25seSBwYWdlLT5wcml2YXRlIGlzCisJICogb2YgaW50ZXJlc3QuIFdoZW4gcGFnZV9tYXBwaW5nKCkgZG9lcyBnbyBOVUxMLCB0aGUgZW50aXJlCisJICogY2FsbCBzdGFjayBncmFjZWZ1bGx5IGlnbm9yZXMgdGhlIHBhZ2UgYW5kIHJldHVybnMuCisJICogLS0gd2xpCiAJICovCiAJc21wX21iKCk7CiAJbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKQEAgLTE1Miw5ICsxNjQsMTAgQEAKIC8qKgogICogZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlIC0gc3RhcnQgd3JpdGViYWNrIGFnYWluc3QgYWxsIG9mIGEgbWFwcGluZydzCiAgKiBkaXJ0eSBwYWdlcyB0aGF0IGxpZSB3aXRoaW4gdGhlIGJ5dGUgb2Zmc2V0cyA8c3RhcnQsIGVuZD4KLSAqIEBtYXBwaW5nOiBhZGRyZXNzIHNwYWNlIHN0cnVjdHVyZSB0byB3cml0ZQotICogQHN0YXJ0OiBvZmZzZXQgaW4gYnl0ZXMgd2hlcmUgdGhlIHJhbmdlIHN0YXJ0cwotICogQGVuZCA6IG9mZnNldCBpbiBieXRlcyB3aGVyZSB0aGUgcmFuZ2UgZW5kcworICogQG1hcHBpbmc6CWFkZHJlc3Mgc3BhY2Ugc3RydWN0dXJlIHRvIHdyaXRlCisgKiBAc3RhcnQ6CW9mZnNldCBpbiBieXRlcyB3aGVyZSB0aGUgcmFuZ2Ugc3RhcnRzCisgKiBAZW5kOglvZmZzZXQgaW4gYnl0ZXMgd2hlcmUgdGhlIHJhbmdlIGVuZHMKKyAqIEBzeW5jX21vZGU6CWVuYWJsZSBzeW5jaHJvbm91cyBvcGVyYXRpb24KICAqCiAgKiBJZiBzeW5jX21vZGUgaXMgV0JfU1lOQ19BTEwgdGhlbiB0aGlzIGlzIGEgImRhdGEgaW50ZWdyaXR5IiBvcGVyYXRpb24sIGFzCiAgKiBvcHBvc2VkIHRvIGEgcmVndWxhciBtZW1vcnkgKiBjbGVhbnNpbmcgd3JpdGViYWNrLiAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbgpAQCAtNTE4LDggKzUzMSw4IEBACiAvKioKICAqIGZpbmRfbG9ja19wYWdlIC0gbG9jYXRlLCBwaW4gYW5kIGxvY2sgYSBwYWdlY2FjaGUgcGFnZQogICoKLSAqIEBtYXBwaW5nIC0gdGhlIGFkZHJlc3Nfc3BhY2UgdG8gc2VhcmNoCi0gKiBAb2Zmc2V0IC0gdGhlIHBhZ2UgaW5kZXgKKyAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzc19zcGFjZSB0byBzZWFyY2gKKyAqIEBvZmZzZXQ6IHRoZSBwYWdlIGluZGV4CiAgKgogICogTG9jYXRlcyB0aGUgZGVzaXJlZCBwYWdlY2FjaGUgcGFnZSwgbG9ja3MgaXQsIGluY3JlbWVudHMgaXRzIHJlZmVyZW5jZQogICogY291bnQgYW5kIHJldHVybnMgaXRzIGFkZHJlc3MuCkBAIC01NTgsOSArNTcxLDkgQEAKIC8qKgogICogZmluZF9vcl9jcmVhdGVfcGFnZSAtIGxvY2F0ZSBvciBhZGQgYSBwYWdlY2FjaGUgcGFnZQogICoKLSAqIEBtYXBwaW5nIC0gdGhlIHBhZ2UncyBhZGRyZXNzX3NwYWNlCi0gKiBAaW5kZXggLSB0aGUgcGFnZSdzIGluZGV4IGludG8gdGhlIG1hcHBpbmcKLSAqIEBnZnBfbWFzayAtIHBhZ2UgYWxsb2NhdGlvbiBtb2RlCisgKiBAbWFwcGluZzogdGhlIHBhZ2UncyBhZGRyZXNzX3NwYWNlCisgKiBAaW5kZXg6IHRoZSBwYWdlJ3MgaW5kZXggaW50byB0aGUgbWFwcGluZworICogQGdmcF9tYXNrOiBwYWdlIGFsbG9jYXRpb24gbW9kZQogICoKICAqIExvY2F0ZXMgYSBwYWdlIGluIHRoZSBwYWdlY2FjaGUuICBJZiB0aGUgcGFnZSBpcyBub3QgcHJlc2VudCwgYSBuZXcgcGFnZQogICogaXMgYWxsb2NhdGVkIHVzaW5nIEBnZnBfbWFzayBhbmQgaXMgYWRkZWQgdG8gdGhlIHBhZ2VjYWNoZSBhbmQgdG8gdGhlIFZNJ3MKQEAgLTE5NDksNyArMTk2Miw3IEBACiAJCWJ1ZiA9IGlvdi0+aW92X2Jhc2UgKyB3cml0dGVuOwogCWVsc2UgewogCQlmaWxlbWFwX3NldF9uZXh0X2lvdmVjKCZjdXJfaW92LCAmaW92X2Jhc2UsIHdyaXR0ZW4pOwotCQlidWYgPSBpb3YtPmlvdl9iYXNlICsgaW92X2Jhc2U7CisJCWJ1ZiA9IGN1cl9pb3YtPmlvdl9iYXNlICsgaW92X2Jhc2U7CiAJfQogCiAJZG8gewpAQCAtMjAwNyw5ICsyMDIwLDExIEBACiAJCQkJY291bnQgLT0gc3RhdHVzOwogCQkJCXBvcyArPSBzdGF0dXM7CiAJCQkJYnVmICs9IHN0YXR1czsKLQkJCQlpZiAodW5saWtlbHkobnJfc2VncyA+IDEpKQorCQkJCWlmICh1bmxpa2VseShucl9zZWdzID4gMSkpIHsKIAkJCQkJZmlsZW1hcF9zZXRfbmV4dF9pb3ZlYygmY3VyX2lvdiwKIAkJCQkJCQkmaW92X2Jhc2UsIHN0YXR1cyk7CisJCQkJCWJ1ZiA9IGN1cl9pb3YtPmlvdl9iYXNlICsgaW92X2Jhc2U7CisJCQkJfQogCQkJfQogCQl9CiAJCWlmICh1bmxpa2VseShjb3BpZWQgIT0gYnl0ZXMpKQpkaWZmIC0tZ2l0IGEvbW0vaGlnaG1lbS5jIGIvbW0vaGlnaG1lbS5jCmluZGV4IGQwMTI3NjUuLjQwMDkxMTUgMTAwNjQ0Ci0tLSBhL21tL2hpZ2htZW0uYworKysgYi9tbS9oaWdobWVtLmMKQEAgLTMyNSw2ICszMjUsNyBAQAogCQkJY29udGludWU7CiAKIAkJbWVtcG9vbF9mcmVlKGJ2ZWMtPmJ2X3BhZ2UsIHBvb2wpOwkKKwkJZGVjX3BhZ2Vfc3RhdGUobnJfYm91bmNlKTsKIAl9CiAKIAliaW9fZW5kaW8oYmlvX29yaWcsIGJpb19vcmlnLT5iaV9zaXplLCBlcnIpOwpAQCAtNDA1LDYgKzQwNiw3IEBACiAJCXRvLT5idl9wYWdlID0gbWVtcG9vbF9hbGxvYyhwb29sLCBxLT5ib3VuY2VfZ2ZwKTsKIAkJdG8tPmJ2X2xlbiA9IGZyb20tPmJ2X2xlbjsKIAkJdG8tPmJ2X29mZnNldCA9IGZyb20tPmJ2X29mZnNldDsKKwkJaW5jX3BhZ2Vfc3RhdGUobnJfYm91bmNlKTsKIAogCQlpZiAocncgPT0gV1JJVEUpIHsKIAkJCWNoYXIgKnZ0bywgKnZmcm9tOwpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCBhM2I0NGE2Li4wOGM0MWRhIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtNjYxLDcgKzY2MSw3IEBACiAJY2FzZSBNUE9MX0JJTkQ6CiAJCS8qIExvd2VyIHpvbmVzIGRvbid0IGdldCBhIHBvbGljeSBhcHBsaWVkICovCiAJCS8qIENhcmVmdWw6IGN1cnJlbnQtPm1lbXNfYWxsb3dlZCBtaWdodCBoYXZlIG1vdmVkICovCi0JCWlmIChnZnAgPj0gcG9saWN5X3pvbmUpCisJCWlmICgoZ2ZwICYgR0ZQX1pPTkVNQVNLKSA+PSBwb2xpY3lfem9uZSkKIAkJCWlmIChjcHVzZXRfem9uZWxpc3RfdmFsaWRfbWVtc19hbGxvd2VkKHBvbGljeS0+di56b25lbGlzdCkpCiAJCQkJcmV0dXJuIHBvbGljeS0+di56b25lbGlzdDsKIAkJLypGQUxMIFRIUk9VR0gqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9vbC5jIGIvbW0vbWVtcG9vbC5jCmluZGV4IGIwMTRmZmUuLmM5ZjNkNDYgMTAwNjQ0Ci0tLSBhL21tL21lbXBvb2wuYworKysgYi9tbS9tZW1wb29sLmMKQEAgLTE5OCwzMSArMTk4LDIyIEBACiAJdm9pZCAqZWxlbWVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCURFRklORV9XQUlUKHdhaXQpOwotCWludCBnZnBfbm93YWl0ID0gZ2ZwX21hc2sgJiB+KF9fR0ZQX1dBSVQgfCBfX0dGUF9JTyk7CisJaW50IGdmcF90ZW1wOwogCiAJbWlnaHRfc2xlZXBfaWYoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKTsKKworCWdmcF9tYXNrIHw9IF9fR0ZQX05PTUVNQUxMT0M7CS8qIGRvbid0IGFsbG9jYXRlIGVtZXJnZW5jeSByZXNlcnZlcyAqLworCWdmcF9tYXNrIHw9IF9fR0ZQX05PUkVUUlk7CS8qIGRvbid0IGxvb3AgaW4gX19hbGxvY19wYWdlcyAqLworCWdmcF9tYXNrIHw9IF9fR0ZQX05PV0FSTjsJLyogZmFpbHVyZXMgYXJlIE9LICovCisKKwlnZnBfdGVtcCA9IGdmcF9tYXNrICYgfihfX0dGUF9XQUlUfF9fR0ZQX0lPKTsKKwogcmVwZWF0X2FsbG9jOgotCWVsZW1lbnQgPSBwb29sLT5hbGxvYyhnZnBfbm93YWl0fF9fR0ZQX05PV0FSTiwgcG9vbC0+cG9vbF9kYXRhKTsKKworCWVsZW1lbnQgPSBwb29sLT5hbGxvYyhnZnBfdGVtcCwgcG9vbC0+cG9vbF9kYXRhKTsKIAlpZiAobGlrZWx5KGVsZW1lbnQgIT0gTlVMTCkpCiAJCXJldHVybiBlbGVtZW50OwogCi0JLyoKLQkgKiBJZiB0aGUgcG9vbCBpcyBsZXNzIHRoYW4gNTAlIGZ1bGwgYW5kIHdlIGNhbiBwZXJmb3JtIGVmZmVjdGl2ZQotCSAqIHBhZ2UgcmVjbGFpbSB0aGVuIHRyeSBoYXJkZXIgdG8gYWxsb2NhdGUgYW4gZWxlbWVudC4KLQkgKi8KLQltYigpOwotCWlmICgoZ2ZwX21hc2sgJiBfX0dGUF9GUykgJiYgKGdmcF9tYXNrICE9IGdmcF9ub3dhaXQpICYmCi0JCQkJKHBvb2wtPmN1cnJfbnIgPD0gcG9vbC0+bWluX25yLzIpKSB7Ci0JCWVsZW1lbnQgPSBwb29sLT5hbGxvYyhnZnBfbWFzaywgcG9vbC0+cG9vbF9kYXRhKTsKLQkJaWYgKGxpa2VseShlbGVtZW50ICE9IE5VTEwpKQotCQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotCi0JLyoKLQkgKiBLaWNrIHRoZSBWTSBhdCB0aGlzIHBvaW50LgotCSAqLwotCXdha2V1cF9iZGZsdXNoKDApOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxvY2ssIGZsYWdzKTsKIAlpZiAobGlrZWx5KHBvb2wtPmN1cnJfbnIpKSB7CiAJCWVsZW1lbnQgPSByZW1vdmVfZWxlbWVudChwb29sKTsKQEAgLTIzNSw4ICsyMjYsMTAgQEAKIAlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX1dBSVQpKQogCQlyZXR1cm4gTlVMTDsKIAorCS8qIE5vdyBzdGFydCBwZXJmb3JtaW5nIHBhZ2UgcmVjbGFpbSAqLworCWdmcF90ZW1wID0gZ2ZwX21hc2s7CiAJcHJlcGFyZV90b193YWl0KCZwb29sLT53YWl0LCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCW1iKCk7CisJc21wX21iKCk7CiAJaWYgKCFwb29sLT5jdXJyX25yKQogCQlpb19zY2hlZHVsZSgpOwogCWZpbmlzaF93YWl0KCZwb29sLT53YWl0LCAmd2FpdCk7CkBAIC0yNTcsNyArMjUwLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbWIoKTsKKwlzbXBfbWIoKTsKIAlpZiAocG9vbC0+Y3Vycl9uciA8IHBvb2wtPm1pbl9ucikgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bG9jaywgZmxhZ3MpOwogCQlpZiAocG9vbC0+Y3Vycl9uciA8IHBvb2wtPm1pbl9ucikgewpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDZlYTIwNGMuLjAxZjk3OTMgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTkzNyw5ICs5MzcsMTAgQEAKIAkvKiBtbG9jayBNQ0xfRlVUVVJFPyAqLwogCWlmICh2bV9mbGFncyAmIFZNX0xPQ0tFRCkgewogCQl1bnNpZ25lZCBsb25nIGxvY2tlZCwgbG9ja19saW1pdDsKLQkJbG9ja2VkID0gbW0tPmxvY2tlZF92bSA8PCBQQUdFX1NISUZUOworCQlsb2NrZWQgPSBsZW4gPj4gUEFHRV9TSElGVDsKKwkJbG9ja2VkICs9IG1tLT5sb2NrZWRfdm07CiAJCWxvY2tfbGltaXQgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX01FTUxPQ0tdLnJsaW1fY3VyOwotCQlsb2NrZWQgKz0gbGVuOworCQlsb2NrX2xpbWl0ID4+PSBQQUdFX1NISUZUOwogCQlpZiAobG9ja2VkID4gbG9ja19saW1pdCAmJiAhY2FwYWJsZShDQVBfSVBDX0xPQ0spKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJfQpAQCAtMTAwOSw4ICsxMDEwLDcgQEAKIAl9CiAKIAkvKiBDaGVjayBhZ2FpbnN0IGFkZHJlc3Mgc3BhY2UgbGltaXQuICovCi0JaWYgKChtbS0+dG90YWxfdm0gPDwgUEFHRV9TSElGVCkgKyBsZW4KLQkgICAgPiBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0FTXS5ybGltX2N1cikKKwlpZiAoIW1heV9leHBhbmRfdm0obW0sIGxlbiA+PiBQQUdFX1NISUZUKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoYWNjb3VudGFibGUgJiYgKCEoZmxhZ3MgJiBNQVBfTk9SRVNFUlZFKSB8fApAQCAtMTQyMSw3ICsxNDIxLDcgQEAKIAlzdHJ1Y3QgcmxpbWl0ICpybGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltOwogCiAJLyogYWRkcmVzcyBzcGFjZSBsaW1pdCB0ZXN0cyAqLwotCWlmIChtbS0+dG90YWxfdm0gKyBncm93ID4gcmxpbVtSTElNSVRfQVNdLnJsaW1fY3VyID4+IFBBR0VfU0hJRlQpCisJaWYgKCFtYXlfZXhwYW5kX3ZtKG1tLCBncm93KSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBTdGFjayBsaW1pdCB0ZXN0ICovCkBAIC0xODIzLDkgKzE4MjMsMTAgQEAKIAkgKi8KIAlpZiAobW0tPmRlZl9mbGFncyAmIFZNX0xPQ0tFRCkgewogCQl1bnNpZ25lZCBsb25nIGxvY2tlZCwgbG9ja19saW1pdDsKLQkJbG9ja2VkID0gbW0tPmxvY2tlZF92bSA8PCBQQUdFX1NISUZUOworCQlsb2NrZWQgPSBsZW4gPj4gUEFHRV9TSElGVDsKKwkJbG9ja2VkICs9IG1tLT5sb2NrZWRfdm07CiAJCWxvY2tfbGltaXQgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX01FTUxPQ0tdLnJsaW1fY3VyOwotCQlsb2NrZWQgKz0gbGVuOworCQlsb2NrX2xpbWl0ID4+PSBQQUdFX1NISUZUOwogCQlpZiAobG9ja2VkID4gbG9ja19saW1pdCAmJiAhY2FwYWJsZShDQVBfSVBDX0xPQ0spKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJfQpAQCAtMTg0OCw4ICsxODQ5LDcgQEAKIAl9CiAKIAkvKiBDaGVjayBhZ2FpbnN0IGFkZHJlc3Mgc3BhY2UgbGltaXRzICphZnRlciogY2xlYXJpbmcgb2xkIG1hcHMuLi4gKi8KLQlpZiAoKG1tLT50b3RhbF92bSA8PCBQQUdFX1NISUZUKSArIGxlbgotCSAgICA+IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQVNdLnJsaW1fY3VyKQorCWlmICghbWF5X2V4cGFuZF92bShtbSwgbGVuID4+IFBBR0VfU0hJRlQpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChtbS0+bWFwX2NvdW50ID4gc3lzY3RsX21heF9tYXBfY291bnQpCkBAIC0yMDE5LDMgKzIwMTksMTkgQEAKIAl9CiAJcmV0dXJuIG5ld192bWE7CiB9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY2FsbGluZyBwcm9jZXNzIG1heSBleHBhbmQgaXRzIHZtIHNwYWNlIGJ5IHRoZSBwYXNzZWQKKyAqIG51bWJlciBvZiBwYWdlcworICovCitpbnQgbWF5X2V4cGFuZF92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucGFnZXMpCit7CisJdW5zaWduZWQgbG9uZyBjdXIgPSBtbS0+dG90YWxfdm07CS8qIHBhZ2VzICovCisJdW5zaWduZWQgbG9uZyBsaW07CisKKwlsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0FTXS5ybGltX2N1ciA+PiBQQUdFX1NISUZUOworCisJaWYgKGN1ciArIG5wYWdlcyA+IGxpbSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IDBkMWMxYjkuLjBkZDdhY2UgMTAwNjQ0Ci0tLSBhL21tL21yZW1hcC5jCisrKyBiL21tL21yZW1hcC5jCkBAIC0zNDcsMTAgKzM0NywxMCBAQAogCQlpZiAobG9ja2VkID4gbG9ja19saW1pdCAmJiAhY2FwYWJsZShDQVBfSVBDX0xPQ0spKQogCQkJZ290byBvdXQ7CiAJfQotCXJldCA9IC1FTk9NRU07Ci0JaWYgKChjdXJyZW50LT5tbS0+dG90YWxfdm0gPDwgUEFHRV9TSElGVCkgKyAobmV3X2xlbiAtIG9sZF9sZW4pCi0JICAgID4gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9BU10ucmxpbV9jdXIpCisJaWYgKCFtYXlfZXhwYW5kX3ZtKGN1cnJlbnQtPm1tLCAobmV3X2xlbiAtIG9sZF9sZW4pID4+IFBBR0VfU0hJRlQpKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OworCX0KIAogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fQUNDT1VOVCkgewogCQljaGFyZ2VkID0gKG5ld19sZW4gLSBvbGRfbGVuKSA+PiBQQUdFX1NISUZUOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggNmRkZDZhMi4uNjEzYjk5YSAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIAogLyoqCiAgKiBiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkIC0gYmFsYW5jZSBkaXJ0eSBtZW1vcnkgc3RhdGUKLSAqIEBtYXBwaW5nIC0gYWRkcmVzc19zcGFjZSB3aGljaCB3YXMgZGlydGllZAorICogQG1hcHBpbmc6IGFkZHJlc3Nfc3BhY2Ugd2hpY2ggd2FzIGRpcnRpZWQKICAqCiAgKiBQcm9jZXNzZXMgd2hpY2ggYXJlIGRpcnR5aW5nIG1lbW9yeSBzaG91bGQgY2FsbCBpbiBoZXJlIG9uY2UgZm9yIGVhY2ggcGFnZQogICogd2hpY2ggd2FzIG5ld2x5IGRpcnRpZWQuICBUaGUgZnVuY3Rpb24gd2lsbCBwZXJpb2RpY2FsbHkgY2hlY2sgdGhlIHN5c3RlbSdzCkBAIC01NjIsOCArNTYyLDggQEAKIC8qKgogICogd3JpdGVfb25lX3BhZ2UgLSB3cml0ZSBvdXQgYSBzaW5nbGUgcGFnZSBhbmQgb3B0aW9uYWxseSB3YWl0IG9uIEkvTwogICoKLSAqIEBwYWdlIC0gdGhlIHBhZ2UgdG8gd3JpdGUKLSAqIEB3YWl0IC0gaWYgdHJ1ZSwgd2FpdCBvbiB3cml0ZW91dAorICogQHBhZ2U6IHRoZSBwYWdlIHRvIHdyaXRlCisgKiBAd2FpdDogaWYgdHJ1ZSwgd2FpdCBvbiB3cml0ZW91dAogICoKICAqIFRoZSBwYWdlIG11c3QgYmUgbG9ja2VkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgYmUgdW5sb2NrZWQgdXBvbiByZXR1cm4uCiAgKgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGM3M2RiYmMuLmIxMDYxYjEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTQzLDcgKzQzLDkgQEAKICAqIGluaXRpYWxpemVyIGNsZWFuZXIKICAqLwogbm9kZW1hc2tfdCBub2RlX29ubGluZV9tYXAgPSB7IHsgWzBdID0gMVVMIH0gfTsKK0VYUE9SVF9TWU1CT0wobm9kZV9vbmxpbmVfbWFwKTsKIG5vZGVtYXNrX3Qgbm9kZV9wb3NzaWJsZV9tYXAgPSBOT0RFX01BU0tfQUxMOworRVhQT1JUX1NZTUJPTChub2RlX3Bvc3NpYmxlX21hcCk7CiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0X2xpc3Q7CiB1bnNpZ25lZCBsb25nIHRvdGFscmFtX3BhZ2VzOwogdW5zaWduZWQgbG9uZyB0b3RhbGhpZ2hfcGFnZXM7CkBAIC03OTksMTQgKzgwMSwxOCBAQAogCX0KIAogCS8qIFRoaXMgYWxsb2NhdGlvbiBzaG91bGQgYWxsb3cgZnV0dXJlIG1lbW9yeSBmcmVlaW5nLiAqLwotCWlmICgoKHAtPmZsYWdzICYgUEZfTUVNQUxMT0MpIHx8IHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX01FTURJRSkpKSAmJiAhaW5faW50ZXJydXB0KCkpIHsKLQkJLyogZ28gdGhyb3VnaCB0aGUgem9uZWxpc3QgeWV0IGFnYWluLCBpZ25vcmluZyBtaW5zICovCi0JCWZvciAoaSA9IDA7ICh6ID0gem9uZXNbaV0pICE9IE5VTEw7IGkrKykgewotCQkJaWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkKHopKQotCQkJCWNvbnRpbnVlOwotCQkJcGFnZSA9IGJ1ZmZlcmVkX3JtcXVldWUoeiwgb3JkZXIsIGdmcF9tYXNrKTsKLQkJCWlmIChwYWdlKQotCQkJCWdvdG8gZ290X3BnOworCisJaWYgKCgocC0+ZmxhZ3MgJiBQRl9NRU1BTExPQykgfHwgdW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfTUVNRElFKSkpCisJCQkmJiAhaW5faW50ZXJydXB0KCkpIHsKKwkJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9OT01FTUFMTE9DKSkgeworCQkJLyogZ28gdGhyb3VnaCB0aGUgem9uZWxpc3QgeWV0IGFnYWluLCBpZ25vcmluZyBtaW5zICovCisJCQlmb3IgKGkgPSAwOyAoeiA9IHpvbmVzW2ldKSAhPSBOVUxMOyBpKyspIHsKKwkJCQlpZiAoIWNwdXNldF96b25lX2FsbG93ZWQoeikpCisJCQkJCWNvbnRpbnVlOworCQkJCXBhZ2UgPSBidWZmZXJlZF9ybXF1ZXVlKHosIG9yZGVyLCBnZnBfbWFzayk7CisJCQkJaWYgKHBhZ2UpCisJCQkJCWdvdG8gZ290X3BnOworCQkJfQogCQl9CiAJCWdvdG8gbm9wYWdlOwogCX0KQEAgLTEzNTEsOCArMTM1Nyw3IEBACiAjZGVmaW5lIE1BWF9OT0RFX0xPQUQgKG51bV9vbmxpbmVfbm9kZXMoKSkKIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBub2RlX2xvYWRbTUFYX05VTU5PREVTXTsKIC8qKgotICogZmluZF9uZXh0X2Jlc3Rfbm9kZSAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbgotICogICAgbm9kZSdzIGZhbGxiYWNrIGxpc3QKKyAqIGZpbmRfbmV4dF9iZXN0X25vZGUgLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSdzIGZhbGxiYWNrIGxpc3QKICAqIEBub2RlOiBub2RlIHdob3NlIGZhbGxiYWNrIGxpc3Qgd2UncmUgYXBwZW5kaW5nCiAgKiBAdXNlZF9ub2RlX21hc2s6IG5vZGVtYXNrX3Qgb2YgYWxyZWFkeSB1c2VkIG5vZGVzCiAgKgpAQCAtMTY3MSw2ICsxNjc2LDE4IEBACiAJCWlmIChiYXRjaCA8IDEpCiAJCQliYXRjaCA9IDE7CiAKKwkJLyoKKwkJICogQ2xhbXAgdGhlIGJhdGNoIHRvIGEgMl5uIC0gMSB2YWx1ZS4gSGF2aW5nIGEgcG93ZXIKKwkJICogb2YgMiB2YWx1ZSB3YXMgZm91bmQgdG8gYmUgbW9yZSBsaWtlbHkgdG8gaGF2ZQorCQkgKiBzdWJvcHRpbWFsIGNhY2hlIGFsaWFzaW5nIHByb3BlcnRpZXMgaW4gc29tZSBjYXNlcy4KKwkJICoKKwkJICogRm9yIGV4YW1wbGUgaWYgMiB0YXNrcyBhcmUgYWx0ZXJuYXRlbHkgYWxsb2NhdGluZworCQkgKiBiYXRjaGVzIG9mIHBhZ2VzLCBvbmUgdGFzayBjYW4gZW5kIHVwIHdpdGggYSBsb3QKKwkJICogb2YgcGFnZXMgb2Ygb25lIGhhbGYgb2YgdGhlIHBvc3NpYmxlIHBhZ2UgY29sb3JzCisJCSAqIGFuZCB0aGUgb3RoZXIgd2l0aCBwYWdlcyBvZiB0aGUgb3RoZXIgY29sb3JzLgorCQkgKi8KKwkJYmF0Y2ggPSAoMSA8PCBmbHMoYmF0Y2ggKyBiYXRjaC8yKSkgLSAxOworCiAJCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKIAkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7CiAKQEAgLTE4ODEsNiArMTg5OCw3IEBACiAJImFsbG9jc3RhbGwiLAogCiAJInBncm90YXRlZCIsCisJIm5yX2JvdW5jZSIsCiB9OwogCiBzdGF0aWMgdm9pZCAqdm1zdGF0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggODg0ZDZkMS4uMzc4ZGUyMyAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCisrKyBiL21tL3JtYXAuYwpAQCAtMjQzLDYgKzI0Myw0MiBAQAogfQogCiAvKgorICogQ2hlY2sgdGhhdCBAcGFnZSBpcyBtYXBwZWQgYXQgQGFkZHJlc3MgaW50byBAbW0uCisgKgorICogT24gc3VjY2VzcyByZXR1cm5zIHdpdGggbWFwcGVkIHB0ZSBhbmQgbG9ja2VkIG1tLT5wYWdlX3RhYmxlX2xvY2suCisgKi8KK3N0YXRpYyBwdGVfdCAqcGFnZV9jaGVja19hZGRyZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXBnZF90ICpwZ2Q7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwdGU7CisKKwkvKgorCSAqIFdlIG5lZWQgdGhlIHBhZ2VfdGFibGVfbG9jayB0byBwcm90ZWN0IHVzIGZyb20gcGFnZSBmYXVsdHMsCisJICogbXVubWFwLCBmb3JrLCBldGMuLi4KKwkgKi8KKwlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpOworCWlmIChsaWtlbHkocGdkX3ByZXNlbnQoKnBnZCkpKSB7CisJCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKKwkJaWYgKGxpa2VseShwdWRfcHJlc2VudCgqcHVkKSkpIHsKKwkJCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKKwkJCWlmIChsaWtlbHkocG1kX3ByZXNlbnQoKnBtZCkpKSB7CisJCQkJcHRlID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyZXNzKTsKKwkJCQlpZiAobGlrZWx5KHB0ZV9wcmVzZW50KCpwdGUpICYmCisJCQkJCSAgIHBhZ2VfdG9fcGZuKHBhZ2UpID09IHB0ZV9wZm4oKnB0ZSkpKQorCQkJCQlyZXR1cm4gcHRlOworCQkJCXB0ZV91bm1hcChwdGUpOworCQkJfQorCQl9CisJfQorCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKK30KKworLyoKICAqIFN1YmZ1bmN0aW9ucyBvZiBwYWdlX3JlZmVyZW5jZWQ6IHBhZ2VfcmVmZXJlbmNlZF9vbmUgY2FsbGVkCiAgKiByZXBlYXRlZGx5IGZyb20gZWl0aGVyIHBhZ2VfcmVmZXJlbmNlZF9hbm9uIG9yIHBhZ2VfcmVmZXJlbmNlZF9maWxlLgogICovCkBAIC0yNTEsOSArMjg3LDYgQEAKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCXBnZF90ICpwZ2Q7Ci0JcHVkX3QgKnB1ZDsKLQlwbWRfdCAqcG1kOwogCXB0ZV90ICpwdGU7CiAJaW50IHJlZmVyZW5jZWQgPSAwOwogCkBAIC0yNjMsMzkgKzI5NiwxOCBAQAogCWlmIChhZGRyZXNzID09IC1FRkFVTFQpCiAJCWdvdG8gb3V0OwogCi0Jc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlwdGUgPSBwYWdlX2NoZWNrX2FkZHJlc3MocGFnZSwgbW0sIGFkZHJlc3MpOworCWlmICghSVNfRVJSKHB0ZSkpIHsKKwkJaWYgKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmcodm1hLCBhZGRyZXNzLCBwdGUpKQorCQkJcmVmZXJlbmNlZCsrOwogCi0JcGdkID0gcGdkX29mZnNldChtbSwgYWRkcmVzcyk7Ci0JaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkKLQkJZ290byBvdXRfdW5sb2NrOworCQlpZiAobW0gIT0gY3VycmVudC0+bW0gJiYgIWlnbm9yZV90b2tlbiAmJiBoYXNfc3dhcF90b2tlbihtbSkpCisJCQlyZWZlcmVuY2VkKys7CiAKLQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7Ci0JaWYgKCFwdWRfcHJlc2VudCgqcHVkKSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwotCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcmVzcyk7Ci0JaWYgKCFwdGVfcHJlc2VudCgqcHRlKSkKLQkJZ290byBvdXRfdW5tYXA7Ci0KLQlpZiAocGFnZV90b19wZm4ocGFnZSkgIT0gcHRlX3BmbigqcHRlKSkKLQkJZ290byBvdXRfdW5tYXA7Ci0KLQlpZiAocHRlcF9jbGVhcl9mbHVzaF95b3VuZyh2bWEsIGFkZHJlc3MsIHB0ZSkpCi0JCXJlZmVyZW5jZWQrKzsKLQotCWlmIChtbSAhPSBjdXJyZW50LT5tbSAmJiAhaWdub3JlX3Rva2VuICYmIGhhc19zd2FwX3Rva2VuKG1tKSkKLQkJcmVmZXJlbmNlZCsrOwotCi0JKCptYXBjb3VudCktLTsKLQotb3V0X3VubWFwOgotCXB0ZV91bm1hcChwdGUpOwotb3V0X3VubG9jazoKLQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJCSgqbWFwY291bnQpLS07CisJCXB0ZV91bm1hcChwdGUpOworCQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJfQogb3V0OgogCXJldHVybiByZWZlcmVuY2VkOwogfQpAQCAtNTAyLDkgKzUxNCw2IEBACiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKLQlwZ2RfdCAqcGdkOwotCXB1ZF90ICpwdWQ7Ci0JcG1kX3QgKnBtZDsKIAlwdGVfdCAqcHRlOwogCXB0ZV90IHB0ZXZhbDsKIAlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKQEAgLTUxNSwzMCArNTI0LDkgQEAKIAlpZiAoYWRkcmVzcyA9PSAtRUZBVUxUKQogCQlnb3RvIG91dDsKIAotCS8qCi0JICogV2UgbmVlZCB0aGUgcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgdXMgZnJvbSBwYWdlIGZhdWx0cywKLQkgKiBtdW5tYXAsIGZvcmssIGV0Yy4uLgotCSAqLwotCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0KLQlwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKTsKLQlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7Ci0JaWYgKCFwdWRfcHJlc2VudCgqcHVkKSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwotCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcmVzcyk7Ci0JaWYgKCFwdGVfcHJlc2VudCgqcHRlKSkKLQkJZ290byBvdXRfdW5tYXA7Ci0KLQlpZiAocGFnZV90b19wZm4ocGFnZSkgIT0gcHRlX3BmbigqcHRlKSkKLQkJZ290byBvdXRfdW5tYXA7CisJcHRlID0gcGFnZV9jaGVja19hZGRyZXNzKHBhZ2UsIG1tLCBhZGRyZXNzKTsKKwlpZiAoSVNfRVJSKHB0ZSkpCisJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiBJZiB0aGUgcGFnZSBpcyBtbG9jaygpZCwgd2UgY2Fubm90IHN3YXAgaXQgb3V0LgpAQCAtNjA0LDcgKzU5Miw2IEBACiAKIG91dF91bm1hcDoKIAlwdGVfdW5tYXAocHRlKTsKLW91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogb3V0OgogCXJldHVybiByZXQ7CkBAIC03MDgsNyArNjk1LDYgQEAKIAl9CiAKIAlwdGVfdW5tYXAocHRlKTsKLQogb3V0X3VubG9jazoKIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiB9CkBAIC04NjAsMyArODQ2LDQgQEAKIAkJcmV0ID0gU1dBUF9TVUNDRVNTOwogCXJldHVybiByZXQ7CiB9CisKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCBlYzY2MGQ4Li44NDA3NDI2IDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC01ODMsNyArNTgzLDcgQEAKIAlyZXR1cm4gY2FjaGVwLT5hcnJheVtzbXBfcHJvY2Vzc29yX2lkKCldOwogfQogCi1zdGF0aWMgaW5saW5lIGttZW1fY2FjaGVfdCAqa21lbV9maW5kX2dlbmVyYWxfY2FjaGVwKHNpemVfdCBzaXplLCBpbnQgZ2ZwZmxhZ3MpCitzdGF0aWMgaW5saW5lIGttZW1fY2FjaGVfdCAqX19maW5kX2dlbmVyYWxfY2FjaGVwKHNpemVfdCBzaXplLCBpbnQgZ2ZwZmxhZ3MpCiB7CiAJc3RydWN0IGNhY2hlX3NpemVzICpjc2l6ZXAgPSBtYWxsb2Nfc2l6ZXM7CiAKQEAgLTYwNyw2ICs2MDcsMTIgQEAKIAlyZXR1cm4gY3NpemVwLT5jc19jYWNoZXA7CiB9CiAKK2ttZW1fY2FjaGVfdCAqa21lbV9maW5kX2dlbmVyYWxfY2FjaGVwKHNpemVfdCBzaXplLCBpbnQgZ2ZwZmxhZ3MpCit7CisJcmV0dXJuIF9fZmluZF9nZW5lcmFsX2NhY2hlcChzaXplLCBnZnBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGttZW1fZmluZF9nZW5lcmFsX2NhY2hlcCk7CisKIC8qIENhbCB0aGUgbnVtIG9ianMsIHdhc3RhZ2UsIGFuZCBieXRlcyBsZWZ0IG92ZXIgZm9yIGEgZ2l2ZW4gc2xhYiBzaXplLiAqLwogc3RhdGljIHZvaWQgY2FjaGVfZXN0aW1hdGUodW5zaWduZWQgbG9uZyBnZnBvcmRlciwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwKIAkJIGludCBmbGFncywgc2l6ZV90ICpsZWZ0X292ZXIsIHVuc2lnbmVkIGludCAqbnVtKQpAQCAtNjcyLDE0ICs2NzgsMTEgQEAKIAlpbnQgbWVtc2l6ZSA9IHNpemVvZih2b2lkKikqZW50cmllcytzaXplb2Yoc3RydWN0IGFycmF5X2NhY2hlKTsKIAlzdHJ1Y3QgYXJyYXlfY2FjaGUgKm5jID0gTlVMTDsKIAotCWlmIChjcHUgIT0gLTEpIHsKLQkJa21lbV9jYWNoZV90ICpjYWNoZXA7Ci0JCWNhY2hlcCA9IGttZW1fZmluZF9nZW5lcmFsX2NhY2hlcChtZW1zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGNhY2hlcCkKLQkJCW5jID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlcCwgY3B1X3RvX25vZGUoY3B1KSk7Ci0JfQotCWlmICghbmMpCisJaWYgKGNwdSA9PSAtMSkKIAkJbmMgPSBrbWFsbG9jKG1lbXNpemUsIEdGUF9LRVJORUwpOworCWVsc2UKKwkJbmMgPSBrbWFsbG9jX25vZGUobWVtc2l6ZSwgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoY3B1KSk7CisKIAlpZiAobmMpIHsKIAkJbmMtPmF2YWlsID0gMDsKIAkJbmMtPmxpbWl0ID0gZW50cmllczsKQEAgLTE2NjMsNyArMTY2Niw3IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KGNhY2hlcC0+ZmxhZ3MgJiBTTEFCX0RFU1RST1lfQllfUkNVKSkKLQkJc3luY2hyb25pemVfa2VybmVsKCk7CisJCXN5bmNocm9uaXplX3JjdSgpOwogCiAJLyogbm8gY3B1X29ubGluZSBjaGVjayByZXF1aXJlZCBoZXJlIHNpbmNlIHdlIGNsZWFyIHRoZSBwZXJjcHUKIAkgKiBhcnJheSBvbiBjcHUgb2ZmbGluZSBhbmQgc2V0IHRoaXMgdG8gTlVMTC4KQEAgLTIzNjEsNyArMjM2NCw3IEBACiAgKiBhbmQgY2FuIHNsZWVwLiBBbmQgaXQgd2lsbCBhbGxvY2F0ZSBtZW1vcnkgb24gdGhlIGdpdmVuIG5vZGUsIHdoaWNoCiAgKiBjYW4gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2UgZm9yIGNwdSBib3VuZCBzdHJ1Y3R1cmVzLgogICovCi12b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoa21lbV9jYWNoZV90ICpjYWNoZXAsIGludCBub2RlaWQpCit2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoa21lbV9jYWNoZV90ICpjYWNoZXAsIGludCBmbGFncywgaW50IG5vZGVpZCkKIHsKIAlpbnQgbG9vcDsKIAl2b2lkICpvYmpwOwpAQCAtMjM5Myw3ICsyMzk2LDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZjYWNoZXAtPnNwaW5sb2NrKTsKIAogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQlpZiAoIWNhY2hlX2dyb3coY2FjaGVwLCBHRlBfS0VSTkVMLCBub2RlaWQpKSB7CisJCWlmICghY2FjaGVfZ3JvdyhjYWNoZXAsIGZsYWdzLCBub2RlaWQpKSB7CiAJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtMjQzNSw2ICsyNDM4LDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2Nfbm9kZSk7CiAKK3ZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgbm9kZSkKK3sKKwlrbWVtX2NhY2hlX3QgKmNhY2hlcDsKKworCWNhY2hlcCA9IGttZW1fZmluZF9nZW5lcmFsX2NhY2hlcChzaXplLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KGNhY2hlcCA9PSBOVUxMKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAsIGZsYWdzLCBub2RlKTsKK30KK0VYUE9SVF9TWU1CT0woa21hbGxvY19ub2RlKTsKICNlbmRpZgogCiAvKioKQEAgLTI0NjIsNyArMjQ3NSwxMiBAQAogewogCWttZW1fY2FjaGVfdCAqY2FjaGVwOwogCi0JY2FjaGVwID0ga21lbV9maW5kX2dlbmVyYWxfY2FjaGVwKHNpemUsIGZsYWdzKTsKKwkvKiBJZiB5b3Ugd2FudCB0byBzYXZlIGEgZmV3IGJ5dGVzIC50ZXh0IHNwYWNlOiByZXBsYWNlCisJICogX18gd2l0aCBrbWVtXy4KKwkgKiBUaGVuIGttYWxsb2MgdXNlcyB0aGUgdW5pbmxpbmVkIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBpbmxpbmUKKwkgKiBmdW5jdGlvbnMuCisJICovCisJY2FjaGVwID0gX19maW5kX2dlbmVyYWxfY2FjaGVwKHNpemUsIGZsYWdzKTsKIAlpZiAodW5saWtlbHkoY2FjaGVwID09IE5VTEwpKQogCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gX19jYWNoZV9hbGxvYyhjYWNoZXAsIGZsYWdzKTsKQEAgLTI0ODksOSArMjUwNyw4IEBACiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewogCQlpZiAoIWNwdV9wb3NzaWJsZShpKSkKIAkJCWNvbnRpbnVlOwotCQlwZGF0YS0+cHRyc1tpXSA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZSgKLQkJCQlrbWVtX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZSwgR0ZQX0tFUk5FTCksCi0JCQkJY3B1X3RvX25vZGUoaSkpOworCQlwZGF0YS0+cHRyc1tpXSA9IGttYWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMLAorCQkJCQkJY3B1X3RvX25vZGUoaSkpOwogCiAJCWlmICghcGRhdGEtPnB0cnNbaV0pCiAJCQlnb3RvIHVud2luZF9vb207CmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggYTA2M2E5MC4uNGYyNTE3NyAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCisrKyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMTQzLDcgKzE0Myw2IEBACiBpbnQgYWRkX3RvX3N3YXAoc3RydWN0IHBhZ2UgKiBwYWdlKQogewogCXN3cF9lbnRyeV90IGVudHJ5OwotCWludCBwZl9mbGFnczsKIAlpbnQgZXJyOwogCiAJaWYgKCFQYWdlTG9ja2VkKHBhZ2UpKQpAQCAtMTU0LDI5ICsxNTMsMTkgQEAKIAkJaWYgKCFlbnRyeS52YWwpCiAJCQlyZXR1cm4gMDsKIAotCQkvKiBSYWRpeC10cmVlIG5vZGUgYWxsb2NhdGlvbnMgYXJlIHBlcmZvcm1pbmcKLQkJICogR0ZQX0FUT01JQyBhbGxvY2F0aW9ucyB1bmRlciBQRl9NRU1BTExPQy4gIAotCQkgKiBUaGV5IGNhbiBjb21wbGV0ZWx5IGV4aGF1c3QgdGhlIHBhZ2UgYWxsb2NhdG9yLiAgCisJCS8qCisJCSAqIFJhZGl4LXRyZWUgbm9kZSBhbGxvY2F0aW9ucyBmcm9tIFBGX01FTUFMTE9DIGNvbnRleHRzIGNvdWxkCisJCSAqIGNvbXBsZXRlbHkgZXhoYXVzdCB0aGUgcGFnZSBhbGxvY2F0b3IuIF9fR0ZQX05PTUVNQUxMT0MKKwkJICogc3RvcHMgZW1lcmdlbmN5IHJlc2VydmVzIGZyb20gYmVpbmcgYWxsb2NhdGVkLgogCQkgKgotCQkgKiBTbyBQRl9NRU1BTExPQyBpcyBkcm9wcGVkIGhlcmUuICBUaGlzIGNhdXNlcyB0aGUgc2xhYiAKLQkJICogYWxsb2NhdGlvbnMgdG8gZmFpbCBlYXJsaWVyLCBzbyByYWRpeC10cmVlIG5vZGVzIHdpbGwgCi0JCSAqIHRoZW4gYmUgYWxsb2NhdGVkIGZyb20gdGhlIG1lbXBvb2wgcmVzZXJ2ZXMuCi0JCSAqCi0JCSAqIFdlJ3JlIHN0aWxsIHVzaW5nIF9fR0ZQX0hJR0ggZm9yIHJhZGl4LXRyZWUgbm9kZQotCQkgKiBhbGxvY2F0aW9ucywgc28gc29tZSBvZiB0aGUgZW1lcmdlbmN5IHBvb2xzIGFyZSBhdmFpbGFibGUsCi0JCSAqIGp1c3Qgbm90IGFsbCBvZiB0aGVtLgorCQkgKiBUT0RPOiB0aGlzIGNvdWxkIGNhdXNlIGEgdGhlb3JldGljYWwgbWVtb3J5IHJlY2xhaW0KKwkJICogZGVhZGxvY2sgaW4gdGhlIHN3YXAgb3V0IHBhdGguCiAJCSAqLwotCi0JCXBmX2ZsYWdzID0gY3VycmVudC0+ZmxhZ3M7Ci0JCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9NRU1BTExPQzsKLQogCQkvKgogCQkgKiBBZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYW5kIG1hcmsgaXQgZGlydHkKIAkJICovCi0JCWVyciA9IF9fYWRkX3RvX3N3YXBfY2FjaGUocGFnZSwgZW50cnksIEdGUF9BVE9NSUN8X19HRlBfTk9XQVJOKTsKLQotCQlpZiAocGZfZmxhZ3MgJiBQRl9NRU1BTExPQykKLQkJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOworCQllcnIgPSBfX2FkZF90b19zd2FwX2NhY2hlKHBhZ2UsIGVudHJ5LAorCQkJCUdGUF9BVE9NSUN8X19HRlBfTk9NRU1BTExPQ3xfX0dGUF9OT1dBUk4pOwogCiAJCXN3aXRjaCAoZXJyKSB7CiAJCWNhc2UgMDoJCQkJLyogU3VjY2VzcyAqLwpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggYzlhNjNmMC4uNjBjODc2NCAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYworKysgYi9tbS90cnVuY2F0ZS5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAogLyoqCiAgKiBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSAtIHJlbW92ZSByYW5nZSBvZiBwYWdlcyBmcm9tIGFuIGFkZHJlc3Nfc3BhY2UKLSAqIEBtYXBwaW5nIC0gdGhlIGFkZHJlc3Nfc3BhY2UKKyAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzc19zcGFjZQogICogQHN0YXJ0OiB0aGUgcGFnZSBvZmZzZXQgJ2Zyb20nIHdoaWNoIHRvIGludmFsaWRhdGUKICAqIEBlbmQ6IHRoZSBwYWdlIG9mZnNldCAndG8nIHdoaWNoIHRvIGludmFsaWRhdGUgKGluY2x1c2l2ZSkKICAqCkBAIC0zMjIsNyArMzIyLDcgQEAKIAogLyoqCiAgKiBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMiAtIHJlbW92ZSBhbGwgcGFnZXMgZnJvbSBhbiBhZGRyZXNzX3NwYWNlCi0gKiBAbWFwcGluZyAtIHRoZSBhZGRyZXNzX3NwYWNlCisgKiBAbWFwcGluZzogdGhlIGFkZHJlc3Nfc3BhY2UKICAqCiAgKiBBbnkgcGFnZXMgd2hpY2ggYXJlIGZvdW5kIHRvIGJlIG1hcHBlZCBpbnRvIHBhZ2V0YWJsZXMgYXJlIHVubWFwcGVkIHByaW9yIHRvCiAgKiBpbnZhbGlkYXRpb24uCmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggYzYxODJmNi4uMmJkODNlNSAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtNDc1LDYgKzQ3NSwxMCBAQAogCiBFWFBPUlRfU1lNQk9MKHZtYWxsb2MpOwogCisjaWZuZGVmIFBBR0VfS0VSTkVMX0VYRUMKKyMgZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMgUEFHRV9LRVJORUwKKyNlbmRpZgorCiAvKioKICAqCXZtYWxsb2NfZXhlYyAgLSAgYWxsb2NhdGUgdmlydHVhbGx5IGNvbnRpZ3VvdXMsIGV4ZWN1dGFibGUgbWVtb3J5CiAgKgpAQCAtNDg4LDEwICs0OTIsNiBAQAogICoJdXNlIF9fdm1hbGxvYygpIGluc3RlYWQuCiAgKi8KIAotI2lmbmRlZiBQQUdFX0tFUk5FTF9FWEVDCi0jIGRlZmluZSBQQUdFX0tFUk5FTF9FWEVDIFBBR0VfS0VSTkVMCi0jZW5kaWYKLQogdm9pZCAqdm1hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlyZXR1cm4gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTF9FWEVDKTsKZGlmZiAtLWdpdCBhL25ldC84MDIvZmRkaS5jIGIvbmV0LzgwMi9mZGRpLmMKaW5kZXggZjlhMzFhOS4uZWJjZjQ4MyAxMDA2NDQKLS0tIGEvbmV0LzgwMi9mZGRpLmMKKysrIGIvbmV0LzgwMi9mZGRpLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqIEF1dGhvcnM6CUxhd3JlbmNlIFYuIFN0ZWZhbmksIDxzdGVmYW5pQGxrZy5kZWMuY29tPgogICoKICAqCQlmZGRpLmMgaXMgYmFzZWQgb24gcHJldmlvdXMgZXRoLmMgYW5kIHRyLmMgd29yayBieQotICoJCQlSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKgkJCVJvc3MgQmlybwogICoJCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCQkJTWFyayBFdmFucywgPGV2YW5zbXBAdWh1cmEuYXN0b24uYWMudWs+CiAgKgkJCUZsb3JpYW4gTGEgUm9jaGUsIDxyenNmbEByei51bmktc2IuZGU+CmRpZmYgLS1naXQgYS9uZXQvODAyL2hpcHBpLmMgYi9uZXQvODAyL2hpcHBpLmMKaW5kZXggNGViMTM1Yy4uMDUxZThhZiAxMDA2NDQKLS0tIGEvbmV0LzgwMi9oaXBwaS5jCisrKyBiL25ldC84MDIvaGlwcGkuYwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOglAKCMpaGlwcGkuYwkxLjAuMAkwNS8yOS85NwogICoKLSAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCU1hcmsgRXZhbnMsIDxldmFuc21wQHVodXJhLmFzdG9uLmFjLnVrPgogICoJCUZsb3JpYW4gIExhIFJvY2hlLCA8cnpzZmxAcnoudW5pLXNiLmRlPgpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5wcm9jLmMgYi9uZXQvODAyMXEvdmxhbnByb2MuYwppbmRleCBjMzJkMjdhLi43YjIxNGNmIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbnByb2MuYworKysgYi9uZXQvODAyMXEvdmxhbnByb2MuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4JCS8qIGttYWxsb2MoKSwga2ZyZWUoKSAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiB2ZXJpZnlfYXJlYSgpLCBldGMuICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbSosIHN0ciogZnVuY3Rpb25zICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogX19pbml0ZnVuYyBldCBhbC4gKi8KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvZGV2LmMgYi9uZXQvYXBwbGV0YWxrL2Rldi5jCmluZGV4IDc2NTk4NDQuLjEyMzdlMjAgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvZGV2LmMKKysrIGIvbmV0L2FwcGxldGFsay9kZXYuYwpAQCAtMTksNyArMTksNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi12b2lkIGx0YWxrX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBsdGFsa19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCS8qIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSB3aXRoIGxvY2FsdGFsay1nZW5lcmljIHZhbHVlcy4gKi8KIAkKQEAgLTQwLDQgKzQwLDIyIEBACiAKIAlkZXYtPmZsYWdzCQk9IElGRl9CUk9BRENBU1R8SUZGX01VTFRJQ0FTVHxJRkZfTk9BUlA7CiB9Ci1FWFBPUlRfU1lNQk9MKGx0YWxrX3NldHVwKTsKKworLyoqCisgKiBhbGxvY19sdGFsa2RldiAtIEFsbG9jYXRlcyBhbmQgc2V0cyB1cCBhbiBsb2NhbHRhbGsgZGV2aWNlCisgKiBAc2l6ZW9mX3ByaXY6IFNpemUgb2YgYWRkaXRpb25hbCBkcml2ZXItcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gYmUgYWxsb2NhdGVkCisgKglmb3IgdGhpcyBsb2NhbHRhbGsgZGV2aWNlCisgKgorICogRmlsbCBpbiB0aGUgZmllbGRzIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlIHdpdGggbG9jYWx0YWxrLWdlbmVyaWMKKyAqIHZhbHVlcy4gQmFzaWNhbGx5IGRvZXMgZXZlcnl0aGluZyBleGNlcHQgcmVnaXN0ZXJpbmcgdGhlIGRldmljZS4KKyAqCisgKiBDb25zdHJ1Y3RzIGEgbmV3IG5ldCBkZXZpY2UsIGNvbXBsZXRlIHdpdGggYSBwcml2YXRlIGRhdGEgYXJlYSBvZgorICogc2l6ZSBAc2l6ZW9mX3ByaXYuICBBIDMyLWJ5dGUgKG5vdCBiaXQpIGFsaWdubWVudCBpcyBlbmZvcmNlZCBmb3IKKyAqIHRoaXMgcHJpdmF0ZSBkYXRhIGFyZWEuCisgKi8KKworc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2x0YWxrZGV2KGludCBzaXplb2ZfcHJpdikKK3sKKwlyZXR1cm4gYWxsb2NfbmV0ZGV2KHNpemVvZl9wcml2LCAibHQlZCIsIGx0YWxrX3NldHVwKTsKK30KK0VYUE9SVF9TWU1CT0woYWxsb2NfbHRhbGtkZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jb21tb24uYyBiL25ldC9hdG0vY29tbW9uLmMKaW5kZXggNmQxNmJlMy4uZTkzZTgzOCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jb21tb24uYworKysgYi9uZXQvYXRtL2NvbW1vbi5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CS8qIFNPTF9TT0NLRVQgKi8KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiBlcnJvciBjb2RlcyAqLwogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgkJLyogdmVyaWZ5X2FyZWEgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgkJLyogc3RydWN0IHRpbWV2YWwgKi8KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTU0MCw3ICs1NDAsNyBAQAogCQllcnJvciA9IC1FTVNHU0laRTsKIAkJZ290byBvdXQ7CiAJfQotCS8qIHZlcmlmeV9hcmVhIGlzIGRvbmUgYnkgbmV0L3NvY2tldC5jICovCisKIAllZmYgPSAoc2l6ZSszKSAmIH4zOyAvKiBhbGlnbiB0byB3b3JkIGJvdW5kYXJ5ICovCiAJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJZXJyb3IgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9yZXNvdXJjZXMuYyBiL25ldC9hdG0vcmVzb3VyY2VzLmMKaW5kZXggMzNmMTY4NS4uYTU3YTkyNiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9yZXNvdXJjZXMuYworKysgYi9uZXQvYXRtL3Jlc291cmNlcy5jCkBAIC00NCwxMSArNDQsNiBAQAogCXJldHVybiBkZXY7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZnJlZV9hdG1fZGV2KHN0cnVjdCBhdG1fZGV2ICpkZXYpCi17Ci0Ja2ZyZWUoZGV2KTsKLX0KLQogc3RhdGljIHN0cnVjdCBhdG1fZGV2ICpfX2F0bV9kZXZfbG9va3VwKGludCBudW1iZXIpCiB7CiAJc3RydWN0IGF0bV9kZXYgKmRldjsKQEAgLTkwLDcgKzg1LDcgQEAKIAkJaWYgKChpbnVzZSA9IF9fYXRtX2Rldl9sb29rdXAobnVtYmVyKSkpIHsKIAkJCWF0bV9kZXZfcHV0KGludXNlKTsKIAkJCXNwaW5fdW5sb2NrKCZhdG1fZGV2X2xvY2spOwotCQkJX19mcmVlX2F0bV9kZXYoZGV2KTsKKwkJCWtmcmVlKGRldik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQlkZXYtPm51bWJlciA9IG51bWJlcjsKQEAgLTExOSw3ICsxMTQsNyBAQAogCQlzcGluX2xvY2soJmF0bV9kZXZfbG9jayk7CiAJCWxpc3RfZGVsKCZkZXYtPmRldl9saXN0KTsKIAkJc3Bpbl91bmxvY2soJmF0bV9kZXZfbG9jayk7Ci0JCV9fZnJlZV9hdG1fZGV2KGRldik7CisJCWtmcmVlKGRldik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTQ4LDcgKzE0Myw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQlfX2ZyZWVfYXRtX2RldihkZXYpOworCWtmcmVlKGRldik7CiB9CiAKIHZvaWQgc2h1dGRvd25fYXRtX2RldihzdHJ1Y3QgYXRtX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9zaWduYWxpbmcuYyBiL25ldC9hdG0vc2lnbmFsaW5nLmMKaW5kZXggNmZmODAzMS4uZjdjNDQ5YSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9zaWduYWxpbmcuYworKysgYi9uZXQvYXRtL3NpZ25hbGluZy5jCkBAIC0xMzQsNiArMTM0LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIGFzX2luZGljYXRlOgogCQkJdmNjID0gKihzdHJ1Y3QgYXRtX3ZjYyAqKikgJm1zZy0+bGlzdGVuX3ZjYzsKKwkJCXNrID0gc2tfYXRtKHZjYyk7CiAJCQlEUFJJTlRLKCJhc19pbmRpY2F0ZSEhIVxuIik7CiAJCQlsb2NrX3NvY2soc2spOwogCQkJaWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpIHsKZGlmZiAtLWdpdCBhL25ldC9heDI1L2FmX2F4MjUuYyBiL25ldC9heDI1L2FmX2F4MjUuYwppbmRleCAzM2IxYTM3Li43MDcwOTdkIDEwMDY0NAotLS0gYS9uZXQvYXgyNS9hZl9heDI1LmMKKysrIGIvbmV0L2F4MjUvYWZfYXgyNS5jCkBAIC0xNTg3LDkgKzE1ODcsNyBAQAogCSphc21wdHIgPSBBWDI1X1VJOwogCiAJLyogRGF0YWdyYW0gZnJhbWVzIGdvIHN0cmFpZ2h0IG91dCBvZiB0aGUgZG9vciBhcyBVSSAqLwotCXNrYi0+ZGV2ID0gYXgyNS0+YXgyNV9kZXYtPmRldjsKLQotCWF4MjVfcXVldWVfeG1pdChza2IpOworCWF4MjVfcXVldWVfeG1pdChza2IsIGF4MjUtPmF4MjVfZGV2LT5kZXYpOwogCiAJZXJyID0gbGVuOwogCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X2RzX3N1YnIuYyBiL25ldC9heDI1L2F4MjVfZHNfc3Vici5jCmluZGV4IDEwZmZkMmIuLjFkNGFiNjQgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfZHNfc3Vici5jCisrKyBiL25ldC9heDI1L2F4MjVfZHNfc3Vici5jCkBAIC0xNDMsOCArMTQzLDcgQEAKIAkqcCsrID0gY21kOwogCSpwKysgPSBwYXJhbTsKIAotCXNrYi0+ZGV2ICAgICAgPSBheDI1X2Rldi0+ZGV2OwotCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9BWDI1KTsKKwlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgYXgyNV9kZXYtPmRldik7CiAKIAlkZXZfcXVldWVfeG1pdChza2IpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9pcC5jIGIvbmV0L2F4MjUvYXgyNV9pcC5jCmluZGV4IDA0ZDcxMTMuLmJiYTAxNzMgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfaXAuYworKysgYi9uZXQvYXgyNS9heDI1X2lwLmMKQEAgLTE5OSw5ICsxOTksNyBAQAogCQlza2IgPSBvdXJza2I7CiAJfQogCi0Jc2tiLT5kZXYgICAgICA9IGRldjsKLQotCWF4MjVfcXVldWVfeG1pdChza2IpOworCWF4MjVfcXVldWVfeG1pdChza2IsIGRldik7CiAKIHB1dDoKIAlheDI1X3B1dF9yb3V0ZShyb3V0ZSk7CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X291dC5jIGIvbmV0L2F4MjUvYXgyNV9vdXQuYwppbmRleCAzNDc1YTNhLi41ZmMwNDhkIDEwMDY0NAotLS0gYS9uZXQvYXgyNS9heDI1X291dC5jCisrKyBiL25ldC9heDI1L2F4MjVfb3V0LmMKQEAgLTM0MCwyMSArMzQwLDE4IEBACiAKIAlheDI1X2FkZHJfYnVpbGQocHRyLCAmYXgyNS0+c291cmNlX2FkZHIsICZheDI1LT5kZXN0X2FkZHIsIGF4MjUtPmRpZ2lwZWF0LCB0eXBlLCBheDI1LT5tb2R1bHVzKTsKIAotCXNrYi0+ZGV2ID0gYXgyNS0+YXgyNV9kZXYtPmRldjsKLQotCWF4MjVfcXVldWVfeG1pdChza2IpOworCWF4MjVfcXVldWVfeG1pdChza2IsIGF4MjUtPmF4MjVfZGV2LT5kZXYpOwogfQogCiAvKgogICoJQSBzbWFsbCBzaGltIHRvIGRldl9xdWV1ZV94bWl0IHRvIGFkZCB0aGUgS0lTUyBjb250cm9sIGJ5dGUsIGFuZCBkbwogICoJYW55IHBhY2tldCBmb3J3YXJkaW5nIGluIG9wZXJhdGlvbi4KICAqLwotdm9pZCBheDI1X3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgYXgyNV9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgY2hhciAqcHRyOwogCi0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0FYMjUpOwotCXNrYi0+ZGV2ICAgICAgPSBheDI1X2Z3ZF9kZXYoc2tiLT5kZXYpOworCXNrYi0+cHJvdG9jb2wgPSBheDI1X3R5cGVfdHJhbnMoc2tiLCBheDI1X2Z3ZF9kZXYoZGV2KSk7CiAKIAlwdHIgID0gc2tiX3B1c2goc2tiLCAxKTsKIAkqcHRyID0gMHgwMDsJCQkvKiBLSVNTICovCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X3N1YnIuYyBiL25ldC9heDI1L2F4MjVfc3Vici5jCmluZGV4IDhjZjcyNzAuLjk5Njk0YjUgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfc3Vici5jCisrKyBiL25ldC9heDI1L2F4MjVfc3Vici5jCkBAIC0yMjAsOSArMjIwLDcgQEAKIAlkcHRyICA9IHNrYl9wdXNoKHNrYiwgYXgyNV9hZGRyX3NpemUoZGlnaSkpOwogCWRwdHIgKz0gYXgyNV9hZGRyX2J1aWxkKGRwdHIsIGRlc3QsIHNyYywgJnJldGRpZ2ksIEFYMjVfUkVTUE9OU0UsIEFYMjVfTU9EVUxVUyk7CiAKLQlza2ItPmRldiAgICAgID0gZGV2OwotCi0JYXgyNV9xdWV1ZV94bWl0KHNrYik7CisJYXgyNV9xdWV1ZV94bWl0KHNrYiwgZGV2KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCmluZGV4IDE2NTBjNmIuLjEyYjQzMzQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKKysrIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2JuZXAvc29jay5jIGIvbmV0L2JsdWV0b290aC9ibmVwL3NvY2suYwppbmRleCA5YThkOTlhLi45Nzc4YzZhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2JuZXAvc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvYm5lcC9zb2NrLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY2FwaS5jIGIvbmV0L2JsdWV0b290aC9jbXRwL2NhcGkuYwppbmRleCAxZTVjMDMwLi5iMmU3ZTM4IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY2FwaS5jCisrKyBiL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYwppbmRleCAyMGNlMDRmLi4yZTM0MWRlIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2NtdHAvc29jay5jIGIvbmV0L2JsdWV0b290aC9jbXRwL3NvY2suYwppbmRleCA0YzdmOWUyLi5iZWIwNDViIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2NtdHAvc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvY210cC9zb2NrLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKaW5kZXggNzE3NjJkNy4uYTMxMjQ0ZSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwppbmRleCA4NjBkYmE3Li5mYjU1MjQzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggOGNjYmE4ZS4uYzRiNTkyYiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc29jay5jIGIvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCmluZGV4IGM5NzkyYmEuLmViZGNjZTUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwppbmRleCAyY2Y5OGNlLi5hZmZiYzU1IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvc29jay5jIGIvbmV0L2JsdWV0b290aC9oaWRwL3NvY2suYwppbmRleCBmYWJiMzZkLi5mODk4NmY4IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9zb2NrLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKaW5kZXggYzEyYmFiYy4uMzJmY2NmYiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcC5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwppbmRleCA2NDAwMjhhLi5mM2Y2MzU1IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zY28uYyBiL25ldC9ibHVldG9vdGgvc2NvLmMKaW5kZXggM2U3NTBlZi4uNzQ2YzExZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zY28uYworKysgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggZDFiZmQyNy4uZmNlZTA1NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC0xMTUsMTAgKzExNSwxMCBAQAogCiAvKioKICAqCXNrYl9yZWN2X2RhdGFncmFtIC0gUmVjZWl2ZSBhIGRhdGFncmFtIHNrYnVmZgotICoJQHNrIC0gc29ja2V0Ci0gKglAZmxhZ3MgLSBNU0dfIGZsYWdzCi0gKglAbm9ibG9jayAtIGJsb2NraW5nIG9wZXJhdGlvbj8KLSAqCUBlcnIgLSBlcnJvciBjb2RlIHJldHVybmVkCisgKglAc2s6IHNvY2tldAorICoJQGZsYWdzOiBNU0dfIGZsYWdzCisgKglAbm9ibG9jazogYmxvY2tpbmcgb3BlcmF0aW9uPworICoJQGVycjogZXJyb3IgY29kZSByZXR1cm5lZAogICoKICAqCUdldCBhIGRhdGFncmFtIHNrYnVmZiwgdW5kZXJzdGFuZHMgdGhlIHBlZWtpbmcsIG5vbmJsb2NraW5nIHdha2V1cHMKICAqCWFuZCBwb3NzaWJsZSByYWNlcy4gVGhpcyByZXBsYWNlcyBpZGVudGljYWwgY29kZSBpbiBwYWNrZXQsIHJhdyBhbmQKQEAgLTIwMSwxMCArMjAxLDEwIEBACiAKIC8qKgogICoJc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMgLSBDb3B5IGEgZGF0YWdyYW0gdG8gYW4gaW92ZWMuCi0gKglAc2tiIC0gYnVmZmVyIHRvIGNvcHkKLSAqCUBvZmZzZXQgLSBvZmZzZXQgaW4gdGhlIGJ1ZmZlciB0byBzdGFydCBjb3B5aW5nIGZyb20KLSAqCUBpb3ZlYyAtIGlvIHZlY3RvciB0byBjb3B5IHRvCi0gKglAbGVuIC0gYW1vdW50IG9mIGRhdGEgdG8gY29weSBmcm9tIGJ1ZmZlciB0byBpb3ZlYworICoJQHNrYjogYnVmZmVyIHRvIGNvcHkKKyAqCUBvZmZzZXQ6IG9mZnNldCBpbiB0aGUgYnVmZmVyIHRvIHN0YXJ0IGNvcHlpbmcgZnJvbQorICoJQHRvOiBpbyB2ZWN0b3IgdG8gY29weSB0bworICoJQGxlbjogYW1vdW50IG9mIGRhdGEgdG8gY29weSBmcm9tIGJ1ZmZlciB0byBpb3ZlYwogICoKICAqCU5vdGU6IHRoZSBpb3ZlYyBpcyBtb2RpZmllZCBkdXJpbmcgdGhlIGNvcHkuCiAgKi8KQEAgLTM3Nyw5ICszNzcsOSBAQAogCiAvKioKICAqCXNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjIC0gQ29weSBhbmQgY2hlY2t1bSBza2IgdG8gdXNlciBpb3ZlYy4KLSAqCUBza2IgLSBza2J1ZmYKLSAqCUBobGVuIC0gaGFyZHdhcmUgbGVuZ3RoCi0gKglAaW92ZWMgLSBpbyB2ZWN0b3IKKyAqCUBza2I6IHNrYnVmZgorICoJQGhsZW46IGhhcmR3YXJlIGxlbmd0aAorICoJQGlvdjogaW8gdmVjdG9yCiAgKiAKICAqCUNhbGxlciBfbXVzdF8gY2hlY2sgdGhhdCBza2Igd2lsbCBmaXQgdG8gdGhpcyBpb3ZlYy4KICAqCkBAIC00MjUsOSArNDI1LDkgQEAKIAogLyoqCiAgKiAJZGF0YWdyYW1fcG9sbCAtIGdlbmVyaWMgZGF0YWdyYW0gcG9sbAotICoJQGZpbGUgLSBmaWxlIHN0cnVjdAotICoJQHNvY2sgLSBzb2NrZXQKLSAqCUB3YWl0IC0gcG9sbCB0YWJsZQorICoJQGZpbGU6IGZpbGUgc3RydWN0CisgKglAc29jazogc29ja2V0CisgKglAd2FpdDogcG9sbCB0YWJsZQogICoKICAqCURhdGFncmFtIHBvbGw6IEFnYWluIHRvdGFsbHkgZ2VuZXJpYy4gVGhpcyBhbHNvIGhhbmRsZXMKICAqCXNlcXVlbmNlZCBwYWNrZXQgc29ja2V0cyBwcm92aWRpbmcgdGhlIHNvY2tldCByZWNlaXZlIHF1ZXVlCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDQyMzQ0ZDkuLmQ0ZDllMjYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC03LDcgKzcsNyBAQAogICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICoJRGVyaXZlZCBmcm9tIHRoZSBub24gSVAgcGFydHMgb2YgZGV2LmMgMS4wLjE5Ci0gKiAJCUF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIAkJQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCQkJCU1hcmsgRXZhbnMsIDxldmFuc21wQHVodXJhLmFzdG9uLmFjLnVrPgogICoKQEAgLTEyMTQsNiArMTIxNCwxOSBAQAogICoJQSBuZWdhdGl2ZSBlcnJubyBjb2RlIGlzIHJldHVybmVkIG9uIGEgZmFpbHVyZS4gQSBzdWNjZXNzIGRvZXMgbm90CiAgKglndWFyYW50ZWUgdGhlIGZyYW1lIHdpbGwgYmUgdHJhbnNtaXR0ZWQgYXMgaXQgbWF5IGJlIGRyb3BwZWQgZHVlCiAgKgl0byBjb25nZXN0aW9uIG9yIHRyYWZmaWMgc2hhcGluZy4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICBJIG5vdGljZSB0aGlzIG1ldGhvZCBjYW4gYWxzbyByZXR1cm4gZXJyb3JzIGZyb20gdGhlIHF1ZXVlIGRpc2NpcGxpbmVzLAorICogICAgICBpbmNsdWRpbmcgTkVUX1hNSVRfRFJPUCwgd2hpY2ggaXMgYSBwb3NpdGl2ZSB2YWx1ZS4gIFNvLCBlcnJvcnMgY2FuIGFsc28KKyAqICAgICAgYmUgcG9zaXRpdmUuCisgKgorICogICAgICBSZWdhcmRsZXNzIG9mIHRoZSByZXR1cm4gdmFsdWUsIHRoZSBza2IgaXMgY29uc3VtZWQsIHNvIGl0IGlzIGN1cnJlbnRseQorICogICAgICBkaWZmaWN1bHQgdG8gcmV0cnkgYSBzZW5kIHRvIHRoaXMgbWV0aG9kLiAgKFlvdSBjYW4gYnVtcCB0aGUgcmVmIGNvdW50CisgKiAgICAgIGJlZm9yZSBzZW5kaW5nIHRvIGhvbGQgYSByZWZlcmVuY2UgZm9yIHJldHJ5IGlmIHlvdSBhcmUgY2FyZWZ1bC4pCisgKgorICogICAgICBXaGVuIGNhbGxpbmcgdGhpcyBtZXRob2QsIGludGVycnVwdHMgTVVTVCBiZSBlbmFibGVkLiAgVGhpcyBpcyBiZWNhdXNlCisgKiAgICAgIHRoZSBCSCBlbmFibGUgY29kZSBtdXN0IGhhdmUgSVJRcyBlbmFibGVkIHNvIHRoYXQgaXQgd2lsbCBub3QgZGVhZGxvY2suCisgKiAgICAgICAgICAtLUJMRwogICovCiAKIGludCBkZXZfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMzA3OCw3ICszMDkxLDcgQEAKIHZvaWQgc3luY2hyb25pemVfbmV0KHZvaWQpIAogewogCW1pZ2h0X3NsZWVwKCk7Ci0Jc3luY2hyb25pemVfa2VybmVsKCk7CisJc3luY2hyb25pemVfcmN1KCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvaW92ZWMuYyBiL25ldC9jb3JlL2lvdmVjLmMKaW5kZXggZDU3YWNlOS4uNjVlNGI1NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvaW92ZWMuYworKysgYi9uZXQvY29yZS9pb3ZlYy5jCkBAIC0zMyw3ICszMyw3IEBACiAgKglWZXJpZnkgaW92ZWMuIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgaW92ZWMgaXMgYmlnIGVub3VnaAogICoJdG8gaG9sZCB0aGUgbWVzc2FnZSBpb3ZlYy4KICAqCi0gKglTYXZlIHRpbWUgbm90IGRvaW5nIHZlcmlmeV9hcmVhLiBjb3B5XypfdXNlciB3aWxsIG1ha2UgdGhpcyB3b3JrCisgKglTYXZlIHRpbWUgbm90IGRvaW5nIGFjY2Vzc19vay4gY29weV8qX3VzZXIgd2lsbCBtYWtlIHRoaXMgd29yawogICoJaW4gYW55IGNhc2UuCiAgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbGlua193YXRjaC5jIGIvbmV0L2NvcmUvbGlua193YXRjaC5jCmluZGV4IDQ4NTliNzQuLmQ0M2QxMjAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2xpbmtfd2F0Y2guYworKysgYi9uZXQvY29yZS9saW5rX3dhdGNoLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtNzQsNiArNzUsMTIgQEAKIAkJY2xlYXJfYml0KF9fTElOS19TVEFURV9MSU5LV0FUQ0hfUEVORElORywgJmRldi0+c3RhdGUpOwogCiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CisJCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CisJCQkJV0FSTl9PTihkZXYtPnFkaXNjX3NsZWVwaW5nID09ICZub29wX3FkaXNjKTsKKwkJCQlkZXZfYWN0aXZhdGUoZGV2KTsKKwkJCX0gZWxzZQorCQkJCWRldl9kZWFjdGl2YXRlKGRldik7CisKIAkJCW5ldGRldl9zdGF0ZV9jaGFuZ2UoZGV2KTsKIAkJfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDBhMmY2N2IuLjQzYmRjNTIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC0xOTUzLDcgKzE5NTMsNyBAQAogCXN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzICpzdCA9IHY7CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKLQkJc2VxX3ByaW50ZihzZXEsICJlbnRyaWVzICBhbGxvY3MgZGVzdHJveXMgaGFzaF9ncm93cyAgbG9va3VwcyBoaXRzICByZXNfZmFpbGVkICByY3ZfcHJvYmVzX21jYXN0IHJjdl9wcm9iZXNfdWNhc3QgIHBlcmlvZGljX2djX3J1bnMgZm9yY2VkX2djX3J1bnMgZm9yY2VkX2djX2dvYWxfbWlzc1xuIik7CisJCXNlcV9wcmludGYoc2VxLCAiZW50cmllcyAgYWxsb2NzIGRlc3Ryb3lzIGhhc2hfZ3Jvd3MgIGxvb2t1cHMgaGl0cyAgcmVzX2ZhaWxlZCAgcmN2X3Byb2Jlc19tY2FzdCByY3ZfcHJvYmVzX3VjYXN0ICBwZXJpb2RpY19nY19ydW5zIGZvcmNlZF9nY19ydW5zXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRmaWx0ZXIuYyBiL25ldC9jb3JlL25ldGZpbHRlci5jCmluZGV4IGU1MWNmYTQuLjIyYThmMTIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldGZpbHRlci5jCisrKyBiL25ldC9jb3JlL25ldGZpbHRlci5jCkBAIC0yMTcsMjEgKzIxNywxMCBAQAogCSAqIE5GX0lQX1JBV19JTlBVVCBhbmQgTkZfSVBfUFJFX1JPVVRJTkcuICAqLwogCWlmICghc2tiLT5kZXYpIHsKIAkJcHJpbnRrKCJpcF9sb2NhbF9kZWxpdmVyOiBza2ItPmRldiBpcyBOVUxMLlxuIik7Ci0JfQotCWVsc2UgaWYgKHN0cmNtcChza2ItPmRldi0+bmFtZSwgImxvIikgPT0gMCkgewotCQlpZiAoc2tiLT5uZl9kZWJ1ZyAhPSAoKDEgPDwgTkZfSVBfTE9DQUxfT1VUKQotCQkJCSAgICAgIHwgKDEgPDwgTkZfSVBfUE9TVF9ST1VUSU5HKQotCQkJCSAgICAgIHwgKDEgPDwgTkZfSVBfUFJFX1JPVVRJTkcpCi0JCQkJICAgICAgfCAoMSA8PCBORl9JUF9MT0NBTF9JTikpKSB7Ci0JCQlwcmludGsoImlwX2xvY2FsX2RlbGl2ZXI6IGJhZCBsb29wYmFjayBza2I6ICIpOwotCQkJZGVidWdfcHJpbnRfaG9va3NfaXAoc2tiLT5uZl9kZWJ1Zyk7Ci0JCQluZl9kdW1wX3NrYihQRl9JTkVULCBza2IpOwotCQl9Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCWlmIChza2ItPm5mX2RlYnVnICE9ICgoMTw8TkZfSVBfUFJFX1JPVVRJTkcpCiAJCQkJICAgICAgfCAoMTw8TkZfSVBfTE9DQUxfSU4pKSkgewotCQkJcHJpbnRrKCJpcF9sb2NhbF9kZWxpdmVyOiBiYWQgbm9uLWxvIHNrYjogIik7CisJCQlwcmludGsoImlwX2xvY2FsX2RlbGl2ZXI6IGJhZCBza2I6ICIpOwogCQkJZGVidWdfcHJpbnRfaG9va3NfaXAoc2tiLT5uZl9kZWJ1Zyk7CiAJCQluZl9kdW1wX3NrYihQRl9JTkVULCBza2IpOwogCQl9CkBAIC0yNDcsOCArMjM2LDYgQEAKIAkJZGVidWdfcHJpbnRfaG9va3NfaXAobmV3c2tiLT5uZl9kZWJ1Zyk7CiAJCW5mX2R1bXBfc2tiKFBGX0lORVQsIG5ld3NrYik7CiAJfQotCS8qIENsZWFyIHRvIGF2b2lkIGNvbmZ1c2luZyBpbnB1dCBjaGVjayAqLwotCW5ld3NrYi0+bmZfZGVidWcgPSAwOwogfQogCiB2b2lkIG5mX2RlYnVnX2lwX2ZpbmlzaF9vdXRwdXQyKHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDQ0ZGZhZjguLjAwY2FmNGIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTg3LDMwICs4NiwzMyBAQAogCiBzdHJ1Y3QgcnRuZXRsaW5rX2xpbmsgKiBydG5ldGxpbmtfbGlua3NbTlBST1RPXTsKIAotc3RhdGljIGNvbnN0IGludCBydG1fbWluWyhSVE1fTUFYKzEtUlRNX0JBU0UpLzRdID0KK3N0YXRpYyBjb25zdCBpbnQgcnRtX21pbltSVE1fTlJfRkFNSUxJRVNdID0KIHsKLQlOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpKSwKLQlOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSwKLQlOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCBydG1zZykpLAotCU5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IG5kbXNnKSksCi0JTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSwKLQlOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCB0Y21zZykpLAotCU5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHRjbXNnKSksCi0JTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgdGNtc2cpKSwKLQlOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCB0Y2Ftc2cpKQorCVtSVE1fRkFNKFJUTV9ORVdMSU5LKV0gICAgICA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpLAorCVtSVE1fRkFNKFJUTV9ORVdBRERSKV0gICAgICA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpLAorCVtSVE1fRkFNKFJUTV9ORVdST1VURSldICAgICA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHJ0bXNnKSksCisJW1JUTV9GQU0oUlRNX05FV05FSUdIKV0gICAgID0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgbmRtc2cpKSwKKwlbUlRNX0ZBTShSVE1fTkVXUlVMRSldICAgICAgPSBOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCBydG1zZykpLAorCVtSVE1fRkFNKFJUTV9ORVdRRElTQyldICAgICA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHRjbXNnKSksCisJW1JUTV9GQU0oUlRNX05FV1RDTEFTUyldICAgID0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgdGNtc2cpKSwKKwlbUlRNX0ZBTShSVE1fTkVXVEZJTFRFUildICAgPSBOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCB0Y21zZykpLAorCVtSVE1fRkFNKFJUTV9ORVdBQ1RJT04pXSAgICA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHRjYW1zZykpLAorCVtSVE1fRkFNKFJUTV9ORVdQUkVGSVgpXSAgICA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHJ0Z2VubXNnKSksCisJW1JUTV9GQU0oUlRNX0dFVE1VTFRJQ0FTVCldID0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgcnRnZW5tc2cpKSwKKwlbUlRNX0ZBTShSVE1fR0VUQU5ZQ0FTVCldICAgPSBOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCBydGdlbm1zZykpLAogfTsKIAotc3RhdGljIGNvbnN0IGludCBydGFfbWF4WyhSVE1fTUFYKzEtUlRNX0JBU0UpLzRdID0KK3N0YXRpYyBjb25zdCBpbnQgcnRhX21heFtSVE1fTlJfRkFNSUxJRVNdID0KIHsKLQlJRkxBX01BWCwKLQlJRkFfTUFYLAotCVJUQV9NQVgsCi0JTkRBX01BWCwKLQlSVEFfTUFYLAotCVRDQV9NQVgsCi0JVENBX01BWCwKLQlUQ0FfTUFYLAotCVRDQUFfTUFYCisJW1JUTV9GQU0oUlRNX05FV0xJTkspXSAgICAgID0gSUZMQV9NQVgsCisJW1JUTV9GQU0oUlRNX05FV0FERFIpXSAgICAgID0gSUZBX01BWCwKKwlbUlRNX0ZBTShSVE1fTkVXUk9VVEUpXSAgICAgPSBSVEFfTUFYLAorCVtSVE1fRkFNKFJUTV9ORVdORUlHSCldICAgICA9IE5EQV9NQVgsCisJW1JUTV9GQU0oUlRNX05FV1JVTEUpXSAgICAgID0gUlRBX01BWCwKKwlbUlRNX0ZBTShSVE1fTkVXUURJU0MpXSAgICAgPSBUQ0FfTUFYLAorCVtSVE1fRkFNKFJUTV9ORVdUQ0xBU1MpXSAgICA9IFRDQV9NQVgsCisJW1JUTV9GQU0oUlRNX05FV1RGSUxURVIpXSAgID0gVENBX01BWCwKKwlbUlRNX0ZBTShSVE1fTkVXQUNUSU9OKV0gICAgPSBUQ0FBX01BWCwKIH07CiAKIHZvaWQgX19ydGFfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKQpAQCAtNjA3LDI3ICs2MDksMzMgQEAKIAogLyoKICAqICBydG5ldGxpbmsgaW5wdXQgcXVldWUgcHJvY2Vzc2luZyByb3V0aW5lOgotICoJLSB0cnkgdG8gYWNxdWlyZSBzaGFyZWQgbG9jay4gSWYgaXQgaXMgZmFpbGVkLCBkZWZlciBwcm9jZXNzaW5nLgorICoJLSBwcm9jZXNzIGFzIG11Y2ggYXMgdGhlcmUgd2FzIGluIHRoZSBxdWV1ZSB1cG9uIGVudHJ5LgogICoJLSBmZWVkIHNrYnMgdG8gcnRuZXRsaW5rX3Jjdl9za2IsIHVudGlsIGl0IHJlZnVzZSBhIG1lc3NhZ2UsCi0gKgkgIHRoYXQgd2lsbCBvY2N1ciwgd2hlbiBhIGR1bXAgc3RhcnRlZCBhbmQvb3IgYWNxdWlzaXRpb24gb2YKLSAqCSAgZXhjbHVzaXZlIGxvY2sgZmFpbGVkLgorICoJICB0aGF0IHdpbGwgb2NjdXIsIHdoZW4gYSBkdW1wIHN0YXJ0ZWQuCiAgKi8KIAogc3RhdGljIHZvaWQgcnRuZXRsaW5rX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pCiB7CisJdW5zaWduZWQgaW50IHFsZW4gPSBza2JfcXVldWVfbGVuKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CisKIAlkbyB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJaWYgKHJ0bmxfc2hsb2NrX25vd2FpdCgpKQotCQkJcmV0dXJuOworCQlydG5sX2xvY2soKTsKIAotCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpICE9IE5VTEwpIHsKKwkJaWYgKHFsZW4gPiBza2JfcXVldWVfbGVuKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpCisJCQlxbGVuID0gc2tiX3F1ZXVlX2xlbigmc2stPnNrX3JlY2VpdmVfcXVldWUpOworCisJCWZvciAoOyBxbGVuOyBxbGVuLS0pIHsKKwkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJCQlpZiAocnRuZXRsaW5rX3Jjdl9za2Ioc2tiKSkgewogCQkJCWlmIChza2ItPmxlbikKIAkJCQkJc2tiX3F1ZXVlX2hlYWQoJnNrLT5za19yZWNlaXZlX3F1ZXVlLAogCQkJCQkJICAgICAgIHNrYik7Ci0JCQkJZWxzZQorCQkJCWVsc2UgewogCQkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCQkJcWxlbi0tOworCQkJCX0KIAkJCQlicmVhazsKIAkJCX0KIAkJCWtmcmVlX3NrYihza2IpOwpAQCAtNjM2LDEwICs2NDQsMTAgQEAKIAkJdXAoJnJ0bmxfc2VtKTsKIAogCQluZXRkZXZfcnVuX3RvZG8oKTsKLQl9IHdoaWxlIChydG5sICYmIHJ0bmwtPnNrX3JlY2VpdmVfcXVldWUucWxlbik7CisJfSB3aGlsZSAocWxlbik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRuZXRsaW5rX2xpbmsgbGlua19ydG5ldGxpbmtfdGFibGVbUlRNX01BWC1SVE1fQkFTRSsxXSA9CitzdGF0aWMgc3RydWN0IHJ0bmV0bGlua19saW5rIGxpbmtfcnRuZXRsaW5rX3RhYmxlW1JUTV9OUl9NU0dUWVBFU10gPQogewogCVtSVE1fR0VUTElOSyAgLSBSVE1fQkFTRV0gPSB7IC5kdW1waXQgPSBydG5ldGxpbmtfZHVtcF9pZmluZm8gfSwKIAlbUlRNX1NFVExJTksgIC0gUlRNX0JBU0VdID0geyAuZG9pdCAgID0gZG9fc2V0bGluawkgICAgICB9LApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2NtLmMgYi9uZXQvY29yZS9zY20uYwppbmRleCBhMmViZjMwLi5lODg3ZDE5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zY20uYworKysgYi9uZXQvY29yZS9zY20uYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDFiNjQ4MTcuLmY2NWIzZGUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC04Niw4ICs4NiwxMCBAQAogICovCiB2b2lkIHNrYl9vdmVyX3BhbmljKHN0cnVjdCBza19idWZmICpza2IsIGludCBzeiwgdm9pZCAqaGVyZSkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJza3B1dDpvdmVyOiAlcDolZCBwdXQ6JWQgZGV2OiVzIiwKLQkJaGVyZSwgc2tiLT5sZW4sIHN6LCBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIjxOVUxMPiIpOworCXByaW50ayhLRVJOX0VNRVJHICJza2Jfb3Zlcl9wYW5pYzogdGV4dDolcCBsZW46JWQgcHV0OiVkIGhlYWQ6JXAgIgorCSAgICAgICAgICAgICAgICAgICJkYXRhOiVwIHRhaWw6JXAgZW5kOiVwIGRldjolc1xuIiwKKwkgICAgICAgaGVyZSwgc2tiLT5sZW4sIHN6LCBza2ItPmhlYWQsIHNrYi0+ZGF0YSwgc2tiLT50YWlsLCBza2ItPmVuZCwKKwkgICAgICAgc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICI8TlVMTD4iKTsKIAlCVUcoKTsKIH0KIApAQCAtMTAyLDggKzEwNCwxMCBAQAogCiB2b2lkIHNrYl91bmRlcl9wYW5pYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc3osIHZvaWQgKmhlcmUpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAic2twdXQ6dW5kZXI6ICVwOiVkIHB1dDolZCBkZXY6JXMiLAotICAgICAgICAgICAgICAgaGVyZSwgc2tiLT5sZW4sIHN6LCBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIjxOVUxMPiIpOworCXByaW50ayhLRVJOX0VNRVJHICJza2JfdW5kZXJfcGFuaWM6IHRleHQ6JXAgbGVuOiVkIHB1dDolZCBoZWFkOiVwICIKKwkgICAgICAgICAgICAgICAgICAiZGF0YTolcCB0YWlsOiVwIGVuZDolcCBkZXY6JXNcbiIsCisJICAgICAgIGhlcmUsIHNrYi0+bGVuLCBzeiwgc2tiLT5oZWFkLCBza2ItPmRhdGEsIHNrYi0+dGFpbCwgc2tiLT5lbmQsCisJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiPE5VTEw+Iik7CiAJQlVHKCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCA0ZGY0ZmEzLi45NmUwMGIwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC05LDcgKzksNyBAQAogICoKICAqIFZlcnNpb246CSRJZDogc29jay5jLHYgMS4xMTcgMjAwMi8wMi8wMSAyMjowMTowMyBkYXZlbSBFeHAgJAogICoKLSAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCUZsb3JpYW4gTGEgUm9jaGUsIDxmbGxhQHN0dWQudW5pLXNiLmRlPgogICoJCUFsYW4gQ294LCA8QS5Db3hAc3dhbnNlYS5hYy51az4KQEAgLTk3LDcgKzk3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC02MTcsMTAgKzYxNiwxMCBAQAogCiAvKioKICAqCXNrX2FsbG9jIC0gQWxsIHNvY2tldCBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaGVyZQotICoJQGZhbWlseSAtIHByb3RvY29sIGZhbWlseQotICoJQHByaW9yaXR5IC0gZm9yIGFsbG9jYXRpb24gKCVHRlBfS0VSTkVMLCAlR0ZQX0FUT01JQywgZXRjKQotICoJQHByb3QgLSBzdHJ1Y3QgcHJvdG8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmV3IHNvY2sgaW5zdGFuY2UKLSAqCUB6ZXJvX2l0IC0gaWYgd2Ugc2hvdWxkIHplcm8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzb2NrCisgKglAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHkKKyAqCUBwcmlvcml0eTogZm9yIGFsbG9jYXRpb24gKCVHRlBfS0VSTkVMLCAlR0ZQX0FUT01JQywgZXRjKQorICoJQHByb3Q6IHN0cnVjdCBwcm90byBhc3NvY2lhdGVkIHdpdGggdGhpcyBuZXcgc29jayBpbnN0YW5jZQorICoJQHplcm9faXQ6IGlmIHdlIHNob3VsZCB6ZXJvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc29jawogICovCiBzdHJ1Y3Qgc29jayAqc2tfYWxsb2MoaW50IGZhbWlseSwgaW50IHByaW9yaXR5LCBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCB6ZXJvX2l0KQogewpAQCAtNjM2LDcgKzYzNSwxMSBAQAogCQlpZiAoemVyb19pdCkgewogCQkJbWVtc2V0KHNrLCAwLCBwcm90LT5vYmpfc2l6ZSk7CiAJCQlzay0+c2tfZmFtaWx5ID0gZmFtaWx5OwotCQkJc2stPnNrX3Byb3QgPSBwcm90OworCQkJLyoKKwkJCSAqIFNlZSBjb21tZW50IGluIHN0cnVjdCBzb2NrIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZAorCQkJICogd2h5IHdlIG5lZWQgc2tfcHJvdF9jcmVhdG9yIC1hY21lCisJCQkgKi8KKwkJCXNrLT5za19wcm90ID0gc2stPnNrX3Byb3RfY3JlYXRvciA9IHByb3Q7CiAJCQlzb2NrX2xvY2tfaW5pdChzayk7CiAJCX0KIAkJCkBAIC02NTUsNyArNjU4LDcgQEAKIHZvaWQgc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyOwotCXN0cnVjdCBtb2R1bGUgKm93bmVyID0gc2stPnNrX3Byb3QtPm93bmVyOworCXN0cnVjdCBtb2R1bGUgKm93bmVyID0gc2stPnNrX3Byb3RfY3JlYXRvci0+b3duZXI7CiAKIAlpZiAoc2stPnNrX2Rlc3RydWN0KQogCQlzay0+c2tfZGVzdHJ1Y3Qoc2spOwpAQCAtNjczLDggKzY3Niw4IEBACiAJCSAgICAgICBfX0ZVTkNUSU9OX18sIGF0b21pY19yZWFkKCZzay0+c2tfb21lbV9hbGxvYykpOwogCiAJc2VjdXJpdHlfc2tfZnJlZShzayk7Ci0JaWYgKHNrLT5za19wcm90LT5zbGFiICE9IE5VTEwpCi0JCWttZW1fY2FjaGVfZnJlZShzay0+c2tfcHJvdC0+c2xhYiwgc2spOworCWlmIChzay0+c2tfcHJvdF9jcmVhdG9yLT5zbGFiICE9IE5VTEwpCisJCWttZW1fY2FjaGVfZnJlZShzay0+c2tfcHJvdF9jcmVhdG9yLT5zbGFiLCBzayk7CiAJZWxzZQogCQlrZnJlZShzayk7CiAJbW9kdWxlX3B1dChvd25lcik7CkBAIC05NzEsOCArOTc0LDggQEAKIAogLyoqCiAgKiBza193YWl0X2RhdGEgLSB3YWl0IGZvciBkYXRhIHRvIGFycml2ZSBhdCBza19yZWNlaXZlX3F1ZXVlCi0gKiBzayAtIHNvY2sgdG8gd2FpdCBvbgotICogdGltZW8gLSBmb3IgaG93IGxvbmcKKyAqIEBzazogICAgc29jayB0byB3YWl0IG9uCisgKiBAdGltZW86IGZvciBob3cgbG9uZwogICoKICAqIE5vdyBzb2NrZXQgc3RhdGUgaW5jbHVkaW5nIHNrLT5za19lcnIgaXMgY2hhbmdlZCBvbmx5IHVuZGVyIGxvY2ssCiAgKiBoZW5jZSB3ZSBtYXkgb21pdCBjaGVja3MgYWZ0ZXIgam9pbmluZyB3YWl0IHF1ZXVlLgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3RyZWFtLmMgYi9uZXQvY29yZS9zdHJlYW0uYwppbmRleCAxZTI3YTU3Li5hYzllZGZkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zdHJlYW0uYworKysgYi9uZXQvY29yZS9zdHJlYW0uYwpAQCAtMjEsNyArMjEsNyBAQAogCiAvKioKICAqIHNrX3N0cmVhbV93cml0ZV9zcGFjZSAtIHN0cmVhbSBzb2NrZXQgd3JpdGVfc3BhY2UgY2FsbGJhY2suCi0gKiBzayAtIHNvY2tldAorICogQHNrOiBzb2NrZXQKICAqCiAgKiBGSVhNRTogd3JpdGUgcHJvcGVyIGRlc2NyaXB0aW9uCiAgKi8KQEAgLTQzLDggKzQzLDggQEAKIAogLyoqCiAgKiBza19zdHJlYW1fd2FpdF9jb25uZWN0IC0gV2FpdCBmb3IgYSBzb2NrZXQgdG8gZ2V0IGludG8gdGhlIGNvbm5lY3RlZCBzdGF0ZQotICogQHNrIC0gc29jayB0byB3YWl0IG9uCi0gKiBAdGltZW9fcCAtIGZvciBob3cgbG9uZyB0byB3YWl0CisgKiBAc2s6IHNvY2sgdG8gd2FpdCBvbgorICogQHRpbWVvX3A6IGZvciBob3cgbG9uZyB0byB3YWl0CiAgKgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgc29ja2V0IGxvY2tlZC4KICAqLwpAQCAtNzksNyArNzksNyBAQAogCiAvKioKICAqIHNrX3N0cmVhbV9jbG9zaW5nIC0gUmV0dXJuIDEgaWYgd2Ugc3RpbGwgaGF2ZSB0aGluZ3MgdG8gc2VuZCBpbiBvdXIgYnVmZmVycy4KLSAqIEBzayAtIHNvY2tldCB0byB2ZXJpZnkKKyAqIEBzazogc29ja2V0IHRvIHZlcmlmeQogICovCiBzdGF0aWMgaW5saW5lIGludCBza19zdHJlYW1fY2xvc2luZyhzdHJ1Y3Qgc29jayAqc2spCiB7CkBAIC0xMDcsOCArMTA3LDggQEAKIAogLyoqCiAgKiBza19zdHJlYW1fd2FpdF9tZW1vcnkgLSBXYWl0IGZvciBtb3JlIG1lbW9yeSBmb3IgYSBzb2NrZXQKLSAqIEBzayAtIHNvY2tldCB0byB3YWl0IGZvciBtZW1vcnkKLSAqIEB0aW1lb19wIC0gZm9yIGhvdyBsb25nCisgKiBAc2s6IHNvY2tldCB0byB3YWl0IGZvciBtZW1vcnkKKyAqIEB0aW1lb19wOiBmb3IgaG93IGxvbmcKICAqLwogaW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApCiB7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX2Rldi5jIGIvbmV0L2RlY25ldC9kbl9kZXYuYwppbmRleCBjMmEwMzQ2Li5lZTdiZjQ2IDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX2Rldi5jCisrKyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKQEAgLTE0MTEsMjEgKzE0MTEsMjIgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKLXN0YXRpYyBzdHJ1Y3QgcnRuZXRsaW5rX2xpbmsgZG5ldF9ydG5ldGxpbmtfdGFibGVbUlRNX01BWC1SVE1fQkFTRSsxXSA9IAorc3RhdGljIHN0cnVjdCBydG5ldGxpbmtfbGluayBkbmV0X3J0bmV0bGlua190YWJsZVtSVE1fTlJfTVNHVFlQRVNdID0KIHsKLQkgWzRdID0geyAuZG9pdCAgID0gZG5fZGV2X3J0bV9uZXdhZGRyLAl9LAotCSBbNV0gPSB7IC5kb2l0ICAgPSBkbl9kZXZfcnRtX2RlbGFkZHIsCX0sCi0JIFs2XSA9IHsgLmR1bXBpdCA9IGRuX2Rldl9kdW1wX2lmYWRkciwJfSwKLQorCVtSVE1fTkVXQUREUiAgLSBSVE1fQkFTRV0gPSB7IC5kb2l0CT0gZG5fZGV2X3J0bV9uZXdhZGRyLAl9LAorCVtSVE1fREVMQUREUiAgLSBSVE1fQkFTRV0gPSB7IC5kb2l0CT0gZG5fZGV2X3J0bV9kZWxhZGRyLAl9LAorCVtSVE1fR0VUQUREUiAgLSBSVE1fQkFTRV0gPSB7IC5kdW1waXQJPSBkbl9kZXZfZHVtcF9pZmFkZHIsCX0sCiAjaWZkZWYgQ09ORklHX0RFQ05FVF9ST1VURVIKLQkgWzhdID0geyAuZG9pdCAgID0gZG5fZmliX3J0bV9uZXdyb3V0ZSwJfSwKLQkgWzldID0geyAuZG9pdCAgID0gZG5fZmliX3J0bV9kZWxyb3V0ZSwJfSwKLQlbMTBdID0geyAuZG9pdCAgID0gZG5fY2FjaGVfZ2V0cm91dGUsIC5kdW1waXQgPSBkbl9maWJfZHVtcCwgfSwKLQlbMTZdID0geyAuZG9pdCAgID0gZG5fZmliX3J0bV9uZXdydWxlLCB9LAotCVsxN10gPSB7IC5kb2l0ICAgPSBkbl9maWJfcnRtX2RlbHJ1bGUsIH0sCi0JWzE4XSA9IHsgLmR1bXBpdCA9IGRuX2ZpYl9kdW1wX3J1bGVzLCAgfSwKKwlbUlRNX05FV1JPVVRFIC0gUlRNX0JBU0VdID0geyAuZG9pdAk9IGRuX2ZpYl9ydG1fbmV3cm91dGUsCX0sCisJW1JUTV9ERUxST1VURSAtIFJUTV9CQVNFXSA9IHsgLmRvaXQJPSBkbl9maWJfcnRtX2RlbHJvdXRlLAl9LAorCVtSVE1fR0VUUk9VVEUgLSBSVE1fQkFTRV0gPSB7IC5kb2l0CT0gZG5fY2FjaGVfZ2V0cm91dGUsCisJCQkJICAgICAgLmR1bXBpdAk9IGRuX2ZpYl9kdW1wLAkJfSwKKwlbUlRNX05FV1JVTEUgIC0gUlRNX0JBU0VdID0geyAuZG9pdAk9IGRuX2ZpYl9ydG1fbmV3cnVsZSwJfSwKKwlbUlRNX0RFTFJVTEUgIC0gUlRNX0JBU0VdID0geyAuZG9pdAk9IGRuX2ZpYl9ydG1fZGVscnVsZSwJfSwKKwlbUlRNX0dFVFJVTEUgIC0gUlRNX0JBU0VdID0geyAuZHVtcGl0CT0gZG5fZmliX2R1bXBfcnVsZXMsCX0sCiAjZWxzZQotCVsxMF0gPSB7IC5kb2l0ICAgPSBkbl9jYWNoZV9nZXRyb3V0ZSwgLmR1bXBpdCA9IGRuX2NhY2hlX2R1bXAsIH0sCisJW1JUTV9HRVRST1VURSAtIFJUTV9CQVNFXSA9IHsgLmRvaXQJPSBkbl9jYWNoZV9nZXRyb3V0ZSwKKwkJCQkgICAgICAuZHVtcGl0CT0gZG5fY2FjaGVfZHVtcCwJfSwKICNlbmRpZgogCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9uZXRmaWx0ZXIvZG5fcnRtc2cuYyBiL25ldC9kZWNuZXQvbmV0ZmlsdGVyL2RuX3J0bXNnLmMKaW5kZXggZjg2YTYyNS4uMjg0YTk5OSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9uZXRmaWx0ZXIvZG5fcnRtc2cuYworKysgYi9uZXQvZGVjbmV0L25ldGZpbHRlci9kbl9ydG1zZy5jCkBAIC0xMTksOCArMTE5LDkgQEAKIHN0YXRpYyB2b2lkIGRucm1nX3JlY2VpdmVfdXNlcl9zayhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgcWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAotCXdoaWxlKChza2IgPSBza2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKSB7CisJZm9yICg7IHFsZW4gJiYgKHNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpOyBxbGVuLS0pIHsKIAkJZG5ybWdfcmVjZWl2ZV91c2VyX3NrYihza2IpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvZXRoZXJuZXQvZXRoLmMgYi9uZXQvZXRoZXJuZXQvZXRoLmMKaW5kZXggMTZjNDIzNC4uNjYxN2VhNCAxMDA2NDQKLS0tIGEvbmV0L2V0aGVybmV0L2V0aC5jCisrKyBiL25ldC9ldGhlcm5ldC9ldGguYwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOglAKCMpZXRoLmMJMS4wLjcJMDUvMjUvOTMKICAqCi0gKiBBdXRob3JzOglSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKiBBdXRob3JzOglSb3NzIEJpcm8KICAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCQlNYXJrIEV2YW5zLCA8ZXZhbnNtcEB1aHVyYS5hc3Rvbi5hYy51az4KICAqCQlGbG9yaWFuICBMYSBSb2NoZSwgPHJ6c2ZsQHJ6LnVuaS1zYi5kZT4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCBjMzRkYWI2Li5iM2NiNDljIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIFZlcnNpb246CSRJZDogYWZfaW5ldC5jLHYgMS4xMzcgMjAwMi8wMi8wMSAyMjowMTowMyBkYXZlbSBFeHAgJAogICoKLSAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCUZsb3JpYW4gTGEgUm9jaGUsIDxmbGxhQHN0dWQudW5pLXNiLmRlPgogICoJCUFsYW4gQ294LCA8QS5Db3hAc3dhbnNlYS5hYy51az4KQEAgLTczLDcgKzczLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IGVlYTdlZjAuLjNjYzk2NzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYworKysgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTksNyArOSw3IEBACiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKglEZXJpdmVkIGZyb20gdGhlIElQIHBhcnRzIG9mIGRldi5jIDEuMC4xOQotICogCQlBdXRob3JzOglSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKiAJCUF1dGhvcnM6CVJvc3MgQmlybwogICoJCQkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJCQlNYXJrIEV2YW5zLCA8ZXZhbnNtcEB1aHVyYS5hc3Rvbi5hYy51az4KICAqCkBAIC0xMTA3LDE3ICsxMTA3LDE4IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHJ0bmV0bGlua19saW5rIGluZXRfcnRuZXRsaW5rX3RhYmxlW1JUTV9NQVggLSBSVE1fQkFTRSArIDFdID0gewotCSBbNF0gPSB7IC5kb2l0CSA9IGluZXRfcnRtX25ld2FkZHIsICB9LAotCSBbNV0gPSB7IC5kb2l0CSA9IGluZXRfcnRtX2RlbGFkZHIsICB9LAotCSBbNl0gPSB7IC5kdW1waXQgPSBpbmV0X2R1bXBfaWZhZGRyLCAgfSwKLQkgWzhdID0geyAuZG9pdAkgPSBpbmV0X3J0bV9uZXdyb3V0ZSwgfSwKLQkgWzldID0geyAuZG9pdAkgPSBpbmV0X3J0bV9kZWxyb3V0ZSwgfSwKLQlbMTBdID0geyAuZG9pdAkgPSBpbmV0X3J0bV9nZXRyb3V0ZSwgLmR1bXBpdCA9IGluZXRfZHVtcF9maWIsIH0sCitzdGF0aWMgc3RydWN0IHJ0bmV0bGlua19saW5rIGluZXRfcnRuZXRsaW5rX3RhYmxlW1JUTV9OUl9NU0dUWVBFU10gPSB7CisJW1JUTV9ORVdBRERSICAtIFJUTV9CQVNFXSA9IHsgLmRvaXQJPSBpbmV0X3J0bV9uZXdhZGRyLAl9LAorCVtSVE1fREVMQUREUiAgLSBSVE1fQkFTRV0gPSB7IC5kb2l0CT0gaW5ldF9ydG1fZGVsYWRkciwJfSwKKwlbUlRNX0dFVEFERFIgIC0gUlRNX0JBU0VdID0geyAuZHVtcGl0CT0gaW5ldF9kdW1wX2lmYWRkciwJfSwKKwlbUlRNX05FV1JPVVRFIC0gUlRNX0JBU0VdID0geyAuZG9pdAk9IGluZXRfcnRtX25ld3JvdXRlLAl9LAorCVtSVE1fREVMUk9VVEUgLSBSVE1fQkFTRV0gPSB7IC5kb2l0CT0gaW5ldF9ydG1fZGVscm91dGUsCX0sCisJW1JUTV9HRVRST1VURSAtIFJUTV9CQVNFXSA9IHsgLmRvaXQJPSBpbmV0X3J0bV9nZXRyb3V0ZSwKKwkJCQkgICAgICAuZHVtcGl0CT0gaW5ldF9kdW1wX2ZpYiwJfSwKICNpZmRlZiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTCi0JWzE2XSA9IHsgLmRvaXQJID0gaW5ldF9ydG1fbmV3cnVsZSwgfSwKLQlbMTddID0geyAuZG9pdAkgPSBpbmV0X3J0bV9kZWxydWxlLCB9LAotCVsxOF0gPSB7IC5kdW1waXQgPSBpbmV0X2R1bXBfcnVsZXMsICB9LAorCVtSVE1fTkVXUlVMRSAgLSBSVE1fQkFTRV0gPSB7IC5kb2l0CT0gaW5ldF9ydG1fbmV3cnVsZSwJfSwKKwlbUlRNX0RFTFJVTEUgIC0gUlRNX0JBU0VdID0geyAuZG9pdAk9IGluZXRfcnRtX2RlbHJ1bGUsCX0sCisJW1JUTV9HRVRSVUxFICAtIFJUTV9CQVNFXSA9IHsgLmR1bXBpdAk9IGluZXRfZHVtcF9ydWxlcywJfSwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfaW5wdXQuYyBiL25ldC9pcHY0L2lwX2lucHV0LmMKaW5kZXggYTBkMDgzMy4uNGU0N2EyNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfaW5wdXQuYworKysgYi9uZXQvaXB2NC9pcF9pbnB1dC5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIFZlcnNpb246CSRJZDogaXBfaW5wdXQuYyx2IDEuNTUgMjAwMi8wMS8xMiAwNzozOTo0NSBkYXZlbSBFeHAgJAogICoKLSAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCURvbmFsZCBCZWNrZXIsIDxiZWNrZXJAc3VwZXIub3JnPgogICoJCUFsYW4gQ294LCA8QWxhbi5Db3hAbGludXgub3JnPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwppbmRleCAzMGFiN2I2Li5kYWViZDkzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOgkkSWQ6IGlwX291dHB1dC5jLHYgMS4xMDAgMjAwMi8wMi8wMSAyMjowMTowMyBkYXZlbSBFeHAgJAogICoKLSAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCURvbmFsZCBCZWNrZXIsIDxiZWNrZXJAc3VwZXIub3JnPgogICoJCUFsYW4gQ294LCA8QWxhbi5Db3hAbGludXgub3JnPgpAQCAtMTExLDYgKzExMSw3IEBACiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwogCW5mX2RlYnVnX2lwX2xvb3BiYWNrX3htaXQobmV3c2tiKTsKICNlbmRpZgorCW5mX3Jlc2V0KG5ld3NrYik7CiAJbmV0aWZfcngobmV3c2tiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE5NSw2ICsxOTYsOCBAQAogCW5mX2RlYnVnX2lwX2ZpbmlzaF9vdXRwdXQyKHNrYik7CiAjZW5kaWYgLypDT05GSUdfTkVURklMVEVSX0RFQlVHKi8KIAorCW5mX3Jlc2V0KHNrYik7CisKIAlpZiAoaGgpIHsKIAkJaW50IGhoX2FsZW47CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L211bHRpcGF0aF93cmFuZG9tLmMgYi9uZXQvaXB2NC9tdWx0aXBhdGhfd3JhbmRvbS5jCmluZGV4IDEwYjIzZTEuLmMzZDJjYTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L211bHRpcGF0aF93cmFuZG9tLmMKKysrIGIvbmV0L2lwdjQvbXVsdGlwYXRoX3dyYW5kb20uYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJCSAgICBtdWx0aXBhdGhfY29tcGFyZWtleXMoJnJ0LT5mbCwgZmxwKSkgewogCQkJc3RydWN0IG11bHRpcGF0aF9jYW5kaWRhdGUqIG1wYyA9CiAJCQkJKHN0cnVjdCBtdWx0aXBhdGhfY2FuZGlkYXRlKikKLQkJCQlrbWFsbG9jKHNpemVfbXBjLCBHRlBfS0VSTkVMKTsKKwkJCQlrbWFsbG9jKHNpemVfbXBjLCBHRlBfQVRPTUlDKTsKIAogCQkJaWYgKCFtcGMpCiAJCQkJcmV0dXJuOwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAJaWYgKCF0YXJnZXRfcm91dGUpIHsKIAkJY29uc3Qgc2l6ZV90IHNpemVfcnQgPSBzaXplb2Yoc3RydWN0IG11bHRpcGF0aF9yb3V0ZSk7CiAJCXRhcmdldF9yb3V0ZSA9IChzdHJ1Y3QgbXVsdGlwYXRoX3JvdXRlICopCi0JCQlrbWFsbG9jKHNpemVfcnQsIEdGUF9LRVJORUwpOworCQkJa21hbGxvYyhzaXplX3J0LCBHRlBfQVRPTUlDKTsKIAogCQl0YXJnZXRfcm91dGUtPmd3ID0gbmgtPm5oX2d3OwogCQl0YXJnZXRfcm91dGUtPm9pZiA9IG5oLT5uaF9vaWY7CkBAIC0yNjUsNyArMjY1LDcgQEAKIAlpZiAoIXRhcmdldF9kZXN0KSB7CiAJCWNvbnN0IHNpemVfdCBzaXplX2RzdCA9IHNpemVvZihzdHJ1Y3QgbXVsdGlwYXRoX2Rlc3QpOwogCQl0YXJnZXRfZGVzdCA9IChzdHJ1Y3QgbXVsdGlwYXRoX2Rlc3QqKQotCQkJa21hbGxvYyhzaXplX2RzdCwgR0ZQX0tFUk5FTCk7CisJCQlrbWFsbG9jKHNpemVfZHN0LCBHRlBfQVRPTUlDKTsKIAogCQl0YXJnZXRfZGVzdC0+bmhfaW5mbyA9IG5oOwogCQl0YXJnZXRfZGVzdC0+bmV0d29yayA9IG5ldHdvcms7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYwppbmRleCAxMmI4OGNiLi5kZDg2NTAzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2Z0cC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfZnRwLmMKQEAgLTI1Miw3ICsyNTIsNyBAQAogfQogCiAvKiBMb29rIHVwIHRvIHNlZSBpZiB3ZSdyZSBqdXN0IGFmdGVyIGEgXG4uICovCi1zdGF0aWMgaW50IGZpbmRfbmxfc2VxKHUxNiBzZXEsIGNvbnN0IHN0cnVjdCBpcF9jdF9mdHBfbWFzdGVyICppbmZvLCBpbnQgZGlyKQorc3RhdGljIGludCBmaW5kX25sX3NlcSh1MzIgc2VxLCBjb25zdCBzdHJ1Y3QgaXBfY3RfZnRwX21hc3RlciAqaW5mbywgaW50IGRpcikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIApAQCAtMjYzLDcgKzI2Myw3IEBACiB9CiAKIC8qIFdlIGRvbid0IHVwZGF0ZSBpZiBpdCdzIG9sZGVyIHRoYW4gd2hhdCB3ZSBoYXZlLiAqLwotc3RhdGljIHZvaWQgdXBkYXRlX25sX3NlcSh1MTYgbmxfc2VxLCBzdHJ1Y3QgaXBfY3RfZnRwX21hc3RlciAqaW5mbywgaW50IGRpcikKK3N0YXRpYyB2b2lkIHVwZGF0ZV9ubF9zZXEodTMyIG5sX3NlcSwgc3RydWN0IGlwX2N0X2Z0cF9tYXN0ZXIgKmluZm8sIGludCBkaXIpCiB7CiAJdW5zaWduZWQgaW50IGksIG9sZGVzdCA9IE5VTV9TRVFfVE9fUkVNRU1CRVI7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IGU4MDBiMTYuLjcyMWRkYmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtNzcwLDYgKzc3MCw3IEBACiB7CiAJW1RIX1NZTl0JCQk9IDEsCiAJW1RIX1NZTnxUSF9BQ0tdCQkJPSAxLAorCVtUSF9TWU58VEhfQUNLfFRIX1BVU0hdCQk9IDEsCiAJW1RIX1JTVF0JCQk9IDEsCiAJW1RIX1JTVHxUSF9BQ0tdCQkJPSAxLAogCVtUSF9SU1R8VEhfQUNLfFRIX1BVU0hdCQk9IDEsCkBAIC04MTgsNiArODE5LDcgQEAKIAkgKi8KIAkvKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9wdGlvbiBwYWNrZXRzIC0tUlIgKi8KIAlpZiAoaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORworCSAgICAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWQogCSAgICAmJiBjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCB0Y3BsZW4sIElQUFJPVE9fVENQLAogCQkJICAgICAgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgPyBza2ItPmNzdW0KIAkJCSAgICAgIAkgOiBza2JfY2hlY2tzdW0oc2tiLCBpcGgtPmlobCo0LCB0Y3BsZW4sIDApKSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCA4MGE3YmRlLi40NmNhNDVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtNDAxLDYgKzQwMSwxNiBAQAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJCQkgICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7CisJLyogV2UndmUgc2VlbiBpdCBjb21pbmcgb3V0IHRoZSBvdGhlciBzaWRlOiBjb25maXJtIGl0ICovCisJcmV0dXJuIGlwX2Nvbm50cmFja19jb25maXJtKHBza2IpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGlwX2Nvbm50cmFja19oZWxwKHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJCSAgICAgIHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdDsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIApAQCAtNDEyLDkgKzQyMiw3IEBACiAJCWlmIChyZXQgIT0gTkZfQUNDRVBUKQogCQkJcmV0dXJuIHJldDsKIAl9Ci0KLQkvKiBXZSd2ZSBzZWVuIGl0IGNvbWluZyBvdXQgdGhlIG90aGVyIHNpZGU6IGNvbmZpcm0gaXQgKi8KLQlyZXR1cm4gaXBfY29ubnRyYWNrX2NvbmZpcm0ocHNrYik7CisJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBpcF9jb25udHJhY2tfZGVmcmFnKHVuc2lnbmVkIGludCBob29rbnVtLApAQCAtNDIzLDEzICs0MzEsNiBAQAogCQkJCSAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkJCQkgICAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewotI2lmICFkZWZpbmVkKENPTkZJR19JUF9ORl9OQVQpICYmICFkZWZpbmVkKENPTkZJR19JUF9ORl9OQVRfTU9EVUxFKQotCS8qIFByZXZpb3VzbHkgc2VlbiAobG9vcGJhY2spPyAgSWdub3JlLiAgRG8gdGhpcyBiZWZvcmUKLSAgICAgICAgICAgZnJhZ21lbnQgY2hlY2suICovCi0JaWYgKCgqcHNrYiktPm5mY3QpCi0JCXJldHVybiBORl9BQ0NFUFQ7Ci0jZW5kaWYKLQogCS8qIEdhdGhlciBmcmFnbWVudHMuICovCiAJaWYgKCgqcHNrYiktPm5oLmlwaC0+ZnJhZ19vZmYgJiBodG9ucyhJUF9NRnxJUF9PRkZTRVQpKSB7CiAJCSpwc2tiID0gaXBfY3RfZ2F0aGVyX2ZyYWdzKCpwc2tiLApAQCAtNTE2LDEzICs1MTcsMzAgQEAKIAkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLLAogfTsKIAorLyogaGVscGVycyAqLworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfaGVscGVyX291dF9vcHMgPSB7CisJLmhvb2sJCT0gaXBfY29ubnRyYWNrX2hlbHAsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5wZgkJPSBQRl9JTkVULAorCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAorCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSLAorfTsKKworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfaGVscGVyX2luX29wcyA9IHsKKwkuaG9vawkJPSBpcF9jb25udHJhY2tfaGVscCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnBmCQk9IFBGX0lORVQsCisJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKKwkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKK307CisKIC8qIFJlZnJhZ21lbnRlcjsgbGFzdCBjaGFuY2UuICovCiBzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwX2Nvbm50cmFja19vdXRfb3BzID0gewogCS5ob29rCQk9IGlwX3JlZnJhZywKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnBmCQk9IFBGX0lORVQsCiAJLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0xBU1QsCisJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19DT05GSVJNLAogfTsKIAogc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9jb25udHJhY2tfbG9jYWxfaW5fb3BzID0gewpAQCAtNTMwLDcgKzU0OCw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5wZgkJPSBQRl9JTkVULAogCS5ob29rbnVtCT0gTkZfSVBfTE9DQUxfSU4sCi0JLnByaW9yaXR5CT0gTkZfSVBfUFJJX0xBU1QtMSwKKwkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCiB9OwogCiAvKiBTeXNjdGwgc3VwcG9ydCAqLwpAQCAtODMxLDEwICs4NDksMjAgQEAKIAkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIG91dCBob29rLlxuIik7CiAJCWdvdG8gY2xlYW51cF9pbm9wczsKIAl9CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2hlbHBlcl9pbl9vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygiaXBfY29ubnRyYWNrOiBjYW4ndCByZWdpc3RlciBsb2NhbCBpbiBoZWxwZXIgaG9vay5cbiIpOworCQlnb3RvIGNsZWFudXBfaW5hbmRsb2NhbG9wczsKKwl9CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2hlbHBlcl9vdXRfb3BzKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoImlwX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgcG9zdHJvdXRpbmcgaGVscGVyIGhvb2suXG4iKTsKKwkJZ290byBjbGVhbnVwX2hlbHBlcmlub3BzOworCX0KIAlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfb3V0X29wcyk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJpcF9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHBvc3Qtcm91dGluZyBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9pbmFuZGxvY2Fsb3BzOworCQlnb3RvIGNsZWFudXBfaGVscGVyb3V0b3BzOwogCX0KIAlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9jb25udHJhY2tfbG9jYWxfaW5fb3BzKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtODYwLDYgKzg4OCwxMCBAQAogCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2xvY2FsX2luX29wcyk7CiAgY2xlYW51cF9pbm91dGFuZGxvY2Fsb3BzOgogCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX291dF9vcHMpOworIGNsZWFudXBfaGVscGVyb3V0b3BzOgorCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2hlbHBlcl9vdXRfb3BzKTsKKyBjbGVhbnVwX2hlbHBlcmlub3BzOgorCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfY29ubnRyYWNrX2hlbHBlcl9pbl9vcHMpOwogIGNsZWFudXBfaW5hbmRsb2NhbG9wczoKIAluZl91bnJlZ2lzdGVyX2hvb2soJmlwX2Nvbm50cmFja19sb2NhbF9vdXRfb3BzKTsKICBjbGVhbnVwX2lub3BzOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2NvcmUuYwppbmRleCAxNjJjZWFjLi45ZmM2ZjkzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2NvcmUuYwpAQCAtMzU2LDE1ICszNTYsNiBAQAogCXVuc2lnbmVkIGxvbmcgc3RhdHVzYml0OwogCWVudW0gaXBfbmF0X21hbmlwX3R5cGUgbXR5cGUgPSBIT09LMk1BTklQKGhvb2tudW0pOwogCi0JaWYgKHRlc3RfYml0KElQU19TRVFfQURKVVNUX0JJVCwgJmN0LT5zdGF0dXMpCi0JICAgICYmIChob29rbnVtID09IE5GX0lQX1BPU1RfUk9VVElORyB8fCBob29rbnVtID09IE5GX0lQX0xPQ0FMX0lOKSkgewotCQlERUJVR1AoImlwX25hdF9jb3JlOiBhZGp1c3Rpbmcgc2VxdWVuY2UgbnVtYmVyXG4iKTsKLQkJLyogZnV0dXJlOiBwdXQgdGhpcyBpbiBhIGw0LXByb3RvIHNwZWNpZmljIGZ1bmN0aW9uLAotCQkgKiBhbmQgY2FsbCB0aGlzIGZ1bmN0aW9uIGhlcmUuICovCi0JCWlmICghaXBfbmF0X3NlcV9hZGp1c3QocHNrYiwgY3QsIGN0aW5mbykpCi0JCQlyZXR1cm4gTkZfRFJPUDsKLQl9Ci0KIAlpZiAobXR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKIAkJc3RhdHVzYml0ID0gSVBTX1NSQ19OQVQ7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYwppbmRleCBkZWM0YTc0Li43OWY1NmY2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYwpAQCAtMjMwLDYgKzIzMCwyNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2lwX25hdF9hZGp1c3QodW5zaWduZWQgaW50IGhvb2tudW0sCisJICAgICAgc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCSAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoreworCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0OworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCisJY3QgPSBpcF9jb25udHJhY2tfZ2V0KCpwc2tiLCAmY3RpbmZvKTsKKwlpZiAoY3QgJiYgdGVzdF9iaXQoSVBTX1NFUV9BREpVU1RfQklULCAmY3QtPnN0YXR1cykpIHsKKwkgICAgICAgIERFQlVHUCgiaXBfbmF0X3N0YW5kYWxvbmU6IGFkanVzdGluZyBzZXF1ZW5jZSBudW1iZXJcbiIpOworCSAgICAgICAgaWYgKCFpcF9uYXRfc2VxX2FkanVzdChwc2tiLCBjdCwgY3RpbmZvKSkKKwkgICAgICAgICAgICAgICAgcmV0dXJuIE5GX0RST1A7CisJfQorCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKIC8qIFdlIG11c3QgYmUgYWZ0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgYmVmb3JlIHBhY2tldCBmaWx0ZXJpbmcuICovCiAKIC8qIEJlZm9yZSBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2UgZGVzdGluYXRpb24gKi8KQEAgLTI1MCw2ICsyNjksMTUgQEAKIAkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKIH07CiAKKy8qIEFmdGVyIGNvbm50cmFjaywgYWRqdXN0IHNlcXVlbmNlIG51bWJlciAqLworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfYWRqdXN0X291dF9vcHMgPSB7CisJLmhvb2sJCT0gaXBfbmF0X2FkanVzdCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnBmCQk9IFBGX0lORVQsCisJLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCisJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TRVFfQURKVVNULAorfTsKKwogLyogQmVmb3JlIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBkZXN0aW5hdGlvbiAqLwogc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcF9uYXRfbG9jYWxfb3V0X29wcyA9IHsKIAkuaG9vawkJPSBpcF9uYXRfbG9jYWxfZm4sCkBAIC0yNjgsNiArMjk2LDE2IEBACiAJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TUkMsCiB9OwogCisvKiBBZnRlciBjb25udHJhY2ssIGFkanVzdCBzZXF1ZW5jZSBudW1iZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfbmF0X2FkanVzdF9pbl9vcHMgPSB7CisJLmhvb2sJCT0gaXBfbmF0X2FkanVzdCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnBmCQk9IFBGX0lORVQsCisJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKKwkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NFUV9BREpVU1QsCit9OworCisKIHN0YXRpYyBpbnQgaW5pdF9vcl9jbGVhbnVwKGludCBpbml0KQogewogCWludCByZXQgPSAwOwpAQCAtMjk2LDEwICszMzQsMjAgQEAKIAkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3QgcmVnaXN0ZXIgb3V0IGhvb2suXG4iKTsKIAkJZ290byBjbGVhbnVwX2lub3BzOwogCX0KKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9uYXRfYWRqdXN0X2luX29wcyk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3QgcmVnaXN0ZXIgYWRqdXN0IGluIGhvb2suXG4iKTsKKwkJZ290byBjbGVhbnVwX291dG9wczsKKwl9CisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfbmF0X2FkanVzdF9vdXRfb3BzKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoImlwX25hdF9pbml0OiBjYW4ndCByZWdpc3RlciBhZGp1c3Qgb3V0IGhvb2suXG4iKTsKKwkJZ290byBjbGVhbnVwX2FkanVzdGluX29wczsKKwl9CiAJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfbmF0X2xvY2FsX291dF9vcHMpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50aygiaXBfbmF0X2luaXQ6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIG91dCBob29rLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9vdXRvcHM7CisJCWdvdG8gY2xlYW51cF9hZGp1c3RvdXRfb3BzOzsKIAl9CiAJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfbmF0X2xvY2FsX2luX29wcyk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTMxMiw2ICszNjAsMTAgQEAKIAluZl91bnJlZ2lzdGVyX2hvb2soJmlwX25hdF9sb2NhbF9pbl9vcHMpOwogIGNsZWFudXBfbG9jYWxvdXRvcHM6CiAJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcF9uYXRfbG9jYWxfb3V0X29wcyk7CisgY2xlYW51cF9hZGp1c3RvdXRfb3BzOgorCW5mX3VucmVnaXN0ZXJfaG9vaygmaXBfbmF0X2FkanVzdF9vdXRfb3BzKTsKKyBjbGVhbnVwX2FkanVzdGluX29wczoKKwluZl91bnJlZ2lzdGVyX2hvb2soJmlwX25hdF9hZGp1c3RfaW5fb3BzKTsKICBjbGVhbnVwX291dG9wczoKIAluZl91bnJlZ2lzdGVyX2hvb2soJmlwX25hdF9vdXRfb3BzKTsKICBjbGVhbnVwX2lub3BzOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwppbmRleCA5ZTQwZGZmLi5lNTc0NmI2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwpAQCAtNTQ2LDIwICs1NDYsMTggQEAKIHN0YXRpYyB2b2lkCiBpcHFfcmN2X3NrKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbikKIHsKLQlkbyB7Ci0JCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgcWxlbjsKIAotCQlpZiAoZG93bl90cnlsb2NrKCZpcHFubF9zZW0pKQotCQkJcmV0dXJuOworCWRvd24oJmlwcW5sX3NlbSk7CiAJCQkKLQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKSB7Ci0JCQlpcHFfcmN2X3NrYihza2IpOwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCX0KKwlmb3IgKHFsZW4gPSBza2JfcXVldWVfbGVuKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7IHFsZW47IHFsZW4tLSkgeworCQlza2IgPSBza2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpOworCQlpcHFfcmN2X3NrYihza2IpOworCQlrZnJlZV9za2Ioc2tiKTsKKwl9CiAJCQotCQl1cCgmaXBxbmxfc2VtKTsKLQotCX0gd2hpbGUgKGlwcW5sICYmIGlwcW5sLT5za19yZWNlaXZlX3F1ZXVlLnFsZW4pOworCXVwKCZpcHFubF9zZW0pOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCmluZGV4IDAxYjRhM2MuLjQ3NDQ5YmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCkBAIC0xMDMsMTMgKzEwMywxNSBAQAogCSAgLmhvb2sgPSBpcHRfaG9vaywgCiAJICAucGYgPSBQRl9JTkVULCAKIAkgIC5ob29rbnVtID0gTkZfSVBfUFJFX1JPVVRJTkcsIAotCSAgLnByaW9yaXR5ID0gTkZfSVBfUFJJX1JBVworCSAgLnByaW9yaXR5ID0gTkZfSVBfUFJJX1JBVywKKwkgIC5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewogCSAgLmhvb2sgPSBpcHRfaG9vaywgCiAJICAucGYgPSBQRl9JTkVULCAKIAkgIC5ob29rbnVtID0gTkZfSVBfTE9DQUxfT1VULCAKLQkgIC5wcmlvcml0eSA9IE5GX0lQX1BSSV9SQVcKKwkgIC5wcmlvcml0eSA9IE5GX0lQX1BSSV9SQVcsCisJICAub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcHJvdG9jb2wuYyBiL25ldC9pcHY0L3Byb3RvY29sLmMKaW5kZXggOTBhNTg3Yy4uMGRiNDA1YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcHJvdG9jb2wuYworKysgYi9uZXQvaXB2NC9wcm90b2NvbC5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIFZlcnNpb246CSRJZDogcHJvdG9jb2wuYyx2IDEuMTQgMjAwMS8wNS8xOCAwMjoyNTo0OSBkYXZlbSBFeHAgJAogICoKLSAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoKICAqIEZpeGVzOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuYwppbmRleCA5MzYyNGEzLi41YjFlYzU4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYworKysgYi9uZXQvaXB2NC9yYXcuYwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOgkkSWQ6IHJhdy5jLHYgMS42NCAyMDAyLzAyLzAxIDIyOjAxOjA0IGRhdmVtIEV4cCAkCiAgKgotICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgogICogRml4ZXM6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCBiYjkwYTBjLi5hNjgyZDI4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogVmVyc2lvbjoJJElkOiByb3V0ZS5jLHYgMS4xMDMgMjAwMi8wMS8xMiAwNzo0NDowOSBkYXZlbSBFeHAgJAogICoKLSAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCUFsYW4gQ294LCA8Z3c0cHRzQGd3NHB0cy5hbXByLm9yZz4KICAqCQlMaW51cyBUb3J2YWxkcywgPExpbnVzLlRvcnZhbGRzQGhlbHNpbmtpLmZpPgpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJc3RydWN0IHJ0X2NhY2hlX3N0YXQgKnN0ID0gdjsKIAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewotCQlzZXFfcHJpbnRmKHNlcSwgImVudHJpZXMgIGluX2hpdCBpbl9zbG93X3RvdCBpbl9ub19yb3V0ZSBpbl9icmQgaW5fbWFydGlhbl9kc3QgaW5fbWFydGlhbl9zcmMgIG91dF9oaXQgb3V0X3Nsb3dfdG90IG91dF9zbG93X21jICBnY190b3RhbCBnY19pZ25vcmVkIGdjX2dvYWxfbWlzcyBnY19kc3Rfb3ZlcmZsb3cgaW5faGxpc3Rfc2VhcmNoIG91dF9obGlzdF9zZWFyY2hcbiIpOworCQlzZXFfcHJpbnRmKHNlcSwgImVudHJpZXMgIGluX2hpdCBpbl9zbG93X3RvdCBpbl9zbG93X21jIGluX25vX3JvdXRlIGluX2JyZCBpbl9tYXJ0aWFuX2RzdCBpbl9tYXJ0aWFuX3NyYyAgb3V0X2hpdCBvdXRfc2xvd190b3Qgb3V0X3Nsb3dfbWMgIGdjX3RvdGFsIGdjX2lnbm9yZWQgZ2NfZ29hbF9taXNzIGdjX2RzdF9vdmVyZmxvdyBpbl9obGlzdF9zZWFyY2ggb3V0X2hsaXN0X3NlYXJjaFxuIik7CiAJCXJldHVybiAwOwogCX0KIAkKQEAgLTI4NDMsNyArMjg0Myw3IEBACiAJCS5wcm9jbmFtZQk9ICJmbHVzaCIsCiAJCS5kYXRhCQk9ICZmbHVzaF9kZWxheSwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKKwkJLm1vZGUJCT0gMDIwMCwKIAkJLnByb2NfaGFuZGxlcgk9ICZpcHY0X3N5c2N0bF9ydGNhY2hlX2ZsdXNoLAogCQkuc3RyYXRlZ3kJPSAmaXB2NF9zeXNjdGxfcnRjYWNoZV9mbHVzaF9zdHJhdGVneSwKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCA1Y2ZmNTZhLi5hMDM3YmFmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBWZXJzaW9uOgkkSWQ6IHRjcC5jLHYgMS4yMTYgMjAwMi8wMi8wMSAyMjowMTowNCBkYXZlbSBFeHAgJAogICoKLSAqIEF1dGhvcnM6CVJvc3MgQmlybywgPGJpcjdAbGVsYW5kLlN0YW5mb3JkLkVkdT4KKyAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCU1hcmsgRXZhbnMsIDxldmFuc21wQHVodXJhLmFzdG9uLmFjLnVrPgogICoJCUNvcmV5IE1pbnlhcmQgPHdmLXJjaCFtaW55YXJkQHJlbGF5LkVVLm5ldD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9kaWFnLmMgYi9uZXQvaXB2NC90Y3BfZGlhZy5jCmluZGV4IDMxM2MxNDAuLjhmYWE4OTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9kaWFnLmMKKysrIGIvbmV0L2lwdjQvdGNwX2RpYWcuYwpAQCAtNzc3LDggKzc3Nyw5IEBACiBzdGF0aWMgdm9pZCB0Y3BkaWFnX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgcWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkgIT0gTlVMTCkgeworCXdoaWxlIChxbGVuLS0gJiYgKHNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpKSB7CiAJCXRjcGRpYWdfcmN2X3NrYihza2IpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IDI1MDQ5MjcuLjc5ODM1YTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIFZlcnNpb246CSRJZDogdGNwX2lucHV0LmMsdiAxLjI0MyAyMDAyLzAyLzAxIDIyOjAxOjA0IGRhdmVtIEV4cCAkCiAgKgotICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJTWFyayBFdmFucywgPGV2YW5zbXBAdWh1cmEuYXN0b24uYWMudWs+CiAgKgkJQ29yZXkgTWlueWFyZCA8d2YtcmNoIW1pbnlhcmRAcmVsYXkuRVUubmV0PgpAQCAtMzUxNyw3ICszNTE3LDYgQEAKIAlpZiAoVENQX1NLQl9DQihza2IpLT5zZXEgPT0gVENQX1NLQl9DQihza2IpLT5lbmRfc2VxKQogCQlnb3RvIGRyb3A7CiAKLQl0aCA9IHNrYi0+aC50aDsKIAlfX3NrYl9wdWxsKHNrYiwgdGgtPmRvZmYqNCk7CiAKIAlUQ1BfRUNOX2FjY2VwdF9jd3IodHAsIHNrYik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCAzYWM2NjU5Li5kYWQ5OGU0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTIyMiwxMCArMjIyLDEzIEBACiAJCWludCByb3ZlcjsKIAogCQlzcGluX2xvY2soJnRjcF9wb3J0YWxsb2NfbG9jayk7Ci0JCXJvdmVyID0gdGNwX3BvcnRfcm92ZXI7CisJCWlmICh0Y3BfcG9ydF9yb3ZlciA8IGxvdykKKwkJCXJvdmVyID0gbG93OworCQllbHNlCisJCQlyb3ZlciA9IHRjcF9wb3J0X3JvdmVyOwogCQlkbyB7CiAJCQlyb3ZlcisrOwotCQkJaWYgKHJvdmVyIDwgbG93IHx8IHJvdmVyID4gaGlnaCkKKwkJCWlmIChyb3ZlciA+IGhpZ2gpCiAJCQkJcm92ZXIgPSBsb3c7CiAJCQloZWFkID0gJnRjcF9iaGFzaFt0Y3BfYmhhc2hmbihyb3ZlcildOwogCQkJc3Bpbl9sb2NrKCZoZWFkLT5sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwppbmRleCBmZDcwNTA5Li5lZWExYTE3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKKysrIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIFZlcnNpb246CSRJZDogdGNwX21pbmlzb2Nrcy5jLHYgMS4xNSAyMDAyLzAyLzAxIDIyOjAxOjA0IGRhdmVtIEV4cCAkCiAgKgotICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJTWFyayBFdmFucywgPGV2YW5zbXBAdWh1cmEuYXN0b24uYWMudWs+CiAgKgkJQ29yZXkgTWlueWFyZCA8d2YtcmNoIW1pbnlhcmRAcmVsYXkuRVUubmV0PgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IDEzYzE0Y2IuLmZhMjRlN2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogVmVyc2lvbjoJJElkOiB0Y3Bfb3V0cHV0LmMsdiAxLjE0NiAyMDAyLzAyLzAxIDIyOjAxOjA0IGRhdmVtIEV4cCAkCiAgKgotICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJTWFyayBFdmFucywgPGV2YW5zbXBAdWh1cmEuYXN0b24uYWMudWs+CiAgKgkJQ29yZXkgTWlueWFyZCA8d2YtcmNoIW1pbnlhcmRAcmVsYXkuRVUubmV0PgpAQCAtNDI3LDcgKzQyNyw3IEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrLT5za19zZW5kX2hlYWQ7CiAKLQlpZiAodGNwX3NuZF90ZXN0KHRwLCBza2IsIGN1cl9tc3MsIFRDUF9OQUdMRV9QVVNIKSkgeworCWlmICh0Y3Bfc25kX3Rlc3Qoc2ssIHNrYiwgY3VyX21zcywgVENQX05BR0xFX1BVU0gpKSB7CiAJCS8qIFNlbmQgaXQgb3V0IG5vdy4gKi8KIAkJVENQX1NLQl9DQihza2IpLT53aGVuID0gdGNwX3RpbWVfc3RhbXA7CiAJCXRjcF90c29fc2V0X3B1c2goc2tiKTsKQEAgLTQ0MCw5ICs0NDAsMTIgQEAKIAl9CiB9CiAKLXZvaWQgdGNwX3NldF9za2JfdHNvX3NlZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG1zc19zdGQpCit2b2lkIHRjcF9zZXRfc2tiX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAoc2tiLT5sZW4gPD0gbXNzX3N0ZCkgeworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCisJaWYgKHNrYi0+bGVuIDw9IHRwLT5tc3NfY2FjaGVfc3RkIHx8CisJICAgICEoc2stPnNrX3JvdXRlX2NhcHMgJiBORVRJRl9GX1RTTykpIHsKIAkJLyogQXZvaWQgdGhlIGNvc3RseSBkaXZpZGUgaW4gdGhlIG5vcm1hbAogCQkgKiBub24tVFNPIGNhc2UuCiAJCSAqLwpAQCAtNDUxLDEwICs0NTQsMTAgQEAKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBpbnQgZmFjdG9yOwogCi0JCWZhY3RvciA9IHNrYi0+bGVuICsgKG1zc19zdGQgLSAxKTsKLQkJZmFjdG9yIC89IG1zc19zdGQ7CisJCWZhY3RvciA9IHNrYi0+bGVuICsgKHRwLT5tc3NfY2FjaGVfc3RkIC0gMSk7CisJCWZhY3RvciAvPSB0cC0+bXNzX2NhY2hlX3N0ZDsKIAkJc2tiX3NoaW5mbyhza2IpLT50c29fc2VncyA9IGZhY3RvcjsKLQkJc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZSA9IG1zc19zdGQ7CisJCXNrYl9zaGluZm8oc2tiKS0+dHNvX3NpemUgPSB0cC0+bXNzX2NhY2hlX3N0ZDsKIAl9CiB9CiAKQEAgLTUyNSw4ICs1MjgsOCBAQAogCX0KIAogCS8qIEZpeCB1cCB0c29fZmFjdG9yIGZvciBib3RoIG9yaWdpbmFsIGFuZCBuZXcgU0tCLiAgKi8KLQl0Y3Bfc2V0X3NrYl90c29fc2Vncyhza2IsIHRwLT5tc3NfY2FjaGVfc3RkKTsKLQl0Y3Bfc2V0X3NrYl90c29fc2VncyhidWZmLCB0cC0+bXNzX2NhY2hlX3N0ZCk7CisJdGNwX3NldF9za2JfdHNvX3NlZ3Moc2ssIHNrYik7CisJdGNwX3NldF9za2JfdHNvX3NlZ3Moc2ssIGJ1ZmYpOwogCiAJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfTE9TVCkgewogCQl0cC0+bG9zdF9vdXQgKz0gdGNwX3NrYl9wY291bnQoc2tiKTsKQEAgLTYwMSw3ICs2MDQsNyBAQAogCSAqIGZhY3RvciBhbmQgbXNzLgogCSAqLwogCWlmICh0Y3Bfc2tiX3Bjb3VudChza2IpID4gMSkKLQkJdGNwX3NldF9za2JfdHNvX3NlZ3Moc2tiLCB0Y3Bfc2tiX21zcyhza2IpKTsKKwkJdGNwX3NldF9za2JfdHNvX3NlZ3Moc2ssIHNrYik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc1Miw3ICs3NTUsNyBAQAogCQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAxKTsKIAogCQl3aGlsZSAoKHNrYiA9IHNrLT5za19zZW5kX2hlYWQpICYmCi0JCSAgICAgICB0Y3Bfc25kX3Rlc3QodHAsIHNrYiwgbXNzX25vdywKKwkJICAgICAgIHRjcF9zbmRfdGVzdChzaywgc2tiLCBtc3Nfbm93LAogCQkJICAgICAgIAkgICAgdGNwX3NrYl9pc19sYXN0KHNrLCBza2IpID8gbm9uYWdsZSA6CiAJCQkJICAgIAkJCSAgICAgICBUQ1BfTkFHTEVfUFVTSCkpIHsKIAkJCWlmIChza2ItPmxlbiA+IG1zc19ub3cpIHsKQEAgLTE2NzYsNyArMTY3OSw3IEBACiAJCQkJCXRwLT5tc3NfY2FjaGUgPSB0cC0+bXNzX2NhY2hlX3N0ZDsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKCF0Y3Bfc2tiX3Bjb3VudChza2IpKQotCQkJCXRjcF9zZXRfc2tiX3Rzb19zZWdzKHNrYiwgdHAtPm1zc19jYWNoZV9zdGQpOworCQkJCXRjcF9zZXRfc2tiX3Rzb19zZWdzKHNrLCBza2IpOwogCiAJCQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzIHw9IFRDUENCX0ZMQUdfUFNIOwogCQkJVENQX1NLQl9DQihza2IpLT53aGVuID0gdGNwX3RpbWVfc3RhbXA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDg1YjI3OWYuLjc5OWViZTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIFZlcnNpb246CSRJZDogdGNwX3RpbWVyLmMsdiAxLjg4IDIwMDIvMDIvMDEgMjI6MDE6MDQgZGF2ZW0gRXhwICQKICAqCi0gKiBBdXRob3JzOglSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKiBBdXRob3JzOglSb3NzIEJpcm8KICAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCQlNYXJrIEV2YW5zLCA8ZXZhbnNtcEB1aHVyYS5hc3Rvbi5hYy51az4KICAqCQlDb3JleSBNaW55YXJkIDx3Zi1yY2ghbWlueWFyZEByZWxheS5FVS5uZXQ+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jCmluZGV4IDhhMjEzMjMuLjRhNjk1MmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCisrKyBiL25ldC9pcHY0L3VkcC5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIFZlcnNpb246CSRJZDogdWRwLmMsdiAxLjEwMiAyMDAyLzAyLzAxIDIyOjAxOjA0IGRhdmVtIEV4cCAkCiAgKgotICogQXV0aG9yczoJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJQXJudCBHdWxicmFuZHNlbiwgPGFndWxicmFAbnZnLnVuaXQubm8+CiAgKgkJQWxhbiBDb3gsIDxBbGFuLkNveEBsaW51eC5vcmc+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IDdmZTJhZmQuLmIyYjYwZjMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC04LDcgKzgsMTAgQEAKICAqIAkKICAqLwogCisjaW5jbHVkZSA8YXNtL2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAKQEAgLTE1Miw2ICsxNTUsOCBAQAogCQl4LT51LnJ0LnJ0X2RzdCA9IHJ0MC0+cnRfZHN0OwogCQl4LT51LnJ0LnJ0X2dhdGV3YXkgPSBydC0+cnRfZ2F0ZXdheTsKIAkJeC0+dS5ydC5ydF9zcGVjX2RzdCA9IHJ0MC0+cnRfc3BlY19kc3Q7CisJCXgtPnUucnQuaWRldiA9IHJ0MC0+aWRldjsKKwkJaW5fZGV2X2hvbGQocnQwLT5pZGV2KTsKIAkJaGVhZGVyX2xlbiAtPSB4LT51LmRzdC54ZnJtLT5wcm9wcy5oZWFkZXJfbGVuOwogCQl0cmFpbGVyX2xlbiAtPSB4LT51LmRzdC54ZnJtLT5wcm9wcy50cmFpbGVyX2xlbjsKIAl9CkBAIC0yNDMsMTEgKzI0OCw0OCBAQAogCXBhdGgtPm9wcy0+dXBkYXRlX3BtdHUocGF0aCwgbXR1KTsKIH0KIAorc3RhdGljIHZvaWQgeGZybTRfZHN0X2Rlc3Ryb3koc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXN0cnVjdCB4ZnJtX2RzdCAqeGRzdCA9IChzdHJ1Y3QgeGZybV9kc3QgKilkc3Q7CisKKwlpZiAobGlrZWx5KHhkc3QtPnUucnQuaWRldikpCisJCWluX2Rldl9wdXQoeGRzdC0+dS5ydC5pZGV2KTsKKwl4ZnJtX2RzdF9kZXN0cm95KHhkc3QpOworfQorCitzdGF0aWMgdm9pZCB4ZnJtNF9kc3RfaWZkb3duKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgaW50IHVucmVnaXN0ZXIpCit7CisJc3RydWN0IHhmcm1fZHN0ICp4ZHN0OworCisJaWYgKCF1bnJlZ2lzdGVyKQorCQlyZXR1cm47CisKKwl4ZHN0ID0gKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDsKKwlpZiAoeGRzdC0+dS5ydC5pZGV2LT5kZXYgPT0gZGV2KSB7CisJCXN0cnVjdCBpbl9kZXZpY2UgKmxvb3BiYWNrX2lkZXYgPSBpbl9kZXZfZ2V0KCZsb29wYmFja19kZXYpOworCQlCVUdfT04oIWxvb3BiYWNrX2lkZXYpOworCisJCWRvIHsKKwkJCWluX2Rldl9wdXQoeGRzdC0+dS5ydC5pZGV2KTsKKwkJCXhkc3QtPnUucnQuaWRldiA9IGxvb3BiYWNrX2lkZXY7CisJCQlpbl9kZXZfaG9sZChsb29wYmFja19pZGV2KTsKKwkJCXhkc3QgPSAoc3RydWN0IHhmcm1fZHN0ICopeGRzdC0+dS5kc3QuY2hpbGQ7CisJCX0gd2hpbGUgKHhkc3QtPnUuZHN0Lnhmcm0pOworCisJCV9faW5fZGV2X3B1dChsb29wYmFja19pZGV2KTsKKwl9CisKKwl4ZnJtX2RzdF9pZmRvd24oZHN0LCBkZXYpOworfQorCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgeGZybTRfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCiAJLnByb3RvY29sID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAogCS5nYyA9CQkJeGZybTRfZ2FyYmFnZV9jb2xsZWN0LAogCS51cGRhdGVfcG10dSA9CQl4ZnJtNF91cGRhdGVfcG10dSwKKwkuZGVzdHJveSA9CQl4ZnJtNF9kc3RfZGVzdHJveSwKKwkuaWZkb3duID0JCXhmcm00X2RzdF9pZmRvd24sCiAJLmdjX3RocmVzaCA9CQkxMDI0LAogCS5lbnRyeV9zaXplID0JCXNpemVvZihzdHJ1Y3QgeGZybV9kc3QpLAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDcxOTZhYzIuLjc3NDRhMjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMzA3Niw3ICszMDc2LDcgQEAKIAluZXRsaW5rX2Jyb2FkY2FzdChydG5sLCBza2IsIDAsIFJUTUdSUF9JUFY2X1BSRUZJWCwgR0ZQX0FUT01JQyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRuZXRsaW5rX2xpbmsgaW5ldDZfcnRuZXRsaW5rX3RhYmxlW1JUTV9NQVggLSBSVE1fQkFTRSArIDFdID0geworc3RhdGljIHN0cnVjdCBydG5ldGxpbmtfbGluayBpbmV0Nl9ydG5ldGxpbmtfdGFibGVbUlRNX05SX01TR1RZUEVTXSA9IHsKIAlbUlRNX0dFVExJTksgLSBSVE1fQkFTRV0gPSB7IC5kdW1waXQJPSBpbmV0Nl9kdW1wX2lmaW5mbywgfSwKIAlbUlRNX05FV0FERFIgLSBSVE1fQkFTRV0gPSB7IC5kb2l0CT0gaW5ldDZfcnRtX25ld2FkZHIsIH0sCiAJW1JUTV9ERUxBRERSIC0gUlRNX0JBU0VdID0geyAuZG9pdAk9IGluZXQ2X3J0bV9kZWxhZGRyLCB9LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggNzY4YjExNy4uMmIxOTNlMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTg4LDYgKzg3LDcgQEAKIAogI2lmZGVmIElORVRfUkVGQ05UX0RFQlVHCiBhdG9taWNfdCBpbmV0Nl9zb2NrX25yOworRVhQT1JUX1NZTUJPTChpbmV0Nl9zb2NrX25yKTsKICNlbmRpZgogCiAvKiBUaGUgaW5ldHN3IHRhYmxlIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgdGhhdCBpbmV0X2NyZWF0ZSBuZWVkcyB0bwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRyc19jb3JlLmMgYi9uZXQvaXB2Ni9leHRoZHJzX2NvcmUuYwppbmRleCA2ZGRhODE1Li4zMTViYzFmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzX2NvcmUuYworKysgYi9uZXQvaXB2Ni9leHRoZHJzX2NvcmUuYwpAQCAtNDEsOCArNDEsOCBAQAogICogd2hlbiBMaW51eCBpbXBsZW1lbnRzIEVTUCAoYW5kIG1heWJlIEFVVEgpIGhlYWRlcnMuCiAgKiAtLUFLCiAgKgotICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgKHByb2JhYmx5IHRydW5jYXRlZCkgZXh0aGRyIHNldCAiaGRyIgotICogb2YgbGVuZ3RoICJsZW4iLiAibmV4dGhkcnAiIGluaXRpYWxseSBwb2ludHMgdG8gc29tZSBwbGFjZSwKKyAqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIChwcm9iYWJseSB0cnVuY2F0ZWQpIGV4dGhkciBzZXQgImhkciIuCisgKiAibmV4dGhkcnAiIGluaXRpYWxseSBwb2ludHMgdG8gc29tZSBwbGFjZSwKICAqIHdoZXJlIHR5cGUgb2YgdGhlIGZpcnN0IGhlYWRlciBjYW4gYmUgZm91bmQuCiAgKgogICogSXQgc2tpcHMgYWxsIHdlbGwta25vd24gZXh0aGRycywgYW5kIHJldHVybnMgcG9pbnRlciB0byB0aGUgc3RhcnQKQEAgLTYzLDcgKzYzLDcgQEAKICAqIC0tQU5LICg5ODA3MjYpCiAgKi8KIAotaW50IGlwdjZfc2tpcF9leHRoZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHN0YXJ0LCB1OCAqbmV4dGhkcnAsIGludCBsZW4pCitpbnQgaXB2Nl9za2lwX2V4dGhkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc3RhcnQsIHU4ICpuZXh0aGRycCkKIHsKIAl1OCBuZXh0aGRyID0gKm5leHRoZHJwOwogCkBAIC03MSwxMyArNzEsMTEgQEAKIAkJc3RydWN0IGlwdjZfb3B0X2hkciBfaGRyLCAqaHA7CiAJCWludCBoZHJsZW47CiAKLQkJaWYgKGxlbiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKQotCQkJcmV0dXJuIC0xOwogCQlpZiAobmV4dGhkciA9PSBORVhUSERSX05PTkUpCiAJCQlyZXR1cm4gLTE7CiAJCWhwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3RhcnQsIHNpemVvZihfaGRyKSwgJl9oZHIpOwogCQlpZiAoaHAgPT0gTlVMTCkKLQkJCUJVRygpOworCQkJcmV0dXJuIC0xOwogCQlpZiAobmV4dGhkciA9PSBORVhUSERSX0ZSQUdNRU5UKSB7CiAJCQl1bnNpZ25lZCBzaG9ydCBfZnJhZ19vZmYsICpmcDsKIAkJCWZwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwKQEAgLTk3LDcgKzk1LDYgQEAKIAkJCWhkcmxlbiA9IGlwdjZfb3B0bGVuKGhwKTsgCiAKIAkJbmV4dGhkciA9IGhwLT5uZXh0aGRyOwotCQlsZW4gLT0gaGRybGVuOwogCQlzdGFydCArPSBoZHJsZW47CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmMKaW5kZXggODdiOTA4Mi4uOGUwZjU2OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaWNtcC5jCisrKyBiL25ldC9pcHY2L2ljbXAuYwpAQCAtMTM1LDcgKzEzNSw3IEBACiAJaWYgKGxlbiA8IDApCiAJCXJldHVybiAxOwogCi0JcHRyID0gaXB2Nl9za2lwX2V4dGhkcihza2IsIHB0ciwgJm5leHRoZHIsIGxlbik7CisJcHRyID0gaXB2Nl9za2lwX2V4dGhkcihza2IsIHB0ciwgJm5leHRoZHIpOwogCWlmIChwdHIgPCAwKQogCQlyZXR1cm4gMDsKIAlpZiAobmV4dGhkciA9PSBJUFBST1RPX0lDTVBWNikgewpAQCAtNTE0LDcgKzUxNCw3IEBACiAJbmV4dGhkciA9ICgoc3RydWN0IGlwdjZoZHIgKilza2ItPmRhdGEpLT5uZXh0aGRyOwogCWlmIChpcHY2X2V4dF9oZHIobmV4dGhkcikpIHsKIAkJLyogbm93IHNraXAgb3ZlciBleHRlbnNpb24gaGVhZGVycyAqLwotCQlpbm5lcl9vZmZzZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgJm5leHRoZHIsIHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CisJCWlubmVyX29mZnNldCA9IGlwdjZfc2tpcF9leHRoZHIoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCAmbmV4dGhkcik7CiAJCWlmIChpbm5lcl9vZmZzZXQ8MCkKIAkJCXJldHVybjsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCmluZGV4IGM1NDgzMGIuLjc1MDk0M2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKQEAgLTU0OSwyMCArNTQ5LDE4IEBACiBzdGF0aWMgdm9pZAogaXBxX3Jjdl9zayhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pCiB7Ci0JZG8gewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IHFsZW47CiAKLQkJaWYgKGRvd25fdHJ5bG9jaygmaXBxbmxfc2VtKSkKLQkJCXJldHVybjsKKwlkb3duKCZpcHFubF9zZW0pOwogCQkJCi0JCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkgIT0gTlVMTCkgewotCQkJaXBxX3Jjdl9za2Ioc2tiKTsKLQkJCWtmcmVlX3NrYihza2IpOwotCQl9CisJZm9yIChxbGVuID0gc2tiX3F1ZXVlX2xlbigmc2stPnNrX3JlY2VpdmVfcXVldWUpOyBxbGVuOyBxbGVuLS0pIHsKKwkJc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKwkJaXBxX3Jjdl9za2Ioc2tiKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJfQogCQkKLQkJdXAoJmlwcW5sX3NlbSk7Ci0KLQl9IHdoaWxlIChpcHFubCAmJiBpcHFubC0+c2tfcmVjZWl2ZV9xdWV1ZS5xbGVuKTsKKwl1cCgmaXBxbmxfc2VtKTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCAxMzUyYzFkLi42MTc2NDViIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtNDU1LDExICs0NTUsMTEgQEAKIHN0YXRpYyBpbnQgcmF3djZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aSAqZmwsCiAJCQkJICAgICBzdHJ1Y3QgcmF3Nl9zb2NrICpycCkKIHsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZXJyID0gMDsKIAlpbnQgb2Zmc2V0OwogCWludCBsZW47CisJaW50IHRvdGFsX2xlbjsKIAl1MzIgdG1wX2NzdW07CiAJdTE2IGNzdW07CiAKQEAgLTQ3MCw3ICs0NzAsOCBAQAogCQlnb3RvIG91dDsKIAogCW9mZnNldCA9IHJwLT5vZmZzZXQ7Ci0JaWYgKG9mZnNldCA+PSBpbmV0LT5jb3JrLmxlbmd0aCAtIDEpIHsKKwl0b3RhbF9sZW4gPSBpbmV0X3NrKHNrKS0+Y29yay5sZW5ndGggLSAoc2tiLT5uaC5yYXcgLSBza2ItPmRhdGEpOworCWlmIChvZmZzZXQgPj0gdG90YWxfbGVuIC0gMSkgewogCQllcnIgPSAtRUlOVkFMOwogCQlpcDZfZmx1c2hfcGVuZGluZ19mcmFtZXMoc2spOwogCQlnb3RvIG91dDsKQEAgLTUxNCw3ICs1MTUsNyBAQAogCiAJdG1wX2NzdW0gPSBjc3VtX2lwdjZfbWFnaWMoJmZsLT5mbDZfc3JjLAogCQkJCSAgICZmbC0+Zmw2X2RzdCwKLQkJCQkgICBpbmV0LT5jb3JrLmxlbmd0aCwgZmwtPnByb3RvLCB0bXBfY3N1bSk7CisJCQkJICAgdG90YWxfbGVuLCBmbC0+cHJvdG8sIHRtcF9jc3VtKTsKIAogCWlmICh0bXBfY3N1bSA9PSAwKQogCQl0bXBfY3N1bSA9IC0xOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggMTgzODAyOS4uM2JmOGEwMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC0yMDA1LDcgKzIwMDUsNyBAQAogCQkucHJvY25hbWUJPQkiZmx1c2giLAogICAgICAgICAgCS5kYXRhCQk9CSZmbHVzaF9kZWxheSwKIAkJLm1heGxlbgkJPQlzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0JMDY0NCwKKwkJLm1vZGUJCT0JMDIwMCwKICAgICAgICAgIAkucHJvY19oYW5kbGVyCT0JJmlwdjZfc3lzY3RsX3J0Y2FjaGVfZmx1c2gKIAl9LAogCXsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IDQ3NjBjODUuLjBmNjllODAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtMTM5LDkgKzEzOSwxMiBAQAogCQlpbnQgcm92ZXI7CiAKIAkJc3Bpbl9sb2NrKCZ0Y3BfcG9ydGFsbG9jX2xvY2spOwotCQlyb3ZlciA9IHRjcF9wb3J0X3JvdmVyOworCQlpZiAodGNwX3BvcnRfcm92ZXIgPCBsb3cpCisJCQlyb3ZlciA9IGxvdzsKKwkJZWxzZQorCQkJcm92ZXIgPSB0Y3BfcG9ydF9yb3ZlcjsKIAkJZG8gewlyb3ZlcisrOwotCQkJaWYgKChyb3ZlciA8IGxvdykgfHwgKHJvdmVyID4gaGlnaCkpCisJCQlpZiAocm92ZXIgPiBoaWdoKQogCQkJCXJvdmVyID0gbG93OwogCQkJaGVhZCA9ICZ0Y3BfYmhhc2hbdGNwX2JoYXNoZm4ocm92ZXIpXTsKIAkJCXNwaW5fbG9jaygmaGVhZC0+bG9jayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IDhhNGYzN2QuLjQ0MjliMWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC0xMSw3ICsxMSwxMSBAQAogICogCiAgKi8KIAorI2luY2x1ZGUgPGFzbS9idWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9hZGRyY29uZi5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KQEAgLTE2Niw2ICsxNzAsOCBAQAogCQltZW1jcHkoJngtPnUucnQ2LnJ0NmlfZ2F0ZXdheSwgJnJ0MC0+cnQ2aV9nYXRld2F5LCBzaXplb2YoeC0+dS5ydDYucnQ2aV9nYXRld2F5KSk7IAogCQl4LT51LnJ0Ni5ydDZpX2RzdCAgICAgID0gcnQwLT5ydDZpX2RzdDsKIAkJeC0+dS5ydDYucnQ2aV9zcmMgICAgICA9IHJ0MC0+cnQ2aV9zcmM7CQorCQl4LT51LnJ0Ni5ydDZpX2lkZXYgICAgID0gcnQwLT5ydDZpX2lkZXY7CisJCWluNl9kZXZfaG9sZChydDAtPnJ0NmlfaWRldik7CiAJCWhlYWRlcl9sZW4gLT0geC0+dS5kc3QueGZybS0+cHJvcHMuaGVhZGVyX2xlbjsKIAkJdHJhaWxlcl9sZW4gLT0geC0+dS5kc3QueGZybS0+cHJvcHMudHJhaWxlcl9sZW47CiAJfQpAQCAtMjUxLDExICsyNTcsNDggQEAKIAlwYXRoLT5vcHMtPnVwZGF0ZV9wbXR1KHBhdGgsIG10dSk7CiB9CiAKK3N0YXRpYyB2b2lkIHhmcm02X2RzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlzdHJ1Y3QgeGZybV9kc3QgKnhkc3QgPSAoc3RydWN0IHhmcm1fZHN0ICopZHN0OworCisJaWYgKGxpa2VseSh4ZHN0LT51LnJ0Ni5ydDZpX2lkZXYpKQorCQlpbjZfZGV2X3B1dCh4ZHN0LT51LnJ0Ni5ydDZpX2lkZXYpOworCXhmcm1fZHN0X2Rlc3Ryb3koeGRzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHhmcm02X2RzdF9pZmRvd24oc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBpbnQgdW5yZWdpc3RlcikKK3sKKwlzdHJ1Y3QgeGZybV9kc3QgKnhkc3Q7CisKKwlpZiAoIXVucmVnaXN0ZXIpCisJCXJldHVybjsKKworCXhkc3QgPSAoc3RydWN0IHhmcm1fZHN0ICopZHN0OworCWlmICh4ZHN0LT51LnJ0Ni5ydDZpX2lkZXYtPmRldiA9PSBkZXYpIHsKKwkJc3RydWN0IGluZXQ2X2RldiAqbG9vcGJhY2tfaWRldiA9IGluNl9kZXZfZ2V0KCZsb29wYmFja19kZXYpOworCQlCVUdfT04oIWxvb3BiYWNrX2lkZXYpOworCisJCWRvIHsKKwkJCWluNl9kZXZfcHV0KHhkc3QtPnUucnQ2LnJ0NmlfaWRldik7CisJCQl4ZHN0LT51LnJ0Ni5ydDZpX2lkZXYgPSBsb29wYmFja19pZGV2OworCQkJaW42X2Rldl9ob2xkKGxvb3BiYWNrX2lkZXYpOworCQkJeGRzdCA9IChzdHJ1Y3QgeGZybV9kc3QgKil4ZHN0LT51LmRzdC5jaGlsZDsKKwkJfSB3aGlsZSAoeGRzdC0+dS5kc3QueGZybSk7CisKKwkJX19pbjZfZGV2X3B1dChsb29wYmFja19pZGV2KTsKKwl9CisKKwl4ZnJtX2RzdF9pZmRvd24oZHN0LCBkZXYpOworfQorCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgeGZybTZfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQ2LAogCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpLAogCS5nYyA9CQkJeGZybTZfZ2FyYmFnZV9jb2xsZWN0LAogCS51cGRhdGVfcG10dSA9CQl4ZnJtNl91cGRhdGVfcG10dSwKKwkuZGVzdHJveSA9CQl4ZnJtNl9kc3RfZGVzdHJveSwKKwkuaWZkb3duID0JCXhmcm02X2RzdF9pZmRvd24sCiAJLmdjX3RocmVzaCA9CQkxMDI0LAogCS5lbnRyeV9zaXplID0JCXNpemVvZihzdHJ1Y3QgeGZybV9kc3QpLAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMgYi9uZXQvaXJkYS9pcmRhX2RldmljZS5jCmluZGV4IGQ2Y2NkMzIuLjcwNTQzZDggMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMKKysrIGIvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYwpAQCAtNDcwLDYgKzQ3MCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlyZGFfZGV2aWNlX3VucmVnaXN0ZXJfZG9uZ2xlKTsKIAorI2lmZGVmIENPTkZJR19JU0FfRE1BX0FQSQogLyoKICAqIEZ1bmN0aW9uIHNldHVwX2RtYSAoaWRldiwgYnVmZmVyLCBjb3VudCwgbW9kZSkKICAqCkBAIC00OTIsMyArNDkzLDQgQEAKIAlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woaXJkYV9zZXR1cF9kbWEpOworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggMWQ1OTA1Yy4uNzMzYmY1MiAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtMjEsNyArMjEsNiBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNTAsNiArNDksOCBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvc2NtLmg+CiAKQEAgLTM3NCw3ICszNzUsNiBAQAogCQlubGstPmNiLT5kb25lKG5say0+Y2IpOwogCQluZXRsaW5rX2Rlc3Ryb3lfY2FsbGJhY2sobmxrLT5jYik7CiAJCW5say0+Y2IgPSBOVUxMOwotCQlfX3NvY2tfcHV0KHNrKTsKIAl9CiAJc3Bpbl91bmxvY2soJm5say0+Y2JfbG9jayk7CiAKQEAgLTkwNiw2ICs5MDYsNyBAQAogCU5FVExJTktfQ0Ioc2tiKS5ncm91cHMJPSBubGstPmdyb3VwczsKIAlORVRMSU5LX0NCKHNrYikuZHN0X3BpZCA9IGRzdF9waWQ7CiAJTkVUTElOS19DQihza2IpLmRzdF9ncm91cHMgPSBkc3RfZ3JvdXBzOworCU5FVExJTktfQ0Ioc2tiKS5sb2dpbnVpZCA9IGF1ZGl0X2dldF9sb2dpbnVpZChjdXJyZW50LT5hdWRpdF9jb250ZXh0KTsKIAltZW1jcHkoTkVUTElOS19DUkVEUyhza2IpLCAmc2lvY2ItPnNjbS0+Y3JlZHMsIHNpemVvZihzdHJ1Y3QgdWNyZWQpKTsKIAogCS8qIFdoYXQgY2FuIEkgZG8/IE5ldGxpbmsgaXMgYXN5bmNocm9ub3VzLCBzbyB0aGF0CkBAIC0xMTAwLDcgKzExMDEsNiBAQAogCXNwaW5fdW5sb2NrKCZubGstPmNiX2xvY2spOwogCiAJbmV0bGlua19kZXN0cm95X2NhbGxiYWNrKGNiKTsKLQlfX3NvY2tfcHV0KHNrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEzOSw3ICsxMTM5LDYgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJbmxrLT5jYiA9IGNiOwotCXNvY2tfaG9sZChzayk7CiAJc3Bpbl91bmxvY2soJm5say0+Y2JfbG9jayk7CiAKIAluZXRsaW5rX2R1bXAoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggNjRhY2VhMC4uMDI2OTYxNiAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIFZlcnNpb246CSRJZDogYWZfcGFja2V0LmMsdiAxLjYxIDIwMDIvMDIvMDggMDM6NTc6MTkgZGF2ZW0gRXhwICQKICAqCi0gKiBBdXRob3JzOglSb3NzIEJpcm8sIDxiaXI3QGxlbGFuZC5TdGFuZm9yZC5FZHU+CisgKiBBdXRob3JzOglSb3NzIEJpcm8KICAqCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCQlBbGFuIENveCwgPGd3NHB0c0BndzRwdHMuYW1wci5vcmc+CiAgKgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL0tjb25maWcgYi9uZXQvc2NoZWQvS2NvbmZpZwppbmRleCAzZDFkOTAyLi5iMDk0MTE4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvS2NvbmZpZworKysgYi9uZXQvc2NoZWQvS2NvbmZpZwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJZGVwZW5kcyBvbiBORVRfU0NIRUQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgR2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uCi0JICAoUkVEKSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0gZm9yIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXMKKwkgIChHUkVEKSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0gZm9yIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXMKIAkgIChzZWUgdGhlIHRvcCBvZiA8ZmlsZTpuZXQvc2NoZWQvc2NoX3JlZC5jPiBmb3IgZGV0YWlscyBhbmQKIAkgIHJlZmVyZW5jZXMgYWJvdXQgdGhlIGFsZ29yaXRobSkuCiAKQEAgLTUwNiwzICs1MDYsMTMgQEAKIAkgIFNheSBZIHRvIHN1cHBvcnQgdHJhZmZpYyBwb2xpY2luZyAoYmFuZHdpZHRoIGxpbWl0cykuICBOZWVkZWQgZm9yCiAJICBpbmdyZXNzIGFuZCBlZ3Jlc3MgcmF0ZSBsaW1pdGluZy4KIAorY29uZmlnIE5FVF9BQ1RfU0lNUAorICAgICAgICB0cmlzdGF0ZSAiU2ltcGxlIGFjdGlvbiIKKyAgICAgICAgZGVwZW5kcyBvbiBORVRfQ0xTX0FDVAorICAgICAgICAtLS1oZWxwLS0tCisgICAgICAgIFlvdSBtdXN0IGhhdmUgbmV3IGlwcm91dGUyIHRvIHVzZSB0aGlzIGZlYXR1cmUuCisgICAgICAgIFRoaXMgYWRkcyBhIHZlcnkgc2ltcGxlIGFjdGlvbiBmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlcworCVRoZSBpZGVhIGlzIHRvIGdpdmUgYWN0aW9uIGF1dGhvcnMgYSBiYXNpYyBleGFtcGxlIHRvIGxvb2sgYXQuCisJQWxsIHRoaXMgYWN0aW9uIHdpbGwgZG8gaXMgcHJpbnQgb24gdGhlIGNvbnNvbGUgdGhlIGNvbmZpZ3VyZWQKKwlwb2xpY3kgc3RyaW5nIGZvbGxvd2VkIGJ5IF8gdGhlbiBwYWNrZXQgY291bnQuCisKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9NYWtlZmlsZSBiL25ldC9zY2hlZC9NYWtlZmlsZQppbmRleCA0MzFlNTU3Li5lYjNmZTU4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvTWFrZWZpbGUKKysrIGIvbmV0L3NjaGVkL01ha2VmaWxlCkBAIC02LDEzICs2LDE0IEBACiAKIG9iai0kKENPTkZJR19ORVRfU0NIRUQpCQkrPSBzY2hfYXBpLm8gc2NoX2ZpZm8ubwogb2JqLSQoQ09ORklHX05FVF9DTFMpCQkrPSBjbHNfYXBpLm8KLW9iai0kKENPTkZJR19ORVRfQ0xTX0FDVCkgICAgICAgKz0gYWN0X2FwaS5vCitvYmotJChDT05GSUdfTkVUX0NMU19BQ1QpCSs9IGFjdF9hcGkubwogb2JqLSQoQ09ORklHX05FVF9BQ1RfUE9MSUNFKQkrPSBwb2xpY2Uubwogb2JqLSQoQ09ORklHX05FVF9DTFNfUE9MSUNFKQkrPSBwb2xpY2Uubwotb2JqLSQoQ09ORklHX05FVF9BQ1RfR0FDVCkgICAgICArPSBnYWN0Lm8KLW9iai0kKENPTkZJR19ORVRfQUNUX01JUlJFRCkgICAgKz0gbWlycmVkLm8KLW9iai0kKENPTkZJR19ORVRfQUNUX0lQVCkgICAgICAgKz0gaXB0Lm8KLW9iai0kKENPTkZJR19ORVRfQUNUX1BFRElUKSAgICAgKz0gcGVkaXQubworb2JqLSQoQ09ORklHX05FVF9BQ1RfR0FDVCkJKz0gZ2FjdC5vCitvYmotJChDT05GSUdfTkVUX0FDVF9NSVJSRUQpCSs9IG1pcnJlZC5vCitvYmotJChDT05GSUdfTkVUX0FDVF9JUFQpCSs9IGlwdC5vCitvYmotJChDT05GSUdfTkVUX0FDVF9QRURJVCkJKz0gcGVkaXQubworb2JqLSQoQ09ORklHX05FVF9BQ1RfU0lNUCkJKz0gc2ltcGxlLm8KIG9iai0kKENPTkZJR19ORVRfU0NIX0NCUSkJKz0gc2NoX2NicS5vCiBvYmotJChDT05GSUdfTkVUX1NDSF9IVEIpCSs9IHNjaF9odGIubwogb2JqLSQoQ09ORklHX05FVF9TQ0hfSFBGUSkJKz0gc2NoX2hwZnEubwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKaW5kZXggNWU2Y2MzNy4uY2FmY2IwOCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuYworKysgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCkBAIC0xNzEsMTAgKzE3MSwxMCBAQAogCQkJCXNrYi0+dGNfdmVyZCA9IFNFVF9UQ19PSzJNVU5HRShza2ItPnRjX3ZlcmQpOwogCQkJCXNrYi0+dGNfdmVyZCA9IENMUl9UQ19NVU5HRUQoc2tiLT50Y192ZXJkKTsKIAkJCX0KLQkJCWlmIChyZXQgIT0gVENfQUNUX1BJUEUpCi0JCQkJZ290byBleGVjX2RvbmU7CiAJCQlpZiAocmV0ID09IFRDX0FDVF9SRVBFQVQpCiAJCQkJZ290byByZXBlYXQ7CS8qIHdlIG5lZWQgYSB0dGwgLSBKSFMgKi8KKwkJCWlmIChyZXQgIT0gVENfQUNUX1BJUEUpCisJCQkJZ290byBleGVjX2RvbmU7CiAJCX0KIAkJYWN0ID0gYS0+bmV4dDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Z3LmMgYi9uZXQvc2NoZWQvY2xzX2Z3LmMKaW5kZXggZmRmYzgzYS4uMjlkOGI5YSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19mdy5jCisrKyBiL25ldC9zY2hlZC9jbHNfZncuYwpAQCAtNDYsOSArNDYsMTEgQEAKICNpbmNsdWRlIDxuZXQvYWN0X2FwaS5oPgogI2luY2x1ZGUgPG5ldC9wa3RfY2xzLmg+CiAKKyNkZWZpbmUgSFRTSVpFIChQQUdFX1NJWkUvc2l6ZW9mKHN0cnVjdCBmd19maWx0ZXIgKikpCisKIHN0cnVjdCBmd19oZWFkCiB7Ci0Jc3RydWN0IGZ3X2ZpbHRlciAqaHRbMjU2XTsKKwlzdHJ1Y3QgZndfZmlsdGVyICpodFtIVFNJWkVdOwogfTsKIAogc3RydWN0IGZ3X2ZpbHRlcgpAQCAtNjksNyArNzEsMjggQEAKIAogc3RhdGljIF9faW5saW5lX18gaW50IGZ3X2hhc2godTMyIGhhbmRsZSkKIHsKLQlyZXR1cm4gaGFuZGxlJjB4RkY7CisJaWYgKEhUU0laRSA9PSA0MDk2KQorCQlyZXR1cm4gKChoYW5kbGUgPj4gMjQpICYgMHhGRkYpIF4KKwkJICAgICAgICgoaGFuZGxlID4+IDEyKSAmIDB4RkZGKSBeCisJCSAgICAgICAoaGFuZGxlICYgMHhGRkYpOworCWVsc2UgaWYgKEhUU0laRSA9PSAyMDQ4KQorCQlyZXR1cm4gKChoYW5kbGUgPj4gMjIpICYgMHg3RkYpIF4KKwkJICAgICAgICgoaGFuZGxlID4+IDExKSAmIDB4N0ZGKSBeCisJCSAgICAgICAoaGFuZGxlICYgMHg3RkYpOworCWVsc2UgaWYgKEhUU0laRSA9PSAxMDI0KQorCQlyZXR1cm4gKChoYW5kbGUgPj4gMjApICYgMHgzRkYpIF4KKwkJICAgICAgICgoaGFuZGxlID4+IDEwKSAmIDB4M0ZGKSBeCisJCSAgICAgICAoaGFuZGxlICYgMHgzRkYpOworCWVsc2UgaWYgKEhUU0laRSA9PSA1MTIpCisJCXJldHVybiAoaGFuZGxlID4+IDI3KSBeCisJCSAgICAgICAoKGhhbmRsZSA+PiAxOCkgJiAweDFGRikgXgorCQkgICAgICAgKChoYW5kbGUgPj4gOSkgJiAweDFGRikgXgorCQkgICAgICAgKGhhbmRsZSAmIDB4MUZGKTsKKwllbHNlIGlmIChIVFNJWkUgPT0gMjU2KSB7CisJCXU4ICp0ID0gKHU4ICopICZoYW5kbGU7CisJCXJldHVybiB0WzBdIF4gdFsxXSBeIHRbMl0gXiB0WzNdOworCX0gZWxzZSAKKwkJcmV0dXJuIGhhbmRsZSAmIChIVFNJWkUgLSAxKTsKIH0KIAogc3RhdGljIGludCBmd19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKQEAgLTE1Miw3ICsxNzUsNyBAQAogCWlmIChoZWFkID09IE5VTEwpCiAJCXJldHVybjsKIAotCWZvciAoaD0wOyBoPDI1NjsgaCsrKSB7CisJZm9yIChoPTA7IGg8SFRTSVpFOyBoKyspIHsKIAkJd2hpbGUgKChmPWhlYWQtPmh0W2hdKSAhPSBOVUxMKSB7CiAJCQloZWFkLT5odFtoXSA9IGYtPm5leHQ7CiAJCQlmd19kZWxldGVfZmlsdGVyKHRwLCBmKTsKQEAgLTI5MSw3ICszMTQsNyBAQAogCWlmIChhcmctPnN0b3ApCiAJCXJldHVybjsKIAotCWZvciAoaCA9IDA7IGggPCAyNTY7IGgrKykgeworCWZvciAoaCA9IDA7IGggPCBIVFNJWkU7IGgrKykgewogCQlzdHJ1Y3QgZndfZmlsdGVyICpmOwogCiAJCWZvciAoZiA9IGhlYWQtPmh0W2hdOyBmOyBmID0gZi0+bmV4dCkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKaW5kZXggNDMyM2E3NC4uMDc5NzdmOCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuYworKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCkBAIC0xMjg5LDYgKzEyODksNyBAQAogCiBzdWJzeXNfaW5pdGNhbGwocGt0c2NoZWRfaW5pdCk7CiAKK0VYUE9SVF9TWU1CT0wocWRpc2NfbG9va3VwKTsKIEVYUE9SVF9TWU1CT0wocWRpc2NfZ2V0X3J0YWIpOwogRVhQT1JUX1NZTUJPTChxZGlzY19wdXRfcnRhYik7CiBFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3FkaXNjKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggOGMwMWUwMi4uODdlNDhhNCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTE3OSw2ICsxNzksNyBAQAogCQluZXRpZl9zY2hlZHVsZShkZXYpOwogCQlyZXR1cm4gMTsKIAl9CisJQlVHX09OKChpbnQpIHEtPnEucWxlbiA8IDApOwogCXJldHVybiBxLT5xLnFsZW47CiB9CiAKQEAgLTUzOSw2ICs1NDAsMTAgQEAKIAkJd3JpdGVfdW5sb2NrX2JoKCZxZGlzY190cmVlX2xvY2spOwogCX0KIAorCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKQorCQkvKiBEZWxheSBhY3RpdmF0aW9uIHVudGlsIG5leHQgY2Fycmllci1vbiBldmVudCAqLworCQlyZXR1cm47CisKIAlzcGluX2xvY2tfYmgoJmRldi0+cXVldWVfbG9jayk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0+cWRpc2MsIGRldi0+cWRpc2Nfc2xlZXBpbmcpOwogCWlmIChkZXYtPnFkaXNjICE9ICZub3F1ZXVlX3FkaXNjKSB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuYwppbmRleCBhODU5MzVlLi41NThjYzA4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCisrKyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTcxNyw2ICs3MTcsMTAgQEAKIAlpZiAocS0+ZGlyZWN0X3F1ZXVlLnFsZW4gPCBxLT5kaXJlY3RfcWxlbikgewogCSAgICBfX3NrYl9xdWV1ZV90YWlsKCZxLT5kaXJlY3RfcXVldWUsIHNrYik7CiAJICAgIHEtPmRpcmVjdF9wa3RzKys7CisJfSBlbHNlIHsKKwkgICAga2ZyZWVfc2tiKHNrYik7CisJICAgIHNjaC0+cXN0YXRzLmRyb3BzKys7CisJICAgIHJldHVybiBORVRfWE1JVF9EUk9QOwogCX0KICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKICAgICB9IGVsc2UgaWYgKCFjbCkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jIGIvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCmluZGV4IDMxYzI5ZGUuLmUwYzlmYmUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfbmV0ZW0uYworKysgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKQEAgLTEzOCwzOCArMTM4LDc3IEBACiB9CiAKIC8qIFB1dCBza2IgaW4gdGhlIHByaXZhdGUgZGVsYXllZCBxdWV1ZS4gKi8KLXN0YXRpYyBpbnQgZGVsYXlfc2tiKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBuZXRlbV9kZWxheShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbmV0ZW1fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKLQlzdHJ1Y3QgbmV0ZW1fc2tiX2NiICpjYiA9IChzdHJ1Y3QgbmV0ZW1fc2tiX2NiICopc2tiLT5jYjsKIAlwc2NoZWRfdGRpZmZfdCB0ZDsKIAlwc2NoZWRfdGltZV90IG5vdzsKIAkKIAlQU0NIRURfR0VUX1RJTUUobm93KTsKIAl0ZCA9IHRhYmxlZGlzdChxLT5sYXRlbmN5LCBxLT5qaXR0ZXIsICZxLT5kZWxheV9jb3IsIHEtPmRlbGF5X2Rpc3QpOwotCVBTQ0hFRF9UQUREMihub3csIHRkLCBjYi0+dGltZV90b19zZW5kKTsKIAkKIAkvKiBBbHdheXMgcXVldWUgYXQgdGFpbCB0byBrZWVwIHBhY2tldHMgaW4gb3JkZXIgKi8KIAlpZiAobGlrZWx5KHEtPmRlbGF5ZWQucWxlbiA8IHEtPmxpbWl0KSkgeworCQlzdHJ1Y3QgbmV0ZW1fc2tiX2NiICpjYiA9IChzdHJ1Y3QgbmV0ZW1fc2tiX2NiICopc2tiLT5jYjsKKwkKKwkJUFNDSEVEX1RBREQyKG5vdywgdGQsIGNiLT50aW1lX3RvX3NlbmQpOworCisJCXByX2RlYnVnKCJuZXRlbV9kZWxheTogc2tiPSVwIG5vdz0lbGx1IHRvc2VuZD0lbGx1XG4iLCBza2IsIAorCQkJIG5vdywgY2ItPnRpbWVfdG9fc2VuZCk7CisJCiAJCV9fc2tiX3F1ZXVlX3RhaWwoJnEtPmRlbGF5ZWQsIHNrYik7Ci0JCWlmICghdGltZXJfcGVuZGluZygmcS0+dGltZXIpKSB7Ci0JCQlxLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIFBTQ0hFRF9VUzJKSUZGSUUodGQpOwotCQkJYWRkX3RpbWVyKCZxLT50aW1lcik7Ci0JCX0KIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAJfQogCisJcHJfZGVidWcoIm5ldGVtX2RlbGF5OiBxdWV1ZSBvdmVyIGxpbWl0ICVkXG4iLCBxLT5saW1pdCk7CisJc2NoLT5xc3RhdHMub3ZlcmxpbWl0cysrOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBORVRfWE1JVF9EUk9QOwogfQogCisvKgorICogIE1vdmUgYSBwYWNrZXQgdGhhdCBpcyByZWFkeSB0byBzZW5kIGZyb20gdGhlIGRlbGF5IGhvbGRpbmcKKyAqICBsaXN0IHRvIHRoZSB1bmRlcmx5aW5nIHFkaXNjLgorICovCitzdGF0aWMgaW50IG5ldGVtX3J1bihzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlzdHJ1Y3QgbmV0ZW1fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXBzY2hlZF90aW1lX3Qgbm93OworCisJUFNDSEVEX0dFVF9USU1FKG5vdyk7CisKKwlza2IgPSBza2JfcGVlaygmcS0+ZGVsYXllZCk7CisJaWYgKHNrYikgeworCQljb25zdCBzdHJ1Y3QgbmV0ZW1fc2tiX2NiICpjYgorCQkJPSAoY29uc3Qgc3RydWN0IG5ldGVtX3NrYl9jYiAqKXNrYi0+Y2I7CisJCWxvbmcgZGVsYXkgCisJCQk9IFBTQ0hFRF9VUzJKSUZGSUUoUFNDSEVEX1RESUZGKGNiLT50aW1lX3RvX3NlbmQsIG5vdykpOworCQlwcl9kZWJ1ZygibmV0ZW1fcnVuOiBza2I9JXAgZGVsYXk9JWxkXG4iLCBza2IsIGRlbGF5KTsKKworCQkvKiBpZiBtb3JlIHRpbWUgcmVtYWluaW5nPyAqLworCQlpZiAoZGVsYXkgPiAwKSB7CisJCQltb2RfdGltZXIoJnEtPnRpbWVyLCBqaWZmaWVzICsgZGVsYXkpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlfX3NrYl91bmxpbmsoc2tiLCAmcS0+ZGVsYXllZCk7CisJCQorCQlpZiAocS0+cWRpc2MtPmVucXVldWUoc2tiLCBxLT5xZGlzYykpIHsKKwkJCXNjaC0+cS5xbGVuLS07CisJCQlzY2gtPnFzdGF0cy5kcm9wcysrOworCQl9IAorCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG5ldGVtX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gpCiB7CiAJc3RydWN0IG5ldGVtX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjI7CiAJaW50IHJldDsKIAotCXByX2RlYnVnKCJuZXRlbV9lbnF1ZXVlIHNrYj0lcCBAJWx1XG4iLCBza2IsIGppZmZpZXMpOworCXByX2RlYnVnKCJuZXRlbV9lbnF1ZXVlIHNrYj0lcFxuIiwgc2tiKTsKIAogCS8qIFJhbmRvbSBwYWNrZXQgZHJvcCAwID0+IG5vbmUsIH4wID0+IGFsbCAqLwogCWlmIChxLT5sb3NzICYmIHEtPmxvc3MgPj0gZ2V0X2NyYW5kb20oJnEtPmxvc3NfY29yKSkgewpAQCAtMTgwLDExICsyMTksMjEgQEAKIAl9CiAKIAkvKiBSYW5kb20gZHVwbGljYXRpb24gKi8KLQlpZiAocS0+ZHVwbGljYXRlICYmIHEtPmR1cGxpY2F0ZSA+PSBnZXRfY3JhbmRvbSgmcS0+ZHVwX2NvcikKLQkgICAgJiYgKHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKSkgIT0gTlVMTCkgewotCQlwcl9kZWJ1ZygibmV0ZW1fZW5xdWV1ZTogZHVwICVwXG4iLCBza2IyKTsKKwlpZiAocS0+ZHVwbGljYXRlICYmIHEtPmR1cGxpY2F0ZSA+PSBnZXRfY3JhbmRvbSgmcS0+ZHVwX2NvcikpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CiAKLQkJaWYgKGRlbGF5X3NrYihzY2gsIHNrYjIpKSB7CisJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHNrYjIgJiYgbmV0ZW1fZGVsYXkoc2NoLCBza2IyKSA9PSBORVRfWE1JVF9TVUNDRVNTKSB7CisJCQlzdHJ1Y3QgUWRpc2MgKnFwOworCisJCQkvKiBTaW5jZSBvbmUgcGFja2V0IGNhbiBnZW5lcmF0ZSB0d28gcGFja2V0cyBpbiB0aGUKKwkJCSAqIHF1ZXVlLCB0aGUgcGFyZW50J3MgcWxlbiBhY2NvdW50aW5nIGdldHMgY29uZnVzZWQsCisJCQkgKiBzbyBmaXggaXQuCisJCQkgKi8KKwkJCXFwID0gcWRpc2NfbG9va3VwKHNjaC0+ZGV2LCBUQ19IX01BSihzY2gtPnBhcmVudCkpOworCQkJaWYgKHFwKQorCQkJCXFwLT5xLnFsZW4rKzsKKwogCQkJc2NoLT5xLnFsZW4rKzsKIAkJCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHNrYjItPmxlbjsKIAkJCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKQEAgLTIwMiw3ICsyNTEsOCBAQAogCQlyZXQgPSBxLT5xZGlzYy0+ZW5xdWV1ZShza2IsIHEtPnFkaXNjKTsKIAl9IGVsc2UgewogCQlxLT5jb3VudGVyID0gMDsKLQkJcmV0ID0gZGVsYXlfc2tiKHNjaCwgc2tiKTsKKwkJcmV0ID0gbmV0ZW1fZGVsYXkoc2NoLCBza2IpOworCQluZXRlbV9ydW4oc2NoKTsKIAl9CiAKIAlpZiAobGlrZWx5KHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSkgewpAQCAtMjEyLDYgKzI2Miw3IEBACiAJfSBlbHNlCiAJCXNjaC0+cXN0YXRzLmRyb3BzKys7CiAKKwlwcl9kZWJ1ZygibmV0ZW06IGVucXVldWUgcmV0ICVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0MSw1NiArMjkyLDM1IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotLyogRGVxdWV1ZSBwYWNrZXQuCi0gKiAgTW92ZSBhbGwgcGFja2V0cyB0aGF0IGFyZSByZWFkeSB0byBzZW5kIGZyb20gdGhlIGRlbGF5IGhvbGRpbmcKLSAqICBsaXN0IHRvIHRoZSB1bmRlcmx5aW5nIHFkaXNjLCB0aGVuIGp1c3QgY2FsbCBkZXF1ZXVlCi0gKi8KIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0ZW1fZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaCkKIHsKIAlzdHJ1Y3QgbmV0ZW1fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBwZW5kaW5nOworCisJcGVuZGluZyA9IG5ldGVtX3J1bihzY2gpOwogCiAJc2tiID0gcS0+cWRpc2MtPmRlcXVldWUocS0+cWRpc2MpOwotCWlmIChza2IpIAorCWlmIChza2IpIHsKKwkJcHJfZGVidWcoIm5ldGVtX2RlcXVldWU6IHJldHVybiBza2I9JXBcbiIsIHNrYik7CiAJCXNjaC0+cS5xbGVuLS07CisJCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKKwl9CisJZWxzZSBpZiAocGVuZGluZykgeworCQlwcl9kZWJ1ZygibmV0ZW1fZGVxdWV1ZTogdGhyb3R0bGluZ1xuIik7CisJCXNjaC0+ZmxhZ3MgfD0gVENRX0ZfVEhST1RUTEVEOworCX0gCisKIAlyZXR1cm4gc2tiOwogfQogCiBzdGF0aWMgdm9pZCBuZXRlbV93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgUWRpc2MgKnNjaCA9IChzdHJ1Y3QgUWRpc2MgKilhcmc7Ci0Jc3RydWN0IG5ldGVtX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNjaC0+ZGV2OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JcHNjaGVkX3RpbWVfdCBub3c7CiAKLQlwcl9kZWJ1ZygibmV0ZW1fd2F0Y2hkb2c6IGZpcmVkIEAlbHVcbiIsIGppZmZpZXMpOwotCi0Jc3Bpbl9sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOwotCVBTQ0hFRF9HRVRfVElNRShub3cpOwotCi0Jd2hpbGUgKChza2IgPSBza2JfcGVlaygmcS0+ZGVsYXllZCkpICE9IE5VTEwpIHsKLQkJY29uc3Qgc3RydWN0IG5ldGVtX3NrYl9jYiAqY2IKLQkJCT0gKGNvbnN0IHN0cnVjdCBuZXRlbV9za2JfY2IgKilza2ItPmNiOwotCQlsb25nIGRlbGF5IAotCQkJPSBQU0NIRURfVVMySklGRklFKFBTQ0hFRF9URElGRihjYi0+dGltZV90b19zZW5kLCBub3cpKTsKLQkJcHJfZGVidWcoIm5ldGVtX3dhdGNoZG9nOiBza2IgJXBAJWx1ICVsZFxuIiwKLQkJCSBza2IsIGppZmZpZXMsIGRlbGF5KTsKLQotCQkvKiBpZiBtb3JlIHRpbWUgcmVtYWluaW5nPyAqLwotCQlpZiAoZGVsYXkgPiAwKSB7Ci0JCQltb2RfdGltZXIoJnEtPnRpbWVyLCBqaWZmaWVzICsgZGVsYXkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJX19za2JfdW5saW5rKHNrYiwgJnEtPmRlbGF5ZWQpOwotCi0JCWlmIChxLT5xZGlzYy0+ZW5xdWV1ZShza2IsIHEtPnFkaXNjKSkgewotCQkJc2NoLT5xLnFsZW4tLTsKLQkJCXNjaC0+cXN0YXRzLmRyb3BzKys7Ci0JCX0KLQl9Ci0JcWRpc2NfcnVuKGRldik7Ci0Jc3Bpbl91bmxvY2tfYmgoJmRldi0+cXVldWVfbG9jayk7CisJcHJfZGVidWcoIm5ldGVtX3dhdGNoZG9nIHFsZW49JWRcbiIsIHNjaC0+cS5xbGVuKTsKKwlzY2gtPmZsYWdzICY9IH5UQ1FfRl9USFJPVFRMRUQ7CisJbmV0aWZfc2NoZWR1bGUoc2NoLT5kZXYpOwogfQogCiBzdGF0aWMgdm9pZCBuZXRlbV9yZXNldChzdHJ1Y3QgUWRpc2MgKnNjaCkKQEAgLTMwMSw2ICszMzEsNyBAQAogCXNrYl9xdWV1ZV9wdXJnZSgmcS0+ZGVsYXllZCk7CiAKIAlzY2gtPnEucWxlbiA9IDA7CisJc2NoLT5mbGFncyAmPSB+VENRX0ZfVEhST1RUTEVEOwogCWRlbF90aW1lcl9zeW5jKCZxLT50aW1lcik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zaW1wbGUuYyBiL25ldC9zY2hlZC9zaW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWI0YzY3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3NjaGVkL3NpbXBsZS5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBuZXQvc2NoZWQvc2ltcC5jCVNpbXBsZSBleGFtcGxlIG9mIGFuIGFjdGlvbgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEF1dGhvcnM6CUphbWFsIEhhZGkgU2FsaW0gKDIwMDUpCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPgorCisjZGVmaW5lIFRDQV9BQ1RfU0lNUCAyMgorCisvKiBYWFg6IEhpZGUgYWxsIHRoZXNlIGNvbW1vbiBlbGVtZW50cyB1bmRlciBzb21lIG1hY3JvIAorICogcHJvYmFibHkKKyovCisjaW5jbHVkZSA8bGludXgvdGNfYWN0L3RjX2RlZmFjdC5oPgorI2luY2x1ZGUgPG5ldC90Y19hY3QvdGNfZGVmYWN0Lmg+CisKKy8qIHVzZSBnZW5lcmljIGhhc2ggdGFibGUgd2l0aCA4IGJ1Y2tldHMgKi8KKyNkZWZpbmUgTVlfVEFCX1NJWkUgICAgIDgKKyNkZWZpbmUgTVlfVEFCX01BU0sgICAgIChNWV9UQUJfU0laRSAtIDEpCitzdGF0aWMgdTMyIGlkeF9nZW47CitzdGF0aWMgc3RydWN0IHRjZl9kZWZhY3QgKnRjZl9zaW1wX2h0W01ZX1RBQl9TSVpFXTsKK3N0YXRpYyBERUZJTkVfUldMT0NLKHNpbXBfbG9jayk7CisKKy8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0cyAqLworI2RlZmluZSB0Y2Zfc3QJCXRjZl9kZWZhY3QKKyNkZWZpbmUgdGNfc3QJCXRjX2RlZmFjdAorI2RlZmluZSB0Y2ZfdF9sb2NrCXNpbXBfbG9jaworI2RlZmluZSB0Y2ZfaHQJCXRjZl9zaW1wX2h0CisKKyNkZWZpbmUgQ09ORklHX05FVF9BQ1RfSU5JVCAxCisjaW5jbHVkZSA8bmV0L3BrdF9hY3QuaD4KKyNpbmNsdWRlIDxuZXQvYWN0X2dlbmVyaWMuaD4KKworc3RhdGljIGludCB0Y2Zfc2ltcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOworCXN0cnVjdCB0Y2ZfZGVmYWN0ICpwID0gUFJJVihhLCBkZWZhY3QpOworCisJc3Bpbl9sb2NrKCZwLT5sb2NrKTsKKwlwLT50bS5sYXN0dXNlID0gamlmZmllczsKKwlwLT5ic3RhdHMuYnl0ZXMgKz0gc2tiLT5sZW47CisJcC0+YnN0YXRzLnBhY2tldHMrKzsKKworCS8qIHByaW50IHBvbGljeSBzdHJpbmcgZm9sbG93ZWQgYnkgXyB0aGVuIHBhY2tldCBjb3VudCAKKwkgKiBFeGFtcGxlIGlmIHRoaXMgd2FzIHRoZSAzcmQgcGFja2V0IGFuZCB0aGUgc3RyaW5nIHdhcyAiaGVsbG8iIAorCSAqIHRoZW4gaXQgd291bGQgbG9vayBsaWtlICJoZWxsb18zIiAod2l0aG91dCBxdW90ZXMpIAorCSAqKi8KKwlwcmludGsoInNpbXBsZTogJXNfJWRcbiIsIChjaGFyICopcC0+ZGVmZGF0YSwgcC0+YnN0YXRzLnBhY2tldHMpOworCXNwaW5fdW5sb2NrKCZwLT5sb2NrKTsKKwlyZXR1cm4gcC0+YWN0aW9uOworfQorCitzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NpbXBfb3BzID0geworCS5raW5kID0gInNpbXBsZSIsCisJLnR5cGUgPSBUQ0FfQUNUX1NJTVAsCisJLmNhcGFiID0gVENBX0NBUF9OT05FLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5hY3QgPSB0Y2Zfc2ltcCwKKwl0Y2FfdXNlX2RlZmF1bHRfb3BzCit9OworCitNT0RVTEVfQVVUSE9SKCJKYW1hbCBIYWRpIFNhbGltKDIwMDUpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNpbXBsZSBleGFtcGxlIGFjdGlvbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IF9faW5pdCBzaW1wX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldCA9IHRjZl9yZWdpc3Rlcl9hY3Rpb24oJmFjdF9zaW1wX29wcyk7CisJaWYgKCFyZXQpCisJCXByaW50aygiU2ltcGxlIFRDIGFjdGlvbiBMb2FkZWRcbiIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzaW1wX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJdGNmX3VucmVnaXN0ZXJfYWN0aW9uKCZhY3Rfc2ltcF9vcHMpOworfQorCittb2R1bGVfaW5pdChzaW1wX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KHNpbXBfY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYyBiL25ldC9zY3RwL2VuZHBvaW50b2xhLmMKaW5kZXggNTQ0Yjc1MC4uMzM0ZjYxNyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYworKysgYi9uZXQvc2N0cC9lbmRwb2ludG9sYS5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIAkJc3AtPmF1dG9jbG9zZSAqIEhaOwogCiAJLyogVXNlIFNDVFAgc3BlY2lmaWMgc2VuZCBidWZmZXIgc3BhY2UgcXVldWVzLiAgKi8KKwllcC0+c25kYnVmX3BvbGljeSA9IHNjdHBfc25kYnVmX3BvbGljeTsKIAlzay0+c2tfd3JpdGVfc3BhY2UgPSBzY3RwX3dyaXRlX3NwYWNlOwogCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfVVNFX1dSSVRFX1FVRVVFKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaXB2Ni5jIGIvbmV0L3NjdHAvaXB2Ni5jCmluZGV4IGU0MmM3NGUuLmM5ZDllYTAgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lwdjYuYworKysgYi9uZXQvc2N0cC9pcHY2LmMKQEAgLTQ5Niw5ICs0OTYsNyBAQAogLyogSXMgdGhpcyBhIHdpbGRjYXJkIGFkZHJlc3M/ICovCiBzdGF0aWMgaW50IHNjdHBfdjZfaXNfYW55KGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqYWRkcikKIHsKLQlpbnQgdHlwZTsKLQl0eXBlID0gaXB2Nl9hZGRyX3R5cGUoKHN0cnVjdCBpbjZfYWRkciAqKSZhZGRyLT52Ni5zaW42X2FkZHIpOwotCXJldHVybiBJUFY2X0FERFJfQU5ZID09IHR5cGU7CisJcmV0dXJuIGlwdjZfYWRkcl9hbnkoJmFkZHItPnY2LnNpbjZfYWRkcik7CiB9CiAKIC8qIFNob3VsZCB0aGlzIGJlIGF2YWlsYWJsZSBmb3IgYmluZGluZz8gICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cHV0LmMgYi9uZXQvc2N0cC9vdXRwdXQuYwppbmRleCA5MDEzZjY0Li44NGI1YjM3IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRwdXQuYworKysgYi9uZXQvc2N0cC9vdXRwdXQuYwpAQCAtMzEzLDEyICszMTMsMTIgQEAKIAlzayA9IGNodW5rLT5za2ItPnNrOwogCiAJLyogQWxsb2NhdGUgdGhlIG5ldyBza2IuICAqLwotCW5za2IgPSBkZXZfYWxsb2Nfc2tiKHBhY2tldC0+c2l6ZSk7CisJbnNrYiA9IGFsbG9jX3NrYihwYWNrZXQtPnNpemUgKyBMTF9NQVhfSEVBREVSLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW5za2IpCiAJCWdvdG8gbm9tZW07CiAKIAkvKiBNYWtlIHN1cmUgdGhlIG91dGJvdW5kIHNrYiBoYXMgZW5vdWdoIGhlYWRlciByb29tIHJlc2VydmVkLiAqLwotCXNrYl9yZXNlcnZlKG5za2IsIHBhY2tldC0+b3ZlcmhlYWQpOworCXNrYl9yZXNlcnZlKG5za2IsIHBhY2tldC0+b3ZlcmhlYWQgKyBMTF9NQVhfSEVBREVSKTsKIAogCS8qIFNldCB0aGUgb3duaW5nIHNvY2tldCBzbyB0aGF0IHdlIGtub3cgd2hlcmUgdG8gZ2V0IHRoZQogCSAqIGRlc3RpbmF0aW9uIElQIGFkZHJlc3MuCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9wcm90b2NvbC5jIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwppbmRleCBiOTgxM2NmLi4yZTFmOWMzIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm90b2NvbC5jCisrKyBiL25ldC9zY3RwL3Byb3RvY29sLmMKQEAgLTEwNDMsNiArMTA0Myw5IEBACiAJc2N0cF9tYXhfcmV0cmFuc19wYXRoCQk9IDU7CiAJc2N0cF9tYXhfcmV0cmFuc19pbml0CQk9IDg7CiAKKwkvKiBTZW5kYnVmZmVyIGdyb3d0aAkgICAgLSBkbyBwZXItc29ja2V0IGFjY291bnRpbmcgKi8KKwlzY3RwX3NuZGJ1Zl9wb2xpY3kJCT0gMDsKKwogCS8qIEhCLmludGVydmFsICAgICAgICAgICAgICAtIDMwIHNlY29uZHMgKi8KIAlzY3RwX2hiX2ludGVydmFsCQk9IDMwICogSFo7CiAKQEAgLTExNTksOCArMTE2Miw2IEBACiAJc3RhdHVzID0gMDsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwotZXJyX2FkZF9wcm90b2NvbDoKLQlwcm90b191bnJlZ2lzdGVyKCZzY3RwX3Byb3QpOwogZXJyX2N0bF9zb2NrX2luaXQ6CiAJc2N0cF92Nl9leGl0KCk7CiBlcnJfdjZfaW5pdDoKQEAgLTExODgsNiArMTE4OSw4IEBACiAJaW5ldF9kZWxfcHJvdG9jb2woJnNjdHBfcHJvdG9jb2wsIElQUFJPVE9fU0NUUCk7CiAJaW5ldF91bnJlZ2lzdGVyX3Byb3Rvc3coJnNjdHBfc2VxcGFja2V0X3Byb3Rvc3cpOwogCWluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KCZzY3RwX3N0cmVhbV9wcm90b3N3KTsKK2Vycl9hZGRfcHJvdG9jb2w6CisJcHJvdG9fdW5yZWdpc3Rlcigmc2N0cF9wcm90KTsKIAlnb3RvIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IDFkYjEyY2MuLjMzYWM4YmYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYworKysgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTcxMCw3ICs3MTAsOSBAQAogCXN0cnVjdCBzY3RwX2NodW5rICpyZXR2YWw7CiAJX191OCBmbGFncyA9IDA7CiAKLQkvKiBNYXliZSBzZXQgdGhlIFQtYml0IGlmIHdlIGhhdmUgbm8gYXNzb2NpYXRpb24uICovCisJLyogU2V0IHRoZSBULWJpdCBpZiB3ZSBoYXZlIG5vIGFzc29jaWF0aW9uICh2dGFnIHdpbGwgYmUKKwkgKiByZWZsZWN0ZWQpCisJICovCiAJZmxhZ3MgfD0gYXNvYyA/IDAgOiBTQ1RQX0NIVU5LX0ZMQUdfVDsKIAogCXJldHZhbCA9IHNjdHBfbWFrZV9jaHVuayhhc29jLCBTQ1RQX0NJRF9TSFVURE9XTl9DT01QTEVURSwgZmxhZ3MsIDApOwpAQCAtNzMyLDcgKzczNCw3IEBACiB9CiAKIC8qIENyZWF0ZSBhbiBBQk9SVC4gIE5vdGUgdGhhdCB3ZSBzZXQgdGhlIFQgYml0IGlmIHdlIGhhdmUgbm8KLSAqIGFzc29jaWF0aW9uLgorICogYXNzb2NpYXRpb24sIGV4Y2VwdCB3aGVuIHJlc3BvbmRpbmcgdG8gYW4gSU5JVCAoc2N0cGltcGd1aWRlIDIuNDEpLgogICovCiBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2Fib3J0KGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJICAgICAgY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLApAQCAtNzQxLDggKzc0MywxNiBAQAogCXN0cnVjdCBzY3RwX2NodW5rICpyZXR2YWw7CiAJX191OCBmbGFncyA9IDA7CiAKLQkvKiBNYXliZSBzZXQgdGhlIFQtYml0IGlmIHdlIGhhdmUgbm8gYXNzb2NpYXRpb24uICAqLwotCWZsYWdzIHw9IGFzb2MgPyAwIDogU0NUUF9DSFVOS19GTEFHX1Q7CisJLyogU2V0IHRoZSBULWJpdCBpZiB3ZSBoYXZlIG5vIGFzc29jaWF0aW9uIGFuZCAnY2h1bmsnIGlzIG5vdAorCSAqIGFuIElOSVQgKHZ0YWcgd2lsbCBiZSByZWZsZWN0ZWQpLgorCSAqLworCWlmICghYXNvYykgeworCQlpZiAoY2h1bmsgJiYgY2h1bmstPmNodW5rX2hkciAmJgorCQkgICAgY2h1bmstPmNodW5rX2hkci0+dHlwZSA9PSBTQ1RQX0NJRF9JTklUKQorCQkJZmxhZ3MgPSAwOworCQllbHNlCisJCQlmbGFncyA9IFNDVFBfQ0hVTktfRkxBR19UOworCX0KIAogCXJldHZhbCA9IHNjdHBfbWFrZV9jaHVuayhhc29jLCBTQ1RQX0NJRF9BQk9SVCwgZmxhZ3MsIGhpbnQpOwogCkBAIC0yNzQ0LDcgKzI3NTQsNiBAQAogCiAJaGludCA9IChuc3RyZWFtcyArIDEpICogc2l6ZW9mKF9fdTMyKTsKIAotCS8qIE1heWJlIHNldCB0aGUgVC1iaXQgaWYgd2UgaGF2ZSBubyBhc3NvY2lhdGlvbi4gICovCiAJcmV0dmFsID0gc2N0cF9tYWtlX2NodW5rKGFzb2MsIFNDVFBfQ0lEX0ZXRF9UU04sIDAsIGhpbnQpOwogCiAJaWYgKCFyZXR2YWwpCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IDI3OGM1NmEuLjhlMDFiOGYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC0xMjYsMTUgKzEyNiwxOCBAQAogICogc2hvdWxkIHN0b3AgdGhlIFQyLXNodXRkb3duIHRpbWVyIGFuZCByZW1vdmUgYWxsIGtub3dsZWRnZSBvZiB0aGUKICAqIGFzc29jaWF0aW9uIChhbmQgdGh1cyB0aGUgYXNzb2NpYXRpb24gZW50ZXJzIHRoZSBDTE9TRUQgc3RhdGUpLgogICoKLSAqIFZlcmlmaWNhdGlvbiBUYWc6IDguNS4xKEMpCisgKiBWZXJpZmljYXRpb24gVGFnOiA4LjUuMShDKSwgc2N0cGltcGd1aWRlIDIuNDEuCiAgKiBDKSBSdWxlcyBmb3IgcGFja2V0IGNhcnJ5aW5nIFNIVVRET1dOIENPTVBMRVRFOgogICogLi4uCi0gKiAtIFRoZSByZWNlaXZlciBvZiBhIFNIVVRET1dOIENPTVBMRVRFIHNoYWxsIGFjY2VwdCB0aGUgcGFja2V0IGlmIHRoZQotICogICBWZXJpZmljYXRpb24gVGFnIGZpZWxkIG9mIHRoZSBwYWNrZXQgbWF0Y2hlcyBpdHMgb3duIHRhZyBPUiBpdCBpcwotICogICBzZXQgdG8gaXRzIHBlZXIncyB0YWcgYW5kIHRoZSBUIGJpdCBpcyBzZXQgaW4gdGhlIENodW5rIEZsYWdzLgotICogICBPdGhlcndpc2UsIHRoZSByZWNlaXZlciBNVVNUIHNpbGVudGx5IGRpc2NhcmQgdGhlIHBhY2tldCBhbmQgdGFrZQotICogICBubyBmdXJ0aGVyIGFjdGlvbi4gQW4gZW5kcG9pbnQgTVVTVCBpZ25vcmUgdGhlIFNIVVRET1dOIENPTVBMRVRFIGlmCi0gKiAgIGl0IGlzIG5vdCBpbiB0aGUgU0hVVERPV04tQUNLLVNFTlQgc3RhdGUuCisgKiAtIFRoZSByZWNlaXZlciBvZiBhIFNIVVRET1dOIENPTVBMRVRFIHNoYWxsIGFjY2VwdCB0aGUgcGFja2V0CisgKiAgIGlmIHRoZSBWZXJpZmljYXRpb24gVGFnIGZpZWxkIG9mIHRoZSBwYWNrZXQgbWF0Y2hlcyBpdHMgb3duIHRhZyBhbmQKKyAqICAgdGhlIFQgYml0IGlzIG5vdCBzZXQKKyAqICAgT1IKKyAqICAgaXQgaXMgc2V0IHRvIGl0cyBwZWVyJ3MgdGFnIGFuZCB0aGUgVCBiaXQgaXMgc2V0IGluIHRoZSBDaHVuaworICogICBGbGFncy4KKyAqICAgT3RoZXJ3aXNlLCB0aGUgcmVjZWl2ZXIgTVVTVCBzaWxlbnRseSBkaXNjYXJkIHRoZSBwYWNrZXQKKyAqICAgYW5kIHRha2Ugbm8gZnVydGhlciBhY3Rpb24uICBBbiBlbmRwb2ludCBNVVNUIGlnbm9yZSB0aGUKKyAqICAgU0hVVERPV04gQ09NUExFVEUgaWYgaXQgaXMgbm90IGluIHRoZSBTSFVURE9XTi1BQ0stU0VOVCBzdGF0ZS4KICAqCiAgKiBJbnB1dHMKICAqIChlbmRwb2ludCwgYXNvYywgY2h1bmspCkBAIC0yODU4LDE2ICsyODYxLDE2IEBACiAvKgogICogR2VuZXJhdGUgYW4gQUJPUlQgaW4gcmVzcG9uc2UgdG8gYSBwYWNrZXQuCiAgKgotICogU2VjdGlvbjogOC40IEhhbmRsZSAiT3V0IG9mIHRoZSBibHVlIiBQYWNrZXRzCisgKiBTZWN0aW9uOiA4LjQgSGFuZGxlICJPdXQgb2YgdGhlIGJsdWUiIFBhY2tldHMsIHNjdHBpbXBndWlkZSAyLjQxCiAgKgotICogOCkgVGhlIHJlY2VpdmVyIHNob3VsZCByZXNwb25kIHRvIHRoZSBzZW5kZXIgb2YgdGhlIE9PVEIgcGFja2V0Ci0gKiAgICB3aXRoIGFuIEFCT1JULiAgV2hlbiBzZW5kaW5nIHRoZSBBQk9SVCwgdGhlIHJlY2VpdmVyIG9mIHRoZQotICogICAgT09UQiBwYWNrZXQgTVVTVCBmaWxsIGluIHRoZSBWZXJpZmljYXRpb24gVGFnIGZpZWxkIG9mIHRoZQotICogICAgb3V0Ym91bmQgcGFja2V0IHdpdGggdGhlIHZhbHVlIGZvdW5kIGluIHRoZSBWZXJpZmljYXRpb24gVGFnCi0gKiAgICBmaWVsZCBvZiB0aGUgT09UQiBwYWNrZXQgYW5kIHNldCB0aGUgVC1iaXQgaW4gdGhlIENodW5rIEZsYWdzCi0gKiAgICB0byBpbmRpY2F0ZSB0aGF0IG5vIFRDQiB3YXMgZm91bmQuICBBZnRlciBzZW5kaW5nIHRoaXMgQUJPUlQsCi0gKiAgICB0aGUgcmVjZWl2ZXIgb2YgdGhlIE9PVEIgcGFja2V0IHNoYWxsIGRpc2NhcmQgdGhlIE9PVEIgcGFja2V0Ci0gKiAgICBhbmQgdGFrZSBubyBmdXJ0aGVyIGFjdGlvbi4KKyAqIDgpIFRoZSByZWNlaXZlciBzaG91bGQgcmVzcG9uZCB0byB0aGUgc2VuZGVyIG9mIHRoZSBPT1RCIHBhY2tldCB3aXRoCisgKiAgICBhbiBBQk9SVC4gIFdoZW4gc2VuZGluZyB0aGUgQUJPUlQsIHRoZSByZWNlaXZlciBvZiB0aGUgT09UQiBwYWNrZXQKKyAqICAgIE1VU1QgZmlsbCBpbiB0aGUgVmVyaWZpY2F0aW9uIFRhZyBmaWVsZCBvZiB0aGUgb3V0Ym91bmQgcGFja2V0CisgKiAgICB3aXRoIHRoZSB2YWx1ZSBmb3VuZCBpbiB0aGUgVmVyaWZpY2F0aW9uIFRhZyBmaWVsZCBvZiB0aGUgT09UQgorICogICAgcGFja2V0IGFuZCBzZXQgdGhlIFQtYml0IGluIHRoZSBDaHVuayBGbGFncyB0byBpbmRpY2F0ZSB0aGF0IHRoZQorICogICAgVmVyaWZpY2F0aW9uIFRhZyBpcyByZWZsZWN0ZWQuICBBZnRlciBzZW5kaW5nIHRoaXMgQUJPUlQsIHRoZQorICogICAgcmVjZWl2ZXIgb2YgdGhlIE9PVEIgcGFja2V0IHNoYWxsIGRpc2NhcmQgdGhlIE9PVEIgcGFja2V0IGFuZCB0YWtlCisgKiAgICBubyBmdXJ0aGVyIGFjdGlvbi4KICAqCiAgKiBWZXJpZmljYXRpb24gVGFnOgogICoKQEAgLTI4OTUsNiArMjg5OCwxMCBAQAogCQkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07CiAJCX0KIAorCQkvKiBSZWZsZWN0IHZ0YWcgaWYgVC1CaXQgaXMgc2V0ICovCisJCWlmIChzY3RwX3Rlc3RfVF9iaXQoYWJvcnQpKQorCQkJcGFja2V0LT52dGFnID0gbnRvaGwoY2h1bmstPnNjdHBfaGRyLT52dGFnKTsKKwogCQkvKiBTZXQgdGhlIHNrYiB0byB0aGUgYmVsb25naW5nIHNvY2sgZm9yIGFjY291bnRpbmcuICAqLwogCQlhYm9ydC0+c2tiLT5zayA9IGVwLT5iYXNlLnNrOwogCkBAIC0zMDI2LDIyICszMDMzLDI0IEBACiB9CiAKIC8qCi0gKiBSRkMgMjk2MCwgOC40IC0gSGFuZGxlICJPdXQgb2YgdGhlIGJsdWUiIFBhY2tldHMKKyAqIFJGQyAyOTYwLCA4LjQgLSBIYW5kbGUgIk91dCBvZiB0aGUgYmx1ZSIgUGFja2V0cywgc2N0cGltcGd1aWRlIDIuNDEuCisgKgogICogNSkgSWYgdGhlIHBhY2tldCBjb250YWlucyBhIFNIVVRET1dOIEFDSyBjaHVuaywgdGhlIHJlY2VpdmVyIHNob3VsZAogICogICAgcmVzcG9uZCB0byB0aGUgc2VuZGVyIG9mIHRoZSBPT1RCIHBhY2tldCB3aXRoIGEgU0hVVERPV04gQ09NUExFVEUuCiAgKiAgICBXaGVuIHNlbmRpbmcgdGhlIFNIVVRET1dOIENPTVBMRVRFLCB0aGUgcmVjZWl2ZXIgb2YgdGhlIE9PVEIKICAqICAgIHBhY2tldCBtdXN0IGZpbGwgaW4gdGhlIFZlcmlmaWNhdGlvbiBUYWcgZmllbGQgb2YgdGhlIG91dGJvdW5kCiAgKiAgICBwYWNrZXQgd2l0aCB0aGUgVmVyaWZpY2F0aW9uIFRhZyByZWNlaXZlZCBpbiB0aGUgU0hVVERPV04gQUNLIGFuZAotICogICAgc2V0IHRoZSBULWJpdCBpbiB0aGUgQ2h1bmsgRmxhZ3MgdG8gaW5kaWNhdGUgdGhhdCBubyBUQ0Igd2FzCi0gKiAgICBmb3VuZC4gT3RoZXJ3aXNlLAorICogICAgc2V0IHRoZSBULWJpdCBpbiB0aGUgQ2h1bmsgRmxhZ3MgdG8gaW5kaWNhdGUgdGhhdCB0aGUgVmVyaWZpY2F0aW9uCisgKiAgICBUYWcgaXMgcmVmbGVjdGVkLgogICoKICAqIDgpIFRoZSByZWNlaXZlciBzaG91bGQgcmVzcG9uZCB0byB0aGUgc2VuZGVyIG9mIHRoZSBPT1RCIHBhY2tldCB3aXRoCiAgKiAgICBhbiBBQk9SVC4gIFdoZW4gc2VuZGluZyB0aGUgQUJPUlQsIHRoZSByZWNlaXZlciBvZiB0aGUgT09UQiBwYWNrZXQKICAqICAgIE1VU1QgZmlsbCBpbiB0aGUgVmVyaWZpY2F0aW9uIFRhZyBmaWVsZCBvZiB0aGUgb3V0Ym91bmQgcGFja2V0CiAgKiAgICB3aXRoIHRoZSB2YWx1ZSBmb3VuZCBpbiB0aGUgVmVyaWZpY2F0aW9uIFRhZyBmaWVsZCBvZiB0aGUgT09UQgotICogICAgcGFja2V0IGFuZCBzZXQgdGhlIFQtYml0IGluIHRoZSBDaHVuayBGbGFncyB0byBpbmRpY2F0ZSB0aGF0IG5vCi0gKiAgICBUQ0Igd2FzIGZvdW5kLiAgQWZ0ZXIgc2VuZGluZyB0aGlzIEFCT1JULCB0aGUgcmVjZWl2ZXIgb2YgdGhlIE9PVEIKLSAqICAgIHBhY2tldCBzaGFsbCBkaXNjYXJkIHRoZSBPT1RCIHBhY2tldCBhbmQgdGFrZSBubyBmdXJ0aGVyIGFjdGlvbi4KKyAqICAgIHBhY2tldCBhbmQgc2V0IHRoZSBULWJpdCBpbiB0aGUgQ2h1bmsgRmxhZ3MgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAqICAgIFZlcmlmaWNhdGlvbiBUYWcgaXMgcmVmbGVjdGVkLiAgQWZ0ZXIgc2VuZGluZyB0aGlzIEFCT1JULCB0aGUKKyAqICAgIHJlY2VpdmVyIG9mIHRoZSBPT1RCIHBhY2tldCBzaGFsbCBkaXNjYXJkIHRoZSBPT1RCIHBhY2tldCBhbmQgdGFrZQorICogICAgbm8gZnVydGhlciBhY3Rpb24uCiAgKi8KIHNjdHBfZGlzcG9zaXRpb25fdCBzY3RwX3NmX29vdGIoY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLAogCQkJCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLApAQCAtMzA5MCwxMyArMzA5OSwxNSBAQAogLyoKICAqIEhhbmRsZSBhbiAiT3V0IG9mIHRoZSBibHVlIiBTSFVURE9XTiBBQ0suCiAgKgotICogU2VjdGlvbjogOC40IDUpCisgKiBTZWN0aW9uOiA4LjQgNSwgc2N0cGltcGd1aWRlIDIuNDEuCisgKgogICogNSkgSWYgdGhlIHBhY2tldCBjb250YWlucyBhIFNIVVRET1dOIEFDSyBjaHVuaywgdGhlIHJlY2VpdmVyIHNob3VsZAotICogICByZXNwb25kIHRvIHRoZSBzZW5kZXIgb2YgdGhlIE9PVEIgcGFja2V0IHdpdGggYSBTSFVURE9XTiBDT01QTEVURS4KLSAqICAgV2hlbiBzZW5kaW5nIHRoZSBTSFVURE9XTiBDT01QTEVURSwgdGhlIHJlY2VpdmVyIG9mIHRoZSBPT1RCIHBhY2tldAotICogICBtdXN0IGZpbGwgaW4gdGhlIFZlcmlmaWNhdGlvbiBUYWcgZmllbGQgb2YgdGhlIG91dGJvdW5kIHBhY2tldCB3aXRoCi0gKiAgIHRoZSBWZXJpZmljYXRpb24gVGFnIHJlY2VpdmVkIGluIHRoZSBTSFVURE9XTiBBQ0sgYW5kIHNldCB0aGUKLSAqICAgVC1iaXQgaW4gdGhlIENodW5rIEZsYWdzIHRvIGluZGljYXRlIHRoYXQgbm8gVENCIHdhcyBmb3VuZC4KKyAqICAgIHJlc3BvbmQgdG8gdGhlIHNlbmRlciBvZiB0aGUgT09UQiBwYWNrZXQgd2l0aCBhIFNIVVRET1dOIENPTVBMRVRFLgorICogICAgV2hlbiBzZW5kaW5nIHRoZSBTSFVURE9XTiBDT01QTEVURSwgdGhlIHJlY2VpdmVyIG9mIHRoZSBPT1RCCisgKiAgICBwYWNrZXQgbXVzdCBmaWxsIGluIHRoZSBWZXJpZmljYXRpb24gVGFnIGZpZWxkIG9mIHRoZSBvdXRib3VuZAorICogICAgcGFja2V0IHdpdGggdGhlIFZlcmlmaWNhdGlvbiBUYWcgcmVjZWl2ZWQgaW4gdGhlIFNIVVRET1dOIEFDSyBhbmQKKyAqICAgIHNldCB0aGUgVC1iaXQgaW4gdGhlIENodW5rIEZsYWdzIHRvIGluZGljYXRlIHRoYXQgdGhlIFZlcmlmaWNhdGlvbgorICogICAgVGFnIGlzIHJlZmxlY3RlZC4KICAqCiAgKiBJbnB1dHMKICAqIChlbmRwb2ludCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcykKQEAgLTMxMjgsNiArMzEzOSwxMCBAQAogCQkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07CiAJCX0KIAorCQkvKiBSZWZsZWN0IHZ0YWcgaWYgVC1CaXQgaXMgc2V0ICovCisJCWlmIChzY3RwX3Rlc3RfVF9iaXQoc2h1dCkpCisJCQlwYWNrZXQtPnZ0YWcgPSBudG9obChjaHVuay0+c2N0cF9oZHItPnZ0YWcpOworCiAJCS8qIFNldCB0aGUgc2tiIHRvIHRoZSBiZWxvbmdpbmcgc29jayBmb3IgYWNjb3VudGluZy4gICovCiAJCXNodXQtPnNrYi0+c2sgPSBlcC0+YmFzZS5zazsKIApAQCAtMzU5MSw3ICszNjA2LDYgQEAKICAqCiAgKiAyKSBJZiB0aGUgT09UQiBwYWNrZXQgY29udGFpbnMgYW4gQUJPUlQgY2h1bmssIHRoZSByZWNlaXZlciBNVVNUCiAgKiAgICBzaWxlbnRseSBkaXNjYXJkIHRoZSBPT1RCIHBhY2tldCBhbmQgdGFrZSBubyBmdXJ0aGVyIGFjdGlvbi4KLSAqICAgIE90aGVyd2lzZSwKICAqCiAgKiBWZXJpZmljYXRpb24gVGFnOiBObyB2ZXJpZmljYXRpb24gbmVjZXNzYXJ5CiAgKgpAQCAtNDk2MSw2ICs0OTc1LDExIEBACiAJCQlzY3RwX29vdGJfcGt0X2ZyZWUocGFja2V0KTsKIAkJCXJldHVybiBOVUxMOwogCQl9CisKKwkJLyogUmVmbGVjdCB2dGFnIGlmIFQtQml0IGlzIHNldCAqLworCQlpZiAoc2N0cF90ZXN0X1RfYml0KGFib3J0KSkKKwkJCXBhY2tldC0+dnRhZyA9IG50b2hsKGNodW5rLT5zY3RwX2hkci0+dnRhZyk7CisKIAkJLyogQWRkIHNwZWNpZmllZCBlcnJvciBjYXVzZXMsIGkuZS4sIHBheWxvYWQsIHRvIHRoZQogCQkgKiBlbmQgb2YgdGhlIGNodW5rLgogCQkgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggZThjMjEwMS4uMGIzMzhlYyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTExNSw5ICsxMTUsMTcgQEAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBhc29jLT5iYXNlLnNrOwogCWludCBhbXQgPSAwOwogCi0JYW10ID0gc2stPnNrX3NuZGJ1ZiAtIGFzb2MtPnNuZGJ1Zl91c2VkOworCWlmIChhc29jLT5lcC0+c25kYnVmX3BvbGljeSkgeworCQkvKiBtYWtlIHN1cmUgdGhhdCBubyBhc3NvY2lhdGlvbiB1c2VzIG1vcmUgdGhhbiBza19zbmRidWYgKi8KKwkJYW10ID0gc2stPnNrX3NuZGJ1ZiAtIGFzb2MtPnNuZGJ1Zl91c2VkOworCX0gZWxzZSB7CisJCS8qIGRvIHNvY2tldCBsZXZlbCBhY2NvdW50aW5nICovCisJCWFtdCA9IHNrLT5za19zbmRidWYgLSBhdG9taWNfcmVhZCgmc2stPnNrX3dtZW1fYWxsb2MpOworCX0KKwogCWlmIChhbXQgPCAwKQogCQlhbXQgPSAwOworCiAJcmV0dXJuIGFtdDsKIH0KIApAQCAtMTM4LDEyICsxNDYsMjEgQEAKIAkvKiBUaGUgc25kYnVmIHNwYWNlIGlzIHRyYWNrZWQgcGVyIGFzc29jaWF0aW9uLiAgKi8KIAlzY3RwX2Fzc29jaWF0aW9uX2hvbGQoYXNvYyk7CiAKKwlza2Jfc2V0X293bmVyX3coY2h1bmstPnNrYiwgc2spOworCiAJY2h1bmstPnNrYi0+ZGVzdHJ1Y3RvciA9IHNjdHBfd2ZyZWU7CiAJLyogU2F2ZSB0aGUgY2h1bmsgcG9pbnRlciBpbiBza2IgZm9yIHNjdHBfd2ZyZWUgdG8gdXNlIGxhdGVyLiAgKi8KIAkqKChzdHJ1Y3Qgc2N0cF9jaHVuayAqKikoY2h1bmstPnNrYi0+Y2IpKSA9IGNodW5rOwogCi0JYXNvYy0+c25kYnVmX3VzZWQgKz0gU0NUUF9EQVRBX1NORFNJWkUoY2h1bmspOwotCXNrLT5za193bWVtX3F1ZXVlZCArPSBTQ1RQX0RBVEFfU05EU0laRShjaHVuayk7CisJYXNvYy0+c25kYnVmX3VzZWQgKz0gU0NUUF9EQVRBX1NORFNJWkUoY2h1bmspICsKKwkJCQlzaXplb2Yoc3RydWN0IHNrX2J1ZmYpICsKKwkJCQlzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmspOworCisJc2stPnNrX3dtZW1fcXVldWVkICs9IFNDVFBfREFUQV9TTkRTSVpFKGNodW5rKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBza19idWZmKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5rKTsKKworCWF0b21pY19hZGQoc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5rKSwgJnNrLT5za193bWVtX2FsbG9jKTsKIH0KIAogLyogVmVyaWZ5IHRoYXQgdGhpcyBpcyBhIHZhbGlkIGFkZHJlc3MuICovCkBAIC0zNDczLDcgKzM0OTAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFZhbHVlcyBjb3JyZXNwb2luZGluZyB0byB0aGUgc3BlY2lmaWMgYXNzb2NpYXRpb24gKi8KLQlpZiAoYXNzb2NwYXJhbXMuc2Fzb2NfYXNzb2NfaWQgIT0gMCkgeworCWlmIChhc29jKSB7CiAJCWFzc29jcGFyYW1zLnNhc29jX2Fzb2NtYXhyeHQgPSBhc29jLT5tYXhfcmV0cmFuczsKIAkJYXNzb2NwYXJhbXMuc2Fzb2NfcGVlcl9yd25kID0gYXNvYy0+cGVlci5yd25kOwogCQlhc3NvY3BhcmFtcy5zYXNvY19sb2NhbF9yd25kID0gYXNvYy0+YV9yd25kOwpAQCAtNDQyMiw4ICs0NDM5LDE3IEBACiAJY2h1bmsgPSAqKChzdHJ1Y3Qgc2N0cF9jaHVuayAqKikoc2tiLT5jYikpOwogCWFzb2MgPSBjaHVuay0+YXNvYzsKIAlzayA9IGFzb2MtPmJhc2Uuc2s7Ci0JYXNvYy0+c25kYnVmX3VzZWQgLT0gU0NUUF9EQVRBX1NORFNJWkUoY2h1bmspOwotCXNrLT5za193bWVtX3F1ZXVlZCAtPSBTQ1RQX0RBVEFfU05EU0laRShjaHVuayk7CisJYXNvYy0+c25kYnVmX3VzZWQgLT0gU0NUUF9EQVRBX1NORFNJWkUoY2h1bmspICsKKwkJCQlzaXplb2Yoc3RydWN0IHNrX2J1ZmYpICsKKwkJCQlzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmspOworCisJc2stPnNrX3dtZW1fcXVldWVkIC09IFNDVFBfREFUQV9TTkRTSVpFKGNodW5rKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBza19idWZmKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5rKTsKKworCWF0b21pY19zdWIoc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5rKSwgJnNrLT5za193bWVtX2FsbG9jKTsKKworCXNvY2tfd2ZyZWUoc2tiKTsKIAlfX3NjdHBfd3JpdGVfc3BhY2UoYXNvYyk7CiAKIAlzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N5c2N0bC5jIGIvbmV0L3NjdHAvc3lzY3RsLmMKaW5kZXggODlmYTIwYy4uN2ZjMzE4NCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc3lzY3RsLmMKKysrIGIvbmV0L3NjdHAvc3lzY3RsLmMKQEAgLTExMCw2ICsxMTAsMTQgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCiAJfSwKIAl7CisJCS5jdGxfbmFtZQk9IE5FVF9TQ1RQX1NOREJVRl9QT0xJQ1ksCisJCS5wcm9jbmFtZQk9ICJzbmRidWZfcG9saWN5IiwKKwkJLmRhdGEJCT0gJnNjdHBfc25kYnVmX3BvbGljeSwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCisJfSwKKwl7CiAJCS5jdGxfbmFtZQk9IE5FVF9TQ1RQX1BBVEhfTUFYX1JFVFJBTlMsCiAJCS5wcm9jbmFtZQk9ICJwYXRoX21heF9yZXRyYW5zIiwKIAkJLmRhdGEJCT0gJnNjdHBfbWF4X3JldHJhbnNfcGF0aCwKZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCAyY2Q0NDk5Li5jZWMwY2IzIDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC00LDcgKzQsNyBAQAogICogVmVyc2lvbjoJQCgjKXNvY2tldC5jCTEuMS45MwkxOC8wMi85NQogICoKICAqIEF1dGhvcnM6CU9yZXN0IFpib3Jvd3NraSwgPG9iekBLb2Rhay5DT00+Ci0gKgkJUm9zcyBCaXJvLCA8YmlyN0BsZWxhbmQuU3RhbmZvcmQuRWR1PgorICoJCVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoKICAqIEZpeGVzOgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94ZHIuYyBiL25ldC9zdW5ycGMveGRyLmMKaW5kZXggNDQ4NDkzMS4uNjdiOWYwMzUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveGRyLmMKKysrIGIvbmV0L3N1bnJwYy94ZHIuYwpAQCAtNDYsOSArNDYsOSBAQAogCiAvKioKICAqIHhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkIC0gRW5jb2RlIGZpeGVkIGxlbmd0aCBvcGFxdWUgZGF0YQotICogQHAgLSBwb2ludGVyIHRvIGN1cnJlbnQgcG9zaXRpb24gaW4gWERSIGJ1ZmZlci4KLSAqIEBwdHIgLSBwb2ludGVyIHRvIGRhdGEgdG8gZW5jb2RlIChvciBOVUxMKQotICogQG5ieXRlcyAtIHNpemUgb2YgZGF0YS4KKyAqIEBwOiBwb2ludGVyIHRvIGN1cnJlbnQgcG9zaXRpb24gaW4gWERSIGJ1ZmZlci4KKyAqIEBwdHI6IHBvaW50ZXIgdG8gZGF0YSB0byBlbmNvZGUgKG9yIE5VTEwpCisgKiBAbmJ5dGVzOiBzaXplIG9mIGRhdGEuCiAgKgogICogQ29weSB0aGUgYXJyYXkgb2YgZGF0YSBvZiBsZW5ndGggbmJ5dGVzIGF0IHB0ciB0byB0aGUgWERSIGJ1ZmZlcgogICogYXQgcG9zaXRpb24gcCwgdGhlbiBhbGlnbiB0byB0aGUgbmV4dCAzMi1iaXQgYm91bmRhcnkgYnkgcGFkZGluZwpAQCAtNzYsOSArNzYsOSBAQAogCiAvKioKICAqIHhkcl9lbmNvZGVfb3BhcXVlIC0gRW5jb2RlIHZhcmlhYmxlIGxlbmd0aCBvcGFxdWUgZGF0YQotICogQHAgLSBwb2ludGVyIHRvIGN1cnJlbnQgcG9zaXRpb24gaW4gWERSIGJ1ZmZlci4KLSAqIEBwdHIgLSBwb2ludGVyIHRvIGRhdGEgdG8gZW5jb2RlIChvciBOVUxMKQotICogQG5ieXRlcyAtIHNpemUgb2YgZGF0YS4KKyAqIEBwOiBwb2ludGVyIHRvIGN1cnJlbnQgcG9zaXRpb24gaW4gWERSIGJ1ZmZlci4KKyAqIEBwdHI6IHBvaW50ZXIgdG8gZGF0YSB0byBlbmNvZGUgKG9yIE5VTEwpCisgKiBAbmJ5dGVzOiBzaXplIG9mIGRhdGEuCiAgKgogICogUmV0dXJucyB0aGUgdXBkYXRlZCBjdXJyZW50IFhEUiBidWZmZXIgcG9zaXRpb24KICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jCmluZGV4IGFjYzczZmUuLmM0NzhmYzggMTAwNjQ0Ci0tLSBhL25ldC91bml4L2FmX3VuaXguYworKysgYi9uZXQvdW5peC9hZl91bml4LmMKQEAgLTg1LDcgKzg1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jIGIvbmV0L3dhbnJvdXRlci93YW5tYWluLmMKaW5kZXggOTU2YzE3Zi4uZDY4NDRhYyAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci93YW5tYWluLmMKKysrIGIvbmV0L3dhbnJvdXRlci93YW5tYWluLmMKQEAgLTQ4LDggKzQ4LDggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIHN1cHBvcnQgZm9yIGxvYWRhYmxlIG1vZHVsZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CS8qIGttYWxsb2MoKSwga2ZyZWUoKSAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiB2ZXJpZnlfYXJlYSgpLCBldGMuICovCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgkJLyoga21hbGxvYygpLCBrZnJlZSgpICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbSosIHN0ciogZnVuY3Rpb25zICovCiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IDgwODI4MDcuLjU1ZWQ5NzkgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMTAyOCwzMCArMTAyOCwxNSBAQAogCXJldHVybiAheGZybV9idW5kbGVfb2soKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdCwgTlVMTCwgQUZfVU5TUEVDKTsKIH0KIAotc3RhdGljIHZvaWQgeGZybV9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit2b2lkIHhmcm1fZHN0X2lmZG93bihzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHhmcm1fZHN0ICp4ZHN0ID0gKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDsKLQotCWRzdF9yZWxlYXNlKHhkc3QtPnJvdXRlKTsKLQotCWlmICghZHN0LT54ZnJtKQotCQlyZXR1cm47Ci0JeGZybV9zdGF0ZV9wdXQoZHN0LT54ZnJtKTsKLQlkc3QtPnhmcm0gPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCB4ZnJtX2RzdF9pZmRvd24oc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgIGludCB1bnJlZ2lzdGVyKQotewotCWlmICghdW5yZWdpc3RlcikKLQkJcmV0dXJuOwotCiAJd2hpbGUgKChkc3QgPSBkc3QtPmNoaWxkKSAmJiBkc3QtPnhmcm0gJiYgZHN0LT5kZXYgPT0gZGV2KSB7CiAJCWRzdC0+ZGV2ID0gJmxvb3BiYWNrX2RldjsKIAkJZGV2X2hvbGQoJmxvb3BiYWNrX2Rldik7CiAJCWRldl9wdXQoZGV2KTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKHhmcm1fZHN0X2lmZG93bik7CiAKIHN0YXRpYyB2b2lkIHhmcm1fbGlua19mYWlsdXJlKHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xMjYyLDEwICsxMjQ3LDYgQEAKIAkJCWRzdF9vcHMtPmttZW1fY2FjaGVwID0geGZybV9kc3RfY2FjaGU7CiAJCWlmIChsaWtlbHkoZHN0X29wcy0+Y2hlY2sgPT0gTlVMTCkpCiAJCQlkc3Rfb3BzLT5jaGVjayA9IHhmcm1fZHN0X2NoZWNrOwotCQlpZiAobGlrZWx5KGRzdF9vcHMtPmRlc3Ryb3kgPT0gTlVMTCkpCi0JCQlkc3Rfb3BzLT5kZXN0cm95ID0geGZybV9kc3RfZGVzdHJveTsKLQkJaWYgKGxpa2VseShkc3Rfb3BzLT5pZmRvd24gPT0gTlVMTCkpCi0JCQlkc3Rfb3BzLT5pZmRvd24gPSB4ZnJtX2RzdF9pZmRvd247CiAJCWlmIChsaWtlbHkoZHN0X29wcy0+bmVnYXRpdmVfYWR2aWNlID09IE5VTEwpKQogCQkJZHN0X29wcy0+bmVnYXRpdmVfYWR2aWNlID0geGZybV9uZWdhdGl2ZV9hZHZpY2U7CiAJCWlmIChsaWtlbHkoZHN0X29wcy0+bGlua19mYWlsdXJlID09IE5VTEwpKQpAQCAtMTI5Nyw4ICsxMjc4LDYgQEAKIAkJCXhmcm1fcG9saWN5X2FmaW5mb1thZmluZm8tPmZhbWlseV0gPSBOVUxMOwogCQkJZHN0X29wcy0+a21lbV9jYWNoZXAgPSBOVUxMOwogCQkJZHN0X29wcy0+Y2hlY2sgPSBOVUxMOwotCQkJZHN0X29wcy0+ZGVzdHJveSA9IE5VTEw7Ci0JCQlkc3Rfb3BzLT5pZmRvd24gPSBOVUxMOwogCQkJZHN0X29wcy0+bmVnYXRpdmVfYWR2aWNlID0gTlVMTDsKIAkJCWRzdF9vcHMtPmxpbmtfZmFpbHVyZSA9IE5VTEw7CiAJCQlkc3Rfb3BzLT5nZXRfbXNzID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCAxZGI1OWYxLi5kMTE3NDdjIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC0zNTcsOCArMzU3LDkgQEAKIAogCXggPSBiZXN0OwogCWlmICgheCAmJiAhZXJyb3IgJiYgIWFjcXVpcmVfaW5fcHJvZ3Jlc3MpIHsKLQkJeDAgPSBhZmluZm8tPnN0YXRlX2xvb2t1cCgmdG1wbC0+aWQuZGFkZHIsIHRtcGwtPmlkLnNwaSwgdG1wbC0+aWQucHJvdG8pOwotCQlpZiAoeDAgIT0gTlVMTCkgeworCQlpZiAodG1wbC0+aWQuc3BpICYmCisJCSAgICAoeDAgPSBhZmluZm8tPnN0YXRlX2xvb2t1cChkYWRkciwgdG1wbC0+aWQuc3BpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wbC0+aWQucHJvdG8pKSAhPSBOVUxMKSB7CiAJCQl4ZnJtX3N0YXRlX3B1dCh4MCk7CiAJCQllcnJvciA9IC1FRVhJU1Q7CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggNjM2NjFiMC4uNWRkZGEyYyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTg1NSw0NyArODU1LDQ0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBpbnQgeGZybV9tc2dfbWluWyhYRlJNX01TR19NQVggKyAxIC0gWEZSTV9NU0dfQkFTRSldID0gewotCU5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHhmcm1fdXNlcnNhX2luZm8pKSwJLyogTkVXIFNBICovCi0JTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgeGZybV91c2Vyc2FfaWQpKSwJLyogREVMIFNBICovCi0JTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgeGZybV91c2Vyc2FfaWQpKSwJLyogR0VUIFNBICovCi0JTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgeGZybV91c2VycG9saWN5X2luZm8pKSwvKiBORVcgUE9MSUNZICovCi0JTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgeGZybV91c2VycG9saWN5X2lkKSksICAvKiBERUwgUE9MSUNZICovCi0JTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgeGZybV91c2VycG9saWN5X2lkKSksICAvKiBHRVQgUE9MSUNZICovCi0JTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgeGZybV91c2Vyc3BpX2luZm8pKSwJLyogQUxMT0MgU1BJICovCi0JTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX2FjcXVpcmUpKSwJLyogQUNRVUlSRSAqLwotCU5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9leHBpcmUpKSwJLyogRVhQSVJFICovCi0JTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgeGZybV91c2VycG9saWN5X2luZm8pKSwvKiBVUEQgUE9MSUNZICovCi0JTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbykpLAkvKiBVUEQgU0EgKi8KLQlOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfcG9sZXhwaXJlKSksIC8qIFBPTEVYUElSRSAqLwotCU5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHhmcm1fdXNlcnNhX2ZsdXNoKSksCS8qIEZMVVNIIFNBICovCi0JTkxNU0dfTEVOR1RIKDApLAkJCQkvKiBGTFVTSCBQT0xJQ1kgKi8KKyNkZWZpbmUgWE1TR1NJWkUodHlwZSkgTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgdHlwZSkpCisKK3N0YXRpYyBjb25zdCBpbnQgeGZybV9tc2dfbWluW1hGUk1fTlJfTVNHVFlQRVNdID0geworCVtYRlJNX01TR19ORVdTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2Vyc2FfaW5mbyksCisJW1hGUk1fTVNHX0RFTFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJzYV9pZCksCisJW1hGUk1fTVNHX0dFVFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJzYV9pZCksCisJW1hGUk1fTVNHX05FV1BPTElDWSAgIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJwb2xpY3lfaW5mbyksCisJW1hGUk1fTVNHX0RFTFBPTElDWSAgIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJwb2xpY3lfaWQpLAorCVtYRlJNX01TR19HRVRQT0xJQ1kgICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VycG9saWN5X2lkKSwKKwlbWEZSTV9NU0dfQUxMT0NTUEkgICAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcnNwaV9pbmZvKSwKKwlbWEZSTV9NU0dfQUNRVUlSRSAgICAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcl9hY3F1aXJlKSwKKwlbWEZSTV9NU0dfRVhQSVJFICAgICAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcl9leHBpcmUpLAorCVtYRlJNX01TR19VUERQT0xJQ1kgICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2VycG9saWN5X2luZm8pLAorCVtYRlJNX01TR19VUERTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0gWE1TR1NJWkUoeGZybV91c2Vyc2FfaW5mbyksCisJW1hGUk1fTVNHX1BPTEVYUElSRSAgIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJfcG9sZXhwaXJlKSwKKwlbWEZSTV9NU0dfRkxVU0hTQSAgICAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcnNhX2ZsdXNoKSwKKwlbWEZSTV9NU0dfRkxVU0hQT0xJQ1kgLSBYRlJNX01TR19CQVNFXSA9IE5MTVNHX0xFTkdUSCgwKSwKIH07CiAKKyN1bmRlZiBYTVNHU0laRQorCiBzdGF0aWMgc3RydWN0IHhmcm1fbGluayB7CiAJaW50ICgqZG9pdCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5sbXNnaGRyICosIHZvaWQgKiopOwogCWludCAoKmR1bXApKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICopOwotfSB4ZnJtX2Rpc3BhdGNoW10gPSB7Ci0JewkuZG9pdAk9CXhmcm1fYWRkX3NhLCAJCX0sCi0JewkuZG9pdAk9CXhmcm1fZGVsX3NhLCAJCX0sCi0JewotCQkuZG9pdAk9CXhmcm1fZ2V0X3NhLAotCQkuZHVtcAk9CXhmcm1fZHVtcF9zYSwKLQl9LAotCXsJLmRvaXQJPQl4ZnJtX2FkZF9wb2xpY3kgCX0sCi0JewkuZG9pdAk9CXhmcm1fZ2V0X3BvbGljeSAJfSwKLQl7Ci0JCS5kb2l0CT0JeGZybV9nZXRfcG9saWN5LAotCQkuZHVtcAk9CXhmcm1fZHVtcF9wb2xpY3ksCi0JfSwKLQl7CS5kb2l0CT0JeGZybV9hbGxvY191c2Vyc3BpCX0sCi0Je30sCi0Je30sCi0JewkuZG9pdAk9CXhmcm1fYWRkX3BvbGljeSAJfSwKLQl7CS5kb2l0CT0JeGZybV9hZGRfc2EsIAkJfSwKLQl7fSwKLQl7CS5kb2l0CT0JeGZybV9mbHVzaF9zYQkJfSwKLQl7CS5kb2l0CT0JeGZybV9mbHVzaF9wb2xpY3kJfSwKK30geGZybV9kaXNwYXRjaFtYRlJNX05SX01TR1RZUEVTXSA9IHsKKwlbWEZSTV9NU0dfTkVXU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYSAgICAgICAgfSwKKwlbWEZSTV9NU0dfREVMU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RlbF9zYSAgICAgICAgfSwKKwlbWEZSTV9NU0dfR0VUU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9zYSwKKwkJCQkJCSAgIC5kdW1wID0geGZybV9kdW1wX3NhICAgICAgIH0sCisJW1hGUk1fTVNHX05FV1BPTElDWSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9saWN5ICAgIH0sCisJW1hGUk1fTVNHX0RFTFBPTElDWSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9nZXRfcG9saWN5ICAgIH0sCisJW1hGUk1fTVNHX0dFVFBPTElDWSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9nZXRfcG9saWN5LAorCQkJCQkJICAgLmR1bXAgPSB4ZnJtX2R1bXBfcG9saWN5ICAgfSwKKwlbWEZSTV9NU0dfQUxMT0NTUEkgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FsbG9jX3VzZXJzcGkgfSwKKwlbWEZSTV9NU0dfVVBEUE9MSUNZICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9wb2xpY3kgICAgfSwKKwlbWEZSTV9NU0dfVVBEU0EgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2FkZF9zYSAgICAgICAgfSwKKwlbWEZSTV9NU0dfRkxVU0hTQSAgICAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2ZsdXNoX3NhICAgICAgfSwKKwlbWEZSTV9NU0dfRkxVU0hQT0xJQ1kgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2ZsdXNoX3BvbGljeSAgfSwKIH07CiAKIHN0YXRpYyBpbnQgeGZybV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKQEAgLTkzMSw3ICs5MjgsOSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKCh0eXBlID09IDIgfHwgdHlwZSA9PSA1KSAmJiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0RVTVApKSB7CisJaWYgKCh0eXBlID09IChYRlJNX01TR19HRVRTQSAtIFhGUk1fTVNHX0JBU0UpIHx8CisJICAgICB0eXBlID09IChYRlJNX01TR19HRVRQT0xJQ1kgLSBYRlJNX01TR19CQVNFKSkgJiYKKwkgICAgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKSkgewogCQl1MzIgcmxlbjsKIAogCQlpZiAobGluay0+ZHVtcCA9PSBOVUxMKQpAQCAtMTAwOSwxOCArMTAwOCwyNiBAQAogCiBzdGF0aWMgdm9pZCB4ZnJtX25ldGxpbmtfcmN2KHN0cnVjdCBzb2NrICpzaywgaW50IGxlbikKIHsKKwl1bnNpZ25lZCBpbnQgcWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKwogCWRvIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCQlkb3duKCZ4ZnJtX2NmZ19zZW0pOwogCi0JCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkgIT0gTlVMTCkgeworCQlpZiAocWxlbiA+IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkKKwkJCXFsZW4gPSBza2JfcXVldWVfbGVuKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CisKKwkJZm9yICg7IHFsZW47IHFsZW4tLSkgeworCQkJc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAkJCWlmICh4ZnJtX3VzZXJfcmN2X3NrYihza2IpKSB7CiAJCQkJaWYgKHNrYi0+bGVuKQogCQkJCQlza2JfcXVldWVfaGVhZCgmc2stPnNrX3JlY2VpdmVfcXVldWUsCiAJCQkJCQkgICAgICAgc2tiKTsKLQkJCQllbHNlCisJCQkJZWxzZSB7CiAJCQkJCWtmcmVlX3NrYihza2IpOworCQkJCQlxbGVuLS07CisJCQkJfQogCQkJCWJyZWFrOwogCQkJfQogCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC0xMDI4LDcgKzEwMzUsNyBAQAogCiAJCXVwKCZ4ZnJtX2NmZ19zZW0pOwogCi0JfSB3aGlsZSAoeGZybV9ubCAmJiB4ZnJtX25sLT5za19yZWNlaXZlX3F1ZXVlLnFsZW4pOworCX0gd2hpbGUgKHFsZW4pOwogfQogCiBzdGF0aWMgaW50IGJ1aWxkX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGhhcmQpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2thbGxzeW1zLmMgYi9zY3JpcHRzL2thbGxzeW1zLmMKaW5kZXggMDkwZmZkYS4uZDNkMmU1MyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rYWxsc3ltcy5jCisrKyBiL3NjcmlwdHMva2FsbHN5bXMuYwpAQCAtNjcsOCArNjcsOSBAQAogCiBzdGF0aWMgc3RydWN0IHN5bV9lbnRyeSAqdGFibGU7CiBzdGF0aWMgaW50IHNpemUsIGNudDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgX3N0ZXh0LCBfZXRleHQsIF9zaW5pdHRleHQsIF9laW5pdHRleHQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIF9zdGV4dCwgX2V0ZXh0LCBfc2luaXR0ZXh0LCBfZWluaXR0ZXh0LCBfc2V4dHJhdGV4dCwgX2VleHRyYXRleHQ7CiBzdGF0aWMgaW50IGFsbF9zeW1ib2xzID0gMDsKK3N0YXRpYyBjaGFyIHN5bWJvbF9wcmVmaXhfY2hhciA9ICdcMCc7CiAKIHN0cnVjdCB0b2tlbiB7CiAJdW5zaWduZWQgY2hhciBkYXRhW01BWF9UT0tfU0laRV07CkBAIC05Myw3ICs5NCw3IEBACiBzdGF0aWMgdm9pZAogdXNhZ2Uodm9pZCkKIHsKLQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBrYWxsc3ltcyBbLS1hbGwtc3ltYm9sc10gPCBpbi5tYXAgPiBvdXQuU1xuIik7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZToga2FsbHN5bXMgWy0tYWxsLXN5bWJvbHNdIFstLXN5bWJvbC1wcmVmaXg9PHByZWZpeCBjaGFyPl0gPCBpbi5tYXAgPiBvdXQuU1xuIik7CiAJZXhpdCgxKTsKIH0KIApAQCAtMTEyLDYgKzExMyw3IEBACiByZWFkX3N5bWJvbChGSUxFICppbiwgc3RydWN0IHN5bV9lbnRyeSAqcykKIHsKIAljaGFyIHN0cls1MDBdOworCWNoYXIgKnN5bTsKIAlpbnQgcmM7CiAKIAlyYyA9IGZzY2FuZihpbiwgIiVsbHggJWMgJTQ5OXNcbiIsICZzLT5hZGRyLCAmcy0+dHlwZSwgc3RyKTsKQEAgLTEyMywyNyArMTI1LDM2IEBACiAJCXJldHVybiAtMTsKIAl9CiAKKwlzeW0gPSBzdHI7CisJLyogc2tpcCBwcmVmaXggY2hhciAqLworCWlmIChzeW1ib2xfcHJlZml4X2NoYXIgJiYgc3RyWzBdID09IHN5bWJvbF9wcmVmaXhfY2hhcikKKwkJc3ltKys7CisKIAkvKiBJZ25vcmUgbW9zdCBhYnNvbHV0ZS91bmRlZmluZWQgKD8pIHN5bWJvbHMuICovCi0JaWYgKHN0cmNtcChzdHIsICJfc3RleHQiKSA9PSAwKQorCWlmIChzdHJjbXAoc3ltLCAiX3N0ZXh0IikgPT0gMCkKIAkJX3N0ZXh0ID0gcy0+YWRkcjsKLQllbHNlIGlmIChzdHJjbXAoc3RyLCAiX2V0ZXh0IikgPT0gMCkKKwllbHNlIGlmIChzdHJjbXAoc3ltLCAiX2V0ZXh0IikgPT0gMCkKIAkJX2V0ZXh0ID0gcy0+YWRkcjsKLQllbHNlIGlmIChzdHJjbXAoc3RyLCAiX3Npbml0dGV4dCIpID09IDApCisJZWxzZSBpZiAoc3RyY21wKHN5bSwgIl9zaW5pdHRleHQiKSA9PSAwKQogCQlfc2luaXR0ZXh0ID0gcy0+YWRkcjsKLQllbHNlIGlmIChzdHJjbXAoc3RyLCAiX2Vpbml0dGV4dCIpID09IDApCisJZWxzZSBpZiAoc3RyY21wKHN5bSwgIl9laW5pdHRleHQiKSA9PSAwKQogCQlfZWluaXR0ZXh0ID0gcy0+YWRkcjsKKwllbHNlIGlmIChzdHJjbXAoc3ltLCAiX3NleHRyYXRleHQiKSA9PSAwKQorCQlfc2V4dHJhdGV4dCA9IHMtPmFkZHI7CisJZWxzZSBpZiAoc3RyY21wKHN5bSwgIl9lZXh0cmF0ZXh0IikgPT0gMCkKKwkJX2VleHRyYXRleHQgPSBzLT5hZGRyOwogCWVsc2UgaWYgKHRvdXBwZXIocy0+dHlwZSkgPT0gJ0EnKQogCXsKIAkJLyogS2VlcCB0aGVzZSB1c2VmdWwgYWJzb2x1dGUgc3ltYm9scyAqLwotCQlpZiAoc3RyY21wKHN0ciwgIl9fa2VybmVsX3N5c2NhbGxfdmlhX2JyZWFrIikgJiYKLQkJICAgIHN0cmNtcChzdHIsICJfX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGMiKSAmJgotCQkgICAgc3RyY21wKHN0ciwgIl9fa2VybmVsX3NpZ3RyYW1wIikgJiYKLQkJICAgIHN0cmNtcChzdHIsICJfX2dwIikpCisJCWlmIChzdHJjbXAoc3ltLCAiX19rZXJuZWxfc3lzY2FsbF92aWFfYnJlYWsiKSAmJgorCQkgICAgc3RyY21wKHN5bSwgIl9fa2VybmVsX3N5c2NhbGxfdmlhX2VwYyIpICYmCisJCSAgICBzdHJjbXAoc3ltLCAiX19rZXJuZWxfc2lndHJhbXAiKSAmJgorCQkgICAgc3RyY21wKHN5bSwgIl9fZ3AiKSkKIAkJCXJldHVybiAtMTsKIAogCX0KIAllbHNlIGlmICh0b3VwcGVyKHMtPnR5cGUpID09ICdVJyB8fAotCQkgaXNfYXJtX21hcHBpbmdfc3ltYm9sKHN0cikpCisJCSBpc19hcm1fbWFwcGluZ19zeW1ib2woc3ltKSkKIAkJcmV0dXJuIC0xOwogCiAJLyogaW5jbHVkZSB0aGUgdHlwZSBmaWVsZCBpbiB0aGUgc3ltYm9sIG5hbWUsIHNvIHRoYXQgaXQgZ2V0cwpAQCAtMTc3LDMwICsxODgsMzcgQEAKIAkJIl9TREEyX0JBU0VfIiwJCS8qIHBwYyAqLwogCQlOVUxMIH07CiAJaW50IGk7CisJaW50IG9mZnNldCA9IDE7CisKKwkvKiBza2lwIHByZWZpeCBjaGFyICovCisJaWYgKHN5bWJvbF9wcmVmaXhfY2hhciAmJiAqKHMtPnN5bSArIDEpID09IHN5bWJvbF9wcmVmaXhfY2hhcikKKwkJb2Zmc2V0Kys7CiAKIAkvKiBpZiAtLWFsbC1zeW1ib2xzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gc3ltYm9scyBvdXRzaWRlIHRoZSB0ZXh0CiAJICogYW5kIGluaXR0ZXh0IHNlY3Rpb25zIGFyZSBkaXNjYXJkZWQgKi8KIAlpZiAoIWFsbF9zeW1ib2xzKSB7CiAJCWlmICgocy0+YWRkciA8IF9zdGV4dCB8fCBzLT5hZGRyID4gX2V0ZXh0KQotCQkgICAgJiYgKHMtPmFkZHIgPCBfc2luaXR0ZXh0IHx8IHMtPmFkZHIgPiBfZWluaXR0ZXh0KSkKKwkJICAgICYmIChzLT5hZGRyIDwgX3Npbml0dGV4dCB8fCBzLT5hZGRyID4gX2Vpbml0dGV4dCkKKwkJICAgICYmIChzLT5hZGRyIDwgX3NleHRyYXRleHQgfHwgcy0+YWRkciA+IF9lZXh0cmF0ZXh0KSkKIAkJCXJldHVybiAwOwogCQkvKiBDb3JuZXIgY2FzZS4gIERpc2NhcmQgYW55IHN5bWJvbHMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcwotCQkgKiBfZXRleHQgb3IgX2Vpbml0dGV4dCwgdGhleSBjYW4gbW92ZSBiZXR3ZWVuIHBhc3MgMSBhbmQgMgotCQkgKiB3aGVuIHRoZSBrYWxsc3ltcyBkYXRhIGlzIGFkZGVkLiAgSWYgdGhlc2Ugc3ltYm9scyBtb3ZlIHRoZW4KLQkJICogdGhleSBtYXkgZ2V0IGRyb3BwZWQgaW4gcGFzcyAyLCB3aGljaCBicmVha3MgdGhlIGthbGxzeW1zCi0JCSAqIHJ1bGVzLgorCQkgKiBfZXRleHQgX2Vpbml0dGV4dCBvciBfZWV4dHJhdGV4dDsgdGhleSBjYW4gbW92ZSBiZXR3ZWVuIHBhc3MKKwkJICogMSBhbmQgMiB3aGVuIHRoZSBrYWxsc3ltcyBkYXRhIGFyZSBhZGRlZC4gIElmIHRoZXNlIHN5bWJvbHMKKwkJICogbW92ZSB0aGVuIHRoZXkgbWF5IGdldCBkcm9wcGVkIGluIHBhc3MgMiwgd2hpY2ggYnJlYWtzIHRoZQorCQkgKiBrYWxsc3ltcyBydWxlcy4KIAkJICovCi0JCWlmICgocy0+YWRkciA9PSBfZXRleHQgJiYgc3RyY21wKHMtPnN5bSArIDEsICJfZXRleHQiKSkgfHwKLQkJICAgIChzLT5hZGRyID09IF9laW5pdHRleHQgJiYgc3RyY21wKHMtPnN5bSArIDEsICJfZWluaXR0ZXh0IikpKQorCQlpZiAoKHMtPmFkZHIgPT0gX2V0ZXh0ICYmIHN0cmNtcChzLT5zeW0gKyBvZmZzZXQsICJfZXRleHQiKSkgfHwKKwkJICAgIChzLT5hZGRyID09IF9laW5pdHRleHQgJiYgc3RyY21wKHMtPnN5bSArIG9mZnNldCwgIl9laW5pdHRleHQiKSkgfHwKKwkJICAgIChzLT5hZGRyID09IF9lZXh0cmF0ZXh0ICYmIHN0cmNtcChzLT5zeW0gKyBvZmZzZXQsICJfZWV4dHJhdGV4dCIpKSkKIAkJCXJldHVybiAwOwogCX0KIAogCS8qIEV4Y2x1ZGUgc3ltYm9scyB3aGljaCB2YXJ5IGJldHdlZW4gcGFzc2VzLiAqLwotCWlmIChzdHJzdHIocy0+c3ltICsgMSwgIl9jb21waWxlZC4iKSkKKwlpZiAoc3Ryc3RyKHMtPnN5bSArIG9mZnNldCwgIl9jb21waWxlZC4iKSkKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBzcGVjaWFsX3N5bWJvbHNbaV07IGkrKykKLQkJaWYoIHN0cmNtcChzLT5zeW0gKyAxLCBzcGVjaWFsX3N5bWJvbHNbaV0pID09IDAgKQorCQlpZiggc3RyY21wKHMtPnN5bSArIG9mZnNldCwgc3BlY2lhbF9zeW1ib2xzW2ldKSA9PSAwICkKIAkJCXJldHVybiAwOwogCiAJcmV0dXJuIDE7CkBAIC0yMjUsOSArMjQzLDE1IEBACiAKIHN0YXRpYyB2b2lkIG91dHB1dF9sYWJlbChjaGFyICpsYWJlbCkKIHsKLQlwcmludGYoIi5nbG9ibCAlc1xuIixsYWJlbCk7CisJaWYgKHN5bWJvbF9wcmVmaXhfY2hhcikKKwkJcHJpbnRmKCIuZ2xvYmwgJWMlc1xuIiwgc3ltYm9sX3ByZWZpeF9jaGFyLCBsYWJlbCk7CisJZWxzZQorCQlwcmludGYoIi5nbG9ibCAlc1xuIiwgbGFiZWwpOwogCXByaW50ZigiXHRBTEdOXG4iKTsKLQlwcmludGYoIiVzOlxuIixsYWJlbCk7CisJaWYgKHN5bWJvbF9wcmVmaXhfY2hhcikKKwkJcHJpbnRmKCIlYyVzOlxuIiwgc3ltYm9sX3ByZWZpeF9jaGFyLCBsYWJlbCk7CisJZWxzZQorCQlwcmludGYoIiVzOlxuIiwgbGFiZWwpOwogfQogCiAvKiB1bmNvbXByZXNzIGEgY29tcHJlc3NlZCBzeW1ib2wuIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBiZXN0IHRhYmxlCkBAIC02NjUsNiArNjg5LDEzIEBACiAKIAlpbnNlcnRfcmVhbF9zeW1ib2xzX2luX3RhYmxlKCk7CiAKKwkvKiBXaGVuIHZhbGlkIHN5bWJvbCBpcyBub3QgcmVnaXN0ZXJlZCwgZXhpdCB0byBlcnJvciAqLworCWlmIChnb29kX2hlYWQubGVmdCA9PSBnb29kX2hlYWQucmlnaHQgJiYKKwkgICAgYmFkX2hlYWQubGVmdCA9PSBiYWRfaGVhZC5yaWdodCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIk5vIHZhbGlkIHN5bWJvbC5cbiIpOworCQlleGl0KDEpOworCX0KKwogCW9wdGltaXplX3Jlc3VsdCgpOwogfQogCkBAIC02NzIsOSArNzAzLDIxIEBACiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewotCWlmIChhcmdjID09IDIgJiYgc3RyY21wKGFyZ3ZbMV0sICItLWFsbC1zeW1ib2xzIikgPT0gMCkKLQkJYWxsX3N5bWJvbHMgPSAxOwotCWVsc2UgaWYgKGFyZ2MgIT0gMSkKKwlpZiAoYXJnYyA+PSAyKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCQlpZihzdHJjbXAoYXJndltpXSwgIi0tYWxsLXN5bWJvbHMiKSA9PSAwKQorCQkJCWFsbF9zeW1ib2xzID0gMTsKKwkJCWVsc2UgaWYgKHN0cm5jbXAoYXJndltpXSwgIi0tc3ltYm9sLXByZWZpeD0iLCAxNikgPT0gMCkgeworCQkJCWNoYXIgKnAgPSAmYXJndltpXVsxNl07CisJCQkJLyogc2tpcCBxdW90ZSAqLworCQkJCWlmICgoKnAgPT0gJyInICYmICoocCsyKSA9PSAnIicpIHx8ICgqcCA9PSAnXCcnICYmICoocCsyKSA9PSAnXCcnKSkKKwkJCQkJcCsrOworCQkJCXN5bWJvbF9wcmVmaXhfY2hhciA9ICpwOworCQkJfSBlbHNlCisJCQkJdXNhZ2UoKTsKKwkJfQorCX0gZWxzZSBpZiAoYXJnYyAhPSAxKQogCQl1c2FnZSgpOwogCiAJcmVhZF9tYXAoc3RkaW4pOwpAQCAtNjgzLDQgKzcyNiwzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCmluZGV4IDVhNWRkYzQuLjA5YWJiODkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQorKysgYi9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIEtlcm5lbCBjb25maWd1cmF0aW9uIHRhcmdldHMKICMgVGhlc2UgdGFyZ2V0cyBhcmUgdXNlZCBmcm9tIHRvcC1sZXZlbCBtYWtlZmlsZQogCi0uUEhPTlk6IG9sZGNvbmZpZyB4Y29uZmlnIGdjb25maWcgbWVudWNvbmZpZyBjb25maWcgc2lsZW50b2xkY29uZmlnCisuUEhPTlk6IG9sZGNvbmZpZyB4Y29uZmlnIGdjb25maWcgbWVudWNvbmZpZyBjb25maWcgc2lsZW50b2xkY29uZmlnIHVwZGF0ZS1wby1jb25maWcKIAogeGNvbmZpZzogJChvYmopL3Fjb25mCiAJJDwgYXJjaC8kKEFSQ0gpL0tjb25maWcKQEAgLTIzLDYgKzIzLDEzIEBACiBzaWxlbnRvbGRjb25maWc6ICQob2JqKS9jb25mCiAJJDwgLXMgYXJjaC8kKEFSQ0gpL0tjb25maWcKIAordXBkYXRlLXBvLWNvbmZpZzogJChvYmopL2t4Z2V0dGV4dAorCXhnZXR0ZXh0IC0tZGVmYXVsdC1kb21haW49bGludXggXAorICAgICAgICAgIC0tYWRkLWNvbW1lbnRzIC0ta2V5d29yZD1fIC0ta2V5d29yZD1OXyBcCisgICAgICAgICAgLS1maWxlcy1mcm9tPXNjcmlwdHMva2NvbmZpZy9QT1RGSUxFUy5pbiBcCisJLW8gc2NyaXB0cy9rY29uZmlnL2xpbnV4LnBvdAorCXNjcmlwdHMva2NvbmZpZy9reGdldHRleHQgYXJjaC8kKEFSQ0gpL0tjb25maWcgPj4gc2NyaXB0cy9rY29uZmlnL2xpbnV4LnBvdAorCiAuUEhPTlk6IHJhbmRjb25maWcgYWxseWVzY29uZmlnIGFsbG5vY29uZmlnIGFsbG1vZGNvbmZpZyBkZWZjb25maWcKIAogcmFuZGNvbmZpZzogJChvYmopL2NvbmYKQEAgLTcyLDkgKzc5LDEwIEBACiAjICAgICAgICAgQmFzZWQgb24gR1RLIHdoaWNoIG5lZWRzIHRvIGJlIGluc3RhbGxlZCB0byBjb21waWxlIGl0CiAjIG9iamVjdCBmaWxlcyB1c2VkIGJ5IGFsbCBrY29uZmlnIGZsYXZvdXJzCiAKLWhvc3Rwcm9ncy15CTo9IGNvbmYgbWNvbmYgcWNvbmYgZ2NvbmYKK2hvc3Rwcm9ncy15CTo9IGNvbmYgbWNvbmYgcWNvbmYgZ2NvbmYga3hnZXR0ZXh0CiBjb25mLW9ianMJOj0gY29uZi5vICB6Y29uZi50YWIubwogbWNvbmYtb2Jqcwk6PSBtY29uZi5vIHpjb25mLnRhYi5vCitreGdldHRleHQtb2Jqcwk6PSBreGdldHRleHQubyB6Y29uZi50YWIubwogCiBpZmVxICgkKE1BS0VDTURHT0FMUykseGNvbmZpZykKIAlxY29uZi10YXJnZXQgOj0gMQpAQCAtMTA3LDcgKzExNSw3IEBACiBIT1NUQ0ZMQUdTX2djb25mLm8JPSBgcGtnLWNvbmZpZyBndGsrLTIuMCBnbW9kdWxlLTIuMCBsaWJnbGFkZS0yLjAgLS1jZmxhZ3NgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLUQgTEtDX0RJUkVDVF9MSU5LCiAKLSQob2JqKS9jb25mLm8gJChvYmopL21jb25mLm8gJChvYmopL3Fjb25mLm8gJChvYmopL2djb25mLm86ICQob2JqKS96Y29uZi50YWIuaAorJChvYmopL2NvbmYubyAkKG9iaikvbWNvbmYubyAkKG9iaikvcWNvbmYubyAkKG9iaikvZ2NvbmYubyAkKG9iaikva3hnZXR0ZXh0OiAkKG9iaikvemNvbmYudGFiLmgKIAogJChvYmopL3pjb25mLnRhYi5oOiAkKHNyYykvemNvbmYudGFiLmhfc2hpcHBlZAogJChvYmopL3pjb25mLnRhYi5jOiAkKHNyYykvemNvbmYudGFiLmNfc2hpcHBlZApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL1BPVEZJTEVTLmluIGIvc2NyaXB0cy9rY29uZmlnL1BPVEZJTEVTLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTRlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2tjb25maWcvUE9URklMRVMuaW4KQEAgLTAsMCArMSw1IEBACitzY3JpcHRzL2tjb25maWcvbWNvbmYuYworc2NyaXB0cy9rY29uZmlnL2NvbmYuYworc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKK3NjcmlwdHMva2NvbmZpZy9nY29uZi5jCitzY3JpcHRzL2tjb25maWcvcWNvbmYuY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCmluZGV4IGE0OTRkMWEuLjcwZTcyNjQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwpAQCAtMzQsNyArMzQsNyBAQAogc3RhdGljIHNpZ25lZCBjaGFyIGxpbmVbMTI4XTsKIHN0YXRpYyBzdHJ1Y3QgbWVudSAqcm9vdEVudHJ5OwogCi1zdGF0aWMgY2hhciBub2hlbHBfdGV4dFtdID0gIlNvcnJ5LCBubyBoZWxwIGF2YWlsYWJsZSBmb3IgdGhpcyBvcHRpb24geWV0LlxuIjsKK3N0YXRpYyBjaGFyIG5vaGVscF90ZXh0W10gPSBOXygiU29ycnksIG5vIGhlbHAgYXZhaWxhYmxlIGZvciB0aGlzIG9wdGlvbiB5ZXQuXG4iKTsKIAogc3RhdGljIHZvaWQgc3RyaXAoc2lnbmVkIGNoYXIgKnN0cikKIHsKQEAgLTU2LDkgKzU2LDkgQEAKIHN0YXRpYyB2b2lkIGNoZWNrX3N0ZGluKHZvaWQpCiB7CiAJaWYgKCF2YWxpZF9zdGRpbiAmJiBpbnB1dF9tb2RlID09IGFza19zaWxlbnQpIHsKLQkJcHJpbnRmKCJhYm9ydGVkIVxuXG4iKTsKLQkJcHJpbnRmKCJDb25zb2xlIGlucHV0L291dHB1dCBpcyByZWRpcmVjdGVkLiAiKTsKLQkJcHJpbnRmKCJSdW4gJ21ha2Ugb2xkY29uZmlnJyB0byB1cGRhdGUgY29uZmlndXJhdGlvbi5cblxuIik7CisJCXByaW50ZihfKCJhYm9ydGVkIVxuXG4iKSk7CisJCXByaW50ZihfKCJDb25zb2xlIGlucHV0L291dHB1dCBpcyByZWRpcmVjdGVkLiAiKSk7CisJCXByaW50ZihfKCJSdW4gJ21ha2Ugb2xkY29uZmlnJyB0byB1cGRhdGUgY29uZmlndXJhdGlvbi5cblxuIikpOwogCQlleGl0KDEpOwogCX0KIH0KQEAgLTQ3MCw3ICs0NzAsNyBAQAogCWlmIChzeW0pIHsKIAkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSAmJiAhc3ltX2hhc192YWx1ZShzeW0pKSB7CiAJCQlpZiAoIWNvbmZfY250KyspCi0JCQkJcHJpbnRmKCIqXG4qIFJlc3RhcnQgY29uZmlnLi4uXG4qXG4iKTsKKwkJCQlwcmludGYoXygiKlxuKiBSZXN0YXJ0IGNvbmZpZy4uLlxuKlxuIikpOwogCQkJcm9vdEVudHJ5ID0gbWVudV9nZXRfcGFyZW50X21lbnUobWVudSk7CiAJCQljb25mKHJvb3RFbnRyeSk7CiAJCX0KQEAgLTUwNCw3ICs1MDQsNyBAQAogCQkJaW5wdXRfbW9kZSA9IHNldF9kZWZhdWx0OwogCQkJZGVmY29uZmlnX2ZpbGUgPSBhdltpKytdOwogCQkJaWYgKCFkZWZjb25maWdfZmlsZSkgewotCQkJCXByaW50ZigiJXM6IE5vIGRlZmF1bHQgY29uZmlnIGZpbGUgc3BlY2lmaWVkXG4iLAorCQkJCXByaW50ZihfKCIlczogTm8gZGVmYXVsdCBjb25maWcgZmlsZSBzcGVjaWZpZWRcbiIpLAogCQkJCQlhdlswXSk7CiAJCQkJZXhpdCgxKTsKIAkJCX0KQEAgLTUzMCw3ICs1MzAsNyBAQAogCX0KICAgCW5hbWUgPSBhdltpXTsKIAlpZiAoIW5hbWUpIHsKLQkJcHJpbnRmKCIlczogS2NvbmZpZyBmaWxlIG1pc3NpbmdcbiIsIGF2WzBdKTsKKwkJcHJpbnRmKF8oIiVzOiBLY29uZmlnIGZpbGUgbWlzc2luZ1xuIiksIGF2WzBdKTsKIAl9CiAJY29uZl9wYXJzZShuYW1lKTsKIAkvL3pjb25mZHVtcChzdGRvdXQpOwpAQCAtNTQ3LDEyICs1NDcsMTIgQEAKIAkJYnJlYWs7CiAJY2FzZSBhc2tfc2lsZW50OgogCQlpZiAoc3RhdCgiLmNvbmZpZyIsICZ0bXBzdGF0KSkgewotCQkJcHJpbnRmKCIqKipcbiIKKwkJCXByaW50ZihfKCIqKipcbiIKIAkJCQkiKioqIFlvdSBoYXZlIG5vdCB5ZXQgY29uZmlndXJlZCB5b3VyIGtlcm5lbCFcbiIKIAkJCQkiKioqXG4iCiAJCQkJIioqKiBQbGVhc2UgcnVuIHNvbWUgY29uZmlndXJhdG9yIChlLmcuIFwibWFrZSBvbGRjb25maWdcIiBvclxuIgogCQkJCSIqKiogXCJtYWtlIG1lbnVjb25maWdcIiBvciBcIm1ha2UgeGNvbmZpZ1wiKS5cbiIKLQkJCQkiKioqXG4iKTsKKwkJCQkiKioqXG4iKSk7CiAJCQlleGl0KDEpOwogCQl9CiAJY2FzZSBhc2tfYWxsOgpAQCAtNTc2LDcgKzU3Niw3IEBACiAJCWNoZWNrX2NvbmYoJnJvb3RtZW51KTsKIAl9IHdoaWxlIChjb25mX2NudCk7CiAJaWYgKGNvbmZfd3JpdGUoTlVMTCkpIHsKLQkJZnByaW50ZihzdGRlcnIsICJcbioqKiBFcnJvciBkdXJpbmcgd3JpdGluZyBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uXG5cbiIpOworCQlmcHJpbnRmKHN0ZGVyciwgXygiXG4qKiogRXJyb3IgZHVyaW5nIHdyaXRpbmcgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG4iKSk7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKaW5kZXggMWU4MmFlMy4uMjc1NWM0NSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKQEAgLTg4LDkgKzg4LDkgQEAKIAkJCW5hbWUgPSBjb25mX2V4cGFuZF92YWx1ZShuYW1lKTsKIAkJCWluID0gemNvbmZfZm9wZW4obmFtZSk7CiAJCQlpZiAoaW4pIHsKLQkJCQlwcmludGYoIiNcbiIKLQkJCQkgICAgICAgIiMgdXNpbmcgZGVmYXVsdHMgZm91bmQgaW4gJXNcbiIKLQkJCQkgICAgICAgIiNcbiIsIG5hbWUpOworCQkJCXByaW50ZihfKCIjXG4iCisJCQkJICAgICAgICAgIiMgdXNpbmcgZGVmYXVsdHMgZm91bmQgaW4gJXNcbiIKKwkJCQkgICAgICAgICAiI1xuIiksIG5hbWUpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0zMTIsMTEgKzMxMiwxMSBAQAogCWlmIChlbnYgJiYgKmVudikKIAkJdXNlX3RpbWVzdGFtcCA9IDA7CiAKLQlmcHJpbnRmKG91dCwgIiNcbiIKLQkJICAgICAiIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdFxuIgotCQkgICAgICIjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAlc1xuIgotCQkgICAgICIlcyVzIgotCQkgICAgICIjXG4iLAorCWZwcmludGYob3V0LCBfKCIjXG4iCisJCSAgICAgICAiIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdFxuIgorCQkgICAgICAgIiMgTGludXgga2VybmVsIHZlcnNpb246ICVzXG4iCisJCSAgICAgICAiJXMlcyIKKwkJICAgICAgICIjXG4iKSwKIAkJICAgICBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pLAogCQkgICAgIHVzZV90aW1lc3RhbXAgPyAiIyAiIDogIiIsCiAJCSAgICAgdXNlX3RpbWVzdGFtcCA/IGN0aW1lKCZub3cpIDogIiIpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2djb25mLmMgYi9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYwppbmRleCA2ZmRiZTZlLi5hZDZiMTIwIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYworKysgYi9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYwpAQCAtNDEsNyArNDEsNyBAQAogc3RhdGljIGdib29sZWFuIGNvbmZpZ19jaGFuZ2VkID0gRkFMU0U7CiAKIHN0YXRpYyBjaGFyIG5vaGVscF90ZXh0W10gPQotICAgICJTb3JyeSwgbm8gaGVscCBhdmFpbGFibGUgZm9yIHRoaXMgb3B0aW9uIHlldC5cbiI7CisgICAgTl8oIlNvcnJ5LCBubyBoZWxwIGF2YWlsYWJsZSBmb3IgdGhpcyBvcHRpb24geWV0LlxuIik7CiAKIEd0a1dpZGdldCAqbWFpbl93bmQgPSBOVUxMOwogR3RrV2lkZ2V0ICp0cmVlMV93ID0gTlVMTDsJLy8gbGVmdCAgZnJhbWUKQEAgLTE5Myw3ICsxOTMsNyBAQAogCiAJeG1sID0gZ2xhZGVfeG1sX25ldyhnbGFkZV9maWxlLCAid2luZG93MSIsIE5VTEwpOwogCWlmICgheG1sKQotCQlnX2Vycm9yKCJHVUkgbG9hZGluZyBmYWlsZWQgIVxuIik7CisJCWdfZXJyb3IoXygiR1VJIGxvYWRpbmcgZmFpbGVkICFcbiIpKTsKIAlnbGFkZV94bWxfc2lnbmFsX2F1dG9jb25uZWN0KHhtbCk7CiAKIAltYWluX3duZCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgIndpbmRvdzEiKTsKQEAgLTI3NSw3ICsyNzUsNyBAQAogCQkJCQkgIC8qInN0eWxlIiwgUEFOR09fU1RZTEVfT0JMSVFVRSwgKi8KIAkJCQkJICBOVUxMKTsKIAotCXNwcmludGYodGl0bGUsICJMaW51eCBLZXJuZWwgdiVzIENvbmZpZ3VyYXRpb24iLAorCXNwcmludGYodGl0bGUsIF8oIkxpbnV4IEtlcm5lbCB2JXMgQ29uZmlndXJhdGlvbiIpLAogCQlnZXRlbnYoIktFUk5FTFJFTEVBU0UiKSk7CiAJZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhtYWluX3duZCksIHRpdGxlKTsKIApAQCAtMzI1LDcgKzMyNSw3IEBACiAJCiAJY29sdW1uID0gZ3RrX3RyZWVfdmlld19jb2x1bW5fbmV3KCk7CiAJZ3RrX3RyZWVfdmlld19hcHBlbmRfY29sdW1uKHZpZXcsIGNvbHVtbik7Ci0JZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3RpdGxlKGNvbHVtbiwgIk9wdGlvbnMiKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdGl0bGUoY29sdW1uLCBfKCJPcHRpb25zIikpOwogCiAJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90b2dnbGVfbmV3KCk7CiAJZ3RrX3RyZWVfdmlld19jb2x1bW5fcGFja19zdGFydChHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLApAQCAtMzcwLDcgKzM3MCw3IEBACiAKIAljb2x1bW4gPSBndGtfdHJlZV92aWV3X2NvbHVtbl9uZXcoKTsKIAlndGtfdHJlZV92aWV3X2FwcGVuZF9jb2x1bW4odmlldywgY29sdW1uKTsKLQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdGl0bGUoY29sdW1uLCAiT3B0aW9ucyIpOworCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF90aXRsZShjb2x1bW4sIF8oIk9wdGlvbnMiKSk7CiAKIAlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3BpeGJ1Zl9uZXcoKTsKIAlndGtfdHJlZV92aWV3X2NvbHVtbl9wYWNrX3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCkBAIC00MDEsNyArNDAxLDcgQEAKIAogCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9uZXcoKTsKIAlndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5fd2l0aF9hdHRyaWJ1dGVzKHZpZXcsIC0xLAotCQkJCQkJICAgICJOYW1lIiwgcmVuZGVyZXIsCisJCQkJCQkgICAgXygiTmFtZSIpLCByZW5kZXJlciwKIAkJCQkJCSAgICAidGV4dCIsIENPTF9OQU1FLAogCQkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIsCiAJCQkJCQkgICAgQ09MX0NPTE9SLCBOVUxMKTsKQEAgLTQyNSw3ICs0MjUsNyBAQAogCQkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7CiAJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOwogCWd0a190cmVlX3ZpZXdfaW5zZXJ0X2NvbHVtbl93aXRoX2F0dHJpYnV0ZXModmlldywgLTEsCi0JCQkJCQkgICAgIlZhbHVlIiwgcmVuZGVyZXIsCisJCQkJCQkgICAgXygiVmFsdWUiKSwgcmVuZGVyZXIsCiAJCQkJCQkgICAgInRleHQiLCBDT0xfVkFMVUUsCiAJCQkJCQkgICAgImVkaXRhYmxlIiwKIAkJCQkJCSAgICBDT0xfRURJVCwKQEAgLTQ2NiwxNSArNDY2LDE1IEBACiAJR3RrVGV4dEl0ZXIgc3RhcnQsIGVuZDsKIAljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CiAJZ2NoYXIgKm5hbWU7Ci0JY29uc3QgY2hhciAqaGVscCA9IG5vaGVscF90ZXh0OworCWNvbnN0IGNoYXIgKmhlbHAgPSBfKG5vaGVscF90ZXh0KTsKIAogCWlmICghbWVudS0+c3ltKQogCQloZWxwID0gIiI7CiAJZWxzZSBpZiAobWVudS0+c3ltLT5oZWxwKQotCQloZWxwID0gbWVudS0+c3ltLT5oZWxwOworCQloZWxwID0gXyhtZW51LT5zeW0tPmhlbHApOwogCiAJaWYgKG1lbnUtPnN5bSAmJiBtZW51LT5zeW0tPm5hbWUpCi0JCW5hbWUgPSBnX3N0cmR1cF9wcmludGYobWVudS0+c3ltLT5uYW1lKTsKKwkJbmFtZSA9IGdfc3RyZHVwX3ByaW50ZihfKG1lbnUtPnN5bS0+bmFtZSkpOwogCWVsc2UKIAkJbmFtZSA9IGdfc3RyZHVwKCIiKTsKIApAQCAtNTMwLDcgKzUzMCw3IEBACiAJaWYgKGNvbmZpZ19jaGFuZ2VkID09IEZBTFNFKQogCQlyZXR1cm4gRkFMU0U7CiAKLQlkaWFsb2cgPSBndGtfZGlhbG9nX25ld193aXRoX2J1dHRvbnMoIldhcm5pbmcgISIsCisJZGlhbG9nID0gZ3RrX2RpYWxvZ19uZXdfd2l0aF9idXR0b25zKF8oIldhcm5pbmcgISIpLAogCQkJCQkgICAgIEdUS19XSU5ET1cobWFpbl93bmQpLAogCQkJCQkgICAgIChHdGtEaWFsb2dGbGFncykKIAkJCQkJICAgICAoR1RLX0RJQUxPR19NT0RBTCB8CkBAIC01NDQsNyArNTQ0LDcgQEAKIAlndGtfZGlhbG9nX3NldF9kZWZhdWx0X3Jlc3BvbnNlKEdUS19ESUFMT0coZGlhbG9nKSwKIAkJCQkJR1RLX1JFU1BPTlNFX0NBTkNFTCk7CiAKLQlsYWJlbCA9IGd0a19sYWJlbF9uZXcoIlxuU2F2ZSBjb25maWd1cmF0aW9uID9cbiIpOworCWxhYmVsID0gZ3RrX2xhYmVsX25ldyhfKCJcblNhdmUgY29uZmlndXJhdGlvbiA/XG4iKSk7CiAJZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihHVEtfRElBTE9HKGRpYWxvZyktPnZib3gpLCBsYWJlbCk7CiAJZ3RrX3dpZGdldF9zaG93KGxhYmVsKTsKIApAQCAtNjA0LDcgKzYwNCw3IEBACiAJCQkJCSAgICAgKHVzZXJfZGF0YSkpOwogCiAJaWYgKGNvbmZfcmVhZChmbikpCi0JCXRleHRfaW5zZXJ0X21zZygiRXJyb3IiLCAiVW5hYmxlIHRvIGxvYWQgY29uZmlndXJhdGlvbiAhIik7CisJCXRleHRfaW5zZXJ0X21zZyhfKCJFcnJvciIpLCBfKCJVbmFibGUgdG8gbG9hZCBjb25maWd1cmF0aW9uICEiKSk7CiAJZWxzZQogCQlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsKIH0KQEAgLTYxMyw3ICs2MTMsNyBAQAogewogCUd0a1dpZGdldCAqZnM7CiAKLQlmcyA9IGd0a19maWxlX3NlbGVjdGlvbl9uZXcoIkxvYWQgZmlsZS4uLiIpOworCWZzID0gZ3RrX2ZpbGVfc2VsZWN0aW9uX25ldyhfKCJMb2FkIGZpbGUuLi4iKSk7CiAJZ19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKEdUS19GSUxFX1NFTEVDVElPTihmcyktPm9rX2J1dHRvbiksCiAJCQkgImNsaWNrZWQiLAogCQkJIEdfQ0FMTEJBQ0sobG9hZF9maWxlbmFtZSksIChncG9pbnRlcikgZnMpOwpAQCAtNjMyLDcgKzYzMiw3IEBACiB2b2lkIG9uX3NhdmUxX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKIHsKIAlpZiAoY29uZl93cml0ZShOVUxMKSkKLQkJdGV4dF9pbnNlcnRfbXNnKCJFcnJvciIsICJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0aW9uICEiKTsKKwkJdGV4dF9pbnNlcnRfbXNnKF8oIkVycm9yIiksIF8oIlVuYWJsZSB0byBzYXZlIGNvbmZpZ3VyYXRpb24gISIpKTsKIAogCWNvbmZpZ19jaGFuZ2VkID0gRkFMU0U7CiB9CkBAIC02NDcsNyArNjQ3LDcgQEAKIAkJCQkJICAgICAodXNlcl9kYXRhKSk7CiAKIAlpZiAoY29uZl93cml0ZShmbikpCi0JCXRleHRfaW5zZXJ0X21zZygiRXJyb3IiLCAiVW5hYmxlIHRvIHNhdmUgY29uZmlndXJhdGlvbiAhIik7CisJCXRleHRfaW5zZXJ0X21zZyhfKCJFcnJvciIpLCBfKCJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0aW9uICEiKSk7CiAKIAlndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVCh1c2VyX2RhdGEpKTsKIH0KQEAgLTY1Niw3ICs2NTYsNyBAQAogewogCUd0a1dpZGdldCAqZnM7CiAKLQlmcyA9IGd0a19maWxlX3NlbGVjdGlvbl9uZXcoIlNhdmUgZmlsZSBhcy4uLiIpOworCWZzID0gZ3RrX2ZpbGVfc2VsZWN0aW9uX25ldyhfKCJTYXZlIGZpbGUgYXMuLi4iKSk7CiAJZ19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKEdUS19GSUxFX1NFTEVDVElPTihmcyktPm9rX2J1dHRvbiksCiAJCQkgImNsaWNrZWQiLAogCQkJIEdfQ0FMTEJBQ0soc3RvcmVfZmlsZW5hbWUpLCAoZ3BvaW50ZXIpIGZzKTsKQEAgLTc0MCw3ICs3NDAsNyBAQAogdm9pZCBvbl9pbnRyb2R1Y3Rpb24xX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKIHsKIAlHdGtXaWRnZXQgKmRpYWxvZzsKLQljb25zdCBnY2hhciAqaW50cm9fdGV4dCA9CisJY29uc3QgZ2NoYXIgKmludHJvX3RleHQgPSBfKAogCSAgICAiV2VsY29tZSB0byBna2MsIHRoZSBHVEsrIGdyYXBoaWNhbCBrZXJuZWwgY29uZmlndXJhdGlvbiB0b29sXG4iCiAJICAgICJmb3IgTGludXguXG4iCiAJICAgICJGb3IgZWFjaCBvcHRpb24sIGEgYmxhbmsgYm94IGluZGljYXRlcyB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZCwgYVxuIgpAQCAtNzU2LDcgKzc1Niw3IEBACiAJICAgICJvcHRpb24uXG4iCiAJICAgICJcbiIKIAkgICAgIlRvZ2dsaW5nIFNob3cgRGVidWcgSW5mbyB1bmRlciB0aGUgT3B0aW9ucyBtZW51IHdpbGwgc2hvdyBcbiIKLQkgICAgInRoZSBkZXBlbmRlbmNpZXMsIHdoaWNoIHlvdSBjYW4gdGhlbiBtYXRjaCBieSBleGFtaW5pbmcgb3RoZXIgb3B0aW9ucy4iOworCSAgICAidGhlIGRlcGVuZGVuY2llcywgd2hpY2ggeW91IGNhbiB0aGVuIG1hdGNoIGJ5IGV4YW1pbmluZyBvdGhlciBvcHRpb25zLiIpOwogCiAJZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lORE9XKG1haW5fd25kKSwKIAkJCQkJR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULApAQCAtNzczLDggKzc3Myw4IEBACiB7CiAJR3RrV2lkZ2V0ICpkaWFsb2c7CiAJY29uc3QgZ2NoYXIgKmFib3V0X3RleHQgPQotCSAgICAiZ2tjIGlzIGNvcHlyaWdodCAoYykgMjAwMiBSb21haW4gTGlldmluIDxyb21zQGxwZy50aWNhbGMub3JnPi5cbiIKLQkgICAgIkJhc2VkIG9uIHRoZSBzb3VyY2UgY29kZSBmcm9tIFJvbWFuIFppcHBlbC5cbiI7CisJICAgIF8oImdrYyBpcyBjb3B5cmlnaHQgKGMpIDIwMDIgUm9tYWluIExpZXZpbiA8cm9tc0BscGcudGljYWxjLm9yZz4uXG4iCisJICAgICAgIkJhc2VkIG9uIHRoZSBzb3VyY2UgY29kZSBmcm9tIFJvbWFuIFppcHBlbC5cbiIpOwogCiAJZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lORE9XKG1haW5fd25kKSwKIAkJCQkJR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULApAQCAtNzkxLDkgKzc5MSw5IEBACiB7CiAJR3RrV2lkZ2V0ICpkaWFsb2c7CiAJY29uc3QgZ2NoYXIgKmxpY2Vuc2VfdGV4dCA9Ci0JICAgICJna2MgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLlxuIgotCSAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHNvdXJjZSBjb2RlIG9yXG4iCi0JICAgICJ2aXNpdCBodHRwOi8vd3d3LmZzZi5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbFxuIjsKKwkgICAgXygiZ2tjIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi5cbiIKKwkgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHNvdXJjZSBjb2RlIG9yXG4iCisJICAgICAgInZpc2l0IGh0dHA6Ly93d3cuZnNmLm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sXG4iKTsKIAogCWRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcoR1RLX1dJTkRPVyhtYWluX3duZCksCiAJCQkJCUdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwKQEAgLTE1NzksNiArMTU3OSwxMCBAQAogCWtjb25maWdfbG9hZCgpOwogI2VuZGlmCiAKKwliaW5kdGV4dGRvbWFpbihQQUNLQUdFLCBMT0NBTEVESVIpOworCWJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KFBBQ0tBR0UsICJVVEYtOCIpOworCXRleHRkb21haW4oUEFDS0FHRSk7CisKIAkvKiBHVEsgc3R1ZmZzICovCiAJZ3RrX3NldF9sb2NhbGUoKTsKIAlndGtfaW5pdCgmYWMsICZhdik7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcva3hnZXR0ZXh0LmMgYi9zY3JpcHRzL2tjb25maWcva3hnZXR0ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4OGQ3YwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMva2NvbmZpZy9reGdldHRleHQuYwpAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPiwgMjAwNQorICoKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIExLQ19ESVJFQ1RfTElOSworI2luY2x1ZGUgImxrYy5oIgorCitzdGF0aWMgY2hhciAqZXNjYXBlKGNvbnN0IGNoYXIqIHRleHQsIGNoYXIgKmJmLCBpbnQgbGVuKQoreworCWNoYXIgKmJmcCA9IGJmOworCWludCBtdWx0aWxpbmUgPSBzdHJjaHIodGV4dCwgJ1xuJykgIT0gTlVMTDsKKworCSpiZnArKyA9ICciJzsKKwktLWxlbjsKKworCWlmIChtdWx0aWxpbmUpIHsKKwkJKmJmcCsrID0gJyInOworCQkqYmZwKysgPSAnXG4nOworCQkqYmZwKysgPSAnIic7CisJCWxlbiAtPSAzOworCX0KKworCXdoaWxlICgqdGV4dCAhPSAnXDAnICYmIGxlbiA+IDEpIHsKKwkJaWYgKCp0ZXh0ID09ICciJykKKwkJCSpiZnArKyA9ICdcXCc7CisJCWVsc2UgaWYgKCp0ZXh0ID09ICdcbicpIHsKKwkJCSpiZnArKyA9ICdcXCc7CisJCQkqYmZwKysgPSAnbic7CisJCQkqYmZwKysgPSAnIic7CisJCQkqYmZwKysgPSAnXG4nOworCQkJKmJmcCsrID0gJyInOworCQkJbGVuIC09IDU7CisJCQkrK3RleHQ7CisJCQlnb3RvIG5leHQ7CisJCX0KKwkJKmJmcCsrID0gKnRleHQrKzsKK25leHQ6CisJCS0tbGVuOworCX0KKworCWlmIChtdWx0aWxpbmUpCisJCWJmcCAtPSAzOworCisJKmJmcCsrID0gJyInOworCSpiZnAgPSAnXDAnOworCisJcmV0dXJuIGJmOworfQorCitzdHJ1Y3QgZmlsZV9saW5lIHsKKwlzdHJ1Y3QgZmlsZV9saW5lICpuZXh0OworCWNoYXIqCQkgZmlsZTsKKwlpbnQJCSBsaW5lbm87Cit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfbGluZSAqZmlsZV9saW5lX19uZXcoY2hhciAqZmlsZSwgaW50IGxpbmVubykKK3sKKwlzdHJ1Y3QgZmlsZV9saW5lICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOworCisJaWYgKHNlbGYgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlzZWxmLT5maWxlICAgPSBmaWxlOworCXNlbGYtPmxpbmVubyA9IGxpbmVubzsKKwlzZWxmLT5uZXh0ICAgPSBOVUxMOworb3V0OgorCXJldHVybiBzZWxmOworfQorCitzdHJ1Y3QgbWVzc2FnZSB7CisJY29uc3QgY2hhcgkgKm1zZzsKKwljb25zdCBjaGFyCSAqb3B0aW9uOworCXN0cnVjdCBtZXNzYWdlCSAqbmV4dDsKKwlzdHJ1Y3QgZmlsZV9saW5lICpmaWxlczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWVzc2FnZSAqbWVzc2FnZV9fbGlzdDsKKworc3RhdGljIHN0cnVjdCBtZXNzYWdlICptZXNzYWdlX19uZXcoY29uc3QgY2hhciAqbXNnLCBjaGFyICpvcHRpb24sIGNoYXIgKmZpbGUsIGludCBsaW5lbm8pCit7CisJc3RydWN0IG1lc3NhZ2UgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7CisKKwlpZiAoc2VsZiA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXNlbGYtPmZpbGVzID0gZmlsZV9saW5lX19uZXcoZmlsZSwgbGluZW5vKTsKKwlpZiAoc2VsZi0+ZmlsZXMgPT0gTlVMTCkKKwkJZ290byBvdXRfZmFpbDsKKworCXNlbGYtPm1zZyA9IHN0cmR1cChtc2cpOworCWlmIChzZWxmLT5tc2cgPT0gTlVMTCkKKwkJZ290byBvdXRfZmFpbF9tc2c7CisKKwlzZWxmLT5vcHRpb24gPSBvcHRpb247CisJc2VsZi0+bmV4dCA9IE5VTEw7CitvdXQ6CisJcmV0dXJuIHNlbGY7CitvdXRfZmFpbF9tc2c6CisJZnJlZShzZWxmLT5maWxlcyk7CitvdXRfZmFpbDoKKwlmcmVlKHNlbGYpOworCXNlbGYgPSBOVUxMOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgc3RydWN0IG1lc3NhZ2UgKm1lc2FnZV9fZmluZChjb25zdCBjaGFyICptc2cpCit7CisJc3RydWN0IG1lc3NhZ2UgKm0gPSBtZXNzYWdlX19saXN0OworCisJd2hpbGUgKG0gIT0gTlVMTCkgeworCQlpZiAoc3RyY21wKG0tPm1zZywgbXNnKSA9PSAwKQorCQkJYnJlYWs7CisJCW0gPSBtLT5uZXh0OworCX0KKworCXJldHVybiBtOworfQorCitzdGF0aWMgaW50IG1lc3NhZ2VfX2FkZF9maWxlX2xpbmUoc3RydWN0IG1lc3NhZ2UgKnNlbGYsIGNoYXIgKmZpbGUsIGludCBsaW5lbm8pCit7CisJaW50IHJjID0gLTE7CisJc3RydWN0IGZpbGVfbGluZSAqZmwgPSBmaWxlX2xpbmVfX25ldyhmaWxlLCBsaW5lbm8pOworCisJaWYgKGZsID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJZmwtPm5leHQgICAgPSBzZWxmLT5maWxlczsKKwlzZWxmLT5maWxlcyA9IGZsOworCXJjID0gMDsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbWVzc2FnZV9fYWRkKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqb3B0aW9uLCBjaGFyICpmaWxlLCBpbnQgbGluZW5vKQoreworCWludCByYyA9IDA7CisJY2hhciBiZlsxNjM4NF07CisJY2hhciAqZXNjYXBlZCA9IGVzY2FwZShtc2csIGJmLCBzaXplb2YoYmYpKTsKKwlzdHJ1Y3QgbWVzc2FnZSAqbSA9IG1lc2FnZV9fZmluZChlc2NhcGVkKTsKKworCWlmIChtICE9IE5VTEwpCisJCXJjID0gbWVzc2FnZV9fYWRkX2ZpbGVfbGluZShtLCBmaWxlLCBsaW5lbm8pOworCWVsc2UgeworCQltID0gbWVzc2FnZV9fbmV3KGVzY2FwZWQsIG9wdGlvbiwgZmlsZSwgbGluZW5vKTsKKworCQlpZiAobSAhPSBOVUxMKSB7CisJCQltLT5uZXh0CSAgICAgID0gbWVzc2FnZV9fbGlzdDsKKwkJCW1lc3NhZ2VfX2xpc3QgPSBtOworCQl9IGVsc2UKKwkJCXJjID0gLTE7CisJfQorCXJldHVybiByYzsKK30KKwordm9pZCBtZW51X2J1aWxkX21lc3NhZ2VfbGlzdChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisKKwltZXNzYWdlX19hZGQobWVudV9nZXRfcHJvbXB0KG1lbnUpLCBOVUxMLAorCQkgICAgIG1lbnUtPmZpbGUgPT0gTlVMTCA/ICJSb290IE1lbnUiIDogbWVudS0+ZmlsZS0+bmFtZSwKKwkJICAgICBtZW51LT5saW5lbm8pOworCisJaWYgKG1lbnUtPnN5bSAhPSBOVUxMICYmIG1lbnUtPnN5bS0+aGVscCAhPSBOVUxMKQorCQltZXNzYWdlX19hZGQobWVudS0+c3ltLT5oZWxwLCBtZW51LT5zeW0tPm5hbWUsCisJCQkgICAgIG1lbnUtPmZpbGUgPT0gTlVMTCA/ICJSb290IE1lbnUiIDogbWVudS0+ZmlsZS0+bmFtZSwKKwkJCSAgICAgbWVudS0+bGluZW5vKTsKKworCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZCAhPSBOVUxMOyBjaGlsZCA9IGNoaWxkLT5uZXh0KQorCQlpZiAoY2hpbGQtPnByb21wdCAhPSBOVUxMKQorCQkJbWVudV9idWlsZF9tZXNzYWdlX2xpc3QoY2hpbGQpOworfQorCitzdGF0aWMgdm9pZCBtZXNzYWdlX19wcmludF9maWxlX2xpbmVubyhzdHJ1Y3QgbWVzc2FnZSAqc2VsZikKK3sKKwlzdHJ1Y3QgZmlsZV9saW5lICpmbCA9IHNlbGYtPmZpbGVzOworCisJcHJpbnRmKCJcbiM6ICVzOiVkIiwgZmwtPmZpbGUsIGZsLT5saW5lbm8pOworCWZsID0gZmwtPm5leHQ7CisKKwl3aGlsZSAoZmwgIT0gTlVMTCkgeworCQlwcmludGYoIiwgJXM6JWQiLCBmbC0+ZmlsZSwgZmwtPmxpbmVubyk7CisJCWZsID0gZmwtPm5leHQ7CisJfQorCisJaWYgKHNlbGYtPm9wdGlvbiAhPSBOVUxMKQorCQlwcmludGYoIiwgJXM6MDAwMDAiLCBzZWxmLT5vcHRpb24pOworCisJcHV0Y2hhcignXG4nKTsKK30KKworc3RhdGljIHZvaWQgbWVzc2FnZV9fcHJpbnRfZ2V0dGV4dF9tc2dpZF9tc2dzdHIoc3RydWN0IG1lc3NhZ2UgKnNlbGYpCit7CisJbWVzc2FnZV9fcHJpbnRfZmlsZV9saW5lbm8oc2VsZik7CisKKwlwcmludGYoIm1zZ2lkICVzXG4iCisJICAgICAgICJtc2dzdHIgXCJcIlxuIiwgc2VsZi0+bXNnKTsKK30KKwordm9pZCBtZW51X194Z2V0dGV4dCh2b2lkKQoreworCXN0cnVjdCBtZXNzYWdlICptID0gbWVzc2FnZV9fbGlzdDsKKworCXdoaWxlIChtICE9IE5VTEwpIHsKKwkJbWVzc2FnZV9fcHJpbnRfZ2V0dGV4dF9tc2dpZF9tc2dzdHIobSk7CisJCW0gPSBtLT5uZXh0OworCX0KK30KKworaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCit7CisJY29uZl9wYXJzZShhdlsxXSk7CisKKwltZW51X2J1aWxkX21lc3NhZ2VfbGlzdChtZW51X2dldF9yb290X21lbnUoTlVMTCkpOworCW1lbnVfX3hnZXR0ZXh0KCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbGtjLmggYi9zY3JpcHRzL2tjb25maWcvbGtjLmgKaW5kZXggYjhhNjdmYy4uOGI4NGM0MiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2xrYy5oCisrKyBiL3NjcmlwdHMva2NvbmZpZy9sa2MuaApAQCAtOCw2ICs4LDggQEAKIAogI2luY2x1ZGUgImV4cHIuaCIKIAorI2luY2x1ZGUgPGxpYmludGwuaD4KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtMjMsNiArMjUsMTIgQEAKIAogI2RlZmluZSBTUkNUUkVFICJzcmN0cmVlIgogCisjZGVmaW5lIFBBQ0tBR0UgImxpbnV4IgorI2RlZmluZSBMT0NBTEVESVIgIi91c3Ivc2hhcmUvbG9jYWxlIgorCisjZGVmaW5lIF8odGV4dCkgZ2V0dGV4dCh0ZXh0KQorI2RlZmluZSBOXyh0ZXh0KSAodGV4dCkKKwogaW50IHpjb25mcGFyc2Uodm9pZCk7CiB2b2lkIHpjb25mZHVtcChGSUxFICpvdXQpOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbWNvbmYuYyBiL3NjcmlwdHMva2NvbmZpZy9tY29uZi5jCmluZGV4IDczMGQzMTYuLmU1ZGIxMGMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9tY29uZi5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9tY29uZi5jCkBAIC00LDYgKzQsOCBAQAogICoKICAqIEludHJvZHVjZWQgc2luZ2xlIG1lbnUgbW9kZSAoc2hvdyBhbGwgc3ViLW1lbnVzIGluIG9uZSBsYXJnZSB0cmVlKS4KICAqIDIwMDItMTEtMDYgUGV0ciBCYXVkaXMgPHBhc2t5QHVjdy5jej4KKyAqCisgKiBpMThuLCAyMDA1LCBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KICAqLwogCiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CkBAIC0yMyw3ICsyNSw3IEBACiAjaW5jbHVkZSAibGtjLmgiCiAKIHN0YXRpYyBjaGFyIG1lbnVfYmFja3RpdGxlWzEyOF07Ci1zdGF0aWMgY29uc3QgY2hhciBtY29uZl9yZWFkbWVbXSA9CitzdGF0aWMgY29uc3QgY2hhciBtY29uZl9yZWFkbWVbXSA9IE5fKAogIk92ZXJ2aWV3XG4iCiAiLS0tLS0tLS1cbiIKICJTb21lIGtlcm5lbCBmZWF0dXJlcyBtYXkgYmUgYnVpbHQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsLlxuIgpAQCAtMTU2LDM5ICsxNTgsMzkgQEAKICJcbiIKICJOb3RlIHRoYXQgdGhpcyBtb2RlIGNhbiBldmVudHVhbGx5IGJlIGEgbGl0dGxlIG1vcmUgQ1BVIGV4cGVuc2l2ZVxuIgogIihlc3BlY2lhbGx5IHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIHVucm9sbGVkIGNhdGVnb3JpZXMpIHRoYW4gdGhlXG4iCi0iZGVmYXVsdCBtb2RlLlxuIiwKLW1lbnVfaW5zdHJ1Y3Rpb25zW10gPQorImRlZmF1bHQgbW9kZS5cbiIpLAorbWVudV9pbnN0cnVjdGlvbnNbXSA9IE5fKAogCSJBcnJvdyBrZXlzIG5hdmlnYXRlIHRoZSBtZW51LiAgIgogCSI8RW50ZXI+IHNlbGVjdHMgc3VibWVudXMgLS0tPi4gICIKIAkiSGlnaGxpZ2h0ZWQgbGV0dGVycyBhcmUgaG90a2V5cy4gICIKIAkiUHJlc3NpbmcgPFk+IGluY2x1ZGVzLCA8Tj4gZXhjbHVkZXMsIDxNPiBtb2R1bGFyaXplcyBmZWF0dXJlcy4gICIKIAkiUHJlc3MgPEVzYz48RXNjPiB0byBleGl0LCA8Pz4gZm9yIEhlbHAsIDwvPiBmb3IgU2VhcmNoLiAgIgotCSJMZWdlbmQ6IFsqXSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxlICA8ID4gbW9kdWxlIGNhcGFibGUiLAotcmFkaW9saXN0X2luc3RydWN0aW9uc1tdID0KKwkiTGVnZW5kOiBbKl0gYnVpbHQtaW4gIFsgXSBleGNsdWRlZCAgPE0+IG1vZHVsZSAgPCA+IG1vZHVsZSBjYXBhYmxlIiksCityYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPSBOXygKIAkiVXNlIHRoZSBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlIHRoaXMgd2luZG93IG9yICIKIAkicHJlc3MgdGhlIGhvdGtleSBvZiB0aGUgaXRlbSB5b3Ugd2lzaCB0byBzZWxlY3QgIgogCSJmb2xsb3dlZCBieSB0aGUgPFNQQUNFIEJBUj4uICIKLQkiUHJlc3MgPD8+IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgb3B0aW9uLiIsCi1pbnB1dGJveF9pbnN0cnVjdGlvbnNfaW50W10gPQorCSJQcmVzcyA8Pz4gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBvcHRpb24uIiksCitpbnB1dGJveF9pbnN0cnVjdGlvbnNfaW50W10gPSBOXygKIAkiUGxlYXNlIGVudGVyIGEgZGVjaW1hbCB2YWx1ZS4gIgogCSJGcmFjdGlvbnMgd2lsbCBub3QgYmUgYWNjZXB0ZWQuICAiCi0JIlVzZSB0aGUgPFRBQj4ga2V5IHRvIG1vdmUgZnJvbSB0aGUgaW5wdXQgZmllbGQgdG8gdGhlIGJ1dHRvbnMgYmVsb3cgaXQuIiwKLWlucHV0Ym94X2luc3RydWN0aW9uc19oZXhbXSA9CisJIlVzZSB0aGUgPFRBQj4ga2V5IHRvIG1vdmUgZnJvbSB0aGUgaW5wdXQgZmllbGQgdG8gdGhlIGJ1dHRvbnMgYmVsb3cgaXQuIiksCitpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4W10gPSBOXygKIAkiUGxlYXNlIGVudGVyIGEgaGV4YWRlY2ltYWwgdmFsdWUuICIKLQkiVXNlIHRoZSA8VEFCPiBrZXkgdG8gbW92ZSBmcm9tIHRoZSBpbnB1dCBmaWVsZCB0byB0aGUgYnV0dG9ucyBiZWxvdyBpdC4iLAotaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZ1tdID0KKwkiVXNlIHRoZSA8VEFCPiBrZXkgdG8gbW92ZSBmcm9tIHRoZSBpbnB1dCBmaWVsZCB0byB0aGUgYnV0dG9ucyBiZWxvdyBpdC4iKSwKK2lucHV0Ym94X2luc3RydWN0aW9uc19zdHJpbmdbXSA9IE5fKAogCSJQbGVhc2UgZW50ZXIgYSBzdHJpbmcgdmFsdWUuICIKLQkiVXNlIHRoZSA8VEFCPiBrZXkgdG8gbW92ZSBmcm9tIHRoZSBpbnB1dCBmaWVsZCB0byB0aGUgYnV0dG9ucyBiZWxvdyBpdC4iLAotc2V0bW9kX3RleHRbXSA9CisJIlVzZSB0aGUgPFRBQj4ga2V5IHRvIG1vdmUgZnJvbSB0aGUgaW5wdXQgZmllbGQgdG8gdGhlIGJ1dHRvbnMgYmVsb3cgaXQuIiksCitzZXRtb2RfdGV4dFtdID0gTl8oCiAJIlRoaXMgZmVhdHVyZSBkZXBlbmRzIG9uIGFub3RoZXIgd2hpY2ggaGFzIGJlZW4gY29uZmlndXJlZCBhcyBhIG1vZHVsZS5cbiIKLQkiQXMgYSByZXN1bHQsIHRoaXMgZmVhdHVyZSB3aWxsIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiIsCi1ub2hlbHBfdGV4dFtdID0KLQkiVGhlcmUgaXMgbm8gaGVscCBhdmFpbGFibGUgZm9yIHRoaXMga2VybmVsIG9wdGlvbi5cbiIsCi1sb2FkX2NvbmZpZ190ZXh0W10gPQorCSJBcyBhIHJlc3VsdCwgdGhpcyBmZWF0dXJlIHdpbGwgYmUgYnVpbHQgYXMgYSBtb2R1bGUuIiksCitub2hlbHBfdGV4dFtdID0gTl8oCisJIlRoZXJlIGlzIG5vIGhlbHAgYXZhaWxhYmxlIGZvciB0aGlzIGtlcm5lbCBvcHRpb24uXG4iKSwKK2xvYWRfY29uZmlnX3RleHRbXSA9IE5fKAogCSJFbnRlciB0aGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHlvdSB3aXNoIHRvIGxvYWQuICAiCiAJIkFjY2VwdCB0aGUgbmFtZSBzaG93biB0byByZXN0b3JlIHRoZSBjb25maWd1cmF0aW9uIHlvdSAiCi0JImxhc3QgcmV0cmlldmVkLiAgTGVhdmUgYmxhbmsgdG8gYWJvcnQuIiwKLWxvYWRfY29uZmlnX2hlbHBbXSA9CisJImxhc3QgcmV0cmlldmVkLiAgTGVhdmUgYmxhbmsgdG8gYWJvcnQuIiksCitsb2FkX2NvbmZpZ19oZWxwW10gPSBOXygKIAkiXG4iCiAJIkZvciB2YXJpb3VzIHJlYXNvbnMsIG9uZSBtYXkgd2lzaCB0byBrZWVwIHNldmVyYWwgZGlmZmVyZW50IGtlcm5lbFxuIgogCSJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiIKQEAgLTE5OCwxMSArMjAwLDExIEBACiAJInRvIG1vZGlmeSB0aGF0IGNvbmZpZ3VyYXRpb24uXG4iCiAJIlxuIgogCSJJZiB5b3UgYXJlIHVuY2VydGFpbiwgdGhlbiB5b3UgaGF2ZSBwcm9iYWJseSBuZXZlciB1c2VkIGFsdGVybmF0ZVxuIgotCSJjb25maWd1cmF0aW9uIGZpbGVzLiAgWW91IHNob3VsZCB0aGVyZWZvciBsZWF2ZSB0aGlzIGJsYW5rIHRvIGFib3J0LlxuIiwKLXNhdmVfY29uZmlnX3RleHRbXSA9CisJImNvbmZpZ3VyYXRpb24gZmlsZXMuICBZb3Ugc2hvdWxkIHRoZXJlZm9yIGxlYXZlIHRoaXMgYmxhbmsgdG8gYWJvcnQuXG4iKSwKK3NhdmVfY29uZmlnX3RleHRbXSA9IE5fKAogCSJFbnRlciBhIGZpbGVuYW1lIHRvIHdoaWNoIHRoaXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgc2F2ZWQgIgotCSJhcyBhbiBhbHRlcm5hdGUuICBMZWF2ZSBibGFuayB0byBhYm9ydC4iLAotc2F2ZV9jb25maWdfaGVscFtdID0KKwkiYXMgYW4gYWx0ZXJuYXRlLiAgTGVhdmUgYmxhbmsgdG8gYWJvcnQuIiksCitzYXZlX2NvbmZpZ19oZWxwW10gPSBOXygKIAkiXG4iCiAJIkZvciB2YXJpb3VzIHJlYXNvbnMsIG9uZSBtYXkgd2lzaCB0byBrZWVwIGRpZmZlcmVudCBrZXJuZWxcbiIKIAkiY29uZmlndXJhdGlvbnMgYXZhaWxhYmxlIG9uIGEgc2luZ2xlIG1hY2hpbmUuXG4iCkBAIC0yMTIsOCArMjE0LDggQEAKIAkiY29uZmlndXJhdGlvbiBvcHRpb25zIHlvdSBoYXZlIHNlbGVjdGVkIGF0IHRoYXQgdGltZS5cbiIKIAkiXG4iCiAJIklmIHlvdSBhcmUgdW5jZXJ0YWluIHdoYXQgYWxsIHRoaXMgbWVhbnMgdGhlbiB5b3Ugc2hvdWxkIHByb2JhYmx5XG4iCi0JImxlYXZlIHRoaXMgYmxhbmsuXG4iLAotc2VhcmNoX2hlbHBbXSA9CisJImxlYXZlIHRoaXMgYmxhbmsuXG4iKSwKK3NlYXJjaF9oZWxwW10gPSBOXygKIAkiXG4iCiAJIlNlYXJjaCBmb3IgQ09ORklHXyBzeW1ib2xzIGFuZCBkaXNwbGF5IHRoZWlyIHJlbGF0aW9ucy5cbiIKIAkiRXhhbXBsZTogc2VhcmNoIGZvciBcIl5GT09cIlxuIgpAQCAtMjUwLDcgKzI1Miw3IEBACiAJIkV4YW1wbGVzOiBVU0IJPT4gZmluZCBhbGwgQ09ORklHXyBzeW1ib2xzIGNvbnRhaW5pbmcgVVNCXG4iCiAJIiAgICAgICAgICBeVVNCID0+IGZpbmQgYWxsIENPTkZJR18gc3ltYm9scyBzdGFydGluZyB3aXRoIFVTQlxuIgogCSIgICAgICAgICAgVVNCJCA9PiBmaW5kIGFsbCBDT05GSUdfIHN5bWJvbHMgZW5kaW5nIHdpdGggVVNCXG4iCi0JIlxuIjsKKwkiXG4iKTsKIAogc3RhdGljIHNpZ25lZCBjaGFyIGJ1Zls0MDk2XSwgKmJ1ZnB0ciA9IGJ1ZjsKIHN0YXRpYyBzaWduZWQgY2hhciBpbnB1dF9idWZbNDA5Nl07CkBAIC0zMDUsOCArMzA3LDggQEAKIAl9CiAKIAlpZiAocm93cyA8IDE5IHx8IGNvbHMgPCA4MCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIllvdXIgZGlzcGxheSBpcyB0b28gc21hbGwgdG8gcnVuIE1lbnVjb25maWchXG4iKTsKLQkJZnByaW50ZihzdGRlcnIsICJJdCBtdXN0IGJlIGF0IGxlYXN0IDE5IGxpbmVzIGJ5IDgwIGNvbHVtbnMuXG4iKTsKKwkJZnByaW50ZihzdGRlcnIsIE5fKCJZb3VyIGRpc3BsYXkgaXMgdG9vIHNtYWxsIHRvIHJ1biBNZW51Y29uZmlnIVxuIikpOworCQlmcHJpbnRmKHN0ZGVyciwgTl8oIkl0IG11c3QgYmUgYXQgbGVhc3QgMTkgbGluZXMgYnkgODAgY29sdW1ucy5cbiIpKTsKIAkJZXhpdCgxKTsKIAl9CiAKQEAgLTUyNiw5ICs1MjgsOSBAQAogYWdhaW46CiAJY3ByaW50X2luaXQoKTsKIAljcHJpbnQoIi0tdGl0bGUiKTsKLQljcHJpbnQoIlNlYXJjaCBDb25maWd1cmF0aW9uIFBhcmFtZXRlciIpOworCWNwcmludChfKCJTZWFyY2ggQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXIiKSk7CiAJY3ByaW50KCItLWlucHV0Ym94Iik7Ci0JY3ByaW50KCJFbnRlciBLZXl3b3JkIik7CisJY3ByaW50KF8oIkVudGVyIEtleXdvcmQiKSk7CiAJY3ByaW50KCIxMCIpOwogCWNwcmludCgiNzUiKTsKIAljcHJpbnQoIiIpOwpAQCAtNTM5LDcgKzU0MSw3IEBACiAJY2FzZSAwOgogCQlicmVhazsKIAljYXNlIDE6Ci0JCXNob3dfaGVscHRleHQoIlNlYXJjaCBDb25maWd1cmF0aW9uIiwgc2VhcmNoX2hlbHApOworCQlzaG93X2hlbHB0ZXh0KF8oIlNlYXJjaCBDb25maWd1cmF0aW9uIiksIHNlYXJjaF9oZWxwKTsKIAkJZ290byBhZ2FpbjsKIAlkZWZhdWx0OgogCQlyZXR1cm47CkBAIC01NDgsNyArNTUwLDcgQEAKIAlzeW1fYXJyID0gc3ltX3JlX3NlYXJjaChpbnB1dF9idWYpOwogCXJlcyA9IGdldF9yZWxhdGlvbnNfc3RyKHN5bV9hcnIpOwogCWZyZWUoc3ltX2Fycik7Ci0Jc2hvd190ZXh0Ym94KCJTZWFyY2ggUmVzdWx0cyIsIHN0cl9nZXQoJnJlcyksIDAsIDApOworCXNob3dfdGV4dGJveChfKCJTZWFyY2ggUmVzdWx0cyIpLCBzdHJfZ2V0KCZyZXMpLCAwLCAwKTsKIAlzdHJfZnJlZSgmcmVzKTsKIH0KIApAQCAtNzIxLDkgKzcyMyw5IEBACiAJd2hpbGUgKDEpIHsKIAkJY3ByaW50X2luaXQoKTsKIAkJY3ByaW50KCItLXRpdGxlIik7Ci0JCWNwcmludCgiJXMiLCBwcm9tcHQgPyBwcm9tcHQgOiAiTWFpbiBNZW51Iik7CisJCWNwcmludCgiJXMiLCBwcm9tcHQgPyBwcm9tcHQgOiBfKCJNYWluIE1lbnUiKSk7CiAJCWNwcmludCgiLS1tZW51Iik7Ci0JCWNwcmludChtZW51X2luc3RydWN0aW9ucyk7CisJCWNwcmludChfKG1lbnVfaW5zdHJ1Y3Rpb25zKSk7CiAJCWNwcmludCgiJWQiLCByb3dzKTsKIAkJY3ByaW50KCIlZCIsIGNvbHMpOwogCQljcHJpbnQoIiVkIiwgcm93cyAtIDEwKTsKQEAgLTczNiw5ICs3MzgsOSBAQAogCQkJY3ByaW50KCI6Iik7CiAJCQljcHJpbnQoIi0tLSAiKTsKIAkJCWNwcmludCgiTCIpOwotCQkJY3ByaW50KCIgICAgTG9hZCBhbiBBbHRlcm5hdGUgQ29uZmlndXJhdGlvbiBGaWxlIik7CisJCQljcHJpbnQoXygiICAgIExvYWQgYW4gQWx0ZXJuYXRlIENvbmZpZ3VyYXRpb24gRmlsZSIpKTsKIAkJCWNwcmludCgiUyIpOwotCQkJY3ByaW50KCIgICAgU2F2ZSBDb25maWd1cmF0aW9uIHRvIGFuIEFsdGVybmF0ZSBGaWxlIik7CisJCQljcHJpbnQoXygiICAgIFNhdmUgQ29uZmlndXJhdGlvbiB0byBhbiBBbHRlcm5hdGUgRmlsZSIpKTsKIAkJfQogCQlzdGF0ID0gZXhlY19jb25mKCk7CiAJCWlmIChzdGF0IDwgMCkKQEAgLTc5Myw3ICs3OTUsNyBAQAogCQkJaWYgKHN5bSkKIAkJCQlzaG93X2hlbHAoc3VibWVudSk7CiAJCQllbHNlCi0JCQkJc2hvd19oZWxwdGV4dCgiUkVBRE1FIiwgbWNvbmZfcmVhZG1lKTsKKwkJCQlzaG93X2hlbHB0ZXh0KCJSRUFETUUiLCBfKG1jb25mX3JlYWRtZSkpOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKIAkJCWlmICh0eXBlID09ICd0JykgewpAQCAtODQ5LDcgKzg1MSw3IEBACiAJewogCQlpZiAoc3ltLT5uYW1lKSB7CiAJCQlzdHJfcHJpbnRmKCZoZWxwLCAiQ09ORklHXyVzOlxuXG4iLCBzeW0tPm5hbWUpOwotCQkJc3RyX2FwcGVuZCgmaGVscCwgc3ltLT5oZWxwKTsKKwkJCXN0cl9hcHBlbmQoJmhlbHAsIF8oc3ltLT5oZWxwKSk7CiAJCQlzdHJfYXBwZW5kKCZoZWxwLCAiXG4iKTsKIAkJfQogCX0gZWxzZSB7CkBAIC04ODYsOSArODg4LDkgQEAKIAl3aGlsZSAoMSkgewogCQljcHJpbnRfaW5pdCgpOwogCQljcHJpbnQoIi0tdGl0bGUiKTsKLQkJY3ByaW50KCIlcyIsIHByb21wdCA/IHByb21wdCA6ICJNYWluIE1lbnUiKTsKKwkJY3ByaW50KCIlcyIsIHByb21wdCA/IHByb21wdCA6IF8oIk1haW4gTWVudSIpKTsKIAkJY3ByaW50KCItLXJhZGlvbGlzdCIpOwotCQljcHJpbnQocmFkaW9saXN0X2luc3RydWN0aW9ucyk7CisJCWNwcmludChfKHJhZGlvbGlzdF9pbnN0cnVjdGlvbnMpKTsKIAkJY3ByaW50KCIxNSIpOwogCQljcHJpbnQoIjcwIik7CiAJCWNwcmludCgiNiIpOwpAQCAtOTM1LDE3ICs5MzcsMTcgQEAKIAl3aGlsZSAoMSkgewogCQljcHJpbnRfaW5pdCgpOwogCQljcHJpbnQoIi0tdGl0bGUiKTsKLQkJY3ByaW50KCIlcyIsIHByb21wdCA/IHByb21wdCA6ICJNYWluIE1lbnUiKTsKKwkJY3ByaW50KCIlcyIsIHByb21wdCA/IHByb21wdCA6IF8oIk1haW4gTWVudSIpKTsKIAkJY3ByaW50KCItLWlucHV0Ym94Iik7CiAJCXN3aXRjaCAoc3ltX2dldF90eXBlKG1lbnUtPnN5bSkpIHsKIAkJY2FzZSBTX0lOVDoKLQkJCWNwcmludChpbnB1dGJveF9pbnN0cnVjdGlvbnNfaW50KTsKKwkJCWNwcmludChfKGlucHV0Ym94X2luc3RydWN0aW9uc19pbnQpKTsKIAkJCWJyZWFrOwogCQljYXNlIFNfSEVYOgotCQkJY3ByaW50KGlucHV0Ym94X2luc3RydWN0aW9uc19oZXgpOworCQkJY3ByaW50KF8oaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2hleCkpOwogCQkJYnJlYWs7CiAJCWNhc2UgU19TVFJJTkc6Ci0JCQljcHJpbnQoaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZyk7CisJCQljcHJpbnQoXyhpbnB1dGJveF9pbnN0cnVjdGlvbnNfc3RyaW5nKSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIHBhbmljPyAqLzsKQEAgLTk1OCw3ICs5NjAsNyBAQAogCQljYXNlIDA6CiAJCQlpZiAoc3ltX3NldF9zdHJpbmdfdmFsdWUobWVudS0+c3ltLCBpbnB1dF9idWYpKQogCQkJCXJldHVybjsKLQkJCXNob3dfdGV4dGJveChOVUxMLCAiWW91IGhhdmUgbWFkZSBhbiBpbnZhbGlkIGVudHJ5LiIsIDUsIDQzKTsKKwkJCXNob3dfdGV4dGJveChOVUxMLCBfKCJZb3UgaGF2ZSBtYWRlIGFuIGludmFsaWQgZW50cnkuIiksIDUsIDQzKTsKIAkJCWJyZWFrOwogCQljYXNlIDE6CiAJCQlzaG93X2hlbHAobWVudSk7CkBAIC05ODcsMTAgKzk4OSwxMCBAQAogCQkJCXJldHVybjsKIAkJCWlmICghY29uZl9yZWFkKGlucHV0X2J1ZikpCiAJCQkJcmV0dXJuOwotCQkJc2hvd190ZXh0Ym94KE5VTEwsICJGaWxlIGRvZXMgbm90IGV4aXN0ISIsIDUsIDM4KTsKKwkJCXNob3dfdGV4dGJveChOVUxMLCBfKCJGaWxlIGRvZXMgbm90IGV4aXN0ISIpLCA1LCAzOCk7CiAJCQlicmVhazsKIAkJY2FzZSAxOgotCQkJc2hvd19oZWxwdGV4dCgiTG9hZCBBbHRlcm5hdGUgQ29uZmlndXJhdGlvbiIsIGxvYWRfY29uZmlnX2hlbHApOworCQkJc2hvd19oZWxwdGV4dChfKCJMb2FkIEFsdGVybmF0ZSBDb25maWd1cmF0aW9uIiksIGxvYWRfY29uZmlnX2hlbHApOwogCQkJYnJlYWs7CiAJCWNhc2UgMjU1OgogCQkJcmV0dXJuOwpAQCAtMTAxNiwxMCArMTAxOCwxMCBAQAogCQkJCXJldHVybjsKIAkJCWlmICghY29uZl93cml0ZShpbnB1dF9idWYpKQogCQkJCXJldHVybjsKLQkJCXNob3dfdGV4dGJveChOVUxMLCAiQ2FuJ3QgY3JlYXRlIGZpbGUhICBQcm9iYWJseSBhIG5vbmV4aXN0ZW50IGRpcmVjdG9yeS4iLCA1LCA2MCk7CisJCQlzaG93X3RleHRib3goTlVMTCwgXygiQ2FuJ3QgY3JlYXRlIGZpbGUhICBQcm9iYWJseSBhIG5vbmV4aXN0ZW50IGRpcmVjdG9yeS4iKSwgNSwgNjApOwogCQkJYnJlYWs7CiAJCWNhc2UgMToKLQkJCXNob3dfaGVscHRleHQoIlNhdmUgQWx0ZXJuYXRlIENvbmZpZ3VyYXRpb24iLCBzYXZlX2NvbmZpZ19oZWxwKTsKKwkJCXNob3dfaGVscHRleHQoXygiU2F2ZSBBbHRlcm5hdGUgQ29uZmlndXJhdGlvbiIpLCBzYXZlX2NvbmZpZ19oZWxwKTsKIAkJCWJyZWFrOwogCQljYXNlIDI1NToKIAkJCXJldHVybjsKQEAgLTEwNDAsMTIgKzEwNDIsMTYgQEAKIAljaGFyICptb2RlOwogCWludCBzdGF0OwogCisJc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKFBBQ0tBR0UsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihQQUNLQUdFKTsKKwogCWNvbmZfcGFyc2UoYXZbMV0pOwogCWNvbmZfcmVhZChOVUxMKTsKIAogCXN5bSA9IHN5bV9sb29rdXAoIktFUk5FTFJFTEVBU0UiLCAwKTsKIAlzeW1fY2FsY192YWx1ZShzeW0pOwotCXNwcmludGYobWVudV9iYWNrdGl0bGUsICJMaW51eCBLZXJuZWwgdiVzIENvbmZpZ3VyYXRpb24iLAorCXNwcmludGYobWVudV9iYWNrdGl0bGUsIF8oIkxpbnV4IEtlcm5lbCB2JXMgQ29uZmlndXJhdGlvbiIpLAogCQlzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsKIAogCW1vZGUgPSBnZXRlbnYoIk1FTlVDT05GSUdfTU9ERSIpOwpAQCAtMTA2Miw3ICsxMDY4LDcgQEAKIAlkbyB7CiAJCWNwcmludF9pbml0KCk7CiAJCWNwcmludCgiLS15ZXNubyIpOwotCQljcHJpbnQoIkRvIHlvdSB3aXNoIHRvIHNhdmUgeW91ciBuZXcga2VybmVsIGNvbmZpZ3VyYXRpb24/Iik7CisJCWNwcmludChfKCJEbyB5b3Ugd2lzaCB0byBzYXZlIHlvdXIgbmV3IGtlcm5lbCBjb25maWd1cmF0aW9uPyIpKTsKIAkJY3ByaW50KCI1Iik7CiAJCWNwcmludCgiNjAiKTsKIAkJc3RhdCA9IGV4ZWNfY29uZigpOwpAQCAtMTA3MCwyMCArMTA3NiwyMCBAQAogCiAJaWYgKHN0YXQgPT0gMCkgewogCQlpZiAoY29uZl93cml0ZShOVUxMKSkgewotCQkJZnByaW50ZihzdGRlcnIsICJcblxuIgorCQkJZnByaW50ZihzdGRlcnIsIF8oIlxuXG4iCiAJCQkJIkVycm9yIGR1cmluZyB3cml0aW5nIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi5cbiIKIAkJCQkiWW91ciBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdlcmUgTk9UIHNhdmVkLiIKLQkJCQkiXG5cbiIpOworCQkJCSJcblxuIikpOwogCQkJcmV0dXJuIDE7CiAJCX0KLQkJcHJpbnRmKCJcblxuIgorCQlwcmludGYoXygiXG5cbiIKIAkJCSIqKiogRW5kIG9mIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uLlxuIgogCQkJIioqKiBFeGVjdXRlICdtYWtlJyB0byBidWlsZCB0aGUga2VybmVsIG9yIHRyeSAnbWFrZSBoZWxwJy4iCi0JCQkiXG5cbiIpOworCQkJIlxuXG4iKSk7CiAJfSBlbHNlIHsKLQkJZnByaW50ZihzdGRlcnIsICJcblxuIgorCQlmcHJpbnRmKHN0ZGVyciwgXygiXG5cbiIKIAkJCSJZb3VyIGtlcm5lbCBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2VyZSBOT1Qgc2F2ZWQuIgotCQkJIlxuXG4iKTsKKwkJCSJcblxuIikpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL21lbnUuYyBiL3NjcmlwdHMva2NvbmZpZy9tZW51LmMKaW5kZXggMGMxMzE1Ni4uOGM1OWIyMSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL21lbnUuYworKysgYi9zY3JpcHRzL2tjb25maWcvbWVudS5jCkBAIC0zNjUsOSArMzY1LDkgQEAKIGNvbnN0IGNoYXIgKm1lbnVfZ2V0X3Byb21wdChzdHJ1Y3QgbWVudSAqbWVudSkKIHsKIAlpZiAobWVudS0+cHJvbXB0KQotCQlyZXR1cm4gbWVudS0+cHJvbXB0LT50ZXh0OworCQlyZXR1cm4gXyhtZW51LT5wcm9tcHQtPnRleHQpOwogCWVsc2UgaWYgKG1lbnUtPnN5bSkKLQkJcmV0dXJuIG1lbnUtPnN5bS0+bmFtZTsKKwkJcmV0dXJuIF8obWVudS0+c3ltLT5uYW1lKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3Fjb25mLmNjIGIvc2NyaXB0cy9rY29uZmlnL3Fjb25mLmNjCmluZGV4IDBjZGJmOWQuLjQ1OTBjZDMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9xY29uZi5jYworKysgYi9zY3JpcHRzL2tjb25maWcvcWNvbmYuY2MKQEAgLTI2LDggKzI2LDIzIEBACiAjaW5jbHVkZSAicWNvbmYubW9jIgogI2luY2x1ZGUgImltYWdlcy5jIgogCisjaWZkZWYgXworIyB1bmRlZiBfCisjIGRlZmluZSBfIHFnZXR0ZXh0CisjZW5kaWYKKwogc3RhdGljIFFBcHBsaWNhdGlvbiAqY29uZmlnQXBwOwogCitzdGF0aWMgaW5saW5lIFFTdHJpbmcgcWdldHRleHQoY29uc3QgY2hhciogc3RyKQoreworICByZXR1cm4gUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChnZXR0ZXh0KHN0cikpOworfQorCitzdGF0aWMgaW5saW5lIFFTdHJpbmcgcWdldHRleHQoY29uc3QgUVN0cmluZyYgc3RyKQoreworICByZXR1cm4gUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChnZXR0ZXh0KHN0ci5sYXRpbjEoKSkpOworfQorCiBDb25maWdTZXR0aW5nczo6Q29uZmlnU2V0dGluZ3MoKQogCTogc2hvd0FsbChmYWxzZSksIHNob3dOYW1lKGZhbHNlKSwgc2hvd1JhbmdlKGZhbHNlKSwgc2hvd0RhdGEoZmFsc2UpCiB7CkBAIC0xNzcsNyArMTkyLDcgQEAKIAogCXN5bSA9IG1lbnUtPnN5bTsKIAlwcm9wID0gbWVudS0+cHJvbXB0OwotCXByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwlwcm9tcHQgPSBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KG1lbnVfZ2V0X3Byb21wdChtZW51KSk7CiAKIAlpZiAocHJvcCkgc3dpdGNoIChwcm9wLT50eXBlKSB7CiAJY2FzZSBQX01FTlU6CkBAIC0yMDMsNyArMjE4LDcgQEAKIAlpZiAoIXN5bSkKIAkJZ290byBzZXRfcHJvbXB0OwogCi0Jc2V0VGV4dChuYW1lQ29sSWR4LCBzeW0tPm5hbWUpOworCXNldFRleHQobmFtZUNvbElkeCwgUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChzeW0tPm5hbWUpKTsKIAogCXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTIxMyw5ICsyMjgsOSBAQAogCiAJCWlmICghc3ltX2lzX2NoYW5nYWJsZShzeW0pICYmICFsaXN0LT5zaG93QWxsKSB7CiAJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCAwKTsKLQkJCXNldFRleHQobm9Db2xJZHgsIDApOwotCQkJc2V0VGV4dChtb2RDb2xJZHgsIDApOwotCQkJc2V0VGV4dCh5ZXNDb2xJZHgsIDApOworCQkJc2V0VGV4dChub0NvbElkeCwgUVN0cmluZzo6bnVsbCk7CisJCQlzZXRUZXh0KG1vZENvbElkeCwgUVN0cmluZzo6bnVsbCk7CisJCQlzZXRUZXh0KHllc0NvbElkeCwgUVN0cmluZzo6bnVsbCk7CiAJCQlicmVhazsKIAkJfQogCQlleHByID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOwpAQCAtMjU3LDYgKzI3Miw3IEBACiAJCWNvbnN0IGNoYXIqIGRhdGE7CiAKIAkJZGF0YSA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisKICNpZiBRVF9WRVJTSU9OID49IDMwMAogCQlpbnQgaSA9IGxpc3QtPm1hcElkeChkYXRhQ29sSWR4KTsKIAkJaWYgKGkgPj0gMCkKQEAgLTI2NCw5ICsyODAsOSBAQAogI2VuZGlmCiAJCXNldFRleHQoZGF0YUNvbElkeCwgZGF0YSk7CiAJCWlmICh0eXBlID09IFNfU1RSSU5HKQotCQkJcHJvbXB0LnNwcmludGYoIiVzOiAlcyIsIHByb21wdC5sYXRpbjEoKSwgZGF0YSk7CisJCQlwcm9tcHQgPSBRU3RyaW5nKCIlMTogJTIiKS5hcmcocHJvbXB0KS5hcmcoZGF0YSk7CiAJCWVsc2UKLQkJCXByb21wdC5zcHJpbnRmKCIoJXMpICVzIiwgZGF0YSwgcHJvbXB0LmxhdGluMSgpKTsKKwkJCXByb21wdCA9IFFTdHJpbmcoIiglMikgJTEiKS5hcmcocHJvbXB0KS5hcmcoZGF0YSk7CiAJCWJyZWFrOwogCX0KIAlpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSAmJiB2aXNpYmxlKQpAQCAtMzQzLDkgKzM1OSw5IEBACiB7CiAJaXRlbSA9IGk7CiAJaWYgKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKGl0ZW0tPm1lbnUtPnN5bSkpCi0JCXNldFRleHQoc3ltX2dldF9zdHJpbmdfdmFsdWUoaXRlbS0+bWVudS0+c3ltKSk7CisJCXNldFRleHQoUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChzeW1fZ2V0X3N0cmluZ192YWx1ZShpdGVtLT5tZW51LT5zeW0pKSk7CiAJZWxzZQotCQlzZXRUZXh0KDApOworCQlzZXRUZXh0KFFTdHJpbmc6Om51bGwpOwogCVBhcmVudDo6c2hvdygpOwogCXNldEZvY3VzKCk7CiB9CkBAIC05NjEsNyArOTc3LDcgQEAKIAlkZWxldGUgY29uZmlnU2V0dGluZ3M7CiB9CiAKLXN0YXRpYyBRU3RyaW5nIHByaW50X2ZpbHRlcihjb25zdCBjaGFyICpzdHIpCitzdGF0aWMgUVN0cmluZyBwcmludF9maWx0ZXIoY29uc3QgUVN0cmluZyAmc3RyKQogewogCVFSZWdFeHAgcmUoIls8PiZcIlxcbl0iKTsKIAlRU3RyaW5nIHJlcyA9IHN0cjsKQEAgLTk5NCw3ICsxMDEwLDcgQEAKIAogc3RhdGljIHZvaWQgZXhwcl9wcmludF9oZWxwKHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKnN0cikKIHsKLQkoKFFTdHJpbmcqKWRhdGEpLT5hcHBlbmQocHJpbnRfZmlsdGVyKHN0cikpOworCXJlaW50ZXJwcmV0X2Nhc3Q8UVN0cmluZyo+KGRhdGEpLT5hcHBlbmQocHJpbnRfZmlsdGVyKHN0cikpOwogfQogCiAvKgpAQCAtMTAwOSw3ICsxMDI1LDcgQEAKIAlpZiAoaXRlbSkKIAkJbWVudSA9ICgoQ29uZmlnSXRlbSopaXRlbSktPm1lbnU7CiAJaWYgKCFtZW51KSB7Ci0JCWhlbHBUZXh0LT5zZXRUZXh0KE5VTEwpOworCQloZWxwVGV4dC0+c2V0VGV4dChRU3RyaW5nOjpudWxsKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTAxOSwxNiArMTAzNSwxNiBAQAogCWlmIChzeW0pIHsKIAkJaWYgKG1lbnUtPnByb21wdCkgewogCQkJaGVhZCArPSAiPGJpZz48Yj4iOwotCQkJaGVhZCArPSBwcmludF9maWx0ZXIobWVudS0+cHJvbXB0LT50ZXh0KTsKKwkJCWhlYWQgKz0gcHJpbnRfZmlsdGVyKF8obWVudS0+cHJvbXB0LT50ZXh0KSk7CiAJCQloZWFkICs9ICI8L2I+PC9iaWc+IjsKIAkJCWlmIChzeW0tPm5hbWUpIHsKIAkJCQloZWFkICs9ICIgKCI7Ci0JCQkJaGVhZCArPSBwcmludF9maWx0ZXIoc3ltLT5uYW1lKTsKKwkJCQloZWFkICs9IHByaW50X2ZpbHRlcihfKHN5bS0+bmFtZSkpOwogCQkJCWhlYWQgKz0gIikiOwogCQkJfQogCQl9IGVsc2UgaWYgKHN5bS0+bmFtZSkgewogCQkJaGVhZCArPSAiPGJpZz48Yj4iOwotCQkJaGVhZCArPSBwcmludF9maWx0ZXIoc3ltLT5uYW1lKTsKKwkJCWhlYWQgKz0gcHJpbnRfZmlsdGVyKF8oc3ltLT5uYW1lKSk7CiAJCQloZWFkICs9ICI8L2I+PC9iaWc+IjsKIAkJfQogCQloZWFkICs9ICI8YnI+PGJyPiI7CkBAIC0xMDQ5LDcgKzEwNjUsNyBAQAogCQkJCWNhc2UgUF9QUk9NUFQ6CiAJCQkJY2FzZSBQX01FTlU6CiAJCQkJCWRlYnVnICs9ICJwcm9tcHQ6ICI7Ci0JCQkJCWRlYnVnICs9IHByaW50X2ZpbHRlcihwcm9wLT50ZXh0KTsKKwkJCQkJZGVidWcgKz0gcHJpbnRfZmlsdGVyKF8ocHJvcC0+dGV4dCkpOwogCQkJCQlkZWJ1ZyArPSAiPGJyPiI7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgUF9ERUZBVUxUOgpAQCAtMTA4OCwxMCArMTEwNCwxMCBAQAogCQkJZGVidWcgKz0gIjxicj4iOwogCQl9CiAKLQkJaGVscCA9IHByaW50X2ZpbHRlcihzeW0tPmhlbHApOworCQloZWxwID0gcHJpbnRfZmlsdGVyKF8oc3ltLT5oZWxwKSk7CiAJfSBlbHNlIGlmIChtZW51LT5wcm9tcHQpIHsKIAkJaGVhZCArPSAiPGJpZz48Yj4iOwotCQloZWFkICs9IHByaW50X2ZpbHRlcihtZW51LT5wcm9tcHQtPnRleHQpOworCQloZWFkICs9IHByaW50X2ZpbHRlcihfKG1lbnUtPnByb21wdC0+dGV4dCkpOwogCQloZWFkICs9ICI8L2I+PC9iaWc+PGJyPjxicj4iOwogCQlpZiAoc2hvd0RlYnVnKSB7CiAJCQlpZiAobWVudS0+cHJvbXB0LT52aXNpYmxlLmV4cHIpIHsKQEAgLTExMTEsNyArMTEyNyw3IEBACiAJUVN0cmluZyBzID0gUUZpbGVEaWFsb2c6OmdldE9wZW5GaWxlTmFtZSgiLmNvbmZpZyIsIE5VTEwsIHRoaXMpOwogCWlmIChzLmlzTnVsbCgpKQogCQlyZXR1cm47Ci0JaWYgKGNvbmZfcmVhZChzLmxhdGluMSgpKSkKKwlpZiAoY29uZl9yZWFkKFFGaWxlOjplbmNvZGVOYW1lKHMpKSkKIAkJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsICJVbmFibGUgdG8gbG9hZCBjb25maWd1cmF0aW9uISIpOwogCUNvbmZpZ1ZpZXc6OnVwZGF0ZUxpc3RBbGwoKTsKIH0KQEAgLTExMjcsNyArMTE0Myw3IEBACiAJUVN0cmluZyBzID0gUUZpbGVEaWFsb2c6OmdldFNhdmVGaWxlTmFtZSgiLmNvbmZpZyIsIE5VTEwsIHRoaXMpOwogCWlmIChzLmlzTnVsbCgpKQogCQlyZXR1cm47Ci0JaWYgKGNvbmZfd3JpdGUocy5sYXRpbjEoKSkpCisJaWYgKGNvbmZfd3JpdGUoUUZpbGU6OmVuY29kZU5hbWUocykpKQogCQlRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24odGhpcywgInFjb25mIiwgIlVuYWJsZSB0byBzYXZlIGNvbmZpZ3VyYXRpb24hIik7CiB9CiAKQEAgLTEzNzIsNiArMTM4OCw5IEBACiAJQ29uZmlnTWFpbldpbmRvdyogdjsKIAljb25zdCBjaGFyICpuYW1lOwogCisJYmluZHRleHRkb21haW4oUEFDS0FHRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKFBBQ0tBR0UpOworCiAjaWZuZGVmIExLQ19ESVJFQ1RfTElOSwogCWtjb25maWdfbG9hZCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tlcm5lbC1kb2MgYi9zY3JpcHRzL2tlcm5lbC1kb2MKaW5kZXggOGIxZGFiNi4uMDgzNWRjMiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9rZXJuZWwtZG9jCisrKyBiL3NjcmlwdHMva2VybmVsLWRvYwpAQCAtNTUzLDE1ICs1NTMsMjAgQEAKICAgICAjIHByaW50IG91dCBlYWNoIHNlY3Rpb24KICAgICAkbGluZXByZWZpeD0iICAgIjsKICAgICBmb3JlYWNoICRzZWN0aW9uIChAeyRhcmdzeydzZWN0aW9ubGlzdCd9fSkgewotCXByaW50ICI8cmVmc2VjdDE+XG4gPHRpdGxlPiRzZWN0aW9uPC90aXRsZT5cbiA8cGFyYT5cbiI7CisJcHJpbnQgIjxyZWZzZWN0MT5cbiI7CisJcHJpbnQgIjx0aXRsZT4kc2VjdGlvbjwvdGl0bGU+XG4iOwogCWlmICgkc2VjdGlvbiA9fiBtL0VYQU1QTEUvaSkgewotCSAgICBwcmludCAiPGV4YW1wbGU+PHBhcmE+XG4iOworCSAgICBwcmludCAiPGluZm9ybWFsZXhhbXBsZT48cHJvZ3JhbWxpc3Rpbmc+XG4iOworCX0gZWxzZSB7CisJICAgIHByaW50ICI8cGFyYT5cbiI7CiAJfQogCW91dHB1dF9oaWdobGlnaHQoJGFyZ3N7J3NlY3Rpb25zJ317JHNlY3Rpb259KTsKIAlpZiAoJHNlY3Rpb24gPX4gbS9FWEFNUExFL2kpIHsKLQkgICAgcHJpbnQgIjwvcGFyYT48L2V4YW1wbGU+XG4iOworCSAgICBwcmludCAiPC9wcm9ncmFtbGlzdGluZz48L2luZm9ybWFsZXhhbXBsZT5cbiI7CisJfSBlbHNlIHsKKwkgICAgcHJpbnQgIjwvcGFyYT5cbiI7CiAJfQotCXByaW50ICIgPC9wYXJhPlxuPC9yZWZzZWN0MT5cbiI7CisJcHJpbnQgIjwvcmVmc2VjdDE+XG4iOwogICAgIH0KIH0KIApAQCAtNTc2LDggKzU4MSwxNCBAQAogICAgICRpZCA9fiBzL1teQS1aYS16MC05XS8tL2c7CiAKICAgICBwcmludCAiPHJlZmVudHJ5PlxuIjsKKyAgICBwcmludCAiPHJlZmVudHJ5aW5mbz5cbiI7CisgICAgcHJpbnQgIiA8dGl0bGU+TElOVVg8L3RpdGxlPlxuIjsKKyAgICBwcmludCAiIDxwcm9kdWN0bmFtZT5LZXJuZWwgSGFja2VycyBNYW51YWw8L3Byb2R1Y3RuYW1lPlxuIjsKKyAgICBwcmludCAiIDxkYXRlPiRtYW5fZGF0ZTwvZGF0ZT5cbiI7CisgICAgcHJpbnQgIjwvcmVmZW50cnlpbmZvPlxuIjsKICAgICBwcmludCAiPHJlZm1ldGE+XG4iOwotICAgIHByaW50ICI8cmVmZW50cnl0aXRsZT48cGhyYXNlIGlkPVwiJGlkXCI+Ii4kYXJnc3snZnVuY3Rpb24nfS4iPC9waHJhc2U+PC9yZWZlbnRyeXRpdGxlPlxuIjsKKyAgICBwcmludCAiIDxyZWZlbnRyeXRpdGxlPjxwaHJhc2UgaWQ9XCIkaWRcIj4iLiRhcmdzeydmdW5jdGlvbid9LiI8L3BocmFzZT48L3JlZmVudHJ5dGl0bGU+XG4iOworICAgIHByaW50ICIgPG1hbnZvbG51bT45PC9tYW52b2xudW0+XG4iOwogICAgIHByaW50ICI8L3JlZm1ldGE+XG4iOwogICAgIHByaW50ICI8cmVmbmFtZWRpdj5cbiI7CiAgICAgcHJpbnQgIiA8cmVmbmFtZT4iLiRhcmdzeydmdW5jdGlvbid9LiI8L3JlZm5hbWU+XG4iOwpAQCAtNjA3LDcgKzYxOCw3IEBACiAJICAgIH0KIAl9CiAgICAgfSBlbHNlIHsKLQlwcmludCAiICA8dm9pZD5cbiI7CisJcHJpbnQgIiAgPHZvaWQvPlxuIjsKICAgICB9CiAgICAgcHJpbnQgIiAgPC9mdW5jcHJvdG90eXBlPjwvZnVuY3N5bm9wc2lzPlxuIjsKICAgICBwcmludCAiPC9yZWZzeW5vcHNpc2Rpdj5cbiI7CkBAIC02NDYsOCArNjU3LDE0IEBACiAgICAgJGlkID1+IHMvW15BLVphLXowLTldLy0vZzsKIAogICAgIHByaW50ICI8cmVmZW50cnk+XG4iOworICAgIHByaW50ICI8cmVmZW50cnlpbmZvPlxuIjsKKyAgICBwcmludCAiIDx0aXRsZT5MSU5VWDwvdGl0bGU+XG4iOworICAgIHByaW50ICIgPHByb2R1Y3RuYW1lPktlcm5lbCBIYWNrZXJzIE1hbnVhbDwvcHJvZHVjdG5hbWU+XG4iOworICAgIHByaW50ICIgPGRhdGU+JG1hbl9kYXRlPC9kYXRlPlxuIjsKKyAgICBwcmludCAiPC9yZWZlbnRyeWluZm8+XG4iOwogICAgIHByaW50ICI8cmVmbWV0YT5cbiI7Ci0gICAgcHJpbnQgIjxyZWZlbnRyeXRpdGxlPjxwaHJhc2UgaWQ9XCIkaWRcIj4iLiRhcmdzeyd0eXBlJ30uIiAiLiRhcmdzeydzdHJ1Y3QnfS4iPC9waHJhc2U+PC9yZWZlbnRyeXRpdGxlPlxuIjsKKyAgICBwcmludCAiIDxyZWZlbnRyeXRpdGxlPjxwaHJhc2UgaWQ9XCIkaWRcIj4iLiRhcmdzeyd0eXBlJ30uIiAiLiRhcmdzeydzdHJ1Y3QnfS4iPC9waHJhc2U+PC9yZWZlbnRyeXRpdGxlPlxuIjsKKyAgICBwcmludCAiIDxtYW52b2xudW0+OTwvbWFudm9sbnVtPlxuIjsKICAgICBwcmludCAiPC9yZWZtZXRhPlxuIjsKICAgICBwcmludCAiPHJlZm5hbWVkaXY+XG4iOwogICAgIHByaW50ICIgPHJlZm5hbWU+Ii4kYXJnc3sndHlwZSd9LiIgIi4kYXJnc3snc3RydWN0J30uIjwvcmVmbmFtZT5cbiI7CkBAIC03MjQsOCArNzQxLDE0IEBACiAgICAgJGlkID1+IHMvW15BLVphLXowLTldLy0vZzsKIAogICAgIHByaW50ICI8cmVmZW50cnk+XG4iOworICAgIHByaW50ICI8cmVmZW50cnlpbmZvPlxuIjsKKyAgICBwcmludCAiIDx0aXRsZT5MSU5VWDwvdGl0bGU+XG4iOworICAgIHByaW50ICIgPHByb2R1Y3RuYW1lPktlcm5lbCBIYWNrZXJzIE1hbnVhbDwvcHJvZHVjdG5hbWU+XG4iOworICAgIHByaW50ICIgPGRhdGU+JG1hbl9kYXRlPC9kYXRlPlxuIjsKKyAgICBwcmludCAiPC9yZWZlbnRyeWluZm8+XG4iOwogICAgIHByaW50ICI8cmVmbWV0YT5cbiI7Ci0gICAgcHJpbnQgIjxyZWZlbnRyeXRpdGxlPjxwaHJhc2UgaWQ9XCIkaWRcIj5lbnVtICIuJGFyZ3N7J2VudW0nfS4iPC9waHJhc2U+PC9yZWZlbnRyeXRpdGxlPlxuIjsKKyAgICBwcmludCAiIDxyZWZlbnRyeXRpdGxlPjxwaHJhc2UgaWQ9XCIkaWRcIj5lbnVtICIuJGFyZ3N7J2VudW0nfS4iPC9waHJhc2U+PC9yZWZlbnRyeXRpdGxlPlxuIjsKKyAgICBwcmludCAiIDxtYW52b2xudW0+OTwvbWFudm9sbnVtPlxuIjsKICAgICBwcmludCAiPC9yZWZtZXRhPlxuIjsKICAgICBwcmludCAiPHJlZm5hbWVkaXY+XG4iOwogICAgIHByaW50ICIgPHJlZm5hbWU+ZW51bSAiLiRhcmdzeydlbnVtJ30uIjwvcmVmbmFtZT5cbiI7CkBAIC03ODQsOCArODA3LDE0IEBACiAgICAgJGlkID1+IHMvW15BLVphLXowLTldLy0vZzsKIAogICAgIHByaW50ICI8cmVmZW50cnk+XG4iOworICAgIHByaW50ICI8cmVmZW50cnlpbmZvPlxuIjsKKyAgICBwcmludCAiIDx0aXRsZT5MSU5VWDwvdGl0bGU+XG4iOworICAgIHByaW50ICIgPHByb2R1Y3RuYW1lPktlcm5lbCBIYWNrZXJzIE1hbnVhbDwvcHJvZHVjdG5hbWU+XG4iOworICAgIHByaW50ICIgPGRhdGU+JG1hbl9kYXRlPC9kYXRlPlxuIjsKKyAgICBwcmludCAiPC9yZWZlbnRyeWluZm8+XG4iOwogICAgIHByaW50ICI8cmVmbWV0YT5cbiI7Ci0gICAgcHJpbnQgIjxyZWZlbnRyeXRpdGxlPjxwaHJhc2UgaWQ9XCIkaWRcIj50eXBlZGVmICIuJGFyZ3N7J3R5cGVkZWYnfS4iPC9waHJhc2U+PC9yZWZlbnRyeXRpdGxlPlxuIjsKKyAgICBwcmludCAiIDxyZWZlbnRyeXRpdGxlPjxwaHJhc2UgaWQ9XCIkaWRcIj50eXBlZGVmICIuJGFyZ3N7J3R5cGVkZWYnfS4iPC9waHJhc2U+PC9yZWZlbnRyeXRpdGxlPlxuIjsKKyAgICBwcmludCAiIDxtYW52b2xudW0+OTwvbWFudm9sbnVtPlxuIjsKICAgICBwcmludCAiPC9yZWZtZXRhPlxuIjsKICAgICBwcmludCAiPHJlZm5hbWVkaXY+XG4iOwogICAgIHByaW50ICIgPHJlZm5hbWU+dHlwZWRlZiAiLiRhcmdzeyd0eXBlZGVmJ30uIjwvcmVmbmFtZT5cbiI7CkBAIC0xNDY1LDYgKzE0OTQsOCBAQAogCiAgICAgJHByb3RvdHlwZSA9fiBzL15zdGF0aWMgKy8vOwogICAgICRwcm90b3R5cGUgPX4gcy9eZXh0ZXJuICsvLzsKKyAgICAkcHJvdG90eXBlID1+IHMvXmZhc3RjYWxsICsvLzsKKyAgICAkcHJvdG90eXBlID1+IHMvXmFzbWxpbmthZ2UgKy8vOwogICAgICRwcm90b3R5cGUgPX4gcy9eaW5saW5lICsvLzsKICAgICAkcHJvdG90eXBlID1+IHMvXl9faW5saW5lX18gKy8vOwogICAgICRwcm90b3R5cGUgPX4gcy9eI2RlZmluZSArLy87ICNhayBhZGRlZApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlbWFuIGIvc2NyaXB0cy9tYWtlbWFuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkYjNhZjY0Li4wMDAwMDAwCi0tLSBhL3NjcmlwdHMvbWFrZW1hbgorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0jIS91c3IvYmluL3BlcmwKLQotdXNlIHN0cmljdDsKLQotIyMgQ29weXJpZ2h0IChDKSBNaWNoYWVsIFN0aWxsIChtaWthbEBzdGlsbGhxLmNvbSkKLSMjIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTAotIyMKLSMjIEEgc2NyaXB0IHRvIG1ha2Ugb3IgaW5zdGFsbCB0aGUgbWFucGFnZXMgZXh0cmFjdGVkIGJ5IHNwbGl0LW1hbgotIyMKLSMjIEFyZ3VlbWVudHM6ICQxIC0tIHRoZSB3b3JkICJjb252ZXJ0IiBvciAiaW5zdGFsbCIKLSMjICAgICAgICAgICAgICQyIC0tIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgU0dNTCBmaWxlcyBmb3IgdGhlIG1hbnBhZ2VzCi0jIyAgICAgICAgICAgICAkMyAtLSB0aGUgZmlsZW5hbWUgd2hpY2ggY29udGFpbmVkIHRoZSBzZ21sZG9jIG91dHB1dAotIyMgICAgICAgICAgICAgICAgICAgICAoSSBuZWVkIHRoaXMgc28gSSBrbm93IHdoaWNoIG1hbnBhZ2VzIHRvIGNvbnZlcnQpCi0KLW15KCRMSVNUSU5HLCAkR0VORVJBVEVELCAkSU5QVVQsICRPVVRQVVQsICRmcm9udCwgJG1vZGUsICRmaWxlbmFtZSwgJHRtcGRpcik7Ci0KLWlmKCRBUkdWWzBdIGVxICIiKXsKLSAgZGllICJVc2FnZTogbWFrZW1hbiBbY29udmVydCB8IGluc3RhbGxdIDxkaXI+IDxmaWxlPlxuIjsKLX0KLQotaWYoICEgLWQgIiRBUkdWWzFdIiApewotICBkaWUgIk91dHB1dCBkaXJlY3RvcnkgXCIkQVJHVlsxXVwiIGRvZXMgbm90IGV4aXN0XG4iOwotfQotCi1pZigkRU5WeyJUTVBESVIifSBuZSAiIil7Ci0gICR0bXBkaXIgPSAkRU5WeyJUTVBESVIifTsKLX0KLWVsc2V7Ci0gICR0bXBkaXIgPSAiL3RtcCI7Ci19Ci0KLWlmKCRBUkdWWzBdIGVxICJjb252ZXJ0Iil7Ci0gIG9wZW4gTElTVElORywgImdyZXAgXCI8cmVmZW50cnl0aXRsZT5cIiAkQVJHVlsyXSB8IjsKLSAgd2hpbGUoPExJU1RJTkc+KXsKLSAgICBzLzxcLy4qJC8vOwotICAgIHMvXi4qPi8vOwotICAgIHMvXC5zZ21sLy87Ci0gICAgcy9zdHJ1Y3QgLy87Ci0gICAgcy90eXBlZGVmIC8vOwotCi0gICAgY2hvbXA7Ci0gICAgJGZpbGVuYW1lID0gJF87Ci0gICAgcHJpbnQgIlByb2Nlc3NpbmcgJGZpbGVuYW1lXG4iOwotCi0gICAgIyBPcGVuIHRoZSBpbnB1dCBmaWxlIHRvIGV4dHJhY3QgdGhlIGZyb250IG1hdHRlciwgZ2VuZXJhdGUgdGhlIG1hbiBwYWdlLAotICAgICMgYW5kIG9wZW4gaXQsIGFuZCB0aGUgcmVhcnJhbmdlIGV2ZXJ5dGhpbmcgdW50aWwgaXQgaXMgaGFwcHkKLSAgICBvcGVuIElOUFVULCAiPCAkQVJHVlsxXS8kZmlsZW5hbWUuc2dtbCI7Ci0gICAgJGZyb250ID0gIiI7Ci0gICAgJG1vZGUgPSAwOwotCi0gICAgIyBUaGUgbW9kZXMgdXNlZCBoZXJlIGFyZToKLSAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IDAKLSAgICAjIDwhLS0gQkVHSU5GUk9OVFRBRyAtLT4KLSAgICAjIDwhLS0gPGJvb2tpbmZvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IDEKLSAgICAjIDwhLS0gICA8bGVnYWxub3RpY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IDIKLSAgICAjIDwhLS0gICAgIC4uLkdQTCBvciB3aGF0ZXZlci4uLgotICAgICMgPCEtLSAgIDwvbGVnYWxub3RpY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gNAotICAgICMgPCEtLSA8L2Jvb2tpbmZvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gMwotICAgICMgPCEtLSBFTkRGUk9OVFRBRyAtLT4KLSAgICAjCi0gICAgIyAuLi5kb2NvLi4uCi0KLSAgICAjIEkga25vdyB0aGF0IHNvbWUgb2YgdGhlIGlmIHN0YXRlbWVudHMgaW4gdGhpcyB3aGlsZSBsb29wIGFyZSBpbiBhIGZ1bm55Ci0gICAgIyBvcmRlciwgYnV0IHRoYXQgaXMgZGVsaWJlcmF0ZS4uLgotICAgIHdoaWxlKDxJTlBVVD4pewotICAgICAgaWYoJG1vZGUgPiAwKXsKLQlzLzwhLS0gLy87Ci0Jcy8gLS0+Ly87Ci0Jcy88ZG9jaW5mbz4vL2k7Ci0JczxcL2RvY2luZm8+Ly9pOwotCXMvXlsgXHRdKi8vaTsKLSAgICAgIH0KLQotICAgICAgaWYoJG1vZGUgPT0gMil7Ci0JaWYoLzxwYXJhPi9pKXsKLQl9Ci0JZWxzaWYoLzxcL3BhcmE+L2kpewotCSAgJGZyb250ID0gIiRmcm9udC5cXFwiIFxuIjsKLQl9Ci0JZWxzaWYoLzxcL2xlZ2Fsbm90aWNlPi9pKXsKLQkgICRtb2RlID0gNDsKLQl9Ci0JZWxzaWYoL15bIFx0XSokLyl7Ci0JfQotCWVsc2V7Ci0JICAkZnJvbnQgPSAiJGZyb250LlxcXCIgICAgICRfIjsKLQl9Ci0gICAgICB9Ci0KLSAgICAgIGlmKCRtb2RlID09IDEpewotCWlmKC88dGl0bGU+KC4qKTxcL3RpdGxlPi9pKXsKLQkgICRmcm9udCA9ICIkZnJvbnQuXFxcIiBUaGlzIGRvY3VtZW50YXRpb24gd2FzIGdlbmVyYXRlZCBmcm9tIHRoZSBib29rIHRpdGxlZCBcIiQxXCIsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UuXG4uXFxcIiBcbiI7Ci0JfQotCWVsc2lmKC88bGVnYWxub3RpY2U+L2kpewotCSAgJGZyb250ID0gIiRmcm9udC5cXFwiIFRoaXMgZG9jdW1lbnRhdGlvbiBjb21lcyB3aXRoIHRoZSBmb2xsb3dpbmcgbGVnYWwgbm90aWNlOlxuLlxcXCIgXG4iOwotCSAgJG1vZGUgPSAyOwotCX0KLQotCWVsc2lmKC88YXV0aG9yPi9pKXsKLQkgICRmcm9udCA9ICIkZnJvbnQuXFxcIiBEb2N1bWVudGF0aW9uIGJ5OiAiOwotCX0KLQllbHNpZigvPGZpcnN0bmFtZT4oLiopPFwvZmlyc3RuYW1lPi9pKXsKLQkgICRmcm9udCA9ICIkZnJvbnQkMSAiOwotCX0KLQllbHNpZigvPHN1cm5hbWU+KC4qKTxcL3N1cm5hbWU+L2kpewotCSAgJGZyb250ID0gIiRmcm9udCQxICI7Ci0JfQotCWVsc2lmKC88ZW1haWw+KC4qKTxcL2VtYWlsPi9pKXsKLQkgICRmcm9udCA9ICIkZnJvbnQoJDEpIjsKLQl9Ci0JZWxzaWYoL1wvYXV0aG9yPi9pKXsKLQkgICRmcm9udCA9ICIkZnJvbnRcbiI7Ci0JfQotCi0JZWxzaWYoLzxjb3B5cmlnaHQ+L2kpewotCSAgJGZyb250ID0gIiRmcm9udC5cXFwiIERvY3VtZW50YXRpb24gY29weXJpZ2h0OiAiOwotCX0KLQllbHNpZigvPGhvbGRlcj4oLiopPFwvaG9sZGVyPi9pKXsKLQkgICRmcm9udCA9ICIkZnJvbnQkMSAiOwotCX0KLQllbHNpZigvPHllYXI+KC4qKTxcL3llYXI+L2kpewotCSAgJGZyb250ID0gIiRmcm9udCQxICI7Ci0JfQotCWVsc2lmKC9cL2NvcHlyaWdodD4vaSl7Ci0JICAkZnJvbnQgPSAiJGZyb250XG4iOwotCX0KLQotCWVsc2lmKC9eWyBcdF0qJC8KLQkgICAgICB8fCAvPGFmZmlsaWF0aW9uPi9pCi0JICAgICAgfHwgLzxcL2FmZmlsaWF0aW9uPi9pCi0JICAgICAgfHwgLzxhZGRyZXNzPi9pCi0JICAgICAgfHwgLzxcL2FkZHJlc3M+L2kKLQkgICAgICB8fCAvPGF1dGhvcmdyb3VwPi9pCi0JICAgICAgfHwgLzxcL2F1dGhvcmdyb3VwPi9pCi0JICAgICAgfHwgLzxcL2xlZ2Fsbm90aWNlPi9pCi0gICAgICAgICAgICAgIHx8IC88ZGF0ZT4vaQotICAgICAgICAgICAgICB8fCAvPFwvZGF0ZT4vaQotICAgICAgICAgICAgICB8fCAvPGVkaXRpb24+L2kKLSAgICAgICAgICAgICAgfHwgLzxcL2VkaXRpb24+L2kKLQkgICAgICB8fCAvPHB1YmRhdGU+L2kKLQkgICAgICB8fCAvPFwvcHViZGF0ZT4vaSl7Ci0JfQotCWVsc2V7Ci0JICBwcmludCAiVW5rbm93biB0YWcgaW4gbWFucGFnZSBjb252ZXJzaW9uOiAkXyI7Ci0JICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmKCRtb2RlID09IDApewotCWlmKC88Ym9va2luZm8+L2kpewotCSAgJG1vZGUgPSAxOwotCX0KLSAgICAgIH0KLQotICAgICAgaWYoJG1vZGUgPT0gNCl7Ci0JaWYoLzxcL2Jvb2tpbmZvPi9pKXsKLQkgICRtb2RlID0gMzsKLQl9Ci0gICAgICB9Ci0gICAgfQotICAgIGNsb3NlIElOUFVUOwotCi0gICAgc3lzdGVtKCJjZCAkQVJHVlsxXTsgZG9jYm9vazJtYW4gJGZpbGVuYW1lLnNnbWw7IG12ICRmaWxlbmFtZS45ICR0bXBkaXIvJCQuOVxuIik7Ci0gICAgb3BlbiBHRU5FUkFURUQsICI8ICR0bXBkaXIvJCQuOSI7Ci0gICAgb3BlbiBPVVRQVVQsICI+ICRBUkdWWzFdLyRmaWxlbmFtZS45IjsKLQotICAgIHByaW50IE9VVFBVVCAiJGZyb250IjsKLSAgICBwcmludCBPVVRQVVQgIi5cXFwiIEZvciBjb21tZW50cyBvbiB0aGUgZm9ybWF0dGluZyBvZiB0aGlzIG1hbnBhZ2UsIHBsZWFzZSBjb250YWN0IE1pY2hhZWwgU3RpbGwgPG1pa2FsXEBzdGlsbGhxLmNvbT5cblxuIjsKLSAgICB3aGlsZSg8R0VORVJBVEVEPil7Ci0gICAgICBwcmludCBPVVRQVVQgIiRfIjsKLSAgICB9Ci0gICAgY2xvc2UgT1VUUFVUOwotICAgIGNsb3NlIEdFTkVSQVRFRDsKLQotICAgIHN5c3RlbSgiZ3ppcCAtZiAkQVJHVlsxXS8kZmlsZW5hbWUuOVxuIik7Ci0gICAgdW5saW5rKCIkdG1wZGlyLyQkLjkiKTsKLSAgfQotfQotZWxzaWYoJEFSR1ZbMF0gZXEgImluc3RhbGwiKXsKLSAgc3lzdGVtKCJta2RpciAtcCAvdXNyL2xvY2FsL21hbi9tYW45LzsgaW5zdGFsbCAkQVJHVlsxXS8qLjkuZ3ogL3Vzci9sb2NhbC9tYW4vbWFuOS8iKTsKLX0KLWVsc2V7Ci0gIGRpZSAiVXNhZ2U6IG1ha2VtYW4gW2NvbnZlcnQgfCBpbnN0YWxsXSA8ZGlyPiA8ZmlsZT5cbiI7Ci19Ci0KLXByaW50ICJEb25lXG4iOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCmluZGV4IGQ1NGI1MmQuLjMyMTk3ZWYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYworKysgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKQEAgLTQ3LDMyICs0NywzMSBAQAogICAgICAgICAgICAgICAgIHNwcmludGYoc3RyICsgc3RybGVuKHN0ciksICIqIik7ICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUoMCkKIAotLyogTG9va3MgbGlrZSAidXNiOnZOcE5kbE5kaE5kY05kc2NOZHBOaWNOaXNjTmlwTiIgKi8KLXN0YXRpYyBpbnQgZG9fdXNiX2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkJc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkLCBjaGFyICphbGlhcykKKy8qIFVTQiBpcyBzcGVjaWFsIGJlY2F1c2UgdGhlIGJjZERldmljZSBjYW4gYmUgbWF0Y2hlZCBhZ2FpbnN0IGEgbnVtZXJpYyByYW5nZSAqLworLyogTG9va3MgbGlrZSAidXNiOnZOcE5kTmRjTmRzY05kcE5pY05pc2NOaXBOIiAqLworc3RhdGljIHZvaWQgZG9fdXNiX2VudHJ5KHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwKKwkJCSB1bnNpZ25lZCBpbnQgYmNkRGV2aWNlX2luaXRpYWwsIGludCBiY2REZXZpY2VfaW5pdGlhbF9kaWdpdHMsCisJCQkgdW5zaWduZWQgY2hhciByYW5nZV9sbywgdW5zaWduZWQgY2hhciByYW5nZV9oaSwKKwkJCSBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JaWQtPm1hdGNoX2ZsYWdzID0gVE9fTkFUSVZFKGlkLT5tYXRjaF9mbGFncyk7Ci0JaWQtPmlkVmVuZG9yID0gVE9fTkFUSVZFKGlkLT5pZFZlbmRvcik7Ci0JaWQtPmlkUHJvZHVjdCA9IFRPX05BVElWRShpZC0+aWRQcm9kdWN0KTsKLQlpZC0+YmNkRGV2aWNlX2xvID0gVE9fTkFUSVZFKGlkLT5iY2REZXZpY2VfbG8pOwotCWlkLT5iY2REZXZpY2VfaGkgPSBUT19OQVRJVkUoaWQtPmJjZERldmljZV9oaSk7Ci0KLQkvKgotCSAqIFNvbWUgbW9kdWxlcyAodmlzb3IpIGhhdmUgZW1wdHkgc2xvdHMgYXMgcGxhY2Vob2xkZXIgZm9yCi0JICogcnVuLXRpbWUgc3BlY2lmaWNhdGlvbiB0aGF0IHJlc3VsdHMgaW4gY2F0Y2gtYWxsIGFsaWFzCi0JICovCi0JaWYgKCEoaWQtPmlkVmVuZG9yIHwgaWQtPmJEZXZpY2VDbGFzcyB8IGlkLT5iSW50ZXJmYWNlQ2xhc3MpKQotCQlyZXR1cm4gMTsKLQorCWNoYXIgYWxpYXNbNTAwXTsKIAlzdHJjcHkoYWxpYXMsICJ1c2I6Iik7CiAJQUREKGFsaWFzLCAidiIsIGlkLT5tYXRjaF9mbGFncyZVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUiwKIAkgICAgaWQtPmlkVmVuZG9yKTsKIAlBREQoYWxpYXMsICJwIiwgaWQtPm1hdGNoX2ZsYWdzJlVTQl9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVCwKIAkgICAgaWQtPmlkUHJvZHVjdCk7Ci0JQUREKGFsaWFzLCAiZGwiLCBpZC0+bWF0Y2hfZmxhZ3MmVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfTE8sCi0JICAgIGlkLT5iY2REZXZpY2VfbG8pOwotCUFERChhbGlhcywgImRoIiwgaWQtPm1hdGNoX2ZsYWdzJlVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0hJLAotCSAgICBpZC0+YmNkRGV2aWNlX2hpKTsKKworCXN0cmNhdChhbGlhcywgImQiKTsKKwlpZiAoYmNkRGV2aWNlX2luaXRpYWxfZGlnaXRzKQorCQlzcHJpbnRmKGFsaWFzICsgc3RybGVuKGFsaWFzKSwgIiUwKlgiLAorCQkJYmNkRGV2aWNlX2luaXRpYWxfZGlnaXRzLCBiY2REZXZpY2VfaW5pdGlhbCk7CisJaWYgKHJhbmdlX2xvID09IHJhbmdlX2hpKQorCQlzcHJpbnRmKGFsaWFzICsgc3RybGVuKGFsaWFzKSwgIiV1IiwgcmFuZ2VfbG8pOworCWVsc2UgaWYgKHJhbmdlX2xvID4gMCB8fCByYW5nZV9oaSA8IDkpCisJCXNwcmludGYoYWxpYXMgKyBzdHJsZW4oYWxpYXMpLCAiWyV1LSV1XSIsIHJhbmdlX2xvLCByYW5nZV9oaSk7CisJaWYgKGJjZERldmljZV9pbml0aWFsX2RpZ2l0cyA8IChzaXplb2YoaWQtPmJjZERldmljZV9sbykgKiAyIC0gMSkpCisJCXN0cmNhdChhbGlhcywgIioiKTsKKwogCUFERChhbGlhcywgImRjIiwgaWQtPm1hdGNoX2ZsYWdzJlVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0NMQVNTLAogCSAgICBpZC0+YkRldmljZUNsYXNzKTsKIAlBREQoYWxpYXMsICJkc2MiLApAQCAtOTAsNyArODksNzMgQEAKIAlBREQoYWxpYXMsICJpcCIsCiAJICAgIGlkLT5tYXRjaF9mbGFncyZVU0JfREVWSUNFX0lEX01BVENIX0lOVF9QUk9UT0NPTCwKIAkgICAgaWQtPmJJbnRlcmZhY2VQcm90b2NvbCk7Ci0JcmV0dXJuIDE7CisKKwkvKiBBbHdheXMgZW5kIGluIGEgd2lsZGNhcmQsIGZvciBmdXR1cmUgZXh0ZW5zaW9uICovCisJaWYgKGFsaWFzW3N0cmxlbihhbGlhcyktMV0gIT0gJyonKQorCQlzdHJjYXQoYWxpYXMsICIqIik7CisJYnVmX3ByaW50ZigmbW9kLT5kZXZfdGFibGVfYnVmLAorCQkgICAiTU9EVUxFX0FMSUFTKFwiJXNcIik7XG4iLCBhbGlhcyk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX3VzYl9lbnRyeV9tdWx0aShzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsIHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGV2bG8sIGRldmhpOworCXVuc2lnbmVkIGNoYXIgY2hpLCBjbG87CisJaW50IG5kaWdpdHM7CisKKwlpZC0+bWF0Y2hfZmxhZ3MgPSBUT19OQVRJVkUoaWQtPm1hdGNoX2ZsYWdzKTsKKwlpZC0+aWRWZW5kb3IgPSBUT19OQVRJVkUoaWQtPmlkVmVuZG9yKTsKKwlpZC0+aWRQcm9kdWN0ID0gVE9fTkFUSVZFKGlkLT5pZFByb2R1Y3QpOworCisJZGV2bG8gPSBpZC0+bWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9MTyA/CisJCVRPX05BVElWRShpZC0+YmNkRGV2aWNlX2xvKSA6IDB4MFU7CisJZGV2aGkgPSBpZC0+bWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9ISSA/CisJCVRPX05BVElWRShpZC0+YmNkRGV2aWNlX2hpKSA6IH4weDBVOworCisJLyoKKwkgKiBTb21lIG1vZHVsZXMgKHZpc29yKSBoYXZlIGVtcHR5IHNsb3RzIGFzIHBsYWNlaG9sZGVyIGZvcgorCSAqIHJ1bi10aW1lIHNwZWNpZmljYXRpb24gdGhhdCByZXN1bHRzIGluIGNhdGNoLWFsbCBhbGlhcworCSAqLworCWlmICghKGlkLT5pZFZlbmRvciB8IGlkLT5iRGV2aWNlQ2xhc3MgfCBpZC0+YkludGVyZmFjZUNsYXNzKSkKKwkJcmV0dXJuOworCisJLyogQ29udmVydCBudW1lcmljIGJjZERldmljZSByYW5nZSBpbnRvIGZubWF0Y2gtYWJsZSBwYXR0ZXJuKHMpICovCisJZm9yIChuZGlnaXRzID0gc2l6ZW9mKGlkLT5iY2REZXZpY2VfbG8pICogMiAtIDE7IGRldmxvIDw9IGRldmhpOyBuZGlnaXRzLS0pIHsKKwkJY2xvID0gZGV2bG8gJiAweGY7CisJCWNoaSA9IGRldmhpICYgMHhmOworCQlpZiAoY2hpID4gOSkJLyogaXQncyBiY2Qgbm90IGhleCAqLworCQkJY2hpID0gOTsKKwkJZGV2bG8gPj49IDQ7CisJCWRldmhpID4+PSA0OworCisJCWlmIChkZXZsbyA9PSBkZXZoaSB8fCAhbmRpZ2l0cykgeworCQkJZG9fdXNiX2VudHJ5KGlkLCBkZXZsbywgbmRpZ2l0cywgY2xvLCBjaGksIG1vZCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChjbG8gPiAwKQorCQkJZG9fdXNiX2VudHJ5KGlkLCBkZXZsbysrLCBuZGlnaXRzLCBjbG8sIDksIG1vZCk7CisKKwkJaWYgKGNoaSA8IDkpCisJCQlkb191c2JfZW50cnkoaWQsIGRldmhpLS0sIG5kaWdpdHMsIDAsIGNoaSwgbW9kKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRvX3VzYl90YWJsZSh2b2lkICpzeW12YWwsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSBzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJdW5zaWduZWQgaW50IGk7CisJY29uc3QgdW5zaWduZWQgbG9uZyBpZF9zaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2lkKTsKKworCWlmIChzaXplICUgaWRfc2l6ZSB8fCBzaXplIDwgaWRfc2l6ZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIioqKiBXYXJuaW5nOiAlcyBpZHMgJWx1IGJhZCBzaXplICIKKwkJCSIoZWFjaCBvbiAlbHUpXG4iLCBtb2QtPm5hbWUsIHNpemUsIGlkX3NpemUpOworCX0KKwkvKiBMZWF2ZSBsYXN0IG9uZTogaXQncyB0aGUgdGVybWluYXRvci4gKi8KKwlzaXplIC09IGlkX3NpemU7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBpZF9zaXplKQorCQlkb191c2JfZW50cnlfbXVsdGkoc3ltdmFsICsgaSwgbW9kKTsKIH0KIAogLyogTG9va3MgbGlrZTogaWVlZTEzOTQ6dmVuTm1vTnNwTnZlck4gKi8KQEAgLTI4MCw4ICszNDUsOCBAQAogCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBwY2lfZGV2aWNlX2lkKSwKIAkJCSBkb19wY2lfZW50cnksIG1vZCk7CiAJZWxzZSBpZiAoc3ltX2lzKHN5bW5hbWUsICJfX21vZF91c2JfZGV2aWNlX3RhYmxlIikpCi0JCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLCBzaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfaWQpLAotCQkJIGRvX3VzYl9lbnRyeSwgbW9kKTsKKwkJLyogc3BlY2lhbCBjYXNlIHRvIGhhbmRsZSBiY2REZXZpY2UgcmFuZ2VzICovCisJCWRvX3VzYl90YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwgbW9kKTsKIAllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX2llZWUxMzk0X2RldmljZV90YWJsZSIpKQogCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQpLAogCQkJIGRvX2llZWUxMzk0X2VudHJ5LCBtb2QpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYXRjaC1rZXJuZWwgYi9zY3JpcHRzL3BhdGNoLWtlcm5lbAppbmRleCA0M2FmMDEwLi5mMmQ0N2NhIDEwMDc1NQotLS0gYS9zY3JpcHRzL3BhdGNoLWtlcm5lbAorKysgYi9zY3JpcHRzL3BhdGNoLWtlcm5lbApAQCAtNDYsNiArNDYsMTkgQEAKICMgZml4IHNvbWUgd2hpdGVzcGFjZSBkYW1hZ2U7CiAjIGJlIHNtYXJ0ZXIgYWJvdXQgc3RvcHBpbmcgd2hlbiBjdXJyZW50IHZlcnNpb24gaXMgbGFyZ2VyIHRoYW4gcmVxdWVzdGVkOwogIwlSYW5keSBEdW5sYXAgPHJkZHVubGFwQG9zZGwub3JnPiwgMjAwNC1BVUctMTguCisjCisjIEFkZCBiZXR0ZXIgc3VwcG9ydCBmb3IgKG5vbi1pbmNyZW1lbnRhbCkgMi42LngueSBwYXRjaGVzOworIyBJZiBhbiBlbmRpbmcgdmVyc2lvbiBudW1iZXIgaWYgbm90IHNwZWNpZmllZCwgdGhlIHNjcmlwdCBhdXRvbWF0aWNhbGx5CisjIGluY3JlbWVudHMgdGhlIFNVQkxFVkVMICh4IGluIDIuNi54LnkpIHVudGlsIG5vIG1vcmUgcGF0Y2ggZmlsZXMgYXJlIGZvdW5kOworIyBob3dldmVyLCBFWFRSQVZFUlNJT04gKHkgaW4gMi42LngueSkgaXMgbmV2ZXIgYXV0b21hdGljYWxseSBpbmNyZW1lbnRlZAorIyBidXQgbXVzdCBiZSBzcGVjaWZpZWQgZnVsbHkuCisjCisjIHBhdGNoLWtlcm5lbCBkb2VzIG5vdCBub3JtYWxseSBzdXBwb3J0IHJldmVyc2UgcGF0Y2hpbmcsIGJ1dCBkb2VzIHNvIHdoZW4KKyMgYXBwbHlpbmcgRVhUUkFWRVJTSU9OICh4LnkpIHBhdGNoZXMsIHNvIHRoYXQgbW92aW5nIGZyb20gMi42LjExLnkgdG8gMi42LjExLnoKKyMgaXMgZWFzeSBhbmQgaGFuZGxlZCBieSB0aGUgc2NyaXB0IChyZXZlcnNlIDIuNi4xMS55IGFuZCBhcHBseSAyLjYuMTEueikuCisjCVJhbmR5IER1bmxhcCA8cmRkdW5sYXBAb3NkbC5vcmc+LCAyMDA1LUFQUi0wOC4KKworUE5BTUU9cGF0Y2gta2VybmVsCiAKICMgU2V0IGRpcmVjdG9yaWVzIGZyb20gYXJndW1lbnRzLCBvciB1c2UgZGVmYXVsdHMuCiBzb3VyY2VkaXI9JHsxLS91c3Ivc3JjL2xpbnV4fQpAQCAtNTQsNyArNjcsNyBAQAogCiBpZiBbICIkMSIgPT0gLWggLW8gIiQxIiA9PSAtLWhlbHAgLW8gISAtciAiJHNvdXJjZWRpci9NYWtlZmlsZSIgXTsgdGhlbgogY2F0IDw8IFVTQUdFCi11c2FnZTogcGF0Y2gta2VybmVsIFstaF0gWyBzb3VyY2VkaXIgWyBwYXRjaGRpciBbIHN0b3B2ZXJzaW9uIF0gWyAtYWN4eCBdIF0gXQordXNhZ2U6ICRQTkFNRSBbLWhdIFsgc291cmNlZGlyIFsgcGF0Y2hkaXIgWyBzdG9wdmVyc2lvbiBdIFsgLWFjeHggXSBdIF0KICAgc291cmNlIGRpcmVjdG9yeSBkZWZhdWx0cyB0byAvdXNyL3NyYy9saW51eCwKICAgcGF0Y2ggZGlyZWN0b3J5IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwKICAgc3RvcHZlcnNpb24gZGVmYXVsdHMgdG8gPGFsbCBpbiBwYXRjaGRpcj4uCkBAIC03Myw2ICs4NiwxOSBAQAogZG9uZQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBhcmcxIGlzIGZpbGVuYW1lCitub0ZpbGUgKCkgeworCWVjaG8gImNhbm5vdCBmaW5kIHBhdGNoIGZpbGU6ICR7cGF0Y2h9IgorCWV4aXQgMQorfQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYmFja3dhcmRzICgpIHsKKwllY2hvICIkUE5BTUUgZG9lcyBub3Qgc3VwcG9ydCByZXZlcnNlIHBhdGNoaW5nIgorCWV4aXQgMQorfQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBGaW5kIGEgZmlsZSwgZmlyc3QgcGFyYW1ldGVyIGlzIGJhc2VuYW1lIG9mIGZpbGUKICMgaXQgdHJpZXMgbWFueSBjb21wcmVzc2lvbiBtZWNoYW5pc21zIGFuZCBzZXRzIHZhcmlhYmxlcyB0byBzYXkgaG93IHRvIGdldCBpdAogZmluZEZpbGUgKCkgewpAQCAtMTMzLDYgKzE1OSwyOCBAQAogICByZXR1cm4gMDsKIH0KIAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgYXJnMSBpcyBwYXRjaCBmaWxlbmFtZQorcmV2ZXJzZVBhdGNoICgpIHsKKwllY2hvIC1uICJSZXZlcnNpbmcgJDEgKCR7bmFtZX0pIC4uLiAiCisJaWYgJHVuY29tcCAke3BhdGNoZGlyfS8iJDEiJHtleHR9IHwgcGF0Y2ggLXAxIC1ScyAtTiAtRSAtZCAkc291cmNlZGlyCisJdGhlbgorCQllY2hvICJkb25lLiIKKwllbHNlCisJCWVjaG8gImZhaWxlZC4gIENsZWFuIGl0IHVwLiIKKwkJZXhpdCAxCisJZmkKKwlpZiBbICJgZmluZCAkc291cmNlZGlyLyAnKCcgLW5hbWUgJyoucmVqJyAtbyAtbmFtZSAnLioucmVqJyAnKScgLXByaW50YCIgXQorCXRoZW4KKwkJZWNobyAiQWJvcnRpbmcuICBSZWplY3QgZmlsZXMgZm91bmQuIgorCQlyZXR1cm4gMQorCWZpCisJIyBSZW1vdmUgYmFja3VwIGZpbGVzCisJZmluZCAkc291cmNlZGlyLyAnKCcgLW5hbWUgJyoub3JpZycgLW8gLW5hbWUgJy4qLm9yaWcnICcpJyAtZXhlYyBybSAtZiB7fSBcOworCisJcmV0dXJuIDAKK30KKwogIyBzZXQgY3VycmVudCBWRVJTSU9OLCBQQVRDSExFVkVMLCBTVUJMRVZFTCwgRVhUUkFWRVJTSU9OCiBUTVBGSUxFPWBta3RlbXAgLnRtcHZlci5YWFhYWFhgIHx8IHsgZWNobyAiY2Fubm90IG1ha2UgdGVtcCBmaWxlIiA7IGV4aXQgMTsgfQogZ3JlcCAtRSAiXihWRVJTSU9OfFBBVENITEVWRUx8U1VCTEVWRUx8RVhUUkFWRVJTSU9OKSIgJHNvdXJjZWRpci9NYWtlZmlsZSA+ICRUTVBGSUxFCkBAIC0xNjAsNTMgKzIwOCw1NyBAQAogCQlFWFRSQVZFUj0kRVhUUkFWRVJTSU9OCiAJZmkKIAlFWFRSQVZFUj0ke0VYVFJBVkVSJSVbWzpwdW5jdDpdXSp9Ci0JI2VjaG8gInBhdGNoLWtlcm5lbDogY2hhbmdpbmcgRVhUUkFWRVJTSU9OIGZyb20gJEVYVFJBVkVSU0lPTiB0byAkRVhUUkFWRVIiCisJI2VjaG8gIiRQTkFNRTogY2hhbmdpbmcgRVhUUkFWRVJTSU9OIGZyb20gJEVYVFJBVkVSU0lPTiB0byAkRVhUUkFWRVIiCiBmaQogCiAjZWNobyAic3RvcHZlcnM9JHN0b3B2ZXJzIgogaWYgWyAkc3RvcHZlcnMgIT0gImRlZmF1bHQiIF07IHRoZW4KIAlTVE9QU1VCTEVWRUw9YGVjaG8gJHN0b3B2ZXJzIHwgY3V0IC1kLiAtZjNgCiAJU1RPUEVYVFJBPWBlY2hvICRzdG9wdmVycyB8IGN1dCAtZC4gLWY0YAotCSNlY2hvICJTVE9QU1VCTEVWRUw9JFNUT1BTVUJMRVZFTCwgU1RPUEVYVFJBPSRTVE9QRVhUUkEiCisJI2VjaG8gIiNfX19TVE9QU1VCTEVWRUw9LyRTVE9QU1VCTEVWRUwvLCBTVE9QRVhUUkE9LyRTVE9QRVhUUkEvIgogZWxzZQogCVNUT1BTVUJMRVZFTD05OTk5CiAJU1RPUEVYVFJBPTk5OTkKIGZpCiAKKyMgVGhpcyBhbGwgYXNzdW1lcyBhIDIuNi54Wy55XSBrZXJuZWwgdHJlZS4KKyMgRG9uJ3QgYWxsb3cgYmFja3dhcmRzL3JldmVyc2UgcGF0Y2hpbmcuCitpZiBbICRTVE9QU1VCTEVWRUwgLWx0ICRTVUJMRVZFTCBdOyB0aGVuCisJYmFja3dhcmRzCitmaQorCitpZiBbIHgkRVhUUkFWRVIgIT0gIngiIF07IHRoZW4KKwlDVVJSRU5URlVMTFZFUlNJT049IiRWRVJTSU9OLiRQQVRDSExFVkVMLiRTVUJMRVZFTC4kRVhUUkFWRVIiCitlbHNlCisJQ1VSUkVOVEZVTExWRVJTSU9OPSIkVkVSU0lPTi4kUEFUQ0hMRVZFTC4kU1VCTEVWRUwiCitmaQorCitpZiBbIHgkRVhUUkFWRVIgIT0gIngiIF07IHRoZW4KKwllY2hvICJiYWNraW5nIHVwIHRvOiAkVkVSU0lPTi4kUEFUQ0hMRVZFTC4kU1VCTEVWRUwiCisJcGF0Y2g9InBhdGNoLSR7Q1VSUkVOVEZVTExWRVJTSU9OfSIKKwlmaW5kRmlsZSAkcGF0Y2hkaXIvJHtwYXRjaH0gfHwgbm9GaWxlICR7cGF0Y2h9CisJcmV2ZXJzZVBhdGNoICR7cGF0Y2h9IHx8IGV4aXQgMQorZmkKKworIyBub3cgY3VycmVudCBpcyAyLjYueCwgd2l0aCBubyBFWFRSQSBhcHBsaWVkLAorIyBzbyB1cGRhdGUgdG8gdGFyZ2V0IFNVQkxFVkVMICgyLjYuU1VCTEVWRUwpCisjIGFuZCB0aGVuIHRvIHRhcmdldCBFWFRSQVZFUiAoMi42LlNVQi5FWFRSQVZFUikgaWYgcmVxdWVzdGVkLgorIyBJZiBub3QgZW5kaW5nIHN1YmxldmVsIGlzIHNwZWNpZmllZCwgaXQgaXMgaW5jcmVtZW50ZWQgdW50aWwKKyMgbm8gZnVydGhlciBzdWJsZXZlbHMgYXJlIGZvdW5kLgorCitpZiBbICRTVE9QU1VCTEVWRUwgLWd0ICRTVUJMRVZFTCBdOyB0aGVuCiB3aGlsZSA6CQkJCSMgaW5jcmVtZW50aW5nIFNVQkxFVkVMIChzIGluIHYucC5zKQogZG8KLSAgICBpZiBbIHgkRVhUUkFWRVIgIT0gIngiIF07IHRoZW4KLQlDVVJSRU5URlVMTFZFUlNJT049IiRWRVJTSU9OLiRQQVRDSExFVkVMLiRTVUJMRVZFTC4kRVhUUkFWRVIiCi0gICAgZWxzZQotCUNVUlJFTlRGVUxMVkVSU0lPTj0iJFZFUlNJT04uJFBBVENITEVWRUwuJFNVQkxFVkVMIgotICAgIGZpCi0KKyAgICBDVVJSRU5URlVMTFZFUlNJT049IiRWRVJTSU9OLiRQQVRDSExFVkVMLiRTVUJMRVZFTCIKKyAgICBFWFRSQVZFUj0KICAgICBpZiBbICRzdG9wdmVycyA9PSAkQ1VSUkVOVEZVTExWRVJTSU9OIF07IHRoZW4KICAgICAgICAgZWNobyAiU3RvcHBpbmcgYXQgJENVUlJFTlRGVUxMVkVSU0lPTiBiYXNlIGFzIHJlcXVlc3RlZC4iCiAgICAgICAgIGJyZWFrCiAgICAgZmkKIAotICAgIHdoaWxlIDoJCQkjIGluY3JlbWVudGluZyBFWFRSQVZFUiAoeCBpbiB2LnAucy54KQotICAgIGRvCi0JRVhUUkFWRVI9JCgoRVhUUkFWRVIgKyAxKSkKLQlGVUxMVkVSU0lPTj0iJFZFUlNJT04uJFBBVENITEVWRUwuJFNVQkxFVkVMLiRFWFRSQVZFUiIKLQkjZWNobyAiLi4uIHRyeWluZyAkRlVMTFZFUlNJT04gLi4uIgotCi0JcGF0Y2g9cGF0Y2gtJEZVTExWRVJTSU9OCi0KLQkjIFNlZSBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIGZpbmQgZXh0ZW5zaW9uCi0JZmluZEZpbGUgJHBhdGNoZGlyLyR7cGF0Y2h9IHx8IGJyZWFrCi0KLQkjIEFwcGx5IHRoZSBwYXRjaCBhbmQgY2hlY2sgYWxsIGlzIE9LCi0JYXBwbHlQYXRjaCAkcGF0Y2ggfHwgYnJlYWsKLQotCWNvbnRpbnVlIDIKLSAgICBkb25lCi0KLSAgICBFWFRSQVZFUj0KICAgICBTVUJMRVZFTD0kKChTVUJMRVZFTCArIDEpKQogICAgIEZVTExWRVJTSU9OPSIkVkVSU0lPTi4kUEFUQ0hMRVZFTC4kU1VCTEVWRUwiCi0gICAgI2VjaG8gIl9fXyB0cnlpbmcgJEZVTExWRVJTSU9OIF9fXyIKKyAgICAjZWNobyAiI19fXyB0cnlpbmcgJEZVTExWRVJTSU9OIF9fXyIKIAogICAgIGlmIFsgJCgoU1VCTEVWRUwpKSAtZ3QgJCgoU1RPUFNVQkxFVkVMKSkgXTsgdGhlbgogCWVjaG8gIlN0b3BwaW5nIHNpbmNlIHN1YmxldmVsICgkU1VCTEVWRUwpIGlzIGJleW9uZCBzdG9wLXN1YmxldmVsICgkU1RPUFNVQkxFVkVMKSIKQEAgLTIxNCwxNCArMjY2LDMzIEBACiAgICAgZmkKIAogICAgIHBhdGNoPXBhdGNoLSRGVUxMVkVSU0lPTgotCiAgICAgIyBTZWUgaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBmaW5kIGV4dGVuc2lvbgotICAgIGZpbmRGaWxlICRwYXRjaGRpci8ke3BhdGNofSB8fCBicmVhaworICAgIGZpbmRGaWxlICRwYXRjaGRpci8ke3BhdGNofSB8fCBub0ZpbGUgJHtwYXRjaH0KIAogICAgICMgQXBwbHkgdGhlIHBhdGNoIGFuZCBjaGVjayBhbGwgaXMgT0sKICAgICBhcHBseVBhdGNoICRwYXRjaCB8fCBicmVhawogZG9uZQotI2VjaG8gImJhc2UgYWxsIGRvbmUiCisjZWNobyAiI19fX3N1YmxldmVsIGFsbCBkb25lIgorZmkKKworIyBUaGVyZSBpcyBubyBpbmNyZW1lbnRhbCBzZWFyY2hpbmcgZm9yIGV4dHJhdmVyc2lvbi4uLgoraWYgWyAiJFNUT1BFWFRSQSIgIT0gIiIgXTsgdGhlbgord2hpbGUgOgkJCQkjIGp1c3QgdG8gYWxsb3cgYnJlYWsKK2RvCisjIGFwcGx5IFNUT1BFWFRSQSBkaXJlY3RseSAobm90IGluY3JlbWVudGFsbHkpICh4IGluIHYucC5zLngpCisJRlVMTFZFUlNJT049IiRWRVJTSU9OLiRQQVRDSExFVkVMLiRTVUJMRVZFTC4kU1RPUEVYVFJBIgorCSNlY2hvICIjLi4uIHRyeWluZyAkRlVMTFZFUlNJT04gLi4uIgorCXBhdGNoPXBhdGNoLSRGVUxMVkVSU0lPTgorCisJIyBTZWUgaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBmaW5kIGV4dGVuc2lvbgorCWZpbmRGaWxlICRwYXRjaGRpci8ke3BhdGNofSB8fCBub0ZpbGUgJHtwYXRjaH0KKworCSMgQXBwbHkgdGhlIHBhdGNoIGFuZCBjaGVjayBhbGwgaXMgT0sKKwlhcHBseVBhdGNoICRwYXRjaCB8fCBicmVhaworCSNlY2hvICIjX19fZXh0cmF2ZXIgYWxsIGRvbmUiCisJYnJlYWsKK2RvbmUKK2ZpCiAKIGlmIFsgeCRnb3RhYyAhPSB4IF07IHRoZW4KICAgIyBPdXQgZ3JlYXQgdXNlciB3YW50cyB0aGUgLWFjIHBhdGNoZXMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvc3BsaXQtbWFuIGIvc2NyaXB0cy9zcGxpdC1tYW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAzODk3ZmUuLjAwMDAwMDAKLS0tIGEvc2NyaXB0cy9zcGxpdC1tYW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0KLXVzZSBzdHJpY3Q7Ci0KLSMjIENvcHlyaWdodCAoQykgTWljaGFlbCBTdGlsbCAobWlrYWxAc3RpbGxocS5jb20pCi0jIyBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwKLSMjCi0jIyBIb29uIHRocm91Z2ggdGhlIHNwZWNpZmllZCBEb2NCb29rIFNHTUwgZmlsZSwgYW5kIHNwbGl0IG91dCB0aGUKLSMjIG1hbiBwYWdlcy4gVGhlc2UgY2FuIHRoZW4gYmUgcHJvY2Vzc2VkIGludG8gZ3JvZmYgZm9ybWF0LCBhbmQKLSMjIGluc3RhbGxlZCBpZiBkZXNpcmVkLi4uCi0jIwotIyMgQXJndWVtZW50czogJDEgLS0gdGhlIG5hbWUgb2YgdGhlIHNnbWwgZmlsZQotIyMgICAgICAgICAgICAgJDIgLS0gdGhlIGRpcmVjdG9yeSB0byBwdXQgdGhlIGdlbmVyYXRlZCBTR01MIGZpbGVzIGluCi0jIyAgICAgICAgICAgICAkMyAtLSBrZXJuZWwgdmVyc2lvbgotCi1teSgkU0dNTCwgJFJFRiwgJGZyb250LCAkcmVmZGF0YSwgJG1vZGUsICRmaWxlbmFtZSk7Ci0KLWlmKCgkQVJHVlswXSBlcSAiIikgfHwgKCRBUkdWWzFdIGVxICIiKSB8fCAoJEFSR1ZbMl0gZXEgIiIpKXsKLSAgZGllICJVc2FnZTogc3BsaXQtbWFuIDxzZ21sIGZpbGU+IDxvdXRwdXQgZGlyPiA8a2VybmVsIHZlcnNpb24+XG4iOwotfQotCi1vcGVuIFNHTUwsICI8ICRBUkdWWzBdIiBvciBkaWUgIkNvdWxkIG5vdCBvcGVuIGlucHV0IGZpbGUgXCIkQVJHVlswXVwiXG4iOwotaWYoICEgLWQgIiRBUkdWWzFdIiApewotICBkaWUgIk91dHB1dCBkaXJlY3RvcnkgXCIkQVJHVlsxXVwiIGRvZXMgbm90IGV4aXN0XG4iOwotfQotCi0jIFBvc3NpYmxlIG1vZGVzOgotIyAgIDA6IExvb2tpbmcgZm9yIGlucHV0IEkgY2FyZSBhYm91dAotIyAgIDE6IEluc2lkZSBib29rIGZyb250IG1hdHRlcgotIyAgIDI6IEluc2lkZSBhIHJlZmVudHJ5Ci0jICAgMzogSW5zaWRlIGEgcmVmZW50cnksIGFuZCB3ZSBrbm93IHRoZSBmaWxlbmFtZQotCi0kbW9kZSA9IDA7Ci0kcmVmZGF0YSA9ICIiOwotJGZyb250ID0gIiI7Ci13aGlsZSg8U0dNTD4pewotICAjIFN0YXJ0aW5nIG1vZGVzCi0gIGlmKC88Ym9va2luZm8+LyB8fCAvPGRvY2luZm8+Lyl7Ci0gICAgJG1vZGUgPSAxOwotICB9Ci0gIGVsc2lmKC88cmVmZW50cnk+Lyl7Ci0gICAgJG1vZGUgPSAyOwotICB9Ci0gIGVsc2lmKC88cmVmZW50cnl0aXRsZT48cGhyYXNlW14+XSo+KFtePF0qKTwuKiQvKXsKLSAgICAkbW9kZSA9IDM7Ci0gICAgJGZpbGVuYW1lID0gJDE7Ci0KLSAgICAkZmlsZW5hbWUgPX4gcy9zdHJ1Y3QgLy87Ci0gICAgJGZpbGVuYW1lID1+IHMvdHlwZWRlZiAvLzsKLQotICAgIHByaW50ICJGb3VuZCBtYW5wYWdlIGZvciAkZmlsZW5hbWVcbiI7Ci0gICAgb3BlbiBSRUYsICI+ICRBUkdWWzFdLyRmaWxlbmFtZS5zZ21sIiBvcgotICAgICAgZGllICJDb3VsZG4ndCBvcGVuIG91dHB1dCBmaWxlIFwiJEFSR1ZbMV0vJGZpbGVuYW1lLnNnbWxcIjogJCFcbiI7Ci0gICAgcHJpbnQgUkVGIDw8RU9GOwotPCFET0NUWVBFIHJlZmVudHJ5IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFY0LjEvL0VOIj4KLQotPCEtLSBCRUdJTkZST05UVEFHOiBUaGUgZm9sbG93aW5nIGlzIGZyb250IG1hdHRlciBmb3IgdGhlIHBhcmVudCBib29rIC0tPgotJGZyb250Ci08IS0tIEVOREZST05UVEFHOiBFbmQgZnJvbnQgbWF0dGVyIC0tPgotCi0kcmVmZGF0YQotRU9GCi0gICAgJHJlZmRhdGEgPSAiIjsKLSAgfQotCi0gICMgRXh0cmFjdGlvbgotICBpZigkbW9kZSA9PSAxKXsKLSAgICBjaG9tcCAkXzsKLSAgICAkZnJvbnQgPSAiJGZyb250PCEtLSAkXyAtLT5cbiI7Ci0gIH0KLSAgZWxzaWYoJG1vZGUgPT0gMil7Ci0gICAgJHJlZmRhdGEgPSAiJHJlZmRhdGEkXyI7Ci0gIH0KLSAgZWxzaWYoJG1vZGUgPT0gMyl7Ci0gICAgIyBUaGVyZSBhcmUgc29tZSBmaXh1cHMgd2hpY2ggbmVlZCB0byBiZSBhcHBsaWVkCi0gICAgaWYoLzxcL3JlZm1ldGE+Lyl7Ci0gICAgICBwcmludCBSRUYgIjxtYW52b2xudW0+OTwvbWFudm9sbnVtPlxuIjsKLSAgICB9Ci0gICAgaWYoLzxcL3JlZmVudHJ5Pi8pewotICAgICAgcHJpbnQgUkVGIDw8RU9GOwotPHJlZnNlY3QxPjx0aXRsZT5BYm91dCB0aGlzIGRvY3VtZW50PC90aXRsZT4KLTxwYXJhPgotVGhpcyBkb2N1bWVudGF0aW9uIHdhcyBnZW5lcmF0ZWQgd2l0aCBrZXJuZWwgdmVyc2lvbiAkQVJHVlsyXS4KLTwvcGFyYT4KLTwvcmVmc2VjdDE+Ci1FT0YKLSAgICB9Ci0KLSAgICAjIEZvciBzb21lIHJlYXNvbiwgd2UgdGl0bGUgdGhlIHN5bm9wc2lzIHR3aWNlIGluIHRoZSBtYWluIERvY0Jvb2sKLSAgICBpZighIC88dGl0bGU+U3lub3BzaXM8XC90aXRsZT4vKXsKLSAgICAgIGlmKC88cmVmZW50cnl0aXRsZT4vKXsKLQlzL3N0cnVjdCAvLzsKLQlzL3R5cGVkZWYgLy87Ci0gICAgICB9Ci0KLSAgICAgIHByaW50IFJFRiAiJF8iOwotICAgIH0KLSAgfQotCi0gICMgRW5kaW5nIG1vZGVzCi0gIGlmKC88XC9ib29raW5mbz4vIHx8IC88XC9kb2NpbmZvPi8pewotICAgICRtb2RlID0gMDsKLSAgfQotICBlbHNpZigvPFwvcmVmZW50cnk+Lyl7Ci0gICAgJG1vZGUgPSAwOwotICAgIGNsb3NlIFJFRjsKLSAgfQotfQotCi0jIEFuZCBtYWtlIHN1cmUgd2UgZG9uJ3QgcHJvY2VzcyB0aGlzIHVubmVzc2VzYXJpbHkKLSRBUkdWWzBdID1+IHMvXC5zZ21sLy45LzsKLWB0b3VjaCAkQVJHVlswXWA7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggMmFlN2QzYy4uYWFlMWU3OSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMjg1NSw4ICsyODU1LDcgQEAKIAogCW5leHRoZHIgPSBpcDYtPm5leHRoZHI7CiAJb2Zmc2V0ICs9IHNpemVvZihfaXB2NmgpOwotCW9mZnNldCA9IGlwdjZfc2tpcF9leHRoZHIoc2tiLCBvZmZzZXQsICZuZXh0aGRyLAotCQkJCSAgc2tiLT50YWlsIC0gc2tiLT5oZWFkIC0gb2Zmc2V0KTsKKwlvZmZzZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgb2Zmc2V0LCAmbmV4dGhkcik7CiAJaWYgKG9mZnNldCA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC0zNjY4LDcgKzM2NjcsNyBAQAogfQogCiBzdGF0aWMgaW50IGlwY19oYXNfcGVybShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjX3Blcm1zLAotCQkJdTE2IHNjbGFzcywgdTMyIHBlcm1zKQorCQkJdTMyIHBlcm1zKQogewogCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYzsKIAlzdHJ1Y3QgaXBjX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKQEAgLTM2ODAsNyArMzY3OSw3IEBACiAJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CiAJYWQudS5pcGNfaWQgPSBpcGNfcGVybXMtPmtleTsKIAotCXJldHVybiBhdmNfaGFzX3Blcm0odHNlYy0+c2lkLCBpc2VjLT5zaWQsIHNjbGFzcywgcGVybXMsICZhZCk7CisJcmV0dXJuIGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIGlzZWMtPnNpZCwgaXNlYy0+c2NsYXNzLCBwZXJtcywgJmFkKTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X21zZ19tc2dfYWxsb2Nfc2VjdXJpdHkoc3RydWN0IG1zZ19tc2cgKm1zZykKQEAgLTM3NjUsNyArMzc2NCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWVyciA9IGlwY19oYXNfcGVybSgmbXNxLT5xX3Blcm0sIFNFQ0NMQVNTX01TR1EsIHBlcm1zKTsKKwllcnIgPSBpcGNfaGFzX3Blcm0oJm1zcS0+cV9wZXJtLCBwZXJtcyk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzkxNyw3ICszOTE2LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZXJyID0gaXBjX2hhc19wZXJtKCZzaHAtPnNobV9wZXJtLCBTRUNDTEFTU19TSE0sIHBlcm1zKTsKKwllcnIgPSBpcGNfaGFzX3Blcm0oJnNocC0+c2htX3Blcm0sIHBlcm1zKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zOTM2LDcgKzM5MzUsNyBAQAogCWVsc2UKIAkJcGVybXMgPSBTSE1fX1JFQUQgfCBTSE1fX1dSSVRFOwogCi0JcmV0dXJuIGlwY19oYXNfcGVybSgmc2hwLT5zaG1fcGVybSwgU0VDQ0xBU1NfU0hNLCBwZXJtcyk7CisJcmV0dXJuIGlwY19oYXNfcGVybSgmc2hwLT5zaG1fcGVybSwgcGVybXMpOwogfQogCiAvKiBTZW1hcGhvcmUgc2VjdXJpdHkgb3BlcmF0aW9ucyAqLwpAQCAtNDAyNSw3ICs0MDI0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZXJyID0gaXBjX2hhc19wZXJtKCZzbWEtPnNlbV9wZXJtLCBTRUNDTEFTU19TRU0sIHBlcm1zKTsKKwllcnIgPSBpcGNfaGFzX3Blcm0oJnNtYS0+c2VtX3Blcm0sIHBlcm1zKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC00MDM5LDE4ICs0MDM4LDEzIEBACiAJZWxzZQogCQlwZXJtcyA9IFNFTV9fUkVBRDsKIAotCXJldHVybiBpcGNfaGFzX3Blcm0oJnNtYS0+c2VtX3Blcm0sIFNFQ0NMQVNTX1NFTSwgcGVybXMpOworCXJldHVybiBpcGNfaGFzX3Blcm0oJnNtYS0+c2VtX3Blcm0sIHBlcm1zKTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X2lwY19wZXJtaXNzaW9uKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLCBzaG9ydCBmbGFnKQogewotCXN0cnVjdCBpcGNfc2VjdXJpdHlfc3RydWN0ICppc2VjID0gaXBjcC0+c2VjdXJpdHk7Ci0JdTE2IHNjbGFzcyA9IFNFQ0NMQVNTX0lQQzsKIAl1MzIgYXYgPSAwOwogCi0JaWYgKGlzZWMgJiYgaXNlYy0+bWFnaWMgPT0gU0VMSU5VWF9NQUdJQykKLQkJc2NsYXNzID0gaXNlYy0+c2NsYXNzOwotCiAJYXYgPSAwOwogCWlmIChmbGFnICYgU19JUlVHTykKIAkJYXYgfD0gSVBDX19VTklYX1JFQUQ7CkBAIC00MDYwLDcgKzQwNTQsNyBAQAogCWlmIChhdiA9PSAwKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBpcGNfaGFzX3Blcm0oaXBjcCwgc2NsYXNzLCBhdik7CisJcmV0dXJuIGlwY19oYXNfcGVybShpcGNwLCBhdik7CiB9CiAKIC8qIG1vZHVsZSBzdGFja2luZyBvcGVyYXRpb25zICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oCmluZGV4IGViMzQwYjQuLjg5MjhiYjRkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaApAQCAtMjIwLDYgKzIyMCw4IEBACiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX1hGUk1fU09DS0VULCBORVRMSU5LX1hGUk1fU09DS0VUX19OTE1TR19XUklURSwgIm5sbXNnX3dyaXRlIikKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRCwgIm5sbXNnX3JlYWQiKQogICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSwgIm5sbXNnX3dyaXRlIikKKyAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVMQVksICJubG1zZ19yZWxheSIpCisgICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQURQUklWLCAibmxtc2dfcmVhZHByaXYiKQogICAgU18oU0VDQ0xBU1NfTkVUTElOS19JUDZGV19TT0NLRVQsIE5FVExJTktfSVA2RldfU09DS0VUX19OTE1TR19SRUFELCAibmxtc2dfcmVhZCIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0lQNkZXX1NPQ0tFVCwgTkVUTElOS19JUDZGV19TT0NLRVRfX05MTVNHX1dSSVRFLCAibmxtc2dfd3JpdGUiKQogICAgU18oU0VDQ0xBU1NfREJVUywgREJVU19fQUNRVUlSRV9TVkMsICJhY3F1aXJlX3N2YyIpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oCmluZGV4IGY5ZGUwZjkuLmJkZmNlNGMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oCkBAIC04NDAsNiArODQwLDggQEAKIAogI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRCAgICAgICAgICAweDAwNDAwMDAwVUwKICNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFICAgICAgICAgMHgwMDgwMDAwMFVMCisjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSAgICAgICAgIDB4MDEwMDAwMDBVTAorI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRFBSSVYgICAgICAweDAyMDAwMDAwVUwKIAogI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKICNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMgYi9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMKaW5kZXggZjc5NDA4Mi4uYjNhZGI0OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYwpAQCAtOTEsMTMgKzkxLDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3Qgbmxtc2dfcGVybSBubG1zZ19hdWRpdF9wZXJtc1tdID0KIHsKLQl7IEFVRElUX0dFVCwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFEICB9LAotCXsgQVVESVRfU0VULAkJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFIH0sCi0JeyBBVURJVF9MSVNULAkJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQUQgIH0sCi0JeyBBVURJVF9BREQsCQlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfV1JJVEUgfSwKLQl7IEFVRElUX0RFTCwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSB9LAotCXsgQVVESVRfVVNFUiwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSB9LAotCXsgQVVESVRfTE9HSU4sCQlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfV1JJVEUgfSwKKwl7IEFVRElUX0dFVCwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFEICAgICB9LAorCXsgQVVESVRfU0VULAkJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFICAgIH0sCisJeyBBVURJVF9MSVNULAkJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQURQUklWIH0sCisJeyBBVURJVF9BREQsCQlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfV1JJVEUgICAgfSwKKwl7IEFVRElUX0RFTCwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSAgICB9LAorCXsgQVVESVRfVVNFUiwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSAgICB9LAogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvS2NvbmZpZyBiL3NvdW5kL2lzYS9LY29uZmlnCmluZGV4IDRhNmJlOTYuLjNhMzIyOGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9LY29uZmlnCisrKyBiL3NvdW5kL2lzYS9LY29uZmlnCkBAIC0xNjQsNiArMTY0LDcgQEAKIAlzZWxlY3QgU05EX1JBV01JREkKIAlzZWxlY3QgU05EX0NTNDIzMV9MSUIKIAlzZWxlY3QgU05EX0dVU19TWU5USAorCXNlbGVjdCBJU0FQTlAKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQU1EIEludGVyV2F2ZSBiYXNlZAogCSAgc291bmRjYXJkcyAoR3JhdmlzIFVsdHJhU291bmQgUGx1ZyAmIFBsYXksIFNUQiBTb3VuZFJhZ2UzMiwKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMgYi9zb3VuZC9vc3MvYWM5N19jb2RlYy5jCmluZGV4IDEyNGIxZTEuLjNlY2VmNDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMKKysrIGIvc291bmQvb3NzL2FjOTdfY29kZWMuYwpAQCAtMTU1LDYgKzE1NSw3IEBACiAJezB4NDM1MjU5MzEsICJDaXJydXMgTG9naWMgQ1M0Mjk5IHJldiBBIiwgJmNyeXN0YWxfZGlnaXRhbF9vcHN9LAogCXsweDQzNTI1OTMzLCAiQ2lycnVzIExvZ2ljIENTNDI5OSByZXYgQyIsICZjcnlzdGFsX2RpZ2l0YWxfb3BzfSwKIAl7MHg0MzUyNTkzNCwgIkNpcnJ1cyBMb2dpYyBDUzQyOTkgcmV2IEQiLCAmY3J5c3RhbF9kaWdpdGFsX29wc30sCisJezB4NDM1ODU0MzAsICJDWFQ0OCIsCQkJJmRlZmF1bHRfb3BzLAkJQUM5N19ERUxVREVEX01PREVNIH0sCiAJezB4NDM1ODU0NDIsICJDWFQ2NiIsCQkJJmRlZmF1bHRfb3BzLAkJQUM5N19ERUxVREVEX01PREVNIH0sCiAJezB4NDQ1NDMwMzEsICJEaWFtb25kIFRlY2hub2xvZ3kgRFQwODkzIiwgJmRlZmF1bHRfb3BzfSwKIAl7MHg0NTgzODMwOCwgIkVTUyBBbGxlZ3JvIEVTMTk4OCIsCSZudWxsX29wc30sCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvbXNuZF9waW5uYWNsZS5jIGIvc291bmQvb3NzL21zbmRfcGlubmFjbGUuYwppbmRleCA2YmEwM2Y4Li4wYzJkYjY1IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvbXNuZF9waW5uYWNsZS5jCisrKyBiL3NvdW5kL29zcy9tc25kX3Bpbm5hY2xlLmMKQEAgLTg5Miw3ICs4OTIsNyBAQAogc3RhdGljIGludCBkc3BfcmVhZChjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuKQogewogCWludCBjb3VudCA9IGxlbjsKLQljaGFyICpwYWdlID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoUEFHRV9TSVpFKTsKKwljaGFyICpwYWdlID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NvbmljdmliZXMuYyBiL3NvdW5kL29zcy9zb25pY3ZpYmVzLmMKaW5kZXggZTFkNjk2MS4uMDYwNDdlNyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NvbmljdmliZXMuYworKysgYi9zb3VuZC9vc3Mvc29uaWN2aWJlcy5jCkBAIC0xMTQ5LDcgKzExNDksNyBAQAogCQkJaWYgKG1peHRhYmxlW2ldLnJlYykKIAkJCQlicmVhazsKIAkJfQotCQlpZiAoIW1peHRhYmxlW2ldLnJlYykKKwkJaWYgKGkgPT0gU09VTkRfTUlYRVJfTlJERVZJQ0VTKQogCQkJcmV0dXJuIDA7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJCWZyb2JpbmRpcihzLCBTVl9DSU1JWF9BRENJTkwsIDB4MWYsIG1peHRhYmxlW2ldLnJlYyA8PCA1KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IGQ4OTY0N2EuLjk1OTk1M2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtNjQsNyArNjQsOCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7SW50ZWwsIElDSDZ9LCIKIAkJCSAie0ludGVsLCBJQ0g2TX0sIgotCQkJICJ7SW50ZWwsIElDSDd9fSIpOworCQkJICJ7SW50ZWwsIElDSDd9LCIKKwkJCSAie0ludGVsLCBFU0IyfX0iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSW50ZWwgSERBIGRyaXZlciIpOwogCiAjZGVmaW5lIFNGWAkiaGRhLWludGVsOiAiCkBAIC0xNDIyLDYgKzE0MjMsNyBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF6eF9pZHNbXSA9IHsKIAl7IDB4ODA4NiwgMHgyNjY4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sIC8qIElDSDYgKi8KIAl7IDB4ODA4NiwgMHgyN2Q4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sIC8qIElDSDcgKi8KKwl7IDB4ODA4NiwgMHgyNjlhLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sIC8qIEVTQjIgKi8KIAl7IDAsIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXp4X2lkcyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDAuYyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCmluZGV4IGQxNDNkMmMuLjhiMzNiMTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCkBAIC0xMjUsOCArMTI1LDggQEAKICNpZm5kZWYgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzIwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18yMAkweDI3ZGUKICNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMTMKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FU0IyXzEzCTB4MjY5OAorI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FU0IyXzE0CTB4MjY5OAogI2VuZGlmCiAjaWZuZGVmIFBDSV9ERVZJQ0VfSURfU0lfNzAxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzcwMTIJCTB4NzAxMgpAQCAtMjc0MSw3ICsyNzQxLDcgQEAKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzUsICJJbnRlbCA2MzAwRVNCIiB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzE4LCAiSW50ZWwgSUNINiIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18yMCwgIkludGVsIElDSDciIH0sCi0JeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMTMsICJJbnRlbCBFU0IyIiB9LAorCXsgUENJX0RFVklDRV9JRF9JTlRFTF9FU0IyXzE0LCAiSW50ZWwgRVNCMiIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfU0lfNzAxMiwgIlNpUyBTSTcwMTIiIH0sCiAJeyBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1BfQVVESU8sICJOVmlkaWEgbkZvcmNlIiB9LAogCXsgUENJX0RFVklDRV9JRF9OVklESUFfTUNQMl9BVURJTywgIk5WaWRpYSBuRm9yY2UyIiB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggZjFjZTgwOC4uOWI0ZDc0ZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC0xODM2LDcgKzE4MzYsNyBAQAogICoKICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfdmlhODJ4eF9jaGlwX2luaXQodmlhODJ4eF90ICpjaGlwKQorc3RhdGljIGludCBzbmRfdmlhODJ4eF9jaGlwX2luaXQodmlhODJ4eF90ICpjaGlwKQogewogCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IG1heF9jb3VudDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9LY29uZmlnIGIvc291bmQvcHBjL0tjb25maWcKaW5kZXggYjBhOWViZi4uNzUyMTNiZiAxMDA2NDQKLS0tIGEvc291bmQvcHBjL0tjb25maWcKKysrIGIvc291bmQvcHBjL0tjb25maWcKQEAgLTExLDcgKzExLDcgQEAKIAogY29uZmlnIFNORF9QT1dFUk1BQwogCXRyaXN0YXRlICJQb3dlck1hYyAoQVdBQ1MsIERBQ0EsIEJ1cmd1bmR5LCBUdW1ibGVyLCBLZXl3ZXN0KSIKLQlkZXBlbmRzIG9uIFNORCAmJiBJMkMgJiYgSU5QVVQKKwlkZXBlbmRzIG9uIFNORCAmJiBJMkMgJiYgSU5QVVQgJiYgUFBDX1BNQUMKIAlzZWxlY3QgU05EX1BDTQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgaW50ZWdyYXRlZCBzb3VuZCBkZXZpY2UuCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvTWFrZWZpbGUgYi9zb3VuZC9wcGMvTWFrZWZpbGUKaW5kZXggNGQ5NWM2NS4uZDZiYTk5NSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL01ha2VmaWxlCisrKyBiL3NvdW5kL3BwYy9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMgQ29weXJpZ2h0IChjKSAyMDAxIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KICMKIAotc25kLXBvd2VybWFjLW9ianMgOj0gcG93ZXJtYWMubyBwbWFjLm8gYXdhY3MubyBidXJndW5keS5vIGRhY2EubyB0dW1ibGVyLm8ga2V5d2VzdC5vIGJlZXAubworc25kLXBvd2VybWFjLW9ianMgOj0gcG93ZXJtYWMubyBwbWFjLm8gYXdhY3MubyBidXJndW5keS5vIGRhY2EubyB0dW1ibGVyLm8gdG9vbmllLm8ga2V5d2VzdC5vIGJlZXAubwogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CiBvYmotJChDT05GSUdfU05EX1BPV0VSTUFDKSArPSBzbmQtcG93ZXJtYWMubwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3BtYWMuYyBiL3NvdW5kL3BwYy9wbWFjLmMKaW5kZXggM2JmNWYwNi4uMzJkOTQ3NSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3BtYWMuYworKysgYi9zb3VuZC9wcGMvcG1hYy5jCkBAIC05ODYsNyArOTg2LDEzIEBACiAJCQljaGlwLT5udW1fZnJlcXMgPSBBUlJBWV9TSVpFKHR1bWJsZXJfZnJlcXMpOwogCQkJY2hpcC0+bW9kZWwgPSBQTUFDX1NOQVBQRVI7CiAJCQljaGlwLT5jYW5fYnl0ZV9zd2FwID0gMDsgLyogRklYTUU6IGNoZWNrIHRoaXMgKi8KLQkJCWNoaXAtPmNvbnRyb2xfbWFzayA9IE1BU0tfSUVQQyB8IDB4MTE7IC8qIGRpc2FibGUgSUVFICovCisJCQljaGlwLT5jb250cm9sX21hc2sgPSBNQVNLX0lFUEMgfCAweDExOy8qIGRpc2FibGUgSUVFICovCisJCQlicmVhazsKKwkJY2FzZSAweDNhOgorCQkJY2hpcC0+bnVtX2ZyZXFzID0gQVJSQVlfU0laRSh0dW1ibGVyX2ZyZXFzKTsKKwkJCWNoaXAtPm1vZGVsID0gUE1BQ19UT09OSUU7CisJCQljaGlwLT5jYW5fYnl0ZV9zd2FwID0gMDsgLyogRklYTUU6IGNoZWNrIHRoaXMgKi8KKwkJCWNoaXAtPmNvbnRyb2xfbWFzayA9IE1BU0tfSUVQQyB8IDB4MTE7LyogZGlzYWJsZSBJRUUgKi8KIAkJCWJyZWFrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3BtYWMuaCBiL3NvdW5kL3BwYy9wbWFjLmgKaW5kZXggZGM2Yzk5ZC4uMGE4NGMwNSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3BtYWMuaAorKysgYi9zb3VuZC9wcGMvcG1hYy5oCkBAIC05NCw3ICs5NCw4IEBACiAgKi8KIAogZW51bSBzbmRfcG1hY19tb2RlbCB7Ci0JUE1BQ19BV0FDUywgUE1BQ19TQ1JFQU1FUiwgUE1BQ19CVVJHVU5EWSwgUE1BQ19EQUNBLCBQTUFDX1RVTUJMRVIsIFBNQUNfU05BUFBFUgorCVBNQUNfQVdBQ1MsIFBNQUNfU0NSRUFNRVIsIFBNQUNfQlVSR1VORFksIFBNQUNfREFDQSwgUE1BQ19UVU1CTEVSLAorCVBNQUNfU05BUFBFUiwgUE1BQ19UT09OSUUKIH07CiAKIHN0cnVjdCBzbmRfcG1hYyB7CkBAIC0xOTEsNiArMTkyLDcgQEAKIGludCBzbmRfcG1hY19kYWNhX2luaXQocG1hY190ICpjaGlwKTsKIGludCBzbmRfcG1hY190dW1ibGVyX2luaXQocG1hY190ICpjaGlwKTsKIGludCBzbmRfcG1hY190dW1ibGVyX3Bvc3RfaW5pdCh2b2lkKTsKK2ludCBzbmRfcG1hY190b29uaWVfaW5pdChwbWFjX3QgKmNoaXApOwogCiAvKiBpMmMgZnVuY3Rpb25zICovCiB0eXBlZGVmIHN0cnVjdCBzbmRfcG1hY19rZXl3ZXN0IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9wb3dlcm1hYy5jIGIvc291bmQvcHBjL3Bvd2VybWFjLmMKaW5kZXggOGYxOTUzYS4uMjMxZjY0MyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3Bvd2VybWFjLmMKKysrIGIvc291bmQvcHBjL3Bvd2VybWFjLmMKQEAgLTk1LDYgKzk1LDEzIEBACiAJCWlmICggc25kX3BtYWNfdHVtYmxlcl9pbml0KGNoaXApIDwgMCB8fCBzbmRfcG1hY190dW1ibGVyX3Bvc3RfaW5pdCgpIDwgMCkKIAkJCWdvdG8gX19lcnJvcjsKIAkJYnJlYWs7CisJY2FzZSBQTUFDX1RPT05JRToKKwkJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlBNYWMgVG9vbmllIik7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJQb3dlck1hYyBUb29uaWUiKTsKKwkJc3RyY3B5KGNhcmQtPmxvbmduYW1lLCBjYXJkLT5zaG9ydG5hbWUpOworCQlpZiAoKGVyciA9IHNuZF9wbWFjX3Rvb25pZV9pbml0KGNoaXApKSA8IDApCisJCQlnb3RvIF9fZXJyb3I7CisJCWJyZWFrOwogCWNhc2UgUE1BQ19BV0FDUzoKIAljYXNlIFBNQUNfU0NSRUFNRVI6CiAJCW5hbWVfZXh0ID0gY2hpcC0+bW9kZWwgPT0gUE1BQ19TQ1JFQU1FUiA/ICJTY3JlYW1lciIgOiAiQVdBQ1MiOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3Rvb25pZS5jIGIvc291bmQvcHBjL3Rvb25pZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MmJjNGIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wcGMvdG9vbmllLmMKQEAgLTAsMCArMSwzNzkgQEAKKy8qCisgKiBNYWMgTWluaSAidG9vbmllIiBtaXhlciBjb250cm9sCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IGJ5IEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcG1hY19mZWF0dXJlLmg+CisjaW5jbHVkZSAicG1hYy5oIgorCisjdW5kZWYgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhmbXQpCisjZWxzZQorI2RlZmluZSBEQkcoZm10Li4uKQorI2VuZGlmCisKK3N0cnVjdCBwbWFjX2dwaW8geworCXVuc2lnbmVkIGludCBhZGRyOworCXU4IGFjdGl2ZV92YWw7CisJdTggaW5hY3RpdmVfdmFsOworCXU4IGFjdGl2ZV9zdGF0ZTsKK307CisKK3N0cnVjdCBwbWFjX3Rvb25pZQoreworCXN0cnVjdCBwbWFjX2dwaW8JaHBfZGV0ZWN0X2dwaW87CisJc3RydWN0IHBtYWNfZ3BpbwlocF9tdXRlX2dwaW87CisJc3RydWN0IHBtYWNfZ3BpbwlhbXBfbXV0ZV9ncGlvOworCWludAkJCWhwX2RldGVjdF9pcnE7CisJaW50CQkJYXV0b19tdXRlX25vdGlmeTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJZGV0ZWN0X3dvcms7Cit9OworCisKKy8qCisgKiBncGlvIGFjY2VzcworICovCisjZGVmaW5lIGRvX2dwaW9fd3JpdGUoZ3AsIHZhbCkgXAorCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX1dSSVRFX0dQSU8sIE5VTEwsIChncCktPmFkZHIsIHZhbCkKKyNkZWZpbmUgZG9fZ3Bpb19yZWFkKGdwKSBcCisJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfUkVBRF9HUElPLCBOVUxMLCAoZ3ApLT5hZGRyLCAwKQorI2RlZmluZSB0dW1ibGVyX2dwaW9fZnJlZShncCkgLyogTk9QICovCisKK3N0YXRpYyB2b2lkIHdyaXRlX2F1ZGlvX2dwaW8oc3RydWN0IHBtYWNfZ3BpbyAqZ3AsIGludCBhY3RpdmUpCit7CisJaWYgKCEgZ3AtPmFkZHIpCisJCXJldHVybjsKKwlhY3RpdmUgPSBhY3RpdmUgPyBncC0+YWN0aXZlX3ZhbCA6IGdwLT5pbmFjdGl2ZV92YWw7CisJZG9fZ3Bpb193cml0ZShncCwgYWN0aXZlKTsKKwlEQkcoIihJKSBncGlvICV4IHdyaXRlICVkXG4iLCBncC0+YWRkciwgYWN0aXZlKTsKK30KKworc3RhdGljIGludCBjaGVja19hdWRpb19ncGlvKHN0cnVjdCBwbWFjX2dwaW8gKmdwKQoreworCWludCByZXQ7CisKKwlpZiAoISBncC0+YWRkcikKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBkb19ncGlvX3JlYWQoZ3ApOworCisJcmV0dXJuIChyZXQgJiAweGQpID09IChncC0+YWN0aXZlX3ZhbCAmIDB4ZCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9hdWRpb19ncGlvKHN0cnVjdCBwbWFjX2dwaW8gKmdwKQoreworCWludCByZXQ7CisJaWYgKCEgZ3AtPmFkZHIpCisJCXJldHVybiAwOworCXJldCA9ICgoZG9fZ3Bpb19yZWFkKGdwKSAmIDB4MDIpICE9MCk7CisJcmV0dXJuIHJldCA9PSBncC0+YWN0aXZlX3N0YXRlOworfQorCisKK2VudW0geyBUT09OSUVfTVVURV9IUCwgVE9PTklFX01VVEVfQU1QIH07CisKK3N0YXRpYyBpbnQgdG9vbmllX2dldF9tdXRlX3N3aXRjaChzbmRfa2NvbnRyb2xfdCAqa2NvbnRyb2wsCisJCQkJICBzbmRfY3RsX2VsZW1fdmFsdWVfdCAqdWNvbnRyb2wpCit7CisJcG1hY190ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBwbWFjX3Rvb25pZSAqbWl4ID0gY2hpcC0+bWl4ZXJfZGF0YTsKKwlzdHJ1Y3QgcG1hY19ncGlvICpncDsKKworCWlmIChtaXggPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJc3dpdGNoKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKSB7CisJY2FzZSBUT09OSUVfTVVURV9IUDoKKwkJZ3AgPSAmbWl4LT5ocF9tdXRlX2dwaW87CisJCWJyZWFrOworCWNhc2UgVE9PTklFX01VVEVfQU1QOgorCQlncCA9ICZtaXgtPmFtcF9tdXRlX2dwaW87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOzsKKwl9CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAhY2hlY2tfYXVkaW9fZ3BpbyhncCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9vbmllX3B1dF9tdXRlX3N3aXRjaChzbmRfa2NvbnRyb2xfdCAqa2NvbnRyb2wsCisJCQkJICAgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKnVjb250cm9sKQoreworCXBtYWNfdCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgcG1hY190b29uaWUgKm1peCA9IGNoaXAtPm1peGVyX2RhdGE7CisJc3RydWN0IHBtYWNfZ3BpbyAqZ3A7CisJaW50IHZhbDsKKworCWlmIChjaGlwLT51cGRhdGVfYXV0b211dGUgJiYgY2hpcC0+YXV0b19tdXRlKQorCQlyZXR1cm4gMDsgLyogZG9uJ3QgdG91Y2ggaW4gdGhlIGF1dG8tbXV0ZSBtb2RlICovCisKKwlpZiAobWl4ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJc3dpdGNoKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKSB7CisJY2FzZSBUT09OSUVfTVVURV9IUDoKKwkJZ3AgPSAmbWl4LT5ocF9tdXRlX2dwaW87CisJCWJyZWFrOworCWNhc2UgVE9PTklFX01VVEVfQU1QOgorCQlncCA9ICZtaXgtPmFtcF9tdXRlX2dwaW87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOzsKKwl9CisJdmFsID0gISBjaGVja19hdWRpb19ncGlvKGdwKTsKKwlpZiAodmFsICE9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKSB7CisJCXdyaXRlX2F1ZGlvX2dwaW8oZ3AsICEgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3QgdG9vbmllX2hwX3N3IF9faW5pdGRhdGEgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsCisJLmluZm8gPSBzbmRfcG1hY19ib29sZWFuX21vbm9faW5mbywKKwkuZ2V0ID0gdG9vbmllX2dldF9tdXRlX3N3aXRjaCwKKwkucHV0ID0gdG9vbmllX3B1dF9tdXRlX3N3aXRjaCwKKwkucHJpdmF0ZV92YWx1ZSA9IFRPT05JRV9NVVRFX0hQLAorfTsKK3N0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3QgdG9vbmllX3NwZWFrZXJfc3cgX19pbml0ZGF0YSA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCisJLmluZm8gPSBzbmRfcG1hY19ib29sZWFuX21vbm9faW5mbywKKwkuZ2V0ID0gdG9vbmllX2dldF9tdXRlX3N3aXRjaCwKKwkucHV0ID0gdG9vbmllX3B1dF9tdXRlX3N3aXRjaCwKKwkucHJpdmF0ZV92YWx1ZSA9IFRPT05JRV9NVVRFX0FNUCwKK307CisKKy8qCisgKiBhdXRvLW11dGUgc3R1ZmZzCisgKi8KK3N0YXRpYyBpbnQgdG9vbmllX2RldGVjdF9oZWFkcGhvbmUocG1hY190ICpjaGlwKQoreworCXN0cnVjdCBwbWFjX3Rvb25pZSAqbWl4ID0gY2hpcC0+bWl4ZXJfZGF0YTsKKwlpbnQgZGV0ZWN0ID0gMDsKKworCWlmIChtaXgtPmhwX2RldGVjdF9ncGlvLmFkZHIpCisJCWRldGVjdCB8PSByZWFkX2F1ZGlvX2dwaW8oJm1peC0+aHBfZGV0ZWN0X2dwaW8pOworCXJldHVybiBkZXRlY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHRvb25pZV9jaGVja19tdXRlKHBtYWNfdCAqY2hpcCwgc3RydWN0IHBtYWNfZ3BpbyAqZ3AsIGludCB2YWwsCisJCQkgICAgICBpbnQgZG9fbm90aWZ5LCBzbmRfa2NvbnRyb2xfdCAqc3cpCit7CisJaWYgKGNoZWNrX2F1ZGlvX2dwaW8oZ3ApICE9IHZhbCkgeworCQl3cml0ZV9hdWRpb19ncGlvKGdwLCB2YWwpOworCQlpZiAoZG9fbm90aWZ5KQorCQkJc25kX2N0bF9ub3RpZnkoY2hpcC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsCisJCQkJICAgICAgICZzdy0+aWQpOworCX0KK30KKworc3RhdGljIHZvaWQgdG9vbmllX2RldGVjdF9oYW5kbGVyKHZvaWQgKnNlbGYpCit7CisJcG1hY190ICpjaGlwID0gKHBtYWNfdCopIHNlbGY7CisJc3RydWN0IHBtYWNfdG9vbmllICptaXg7CisJaW50IGhlYWRwaG9uZTsKKworCWlmICghY2hpcCkKKwkJcmV0dXJuOworCisJbWl4ID0gY2hpcC0+bWl4ZXJfZGF0YTsKKwlzbmRfYXNzZXJ0KG1peCwgcmV0dXJuKTsKKworCWhlYWRwaG9uZSA9IHRvb25pZV9kZXRlY3RfaGVhZHBob25lKGNoaXApOworCisJREJHKCJoZWFkcGhvbmU6ICVkLCBsaW5lb3V0OiAlZFxuIiwgaGVhZHBob25lLCBsaW5lb3V0KTsKKworCWlmIChoZWFkcGhvbmUpIHsKKwkJLyogdW5tdXRlIGhlYWRwaG9uZS9saW5lb3V0ICYgbXV0ZSBzcGVha2VyICovCisJCXRvb25pZV9jaGVja19tdXRlKGNoaXAsICZtaXgtPmhwX211dGVfZ3BpbywgMCwKKwkJCQkgIG1peC0+YXV0b19tdXRlX25vdGlmeSwgY2hpcC0+bWFzdGVyX3N3X2N0bCk7CisJCXRvb25pZV9jaGVja19tdXRlKGNoaXAsICZtaXgtPmFtcF9tdXRlX2dwaW8sIDEsCisJCQkJICBtaXgtPmF1dG9fbXV0ZV9ub3RpZnksIGNoaXAtPnNwZWFrZXJfc3dfY3RsKTsKKwl9IGVsc2UgeworCQkvKiB1bm11dGUgc3BlYWtlciwgbXV0ZSBvdGhlcnMgKi8KKwkJdG9vbmllX2NoZWNrX211dGUoY2hpcCwgJm1peC0+YW1wX211dGVfZ3BpbywgMCwKKwkJCQkgIG1peC0+YXV0b19tdXRlX25vdGlmeSwgY2hpcC0+c3BlYWtlcl9zd19jdGwpOworCQl0b29uaWVfY2hlY2tfbXV0ZShjaGlwLCAmbWl4LT5ocF9tdXRlX2dwaW8sIDEsCisJCQkJICBtaXgtPmF1dG9fbXV0ZV9ub3RpZnksIGNoaXAtPm1hc3Rlcl9zd19jdGwpOworCX0KKwlpZiAobWl4LT5hdXRvX211dGVfbm90aWZ5KSB7CisJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAorCQkJCSAgICAgICAmY2hpcC0+aHBfZGV0ZWN0X2N0bC0+aWQpOworCX0KK30KKworc3RhdGljIHZvaWQgdG9vbmllX3VwZGF0ZV9hdXRvbXV0ZShwbWFjX3QgKmNoaXAsIGludCBkb19ub3RpZnkpCit7CisJaWYgKGNoaXAtPmF1dG9fbXV0ZSkgeworCQlzdHJ1Y3QgcG1hY190b29uaWUgKm1peDsKKwkJbWl4ID0gY2hpcC0+bWl4ZXJfZGF0YTsKKwkJc25kX2Fzc2VydChtaXgsIHJldHVybik7CisJCW1peC0+YXV0b19tdXRlX25vdGlmeSA9IGRvX25vdGlmeTsKKwkJc2NoZWR1bGVfd29yaygmbWl4LT5kZXRlY3Rfd29yayk7CisJfQorfQorCisvKiBpbnRlcnJ1cHQgLSBoZWFkcGhvbmUgcGx1ZyBjaGFuZ2VkICovCitzdGF0aWMgaXJxcmV0dXJuX3QgdG9vbmllX2hwX2ludHIoaW50IGlycSwgdm9pZCAqZGV2aWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXBtYWNfdCAqY2hpcCA9IGRldmlkOworCisJaWYgKGNoaXAtPnVwZGF0ZV9hdXRvbXV0ZSAmJiBjaGlwLT5pbml0aWFsaXplZCkgeworCQljaGlwLT51cGRhdGVfYXV0b211dGUoY2hpcCwgMSk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJcmV0dXJuIElSUV9OT05FOworfQorCisvKiBsb29rIGZvciBhdWRpbyBncGlvIGRldmljZSAqLworc3RhdGljIGludCBmaW5kX2F1ZGlvX2dwaW8oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGxhdGZvcm0sCisJCQkgICBzdHJ1Y3QgcG1hY19ncGlvICpncCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworICAJdTMyICpiYXNlLCBhZGRyOworCisJaWYgKCEgKG5wID0gZmluZF9kZXZpY2VzKCJncGlvIikpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZvciAobnAgPSBucC0+Y2hpbGQ7IG5wOyBucCA9IG5wLT5zaWJsaW5nKSB7CisJCWNoYXIgKnByb3BlcnR5ID0gZ2V0X3Byb3BlcnR5KG5wLCAiYXVkaW8tZ3BpbyIsIE5VTEwpOworCQlpZiAocHJvcGVydHkgJiYgc3RyY21wKHByb3BlcnR5LCBuYW1lKSA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgbmFtZSkpCisJCQlicmVhazsKKwl9CisJaWYgKG5wID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJYmFzZSA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJBQVBMLGFkZHJlc3MiLCBOVUxMKTsKKwlpZiAoISBiYXNlKSB7CisJCWJhc2UgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CisJCWlmICghYmFzZSkgeworCQkJREJHKCIoRSkgY2Fubm90IGZpbmQgYWRkcmVzcyBmb3IgZGV2aWNlICVzICFcbiIsIG5hbWUpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJYWRkciA9ICpiYXNlOworCQlpZiAoYWRkciA8IDB4NTApCisJCQlhZGRyICs9IDB4NTA7CisJfSBlbHNlCisJCWFkZHIgPSAqYmFzZTsKKworCWdwLT5hZGRyID0gYWRkciAmIDB4MDAwMGZmZmY7CisKKwkvKiBUcnkgdG8gZmluZCB0aGUgYWN0aXZlIHN0YXRlLCBkZWZhdWx0IHRvIDAgISAqLworCWJhc2UgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAiYXVkaW8tZ3Bpby1hY3RpdmUtc3RhdGUiLCBOVUxMKTsKKwlpZiAoYmFzZSkgeworCQlncC0+YWN0aXZlX3N0YXRlID0gKmJhc2U7CisJCWdwLT5hY3RpdmVfdmFsID0gKCpiYXNlKSA/IDB4NSA6IDB4NDsKKwkJZ3AtPmluYWN0aXZlX3ZhbCA9ICgqYmFzZSkgPyAweDQgOiAweDU7CisJfSBlbHNlIHsKKwkJdTMyICpwcm9wID0gTlVMTDsKKwkJZ3AtPmFjdGl2ZV9zdGF0ZSA9IDA7CisJCWdwLT5hY3RpdmVfdmFsID0gMHg0OworCQlncC0+aW5hY3RpdmVfdmFsID0gMHg1OworCQkvKiBIZXJlIGFyZSBzb21lIGNydWRlIGhhY2tzIHRvIGV4dHJhY3QgdGhlIEdQSU8gcG9sYXJpdHkgYW5kCisJCSAqIG9wZW4gY29sbGVjdG9yIGluZm9ybWF0aW9ucyBvdXQgb2YgdGhlIGRvLXBsYXRmb3JtIHNjcmlwdAorCQkgKiBhcyB3ZSBkb24ndCB5ZXQgaGF2ZSBhbiBpbnRlcnByZXRlciBmb3IgdGhlc2UgdGhpbmdzCisJCSAqLworCQlpZiAocGxhdGZvcm0pCisJCQlwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgcGxhdGZvcm0sIE5VTEwpOworCQlpZiAocHJvcCkgeworCQkJaWYgKHByb3BbM10gPT0gMHg5ICYmIHByb3BbNF0gPT0gMHg5KSB7CisJCQkJZ3AtPmFjdGl2ZV92YWwgPSAweGQ7CisJCQkJZ3AtPmluYWN0aXZlX3ZhbCA9IDB4YzsKKwkJCX0KKwkJCWlmIChwcm9wWzNdID09IDB4MSAmJiBwcm9wWzRdID09IDB4MSkgeworCQkJCWdwLT5hY3RpdmVfdmFsID0gMHg1OworCQkJCWdwLT5pbmFjdGl2ZV92YWwgPSAweDQ7CisJCQl9CisJCX0KKwl9CisKKwlEQkcoIihJKSBHUElPIGRldmljZSAlcyBmb3VuZCwgb2Zmc2V0OiAleCwgYWN0aXZlIHN0YXRlOiAlZCAhXG4iLAorCSAgICBuYW1lLCBncC0+YWRkciwgZ3AtPmFjdGl2ZV9zdGF0ZSk7CisKKwlyZXR1cm4gKG5wLT5uX2ludHJzID4gMCkgPyBucC0+aW50cnNbMF0ubGluZSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIHRvb25pZV9jbGVhbnVwKHBtYWNfdCAqY2hpcCkKK3sKKwlzdHJ1Y3QgcG1hY190b29uaWUgKm1peCA9IGNoaXAtPm1peGVyX2RhdGE7CisJaWYgKCEgbWl4KQorCQlyZXR1cm47CisJaWYgKG1peC0+aHBfZGV0ZWN0X2lycSA+PSAwKQorCQlmcmVlX2lycShtaXgtPmhwX2RldGVjdF9pcnEsIGNoaXApOworCWtmcmVlKG1peCk7CisJY2hpcC0+bWl4ZXJfZGF0YSA9IE5VTEw7Cit9CisKK2ludCBzbmRfcG1hY190b29uaWVfaW5pdChwbWFjX3QgKmNoaXApCit7CisJc3RydWN0IHBtYWNfdG9vbmllICptaXg7CisKKwltaXggPSBrbWFsbG9jKHNpemVvZigqbWl4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCEgbWl4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNoaXAtPm1peGVyX2RhdGEgPSBtaXg7CisJY2hpcC0+bWl4ZXJfZnJlZSA9IHRvb25pZV9jbGVhbnVwOworCisJZmluZF9hdWRpb19ncGlvKCJoZWFkcGhvbmUtbXV0ZSIsIE5VTEwsICZtaXgtPmhwX211dGVfZ3Bpbyk7CisJZmluZF9hdWRpb19ncGlvKCJhbXAtbXV0ZSIsIE5VTEwsICZtaXgtPmFtcF9tdXRlX2dwaW8pOworCW1peC0+aHBfZGV0ZWN0X2lycSA9IGZpbmRfYXVkaW9fZ3BpbygiaGVhZHBob25lLWRldGVjdCIsCisJCQkJCSAgICAgTlVMTCwgJm1peC0+aHBfZGV0ZWN0X2dwaW8pOworCisJc3RyY3B5KGNoaXAtPmNhcmQtPm1peGVybmFtZSwgIlBvd2VyTWFjIFRvb25pZSIpOworCisJY2hpcC0+bWFzdGVyX3N3X2N0bCA9IHNuZF9jdGxfbmV3MSgmdG9vbmllX2hwX3N3LCBjaGlwKTsKKwlzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBjaGlwLT5tYXN0ZXJfc3dfY3RsKTsKKworCWNoaXAtPnNwZWFrZXJfc3dfY3RsID0gc25kX2N0bF9uZXcxKCZ0b29uaWVfc3BlYWtlcl9zdywgY2hpcCk7CisJc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgY2hpcC0+c3BlYWtlcl9zd19jdGwpOworCisJSU5JVF9XT1JLKCZtaXgtPmRldGVjdF93b3JrLCB0b29uaWVfZGV0ZWN0X2hhbmRsZXIsICh2b2lkICopY2hpcCk7CisKKwlpZiAobWl4LT5ocF9kZXRlY3RfaXJxID49IDApIHsKKwkJc25kX3BtYWNfYWRkX2F1dG9tdXRlKGNoaXApOworCisJCWNoaXAtPmRldGVjdF9oZWFkcGhvbmUgPSB0b29uaWVfZGV0ZWN0X2hlYWRwaG9uZTsKKwkJY2hpcC0+dXBkYXRlX2F1dG9tdXRlID0gdG9vbmllX3VwZGF0ZV9hdXRvbXV0ZTsKKwkJdG9vbmllX3VwZGF0ZV9hdXRvbXV0ZShjaGlwLCAwKTsKKworCQlpZiAocmVxdWVzdF9pcnEobWl4LT5ocF9kZXRlY3RfaXJxLCB0b29uaWVfaHBfaW50ciwgMCwKKwkJCQkiU291bmQgSGVhZHBob25lIERldGVjdGlvbiIsIGNoaXApIDwgMCkKKwkJCW1peC0+aHBfZGV0ZWN0X2lycSA9IC0xOworCX0KKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvdHVtYmxlci5jIGIvc291bmQvcHBjL3R1bWJsZXIuYwppbmRleCBjNzE4MDdlLi45MzMyMjM3IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvdHVtYmxlci5jCisrKyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKQEAgLTk5LDYgKzk5LDcgQEAKIAlwbWFjX2dwaW9fdCBocF9kZXRlY3Q7CiAJaW50IGhlYWRwaG9uZV9pcnE7CiAJaW50IGxpbmVvdXRfaXJxOworCXVuc2lnbmVkIGludCBzYXZlX21hc3Rlcl92b2xbMl07CiAJdW5zaWduZWQgaW50IG1hc3Rlcl92b2xbMl07CiAJdW5zaWduZWQgaW50IHNhdmVfbWFzdGVyX3N3aXRjaFsyXTsKIAl1bnNpZ25lZCBpbnQgbWFzdGVyX3N3aXRjaFsyXTsKQEAgLTE3NywxMSArMTc4LDIyIEBACiAJaWYgKCEgZ3AtPmFkZHIpCiAJCXJldHVybjsKIAlhY3RpdmUgPSBhY3RpdmUgPyBncC0+YWN0aXZlX3ZhbCA6IGdwLT5pbmFjdGl2ZV92YWw7Ci0KIAlkb19ncGlvX3dyaXRlKGdwLCBhY3RpdmUpOwogCURCRygiKEkpIGdwaW8gJXggd3JpdGUgJWRcbiIsIGdwLT5hZGRyLCBhY3RpdmUpOwogfQogCitzdGF0aWMgaW50IGNoZWNrX2F1ZGlvX2dwaW8ocG1hY19ncGlvX3QgKmdwKQoreworCWludCByZXQ7CisKKwlpZiAoISBncC0+YWRkcikKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBkb19ncGlvX3JlYWQoZ3ApOworCisJcmV0dXJuIChyZXQgJiAweGQpID09IChncC0+YWN0aXZlX3ZhbCAmIDB4ZCk7Cit9CisKIHN0YXRpYyBpbnQgcmVhZF9hdWRpb19ncGlvKHBtYWNfZ3Bpb190ICpncCkKIHsKIAlpbnQgcmV0OwpAQCAtNjgzLDcgKzY5NSw3IEBACiAJfQogCWlmIChncCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9ICEgcmVhZF9hdWRpb19ncGlvKGdwKTsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9ICFjaGVja19hdWRpb19ncGlvKGdwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzExLDcgKzcyMyw3IEBACiAJfQogCWlmIChncCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl2YWwgPSAhIHJlYWRfYXVkaW9fZ3BpbyhncCk7CisJdmFsID0gISBjaGVja19hdWRpb19ncGlvKGdwKTsKIAlpZiAodmFsICE9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKSB7CiAJCXdyaXRlX2F1ZGlvX2dwaW8oZ3AsICEgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOwogCQlyZXR1cm4gMTsKQEAgLTg5NywxMSArOTA5LDExIEBACiAKIHN0YXRpYyB2b2lkIGNoZWNrX211dGUocG1hY190ICpjaGlwLCBwbWFjX2dwaW9fdCAqZ3AsIGludCB2YWwsIGludCBkb19ub3RpZnksIHNuZF9rY29udHJvbF90ICpzdykKIHsKLQkvL3BtYWNfdHVtYmxlcl90ICptaXggPSBjaGlwLT5taXhlcl9kYXRhOwotCWlmICh2YWwgIT0gcmVhZF9hdWRpb19ncGlvKGdwKSkgeworCWlmIChjaGVja19hdWRpb19ncGlvKGdwKSAhPSB2YWwpIHsKIAkJd3JpdGVfYXVkaW9fZ3BpbyhncCwgdmFsKTsKIAkJaWYgKGRvX25vdGlmeSkKLQkJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLCAmc3ctPmlkKTsKKwkJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAorCQkJCSAgICAgICAmc3ctPmlkKTsKIAl9CiB9CiAKQEAgLTExMjgsNiArMTE0MCw4IEBACiAJCWRpc2FibGVfaXJxKG1peC0+bGluZW91dF9pcnEpOwogCW1peC0+c2F2ZV9tYXN0ZXJfc3dpdGNoWzBdID0gbWl4LT5tYXN0ZXJfc3dpdGNoWzBdOwogCW1peC0+c2F2ZV9tYXN0ZXJfc3dpdGNoWzFdID0gbWl4LT5tYXN0ZXJfc3dpdGNoWzFdOworCW1peC0+c2F2ZV9tYXN0ZXJfdm9sWzBdID0gbWl4LT5tYXN0ZXJfdm9sWzBdOworCW1peC0+c2F2ZV9tYXN0ZXJfdm9sWzFdID0gbWl4LT5tYXN0ZXJfdm9sWzFdOwogCW1peC0+bWFzdGVyX3N3aXRjaFswXSA9IG1peC0+bWFzdGVyX3N3aXRjaFsxXSA9IDA7CiAJdHVtYmxlcl9zZXRfbWFzdGVyX3ZvbHVtZShtaXgpOwogCWlmICghbWl4LT5hbmRlZF9yZXNldCkgewpAQCAtMTE1NSw2ICsxMTY5LDggQEAKIAltaXgtPmFjcyAmPSB+MTsKIAltaXgtPm1hc3Rlcl9zd2l0Y2hbMF0gPSBtaXgtPnNhdmVfbWFzdGVyX3N3aXRjaFswXTsKIAltaXgtPm1hc3Rlcl9zd2l0Y2hbMV0gPSBtaXgtPnNhdmVfbWFzdGVyX3N3aXRjaFsxXTsKKwltaXgtPm1hc3Rlcl92b2xbMF0gPSBtaXgtPnNhdmVfbWFzdGVyX3ZvbFswXTsKKwltaXgtPm1hc3Rlcl92b2xbMV0gPSBtaXgtPnNhdmVfbWFzdGVyX3ZvbFsxXTsKIAl0dW1ibGVyX3Jlc2V0X2F1ZGlvKGNoaXApOwogCWlmIChtaXgtPmkyYy5jbGllbnQgJiYgbWl4LT5pMmMuaW5pdF9jbGllbnQpIHsKIAkJaWYgKG1peC0+aTJjLmluaXRfY2xpZW50KCZtaXgtPmkyYykgPCAwKQo=