ZGlmZiAtLWdpdCBhL3NyYy9lZGl0LmMgYi9zcmMvZWRpdC5jCmluZGV4IDQ3OTMyYzkuLjExNjRlMjAgMTAwNjQ0Ci0tLSBhL3NyYy9lZGl0LmMKKysrIGIvc3JjL2VkaXQuYwpAQCAtNjE2Niw2ICs2MTY2LDkgQEAKIAkJJiYgKCFoYXNfbWJ5dGUgfHwgTUJfQllURTJMRU5fQ0hFQ0soYykgPT0gMSkKICNlbmRpZgogCQkmJiBpIDwgSU5QVVRfQlVGTEVOCisjIGlmZGVmIEZFQVRfRktNQVAKKwkJJiYgIShwX2ZrbWFwICYmIEtleVR5cGVkKSAvKiBGYXJzaSBtb2RlIG1hcHBpbmcgbW92ZXMgY3Vyc29yICovCisjIGVuZGlmCiAJCSYmICh0ZXh0d2lkdGggPT0gMAogCQkgICAgfHwgKHZpcnRjb2wgKz0gYnl0ZTJjZWxscyhidWZbaSAtIDFdKSkgPCAoY29sbnJfVCl0ZXh0d2lkdGgpCiAJCSYmICEoIW5vX2FiYnIgJiYgIXZpbV9pc3dvcmRjKGMpICYmIHZpbV9pc3dvcmRjKGJ1ZltpIC0gMV0pKSkKQEAgLTYxNzQsMTAgKzYxNzcsNiBAQAogCSAgICBjID0gdmdldGMoKTsKIAkgICAgaWYgKHBfaGttYXAgJiYgS2V5VHlwZWQpCiAJCWMgPSBoa21hcChjKTsJCSAgICAvKiBIZWJyZXcgbW9kZSBtYXBwaW5nICovCi0jIGlmZGVmIEZFQVRfRktNQVAKLQkgICAgaWYgKHBfZmttYXAgJiYgS2V5VHlwZWQpCi0JCWMgPSBma21hcChjKTsJCSAgICAvKiBGYXJzaSBtb2RlIG1hcHBpbmcgKi8KLSMgZW5kaWYKIAkgICAgYnVmW2krK10gPSBjOwogI2Vsc2UKIAkgICAgYnVmW2krK10gPSB2Z2V0YygpOwpkaWZmIC0tZ2l0IGEvc3JjL2ZhcnNpLmMgYi9zcmMvZmFyc2kuYwppbmRleCAxYzVkMmZkLi42ODJkZDQ2IDEwMDY0NAotLS0gYS9zcmMvZmFyc2kuYworKysgYi9zcmMvZmFyc2kuYwpAQCAtMTUsMzAgKzE1LDExIEBACiAKICNpZiBkZWZpbmVkKEZFQVRfRktNQVApIHx8IGRlZmluZWQoUFJPVE8pCiAKLXN0YXRpYyBpbnQgdG9GX1hvcl9YXyhpbnQgYyk7Ci1zdGF0aWMgaW50IEZfaXNfVHlFKGludCBjKTsKLXN0YXRpYyBpbnQgRl9pc19UeUNfVHlEKGludCBjKTsKIHN0YXRpYyBpbnQgRl9pc19UeUJfVHlDX1R5RChpbnQgc3JjLCBpbnQgb2Zmc2V0KTsKLXN0YXRpYyBpbnQgdG9GX1R5QihpbnQgYyk7Ci1zdGF0aWMgdm9pZCBwdXRfY3Vycl9hbmRfbF90b19YKGludCBjKTsKLXN0YXRpYyB2b2lkIHB1dF9hbmRfcmVkbyhpbnQgYyk7Ci1zdGF0aWMgdm9pZCBjaGdfY190b1hfb3JYKHZvaWQpOwotc3RhdGljIHZvaWQgY2hnX2NfdG9fWF9vclhfKHZvaWQpOwotc3RhdGljIHZvaWQgY2hnX2NfdG9fWF9vcl9YKHZvaWQpOwotc3RhdGljIHZvaWQgY2hnX2xfdG9fWF9vclhfKHZvaWQpOwotc3RhdGljIHZvaWQgY2hnX2xfdG9Yb3JfWCh2b2lkKTsKLXN0YXRpYyB2b2lkIGNoZ19yX3RvX1hvcl9YXyh2b2lkKTsKLXN0YXRpYyBpbnQgdG9GX2xlYWRpbmcoaW50IGMpOwotc3RhdGljIGludCB0b0ZfUmpvaW4oaW50IGMpOwotc3RhdGljIGludCBjYW5GX0xqb2luKGludCBjKTsKLXN0YXRpYyBpbnQgY2FuRl9Sam9pbihpbnQgYyk7Ci1zdGF0aWMgaW50IEZfaXN0ZXJtKGludCBjKTsKLXN0YXRpYyBpbnQgdG9GX2VuZGluZyhpbnQgYyk7Ci1zdGF0aWMgdm9pZCBscnN3YXBidWYoY2hhcl91ICpidWYsIGludCBsZW4pOwogCiAvKgogICogQ29udmVydCB0aGUgZ2l2ZW4gRmFyc2kgY2hhcmFjdGVyIGludG8gYSBfWCBvciBfWF8gdHlwZQotKi8KKyAqLwogICAgIHN0YXRpYyBpbnQKIHRvRl9Yb3JfWF8oaW50IGMpCiB7CkBAIC0xMDUsNyArODYsNyBAQAogCiAvKgogICogQ29udmVydCB0aGUgZ2l2ZW4gRmFyc2kgY2hhcmFjdGVyIGludG8gRmFyc2kgY2FwaXRhbCBjaGFyYWN0ZXIuCi0qLworICovCiAgICAgc3RhdGljIGludAogdG9GX1R5QShpbnQgYykKIHsKQEAgLTE1Niw3ICsxMzcsNyBAQAogICogSXMgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yK29mZnNldCBpbiB0aGUgZ2l2ZW4gYnVmZmVyIGEgam9pbiB0eXBlLgogICogVGhhdCBpcyBhIGNoYXJhY3RlciB0aGF0IGlzIGNvbWJpbmVkIHdpdGggdGhlIG90aGVycy4KICAqIE5vdGU6IHRoZSBvZmZzZXQgaXMgdXNlZCBvbmx5IGZvciBjb21tYW5kIGxpbmUgYnVmZmVyLgotKi8KKyAqLwogICAgIHN0YXRpYyBpbnQKIEZfaXNfVHlCX1R5Q19UeUQoaW50IHNyYywgaW50IG9mZnNldCkKIHsKQEAgLTIwNyw3ICsxODgsNyBAQAogCiAvKgogICogSXMgdGhlIEZhcnNpIGNoYXJhY3RlciBvbmUgb2YgdGhlIHRlcm1pbmF0aW5nIG9ubHkgdHlwZS4KLSovCisgKi8KICAgICBzdGF0aWMgaW50CiBGX2lzX1R5RShpbnQgYykKIHsKQEAgLTIzMCw3ICsyMTEsNyBAQAogCiAvKgogICogSXMgdGhlIEZhcnNpIGNoYXJhY3RlciBvbmUgb2YgdGhlIG5vbmUgbGVhZGluZyB0eXBlLgotKi8KKyAqLwogICAgIHN0YXRpYyBpbnQKIEZfaXNfVHlDX1R5RChpbnQgYykKIHsKQEAgLTI1NCw3ICsyMzUsNyBAQAogCiAvKgogICogQ29udmVydCBhIG5vbmUgbGVhZGluZyBGYXJzaSBjaGFyIGludG8gYSBsZWFkaW5nIHR5cGUuCi0qLworICovCiAgICAgc3RhdGljIGludAogdG9GX1R5QihpbnQgYykKIHsKQEAgLTI3NSw5ICsyNTYsMTggQEAKICAgICByZXR1cm4gYzsKIH0KIAorCisgICAgc3RhdGljIHZvaWQKK3B1dF9hbmRfcmVkbyhpbnQgYykKK3sKKyAgICBwY2hhcl9jdXJzb3IoYyk7CisgICAgQXBwZW5kQ2hhclRvUmVkb2J1ZmYoS19CUyk7CisgICAgQXBwZW5kQ2hhclRvUmVkb2J1ZmYoYyk7Cit9CisKIC8qCiAgKiBPdmVyd3JpdGUgdGhlIGN1cnJlbnQgcmVkbyBhbmQgY3Vyc29yIGNoYXJhY3RlcnMgKyBsZWZ0IGFkanVzdC4KLSovCisgKi8KICAgICBzdGF0aWMgdm9pZAogcHV0X2N1cnJfYW5kX2xfdG9fWChpbnQgYykKIHsKQEAgLTMxMiwxNyArMzAyLDkgQEAKICAgICBwdXRfYW5kX3JlZG8oYyk7CiB9CiAKLSAgICBzdGF0aWMgdm9pZAotcHV0X2FuZF9yZWRvKGludCBjKQotewotICAgIHBjaGFyX2N1cnNvcihjKTsKLSAgICBBcHBlbmRDaGFyVG9SZWRvYnVmZihLX0JTKTsKLSAgICBBcHBlbmRDaGFyVG9SZWRvYnVmZihjKTsKLX0KLQogLyoKICAqIENoYW5nZSB0aGUgY2hhci4gdW5kZXIgdGhlIGN1cnNvciB0byBhIFhfIG9yIFggdHlwZQotKi8KKyAqLwogICAgIHN0YXRpYyB2b2lkCiBjaGdfY190b1hfb3JYKHZvaWQpCiB7CkBAIC00NDYsOCArNDI4LDcgQEAKIAogLyoKICAqIENoYW5nZSB0aGUgY2hhci4gdW5kZXIgdGhlIGN1cnNvciB0byBhIF9YXyBvciBYXyB0eXBlCi0qLwotCisgKi8KICAgICBzdGF0aWMgdm9pZAogY2hnX2NfdG9fWF9vclhfKHZvaWQpCiB7CkBAIC00OTgsOSArNDc5LDkgQEAKIAogLyoKICAqIENoYW5nZSB0aGUgY2hhci4gdW5kZXIgdGhlIGN1cnNvciB0byBhIF9YXyBvciBfWCB0eXBlCi0qLworICovCiAgICAgc3RhdGljIHZvaWQKLWNoZ19jX3RvX1hfb3JfWCAodm9pZCkKK2NoZ19jX3RvX1hfb3JfWCh2b2lkKQogewogICAgIGludAl0ZW1wYzsKIApAQCAtNTI5LDcgKzUxMCw3IEBACiAKIC8qCiAgKiBDaGFuZ2UgdGhlIGNoYXJhY3RlciBsZWZ0IHRvIHRoZSBjdXJzb3IgdG8gYSBfWF8gb3IgWF8gdHlwZQotKi8KKyAqLwogICAgIHN0YXRpYyB2b2lkCiBjaGdfbF90b19YX29yWF8odm9pZCkKIHsKQEAgLTU5NywxMCArNTc4LDkgQEAKIAogLyoKICAqIENoYW5nZSB0aGUgY2hhcmFjdGVyIGxlZnQgdG8gdGhlIGN1cnNvciB0byBhIFggb3IgX1ggdHlwZQotKi8KLQorICovCiAgICAgc3RhdGljIHZvaWQKLWNoZ19sX3RvWG9yX1ggKHZvaWQpCitjaGdfbF90b1hvcl9YKHZvaWQpCiB7CiAgICAgaW50CXRlbXBjOwogCkBAIC02NjYsOCArNjQ2LDcgQEAKIAogLyoKICAqIENoYW5nZSB0aGUgY2hhcmFjdGVyIHJpZ2h0IHRvIHRoZSBjdXJzb3IgdG8gYSBfWCBvciBfWF8gdHlwZQotKi8KLQorICovCiAgICAgc3RhdGljIHZvaWQKIGNoZ19yX3RvX1hvcl9YXyh2b2lkKQogewpAQCAtNjkxLDQ4ICs2NzAsNTAgQEAKIAogLyoKICAqIE1hcCBGYXJzaSBrZXlib2FyZCB3aGVuIGluIGZrbWFwIG1vZGUuCi0qLwotCisgKi8KICAgICBpbnQKIGZrbWFwKGludCBjKQogewogICAgIGludAkJdGVtcGM7Ci0gICAgc3RhdGljIGludAlyZXZpbnM7CisgICAgaW50CQlpbnNlcnRfbW9kZSA9IChTdGF0ZSAmIElOU0VSVCk7CisgICAgc3RhdGljIGludAlyZXZpbnMgPSAwOwogCiAgICAgaWYgKElTX1NQRUNJQUwoYykpCiAJcmV0dXJuIGM7CiAKLSAgICBpZiAoVklNX0lTRElHSVQoYykgfHwgKChjID09ICcuJyB8fCBjID09ICcrJyB8fCBjID09ICctJyB8fAotCWMgPT0gJ14nIHx8IGMgPT0gJyUnIHx8IGMgPT0gJyMnIHx8IGMgPT0gJz0nKSAgJiYgcmV2aW5zKSkKKyAgICBpZiAoaW5zZXJ0X21vZGUpCiAgICAgewotCWlmICghcmV2aW5zKQorCWlmIChWSU1fSVNESUdJVChjKSB8fCAoKGMgPT0gJy4nIHx8IGMgPT0gJysnIHx8IGMgPT0gJy0nIHx8CisJICAgIGMgPT0gJ14nIHx8IGMgPT0gJyUnIHx8IGMgPT0gJyMnIHx8IGMgPT0gJz0nKSAmJiByZXZpbnMpKQogCXsKLQkgICAgaWYgKGN1cndpbi0+d19jdXJzb3IuY29sKQorCSAgICAvKiBOdW1iZXJzIGFyZSBlbnRlcmVkIGxlZnQtdG8tcmlnaHQuICovCisJICAgIGlmICghcmV2aW5zKQogCSAgICB7Ci0JCWlmICghcF9yaSkKLQkJICAgIGRlY19jdXJzb3IoKTsKKwkJaWYgKGN1cndpbi0+d19jdXJzb3IuY29sKQorCQl7CisJCSAgICBpZiAoIXBfcmkpCisJCQlkZWNfY3Vyc29yKCk7CiAKLQkJY2hnX2NfdG9YX29yWCAoKTsKLQkJY2hnX2xfdG9Yb3JfWCAoKTsKKwkJICAgIGNoZ19jX3RvWF9vclggKCk7CisJCSAgICBjaGdfbF90b1hvcl9YICgpOwogCi0JCWlmICghcF9yaSkKLQkJICAgIGluY19jdXJzb3IoKTsKKwkJICAgIGlmICghcF9yaSkKKwkJCWluY19jdXJzb3IoKTsKKwkJfQogCSAgICB9CisKKwkgICAgYXJyb3dfdXNlZCA9IFRSVUU7CisJICAgICh2b2lkKXN0b3BfYXJyb3coKTsKKworCSAgICBpZiAoIWN1cndpbi0+d19wX3JsICYmIHJldmlucykKKwkJaW5jX2N1cnNvcigpOworCisJICAgICsrcmV2aW5zOworCSAgICBwX3JpID0gMTsKIAl9Ci0KLQlhcnJvd191c2VkID0gVFJVRTsKLQkodm9pZClzdG9wX2Fycm93KCk7Ci0KLQlpZiAoIWN1cndpbi0+d19wX3JsICYmIHJldmlucykKLQkgICAgaW5jX2N1cnNvcigpOwotCi0JKytyZXZpbnM7Ci0JcF9yaT0xOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotCWlmIChyZXZpbnMpCisJZWxzZSBpZiAocmV2aW5zKQogCXsKKwkgICAgLyogU3RvcCBlbnRlcmluZyBudW1iZXIuICovCiAJICAgIGFycm93X3VzZWQgPSBUUlVFOwogCSAgICAodm9pZClzdG9wX2Fycm93KCk7CiAKQEAgLTc3MywxNCArNzU0LDE0IEBACiAgICAgaWYgKCFyZXZpbnMpCiAgICAgewogCWlmIChjdXJ3aW4tPndfcF9ybCkKLQkgICAgcF9yaT0wOworCSAgICBwX3JpID0gMDsKIAlpZiAoIWN1cndpbi0+d19wX3JsKQotCSAgICBwX3JpPTE7CisJICAgIHBfcmkgPSAxOwogICAgIH0KIAotICAgIGlmICgoYyA8IDB4MTAwKSAmJiAoaXNhbHBoYShjKSB8fCBjID09ICcmJyB8fCAgIGMgPT0gJ14nIHx8CWMgPT0gJzsnIHx8CisgICAgaWYgKChjIDwgMHgxMDApICYmIChpc2FscGhhKGMpIHx8IGMgPT0gJyYnIHx8IGMgPT0gJ14nIHx8CWMgPT0gJzsnIHx8CiAJCQkgICAgYyA9PSAnXCcnfHwJYyA9PSAnLCcgfHwgYyA9PSAnWycgfHwKLQkJCSAgICBjID09ICddJyB8fAljID09ICd7JyB8fCBjID09ICd9JwkpKQorCQkJICAgIGMgPT0gJ10nIHx8CWMgPT0gJ3snIHx8IGMgPT0gJ30nKSkKIAljaGdfcl90b19Yb3JfWF8oKTsKIAogICAgIHRlbXBjID0gMDsKQEAgLTg0NCwxMyArODI1LDEyIEBACiAJY2FzZSAgTkw6CiAJY2FzZSAgVEFCOgogCi0JICAgIGlmIChwX3JpICYmIGMgPT0gTkwgJiYgY3Vyd2luLT53X2N1cnNvci5jb2wpCisJICAgIGlmIChwX3JpICYmIGMgPT0gTkwgJiYgY3Vyd2luLT53X2N1cnNvci5jb2wgJiYgaW5zZXJ0X21vZGUpCiAJICAgIHsKIAkJLyoKIAkJICogSWYgdGhlIGNoYXIgYmVmb3JlIHRoZSBjdXJzb3IgaXMgX1hfIG9yIFhfIGRvIG5vdCBjaGFuZ2UKIAkJICogdGhlIG9uZSB1bmRlciB0aGUgY3Vyc29yIHdpdGggWCB0eXBlLgotCQkqLwotCisJCSAqLwogCQlkZWNfY3Vyc29yKCk7CiAKIAkJaWYgKEZfaXNhbHBoYShnY2hhcl9jdXJzb3IoKSkpCkBAIC05MjAsMjE1ICs5MDAsMjE5IEBACiAJCX0KIAkJYnJlYWs7CiAJICAgIH0KLQkgICAgaWYgKCFwX3JpKQotCQlkZWNfY3Vyc29yKCk7CiAKLQkgICAgc3dpdGNoICgodGVtcGMgPSBnY2hhcl9jdXJzb3IoKSkpCisJICAgIGlmIChpbnNlcnRfbW9kZSkKIAkgICAgewotCQljYXNlIF9CRToKLQkJY2FzZSBfUEU6Ci0JCWNhc2UgX1RFOgotCQljYXNlIF9TRToKLQkJY2FzZSBfSklNOgotCQljYXNlIF9DSEU6Ci0JCWNhc2UgX0hFX0o6Ci0JCWNhc2UgX1hFOgotCQljYXNlIF9TSU46Ci0JCWNhc2UgX1NISU46Ci0JCWNhc2UgX1NBRDoKLQkJY2FzZSBfWkFEOgotCQljYXNlIF9GRToKLQkJY2FzZSBfR0hBRjoKLQkJY2FzZSBfS0FGOgotCQljYXNlIF9LQUZfSDoKLQkJY2FzZSBfR0FGOgotCQljYXNlIF9MQU06Ci0JCWNhc2UgX01JTToKLQkJY2FzZSBfTk9PTjoKLQkJY2FzZSBfSEU6Ci0JCWNhc2UgX0hFXzoKLQkJY2FzZSBfVEE6Ci0JCWNhc2UgX1pBOgotCQkJcHV0X2N1cnJfYW5kX2xfdG9fWCh0b0ZfVHlBKHRlbXBjKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBfQVlOOgotCQljYXNlIF9BWU5fOgorCQlpZiAoIXBfcmkpCisJCSAgICBkZWNfY3Vyc29yKCk7CiAKLQkJCWlmICghcF9yaSkKLQkJCSAgICBpZiAoIWN1cndpbi0+d19jdXJzb3IuY29sKQotCQkJICAgIHsKLQkJCQlwdXRfY3Vycl9hbmRfbF90b19YKEFZTik7Ci0JCQkJYnJlYWs7Ci0JCQkgICAgfQorCQlzd2l0Y2ggKCh0ZW1wYyA9IGdjaGFyX2N1cnNvcigpKSkKKwkJeworCQkgICAgY2FzZSBfQkU6CisJCSAgICBjYXNlIF9QRToKKwkJICAgIGNhc2UgX1RFOgorCQkgICAgY2FzZSBfU0U6CisJCSAgICBjYXNlIF9KSU06CisJCSAgICBjYXNlIF9DSEU6CisJCSAgICBjYXNlIF9IRV9KOgorCQkgICAgY2FzZSBfWEU6CisJCSAgICBjYXNlIF9TSU46CisJCSAgICBjYXNlIF9TSElOOgorCQkgICAgY2FzZSBfU0FEOgorCQkgICAgY2FzZSBfWkFEOgorCQkgICAgY2FzZSBfRkU6CisJCSAgICBjYXNlIF9HSEFGOgorCQkgICAgY2FzZSBfS0FGOgorCQkgICAgY2FzZSBfS0FGX0g6CisJCSAgICBjYXNlIF9HQUY6CisJCSAgICBjYXNlIF9MQU06CisJCSAgICBjYXNlIF9NSU06CisJCSAgICBjYXNlIF9OT09OOgorCQkgICAgY2FzZSBfSEU6CisJCSAgICBjYXNlIF9IRV86CisJCSAgICBjYXNlIF9UQToKKwkJICAgIGNhc2UgX1pBOgorCQkJICAgIHB1dF9jdXJyX2FuZF9sX3RvX1godG9GX1R5QSh0ZW1wYykpOworCQkJICAgIGJyZWFrOworCQkgICAgY2FzZSBfQVlOOgorCQkgICAgY2FzZSBfQVlOXzoKIAotCQkJaWYgKHBfcmkpCi0JCQkgICAgaW5jX2N1cnNvcigpOwotCQkJZWxzZQotCQkJICAgIGRlY19jdXJzb3IoKTsKKwkJCSAgICBpZiAoIXBfcmkpCisJCQkJaWYgKCFjdXJ3aW4tPndfY3Vyc29yLmNvbCkKKwkJCQl7CisJCQkJICAgIHB1dF9jdXJyX2FuZF9sX3RvX1goQVlOKTsKKwkJCQkgICAgYnJlYWs7CisJCQkJfQogCi0JCQlpZiAoRl9pc19UeUJfVHlDX1R5RChTUkNfRURULCBBVF9DVVJTT1IpKQotCQkJICAgIHRlbXBjID0gQVlOXzsKLQkJCWVsc2UKLQkJCSAgICB0ZW1wYyA9IEFZTjsKKwkJCSAgICBpZiAocF9yaSkKKwkJCQlpbmNfY3Vyc29yKCk7CisJCQkgICAgZWxzZQorCQkJCWRlY19jdXJzb3IoKTsKIAotCQkJaWYgKHBfcmkpCi0JCQkgICAgZGVjX2N1cnNvcigpOwotCQkJZWxzZQotCQkJICAgIGluY19jdXJzb3IoKTsKKwkJCSAgICBpZiAoRl9pc19UeUJfVHlDX1R5RChTUkNfRURULCBBVF9DVVJTT1IpKQorCQkJCXRlbXBjID0gQVlOXzsKKwkJCSAgICBlbHNlCisJCQkJdGVtcGMgPSBBWU47CiAKLQkJCXB1dF9jdXJyX2FuZF9sX3RvX1godGVtcGMpOworCQkJICAgIGlmIChwX3JpKQorCQkJCWRlY19jdXJzb3IoKTsKKwkJCSAgICBlbHNlCisJCQkJaW5jX2N1cnNvcigpOwogCi0JCQlicmVhazsKLQkJY2FzZSBfR0hBWU46Ci0JCWNhc2UgX0dIQVlOXzoKKwkJCSAgICBwdXRfY3Vycl9hbmRfbF90b19YKHRlbXBjKTsKIAotCQkJaWYgKCFwX3JpKQotCQkJICAgIGlmICghY3Vyd2luLT53X2N1cnNvci5jb2wpCi0JCQkgICAgewotCQkJCXB1dF9jdXJyX2FuZF9sX3RvX1goR0hBWU4pOwotCQkJCWJyZWFrOwotCQkJICAgIH0KKwkJCSAgICBicmVhazsKKwkJICAgIGNhc2UgX0dIQVlOOgorCQkgICAgY2FzZSBfR0hBWU5fOgogCi0JCQlpZiAocF9yaSkKLQkJCSAgICBpbmNfY3Vyc29yKCk7Ci0JCQllbHNlCi0JCQkgICAgZGVjX2N1cnNvcigpOworCQkJICAgIGlmICghcF9yaSkKKwkJCQlpZiAoIWN1cndpbi0+d19jdXJzb3IuY29sKQorCQkJCXsKKwkJCQkgICAgcHV0X2N1cnJfYW5kX2xfdG9fWChHSEFZTik7CisJCQkJICAgIGJyZWFrOworCQkJCX0KIAotCQkJaWYgKEZfaXNfVHlCX1R5Q19UeUQoU1JDX0VEVCwgQVRfQ1VSU09SKSkKLQkJCSAgICB0ZW1wYyA9IEdIQVlOXzsKLQkJCWVsc2UKLQkJCSAgICB0ZW1wYyA9IEdIQVlOOworCQkJICAgIGlmIChwX3JpKQorCQkJCWluY19jdXJzb3IoKTsKKwkJCSAgICBlbHNlCisJCQkJZGVjX2N1cnNvcigpOwogCi0JCQlpZiAocF9yaSkKLQkJCSAgICBkZWNfY3Vyc29yKCk7Ci0JCQllbHNlCi0JCQkgICAgaW5jX2N1cnNvcigpOworCQkJICAgIGlmIChGX2lzX1R5Ql9UeUNfVHlEKFNSQ19FRFQsIEFUX0NVUlNPUikpCisJCQkJdGVtcGMgPSBHSEFZTl87CisJCQkgICAgZWxzZQorCQkJCXRlbXBjID0gR0hBWU47CiAKLQkJCXB1dF9jdXJyX2FuZF9sX3RvX1godGVtcGMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgX1lFOgotCQljYXNlIF9JRToKLQkJY2FzZSBfWUVFOgotCQkJaWYgKCFwX3JpKQotCQkJICAgIGlmICghY3Vyd2luLT53X2N1cnNvci5jb2wpCi0JCQkgICAgewotCQkJCXB1dF9jdXJyX2FuZF9sX3RvX1goKHRlbXBjID09IF9ZRSA/IFlFIDoKLQkJCQkJICAgICh0ZW1wYyA9PSBfSUUgPyBJRSA6IFlFRSkpKTsKLQkJCQlicmVhazsKLQkJCSAgICB9CisJCQkgICAgaWYgKHBfcmkpCisJCQkJZGVjX2N1cnNvcigpOworCQkJICAgIGVsc2UKKwkJCQlpbmNfY3Vyc29yKCk7CiAKLQkJCWlmIChwX3JpKQotCQkJICAgIGluY19jdXJzb3IoKTsKLQkJCWVsc2UKLQkJCSAgICBkZWNfY3Vyc29yKCk7CisJCQkgICAgcHV0X2N1cnJfYW5kX2xfdG9fWCh0ZW1wYyk7CisJCQkgICAgYnJlYWs7CisJCSAgICBjYXNlIF9ZRToKKwkJICAgIGNhc2UgX0lFOgorCQkgICAgY2FzZSBfWUVFOgorCQkJICAgIGlmICghcF9yaSkKKwkJCQlpZiAoIWN1cndpbi0+d19jdXJzb3IuY29sKQorCQkJCXsKKwkJCQkgICAgcHV0X2N1cnJfYW5kX2xfdG9fWCgodGVtcGMgPT0gX1lFID8gWUUgOgorCQkJCQkJKHRlbXBjID09IF9JRSA/IElFIDogWUVFKSkpOworCQkJCSAgICBicmVhazsKKwkJCQl9CiAKLQkJCWlmIChGX2lzX1R5Ql9UeUNfVHlEKFNSQ19FRFQsIEFUX0NVUlNPUikpCi0JCQkJdGVtcGMgPSAodGVtcGMgPT0gX1lFID8gWUVfIDoKLQkJCQkgICAgKHRlbXBjID09IF9JRSA/IElFXyA6IFlFRV8pKTsKLQkJCWVsc2UKLQkJCQl0ZW1wYyA9ICh0ZW1wYyA9PSBfWUUgPyBZRSA6Ci0JCQkJICAgICh0ZW1wYyA9PSBfSUUgPyBJRSA6IFlFRSkpOworCQkJICAgIGlmIChwX3JpKQorCQkJCWluY19jdXJzb3IoKTsKKwkJCSAgICBlbHNlCisJCQkJZGVjX2N1cnNvcigpOwogCi0JCQlpZiAocF9yaSkKLQkJCSAgICBkZWNfY3Vyc29yKCk7Ci0JCQllbHNlCi0JCQkgICAgaW5jX2N1cnNvcigpOworCQkJICAgIGlmIChGX2lzX1R5Ql9UeUNfVHlEKFNSQ19FRFQsIEFUX0NVUlNPUikpCisJCQkJICAgIHRlbXBjID0gKHRlbXBjID09IF9ZRSA/IFlFXyA6CisJCQkJCSh0ZW1wYyA9PSBfSUUgPyBJRV8gOiBZRUVfKSk7CisJCQkgICAgZWxzZQorCQkJCSAgICB0ZW1wYyA9ICh0ZW1wYyA9PSBfWUUgPyBZRSA6CisJCQkJCSh0ZW1wYyA9PSBfSUUgPyBJRSA6IFlFRSkpOwogCi0JCQlwdXRfY3Vycl9hbmRfbF90b19YKHRlbXBjKTsKLQkJCWJyZWFrOworCQkJICAgIGlmIChwX3JpKQorCQkJCWRlY19jdXJzb3IoKTsKKwkJCSAgICBlbHNlCisJCQkJaW5jX2N1cnNvcigpOworCisJCQkgICAgcHV0X2N1cnJfYW5kX2xfdG9fWCh0ZW1wYyk7CisJCQkgICAgYnJlYWs7CiAJCX0KIAogCQlpZiAoIXBfcmkpCiAJCSAgICBpbmNfY3Vyc29yKCk7CisJICAgIH0KIAotCQl0ZW1wYyA9IDA7CisJICAgIHRlbXBjID0gMDsKIAotCQlzd2l0Y2ggKGMpCi0JCXsKLQkJICAgIGNhc2UgJzAnOglyZXR1cm4gRkFSU0lfMDsKLQkJICAgIGNhc2UgJzEnOglyZXR1cm4gRkFSU0lfMTsKLQkJICAgIGNhc2UgJzInOglyZXR1cm4gRkFSU0lfMjsKLQkJICAgIGNhc2UgJzMnOglyZXR1cm4gRkFSU0lfMzsKLQkJICAgIGNhc2UgJzQnOglyZXR1cm4gRkFSU0lfNDsKLQkJICAgIGNhc2UgJzUnOglyZXR1cm4gRkFSU0lfNTsKLQkJICAgIGNhc2UgJzYnOglyZXR1cm4gRkFSU0lfNjsKLQkJICAgIGNhc2UgJzcnOglyZXR1cm4gRkFSU0lfNzsKLQkJICAgIGNhc2UgJzgnOglyZXR1cm4gRkFSU0lfODsKLQkJICAgIGNhc2UgJzknOglyZXR1cm4gRkFSU0lfOTsKLQkJICAgIGNhc2UgJ0InOglyZXR1cm4gRl9QU1A7Ci0JCSAgICBjYXNlICdFJzoJcmV0dXJuIEpBWlJfTjsKLQkJICAgIGNhc2UgJ0YnOglyZXR1cm4gQUxFRl9EX0g7Ci0JCSAgICBjYXNlICdIJzoJcmV0dXJuIEFMRUZfQTsKLQkJICAgIGNhc2UgJ0knOglyZXR1cm4gVEFTSDsKLQkJICAgIGNhc2UgJ0snOglyZXR1cm4gRl9MUVVPVDsKLQkJICAgIGNhc2UgJ0wnOglyZXR1cm4gRl9SUVVPVDsKLQkJICAgIGNhc2UgJ00nOglyZXR1cm4gSEFNWkU7Ci0JCSAgICBjYXNlICdPJzoJcmV0dXJuICdbJzsKLQkJICAgIGNhc2UgJ1AnOglyZXR1cm4gJ10nOwotCQkgICAgY2FzZSAnUSc6CXJldHVybiBPTzsKLQkJICAgIGNhc2UgJ1InOglyZXR1cm4gTUFEX047Ci0JCSAgICBjYXNlICdUJzoJcmV0dXJuIE9XOwotCQkgICAgY2FzZSAnVSc6CXJldHVybiBNQUQ7Ci0JCSAgICBjYXNlICdXJzoJcmV0dXJuIE9XX09XOwotCQkgICAgY2FzZSAnWSc6CXJldHVybiBKQVpSOwotCQkgICAgY2FzZSAnYCc6CXJldHVybiBGX1BDTjsKLQkJICAgIGNhc2UgJyEnOglyZXR1cm4gRl9FWENMOwotCQkgICAgY2FzZSAnQCc6CXJldHVybiBGX0NPTU1BOwotCQkgICAgY2FzZSAnIyc6CXJldHVybiBGX0RJVklERTsKLQkJICAgIGNhc2UgJyQnOglyZXR1cm4gRl9DVVJSRU5DWTsKLQkJICAgIGNhc2UgJyUnOglyZXR1cm4gRl9QRVJDRU5UOwotCQkgICAgY2FzZSAnXic6CXJldHVybiBGX01VTDsKLQkJICAgIGNhc2UgJyYnOglyZXR1cm4gRl9CQ09NTUE7Ci0JCSAgICBjYXNlICcqJzoJcmV0dXJuIEZfU1RBUjsKLQkJICAgIGNhc2UgJygnOglyZXR1cm4gRl9MUEFSRU5UOwotCQkgICAgY2FzZSAnKSc6CXJldHVybiBGX1JQQVJFTlQ7Ci0JCSAgICBjYXNlICctJzoJcmV0dXJuIEZfTUlOVVM7Ci0JCSAgICBjYXNlICdfJzoJcmV0dXJuIEZfVU5ERVJMSU5FOwotCQkgICAgY2FzZSAnPSc6CXJldHVybiBGX0VRVUFMUzsKLQkJICAgIGNhc2UgJysnOglyZXR1cm4gRl9QTFVTOwotCQkgICAgY2FzZSAnXFwnOglyZXR1cm4gRl9CU0xBU0g7Ci0JCSAgICBjYXNlICd8JzoJcmV0dXJuIEZfUElQRTsKLQkJICAgIGNhc2UgJzonOglyZXR1cm4gRl9EQ09MT047Ci0JCSAgICBjYXNlICciJzoJcmV0dXJuIEZfU0VNSUNPTE9OOwotCQkgICAgY2FzZSAnLic6CXJldHVybiBGX1BFUklPRDsKLQkJICAgIGNhc2UgJy8nOglyZXR1cm4gRl9TTEFTSDsKLQkJICAgIGNhc2UgJzwnOglyZXR1cm4gRl9MRVNTOwotCQkgICAgY2FzZSAnPic6CXJldHVybiBGX0dSRUFURVI7Ci0JCSAgICBjYXNlICc/JzoJcmV0dXJuIEZfUVVFU1RJT047Ci0JCSAgICBjYXNlICcgJzoJcmV0dXJuIEZfQkxBTks7Ci0JCX0KLQkJYnJlYWs7CisJICAgIHN3aXRjaCAoYykKKwkgICAgeworCQljYXNlICcwJzoJcmV0dXJuIEZBUlNJXzA7CisJCWNhc2UgJzEnOglyZXR1cm4gRkFSU0lfMTsKKwkJY2FzZSAnMic6CXJldHVybiBGQVJTSV8yOworCQljYXNlICczJzoJcmV0dXJuIEZBUlNJXzM7CisJCWNhc2UgJzQnOglyZXR1cm4gRkFSU0lfNDsKKwkJY2FzZSAnNSc6CXJldHVybiBGQVJTSV81OworCQljYXNlICc2JzoJcmV0dXJuIEZBUlNJXzY7CisJCWNhc2UgJzcnOglyZXR1cm4gRkFSU0lfNzsKKwkJY2FzZSAnOCc6CXJldHVybiBGQVJTSV84OworCQljYXNlICc5JzoJcmV0dXJuIEZBUlNJXzk7CisJCWNhc2UgJ0InOglyZXR1cm4gRl9QU1A7CisJCWNhc2UgJ0UnOglyZXR1cm4gSkFaUl9OOworCQljYXNlICdGJzoJcmV0dXJuIEFMRUZfRF9IOworCQljYXNlICdIJzoJcmV0dXJuIEFMRUZfQTsKKwkJY2FzZSAnSSc6CXJldHVybiBUQVNIOworCQljYXNlICdLJzoJcmV0dXJuIEZfTFFVT1Q7CisJCWNhc2UgJ0wnOglyZXR1cm4gRl9SUVVPVDsKKwkJY2FzZSAnTSc6CXJldHVybiBIQU1aRTsKKwkJY2FzZSAnTyc6CXJldHVybiAnWyc7CisJCWNhc2UgJ1AnOglyZXR1cm4gJ10nOworCQljYXNlICdRJzoJcmV0dXJuIE9POworCQljYXNlICdSJzoJcmV0dXJuIE1BRF9OOworCQljYXNlICdUJzoJcmV0dXJuIE9XOworCQljYXNlICdVJzoJcmV0dXJuIE1BRDsKKwkJY2FzZSAnVyc6CXJldHVybiBPV19PVzsKKwkJY2FzZSAnWSc6CXJldHVybiBKQVpSOworCQljYXNlICdgJzoJcmV0dXJuIEZfUENOOworCQljYXNlICchJzoJcmV0dXJuIEZfRVhDTDsKKwkJY2FzZSAnQCc6CXJldHVybiBGX0NPTU1BOworCQljYXNlICcjJzoJcmV0dXJuIEZfRElWSURFOworCQljYXNlICckJzoJcmV0dXJuIEZfQ1VSUkVOQ1k7CisJCWNhc2UgJyUnOglyZXR1cm4gRl9QRVJDRU5UOworCQljYXNlICdeJzoJcmV0dXJuIEZfTVVMOworCQljYXNlICcmJzoJcmV0dXJuIEZfQkNPTU1BOworCQljYXNlICcqJzoJcmV0dXJuIEZfU1RBUjsKKwkJY2FzZSAnKCc6CXJldHVybiBGX0xQQVJFTlQ7CisJCWNhc2UgJyknOglyZXR1cm4gRl9SUEFSRU5UOworCQljYXNlICctJzoJcmV0dXJuIEZfTUlOVVM7CisJCWNhc2UgJ18nOglyZXR1cm4gRl9VTkRFUkxJTkU7CisJCWNhc2UgJz0nOglyZXR1cm4gRl9FUVVBTFM7CisJCWNhc2UgJysnOglyZXR1cm4gRl9QTFVTOworCQljYXNlICdcXCc6CXJldHVybiBGX0JTTEFTSDsKKwkJY2FzZSAnfCc6CXJldHVybiBGX1BJUEU7CisJCWNhc2UgJzonOglyZXR1cm4gRl9EQ09MT047CisJCWNhc2UgJyInOglyZXR1cm4gRl9TRU1JQ09MT047CisJCWNhc2UgJy4nOglyZXR1cm4gRl9QRVJJT0Q7CisJCWNhc2UgJy8nOglyZXR1cm4gRl9TTEFTSDsKKwkJY2FzZSAnPCc6CXJldHVybiBGX0xFU1M7CisJCWNhc2UgJz4nOglyZXR1cm4gRl9HUkVBVEVSOworCQljYXNlICc/JzoJcmV0dXJuIEZfUVVFU1RJT047CisJCWNhc2UgJyAnOglyZXR1cm4gRl9CTEFOSzsKKwkgICAgfQorCSAgICBicmVhazsKIAogCWNhc2UgJ2EnOgotCQl0ZW1wYyA9IF9TSElOOwotCQlicmVhazsKKwkgICAgdGVtcGMgPSBfU0hJTjsKKwkgICAgYnJlYWs7CiAJY2FzZSAnQSc6Ci0JCXRlbXBjID0gV0FXX0g7Ci0JCWJyZWFrOworCSAgICB0ZW1wYyA9IFdBV19IOworCSAgICBicmVhazsKIAljYXNlICdiJzoKLQkJdGVtcGMgPSBaQUw7Ci0JCWJyZWFrOworCSAgICB0ZW1wYyA9IFpBTDsKKwkgICAgYnJlYWs7CiAJY2FzZSAnYyc6Ci0JCXRlbXBjID0gWkU7Ci0JCWJyZWFrOworCSAgICB0ZW1wYyA9IFpFOworCSAgICBicmVhazsKIAljYXNlICdDJzoKLQkJdGVtcGMgPSBKRTsKLQkJYnJlYWs7CisJICAgIHRlbXBjID0gSkU7CisJICAgIGJyZWFrOwogCWNhc2UgJ2QnOgotCQl0ZW1wYyA9IF9ZRTsKLQkJYnJlYWs7CisJICAgIHRlbXBjID0gX1lFOworCSAgICBicmVhazsKIAljYXNlICdEJzoKLQkJdGVtcGMgPSBfWUVFOwotCQlicmVhazsKKwkgICAgdGVtcGMgPSBfWUVFOworCSAgICBicmVhazsKIAljYXNlICdlJzoKLQkJdGVtcGMgPSBfU0U7Ci0JCWJyZWFrOworCSAgICB0ZW1wYyA9IF9TRTsKKwkgICAgYnJlYWs7CiAJY2FzZSAnZic6Ci0JCXRlbXBjID0gX0JFOwotCQlicmVhazsKKwkgICAgdGVtcGMgPSBfQkU7CisJICAgIGJyZWFrOwogCWNhc2UgJ2cnOgotCQl0ZW1wYyA9IF9MQU07Ci0JCWJyZWFrOworCSAgICB0ZW1wYyA9IF9MQU07CisJICAgIGJyZWFrOwogCWNhc2UgJ0cnOgogCSAgICBpZiAoIWN1cndpbi0+d19jdXJzb3IuY29sICAmJiAgU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpKQogCSAgICB7CkBAIC0xMjMwLDcgKzEyMTQsNyBAQAogCQlpbmNfY3Vyc29yKCk7CiAJICAgIGJyZWFrOwogCWNhc2UgJ2onOgotCQl0ZW1wYyA9IF9URTsKKwkgICAgdGVtcGMgPSBfVEU7CiAJICAgIGJyZWFrOwogCWNhc2UgJ0onOgogCSAgICBpZiAoIWN1cndpbi0+d19jdXJzb3IuY29sICAmJiAgU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpKQpAQCAtMTI2MCw3MyArMTI0NCw3MyBAQAogCiAJICAgIHJldHVybiB0ZW1wYzsKIAljYXNlICdrJzoKLQkJdGVtcGMgPSBfTk9PTjsKKwkgICAgdGVtcGMgPSBfTk9PTjsKIAkgICAgYnJlYWs7CiAJY2FzZSAnbCc6Ci0JCXRlbXBjID0gX01JTTsKKwkgICAgdGVtcGMgPSBfTUlNOwogCSAgICBicmVhazsKIAljYXNlICdtJzoKLQkJdGVtcGMgPSBfUEU7CisJICAgIHRlbXBjID0gX1BFOwogCSAgICBicmVhazsKIAljYXNlICduJzoKIAljYXNlICdOJzoKLQkJdGVtcGMgPSBEQUw7CisJICAgIHRlbXBjID0gREFMOwogCSAgICBicmVhazsKIAljYXNlICdvJzoKLQkJdGVtcGMgPSBfWEU7CisJICAgIHRlbXBjID0gX1hFOwogCSAgICBicmVhazsKIAljYXNlICdwJzoKLQkJdGVtcGMgPSBfSEVfSjsKKwkgICAgdGVtcGMgPSBfSEVfSjsKIAkgICAgYnJlYWs7CiAJY2FzZSAncSc6Ci0JCXRlbXBjID0gX1pBRDsKKwkgICAgdGVtcGMgPSBfWkFEOwogCSAgICBicmVhazsKIAljYXNlICdyJzoKLQkJdGVtcGMgPSBfR0hBRjsKKwkgICAgdGVtcGMgPSBfR0hBRjsKIAkgICAgYnJlYWs7CiAJY2FzZSAncyc6Ci0JCXRlbXBjID0gX1NJTjsKKwkgICAgdGVtcGMgPSBfU0lOOwogCSAgICBicmVhazsKIAljYXNlICdTJzoKLQkJdGVtcGMgPSBfSUU7CisJICAgIHRlbXBjID0gX0lFOwogCSAgICBicmVhazsKIAljYXNlICd0JzoKLQkJdGVtcGMgPSBfRkU7CisJICAgIHRlbXBjID0gX0ZFOwogCSAgICBicmVhazsKIAljYXNlICd1JzoKLQkJaWYgKCFjdXJ3aW4tPndfY3Vyc29yLmNvbCAgJiYgIFNUUkxFTihtbF9nZXRfY3VybGluZSgpKSkKLQkJewotCQkgICAgaWYgKCFwX3JpICYmICFGX2lzX1R5RSh0ZW1wYykpCi0JCQljaGdfY190b19YX29yWF8gKCk7Ci0JCSAgICBpZiAocF9yaSkKLQkJCWNoZ19jX3RvX1hfb3JfWCAoKTsKKwkgICAgaWYgKCFjdXJ3aW4tPndfY3Vyc29yLmNvbCAgJiYgIFNUUkxFTihtbF9nZXRfY3VybGluZSgpKSkKKwkgICAgeworCQlpZiAoIXBfcmkgJiYgIUZfaXNfVHlFKHRlbXBjKSkKKwkJICAgIGNoZ19jX3RvX1hfb3JYXyAoKTsKKwkJaWYgKHBfcmkpCisJCSAgICBjaGdfY190b19YX29yX1ggKCk7CiAKLQkJfQorCSAgICB9CiAKLQkJaWYgKCFwX3JpICYmICFjdXJ3aW4tPndfY3Vyc29yLmNvbCkKLQkJICAgIHJldHVybiBfQVlOOworCSAgICBpZiAoIXBfcmkgJiYgIWN1cndpbi0+d19jdXJzb3IuY29sKQorCQlyZXR1cm4gX0FZTjsKIAotCQlpZiAoIXBfcmkpCi0JCSAgICBkZWNfY3Vyc29yKCk7CisJICAgIGlmICghcF9yaSkKKwkJZGVjX2N1cnNvcigpOwogCi0JCWlmIChGX2lzX1R5Ql9UeUNfVHlEKFNSQ19FRFQsIEFUX0NVUlNPUikpCi0JCSAgICB0ZW1wYyA9IF9BWU5fOwotCQllbHNlCi0JCSAgICB0ZW1wYyA9IF9BWU47CisJICAgIGlmIChGX2lzX1R5Ql9UeUNfVHlEKFNSQ19FRFQsIEFUX0NVUlNPUikpCisJCXRlbXBjID0gX0FZTl87CisJICAgIGVsc2UKKwkJdGVtcGMgPSBfQVlOOwogCi0JCWlmICghcF9yaSkKLQkJICAgIGluY19jdXJzb3IoKTsKKwkgICAgaWYgKCFwX3JpKQorCQlpbmNfY3Vyc29yKCk7CiAJICAgIGJyZWFrOwogCWNhc2UgJ3YnOgogCWNhc2UgJ1YnOgotCQl0ZW1wYyA9IFJFOworCSAgICB0ZW1wYyA9IFJFOwogCSAgICBicmVhazsKIAljYXNlICd3JzoKLQkJdGVtcGMgPSBfU0FEOworCSAgICB0ZW1wYyA9IF9TQUQ7CiAJICAgIGJyZWFrOwogCWNhc2UgJ3gnOgogCWNhc2UgJ1gnOgotCQl0ZW1wYyA9IF9UQTsKKwkgICAgdGVtcGMgPSBfVEE7CiAJICAgIGJyZWFrOwogCWNhc2UgJ3knOgogCSAgICBpZiAoIWN1cndpbi0+d19jdXJzb3IuY29sICAmJiAgU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpKQpAQCAtMTM1NCwzNiArMTMzOCwzNiBAQAogCiAJICAgIGJyZWFrOwogCWNhc2UgJ3onOgotCQl0ZW1wYyA9IF9aQTsKKwkgICAgdGVtcGMgPSBfWkE7CiAJICAgIGJyZWFrOwogCWNhc2UgJ1onOgotCQl0ZW1wYyA9IF9LQUZfSDsKKwkgICAgdGVtcGMgPSBfS0FGX0g7CiAJICAgIGJyZWFrOwogCWNhc2UgJzsnOgotCQl0ZW1wYyA9IF9LQUY7CisJICAgIHRlbXBjID0gX0tBRjsKIAkgICAgYnJlYWs7CiAJY2FzZSAnXCcnOgotCQl0ZW1wYyA9IF9HQUY7CisJICAgIHRlbXBjID0gX0dBRjsKIAkgICAgYnJlYWs7CiAJY2FzZSAnLCc6Ci0JCXRlbXBjID0gV0FXOworCSAgICB0ZW1wYyA9IFdBVzsKIAkgICAgYnJlYWs7CiAJY2FzZSAnWyc6Ci0JCXRlbXBjID0gX0pJTTsKKwkgICAgdGVtcGMgPSBfSklNOwogCSAgICBicmVhazsKIAljYXNlICddJzoKLQkJdGVtcGMgPSBfQ0hFOworCSAgICB0ZW1wYyA9IF9DSEU7CiAJICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmICgoRl9pc2FscGhhKHRlbXBjKSB8fCBGX2lzZGlnaXQodGVtcGMpKSkKKyAgICBpZiAoRl9pc2FscGhhKHRlbXBjKSB8fCBGX2lzZGlnaXQodGVtcGMpKQogICAgIHsKLQlpZiAoIWN1cndpbi0+d19jdXJzb3IuY29sICAmJiAgU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpKQorCWlmICghY3Vyd2luLT53X2N1cnNvci5jb2wgJiYgU1RSTEVOKG1sX2dldF9jdXJsaW5lKCkpKQogCXsKIAkgICAgaWYgKCFwX3JpICYmICFGX2lzX1R5RSh0ZW1wYykpCi0JCWNoZ19jX3RvX1hfb3JYXyAoKTsKKwkJY2hnX2NfdG9fWF9vclhfKCk7CiAJICAgIGlmIChwX3JpKQotCQljaGdfY190b19YX29yX1ggKCk7CisJCWNoZ19jX3RvX1hfb3JfWCgpOwogCX0KIAogCWlmIChjdXJ3aW4tPndfY3Vyc29yLmNvbCkKQEAgLTEzOTIsOSArMTM3Niw5IEBACiAJCWRlY19jdXJzb3IoKTsKIAogCSAgICBpZiAoRl9pc19UeUUodGVtcGMpKQotCQljaGdfbF90b1hvcl9YICgpOworCQljaGdfbF90b1hvcl9YKCk7CiAJICAgIGVsc2UKLQkJY2hnX2xfdG9fWF9vclhfICgpOworCQljaGdfbF90b19YX29yWF8oKTsKIAogCSAgICBpZiAoIXBfcmkpCiAJCWluY19jdXJzb3IoKTsKQEAgLTE0MDcsNyArMTM5MSw3IEBACiAKIC8qCiAgKiBDb252ZXJ0IGEgbm9uZSBsZWFkaW5nIEZhcnNpIGNoYXIgaW50byBhIGxlYWRpbmcgdHlwZS4KLSovCisgKi8KICAgICBzdGF0aWMgaW50CiB0b0ZfbGVhZGluZyhpbnQgYykKIHsKQEAgLTE0NjEsNyArMTQ0NSw3IEBACiAKIC8qCiAgKiBDb252ZXJ0IGEgZ2l2ZW4gRmFyc2kgY2hhciBpbnRvIHJpZ2h0IGpvaW5pbmcgdHlwZS4KLSovCisgKi8KICAgICBzdGF0aWMgaW50CiB0b0ZfUmpvaW4oaW50IGMpCiB7CkBAIC0xNTE3LDcgKzE1MDEsNyBAQAogCiAvKgogICogQ2FuIGEgZ2l2ZW4gRmFyc2kgY2hhcmFjdGVyIGpvaW4gdmlhIGl0cyBsZWZ0IGVkai4KLSovCisgKi8KICAgICBzdGF0aWMgaW50CiBjYW5GX0xqb2luKGludCBjKQogewpAQCAtMTU5MSw3ICsxNTc1LDcgQEAKIAogLyoKICAqIENhbiBhIGdpdmVuIEZhcnNpIGNoYXJhY3RlciBqb2luIHZpYSBpdHMgcmlnaHQgZWRqLgotKi8KKyAqLwogICAgIHN0YXRpYyBpbnQKIGNhbkZfUmpvaW4oaW50IGMpCiB7CkBAIC0xNjE5LDcgKzE2MDMsNyBAQAogCiAvKgogICogaXMgYSBnaXZlbiBGYXJzaSBjaGFyYWN0ZXIgYSB0ZXJtaW5hdGluZyB0eXBlLgotKi8KKyAqLwogICAgIHN0YXRpYyBpbnQKIEZfaXN0ZXJtKGludCBjKQogewpAQCAtMTY0Niw3ICsxNjMwLDcgQEAKIAogLyoKICAqIENvbnZlcnQgdGhlIGdpdmVuIEZhcnNpIGNoYXJhY3RlciBpbnRvIGEgZW5kaW5nIHR5cGUgLgotKi8KKyAqLwogICAgIHN0YXRpYyBpbnQKIHRvRl9lbmRpbmcoaW50IGMpCiB7CkBAIC0xNjkxLDcgKzE2NzUsNyBAQAogCiAvKgogICogQ29udmVydCB0aGUgRmFyc2kgMzM0MiBzdGFuZGFyZCBpbnRvIEZhcnNpIFZJTS4KLSovCisgKi8KICAgICBzdGF0aWMgdm9pZAogY29udl90b19wdmltKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0X2ZhcnNpLnZpbSBiL3NyYy90ZXN0ZGlyL3Rlc3RfZmFyc2kudmltCmluZGV4IDgxYWZjZTIuLjljMTY1ZDcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0ZGlyL3Rlc3RfZmFyc2kudmltCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3RfZmFyc2kudmltCkBAIC0xLDQgKzEsNSBAQAogIiBTaW1wbGlzdGljIHRlc3Rpbmcgb2YgRmFyc2kgbW9kZS4KKyIgTm90ZTogbXVzdCBiZSBlZGl0ZWQgd2l0aCBsYXRpbjEgZW5jb2RpbmcuCiAKIGlmICFoYXMoJ2ZhcnNpJykKICAgZmluaXNoCkBAIC04MiwzICs4MywyMSBAQAogICBzZXQgbm9hbHRrZXltYXAKICAgYndpcGUhCiBlbmRmdW5jCisKK2Z1bmMgVGVzdF9pbnB1dF9mYXJzaSgpCisgIG5ldworICBzZXRsb2NhbCByaWdodGxlZnQgZmttYXAKKyAgIiBudW1iZXJzIHN3aXRjaCBpbnB1dCBkaXJlY3Rpb24KKyAgY2FsbCBmZWVka2V5cygiYWFiYzAxMjM0NTY3ODkuKy1eJSM9eHl6XDxFc2M+IiwgJ3R4JykKKyAgY2FsbCBhc3NlcnRfZXF1YWwoIlx4OGPMzr2upaqtq6a5uLe2tbSzsrGw1Fx4OTPVIiwgZ2V0bGluZSgnLicpKQorCisgICIgYWxsIG5vbi1udW1iZXIgc3BlY2lhbCBjaGFycworICBjYWxsIGZlZWRrZXlzKCJhQiBFIEYgSCBJIEsgTCBNIE8gUCBRIFIgVCBVIFcgWSBgICEgIEAgIyAkICUgXiAmICogKCkgLSBfID0gKyBcXCB8IDogXCIgLiAgLyA8ID4gPyBcPEVzYz4iLCAndHgnKQorICBjYWxsIGFzc2VydF9lcXVhbCgiXHg4Y8zOva6lqq2rprm4t7a1tLOysbDUXHg5M9WhoPSg+qDAoPag5qDnoMKgW6BdoPeg86DyoPCg9aDxoKKgo6Cgp6CuoKSgpaCqoKyg6KCoqaCtoOmgvaCroOug6qC6oLugpqCgr6C+oLygv6AiLCBnZXRsaW5lKCcuJykpCisKKyAgIiBhbGwgbGV0dGVyIGNoYXJzCisgIGNhbGwgZmVlZGtleXMoImFhIEEgYiBjIEMgZCBEIGUgZiBnIEcgaCBpIGogSiBrIGwgbSBuIE4gbyBwIHEgciBzIFMgdCB1IHYgViB3IHggWCB5IHogWiA7IFwgLCBbIF0gXDxFc2M+IiwgJ3R4JykKKyAgY2FsbCBhc3NlcnRfZXF1YWwoIlx4OGPMzr2upaqtq6a5uLe2tbSzsrGw1Fx4OTPVoaD0oPqgwKD2oOag56DCoFugXaD3oPOg8qDwoPWg8aCioKOgoKegrqCkoKWgqqCsoOigqKmgraDpoL2gq6DroOqguqC7oKagoK+gvqC8oL+g0aD5oMygzqDPoOGg/qDGoMOg3KD4oMGg4KDFoPyg3qDdoMSgy6DLoMqgyaDToNmg0KD7oNig1qDNoM2g0qDUoNSg16DVoP2g2qCg36DHoMigIiwgZ2V0bGluZSgnLicpKQorCisgIGJ3aXBlIQorZW5kZnVuYwpkaWZmIC0tZ2l0IGEvc3JjL3ZlcnNpb24uYyBiL3NyYy92ZXJzaW9uLmMKaW5kZXggNmVmMTZlNC4uMTdkOWU2MyAxMDA2NDQKLS0tIGEvc3JjL3ZlcnNpb24uYworKysgYi9zcmMvdmVyc2lvbi5jCkBAIC03NjUsNiArNzY1LDggQEAKIHN0YXRpYyBpbnQgaW5jbHVkZWRfcGF0Y2hlc1tdID0KIHsgICAvKiBBZGQgbmV3IHBhdGNoIG51bWJlciBiZWxvdyB0aGlzIGxpbmUgKi8KIC8qKi8KKyAgICAyNjIsCisvKiovCiAgICAgMjYxLAogLyoqLwogICAgIDI2MCwK