New abiword exporter
Jean Bréfort <[email protected]> Sun, 01 Mar 2015 16:22:07 +0100
| Newsgroups | gmane.editors.abiword.devel |
|---|---|
| Message-ID | <[email protected]> |
--=-hSnJGdFQ9nC6oOqTVXOP Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Hi, I tried to rewrite the abiword exporter using GsfXMLOut so that we don't directly write xml code directly there. See attached diff file. Changes for the .h file are trivial and the new IE_Exp_XML class does the dirty job. This still needs testing. Joining new and modified files (except Makefile.am I probably should investigate to rewrite .odt and .docx export too so that we can avoid bugs like #13707, but this is another story. I also intend to test using GsfXMLIn for loading, by the way. Cheers, Jean --=-hSnJGdFQ9nC6oOqTVXOP Content-Disposition: attachment; filename="ie_exp_Abiword_1.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="ie_exp_Abiword_1.patch"; charset="UTF-8" SW5kZXg6IHNyYy93cC9pbXBleHAveHAvTWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3JjL3dw L2ltcGV4cC94cC9NYWtlZmlsZS5hbQkocsOpdmlzaW9uIDM1MDcyKQorKysgc3JjL3dwL2ltcGV4 cC94cC9NYWtlZmlsZS5hbQkoY29waWUgZGUgdHJhdmFpbCkKQEAgLTM2LDYgKzM2LDggQEAKIAlp ZV9leHBfUlRGX2xpc3RlbmVyV3JpdGVEb2MuaCBcCiAJaWVfZXhwX1RleHQuY3BwIFwKIAlpZV9l eHBfVGV4dC5oIFwKKwlpZV9leHBfWE1MLmNwcCBcCisJaWVfZXhwX1hNTC5oIFwKIAlpZV9GaWxl SW5mby5jcHAgXAogCWllX0ZpbGVJbmZvLmggXAogCWllX2ltcF9BYmlXb3JkXzEuY3BwIFwKSW5k ZXg6IHNyYy93cC9pbXBleHAveHAvaWVfZXhwX0FiaVdvcmRfMS5jcHAKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g c3JjL3dwL2ltcGV4cC94cC9pZV9leHBfQWJpV29yZF8xLmNwcAkocsOpdmlzaW9uIDM1MDcyKQor Kysgc3JjL3dwL2ltcGV4cC94cC9pZV9leHBfQWJpV29yZF8xLmNwcAkoY29waWUgZGUgdHJhdmFp bCkKQEAgLTMyLDEwICszMiw2IEBACiAjaW5jbHVkZSAidXRfc3RyaW5nX2NsYXNzLmgiCiAjaW5j bHVkZSAidXRfdXVpZC5oIgogCi0jaWZkZWYgRU5BQkxFX1JFU09VUkNFX01BTkFHRVIKLSNpbmNs dWRlICJ4YXBfUmVzb3VyY2VNYW5hZ2VyLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgInhhcF9BcHAu aCIKIAogI2luY2x1ZGUgInB0X1R5cGVzLmgiCkBAIC0xMTQsNyArMTEwLDcgQEAKIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KIAogSUVfRXhwX0FiaVdvcmRfMTo6SUVfRXhwX0FiaVdvcmRfMShQRF9Eb2N1bWVudCAqIHBE b2N1bWVudCwgYm9vbCBpc1RlbXBsYXRlLCBib29sIGlzQ29tcHJlc3NlZCkKLQk6IElFX0V4cChw RG9jdW1lbnQpLCBtX2JJc1RlbXBsYXRlKGlzVGVtcGxhdGUpLCBtX2JJc0NvbXByZXNzZWQoaXND b21wcmVzc2VkKSwgbV9wTGlzdGVuZXIoMCksIG1fb3V0cHV0KDApCisJOiBJRV9FeHBfWE1MKHBE b2N1bWVudCksIG1fYklzVGVtcGxhdGUoaXNUZW1wbGF0ZSksIG1fYklzQ29tcHJlc3NlZChpc0Nv bXByZXNzZWQpLCBtX3BMaXN0ZW5lcigwKQogewogCW1fZXJyb3IgPSAwOwogCkBAIC0xMzEsNTcg KzEyNywxMCBAQAogewogfQogCi1VVF91aW50MzIgSUVfRXhwX0FiaVdvcmRfMTo6X3dyaXRlQnl0 ZXMoY29uc3QgVVRfQnl0ZSAqIHBCeXRlcywgVVRfdWludDMyIGxlbmd0aCkKLXsKLQlpZighcEJ5 dGVzIHx8ICFsZW5ndGgpCi0JICByZXR1cm4gMDsKLQotCWlmIChtX291dHB1dCkKLQkJewotCQkJ Z3NmX291dHB1dF93cml0ZShtX291dHB1dCwgbGVuZ3RoLCBwQnl0ZXMpOwotCQkJcmV0dXJuIGxl bmd0aDsKLQkJfQotCWVsc2UKLQkJewotCQkJcmV0dXJuIElFX0V4cDo6X3dyaXRlQnl0ZXMocEJ5 dGVzLCBsZW5ndGgpOwotCQl9Ci19Ci0KLXZvaWQgSUVfRXhwX0FiaVdvcmRfMTo6X3NldHVwRmls ZSgpCi17Ci0JLy8gYWxsb3cgcGVvcGxlIHRvIG92ZXJyaWRlIHRoaXMgb24gdGhlIGNvbW1hbmQg bGluZSBvciBvdGhlcndpc2UKLQljb25zdCBzdGQ6OnN0cmluZyAmIHByb3AgPSAoZ2V0UHJvcGVy dHkgKCJjb21wcmVzcyIpKTsKLQlpZiAoIXByb3AuZW1wdHkoKSkKLQkJbV9iSXNDb21wcmVzc2Vk ID0gVVRfcGFyc2VCb29sKHByb3AuY19zdHIgKCksIG1fYklzQ29tcHJlc3NlZCk7Ci0JCi0JaWYg KG1fYklzQ29tcHJlc3NlZCkKLQl7Ci0JCUdzZk91dHB1dCAqIGd6aXAgPSBnc2Zfb3V0cHV0X2d6 aXBfbmV3KGdldEZwICgpLCBOVUxMKTsKLQkJbV9vdXRwdXQgPSBnemlwOwotCX0KLQllbHNlCi0J ewotCQltX291dHB1dCA9IDA7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBjbG9zZV9nc2ZfaGFuZGxl KEdzZk91dHB1dCAqIG91dHB1dCkKLXsKLQlpZiAob3V0cHV0KQotCQl7Ci0JCQlnc2Zfb3V0cHV0 X2Nsb3NlIChvdXRwdXQpOwotCQkJZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChvdXRwdXQpKTsK LQkJfQotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBFTkFCTEVfUkVTT1VS Q0VfTUFOQUdFUgotY2xhc3MgQUJJX0VYUE9SVCBzX0FiaVdvcmRfMV9MaXN0ZW5lciA6IHB1Ymxp YyBQTF9MaXN0ZW5lciwgWEFQX1Jlc291cmNlTWFuYWdlcjo6V3JpdGVyCi0jZWxzZQogY2xhc3Mg QUJJX0VYUE9SVCBzX0FiaVdvcmRfMV9MaXN0ZW5lciA6IHB1YmxpYyBQTF9MaXN0ZW5lcgotI2Vu ZGlmCiB7CiBwdWJsaWM6CiAJc19BYmlXb3JkXzFfTGlzdGVuZXIoUERfRG9jdW1lbnQgKiBwRG9j dW1lbnQsCkBAIC0yMjcsMTggKzE3NiwxNyBAQAogICAgIHZvaWQgICAgICAgICAgICAgICAgX2Ns b3NlUkRGQW5jaG9yKHZvaWQpOwogCXZvaWQJCQkJX2Nsb3NlVGFnKHZvaWQpOwogCXZvaWQJCQkJ X29wZW5TcGFuKFBUX0F0dHJQcm9wSW5kZXggYXBpU3Bhbik7Ci0Jdm9pZAkJCQlfb3BlblRhZyhj b25zdCBjaGFyICogc3pQcmVmaXgsIGNvbnN0IGNoYXIgKiBzelN1ZmZpeCwKLQkJCQkJCQkJIGJv b2wgYk5ld0xpbmVBZnRlciwgUFRfQXR0clByb3BJbmRleCBhcGksCi0JCQkJCQkJCSBVVF91aW50 MzIgaVhJRCwKKwl2b2lkCQkJCV9vcGVuVGFnKGNvbnN0IGNoYXIgKiBzelByZWZpeCwgYm9vbCBi SGFzQ29udGVudCwKKwkJCQkJCQkJIFBUX0F0dHJQcm9wSW5kZXggYXBpLCBVVF91aW50MzIgaVhJ RCwKIAkJCQkJCQkJIGJvb2wgYklnbm9yZVByb3BlcnRpZXMgPSBmYWxzZSk7Ci0Jdm9pZAkJCQlf b3V0cHV0RGF0YShjb25zdCBVVF9VQ1NDaGFyICogcCwgVVRfdWludDMyIGxlbmd0aCk7Ci0Jdm9p ZAkJCQlfb3V0cHV0WE1MQ2hhcihjb25zdCBnY2hhciAqIGRhdGEsIFVUX3VpbnQzMiBsZW5ndGgp OwotCXZvaWQgICAgICAgICAgICAgICAgX291dHB1dFhNTENoYXIoY29uc3Qgc3RkOjpzdHJpbmcg JiBzKQorCS8vdm9pZAkJCQlfb3V0cHV0RGF0YShjb25zdCBVVF9VQ1NDaGFyICogcCwgVVRfdWlu dDMyIGxlbmd0aCk7CisJLy92b2lkCQkJCV9vdXRwdXRYTUxDaGFyKGNvbnN0IGdjaGFyICogZGF0 YSwgVVRfdWludDMyIGxlbmd0aCk7CisJLyp2b2lkICAgICAgICAgICAgICAgIF9vdXRwdXRYTUxD aGFyKGNvbnN0IHN0ZDo6c3RyaW5nICYgcykKIAl7CiAJCV9vdXRwdXRYTUxDaGFyKHMuY19zdHIo KSwgcy5zaXplKCkpOwotCX0KLQl2b2lkCQkJCV9vdXRwdXRYTUxBdHRyaWJ1dGUoY29uc3QgZ2No YXIgKiBrZXksIGNvbnN0IGdjaGFyICogdmFsdWUsIFVUX3VpbnQzMiBsZW5ndGgpOwotCXZvaWQJ CQkJX291dHB1dFhNTEF0dHJpYnV0ZShjb25zdCBnY2hhciAqIGtleSwgY29uc3Qgc3RkOjpzdHJp bmcmIHZhbHVlICk7CisJfSovCisJLy92b2lkCQkJCV9vdXRwdXRYTUxBdHRyaWJ1dGUoY29uc3Qg Z2NoYXIgKiBrZXksIGNvbnN0IGdjaGFyICogdmFsdWUsIFVUX3VpbnQzMiBsZW5ndGgpOworCS8v dm9pZAkJCQlfb3V0cHV0WE1MQXR0cmlidXRlKGNvbnN0IGdjaGFyICoga2V5LCBjb25zdCBzdGQ6 OnN0cmluZyYgdmFsdWUgKTsKIAl2b2lkCQkJCV9oYW5kbGVTdHlsZXModm9pZCk7CiAJdm9pZAkJ CQlfaGFuZGxlTGlzdHModm9pZCk7CiAJdm9pZAkJCQlfaGFuZGxlUGFnZVNpemUodm9pZCk7CkBA IC0yNzgsNyArMjI2LDcgQEAKIAlpZiAoIW1fYkluU2VjdGlvbikKIAkJcmV0dXJuOwogCi0JbV9w aWUtPndyaXRlKCI8L3NlY3Rpb24+XG4iKTsKKwltX3BpZS0+ZW5kRWxlbWVudCgpOwogCW1fYklu U2VjdGlvbiA9IGZhbHNlOwogCXJldHVybjsKIH0KQEAgLTI4OSw3ICsyMzcsNyBAQAogCWlmICht X2lJblRhYmxlID09IDApCiAJCXJldHVybjsKIAotCW1fcGllLT53cml0ZSgiPC90YWJsZT5cbiIp OworCW1fcGllLT5lbmRFbGVtZW50KCk7CiAJbV9pSW5UYWJsZS0tOwogCXJldHVybjsKIH0KQEAg LTMwMCw3ICsyNDgsNyBAQAogCWlmIChtX2lJbkNlbGwgPT0gMCkKIAkJcmV0dXJuOwogCi0JbV9w aWUtPndyaXRlKCI8L2NlbGw+XG4iKTsKKwltX3BpZS0+ZW5kRWxlbWVudCgpOwogCW1faUluQ2Vs bC0tOwogCXJldHVybjsKIH0KQEAgLTMxMCw4ICsyNTgsMTAgQEAKIAlpZiAoIW1fYkluQmxvY2sp CiAJCXJldHVybjsKIAotCW1fcGllLT53cml0ZSgiPC9wPlxuIik7CisJbV9waWUtPmVuZEVsZW1l bnQoKTsKIAltX2JJbkJsb2NrID0gZmFsc2U7CisJbV9waWUtPnNldFByZXR0eVByaW50KHRydWUp OworCW1fcGllLT5hZGRTdHJpbmcoTlVMTCwgIlxuIik7CiAJcmV0dXJuOwogfQogCkBAIC0zMjcs NyArMjc3LDggQEAKIAogdm9pZCBzX0FiaVdvcmRfMV9MaXN0ZW5lcjo6X2Nsb3NlVGFnKHZvaWQp CiB7Ci0JaWYgKG1fYk9wZW5DaGFyKSBtX3BpZS0+d3JpdGUoIjwvYz4iKTsKKwlpZiAobV9iT3Bl bkNoYXIpCisJCW1fcGllLT5lbmRFbGVtZW50KCk7CiAJbV9iT3BlbkNoYXIgPSBmYWxzZTsKIH0K IApAQCAtMzM2LDcgKzI4Nyw3IEBACiAJaWYgKCFtX3BDdXJyZW50RmllbGQpCiAJCXJldHVybjsK ICAgICBfY2xvc2VTcGFuKCk7Ci0JbV9waWUtPndyaXRlKCI8L2ZpZWxkPiIpOworCW1fcGllLT5l bmRFbGVtZW50KCk7CiAgICAgbV9wQ3VycmVudEZpZWxkID0gTlVMTDsKIAlyZXR1cm47CiB9CkBA IC0zNDYsNyArMjk3LDcgQEAKIAlpZiAoIW1fYkluSHlwZXJsaW5rKQogCQlyZXR1cm47CiAgICAg X2Nsb3NlU3BhbigpOwotCW1fcGllLT53cml0ZSgiPC9hPiIpOworCW1fcGllLT5lbmRFbGVtZW50 KCk7CiAgICAgbV9iSW5IeXBlcmxpbmsgPSBmYWxzZTsKIAlyZXR1cm47CiB9CkBAIC0zNTgsNyAr MzA5LDcgQEAKIAkJcmV0dXJuOwogCVVUX0RFQlVHTVNHKCgiRG9pbmcgY2xvc2UgYW5ub3RhdGlv biBvYmplY3QgbWV0aG9kIFxuIikpOwogICAgIF9jbG9zZVNwYW4oKTsKLQltX3BpZS0+d3JpdGUo IjwvYW5uPiIpOworCW1fcGllLT5lbmRFbGVtZW50KCk7CiAgICAgbV9iSW5Bbm5vdGF0aW9uID0g ZmFsc2U7CiAJcmV0dXJuOwogfQpAQCAtMzY3LDcgKzMxOCw3IEBACiB7CiAJVVRfREVCVUdNU0co KCJEb2luZyBjbG9zZSByZGYgYW5jaG9yIG9iamVjdCBtZXRob2QgXG4iKSk7CiAgICAgX2Nsb3Nl U3BhbigpOwotCW1fcGllLT53cml0ZSgiPC90ZXh0bWV0YT4iKTsKKwltX3BpZS0+ZW5kRWxlbWVu dCgpOwogCXJldHVybjsKIH0KIApAQCAtMzgzLDEzMyArMzM0LDI2IEBACiAJaWYgKCFhcGlTcGFu KQkJCQkvLyBkb24ndCB3cml0ZSB0YWcgZm9yIGVtcHR5IEEvUAogCQlyZXR1cm47CiAKLQlfb3Bl blRhZygiYyIsIiIsZmFsc2UsYXBpU3BhbiwwKTsKKwlfb3BlblRhZygiYyIsdHJ1ZSxhcGlTcGFu LDApOwogCW1fYkluU3BhbiA9IHRydWU7CiAJbV9hcGlMYXN0U3BhbiA9IGFwaVNwYW47CiAJcmV0 dXJuOwogfQogCi12b2lkIHNfQWJpV29yZF8xX0xpc3RlbmVyOjpfb3BlblRhZyhjb25zdCBjaGFy ICogc3pQcmVmaXgsIGNvbnN0IGNoYXIgKiBzelN1ZmZpeCwKLQkJCQkJCQkJCWJvb2wgYk5ld0xp bmVBZnRlciwgUFRfQXR0clByb3BJbmRleCBhcGksCi0JCQkJCQkJCQlVVF91aW50MzIgaVhJRCwK K3ZvaWQgc19BYmlXb3JkXzFfTGlzdGVuZXI6Ol9vcGVuVGFnKGNvbnN0IGNoYXIgKiBzelByZWZp eCwgYm9vbCBiSGFzQ29udGVudCwKKwkJCQkJCQkJCVBUX0F0dHJQcm9wSW5kZXggYXBpLCBVVF91 aW50MzIgaVhJRCwKIAkJCQkJCQkJCWJvb2wgYklnbm9yZVByb3BlcnRpZXMpCiB7Ci0jaWZkZWYg RU5BQkxFX1JFU09VUkNFX01BTkFHRVIKLQlVVF9BU1NFUlRfSEFSTUxFU1MgKCFtX2JPcGVuQ2hh cik7Ci0KLQlVVF9VVEY4U3RyaW5nIHRhZygiPCIpOwotCVVUX1VURjhTdHJpbmcgdXJsOwotCVVU X1VURjhTdHJpbmcgZXNjOwotCQotCXRhZyArPSBzelByZWZpeDsKLQogCWNvbnN0IFBQX0F0dHJQ cm9wICogcEFQID0gTlVMTDsKLQlib29sIGJIYXZlUHJvcCA9IG1fcERvY3VtZW50LT5nZXRBdHRy UHJvcCAoYXBpLCAmcEFQKTsKLQlpZiAoYkhhdmVQcm9wICYmIHBBUCkKLQl7Ci0JCWNvbnN0IGdj aGFyICogc3pOYW1lID0gMDsKLQkJY29uc3QgZ2NoYXIgKiBzelZhbHVlID0gMDsKLQotCQlVVF91 aW50MzIgayA9IDA7Ci0JCXdoaWxlIChwQVAtPmdldE50aEF0dHJpYnV0ZSAoaysrLCBzek5hbWUs IHN6VmFsdWUpKQotCQl7Ci0jaWYgMAotCQkJLy8KLQkJCS8vIFN0cmlwIG91dCBBdXRob3IgYXR0 cmlidXRlcyBmb3Igbm93LgotCQkJLy8KLQkJCWlmKCAhbV9wRG9jdW1lbnQtPmlzRXhwb3J0QXV0 aG9yQXR0cygpICYmIHN0cmNtcChzek5hbWUsUFRfQVVUSE9SX05BTUUpID09IDApCi0JCQkJY29u dGludWU7Ci0jZW5kaWYKLQkJCXRhZyArPSAiICI7Ci0JCQl0YWcgKz0gc3pOYW1lOwotCQkJdGFn ICs9ICI9XCIiOwotCi0JCQlpZiAoKHN0cmNtcCAoc3pOYW1lLCAiaHJlZiIpID09IDApIHx8IChz dHJjbXAgKHN6TmFtZSwgInhsaW5rOmhyZWYiKSA9PSAwKSkKLQkJCXsKLQkJCQlpZigqc3pWYWx1 ZSA9PSAnLycpCi0JCQkJewotCQkJCQlYQVBfUmVzb3VyY2VNYW5hZ2VyICYgUk0gPSBtX3BEb2N1 bWVudC0+cmVzb3VyY2VNYW5hZ2VyICgpOwotCQkJCQlYQVBfRXh0ZXJuYWxSZXNvdXJjZSAqIHJl ID0gZHluYW1pY19jYXN0PFhBUF9FeHRlcm5hbFJlc291cmNlICo+KFJNLnJlc291cmNlIChzelZh bHVlLCBmYWxzZSkpOwotCQkJCQlpZiAocmUpCi0JCQkJCXsKLQkJCQkJCXVybCA9IHJlLT5VUkwg KCk7Ci0JCQkJCQl1cmwuZXNjYXBlVVJMKCk7Ci0JCQkJCQl0YWcgKz0gdXJsOwotCQkJCQl9Ci0J CQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXVybCA9IHN6VmFsdWU7Ci0JCQkJCXVybC5lc2Nh cGVVUkwoKTsKLQkJCQkJdGFnICs9IHVybDsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0J CQkJZXNjID0gc3pWYWx1ZTsKLQkJCQllc2MuZXNjYXBlWE1MKCk7Ci0JCQkJdGFnICs9IGVzYzsK LQkJCX0KLQkJCQotCi0JCQl0YWcgKz0gIlwiIjsKLQkJfQotCi0JCWlmKGlYSUQgIT0gMCkKLQkJ ewotCQkJLy8gaW5zZXJ0IHhpZCBhdHRyaWJ1dGUKLQkJCXRhZyArPSAiICI7Ci0JCQl0YWcgKz0g UFRfWElEX0FUVFJJQlVURV9OQU1FOwotCQkJdGFnICs9ICI9XCIiOwotCQkJVVRfVVRGOFN0cmlu ZyBzOwotCQkJVVRfVVRGOFN0cmluZ19zcHJpbnRmKHMsICIlZFwiIiwgaVhJRCk7Ci0JCQl0YWcg Kz0gczsKLQkJfQotCQkKLQkJaWYgKCFiSWdub3JlUHJvcGVydGllcykKLQkJewotCQkJayA9IDA7 Ci0JCQl3aGlsZSAocEFQLT5nZXROdGhQcm9wZXJ0eSAoaysrLCBzek5hbWUsIHN6VmFsdWUpKQot CQkJewotCQkJCWlmIChrID09IDEpCi0JCQkJewotCQkJCQl0YWcgKz0gIiAiOwotCQkJCQl0YWcg Kz0gUFRfUFJPUFNfQVRUUklCVVRFX05BTUU7Ci0JCQkJCXRhZyArPSAiPVwiIjsKLQkJCQl9Ci0J CQkJZWxzZSB0YWcgKz0gIjsgIjsKLQotCQkJCXRhZyArPSBzek5hbWU7Ci0JCQkJdGFnICs9ICI6 IjsKLQotCQkJCWVzYyA9IHN6VmFsdWU7Ci0JCQkJZXNjLmVzY2FwZVhNTCgpOwotCQkJCXRhZyAr PSBlc2M7Ci0JCQl9Ci0JCQlpZiAoayA+IDEpIHRhZyArPSAiXCIiOwotCQl9Ci0JfQotCWlmIChz elN1ZmZpeCkKLQkJaWYgKCpzelN1ZmZpeCA9PSAnLycpCi0JCQl0YWcgKz0gIi8iOwotCXRhZyAr PSAiPiI7Ci0JaWYgKGJOZXdMaW5lQWZ0ZXIpIHRhZyArPSAiXG4iOwotCW1fcGllLT53cml0ZSAo dGFnLnV0Zjhfc3RyICgpLCB0YWcuYnl0ZUxlbmd0aCgpKTsKLQotCWlmIChzdHJjbXAgKHN6UHJl Zml4LCAiYyIpID09IDApIG1fYk9wZW5DaGFyID0gdHJ1ZTsKLQotI2Vsc2UgLyogRU5BQkxFX1JF U09VUkNFX01BTkFHRVIgKi8KLQljb25zdCBQUF9BdHRyUHJvcCAqIHBBUCA9IE5VTEw7CiAJYm9v bCBiSGF2ZVByb3AgPSBtX3BEb2N1bWVudC0+Z2V0QXR0clByb3AoYXBpLCZwQVApOwotCXh4eF9V VF9ERUJVR01TRygoIl9vcGVuVGFnOiBhcGkgJWQsIGJIYXZlUHJvcCAlZFxuIixhcGksIGJIYXZl UHJvcCkpOworCXh4eF9VVF9ERUJVR01TRygoIl9vcGVuVGFnOiBhcGkgJWQsIGJIYXZlUHJvcCAl ZFxuIiwgYXBpLCBiSGF2ZVByb3ApKTsKIAogCVVUX3JldHVybl9pZl9mYWlsKHN6UHJlZml4ICYm ICpzelByZWZpeCk7CiAKLQltX3BpZS0+d3JpdGUoIjwiKTsKKwltX3BpZS0+c3RhcnRFbGVtZW50 KHN6UHJlZml4KTsKIAogCWlmKHN0cmNtcChzelByZWZpeCwiYyIpPT0gMCkKIAkJbV9iT3BlbkNo YXIgPSB0cnVlOwotCW1fcGllLT53cml0ZShzelByZWZpeCk7CiAJaWYgKGJIYXZlUHJvcCAmJiBw QVApCiAJewogCQlVVF9VVEY4U3RyaW5nIHVybDsKQEAgLTUyOSw0MSArMzczLDI3IEBACiAJCQlp ZiggIW1fcERvY3VtZW50LT5pc0V4cG9ydEF1dGhvckF0dHMoKSAmJiBzdHJjbXAoc3pOYW1lLFBU X0FVVEhPUl9OQU1FKSA9PSAwKQogCQkJCWNvbnRpbnVlOwogCi0JCQltX3BpZS0+d3JpdGUoIiAi KTsKLQkJCW1fcGllLT53cml0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3pOYW1lKSk7Ci0J CQltX3BpZS0+d3JpdGUoIj1cIiIpOwotCiAJCQlpZiAoKHN0cmNtcCAoc3pOYW1lLCAiaHJlZiIp ID09IDApIHx8IChzdHJjbXAgKHN6TmFtZSwgInhsaW5rOmhyZWYiKSA9PSAwKSkKIAkJCXsKIAkJ CQl1cmwgPSBzelZhbHVlOwogCQkJCXVybC5lc2NhcGVVUkwoKTsKLQkJCQlfb3V0cHV0WE1MQ2hh cih1cmwudXRmOF9zdHIoKSwgdXJsLmJ5dGVMZW5ndGgoKSk7CisJCQkJbV9waWUtPmFkZFN0cmlu Zyhzek5hbWUsIHVybC51dGY4X3N0cigpKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQlfb3V0 cHV0WE1MQ2hhcihzelZhbHVlLCBzdHJsZW4oc3pWYWx1ZSkpOworCQkJCW1fcGllLT5hZGRTdHJp bmcoc3pOYW1lLCBzelZhbHVlKTsKIAkJCX0KIAkJCQotCQkJbV9waWUtPndyaXRlKCJcIiIpOwog CQl9CiAJCWlmKGlYSUQgIT0gMCkKIAkJewogCQkJLy8gaW5zZXJ0IHhpZCBhdHRyaWJ1dGUKLQkJ CW1fcGllLT53cml0ZSgiICIpOwotCQkJbV9waWUtPndyaXRlKFBUX1hJRF9BVFRSSUJVVEVfTkFN RSk7Ci0JCQltX3BpZS0+d3JpdGUoIj1cIiIpOwotCQkJVVRfU3RyaW5nIHM7Ci0JCQlVVF9TdHJp bmdfc3ByaW50ZihzLCAiJWRcIiIsIGlYSUQpOwotCQkJbV9waWUtPndyaXRlKHMuY19zdHIoKSk7 CisJCQltX3BpZS0+YWRkSW50KCJ4aWQiLCBpWElEKTsKIAkJfQogCQlpZiAoIWJJZ25vcmVQcm9w ZXJ0aWVzICYmIHBBUC0+Z2V0TnRoUHJvcGVydHkoMCxzek5hbWUsc3pWYWx1ZSkpCiAJCXsKLQkJ CW1fcGllLT53cml0ZSgiICIpOwotCQkJbV9waWUtPndyaXRlKHN0YXRpY19jYXN0PGNvbnN0IGNo YXIqPihQVF9QUk9QU19BVFRSSUJVVEVfTkFNRSkpOwotCQkJbV9waWUtPndyaXRlKCI9XCIiKTsK LQkJCW1fcGllLT53cml0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3pOYW1lKSk7Ci0JCQlt X3BpZS0+d3JpdGUoIjoiKTsKLQkJCV9vdXRwdXRYTUxDaGFyKHN6VmFsdWUsIHN0cmxlbihzelZh bHVlKSk7CisJCQlzdGQ6Om9zdHJpbmdzdHJlYW0gYnVmOworCQkJYnVmIDw8IHN6TmFtZSA8PCAi OiIgPDwgc3pWYWx1ZTsKIAkJCVVUX3VpbnQzMiBqID0gMTsKIAkJCXdoaWxlIChwQVAtPmdldE50 aFByb3BlcnR5KGorKyxzek5hbWUsc3pWYWx1ZSkpCiAJCQl7CkBAIC01NzIsMjI0ICs0MDIsNzkg QEAKIAkJCQkvLyB0aGUgcHJvcGVydHkgYXQgYWxsPyBGb3Igbm93IEkgZml4ZWQgaXQgYnkgdGhl IGxhdHRlci4KIAkJCQlpZiAoKnN6VmFsdWUpCiAJCQkJewotCQkJCQltX3BpZS0+d3JpdGUoIjsg Iik7Ci0JCQkJCW1fcGllLT53cml0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3pOYW1lKSk7 Ci0JCQkJCW1fcGllLT53cml0ZSgiOiIpOwotCQkJCQlfb3V0cHV0WE1MQ2hhcihzelZhbHVlLCBz dHJsZW4oc3pWYWx1ZSkpOworCQkJCQlidWYgPDwgIjsgIiA8PCBzek5hbWUgPDwgIjoiIDw8IHN6 VmFsdWU7CiAJCQkJfQogCQkJfQotCQkJbV9waWUtPndyaXRlKCJcIiIpOworCQkJbV9waWUtPmFk ZFN0cmluZyhQVF9QUk9QU19BVFRSSUJVVEVfTkFNRSwgYnVmLnN0cigpKTsKIAkJfQogCX0KIAlp ZihzdHJjbXAoc3pQcmVmaXgsIm1hdGgiKSA9PSAwKQogCXsKLQkJVVRfVVRGOFN0cmluZyB0YWc7 CiAJCWNvbnN0IGNoYXIgKiBzelByb3BWYWwgPSBOVUxMOwogCQlwQVAtPmdldEF0dHJpYnV0ZSgi ZGF0YWlkIixzelByb3BWYWwpOwogCQlpZihzelByb3BWYWwgIT0gTlVMTCkKIAkJewotCQkJdGFn ID0gIj4iOwotCQkJaWYgKGJOZXdMaW5lQWZ0ZXIpIHRhZyArPSAiXG4iOwotCQkJbV9waWUtPndy aXRlICh0YWcudXRmOF9zdHIgKCksIHRhZy5ieXRlTGVuZ3RoKCkpOwotCQkJdGFnLmNsZWFyKCk7 Ci0JCQl0YWcgPSAiPGltYWdlIGRhdGFpZD0iOwotCQkJdGFnICs9ICJcIiI7Ci0JCQl0YWcgKz0g InNuYXBzaG90LXN2Zy0iOworCQkJbV9waWUtPnN0YXJ0RWxlbWVudCgiaW1hZ2UiKTsKKwkJCXN0 ZDo6c3RyaW5nIHRhZyA9ICJzbmFwc2hvdC1zdmctIjsKIAkJCXRhZyArPSBzelByb3BWYWw7Ci0J CQl0YWcgKz0gIlwiIjsKLQkJCXRhZyArPSAiICI7Ci0JCQl0YWcgKz0gUFRfUFJPUFNfQVRUUklC VVRFX05BTUU7Ci0JCQl0YWcgKz0gIj1cIiI7CisJCQltX3BpZS0+YWRkU3RyaW5nKCJkYXRhaWQi LCB0YWcpOwogCQkJYm9vbCBiRm91bmQgPSBwQVAtPmdldFByb3BlcnR5KCJoZWlnaHQiLCBzelBy b3BWYWwpOwotCQkJVVRfVVRGOFN0cmluZyBzVmFsOworCQkJc3RkOjpvc3RyaW5nc3RyZWFtIGJ1 ZjsKKwkJCWJvb2wgbmVlZF9zZXAgPSBmYWxzZTsKIAkJCWlmKGJGb3VuZCkKIAkJCXsKIAkJCQlk b3VibGUgZEluY2ggPSBzdGF0aWNfY2FzdDxkb3VibGU+KGF0b2koc3pQcm9wVmFsKSkvVVRfTEFZ T1VUX1JFU09MVVRJT047Ci0JCQkJVVRfVVRGOFN0cmluZ19zcHJpbnRmKHNWYWwsIiVmaW4iLGRJ bmNoKTsKLQkJCQl0YWcgKz0gImhlaWdodDoiOwotCQkJCXRhZyArPSBzVmFsOwotCQkJCXRhZyAr PSAiOyAiOworCQkJCWJ1ZiA8PCAiaGVpZ2h0OiIgPDwgZEluY2ggPDwgImluIjsKKwkJCQluZWVk X3NlcCA9IHRydWU7CiAJCQl9CiAJCQliRm91bmQgPSBwQVAtPmdldFByb3BlcnR5KCJ3aWR0aCIs IHN6UHJvcFZhbCk7CiAJCQlpZihiRm91bmQpCiAJCQl7CisJCQkJaWYgKG5lZWRfc2VwKQorCQkJ CQlidWYgPDwgIjsgIjsKIAkJCQlkb3VibGUgZEluY2ggPSBzdGF0aWNfY2FzdDxkb3VibGU+KGF0 b2koc3pQcm9wVmFsKSkvVVRfTEFZT1VUX1JFU09MVVRJT047Ci0JCQkJVVRfVVRGOFN0cmluZ19z cHJpbnRmKHNWYWwsIiVmaW4iLGRJbmNoKTsKLQkJCQl0YWcgKz0gIndpZHRoOiI7Ci0JCQkJdGFn ICs9IHNWYWw7CisJCQkJYnVmIDw8ICJ3aWR0aDoiIDw8IGRJbmNoIDw8ICJpbiI7CiAJCQl9Ci0J CQl0YWcgKz0gIlwiIjsKLQkJCXRhZyArPSAiLyI7Ci0JCQl0YWcgKz0gIj4iOwotCQkJdGFnICs9 ICI8L21hdGgiOwotCQkJdGFnICs9ICI+IjsKKwkJCW1fcGllLT5hZGRTdHJpbmcoUFRfUFJPUFNf QVRUUklCVVRFX05BTUUsIGJ1Zi5zdHIoKSk7CisJCQltX3BpZS0+ZW5kRWxlbWVudCgpOwogCQl9 Ci0JCWVsc2UKLQkJewotCQkJaWYgKHN6U3VmZml4KQotCQkJCWlmICgqc3pTdWZmaXggPT0gJy8n KQotCQkJCQl0YWcgKz0gIi8iOwotCQkJdGFnICs9ICI+IjsKLQkJCWlmIChiTmV3TGluZUFmdGVy KSB0YWcgKz0gIlxuIjsKLQkJfQotCQltX3BpZS0+d3JpdGUgKHRhZy51dGY4X3N0ciAoKSwgdGFn LmJ5dGVMZW5ndGgoKSk7CiAJfQogCWVsc2UgaWYoc3RyY21wKHN6UHJlZml4LCJlbWJlZCIpID09 IDApCiAJewotCQlVVF9VVEY4U3RyaW5nIHRhZzsKIAkJY29uc3QgY2hhciAqIHN6UHJvcFZhbCA9 IE5VTEw7CiAJCXBBUC0+Z2V0QXR0cmlidXRlKCJkYXRhaWQiLHN6UHJvcFZhbCk7CiAJCWlmKHN6 UHJvcFZhbCAhPSBOVUxMKQogCQl7Ci0JCQlib29sIGhhc19zdmc7Ci0JCQl0YWcgPSAiPiI7Ci0J CQlpZiAoYk5ld0xpbmVBZnRlcikgdGFnICs9ICJcbiI7Ci0JCQlzdGQ6OnN0cmluZyBzSUQgPSBz dGQ6OnN0cmluZygic25hcHNob3Qtc3ZnLSIpICsgc3pQcm9wVmFsOwotCQkJaGFzX3N2ZyA9IG1f cERvY3VtZW50LT5nZXREYXRhSXRlbURhdGFCeU5hbWUoc0lELmNfc3RyICgpLCBOVUxMLCBOVUxM LCBOVUxMKTsKLQkJCW1fcGllLT53cml0ZSAodGFnLnV0Zjhfc3RyICgpLCB0YWcuYnl0ZUxlbmd0 aCgpKTsKLQkJCXRhZy5jbGVhcigpOwotCQkJdGFnID0gIjxpbWFnZSBkYXRhaWQ9IjsKLQkJCXRh ZyArPSAiXCIiOwotCQkJdGFnICs9IChoYXNfc3ZnKT8gInNuYXBzaG90LXN2Zy0iOiAic25hcHNo b3QtcG5nLSI7Ci0JCQl0YWcgKz0gc3pQcm9wVmFsOwotCQkJdGFnICs9ICJcIiI7Ci0JCQl0YWcg Kz0gIiAiOwotCQkJdGFnICs9IFBUX1BST1BTX0FUVFJJQlVURV9OQU1FOwotCQkJdGFnICs9ICI9 XCIiOworCQkJbV9waWUtPnN0YXJ0RWxlbWVudCgiaW1hZ2UiKTsKKwkJCXN0ZDo6c3RyaW5nIHRh ZyA9IHN0ZDo6c3RyaW5nKCJzbmFwc2hvdC1zdmctIikgKyBzelByb3BWYWw7CisJCQlpZiAoIW1f cERvY3VtZW50LT5nZXREYXRhSXRlbURhdGFCeU5hbWUodGFnLmNfc3RyICgpLCBOVUxMLCBOVUxM LCBOVUxMKSkKKwkJCQl0YWcgPSBzdGQ6OnN0cmluZygic25hcHNob3QtcG5nLSIpICsgc3pQcm9w VmFsOworCQkJbV9waWUtPmFkZFN0cmluZygiZGF0YWlkIiwgdGFnKTsKIAkJCWJvb2wgYkZvdW5k ID0gcEFQLT5nZXRQcm9wZXJ0eSgiaGVpZ2h0Iiwgc3pQcm9wVmFsKTsKLQkJCVVUX1VURjhTdHJp bmcgc1ZhbDsKKwkJCXN0ZDo6b3N0cmluZ3N0cmVhbSBidWY7CisJCQlib29sIG5lZWRfc2VwID0g ZmFsc2U7CiAJCQlpZihiRm91bmQpCiAJCQl7CiAJCQkJZG91YmxlIGRJbmNoID0gc3RhdGljX2Nh c3Q8ZG91YmxlPihhdG9pKHN6UHJvcFZhbCkpL1VUX0xBWU9VVF9SRVNPTFVUSU9OOwotCQkJCVVU X1VURjhTdHJpbmdfc3ByaW50ZihzVmFsLCIlZmluIixkSW5jaCk7Ci0JCQkJdGFnICs9ICJoZWln aHQ6IjsKLQkJCQl0YWcgKz0gc1ZhbDsKLQkJCQl0YWcgKz0gIjsgIjsKKwkJCQlidWYgPDwgImhl aWdodDoiIDw8IGRJbmNoIDw8ICJpbiI7CisJCQkJbmVlZF9zZXAgPSB0cnVlOwogCQkJfQogCQkJ YkZvdW5kID0gcEFQLT5nZXRQcm9wZXJ0eSgid2lkdGgiLCBzelByb3BWYWwpOwogCQkJaWYoYkZv dW5kKQogCQkJeworCQkJCWlmIChuZWVkX3NlcCkKKwkJCQkJYnVmIDw8ICI7ICI7CiAJCQkJZG91 YmxlIGRJbmNoID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihhdG9pKHN6UHJvcFZhbCkpL1VUX0xBWU9V VF9SRVNPTFVUSU9OOwotCQkJCVVUX1VURjhTdHJpbmdfc3ByaW50ZihzVmFsLCIlZmluIixkSW5j aCk7Ci0JCQkJdGFnICs9ICJ3aWR0aDoiOwotCQkJCXRhZyArPSBzVmFsOworCQkJCWJ1ZiA8PCAi d2lkdGg6IiA8PCBkSW5jaCA8PCAiaW4iOwogCQkJfQotCQkJdGFnICs9ICJcIiI7Ci0JCQl0YWcg Kz0gIi8iOwotCQkJdGFnICs9ICI+IjsKLQkJCXRhZyArPSAiPC9lbWJlZCI7Ci0JCQl0YWcgKz0g Ij4iOworCQkJbV9waWUtPmFkZFN0cmluZyhQVF9QUk9QU19BVFRSSUJVVEVfTkFNRSwgYnVmLnN0 cigpKTsKKwkJCW1fcGllLT5lbmRFbGVtZW50KCk7CiAJCX0KLQkJZWxzZQotCQl7Ci0JCQlpZiAo c3pTdWZmaXgpCi0JCQkJaWYgKCpzelN1ZmZpeCA9PSAnLycpCi0JCQkJCXRhZyArPSAiLyI7Ci0J CQl0YWcgKz0gIj4iOwotCQkJaWYgKGJOZXdMaW5lQWZ0ZXIpIHRhZyArPSAiXG4iOwotCQl9Ci0J CW1fcGllLT53cml0ZSAodGFnLnV0Zjhfc3RyICgpLCB0YWcuYnl0ZUxlbmd0aCgpKTsKIAl9Ci0J ZWxzZQotCXsKLQkJaWYgKHN6U3VmZml4KQotCQkJaWYgKCpzelN1ZmZpeCA9PSAnLycpCi0JCQkJ bV9waWUtPndyaXRlICgiLyIpOwotCQltX3BpZS0+d3JpdGUgKCI+Iik7Ci0JCWlmIChiTmV3TGlu ZUFmdGVyKQotCQkJbV9waWUtPndyaXRlICgiXG4iKTsKLQl9Ci0JLy8JbV9iSW5UYWcgPSB0cnVl OwotI2VuZGlmIC8qIEVOQUJMRV9SRVNPVVJDRV9NQU5BR0VSICovCisJaWYgKCFiSGFzQ29udGVu dCkKKwkJbV9waWUtPmVuZEVsZW1lbnQoKTsKIH0KIAotLy8gVGhpcyBtZXRob2QgaXMgdmVyeSBt dWNoIGxpa2UgX291dHB1dERhdGEgYnV0IHVzZXMgZ2NoYXJzIGluc3RlYWQgb2YgVVRfVUNTNF9D aGFyJ3MuCi12b2lkIHNfQWJpV29yZF8xX0xpc3RlbmVyOjpfb3V0cHV0WE1MQ2hhcihjb25zdCBn Y2hhciAqIGRhdGEsIFVUX3VpbnQzMiBsZW5ndGgpCi17Ci0JVVRfVVRGOFN0cmluZyBzQnVmIChk YXRhLCBsZW5ndGgpOwotCXNCdWYuZXNjYXBlWE1MKCk7Ci0JCi0JbV9waWUtPndyaXRlKHNCdWYu dXRmOF9zdHIoKSxzQnVmLmJ5dGVMZW5ndGgoKSk7Ci19Ci0KLS8vIFRoaXMgaXMgdmVyeSBtdWNo IGxpa2UgX291dHB1dFhNTENoYXIgYnV0IGFkZHMgdGhlID4+PiBrZXk9InZhbHVlIiA8PDwgcGFk ZGluZyBhbiBxdW90aW5nIGZvciB5b3UgCi12b2lkIHNfQWJpV29yZF8xX0xpc3RlbmVyOjpfb3V0 cHV0WE1MQXR0cmlidXRlKGNvbnN0IGdjaGFyICoga2V5LCBjb25zdCBnY2hhciAqIHZhbHVlLCBV VF91aW50MzIgbGVuZ3RoKQotewotICAgIG1fcGllLT53cml0ZSgiICIpOwotICAgIG1fcGllLT53 cml0ZShrZXkpOwotICAgIG1fcGllLT53cml0ZSgiPVwiIik7Ci0gICAgX291dHB1dFhNTENoYXIg KCB2YWx1ZSwgbGVuZ3RoICk7Ci0gICAgbV9waWUtPndyaXRlKCJcIiAiKTsgICAgCi19Ci0KLXZv aWQgc19BYmlXb3JkXzFfTGlzdGVuZXI6Ol9vdXRwdXRYTUxBdHRyaWJ1dGUoY29uc3QgZ2NoYXIg KiBrZXksIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSApCi17Ci0gICAgX291dHB1dFhNTEF0dHJp YnV0ZSgga2V5LCB2YWx1ZS5jX3N0cigpLCB2YWx1ZS5sZW5ndGgoKSApOwotfQotCi0KLQotdm9p ZCBzX0FiaVdvcmRfMV9MaXN0ZW5lcjo6X291dHB1dERhdGEoY29uc3QgVVRfVUNTQ2hhciAqIGRh dGEsIFVUX3VpbnQzMiBsZW5ndGgpCi17Ci0JVVRfVVRGOFN0cmluZyBzQnVmOwotCWNvbnN0IFVU X1VDU0NoYXIgKiBwRGF0YTsKLQotCVVUX3JldHVybl9pZl9mYWlsKHNpemVvZihVVF9CeXRlKSA9 PSBzaXplb2YoY2hhcikpOwotCXNCdWYucmVzZXJ2ZShsZW5ndGgpOwotCi0JZm9yIChwRGF0YT1k YXRhOyAocERhdGE8ZGF0YStsZW5ndGgpOyAvKiovKQotCXsKLQkJc3dpdGNoICgqcERhdGEpCi0J CXsKLQkJY2FzZSAnPCc6Ci0JCQlzQnVmICs9ICImbHQ7IjsKLQkJCXBEYXRhKys7Ci0JCQlicmVh azsKLQotCQljYXNlICc+JzoKLQkJCXNCdWYgKz0gIiZndDsiOwotCQkJcERhdGErKzsKLQkJCWJy ZWFrOwotCi0JCWNhc2UgJyYnOgotCQkJc0J1ZiArPSAiJmFtcDsiOwotCQkJcERhdGErKzsKLQkJ CWJyZWFrOwotCi0JCWNhc2UgVUNTX0xGOgkJCQkJLy8gTEYgLS0gcmVwcmVzZW50aW5nIGEgRm9y Y2VkLUxpbmUtQnJlYWsKLQkJCXNCdWYgKz0gIjxici8+IjsKLQkJCXBEYXRhKys7Ci0JCQlicmVh azsKLQotCQljYXNlIFVDU19WVEFCOgkJCQkJLy8gVlRBQiAtLSByZXByZXNlbnRpbmcgYSBGb3Jj ZWQtQ29sdW1uLUJyZWFrCi0JCQlzQnVmICs9ICI8Y2JyLz4iOwotCQkJcERhdGErKzsKLQkJCWJy ZWFrOwotCi0JCWNhc2UgVUNTX1RBQjoKLQkJCXNCdWYgKz0gIlx0IjsKLQkJCXBEYXRhKys7Ci0J CQlicmVhazsKLQotCQljYXNlIFVDU19GRjoJCQkJCS8vIEZGIC0tIHJlcHJlc2VudGluZyBhIEZv cmNlZC1QYWdlLUJyZWFrCi0JCQlzQnVmICs9ICI8cGJyLz4iOwotCQkJcERhdGErKzsKLQkJCWJy ZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlpZiAoKnBEYXRhIDwgMHgyMCkgICAgICAgICAvLyBTaWxl bnRseSBlYXQgdGhlc2UgY2hhcmFjdGVycy4KLQkJCQlwRGF0YSsrOwotCQkJZWxzZQotCQkJCXsK LQkJCQkJc0J1Zi5hcHBlbmRVQ1M0IChwRGF0YSwgMSk7Ci0JCQkJCXBEYXRhKys7Ci0JCQkJfQot CQl9Ci0JfQotCi0JbV9waWUtPndyaXRlKHNCdWYudXRmOF9zdHIoKSxzQnVmLmJ5dGVMZW5ndGgo KSk7Ci19Ci0KIHNfQWJpV29yZF8xX0xpc3RlbmVyOjpzX0FiaVdvcmRfMV9MaXN0ZW5lcihQRF9E b2N1bWVudCAqIHBEb2N1bWVudCwKIAkJCQkJCQkJCQkgICBJRV9FeHBfQWJpV29yZF8xICogcGll LAogCQkJCQkJCQkJCSAgIGJvb2wgaXNUZW1wbGF0ZSkKQEAgLTgxMCw5ICs0OTUsNiBAQAogCW1f aUluQ2VsbCA9IDA7CiAJbV9iSW5Bbm5vdGF0aW9uID0gZmFsc2U7CiAKLQltX3BpZS0+d3JpdGUo Ijw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuIik7Ci0JbV9waWUt PndyaXRlICgiPCFET0NUWVBFIGFiaXdvcmQgUFVCTElDIFwiLS8vQUJJU09VUkNFLy9EVEQgQVdN TCAxLjAgU3RyaWN0Ly9FTlwiIFwiaHR0cDovL3d3dy5hYmlzb3VyY2UuY29tL2F3bWwuZHRkXCI+ XG4iKTsKLQogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgICAgICAgIFRoZSBmaXhl ZCBhdHRyaWJ1dGVzIG9mIHRoZSA8YWJpd29yZD4gdG9rZW4gdGhhdCB1c2VkIHRvIHJlc2lkZQpA QCAtODE5LDYgKzUwMSw3IEBACiAgICAgICAgIGhlcmUgYXJlIG5vdyBmb3VuZCBpbiBQRF9Eb2N1 bWVudDo6c2V0QXR0clByb3AoKQogCiAJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW1f cGllLT5zZXREb2NUeXBlICgiPCFET0NUWVBFIGFiaXdvcmQgUFVCTElDIFwiLS8vQUJJU09VUkNF Ly9EVEQgQVdNTCAxLjAgU3RyaWN0Ly9FTlwiIFwiaHR0cDovL3d3dy5hYmlzb3VyY2UuY29tL2F3 bWwuZHRkXCI+XG4iKTsKIAogCS8vIHdlIHdhbnQgdG8gdXBkYXRlIHRoZSBYSUQgY291bnRlciBh bmQgdGhlIHRlbXBsYXRlIHN0YXR1cwogCVVUX1N0cmluZyBzOwpAQCAtODMzLDE4ICs1MTYsMjAg QEAKIAkKIAlwRG9jdW1lbnQtPnNldEF0dHJpYnV0ZXMoYXR0cik7CiAKLQlfb3BlblRhZygiYWJp d29yZCIsIE5VTEwsIHRydWUsIHBEb2N1bWVudC0+Z2V0QXR0clByb3BJbmRleCgpLGZhbHNlLDAp OworCV9vcGVuVGFnKCJhYml3b3JkIiwgdHJ1ZSwgcERvY3VtZW50LT5nZXRBdHRyUHJvcEluZGV4 KCksZmFsc2UsMCk7CiAKIAkvLyBOT1RFIHdlIG91dHB1dCB0aGUgZm9sbG93aW5nIHByZWFtYmxl IGluIFhNTCBjb21tZW50cy4KIAkvLyBOT1RFIHRoaXMgaW5mb3JtYXRpb24gaXMgZm9yIGh1bWFu IHZpZXdpbmcgb25seS4KIAotCW1fcGllLT53cml0ZSgiPCEtLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+ XG4iKTsKLQltX3BpZS0+d3JpdGUoIjwhLS0gVGhpcyBmaWxlIGlzIGFuIEFiaVdvcmQgZG9jdW1l bnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPlxuIik7Ci0JbV9w aWUtPndyaXRlKCI8IS0tIEFiaVdvcmQgaXMgYSBmcmVlLCBPcGVuIFNvdXJjZSB3b3JkIHByb2Nl c3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAtLT5cbiIpOwotCW1fcGllLT53cml0ZSgi PCEtLSBNb3JlIGluZm9ybWF0aW9uIGFib3V0IEFiaVdvcmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6 Ly93d3cuYWJpc291cmNlLmNvbS8gLS0+XG4iKTsKLQltX3BpZS0+d3JpdGUoIjwhLS0gWW91IHNo b3VsZCBub3QgZWRpdCB0aGlzIGZpbGUgYnkgaGFuZC4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0tPlxuIik7Ci0JbV9waWUtPndyaXRlKCI8IS0tID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAt LT5cblxuIik7Ci0KKwltX3BpZS0+YWRkU3RyaW5nKE5VTEwsICJcbiIpOworCW1fcGllLT5hZGRD b21tZW50KCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKwltX3BpZS0+YWRkQ29tbWVudCgiVGhpcyBmaWxl IGlzIGFuIEFiaVdvcmQgZG9jdW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIik7CisJbV9waWUtPmFkZENvbW1lbnQoIkFiaVdvcmQgaXMgYSBmcmVlLCBPcGVuIFNv dXJjZSB3b3JkIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICIpOworCW1fcGll LT5hZGRDb21tZW50KCJNb3JlIGluZm9ybWF0aW9uIGFib3V0IEFiaVdvcmQgaXMgYXZhaWxhYmxl IGF0IGh0dHA6Ly93d3cuYWJpc291cmNlLmNvbS8iKTsKKwltX3BpZS0+YWRkQ29tbWVudCgiWW91 IHNob3VsZCBub3QgZWRpdCB0aGlzIGZpbGUgYnkgaGFuZC4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIik7CisJbV9waWUtPmFkZENvbW1lbnQoIj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOwor CW1fcGllLT5hZGRTdHJpbmcoTlVMTCwgIlxuIik7CisJCQogCS8vIGVuZCBvZiBwcmVhbWJsZS4K IAkvLyBub3cgd2UgYmVnaW4gdGhlIGFjdHVhbCBkb2N1bWVudC4KIApAQCAtODY5LDcgKzU1NCw3 IEBACiAJX2Nsb3NlU2VjdGlvbigpOwogCV9oYW5kbGVEYXRhSXRlbXMoKTsKIAotCW1fcGllLT53 cml0ZSgiPC9hYml3b3JkPlxuIik7CisJbV9waWUtPmVuZEVsZW1lbnQoKTsKIAlVVF9WRUNUT1Jf UFVSR0VBTEwoVVRfVVRGOFN0cmluZyAqICxtX3ZlY1NuYXBOYW1lcyk7CiB9CiAKQEAgLTkwNiw3 ICs1OTEsNyBAQAogCQkJX29wZW5TcGFuKGFwaSk7CiAKIAkJCVBUX0J1ZkluZGV4IGJpID0gcGNy cy0+Z2V0QnVmSW5kZXgoKTsKLQkJCV9vdXRwdXREYXRhKG1fcERvY3VtZW50LT5nZXRQb2ludGVy KGJpKSxwY3JzLT5nZXRMZW5ndGgoKSk7CisJCQltX3BpZS0+YWRkU3RyaW5nKE5VTEwsIG1fcERv Y3VtZW50LT5nZXRQb2ludGVyKGJpKSwgcGNycy0+Z2V0TGVuZ3RoKCkpOwogCiAJCQlyZXR1cm4g dHJ1ZTsKIAkJfQpAQCAtOTIxLDEyICs2MDYsMTAgQEAKIAkJCQl7CiAJCQkJX2Nsb3NlU3Bhbigp OwogICAgICAgICAgICAgICAgIF9jbG9zZUZpZWxkKCk7Ci0jaWZuZGVmIEVOQUJMRV9SRVNPVVJD RV9NQU5BR0VSCiAJCQkJY29uc3QgZ2NoYXIqIGltYWdlX25hbWUgPSBnZXRPYmplY3RLZXkoYXBp LCBzdGF0aWNfY2FzdDxjb25zdCBnY2hhcio+KCJkYXRhaWQiKSk7CiAJCQkJaWYgKGltYWdlX25h bWUpCiAJCQkJCW1fcFVzZWRJbWFnZXMuaW5zZXJ0KGltYWdlX25hbWUpOwotI2VuZGlmCi0JCQkJ X29wZW5UYWcoImltYWdlIiwiLyIsZmFsc2UsYXBpLHBjci0+Z2V0WElEKCkpOworCQkJCV9vcGVu VGFnKCJpbWFnZSIsZmFsc2UsYXBpLHBjci0+Z2V0WElEKCkpOwogCiAJCQkJcmV0dXJuIHRydWU7 CiAJCQkJfQpAQCAtOTM0LDcgKzYxNyw3IEBACiAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICBfY2xvc2VTcGFuKCk7CiAgICAgICAgICAgICAgICAgICAgIF9jbG9zZUZpZWxk KCk7Ci0gICAgICAgICAgICAgICAgICAgIF9vcGVuVGFnKCJmaWVsZCIsIiIsZmFsc2UsYXBpLHBj ci0+Z2V0WElEKCkpOworICAgICAgICAgICAgICAgICAgICBfb3BlblRhZygiZmllbGQiLHRydWUs YXBpLHBjci0+Z2V0WElEKCkpOwogICAgICAgICAgICAgICAgICAgICBtX3BDdXJyZW50RmllbGQg PSBwY3JvLT5nZXRGaWVsZCgpOwogICAgICAgICAgICAgICAgICAgICBVVF9BU1NFUlRfSEFSTUxF U1MobV9wQ3VycmVudEZpZWxkKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA IC05NDMsNyArNjI2LDcgQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg IF9jbG9zZVNwYW4oKTsKICAgICAgICAgICAgICAgICAgICAgX2Nsb3NlRmllbGQoKTsKLSAgICAg ICAgICAgICAgICAgICAgX29wZW5UYWcoIm1hdGgiLCIvIixmYWxzZSxhcGkscGNyLT5nZXRYSUQo KSk7CisgICAgICAgICAgICAgICAgICAgIF9vcGVuVGFnKCJtYXRoIixmYWxzZSxhcGkscGNyLT5n ZXRYSUQoKSk7CiAJCQkJCWNvbnN0IGdjaGFyKiBpbWFnZV9uYW1lID0gZ2V0T2JqZWN0S2V5KGFw aSwgc3RhdGljX2Nhc3Q8Y29uc3QgZ2NoYXIqPigiZGF0YWlkIikpOwogCQkJCQlpZiAoaW1hZ2Vf bmFtZSkKIAkJCQkJewpAQCAtOTY3LDcgKzY1MCw3IEBACiAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICBfY2xvc2VTcGFuKCk7CiAgICAgICAgICAgICAgICAgICAgIF9jbG9z ZUZpZWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgIF9vcGVuVGFnKCJlbWJlZCIsIi8iLGZhbHNl LGFwaSxwY3ItPmdldFhJRCgpKTsKKyAgICAgICAgICAgICAgICAgICAgX29wZW5UYWcoImVtYmVk IixmYWxzZSxhcGkscGNyLT5nZXRYSUQoKSk7CiAJCQkJCWNvbnN0IGdjaGFyKiBpbWFnZV9uYW1l ID0gZ2V0T2JqZWN0S2V5KGFwaSwgc3RhdGljX2Nhc3Q8Y29uc3QgZ2NoYXIqPigiZGF0YWlkIikp OwogCQkJCQlpZiAoaW1hZ2VfbmFtZSkKIAkJCQkJewpAQCAtOTg3LDcgKzY3MCw3IEBACiAgICAJ CQkJewogICAgCQkJCQlfY2xvc2VTcGFuKCk7CiAgICAJCQkJCV9jbG9zZUZpZWxkKCk7Ci0gICAJ CQkJCV9vcGVuVGFnKCJib29rbWFyayIsICIvIixmYWxzZSwgYXBpLHBjci0+Z2V0WElEKCksdHJ1 ZSk7CisgICAJCQkJCV9vcGVuVGFnKCJib29rbWFyayIsIGZhbHNlLCBhcGkscGNyLT5nZXRYSUQo KSx0cnVlKTsKICAgIAkJCQkJcmV0dXJuIHRydWU7CiAgICAJCQkJfQogCkBAIC0xMDEzLDcgKzY5 Niw3IEBACiAJCQkJCWlmKGJGb3VuZCkKIAkJCQkJewogCQkJCQkJLy90aGlzIGlzIHRoZSBzdGFy dCBvZiB0aGUgaHlwZXJsaW5rCi0gICAJCQkJCQlfb3BlblRhZygiYSIsICIiLGZhbHNlLCBhcGks cGNyLT5nZXRYSUQoKSx0cnVlKTsKKyAgIAkJCQkJCV9vcGVuVGFnKCJhIiwgdHJ1ZSwgYXBpLHBj ci0+Z2V0WElEKCksdHJ1ZSk7CiAgICAJCQkJCQltX2JJbkh5cGVybGluayA9IHRydWU7CiAgICAJ CQkJCX0KIApAQCAtMTA0MCw3ICs3MjMsNyBAQAogCQkJCQlpZihiRm91bmQpCiAJCQkJCXsKIAkJ CQkJCS8vdGhpcyBpcyB0aGUgc3RhcnQgb2YgdGhlIEFubm90YXRpb24KLSAgIAkJCQkJCV9vcGVu VGFnKCJhbm4iLCAiIixmYWxzZSwgYXBpLHBjci0+Z2V0WElEKCksdHJ1ZSk7CisgICAJCQkJCQlf b3BlblRhZygiYW5uIiwgdHJ1ZSwgYXBpLHBjci0+Z2V0WElEKCksdHJ1ZSk7CiAJCQkJCQlVVF9E RUJVR01TRygoIkRvaW5nIG9wZW4gYW5ub3RhdGlvbiBvYmplY3QgXG4iKSk7CiAgICAJCQkJCQlt X2JJbkFubm90YXRpb24gPSB0cnVlOwogICAgCQkJCQl9CkBAIC0xMDU3LDcgKzc0MCw3IEBACiAg ICAgICAgICAgICAgICAgICAgIFJERkFuY2hvciBhKCBwQVAgKTsKICAgICAgICAgICAgICAgICAg ICAgaWYoICFhLmlzRW5kKCkgKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAJCQkJCQlfb3Bl blRhZygidGV4dG1ldGEiLCAiIixmYWxzZSwgYXBpLHBjci0+Z2V0WElEKCksdHJ1ZSk7CisgICAJ CQkJCQlfb3BlblRhZygidGV4dG1ldGEiLCB0cnVlLCBhcGkscGNyLT5nZXRYSUQoKSx0cnVlKTsK ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgIHsKQEAgLTEwOTgsMTIgKzc4MSwxMCBAQAogCVVUX3JldHVybl92YWxfaWZf ZmFpbChwY3ItPmdldFR5cGUoKSA9PSBQWF9DaGFuZ2VSZWNvcmQ6OlBYVF9JbnNlcnRTdHJ1eCwg ZmFsc2UpOwogCWNvbnN0IFBYX0NoYW5nZVJlY29yZF9TdHJ1eCAqIHBjcnggPSBzdGF0aWNfY2Fz dDxjb25zdCBQWF9DaGFuZ2VSZWNvcmRfU3RydXggKj4gKHBjcik7CiAJKnBzZmggPSAwOwkJCQkJ CQkvLyB3ZSBkb24ndCBuZWVkIGl0LgotI2lmbmRlZiBFTkFCTEVfUkVTT1VSQ0VfTUFOQUdFUgog CVBUX0F0dHJQcm9wSW5kZXggYXBpID0gcGNyLT5nZXRJbmRleEFQKCk7CiAJY29uc3QgZ2NoYXIq IGltYWdlX25hbWUgPSBnZXRPYmplY3RLZXkoYXBpLCBzdGF0aWNfY2FzdDxjb25zdCBnY2hhcio+ KFBUX1NUUlVYX0lNQUdFX0RBVEFJRCkpOwogCWlmIChpbWFnZV9uYW1lKQogCQltX3BVc2VkSW1h Z2VzLmluc2VydChpbWFnZV9uYW1lKTsKLSNlbmRpZgogCiAJc3dpdGNoIChwY3J4LT5nZXRTdHJ1 eFR5cGUoKSkKIAl7CkBAIC0xMTE2LDcgKzc5Nyw3IEBACiAJCQlfY2xvc2VBbm5vdGF0aW9uKCk7 CiAJCQlfY2xvc2VCbG9jaygpOwogCQkJX2Nsb3NlU2VjdGlvbigpOwotCQkJX29wZW5UYWcoInNl Y3Rpb24iLCIiLHRydWUscGNyLT5nZXRJbmRleEFQKCkscGNyLT5nZXRYSUQoKSk7CisJCQlfb3Bl blRhZygic2VjdGlvbiIsdHJ1ZSxwY3ItPmdldEluZGV4QVAoKSxwY3ItPmdldFhJRCgpKTsKIAkJ CW1fYkluU2VjdGlvbiA9IHRydWU7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQpAQCAtMTEyNyw3ICs4 MDgsNyBAQAogICAgICAgICAgICAgX2Nsb3NlSHlwZXJsaW5rKCk7CiAJCQlfY2xvc2VBbm5vdGF0 aW9uKCk7CiAJCQlfY2xvc2VCbG9jaygpOwotCQkJX29wZW5UYWcoInRhYmxlIiwiIix0cnVlLHBj ci0+Z2V0SW5kZXhBUCgpLHBjci0+Z2V0WElEKCkpOworCQkJX29wZW5UYWcoInRhYmxlIix0cnVl LHBjci0+Z2V0SW5kZXhBUCgpLHBjci0+Z2V0WElEKCkpOwogCQkJbV9pSW5UYWJsZSsrOwogCQkJ cmV0dXJuIHRydWU7CiAJCX0KQEAgLTExMzgsNyArODE5LDcgQEAKICAgICAgICAgICAgIF9jbG9z ZUh5cGVybGluaygpOwogCQkJX2Nsb3NlQW5ub3RhdGlvbigpOwogCQkJX2Nsb3NlQmxvY2soKTsK LQkJCV9vcGVuVGFnKCJjZWxsIiwiIix0cnVlLHBjci0+Z2V0SW5kZXhBUCgpLHBjci0+Z2V0WElE KCkpOworCQkJX29wZW5UYWcoImNlbGwiLHRydWUscGNyLT5nZXRJbmRleEFQKCkscGNyLT5nZXRY SUQoKSk7CiAJCQltX2lJbkNlbGwrKzsKIAkJCXJldHVybiB0cnVlOwogCQl9CkBAIC0xMTQ5LDcg KzgzMCw3IEBACiAgICAgICAgICAgICBfY2xvc2VIeXBlcmxpbmsoKTsKIAkJCV9jbG9zZUFubm90 YXRpb24oKTsKIAkJCW1fYkluQmxvY2sgPSBmYWxzZTsKLQkJCV9vcGVuVGFnKCJmb290IiwiIix0 cnVlLHBjci0+Z2V0SW5kZXhBUCgpLHBjci0+Z2V0WElEKCkpOworCQkJX29wZW5UYWcoImZvb3Qi LHRydWUscGNyLT5nZXRJbmRleEFQKCkscGNyLT5nZXRYSUQoKSk7CiAJCQlyZXR1cm4gdHJ1ZTsK IAkJfQogCWNhc2UgUFRYX1NlY3Rpb25Bbm5vdGF0aW9uOgpAQCAtMTE3MSw3ICs4NTIsNyBAQAog ICAgICAgICAgICAgX2Nsb3NlSHlwZXJsaW5rKCk7CiAJCQlfY2xvc2VBbm5vdGF0aW9uKCk7CiAJ CQltX2JJbkJsb2NrID0gZmFsc2U7Ci0JCQlfb3BlblRhZygiZW5kbm90ZSIsIiIsdHJ1ZSxwY3It PmdldEluZGV4QVAoKSxwY3ItPmdldFhJRCgpKTsKKwkJCV9vcGVuVGFnKCJlbmRub3RlIix0cnVl LHBjci0+Z2V0SW5kZXhBUCgpLHBjci0+Z2V0WElEKCkpOwogCQkJcmV0dXJuIHRydWU7CiAJCX0K IAljYXNlIFBUWF9TZWN0aW9uVE9DOgpAQCAtMTE4Miw3ICs4NjMsNyBAQAogCQkJX2Nsb3NlQW5u b3RhdGlvbigpOwogCQkJX2Nsb3NlQmxvY2soKTsKIAkJCW1fYkluQmxvY2sgPSBmYWxzZTsKLQkJ CV9vcGVuVGFnKCJ0b2MiLCIiLHRydWUscGNyLT5nZXRJbmRleEFQKCkscGNyLT5nZXRYSUQoKSk7 CisJCQlfb3BlblRhZygidG9jIix0cnVlLHBjci0+Z2V0SW5kZXhBUCgpLHBjci0+Z2V0WElEKCkp OwogCQkJcmV0dXJuIHRydWU7CiAJCX0KIAljYXNlIFBUWF9TZWN0aW9uTWFyZ2lubm90ZToKQEAg LTExOTIsNyArODczLDcgQEAKICAgICAgICAgICAgIF9jbG9zZUh5cGVybGluaygpOwogCQkJX2Ns b3NlQW5ub3RhdGlvbigpOwogCQkJX2Nsb3NlQmxvY2soKTsKLQkJCV9vcGVuVGFnKCJtYXJnaW4i LCIiLHRydWUscGNyLT5nZXRJbmRleEFQKCkscGNyLT5nZXRYSUQoKSk7CisJCQlfb3BlblRhZygi bWFyZ2luIix0cnVlLHBjci0+Z2V0SW5kZXhBUCgpLHBjci0+Z2V0WElEKCkpOwogCQkJcmV0dXJu IHRydWU7CiAJCX0KIAljYXNlIFBUWF9TZWN0aW9uRnJhbWU6CkBAIC0xMjAyLDcgKzg4Myw3IEBA CiAgICAgICAgICAgICBfY2xvc2VIeXBlcmxpbmsoKTsKIAkJCV9jbG9zZUFubm90YXRpb24oKTsK IAkJCV9jbG9zZUJsb2NrKCk7Ci0JCQlfb3BlblRhZygiZnJhbWUiLCIiLHRydWUscGNyLT5nZXRJ bmRleEFQKCkscGNyLT5nZXRYSUQoKSk7CisJCQlfb3BlblRhZygiZnJhbWUiLHRydWUscGNyLT5n ZXRJbmRleEFQKCkscGNyLT5nZXRYSUQoKSk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCWNhc2Ug UFRYX0VuZFRhYmxlOgpAQCAtMTIzMiw3ICs5MTMsNyBAQAogICAgICAgICAgICAgX2Nsb3NlSHlw ZXJsaW5rKCk7CiAJCQlfY2xvc2VBbm5vdGF0aW9uKCk7CiAJCQlfY2xvc2VCbG9jaygpOwotCQkJ bV9waWUtPndyaXRlKCI8L2Zvb3Q+Iik7CisJCQltX3BpZS0+ZW5kRWxlbWVudCgpOwogCQkJbV9i SW5CbG9jayA9IHRydWU7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQpAQCAtMTI0NCw3ICs5MjUsNyBA QAogCQkJLy8gTGV0cyBub3QgY2xvc2Ugb3V0IGh5cGVybGlua3MgdG8gc3RhcnQgd2l0aAogCQkJ Ly8gICAgICAgICAgICBfY2xvc2VIeXBlcmxpbmsoKTsKIAkJCV9jbG9zZUJsb2NrKCk7Ci0JCQlt X3BpZS0+d3JpdGUoIjwvYW5ub3RhdGU+Iik7CisJCQltX3BpZS0+ZW5kRWxlbWVudCgpOwogCQkJ bV9iSW5CbG9jayA9IHRydWU7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQpAQCAtMTI1NSw3ICs5MzYs NyBAQAogICAgICAgICAgICAgX2Nsb3NlSHlwZXJsaW5rKCk7CiAJCQlfY2xvc2VBbm5vdGF0aW9u KCk7CiAJCQlfY2xvc2VCbG9jaygpOwotCQkJbV9waWUtPndyaXRlKCI8L2VuZG5vdGU+Iik7CisJ CQltX3BpZS0+ZW5kRWxlbWVudCgpOwogCQkJbV9iSW5CbG9jayA9IHRydWU7CiAJCQlyZXR1cm4g dHJ1ZTsKIAkJfQpAQCAtMTI2Niw3ICs5NDcsNyBAQAogICAgICAgICAgICAgX2Nsb3NlSHlwZXJs aW5rKCk7CiAJCQlfY2xvc2VBbm5vdGF0aW9uKCk7CiAJCQlfY2xvc2VCbG9jaygpOwotCQkJbV9w aWUtPndyaXRlKCI8L3RvYz4iKTsKKwkJCW1fcGllLT5lbmRFbGVtZW50KCk7CiAJCQlyZXR1cm4g dHJ1ZTsKIAkJfQogCWNhc2UgUFRYX0VuZE1hcmdpbm5vdGU6CkBAIC0xMjg1LDcgKzk2Niw3IEBA CiAgICAgICAgICAgICBfY2xvc2VIeXBlcmxpbmsoKTsKIAkJCV9jbG9zZUFubm90YXRpb24oKTsK IAkJCV9jbG9zZUJsb2NrKCk7Ci0JCQltX3BpZS0+d3JpdGUoIjwvZnJhbWU+Iik7CisJCQltX3Bp ZS0+ZW5kRWxlbWVudCgpOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KIAljYXNlIFBUWF9CbG9jazoK QEAgLTEyOTQsNyArOTc1LDggQEAKICAgICAgICAgICAgIF9jbG9zZUZpZWxkKCk7CiAJCQlfY2xv c2VIeXBlcmxpbmsoKTsKIAkJCV9jbG9zZUJsb2NrKCk7Ci0JCQlfb3BlblRhZygicCIsIiIsZmFs c2UscGNyLT5nZXRJbmRleEFQKCkscGNyLT5nZXRYSUQoKSk7CisJCQlfb3BlblRhZygicCIsdHJ1 ZSxwY3ItPmdldEluZGV4QVAoKSxwY3ItPmdldFhJRCgpKTsKKwkJCW1fcGllLT5zZXRQcmV0dHlQ cmludChmYWxzZSk7CiAJCQltX2JJbkJsb2NrID0gdHJ1ZTsKIAkJCXJldHVybiB0cnVlOwogCQl9 CkBAIC0xMzMwLDY1ICsxMDEyLDIxIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKiBiYXNlNjQt ZW5jb2RlZCBvYmplY3QgZGF0YQotICovCi1VVF9FcnJvciBzX0FiaVdvcmRfMV9MaXN0ZW5lcjo6 d3JpdGVfYmFzZTY0ICh2b2lkICogLypjb250ZXh0Ki8sIGNvbnN0IGNoYXIgKiBiYXNlNjQsIFVU X3VpbnQzMiBsZW5ndGgsIGJvb2wgLypmaW5hbCovKQotewotCW1fcGllLT53cml0ZSAoYmFzZTY0 LCBsZW5ndGgpOwotCW1fcGllLT53cml0ZSAoIlxuIik7Ci0KLQlyZXR1cm4gVVRfT0s7Ci19Ci0K LS8qIHN0YXJ0IHRhZyAmIGF0dHJpYnV0ZXMKLSAqLwotVVRfRXJyb3Igc19BYmlXb3JkXzFfTGlz dGVuZXI6OndyaXRlX3htbCAodm9pZCAqIC8qY29udGV4dCovLCBjb25zdCBjaGFyICogbmFtZSwg Y29uc3QgY2hhciAqIGNvbnN0ICogYXR0cykKLXsKLQlVVF9VVEY4U3RyaW5nIHRhZygiIDwiKTsK LQotCXRhZyArPSBuYW1lOwotCi0JY29uc3QgY2hhciAqIGNvbnN0ICogYXR0ciA9IGF0dHM7Ci0J d2hpbGUgKCphdHRyKQotCQl7Ci0JCQl0YWcgKz0gIiAiOwotCQkJdGFnICs9ICphdHRyKys7Ci0J CQl0YWcgKz0gIj1cIiI7Ci0JCQl0YWcgKz0gKmF0dHIrKzsKLQkJCXRhZyArPSAiXCIiOwotCQl9 Ci0JdGFnICs9ICI+XG4iOwotCi0JbV9waWUtPndyaXRlICh0YWcudXRmOF9zdHIgKCksIHRhZy5i eXRlTGVuZ3RoKCkpOwotCi0JcmV0dXJuIFVUX09LOwotfQotCi0vKiBlbmQgdGFnCi0gKi8KLVVU X0Vycm9yIHNfQWJpV29yZF8xX0xpc3RlbmVyOjp3cml0ZV94bWwgKHZvaWQgKiAvKmNvbnRleHQq LywgY29uc3QgY2hhciAqIG5hbWUpCi17Ci0JVVRfVVRGOFN0cmluZyB0YWcoIiA8LyIpOwotCi0J dGFnICs9IG5hbWU7Ci0JdGFnICs9ICI+XG4iOwotCi0JbV9waWUtPndyaXRlICh0YWcudXRmOF9z dHIgKCksIHRhZy5ieXRlTGVuZ3RoKCkpOwotCi0JcmV0dXJuIFVUX09LOwotfQotCiAvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCiAKIFVUX0Vycm9yIElFX0V4cF9BYmlXb3JkXzE6Ol93cml0ZURvY3Vt ZW50KHZvaWQpCiB7Ci0JX3NldHVwRmlsZSgpOworCS8vIGFsbG93IHBlb3BsZSB0byBvdmVycmlk ZSB0aGlzIG9uIHRoZSBjb21tYW5kIGxpbmUgb3Igb3RoZXJ3aXNlCisJY29uc3Qgc3RkOjpzdHJp bmcgJiBwcm9wID0gKGdldFByb3BlcnR5ICgiY29tcHJlc3MiKSk7CisJaWYgKCFwcm9wLmVtcHR5 KCkpCisJCW1fYklzQ29tcHJlc3NlZCA9IFVUX3BhcnNlQm9vbChwcm9wLmNfc3RyICgpLCBtX2JJ c0NvbXByZXNzZWQpOworCXNldHVwRmlsZShtX2JJc0NvbXByZXNzZWQpOwogCiAJbV9wTGlzdGVu ZXIgPSBuZXcgc19BYmlXb3JkXzFfTGlzdGVuZXIoZ2V0RG9jKCksdGhpcywgbV9iSXNUZW1wbGF0 ZSk7CiAJaWYgKCFtX3BMaXN0ZW5lcikKIAl7Ci0JCWNsb3NlX2dzZl9oYW5kbGUobV9vdXRwdXQp OworCQljbG9zZUhhbmRsZSgpOwogCQlyZXR1cm4gVVRfSUVfTk9NRU1PUlk7CiAJfQogCkBAIC0x NDA0LDcgKzEwNDIsNyBAQAogCQogCWRlbGV0ZSBtX3BMaXN0ZW5lcjsKIAltX3BMaXN0ZW5lciA9 IE5VTEw7Ci0JY2xvc2VfZ3NmX2hhbmRsZShtX291dHB1dCk7CisJY2xvc2VIYW5kbGUoKTsKIAog CWlmICghYlN0YXR1c1RlbGxMaXN0ZW5lcikKIAl7CkBAIC0xNDM0LDEyICsxMDcyLDEyIEBACiAJ CXBTdHlsZSA9IHZlY1N0eWxlcy5nZXROdGhJdGVtKGspOwogCQlpZiAoIWJXcm90ZU9wZW5TdHls ZVNlY3Rpb24pCiAJCXsKLQkJCW1fcGllLT53cml0ZSgiPHN0eWxlcz5cbiIpOworCQkJbV9waWUt PnN0YXJ0RWxlbWVudCgic3R5bGVzIik7CiAJCQliV3JvdGVPcGVuU3R5bGVTZWN0aW9uID0gdHJ1 ZTsKIAkJfQogCiAJCVBUX0F0dHJQcm9wSW5kZXggYXBpID0gcFN0eWxlLT5nZXRJbmRleEFQKCk7 Ci0JCV9vcGVuVGFnKCJzIiwiLyIsdHJ1ZSxhcGksMCk7CisJCV9vcGVuVGFnKCJzIixmYWxzZSxh cGksMCk7CiAJfQogCiAJVVRfR2VuZXJpY1ZlY3RvcjxQRF9TdHlsZSo+ICogcFN0eWxlcyA9IE5V TEw7CkBAIC0xNDU3LDE4ICsxMDk1LDE4IEBACiAKIAkJaWYgKCFiV3JvdGVPcGVuU3R5bGVTZWN0 aW9uKQogCQl7Ci0JCQltX3BpZS0+d3JpdGUoIjxzdHlsZXM+XG4iKTsKKwkJCW1fcGllLT5zdGFy dEVsZW1lbnQoInN0eWxlcyIpOwogCQkJYldyb3RlT3BlblN0eWxlU2VjdGlvbiA9IHRydWU7CiAJ CX0KIAogCQlQVF9BdHRyUHJvcEluZGV4IGFwaSA9IHBTdHlsZS0+Z2V0SW5kZXhBUCgpOwotCQlf b3BlblRhZygicyIsIi8iLHRydWUsYXBpLDApOworCQlfb3BlblRhZygicyIsZmFsc2UsYXBpLDAp OwogCX0KIAogCWRlbGV0ZSBwU3R5bGVzOwogCQogCWlmIChiV3JvdGVPcGVuU3R5bGVTZWN0aW9u KQotCQltX3BpZS0+d3JpdGUoIjwvc3R5bGVzPlxuIik7CisJCW1fcGllLT5lbmRFbGVtZW50KCk7 CiAKIAlyZXR1cm47CiB9CkBAIC0xNDk3LDEwICsxMTM1LDEwIEBACiAJCQogCQlpZiAoIWJXcm90 ZU9wZW5MaXN0U2VjdGlvbikKIAkJewotCQkJbV9waWUtPndyaXRlKCI8bGlzdHM+XG4iKTsKKwkJ CW1fcGllLT5zdGFydEVsZW1lbnQoImxpc3RzIik7CiAJCQliV3JvdGVPcGVuTGlzdFNlY3Rpb24g PSB0cnVlOwogCQl9Ci0JCW1fcGllLT53cml0ZSgiPGwiKTsKKwkJbV9waWUtPnN0YXJ0RWxlbWVu dCgibCIpOwogCQlmb3IgKFVUX3NpbnQzMiBpID0gMDsgaSA8ICgoVVRfc2ludDMyKXZBdHRycy5z aXplKCkpIC0gMTsKIAkJCSBpICs9IDIpCiAJCXsKQEAgLTE1MTMsMTQgKzExNTEsMTAgQEAKIAkJ CQlMQ2hlY2soImxpc3QtZGVsaW0iKSAgIHx8CiAJCQkJTENoZWNrKCJsaXN0LWRlY2ltYWwiKSkK IAkJCXsKLQkJCQltX3BpZS0+d3JpdGUoIiAiKTsKLQkJCQltX3BpZS0+d3JpdGUocy51dGY4X3N0 cigpKTsKLQkJCQltX3BpZS0+d3JpdGUoIj1cIiIpOwotCQkJCW1fcGllLT53cml0ZSh2QXR0cnNb aSsxXS51dGY4X3N0cigpKTsKLQkJCQltX3BpZS0+d3JpdGUoIlwiIik7CisJCQkJbV9waWUtPmFk ZFN0cmluZyhzLnV0Zjhfc3RyKCksIHZBdHRyc1tpKzFdLnV0Zjhfc3RyKCkpOwogCQkJfQogCQl9 Ci0JCW1fcGllLT53cml0ZSgiLz5cbiIpOworCQltX3BpZS0+ZW5kRWxlbWVudCgpOwogCQkvLyBO bywgbm8sIHlvdSBjYW4ndCBnX2ZyZWUgYXR0ciBhbmQgZXhwZWN0IGdvb2QgdGhpbmdzIHRvIGhh cHBlbi4KIAkJRlJFRVAoYXR0cjApOwogCX0KQEAgLTE1MjksNyArMTE2Myw3IEBACiAjdW5kZWYg TENoZWNrCiAKIAlpZiAoYldyb3RlT3Blbkxpc3RTZWN0aW9uKQotCQltX3BpZS0+d3JpdGUoIjwv bGlzdHM+XG4iKTsKKwkJbV9waWUtPmVuZEVsZW1lbnQoKTsKIAogCXJldHVybjsKIH0KQEAgLTE1 NjEsMjUgKzExOTUsMjQgQEAKICAgICByZXR1cm4gOwogICB9CiAKLSAgbV9waWUtPndyaXRlKCI8 bWV0YWRhdGE+XG4iKTsKKyAgbV9waWUtPnN0YXJ0RWxlbWVudCgibWV0YWRhdGEiKTsKIAogICBz dGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g cmVmLmJlZ2luKCk7CiAgIGZvciAoIDsgaXRlciAhPSByZWYuZW5kKCk7ICsraXRlciApIHsKIAkg IGlmKCAhaXRlci0+c2Vjb25kLmVtcHR5KCkgKSB7Ci0JICAgICAgbV9waWUtPndyaXRlKCAiPG0g a2V5PVwiIiApIDsKLQkgICAgICBfb3V0cHV0WE1MQ2hhciAoIGl0ZXItPmZpcnN0ICkgOwotCSAg ICAgIG1fcGllLT53cml0ZSAoICJcIj4iICkgOwotCSAgICAgIF9vdXRwdXRYTUxDaGFyICggaXRl ci0+c2Vjb25kICkgOwotCSAgICAgIG1fcGllLT53cml0ZSAoICI8L20+XG4iICkgOworCSAgICAg IG1fcGllLT5zdGFydEVsZW1lbnQoIm0iKTsKKwkJICBtX3BpZS0+YWRkU3RyaW5nKCJrZXkiLCBp dGVyLT5maXJzdCk7CisJICAgICAgbV9waWUtPmFkZFN0cmluZyhOVUxMLCBpdGVyLT5zZWNvbmQp OworCSAgICAgIG1fcGllLT5lbmRFbGVtZW50KCkgOwogCSAgfQogICB9CiAKLSAgbV9waWUtPndy aXRlKCI8L21ldGFkYXRhPlxuIik7CisgIG1fcGllLT5lbmRFbGVtZW50KCk7CiB9CiAKIHZvaWQg c19BYmlXb3JkXzFfTGlzdGVuZXI6Ol9oYW5kbGVSREYodm9pZCkKIHsKLSAgbV9waWUtPndyaXRl KCI8cmRmPlxuIik7CisgIG1fcGllLT5zdGFydEVsZW1lbnQoInJkZiIpOwogCiAgIC8vCiAgIC8v IFdhbGsgZXZlcnkgc3ViamVjdCBpbiB0aGUgUkRGIG1vZGVsCkBAIC0xNjAzLDI0ICsxMjM2LDIy IEBACiAgICAgICAgICAgUERfVVJJICAgIHByZWRpY2F0ZSA9IHBvaXRlci0+Zmlyc3Q7CiAgICAg ICAgICAgUERfT2JqZWN0IG9iamVjdCA9IHBvaXRlci0+c2Vjb25kOwogCi0gICAgICAgICAgCi0g ICAgICAgICAgbV9waWUtPndyaXRlKCI8dCAiKTsKLSAgICAgICAgICBfb3V0cHV0WE1MQXR0cmli dXRlKCAicyIsIHN1YmplY3QudG9TdHJpbmcoKSApOwotICAgICAgICAgIF9vdXRwdXRYTUxBdHRy aWJ1dGUoICJwIiwgcHJlZGljYXRlLnRvU3RyaW5nKCkgKTsKKyAgICAgICAgICBtX3BpZS0+c3Rh cnRFbGVtZW50KCJ0Iik7CisgICAgICAgICAgbV9waWUtPmFkZFN0cmluZygicyIsIHN1YmplY3Qu dG9TdHJpbmcoKSk7CisgICAgICAgICAgbV9waWUtPmFkZFN0cmluZygicCIsIHByZWRpY2F0ZS50 b1N0cmluZygpKTsKICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFt IHNzOwogICAgICAgICAgICAgICBzcyA8PCBvYmplY3QuZ2V0T2JqZWN0VHlwZSgpOwotICAgICAg ICAgICAgICBfb3V0cHV0WE1MQXR0cmlidXRlKCAib2JqZWN0dHlwZSIsIHNzLnN0cigpICk7Cisg ICAgICAgICAgICAgIG1fcGllLT5hZGRTdHJpbmcoIm9iamVjdHR5cGUiLCBzcy5zdHIoKSk7CiAg ICAgICAgICAgfQotICAgICAgICAgIF9vdXRwdXRYTUxBdHRyaWJ1dGUoICJ4c2R0eXBlIiwgICAg b2JqZWN0LmdldFhTRFR5cGUoKSApOwotICAgICAgICAgIG1fcGllLT53cml0ZSgiID4iKTsKKyAg ICAgICAgICBtX3BpZS0+YWRkU3RyaW5nKCJ4c2R0eXBlIiwgb2JqZWN0LmdldFhTRFR5cGUoKSk7 CiAgICAgICAgICAgVVRfVVRGOFN0cmluZyBlc2MgPSBvYmplY3QudG9TdHJpbmcoKS5jX3N0cigp OwotICAgICAgICAgIF9vdXRwdXRYTUxDaGFyICggZXNjLnV0Zjhfc3RyKCksIGVzYy5ieXRlTGVu Z3RoKCkgKSA7Ci0gICAgICAgICAgbV9waWUtPndyaXRlKCI8L3Q+XG4iKTsKLSAgICAgIH0KKyAg ICAgICAgICBtX3BpZS0+YWRkU3RyaW5nKE5VTEwsIGVzYy51dGY4X3N0cigpKTsKKyAgICAgICAg IG1fcGllLT5lbmRFbGVtZW50KCk7CisgICAgICAgfQogICB9CiAgIAotICBtX3BpZS0+d3JpdGUo IjwvcmRmPlxuIik7CisgIG1fcGllLT5lbmRFbGVtZW50KCk7CiB9CiAKIHZvaWQgc19BYmlXb3Jk XzFfTGlzdGVuZXI6Ol9oYW5kbGVQYWdlU2l6ZSh2b2lkKQpAQCAtMTYyOCwzMSArMTI1OSwyMSBA QAogICAvLwogICAvLyBDb2RlIHRvIHdyaXRlIG91dCB0aGUgUGFnZVNpemUgRGVmaW5pdGlvbnMg dG8gZGlzawogICAvLwotCW1fcGllLT53cml0ZSgiPHBhZ2VzaXplIHBhZ2V0eXBlPVwiIik7Ci0J bV9waWUtPndyaXRlKG1fcERvY3VtZW50LT5tX2RvY1BhZ2VTaXplLmdldFByZWRlZmluZWROYW1l KCkpOwotCW1fcGllLT53cml0ZSgiXCIiKTsKLQotCW1fcGllLT53cml0ZSgiIG9yaWVudGF0aW9u PVwiIik7Ci0JaWYobV9wRG9jdW1lbnQtPm1fZG9jUGFnZVNpemUuaXNQb3J0cmFpdCgpID09IHRy dWUpCi0JICAgICAgICBtX3BpZS0+d3JpdGUoInBvcnRyYWl0XCIiKTsKLQllbHNlCi0JICAgICAg ICBtX3BpZS0+d3JpdGUoImxhbmRzY2FwZVwiIik7CisJbV9waWUtPnN0YXJ0RWxlbWVudCgicGFn ZXNpemUiKTsKKwltX3BpZS0+YWRkU3RyaW5nKCJwYWdldHlwZSIsIG1fcERvY3VtZW50LT5tX2Rv Y1BhZ2VTaXplLmdldFByZWRlZmluZWROYW1lKCkpOworCW1fcGllLT5hZGRTdHJpbmcoIm9yaWVu dGF0aW9uIiwKKwkgICAgICAgICAgICAgICAgIChtX3BEb2N1bWVudC0+bV9kb2NQYWdlU2l6ZS5p c1BvcnRyYWl0KCkgPT0gdHJ1ZSk/CisJICAgICAgICAgICAgIAkgICAicG9ydHJhaXQiOiAibGFu ZHNjYXBlIik7CiAJVVRfRGltZW5zaW9uIGRvY1VuaXQgPSBtX3BEb2N1bWVudC0+bV9kb2NQYWdl U2l6ZS5nZXREaW1zKCk7Ci0KLQlVVF9Mb2NhbGVUcmFuc2FjdG9yIHQoTENfTlVNRVJJQywgIkMi KTsKLQltX3BpZS0+d3JpdGUoIFVUX1N0cmluZ19zcHJpbnRmKCIgd2lkdGg9XCIlZlwiIiwgbV9w RG9jdW1lbnQtPm1fZG9jUGFnZVNpemUuV2lkdGgoZG9jVW5pdCkpLmNfc3RyKCkgKTsKLQltX3Bp ZS0+d3JpdGUoIFVUX1N0cmluZ19zcHJpbnRmKCIgaGVpZ2h0PVwiJWZcIiIsbV9wRG9jdW1lbnQt Pm1fZG9jUGFnZVNpemUuSGVpZ2h0KGRvY1VuaXQpKS5jX3N0cigpICk7Ci0JbV9waWUtPndyaXRl KCIgdW5pdHM9XCIiKTsKLQltX3BpZS0+d3JpdGUoVVRfZGltZW5zaW9uTmFtZShkb2NVbml0KSk7 Ci0JbV9waWUtPndyaXRlKCJcIiIpOwotCW1fcGllLT53cml0ZSggVVRfU3RyaW5nX3NwcmludGYo IiBwYWdlLXNjYWxlPVwiJWZcIi8+XG4iLG1fcERvY3VtZW50LT5tX2RvY1BhZ2VTaXplLmdldFNj YWxlKCkpLmNfc3RyKCkgKTsKKwltX3BpZS0+YWRkRmxvYXQoIndpZHRoIiwgbV9wRG9jdW1lbnQt Pm1fZG9jUGFnZVNpemUuV2lkdGgoZG9jVW5pdCkpOworCW1fcGllLT5hZGRGbG9hdCgiaGVpZ2h0 IiwgbV9wRG9jdW1lbnQtPm1fZG9jUGFnZVNpemUuSGVpZ2h0KGRvY1VuaXQpKTsKKwltX3BpZS0+ YWRkU3RyaW5nKCJ1bml0cyIsIFVUX2RpbWVuc2lvbk5hbWUoZG9jVW5pdCkpOworCW1fcGllLT5h ZGRGbG9hdCgicGFnZS1zY2FsZSIsIG1fcERvY3VtZW50LT5tX2RvY1BhZ2VTaXplLmdldFNjYWxl KCkpOworCW1fcGllLT5lbmRFbGVtZW50KCk7CiB9CiAKIHZvaWQgc19BYmlXb3JkXzFfTGlzdGVu ZXI6Ol9oYW5kbGVEYXRhSXRlbXModm9pZCkKIHsKLSNpZmRlZiBFTkFCTEVfUkVTT1VSQ0VfTUFO QUdFUgotCW1fcERvY3VtZW50LT5yZXNvdXJjZU1hbmFnZXIoKS53cml0ZV94bWwgKDAsICp0aGlz KTsKLSNlbHNlCiAJYm9vbCBiV3JvdGVPcGVuRGF0YVNlY3Rpb24gPSBmYWxzZTsKIAogCWNvbnN0 IGNoYXIgKiBzek5hbWU7CkBAIC0xNjgyLDcgKzEzMDMsNyBAQAogCiAJCWlmICghYldyb3RlT3Bl bkRhdGFTZWN0aW9uKQogCQl7Ci0JCQltX3BpZS0+d3JpdGUoIjxkYXRhPlxuIik7CisJCQltX3Bp ZS0+c3RhcnRFbGVtZW50KCJkYXRhIik7CiAJCQliV3JvdGVPcGVuRGF0YVNlY3Rpb24gPSB0cnVl OwogCQl9CiAKQEAgLTE3MjMsMjAgKzEzNDQsMTcgQEAKIAogCSAgIAlpZiAoc3RhdHVzKQogCSAg ICB7Ci0JICAgCQltX3BpZS0+d3JpdGUoIjxkIG5hbWU9XCIiKTsKLQkJCS8vIFdlIGFzc3VtZSB0 aGF0IFVUX2djaGFyIGlzIGVxdWl2YWxlbnQgdG8gY2hhci4KLQkJCS8vIFRoYXQncyBub3QgcmVh bGx5IGEgZ29vZCBhc3N1bXB0aW9uLCBidXQsIGhleS4KLQkJCS8vIFRPRE86IG1ha2Ugc3pOYW1l LCBzek1pbWVUeXBlIGJlIFVUX2djaGFycy4KLQkJCV9vdXRwdXRYTUxDaGFyKHN6TmFtZSwgc3Ry bGVuKHN6TmFtZSkpOworCSAgIAkJbV9waWUtPnN0YXJ0RWxlbWVudCgiZCIpOworCQkJbV9waWUt PmFkZFN0cmluZygibmFtZSIsIHN6TmFtZSk7CiAJCSAgIAlpZiAoIW1pbWVUeXBlLmVtcHR5KCkp CiAJCQl7Ci0JCQkgICBtX3BpZS0+d3JpdGUoIlwiIG1pbWUtdHlwZT1cIiIpOwotCQkJICAgX291 dHB1dFhNTENoYXIobWltZVR5cGUuY19zdHIoKSwgbWltZVR5cGUuc2l6ZSgpKTsKKwkJCSAgIG1f cGllLT5hZGRTdHJpbmcoIm1pbWUtdHlwZSIsIG1pbWVUeXBlLmNfc3RyKCkpOwogCQkJfQogCQkg ICAJaWYgKGVuY29kZWQpCiAJCSAgICB7Ci0JCQkgICAJbV9waWUtPndyaXRlKCJcIiBiYXNlNjQ9 XCJ5ZXNcIj5cbiIpOwotCQkJCS8vIGJyZWFrIHVwIHRoZSBCYXNlNjQgYmxvYiBhcyBhIHNlcmll cyBsaW5lcworCQkJCXN0ZDo6b3N0cmluZ3N0cmVhbSBidWY7CisJCQkgICAJbV9waWUtPmFkZFN0 cmluZygiYmFzZTY0IiwgInllcyIpOworCQkJCSAgIC8vIGJyZWFrIHVwIHRoZSBCYXNlNjQgYmxv YiBhcyBhIHNlcmllcyBsaW5lcwogCQkJCS8vIGxpa2UgTUlNRSBkb2VzLgogCiAJCQkJVVRfdWlu dDMyIGpMaW1pdCA9IGJiRW5jb2RlZC5nZXRMZW5ndGgoKTsKQEAgLTE3NDUsMjIgKzEzNjMsMjEg QEAKIAkJCQlmb3IgKGo9MDsgajxqTGltaXQ7IGorPTcyKQogCQkJCXsKIAkJCQkJalNpemUgPSBV VF9NSU4oNzIsKGpMaW1pdC1qKSk7Ci0JCQkJCW1fcGllLT53cml0ZShyZWludGVycHJldF9jYXN0 PGNvbnN0IGNoYXIgKj4oYmJFbmNvZGVkLmdldFBvaW50ZXIoaikpLGpTaXplKTsKLQkJCQkJbV9w aWUtPndyaXRlKCJcbiIpOworCQkJCQlidWYud3JpdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj aGFyICo+KGJiRW5jb2RlZC5nZXRQb2ludGVyKGopKSxqU2l6ZSk7CisJCQkJCWJ1ZiA8PCBzdGQ6 OmVuZGw7CiAJCQkJfQogCQkJfQogCQkgICAJZWxzZQogCQkgICAgewotCQkgICAgIAltX3BpZS0+ d3JpdGUoIlwiIGJhc2U2ND1cIm5vXCI+XG4iKTsKLQkJCSAgIAltX3BpZS0+d3JpdGUocmVpbnRl cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYmJFbmNvZGVkLmdldFBvaW50ZXIoMCkpLCBiYkVuY29k ZWQuZ2V0TGVuZ3RoKCkpOworCQkJICAgCW1fcGllLT5hZGRTdHJpbmcoImJhc2U2NCIsICJubyIp OworCQkJICAgCW1fcGllLT5hZGRTdHJpbmcoTlVMTCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj aGFyKj4oYmJFbmNvZGVkLmdldFBvaW50ZXIoMCkpKTsKIAkJCX0KLQkJCW1fcGllLT53cml0ZSgi PC9kPlxuIik7CisJCQltX3BpZS0+ZW5kRWxlbWVudCgpOwogCQl9CiAJfQogCiAJaWYgKGJXcm90 ZU9wZW5EYXRhU2VjdGlvbikKLQkJbV9waWUtPndyaXRlKCI8L2RhdGE+XG4iKTsKLSNlbmRpZgor CQltX3BpZS0+ZW5kRWxlbWVudCgpOwogfQogCiB2b2lkIHNfQWJpV29yZF8xX0xpc3RlbmVyOjpf aGFuZGxlUmV2aXNpb25zKHZvaWQpCkBAIC0xNzgwLDM0ICsxMzk3LDMwIEBACiAJCQogCQlpZiAo IWJXcm90ZU9wZW5SZXZpc2lvbnNTZWN0aW9uKQogCQl7Ci0JCQlzID0gVVRfc3RkX3N0cmluZ19z cHJpbnRmKCI8cmV2aXNpb25zIHNob3c9XCIlZFwiIG1hcms9XCIlZFwiIHNob3ctbGV2ZWw9XCIl ZFwiIGF1dG89XCIlZFwiPlxuIiwKLQkJCQkJCQkgIG1fcERvY3VtZW50LT5pc1Nob3dSZXZpc2lv bnMoKSwKLQkJCQkJCQkgIG1fcERvY3VtZW50LT5pc01hcmtSZXZpc2lvbnMoKSwKLQkJCQkJCQkg IG1fcERvY3VtZW50LT5nZXRTaG93UmV2aXNpb25JZCgpLAotCQkJCQkJCSAgbV9wRG9jdW1lbnQt PmlzQXV0b1JldmlzaW9uaW5nKCkpOwotCQkJCi0JCQltX3BpZS0+d3JpdGUocy5jX3N0cigpKTsK KwkJCW1fcGllLT5zdGFydEVsZW1lbnQoInJldmlzaW9ucyIpOworCQkJbV9waWUtPmFkZEJvb2wo InNob3ciLCBtX3BEb2N1bWVudC0+aXNTaG93UmV2aXNpb25zKCkpOworCQkJbV9waWUtPmFkZEJv b2woIm1hcmsiLCBtX3BEb2N1bWVudC0+aXNNYXJrUmV2aXNpb25zKCkpOworCQkJbV9waWUtPmFk ZEludCgic2hvdy1sZXZlbCIsIG1fcERvY3VtZW50LT5nZXRTaG93UmV2aXNpb25JZCgpKTsKKwkJ CW1fcGllLT5hZGRCb29sKCJhdXRvIiwgbV9wRG9jdW1lbnQtPmlzQXV0b1JldmlzaW9uaW5nKCkp OwogCQkJYldyb3RlT3BlblJldmlzaW9uc1NlY3Rpb24gPSB0cnVlOwogCQl9CiAKLQkJcyA9IFVU X3N0ZF9zdHJpbmdfc3ByaW50ZigiPHIgaWQ9XCIldVwiIHRpbWUtc3RhcnRlZD1cIiVsZFwiIHZl cnNpb249XCIldVwiPiIsCi0JCQkJCQkgIHBSZXYtPmdldElkKCksCi0JCQkJCQkgIHBSZXYtPmdl dFN0YXJ0VGltZSgpLAotCQkJCQkJICBwUmV2LT5nZXRWZXJzaW9uKCkpOwotCQkKLQkJbV9waWUt PndyaXRlKHMuY19zdHIoKSk7CisJCW1fcGllLT5zdGFydEVsZW1lbnQoInIiKTsKKwkJbV9waWUt PmFkZFVpbnQoImlkIixwUmV2LT5nZXRJZCgpKTsKKwkJbV9waWUtPmFkZExpbnQoInRpbWUtc3Rh cnRlZCIsIHBSZXYtPmdldFN0YXJ0VGltZSgpKTsKKwkJbV9waWUtPmFkZFVpbnQoInZlcnNpb24i LCBwUmV2LT5nZXRWZXJzaW9uKCkpOwogCiAJCWlmKHBSZXYtPmdldERlc2NyaXB0aW9uKCkpCiAJ CXsKLQkJCV9vdXRwdXREYXRhKHBSZXYtPmdldERlc2NyaXB0aW9uKCksIFVUX1VDUzRfc3RybGVu KHBSZXYtPmdldERlc2NyaXB0aW9uKCkpKTsKKwkJCW1fcGllLT5hZGRTdHJpbmcoTlVMTCwgcFJl di0+Z2V0RGVzY3JpcHRpb24oKSwgVVRfVUNTNF9zdHJsZW4ocFJldi0+Z2V0RGVzY3JpcHRpb24o KSkpOwogCQl9CiAJCQogCi0JCW1fcGllLT53cml0ZSgiPC9yPlxuIik7CisJCW1fcGllLT5lbmRF bGVtZW50KCk7CiAJfQogCiAJaWYgKGJXcm90ZU9wZW5SZXZpc2lvbnNTZWN0aW9uKQotCQltX3Bp ZS0+d3JpdGUoIjwvcmV2aXNpb25zPlxuIik7CisJCW1fcGllLT5lbmRFbGVtZW50KCk7CiAKIAly ZXR1cm47CiB9CkBAIC0xODMzLDI0ICsxNDQ2LDI1IEBACiAJCQogCQlpZiAoIWJXcm90ZU9wZW5T ZWN0aW9uKQogCQl7Ci0JCQlVVF9VVEY4U3RyaW5nX3NwcmludGYocywgIjxoaXN0b3J5IHZlcnNp b249XCIlZFwiIGVkaXQtdGltZT1cIiVkXCIgbGFzdC1zYXZlZD1cIiVkXCIgdWlkPVwiJXNcIj5c biIsCi0JCQkJCQkJICBtX3BEb2N1bWVudC0+Z2V0RG9jVmVyc2lvbigpLAotCQkJCQkJCSAgc3Rh dGljX2Nhc3Q8VVRfc2ludDMyPihtX3BEb2N1bWVudC0+Z2V0RWRpdFRpbWUoKSksCi0JCQkJCQkJ ICBzdGF0aWNfY2FzdDxVVF9zaW50MzI+KG1fcERvY3VtZW50LT5nZXRMYXN0U2F2ZWRUaW1lKCkp LAotCQkJCQkJCSAgbV9wRG9jdW1lbnQtPmdldERvY1VVSURTdHJpbmcoKSk7Ci0JCQkKLQkJCW1f cGllLT53cml0ZShzLnV0Zjhfc3RyKCkpOworCQkJbV9waWUtPnN0YXJ0RWxlbWVudCgiaGlzdG9y eSIpOworCQkJbV9waWUtPmFkZEludCgidmVyc2lvbiIsIG1fcERvY3VtZW50LT5nZXREb2NWZXJz aW9uKCkpOworCQkJbV9waWUtPmFkZEludCgiZWRpdC10aW1lIiwgc3RhdGljX2Nhc3Q8VVRfc2lu dDMyPihtX3BEb2N1bWVudC0+Z2V0RWRpdFRpbWUoKSkpOworCQkJbV9waWUtPmFkZEludCgibGFz dC1zYXZlZCIsIHN0YXRpY19jYXN0PFVUX3NpbnQzMj4obV9wRG9jdW1lbnQtPmdldExhc3RTYXZl ZFRpbWUoKSkpOworCQkJbV9waWUtPmFkZFN0cmluZygidWlkIiwgbV9wRG9jdW1lbnQtPmdldERv Y1VVSURTdHJpbmcoKSk7CiAJCQliV3JvdGVPcGVuU2VjdGlvbiA9IHRydWU7CiAJCX0KIAotCQlV VF9VVEY4U3RyaW5nX3NwcmludGYocywgIjx2ZXJzaW9uIGlkPVwiJWRcIiBzdGFydGVkPVwiJWRc IiB1aWQ9XCIlc1wiIGF1dG89XCIlZFwiIHRvcC14aWQ9XCIlZFwiLz5cbiIsCi0JCQkJCQkgIGlW ZXJzaW9uLCBzdGF0aWNfY2FzdDxVVF9zaW50MzI+KHRTdGFydGVkKSwgaFVpZC51dGY4X3N0cigp LGJBdXRvLCBpWElEKTsKLQkJCi0JCW1fcGllLT53cml0ZShzLnV0Zjhfc3RyKCkpOworCQltX3Bp ZS0+c3RhcnRFbGVtZW50KCJ2ZXJzaW9uIik7CisJCW1fcGllLT5hZGRJbnQoImlkIiwgaVZlcnNp b24pOworCQltX3BpZS0+YWRkSW50KCJzdGFydGVkIiwgc3RhdGljX2Nhc3Q8VVRfc2ludDMyPih0 U3RhcnRlZCkpOworCQltX3BpZS0+YWRkU3RyaW5nKCJ1aWQiLCBoVWlkLnV0Zjhfc3RyKCkpOwor CQltX3BpZS0+YWRkQm9vbCgiYXV0byIsIGJBdXRvKTsKKwkJbV9waWUtPmFkZEludCgidG9wLXhp ZCIsIGlYSUQpOworCQltX3BpZS0+ZW5kRWxlbWVudCgpOwogCX0KIAogCWlmIChiV3JvdGVPcGVu U2VjdGlvbikKLQkJbV9waWUtPndyaXRlKCI8L2hpc3Rvcnk+XG4iKTsKKwkJbV9waWUtPmVuZEVs ZW1lbnQoKTsKIAogCXJldHVybjsKIH0KQEAgLTE4NjAsMjEgKzE0NzQsMTggQEAKIAlVVF9zaW50 MzIgbkF1dGhvcnMgPSBtX3BEb2N1bWVudC0+IGdldE51bUF1dGhvcnMoKTsKIAlpZihuQXV0aG9y cyA8PSAwKQogCQlyZXR1cm47Ci0JbV9waWUtPndyaXRlKCI8YXV0aG9ycz5cbiIpOworCW1fcGll LT5zdGFydEVsZW1lbnQoImF1dGhvcnMiKTsKIAlVVF9zaW50MzIgaSA9IDA7CiAJVVRfU3RyaW5n IHNWYWw7CiAJZm9yKGk9MDtpPG5BdXRob3JzO2krKykKIAl7CiAJCXBwX0F1dGhvciAqIHBBdXRo b3IgPSBtX3BEb2N1bWVudC0+Z2V0TnRoQXV0aG9yKGkpOwotCQltX3BpZS0+d3JpdGUoIjxhdXRo b3IgaWQ9XCIiKTsKLQkJVVRfU3RyaW5nX3NwcmludGYoc1ZhbCwiJWQiLHBBdXRob3ItPmdldEF1 dGhvckludCgpKTsKLQkJbV9waWUtPndyaXRlKHNWYWwuY19zdHIoKSk7Ci0JCW1fcGllLT53cml0 ZSgiXCIgIik7CisJCW1fcGllLT5zdGFydEVsZW1lbnQoImF1dGhvciIpOworCQltX3BpZS0+YWRk SW50KCJpZCIsIHBBdXRob3ItPmdldEF1dGhvckludCgpKTsKIAkJUFBfQXR0clByb3AgKiBwQVAg PSBwQXV0aG9yLT5nZXRBdHRyUHJvcCgpOwogCQlpZihwQVAtPmdldFByb3BlcnR5Q291bnQoKT4w KQogCQl7Ci0JCQltX3BpZS0+d3JpdGUoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KFBUX1BST1BT X0FUVFJJQlVURV9OQU1FKSk7Ci0JCQltX3BpZS0+d3JpdGUoIj1cIiIpOworCQkJc3RkOjpvc3Ry aW5nc3RyZWFtIGJ1ZjsKIAkJCWNvbnN0IGdjaGFyICogc3pOYW1lID0gTlVMTDsKIAkJCWNvbnN0 IGdjaGFyICogc3pWYWx1ZSA9IE5VTEw7CiAJCQlVVF91aW50MzIgaiA9IDA7CkBAIC0xODgzLDE2 ICsxNDk0LDE0IEBACiAJCQkJaWYgKHN6TmFtZSAmJiAqc3pOYW1lICYmIHN6VmFsdWUgJiYgKnN6 VmFsdWUpCiAJCQkJewogCQkJCQlpZihqPjEpCi0JCQkJCQltX3BpZS0+d3JpdGUoIjsgIik7Ci0J CQkJCW1fcGllLT53cml0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3pOYW1lKSk7Ci0JCQkJ CW1fcGllLT53cml0ZSgiOiIpOwotCQkJCQlfb3V0cHV0WE1MQ2hhcihzelZhbHVlLCBzdHJsZW4o c3pWYWx1ZSkpOworCQkJCQkJYnVmIDw8ICI7ICI7CisJCQkJCWJ1ZiA8PCBzek5hbWUgPDwgIjoi IDw8IHN6VmFsdWU7CiAJCQkJfQogCQkJfQotCQltX3BpZS0+d3JpdGUoIlwiIik7CisJCQltX3Bp ZS0+YWRkU3RyaW5nKFBUX1BST1BTX0FUVFJJQlVURV9OQU1FLGJ1Zi5zdHIoKSk7CiAJCX0KLQkJ bV9waWUtPndyaXRlKCIvPlxuIik7CisJCW1fcGllLT5lbmRFbGVtZW50KCk7CiAJfQotCW1fcGll LT53cml0ZSgiPC9hdXRob3JzPlxuIik7CisJbV9waWUtPmVuZEVsZW1lbnQoKTsKIH0KIApJbmRl eDogc3JjL3dwL2ltcGV4cC94cC9pZV9leHBfQWJpV29yZF8xLmgKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3Jj L3dwL2ltcGV4cC94cC9pZV9leHBfQWJpV29yZF8xLmgJKHLDqXZpc2lvbiAzNTA3MikKKysrIHNy Yy93cC9pbXBleHAveHAvaWVfZXhwX0FiaVdvcmRfMS5oCShjb3BpZSBkZSB0cmF2YWlsKQpAQCAt MjEsOCArMjEsOSBAQAogI2lmbmRlZiBJRV9FWFBfQUJJV09SRF8xX0gKICNkZWZpbmUgSUVfRVhQ X0FCSVdPUkRfMV9ICiAKLSNpbmNsdWRlICJpZV9leHAuaCIKKyNpbmNsdWRlICJpZV9leHBfWE1M LmgiCiAjaW5jbHVkZSAicGxfTGlzdGVuZXIuaCIKKy8vI2luY2x1ZGUgPGdzZi9nc2Ytb3V0cHV0 LWxpYnhtbC5oPgogY2xhc3MgUERfRG9jdW1lbnQ7CiBjbGFzcyBzX0FiaVdvcmRfMV9MaXN0ZW5l cjsKIApAQCAtNDYsNyArNDcsNyBAQAogCQkJCQkJCQkJCUlFX0V4cCAqKiBwcGllKTsKIH07CiAK LWNsYXNzIEFCSV9FWFBPUlQgSUVfRXhwX0FiaVdvcmRfMSA6IHB1YmxpYyBJRV9FeHAKK2NsYXNz IEFCSV9FWFBPUlQgSUVfRXhwX0FiaVdvcmRfMSA6IHB1YmxpYyBJRV9FeHBfWE1MCiB7CiBwdWJs aWM6CiAJSUVfRXhwX0FiaVdvcmRfMShQRF9Eb2N1bWVudCAqIHBEb2N1bWVudCwgYm9vbCBpc1Rl bXBsYXRlID0gZmFsc2UsIGJvb2wgaXNDb21wcmVzc2VkID0gZmFsc2UpOwpAQCAtNTQsMTUgKzU1 LDExIEBACiAKIHByb3RlY3RlZDoKIAl2aXJ0dWFsIFVUX0Vycm9yCV93cml0ZURvY3VtZW50KHZv aWQpOwotCXZvaWQgICAgICAgICAgICAgICAgICAgIF9zZXR1cEZpbGUodm9pZCk7Ci0JdmlydHVh bCBVVF91aW50MzIJX3dyaXRlQnl0ZXMoY29uc3QgVVRfQnl0ZSAqIHBCeXRlcywgVVRfdWludDMy IGxlbmd0aCk7CiAKIHByaXZhdGU6CiAJYm9vbCBtX2JJc1RlbXBsYXRlOwogCWJvb2wgbV9iSXND b21wcmVzc2VkOwogCXNfQWJpV29yZF8xX0xpc3RlbmVyICoJbV9wTGlzdGVuZXI7Ci0KLQlHc2ZP dXRwdXQgKiBtX291dHB1dDsKIH07CiAKICNlbmRpZiAvKiBJRV9FWFBfQUJJV09SRF8xX0ggKi8K SW5kZXg6IHNyYy93cC9pbXBleHAveHAvaWVfZXhwX1hNTC5jcHAKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3Jj L3dwL2ltcGV4cC94cC9pZV9leHBfWE1MLmNwcAkocsOpdmlzaW9uIDApCisrKyBzcmMvd3AvaW1w ZXhwL3hwL2llX2V4cF9YTUwuY3BwCShjb3BpZSBkZSB0cmF2YWlsKQpAQCAtMCwwICsxLDE4OCBA QAorLyogQWJpV29yZAorICogQ29weXJpZ2h0IChDKSAyMDE1IEplYW4gQnJlZm9ydCA8amVhbi5i cmVmb3J0QG5vcm1hbGVzdXAub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICog b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEK KyAqIDAyMTEwLTEzMDEgVVNBLgorICovCisjaW5jbHVkZSAiaWVfZXhwX1hNTC5oIgorI2luY2x1 ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSAidXRfZGVidWdtc2cuaCIKKworSUVfRXhwX1hNTDo6SUVf RXhwX1hNTChQRF9Eb2N1bWVudCAqIHBEb2N1bWVudCk6CisJSUVfRXhwIChwRG9jdW1lbnQpLCBt X3ppcCgwKSwgbV94bWwoMCkKK3sKK30KKworSUVfRXhwX1hNTDo6fklFX0V4cF9YTUwoKQorewor fQorCit2b2lkIElFX0V4cF9YTUw6OnNldHVwRmlsZShib29sIGNvbXByZXNzZWQpCit7CisJVVRf QVNTRVJUX0hBUk1MRVNTICghbV94bWwpOworCWlmIChjb21wcmVzc2VkKQorCXsKKwkJbV96aXAg PSBnc2Zfb3V0cHV0X2d6aXBfbmV3KGdldEZwICgpLCBOVUxMKTsKKwkJbV94bWwgPSBnc2ZfeG1s X291dF9uZXcgKG1femlwKTsKKwl9CisJZWxzZQorCXsKKwkJbV96aXAgPSBHU0ZfT1VUUFVUKGdf b2JqZWN0X3JlZihnZXRGcCAoKSkpOworCQltX3htbCA9IGdzZl94bWxfb3V0X25ldyAoZ2V0RnAo KSk7CisJfQorfQorCit2b2lkIElFX0V4cF9YTUw6OmNsb3NlSGFuZGxlKCkKK3sKKwlpZiAobV94 bWwpIHsKKwkJZ19vYmplY3RfdW5yZWYobV94bWwpOworCQltX3htbCA9IDA7CisJfQorCWlmICht X3ppcCkgeworCQlnX29iamVjdF91bnJlZihtX3ppcCk7CisJCW1femlwID0gMDsKKwl9Cit9CisK K3ZvaWQgSUVfRXhwX1hNTDo6c2V0RG9jVHlwZShjaGFyIGNvbnN0ICpkb2N0eXBlKQoreworCWdz Zl94bWxfb3V0X3NldF9kb2NfdHlwZShtX3htbCwgZG9jdHlwZSk7Cit9CisKK3ZvaWQgSUVfRXhw X1hNTDo6c3RhcnRFbGVtZW50KGNoYXIgY29uc3QgKm5hbWUpCit7CisJZ3NmX3htbF9vdXRfc3Rh cnRfZWxlbWVudChtX3htbCwgbmFtZSk7Cit9CisKK3ZvaWQgSUVfRXhwX1hNTDo6ZW5kRWxlbWVu dCh2b2lkKQoreworCWdzZl94bWxfb3V0X2VuZF9lbGVtZW50KG1feG1sKTsKK30KKwordm9pZCBJ RV9FeHBfWE1MOjphZGRCb29sKGNoYXIgY29uc3QgKmlkLCBib29sIHZhbHVlKQoreworCWdzZl94 bWxfb3V0X2FkZF9ib29sKG1feG1sLCBpZCwgdmFsdWUpOworfQorCit2b2lkIElFX0V4cF9YTUw6 OmFkZENvbW1lbnQoY2hhciBjb25zdCAqY29tbWVudCkKK3sKKwlnc2Zfb3V0cHV0X3dyaXRlKG1f emlwLCA1LCByZWludGVycHJldF9jYXN0PGNvbnN0IGd1aW50OCo+KCI8IS0tICIpKTsKKwlnc2Zf b3V0cHV0X3dyaXRlKG1femlwLCBzdHJsZW4oY29tbWVudCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u c3QgZ3VpbnQ4Kj4oY29tbWVudCkpOworCWdzZl9vdXRwdXRfd3JpdGUobV96aXAsIDUsIHJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgZ3VpbnQ4Kj4oIiAtLT5cbiIpKTsKK30KKwordm9pZCBJRV9FeHBf WE1MOjphZGRGbG9hdChjaGFyIGNvbnN0ICppZCwgZG91YmxlIHZhbHVlLCBpbnQgcHJlY2lzaW9u KQoreworCWdzZl94bWxfb3V0X2FkZF9mbG9hdChtX3htbCwgaWQsIHZhbHVlLCBwcmVjaXNpb24p OworfQorCit2b2lkIElFX0V4cF9YTUw6OmFkZEludChjaGFyIGNvbnN0ICppZCwgaW50IHZhbHVl KQoreworCWdzZl94bWxfb3V0X2FkZF9pbnQobV94bWwsIGlkLCB2YWx1ZSk7Cit9CisKK3ZvaWQg SUVfRXhwX1hNTDo6YWRkTGludChjaGFyIGNvbnN0ICppZCwgbG9uZyB2YWx1ZSkKK3sKKwlzdGQ6 Om9zdHJpbmdzdHJlYW0gYnVmOworCWJ1ZiA8PCB2YWx1ZTsKKwlnc2ZfeG1sX291dF9hZGRfY3N0 cl91bmNoZWNrZWQobV94bWwsIGlkLCBidWYuc3RyKCkuY19zdHIoKSk7Cit9CisKK3ZvaWQgSUVf RXhwX1hNTDo6YWRkTHVpbnQoY2hhciBjb25zdCAqaWQsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7 CisJc3RkOjpvc3RyaW5nc3RyZWFtIGJ1ZjsKKwlidWYgPDwgdmFsdWU7CisJZ3NmX3htbF9vdXRf YWRkX2NzdHJfdW5jaGVja2VkKG1feG1sLCBpZCwgYnVmLnN0cigpLmNfc3RyKCkpOworfQorCit2 b2lkIElFX0V4cF9YTUw6OmFkZFN0cmluZyhjaGFyIGNvbnN0ICppZCwgY2hhciBjb25zdCAqdmFs dWUpCit7CisJZ3NmX3htbF9vdXRfYWRkX2NzdHIobV94bWwsIGlkLCB2YWx1ZSk7Cit9CisKK3Zv aWQgSUVfRXhwX1hNTDo6YWRkU3RyaW5nKGNoYXIgY29uc3QgKmlkLCBzdGQ6OnN0cmluZyBjb25z dCAmdmFsdWUpCit7CisJZ3NmX3htbF9vdXRfYWRkX2NzdHIobV94bWwsIGlkLCB2YWx1ZS5jX3N0 cigpKTsKK30KKwordm9pZCBJRV9FeHBfWE1MOjphZGRTdHJpbmcoY2hhciBjb25zdCAqaWQsIFVU X1VDU0NoYXIgY29uc3QgKmRhdGEsIGludCBsZW5ndGgpCit7CisJVVRfVVRGOFN0cmluZyBzQnVm OworCWNvbnN0IFVUX1VDU0NoYXIgKiBwRGF0YTsKKworCVVUX3JldHVybl9pZl9mYWlsKHNpemVv ZihVVF9CeXRlKSA9PSBzaXplb2YoY2hhcikpOworCXNCdWYucmVzZXJ2ZShsZW5ndGgpOworCisJ Zm9yIChwRGF0YT1kYXRhOyAocERhdGE8ZGF0YStsZW5ndGgpOyAvKiovKQorCXsKKwkJc3dpdGNo ICgqcERhdGEpCisJCXsKKwkJY2FzZSAnPCc6CisJCQlzQnVmICs9ICImbHQ7IjsKKwkJCXBEYXRh Kys7CisJCQlicmVhazsKKworCQljYXNlICc+JzoKKwkJCXNCdWYgKz0gIiZndDsiOworCQkJcERh dGErKzsKKwkJCWJyZWFrOworCisJCWNhc2UgJyYnOgorCQkJc0J1ZiArPSAiJmFtcDsiOworCQkJ cERhdGErKzsKKwkJCWJyZWFrOworCisJCWNhc2UgVUNTX0xGOgkJCQkJLy8gTEYgLS0gcmVwcmVz ZW50aW5nIGEgRm9yY2VkLUxpbmUtQnJlYWsKKwkJCXNCdWYgKz0gIjxici8+IjsKKwkJCXBEYXRh Kys7CisJCQlicmVhazsKKworCQljYXNlIFVDU19WVEFCOgkJCQkJLy8gVlRBQiAtLSByZXByZXNl bnRpbmcgYSBGb3JjZWQtQ29sdW1uLUJyZWFrCisJCQlzQnVmICs9ICI8Y2JyLz4iOworCQkJcERh dGErKzsKKwkJCWJyZWFrOworCisJCWNhc2UgVUNTX1RBQjoKKwkJCXNCdWYgKz0gIlx0IjsKKwkJ CXBEYXRhKys7CisJCQlicmVhazsKKworCQljYXNlIFVDU19GRjoJCQkJCS8vIEZGIC0tIHJlcHJl c2VudGluZyBhIEZvcmNlZC1QYWdlLUJyZWFrCisJCQlzQnVmICs9ICI8cGJyLz4iOworCQkJcERh dGErKzsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlpZiAoKnBEYXRhIDwgMHgyMCkgICAg ICAgICAvLyBTaWxlbnRseSBlYXQgdGhlc2UgY2hhcmFjdGVycy4KKwkJCQlwRGF0YSsrOworCQkJ ZWxzZQorCQkJCXsKKwkJCQkJc0J1Zi5hcHBlbmRVQ1M0IChwRGF0YSwgMSk7CisJCQkJCXBEYXRh Kys7CisJCQkJfQorCQl9CisJfQorCWdzZl94bWxfb3V0X2FkZF9jc3RyX3VuY2hlY2tlZChtX3ht bCwgaWQsIHNCdWYudXRmOF9zdHIoKSk7Cit9CisKK3ZvaWQgSUVfRXhwX1hNTDo6YWRkVWludChj aGFyIGNvbnN0ICppZCwgdW5zaWduZWQgdmFsdWUpCit7CisJZ3NmX3htbF9vdXRfYWRkX3VpbnQo bV94bWwsIGlkLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSUVfRXhwX1hNTDo6c2V0UHJldHR5UHJpbnQo Ym9vbCBwcmV0dHkpCit7CisJZ19vYmplY3Rfc2V0IChtX3htbCwgInByZXR0eS1wcmludCIsIHBy ZXR0eSwgTlVMTCk7Cit9CkluZGV4OiBzcmMvd3AvaW1wZXhwL3hwL2llX2V4cF9YTUwuaAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBzcmMvd3AvaW1wZXhwL3hwL2llX2V4cF9YTUwuaAkocsOpdmlzaW9uIDApCisr KyBzcmMvd3AvaW1wZXhwL3hwL2llX2V4cF9YTUwuaAkoY29waWUgZGUgdHJhdmFpbCkKQEAgLTAs MCArMSw1OCBAQAorLyogQWJpV29yZAorICogQ29weXJpZ2h0IChDKSAyMDE1IEplYW4gQnJlZm9y dCA8amVhbi5icmVmb3J0QG5vcm1hbGVzdXAub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK KyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBLgorICovCisKKworI2lmbmRlZiBJRV9FWFBfWE1M X0gKKyNkZWZpbmUgSUVfRVhQX1hNTF9ICisKKyNpbmNsdWRlICJpZV9leHAuaCIKKyNpbmNsdWRl IDxzdHJpbmc+CisKK2NsYXNzIEFCSV9FWFBPUlQgSUVfRXhwX1hNTDogcHVibGljIElFX0V4cAor eworcHVibGljOgorCUlFX0V4cF9YTUwoUERfRG9jdW1lbnQgKiBwRG9jdW1lbnQpOworCXZpcnR1 YWwgfklFX0V4cF9YTUwoKTsKKworcHVibGljOgorICAgIHZvaWQgc2V0dXBGaWxlKGJvb2wgY29t cHJlc3NlZCk7CisgICAgdm9pZCBjbG9zZUhhbmRsZSgpOworICAgIHZvaWQgc2V0RG9jVHlwZShj aGFyIGNvbnN0ICpkb2N0eXBlKTsKKyAgICB2b2lkIHN0YXJ0RWxlbWVudChjaGFyIGNvbnN0ICpu YW1lKTsKKyAgICB2b2lkIGVuZEVsZW1lbnQoKTsKKwl2b2lkIGFkZEJvb2woY2hhciBjb25zdCAq aWQsIGJvb2wgdmFsdWUpOworCXZvaWQgYWRkQ29tbWVudChjaGFyIGNvbnN0ICpjb21tZW50KTsK Kwl2b2lkIGFkZEZsb2F0KGNoYXIgY29uc3QgKmlkLCBkb3VibGUgdmFsdWUsIGludCBwcmVjaXNp b24gPSAtMSk7CisJdm9pZCBhZGRJbnQoY2hhciBjb25zdCAqaWQsIGludCB2YWx1ZSk7CisJdm9p ZCBhZGRMaW50KGNoYXIgY29uc3QgKmlkLCBsb25nIHZhbHVlKTsKKwl2b2lkIGFkZEx1aW50KGNo YXIgY29uc3QgKmlkLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsKKwl2b2lkIGFkZFN0cmluZyhjaGFy IGNvbnN0ICppZCwgY2hhciBjb25zdCAqdmFsdWUpOworCXZvaWQgYWRkU3RyaW5nKGNoYXIgY29u c3QgKmlkLCBzdGQ6OnN0cmluZyBjb25zdCAmdmFsdWUpOworCXZvaWQgYWRkU3RyaW5nKGNoYXIg Y29uc3QgKmlkLCBVVF9VQ1NDaGFyIGNvbnN0ICpkYXRhLCBpbnQgbGVuZ3RoKTsKKwl2b2lkIGFk ZFVpbnQoY2hhciBjb25zdCAqaWQsIHVuc2lnbmVkIHZhbHVlKTsKKworCXZvaWQgc2V0UHJldHR5 UHJpbnQoYm9vbCBwcmV0dHkpOworCitwcml2YXRlOgorCisgICAgR3NmT3V0cHV0ICptX3ppcDsK KyAgICBHc2ZYTUxPdXQgKm1feG1sOworfTsKKworI2VuZGlmIC8qIElFX0VYUF9YTUxfSCAqLwoK --=-hSnJGdFQ9nC6oOqTVXOP--