ZGlmZiAtLWdpdCBhL2xpYl9pMzg2L01ha2VmaWxlIGIvbGliX2kzODYvTWFrZWZpbGUKaW5kZXggNGZiY2QwOC4uZmI0MTg0YiAxMDA2NDQKLS0tIGEvbGliX2kzODYvTWFrZWZpbGUKKysrIGIvbGliX2kzODYvTWFrZWZpbGUKQEAgLTM4LDYgKzM4LDggQEAKIENPQkpTLXkJKz0gdmlkZW9fYmlvcy5vCiBDT0JKUy15CSs9IHZpZGVvLm8KIENPQkpTLXkJKz0gemltYWdlLm8KK0NPQkpTLXkJKz0gaW50ZXJydXB0cy5vCitDT0JKUy0kKENPTkZJR19TWVNfUENBVF9JTlRFUlJVUFRTKSArPSBwY2F0X2ludGVycnVwdHMubwogCiBTUkNTCTo9ICQoU09CSlMteToubz0uUykgJChDT0JKUy15Oi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUy15KSAkKENPQkpTLXkpKQpkaWZmIC0tZ2l0IGEvbGliX2kzODYvaW50ZXJydXB0cy5jIGIvbGliX2kzODYvaW50ZXJydXB0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZjg0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJfaTM4Ni9pbnRlcnJ1cHRzLmMKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDkKKyAqIEdyYWVtZSBSdXNzLCBncmFlbWUucnVzc0BnbWFpbC5jb20KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDcKKyAqIERhbmllbCBIZWxsc3Ryb20sIEdhaXNsZXIgUmVzZWFyY2gsIGRhbmllbEBnYWlzbGVyLmNvbQorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogRGV0bGV2IFp1bmRlbCwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgZHp1QGRlbnguZGUKKyAqCisgKiAoQykgQ29weXJpZ2h0IC0yMDAzCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlCisgKgorICogKEMpIENvcHlyaWdodCAyMDAxCisgKiBKb3NoIEh1YmVyIDxodWJlckBtY2x4LmNvbT4sIE1pc3Npb24gQ3JpdGljYWwgTGludXgsIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoaWdoLWxldmVsIEFQSSBmb3IgdGhlIGludGVycnVwdCBzdWItc3lzdGVtCisgKiBvZiB0aGUgaTM4NiBwb3J0IG9mIFUtQm9vdC4gTW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbgorICogc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gdGhlIGxlb24yIC8gbGVvbjMgcG9ydHMgb2YgVS1Cb290LgorICogRGFuaWVsIEhlbGxzdHJvbSwgRGV0bGV2IFp1bmRlbCwgV29sZmdhbmcgRGVuayBhbmQgSm9zaCBIdWJlciBhcmUKKyAqIGNyZWRpdGVkIGZvciB0aGUgY29ycmVzcG9uZGluZyB3b3JrIG9uIHRob3NlIHBvcnRzLiBUaGUgb3JpZ2luYWwKKyAqIGludGVycnVwdCBoYW5kbGluZyByb3V0aW5lcyBmb3IgdGhlIGkzODYgcG9ydCB3ZXJlIHdyaXR0ZW4gYnkKKyAqIERhbmllbCBFbmdzdHL2bQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW50ZXJydXB0Lmg+CisKK3N0cnVjdCBpcnFfYWN0aW9uIHsKKwlpbnRlcnJ1cHRfaGFuZGxlcl90ICpoYW5kbGVyOworCXZvaWQgKmFyZzsKKwl1bnNpZ25lZCBpbnQgY291bnQ7Cit9OworCitzdGF0aWMgc3RydWN0IGlycV9hY3Rpb24gaXJxX2hhbmRsZXJzW0NPTkZJR19TWVNfTlVNX0lSUVNdID0geyB7MH0gfTsKK3N0YXRpYyBpbnQgc3B1cmlvdXNfaXJxX2NudCA9IDA7CitzdGF0aWMgaW50IHNwdXJpb3VzX2lycSA9IDA7CisKK3ZvaWQgaXJxX2luc3RhbGxfaGFuZGxlcihpbnQgaXJxLCBpbnRlcnJ1cHRfaGFuZGxlcl90ICpoYW5kbGVyLCB2b2lkICphcmcpCit7CisJaW50IHN0YXR1czsKKworCWlmIChpcnEgPCAwIHx8IGlycSA+PSBDT05GSUdfU1lTX05VTV9JUlFTKSB7CisJCXByaW50ZigiaXJxX2luc3RhbGxfaGFuZGxlcjogYmFkIGlycSBudW1iZXIgJWRcbiIsIGlycSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlciAhPSBOVUxMKQorCQlwcmludGYoImlycV9pbnN0YWxsX2hhbmRsZXI6IDB4JTA4bHggcmVwbGFjaW5nIDB4JTA4bHhcbiIsCisJCSAgICAgICAodWxvbmcpIGhhbmRsZXIsCisJCSAgICAgICAodWxvbmcpIGlycV9oYW5kbGVyc1tpcnFdLmhhbmRsZXIpOworCisJc3RhdHVzID0gZGlzYWJsZV9pbnRlcnJ1cHRzICgpOworCisJaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlciA9IGhhbmRsZXI7CisJaXJxX2hhbmRsZXJzW2lycV0uYXJnID0gYXJnOworCWlycV9oYW5kbGVyc1tpcnFdLmNvdW50ID0gMDsKKworCXVubWFza19pcnEoaXJxKTsKKworCWlmIChzdGF0dXMpCisJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwlyZXR1cm47Cit9CisKK3ZvaWQgaXJxX2ZyZWVfaGFuZGxlcihpbnQgaXJxKQoreworCWludCBzdGF0dXM7CisKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gQ09ORklHX1NZU19OVU1fSVJRUykgeworCQlwcmludGYoImlycV9mcmVlX2hhbmRsZXI6IGJhZCBpcnEgbnVtYmVyICVkXG4iLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJc3RhdHVzID0gZGlzYWJsZV9pbnRlcnJ1cHRzICgpOworCisJbWFza19pcnEoaXJxKTsKKworCWlycV9oYW5kbGVyc1tpcnFdLmhhbmRsZXIgPSBOVUxMOworCWlycV9oYW5kbGVyc1tpcnFdLmFyZyA9IE5VTEw7CisKKwlpZiAoc3RhdHVzKQorCQllbmFibGVfaW50ZXJydXB0cygpOworCisJcmV0dXJuOworfQorCitfX2lzcl9fIGRvX2lycShpbnQgaXJxKQoreworCWlmIChpcnEgPCAwIHx8IGlycSA+PSBDT05GSUdfU1lTX05VTV9JUlFTKSB7CisJCXByaW50ZigiZG9faXJxOiBiYWQgaXJxIG51bWJlciAlZFxuIiwgaXJxKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpcnFfaGFuZGxlcnNbaXJxXS5oYW5kbGVyKSB7CisJCW1hc2tfaXJxKGlycSk7CisKKwkJaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlcihpcnFfaGFuZGxlcnNbaXJxXS5hcmcpOworCQlpcnFfaGFuZGxlcnNbaXJxXS5jb3VudCsrOworCisJCXVubWFza19pcnEoaXJxKTsKKwkJc3BlY2lmaWNfZW9pKGlycSk7CisKKwl9IGVsc2UgeworCQlpZiAoKGlycSAmIDcpICE9IDcpIHsKKwkJCXNwdXJpb3VzX2lycV9jbnQrKzsKKwkJCXNwdXJpb3VzX2lycSA9IGlycTsKKwkJfQorCX0KK30KKworI2lmIGRlZmluZWQoQ09ORklHX0NNRF9JUlEpCitpbnQgZG9faXJxaW5mbyhjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgaXJxOworCisJcHJpbnRmKCJTcHVyaW91cyBJUlE6ICV1LCBsYXN0IHVua25vd24gSVJROiAlZFxuIiwKKwkgICAgICAgc3B1cmlvdXNfaXJxX2NudCwgc3B1cmlvdXNfaXJxKTsKKworCXByaW50ZiAoIkludGVycnVwdC1JbmZvcm1hdGlvbjpcbiIpOworCXByaW50ZiAoIk5yICBSb3V0aW5lICAgQXJnICAgICAgIENvdW50XG4iKTsKKworCWZvciAoaXJxID0gMDsgaXJxIDw9IENPTkZJR19TWVNfTlVNX0lSUVM7IGlycSsrKSB7CisJCWlmIChpcnFfaGFuZGxlcnNbaXJxXS5oYW5kbGVyICE9IE5VTEwpIHsKKwkJCXByaW50ZiAoIiUwMmQgICUwOGx4ICAlMDhseCAgJWRcbiIsCisJCQkJCWlycSwKKwkJCQkJKHVsb25nKWlycV9oYW5kbGVyc1tpcnFdLmhhbmRsZXIsCisJCQkJCSh1bG9uZylpcnFfaGFuZGxlcnNbaXJxXS5hcmcsCisJCQkJCWlycV9oYW5kbGVyc1tpcnFdLmNvdW50KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJfaTM4Ni9wY2F0X2ludGVycnVwdHMuYyBiL2xpYl9pMzg2L3BjYXRfaW50ZXJydXB0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMTI5OGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJfaTM4Ni9wY2F0X2ludGVycnVwdHMuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOQorICogR3JhZW1lIFJ1c3MsIGdyYWVtZS5ydXNzQGdtYWlsLmNvbQorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgdGhlIGludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbmFsaXR5IGZvciBzeXN0ZW1zCisgKiBiYXNlZCBvbiB0aGUgc3RhbmRhcmQgUEMvQVQgYXJjaGl0ZWN0dXJlIHVzaW5nIHR3byBjYXNjYWRlZCBpODI1OQorICogUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVycy4KKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CisjaW5jbHVkZSA8YXNtL2libXBjLmg+CisjaW5jbHVkZSA8YXNtL2ludGVycnVwdC5oPgorCisjaWYgQ09ORklHX1NZU19OVU1fSVJRUyAhPSAxNgorI2Vycm9yICJDT05GSUdfU1lTX05VTV9JUlFTIG11c3QgZXF1YWwgMTYgaWYgQ09ORklHX1NZU19OVU1fSVJRUyBpcyBkZWZpbmVkIgorI2VuZGlmCisKK0RFQ0xBUkVfSU5URVJSVVBUKDApOworREVDTEFSRV9JTlRFUlJVUFQoMSk7CitERUNMQVJFX0lOVEVSUlVQVCgzKTsKK0RFQ0xBUkVfSU5URVJSVVBUKDQpOworREVDTEFSRV9JTlRFUlJVUFQoNSk7CitERUNMQVJFX0lOVEVSUlVQVCg2KTsKK0RFQ0xBUkVfSU5URVJSVVBUKDcpOworREVDTEFSRV9JTlRFUlJVUFQoOCk7CitERUNMQVJFX0lOVEVSUlVQVCg5KTsKK0RFQ0xBUkVfSU5URVJSVVBUKDEwKTsKK0RFQ0xBUkVfSU5URVJSVVBUKDExKTsKK0RFQ0xBUkVfSU5URVJSVVBUKDEyKTsKK0RFQ0xBUkVfSU5URVJSVVBUKDEzKTsKK0RFQ0xBUkVfSU5URVJSVVBUKDE0KTsKK0RFQ0xBUkVfSU5URVJSVVBUKDE1KTsKKworaW50IGludGVycnVwdF9pbml0KHZvaWQpCit7CisJdTggaTsKKworCWRpc2FibGVfaW50ZXJydXB0cygpOworCisJLyogU2V0dXAgaW50ZXJydXB0cyAqLworCXNldF92ZWN0b3IoMHgyMCwgaXJxXzApOworCXNldF92ZWN0b3IoMHgyMSwgaXJxXzEpOworCXNldF92ZWN0b3IoMHgyMywgaXJxXzMpOworCXNldF92ZWN0b3IoMHgyNCwgaXJxXzQpOworCXNldF92ZWN0b3IoMHgyNSwgaXJxXzUpOworCXNldF92ZWN0b3IoMHgyNiwgaXJxXzYpOworCXNldF92ZWN0b3IoMHgyNywgaXJxXzcpOworCXNldF92ZWN0b3IoMHgyOCwgaXJxXzgpOworCXNldF92ZWN0b3IoMHgyOSwgaXJxXzkpOworCXNldF92ZWN0b3IoMHgyYSwgaXJxXzEwKTsKKwlzZXRfdmVjdG9yKDB4MmIsIGlycV8xMSk7CisJc2V0X3ZlY3RvcigweDJjLCBpcnFfMTIpOworCXNldF92ZWN0b3IoMHgyZCwgaXJxXzEzKTsKKwlzZXRfdmVjdG9yKDB4MmUsIGlycV8xNCk7CisJc2V0X3ZlY3RvcigweDJmLCBpcnFfMTUpOworCisJLyogTWFzayBhbGwgaW50ZXJydXB0cyAqLworCW91dGIoMHhmZiwgTUFTVEVSX1BJQyArIElNUik7CisJb3V0YigweGZmLCBTTEFWRV9QSUMgKyBJTVIpOworCisJLyogTWFzdGVyIFBJQyAqLworCS8qIFBsYWNlIG1hc3RlciBQSUMgaW50ZXJydXB0cyBhdCBJTlQyMCAqLworCS8qIElDVzMsIE9uZSBzbGF2ZSBQSUMgaXMgcHJlc2VudCAqLworCW91dGIoSUNXMV9TRUx8SUNXMV9FSUNXNCwgTUFTVEVSX1BJQyArIElDVzEpOworCW91dGIoMHgyMCwgTUFTVEVSX1BJQyArIElDVzIpOworCW91dGIoSVIyLCBNQVNURVJfUElDICsgSUNXMyk7CisJb3V0YihJQ1c0X1BNLCBNQVNURVJfUElDICsgSUNXNCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlvdXRiKE9DVzJfU0VPSSB8IGksIE1BU1RFUl9QSUMgKyBPQ1cyKTsKKworCS8qIFNsYXZlIFBJQyAqLworCS8qIFBsYWNlIHNsYXZlIFBJQyBpbnRlcnJ1cHRzIGF0IElOVDI4ICovCisJLyogU2xhdmUgSUQgKi8KKwlvdXRiKElDVzFfU0VMfElDVzFfRUlDVzQsIFNMQVZFX1BJQyArIElDVzEpOworCW91dGIoMHgyOCwgU0xBVkVfUElDICsgSUNXMik7CisJb3V0YigweDAyLCBTTEFWRV9QSUMgKyBJQ1czKTsKKwlvdXRiKElDVzRfUE0sIFNMQVZFX1BJQyArIElDVzQpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJb3V0YihPQ1cyX1NFT0kgfCBpLCBTTEFWRV9QSUMgKyBPQ1cyKTsKKworCS8qCisJICogRW5hYmxlIGNhc2NhZGVkIGludGVycnVwdHMgYnkgdW5tYXNraW5nIHRoZSBjYXNjYWRlIElSUSBwaW4gb2YKKwkgKiB0aGUgbWFzdGVyIFBJQworCSAqLworCXVubWFza19pcnEgKDIpOworCisJZW5hYmxlX2ludGVycnVwdHMoKTsKKworCXJldHVybiAwOworfQorCit2b2lkIG1hc2tfaXJxKGludCBpcnEpCit7CisJaW50IGltcl9wb3J0OworCisJaWYgKGlycSA+PSBDT05GSUdfU1lTX05VTV9JUlFTKQorCQlyZXR1cm47CisKKwlpZiAoaXJxID4gNykKKwkJaW1yX3BvcnQgPSBTTEFWRV9QSUMgKyBJTVI7CisJZWxzZQorCQlpbXJfcG9ydCA9IE1BU1RFUl9QSUMgKyBJTVI7CisKKwlvdXRiKGluYihpbXJfcG9ydCkgfCAoMSA8PCAoaXJxICYgNykpLCBpbXJfcG9ydCk7Cit9CisKK3ZvaWQgdW5tYXNrX2lycShpbnQgaXJxKQoreworCWludCBpbXJfcG9ydDsKKworCWlmIChpcnEgPj0gQ09ORklHX1NZU19OVU1fSVJRUykKKwkJcmV0dXJuOworCisJaWYgKGlycSA+IDcpCisJCWltcl9wb3J0ID0gU0xBVkVfUElDICsgSU1SOworCWVsc2UKKwkJaW1yX3BvcnQgPSBNQVNURVJfUElDICsgSU1SOworCisJb3V0YihpbmIoaW1yX3BvcnQpICYgfigxIDw8IChpcnEgJiA3KSksIGltcl9wb3J0KTsKK30KKwordm9pZCBzcGVjaWZpY19lb2koaW50IGlycSkKK3sKKwlpZiAoaXJxID49IENPTkZJR19TWVNfTlVNX0lSUVMpCisJCXJldHVybjsKKworCWlmIChpcnEgPiA3KSB7CisJCS8qCisJCSAqICBJUlEgaXMgb24gdGhlIHNsYXZlIC0gSXNzdWUgYSBjb3JyZXNwb25kaW5nIEVPSSB0byB0aGUKKwkJICogIHNsYXZlIFBJQyBhbmQgYW4gRU9JIGZvciBJUlEyICh0aGUgY2FzY2FkZSBpbnRlcnJ1cHQpCisJCSAqICBvbiB0aGUgbWFzdGVyIFBJQworCQkgKi8KKwkJb3V0YihPQ1cyX1NFT0kgfCAoaXJxICYgNyksIFNMQVZFX1BJQyArIE9DVzIpOworCQlpcnEgPSBTRU9JX0lSMjsKKwl9CisKKwlvdXRiKE9DVzJfU0VPSSB8IGlycSwgTUFTVEVSX1BJQyArIE9DVzIpOworfQo=