[COMMIT] Improve the algorithmic complexity of #'concat, move #'concatenate to C.
Aidan Kehoe <[email protected]> Thu, 30 Jun 2016 00:44:01 +0100
| Newsgroups | gmane.emacs.xemacs.patches |
|---|---|
| Message-ID | <[email protected]> |
CkFQUFJPVkUgQ09NTUlUCgpOT1RFOiBUaGlzIHBhdGNoIGhhcyBiZWVuIGNvbW1pdHRlZC4KCiMg SEcgY2hhbmdlc2V0IHBhdGNoCiMgVXNlciBBaWRhbiBLZWhvZSA8a2Vob2VhQHBhcmhhc2FyZC5u ZXQ+CiMgRGF0ZSAxNDY3MjQzNjk5IC0zNjAwCiMgICAgICBUaHUgSnVuIDMwIDAwOjQxOjM5IDIw MTYgKzAxMDAKIyBOb2RlIElEIDE3YTNjNmI1MmRmZGM5ZWQ1M2JmYTMxNDNkMGViNTY1Y2RmYzcz NzcKIyBQYXJlbnQgIGNiZTEwNzE0MWFmZTVhN2UwOGFmYmJjYjZjZDU0NTc5M2UzNmFjMDYKSW1w cm92ZSB0aGUgYWxnb3JpdGhtaWMgY29tcGxleGl0eSBvZiAjJ2NvbmNhdCwgbW92ZSAjJ2NvbmNh dGVuYXRlIHRvIEMuCgpzcmMvQ2hhbmdlTG9nIGFkZGl0aW9uOgoKMjAxNi0wNi0zMCAgQWlkYW4g S2Vob2UgIDxrZWhvZWFAcGFyaGFzYXJkLm5ldD4KCglNb3ZlICMnY29uY2F0ZW5hdGUgdG8gQywg aW1wcm92ZSB0aGUgaW1wbGVtZW50YXRpb24gYW5kCglhbGdvcml0aG1pYyBjb21wbGV4aXR5IG9m ICMnY29uY2F0LgoJKiBieXRlY29kZS5jOgoJKiBldmVudC1tc3cuYyAoZGRlX2V2YWxfc3RyaW5n KToKCSogZ2MuYyAoc2hvd19nY19jdXJzb3JfYW5kX21lc3NhZ2UpOgoJKiBnYy5jIChyZW1vdmVf Z2NfY3Vyc29yX2FuZF9tZXNzYWdlKToKCSogZ3V0dGVyLmMgKGNvbnN0cnVjdF93aW5kb3dfZ3V0 dGVyX3NwZWMpOgoJKiB0bHMuYyAoZ251dGxzX3BrMTFfcGFzc3dvcmQpOgoJKiB0bHMuYyAob3Bl bnNzbF9lcnJvcl9zdHJpbmcpOgoJQ2FsbCBjb25jYXRlbmF0ZSgpLCBub3QgRmNvbmNhdCgpLCBp biB0aGVzZSBmaWxlcy4KCgkqIGZucy5jIChjb25jYXQyLCBjb25jYXQzLCB2Y29uY2F0MiwgdmNv bmNhdDMsIEZhcHBlbmQsIEZjb25jYXQpOgoJTW92ZSB0aGVzZSB0byBzZXF1ZW5jZS5jCgkqIGZu cy5jIChjb3B5X2xpc3QpOgoJQ2FsbCBjb25jYXRlbmF0ZSgpIGhlcmUsIG5vdCBjb25jYXQoKS4K CSogZm5zLmMgKEFsc28gc2VlKTogUmVtb3ZlZC4KCSogZm5zLmMgKEZjb3B5X3NlcXVlbmNlKToK CSogZm5zLmMgKEZjb3B5X2FsaXN0KToKCSogZm5zLmMgKGFyZ3VtZW50cyk6IFJlbW92ZWQuCgkq IGZucy5jIChuY29uYzIpOgoJYnl0ZWNvZGVfbmNvbmMyKCkgbm93IGRvZXMgaXRzIG93biBHQ2lu Zywgbm8gbmVlZCBmb3IgdXMgdG8uCgkqIGZucy5jIChieXRlY29kZV9uY29uYzIpOgoJR0NQUk8g aW4gdGhpcyBmdW5jdGlvbiwgZG9jdW1lbnQgd2h5LgoJKiBmbnMuYyAoRm5jb25jKToKCURvbid0 IEdDUFJPIGluIHRoaXMgZnVuY3Rpb24sIGl0IGlzIG5vdCBjYWxsZWQgZnJvbSBDLCBhbmQgYW55 CglMaXNwIGNhbGxzIHdpbGwgaGF2ZSB0aGVpciBhcmd1bWVudHMgR0NQUk9kIGF1dG9tYXRpY2Fs bHkuCgkqIGZucy5jIChzeW1zX29mX2Zucyk6CglNb3ZlIEZhcHBlbmQgdG8gc2VxdWVuY2UuYzsg bW92ZSAjJ2NvbmNhdCwgIyd2Y29uY2F0LCAjJ2J2Y29uY2F0Cgl0byBzdWJyLmVsLgoJKiBnZW5l cmFsLXNsb3RzLmg6CglNb3ZlICdiaXQtdmVjdG9yLCAndmVjdG9yIGhlcmUuCgkqIGxpc3AuaDoK CURlY2xhcmUgY29uY2F0ZW5hdGUoKSwgdGhlIGhlYXZ5IGxpZnRpbmcgb2YgIydjb25jYXQuCgkq IHNlcXVlbmNlLmM6CgkqIHNlcXVlbmNlLmMgKEZtYXBjb25jYXQpOgoJQ2FsbCBjb25jYXRlbmF0 ZSgpIHJhdGhlciB0aGFuIEZjb25jYXQoKS4KCSogc2VxdWVuY2UuYyAoRm1hcGNhbik6CglHQ1BS TyB0aGUgYXJndW1lbnRzIHRvIEZuY29uYygpIG91cnNlbHZlcyBoZXJlLgoJKiBzZXF1ZW5jZS5j IChzdHJ1Y3QgbWVyZ2Vfc3RyaW5nX2V4dGVudHNfc3RydWN0KToKCU1vdmUgdGhpcyBoZXJlIGZy b20gZm5zLmMoKS4KCSogc2VxdWVuY2UuYyAoY29uY2F0ZW5hdGUpOgoJUmUtaW1wbGVtZW50IGNv bmNhdCgpLCBwcmV2aW91c2x5IGluIGZucy5jLCBpbiB0aGlzIGZpbGU7IHVzZSBhCgltdWNoIGNo ZWFwZXIgYWxnb3JpdGhtIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgYWxsLXN0cmluZyBhcmd1bWVu dHMgYW5kCglhIHN0cmluZyByZXN1bHQsIHVzZSBhIGNoZWFwZXIgYWxnb3JpdGhtIGZvciBhcHBl bmQoKSwgb25seQoJdHJhdmVyc2luZyBsaXN0cyBhbmQgc3RyaW5ncyBvbmNlLCBjYWxsICMnY29l cmNlIGFzIG5lY2Vzc2FyeS4KCSogc2VxdWVuY2UuYyAoRmNvbmNhdGVuYXRlKToKCU1ha2UgY29u Y2F0ZW5hdGUoKSBhdmFpbGFibGUgdG8gTGlzcC4KCSogc2VxdWVuY2UuYyAoY29uY2F0MiwgY29u Y2F0MywgdmNvbmNhdDIsIHZjb25jYXQzKTogTW92ZWQgaGVyZQoJZnJvbSBmbnMuYy4KCSogc2Vx dWVuY2UuYyAoRmFwcGVuZCk6IE1vdmVkIGhlcmUgZnJvbSBmbnMuYywgaW1wbGVtZW50ZWQgaW4K CXRlcm1zIG9mIGNvbmNhdGVuYXRlKCkuCgkqIHNlcXVlbmNlLmMgKHN5bXNfb2Zfc2VxdWVuY2Up OgoJTWFrZSBzb21lIHN1YnJzIGF2YWlsYWJsZSBoZXJlLCBtb3ZlIHNvbWUgc3ltYm9scyB0bwoJ Z2VuZXJhbC1zbG90cy5oLgoKbGlzcC9DaGFuZ2VMb2cgYWRkaXRpb246CgoyMDE2LTA2LTMwICBB aWRhbiBLZWhvZSAgPGtlaG9lYUBwYXJoYXNhcmQubmV0PgoKCSogY2wtZXh0cmEuZWwgKGNvbmNh dGVuYXRlKTogSW1wbGVtZW50ICMnY29uY2F0ZW5hdGUgaW4KCXNlcXVlbmNlLmMsIGltcGxlbWVu dCAjJ2NvbmNhdCwgIyd2Y29uY2F0LCAjJ2J2Y29uY2F0IGluIHRlcm1zIG9mCglpdCByYXRoZXIg dGhhbiB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KCgkqIGZpbmQtcGF0aHMuZWwgKHBhdGhzLW5vLWxp c3AtZGlyZWN0b3J5LXJlZ2V4cCk6CgkqIGZpbmQtcGF0aHMuZWwgKHBhdGhzLWNvbnN0cnVjdC1w YXRoKToKCSogZmluZC1wYXRocy5lbCAocGF0aHMtY29uc3RydWN0LWVtYWNzLWRpcmVjdG9yeSk6 CgkqIGZpbmQtcGF0aHMuZWwgKGNvbnN0cnVjdC1lbWFjcy12ZXJzaW9uLW5hbWUpOgoJKiBmaW5k LXBhdGhzLmVsIChwYXRocy1kaXJlY3Rvcmllcy13aGljaC1leGlzdCk6CgkqIGxvYWR1cC5lbCAo cmVhbGx5LWVhcmx5LWVycm9yLWhhbmRsZXIpOgoJKiBtYWtlLWRvY2ZpbGUuZWwgKHByb2Nlc3Mt YXJncyk6CgkqIHBhY2thZ2VzLmVsIChwYWNrYWdlcy1hZGQtc3VmZml4KToKCSogcGFja2FnZXMu ZWwgKHBhY2thZ2VzLWxpc3QtYXV0b2xvYWRzLXBhdGgpOgoJKiB1cGRhdGUtZWxjLmVsIChwcmVs b2FkZWQtZmlsZS1saXN0KToKCSogdXBkYXRlLWVsYy5lbCAoZG8tYXV0b2xvYWQtY29tbWFuZHMp OgoJVXNlICMnY29uY2F0ZW5hdGUgcmF0aGVyIHRoYW4gIydjb25jYXQgaW4gdGhlc2UgZmlsZXMg cnVuIGF0IGJ1aWxkCgl0aW1lLCB3aGVyZSAjJ2NvbmNhdCdzIG5ldyBpbXBsZW1lbnRhdGlvbiBm cm9tIHN1YnIuZWwgaXMgbm90CglhdmFpbGFibGUuCgkqIHN1YnIuZWw6CgkqIHN1YnIuZWwgKGNv bmNhdCk6IE1vdmVkIGhlcmUgZnJvbSBmbnMuYy4KCSogc3Vici5lbCAodmNvbmNhdCk6IE1vdmVk IGhlcmUgZnJvbSBmbnMuYy4KCSogc3Vici5lbCAoYnZjb25jYXQpOiBNb3ZlZCBoZXJlIGZyb20g Zm5zLmMuCglJbXBsZW1lbnQgYWxsIHRocmVlIGluIHRlcm1zIG9mICMnY29uY2F0ZW5hdGUuIE1h aW50YWluIHRoZQoJIydjb25jYXQgYnl0ZWNvZGUgZm9yIHRoZSBtb21lbnQuCgpkaWZmIC1yIGNi ZTEwNzE0MWFmZSAtciAxN2EzYzZiNTJkZmQgbGlzcC9DaGFuZ2VMb2cKLS0tIGEvbGlzcC9DaGFu Z2VMb2cJVGh1IEp1biAzMCAwMDowNjozOCAyMDE2ICswMTAwCisrKyBiL2xpc3AvQ2hhbmdlTG9n CVRodSBKdW4gMzAgMDA6NDE6MzkgMjAxNiArMDEwMApAQCAtMSwzICsxLDMwIEBACisyMDE2LTA2 LTMwICBBaWRhbiBLZWhvZSAgPGtlaG9lYUBwYXJoYXNhcmQubmV0PgorCisJKiBjbC1leHRyYS5l bCAoY29uY2F0ZW5hdGUpOiBJbXBsZW1lbnQgIydjb25jYXRlbmF0ZSBpbgorCXNlcXVlbmNlLmMs IGltcGxlbWVudCAjJ2NvbmNhdCwgIyd2Y29uY2F0LCAjJ2J2Y29uY2F0IGluIHRlcm1zIG9mCisJ aXQgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSBhcm91bmQuCisKKwkqIGZpbmQtcGF0aHMuZWwg KHBhdGhzLW5vLWxpc3AtZGlyZWN0b3J5LXJlZ2V4cCk6CisJKiBmaW5kLXBhdGhzLmVsIChwYXRo cy1jb25zdHJ1Y3QtcGF0aCk6CisJKiBmaW5kLXBhdGhzLmVsIChwYXRocy1jb25zdHJ1Y3QtZW1h Y3MtZGlyZWN0b3J5KToKKwkqIGZpbmQtcGF0aHMuZWwgKGNvbnN0cnVjdC1lbWFjcy12ZXJzaW9u LW5hbWUpOgorCSogZmluZC1wYXRocy5lbCAocGF0aHMtZGlyZWN0b3JpZXMtd2hpY2gtZXhpc3Qp OgorCSogbG9hZHVwLmVsIChyZWFsbHktZWFybHktZXJyb3ItaGFuZGxlcik6CisJKiBtYWtlLWRv Y2ZpbGUuZWwgKHByb2Nlc3MtYXJncyk6CisJKiBwYWNrYWdlcy5lbCAocGFja2FnZXMtYWRkLXN1 ZmZpeCk6CisJKiBwYWNrYWdlcy5lbCAocGFja2FnZXMtbGlzdC1hdXRvbG9hZHMtcGF0aCk6CisJ KiB1cGRhdGUtZWxjLmVsIChwcmVsb2FkZWQtZmlsZS1saXN0KToKKwkqIHVwZGF0ZS1lbGMuZWwg KGRvLWF1dG9sb2FkLWNvbW1hbmRzKToKKwlVc2UgIydjb25jYXRlbmF0ZSByYXRoZXIgdGhhbiAj J2NvbmNhdCBpbiB0aGVzZSBmaWxlcyBydW4gYXQgYnVpbGQKKwl0aW1lLCB3aGVyZSAjJ2NvbmNh dCdzIG5ldyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN1YnIuZWwgaXMgbm90CisJYXZhaWxhYmxlLgor CSogc3Vici5lbDoKKwkqIHN1YnIuZWwgKGNvbmNhdCk6IE1vdmVkIGhlcmUgZnJvbSBmbnMuYy4K KwkqIHN1YnIuZWwgKHZjb25jYXQpOiBNb3ZlZCBoZXJlIGZyb20gZm5zLmMuCisJKiBzdWJyLmVs IChidmNvbmNhdCk6IE1vdmVkIGhlcmUgZnJvbSBmbnMuYy4KKwlJbXBsZW1lbnQgYWxsIHRocmVl IGluIHRlcm1zIG9mICMnY29uY2F0ZW5hdGUuIE1haW50YWluIHRoZQorCSMnY29uY2F0IGJ5dGVj b2RlIGZvciB0aGUgbW9tZW50LgorCiAyMDE2LTAxLTA0ICBTdGVwaGVuIEouIFR1cm5idWxsICA8 c3RlcGhlbkB4ZW1hY3Mub3JnPgogCiAJKiBjbC1zZXEuZWwgKGRlbGV0ZS1pZik6IEZpeCB0eXBv IGluIGRvY3N0cmluZy4KZGlmZiAtciBjYmUxMDcxNDFhZmUgLXIgMTdhM2M2YjUyZGZkIGxpc3Av Y2wtZXh0cmEuZWwKLS0tIGEvbGlzcC9jbC1leHRyYS5lbAlUaHUgSnVuIDMwIDAwOjA2OjM4IDIw MTYgKzAxMDAKKysrIGIvbGlzcC9jbC1leHRyYS5lbAlUaHUgSnVuIDMwIDAwOjQxOjM5IDIwMTYg KzAxMDAKQEAgLTM2NCwxNyArMzY0LDcgQEAKIAogOzs7IFNlcXVlbmNlIGZ1bmN0aW9ucy4KIAot OzsgWEVtYWNzOyAjJ3N1YnNlcSBpcyBpbiBDLgotCi0oZGVmdW4gY29uY2F0ZW5hdGUgKHR5cGUg JnJlc3Qgc2VxcykKLSAgIkNvbmNhdGVuYXRlLCBpbnRvIGEgc2VxdWVuY2Ugb2YgdHlwZSBUWVBF LCB0aGUgYXJndW1lbnQgU0VRVUVOQ0VTLiIKLSAgOzsgWEVtYWNzIGNoYW5nZTogdXNlIGNhc2Ug aW5zdGVhZCBvZiBjb25kIGZvciBjbGFyaXR5Ci0gIChjYXNlIHR5cGUKLSAgICAodmVjdG9yIChh cHBseSAndmNvbmNhdCBzZXFzKSkKLSAgICAoc3RyaW5nIChhcHBseSAnY29uY2F0IHNlcXMpKQot ICAgIChsaXN0ICAgKHJlZHVjZSAnYXBwZW5kIHNlcXMgOmZyb20tZW5kIHQgOmluaXRpYWwtdmFs dWUgbmlsKSkKLSAgICAoYml0LXZlY3RvciAoYXBwbHkgJ2J2Y29uY2F0IHNlcXMpKQotICAgICh0 IChjb2VyY2UgKHJlZHVjZSAnYXBwZW5kIHNlcXMgOmZyb20tZW5kIHQgOmluaXRpYWwtdmFsdWUg bmlsKSB0eXBlKSkpKQorOzsgWEVtYWNzOyAjJ3N1YnNlcSwgIydjb25jYXRlbmF0ZSBhcmUgaW4g Qy4KIAogOzs7IExpc3QgZnVuY3Rpb25zLgogCmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNj NmI1MmRmZCBsaXNwL2ZpbmQtcGF0aHMuZWwKLS0tIGEvbGlzcC9maW5kLXBhdGhzLmVsCVRodSBK dW4gMzAgMDA6MDY6MzggMjAxNiArMDEwMAorKysgYi9saXNwL2ZpbmQtcGF0aHMuZWwJVGh1IEp1 biAzMCAwMDo0MTozOSAyMDE2ICswMTAwCkBAIC00NSw5ICs0NSwxMCBAQAogICAiRmlsZSBiYXNl cyB0aGF0IG5hbWUgRW1hY3MgTGlzcCBmaWxlcy4iKQogCiAoZGVmdmFyIHBhdGhzLW5vLWxpc3At ZGlyZWN0b3J5LXJlZ2V4cAotICAoY29uY2F0ICJcXCgiIHBhdGhzLXZlcnNpb24tY29udHJvbC1m aWxlbmFtZS1yZWdleHAgIlxcKSIKLQkgICJcXHwiCi0JICAiXFwoIiBwYXRocy1saXNwLWZpbGVu YW1lLXJlZ2V4cCAiXFwpIikKKyAgKGNvbmNhdGVuYXRlICdzdHJpbmcKKyAgICAgICAgICAgICAg ICJcXCgiIHBhdGhzLXZlcnNpb24tY29udHJvbC1maWxlbmFtZS1yZWdleHAgIlxcKSIKKyAgICAg ICAgICAgICAgICJcXHwiCisgICAgICAgICAgICAgICAiXFwoIiBwYXRocy1saXNwLWZpbGVuYW1l LXJlZ2V4cCAiXFwpIikKICAgIkZpbGUgYmFzZXMgdGhhdCBtYXkgbm90IGJlIGRpcmVjdG9yaWVz IGNvbnRhaW5pbmcgTGlzcCBjb2RlLiIpCiAKIChkZWZ1biBwYXRocy1maW5kLXJlY3Vyc2l2ZS1w YXRoIChkaXJlY3RvcmllcyAmb3B0aW9uYWwgbWF4LWRlcHRoIGV4Y2x1ZGUtcmVnZXhwKQpAQCAt MTExLDEzICsxMTIsMTUgQEAKICAgIkNvbnZlcnQgbGlzdCBvZiBwYXRoIGNvbXBvbmVudHMgQ09N UE9ORU5UUyBpbnRvIGEgcGF0aC4KIElmIEVYUEFORC1ESVJFQ1RPUlkgaXMgbm9uLU5JTCwgdXNl IGl0IGFzIGEgZGlyZWN0b3J5IHRvIGZlZWQKIHRvIEVYUEFORC1GSUxFLU5BTUUuIgotICAobGV0 KiAoKHJldmVyc2UtY29tcG9uZW50cyAocmV2ZXJzZSBjb21wb25lbnRzKSkKLQkgKGxhc3QtY29t cG9uZW50IChjYXIgcmV2ZXJzZS1jb21wb25lbnRzKSkKLQkgKGZpcnN0LWNvbXBvbmVudHMgKHJl dmVyc2UgKGNkciByZXZlcnNlLWNvbXBvbmVudHMpKSkKLQkgKHBhdGgKLQkgIChhcHBseSAjJ2Nv bmNhdAotCQkgKGFwcGVuZCAobWFwY2FyICMnZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSBmaXJzdC1j b21wb25lbnRzKQotCQkJIChsaXN0IGxhc3QtY29tcG9uZW50KSkpKSkKKyAgKGxldCAoKHBhdGgK KwkgKG1hcGNvbmNhdAorCSAgIydpZGVudGl0eSAKKwkgIChyZWR1Y2UgIydjb25zIGNvbXBvbmVu dHMgOmtleSAjJ2ZpbGUtbmFtZS1hcy1kaXJlY3RvcnkKKwkJICA6ZnJvbS1lbmQgdCA6ZW5kICgx LSAobGVuZ3RoIGNvbXBvbmVudHMpKQorICAgICAgICAgICAgICAgICAgOzsgVGhlIGxhc3QgY29t cG9uZW50IGlzIGEgZmlsZSBuYW1lLCBkbyBub3QgdHJhbnNmb3JtIGl0CisgICAgICAgICAgICAg ICAgICA7OyB3aXRoICMnZmlsZS1uYW1lLWFzLWRpcmVjdG9yeS4KKwkJICA6aW5pdGlhbC12YWx1 ZSAobGFzdCBjb21wb25lbnRzKSkKKwkgICIiKSkpCiAgICAgKGlmIGV4cGFuZC1kaXJlY3RvcnkK IAkoZXhwYW5kLWZpbGUtbmFtZSBwYXRoIGV4cGFuZC1kaXJlY3RvcnkpCiAgICAgICBwYXRoKSkp CkBAIC0xMjksMTAgKzEzMiw3IEBACiBCQVNFIGlzIHRoZSBiYXNlIHRvIGxvb2sgZm9yLiIKICAg KGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkKICAgIChleHBhbmQtZmlsZS1uYW1lCi0gICAgKGNvbmNh dAotICAgICAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSByb290KQotICAgICBzdWZmaXgKLSAgICAg YmFzZSkpKSkKKyAgICAoY29uY2F0ZW5hdGUgJ3N0cmluZyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9y eSByb290KSBzdWZmaXggYmFzZSkpKSkKIAogCiAoZGVmdW4gcGF0aHMtZm9yLWVhY2gtZW1hY3Mt ZGlyZWN0b3J5IChmdW5jCkBAIC0zMzYsNyArMzM2LDcgQEAKIAogKGRlZnVuIGNvbnN0cnVjdC1l bWFjcy12ZXJzaW9uLW5hbWUgKCkKICAgIkNvbnN0cnVjdCBhIHN0cmluZyBmcm9tIHRoZSByYXcg WEVtYWNzIHZlcnNpb24gbnVtYmVyLiIKLSAgKGNvbmNhdCBlbWFjcy1wcm9ncmFtLW5hbWUgIi0i IGVtYWNzLXByb2dyYW0tdmVyc2lvbikpCisgIChjb25jYXRlbmF0ZSAnc3RyaW5nIGVtYWNzLXBy b2dyYW0tbmFtZSAiLSIgZW1hY3MtcHJvZ3JhbS12ZXJzaW9uKSkKIAogKGRlZnVuIHBhdGhzLWRp cmVjdG9yaWVzLXdoaWNoLWV4aXN0IChkaXJlY3RvcmllcykKICAgIlJldHVybiB0aGUgZGlyZWN0 b3JpZXMgYW1vbmcgRElSRUNUT1JJRVMuCmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNjNmI1 MmRmZCBsaXNwL2xvYWR1cC5lbAotLS0gYS9saXNwL2xvYWR1cC5lbAlUaHUgSnVuIDMwIDAwOjA2 OjM4IDIwMTYgKzAxMDAKKysrIGIvbGlzcC9sb2FkdXAuZWwJVGh1IEp1biAzMCAwMDo0MTozOSAy MDE2ICswMTAwCkBAIC0xMTYsNyArMTE2LDcgQEAKIAk7OyAjIyMjIFRoaXMgY29kZSBpcyBkdXBs aWNhdGVkIGluIHR3byBvdGhlciBwbGFjZXMuCiAJKGxldCAoKHRlbXAtcGF0aCAoZXhwYW5kLWZp bGUtbmFtZSAiLiIgKGNhciBsb2FkLXBhdGgpKSkpCiAJICAoc2V0cSBsb2FkLXBhdGggKG5jb25j IChtYXBjYXIKLQkJCQkgICMnKGxhbWJkYSAoaSkgKGNvbmNhdCBpICIvIikpCisJCQkJICAjJyhs YW1iZGEgKGkpIChjb25jYXRlbmF0ZSAnc3RyaW5nIGkgIi8iKSkKIAkJCQkgIChkaXJlY3Rvcnkt ZmlsZXMgdGVtcC1wYXRoIHQgIl5bXi0uXSIKIAkJCQkJCSAgIG5pbCAnZGlycy1vbmx5KSkKIAkJ CQkgKGNvbnMgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkgdGVtcC1wYXRoKQpkaWZmIC1yIGNiZTEw NzE0MWFmZSAtciAxN2EzYzZiNTJkZmQgbGlzcC9tYWtlLWRvY2ZpbGUuZWwKLS0tIGEvbGlzcC9t YWtlLWRvY2ZpbGUuZWwJVGh1IEp1biAzMCAwMDowNjozOCAyMDE2ICswMTAwCisrKyBiL2xpc3Av bWFrZS1kb2NmaWxlLmVsCVRodSBKdW4gMzAgMDA6NDE6MzkgMjAxNiArMDEwMApAQCAtMTE4LDEw ICsxMTgsMTEgQEAKIAkJICAgKG5vdCAobWVtYmVyIGFyZyBwcm9jZXNzZWQpKSkKIAkgICh3aGVu IChzdHJpbmctbWF0Y2ggIlxcKC4qXFwpXFwub2JqJCIgYXJnKQogCSAgICAoc2V0cSBhcmcgKGV4 cGFuZC1maWxlLW5hbWUKLQkJICAgICAgIChjb25jYXQgCi0JCQkoZmlsZS1uYW1lLW5vbmRpcmVj dG9yeQotCQkJIDs7IG5vIG1hdGNoLXN0cmluZyBzbyB1c2UgaXRzIGltcGxlbWVudGF0aW9uLgot CQkJIChzdWJzZXEgYXJnIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkpCisJCSAg ICAgICAoY29uY2F0ZW5hdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcgCisgICAg ICAgICAgICAgICAgICAgICAgICAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeQorICAgICAgICAgICAg ICAgICAgICAgICAgIDs7IG5vIG1hdGNoLXN0cmluZyBzbyB1c2UgaXRzIGltcGxlbWVudGF0aW9u LgorICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJzZXEgYXJnIChtYXRjaC1iZWdpbm5pbmcg MSkgKG1hdGNoLWVuZCAxKSkpCiAJCQkiLmMiKQogCQkgICAgICAgc291cmNlLXNyYykpKQogCSAg KGlmIChhbmQgKG51bGwgZG9jZmlsZS1vdXQtb2YtZGF0ZSkKZGlmZiAtciBjYmUxMDcxNDFhZmUg LXIgMTdhM2M2YjUyZGZkIGxpc3AvcGFja2FnZXMuZWwKLS0tIGEvbGlzcC9wYWNrYWdlcy5lbAlU aHUgSnVuIDMwIDAwOjA2OjM4IDIwMTYgKzAxMDAKKysrIGIvbGlzcC9wYWNrYWdlcy5lbAlUaHUg SnVuIDMwIDAwOjQxOjM5IDIwMTYgKzAxMDAKQEAgLTE4MCw3ICsxODAsNyBAQAogCiAoZGVmdW4g cGFja2FnZXMtYWRkLXN1ZmZpeCAoc3RyKQogICAoaWYgKG51bGwgKHN0cmluZy1tYXRjaCAiXFwu ZWxcXCciIHN0cikpCi0gICAgICAoY29uY2F0IHN0ciAiLmVsYyIpCisgICAgICAoY29uY2F0ZW5h dGUgJ3N0cmluZyBzdHIgIi5lbGMiKQogICAgIHN0cikpCiAKIChkZWZ1biBwYWNrYWdlcy1saXN0 LWF1dG9sb2Fkcy1wYXRoICgpCmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNjNmI1MmRmZCBs aXNwL3N1YnIuZWwKLS0tIGEvbGlzcC9zdWJyLmVsCVRodSBKdW4gMzAgMDA6MDY6MzggMjAxNiAr MDEwMAorKysgYi9saXNwL3N1YnIuZWwJVGh1IEp1biAzMCAwMDo0MTozOSAyMDE2ICswMTAwCkBA IC0yMDIsNiArMjAyLDI5IEBACiAgICAgICAgICAgICh0aGUgKGFuZCBsaXN0IChzYXRpc2ZpZXMg KGxhbWJkYSAobGlzdCkgKGV2ZXJ5ICdzdHJpbmdwIGxpc3QpKSkpCiAgICAgICAgICAgICAgICAg bGlzdCkKICAgICAgICAgICAgOnRlc3QgJ2VxdWFscCkpCisKKyhkZWZ1biBjb25jYXQgKCZyZXN0 IGFyZ3MpCisgICJDb25jYXRlbmF0ZSBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgbWFrZSB0aGUgcmVz dWx0IGEgc3RyaW5nLgorVGhlIHJlc3VsdCBpcyBhIHN0cmluZyB3aG9zZSBlbGVtZW50cyBhcmUg dGhlIGVsZW1lbnRzIG9mIGFsbCB0aGUgYXJndW1lbnRzLgorRWFjaCBhcmd1bWVudCBtYXkgYmUg YSBzdHJpbmcgb3IgYSBsaXN0IG9yIHZlY3RvciBvZiBjaGFyYWN0ZXJzLgorCitBcyBvZiBYRW1h Y3MgMjEuMCwgdGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBhY2NlcHQgaW5kaXZpZHVhbCBpbnRlZ2Vy cworYXMgYXJndW1lbnRzLiAgT2xkIGNvZGUgdGhhdCByZWxpZXMgb24sIGZvciBleGFtcGxlLCAo Y29uY2F0IFwiZm9vXCIgNTApCityZXR1cm5pbmcgXCJmb281MFwiIHdpbGwgZmFpbC4gIFRvIGZp eCBzdWNoIGNvZGUsIGVpdGhlciBhcHBseQorYGludC10by1zdHJpbmcnIHRvIHRoZSBpbnRlZ2Vy IGFyZ3VtZW50LCBvciB1c2UgYGZvcm1hdCcuIgorICAoYXBwbHkgIydjb25jYXRlbmF0ZSAnc3Ry aW5nIGFyZ3MpKQorCisoZGVmdW4gdmNvbmNhdCAoJnJlc3QgYXJncykKKyAgIkNvbmNhdGVuYXRl IGFsbCB0aGUgYXJndW1lbnRzIGFuZCBtYWtlIHRoZSByZXN1bHQgYSB2ZWN0b3IuCitUaGUgcmVz dWx0IGlzIGEgdmVjdG9yIHdob3NlIGVsZW1lbnRzIGFyZSB0aGUgZWxlbWVudHMgb2YgYWxsIHRo ZSBhcmd1bWVudHMuCitFYWNoIGFyZ3VtZW50IG1heSBiZSBhIGxpc3QsIHZlY3RvciwgYml0IHZl Y3Rvciwgb3Igc3RyaW5nLiIKKyAgKGFwcGx5ICMnY29uY2F0ZW5hdGUgJ3ZlY3RvciBhcmdzKSkK KworKGRlZnVuIGJ2Y29uY2F0ICgmcmVzdCBhcmdzKQorICAiQ29uY2F0ZW5hdGUgYWxsIHRoZSBh cmd1bWVudHMgYW5kIG1ha2UgdGhlIHJlc3VsdCBhIGJpdCB2ZWN0b3IuCitUaGUgcmVzdWx0IGlz IGEgYml0IHZlY3RvciB3aG9zZSBlbGVtZW50cyBhcmUgdGhlIGVsZW1lbnRzIG9mIGFsbCB0aGUK K2FyZ3VtZW50cy4gIEVhY2ggYXJndW1lbnQgbWF5IGJlIGEgbGlzdCwgdmVjdG9yLCBiaXQgdmVj dG9yLCBvciBzdHJpbmcuIgorICAoYXBwbHkgIydjb25jYXRlbmF0ZSAnYml0LXZlY3RvciBhcmdz KSkKIAwKIDs7OzsgS2V5bWFwIHN1cHBvcnQuCiA7OyBYRW1hY3M6IHJlbW92ZWQgdG8ga2V5bWFw LmVsCmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNjNmI1MmRmZCBsaXNwL3VwZGF0ZS1lbGMu ZWwKLS0tIGEvbGlzcC91cGRhdGUtZWxjLmVsCVRodSBKdW4gMzAgMDA6MDY6MzggMjAxNiArMDEw MAorKysgYi9saXNwL3VwZGF0ZS1lbGMuZWwJVGh1IEp1biAzMCAwMDo0MTozOSAyMDE2ICswMTAw CkBAIC0yMTcsOCArMjE3LDggQEAKICAgICAgICAgICAgICAgICAgIDs7ICAgICAgICAgICAgICAg IGludm9jYXRpb24tZGlyZWN0b3J5IGludm9jYXRpb24tbmFtZSkpKQogCQkgIChraWxsLWVtYWNz KSkKIAkgICAgICAodXBkYXRlLWVsYy1jaG9wLWV4dGVuc2lvbiBmdWxsLWFyZykpKQotCSAgIChm dWxsLWFyZy1lbCAoY29uY2F0IGZ1bGwtYXJnLXNhbnMtZXh0ZW5zaW9uICIuZWwiKSkKLQkgICAo ZnVsbC1hcmctZWxjIChjb25jYXQgZnVsbC1hcmctc2Fucy1leHRlbnNpb24gIi5lbGMiKSkKKwkg ICAoZnVsbC1hcmctZWwgKGNvbmNhdGVuYXRlICdzdHJpbmcgZnVsbC1hcmctc2Fucy1leHRlbnNp b24gIi5lbCIpKQorCSAgIChmdWxsLWFyZy1lbGMgKGNvbmNhdGVuYXRlICdzdHJpbmcgZnVsbC1h cmctc2Fucy1leHRlbnNpb24gIi5lbGMiKSkKIAkgICAoZnVsbC1hcmctZGlyIChmaWxlLW5hbWUt ZGlyZWN0b3J5IGZ1bGwtYXJnLWVsKSkpCiAJICAgCiAgICAgICA7IChwcmludCBmdWxsLWFyZy1l bCkKQEAgLTM0OSwxMyArMzQ5LDE1IEBACiAJKHQKIAkgKGxldCAoKGJjLWJvb3RzdHJhcAogCQko bWFwY2FyICMnKGxhbWJkYSAoYXJnKSAKLQkJCSAgICAoY29uY2F0ICh1cGRhdGUtZWxjLWNob3At ZXh0ZW5zaW9uCi0JCQkJICAgICAobG9jYXRlLWxpYnJhcnkgYXJnKSkgIi5lbCIpKQorCQkJICAg IChjb25jYXRlbmF0ZSAnc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICh1cGRhdGUtZWxjLWNob3AtZXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9jYXRlLWxpYnJhcnkgYXJnKSkgIi5lbCIpKQogCQkJbGlz cC1maWxlcy1uZWVkZWQtZm9yLWJ5dGUtY29tcGlsYXRpb24pKQogCSAgICAgICAoYm9vdHN0cmFw LW90aGVyCiAJCShtYXBjYXIgIycobGFtYmRhIChhcmcpIAotCQkJICAgIChjb25jYXQgKHVwZGF0 ZS1lbGMtY2hvcC1leHRlbnNpb24KLQkJCQkgICAgIChsb2NhdGUtbGlicmFyeSBhcmcpKSAiLmVs IikpCisJCQkgICAgKGNvbmNhdGVuYXRlICdzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHVwZGF0ZS1lbGMtY2hvcC1leHRlbnNpb24KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhdGUtbGlicmFyeSBhcmcpKSAiLmVs IikpCiAJCQlsaXNwLWZpbGVzLW5lZWRpbmctZWFybHktYnl0ZS1jb21waWxhdGlvbikpKQogCSAg IChzZXRxIGluaGliaXQtYXV0b2xvYWRzIHQpCiAJICAgOzsgaWYgYnl0ZWNvbXAgb3IgYnl0ZS1v cHRpbWl6ZSBuZWVkIHJlY29tcGlsaW5nLCB0aGVuIGxvYWQKZGlmZiAtciBjYmUxMDcxNDFhZmUg LXIgMTdhM2M2YjUyZGZkIHNyYy9DaGFuZ2VMb2cKLS0tIGEvc3JjL0NoYW5nZUxvZwlUaHUgSnVu IDMwIDAwOjA2OjM4IDIwMTYgKzAxMDAKKysrIGIvc3JjL0NoYW5nZUxvZwlUaHUgSnVuIDMwIDAw OjQxOjM5IDIwMTYgKzAxMDAKQEAgLTEsMyArMSw2MCBAQAorMjAxNi0wNi0zMCAgQWlkYW4gS2Vo b2UgIDxrZWhvZWFAcGFyaGFzYXJkLm5ldD4KKworCU1vdmUgIydjb25jYXRlbmF0ZSB0byBDLCBp bXByb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQKKwlhbGdvcml0aG1pYyBjb21wbGV4aXR5IG9m ICMnY29uY2F0LgorCSogYnl0ZWNvZGUuYzoKKwkqIGV2ZW50LW1zdy5jIChkZGVfZXZhbF9zdHJp bmcpOgorCSogZ2MuYyAoc2hvd19nY19jdXJzb3JfYW5kX21lc3NhZ2UpOgorCSogZ2MuYyAocmVt b3ZlX2djX2N1cnNvcl9hbmRfbWVzc2FnZSk6CisJKiBndXR0ZXIuYyAoY29uc3RydWN0X3dpbmRv d19ndXR0ZXJfc3BlYyk6CisJKiB0bHMuYyAoZ251dGxzX3BrMTFfcGFzc3dvcmQpOgorCSogdGxz LmMgKG9wZW5zc2xfZXJyb3Jfc3RyaW5nKToKKwlDYWxsIGNvbmNhdGVuYXRlKCksIG5vdCBGY29u Y2F0KCksIGluIHRoZXNlIGZpbGVzLgorCisJKiBmbnMuYyAoY29uY2F0MiwgY29uY2F0MywgdmNv bmNhdDIsIHZjb25jYXQzLCBGYXBwZW5kLCBGY29uY2F0KToKKwlNb3ZlIHRoZXNlIHRvIHNlcXVl bmNlLmMKKwkqIGZucy5jIChjb3B5X2xpc3QpOgorCUNhbGwgY29uY2F0ZW5hdGUoKSBoZXJlLCBu b3QgY29uY2F0KCkuCisJKiBmbnMuYyAoQWxzbyBzZWUpOiBSZW1vdmVkLgorCSogZm5zLmMgKEZj b3B5X3NlcXVlbmNlKToKKwkqIGZucy5jIChGY29weV9hbGlzdCk6CisJKiBmbnMuYyAoYXJndW1l bnRzKTogUmVtb3ZlZC4KKwkqIGZucy5jIChuY29uYzIpOgorCWJ5dGVjb2RlX25jb25jMigpIG5v dyBkb2VzIGl0cyBvd24gR0NpbmcsIG5vIG5lZWQgZm9yIHVzIHRvLgorCSogZm5zLmMgKGJ5dGVj b2RlX25jb25jMik6CisJR0NQUk8gaW4gdGhpcyBmdW5jdGlvbiwgZG9jdW1lbnQgd2h5LgorCSog Zm5zLmMgKEZuY29uYyk6CisJRG9uJ3QgR0NQUk8gaW4gdGhpcyBmdW5jdGlvbiwgaXQgaXMgbm90 IGNhbGxlZCBmcm9tIEMsIGFuZCBhbnkKKwlMaXNwIGNhbGxzIHdpbGwgaGF2ZSB0aGVpciBhcmd1 bWVudHMgR0NQUk9kIGF1dG9tYXRpY2FsbHkuCisJKiBmbnMuYyAoc3ltc19vZl9mbnMpOgorCU1v dmUgRmFwcGVuZCB0byBzZXF1ZW5jZS5jOyBtb3ZlICMnY29uY2F0LCAjJ3Zjb25jYXQsICMnYnZj b25jYXQKKwl0byBzdWJyLmVsLgorCSogZ2VuZXJhbC1zbG90cy5oOgorCU1vdmUgJ2JpdC12ZWN0 b3IsICd2ZWN0b3IgaGVyZS4KKwkqIGxpc3AuaDoKKwlEZWNsYXJlIGNvbmNhdGVuYXRlKCksIHRo ZSBoZWF2eSBsaWZ0aW5nIG9mICMnY29uY2F0LgorCSogc2VxdWVuY2UuYzoKKwkqIHNlcXVlbmNl LmMgKEZtYXBjb25jYXQpOgorCUNhbGwgY29uY2F0ZW5hdGUoKSByYXRoZXIgdGhhbiBGY29uY2F0 KCkuCisJKiBzZXF1ZW5jZS5jIChGbWFwY2FuKToKKwlHQ1BSTyB0aGUgYXJndW1lbnRzIHRvIEZu Y29uYygpIG91cnNlbHZlcyBoZXJlLgorCSogc2VxdWVuY2UuYyAoc3RydWN0IG1lcmdlX3N0cmlu Z19leHRlbnRzX3N0cnVjdCk6CisJTW92ZSB0aGlzIGhlcmUgZnJvbSBmbnMuYygpLgorCSogc2Vx dWVuY2UuYyAoY29uY2F0ZW5hdGUpOgorCVJlLWltcGxlbWVudCBjb25jYXQoKSwgcHJldmlvdXNs eSBpbiBmbnMuYywgaW4gdGhpcyBmaWxlOyB1c2UgYQorCW11Y2ggY2hlYXBlciBhbGdvcml0aG0g Zm9yIHRoZSBjb21tb24gY2FzZSBvZiBhbGwtc3RyaW5nIGFyZ3VtZW50cyBhbmQKKwlhIHN0cmlu ZyByZXN1bHQsIHVzZSBhIGNoZWFwZXIgYWxnb3JpdGhtIGZvciBhcHBlbmQoKSwgb25seQorCXRy YXZlcnNpbmcgbGlzdHMgYW5kIHN0cmluZ3Mgb25jZSwgY2FsbCAjJ2NvZXJjZSBhcyBuZWNlc3Nh cnkuCisJKiBzZXF1ZW5jZS5jIChGY29uY2F0ZW5hdGUpOgorCU1ha2UgY29uY2F0ZW5hdGUoKSBh dmFpbGFibGUgdG8gTGlzcC4KKwkqIHNlcXVlbmNlLmMgKGNvbmNhdDIsIGNvbmNhdDMsIHZjb25j YXQyLCB2Y29uY2F0Myk6IE1vdmVkIGhlcmUKKwlmcm9tIGZucy5jLgorCSogc2VxdWVuY2UuYyAo RmFwcGVuZCk6IE1vdmVkIGhlcmUgZnJvbSBmbnMuYywgaW1wbGVtZW50ZWQgaW4KKwl0ZXJtcyBv ZiBjb25jYXRlbmF0ZSgpLgorCSogc2VxdWVuY2UuYyAoc3ltc19vZl9zZXF1ZW5jZSk6CisJTWFr ZSBzb21lIHN1YnJzIGF2YWlsYWJsZSBoZXJlLCBtb3ZlIHNvbWUgc3ltYm9scyB0bworCWdlbmVy YWwtc2xvdHMuaC4KKwogMjAxNi0wNi0yOSAgQWlkYW4gS2Vob2UgIDxrZWhvZWFAcGFyaGFzYXJk Lm5ldD4KIAogCSogYnl0ZWNvZGUuYyAoQURKVVNUX1NUQUNLX0dDUFJPKToKZGlmZiAtciBjYmUx MDcxNDFhZmUgLXIgMTdhM2M2YjUyZGZkIHNyYy9ieXRlY29kZS5jCi0tLSBhL3NyYy9ieXRlY29k ZS5jCVRodSBKdW4gMzAgMDA6MDY6MzggMjAxNiArMDEwMAorKysgYi9zcmMvYnl0ZWNvZGUuYwlU aHUgSnVuIDMwIDAwOjQxOjM5IDIwMTYgKzAxMDAKQEAgLTExODUsNyArMTE4NSw3IEBACiAJZG9f Y29uY2F0OgogCSAgRElTQ0FSRCAobiAtIDEpOwogICAgICAgICAgIFRPUF9MVkFMVUUgPSBUT1A7 IC8qIElnbm9yZSBtdWx0aXBsZSB2YWx1ZXMuICovCi0JICBUT1BfTFZBTFVFID0gRmNvbmNhdCAo biwgVE9QX0FERFJFU1MpOworCSAgVE9QX0xWQUxVRSA9IGNvbmNhdGVuYXRlIChuLCBUT1BfQURE UkVTUywgUXN0cmluZywgMCk7CiAJICBicmVhazsKIAogCmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1y IDE3YTNjNmI1MmRmZCBzcmMvZXZlbnQtbXN3LmMKLS0tIGEvc3JjL2V2ZW50LW1zdy5jCVRodSBK dW4gMzAgMDA6MDY6MzggMjAxNiArMDEwMAorKysgYi9zcmMvZXZlbnQtbXN3LmMJVGh1IEp1biAz MCAwMDo0MTozOSAyMDE2ICswMTAwCkBAIC0xNzUzLDcgKzE3NTMsNyBAQAogICBhcmdzWzBdID0g YnVpbGRfYXNjc3RyaW5nICgiKHByb2duICIpOwogICBhcmdzWzFdID0gc3RyOwogICBhcmdzWzJd ID0gYnVpbGRfYXNjc3RyaW5nICgiKSIpOwotICBzdHIgPSBGY29uY2F0ICgzLCBhcmdzKTsKKyAg c3RyID0gY29uY2F0ZW5hdGUgKDMsIGFyZ3MsIFFzdHJpbmcsIDApOwogCiAgIG9iaiA9IEZyZWFk X2Zyb21fc3RyaW5nIChzdHIsIFFuaWwsIFFuaWwpOwogICBVTkdDUFJPOwpkaWZmIC1yIGNiZTEw NzE0MWFmZSAtciAxN2EzYzZiNTJkZmQgc3JjL2ZpbGVpby5jCi0tLSBhL3NyYy9maWxlaW8uYwlU aHUgSnVuIDMwIDAwOjA2OjM4IDIwMTYgKzAxMDAKKysrIGIvc3JjL2ZpbGVpby5jCVRodSBKdW4g MzAgMDA6NDE6MzkgMjAxNiArMDEwMApAQCAtMTg0OCw3ICsxODQ4LDcgQEAKIAogCWFyZ3NbaSsr XSA9IEZjaGFyX3RvX3N0cmluZyAoVmRpcmVjdG9yeV9zZXBfY2hhcik7CiAgICAgICBhcmdzW2kr K10gPSBGZmlsZV9uYW1lX25vbmRpcmVjdG9yeSAoZmlsZW5hbWUpOwotICAgICAgbmV3bmFtZSA9 IEZjb25jYXQgKGksIGFyZ3MpOworICAgICAgbmV3bmFtZSA9IGNvbmNhdGVuYXRlIChpLCBhcmdz LCBRc3RyaW5nLCAwKTsKICAgICAgIE5VTkdDUFJPOwogICAgIH0KIApAQCAtMjA4OCw3ICsyMDg4 LDcgQEAKICAgICAgIGlmIChzdHJpbmdfYnl0ZSAobmV3bmFtZSwgWFNUUklOR19MRU5HVEggKG5l d25hbWUpIC0gMSkgIT0gJy8nKQogCWFyZ3NbaSsrXSA9IGJ1aWxkX2FzY3N0cmluZyAoIi8iKTsK ICAgICAgIGFyZ3NbaSsrXSA9IEZmaWxlX25hbWVfbm9uZGlyZWN0b3J5IChmaWxlbmFtZSk7Ci0g ICAgICBuZXduYW1lID0gRmNvbmNhdCAoaSwgYXJncyk7CisgICAgICBuZXduYW1lID0gY29uY2F0 ZW5hdGUgKGksIGFyZ3MsIFFzdHJpbmcsIDApOwogICAgICAgTlVOR0NQUk87CiAgICAgfQogCmRp ZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNjNmI1MmRmZCBzcmMvZm5zLmMKLS0tIGEvc3JjL2Zu cy5jCVRodSBKdW4gMzAgMDA6MDY6MzggMjAxNiArMDEwMAorKysgYi9zcmMvZm5zLmMJVGh1IEp1 biAzMCAwMDo0MTozOSAyMDE2ICswMTAwCkBAIC0zMjEsMTA2ICszMjEsOCBAQAogfQogCiAMCi1l bnVtICBjb25jYXRfdGFyZ2V0X3R5cGUgeyBjX2NvbnMsIGNfc3RyaW5nLCBjX3ZlY3RvciwgY19i aXRfdmVjdG9yIH07Ci1zdGF0aWMgTGlzcF9PYmplY3QgY29uY2F0IChpbnQgbmFyZ3MsIExpc3Bf T2JqZWN0ICphcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBjb25jYXRfdGFy Z2V0X3R5cGUgdGFyZ2V0X3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGFz dF9zcGVjaWFsKTsKLQotTGlzcF9PYmplY3QKLWNvbmNhdDIgKExpc3BfT2JqZWN0IHN0cmluZzEs IExpc3BfT2JqZWN0IHN0cmluZzIpCi17Ci0gIExpc3BfT2JqZWN0IGFyZ3NbMl07Ci0gIGFyZ3Nb MF0gPSBzdHJpbmcxOwotICBhcmdzWzFdID0gc3RyaW5nMjsKLSAgcmV0dXJuIGNvbmNhdCAoMiwg YXJncywgY19zdHJpbmcsIDApOwotfQotCi1MaXNwX09iamVjdAotY29uY2F0MyAoTGlzcF9PYmpl Y3Qgc3RyaW5nMSwgTGlzcF9PYmplY3Qgc3RyaW5nMiwgTGlzcF9PYmplY3Qgc3RyaW5nMykKLXsK LSAgTGlzcF9PYmplY3QgYXJnc1szXTsKLSAgYXJnc1swXSA9IHN0cmluZzE7Ci0gIGFyZ3NbMV0g PSBzdHJpbmcyOwotICBhcmdzWzJdID0gc3RyaW5nMzsKLSAgcmV0dXJuIGNvbmNhdCAoMywgYXJn cywgY19zdHJpbmcsIDApOwotfQotCi1MaXNwX09iamVjdAotdmNvbmNhdDIgKExpc3BfT2JqZWN0 IHZlYzEsIExpc3BfT2JqZWN0IHZlYzIpCi17Ci0gIExpc3BfT2JqZWN0IGFyZ3NbMl07Ci0gIGFy Z3NbMF0gPSB2ZWMxOwotICBhcmdzWzFdID0gdmVjMjsKLSAgcmV0dXJuIGNvbmNhdCAoMiwgYXJn cywgY192ZWN0b3IsIDApOwotfQotCi1MaXNwX09iamVjdAotdmNvbmNhdDMgKExpc3BfT2JqZWN0 IHZlYzEsIExpc3BfT2JqZWN0IHZlYzIsIExpc3BfT2JqZWN0IHZlYzMpCi17Ci0gIExpc3BfT2Jq ZWN0IGFyZ3NbM107Ci0gIGFyZ3NbMF0gPSB2ZWMxOwotICBhcmdzWzFdID0gdmVjMjsKLSAgYXJn c1syXSA9IHZlYzM7Ci0gIHJldHVybiBjb25jYXQgKDMsIGFyZ3MsIGNfdmVjdG9yLCAwKTsKLX0K LQotREVGVU4gKCJhcHBlbmQiLCBGYXBwZW5kLCAwLCBNQU5ZLCAwLCAvKgotQ29uY2F0ZW5hdGUg YWxsIHRoZSBhcmd1bWVudHMgYW5kIG1ha2UgdGhlIHJlc3VsdCBhIGxpc3QuCi1UaGUgcmVzdWx0 IGlzIGEgbGlzdCB3aG9zZSBlbGVtZW50cyBhcmUgdGhlIGVsZW1lbnRzIG9mIGFsbCB0aGUgYXJn dW1lbnRzLgotRWFjaCBhcmd1bWVudCBtYXkgYmUgYSBsaXN0LCB2ZWN0b3IsIGJpdCB2ZWN0b3Is IG9yIHN0cmluZy4KLVRoZSBsYXN0IGFyZ3VtZW50IGlzIG5vdCBjb3BpZWQsIGp1c3QgdXNlZCBh cyB0aGUgdGFpbCBvZiB0aGUgbmV3IGxpc3QuCi1BbHNvIHNlZTogYG5jb25jJy4KLQotYXJndW1l bnRzOiAoJnJlc3QgQVJHUykKLSovCi0gICAgICAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFy Z3MpKQotewotICByZXR1cm4gY29uY2F0IChuYXJncywgYXJncywgY19jb25zLCAxKTsKLX0KLQot REVGVU4gKCJjb25jYXQiLCBGY29uY2F0LCAwLCBNQU5ZLCAwLCAvKgotQ29uY2F0ZW5hdGUgYWxs IHRoZSBhcmd1bWVudHMgYW5kIG1ha2UgdGhlIHJlc3VsdCBhIHN0cmluZy4KLVRoZSByZXN1bHQg aXMgYSBzdHJpbmcgd2hvc2UgZWxlbWVudHMgYXJlIHRoZSBlbGVtZW50cyBvZiBhbGwgdGhlIGFy Z3VtZW50cy4KLUVhY2ggYXJndW1lbnQgbWF5IGJlIGEgc3RyaW5nIG9yIGEgbGlzdCBvciB2ZWN0 b3Igb2YgY2hhcmFjdGVycy4KLQotQXMgb2YgWEVtYWNzIDIxLjAsIHRoaXMgZnVuY3Rpb24gZG9l cyBOT1QgYWNjZXB0IGluZGl2aWR1YWwgaW50ZWdlcnMKLWFzIGFyZ3VtZW50cy4gIE9sZCBjb2Rl IHRoYXQgcmVsaWVzIG9uLCBmb3IgZXhhbXBsZSwgKGNvbmNhdCAiZm9vIiA1MCkKLXJldHVybmlu ZyAiZm9vNTAiIHdpbGwgZmFpbC4gIFRvIGZpeCBzdWNoIGNvZGUsIGVpdGhlciBhcHBseQotYGlu dC10by1zdHJpbmcnIHRvIHRoZSBpbnRlZ2VyIGFyZ3VtZW50LCBvciB1c2UgYGZvcm1hdCcuCi0K LWFyZ3VtZW50czogKCZyZXN0IEFSR1MpCi0qLwotICAgICAgIChpbnQgbmFyZ3MsIExpc3BfT2Jq ZWN0ICphcmdzKSkKLXsKLSAgcmV0dXJuIGNvbmNhdCAobmFyZ3MsIGFyZ3MsIGNfc3RyaW5nLCAw KTsKLX0KLQotREVGVU4gKCJ2Y29uY2F0IiwgRnZjb25jYXQsIDAsIE1BTlksIDAsIC8qCi1Db25j YXRlbmF0ZSBhbGwgdGhlIGFyZ3VtZW50cyBhbmQgbWFrZSB0aGUgcmVzdWx0IGEgdmVjdG9yLgot VGhlIHJlc3VsdCBpcyBhIHZlY3RvciB3aG9zZSBlbGVtZW50cyBhcmUgdGhlIGVsZW1lbnRzIG9m IGFsbCB0aGUgYXJndW1lbnRzLgotRWFjaCBhcmd1bWVudCBtYXkgYmUgYSBsaXN0LCB2ZWN0b3Is IGJpdCB2ZWN0b3IsIG9yIHN0cmluZy4KLQotYXJndW1lbnRzOiAoJnJlc3QgQVJHUykKLSovCi0g ICAgICAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpKQotewotICByZXR1cm4gY29uY2F0 IChuYXJncywgYXJncywgY192ZWN0b3IsIDApOwotfQotCi1ERUZVTiAoImJ2Y29uY2F0IiwgRmJ2 Y29uY2F0LCAwLCBNQU5ZLCAwLCAvKgotQ29uY2F0ZW5hdGUgYWxsIHRoZSBhcmd1bWVudHMgYW5k IG1ha2UgdGhlIHJlc3VsdCBhIGJpdCB2ZWN0b3IuCi1UaGUgcmVzdWx0IGlzIGEgYml0IHZlY3Rv ciB3aG9zZSBlbGVtZW50cyBhcmUgdGhlIGVsZW1lbnRzIG9mIGFsbCB0aGUKLWFyZ3VtZW50cy4g IEVhY2ggYXJndW1lbnQgbWF5IGJlIGEgbGlzdCwgdmVjdG9yLCBiaXQgdmVjdG9yLCBvciBzdHJp bmcuCi0KLWFyZ3VtZW50czogKCZyZXN0IEFSR1MpCi0qLwotICAgICAgIChpbnQgbmFyZ3MsIExp c3BfT2JqZWN0ICphcmdzKSkKLXsKLSAgcmV0dXJuIGNvbmNhdCAobmFyZ3MsIGFyZ3MsIGNfYml0 X3ZlY3RvciwgMCk7Ci19Ci0KLS8qIENvcHkgYSAocG9zc2libHkgZG90dGVkKSBsaXN0LiAgTElT VCBtdXN0IGJlIGEgY29ucy4KLSAgIENhbid0IHVzZSBjb25jYXQgKDEsICZhbGlzdCwgY19jb25z LCAwKSAtIGRvZXNuJ3QgaGFuZGxlIGRvdHRlZCBsaXN0cy4gKi8KKy8qIENvcHkgYSAocG9zc2li bHkgZG90dGVkKSBsaXN0LiAgTElTVCBtdXN0IGJlIGEgY29ucy4gIENhbid0IHVzZSBjb25jYXRl bmF0ZQorICAgKDEsICZhbGlzdCwgUWxpc3QsIDApIC0gZG9lc24ndCBoYW5kbGUgZG90dGVkIGxp c3RzLiAqLwogc3RhdGljIExpc3BfT2JqZWN0CiBjb3B5X2xpc3QgKExpc3BfT2JqZWN0IGxpc3Qp CiB7CkBAIC00NzAsMjU1ICszNzIsMTcgQEAKICAgICAgICAoc2VxdWVuY2UpKQogewogIGFnYWlu OgotICBpZiAoTklMUCAgICAgICAgKHNlcXVlbmNlKSkgcmV0dXJuIHNlcXVlbmNlOwotICBpZiAo Q09OU1AgICAgICAgKHNlcXVlbmNlKSkgcmV0dXJuIGNvcHlfbGlzdCAoc2VxdWVuY2UpOwotICBp ZiAoU1RSSU5HUCAgICAgKHNlcXVlbmNlKSkgcmV0dXJuIGNvbmNhdCAoMSwgJnNlcXVlbmNlLCBj X3N0cmluZywgICAgIDApOwotICBpZiAoVkVDVE9SUCAgICAgKHNlcXVlbmNlKSkgcmV0dXJuIGNv bmNhdCAoMSwgJnNlcXVlbmNlLCBjX3ZlY3RvciwgICAgIDApOwotICBpZiAoQklUX1ZFQ1RPUlAg KHNlcXVlbmNlKSkgcmV0dXJuIGNvbmNhdCAoMSwgJnNlcXVlbmNlLCBjX2JpdF92ZWN0b3IsIDAp OworICBpZiAoTklMUCAoc2VxdWVuY2UpKSByZXR1cm4gc2VxdWVuY2U7CisgIGlmIChDT05TUCAo c2VxdWVuY2UpKSByZXR1cm4gY29weV9saXN0IChzZXF1ZW5jZSk7CisgIGlmIChTVFJJTkdQIChz ZXF1ZW5jZSkpIHJldHVybiBjb25jYXRlbmF0ZSAoMSwgJnNlcXVlbmNlLCBRc3RyaW5nLCAwKTsK KyAgaWYgKFZFQ1RPUlAgKHNlcXVlbmNlKSkgcmV0dXJuIGNvbmNhdGVuYXRlICgxLCAmc2VxdWVu Y2UsIFF2ZWN0b3IsIDApOworICBpZiAoQklUX1ZFQ1RPUlAgKHNlcXVlbmNlKSkKKyAgICByZXR1 cm4gY29uY2F0ZW5hdGUgKDEsICZzZXF1ZW5jZSwgUWJpdF92ZWN0b3IsIDApOwogCiAgIGNoZWNr X2xvc2luZ19ieXRlY29kZSAoImNvcHktc2VxdWVuY2UiLCBzZXF1ZW5jZSk7CiAgIHNlcXVlbmNl ID0gd3JvbmdfdHlwZV9hcmd1bWVudCAoUXNlcXVlbmNlcCwgc2VxdWVuY2UpOwogICBnb3RvIGFn YWluOwogfQotCi1zdHJ1Y3QgbWVyZ2Vfc3RyaW5nX2V4dGVudHNfc3RydWN0Ci17Ci0gIExpc3Bf T2JqZWN0IHN0cmluZzsKLSAgQnl0ZWNvdW50IGVudHJ5X29mZnNldDsKLSAgQnl0ZWNvdW50IGVu dHJ5X2xlbmd0aDsKLX07Ci0KLXN0YXRpYyBMaXNwX09iamVjdAotY29uY2F0IChpbnQgbmFyZ3Ms IExpc3BfT2JqZWN0ICphcmdzLAotICAgICAgICBlbnVtIGNvbmNhdF90YXJnZXRfdHlwZSB0YXJn ZXRfdHlwZSwKLSAgICAgICAgaW50IGxhc3Rfc3BlY2lhbCkKLXsKLSAgTGlzcF9PYmplY3QgdmFs OwotICBMaXNwX09iamVjdCB0YWlsID0gUW5pbDsKLSAgaW50IHRvaW5kZXg7Ci0gIGludCBhcmdu dW07Ci0gIExpc3BfT2JqZWN0IGxhc3RfdGFpbDsKLSAgTGlzcF9PYmplY3QgcHJldjsKLSAgc3Ry dWN0IG1lcmdlX3N0cmluZ19leHRlbnRzX3N0cnVjdCAqYXJnc19tc2UgPSAwOwotICBJYnl0ZSAq c3RyaW5nX3Jlc3VsdCA9IDA7Ci0gIElieXRlICpzdHJpbmdfcmVzdWx0X3B0ciA9IDA7Ci0gIHN0 cnVjdCBnY3BybyBnY3BybzE7Ci0gIGludCBzZGVwID0gc3BlY3BkbF9kZXB0aCAoKTsKLQotICAv KiBUaGUgbW9kdXMgb3BlcmFuZGkgaW4gRW1hY3MgaXMgImNhbGxlciBnYy1wcm90ZWN0cyBhcmdz Ii4KLSAgICAgSG93ZXZlciwgY29uY2F0IGlzIGNhbGxlZCBtYW55IHRpbWVzIGluIEVtYWNzIG9u IGZyZXNobHkKLSAgICAgY3JlYXRlZCBzdHVmZi4gIFNvIHdlIGhlbHAgdGhvc2UgY2FsbGVycyBv dXQgYnkgcHJvdGVjdGluZwotICAgICB0aGUgYXJncyBvdXJzZWx2ZXMgdG8gc2F2ZSB0aGVtIGEg bG90IG9mIHRlbXBvcmFyeS12YXJpYWJsZQotICAgICBncmllZi4gKi8KLQotICBHQ1BSTzEgKGFy Z3NbMF0pOwotICBnY3BybzEubnZhcnMgPSBuYXJnczsKLQotI2lmZGVmIEkxOE4zCi0gIC8qICMj IyMgaWYgdGhlIHJlc3VsdCBpcyBhIHN0cmluZyBhbmQgYW55IG9mIHRoZSBzdHJpbmdzIGhhdmUg YSBzdHJpbmcKLSAgICAgZm9yIHRoZSBgc3RyaW5nLXRyYW5zbGF0YWJsZScgcHJvcGVydHksIHRo ZW4gY29uY2F0IHNob3VsZCBhbHNvCi0gICAgIGNvbmNhdCB0aGUgYXJncyBidXQgdXNlIHRoZSBg c3RyaW5nLXRyYW5zbGF0YWJsZScgc3RyaW5ncywgYW5kIHN0b3JlCi0gICAgIHRoZSByZXN1bHQg aW4gdGhlIHJldHVybmVkIHN0cmluZydzIGBzdHJpbmctdHJhbnNsYXRhYmxlJyBwcm9wZXJ0eS4g Ki8KLSNlbmRpZgotICBpZiAodGFyZ2V0X3R5cGUgPT0gY19zdHJpbmcpCi0gICAgYXJnc19tc2Ug PSBhbGxvY2FfYXJyYXkgKHN0cnVjdCBtZXJnZV9zdHJpbmdfZXh0ZW50c19zdHJ1Y3QsIG5hcmdz KTsKLQotICAvKiBJbiBhcHBlbmQsIHRoZSBsYXN0IGFyZyBpc24ndCB0cmVhdGVkIGxpa2UgdGhl IG90aGVycyAqLwotICBpZiAobGFzdF9zcGVjaWFsICYmIG5hcmdzID4gMCkKLSAgICB7Ci0gICAg ICBuYXJncy0tOwotICAgICAgbGFzdF90YWlsID0gYXJnc1tuYXJnc107Ci0gICAgfQotICBlbHNl Ci0gICAgbGFzdF90YWlsID0gUW5pbDsKLQotICAvKiBDaGVjayBhbmQgY29lcmNlIHRoZSBhcmd1 bWVudHMuICovCi0gIGZvciAoYXJnbnVtID0gMDsgYXJnbnVtIDwgbmFyZ3M7IGFyZ251bSsrKQot ICAgIHsKLSAgICAgIExpc3BfT2JqZWN0IHNlcSA9IGFyZ3NbYXJnbnVtXTsKLSAgICAgIGlmIChM SVNUUCAoc2VxKSkKLSAgICAgICAgOwotICAgICAgZWxzZSBpZiAoVkVDVE9SUCAoc2VxKSB8fCBT VFJJTkdQIChzZXEpIHx8IEJJVF9WRUNUT1JQIChzZXEpKQotICAgICAgICA7Ci0jaWYgMAkJCQkv KiByZW1vdmVkIGZvciBYRW1hY3MgMjEgKi8KLSAgICAgIGVsc2UgaWYgKEZJWE5VTVAgKHNlcSkp Ci0gICAgICAgIC8qIFRoaXMgaXMgdG9vIHJldm9sdGluZyB0byB0aGluayBhYm91dCBidXQgbWFp bnRhaW5zCi0gICAgICAgICAgIGNvbXBhdGliaWxpdHkgd2l0aCBGU0YgKGFuZCBsb3RzIGFuZCBs b3RzIG9mIG9sZCBjb2RlKS4gKi8KLSAgICAgICAgYXJnc1thcmdudW1dID0gRm51bWJlcl90b19z dHJpbmcgKHNlcSk7Ci0jZW5kaWYKLSAgICAgIGVsc2UKLQl7Ci0gICAgICAgICAgY2hlY2tfbG9z aW5nX2J5dGVjb2RlICgiY29uY2F0Iiwgc2VxKTsKLSAgICAgICAgICBhcmdzW2FyZ251bV0gPSB3 cm9uZ190eXBlX2FyZ3VtZW50IChRc2VxdWVuY2VwLCBzZXEpOwotCX0KLQotICAgICAgaWYgKGFy Z3NfbXNlKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKFNUUklOR1AgKHNlcSkpCi0gICAgICAg ICAgICBhcmdzX21zZVthcmdudW1dLnN0cmluZyA9IHNlcTsKLSAgICAgICAgICBlbHNlCi0gICAg ICAgICAgICBhcmdzX21zZVthcmdudW1dLnN0cmluZyA9IFFuaWw7Ci0gICAgICAgIH0KLSAgICB9 Ci0KLSAgewotICAgIC8qIENoYXJjb3VudCBpcyBhIG1pc25vbWVyIGhlcmUgYXMgd2UgbWlnaHQg YmUgZGVhbGluZyB3aXRoIHRoZQotICAgICAgIGxlbmd0aCBvZiBhIHZlY3RvciBvciBsaXN0LCBi dXQgZW1waGFzaXplcyB0aGF0IHdlJ3JlIG5vdCBkZWFsaW5nCi0gICAgICAgd2l0aCBCeXRlY291 bnRzIGluIHN0cmluZ3MgKi8KLSAgICBDaGFyY291bnQgdG90YWxfbGVuZ3RoOwotCi0gICAgZm9y IChhcmdudW0gPSAwLCB0b3RhbF9sZW5ndGggPSAwOyBhcmdudW0gPCBuYXJnczsgYXJnbnVtKysp Ci0gICAgICB7Ci0gICAgICAgIENoYXJjb3VudCB0aGlzbGVuID0gWEZJWE5VTSAoRmxlbmd0aCAo YXJnc1thcmdudW1dKSk7Ci0gICAgICAgIHRvdGFsX2xlbmd0aCArPSB0aGlzbGVuOwotICAgICAg fQotCi0gICAgc3dpdGNoICh0YXJnZXRfdHlwZSkKLSAgICAgIHsKLSAgICAgIGNhc2UgY19jb25z OgotICAgICAgICBpZiAodG90YWxfbGVuZ3RoID09IDApCi0JICB7Ci0JICAgIHVuYmluZF90byAo c2RlcCk7Ci0JICAgIC8qIEluIGFwcGVuZCwgaWYgYWxsIGJ1dCBsYXN0IGFyZyBhcmUgbmlsLCBy ZXR1cm4gbGFzdCBhcmcgKi8KLQkgICAgUkVUVVJOX1VOR0NQUk8gKGxhc3RfdGFpbCk7Ci0JICB9 Ci0gICAgICAgIHZhbCA9IEZtYWtlX2xpc3QgKG1ha2VfZml4bnVtICh0b3RhbF9sZW5ndGgpLCBR bmlsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGNfdmVjdG9yOgotICAgICAgICB2YWwg PSBtYWtlX3ZlY3RvciAodG90YWxfbGVuZ3RoLCBRbmlsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg ICBjYXNlIGNfYml0X3ZlY3RvcjoKLSAgICAgICAgdmFsID0gbWFrZV9iaXRfdmVjdG9yICh0b3Rh bF9sZW5ndGgsIFF6ZXJvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGNfc3RyaW5nOgot CS8qIFdlIGRvbid0IG1ha2UgdGhlIHN0cmluZyB5ZXQgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHRo ZQotCSAgIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMuICBUaGlzIGxvb3Agd2FzIGZvcm1lcmx5IHdy aXR0ZW4KLQkgICB0byBjYWxsIEZtYWtlX3N0cmluZygpIGhlcmUgYW5kIHRoZW4gY2FsbCBzZXRf c3RyaW5nX2NoYXIoKQotCSAgIGZvciBlYWNoIGNoYXIuICBUaGlzIHNlZW1zIGxvZ2ljYWwgZW5v dWdoIGJ1dCBpcyB3YWFhYWFhYWF5Ci0JICAgc2xvdyAtLSBzZXRfc3RyaW5nX2NoYXIoKSBoYXMg dG8gc2NhbiB0aGUgd2hvbGUgc3RyaW5nIHVwCi0JICAgdG8gdGhlIHBsYWNlIHdoZXJlIHRoZSBz dWJzdGl0dXRpb24gaXMgY2FsbGVkIGZvciBpbiBvcmRlcgotCSAgIHRvIGZpbmQgdGhlIHBsYWNl IHRvIGNoYW5nZSwgYW5kIG1heSBoYXZlIHRvIGRvIHNvbWUKLQkgICByZWFsbG9jKClpbmcgaW4g b3JkZXIgdG8gbWFrZSB0aGUgY2hhciBmaXQgcHJvcGVybHkuCi0JICAgTyhOXjIpIHl1Y2thZ2Uu ICovCi0gICAgICAgIHZhbCA9IFFuaWw7Ci0Jc3RyaW5nX3Jlc3VsdCA9Ci0JICAoSWJ5dGUgKikg TUFMTE9DX09SX0FMTE9DQSAodG90YWxfbGVuZ3RoICogTUFYX0lDSEFSX0xFTik7Ci0Jc3RyaW5n X3Jlc3VsdF9wdHIgPSBzdHJpbmdfcmVzdWx0OwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1 bHQ6Ci0JdmFsID0gUW5pbDsKLSAgICAgICAgQUJPUlQgKCk7Ci0gICAgICB9Ci0gIH0KLQotCi0g IGlmIChDT05TUCAodmFsKSkKLSAgICB0YWlsID0gdmFsLCB0b2luZGV4ID0gLTE7CS8qIC0xIGlu IHRvaW5kZXggaXMgZmxhZyB3ZSBhcmUKLQkJCQkgICAgbWFraW5nIGEgbGlzdCAqLwotICBlbHNl Ci0gICAgdG9pbmRleCA9IDA7Ci0KLSAgcHJldiA9IFFuaWw7Ci0KLSAgZm9yIChhcmdudW0gPSAw OyBhcmdudW0gPCBuYXJnczsgYXJnbnVtKyspCi0gICAgewotICAgICAgQ2hhcmNvdW50IHRoaXNs ZW5pID0gMDsKLSAgICAgIENoYXJjb3VudCB0aGlzaW5kZXggPSAwOwotICAgICAgTGlzcF9PYmpl Y3Qgc2VxID0gYXJnc1thcmdudW1dOwotICAgICAgSWJ5dGUgKnN0cmluZ19zb3VyY2VfcHRyID0g MDsKLSAgICAgIElieXRlICpzdHJpbmdfcHJldl9yZXN1bHRfcHRyID0gc3RyaW5nX3Jlc3VsdF9w dHI7Ci0KLSAgICAgIGlmICghQ09OU1AgKHNlcSkpCi0JewotCSAgdGhpc2xlbmkgPSBYRklYTlVN IChGbGVuZ3RoIChzZXEpKTsKLQl9Ci0gICAgICBpZiAoU1RSSU5HUCAoc2VxKSkKLQlzdHJpbmdf c291cmNlX3B0ciA9IFhTVFJJTkdfREFUQSAoc2VxKTsKLQotICAgICAgd2hpbGUgKDEpCi0Jewot CSAgTGlzcF9PYmplY3QgZWx0OwotCi0JICAvKiBXZSd2ZSBjb21lIHRvIHRoZSBlbmQgb2YgdGhp cyBhcmcsIHNvIGV4aXQuICovCi0JICBpZiAoTklMUCAoc2VxKSkKLQkgICAgYnJlYWs7Ci0KLQkg IC8qIEZldGNoIG5leHQgZWxlbWVudCBvZiBgc2VxJyBhcmcgaW50byBgZWx0JyAqLwotCSAgaWYg KENPTlNQIChzZXEpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBlbHQgPSBYQ0FSIChz ZXEpOwotICAgICAgICAgICAgICBzZXEgPSBYQ0RSIChzZXEpOwotICAgICAgICAgICAgfQotCSAg ZWxzZQotCSAgICB7Ci0JICAgICAgaWYgKHRoaXNpbmRleCA+PSB0aGlzbGVuaSkKLQkJYnJlYWs7 Ci0KLQkgICAgICBpZiAoU1RSSU5HUCAoc2VxKSkKLQkJewotCQkgIGVsdCA9IG1ha2VfY2hhciAo aXRleHRfaWNoYXIgKHN0cmluZ19zb3VyY2VfcHRyKSk7Ci0JCSAgSU5DX0lCWVRFUFRSIChzdHJp bmdfc291cmNlX3B0cik7Ci0JCX0KLQkgICAgICBlbHNlIGlmIChWRUNUT1JQIChzZXEpKQotICAg ICAgICAgICAgICAgIGVsdCA9IFhWRUNUT1JfREFUQSAoc2VxKVt0aGlzaW5kZXhdOwotCSAgICAg IGVsc2UgaWYgKEJJVF9WRUNUT1JQIChzZXEpKQotCQllbHQgPSBtYWtlX2ZpeG51bSAoYml0X3Zl Y3Rvcl9iaXQgKFhCSVRfVkVDVE9SIChzZXEpLAotCQkJCQkJdGhpc2luZGV4KSk7Ci0gICAgICAg ICAgICAgIGVsc2UKLQkJZWx0ID0gRmVsdCAoc2VxLCBtYWtlX2ZpeG51bSAodGhpc2luZGV4KSk7 Ci0gICAgICAgICAgICAgIHRoaXNpbmRleCsrOwotCSAgICB9Ci0KLQkgIC8qIFN0b3JlIGludG8g cmVzdWx0ICovCi0JICBpZiAodG9pbmRleCA8IDApCi0JICAgIHsKLQkgICAgICAvKiB0b2luZGV4 IG5lZ2F0aXZlIG1lYW5zIHdlIGFyZSBtYWtpbmcgYSBsaXN0ICovCi0JICAgICAgWENBUiAodGFp bCkgPSBlbHQ7Ci0JICAgICAgcHJldiA9IHRhaWw7Ci0JICAgICAgdGFpbCA9IFhDRFIgKHRhaWwp OwotCSAgICB9Ci0JICBlbHNlIGlmIChWRUNUT1JQICh2YWwpKQotCSAgICBYVkVDVE9SX0RBVEEg KHZhbClbdG9pbmRleCsrXSA9IGVsdDsKLQkgIGVsc2UgaWYgKEJJVF9WRUNUT1JQICh2YWwpKQot CSAgICB7Ci0JICAgICAgQ0hFQ0tfQklUIChlbHQpOwotCSAgICAgIHNldF9iaXRfdmVjdG9yX2Jp dCAoWEJJVF9WRUNUT1IgKHZhbCksIHRvaW5kZXgrKywgWEZJWE5VTSAoZWx0KSk7Ci0JICAgIH0K LQkgIGVsc2UKLQkgICAgewotCSAgICAgIENIRUNLX0NIQVJfQ09FUkNFX0lOVCAoZWx0KTsKLQkg ICAgICBzdHJpbmdfcmVzdWx0X3B0ciArPSBzZXRfaXRleHRfaWNoYXIgKHN0cmluZ19yZXN1bHRf cHRyLAotCQkJCQkJICAgIFhDSEFSIChlbHQpKTsKLQkgICAgfQotCX0KLSAgICAgIGlmIChhcmdz X21zZSkKLQl7Ci0JICBhcmdzX21zZVthcmdudW1dLmVudHJ5X29mZnNldCA9Ci0JICAgIHN0cmlu Z19wcmV2X3Jlc3VsdF9wdHIgLSBzdHJpbmdfcmVzdWx0OwotCSAgYXJnc19tc2VbYXJnbnVtXS5l bnRyeV9sZW5ndGggPQotCSAgICBzdHJpbmdfcmVzdWx0X3B0ciAtIHN0cmluZ19wcmV2X3Jlc3Vs dF9wdHI7Ci0JfQotICAgIH0KLQotICAvKiBOb3cgd2UgZmluYWxseSBtYWtlIHRoZSBzdHJpbmcu ICovCi0gIGlmICh0YXJnZXRfdHlwZSA9PSBjX3N0cmluZykKLSAgICB7Ci0gICAgICB2YWwgPSBt YWtlX3N0cmluZyAoc3RyaW5nX3Jlc3VsdCwgc3RyaW5nX3Jlc3VsdF9wdHIgLSBzdHJpbmdfcmVz dWx0KTsKLSAgICAgIGZvciAoYXJnbnVtID0gMDsgYXJnbnVtIDwgbmFyZ3M7IGFyZ251bSsrKQot CXsKLQkgIGlmIChTVFJJTkdQIChhcmdzX21zZVthcmdudW1dLnN0cmluZykpCi0JICAgIGNvcHlf c3RyaW5nX2V4dGVudHMgKHZhbCwgYXJnc19tc2VbYXJnbnVtXS5zdHJpbmcsCi0JCQkJIGFyZ3Nf bXNlW2FyZ251bV0uZW50cnlfb2Zmc2V0LCAwLAotCQkJCSBhcmdzX21zZVthcmdudW1dLmVudHJ5 X2xlbmd0aCk7Ci0JfQotICAgIH0KLQotICBpZiAoIU5JTFAgKHByZXYpKQotICAgIFhDRFIgKHBy ZXYpID0gbGFzdF90YWlsOwotCi0gIHVuYmluZF90byAoc2RlcCk7Ci0gIFJFVFVSTl9VTkdDUFJP ICh2YWwpOwotfQogDAogREVGVU4gKCJjb3B5LWFsaXN0IiwgRmNvcHlfYWxpc3QsIDEsIDEsIDAs IC8qCiBSZXR1cm4gYSBjb3B5IG9mIEFMSVNULgpAQCAtNzM2LDcgKzQwMCw3IEBACiAgICAgcmV0 dXJuIGFsaXN0OwogICBDSEVDS19DT05TIChhbGlzdCk7CiAKLSAgYWxpc3QgPSBjb25jYXQgKDEs ICZhbGlzdCwgY19jb25zLCAwKTsKKyAgYWxpc3QgPSBjb25jYXRlbmF0ZSAoMSwgJmFsaXN0LCBR bGlzdCwgMCk7CiAgIGZvciAodGFpbCA9IGFsaXN0OyBDT05TUCAodGFpbCk7IHRhaWwgPSBYQ0RS ICh0YWlsKSkKICAgICB7CiAgICAgICBMaXNwX09iamVjdCBjYXIgPSBYQ0FSICh0YWlsKTsKQEAg LTIzNTIsMjAgKzIwMTYsMjUgQEAKIExpc3BfT2JqZWN0CiBuY29uYzIgKExpc3BfT2JqZWN0IGFy ZzEsIExpc3BfT2JqZWN0IGFyZzIpCiB7Ci0gIExpc3BfT2JqZWN0IGFyZ3NbMl07Ci0gIHN0cnVj dCBnY3BybyBnY3BybzE7Ci0gIGFyZ3NbMF0gPSBhcmcxOwotICBhcmdzWzFdID0gYXJnMjsKLQot ICBHQ1BSTzEgKGFyZ3NbMF0pOwotICBnY3BybzEubnZhcnMgPSAyOwotCi0gIFJFVFVSTl9VTkdD UFJPIChieXRlY29kZV9uY29uYzIgKGFyZ3MpKTsKKyAgTGlzcF9PYmplY3QgYXJnc1tdID0geyBh cmcxLCBhcmcyIH07CisgIHJldHVybiBieXRlY29kZV9uY29uYzIgKGFyZ3MpOwogfQogCiBMaXNw X09iamVjdAogYnl0ZWNvZGVfbmNvbmMyIChMaXNwX09iamVjdCAqYXJncykKIHsKKyAgc3RydWN0 IGdjcHJvIGdjcHJvMTsKKworICAvKiBUaGUgbW9kdXMgb3BlcmFuZGkgaW4gRW1hY3MgaXMgImNh bGxlciBnYy1wcm90ZWN0cyBhcmdzIi4gIEluIHRoZSBub3JtYWwKKyAgICAgY291cnNlIG9mIGV2 ZW50cywgd2UgZG9uJ3QgZnVuY2FsbCBhbmQgdGh1cyBkb24ndCBHQywgc28gdGhpcyB3b3VsZCBu b3QKKyAgICAgbWF0dGVyLCBidXQgd3JvbmdfdHlwZV9hcmd1bWVudCgpIHNpZ25hbHMgYSBjb250 aW51YWJsZSBlcnJvciwgd2hpY2ggd2lsbAorICAgICBmdW5jYWxsIGFuZCBHQy4gVGhlcmUgaXMg aW5jb21wZXRlIEdDIHByb3RlY3Rpb24gb2Ygb3VyIGFyZ3VtZW50cyB3aGVuCisgICAgIG5jb25j MigpIGlzIGNhbGxlZCBmcm9tIEMuIEdDUFJPIG91ciBhcmdzLgorCisgICAgIFRoaXMgZG9lcyBu b3QgYXBwbHkgdG8gRm5jb25jKCkuICovCisgIEdDUFJPMSAoYXJnc1swXSk7CisgIGdjcHJvMS5u dmFycyA9IDI7CisKICByZXRyeToKIAogICBpZiAoQ09OU1AgKGFyZ3NbMF0pKQpAQCAtMjM4Niwx MSArMjA1NSwxMSBAQAogCSAgICBzaWduYWxfY2lyY3VsYXJfbGlzdF9lcnJvciAoYXJnc1swXSk7 CiAJfQogICAgICAgWENEUiAoaGFyZSkgPSBhcmdzWzFdOwotICAgICAgcmV0dXJuIGFyZ3NbMF07 CisgICAgICBSRVRVUk5fVU5HQ1BSTyAoYXJnc1swXSk7CiAgICAgfQogICBlbHNlIGlmIChOSUxQ IChhcmdzWzBdKSkKICAgICB7Ci0gICAgICByZXR1cm4gYXJnc1sxXTsKKyAgICAgIFJFVFVSTl9V TkdDUFJPIChhcmdzWzFdKTsKICAgICB9CiAgIGVsc2UKICAgICB7CkBAIC0yNDEyLDE3ICsyMDgx LDYgQEAKICAgICAgICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykpCiB7CiAgIGludCBh cmdudW0gPSAwOwotICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xOwotCi0gIC8qIFRoZSBtb2R1cyBvcGVy YW5kaSBpbiBFbWFjcyBpcyAiY2FsbGVyIGdjLXByb3RlY3RzIGFyZ3MiLgotICAgICBIb3dldmVy LCBuY29uYyAocGFydGljdWxhcmx5IG5jb25jMiAoKSkgaXMgY2FsbGVkIG1hbnkgdGltZXMKLSAg ICAgaW4gRW1hY3Mgb24gZnJlc2hseSBjcmVhdGVkIHN0dWZmIChlLmcuIHlvdSBzZWUgdGhlIGlk aW9tCi0gICAgIG5jb25jMiAoRmNvcHlfc2VxdWVuY2UgKGZvbyksIGJhcikgYSBsb3QpLiAgU28g d2UgaGVscCB0aG9zZQotICAgICBjYWxsZXJzIG91dCBieSBwcm90ZWN0aW5nIHRoZSBhcmdzIG91 cnNlbHZlcyB0byBzYXZlIHRoZW0KLSAgICAgYSBsb3Qgb2YgdGVtcG9yYXJ5LXZhcmlhYmxlIGdy aWVmLiAqLwotCi0gIEdDUFJPMSAoYXJnc1swXSk7Ci0gIGdjcHJvMS5udmFycyA9IG5hcmdzOwog CiAgIHdoaWxlIChhcmdudW0gPCBuYXJncykKICAgICB7CkBAIC0yNDY4LDE5ICsyMTI2LDE5IEBA CiAJCSAgZ290byByZXRyeV9uZXh0OwogCQl9CiAJICAgIH0KLQkgIFJFVFVSTl9VTkdDUFJPICh2 YWwpOworCSAgcmV0dXJuIHZhbDsKICAgICAgICAgfQogICAgICAgZWxzZSBpZiAoTklMUCAodmFs KSkKIAlhcmdudW0rKzsKICAgICAgIGVsc2UgaWYgKGFyZ251bSA9PSBuYXJncyAtIDEpIC8qIGxh c3QgYXJnPyAqLwotCVJFVFVSTl9VTkdDUFJPICh2YWwpOworCXJldHVybiB2YWw7CiAgICAgICBl bHNlCiAJewogCSAgYXJnc1thcmdudW1dID0gd3JvbmdfdHlwZV9hcmd1bWVudCAoUWxpc3RwLCB2 YWwpOwogCSAgZ290byByZXRyeTsKIAl9CiAgICAgfQotICBSRVRVUk5fVU5HQ1BSTyAoUW5pbCk7 ICAvKiBObyBub24tbmlsIGFyZ3MgcHJvdmlkZWQuICovCisgIHJldHVybiBRbmlsOyAgLyogTm8g bm9uLW5pbCBhcmdzIHByb3ZpZGVkLiAqLwogfQogCiAMCkBAIC0zMzI4LDEwICsyOTg2LDYgQEAK ICAgREVGU1VCUiAoRnN0cmluZ19lcXVhbCk7CiAgIERFRlNVQlIgKEZjb21wYXJlX3N0cmluZ3Mp OwogICBERUZTVUJSIChGc3RyaW5nX2xlc3NwKTsKLSAgREVGU1VCUiAoRmFwcGVuZCk7Ci0gIERF RlNVQlIgKEZjb25jYXQpOwotICBERUZTVUJSIChGdmNvbmNhdCk7Ci0gIERFRlNVQlIgKEZidmNv bmNhdCk7CiAgIERFRlNVQlIgKEZjb3B5X2xpc3QpOwogICBERUZTVUJSIChGY29weV9zZXF1ZW5j ZSk7CiAgIERFRlNVQlIgKEZjb3B5X2FsaXN0KTsKZGlmZiAtciBjYmUxMDcxNDFhZmUgLXIgMTdh M2M2YjUyZGZkIHNyYy9nYy5jCi0tLSBhL3NyYy9nYy5jCVRodSBKdW4gMzAgMDA6MDY6MzggMjAx NiArMDEwMAorKysgYi9zcmMvZ2MuYwlUaHUgSnVuIDMwIDAwOjQxOjM5IDIwMTYgKzAxMDAKQEAg LTE4NjUsNyArMTg2NSw3IEBACiAJICAgICAgYXJnc1swXSA9IChTVFJJTkdQIChWZ2NfbWVzc2Fn ZSkgPyBWZ2NfbWVzc2FnZSA6CiAJCQkgYnVpbGRfbXNnX3N0cmluZyAoZ2NfZGVmYXVsdF9tZXNz YWdlKSk7CiAJICAgICAgYXJnc1sxXSA9IGJ1aWxkX2FzY3N0cmluZyAoIi4uLiIpOwotCSAgICAg IHdob2xlX21zZyA9IEZjb25jYXQgKDIsIGFyZ3MpOworCSAgICAgIHdob2xlX21zZyA9IGNvbmNh dGVuYXRlICgyLCBhcmdzLCBRc3RyaW5nLCAwKTsKIAkgICAgICBlY2hvX2FyZWFfbWVzc2FnZSAo ZiwgKElieXRlICopIDAsIHdob2xlX21zZywgMCwgLTEsCiAJCQkJIFFnYXJiYWdlX2NvbGxlY3Rp bmcpOwogCSAgICB9CkBAIC0xODkzLDcgKzE4OTMsNyBAQAogCQkgIGFyZ3NbMF0gPSAoU1RSSU5H UCAoVmdjX21lc3NhZ2UpID8gVmdjX21lc3NhZ2UgOgogCQkJICAgICBidWlsZF9tc2dfc3RyaW5n IChnY19kZWZhdWx0X21lc3NhZ2UpKTsKIAkJICBhcmdzWzFdID0gYnVpbGRfbXNnX3N0cmluZyAo Ii4uLiBkb25lIik7Ci0JCSAgd2hvbGVfbXNnID0gRmNvbmNhdCAoMiwgYXJncyk7CisJCSAgd2hv bGVfbXNnID0gY29uY2F0ZW5hdGUgKDIsIGFyZ3MsIFFzdHJpbmcsIDApOwogCQkgIGVjaG9fYXJl YV9tZXNzYWdlIChzZWxlY3RlZF9mcmFtZSAoKSwgKElieXRlICopIDAsCiAJCQkJICAgICB3aG9s ZV9tc2csIDAsIC0xLAogCQkJCSAgICAgUWdhcmJhZ2VfY29sbGVjdGluZyk7CmRpZmYgLXIgY2Jl MTA3MTQxYWZlIC1yIDE3YTNjNmI1MmRmZCBzcmMvZ2VuZXJhbC1zbG90cy5oCi0tLSBhL3NyYy9n ZW5lcmFsLXNsb3RzLmgJVGh1IEp1biAzMCAwMDowNjozOCAyMDE2ICswMTAwCisrKyBiL3NyYy9n ZW5lcmFsLXNsb3RzLmgJVGh1IEp1biAzMCAwMDo0MTozOSAyMDE2ICswMTAwCkBAIC02MCw2ICs2 MCw3IEBACiBTWU1CT0wgKFFiaWdmbG9hdCk7CiBTWU1CT0wgKFFiaW5hcnkpOwogU1lNQk9MIChR Yml0bWFwKTsKK1NZTUJPTCAoUWJpdF92ZWN0b3IpOwogU1lNQk9MIChRYm9vbGVhbik7CiBTWU1C T0xfS0VZV09SRCAoUV9ib3JkZXIpOwogU1lNQk9MIChRYm90dG9tKTsKQEAgLTMxMiw2ICszMTMs NyBAQAogU1lNQk9MIChRdXNlcl9kZWZhdWx0KTsKIFNZTUJPTF9LRVlXT1JEIChRX3ZhbHVlKTsK IFNZTUJPTCAoUXZhbHVlX2Fzc29jKTsKK1NZTUJPTCAoUXZlY3Rvcik7CiBTWU1CT0wgKFF2ZXJ0 aWNhbCk7CiBTWU1CT0xfS0VZV09SRCAoUV92ZXJ0aWNhbGx5X2p1c3RpZnkpOwogU1lNQk9MX0tF WVdPUkQgKFFfdmlzaWJsZSk7CmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNjNmI1MmRmZCBz cmMvZ3V0dGVyLmMKLS0tIGEvc3JjL2d1dHRlci5jCVRodSBKdW4gMzAgMDA6MDY6MzggMjAxNiAr MDEwMAorKysgYi9zcmMvZ3V0dGVyLmMJVGh1IEp1biAzMCAwMDo0MTozOSAyMDE2ICswMTAwCkBA IC0yNDMsNyArMjQzLDcgQEAKIAl9CiAgICAgfQogCi0gIHJldHVybiBGY29uY2F0IChuYXJncywg YXJncyk7CisgIHJldHVybiBjb25jYXRlbmF0ZSAobmFyZ3MsIGFyZ3MsIFFzdHJpbmcsIDApOwog fQogCiAvKiBTaXppbmcgZ3V0dGVycyBpcyBhIHBhaW4gc28gd2UgdHJ5IGFuZCBoZWxwIHRoZSB1 c2VyIGJ5IGRldGVybWluaW5nCmRpZmYgLXIgY2JlMTA3MTQxYWZlIC1yIDE3YTNjNmI1MmRmZCBz cmMvbGlzcC5oCi0tLSBhL3NyYy9saXNwLmgJVGh1IEp1biAzMCAwMDowNjozOCAyMDE2ICswMTAw CisrKyBiL3NyYy9saXNwLmgJVGh1IEp1biAzMCAwMDo0MTozOSAyMDE2ICswMTAwCkBAIC01ODA0 LDYgKzU4MDQsOSBAQAogRVhGVU4gKEZjbGVhcl9zdHJpbmcsIDEpOwogRVhGVU4gKEZyZXBsYWNl LCBNQU5ZKTsKIAorTGlzcF9PYmplY3QgY29uY2F0ZW5hdGUgKGludCBuc2VxdWVuY2VzLCBMaXNw X09iamVjdCAqc2VxdWVuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0 IHJlc3VsdF90eXBlLCBCb29saW50IHJldXNlX2xhc3RfbGlzdHApOworCiAvKiBEZWZpbmVkIGlu IHNpZ25hbC5jICovCiB2b2lkIGluaXRfaW50ZXJydXB0c19sYXRlICh2b2lkKTsKIApkaWZmIC1y IGNiZTEwNzE0MWFmZSAtciAxN2EzYzZiNTJkZmQgc3JjL3NlcXVlbmNlLmMKLS0tIGEvc3JjL3Nl cXVlbmNlLmMJVGh1IEp1biAzMCAwMDowNjozOCAyMDE2ICswMTAwCisrKyBiL3NyYy9zZXF1ZW5j ZS5jCVRodSBKdW4gMzAgMDA6NDE6MzkgMjAxNiArMDEwMApAQCAtNDU1Niw3ICs0NTU2LDcgQEAK ICAgZm9yIChpID0gMTsgaSA8IG5hcmdzMDsgaSArPSAyKQogICAgIGFyZ3MwW2ldID0gc2VwYXJh dG9yOwogCi0gIHJldHVybiBGY29uY2F0IChuYXJnczAsIGFyZ3MwKTsKKyAgcmV0dXJuIGNvbmNh dGVuYXRlIChuYXJnczAsIGFyZ3MwLCBRc3RyaW5nLCAwKTsKIH0KIAogREVGVU4gKCJtYXBjYXIq IiwgRm1hcGNhclgsIDIsIE1BTlksIDAsIC8qCkBAIC00NjI3LDExICs0NjI3LDE0IEBACiB7CiAg IEVsZW1jb3VudCBsZW4gPSBzaG9ydGVzdF9sZW5ndGhfYW1vbmdfc2VxdWVuY2VzIChuYXJncyAt IDEsIGFyZ3MgKyAxKTsKICAgTGlzcF9PYmplY3QgZnVuY3Rpb24gPSBhcmdzWzBdLCAqcmVzdWx0 ID0gYWxsb2NhX2FycmF5IChMaXNwX09iamVjdCwgbGVuKTsKKyAgc3RydWN0IGdjcHJvIGdjcHJv MTsKIAogICBtYXBjYXJYIChsZW4sIHJlc3VsdCwgUW5pbCwgZnVuY3Rpb24sIG5hcmdzIC0gMSwg YXJncyArIDEsIFFtYXBjYW4pOwogCi0gIC8qICMnbmNvbmMgR0NQUk9zIGl0cyBhcmdzIGluIGNh c2Ugb2Ygc2lnbmFscyBhbmQgZXJyb3IuICovCi0gIHJldHVybiBGbmNvbmMgKGxlbiwgcmVzdWx0 KTsKKyAgR0NQUk8xIChyZXN1bHRbMF0pOworICBnY3BybzEubnZhcnMgPSBsZW47CisKKyAgUkVU VVJOX1VOR0NQUk8gKEZuY29uYyAobGVuLCByZXN1bHQpKTsKIH0KIAogREVGVU4gKCJtYXBjIiwg Rm1hcGMsIDIsIE1BTlksIDAsIC8qCkBAIC00ODAzLDYgKzQ4MDYsMzU2IEBACiB9CiAKIAwKK3N0 cnVjdCBtZXJnZV9zdHJpbmdfZXh0ZW50c19zdHJ1Y3QKK3sKKyAgTGlzcF9PYmplY3Qgc3RyaW5n OworICBCeXRlY291bnQgZW50cnlfb2Zmc2V0OworICBCeXRlY291bnQgZW50cnlfbGVuZ3RoOwor fTsKKworTGlzcF9PYmplY3QKK2NvbmNhdGVuYXRlIChpbnQgbnNlcXVlbmNlcywgTGlzcF9PYmpl Y3QgKnNlcXVlbmNlcywKKyAgICAgICAgICAgICBMaXNwX09iamVjdCByZXN1bHRfdHlwZSwgQm9v bGludCByZXVzZV9sYXN0X2xpc3RwKQoreworICBMaXNwX09iamVjdCAqbGlzcF9zdGFnaW5nID0g TlVMTCwgKmxpc3BfY3Vyc29yID0gTlVMTCwgcmVzdWx0ID0gUW5pbDsKKyAgRWxlbWNvdW50IGlp LCBqaiwgc3RhZ2luZ19sZW4gPSAwOworICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xLCBnY3BybzI7CisK KyAgLyogV2UgY2FuIEdDIGluICMnY29lcmNlLCBhbmQgaW4gY29weV9zdHJpbmdfZXh0ZW50cygp LiBPdXIgY2FsbGVycyBkb24ndAorICAgICBhbGwgR0NQUk8gb3VyIGFyZ3VtZW50cywgZGVzcGl0 ZSB0aGF0IHRoaXMgaXMgdGhlIHVzdWFsIHByb3RvY29sLCBhbmQgd2UKKyAgICAgbmVlZCB0byBH Q1BSTyBSRVNVTFQgb3Vyc2VsdmVzIGFueXdheS4gKi8KKyAgR0NQUk8yIChzZXF1ZW5jZXNbMF0s IHJlc3VsdCk7CisgIGdjcHJvMS5udmFycyA9IG5zZXF1ZW5jZXM7CisKKyAgLyogU3RyaW5nIHJl c3VsdCBpcyB0aGUgY29tbW9uZXN0IGNhc2UsIGFuZCBjYW4gYmUgdmVyeSBjaGVhcCBmb3IKKyAg ICAgZXhjbHVzaXZlbHktc3RyaW5nIGFyZ3VtZW50czsgZ2V0IHRoZSBjb21wbGV0ZSBieXRlIGxl bmd0aCwgbWFrZSBhbgorICAgICB1bmluaXRlZCBzdHJpbmcgb2YgdGhhdCBsZW5ndGgsIGFuZCBt ZW1jcHkgYWxsIHRoZSBhcmd1bWVudHMnIHN0cmluZyBkYXRhCisgICAgIGludG8gdGhlIG5ldyBz dHJpbmcsIE8oKyBOU0VRVUVOQ0VTIChyZWR1Y2UgIycrIFNFUVVFTkNFUyA6a2V5CisgICAgICMn Ynl0ZS1sZW5ndGgpKSwgbm8gbmVlZCBmb3IgY2hhcmFjdGVyIGxlbmd0aHMgb3IgSU5DX0lCWVRF UFRSLiAqLworICBpZiAoRVEgKHJlc3VsdF90eXBlLCBRc3RyaW5nKSkKKyAgICB7CisgICAgICBC eXRlY291bnQgYnN0YWdpbmdfbGVuID0gMDsKKyAgICAgIElieXRlICpic3RhZ2luZyA9IE5VTEws ICpjdXJzb3IgPSBOVUxMOworICAgICAgc3RydWN0IG1lcmdlX3N0cmluZ19leHRlbnRzX3N0cnVj dCAqYXJnc19tc2UKKyAgICAgICAgPSBhbGxvY2FfYXJyYXkgKHN0cnVjdCBtZXJnZV9zdHJpbmdf ZXh0ZW50c19zdHJ1Y3QsIG5zZXF1ZW5jZXMpOworICAgICAgc3RydWN0IG1lcmdlX3N0cmluZ19l eHRlbnRzX3N0cnVjdCAqYXJnc19tc2VfY3Vyc29yID0gYXJnc19tc2U7CisKKyAgICAgIGZvciAo aWkgPSAwOyBpaSA8IG5zZXF1ZW5jZXM7ICsraWkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAo U1RSSU5HUCAoc2VxdWVuY2VzW2lpXSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJz dGFnaW5nX2xlbiArPSBYU1RSSU5HX0xFTkdUSCAoc2VxdWVuY2VzW2lpXSk7CisgICAgICAgICAg ICAgIGlmIChOVUxMICE9IHN0cmluZ19leHRlbnRfaW5mbyAoc2VxdWVuY2VzW2lpXSkpCisgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgYXJnc19tc2VfY3Vyc29yLT5zdHJpbmcg PSBzZXF1ZW5jZXNbaWldOworICAgICAgICAgICAgICAgICAgYXJnc19tc2VfY3Vyc29yLT5lbnRy eV9sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgPSBYU1RSSU5HX0xFTkdUSCAoc2VxdWVuY2Vz W2lpXSk7CisgICAgICAgICAgICAgICAgICBhcmdzX21zZV9jdXJzb3IrKzsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3NfbXNlID09IGFyZ3NfbXNlX2N1cnNv cikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhh dCB0aGUgY29kZSBjaGVja2luZyBiZWxvdyBmb3Igc3RyaW5nIHdpdGgKKyAgICAgICAgICAgICAg ICAgICAgIGV4dGVudCBpbmZvIGluIGFyZ3NfbXNlW10gaGFzIGEgdmFsaWQgTGlzcCBvYmplY3Qg dG8KKyAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmUgdG8uICovCisgICAgICAgICAgICAgICAg ICBhcmdzX21zZVswXS5zdHJpbmcgPSBRbmlsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIEdl dCB0aGUgaXRlbSBjb3VudCBvZiBlYWNoIHNlcXVlbmNlOyBpbiBwYXNzaW5nLCBjaGVjayB0aGVp cgorICAgICAgICAgICAgICAgICB0eXBlIGFuZCBjaXJjdWxhcml0eSwgd2VsbC1mb3JtZWRuZXNz LiBBbGxvY2F0ZSBpdGVtX2NvdW50ICoKKyAgICAgICAgICAgICAgICAgTUFYX0lDSEFSX0xFTiBv ZiBzdGFnaW5nIHNwYWNlIGZvciBlYWNoIG5vbi1zdHJpbmcgc2VxdWVuY2UKKyAgICAgICAgICAg ICAgICAgZW5jb3VudGVyZWQuICovCisgICAgICAgICAgICAgIGJzdGFnaW5nX2xlbgorICAgICAg ICAgICAgICAgICs9IChYRklYTlVNIChGbGVuZ3RoIChzZXF1ZW5jZXNbaWldKSkpICogTUFYX0lD SEFSX0xFTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICByZXN1bHQgPSBtYWtl X3VuaW5pdF9zdHJpbmcgKGJzdGFnaW5nX2xlbik7CisKKyNpZiBkZWZpbmVkIChFUlJPUl9DSEVD S19URVhUKQorICAgICAgLyogTWFrZSBzdXJlIHRoZSBkYXRhIG9mIHRoZSBzdHJpbmcgaXMgdmFs aWQgaW50ZXJuYWwtZm9ybWF0CisgICAgICAgICB0ZXh0LiBSZWxhdGl2ZWx5IGV4cGVuc2l2ZSwg aW4gdGhhdCBpdCBhZGRzIGFub3RoZXIgdHJhdmVyc2FsIG9mIHRoZQorICAgICAgICAgc3RyaW5n IGRhdGEgdG8gb3VyIGFsZ29yaXRobSwgYnV0IGF2b2lkcyBhbiBhc3NlcnRpb24gZmFpbHVyZSB3 aXRoCisgICAgICAgICBFUlJPUl9DSEVDS19URVhULiAqLworICAgICAgbWVtc2V0IChYU1RSSU5H X0RBVEEgKHJlc3VsdCksIDAsIFhTVFJJTkdfTEVOR1RIIChyZXN1bHQpKTsKKyNlbmRpZgorCisg ICAgICBic3RhZ2luZyA9IGN1cnNvciA9IFhTVFJJTkdfREFUQSAocmVzdWx0KTsKKyAgICAgIGFy Z3NfbXNlX2N1cnNvciA9IGFyZ3NfbXNlOworCisgICAgICBmb3IgKGlpID0gMDsgaWkgPCBuc2Vx dWVuY2VzOyArK2lpKQorICAgICAgICB7CisgICAgICAgICAgaWYgKFNUUklOR1AgKHNlcXVlbmNl c1tpaV0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtZW1jcHkgKGN1cnNvciwgWFNU UklOR19EQVRBIChzZXF1ZW5jZXNbaWldKSwKKyAgICAgICAgICAgICAgICAgICAgICBYU1RSSU5H X0xFTkdUSCAoc2VxdWVuY2VzW2lpXSkpOworICAgICAgICAgICAgICBpZiAoRVEgKGFyZ3NfbXNl X2N1cnNvci0+c3RyaW5nLCBzZXF1ZW5jZXNbaWldKSkKKyAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICBhcmdzX21zZV9jdXJzb3ItPmVudHJ5X29mZnNldCA9IGN1cnNvciAtIGJz dGFnaW5nOworICAgICAgICAgICAgICAgICAgYXJnc19tc2VfY3Vyc29yKys7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICBjdXJzb3IgKz0gWFNUUklOR19MRU5HVEggKHNlcXVlbmNl c1tpaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKENPTlNQIChzZXF1ZW5j ZXNbaWldKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogV2Uga25vdyB0aGUgbGlz dCBpcyB3ZWxsLWZvcm1lZCwgYmVjYXVzZSAjJ2xlbmd0aCBzdWNjZWVkZWQsCisgICAgICAgICAg ICAgICAgIGFib3ZlLCBzbyB3ZSBjYW4gdXNlIGEgc2ltcGxlciBsb29wIHRoYW4gdXN1YWwgZm9y IGV4dGVybmFsCisgICAgICAgICAgICAgICAgIGxpc3RzLiAqLworICAgICAgICAgICAgICBMSVNU X0xPT1BfMiAoZWx0LCBzZXF1ZW5jZXNbaWldKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgIENIRUNLX0NIQVJfQ09FUkNFX0lOVCAoZWx0KTsKKyAgICAgICAgICAgICAgICAg IGN1cnNvciArPSBzZXRfaXRleHRfaWNoYXIgKGN1cnNvciwgWENIQVIgKGVsdCkpOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChBUlJBWVAgKHNl cXVlbmNlc1tpaV0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBMaXNwX09iamVjdCBl bHQgPSBRbmlsOworICAgICAgICAgICAgICBFbGVtY291bnQgbGVuID0gWEZJWE5VTSAoRmxlbmd0 aCAoc2VxdWVuY2VzW2lpXSkpOworCisgICAgICAgICAgICAgIGZvciAoamogPSAwOyBqaiA8IGxl bjsgKytqaikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBlbHQgPSBGYXJl ZiAoc2VxdWVuY2VzW2lpXSwgbWFrZV9maXhudW0gKGpqKSk7CisgICAgICAgICAgICAgICAgICBD SEVDS19DSEFSX0NPRVJDRV9JTlQgKGVsdCk7CisgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0g c2V0X2l0ZXh0X2ljaGFyIChjdXJzb3IsIFhDSEFSIChlbHQpKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBhc3NlcnQgKE5JTFAgKHNlcXVlbmNlc1tpaV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorCisgICAgICBpZiAoKGN1cnNvciAtIGJzdGFnaW5nKSAhPSBic3RhZ2luZ19sZW4pCisg ICAgICAgIHsKKyAgICAgICAgICBCeXRlY291bnQgdXNlZF9sZW4gPSBjdXJzb3IgLSBic3RhZ2lu ZzsKKworICAgICAgICAgIHRleHRfY2hlY2tpbmdfYXNzZXJ0ICh1c2VkX2xlbiA8IGJzdGFnaW5n X2xlbik7CisKKyAgICAgICAgICAvKiBOby1vbmUgZWxzZSBoYXMgYSBwb2ludGVyIHRvIFJFU1VM VCwgYW5kIGNhbGxpbmcgcmVzaXplX3N0cmluZygpCisgICAgICAgICAgICAgZ2l2ZXMgY3Jhc2hl cyBpbiB0ZW1hY3MsIGl0cyBpbXBsZW1lbnRhdGlvbiBpc24ndCB0aG9yb3VnaGx5CisgICAgICAg ICAgICAgZGVidWdnZWQgYW5kIGl0cyBwZXJmb3JtYW5jZSBpcyBzdWItb3B0aW1hbC4gQ3JlYXRl IGEgbmV3IFJFU1VMVCwKKyAgICAgICAgICAgICBsZXQgdGhlIGZpcnN0IGJlIEdDZWQgaW5zdGVh ZC4gKi8KKyAgICAgICAgICByZXN1bHQgPSBtYWtlX3N0cmluZyAoYnN0YWdpbmcsIHVzZWRfbGVu KTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogY29weV9z dHJpbmdfZXh0ZW50cygpIGNhbiBjYWxsIExpc3AsIG1ha2Ugc3VyZQorICAgICAgICAgICAgIGlu aXRfc3RyaW5nX2FzY2lpX2JlZ2luKCkgaXMgY2FsbGVkIG9uIFJFU1VMVCBiZWZvcmUgaXRzCisg ICAgICAgICAgICAgaW52b2NhdGlvbi4gKi8KKyAgICAgICAgICBpbml0X3N0cmluZ19hc2NpaV9i ZWdpbiAocmVzdWx0KTsKKyAgICAgICAgICBzbGVkZ2VoYW1tZXJfY2hlY2tfYXNjaWlfYmVnaW4g KHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgd2hpbGUgKGFyZ3NfbXNlIDwgYXJnc19tc2Vf Y3Vyc29yKQorICAgICAgICB7CisgICAgICAgICAgY29weV9zdHJpbmdfZXh0ZW50cyAocmVzdWx0 LCBhcmdzX21zZS0+c3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Nf bXNlLT5lbnRyeV9vZmZzZXQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn c19tc2UtPmVudHJ5X2xlbmd0aCk7CisgICAgICAgICAgYXJnc19tc2UrKzsKKyAgICAgICAgfQor CisgICAgICBSRVRVUk5fVU5HQ1BSTyAocmVzdWx0KTsKKyAgICB9CisKKyAgLyogTGlzdCByZXN1 bHQgaXMgdGhlIG5leHQgY29tbW9uZXN0IGNhc2UsIGFuZCBiZW5lZml0cyBmcm9tIHN0YXJ0aW5n IGZyb20KKyAgICAgdGhlIGVuZCBhbmQgbW92aW5nIHRvd2FyZHMgdGhlIGJlZ2lubmluZzsgZm9y IGNvbnMgc2VxdWVuY2VzIHdlIGRvbid0CisgICAgIG5lZWQgdHJhdmVyc2UgdGhlIGxpc3QgdHdp Y2UgdG8gZ2V0IHRoZSBlbGVtZW50IGNvdW50LCB3ZSBjYW4gdHJhdmVyc2UKKyAgICAgb25jZSBh bmQgYWRkIGFzIHdlIGdvLCBhbmQgZm9yIHN0cmluZyBzZXF1ZW5jZXMgd2UgYWdhaW4gZG9uJ3Qg bmVlZCB0aGUKKyAgICAgY2hhciBsZW5ndGggaWYgd2Ugc3RhcnQgYXQgdGhlIGVuZCBhbmQgREVD X0lCWVRFUFRSLnggICovCisgIGlmIChFUSAocmVzdWx0X3R5cGUsIFFsaXN0KSkKKyAgICB7Cisg ICAgICBpaSA9IG5zZXF1ZW5jZXM7CisKKyAgICAgIGlmIChyZXVzZV9sYXN0X2xpc3RwICYmIGlp ID4gMCkKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IHNlcXVlbmNlc1stLWlpXTsKKyAg ICAgICAgfQorCisgICAgICB3aGlsZSAoLS1paSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAg aWYgKENPTlNQIChzZXF1ZW5jZXNbaWldKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg TGlzcF9PYmplY3Qgc2VxY29weSA9IEZjb25zIChYQ0FSIChzZXF1ZW5jZXNbaWldKSwgUW5pbCk7 CisgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGhlYWQgPSBzZXFjb3B5OworCisgICAgICAgICAg ICAgIEVYVEVSTkFMX0xJU1RfTE9PUF8yIChsaXN0X2VsdCwgWENEUiAoc2VxdWVuY2VzW2lpXSkp CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgWFNFVENEUiAoc2VxY29weSwg RmNvbnMgKGxpc3RfZWx0LCBRbmlsKSk7CisgICAgICAgICAgICAgICAgICBzZXFjb3B5ID0gWENE UiAoc2VxY29weSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIFhTRVRDRFIg KHNlcWNvcHksIHJlc3VsdCk7CisgICAgICAgICAgICAgIHJlc3VsdCA9IGhlYWQ7CisKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChTVFJJTkdQIChzZXF1ZW5jZXMgW2lpXSkpCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgIElieXRlICpic3RhcnQgPSBYU1RSSU5HX0RBVEEg KHNlcXVlbmNlc1tpaV0pOworICAgICAgICAgICAgICBJYnl0ZSAqYmN1cnNvciA9IGJzdGFydCAr IFhTVFJJTkdfTEVOR1RIIChzZXF1ZW5jZXNbaWldKTsKKworICAgICAgICAgICAgICB3aGlsZSAo YmN1cnNvciA+IGJzdGFydCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBE RUNfSUJZVEVQVFIgKGJjdXJzb3IpOworCisgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGY29u cyAobWFrZV9jaGFyIChpdGV4dF9pY2hhciAoYmN1cnNvcikpLCByZXN1bHQpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChBUlJBWVAgKHNlcXVl bmNlc1tpaV0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBqaiA9IFhGSVhOVU0gKEZs ZW5ndGggKHNlcXVlbmNlc1tpaV0pKTsKKworICAgICAgICAgICAgICBmb3IgKC0tamo7IGpqID49 IDA7IC0tamopCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g RmNvbnMgKEZhcmVmIChzZXF1ZW5jZXNbaWldLCBtYWtlX2ZpeG51bSAoamopKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICghTklMUCAoc2VxdWVuY2VzW2lpXSkpCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgIENIRUNLX1NFUVVFTkNFIChzZXF1ZW5jZXNbaWld KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBSRVRVUk5fVU5HQ1BSTyAocmVz dWx0KTsKKyAgICB9CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgbnNlcXVlbmNlczsgKytpaSkKKyAg ICB7CisgICAgICBpZiAoU1RSSU5HUCAoc2VxdWVuY2VzW2lpXSkpCisgICAgICAgIHsKKyAgICAg ICAgICAvKiBObyBuZWVkIHRvIGFjdHVhbGx5IGdldCB0aGUgY2hhciBsZW5ndGgsIHNpbmNlIHRo ZSBieXRlIGxlbmd0aAorICAgICAgICAgICAgIHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIgdGhhbiBv ciBlcXVhbCB0byB0aGUgY2hhciBsZW5ndGguIFdlIGp1c3QKKyAgICAgICAgICAgICBhbGxvY2F0 ZSB0aGUgYnl0ZS1jb3VudCBvZiBpdGVtcywgdGhlIGV4dHJhIHNwYWNlIGZvciB0aGUgc3RhZ2lu ZworICAgICAgICAgICAgIGRvZXNuJ3QgbWF0dGVyLiAqLworICAgICAgICAgIHN0YWdpbmdfbGVu ICs9IFhTVFJJTkdfTEVOR1RIIChzZXF1ZW5jZXNbaWldKTsKKyAgICAgICAgfQorICAgICAgZWxz ZQorICAgICAgICB7CisgICAgICAgICAgLyogR2V0IHRoZSBpdGVtIGNvdW50IG9mIGVhY2ggc2Vx dWVuY2U7IGluIHBhc3NpbmcsIGNoZWNrIHRoZWlyCisgICAgICAgICAgICAgdHlwZSBhbmQgY2ly Y3VsYXJpdHksIHdlbGwtZm9ybWVkbmVzcy4gKi8KKyAgICAgICAgICBzdGFnaW5nX2xlbiArPSAo WEZJWE5VTSAoRmxlbmd0aCAoc2VxdWVuY2VzW2lpXSkpKTsKKyAgICAgICAgfQorICAgIH0KKwor ICAvKiBObyBuZWVkIHRvIEdDUFJPIGxpc3Bfc3RhZ2luZywgYWxsIGl0cyBlbGVtZW50cyBhcmUg aW4gU0VRVUVOQ0VTLiAqLworICBsaXNwX3N0YWdpbmcgPSBsaXNwX2N1cnNvciA9IGFsbG9jYV9h cnJheSAoTGlzcF9PYmplY3QsIHN0YWdpbmdfbGVuKTsKKworICBmb3IgKGlpID0gMDsgaWkgPCBu c2VxdWVuY2VzOyArK2lpKQorICAgIHsKKyAgICAgIGlmIChDT05TUCAoc2VxdWVuY2VzW2lpXSkp CisgICAgICAgIHsKKyAgICAgICAgICAvKiBXZSBrbm93IHRoZSBsaXN0IGlzIHdlbGwtZm9ybWVk LCBiZWNhdXNlICMnbGVuZ3RoIHN1Y2NlZWRlZCwKKyAgICAgICAgICAgICBhYm92ZSwgc28gd2Ug Y2FuIHVzZSBhIGNoZWFwZXIgbG9vcCB0aGFuIGlzIHVzdWFsIGZvciBleHRlcm5hbAorICAgICAg ICAgICAgIGxpc3RzLiAqLworICAgICAgICAgIExJU1RfTE9PUF8yIChlbHQsIHNlcXVlbmNlc1tp aV0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICpsaXNwX2N1cnNvciA9IGVsdCwgbGlz cF9jdXJzb3IrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoU1RS SU5HUCAoc2VxdWVuY2VzW2lpXSkpCisgICAgICAgIHsKKyAgICAgICAgICBJYnl0ZSAqc3RyaW5n cCA9IFhTVFJJTkdfREFUQSAoc2VxdWVuY2VzW2lpXSk7CisgICAgICAgICAgSWJ5dGUgKmVuZHAg PSBzdHJpbmdwICsgWFNUUklOR19MRU5HVEggKHNlcXVlbmNlc1tpaV0pOworCisgICAgICAgICAg d2hpbGUgKHN0cmluZ3AgPCBlbmRwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAqbGlz cF9jdXJzb3IgPSBtYWtlX2NoYXIgKGl0ZXh0X2ljaGFyIChzdHJpbmdwKSk7CisgICAgICAgICAg ICAgIElOQ19JQllURVBUUiAoc3RyaW5ncCk7CisgICAgICAgICAgICAgICsrbGlzcF9jdXJzb3I7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKFZFQ1RPUlAgKHNlcXVl bmNlc1tpaV0pKQorICAgICAgICB7CisgICAgICAgICAgRWxlbWNvdW50IGxlbiA9IFhWRUNUT1Jf TEVOR1RIIChzZXF1ZW5jZXNbaWldKTsKKyAgICAgICAgICBtZW1jcHkgKGxpc3BfY3Vyc29yLCBY VkVDVE9SX0RBVEEgKHNlcXVlbmNlc1tpaV0pLAorICAgICAgICAgICAgICAgICAgbGVuICogc2l6 ZW9mIChMaXNwX09iamVjdCkpOworICAgICAgICAgIGxpc3BfY3Vyc29yICs9IGxlbjsKKyAgICAg ICAgfQorICAgICAgZWxzZSBpZiAoQVJSQVlQIChzZXF1ZW5jZXNbaWldKSkKKyAgICAgICAgewor ICAgICAgICAgIEVsZW1jb3VudCBsZW4gPSBYRklYTlVNIChGbGVuZ3RoIChzZXF1ZW5jZXNbaWld KSk7CisKKyAgICAgICAgICBmb3IgKGpqID0gMDsgamogPCBsZW47ICsramosICsrbGlzcF9jdXJz b3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICpsaXNwX2N1cnNvciA9IEZhcmVmIChz ZXF1ZW5jZXNbaWldLCBtYWtlX2ZpeG51bSAoamopKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgYXNzZXJ0IChOSUxQIChzZXF1ZW5j ZXNbaWldKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKEVRIChyZXN1bHRfdHlwZSwgUXZl Y3RvcikgfHwgRVEgKHJlc3VsdF90eXBlLCBRYXJyYXkpKQorICAgIHsKKyAgICAgIFJFVFVSTl9V TkdDUFJPIChGdmVjdG9yIChsaXNwX2N1cnNvciAtIGxpc3Bfc3RhZ2luZywgbGlzcF9zdGFnaW5n KSk7CisgICAgfQorCisgIGlmIChFUSAocmVzdWx0X3R5cGUsIFFiaXRfdmVjdG9yKSkKKyAgICB7 CisgICAgICBSRVRVUk5fVU5HQ1BSTyAoRmJpdF92ZWN0b3IgKGxpc3BfY3Vyc29yIC0gbGlzcF9z dGFnaW5nLCBsaXNwX3N0YWdpbmcpKTsKKyAgICB9CisKKyAgcmVzdWx0ID0gRmxpc3QgKGxpc3Bf Y3Vyc29yIC0gbGlzcF9zdGFnaW5nLCBsaXNwX3N0YWdpbmcpOworICByZXN1bHQgPSBjYWxsMiAo UWNvZXJjZSwgcmVzdWx0LCByZXN1bHRfdHlwZSk7CisgIFJFVFVSTl9VTkdDUFJPIChyZXN1bHQp OworfQorCitERUZVTiAoImNvbmNhdGVuYXRlIiwgRmNvbmNhdGVuYXRlLCAxLCBNQU5ZLCAwLCAv KgorQ29uY2F0ZW5hdGUsIGludG8gYSBzZXF1ZW5jZSBvZiB0eXBlIFRZUEUsIHRoZSBhcmd1bWVu dCBTRVFVRU5DRVMuCisKK2FyZ3VtZW50czogKFRZUEUgJnJlc3QgU0VRVUVOQ0VTKQorKi8KKyAg ICAgICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykpCit7CisgIExpc3BfT2JqZWN0IHR5 cGUgPSBhcmdzWzBdOworCisgIHJldHVybiBjb25jYXRlbmF0ZSAobmFyZ3MgLSAxLCBhcmdzICsg MSwgdHlwZSwgMCk7Cit9CisKK0xpc3BfT2JqZWN0Citjb25jYXQyIChMaXNwX09iamVjdCBzZXEx LCBMaXNwX09iamVjdCBzZXEyKQoreworICBMaXNwX09iamVjdCBhcmdzW10gPSB7IHNlcTEsIHNl cTIgfTsKKyAgcmV0dXJuIGNvbmNhdGVuYXRlIChjb3VudG9mIChhcmdzKSwgYXJncywgUXN0cmlu ZywgMCk7Cit9CisKK0xpc3BfT2JqZWN0Citjb25jYXQzIChMaXNwX09iamVjdCBzZXExLCBMaXNw X09iamVjdCBzZXEyLCBMaXNwX09iamVjdCBzZXEzKQoreworICBMaXNwX09iamVjdCBhcmdzW10g PSB7IHNlcTEsIHNlcTIsIHNlcTMgfTsKKyAgcmV0dXJuIGNvbmNhdGVuYXRlIChjb3VudG9mIChh cmdzKSwgYXJncywgUXN0cmluZywgMCk7Cit9CisKK0xpc3BfT2JqZWN0Cit2Y29uY2F0MiAoTGlz cF9PYmplY3Qgc2VxMSwgTGlzcF9PYmplY3Qgc2VxMikKK3sKKyAgTGlzcF9PYmplY3QgYXJnc1td ID0geyBzZXExLCBzZXEyIH07CisgIHJldHVybiBjb25jYXRlbmF0ZSAoY291bnRvZiAoYXJncyks IGFyZ3MsIFF2ZWN0b3IsIDApOworfQorCitMaXNwX09iamVjdAordmNvbmNhdDMgKExpc3BfT2Jq ZWN0IHNlcTEsIExpc3BfT2JqZWN0IHNlcTIsIExpc3BfT2JqZWN0IHNlcTMpCit7CisgIExpc3Bf T2JqZWN0IGFyZ3NbXSA9IHsgc2VxMSwgc2VxMiwgc2VxMyB9OworICByZXR1cm4gY29uY2F0ZW5h dGUgKGNvdW50b2YgKGFyZ3MpLCBhcmdzLCBRdmVjdG9yLCAwKTsKK30KKworREVGVU4gKCJhcHBl bmQiLCBGYXBwZW5kLCAwLCBNQU5ZLCAwLCAvKgorQ29uY2F0ZW5hdGUgYWxsIHRoZSBhcmd1bWVu dHMgYW5kIG1ha2UgdGhlIHJlc3VsdCBhIGxpc3QuCitUaGUgcmVzdWx0IGlzIGEgbGlzdCB3aG9z ZSBlbGVtZW50cyBhcmUgdGhlIGVsZW1lbnRzIG9mIGFsbCB0aGUgYXJndW1lbnRzLgorRWFjaCBh cmd1bWVudCBtYXkgYmUgYSBsaXN0LCB2ZWN0b3IsIGJpdCB2ZWN0b3IsIG9yIHN0cmluZy4KK1Ro ZSBsYXN0IGFyZ3VtZW50IGlzIG5vdCBjb3BpZWQsIGp1c3QgdXNlZCBhcyB0aGUgdGFpbCBvZiB0 aGUgbmV3IGxpc3QuCitBbHNvIHNlZTogYG5jb25jJy4KKworYXJndW1lbnRzOiAoJnJlc3QgQVJH UykKKyovCisgICAgICAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpKQoreworICByZXR1 cm4gY29uY2F0ZW5hdGUgKG5hcmdzLCBhcmdzLCBRbGlzdCwgMSk7Cit9CisMCiBERUZVTiAoInJl ZHVjZSIsIEZyZWR1Y2UsIDIsIE1BTlksIDAsIC8qCiBDb21iaW5lIHRoZSBlbGVtZW50cyBvZiBT RVFVRU5DRSB1c2luZyBGVU5DVElPTiwgYSBiaW5hcnkgb3BlcmF0aW9uLgogCkBAIC04MjkzLDEx ICs4NjQ2LDkgQEAKICAgREVGU1lNQk9MIChRbWVyZ2UpOwogICBERUZTWU1CT0wgKFFmaWxsKTsK ICAgREVGU1lNQk9MIChRaWRlbnRpdHkpOwotICBERUZTWU1CT0wgKFF2ZWN0b3IpOwogICBERUZT WU1CT0wgKFFhcnJheSk7CiAgIERFRlNZTUJPTCAoUXN0cmluZyk7CiAgIERFRlNZTUJPTCAoUWxp c3QpOwotICBERUZTWU1CT0wgKFFiaXRfdmVjdG9yKTsKICAgZGVmc3ltYm9sICgmUXNvcnRYLCAi c29ydCoiKTsKICAgREVGU1lNQk9MIChRcmVkdWNlKTsKICAgREVGU1lNQk9MIChRcmVwbGFjZSk7 CkBAIC04Mzc4LDYgKzg3MjksOCBAQAogICBERUZTVUJSIChGbWFwX2ludG8pOwogICBERUZTVUJS IChGc29tZSk7CiAgIERFRlNVQlIgKEZldmVyeSk7CisgIERFRlNVQlIgKEZjb25jYXRlbmF0ZSk7 CisgIERFRlNVQlIgKEZhcHBlbmQpOwogICBERUZTVUJSIChGcmVkdWNlKTsKICAgREVGU1VCUiAo RnJlcGxhY2UpOwogICBERUZTVUJSIChGbnN1YnN0aXR1dGUpOwpkaWZmIC1yIGNiZTEwNzE0MWFm ZSAtciAxN2EzYzZiNTJkZmQgc3JjL3Rscy5jCi0tLSBhL3NyYy90bHMuYwlUaHUgSnVuIDMwIDAw OjA2OjM4IDIwMTYgKzAxMDAKKysrIGIvc3JjL3Rscy5jCVRodSBKdW4gMzAgMDA6NDE6MzkgMjAx NiArMDEwMApAQCAtNzE5LDcgKzcxOSw3IEBACiAgIGFyZ3NbMl0gPSBidWlsZF9hc2NzdHJpbmcg KCIgKCIpOwogICBhcmdzWzNdID0gYnVpbGRfZXh0c3RyaW5nICh0b2tlbl91cmwsIFFuYXRpdmUp OwogICBhcmdzWzRdID0gYnVpbGRfYXNjc3RyaW5nICgiKSIpOwotICBsc3BfcGFzc3dvcmQgPSBj YWxsMSAoUXJlYWRfcGFzc3dkLCBGY29uY2F0ICg1LCBhcmdzKSk7CisgIGxzcF9wYXNzd29yZCA9 IGNhbGwxIChRcmVhZF9wYXNzd2QsIGNvbmNhdGVuYXRlICg1LCBhcmdzLCBRc3RyaW5nLCAwKSk7 CiAgIGNfcGFzc3dvcmQgPSBMSVNQX1NUUklOR19UT19FWFRFUk5BTCAobHNwX3Bhc3N3b3JkLCBR bmF0aXZlKTsKIAogICAvKiBJbnNlcnQgdGhlIHBhc3N3b3JkICovCkBAIC04MDAsNyArODAwLDcg QEAKICAgYXJnc1syXSA9IGJ1aWxkX2FzY3N0cmluZyAoRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nIChl cnIpKTsKICAgYXJnc1szXSA9IGJ1aWxkX2FzY3N0cmluZyAoIjoiKTsKICAgYXJnc1s0XSA9IGJ1 aWxkX2FzY3N0cmluZyAoRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmcgKGVycikpOwotICByZXR1cm4g RmNvbmNhdCAoNSwgYXJncyk7CisgIHJldHVybiBjb25jYXRlbmF0ZSAoY291bnRvZiAoYXJncyks IGFyZ3MsIFFzdHJpbmcsIDApOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZwoKCi0tIArigJhU cmFtYWRvbCBpcyBmdXJ0aGVyIGZlZCB0byBjYXR0bGUgW+KApl0gd2hlbiB3b3JraW5nIHRoZW0g W+KApl0gKGFzIGRyYWZ0CmFuaW1hbHMpIHNvIHRoYXQgdGhlIGFuaW1hbHMgZG8gbm90IGdldCB0 aXJlZCBxdWlja2x5LiDigKbigJkKCeKAlCBBbmdld2FuZHRlIENoZW1pZSwgU2VwdCAyMDE0LCBk ZXNjcmliaW5nIHRoZSBzb2NpYWwgY29udGV4dCBvZgoJKHN5bnRoZXRpYykgdHJhbWFkb2wgaGF2 aW5nIGJlZW4gZm91bmQgaW4gQ2FtZXJvb24gdHJlZSByb290cy4KCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhFbWFjcy1QYXRjaGVzIG1haWxpbmcgbGlz dApYRW1hY3MtUGF0Y2hlc0B4ZW1hY3Mub3JnCmh0dHA6Ly9saXN0cy54ZW1hY3Mub3JnL21haWxt YW4vbGlzdGluZm8veGVtYWNzLXBhdGNoZXMK