ZGlmZiAtLWdpdCBhL3N0ZC9saXZpbmcvbGlmZS5jIGIvc3RkL2xpdmluZy9saWZlLmMKaW5kZXggNGU4NDkwYS4uMmQ4NmJiNSAxMDA2NDQKLS0tIGEvc3RkL2xpdmluZy9saWZlLmMKKysrIGIvc3RkL2xpdmluZy9saWZlLmMKQEAgLTEyODgsNyArMTI4OCw3IEBACiAgIGlmIChRdWVyeVByb3AoUF9HSE9TVCkpCiAgICAgcmV0dXJuIFF1ZXJ5KFBfQUxDT0hPTCwgRl9WQUxVRSk7CiAKLSAgLy8gbnVyIMRuZGVydW5nZW4gdW5kIFdlcnRlID49MCB3ZXJkZW4gZ2VzZXR6dC4uLgorICAvLyBudXIgQWVuZGVydW5nZW4gdW5kIFdlcnRlID49MCB3ZXJkZW4gZ2VzZXR6dC4uLgogICBuID0gbiA8IDAgPyAwIDogbjsKICAgaW50IG9sZCA9IFF1ZXJ5KFBfQUxDT0hPTCwgRl9WQUxVRSk7CiAgIGlmICggb2xkID09IG4pCkBAIC0xMzI0LDcgKzEzMjQsNyBAQAogICBpZiAoUXVlcnlQcm9wKFBfR0hPU1QpKQogICAgIHJldHVybiBRdWVyeShQX0RSSU5LLCBGX1ZBTFVFKTsKIAotICAvLyBudXIgxG5kZXJ1bmdlbiB1bmQgV2VydGUgPj0wIHdlcmRlbiBnZXNldHp0Li4uCisgIC8vIG51ciBBZW5kZXJ1bmdlbiB1bmQgV2VydGUgPj0wIHdlcmRlbiBnZXNldHp0Li4uCiAgIG4gPSBuIDwgMCA/IDAgOiBuOwogICBpbnQgb2xkID0gUXVlcnkoUF9EUklOSywgRl9WQUxVRSk7CiAgIGlmICggb2xkID09IG4pCkBAIC0xMzYwLDcgKzEzNjAsNyBAQAogICBpZiAoUXVlcnlQcm9wKFBfR0hPU1QpKQogICAgIHJldHVybiBRdWVyeShQX0ZPT0QsIEZfVkFMVUUpOwogCi0gIC8vIG51ciDEbmRlcnVuZ2VuIHVuZCBXZXJ0ZSA+PTAgd2VyZGVuIGdlc2V0enQuLi4KKyAgLy8gbnVyIEFlbmRlcnVuZ2VuIHVuZCBXZXJ0ZSA+PTAgd2VyZGVuIGdlc2V0enQuLi4KICAgbiA9IG4gPCAwID8gMCA6IG47CiAgIGludCBvbGQgPSBRdWVyeShQX0ZPT0QsIEZfVkFMVUUpOwogICBpZiAoIG9sZCA9PSBuKQpkaWZmIC0tZ2l0IGEvc3RkL3BsYXllci9jb21iYXQuYyBiL3N0ZC9wbGF5ZXIvY29tYmF0LmMKaW5kZXggYWJiNWExYi4uNjRkOTQ1YyAxMDA2NDQKLS0tIGEvc3RkL3BsYXllci9jb21iYXQuYworKysgYi9zdGQvcGxheWVyL2NvbWJhdC5jCkBAIC0yMDQsNyArMjA0LDcgQEAKICAgcmV0dXJuIHJlczsKIH0KIAotLy8gU3BpZWxlciBrb2VubmVuIGFscyBHZWlzdCBuaWNodCBr5G1wZmVuCisvLyBTcGllbGVyIGtvZW5uZW4gYWxzIEdlaXN0IG5pY2h0IGthZW1wZmVuCiAvLyBUT0RPOiBwcnVlZmVuLCBvYiBkYXMgU2V0emVuIHVuZCBMb2VzY2hlbiBkZXIgUHJvcCBpbiBzZXRfZ2hvc3QoKSBuaWNodAogLy8gYXVjaCBhdXNyZWljaGVuIHd1ZXJkZS4gSW4gZGVtIEZhbGwgbXVlc3N0ZSBtYW4gYWJlciBQX05PX0FUVEFDSyBhdWNoCiAvLyBzcGVpY2hlcm4sIGRhIFBfR0hPU1QgZ2VzcGVpY2hlcnQgd2lyZC4uLgpkaWZmIC0tZ2l0IGEvc3RkL3BsYXllci9za2lsbHMuYyBiL3N0ZC9wbGF5ZXIvc2tpbGxzLmMKaW5kZXggOGY2YjhmMC4uMDM3NTVkYSAxMDA2NDQKLS0tIGEvc3RkL3BsYXllci9za2lsbHMuYworKysgYi9zdGQvcGxheWVyL3NraWxscy5jCkBAIC0yMzYsOCArMjM2LDggQEAKICAgICBsb2dfZmlsZSgiV0VBUE9OX1NLSUxMUyIsIHNwcmludGYoIiVzOiBadSBob2hlciBTY2hhZGVuIHZvbjogIgogICAgICsiVE86ICVPLCBUSTogJU8sIFBPOiAlTywgdmFsOiAlZCwgQV9ERVg6ICVkLCBBX1NUUjogJWQsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyJQX1dFQVBPTjogJU8sIFBfV0M6ICVkXG4iLCBkdGltZSh0aW1lKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzX29iamVjdCgpLCB0aGlzX2ludGVyYWN0aXZlKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19vYmplY3QoKSwgdmFsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc19vYmplY3QoKSwgdGhpc19pbnRlcmFjdGl2ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19vYmplY3QoKSwgdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWVyeUF0dHJpYnV0ZShBX0RFWCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5QXR0cmlidXRlKEFfU1RSKSwgc2luZm9bUF9XRUFQT05dLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5mb1tQX1dFQVBPTl0tPlF1ZXJ5UHJvcChQX1dDKSkpOwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAgIH0KIAogICAvKgotICAgIERlciB6dXPkdHpsaWNoZSBTY2hhZGVuIGRlciBhbGxnZW1laW5lbiBXYWZmZW5za2lsbHMgYmVyZWNobmV0CisgICAgRGVyIHp1c2FldHpsaWNoZSBTY2hhZGVuIGRlciBhbGxnZW1laW5lbiBXYWZmZW5za2lsbHMgYmVyZWNobmV0CiAgICAgc2ljaCB3aWUgZm9sZ3Q6IAogCiAgICAgc2luZm9bU0lfU0tJTExBQklMSVRZKSogKFBfV0MgKiAoIFggKSAvIDgwMCkgLyBNQVhfQUJJTElUWQpkaWZmIC0tZ2l0IGEvc3RkL3NoZWxscy9tYWdpZXIvdXBkLmMgYi9zdGQvc2hlbGxzL21hZ2llci91cGQuYwppbmRleCBmMDllYTlhLi45YzlhZjVmIDEwMDY0NAotLS0gYS9zdGQvc2hlbGxzL21hZ2llci91cGQuYworKysgYi9zdGQvc2hlbGxzL21hZ2llci91cGQuYwpAQCAtMTE2LDggKzExNiw4IEBACiAgIHsKICAgICAvLyBTY2hyZWlicmVjaHRlIG51ciBwcnVlZmVuLCB3ZW5uIGVjaHQgYWt0dWFsaXNpZXJ0IHdlcmRlbiBzb2xsLgogICAgIGlmKCFkdW1teSAmJiAhTUFZX1dSSVRFKGZpbGUpKQotICAgICAgcmV0dXJuIChwcmludGYoInVwZDqgJXM6IEtlaW5lIFNjaHJlaWJyZWNodGUhXG4iLGZpbGUpLCAtMSk7Ci0gICAgaWYoIU1BWV9SRUFEKGZpbGUpKSAKKyAgICAgIHJldHVybiAocHJpbnRmKCJ1cGQ6ICVzOiBLZWluZSBTY2hyZWlicmVjaHRlIVxuIixmaWxlKSwgLTEpOworICAgIGlmKCFNQVlfUkVBRChmaWxlKSkKICAgICAgIHJldHVybiAocHJpbnRmKCJ1cGQ6ICVzOiBLZWluZSBMZXNlcmVjaHRlIVxuIiwgZmlsZSksIC0xKTsKICAgfQogICBpZiAoZHVtbXkpIHJldHVybiAxOwpkaWZmIC0tZ2l0IGEvc3RkL3RoaW5nL2NvbW1hbmRzLmMgYi9zdGQvdGhpbmcvY29tbWFuZHMuYwppbmRleCA4ZjkzNDQ5Li43MmY1MGNkIDEwMDY0NAotLS0gYS9zdGQvdGhpbmcvY29tbWFuZHMuYworKysgYi9zdGQvdGhpbmcvY29tbWFuZHMuYwpAQCAtMzM2LDE5ICszMzYsMTkgQEAKICAgICB3aGlsZShqLS0pIHsKICAgICAgaW50IGs7CiAgICAgIC8vIERCRyhydWxlW2pdKTsKLSAgICAJLy8gUmVnZWxuIG5pY2h0IGzDtnNjaGVuIHVuZCBSZWdlbD8KKyAgICAJLy8gUmVnZWxuIG5pY2h0IGxvZXNjaGVuIHVuZCBSZWdlbD8KICAgICAgaWYoIShkZWxfbm9ydWxlICYmIHBvaW50ZXJwKHJ1bGVbal0pKSAmJgotICAgICAgICAvLyBudXIgYmVzdGltbXRlIElEIGzDtnNjaGVuIHVuZCBJRCBwYXNzdCBuaWNodD8KKyAgICAgICAgLy8gbnVyIGJlc3RpbW10ZSBJRCBsb2VzY2hlbiB1bmQgSUQgcGFzc3QgbmljaHQ/CiAgICAgICAgICEob25seWlkICYmICghcG9pbnRlcnAoaWRzKSB8fCBzaXplb2YoaWRzKTw9aiB8fCBpZHNbal0hPW9ubHlpZCkpICYmCi0gICAgICAgIC8vIEzDtnNjaHJlZ2VsIGV4aXN0aWVydCB1bmQgcGFzc3QgbmljaHQgYXVmIFJlZ2VsPworICAgICAgICAvLyBMb2VzY2hyZWdlbCBleGlzdGllcnQgdW5kIHBhc3N0IG5pY2h0IGF1ZiBSZWdlbD8KICAgICAgICAgIShkZWxydWxlICYmIChrPXNpemVvZihydWxlW2pdKSkhPXNpemVvZihkZWxydWxlKSkpIHsKLSAgICAgIC8vIHBhcnRpZWxsZXMgVGVzdGVuIGVpbmVyIEzDtnNjaHJlZ2VsIC4uLgorICAgICAgLy8gcGFydGllbGxlcyBUZXN0ZW4gZWluZXIgTG9lc2NocmVnZWwgLi4uCiAgICAgICBpZihkZWxydWxlKSB7CiAgICAgICAgd2hpbGUoay0tKQogICAgICAgICBpZighc2l6ZW9mKHJ1bGVbal1ba10mZGVscnVsZVtrXSkpIGJyZWFrOwogICAgICAgIGlmKGs+PTApIGNvbnRpbnVlOwogICAgICAgfQotICAgICAgLy8gYWxsZXMga29ycmVrdDogTMO2c2NoZW4hCisgICAgICAvLyBhbGxlcyBrb3JyZWt0OiBMb2VzY2hlbiEKICAgICAgIC8vIChBcnJheWJlcmVpY2ggZHVyY2ggbGVlcmVzIEFycmF5IGxvZXNjaGVuKQogICAgICAgZmxhZ1tqLi5qXSAgICA9IGFsbG9jYXRlKDApOwogICAgICAgZnVuW2ouLmpdICAgICA9IGFsbG9jYXRlKDApOwo=