From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joel Aelwyn Date: Sat, 01 Oct 2005 23:54:07 +0000 Subject: Per-list recipient delimiters (patch attached) Message-Id: <433F219F.1060901@lightbearer.com> MIME-Version: 1 Content-Type: multipart/mixed; boundary="------------enig3E62BCCDEC87FD3A5C5A63AF" List-Id: To: mlmmj@mlmmj.org This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig3E62BCCDEC87FD3A5C5A63AF Content-Type: multipart/mixed; boundary="------------070507030108000403030606" This is a multi-part message in MIME format. --------------070507030108000403030606 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit As discussed a bit ago, I've been working on a patch to support per-list configurable recipient delimiters. I believe the patch below covers just about everything, and in some ways is significantly more flexible than most of the alternatives which I've seen so far: 1) Recipient delimiters are considered strings, not characters. This means that it supports arbitrary multi-character sequences; something which isn't used very often in practice, but which is supported by at least some mailers. Really, it's no more complex or slower, so why not support it? 2) Uses the standard configuration file arrangement. The delimiter for a list is read from the first line of .../control/delimiter (not including the newline, if present, of course). 3) I have attempted to keep the patch minimally invasive. Casual visual inspection should be enough to make it fairly obvious what's going on; I have specifically *not* cleaned up several sub-optimal situations that I came across while doing the patch (mostly places with memory leaks that almost certainly don't matter in practice, or where things are re-allocated several times rather than being passed around, despite all callers being guaranteed to have the data available). 4) I have *not* attempted to write a help file for this (apart from, well, this mail). 5) The code has at least a couple of points where it assumes that the literal '-' is safe to use (things like -moderators). However, I cannot find anything where this is actually a failure case; all of the addresses generated this way are either unused, or occur after at least one instance of the actual delimiter (as 'parameter' separators), or do not appear to be used for anything but labeling. However, I don't know every possible situation that could fall into this category offhand, so... 6) The only guarantee you have about this patch is that I'm running it, and so far it hasn't broken things on my server. I certainly tried to throw several pathological cases at it, but I could always have missed something. Since MLMMJ doesn't appear to have any unit test suite, I didn't add any. 7) There is at least one known... hmmm. I'm not sure if it's a 'misfeature' or not, and it will only occur if your server is configured to recognize *multiple* list delimiters (say, both '+' and '-') on all lists. In this case, if someone sends email to, say, 'list-subscribe' but your list is configured to look for '+' as a delimiter, it will fail to match the recipient-extra string (since it is looking for '+...' but the string is '-subscribe'). The only obvious way around this would be to make the delimiter entirely optional, and parse it up front, but read a string provided by the mailer in some fashion to find the recipient-extra portion if it can't match the extra portion at all. If there's demand, I can investigate this; I might do so anyway (since I believe my mailer can provide this, and it would allow users to use either extension), but no promises. [ Note: the patch was made against sources based on the Debian 1.2.8-7 package, but as far as I know, it *should* patch just fine against stock 1.2.8, possibly with the free() -> myfree() patch for prepstdreply.c that was posted previously. ] -- Joel Aelwyn --------------070507030108000403030606 Content-Type: text/plain; name="per-list_recipient_delimiter.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="per-list_recipient_delimiter.patch" ZGlmZiAtdXJOYWQgbWxtbWotMS4yLjguREVCSUFOLTcvaW5jbHVkZS9nZXRsaXN0ZGVsaW0u aCBjaHJvb3Qtd29yay41L2luY2x1ZGUvZ2V0bGlzdGRlbGltLmgKLS0tIG1sbW1qLTEuMi44 LkRFQklBTi03L2luY2x1ZGUvZ2V0bGlzdGRlbGltLmgJMTk2OS0xMi0zMSAxNzowMDowMC4w MDAwMDAwMDAgLTA3MDAKKysrIGNocm9vdC13b3JrLjUvaW5jbHVkZS9nZXRsaXN0ZGVsaW0u aAkyMDA1LTA5LTE1IDAwOjUwOjUyLjAwMDAwMDAwMCAtMDYwMApAQCAtMCwwICsxLDI5IEBA CisvKiBDb3B5cmlnaHQgMjAwNSBKb2VsIEFlbHd5biA8am9lbEBsaWdodGJlYXJlci5jb20+ CisgKgorICogJElkJAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsIGFuZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB TElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEdFVExJU1RERUxJ TV9ICisjZGVmaW5lIEdFVExJU1RERUxJTV9ICisKK2NoYXIgKmdldGxpc3RkZWxpbShjb25z dCBjaGFyICpsaXN0ZGlyKTsKKworI2VuZGlmIC8qIEdFVExJU1RERUxJTV9IICovCmRpZmYg LXVyTmFkIG1sbW1qLTEuMi44LkRFQklBTi03L2luY2x1ZGUvbWxtbWouaCBjaHJvb3Qtd29y ay41L2luY2x1ZGUvbWxtbWouaAotLS0gbWxtbWotMS4yLjguREVCSUFOLTcvaW5jbHVkZS9t bG1tai5oCTIwMDUtMDEtMTUgMDM6NTM6NTIuMDAwMDAwMDAwIC0wNzAwCisrKyBjaHJvb3Qt d29yay41L2luY2x1ZGUvbWxtbWouaAkyMDA1LTA5LTIxIDAxOjAwOjIyLjY0NjI4OTAwMCAt MDYwMApAQCAtMjgsNyArMjgsNyBAQAogCiAjZGVmaW5lIFJFTEFZSE9TVCAiMTI3LjAuMC4x IgogI2RlZmluZSBSRUFEX0JVRlNJWkUgMjA0OAotI2RlZmluZSBSRUNJUERFTElNICcrJyAg LyogWFhYIFdhcm5pbmc6IG5vdCBjaGFuZ2FibGUgYXQgdGhlIG1vbWVudCAqLworI2RlZmlu ZSBERUZBVUxUX1JFQ0lQREVMSU0gIisiICAvKiBEZWZhdWx0IHJlY2lwaWVudCBkZWxpbWl0 ZXIgKi8KICNkZWZpbmUgTU9EUkVRTElGRSA2MDQ4MDAgLyogSG93IGxvbmcgdGltZSB3aWxs IG1vZGVyYXRpb24gcmVxdWVzdHMgYmUga2VwdD8KIAkJCSAgICogNjA0ODAwcyBpcyA3IGRh eXMgKi8KICNkZWZpbmUgRElTQ0FSREVETElGRSA2MDQ4MDAgLyogSG93IGxvbmcgdGltZSB3 aWxsIGRpc2NhcmRlZCBtYWlscyBiZSBrZXB0PwpkaWZmIC11ck5hZCBtbG1tai0xLjIuOC5E RUJJQU4tNy9pbmNsdWRlL21sbW1qLXNlbmQuaCBjaHJvb3Qtd29yay41L2luY2x1ZGUvbWxt bWotc2VuZC5oCi0tLSBtbG1tai0xLjIuOC5ERUJJQU4tNy9pbmNsdWRlL21sbW1qLXNlbmQu aAkyMDA1LTAyLTA4IDExOjEzOjE0LjAwMDAwMDAwMCAtMDcwMAorKysgY2hyb290LXdvcmsu NS9pbmNsdWRlL21sbW1qLXNlbmQuaAkyMDA1LTA5LTIwIDIyOjEzOjE1LjU3Nzc0NjAwMCAt MDYwMApAQCAtMzEsMTYgKzMxLDE2IEBACiAJICAgICAgc2l6ZV90IGJvZHlsZW4pOwogaW50 IHNlbmRfbWFpbF9tYW55X2ZkKGludCBzb2NrZmQsIGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0 IGNoYXIgKnJlcGx5dG8sCiAJCSAgIGNoYXIgKm1haWxtYXAsIHNpemVfdCBtYWlsc2l6ZSwg aW50IHN1YmZkLAotCQkgICBjb25zdCBjaGFyICpsaXN0YWRkciwgY29uc3QgY2hhciAqYXJj aGl2ZWZpbGVuYW1lLAotCQkgICBjb25zdCBjaGFyICpsaXN0ZGlyLCBjb25zdCBjaGFyICpt bG1tamJvdW5jZSwKLQkJICAgY29uc3QgY2hhciAqaGRycywgc2l6ZV90IGhkcnNsZW4sIGNv bnN0IGNoYXIgKmJvZHksCi0JCSAgIHNpemVfdCBib2R5bGVuKTsKKwkJICAgY29uc3QgY2hh ciAqbGlzdGFkZHIsIGNvbnN0IGNoYXIgKmxpc3RkZWxpbSwKKwkJICAgY29uc3QgY2hhciAq YXJjaGl2ZWZpbGVuYW1lLCBjb25zdCBjaGFyICpsaXN0ZGlyLAorCQkgICBjb25zdCBjaGFy ICptbG1tamJvdW5jZSwgY29uc3QgY2hhciAqaGRycywgc2l6ZV90IGhkcnNsZW4sCisJCSAg IGNvbnN0IGNoYXIgKmJvZHksIHNpemVfdCBib2R5bGVuKTsKIGludCBzZW5kX21haWxfbWFu eV9saXN0KGludCBzb2NrZmQsIGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnJlcGx5 dG8sCiAJCSAgIGNoYXIgKm1haWxtYXAsIHNpemVfdCBtYWlsc2l6ZSwgc3RydWN0IHN0cmxp c3QgKmFkZHJzLAotCQkgICBjb25zdCBjaGFyICpsaXN0YWRkciwgY29uc3QgY2hhciAqYXJj aGl2ZWZpbGVuYW1lLAotCQkgICBjb25zdCBjaGFyICpsaXN0ZGlyLCBjb25zdCBjaGFyICpt bG1tamJvdW5jZSwKLQkJICAgY29uc3QgY2hhciAqaGRycywgc2l6ZV90IGhkcnNsZW4sIGNv bnN0IGNoYXIgKmJvZHksCi0JCSAgIHNpemVfdCBib2R5bGVuKTsKKwkJICAgY29uc3QgY2hh ciAqbGlzdGFkZHIsIGNvbnN0IGNoYXIgKmxpc3RkZWxpbSwKKwkJICAgY29uc3QgY2hhciAq YXJjaGl2ZWZpbGVuYW1lLCBjb25zdCBjaGFyICpsaXN0ZGlyLAorCQkgICBjb25zdCBjaGFy ICptbG1tamJvdW5jZSwgY29uc3QgY2hhciAqaGRycywgc2l6ZV90IGhkcnNsZW4sCisJCSAg IGNvbnN0IGNoYXIgKmJvZHksIHNpemVfdCBib2R5bGVuKTsKIGludCBzZW5kX21haWxfdmVy cChpbnQgc29ja2ZkLCBzdHJ1Y3Qgc3RybGlzdCAqYWRkcnMsIGNoYXIgKm1haWxtYXAsCiAJ CSAgIHNpemVfdCBtYWlsc2l6ZSwgY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqbGlz dGRpciwKIAkJICAgY29uc3QgY2hhciAqaGRycywgc2l6ZV90IGhkcnNsZW4sIGNvbnN0IGNo YXIgKmJvZHksCmRpZmYgLXVyTmFkIG1sbW1qLTEuMi44LkRFQklBTi03L2luY2x1ZGUvbWxt bWotc3ViLmggY2hyb290LXdvcmsuNS9pbmNsdWRlL21sbW1qLXN1Yi5oCi0tLSBtbG1tai0x LjIuOC5ERUJJQU4tNy9pbmNsdWRlL21sbW1qLXN1Yi5oCTIwMDQtMDktMjMgMDg6Mjk6MjYu MDAwMDAwMDAwIC0wNjAwCisrKyBjaHJvb3Qtd29yay41L2luY2x1ZGUvbWxtbWotc3ViLmgJ MjAwNS0wOS0xNSAwMTo0OTozOS4wMDAwMDAwMDAgLTA2MDAKQEAgLTI3LDEwICsyNywxMCBA QAogI2luY2x1ZGUgPG1sbW1qLmg+CiAKIHZvaWQgY29uZmlybV9zdWIoY29uc3QgY2hhciAq bGlzdGRpciwgY29uc3QgY2hhciAqbGlzdGFkZHIsCi0JCSBjb25zdCBjaGFyICpzdWJhZGRy LCBjb25zdCBjaGFyICptbG1tanNlbmQsCi0JCSBlbnVtIHN1YnR5cGUgdHlwZXN1Yik7CisJ CSBjb25zdCBjaGFyICpsaXN0ZGVsaW0sIGNvbnN0IGNoYXIgKnN1YmFkZHIsCisJCSBjb25z dCBjaGFyICptbG1tanNlbmQsIGVudW0gc3VidHlwZSB0eXBlc3ViKTsKIHZvaWQgZ2VuZXJh dGVfc3ViY29uZmlybShjb25zdCBjaGFyICpsaXN0ZGlyLCBjb25zdCBjaGFyICpsaXN0YWRy LAotCQljb25zdCBjaGFyICpzdWJhZGRyLCBjb25zdCBjaGFyICptbG1tanNlbmQsCi0JCWVu dW0gc3VidHlwZSB0eXBlc3ViKTsKKwkJY29uc3QgY2hhciAqbGlzdGRlbGltLCBjb25zdCBj aGFyICpzdWJhZGRyLAorCQljb25zdCBjaGFyICptbG1tanNlbmQsIGVudW0gc3VidHlwZSB0 eXBlc3ViKTsKIAogI2VuZGlmIC8qIE1MTU1KX1NVQlNDUklCRV9IICovCmRpZmYgLXVyTmFk IG1sbW1qLTEuMi44LkRFQklBTi03L2luY2x1ZGUvbWxtbWotdW5zdWIuaCBjaHJvb3Qtd29y ay41L2luY2x1ZGUvbWxtbWotdW5zdWIuaAotLS0gbWxtbWotMS4yLjguREVCSUFOLTcvaW5j bHVkZS9tbG1tai11bnN1Yi5oCTIwMDQtMDktMjMgMDg6Mjk6MjcuMDAwMDAwMDAwIC0wNjAw CisrKyBjaHJvb3Qtd29yay41L2luY2x1ZGUvbWxtbWotdW5zdWIuaAkyMDA1LTA5LTE1IDAx OjQyOjI5LjAwMDAwMDAwMCAtMDYwMApAQCAtMjcsMTEgKzI3LDExIEBACiAjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+CiAKIHZvaWQgY29uZmlybV91bnN1Yihjb25zdCBjaGFyICpsaXN0ZGly LCBjb25zdCBjaGFyICpsaXN0YWRkciwKLQkJICAgY29uc3QgY2hhciAqc3ViYWRkciwgY29u c3QgY2hhciAqbWxtbWosCi0JCSAgIGVudW0gc3VidHlwZSB0eXBlc3ViKTsKKwkJICAgY29u c3QgY2hhciAqbGlzdGRlbGltLCBjb25zdCBjaGFyICpzdWJhZGRyLAorCQkgICBjb25zdCBj aGFyICptbG1taiwgZW51bSBzdWJ0eXBlIHR5cGVzdWIpOwogc3NpemVfdCB1bnN1YnNjcmli ZShpbnQgc3VicmVhZGZkLCBpbnQgc3Vid3JpdGVmZCwgY29uc3QgY2hhciAqYWRkcmVzcyk7 CiB2b2lkIGdlbmVyYXRlX3Vuc3ViY29uZmlybShjb25zdCBjaGFyICpsaXN0ZGlyLCBjb25z dCBjaGFyICpsaXN0YWRkciwKLQkJCSAgIGNvbnN0IGNoYXIgKnN1YmFkZHIsIGNvbnN0IGNo YXIgKm1sbW1qc2VuZCwKLQkJCSAgIGVudW0gc3VidHlwZSB0eXBlc3ViKTsKKwkJCSAgIGNv bnN0IGNoYXIgKmxpc3RkZWxpbSwgY29uc3QgY2hhciAqc3ViYWRkciwKKwkJCSAgIGNvbnN0 IGNoYXIgKm1sbW1qc2VuZCwgZW51bSBzdWJ0eXBlIHR5cGVzdWIpOwogCiAjZW5kaWYgLyog TUxNTUpfVU5TVUJTQ1JJQkVfSCAqLwpkaWZmIC11ck5hZCBtbG1tai0xLjIuOC5ERUJJQU4t Ny9pbmNsdWRlL3ByZXBzdGRyZXBseS5oIGNocm9vdC13b3JrLjUvaW5jbHVkZS9wcmVwc3Rk cmVwbHkuaAotLS0gbWxtbWotMS4yLjguREVCSUFOLTcvaW5jbHVkZS9wcmVwc3RkcmVwbHku aAkyMDA0LTExLTExIDE2OjI3OjA2LjAwMDAwMDAwMCAtMDcwMAorKysgY2hyb290LXdvcmsu NS9pbmNsdWRlL3ByZXBzdGRyZXBseS5oCTIwMDUtMDktMjAgMjE6NTE6NDUuMTA0Njk5MDAw IC0wNjAwCkBAIC0yNCwxMCArMjQsMTAgQEAKICNpZm5kZWYgUFJFUFNURFJFUExZX0gKICNk ZWZpbmUgUFJFUFNURFJFUExZX0gKIAotY2hhciAqc3Vic3RpdHV0ZShjb25zdCBjaGFyICps aW5lLCBjb25zdCBjaGFyICpsaXN0YWRkciwgc2l6ZV90IGRhdGFjb3VudCwKLQkJIGNoYXIg KipkYXRhKTsKLWNoYXIgKnN1YnN0aXR1dGVfb25lKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0 IGNoYXIgKmxpc3RhZGRyLCBzaXplX3QgZGF0YWNvdW50LAotCQkgY2hhciAqKmRhdGEpOwor Y2hhciAqc3Vic3RpdHV0ZShjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpsaXN0YWRk ciwgY29uc3QgY2hhciAqbGlzdGRlbGltLAorCQkgc2l6ZV90IGRhdGFjb3VudCwgY2hhciAq KmRhdGEpOworY2hhciAqc3Vic3RpdHV0ZV9vbmUoY29uc3QgY2hhciAqbGluZSwgY29uc3Qg Y2hhciAqbGlzdGFkZHIsCisJCSBjb25zdCBjaGFyICpsaXN0ZGVsaW0sIHNpemVfdCBkYXRh Y291bnQsIGNoYXIgKipkYXRhKTsKIGNoYXIgKnByZXBzdGRyZXBseShjb25zdCBjaGFyICps aXN0ZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZnJvbSwKIAkJICAg Y29uc3QgY2hhciAqdG8sIGNvbnN0IGNoYXIgKnJlcGx5dG8sIHNpemVfdCB0b2tlbmNvdW50 LAogCQkgICBjaGFyICoqZGF0YSk7CmRpZmYgLXVyTmFkIG1sbW1qLTEuMi44LkRFQklBTi03 L3NyYy9nZXRsaXN0ZGVsaW0uYyBjaHJvb3Qtd29yay42L3NyYy9nZXRsaXN0ZGVsaW0uYwot LS0gbWxtbWotMS4yLjguREVCSUFOLTcvc3JjL2dldGxpc3RkZWxpbS5jCTE5NjktMTItMzEg MTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBjaHJvb3Qtd29yay42L3NyYy9nZXRsaXN0 ZGVsaW0uYwkyMDA1LTA5LTIxIDA5OjU3OjMxLjQwMDE5NzAwMCAtMDYwMApAQCAtMCwwICsx LDcwIEBACisvKiBDb3B5cmlnaHQgMjAwNSBKb2VsIEFlbHd5biA8am9lbEBsaWdodGJlYXJl ci5jb20+CisgKgorICogJElkJAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAq IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsIGFuZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICog QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MrICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxmY250 bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1 ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJtbG1tai5o IgorI2luY2x1ZGUgImdldGxpc3RkZWxpbS5oIgorI2luY2x1ZGUgImNob21wLmgiCisjaW5j bHVkZSAibG9nX2Vycm9yLmgiCisjaW5jbHVkZSAibXlnZXRsaW5lLmgiCisjaW5jbHVkZSAi c3RyZ2VuLmgiCisjaW5jbHVkZSAibWVtb3J5LmgiCisKK2NoYXIgKmdldGxpc3RkZWxpbShj b25zdCBjaGFyICpsaXN0ZGlyKQoreworCWNoYXIgKmRlbGltZm4sICpkZWxpbXN0cjsKKwlp bnQgZGVsaW1mZDsKKworCWRlbGltZm4gPSBjb25jYXRzdHIoMiwgbGlzdGRpciwgIi9jb250 cm9sL2RlbGltaXRlciIpOworCWlmKC0xICE9IChkZWxpbWZkID0gb3BlbihkZWxpbWZuLCBP X1JET05MWSkpKXsKKwkJZGVsaW1zdHIgPSBteWdldGxpbmUoZGVsaW1mZCk7CisJCWNsb3Nl KGRlbGltZmQpOworCisJCWlmKE5VTEwgPT0gZGVsaW1zdHIpeworCQkJbG9nX2Vycm9yKExP R19BUkdTLAorCQkJCSAgIkZBVEFMLiBDb3VsZCBub3QgZ2V0IGxpc3QgZGVsaW1pdGVyIGZy b20gJXMiLAorCQkJCSAgZGVsaW1mbik7CisJCQlteWZyZWUoZGVsaW1mbik7CisJCQlleGl0 KEVYSVRfRkFJTFVSRSk7CisJCX0KKwkKKwkJY2hvbXAoZGVsaW1zdHIpOworCQorCQlpZigw ID09IHN0cmxlbihkZWxpbXN0cikpeworCQkJbG9nX2Vycm9yKExPR19BUkdTLAorCQkJCSAg IkZBVEFMLiBaZXJvLWxlbmd0aCBkZWxpbWl0ZXIgZm91bmQgZnJvbSAlcyIsCisJCQkJICBk ZWxpbWZuKTsKKwkJCW15ZnJlZShkZWxpbWZuKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsK KwkJfQorCX0gZWxzZQorCQlkZWxpbXN0ciA9IG15c3RyZHVwKERFRkFVTFRfUkVDSVBERUxJ TSk7CisKKwlteWZyZWUoZGVsaW1mbik7CisKKwlyZXR1cm4gZGVsaW1zdHI7Cit9CmRpZmYg LXVyTmFkIG1sbW1qLTEuMi44LkRFQklBTi03L3NyYy9saXN0Y29udHJvbC5jIGNocm9vdC13 b3JrLjYvc3JjL2xpc3Rjb250cm9sLmMKLS0tIG1sbW1qLTEuMi44LkRFQklBTi03L3NyYy9s aXN0Y29udHJvbC5jCTIwMDUtMDUtMDIgMTE6Mzk6MTAuMDAwMDAwMDAwIC0wNjAwCisrKyBj aHJvb3Qtd29yay42L3NyYy9saXN0Y29udHJvbC5jCTIwMDUtMDktMjIgMDA6MjU6MjQuNjQy MjgxNjI1IC0wNjAwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAibWxtbWouaCIKICNp bmNsdWRlICJsaXN0Y29udHJvbC5oIgogI2luY2x1ZGUgImZpbmRfZW1haWxfYWRyLmgiCisj aW5jbHVkZSAiZ2V0bGlzdGRlbGltLmgiCiAjaW5jbHVkZSAic3RyZ2VuLmgiCiAjaW5jbHVk ZSAic2VuZF9oZWxwLmgiCiAjaW5jbHVkZSAic2VuZF9saXN0LmgiCkBAIC0xMDAsNyArMTAx LDcgQEAKIAkJY29uc3QgY2hhciAqbWxtbWp1bnN1YiwgY29uc3QgY2hhciAqbWxtbWpzZW5k LAogCQljb25zdCBjaGFyICptbG1tamJvdW5jZSwgY29uc3QgY2hhciAqbWFpbG5hbWUpCiB7 Ci0JY2hhciAqYXRzaWduLCAqcmVjaXBkZWxpbXNpZ24sICpib3VuY2VuciwgKnRtcHN0cjsK KwljaGFyICphdHNpZ24sICpyZWNpcGRlbGltc2lnbiwgKmxpc3RkZWxpbSwgKmJvdW5jZW5y LCAqdG1wc3RyOwogCWNoYXIgKmNvbnRyb2xzdHIsICpwYXJhbSA9IE5VTEwsICpjb25mZmls ZW5hbWUsICptb2RlcmF0ZWZpbGVuYW1lOwogCWNoYXIgKmMsICphcmNoaXZlZmlsZW5hbWUs ICpzZW5kZmlsZW5hbWU7CiAJY29uc3QgY2hhciAqc3Vic3dpdGNoOwpAQCAtMTIwLDcgKzEy MSw4IEBACiAJZWxzZQogCQlzdWJzd2l0Y2ggPSAiLUMiOwogCQotCXJlY2lwZGVsaW1zaWdu ID0gaW5kZXgoY29udHJvbGFkZHIsIFJFQ0lQREVMSU0pOworCWxpc3RkZWxpbSA9IGdldGxp c3RkZWxpbShsaXN0ZGlyKTsKKwlyZWNpcGRlbGltc2lnbiA9IHN0cnN0cihjb250cm9sYWRk ciwgbGlzdGRlbGltKTsKIAlNWV9BU1NFUlQocmVjaXBkZWxpbXNpZ24pOwogCWF0c2lnbiA9 IGluZGV4KGNvbnRyb2xhZGRyLCAnQCcpOwogCU1ZX0FTU0VSVChhdHNpZ24pOwpAQCAtMTI4 LDcgKzEzMCw4IEBACiAKIAljb250cm9sc3RyID0gbXltYWxsb2MobGVuKTsKIAlNWV9BU1NF UlQoY29udHJvbHN0cik7Ci0Jc25wcmludGYoY29udHJvbHN0ciwgbGVuLCAiJXMiLCByZWNp cGRlbGltc2lnbiArIDEpOworCXNucHJpbnRmKGNvbnRyb2xzdHIsIGxlbiwgIiVzIiwgcmVj aXBkZWxpbXNpZ24gKyBzdHJsZW4obGlzdGRlbGltKSk7CisJbXlmcmVlKGxpc3RkZWxpbSk7 CiAKICNpZiAwCiAJbG9nX2Vycm9yKExPR19BUkdTLCAiY29udHJvbHN0ciA9IFslc11cbiIs IGNvbnRyb2xzdHIpOwpkaWZmIC11ck5hZCBtbG1tai0xLjIuOC5ERUJJQU4tNy9zcmMvTWFr ZWZpbGUuaW4gY2hyb290LXdvcmsuNS9zcmMvTWFrZWZpbGUuaW4KLS0tIG1sbW1qLTEuMi44 LkRFQklBTi03L3NyYy9NYWtlZmlsZS5pbgkyMDA1LTA2LTIwIDA3OjM0OjAyLjAwMDAwMDAw MCAtMDYwMAorKysgY2hyb290LXdvcmsuNS9zcmMvTWFrZWZpbGUuaW4JMjAwNS0wOS0xNSAw MTozODoyOS4wMDAwMDAwMDAgLTA2MDAKQEAgLTYxLDggKzYxLDggQEAKIAlzdWJzY3JpYmVy ZnVuY3MuJChPQkpFWFQpIHN0cmdlbi4kKE9CSkVYVCkgXAogCXJhbmRvbS1pbnQuJChPQkpF WFQpIHdyaXRlbi4kKE9CSkVYVCkgcHJlcHN0ZHJlcGx5LiQoT0JKRVhUKSBcCiAJbXlnZXRs aW5lLiQoT0JKRVhUKSBjaG9tcC4kKE9CSkVYVCkgZ2V0bGlzdGFkZHIuJChPQkpFWFQpIFwK LQltZW1vcnkuJChPQkpFWFQpIGZpbmRfZW1haWxfYWRyLiQoT0JKRVhUKSBnZXRoZHJsaW5l LiQoT0JKRVhUKSBcCi0JcmVhZG4uJChPQkpFWFQpCisJZ2V0bGlzdGRlbGltLiQoT0JKRVhU KSBtZW1vcnkuJChPQkpFWFQpIGZpbmRfZW1haWxfYWRyLiQoT0JKRVhUKSBcCisJZ2V0aGRy bGluZS4kKE9CSkVYVCkgcmVhZG4uJChPQkpFWFQpCiBtbG1tal9ib3VuY2VfT0JKRUNUUyA9 ICQoYW1fbWxtbWpfYm91bmNlX09CSkVDVFMpCiBtbG1tal9ib3VuY2VfTERBREQgPSAkKExE QUREKQogYW1fbWxtbWpfbGlzdF9PQkpFQ1RTID0gbWxtbWotbGlzdC4kKE9CSkVYVCkgc3Ry Z2VuLiQoT0JKRVhUKSBcCkBAIC03NSwxNSArNzUsMTUgQEAKIAlteWdldGxpbmUuJChPQkpF WFQpIHN0cmdlbi4kKE9CSkVYVCkgcmFuZG9tLWludC4kKE9CSkVYVCkgXAogCWNob21wLiQo T0JKRVhUKSB3cml0ZW4uJChPQkpFWFQpIG1lbW9yeS4kKE9CSkVYVCkgXAogCWN0cmx2YWx1 ZS4kKE9CSkVYVCkgc2VuZF9kaWdlc3QuJChPQkpFWFQpIFwKLQlnZXRsaXN0YWRkci4kKE9C SkVYVCkgZHVtcGZkMmZkLiQoT0JKRVhUKSBteWxvY2tpbmcuJChPQkpFWFQpIFwKLQlsb2df b3Blci4kKE9CSkVYVCkgcmVhZG4uJChPQkpFWFQpCisJZ2V0bGlzdGFkZHIuJChPQkpFWFQp IGdldGxpc3RkZWxpbS4kKE9CSkVYVCkgZHVtcGZkMmZkLiQoT0JKRVhUKSBcCisJbXlsb2Nr aW5nLiQoT0JKRVhUKSBsb2dfb3Blci4kKE9CSkVYVCkgcmVhZG4uJChPQkpFWFQpCiBtbG1t al9tYWludGRfT0JKRUNUUyA9ICQoYW1fbWxtbWpfbWFpbnRkX09CSkVDVFMpCiBtbG1tal9t YWludGRfTERBREQgPSAkKExEQUREKQogYW1fbWxtbWpfcHJvY2Vzc19PQkpFQ1RTID0gbWxt bWotcHJvY2Vzcy4kKE9CSkVYVCkgd3JpdGVuLiQoT0JKRVhUKSBcCiAJZmluZF9lbWFpbF9h ZHIuJChPQkpFWFQpIGluY2luZGV4ZmlsZS4kKE9CSkVYVCkgaXRvYS4kKE9CSkVYVCkgXAot CWdldGxpc3RhZGRyLiQoT0JKRVhUKSBjaG9tcC4kKE9CSkVYVCkgbXlsb2NraW5nLiQoT0JK RVhUKSBcCi0JbGlzdGNvbnRyb2wuJChPQkpFWFQpIHJhbmRvbS1pbnQuJChPQkpFWFQpIHN0 cmdlbi4kKE9CSkVYVCkgXAotCXByaW50LXZlcnNpb24uJChPQkpFWFQpIHNlbmRfaGVscC4k KE9CSkVYVCkgXAorCWdldGxpc3RhZGRyLiQoT0JKRVhUKSBnZXRsaXN0ZGVsaW0uJChPQkpF WFQpIGNob21wLiQoT0JKRVhUKSBcCisJbXlsb2NraW5nLiQoT0JKRVhUKSBsaXN0Y29udHJv bC4kKE9CSkVYVCkgcmFuZG9tLWludC4kKE9CSkVYVCkgXAorCXN0cmdlbi4kKE9CSkVYVCkg cHJpbnQtdmVyc2lvbi4kKE9CSkVYVCkgc2VuZF9oZWxwLiQoT0JKRVhUKSBcCiAJcHJlcHN0 ZHJlcGx5LiQoT0JKRVhUKSBkb19hbGxfdGhlX3Zvb2RvX2hlcmUuJChPQkpFWFQpIFwKIAlt eWdldGxpbmUuJChPQkpFWFQpIGdldGhkcmxpbmUuJChPQkpFWFQpIGxvZ19lcnJvci4kKE9C SkVYVCkgXAogCXN0YXRjdHJsLiQoT0JKRVhUKSBjdHJsdmFsdWUuJChPQkpFWFQpIGR1bXBm ZDJmZC4kKE9CSkVYVCkgXApAQCAtMTAxLDcgKzEwMSw3IEBACiBhbV9tbG1tal9zZW5kX09C SkVDVFMgPSBtbG1tai1zZW5kLiQoT0JKRVhUKSB3cml0ZW4uJChPQkpFWFQpIFwKIAltYWls LWZ1bmN0aW9ucy4kKE9CSkVYVCkgaXRvYS4kKE9CSkVYVCkgY2hvbXAuJChPQkpFWFQpIFwK IAlpbmNpbmRleGZpbGUuJChPQkpFWFQpIGNoZWNrd2FpdF9zbXRwcmVwbHkuJChPQkpFWFQp IFwKLQlnZXRsaXN0YWRkci4kKE9CSkVYVCkgbXlsb2NraW5nLiQoT0JKRVhUKSBcCisJZ2V0 bGlzdGFkZHIuJChPQkpFWFQpIGdldGxpc3RkZWxpbS4kKE9CSkVYVCkgbXlsb2NraW5nLiQo T0JKRVhUKSBcCiAJaW5pdF9zb2NrZmQuJChPQkpFWFQpIHN0cmdlbi4kKE9CSkVYVCkgcmFu ZG9tLWludC4kKE9CSkVYVCkgXAogCXByaW50LXZlcnNpb24uJChPQkpFWFQpIGxvZ19lcnJv ci4kKE9CSkVYVCkgXAogCW15Z2V0bGluZS4kKE9CSkVYVCkgbWVtb3J5LiQoT0JKRVhUKSBz dGF0Y3RybC4kKE9CSkVYVCkgXApAQCAtMTA5LDE2ICsxMDksMTYgQEAKIG1sbW1qX3NlbmRf T0JKRUNUUyA9ICQoYW1fbWxtbWpfc2VuZF9PQkpFQ1RTKQogbWxtbWpfc2VuZF9MREFERCA9 ICQoTERBREQpCiBhbV9tbG1tal9zdWJfT0JKRUNUUyA9IG1sbW1qLXN1Yi4kKE9CSkVYVCkg d3JpdGVuLiQoT0JKRVhUKSBcCi0JbXlsb2NraW5nLiQoT0JKRVhUKSBnZXRsaXN0YWRkci4k KE9CSkVYVCkgY2hvbXAuJChPQkpFWFQpIFwKLQlyYW5kb20taW50LiQoT0JKRVhUKSBzdHJn ZW4uJChPQkpFWFQpIFwKKwlteWxvY2tpbmcuJChPQkpFWFQpIGdldGxpc3RhZGRyLiQoT0JK RVhUKSBnZXRsaXN0ZGVsaW0uJChPQkpFWFQpIFwKKwljaG9tcC4kKE9CSkVYVCkgcmFuZG9t LWludC4kKE9CSkVYVCkgc3RyZ2VuLiQoT0JKRVhUKSBcCiAJc3Vic2NyaWJlcmZ1bmNzLiQo T0JKRVhUKSBwcmludC12ZXJzaW9uLiQoT0JKRVhUKSBcCiAJbG9nX2Vycm9yLiQoT0JKRVhU KSBteWdldGxpbmUuJChPQkpFWFQpIHByZXBzdGRyZXBseS4kKE9CSkVYVCkgXAogCW1lbW9y eS4kKE9CSkVYVCkgc3RhdGN0cmwuJChPQkpFWFQpIHJlYWRuLiQoT0JKRVhUKQogbWxtbWpf c3ViX09CSkVDVFMgPSAkKGFtX21sbW1qX3N1Yl9PQkpFQ1RTKQogbWxtbWpfc3ViX0xEQURE ID0gJChMREFERCkKIGFtX21sbW1qX3Vuc3ViX09CSkVDVFMgPSBtbG1tai11bnN1Yi4kKE9C SkVYVCkgd3JpdGVuLiQoT0JKRVhUKSBcCi0JbXlsb2NraW5nLiQoT0JKRVhUKSBnZXRsaXN0 YWRkci4kKE9CSkVYVCkgY2hvbXAuJChPQkpFWFQpIFwKLQlzdWJzY3JpYmVyZnVuY3MuJChP QkpFWFQpIHJhbmRvbS1pbnQuJChPQkpFWFQpIFwKKwlteWxvY2tpbmcuJChPQkpFWFQpIGdl dGxpc3RhZGRyLiQoT0JKRVhUKSBnZXRsaXN0ZGVsaW0uJChPQkpFWFQpIFwKKwljaG9tcC4k KE9CSkVYVCkgc3Vic2NyaWJlcmZ1bmNzLiQoT0JKRVhUKSByYW5kb20taW50LiQoT0JKRVhU KSBcCiAJc3RyZ2VuLiQoT0JKRVhUKSBwcmludC12ZXJzaW9uLiQoT0JKRVhUKSBsb2dfZXJy b3IuJChPQkpFWFQpIFwKIAlteWdldGxpbmUuJChPQkpFWFQpIHByZXBzdGRyZXBseS4kKE9C SkVYVCkgbWVtb3J5LiQoT0JKRVhUKSBcCiAJc3RhdGN0cmwuJChPQkpFWFQpIHJlYWRuLiQo T0JKRVhUKQpAQCAtMjIzLDQzICsyMjMsNDQgQEAKIEVYVFJBX0RJU1QgPSBtbG1tai1tYWtl LW1sLnNoCiBtbG1tal9zZW5kX1NPVVJDRVMgPSBtbG1tai1zZW5kLmMgd3JpdGVuLmMgbWFp bC1mdW5jdGlvbnMuYyBpdG9hLmMgY2hvbXAuYyBcCiAgICAgICAgICAgICAgICAgICAgICBp bmNpbmRleGZpbGUuYyBjaGVja3dhaXRfc210cHJlcGx5LmMgZ2V0bGlzdGFkZHIuYyBcCi0J CSAgICAgbXlsb2NraW5nLmMgaW5pdF9zb2NrZmQuYyBzdHJnZW4uYyByYW5kb20taW50LmMg XAotCQkgICAgIHByaW50LXZlcnNpb24uYyBsb2dfZXJyb3IuYyBteWdldGxpbmUuYyBtZW1v cnkuYyBcCi0JCSAgICAgc3RhdGN0cmwuYyBjdHJsdmFsdWUuYyBnZXRhZGRyc2Zyb21mZC5j IHJlYWRuLmMKKwkJICAgICBnZXRsaXN0ZGVsaW0uYyBteWxvY2tpbmcuYyBpbml0X3NvY2tm ZC5jIHN0cmdlbi5jIFwKKwkJICAgICByYW5kb20taW50LmMgcHJpbnQtdmVyc2lvbi5jIGxv Z19lcnJvci5jIG15Z2V0bGluZS5jIFwKKwkJICAgICBtZW1vcnkuYyBzdGF0Y3RybC5jIGN0 cmx2YWx1ZS5jIGdldGFkZHJzZnJvbWZkLmMgcmVhZG4uYwogCiBtbG1tal9yZWNpZXZlX1NP VVJDRVMgPSBtbG1tai1yZWNpZXZlLmMgd3JpdGVuLmMgcmFuZG9tLWludC5jIHN0cmdlbi5j IFwKIAkJCXByaW50LXZlcnNpb24uYyBsb2dfZXJyb3IuYyBkdW1wZmQyZmQuYyBtZW1vcnku YyBcCiAJCQlsb2dfb3Blci5jIG15bG9ja2luZy5jIHJlYWRuLmMKIAogbWxtbWpfcHJvY2Vz c19TT1VSQ0VTID0gbWxtbWotcHJvY2Vzcy5jIHdyaXRlbi5jIGZpbmRfZW1haWxfYWRyLmMg XAotCQkJaW5jaW5kZXhmaWxlLmMgaXRvYS5jIGdldGxpc3RhZGRyLmMgY2hvbXAuYyBcCi0J CQlteWxvY2tpbmcuYyBsaXN0Y29udHJvbC5jIHJhbmRvbS1pbnQuYyBzdHJnZW4uYyBcCi0J CQlwcmludC12ZXJzaW9uLmMgc2VuZF9oZWxwLmMgcHJlcHN0ZHJlcGx5LmMgXAorCQkJaW5j aW5kZXhmaWxlLmMgaXRvYS5jIGdldGxpc3RhZGRyLmMgZ2V0bGlzdGRlbGltLmMgXAorCQkJ Y2hvbXAuYyBteWxvY2tpbmcuYyBsaXN0Y29udHJvbC5jIHJhbmRvbS1pbnQuYyBcCisJCQlz dHJnZW4uYyBwcmludC12ZXJzaW9uLmMgc2VuZF9oZWxwLmMgcHJlcHN0ZHJlcGx5LmMgXAog CQkJZG9fYWxsX3RoZV92b29kb19oZXJlLmMgbXlnZXRsaW5lLmMgZ2V0aGRybGluZS5jIFwK IAkJCWxvZ19lcnJvci5jIHN0YXRjdHJsLmMgY3RybHZhbHVlLmMgZHVtcGZkMmZkLmMgXAog CQkJc3Vic2NyaWJlcmZ1bmNzLmMgY3RybHZhbHVlcy5jIG1lbW9yeS5jIGxvZ19vcGVyLmMg XAogCQkJc2VuZF9saXN0LmMgcmVhZG4uYwogCiBtbG1tal9zdWJfU09VUkNFUyA9IG1sbW1q LXN1Yi5jIHdyaXRlbi5jIG15bG9ja2luZy5jIFwKLQkJCWdldGxpc3RhZGRyLmMgY2hvbXAu YyByYW5kb20taW50LmMgc3RyZ2VuLmMgXAotCQkJc3Vic2NyaWJlcmZ1bmNzLmMgcHJpbnQt dmVyc2lvbi5jIFwKKwkJCWdldGxpc3RhZGRyLmMgZ2V0bGlzdGRlbGltLmMgY2hvbXAuYyBy YW5kb20taW50LmMgXAorCQkJc3RyZ2VuLmMgc3Vic2NyaWJlcmZ1bmNzLmMgcHJpbnQtdmVy c2lvbi5jIFwKIAkJCWxvZ19lcnJvci5jIG15Z2V0bGluZS5jIHByZXBzdGRyZXBseS5jIG1l bW9yeS5jIFwKIAkJCXN0YXRjdHJsLmMgcmVhZG4uYwogCiBtbG1tal91bnN1Yl9TT1VSQ0VT ID0gbWxtbWotdW5zdWIuYyB3cml0ZW4uYyBteWxvY2tpbmcuYyBcCi0JCQlnZXRsaXN0YWRk ci5jIGNob21wLmMgc3Vic2NyaWJlcmZ1bmNzLmMgcmFuZG9tLWludC5jIFwKLQkJCXN0cmdl bi5jIHByaW50LXZlcnNpb24uYyBsb2dfZXJyb3IuYyBteWdldGxpbmUuYyBcCi0JCQlwcmVw c3RkcmVwbHkuYyBtZW1vcnkuYyBzdGF0Y3RybC5jIHJlYWRuLmMKKwkJCWdldGxpc3RhZGRy LmMgZ2V0bGlzdGRlbGltLmMgY2hvbXAuYyBzdWJzY3JpYmVyZnVuY3MuYyBcCisJCQlyYW5k b20taW50LmMgc3RyZ2VuLmMgcHJpbnQtdmVyc2lvbi5jIGxvZ19lcnJvci5jIFwKKwkJCW15 Z2V0bGluZS5jIHByZXBzdGRyZXBseS5jIG1lbW9yeS5jIHN0YXRjdHJsLmMgcmVhZG4uYwog CiBtbG1tal9ib3VuY2VfU09VUkNFUyA9IG1sbW1qLWJvdW5jZS5jIHByaW50LXZlcnNpb24u YyBsb2dfZXJyb3IuYyBcCiAJCSAgICAgICBzdWJzY3JpYmVyZnVuY3MuYyBzdHJnZW4uYyBy YW5kb20taW50LmMgd3JpdGVuLmMgXAogCQkgICAgICAgcHJlcHN0ZHJlcGx5LmMgbXlnZXRs aW5lLmMgY2hvbXAuYyBnZXRsaXN0YWRkci5jIFwKLQkJICAgICAgIG1lbW9yeS5jIGZpbmRf ZW1haWxfYWRyLmMgZ2V0aGRybGluZS5jIHJlYWRuLmMKKwkJICAgICAgIGdldGxpc3RkZWxp bS5jIG1lbW9yeS5jIGZpbmRfZW1haWxfYWRyLmMgZ2V0aGRybGluZS5jIFwKKwkJICAgICAg IHJlYWRuLmMKIAogbWxtbWpfbWFpbnRkX1NPVVJDRVMgPSBtbG1tai1tYWludGQuYyBwcmlu dC12ZXJzaW9uLmMgbG9nX2Vycm9yLmMgbXlnZXRsaW5lLmMgXAogCQkgICAgICAgc3RyZ2Vu LmMgcmFuZG9tLWludC5jIGNob21wLmMgd3JpdGVuLmMgbWVtb3J5LmMgXAotCQkgICAgICAg Y3RybHZhbHVlLmMgc2VuZF9kaWdlc3QuYyBnZXRsaXN0YWRkci5jIGR1bXBmZDJmZC5jIFwK LQkJICAgICAgIG15bG9ja2luZy5jIGxvZ19vcGVyLmMgcmVhZG4uYworCQkgICAgICAgY3Ry bHZhbHVlLmMgc2VuZF9kaWdlc3QuYyBnZXRsaXN0YWRkci5jIGdldGxpc3RkZWxpbS5jIFwK KwkJICAgICAgIGR1bXBmZDJmZC5jIG15bG9ja2luZy5jIGxvZ19vcGVyLmMgcmVhZG4uYwog CiBtbG1tal9saXN0X1NPVVJDRVMgPSBtbG1tai1saXN0LmMgc3RyZ2VuLmMgd3JpdGVuLmMg cHJpbnQtdmVyc2lvbi5jIG1lbW9yeS5jIFwKIAkJICAgICBsb2dfZXJyb3IuYyByYW5kb20t aW50LmMgcmVhZG4uYwpkaWZmIC11ck5hZCBtbG1tai0xLjIuOC5ERUJJQU4tNy9zcmMvbWxt bWotYm91bmNlLmMgY2hyb290LXdvcmsuNS9zcmMvbWxtbWotYm91bmNlLmMKLS0tIG1sbW1q LTEuMi44LkRFQklBTi03L3NyYy9tbG1tai1ib3VuY2UuYwkyMDA1LTA1LTAyIDExOjM5OjEw LjAwMDAwMDAwMCAtMDYwMAorKysgY2hyb290LXdvcmsuNS9zcmMvbWxtbWotYm91bmNlLmMJ MjAwNS0wOS0xNSAwMToyMTozMy4wMDAwMDAwMDAgLTA2MDAKQEAgLTM2LDYgKzM2LDcgQEAK ICNpbmNsdWRlIDxjdHlwZS5oPgogCiAjaW5jbHVkZSAiZ2V0bGlzdGFkZHIuaCIKKyNpbmNs dWRlICJnZXRsaXN0ZGVsaW0uaCIKICNpbmNsdWRlICJtbG1tai5oIgogI2luY2x1ZGUgInN0 cmdlbi5oIgogI2luY2x1ZGUgIndyYXBwZXJzLmgiCkBAIC0xMDEsNyArMTAyLDcgQEAKIHZv aWQgZG9fcHJvYmUoY29uc3QgY2hhciAqbGlzdGRpciwgY29uc3QgY2hhciAqbWxtbWpzZW5k LCBjb25zdCBjaGFyICphZGRyKQogewogCWNoYXIgKm15YWRkciwgKmZyb20sICphLCAqaW5k ZXhzdHIsICpxdWV1ZWZpbGVuYW1lLCAqbGlzdGFkZHI7Ci0JY2hhciAqbGlzdGZxZG4sICps aXN0bmFtZSwgKnByb2JlZmlsZTsKKwljaGFyICpsaXN0ZnFkbiwgKmxpc3RuYW1lLCAqcHJv YmVmaWxlLCAqbGlzdGRlbGltPWdldGxpc3RkZWxpbShsaXN0ZGlyKTsKIAljaGFyICptYWls ZGF0YVtdID0geyAiYm91bmNlbnVtYmVycyIsIE5VTEwgfTsKIAlpbnQgZmQ7CiAJdGltZV90 IHQ7CkBAIC0xMTIsOSArMTEzLDExIEBACiAJbGlzdG5hbWUgPSBnZW5saXN0bmFtZShsaXN0 YWRkcik7CiAJbGlzdGZxZG4gPSBnZW5saXN0ZnFkbihsaXN0YWRkcik7CiAKLQlmcm9tID0g Y29uY2F0c3RyKDUsIGxpc3RuYW1lLCAiK2JvdW5jZXMtcHJvYmUtIiwgbXlhZGRyLCAiQCIs IGxpc3RmcWRuKTsKKwlmcm9tID0gY29uY2F0c3RyKDYsIGxpc3RuYW1lLCBsaXN0ZGVsaW0s ICJib3VuY2VzLXByb2JlLSIsIG15YWRkciwgIkAiLAorCQkJIGxpc3RmcWRuKTsKIAogCW15 ZnJlZShsaXN0YWRkcik7CisJbXlmcmVlKGxpc3RkZWxpbSk7CiAJbXlmcmVlKGxpc3RmcWRu KTsKIAlteWZyZWUobGlzdG5hbWUpOwogCmRpZmYgLXVyTmFkIG1sbW1qLTEuMi44LkRFQklB Ti03L3NyYy9tbG1tai1wcm9jZXNzLmMgY2hyb290LXdvcmsuNi9zcmMvbWxtbWotcHJvY2Vz cy5jCi0tLSBtbG1tai0xLjIuOC5ERUJJQU4tNy9zcmMvbWxtbWotcHJvY2Vzcy5jCTIwMDUt MDUtMDIgMTE6NDE6MDEuMDAwMDAwMDAwIC0wNjAwCisrKyBjaHJvb3Qtd29yay42L3NyYy9t bG1tai1wcm9jZXNzLmMJMjAwNS0wOS0yMSAyMzo1MTo1OC41MTgyNDQ0MDUgLTA2MDAKQEAg LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJmaW5kX2VtYWlsX2Fkci5oIgogI2luY2x1ZGUg ImluY2luZGV4ZmlsZS5oIgogI2luY2x1ZGUgImdldGxpc3RhZGRyLmgiCisjaW5jbHVkZSAi Z2V0bGlzdGRlbGltLmgiCiAjaW5jbHVkZSAibGlzdGNvbnRyb2wuaCIKICNpbmNsdWRlICJz dHJnZW4uaCIKICNpbmNsdWRlICJkb19hbGxfdGhlX3Zvb2RvX2hlcmUuaCIKQEAgLTcxLDcg KzcyLDcgQEAKIAkJICBjb25zdCBjaGFyICptbG1tanNlbmQpCiB7CiAJY2hhciAqZnJvbSwg Kmxpc3RmcWRuLCAqbGlzdG5hbWUsICptb2RlcmF0b3JzID0gTlVMTDsKLQljaGFyICpidWYs ICpyZXBseXRvLCAqbGlzdGFkZHIgPSBnZXRsaXN0YWRkcihsaXN0ZGlyKTsKKwljaGFyICpi dWYsICpyZXBseXRvLCAqbGlzdGFkZHIgPSBnZXRsaXN0YWRkcihsaXN0ZGlyKSwgKmxpc3Rk ZWxpbTsKIAljaGFyICpxdWV1ZWZpbGVuYW1lID0gTlVMTCwgKm1vZGVyYXRvcnNmaWxlbmFt ZTsKIAljaGFyICptYWlsYmFzZW5hbWUgPSBteWJhc2VuYW1lKG1haWxmaWxlbmFtZSksICp0 bXAsICp0bzsKIAlpbnQgcXVldWVmZCwgbW9kZXJhdG9yc2ZkLCBtYWlsZmQ7CkBAIC0xMDYs MTUgKzEwNywxNyBAQAogCiAJY2xvc2UobW9kZXJhdG9yc2ZkKTsKIAotCXJlcGx5dG8gPSBj b25jYXRzdHIoNSwgbGlzdG5hbWUsICIrbW9kZXJhdGUtIiwgbWFpbGJhc2VuYW1lLCAiQCIs Ci0JCQkgICAgbGlzdGZxZG4pOworCWxpc3RkZWxpbSA9IGdldGxpc3RkZWxpbShsaXN0ZGly KTsKKwlyZXBseXRvID0gY29uY2F0c3RyKDYsIGxpc3RuYW1lLCBsaXN0ZGVsaW0sICJtb2Rl cmF0ZS0iLCBtYWlsYmFzZW5hbWUsCisJCQkgICAgIkAiLCBsaXN0ZnFkbik7CiAKIAltYWls ZGF0YVsxXSA9IHJlcGx5dG87CiAJbWFpbGRhdGFbM10gPSBtb2RlcmF0b3JzOwogCi0JZnJv bSA9IGNvbmNhdHN0cigzLCBsaXN0bmFtZSwgIitvd25lckAiLCBsaXN0ZnFkbik7Ci0JdG8g PSBjb25jYXRzdHIoMywgbGlzdG5hbWUsICItbW9kZXJhdG9yc0AiLCBsaXN0ZnFkbik7CisJ ZnJvbSA9IGNvbmNhdHN0cig0LCBsaXN0bmFtZSwgbGlzdGRlbGltLCAib3duZXJAIiwgbGlz dGZxZG4pOworCXRvID0gY29uY2F0c3RyKDMsIGxpc3RuYW1lLCAiLW1vZGVyYXRvcnNAIiwg bGlzdGZxZG4pOyAvKiBGSVhNRSBKRkE6IFNob3VsZCB0aGlzIGJlIGNvbnZlcnRlZD8gV2h5 LCB3aHkgbm90PyAqLwogCisJbXlmcmVlKGxpc3RkZWxpbSk7CiAJbXlmcmVlKGxpc3RuYW1l KTsKIAlteWZyZWUobGlzdGZxZG4pOwogCkBAIC0zMTgsOSArMzIxLDkgQEAKIAljaGFyICpm b290ZXJmaWxlbmFtZSA9IE5VTEwsICpkb25lbWFpbG5hbWUgPSBOVUxMOwogCWNoYXIgKnJh bmRvbXN0ciA9IE5VTEwsICptcXVldWVuYW1lOwogCWNoYXIgKm1sbW1qc2VuZCwgKm1sbW1q c3ViLCAqbWxtbWp1bnN1YiwgKm1sbW1qYm91bmNlOwotCWNoYXIgKmJpbmRpciwgKnN1Ympl Y3RwcmVmaXgsICpkaXNjYXJkbmFtZSwgKmxpc3RhZGRyOworCWNoYXIgKmJpbmRpciwgKnN1 YmplY3RwcmVmaXgsICpkaXNjYXJkbmFtZSwgKmxpc3RhZGRyLCAqbGlzdGRlbGltOwogCWNo YXIgKmxpc3RmcWRuLCAqbGlzdG5hbWUsICpmcm9tYWRkcjsKLQljaGFyICpxdWV1ZWZpbGVu YW1lLCAqcmVjaXBkZWxpbSwgKm93bmVyID0gTlVMTDsKKwljaGFyICpxdWV1ZWZpbGVuYW1l LCAqcmVjaXBleHRyYSwgKm93bmVyID0gTlVMTDsKIAljaGFyICptYWlsZGF0YVsyXSA9IHsg InBvc3RlcmFkZHIiLCBOVUxMIH07CiAJc3RydWN0IHN0YXQgc3Q7CiAJdWlkX3QgdWlkOwpA QCAtNTEyLDE0ICs1MTUsMTggQEAKIAllbHNlCiAJCXdoaWNodG8gPSBOVUxMOwogCi0JaWYo d2hpY2h0byAmJiB3aGljaHRvLT5lbWFpbGxpc3QgJiYgd2hpY2h0by0+ZW1haWxsaXN0WzBd KQotCQlyZWNpcGRlbGltID0gc3RyY2hyKHdoaWNodG8tPmVtYWlsbGlzdFswXSwgUkVDSVBE RUxJTSk7Ci0JZWxzZQotCQlyZWNpcGRlbGltID0gTlVMTDsKKwlsaXN0ZGVsaW0gPSBnZXRs aXN0ZGVsaW0obGlzdGRpcik7CisJaWYod2hpY2h0byAmJiB3aGljaHRvLT5lbWFpbGxpc3Qg JiYgd2hpY2h0by0+ZW1haWxsaXN0WzBdKXsKKwkJcmVjaXBleHRyYSA9IHN0cnN0cih3aGlj aHRvLT5lbWFpbGxpc3RbMF0sIGxpc3RkZWxpbSk7CisJCWlmIChyZWNpcGV4dHJhKQorCQkJ cmVjaXBleHRyYSArPSBzdHJsZW4obGlzdGRlbGltKTsKKwl9IGVsc2UKKwkJcmVjaXBleHRy YSA9IE5VTEw7CisJbXlmcmVlKGxpc3RkZWxpbSk7CiAKLQlpZihyZWNpcGRlbGltKSB7CisJ aWYocmVjaXBleHRyYSkgewogCQlvd25lciA9IGNvbmNhdHN0cigyLCBsaXN0ZGlyLCAiL2Nv bnRyb2wvb3duZXIiKTsKLQkJaWYob3duZXIgJiYgc3RybmNtcChyZWNpcGRlbGltLCAiK293 bmVyQCIsIDcpID09IDApIHsKKwkJaWYob3duZXIgJiYgc3RybmNtcChyZWNpcGV4dHJhLCAi b3duZXJAIiwgNikgPT0gMCkgewogCQkJLyogc3RyaXAgZW52ZWxvcGUgZnJvbSBiZWZvcmUg cmVzZW5kaW5nICovCiAJCQlkZWxoZWFkZXJzLT5jb3VudCA9IDA7CiAJCQlkZWxoZWFkZXJz LT5zdHJzID0gTlVMTDsKQEAgLTY0MywxMyArNjUwLDE2IEBACiAJCQlteWZyZWUoZG9uZW1h aWxuYW1lKTsKIAkJCWV4aXQoRVhJVF9TVUNDRVNTKTsKIAkJfQorCQlsaXN0ZGVsaW0gPSBn ZXRsaXN0ZGVsaW0obGlzdGRpcik7CiAJCWxpc3RuYW1lID0gZ2VubGlzdG5hbWUobGlzdGFk ZHIpOwogCQlsaXN0ZnFkbiA9IGdlbmxpc3RmcWRuKGxpc3RhZGRyKTsKLQkJZnJvbWFkZHIg PSBjb25jYXRzdHIoMywgbGlzdG5hbWUsICIrYm91bmNlcy1oZWxwQCIsIGxpc3RmcWRuKTsK KwkJZnJvbWFkZHIgPSBjb25jYXRzdHIoNCwgbGlzdG5hbWUsIGxpc3RkZWxpbSwgImJvdW5j ZXMtaGVscEAiLAorCQkJCSAgICAgbGlzdGZxZG4pOwogCQlxdWV1ZWZpbGVuYW1lID0gcHJl cHN0ZHJlcGx5KGxpc3RkaXIsICJub3RpbnRvY2MiLAogCQkJCQkiJGxpc3Rvd25lciQiLCBm cm9tZW1haWxzLmVtYWlsbGlzdFswXSwKIAkJCQkJTlVMTCwgMCwgTlVMTCk7CiAJCU1ZX0FT U0VSVChxdWV1ZWZpbGVuYW1lKQorCQlteWZyZWUobGlzdGRlbGltKTsKIAkJbXlmcmVlKGxp c3RuYW1lKTsKIAkJbXlmcmVlKGxpc3RmcWRuKTsKIAkJdW5saW5rKGRvbmVtYWlsbmFtZSk7 CkBAIC02ODMsMTYgKzY5MywxOCBAQAogCQkJCW15ZnJlZShkb25lbWFpbG5hbWUpOwogCQkJ CWV4aXQoRVhJVF9TVUNDRVNTKTsKIAkJCX0KKwkJCWxpc3RkZWxpbSA9IGdldGxpc3RkZWxp bShsaXN0ZGlyKTsKIAkJCWxpc3RuYW1lID0gZ2VubGlzdG5hbWUobGlzdGFkZHIpOwogCQkJ bGlzdGZxZG4gPSBnZW5saXN0ZnFkbihsaXN0YWRkcik7CiAJCQltYWlsZGF0YVsxXSA9IGZy b21lbWFpbHMuZW1haWxsaXN0WzBdOwotCQkJZnJvbWFkZHIgPSBjb25jYXRzdHIoMywgbGlz dG5hbWUsICIrYm91bmNlcy1oZWxwQCIsCi0JCQkJCWxpc3RmcWRuKTsKKwkJCWZyb21hZGRy ID0gY29uY2F0c3RyKDQsIGxpc3RuYW1lLCBsaXN0ZGVsaW0sCisJCQkJCSJib3VuY2VzLWhl bHBAIiwgbGlzdGZxZG4pOwogCQkJcXVldWVmaWxlbmFtZSA9IHByZXBzdGRyZXBseShsaXN0 ZGlyLCAic3Vib25seXBvc3QiLAogCQkJCQkiJGxpc3Rvd25lciQiLCBmcm9tZW1haWxzLmVt YWlsbGlzdFswXSwKIAkJCQkJTlVMTCwgMSwgbWFpbGRhdGEpOwogCQkJTVlfQVNTRVJUKHF1 ZXVlZmlsZW5hbWUpCiAJCQlteWZyZWUobGlzdGFkZHIpOworCQkJbXlmcmVlKGxpc3RkZWxp bSk7CiAJCQlteWZyZWUobGlzdG5hbWUpOwogCQkJbXlmcmVlKGxpc3RmcWRuKTsKIAkJCXVu bGluayhkb25lbWFpbG5hbWUpOwpAQCAtNzI0LDE2ICs3MzYsMTggQEAKIAkJCQlteWZyZWUo ZG9uZW1haWxuYW1lKTsKIAkJCQlleGl0KEVYSVRfU1VDQ0VTUyk7CiAJCQl9CisJCQlsaXN0 ZGVsaW0gPSBnZXRsaXN0ZGVsaW0obGlzdGRpcik7CiAJCQlsaXN0bmFtZSA9IGdlbmxpc3Ru YW1lKGxpc3RhZGRyKTsKIAkJCWxpc3RmcWRuID0gZ2VubGlzdGZxZG4obGlzdGFkZHIpOwot CQkJZnJvbWFkZHIgPSBjb25jYXRzdHIoMywgbGlzdG5hbWUsICIrYm91bmNlcy1oZWxwQCIs Ci0JCQkJCWxpc3RmcWRuKTsKKwkJCWZyb21hZGRyID0gY29uY2F0c3RyKDQsIGxpc3RuYW1l LCBsaXN0ZGVsaW0sCisJCQkJCSJib3VuY2VzLWhlbHBAIiwgbGlzdGZxZG4pOwogCQkJcXVl dWVmaWxlbmFtZSA9IHByZXBzdGRyZXBseShsaXN0ZGlyLCAiYWNjZXNzIiwKIAkJCQkJCQki JGxpc3Rvd25lciQiLAogCQkJCQkJCWZyb21lbWFpbHMuZW1haWxsaXN0WzBdLAogCQkJCQkJ CU5VTEwsIDAsIE5VTEwpOwogCQkJTVlfQVNTRVJUKHF1ZXVlZmlsZW5hbWUpCiAJCQlteWZy ZWUobGlzdGFkZHIpOworCQkJbXlmcmVlKGxpc3RkZWxpbSk7CiAJCQlteWZyZWUobGlzdG5h bWUpOwogCQkJbXlmcmVlKGxpc3RmcWRuKTsKIAkJCXVubGluayhkb25lbWFpbG5hbWUpOwpk aWZmIC11ck5hZCBtbG1tai0xLjIuOC5ERUJJQU4tNy9zcmMvbWxtbWotc2VuZC5jIGNocm9v dC13b3JrLjUvc3JjL21sbW1qLXNlbmQuYwotLS0gbWxtbWotMS4yLjguREVCSUFOLTcvc3Jj L21sbW1qLXNlbmQuYwkyMDA1LTA2LTIwIDA2OjQwOjM5LjAwMDAwMDAwMCAtMDYwMAorKysg Y2hyb290LXdvcmsuNS9zcmMvbWxtbWotc2VuZC5jCTIwMDUtMDktMjAgMjI6MzI6MzcuNDAw ODg2MDAwIC0wNjAwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiY2hvbXAuaCIKICNp bmNsdWRlICJjaGVja3dhaXRfc210cHJlcGx5LmgiCiAjaW5jbHVkZSAiZ2V0bGlzdGFkZHIu aCIKKyNpbmNsdWRlICJnZXRsaXN0ZGVsaW0uaCIKICNpbmNsdWRlICJpbml0X3NvY2tmZC5o IgogI2luY2x1ZGUgInN0cmdlbi5oIgogI2luY2x1ZGUgImxvZ19lcnJvci5oIgpAQCAtNzMs OSArNzQsOSBAQAogfQogCiBjaGFyICpib3VuY2VfZnJvbV9hZHIoY29uc3QgY2hhciAqcmVj aXBpZW50LCBjb25zdCBjaGFyICpsaXN0YWRyLAotCQkgICAgICBjb25zdCBjaGFyICptYWls ZmlsZW5hbWUpCisJCSAgICAgIGNvbnN0IGNoYXIgKmxpc3RkZWxpbSwgY29uc3QgY2hhciAq bWFpbGZpbGVuYW1lKQogewotCWNoYXIgKmJvdW5jZWFkZHIsICpteXJlY2lwaWVudCwgKm15 bGlzdGFkcjsKKwljaGFyICpib3VuY2VhZGRyLCAqbXlyZWNpcGllbnQsICpteWxpc3RhZHIs ICpteWxpc3RkZWxpbTsKIAljaGFyICppbmRleHN0ciwgKmxpc3Rkb21haW4sICphID0gTlVM TCwgKm15bWFpbGZpbGVuYW1lOwogCXNpemVfdCBsZW47CiAKQEAgLTEwNywyOSArMTA4LDQw IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCW15bGlzdGRlbGltID0gbXlzdHJkdXAobGlz dGRlbGltKTsKKwlpZiAoIW15bGlzdGRlbGltKSB7CisJCW15ZnJlZShteW1haWxmaWxlbmFt ZSk7CisJCW15ZnJlZShteXJlY2lwaWVudCk7CisJCW15ZnJlZShteWxpc3RhZHIpOworCQly ZXR1cm4gTlVMTDsKKwl9CisKIAlsaXN0ZG9tYWluID0gc3RyY2hyKG15bGlzdGFkciwgJ0An KTsKIAlpZiAoIWxpc3Rkb21haW4pIHsKIAkJbXlmcmVlKG15bWFpbGZpbGVuYW1lKTsKIAkJ bXlmcmVlKG15cmVjaXBpZW50KTsKIAkJbXlmcmVlKG15bGlzdGFkcik7CisJCW15ZnJlZSht eWxpc3RkZWxpbSk7CiAJCXJldHVybiBOVUxMOwogCX0KIAkqbGlzdGRvbWFpbisrID0gJ1ww JzsKIAotCS8qIDEyID0gUkVDSVBERUxJTSArICJib3VuY2VzLSIgKyAiLSIgKyAiQCIgKyBO VUwgKi8KLQlsZW4gPSBzdHJsZW4obXlsaXN0YWRyKSArIHN0cmxlbihteXJlY2lwaWVudCkg KyBzdHJsZW4oaW5kZXhzdHIpCi0JCSArIHN0cmxlbihsaXN0ZG9tYWluKSArIDEyOworCS8q IDExID0gImJvdW5jZXMtIiArICItIiArICJAIiArIE5VTCAqLworCWxlbiA9IHN0cmxlbiht eWxpc3RhZHIpICsgc3RybGVuKG15bGlzdGRlbGltKSArIHN0cmxlbihteXJlY2lwaWVudCkK KwkJICsgc3RybGVuKGluZGV4c3RyKSArIHN0cmxlbihsaXN0ZG9tYWluKSArIDExOwogCWJv dW5jZWFkZHIgPSBteW1hbGxvYyhsZW4pOwogCWlmICghYm91bmNlYWRkcikgewogCQlteWZy ZWUobXlyZWNpcGllbnQpOwogCQlteWZyZWUobXlsaXN0YWRyKTsKKwkJbXlmcmVlKG15bGlz dGRlbGltKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXNucHJpbnRmKGJvdW5jZWFkZHIsIGxl biwgIiVzJWNib3VuY2VzLSVzLSVzQCVzIiwgbXlsaXN0YWRyLCBSRUNJUERFTElNLAorCXNu cHJpbnRmKGJvdW5jZWFkZHIsIGxlbiwgIiVzJXNib3VuY2VzLSVzLSVzQCVzIiwgbXlsaXN0 YWRyLCBsaXN0ZGVsaW0sCiAJCSBpbmRleHN0ciwgbXlyZWNpcGllbnQsIGxpc3Rkb21haW4p OwogCiAJbXlmcmVlKG15cmVjaXBpZW50KTsKIAlteWZyZWUobXlsaXN0YWRyKTsKKwlteWZy ZWUobXlsaXN0ZGVsaW0pOwogCW15ZnJlZShteW1haWxmaWxlbmFtZSk7CiAKIAlyZXR1cm4g Ym91bmNlYWRkcjsKQEAgLTEzOCwxOCArMTUwLDIwIEBACiBpbnQgYm91bmNlbWFpbChjb25z dCBjaGFyICpsaXN0ZGlyLCBjb25zdCBjaGFyICptbG1tamJvdW5jZSwgY29uc3QgY2hhciAq ZnJvbSkKIHsKIAljaGFyICpteWZyb20gPSBteXN0cmR1cChmcm9tKTsKKwljaGFyICpsaXN0 ZGVsaW0gPSBnZXRsaXN0ZGVsaW0obGlzdGRpcik7CiAJY2hhciAqYWRkciwgKm51bSwgKmM7 CiAJc2l6ZV90IGxlbjsKIAlwaWRfdCBwaWQgPSAwOwogCiAJaWYoKGMgPSBzdHJjaHIobXlm cm9tLCAnQCcpKSA9PSBOVUxMKSB7CiAJCW15ZnJlZShteWZyb20pOworCQlteWZyZWUobGlz dGRlbGltKTsKIAkJcmV0dXJuIDA7IC8qIFN1Y2Nlc3Mgd2hlbiBtYWxmb3JtZWQgJ2Zyb20n ICovCiAJfQogCSpjID0gJ1wwJzsKIAludW0gPSBzdHJyY2hyKG15ZnJvbSwgJy0nKTsKIAlu dW0rKzsKLQljID0gc3RyY2hyKG15ZnJvbSwgUkVDSVBERUxJTSk7CisJYyA9IHN0cnN0ciht eWZyb20sIGxpc3RkZWxpbSk7CiAJbXlmcm9tID0gc3RyY2hyKGMsICctJyk7CiAJbXlmcm9t Kys7CiAJbGVuID0gbnVtIC0gbXlmcm9tIC0gMTsKQEAgLTE1Nyw2ICsxNzEsOCBAQAogCWFk ZHJbbGVuXSA9ICdcMCc7CiAJc3RybmNweShhZGRyLCBteWZyb20sIGxlbik7CiAKKwlteWZy ZWUobGlzdGRlbGltKTsKKwogCXBpZCA9IGZvcmsoKTsKIAkKIAlpZihwaWQgPCAwKSB7CkBA IC00NjQsMTAgKzQ4MCwxMCBAQAogCiBpbnQgc2VuZF9tYWlsX21hbnlfZmQoaW50IHNvY2tm ZCwgY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqcmVwbHl0bywKIAkJICAgICAgY2hh ciAqbWFpbG1hcCwgc2l6ZV90IG1haWxzaXplLCBpbnQgc3ViZmQsCi0JCSAgICAgIGNvbnN0 IGNoYXIgKmxpc3RhZGRyLCBjb25zdCBjaGFyICphcmNoaXZlZmlsZW5hbWUsCi0JCSAgICAg IGNvbnN0IGNoYXIgKmxpc3RkaXIsIGNvbnN0IGNoYXIgKm1sbW1qYm91bmNlLAotCQkgICAg ICBjb25zdCBjaGFyICpoZHJzLCBzaXplX3QgaGRyc2xlbiwgY29uc3QgY2hhciAqYm9keSwK LQkJICAgICAgc2l6ZV90IGJvZHlsZW4pCisJCSAgICAgIGNvbnN0IGNoYXIgKmxpc3RhZGRy LCBjb25zdCBjaGFyICpsaXN0ZGVsaW0sCisJCSAgICAgIGNvbnN0IGNoYXIgKmFyY2hpdmVm aWxlbmFtZSwgY29uc3QgY2hhciAqbGlzdGRpciwKKwkJICAgICAgY29uc3QgY2hhciAqbWxt bWpib3VuY2UsIGNvbnN0IGNoYXIgKmhkcnMsIHNpemVfdCBoZHJzbGVuLAorCQkgICAgICBj b25zdCBjaGFyICpib2R5LCBzaXplX3QgYm9keWxlbikKIHsKIAlpbnQgcmVzLCByZXQsIGk7 CiAJc3RydWN0IHN0cmxpc3Qgc3RsOwpAQCAtNDgwLDggKzQ5Niw5IEBACiAJCWlmKHN0bC5j b3VudCA9PSBtYXh2ZXJwcmVjaXBzKSB7CiAJCQlyZXQgPSBzZW5kX21haWxfbWFueV9saXN0 KHNvY2tmZCwgZnJvbSwgcmVwbHl0bywKIAkJCQkJbWFpbG1hcCwgbWFpbHNpemUsICZzdGws IGxpc3RhZGRyLAotCQkJCQlhcmNoaXZlZmlsZW5hbWUsIGxpc3RkaXIsIG1sbW1qYm91bmNl LAotCQkJCQloZHJzLCBoZHJzbGVuLCBib2R5LCBib2R5bGVuKTsKKwkJCQkJbGlzdGRlbGlt LCBhcmNoaXZlZmlsZW5hbWUsIGxpc3RkaXIsCisJCQkJCW1sbW1qYm91bmNlLCBoZHJzLCBo ZHJzbGVuLAorCQkJCQlib2R5LCBib2R5bGVuKTsKIAkJCWZvcihpID0gMDsgaSA8IHN0bC5j b3VudDsgaSsrKQogCQkJCW15ZnJlZShzdGwuc3Ryc1tpXSk7CiAJCQlpZihyZXQgPCAwKQpA QCAtNDkyLDkgKzUwOSw5IEBACiAKIAlpZihzdGwuY291bnQpIHsKIAkJcmV0ID0gc2VuZF9t YWlsX21hbnlfbGlzdChzb2NrZmQsIGZyb20sIHJlcGx5dG8sIG1haWxtYXAsCi0JCQkJbWFp bHNpemUsICZzdGwsIGxpc3RhZGRyLCBhcmNoaXZlZmlsZW5hbWUsCi0JCQkJbGlzdGRpciwg bWxtbWpib3VuY2UsIGhkcnMsIGhkcnNsZW4sIGJvZHksCi0JCQkJYm9keWxlbik7CisJCQkJ bWFpbHNpemUsICZzdGwsIGxpc3RhZGRyLCBsaXN0ZGVsaW0sCisJCQkJYXJjaGl2ZWZpbGVu YW1lLCBsaXN0ZGlyLCBtbG1tamJvdW5jZSwKKwkJCQloZHJzLCBoZHJzbGVuLCBib2R5LCBi b2R5bGVuKTsKIAkJZm9yKGkgPSAwOyBpIDwgc3RsLmNvdW50OyBpKyspCiAJCQlteWZyZWUo c3RsLnN0cnNbaV0pOwogCQlzdGwuY291bnQgPSAwOwpAQCAtNTU3LDEwICs1NzQsMTAgQEAK IAogaW50IHNlbmRfbWFpbF9tYW55X2xpc3QoaW50IHNvY2tmZCwgY29uc3QgY2hhciAqZnJv bSwgY29uc3QgY2hhciAqcmVwbHl0bywKIAkJICAgY2hhciAqbWFpbG1hcCwgc2l6ZV90IG1h aWxzaXplLCBzdHJ1Y3Qgc3RybGlzdCAqYWRkcnMsCi0JCSAgIGNvbnN0IGNoYXIgKmxpc3Rh ZGRyLCBjb25zdCBjaGFyICphcmNoaXZlZmlsZW5hbWUsCi0JCSAgIGNvbnN0IGNoYXIgKmxp c3RkaXIsIGNvbnN0IGNoYXIgKm1sbW1qYm91bmNlLAotCQkgICBjb25zdCBjaGFyICpoZHJz LCBzaXplX3QgaGRyc2xlbiwgY29uc3QgY2hhciAqYm9keSwKLQkJICAgc2l6ZV90IGJvZHls ZW4pCisJCSAgIGNvbnN0IGNoYXIgKmxpc3RhZGRyLCBjb25zdCBjaGFyICpsaXN0ZGVsaW0s CisJCSAgIGNvbnN0IGNoYXIgKmFyY2hpdmVmaWxlbmFtZSwgY29uc3QgY2hhciAqbGlzdGRp ciwKKwkJICAgY29uc3QgY2hhciAqbWxtbWpib3VuY2UsIGNvbnN0IGNoYXIgKmhkcnMsIHNp emVfdCBoZHJzbGVuLAorCQkgICBjb25zdCBjaGFyICpib2R5LCBzaXplX3QgYm9keWxlbikK IHsKIAlpbnQgcmVzID0gMCwgaTsKIAljaGFyICpib3VuY2VhZGRyLCAqYWRkciwgKmluZGV4 OwpAQCAtNTg1LDcgKzYwMiw3IEBACiAJCQkJCSAgICBtYWlsbWFwLCBtYWlsc2l6ZSwgbGlz dGRpciwgTlVMTCwKIAkJCQkJICAgIGhkcnMsIGhkcnNsZW4sIGJvZHksIGJvZHlsZW4pOwog CQl9IGVsc2UgewotCQkJYm91bmNlYWRkciA9IGJvdW5jZV9mcm9tX2FkcihhZGRyLCBsaXN0 YWRkciwKKwkJCWJvdW5jZWFkZHIgPSBib3VuY2VfZnJvbV9hZHIoYWRkciwgbGlzdGFkZHIs IGxpc3RkZWxpbSwKIAkJCQkJCSAgICAgYXJjaGl2ZWZpbGVuYW1lKTsKIAkJCXJlcyA9IHNl bmRfbWFpbChzb2NrZmQsIGJvdW5jZWFkZHIsIGFkZHIsIHJlcGx5dG8sCiAJCQkJICBtYWls bWFwLCBtYWlsc2l6ZSwgbGlzdGRpciwgbWxtbWpib3VuY2UsCkBAIC02MzQsNyArNjUxLDgg QEAKIAlpbnQgc29ja2ZkID0gLTEsIG1haWxmZCA9IDAsIG9wdCwgbWluZGV4ID0gMCwgc3Vi ZmQgPSAwLCB0bXBmZCwgaTsKIAlpbnQgZGVsZXRld2hlbnNlbnQgPSAxLCBzZW5kcmVzID0g MCwgYXJjaGl2ZSA9IDEsIGRpZ2VzdCA9IDA7CiAJaW50IGN0cmxhcmNoaXZlLCByZXM7Ci0J Y2hhciAqbGlzdGFkZHIgPSBOVUxMLCAqbWFpbGZpbGVuYW1lID0gTlVMTCwgKnN1YmZpbGVu YW1lID0gTlVMTDsKKwljaGFyICpsaXN0YWRkciA9IE5VTEwsICpsaXN0ZGVsaW0gPSBOVUxM OworCWNoYXIgKm1haWxmaWxlbmFtZSA9IE5VTEwsICpzdWJmaWxlbmFtZSA9IE5VTEw7CiAJ Y2hhciAqcmVwbHl0byA9IE5VTEwsICpib3VuY2VhZGRyID0gTlVMTCwgKnRvX2FkZHIgPSBO VUxMOwogCWNoYXIgKnJlbGF5aG9zdCA9IE5VTEwsICphcmNoaXZlZmlsZW5hbWUgPSBOVUxM LCAqdG1wc3RyOwogCWNoYXIgKmxpc3RjdHJsID0gTlVMTCwgKnN1YmRkaXJuYW1lID0gTlVM TCwgKmxpc3RkaXIgPSBOVUxMOwpAQCAtODQ1LDYgKzg2Miw5IEBACiAJCX0KIAl9CiAKKwlp ZihsaXN0ZGlyKQorCQlsaXN0ZGVsaW0gPSBnZXRsaXN0ZGVsaW0obGlzdGRpcik7CisKIAlz d2l0Y2gobGlzdGN0cmxbMF0pIHsKIAljYXNlICcxJzogLyogQSBzaW5nbGUgbWFpbCBpcyB0 byBiZSBzZW50LCBkbyBub3RoaW5nICovCiAJY2FzZSAnNSc6CkBAIC04NTcsNiArODc3LDcg QEAKIAkJCW15ZnJlZShoZHJzKTsKIAkJCW15ZnJlZShib2R5KTsKIAkJCW15ZnJlZShzdWJm aWxlbmFtZSk7CisJCQlteWZyZWUobGlzdGRlbGltKTsKIAkJCS8qIE5vIG1vZGVyYXRvcnMg aXMgbm8gZXJyb3IuIENvdWxkIGJlIHRoZSBzeXNhZG1pbgogCQkJICogbGlrZXMgdG8gZG8g aXQgbWFudWFsbHkuCiAJCQkgKi8KQEAgLTg3MCw2ICs4OTEsNyBAQAogCQkJCQkgICAgc3Vi ZmlsZW5hbWUpOwogCQkJbXlmcmVlKGhkcnMpOwogCQkJbXlmcmVlKGJvZHkpOworCQkJbXlm cmVlKGxpc3RkZWxpbSk7CiAJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJCX0KIAkJYnJlYWs7 CkBAIC04NzcsNyArODk5LDcgQEAKIAkJYXJjaGl2ZSA9IDA7CiAJCWRlbGV0ZXdoZW5zZW50 ID0gMDsKIAkJYXJjaGl2ZWZpbGVuYW1lID0gbXlzdHJkdXAobWFpbGZpbGVuYW1lKTsKLQkJ Ym91bmNlYWRkciA9IGJvdW5jZV9mcm9tX2Fkcih0b19hZGRyLCBsaXN0YWRkciwKKwkJYm91 bmNlYWRkciA9IGJvdW5jZV9mcm9tX2Fkcih0b19hZGRyLCBsaXN0YWRkciwgbGlzdGRlbGlt LAogCQkJCQkJYXJjaGl2ZWZpbGVuYW1lKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDogLyogbm9y bWFsIGxpc3QgbWFpbCAtLSBub3cgaGFuZGxlZCB3aGVuIGZvcmtpbmcgKi8KQEAgLTk3Nyw4 ICs5OTksOSBAQAogCWNhc2UgJzInOiAvKiBNb2RlcmF0b3JzICovCiAJCWluaXRzbXRwKCZz b2NrZmQsIHJlbGF5LCBzbXRwcG9ydCk7CiAJCWlmKHNlbmRfbWFpbF9tYW55X2ZkKHNvY2tm ZCwgYm91bmNlYWRkciwgTlVMTCwgbWFpbG1hcCwKLQkJCQkgICAgIHN0LnN0X3NpemUsIHN1 YmZkLCBOVUxMLCBOVUxMLCBsaXN0ZGlyLAotCQkJCSAgICAgTlVMTCwgaGRycywgaGRyc2xl biwgYm9keSwgYm9keWxlbikpCisJCQkJICAgICBzdC5zdF9zaXplLCBzdWJmZCwgTlVMTCwg TlVMTCwgTlVMTCwKKwkJCQkgICAgIGxpc3RkaXIsIE5VTEwsIGhkcnMsIGhkcnNsZW4sCisJ CQkJICAgICBib2R5LCBib2R5bGVuKSkKIAkJCWNsb3NlKHNvY2tmZCk7CiAJCWVsc2UKIAkJ CWVuZHNtdHAoJnNvY2tmZCk7CkBAIC05ODYsOCArMTAwOSw5IEBACiAJY2FzZSAnMyc6IC8q IHJlc2VuZGluZyBlYXJsaWVyIGZhaWxlZCBtYWlscyAqLwogCQlpbml0c210cCgmc29ja2Zk LCByZWxheSwgc210cHBvcnQpOwogCQlpZihzZW5kX21haWxfbWFueV9mZChzb2NrZmQsIE5V TEwsIE5VTEwsIG1haWxtYXAsIHN0LnN0X3NpemUsCi0JCQkJc3ViZmQsIGxpc3RhZGRyLCBt YWlsZmlsZW5hbWUsIGxpc3RkaXIsCi0JCQkJbWxtbWpib3VuY2UsIGhkcnMsIGhkcnNsZW4s IGJvZHksIGJvZHlsZW4pKQorCQkJCXN1YmZkLCBsaXN0YWRkciwgbGlzdGRlbGltLCBtYWls ZmlsZW5hbWUsCisJCQkJbGlzdGRpciwgbWxtbWpib3VuY2UsIGhkcnMsIGhkcnNsZW4sCisJ CQkJYm9keSwgYm9keWxlbikpCiAJCQljbG9zZShzb2NrZmQpOwogCQllbHNlCiAJCQllbmRz bXRwKCZzb2NrZmQpOwpAQCAtOTk2LDkgKzEwMjAsOSBAQAogCWNhc2UgJzQnOiAvKiBzZW5k IG1haWxzIHRvIG93bmVyICovCiAJCWluaXRzbXRwKCZzb2NrZmQsIHJlbGF5LCBzbXRwcG9y dCk7CiAJCWlmKHNlbmRfbWFpbF9tYW55X2ZkKHNvY2tmZCwgYm91bmNlYWRkciwgTlVMTCwg bWFpbG1hcCwKLQkJCQlzdC5zdF9zaXplLCBzdWJmZCwgbGlzdGFkZHIsIG1haWxmaWxlbmFt ZSwKLQkJCQlsaXN0ZGlyLCBtbG1tamJvdW5jZSwgaGRycywgaGRyc2xlbiwgYm9keSwKLQkJ CQlib2R5bGVuKSkKKwkJCQlzdC5zdF9zaXplLCBzdWJmZCwgbGlzdGFkZHIsIGxpc3RkZWxp bSwKKwkJCQltYWlsZmlsZW5hbWUsIGxpc3RkaXIsIG1sbW1qYm91bmNlLAorCQkJCWhkcnMs IGhkcnNsZW4sIGJvZHksIGJvZHlsZW4pKQogCQkJY2xvc2Uoc29ja2ZkKTsKIAkJZWxzZQog CQkJZW5kc210cCgmc29ja2ZkKTsKQEAgLTEwMzUsMTYgKzEwNTksMTggQEAKIAkJaWYoKHN1 YmRkaXIgPSBvcGVuZGlyKHN1YmRkaXJuYW1lKSkgPT0gTlVMTCkgewogCQkJbG9nX2Vycm9y KExPR19BUkdTLCAiQ291bGQgbm90IG9wZW5kaXIoJXMpIiwKIAkJCQkJICAgIHN1YmRkaXJu YW1lKTsKKwkJCW15ZnJlZShsaXN0ZGVsaW0pOwogCQkJbXlmcmVlKHN1YmRkaXJuYW1lKTsK IAkJCW15ZnJlZShoZHJzKTsKIAkJCW15ZnJlZShib2R5KTsKIAkJCWV4aXQoRVhJVF9GQUlM VVJFKTsKIAkJfQogCisJCWxpc3RkZWxpbSA9IGdldGxpc3RkZWxpbShsaXN0ZGlyKTsKIAkJ bGlzdG5hbWUgPSBnZW5saXN0bmFtZShsaXN0YWRkcik7CQogCQlsaXN0ZnFkbiA9IGdlbmxp c3RmcWRuKGxpc3RhZGRyKTsJCi0JCXZlcnBmcm9tID0gY29uY2F0c3RyKDUsIGxpc3RuYW1l LCAiK2JvdW5jZXMtIiwgc3RyaW5kZXgsICJAIiwKLQkJCQlsaXN0ZnFkbik7CisJCXZlcnBm cm9tID0gY29uY2F0c3RyKDYsIGxpc3RuYW1lLCBsaXN0ZGVsaW0sICJib3VuY2VzLSIsCisJ CQkJc3RyaW5kZXgsICJAIiwgbGlzdGZxZG4pOwogCQlteWZyZWUobGlzdG5hbWUpOwogCQlt eWZyZWUobGlzdGZxZG4pOwogCkBAIC0xMTIwLDYgKzExNDYsNyBAQAogCQkJCQkJCQlzdC5z dF9zaXplLAogCQkJCQkJCQkmc3RsLAogCQkJCQkJCQlsaXN0YWRkciwKKwkJCQkJCQkJbGlz dGRlbGltLAogCQkJCQkJCQlhcmNoaXZlZmlsZW5hbWUsCiAJCQkJCQkJCWxpc3RkaXIsCiAJ CQkJCQkJCW1sbW1qYm91bmNlLApAQCAtMTE0OSw3ICsxMTc2LDcgQEAKIAkJCX0gZWxzZSB7 CiAJCQkJc2VuZHJlcyA9IHNlbmRfbWFpbF9tYW55X2xpc3Qoc29ja2ZkLCBOVUxMLAogCQkJ CQkJTlVMTCwgbWFpbG1hcCwgc3Quc3Rfc2l6ZSwKLQkJCQkJCSZzdGwsIGxpc3RhZGRyLAor CQkJCQkJJnN0bCwgbGlzdGFkZHIsIGxpc3RkZWxpbSwKIAkJCQkJCWFyY2hpdmVmaWxlbmFt ZSwgbGlzdGRpciwKIAkJCQkJCW1sbW1qYm91bmNlLCBoZHJzLCBoZHJzbGVuLAogCQkJCQkJ Ym9keSwgYm9keWxlbik7CkBAIC0xMTgwLDYgKzEyMDcsNyBAQAogCQlteWZyZWUoc3RsLnN0 cnNbaV0pOwogCXN0bC5jb3VudCA9IDA7CiAKKwlteWZyZWUobGlzdGRlbGltKTsKIAlteWZy ZWUoaGRycyk7CiAJbXlmcmVlKGJvZHkpOwogCW15ZnJlZShtbG1tamJvdW5jZSk7CmRpZmYg LXVyTmFkIG1sbW1qLTEuMi44LkRFQklBTi03L3NyYy9tbG1tai1zdWIuYyBjaHJvb3Qtd29y ay41L3NyYy9tbG1tai1zdWIuYwotLS0gbWxtbWotMS4yLjguREVCSUFOLTcvc3JjL21sbW1q LXN1Yi5jCTIwMDUtMDYtMjAgMDY6NDA6MzkuMDAwMDAwMDAwIC0wNjAwCisrKyBjaHJvb3Qt d29yay41L3NyYy9tbG1tai1zdWIuYwkyMDA1LTA5LTE1IDAxOjUzOjMyLjAwMDAwMDAwMCAt MDYwMApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIm15bG9ja2luZy5oIgogI2luY2x1 ZGUgIndyYXBwZXJzLmgiCiAjaW5jbHVkZSAiZ2V0bGlzdGFkZHIuaCIKKyNpbmNsdWRlICJn ZXRsaXN0ZGVsaW0uaCIKICNpbmNsdWRlICJzdHJnZW4uaCIKICNpbmNsdWRlICJzdWJzY3Jp YmVyZnVuY3MuaCIKICNpbmNsdWRlICJsb2dfZXJyb3IuaCIKQEAgLTQ3LDE1ICs0OCwxNSBA QAogI2luY2x1ZGUgIm1lbW9yeS5oIgogCiB2b2lkIGNvbmZpcm1fc3ViKGNvbnN0IGNoYXIg Kmxpc3RkaXIsIGNvbnN0IGNoYXIgKmxpc3RhZGRyLAotCQljb25zdCBjaGFyICpzdWJhZGRy LCBjb25zdCBjaGFyICptbG1tanNlbmQsCi0JCWVudW0gc3VidHlwZSB0eXBlc3ViKQorCQlj b25zdCBjaGFyICpsaXN0ZGVsaW0sIGNvbnN0IGNoYXIgKnN1YmFkZHIsCisJCWNvbnN0IGNo YXIgKm1sbW1qc2VuZCwgZW51bSBzdWJ0eXBlIHR5cGVzdWIpCiB7CiAJY2hhciAqcXVldWVm aWxlbmFtZSwgKmZyb21hZGRyLCAqbGlzdG5hbWUsICpsaXN0ZnFkbiwgKmxpc3R0ZXh0Owog CiAJbGlzdG5hbWUgPSBnZW5saXN0bmFtZShsaXN0YWRkcik7CiAJbGlzdGZxZG4gPSBnZW5s aXN0ZnFkbihsaXN0YWRkcik7CiAKLQlmcm9tYWRkciA9IGNvbmNhdHN0cigzLCBsaXN0bmFt ZSwgIitib3VuY2VzLWhlbHBAIiwgbGlzdGZxZG4pOworCWZyb21hZGRyID0gY29uY2F0c3Ry KDQsIGxpc3RuYW1lLCBsaXN0ZGVsaW0sICJib3VuY2VzLWhlbHBAIiwgbGlzdGZxZG4pOwog CiAJbXlmcmVlKGxpc3RuYW1lKTsKIAlteWZyZWUobGlzdGZxZG4pOwpAQCAtODgsOCArODks OCBAQAogfQogCiB2b2lkIG5vdGlmeV9zdWIoY29uc3QgY2hhciAqbGlzdGRpciwgY29uc3Qg Y2hhciAqbGlzdGFkZHIsCi0JCWNvbnN0IGNoYXIgKnN1YmFkZHIsIGNvbnN0IGNoYXIgKm1s bW1qc2VuZCwKLQkJZW51bSBzdWJ0eXBlIHR5cGVzdWIpCisJCWNvbnN0IGNoYXIgKmxpc3Rk ZWxpbSwgY29uc3QgY2hhciAqc3ViYWRkciwKKwkJY29uc3QgY2hhciAqbWxtbWpzZW5kLCBl bnVtIHN1YnR5cGUgdHlwZXN1YikKIHsKIAljaGFyICptYWlsZGF0YVsyXSA9IHsgIm5ld3N1 YiIsIE5VTEwgfTsKIAljaGFyICpsaXN0ZnFkbiwgKmxpc3RuYW1lLCAqZnJvbWFkZHIsICp0 b3N0cjsKQEAgLTEwMCw4ICsxMDEsOCBAQAogCiAJbWFpbGRhdGFbMV0gPSBteXN0cmR1cChz dWJhZGRyKTsKIAkKLQlmcm9tYWRkciA9IGNvbmNhdHN0cigzLCBsaXN0bmFtZSwgIitib3Vu Y2VzLWhlbHBAIiwgbGlzdGZxZG4pOwotCXRvc3RyID0gY29uY2F0c3RyKDMsIGxpc3RuYW1l LCAiK293bmVyQCIsIGxpc3RmcWRuKTsKKwlmcm9tYWRkciA9IGNvbmNhdHN0cig0LCBsaXN0 bmFtZSwgbGlzdGRlbGltLCAiYm91bmNlcy1oZWxwQCIsIGxpc3RmcWRuKTsKKwl0b3N0ciA9 IGNvbmNhdHN0cig0LCBsaXN0bmFtZSwgbGlzdGRlbGltLCAib3duZXJAIiwgbGlzdGZxZG4p OwogCQogCW15ZnJlZShsaXN0bmFtZSk7CiAJbXlmcmVlKGxpc3RmcWRuKTsKQEAgLTEzNSw4 ICsxMzYsOCBAQAogfQogCiB2b2lkIGdlbmVyYXRlX3N1YmNvbmZpcm0oY29uc3QgY2hhciAq bGlzdGRpciwgY29uc3QgY2hhciAqbGlzdGFkZHIsCi0JCQkgY29uc3QgY2hhciAqc3ViYWRk ciwgY29uc3QgY2hhciAqbWxtbWpzZW5kLAotCQkJIGVudW0gc3VidHlwZSB0eXBlc3ViKQor CQkJIGNvbnN0IGNoYXIgKmxpc3RkZWxpbSwgY29uc3QgY2hhciAqc3ViYWRkciwKKwkJCSBj b25zdCBjaGFyICptbG1tanNlbmQsIGVudW0gc3VidHlwZSB0eXBlc3ViKQogewogCWludCBz dWJjb25mZmQ7CiAJY2hhciAqY29uZmlybWFkZHIsICpsaXN0bmFtZSwgKmxpc3RmcWRuLCAq Y29uZmlybWZpbGVuYW1lID0gTlVMTDsKQEAgLTE3NywyNiArMTc4LDI3IEBACiAKIAljbG9z ZShzdWJjb25mZmQpOwogCi0JZnJvbWFkZHIgPSBjb25jYXRzdHIoNSwgbGlzdG5hbWUsICIr Ym91bmNlcy1jb25mc3ViLSIsIHJhbmRvbXN0ciwKLQkJCQkiQCIsIGxpc3RmcWRuKTsKKwlm cm9tYWRkciA9IGNvbmNhdHN0cig2LCBsaXN0bmFtZSwgbGlzdGRlbGltLCAiYm91bmNlcy1j b25mc3ViLSIsCisJCQkJcmFuZG9tc3RyLCAiQCIsIGxpc3RmcWRuKTsKIAkKIAlzd2l0Y2go dHlwZXN1YikgewogCQlkZWZhdWx0OgogCQljYXNlIFNVQl9OT1JNQUw6CiAJCQlsaXN0dGV4 dCA9IG15c3RyZHVwKCJzdWItY29uZmlybSIpOwotCQkJdG1wc3RyID0gbXlzdHJkdXAoIitj b25mc3ViLSIpOworCQkJdG1wc3RyID0gbXlzdHJkdXAoImNvbmZzdWItIik7CiAJCQlicmVh azsKIAkJY2FzZSBTVUJfRElHRVNUOgogCQkJbGlzdHRleHQgPSBteXN0cmR1cCgic3ViLWNv bmZpcm0tZGlnZXN0Iik7Ci0JCQl0bXBzdHIgPSBteXN0cmR1cCgiK2NvbmZzdWItZGlnZXN0 LSIpOworCQkJdG1wc3RyID0gbXlzdHJkdXAoImNvbmZzdWItZGlnZXN0LSIpOwogCQkJYnJl YWs7CiAJCWNhc2UgU1VCX05PTUFJTDoKIAkJCWxpc3R0ZXh0ID0gbXlzdHJkdXAoInN1Yi1j b25maXJtLW5vbWFpbCIpOwotCQkJdG1wc3RyID0gbXlzdHJkdXAoIitjb25mc3ViLW5vbWFp bC0iKTsKKwkJCXRtcHN0ciA9IG15c3RyZHVwKCJjb25mc3ViLW5vbWFpbC0iKTsKIAkJCWJy ZWFrOwogCX0KIAotCWNvbmZpcm1hZGRyID0gY29uY2F0c3RyKDUsIGxpc3RuYW1lLCB0bXBz dHIsIHJhbmRvbXN0ciwgIkAiLCBsaXN0ZnFkbik7CisJY29uZmlybWFkZHIgPSBjb25jYXRz dHIoNiwgbGlzdG5hbWUsIGxpc3RkZWxpbSwgdG1wc3RyLCByYW5kb21zdHIsICJAIiwKKwkJ CQlsaXN0ZnFkbik7CiAKIAlteWZyZWUocmFuZG9tc3RyKTsKIAlteWZyZWUodG1wc3RyKTsK QEAgLTI0NSwxMiArMjQ3LDE0IEBACiAJCWNvbnN0IGNoYXIgKm1sbW1qc2VuZCkKIHsKIAlj aGFyICpxdWV1ZWZpbGVuYW1lLCAqZnJvbWFkZHIsICpsaXN0bmFtZSwgKmxpc3RmcWRuLCAq bGlzdGFkZHI7CisJY2hhciAqbGlzdGRlbGltID0gZ2V0bGlzdGRlbGltKGxpc3RkaXIpOwog CiAJbGlzdGFkZHIgPSBnZXRsaXN0YWRkcihsaXN0ZGlyKTsKIAlsaXN0bmFtZSA9IGdlbmxp c3RuYW1lKGxpc3RhZGRyKTsKIAlsaXN0ZnFkbiA9IGdlbmxpc3RmcWRuKGxpc3RhZGRyKTsK IAotCWZyb21hZGRyID0gY29uY2F0c3RyKDMsIGxpc3RuYW1lLCAiK2JvdW5jZXMtaGVscEAi LCBsaXN0ZnFkbik7CisJZnJvbWFkZHIgPSBjb25jYXRzdHIoNCwgbGlzdG5hbWUsIGxpc3Rk ZWxpbSwgImJvdW5jZXMtaGVscEAiLCBsaXN0ZnFkbik7CisJbXlmcmVlKGxpc3RkZWxpbSk7 CiAKIAlxdWV1ZWZpbGVuYW1lID0gcHJlcHN0ZHJlcGx5KGxpc3RkaXIsICJzdWItc3Vic2Ny aWJlZCIsICIkaGVscGFkZHIkIiwKIAkJCQkgICAgIHN1YmFkZHIsIE5VTEwsIDAsIE5VTEwp OwpAQCAtMjcyLDkgKzI3Niw5IEBACiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIHsKLQljaGFyICpsaXN0YWRkciwgKmxpc3RkaXIgPSBOVUxMLCAqYWRkcmVzcyA9IE5V TEwsICpzdWJmaWxlbmFtZSA9IE5VTEw7Ci0JY2hhciAqbWxtbWpzZW5kLCAqYmluZGlyLCBj aHN0clsyXSwgKnN1YmRpciwgKnN1YmRkaXJuYW1lID0gTlVMTDsKLQljaGFyICpzdWJsb2Nr bmFtZTsKKwljaGFyICpsaXN0YWRkciwgKmxpc3RkZWxpbSwgKmxpc3RkaXIgPSBOVUxMLCAq YWRkcmVzcyA9IE5VTEw7CisJY2hhciAqc3ViZmlsZW5hbWUgPSBOVUxMLCAqbWxtbWpzZW5k LCAqYmluZGlyLCBjaHN0clsyXSwgKnN1YmRpcjsKKwljaGFyICpzdWJkZGlybmFtZSA9IE5V TEwsICpzdWJsb2NrbmFtZTsKIAlpbnQgc3ViY29uZmlybSA9IDAsIGNvbmZpcm1zdWIgPSAw LCBvcHQsIHN1YmZpbGVmZCwgbG9jaywgbm90aWZ5c3ViOwogCWludCBjaGFuZ2V1aWQgPSAx LCBzdGF0dXMsIGRpZ2VzdCA9IDAsIG5vbWFpbCA9IDA7CiAJaW50IGdyb3Vwd3JpdGFibGUg PSAwLCBzdWJsb2NrLCBzdWJsb2NrZmQsIG5vZ2Vuc3Vic2NyaWJlZCA9IDA7CkBAIC00Mzks MTQgKzQ0MywxNSBAQAogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQogCXN1Ym9mZiA9IGZp bmRfc3Vic2NyaWJlcihzdWJmaWxlZmQsIGFkZHJlc3MpOworCWxpc3RkZWxpbSA9IGdldGxp c3RkZWxpbShsaXN0ZGlyKTsKIAlpZihzdWJvZmYgPT0gLTEpIHsKIAkJaWYoc3ViY29uZmly bSkgewogCQkJY2xvc2Uoc3ViZmlsZWZkKTsKIAkJCWNsb3NlKHN1YmxvY2tmZCk7CiAJCQl1 bmxpbmsoc3VibG9ja25hbWUpOwogCQkJbXlmcmVlKHN1YmxvY2tuYW1lKTsKLQkJCWdlbmVy YXRlX3N1YmNvbmZpcm0obGlzdGRpciwgbGlzdGFkZHIsIGFkZHJlc3MsCi0JCQkJCSAgICBt bG1tanNlbmQsIHR5cGVzdWIpOworCQkJZ2VuZXJhdGVfc3ViY29uZmlybShsaXN0ZGlyLCBs aXN0YWRkciwgbGlzdGRlbGltLAorCQkJCQkgICAgYWRkcmVzcywgbWxtbWpzZW5kLCB0eXBl c3ViKTsKIAkJfSBlbHNlIHsKIAkJCWxzZWVrKHN1YmZpbGVmZCwgMEwsIFNFRUtfRU5EKTsK IAkJCWxlbiA9IHN0cmxlbihhZGRyZXNzKTsKQEAgLTQ3OSw4ICs0ODQsOCBAQAogCiAJCWlm KGNoaWxkcGlkIDwgMCkgewogCQkJbG9nX2Vycm9yKExPR19BUkdTLCAiQ291bGQgbm90IGZv cmsiKTsKLQkJCWNvbmZpcm1fc3ViKGxpc3RkaXIsIGxpc3RhZGRyLCBhZGRyZXNzLCBtbG1t anNlbmQsCi0JCQkJCXR5cGVzdWIpOworCQkJY29uZmlybV9zdWIobGlzdGRpciwgbGlzdGFk ZHIsIGxpc3RkZWxpbSwgYWRkcmVzcywKKwkJCQkJbWxtbWpzZW5kLCB0eXBlc3ViKTsKIAkJ fQogCQkKIAkJaWYoY2hpbGRwaWQgPiAwKSB7CkBAIC00OTEsMTcgKzQ5NiwxOSBAQAogCiAJ CS8qIGNoaWxkIGNvbmZpcm1zIHN1YnNjcmlwdGlvbiAqLwogCQlpZihjaGlsZHBpZCA9PSAw KQotCQkJY29uZmlybV9zdWIobGlzdGRpciwgbGlzdGFkZHIsIGFkZHJlc3MsIG1sbW1qc2Vu ZCwKLQkJCQkJdHlwZXN1Yik7CisJCQljb25maXJtX3N1YihsaXN0ZGlyLCBsaXN0YWRkciwg bGlzdGRlbGltLCBhZGRyZXNzLAorCQkJCQltbG1tanNlbmQsIHR5cGVzdWIpOwogCX0KIAog CW5vdGlmeXN1YiA9IHN0YXRjdHJsKGxpc3RkaXIsICJub3RpZnlzdWIiKTsKIAogCS8qIE5v dGlmeSBsaXN0IG93bmVyIGFib3V0IHN1YnNjcmlwdGlvbiAqLwogCWlmIChub3RpZnlzdWIp Ci0JCW5vdGlmeV9zdWIobGlzdGRpciwgbGlzdGFkZHIsIGFkZHJlc3MsIG1sbW1qc2VuZCwg dHlwZXN1Yik7CisJCW5vdGlmeV9zdWIobGlzdGRpciwgbGlzdGFkZHIsIGxpc3RkZWxpbSwg YWRkcmVzcywgbWxtbWpzZW5kLAorCQkJCXR5cGVzdWIpOwogCiAJbXlmcmVlKGxpc3RhZGRy KTsKKwlteWZyZWUobGlzdGRlbGltKTsKIAogCXJldHVybiBFWElUX1NVQ0NFU1M7CiB9CmRp ZmYgLXVyTmFkIG1sbW1qLTEuMi44LkRFQklBTi03L3NyYy9tbG1tai11bnN1Yi5jIGNocm9v dC13b3JrLjUvc3JjL21sbW1qLXVuc3ViLmMKLS0tIG1sbW1qLTEuMi44LkRFQklBTi03L3Ny Yy9tbG1tai11bnN1Yi5jCTIwMDUtMDYtMjAgMDY6NDA6MzkuMDAwMDAwMDAwIC0wNjAwCisr KyBjaHJvb3Qtd29yay41L3NyYy9tbG1tai11bnN1Yi5jCTIwMDUtMDktMTUgMDE6NTM6MTQu MDAwMDAwMDAwIC0wNjAwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAid3JhcHBlcnMu aCIKICNpbmNsdWRlICJteWdldGxpbmUuaCIKICNpbmNsdWRlICJnZXRsaXN0YWRkci5oIgor I2luY2x1ZGUgImdldGxpc3RkZWxpbS5oIgogI2luY2x1ZGUgInN1YnNjcmliZXJmdW5jcy5o IgogI2luY2x1ZGUgInN0cmdlbi5oIgogI2luY2x1ZGUgImxvZ19lcnJvci5oIgpAQCAtNDcs MTUgKzQ4LDE1IEBACiAjaW5jbHVkZSAicHJlcHN0ZHJlcGx5LmgiCiAKIHZvaWQgY29uZmly bV91bnN1Yihjb25zdCBjaGFyICpsaXN0ZGlyLCBjb25zdCBjaGFyICpsaXN0YWRkciwKLQkJ ICAgY29uc3QgY2hhciAqc3ViYWRkciwgY29uc3QgY2hhciAqbWxtbWpzZW5kLAotCQkgICBl bnVtIHN1YnR5cGUgdHlwZXN1YikKKwkJICAgY29uc3QgY2hhciAqbGlzdGRlbGltLCBjb25z dCBjaGFyICpzdWJhZGRyLAorCQkgICBjb25zdCBjaGFyICptbG1tanNlbmQsIGVudW0gc3Vi dHlwZSB0eXBlc3ViKQogewogCWNoYXIgKnF1ZXVlZmlsZW5hbWUsICpmcm9tYWRkciwgKmxp c3RuYW1lLCAqbGlzdGZxZG4sICpsaXN0dGV4dDsKIAogCWxpc3RuYW1lID0gZ2VubGlzdG5h bWUobGlzdGFkZHIpOwogCWxpc3RmcWRuID0gZ2VubGlzdGZxZG4obGlzdGFkZHIpOwogCi0J ZnJvbWFkZHIgPSBjb25jYXRzdHIoMywgbGlzdG5hbWUsICIrYm91bmNlcy1oZWxwQCIsIGxp c3RmcWRuKTsKKwlmcm9tYWRkciA9IGNvbmNhdHN0cig0LCBsaXN0bmFtZSwgbGlzdGRlbGlt LCAiYm91bmNlcy1oZWxwQCIsIGxpc3RmcWRuKTsKIAogCW15ZnJlZShsaXN0bmFtZSk7CiAJ bXlmcmVlKGxpc3RmcWRuKTsKQEAgLTg5LDggKzkwLDggQEAKIH0KIAogdm9pZCBub3RpZnlf dW5zdWIoY29uc3QgY2hhciAqbGlzdGRpciwgY29uc3QgY2hhciAqbGlzdGFkZHIsCi0JCSAg Y29uc3QgY2hhciAqc3ViYWRkciwgY29uc3QgY2hhciAqbWxtbWpzZW5kLAotCQkgIGVudW0g c3VidHlwZSB0eXBlc3ViKQorCQkgIGNvbnN0IGNoYXIgKmxpc3RkZWxpbSwgY29uc3QgY2hh ciAqc3ViYWRkciwKKwkJICBjb25zdCBjaGFyICptbG1tanNlbmQsIGVudW0gc3VidHlwZSB0 eXBlc3ViKQogewogICAgICAgICBjaGFyICptYWlsZGF0YVs0XSA9IHsgIm9sZHN1YiIsIE5V TEwgfTsKICAgICAgICAgY2hhciAqbGlzdGZxZG4sICpsaXN0bmFtZSwgKmZyb21hZGRyLCAq dG9zdHI7CkBAIC0xMDEsOCArMTAyLDggQEAKIAogICAgICAgICBtYWlsZGF0YVsxXSA9IG15 c3RyZHVwKHN1YmFkZHIpOwogCi0gICAgICAgIGZyb21hZGRyID0gY29uY2F0c3RyKDMsIGxp c3RuYW1lLCAiK2JvdW5jZXMtaGVscEAiLCBsaXN0ZnFkbik7Ci0JdG9zdHIgPSBjb25jYXRz dHIoMywgbGlzdG5hbWUsICIrb3duZXJAIiwgbGlzdGZxZG4pOworICAgICAgICBmcm9tYWRk ciA9IGNvbmNhdHN0cig0LCBsaXN0bmFtZSwgbGlzdGRlbGltLCAiYm91bmNlcy1oZWxwQCIs IGxpc3RmcWRuKTsKKwl0b3N0ciA9IGNvbmNhdHN0cig0LCBsaXN0bmFtZSwgbGlzdGRlbGlt LCAib3duZXJAIiwgbGlzdGZxZG4pOwogCiAJbXlmcmVlKGxpc3RuYW1lKTsKIAlteWZyZWUo bGlzdGZxZG4pOwpAQCAtMTM4LDggKzEzOSw4IEBACiAKIAogdm9pZCBnZW5lcmF0ZV91bnN1 YmNvbmZpcm0oY29uc3QgY2hhciAqbGlzdGRpciwgY29uc3QgY2hhciAqbGlzdGFkZHIsCi0J CQkgICBjb25zdCBjaGFyICpzdWJhZGRyLCBjb25zdCBjaGFyICptbG1tanNlbmQsCi0JCQkg ICBlbnVtIHN1YnR5cGUgdHlwZXN1YikKKwkJCSAgIGNvbnN0IGNoYXIgKmxpc3RkZWxpbSwg Y29uc3QgY2hhciAqc3ViYWRkciwKKwkJCSAgIGNvbnN0IGNoYXIgKm1sbW1qc2VuZCwgZW51 bSBzdWJ0eXBlIHR5cGVzdWIpCiB7CiAJY2hhciAqY29uZmlybWFkZHIsICpsaXN0bmFtZSwg Kmxpc3RmcWRuLCAqdG1wc3RyOwogCWNoYXIgKnF1ZXVlZmlsZW5hbWUsICpmcm9tYWRkcjsK QEAgLTE4MCwyNiArMTgxLDI3IEBACiAKIAljbG9zZShzdWJjb25mZmQpOwogCi0JZnJvbWFk ZHIgPSBjb25jYXRzdHIoNSwgbGlzdG5hbWUsICIrYm91bmNlcy1jb25mdW5zdWItIiwgcmFu ZG9tc3RyLAotCQkJCSJAIiwgbGlzdGZxZG4pOworCWZyb21hZGRyID0gY29uY2F0c3RyKDYs IGxpc3RuYW1lLCBsaXN0ZGVsaW0sICJib3VuY2VzLWNvbmZ1bnN1Yi0iLAorCQkJCXJhbmRv bXN0ciwgIkAiLCBsaXN0ZnFkbik7CiAKIAlzd2l0Y2godHlwZXN1YikgewogCQlkZWZhdWx0 OgogCQljYXNlIFNVQl9OT1JNQUw6CiAJCQlsaXN0dGV4dCA9IG15c3RyZHVwKCJ1bnN1Yi1j b25maXJtIik7Ci0JCQl0bXBzdHIgPSBteXN0cmR1cCgiK2NvbmZ1bnN1Yi0iKTsKKwkJCXRt cHN0ciA9IG15c3RyZHVwKCJjb25mdW5zdWItIik7CiAJCQlicmVhazsKIAkJY2FzZSBTVUJf RElHRVNUOgogCQkJbGlzdHRleHQgPSBteXN0cmR1cCgidW5zdWItY29uZmlybS1kaWdlc3Qi KTsKLQkJCXRtcHN0ciA9IG15c3RyZHVwKCIrY29uZnVuc3ViLWRpZ2VzdC0iKTsKKwkJCXRt cHN0ciA9IG15c3RyZHVwKCJjb25mdW5zdWItZGlnZXN0LSIpOwogCQkJYnJlYWs7CiAJCWNh c2UgU1VCX05PTUFJTDoKIAkJCWxpc3R0ZXh0ID0gbXlzdHJkdXAoInVuc3ViLWNvbmZpcm0t bm9tYWlsIik7Ci0JCQl0bXBzdHIgPSBteXN0cmR1cCgiK2NvbmZ1bnN1Yi1ub21haWwtIik7 CisJCQl0bXBzdHIgPSBteXN0cmR1cCgiY29uZnVuc3ViLW5vbWFpbC0iKTsKIAkJCWJyZWFr OwogCX0KIAotCWNvbmZpcm1hZGRyID0gY29uY2F0c3RyKDUsIGxpc3RuYW1lLCB0bXBzdHIs IHJhbmRvbXN0ciwgIkAiLCBsaXN0ZnFkbik7CisJY29uZmlybWFkZHIgPSBjb25jYXRzdHIo NiwgbGlzdG5hbWUsIGxpc3RkZWxpbSwgdG1wc3RyLCByYW5kb21zdHIsICJAIiwKKwkJCQls aXN0ZnFkbik7CiAKIAlteWZyZWUocmFuZG9tc3RyKTsKIAlteWZyZWUodG1wc3RyKTsKQEAg LTI4OSwxMiArMjkxLDE0IEBACiAJCWNvbnN0IGNoYXIgKm1sbW1qc2VuZCkKIHsKIAljaGFy ICpxdWV1ZWZpbGVuYW1lLCAqZnJvbWFkZHIsICpsaXN0bmFtZSwgKmxpc3RmcWRuLCAqbGlz dGFkZHI7CisJY2hhciAqbGlzdGRlbGltID0gZ2V0bGlzdGRlbGltKGxpc3RkaXIpOwogCiAJ bGlzdGFkZHIgPSBnZXRsaXN0YWRkcihsaXN0ZGlyKTsKIAlsaXN0bmFtZSA9IGdlbmxpc3Ru YW1lKGxpc3RhZGRyKTsKIAlsaXN0ZnFkbiA9IGdlbmxpc3RmcWRuKGxpc3RhZGRyKTsKIAot CWZyb21hZGRyID0gY29uY2F0c3RyKDMsIGxpc3RuYW1lLCAiK2JvdW5jZXMtaGVscEAiLCBs aXN0ZnFkbik7CisJZnJvbWFkZHIgPSBjb25jYXRzdHIoNCwgbGlzdG5hbWUsIGxpc3RkZWxp bSwgImJvdW5jZXMtaGVscEAiLCBsaXN0ZnFkbik7CisJbXlmcmVlKGxpc3RkZWxpbSk7CiAK IAlxdWV1ZWZpbGVuYW1lID0gcHJlcHN0ZHJlcGx5KGxpc3RkaXIsICJ1bnN1Yi1ub3RzdWJz Y3JpYmVkIiwKIAkJCQkgICAgICIkaGVscGFkZHIkIiwgc3ViYWRkciwgTlVMTCwgMCwgTlVM TCk7CkBAIC0zMjEsOCArMzI1LDggQEAKIAlpbnQgY29uZmlybXVuc3ViID0gMCwgdW5zdWJj b25maXJtID0gMCwgbm90aWZ5c3ViID0gMCwgZGlnZXN0ID0gMDsKIAlpbnQgY2hhbmdldWlk ID0gMSwgZ3JvdXB3cml0YWJsZSA9IDAsIHN1YmxvY2ssIHN1YmxvY2tmZDsKIAlpbnQgbm9n ZW5ub3RzdWJzY3JpYmVkID0gMDsKLQljaGFyICpsaXN0YWRkciwgKmxpc3RkaXIgPSBOVUxM LCAqYWRkcmVzcyA9IE5VTEwsICpzdWJyZWFkbmFtZSA9IE5VTEw7Ci0JY2hhciAqc3Vid3Jp dGVuYW1lLCAqbWxtbWpzZW5kLCAqYmluZGlyLCAqc3ViZGlyOworCWNoYXIgKmxpc3RhZGRy LCAqbGlzdGRlbGltLCAqbGlzdGRpciA9IE5VTEwsICphZGRyZXNzID0gTlVMTDsKKwljaGFy ICpzdWJyZWFkbmFtZSA9IE5VTEwsICpzdWJ3cml0ZW5hbWUsICptbG1tanNlbmQsICpiaW5k aXIsICpzdWJkaXI7CiAJY2hhciAqc3ViZGRpcm5hbWUsICpzdWJsb2NrbmFtZTsKIAlvZmZf dCBzdWJvZmY7CiAJRElSICpzdWJkZGlyOwpAQCAtNDQ2LDE1ICs0NTAsMTcgQEAKIAkJZXhp dChFWElUX1NVQ0NFU1MpOwogCX0KIAorCWxpc3RkZWxpbSA9IGdldGxpc3RkZWxpbShsaXN0 ZGlyKTsKIAlpZih1bnN1YmNvbmZpcm0pCi0JCWdlbmVyYXRlX3Vuc3ViY29uZmlybShsaXN0 ZGlyLCBsaXN0YWRkciwgYWRkcmVzcywgbWxtbWpzZW5kLAotCQkJCXR5cGVzdWIpOworCQln ZW5lcmF0ZV91bnN1YmNvbmZpcm0obGlzdGRpciwgbGlzdGFkZHIsIGxpc3RkZWxpbSwgYWRk cmVzcywKKwkJCQltbG1tanNlbmQsIHR5cGVzdWIpOwogCiAJaWYoKHN1YmRkaXIgPSBvcGVu ZGlyKHN1YmRkaXJuYW1lKSkgPT0gTlVMTCkgewogCQlsb2dfZXJyb3IoTE9HX0FSR1MsICJD b3VsZCBub3Qgb3BlbmRpciglcykiLAogCQkJCSAgICBzdWJkZGlybmFtZSk7CiAJCW15ZnJl ZShzdWJkZGlybmFtZSk7CiAJCW15ZnJlZShsaXN0YWRkcik7CisJCW15ZnJlZShsaXN0ZGVs aW0pOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQogCkBAIC01ODIsOCArNTg4LDggQEAK IAogCQkJaWYoY2hpbGRwaWQgPCAwKSB7CiAJCQkJbG9nX2Vycm9yKExPR19BUkdTLCAiQ291 bGQgbm90IGZvcmsiKTsKLQkJCQljb25maXJtX3Vuc3ViKGxpc3RkaXIsIGxpc3RhZGRyLCBh ZGRyZXNzLAotCQkJCQkJbWxtbWpzZW5kLCBkaWdlc3QpOworCQkJCWNvbmZpcm1fdW5zdWIo bGlzdGRpciwgbGlzdGFkZHIsIGxpc3RkZWxpbSwKKwkJCQkJCWFkZHJlc3MsIG1sbW1qc2Vu ZCwgZGlnZXN0KTsKIAkJCX0KIAogCQkJaWYoY2hpbGRwaWQgPiAwKSB7CkBAIC01OTQsOCAr NjAwLDggQEAKIAogCQkJLyogY2hpbGQgY29uZmlybXMgc3Vic2NyaXB0aW9uICovCiAJCQlp ZihjaGlsZHBpZCA9PSAwKQotCQkJCWNvbmZpcm1fdW5zdWIobGlzdGRpciwgbGlzdGFkZHIs IGFkZHJlc3MsCi0JCQkJCQltbG1tanNlbmQsIGRpZ2VzdCk7CisJCQkJY29uZmlybV91bnN1 YihsaXN0ZGlyLCBsaXN0YWRkciwgbGlzdGRlbGltLAorCQkJCQkJYWRkcmVzcywgbWxtbWpz ZW5kLCBkaWdlc3QpOwogCQl9CiAgICAgICAgIH0KIApAQCAtNjA1LDkgKzYxMSwxMSBAQAog CiAgICAgICAgIC8qIE5vdGlmeSBsaXN0IG93bmVyIGFib3V0IHN1YnNjcmlwdGlvbiAqLwog ICAgICAgICBpZiAobm90aWZ5c3ViKQotICAgICAgICAgICAgICAgIG5vdGlmeV91bnN1Yihs aXN0ZGlyLCBsaXN0YWRkciwgYWRkcmVzcywgbWxtbWpzZW5kLCB0eXBlc3ViKTsKKyAgICAg ICAgICAgICAgICBub3RpZnlfdW5zdWIobGlzdGRpciwgbGlzdGFkZHIsIGxpc3RkZWxpbSwg YWRkcmVzcywgbWxtbWpzZW5kLAorCQkJCXR5cGVzdWIpOwogCiAJbXlmcmVlKGxpc3RhZGRy KTsKKwlteWZyZWUobGlzdGRlbGltKTsKIAogCXJldHVybiBFWElUX1NVQ0NFU1M7CiB9CmRp ZmYgLXVyTmFkIG1sbW1qLTEuMi44LkRFQklBTi03L3NyYy9wcmVwc3RkcmVwbHkuYyBjaHJv b3Qtd29yay41L3NyYy9wcmVwc3RkcmVwbHkuYwotLS0gbWxtbWotMS4yLjguREVCSUFOLTcv c3JjL3ByZXBzdGRyZXBseS5jCTIwMDUtMDEtMTUgMDM6NDY6MjQuMDAwMDAwMDAwIC0wNzAw CisrKyBjaHJvb3Qtd29yay41L3NyYy9wcmVwc3RkcmVwbHkuYwkyMDA1LTA5LTIxIDAxOjAw OjIyLjYyMzI5OTAwMCAtMDYwMApAQCAtMzgsMTUgKzM4LDE2IEBACiAjaW5jbHVkZSAid3Jh cHBlcnMuaCIKICNpbmNsdWRlICJtZW1vcnkuaCIKICNpbmNsdWRlICJnZXRsaXN0YWRkci5o IgorI2luY2x1ZGUgImdldGxpc3RkZWxpbS5oIgogCi1jaGFyICpzdWJzdGl0dXRlKGNvbnN0 IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKmxpc3RhZGRyLCBzaXplX3QgZGF0YWNvdW50LAot CQkgY2hhciAqKmRhdGEpCitjaGFyICpzdWJzdGl0dXRlKGNvbnN0IGNoYXIgKmxpbmUsIGNv bnN0IGNoYXIgKmxpc3RhZGRyLCBjb25zdCBjaGFyICpsaXN0ZGVsaW0sCisJCSBzaXplX3Qg ZGF0YWNvdW50LCBjaGFyICoqZGF0YSkKIHsKIAljaGFyICpzMSwgKnMyOwogCi0JczEgPSBz dWJzdGl0dXRlX29uZShsaW5lLCBsaXN0YWRkciwgZGF0YWNvdW50LCBkYXRhKTsKKwlzMSA9 IHN1YnN0aXR1dGVfb25lKGxpbmUsIGxpc3RhZGRyLCBsaXN0ZGVsaW0sIGRhdGFjb3VudCwg ZGF0YSk7CiAJd2hpbGUoczEpIHsKLQkJczIgPSBzdWJzdGl0dXRlX29uZShzMSwgbGlzdGFk ZHIsIGRhdGFjb3VudCwgZGF0YSk7CisJCXMyID0gc3Vic3RpdHV0ZV9vbmUoczEsIGxpc3Rh ZGRyLCBsaXN0ZGVsaW0sIGRhdGFjb3VudCwgZGF0YSk7CiAJCWlmKHMyKSB7CiAJCQlteWZy ZWUoczEpOwogCQkJczEgPSBzMjsKQEAgLTU3LDggKzU4LDggQEAKIAlyZXR1cm4gbXlzdHJk dXAobGluZSk7CiB9CiAKLWNoYXIgKnN1YnN0aXR1dGVfb25lKGNvbnN0IGNoYXIgKmxpbmUs IGNvbnN0IGNoYXIgKmxpc3RhZGRyLCBzaXplX3QgZGF0YWNvdW50LAotCQkgICAgIGNoYXIg KipkYXRhKQorY2hhciAqc3Vic3RpdHV0ZV9vbmUoY29uc3QgY2hhciAqbGluZSwgY29uc3Qg Y2hhciAqbGlzdGFkZHIsCisJCSAgICAgY29uc3QgY2hhciAqbGlzdGRlbGltLCBzaXplX3Qg ZGF0YWNvdW50LCBjaGFyICoqZGF0YSkKIHsKIAljaGFyICpmcWRuLCAqbGlzdG5hbWUsICpk MSwgKmQyLCAqdG9rZW4sICp2YWx1ZSA9IE5VTEw7CiAJY2hhciAqcmV0c3RyLCAqb3JpZ2xp bmU7CkBAIC05NSwzMSArOTYsMzUgQEAKIAkJdmFsdWUgPSBteXN0cmR1cChsaXN0YWRkcik7 CiAJCWdvdG8gY29uY2F0YW5kcmV0dXJuOwogCX0gZWxzZSBpZihzdHJjbXAodG9rZW4sICJs aXN0b3duZXIiKSA9PSAwKSB7Ci0JCXZhbHVlID0gY29uY2F0c3RyKDMsIGxpc3RuYW1lLCAi K293bmVyQCIsIGZxZG4pOworCQl2YWx1ZSA9IGNvbmNhdHN0cig0LCBsaXN0bmFtZSwgbGlz dGRlbGltLCAib3duZXJAIiwgZnFkbik7CiAJCWdvdG8gY29uY2F0YW5kcmV0dXJuOwogCX0g ZWxzZSBpZihzdHJjbXAodG9rZW4sICJoZWxwYWRkciIpID09IDApIHsKLQkJdmFsdWUgPSBj b25jYXRzdHIoMywgbGlzdG5hbWUsICIraGVscEAiLCBmcWRuKTsKKwkJdmFsdWUgPSBjb25j YXRzdHIoNCwgbGlzdG5hbWUsIGxpc3RkZWxpbSwgImhlbHBAIiwgZnFkbik7CiAJCWdvdG8g Y29uY2F0YW5kcmV0dXJuOwogCX0gZWxzZSBpZihzdHJjbXAodG9rZW4sICJsaXN0Z2V0TiIp ID09IDApIHsKLQkJdmFsdWUgPSBjb25jYXRzdHIoMywgbGlzdG5hbWUsICIrZ2V0LU5AIiwg ZnFkbik7CisJCXZhbHVlID0gY29uY2F0c3RyKDQsIGxpc3RuYW1lLCBsaXN0ZGVsaW0sICJn ZXQtTkAiLCBmcWRuKTsKIAkJZ290byBjb25jYXRhbmRyZXR1cm47CiAJfSBlbHNlIGlmKHN0 cmNtcCh0b2tlbiwgImxpc3R1bnN1YmFkZHIiKSA9PSAwKSB7Ci0JCXZhbHVlID0gY29uY2F0 c3RyKDMsIGxpc3RuYW1lLCAiK3Vuc3Vic2NyaWJlQCIsIGZxZG4pOworCQl2YWx1ZSA9IGNv bmNhdHN0cig0LCBsaXN0bmFtZSwgbGlzdGRlbGltLCAidW5zdWJzY3JpYmVAIiwgZnFkbik7 CiAJCWdvdG8gY29uY2F0YW5kcmV0dXJuOwogCX0gZWxzZSBpZihzdHJjbXAodG9rZW4sICJk aWdlc3R1bnN1YmFkZHIiKSA9PSAwKSB7Ci0JCXZhbHVlID0gY29uY2F0c3RyKDMsIGxpc3Ru YW1lLCAiK3Vuc3Vic2NyaWJlLWRpZ2VzdEAiLCBmcWRuKTsKKwkJdmFsdWUgPSBjb25jYXRz dHIoNCwgbGlzdG5hbWUsIGxpc3RkZWxpbSwKKwkJCQkgICJ1bnN1YnNjcmliZS1kaWdlc3RA IiwgZnFkbik7CiAJCWdvdG8gY29uY2F0YW5kcmV0dXJuOwogCX0gZWxzZSBpZihzdHJjbXAo dG9rZW4sICJub21haWx1bnN1YmFkZHIiKSA9PSAwKSB7Ci0JCXZhbHVlID0gY29uY2F0c3Ry KDMsIGxpc3RuYW1lLCAiK3Vuc3Vic2NyaWJlLW5vbWFpbEAiLCBmcWRuKTsKKwkJdmFsdWUg PSBjb25jYXRzdHIoNCwgbGlzdG5hbWUsIGxpc3RkZWxpbSwKKwkJCQkgICJ1bnN1YnNjcmli ZS1ub21haWxAIiwgZnFkbik7CiAJCWdvdG8gY29uY2F0YW5kcmV0dXJuOwogCX0gZWxzZSBp ZihzdHJjbXAodG9rZW4sICJsaXN0c3ViYWRkciIpID09IDApIHsKLQkJdmFsdWUgPSBjb25j YXRzdHIoMywgbGlzdG5hbWUsICIrc3Vic2NyaWJlQCIsIGZxZG4pOworCQl2YWx1ZSA9IGNv bmNhdHN0cig0LCBsaXN0bmFtZSwgbGlzdGRlbGltLCAic3Vic2NyaWJlQCIsIGZxZG4pOwog CQlnb3RvIGNvbmNhdGFuZHJldHVybjsKIAl9IGVsc2UgaWYoc3RyY21wKHRva2VuLCAiZGln ZXN0c3ViYWRkciIpID09IDApIHsKLQkJdmFsdWUgPSBjb25jYXRzdHIoMywgbGlzdG5hbWUs ICIrc3Vic2NyaWJlLWRpZ2VzdEAiLCBmcWRuKTsKKwkJdmFsdWUgPSBjb25jYXRzdHIoNCwg bGlzdG5hbWUsIGxpc3RkZWxpbSwgInN1YnNjcmliZS1kaWdlc3RAIiwKKwkJCQkgIGZxZG4p OwogCQlnb3RvIGNvbmNhdGFuZHJldHVybjsKIAl9IGVsc2UgaWYoc3RyY21wKHRva2VuLCAi bm9tYWlsc3ViYWRkciIpID09IDApIHsKLQkJdmFsdWUgPSBjb25jYXRzdHIoMywgbGlzdG5h bWUsICIrc3Vic2NyaWJlLW5vbWFpbEAiLCBmcWRuKTsKKwkJdmFsdWUgPSBjb25jYXRzdHIo NCwgbGlzdG5hbWUsIGxpc3RkZWxpbSwgInN1YnNjcmliZS1ub21haWxAIiwKKwkJCQkgIGZx ZG4pOwogCQlnb3RvIGNvbmNhdGFuZHJldHVybjsKIAl9CiAJaWYoZGF0YSkgewpAQCAtMTUw LDcgKzE1NSw3IEBACiAJCSAgIGNoYXIgKipkYXRhKQogewogCWludCBpbmZkLCBvdXRmZDsK LQljaGFyICpsaXN0YWRkciwgKm15ZnJvbSwgKnRtcCwgKnN1YmplY3QsICpyZXRzdHIgPSBO VUxMOworCWNoYXIgKmxpc3RhZGRyLCAqbGlzdGRlbGltLCAqbXlmcm9tLCAqdG1wLCAqc3Vi amVjdCwgKnJldHN0ciA9IE5VTEw7CiAJY2hhciAqbXlyZXBseXRvLCAqbXl0bywgKnN0ciA9 IE5VTEwsICpteWRhdGUsICpteW1zZ2lkOwogCiAJdG1wID0gY29uY2F0c3RyKDMsIGxpc3Rk aXIsICIvdGV4dC8iLCBmaWxlbmFtZSk7CkBAIC0xNjIsNiArMTY3LDcgQEAKIAl9CiAKIAls aXN0YWRkciA9IGdldGxpc3RhZGRyKGxpc3RkaXIpOworCWxpc3RkZWxpbSA9IGdldGxpc3Rk ZWxpbShsaXN0ZGlyKTsKIAogCXRtcCA9IG15Z2V0bGluZShpbmZkKTsKIAlpZihzdHJuY2Fz ZWNtcCh0bXAsICJTdWJqZWN0OiIsIDgpICE9IDApIHsKQEAgLTE2OSwxNyArMTc1LDE5IEBA CiAJCQkJInN0YW5kYXJkIHN1YmplY3QiKTsKIAkJc3ViamVjdCA9IG15c3RyZHVwKCJtbG1t aiBhZG1pbmlzdHJhdGl2YVxuIik7CiAJfSBlbHNlCi0JCXN1YmplY3QgPSBzdWJzdGl0dXRl KHRtcCwgbGlzdGFkZHIsIHRva2VuY291bnQsIGRhdGEpOworCQlzdWJqZWN0ID0gc3Vic3Rp dHV0ZSh0bXAsIGxpc3RhZGRyLCBsaXN0ZGVsaW0sIHRva2VuY291bnQsCisJCQkJICAgICBk YXRhKTsKIAogCW15ZnJlZSh0bXApOwogCQotCW15ZnJvbSA9IHN1YnN0aXR1dGUoZnJvbSwg bGlzdGFkZHIsIHRva2VuY291bnQsIGRhdGEpOwotCW15dG8gPSBzdWJzdGl0dXRlKHRvLCBs aXN0YWRkciwgdG9rZW5jb3VudCwgZGF0YSk7CisJbXlmcm9tID0gc3Vic3RpdHV0ZShmcm9t LCBsaXN0YWRkciwgbGlzdGRlbGltLCB0b2tlbmNvdW50LCBkYXRhKTsKKwlteXRvID0gc3Vi c3RpdHV0ZSh0bywgbGlzdGFkZHIsIGxpc3RkZWxpbSwgdG9rZW5jb3VudCwgZGF0YSk7CiAJ bXlkYXRlID0gZ2VuZGF0ZXN0cigpOwogCW15bXNnaWQgPSBnZW5tc2dpZCgpOwogCiAJaWYo cmVwbHl0bykgewotCQlteXJlcGx5dG8gPSBzdWJzdGl0dXRlKHJlcGx5dG8sIGxpc3RhZGRy LCB0b2tlbmNvdW50LCBkYXRhKTsKKwkJbXlyZXBseXRvID0gc3Vic3RpdHV0ZShyZXBseXRv LCBsaXN0YWRkciwgbGlzdGRlbGltLAorCQkJCSAgICAgICB0b2tlbmNvdW50LCBkYXRhKTsK IAkJdG1wID0gY29uY2F0c3RyKDMsICJSZXBseS1UbzogIiwgbXlyZXBseXRvLCAiXG4iKTsK IAkJZnJlZShteXJlcGx5dG8pOwogCQlteXJlcGx5dG8gPSB0bXA7CkBAIC0xOTksNiArMjA3 LDcgQEAKIAlpZihvdXRmZCA8IDApIHsKIAkJbG9nX2Vycm9yKExPR19BUkdTLCAiQ291bGQg bm90IG9wZW4gc3RkIG1haWwgJXMiLCByZXRzdHIpOwogCQlteWZyZWUoc3RyKTsKKwkJbXlm cmVlKGxpc3RkZWxpbSk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMjA4LDYgKzIxNyw3 IEBACiAJaWYod3JpdGVuKG91dGZkLCBzdHIsIHN0cmxlbihzdHIpKSA8IDApIHsKIAkJbG9n X2Vycm9yKExPR19BUkdTLCAiQ291bGQgbm90IHdyaXRlIHN0ZCBtYWlsIik7CiAJCW15ZnJl ZShzdHIpOworCQlteWZyZWUobGlzdGRlbGltKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBA IC0yMTUsMTAgKzIyNSwxMSBAQAogCiAJd2hpbGUoKHN0ciA9IG15Z2V0bGluZShpbmZkKSkp IHsKIAkJdG1wID0gc3RyOwotCQlzdHIgPSBzdWJzdGl0dXRlKHRtcCwgbGlzdGFkZHIsIHRv a2VuY291bnQsIGRhdGEpOworCQlzdHIgPSBzdWJzdGl0dXRlKHRtcCwgbGlzdGFkZHIsIGxp c3RkZWxpbSwgdG9rZW5jb3VudCwgZGF0YSk7CiAJCW15ZnJlZSh0bXApOwogCQlpZih3cml0 ZW4ob3V0ZmQsIHN0ciwgc3RybGVuKHN0cikpIDwgMCkgewogCQkJbXlmcmVlKHN0cik7CisJ CQlteWZyZWUobGlzdGRlbGltKTsKIAkJCWxvZ19lcnJvcihMT0dfQVJHUywgIkNvdWxkIG5v dCB3cml0ZSBzdGQgbWFpbCIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KZGlmZiAtdXJOYWQg bWxtbWotMS4yLjguREVCSUFOLTcvc3JjL3NlbmRfZGlnZXN0LmMgY2hyb290LXdvcmsuNS9z cmMvc2VuZF9kaWdlc3QuYwotLS0gbWxtbWotMS4yLjguREVCSUFOLTcvc3JjL3NlbmRfZGln ZXN0LmMJMjAwNS0wMS0xOSAxMjoyMjoxNC4wMDAwMDAwMDAgLTA3MDAKKysrIGNocm9vdC13 b3JrLjUvc3JjL3NlbmRfZGlnZXN0LmMJMjAwNS0wOS0xNSAwMToyNzozNS4wMDAwMDAwMDAg LTA2MDAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJzdHJnZW4uaCIKICNpbmNsdWRl ICJtZW1vcnkuaCIKICNpbmNsdWRlICJnZXRsaXN0YWRkci5oIgorI2luY2x1ZGUgImdldGxp c3RkZWxpbS5oIgogI2luY2x1ZGUgIndyYXBwZXJzLmgiCiAKIApAQCAtNDUsNyArNDYsNyBA QAogCWludCBpLCBmZCwgYXJjaGl2ZWZkLCBzdGF0dXMsIGhkcmZkOwogCWNoYXIgYnVmWzQ1 XTsKIAljaGFyICp0bXAsICpxdWV1ZW5hbWUgPSBOVUxMLCAqYXJjaGl2ZW5hbWUsICpmcm9t c3RyOwotCWNoYXIgKmJvdW5kYXJ5LCAqbGlzdGFkZHIsICpsaXN0bmFtZSwgKmxpc3RmcWRu OworCWNoYXIgKmJvdW5kYXJ5LCAqbGlzdGFkZHIsICpsaXN0ZGVsaW0sICpsaXN0bmFtZSwg Kmxpc3RmcWRuOwogCXBpZF90IGNoaWxkcGlkLCBwaWQ7CiAKIAlpZiAoYWRkcikgewpAQCAt OTAsNyArOTEsMTEgQEAKIAkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiAoJWQtJWQp IiwgZmlyc3RpbmRleCwgbGFzdGluZGV4KTsKIAl9CiAKLQlmcm9tc3RyID0gY29uY2F0c3Ry KDUsICJGcm9tOiAiLCBsaXN0bmFtZSwgIitoZWxwQCIsIGxpc3RmcWRuLCAiXG4iKTsKKwls aXN0ZGVsaW0gPSBnZXRsaXN0ZGVsaW0obGlzdGRpcik7CisJZnJvbXN0ciA9IGNvbmNhdHN0 cig2LCAiRnJvbTogIiwgbGlzdG5hbWUsIGxpc3RkZWxpbSwgImhlbHBAIiwgbGlzdGZxZG4s CisJCQkgICAgIlxuIik7CisJbXlmcmVlKGxpc3RkZWxpbSk7CisKIAl0bXAgPSBjb25jYXRz dHIoNiwgIk1JTUUtVmVyc2lvbjogMS4wIgogCQkJICAgICJcbkNvbnRlbnQtVHlwZTogbXVs dGlwYXJ0LyIgRElHRVNUTUlNRVRZUEUgIjsgIgogCQkJICAgICJib3VuZGFyeT0iLCBib3Vu ZGFyeSwKZGlmZiAtdXJOYWQgbWxtbWotMS4yLjguREVCSUFOLTcvc3JjL3NlbmRfaGVscC5j IGNocm9vdC13b3JrLjUvc3JjL3NlbmRfaGVscC5jCi0tLSBtbG1tai0xLjIuOC5ERUJJQU4t Ny9zcmMvc2VuZF9oZWxwLmMJMjAwNS0wMS0xOSAxMjoyMjoxNC4wMDAwMDAwMDAgLTA3MDAK KysrIGNocm9vdC13b3JrLjUvc3JjL3NlbmRfaGVscC5jCTIwMDUtMDktMTUgMDE6MzA6MjIu MDAwMDAwMDAwIC0wNjAwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAic3RyZ2VuLmgi CiAjaW5jbHVkZSAiZmluZF9lbWFpbF9hZHIuaCIKICNpbmNsdWRlICJnZXRsaXN0YWRkci5o IgorI2luY2x1ZGUgImdldGxpc3RkZWxpbS5oIgogI2luY2x1ZGUgImxvZ19lcnJvci5oIgog I2luY2x1ZGUgImNob21wLmgiCiAjaW5jbHVkZSAid3JhcHBlcnMuaCIKQEAgLTQ0LDEzICs0 NSwxNiBAQAogdm9pZCBzZW5kX2hlbHAoY29uc3QgY2hhciAqbGlzdGRpciwgY29uc3QgY2hh ciAqZW1haWxhZGRyLAogCSAgICAgICBjb25zdCBjaGFyICptbG1tanNlbmQpCiB7Ci0JY2hh ciAqcXVldWVmaWxlbmFtZSwgKmxpc3RhZGRyLCAqbGlzdG5hbWUsICpsaXN0ZnFkbiwgKmZy b21hZGRyOworCWNoYXIgKnF1ZXVlZmlsZW5hbWUsICpsaXN0YWRkciwgKmxpc3RkZWxpbSwg Kmxpc3RuYW1lLCAqbGlzdGZxZG47CisJY2hhciAqZnJvbWFkZHI7CiAKIAlsaXN0YWRkciA9 IGdldGxpc3RhZGRyKGxpc3RkaXIpOworCWxpc3RkZWxpbSA9IGdldGxpc3RkZWxpbShsaXN0 ZGlyKTsKIAlsaXN0bmFtZSA9IGdlbmxpc3RuYW1lKGxpc3RhZGRyKTsKIAlsaXN0ZnFkbiA9 IGdlbmxpc3RmcWRuKGxpc3RhZGRyKTsKIAotCWZyb21hZGRyID0gY29uY2F0c3RyKDMsIGxp c3RuYW1lLCAiK2JvdW5jZXMtaGVscEAiLCBsaXN0ZnFkbik7CisJZnJvbWFkZHIgPSBjb25j YXRzdHIoNCwgbGlzdG5hbWUsIGxpc3RkZWxpbSwgImJvdW5jZXMtaGVscEAiLCBsaXN0ZnFk bik7CisJbXlmcmVlKGxpc3RkZWxpbSk7CiAKIAlxdWV1ZWZpbGVuYW1lID0gcHJlcHN0ZHJl cGx5KGxpc3RkaXIsICJsaXN0aGVscCIsICIkbGlzdG93bmVyJCIsCiAJCQkJCWVtYWlsYWRk ciwgTlVMTCwgMCwgTlVMTCk7CmRpZmYgLXVyTmFkIG1sbW1qLTEuMi44LkRFQklBTi03L3Ny Yy9zZW5kX2xpc3QuYyBjaHJvb3Qtd29yay41L3NyYy9zZW5kX2xpc3QuYwotLS0gbWxtbWot MS4yLjguREVCSUFOLTcvc3JjL3NlbmRfbGlzdC5jCTIwMDUtMDQtMjYgMDQ6MjQ6MTguMDAw MDAwMDAwIC0wNjAwCisrKyBjaHJvb3Qtd29yay41L3NyYy9zZW5kX2xpc3QuYwkyMDA1LTA5 LTE1IDAxOjMzOjM4LjAwMDAwMDAwMCAtMDYwMApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1 ZGUgInNlbmRfbGlzdC5oIgogI2luY2x1ZGUgInN0cmdlbi5oIgogI2luY2x1ZGUgImdldGxp c3RhZGRyLmgiCisjaW5jbHVkZSAiZ2V0bGlzdGRlbGltLmgiCiAjaW5jbHVkZSAibG9nX2Vy cm9yLmgiCiAjaW5jbHVkZSAiY2hvbXAuaCIKICNpbmNsdWRlICJ3cmFwcGVycy5oIgpAQCAt NDQsMTggKzQ1LDIwIEBACiB2b2lkIHNlbmRfbGlzdChjb25zdCBjaGFyICpsaXN0ZGlyLCBj b25zdCBjaGFyICplbWFpbGFkZHIsCiAJICAgICAgIGNvbnN0IGNoYXIgKm1sbW1qc2VuZCkK IHsKLQljaGFyICpxdWV1ZWZpbGVuYW1lLCAqbGlzdGFkZHIsICpsaXN0bmFtZSwgKmxpc3Rm cWRuLCAqZnJvbWFkZHI7Ci0JY2hhciAqc3ViZGlyLCAqZmlsZWl0ZXI7CisJY2hhciAqcXVl dWVmaWxlbmFtZSwgKmxpc3RhZGRyLCAqbGlzdGRlbGltLCAqbGlzdG5hbWUsICpsaXN0ZnFk bjsKKwljaGFyICpmcm9tYWRkciwgKnN1YmRpciwgKmZpbGVpdGVyOwogCURJUiAqZGlycDsK IAlzdHJ1Y3QgZGlyZW50ICpkcDsKIAlpbnQgZmQsIHN1YmZkOwogCiAJbGlzdGFkZHIgPSBn ZXRsaXN0YWRkcihsaXN0ZGlyKTsKKwlsaXN0ZGVsaW0gPSBnZXRsaXN0ZGVsaW0obGlzdGRp cik7CiAJbGlzdG5hbWUgPSBnZW5saXN0bmFtZShsaXN0YWRkcik7CiAJbGlzdGZxZG4gPSBn ZW5saXN0ZnFkbihsaXN0YWRkcik7CiAJc3ViZGlyID0gY29uY2F0c3RyKDIsIGxpc3RkaXIs ICIvc3Vic2NyaWJlcnMuZC8iKTsKIAotCWZyb21hZGRyID0gY29uY2F0c3RyKDMsIGxpc3Ru YW1lLCAiK2JvdW5jZXMtaGVscEAiLCBsaXN0ZnFkbik7CisJZnJvbWFkZHIgPSBjb25jYXRz dHIoNCwgbGlzdG5hbWUsIGxpc3RkZWxpbSwgImJvdW5jZXMtaGVscEAiLCBsaXN0ZnFkbik7 CisJbXlmcmVlKGxpc3RkZWxpbSk7CiAKIAlxdWV1ZWZpbGVuYW1lID0gcHJlcHN0ZHJlcGx5 KGxpc3RkaXIsICJsaXN0c3VicyIsICIkbGlzdG93bmVyJCIsCiAJCQkJCWVtYWlsYWRkciwg TlVMTCwgMCwgTlVMTCk7Cg== --------------070507030108000403030606-- --------------enig3E62BCCDEC87FD3A5C5A63AF Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (MingW32) iD8DBQFDPyGflZCPwGNtWe4RAoimAJ4uiOYgvdP+QI4HhxC3tRQ6pDwTFQCbBwv4 55jxaMJcnGwSe+vwAwmNZnk= =BSPf -----END PGP SIGNATURE----- --------------enig3E62BCCDEC87FD3A5C5A63AF--