From kde-core-devel Sun Jun 22 13:23:43 2008 From: "Roland Harnau" Date: Sun, 22 Jun 2008 13:23:43 +0000 To: kde-core-devel Subject: [PATCH] DNS cache for Konqueror/KIO Message-Id: <476f836a0806220623k45478d59iac200bc488fbddb5 () mail ! gmail ! com> X-MARC-Message: https://marc.info/?l=kde-core-devel&m=121416471227356 MIME-Version: 1 Content-Type: multipart/mixed; boundary="------=_Part_6303_4373396.1214141023086" ------=_Part_6303_4373396.1214141023086 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello, KIO's asynchronous design and some peculiarities in Qt's network department often result in concurrent queries to resolve host names, especially if Konquerer launches its huge slave army. As witnessed by several bug reports (e.g. 162600) some kind of router can't cope with this very well. The reason (at least in my case) is not the "crappy" handling of IPv6 queries in itself. An analysis with tcpdump reveals there are in general problems with concurrent queries to resolve the same name if the requested record (AAAA or A) does not exist. A solution (or workaround, as you like it) is a local DNS cache. The core of my patch is therefore a reimplementation of Qt's asynchronous resolver QHostInfo::lookupHost in form of HostInfoAgent::lookupHost.with integrated cache and its integration into KIO. The cache lives in a central place, in the application's address space, but is used by several slaves (instances of classes derived from TCPSlaveBase) living in separate process contexts. So some IPC is necessary, and I have simply used the socket connection between the slave and its counterpart in the application's address space. Roland ------=_Part_6303_4373396.1214141023086 Content-Type: application/octet-stream; name=kdelibs-DNS-cache.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fhrnzge10 Content-Disposition: attachment; filename=kdelibs-DNS-cache.diff ZGlmZiAtLWdpdCBhL2tpby9DTWFrZUxpc3RzLnR4dCBiL2tpby9DTWFrZUxpc3RzLnR4dAppbmRl eCA4OTg0OTA3Li5jZjRhY2ZlIDEwMDY0NAotLS0gYS9raW8vQ01ha2VMaXN0cy50eHQKKysrIGIv a2lvL0NNYWtlTGlzdHMudHh0CkBAIC0xMTYsNiArMTE2LDcgQEAgc2V0KGtpb2NvcmVfU1RBVF9T UkNTCiAgIGtpby9zbGF2ZWludGVyZmFjZS5jcHAKICAga2lvL3RjcHNsYXZlYmFzZS5jcHAKICAg a2lvL3Vkc2VudHJ5LmNwcAorICBraW8vaG9zdGluZm9hZ2VudC5jcHAgICAgCiApCiAKIHF0NF9h ZGRfZGJ1c19hZGFwdG9yKGtpb2NvcmVfU1RBVF9TUkNTIGtpby9vcmcua2RlLmtpby5GaWxlVW5k b01hbmFnZXIueG1sIGZpbGV1bmRvbWFuYWdlcl9wLmggS0lPOjpGaWxlVW5kb01hbmFnZXJQcml2 YXRlIGZpbGV1bmRvbWFuYWdlcl9hZGFwdG9yIEtJT0ZpbGVVbmRvTWFuYWdlckFkYXB0b3IpCmRp ZmYgLS1naXQgYS9raW8va2lvL2dsb2JhbC5oIGIva2lvL2tpby9nbG9iYWwuaAppbmRleCBiMWZj YmM1Li40ZTVkMTBiIDEwMDY0NAotLS0gYS9raW8va2lvL2dsb2JhbC5oCisrKyBiL2tpby9raW8v Z2xvYmFsLmgKQEAgLTE3Nyw3ICsxNzcsOCBAQCBuYW1lc3BhY2UgS0lPCiAgICAgQ01EX1JFQUQg PSAnWicsIC8vIDkwCiAgICAgQ01EX1dSSVRFID0gOTEsCiAgICAgQ01EX1NFRUsgPSA5MiwKLSAg ICBDTURfQ0xPU0UgPSA5MworICAgIENNRF9DTE9TRSA9IDkzLAorICAgIENNRF9IT1NUX0lORk8g PSA5NAogICAgIC8vIEFkZCBuZXcgb25lcyBoZXJlIG9uY2UgYSByZWxlYXNlIGlzIGRvbmUsIHRv IGF2b2lkIGJyZWFraW5nIGJpbmFyeSBjb21wYXRpYmlsaXR5LgogICAgIC8vIE5vdGUgdGhhdCBw cm90b2NvbC1zcGVjaWZpYyBjb21tYW5kcyBzaG91bGRuJ3QgYmUgYWRkZWQgaGVyZSwgYnV0IHNo b3VsZCB1c2Ugc3BlY2lhbC4KICAgfTsKZGlmZiAtLWdpdCBhL2tpby9raW8vaG9zdGluZm9hZ2Vu dC5jcHAgYi9raW8va2lvL2hvc3RpbmZvYWdlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjQzNzk5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9raW8va2lvL2hvc3RpbmZv YWdlbnQuY3BwCkBAIC0wLDAgKzEsMTc3IEBACisvKgorQ29weXJpZ2h0IDIwMDggUm9sYW5kIEhh cm5hdSA8dGF1QGdteC5ldT4KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorbGF0ZXIgdmVyc2lv biBhY2NlcHRlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCitzdWNjZXNz b3IgYXBwcm92ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAor YWN0IGFzIGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBs aWNlbnNlLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyAKK0xpY2Vuc2UgYWxvbmcgd2l0 aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisqLworCisjaW5jbHVkZSAiaG9zdGluZm9hZ2VudC5oIgorCisjaW5jbHVkZSA8UXRDb3Jl L1FTdHJpbmc+CisjaW5jbHVkZSA8UXRDb3JlL1FIYXNoPgorI2luY2x1ZGUgPFF0Q29yZS9RQ2Fj aGU+CisjaW5jbHVkZSA8UXRDb3JlL1FUaW1lPgorI2luY2x1ZGUgPFF0Q29yZS9RSGFzaEl0ZXJh dG9yPgorI2luY2x1ZGUgPFF0Q29yZS9RTGlzdD4KKyNpbmNsdWRlIDxRdENvcmUvUVBhaXI+Cisj aW5jbHVkZSA8UXRDb3JlL1FGdXR1cmVXYXRjaGVyPgorI2luY2x1ZGUgPFF0Q29yZS9RdENvbmN1 cnJlbnRSdW4+CisjaW5jbHVkZSA8UXROZXR3b3JrL1FIb3N0SW5mbz4KKworI2RlZmluZSBUVEwg MzAwCisKK25hbWVzcGFjZSBLSU8gCit7CisgICAgY2xhc3MgSG9zdEluZm9BZ2VudFByaXZhdGUg OiBwdWJsaWMgUU9iamVjdCAKKyAgICB7CisgICAgICAgIFFfT0JKRUNUCisgICAgcHVibGljOgor ICAgICAgICBIb3N0SW5mb0FnZW50UHJpdmF0ZShpbnQgY2FjaGVTaXplID0gMTAwKTsKKyAgICAg ICAgdmlydHVhbCB+SG9zdEluZm9BZ2VudFByaXZhdGUoKSB7fTsKKyAgICAgICAgdm9pZCBsb29r dXBIb3N0KGNvbnN0IFFTdHJpbmcmIGhvc3ROYW1lLCBRT2JqZWN0KiByZWNlaXZlciwgY29uc3Qg Y2hhciogbWVtYmVyKTsKKyAgICBwcml2YXRlIFFfU0xPVFM6CisgICAgICAgIHZvaWQgcXVlcnlG aW5pc2hlZChjb25zdCBRSG9zdEluZm8mKTsKKyAgICBwcml2YXRlOiAgICAgICAgICAgICAgICAK KyAgICAgICAgY2xhc3MgUmVzdWx0OworICAgICAgICBjbGFzcyBRdWVyeTsKKworICAgICAgICBR SGFzaDxRU3RyaW5nLCBRdWVyeSo+IG9wZW5RdWVyaWVzOworICAgICAgICBRQ2FjaGU8UVN0cmlu ZywgUVBhaXI8UUhvc3RJbmZvLCBRVGltZT4gPiBkbnNDYWNoZTsKKyAgICB9OworCisKKyAgICBj bGFzcyBIb3N0SW5mb0FnZW50UHJpdmF0ZTo6UmVzdWx0IDogcHVibGljIFFPYmplY3QgCisgICAg eworICAgICAgICBRX09CSkVDVAorICAgIFFfU0lHTkFMUzoKKyAgICAgICAgdm9pZCByZXN1bHQo UUhvc3RJbmZvKTsgICAgICAgIAorICAgIGZyaWVuZCBjbGFzcyBIb3N0SW5mb0FnZW50UHJpdmF0 ZTsKKyAgICB9OworCisgICAgY2xhc3MgSG9zdEluZm9BZ2VudFByaXZhdGU6OlF1ZXJ5IDogcHVi bGljIFFPYmplY3QgCisgICAgeworICAgICAgICBRX09CSkVDVAorICAgIHB1YmxpYzoKKyAgICAg ICAgUXVlcnkoKTogbV93YXRjaGVyKCksIG1faG9zdE5hbWUoKSB7CisgICAgICAgICAgICBjb25u ZWN0KCZtX3dhdGNoZXIsIFNJR05BTChmaW5pc2hlZCgpKSwgdGhpcywgU0xPVChyZWxheUZpbmlz aGVkKCkgICkpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc3RhcnQoY29uc3QgUVN0cmluZyYg aG9zdE5hbWUpIHsKKyAgICAgICAgICAgIG1faG9zdE5hbWUgPSBob3N0TmFtZTsKKyAgICAgICAg ICAgIFFGdXR1cmU8UUhvc3RJbmZvPiBmdXR1cmUgPSBRdENvbmN1cnJlbnQ6OnJ1bigmUUhvc3RJ bmZvOjpmcm9tTmFtZSwgaG9zdE5hbWUpOworICAgICAgICAgICAgbV93YXRjaGVyLnNldEZ1dHVy ZShmdXR1cmUpOworICAgICAgICB9ICAgICAgIAorICAgICAgICBRU3RyaW5nIGhvc3ROYW1lKCkg Y29uc3QgeworICAgICAgICAgICAgcmV0dXJuIG1faG9zdE5hbWU7CisgICAgICAgIH0KKyAgICBR X1NJR05BTFM6CisgICAgICAgIHZvaWQgcmVzdWx0KFFIb3N0SW5mbyk7ICAgICAgICAKKyAgICBw cml2YXRlIFFfU0xPVFM6CisgICAgICAgIHZvaWQgcmVsYXlGaW5pc2hlZCgpIHsKKyAgICAgICAg ICAgIFFfRU1JVCByZXN1bHQobV93YXRjaGVyLnJlc3VsdCgpKTsKKyAgICAgICAgfSAgICAgICAg CisgICAgcHJpdmF0ZToKKyAgICAgICAgUUZ1dHVyZVdhdGNoZXI8UUhvc3RJbmZvPiBtX3dhdGNo ZXI7CisgICAgICAgIFFTdHJpbmcgbV9ob3N0TmFtZTsKKyAgICB9OworfQorCit1c2luZyBuYW1l c3BhY2UgS0lPOworCitIb3N0SW5mb0FnZW50OjpIb3N0SW5mb0FnZW50KGludCBjYWNoZVNpemUp IDogZChuZXcgSG9zdEluZm9BZ2VudFByaXZhdGUoY2FjaGVTaXplKSkge30gIAorCitIb3N0SW5m b0FnZW50Ojp+SG9zdEluZm9BZ2VudCgpIHsKKyAgICBkZWxldGUoZCk7Cit9CisKK0hvc3RJbmZv QWdlbnQqIEhvc3RJbmZvQWdlbnQ6Omluc3RhbmNlKCkgeworICAgIAorICAgIGlmIChtX2luc3Rh bmNlID09IDApeworICAgICAgICBtX2luc3RhbmNlID0gbmV3IEhvc3RJbmZvQWdlbnQoKTsKKyAg ICB9CisgICAgcmV0dXJuIG1faW5zdGFuY2U7IAorfSAgCisKK3ZvaWQgSG9zdEluZm9BZ2VudDo6 bG9va3VwSG9zdChjb25zdCBRU3RyaW5nJiBob3N0TmFtZSwgUU9iamVjdCogcmVjZWl2ZXIsIGNv bnN0IGNoYXIqIG1lbWJlcikgeworZC0+bG9va3VwSG9zdChob3N0TmFtZSwgcmVjZWl2ZXIsIG1l bWJlcik7Cit9CisKK0hvc3RJbmZvQWdlbnQqIEhvc3RJbmZvQWdlbnQ6Om1faW5zdGFuY2U7CisK K0hvc3RJbmZvQWdlbnRQcml2YXRlOjpIb3N0SW5mb0FnZW50UHJpdmF0ZShpbnQgY2FjaGVTaXpl KSA6IG9wZW5RdWVyaWVzKCksIGRuc0NhY2hlKGNhY2hlU2l6ZSkge30KKwordm9pZCBIb3N0SW5m b0FnZW50UHJpdmF0ZTo6bG9va3VwSG9zdChjb25zdCBRU3RyaW5nJiBob3N0TmFtZSwgUU9iamVj dCogcmVjZWl2ZXIsIGNvbnN0IGNoYXIqIG1lbWJlcikgeworICAgIAorICAgIGlmKGRuc0NhY2hl LmNvbnRhaW5zKGhvc3ROYW1lKSkgeworICAgICAgICBRUGFpcjxRSG9zdEluZm8sIFFUaW1lPiBp bmZvICgqZG5zQ2FjaGUub2JqZWN0KGhvc3ROYW1lKSk7CisKKyAgICAgICAgaWYgKFFUaW1lOjpj dXJyZW50VGltZSgpIDw9IGluZm8uc2Vjb25kLmFkZFNlY3MoVFRMKSkgeworICAgICAgICAgICAg UmVzdWx0IHJlc3VsdDsKKyAgICAgICAgICAgIFFPYmplY3Q6OmNvbm5lY3QoJnJlc3VsdCwgU0lH TkFMKHJlc3VsdChRSG9zdEluZm8pKSxyZWNlaXZlciwgbWVtYmVyKTsKKyAgICAgICAgICAgIFFf RU1JVCByZXN1bHQucmVzdWx0KGluZm8uZmlyc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICB9CisgICAgICAgIGRuc0NhY2hlLnJlbW92ZShob3N0TmFtZSk7CisgICAgfQorICAgICAg ICAKKyAgICBpZiAob3BlblF1ZXJpZXMuY29udGFpbnMoaG9zdE5hbWUpKXsKKyAgICAgICAgUXVl cnkqIHF1ZXJ5ID0gb3BlblF1ZXJpZXMudmFsdWUoaG9zdE5hbWUpOworICAgICAgICBjb25uZWN0 KHF1ZXJ5LCBTSUdOQUwocmVzdWx0KFFIb3N0SW5mbykpLCByZWNlaXZlciwgbWVtYmVyKTsKKyAg ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBRdWVyeSogcXVlcnkgPSBuZXcgUXVlcnko KTsKKyAgICBvcGVuUXVlcmllcy5pbnNlcnQoaG9zdE5hbWUsIHF1ZXJ5KTsKKyAgICBjb25uZWN0 KHF1ZXJ5LCBTSUdOQUwocmVzdWx0KFFIb3N0SW5mbykpLCB0aGlzLCBTTE9UKHF1ZXJ5RmluaXNo ZWQoUUhvc3RJbmZvKSkpOworICAgIGNvbm5lY3QocXVlcnksIFNJR05BTChyZXN1bHQoUUhvc3RJ bmZvKSksIHJlY2VpdmVyLCBtZW1iZXIpOworICAgIHF1ZXJ5LT5zdGFydChob3N0TmFtZSk7Cit9 CisKK3ZvaWQgSG9zdEluZm9BZ2VudFByaXZhdGU6OnF1ZXJ5RmluaXNoZWQoY29uc3QgUUhvc3RJ bmZvJiBpbmZvKSB7CisKKyAgICBRdWVyeSogcXVlcnkgPSBzdGF0aWNfY2FzdDxRdWVyeSogPihz ZW5kZXIoKSk7CisgICAgCisgICAgb3BlblF1ZXJpZXMucmVtb3ZlKHF1ZXJ5LT5ob3N0TmFtZSgp KTsKKyAgICBpZiAoIWluZm8uYWRkcmVzc2VzKCkuaXNFbXB0eSgpKQorICAgICAgICBkbnNDYWNo ZS5pbnNlcnQocXVlcnktPmhvc3ROYW1lKCksIAorICAgICAgICAgICAgbmV3IFFQYWlyPFFIb3N0 SW5mbywgUVRpbWU+KGluZm8sIFFUaW1lOjpjdXJyZW50VGltZSgpKSk7CisgICAgIAorICAgIHF1 ZXJ5LT5kZWxldGVMYXRlcigpOworfQorCitRRGF0YVN0cmVhbSYgb3BlcmF0b3I8PChRRGF0YVN0 cmVhbSYgb3V0LCBjb25zdCBRSG9zdEluZm8mIGluZm8pIHsKKworICAgIG91dCA8PCBpbmZvLmhv c3ROYW1lKCkgPDwgaW5mby5hZGRyZXNzZXMoKSA8PCBpbmZvLmVycm9yKCkgPDwgaW5mby5lcnJv clN0cmluZygpOworICAgIHJldHVybiBvdXQ7Cit9CisKK1FEYXRhU3RyZWFtJiBvcGVyYXRvcj4+ KFFEYXRhU3RyZWFtJiBpbiwgUUhvc3RJbmZvJiBpbmZvKSB7CisgICAgCisgICAgUVN0cmluZyBo b3N0TmFtZTsKKyAgICBRTGlzdDxRSG9zdEFkZHJlc3M+IGFkZHJlc3NlczsKKyAgICBpbnQgZXJy b3I7CisgICAgUVN0cmluZyBlcnJvclN0cmluZzsKKyAgICAKKyAgICBpbiA+PiBob3N0TmFtZSA+ PiBhZGRyZXNzZXMgPj4gZXJyb3IgPj4gZXJyb3JTdHJpbmc7CisgICAgICAgIAorICAgIGluZm8u c2V0SG9zdE5hbWUoaG9zdE5hbWUpOworICAgIGluZm8uc2V0QWRkcmVzc2VzKGFkZHJlc3Nlcyk7 CisgICAgaW5mby5zZXRFcnJvcihRSG9zdEluZm86Okhvc3RJbmZvRXJyb3IoZXJyb3IpKTsKKyAg ICBpbmZvLnNldEVycm9yU3RyaW5nKGVycm9yU3RyaW5nKTsKKyAgICAKKyAgICByZXR1cm4gaW47 Cit9ICAgICAKKworI2luY2x1ZGUgImhvc3RpbmZvYWdlbnQubW9jIgpkaWZmIC0tZ2l0IGEva2lv L2tpby9ob3N0aW5mb2FnZW50LmggYi9raW8va2lvL2hvc3RpbmZvYWdlbnQuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzc4OTA3Ci0tLSAvZGV2L251bGwKKysrIGIva2lv L2tpby9ob3N0aW5mb2FnZW50LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKK0NvcHlyaWdodCAyMDA4 ICBSb2xhbmQgSGFybmF1IDx0YXVAZ214LmV1PiAgIAorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55 CitsYXRlciB2ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChv ciBpdHMKK3N1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiks IHdoaWNoIHNoYWxsCithY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJz aW9uIDMgb2YgdGhlIGxpY2Vuc2UuCisKK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIAorTGlj ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpZm5kZWYgSE9TVElORk9fSF8KKyNkZWZpbmUgSE9T VElORk9fSF8KKworI2luY2x1ZGUgPFF0Q29yZS9RU3RyaW5nPgorI2luY2x1ZGUgPFF0Q29yZS9R RGF0YVN0cmVhbT4KKyNpbmNsdWRlIDxRdE5ldHdvcmsvUUhvc3RJbmZvPgorCituYW1lc3BhY2Ug S0lPIAoreworICAgIGNsYXNzIEhvc3RJbmZvQWdlbnRQcml2YXRlOworICAgIAorICAgIGNsYXNz ICBIb3N0SW5mb0FnZW50IAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBIb3N0 SW5mb0FnZW50KiBpbnN0YW5jZSgpOworICAgICAgICB2b2lkIGxvb2t1cEhvc3QoY29uc3QgUVN0 cmluZyYgaG9zdE5hbWUsIFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBjaGFyKiBtZW1iZXIpOwor ICAgIHByaXZhdGU6CisgICAgICAgIEhvc3RJbmZvQWdlbnQoaW50IGNhY2hlU2l6ZSA9IDEwMCk7 CisgICAgICAgIH5Ib3N0SW5mb0FnZW50KCk7CisgICAgICAgIHN0YXRpYyBIb3N0SW5mb0FnZW50 KiBtX2luc3RhbmNlOworCisgICAgICAgIEhvc3RJbmZvQWdlbnRQcml2YXRlKiBkOworICAgIH07 Cit9CisKK1FEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KFFEYXRhU3RyZWFtJiBvdXQsIGNvbnN0IFFI b3N0SW5mbyYgaW5mbyk7CitRRGF0YVN0cmVhbSYgb3BlcmF0b3I+PihRRGF0YVN0cmVhbSYgaW4s IFFIb3N0SW5mbyYgaW5mbyk7CisgICAgCisjZW5kaWYKZGlmZiAtLWdpdCBhL2tpby9raW8vc2xh dmViYXNlLmNwcCBiL2tpby9raW8vc2xhdmViYXNlLmNwcAppbmRleCA5NDg1ZGExLi5kOWJjNWU3 IDEwMDY0NAotLS0gYS9raW8va2lvL3NsYXZlYmFzZS5jcHAKKysrIGIva2lvL2tpby9zbGF2ZWJh c2UuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAgKiovCiAKICNpbmNsdWRlICJzbGF2ZWJhc2UuaCIK KyNpbmNsdWRlICJob3N0aW5mb2FnZW50LmgiCiAKICNpbmNsdWRlIDxjb25maWcuaD4KIApAQCAt MTMzMCwzICsxMzMxLDI1IEBAIHZvaWQgU2xhdmVCYXNlOjpzZW5kKGludCBjbWQsIGNvbnN0IFFC eXRlQXJyYXkmIGFyciApCiAKIHZvaWQgU2xhdmVCYXNlOjp2aXJ0dWFsX2hvb2soIGludCwgdm9p ZCogKQogeyAvKkJBU0U6OnZpcnR1YWxfaG9vayggaWQsIGRhdGEgKTsqLyB9CisKK3ZvaWQgU2xh dmVCYXNlOjpsb29rdXBIb3N0KGNvbnN0IFFTdHJpbmcmIGhvc3QpCit7CisgICAgS0lPX0RBVEEg PDwgaG9zdDsKKyAgICBzZW5kKE1TR19IT1NUX0lORk9fUkVRLCBkYXRhKTsKK30gCisKK2ludCBT bGF2ZUJhc2U6OndhaXRGb3JIb3N0SW5mbyhRSG9zdEluZm8mIGluZm8pCit7CisgICAgUUJ5dGVB cnJheSBkYXRhOworICAgIGludCByZXN1bHQgPSB3YWl0Rm9yQW5zd2VyKENNRF9IT1NUX0lORk8s IDAsIGRhdGEpOworICAgIAorICAgIGlmIChyZXN1bHQgID09IC0xKXsKKyAgICAgICAgaW5mby5z ZXRFcnJvcihRSG9zdEluZm86OlVua25vd25FcnJvcik7CisgICAgICAgIGluZm8uc2V0RXJyb3JT dHJpbmcoIlVua25vd24gRXJyb3IuIik7CisgICAgICAgIHJldHVybiByZXN1bHQ7ICAgIAorICAg IH0KKworICAgIFFEYXRhU3RyZWFtIHN0cmVhbShkYXRhKTsKKyAgICBzdHJlYW0gPj4gaW5mbzsK KyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEva2lvL2tpby9zbGF2ZWJhc2UuaCBi L2tpby9raW8vc2xhdmViYXNlLmgKaW5kZXggN2Q4N2U5NS4uNDEyMzg5ZSAxMDA2NDQKLS0tIGEv a2lvL2tpby9zbGF2ZWJhc2UuaAorKysgYi9raW8va2lvL3NsYXZlYmFzZS5oCkBAIC0yNyw2ICsy Nyw3IEBACiAjaW5jbHVkZSA8a2xvY2FsZS5oPgogCiAjaW5jbHVkZSA8UXRDb3JlL1FCeXRlQXJy YXk+CisjaW5jbHVkZSA8UXROZXR3b3JrL1FIb3N0SW5mbz4KIAogY2xhc3MgS0NvbmZpZ0dyb3Vw OwogY2xhc3MgS1JlbW90ZUVuY29kaW5nOwpAQCAtNzc0LDYgKzc3NSwxNiBAQCBwdWJsaWM6CiAg ICAgICovCiAgICAgdm9pZCBzZXRLaWxsRmxhZygpOwogCisgICAgLyoqIEludGVybmFsbHkgdXNl ZAorICAgICAgKiBAaW50ZXJuYWwKKyAgICAqLworICAgIHZvaWQgbG9va3VwSG9zdChjb25zdCBR U3RyaW5nJiBob3N0KTsKKworICAgIC8qKiBJbnRlcm5hbGx5IHVzZWQKKyAgICAgICogQGludGVy bmFsCisgICAgKi8KKyAgICBpbnQgd2FpdEZvckhvc3RJbmZvKFFIb3N0SW5mbyYgaW5mbyk7CisK IHByb3RlY3RlZDoKICAgICAvKioKICAgICAgKiBOYW1lIG9mIHRoZSBwcm90b2NvbCBzdXBwb3J0 ZWQgYnkgdGhpcyBzbGF2ZQpkaWZmIC0tZ2l0IGEva2lvL2tpby9zbGF2ZWludGVyZmFjZS5jcHAg Yi9raW8va2lvL3NsYXZlaW50ZXJmYWNlLmNwcAppbmRleCA4ZTQxZWE3Li5iZGI4MjZkIDEwMDY0 NAotLS0gYS9raW8va2lvL3NsYXZlaW50ZXJmYWNlLmNwcAorKysgYi9raW8va2lvL3NsYXZlaW50 ZXJmYWNlLmNwcApAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSAic2xhdmViYXNlLmgiCiAj aW5jbHVkZSAiY29ubmVjdGlvbi5oIgorI2luY2x1ZGUgImhvc3RpbmZvYWdlbnQuaCIKICNpbmNs dWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGtkZWJ1Zy5oPgpA QCAtMzM2LDcgKzMzNywxMyBAQCBib29sIFNsYXZlSW50ZXJmYWNlOjpkaXNwYXRjaCggaW50IF9j bWQsIGNvbnN0IFFCeXRlQXJyYXkgJnJhd2RhdGEgKQogICAgICAgICBlbWl0IG5lZWRTdWJVcmxE YXRhKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBkZWZhdWx0OgorICAgIGNhc2UgTVNH X0hPU1RfSU5GT19SRVE6IHsKKyAgICAgICAgUVN0cmluZyBob3N0TmFtZTsKKyAgICAgICAgc3Ry ZWFtID4+IGhvc3ROYW1lOworICAgICAgICBIb3N0SW5mb0FnZW50OjppbnN0YW5jZSgpLT5sb29r dXBIb3N0KGhvc3ROYW1lLCB0aGlzLCBTTE9UKHNldEhvc3RJbmZvKFFIb3N0SW5mbykpKTsKKyAg ICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6IAogICAgICAgICBrV2FybmluZyg3MDA3 KSA8PCAiU2xhdmUgc2VuZHMgdW5rbm93biBjb21tYW5kICgiIDw8IF9jbWQgPDwgIiksIGRyb3Bw aW5nIHNsYXZlIjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQ5Niw0ICs1MDMs MTMgQEAgaW50IFNsYXZlSW50ZXJmYWNlUHJpdmF0ZTo6bWVzc2FnZUJveChpbnQgdHlwZSwgY29u c3QgUVN0cmluZyAmdGV4dCwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIFNsYXZlSW50 ZXJmYWNlOjpzZXRIb3N0SW5mbyhjb25zdCBRSG9zdEluZm8mIGluZm8pCit7CisgICAgUV9EKFNs YXZlSW50ZXJmYWNlKTsKKyAgICBRQnl0ZUFycmF5IGRhdGE7CisgICAgUURhdGFTdHJlYW0gc3Ry ZWFtKCZkYXRhLCBRSU9EZXZpY2U6OldyaXRlT25seSk7CisgICAgc3RyZWFtIDw8IGluZm87ICAK KyAgICBkLT5jb25uZWN0aW9uLT5zZW5kKENNRF9IT1NUX0lORk8sIGRhdGEpOyAKK30KKwogI2lu Y2x1ZGUgInNsYXZlaW50ZXJmYWNlLm1vYyIKZGlmZiAtLWdpdCBhL2tpby9raW8vc2xhdmVpbnRl cmZhY2UuaCBiL2tpby9raW8vc2xhdmVpbnRlcmZhY2UuaAppbmRleCBkMTdjNWMyLi44OGNlMmU1 IDEwMDY0NAotLS0gYS9raW8va2lvL3NsYXZlaW50ZXJmYWNlLmgKKysrIGIva2lvL2tpby9zbGF2 ZWludGVyZmFjZS5oCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAK ICNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KKyNpbmNsdWRlIDxRdE5ldHdvcmsvUUhvc3RJbmZv PgogCiAjaW5jbHVkZSA8a2lvL2dsb2JhbC5oPgogI2luY2x1ZGUgPGtpby91ZHNlbnRyeS5oPgpA QCAtODIsNyArODMsOCBAQCBjbGFzcyBTbGF2ZUludGVyZmFjZVByaXZhdGU7CiAgICBNU0dfQVVU SF9LRVksIC8vIDExNSAvLyBkZXByZWNhdGVkLgogICAgTVNHX0RFTF9BVVRIX0tFWSwgLy8gZGVw cmVjYXRlZC4KICAgIE1TR19PUEVORUQsCi0gICBNU0dfV1JJVFRFTgorICAgTVNHX1dSSVRURU4s CisgICBNU0dfSE9TVF9JTkZPX1JFUSAgICAgICAgCiAgICAvLyBhZGQgbmV3IG9uZXMgaGVyZSBv bmNlIGEgcmVsZWFzZSBpcyBkb25lLCB0byBhdm9pZCBicmVha2luZyBiaW5hcnkgY29tcGF0aWJp bGl0eQogIH07CiAKQEAgLTE2OCwxMSArMTcwLDEyIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGRy b3BOZXR3b3JrKCBjb25zdCBRU3RyaW5nICYsIGNvbnN0IFFTdHJpbmcgJik7CiAKIHByb3RlY3Rl ZCBRX1NMT1RTOgotICAgIHZvaWQgY2FsY1NwZWVkKCk7Ci0KKyAgICB2b2lkIGNhbGNTcGVlZCgp OyAgCiBwcm90ZWN0ZWQ6CiAgICAgU2xhdmVJbnRlcmZhY2VQcml2YXRlKiBjb25zdCBkX3B0cjsK ICAgICBRX0RFQ0xBUkVfUFJJVkFURShTbGF2ZUludGVyZmFjZSkKK3ByaXZhdGUgUV9TTE9UUzoK KyAgICB2b2lkIHNldEhvc3RJbmZvKGNvbnN0IFFIb3N0SW5mbyYgaW5mbyk7CiB9OwogCiB9CmRp ZmYgLS1naXQgYS9raW8va2lvL3RjcHNsYXZlYmFzZS5jcHAgYi9raW8va2lvL3RjcHNsYXZlYmFz ZS5jcHAKaW5kZXggZTI4MWNhZS4uOWY2OWQ2ZCAxMDA2NDQKLS0tIGEva2lvL2tpby90Y3BzbGF2 ZWJhc2UuY3BwCisrKyBiL2tpby9raW8vdGNwc2xhdmViYXNlLmNwcApAQCAtMiw3ICsyLDggQEAK ICAqIENvcHlyaWdodCAoQykgMjAwMCBBbGV4IFplcGVkYSA8emlwemlwcHlAc29uaWMubmV0CiAg KiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3Jn PgogICogQ29weXJpZ2h0IChDKSAyMDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+ Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOCBBbmRyZWFzIEhhcnRtZXR6IDxhaGFydG1ldHpA Z21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3LDIwMDggQW5kcmVhcyBIYXJ0bWV0eiA8 YWhhcnRtZXR6QGdtYWlsLmNvbT4gCisgKiBDb3B5UmlnaHQgKEMpIDIwMDggUm9sYW5kIEhhcm5h dSA8dGF1QGdteC5ldT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2pl Y3QKICAqCkBAIC0yNzgsMjkgKzI3OSwzNiBAQCBib29sIFRDUFNsYXZlQmFzZTo6Y29ubmVjdFRv SG9zdChjb25zdCBRU3RyaW5nICYvKnByb3RvY29sKi8sCiAgICAgICAgIGQtPmhvc3QgPSBob3N0 OwogCiAgICAgICAgIC8vRklYTUUhIEtUY3BTb2NrZXQgZG9lc24ndCBrbm93IG9yIGNhcmUgYWJv dXQgcHJvdG9jb2wgcG9ydHMhIEZpeCBpdCB0aGVyZSwgdGhlbiB1c2UgaXQgaGVyZS4KKyAgICAg ICAgCisgICAgICAgIFFIb3N0QWRkcmVzcyBhZGRyZXNzOworICAgICAgICBRTGlzdDxRSG9zdEFk ZHJlc3M+IGFkZHJlc3NlczsKIAotICAgICAgICBrRGVidWcoNzAyOSkgPDwgImJlZm9yZSBjb25u ZWN0VG9Ib3N0OiBTb2NrZXQgZXJyb3IgaXMiCi0gICAgICAgICAgICAgICAgICAgIDw8IGQtPnNv Y2tldC5lcnJvcigpIDw8ICIsIFNvY2tldCBzdGF0ZSBpcyIgPDwgZC0+c29ja2V0LnN0YXRlKCk7 Ci0gICAgICAgIGQtPnNvY2tldC5jb25uZWN0VG9Ib3N0KGhvc3QsIHBvcnQpOwotICAgICAgICBr RGVidWcoNzAyOSkgPDwgImFmdGVyIGNvbm5lY3RUb0hvc3Q6IFNvY2tldCBlcnJvciBpcyIKLSAg ICAgICAgICAgICAgICAgICAgPDwgZC0+c29ja2V0LmVycm9yKCkgPDwgIiwgU29ja2V0IHN0YXRl IGlzIiA8PCBkLT5zb2NrZXQuc3RhdGUoKTsKLQotICAgICAgICBib29sIGNvbm5lY3RPayA9IGQt PnNvY2tldC53YWl0Rm9yQ29ubmVjdGVkKGQtPnRpbWVvdXQgPiAtMSA/IGQtPnRpbWVvdXQgKiAx MDAwIDogLTEpOwotICAgICAgICBrRGVidWcoNzAyOSkgPDwgImFmdGVyIHdhaXRGb3JDb25uZWN0 ZWQ6IFNvY2tldCBlcnJvciBpcyIKLSAgICAgICAgICAgICAgICAgICAgPDwgZC0+c29ja2V0LmVy cm9yKCkgPDwgIiwgU29ja2V0IHN0YXRlIGlzIiA8PCBkLT5zb2NrZXQuc3RhdGUoKQotICAgICAg ICAgICAgICAgICAgICA8PCAiLCB3YWl0Rm9yQ29ubmVjdGVkIHJldHVybmVkICIgPDwgY29ubmVj dE9rOworICAgICAgICBpZiAoYWRkcmVzcy5zZXRBZGRyZXNzKGhvc3QpKXsKKyAgICAgICAgICAg IGFkZHJlc3Nlcy5hcHBlbmQoYWRkcmVzcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBRSG9zdEluZm8gaW5mbzsKKyAgICAgICAgICAgIGxvb2t1cEhvc3QoaG9zdCk7CisgICAgICAg ICAgICB3YWl0Rm9ySG9zdEluZm8oaW5mbyk7CisgICAgICAgICAgICBpZiAoaW5mby5lcnJvcigp ICE9IFFIb3N0SW5mbzo6Tm9FcnJvcil7CisgICAgICAgICAgICAgICAgZXJyb3IoRVJSX1VOS05P V05fSE9TVCwgaW5mby5lcnJvclN0cmluZygpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRyZXNzZXMgPSBpbmZvLmFkZHJlc3Nl cygpOworICAgICAgICB9CisgICAgICAgCisgICAgICAgIFFMaXN0SXRlcmF0b3I8UUhvc3RBZGRy ZXNzPiBpdChhZGRyZXNzZXMpOworICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKXsKKyAgICAg ICAgICAgIGQtPnNvY2tldC5jb25uZWN0VG9Ib3N0KGl0Lm5leHQoKSwgcG9ydCk7CisgICAgICAg ICAgICBib29sIGNvbm5lY3RPayA9IGQtPnNvY2tldC53YWl0Rm9yQ29ubmVjdGVkKGQtPnRpbWVv dXQgPiAtMSA/IGQtPnRpbWVvdXQgKiAxMDAwIDogLTEpOworICAgICAgICAgICAgaWYgKGNvbm5l Y3RPaykgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoZC0+c29ja2V0LnN0YXRlKCkg IT0gS1RjcFNvY2tldDo6Q29ubmVjdGVkU3RhdGUpIHsKLSAgICAgICAgICAgIGlmIChkLT5zb2Nr ZXQuZXJyb3IoKSA9PSBLVGNwU29ja2V0OjpIb3N0Tm90Rm91bmRFcnJvcikgewotICAgICAgICAg ICAgICAgIGVycm9yKEVSUl9VTktOT1dOX0hPU1QsCisgICAgICAgICAgICBlcnJvcihFUlJfQ09V TERfTk9UX0NPTk5FQ1QsCiAgICAgICAgICAgICAgICAgICAgICAgaG9zdCArIFFMYXRpbjFTdHJp bmcoIjogIikgKyBkLT5zb2NrZXQuZXJyb3JTdHJpbmcoKSk7Ci0gICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgIGVycm9yKEVSUl9DT1VMRF9OT1RfQ09OTkVDVCwKLSAgICAgICAg ICAgICAgICAgICAgICBob3N0ICsgUUxhdGluMVN0cmluZygiOiAiKSArIGQtPnNvY2tldC5lcnJv clN0cmluZygpKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg ICAgICAgfQotCisgICAgIAogICAgICAgICAvLyMjIyBjaGVjayBmb3IgcHJveHlBdXRoZW50aWNh dGlvblJlcXVpcmVkRXJyb3IKIAogICAgICAgICBkLT5pcCA9IGQtPnNvY2tldC5wZWVyQWRkcmVz cygpLnRvU3RyaW5nKCk7Cg== ------=_Part_6303_4373396.1214141023086--