ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggZTg0NmJhNC4uYzMyZTM2NCAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsNSArMSw1IEBACiAKLUxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCitMaWJwbmcgMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDEKIAogVGhpcyBpcyBhIHB1YmxpYyByZWxlYXNlIG9mIGxpYnBuZywgaW50ZW5kZWQgZm9yIHVzZSBpbiBwcm9kdWN0aW9uIGNvZGVzLgogCkBAIC0xMCw3ICsxMCw5IEBACiAgIENoYW5nZWQgc2V2ZXJhbCAiLy8iIHNpbmdsZS1saW5lIGNvbW1lbnRzIHRvIEMtc3R5bGUgaW4gcG5nZ2NjcmQuYwogICBSZW1vdmVkIFBOR0FQSSBmcm9tIHByaXZhdGUgZnVuY3Rpb25zIHdob3NlIHByb3RvdHlwZXMgZGlkIG5vdCBoYXZlIFBOR0FQSS4KICAgVXBkYXRlZCBzY3JpcHRzL3BuZ29zMi5kZWYKLSAgQWRkZWQgY2hlY2tpbmcgdGhlIHJlc3VsdHMgb2YgbWFueSBpbnN0YW5jZXMgb2YgcG5nX21hbGxvYygpIGZvciBOVUxMCisgIEFkZGVkIG1ha2VmaWxlLm5ldGJzZAorICBBZGRlZCBhIGNoZWNrIGZvciBOVUxMIHJldHVybiBmcm9tIHVzZXIncyBtYWxsb2NfZm4oKS4KKyAgUmVtb3ZlZCBzb21lIHVzZWxlc3MgdHlwZSBjYXN0cyBvZiB0aGUgTlVMTCBwb2ludGVyLgogCiBTZW5kIGNvbW1lbnRzL2NvcnJlY3Rpb25zL2NvbW1lbmRhdGlvbnMgdG8KIHBuZy1pbXBsZW1lbnRAY2NyYy53dXN0bC5lZHUgb3IgdG8gcmFuZGVnQGFsdW0ucnBpLmVkdQpkaWZmIC0tZ2l0IGEvQ0hBTkdFUyBiL0NIQU5HRVMKaW5kZXggMjc5MTc3Yy4uNDAxODk0ZCAxMDA2NDQKLS0tIGEvQ0hBTkdFUworKysgYi9DSEFOR0VTCkBAIC05MjEsOCArOTIxLDEzIEBACiB2ZXJzaW9uIDEuMC4xMWJldGEyIFtBcHJpbCAxMSwgMjAwMV0KICAgUmVtb3ZlZCBQTkdBUEkgZnJvbSBzZXZlcmFsIGZ1bmN0aW9ucyB3aG9zZSBwcm90b3R5cGVzIGRpZCBub3QgaGF2ZSBQTkdBUEkuCiAgIFVwZGF0ZWQgc2NyaXB0cy9wbmdvczIuZGVmCi12ZXJzaW9uIDEuMC4xMWJldGEzIFtBcHJpbCAxNSwgMjAwMV0KK3ZlcnNpb24gMS4wLjExYmV0YTMgW0FwcmlsIDE0LCAyMDAxXQogICBBZGRlZCBjaGVja2luZyB0aGUgcmVzdWx0cyBvZiBtYW55IGluc3RhbmNlcyBvZiBwbmdfbWFsbG9jKCkgZm9yIE5VTEwKK3ZlcnNpb24gMS4wLjExcmMxIFtBcHJpbCAyMCwgMjAwMV0KKyAgVW5kaWQgdGhlIGNoYW5nZXMgZnJvbSB2ZXJzaW9uIDEuMC4xMWJldGEzLiAgQWRkZWQgYSBjaGVjayBmb3IgTlVMTCByZXR1cm4KKyAgICBmcm9tIHVzZXIncyBtYWxsb2NfZm4oKS4KKyAgUmVtb3ZlZCBzb21lIHVzZWxlc3MgdHlwZSBjYXN0cyBvZiB0aGUgTlVMTCBwb2ludGVyLgorICBBZGRlZCBtYWtlZmlsZS5uZXRic2QgLgogCiBTZW5kIGNvbW1lbnRzL2NvcnJlY3Rpb25zL2NvbW1lbmRhdGlvbnMgdG8KIHBuZy1pbXBsZW1lbnRAY2NyYy53dXN0bC5lZHUgb3IgdG8gcmFuZGVnQGFsdW0ucnBpLmVkdQpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKaW5kZXggOTQ2N2ZiMy4uNjgzODA4YiAxMDA2NDQKLS0tIGEvSU5TVEFMTAorKysgYi9JTlNUQUxMCkBAIC0xLDUgKzEsNSBAQAogCi1JbnN0YWxsaW5nIGxpYnBuZyB2ZXJzaW9uIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKK0luc3RhbGxpbmcgbGlicG5nIHZlcnNpb24gMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDEKIAogQmVmb3JlIGluc3RhbGxpbmcgbGlicG5nLCB5b3UgbXVzdCBmaXJzdCBpbnN0YWxsIHpsaWIuICB6bGliCiBjYW4gdXN1YWxseSBiZSBmb3VuZCB3aGVyZXZlciB5b3UgZ290IGxpYnBuZy4gIHpsaWIgY2FuIGJlCkBAIC0xMCw3ICsxMCw3IEBACiB2ZXJzaW9uIG9mIHpsaWIgdGhhdCdzIGluc3RhbGxlZC4KIAogWW91IGNhbiByZW5hbWUgdGhlIGRpcmVjdG9yaWVzIHRoYXQgeW91IGRvd25sb2FkZWQgKHRoZXkKLW1pZ2h0IGJlIGNhbGxlZCAibGlicG5nLTEuMC4xMWJldGEzIiBvciAibHBuZzEwOSIgYW5kICJ6bGliLTEuMS4zIgorbWlnaHQgYmUgY2FsbGVkICJsaWJwbmctMS4wLjExcmMxIiBvciAibHBuZzEwOSIgYW5kICJ6bGliLTEuMS4zIgogb3IgInpsaWIxMTMiKSBzbyB0aGF0IHlvdSBoYXZlIGRpcmVjdG9yaWVzIGNhbGxlZCAiemxpYiIgYW5kICJsaWJwbmciLgogCiBZb3VyIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc2hvdWxkIGxvb2sgbGlrZSB0aGlzOgpAQCAtNjAsOCArNjAsOCBAQAogaW5jbHVkZQogCiAgbWFrZWZpbGUuc3RkICAgICAgPT4gIEdlbmVyaWMgVU5JWCBtYWtlZmlsZSAoY2MsIGNyZWF0ZXMgc3RhdGljIGxpYnBuZy5hKQotIG1ha2VmaWxlLmxpbnV4ICAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMykKLSBtYWtlZmlsZS5nY21teCAgICA9PiAgTGludXgvRUxGIG1ha2VmaWxlIChnY2MsIGNyZWF0ZXMgbGlicG5nLnNvLjIuMS4wLjExYmV0YTMsCisgbWFrZWZpbGUubGludXggICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMC4xMXJjMSkKKyBtYWtlZmlsZS5nY21teCAgICA9PiAgTGludXgvRUxGIG1ha2VmaWxlIChnY2MsIGNyZWF0ZXMgbGlicG5nLnNvLjIuMS4wLjExcmMxLAogICAgICAgICAgICAgICAgICAgICAgICB1c2VzIGFzc2VtYmxlciBjb2RlIHR1bmVkIGZvciBJbnRlbCBNTVggcGxhdGZvcm0pCiAgbWFrZWZpbGUuZ2NjICAgICAgPT4gIEdlbmVyaWMgbWFrZWZpbGUgKGdjYywgY3JlYXRlcyBzdGF0aWMgbGlicG5nLmEpCiAgbWFrZWZpbGUua25yICAgICAgPT4gIEFyY2hhaWMgVU5JWCBNYWtlZmlsZSB0aGF0IGNvbnZlcnRzIGZpbGVzIHdpdGgKQEAgLTc2LDEwICs3NiwxMSBAQAogIG1ha2VmaWxlLmludGVsICAgID0+ICBJbnRlbCBDL0MrKyB2ZXJzaW9uIDQuMCBhbmQgbGF0ZXIKICBsaWJwbmcuaWNjICAgICAgICA9PiAgUHJvamVjdCBmaWxlIGZvciBJQk0gVmlzdWFsQWdlL0MrKyB2ZXJzaW9uIDQuMCBvciBsYXRlcgogIG1ha2VmaWxlLm1hY29zeCAgID0+ICBNQUNPUyBYIE1ha2VmaWxlCisgbWFrZWZpbGUubmV0YnNkICAgPT4gIE5ldEJTRC9jYyBtYWtlZmlsZSwgdXNlcyBQTkdHQ0NSRAogIG1ha2VmaWxlLnNnaSAgICAgID0+ICBTaWxpY29uIEdyYXBoaWNzIElSSVggbWFrZWZpbGUgKGNjLCBjcmVhdGVzIHN0YXRpYyBsaWIpCi0gbWFrZWZpbGUuc2dnY2MgICAgPT4gIFNpbGljb24gR3JhcGhpY3MgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMykKKyBtYWtlZmlsZS5zZ2djYyAgICA9PiAgU2lsaWNvbiBHcmFwaGljcyAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMC4xMXJjMSkKICBtYWtlZmlsZS5zdW5vcyAgICA9PiAgU3VuIG1ha2VmaWxlCi0gbWFrZWZpbGUuc29sYXJpcyAgPT4gIFNvbGFyaXMgMi5YIG1ha2VmaWxlIChnY2MsIGNyZWF0ZXMgbGlicG5nLnNvLjIuMS4wLjExYmV0YTMpCisgbWFrZWZpbGUuc29sYXJpcyAgPT4gIFNvbGFyaXMgMi5YIG1ha2VmaWxlIChnY2MsIGNyZWF0ZXMgbGlicG5nLnNvLjIuMS4wLjExcmMxKQogIG1ha2VmaWxlLnNjbyAgICAgID0+ICBGb3IgU0NPIE9TcjUgIEVMRiBhbmQgVW5peHdhcmUgNyB3aXRoIE5hdGl2ZSBjYwogIG1ha2VmaWxlLm1pcHMgICAgID0+ICBNSVBTIG1ha2VmaWxlCiAgbWFrZWZpbGUuYWNvcm4gICAgPT4gIEFjb3JuIG1ha2VmaWxlCmRpZmYgLS1naXQgYS9LTk9XTkJVRyBiL0tOT1dOQlVHCmluZGV4IGQ1OGQzY2QuLjI0MWNlNTMgMTAwNjQ0Ci0tLSBhL0tOT1dOQlVHCisrKyBiL0tOT1dOQlVHCkBAIC0yNSw0ICsyNSw3IEBACiA0LiBBcHJpbCAxNCwgMjAwMTogTWFueSBpbnN0YW5jZXMgb2YgcG5nX21hbGxvYygpIGFyZSBub3QgZm9sbG93ZWQgYnkKICAgIGEgY2hlY2sgdG8gbWFrZSBzdXJlIGl0IGRpZG4ndCByZXR1cm4gTlVMTC4KIAotICAgU1RBVFVTOiB0ZXN0cyB3ZXJlIGFkZGVkIGluIGxpYnBuZy0xLjAuMTFiZXRhMy4KKyAgIFNUQVRVUzogVGhpcyBvbmx5IHNlZW1zIHRvIG1hdHRlciBpZiB0aGUgdXNlciBpcyB1c2luZyBhIGN1c3RvbQorICAgbWFsbG9jX2ZuKCkgdGhhdCByZXR1cm5zIE5VTEwuICBJbiBsaWJwbmctMS4wLjExcmMxIHRoZSByZXR1cm4gZnJvbQorICAgbWFsbG9jX2ZuKCkgd2lsbCBiZSBjaGVja2VkIGZvciBOVUxMIGFuZCBwbmdfZXJyb3IoKSBpc3N1ZWQgaWYgb25lCisgICBpcyBmb3VuZC4KZGlmZiAtLWdpdCBhL0xJQ0VOU0UgYi9MSUNFTlNFCmluZGV4IDY4YzUyMzUuLjU0NGM1MzYgMTAwNjQ0Ci0tLSBhL0xJQ0VOU0UKKysrIGIvTElDRU5TRQpAQCAtOCw3ICs4LDcgQEAKIElmIHlvdSBtb2RpZnkgbGlicG5nIHlvdSBtYXkgaW5zZXJ0IGFkZGl0aW9uYWwgbm90aWNlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKIHRoaXMgc2VudGVuY2UuCiAKLWxpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoIDEuMC4xMWJldGEzLCBBcHJpbCAxNSwgMjAwMSwgYXJlCitsaWJwbmcgdmVyc2lvbnMgMS4wLjcsIEp1bHkgMSwgMjAwMCwgdGhyb3VnaCAxLjAuMTFyYzEsIEFwcmlsIDIwLCAyMDAxLCBhcmUKIENvcHlyaWdodCAoYykgMjAwMCwgMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KIGFuZCBhcmUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMC42CiB3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKQEAgLTk5LDQgKzk5LDQgQEAKIAogR2xlbm4gUmFuZGVycy1QZWhyc29uCiByYW5kZWdAYWx1bS5ycGkuZWR1Ci1BcHJpbCAxNSwgMjAwMQorQXByaWwgMjAsIDIwMDEKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCBmYTQ1MmQwLi4zMjAyODRjIDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0xLDQgKzEsNCBAQAotUkVBRE1FIGZvciBsaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMSAoc2hhcmVkIGxpYnJhcnkgMi4xKQorUkVBRE1FIGZvciBsaWJwbmcgMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDEgKHNoYXJlZCBsaWJyYXJ5IDIuMSkKIFNlZSB0aGUgbm90ZSBhYm91dCB2ZXJzaW9uIG51bWJlcnMgbmVhciB0aGUgdG9wIG9mIHBuZy5oCiAKIFNlZSBJTlNUQUxMIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGluc3RhbGwgbGlicG5nLgpAQCAtMTgzLDkgKzE4Myw5IEBACiAgICAgICAgZGVzY3JpcC5tbXMgICAgICA9PiAgVk1TIG1ha2VmaWxlIGZvciBNTVMgb3IgTU1LCiAgICAgICAgbWFrZWZpbGUuc3RkICAgICA9PiAgR2VuZXJpYyBVTklYIG1ha2VmaWxlIChjYywgY3JlYXRlcyBzdGF0aWMgbGlicG5nLmEpCiAgICAgICAgbWFrZWZpbGUubGludXggICA9PiAgTGludXgvRUxGIG1ha2VmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMC4xMXJjMSkKICAgICAgICBtYWtlZmlsZS5nY21teCAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUgKGdjYywgY3JlYXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnBuZy5zby4yLjEuMC4xMWJldGEzLCB1c2VzIGFzc2VtYmxlciBjb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicG5nLnNvLjIuMS4wLjExcmMxLCB1c2VzIGFzc2VtYmxlciBjb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVuZWQgZm9yIEludGVsIE1NWCBwbGF0Zm9ybSkKICAgICAgICBtYWtlZmlsZS5nY2MgICAgID0+ICBHZW5lcmljIG1ha2VmaWxlIChnY2MsIGNyZWF0ZXMgc3RhdGljIGxpYnBuZy5hKQogICAgICAgIG1ha2VmaWxlLmtuciAgICAgPT4gIEFyY2hhaWMgVU5JWCBNYWtlZmlsZSB0aGF0IGNvbnZlcnRzIGZpbGVzIHdpdGgKQEAgLTIwMCwxMSArMjAwLDEyIEBACiAgICAgICAgbWFrZWZpbGUuaW50ZWwgICA9PiAgSW50ZWwgQy9DKysgdmVyc2lvbiA0LjAgYW5kIGxhdGVyCiAgICAgICAgbGlicG5nLmljYyAgICAgICA9PiAgUHJvamVjdCBmaWxlLCBJQk0gVmlzdWFsQWdlL0MrKyA0LjAgb3IgbGF0ZXIKICAgICAgICBtYWtlZmlsZS5tYWNvc3ggID0+ICBNQUNPUyBYIE1ha2VmaWxlCisgICAgICAgbWFrZWZpbGUubmV0YnNkICA9PiAgTmV0QlNEL2NjIG1ha2VmaWxlLCB1c2VzIFBOR0dDQ1JECiAgICAgICAgbWFrZWZpbGUuc2dpICAgICA9PiAgU2lsaWNvbiBHcmFwaGljcyBJUklYIChjYywgY3JlYXRlcyBzdGF0aWMgbGliKQotICAgICAgIG1ha2VmaWxlLnNnZ2NjICAgPT4gIFNpbGljb24gR3JhcGhpY3MgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMykKKyAgICAgICBtYWtlZmlsZS5zZ2djYyAgID0+ICBTaWxpY29uIEdyYXBoaWNzIChnY2MsIGNyZWF0ZXMgbGlicG5nLnNvLjIuMS4wLjExcmMxKQogICAgICAgIG1ha2VmaWxlLnN1bm9zICAgPT4gIFN1biBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLnNvbGFyaXMgPT4gIFNvbGFyaXMgMi5YIG1ha2VmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTFiZXRhMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMC4xMXJjMSkKICAgICAgICBtYWtlZmlsZS5zY28gICAgID0+ICBGb3IgU0NPIE9TcjUgIEVMRiBhbmQgVW5peHdhcmUgNyB3aXRoIE5hdGl2ZSBjYwogICAgICAgIG1ha2VmaWxlLm1pcHMgICAgPT4gIE1JUFMgbWFrZWZpbGUKICAgICAgICBtYWtlZmlsZS5hY29ybiAgID0+ICBBY29ybiBtYWtlZmlsZQpkaWZmIC0tZ2l0IGEvWTJLSU5GTyBiL1kyS0lORk8KaW5kZXggNTY3MGZmNy4uOTA5ZjA0OCAxMDA2NDQKLS0tIGEvWTJLSU5GTworKysgYi9ZMktJTkZPCkBAIC0xLDEzICsxLDEzIEBACiAgICBZMksgY29tcGxpYW5jZSBpbiBsaWJwbmc6CiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgICAgIEFwcmlsIDE1LCAyMDAxCisgICAgICBBcHJpbCAyMCwgMjAwMQogCiAgICAgICBTaW5jZSB0aGUgUE5HIERldmVsb3BtZW50IGdyb3VwIGlzIGFuIGFkLWhvYyBib2R5LCB3ZSBjYW4ndCBtYWtlCiAgICAgICBhbiBvZmZpY2lhbCBkZWNsYXJhdGlvbi4KIAogICAgICAgVGhpcyBpcyB5b3VyIHVub2ZmaWNpYWwgYXNzdXJhbmNlIHRoYXQgbGlicG5nIGZyb20gdmVyc2lvbiAwLjcxIGFuZAotICAgICAgdXB3YXJkIHRocm91Z2ggMS4wLjExYmV0YTMgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCisgICAgICB1cHdhcmQgdGhyb3VnaCAxLjAuMTFyYzEgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCiAgICAgICB2ZXJzaW9ucyB3ZXJlIGFsc28gWTJLIGNvbXBsaWFudC4KIAogICAgICAgTGlicG5nIG9ubHkgaGFzIHRocmVlIHllYXIgZmllbGRzLiAgT25lIGlzIGEgMi1ieXRlIHVuc2lnbmVkIGludGVnZXIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCA0NzcwMWJhLi5kOGJiOTEyIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDUgKzEsNSBAQAogZWNobyAiCi0gIFRoZXJlIGlzIG5vIFwiY29uZmlndXJlXCIgc2NyaXB0IGZvciBMaWJwbmctMS4wLjExYmV0YTMuICBJbnN0ZWFkLCBwbGVhc2UKKyAgVGhlcmUgaXMgbm8gXCJjb25maWd1cmVcIiBzY3JpcHQgZm9yIExpYnBuZy0xLjAuMTFyYzEuICBJbnN0ZWFkLCBwbGVhc2UKICAgY29weSB0aGUgYXBwcm9wcmlhdGUgbWFrZWZpbGUgZm9yIHlvdXIgc3lzdGVtIGZyb20gdGhlIFwic2NyaXB0c1wiCiAgIGRpcmVjdG9yeS4gIFJlYWQgdGhlIElOU1RBTEwgZmlsZSBmb3IgbW9yZSBkZXRhaWxzLgogIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZS5jIGIvZXhhbXBsZS5jCmluZGV4IDhhN2RhMjUuLmYwZmU2ODggMTAwNjQ0Ci0tLSBhL2V4YW1wbGUuYworKysgYi9leGFtcGxlLmMKQEAgLTMzOCw3ICszMzgsOCBAQAogCiAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93KyspCiAgICB7Ci0gICAgICByb3dfcG9pbnRlcnNbcm93XSA9IG1hbGxvYyhwbmdfZ2V0X3Jvd2J5dGVzKHBuZ19wdHIsIGluZm9fcHRyKSk7CisgICAgICByb3dfcG9pbnRlcnNbcm93XSA9IHBuZ19tYWxsb2MocG5nX3B0ciwgcG5nX2dldF9yb3dieXRlcyhwbmdfcHRyLAorICAgICAgICAgaW5mb19wdHIpKTsKICAgIH0KIAogICAgLyogTm93IGl0J3MgdGltZSB0byByZWFkIHRoZSBpbWFnZS4gIE9uZSBvZiB0aGVzZSBtZXRob2RzIGlzIFJFUVVJUkVEICovCkBAIC02MDUsOCArNjA2LDYgQEAKICAgIC8qIHNldCB0aGUgcGFsZXR0ZSBpZiB0aGVyZSBpcyBvbmUuICBSRVFVSVJFRCBmb3IgaW5kZXhlZC1jb2xvciBpbWFnZXMgKi8KICAgIHBhbGV0dGUgPSAocG5nX2NvbG9ycClwbmdfbWFsbG9jKHBuZ19wdHIsIFBOR19NQVhfUEFMRVRURV9MRU5HVEgKICAgICAgICAgICAgICAqIHNpemVvZiAocG5nX2NvbG9yKSk7Ci0gICBpZiAocGFsZXR0ZSA9PSBOVUxMKQotICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJFeGFtcGxlOiBtYWxsb2Mgb2YgcGFsZXR0ZSBmYWlsZWQiKTsKICAgIC8qIC4uLiBzZXQgcGFsZXR0ZSBjb2xvcnMgLi4uICovCiAgICBwbmdfc2V0X1BMVEUocG5nX3B0ciwgaW5mb19wdHIsIHBhbGV0dGUsIFBOR19NQVhfUEFMRVRURV9MRU5HVEgpOwogICAgLyogWW91IG11c3Qgbm90IGZyZWUgcGFsZXR0ZSBoZXJlLCBiZWNhdXNlIHBuZ19zZXRfUExURSBvbmx5IG1ha2VzIGEgbGluayB0bwpkaWZmIC0tZ2l0IGEvbGlicG5nLjMgYi9saWJwbmcuMwppbmRleCA2NTcwMzliLi41OGU2ZTU3IDEwMDY0NAotLS0gYS9saWJwbmcuMworKysgYi9saWJwbmcuMwpAQCAtMSw2ICsxLDYgQEAKLS5USCBMSUJQTkcgMyAiQXByaWwgMTUsIDIwMDEiCisuVEggTElCUE5HIDMgIkFwcmlsIDIwLCAyMDAxIgogLlNIIE5BTUUKLWxpYnBuZyBcLSBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIChQTkcpIFJlZmVyZW5jZSBMaWJyYXJ5IDEuMC4xMWJldGEzCitsaWJwbmcgXC0gUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyAoUE5HKSBSZWZlcmVuY2UgTGlicmFyeSAxLjAuMTFyYzEKIC5TSCBTWU5PUFNJUwogXGZJXGZCCiAKQEAgLTc0Nyw3ICs3NDcsNyBAQAogLlNIIExJQlBORy5UWFQKIGxpYnBuZy50eHQgLSBBIGRlc2NyaXB0aW9uIG9uIGhvdyB0byB1c2UgYW5kIG1vZGlmeSBsaWJwbmcKIAotIGxpYnBuZyB2ZXJzaW9uIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKKyBsaWJwbmcgdmVyc2lvbiAxLjAuMTFyYzEgLSBBcHJpbCAyMCwgMjAwMQogIFVwZGF0ZWQgYW5kIGRpc3RyaWJ1dGVkIGJ5IEdsZW5uIFJhbmRlcnMtUGVocnNvbgogIDxyYW5kZWdAYWx1bS5ycGkuZWR1PgogIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSwgMjAwMCBHbGVubiBSYW5kZXJzLVBlaHJzb24KQEAgLTMwNjEsNiArMzA2MSwxMCBAQAogICAgICAgIHBuZ191aW50XzMyIHNpemUpOwogICAgIHZvaWQgZnJlZV9mbihwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfdm9pZHAgcHRyKTsKIAorWW91ciBtYWxsb2NfZm4oKSBjYW4gcmV0dXJuIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLiAgVGhlIHBuZ19tYWxsb2MoKQorZnVuY3Rpb24gd2lsbCBjYWxsIHBuZ19lcnJvcigpIGlmIGl0IHJlY2VpdmVzIGEgTlVMTCBmcm9tIHRoZSBzeXN0ZW0KK21lbW9yeSBhbGxvY2F0b3Igb3IgZnJvbSB5b3VyIHJlcGxhY2VtZW50IG1hbGxvY19mbigpLgorCiBJbnB1dC9PdXRwdXQgaW4gbGlicG5nIGlzIGRvbmUgdGhyb3VnaCBwbmdfcmVhZCgpIGFuZCBwbmdfd3JpdGUoKSwKIHdoaWNoIGN1cnJlbnRseSBqdXN0IGNhbGwgZnJlYWQoKSBhbmQgZndyaXRlKCkuICBUaGUgRklMRSAqIGlzIHN0b3JlZCBpbgogcG5nX3N0cnVjdCBhbmQgaXMgaW5pdGlhbGl6ZWQgdmlhIHBuZ19pbml0X2lvKCkuICBJZiB5b3Ugd2lzaCB0byBjaGFuZ2UKQEAgLTM0NjQsMTMgKzM0NjgsMTMgQEAKIAogLlNIIFZJSUkuIFkySyBDb21wbGlhbmNlIGluIGxpYnBuZwogCi1BcHJpbCAxNSwgMjAwMQorQXByaWwgMjAsIDIwMDEKIAogU2luY2UgdGhlIFBORyBEZXZlbG9wbWVudCBncm91cCBpcyBhbiBhZC1ob2MgYm9keSwgd2UgY2FuJ3QgbWFrZQogYW4gb2ZmaWNpYWwgZGVjbGFyYXRpb24uCiAKIFRoaXMgaXMgeW91ciB1bm9mZmljaWFsIGFzc3VyYW5jZSB0aGF0IGxpYnBuZyBmcm9tIHZlcnNpb24gMC43MSBhbmQKLXVwd2FyZCB0aHJvdWdoIDEuMC4xMWJldGEzIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgordXB3YXJkIHRocm91Z2ggMS4wLjExcmMxIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgogdmVyc2lvbnMgd2VyZSBhbHNvIFkySyBjb21wbGlhbnQuCiAKIExpYnBuZyBvbmx5IGhhcyB0aHJlZSB5ZWFyIGZpZWxkcy4gIE9uZSBpcyBhIDItYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyIHRoYXQKQEAgLTM1ODAsNiArMzU4NCw3IEBACiAgMS4wLjEwcmMxICAgICAgICAgICAgMSAgICAxMDAxMCAgMi4xLjAuMTByYzEKICAxLjAuMTAgICAgICAgICAgICAgICAxICAgIDEwMDEwICAyLjEuMC4xMAogIDEuMC4xMWJldGExLTMgICAgICAgIDEgICAgMTAwMTEgIDIuMS4wLjExYmV0YTEtMworIDEuMC4xMXJjMSAgICAgICAgICAgIDEgICAgMTAwMTEgIDIuMS4wLjExcmMxCiAKIEhlbmNlZm9ydGggdGhlIHNvdXJjZSB2ZXJzaW9uIHdpbGwgbWF0Y2ggdGhlIHNoYXJlZC1saWJyYXJ5IG1pbm9yCiBhbmQgcGF0Y2ggbnVtYmVyczsgdGhlIHNoYXJlZC1saWJyYXJ5IG1ham9yIHZlcnNpb24gbnVtYmVyIHdpbGwgYmUKQEAgLTM2MzcsNyArMzY0Miw3IEBACiAKIFRoYW5rcyB0byBGcmFuayBKLiBULiBXb2pjaWsgZm9yIGhlbHBpbmcgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbi4KIAotTGlicG5nIHZlcnNpb24gMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMToKK0xpYnBuZyB2ZXJzaW9uIDEuMC4xMXJjMSAtIEFwcmlsIDIwLCAyMDAxOgogSW5pdGlhbGx5IGNyZWF0ZWQgaW4gMTk5NSBieSBHdXkgRXJpYyBTY2hhbG5hdCwgdGhlbiBvZiBHcm91cCA0MiwgSW5jLgogQ3VycmVudGx5IG1haW50YWluZWQgYnkgR2xlbm4gUmFuZGVycy1QZWhyc29uIChyYW5kZWdAYWx1bS5ycGkuZWR1KS4KIApAQCAtMzY1NCw3ICszNjU5LDcgQEAKIElmIHlvdSBtb2RpZnkgbGlicG5nIHlvdSBtYXkgaW5zZXJ0IGFkZGl0aW9uYWwgbm90aWNlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKIHRoaXMgc2VudGVuY2UuCiAKLWxpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoICAxLjAuMTFiZXRhMywgQXByaWwgMTUsIDIwMDEsIGFyZQorbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggIDEuMC4xMXJjMSwgQXByaWwgMjAsIDIwMDEsIGFyZQogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCiBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMS4wLjYKIHdpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9ycwpAQCAtMzc0Niw3ICszNzUxLDcgQEAKIAogR2xlbm4gUmFuZGVycy1QZWhyc29uCiByYW5kZWdAYWx1bS5ycGkuZWR1Ci1BcHJpbCAxNSwgMjAwMQorQXByaWwgMjAsIDIwMDEKIAogLlwiIGVuZCBvZiBtYW4gcGFnZQogCmRpZmYgLS1naXQgYS9saWJwbmcudHh0IGIvbGlicG5nLnR4dAppbmRleCA0MjVjZjMwLi5jMDMzMGIyIDEwMDY0NAotLS0gYS9saWJwbmcudHh0CisrKyBiL2xpYnBuZy50eHQKQEAgLTEsNiArMSw2IEBACiBsaWJwbmcudHh0IC0gQSBkZXNjcmlwdGlvbiBvbiBob3cgdG8gdXNlIGFuZCBtb2RpZnkgbGlicG5nCiAKLSBsaWJwbmcgdmVyc2lvbiAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCisgbGlicG5nIHZlcnNpb24gMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDEKICBVcGRhdGVkIGFuZCBkaXN0cmlidXRlZCBieSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICA8cmFuZGVnQGFsdW0ucnBpLmVkdT4KICBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTksIDIwMDAgR2xlbm4gUmFuZGVycy1QZWhyc29uCkBAIC0yMzE0LDYgKzIzMTQsMTAgQEAKICAgICAgICBwbmdfdWludF8zMiBzaXplKTsKICAgICB2b2lkIGZyZWVfZm4ocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX3ZvaWRwIHB0cik7CiAKK1lvdXIgbWFsbG9jX2ZuKCkgY2FuIHJldHVybiBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS4gIFRoZSBwbmdfbWFsbG9jKCkKK2Z1bmN0aW9uIHdpbGwgY2FsbCBwbmdfZXJyb3IoKSBpZiBpdCByZWNlaXZlcyBhIE5VTEwgZnJvbSB0aGUgc3lzdGVtCittZW1vcnkgYWxsb2NhdG9yIG9yIGZyb20geW91ciByZXBsYWNlbWVudCBtYWxsb2NfZm4oKS4KKwogSW5wdXQvT3V0cHV0IGluIGxpYnBuZyBpcyBkb25lIHRocm91Z2ggcG5nX3JlYWQoKSBhbmQgcG5nX3dyaXRlKCksCiB3aGljaCBjdXJyZW50bHkganVzdCBjYWxsIGZyZWFkKCkgYW5kIGZ3cml0ZSgpLiAgVGhlIEZJTEUgKiBpcyBzdG9yZWQgaW4KIHBuZ19zdHJ1Y3QgYW5kIGlzIGluaXRpYWxpemVkIHZpYSBwbmdfaW5pdF9pbygpLiAgSWYgeW91IHdpc2ggdG8gY2hhbmdlCkBAIC0yNzE3LDEzICsyNzIxLDEzIEBACiAKIFZJSUkuIFkySyBDb21wbGlhbmNlIGluIGxpYnBuZwogCi1BcHJpbCAxNSwgMjAwMQorQXByaWwgMjAsIDIwMDEKIAogU2luY2UgdGhlIFBORyBEZXZlbG9wbWVudCBncm91cCBpcyBhbiBhZC1ob2MgYm9keSwgd2UgY2FuJ3QgbWFrZQogYW4gb2ZmaWNpYWwgZGVjbGFyYXRpb24uCiAKIFRoaXMgaXMgeW91ciB1bm9mZmljaWFsIGFzc3VyYW5jZSB0aGF0IGxpYnBuZyBmcm9tIHZlcnNpb24gMC43MSBhbmQKLXVwd2FyZCB0aHJvdWdoIDEuMC4xMWJldGEzIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgordXB3YXJkIHRocm91Z2ggMS4wLjExcmMxIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgogdmVyc2lvbnMgd2VyZSBhbHNvIFkySyBjb21wbGlhbnQuCiAKIExpYnBuZyBvbmx5IGhhcyB0aHJlZSB5ZWFyIGZpZWxkcy4gIE9uZSBpcyBhIDItYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyIHRoYXQKZGlmZiAtLWdpdCBhL2xpYnBuZ3BmLjMgYi9saWJwbmdwZi4zCmluZGV4IGI1MDNlMTcuLjc4MTM0MTMgMTAwNjQ0Ci0tLSBhL2xpYnBuZ3BmLjMKKysrIGIvbGlicG5ncGYuMwpAQCAtMSw2ICsxLDYgQEAKLS5USCBMSUJQTkdQRiAzICJBcHJpbCAxNSwgMjAwMSIKKy5USCBMSUJQTkdQRiAzICJBcHJpbCAyMCwgMjAwMSIKIC5TSCBOQU1FCi1saWJwbmcgXC0gUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyAoUE5HKSBSZWZlcmVuY2UgTGlicmFyeSAxLjAuMTFiZXRhMworbGlicG5nIFwtIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MgKFBORykgUmVmZXJlbmNlIExpYnJhcnkgMS4wLjExcmMxCiAocHJpdmF0ZSBmdW5jdGlvbnMpCiAuU0ggU1lOT1BTSVMKIFxmQiNpbmNsdWRlIDxwbmcuaD5cZlAKZGlmZiAtLWdpdCBhL3BuZy41IGIvcG5nLjUKaW5kZXggN2ZmNTg5OC4uYzNiNjU5YyAxMDA2NDQKLS0tIGEvcG5nLjUKKysrIGIvcG5nLjUKQEAgLTEsNCArMSw0IEBACi0uVEggUE5HIDUgIkFwcmlsIDE1LCAyMDAxIgorLlRIIFBORyA1ICJBcHJpbCAyMCwgMjAwMSIKIC5TSCBOQU1FCiBwbmcgXC0gUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyAoUE5HKSBmb3JtYXQKIC5TSCBERVNDUklQVElPTgpkaWZmIC0tZ2l0IGEvcG5nLmMgYi9wbmcuYwppbmRleCA1OWZhYjVhLi5mMWNkM2YzIDEwMDY0NAotLS0gYS9wbmcuYworKysgYi9wbmcuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nLmMgLSBsb2NhdGlvbiBmb3IgZ2VuZXJhbCBwdXJwb3NlIGxpYnBuZyBmdW5jdGlvbnMKICAqCi0gKiBsaWJwbmcgdmVyc2lvbiAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCisgKiBsaWJwbmcgdmVyc2lvbiAxLjAuMTFyYzEgLSBBcHJpbCAyMCwgMjAwMQogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKICAqIChWZXJzaW9uIDAuODggQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IEd1eSBFcmljIFNjaGFsbmF0LCBHcm91cCA0MiwgSW5jLikKQEAgLTEzLDE0ICsxMywxNCBAQAogI2luY2x1ZGUgInBuZy5oIgogCiAvKiBHZW5lcmF0ZSBhIGNvbXBpbGVyIGVycm9yIGlmIHRoZXJlIGlzIGFuIG9sZCBwbmcuaCBpbiB0aGUgc2VhcmNoIHBhdGguICovCi10eXBlZGVmIHZlcnNpb25fMV8wXzExYmV0YTMgWW91cl9wbmdfaF9pc19ub3RfdmVyc2lvbl8xXzBfMTFiZXRhMzsKK3R5cGVkZWYgdmVyc2lvbl8xXzBfMTFyYzEgWW91cl9wbmdfaF9pc19ub3RfdmVyc2lvbl8xXzBfMTFyYzE7CiAKIC8qIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIEMgZmlsZXMuICBUaGlzIGhhZCBiZXR0ZXIgbWF0Y2ggdGhlIHZlcnNpb24KICAqIHN0cmluZyBkZWZpbmVkIGluIHBuZy5oLiAgKi8KIAogI2lmZGVmIFBOR19VU0VfR0xPQkFMX0FSUkFZUwogLyogcG5nX2xpYnBuZ192ZXIgd2FzIGNoYW5nZWQgdG8gYSBmdW5jdGlvbiBpbiB2ZXJzaW9uIDEuMC41YyAqLwotY29uc3QgY2hhciBwbmdfbGlicG5nX3ZlclsxOF0gPSAiMS4wLjExYmV0YTMiOworY29uc3QgY2hhciBwbmdfbGlicG5nX3ZlclsxOF0gPSAiMS4wLjExcmMxIjsKIAogLyogcG5nX3NpZyB3YXMgY2hhbmdlZCB0byBhIGZ1bmN0aW9uIGluIHZlcnNpb24gMS4wLjVjICovCiAvKiBQbGFjZSB0byBob2xkIHRoZSBzaWduYXR1cmUgc3RyaW5nIGZvciBhIFBORyBmaWxlLiAqLwpAQCAtMTQyLDE4ICsxNDIsMTUgQEAKICAgIHBuZ192b2lkcCBwdHIgPSAocG5nX3ZvaWRwKXBuZ19tYWxsb2MoKHBuZ19zdHJ1Y3RwKXBuZ19wdHIsIG51bV9ieXRlcyk7CiAKICNpZm5kZWYgUE5HX05PX1pBTExPQ19aRVJPCi0gICBpZiAocHRyKQorICAgaWYgKG51bV9ieXRlcyA+IChwbmdfdWludF8zMikweDgwMDBMKQogICAgewotICAgICBpZiAobnVtX2J5dGVzID4gKHBuZ191aW50XzMyKTB4ODAwMEwpCi0gICAgIHsKLSAgICAgICAgcG5nX21lbXNldChwdHIsIDAsIChwbmdfc2l6ZV90KTB4ODAwMEwpOwotICAgICAgICBwbmdfbWVtc2V0KChwbmdfYnl0ZXApcHRyICsgKHBuZ19zaXplX3QpMHg4MDAwTCwgMCwKLSAgICAgICAgICAgKHBuZ19zaXplX3QpKG51bV9ieXRlcyAtIChwbmdfdWludF8zMikweDgwMDBMKSk7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgIHBuZ19tZW1zZXQocHRyLCAwLCAocG5nX3NpemVfdCludW1fYnl0ZXMpOwotICAgICB9CisgICAgICBwbmdfbWVtc2V0KHB0ciwgMCwgKHBuZ19zaXplX3QpMHg4MDAwTCk7CisgICAgICBwbmdfbWVtc2V0KChwbmdfYnl0ZXApcHRyICsgKHBuZ19zaXplX3QpMHg4MDAwTCwgMCwKKyAgICAgICAgIChwbmdfc2l6ZV90KShudW1fYnl0ZXMgLSAocG5nX3VpbnRfMzIpMHg4MDAwTCkpOworICAgfQorICAgZWxzZQorICAgeworICAgICAgcG5nX21lbXNldChwdHIsIDAsIChwbmdfc2l6ZV90KW51bV9ieXRlcyk7CiAgICB9CiAjZW5kaWYKICAgIHJldHVybiAoKHZvaWRwZilwdHIpOwpAQCAtMjg1LDcgKzI4Miw4IEBACiAjZW5kaWYKIAogdm9pZCBQTkdBUEkKLXBuZ19mcmVlX2RhdGEocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBwbmdfdWludF8zMiBtYXNrLCBpbnQgbnVtKQorcG5nX2ZyZWVfZGF0YShwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzMyIG1hc2ssCisgICBpbnQgbnVtKQogewogICAgcG5nX2RlYnVnKDEsICJpbiBwbmdfZnJlZV9kYXRhXG4iKTsKICAgIGlmIChwbmdfcHRyID09IE5VTEwgfHwgaW5mb19wdHIgPT0gTlVMTCkKQEAgLTU4NCwzMSArNTgyLDI3IEBACiAgICAgICAgICBzaXplb2YoY2hhcikpKTsKICAgIH0KIAotICAgaWYgKHBuZ19wdHItPnRpbWVfYnVmZmVyID09IE5VTEwpCi0gICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiTWFsbG9jIG9mIGJ1ZmZlciBmb3IgdElNRSBjaHVuayBmYWlsZWQiKTsKLSAgIGVsc2UKLSAgIHsKICNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0gICAgIHsKLSAgICAgICAgd2NoYXJfdCB0aW1lX2J1ZlsyOV07Ci0gICAgICAgIHdzcHJpbnRmKHRpbWVfYnVmLCBURVhUKCIlZCAlUyAlZCAlMDJkOiUwMmQ6JTAyZCArMDAwMCIpLAotICAgICAgICAgICAgcHRpbWUtPmRheSAlIDMyLCBzaG9ydF9tb250aHNbKHB0aW1lLT5tb250aCAtIDEpICUgMTJdLAotICAgICAgICAgICAgcHRpbWUtPnllYXIsIHB0aW1lLT5ob3VyICUgMjQsIHB0aW1lLT5taW51dGUgJSA2MCwKLSAgICAgICAgICAgIHB0aW1lLT5zZWNvbmQgJSA2MSk7Ci0gICAgICAgIFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfQUNQLCAwLCB0aW1lX2J1ZiwgLTEsIHBuZ19wdHItPnRpbWVfYnVmZmVyLCAyOSwKLSAgICAgICAgICAgIE5VTEwsIE5VTEwpOwotICAgICB9CisgICB7CisgICAgICB3Y2hhcl90IHRpbWVfYnVmWzI5XTsKKyAgICAgIHdzcHJpbnRmKHRpbWVfYnVmLCBURVhUKCIlZCAlUyAlZCAlMDJkOiUwMmQ6JTAyZCArMDAwMCIpLAorICAgICAgICAgIHB0aW1lLT5kYXkgJSAzMiwgc2hvcnRfbW9udGhzWyhwdGltZS0+bW9udGggLSAxKSAlIDEyXSwKKyAgICAgICAgcHRpbWUtPnllYXIsIHB0aW1lLT5ob3VyICUgMjQsIHB0aW1lLT5taW51dGUgJSA2MCwKKyAgICAgICAgICBwdGltZS0+c2Vjb25kICUgNjEpOworICAgICAgV2lkZUNoYXJUb011bHRpQnl0ZShDUF9BQ1AsIDAsIHRpbWVfYnVmLCAtMSwgcG5nX3B0ci0+dGltZV9idWZmZXIsIDI5LAorICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgfQogI2Vsc2UKICNpZmRlZiBVU0VfRkFSX0tFWVdPUkQKLSAgICAgewotICAgICAgICBjaGFyIG5lYXJfdGltZV9idWZbMjldOwotICAgICAgICBzcHJpbnRmKG5lYXJfdGltZV9idWYsICIlZCAlcyAlZCAlMDJkOiUwMmQ6JTAyZCArMDAwMCIsCi0gICAgICAgICAgICBwdGltZS0+ZGF5ICUgMzIsIHNob3J0X21vbnRoc1socHRpbWUtPm1vbnRoIC0gMSkgJSAxMl0sCi0gICAgICAgICAgICBwdGltZS0+eWVhciwgcHRpbWUtPmhvdXIgJSAyNCwgcHRpbWUtPm1pbnV0ZSAlIDYwLAotICAgICAgICAgICAgcHRpbWUtPnNlY29uZCAlIDYxKTsKLSAgICAgICAgcG5nX21lbWNweShwbmdfcHRyLT50aW1lX2J1ZmZlciwgbmVhcl90aW1lX2J1ZiwKLSAgICAgICAgICAgIDI5KnNpemVvZihjaGFyKSk7Ci0gICAgIH0KKyAgIHsKKyAgICAgIGNoYXIgbmVhcl90aW1lX2J1ZlsyOV07CisgICAgICBzcHJpbnRmKG5lYXJfdGltZV9idWYsICIlZCAlcyAlZCAlMDJkOiUwMmQ6JTAyZCArMDAwMCIsCisgICAgICAgICAgcHRpbWUtPmRheSAlIDMyLCBzaG9ydF9tb250aHNbKHB0aW1lLT5tb250aCAtIDEpICUgMTJdLAorICAgICAgICAgIHB0aW1lLT55ZWFyLCBwdGltZS0+aG91ciAlIDI0LCBwdGltZS0+bWludXRlICUgNjAsCisgICAgICAgICAgcHRpbWUtPnNlY29uZCAlIDYxKTsKKyAgICAgIHBuZ19tZW1jcHkocG5nX3B0ci0+dGltZV9idWZmZXIsIG5lYXJfdGltZV9idWYsCisgICAgICAgICAgMjkqc2l6ZW9mKGNoYXIpKTsKKyAgIH0KICNlbHNlCiAgICBzcHJpbnRmKHBuZ19wdHItPnRpbWVfYnVmZmVyLCAiJWQgJXMgJWQgJTAyZDolMDJkOiUwMmQgKzAwMDAiLAogICAgICAgIHB0aW1lLT5kYXkgJSAzMiwgc2hvcnRfbW9udGhzWyhwdGltZS0+bW9udGggLSAxKSAlIDEyXSwKQEAgLTYxNiw3ICs2MTAsNiBAQAogICAgICAgIHB0aW1lLT5zZWNvbmQgJSA2MSk7CiAjZW5kaWYKICNlbmRpZiAvKiBfV0lOMzJfV0NFICovCi0gICB9CiAgICByZXR1cm4gKChwbmdfY2hhcnApcG5nX3B0ci0+dGltZV9idWZmZXIpOwogfQogI2VuZGlmIC8qIFBOR19USU1FX1JGQzExMjNfU1VQUE9SVEVEICovCkBAIC02MzQsNyArNjI3LDcgQEAKIHBuZ19nZXRfY29weXJpZ2h0KHBuZ19zdHJ1Y3RwIHBuZ19wdHIpCiB7CiAgICBpZiAocG5nX3B0ciAhPSBOVUxMIHx8IHBuZ19wdHIgPT0gTlVMTCkgIC8qIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZyAqLwotICAgcmV0dXJuICgocG5nX2NoYXJwKSAiXG4gbGlicG5nIHZlcnNpb24gMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMVxuXAorICAgcmV0dXJuICgocG5nX2NoYXJwKSAiXG4gbGlicG5nIHZlcnNpb24gMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDFcblwKICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvblxuXAogICAgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyXG5cCiAgICBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuXG4iKTsKQEAgLTY1Miw4ICs2NDUsOCBAQAogewogICAgLyogVmVyc2lvbiBvZiAqLmMgZmlsZXMgdXNlZCB3aGVuIGJ1aWxkaW5nIGxpYnBuZyAqLwogICAgaWYocG5nX3B0ciAhPSBOVUxMKSAvKiBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgdW51c2VkIHBuZ19wdHIgKi8KLSAgICAgIHJldHVybigocG5nX2NoYXJwKSAiMS4wLjExYmV0YTMiKTsKLSAgIHJldHVybigocG5nX2NoYXJwKSAiMS4wLjExYmV0YTMiKTsKKyAgICAgIHJldHVybigocG5nX2NoYXJwKSAiMS4wLjExcmMxIik7CisgICByZXR1cm4oKHBuZ19jaGFycCkgIjEuMC4xMXJjMSIpOwogfQogCiBwbmdfY2hhcnAgUE5HQVBJCmRpZmYgLS1naXQgYS9wbmcuaCBiL3BuZy5oCmluZGV4IGI3OGJhYzUuLjhlODUwODMgMTAwNjQ0Ci0tLSBhL3BuZy5oCisrKyBiL3BuZy5oCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmcuaCAtIGhlYWRlciBmaWxlIGZvciBQTkcgcmVmZXJlbmNlIGxpYnJhcnkKICAqCi0gKiBsaWJwbmcgdmVyc2lvbiAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCisgKiBsaWJwbmcgdmVyc2lvbiAxLjAuMTFyYzEgLSBBcHJpbCAyMCwgMjAwMQogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKICAqIChWZXJzaW9uIDAuODggQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IEd1eSBFcmljIFNjaGFsbmF0LCBHcm91cCA0MiwgSW5jLikKQEAgLTksNyArOSw3IEBACiAgKiBBdXRob3JzIGFuZCBtYWludGFpbmVyczoKICAqICBsaWJwbmcgdmVyc2lvbnMgMC43MSwgTWF5IDE5OTUsIHRocm91Z2ggMC44OCwgSmFudWFyeSAxOTk2OiBHdXkgU2NoYWxuYXQKICAqICBsaWJwbmcgdmVyc2lvbnMgMC44OWMsIEp1bmUgMTk5NiwgdGhyb3VnaCAwLjk2LCBNYXkgMTk5NzogQW5kcmVhcyBEaWxnZXIKLSAqICBsaWJwbmcgdmVyc2lvbnMgMC45NywgSmFudWFyeSAxOTk4LCB0aHJvdWdoIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDE6IEdsZW5uCisgKiAgbGlicG5nIHZlcnNpb25zIDAuOTcsIEphbnVhcnkgMTk5OCwgdGhyb3VnaCAxLjAuMTFyYzEgLSBBcHJpbCAyMCwgMjAwMTogR2xlbm4KICAqICBTZWUgYWxzbyAiQ29udHJpYnV0aW5nIEF1dGhvcnMiLCBiZWxvdy4KICAqCiAgKiBOb3RlIGFib3V0IGxpYnBuZyB2ZXJzaW9uIG51bWJlcnM6CkBAIC02OCw2ICs2OCw3IEBACiAgKiAgICAxLjAuMTByYzEgICAgICAgICAgICAgICAgMSAgICAxMDAxMCAgMi4xLjAuMTByYzEKICAqICAgIDEuMC4xMCAgICAgICAgICAgICAgICAgICAxICAgIDEwMDEwICAyLjEuMC4xMAogICogICAgMS4wLjExYmV0YTEtMyAgICAgICAgICAgIDEgICAgMTAwMTEgIDIuMS4wLjExYmV0YTEtMworICogICAgMS4wLjExcmMxICAgICAgICAgICAgICAgIDEgICAgMTAwMTEgIDIuMS4wLjExcmMxCiAgKgogICogICAgSGVuY2Vmb3J0aCB0aGUgc291cmNlIHZlcnNpb24gd2lsbCBtYXRjaCB0aGUgc2hhcmVkLWxpYnJhcnkgbWFqb3IKICAqICAgIGFuZCBtaW5vciBudW1iZXJzOyB0aGUgc2hhcmVkLWxpYnJhcnkgbWFqb3IgdmVyc2lvbiBudW1iZXIgd2lsbCBiZQpAQCAtOTcsNyArOTgsNyBAQAogICogSWYgeW91IG1vZGlmeSBsaWJwbmcgeW91IG1heSBpbnNlcnQgYWRkaXRpb25hbCBub3RpY2VzIGltbWVkaWF0ZWx5IGZvbGxvd2luZwogICogdGhpcyBzZW50ZW5jZS4KICAqCi0gKiBsaWJwbmcgdmVyc2lvbnMgMS4wLjcsIEp1bHkgMSwgMjAwMCwgdGhyb3VnaCAgMS4wLjExYmV0YTMsIEFwcmlsIDE1LCAyMDAxLCBhcmUKKyAqIGxpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoICAxLjAuMTFyYzEsIEFwcmlsIDIwLCAyMDAxLCBhcmUKICAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKICAqIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjAuNgogICogd2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzCkBAIC0yMDIsMTMgKzIwMywxMyBAQAogICogWTJLIGNvbXBsaWFuY2UgaW4gbGlicG5nOgogICogPT09PT09PT09PT09PT09PT09PT09PT09PQogICoKLSAqICAgIEFwcmlsIDE1LCAyMDAxCisgKiAgICBBcHJpbCAyMCwgMjAwMQogICoKICAqICAgIFNpbmNlIHRoZSBQTkcgRGV2ZWxvcG1lbnQgZ3JvdXAgaXMgYW4gYWQtaG9jIGJvZHksIHdlIGNhbid0IG1ha2UKICAqICAgIGFuIG9mZmljaWFsIGRlY2xhcmF0aW9uLgogICoKICAqICAgIFRoaXMgaXMgeW91ciB1bm9mZmljaWFsIGFzc3VyYW5jZSB0aGF0IGxpYnBuZyBmcm9tIHZlcnNpb24gMC43MSBhbmQKLSAqICAgIHVwd2FyZCB0aHJvdWdoIDEuMC4xMWJldGEzIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgorICogICAgdXB3YXJkIHRocm91Z2ggMS4wLjExcmMxIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgogICogICAgdmVyc2lvbnMgd2VyZSBhbHNvIFkySyBjb21wbGlhbnQuCiAgKgogICogICAgTGlicG5nIG9ubHkgaGFzIHRocmVlIHllYXIgZmllbGRzLiAgT25lIGlzIGEgMi1ieXRlIHVuc2lnbmVkIGludGVnZXIKQEAgLTI2NCw3ICsyNjUsNyBAQAogICovCiAKIC8qIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHBuZy5oIC0gdGhpcyBzaG91bGQgbWF0Y2ggdGhlIHZlcnNpb24gaW4gcG5nLmMgKi8KLSNkZWZpbmUgUE5HX0xJQlBOR19WRVJfU1RSSU5HICIxLjAuMTFiZXRhMyIKKyNkZWZpbmUgUE5HX0xJQlBOR19WRVJfU1RSSU5HICIxLjAuMTFyYzEiCiAKICNkZWZpbmUgUE5HX0xJQlBOR19WRVJfU09OVU0gICAyCiAjZGVmaW5lIFBOR19MSUJQTkdfVkVSX0RMTE5VTSAgJURMTE5VTSUKQEAgLTI3Niw3ICsyNzcsNyBAQAogLyogVGhpcyBzaG91bGQgbWF0Y2ggdGhlIG51bWVyaWMgcGFydCBvZiB0aGUgZmluYWwgY29tcG9uZW50IG9mCiAgKiBQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIG9taXR0aW5nIGFueSBsZWFkaW5nIHplcm86ICovCiAKLSNkZWZpbmUgUE5HX0xJQlBOR19WRVJfQlVJTEQgIDMKKyNkZWZpbmUgUE5HX0xJQlBOR19WRVJfQlVJTEQgIDEKIAogI2RlZmluZSBQTkdfTElCUE5HX0JVSUxEX0FMUEhBICAgIDEKICNkZWZpbmUgUE5HX0xJQlBOR19CVUlMRF9CRVRBICAgICAyCkBAIC0yODQsNyArMjg1LDcgQEAKICNkZWZpbmUgUE5HX0xJQlBOR19CVUlMRF9TVEFCTEUgICA0CiAjZGVmaW5lIFBOR19MSUJQTkdfQlVJTERfVFlQRU1BU0sgNwogI2RlZmluZSBQTkdfTElCUE5HX0JVSUxEX1BBVENIICAgIDggLyogQ2FuIGJlIE9SJ2VkIHdpdGggU1RBQkxFIG9ubHkgKi8KLSNkZWZpbmUgUE5HX0xJQlBOR19CVUlMRF9UWVBFIDIKKyNkZWZpbmUgUE5HX0xJQlBOR19CVUlMRF9UWVBFIDMKIAogLyogQ2FyZWZ1bCBoZXJlLiAgQXQgb25lIHRpbWUsIEd1eSB3YW50ZWQgdG8gdXNlIDA4MiwgYnV0IHRoYXQgd291bGQgYmUgb2N0YWwuCiAgKiBXZSBtdXN0IG5vdCBpbmNsdWRlIGxlYWRpbmcgemVyb3MuCkBAIC0xMTg1LDkgKzExODYsOSBAQAogCiAKIC8qIFRoaXMgcHJldmVudHMgYSBjb21waWxlciBlcnJvciBpbiBwbmdfZ2V0X2NvcHlyaWdodCgpIGluIHBuZy5jIGlmIHBuZy5jCi1hbmQgcG5nLmggYXJlIGJvdGggYXQgKiB2ZXJzaW9uIDEuMC4xMWJldGEzCithbmQgcG5nLmggYXJlIGJvdGggYXQgKiB2ZXJzaW9uIDEuMC4xMXJjMQogICovCi10eXBlZGVmIHBuZ19zdHJ1Y3RwIHZlcnNpb25fMV8wXzExYmV0YTM7Cit0eXBlZGVmIHBuZ19zdHJ1Y3RwIHZlcnNpb25fMV8wXzExcmMxOwogCiB0eXBlZGVmIHBuZ19zdHJ1Y3QgRkFSICogRkFSICogcG5nX3N0cnVjdHBwOwogCkBAIC0yMjM1LDcgKzIyMzYsNyBAQAogLyogTWFpbnRhaW5lcjogUHV0IG5ldyBwdWJsaWMgcHJvdG90eXBlcyBoZXJlIF4sIGluIGxpYnBuZy4zLCBhbmQgcHJvamVjdCBkZWZzICovCiAKICNkZWZpbmUgUE5HX0hFQURFUl9WRVJTSU9OX1NUUklORyBcCi0gICAiIGxpYnBuZyB2ZXJzaW9uIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEgKGhlYWRlcilcbiIKKyAgICIgbGlicG5nIHZlcnNpb24gMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDEgKGhlYWRlcilcbiIKIAogI2lmZGVmIFBOR19SRUFEX0NPTVBPU0lURV9OT0RJVl9TVVBQT1JURUQKIC8qIFdpdGggdGhlc2Ugcm91dGluZXMgd2UgYXZvaWQgYW4gaW50ZWdlciBkaXZpZGUsIHdoaWNoIHdpbGwgYmUgc2xvd2VyIG9uCmRpZmYgLS1naXQgYS9wbmdhc21yZC5oIGIvcG5nYXNtcmQuaAppbmRleCBhYWI2MTYwLi4wYTkzZGU0IDEwMDY0NAotLS0gYS9wbmdhc21yZC5oCisrKyBiL3BuZ2FzbXJkLmgKQEAgLTEsNiArMSw2IEBACiAvKiBwbmdhc21yZC5oIC0gYXNzZW1ibGVyIHZlcnNpb24gb2YgdXRpbGl0aWVzIHRvIHJlYWQgYSBQTkcgZmlsZQogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCisgKiBsaWJwbmcgMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAyMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICoKZGlmZiAtLWdpdCBhL3BuZ2NvbmYuaCBiL3BuZ2NvbmYuaAppbmRleCBjNTQ3NDRiLi41OWE3ZGMwIDEwMDY0NAotLS0gYS9wbmdjb25mLmgKKysrIGIvcG5nY29uZi5oCkBAIC0xLDYgKzEsNiBAQAogLyogcG5nY29uZi5oIC0gbWFjaGluZSBjb25maWd1cmFibGUgZmlsZSBmb3IgbGlicG5nCiAgKgotICogbGlicG5nIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFyYzEgLSBBcHJpbCAyMCwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpkaWZmIC0tZ2l0IGEvcG5nZXJyb3IuYyBiL3BuZ2Vycm9yLmMKaW5kZXggOWU3Njk3NS4uNzY1MjhiNiAxMDA2NDQKLS0tIGEvcG5nZXJyb3IuYworKysgYi9wbmdlcnJvci5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdlcnJvci5jIC0gc3R1YiBmdW5jdGlvbnMgZm9yIGkvbyBhbmQgbWVtb3J5IGFsbG9jYXRpb24KICAqCi0gKiBsaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQorICogbGlicG5nIDEuMC4xMXJjMSAtIEFwcmlsIDIwLCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC02MSwxMSArNjEsMTIgQEAKICAqLwogI2RlZmluZSBpc25vbmFscGhhKGMpICgoYykgPCA0MSB8fCAoYykgPiAxMjIgfHwgKChjKSA+IDkwICYmIChjKSA8IDk3KSkKIHN0YXRpYyBQTkdfQ09OU1QgY2hhciBwbmdfZGlnaXRbMTZdID0gewotICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnCi19OworICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywKKyAgICdGJyB9OwogCiBzdGF0aWMgdm9pZCAvKiBQUklWQVRFICovCi1wbmdfZm9ybWF0X2J1ZmZlcihwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfY2hhcnAgYnVmZmVyLCBwbmdfY29uc3RfY2hhcnAgbWVzc2FnZSkKK3BuZ19mb3JtYXRfYnVmZmVyKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19jaGFycCBidWZmZXIsIHBuZ19jb25zdF9jaGFycAorICAgbWVzc2FnZSkKIHsKICAgIGludCBpb3V0ID0gMCwgaWluID0gMDsKIApkaWZmIC0tZ2l0IGEvcG5nZ2NjcmQuYyBiL3BuZ2djY3JkLmMKaW5kZXggYWMyYjhiYi4uODY0ODY4OSAxMDA2NDQKLS0tIGEvcG5nZ2NjcmQuYworKysgYi9wbmdnY2NyZC5jCkBAIC02LDcgKzYsNyBAQAogICogICAgIGFuZCBodHRwOi8vd3d3LmludGVsLmNvbS9kcmcvcGVudGl1bUlJL2FwcG5vdGVzLzkyMy85MjMuaHRtCiAgKiAgICAgZm9yIEludGVsJ3MgcGVyZm9ybWFuY2UgYW5hbHlzaXMgb2YgdGhlIE1NWCB2cy4gbm9uLU1NWCBjb2RlLgogICoKLSAqIGxpYnBuZyB2ZXJzaW9uIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKKyAqIGxpYnBuZyB2ZXJzaW9uIDEuMC4xMXJjMSAtIEFwcmlsIDIwLCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogQ29weXJpZ2h0IChjKSAxOTk4LCBJbnRlbCBDb3Jwb3JhdGlvbgpkaWZmIC0tZ2l0IGEvcG5nZ2V0LmMgYi9wbmdnZXQuYwppbmRleCBlMDViMmFmLi5kZDc0MjZhIDEwMDY0NAotLS0gYS9wbmdnZXQuYworKysgYi9wbmdnZXQuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nZ2V0LmMgLSByZXRyaWV2YWwgb2YgdmFsdWVzIGZyb20gaW5mbyBzdHJ1Y3QKICAqCi0gKiBsaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQorICogbGlicG5nIDEuMC4xMXJjMSAtIEFwcmlsIDIwLCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0xMzcsNyArMTM3LDcgQEAKICNpZiBkZWZpbmVkKFBOR19wSFlzX1NVUFBPUlRFRCkKICAgIGlmIChpbmZvX3B0ci0+dmFsaWQgJiBQTkdfSU5GT19wSFlzKQogICAgewotICAgICAgIHBuZ19kZWJ1ZzEoMSwgImluICVzIHJldHJpZXZhbCBmdW5jdGlvblxuIiwgInBuZ19nZXRfeV9waXhlbHNfcGVyX21ldGVyIik7CisgICAgICBwbmdfZGVidWcxKDEsICJpbiAlcyByZXRyaWV2YWwgZnVuY3Rpb25cbiIsICJwbmdfZ2V0X3lfcGl4ZWxzX3Blcl9tZXRlciIpOwogICAgICAgaWYoaW5mb19wdHItPnBoeXNfdW5pdF90eXBlICE9IFBOR19SRVNPTFVUSU9OX01FVEVSKQogICAgICAgICAgIHJldHVybiAoMCk7CiAgICAgICBlbHNlIHJldHVybiAoaW5mb19wdHItPnlfcGl4ZWxzX3Blcl91bml0KTsKZGlmZiAtLWdpdCBhL3BuZ21lbS5jIGIvcG5nbWVtLmMKaW5kZXggM2JhN2M2YS4uZTdmZGY4YiAxMDA2NDQKLS0tIGEvcG5nbWVtLmMKKysrIGIvcG5nbWVtLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ21lbS5jIC0gc3R1YiBmdW5jdGlvbnMgZm9yIG1lbW9yeSBhbGxvY2F0aW9uCiAgKgotICogbGlicG5nIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFyYzEgLSBBcHJpbCAyMCwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTE5LDcgKzExOSwxMiBAQAogCiAjaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAogICAgaWYocG5nX3B0ci0+bWFsbG9jX2ZuICE9IE5VTEwpCi0gICAgICAgcmV0dXJuICgocG5nX3ZvaWRwKSgqKHBuZ19wdHItPm1hbGxvY19mbikpKHBuZ19wdHIsIHNpemUpKTsKKyAgIHsKKyAgICAgICByZXQgPSAoKHBuZ192b2lkcCkoKihwbmdfcHRyLT5tYWxsb2NfZm4pKShwbmdfcHRyLCBzaXplKSk7CisgICAgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiT3V0IG9mIG1lbW9yeSEiKTsKKyAgICAgICByZXR1cm4gKHJldCk7CisgICB9CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIHBuZ19tYWxsb2NfZGVmYXVsdChwbmdfcHRyLCBzaXplKTsKIH0KQEAgLTM3MywxNSArMzc4LDE4IEBACiBwbmdfdm9pZHAgUE5HQVBJCiBwbmdfbWFsbG9jKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ191aW50XzMyIHNpemUpCiB7Ci0jaWZuZGVmIFBOR19VU0VSX01FTV9TVVBQT1JURUQKICAgIHBuZ192b2lkcCByZXQ7Ci0jZW5kaWYKICAgIGlmIChwbmdfcHRyID09IE5VTEwgfHwgc2l6ZSA9PSAwKQogICAgICAgcmV0dXJuICgocG5nX3ZvaWRwKU5VTEwpOwogCiAjaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAogICAgaWYocG5nX3B0ci0+bWFsbG9jX2ZuICE9IE5VTEwpCi0gICAgICAgcmV0dXJuICgocG5nX3ZvaWRwKSgqKHBuZ19wdHItPm1hbGxvY19mbikpKHBuZ19wdHIsIHNpemUpKTsKKyAgIHsKKyAgICAgICByZXQgPSAoKHBuZ192b2lkcCkoKihwbmdfcHRyLT5tYWxsb2NfZm4pKShwbmdfcHRyLCBzaXplKSk7CisgICAgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiT3V0IG9mIE1lbW9yeSEiKTsKKyAgICAgICByZXR1cm4gKHJldCk7CisgICB9CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIChwbmdfbWFsbG9jX2RlZmF1bHQocG5nX3B0ciwgc2l6ZSkpOwogfQpAQCAtNDA3LDkgKzQxNSw3IEBACiAjZW5kaWYKIAogICAgaWYgKHJldCA9PSBOVUxMKQotICAgewogICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJPdXQgb2YgTWVtb3J5Iik7Ci0gICB9CiAKICAgIHJldHVybiAocmV0KTsKIH0KZGlmZiAtLWdpdCBhL3BuZ3ByZWFkLmMgYi9wbmdwcmVhZC5jCmluZGV4IDgxNmFiYmUuLjJjMDA4YTIgMTAwNjQ0Ci0tLSBhL3BuZ3ByZWFkLmMKKysrIGIvcG5ncHJlYWQuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5ncHJlYWQuYyAtIHJlYWQgYSBwbmcgZmlsZSBpbiBwdXNoIG1vZGUKICAqCi0gKiBsaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQorICogbGlicG5nIDEuMC4xMXJjMSAtIEFwcmlsIDIwLCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC01ODUsMTggKzU4NSw5IEBACiAgICAgICBvbGRfYnVmZmVyID0gcG5nX3B0ci0+c2F2ZV9idWZmZXI7CiAgICAgICBwbmdfcHRyLT5zYXZlX2J1ZmZlciA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgKHBuZ191aW50XzMyKW5ld19tYXgpOwotICAgICAgaWYgKHBuZ19wdHItPnNhdmVfYnVmZmVyID09IChwbmdfYnl0ZXApTlVMTCkKLSAgICAgIHsKLSAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIk1hbGxvYyBvZiBzYXZlIGJ1ZmZlciBmYWlsZWQiKTsKLSAgICAgICAgcG5nX3B0ci0+c2F2ZV9idWZmZXI9b2xkX2J1ZmZlcjsKLSAgICAgICAgcG5nX3B0ci0+Y3VycmVudF9idWZmZXJfc2l6ZSA9IDA7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHBuZ19tZW1jcHkocG5nX3B0ci0+c2F2ZV9idWZmZXIsIG9sZF9idWZmZXIsIHBuZ19wdHItPnNhdmVfYnVmZmVyX3NpemUpOwotICAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBvbGRfYnVmZmVyKTsKLSAgICAgICAgcG5nX3B0ci0+c2F2ZV9idWZmZXJfbWF4ID0gbmV3X21heDsKLSAgICAgIH0KKyAgICAgIHBuZ19tZW1jcHkocG5nX3B0ci0+c2F2ZV9idWZmZXIsIG9sZF9idWZmZXIsIHBuZ19wdHItPnNhdmVfYnVmZmVyX3NpemUpOworICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgb2xkX2J1ZmZlcik7CisgICAgICBwbmdfcHRyLT5zYXZlX2J1ZmZlcl9tYXggPSBuZXdfbWF4OwogICAgfQogICAgaWYgKHBuZ19wdHItPmN1cnJlbnRfYnVmZmVyX3NpemUpCiAgICB7CkBAIC0xMDA0LDcgKzk5NSw4IEBACiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX3RFWHRfU1VQUE9SVEVEKQogdm9pZCAvKiBQUklWQVRFICovCi1wbmdfcHVzaF9oYW5kbGVfdEVYdChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzMyIGxlbmd0aCkKK3BuZ19wdXNoX2hhbmRsZV90RVh0KHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX3VpbnRfMzIKKyAgIGxlbmd0aCkKIHsKICAgIGlmICghKHBuZ19wdHItPm1vZGUgJiBQTkdfSEFWRV9JSERSKSB8fCAocG5nX3B0ci0+bW9kZSAmIFBOR19IQVZFX0lFTkQpKQogICAgICAgewpAQCAtMTAxNiw3ICsxMDA4LDcgQEAKICNpZmRlZiBQTkdfTUFYX01BTExPQ182NEsKICAgIHBuZ19wdHItPnNraXBfbGVuZ3RoID0gMDsgIC8qIFRoaXMgbWF5IG5vdCBiZSBuZWNlc3NhcnkgKi8KIAotICAgaWYgKGxlbmd0aCA+IChwbmdfdWludF8zMik2NTUzNUwpIC8qIENhbid0IGhvbGQgdGhlIGVudGlyZSBzdHJpbmcgaW4gbWVtb3J5ICovCisgICBpZiAobGVuZ3RoID4gKHBuZ191aW50XzMyKTY1NTM1TCkgLyogQ2FuJ3QgaG9sZCBlbnRpcmUgc3RyaW5nIGluIG1lbW9yeSAqLwogICAgewogICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgInRFWHQgY2h1bmsgdG9vIGxhcmdlIHRvIGZpdCBpbiBtZW1vcnkiKTsKICAgICAgIHBuZ19wdHItPnNraXBfbGVuZ3RoID0gbGVuZ3RoIC0gKHBuZ191aW50XzMyKTY1NTM1TDsKQEAgLTEwMjYsMTIgKzEwMTgsNiBAQAogCiAgICBwbmdfcHRyLT5jdXJyZW50X3RleHQgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgIChwbmdfdWludF8zMikobGVuZ3RoKzEpKTsKLSAgIGlmIChwbmdfcHRyLT5jdXJyZW50X3RleHQgPT0gKHBuZ19jaGFycClOVUxMKQotICAgewotICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAibWFsbG9jIG9mIGN1cnJlbnQgdGV4dCBmYWlsZWQiKTsKLSAgICAgICBwbmdfcHRyLT5za2lwX2xlbmd0aD1sZW5ndGg7Ci0gICAgICAgcmV0dXJuOwotICAgfQogICAgcG5nX3B0ci0+Y3VycmVudF90ZXh0W2xlbmd0aF0gPSAnXDAnOwogICAgcG5nX3B0ci0+Y3VycmVudF90ZXh0X3B0ciA9IHBuZ19wdHItPmN1cnJlbnRfdGV4dDsKICAgIHBuZ19wdHItPmN1cnJlbnRfdGV4dF9zaXplID0gKHBuZ19zaXplX3QpbGVuZ3RoOwpAQCAtMTA4MywxMSArMTA2OSw2IEBACiAgICAgICAgICB0ZXh0Kys7CiAKICAgICAgIHRleHRfcHRyID0gKHBuZ190ZXh0cClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMilzaXplb2YocG5nX3RleHQpKTsKLSAgICAgIGlmICh0ZXh0X3B0ciA9PSAocG5nX3RleHRwKU5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJtYWxsb2Mgb2YgdGV4dCBidWZmZXIgZmFpbGVkIik7Ci0gICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgICAgdGV4dF9wdHItPmNvbXByZXNzaW9uID0gUE5HX1RFWFRfQ09NUFJFU1NJT05fTk9ORTsKICAgICAgIHRleHRfcHRyLT5rZXkgPSBrZXk7CiAjaWZkZWYgUE5HX2lUWHRfU1VQUE9SVEVECkBAIC0xMTA2LDcgKzEwODcsOCBAQAogCiAjaWYgZGVmaW5lZChQTkdfUkVBRF96VFh0X1NVUFBPUlRFRCkKIHZvaWQgLyogUFJJVkFURSAqLwotcG5nX3B1c2hfaGFuZGxlX3pUWHQocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBwbmdfdWludF8zMiBsZW5ndGgpCitwbmdfcHVzaF9oYW5kbGVfelRYdChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzMyCisgICBsZW5ndGgpCiB7CiAgICBpZiAoIShwbmdfcHRyLT5tb2RlICYgUE5HX0hBVkVfSUhEUikgfHwgKHBuZ19wdHItPm1vZGUgJiBQTkdfSEFWRV9JRU5EKSkKICAgICAgIHsKQEAgLTExMzAsMTIgKzExMTIsNiBAQAogCiAgICBwbmdfcHRyLT5jdXJyZW50X3RleHQgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAocG5nX3VpbnRfMzIpKGxlbmd0aCsxKSk7Ci0gICBpZiAocG5nX3B0ci0+Y3VycmVudF90ZXh0ID09IChwbmdfY2hhcnApTlVMTCkKLSAgIHsKLSAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAibWFsbG9jIG9mIHpUWHQgYnVmZmVyIGZhaWxlZCIpOwotICAgICAgcG5nX3B1c2hfY3JjX3NraXAocG5nX3B0ciwgbGVuZ3RoKTsKLSAgICAgIHJldHVybjsKLSAgIH0KICAgIHBuZ19wdHItPmN1cnJlbnRfdGV4dFtsZW5ndGhdID0gJ1wwJzsKICAgIHBuZ19wdHItPmN1cnJlbnRfdGV4dF9wdHIgPSBwbmdfcHRyLT5jdXJyZW50X3RleHQ7CiAgICBwbmdfcHRyLT5jdXJyZW50X3RleHRfc2l6ZSA9IChwbmdfc2l6ZV90KWxlbmd0aDsKQEAgLTEyMjQsMTkgKzEyMDAsMTQgQEAKICAgICAgICAgICAgIGlmICh0ZXh0ID09IE5VTEwpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0ZXh0ID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsCi0gICAgICAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0ICsKLSAgICAgICAgICAgICAgICAgICAgIGtleV9zaXplICsgMSkpOwotICAgICAgICAgICAgICAgaWYgKHRleHQgPT0gKHBuZ19jaGFycClOVUxMKQotICAgICAgICAgICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiTWFsbG9jIG9mIHRleHQgYmxvY2sgZmFpbGVkIik7Ci0gICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCArIGtleV9zaXplLCBwbmdfcHRyLT56YnVmLAotICAgICAgICAgICAgICAgICAgICBwbmdfcHRyLT56YnVmX3NpemUgLSBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dCk7Ci0gICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwga2V5LCBrZXlfc2l6ZSk7Ci0gICAgICAgICAgICAgICAgIHRleHRfc2l6ZSA9IGtleV9zaXplICsgcG5nX3B0ci0+emJ1Zl9zaXplIC0KLSAgICAgICAgICAgICAgICAgICAgcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgICAgICAgICAgICoodGV4dCArIHRleHRfc2l6ZSkgPSAnXDAnOwotICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKShwbmdfcHRyLT56YnVmX3NpemUgLSBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dAorICAgICAgICAgICAgICAgICAgICAgKyBrZXlfc2l6ZSArIDEpKTsKKyAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCArIGtleV9zaXplLCBwbmdfcHRyLT56YnVmLAorICAgICAgICAgICAgICAgICAgcG5nX3B0ci0+emJ1Zl9zaXplIC0gcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQpOworICAgICAgICAgICAgICAgcG5nX21lbWNweSh0ZXh0LCBrZXksIGtleV9zaXplKTsKKyAgICAgICAgICAgICAgIHRleHRfc2l6ZSA9IGtleV9zaXplICsgcG5nX3B0ci0+emJ1Zl9zaXplIC0KKyAgICAgICAgICAgICAgICAgIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0OworICAgICAgICAgICAgICAgKih0ZXh0ICsgdGV4dF9zaXplKSA9ICdcMCc7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CkBAIC0xMjQ2LDE3ICsxMjE3LDEyIEBACiAgICAgICAgICAgICAgICB0ZXh0ID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIHRleHRfc2l6ZSArCiAgICAgICAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0CiAgICAgICAgICAgICAgICAgICAgKyAxKSk7Ci0gICAgICAgICAgICAgICBpZiAodGV4dCAhPSAocG5nX2NoYXJwKU5VTEwpCi0gICAgICAgICAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJNYWxsb2Mgb2YgbmV3IHRleHQgYmxvY2sgZmFpbGVkIik7Ci0gICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwgdG1wLCB0ZXh0X3NpemUpOwotICAgICAgICAgICAgICAgICBwbmdfZnJlZShwbmdfcHRyLCB0bXApOwotICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQgKyB0ZXh0X3NpemUsIHBuZ19wdHItPnpidWYsCi0gICAgICAgICAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0KTsKLSAgICAgICAgICAgICAgICAgdGV4dF9zaXplICs9IHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICAgICAgICAgICAqKHRleHQgKyB0ZXh0X3NpemUpID0gJ1wwJzsKLSAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwgdG1wLCB0ZXh0X3NpemUpOworICAgICAgICAgICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgdG1wKTsKKyAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCArIHRleHRfc2l6ZSwgcG5nX3B0ci0+emJ1ZiwKKyAgICAgICAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0KTsKKyAgICAgICAgICAgICAgIHRleHRfc2l6ZSArPSBwbmdfcHRyLT56YnVmX3NpemUgLSBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dDsKKyAgICAgICAgICAgICAgICoodGV4dCArIHRleHRfc2l6ZSkgPSAnXDAnOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpCiAgICAgICAgICAgICB7CkBAIC0xMjg4LDMwICsxMjU0LDI2IEBACiAgICAgICB0ZXh0ICs9IGtleV9zaXplOwogCiAgICAgICB0ZXh0X3B0ciA9IChwbmdfdGV4dHApcG5nX21hbGxvYyhwbmdfcHRyLCAocG5nX3VpbnRfMzIpc2l6ZW9mKHBuZ190ZXh0KSk7Ci0gICAgICBpZiAodGV4dF9wdHIgPT0gKHBuZ190ZXh0cClOVUxMKQotICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJNYWxsb2Mgb2YgaVRYdCBmYWlsZWQiKTsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgdGV4dF9wdHItPmNvbXByZXNzaW9uID0gUE5HX1RFWFRfQ09NUFJFU1NJT05felRYdDsKLSAgICAgICAgdGV4dF9wdHItPmtleSA9IGtleTsKKyAgICAgIHRleHRfcHRyLT5jb21wcmVzc2lvbiA9IFBOR19URVhUX0NPTVBSRVNTSU9OX3pUWHQ7CisgICAgICB0ZXh0X3B0ci0+a2V5ID0ga2V5OwogI2lmZGVmIFBOR19pVFh0X1NVUFBPUlRFRAotICAgICAgICB0ZXh0X3B0ci0+bGFuZyA9IChjaGFyICopTlVMTDsKLSAgICAgICAgdGV4dF9wdHItPmxhbmdfa2V5ID0gKGNoYXIgKilOVUxMOworICAgICAgdGV4dF9wdHItPmxhbmcgPSAoY2hhciAqKU5VTEw7CisgICAgICB0ZXh0X3B0ci0+bGFuZ19rZXkgPSAoY2hhciAqKU5VTEw7CiAjZW5kaWYKLSAgICAgICAgdGV4dF9wdHItPnRleHQgPSB0ZXh0OworICAgICAgdGV4dF9wdHItPnRleHQgPSB0ZXh0OwogCi0gICAgICAgIHBuZ19zZXRfdGV4dChwbmdfcHRyLCBpbmZvX3B0ciwgdGV4dF9wdHIsIDEpOworICAgICAgcG5nX3NldF90ZXh0KHBuZ19wdHIsIGluZm9fcHRyLCB0ZXh0X3B0ciwgMSk7CiAKLSAgICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgdGV4dF9wdHIpOwotICAgICAgfQogICAgICAgcG5nX2ZyZWUocG5nX3B0ciwga2V5KTsKKyAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIHRleHRfcHRyKTsKICAgIH0KIH0KICNlbmRpZgogCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9pVFh0X1NVUFBPUlRFRCkKIHZvaWQgLyogUFJJVkFURSAqLwotcG5nX3B1c2hfaGFuZGxlX2lUWHQocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBwbmdfdWludF8zMiBsZW5ndGgpCitwbmdfcHVzaF9oYW5kbGVfaVRYdChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzMyCisgICBsZW5ndGgpCiB7CiAgICBpZiAoIShwbmdfcHRyLT5tb2RlICYgUE5HX0hBVkVfSUhEUikgfHwgKHBuZ19wdHItPm1vZGUgJiBQTkdfSEFWRV9JRU5EKSkKICAgICAgIHsKQEAgLTEzMjMsNyArMTI4NSw3IEBACiAjaWZkZWYgUE5HX01BWF9NQUxMT0NfNjRLCiAgICBwbmdfcHRyLT5za2lwX2xlbmd0aCA9IDA7ICAvKiBUaGlzIG1heSBub3QgYmUgbmVjZXNzYXJ5ICovCiAKLSAgIGlmIChsZW5ndGggPiAocG5nX3VpbnRfMzIpNjU1MzVMKSAvKiBDYW4ndCBob2xkIHRoZSBlbnRpcmUgc3RyaW5nIGluIG1lbW9yeSAqLworICAgaWYgKGxlbmd0aCA+IChwbmdfdWludF8zMik2NTUzNUwpIC8qIENhbid0IGhvbGQgZW50aXJlIHN0cmluZyBpbiBtZW1vcnkgKi8KICAgIHsKICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJpVFh0IGNodW5rIHRvbyBsYXJnZSB0byBmaXQgaW4gbWVtb3J5Iik7CiAgICAgICBwbmdfcHRyLT5za2lwX2xlbmd0aCA9IGxlbmd0aCAtIChwbmdfdWludF8zMik2NTUzNUw7CkBAIC0xMzMzLDE2ICsxMjk1LDExIEBACiAKICAgIHBuZ19wdHItPmN1cnJlbnRfdGV4dCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgKHBuZ191aW50XzMyKShsZW5ndGgrMSkpOwotICAgaWYgKHBuZ19wdHItPmN1cnJlbnRfdGV4dCA9PSAocG5nX2NoYXJwKU5VTEwpCi0gICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAibWFsbG9jIG9mIGlUWHQgYnVmZmVyIGZhaWxlZCIpOwotICAgZWxzZQotICAgICB7Ci0gICAgICAgcG5nX3B0ci0+Y3VycmVudF90ZXh0W2xlbmd0aF0gPSAnXDAnOwotICAgICAgIHBuZ19wdHItPmN1cnJlbnRfdGV4dF9wdHIgPSBwbmdfcHRyLT5jdXJyZW50X3RleHQ7Ci0gICAgICAgcG5nX3B0ci0+Y3VycmVudF90ZXh0X3NpemUgPSAocG5nX3NpemVfdClsZW5ndGg7Ci0gICAgICAgcG5nX3B0ci0+Y3VycmVudF90ZXh0X2xlZnQgPSAocG5nX3NpemVfdClsZW5ndGg7Ci0gICAgICAgcG5nX3B0ci0+cHJvY2Vzc19tb2RlID0gUE5HX1JFQURfaVRYdF9NT0RFOwotICAgICB9CisgICBwbmdfcHRyLT5jdXJyZW50X3RleHRbbGVuZ3RoXSA9ICdcMCc7CisgICBwbmdfcHRyLT5jdXJyZW50X3RleHRfcHRyID0gcG5nX3B0ci0+Y3VycmVudF90ZXh0OworICAgcG5nX3B0ci0+Y3VycmVudF90ZXh0X3NpemUgPSAocG5nX3NpemVfdClsZW5ndGg7CisgICBwbmdfcHRyLT5jdXJyZW50X3RleHRfbGVmdCA9IChwbmdfc2l6ZV90KWxlbmd0aDsKKyAgIHBuZ19wdHItPnByb2Nlc3NfbW9kZSA9IFBOR19SRUFEX2lUWHRfTU9ERTsKIH0KIAogdm9pZCAvKiBQUklWQVRFICovCkBAIC0xNDA2LDEwICsxMzYzLDYgQEAKICAgICAgICAgIHRleHQrKzsKIAogICAgICAgdGV4dF9wdHIgPSAocG5nX3RleHRwKXBuZ19tYWxsb2MocG5nX3B0ciwgKHBuZ191aW50XzMyKXNpemVvZihwbmdfdGV4dCkpOwotICAgICAgaWYodGV4dF9wdHIgPT0gKHBuZ190ZXh0cClOVUxMKQotICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJNYWxsb2Mgb2YgaVRYdCBwb2ludGVyIGZhaWxlZCIpOwotICAgICAgZWxzZQotICAgICAgewogICAgICAgdGV4dF9wdHItPmNvbXByZXNzaW9uID0gY29tcF9mbGFnICsgMjsKICAgICAgIHRleHRfcHRyLT5rZXkgPSBrZXk7CiAgICAgICB0ZXh0X3B0ci0+bGFuZyA9IGxhbmc7CkBAIC0xNDIxLDcgKzEzNzQsNiBAQAogICAgICAgcG5nX3NldF90ZXh0KHBuZ19wdHIsIGluZm9fcHRyLCB0ZXh0X3B0ciwgMSk7CiAKICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIHRleHRfcHRyKTsKLSAgICAgIH0KICAgIH0KIH0KICNlbmRpZgpAQCAtMTQzMSw3ICsxMzgzLDggQEAKICAqIG5hbWUgb3IgYSBjcml0aWNhbCBjaHVuayksIHRoZSBjaHVuayBpcyAoY3VycmVudGx5KSBzaWxlbnRseSBpZ25vcmVkLgogICovCiB2b2lkIC8qIFBSSVZBVEUgKi8KLXBuZ19wdXNoX2hhbmRsZV91bmtub3duKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX3VpbnRfMzIgbGVuZ3RoKQorcG5nX3B1c2hfaGFuZGxlX3Vua25vd24ocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBwbmdfdWludF8zMgorICAgbGVuZ3RoKQogewogICAgcG5nX3VpbnRfMzIgc2tpcD0wOwogICAgcG5nX2NoZWNrX2NodW5rX25hbWUocG5nX3B0ciwgcG5nX3B0ci0+Y2h1bmtfbmFtZSk7CkBAIC0xNDQyLDcgKzEzOTUsNyBAQAogICAgICAgaWYocG5nX2hhbmRsZV9hc191bmtub3duKHBuZ19wdHIsIHBuZ19wdHItPmNodW5rX25hbWUpICE9CiAgICAgICAgICAgIEhBTkRMRV9DSFVOS19BTFdBWVMKICNpZiBkZWZpbmVkKFBOR19SRUFEX1VTRVJfQ0hVTktTX1NVUFBPUlRFRCkKLSAgICAgICAgICAgJiYgcG5nX3B0ci0+cmVhZF91c2VyX2NodW5rX2ZuID09IChwbmdfdXNlcl9jaHVua19wdHIpTlVMTAorICAgICAgICAgICAmJiBwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4gPT0gTlVMTAogI2VuZGlmCiAgICAgICAgICApCiAjZW5kaWYKQEAgLTE0NjksMzAgKzE0MjIsMjUgQEAKIAogICAgICAgIHBuZ19zdHJjcHkoKHBuZ19jaGFycCljaHVuay5uYW1lLCAocG5nX2NoYXJwKXBuZ19wdHItPmNodW5rX25hbWUpOwogICAgICAgIGNodW5rLmRhdGEgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwgbGVuZ3RoKTsKLSAgICAgICBpZiAoY2h1bmsuZGF0YSA9PSAocG5nX2J5dGVwKU5VTEwpCi0gICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJNYWxsb2Mgb2YgdW5rbm93biBjaHVuayBkYXRhIGZhaWxlZCIpOwotICAgICAgIGVsc2UKLSAgICAgICB7Ci0gICAgICAgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgY2h1bmsuZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgIGNodW5rLnNpemUgPSBsZW5ndGg7CisgICAgICAgcG5nX2NyY19yZWFkKHBuZ19wdHIsIGNodW5rLmRhdGEsIGxlbmd0aCk7CisgICAgICAgY2h1bmsuc2l6ZSA9IGxlbmd0aDsKICNpZiBkZWZpbmVkKFBOR19SRUFEX1VTRVJfQ0hVTktTX1NVUFBPUlRFRCkKLSAgICAgICAgIGlmKHBuZ19wdHItPnJlYWRfdXNlcl9jaHVua19mbiAhPSAocG5nX3VzZXJfY2h1bmtfcHRyKU5VTEwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICAvKiBjYWxsYmFjayB0byB1c2VyIHVua25vd24gY2h1bmsgaGFuZGxlciAqLwotICAgICAgICAgICAgaWYgKCgqKHBuZ19wdHItPnJlYWRfdXNlcl9jaHVua19mbikpIChwbmdfcHRyLCAmY2h1bmspIDw9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBpZiAoIShwbmdfcHRyLT5jaHVua19uYW1lWzBdICYgMHgyMCkpCi0gICAgICAgICAgICAgICAgICBpZihwbmdfaGFuZGxlX2FzX3Vua25vd24ocG5nX3B0ciwgcG5nX3B0ci0+Y2h1bmtfbmFtZSkgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgSEFORExFX0NIVU5LX0FMV0FZUykKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19jaHVua19lcnJvcihwbmdfcHRyLCAidW5rbm93biBjcml0aWNhbCBjaHVuayIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgcG5nX3NldF91bmtub3duX2NodW5rcyhwbmdfcHRyLCBpbmZvX3B0ciwgJmNodW5rLCAxKTsKLSAgICAgICAgIH0KLSAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgcG5nX3NldF91bmtub3duX2NodW5rcyhwbmdfcHRyLCBpbmZvX3B0ciwgJmNodW5rLCAxKTsKLSAgICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIGNodW5rLmRhdGEpOworICAgICAgIGlmKHBuZ19wdHItPnJlYWRfdXNlcl9jaHVua19mbiAhPSBOVUxMKQorICAgICAgIHsKKyAgICAgICAgICAvKiBjYWxsYmFjayB0byB1c2VyIHVua25vd24gY2h1bmsgaGFuZGxlciAqLworICAgICAgICAgIGlmICgoKihwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4pKSAocG5nX3B0ciwgJmNodW5rKSA8PSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBpZiAoIShwbmdfcHRyLT5jaHVua19uYW1lWzBdICYgMHgyMCkpCisgICAgICAgICAgICAgICAgaWYocG5nX2hhbmRsZV9hc191bmtub3duKHBuZ19wdHIsIHBuZ19wdHItPmNodW5rX25hbWUpICE9CisgICAgICAgICAgICAgICAgICAgICBIQU5ETEVfQ0hVTktfQUxXQVlTKQorICAgICAgICAgICAgICAgICAgIHBuZ19jaHVua19lcnJvcihwbmdfcHRyLCAidW5rbm93biBjcml0aWNhbCBjaHVuayIpOworICAgICAgICAgIH0KKyAgICAgICAgICAgICBwbmdfc2V0X3Vua25vd25fY2h1bmtzKHBuZ19wdHIsIGluZm9fcHRyLCAmY2h1bmssIDEpOwogICAgICAgIH0KKyAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICBwbmdfc2V0X3Vua25vd25fY2h1bmtzKHBuZ19wdHIsIGluZm9fcHRyLCAmY2h1bmssIDEpOworICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIGNodW5rLmRhdGEpOwogICAgfQogICAgZWxzZQogI2VuZGlmCmRpZmYgLS1naXQgYS9wbmdyZWFkLmMgYi9wbmdyZWFkLmMKaW5kZXggMjhlNjZkNC4uZDc3ZWNkYSAxMDA2NDQKLS0tIGEvcG5ncmVhZC5jCisrKyBiL3BuZ3JlYWQuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5ncmVhZC5jIC0gcmVhZCBhIFBORyBmaWxlCiAgKgotICogbGlicG5nIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFyYzEgLSBBcHJpbCAyMCwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTE1LDggKzExNSw2IEBACiAgICBwbmdfcHRyLT56YnVmX3NpemUgPSBQTkdfWkJVRl9TSVpFOwogICAgcG5nX3B0ci0+emJ1ZiA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAocG5nX3VpbnRfMzIpcG5nX3B0ci0+emJ1Zl9zaXplKTsKLSAgIGlmIChwbmdfcHRyLT56YnVmID09IChwbmdfYnl0ZXApTlVMTCkKLSAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIHpidWYiKTsKICAgIHBuZ19wdHItPnpzdHJlYW0uemFsbG9jID0gcG5nX3phbGxvYzsKICAgIHBuZ19wdHItPnpzdHJlYW0uemZyZWUgPSBwbmdfemZyZWU7CiAgICBwbmdfcHRyLT56c3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpcG5nX3B0cjsKQEAgLTE5OSw4ICsxOTcsNiBAQAogICAgcG5nX3B0ci0+emJ1Zl9zaXplID0gUE5HX1pCVUZfU0laRTsKICAgIHBuZ19wdHItPnpidWYgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgKHBuZ191aW50XzMyKXBuZ19wdHItPnpidWZfc2l6ZSk7Ci0gICBpZiAocG5nX3B0ci0+emJ1ZiA9PSAocG5nX2J5dGVwKU5VTEwpCi0gICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSB6YnVmIik7CiAgICBwbmdfcHRyLT56c3RyZWFtLnphbGxvYyA9IHBuZ196YWxsb2M7CiAgICBwbmdfcHRyLT56c3RyZWFtLnpmcmVlID0gcG5nX3pmcmVlOwogICAgcG5nX3B0ci0+enN0cmVhbS5vcGFxdWUgPSAodm9pZHBmKXBuZ19wdHI7CkBAIC03MTksNyArNzE1LDcgQEAKICAqIG5vdCBjYWxsZWQgcG5nX3NldF9pbnRlcmxhY2VfaGFuZGxpbmcoKSwgdGhlIGRpc3BsYXlfcm93IGJ1ZmZlciB3aWxsCiAgKiBiZSBpZ25vcmVkLCBzbyBwYXNzIE5VTEwgdG8gaXQuCiAgKgotICogWypdIHBuZ19oYW5kbGVfYWxwaGEoKSBkb2VzIG5vdCBleGlzdCB5ZXQsIGFzIG9mIGxpYnBuZyB2ZXJzaW9uIDEuMC4xMWJldGEzCisgKiBbKl0gcG5nX2hhbmRsZV9hbHBoYSgpIGRvZXMgbm90IGV4aXN0IHlldCwgYXMgb2YgbGlicG5nIHZlcnNpb24gMS4wLjExcmMxCiAgKi8KIAogdm9pZCBQTkdBUEkKQEAgLTc2OCw3ICs3NjQsNyBAQAogICogb25seSBjYWxsIHRoaXMgZnVuY3Rpb24gb25jZS4gIElmIHlvdSBkZXNpcmUgdG8gaGF2ZSBhbiBpbWFnZSBmb3IKICAqIGVhY2ggcGFzcyBvZiBhIGludGVybGFjZWQgaW1hZ2UsIHVzZSBwbmdfcmVhZF9yb3dzKCkgaW5zdGVhZC4KICAqCi0gKiBbKl0gcG5nX2hhbmRsZV9hbHBoYSgpIGRvZXMgbm90IGV4aXN0IHlldCwgYXMgb2YgbGlicG5nIHZlcnNpb24gMS4wLjExYmV0YTMKKyAqIFsqXSBwbmdfaGFuZGxlX2FscGhhKCkgZG9lcyBub3QgZXhpc3QgeWV0LCBhcyBvZiBsaWJwbmcgdmVyc2lvbiAxLjAuMTFyYzEKICAqLwogdm9pZCBQTkdBUEkKIHBuZ19yZWFkX2ltYWdlKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19ieXRlcHAgaW1hZ2UpCkBAIC0xMzIyLDggKzEzMTgsNiBAQAogICAgewogICAgICAgaW5mb19wdHItPnJvd19wb2ludGVycyA9IChwbmdfYnl0ZXBwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgIGluZm9fcHRyLT5oZWlnaHQgKiBzaXplb2YocG5nX2J5dGVwKSk7Ci0gICAgICBpZiAoaW5mb19wdHItPnJvd19wb2ludGVycykKLSAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAicG5nX3JlYWRfcG5nIGNvdWxkIG5vdCBhbGxvY2F0ZSByb3cgcG9pbnRlcnMiKTsKICNpZmRlZiBQTkdfRlJFRV9NRV9TVVBQT1JURUQKICAgICAgIGluZm9fcHRyLT5mcmVlX21lIHw9IFBOR19GUkVFX1JPV1M7CiAjZW5kaWYKQEAgLTEzMzEsMTUgKzEzMjUsNiBAQAogICAgICAgewogICAgICAgICAgaW5mb19wdHItPnJvd19wb2ludGVyc1tyb3ddID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICBwbmdfZ2V0X3Jvd2J5dGVzKHBuZ19wdHIsIGluZm9fcHRyKSk7Ci0gICAgICAgICBpZiAoaW5mb19wdHItPnJvd19wb2ludGVycykKLSAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBhbGxvY2F0ZWRfcm93OwotICAgICAgICAgICAgZm9yIChhbGxvY2F0ZWRfcm93PTA7IGFsbG9jYXRlZF9yb3cgPCByb3c7IGFsbG9jYXRlZF9yb3crKykKLSAgICAgICAgICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIGluZm9fcHRyLT5yb3dfcG9pbnRlcnNbYWxsb2NhdGVkX3Jvd10pOwotICAgICAgICAgICAgaWYgKGluZm9fcHRyLT5mcmVlX21lICYgIShQTkdfRlJFRV9ST1dTKSkKLSAgICAgICAgICAgICAgIHBuZ19mcmVlIChwbmdfcHRyLCBpbmZvX3B0ci0+cm93X3BvaW50ZXJzKTsKLSAgICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAicG5nX3JlYWRfcG5nIGNvdWxkIG5vdCBhbGxvY2F0ZSByb3cgcG9pbnRlciIpOwotICAgICAgICAgfQogICAgICAgfQogICAgfQogCkBAIC0xMzQ5LDcgKzEzMzQsNyBAQAogICAgLyogcmVhZCByZXN0IG9mIGZpbGUsIGFuZCBnZXQgYWRkaXRpb25hbCBjaHVua3MgaW4gaW5mb19wdHIgLSBSRVFVSVJFRCAqLwogICAgcG5nX3JlYWRfZW5kKHBuZ19wdHIsIGluZm9fcHRyKTsKIAotICAgaWYodHJhbnNmb3JtcyA9PSAwIHx8IHBhcmFtcyA9PSAodm9pZHApTlVMTCkKKyAgIGlmKHRyYW5zZm9ybXMgPT0gMCB8fCBwYXJhbXMgPT0gTlVMTCkKICAgICAgIC8qIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzICovIHJldHVybjsKIAogfQpkaWZmIC0tZ2l0IGEvcG5ncmlvLmMgYi9wbmdyaW8uYwppbmRleCBkNmQxZDcwLi41ZmJjNjY4IDEwMDY0NAotLS0gYS9wbmdyaW8uYworKysgYi9wbmdyaW8uYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5ncmlvLmMgLSBmdW5jdGlvbnMgZm9yIGRhdGEgaW5wdXQKICAqCi0gKiBsaWJwbmcgMS4wLjExYmV0YTMgLSBBcHJpbCAxNSwgMjAwMQorICogbGlicG5nIDEuMC4xMXJjMSAtIEFwcmlsIDIwLCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCmRpZmYgLS1naXQgYS9wbmdydHJhbi5jIGIvcG5ncnRyYW4uYwppbmRleCA5YWIxNTJlLi42NzgwMDI2IDEwMDY0NAotLS0gYS9wbmdydHJhbi5jCisrKyBiL3BuZ3J0cmFuLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3J0cmFuLmMgLSB0cmFuc2Zvcm1zIHRoZSBkYXRhIGluIGEgcm93IGZvciBQTkcgcmVhZGVycwogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCisgKiBsaWJwbmcgMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTE1NSwxMSArMTU1LDYgQEAKIAogICAgICAgcG5nX3B0ci0+ZGl0aGVyX2luZGV4ID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAocG5nX3VpbnRfMzIpKG51bV9wYWxldHRlICogc2l6ZW9mIChwbmdfYnl0ZSkpKTsKLSAgICAgIGlmIChwbmdfcHRyLT5kaXRoZXJfaW5kZXggPT0gKHBuZ19ieXRlcClOVUxMKQotICAgICAgewotICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJNYWxsb2Mgb2YgZGl0aGVyIGluZGV4IGZhaWxlZCIpOwotICAgICAgICAgcmV0dXJuOwotICAgICAgfQogICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9wYWxldHRlOyBpKyspCiAgICAgICAgICBwbmdfcHRyLT5kaXRoZXJfaW5kZXhbaV0gPSAocG5nX2J5dGUpaTsKICAgIH0KQEAgLTE3NywxMiArMTcyLDYgQEAKICAgICAgICAgIC8qIGluaXRpYWxpemUgYW4gYXJyYXkgdG8gc29ydCBjb2xvcnMgKi8KICAgICAgICAgIHNvcnQgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwgKHBuZ191aW50XzMyKShudW1fcGFsZXR0ZQogICAgICAgICAgICAgKiBzaXplb2YgKHBuZ19ieXRlKSkpOwotICAgICAgICAgaWYgKHNvcnQgPT0gKHBuZ19ieXRlcClOVUxMKQotICAgICAgICAgewotICAgICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJNYWxsb2Mgb2Ygc29ydCBhcnJheSBmb3IgZGl0aGVyIGZhaWxlZCIpOwotICAgICAgICAgICAgcG5nX2ZyZWUgKHBuZ19wdHIsIHBuZ19wdHItPmRpdGhlcl9pbmRleCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICB9CiAKICAgICAgICAgIC8qIGluaXRpYWxpemUgdGhlIHNvcnQgYXJyYXkgKi8KICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcGFsZXR0ZTsgaSsrKQpAQCAtMzEzLDE0ICszMDIsNiBAQAogICAgICAgICAgICAgKHBuZ191aW50XzMyKShudW1fcGFsZXR0ZSAqIHNpemVvZiAocG5nX2J5dGUpKSk7CiAgICAgICAgICBwYWxldHRlX3RvX2luZGV4ID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKG51bV9wYWxldHRlICogc2l6ZW9mIChwbmdfYnl0ZSkpKTsKLSAgICAgICAgIGlmIChpbmRleF90b19wYWxldHRlID09IChwbmdfYnl0ZXApTlVMTCB8fCBwYWxldHRlX3RvX2luZGV4ID09Ci0gICAgICAgICAgICAocG5nX2J5dGVwKU5VTEwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIk1hbGxvYyBvZiBpbmRleCBhcnJheSBmb3IgZGl0aGVyIGZhaWxlZCIpOwotICAgICAgICAgICAgcG5nX2ZyZWUgKHBuZ19wdHIsIGluZGV4X3RvX3BhbGV0dGUpOwotICAgICAgICAgICAgcG5nX2ZyZWUgKHBuZ19wdHIsIHBuZ19wdHItPmRpdGhlcl9pbmRleCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICB9CiAKICAgICAgICAgIC8qIGluaXRpYWxpemUgdGhlIHNvcnQgYXJyYXkgKi8KICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcGFsZXR0ZTsgaSsrKQpAQCAtMzMxLDE0ICszMTIsNiBAQAogCiAgICAgICAgICBoYXNoID0gKHBuZ19kc29ydHBwKXBuZ19tYWxsb2MocG5nX3B0ciwgKHBuZ191aW50XzMyKSg3NjkgKgogICAgICAgICAgICAgc2l6ZW9mIChwbmdfZHNvcnRwKSkpOwotICAgICAgICAgaWYgKGhhc2ggPT0gKHBuZ19kc29ydHBwKU5VTEwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIk1hbGxvYyBvZiBoYXNoIGFycmF5IGZvciBkaXRoZXIgZmFpbGVkIik7Ci0gICAgICAgICAgICBwbmdfZnJlZSAocG5nX3B0ciwgcGFsZXR0ZV90b19pbmRleCk7Ci0gICAgICAgICAgICBwbmdfZnJlZSAocG5nX3B0ciwgaW5kZXhfdG9fcGFsZXR0ZSk7Ci0gICAgICAgICAgICBwbmdfZnJlZSAocG5nX3B0ciwgcG5nX3B0ci0+ZGl0aGVyX2luZGV4KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgIH0KICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3Njk7IGkrKykKICAgICAgICAgICAgIGhhc2hbaV0gPSBOVUxMOwogLyogICAgICAgICBwbmdfbWVtc2V0KGhhc2gsIDAsIDc2OSAqIHNpemVvZiAocG5nX2Rzb3J0cCkpOyAqLwpAQCAtMzczLDEzICszNDYsMTAgQEAKIAogICAgICAgICAgICAgICAgICAgICAgdCA9IChwbmdfZHNvcnRwKXBuZ19tYWxsb2MocG5nX3B0ciwgKHBuZ191aW50XzMyKShzaXplb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAocG5nX2Rzb3J0KSkpOwotICAgICAgICAgICAgICAgICAgICAgaWYgKHQgIT0gKHBuZ19kc29ydHApTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHQtPm5leHQgPSBoYXNoW2RdOwogICAgICAgICAgICAgICAgICAgICAgdC0+bGVmdCA9IChwbmdfYnl0ZSlpOwogICAgICAgICAgICAgICAgICAgICAgdC0+cmlnaHQgPSAocG5nX2J5dGUpajsKICAgICAgICAgICAgICAgICAgICAgIGhhc2hbZF0gPSB0OwotICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDg2LDI1ICs0NTYsMTYgQEAKIAogICAgICAgcG5nX3B0ci0+cGFsZXR0ZV9sb29rdXAgPSAocG5nX2J5dGVwIClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAocG5nX3VpbnRfMzIpKG51bV9lbnRyaWVzICogc2l6ZW9mIChwbmdfYnl0ZSkpKTsKLSAgICAgIGlmIChwbmdfcHRyLT5wYWxldHRlX2xvb2t1cCA9PSAocG5nX2J5dGVwKU5VTEwpCi0gICAgICB7Ci0gICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiTWFsbG9jIG9mIHBhbGV0dGVfbG9va3VwIGZvciBkaXRoZXIgZmFpbGVkIik7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHBuZ19tZW1zZXQocG5nX3B0ci0+cGFsZXR0ZV9sb29rdXAsIDAsIG51bV9lbnRyaWVzICogc2l6ZW9mIChwbmdfYnl0ZSkpOworCisgICAgICBwbmdfbWVtc2V0KHBuZ19wdHItPnBhbGV0dGVfbG9va3VwLCAwLCBudW1fZW50cmllcyAqIHNpemVvZiAocG5nX2J5dGUpKTsKIAogICAgICAgZGlzdGFuY2UgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwgKHBuZ191aW50XzMyKShudW1fZW50cmllcyAqCiAgICAgICAgICBzaXplb2YocG5nX2J5dGUpKSk7Ci0gICAgICBpZiAoZGlzdGFuY2UgPT0gKHBuZ19ieXRlcClOVUxMKQotICAgICAgewotICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIk1hbGxvYyBvZiBkaXN0YW5jZSBhcnJheSBmb3IgZGl0aGVyIGZhaWxlZCIpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBwbmdfbWVtc2V0KGRpc3RhbmNlLCAweGZmLCBudW1fZW50cmllcyAqIHNpemVvZihwbmdfYnl0ZSkpOwogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcGFsZXR0ZTsgaSsrKQotICAgICAgICB7CisgICAgICBwbmdfbWVtc2V0KGRpc3RhbmNlLCAweGZmLCBudW1fZW50cmllcyAqIHNpemVvZihwbmdfYnl0ZSkpOworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3BhbGV0dGU7IGkrKykKKyAgICAgIHsKICAgICAgICAgIGludCBpciwgaWcsIGliOwogICAgICAgICAgaW50IHIgPSAocGFsZXR0ZVtpXS5yZWQgPj4gKDggLSBQTkdfRElUSEVSX1JFRF9CSVRTKSk7CiAgICAgICAgICBpbnQgZyA9IChwYWxldHRlW2ldLmdyZWVuID4+ICg4IC0gUE5HX0RJVEhFUl9HUkVFTl9CSVRTKSk7CkBAIC01MzUsMTIgKzQ5NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgcG5nX3B0ci0+cGFsZXR0ZV9sb29rdXBbZF9pbmRleF0gPSAocG5nX2J5dGUpaTsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgfQogCiAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBkaXN0YW5jZSk7Ci0gICAgICB9CiAgICB9CiB9CiAjZW5kaWYKQEAgLTM4OTgsMTEgKzM4NTgsNiBAQAogCiAgICAgICBwbmdfcHRyLT5nYW1tYV90YWJsZSA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgKHBuZ191aW50XzMyKTI1Nik7Ci0gICAgICBpZiAocG5nX3B0ci0+Z2FtbWFfdGFibGUgPT0gKHBuZ19ieXRlcClOVUxMKQotICAgICAgewotICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJNYWxsb2Mgb2YgZ2FtbWEgdGFibGUgZmFpbGVkIik7Ci0gICAgICAgICByZXR1cm47Ci0gICAgICB9CiAKICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKICAgICAgIHsKQEAgLTM5MTksMTEgKzM4NzQsNiBAQAogCiAgICAgICAgICBwbmdfcHRyLT5nYW1tYV90b18xID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3VpbnRfMzIpMjU2KTsKLSAgICAgICAgIGlmIChwbmdfcHRyLT5nYW1tYV90b18xID09IChwbmdfYnl0ZXApTlVMTCkKLSAgICAgICAgIHsKLSAgICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiTWFsbG9jIG9mIGdhbW1hX3RvXzEgdGFibGUgZmFpbGVkIik7Ci0gICAgICAgICByZXR1cm47Ci0gICAgICAgICB9CiAKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKICAgICAgICAgIHsKQEAgLTM5MzQsMTEgKzM4ODQsNiBAQAogCiAgICAgICAgICBwbmdfcHRyLT5nYW1tYV9mcm9tXzEgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIChwbmdfdWludF8zMikyNTYpOwotICAgICAgICAgaWYgKHBuZ19wdHItPmdhbW1hX2Zyb21fMSA9PSAocG5nX2J5dGVwKU5VTEwpCi0gICAgICAgICB7Ci0gICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIk1hbGxvYyBvZiBnYW1tYV9mcm9tXzEgdGFibGUgZmFpbGVkIik7Ci0gICAgICAgICByZXR1cm47Ci0gICAgICAgICB9CiAKICAgICAgICAgIGlmKHBuZ19wdHItPnNjcmVlbl9nYW1tYSA+IDAuMDAwMDAxKQogICAgICAgICAgICAgZyA9IDEuMCAvIHBuZ19wdHItPnNjcmVlbl9nYW1tYTsKQEAgLTQwMDEsMTEgKzM5NDYsNiBAQAogCiAgICAgICBwbmdfcHRyLT5nYW1tYV8xNl90YWJsZSA9IChwbmdfdWludF8xNnBwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgIChwbmdfdWludF8zMikobnVtICogc2l6ZW9mIChwbmdfdWludF8xNnApKSk7Ci0gICAgICBpZiAocG5nX3B0ci0+Z2FtbWFfMTZfdGFibGUgPT0gKHBuZ191aW50XzE2cHApTlVMTCkKLSAgICAgIHsKLSAgICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiTWFsbG9jIG9mIGdhbW1hXzE2IHRhYmxlIGZhaWxlZCIpOwotICAgICAgICAgcmV0dXJuOwotICAgICAgfQogCiAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgKFBOR18xNl9UT184IHwgUE5HX0JBQ0tHUk9VTkQpKQogICAgICAgewpAQCAtNDAxNiwxMSArMzk1Niw2IEBACiAgICAgICAgICB7CiAgICAgICAgICAgICBwbmdfcHRyLT5nYW1tYV8xNl90YWJsZVtpXSA9IChwbmdfdWludF8xNnApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKSgyNTYgKiBzaXplb2YgKHBuZ191aW50XzE2KSkpOwotICAgICAgICAgICBpZiAocG5nX3B0ci0+Z2FtbWFfMTZfdGFibGVbaV0gPT0gKHBuZ191aW50XzE2cClOVUxMKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiTWFsbG9jIG9mIGdhbW1hXzE2IHRhYmxlIGVudHJ5IGZhaWxlZCIpOwotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgIH0KICAgICAgICAgIH0KIAogICAgICAgICAgZyA9IDEuMCAvIGc7CkBAIC00MDUxLDExICszOTg2LDYgQEAKICAgICAgICAgIHsKICAgICAgICAgICAgIHBuZ19wdHItPmdhbW1hXzE2X3RhYmxlW2ldID0gKHBuZ191aW50XzE2cClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKDI1NiAqIHNpemVvZiAocG5nX3VpbnRfMTYpKSk7Ci0gICAgICAgICAgICBpZiAocG5nX3B0ci0+Z2FtbWFfMTZfdGFibGVbaV0gPT0gKHBuZ191aW50XzE2cClOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIk1hbGxvYyBvZiBnYW1tYV8xNiB0YWJsZSBlbnRyeSBmYWlsZWQiKTsKLSAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZyA9ICgoKHBuZ191aW50XzMyKWkgKiAocG5nX3VpbnRfMzIpcG5nX2dhbW1hX3NoaWZ0W3NoaWZ0XSkgPj4gNCk7CiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgMjU2OyBqKyspCkBAIC00MDc2LDIyICs0MDA2LDExIEBACiAKICAgICAgICAgIHBuZ19wdHItPmdhbW1hXzE2X3RvXzEgPSAocG5nX3VpbnRfMTZwcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKG51bSAqIHNpemVvZiAocG5nX3VpbnRfMTZwICkpKTsKLSAgICAgICAgIGlmIChwbmdfcHRyLT5nYW1tYV8xNl90b18xID09IChwbmdfdWludF8xNnBwKU5VTEwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIk1hbGxvYyBvZiBnYW1tYV8xNl90b18xIHRhYmxlIGZhaWxlZCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgfQogCiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCiAgICAgICAgICB7CiAgICAgICAgICAgICBwbmdfcHRyLT5nYW1tYV8xNl90b18xW2ldID0gKHBuZ191aW50XzE2cClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKDI1NiAqIHNpemVvZiAocG5nX3VpbnRfMTYpKSk7Ci0gICAgICAgICAgICBpZiAocG5nX3B0ci0+Z2FtbWFfMTZfdG9fMVtpXSA9PSAocG5nX3VpbnRfMTZwKU5VTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwKLSAgICAgICAgICAgICAgICAgIk1hbGxvYyBvZiBnYW1tYV8xNl90b18xIHRhYmxlIGVudHJ5IGZhaWxlZCIpOwotICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZyA9ICgoKHBuZ191aW50XzMyKWkgKgogICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKXBuZ19nYW1tYV9zaGlmdFtzaGlmdF0pID4+IDQpOwpAQCAtNDExMCwyMyArNDAyOSwxMSBAQAogCiAgICAgICAgICBwbmdfcHRyLT5nYW1tYV8xNl9mcm9tXzEgPSAocG5nX3VpbnRfMTZwcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKG51bSAqIHNpemVvZiAocG5nX3VpbnRfMTZwKSkpOwotICAgICAgICAgaWYgKHBuZ19wdHItPmdhbW1hXzE2X2Zyb21fMSA9PSAocG5nX3VpbnRfMTZwcClOVUxMKQotICAgICAgICAgewotICAgICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsCi0gICAgICAgICAgICAgICJNYWxsb2Mgb2YgZ2FtbWFfMTZfZnJvbV8xIHRhYmxlIGZhaWxlZCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgfQogCiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCiAgICAgICAgICB7CiAgICAgICAgICAgICBwbmdfcHRyLT5nYW1tYV8xNl9mcm9tXzFbaV0gPSAocG5nX3VpbnRfMTZwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgIChwbmdfdWludF8zMikoMjU2ICogc2l6ZW9mIChwbmdfdWludF8xNikpKTsKLSAgICAgICAgICAgIGlmIChwbmdfcHRyLT5nYW1tYV8xNl9mcm9tXzFbaV0gPT0gKHBuZ191aW50XzE2cClOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsCi0gICAgICAgICAgICAgICAgICJNYWxsb2Mgb2YgZ2FtbWFfMTZfZnJvbV8xIHRhYmxlIGZhaWxlZCIpOwotICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZyA9ICgoKHBuZ191aW50XzMyKWkgKgogICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKXBuZ19nYW1tYV9zaGlmdFtzaGlmdF0pID4+IDQpOwpkaWZmIC0tZ2l0IGEvcG5ncnV0aWwuYyBiL3BuZ3J1dGlsLmMKaW5kZXggNTIyYWYyYS4uOGFlODZhYyAxMDA2NDQKLS0tIGEvcG5ncnV0aWwuYworKysgYi9wbmdydXRpbC5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdydXRpbC5jIC0gdXRpbGl0aWVzIHRvIHJlYWQgYSBQTkcgZmlsZQogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCisgKiBsaWJwbmcgMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTIwMSwxOSArMjAxLDE1IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0ZXh0X3NpemUgPSBwcmVmaXhfc2l6ZSArIHNpemVvZihtc2cpICsgMTsKICAgICAgICAgICAgICAgIHRleHQgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgdGV4dF9zaXplKTsKLSAgICAgICAgICAgICAgIGlmICh0ZXh0ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwgY2h1bmtkYXRhLCBwcmVmaXhfc2l6ZSk7CisgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQsIGNodW5rZGF0YSwgcHJlZml4X3NpemUpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGV4dCAhPSBOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgdGV4dFt0ZXh0X3NpemUgLSAxXSA9IDB4MDA7CisgICAgICAgICAgICB0ZXh0W3RleHRfc2l6ZSAtIDFdID0gMHgwMDsKIAotICAgICAgICAgICAgICAgLyogQ29weSB3aGF0IHdlIGNhbiBvZiB0aGUgZXJyb3IgbWVzc2FnZSBpbnRvIHRoZSB0ZXh0IGNodW5rICovCi0gICAgICAgICAgICAgICB0ZXh0X3NpemUgPSAocG5nX3NpemVfdCkoY2h1bmtsZW5ndGggLSAodGV4dCAtIGNodW5rZGF0YSkgLSAxKTsKLSAgICAgICAgICAgICAgIHRleHRfc2l6ZSA9IHNpemVvZihtc2cpID4gdGV4dF9zaXplID8gdGV4dF9zaXplIDogc2l6ZW9mKG1zZyk7Ci0gICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQgKyBwcmVmaXhfc2l6ZSwgbXNnLCB0ZXh0X3NpemUgKyAxKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIENvcHkgd2hhdCB3ZSBjYW4gb2YgdGhlIGVycm9yIG1lc3NhZ2UgaW50byB0aGUgdGV4dCBjaHVuayAqLworICAgICAgICAgICAgdGV4dF9zaXplID0gKHBuZ19zaXplX3QpKGNodW5rbGVuZ3RoIC0gKHRleHQgLSBjaHVua2RhdGEpIC0gMSk7CisgICAgICAgICAgICB0ZXh0X3NpemUgPSBzaXplb2YobXNnKSA+IHRleHRfc2l6ZSA/IHRleHRfc2l6ZSA6IHNpemVvZihtc2cpOworICAgICAgICAgICAgcG5nX21lbWNweSh0ZXh0ICsgcHJlZml4X3NpemUsIG1zZywgdGV4dF9zaXplICsgMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQgfHwgcmV0ID09IFpfU1RSRUFNX0VORCkKQEAgLTIyMywxMyArMjE5LDEwIEBACiAgICAgICAgICAgICAgICB0ZXh0X3NpemUgPSBwcmVmaXhfc2l6ZSArCiAgICAgICAgICAgICAgICAgICAgcG5nX3B0ci0+emJ1Zl9zaXplIC0gcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQ7CiAgICAgICAgICAgICAgICB0ZXh0ID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIHRleHRfc2l6ZSArIDEpOwotICAgICAgICAgICAgICAgaWYgKHRleHQgIT0gTlVMTCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh0ZXh0ICsgcHJlZml4X3NpemUsIHBuZ19wdHItPnpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfc2l6ZSAtIHByZWZpeF9zaXplKTsKLSAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh0ZXh0LCBjaHVua2RhdGEsIHByZWZpeF9zaXplKTsKLSAgICAgICAgICAgICAgICAgKih0ZXh0ICsgdGV4dF9zaXplKSA9IDB4MDA7Ci0gICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQgKyBwcmVmaXhfc2l6ZSwgcG5nX3B0ci0+emJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgdGV4dF9zaXplIC0gcHJlZml4X3NpemUpOworICAgICAgICAgICAgICAgcG5nX21lbWNweSh0ZXh0LCBjaHVua2RhdGEsIHByZWZpeF9zaXplKTsKKyAgICAgICAgICAgICAgICoodGV4dCArIHRleHRfc2l6ZSkgPSAweDAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewpAQCAtMjM4LDIwICsyMzEsMTIgQEAKICAgICAgICAgICAgICAgIHRtcCA9IHRleHQ7CiAgICAgICAgICAgICAgICB0ZXh0ID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMikodGV4dF9zaXplICsKICAgICAgICAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0ICsgMSkpOwotICAgICAgICAgICAgICAgaWYgKHRleHQgIT0gTlVMTCkKLSAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwgdG1wLCB0ZXh0X3NpemUpOwogICAgICAgICAgICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgdG1wKTsKICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCArIHRleHRfc2l6ZSwgcG5nX3B0ci0+emJ1ZiwKICAgICAgICAgICAgICAgICAgIChwbmdfcHRyLT56YnVmX3NpemUgLSBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dCkpOwogICAgICAgICAgICAgICAgdGV4dF9zaXplICs9IHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0OwogICAgICAgICAgICAgICAgKih0ZXh0ICsgdGV4dF9zaXplKSA9IDB4MDA7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBtYWxsb2MgdGV4dCBidWZmZXIiKTsKLSAgICAgICAgICAgICAgICAgIHRleHQ9dG1wOwotICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCiAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4NSwxMyArMjcwLDkgQEAKICAgICAgICAgIGlmICh0ZXh0ID09ICBOVUxMKQogICAgICAgICAgewogICAgICAgICAgICAgdGV4dCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCB0ZXh0X3NpemUrMSk7Ci0gICAgICAgICAgICBpZiAodGV4dCAhPSAgTlVMTCkKLSAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwgY2h1bmtkYXRhLCBwcmVmaXhfc2l6ZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiQ291bGQgbm90IG1hbGxvYyB0ZXh0IGNodW5rZGF0YSIpOworICAgICAgICAgICAgcG5nX21lbWNweSh0ZXh0LCBjaHVua2RhdGEsIHByZWZpeF9zaXplKTsKICAgICAgICAgIH0KLSAgICAgICAgIGlmICh0ZXh0ICE9ICBOVUxMKQotICAgICAgICAgICAgKih0ZXh0ICsgdGV4dF9zaXplKSA9IDB4MDA7CisgICAgICAgICAqKHRleHQgKyB0ZXh0X3NpemUpID0gMHgwMDsKICAgICAgIH0KIAogICAgICAgaW5mbGF0ZVJlc2V0KCZwbmdfcHRyLT56c3RyZWFtKTsKQEAgLTEwMDIsMTQgKzk4Myw3IEBACiAKICAgIGNodW5rZGF0YSA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGggKyAxKTsKICAgIHNsZW5ndGggPSAocG5nX3NpemVfdClsZW5ndGg7Ci0gICBpZiAoY2h1bmtkYXRhICE9IChwbmdfY2hhcnApTlVMTCkKLSAgICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWNodW5rZGF0YSwgc2xlbmd0aCk7Ci0gICBlbHNlCi0gICB7Ci0gICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgaUNDUCBjaHVuayIpOwotICAgICAgcG5nX2NyY19maW5pc2gocG5nX3B0ciwgc2xlbmd0aCk7Ci0gICAgICByZXR1cm47Ci0gICB9CisgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcCljaHVua2RhdGEsIHNsZW5ndGgpOwogCiAgICBpZiAocG5nX2NyY19maW5pc2gocG5nX3B0ciwgc2tpcCkpCiAgICB7CkBAIC0xMTA1LDE2ICsxMDc5LDggQEAKICNlbmRpZgogCiAgICBjaHVua2RhdGEgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwgbGVuZ3RoICsgMSk7Ci0gICBpZiAoY2h1bmtkYXRhICE9IChwbmdfYnl0ZXApTlVMTCkKLSAgIHsKLSAgICAgIHNsZW5ndGggPSAocG5nX3NpemVfdClsZW5ndGg7Ci0gICAgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcCljaHVua2RhdGEsIHNsZW5ndGgpOwotICAgfQotICAgZWxzZQotICAgewotICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHNQTFQgY2h1bmsiKTsKLSAgICAgIHNraXAgPSAocG5nX3NpemVfdClsZW5ndGg7Ci0gICB9CisgICBzbGVuZ3RoID0gKHBuZ19zaXplX3QpbGVuZ3RoOworICAgcG5nX2NyY19yZWFkKHBuZ19wdHIsIChwbmdfYnl0ZXApY2h1bmtkYXRhLCBzbGVuZ3RoKTsKIAogICAgaWYgKHBuZ19jcmNfZmluaXNoKHBuZ19wdHIsIHNraXApKQogICAgewpAQCAtMTE1MSwxMiArMTExNyw2IEBACiAgICBuZXdfcGFsZXR0ZS5uZW50cmllcyA9IGRhdGFfbGVuZ3RoIC8gZW50cnlfc2l6ZTsKICAgIG5ld19wYWxldHRlLmVudHJpZXMgPSAocG5nX3NQTFRfZW50cnlwKXBuZ19tYWxsb2MoCiAgICAgICAgcG5nX3B0ciwgbmV3X3BhbGV0dGUubmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfZW50cnkpKTsKLSAgIGlmIChuZXdfcGFsZXR0ZS5lbnRyaWVzID09IChwbmdfc1BMVF9lbnRyeXApTlVMTCkKLSAgIHsKLSAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBjaHVua2RhdGEpOwotICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIHNQTFQgZW50cmllcyIpOwotICAgICAgIHJldHVybjsKLSAgIH0KIAogI2lmbmRlZiBQTkdfTk9fUE9JTlRFUl9JTkRFWElORwogICAgZm9yIChpID0gMDsgaSA8IG5ld19wYWxldHRlLm5lbnRyaWVzOyBpKyspCkBAIC0xNTY2LDEyICsxNTI2LDYgQEAKICAgIHBuZ19kZWJ1ZzEoMiwgIkFsbG9jYXRpbmcgYW5kIHJlYWRpbmcgcENBTCBjaHVuayBkYXRhICglbHUgYnl0ZXMpXG4iLAogICAgICAgbGVuZ3RoICsgMSk7CiAgICBwdXJwb3NlID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCArIDEpOwotICAgaWYgKHB1cnBvc2UgPT0gKHBuZ19jaGFycClOVUxMKQotICAgewotICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBDQUwgcHVycG9zZSIpOwotICAgICBwbmdfY3JjX2ZpbmlzaChwbmdfcHRyLCBsZW5ndGgpOwotICAgICByZXR1cm47Ci0gICB9CiAgICBzbGVuZ3RoID0gKHBuZ19zaXplX3QpbGVuZ3RoOwogICAgcG5nX2NyY19yZWFkKHBuZ19wdHIsIChwbmdfYnl0ZXApcHVycG9zZSwgc2xlbmd0aCk7CiAKQEAgLTE2MjgsMTEgKzE1ODIsNiBAQAogICAgcG5nX2RlYnVnKDMsICJBbGxvY2F0aW5nIHBDQUwgcGFyYW1ldGVycyBhcnJheVxuIik7CiAgICBwYXJhbXMgPSAocG5nX2NoYXJwcClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMikobnBhcmFtcwogICAgICAgKnNpemVvZihwbmdfY2hhcnApKSkgOwotICAgaWYgKHBhcmFtcyA9PSAocG5nX2NoYXJwcClOVUxMKQotICAgewotICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgcENBTCBwYXJhbWV0ZXJzIGFycmF5Iik7Ci0gICAgICBucGFyYW1zPTA7Ci0gICB9CiAKICAgIC8qIEdldCBwb2ludGVycyB0byB0aGUgc3RhcnQgb2YgZWFjaCBwYXJhbWV0ZXIgc3RyaW5nLiAqLwogICAgZm9yIChpID0gMDsgaSA8IChpbnQpbnBhcmFtczsgaSsrKQpAQCAtMTY5NywxMiArMTY0Niw2IEBACiAgICBwbmdfZGVidWcxKDIsICJBbGxvY2F0aW5nIGFuZCByZWFkaW5nIHNDQUwgY2h1bmsgZGF0YSAoJWx1IGJ5dGVzKVxuIiwKICAgICAgIGxlbmd0aCArIDEpOwogICAgYnVmZmVyID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCArIDEpOwotICAgaWYgKGJ1ZmZlciA9PSAocG5nX2NoYXJwKU5VTEwpCi0gICB7Ci0gICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3Igc0NBTCBidWZmZXIiKTsKLSAgICAgcG5nX2NyY19maW5pc2gocG5nX3B0ciwgbGVuZ3RoKTsKLSAgICAgcmV0dXJuOwotICAgfQogICAgc2xlbmd0aCA9IChwbmdfc2l6ZV90KWxlbmd0aDsKICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWJ1ZmZlciwgc2xlbmd0aCk7CiAKQEAgLTE3MjYsOCArMTY2OSw3IEBACiAjZWxzZQogI2lmZGVmIFBOR19GSVhFRF9QT0lOVF9TVVBQT1JURUQKICAgIHN3aWR0aCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBwbmdfc3RybGVuKGVwKSArIDEpOwotICAgaWYgKHN3aWR0aCAhPSAocG5nX2NoYXJwKU5VTEwpCi0gICAgIHBuZ19tZW1jcHkoc3dpZHRoLCBlcCwgKHBuZ19zaXplX3QpcG5nX3N0cmxlbihlcCkpOworICAgcG5nX21lbWNweShzd2lkdGgsIGVwLCAocG5nX3NpemVfdClwbmdfc3RybGVuKGVwKSk7CiAjZW5kaWYKICNlbmRpZgogCkBAIC0xNzQ1LDggKzE2ODcsNyBAQAogI2Vsc2UKICNpZmRlZiBQTkdfRklYRURfUE9JTlRfU1VQUE9SVEVECiAgICBzaGVpZ2h0ID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIHBuZ19zdHJsZW4oZXApICsgMSk7Ci0gICBpZiAoc2hlaWdodCAhPSAocG5nX2NoYXJwKU5VTEwpCi0gICAgICBwbmdfbWVtY3B5KHNoZWlnaHQsIGVwLCAocG5nX3NpemVfdClwbmdfc3RybGVuKGVwKSk7CisgICBwbmdfbWVtY3B5KHNoZWlnaHQsIGVwLCAocG5nX3NpemVfdClwbmdfc3RybGVuKGVwKSk7CiAjZW5kaWYKICNlbmRpZgogCkBAIC0xODU1LDE0ICsxNzk2LDcgQEAKIAogICAga2V5ID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCArIDEpOwogICAgc2xlbmd0aCA9IChwbmdfc2l6ZV90KWxlbmd0aDsKLSAgIGlmIChrZXkgPT0gKHBuZ19jaGFycClOVUxMKQotICAgewotICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0RVh0IGNodW5rIik7Ci0gICAgICBwbmdfY3JjX2ZpbmlzaChwbmdfcHRyLCBzbGVuZ3RoKTsKLSAgICAgIHJldHVybjsKLSAgIH0KLSAgIGVsc2UKLSAgICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWtleSwgc2xlbmd0aCk7CisgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcClrZXksIHNsZW5ndGgpOwogCiAgICBpZiAocG5nX2NyY19maW5pc2gocG5nX3B0ciwgc2tpcCkpCiAgICB7CkBAIC0xODc5LDggKzE4MTMsNiBAQAogICAgICAgdGV4dCsrOwogCiAgICB0ZXh0X3B0ciA9IChwbmdfdGV4dHApcG5nX21hbGxvYyhwbmdfcHRyLCAocG5nX3VpbnRfMzIpc2l6ZW9mKHBuZ190ZXh0KSk7Ci0gICBpZiAodGV4dF9wdHIgIT0gKHBuZ190ZXh0cClOVUxMKQotICAgewogICAgdGV4dF9wdHItPmNvbXByZXNzaW9uID0gUE5HX1RFWFRfQ09NUFJFU1NJT05fTk9ORTsKICAgIHRleHRfcHRyLT5rZXkgPSBrZXk7CiAjaWZkZWYgUE5HX2lUWHRfU1VQUE9SVEVECkBAIC0xODkzLDExICsxODI1LDggQEAKIAogICAgcG5nX3NldF90ZXh0KHBuZ19wdHIsIGluZm9fcHRyLCB0ZXh0X3B0ciwgMSk7CiAKLSAgIHBuZ19mcmVlKHBuZ19wdHIsIHRleHRfcHRyKTsKLSAgIH0KLSAgIGVsc2UKLSAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpVFh0IHBvaW50ZXIiKTsKICAgIHBuZ19mcmVlKHBuZ19wdHIsIGtleSk7CisgICBwbmdfZnJlZShwbmdfcHRyLCB0ZXh0X3B0cik7CiB9CiAjZW5kaWYKIApAQCAtMTkzMSwxNyArMTg2MCw4IEBACiAjZW5kaWYKIAogICAgY2h1bmtkYXRhID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCArIDEpOwotICAgaWYgKGNodW5rZGF0YSAhPSAocG5nX2NoYXJwKU5VTEwpCi0gICB7CiAgICAgIHNsZW5ndGggPSAocG5nX3NpemVfdClsZW5ndGg7Ci0gICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWNodW5rZGF0YSwgc2xlbmd0aCk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgelRYdCBjaHVuayBkYXRhIik7Ci0gICAgIHBuZ19jcmNfZmluaXNoKHBuZ19wdHIsIGxlbmd0aCk7Ci0gICAgIHJldHVybjsKLSAgIH0KKyAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWNodW5rZGF0YSwgc2xlbmd0aCk7CiAgICBpZiAocG5nX2NyY19maW5pc2gocG5nX3B0ciwgMCkpCiAgICB7CiAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBjaHVua2RhdGEpOwpAQCAtMTk3NSwyNCArMTg5NSwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBuZ19zaXplX3QpbGVuZ3RoLCBwcmVmaXhfbGVuLCAmZGF0YV9sZW4pOwogCiAgICB0ZXh0X3B0ciA9IChwbmdfdGV4dHApcG5nX21hbGxvYyhwbmdfcHRyLCAocG5nX3VpbnRfMzIpc2l6ZW9mKHBuZ190ZXh0KSk7Ci0gICBpZiAodGV4dF9wdHIgIT0gKHBuZ190ZXh0cClOVUxMKQotICAgewotICAgICB0ZXh0X3B0ci0+Y29tcHJlc3Npb24gPSBjb21wX3R5cGU7Ci0gICAgIHRleHRfcHRyLT5rZXkgPSBjaHVua2RhdGE7CisgICB0ZXh0X3B0ci0+Y29tcHJlc3Npb24gPSBjb21wX3R5cGU7CisgICB0ZXh0X3B0ci0+a2V5ID0gY2h1bmtkYXRhOwogI2lmZGVmIFBOR19pVFh0X1NVUFBPUlRFRAotICAgICB0ZXh0X3B0ci0+bGFuZyA9IE5VTEw7Ci0gICAgIHRleHRfcHRyLT5sYW5nX2tleSA9IE5VTEw7Ci0gICAgIHRleHRfcHRyLT5pdHh0X2xlbmd0aCA9IDA7CisgICB0ZXh0X3B0ci0+bGFuZyA9IE5VTEw7CisgICB0ZXh0X3B0ci0+bGFuZ19rZXkgPSBOVUxMOworICAgdGV4dF9wdHItPml0eHRfbGVuZ3RoID0gMDsKICNlbmRpZgotICAgICB0ZXh0X3B0ci0+dGV4dCA9IGNodW5rZGF0YSArIHByZWZpeF9sZW47Ci0gICAgIHRleHRfcHRyLT50ZXh0X2xlbmd0aCA9IGRhdGFfbGVuOworICAgdGV4dF9wdHItPnRleHQgPSBjaHVua2RhdGEgKyBwcmVmaXhfbGVuOworICAgdGV4dF9wdHItPnRleHRfbGVuZ3RoID0gZGF0YV9sZW47CiAKLSAgICAgcG5nX3NldF90ZXh0KHBuZ19wdHIsIGluZm9fcHRyLCB0ZXh0X3B0ciwgMSk7CisgICBwbmdfc2V0X3RleHQocG5nX3B0ciwgaW5mb19wdHIsIHRleHRfcHRyLCAxKTsKIAotICAgICBwbmdfZnJlZShwbmdfcHRyLCB0ZXh0X3B0cik7Ci0gICB9Ci0gICBlbHNlCi0gICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHpUWHQgZGF0YSIpOworICAgcG5nX2ZyZWUocG5nX3B0ciwgdGV4dF9wdHIpOwogICAgcG5nX2ZyZWUocG5nX3B0ciwgY2h1bmtkYXRhKTsKIH0KICNlbmRpZgpAQCAtMjAyOSwxNyArMTk0NCw4IEBACiAjZW5kaWYKIAogICAgY2h1bmtkYXRhID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCArIDEpOwotICAgaWYgKGNodW5rZGF0YSAhPSAocG5nX2NoYXJwKU5VTEwpCi0gICB7Ci0gICAgIHNsZW5ndGggPSAocG5nX3NpemVfdClsZW5ndGg7Ci0gICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWNodW5rZGF0YSwgc2xlbmd0aCk7Ci0gICB9Ci0gICBlbHNlCi0gICB7Ci0gICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgaVRYdCBjaHVuayBkYXRhIik7Ci0gICAgIHBuZ19jcmNfZmluaXNoKHBuZ19wdHIsIGxlbmd0aCk7Ci0gICAgIHJldHVybjsKLSAgIH0KKyAgIHNsZW5ndGggPSAocG5nX3NpemVfdClsZW5ndGg7CisgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcCljaHVua2RhdGEsIHNsZW5ndGgpOwogICAgaWYgKHBuZ19jcmNfZmluaXNoKHBuZ19wdHIsIDApKQogICAgewogICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgY2h1bmtkYXRhKTsKQEAgLTIwODQsMjIgKzE5OTAsMTcgQEAKICAgIGVsc2UKICAgICAgICBkYXRhX2xlbj1wbmdfc3RybGVuKGNodW5rZGF0YSArIHByZWZpeF9sZW4pOwogICAgdGV4dF9wdHIgPSAocG5nX3RleHRwKXBuZ19tYWxsb2MocG5nX3B0ciwgKHBuZ191aW50XzMyKXNpemVvZihwbmdfdGV4dCkpOwotICAgaWYgKHRleHRfcHRyICE9IChwbmdfdGV4dHApTlVMTCkKLSAgIHsKLSAgICAgdGV4dF9wdHItPmNvbXByZXNzaW9uID0gKGludCljb21wX2ZsYWcgKyAxOwotICAgICB0ZXh0X3B0ci0+bGFuZ19rZXkgPSBjaHVua2RhdGErKGxhbmdfa2V5LWtleSk7Ci0gICAgIHRleHRfcHRyLT5sYW5nID0gY2h1bmtkYXRhKyhsYW5nLWtleSk7Ci0gICAgIHRleHRfcHRyLT5pdHh0X2xlbmd0aCA9IGRhdGFfbGVuOwotICAgICB0ZXh0X3B0ci0+dGV4dF9sZW5ndGggPSAwOwotICAgICB0ZXh0X3B0ci0+a2V5ID0gY2h1bmtkYXRhOwotICAgICB0ZXh0X3B0ci0+dGV4dCA9IGNodW5rZGF0YSArIHByZWZpeF9sZW47CisgICB0ZXh0X3B0ci0+Y29tcHJlc3Npb24gPSAoaW50KWNvbXBfZmxhZyArIDE7CisgICB0ZXh0X3B0ci0+bGFuZ19rZXkgPSBjaHVua2RhdGErKGxhbmdfa2V5LWtleSk7CisgICB0ZXh0X3B0ci0+bGFuZyA9IGNodW5rZGF0YSsobGFuZy1rZXkpOworICAgdGV4dF9wdHItPml0eHRfbGVuZ3RoID0gZGF0YV9sZW47CisgICB0ZXh0X3B0ci0+dGV4dF9sZW5ndGggPSAwOworICAgdGV4dF9wdHItPmtleSA9IGNodW5rZGF0YTsKKyAgIHRleHRfcHRyLT50ZXh0ID0gY2h1bmtkYXRhICsgcHJlZml4X2xlbjsKIAotICAgICBwbmdfc2V0X3RleHQocG5nX3B0ciwgaW5mb19wdHIsIHRleHRfcHRyLCAxKTsKKyAgIHBuZ19zZXRfdGV4dChwbmdfcHRyLCBpbmZvX3B0ciwgdGV4dF9wdHIsIDEpOwogCi0gICAgIHBuZ19mcmVlKHBuZ19wdHIsIHRleHRfcHRyKTsKLSAgIH0KLSAgIGVsc2UKLSAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBpVFh0IGNodW5rIGRhdGEiKTsKKyAgIHBuZ19mcmVlKHBuZ19wdHIsIHRleHRfcHRyKTsKICAgIHBuZ19mcmVlKHBuZ19wdHIsIGNodW5rZGF0YSk7CiB9CiAjZW5kaWYKQEAgLTIxMzMsNyArMjAzNCw3IEBACiAgICAgICBpZihwbmdfaGFuZGxlX2FzX3Vua25vd24ocG5nX3B0ciwgcG5nX3B0ci0+Y2h1bmtfbmFtZSkgIT0KICAgICAgICAgICAgSEFORExFX0NIVU5LX0FMV0FZUwogI2lmIGRlZmluZWQoUE5HX1JFQURfVVNFUl9DSFVOS1NfU1VQUE9SVEVEKQotICAgICAgICAgICAmJiBwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4gPT0gKHBuZ191c2VyX2NodW5rX3B0cilOVUxMCisgICAgICAgICAgICYmIHBuZ19wdHItPnJlYWRfdXNlcl9jaHVua19mbiA9PSBOVUxMCiAjZW5kaWYKICAgICAgICAgKQogI2VuZGlmCkBAIC0yMTU1LDE5ICsyMDU2LDEwIEBACiAjZW5kaWYKICAgICAgICBwbmdfc3RyY3B5KChwbmdfY2hhcnApY2h1bmsubmFtZSwgKHBuZ19jaGFycClwbmdfcHRyLT5jaHVua19uYW1lKTsKICAgICAgICBjaHVuay5kYXRhID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCk7Ci0gICAgICAgaWYgKGNodW5rLmRhdGEgIT0gKHBuZ19ieXRlcClOVUxMKQotICAgICAgIHsKLSAgICAgICAgIGNodW5rLnNpemUgPSAocG5nX3NpemVfdClsZW5ndGg7Ci0gICAgICAgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcCljaHVuay5kYXRhLCBsZW5ndGgpOwotICAgICAgIH0KLSAgICAgICBlbHNlCi0gICAgICAgewotICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBpVFh0IGNodW5rIGRhdGEiKTsKLSAgICAgICAgIHBuZ19jcmNfZmluaXNoKHBuZ19wdHIsIGxlbmd0aCk7Ci0gICAgICAgICByZXR1cm47Ci0gICAgICAgfQorICAgICAgIGNodW5rLnNpemUgPSAocG5nX3NpemVfdClsZW5ndGg7CisgICAgICAgcG5nX2NyY19yZWFkKHBuZ19wdHIsIChwbmdfYnl0ZXApY2h1bmsuZGF0YSwgbGVuZ3RoKTsKICNpZiBkZWZpbmVkKFBOR19SRUFEX1VTRVJfQ0hVTktTX1NVUFBPUlRFRCkKLSAgICAgICBpZihwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4gIT0gKHBuZ191c2VyX2NodW5rX3B0cilOVUxMKQorICAgICAgIGlmKHBuZ19wdHItPnJlYWRfdXNlcl9jaHVua19mbiAhPSBOVUxMKQogICAgICAgIHsKICAgICAgICAgICAvKiBjYWxsYmFjayB0byB1c2VyIHVua25vd24gY2h1bmsgaGFuZGxlciAqLwogICAgICAgICAgIGlmICgoKihwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4pKSAocG5nX3B0ciwgJmNodW5rKSA8PSAwKQpAQCAtMzA3Miw4ICsyOTY0LDYgQEAKICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiVGhpcyBpbWFnZSByZXF1aXJlcyBhIHJvdyBncmVhdGVyIHRoYW4gNjRLQiIpOwogI2VuZGlmCiAgICBwbmdfcHRyLT5yb3dfYnVmID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsIHJvd19ieXRlcyk7Ci0gICBpZiAocG5nX3B0ci0+cm93X2J1ZiA9PSAocG5nX2J5dGVwKU5VTEwpCi0gICAgICBwbmdfZXJyb3IgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciByb3cgYnVmZmVyIik7CiAgICBwbmdfcHRyLT5yb3dfYnVmX3NpemUgPSByb3dfYnl0ZXM7CiAKICNpZmRlZiBQTkdfTUFYX01BTExPQ182NEsKQEAgLTMwODIsMTEgKzI5NzIsNiBAQAogI2VuZGlmCiAgICBwbmdfcHRyLT5wcmV2X3JvdyA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLCAocG5nX3VpbnRfMzIpKAogICAgICAgcG5nX3B0ci0+cm93Ynl0ZXMgKyAxKSk7Ci0gICBpZiAocG5nX3B0ci0+cHJldl9yb3cgPT0gKHBuZ19ieXRlcClOVUxMKQotICAgewotICAgICAgcG5nX2ZyZWUgKHBuZ19wdHIsIHBuZ19wdHItPnJvd19idWYpOwotICAgICAgcG5nX2Vycm9yIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgcHJldmlvdXMgcm93IGJ1ZmZlciIpOwotICAgfQogCiAgICBwbmdfbWVtc2V0X2NoZWNrKHBuZ19wdHIsIHBuZ19wdHItPnByZXZfcm93LCAwLCBwbmdfcHRyLT5yb3dieXRlcyArIDEpOwogCmRpZmYgLS1naXQgYS9wbmdzZXQuYyBiL3BuZ3NldC5jCmluZGV4IDI0NjVmZDAuLjQ5Zjk3MDIgMTAwNjQ0Ci0tLSBhL3BuZ3NldC5jCisrKyBiL3BuZ3NldC5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdzZXQuYyAtIHN0b3JhZ2Ugb2YgaW1hZ2UgaW5mb3JtYXRpb24gaW50byBpbmZvIHN0cnVjdAogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCisgKiBsaWJwbmcgMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTE1NCwxMSArMTU0LDYgQEAKICNlbmRpZgogICAgcG5nX3B0ci0+aGlzdCA9IChwbmdfdWludF8xNnApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgKHBuZ191aW50XzMyKShpbmZvX3B0ci0+bnVtX3BhbGV0dGUgKiBzaXplb2YgKHBuZ191aW50XzE2KSkpOwotICAgaWYgKHBuZ19wdHItPmhpc3QgPT0gKHBuZ191aW50XzE2cClOVUxMKQotICAgewotICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBoaXN0b2dyYW0iKTsKLSAgICAgIHJldHVybjsKLSAgIH0KIAogICAgZm9yIChpID0gMDsgaSA8IGluZm9fcHRyLT5udW1fcGFsZXR0ZTsgaSsrKQogICAgICAgIHBuZ19wdHItPmhpc3RbaV0gPSBoaXN0W2ldOwpAQCAtMzAwLDExICsyOTUsNiBAQAogICAgbGVuZ3RoID0gcG5nX3N0cmxlbihwdXJwb3NlKSArIDE7CiAgICBwbmdfZGVidWcxKDMsICJhbGxvY2F0aW5nIHB1cnBvc2UgZm9yIGluZm8gKCVsdSBieXRlcylcbiIsIGxlbmd0aCk7CiAgICBpbmZvX3B0ci0+cGNhbF9wdXJwb3NlID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCk7Ci0gICBpZiAoaW5mb19wdHItPnBjYWxfcHVycG9zZSA9PSAocG5nX2NoYXJwKU5VTEwpCi0gICB7Ci0gICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBDQUwiKTsKLSAgICAgIHJldHVybjsKLSAgIH0KICAgIHBuZ19tZW1jcHkoaW5mb19wdHItPnBjYWxfcHVycG9zZSwgcHVycG9zZSwgKHBuZ19zaXplX3QpbGVuZ3RoKTsKIAogICAgcG5nX2RlYnVnKDMsICJzdG9yaW5nIFgwLCBYMSwgdHlwZSwgYW5kIG5wYXJhbXMgaW4gaW5mb1xuIik7CkBAIC0zMTYsMjMgKzMwNiwxMCBAQAogICAgbGVuZ3RoID0gcG5nX3N0cmxlbih1bml0cykgKyAxOwogICAgcG5nX2RlYnVnMSgzLCAiYWxsb2NhdGluZyB1bml0cyBmb3IgaW5mbyAoJWx1IGJ5dGVzKVxuIiwgbGVuZ3RoKTsKICAgIGluZm9fcHRyLT5wY2FsX3VuaXRzID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCk7Ci0gICBpZiAoaW5mb19wdHItPnBjYWxfdW5pdHMgPT0gKHBuZ19jaGFycClOVUxMKQotICAgewotICAgICAgcG5nX2ZyZWUgKHBuZ19wdHIsIGluZm9fcHRyLT5wY2FsX3B1cnBvc2UpOwotICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBwQ0FMIHVuaXRzIik7Ci0gICAgICByZXR1cm47Ci0gICB9CiAgICBwbmdfbWVtY3B5KGluZm9fcHRyLT5wY2FsX3VuaXRzLCB1bml0cywgKHBuZ19zaXplX3QpbGVuZ3RoKTsKIAogICAgaW5mb19wdHItPnBjYWxfcGFyYW1zID0gKHBuZ19jaGFycHApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgKHBuZ191aW50XzMyKSgobnBhcmFtcyArIDEpICogc2l6ZW9mKHBuZ19jaGFycCkpKTsKLSAgIGlmIChpbmZvX3B0ci0+cGNhbF9wYXJhbXMgPT0gKHBuZ19jaGFycHApTlVMTCkKLSAgIHsKLSAgICAgIHBuZ19mcmVlIChwbmdfcHRyLCBpbmZvX3B0ci0+cGNhbF9wdXJwb3NlKTsKLSAgICAgIHBuZ19mcmVlIChwbmdfcHRyLCBpbmZvX3B0ci0+cGNhbF91bml0cyk7Ci0gICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBDQUwgcGFyYW1zIik7Ci0gICAgICByZXR1cm47Ci0gICB9CiAKICAgIGluZm9fcHRyLT5wY2FsX3BhcmFtc1tucGFyYW1zXSA9IE5VTEw7CiAKQEAgLTM0MSwxMyArMzE4LDcgQEAKICAgICAgIGxlbmd0aCA9IHBuZ19zdHJsZW4ocGFyYW1zW2ldKSArIDE7CiAgICAgICBwbmdfZGVidWcyKDMsICJhbGxvY2F0aW5nIHBhcmFtZXRlciAlZCBmb3IgaW5mbyAoJWx1IGJ5dGVzKVxuIiwgaSwgbGVuZ3RoKTsKICAgICAgIGluZm9fcHRyLT5wY2FsX3BhcmFtc1tpXSA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGgpOwotICAgICAgaWYgKGluZm9fcHRyLT5wY2FsX3BhcmFtc1tpXSA9PSAocG5nX2NoYXJwKU5VTEwpCi0gICAgICB7Ci0gICAgICAgICBucGFyYW1zPWk7Ci0gICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBDQUwgcGFyYW1zIik7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgICBwbmdfbWVtY3B5KGluZm9fcHRyLT5wY2FsX3BhcmFtc1tpXSwgcGFyYW1zW2ldLCAocG5nX3NpemVfdClsZW5ndGgpOworICAgICAgcG5nX21lbWNweShpbmZvX3B0ci0+cGNhbF9wYXJhbXNbaV0sIHBhcmFtc1tpXSwgKHBuZ19zaXplX3QpbGVuZ3RoKTsKICAgIH0KIAogICAgaW5mb19wdHItPnZhbGlkIHw9IFBOR19JTkZPX3BDQUw7CkBAIC0zOTAsMTQgKzM2MSwxMiBAQAogICAgbGVuZ3RoID0gcG5nX3N0cmxlbihzd2lkdGgpICsgMTsKICAgIHBuZ19kZWJ1ZzEoMywgImFsbG9jYXRpbmcgdW5pdCBmb3IgaW5mbyAoJWQgYnl0ZXMpXG4iLCBsZW5ndGgpOwogICAgaW5mb19wdHItPnNjYWxfc193aWR0aCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGgpOwotICAgaWYgKGluZm9fcHRyLT5zY2FsX3Nfd2lkdGggIT0gKHBuZ19jaGFycClOVUxMKQotICAgICAgcG5nX21lbWNweShpbmZvX3B0ci0+c2NhbF9zX3dpZHRoLCBzd2lkdGgsIChwbmdfc2l6ZV90KWxlbmd0aCk7CisgICBwbmdfbWVtY3B5KGluZm9fcHRyLT5zY2FsX3Nfd2lkdGgsIHN3aWR0aCwgKHBuZ19zaXplX3QpbGVuZ3RoKTsKIAogICAgbGVuZ3RoID0gcG5nX3N0cmxlbihzaGVpZ2h0KSArIDE7CiAgICBwbmdfZGVidWcxKDMsICJhbGxvY2F0aW5nIHVuaXQgZm9yIGluZm8gKCVkIGJ5dGVzKVxuIiwgbGVuZ3RoKTsKICAgIGluZm9fcHRyLT5zY2FsX3NfaGVpZ2h0ID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCk7Ci0gICBpZiAoaW5mb19wdHItPnNjYWxfc19oZWlnaHQgIT0gKHBuZ19jaGFycClOVUxMKQotICAgICAgcG5nX21lbWNweShpbmZvX3B0ci0+c2NhbF9zX2hlaWdodCwgc2hlaWdodCwgKHBuZ19zaXplX3QpbGVuZ3RoKTsKKyAgIHBuZ19tZW1jcHkoaW5mb19wdHItPnNjYWxfc19oZWlnaHQsIHNoZWlnaHQsIChwbmdfc2l6ZV90KWxlbmd0aCk7CiAKICAgIGluZm9fcHRyLT52YWxpZCB8PSBQTkdfSU5GT19zQ0FMOwogI2lmZGVmIFBOR19GUkVFX01FX1NVUFBPUlRFRApAQCAtNDQzLDExICs0MTIsNiBAQAogI2VuZGlmCiAgICBwbmdfcHRyLT5wYWxldHRlID0gKHBuZ19jb2xvcnApcG5nX3phbGxvYyhwbmdfcHRyLCAodUludCludW1fcGFsZXR0ZSwKICAgICAgIHNpemVvZiAocG5nX2NvbG9yKSk7Ci0gICBpZiAocG5nX3B0ci0+cGFsZXR0ZSA9PSAocG5nX2NvbG9ycClOVUxMKQotICAgewotICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIlVuYWJsZSB0byBhbGxvY2F0ZSBwYWxldHRlIik7Ci0gICAgICByZXR1cm47Ci0gICB9CiAgICBwbmdfbWVtY3B5KHBuZ19wdHItPnBhbGV0dGUsIHBhbGV0dGUsIG51bV9wYWxldHRlICogc2l6ZW9mIChwbmdfY29sb3IpKTsKICAgIGluZm9fcHRyLT5wYWxldHRlID0gcG5nX3B0ci0+cGFsZXR0ZTsKICAgIGluZm9fcHRyLT5udW1fcGFsZXR0ZSA9IHBuZ19wdHItPm51bV9wYWxldHRlID0gKHBuZ191aW50XzE2KW51bV9wYWxldHRlOwpAQCAtNTcyLDE5ICs1MzYsOCBAQAogICAgICAgcmV0dXJuOwogCiAgICBuZXdfaWNjcF9uYW1lID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIHBuZ19zdHJsZW4obmFtZSkrMSk7Ci0gICBpZiAobmV3X2ljY3BfbmFtZSA9PSAocG5nX2NoYXJwKU5VTEwpIAotICAgewotICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIElDQyBwcm9maWxlIG5hbWUiKTsKLSAgICAgcmV0dXJuOwotICAgfQogICAgcG5nX3N0cmNweShuZXdfaWNjcF9uYW1lLCBuYW1lKTsKICAgIG5ld19pY2NwX3Byb2ZpbGUgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgcHJvZmxlbik7Ci0gICBpZiAobmV3X2ljY3BfcHJvZmlsZSA9PSAocG5nX2NoYXJwKU5VTEwpIAotICAgewotICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIElDQyBwcm9maWxlIik7Ci0gICAgIHBuZ19mcmVlIChwbmdfcHRyLCBuZXdfaWNjcF9uYW1lKTsKLSAgICAgcmV0dXJuOwotICAgfQogICAgcG5nX21lbWNweShuZXdfaWNjcF9wcm9maWxlLCBwcm9maWxlLCAocG5nX3NpemVfdClwcm9mbGVuKTsKIAogICAgcG5nX2ZyZWVfZGF0YShwbmdfcHRyLCBpbmZvX3B0ciwgUE5HX0ZSRUVfSUNDUCwgMCk7CkBAIC02MzAsMTIgKzU4Myw2IEBACiAgICAgICAgICBvbGRfdGV4dCA9IGluZm9fcHRyLT50ZXh0OwogICAgICAgICAgaW5mb19wdHItPnRleHQgPSAocG5nX3RleHRwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIChwbmdfdWludF8zMikoaW5mb19wdHItPm1heF90ZXh0ICogc2l6ZW9mIChwbmdfdGV4dCkpKTsKLSAgICAgICAgIGlmIChpbmZvX3B0ci0+dGV4dCA9PSAocG5nX3RleHRwKU5VTEwpCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRleHQiKTsKLSAgICAgICAgICAgIGluZm9fcHRyLT50ZXh0ID0gb2xkX3RleHQ7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICB9CiAgICAgICAgICBwbmdfbWVtY3B5KGluZm9fcHRyLT50ZXh0LCBvbGRfdGV4dCwgKHBuZ19zaXplX3QpKG9sZF9tYXggKgogICAgICAgICAgICAgc2l6ZW9mKHBuZ190ZXh0KSkpOwogICAgICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgb2xkX3RleHQpOwpAQCAtNjQ2LDExICs1OTMsNiBAQAogICAgICAgICAgaW5mb19wdHItPm51bV90ZXh0ID0gMDsKICAgICAgICAgIGluZm9fcHRyLT50ZXh0ID0gKHBuZ190ZXh0cClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKGluZm9fcHRyLT5tYXhfdGV4dCAqIHNpemVvZiAocG5nX3RleHQpKSk7Ci0gICAgICAgICBpZiAoaW5mb19wdHItPnRleHQgPT0gKHBuZ190ZXh0cClOVUxMKQotICAgICAgICAgewotICAgICAgICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZXh0Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICB9CiAjaWZkZWYgUE5HX0ZSRUVfTUVfU1VQUE9SVEVECiAgICAgICAgICBpbmZvX3B0ci0+ZnJlZV9tZSB8PSBQTkdfRlJFRV9URVhUOwogI2VuZGlmCkBAIC02NjQsNyArNjA2LDcgQEAKICAgICAgIHBuZ19zaXplX3QgbGFuZ19sZW4sbGFuZ19rZXlfbGVuOwogICAgICAgcG5nX3RleHRwIHRleHRwID0gJihpbmZvX3B0ci0+dGV4dFtpbmZvX3B0ci0+bnVtX3RleHRdKTsKIAotICAgICAgaWYgKHRleHRfcHRyW2ldLmtleSA9PSAocG5nX2NoYXJwKU5VTEwpCisgICAgICBpZiAodGV4dF9wdHJbaV0ua2V5ID09IE5VTEwpCiAgICAgICAgICAgY29udGludWU7CiAKICAgICAgIGtleV9sZW4gPSBwbmdfc3RybGVuKHRleHRfcHRyW2ldLmtleSk7CkBAIC02NzgsMTEgKzYyMCwxMSBAQAogI2lmZGVmIFBOR19pVFh0X1NVUFBPUlRFRAogICAgICAgewogICAgICAgICAvKiBzZXQgaVRYdCBkYXRhICovCi0gICAgICAgIGlmICh0ZXh0X3B0cltpXS5rZXkgIT0gKHBuZ19jaGFycClOVUxMKQorICAgICAgICBpZiAodGV4dF9wdHJbaV0ua2V5ICE9IE5VTEwpCiAgICAgICAgICAgbGFuZ19sZW4gPSBwbmdfc3RybGVuKHRleHRfcHRyW2ldLmxhbmcpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgbGFuZ19sZW4gPSAwOwotICAgICAgICBpZiAodGV4dF9wdHJbaV0ubGFuZ19rZXkgIT0gKHBuZ19jaGFycClOVUxMKQorICAgICAgICBpZiAodGV4dF9wdHJbaV0ubGFuZ19rZXkgIT0gTlVMTCkKICAgICAgICAgICBsYW5nX2tleV9sZW4gPSBwbmdfc3RybGVuKHRleHRfcHRyW2ldLmxhbmdfa2V5KTsKICAgICAgICAgZWxzZQogICAgICAgICAgIGxhbmdfa2V5X2xlbiA9IDA7CkBAIC02OTQsNyArNjM2LDcgQEAKICAgICAgIH0KICNlbmRpZgogCi0gICAgICBpZiAodGV4dF9wdHJbaV0udGV4dCA9PSAocG5nX2NoYXJwKU5VTEwgfHwgdGV4dF9wdHJbaV0udGV4dFswXSA9PSAnXDAnKQorICAgICAgaWYgKHRleHRfcHRyW2ldLnRleHQgPT0gTlVMTCB8fCB0ZXh0X3B0cltpXS50ZXh0WzBdID09ICdcMCcpCiAgICAgICB7CiAgICAgICAgICB0ZXh0X2xlbmd0aCA9IDA7CiAjaWZkZWYgUE5HX2lUWHRfU1VQUE9SVEVECkBAIC03MTIsMTEgKzY1NCw2IEBACiAKICAgICAgIHRleHRwLT5rZXkgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgIChwbmdfdWludF8zMikoa2V5X2xlbiArIHRleHRfbGVuZ3RoICsgbGFuZ19sZW4gKyBsYW5nX2tleV9sZW4gKyA0KSk7Ci0gICAgICBpZiAodGV4dHAtPmtleSA9PSAocG5nX2NoYXJwKU5VTEwpCi0gICAgICB7Ci0gICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRleHQgcG9pbnRlciIpOwotICAgICAgICAgcmV0dXJuOwotICAgICAgfQogICAgICAgcG5nX2RlYnVnMigyLCAiQWxsb2NhdGVkICVkIGJ5dGVzIGF0ICV4IGluIHBuZ19zZXRfdGV4dFxuIiwKICAgICAgICAgIGtleV9sZW4gKyBsYW5nX2xlbiArIGxhbmdfa2V5X2xlbiArIHRleHRfbGVuZ3RoICsgNCwgKGludCl0ZXh0cC0+a2V5KTsKIApAQCAtODA0LDExICs3NDEsNiBAQAogI2VuZGlmCiAgICAgICAgcG5nX3B0ci0+dHJhbnMgPSBpbmZvX3B0ci0+dHJhbnMgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgbnVtX3RyYW5zKTsKLSAgICAgICBpZiAocG5nX3B0ci0+dHJhbnMgPT0gKHBuZ19ieXRlcClOVUxMKQotICAgICAgIHsKLSAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRSTlMgYXJyYXkiKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgfQogICAgICAgIHBuZ19tZW1jcHkoaW5mb19wdHItPnRyYW5zLCB0cmFucywgbnVtX3RyYW5zKTsKICNpZmRlZiBQTkdfRlJFRV9NRV9TVVBQT1JURUQKICAgICAgICBpbmZvX3B0ci0+ZnJlZV9tZSB8PSBQTkdfRlJFRV9UUk5TOwpAQCAtODM5LDExICs3NzEsNiBAQAogCiAgICAgbnAgPSAocG5nX3NQTFRfdHApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAoaW5mb19wdHItPnNwbHRfcGFsZXR0ZXNfbnVtICsgbmVudHJpZXMpICogc2l6ZW9mKHBuZ19zUExUX3QpKTsKLSAgICBpZiAobnAgPT0gKHBuZ19zUExUX3RwKU5VTEwpCi0gICAgewotICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3Igc1BMVCIpOwotICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBwbmdfbWVtY3B5KG5wLCBpbmZvX3B0ci0+c3BsdF9wYWxldHRlcywKICAgICAgICAgICAgaW5mb19wdHItPnNwbHRfcGFsZXR0ZXNfbnVtICogc2l6ZW9mKHBuZ19zUExUX3QpKTsKQEAgLTg2MCwxOCArNzg3LDEwIEBACiAgICAgICAgIHBuZ19zdHJjcHkodG8tPm5hbWUsIGZyb20tPm5hbWUpOwogICAgICAgICB0by0+ZW50cmllcyA9IChwbmdfc1BMVF9lbnRyeXApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgICAgZnJvbS0+bmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfdCkpOwotICAgICAgICBpZiAodG8tPmVudHJpZXMgPT0gKHBuZ19zUExUX2VudHJ5cClOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBzUExUIGVudHJ5Iik7Ci0gICAgICAgICAgIG5lbnRyaWVzPWk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcG5nX21lbWNweSh0by0+ZW50cmllcywgZnJvbS0+ZW50cmllcywKLSAgICAgICAgICAgICAgIGZyb20tPm5lbnRyaWVzICogc2l6ZW9mKHBuZ19zUExUX3QpKTsKLSAgICAgICAgICB0by0+bmVudHJpZXMgPSBmcm9tLT5uZW50cmllczsKLSAgICAgICAgICB0by0+ZGVwdGggPSBmcm9tLT5kZXB0aDsKLSAgICAgICAgfQorICAgICAgICBwbmdfbWVtY3B5KHRvLT5lbnRyaWVzLCBmcm9tLT5lbnRyaWVzLAorICAgICAgICAgICAgZnJvbS0+bmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfdCkpOworICAgICAgICB0by0+bmVudHJpZXMgPSBmcm9tLT5uZW50cmllczsKKyAgICAgICAgdG8tPmRlcHRoID0gZnJvbS0+ZGVwdGg7CiAgICAgfQogCiAgICAgaW5mb19wdHItPnNwbHRfcGFsZXR0ZXMgPSBucDsKQEAgLTg5NywxMSArODE2LDYgQEAKICAgICBucCA9IChwbmdfdW5rbm93bl9jaHVua3ApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAoaW5mb19wdHItPnVua25vd25fY2h1bmtzX251bSArIG51bV91bmtub3ducykgKgogICAgICAgICBzaXplb2YocG5nX3Vua25vd25fY2h1bmspKTsKLSAgICBpZiAobnAgPT0gKHBuZ191bmtub3duX2NodW5rcClOVUxMKQotICAgIHsKLSAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHVua25vd24gY2h1bmsiKTsKLSAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgcG5nX21lbWNweShucCwgaW5mb19wdHItPnVua25vd25fY2h1bmtzLAogICAgICAgICAgICBpbmZvX3B0ci0+dW5rbm93bl9jaHVua3NfbnVtICogc2l6ZW9mKHBuZ191bmtub3duX2NodW5rKSk7CkBAIC05MTUsMTkgKzgyOSwxMSBAQAogCiAgICAgICAgIHBuZ19zdHJjcHkoKHBuZ19jaGFycCl0by0+bmFtZSwgKHBuZ19jaGFycClmcm9tLT5uYW1lKTsKICAgICAgICAgdG8tPmRhdGEgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwgZnJvbS0+c2l6ZSk7Ci0gICAgICAgIGlmICh0by0+ZGF0YSA9PSAocG5nX2J5dGVwKU5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHVua25vd24gZW50cnkiKTsKLSAgICAgICAgICAgbnVtX3Vua25vd25zPWk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgcG5nX21lbWNweSh0by0+ZGF0YSwgZnJvbS0+ZGF0YSwgZnJvbS0+c2l6ZSk7Ci0gICAgICAgICAgdG8tPnNpemUgPSBmcm9tLT5zaXplOworICAgICAgICBwbmdfbWVtY3B5KHRvLT5kYXRhLCBmcm9tLT5kYXRhLCBmcm9tLT5zaXplKTsKKyAgICAgICAgdG8tPnNpemUgPSBmcm9tLT5zaXplOwogCi0gICAgICAgICAgLyogbm90ZSBvdXIgbG9jYXRpb24gaW4gdGhlIHJlYWQgb3Igd3JpdGUgc2VxdWVuY2UgKi8KLSAgICAgICAgICB0by0+bG9jYXRpb24gPSAocG5nX2J5dGUpKHBuZ19wdHItPm1vZGUgJiAweGZmKTsKLSAgICAgICAgfQorICAgICAgICAvKiBub3RlIG91ciBsb2NhdGlvbiBpbiB0aGUgcmVhZCBvciB3cml0ZSBzZXF1ZW5jZSAqLworICAgICAgICB0by0+bG9jYXRpb24gPSAocG5nX2J5dGUpKHBuZ19wdHItPm1vZGUgJiAweGZmKTsKICAgICB9CiAKICAgICBpbmZvX3B0ci0+dW5rbm93bl9jaHVua3MgPSBucDsKQEAgLTk5OSw3ICs5MDUsNyBAQAogICAgICAgcmV0dXJuOwogICAgIG9sZF9udW1fY2h1bmtzPXBuZ19wdHItPm51bV9jaHVua19saXN0OwogICAgIG5ld19saXN0PShwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLDUqKG51bV9jaHVua3Mrb2xkX251bV9jaHVua3MpKTsKLSAgICBpZihwbmdfcHRyLT5jaHVua19saXN0ICE9IChwbmdfYnl0ZXApTlVMTCkKKyAgICBpZihwbmdfcHRyLT5jaHVua19saXN0ICE9IE5VTEwpCiAgICAgewogICAgICAgIHBuZ19tZW1jcHkobmV3X2xpc3QsIHBuZ19wdHItPmNodW5rX2xpc3QsIDUqb2xkX251bV9jaHVua3MpOwogICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIHBuZ19wdHItPmNodW5rX2xpc3QpOwpAQCAtMTA1MSw4ICs5NTcsNiBAQAogICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIHBuZ19wdHItPnpidWYpOwogICAgIHBuZ19wdHItPnpidWZfc2l6ZSA9IChwbmdfc2l6ZV90KXNpemU7CiAgICAgcG5nX3B0ci0+emJ1ZiA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLCBzaXplKTsKLSAgICBpZighcG5nX3B0ci0+emJ1ZikKLSAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwiVW5hYmxlIHRvIG1hbGxvYyB6YnVmIik7CiAgICAgcG5nX3B0ci0+enN0cmVhbS5uZXh0X291dCA9IHBuZ19wdHItPnpidWY7CiAgICAgcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQgPSAodUludClwbmdfcHRyLT56YnVmX3NpemU7CiB9CmRpZmYgLS1naXQgYS9wbmd0ZXN0LmMgYi9wbmd0ZXN0LmMKaW5kZXggYzVjMTJjMS4uZTAxN2FkNSAxMDA2NDQKLS0tIGEvcG5ndGVzdC5jCisrKyBiL3BuZ3Rlc3QuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5ndGVzdC5jIC0gYSBzaW1wbGUgdGVzdCBwcm9ncmFtIHRvIHRlc3QgbGlicG5nCiAgKgotICogbGlicG5nIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFyYzEgLSBBcHJpbCAyMCwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTAyOCwxOCArMTAyOCw2IEBACiAgICByb3dfYnVmID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHJlYWRfcHRyLAogICAgICAgcG5nX2dldF9yb3dieXRlcyhyZWFkX3B0ciwgcmVhZF9pbmZvX3B0cikpOwogICAgcG5nX2RlYnVnMSgwLCAiMHglMDhseFxuXG4iLCAodW5zaWduZWQgbG9uZylyb3dfYnVmKTsKLSAgIGlmIChyb3dfYnVmID09IE5VTEwpCi0gICB7Ci0gICAgICBmcHJpbnRmKFNUREVSUiwgIk5vIG1lbW9yeSB0byBhbGxvY2F0ZSByb3cgYnVmZmVyXG4iKTsKLSAgICAgIHBuZ19kZXN0cm95X3JlYWRfc3RydWN0KCZyZWFkX3B0ciwgJnJlYWRfaW5mb19wdHIsIChwbmdfaW5mb3BwKU5VTEwpOwotI2lmZGVmIFBOR19XUklURV9TVVBQT1JURUQKLSAgICAgIHBuZ19kZXN0cm95X2luZm9fc3RydWN0KHdyaXRlX3B0ciwgJndyaXRlX2VuZF9pbmZvX3B0cik7Ci0gICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJndyaXRlX3B0ciwgJndyaXRlX2luZm9fcHRyKTsKLSNlbmRpZgotICAgICAgRkNMT1NFKGZwaW4pOwotICAgICAgRkNMT1NFKGZwb3V0KTsKLSAgICAgIHJldHVybiAoMSk7Ci0gICB9CiAjZW5kaWYgLyogU0lOR0xFX1JPV0JVRl9BTExPQyAqLwogICAgcG5nX2RlYnVnKDAsICJXcml0aW5nIHJvdyBkYXRhXG4iKTsKIApAQCAtMTUyMyw0ICsxNTExLDQgQEAKIH0KIAogLyogR2VuZXJhdGUgYSBjb21waWxlciBlcnJvciBpZiB0aGVyZSBpcyBhbiBvbGQgcG5nLmggaW4gdGhlIHNlYXJjaCBwYXRoLiAqLwotdHlwZWRlZiB2ZXJzaW9uXzFfMF8xMWJldGEzIHlvdXJfcG5nX2hfaXNfbm90X3ZlcnNpb25fMV8wXzExYmV0YTM7Cit0eXBlZGVmIHZlcnNpb25fMV8wXzExcmMxIHlvdXJfcG5nX2hfaXNfbm90X3ZlcnNpb25fMV8wXzExcmMxOwpkaWZmIC0tZ2l0IGEvcG5ndHJhbnMuYyBiL3BuZ3RyYW5zLmMKaW5kZXggNmY1MjFlOS4uNDQ3NWFiMCAxMDA2NDQKLS0tIGEvcG5ndHJhbnMuYworKysgYi9wbmd0cmFucy5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmd0cmFucy5jIC0gdHJhbnNmb3JtcyB0aGUgZGF0YSBpbiBhIHJvdyAodXNlZCBieSBib3RoIHJlYWRlcnMgYW5kIHdyaXRlcnMpCiAgKgotICogbGlicG5nIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFyYzEgLSBBcHJpbCAyMCwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpkaWZmIC0tZ2l0IGEvcG5ndmNyZC5jIGIvcG5ndmNyZC5jCmluZGV4IDE3NDk5YWMuLmM0NmUzYzEgMTAwNjQ0Ci0tLSBhL3BuZ3ZjcmQuYworKysgYi9wbmd2Y3JkLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogRm9yIEludGVsIHg4NiBDUFUgYW5kIE1pY3Jvc29mdCBWaXN1YWwgQysrIGNvbXBpbGVyCiAgKgotICogbGlicG5nIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFyYzEgLSBBcHJpbCAyMCwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIENvcHlyaWdodCAoYykgMTk5OCwgSW50ZWwgQ29ycG9yYXRpb24KZGlmZiAtLWdpdCBhL3BuZ3dpby5jIGIvcG5nd2lvLmMKaW5kZXggMDc3NWRiYy4uNTMwYzg4NSAxMDA2NDQKLS0tIGEvcG5nd2lvLmMKKysrIGIvcG5nd2lvLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3dpby5jIC0gZnVuY3Rpb25zIGZvciBkYXRhIG91dHB1dAogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCisgKiBsaWJwbmcgMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKZGlmZiAtLWdpdCBhL3BuZ3dyaXRlLmMgYi9wbmd3cml0ZS5jCmluZGV4IDE4Y2UyNGMuLjEwYzA0YWEgMTAwNjQ0Ci0tLSBhL3BuZ3dyaXRlLmMKKysrIGIvcG5nd3JpdGUuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nd3JpdGUuYyAtIGdlbmVyYWwgcm91dGluZXMgdG8gd3JpdGUgYSBQTkcgZmlsZQogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCisgKiBsaWJwbmcgMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTUxMiw4ICs1MTIsNiBAQAogICAgcG5nX3B0ci0+emJ1Zl9zaXplID0gUE5HX1pCVUZfU0laRTsKICAgIHBuZ19wdHItPnpidWYgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgIChwbmdfdWludF8zMilwbmdfcHRyLT56YnVmX3NpemUpOwotICAgaWYgKHBuZ19wdHItPnpidWYgPT0gKHBuZ19ieXRlcClOVUxMKQotICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgemJ1ZiBmb3Igd3JpdGluZyIpOwogCiAgICBwbmdfc2V0X3dyaXRlX2ZuKHBuZ19wdHIsIE5VTEwsIE5VTEwsIE5VTEwpOwogCkBAIC01ODMsOCArNTgxLDYgQEAKICAgIHBuZ19wdHItPnpidWZfc2l6ZSA9IFBOR19aQlVGX1NJWkU7CiAgICBwbmdfcHRyLT56YnVmID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAocG5nX3VpbnRfMzIpcG5nX3B0ci0+emJ1Zl9zaXplKTsKLSAgIGlmIChwbmdfcHRyLT56YnVmID09IChwbmdfYnl0ZXApTlVMTCkKLSAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIHpidWYgZm9yIHdyaXRpbmciKTsKICAgIHBuZ19zZXRfd3JpdGVfZm4ocG5nX3B0ciwgTlVMTCwgTlVMTCwgTlVMTCk7CiAKICNpZiBkZWZpbmVkKFBOR19XUklURV9XRUlHSFRFRF9GSUxURVJfU1VQUE9SVEVEKQpAQCAtMTAzMyw4ICsxMDI5LDYgQEAKICAgICAgICAgIHsKICAgICAgICAgICAgIHBuZ19wdHItPnN1Yl9yb3cgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgKHBuZ19wdHItPnJvd2J5dGVzICsgMSkpOwotICAgICAgICAgICBpZiAocG5nX3B0ci0+c3ViX3JvdyA9PSAocG5nX2J5dGVwKU5VTEwpCi0gICAgICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIHN1Yl9yb3ciKTsKICAgICAgICAgICAgIHBuZ19wdHItPnN1Yl9yb3dbMF0gPSBQTkdfRklMVEVSX1ZBTFVFX1NVQjsKICAgICAgICAgIH0KIApAQCAtMTA0OSwxMCArMTA0Myw2IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwbmdfcHRyLT51cF9yb3cgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgICAgIChwbmdfcHRyLT5yb3dieXRlcyArIDEpKTsKLSAgICAgICAgICAgICAgIGlmIChwbmdfcHRyLT51cF9yb3cgPT0gKHBuZ19ieXRlcClOVUxMKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBzdWJfcm93Iik7Ci0gICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwbmdfcHRyLT51cF9yb3dbMF0gPSBQTkdfRklMVEVSX1ZBTFVFX1VQOwogICAgICAgICAgICAgfQogICAgICAgICAgfQpAQCAtMTA2OCw4ICsxMDU4LDYgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBuZ19wdHItPmF2Z19yb3cgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgICAgIChwbmdfcHRyLT5yb3dieXRlcyArIDEpKTsKLSAgICAgICAgICAgICAgIGlmIChwbmdfcHRyLT5hdmdfcm93ID09IChwbmdfYnl0ZXApTlVMTCkKLSAgICAgICAgICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIGF2Z19yb3ciKTsKICAgICAgICAgICAgICAgIHBuZ19wdHItPmF2Z19yb3dbMF0gPSBQTkdfRklMVEVSX1ZBTFVFX0FWRzsKICAgICAgICAgICAgIH0KICAgICAgICAgIH0KQEAgLTEwODYsOCArMTA3NCw2IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwbmdfcHRyLT5wYWV0aF9yb3cgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgICAgIChwbmdfcHRyLT5yb3dieXRlcyArIDEpKTsKLSAgICAgICAgICAgICAgIGlmIChwbmdfcHRyLT5wYWV0aF9yb3cgPT0gKHBuZ19ieXRlcClOVUxMKQotICAgICAgICAgICAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBhdmdfcm93Iik7CiAgICAgICAgICAgICAgICBwbmdfcHRyLT5wYWV0aF9yb3dbMF0gPSBQTkdfRklMVEVSX1ZBTFVFX1BBRVRIOwogICAgICAgICAgICAgfQogICAgICAgICAgfQpAQCAtMTE0MywxMyArMTEyOSwxMCBAQAogICAgICAgICAgcG5nX3B0ci0+cHJldl9maWx0ZXJzID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKHNpemVvZihwbmdfYnl0ZSkgKiBudW1fd2VpZ2h0cykpOwogCi0gICAgICAgICBpZiAocG5nX3B0ci0+cHJldl9maWx0ZXJzICE9IChwbmdfYnl0ZXApTlVMTCkKKyAgICAgICAgIC8qIFRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB3ZWlnaHRpbmcgc3RhcnRzIG91dCBmYWlybHkgKi8KKyAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fd2VpZ2h0czsgaSsrKQogICAgICAgICAgewotICAgICAgICAgICAvKiBUbyBtYWtlIHN1cmUgdGhhdCB0aGUgd2VpZ2h0aW5nIHN0YXJ0cyBvdXQgZmFpcmx5ICovCi0gICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fd2VpZ2h0czsgaSsrKQotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHBuZ19wdHItPnByZXZfZmlsdGVyc1tpXSA9IDI1NTsKLSAgICAgICAgICAgfQorICAgICAgICAgICAgcG5nX3B0ci0+cHJldl9maWx0ZXJzW2ldID0gMjU1OwogICAgICAgICAgfQogICAgICAgfQogCkBAIC0xMTYwLDIyICsxMTQzLDExIEBACiAKICAgICAgICAgIHBuZ19wdHItPmludl9maWx0ZXJfd2VpZ2h0cyA9IChwbmdfdWludF8xNnApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgICAgKHBuZ191aW50XzMyKShzaXplb2YocG5nX3VpbnRfMTYpICogbnVtX3dlaWdodHMpKTsKLSAgICAgICAgIGlmIChwbmdfcHRyLT5pbnZfZmlsdGVyX3dlaWdodHMgPT0gKHBuZ191aW50XzE2cClOVUxMKQorICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV93ZWlnaHRzOyBpKyspCiAgICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBwbmdfcHRyLT5maWx0ZXJfd2VpZ2h0cyk7Ci0gICAgICAgICAgICBwbmdfcHRyLT5maWx0ZXJfd2VpZ2h0cyA9IE5VTEw7CisgICAgICAgICAgICBwbmdfcHRyLT5pbnZfZmlsdGVyX3dlaWdodHNbaV0gPQorICAgICAgICAgICAgcG5nX3B0ci0+ZmlsdGVyX3dlaWdodHNbaV0gPSBQTkdfV0VJR0hUX0ZBQ1RPUjsKICAgICAgICAgIH0KLSAgICAgICAgIGlmIChwbmdfcHRyLT5maWx0ZXJfd2VpZ2h0cyAhPSAocG5nX3VpbnRfMTZwKU5VTEwgJiYKLSAgICAgICAgICAgICBwbmdfcHRyLT5pbnZfZmlsdGVyX3dlaWdodHMgIT0gKHBuZ191aW50XzE2cClOVUxMKQotICAgICAgICAgewotICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3dlaWdodHM7IGkrKykKLSAgICAgICAgICAgewotICAgICAgICAgICAgICBwbmdfcHRyLT5pbnZfZmlsdGVyX3dlaWdodHNbaV0gPQotICAgICAgICAgICAgICBwbmdfcHRyLT5maWx0ZXJfd2VpZ2h0c1tpXSA9IFBOR19XRUlHSFRfRkFDVE9SOwotICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICAgICBlbHNlCi0gICAgICAgICAgICBudW1fd2VpZ2h0cz0wOwogICAgICAgfQogCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3dlaWdodHM7IGkrKykKQEAgLTEzODcsNyArMTM1OSw3IEBACiAgICAvKiBJdCBpcyBSRVFVSVJFRCB0byBjYWxsIHRoaXMgdG8gZmluaXNoIHdyaXRpbmcgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgKi8KICAgIHBuZ193cml0ZV9lbmQocG5nX3B0ciwgaW5mb19wdHIpOwogCi0gICBpZih0cmFuc2Zvcm1zID09IDAgfHwgcGFyYW1zID09ICh2b2lkcClOVUxMKQorICAgaWYodHJhbnNmb3JtcyA9PSAwIHx8IHBhcmFtcyA9PSBOVUxMKQogICAgICAgLyogcXVpZXQgY29tcGlsZXIgd2FybmluZ3MgKi8gcmV0dXJuOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9wbmd3dHJhbi5jIGIvcG5nd3RyYW4uYwppbmRleCA3OTQzN2E2Li43MzIyMDg3IDEwMDY0NAotLS0gYS9wbmd3dHJhbi5jCisrKyBiL3BuZ3d0cmFuLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3d0cmFuLmMgLSB0cmFuc2Zvcm1zIHRoZSBkYXRhIGluIGEgcm93IGZvciBQTkcgd3JpdGVycwogICoKLSAqIGxpYnBuZyAxLjAuMTFiZXRhMyAtIEFwcmlsIDE1LCAyMDAxCisgKiBsaWJwbmcgMS4wLjExcmMxIC0gQXByaWwgMjAsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKZGlmZiAtLWdpdCBhL3BuZ3d1dGlsLmMgYi9wbmd3dXRpbC5jCmluZGV4IDY4ODlmMjcuLmE5MDA5ODYgMTAwNjQ0Ci0tLSBhL3BuZ3d1dGlsLmMKKysrIGIvcG5nd3V0aWwuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nd3V0aWwuYyAtIHV0aWxpdGllcyB0byB3cml0ZSBhIFBORyBmaWxlCiAgKgotICogbGlicG5nIDEuMC4xMWJldGEzIC0gQXByaWwgMTUsIDIwMDEKKyAqIGxpYnBuZyAxLjAuMTFyYzEgLSBBcHJpbCAyMCwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMjM1LDExICsyMzUsNiBAQAogICAgICAgICAgICAgICAgb2xkX3B0ciA9IGNvbXAtPm91dHB1dF9wdHI7CiAgICAgICAgICAgICAgICBjb21wLT5vdXRwdXRfcHRyID0gKHBuZ19jaGFycHApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKShjb21wLT5tYXhfb3V0cHV0X3B0ciAqIHNpemVvZiAocG5nX2NoYXJwcCkpKTsKLSAgICAgICAgICAgICAgIGlmIChjb21wLT5vdXRwdXRfcHRyID09IChwbmdfY2hhcnBwKU5VTEwpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNhbm5vdCBhbGxvY2F0ZSBjb21wcmVzc2lvbiBidWZmZXIiKTsKLSAgICAgICAgICAgICAgICAgIGNvbXAtPm91dHB1dF9wdHI9b2xkX3B0cjsKLSAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoY29tcC0+b3V0cHV0X3B0ciwgb2xkX3B0ciwgb2xkX21heAogICAgICAgICAgICAgICAgICAgKiBzaXplb2YgKHBuZ19jaGFycCkpOwogICAgICAgICAgICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgb2xkX3B0cik7CkBAIC0yNDcsMjMgKzI0MiwxNCBAQAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgY29tcC0+b3V0cHV0X3B0ciA9IChwbmdfY2hhcnBwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgICAgIChwbmdfdWludF8zMikoY29tcC0+bWF4X291dHB1dF9wdHIgKiBzaXplb2YgKHBuZ19jaGFycCkpKTsKLSAgICAgICAgICAgICAgIGlmIChjb21wLT5vdXRwdXRfcHRyID09IChwbmdfY2hhcnBwKU5VTEwpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBwbmdfd2FybmluZyAocG5nX3B0ciwgIkNhbm5vdCBhbGxvY2F0ZSBjb21wcmVzc2lvbiBidWZmZXIiKTsKLSAgICAgICAgICAgICAgIH0KICAgICAgICAgIH0KIAogICAgICAgICAgLyogc2F2ZSB0aGUgZGF0YSAqLwogICAgICAgICAgY29tcC0+b3V0cHV0X3B0cltjb21wLT5udW1fb3V0cHV0X3B0cl0gPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIChwbmdfdWludF8zMilwbmdfcHRyLT56YnVmX3NpemUpOwotICAgICAgICAgaWYgKGNvbXAtPm91dHB1dF9wdHJbY29tcC0+bnVtX291dHB1dF9wdHJdID09IChwbmdfY2hhcnApTlVMTCkKLSAgICAgICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ2Fubm90IGFsbG9jYXRlIGNvbXByZXNzaW9uIGJ1ZmZlciIpOwotICAgICAgICAgZWxzZQotICAgICAgICAgewotICAgICAgICAgICAgcG5nX21lbWNweShjb21wLT5vdXRwdXRfcHRyW2NvbXAtPm51bV9vdXRwdXRfcHRyXSwgcG5nX3B0ci0+emJ1ZiwKLSAgICAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSk7Ci0gICAgICAgICAgICBjb21wLT5udW1fb3V0cHV0X3B0cisrOwotICAgICAgICAgfQorICAgICAgICAgcG5nX21lbWNweShjb21wLT5vdXRwdXRfcHRyW2NvbXAtPm51bV9vdXRwdXRfcHRyXSwgcG5nX3B0ci0+emJ1ZiwKKyAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSk7CisgICAgICAgICBjb21wLT5udW1fb3V0cHV0X3B0cisrOwogCiAgICAgICAgICAvKiBhbmQgcmVzZXQgdGhlIGJ1ZmZlciAqLwogICAgICAgICAgcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQgPSAodUludClwbmdfcHRyLT56YnVmX3NpemU7CkBAIC0yOTgsOCArMjg0LDcgQEAKICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgY291bGQgYmUgb3B0aW1pemVkIHRvIHJlYWxsb2MoKSAqLwogICAgICAgICAgICAgICAgICAgY29tcC0+b3V0cHV0X3B0ciA9IChwbmdfY2hhcnBwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgICAgICAgICAgIChwbmdfdWludF8zMikoY29tcC0+bWF4X291dHB1dF9wdHIgKiBzaXplb2YgKHBuZ19jaGFycHApKSk7Ci0gICAgICAgICAgICAgICAgICBpZiAoY29tcC0+b3V0cHV0X3B0ciAhPSAocG5nX2NoYXJwcClOVUxMKQotICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGNvbXAtPm91dHB1dF9wdHIsIG9sZF9wdHIsCisgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGNvbXAtPm91dHB1dF9wdHIsIG9sZF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9tYXggKiBzaXplb2YgKHBuZ19jaGFycCkpOwogICAgICAgICAgICAgICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgb2xkX3B0cik7CiAgICAgICAgICAgICAgICB9CkBAIC0zMTEsMTQgKzI5Niw5IEBACiAgICAgICAgICAgICAvKiBzYXZlIG9mZiB0aGUgZGF0YSAqLwogICAgICAgICAgICAgY29tcC0+b3V0cHV0X3B0cltjb21wLT5udW1fb3V0cHV0X3B0cl0gPQogICAgICAgICAgICAgICAgKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMilwbmdfcHRyLT56YnVmX3NpemUpOwotICAgICAgICAgICAgaWYgKGNvbXAtPm91dHB1dF9wdHJbY29tcC0+bnVtX291dHB1dF9wdHJdID09IChwbmdfY2hhcnApTlVMTCkKLSAgICAgICAgICAgICAgIHBuZ193YXJuaW5nIChwbmdfcHRyLCAiQ2Fubm90IGFsbG9jYXRlIGNvbXByZXNzaW9uIGJ1ZmZlciIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcG5nX21lbWNweShjb21wLT5vdXRwdXRfcHRyW2NvbXAtPm51bV9vdXRwdXRfcHRyXSwgcG5nX3B0ci0+emJ1ZiwKLSAgICAgICAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSk7Ci0gICAgICAgICAgICAgICBjb21wLT5udW1fb3V0cHV0X3B0cisrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcG5nX21lbWNweShjb21wLT5vdXRwdXRfcHRyW2NvbXAtPm51bV9vdXRwdXRfcHRyXSwgcG5nX3B0ci0+emJ1ZiwKKyAgICAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSk7CisgICAgICAgICAgICBjb21wLT5udW1fb3V0cHV0X3B0cisrOwogCiAgICAgICAgICAgICAvKiBhbmQgcmVzZXQgdGhlIGJ1ZmZlciBwb2ludGVycyAqLwogICAgICAgICAgICAgcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQgPSAodUludClwbmdfcHRyLT56YnVmX3NpemU7CkBAIC0xMTMwLDEyICsxMTEwLDYgQEAKIAogICAgKm5ld19rZXkgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgKHBuZ191aW50XzMyKShrZXlfbGVuICsgMikpOwogIAotICAgaWYgKCpuZXdfa2V5ID09IChwbmdfY2hhcnApTlVMTCkKLSAgIHsKLSAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgbmV3IGtleTsga2V5d29yZCBub3QgY2hlY2tlZCIpOwotICAgICAgcmV0dXJuIGtleV9sZW47Ci0gICB9Ci0KICAgIC8qIFJlcGxhY2Ugbm9uLXByaW50aW5nIGNoYXJhY3RlcnMgd2l0aCBhIGJsYW5rIGFuZCBwcmludCBhIHdhcm5pbmcgKi8KICAgIGZvciAoa3AgPSBrZXksIGRwID0gKm5ld19rZXk7ICprcCAhPSAnXDAnOyBrcCsrLCBkcCsrKQogICAgewpAQCAtMTQ1MSwxMiArMTQyNSw2IEBACiAgICBwYXJhbXNfbGVuID0gKHBuZ191aW50XzMycClwbmdfbWFsbG9jKHBuZ19wdHIsIChwbmdfdWludF8zMikobnBhcmFtcwogICAgICAgKnNpemVvZihwbmdfdWludF8zMikpKTsKIAotICAgaWYgKHBhcmFtc19sZW4gPT0gKHBuZ191aW50XzMycClOVUxMKQotICAgewotICAgICAgcG5nX3dhcm5pbmcgKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgcGFyYW1zIGZvciBwQ0FMIik7Ci0gICAgICByZXR1cm47Ci0gICB9Ci0KICAgIC8qIEZpbmQgdGhlIGxlbmd0aCBvZiBlYWNoIHBhcmFtZXRlciwgbWFraW5nIHN1cmUgd2UgZG9uJ3QgY291bnQgdGhlCiAgICAgICBudWxsIHRlcm1pbmF0b3IgZm9yIHRoZSBsYXN0IHBhcmFtZXRlci4gKi8KICAgIGZvciAoaSA9IDA7IGkgPCBucGFyYW1zOyBpKyspCkBAIC0xNjQwLDggKzE2MDgsNiBAQAogCiAgICAvKiBzZXQgdXAgcm93IGJ1ZmZlciAqLwogICAgcG5nX3B0ci0+cm93X2J1ZiA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLCAocG5nX3VpbnRfMzIpYnVmX3NpemUpOwotICAgaWYgKHBuZ19wdHItPnJvd19idWYgPT0gKHBuZ19ieXRlcClOVUxMKQotICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgcm93IGJ1ZmZlciIpOwogICAgcG5nX3B0ci0+cm93X2J1ZlswXSA9IFBOR19GSUxURVJfVkFMVUVfTk9ORTsKIAogICAgLyogc2V0IHVwIGZpbHRlcmluZyBidWZmZXIsIGlmIHVzaW5nIHRoaXMgZmlsdGVyICovCkBAIC0xNjQ5LDggKzE2MTUsNiBAQAogICAgewogICAgICAgcG5nX3B0ci0+c3ViX3JvdyA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgKHBuZ19wdHItPnJvd2J5dGVzICsgMSkpOwotICAgICAgaWYgKHBuZ19wdHItPnN1Yl9yb3cgPT0gKHBuZ19ieXRlcClOVUxMKQotICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgc3ViIHJvdyBidWZmZXIiKTsKICAgICAgIHBuZ19wdHItPnN1Yl9yb3dbMF0gPSBQTkdfRklMVEVSX1ZBTFVFX1NVQjsKICAgIH0KIApAQCAtMTY2NSw4ICsxNjI5LDYgQEAKICAgICAgIHsKICAgICAgICAgIHBuZ19wdHItPnVwX3JvdyA9IChwbmdfYnl0ZXAgKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIChwbmdfcHRyLT5yb3dieXRlcyArIDEpKTsKLSAgICAgICAgIGlmIChwbmdfcHRyLT51cF9yb3cgPT0gKHBuZ19ieXRlcClOVUxMKQotICAgICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJDb3VsZCBub3QgYWxsb2NhdGUgdXAgcm93IGJ1ZmZlciIpOwogICAgICAgICAgcG5nX3B0ci0+dXBfcm93WzBdID0gUE5HX0ZJTFRFUl9WQUxVRV9VUDsKICAgICAgIH0KIApAQCAtMTY3NCw4ICsxNjM2LDYgQEAKICAgICAgIHsKICAgICAgICAgIHBuZ19wdHItPmF2Z19yb3cgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIChwbmdfcHRyLT5yb3dieXRlcyArIDEpKTsKLSAgICAgICAgIGlmIChwbmdfcHRyLT5hdmdfcm93ID09IChwbmdfYnl0ZXApTlVMTCkKLSAgICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIGF2ZyByb3cgYnVmZmVyIik7CiAgICAgICAgICBwbmdfcHRyLT5hdmdfcm93WzBdID0gUE5HX0ZJTFRFUl9WQUxVRV9BVkc7CiAgICAgICB9CiAKQEAgLTE2ODMsOCArMTY0Myw2IEBACiAgICAgICB7CiAgICAgICAgICBwbmdfcHRyLT5wYWV0aF9yb3cgPSAocG5nX2J5dGVwIClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAocG5nX3B0ci0+cm93Ynl0ZXMgKyAxKSk7Ci0gICAgICAgICBpZiAocG5nX3B0ci0+cGFldGhfcm93ID09IChwbmdfYnl0ZXApTlVMTCkKLSAgICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiQ291bGQgbm90IGFsbG9jYXRlIHBhZXRoIHJvdyBidWZmZXIiKTsKICAgICAgICAgIHBuZ19wdHItPnBhZXRoX3Jvd1swXSA9IFBOR19GSUxURVJfVkFMVUVfUEFFVEg7CiAgICAgICB9CiAgICB9CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9tc3ZjL1JFQURNRS50eHQgYi9wcm9qZWN0cy9tc3ZjL1JFQURNRS50eHQKaW5kZXggYmZiZmU5MC4uY2MxNGFiNSAxMDA2NDQKLS0tIGEvcHJvamVjdHMvbXN2Yy9SRUFETUUudHh0CisrKyBiL3Byb2plY3RzL21zdmMvUkVBRE1FLnR4dApAQCAtMSw1ICsxLDUgQEAKIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAgZm9yCi1saWJwbmcgMS4wLjExYmV0YTMgKEFwcmlsIDE1LCAyMDAxKSBhbmQgemxpYgorbGlicG5nIDEuMC4xMXJjMSAoQXByaWwgMjAsIDIwMDEpIGFuZCB6bGliCiAKIENvcHlyaWdodCAoQykgMjAwMCBTaW1vbi1QaWVycmUgQ2FkaWV1eAogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9tc3ZjL3BuZzMybXMuZGVmIGIvcHJvamVjdHMvbXN2Yy9wbmczMm1zLmRlZgppbmRleCAzMjAyNTU4Li5iNWM5YjhiIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9tc3ZjL3BuZzMybXMuZGVmCisrKyBiL3Byb2plY3RzL21zdmMvcG5nMzJtcy5kZWYKQEAgLTYsNyArNiw3IEBACiBERVNDUklQVElPTiAiUE5HIGltYWdlIGNvbXByZXNzaW9uIGxpYnJhcnkgZm9yIFdpbmRvd3MiCiAKIEVYUE9SVFMKLTtWZXJzaW9uIDEuMC4xMWJldGEzCis7VmVyc2lvbiAxLjAuMTFyYzEKICAgcG5nX2J1aWxkX2dyYXlzY2FsZV9wYWxldHRlICBAMQogICBwbmdfY2hlY2tfc2lnICAgICAgICBAMgogICBwbmdfY2h1bmtfZXJyb3IgICAgICBAMwpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvd2luY2UvUkVBRE1FRS5XQ0UgYi9wcm9qZWN0cy93aW5jZS9SRUFETUVFLldDRQppbmRleCA5OGI4MzNkLi44MGIzNTliIDEwMDY0NAotLS0gYS9wcm9qZWN0cy93aW5jZS9SRUFETUVFLldDRQorKysgYi9wcm9qZWN0cy93aW5jZS9SRUFETUVFLldDRQpAQCAtOCw5ICs4LDkgQEAKIAogSW50cm9kdWN0aW9uCiA9PT09PT09PT09PT0KLVRoaXMgaXMgbGlicG5nIDEuMC4xMWJldGEzIHBvcnRlZCB0byBXaW5kb3dzQ0UgMi4wIGFuZCAyLjExLgotbGlicG5nIDEuMC4xMWJldGEzIGlzIGEgUE5HIHJlZmVyZW5jZSBsaWJyYXJ5LgotU2VlIFJFQURNRSwgYSBkb2N1bWVudCBvZiBvcmlnaW5hbCBsaWJwbmcgMS4wLjExYmV0YTMuCitUaGlzIGlzIGxpYnBuZyAxLjAuMTFyYzEgcG9ydGVkIHRvIFdpbmRvd3NDRSAyLjAgYW5kIDIuMTEuCitsaWJwbmcgMS4wLjExcmMxIGlzIGEgUE5HIHJlZmVyZW5jZSBsaWJyYXJ5LgorU2VlIFJFQURNRSwgYSBkb2N1bWVudCBvZiBvcmlnaW5hbCBsaWJwbmcgMS4wLjExcmMxLgogCiB6bGliIGZvciBXaW5kb3dzQ0UKID09PT09PT09PT09PT09PT09PQpAQCAtMjMsNyArMjMsNyBAQAogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KIAotU2VlIFJFQURNRSBhbmQgTElDRU5TRSwgZG9jdW1lbnRzIG9mIG9yaWdpbmFsIGxpYnBuZyAxLjAuMTFiZXRhMywgZm9yIGNvbmRpdGlvbnMKK1NlZSBSRUFETUUgYW5kIExJQ0VOU0UsIGRvY3VtZW50cyBvZiBvcmlnaW5hbCBsaWJwbmcgMS4wLjExcmMxLCBmb3IgY29uZGl0aW9ucwogb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uCiAKIEZpbGVzCmRpZmYgLS1naXQgYS9wcm9qZWN0cy93aW5jZS9SRUFETUVKLldDRSBiL3Byb2plY3RzL3dpbmNlL1JFQURNRUouV0NFCmluZGV4IDgzZjI5NWIuLjhhMDkwZGUgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL3dpbmNlL1JFQURNRUouV0NFCisrKyBiL3Byb2plY3RzL3dpbmNlL1JFQURNRUouV0NFCkBAIC0yNCw3ICsyNCw3IEBACiCCyYLIgsGCvYKigqmCyILplO2KUYLJgsKCooLEguCBQY3sjtKBQZR6lXqO0oFBgruCzJG8l5iXcI7SiMiKT4LMkGyVqIFBCiCSY5HMgsmQ05RDgvCCxoLpi2CWsYLNgsiCooLggsyCxoK1gtyCt4FCCiAKLYK7gsyRvIFBgrGCzINcg3SDZ4NFg0aDQYLMl5iXcI/wjI+CyYLCgqKCxILNgUGMtJTFgsWCoILpIGxpYnBuZyAxLjAuMTFiZXRhM4LJCiuCu4LMkbyBQYKxgsyDXIN0g2eDRYNGg0GCzJeYl3CP8IyPgsmCwoKigsSCzYFBjLSUxYLFgqCC6SBsaWJwbmcgMS4wLjExcmMxgskKII+Ai5KCt4LpguCCzILGgrWC3IK3gUKP2oK1gq2CzYFBlXSRroLMIFJFQURNRSxMSUNFTlNFIILwgqiTx4Ldgq2CvoKzgqKBQgogCiCO+5hek+CXZQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvd2luY2UvcG5nMzJjZS5kZWYgYi9wcm9qZWN0cy93aW5jZS9wbmczMmNlLmRlZgppbmRleCA5ZWZmMTMzLi44M2NmMzNhIDEwMDY0NAotLS0gYS9wcm9qZWN0cy93aW5jZS9wbmczMmNlLmRlZgorKysgYi9wcm9qZWN0cy93aW5jZS9wbmczMmNlLmRlZgpAQCAtNSw3ICs1LDcgQEAKIExJQlJBUlkgbHBuZ2NlCiAKIEVYUE9SVFMKLTtWZXJzaW9uIDEuMC4xMWJldGEzCis7VmVyc2lvbiAxLjAuMTFyYzEKICAgcG5nX2J1aWxkX2dyYXlzY2FsZV9wYWxldHRlICBAMQogICBwbmdfY2hlY2tfc2lnICAgICAgICBAMgogICBwbmdfY2h1bmtfZXJyb3IgICAgICBAMwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5haXggYi9zY3JpcHRzL21ha2VmaWxlLmFpeAppbmRleCBhYTVlNTFhLi4zYmM4OGU0IDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmFpeAorKysgYi9zY3JpcHRzL21ha2VmaWxlLmFpeApAQCAtMTgsNyArMTgsNyBAQAogIyByZWFkIGxpYnBuZy50eHQgb3IgcG5nLmggdG8gc2VlIHdoeSBQTkdNQUogaXMgMi4gIFlvdSBzaG91bGQgbm90CiAjIGhhdmUgdG8gY2hhbmdlIGl0LgogUE5HTUFKID0gMgotUE5HTUlOID0gMS4wLjExYmV0YTMKK1BOR01JTiA9IDEuMC4xMXJjMQogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBwcmVmaXg9L3Vzci9sb2NhbApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5iZW9zIGIvc2NyaXB0cy9tYWtlZmlsZS5iZW9zCmluZGV4IGE3NjM2MWQuLmM4YWExNjggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuYmVvcworKysgYi9zY3JpcHRzL21ha2VmaWxlLmJlb3MKQEAgLTEzLDcgKzEzLDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMC4xMWJldGEzCitQTkdNSU4gPSAxLjAuMTFyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogQUxJR049CmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmN5Z3dpbiBiL3NjcmlwdHMvbWFrZWZpbGUuY3lnd2luCmluZGV4IDk2ZmRhMDIuLjc4NDE2YjUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuY3lnd2luCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuY3lnd2luCkBAIC0zOSw4ICszOSw4IEBACiAjIGhhdmUgdG8gY2hhbmdlIGl0LgogUE5HTUFKID0gMgogI1BOR0RMTCA9ICQxIyBtc3ZjCi1QTkdETEwgPSAyIyBjeWd3aW4gMS4wLjExYmV0YTMKLVBOR01JTiA9IDEuMC4xMWJldGEzCitQTkdETEwgPSAyIyBjeWd3aW4gMS4wLjExcmMxCitQTkdNSU4gPSAxLjAuMTFyYzEKIFBOR01JTl9CQVNFID0gMS4wLjExCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuZGVjIGIvc2NyaXB0cy9tYWtlZmlsZS5kZWMKaW5kZXggOTRlNTUwMC4uYTEyNGI3MiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5kZWMKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5kZWMKQEAgLTE3LDcgKzE3LDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMC4xMWJldGEzCitQTkdNSU4gPSAxLjAuMTFyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogQ0M9Y2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuZ2NtbXggYi9zY3JpcHRzL21ha2VmaWxlLmdjbW14CmluZGV4IDczYWFhYWEuLmE1YWVhM2IgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuZ2NtbXgKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5nY21teApAQCAtNTEsNyArNTEsNyBAQAogIyByZWFkIGxpYnBuZy50eHQgb3IgcG5nLmggdG8gc2VlIHdoeSBQTkdNQUogaXMgMi4gIFlvdSBzaG91bGQgbm90CiAjIGhhdmUgdG8gY2hhbmdlIGl0LgogUE5HTUFKID0gMgotUE5HTUlOID0gMS4wLjExYmV0YTMKK1BOR01JTiA9IDEuMC4xMXJjMQogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBJTkNQQVRIPSQocHJlZml4KS9pbmNsdWRlCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmhwZ2NjIGIvc2NyaXB0cy9tYWtlZmlsZS5ocGdjYwppbmRleCBhM2QwMWNmLi5kMTE5MmRmIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmhwZ2NjCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuaHBnY2MKQEAgLTM0LDcgKzM0LDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMC4xMWJldGEzCitQTkdNSU4gPSAxLjAuMTFyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogSU5DUEFUSD0kKHByZWZpeCkvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5ocHV4IGIvc2NyaXB0cy9tYWtlZmlsZS5ocHV4CmluZGV4IDIzNWQzZTkuLjdiNTg1MTMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuaHB1eAorKysgYi9zY3JpcHRzL21ha2VmaWxlLmhwdXgKQEAgLTE5LDcgKzE5LDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMC4xMWJldGEzCitQTkdNSU4gPSAxLjAuMTFyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyB3aGVyZSBtYWtlIGluc3RhbGwgcHV0cyBsaWJwbmcuYSBhbmQgcG5nLmgKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUubGludXggYi9zY3JpcHRzL21ha2VmaWxlLmxpbnV4CmluZGV4IGQxMzgyOTAuLjBkNTYxZTcgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUubGludXgKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5saW51eApAQCAtMzQsNyArMzQsNyBAQAogIyByZWFkIGxpYnBuZy50eHQgb3IgcG5nLmggdG8gc2VlIHdoeSBQTkdNQUogaXMgMi4gIFlvdSBzaG91bGQgbm90CiAjIGhhdmUgdG8gY2hhbmdlIGl0LgogUE5HTUFKID0gMgotUE5HTUlOID0gMS4wLjExYmV0YTMKK1BOR01JTiA9IDEuMC4xMXJjMQogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBJTkNQQVRIPSQocHJlZml4KS9pbmNsdWRlCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLm5ldGJzZCBiL3NjcmlwdHMvbWFrZWZpbGUubmV0YnNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNTEyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL21ha2VmaWxlLm5ldGJzZApAQCAtMCwwICsxLDg5IEBACisjIG1ha2VmaWxlIGZvciBsaWJwbmcgb24gTmV0QlNECisjIENvcHlyaWdodCAoQykgMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KKyMgQ29weXJpZ2h0IChDKSAxOTk1IEd1eSBFcmljIFNjaGFsbmF0LCBHcm91cCA0MiwgSW5jLgorIyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKKworIyB3aGVyZSBtYWtlIGluc3RhbGwgcHV0cyBsaWJwbmcuYSBhbmQgcG5nLmgKKyMgcGtnc3JjIHdpbGwgd2FudCBwcmVmaXg9JHtQUkVGSVh9CitwcmVmaXg9L3Vzci9sb2NhbAorSU5DUEFUSD0kKHByZWZpeCkvaW5jbHVkZQorTElCUEFUSD0kKHByZWZpeCkvbGliCisKKyMgVGhlIHpsaWIgbGlicmFyeSBhbmQgaW5jbHVkZSBmaWxlcyBhcmUgcGFydCBvZiB0aGUgc3RhbmRhcmQgc3lzdGVtCisKKyMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAorIyBoYXZlIHRvIGNoYW5nZSBpdC4KK1BOR01BSiA9IDIKK1BOR01JTiA9IDEuMC4xMXJjMQorUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQorCitDQz1jYworIyBZb3UgY2FuIGRlZmluZSBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEIGlmIGJ1aWxkaW5nIGZvciBJbnRlbCB4ODYKK0NGTEFHUz0tTzIgLURQTkdfVVNFX1BOR0dDQ1JEICMgLURQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEICAtZyAtRFBOR19ERUJVRz0xCitMREZMQUdTPS1XbCwtUiR7TElCUEFUSH0gLUwuIC1scG5nIC1seiAtbG0KKworI1JBTkxJQj1lY2hvCitSQU5MSUI9cmFubGliCisKK09CSlMgPSBwbmdnY2NyZC5vIHBuZy5vIHBuZ3NldC5vIHBuZ2dldC5vIHBuZ3J1dGlsLm8gcG5ndHJhbnMubyBwbmd3dXRpbC5vIFwKKwlwbmdyZWFkLm8gcG5ncmlvLm8gcG5nd2lvLm8gcG5nd3JpdGUubyBwbmdydHJhbi5vIFwKKwlwbmd3dHJhbi5vIHBuZ21lbS5vIHBuZ2Vycm9yLm8gcG5ncHJlYWQubworCithbGw6IGxpYnBuZy5zbyBsaWJwbmcuYSBwbmd0ZXN0CisKK2xpYnBuZy5hOiAkKE9CSlMpCisJYXIgcmMgJEAgICQoT0JKUykKKwkkKFJBTkxJQikgJEAKKworbGlicG5nLnNvOiBsaWJwbmcuc28uJChQTkdNQUopCisJbG4gLWYgLXMgbGlicG5nLnNvLiQoUE5HTUFKKSBsaWJwbmcuc28KKworbGlicG5nLnNvLiQoUE5HTUFKKTogbGlicG5nLnNvLiQoUE5HVkVSKQorCWxuIC1mIC1zIGxpYnBuZy5zby4kKFBOR1ZFUikgbGlicG5nLnNvLiQoUE5HTUFKKQorCitsaWJwbmcuc28uJChQTkdWRVIpOiAkKE9CSlMpCisJJChDQykgLXNoYXJlZCAtbyAkQCAkKE9CSlMpIC1MJChaTElCTElCKSAtbHogLWxtCisKK3BuZ3Rlc3Q6IHBuZ3Rlc3QubyBsaWJwbmcuYQorCSQoQ0MpIC1vIHBuZ3Rlc3QgJChDRkxBR1MpIHBuZ3Rlc3QubyAkKExERkxBR1MpCisKK3Rlc3Q6IHBuZ3Rlc3QKKwkuL3BuZ3Rlc3QKKworaW5zdGFsbDogbGlicG5nLmEgbGlicG5nLnNvLiQoUE5HVkVSKQorCS1AbWtkaXIgJChJTkNQQVRIKQorCS1AbWtkaXIgJChMSUJQQVRIKQorCWNwIHBuZy5oICQoSU5DUEFUSCkKKwljcCBwbmdjb25mLmggJChJTkNQQVRIKQorCWNobW9kIDY0NCAkKElOQ1BBVEgpL3BuZy5oCisJY2htb2QgNjQ0ICQoSU5DUEFUSCkvcG5nY29uZi5oCisJY3AgbGlicG5nLmEgJChMSUJQQVRIKQorCWNwIGxpYnBuZy5zby4kKFBOR1ZFUikgJChMSUJQQVRIKQorCWNobW9kIDY0NCAkKExJQlBBVEgpL2xpYnBuZy5hCisJY2htb2QgNjQ0ICQoTElCUEFUSCkvbGlicG5nLnNvLiQoUE5HVkVSKQorCS1AL2Jpbi9ybSAtZiAkKExJQlBBVEgpL2xpYnBuZy5zby4kKFBOR01BSikgJChMSUJQQVRIKS9saWJwbmcuc28KKwkoY2QgJChMSUJQQVRIKTsgbG4gLWYgLXMgbGlicG5nLnNvLiQoUE5HVkVSKSBsaWJwbmcuc28uJChQTkdNQUopOyBcCisJIGxuIC1mIC1zIGxpYnBuZy5zby4kKFBOR01BSikgbGlicG5nLnNvKQorCitjbGVhbjoKKwlybSAtZiAqLm8gbGlicG5nLmEgcG5ndGVzdCBwbmdvdXQucG5nIGxpYnBuZy5zbyoKKworIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgorCitwbmdnY2NyZC5vOiBwbmcuaCBwbmdjb25mLmgKK3BuZy5vOiBwbmcuaCBwbmdjb25mLmgKK3BuZ2Vycm9yLm86IHBuZy5oIHBuZ2NvbmYuaAorcG5ncmlvLm86IHBuZy5oIHBuZ2NvbmYuaAorcG5nd2lvLm86IHBuZy5oIHBuZ2NvbmYuaAorcG5nbWVtLm86IHBuZy5oIHBuZ2NvbmYuaAorcG5nc2V0Lm86IHBuZy5oIHBuZ2NvbmYuaAorcG5nZ2V0Lm86IHBuZy5oIHBuZ2NvbmYuaAorcG5ncmVhZC5vOiBwbmcuaCBwbmdjb25mLmgKK3BuZ3J0cmFuLm86IHBuZy5oIHBuZ2NvbmYuaAorcG5ncnV0aWwubzogcG5nLmggcG5nY29uZi5oCitwbmd0ZXN0Lm86IHBuZy5oIHBuZ2NvbmYuaAorcG5ndHJhbnMubzogcG5nLmggcG5nY29uZi5oCitwbmd3cml0ZS5vOiBwbmcuaCBwbmdjb25mLmgKK3BuZ3d0cmFuLm86IHBuZy5oIHBuZ2NvbmYuaAorcG5nd3V0aWwubzogcG5nLmggcG5nY29uZi5oCitwbmdwcmVhZC5vOiBwbmcuaCBwbmdjb25mLmgKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc2NvIGIvc2NyaXB0cy9tYWtlZmlsZS5zY28KaW5kZXggZmZhMjRkYS4uOWE4NjYxZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5zY28KKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zY28KQEAgLTI1LDcgKzI1LDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMC4xMWJldGEzCitQTkdNSU4gPSAxLjAuMTFyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogSU5DUEFUSD0kKHByZWZpeCkvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5zZ2djYyBiL3NjcmlwdHMvbWFrZWZpbGUuc2dnY2MKaW5kZXggOTI1NmZhYi4uYmFkZGI1NiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5zZ2djYworKysgYi9zY3JpcHRzL21ha2VmaWxlLnNnZ2NjCkBAIC0xOSw4ICsxOSw4IEBACiBMREZMQUdTPS1MLiAtTCQoWkxJQkxJQikgLWxwbmcgLWx6IC1sbQogTERTSEFSRUQ9Z2NjIC1zaGFyZWQKIAotVkVSPTEuMC4xMWJldGEzCi1MSUJTPWxpYnBuZy5zby4xLjAuMTFiZXRhMworVkVSPTEuMC4xMXJjMQorTElCUz1saWJwbmcuc28uMS4wLjExcmMxCiBTSEFSRURMSUI9bGlicG5nLnNvCiBsaWJkaXI9JChwcmVmaXgpL2xpYjMyCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc2dpIGIvc2NyaXB0cy9tYWtlZmlsZS5zZ2kKaW5kZXggODJhMzFjNC4uMzUwNGViNSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5zZ2kKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zZ2kKQEAgLTI1LDcgKzI1LDcgQEAKIExERkxBR1M9LUwuIC1MJChaTElCTElCKSAtbHBuZyAtbHogLWxtCiBMRFNIQVJFRD1jYyAtc2hhcmVkCiAKLVZFUj0xLjAuMTFiZXRhMworVkVSPTEuMC4xMXJjMQogU09OVU09MgogU0hBUkVETElCPWxpYnBuZy5zbwogbGliZGlyPSQocHJlZml4KQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5zb2xhcmlzIGIvc2NyaXB0cy9tYWtlZmlsZS5zb2xhcmlzCmluZGV4IGYwMzA0MWMuLjhkZTZmZDYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc29sYXJpcworKysgYi9zY3JpcHRzL21ha2VmaWxlLnNvbGFyaXMKQEAgLTMxLDcgKzMxLDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMC4xMWJldGEzCitQTkdNSU4gPSAxLjAuMTFyYzEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogSU5DUEFUSD0kKHByZWZpeCkvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wbmdkZWYucGFzIGIvc2NyaXB0cy9wbmdkZWYucGFzCmluZGV4IDExYzRjOTIuLjUyMmIxNjUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcG5nZGVmLnBhcworKysgYi9zY3JpcHRzL3BuZ2RlZi5wYXMKQEAgLTcsNyArNyw3IEBACiBpbnRlcmZhY2UKIAogY29uc3QKLSAgUE5HX0xJQlBOR19WRVJfU1RSSU5HID0gJzEuMC4xMWJldGEzJzsKKyAgUE5HX0xJQlBOR19WRVJfU1RSSU5HID0gJzEuMC4xMXJjMSc7CiAgIFBOR19MSUJQTkdfVkVSICAgICAgICA9ICAxMDAxMTsKIAogdHlwZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wbmdvczIuZGVmIGIvc2NyaXB0cy9wbmdvczIuZGVmCmluZGV4IDZkN2EyOTkuLmM4ODViYmQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcG5nb3MyLmRlZgorKysgYi9zY3JpcHRzL3BuZ29zMi5kZWYKQEAgLTIsNyArMiw3IEBACiA7IFBORy5MSUIgbW9kdWxlIGRlZmluaXRpb24gZmlsZSBmb3IgT1MvMgogOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotOyBWZXJzaW9uIDEuMC4xMWJldGEzCis7IFZlcnNpb24gMS4wLjExcmMxCiAKIExJQlJBUlkJCVBORwogREVTQ1JJUFRJT04JIlBORyBpbWFnZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGZvciBPUy8yIgo=