From kmail-devel Mon Apr 16 13:33:23 2001 From: Don Sanders Date: Mon, 16 Apr 2001 13:33:23 +0000 To: kmail-devel Subject: Re: PATCH: kmheaders.cpp X-MARC-Message: https://marc.info/?l=kmail-devel&m=98742799027314 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--------------Boundary-00=_NB0WAO2CAFJHNO397195" --------------Boundary-00=_NB0WAO2CAFJHNO397195 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit On Monday 16 April 2001 10:13, Michael Häckel wrote: > On Monday, 16. April 2001 03:46, Don Sanders wrote: > > Updated patch, saves a few more megabytes. > > To me it looks good. It need around 25% less time now. If you want to see real speed try out the attached patch. Sam has reimplemented index files, 30000 message folder switched to 3x faster (than before the kmheaders patch, with everything compiled as release). No increase in memory use. But note this patch has known bugs and we have done a lot of work in decreasing memory usage since then, unfortunately this has resulted in speed falling back to what it was originally but we'll work on trying to get the best of both worlds today. The changes in this file do reimplement some fundamental KMail data structures. Back up all your data first, or try it on a test Mail directory. > For switching from a big folder with 35000 messages to a small one the time > even goes down from 64 seconds to 4 seconds with this patch here. I don't > know why that was so slow before as switching to the folder is much faster. Try turning off threading. We seem to be stressing linuxes malloc (ie,. memory management) heavily. I still have problems even after applying the patch. BFN, Don. --------------Boundary-00=_NB0WAO2CAFJHNO397195 Content-Type: text/x-c++; charset="iso-8859-1"; name="speedup1" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="speedup1" SW5kZXg6IGttZm9sZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbmV0 d29yay9rbWFpbC9rbWZvbGRlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQ4CmRpZmYg LXAgLXUgLXcgLXIxLjE0OCBrbWZvbGRlci5jcHAKLS0tIGttZm9sZGVyLmNwcAkyMDAxLzA0LzEw IDA5OjE0OjM3CTEuMTQ4CisrKyBrbWZvbGRlci5jcHAJMjAwMS8wNC8xNSAxNDoyMjowNQpAQCAt MTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPHFyZWdleHAuaD4KICNpbmNsdWRlIDxrbWVzc2FnZWJv eC5oPgogI2luY2x1ZGUgPGtkZWJ1Zy5oPgorI2luY2x1ZGUgPGtjdXJzb3IuaD4KIAogI2luY2x1 ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTQ3LDcgKzQ4LDcgQEAKICNkZWZp bmUgSU5JVF9NU0dTIDgKIAogLy8gQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSB0YWJsZSBvZiBjb250 ZW50cyAoaW5kZXgpIGZpbGVzCi0jZGVmaW5lIElOREVYX1ZFUlNJT04gMTUwNAorI2RlZmluZSBJ TkRFWF9WRVJTSU9OIDE1MDUKIAogLy8gUmVndWxhciBleHByZXNzaW9uIHRvIGZpbmQgdGhlIGxp bmUgdGhhdCBzZXBlcmF0ZXMgbWVzc2FnZXMgaW4gYSBtYWlsCiAvLyBmb2xkZXI6CkBAIC0yMDcs NyArMjA4LDYgQEAgaW50IEtNRm9sZGVyOjpvcGVuKCkKICAgICAgIGVtaXQgc3RhdHVzTXNnKHN0 cik7CiAgICAgfQogICAgIGVsc2UgbUluZGV4U3RyZWFtID0gZm9wZW4oaW5kZXhMb2NhdGlvbigp LCAicisiKTsgLy8gaW5kZXggZmlsZQotCiAgICAgaWYgKCFtSW5kZXhTdHJlYW0pIHJjID0gY3Jl YXRlSW5kZXhGcm9tQ29udGVudHMoKTsKICAgICBlbHNlIHJlYWRJbmRleCgpOwogICB9CkBAIC0y NzksOCArMjc5LDE0IEBAIHZvaWQgS01Gb2xkZXI6OmNsb3NlKGJvb2wgYUZvcmNlZCkKIAogICBp ZiAobUF1dG9DcmVhdGVJbmRleCkKICAgewotICAgIGlmIChtRGlydHkpIHdyaXRlSW5kZXgoKTsK LSAgICBlbHNlIHN5bmMoKTsKKwlib29sIGRpcnR5ID0gbURpcnR5OworCWlmKCFkaXJ0eSkgewor CSAgICBmb3IgKGludCBpPTA7ICFkaXJ0eSAmJiBpPG1Nc2dMaXN0LmhpZ2goKTsgaSsrKSAKKwkJ aWYgKG1Nc2dMaXN0W2ldKQorCQkgICAgZGlydHkgPSBtTXNnTGlzdFtpXS0+ZGlydHkoKTsKKwl9 CisJaWYoZGlydHkpIAorCSAgICB3cml0ZUluZGV4KCk7CiAgICAgd3JpdGVDb25maWcoKTsKICAg fQogCkBAIC02OTgsNyArNzA0LDcgQEAgaW50IEtNRm9sZGVyOjp3cml0ZUluZGV4KCkKICAgUVN0 cmluZyB0ZW1wTmFtZTsKICAgS01Nc2dCYXNlKiBtc2dCYXNlOwogICBpbnQgb2xkX3VtYXNrOwot ICBpbnQgaT0wOworICAgIGludCBpPTAsIGxlbjsKIAogICBpZiAobUluZGV4U3RyZWFtKSBmY2xv c2UobUluZGV4U3RyZWFtKTsKICAgb2xkX3VtYXNrID0gdW1hc2soMDc3KTsKQEAgLTcxMSwxMiAr NzE3LDE0IEBAIGludCBLTUZvbGRlcjo6d3JpdGVJbmRleCgpCiAgIGlmICghbUluZGV4U3RyZWFt KSByZXR1cm4gZXJybm87CiAKICAgZnByaW50ZihtSW5kZXhTdHJlYW0sICIjIEtNYWlsLUluZGV4 IFYlZFxuIiwgSU5ERVhfVkVSU0lPTik7Ci0KICAgbUhlYWRlck9mZnNldCA9IGZ0ZWxsKG1JbmRl eFN0cmVhbSk7CiAgIGZvciAoaT0wOyBpPG1Nc2dMaXN0LmhpZ2goKTsgaSsrKQogICB7CiAgICAg aWYgKCEobXNnQmFzZSA9IG1Nc2dMaXN0W2ldKSkgY29udGludWU7Ci0gICAgZnByaW50ZihtSW5k ZXhTdHJlYW0sICIlc1xuIiwgKGNvbnN0IGNoYXIqKW1zZ0Jhc2UtPmFzSW5kZXhTdHJpbmcoKSk7 CisJbGVuID0gbXNnQmFzZS0+aW5kZXhTdHJpbmdMZW5ndGgoKTsKKwlmd3JpdGUoJmxlbixzaXpl b2YobGVuKSwgMSwgbUluZGV4U3RyZWFtKTsKKwlpZihmd3JpdGUobXNnQmFzZS0+YXNJbmRleFN0 cmluZygpLCBsZW4sIDEsIG1JbmRleFN0cmVhbSkgIT0gMSkgCisJICAgIHFEZWJ1ZygiV2hvYSEg JXM6JWQiLCBfX0ZJTEVfXywgX19MSU5FX18pOwogICB9CiAgIGlmIChmZmx1c2gobUluZGV4U3Ry ZWFtKSAhPSAwKSByZXR1cm4gZXJybm87CiAgIGlmIChmY2xvc2UobUluZGV4U3RyZWFtKSAhPSAw KSByZXR1cm4gZXJybm87CkBAIC03MzcsMjUgKzc0NSwzOCBAQCB2b2lkIEtNRm9sZGVyOjpzZXRB dXRvQ3JlYXRlSW5kZXgoYm9vbCBhCiAKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYm9vbCBL TUZvbGRlcjo6cmVhZEluZGV4SGVhZGVyKCkKK2Jvb2wgS01Gb2xkZXI6OnJlYWRJbmRleEhlYWRl cihpbnQgKmd2KQogewogICBpbnQgaW5kZXhWZXJzaW9uOwogCiAgIGFzc2VydChtSW5kZXhTdHJl YW0gIT0gTlVMTCk7CiAKICAgZnNjYW5mKG1JbmRleFN0cmVhbSwgIiMgS01haWwtSW5kZXggViVk XG4iLCAmaW5kZXhWZXJzaW9uKTsKLSAgaWYgKGluZGV4VmVyc2lvbiA9PSAxNTAzICYmIElOREVY X1ZFUlNJT04gPT0gMTUwNCkKLSAgewotICAgIGtkRGVidWcoKSA8PCAiQ29udmVydGluZyBpbmRl eCBmaWxlICIgPDwgKGNvbnN0IGNoYXIqKWluZGV4TG9jYXRpb24oKSA8PCAiIHRvIHV0Zi04IiA8 PCBlbmRsOworICAgIGlmKGd2KQorCSpndiA9IGluZGV4VmVyc2lvbjsKKyAgICBpZiAoaW5kZXhW ZXJzaW9uIDwgMTUwNSApIHsKKwlpZihpbmRleFZlcnNpb24gPT0gMTUwMyAmJiBJTkRFWF9WRVJT SU9OID09IDE1MDQpIHsKKwkgICAga2REZWJ1ZygpIDw8ICJDb252ZXJ0aW5nIG9sZCBpbmRleCBm aWxlICIgPDwgKGNvbnN0IGNoYXIqKWluZGV4TG9jYXRpb24oKSA8PCAiIHRvIHV0Zi04IiA8PCBl bmRsOwogICAgIG1Db252ZXJ0VG9VdGY4ID0gVFJVRTsKICAgfQotICBlbHNlIGlmIChpbmRleFZl cnNpb24gPCBJTkRFWF9WRVJTSU9OKQotICB7CisJcmV0dXJuIFRSVUU7CisgICAgfSBlbHNlIGlm IChpbmRleFZlcnNpb24gPCBJTkRFWF9WRVJTSU9OKSB7CiAgICAga2REZWJ1ZygpIDw8ICJJbmRl eCBmaWxlICIgPDwgKGNvbnN0IGNoYXIqKWluZGV4TG9jYXRpb24oKSA8PCAiIGlzIG91dCBvZiBk YXRlLiBSZS1jcmVhdGluZyBpdC4iIDw8IGVuZGw7CiAgICAgY3JlYXRlSW5kZXhGcm9tQ29udGVu dHMoKTsKICAgICByZXR1cm4gRkFMU0U7CisgICAgfSBlbHNlIGlmKGluZGV4VmVyc2lvbiA+IElO REVYX1ZFUlNJT04pIHsKKwlrYXBwLT5zZXRPdmVycmlkZUN1cnNvcihLQ3Vyc29yOjphcnJvd0N1 cnNvcigpKTsKKwlpbnQgciA9IEtNZXNzYWdlQm94OjpxdWVzdGlvblllc05vKDAsCisJCQkJCWkx OG4oCisJCQkJCSAgICAiVGhlIG1haWwgaW5kZXggZm9yICclMScgaXMgZnJvbSBhbiB1bmtub3du IHZlcnNpb24gb2YgS01haWwgKCUyKS5cbiIKKwkJCQkJICAgICJUaGlzIGluZGV4IGNhbiBiZSBy ZWdlbmVyYXRlZCBmcm9tIHlvdXIgbWFpbCBmb2xkZXIsIGJ1dCBzb21lXG4iCisJCQkJCSAgICAi aW5mb3JtYXRpb24sIGluY2x1ZGluZyBzdGF0dXMgZmxhZ3MsIG1heSBiZSBsb3N0LiBEbyB5b3Ug d2lzaFxuIgorCQkJCQkgICAgInRvIGRvd25ncmFkZSB5b3VyIGluZGV4IGZpbGUgPyIpIC5hcmco bmFtZSgpKSAuYXJnKGluZGV4VmVyc2lvbikgKTsKKwlrYXBwLT5yZXN0b3JlT3ZlcnJpZGVDdXJz b3IoKTsKKwlpZiAociA9PSBLTWVzc2FnZUJveDo6WWVzKSAKKwkgICAgY3JlYXRlSW5kZXhGcm9t Q29udGVudHMoKTsKKwlyZXR1cm4gRkFMU0U7CiAgIH0KLQogICByZXR1cm4gVFJVRTsKIH0KIApA QCAtNzYzLDE0ICs3ODQsMTUgQEAgYm9vbCBLTUZvbGRlcjo6cmVhZEluZGV4SGVhZGVyKCkKIC8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIHZvaWQgS01Gb2xkZXI6OnJlYWRJbmRleCgpCiB7Ci0gIFFD U3RyaW5nIGxpbmUoTUFYX0xJTkUpOworICAgIGludCBidWZmZXJfbGVuPTAsIGxlbjsKKyAgICB1 Y2hhciAqYnVmZmVyID0gTlVMTDsKICAgS01Nc2dJbmZvKiBtaTsKLQogICBhc3NlcnQobUluZGV4 U3RyZWFtICE9IE5VTEwpOwogICByZXdpbmQobUluZGV4U3RyZWFtKTsKIAogICBtTXNnTGlzdC5j bGVhcigpOwotICBpZiAoIXJlYWRJbmRleEhlYWRlcigpKSByZXR1cm47CisgICAgaW50IHZlcnNp b247CisgICAgaWYgKCFyZWFkSW5kZXhIZWFkZXIoJnZlcnNpb24pKSByZXR1cm47CiAKICAgbVVu cmVhZE1zZ3MgPSAwOwogICBtRGlydHkgPSBGQUxTRTsKQEAgLTc3OSwxMSArODAxLDMwIEBAIHZv aWQgS01Gb2xkZXI6OnJlYWRJbmRleCgpCiAgIG1Nc2dMaXN0LmNsZWFyKCk7CiAgIHdoaWxlICgh ZmVvZihtSW5kZXhTdHJlYW0pKQogICB7CisJbWkgPSBOVUxMOworCWlmKHZlcnNpb24gPj0gMTUw NSkgeworCSAgICBpZighZnJlYWQoJmxlbiwgc2l6ZW9mKGxlbiksIDEsIG1JbmRleFN0cmVhbSkp IAorCQlicmVhazsKKwkgICAgaWYobGVuKSB7CisJCWlmKGxlbiA+IGJ1ZmZlcl9sZW4pCisJCSAg ICBidWZmZXIgPSAodWNoYXIgKilyZWFsbG9jKGJ1ZmZlciwgYnVmZmVyX2xlbiA9IGxlbik7CisJ CWlmKCFidWZmZXIgfHwgIWZyZWFkKGJ1ZmZlciwgbGVuLCAxLCBtSW5kZXhTdHJlYW0pKSAKKwkJ ICAgIGJyZWFrOworCSAgICB9CisJICAgIG1pID0gbmV3IEtNTXNnSW5mbyh0aGlzKTsKKwkgICAg aWYoYnVmZmVyKQorCQltaS0+ZnJvbUluZGV4U3RyaW5nKGJ1ZmZlciwgbGVuKTsKKwl9IGVsc2Ug eworCSAgICBRQ1N0cmluZyBsaW5lKE1BWF9MSU5FKTsKICAgICBmZ2V0cyhsaW5lLmRhdGEoKSwg TUFYX0xJTkUsIG1JbmRleFN0cmVhbSk7CiAgICAgaWYgKGZlb2YobUluZGV4U3RyZWFtKSkgYnJl YWs7CiAKICAgICBtaSA9IG5ldyBLTU1zZ0luZm8odGhpcyk7Ci0gICAgbWktPmZyb21JbmRleFN0 cmluZyhsaW5lLCBtQ29udmVydFRvVXRmOCk7CisJICAgIG1pLT5jb21wYXRfZnJvbU9sZEluZGV4 U3RyaW5nKGxpbmUsIG1Db252ZXJ0VG9VdGY4KTsKKwl9CSAgIAorCWlmKCFtaSkKKwkgICAgYnJl YWs7CisKICAgICBpZiAobWktPnN0YXR1cygpID09IEtNTXNnU3RhdHVzRGVsZXRlZCkKICAgICB7 CiAgICAgICBkZWxldGUgbWk7ICAvLyBza2lwIG1lc3NhZ2VzIHRoYXQgYXJlIG1hcmtlZCBhcyBk ZWxldGVkCkBAIC04MDYsNyArODQ3LDkgQEAgdm9pZCBLTUZvbGRlcjo6cmVhZEluZGV4KCkKICAg ICB9CiAgICAgbU1zZ0xpc3QuYXBwZW5kKG1pKTsKICAgfQotICBpZiAobUNvbnZlcnRUb1V0Zjgp CisgICAgaWYoYnVmZmVyKQorCWZyZWUoYnVmZmVyKTsKKyAgICBpZiggdmVyc2lvbiA8IDE1MDUg JiYgbUNvbnZlcnRUb1V0ZjgpCiAgIHsKICAgICBtQ29udmVydFRvVXRmOCA9IEZBTFNFOwogICAg IG1EaXJ0eSA9IFRSVUU7CkBAIC0xNTQ5LDczICsxNTkyLDg4IEBAIGludCBLTUZvbGRlcjo6ZXhw dW5nZSgpCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpbnQgS01Gb2xkZXI6OmNvbXBhY3QoKQog ewotICBLTUZvbGRlciogdGVtcEZvbGRlcjsKLSAgS01NZXNzYWdlKiBtc2c7CiAgIFFDU3RyaW5n IHRlbXBOYW1lOwogICBRU3RyaW5nIG1zZ1N0cjsKLSAgaW50IG9wZW5Db3VudCA9IG1PcGVuQ291 bnQ7Ci0gIGludCBudW0sIG51bVN0YXR1czsKICAgaW50IHJjID0gMDsKKyAgICBpbnQgb3BlbkNv dW50ID0gbU9wZW5Db3VudDsKIAogICBpZiAoIW5lZWRzQ29tcGFjdCkKICAgICByZXR1cm4gMDsK ICAga2REZWJ1ZygpIDw8ICJDb21wYWN0aW5nICIgPDwgZW5kbDsKLSAgdGVtcE5hbWUgPSAiLiIg KyBuYW1lKCkubG9jYWw4Qml0KCk7CiAKLSAgdGVtcE5hbWUgKz0gIi5jb21wYWN0ZWQiOwotICB1 bmxpbmsocGF0aCgpLmxvY2FsOEJpdCgpICsgIi8iICsgdGVtcE5hbWUpOwotICB0ZW1wRm9sZGVy ID0gbmV3IEtNRm9sZGVyKHBhcmVudCgpLCB0ZW1wTmFtZSk7ICAgLy9zdmVuOiB3ZSBjcmVhdGUg aXQKLSAgaWYodGVtcEZvbGRlci0+Y3JlYXRlKCkpIHsKLSAgICBrZERlYnVnKCkgPDwgIktNRm9s ZGVyOjpjb21wYWN0KCkgQ3JlYXRpbmcgdGVtcEZvbGRlciBmYWlsZWQhXG4iIDw8IGVuZGw7Ci0g ICAgZGVsZXRlIHRlbXBGb2xkZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3N2ZW46 IGFuZCB3ZSBkZWxldGUgaXQKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHF1aWV0KFRSVUUpOwot ICB0ZW1wRm9sZGVyLT5vcGVuKCk7CisgICAgdGVtcE5hbWUgPSAiLiIgKyBuYW1lKCkgKyAiLmNv bXBhY3RlZCI7CisgICAgbW9kZV90IG9sZF91bWFzayA9IHVtYXNrKDA3Nyk7CisgICAgRklMRSAq dG1wZmlsZSA9IGZvcGVuKHRlbXBOYW1lLCAidyIpOworICAgIHVtYXNrKG9sZF91bWFzayk7Cisg ICAgaWYgKCF0bXBmaWxlKSAKKwlyZXR1cm4gZXJybm87CiAgIG9wZW4oKTsKIAotICBmb3IobnVt PTEsbnVtU3RhdHVzPTk7IGNvdW50KCkgPiAwOyBudW0rKywgbnVtU3RhdHVzLS0pCi0gIHsKLSAg ICBpZiAobnVtU3RhdHVzIDw9IDApCi0gICAgewotICAgICAgbXNnU3RyID0gaTE4bigiQ29tcGFj dGluZyBmb2xkZXI6ICUxIG1lc3NhZ2VzIGRvbmUiKS5hcmcobnVtKTsKKyAgICBLTU1zZ0luZm8q IG1pOworICAgIGludCBtc2l6ZSwgb2Zmcz0wLCBtc2dzPTAsIGZvbGRlcl9vZmZzZXQ7CisgICAg UUNTdHJpbmcgbXRleHQ7CisgICAgZm9yKGludCBpZHggPSAwOyBpZHggPCBtTXNnTGlzdC5jb3Vu dCgpOyBpZHgrKykgeworCWlmKCEobXNncysrICUgMTApKSB7CisJICAgIG1zZ1N0ciA9IGkxOG4o IkNvbXBhY3RpbmcgZm9sZGVyOiAlMSBtZXNzYWdlcyBkb25lIikuYXJnKG1zZ3MpOwogICAgICAg ZW1pdCBzdGF0dXNNc2cobXNnU3RyKTsKLSAgICAgIG51bVN0YXR1cyA9IDEwOwogICAgIH0KLQot ICAgIG1zZyA9IGdldE1zZygwKTsKLSAgICBpZihtc2cpCi0gICAgICByYyA9IHRlbXBGb2xkZXIt Pm1vdmVNc2cobXNnKTsKKwltaSA9IChLTU1zZ0luZm8qKW1Nc2dMaXN0W2lkeF07CisJbXNpemUg PSBtaS0+bXNnU2l6ZSgpOworCW10ZXh0LnJlc2l6ZShtc2l6ZSsyKTsKKwlmb2xkZXJfb2Zmc2V0 ID0gbWktPmZvbGRlck9mZnNldCgpOworCisJLy9ub3cgd2UgbmVlZCB0byBmaW5kIHRoZSBzZXBh cmF0b3IhIGdyci4uLgorCWZvcihpbnQgaSA9IChmb2xkZXJfb2Zmc2V0LTIpOyBpOyBpIC09IDIw KSB7CisJICAgIGlmKGZzZWVrKG1TdHJlYW0sIGksIFNFRUtfU0VUKSA9PSAtMSkgeworCQlyYyA9 IGVycm5vOworCQlicmVhazsKKwkgICAgfQorCSAgICBmcmVhZChtdGV4dC5kYXRhKCksIDIwLCAx LCBtU3RyZWFtKTsKKwkgICAgZm9yKGludCBpMiA9IDA7IGkyIDwgMjA7IGkyKyspCisJCWlmKCoo bXRleHQuZGF0YSgpK2kyKSA9PSAnXG4nKSB7CisJCSAgICBpbnQgc2l6ZSA9IGZvbGRlcl9vZmZz ZXQgLSAoaSArIGkyKTsKKwkJICAgIGlmKGZzZWVrKG1TdHJlYW0sIGkgKyBpMiwgU0VFS19TRVQp ID09IC0xIHx8IAorCQkgICAgICAgIWZyZWFkKG10ZXh0LmRhdGEoKSwgc2l6ZSwgMSwgbVN0cmVh bSkgfHwgIWZ3cml0ZShtdGV4dC5kYXRhKCksIHNpemUsIDEsIHRtcGZpbGUpKSB7CisJCQlyYyA9 IGVycm5vOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBvZmZzICs9IHNpemU7CisJCSAgICBp ID0gMDsKKwkJICAgIGJyZWFrOworCQl9CisJfQogICAgIGlmIChyYykKKwkgICAgYnJlYWs7CisJ CisJaWYoZnNlZWsobVN0cmVhbSwgZm9sZGVyX29mZnNldCwgU0VFS19TRVQpID09IC0xIHx8CisJ ICAgIWZyZWFkKG10ZXh0LmRhdGEoKSwgbXNpemUsIDEsIG1TdHJlYW0pIHx8ICFmd3JpdGUobXRl eHQuZGF0YSgpLCBtc2l6ZSwgMSwgdG1wZmlsZSkpIHsKKwkgICAgcmMgPSBlcnJubzsKICAgICAg IGJyZWFrOwotICAgIHRlbXBGb2xkZXItPnVuR2V0TXNnKHRlbXBGb2xkZXItPmNvdW50KCkgLSAx KTsKICAgfQotICB0ZW1wTmFtZSA9IHRlbXBGb2xkZXItPmxvY2F0aW9uKCk7Ci0gIHRlbXBGb2xk ZXItPmNsb3NlKFRSVUUpOwotICBjbG9zZShUUlVFKTsKLSAgbU1zZ0xpc3QuY2xlYXIoVFJVRSk7 CisJbWktPnNldEZvbGRlck9mZnNldChvZmZzKTsKKwlvZmZzICs9IG1zaXplOworICAgIH0KKyAg ICBmY2xvc2UodG1wZmlsZSk7CiAKKwogICBpZiAoIXJjKSB7CisJd3JpdGVJbmRleCgpOworCWNs b3NlKFRSVUUpOwogICAgIF9yZW5hbWUodGVtcE5hbWUsIGxvY2F0aW9uKCkpOwotICAgIF9yZW5h bWUodGVtcEZvbGRlci0+aW5kZXhMb2NhdGlvbigpLCBpbmRleExvY2F0aW9uKCkpOwogICB9CiAg IGVsc2UKICAgeworCWNsb3NlKCk7CiAgICAga2REZWJ1ZygpIDw8ICJFcnJvciBvY2N1cnJlZCB3 aGlsZSBjb21wYWN0aW5nIiA8PCBlbmRsOwogICAgIGtkRGVidWcoKSA8PCAiQ29tcGFjdGlvbiBh Ym9ydGVkLiIgPDwgZW5kbDsKICAgfQogCi0gIC8vIE5vdyByZWFsbHkgZnJlZSBhbGwgbWVtb3J5 Ci0gIGRlbGV0ZSB0ZW1wRm9sZGVyOyAgICAgICAgICAgICAgICAvL3N2ZW46IHdlIGRlbGV0ZSBp dCwgbm90IHRoZSBtYW5hZ2VyCi0KICAgaWYgKG9wZW5Db3VudCA+IDApCiAgIHsKICAgICBvcGVu KCk7CiAgICAgbU9wZW5Db3VudCA9IG9wZW5Db3VudDsKICAgfQogICBxdWlldChGQUxTRSk7Ci0K ICAgaWYgKCFtUXVpZXQpCiAgICAgZW1pdCBjaGFuZ2VkKCk7CiAgIGVsc2UKQEAgLTE2MjYsMzYg KzE2ODQsNiBAQCBpbnQgS01Gb2xkZXI6OmNvbXBhY3QoKQogCiAKIC8vLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLWludCBLTUZvbGRlcjo6c3luYygpCi17Ci0gIEtNTXNnQmFzZVB0ciBtYjsKLSAgdW5z aWduZWQgbG9uZyBvZmZzZXQgPSBtSGVhZGVyT2Zmc2V0OwotICBpbnQgaSwgcmMsIHJlY1NpemUg PSBLTU1zZ0Jhc2U6OmluZGV4U3RyaW5nTGVuZ3RoKCkrMTsKLSAgaW50IGhpZ2ggPSBtTXNnTGlz dC5oaWdoKCk7Ci0KLSAgaWYgKCFtSW5kZXhTdHJlYW0pIHJldHVybiAwOwotCi0gIGZvciAocmM9 MCxpPTA7IGk8aGlnaDsgaSsrKQotICB7Ci0gICAgbWIgPSBtTXNnTGlzdFtpXTsKLSAgICBpZiAo bWItPmRpcnR5KCkpCi0gICAgewotICAgICAgZnNlZWsobUluZGV4U3RyZWFtLCBvZmZzZXQsIFNF RUtfU0VUKTsKLSAgICAgIGZwcmludGYobUluZGV4U3RyZWFtLCAiJXNcbiIsIChjb25zdCBjaGFy KiltYi0+YXNJbmRleFN0cmluZygpKTsKLSAgICAgIHJjID0gZXJybm87Ci0gICAgICBpZiAocmMp IGJyZWFrOwotICAgICAgbWItPnNldERpcnR5KEZBTFNFKTsKLSAgICB9Ci0gICAgb2Zmc2V0ICs9 IHJlY1NpemU7Ci0gIH0KLSAgZmZsdXNoKG1JbmRleFN0cmVhbSk7Ci0KLSAgbURpcnR5ID0gRkFM U0U7Ci0gIHJldHVybiByYzsKLX0KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBjb25zdCBj aGFyKiBLTUZvbGRlcjo6dHlwZSgpIGNvbnN0CiB7CiAgIGlmIChtQWNjdExpc3QpIHJldHVybiAi SW4iOwpJbmRleDoga21mb2xkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2Rl bmV0d29yay9rbWFpbC9rbWZvbGRlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ1CmRpZmYg LXAgLXUgLXcgLXIxLjQ1IGttZm9sZGVyLmgKLS0tIGttZm9sZGVyLmgJMjAwMS8wNC8wOSAxNTo1 MzozNAkxLjQ1CisrKyBrbWZvbGRlci5oCTIwMDEvMDQvMTUgMTQ6MjI6MDUKQEAgLTE4NywxMCAr MTg3LDYgQEAgcHVibGljOgogICAgIHN1Y2Nlc3MuICovCiAgIHZpcnR1YWwgaW50IGV4cHVuZ2Uo KTsKIAotICAvKiogU3luYyBhbGwgSW5kZXgtY2hhbmdlcyB0byBmaWxlLiBSZXR1cm5zIHplcm8g b24gc3VjY2VzcyBhbmQgYW4gZXJybm8KLSAgICBvbiBmYWlsdXJlLiAqLwotICB2aXJ0dWFsIGlu dCBzeW5jKCk7Ci0KICAgLyoqIFJlbW92ZSBkZWxldGVkIG1lc3NhZ2VzIGZyb20gdGhlIGZvbGRl ci4gUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MKICAgICBhbmQgYW4gZXJybm8gb24gZmFpbHVyZS4g Ki8KICAgdmlydHVhbCBpbnQgY29tcGFjdCgpOwpAQCAtMzMxLDcgKzMyNyw3IEBAIHByb3RlY3Rl ZDoKICAgdmlydHVhbCB2b2lkIHJlYWRJbmRleCgpOwogCiAgIC8qKiBSZWFkIGluZGV4IGhlYWRl ci4gQ2FsbGVkIGZyb20gd2l0aGluIHJlYWRJbmRleCgpLiAqLwotICB2aXJ0dWFsIGJvb2wgcmVh ZEluZGV4SGVhZGVyKCk7CisgIHZpcnR1YWwgYm9vbCByZWFkSW5kZXhIZWFkZXIoaW50ICpndj1O VUxMKTsKIAogICAvKiogQ3JlYXRlIGluZGV4IGZpbGUgZnJvbSBtZXNzYWdlcyBmaWxlIGFuZCBm aWxsIHRoZSBtZXNzYWdlLWluZm8gbGlzdAogICAgICAgbU1zZ0xpc3QuIFJldHVybnMgMCBvbiBz dWNjZXNzIGFuZCBhbiBlcnJubyB2YWx1ZSAoc2VlIGZvcGVuKSBvbgpJbmRleDoga21tc2diYXNl LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbmV0d29yay9rbWFpbC9rbW1z Z2Jhc2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY5CmRpZmYgLXAgLXUgLXcgLXIxLjY5 IGttbXNnYmFzZS5jcHAKLS0tIGttbXNnYmFzZS5jcHAJMjAwMS8wNC8wNiAwODo1MDozNwkxLjY5 CisrKyBrbW1zZ2Jhc2UuY3BwCTIwMDEvMDQvMTUgMTQ6MjI6MDUKQEAgLTM0LDEyICszNCwxOCBA QCBLTU1zZ0Jhc2U6OktNTXNnQmFzZShLTUZvbGRlciogYVBhcmVudCkKICAgbUZvbGRlck9mZnNl dCA9IDA7CiAgIG1TdGF0dXMgID0gS01Nc2dTdGF0dXNOZXc7CiAgIG1EYXRlICAgID0gMDsKKyAg bU1zZ0luZGV4ID0gTlVMTDsKKyAgbU1zZ0luZGV4U2l6ZSA9IDA7CiB9CiAKIAogLy8tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogS01Nc2dCYXNlOjp+S01Nc2dCYXNlKCkKIHsKKyAgICBpZihtTXNnSW5k ZXgpIAorCWZyZWUobU1zZ0luZGV4KTsKKyAgICBtTXNnSW5kZXggPSBOVUxMOworICAgIG1Nc2dJ bmRleFNpemUgPSAwOwogfQogCiAKQEAgLTUyLDYgKzU4LDExIEBAIHZvaWQgS01Nc2dCYXNlOjph c3NpZ24oY29uc3QgS01Nc2dCYXNlKiAKICAgbUZvbGRlck9mZnNldCA9IG90aGVyLT5tRm9sZGVy T2Zmc2V0OwogICBtU3RhdHVzID0gb3RoZXItPm1TdGF0dXM7CiAgIG1EYXRlID0gb3RoZXItPm1E YXRlOworCisgIGlmKG1Nc2dJbmRleCkKKyAgICAgIGZyZWUobU1zZ0luZGV4KTsKKyAgbU1zZ0lu ZGV4ID0gTlVMTDsKKyAgbU1zZ0luZGV4U2l6ZSA9IDA7CiB9CiAKIApAQCAtMTg1LDY4ICsxOTYs NiBAQCBjb25zdCBRU3RyaW5nIEtNTXNnQmFzZTo6ZGF0ZVN0cih2b2lkKSBjCiAKIAogLy8tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotY29uc3QgUUNTdHJpbmcgS01Nc2dCYXNlOjphc0luZGV4U3RyaW5n KHZvaWQpIGNvbnN0Ci17Ci0gIGludCBpLCBsZW47Ci0gIFFDU3RyaW5nIHN0cjsgCi0gIHVuc2ln bmVkIGxvbmcgZGF0ZVRlbiA9IGRhdGUoKTsKLS8vICBkYXRlVGVuICU9IDEwMDAwMDAwMDAwOyAv LyBJbiBpbmRleCBvbmx5IDEwIGNoYXJzIGFyZSByZXNlcnZlZCBmb3IgdGhlIGRhdGUKLS8vICBU aGlzIGlzIG5vbnNlbnNlIGJlY2F1c2UgMTAwMDAwMDAwMDAgaXMgYmlnZ2VyIHRoYW4gdGhlIGhp Z2hlc3QgdW5zaWduZWQKLS8vICBsb25nLiAoT3IgaXMgdGhlcmUgYW55IGNvbXBpbGVyIHRoYXQg ZGVmaW5lcyB1bnNpZ25lZCBsb25nIGFzIHNvbWV0aGluZwotLy8gIHJlYWxseSBodWdlPz8gKQot Ci0gIFFDU3RyaW5nIGEoc3ViamVjdCgpLnV0ZjgoKSk7Ci0gIGEudHJ1bmNhdGUoMTAwKTsKLSAg UUNTdHJpbmcgYihmcm9tU3RyaXAoKS51dGY4KCkpOwotICBiLnRydW5jYXRlKDUwKTsKLSAgUUNT dHJpbmcgYyh0b1N0cmlwKCkudXRmOCgpKTsKLSAgYy50cnVuY2F0ZSg0Nyk7Ci0gIFFDU3RyaW5n IGQoKGNvbnN0IGNoYXIqKXJlcGx5VG9JZE1ENSgpKTsKLSAgZC50cnVuY2F0ZSgyMik7Ci0gIFFD U3RyaW5nIGUoKGNvbnN0IGNoYXIqKW1zZ0lkTUQ1KCkpOwotICBlLnRydW5jYXRlKDIyKTsKLQot ICAvLyBkb24ndCBmb3JnZXQgdG8gY2hhbmdlIGluZGV4U3RyaW5nTGVuZ3RoKCkgYmVsb3cgISEK LSAgc3RyLnNwcmludGYoIiVjICUtLjlsdSAlLS45bHUgJS0uMTBsdSAlLTMuM3MgIiwKLQkgICAg ICAoY2hhcilzdGF0dXMoKSwgZm9sZGVyT2Zmc2V0KCksIG1zZ1NpemUoKSwgZGF0ZVRlbiwKLQkg ICAgICAoY29uc3QgY2hhciopeG1hcmsoKSApOwotICBpZiAoc3RyLmxlbmd0aCgpICE9IDM3KQot ICAgIGtkRGVidWcoKSA8PCAiSW52YWxpZCBsZW5ndGggIiA8PCBlbmRsOwotICBzdHIgKz0gYS5y aWdodEp1c3RpZnkoIDEwMCwgJyAnICk7Ci0gIHN0ciArPSAiICI7Ci0gIHN0ciArPSBiLnJpZ2h0 SnVzdGlmeSggNTAsICcgJyApOwotICBzdHIgKz0gIiAiOwotICBzdHIgKz0gYy5yaWdodEp1c3Rp ZnkoIDUwLCAnICcgKTsKLSAgc3RyICs9ICIgIjsKLSAgc3RyICs9IGQucmlnaHRKdXN0aWZ5KCAy MiwgJyAnICk7Ci0gIHN0ciArPSAiICI7Ci0gIHN0ciArPSBlLnJpZ2h0SnVzdGlmeSggMjIsICcg JyApOwotCi0gIGxlbiA9IHN0ci5sZW5ndGgoKTsKLSAgZm9yIChpPTA7IGk8bGVuOyBpKyspCi0g ICAgaWYgKHN0cltpXSA8ICcgJyAmJiBzdHJbaV0gPj0gMCkKLSAgICAgIHN0cltpXSA9ICcgJzsK LQotICBpZiAoc3RyLmxlbmd0aCgpICE9IDI4NSkgewotICAgIGtkRGVidWcoKSA8PCBRU3RyaW5n KCAiRXJyb3IgaW52YWxpZCBpbmRleCBlbnRyeSAlMSIpLmFyZyhzdHIubGVuZ3RoKCkpIDw8IGVu ZGw7Ci0gICAga2REZWJ1ZygpIDw8IHN0ciA8PCBlbmRsOwotICB9Ci0gIHJldHVybiBzdHI7Ci19 Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW50IEtNTXNnQmFzZTo6aW5kZXhTdHJpbmdM ZW5ndGgodm9pZCkKLXsKLSAgLy9yZXR1cm4gMjM3OwotICAvLyAgcmV0dXJuIDMzODsgLy9zdmVu ICgrIDEwMCBjaGFycyB0byArIG9uZSBzcGFjZSwgcmlnaHQ/Ci0gIC8vICByZXR1cm4gMzM5OyAv L3NhbmRlcnMgKHVzZSAxMCBkaWdpdHMgZm9yIHRoZSBkYXRlIHdlIG5lZWQgdGhpcyBpbiAyMDAx ISkKLSAgLy8gIHJldHVybiA1NDE7IC8vc2FuZGVycyBpbmNsdWRlIFJlcGx5LVRvIGFuZCBNZXNz YWdlLUlkIGZvciB0aHJlYWRpbmcKLSAgcmV0dXJuIDI4NTsgLy8gc2FuZGVycyBzdHJpcCBmcm9t IGFuZCB0byBhbmQgdXNlIE1ENSBvbiBJZHMKLX0KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiBRU3RyaW5nIEtNTXNnQmFzZTo6c2tpcEtleXdvcmQoY29uc3QgUVN0cmluZyYgYVN0ciwgY2hh ciBzZXBDaGFyLAogCQkJCSAgIGJvb2wqIGhhc0tleXdvcmQpCiB7CkBAIC03MDEsNCArNjUwLDE0 NiBAQCBjb25zdCBRU3RyaW5nIEtNTXNnQmFzZTo6ZW5jb2RlQmFzZTY0KGNvCiAgIER3RW5jb2Rl QmFzZTY0KGR3c3JjLCBkd2Rlc3QpOwogICByZXN1bHQgPSBkd2Rlc3QuY19zdHIoKTsKICAgcmV0 dXJuIHJlc3VsdDsKK30KKworCitlbnVtIE1zZ1BhcnRUeXBlCit7CisgICAgTXNnTm9QYXJ0ID0g MCwKKyAgICAvL3VuaWNvZGUgc3RyaW5ncworICAgIE1zZ0Zyb21QYXJ0ID0gMSwgCisgICAgTXNn U3ViamVjdFBhcnQgPSAyLCAKKyAgICBNc2dUb1BhcnQgPSAzLAorICAgIE1zZ1JlcGx5VG9JZE1E NVBhcnQgPSA0LAorICAgIE1zZ0lkTUQ1UGFydCA9IDUsCisgICAgTXNnWE1hcmtQYXJ0ID0gNiwK KyAgICAvL3Vuc2lnbmVkIGxvbmcKKyAgICBNc2dPZmZzZXRQYXJ0ID0gNywKKyAgICBNc2dTdGF0 dXNQYXJ0ID0gOCwKKyAgICBNc2dTaXplUGFydCA9IDksCisgICAgTXNnRGF0ZVBhcnQgPSAxMAor fTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBLTU1zZ0luZm86OmZyb21JbmRleFN0 cmluZyhjb25zdCB1Y2hhciAqZGF0YSwgc2hvcnQgZGF0YV9sZW4pCit7CisgICAgLy9zaW5jZSB3 ZSd2ZSBsb2FkZWQgdGhlIG9sZCBzdHJpbmcgaXMgbm8gZ29vZAorICAgIGlmKG1Nc2dJbmRleCkK KwlmcmVlKG1Nc2dJbmRleCk7CisgICAgbU1zZ0luZGV4ID0gTlVMTDsKKyAgICBtTXNnSW5kZXhT aXplID0gMDsKKworICAgIC8vbm93IGxvYWQKKyAgICBzaG9ydCBvZmZzZXQgPSAwOworI2RlZmlu ZSBDT1BZX0RBVEEoeCwgbGVuZ3RoKSBkbyB7IFwKKyAgICAgaWYob2Zmc2V0ICsgKChpbnQpbGVu Z3RoKSA+IGRhdGFfbGVuKSB7XAorICAgICAgICBvZmZzZXQgPSBkYXRhX2xlbjsgXAorICAgICAg ICBxRGVidWcoIlRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4uICVzOiVkIiwgX19GSUxFX18sIF9f TElORV9fKTsgXAorICAgICAgICBtZW1zZXQoeCwgbGVuZ3RoLCAnXDAnKTsgXAorICAgICB9IGVs c2UgeyBcCisgICAgICAgIG1lbWNweSh4LCBkYXRhK29mZnNldCwgbGVuZ3RoKTsgXAorCW9mZnNl dCArPSBsZW5ndGg7IFwKKyAgICAgfSB9IHdoaWxlKDApIAorI2RlZmluZSBDT1BZX0hFQURFUl9U WVBFKHgpIEFTU0VSVChzaXplb2YoeCkgPT0gc2l6ZW9mKE1zZ1BhcnRUeXBlKSk7IENPUFlfREFU QSgmeCwgc2l6ZW9mKHgpKQorI2RlZmluZSBDT1BZX0hFQURFUl9MRU4oeCkgIEFTU0VSVChzaXpl b2YoeCkgPT0gc2l6ZW9mKHNob3J0KSk7IENPUFlfREFUQSgmeCwgc2l6ZW9mKHgpKTsgCisjZGVm aW5lIFNFVFVQX1NUUklORyh4KSBkbyB7IFwKKyAgICAgQ09QWV9IRUFERVJfTEVOKGwpOyBcCisg ICAgIGlmKG9mZnNldCArIGwgPiBkYXRhX2xlbikgeyBcCisgICAgICAgIG9mZnNldCA9IGRhdGFf bGVuOyBcCisgICAgICAgIHFEZWJ1ZygiVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLi4gJXM6JWQi LCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisJeCA9IE5VTEw7IFwKKyAgICAgfSBlbHNlIHsgXAor ICAgICAgICB4ID0gUVN0cmluZygoUUNoYXIgKikoZGF0YSArIG9mZnNldCksIGwvMik7IFwKKyAg ICAgICAgb2Zmc2V0ICs9IGw7IFwKKyAgICAgfSB9IHdoaWxlKDApCisjZGVmaW5lIFNFVFVQX0lO VEVHRVIoeCkgZG8geyBDT1BZX0hFQURFUl9MRU4obCk7IEFTU0VSVChsID09IHNpemVvZih4KSk7 IENPUFlfREFUQSgmeCwgc2l6ZW9mKHgpKTsgfSB3aGlsZSgwKQorICAgIC8vd2l0aCB0aGF0IG91 dCBvZiB0aGUgd2F5LCBhY3R1YWwgY29kZS4uCisgICAgTXNnUGFydFR5cGUgdHlwZTsKKyAgICBz aG9ydCBsOworICAgIHdoaWxlKG9mZnNldCA8IGRhdGFfbGVuKSB7CisJQ09QWV9IRUFERVJfVFlQ RSh0eXBlKTsKKwlzd2l0Y2godHlwZSkgeworCWRlZmF1bHQ6IAorCSAgICBxRGVidWcoIlN0cmFu Z2UuLiAlZCIsIHR5cGUpOworCSAgICBicmVhazsKKwljYXNlIE1zZ0Zyb21QYXJ0OgorCSAgICBT RVRVUF9TVFJJTkcobUZyb21TdHJpcCk7CisJICAgIGJyZWFrOworCWNhc2UgTXNnU3ViamVjdFBh cnQ6CisJICAgIFNFVFVQX1NUUklORyhtU3ViamVjdCk7CisJICAgIGJyZWFrOworCWNhc2UgTXNn VG9QYXJ0OgorCSAgICBTRVRVUF9TVFJJTkcobVRvU3RyaXApOworCSAgICBicmVhazsKKwljYXNl IE1zZ1JlcGx5VG9JZE1ENVBhcnQ6CisJICAgIFNFVFVQX1NUUklORyhtUmVwbHlUb0lkTUQ1KTsK KwkgICAgYnJlYWs7CisJY2FzZSBNc2dJZE1ENVBhcnQ6CisJICAgIFNFVFVQX1NUUklORyhtTXNn SWRNRDUpOworCSAgICBicmVhazsKKwljYXNlIE1zZ1hNYXJrUGFydDoKKwkgICAgU0VUVVBfU1RS SU5HKG1YTWFyayk7CisJICAgIGJyZWFrOworCWNhc2UgTXNnT2Zmc2V0UGFydDoKKwkgICAgU0VU VVBfSU5URUdFUihtRm9sZGVyT2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJY2FzZSBNc2dTdGF0dXNQ YXJ0OgorCSAgICBTRVRVUF9JTlRFR0VSKG1TdGF0dXMpOworCSAgICBicmVhazsKKwljYXNlIE1z Z1NpemVQYXJ0OgorCSAgICBTRVRVUF9JTlRFR0VSKG1Nc2dTaXplKTsKKwkgICAgYnJlYWs7CisJ Y2FzZSBNc2dEYXRlUGFydDoKKwkgICAgU0VUVVBfSU5URUdFUihtRGF0ZSk7CisJICAgIGJyZWFr OworCX0KKyAgICB9CisjdW5kZWYgQ09QWV9EQVRBCisgICAgbURpcnR5ID0gRkFMU0U7Cit9CisK KworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjb25zdCB1Y2hhciAqS01Nc2dCYXNlOjphc0lu ZGV4U3RyaW5nKHZvaWQpCit7CisgICAgaWYoIWRpcnR5KCkgJiYgbU1zZ0luZGV4KSAKKwlyZXR1 cm4gbU1zZ0luZGV4OworICAgIAorICAgIGlmKG1Nc2dJbmRleCkgeworCWZyZWUobU1zZ0luZGV4 KTsKKwltTXNnSW5kZXhTaXplID0gMDsKKyAgICB9CisgICAgdW5zaWduZWQgaW50IGNzaXplID0g MjU2OworICAgIG1Nc2dJbmRleCA9ICh1Y2hhciAqKW1hbGxvYyhjc2l6ZSk7CisjZGVmaW5lIFNU T1JFX0RBVEFfTEVOKHR5cGUsIHgsIGxlbikgZG8geyBcCisJaWYoY3NpemUgPCAobU1zZ0luZGV4 U2l6ZSArIChsZW4gKyBzaXplb2Yoc2hvcnQpICsgc2l6ZW9mKE1zZ1BhcnRUeXBlKSkpKSBcCisg ICAgCSAgIG1Nc2dJbmRleCA9ICh1Y2hhciAqKXJlYWxsb2MobU1zZ0luZGV4LCBjc2l6ZSArPSBR TUFYKDI1NiwgKGxlbitzaXplb2Yoc2hvcnQpK3NpemVvZihNc2dQYXJ0VHlwZSkpKSk7IFwKKyAg ICAgICAgTXNnUGFydFR5cGUgdCA9IHR5cGU7IG1lbWNweShtTXNnSW5kZXgrbU1zZ0luZGV4U2l6 ZSwgJnQsIHNpemVvZihNc2dQYXJ0VHlwZSkpOyBcCisgICAgICAgIHNob3J0IGwgPSBsZW47IG1l bWNweShtTXNnSW5kZXgrbU1zZ0luZGV4U2l6ZStzaXplb2YoTXNnUGFydFR5cGUpLCAmbCwgc2l6 ZW9mKHNob3J0KSk7IFwKKyAgICAgICAgbWVtY3B5KG1Nc2dJbmRleCttTXNnSW5kZXhTaXplK3Np emVvZihzaG9ydCkrc2l6ZW9mKE1zZ1BhcnRUeXBlKSwgeCwgbGVuKTsgXAorICAgICAgICBtTXNn SW5kZXhTaXplICs9IGxlbiArIHNpemVvZihzaG9ydCkgKyBzaXplb2YoTXNnUGFydFR5cGUpOyBc CisgICAgfSB3aGlsZSgwKQorI2RlZmluZSBTVE9SRV9EQVRBKHR5cGUsIHgpIFNUT1JFX0RBVEFf TEVOKHR5cGUsICZ4LCBzaXplb2YoeCkpCisgICAgU1RPUkVfREFUQV9MRU4oTXNnRnJvbVBhcnQs IGZyb21TdHJpcCgpLnVuaWNvZGUoKSwgZnJvbVN0cmlwKCkubGVuZ3RoKCkgKiAyKTsKKyAgICBT VE9SRV9EQVRBX0xFTihNc2dTdWJqZWN0UGFydCwgc3ViamVjdCgpLnVuaWNvZGUoKSwgc3ViamVj dCgpLmxlbmd0aCgpICogMik7CisgICAgU1RPUkVfREFUQV9MRU4oTXNnVG9QYXJ0LCB0b1N0cmlw KCkudW5pY29kZSgpLCB0b1N0cmlwKCkubGVuZ3RoKCkgKiAyKTsKKyAgICBTVE9SRV9EQVRBX0xF TihNc2dSZXBseVRvSWRNRDVQYXJ0LCByZXBseVRvSWRNRDUoKS51bmljb2RlKCksIHJlcGx5VG9J ZE1ENSgpLmxlbmd0aCgpICogMik7CisgICAgU1RPUkVfREFUQV9MRU4oTXNnSWRNRDVQYXJ0LCBt c2dJZE1ENSgpLnVuaWNvZGUoKSwgbXNnSWRNRDUoKS5sZW5ndGgoKSAqIDIpOworICAgIFNUT1JF X0RBVEFfTEVOKE1zZ1hNYXJrUGFydCwgeG1hcmsoKS51bmljb2RlKCksIHhtYXJrKCkubGVuZ3Ro KCkgKiAyKTsKKyAgICBTVE9SRV9EQVRBKE1zZ1N0YXR1c1BhcnQsIG1TdGF0dXMpOworICAgIFNU T1JFX0RBVEEoTXNnU2l6ZVBhcnQsIG1Nc2dTaXplKTsKKyAgICBTVE9SRV9EQVRBKE1zZ09mZnNl dFBhcnQsIG1Gb2xkZXJPZmZzZXQpOworICAgIGxvbmcgdG1wX2wgPSBkYXRlKCk7CisgICAgU1RP UkVfREFUQShNc2dEYXRlUGFydCwgdG1wX2wpOworI3VuZGVmIFNUT1JFX0RBVEFfTEVOCisgICAg cmV0dXJuIG1Nc2dJbmRleDsKK30KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgS01N c2dCYXNlOjppbmRleFN0cmluZ0xlbmd0aCh2b2lkKQoreworICAgIGFzSW5kZXhTdHJpbmcoKTsg Ly93aWxsIGNoYW5nZSBpbmRleCBzaXplIG9mIG5lZWRlZAorICAgIHJldHVybiBtTXNnSW5kZXhT aXplOwogfQpJbmRleDoga21tc2diYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2Rl L2tkZW5ldHdvcmsva21haWwva21tc2diYXNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjUK ZGlmZiAtcCAtdSAtdyAtcjEuMjUga21tc2diYXNlLmgKLS0tIGttbXNnYmFzZS5oCTIwMDEvMDQv MDUgMjA6MTk6MDkJMS4yNQorKysga21tc2diYXNlLmgJMjAwMS8wNC8xNSAxNDoyMjowNQpAQCAt ODIsMjAgKzgyLDE4IEBAIHB1YmxpYzoKICAgdmlydHVhbCB2b2lkIHNldFN1YmplY3QoY29uc3Qg UVN0cmluZyYpID0gMDsKICAgdmlydHVhbCB2b2lkIHNldFhNYXJrKGNvbnN0IFFTdHJpbmcmKSA9 IDA7CiAKLSAgLyoqIFJldHVybiBjb250ZW50cyBhcyBpbmRleCBzdHJpbmcuIFRoaXMgc3RyaW5n IGlzIG9mIGZpeGVkIHNpemUKLSAgICB0aGF0IGNhbiBiZSByZWFkIHdpdGggaW5kZXhTdHJpbmdM ZW5ndGgoKS4gKi8KLSAgdmlydHVhbCBjb25zdCBRQ1N0cmluZyBhc0luZGV4U3RyaW5nKHZvaWQp IGNvbnN0OworICAgIC8qKiBSZXR1cm4gY29udGVudHMgYXMgaW5kZXggc3RyaW5nLiBUaGlzIHN0 cmluZyBpcyBvZiBpbmRleFN0cmluZ0xlbmd0aCgpIHNpemUgKi8KKyAgY29uc3QgdWNoYXIgKmFz SW5kZXhTdHJpbmcodm9pZCk7CisgIC8qKiBSZXR1cm5zIGxlbmd0aCBvZiBpbmRleCBzdHJpbmdz IHJldHVybmVkIGJ5IGFzSW5kZXhTdHJpbmcoKS4gKi8KKyAgaW50IGluZGV4U3RyaW5nTGVuZ3Ro KHZvaWQpOwogCi0gIC8qKiBSZXR1cm5zIGZpeGVkIGxlbmd0aCBvZiBpbmRleCBzdHJpbmdzIHJl dHVybmVkIGJ5IGFzSW5kZXhTdHJpbmcoKS4gKi8KLSAgc3RhdGljIGludCBpbmRleFN0cmluZ0xl bmd0aCh2b2lkKTsKLQogICAvKiogR2V0L3NldCBvZmZzZXQgaW4gbWFpbCBmb2xkZXIuICovCi0g IHVuc2lnbmVkIGxvbmcgZm9sZGVyT2Zmc2V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Gb2xkZXJP ZmZzZXQ7IH0KLSAgdm9pZCBzZXRGb2xkZXJPZmZzZXQodW5zaWduZWQgbG9uZyBvZmZzKSB7IG1G b2xkZXJPZmZzZXQ9b2ZmczsgfQorICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZm9sZGVyT2Zmc2V0 KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Gb2xkZXJPZmZzZXQ7IH0KKyAgdm9pZCBzZXRGb2xkZXJP ZmZzZXQodW5zaWduZWQgbG9uZyBvZmZzKSB7IGlmKG1Gb2xkZXJPZmZzZXQgIT0gb2ZmcykgeyBt Rm9sZGVyT2Zmc2V0PW9mZnM7IHNldERpcnR5KFRSVUUpOyB9IH0KIAogICAvKiogR2V0L3NldCBz aXplIG9mIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSB3aG9sZSBoZWFkZXIgaW4gYnl0ZXMuICovCi0g IHVuc2lnbmVkIGxvbmcgbXNnU2l6ZSh2b2lkKSBjb25zdCB7IHJldHVybiBtTXNnU2l6ZTsgfQot ICB2b2lkIHNldE1zZ1NpemUodW5zaWduZWQgbG9uZyBzeikgeyBtTXNnU2l6ZSA9IHN6OyB9Cisg IHZpcnR1YWwgdW5zaWduZWQgbG9uZyBtc2dTaXplKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Nc2dT aXplOyB9CisgIHZvaWQgc2V0TXNnU2l6ZSh1bnNpZ25lZCBsb25nIHN6KSB7IGlmKG1Nc2dTaXpl ICE9IHN6KSB7IG1Nc2dTaXplID0gc3o7IHNldERpcnR5KFRSVUUpOyB9IH0KIAogICAvKiogU2tp cCBsZWFkaW5nIGtleXdvcmQgaWYga2V5d29yZCBoYXMgZ2l2ZW4gY2hhcmFjdGVyIGF0IGl0J3Mg ZW5kCiAgICAqIChlLmcuICc6JyBvciAnLCcpIGFuZCBza2lwIHRoZSB0aGVuIGZvbGxvd2luZyBi bGFua3MgKGlmIGFueSkgdG9vLgpAQCAtMTU4LDYgKzE1NiwxMiBAQCBwcm90ZWN0ZWQ6CiAgIHRp bWVfdCBtRGF0ZTsKICAgS01Nc2dTdGF0dXMgbVN0YXR1czsKICAgYm9vbCBtRGlydHk7CisKKyAg ICBpbnQgbU1zZ0luZGV4U2l6ZTsKKyAgICB1Y2hhciAqbU1zZ0luZGV4OworCitwcml2YXRlOgor ICAgIEtNTXNnQmFzZSggY29uc3QgS01Nc2dCYXNlICYgKTsgLy9ub3QgaW1wbGVtZW50ZWQsIGRv bid0IHVzZQogfTsKIAogdHlwZWRlZiBLTU1zZ0Jhc2UqIEtNTXNnQmFzZVB0cjsKSW5kZXg6IGtt bXNnaW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZW5ldHdvcmsva21h aWwva21tc2dpbmZvLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNApkaWZmIC1wIC11IC13 IC1yMS4yNCBrbW1zZ2luZm8uY3BwCi0tLSBrbW1zZ2luZm8uY3BwCTIwMDEvMDMvMTYgMTI6MTg6 NDUJMS4yNAorKysga21tc2dpbmZvLmNwcAkyMDAxLzA0LzE1IDE0OjIyOjA1CkBAIC00LDYgKzQs NyBAQAogI2luY2x1ZGUgImttbWVzc2FnZS5oIgogI2luY2x1ZGUgImttbXNncGFydC5oIiAvLyBm b3IgZW5jb2RlCiAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNp bmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgpAQCAtOTYsNyArOTcsNiBAQCBj b25zdCBRU3RyaW5nIEtNTXNnSW5mbzo6dG9TdHJpcCh2b2lkKSBjCiAgIHJldHVybiBtVG9TdHJp cDsKIH0KIAotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBjb25zdCBRU3RyaW5nIEtNTXNnSW5m bzo6eG1hcmsodm9pZCkgY29uc3QKIHsKQEAgLTEyMSwzNyArMTIxLDQ0IEBAIGNvbnN0IFFTdHJp bmcgS01Nc2dJbmZvOjptc2dJZE1ENSh2b2lkKSAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHZv aWQgS01Nc2dJbmZvOjpzZXRTdWJqZWN0KGNvbnN0IFFTdHJpbmcmIGFTdWJqZWN0KQogewotICBt U3ViamVjdCA9IGFTdWJqZWN0LmNvcHkoKTsKKyAgICBpZihtU3ViamVjdCAhPSBhU3ViamVjdCkg eworCW1TdWJqZWN0ID0gYVN1YmplY3Q7CiAgIG1EaXJ0eSA9IFRSVUU7CiB9Cit9CiAKIAogLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogdm9pZCBLTU1zZ0luZm86OnNldFhNYXJrKGNvbnN0IFFTdHJp bmcmIGFYTWFyaykKIHsKLSAgbVhNYXJrID0gYVhNYXJrLmNvcHkoKTsKKyAgICBpZihhWE1hcmsg IT0gbVhNYXJrKSB7CisJbVhNYXJrID0gYVhNYXJrOwogICBtRGlydHkgPSBUUlVFOwogfQorfQog CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHZvaWQgS01Nc2dJbmZvOjpzZXRSZXBseVRvSWRN RDUoY29uc3QgUVN0cmluZyYgYVJlcGx5VG9JZE1ENSkKIHsKLSAgbVJlcGx5VG9JZE1ENSA9IGFS ZXBseVRvSWRNRDUuY29weSgpOworICAgIGlmKG1SZXBseVRvSWRNRDUgIT0gYVJlcGx5VG9JZE1E NSkgeworCW1SZXBseVRvSWRNRDUgPSBhUmVwbHlUb0lkTUQ1OwogICBtRGlydHkgPSBUUlVFOwog fQorfQogCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHZvaWQgS01Nc2dJbmZvOjpzZXRNc2dJ ZE1ENShjb25zdCBRU3RyaW5nJiBhTXNnSWRNRDUpCiB7Ci0gIG1Nc2dJZE1ENSA9IGFNc2dJZE1E NS5jb3B5KCk7CisgICAgaWYobU1zZ0lkTUQ1ICE9IGFNc2dJZE1ENSkgeworCW1Nc2dJZE1ENSA9 IGFNc2dJZE1ENTsKICAgbURpcnR5ID0gVFJVRTsKIH0KLQorfQogCi0vLy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi12b2lkIEtNTXNnSW5mbzo6ZnJvbUluZGV4U3RyaW5nKGNvbnN0IFFDU3RyaW5nJiBz dHIsIGJvb2wgdG9VdGY4KQorLy8tLS0gRm9yIGNvbXBhdGFiaWxpdHkgd2l0aCBvbGQgaW5kZXgg ZmlsZXMKK3ZvaWQgS01Nc2dJbmZvOjpjb21wYXRfZnJvbU9sZEluZGV4U3RyaW5nKGNvbnN0IFFD U3RyaW5nJiBzdHIsIGJvb2wgdG9VdGY4KQogewogICBjaGFyICpzdGFydCwgKm9mZnNldDsKIApJ bmRleDoga21tc2dpbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZW5ldHdv cmsva21haWwva21tc2dpbmZvLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMKZGlmZiAtcCAt dSAtdyAtcjEuMTMga21tc2dpbmZvLmgKLS0tIGttbXNnaW5mby5oCTIwMDEvMDMvMTYgMTI6MTg6 NDUJMS4xMworKysga21tc2dpbmZvLmgJMjAwMS8wNC8xNSAxNDoyMjowNQpAQCAtMTgsNyArMTgs MTEgQEAgcHVibGljOgogICB2aXJ0dWFsIH5LTU1zZ0luZm8oKTsKIAogICAvKiogSW5pdGlhbGl6 ZSBmcm9tIGluZGV4IHN0cmluZyBhbmQgc2V0IGRpcnR5IGZsYWcgdG8gRkFMU0UuICovCi0gIHZp cnR1YWwgdm9pZCBmcm9tSW5kZXhTdHJpbmcoY29uc3QgUUNTdHJpbmcmIHN0ciwgYm9vbCB0b1V0 ZjgpOworICB2aXJ0dWFsIHZvaWQgZnJvbUluZGV4U3RyaW5nKGNvbnN0IHVjaGFyICosIHNob3J0 KTsKKworICAgIC8qIGxlZnQgZm9yIG9sZCBzdHlsZSBpbmRleCBmaWxlcyAqLworICAgIHZvaWQg Y29tcGF0X2Zyb21PbGRJbmRleFN0cmluZyhjb25zdCBRQ1N0cmluZyYgc3RyLCBib29sIHRvVXRm OCk7CisgIAogCiAgIC8qKiBJbml0aWFsaXplIHdpdGggZ2l2ZW4gdmFsdWVzIGFuZCBzZXQgZGly dHkgZmxhZyB0byBGQUxTRS4gKi8KICAgdmlydHVhbCB2b2lkIGluaXQoY29uc3QgUVN0cmluZyYg c3ViamVjdCwgY29uc3QgUVN0cmluZyYgZnJvbSwK --------------Boundary-00=_NB0WAO2CAFJHNO397195-- _______________________________________________ Kmail Developers mailing list Kmail@master.kde.org http://master.kde.org/mailman/listinfo/kmail