ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYjhmMmViNS4uNTFlNjIyZSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEyNywyMCArMTI3LDI4IEBACiBQUAkJCTo9CSR7Q1JPU1NfQ09NUElMRX1nY2MgLUUKIERUQwkJCT89CWR0YwogCitpZmVxICgke0FSTV9BUkNIX01BSk9SfSw3KQordGFyZ2V0MzItZGlyZWN0aXZlCT0gCS10YXJnZXQgYXJtLW5vbmUtZWFiaQorIyBXaWxsIHNldCBtYXJjaDMyLWRpcmVjdGl2ZSBmcm9tIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24KK2Vsc2UKK3RhcmdldDMyLWRpcmVjdGl2ZQk9IAktdGFyZ2V0IGFybXY4YS1ub25lLWVhYmkKK21hcmNoMzItZGlyZWN0aXZlCT0gCS1tYXJjaD1hcm12OC1hCitlbmRpZgorCiBpZmVxICgkKG5vdGRpciAkKENDKSksYXJtY2xhbmcpCi1URl9DRkxBR1NfYWFyY2gzMgk9CS10YXJnZXQgYXJtLWFybS1ub25lLWVhYmkgLW1hcmNoPWFybXY4LWEKK1RGX0NGTEFHU19hYXJjaDMyCT0JLXRhcmdldCBhcm0tYXJtLW5vbmUtZWFiaSAkKG1hcmNoMzItZGlyZWN0aXZlKQogVEZfQ0ZMQUdTX2FhcmNoNjQJPQktdGFyZ2V0IGFhcmNoNjQtYXJtLW5vbmUtZWFiaSAtbWFyY2g9YXJtdjgtYQogZWxzZSBpZm5lcSAoJChmaW5kc3RyaW5nIGNsYW5nLCQobm90ZGlyICQoQ0MpKSksKQotVEZfQ0ZMQUdTX2FhcmNoMzIJPQktdGFyZ2V0IGFybXY4YS1ub25lLWVhYmkKK1RGX0NGTEFHU19hYXJjaDMyCT0JJCh0YXJnZXQzMi1kaXJlY3RpdmUpCiBURl9DRkxBR1NfYWFyY2g2NAk9CS10YXJnZXQgYWFyY2g2NC1lbGYKIGVsc2UKLVRGX0NGTEFHU19hYXJjaDMyCT0JLW1hcmNoPWFybXY4LWEKK1RGX0NGTEFHU19hYXJjaDMyCT0JJChtYXJjaDMyLWRpcmVjdGl2ZSkKIFRGX0NGTEFHU19hYXJjaDY0CT0JLW1hcmNoPWFybXY4LWEKIGVuZGlmCiAKIFRGX0NGTEFHU19hYXJjaDY0CSs9CS1tZ2VuZXJhbC1yZWdzLW9ubHkgLW1zdHJpY3QtYWxpZ24KIAotQVNGTEFHU19hYXJjaDMyCQk9CS1tYXJjaD1hcm12OC1hCitBU0ZMQUdTX2FhcmNoMzIJCT0JJChtYXJjaDMyLWRpcmVjdGl2ZSkKIEFTRkxBR1NfYWFyY2g2NAkJPQktbWFyY2g9YXJtdjgtYQogCiBDUFBGTEFHUwkJPQkke0RFRklORVN9ICR7SU5DTFVERVN9IC1ub3N0ZGluYwkJXApAQCAtMTkyLDYgKzIwMCw3IEBACiAJCQkJLUlpbmNsdWRlL2xpYi9jcHVzLyR7QVJDSH0JCVwKIAkJCQktSWluY2x1ZGUvbGliL2VsM19ydW50aW1lCQlcCiAJCQkJLUlpbmNsdWRlL2xpYi9lbDNfcnVudGltZS8ke0FSQ0h9CVwKKwkJCQktSWluY2x1ZGUvbGliL2V4dGVuc2lvbnMJCVwKIAkJCQktSWluY2x1ZGUvbGliL3BtZgkJCVwKIAkJCQktSWluY2x1ZGUvbGliL3BzY2kJCQlcCiAJCQkJLUlpbmNsdWRlL2xpYi94bGF0X3RhYmxlcwkJXApAQCAtMjYzLDYgKzI3MiwxMiBAQAogCiBpbmNsdWRlICR7UExBVF9NQUtFRklMRV9GVUxMfQogCiskKGV2YWwgJChjYWxsIE1BS0VfUFJFUkVRX0RJUiwke0JVSUxEX1BMQVR9KSkKKworaWZlcSAoJHtBUk1fQVJDSF9NQUpPUn0sNykKK2luY2x1ZGUgbWFrZV9oZWxwZXJzL2FybXY3LWEtY3B1cy5taworZW5kaWYKKwogIyBQbGF0Zm9ybSBjb21wYXRpYmlsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgaW4gQUFyY2gzMgogaWZuZXEgKCR7QVJDSH0sYWFyY2gzMikKICMgSWYgdGhlIHBsYXRmb3JtIGhhcyBub3QgZGVmaW5lZCBFTkFCTEVfUExBVF9DT01QQVQsIHRoZW4gZW5hYmxlIGl0IGJ5IGRlZmF1bHQKQEAgLTM3MSw2ICszODYsMTcgQEAKICAgICAgICAgTkVFRF9TQ1BfQkwyCQk6PQl5ZXMKIGVuZGlmCiAKKyMgRm9yIEFBcmNoMzIsIEJMMzEgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCitpZm5lcSAoJHtBUkNIfSxhYXJjaDMyKQorICAgIGlmZGVmIEJMMzFfU09VUkNFUworICAgICAgICAjIFdoZW4gYm9vdGluZyBhbiBFTDMgcGF5bG9hZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBjb21waWxlIHRoZSBCTDMxIGltYWdlIG5vcgorICAgICAgICAjIHB1dCBpdCBpbiB0aGUgRklQLgorICAgICAgICBpZm5kZWYgRUwzX1BBWUxPQURfQkFTRQorICAgICAgICAgICAgTkVFRF9CTDMxIDo9IHllcworICAgICAgICBlbmRpZgorICAgIGVuZGlmCitlbmRpZgorCiAjIFByb2Nlc3MgVEJCIHJlbGF0ZWQgZmxhZ3MKIGlmbmVxICgke0dFTkVSQVRFX0NPVH0sMCkKICAgICAgICAgIyBDb21tb24gY2VydF9jcmVhdGUgb3B0aW9ucwpAQCAtNDIyLDE3ICs0NDgsMTEgQEAKIGluY2x1ZGUgYmwydS9ibDJ1Lm1rCiBlbmRpZgogCi0jIEZvciBBQXJjaDMyLCBCTDMxIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgotaWZuZXEgKCR7QVJDSH0sYWFyY2gzMikKK2lmZXEgKCR7TkVFRF9CTDMxfSx5ZXMpCiBpZmRlZiBCTDMxX1NPVVJDRVMKLSMgV2hlbiBib290aW5nIGFuIEVMMyBwYXlsb2FkLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbXBpbGUgdGhlIEJMMzEgaW1hZ2Ugbm9yCi0jIHB1dCBpdCBpbiB0aGUgRklQLgotaWZuZGVmIEVMM19QQVlMT0FEX0JBU0UKLU5FRURfQkwzMSA6PSB5ZXMKIGluY2x1ZGUgYmwzMS9ibDMxLm1rCiBlbmRpZgogZW5kaWYKLWVuZGlmCiAKIGlmZGVmIEZEVF9TT1VSQ0VTCiBORUVEX0ZEVCA6PSB5ZXMKQEAgLTQ0OCwxNCArNDY4LDE3IEBACiAkKGV2YWwgJChjYWxsIGFzc2VydF9ib29sZWFuLENUWF9JTkNMVURFX0ZQUkVHUykpCiAkKGV2YWwgJChjYWxsIGFzc2VydF9ib29sZWFuLERFQlVHKSkKICQoZXZhbCAkKGNhbGwgYXNzZXJ0X2Jvb2xlYW4sRElTQUJMRV9QRURBTlRJQykpCiskKGV2YWwgJChjYWxsIGFzc2VydF9ib29sZWFuLEVOQUJMRV9BTVUpKQogJChldmFsICQoY2FsbCBhc3NlcnRfYm9vbGVhbixFTkFCTEVfQVNTRVJUSU9OUykpCiAkKGV2YWwgJChjYWxsIGFzc2VydF9ib29sZWFuLEVOQUJMRV9QTEFUX0NPTVBBVCkpCiAkKGV2YWwgJChjYWxsIGFzc2VydF9ib29sZWFuLEVOQUJMRV9QTUYpKQogJChldmFsICQoY2FsbCBhc3NlcnRfYm9vbGVhbixFTkFCTEVfUFNDSV9TVEFUKSkKICQoZXZhbCAkKGNhbGwgYXNzZXJ0X2Jvb2xlYW4sRU5BQkxFX1JVTlRJTUVfSU5TVFJVTUVOVEFUSU9OKSkKICQoZXZhbCAkKGNhbGwgYXNzZXJ0X2Jvb2xlYW4sRU5BQkxFX1NQRV9GT1JfTE9XRVJfRUxTKSkKKyQoZXZhbCAkKGNhbGwgYXNzZXJ0X2Jvb2xlYW4sRU5BQkxFX1NWRV9GT1JfTlMpKQogJChldmFsICQoY2FsbCBhc3NlcnRfYm9vbGVhbixFUlJPUl9ERVBSRUNBVEVEKSkKICQoZXZhbCAkKGNhbGwgYXNzZXJ0X2Jvb2xlYW4sR0VORVJBVEVfQ09UKSkKKyQoZXZhbCAkKGNhbGwgYXNzZXJ0X2Jvb2xlYW4sR0lDVjJfRzBfRk9SX0VMMykpCiAkKGV2YWwgJChjYWxsIGFzc2VydF9ib29sZWFuLEhXX0FTU0lTVEVEX0NPSEVSRU5DWSkpCiAkKGV2YWwgJChjYWxsIGFzc2VydF9ib29sZWFuLExPQURfSU1BR0VfVjIpKQogJChldmFsICQoY2FsbCBhc3NlcnRfYm9vbGVhbixOU19USU1FUl9TV0lUQ0gpKQpAQCAtNDg2LDEzICs1MDksMTYgQEAKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxDT0xEX0JPT1RfU0lOR0xFX0NQVSkpCiAkKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsQ1RYX0lOQ0xVREVfQUFSQ0gzMl9SRUdTKSkKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxDVFhfSU5DTFVERV9GUFJFR1MpKQorJChldmFsICQoY2FsbCBhZGRfZGVmaW5lLEVOQUJMRV9BTVUpKQogJChldmFsICQoY2FsbCBhZGRfZGVmaW5lLEVOQUJMRV9BU1NFUlRJT05TKSkKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxFTkFCTEVfUExBVF9DT01QQVQpKQogJChldmFsICQoY2FsbCBhZGRfZGVmaW5lLEVOQUJMRV9QTUYpKQogJChldmFsICQoY2FsbCBhZGRfZGVmaW5lLEVOQUJMRV9QU0NJX1NUQVQpKQogJChldmFsICQoY2FsbCBhZGRfZGVmaW5lLEVOQUJMRV9SVU5USU1FX0lOU1RSVU1FTlRBVElPTikpCiAkKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsRU5BQkxFX1NQRV9GT1JfTE9XRVJfRUxTKSkKKyQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxFTkFCTEVfU1ZFX0ZPUl9OUykpCiAkKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsRVJST1JfREVQUkVDQVRFRCkpCiskKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsR0lDVjJfRzBfRk9SX0VMMykpCiAkKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsSFdfQVNTSVNURURfQ09IRVJFTkNZKSkKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxMT0FEX0lNQUdFX1YyKSkKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxMT0dfTEVWRUwpKQpAQCAtNTAzLDYgKzUyOSw3IEBACiAkKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsUFNDSV9FWFRFTkRFRF9TVEFURV9JRCkpCiAkKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsUkVTRVRfVE9fQkwzMSkpCiAkKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsU0VQQVJBVEVfQ09ERV9BTkRfUk9EQVRBKSkKKyQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxFTkFCTEVfU1BNKSkKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxTUERfJHtTUER9KSkKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxTUElOX09OX0JMMV9FWElUKSkKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxUUlVTVEVEX0JPQVJEX0JPT1QpKQpkaWZmIC0tZ2l0IGEvYmwxL2JsMS5sZC5TIGIvYmwxL2JsMS5sZC5TCmluZGV4IDJjNDUzYmQuLmU0YzQ1NGIgMTAwNjQ0Ci0tLSBhL2JsMS9ibDEubGQuUworKysgYi9ibDEvYmwxLmxkLlMKQEAgLTUsNiArNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgorI2luY2x1ZGUgPHhsYXRfdGFibGVzX2RlZnMuaD4KIAogT1VUUFVUX0ZPUk1BVChQTEFURk9STV9MSU5LRVJfRk9STUFUKQogT1VUUFVUX0FSQ0goUExBVEZPUk1fTElOS0VSX0FSQ0gpCkBAIC0xOCw3ICsxOSw3IEBACiBTRUNUSU9OUwogewogICAgIC4gPSBCTDFfUk9fQkFTRTsKLSAgICBBU1NFUlQoLiA9PSBBTElHTig0MDk2KSwKKyAgICBBU1NFUlQoLiA9PSBBTElHTihQQUdFX1NJWkUpLAogICAgICAgICAgICAiQkwxX1JPX0JBU0UgYWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIHBhZ2UgYm91bmRhcnkuIikKIAogI2lmIFNFUEFSQVRFX0NPREVfQU5EX1JPREFUQQpAQCAtMjcsNyArMjgsNyBAQAogICAgICAgICAqYmwxX2VudHJ5cG9pbnQubygudGV4dCopCiAgICAgICAgICooLnRleHQqKQogICAgICAgICAqKC52ZWN0b3JzKQotICAgICAgICAuID0gTkVYVCg0MDk2KTsKKyAgICAgICAgLiA9IE5FWFQoUEFHRV9TSVpFKTsKICAgICAgICAgX19URVhUX0VORF9fID0gLjsKICAgICAgfSA+Uk9NCiAKQEAgLTg4LDcgKzg5LDcgQEAKICAgICAgICAgICAgImNwdV9vcHMgbm90IGRlZmluZWQgZm9yIHRoaXMgcGxhdGZvcm0uIikKIAogICAgIC4gPSBCTDFfUldfQkFTRTsKLSAgICBBU1NFUlQoQkwxX1JXX0JBU0UgPT0gQUxJR04oNDA5NiksCisgICAgQVNTRVJUKEJMMV9SV19CQVNFID09IEFMSUdOKFBBR0VfU0laRSksCiAgICAgICAgICAgICJCTDFfUldfQkFTRSBhZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgcGFnZSBib3VuZGFyeS4iKQogCiAgICAgLyoKQEAgLTE0MSw3ICsxNDIsNyBAQAogICAgICAqIGFyZSBub3QgbWl4ZWQgd2l0aCBub3JtYWwgZGF0YS4gIFRoaXMgaXMgcmVxdWlyZWQgdG8gc2V0IHVwIHRoZSBjb3JyZWN0CiAgICAgICogbWVtb3J5IGF0dHJpYnV0ZXMgZm9yIHRoZSBjb2hlcmVudCBkYXRhIHBhZ2UgdGFibGVzLgogICAgICAqLwotICAgIGNvaGVyZW50X3JhbSAoTk9MT0FEKSA6IEFMSUdOKDQwOTYpIHsKKyAgICBjb2hlcmVudF9yYW0gKE5PTE9BRCkgOiBBTElHTihQQUdFX1NJWkUpIHsKICAgICAgICAgX19DT0hFUkVOVF9SQU1fU1RBUlRfXyA9IC47CiAgICAgICAgICoodHpmd19jb2hlcmVudF9tZW0pCiAgICAgICAgIF9fQ09IRVJFTlRfUkFNX0VORF9VTkFMSUdORURfXyA9IC47CkBAIC0xNTAsNyArMTUxLDcgQEAKICAgICAgICAgICogYXMgZGV2aWNlIG1lbW9yeS4gIE5vIG90aGVyIHVuZXhwZWN0ZWQgZGF0YSBtdXN0IGNyZWVwIGluLgogICAgICAgICAgKiBFbnN1cmUgdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgbWVtb3J5IHBhZ2UgaXMgdW51c2VkLgogICAgICAgICAgKi8KLSAgICAgICAgLiA9IE5FWFQoNDA5Nik7CisgICAgICAgIC4gPSBORVhUKFBBR0VfU0laRSk7CiAgICAgICAgIF9fQ09IRVJFTlRfUkFNX0VORF9fID0gLjsKICAgICB9ID5SQU0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYmwyL2JsMi5sZC5TIGIvYmwyL2JsMi5sZC5TCmluZGV4IGYzYWI3MDYuLjRmZTc4ZjkgMTAwNjQ0Ci0tLSBhL2JsMi9ibDIubGQuUworKysgYi9ibDIvYmwyLmxkLlMKQEAgLTUsNiArNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgorI2luY2x1ZGUgPHhsYXRfdGFibGVzX2RlZnMuaD4KIAogT1VUUFVUX0ZPUk1BVChQTEFURk9STV9MSU5LRVJfRk9STUFUKQogT1VUUFVUX0FSQ0goUExBVEZPUk1fTElOS0VSX0FSQ0gpCkBAIC0xOCw3ICsxOSw3IEBACiBTRUNUSU9OUwogewogICAgIC4gPSBCTDJfQkFTRTsKLSAgICBBU1NFUlQoLiA9PSBBTElHTig0MDk2KSwKKyAgICBBU1NFUlQoLiA9PSBBTElHTihQQUdFX1NJWkUpLAogICAgICAgICAgICAiQkwyX0JBU0UgYWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIHBhZ2UgYm91bmRhcnkuIikKIAogI2lmIFNFUEFSQVRFX0NPREVfQU5EX1JPREFUQQpAQCAtMjcsNyArMjgsNyBAQAogICAgICAgICAqYmwyX2VudHJ5cG9pbnQubygudGV4dCopCiAgICAgICAgICooLnRleHQqKQogICAgICAgICAqKC52ZWN0b3JzKQotICAgICAgICAuID0gTkVYVCg0MDk2KTsKKyAgICAgICAgLiA9IE5FWFQoUEFHRV9TSVpFKTsKICAgICAgICAgX19URVhUX0VORF9fID0gLjsKICAgICAgfSA+UkFNCiAKQEAgLTQxLDcgKzQyLDcgQEAKICAgICAgICAgS0VFUCgqKC5pbWdfcGFyc2VyX2xpYl9kZXNjcykpCiAgICAgICAgIF9fUEFSU0VSX0xJQl9ERVNDU19FTkRfXyA9IC47CiAKLSAgICAgICAgLiA9IE5FWFQoNDA5Nik7CisgICAgICAgIC4gPSBORVhUKFBBR0VfU0laRSk7CiAgICAgICAgIF9fUk9EQVRBX0VORF9fID0gLjsKICAgICB9ID5SQU0KICNlbHNlCkBAIC02NCw3ICs2NSw3IEBACiAgICAgICAgICAqIHJlYWQtb25seSwgZXhlY3V0YWJsZS4gIE5vIFJXIGRhdGEgZnJvbSB0aGUgbmV4dCBzZWN0aW9uIG11c3QKICAgICAgICAgICogY3JlZXAgaW4uICBFbnN1cmUgdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgbWVtb3J5IHBhZ2UgaXMgdW51c2VkLgogICAgICAgICAgKi8KLSAgICAgICAgLiA9IE5FWFQoNDA5Nik7CisgICAgICAgIC4gPSBORVhUKFBBR0VfU0laRSk7CiAgICAgICAgIF9fUk9fRU5EX18gPSAuOwogICAgIH0gPlJBTQogI2VuZGlmCkBAIC0xMjAsNyArMTIxLDcgQEAKICAgICAgKiBhcmUgbm90IG1peGVkIHdpdGggbm9ybWFsIGRhdGEuICBUaGlzIGlzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgY29ycmVjdAogICAgICAqIG1lbW9yeSBhdHRyaWJ1dGVzIGZvciB0aGUgY29oZXJlbnQgZGF0YSBwYWdlIHRhYmxlcy4KICAgICAgKi8KLSAgICBjb2hlcmVudF9yYW0gKE5PTE9BRCkgOiBBTElHTig0MDk2KSB7CisgICAgY29oZXJlbnRfcmFtIChOT0xPQUQpIDogQUxJR04oUEFHRV9TSVpFKSB7CiAgICAgICAgIF9fQ09IRVJFTlRfUkFNX1NUQVJUX18gPSAuOwogICAgICAgICAqKHR6ZndfY29oZXJlbnRfbWVtKQogICAgICAgICBfX0NPSEVSRU5UX1JBTV9FTkRfVU5BTElHTkVEX18gPSAuOwpAQCAtMTI5LDcgKzEzMCw3IEBACiAgICAgICAgICAqIGFzIGRldmljZSBtZW1vcnkuICBObyBvdGhlciB1bmV4cGVjdGVkIGRhdGEgbXVzdCBjcmVlcCBpbi4KICAgICAgICAgICogRW5zdXJlIHRoZSByZXN0IG9mIHRoZSBjdXJyZW50IG1lbW9yeSBwYWdlIGlzIHVudXNlZC4KICAgICAgICAgICovCi0gICAgICAgIC4gPSBORVhUKDQwOTYpOworICAgICAgICAuID0gTkVYVChQQUdFX1NJWkUpOwogICAgICAgICBfX0NPSEVSRU5UX1JBTV9FTkRfXyA9IC47CiAgICAgfSA+UkFNCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2JsMi9ibDJfbWFpbi5jIGIvYmwyL2JsMl9tYWluLmMKaW5kZXggMGZlODJkOS4uMDE4ZGViMyAxMDA2NDQKLS0tIGEvYmwyL2JsMl9tYWluLmMKKysrIGIvYmwyL2JsMl9tYWluLmMKQEAgLTM0LDYgKzM0LDkgQEAKIAlhdXRoX21vZF9pbml0KCk7CiAjZW5kaWYgLyogVFJVU1RFRF9CT0FSRF9CT09UICovCiAKKwkvKiBpbml0aWFsaXplIGJvb3Qgc291cmNlICovCisJYmwyX3BsYXRfcHJlbG9hZF9zZXR1cCgpOworCiAJLyogTG9hZCB0aGUgc3Vic2VxdWVudCBib290bG9hZGVyIGltYWdlcy4gKi8KIAluZXh0X2JsX2VwX2luZm8gPSBibDJfbG9hZF9pbWFnZXMoKTsKIApkaWZmIC0tZ2l0IGEvYmwydS9ibDJ1LmxkLlMgYi9ibDJ1L2JsMnUubGQuUwppbmRleCBlZmFlMjkzLi5kYTU4NzE3IDEwMDY0NAotLS0gYS9ibDJ1L2JsMnUubGQuUworKysgYi9ibDJ1L2JsMnUubGQuUwpAQCAtNSw2ICs1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8cGxhdGZvcm1fZGVmLmg+CisjaW5jbHVkZSA8eGxhdF90YWJsZXNfZGVmcy5oPgogCiBPVVRQVVRfRk9STUFUKFBMQVRGT1JNX0xJTktFUl9GT1JNQVQpCiBPVVRQVVRfQVJDSChQTEFURk9STV9MSU5LRVJfQVJDSCkKQEAgLTE4LDcgKzE5LDcgQEAKIFNFQ1RJT05TCiB7CiAgICAgLiA9IEJMMlVfQkFTRTsKLSAgICBBU1NFUlQoLiA9PSBBTElHTig0MDk2KSwKKyAgICBBU1NFUlQoLiA9PSBBTElHTihQQUdFX1NJWkUpLAogICAgICAgICAgICAiQkwyVV9CQVNFIGFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSBwYWdlIGJvdW5kYXJ5LiIpCiAKICNpZiBTRVBBUkFURV9DT0RFX0FORF9ST0RBVEEKQEAgLTI3LDE0ICsyOCwxNCBAQAogICAgICAgICAqYmwydV9lbnRyeXBvaW50Lm8oLnRleHQqKQogICAgICAgICAqKC50ZXh0KikKICAgICAgICAgKigudmVjdG9ycykKLSAgICAgICAgLiA9IE5FWFQoNDA5Nik7CisgICAgICAgIC4gPSBORVhUKFBBR0VfU0laRSk7CiAgICAgICAgIF9fVEVYVF9FTkRfXyA9IC47CiAgICAgIH0gPlJBTQogCiAgICAgLnJvZGF0YSAuIDogewogICAgICAgICBfX1JPREFUQV9TVEFSVF9fID0gLjsKICAgICAgICAgKigucm9kYXRhKikKLSAgICAgICAgLiA9IE5FWFQoNDA5Nik7CisgICAgICAgIC4gPSBORVhUKFBBR0VfU0laRSk7CiAgICAgICAgIF9fUk9EQVRBX0VORF9fID0gLjsKICAgICB9ID5SQU0KICNlbHNlCkBAIC01MSw3ICs1Miw3IEBACiAgICAgICAgICAqIHJlYWQtb25seSwgZXhlY3V0YWJsZS4gIE5vIFJXIGRhdGEgZnJvbSB0aGUgbmV4dCBzZWN0aW9uIG11c3QKICAgICAgICAgICogY3JlZXAgaW4uICBFbnN1cmUgdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgbWVtb3J5IHBhZ2UgaXMgdW51c2VkLgogICAgICAgICAgKi8KLSAgICAgICAgLiA9IE5FWFQoNDA5Nik7CisgICAgICAgIC4gPSBORVhUKFBBR0VfU0laRSk7CiAgICAgICAgIF9fUk9fRU5EX18gPSAuOwogICAgIH0gPlJBTQogI2VuZGlmCkBAIC0xMDcsNyArMTA4LDcgQEAKICAgICAgKiBhcmUgbm90IG1peGVkIHdpdGggbm9ybWFsIGRhdGEuICBUaGlzIGlzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgY29ycmVjdAogICAgICAqIG1lbW9yeSBhdHRyaWJ1dGVzIGZvciB0aGUgY29oZXJlbnQgZGF0YSBwYWdlIHRhYmxlcy4KICAgICAgKi8KLSAgICBjb2hlcmVudF9yYW0gKE5PTE9BRCkgOiBBTElHTig0MDk2KSB7CisgICAgY29oZXJlbnRfcmFtIChOT0xPQUQpIDogQUxJR04oUEFHRV9TSVpFKSB7CiAgICAgICAgIF9fQ09IRVJFTlRfUkFNX1NUQVJUX18gPSAuOwogICAgICAgICAqKHR6ZndfY29oZXJlbnRfbWVtKQogICAgICAgICBfX0NPSEVSRU5UX1JBTV9FTkRfVU5BTElHTkVEX18gPSAuOwpAQCAtMTE2LDcgKzExNyw3IEBACiAgICAgICAgICAqIGFzIGRldmljZSBtZW1vcnkuICBObyBvdGhlciB1bmV4cGVjdGVkIGRhdGEgbXVzdCBjcmVlcCBpbi4KICAgICAgICAgICogRW5zdXJlIHRoZSByZXN0IG9mIHRoZSBjdXJyZW50IG1lbW9yeSBwYWdlIGlzIHVudXNlZC4KICAgICAgICAgICovCi0gICAgICAgIC4gPSBORVhUKDQwOTYpOworICAgICAgICAuID0gTkVYVChQQUdFX1NJWkUpOwogICAgICAgICBfX0NPSEVSRU5UX1JBTV9FTkRfXyA9IC47CiAgICAgfSA+UkFNCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2JsMzEvYWFyY2g2NC9jcmFzaF9yZXBvcnRpbmcuUyBiL2JsMzEvYWFyY2g2NC9jcmFzaF9yZXBvcnRpbmcuUwppbmRleCAzNGU0ZGNkLi5jZjMyYjMxIDEwMDY0NAotLS0gYS9ibDMxL2FhcmNoNjQvY3Jhc2hfcmVwb3J0aW5nLlMKKysrIGIvYmwzMS9hYXJjaDY0L2NyYXNoX3JlcG9ydGluZy5TCkBAIC00Niw4ICs0Niw3IEBACiAJCSJ0cGlkcnJvX2VsMCIsICJkYWNyMzJfZWwyIiwgImlmc3IzMl9lbDIiLCAicGFyX2VsMSIsXAogCQkibXBpZHJfZWwxIiwgImFmc3IwX2VsMSIsICJhZnNyMV9lbDEiLCAiY29udGV4dGlkcl9lbDEiLFwKIAkJInZiYXJfZWwxIiwgImNudHBfY3RsX2VsMCIsICJjbnRwX2N2YWxfZWwwIiwgImNudHZfY3RsX2VsMCIsXAotCQkiY250dl9jdmFsX2VsMCIsICJjbnRrY3RsX2VsMSIsICJmcGV4YzMyX2VsMiIsICJzcF9lbDAiLFwKLQkJImlzcl9lbDEiLCAiIgorCQkiY250dl9jdmFsX2VsMCIsICJjbnRrY3RsX2VsMSIsICJzcF9lbDAiLCAiaXNyX2VsMSIsICIiCiAKIHBhbmljX21zZzoKIAkuYXNjaXogIlBBTklDIGluIEVMMyBhdCB4MzAgPSAweCIKQEAgLTMxMyw5ICszMTIsOCBAQAogCW1ycwl4MTUsIGNudHZfY3ZhbF9lbDAKIAlibAlzdHJfaW5fY3Jhc2hfYnVmX3ByaW50CiAJbXJzCXg4LCBjbnRrY3RsX2VsMQotCW1ycwl4OSwgZnBleGMzMl9lbDIKLQltcnMJeDEwLCBzcF9lbDAKLQltcnMJeDExLCBpc3JfZWwxCisJbXJzCXg5LCBzcF9lbDAKKwltcnMJeDEwLCBpc3JfZWwxCiAJYmwJc3RyX2luX2NyYXNoX2J1Zl9wcmludAogCiAJLyogR2V0IHRoZSBjcHUgc3BlY2lmaWMgcmVnaXN0ZXJzIHRvIHJlcG9ydCAqLwpkaWZmIC0tZ2l0IGEvYmwzMS9ibDMxLmxkLlMgYi9ibDMxL2JsMzEubGQuUwppbmRleCA0ODg2MWY0Li5kZDA0NmM0IDEwMDY0NAotLS0gYS9ibDMxL2JsMzEubGQuUworKysgYi9ibDMxL2JsMzEubGQuUwpAQCAtNSw2ICs1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8cGxhdGZvcm1fZGVmLmg+CisjaW5jbHVkZSA8eGxhdF90YWJsZXNfZGVmcy5oPgogCiBPVVRQVVRfRk9STUFUKFBMQVRGT1JNX0xJTktFUl9GT1JNQVQpCiBPVVRQVVRfQVJDSChQTEFURk9STV9MSU5LRVJfQVJDSCkKQEAgLTIyLDcgKzIzLDcgQEAKIFNFQ1RJT05TCiB7CiAgICAgLiA9IEJMMzFfQkFTRTsKLSAgICBBU1NFUlQoLiA9PSBBTElHTig0MDk2KSwKKyAgICBBU1NFUlQoLiA9PSBBTElHTihQQUdFX1NJWkUpLAogICAgICAgICAgICAiQkwzMV9CQVNFIGFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSBwYWdlIGJvdW5kYXJ5LiIpCiAKICNpZiBTRVBBUkFURV9DT0RFX0FORF9ST0RBVEEKQEAgLTMxLDcgKzMyLDcgQEAKICAgICAgICAgKmJsMzFfZW50cnlwb2ludC5vKC50ZXh0KikKICAgICAgICAgKigudGV4dCopCiAgICAgICAgICooLnZlY3RvcnMpCi0gICAgICAgIC4gPSBORVhUKDQwOTYpOworICAgICAgICAuID0gTkVYVChQQUdFX1NJWkUpOwogICAgICAgICBfX1RFWFRfRU5EX18gPSAuOwogICAgIH0gPlJBTQogCkBAIC02Miw3ICs2MywxMSBAQAogICAgICAgICBLRUVQKCooY3B1X29wcykpCiAgICAgICAgIF9fQ1BVX09QU19FTkRfXyA9IC47CiAKLSAgICAgICAgLiA9IE5FWFQoNDA5Nik7CisgICAgICAgIC8qIFBsYWNlIHB1YnN1YiBzZWN0aW9ucyBmb3IgZXZlbnRzICovCisgICAgICAgIC4gPSBBTElHTig4KTsKKyNpbmNsdWRlIDxwdWJzdWJfZXZlbnRzLmg+CisKKyAgICAgICAgLiA9IE5FWFQoUEFHRV9TSVpFKTsKICAgICAgICAgX19ST0RBVEFfRU5EX18gPSAuOwogICAgIH0gPlJBTQogI2Vsc2UKQEAgLTk1LDYgKzEwMCwxMCBAQAogICAgICAgICBLRUVQKCooY3B1X29wcykpCiAgICAgICAgIF9fQ1BVX09QU19FTkRfXyA9IC47CiAKKyAgICAgICAgLyogUGxhY2UgcHVic3ViIHNlY3Rpb25zIGZvciBldmVudHMgKi8KKyAgICAgICAgLiA9IEFMSUdOKDgpOworI2luY2x1ZGUgPHB1YnN1Yl9ldmVudHMuaD4KKwogICAgICAgICAqKC52ZWN0b3JzKQogICAgICAgICBfX1JPX0VORF9VTkFMSUdORURfXyA9IC47CiAgICAgICAgIC8qCkBAIC0xMDIsNyArMTExLDcgQEAKICAgICAgICAgICogZXhlY3V0YWJsZS4gIE5vIFJXIGRhdGEgZnJvbSB0aGUgbmV4dCBzZWN0aW9uIG11c3QgY3JlZXAgaW4uCiAgICAgICAgICAqIEVuc3VyZSB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCBtZW1vcnkgcGFnZSBpcyB1bnVzZWQuCiAgICAgICAgICAqLwotICAgICAgICAuID0gTkVYVCg0MDk2KTsKKyAgICAgICAgLiA9IE5FWFQoUEFHRV9TSVpFKTsKICAgICAgICAgX19ST19FTkRfXyA9IC47CiAgICAgfSA+UkFNCiAjZW5kaWYKQEAgLTExMCw2ICsxMTksMjMgQEAKICAgICBBU1NFUlQoX19DUFVfT1BTX0VORF9fID4gX19DUFVfT1BTX1NUQVJUX18sCiAgICAgICAgICAgICJjcHVfb3BzIG5vdCBkZWZpbmVkIGZvciB0aGlzIHBsYXRmb3JtLiIpCiAKKyNpZiBFTkFCTEVfU1BNCisgICAgLyoKKyAgICAgKiBFeGNlcHRpb24gdmVjdG9ycyBvZiB0aGUgU1BNIHNoaW0gbGF5ZXIuIFRoZXkgbXVzdCBiZSBhbGlnbmVkIHRvIGEgMksKKyAgICAgKiBhZGRyZXNzLCBidXQgd2UgbmVlZCB0byBwbGFjZSB0aGVtIGluIGEgc2VwYXJhdGUgcGFnZSBzbyB0aGF0IHdlIGNhbiBzZXQKKyAgICAgKiBpbmRpdmlkdWFsIHBlcm1pc3Npb25zIHRvIHRoZW0sIHNvIHRoZSBhY3R1YWwgYWxpZ25tZW50IG5lZWRlZCBpcyA0Sy4KKyAgICAgKgorICAgICAqIFRoZXJlJ3Mgbm8gbmVlZCB0byBpbmNsdWRlIHRoaXMgaW50byB0aGUgUk8gc2VjdGlvbiBvZiBCTDMxIGJlY2F1c2UgaXQKKyAgICAgKiBkb2Vzbid0IG5lZWQgdG8gYmUgYWNjZXNzZWQgYnkgQkwzMS4KKyAgICAgKi8KKyAgICBzcG1fc2hpbV9leGNlcHRpb25zIDogQUxJR04oUEFHRV9TSVpFKSB7CisgICAgICAgIF9fU1BNX1NISU1fRVhDRVBUSU9OU19TVEFSVF9fID0gLjsKKyAgICAgICAgKiguc3BtX3NoaW1fZXhjZXB0aW9ucykKKyAgICAgICAgLiA9IE5FWFQoUEFHRV9TSVpFKTsKKyAgICAgICAgX19TUE1fU0hJTV9FWENFUFRJT05TX0VORF9fID0gLjsKKyAgICB9ID5SQU0KKyNlbmRpZgorCiAgICAgLyoKICAgICAgKiBEZWZpbmUgYSBsaW5rZXIgc3ltYm9sIHRvIG1hcmsgc3RhcnQgb2YgdGhlIFJXIG1lbW9yeSBhcmVhIGZvciB0aGlzCiAgICAgICogaW1hZ2UuCkBAIC0xOTQsNiArMjIwLDEzIEBACiAgICAgICogdGhlIC5ic3Mgc2VjdGlvbiBhbmQgZWxpbWluYXRlcyB0aGUgdW5lY2Vzc2FyeSB6ZXJvIGluaXQKICAgICAgKi8KICAgICB4bGF0X3RhYmxlIChOT0xPQUQpIDogeworI2lmIEVOQUJMRV9TUE0KKyAgICAgICAgX19TUF9JTUFHRV9YTEFUX1RBQkxFU19TVEFSVF9fID0gLjsKKyAgICAgICAgKnNlY3VyZV9wYXJ0aXRpb24qLm8oeGxhdF90YWJsZSkKKyAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgaXMgZW1wdHkuICovCisgICAgICAgIC4gPSBORVhUKFBBR0VfU0laRSk7CisgICAgICAgIF9fU1BfSU1BR0VfWExBVF9UQUJMRVNfRU5EX18gPSAuOworI2VuZGlmCiAgICAgICAgICooeGxhdF90YWJsZSkKICAgICB9ID5SQU0KIApAQCAtMjA0LDcgKzIzNyw3IEBACiAgICAgICogYXJlIG5vdCBtaXhlZCB3aXRoIG5vcm1hbCBkYXRhLiAgVGhpcyBpcyByZXF1aXJlZCB0byBzZXQgdXAgdGhlIGNvcnJlY3QKICAgICAgKiBtZW1vcnkgYXR0cmlidXRlcyBmb3IgdGhlIGNvaGVyZW50IGRhdGEgcGFnZSB0YWJsZXMuCiAgICAgICovCi0gICAgY29oZXJlbnRfcmFtIChOT0xPQUQpIDogQUxJR04oNDA5NikgeworICAgIGNvaGVyZW50X3JhbSAoTk9MT0FEKSA6IEFMSUdOKFBBR0VfU0laRSkgewogICAgICAgICBfX0NPSEVSRU5UX1JBTV9TVEFSVF9fID0gLjsKICAgICAgICAgLyoKICAgICAgICAgICogQmFrZXJ5IGxvY2tzIGFyZSBzdG9yZWQgaW4gY29oZXJlbnQgbWVtb3J5CkBAIC0yMTksNyArMjUyLDcgQEAKICAgICAgICAgICogYXMgZGV2aWNlIG1lbW9yeS4gIE5vIG90aGVyIHVuZXhwZWN0ZWQgZGF0YSBtdXN0IGNyZWVwIGluLgogICAgICAgICAgKiBFbnN1cmUgdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgbWVtb3J5IHBhZ2UgaXMgdW51c2VkLgogICAgICAgICAgKi8KLSAgICAgICAgLiA9IE5FWFQoNDA5Nik7CisgICAgICAgIC4gPSBORVhUKFBBR0VfU0laRSk7CiAgICAgICAgIF9fQ09IRVJFTlRfUkFNX0VORF9fID0gLjsKICAgICB9ID5SQU0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYmwzMS9ibDMxLm1rIGIvYmwzMS9ibDMxLm1rCmluZGV4IDBjOWUzOTMuLmZkY2M5MzEgMTAwNjQ0Ci0tLSBhL2JsMzEvYmwzMS5taworKysgYi9ibDMxL2JsMzEubWsKQEAgLTQsNiArNCwxNSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAjCiAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEluY2x1ZGUgU1BNIE1ha2VmaWxlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWZlcSAoJHtFTkFCTEVfU1BNfSwxKQorJChpbmZvIEluY2x1ZGluZyBTUE0gbWFrZWZpbGUpCitpbmNsdWRlIHNlcnZpY2VzL3N0ZF9zdmMvc3BtL3NwbS5taworZW5kaWYKKworCiBpbmNsdWRlIGxpYi9wc2NpL3BzY2lfbGliLm1rCiAKIEJMMzFfU09VUkNFUwkJKz0JYmwzMS9ibDMxX21haW4uYwkJCQlcCkBAIC0xNSwxMiArMjQsNDAgQEAKIAkJCQljb21tb24vcnVudGltZV9zdmMuYwkJCQlcCiAJCQkJcGxhdC9jb21tb24vYWFyY2g2NC9wbGF0Zm9ybV9tcF9zdGFjay5TCQlcCiAJCQkJc2VydmljZXMvc3RkX3N2Yy9zdGRfc3ZjX3NldHVwLmMJCVwKLQkJCQkke1BTQ0lfTElCX1NPVVJDRVN9CisJCQkJJHtQU0NJX0xJQl9TT1VSQ0VTfQkJCQlcCisJCQkJJHtTUE1fU09VUkNFU30JCQkJCVwKKwogCiBpZmVxICgke0VOQUJMRV9QTUZ9LCAxKQogQkwzMV9TT1VSQ0VTCQkrPQlsaWIvcG1mL3BtZl9tYWluLmMKIGVuZGlmCiAKK2lmZXEgKCR7RUwzX0VYQ0VQVElPTl9IQU5ETElOR30sMSkKK0JMMzFfU09VUkNFUwkJKz0JYmwzMS9laGYuYworZW5kaWYKKworaWZlcSAoJHtTREVJX1NVUFBPUlR9LDEpCitpZmVxICgke0VMM19FWENFUFRJT05fSEFORExJTkd9LDApCisgICQoZXJyb3IgRUwzX0VYQ0VQVElPTl9IQU5ETElORyBtdXN0IGJlIDEgZm9yIFNERUkgc3VwcG9ydCkKK2VuZGlmCitCTDMxX1NPVVJDRVMJCSs9CXNlcnZpY2VzL3N0ZF9zdmMvc2RlaS9zZGVpX2V2ZW50LmMJXAorCQkJCXNlcnZpY2VzL3N0ZF9zdmMvc2RlaS9zZGVpX2ludHJfbWdtdC5jCVwKKwkJCQlzZXJ2aWNlcy9zdGRfc3ZjL3NkZWkvc2RlaV9tYWluLmMJXAorCQkJCXNlcnZpY2VzL3N0ZF9zdmMvc2RlaS9zZGVpX3N0YXRlLmMKK2VuZGlmCisKK2lmZXEgKCR7RU5BQkxFX1NQRV9GT1JfTE9XRVJfRUxTfSwxKQorQkwzMV9TT1VSQ0VTCQkrPQlsaWIvZXh0ZW5zaW9ucy9zcGUvc3BlLmMKK2VuZGlmCisKK2lmZXEgKCR7RU5BQkxFX0FNVX0sMSkKK0JMMzFfU09VUkNFUwkJKz0JbGliL2V4dGVuc2lvbnMvYW11L2FhcmNoNjQvYW11LmMKK2VuZGlmCisKK2lmZXEgKCR7RU5BQkxFX1NWRV9GT1JfTlN9LDEpCitCTDMxX1NPVVJDRVMJCSs9CWxpYi9leHRlbnNpb25zL3N2ZS9zdmUuYworZW5kaWYKKwogQkwzMV9MSU5LRVJGSUxFCQk6PQlibDMxL2JsMzEubGQuUwogCiAjIEZsYWcgdXNlZCB0byBpbmRpY2F0ZSBpZiBDcmFzaCByZXBvcnRpbmcgdmlhIGNvbnNvbGUgc2hvdWxkIGJlIGluY2x1ZGVkCkBAIC0zMCw0ICs2Nyw5IEBACiBlbmRpZgogCiAkKGV2YWwgJChjYWxsIGFzc2VydF9ib29sZWFuLENSQVNIX1JFUE9SVElORykpCiskKGV2YWwgJChjYWxsIGFzc2VydF9ib29sZWFuLEVMM19FWENFUFRJT05fSEFORExJTkcpKQorJChldmFsICQoY2FsbCBhc3NlcnRfYm9vbGVhbixTREVJX1NVUFBPUlQpKQorCiAkKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsQ1JBU0hfUkVQT1JUSU5HKSkKKyQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxFTDNfRVhDRVBUSU9OX0hBTkRMSU5HKSkKKyQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxTREVJX1NVUFBPUlQpKQpkaWZmIC0tZ2l0IGEvYmwzMS9ibDMxX21haW4uYyBiL2JsMzEvYmwzMV9tYWluLmMKaW5kZXggNGE4OGJkNy4uYTM0Y2Y4NiAxMDA2NDQKLS0tIGEvYmwzMS9ibDMxX21haW4uYworKysgYi9ibDMxL2JsMzFfbWFpbi5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8Y29uc29sZS5oPgogI2luY2x1ZGUgPGNvbnRleHRfbWdtdC5oPgogI2luY2x1ZGUgPGRlYnVnLmg+CisjaW5jbHVkZSA8ZWhmLmg+CiAjaW5jbHVkZSA8cGxhdGZvcm0uaD4KICNpbmNsdWRlIDxwbWYuaD4KICNpbmNsdWRlIDxydW50aW1lX2luc3RyLmg+CkBAIC03OSw2ICs4MCwxMSBAQAogCS8qIEluaXRpYWxpc2UgaGVscGVyIGxpYnJhcmllcyAqLwogCWJsMzFfbGliX2luaXQoKTsKIAorI2lmIEVMM19FWENFUFRJT05fSEFORExJTkcKKwlJTkZPKCJCTDMxOiBJbml0aWFsaXNpbmcgRXhjZXB0aW9uIEhhbmRsaW5nIEZyYW1ld29ya1xuIik7CisJZWhmX2luaXQoKTsKKyNlbmRpZgorCiAJLyogSW5pdGlhbGl6ZSB0aGUgcnVudGltZSBzZXJ2aWNlcyBlLmcuIHBzY2kuICovCiAJSU5GTygiQkwzMTogSW5pdGlhbGl6aW5nIHJ1bnRpbWUgc2VydmljZXNcbiIpOwogCXJ1bnRpbWVfc3ZjX2luaXQoKTsKZGlmZiAtLWdpdCBhL2JsMzEvZWhmLmMgYi9ibDMxL2VoZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZjJkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9ibDMxL2VoZi5jCkBAIC0wLDAgKzEsNTA0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisvKgorICogRXhjZXB0aW9uIGhhbmRsZXJzIGF0IEVMMywgdGhlaXIgcHJpb3JpdHkgbGV2ZWxzLCBhbmQgbWFuYWdlbWVudC4KKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3B1X2RhdGEuaD4KKyNpbmNsdWRlIDxkZWJ1Zy5oPgorI2luY2x1ZGUgPGVoZi5oPgorI2luY2x1ZGUgPGdpY19jb21tb24uaD4KKyNpbmNsdWRlIDxpbnRlcnJ1cHRfbWdtdC5oPgorI2luY2x1ZGUgPHBsYXRmb3JtLmg+CisjaW5jbHVkZSA8cHVic3ViX2V2ZW50cy5oPgorCisvKiBPdXRwdXQgRUhGIGxvZ3MgYXMgdmVyYm9zZSAqLworI2RlZmluZSBFSEZfTE9HKC4uLikJVkVSQk9TRSgiRUhGOiAiIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIEVIRl9JTlZBTElEX0lEWAkoLTEpCisKKy8qIEZvciBhIHZhbGlkIGhhbmRsZXIsIHJldHVybiB0aGUgYWN0dWFsIGZ1bmN0aW9uIHBvaW50ZXI7IG90aGVyd2lzZSwgMC4gKi8KKyNkZWZpbmUgUkFXX0hBTkRMRVIoaCkgXAorCSgoZWhmX2hhbmRsZXJfdCkgKChoICYgX0VIRl9QUklfVkFMSUQpID8gKGggJiB+X0VIRl9QUklfVkFMSUQpIDogMCkpCisKKyNkZWZpbmUgUFJJX0JJVChpZHgpCSgoKGVoZl9wcmlfYml0c190KSAxKSA8PCBpZHgpCisKKy8qCisgKiBDb252ZXJ0IGluZGV4IGludG8gc2VjdXJlIHByaW9yaXR5IHVzaW5nIHRoZSBwbGF0Zm9ybS1kZWZpbmVkIHByaW9yaXR5IGJpdHMKKyAqIGZpZWxkLgorICovCisjZGVmaW5lIElEWF9UT19QUkkoaWR4KSBcCisJKChpZHggPDwgKDcgLSBleGNlcHRpb25fZGF0YS5wcmlfYml0cykpICYgMHg3ZikKKworLyogQ2hlY2sgd2hldGhlciBhIGdpdmVuIGluZGV4IGlzIHZhbGlkICovCisjZGVmaW5lIElTX0lEWF9WQUxJRChpZHgpIFwKKwkoKGV4Y2VwdGlvbl9kYXRhLmVoZl9wcmlvcml0aWVzW2lkeF0uZWhmX2hhbmRsZXIgJiBfRUhGX1BSSV9WQUxJRCkgIT0gMCkKKworLyogUmV0dXJucyB3aGV0aGVyIGdpdmVuIHByaW9yaXR5IGlzIGluIHNlY3VyZSBwcmlvcml0eSByYW5nZSAqLworI2RlZmluZSBJU19QUklfU0VDVVJFKHByaSkJKChwcmkgJiAweDgwKSA9PSAwKQorCisvKiBUbyBiZSBkZWZpbmVkIGJ5IHRoZSBwbGF0Zm9ybSAqLworZXh0ZXJuIGNvbnN0IGVoZl9wcmlvcml0aWVzX3QgZXhjZXB0aW9uX2RhdGE7CisKKy8qIFRyYW5zbGF0ZSBwcmlvcml0eSB0byB0aGUgaW5kZXggaW4gdGhlIHByaW9yaXR5IGFycmF5ICovCitzdGF0aWMgaW50IHByaV90b19pZHgodW5zaWduZWQgaW50IHByaW9yaXR5KQoreworCWludCBpZHg7CisKKwlpZHggPSBFSEZfUFJJX1RPX0lEWChwcmlvcml0eSwgZXhjZXB0aW9uX2RhdGEucHJpX2JpdHMpOworCWFzc2VydCgoaWR4ID49IDApICYmIChpZHggPCBleGNlcHRpb25fZGF0YS5udW1fcHJpb3JpdGllcykpOworCWFzc2VydChJU19JRFhfVkFMSUQoaWR4KSk7CisKKwlyZXR1cm4gaWR4OworfQorCisvKiBSZXR1cm4gd2hldGhlciB0aGVyZSBhcmUgb3V0c3RhbmRpbmcgcHJpb3JpdHkgYWN0aXZhdGlvbiAqLworc3RhdGljIGludCBoYXNfdmFsaWRfcHJpX2FjdGl2YXRpb25zKHBlX2V4Y19kYXRhX3QgKnBlX2RhdGEpCit7CisJcmV0dXJuIHBlX2RhdGEtPmFjdGl2ZV9wcmlfYml0cyAhPSAwOworfQorCitzdGF0aWMgcGVfZXhjX2RhdGFfdCAqdGhpc19jcHVfZGF0YSh2b2lkKQoreworCXJldHVybiAmZ2V0X2NwdV9kYXRhKGVoZl9kYXRhKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgY3VycmVudCBwcmlvcml0eSBpbmRleCBvZiB0aGlzIENQVS4gSWYgbm8gcHJpb3JpdHkgaXMgYWN0aXZlLAorICogcmV0dXJuIEVIRl9JTlZBTElEX0lEWC4KKyAqLworc3RhdGljIGludCBnZXRfcGVfaGlnaGVzdF9hY3RpdmVfaWR4KHBlX2V4Y19kYXRhX3QgKnBlX2RhdGEpCit7CisJaWYgKCFoYXNfdmFsaWRfcHJpX2FjdGl2YXRpb25zKHBlX2RhdGEpKQorCQlyZXR1cm4gRUhGX0lOVkFMSURfSURYOworCisJLyogQ3VycmVudCBwcmlvcml0eSBpcyB0aGUgcmlnaHQtbW9zdCBiaXQgKi8KKwlyZXR1cm4gX19idWlsdGluX2N0eihwZV9kYXRhLT5hY3RpdmVfcHJpX2JpdHMpOworfQorCisvKgorICogTWFyayBwcmlvcml0eSBhY3RpdmUgYnkgc2V0dGluZyB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gYWN0aXZlX3ByaV9iaXRzIGFuZAorICogcHJvZ3JhbW1pbmcgdGhlIHByaW9yaXR5IG1hc2suCisgKgorICogVGhpcyBBUEkgaXMgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGRlbGVnYXRpbmcgdG8gbG93ZXIgRUxzIG90aGVyIHRoYW4gZm9yCisgKiBpbnRlcnJ1cHRzOyBlLmcuIHdoaWxlIGhhbmRsaW5nIHN5bmNocm9ub3VzIGV4Y2VwdGlvbnMuCisgKgorICogVGhpcyBBUEkgaXMgZXhwZWN0ZWQgdG8gYmUgaW52b2tlZCBiZWZvcmUgcmVzdG9yaW5nIGNvbnRleHQgKFNlY3VyZSBvcgorICogTm9uLXNlY3VyZSkgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSByZXNwZWN0aXZlIGRpc3BhdGNoLgorICovCit2b2lkIGVoZl9hY3RpdmF0ZV9wcmlvcml0eSh1bnNpZ25lZCBpbnQgcHJpb3JpdHkpCit7CisJaW50IGlkeCwgY3VyX3ByaV9pZHg7CisJdW5zaWduZWQgaW50IG9sZF9tYXNrLCBydW5fcHJpOworCXBlX2V4Y19kYXRhX3QgKnBlX2RhdGEgPSB0aGlzX2NwdV9kYXRhKCk7CisKKwkvKgorCSAqIFF1ZXJ5IGludGVycnVwdCBjb250cm9sbGVyIGZvciB0aGUgcnVubmluZyBwcmlvcml0eSwgb3IgaWRsZSBwcmlvcml0eQorCSAqIGlmIG5vIGludGVycnVwdHMgYXJlIGJlaW5nIGhhbmRsZWQuIFRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgbXVzdCBiZQorCSAqIGxlc3MgKGhpZ2hlciBwcmlvcml0eSkgdGhhbiB0aGUgYWN0aXZlIHJ1bm5pbmcgcHJpb3JpdHkuCisJICovCisJcnVuX3ByaSA9IHBsYXRfaWNfZ2V0X3J1bm5pbmdfcHJpb3JpdHkoKTsKKwlpZiAocHJpb3JpdHkgPj0gcnVuX3ByaSkgeworCQlFUlJPUigiUnVubmluZyBwcmlvcml0eSBoaWdoZXIgKDB4JXgpIHRoYW4gcmVxdWVzdGVkICgweCV4KVxuIiwKKwkJCQlydW5fcHJpLCBwcmlvcml0eSk7CisJCXBhbmljKCk7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSB3ZXJlIHByaW9yaXR5IGFjdGl2YXRpb25zIGFscmVhZHksIHRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkKKwkgKiBtdXN0IGJlIGxlc3MgKGhpZ2hlciBwcmlvcml0eSkgdGhhbiB0aGUgY3VycmVudCBoaWdoZXN0IHByaW9yaXR5CisJICogYWN0aXZhdGlvbiBzbyBmYXIuCisJICovCisJY3VyX3ByaV9pZHggPSBnZXRfcGVfaGlnaGVzdF9hY3RpdmVfaWR4KHBlX2RhdGEpOworCWlkeCA9IHByaV90b19pZHgocHJpb3JpdHkpOworCWlmICgoY3VyX3ByaV9pZHggIT0gRUhGX0lOVkFMSURfSURYKSAmJiAoaWR4ID49IGN1cl9wcmlfaWR4KSkgeworCQlFUlJPUigiQWN0aXZhdGlvbiBwcmlvcml0eSBtaXNtYXRjaDogcmVxPTB4JXggY3VycmVudD0weCV4XG4iLAorCQkJCXByaW9yaXR5LCBJRFhfVE9fUFJJKGN1cl9wcmlfaWR4KSk7CisJCXBhbmljKCk7CisJfQorCisJLyogU2V0IHRoZSBiaXQgY29ycmVzcG9uZGluZyB0byB0aGUgcmVxdWVzdGVkIHByaW9yaXR5ICovCisJcGVfZGF0YS0+YWN0aXZlX3ByaV9iaXRzIHw9IFBSSV9CSVQoaWR4KTsKKworCS8qCisJICogUHJvZ3JhbSBwcmlvcml0eSBtYXNrIGZvciB0aGUgYWN0aXZhdGVkIGxldmVsLiBDaGVjayB0aGF0IHRoZSBuZXcKKwkgKiBwcmlvcml0eSBtYXNrIGlzIHNldHRpbmcgYSBoaWdoZXIgcHJpb3JpdHkgbGV2ZWwgdGhhbiB0aGUgZXhpc3RpbmcKKwkgKiBtYXNrLgorCSAqLworCW9sZF9tYXNrID0gcGxhdF9pY19zZXRfcHJpb3JpdHlfbWFzayhwcmlvcml0eSk7CisJaWYgKHByaW9yaXR5ID49IG9sZF9tYXNrKSB7CisJCUVSUk9SKCJSZXF1ZXN0ZWQgcHJpb3JpdHkgKDB4JXgpIGxvd2VyIHRoYW4gUHJpb3JpdHkgTWFzayAoMHgleClcbiIsCisJCQkJcHJpb3JpdHksIG9sZF9tYXNrKTsKKwkJcGFuaWMoKTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGl2YXRpb24sIHNhdmUgdGhlIHByaW9yaXR5IG1hc2suIFRoaXMgd2lsbCBiZQorCSAqIHJlc3RvcmVkIGFmdGVyIHRoZSBsYXN0IGRlYWN0aXZhdGlvbi4KKwkgKi8KKwlpZiAoY3VyX3ByaV9pZHggPT0gRUhGX0lOVkFMSURfSURYKQorCQlwZV9kYXRhLT5pbml0X3ByaV9tYXNrID0gb2xkX21hc2s7CisKKwlFSEZfTE9HKCJhY3RpdmF0ZSBwcmlvPSVkXG4iLCBnZXRfcGVfaGlnaGVzdF9hY3RpdmVfaWR4KHBlX2RhdGEpKTsKK30KKworLyoKKyAqIE1hcmsgcHJpb3JpdHkgaW5hY3RpdmUgYnkgY2xlYXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIGFjdGl2ZV9wcmlfYml0cywKKyAqIGFuZCBwcm9ncmFtbWluZyB0aGUgcHJpb3JpdHkgbWFzay4KKyAqCisgKiBUaGlzIEFQSSBpcyBleHBlY3RlZCB0byBiZSB1c2VkIGFzIHBhcnQgb2YgZGVsZWdhdGluZyB0byB0byBsb3dlciBFTHMgb3RoZXIKKyAqIHRoYW4gZm9yIGludGVycnVwdHM7IGUuZy4gd2hpbGUgaGFuZGxpbmcgc3luY2hyb25vdXMgZXhjZXB0aW9ucy4KKyAqCisgKiBUaGlzIEFQSSBpcyBleHBlY3RlZCB0byBiZSBpbnZva2VkIGFmdGVyIHNhdmluZyBjb250ZXh0IChTZWN1cmUgb3IKKyAqIE5vbi1zZWN1cmUpLCBoYXZpbmcgY29uY2x1ZGVkIHRoZSByZXNwZWN0aXZlIGRpc3BhdGNoLgorICovCit2b2lkIGVoZl9kZWFjdGl2YXRlX3ByaW9yaXR5KHVuc2lnbmVkIGludCBwcmlvcml0eSkKK3sKKwlpbnQgaWR4LCBjdXJfcHJpX2lkeDsKKwlwZV9leGNfZGF0YV90ICpwZV9kYXRhID0gdGhpc19jcHVfZGF0YSgpOworCXVuc2lnbmVkIGludCBvbGRfbWFzaywgcnVuX3ByaTsKKworCS8qCisJICogUXVlcnkgaW50ZXJydXB0IGNvbnRyb2xsZXIgZm9yIHRoZSBydW5uaW5nIHByaW9yaXR5LCBvciBpZGxlIHByaW9yaXR5CisJICogaWYgbm8gaW50ZXJydXB0cyBhcmUgYmVpbmcgaGFuZGxlZC4gVGhlIHJlcXVlc3RlZCBwcmlvcml0eSBtdXN0IGJlCisJICogbGVzcyAoaGlnaGVyIHByaW9yaXR5KSB0aGFuIHRoZSBhY3RpdmUgcnVubmluZyBwcmlvcml0eS4KKwkgKi8KKwlydW5fcHJpID0gcGxhdF9pY19nZXRfcnVubmluZ19wcmlvcml0eSgpOworCWlmIChwcmlvcml0eSA+PSBydW5fcHJpKSB7CisJCUVSUk9SKCJSdW5uaW5nIHByaW9yaXR5IGhpZ2hlciAoMHgleCkgdGhhbiByZXF1ZXN0ZWQgKDB4JXgpXG4iLAorCQkJCXJ1bl9wcmksIHByaW9yaXR5KTsKKwkJcGFuaWMoKTsKKwl9CisKKwkvKgorCSAqIERlYWN0aXZhdGlvbiBpcyBhbGxvd2VkIG9ubHkgd2hlbiB0aGVyZSBhcmUgcHJpb3JpdHkgYWN0aXZhdGlvbnMsIGFuZAorCSAqIHRoZSBkZWFjdGl2YXRpb24gcHJpb3JpdHkgbGV2ZWwgbXVzdCBtYXRjaCB0aGUgY3VycmVudCBhY3RpdmF0ZWQKKwkgKiBwcmlvcml0eS4KKwkgKi8KKwljdXJfcHJpX2lkeCA9IGdldF9wZV9oaWdoZXN0X2FjdGl2ZV9pZHgocGVfZGF0YSk7CisJaWR4ID0gcHJpX3RvX2lkeChwcmlvcml0eSk7CisJaWYgKChjdXJfcHJpX2lkeCA9PSBFSEZfSU5WQUxJRF9JRFgpIHx8IChpZHggIT0gY3VyX3ByaV9pZHgpKSB7CisJCUVSUk9SKCJEZWFjdGl2YXRpb24gcHJpb3JpdHkgbWlzbWF0Y2g6IHJlcT0weCV4IGN1cnJlbnQ9MHgleFxuIiwKKwkJCQlwcmlvcml0eSwgSURYX1RPX1BSSShjdXJfcHJpX2lkeCkpOworCQlwYW5pYygpOworCX0KKworCS8qIENsZWFyIGJpdCBjb3JyZXNwb25kaW5nIHRvIGhpZ2hlc3QgcHJpb3JpdHkgKi8KKwlwZV9kYXRhLT5hY3RpdmVfcHJpX2JpdHMgJj0gKHBlX2RhdGEtPmFjdGl2ZV9wcmlfYml0cyAtIDEpOworCisJLyoKKwkgKiBSZXN0b3JlIHByaW9yaXR5IG1hc2sgY29ycmVzcG9uZGluZyB0byB0aGUgbmV4dCBwcmlvcml0eSwgb3IgdGhlCisJICogb25lIHN0YXNoZWQgZWFybGllciBpZiB0aGVyZSBhcmUgbm8gbW9yZSB0byBkZWFjdGl2YXRlLgorCSAqLworCWlkeCA9IGdldF9wZV9oaWdoZXN0X2FjdGl2ZV9pZHgocGVfZGF0YSk7CisJaWYgKGlkeCA9PSBFSEZfSU5WQUxJRF9JRFgpCisJCW9sZF9tYXNrID0gcGxhdF9pY19zZXRfcHJpb3JpdHlfbWFzayhwZV9kYXRhLT5pbml0X3ByaV9tYXNrKTsKKwllbHNlCisJCW9sZF9tYXNrID0gcGxhdF9pY19zZXRfcHJpb3JpdHlfbWFzayhwcmlvcml0eSk7CisKKwlpZiAob2xkX21hc2sgPj0gcHJpb3JpdHkpIHsKKwkJRVJST1IoIkRlYWN0aXZhdGlvbiBwcmlvcml0eSAoMHgleCkgbG93ZXIgdGhhbiBQcmlvcml0eSBNYXNrICgweCV4KVxuIiwKKwkJCQlwcmlvcml0eSwgb2xkX21hc2spOworCQlwYW5pYygpOworCX0KKworCUVIRl9MT0coImRlYWN0aXZhdGUgcHJpbz0lZFxuIiwgZ2V0X3BlX2hpZ2hlc3RfYWN0aXZlX2lkeChwZV9kYXRhKSk7Cit9CisKKy8qCisgKiBBZnRlciBsZWF2aW5nIE5vbi1zZWN1cmUgd29ybGQsIHN0YXNoIGN1cnJlbnQgTm9uLXNlY3VyZSBQcmlvcml0eSBNYXNrLCBhbmQKKyAqIHNldCBQcmlvcml0eSBNYXNrIHRvIHRoZSBoaWdoZXN0IE5vbi1zZWN1cmUgcHJpb3JpdHkgc28gdGhhdCBOb24tc2VjdXJlCisgKiBpbnRlcnJ1cHRzIGNhbm5vdCBwcmVlbXB0IFNlY3VyZSBleGVjdXRpb24uCisgKgorICogSWYgdGhlIGN1cnJlbnQgcnVubmluZyBwcmlvcml0eSBpcyBpbiB0aGUgc2VjdXJlIHJhbmdlLCBvciBpZiB0aGVyZSBhcmUKKyAqIG91dHN0YW5kaW5nIHByaW9yaXR5IGFjdGl2YXRpb25zLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN1YnNjcmliZXMgdG8gdGhlICdjbV9leGl0ZWRfbm9ybWFsX3dvcmxkJyBldmVudCBwdWJsaXNoZWQgYnkKKyAqIHRoZSBDb250ZXh0IE1hbmFnZW1lbnQgTGlicmFyeS4KKyAqLworc3RhdGljIHZvaWQgKmVoZl9leGl0ZWRfbm9ybWFsX3dvcmxkKGNvbnN0IHZvaWQgKmFyZykKK3sKKwl1bnNpZ25lZCBpbnQgcnVuX3ByaTsKKwlwZV9leGNfZGF0YV90ICpwZV9kYXRhID0gdGhpc19jcHVfZGF0YSgpOworCisJLyogSWYgdGhlIHJ1bm5pbmcgcHJpb3JpdHkgaXMgaW4gdGhlIHNlY3VyZSByYW5nZSwgZG8gbm90aGluZyAqLworCXJ1bl9wcmkgPSBwbGF0X2ljX2dldF9ydW5uaW5nX3ByaW9yaXR5KCk7CisJaWYgKElTX1BSSV9TRUNVUkUocnVuX3ByaSkpCisJCXJldHVybiAwOworCisJLyogRG8gbm90aGluZyBpZiB0aGVyZSBhcmUgZXhwbGljaXQgYWN0aXZhdGlvbnMgKi8KKwlpZiAoaGFzX3ZhbGlkX3ByaV9hY3RpdmF0aW9ucyhwZV9kYXRhKSkKKwkJcmV0dXJuIDA7CisKKwlhc3NlcnQocGVfZGF0YS0+bnNfcHJpX21hc2sgPT0gMCk7CisKKwlwZV9kYXRhLT5uc19wcmlfbWFzayA9CisJCXBsYXRfaWNfc2V0X3ByaW9yaXR5X21hc2soR0lDX0hJR0hFU1RfTlNfUFJJT1JJVFkpOworCisJLyogVGhlIHByZXZpb3VzIFByaW9yaXR5IE1hc2sgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGluIHNlY3VyZSByYW5nZSAqLworCWlmIChJU19QUklfU0VDVVJFKHBlX2RhdGEtPm5zX3ByaV9tYXNrKSkgeworCQlFUlJPUigiUHJpb3JpdHkgTWFzayAoMHgleCkgYWxyZWFkeSBpbiBzZWN1cmUgcmFuZ2VcbiIsCisJCQkJcGVfZGF0YS0+bnNfcHJpX21hc2spOworCQlwYW5pYygpOworCX0KKworCUVIRl9MT0coIlByaW9yaXR5IE1hc2s6IDB4JXggPT4gMHgleFxuIiwgcGVfZGF0YS0+bnNfcHJpX21hc2ssCisJCQlHSUNfSElHSEVTVF9OU19QUklPUklUWSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbmNsdWRlIFNlY3VyZSBleGVjdXRpb24gYW5kIHByZXBhcmUgZm9yIHJldHVybiB0byBOb24tc2VjdXJlIHdvcmxkLiBSZXN0b3JlCisgKiB0aGUgTm9uLXNlY3VyZSBQcmlvcml0eSBNYXNrIHByZXZpb3VzbHkgc3Rhc2hlZCB1cG9uIGxlYXZpbmcgTm9uLXNlY3VyZQorICogd29ybGQuCisgKgorICogSWYgdGhlcmUgdGhlIGN1cnJlbnQgcnVubmluZyBwcmlvcml0eSBpcyBpbiB0aGUgc2VjdXJlIHJhbmdlLCBvciBpZiB0aGVyZSBhcmUKKyAqIG91dHN0YW5kaW5nIHByaW9yaXR5IGFjdGl2YXRpb25zLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN1YnNjcmliZXMgdG8gdGhlICdjbV9lbnRlcmluZ19ub3JtYWxfd29ybGQnIGV2ZW50IHB1Ymxpc2hlZCBieQorICogdGhlIENvbnRleHQgTWFuYWdlbWVudCBMaWJyYXJ5LgorICovCitzdGF0aWMgdm9pZCAqZWhmX2VudGVyaW5nX25vcm1hbF93b3JsZChjb25zdCB2b2lkICphcmcpCit7CisJdW5zaWduZWQgaW50IG9sZF9wbXIsIHJ1bl9wcmk7CisJcGVfZXhjX2RhdGFfdCAqcGVfZGF0YSA9IHRoaXNfY3B1X2RhdGEoKTsKKworCS8qIElmIHRoZSBydW5uaW5nIHByaW9yaXR5IGlzIGluIHRoZSBzZWN1cmUgcmFuZ2UsIGRvIG5vdGhpbmcgKi8KKwlydW5fcHJpID0gcGxhdF9pY19nZXRfcnVubmluZ19wcmlvcml0eSgpOworCWlmIChJU19QUklfU0VDVVJFKHJ1bl9wcmkpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIGV4cGxpY2l0IGFjdGl2YXRpb25zLCBkbyBub3RoaW5nLiBUaGUgUHJpb3JpdHkgTWFzayB3aWxsCisJICogYmUgcmVzdG9yZWQgdXBvbiB0aGUgbGFzdCBkZWFjdGl2YXRpb24uCisJICovCisJaWYgKGhhc192YWxpZF9wcmlfYWN0aXZhdGlvbnMocGVfZGF0YSkpCisJCXJldHVybiAwOworCisJLyogRG8gbm90aGluZyBpZiB3ZSBkb24ndCBoYXZlIGEgdmFsaWQgUHJpb3JpdHkgTWFzayB0byByZXN0b3JlICovCisJaWYgKHBlX2RhdGEtPm5zX3ByaV9tYXNrID09IDApCisJCXJldHVybiAwOworCisJb2xkX3BtciA9IHBsYXRfaWNfc2V0X3ByaW9yaXR5X21hc2socGVfZGF0YS0+bnNfcHJpX21hc2spOworCisJLyoKKwkgKiBXaGVuIGV4aXRpbmcgc2VjdXJlIHdvcmxkLCB0aGUgY3VycmVudCBQcmlvcml0eSBNYXNrIG11c3QgYmUKKwkgKiBHSUNfSElHSEVTVF9OU19QUklPUklUWSAoYXMgc2V0IGR1cmluZyBlbnRyeSksIG9yIHRoZSBOb24tc2VjdXJlCisJICogcHJpb3JpdHkgbWFzayBzZXQgdXBvbiBjYWxsaW5nIGVoZl9hbGxvd19uc19wcmVlbXB0aW9uKCkKKwkgKi8KKwlpZiAoKG9sZF9wbXIgIT0gR0lDX0hJR0hFU1RfTlNfUFJJT1JJVFkpICYmCisJCQkob2xkX3BtciAhPSBwZV9kYXRhLT5uc19wcmlfbWFzaykpIHsKKwkJRVJST1IoIkludmFsaWQgUHJpb3JpdHkgTWFzayAoMHgleCkgcmVzdG9yZWRcbiIsIG9sZF9wbXIpOworCQlwYW5pYygpOworCX0KKworCUVIRl9MT0coIlByaW9yaXR5IE1hc2s6IDB4JXggPT4gMHgleFxuIiwgb2xkX3BtciwgcGVfZGF0YS0+bnNfcHJpX21hc2spOworCisJcGVfZGF0YS0+bnNfcHJpX21hc2sgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQcm9ncmFtIFByaW9yaXR5IE1hc2sgdG8gdGhlIG9yaWdpbmFsIE5vbi1zZWN1cmUgcHJpb3JpdHkgc3VjaCB0aGF0CisgKiBOb24tc2VjdXJlIGludGVycnVwdHMgbWF5IHByZWVtcHQgU2VjdXJlIGV4ZWN1dGlvbiwgdml6LiBkdXJpbmcgWWllbGRpbmcgU01DCisgKiBjYWxscy4KKyAqCisgKiBUaGlzIEFQSSBpcyBleHBlY3RlZCB0byBiZSBpbnZva2VkIGJlZm9yZSBkZWxlZ2F0aW5nIGEgeWllbGRpbmcgU01DIHRvIFNlY3VyZQorICogRUwxLiBJLmUuIHdpdGhpbiB0aGUgd2luZG93IG9mIHNlY3VyZSBleGVjdXRpb24gYWZ0ZXIgTm9uLXNlY3VyZSBjb250ZXh0IGlzCisgKiBzYXZlZCAoYWZ0ZXIgZW50cnkgaW50byBFTDMpIGFuZCBTZWN1cmUgY29udGV4dCBpcyByZXN0b3JlZCAoYmVmb3JlIGVudGVyaW5nCisgKiBTZWN1cmUgRUwxKS4KKyAqLwordm9pZCBlaGZfYWxsb3dfbnNfcHJlZW1wdGlvbih2b2lkKQoreworCXVuc2lnbmVkIGludCBvbGRfcG1yIF9fdW51c2VkOworCXBlX2V4Y19kYXRhX3QgKnBlX2RhdGEgPSB0aGlzX2NwdV9kYXRhKCk7CisKKwkvKgorCSAqIFdlIHNob3VsZCBoYXZlIGJlZW4gbm90aWZpZWQgZWFybGllciBvZiBlbnRlcmluZyBzZWN1cmUgd29ybGQsIGFuZAorCSAqIHRoZXJlZm9yZSBoYXZlIHN0YXNoZWQgdGhlIE5vbi1zZWN1cmUgcHJpb3JpdHkgbWFzay4KKwkgKi8KKwlhc3NlcnQocGVfZGF0YS0+bnNfcHJpX21hc2sgIT0gMCk7CisKKwkvKiBNYWtlIHN1cmUgbm8gcHJpb3JpdHkgbGV2ZWxzIGFyZSBhY3RpdmUgd2hlbiByZXF1ZXN0aW5nIHRoaXMgKi8KKwlpZiAoaGFzX3ZhbGlkX3ByaV9hY3RpdmF0aW9ucyhwZV9kYXRhKSkgeworCQlFUlJPUigiUEUgJWx4IGhhcyBwcmlvcml0eSBhY3RpdmF0aW9uczogMHgleFxuIiwKKwkJCQlyZWFkX21waWRyX2VsMSgpLCBwZV9kYXRhLT5hY3RpdmVfcHJpX2JpdHMpOworCQlwYW5pYygpOworCX0KKworCW9sZF9wbXIgPSBwbGF0X2ljX3NldF9wcmlvcml0eV9tYXNrKHBlX2RhdGEtPm5zX3ByaV9tYXNrKTsKKworCUVIRl9MT0coIlByaW9yaXR5IE1hc2s6IDB4JXggPT4gMHgleFxuIiwgb2xkX3BtciwgcGVfZGF0YS0+bnNfcHJpX21hc2spOworCisJcGVfZGF0YS0+bnNfcHJpX21hc2sgPSAwOworfQorCisvKgorICogUmV0dXJuIHdoZXRoZXIgU2VjdXJlIGV4ZWN1dGlvbiBoYXMgZXhwbGljaXRseSBhbGxvd2VkIE5vbi1zZWN1cmUgaW50ZXJydXB0cworICogdG8gcHJlZW1wdCBpdHNlbGYsIHZpei4gZHVyaW5nIFlpZWxkaW5nIFNNQyBjYWxscy4KKyAqLwordW5zaWduZWQgaW50IGVoZl9pc19uc19wcmVlbXB0aW9uX2FsbG93ZWQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcnVuX3ByaTsKKwlwZV9leGNfZGF0YV90ICpwZV9kYXRhID0gdGhpc19jcHVfZGF0YSgpOworCisJLyogSWYgcnVubmluZyBwcmlvcml0eSBpcyBpbiBzZWN1cmUgcmFuZ2UsIHJldHVybiBmYWxzZSAqLworCXJ1bl9wcmkgPSBwbGF0X2ljX2dldF9ydW5uaW5nX3ByaW9yaXR5KCk7CisJaWYgKElTX1BSSV9TRUNVUkUocnVuX3ByaSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiBOb24tc2VjdXJlIHByZWVtcHRpb24gd2FzIHBlcm1pdHRlZCBieSBjYWxsaW5nCisJICogZWhmX2FsbG93X25zX3ByZWVtcHRpb24oKSBlYXJsaWVyOgorCSAqCisJICogLSBUaGVyZSB3b3VsZG4ndCBoYXZlIGJlZW4gcHJpb3JpdHkgYWN0aXZhdGlvbnM7CisJICogLSBXZSB3b3VsZCBoYXZlIGNsZWFyZWQgdGhlIHN0YXNoZWQgdGhlIE5vbi1zZWN1cmUgUHJpb3JpdHkgTWFzay4KKwkgKi8KKwlpZiAoaGFzX3ZhbGlkX3ByaV9hY3RpdmF0aW9ucyhwZV9kYXRhKSkKKwkJcmV0dXJuIDA7CisJaWYgKHBlX2RhdGEtPm5zX3ByaV9tYXNrICE9IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBUb3AtbGV2ZWwgRUwzIGludGVycnVwdCBoYW5kbGVyLgorICovCitzdGF0aWMgdWludDY0X3QgZWhmX2VsM19pbnRlcnJ1cHRfaGFuZGxlcih1aW50MzJfdCBpZCwgdWludDMyX3QgZmxhZ3MsCisJCXZvaWQgKmhhbmRsZSwgdm9pZCAqY29va2llKQoreworCWludCBwcmksIGlkeCwgaW50ciwgaW50cl9yYXcsIHJldCA9IDA7CisJZWhmX2hhbmRsZXJfdCBoYW5kbGVyOworCisJLyoKKwkgKiBUb3AtbGV2ZWwgaW50ZXJydXB0IHR5cGUgaGFuZGxlciBmcm9tIEludGVycnVwdCBNYW5hZ2VtZW50IEZyYW1ld29yaworCSAqIGRvZXNuJ3QgYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdDsgc28gdGhlIGludGVycnVwdCBJRCBtdXN0IGJlCisJICogaW52YWxpZC4KKwkgKi8KKwlhc3NlcnQoaWQgPT0gSU5UUl9JRF9VTkFWQUlMQUJMRSk7CisKKwkvKgorCSAqIEFja25vd2xlZGdlIGludGVycnVwdC4gUHJvY2VlZCB3aXRoIGhhbmRsaW5nIG9ubHkgZm9yIHZhbGlkIGludGVycnVwdAorCSAqIElEcy4gVGhpcyBzaXR1YXRpb24gbWF5IGFyaXNlIGJlY2F1c2Ugb2YgSW50ZXJydXB0IE1hbmFnZW1lbnQKKwkgKiBGcmFtZXdvcmsgaWRlbnRpZnlpbmcgYW4gRUwzIGludGVycnVwdCwgYnV0IGJlZm9yZSBpdCdzIGJlZW4KKwkgKiBhY2tub3dsZWRnZWQgaGVyZSwgdGhlIGludGVycnVwdCB3YXMgZWl0aGVyIGRlYXNzZXJ0ZWQsIG9yIHRoZXJlIHdhcworCSAqIGEgaGlnaGVyLXByaW9yaXR5IGludGVycnVwdCBvZiBhbm90aGVyIHR5cGUuCisJICovCisJaW50cl9yYXcgPSBwbGF0X2ljX2Fja25vd2xlZGdlX2ludGVycnVwdCgpOworCWludHIgPSBwbGF0X2ljX2dldF9pbnRlcnJ1cHRfaWQoaW50cl9yYXcpOworCWlmIChpbnRyID09IElOVFJfSURfVU5BVkFJTEFCTEUpCisJCXJldHVybiAwOworCisJLyogSGF2aW5nIGFja25vd2xlZGdlZCB0aGUgaW50ZXJydXB0LCBnZXQgdGhlIHJ1bm5pbmcgcHJpb3JpdHkgKi8KKwlwcmkgPSBwbGF0X2ljX2dldF9ydW5uaW5nX3ByaW9yaXR5KCk7CisKKwkvKiBDaGVjayBFTDMgaW50ZXJydXB0IHByaW9yaXR5IGlzIGluIHNlY3VyZSByYW5nZSAqLworCWFzc2VydChJU19QUklfU0VDVVJFKHByaSkpOworCisJLyoKKwkgKiBUcmFuc2xhdGUgdGhlIHByaW9yaXR5IHRvIGEgZGVzY3JpcHRvciBpbmRleC4gV2UgZG8gdGhpcyBieSBtYXNraW5nCisJICogYW5kIHNoaWZ0aW5nIHRoZSBydW5uaW5nIHByaW9yaXR5IHZhbHVlIChwbGF0Zm9ybS1zdXBwbGllZCkuCisJICovCisJaWR4ID0gcHJpX3RvX2lkeChwcmkpOworCisJLyogVmFsaWRhdGUgcHJpb3JpdHkgKi8KKwlhc3NlcnQocHJpID09IElEWF9UT19QUkkoaWR4KSk7CisKKwloYW5kbGVyID0gUkFXX0hBTkRMRVIoZXhjZXB0aW9uX2RhdGEuZWhmX3ByaW9yaXRpZXNbaWR4XS5laGZfaGFuZGxlcik7CisJaWYgKCFoYW5kbGVyKSB7CisJCUVSUk9SKCJObyBFTDMgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIHByaW9yaXR5IDB4JXhcbiIsCisJCQkJSURYX1RPX1BSSShpZHgpKTsKKwkJcGFuaWMoKTsKKwl9CisKKwkvKgorCSAqIENhbGwgcmVnaXN0ZXJlZCBoYW5kbGVyLiBQYXNzIHRoZSByYXcgaW50ZXJydXB0IHZhbHVlIHRvIHJlZ2lzdGVyZWQKKwkgKiBoYW5kbGVycy4KKwkgKi8KKwlyZXQgPSBoYW5kbGVyKGludHJfcmF3LCBmbGFncywgaGFuZGxlLCBjb29raWUpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIEVMMyBleGNlcHRpb24gaGFuZGxpbmcuCisgKi8KK3ZvaWQgZWhmX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCWludCByZXQgX191bnVzZWQ7CisKKwkvKiBFbnN1cmUgRUwzIGludGVycnVwdHMgYXJlIHN1cHBvcnRlZCAqLworCWFzc2VydChwbGF0X2ljX2hhc19pbnRlcnJ1cHRfdHlwZShJTlRSX1RZUEVfRUwzKSk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IHByaW9yaXR5IHdhdGVyIG1hcmsgaGFzIGVub3VnaCBiaXRzIHRvIHJlcHJlc2VudCB0aGUKKwkgKiB3aG9sZSBwcmlvcml0eSBhcnJheS4KKwkgKi8KKwlhc3NlcnQoZXhjZXB0aW9uX2RhdGEubnVtX3ByaW9yaXRpZXMgPD0gKHNpemVvZihlaGZfcHJpX2JpdHNfdCkgKiA4KSk7CisKKwlhc3NlcnQoZXhjZXB0aW9uX2RhdGEuZWhmX3ByaW9yaXRpZXMpOworCisJLyoKKwkgKiBCaXQgNyBvZiBHSUMgcHJpb3JpdHkgbXVzdCBiZSAwIGZvciBzZWN1cmUgaW50ZXJydXB0cy4gVGhpcyBtZWFucworCSAqIHBsYXRmb3JtcyBtdXN0IHVzZSBhdCBsZWFzdCAxIG9mIHRoZSByZW1haW5pbmcgNyBiaXRzLgorCSAqLworCWFzc2VydCgoZXhjZXB0aW9uX2RhdGEucHJpX2JpdHMgPj0gMSkgfHwgKGV4Y2VwdGlvbl9kYXRhLnByaV9iaXRzIDwgOCkpOworCisJLyogUm91dGUgRUwzIGludGVycnVwdHMgd2hlbiBpbiBTZWN1cmUgYW5kIE5vbi1zZWN1cmUuICovCisJc2V0X2ludGVycnVwdF9ybV9mbGFnKGZsYWdzLCBOT05fU0VDVVJFKTsKKwlzZXRfaW50ZXJydXB0X3JtX2ZsYWcoZmxhZ3MsIFNFQ1VSRSk7CisKKwkvKiBSZWdpc3RlciBoYW5kbGVyIGZvciBFTDMgaW50ZXJydXB0cyAqLworCXJldCA9IHJlZ2lzdGVyX2ludGVycnVwdF90eXBlX2hhbmRsZXIoSU5UUl9UWVBFX0VMMywKKwkJCWVoZl9lbDNfaW50ZXJydXB0X2hhbmRsZXIsIGZsYWdzKTsKKwlhc3NlcnQocmV0ID09IDApOworfQorCisvKgorICogUmVnaXN0ZXIgYSBoYW5kbGVyIGF0IHRoZSBzdXBwbGllZCBwcmlvcml0eS4gUmVnaXN0cmF0aW9uIGlzIGFsbG93ZWQgb25seSBpZgorICogYSBoYW5kbGVyIGhhc24ndCBiZWVuIHJlZ2lzdGVyZWQgYmVmb3JlLCBvciBvbmUgd2Fzbid0IHByb3ZpZGVkIGF0IGJ1aWxkCisgKiB0aW1lLiBUaGUgcHJpb3JpdHkgZm9yIHdoaWNoIHRoZSBoYW5kbGVyIGlzIGJlaW5nIHJlZ2lzdGVyZWQgbXVzdCBhbHNvIGFjY29yZAorICogd2l0aCB0aGUgcGxhdGZvcm0tc3VwcGxpZWQgZGF0YS4KKyAqLwordm9pZCBlaGZfcmVnaXN0ZXJfcHJpb3JpdHlfaGFuZGxlcih1bnNpZ25lZCBpbnQgcHJpLCBlaGZfaGFuZGxlcl90IGhhbmRsZXIpCit7CisJaW50IGlkeDsKKworCS8qIFNhbml0eSBjaGVjayBmb3IgaGFuZGxlciAqLworCWFzc2VydChoYW5kbGVyICE9IE5VTEwpOworCisJLyogSGFuZGxlciBvdWdodCB0byBiZSA0LWJ5dGUgYWxpZ25lZCAqLworCWFzc2VydCgoKCh1aW50cHRyX3QpIGhhbmRsZXIpICYgMykgPT0gMCk7CisKKwkvKiBFbnN1cmUgd2UgcmVnaXN0ZXIgZm9yIHZhbGlkIHByaW9yaXR5ICovCisJaWR4ID0gcHJpX3RvX2lkeChwcmkpOworCWFzc2VydChpZHggPCBleGNlcHRpb25fZGF0YS5udW1fcHJpb3JpdGllcyk7CisJYXNzZXJ0KElEWF9UT19QUkkoaWR4KSA9PSBwcmkpOworCisJLyogUmV0dXJuIGZhaWx1cmUgaWYgYSBoYW5kbGVyIHdhcyBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KKwlpZiAoZXhjZXB0aW9uX2RhdGEuZWhmX3ByaW9yaXRpZXNbaWR4XS5laGZfaGFuZGxlciAhPSBfRUhGX05PX0hBTkRMRVIpIHsKKwkJRVJST1IoIkhhbmRsZXIgYWxyZWFkeSByZWdpc3RlcmVkIGZvciBwcmlvcml0eSAweCV4XG4iLCBwcmkpOworCQlwYW5pYygpOworCX0KKworCS8qCisJICogSW5zdGFsbCBoYW5kbGVyLCBhbmQgcmV0YWluIHRoZSB2YWxpZCBiaXQuIFdlIGFzc3VtZSB0aGF0IHRoZSBoYW5kbGVyCisJICogaXMgNC1ieXRlIGFsaWduZWQsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGNhc2UuCisJICovCisJZXhjZXB0aW9uX2RhdGEuZWhmX3ByaW9yaXRpZXNbaWR4XS5laGZfaGFuZGxlciA9CisJCSgoKHVpbnRwdHJfdCkgaGFuZGxlcikgfCBfRUhGX1BSSV9WQUxJRCk7CisKKwlFSEZfTE9HKCJyZWdpc3RlciBwcmk9MHgleCBoYW5kbGVyPSVwXG4iLCBwcmksIGhhbmRsZXIpOworfQorCitTVUJTQ1JJQkVfVE9fRVZFTlQoY21fZW50ZXJpbmdfbm9ybWFsX3dvcmxkLCBlaGZfZW50ZXJpbmdfbm9ybWFsX3dvcmxkKTsKK1NVQlNDUklCRV9UT19FVkVOVChjbV9leGl0ZWRfbm9ybWFsX3dvcmxkLCBlaGZfZXhpdGVkX25vcm1hbF93b3JsZCk7CmRpZmYgLS1naXQgYS9ibDMyL3NwX21pbi9hYXJjaDMyL2VudHJ5cG9pbnQuUyBiL2JsMzIvc3BfbWluL2FhcmNoMzIvZW50cnlwb2ludC5TCmluZGV4IGQ4NjhjNTMuLmIyYjc5NTMgMTAwNjQ0Ci0tLSBhL2JsMzIvc3BfbWluL2FhcmNoMzIvZW50cnlwb2ludC5TCisrKyBiL2JsMzIvc3BfbWluL2FhcmNoMzIvZW50cnlwb2ludC5TCkBAIC0zMCw2ICszMCwxNiBAQAogCQlzdGNvcHIJXHJlZywgU0NSCiAJLmVuZG0KIAorCS5tYWNybyBjbHJleF9vbl9tb25pdG9yX2VudHJ5CisjaWYgKEFSTV9BUkNIX01BSk9SID09IDcpCisJLyoKKwkgKiBBUk12NyBhcmNoaXRlY3R1cmVzIG5lZWQgdG8gY2xlYXIgdGhlIGV4Y2x1c2l2ZSBhY2Nlc3Mgd2hlbgorCSAqIGVudGVyaW5nIE1vbml0b3IgbW9kZS4KKwkgKi8KKwljbHJleAorI2VuZGlmCisJLmVuZG0KKwogdmVjdG9yX2Jhc2Ugc3BfbWluX3ZlY3Rvcl90YWJsZQogCWIJc3BfbWluX2VudHJ5cG9pbnQKIAliCXBsYXRfcGFuaWNfaGFuZGxlcgkvKiBVbmRlZiAqLwpAQCAtMTQ3LDYgKzE1Nyw4IEBACiAKIAlzbWNjX3NhdmVfZ3BfbW9kZV9yZWdzCiAKKwljbHJleF9vbl9tb25pdG9yX2VudHJ5CisKIAkvKgogCSAqIGBzcGAgc3RpbGwgcG9pbnRzIHRvIGBzbWNfY3R4X3RgLiBTYXZlIGl0IHRvIGEgcmVnaXN0ZXIKIAkgKiBhbmQgcmVzdG9yZSB0aGUgQyBydW50aW1lIHN0YWNrIHBvaW50ZXIgdG8gYHNwYC4KQEAgLTE2Miw2ICsxNzQsMTUgQEAKIAlzdGNvcHIJcjAsIFNDUgogCWlzYgogCisJLyoKKwkgKiBTZXQgUE1DUi5EUCB0byAxIHRvIHByb2hpYml0IGN5Y2xlIGNvdW50aW5nIHdoaWxzdCBpbiBTZWN1cmUgTW9kZS4KKwkgKiBBbHNvLCB0aGUgUE1DUi5MQyBmaWVsZCBoYXMgYW4gYXJjaGl0ZWN0dXJhbGx5IFVOS05PV04gdmFsdWUgb24gcmVzZXQKKwkgKiBhbmQgc28gc2V0IHRvIDEgYXMgQVJNIGhhcyBkZXByZWNhdGVkIHVzZSBvZiBQTUNSLkxDPTAuCisJICovCisJbGRjb3ByCXIwLCBQTUNSCisJb3JyCXIwLCByMCwgIyhQTUNSX0xDX0JJVCB8IFBNQ1JfRFBfQklUKQorCXN0Y29wcglyMCwgUE1DUgorCiAJbGRyCXIwLCBbcjIsICNTTUNfQ1RYX0dQUkVHX1IwXQkvKiBzbWNfZmlkICovCiAJLyogQ2hlY2sgd2hldGhlciBhbiBTTUM2NCBpcyBpc3N1ZWQgKi8KIAl0c3QJcjAsICMoRlVOQ0lEX0NDX01BU0sgPDwgRlVOQ0lEX0NDX1NISUZUKQpAQCAtMTk0LDExICsyMTUsNyBAQAogCiAJc21jY19zYXZlX2dwX21vZGVfcmVncwogCi0JLyoKLQkgKiBBQXJjaDMyIGFyY2hpdGVjdHVyZXMgbmVlZCB0byBjbGVhciB0aGUgZXhjbHVzaXZlIGFjY2VzcyB3aGVuCi0JICogZW50ZXJpbmcgTW9uaXRvciBtb2RlLgotCSAqLwotCWNscmV4CisJY2xyZXhfb25fbW9uaXRvcl9lbnRyeQogCiAJLyogbG9hZCBydW4tdGltZSBzdGFjayAqLwogCW1vdglyMiwgc3AKQEAgLTIxMCw2ICsyMjcsMTUgQEAKIAlzdGNvcHIJcjAsIFNDUgogCWlzYgogCisJLyoKKwkgKiBTZXQgUE1DUi5EUCB0byAxIHRvIHByb2hpYml0IGN5Y2xlIGNvdW50aW5nIHdoaWxzdCBpbiBTZWN1cmUgTW9kZS4KKwkgKiBBbHNvLCB0aGUgUE1DUi5MQyBmaWVsZCBoYXMgYW4gYXJjaGl0ZWN0dXJhbGx5IFVOS05PV04gdmFsdWUgb24gcmVzZXQKKwkgKiBhbmQgc28gc2V0IHRvIDEgYXMgQVJNIGhhcyBkZXByZWNhdGVkIHVzZSBvZiBQTUNSLkxDPTAuCisJICovCisJbGRjb3ByCXIwLCBQTUNSCisJb3JyCXIwLCByMCwgIyhQTUNSX0xDX0JJVCB8IFBNQ1JfRFBfQklUKQorCXN0Y29wcglyMCwgUE1DUgorCiAJcHVzaAl7cjIsIHIzfQogCWJsCXNwX21pbl9maXEKIAlwb3AJe3IwLCByM30KZGlmZiAtLWdpdCBhL2JsMzIvc3BfbWluL3NwX21pbi5sZC5TIGIvYmwzMi9zcF9taW4vc3BfbWluLmxkLlMKaW5kZXggZDBmYjRhMC4uZTc5OGEwZCAxMDA2NDQKLS0tIGEvYmwzMi9zcF9taW4vc3BfbWluLmxkLlMKKysrIGIvYmwzMi9zcF9taW4vc3BfbWluLmxkLlMKQEAgLTUsNiArNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgorI2luY2x1ZGUgPHhsYXRfdGFibGVzX2RlZnMuaD4KIAogT1VUUFVUX0ZPUk1BVChlbGYzMi1saXR0bGVhcm0pCiBPVVRQVVRfQVJDSChhcm0pCkBAIC0xOCw3ICsxOSw3IEBACiBTRUNUSU9OUwogewogICAgIC4gPSBCTDMyX0JBU0U7Ci0gICBBU1NFUlQoLiA9PSBBTElHTig0MDk2KSwKKyAgIEFTU0VSVCguID09IEFMSUdOKFBBR0VfU0laRSksCiAgICAgICAgICAgIkJMMzJfQkFTRSBhZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgcGFnZSBib3VuZGFyeS4iKQogCiAjaWYgU0VQQVJBVEVfQ09ERV9BTkRfUk9EQVRBCkBAIC0yNyw3ICsyOCw3IEBACiAgICAgICAgICplbnRyeXBvaW50Lm8oLnRleHQqKQogICAgICAgICAqKC50ZXh0KikKICAgICAgICAgKigudmVjdG9ycykKLSAgICAgICAgLiA9IE5FWFQoNDA5Nik7CisgICAgICAgIC4gPSBORVhUKFBBR0VfU0laRSk7CiAgICAgICAgIF9fVEVYVF9FTkRfXyA9IC47CiAgICAgfSA+UkFNCiAKQEAgLTUwLDcgKzUxLDExIEBACiAgICAgICAgIEtFRVAoKihjcHVfb3BzKSkKICAgICAgICAgX19DUFVfT1BTX0VORF9fID0gLjsKIAotICAgICAgICAuID0gTkVYVCg0MDk2KTsKKyAgICAgICAgLyogUGxhY2UgcHVic3ViIHNlY3Rpb25zIGZvciBldmVudHMgKi8KKyAgICAgICAgLiA9IEFMSUdOKDgpOworI2luY2x1ZGUgPHB1YnN1Yl9ldmVudHMuaD4KKworICAgICAgICAuID0gTkVYVChQQUdFX1NJWkUpOwogICAgICAgICBfX1JPREFUQV9FTkRfXyA9IC47CiAgICAgfSA+UkFNCiAjZWxzZQpAQCAtNzUsNiArODAsMTAgQEAKICAgICAgICAgS0VFUCgqKGNwdV9vcHMpKQogICAgICAgICBfX0NQVV9PUFNfRU5EX18gPSAuOwogCisgICAgICAgIC8qIFBsYWNlIHB1YnN1YiBzZWN0aW9ucyBmb3IgZXZlbnRzICovCisgICAgICAgIC4gPSBBTElHTig4KTsKKyNpbmNsdWRlIDxwdWJzdWJfZXZlbnRzLmg+CisKICAgICAgICAgKigudmVjdG9ycykKICAgICAgICAgX19ST19FTkRfVU5BTElHTkVEX18gPSAuOwogCkBAIC04Myw3ICs5Miw3IEBACiAgICAgICAgICAqIHJlYWQtb25seSwgZXhlY3V0YWJsZS4gIE5vIFJXIGRhdGEgZnJvbSB0aGUgbmV4dCBzZWN0aW9uIG11c3QKICAgICAgICAgICogY3JlZXAgaW4uICBFbnN1cmUgdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgbWVtb3J5IGJsb2NrIGlzIHVudXNlZC4KICAgICAgICAgICovCi0gICAgICAgIC4gPSBORVhUKDQwOTYpOworICAgICAgICAuID0gTkVYVChQQUdFX1NJWkUpOwogICAgICAgICBfX1JPX0VORF9fID0gLjsKICAgICB9ID5SQU0KICNlbmRpZgpAQCAtMTAyLDYgKzExMSwxMCBAQAogICAgICAgICBfX0RBVEFfRU5EX18gPSAuOwogICAgIH0gPlJBTQogCisjaWZkZWYgQkwzMl9QUk9HQklUU19MSU1JVAorICAgIEFTU0VSVCguIDw9IEJMMzJfUFJPR0JJVFNfTElNSVQsICJCTDMyIHByb2diaXRzIGhhcyBleGNlZWRlZCBpdHMgbGltaXQuIikKKyNlbmRpZgorCiAgICAgc3RhY2tzIChOT0xPQUQpIDogewogICAgICAgICBfX1NUQUNLU19TVEFSVF9fID0gLjsKICAgICAgICAgKih0emZ3X25vcm1hbF9zdGFja3MpCkBAIC0xNzgsNyArMTkxLDcgQEAKICAgICAgKiBhcmUgbm90IG1peGVkIHdpdGggbm9ybWFsIGRhdGEuICBUaGlzIGlzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgY29ycmVjdAogICAgICAqIG1lbW9yeSBhdHRyaWJ1dGVzIGZvciB0aGUgY29oZXJlbnQgZGF0YSBwYWdlIHRhYmxlcy4KICAgICAgKi8KLSAgICBjb2hlcmVudF9yYW0gKE5PTE9BRCkgOiBBTElHTig0MDk2KSB7CisgICAgY29oZXJlbnRfcmFtIChOT0xPQUQpIDogQUxJR04oUEFHRV9TSVpFKSB7CiAgICAgICAgIF9fQ09IRVJFTlRfUkFNX1NUQVJUX18gPSAuOwogICAgICAgICAvKgogICAgICAgICAgKiBCYWtlcnkgbG9ja3MgYXJlIHN0b3JlZCBpbiBjb2hlcmVudCBtZW1vcnkKQEAgLTE5Myw3ICsyMDYsNyBAQAogICAgICAgICAgKiBhcyBkZXZpY2UgbWVtb3J5LiAgTm8gb3RoZXIgdW5leHBlY3RlZCBkYXRhIG11c3QgY3JlZXAgaW4uCiAgICAgICAgICAqIEVuc3VyZSB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCBtZW1vcnkgcGFnZSBpcyB1bnVzZWQuCiAgICAgICAgICAqLwotICAgICAgICAuID0gTkVYVCg0MDk2KTsKKyAgICAgICAgLiA9IE5FWFQoUEFHRV9TSVpFKTsKICAgICAgICAgX19DT0hFUkVOVF9SQU1fRU5EX18gPSAuOwogICAgIH0gPlJBTQogCmRpZmYgLS1naXQgYS9ibDMyL3NwX21pbi9zcF9taW4ubWsgYi9ibDMyL3NwX21pbi9zcF9taW4ubWsKaW5kZXggMzk1ODhjZS4uNTY0ODlhMyAxMDA2NDQKLS0tIGEvYmwzMi9zcF9taW4vc3BfbWluLm1rCisrKyBiL2JsMzIvc3BfbWluL3NwX21pbi5tawpAQCAtMSw1ICsxLDUgQEAKICMKLSMgQ29weXJpZ2h0IChjKSAyMDE2LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogIwpAQCAtMjIsNiArMjIsMTAgQEAKIEJMMzJfU09VUkNFUwkJKz0JbGliL3BtZi9wbWZfbWFpbi5jCiBlbmRpZgogCitpZmVxICgke0VOQUJMRV9BTVV9LCAxKQorQkwzMl9TT1VSQ0VTCQkrPQlsaWIvZXh0ZW5zaW9ucy9hbXUvYWFyY2gzMi9hbXUuYworZW5kaWYKKwogQkwzMl9MSU5LRVJGSUxFCTo9CWJsMzIvc3BfbWluL3NwX21pbi5sZC5TCiAKICMgSW5jbHVkZSB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgU1BfTUlOIE1ha2VmaWxlCmRpZmYgLS1naXQgYS9ibDMyL3RzcC90c3AubGQuUyBiL2JsMzIvdHNwL3RzcC5sZC5TCmluZGV4IDJiNjcyZWYuLmQyNTZiNDYgMTAwNjQ0Ci0tLSBhL2JsMzIvdHNwL3RzcC5sZC5TCisrKyBiL2JsMzIvdHNwL3RzcC5sZC5TCkBAIC01LDYgKzUsNyBAQAogICovCiAKICNpbmNsdWRlIDxwbGF0Zm9ybV9kZWYuaD4KKyNpbmNsdWRlIDx4bGF0X3RhYmxlc19kZWZzLmg+CiAKIE9VVFBVVF9GT1JNQVQoUExBVEZPUk1fTElOS0VSX0ZPUk1BVCkKIE9VVFBVVF9BUkNIKFBMQVRGT1JNX0xJTktFUl9BUkNIKQpAQCAtMTksNyArMjAsNyBAQAogU0VDVElPTlMKIHsKICAgICAuID0gQkwzMl9CQVNFOwotICAgIEFTU0VSVCguID09IEFMSUdOKDQwOTYpLAorICAgIEFTU0VSVCguID09IEFMSUdOKFBBR0VfU0laRSksCiAgICAgICAgICAgICJCTDMyX0JBU0UgYWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIHBhZ2UgYm91bmRhcnkuIikKIAogI2lmIFNFUEFSQVRFX0NPREVfQU5EX1JPREFUQQpAQCAtMjgsMTQgKzI5LDE0IEBACiAgICAgICAgICp0c3BfZW50cnlwb2ludC5vKC50ZXh0KikKICAgICAgICAgKigudGV4dCopCiAgICAgICAgICooLnZlY3RvcnMpCi0gICAgICAgIC4gPSBORVhUKDQwOTYpOworICAgICAgICAuID0gTkVYVChQQUdFX1NJWkUpOwogICAgICAgICBfX1RFWFRfRU5EX18gPSAuOwogICAgIH0gPlJBTQogCiAgICAgLnJvZGF0YSAuIDogewogICAgICAgICBfX1JPREFUQV9TVEFSVF9fID0gLjsKICAgICAgICAgKigucm9kYXRhKikKLSAgICAgICAgLiA9IE5FWFQoNDA5Nik7CisgICAgICAgIC4gPSBORVhUKFBBR0VfU0laRSk7CiAgICAgICAgIF9fUk9EQVRBX0VORF9fID0gLjsKICAgICB9ID5SQU0KICNlbHNlCkBAIC01MSw3ICs1Miw3IEBACiAgICAgICAgICAqIHJlYWQtb25seSwgZXhlY3V0YWJsZS4gIE5vIFJXIGRhdGEgZnJvbSB0aGUgbmV4dCBzZWN0aW9uIG11c3QKICAgICAgICAgICogY3JlZXAgaW4uICBFbnN1cmUgdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgbWVtb3J5IHBhZ2UgaXMgdW51c2VkLgogICAgICAgICAgKi8KLSAgICAgICAgLiA9IE5FWFQoNDA5Nik7CisgICAgICAgIC4gPSBORVhUKFBBR0VfU0laRSk7CiAgICAgICAgIF9fUk9fRU5EX18gPSAuOwogICAgIH0gPlJBTQogI2VuZGlmCkBAIC0xMDYsNyArMTA3LDcgQEAKICAgICAgKiBhcmUgbm90IG1peGVkIHdpdGggbm9ybWFsIGRhdGEuICBUaGlzIGlzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgY29ycmVjdAogICAgICAqIG1lbW9yeSBhdHRyaWJ1dGVzIGZvciB0aGUgY29oZXJlbnQgZGF0YSBwYWdlIHRhYmxlcy4KICAgICAgKi8KLSAgICBjb2hlcmVudF9yYW0gKE5PTE9BRCkgOiBBTElHTig0MDk2KSB7CisgICAgY29oZXJlbnRfcmFtIChOT0xPQUQpIDogQUxJR04oUEFHRV9TSVpFKSB7CiAgICAgICAgIF9fQ09IRVJFTlRfUkFNX1NUQVJUX18gPSAuOwogICAgICAgICAqKHR6ZndfY29oZXJlbnRfbWVtKQogICAgICAgICBfX0NPSEVSRU5UX1JBTV9FTkRfVU5BTElHTkVEX18gPSAuOwpAQCAtMTE1LDcgKzExNiw3IEBACiAgICAgICAgICAqIGFzIGRldmljZSBtZW1vcnkuICBObyBvdGhlciB1bmV4cGVjdGVkIGRhdGEgbXVzdCBjcmVlcCBpbi4KICAgICAgICAgICogRW5zdXJlIHRoZSByZXN0IG9mIHRoZSBjdXJyZW50IG1lbW9yeSBwYWdlIGlzIHVudXNlZC4KICAgICAgICAgICovCi0gICAgICAgIC4gPSBORVhUKDQwOTYpOworICAgICAgICAuID0gTkVYVChQQUdFX1NJWkUpOwogICAgICAgICBfX0NPSEVSRU5UX1JBTV9FTkRfXyA9IC47CiAgICAgfSA+UkFNCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbW1vbi9hYXJjaDMyL2RlYnVnLlMgYi9jb21tb24vYWFyY2gzMi9kZWJ1Zy5TCmluZGV4IDU4M2VlNGEuLmY1MDYzNTYgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9hYXJjaDMyL2RlYnVnLlMKKysrIGIvY29tbW9uL2FhcmNoMzIvZGVidWcuUwpAQCAtNzEsNyArNzEsMTUgQEAKIGFzc2VydF9tc2cxOgogCS5hc2NpeiAiQVNTRVJUOiBGaWxlICIKIGFzc2VydF9tc2cyOgorI2lmIEFSTV9BUkNIX01BSk9SID09IDcgJiYgIWRlZmluZWQoQVJNVjdfU1VQUE9SVFNfVklSVFVBTElaQVRJT04pCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFZpcnR1YWxpemF0aW9uIGNvbWVzIHdpdGggdGhlIFVESVYvU0RJViBpbnN0cnVjdGlvbnMuIElmIG1pc3NpbmcKKwkgKiB3cml0ZSBmaWxlIGxpbmUgbnVtYmVyIGluIGhleGFkZWNpbWFsIGZvcm1hdC4KKwkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS5hc2NpeiAiIExpbmUgMHgiCisjZWxzZQogCS5hc2NpeiAiIExpbmUgIgorI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQXNzZXJ0aW9uIHN1cHBvcnQgaW4gYXNzZW1ibHkuCkBAIC0xMTMsNiArMTIxLDEzIEBACiAJYm5lCTFmCiAJbW92CXI0LCByNgogCisjaWYgQVJNX0FSQ0hfTUFKT1IgPT0gNyAmJiAhZGVmaW5lZChBUk1WN19TVVBQT1JUU19WSVJUVUFMSVpBVElPTikKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogVmlydHVhbGl6YXRpb24gY29tZXMgd2l0aCB0aGUgVURJVi9TRElWIGluc3RydWN0aW9ucy4gSWYgbWlzc2luZworCSAqIHdyaXRlIGZpbGUgbGluZSBudW1iZXIgaW4gaGV4YWRlY2ltYWwgZm9ybWF0LgorCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJYmwJYXNtX3ByaW50X2hleAorI2Vsc2UKIAkvKiBQcmludCBsaW5lIG51bWJlciBpbiBkZWNpbWFsICovCiAJbW92CXI2LCAjMTAJCQkvKiBEaXZpZGUgYnkgMTAgYWZ0ZXIgZXZlcnkgbG9vcCBpdGVyYXRpb24gKi8KIAlsZHIJcjUsID1NQVhfREVDX0RJVklTT1IKQEAgLTEyNCw2ICsxMzksNyBAQAogCXVkaXYJcjUsIHI1LCByNgkJCS8qIFJlZHVjZSBkaXZpc29yICovCiAJY21wCXI1LCAjMAogCWJuZQlkZWNfcHJpbnRfbG9vcAorI2VuZGlmCiAKIAlibAlwbGF0X2NyYXNoX2NvbnNvbGVfZmx1c2gKIApkaWZmIC0tZ2l0IGEvY29tbW9uL2FhcmNoNjQvZGVidWcuUyBiL2NvbW1vbi9hYXJjaDY0L2RlYnVnLlMKaW5kZXggZDc5NGQxMi4uNDQ3OGQwZCAxMDA2NDQKLS0tIGEvY29tbW9uL2FhcmNoNjQvZGVidWcuUworKysgYi9jb21tb24vYWFyY2g2NC9kZWJ1Zy5TCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSA8YXJjaC5oPgogI2luY2x1ZGUgPGFzbV9tYWNyb3MuUz4KKyNpbmNsdWRlIDxkZWJ1Zy5oPgogCiAJLmdsb2JsCWFzbV9wcmludF9zdHIKIAkuZ2xvYmwJYXNtX3ByaW50X2hleApkaWZmIC0tZ2l0IGEvY29tbW9uL2JsX2NvbW1vbi5jIGIvY29tbW9uL2JsX2NvbW1vbi5jCmluZGV4IGNhZDRkZTkuLmIwZDFiZmEgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9ibF9jb21tb24uYworKysgYi9jb21tb24vYmxfY29tbW9uLmMKQEAgLTIwMCwxNCArMjAwLDE0IEBACiAjaWYgTE9BRF9JTUFHRV9WMgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogR2VuZXJpYyBmdW5jdGlvbiB0byBsb2FkIGFuIGltYWdlIGF0IGEgc3BlY2lmaWMgYWRkcmVzcyBnaXZlbgorICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gbG9hZCBhbiBpbWFnZSBhdCBhIHNwZWNpZmljIGFkZHJlc3MgZ2l2ZW4KICAqIGFuIGltYWdlIElEIGFuZCBleHRlbnRzIG9mIGZyZWUgbWVtb3J5LgogICoKICAqIElmIHRoZSBsb2FkIGlzIHN1Y2Nlc3NmdWwgdGhlbiB0aGUgaW1hZ2UgaW5mb3JtYXRpb24gaXMgdXBkYXRlZC4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgbG9hZF9pbWFnZSh1bnNpZ25lZCBpbnQgaW1hZ2VfaWQsIGltYWdlX2luZm9fdCAqaW1hZ2VfZGF0YSkKK3N0YXRpYyBpbnQgbG9hZF9pbWFnZSh1bnNpZ25lZCBpbnQgaW1hZ2VfaWQsIGltYWdlX2luZm9fdCAqaW1hZ2VfZGF0YSkKIHsKIAl1aW50cHRyX3QgZGV2X2hhbmRsZTsKIAl1aW50cHRyX3QgaW1hZ2VfaGFuZGxlOwpAQCAtMjY2LDE3ICsyNjYsNiBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0jaWYgIVRSVVNURURfQk9BUkRfQk9PVAotCS8qCi0JICogRmlsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgbG9hZGVkLgotCSAqIEZsdXNoIHRoZSBpbWFnZSB0byBtYWluIG1lbW9yeSBzbyB0aGF0IGl0IGNhbiBiZSBleGVjdXRlZCBsYXRlciBieQotCSAqIGFueSBDUFUsIHJlZ2FyZGxlc3Mgb2YgY2FjaGUgYW5kIE1NVSBzdGF0ZS4KLQkgKiBXaGVuIFRCQiBpcyBlbmFibGVkIHRoZSBpbWFnZSBpcyBmbHVzaGVkIGxhdGVyLCBhZnRlciBpbWFnZQotCSAqIGF1dGhlbnRpY2F0aW9uLgotCSAqLwotCWZsdXNoX2RjYWNoZV9yYW5nZShpbWFnZV9iYXNlLCBpbWFnZV9zaXplKTsKLSNlbmRpZiAvKiBUUlVTVEVEX0JPQVJEX0JPT1QgKi8KLQogCUlORk8oIkltYWdlIGlkPSV1IGxvYWRlZDogJXAgLSAlcFxuIiwgaW1hZ2VfaWQsICh2b2lkICopIGltYWdlX2Jhc2UsCiAJICAgICAodm9pZCAqKSAoaW1hZ2VfYmFzZSArIGltYWdlX3NpemUpKTsKIApAQCAtMzI5LDE4ICszMTgsMTkgQEAKIAkJCQkgICBpbWFnZV9kYXRhLT5pbWFnZV9zaXplKTsKIAkJcmV0dXJuIC1FQVVUSDsKIAl9CisjZW5kaWYgLyogVFJVU1RFRF9CT0FSRF9CT09UICovCiAKIAkvKgotCSAqIEZpbGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGxvYWRlZCBhbmQgYXV0aGVudGljYXRlZC4KIAkgKiBGbHVzaCB0aGUgaW1hZ2UgdG8gbWFpbiBtZW1vcnkgc28gdGhhdCBpdCBjYW4gYmUgZXhlY3V0ZWQgbGF0ZXIgYnkKLQkgKiBhbnkgQ1BVLCByZWdhcmRsZXNzIG9mIGNhY2hlIGFuZCBNTVUgc3RhdGUuCi0JICogRG8gaXQgb25seSBmb3IgY2hpbGQgaW1hZ2VzLCBub3QgZm9yIHRoZSBwYXJlbnRzIChjZXJ0aWZpY2F0ZXMpLgorCSAqIGFueSBDUFUsIHJlZ2FyZGxlc3Mgb2YgY2FjaGUgYW5kIE1NVSBzdGF0ZS4gSWYgVEJCIGlzIGVuYWJsZWQsIHRoZW4KKwkgKiB0aGUgZmlsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgbG9hZGVkIGFuZCBhdXRoZW50aWNhdGVkIGFuZCBmbHVzaAorCSAqIG9ubHkgZm9yIGNoaWxkIGltYWdlcywgbm90IGZvciB0aGUgcGFyZW50cyAoY2VydGlmaWNhdGVzKS4KIAkgKi8KIAlpZiAoIWlzX3BhcmVudF9pbWFnZSkgewogCQlmbHVzaF9kY2FjaGVfcmFuZ2UoaW1hZ2VfZGF0YS0+aW1hZ2VfYmFzZSwKIAkJCQkgICBpbWFnZV9kYXRhLT5pbWFnZV9zaXplKTsKIAl9Ci0jZW5kaWYgLyogVFJVU1RFRF9CT0FSRF9CT09UICovCisKIAogCXJldHVybiAwOwogfQpAQCAtMzU0LDcgKzM0NCwxMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBsb2FkX2F1dGhfaW1hZ2UodW5zaWduZWQgaW50IGltYWdlX2lkLCBpbWFnZV9pbmZvX3QgKmltYWdlX2RhdGEpCiB7Ci0JcmV0dXJuIGxvYWRfYXV0aF9pbWFnZV9pbnRlcm5hbChpbWFnZV9pZCwgaW1hZ2VfZGF0YSwgMCk7CisJaW50IGVycjsKKworCWRvIHsKKwkJZXJyID0gbG9hZF9hdXRoX2ltYWdlX2ludGVybmFsKGltYWdlX2lkLCBpbWFnZV9kYXRhLCAwKTsKKwl9IHdoaWxlIChlcnIgIT0gMCAmJiBwbGF0X3RyeV9uZXh0X2Jvb3Rfc291cmNlKCkpOworCisJcmV0dXJuIGVycjsKIH0KIAogI2Vsc2UgLyogTE9BRF9JTUFHRV9WMiAqLwpAQCAtNTUzLDggKzU0OSwxNCBAQAogCQkgICAgaW1hZ2VfaW5mb190ICppbWFnZV9kYXRhLAogCQkgICAgZW50cnlfcG9pbnRfaW5mb190ICplbnRyeV9wb2ludF9pbmZvKQogewotCXJldHVybiBsb2FkX2F1dGhfaW1hZ2VfaW50ZXJuYWwobWVtX2xheW91dCwgaW1hZ2VfaWQsIGltYWdlX2Jhc2UsCi0JCQkJCWltYWdlX2RhdGEsIGVudHJ5X3BvaW50X2luZm8sIDApOworCWludCBlcnI7CisKKwlkbyB7CisJCWVyciA9IGxvYWRfYXV0aF9pbWFnZV9pbnRlcm5hbChtZW1fbGF5b3V0LCBpbWFnZV9pZCwgaW1hZ2VfYmFzZSwKKwkJCQkJICAgICAgIGltYWdlX2RhdGEsIGVudHJ5X3BvaW50X2luZm8sIDApOworCX0gd2hpbGUgKGVyciAhPSAwICYmIHBsYXRfdHJ5X25leHRfYm9vdF9zb3VyY2UoKSk7CisKKwlyZXR1cm4gZXJyOwogfQogCiAjZW5kaWYgLyogTE9BRF9JTUFHRV9WMiAqLwpkaWZmIC0tZ2l0IGEvZG9jcy9hdXRoLWZyYW1ld29yay5yc3QgYi9kb2NzL2F1dGgtZnJhbWV3b3JrLnJzdAppbmRleCA3NjVkOWY4Li4zYTA1NGM3IDEwMDY0NAotLS0gYS9kb2NzL2F1dGgtZnJhbWV3b3JrLnJzdAorKysgYi9kb2NzL2F1dGgtZnJhbWV3b3JrLnJzdApAQCAtOTIxLDkgKzkyMSwxMiBAQAogICAgIGludCB2ZXJpZnlfaGFzaCh2b2lkICpkYXRhX3B0ciwgdW5zaWduZWQgaW50IGRhdGFfbGVuLAogICAgICAgICAgICAgICAgICAgICB2b2lkICpkaWdlc3RfaW5mb19wdHIsIHVuc2lnbmVkIGludCBkaWdlc3RfaW5mb19sZW4pOwogCi1UaGUga2V5IGFsZ29yaXRobSAocnNhLCBlY2RzYSkgbXVzdCBiZSBzcGVjaWZpZWQgaW4gdGhlIGJ1aWxkIHN5c3RlbSB1c2luZyB0aGUKLWBgVEZfTUJFRFRMU19LRVlfQUxHYGAgdmFyaWFibGUsIHNvIHRoZSBNYWtlZmlsZSBjYW4gaW5jbHVkZSB0aGUgY29ycmVzcG9uZGluZwotc291cmNlcyBpbiB0aGUgYnVpbGQuCitUaGUgbWJlZFRMUyBsaWJyYXJ5IGFsZ29yaXRobSBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQgYnkgdGhlCitgYFRGX01CRURUTFNfS0VZX0FMR2BgIHZhcmlhYmxlIHdoaWNoIGNhbiB0YWtlIGluIDMgdmFsdWVzOiBgcnNhYCwgYGVjZHNhYCBvcgorYHJzYStlY2RzYWAuIFRoaXMgdmFyaWFibGUgYWxsb3dzIHRoZSBNYWtlZmlsZSB0byBpbmNsdWRlIHRoZSBjb3JyZXNwb25kaW5nCitzb3VyY2VzIGluIHRoZSBidWlsZCBmb3IgdGhlIHZhcmlvdXMgYWxnb3J0aG1zLiBTZXR0aW5nIHRoZSB2YXJpYWJsZSB0bworYHJzYStlY2RzYWAgZW5hYmxlcyBzdXBwb3J0IGZvciBib3RoIHJzYSBhbmQgZWNkc2EgYWxnb3JpdGhtcyBpbiB0aGUgbWJlZFRMUworbGlicmFyeS4KIAogTm90ZTogSWYgY29kZSBzaXplIGlzIGEgY29uY2VybiwgdGhlIGJ1aWxkIG9wdGlvbiBgYE1CRURUTFNfU0hBMjU2X1NNQUxMRVJgYCBjYW4KIGJlIGRlZmluZWQgaW4gdGhlIHBsYXRmb3JtIE1ha2VmaWxlLiBJdCB3aWxsIG1ha2UgbWJlZCBUTFMgdXNlIGFuIGltcGxlbWVudGF0aW9uCkBAIC05MzEsNyArOTM0LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0KIAotKkNvcHlyaWdodCAoYykgMjAxNSwgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCisqQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLioKIAogLi4gX1RydXN0ZWQgQm9hcmQgQm9vdDogLi90cnVzdGVkLWJvYXJkLWJvb3QucnN0CiAuLiBfUGxhdGZvcm0gUG9ydGluZyBHdWlkZTogLi9wb3J0aW5nLWd1aWRlLnJzdApkaWZmIC0tZ2l0IGEvZG9jcy9maXJtd2FyZS1kZXNpZ24ucnN0IGIvZG9jcy9maXJtd2FyZS1kZXNpZ24ucnN0CmluZGV4IDk5N2QyOWIuLjQwNTk2NGQgMTAwNjQ0Ci0tLSBhL2RvY3MvZmlybXdhcmUtZGVzaWduLnJzdAorKysgYi9kb2NzL2Zpcm13YXJlLWRlc2lnbi5yc3QKQEAgLTg4NiwxMCArODg2LDEwIEBACiAKIFRPRE86IFByb3ZpZGUgZGVzaWduIHdhbGt0aHJvdWdoIG9mIFBTQ0kgaW1wbGVtZW50YXRpb24uCiAKLVRoZSBQU0NJIHYxLjAgc3BlY2lmaWNhdGlvbiBjYXRlZ29yaXplcyBBUElzIGFzIG9wdGlvbmFsIGFuZCBtYW5kYXRvcnkuIEFsbCB0aGUKLW1hbmRhdG9yeSBBUElzIGluIFBTQ0kgdjEuMCBhbmQgYWxsIHRoZSBBUElzIGluIFBTQ0kgdjAuMiBkcmFmdCBzcGVjaWZpY2F0aW9uCitUaGUgUFNDSSB2MS4xIHNwZWNpZmljYXRpb24gY2F0ZWdvcml6ZXMgQVBJcyBhcyBvcHRpb25hbCBhbmQgbWFuZGF0b3J5LiBBbGwgdGhlCittYW5kYXRvcnkgQVBJcyBpbiBQU0NJIHYxLjEsIFBTQ0kgdjEuMCBhbmQgaW4gUFNDSSB2MC4yIGRyYWZ0IHNwZWNpZmljYXRpb24KIGBQb3dlciBTdGF0ZSBDb29yZGluYXRpb24gSW50ZXJmYWNlIFBERGBfIGFyZSBpbXBsZW1lbnRlZC4gVGhlIHRhYmxlIGxpc3RzCi10aGUgUFNDSSB2MS4wIEFQSXMgYW5kIHRoZWlyIHN1cHBvcnQgaW4gZ2VuZXJpYyBjb2RlLgordGhlIFBTQ0kgdjEuMSBBUElzIGFuZCB0aGVpciBzdXBwb3J0IGluIGdlbmVyaWMgY29kZS4KIAogQW4gQVBJIGltcGxlbWVudGF0aW9uIG1pZ2h0IGhhdmUgYSBkZXBlbmRlbmN5IG9uIHBsYXRmb3JtIGNvZGUgZS5nLiBDUFVcX1NVU1BFTkQKIHJlcXVpcmVzIHRoZSBwbGF0Zm9ybSB0byBleHBvcnQgYSBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gSGVuY2UgdGhlIGxldmVsCkBAIC04OTgsOSArODk4LDkgQEAKIHJlcXVpcmVkIHN1cHBvcnQuCiAKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFBTQ0kgdjEuMCBBUEkgICAgICAgICAgICAgICB8IFN1cHBvcnRlZCAgIHwgQ29tbWVudHMgICAgICAgICAgICAgICAgICAgICAgfAorfCBQU0NJIHYxLjEgQVBJICAgICAgICAgICAgICAgfCBTdXBwb3J0ZWQgICB8IENvbW1lbnRzICAgICAgICAgICAgICAgICAgICAgIHwKICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IGBgUFNDSV9WRVJTSU9OYGAgICAgICAgICAgICB8IFllcyAgICAgICAgIHwgVGhlIHZlcnNpb24gcmV0dXJuZWQgaXMgMS4wICAgfAorfCBgYFBTQ0lfVkVSU0lPTmBgICAgICAgICAgICAgfCBZZXMgICAgICAgICB8IFRoZSB2ZXJzaW9uIHJldHVybmVkIGlzIDEuMSAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgQ1BVX1NVU1BFTkRgYCAgICAgICAgICAgICB8IFllc1wqICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTkzNiw2ICs5MzYsMTIgQEAKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgUFNDSV9TVEFUX0NPVU5UYGAgICAgICAgICB8IFllc1wqICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYGBTWVNURU1fUkVTRVQyYGAgICAgICAgICAgIHwgWWVzXCogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYE1FTV9QUk9URUNUYGAgICAgICAgICAgICAgfCBZZXNcKiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgTUVNX1BST1RFQ1RfQ0hFQ0tfUkFOR0VgYCB8IFllc1wqICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogXCpOb3RlIDogVGhlc2UgUFNDSSBBUElzIHJlcXVpcmUgcGxhdGZvcm0gcG93ZXIgbWFuYWdlbWVudCBob29rcyB0byBiZQogcmVnaXN0ZXJlZCB3aXRoIHRoZSBnZW5lcmljIFBTQ0kgY29kZSB0byBiZSBzdXBwb3J0ZWQuCkBAIC0xMTM4LDcgKzExNDQsNiBAQAogICAgIGNudHZfY3RsX2VsMCAgICA6MHgwMDAwMDAwMDAwMDAwMDAwCiAgICAgY250dl9jdmFsX2VsMCAgIDoweDAwMDAwMDAwMDAwMDAwMDAKICAgICBjbnRrY3RsX2VsMSA6MHgwMDAwMDAwMDAwMDAwMDAwCi0gICAgZnBleGMzMl9lbDIgOjB4MDAwMDAwMDAwNDAwMDcwMAogICAgIHNwX2VsMCAgOjB4MDAwMDAwMDAwNDAxMDc4MAogCiBHdWlkZWxpbmVzIGZvciBSZXNldCBIYW5kbGVycwpAQCAtMTE2MSw2ICsxMTY2LDU2IEBACiBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkIGFuZCBhY3QgYXMgYXBwcm9wcmlhdGUuIFBvc3NpYmxlIGNvdXJzZXMgb2YgYWN0aW9ucyBhcmUsCiBlLmcuIHNraXAgdGhlIGFjdGlvbiB0aGUgc2Vjb25kIHRpbWUsIG9yIHVuZG8vcmVkbyBpdC4KIAorQ29uZmlndXJpbmcgc2VjdXJlIGludGVycnVwdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBHSUMgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBwZXJmb3JtaW5nIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiBzZWN1cmUKK2ludGVycnVwdHMgb24gdGhlIHBsYXRmb3JtLiBUbyB0aGlzIGVuZCwgdGhlIHBsYXRmb3JtIGlzIGV4cGVjdGVkIHRvIHByb3ZpZGUgdGhlCitHSUMgZHJpdmVyIChlaXRoZXIgR0lDdjIgb3IgR0lDdjMsIGFzIHNlbGVjdGVkIGJ5IHRoZSBwbGF0Zm9ybSkgd2l0aCB0aGUKK2ludGVycnVwdCBjb25maWd1cmF0aW9uIGR1cmluZyB0aGUgZHJpdmVyIGluaXRpYWxpc2F0aW9uLgorCitUaGVyZSBhcmUgdHdvIHdheXMgdG8gc3BlY2lmeSBzZWN1cmUgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb246CisKKyMuIEFycmF5IG9mIHNlY3VyZSBpbnRlcnJ1cHQgcHJvcGVydGllczogSW4gdGhpcyBzY2hlbWUsIGluIGJvdGggR0lDdjIgYW5kIEdJQ3YzCisgICBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgYGBpbnRlcnJ1cHRfcHJvcHNgYCBtZW1iZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mCisgICBpbnRlcnJ1cHQgcHJvcGVydGllcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBzcGVjaWZpZXMgdGhlIGludGVycnVwdAorICAgbnVtYmVyIGFuZCBpdHMgY29uZmlndXJhdGlvbiwgdml6LiBwcmlvcml0eSwgZ3JvdXAsIGNvbmZpZ3VyYXRpb24uIEVhY2gKKyAgIGVsZW1lbnQgb2YgdGhlIGFycmF5IHNoYWxsIGJlIHBvcHVsYXRlZCBieSB0aGUgbWFjcm8gYGBJTlRSX1BST1BfREVTQygpYGAuCisgICBUaGUgbWFjcm8gdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisKKyAgIC0gIDEwLWJpdCBpbnRlcnJ1cHQgbnVtYmVyLAorCisgICAtICA4LWJpdCBpbnRlcnJ1cHQgcHJpb3JpdHksCisKKyAgIC0gIEludGVycnVwdCB0eXBlIChvbmUgb2YgYGBJTlRSX1RZUEVfRUwzYGAsIGBgSU5UUl9UWVBFX1NfRUwxYGAsCisgICAgICBgYElOVFJfVFlQRV9OU2BgKSwKKworICAgLSAgSW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gKGVpdGhlciBgYEdJQ19JTlRSX0NGR19MRVZFTGBgIG9yCisgICAgICBgYEdJQ19JTlRSX0NGR19FREdFYGApLgorCisjLiBBcnJheSBvZiBzZWN1cmUgaW50ZXJydXB0czogSW4gdGhpcyBzY2hlbWUsIHRoZSBHSUMgZHJpdmVyIGlzIHByb3ZpZGVkIGFuCisgICBhcnJheSBvZiBzZWN1cmUgaW50ZXJydXB0IG51bWJlcnMuIFRoZSBHSUMgZHJpdmVyLCBhdCB0aGUgdGltZSBvZgorICAgaW5pdGlhbGlzYXRpb24sIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGFycmF5IGFuZCBhc3NpZ25zIGVhY2ggaW50ZXJydXB0CisgICB0aGUgYXBwcm9wcmlhdGUgZ3JvdXAuCisKKyAgIC0gIEZvciB0aGUgR0lDdjIgZHJpdmVyLCBpbiBgYGdpY3YyX2RyaXZlcl9kYXRhYGAgc3RydWN0dXJlLCB0aGUKKyAgICAgIGBgZzBfaW50ZXJydXB0X2FycmF5YGAgbWVtYmVyIG9mIHRoZSBzaG91bGQgcG9pbnQgdG8gdGhlIGFycmF5IG9mCisgICAgICBpbnRlcnJ1cHRzIHRvIGJlIGFzc2lnbmVkIHRvICpHcm91cCAwKiwgYW5kIHRoZSBgYGcwX2ludGVycnVwdF9udW1gYAorICAgICAgbWVtYmVyIG9mIHRoZSBzaG91bGQgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyBpbiB0aGUgYXJyYXkuCisKKyAgIC0gIEZvciB0aGUgR0lDdjMgZHJpdmVyLCBpbiBgYGdpY3YzX2RyaXZlcl9kYXRhYGAgc3RydWN0dXJlOgorCisgICAgICAtICBUaGUgYGBnMF9pbnRlcnJ1cHRfYXJyYXlgYCBtZW1iZXIgb2YgdGhlIHNob3VsZCBwb2ludCB0byB0aGUgYXJyYXkgb2YKKyAgICAgICAgIGludGVycnVwdHMgdG8gYmUgYXNzaWduZWQgdG8gKkdyb3VwIDAqLCBhbmQgdGhlIGBgZzBfaW50ZXJydXB0X251bWBgCisgICAgICAgICBtZW1iZXIgb2YgdGhlIHNob3VsZCBiZSBzZXQgdG8gdGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIGluIHRoZSBhcnJheS4KKworICAgICAgLSAgVGhlIGBgZzFzX2ludGVycnVwdF9hcnJheWBgIG1lbWJlciBvZiB0aGUgc2hvdWxkIHBvaW50IHRvIHRoZSBhcnJheSBvZgorICAgICAgICAgaW50ZXJydXB0cyB0byBiZSBhc3NpZ25lZCB0byAqR3JvdXAgMSBTZWN1cmUqLCBhbmQgdGhlCisgICAgICAgICBgYGcxc19pbnRlcnJ1cHRfbnVtYGAgbWVtYmVyIG9mIHRoZSBzaG91bGQgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YKKyAgICAgICAgIGludGVycnVwdHMgaW4gdGhlIGFycmF5LgorCisgICAqKk5vdGUgdGhhdCB0aGlzIHNjaGVtZSBpcyBkZXByZWNhdGVkLioqCisKIENQVSBzcGVjaWZpYyBvcGVyYXRpb25zIGZyYW1ld29yawogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIyMDIsNiArMjI1Nyw5MyBAQAogVGhpcyBidWlsZCBmbGFnIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIG1pbmltaXNpbmcgbWVtb3J5IGZvb3RwcmludC4gT24gQVJNCiBwbGF0Zm9ybXMsIGl0IGlzIGVuYWJsZWQuCiAKK1B1Ymxpc2ggYW5kIFN1YnNjcmliZSBGcmFtZXdvcmsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIFB1Ymxpc2ggYW5kIFN1YnNjcmliZSBGcmFtZXdvcmsgYWxsb3dzIEVMMyBjb21wb25lbnRzIHRvIGRlZmluZSBhbmQgcHVibGlzaAorZXZlbnRzLCB0byB3aGljaCBvdGhlciBFTDMgY29tcG9uZW50cyBjYW4gc3Vic2NyaWJlLgorCitUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgcHJvdmlkZWQgYnkgdGhlIGZyYW1ld29yazoKKworLSAgYGBSRUdJU1RFUl9QVUJTVUJfRVZFTlQoZXZlbnQpYGA6IERlZmluZXMgYW4gZXZlbnQsIGFuZCB0YWtlcyBvbmUgYXJndW1lbnQsCisgICB0aGUgZXZlbnQgbmFtZSwgd2hpY2ggbXVzdCBiZSBhIHZhbGlkIEMgaWRlbnRpZmllci4gQWxsIGNhbGxzIHRvCisgICBgYFJFR0lTVEVSX1BVQlNVQl9FVkVOVGBgIG1hY3JvIG11c3QgYmUgcGxhY2VkIGluIHRoZSBmaWxlCisgICBgYHB1YnN1Yl9ldmVudHMuaGBgLgorCistICBgYFBVQkxJU0hfRVZFTlRfQVJHKGV2ZW50LCBhcmcpYGA6IFB1Ymxpc2hlcyBhIGRlZmluZWQgZXZlbnQsIGJ5IGl0ZXJhdGluZworICAgc3Vic2NyaWJlZCBoYW5kbGVycyBhbmQgY2FsbGluZyB0aGVtIGluIHR1cm4uIFRoZSBoYW5kbGVycyB3aWxsIGJlIHBhc3NlZCB0aGUKKyAgIHBhcmFtZXRlciBgYGFyZ2BgLiBUaGUgZXhwZWN0ZWQgdXNlLWNhc2UgaXMgdG8gYnJvYWRjYXN0IGFuIGV2ZW50LgorCistICBgYFBVQkxJU0hfRVZFTlQoZXZlbnQpYGA6IExpa2UgYGBQVUJMSVNIX0VWRU5UX0FSR2BgLCBleGNlcHQgdGhhdCB0aGUgdmFsdWUKKyAgIGBgTlVMTGBgIGlzIHBhc3NlZCB0byBzdWJzY3JpYmVkIGhhbmRsZXJzLgorCistICBgYFNVQlNDUklCRV9UT19FVkVOVChldmVudCwgaGFuZGxlcilgYDogUmVnaXN0ZXJzIHRoZSBgYGhhbmRsZXJgYCB0bworICAgc3Vic2NyaWJlIHRvIGBgZXZlbnRgYC4gVGhlIGhhbmRsZXIgd2lsbCBiZSBleGVjdXRlZCB3aGVuZXZlciB0aGUgYGBldmVudGBgCisgICBpcyBwdWJsaXNoZWQuCisKKy0gIGBgZm9yX2VhY2hfc3Vic2NyaWJlcihldmVudCwgc3Vic2NyaWJlcilgYDogSXRlcmF0ZXMgdGhyb3VnaCBhbGwgaGFuZGxlcnMKKyAgIHN1YnNjcmliZWQgZm9yIGBgZXZlbnRgYC4gYGBzdWJzY3JpYmVyYGAgbXVzdCBiZSBhIGxvY2FsIHZhcmlhYmxlIG9mIHR5cGUKKyAgIGBgcHVic3ViX2NiX3QgKmBgLCBhbmQgd2lsbCBwb2ludCB0byBlYWNoIHN1YnNjcmliZWQgaGFuZGxlciBpbiB0dXJuIGR1cmluZworICAgaXRlcmF0aW9uLiBUaGlzIG1hY3JvIGNhbiBiZSB1c2VkIGZvciB0aG9zZSBwYXR0ZXJucyB0aGF0IG5vbmUgb2YgdGhlCisgICBgYFBVQkxJU0hfRVZFTlRfKigpYGAgbWFjcm9zIGNvdmVyLgorCitQdWJsaXNoaW5nIGFuIGV2ZW50IHRoYXQgd2Fzbid0IGRlZmluZWQgdXNpbmcgYGBSRUdJU1RFUl9QVUJTVUJfRVZFTlRgYCB3aWxsCityZXN1bHQgaW4gYnVpbGQgZXJyb3IuIFN1YnNjcmliaW5nIHRvIGFuIHVuZGVmaW5lZCBldmVudCBob3dldmVyIHdvbid0LgorCitTdWJzY3JpYmVkIGhhbmRsZXJzIG11c3QgYmUgb2YgdHlwZSBgYHB1YnN1Yl9jYl90YGAsIHdpdGggZm9sbG93aW5nIGZ1bmN0aW9uCitzaWduYXR1cmU6CisKKzo6CisKKyAgIHR5cGVkZWYgdm9pZCogKCpwdWJzdWJfY2JfdCkoY29uc3Qgdm9pZCAqYXJnKTsKKworVGhlcmUgbWF5IGJlIGFyYml0cmFyeSBudW1iZXIgb2YgaGFuZGxlcnMgcmVnaXN0ZXJlZCB0byB0aGUgc2FtZSBldmVudC4gVGhlCitvcmRlciBpbiB3aGljaCBzdWJzY3JpYmVkIGhhbmRsZXJzIGFyZSBub3RpZmllZCB3aGVuIHRoYXQgZXZlbnQgaXMgcHVibGlzaGVkIGlzCitub3QgZGVmaW5lZC4gU3Vic2NyaWJlZCBoYW5kbGVycyBtYXkgYmUgZXhlY3V0ZWQgaW4gYW55IG9yZGVyOyBoYW5kbGVycyBzaG91bGQKK25vdCBhc3N1bWUgYW55IHJlbGF0aXZlIG9yZGVyaW5nIGFtb25nc3QgdGhlbS4KKworUHVibGlzaGluZyBhbiBldmVudCBvbiBhIFBFIHdpbGwgcmVzdWx0IGluIHN1YnNjcmliZWQgaGFuZGxlcnMgZXhlY3V0aW5nIG9uIHRoYXQKK1BFIG9ubHk7IGl0IHdvbid0IGNhdXNlIGhhbmRsZXJzIHRvIGV4ZWN1dGUgb24gYSBkaWZmZXJlbnQgUEUuCisKK05vdGUgdGhhdCBwdWJsaXNoaW5nIGFuIGV2ZW50IG9uIGEgUEUgYmxvY2tzIHVudGlsIGFsbCB0aGUgc3Vic2NyaWJlZCBoYW5kbGVycworZmluaXNoIGV4ZWN1dGluZyBvbiB0aGUgUEUuCisKK0FSTSBUcnVzdGVkIEZpcm13YXJlIGdlbmVyaWMgY29kZSBwdWJsaXNoZXMgYW5kIHN1YnNjcmliZXMgdG8gc29tZSBldmVudHMKK3dpdGhpbi4gUGxhdGZvcm0gcG9ydHMgYXJlIGRpc2NvdXJhZ2VkIGZyb20gc3Vic2NyaWJpbmcgdG8gdGhlbS4gVGhlc2UgZXZlbnRzCittYXkgYmUgd2l0aGRyYXduLCByZW5hbWVkLCBvciBoYXZlIHRoZWlyIHNlbWFudGljcyBhbHRlcmVkIGluIHRoZSBmdXR1cmUuCitQbGF0Zm9ybXMgbWF5IGhvd2V2ZXIgcmVnaXN0ZXIsIHB1Ymxpc2gsIGFuZCBzdWJzY3JpYmUgdG8gcGxhdGZvcm0tc3BlY2lmaWMKK2V2ZW50cy4KKworUHVibGlzaCBhbmQgU3Vic2NyaWJlIEV4YW1wbGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0EgcHVibGlzaGVyIHRoYXQgd2FudHMgdG8gcHVibGlzaCBldmVudCBgYGZvb2BgIHdvdWxkOgorCistICBEZWZpbmUgdGhlIGV2ZW50IGBgZm9vYGAgaW4gdGhlIGBgcHVic3ViX2V2ZW50cy5oYGAuCisKKyAgIDo6CisKKyAgICAgIFJFR0lTVEVSX1BVQlNVQl9FVkVOVChmb28pOworCistICBEZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiBldmVudCwgdXNlIG9uZSBvZiBgYFBVQkxJU0hfRVZFTlRfKigpYGAgbWFjcm9zIHRvCisgICBwdWJsaXNoIHRoZSBldmVudCBhdCB0aGUgYXBwcm9wcmlhdGUgcGF0aCBhbmQgdGltZSBvZiBleGVjdXRpb24uCisKK0Egc3Vic2NyaWJlciB0aGF0IHdhbnRzIHRvIHN1YnNjcmliZSB0byBldmVudCBgYGZvb2BgIHB1Ymxpc2hlZCBhYm92ZSB3b3VsZAoraW1wbGVtZW50OgorCis6OgorCisgICB2b2lkICpmb29faGFuZGxlcihjb25zdCB2b2lkICphcmcpCisgICB7CisgICAgICAgIHZvaWQgKnJlc3VsdDsKKworICAgICAgICAvKiBEbyBoYW5kbGluZyAuLi4gKi8KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgfQorCisgICBTVUJTQ1JJQkVfVE9fRVZFTlQoZm9vLCBmb29faGFuZGxlcik7CisKIFBlcmZvcm1hbmNlIE1lYXN1cmVtZW50IEZyYW1ld29yawogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIzNzcsNiArMjUxOSwzNSBAQAogICAgdGFibGUgZW50cmllcyBmb3IgYSBnaXZlbiBzdGFnZSBvZiB0cmFuc2xhdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIHRyYW5zbGF0aW9uCiAgICByZWdpbWUuCiAKK0FSTXY3Cit+fn5+fgorCitUaGlzIEFyY2hpdGVjdHVyZSBFeHRlbnNpb24gaXMgdGFyZ2V0ZWQgd2hlbiBgYEFSTV9BUkNIX01BSk9SYGAgPT0gNy4KKworVGhlcmUgYXJlIHNldmVyYWwgQVJNdjcgZXh0ZW5zaW9ucyBhdmFpbGFibGUuIE9idmlvdXNseSB0aGUgVHJ1c3Rab25lCitleHRlbnNpb24gaXMgbWFuZGF0b3J5IHRvIHN1cHBvcnQgdGhlIEFSTSBUcnVzdGVkIEZpcm13YXJlIGJvb3Rsb2FkZXIKK2FuZCBydW50aW1lIHNlcnZpY2VzLgorCitQbGF0Zm9ybSBpbXBsZW1lbnRpbmcgYW4gQVJNdjcgc3lzdGVtIGNhbiB0byBkZWZpbmUgZnJvbSBpdHMgdGFyZ2V0CitDb3J0ZXgtQSBhcmNoaXRlY3R1cmUgdGhyb3VnaCBgYEFSTV9DT1JURVhfQTxYPiA9IHllc2BgIGluIHRoZWlyCitgYHBsYWZvcm0ubWtgYCBzY3JpcHQuIEZvciBleGFtcGxlIGBgQVJNX0NPUlRFWF9BMTU9eWVzYGAgZm9yIGEKK0NvcnRleC1BMTUgdGFyZ2V0LgorCitQbGF0Zm9ybSBjYW4gYWxzbyBzZXQgYGBBUk1fV0lUSF9ORU9OPXllc2BgIHRvIGVuYWJsZSBuZW9uIHN1cHBvcnQuCitOb3RlIHRoYXQgdXNpbmcgbmVvbiBhdCBydW50aW1lIGhhcyBjb25zdHJhaW50cyBvbiBub24gc2VjdXJlIHdvbHJkIGNvbnRleHQuCitUaGUgdHJ1c3RlZCBmaXJtd2FyZSBkb2VzIG5vdCB5ZXQgcHJvdmlkZSBWRlAgY29udGV4dCBtYW5hZ2VtZW50LgorCitEaXJlY3RpdmUgYGBBUk1fQ09SVEVYX0E8eD5gYCBhbmQgYGBBUk1fV0lUSF9ORU9OYGAgYXJlIHVzZWQgdG8gc2V0Cit0aGUgdG9vbGNoYWluICB0YXJnZXQgYXJjaGl0ZWN0dXJlIGRpcmVjdGl2ZS4KKworUGxhdGZvcm0gbWF5IGNob29zZSB0byBub3QgZGVmaW5lIHN0cmFpZ2h0IHRoZSB0b29sY2hhaW4gdGFyZ2V0IGFyY2hpdGVjdHVyZQorZGlyZWN0aXZlIGJ5IGRlZmluaW5nIGBgTUFSQ0gzMl9ESVJFQ1RJVkVgYC4KK0kuZToKKworOjoKKworICAgTUFSQ0gzMl9ESVJFQ1RJVkUgOj0gLW1hY2g9YXJtdjctYQorCiBDb2RlIFN0cnVjdHVyZQogLS0tLS0tLS0tLS0tLS0KIApAQCAtMjQyNSw3ICsyNTk2LDcgQEAKIFJlZmVyZW5jZXMKIC0tLS0tLS0tLS0KIAotLi4gWyNdIFRydXN0ZWQgQm9hcmQgQm9vdCBSZXF1aXJlbWVudHMgQ0xJRU5UIFBERCAoQVJNIERFTiAwMDA2Qi01KS4gQXZhaWxhYmxlCisuLiBbI10gVHJ1c3RlZCBCb2FyZCBCb290IFJlcXVpcmVtZW50cyBDTElFTlQgUEREIChBUk0gREVOMDAwNkMtMSkuIEF2YWlsYWJsZQogICAgICAgIHVuZGVyIE5EQSB0aHJvdWdoIHlvdXIgQVJNIGFjY291bnQgcmVwcmVzZW50YXRpdmUuCiAuLiBbI10gYFBvd2VyIFN0YXRlIENvb3JkaW5hdGlvbiBJbnRlcmZhY2UgUEREYF8KIC4uIFsjXSBgU01DIENhbGxpbmcgQ29udmVudGlvbiBQRERgXwpkaWZmIC0tZ2l0IGEvZG9jcy9wbGFudHVtbC9wbGFudHVtbF90b19zdmcuc2ggYi9kb2NzL3BsYW50dW1sL3BsYW50dW1sX3RvX3N2Zy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYmY4NTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbGFudHVtbC9wbGFudHVtbF90b19zdmcuc2gKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL2Jhc2gKKworIyBDb252ZXJ0IGFsbCBQbGFudFVNTCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSB0byBTVkcgZmlsZXMuIFRoZSBwbGFudHVtbF9qYXIKKyMgZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBiZSBzZXQgdG8gdGhlIHBhdGggdG8gUGxhbnRVTUwgSkFSIGZpbGUuCisKK2lmIFsgLXogIiRwbGFudHVtbF9qYXIiIF07IHRoZW4KKwllY2hvICJVc2FnZTogcGxhbnR1bWxfamFyPS9wYXRoL3RvL3BsYW50dW1sLmphciAkMCAqLnB1bWwiID4mMgorCWV4aXQgMQorZmkKKworamF2YSAtamFyICIkcGxhbnR1bWxfamFyIiAtbm9tZXRhZGF0YSAtdHN2ZyAiJEAiCisKKyMgdmltOnNldCBub2V0IHN0cz04IHR3PTgwOgpkaWZmIC0tZ2l0IGEvZG9jcy9wbGFudHVtbC9zZGVpX2V4cGxpY2l0X2Rpc3BhdGNoLnB1bWwgYi9kb2NzL3BsYW50dW1sL3NkZWlfZXhwbGljaXRfZGlzcGF0Y2gucHVtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODBmY2QxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbGFudHVtbC9zZGVpX2V4cGxpY2l0X2Rpc3BhdGNoLnB1bWwKQEAgLTAsMCArMSw0NSBAQAorLycKKyAnIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAnCisgJyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgJy8KKworQHN0YXJ0dW1sCisKK2F1dG9udW1iZXIgIjxiPlsjXTwvYj4iCitwYXJ0aWNpcGFudCAiU0RFSSBjbGllbnQiIGFzIEVMMgorcGFydGljaXBhbnQgRUwzCitwYXJ0aWNpcGFudCAiU2VjdXJlIFBhcnRpdGlvbiIgYXMgU1AKKworYWN0aXZhdGUgRUwyCitFTDItPkVMMzogKipTREVJX0VWRU5UX1JFR0lTVEVSKiooZXYsIGhhbmRsZXIsIC4uLikKK0VMMy0+RUwyOiBzdWNjZXNzCitFTDItPkVMMzogKipTREVJX0VWRU5UX0VOQUJMRSoqKGV2KQorRUwzLT5FTDI6IHN1Y2Nlc3MKK0VMMi0+RUwzOiAqKlNERUlfUEVfVU5NQVNLKiooKQorRUwzLT5FTDI6IDEKKworLi4uIDw8QnVzaW5lc3MgYXMgdXN1YWw+PiAuLi4KKworRUwzPC0tXTogKipDUklUSUNBTCBFVkVOVCoqCithY3RpdmF0ZSBFTDMgI3JlZAorbm90ZSBvdmVyIEVMMzogQ3JpdGljYWwgZXZlbnQgdHJpYWdlCitFTDMtPlNQOiBkaXNwYXRjaAorYWN0aXZhdGUgU1AgI3NhbG1vbgorbm90ZSBvdmVyIFNQOiBDcml0aWNhbCBldmVudCBoYW5kbGluZworU1AtPkVMMzogZG9uZQorZGVhY3RpdmF0ZSBTUAorRUwzLS0+RUwzOiBzZGVpX2Rpc3BhdGNoX2V2ZW50KGV2KQorbm90ZSBvdmVyIEVMMzogUHJlcGFyZSBTREVJIGRpc3BhdGNoCitFTDMtPkVMMjogZGlzcGF0Y2gKK2FjdGl2YXRlIEVMMiAjc2FsbW9uCitub3RlIG92ZXIgRUwyOiBTREVJIGhhbmRsZXIKK0VMMi0+RUwzOiAqKlNERUlfRVZFTlRfQ09NUExFVEUoKSoqCitkZWFjdGl2YXRlIEVMMgorbm90ZSBvdmVyIEVMMzogQ29tcGxldGUgU0RFSSBkaXNwYXRjaAorRUwzLT5FTDI6IHJlc3VtZXMgcHJlZW1wdGVkIGV4ZWN1dGlvbgorZGVhY3RpdmF0ZSBFTDMKKworLi4uIDw8Tm9ybWFsIGV4ZWN1dGlvbiByZXN1bWVzPj4gLi4uCisKK0BlbmR1bWwKZGlmZiAtLWdpdCBhL2RvY3MvcGxhbnR1bWwvc2RlaV9leHBsaWNpdF9kaXNwYXRjaC5zdmcgYi9kb2NzL3BsYW50dW1sL3NkZWlfZXhwbGljaXRfZGlzcGF0Y2guc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MmRmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsYW50dW1sL3NkZWlfZXhwbGljaXRfZGlzcGF0Y2guc3ZnCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgY29udGVudFNjcmlwdFR5cGU9ImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiIGNvbnRlbnRTdHlsZVR5cGU9InRleHQvY3NzIiBoZWlnaHQ9Ijc2N3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBzdHlsZT0id2lkdGg6NjkycHg7aGVpZ2h0Ojc2N3B4OyIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNjkyIDc2NyIgd2lkdGg9IjY5MnB4IiB6b29tQW5kUGFuPSJtYWduaWZ5Ij48ZGVmcz48ZmlsdGVyIGhlaWdodD0iMzAwJSIgaWQ9ImZ1ZWVweXNhMDY2b2kiIHdpZHRoPSIzMDAlIiB4PSItMSIgeT0iLTEiPjxmZUdhdXNzaWFuQmx1ciByZXN1bHQ9ImJsdXJPdXQiIHN0ZERldmlhdGlvbj0iMi4wIi8+PGZlQ29sb3JNYXRyaXggaW49ImJsdXJPdXQiIHJlc3VsdD0iYmx1ck91dDIiIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAuNCAwIi8+PGZlT2Zmc2V0IGR4PSI0LjAiIGR5PSI0LjAiIGluPSJibHVyT3V0MiIgcmVzdWx0PSJibHVyT3V0MyIvPjxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQzIiBtb2RlPSJub3JtYWwiLz48L2ZpbHRlcj48L2RlZnM+PGc+PHJlY3QgZmlsbD0iI0ZGRkZGRiIgZmlsdGVyPSJ1cmwoI2Z1ZWVweXNhMDY2b2kpIiBoZWlnaHQ9IjE3NC43OTY5IiBzdHlsZT0ic3Ryb2tlOiAjRkZGRkZGOyBzdHJva2Utd2lkdGg6IDEuMDsiIHdpZHRoPSIxMCIgeD0iNTYuNSIgeT0iNDguMjk2OSIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjU2LjUiIHgyPSI1Ni41IiB5MT0iNDguMjk2OSIgeTI9IjIyMy4wOTM4Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjYuNSIgeDI9IjY2LjUiIHkxPSI0OC4yOTY5IiB5Mj0iMjIzLjA5MzgiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI1Ni41IiB4Mj0iNjYuNSIgeTE9IjQ4LjI5NjkiIHkyPSI0OC4yOTY5Ii8+PHJlY3QgZmlsbD0iI0ZGRkZGRiIgZmlsdGVyPSJ1cmwoI2Z1ZWVweXNhMDY2b2kpIiBoZWlnaHQ9IjQxMi41OTM4IiBzdHlsZT0ic3Ryb2tlOiAjRkZGRkZGOyBzdHJva2Utd2lkdGg6IDEuMDsiIHdpZHRoPSIxMCIgeD0iNTYuNSIgeT0iMjYzLjg5ODQiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI1Ni41IiB4Mj0iNTYuNSIgeTE9IjI2My44OTg0IiB5Mj0iNjc2LjQ5MjIiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2Ni41IiB4Mj0iNjYuNSIgeTE9IjI2My44OTg0IiB5Mj0iNjc2LjQ5MjIiLz48cmVjdCBmaWxsPSIjRkZGRkZGIiBmaWx0ZXI9InVybCgjZnVlZXB5c2EwNjZvaSkiIGhlaWdodD0iMSIgc3R5bGU9InN0cm9rZTogI0ZGRkZGRjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB3aWR0aD0iMTAiIHg9IjU2LjUiIHk9IjcxNy4yOTY5Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNTYuNSIgeDI9IjU2LjUiIHkxPSI3MTcuMjk2OSIgeTI9IjcxOC4yOTY5Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjYuNSIgeDI9IjY2LjUiIHkxPSI3MTcuMjk2OSIgeTI9IjcxOC4yOTY5Ii8+PHJlY3QgZmlsbD0iI0ZBODA3MiIgZmlsdGVyPSJ1cmwoI2Z1ZWVweXNhMDY2b2kpIiBoZWlnaHQ9IjY4LjI2NTYiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgd2lkdGg9IjEwIiB4PSI2MS41IiB5PSI1MzEuODI4MSIvPjxyZWN0IGZpbGw9IiNGRjAwMDAiIGZpbHRlcj0idXJsKCNmdWVlcHlzYTA2Nm9pKSIgaGVpZ2h0PSIzODMuNDYwOSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB3aWR0aD0iMTAiIHg9IjM3NS41IiB5PSIyODQuODk4NCIvPjxyZWN0IGZpbGw9IiNGQTgwNzIiIGZpbHRlcj0idXJsKCNmdWVlcHlzYTA2Nm9pKSIgaGVpZ2h0PSI2OC4yNjU2IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHdpZHRoPSIxMCIgeD0iNTg4LjUiIHk9IjM1My4xNjQxIi8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjEiIHgyPSI2MSIgeTE9IjM4LjI5NjkiIHkyPSIyMjMuMDkzOCIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyBzdHJva2UtZGFzaGFycmF5OiAxLjAsNC4wOyIgeDE9IjYxIiB4Mj0iNjEiIHkxPSIyMjMuMDkzOCIgeTI9IjI2My44OTg0Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjEiIHgyPSI2MSIgeTE9IjI2My44OTg0IiB5Mj0iNjc2LjQ5MjIiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogMS4wLDQuMDsiIHgxPSI2MSIgeDI9IjYxIiB5MT0iNjc2LjQ5MjIiIHkyPSI3MTcuMjk2OSIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjYxIiB4Mj0iNjEiIHkxPSI3MTcuMjk2OSIgeTI9IjcyNy4yOTY5Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMzgwIiB4Mj0iMzgwIiB5MT0iMzguMjk2OSIgeTI9IjIyMy4wOTM4Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDEuMCw0LjA7IiB4MT0iMzgwIiB4Mj0iMzgwIiB5MT0iMjIzLjA5MzgiIHkyPSIyNjMuODk4NCIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjM4MCIgeDI9IjM4MCIgeTE9IjI2My44OTg0IiB5Mj0iNjc2LjQ5MjIiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogMS4wLDQuMDsiIHgxPSIzODAiIHgyPSIzODAiIHkxPSI2NzYuNDkyMiIgeTI9IjcxNy4yOTY5Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMzgwIiB4Mj0iMzgwIiB5MT0iNzE3LjI5NjkiIHkyPSI3MjcuMjk2OSIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjU5MyIgeDI9IjU5MyIgeTE9IjM4LjI5NjkiIHkyPSIyMjMuMDkzOCIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyBzdHJva2UtZGFzaGFycmF5OiAxLjAsNC4wOyIgeDE9IjU5MyIgeDI9IjU5MyIgeTE9IjIyMy4wOTM4IiB5Mj0iMjYzLjg5ODQiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI1OTMiIHgyPSI1OTMiIHkxPSIyNjMuODk4NCIgeTI9IjY3Ni40OTIyIi8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDEuMCw0LjA7IiB4MT0iNTkzIiB4Mj0iNTkzIiB5MT0iNjc2LjQ5MjIiIHkyPSI3MTcuMjk2OSIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjU5MyIgeDI9IjU5MyIgeTE9IjcxNy4yOTY5IiB5Mj0iNzI3LjI5NjkiLz48cmVjdCBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZnVlZXB5c2EwNjZvaSkiIGhlaWdodD0iMzAuMjk2OSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjU7IiB3aWR0aD0iODciIHg9IjE2IiB5PSIzIi8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNzMiIHg9IjIzIiB5PSIyMi45OTUxIj5TREVJIGNsaWVudDwvdGV4dD48cmVjdCBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZnVlZXB5c2EwNjZvaSkiIGhlaWdodD0iMzAuMjk2OSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjU7IiB3aWR0aD0iODciIHg9IjE2IiB5PSI3MjYuMjk2OSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjczIiB4PSIyMyIgeT0iNzQ2LjI5MiI+U0RFSSBjbGllbnQ8L3RleHQ+PHJlY3QgZmlsbD0iI0ZFRkVDRSIgZmlsdGVyPSJ1cmwoI2Z1ZWVweXNhMDY2b2kpIiBoZWlnaHQ9IjMwLjI5NjkiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS41OyIgd2lkdGg9IjM5IiB4PSIzNTkiIHk9IjMiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIyNSIgeD0iMzY2IiB5PSIyMi45OTUxIj5FTDM8L3RleHQ+PHJlY3QgZmlsbD0iI0ZFRkVDRSIgZmlsdGVyPSJ1cmwoI2Z1ZWVweXNhMDY2b2kpIiBoZWlnaHQ9IjMwLjI5NjkiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS41OyIgd2lkdGg9IjM5IiB4PSIzNTkiIHk9IjcyNi4yOTY5Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMjUiIHg9IjM2NiIgeT0iNzQ2LjI5MiI+RUwzPC90ZXh0PjxyZWN0IGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmdWVlcHlzYTA2Nm9pKSIgaGVpZ2h0PSIzMC4yOTY5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuNTsiIHdpZHRoPSIxMjMiIHg9IjUzMCIgeT0iMyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjEwOSIgeD0iNTM3IiB5PSIyMi45OTUxIj5TZWN1cmUgUGFydGl0aW9uPC90ZXh0PjxyZWN0IGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmdWVlcHlzYTA2Nm9pKSIgaGVpZ2h0PSIzMC4yOTY5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuNTsiIHdpZHRoPSIxMjMiIHg9IjUzMCIgeT0iNzI2LjI5NjkiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxMDkiIHg9IjUzNyIgeT0iNzQ2LjI5MiI+U2VjdXJlIFBhcnRpdGlvbjwvdGV4dD48cmVjdCBmaWxsPSIjRkZGRkZGIiBmaWx0ZXI9InVybCgjZnVlZXB5c2EwNjZvaSkiIGhlaWdodD0iMTc0Ljc5NjkiIHN0eWxlPSJzdHJva2U6ICNGRkZGRkY7IHN0cm9rZS13aWR0aDogMS4wOyIgd2lkdGg9IjEwIiB4PSI1Ni41IiB5PSI0OC4yOTY5Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNTYuNSIgeDI9IjU2LjUiIHkxPSI0OC4yOTY5IiB5Mj0iMjIzLjA5MzgiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2Ni41IiB4Mj0iNjYuNSIgeTE9IjQ4LjI5NjkiIHkyPSIyMjMuMDkzOCIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjU2LjUiIHgyPSI2Ni41IiB5MT0iNDguMjk2OSIgeTI9IjQ4LjI5NjkiLz48cmVjdCBmaWxsPSIjRkZGRkZGIiBmaWx0ZXI9InVybCgjZnVlZXB5c2EwNjZvaSkiIGhlaWdodD0iNDEyLjU5MzgiIHN0eWxlPSJzdHJva2U6ICNGRkZGRkY7IHN0cm9rZS13aWR0aDogMS4wOyIgd2lkdGg9IjEwIiB4PSI1Ni41IiB5PSIyNjMuODk4NCIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjU2LjUiIHgyPSI1Ni41IiB5MT0iMjYzLjg5ODQiIHkyPSI2NzYuNDkyMiIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjY2LjUiIHgyPSI2Ni41IiB5MT0iMjYzLjg5ODQiIHkyPSI2NzYuNDkyMiIvPjxyZWN0IGZpbGw9IiNGRkZGRkYiIGZpbHRlcj0idXJsKCNmdWVlcHlzYTA2Nm9pKSIgaGVpZ2h0PSIxIiBzdHlsZT0ic3Ryb2tlOiAjRkZGRkZGOyBzdHJva2Utd2lkdGg6IDEuMDsiIHdpZHRoPSIxMCIgeD0iNTYuNSIgeT0iNzE3LjI5NjkiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI1Ni41IiB4Mj0iNTYuNSIgeTE9IjcxNy4yOTY5IiB5Mj0iNzE4LjI5NjkiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2Ni41IiB4Mj0iNjYuNSIgeTE9IjcxNy4yOTY5IiB5Mj0iNzE4LjI5NjkiLz48cmVjdCBmaWxsPSIjRkE4MDcyIiBmaWx0ZXI9InVybCgjZnVlZXB5c2EwNjZvaSkiIGhlaWdodD0iNjguMjY1NiIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB3aWR0aD0iMTAiIHg9IjYxLjUiIHk9IjUzMS44MjgxIi8+PHJlY3QgZmlsbD0iI0ZGMDAwMCIgZmlsdGVyPSJ1cmwoI2Z1ZWVweXNhMDY2b2kpIiBoZWlnaHQ9IjM4My40NjA5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHdpZHRoPSIxMCIgeD0iMzc1LjUiIHk9IjI4NC44OTg0Ii8+PHJlY3QgZmlsbD0iI0ZBODA3MiIgZmlsdGVyPSJ1cmwoI2Z1ZWVweXNhMDY2b2kpIiBoZWlnaHQ9IjY4LjI2NTYiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgd2lkdGg9IjEwIiB4PSI1ODguNSIgeT0iMzUzLjE2NDEiLz48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjM2OC41LDY1LjI5NjksMzc4LjUsNjkuMjk2OSwzNjguNSw3My4yOTY5LDM3Mi41LDY5LjI5NjkiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjY2LjUiIHgyPSIzNzQuNSIgeTE9IjY5LjI5NjkiIHkyPSI2OS4yOTY5Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjIxIiB4PSI3My41IiB5PSI2NC4zNjM4Ij5bMV08L3RleHQ+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjE2NCIgeD0iOTguNSIgeT0iNjQuMzYzOCI+U0RFSV9FVkVOVF9SRUdJU1RFUjwvdGV4dD48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxMDEiIHg9IjI2Mi41IiB5PSI2NC4zNjM4Ij4oZXYsIGhhbmRsZXIsIC4uLik8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI3Ny41LDk0LjQyOTcsNjcuNSw5OC40Mjk3LDc3LjUsMTAyLjQyOTcsNzMuNSw5OC40Mjk3IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI3MS41IiB4Mj0iMzc5LjUiIHkxPSI5OC40Mjk3IiB5Mj0iOTguNDI5NyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIyMSIgeD0iODMuNSIgeT0iOTMuNDk2NiI+WzJdPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjUxIiB4PSIxMDguNSIgeT0iOTMuNDk2NiI+c3VjY2VzczwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjM2OC41LDEyMy41NjI1LDM3OC41LDEyNy41NjI1LDM2OC41LDEzMS41NjI1LDM3Mi41LDEyNy41NjI1IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2Ni41IiB4Mj0iMzc0LjUiIHkxPSIxMjcuNTYyNSIgeTI9IjEyNy41NjI1Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjIxIiB4PSI3My41IiB5PSIxMjIuNjI5NCI+WzNdPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxNTEiIHg9Ijk4LjUiIHk9IjEyMi42Mjk0Ij5TREVJX0VWRU5UX0VOQUJMRTwvdGV4dD48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIyNSIgeD0iMjQ5LjUiIHk9IjEyMi42Mjk0Ij4oZXYpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iNzcuNSwxNTIuNjk1Myw2Ny41LDE1Ni42OTUzLDc3LjUsMTYwLjY5NTMsNzMuNSwxNTYuNjk1MyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNzEuNSIgeDI9IjM3OS41IiB5MT0iMTU2LjY5NTMiIHkyPSIxNTYuNjk1MyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIyMSIgeD0iODMuNSIgeT0iMTUxLjc2MjIiPls0XTwvdGV4dD48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI1MSIgeD0iMTA4LjUiIHk9IjE1MS43NjIyIj5zdWNjZXNzPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iMzY4LjUsMTgxLjgyODEsMzc4LjUsMTg1LjgyODEsMzY4LjUsMTg5LjgyODEsMzcyLjUsMTg1LjgyODEiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjY2LjUiIHgyPSIzNzQuNSIgeTE9IjE4NS44MjgxIiB5Mj0iMTg1LjgyODEiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMjEiIHg9IjczLjUiIHk9IjE4MC44OTUiPls1XTwvdGV4dD48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMTI5IiB4PSI5OC41IiB5PSIxODAuODk1Ij5TREVJX1BFX1VOTUFTSzwvdGV4dD48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxMCIgeD0iMjI3LjUiIHk9IjE4MC44OTUiPigpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iNzcuNSwyMTAuOTYwOSw2Ny41LDIxNC45NjA5LDc3LjUsMjE4Ljk2MDksNzMuNSwyMTQuOTYwOSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNzEuNSIgeDI9IjM3OS41IiB5MT0iMjE0Ljk2MDkiIHkyPSIyMTQuOTYwOSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIyMSIgeD0iODMuNSIgeT0iMjEwLjAyNzgiPls2XTwvdGV4dD48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI4IiB4PSIxMDguNSIgeT0iMjEwLjAyNzgiPjE8L3RleHQ+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTEiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMTQyIiB4PSIyNTYuNSIgeT0iMjQ3LjMwNDIiPiZsdDsmbHQ7QnVzaW5lc3MgYXMgdXN1YWwmZ3Q7Jmd0OzwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjM5Ni41LDI4MC44OTg0LDM4Ni41LDI4NC44OTg0LDM5Ni41LDI4OC44OTg0LDM5Mi41LDI4NC44OTg0IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogMi4wLDIuMDsiIHgxPSIzOTAuNSIgeDI9IjY4MCIgeTE9IjI4NC44OTg0IiB5Mj0iMjg0Ljg5ODQiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMjEiIHg9IjQwMi41IiB5PSIyNzkuOTY1MyI+WzddPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxMTYiIHg9IjQyNy41IiB5PSIyNzkuOTY1MyI+Q1JJVElDQUwgRVZFTlQ8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0ZCRkI3NyIgZmlsdGVyPSJ1cmwoI2Z1ZWVweXNhMDY2b2kpIiBwb2ludHM9IjMwNiwyOTguMDMxMywzMDYsMzIzLjAzMTMsNDUxLDMyMy4wMzEzLDQ1MSwzMDguMDMxMyw0NDEsMjk4LjAzMTMsMzA2LDI5OC4wMzEzIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI0NDEiIHgyPSI0NDEiIHkxPSIyOTguMDMxMyIgeTI9IjMwOC4wMzEzIi8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNDUxIiB4Mj0iNDQxIiB5MT0iMzA4LjAzMTMiIHkyPSIzMDguMDMxMyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjEyNCIgeD0iMzEyIiB5PSIzMTUuMDk4MSI+Q3JpdGljYWwgZXZlbnQgdHJpYWdlPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iNTc2LjUsMzQ5LjE2NDEsNTg2LjUsMzUzLjE2NDEsNTc2LjUsMzU3LjE2NDEsNTgwLjUsMzUzLjE2NDEiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjM4NS41IiB4Mj0iNTgyLjUiIHkxPSIzNTMuMTY0MSIgeTI9IjM1My4xNjQxIi8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjIxIiB4PSIzOTIuNSIgeT0iMzQ4LjIzMSI+WzhdPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjU0IiB4PSI0MTcuNSIgeT0iMzQ4LjIzMSI+ZGlzcGF0Y2g8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0ZCRkI3NyIgZmlsdGVyPSJ1cmwoI2Z1ZWVweXNhMDY2b2kpIiBwb2ludHM9IjUxMCwzNjYuMjk2OSw1MTAsMzkxLjI5NjksNjcyLDM5MS4yOTY5LDY3MiwzNzYuMjk2OSw2NjIsMzY2LjI5NjksNTEwLDM2Ni4yOTY5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2NjIiIHgyPSI2NjIiIHkxPSIzNjYuMjk2OSIgeTI9IjM3Ni4yOTY5Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjcyIiB4Mj0iNjYyIiB5MT0iMzc2LjI5NjkiIHkyPSIzNzYuMjk2OSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjE0MSIgeD0iNTE2IiB5PSIzODMuMzYzOCI+Q3JpdGljYWwgZXZlbnQgaGFuZGxpbmc8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSIzOTYuNSw0MTcuNDI5NywzODYuNSw0MjEuNDI5NywzOTYuNSw0MjUuNDI5NywzOTIuNSw0MjEuNDI5NyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMzkwLjUiIHgyPSI1OTIuNSIgeTE9IjQyMS40Mjk3IiB5Mj0iNDIxLjQyOTciLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMjEiIHg9IjQwMi41IiB5PSI0MTYuNDk2NiI+WzldPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjMyIiB4PSI0MjcuNSIgeT0iNDE2LjQ5NjYiPmRvbmU8L3RleHQ+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDIuMCwyLjA7IiB4MT0iMzg1LjUiIHgyPSI0MjcuNSIgeTE9IjQ1MC42OTUzIiB5Mj0iNDUwLjY5NTMiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogMi4wLDIuMDsiIHgxPSI0MjcuNSIgeDI9IjQyNy41IiB5MT0iNDUwLjY5NTMiIHkyPSI0NjMuNjk1MyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyBzdHJva2UtZGFzaGFycmF5OiAyLjAsMi4wOyIgeDE9IjM4Ni41IiB4Mj0iNDI3LjUiIHkxPSI0NjMuNjk1MyIgeTI9IjQ2My42OTUzIi8+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSIzOTYuNSw0NTkuNjk1MywzODYuNSw0NjMuNjk1MywzOTYuNSw0NjcuNjk1MywzOTIuNSw0NjMuNjk1MyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjMwIiB4PSIzOTIuNSIgeT0iNDQ1LjYyOTQiPlsxMF08L3RleHQ+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMTU1IiB4PSI0MjYuNSIgeT0iNDQ1LjYyOTQiPnNkZWlfZGlzcGF0Y2hfZXZlbnQoZXYpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNGQkZCNzciIGZpbHRlcj0idXJsKCNmdWVlcHlzYTA2Nm9pKSIgcG9pbnRzPSIyOTcsNDc2LjY5NTMsMjk3LDUwMS42OTUzLDQ2MCw1MDEuNjk1Myw0NjAsNDg2LjY5NTMsNDUwLDQ3Ni42OTUzLDI5Nyw0NzYuNjk1MyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNDUwIiB4Mj0iNDUwIiB5MT0iNDc2LjY5NTMiIHkyPSI0ODYuNjk1MyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjQ2MCIgeDI9IjQ1MCIgeTE9IjQ4Ni42OTUzIiB5Mj0iNDg2LjY5NTMiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxNDIiIHg9IjMwMyIgeT0iNDkzLjc2MjIiPlByZXBhcmUgU0RFSSBkaXNwYXRjaDwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjgyLjUsNTI3LjgyODEsNzIuNSw1MzEuODI4MSw4Mi41LDUzNS44MjgxLDc4LjUsNTMxLjgyODEiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9Ijc2LjUiIHgyPSIzNzQuNSIgeTE9IjUzMS44MjgxIiB5Mj0iNTMxLjgyODEiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMzAiIHg9Ijg4LjUiIHk9IjUyNi44OTUiPlsxMV08L3RleHQ+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNTQiIHg9IjEyMi41IiB5PSI1MjYuODk1Ij5kaXNwYXRjaDwvdGV4dD48cG9seWdvbiBmaWxsPSIjRkJGQjc3IiBmaWx0ZXI9InVybCgjZnVlZXB5c2EwNjZvaSkiIHBvaW50cz0iOCw1NDQuOTYwOSw4LDU2OS45NjA5LDExMSw1NjkuOTYwOSwxMTEsNTU0Ljk2MDksMTAxLDU0NC45NjA5LDgsNTQ0Ljk2MDkiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjEwMSIgeDI9IjEwMSIgeTE9IjU0NC45NjA5IiB5Mj0iNTU0Ljk2MDkiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSIxMTEiIHgyPSIxMDEiIHkxPSI1NTQuOTYwOSIgeTI9IjU1NC45NjA5Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iODIiIHg9IjE0IiB5PSI1NjIuMDI3OCI+U0RFSSBoYW5kbGVyPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iMzYzLjUsNTk2LjA5MzgsMzczLjUsNjAwLjA5MzgsMzYzLjUsNjA0LjA5MzgsMzY3LjUsNjAwLjA5MzgiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjY2LjUiIHgyPSIzNjkuNSIgeTE9IjYwMC4wOTM4IiB5Mj0iNjAwLjA5MzgiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMzAiIHg9IjczLjUiIHk9IjU5NS4xNjA2Ij5bMTJdPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxODQiIHg9IjEwNy41IiB5PSI1OTUuMTYwNiI+U0RFSV9FVkVOVF9DT01QTEVURSgpPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNGQkZCNzciIGZpbHRlcj0idXJsKCNmdWVlcHlzYTA2Nm9pKSIgcG9pbnRzPSIyOTEsNjEzLjIyNjYsMjkxLDYzOC4yMjY2LDQ2Niw2MzguMjI2Niw0NjYsNjIzLjIyNjYsNDU2LDYxMy4yMjY2LDI5MSw2MTMuMjI2NiIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNDU2IiB4Mj0iNDU2IiB5MT0iNjEzLjIyNjYiIHkyPSI2MjMuMjI2NiIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjQ2NiIgeDI9IjQ1NiIgeTE9IjYyMy4yMjY2IiB5Mj0iNjIzLjIyNjYiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxNTQiIHg9IjI5NyIgeT0iNjMwLjI5MzUiPkNvbXBsZXRlIFNERUkgZGlzcGF0Y2g8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI3Ny41LDY2NC4zNTk0LDY3LjUsNjY4LjM1OTQsNzcuNSw2NzIuMzU5NCw3My41LDY2OC4zNTk0IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI3MS41IiB4Mj0iMzc5LjUiIHkxPSI2NjguMzU5NCIgeTI9IjY2OC4zNTk0Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjMwIiB4PSI4My41IiB5PSI2NjMuNDI2MyI+WzEzXTwvdGV4dD48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxOTciIHg9IjExNy41IiB5PSI2NjMuNDI2MyI+cmVzdW1lcyBwcmVlbXB0ZWQgZXhlY3V0aW9uPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjExIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjE5MCIgeD0iMjMyLjUiIHk9IjcwMC43MDI2Ij4mbHQ7Jmx0O05vcm1hbCBleGVjdXRpb24gcmVzdW1lcyZndDsmZ3Q7PC90ZXh0PjwvZz48L3N2Zz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsYW50dW1sL3NkZWlfZ2VuZXJhbC5wdW1sIGIvZG9jcy9wbGFudHVtbC9zZGVpX2dlbmVyYWwucHVtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjY5MjlhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbGFudHVtbC9zZGVpX2dlbmVyYWwucHVtbApAQCAtMCwwICsxLDQzIEBACisvJworICcgQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICcKKyAnIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAnLworCitAc3RhcnR1bWwKKworYXV0b251bWJlciAiPGI+WyNdPC9iPiIKK3BhcnRpY2lwYW50ICJTREVJIGNsaWVudCIgYXMgRUwyCitwYXJ0aWNpcGFudCBFTDMKK3BhcnRpY2lwYW50ICJTREVJIGludGVycnVwdCBzb3VyY2UiIGFzIFNERUkKKworYWN0aXZhdGUgRUwyCitFTDItPkVMMzogKipTREVJX0lOVEVSUlVQVF9CSU5EKiooaXJxKQorRUwzLT5FTDI6IGV2ZW50IG51bWJlcjogZXYKK0VMMi0+RUwzOiAqKlNERUlfRVZFTlRfUkVHSVNURVIqKihldiwgaGFuZGxlciwgLi4uKQorRUwzLT5FTDI6IHN1Y2Nlc3MKK0VMMi0+RUwzOiAqKlNERUlfRVZFTlRfRU5BQkxFKiooZXYpCitFTDMtPkVMMjogc3VjY2VzcworRUwyLT5FTDM6ICoqU0RFSV9QRV9VTk1BU0sqKigpCitFTDMtPkVMMjogMQorCisuLi4gPDxCdXNpbmVzcyBhcyB1c3VhbD4+IC4uLgorCitTREVJLS0+RUwzOiBTREVJIGludGVycnVwdAorYWN0aXZhdGUgU0RFSSAjc2FsbW9uCithY3RpdmF0ZSBFTDMgI3JlZAorbm90ZSBvdmVyIEVMMzogUHJlcGFyZSBTREVJIGRpc3BhdGNoCitFTDMtPkVMMjogZGlzcGF0Y2gKK2FjdGl2YXRlIEVMMiAjc2FsbW9uCitub3RlIG92ZXIgRUwyOiBTREVJIGhhbmRsZXIKK0VMMi0+RUwzOiAqKlNERUlfRVZFTlRfQ09NUExFVEUoKSoqCitkZWFjdGl2YXRlIEVMMgorbm90ZSBvdmVyIEVMMzogQ29tcGxldGUgU0RFSSBkaXNwYXRjaAorRUwzLS0+U0RFSTogRU9JCitkZWFjdGl2YXRlIFNERUkKK0VMMy0+RUwyOiByZXN1bWVzIHByZWVtcHRlZCBleGVjdXRpb24KK2RlYWN0aXZhdGUgRUwzCisKKy4uLiA8PE5vcm1hbCBleGVjdXRpb24gcmVzdW1lcz4+IC4uLgorCitAZW5kdW1sCmRpZmYgLS1naXQgYS9kb2NzL3BsYW50dW1sL3NkZWlfZ2VuZXJhbC5zdmcgYi9kb2NzL3BsYW50dW1sL3NkZWlfZ2VuZXJhbC5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE3MjExMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGxhbnR1bWwvc2RlaV9nZW5lcmFsLnN2ZwpAQCAtMCwwICsxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGNvbnRlbnRTY3JpcHRUeXBlPSJhcHBsaWNhdGlvbi9lY21hc2NyaXB0IiBjb250ZW50U3R5bGVUeXBlPSJ0ZXh0L2NzcyIgaGVpZ2h0PSI2NzZweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSIgc3R5bGU9IndpZHRoOjYwOHB4O2hlaWdodDo2NzZweDsiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDYwOCA2NzYiIHdpZHRoPSI2MDhweCIgem9vbUFuZFBhbj0ibWFnbmlmeSI+PGRlZnM+PGZpbHRlciBoZWlnaHQ9IjMwMCUiIGlkPSJmdmRzMmlqcnRicDV1IiB3aWR0aD0iMzAwJSIgeD0iLTEiIHk9Ii0xIj48ZmVHYXVzc2lhbkJsdXIgcmVzdWx0PSJibHVyT3V0IiBzdGREZXZpYXRpb249IjIuMCIvPjxmZUNvbG9yTWF0cml4IGluPSJibHVyT3V0IiByZXN1bHQ9ImJsdXJPdXQyIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgLjQgMCIvPjxmZU9mZnNldCBkeD0iNC4wIiBkeT0iNC4wIiBpbj0iYmx1ck91dDIiIHJlc3VsdD0iYmx1ck91dDMiLz48ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJibHVyT3V0MyIgbW9kZT0ibm9ybWFsIi8+PC9maWx0ZXI+PC9kZWZzPjxnPjxyZWN0IGZpbGw9IiNGRkZGRkYiIGZpbHRlcj0idXJsKCNmdmRzMmlqcnRicDV1KSIgaGVpZ2h0PSIyMzMuMDYyNSIgc3R5bGU9InN0cm9rZTogI0ZGRkZGRjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB3aWR0aD0iMTAiIHg9IjU2LjUiIHk9IjQ4LjI5NjkiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI1Ni41IiB4Mj0iNTYuNSIgeTE9IjQ4LjI5NjkiIHkyPSIyODEuMzU5NCIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjY2LjUiIHgyPSI2Ni41IiB5MT0iNDguMjk2OSIgeTI9IjI4MS4zNTk0Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNTYuNSIgeDI9IjY2LjUiIHkxPSI0OC4yOTY5IiB5Mj0iNDguMjk2OSIvPjxyZWN0IGZpbGw9IiNGRkZGRkYiIGZpbHRlcj0idXJsKCNmdmRzMmlqcnRicDV1KSIgaGVpZ2h0PSIyNjMuMDYyNSIgc3R5bGU9InN0cm9rZTogI0ZGRkZGRjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB3aWR0aD0iMTAiIHg9IjU2LjUiIHk9IjMyMi4xNjQxIi8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNTYuNSIgeDI9IjU2LjUiIHkxPSIzMjIuMTY0MSIgeTI9IjU4NS4yMjY2Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjYuNSIgeDI9IjY2LjUiIHkxPSIzMjIuMTY0MSIgeTI9IjU4NS4yMjY2Ii8+PHJlY3QgZmlsbD0iI0ZGRkZGRiIgZmlsdGVyPSJ1cmwoI2Z2ZHMyaWpydGJwNXUpIiBoZWlnaHQ9IjEiIHN0eWxlPSJzdHJva2U6ICNGRkZGRkY7IHN0cm9rZS13aWR0aDogMS4wOyIgd2lkdGg9IjEwIiB4PSI1Ni41IiB5PSI2MjYuMDMxMyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjU2LjUiIHgyPSI1Ni41IiB5MT0iNjI2LjAzMTMiIHkyPSI2MjcuMDMxMyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjY2LjUiIHgyPSI2Ni41IiB5MT0iNjI2LjAzMTMiIHkyPSI2MjcuMDMxMyIvPjxyZWN0IGZpbGw9IiNGQTgwNzIiIGZpbHRlcj0idXJsKCNmdmRzMmlqcnRicDV1KSIgaGVpZ2h0PSI2OC4yNjU2IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHdpZHRoPSIxMCIgeD0iNjEuNSIgeT0iNDExLjQyOTciLz48cmVjdCBmaWxsPSIjRkYwMDAwIiBmaWx0ZXI9InVybCgjZnZkczJpanJ0YnA1dSkiIGhlaWdodD0iMjMzLjkyOTciIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgd2lkdGg9IjEwIiB4PSIzNzUuNSIgeT0iMzQzLjE2NDEiLz48cmVjdCBmaWxsPSIjRkE4MDcyIiBmaWx0ZXI9InVybCgjZnZkczJpanJ0YnA1dSkiIGhlaWdodD0iMjA0Ljc5NjkiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgd2lkdGg9IjEwIiB4PSI1MTMuNSIgeT0iMzQzLjE2NDEiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2MSIgeDI9IjYxIiB5MT0iMzguMjk2OSIgeTI9IjI4MS4zNTk0Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDEuMCw0LjA7IiB4MT0iNjEiIHgyPSI2MSIgeTE9IjI4MS4zNTk0IiB5Mj0iMzIyLjE2NDEiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2MSIgeDI9IjYxIiB5MT0iMzIyLjE2NDEiIHkyPSI1ODUuMjI2NiIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyBzdHJva2UtZGFzaGFycmF5OiAxLjAsNC4wOyIgeDE9IjYxIiB4Mj0iNjEiIHkxPSI1ODUuMjI2NiIgeTI9IjYyNi4wMzEzIi8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjEiIHgyPSI2MSIgeTE9IjYyNi4wMzEzIiB5Mj0iNjM2LjAzMTMiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSIzODAiIHgyPSIzODAiIHkxPSIzOC4yOTY5IiB5Mj0iMjgxLjM1OTQiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogMS4wLDQuMDsiIHgxPSIzODAiIHgyPSIzODAiIHkxPSIyODEuMzU5NCIgeTI9IjMyMi4xNjQxIi8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMzgwIiB4Mj0iMzgwIiB5MT0iMzIyLjE2NDEiIHkyPSI1ODUuMjI2NiIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyBzdHJva2UtZGFzaGFycmF5OiAxLjAsNC4wOyIgeDE9IjM4MCIgeDI9IjM4MCIgeTE9IjU4NS4yMjY2IiB5Mj0iNjI2LjAzMTMiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSIzODAiIHgyPSIzODAiIHkxPSI2MjYuMDMxMyIgeTI9IjYzNi4wMzEzIi8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNTE4IiB4Mj0iNTE4IiB5MT0iMzguMjk2OSIgeTI9IjI4MS4zNTk0Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDEuMCw0LjA7IiB4MT0iNTE4IiB4Mj0iNTE4IiB5MT0iMjgxLjM1OTQiIHkyPSIzMjIuMTY0MSIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjUxOCIgeDI9IjUxOCIgeTE9IjMyMi4xNjQxIiB5Mj0iNTg1LjIyNjYiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogMS4wLDQuMDsiIHgxPSI1MTgiIHgyPSI1MTgiIHkxPSI1ODUuMjI2NiIgeTI9IjYyNi4wMzEzIi8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNTE4IiB4Mj0iNTE4IiB5MT0iNjI2LjAzMTMiIHkyPSI2MzYuMDMxMyIvPjxyZWN0IGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmdmRzMmlqcnRicDV1KSIgaGVpZ2h0PSIzMC4yOTY5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuNTsiIHdpZHRoPSI4NyIgeD0iMTYiIHk9IjMiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI3MyIgeD0iMjMiIHk9IjIyLjk5NTEiPlNERUkgY2xpZW50PC90ZXh0PjxyZWN0IGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmdmRzMmlqcnRicDV1KSIgaGVpZ2h0PSIzMC4yOTY5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuNTsiIHdpZHRoPSI4NyIgeD0iMTYiIHk9IjYzNS4wMzEzIi8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNzMiIHg9IjIzIiB5PSI2NTUuMDI2NCI+U0RFSSBjbGllbnQ8L3RleHQ+PHJlY3QgZmlsbD0iI0ZFRkVDRSIgZmlsdGVyPSJ1cmwoI2Z2ZHMyaWpydGJwNXUpIiBoZWlnaHQ9IjMwLjI5NjkiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS41OyIgd2lkdGg9IjM5IiB4PSIzNTkiIHk9IjMiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIyNSIgeD0iMzY2IiB5PSIyMi45OTUxIj5FTDM8L3RleHQ+PHJlY3QgZmlsbD0iI0ZFRkVDRSIgZmlsdGVyPSJ1cmwoI2Z2ZHMyaWpydGJwNXUpIiBoZWlnaHQ9IjMwLjI5NjkiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS41OyIgd2lkdGg9IjM5IiB4PSIzNTkiIHk9IjYzNS4wMzEzIi8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMjUiIHg9IjM2NiIgeT0iNjU1LjAyNjQiPkVMMzwvdGV4dD48cmVjdCBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZnZkczJpanJ0YnA1dSkiIGhlaWdodD0iMzAuMjk2OSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjU7IiB3aWR0aD0iMTYxIiB4PSI0MzYiIHk9IjMiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxNDciIHg9IjQ0MyIgeT0iMjIuOTk1MSI+U0RFSSBpbnRlcnJ1cHQgc291cmNlPC90ZXh0PjxyZWN0IGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmdmRzMmlqcnRicDV1KSIgaGVpZ2h0PSIzMC4yOTY5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuNTsiIHdpZHRoPSIxNjEiIHg9IjQzNiIgeT0iNjM1LjAzMTMiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxNDciIHg9IjQ0MyIgeT0iNjU1LjAyNjQiPlNERUkgaW50ZXJydXB0IHNvdXJjZTwvdGV4dD48cmVjdCBmaWxsPSIjRkZGRkZGIiBmaWx0ZXI9InVybCgjZnZkczJpanJ0YnA1dSkiIGhlaWdodD0iMjMzLjA2MjUiIHN0eWxlPSJzdHJva2U6ICNGRkZGRkY7IHN0cm9rZS13aWR0aDogMS4wOyIgd2lkdGg9IjEwIiB4PSI1Ni41IiB5PSI0OC4yOTY5Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNTYuNSIgeDI9IjU2LjUiIHkxPSI0OC4yOTY5IiB5Mj0iMjgxLjM1OTQiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2Ni41IiB4Mj0iNjYuNSIgeTE9IjQ4LjI5NjkiIHkyPSIyODEuMzU5NCIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjU2LjUiIHgyPSI2Ni41IiB5MT0iNDguMjk2OSIgeTI9IjQ4LjI5NjkiLz48cmVjdCBmaWxsPSIjRkZGRkZGIiBmaWx0ZXI9InVybCgjZnZkczJpanJ0YnA1dSkiIGhlaWdodD0iMjYzLjA2MjUiIHN0eWxlPSJzdHJva2U6ICNGRkZGRkY7IHN0cm9rZS13aWR0aDogMS4wOyIgd2lkdGg9IjEwIiB4PSI1Ni41IiB5PSIzMjIuMTY0MSIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjU2LjUiIHgyPSI1Ni41IiB5MT0iMzIyLjE2NDEiIHkyPSI1ODUuMjI2NiIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjY2LjUiIHgyPSI2Ni41IiB5MT0iMzIyLjE2NDEiIHkyPSI1ODUuMjI2NiIvPjxyZWN0IGZpbGw9IiNGRkZGRkYiIGZpbHRlcj0idXJsKCNmdmRzMmlqcnRicDV1KSIgaGVpZ2h0PSIxIiBzdHlsZT0ic3Ryb2tlOiAjRkZGRkZGOyBzdHJva2Utd2lkdGg6IDEuMDsiIHdpZHRoPSIxMCIgeD0iNTYuNSIgeT0iNjI2LjAzMTMiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI1Ni41IiB4Mj0iNTYuNSIgeTE9IjYyNi4wMzEzIiB5Mj0iNjI3LjAzMTMiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2Ni41IiB4Mj0iNjYuNSIgeTE9IjYyNi4wMzEzIiB5Mj0iNjI3LjAzMTMiLz48cmVjdCBmaWxsPSIjRkE4MDcyIiBmaWx0ZXI9InVybCgjZnZkczJpanJ0YnA1dSkiIGhlaWdodD0iNjguMjY1NiIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB3aWR0aD0iMTAiIHg9IjYxLjUiIHk9IjQxMS40Mjk3Ii8+PHJlY3QgZmlsbD0iI0ZGMDAwMCIgZmlsdGVyPSJ1cmwoI2Z2ZHMyaWpydGJwNXUpIiBoZWlnaHQ9IjIzMy45Mjk3IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHdpZHRoPSIxMCIgeD0iMzc1LjUiIHk9IjM0My4xNjQxIi8+PHJlY3QgZmlsbD0iI0ZBODA3MiIgZmlsdGVyPSJ1cmwoI2Z2ZHMyaWpydGJwNXUpIiBoZWlnaHQ9IjIwNC43OTY5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHdpZHRoPSIxMCIgeD0iNTEzLjUiIHk9IjM0My4xNjQxIi8+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSIzNjguNSw2NS4yOTY5LDM3OC41LDY5LjI5NjksMzY4LjUsNzMuMjk2OSwzNzIuNSw2OS4yOTY5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2Ni41IiB4Mj0iMzc0LjUiIHkxPSI2OS4yOTY5IiB5Mj0iNjkuMjk2OSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIyMSIgeD0iNzMuNSIgeT0iNjQuMzYzOCI+WzFdPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxNjMiIHg9Ijk4LjUiIHk9IjY0LjM2MzgiPlNERUlfSU5URVJSVVBUX0JJTkQ8L3RleHQ+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMjYiIHg9IjI2MS41IiB5PSI2NC4zNjM4Ij4oaXJxKTwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9Ijc3LjUsOTQuNDI5Nyw2Ny41LDk4LjQyOTcsNzcuNSwxMDIuNDI5Nyw3My41LDk4LjQyOTciIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjcxLjUiIHgyPSIzNzkuNSIgeTE9Ijk4LjQyOTciIHkyPSI5OC40Mjk3Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjIxIiB4PSI4My41IiB5PSI5My40OTY2Ij5bMl08L3RleHQ+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMTEzIiB4PSIxMDguNSIgeT0iOTMuNDk2NiI+ZXZlbnQgbnVtYmVyOiBldjwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjM2OC41LDEyMy41NjI1LDM3OC41LDEyNy41NjI1LDM2OC41LDEzMS41NjI1LDM3Mi41LDEyNy41NjI1IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2Ni41IiB4Mj0iMzc0LjUiIHkxPSIxMjcuNTYyNSIgeTI9IjEyNy41NjI1Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjIxIiB4PSI3My41IiB5PSIxMjIuNjI5NCI+WzNdPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxNjQiIHg9Ijk4LjUiIHk9IjEyMi42Mjk0Ij5TREVJX0VWRU5UX1JFR0lTVEVSPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjEwMSIgeD0iMjYyLjUiIHk9IjEyMi42Mjk0Ij4oZXYsIGhhbmRsZXIsIC4uLik8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI3Ny41LDE1Mi42OTUzLDY3LjUsMTU2LjY5NTMsNzcuNSwxNjAuNjk1Myw3My41LDE1Ni42OTUzIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI3MS41IiB4Mj0iMzc5LjUiIHkxPSIxNTYuNjk1MyIgeTI9IjE1Ni42OTUzIi8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjIxIiB4PSI4My41IiB5PSIxNTEuNzYyMiI+WzRdPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjUxIiB4PSIxMDguNSIgeT0iMTUxLjc2MjIiPnN1Y2Nlc3M8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSIzNjguNSwxODEuODI4MSwzNzguNSwxODUuODI4MSwzNjguNSwxODkuODI4MSwzNzIuNSwxODUuODI4MSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNjYuNSIgeDI9IjM3NC41IiB5MT0iMTg1LjgyODEiIHkyPSIxODUuODI4MSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIyMSIgeD0iNzMuNSIgeT0iMTgwLjg5NSI+WzVdPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxNTEiIHg9Ijk4LjUiIHk9IjE4MC44OTUiPlNERUlfRVZFTlRfRU5BQkxFPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjI1IiB4PSIyNDkuNSIgeT0iMTgwLjg5NSI+KGV2KTwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9Ijc3LjUsMjEwLjk2MDksNjcuNSwyMTQuOTYwOSw3Ny41LDIxOC45NjA5LDczLjUsMjE0Ljk2MDkiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjcxLjUiIHgyPSIzNzkuNSIgeTE9IjIxNC45NjA5IiB5Mj0iMjE0Ljk2MDkiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMjEiIHg9IjgzLjUiIHk9IjIxMC4wMjc4Ij5bNl08L3RleHQ+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNTEiIHg9IjEwOC41IiB5PSIyMTAuMDI3OCI+c3VjY2VzczwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjM2OC41LDI0MC4wOTM4LDM3OC41LDI0NC4wOTM4LDM2OC41LDI0OC4wOTM4LDM3Mi41LDI0NC4wOTM4IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2Ni41IiB4Mj0iMzc0LjUiIHkxPSIyNDQuMDkzOCIgeTI9IjI0NC4wOTM4Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjIxIiB4PSI3My41IiB5PSIyMzkuMTYwNiI+WzddPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxMjkiIHg9Ijk4LjUiIHk9IjIzOS4xNjA2Ij5TREVJX1BFX1VOTUFTSzwvdGV4dD48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxMCIgeD0iMjI3LjUiIHk9IjIzOS4xNjA2Ij4oKTwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9Ijc3LjUsMjY5LjIyNjYsNjcuNSwyNzMuMjI2Niw3Ny41LDI3Ny4yMjY2LDczLjUsMjczLjIyNjYiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjcxLjUiIHgyPSIzNzkuNSIgeTE9IjI3My4yMjY2IiB5Mj0iMjczLjIyNjYiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMjEiIHg9IjgzLjUiIHk9IjI2OC4yOTM1Ij5bOF08L3RleHQ+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iOCIgeD0iMTA4LjUiIHk9IjI2OC4yOTM1Ij4xPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjExIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjE0MiIgeD0iMjE5IiB5PSIzMDUuNTY5OCI+Jmx0OyZsdDtCdXNpbmVzcyBhcyB1c3VhbCZndDsmZ3Q7PC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iMzk2LjUsMzM5LjE2NDEsMzg2LjUsMzQzLjE2NDEsMzk2LjUsMzQ3LjE2NDEsMzkyLjUsMzQzLjE2NDEiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyBzdHJva2UtZGFzaGFycmF5OiAyLjAsMi4wOyIgeDE9IjM5MC41IiB4Mj0iNTEyLjUiIHkxPSIzNDMuMTY0MSIgeTI9IjM0My4xNjQxIi8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjIxIiB4PSI0MDIuNSIgeT0iMzM4LjIzMSI+WzldPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9Ijg5IiB4PSI0MjcuNSIgeT0iMzM4LjIzMSI+U0RFSSBpbnRlcnJ1cHQ8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0ZCRkI3NyIgZmlsdGVyPSJ1cmwoI2Z2ZHMyaWpydGJwNXUpIiBwb2ludHM9IjI5NywzNTYuMjk2OSwyOTcsMzgxLjI5NjksNDYwLDM4MS4yOTY5LDQ2MCwzNjYuMjk2OSw0NTAsMzU2LjI5NjksMjk3LDM1Ni4yOTY5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI0NTAiIHgyPSI0NTAiIHkxPSIzNTYuMjk2OSIgeTI9IjM2Ni4yOTY5Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNDYwIiB4Mj0iNDUwIiB5MT0iMzY2LjI5NjkiIHkyPSIzNjYuMjk2OSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjE0MiIgeD0iMzAzIiB5PSIzNzMuMzYzOCI+UHJlcGFyZSBTREVJIGRpc3BhdGNoPC90ZXh0Pjxwb2x5Z29uIGZpbGw9IiNBODAwMzYiIHBvaW50cz0iODIuNSw0MDcuNDI5Nyw3Mi41LDQxMS40Mjk3LDgyLjUsNDE1LjQyOTcsNzguNSw0MTEuNDI5NyIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iNzYuNSIgeDI9IjM3NC41IiB5MT0iNDExLjQyOTciIHkyPSI0MTEuNDI5NyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIzMCIgeD0iODguNSIgeT0iNDA2LjQ5NjYiPlsxMF08L3RleHQ+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iNTQiIHg9IjEyMi41IiB5PSI0MDYuNDk2NiI+ZGlzcGF0Y2g8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0ZCRkI3NyIgZmlsdGVyPSJ1cmwoI2Z2ZHMyaWpydGJwNXUpIiBwb2ludHM9IjgsNDI0LjU2MjUsOCw0NDkuNTYyNSwxMTEsNDQ5LjU2MjUsMTExLDQzNC41NjI1LDEwMSw0MjQuNTYyNSw4LDQyNC41NjI1IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSIxMDEiIHgyPSIxMDEiIHkxPSI0MjQuNTYyNSIgeTI9IjQzNC41NjI1Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IiB4MT0iMTExIiB4Mj0iMTAxIiB5MT0iNDM0LjU2MjUiIHkyPSI0MzQuNTYyNSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjgyIiB4PSIxNCIgeT0iNDQxLjYyOTQiPlNERUkgaGFuZGxlcjwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjM2My41LDQ3NS42OTUzLDM3My41LDQ3OS42OTUzLDM2My41LDQ4My42OTUzLDM2Ny41LDQ3OS42OTUzIiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI2Ni41IiB4Mj0iMzY5LjUiIHkxPSI0NzkuNjk1MyIgeTI9IjQ3OS42OTUzIi8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjMwIiB4PSI3My41IiB5PSI0NzQuNzYyMiI+WzExXTwvdGV4dD48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMTg0IiB4PSIxMDcuNSIgeT0iNDc0Ljc2MjIiPlNERUlfRVZFTlRfQ09NUExFVEUoKTwvdGV4dD48cG9seWdvbiBmaWxsPSIjRkJGQjc3IiBmaWx0ZXI9InVybCgjZnZkczJpanJ0YnA1dSkiIHBvaW50cz0iMjkxLDQ5Mi44MjgxLDI5MSw1MTcuODI4MSw0NjYsNTE3LjgyODEsNDY2LDUwMi44MjgxLDQ1Niw0OTIuODI4MSwyOTEsNDkyLjgyODEiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIvPjxsaW5lIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS4wOyIgeDE9IjQ1NiIgeDI9IjQ1NiIgeTE9IjQ5Mi44MjgxIiB5Mj0iNTAyLjgyODEiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI0NjYiIHgyPSI0NTYiIHkxPSI1MDIuODI4MSIgeTI9IjUwMi44MjgxIi8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMTU0IiB4PSIyOTciIHk9IjUwOS44OTUiPkNvbXBsZXRlIFNERUkgZGlzcGF0Y2g8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI1MDYuNSw1NDMuOTYwOSw1MTYuNSw1NDcuOTYwOSw1MDYuNSw1NTEuOTYwOSw1MTAuNSw1NDcuOTYwOSIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDIuMCwyLjA7IiB4MT0iMzg1LjUiIHgyPSI1MTIuNSIgeTE9IjU0Ny45NjA5IiB5Mj0iNTQ3Ljk2MDkiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMzAiIHg9IjM5Mi41IiB5PSI1NDMuMDI3OCI+WzEyXTwvdGV4dD48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIyMSIgeD0iNDI2LjUiIHk9IjU0My4wMjc4Ij5FT0k8L3RleHQ+PHBvbHlnb24gZmlsbD0iI0E4MDAzNiIgcG9pbnRzPSI3Ny41LDU3My4wOTM4LDY3LjUsNTc3LjA5MzgsNzcuNSw1ODEuMDkzOCw3My41LDU3Ny4wOTM4IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSI3MS41IiB4Mj0iMzc5LjUiIHkxPSI1NzcuMDkzOCIgeTI9IjU3Ny4wOTM4Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjMwIiB4PSI4My41IiB5PSI1NzIuMTYwNiI+WzEzXTwvdGV4dD48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIxOTciIHg9IjExNy41IiB5PSI1NzIuMTYwNiI+cmVzdW1lcyBwcmVlbXB0ZWQgZXhlY3V0aW9uPC90ZXh0Pjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjExIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjE5MCIgeD0iMTk1IiB5PSI2MDkuNDM3Ij4mbHQ7Jmx0O05vcm1hbCBleGVjdXRpb24gcmVzdW1lcyZndDsmZ3Q7PC90ZXh0PjwvZz48L3N2Zz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsYXQvaGlrZXkucnN0IGIvZG9jcy9wbGF0L2hpa2V5LnJzdAppbmRleCBlMTk0ZWRlLi4xYzQ4MTA0IDEwMDY0NAotLS0gYS9kb2NzL3BsYXQvaGlrZXkucnN0CisrKyBiL2RvY3MvcGxhdC9oaWtleS5yc3QKQEAgLTM4LDYgKzM4LDE2IEBACiAtICBGZXRjaCBhbGwgdGhlIGFib3ZlIHJlcG9zaXRvcmllcyBpbnRvIGxvY2FsIGhvc3QuCiAgICBNYWtlIGFsbCB0aGUgcmVwb3NpdG9yaWVzIGluIHRoZSBzYW1lICR7QlVJTERcX1BBVEh9LgogCisgIC4uIGNvZGU6OiBzaGVsbAorCisgICAgICAgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9BUk0tc29mdHdhcmUvYXJtLXRydXN0ZWQtZmlybXdhcmUgLWIgaW50ZWdyYXRpb24KKyAgICAgICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL09QLVRFRS9vcHRlZV9vcworICAgICAgIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vOTZib2FyZHMtaGlrZXkvZWRrMiAtYiB0ZXN0aW5nL2hpa2V5OTYwX3YyLjUKKyAgICAgICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tLzk2Ym9hcmRzLWhpa2V5L09wZW5QbGF0Zm9ybVBrZyAtYiB0ZXN0aW5nL2hpa2V5OTYwX3YxLjMuNAorICAgICAgIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vOTZib2FyZHMtaGlrZXkvbC1sb2FkZXIgLWIgdGVzdGluZy9oaWtleTk2MF92MS4yCisgICAgICAgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0LmxpbmFyby5vcmcvdWVmaS91ZWZpLXRvb2xzCisgICAgICAgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS85NmJvYXJkcy1oaWtleS9hdGYtZmFzdGJvb3QKKwogLSAgQ3JlYXRlIHRoZSBzeW1ib2wgbGluayB0byBPcGVuUGxhdGZvcm1Qa2cgaW4gZWRrMi4KIAogICAgLi4gY29kZTo6IHNoZWxsCkBAIC03NCwyMCArODQsMTUgQEAKICAgICAgICBjZCAke0VESzJfRElSfQogICAgICAgICMgQnVpbGQgVUVGSSAmIEFSTSBUcnVzdCBGaXJtd2FyZQogICAgICAgICR7VUVGSV9UT09MU19ESVJ9L3VlZmktYnVpbGQuc2ggLWIgJHtCVUlMRF9PUFRJT059IC1hIC4uL2FybS10cnVzdGVkLWZpcm13YXJlIC1zIC4uL29wdGVlX29zIGhpa2V5Ci0gICAgICAgIyBHZW5lcmF0ZSBsLWxvYWRlci5iaW4KLSAgICAgICBjZCAke0JVSUxEX1BBVEh9L2wtbG9hZGVyCi0gICAgICAgbG4gLXNmICR7RURLMl9PVVRQVVRfRElSfS9GVi9ibDEuYmluCi0gICAgICAgbG4gLXNmICR7QlVJTERfUEFUSH0vYXRmLWZhc3Rib290L2J1aWxkL2hpa2V5LyR7RkFTVEJPT1RfQlVJTERfT1BUSU9OfS9ibDEuYmluIGZhc3Rib290LmJpbgotICAgICAgIGFybS1saW51eC1nbnVlYWJpaGYtZ2NjIC1jIC1vIHN0YXJ0Lm8gc3RhcnQuUwotICAgICAgIGFybS1saW51eC1nbnVlYWJpaGYtbGQgLUJzdGF0aWMgLVRsLWxvYWRlci5sZHMgLVR0ZXh0IDB4Zjk4MDA4MDAgc3RhcnQubyAtbyBsb2FkZXIKLSAgICAgICBhcm0tbGludXgtZ251ZWFiaWhmLW9iamNvcHkgLU8gYmluYXJ5IGxvYWRlciB0ZW1wCi0gICAgICAgcHl0aG9uIGdlbl9sb2FkZXJfaGlrZXkucHkgLW8gbC1sb2FkZXIuYmluIC0taW1nX2xvYWRlcj10ZW1wIC0taW1nX2JsMT1ibDEuYmluIC0taW1nX25zX2JsMXU9ZmFzdGJvb3QuYmluCiAKLS0gIEdlbmVyYXRlIHBhcnRpdGlvbiB0YWJsZSBmb3IgYW9zcC4gVGhlIGVNTUMgY2FwYWNpdHkgaXMgZWl0aGVyIDRHQiBvciA4R0IuIEp1c3QgY2hhbmdlICJhb3NwLTRnIiB0byAibGludXgtNGciIGZvciBkZWJpYW4uCistICBHZW5lcmF0ZSBsLWxvYWRlci5iaW4gYW5kIHBhcnRpdGlvbiB0YWJsZSBmb3IgYW9zcC4gVGhlIGVNTUMgY2FwYWNpdHkgaXMgZWl0aGVyIDhHQiBvciA0R0IuIEp1c3QgY2hhbmdlICJhb3NwLThnIiB0byAibGludXgtOGciIGZvciBkZWJpYW4uCiAKICAgIC4uIGNvZGU6OiBzaGVsbAogCi0gICAgICAgUFRBQkxFPWFvc3AtNGcgU0VDVE9SX1NJWkU9NTEyIGJhc2ggLXggZ2VuZXJhdGVfcHRhYmxlLnNoCisgICAgICAgY2QgJHtCVUlMRF9QQVRIfS9sLWxvYWRlcgorICAgICAgIGxuIC1zZiAke0VESzJfT1VUUFVUX0RJUn0vRlYvYmwxLmJpbgorICAgICAgIGxuIC1zZiAke0JVSUxEX1BBVEh9L2F0Zi1mYXN0Ym9vdC9idWlsZC9oaWtleS8ke0ZBU1RCT09UX0JVSUxEX09QVElPTn0vYmwxLmJpbiBmYXN0Ym9vdC5iaW4KKyAgICAgICBtYWtlIGhpa2V5IFBUQUJMRV9MU1Q9YW9zcC04ZwogCiBTZXR1cCBDb25zb2xlCiAtLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kb2NzL3BsYXQvaGlrZXk5NjAucnN0IGIvZG9jcy9wbGF0L2hpa2V5OTYwLnJzdAppbmRleCBjZDE4ODBlLi44NTI0YjQ4IDEwMDY0NAotLS0gYS9kb2NzL3BsYXQvaGlrZXk5NjAucnN0CisrKyBiL2RvY3MvcGxhdC9oaWtleTk2MC5yc3QKQEAgLTM1LDYgKzM1LDE1IEBACiAtICBGZXRjaCBhbGwgdGhlIGFib3ZlIDUgcmVwb3NpdG9yaWVzIGludG8gbG9jYWwgaG9zdC4KICAgIE1ha2UgYWxsIHRoZSByZXBvc2l0b3JpZXMgaW4gdGhlIHNhbWUgJHtCVUlMRFxfUEFUSH0uCiAKKyAgLi4gY29kZTo6IHNoZWxsCisKKyAgICAgICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL0FSTS1zb2Z0d2FyZS9hcm0tdHJ1c3RlZC1maXJtd2FyZSAtYiBpbnRlZ3JhdGlvbgorICAgICAgIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vT1AtVEVFL29wdGVlX29zCisgICAgICAgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS85NmJvYXJkcy1oaWtleS9lZGsyIC1iIHRlc3RpbmcvaGlrZXk5NjBfdjIuNQorICAgICAgIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vOTZib2FyZHMtaGlrZXkvT3BlblBsYXRmb3JtUGtnIC1iIHRlc3RpbmcvaGlrZXk5NjBfdjEuMy40CisgICAgICAgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS85NmJvYXJkcy1oaWtleS9sLWxvYWRlciAtYiB0ZXN0aW5nL2hpa2V5OTYwX3YxLjIKKyAgICAgICBnaXQgY2xvbmUgaHR0cHM6Ly9naXQubGluYXJvLm9yZy91ZWZpL3VlZmktdG9vbHMKKwogLSAgQ3JlYXRlIHRoZSBzeW1ib2wgbGluayB0byBPcGVuUGxhdGZvcm1Qa2cgaW4gZWRrMi4KIAogICAgLi4gY29kZTo6IHNoZWxsCkBAIC02NiwxOSArNzUsMTcgQEAKICAgICAgICBjZCAke0VESzJfRElSfQogICAgICAgICMgQnVpbGQgVUVGSSAmIEFSTSBUcnVzdCBGaXJtd2FyZQogICAgICAgICR7VUVGSV9UT09MU19ESVJ9L3VlZmktYnVpbGQuc2ggLWIgJHtCVUlMRF9PUFRJT059IC1hIC4uL2FybS10cnVzdGVkLWZpcm13YXJlIC1zIC4uL29wdGVlX29zIGhpa2V5OTYwCi0gICAgICAgIyBHZW5lcmF0ZSBsLWxvYWRlci5iaW4KLSAgICAgICBjZCAke0JVSUxEX1BBVEh9L2wtbG9hZGVyCi0gICAgICAgbG4gLXNmICR7RURLMl9PVVRQVVRfRElSfS9GVi9ibDEuYmluCi0gICAgICAgbG4gLXNmICR7RURLMl9PVVRQVVRfRElSfS9GVi9maXAuYmluCi0gICAgICAgbG4gLXNmICR7RURLMl9PVVRQVVRfRElSfS9GVi9CTDMzX0FQX1VFRkkuZmQKLSAgICAgICBweXRob24gZ2VuX2xvYWRlcl9oaWtleTk2MC5weSAtbyBsLWxvYWRlci5iaW4gLS1pbWdfYmwxPWJsMS5iaW4gLS1pbWdfbnNfYmwxdT1CTDMzX0FQX1VFRkkuZmQKIAotLSAgR2VuZXJhdGUgcGFydGl0aW9uIHRhYmxlLgorLSAgR2VuZXJhdGUgbC1sb2FkZXIuYmluIGFuZCBwYXJ0aXRpb24gdGFibGUuCiAgICAqTWFrZSBzdXJlIHRoYXQgeW91J3JlIHVzaW5nIHRoZSBzZ2Rpc2sgaW4gdGhlIGwtbG9hZGVyIGRpcmVjdG9yeS4qCiAKICAgIC4uIGNvZGU6OiBzaGVsbAogCi0gICAgICAgUFRBQkxFPWFvc3AtMzJnIFNFQ1RPUl9TSVpFPTQwOTYgU0dESVNLPS4vc2dkaXNrIGJhc2ggLXggZ2VuZXJhdGVfcHRhYmxlLnNoCisgICAgICAgY2QgJHtCVUlMRF9QQVRIfS9sLWxvYWRlcgorICAgICAgIGxuIC1zZiAke0VESzJfT1VUUFVUX0RJUn0vRlYvYmwxLmJpbgorICAgICAgIGxuIC1zZiAke0VESzJfT1VUUFVUX0RJUn0vRlYvZmlwLmJpbgorICAgICAgIGxuIC1zZiAke0VESzJfT1VUUFVUX0RJUn0vRlYvQkwzM19BUF9VRUZJLmZkCisgICAgICAgbWFrZSBoaWtleTk2MAogCiBTZXR1cCBDb25zb2xlCiAtLS0tLS0tLS0tLS0tCkBAIC0xMjksNiArMTM2LDcgQEAKIAogICAgICAgICRjZCB0b29scy1pbWFnZXMtaGlrZXk5NjAKICAgICAgICAkbG4gLXNmICR7QlVJTERfUEFUSH0vbC1sb2FkZXIvbC1sb2FkZXIuYmluCisgICAgICAgJGxuIC1zZiAke0JVSUxEX1BBVEh9L2wtbG9hZGVyL2ZpcC5iaW4KIAogLSAgUHJlcGFyZSBjb25maWcgZmlsZS4KIApkaWZmIC0tZ2l0IGEvZG9jcy9wbGF0L3BvcGxhci5yc3QgYi9kb2NzL3BsYXQvcG9wbGFyLnJzdAppbmRleCBkN2YxZmUwLi4wMTI5NDc4IDEwMDY0NAotLS0gYS9kb2NzL3BsYXQvcG9wbGFyLnJzdAorKysgYi9kb2NzL3BsYXQvcG9wbGFyLnJzdApAQCAtMTEsNiArMTEsOCBAQAogSXQgc3VwcG9ydHMgYSBwcmVtaXVtIHVzZXIgZXhwZXJpZW5jZSB3aXRoIHVwIHRvIEguMjY1IEhFVkMgZGVjb2Rpbmcgb2YgNEsKIHZpZGVvIGF0IDYwIGZyYW1lcyBwZXIgc2Vjb25kLgogCis6OgorCiAgICAgU09DIEhpc2lsaWNvbiBIaTM3OThDVjIwMAogICAgIENQVSBRdWFkLWNvcmUgQVJNIENvcnRleC1BNTMgNjQgYml0CiAgICAgRFJBTSBERFIzLzNMLzQgU0RSQU0gaW50ZXJmYWNlLCBtYXhpbXVtIDMyLWJpdCBkYXRhIHdpZHRoIDIgR0IKQEAgLTI4LDYgKzMwLDggQEAKIGJpbmFyeSB3aG9zZSBtYWluIHJvbGUgaXMgdG8gY2hhbmdlIHRoZSBwcm9jZXNzb3Igc3RhdGUgdG8gNjRiaXQgbW9kZS4gVGhpcwogbXVzdCAgaGFwcGVuIHByaW9yIGludm9raW5nIHRoZSBhcm0gdHJ1c3RlZCAgZmlybXdhcmU6CiAKKzo6CisKICAgICBsLWxvYWRlciAtLT4gYXJtX3RydXN0ZWRfZmlybXdhcmUgLS0+IHUtYm9vdAogCiBIb3cgdG8gYnVpbGQKQEAgLTU0LDEwICs1OCwxNiBAQAogLSAgUHJlcGFyZSB0aGUgQUFSQ0g2NCB0b29sY2hhaW4uCiAKIC0gIEJ1aWxkIHUtYm9vdCB1c2luZyBwb3BsYXJfZGVmY29uZmlnCisKKy4uIGNvZGU6OiBiYXNoCisKICAgICAgICBtYWtlIENST1NTX0NPTVBJTEU9YWFyY2g2NC1saW51eC1nbnUtIHBvcGxhcl9kZWZjb25maWcKICAgICAgICBtYWtlIENST1NTX0NPTVBJTEU9YWFyY2g2NC1saW51eC1nbnUtCiAKIC0gIEJ1aWxkIGF0ZiBwcm92aWRpbmcgdGhlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIHUtYm9vdC5iaW4gYXMgdGhlIEJMMzMgaW1hZ2UKKworLi4gY29kZTo6IGJhc2gKKwogICAgICAgIG1ha2UgQ1JPU1NfQ09NUElMRT1hYXJjaDY0LWxpbnV4LWdudS0gIGFsbCBmaXAgU1BEPW5vbmUgUExBVD1wb3BsYXIKICAgICAgICBCTDMzPXUtYm9vdC5iaW4KIApAQCAtODEsODUgKzkxLDg2IEBACiBCb290IHRyYWNlCiA9PT09PT09PT09CiAKLUJvb3Ryb20gc3RhcnQKLUJvb3QgTWVkaWE6IGVNTUMKLURlY3J5cHQgYXV4aWxpYXJ5IGNvZGUgLi4uT0sKKzo6CiAKLWxzYWRjIHZvbHRhZ2UgbWluOiAwMDAwMDBGRSwgbWF4OiAwMDAwMDBGRiwgYXZlcjogMDAwMDAwRkUsIGluZGV4OiAwMDAwMDAwMAorICAgIEJvb3Ryb20gc3RhcnQKKyAgICBCb290IE1lZGlhOiBlTU1DCisgICAgRGVjcnlwdCBhdXhpbGlhcnkgY29kZSAuLi5PSwogCi1FbnRyeSBib290IGF1eGlsaWFyeSBjb2RlCisgICAgbHNhZGMgdm9sdGFnZSBtaW46IDAwMDAwMEZFLCBtYXg6IDAwMDAwMEZGLCBhdmVyOiAwMDAwMDBGRSwgaW5kZXg6IDAwMDAwMDAwCiAKLUF1eGlsaWFyeSBjb2RlIC0gdjEuMDAKLUREUiBjb2RlIC0gVjEuMS4yIDIwMTYwMjA1Ci1CdWlsZDogTWFyIDI0IDIwMTYgLSAxNzowOTo0NAotUmVnIFZlcnNpb246ICB2MTM0Ci1SZWcgVGltZTogICAgIDIwMTYvMDMvMTggMDk6NDQ6NTUKLVJlZyBOYW1lOiAgICAgaGkzNzk4Y3YyZG1iX2hpMzc5OGN2MjAwX2RkcjNfMmdieXRlXzhiaXR4NF80bGF5ZXJzLnJlZworICAgIEVudHJ5IGJvb3QgYXV4aWxpYXJ5IGNvZGUKIAotQm9vdCBhdXhpbGlhcnkgY29kZSBzdWNjZXNzCi1Cb290cm9tIHN1Y2Nlc3MKKyAgICBBdXhpbGlhcnkgY29kZSAtIHYxLjAwCisgICAgRERSIGNvZGUgLSBWMS4xLjIgMjAxNjAyMDUKKyAgICBCdWlsZDogTWFyIDI0IDIwMTYgLSAxNzowOTo0NAorICAgIFJlZyBWZXJzaW9uOiAgdjEzNAorICAgIFJlZyBUaW1lOiAgICAgMjAxNi8wMy8xOCAwOTo0NDo1NQorICAgIFJlZyBOYW1lOiAgICAgaGkzNzk4Y3YyZG1iX2hpMzc5OGN2MjAwX2RkcjNfMmdieXRlXzhiaXR4NF80bGF5ZXJzLnJlZwogCi1MT0FERVI6ICBTd2l0Y2hlZCB0byBhYXJjaDY0IG1vZGUKLUxPQURFUjogIEVudGVyaW5nIEFSTSBUUlVTVEVEIEZJUk1XQVJFCi1MT0FERVI6ICBDUFUwIGV4ZWN1dGVzIGF0IDB4MDAwY2UwMDAKKyAgICBCb290IGF1eGlsaWFyeSBjb2RlIHN1Y2Nlc3MKKyAgICBCb290cm9tIHN1Y2Nlc3MKIAotSU5GTzogICAgQkwxOiAweGUxMDAwIC0gMHhlNzAwMCBbc2l6ZSA9IDI0NTc2XQotTk9USUNFOiAgQm9vdGluZyBUcnVzdGVkIEZpcm13YXJlCi1OT1RJQ0U6ICBCTDE6IHYxLjMoZGVidWcpOnYxLjMtMzcyLWcxYmE5YzYwCi1OT1RJQ0U6ICBCTDE6IEJ1aWx0IDogMTc6NTE6MzMsIEFwciAzMCAyMDE3Ci1JTkZPOiAgICBCTDE6IFJBTSAweGUxMDAwIC0gMHhlNzAwMAotSU5GTzogICAgQkwxOiBMb2FkaW5nIEJMMgotSU5GTzogICAgTG9hZGluZyBpbWFnZSBpZD0xIGF0IGFkZHJlc3MgMHhlOTAwMAotSU5GTzogICAgSW1hZ2UgaWQ9MSBsb2FkZWQgYXQgYWRkcmVzcyAweGU5MDAwLCBzaXplID0gMHg1MDA4Ci1OT1RJQ0U6ICBCTDE6IEJvb3RpbmcgQkwyCi1JTkZPOiAgICBFbnRyeSBwb2ludCBhZGRyZXNzID0gMHhlOTAwMAotSU5GTzogICAgU1BTUiA9IDB4M2M1Ci1OT1RJQ0U6ICBCTDI6IHYxLjMoZGVidWcpOnYxLjMtMzcyLWcxYmE5YzYwCi1OT1RJQ0U6ICBCTDI6IEJ1aWx0IDogMTc6NTE6MzMsIEFwciAzMCAyMDE3Ci1JTkZPOiAgICBCTDI6IExvYWRpbmcgQkwzMQotSU5GTzogICAgTG9hZGluZyBpbWFnZSBpZD0zIGF0IGFkZHJlc3MgMHgxMjkwMDAKLUlORk86ICAgIEltYWdlIGlkPTMgbG9hZGVkIGF0IGFkZHJlc3MgMHgxMjkwMDAsIHNpemUgPSAweDgwMzgKLUlORk86ICAgIEJMMjogTG9hZGluZyBCTDMzCi1JTkZPOiAgICBMb2FkaW5nIGltYWdlIGlkPTUgYXQgYWRkcmVzcyAweDM3MDAwMDAwCi1JTkZPOiAgICBJbWFnZSBpZD01IGxvYWRlZCBhdCBhZGRyZXNzIDB4MzcwMDAwMDAsIHNpemUgPSAweDU4ZjE3Ci1OT1RJQ0U6ICBCTDE6IEJvb3RpbmcgQkwzMQotSU5GTzogICAgRW50cnkgcG9pbnQgYWRkcmVzcyA9IDB4MTI5MDAwCi1JTkZPOiAgICBTUFNSID0gMHgzY2QKLUlORk86ICAgIEJvb3QgYmwzMyBmcm9tIDB4MzcwMDAwMDAgZm9yIDM2NDMxMSBCeXRlcwotTk9USUNFOiAgQkwzMTogdjEuMyhkZWJ1Zyk6djEuMy0zNzItZzFiYTljNjAKLU5PVElDRTogIEJMMzE6IEJ1aWx0IDogMTc6NTE6MzMsIEFwciAzMCAyMDE3Ci1JTkZPOiAgICBCTDMxOiBJbml0aWFsaXppbmcgcnVudGltZSBzZXJ2aWNlcwotSU5GTzogICAgQkwzMTogUHJlcGFyaW5nIGZvciBFTDMgZXhpdCB0byBub3JtYWwgd29ybGQKLUlORk86ICAgIEVudHJ5IHBvaW50IGFkZHJlc3MgPSAweDM3MDAwMDAwCi1JTkZPOiAgICBTUFNSID0gMHgzYzkKKyAgICBMT0FERVI6ICBTd2l0Y2hlZCB0byBhYXJjaDY0IG1vZGUKKyAgICBMT0FERVI6ICBFbnRlcmluZyBBUk0gVFJVU1RFRCBGSVJNV0FSRQorICAgIExPQURFUjogIENQVTAgZXhlY3V0ZXMgYXQgMHgwMDBjZTAwMAorCisgICAgSU5GTzogICAgQkwxOiAweGUxMDAwIC0gMHhlNzAwMCBbc2l6ZSA9IDI0NTc2XQorICAgIE5PVElDRTogIEJvb3RpbmcgVHJ1c3RlZCBGaXJtd2FyZQorICAgIE5PVElDRTogIEJMMTogdjEuMyhkZWJ1Zyk6djEuMy0zNzItZzFiYTljNjAKKyAgICBOT1RJQ0U6ICBCTDE6IEJ1aWx0IDogMTc6NTE6MzMsIEFwciAzMCAyMDE3CisgICAgSU5GTzogICAgQkwxOiBSQU0gMHhlMTAwMCAtIDB4ZTcwMDAKKyAgICBJTkZPOiAgICBCTDE6IExvYWRpbmcgQkwyCisgICAgSU5GTzogICAgTG9hZGluZyBpbWFnZSBpZD0xIGF0IGFkZHJlc3MgMHhlOTAwMAorICAgIElORk86ICAgIEltYWdlIGlkPTEgbG9hZGVkIGF0IGFkZHJlc3MgMHhlOTAwMCwgc2l6ZSA9IDB4NTAwOAorICAgIE5PVElDRTogIEJMMTogQm9vdGluZyBCTDIKKyAgICBJTkZPOiAgICBFbnRyeSBwb2ludCBhZGRyZXNzID0gMHhlOTAwMAorICAgIElORk86ICAgIFNQU1IgPSAweDNjNQorICAgIE5PVElDRTogIEJMMjogdjEuMyhkZWJ1Zyk6djEuMy0zNzItZzFiYTljNjAKKyAgICBOT1RJQ0U6ICBCTDI6IEJ1aWx0IDogMTc6NTE6MzMsIEFwciAzMCAyMDE3CisgICAgSU5GTzogICAgQkwyOiBMb2FkaW5nIEJMMzEKKyAgICBJTkZPOiAgICBMb2FkaW5nIGltYWdlIGlkPTMgYXQgYWRkcmVzcyAweDEyOTAwMAorICAgIElORk86ICAgIEltYWdlIGlkPTMgbG9hZGVkIGF0IGFkZHJlc3MgMHgxMjkwMDAsIHNpemUgPSAweDgwMzgKKyAgICBJTkZPOiAgICBCTDI6IExvYWRpbmcgQkwzMworICAgIElORk86ICAgIExvYWRpbmcgaW1hZ2UgaWQ9NSBhdCBhZGRyZXNzIDB4MzcwMDAwMDAKKyAgICBJTkZPOiAgICBJbWFnZSBpZD01IGxvYWRlZCBhdCBhZGRyZXNzIDB4MzcwMDAwMDAsIHNpemUgPSAweDU4ZjE3CisgICAgTk9USUNFOiAgQkwxOiBCb290aW5nIEJMMzEKKyAgICBJTkZPOiAgICBFbnRyeSBwb2ludCBhZGRyZXNzID0gMHgxMjkwMDAKKyAgICBJTkZPOiAgICBTUFNSID0gMHgzY2QKKyAgICBJTkZPOiAgICBCb290IGJsMzMgZnJvbSAweDM3MDAwMDAwIGZvciAzNjQzMTEgQnl0ZXMKKyAgICBOT1RJQ0U6ICBCTDMxOiB2MS4zKGRlYnVnKTp2MS4zLTM3Mi1nMWJhOWM2MAorICAgIE5PVElDRTogIEJMMzE6IEJ1aWx0IDogMTc6NTE6MzMsIEFwciAzMCAyMDE3CisgICAgSU5GTzogICAgQkwzMTogSW5pdGlhbGl6aW5nIHJ1bnRpbWUgc2VydmljZXMKKyAgICBJTkZPOiAgICBCTDMxOiBQcmVwYXJpbmcgZm9yIEVMMyBleGl0IHRvIG5vcm1hbCB3b3JsZAorICAgIElORk86ICAgIEVudHJ5IHBvaW50IGFkZHJlc3MgPSAweDM3MDAwMDAwCisgICAgSU5GTzogICAgU1BTUiA9IDB4M2M5CiAKIAotVS1Cb290IDIwMTcuMDUtcmMyLTAwMTMwLWdkMjI1NWIwIChBcHIgMzAgMjAxNyAtIDE3OjUxOjI4ICswMjAwKXBvcGxhcgorICAgIFUtQm9vdCAyMDE3LjA1LXJjMi0wMDEzMC1nZDIyNTViMCAoQXByIDMwIDIwMTcgLSAxNzo1MToyOCArMDIwMClwb3BsYXIKIAotTW9kZWw6IEhpU2lsaWNvbiBQb3BsYXIgRGV2ZWxvcG1lbnQgQm9hcmQKLUJPQVJEOiBIaXNpbGljb24gSEkzNzk4Y3YyMDAgUG9wbGFyCi1EUkFNOiAgMSBHaUIKLU1NQzogICBIaXNpbGljb24gRFdNTUM6IDAKLUluOiAgICBzZXJpYWxAZjhiMDAwMDAKLU91dDogICBzZXJpYWxAZjhiMDAwMDAKLUVycjogICBzZXJpYWxAZjhiMDAwMDAKLU5ldDogICBOZXQgSW5pdGlhbGl6YXRpb24gU2tpcHBlZAotTm8gZXRoZXJuZXQgZm91bmQuCisgICAgTW9kZWw6IEhpU2lsaWNvbiBQb3BsYXIgRGV2ZWxvcG1lbnQgQm9hcmQKKyAgICBCT0FSRDogSGlzaWxpY29uIEhJMzc5OGN2MjAwIFBvcGxhcgorICAgIERSQU06ICAxIEdpQgorICAgIE1NQzogICBIaXNpbGljb24gRFdNTUM6IDAKKyAgICBJbjogICAgc2VyaWFsQGY4YjAwMDAwCisgICAgT3V0OiAgIHNlcmlhbEBmOGIwMDAwMAorICAgIEVycjogICBzZXJpYWxAZjhiMDAwMDAKKyAgICBOZXQ6ICAgTmV0IEluaXRpYWxpemF0aW9uIFNraXBwZWQKKyAgICBObyBldGhlcm5ldCBmb3VuZC4KIAotSGl0IGFueSBrZXkgdG8gc3RvcCBhdXRvYm9vdDogIDAKLXN0YXJ0aW5nIFVTQi4uLgotVVNCMDogICBVU0IgRUhDSSAxLjAwCi1zY2FubmluZyBidXMgMCBmb3IgZGV2aWNlcy4uLiAxIFVTQiBEZXZpY2UocykgZm91bmQKLVVTQjE6ICAgVVNCIEVIQ0kgMS4wMAotc2Nhbm5pbmcgYnVzIDEgZm9yIGRldmljZXMuLi4gNCBVU0IgRGV2aWNlKHMpIGZvdW5kCi0gICAgICAgc2Nhbm5pbmcgdXNiIGZvciBzdG9yYWdlIGRldmljZXMuLi4gMSBTdG9yYWdlIERldmljZShzKSBmb3VuZAotICAgICAgIHNjYW5uaW5nIHVzYiBmb3IgZXRoZXJuZXQgZGV2aWNlcy4uLiAxIEV0aGVybmV0IERldmljZShzKSBmb3VuZAorICAgIEhpdCBhbnkga2V5IHRvIHN0b3AgYXV0b2Jvb3Q6ICAwCisgICAgc3RhcnRpbmcgVVNCLi4uCisgICAgVVNCMDogICBVU0IgRUhDSSAxLjAwCisgICAgc2Nhbm5pbmcgYnVzIDAgZm9yIGRldmljZXMuLi4gMSBVU0IgRGV2aWNlKHMpIGZvdW5kCisgICAgVVNCMTogICBVU0IgRUhDSSAxLjAwCisgICAgc2Nhbm5pbmcgYnVzIDEgZm9yIGRldmljZXMuLi4gNCBVU0IgRGV2aWNlKHMpIGZvdW5kCisgICAgICAgICAgIHNjYW5uaW5nIHVzYiBmb3Igc3RvcmFnZSBkZXZpY2VzLi4uIDEgU3RvcmFnZSBEZXZpY2UocykgZm91bmQKKyAgICAgICAgICAgc2Nhbm5pbmcgdXNiIGZvciBldGhlcm5ldCBkZXZpY2VzLi4uIDEgRXRoZXJuZXQgRGV2aWNlKHMpIGZvdW5kCiAKLVVTQiBkZXZpY2UgMDoKLSAgICBEZXZpY2UgMDogVmVuZG9yOiBTYW5EaXNrIFJldjogMS4wMCBQcm9kOiBDcnV6ZXIgQmxhZGUKLSAgICAgICAgICAgIFR5cGU6IFJlbW92YWJsZSBIYXJkIERpc2sKLSAgICAgICAgICAgIENhcGFjaXR5OiA3NjMyLjAgTUIgPSA3LjQgR0IgKDE1NjMwMzM2IHggNTEyKQotLi4uIGlzIG5vdyBjdXJyZW50IGRldmljZQotU2Nhbm5pbmcgdXNiIDA6MS4uLgotPT4KLQorICAgIFVTQiBkZXZpY2UgMDoKKyAgICAgICAgRGV2aWNlIDA6IFZlbmRvcjogU2FuRGlzayBSZXY6IDEuMDAgUHJvZDogQ3J1emVyIEJsYWRlCisgICAgICAgICAgICAgICAgVHlwZTogUmVtb3ZhYmxlIEhhcmQgRGlzaworICAgICAgICAgICAgICAgIENhcGFjaXR5OiA3NjMyLjAgTUIgPSA3LjQgR0IgKDE1NjMwMzM2IHggNTEyKQorICAgIC4uLiBpcyBub3cgY3VycmVudCBkZXZpY2UKKyAgICBTY2FubmluZyB1c2IgMDoxLi4uCisgICAgPT4KZGlmZiAtLWdpdCBhL2RvY3MvcGxhdC9ycGkzLnJzdCBiL2RvY3MvcGxhdC9ycGkzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTlmYWFmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbGF0L3JwaTMucnN0CkBAIC0wLDAgKzEsMzY0IEBACitBcm0gVHJ1c3RlZCBGaXJtd2FyZSBmb3IgUmFzcGJlcnJ5IFBpIDMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBzZWN0aW9uLW51bWJlcmluZzo6CisgICAgOnN1ZmZpeDogLgorCisuLiBjb250ZW50czo6CisKK1RoZSBgUmFzcGJlcnJ5IFBpIDNgXyBpcyBhbiBpbmV4cGVuc2l2ZSBzaW5nbGUtYm9hcmQgY29tcHV0ZXIgdGhhdCBjb250YWlucyBmb3VyCitDb3J0ZXgtQTUzIGNvcmVzLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBoYXZlIGEgcG9ydCBvZiB0aGUgQXJtIFRydXN0ZWQKK0Zpcm13YXJlLgorCitUaGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBleHBsYWluIGhvdyB0byB1c2UgdGhpcyBwb3J0IG9mIHRoZSBUcnVzdGVkIEZpcm13YXJlCit3aXRoIHRoZSBkZWZhdWx0IGRpc3RyaWJ1dGlvbiBvZiBgUmFzcGJpYW5gXyBiZWNhdXNlIHRoYXQncyB0aGUgZGlzdHJpYnV0aW9uCitvZmZpY2lhbGx5IHN1cHBvcnRlZCBieSB0aGUgUmFzcGJlcnJ5IFBpIEZvdW5kYXRpb24uIEF0IHRoZSBtb21lbnQgb2Ygd3JpdGluZwordGhpcywgdGhlIG9mZmljaWFsbHkgc3VwcG9ydGVkIGtlcm5lbCBpcyBhIEFBcmNoMzIga2VybmVsLiBUaGlzIGRvZXNuJ3QgbWVhbgordGhhdCB0aGlzIHBvcnQgb2YgdGhlIFRydXN0ZWQgRmlybXdhcmUgY2FuJ3QgYm9vdCBhIEFBcmNoNjQga2VybmVsLiBUaGUgYExpbnV4Cit0cmVlIGZvcmtgXyBtYWludGFpbmVkIGJ5IHRoZSBGb3VuZGF0aW9uIGNhbiBiZSBjb21waWxlZCBmb3IgQUFyY2g2NCBieQorZm9sbG93aW5nIHRoZSBzdGVwcyBpbiBgQUFyY2g2NCBrZXJuZWwgYnVpbGQgaW5zdHJ1Y3Rpb25zYF8uCisKKyoqSU1QT1JUQU5UIE5PVEUqKjogVGhpcyBwb3J0IGlzbid0IHNlY3VyZS4gQWxsIG9mIHRoZSBtZW1vcnkgdXNlZCBpcyBEUkFNLAord2hpY2ggaXMgYXZhaWxhYmxlIGZyb20gYm90aCB0aGUgTm9uLXNlY3VyZSBhbmQgU2VjdXJlIHdvcmxkcy4gVGhpcyBwb3J0CitzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBtb3JlIHRoYW4gYSBwcm90b3R5cGUgdG8gcGxheSB3aXRoIGFuZCBpbXBsZW1lbnQKK2VsZW1lbnRzIGxpa2UgUFNDSSB0byBzdXBwb3J0IHRoZSBMaW51eCBrZXJuZWwuCisKK0Rlc2lnbgorLS0tLS0tCisKK1RoZSBTb0MgdXNlZCBieSB0aGUgUmFzcGJlcnJ5IFBpIDMgaXMgdGhlIEJyb2FkY29tIEJDTTI4MzcuIEl0IGlzIGEgU29DIHdpdGggYQorVmlkZW9Db3JlIElWIHRoYXQgYWN0cyBhcyBwcmltYXJ5IHByb2Nlc3NvciAoYW5kIGxvYWRzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgU0QKK2NhcmQpIGFuZCBpcyBsb2NhdGVkIGJldHdlZW4gYWxsIEFybSBjb3JlcyBhbmQgdGhlIERSQU0uIENoZWNrIHRoZSBgUmFzcGJlcnJ5IFBpCiszIGRvY3VtZW50YXRpb25gXyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVGhpcyBleHBsYWlucyB3aHkgaXQgaXMgcG9zc2libGUgdG8gY2hhbmdlIHRoZSBleGVjdXRpb24gc3RhdGUgKEFBcmNoNjQvQUFyY2gzMikKK2RlcGVuZGluZyBvbiBhIGZldyBmaWxlcyBvbiB0aGUgU0QgY2FyZC4gV2Ugb25seSBjYXJlIGFib3V0IHRoZSBjYXNlcyBpbiB3aGljaAordGhlIGNvcmVzIGJvb3QgaW4gQUFyY2g2NCBtb2RlLgorCitUaGUgcnVsZXMgYXJlIHNpbXBsZToKKworLSBJZiBhIGZpbGUgY2FsbGVkIGBga2VybmVsOC5pbWdgYCBpcyBsb2NhdGVkIG9uIHRoZSBgYGJvb3RgYCBwYXJ0aXRpb24gb2YgdGhlCisgIFNEIGNhcmQsIGl0IHdpbGwgbG9hZCBpdCBhbmQgZXhlY3V0ZSBpbiBFTDIgaW4gQUFyY2g2NC4gQmFzaWNhbGx5LCBpdCBleGVjdXRlcworICBhIGBkZWZhdWx0IEFBcmNoNjQgc3R1YmBfIGF0IGFkZHJlc3MgKioweDAqKiB0aGF0IGp1bXBzIHRvIHRoZSBrZXJuZWwuCisKKy0gSWYgdGhlcmUgaXMgYWxzbyBhIGZpbGUgY2FsbGVkIGBgYXJtc3R1YjguYmluYGAsIGl0IHdpbGwgbG9hZCBpdCBhdCBhZGRyZXNzCisgICoqMHgwKiogKGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgc3R1YikgYW5kIGV4ZWN1dGUgaXQgaW4gRUwzIGluIEFBcmNoNjQuIEFsbAorICB0aGUgY29yZXMgYXJlIHBvd2VyZWQgb24gYXQgdGhlIHNhbWUgdGltZSBhbmQgc3RhcnQgYXQgYWRkcmVzcyAqKjB4MCoqLgorCitUaGlzIG1lYW5zIHRoYXQgd2UgY2FuIHVzZSB0aGUgZGVmYXVsdCBBQXJjaDMyIGtlcm5lbCBwcm92aWRlZCBpbiB0aGUgb2ZmaWNpYWwKK2BSYXNwYmlhbmBfIGRpc3RyaWJ1dGlvbiBieSByZW5hbWluZyBpdCB0byBgYGtlcm5lbDguaW1nYGAsIHdoaWxlIHRoZSBUcnVzdGVkCitGaXJtd2FyZSBhbmQgYW55dGhpbmcgZWxzZSB3ZSBuZWVkIGlzIGluIGBgYXJtc3R1YjguYmluYGAuIFRoaXMgd2F5IHdlIGNhbgorZm9yZ2V0IGFib3V0IHRoZSBkZWZhdWx0IGJvb3RzdHJhcCBjb2RlLiBXaGVuIHVzaW5nIGEgQUFyY2g2NCBrZXJuZWwsIGl0IGlzIG9ubHkKK25lZWRlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbmFtZSBvbiB0aGUgU0QgY2FyZCBpcyBgYGtlcm5lbDguaW1nYGAuCisKK0lkZWFsbHksIHdlIHdhbnQgdG8gbG9hZCB0aGUga2VybmVsIGFuZCBoYXZlIGFsbCBjb3JlcyBhdmFpbGFibGUsIHdoaWNoIG1lYW5zCit0aGF0IHdlIG5lZWQgdG8gbWFrZSB0aGUgc2Vjb25kYXJ5IGNvcmVzIHdvcmsgaW4gdGhlIHdheSB0aGUga2VybmVsIGV4cGVjdHMsIGFzCitleHBsYWluZWQgaW4gYFNlY29uZGFyeSBjb3Jlc2BfLiBJbiBwcmFjdGljZSwgYSBzbWFsbCBib290c3RyYXAgaXMgbmVlZGVkCitiZXR3ZWVuIHRoZSBUcnVzdGVkIEZpcm13YXJlIGFuZCB0aGUga2VybmVsLgorCitUbyBnZXQgdGhlIG1vc3Qgb3V0IG9mIGEgQUFyY2gzMiBrZXJuZWwsIHdlIHdhbnQgdG8gYm9vdCBpdCBpbiBIeXBlcnZpc29yIG1vZGUKK2luIEFBcmNoMzIuIFRoaXMgbWVhbnMgdGhhdCBCTDMzIGNhbid0IGJlIGluIEVMMiBpbiBBQXJjaDY0IG1vZGUuIFRoZQorYXJjaGl0ZWN0dXJlIHNwZWNpZmllcyB0aGF0IEFBcmNoMzIgSHlwZXJ2aXNvciBtb2RlIGlzbid0IHByZXNlbnQgd2hlbiBBQXJjaDY0CitpcyB1c2VkIGZvciBFTDIuIFdoZW4gdXNpbmcgYSBBQXJjaDY0IGtlcm5lbCwgaXQgc2hvdWxkIHNpbXBseSBzdGFydCBpbiBFTDIuCisKK1BsYWNlbWVudCBvZiBpbWFnZXMKK35+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGZpbGUgYGBhcm1zdHViOC5iaW5gYCBjb250YWlucyBCTDEgYW5kIHRoZSBGSVAuIEl0IGlzIG5lZWRlZCB0byBhZGQgcGFkZGluZworYmV0d2VlbiB0aGVtIHNvIHRoYXQgdGhlIGFkZHJlc3NlcyB0aGV5IGFyZSBsb2FkZWQgdG8gbWF0Y2ggdGhlIG9uZXMgc3BlY2lmaWVkCit3aGVuIGNvbXBpbGluZyB0aGUgVHJ1c3RlZCBGaXJtd2FyZS4KKworVGhlIGRldmljZSB0cmVlIGJsb2NrIGlzIGxvYWRlZCBieSB0aGUgVmlkZW9Db3JlIGxvYWRlciBmcm9tIGFuIGFwcHJvcHJpYXRlCitmaWxlLCBidXQgd2UgY2FuIHNwZWNpZnkgdGhlIGFkZHJlc3MgaXQgaXMgbG9hZGVkIHRvIGluIGBgY29uZmlnLnR4dGBgLgorCitUaGUgZmlsZSBgYGtlcm5lbDguaW1nYGAgY29udGFpbnMgYSBrZXJuZWwgaW1hZ2UgdGhhdCBpcyBsb2FkZWQgdG8gdGhlIGFkZHJlc3MKK3NwZWNpZmllZCBpbiBgYGNvbmZpZy50eHRgYC4gVGhlIGBMaW51eCBrZXJuZWwgdHJlZWBfIGhhcyBpbmZvcm1hdGlvbiBhYm91dCBob3cKK2EgQUFyY2gzMiBMaW51eCBrZXJuZWwgaW1hZ2UgaXMgbG9hZGVkIGluIGBgRG9jdW1lbnRhdGlvbi9hcm0vQm9vdGluZ2BgOgorCis6OgorCisgICAgVGhlIHpJbWFnZSBtYXkgYWxzbyBiZSBwbGFjZWQgaW4gc3lzdGVtIFJBTSBhbmQgY2FsbGVkIHRoZXJlLiAgVGhlCisgICAga2VybmVsIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlIGZpcnN0IDEyOE1pQiBvZiBSQU0uICBJdCBpcyByZWNvbW1lbmRlZAorICAgIHRoYXQgaXQgaXMgbG9hZGVkIGFib3ZlIDMyTWlCIGluIG9yZGVyIHRvIGF2b2lkIHRoZSBuZWVkIHRvIHJlbG9jYXRlCisgICAgcHJpb3IgdG8gZGVjb21wcmVzc2lvbiwgd2hpY2ggd2lsbCBtYWtlIHRoZSBib290IHByb2Nlc3Mgc2xpZ2h0bHkKKyAgICBmYXN0ZXIuCisKK1RoZXJlIGFyZSBubyBzaW1pbGFyIHJlc3RyaWN0aW9ucyBmb3IgQUFyY2g2NCBrZXJuZWxzLCBhcyBzcGVjaWZpZWQgaW4gdGhlIGZpbGUKK2BgRG9jdW1lbnRhdGlvbi9hcm02NC9ib290aW5nLnR4dGBgLgorCitUaGlzIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBhdm9pZCB0aGUgZmlyc3QgMTI4IE1pQiBvZiBSQU0gd2hlbiBwbGFjaW5nIHRoZQorVHJ1c3RlZCBGaXJtd2FyZSBpbWFnZXMgKGFuZCBzcGVjaWFsbHkgdGhlIGZpcnN0IDMyIE1pQiwgYXMgdGhleSBhcmUgZGlyZWN0bHkKK3VzZWQgdG8gcGxhY2UgdGhlIHVuY29tcHJlc3NlZCBBQXJjaDMyIGtlcm5lbCBpbWFnZS4gVGhpcyB3YXksIGJvdGggQUFyY2gzMiBhbmQKK0FBcmNoNjQga2VybmVscyBjYW4gYmUgcGxhY2VkIGF0IHRoZSBzYW1lIGFkZHJlc3MuCisKK0luIHRoZSBlbmQsIHRoZSBpbWFnZXMgbG9vayBsaWtlIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbSB3aGVuIHBsYWNlZCBpbiBtZW1vcnkuCitBbGwgYWRkcmVzc2VzIGFyZSBQaHlzaWNhbCBBZGRyZXNzZXMgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgQXJtIGNvcmVzLgorQWdhaW4sIG5vdGUgdGhhdCB0aGlzIGlzIGFsbCBqdXN0IHBhcnQgb2YgdGhlIHNhbWUgRFJBTSB0aGF0IGdvZXMgZnJvbQorKioweDAwMDAwMDAwKiogdG8gKioweDNGMDAwMDAwKiosIGl0IGp1c3QgaGFzIGRpZmZlcmVudCBuYW1lcyB0byBzaW11bGF0ZSBhIHJlYWwKK3NlY3VyZSBwbGF0Zm9ybSEKKworOjoKKworICAgIDB4MDAwMDAwMDAgKy0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgfCAgICAgICBST00gICAgICAgfCBCTDEKKyAgICAweDAwMDEwMDAwICstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgRklQICAgICAgIHwKKyAgICAweDAwMjAwMDAwICstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgLi4uICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAgICAweDAxMDAwMDAwICstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgIEtlcm5lbCAgICAgIHwKKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgLi4uICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAgICAweDAyMDAwMDAwICstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgRFRCICAgICAgIHwKKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgLi4uICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAgICAweDEwMDAwMDAwICstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICBTZWN1cmUgU1JBTSAgIHwgQkwyLCBCTDMxCisgICAgMHgxMDEwMDAwMCArLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICB8ICAgU2VjdXJlIERSQU0gICB8CisgICAgMHgxMDMwMDAwMCArLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICB8IE5vbi1zZWN1cmUgRFJBTSB8IEJMMzMKKyAgICAweDExMDAwMDAwICstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgLi4uICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAgICAweDNGMDAwMDAwICstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgSS9PICAgICAgIHwKKyAgICAweDQwMDAwMDAwICstLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlIGFyZWEgYmV0d2VlbiAqKjB4MTAwMDAwMDAqKiBhbmQgKioweDExMDAwMDAwKiogaGFzIHRvIGJlIHByb3RlY3RlZCBzbyB0aGF0Cit0aGUga2VybmVsIGRvZXNuJ3QgdXNlIGl0LiBUaGF0IGlzIGRvbmUgYnkgYWRkaW5nIGBgbWVtbWFwPTI1Nk0kMTZNYGAgdG8gdGhlCitjb21tYW5kIGxpbmUgcGFzc2VkIHRvIHRoZSBrZXJuZWwuIFNlZSB0aGUgYFNldHVwIFNEIGNhcmRgXyBpbnN0cnVjdGlvbnMgdG8gc2VlCitob3cgdG8gZG8gaXQuCisKK1RoZSBsYXN0IDE2IE1pQiBvZiBEUkFNIGNhbiBvbmx5IGJlIGFjY2Vzc2VkIGJ5IHRoZSBWaWRlb0NvcmUsIHRoYXQgaGFzCitkaWZmZXJlbnQgbWFwcGluZ3MgdGhhbiB0aGUgQXJtIGNvcmVzIGluIHdoaWNoIHRoZSBJL08gYWRkcmVzc2VzIGRvbid0IG92ZXJsYXAKK3RoZSBEUkFNLiBUaGUgbWVtb3J5IHJlc2VydmVkIHRvIGJlIHVzZWQgYnkgdGhlIFZpZGVvQ29yZSBpcyBhbHdheXMgcGxhY2VkIGF0Cit0aGUgZW5kIG9mIHRoZSBEUkFNLCBzbyB0aGlzIHNwYWNlIGlzbid0IHdhc3RlZC4KKworQ29uc2lkZXJpbmcgdGhlIDEyOCBNaUIgYWxsb2NhdGVkIHRvIHRoZSBHUFUgYW5kIHRoZSAxNiBNaUIgYWxsb2NhdGVkIGZvciB0aGUKK1RydXN0ZWQgRmlybXdhcmUsIHRoZXJlIGFyZSA4ODAgTWlCIGF2YWlsYWJsZSBmb3IgTGludXguCisKK0Jvb3Qgc2VxdWVuY2UKK35+fn5+fn5+fn5+fn4KKworVGhlIGJvb3Qgc2VxdWVuY2Ugb2YgdGhlIFRydXN0ZWQgRmlybXdhcmUgaXMgdGhlIHVzdWFsIG9uZSBleGNlcHQgd2hlbiBib290aW5nCithIEFBcmNoMzIga2VybmVsLiBJbiB0aGF0IGNhc2UsIEJMMzMgaXMgYm9vdGVkIGluIEFBcmNoMzIgSHlwZXJ2aXNvciBtb2RlIHNvCit0aGF0IGl0IGNhbiBqdW1wIHRvIHRoZSBrZXJuZWwgaW4gdGhlIHNhbWUgbW9kZSBhbmQgbGV0IGl0IHRha2Ugb3ZlciB0aGF0Citwcml2aWxlZ2UgbGV2ZWwuIElmIEJMMzMgd2FzIHJ1bm5pbmcgaW4gRUwyIGluIEFBcmNoNjQgKGFzIGluIHRoZSBkZWZhdWx0Citib290ZmxvdyBvZiB0aGUgVHJ1c3RlZCBGaXJtd2FyZSkgaXQgY291bGQgb25seSBqdW1wIHRvIHRoZSBrZXJuZWwgaW4gQUFyY2gzMiBpbgorU3VwZXJ2aXNvciBtb2RlLgorCitUaGUgYExpbnV4IGtlcm5lbCB0cmVlYF8gaGFzIGluc3RydWN0aW9ucyBvbiBob3cgdG8ganVtcCB0byB0aGUgTGludXgga2VybmVsCitpbiBgYERvY3VtZW50YXRpb24vYXJtL0Jvb3RpbmdgYCBhbmQgYGBEb2N1bWVudGF0aW9uL2FybTY0L2Jvb3RpbmcudHh0YGAuIFRoZQorYm9vdHN0cmFwIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhpcy4KKworU2Vjb25kYXJ5IGNvcmVzCit+fn5+fn5+fn5+fn5+fn4KKworVGhlIGtlcm5lbCB1c2VkIGJ5IGBSYXNwYmlhbmBfIGRvZXNuJ3QgaGF2ZSBzdXBwb3J0IGZvciBQU0NJLCBzbyBpdCBpcyBuZWVkZWQgdG8KK3VzZSBtYWlsYm94ZXMgdG8gdHJhcCB0aGUgc2Vjb25kYXJ5IGNvcmVzIHVudGlsIHRoZXkgYXJlIHJlYWR5IHRvIGp1bXAgdG8gdGhlCitrZXJuZWwuIFRoaXMgbWFpbGJveCBpcyBsb2NhdGVkIGF0IGEgZGlmZmVyZW50IGFkZHJlc3MgaW4gdGhlIEFBcmNoMzIgZGVmYXVsdAora2VybmVsIHRoYW4gaW4gdGhlIEFBcmNoNjQga2VybmVsLgorCitBbHNvLCB0aGlzIHBvcnQgb2YgdGhlIFRydXN0ZWQgRmlybXdhcmUgaGFzIGFub3RoZXIgVHJ1c3RlZCBNYWlsYm94IGluIFNoYXJlZCBCTAorUkFNLiBEdXJpbmcgY29sZCBib290LCBhbGwgc2Vjb25kYXJ5IGNvcmVzIHdhaXQgaW4gYSBsb29wIHVudGlsIHRoZXkgYXJlIGdpdmVuCitnaXZlbiBhbiBhZGRyZXNzIHRvIGp1bXAgdG8gaW4gdGhpcyBNYWlsYm94IChgYGJsMzFfd2FybV9lbnRyeXBvaW50YGApLgorCitPbmNlIEJMMzEgaGFzIGZpbmlzaGVkIGFuZCB0aGUgcHJpbWFyeSBjb3JlIGhhcyBqdW1wZWQgdG8gdGhlIEJMMzMgcGF5bG9hZCwgaXQKK2hhcyB0byBjYWxsIGBgUFNDSV9DUFVfT05gYCB0byByZWxlYXNlIHRoZSBzZWNvbmRhcnkgQ1BVcyBmcm9tIHRoZSB3YWl0IGxvb3AuCitUaGUgcGF5bG9hZCB0aGVuIG1ha2VzIHRoZW0gd2FpdCBpbiBhbm90aGVyIHdhaXRsb29wIGxpc3RlbmluZyBmcm9tIG1lc3NhZ2VzCitmcm9tIHRoZSBrZXJuZWwuIFdoZW4gdGhlIHByaW1hcnkgQ1BVIGp1bXBzIGludG8gdGhlIGtlcm5lbCwgaXQgd2lsbCBzZW5kIGFuCithZGRyZXNzIHRvIHRoZSBtYWlsYm94IHNvIHRoYXQgdGhlIHNlY29uZGFyeSBDUFVzIGp1bXAgdG8gaXQgYW5kIGFyZSByZWNvZ25pc2VkCitieSB0aGUga2VybmVsLgorCitCdWlsZCBJbnN0cnVjdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBib290IGEgQUFyY2g2NCBrZXJuZWwsIG9ubHkgdGhlIEFBcmNoNjQgdG9vbGNoYWluIGlzIHJlcXVpcmVkLgorCitUbyBib290IGEgQUFyY2gzMiBrZXJuZWwsIGJvdGggQUFyY2g2NCBhbmQgQUFyY2gzMiB0b29sY2hhaW5zIGFyZSByZXF1aXJlZC4gVGhlCitBQXJjaDMyIHRvb2xjaGFpbiBpcyBuZWVkZWQgZm9yIHRoZSBBQXJjaDMyIGJvb3RzdHJhcCBuZWVkZWQgdG8gbG9hZCBhIDMyLWJpdAora2VybmVsLgorCitGaXJzdCwgY2xvbmUgYW5kIGNvbXBpbGUgYFJhc3BiZXJyeSBQaSAzIEFybSBUcnVzdGVkIEZpcm13YXJlIGJvb3RzdHJhcGBfLgorQ2hvb3NlIHRoZSBvbmUgbmVlZGVkIGZvciB0aGUgYXJjaGl0ZWN0dXJlIG9mIHlvdXIga2VybmVsLgorCitUaGVuIGNvbXBpbGUgdGhlIEFybSBUcnVzdGVkIEZpcm13YXJlLiBGb3IgYSBBQXJjaDMyIGtlcm5lbCwgdXNlIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQgbGluZToKKworLi4gY29kZTo6IHNoZWxsCisKKyAgICBDUk9TU19DT01QSUxFPWFhcmNoNjQtbGludXgtZ251LSBtYWtlIFBMQVQ9cnBpMyAgICAgICAgICAgICBcCisgICAgUlBJM19CTDMzX0lOX0FBUkNIMzI9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEJMMzM9Li4vcnBpMy1hcm0tdGYtYm9vdHN0cmFwL2FhcmNoMzIvZWwyLWJvb3RzdHJhcC5iaW4gICAgIFwKKyAgICBhbGwgZmlwCisKK0ZvciBhIEFBcmNoNjQga2VybmVsLCB1c2UgdGhpcyBvdGhlciBjb21tYW5kIGxpbmU6CisKKy4uIGNvZGU6OiBzaGVsbAorCisgICAgQ1JPU1NfQ09NUElMRT1hYXJjaDY0LWxpbnV4LWdudS0gbWFrZSBQTEFUPXJwaTMgICAgICAgICAgICAgXAorICAgIEJMMzM9Li4vcnBpMy1hcm0tdGYtYm9vdHN0cmFwL2FhcmNoNjQvZWwyLWJvb3RzdHJhcC5iaW4gICAgIFwKKyAgICBhbGwgZmlwCisKK1RoZW4sIGpvaW4gQkwxIGFuZCB0aGUgRklQIHdpdGggdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgKHJlcGxhY2UgYGByZWxlYXNlYGAKK2J5IGBgZGVidWdgYCBpZiB5b3Ugc2V0IHRoZSBidWlsZCBvcHRpb24gYGBERUJVRz0xYGApOgorCisuLiBjb2RlOjogc2hlbGwKKworICAgIGNwIGJ1aWxkL3JwaTMvcmVsZWFzZS9ibDEuYmluIGJsMS5wYWQuYmluCisgICAgdHJ1bmNhdGUgLS1zaXplPTY1NTM2IGJsMS5wYWQuYmluCisgICAgY2F0IGJsMS5wYWQuYmluIGJ1aWxkL3JwaTMvcmVsZWFzZS9maXAuYmluID4gYXJtc3R1YjguYmluCisKK1RoZSByZXN1bHRpbmcgZmlsZSwgYGBhcm1zdHViOC5iaW5gYCwgY29udGFpbnMgQkwxIGFuZCB0aGUgRklQIGluIHRoZSBwbGFjZSB0aGV5CituZWVkIHRvIGJlIGZvciB0aGUgVHJ1c3RlZCBGaXJtd2FyZSB0byBib290IGNvcnJlY3RseS4gTm93LCBmb2xsb3cgdGhlCitpbnN0cnVjdGlvbnMgaW4gYFNldHVwIFNEIGNhcmRgXy4KKworVGhlIGZvbGxvd2luZyBidWlsZCBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisKKy0gYGBQUkVMT0FERURfQkwzM19CQVNFYGA6IFNwZWNpYWxseSB1c2VmdWwgYmVjYXVzZSB0aGUgZmlsZSBgYGtlcm5lbDguaW1nYGAgY2FuCisgIGJlIGxvYWRlZCBhbnl3aGVyZSBieSBtb2RpZnlpbmcgdGhlIGZpbGUgYGBjb25maWcudHh0YGAuIEl0IGRvZXNuJ3QgaGF2ZSB0bworICBjb250YWluIGEga2VybmVsLCBpdCBjb3VsZCBoYXZlIGFueSBhcmJpdHJhcnkgcGF5bG9hZC4KKworLSBgYFJFU0VUX1RPX0JMMzFgYDogU2V0IHRvIDEgYnkgZGVmYXVsdC4gSWYgdXNpbmcgYSAzMi1iaXQga2VybmVsIGxpa2UKKyAgYFJhc3BiaWFuYF8sIHRoZSBzcGFjZSB1c2VkIGJ5IEJMMSBjYW4gb3ZlcndyaXR0ZW4gYnkgdGhlIGtlcm5lbCB3aGVuIGl0IGlzCisgIGJlaW5nIGxvYWRlZC4gRXZlbiB3aGVuIHVzaW5nIGEgQUFyY2g2NCBrZXJuZWwgdGhlIHJlZ2lvbiB1c2VkIGJ5CisgIEJMMSBpc24ndCBwcm90ZWN0ZWQgYW5kIHRoZSBrZXJuZWwgY291bGQgb3ZlcndyaXRlIGl0LiBUaGUgc3BhY2UgdXNlZCBieSBCTDMxCisgIGlzIHJlc2VydmVkIGJ5IHRoZSBjb21tYW5kIGxpbmUgcGFzc2VkIHRvIHRoZSBrZXJuZWwuCisKKy0gYGBSUEkzX0JMMzNfSU5fQUFSQ0gzMmBgOiBUaGlzIHBvcnQgY2FuIGxvYWQgYSBBQXJjaDY0IG9yIEFBcmNoMzIgQkwzMyBpbWFnZS4KKyAgQnkgZGVmYXVsdCB0aGlzIG9wdGlvbiBpcyAwLCB3aGljaCBtZWFucyB0aGF0IHRoZSBUcnVzdGVkIEZpcm13YXJlIHdpbGwganVtcAorICB0byBCTDMzIGluIEVMMiBpbiBBQXJjaDY0IG1vZGUuIElmIHNldCB0byAxLCBpdCB3aWxsIGp1bXAgdG8gQkwzMyBpbgorICBIeXBlcnZpc29yIGluIEFBcmNoMzIgbW9kZS4KKworVGhlIGZvbGxvd2luZyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZDoKKworLSBBQXJjaDMyIGZvciB0aGUgVHJ1c3RlZCBGaXJtd2FyZSBpdHNlbGYuCisKKy0gYGBFTDNfUEFZTE9BRF9CQVNFYGA6IFRoZSByZWFzb24gaXMgdGhhdCB5b3UgY2FuIGFscmVhZHkgbG9hZCBhbnl0aGluZyB0byBhbnkKKyAgYWRkcmVzcyBieSBjaGFuZ2luZyB0aGUgZmlsZSBgYGFybXN0dWI4LmJpbmBgLCBzbyB0aGVyZSdzIG5vIHBvaW50IGluIHVzaW5nCisgIHRoZSBUcnVzdGVkIEZpcm13YXJlIGluIHRoaXMgY2FzZS4KKworLSBgYExPQURfSU1BR0VfVjI9MGBgOiBPbmx5IHZlcnNpb24gMiBpcyBzdXBwb3J0ZWQuCisKK0FBcmNoNjQga2VybmVsIGJ1aWxkIGluc3RydWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIHNob3cgaG93IHRvIGluc3RhbGwgYW5kIHJ1biBhIEFBcmNoNjQga2VybmVsIGJ5Cit1c2luZyBhIFNEIGNhcmQgd2l0aCB0aGUgZGVmYXVsdCBgUmFzcGJpYW5gXyBpbnN0YWxsIGFzIGJhc2UuIFNraXAgdGhlbSBpZiB5b3UKK3dhbnQgdG8gdXNlIHRoZSBkZWZhdWx0IDMyLWJpdCBrZXJuZWwuCisKK05vdGUgdGhhdCB0aGlzIHN5c3RlbSB3b24ndCBiZSBmdWxseSA2NC1iaXQgYmVjYXVzZSBhbGwgdGhlIHRvb2xzIGluIHRoZQorZmlsZXN5c3RlbSBhcmUgMzItYml0IGJpbmFyaWVzLCBidXQgaXQncyBhIHF1aWNrIHdheSB0byBnZXQgaXQgd29ya2luZywgYW5kIGl0CithbGxvd3MgdGhlIHVzZXIgdG8gcnVuIDY0LWJpdCBiaW5hcmllcyBpbiBhZGRpdGlvbiB0byAzMi1iaXQgYmluYXJpZXMuCisKKzEuIENsb25lIHRoZSBgTGludXggdHJlZSBmb3JrYF8gbWFpbnRhaW5lZCBieSB0aGUgUmFzcGJlcnJ5IFBpIEZvdW5kYXRpb24uIFRvCisgICBzcGVlZCB0aGluZ3MgdXAsIGRvIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGUgZGVzaXJlZCBicmFuY2guCisKKy4uIGNvZGU6OiBzaGVsbAorCisgICAgZ2l0IGNsb25lIC0tZGVwdGg9MSAtYiBycGktNC4xNC55IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXNwYmVycnlwaS9saW51eAorICAgIGNkIGxpbnV4CisKKzIuIENvbmZpZ3VyZSBhbmQgY29tcGlsZSB0aGUga2VybmVsLiBBZGFwdCB0aGUgbnVtYmVyIGFmdGVyIGBgLWpgYCBzbyB0aGF0IGl0IGlzCisgICAxLjUgdGltZXMgdGhlIG51bWJlciBvZiBDUFVzIGluIHlvdXIgY29tcHV0ZXIuIFRoaXMgbWF5IHRha2Ugc29tZSB0aW1lIHRvCisgICBmaW5pc2guCisKKy4uIGNvZGU6OiBzaGVsbAorCisgICAgbWFrZSBBUkNIPWFybTY0IENST1NTX0NPTVBJTEU9YWFyY2g2NC1saW51eC1nbnUtIGJjbXJwaTNfZGVmY29uZmlnCisgICAgbWFrZSAtaiA2IEFSQ0g9YXJtNjQgQ1JPU1NfQ09NUElMRT1hYXJjaDY0LWxpbnV4LWdudS0KKworMy4gQ29weSB0aGUga2VybmVsIGltYWdlIGFuZCB0aGUgZGV2aWNlIHRyZWUgdG8gdGhlIFNEIGNhcmQuIFJlcGxhY2UgdGhlIHBhdGgKKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGggaW4geW91ciBjb21wdXRlcnMgdG8gdGhlIGBgYm9vdGBgIHBhcnRpdGlvbiBvZiB0aGUKKyAgIFNEIGNhcmQuCisKKy4uIGNvZGU6OiBzaGVsbAorCisgICAgY3AgYXJjaC9hcm02NC9ib290L0ltYWdlIC9wYXRoL3RvL2Jvb3Qva2VybmVsOC5pbWcKKyAgICBjcCBhcmNoL2FybTY0L2Jvb3QvZHRzL2Jyb2FkY29tL2JjbTI3MTAtcnBpLTMtYi5kdGIgL3BhdGgvdG8vYm9vdC8KKworNC4gSW5zdGFsbCB0aGUga2VybmVsIG1vZHVsZXMuIFJlcGxhY2UgdGhlIHBhdGggYnkgdGhlIGNvcnJlc3BvbmRpbmcgcGF0aCB0byB0aGUKKyAgIGZpbGVzeXN0ZW0gcGFydGl0aW9uIG9mIHRoZSBTRCBjYXJkIG9uIHlvdXIgY29tcHV0ZXIuCisKKy4uIGNvZGU6OiBzaGVsbAorCisgICAgbWFrZSBBUkNIPWFybTY0IENST1NTX0NPTVBJTEU9YWFyY2g2NC1saW51eC1nbnUtIFwKKyAgICBJTlNUQUxMX01PRF9QQVRIPS9wYXRoL3RvL2ZpbGVzeXN0ZW0gbW9kdWxlc19pbnN0YWxsCisKKzUuIEZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIGBTZXR1cCBTRCBjYXJkYF8gZXhjZXB0IGZvciB0aGUgc3RlcCBvZiByZW5hbWluZworICAgdGhlIGV4aXN0aW5nIGBga2VybmVsNy5pbWdgYCAod2UgaGF2ZSBhbHJlYWR5IGNvcGllZCBhIEFBcmNoNjQga2VybmVsKS4KKworU2V0dXAgU0QgY2FyZAorLS0tLS0tLS0tLS0tLQorCitUaGUgaW5zdHJ1Y3Rpb25zIGFzc3VtZSB0aGF0IHlvdSBoYXZlIGFuIFNEIGNhcmQgd2l0aCBhIGZyZXNoIGluc3RhbGwgb2YKK2BSYXNwYmlhbmBfIChvciB0aGF0LCBhdCBsZWFzdCwgdGhlIGBgYm9vdGBgIHBhcnRpdGlvbiBpcyB1bnRvdWNoZWQsIG9yIG5lYXJseQordW50b3VjaGVkKS4gVGhleSBoYXZlIGJlZW4gdGVzdGVkIHdpdGggdGhlIGltYWdlIGF2YWlsYWJsZSBpbiAyMDE3LTA5LTA3LgorCisxLiBJbnNlcnQgdGhlIFNEIGNhcmQgYW5kIG9wZW4gdGhlIGBgYm9vdGBgIHBhcnRpdGlvbi4KKworMi4gUmVuYW1lIGBga2VybmVsNy5pbWdgYCB0byBgYGtlcm5lbDguaW1nYGAuIFRoaXMgdHJpY2tzIHRoZSBWaWRlb0NvcmUKKyAgIGJvb3Rsb2FkZXIgaW50byBib290aW5nIHRoZSBBcm0gY29yZXMgaW4gQUFyY2g2NCBtb2RlLCBsaWtlIHRoZSBUcnVzdGVkCisgICBGaXJtd2FyZSBuZWVkcywgZXZlbiB0aG91Z2ggdGhlIGtlcm5lbCBpcyBub3QgY29tcGlsZWQgZm9yIEFBcmNoNjQuCisKKzMuIENvcHkgYGBhcm1zdHViOC5iaW5gYCBoZXJlLiBXaGVuIGBga2VybmVsOC5pbWdgYCBpcyBhdmFpbGFibGUsIFRoZSBWaWRlb0NvcmUKKyAgIGJvb3Rsb2FkZXIgd2lsbCBsb29rIGZvciBhIGZpbGUgY2FsbGVkIGBgYXJtc3R1YjguYmluYGAgYW5kIGxvYWQgaXQgYXQKKyAgIGFkZHJlc3MgKioweDAqKiBpbnN0ZWFkIG9mIGEgcHJlZGVmaW5lZCBvbmUuCisKKzQuIE9wZW4gYGBjbWRsaW5lLnR4dGBgIGFuZCBhZGQgYGBtZW1tYXA9MjU2TSQxNk1gYCB0byBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbQorICAgdXNpbmcgdGhlIG1lbW9yeSBuZWVkZWQgYnkgdGhlIFRydXN0ZWQgRmlybXdhcmUuIElmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGUKKyAgIHNlcmlhbCBwb3J0ICJNaW5pIFVBUlQiLCBtYWtlIHN1cmUgdGhhdCB0aGlzIGZpbGUgYWxzbyBjb250YWlucworICAgYGBjb25zb2xlPXNlcmlhbDAsMTE1MjAwIGNvbnNvbGU9dHR5MWBgLgorCisgICBOb3RlIHRoYXQgdGhlIDE2IE1pQiByZXNlcnZlZCB0aGlzIHdheSB3b24ndCBiZSBhdmFpbGFibGUgZm9yIExpbnV4LCB0aGUgc2FtZQorICAgd2F5IGFzIHRoZSBtZW1vcnkgcmVzZXJ2ZWQgaW4gRFJBTSBmb3IgdGhlIEdQVSBpc24ndCBhdmFpbGFibGUuCisKKzUuIE9wZW4gYGBjb25maWcudHh0YGAgYW5kIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIGF0IHRoZSBlbmQgKGBgZW5hYmxlX3VhcnQ9MWBgCisgICBpcyBvbmx5IG5lZWRlZCB0byBlbmFibGUgZGVidWdnaW5nIHRocm91Z2ggdGhlIE1pbmkgVUFSVCk6CisKKzo6CisKKyAgICBlbmFibGVfdWFydD0xCisgICAga2VybmVsX2FkZHJlc3M9MHgwMTAwMDAwMAorICAgIGRldmljZV90cmVlX2FkZHJlc3M9MHgwMjAwMDAwMAorCitJZiB5b3UgY29ubmVjdCBhIHNlcmlhbCBjYWJsZSB0byB0aGUgTWluaSBVQVJUIGFuZCB5b3VyIGNvbXB1dGVyLCBhbmQgY29ubmVjdAordG8gaXQgKGZvciBleGFtcGxlLCB3aXRoIGBgc2NyZWVuIC9kZXYvdHR5VVNCMCAxMTUyMDBgYCkgeW91IHNob3VsZCBzZWUgc29tZQordGV4dC4gSW4gdGhlIGNhc2Ugb2YgYW4gQUFyY2gzMiBrZXJuZWwsIHlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKzo6CisKKyAgICBOT1RJQ0U6ICBCb290aW5nIFRydXN0ZWQgRmlybXdhcmUKKyAgICBOT1RJQ0U6ICBCTDE6IHYxLjQocmVsZWFzZSk6djEuNC0zMjktZzYxZTk0Njg0LWRpcnR5CisgICAgTk9USUNFOiAgQkwxOiBCdWlsdCA6IDAwOjA5OjI1LCBOb3YgIDYgMjAxNworICAgIE5PVElDRTogIEJMMTogQm9vdGluZyBCTDIKKyAgICBOT1RJQ0U6ICBCTDI6IHYxLjQocmVsZWFzZSk6djEuNC0zMjktZzYxZTk0Njg0LWRpcnR5CisgICAgTk9USUNFOiAgQkwyOiBCdWlsdCA6IDAwOjA5OjI1LCBOb3YgIDYgMjAxNworICAgIE5PVElDRTogIEJMMTogQm9vdGluZyBCTDMxCisgICAgTk9USUNFOiAgQkwzMTogdjEuNChyZWxlYXNlKTp2MS40LTMyOS1nNjFlOTQ2ODQtZGlydHkKKyAgICBOT1RJQ0U6ICBCTDMxOiBCdWlsdCA6IDAwOjA5OjI1LCBOb3YgIDYgMjAxNworICAgIFsgICAgMC4yNjY0ODRdIGJjbTI4MzUtYXV4LXVhcnQgM2YyMTUwNDAuc2VyaWFsOiBjb3VsZCBub3QgZ2V0IGNsazogLTUxNworCisgICAgUmFzcGJpYW4gR05VL0xpbnV4IDkgcmFzcGJlcnJ5cGkgdHR5UzAKKyAgICByYXNwYmVycnlwaSBsb2dpbjoKKworSnVzdCBlbnRlciB5b3VyIGNyZWRlbnRpYWxzLCBldmVyeXRoaW5nIHNob3VsZCB3b3JrIGFzIGV4cGVjdGVkLiBOb3RlIHRoYXQgdGhlCitIRE1JIG91dHB1dCB3b24ndCBzaG93IGFueSB0ZXh0IGR1cmluZyBib290LgorCisuLiBfZGVmYXVsdCBBcm0gc3R1YjogaHR0cHM6Ly9naXRodWIuY29tL3Jhc3BiZXJyeXBpL3Rvb2xzL2Jsb2IvbWFzdGVyL2FybXN0dWJzL2FybXN0dWI3LlMKKy4uIF9kZWZhdWx0IEFBcmNoNjQgc3R1YjogaHR0cHM6Ly9naXRodWIuY29tL3Jhc3BiZXJyeXBpL3Rvb2xzL2Jsb2IvbWFzdGVyL2FybXN0dWJzL2FybXN0dWI4LlMKKy4uIF9MaW51eCBrZXJuZWwgdHJlZTogaHR0cHM6Ly9naXRodWIuY29tL3RvcnZhbGRzL2xpbnV4CisuLiBfTGludXggdHJlZSBmb3JrOiBodHRwczovL2dpdGh1Yi5jb20vcmFzcGJlcnJ5cGkvbGludXgKKy4uIF9SYXNwYmVycnkgUGkgMzogaHR0cHM6Ly93d3cucmFzcGJlcnJ5cGkub3JnL3Byb2R1Y3RzL3Jhc3BiZXJyeS1waS0zLW1vZGVsLWIvCisuLiBfUmFzcGJlcnJ5IFBpIDMgQXJtIFRydXN0ZWQgRmlybXdhcmUgYm9vdHN0cmFwOiBodHRwczovL2dpdGh1Yi5jb20vQW50b25pb05EL3JwaTMtYXJtLXRmLWJvb3RzdHJhcAorLi4gX1Jhc3BiZXJyeSBQaSAzIGRvY3VtZW50YXRpb246IGh0dHBzOi8vd3d3LnJhc3BiZXJyeXBpLm9yZy9kb2N1bWVudGF0aW9uLworLi4gX1Jhc3BiaWFuOiBodHRwczovL3d3dy5yYXNwYmVycnlwaS5vcmcvZG93bmxvYWRzL3Jhc3BiaWFuLwpkaWZmIC0tZ2l0IGEvZG9jcy9wbGF0Zm9ybS1pbnRlcnJ1cHQtY29udHJvbGxlci1BUEkucnN0IGIvZG9jcy9wbGF0Zm9ybS1pbnRlcnJ1cHQtY29udHJvbGxlci1BUEkucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNGYwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsYXRmb3JtLWludGVycnVwdC1jb250cm9sbGVyLUFQSS5yc3QKQEAgLTAsMCArMSwzMTMgQEAKK1BsYXRmb3JtIEludGVycnVwdCBDb250cm9sbGVyIEFQSSBkb2N1bWVudGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBzZWN0aW9uLW51bWJlcmluZzo6CisgICAgOnN1ZmZpeDogLgorCisuLiBjb250ZW50czo6CisKK1RoaXMgZG9jdW1lbnQgbGlzdHMgdGhlIG9wdGlvbmFsIHBsYXRmb3JtIGludGVycnVwdCBjb250cm9sbGVyIEFQSSB0aGF0CithYnN0cmFjdHMgdGhlIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbCBvZiBpbnRlcnJ1cHQgY29udHJvbGxlciBmcm9tIHRoZQorZ2VuZXJpYyBjb2RlLiBUaGUgbWFuZGF0b3J5IEFQSXMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgYHBvcnRpbmcgZ3VpZGVgX18uCisKKy4uIF9fOiBwb3J0aW5nLWd1aWRlLnJzdCNpbnRlcnJ1cHQtbWFuYWdlbWVudC1mcmFtZXdvcmstaW4tYmwzMQorCitGdW5jdGlvbjogdW5zaWduZWQgaW50IHBsYXRfaWNfZ2V0X3J1bm5pbmdfcHJpb3JpdHkodm9pZCk7IFtvcHRpb25hbF0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICAgQXJndW1lbnQgOiB2b2lkCisgICAgUmV0dXJuICAgOiB1bnNpZ25lZCBpbnQKKworVGhpcyBBUEkgc2hvdWxkIHJldHVybiB0aGUgcHJpb3JpdHkgb2YgdGhlIGludGVycnVwdCB0aGUgUEUgaXMgY3VycmVudGx5CitzZXJ2aWNpbmcuIFRoaXMgbXVzdCBiZSBiZSBjYWxsZWQgb25seSBhZnRlciBhbiBpbnRlcnJ1cHQgaGFzIGFscmVhZHkgYmVlbgorYWNrbm93bGVkZ2VkIHZpYS4gYGBwbGF0X2ljX2Fja25vd2xlZGdlX2ludGVycnVwdGBgLgorCitJbiB0aGUgY2FzZSBvZiBBUk0gc3RhbmRhcmQgcGxhdGZvcm1zIHVzaW5nIEdJQywgdGhlICpSdW5uaW5nIFByaW9yaXR5IFJlZ2lzdGVyKgoraXMgcmVhZCB0byBkZXRlcm1pbmUgdGhlIHByaW9yaXR5IG9mIHRoZSBpbnRlcnJ1cHQuCisKK0Z1bmN0aW9uOiBpbnQgcGxhdF9pY19pc19zcGkodW5zaWduZWQgaW50IGlkKTsgW29wdGlvbmFsXQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKzo6CisKKyAgICBBcmd1bWVudCA6IHVuc2lnbmVkIGludAorICAgIFJldHVybiAgIDogaW50CisKK1RoZSBBUEkgc2hvdWxkIHJldHVybiB3aGV0aGVyIHRoZSBpbnRlcnJ1cHQgSUQgKGZpcnN0IHBhcmFtZXRlcikgaXMgY2F0ZWdvcml6ZWQKK2FzIGEgU2hhcmVkIFBlcmlwaGVyYWwgSW50ZXJydXB0LiBTaGFyZWQgUGVyaXBoZXJhbCBJbnRlcnJ1cHRzIGFyZSB0eXBpY2FsbHkKK2Fzc29jaWF0ZWQgdG8gc3lzdGVtLXdpZGUgcGVyaXBoZXJhbHMsIGFuZCB0aGVzZSBpbnRlcnJ1cHRzIGNhbiB0YXJnZXQgYW55IFBFIGluCit0aGUgc3lzdGVtLgorCitGdW5jdGlvbjogaW50IHBsYXRfaWNfaXNfcHBpKHVuc2lnbmVkIGludCBpZCk7IFtvcHRpb25hbF0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICAgQXJndW1lbnQgOiB1bnNpZ25lZCBpbnQKKyAgICBSZXR1cm4gICA6IGludAorCitUaGUgQVBJIHNob3VsZCByZXR1cm4gd2hldGhlciB0aGUgaW50ZXJydXB0IElEIChmaXJzdCBwYXJhbWV0ZXIpIGlzIGNhdGVnb3JpemVkCithcyBhIFByaXZhdGUgUGVyaXBoZXJhbCBJbnRlcnJ1cHQuIFByaXZhdGUgUGVyaXBoZXJhbCBJbnRlcnJ1cHRzIGFyZSB0eXBpY2FsbHkKK2Fzc29jaWF0ZWQgd2l0aCBwZXJpcGhlcmFscyB0aGF0IGFyZSBwcml2YXRlIHRvIGVhY2ggUEUuIEludGVycnVwdHMgZnJvbSBwcml2YXRlCitwZXJpcGhlcmFscyB0YXJnZXQgdG8gdGhhdCBQRSBvbmx5LgorCitGdW5jdGlvbjogaW50IHBsYXRfaWNfaXNfc2dpKHVuc2lnbmVkIGludCBpZCk7IFtvcHRpb25hbF0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICAgQXJndW1lbnQgOiB1bnNpZ25lZCBpbnQKKyAgICBSZXR1cm4gICA6IGludAorCitUaGUgQVBJIHNob3VsZCByZXR1cm4gd2hldGhlciB0aGUgaW50ZXJydXB0IElEIChmaXJzdCBwYXJhbWV0ZXIpIGlzIGNhdGVnb3JpemVkCithcyBhIFNvZnR3YXJlIEdlbmVyYXRlZCBJbnRlcnJ1cHQuIFNvZnR3YXJlIEdlbmVyYXRlZCBJbnRlcnJ1cHRzIGFyZSByYWlzZWQgYnkKK2V4cGxpY2l0IHByb2dyYW1taW5nIGJ5IHNvZnR3YXJlLCBhbmQgYXJlIHR5cGljYWxseSB1c2VkIGluIGludGVyLVBFCitjb21tdW5pY2F0aW9uLiBTZWN1cmUgU0dJcyBhcmUgcmVzZXJ2ZWQgZm9yIHVzZSBieSBTZWN1cmUgd29ybGQgc29mdHdhcmUuCisKK0Z1bmN0aW9uOiB1bnNpZ25lZCBpbnQgcGxhdF9pY19nZXRfaW50ZXJydXB0X2FjdGl2ZSh1bnNpZ25lZCBpbnQgaWQpOyBbb3B0aW9uYWxdCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICAgQXJndW1lbnQgOiB1bnNpZ25lZCBpbnQKKyAgICBSZXR1cm4gICA6IGludAorCitUaGlzIEFQSSBzaG91bGQgcmV0dXJuIHRoZSAqYWN0aXZlKiBzdGF0dXMgb2YgdGhlIGludGVycnVwdCBJRCBzcGVjaWZpZWQgYnkgdGhlCitmaXJzdCBwYXJhbWV0ZXIsIGBgaWRgYC4KKworSW4gY2FzZSBvZiBBUk0gc3RhbmRhcmQgcGxhdGZvcm1zIHVzaW5nIEdJQywgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkgcmVhZHMKK3RoZSBHSUMgKlNldCBBY3RpdmUgUmVnaXN0ZXIqIHRvIHJlYWQgYW5kIHJldHVybiB0aGUgYWN0aXZlIHN0YXR1cyBvZiB0aGUKK2ludGVycnVwdC4KKworRnVuY3Rpb246IHZvaWQgcGxhdF9pY19lbmFibGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpZCk7IFtvcHRpb25hbF0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKzo6CisKKyAgICBBcmd1bWVudCA6IHVuc2lnbmVkIGludAorICAgIFJldHVybiAgIDogdm9pZAorCitUaGlzIEFQSSBzaG91bGQgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgSUQgc3BlY2lmaWVkIGJ5IHRoZSBmaXJzdCBwYXJhbWV0ZXIsCitgYGlkYGAuIFBFcyBpbiB0aGUgc3lzdGVtIGFyZSBleHBlY3RlZCB0byByZWNlaXZlIG9ubHkgZW5hYmxlZCBpbnRlcnJ1cHRzLgorCitJbiBjYXNlIG9mIEFSTSBzdGFuZGFyZCBwbGF0Zm9ybXMgdXNpbmcgR0lDLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSQoraW5zZXJ0cyBiYXJyaWVyIHRvIG1ha2UgbWVtb3J5IHVwZGF0ZXMgdmlzaWJsZSBiZWZvcmUgZW5hYmxpbmcgaW50ZXJydXB0LCBhbmQKK3RoZW4gd3JpdGVzIHRvIEdJQyAqU2V0IEVuYWJsZSBSZWdpc3RlciogdG8gZW5hYmxlIHRoZSBpbnRlcnJ1cHQuCisKK0Z1bmN0aW9uOiB2b2lkIHBsYXRfaWNfZGlzYWJsZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGlkKTsgW29wdGlvbmFsXQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKzo6CisKKyAgICBBcmd1bWVudCA6IHVuc2lnbmVkIGludAorICAgIFJldHVybiAgIDogdm9pZAorCitUaGlzIEFQSSBzaG91bGQgZGlzYWJsZSB0aGUgaW50ZXJydXB0IElEIHNwZWNpZmllZCBieSB0aGUgZmlyc3QgcGFyYW1ldGVyLAorYGBpZGBgLiBQRXMgaW4gdGhlIHN5c3RlbSBhcmUgbm90IGV4cGVjdGVkIHRvIHJlY2VpdmUgZGlzYWJsZWQgaW50ZXJydXB0cy4KKworSW4gY2FzZSBvZiBBUk0gc3RhbmRhcmQgcGxhdGZvcm1zIHVzaW5nIEdJQywgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkKK3dyaXRlcyB0byBHSUMgKkNsZWFyIEVuYWJsZSBSZWdpc3RlciogdG8gZGlzYWJsZSB0aGUgaW50ZXJydXB0LCBhbmQgaW5zZXJ0cworYmFycmllciB0byBtYWtlIG1lbW9yeSB1cGRhdGVzIHZpc2libGUgYWZ0ZXJ3YXJkcy4KKworRnVuY3Rpb246IHZvaWQgcGxhdF9pY19zZXRfaW50ZXJydXB0X3ByaW9yaXR5KHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHByaW9yaXR5KTsgW29wdGlvbmFsXQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICAgQXJndW1lbnQgOiB1bnNpZ25lZCBpbnQKKyAgICBBcmd1bWVudCA6IHVuc2lnbmVkIGludAorICAgIFJldHVybiAgIDogdm9pZAorCitUaGlzIEFQSSBzaG91bGQgc2V0IHRoZSBwcmlvcml0eSBvZiB0aGUgaW50ZXJydXB0IHNwZWNpZmllZCBieSBmaXJzdCBwYXJhbWV0ZXIKK2BgaWRgYCB0byB0aGUgdmFsdWUgc2V0IGJ5IHRoZSBzZWNvbmQgcGFyYW1ldGVyIGBgcHJpb3JpdHlgYC4KKworSW4gY2FzZSBvZiBBUk0gc3RhbmRhcmQgcGxhdGZvcm1zIHVzaW5nIEdJQywgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkKK3dyaXRlcyB0byBHSUMgKlByaW9yaXR5IFJlZ2lzdGVyKiBzZXQgaW50ZXJydXB0IHByaW9yaXR5LgorCitGdW5jdGlvbjogaW50IHBsYXRfaWNfaGFzX2ludGVycnVwdF90eXBlKHVuc2lnbmVkIGludCB0eXBlKTsgW29wdGlvbmFsXQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworOjoKKworICAgIEFyZ3VtZW50IDogdW5zaWduZWQgaW50CisgICAgUmV0dXJuICAgOiBpbnQKKworVGhpcyBBUEkgc2hvdWxkIHJldHVybiB3aGV0aGVyIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBhIGdpdmVuIGludGVycnVwdCB0eXBlLiBUaGUKK3BhcmFtZXRlciBgYHR5cGVgYCBzaGFsbCBiZSBvbmUgb2YgYGBJTlRSX1RZUEVfRUwzYGAsIGBgSU5UUl9UWVBFX1NfRUwxYGAsIG9yCitgYElOVFJfVFlQRV9OU2BgLgorCitJbiBjYXNlIG9mIEFSTSBzdGFuZGFyZCBwbGF0Zm9ybXMgdXNpbmcgR0lDdjMsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJCityZXR1cm5zIGBgMWBgIGZvciBhbGwgaW50ZXJydXB0IHR5cGVzLgorCitJbiBjYXNlIG9mIEFSTSBzdGFuZGFyZCBwbGF0Zm9ybXMgdXNpbmcgR0lDdjIsIHRoZSBBUEkgYWx3YXlzIHJldHVybiBgYDFgYCBmb3IKK2BgSU5UUl9UWVBFX05TYGAuIFJldHVybiB2YWx1ZSBmb3Igb3RoZXIgdHlwZXMgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgYnVpbGQKK29wdGlvbiBgYEdJQ1YyX0cwX0ZPUl9FTDNgYDoKKworLSBGb3IgaW50ZXJydXB0IHR5cGUgYGBJTlRSX1RZUEVfRUwzYGA6CisKKyAgLSBXaGVuIGBgR0lDVjJfRzBfRk9SX0VMM2BgIGlzIGBgMGBgLCBpdCByZXR1cm5zIGBgMGBgLCBpbmRpY2F0aW5nIG5vIHN1cHBvcnQKKyAgICBmb3IgRUwzIGludGVycnVwdHMuCisKKyAgLSBXaGVuIGBgR0lDVjJfRzBfRk9SX0VMM2BgIGlzIGBgMWBgLCBpdCByZXR1cm5zIGBgMWBgLCBpbmRpY2F0aW5nIHN1cHBvcnQgZm9yCisgICAgRUwzIGludGVycnVwdHMuCisKKy0gRm9yIGludGVycnVwdCB0eXBlIGBgSU5UUl9UWVBFX1NfRUwxYGA6CisKKyAgLSBXaGVuIGBgR0lDVjJfRzBfRk9SX0VMM2BgIGlzIGBgMGBgLCBpdCByZXR1cm5zIGBgMWBgLCBpbmRpY2F0aW5nIHN1cHBvcnQgZm9yCisgICAgU2VjdXJlIEVMMSBpbnRlcnJ1cHRzLgorCisgIC0gV2hlbiBgYEdJQ1YyX0cwX0ZPUl9FTDNgYCBpcyBgYDFgYCwgaXQgcmV0dXJucyBgYDBgYCwgaW5kaWNhdGluZyBubyBzdXBwb3J0CisgICAgZm9yIFNlY3VyZSBFTDEgaW50ZXJydXB0cy4KKworRnVuY3Rpb246IHZvaWQgcGxhdF9pY19zZXRfaW50ZXJydXB0X3R5cGUodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgdHlwZSk7IFtvcHRpb25hbF0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKzo6CisKKyAgICBBcmd1bWVudCA6IHVuc2lnbmVkIGludAorICAgIEFyZ3VtZW50IDogdW5zaWduZWQgaW50CisgICAgUmV0dXJuICAgOiB2b2lkCisKK1RoaXMgQVBJIHNob3VsZCBzZXQgdGhlIGludGVycnVwdCBzcGVjaWZpZWQgYnkgZmlyc3QgcGFyYW1ldGVyIGBgaWRgYCB0byB0aGUKK3R5cGUgc3BlY2lmaWVkIGJ5IHNlY29uZCBwYXJhbWV0ZXIgYGB0eXBlYGAuIFRoZSBgYHR5cGVgYCBwYXJhbWV0ZXIgY2FuIGJlCitvbmUgb2Y6CisKKy0gYGBJTlRSX1RZUEVfTlNgYDogaW50ZXJydXB0IGlzIG1lYW50IHRvIGJlIGNvbnN1bWVkIGJ5IHRoZSBOb24tc2VjdXJlIHdvcmxkLgorCistIGBgSU5UUl9UWVBFX1NfRUwxYGA6IGludGVycnVwdCBpcyBtZWFudCB0byBiZSBjb25zdW1lZCBieSBTZWN1cmUgRUwxLgorCistIGBgSU5UUl9UWVBFX0VMM2BgOiBpbnRlcnJ1cHQgaXMgbWVhbnQgdG8gYmUgY29uc3VtZWQgYnkgRUwzLgorCitJbiBjYXNlIG9mIEFSTSBzdGFuZGFyZCBwbGF0Zm9ybXMgdXNpbmcgR0lDLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSQord3JpdGVzIHRvIHRoZSBHSUMgKkdyb3VwIFJlZ2lzdGVyKiBhbmQgKkdyb3VwIE1vZGlmaWVyIFJlZ2lzdGVyKiAob25seSBHSUN2MykgdG8KK2Fzc2lnbiB0aGUgaW50ZXJydXB0IHRvIHRoZSByaWdodCBncm91cC4KKworRm9yIEdJQ3YzOgorCistIGBgSU5UUl9UWVBFX05TYGAgbWFwcyB0byBHcm91cCAxIGludGVycnVwdC4KKworLSBgYElOVFJfVFlQRV9TX0VMMWBgIG1hcHMgdG8gU2VjdXJlIEdyb3VwIDEgaW50ZXJydXB0LgorCistIGBgSU5UUl9UWVBFX0VMM2BgIG1hcHMgdG8gU2VjdXJlIEdyb3VwIDAgaW50ZXJydXB0LgorCitGb3IgR0lDdjI6CisKKy0gYGBJTlRSX1RZUEVfTlNgYCBtYXBzIHRvIEdyb3VwIDEgaW50ZXJydXB0LgorCistIFdoZW4gdGhlIGJ1aWxkIG9wdGlvbiBgYEdJQ1YyX0cwX0ZPUl9FTDNgYCBpcyBzZXQgdG8gYGAwYGAgKHRoZSBkZWZhdWx0KSwKKyAgYGBJTlRSX1RZUEVfU19FTDFgYCBtYXBzIHRvIEdyb3VwIDAuIE90aGVyd2lzZSwgYGBJTlRSX1RZUEVfRUwzYGAgbWFwcyB0bworICBHcm91cCAwIGludGVycnVwdC4KKworRnVuY3Rpb246IHZvaWQgcGxhdF9pY19yYWlzZV9lbDNfc2dpKGludCBzZ2lfbnVtLCB1X3JlZ2lzdGVyX3QgdGFyZ2V0KTsgW29wdGlvbmFsXQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICAgQXJndW1lbnQgOiBpbnQKKyAgICBBcmd1bWVudCA6IHVfcmVnaXN0ZXJfdAorICAgIFJldHVybiAgIDogdm9pZAorCitUaGlzIEFQSSBzaG91bGQgcmFpc2UgYW4gRUwzIFNHSS4gVGhlIGZpcnN0IHBhcmFtZXRlciwgYGBzZ2lfbnVtYGAsIHNwZWNpZmllcwordGhlIElEIG9mIHRoZSBTR0kuIFRoZSBzZWNvbmQgcGFyYW1ldGVyLCBgYHRhcmdldGBgLCBtdXN0IGJlIHRoZSBNUElEUiBvZiB0aGUKK3RhcmdldCBQRS4KKworSW4gY2FzZSBvZiBBUk0gc3RhbmRhcmQgcGxhdGZvcm1zIHVzaW5nIEdJQywgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkKK2luc2VydHMgYmFycmllciB0byBtYWtlIG1lbW9yeSB1cGRhdGVzIHZpc2libGUgYmVmb3JlIHJhaXNpbmcgU0dJLCB0aGVuIHdyaXRlcwordG8gYXBwcm9wcmlhdGUgKlNHSSBSZWdpc3RlciogaW4gb3JkZXIgdG8gcmFpc2UgdGhlIEVMMyBTR0kuCisKK0Z1bmN0aW9uOiB2b2lkIHBsYXRfaWNfc2V0X3NwaV9yb3V0aW5nKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHJvdXRpbmdfbW9kZSwgdV9yZWdpc3Rlcl90IG1waWRyKTsgW29wdGlvbmFsXQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKzo6CisKKyAgICBBcmd1bWVudCA6IHVuc2lnbmVkIGludAorICAgIEFyZ3VtZW50IDogdW5zaWduZWQgaW50CisgICAgQXJndW1lbnQgOiB1X3JlZ2lzdGVyX3QKKyAgICBSZXR1cm4gICA6IHZvaWQKKworVGhpcyBBUEkgc2hvdWxkIHNldCB0aGUgcm91dGluZyBtb2RlIG9mIFNoYXJlIFBlcmlwaGVyYWwgSW50ZXJydXB0IChTUEkpCitzcGVjaWZpZWQgYnkgZmlyc3QgcGFyYW1ldGVyIGBgaWRgYCB0byB0aGF0IHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIHBhcmFtZXRlcgorYGByb3V0aW5nX21vZGVgYC4KKworVGhlIGBgcm91dGluZ19tb2RlYGAgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2Y6CisKKy0gYGBJTlRSX1JPVVRJTkdfTU9ERV9BTllgYCBtZWFucyB0aGUgaW50ZXJydXB0IGNhbiBiZSByb3V0ZWQgdG8gYW55IFBFIGluIHRoZQorICBzeXN0ZW0uIFRoZSBgYG1waWRyYGAgcGFyYW1ldGVyIGlzIGlnbm9yZWQgaW4gdGhpcyBjYXNlLgorCistIGBgSU5UUl9ST1VUSU5HX01PREVfUEVgYCBtZWFucyB0aGUgaW50ZXJydXB0IGlzIHJvdXRlZCB0byB0aGUgUEUgd2hvc2UgTVBJRFIKKyAgdmFsdWUgaXMgc3BlY2lmaWVkIGJ5IHRoZSBwYXJhbWV0ZXIgYGBtcGlkcmBgLgorCitJbiBjYXNlIG9mIEFSTSBzdGFuZGFyZCBwbGF0Zm9ybXMgdXNpbmcgR0lDLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSQord3JpdGVzIHRvIHRoZSBHSUMgKlRhcmdldCBSZWdpc3RlciogKEdJQ3YyKSBvciAqUm91dGUgUmVnaXN0ZXIqIChHSUN2MykgdG8gc2V0Cit0aGUgcm91dGluZy4KKworRnVuY3Rpb246IHZvaWQgcGxhdF9pY19zZXRfaW50ZXJydXB0X3BlbmRpbmcodW5zaWduZWQgaW50IGlkKTsgW29wdGlvbmFsXQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICAgQXJndW1lbnQgOiB1bnNpZ25lZCBpbnQKKyAgICBSZXR1cm4gICA6IHZvaWQKKworVGhpcyBBUEkgc2hvdWxkIHNldCB0aGUgaW50ZXJydXB0IHNwZWNpZmllZCBieSBmaXJzdCBwYXJhbWV0ZXIgYGBpZGBgIHRvCisqUGVuZGluZyouCisKK0luIGNhc2Ugb2YgQVJNIHN0YW5kYXJkIHBsYXRmb3JtcyB1c2luZyBHSUMsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJCitpbnNlcnRzIGJhcnJpZXIgdG8gbWFrZSBtZW1vcnkgdXBkYXRlcyB2aXNpYmxlIGJlZm9yZSBzZXR0aW5nIGludGVycnVwdCBwZW5kaW5nLAorYW5kIHdyaXRlcyB0byB0aGUgR0lDICpTZXQgUGVuZGluZyBSZWdpc3RlciogdG8gc2V0IHRoZSBpbnRlcnJ1cHQgcGVuZGluZworc3RhdHVzLgorCitGdW5jdGlvbjogdm9pZCBwbGF0X2ljX2NsZWFyX2ludGVycnVwdF9wZW5kaW5nKHVuc2lnbmVkIGludCBpZCk7IFtvcHRpb25hbF0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICAgQXJndW1lbnQgOiB1bnNpZ25lZCBpbnQKKyAgICBSZXR1cm4gICA6IHZvaWQKKworVGhpcyBBUEkgc2hvdWxkIGNsZWFyIHRoZSAqUGVuZGluZyogc3RhdHVzIG9mIHRoZSBpbnRlcnJ1cHQgc3BlY2lmaWVkIGJ5IGZpcnN0CitwYXJhbWV0ZXIgYGBpZGBgLgorCitJbiBjYXNlIG9mIEFSTSBzdGFuZGFyZCBwbGF0Zm9ybXMgdXNpbmcgR0lDLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSQord3JpdGVzIHRvIHRoZSBHSUMgKkNsZWFyIFBlbmRpbmcgUmVnaXN0ZXIqIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgcGVuZGluZworc3RhdHVzLCBhbmQgaW5zZXJ0cyBiYXJyaWVyIHRvIG1ha2UgbWVtb3J5IHVwZGF0ZXMgdmlzaWJsZSBhZnRlcndhcmRzLgorCitGdW5jdGlvbjogdW5zaWduZWQgaW50IHBsYXRfaWNfc2V0X3ByaW9yaXR5X21hc2sodW5zaWduZWQgaW50IGlkKTsgW29wdGlvbmFsXQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworOjoKKworICAgIEFyZ3VtZW50IDogdW5zaWduZWQgaW50CisgICAgUmV0dXJuICAgOiBpbnQKKworVGhpcyBBUEkgc2hvdWxkIHNldCB0aGUgcHJpb3JpdHkgbWFzayAoZmlyc3QgcGFyYW1ldGVyKSBpbiB0aGUgaW50ZXJydXB0Citjb250cm9sbGVyIHN1Y2ggdGhhdCBvbmx5IGludGVycnVwdHMgb2YgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIHN1cHBsaWVkIG9uZQorbWF5IGJlIHNpZ25hbGxlZCB0byB0aGUgUEUuIFRoZSBBUEkgc2hvdWxkIHJldHVybiB0aGUgY3VycmVudCBwcmlvcml0eSB2YWx1ZQordGhhdCBpdCdzIG92ZXJ3cml0aW5nLgorCitJbiBjYXNlIG9mIEFSTSBzdGFuZGFyZCBwbGF0Zm9ybXMgdXNpbmcgR0lDLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSQoraW5zZXJ0cyB0byBvcmRlciBtZW1vcnkgdXBkYXRlcyBiZWZvcmUgdXBkYXRpbmcgbWFzaywgdGhlbiB3cml0ZXMgdG8gdGhlIEdJQworKlByaW9yaXR5IE1hc2sgUmVnaXN0ZXIqLCBhbmQgbWFrZSBzdXJlIG1lbW9yeSB1cGRhdGVzIGFyZSB2aXNpYmxlIGJlZm9yZQorcG90ZW50aWFsIHRyaWdnZXIgZHVlIHRvIG1hc2sgdXBkYXRlLgorCitGdW5jdGlvbjogdW5zaWduZWQgaW50IHBsYXRfaWNfZ2V0X2ludGVycnVwdF9pZCh1bnNpZ25lZCBpbnQgcmF3KTsgW29wdGlvbmFsXQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworOjoKKworICAgIEFyZ3VtZW50IDogdW5zaWduZWQgaW50CisgICAgUmV0dXJuICAgOiB1bnNpZ25lZCBpbnQKKworVGhpcyBBUEkgc2hvdWxkIGV4dHJhY3QgYW5kIHJldHVybiB0aGUgaW50ZXJydXB0IG51bWJlciBmcm9tIHRoZSByYXcgdmFsdWUKK29idGFpbmVkIGJ5IHRoZSBhY2tub3dsZWRnaW5nIHRoZSBpbnRlcnJ1cHQgKHJlYWQgdXNpbmcKK2BgcGxhdF9pY19hY2tub3dsZWRnZV9pbnRlcnJ1cHQoKWBgKS4gSWYgdGhlIGludGVycnVwdCBJRCBpcyBpbnZhbGlkLCB0aGlzIEFQSQorc2hvdWxkIHJldHVybiBgYElOVFJfSURfVU5BVkFJTEFCTEVgYC4KKworSW4gY2FzZSBvZiBBUk0gc3RhbmRhcmQgcGxhdGZvcm1zIHVzaW5nIEdJQywgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkKK21hc2tzIG91dCB0aGUgaW50ZXJydXB0IElEIGZpZWxkIGZyb20gdGhlIGFja25vd2xlZGdlZCB2YWx1ZSBmcm9tIEdJQy4KKworLS0tLQorCisqQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLioKZGlmZiAtLWdpdCBhL2RvY3MvcGxhdGZvcm0tbWlncmF0aW9uLWd1aWRlLnJzdCBiL2RvY3MvcGxhdGZvcm0tbWlncmF0aW9uLWd1aWRlLnJzdAppbmRleCA2MzgwMzNlLi5jYTc1NTQ2IDEwMDY0NAotLS0gYS9kb2NzL3BsYXRmb3JtLW1pZ3JhdGlvbi1ndWlkZS5yc3QKKysrIGIvZG9jcy9wbGF0Zm9ybS1taWdyYXRpb24tZ3VpZGUucnN0CkBAIC0xNTgsNiArMTU4LDE3IEBACiAgICAgICAgIGludCAoKnZhbGlkYXRlX25zX2VudHJ5cG9pbnQpKHVuc2lnbmVkIGxvbmcgbnNfZW50cnlwb2ludCk7CiAgICAgICAgIHZvaWQgKCpnZXRfc3lzX3N1c3BlbmRfcG93ZXJfc3RhdGUpKAogICAgICAgICAgICAgICAgICAgICAgICAgcHNjaV9wb3dlcl9zdGF0ZV90ICpyZXFfc3RhdGUpOworICAgICAgICBpbnQgKCpnZXRfcHdyX2x2bF9zdGF0ZV9pZHgpKHBsYXRfbG9jYWxfc3RhdGVfdCBwd3JfZG9tYWluX3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHB3cmx2bCk7CisgICAgICAgIGludCAoKnRyYW5zbGF0ZV9wb3dlcl9zdGF0ZV9ieV9tcGlkcikodV9yZWdpc3Rlcl90IG1waWRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvd2VyX3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNjaV9wb3dlcl9zdGF0ZV90ICpvdXRwdXRfc3RhdGUpOworICAgICAgICBpbnQgKCpnZXRfbm9kZV9od19zdGF0ZSkodV9yZWdpc3Rlcl90IG1waWRyLCB1bnNpZ25lZCBpbnQgcG93ZXJfbGV2ZWwpOworICAgICAgICBpbnQgKCptZW1fcHJvdGVjdF9jaGspKHVpbnRwdHJfdCBiYXNlLCB1X3JlZ2lzdGVyX3QgbGVuZ3RoKTsKKyAgICAgICAgaW50ICgqcmVhZF9tZW1fcHJvdGVjdCkoaW50ICp2YWwpOworICAgICAgICBpbnQgKCp3cml0ZV9tZW1fcHJvdGVjdCkoaW50IHZhbCk7CisgICAgICAgIGludCAoKnN5c3RlbV9yZXNldDIpKGludCBpc192ZW5kb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNldF90eXBlLCB1X3JlZ2lzdGVyX3QgY29va2llKTsKICAgICB9IHBsYXRfcHNjaV9vcHNfdDsKIAogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZXNlIGhhbmRsZXJzIGNhbiBiZSBmb3VuZCBpbiB0aGUgYFBvcnRpbmcgR3VpZGUgPHBvcnRpbmctZ3VpZGUucnN0I3VzZXItY29udGVudC1mdW5jdGlvbi0tcGxhdF9zZXR1cF9wc2NpX29wcy1tYW5kYXRvcnk+YF9fLgpkaWZmIC0tZ2l0IGEvZG9jcy9wb3J0aW5nLWd1aWRlLnJzdCBiL2RvY3MvcG9ydGluZy1ndWlkZS5yc3QKaW5kZXggOTc5ODU2Ni4uZjAyMGVjOSAxMDA2NDQKLS0tIGEvZG9jcy9wb3J0aW5nLWd1aWRlLnJzdAorKysgYi9kb2NzL3BvcnRpbmctZ3VpZGUucnN0CkBAIC0xNTk2LDYgKzE1OTYsMzQgQEAKIFRoaXMgZnVuY3Rpb24gaXNuJ3QgbmVlZGVkIGlmIGVpdGhlciBgYFBSRUxPQURFRF9CTDMzX0JBU0VgYCBvciBgYEVMM19QQVlMT0FEX0JBU0VgYAogYnVpbGQgb3B0aW9ucyBhcmUgdXNlZC4KIAorRnVuY3Rpb24gOiBibDJcX3BsYXRcX3ByZWxvYWRcX3NldHVwIFtvcHRpb25hbF0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorICAgIEFyZ3VtZW50IDogdm9pZAorICAgIFJldHVybiAgIDogdm9pZAorCitUaGlzIG9wdGlvbmFsIGZ1bmN0aW9uIHBlcmZvcm1zIGFueSBCTDIgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24KK3JlcXVpcmVkIGJlZm9yZSBpbWFnZSBsb2FkaW5nLCB0aGF0IGlzIG5vdCBkb25lIGxhdGVyIGluCitibDJcX3BsYXRmb3JtXF9zZXR1cCgpLiBTcGVjaWZpY2FsbHksIGlmIHN1cHBvcnQgZm9yIG11bHRpcGxlCitib290IHNvdXJjZXMgaXMgcmVxdWlyZWQsIGl0IGluaXRpYWxpemVzIHRoZSBib290IHNlcXVlbmNlIHVzZWQgYnkKK3BsYXRcX3RyeVxfbmV4dFxfYm9vdFxfc291cmNlKCkuCisKK0Z1bmN0aW9uIDogcGxhdFxfdHJ5XF9uZXh0XF9ib290XF9zb3VyY2UoKSBbb3B0aW9uYWxdCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorICAgIEFyZ3VtZW50IDogdm9pZAorICAgIFJldHVybiAgIDogaW50CisKK1RoaXMgb3B0aW9uYWwgZnVuY3Rpb24gcGFzc2VzIHRvIHRoZSBuZXh0IGJvb3Qgc291cmNlIGluIHRoZSByZWR1bmRhbmN5CitzZXF1ZW5jZS4KKworVGhpcyBmdW5jdGlvbiBtb3ZlcyB0aGUgY3VycmVudCBib290IHJlZHVuZGFuY3kgc291cmNlIHRvIHRoZSBuZXh0CitlbGVtZW50IGluIHRoZSBib290IHNlcXVlbmNlLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBib290IHNvdXJjZXMgdGhlbiBpdAorbXVzdCByZXR1cm4gMCwgb3RoZXJ3aXNlIGl0IG11c3QgcmV0dXJuIDEuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCitvZiB0aGlzIGFsd2F5cyByZXR1cm5zIDAuCisKIEZXVSBCb290IExvYWRlciBTdGFnZSAyIChCTDJVKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE4NzYsNiArMTkwNCw3NCBAQAogYXNzZXJ0aW9uIGlzIHJhaXNlZCBpZiB0aGUgdmFsdWUgb2YgdGhlIGNvbnN0YW50IGlzIG5vdCBhbGlnbmVkIHRvIHRoZSBjYWNoZQogbGluZSBib3VuZGFyeS4KIAorU0RFSSBwb3J0aW5nIHJlcXVpcmVtZW50cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgU0RFSSBkaXNwYXRjaGVyIHJlcXVpcmVzIHRoZSBwbGF0Zm9ybSB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgbWFjcm9zCithbmQgZnVuY3Rpb25zLCBvZiB3aGljaCBzb21lIGFyZSBvcHRpb25hbCwgYW5kIHNvbWUgb3RoZXJzIG1hbmRhdG9yeS4KKworTWFjcm9zCisuLi4uLi4KKworTWFjcm86IFBMQVRfU0RFSV9OT1JNQUxfUFJJIFttYW5kYXRvcnldCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhpcyBtYWNybyBtdXN0IGJlIGRlZmluZWQgdG8gdGhlIEVMMyBleGNlcHRpb24gcHJpb3JpdHkgbGV2ZWwgYXNzb2NpYXRlZCB3aXRoCitOb3JtYWwgU0RFSSBldmVudHMgb24gdGhlIHBsYXRmb3JtLiBUaGlzIG11c3QgaGF2ZSBhIGhpZ2hlciB2YWx1ZSAodGhlcmVmb3JlIG9mCitsb3dlciBwcmlvcml0eSkgdGhhbiBgYFBMQVRfU0RFSV9DUklUSUNBTF9QUklgYC4KKworTWFjcm86IFBMQVRfU0RFSV9DUklUSUNBTF9QUkkgW21hbmRhdG9yeV0KK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoaXMgbWFjcm8gbXVzdCBiZSBkZWZpbmVkIHRvIHRoZSBFTDMgZXhjZXB0aW9uIHByaW9yaXR5IGxldmVsIGFzc29jaWF0ZWQgd2l0aAorQ3JpdGljYWwgU0RFSSBldmVudHMgb24gdGhlIHBsYXRmb3JtLiBUaGlzIG11c3QgaGF2ZSBhIGxvd2VyIHZhbHVlICh0aGVyZWZvcmUgb2YKK2hpZ2hlciBwcmlvcml0eSkgdGhhbiBgYFBMQVRfU0RFSV9OT1JNQUxfUFJJYGAuCisKK0l0J3MgcmVjb21tZW5kZWQgdGhhdCBTREVJIGV4Y2VwdGlvbiBwcmlvcml0aWVzIGluIGdlbmVyYWwgYXJlIGFzc2lnbmVkIHRoZQorbG93ZXN0IGFtb25nIFNlY3VyZSBwcmlvcml0aWVzLiBBbW9uZyB0aGUgU0RFSSBleGNlcHRpb25zLCBDcml0aWNhbCBTREVJCitwcmlvcml0eSBtdXN0IGJlIGhpZ2hlciB0aGFuIE5vcm1hbCBTREVJIHByaW9yaXR5LgorCitGdW5jdGlvbnMKKy4uLi4uLi4uLgorCitGdW5jdGlvbjogaW50IHBsYXRfc2RlaV92YWxpZGF0ZV9lbnRyeV9wb2ludCh1aW50cHRyX3QgZXApIFtvcHRpb25hbF0KK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCis6OgorCisgIEFyZ3VtZW50OiB1aW50cHRyX3QKKyAgUmV0dXJuOiBpbnQKKworVGhpcyBmdW5jdGlvbiB2YWxpZGF0ZXMgdGhlIGFkZHJlc3Mgb2YgY2xpZW50IGVudHJ5IHBvaW50cyBwcm92aWRlZCBmb3IgYm90aAorZXZlbnQgcmVnaXN0cmF0aW9uIGFuZCAqQ29tcGxldGUgYW5kIFJlc3VtZSogU0RFSSBjYWxscy4gVGhlIGZ1bmN0aW9uIHRha2VzIG9uZQorYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyIHRoZSBTREVJIGNsaWVudCByZXF1ZXN0ZWQgdG8KK3JlZ2lzdGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYGAwYGAgZm9yIHN1Y2Nlc3NmdWwgdmFsaWRhdGlvbiwgb3IgYGAtMWBgCit1cG9uIGZhaWx1cmUuCisKK1RoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFsd2F5cyByZXR1cm5zIGBgMGBgLiBPbiBBUk0gcGxhdGZvcm1zLCB0aGlzIGZ1bmN0aW9uCitpcyBpbXBsZW1lbnRlZCB0byB0cmFuc2xhdGUgdGhlIGVudHJ5IHBvaW50IHRvIHBoeXNpY2FsIGFkZHJlc3MsIGFuZCBmdXJ0aGVyIHRvCitlbnN1cmUgdGhhdCB0aGUgYWRkcmVzcyBpcyBsb2NhdGVkIGluIE5vbi1zZWN1cmUgRFJBTS4KKworRnVuY3Rpb246IHZvaWQgcGxhdF9zZGVpX2hhbmRsZV9tYXNrZWRfdHJpZ2dlcih1aW50NjRfdCBtcGlkciwgdW5zaWduZWQgaW50IGludHIpIFtvcHRpb25hbF0KK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKzo6CisKKyAgQXJndW1lbnQ6IHVpbnQ2NF90CisgIEFyZ3VtZW50OiB1bnNpZ25lZCBpbnQKKyAgUmV0dXJuOiB2b2lkCisKK1NERUkgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGF0IGEgUEUgY29tZXMgb3V0IG9mIHJlc2V0IHdpdGggdGhlIGV2ZW50cyBtYXNrZWQuCitUaGUgY2xpZW50IHRoZXJlZm9yZSBpcyBleHBlY3RlZCB0byBjYWxsIGBgUEVfVU5NQVNLYGAgdG8gdW5tYXNrIFNERUkgZXZlbnRzIG9uCit0aGUgUEUuIE5vIFNERUkgZXZlbnRzIGNhbiBiZSBkaXNwYXRjaGVkIHVudGlsIHN1Y2ggdGltZS4KKworU2hvdWxkIGEgUEUgcmVjZWl2ZSBhbiBpbnRlcnJ1cHQgdGhhdCB3YXMgYm91bmQgdG8gYW4gU0RFSSBldmVudCB3aGlsZSB0aGUKK2V2ZW50cyBhcmUgbWFza2VkIG9uIHRoZSBQRSwgdGhlIGRpc3BhdGNoZXIgaW1wbGVtZW50YXRpb24gaW52b2tlcyB0aGUgZnVuY3Rpb24KK2BgcGxhdF9zZGVpX2hhbmRsZV9tYXNrZWRfdHJpZ2dlcmBgLiBUaGUgTVBJRFIgb2YgdGhlIFBFIHRoYXQgcmVjZWl2ZWQgdGhlCitpbnRlcnJ1cHQgYW5kIHRoZSBpbnRlcnJ1cHQgSUQgYXJlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLgorCitUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvbmx5IHByaW50cyBvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuCisKIFBvd2VyIFN0YXRlIENvb3JkaW5hdGlvbiBJbnRlcmZhY2UgKGluIEJMMzEpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yMTA3LDEzICsyMjAzLDMyIEBACiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2NhbCBzdGF0ZSBhdCBlYWNoIHBvd2VyIGxldmVsLiBUaGUgZ2VuZXJpYyBjb2RlCiBleHBlY3RzIHRoZSBoYW5kbGVyIHRvIHN1Y2NlZWQuCiAKLVRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHVybmluZyBhIHBvd2VyIGRvbWFpbiBvZmYgdmVyc3VzIHN1c3BlbmRpbmcgaXQKLWlzIHRoYXQgaW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgcG93ZXIgZG9tYWluIGlzIGV4cGVjdGVkIHRvIHJlLWluaXRpYWxpemUKLWl0cyBzdGF0ZSB3aGVuIGl0IGlzIG5leHQgcG93ZXJlZCBvbiAoc2VlIGBgcHdyX2RvbWFpbl9vbl9maW5pc2goKWBgKS4gSW4gdGhlCi1sYXR0ZXIgY2FzZSwgdGhlIHBvd2VyIGRvbWFpbiBpcyBleHBlY3RlZCB0byBzYXZlIGVub3VnaCBzdGF0ZSBzbyB0aGF0IGl0IGNhbgotcmVzdW1lIGV4ZWN1dGlvbiBieSByZXN0b3JpbmcgdGhpcyBzdGF0ZSB3aGVuIGl0cyBwb3dlcmVkIG9uIChzZWUKK1RoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHVybmluZyBhIHBvd2VyIGRvbWFpbiBvZmYgdmVyc3VzIHN1c3BlbmRpbmcgaXQgaXMgdGhhdAoraW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgcG93ZXIgZG9tYWluIGlzIGV4cGVjdGVkIHRvIHJlLWluaXRpYWxpemUgaXRzIHN0YXRlCit3aGVuIGl0IGlzIG5leHQgcG93ZXJlZCBvbiAoc2VlIGBgcHdyX2RvbWFpbl9vbl9maW5pc2goKWBgKS4gSW4gdGhlIGxhdHRlcgorY2FzZSwgdGhlIHBvd2VyIGRvbWFpbiBpcyBleHBlY3RlZCB0byBzYXZlIGVub3VnaCBzdGF0ZSBzbyB0aGF0IGl0IGNhbiByZXN1bWUKK2V4ZWN1dGlvbiBieSByZXN0b3JpbmcgdGhpcyBzdGF0ZSB3aGVuIGl0cyBwb3dlcmVkIG9uIChzZWUKIGBgcHdyX2RvbWFpbl9zdXNwZW5kX2ZpbmlzaCgpYGApLgogCitXaGVuIHN1c3BlbmRpbmcgYSBjb3JlLCB0aGUgcGxhdGZvcm0gY2FuIGFsc28gY2hvb3NlIHRvIHBvd2VyIG9mZiB0aGUgR0lDdjMKK1JlZGlzdHJpYnV0b3IgYW5kIElUUyB0aHJvdWdoIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgc2VxdWVuY2UuIFRvIGFjaGlldmUKK3RoaXMgc2FmZWx5LCB0aGUgSVRTIGNvbnRleHQgbXVzdCBiZSBzYXZlZCBmaXJzdC4gVGhlIGFyY2hpdGVjdHVyYWwgcGFydCBpcworaW1wbGVtZW50ZWQgYnkgdGhlIGBgZ2ljdjNfaXRzX3NhdmVfZGlzYWJsZSgpYGAgaGVscGVyLCBidXQgbW9zdCBvZiB0aGUgbmVlZGVkCitzZXF1ZW5jZSBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGFuZCBpdCBpcyB0aGVyZWZvcmUgdGhlIHJlc3BvbnNpYmlsaXR5IG9mCit0aGUgcGxhdGZvcm0gY29kZSB0byBpbXBsZW1lbnQgdGhlIG5lY2Vzc2FyeSBzZXF1ZW5jZS4gVGhlbiB0aGUgR0lDCitSZWRpc3RyaWJ1dG9yIGNvbnRleHQgY2FuIGJlIHNhdmVkIHVzaW5nIHRoZSBgYGdpY3YzX3JkaXN0aWZfc2F2ZSgpYGAgaGVscGVyLgorUG93ZXJpbmcgb2ZmIHRoZSBSZWRpc3RyaWJ1dG9yIHJlcXVpcmVzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBzdXBwb3J0IGl0IGFuZCBpdAoraXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwbGF0Zm9ybSBjb2RlIHRvIGV4ZWN1dGUgdGhlIHJpZ2h0IGltcGxlbWVudGF0aW9uCitkZWZpbmVkIHNlcXVlbmNlLgorCitXaGVuIGEgc3lzdGVtIHN1c3BlbmQgaXMgcmVxdWVzdGVkLCB0aGUgcGxhdGZvcm0gY2FuIGFsc28gbWFrZSB1c2Ugb2YgdGhlCitgYGdpY3YzX2Rpc3RpZl9zYXZlKClgYCBoZWxwZXIgdG8gc2F2ZSB0aGUgY29udGV4dCBvZiB0aGUgR0lDIERpc3RyaWJ1dG9yIGFmdGVyCitpdCBoYXMgc2F2ZWQgdGhlIGNvbnRleHQgb2YgdGhlIFJlZGlzdHJpYnV0b3JzIGFuZCBJVFMgb2YgYWxsIHRoZSBjb3JlcyBpbiB0aGUKK3N5c3RlbS4gVGhlIGNvbnRleHQgb2YgdGhlIERpc3RyaWJ1dG9yIGNhbiBiZSBsYXJnZSBhbmQgbWF5IHJlcXVpcmUgaXQgdG8gYmUKK2FsbG9jYXRlZCBpbiBhIHNwZWNpYWwgYXJlYSBpZiBpdCBjYW5ub3QgZml0IGluIHRoZSBwbGF0Zm9ybSdzIGdsb2JhbCBzdGF0aWMKK2RhdGEsIGZvciBleGFtcGxlIGluIERSQU0uIFRoZSBEaXN0cmlidXRvciBjYW4gdGhlbiBiZSBwb3dlcmVkIGRvd24gdXNpbmcgYW4KK2ltcGxlbWVudGF0aW9uLWRlZmluZWQgc2VxdWVuY2UuCisKIHBsYXRcX3BzY2lcX29wcy5wd3JcX2RvbWFpblxfcHdyXF9kb3duXF93ZmkoKQogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKQEAgLTIxNTksNiArMjI3NCwxMCBAQAogdGhlIGBgcHdyX2RvbWFpbl9vbl9maW5pc2goKWBgIG9wZXJhdGlvbi4gVGhlIGdlbmVyaWMgY29kZSBleHBlY3RzIHRoZSBwbGF0Zm9ybQogdG8gc3VjY2VlZC4KIAorSWYgdGhlIERpc3RyaWJ1dG9yLCBSZWRpc3RyaWJ1dG9ycyBvciBJVFMgaGF2ZSBiZWVuIHBvd2VyZWQgb2ZmIGFzIHBhcnQgb2YgYQorc3VzcGVuZCwgdGhlaXIgY29udGV4dCBtdXN0IGJlIHJlc3RvcmVkIGluIHRoaXMgZnVuY3Rpb24gaW4gdGhlIHJldmVyc2Ugb3JkZXIKK3RvIGhvdyB0aGV5IHdlcmUgc2F2ZWQgZHVyaW5nIHN1c3BlbmQgc2VxdWVuY2UuCisKIHBsYXRcX3BzY2lcX29wcy5zeXN0ZW1cX29mZigpCiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCkBAIC0yMjQ4LDYgKzIzNjcsNDQgQEAKIEltcGxlbWVudGF0aW9ucyBhcmUgbm90IGV4cGVjdGVkIHRvIGhhbmRsZSBgYHBvd2VyX2xldmVsc2BgIGdyZWF0ZXIgdGhhbgogYGBQTEFUX01BWF9QV1JfTFZMYGAuCiAKK3BsYXRcX3BzY2lcX29wcy5zeXN0ZW1cX3Jlc2V0MigpCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitUaGlzIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uLiBJZiBpbXBsZW1lbnRlZCB0aGlzIGZ1bmN0aW9uIGlzCitjYWxsZWQgZHVyaW5nIHRoZSBgYFNZU1RFTV9SRVNFVDJgYCBjYWxsIHRvIHBlcmZvcm0gYSByZXNldAorYmFzZWQgb24gdGhlIGZpcnN0IHBhcmFtZXRlciBgYHJlc2V0X3R5cGVgYCBhcyBzcGVjaWZpZWQgaW4KK2BQU0NJYF8uIFRoZSBwYXJhbWV0ZXIgYGBjb29raWVgYCBjYW4gYmUgdXNlZCB0byBwYXNzIGFkZGl0aW9uYWwKK3Jlc2V0IGluZm9ybWF0aW9uLiBJZiB0aGUgYGByZXNldF90eXBlYGAgaXMgbm90IHN1cHBvcnRlZCwgdGhlCitmdW5jdGlvbiBtdXN0IHJldHVybiBgYFBTQ0lfRV9OT1RfU1VQUE9SVEVEYGAuIEZvciBhcmNoaXRlY3R1cmFsCityZXNldHMsIGFsbCBmYWlsdXJlcyBtdXN0IHJldHVybiBgYFBTQ0lfRV9JTlZBTElEX1BBUkFNRVRFUlNgYAorYW5kIHZlbmRvciByZXNldCBjYW4gcmV0dXJuIG90aGVyIFBTQ0kgZXJyb3IgY29kZXMgYXMgZGVmaW5lZAoraW4gYFBTQ0lgXy4gT24gc3VjY2VzcyB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IHJldHVybi4KKworcGxhdFxfcHNjaVxfb3BzLndyaXRlXF9tZW1cX3Byb3RlY3QoKQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1RoaXMgaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24uIElmIGltcGxlbWVudGVkIGl0IGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlCitgYE1FTV9QUk9URUNUYGAgZnVuY3Rpb25hbGl0eSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYGB2YWxgYC4KK0Egbm9uLXplcm8gdmFsdWUgZW5hYmxlcyBgYE1FTV9QUk9URUNUYGAgYW5kIGEgdmFsdWUgb2YgemVybworZGlzYWJsZXMgaXQuIFVwb24gZW5jb3VudGVyaW5nIGZhaWx1cmVzIGl0IG11c3QgcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUKK2FuZCBvbiBzdWNjZXNzIGl0IG11c3QgcmV0dXJuIDAuCisKK3BsYXRcX3BzY2lcX29wcy5yZWFkXF9tZW1cX3Byb3RlY3QoKQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitUaGlzIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uLiBJZiBpbXBsZW1lbnRlZCBpdCByZXR1cm5zIHRoZSBjdXJyZW50CitzdGF0ZSBvZiBgYE1FTV9QUk9URUNUYGAgdmlhIHRoZSBgYHZhbGBgIHBhcmFtZXRlci4gIFVwb24gZW5jb3VudGVyaW5nCitmYWlsdXJlcyBpdCBtdXN0IHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIGFuZCBvbiBzdWNjZXNzIGl0IG11c3QKK3JldHVybiAwLgorCitwbGF0XF9wc2NpXF9vcHMubWVtXF9wcm90ZWN0XF9jaGsoKQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVGhpcyBpcyBhbiBvcHRpb25hbCBmdW5jdGlvbi4gSWYgaW1wbGVtZW50ZWQgaXQgY2hlY2tzIGlmIGEgbWVtb3J5CityZWdpb24gZGVmaW5lZCBieSBhIGJhc2UgYWRkcmVzcyBgYGJhc2VgYCBhbmQgd2l0aCBhIHNpemUgb2YgYGBsZW5ndGhgYAorYnl0ZXMgaXMgcHJvdGVjdGVkIGJ5IGBgTUVNX1BST1RFQ1RgYC4gIElmIHRoZSByZWdpb24gaXMgcHJvdGVjdGVkCit0aGVuIGl0IG11c3QgcmV0dXJuIDAsIG90aGVyd2lzZSBpdCBtdXN0IHJldHVybiBhIG5lZ2F0aXZlIG51bWJlci4KKwogSW50ZXJydXB0IE1hbmFnZW1lbnQgZnJhbWV3b3JrIChpbiBCTDMxKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yMjY2LDYgKzI0MjMsMTAgQEAKIEdJQ3YzIGRlcGVuZGluZyBvbiB0aGUgYnVpbGQgZmxhZyBgYEZWUF9VU0VfR0lDX0RSSVZFUmBgIChTZWUgRlZQIHBsYXRmb3JtCiBzcGVjaWZpYyBidWlsZCBvcHRpb25zIGluIGBVc2VyIEd1aWRlYF8gZm9yIG1vcmUgZGV0YWlscykuCiAKK1NlZSBhbHNvOiBgSW50ZXJydXB0IENvbnRyb2xsZXIgQWJzdHJhY3Rpb24gQVBJc2BfXy4KKworLi4gX186IHBsYXRmb3JtLWludGVycnVwdC1jb250cm9sbGVyLUFQSS5yc3QKKwogRnVuY3Rpb24gOiBwbGF0XF9pbnRlcnJ1cHRcX3R5cGVcX3RvXF9saW5lKCkgW21hbmRhdG9yeV0KIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTIzODYsMTQgKzI1NDcsMTcgQEAKICAgICBSZXR1cm4gICA6IHVpbnQzMl90CiAKIFRoaXMgQVBJIGlzIHVzZWQgYnkgdGhlIENQVSB0byBpbmRpY2F0ZSB0byB0aGUgcGxhdGZvcm0gSUMgdGhhdCBwcm9jZXNzaW5nIG9mCi10aGUgaGlnaGVzdCBwZW5kaW5nIGludGVycnVwdCBoYXMgYmVndW4uIEl0IHNob3VsZCByZXR1cm4gdGhlIGlkIG9mIHRoZQotaW50ZXJydXB0IHdoaWNoIGlzIGJlaW5nIHByb2Nlc3NlZC4KK3RoZSBoaWdoZXN0IHBlbmRpbmcgaW50ZXJydXB0IGhhcyBiZWd1bi4gSXQgc2hvdWxkIHJldHVybiB0aGUgcmF3LCB1bm1vZGlmaWVkCit2YWx1ZSBvYnRhaW5lZCBmcm9tIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB3aGVuIGFja25vd2xlZGdpbmcgYW4gaW50ZXJydXB0LgorVGhlIGFjdHVhbCBpbnRlcnJ1cHQgbnVtYmVyIHNoYWxsIGJlIGV4dHJhY3RlZCBmcm9tIHRoaXMgcmF3IHZhbHVlIHVzaW5nIHRoZSBBUEkKK2BwbGF0X2ljX2dldF9pbnRlcnJ1cHRfaWQoKWBfXy4KKworLi4gX186IHBsYXRmb3JtLWludGVycnVwdC1jb250cm9sbGVyLUFQSS5yc3QjZnVuY3Rpb24tdW5zaWduZWQtaW50LXBsYXQtaWMtZ2V0LWludGVycnVwdC1pZC11bnNpZ25lZC1pbnQtcmF3LW9wdGlvbmFsCiAKIFRoaXMgZnVuY3Rpb24gaW4gQVJNIHN0YW5kYXJkIHBsYXRmb3JtcyB1c2luZyBHSUN2MiwgcmVhZHMgdGhlICpJbnRlcnJ1cHQKIEFja25vd2xlZGdlIFJlZ2lzdGVyKiAoYGBHSUNDX0lBUmBgKS4gVGhpcyBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGUgaGlnaGVzdAogcHJpb3JpdHkgcGVuZGluZyBpbnRlcnJ1cHQgZnJvbSBwZW5kaW5nIHRvIGFjdGl2ZSBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuCi1JdCByZXR1cm5zIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIGBgR0lDQ19JQVJgYC4gVGhpcyB2YWx1ZSBpcyB0aGUgaWQgb2YgdGhlCi1pbnRlcnJ1cHQgd2hvc2Ugc3RhdGUgaGFzIGJlZW4gY2hhbmdlZC4KK0l0IHJldHVybnMgdGhlIHZhbHVlIHJlYWQgZnJvbSB0aGUgYGBHSUNDX0lBUmBgLCB1bm1vZGlmaWVkLgogCiBJbiB0aGUgY2FzZSBvZiBBUk0gc3RhbmRhcmQgcGxhdGZvcm1zIHVzaW5nIEdJQ3YzLCBpZiB0aGUgQVBJIGlzIGludm9rZWQKIGZyb20gRUwzLCB0aGUgZnVuY3Rpb24gcmVhZHMgdGhlIHN5c3RlbSByZWdpc3RlciBgYElDQ19JQVIwX0VMMWBgLCAqSW50ZXJydXB0CkBAIC0yNDAxLDcgKzI1NjUsNyBAQAogcmVhZHMgdGhlIHN5c3RlbSByZWdpc3RlciBgYElDQ19JQVIxX0VMMWBgLCAqSW50ZXJydXB0IEFja25vd2xlZGdlIFJlZ2lzdGVyCiBncm91cCAxKi4gVGhlIHJlYWQgY2hhbmdlcyB0aGUgc3RhdGUgb2YgdGhlIGhpZ2hlc3QgcGVuZGluZyBpbnRlcnJ1cHQgZnJvbQogcGVuZGluZyB0byBhY3RpdmUgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyLiBUaGUgdmFsdWUgcmVhZCBpcyByZXR1cm5lZAotYW5kIGlzIHRoZSBpZCBvZiB0aGUgaW50ZXJydXB0IHdob3NlIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQuCit1bm1vZGlmaWVkLgogCiBUaGUgVFNQIHVzZXMgdGhpcyBBUEkgdG8gc3RhcnQgcHJvY2Vzc2luZyBvZiB0aGUgc2VjdXJlIHBoeXNpY2FsIHRpbWVyCiBpbnRlcnJ1cHQuCkBAIC0yNjEzLDcgKzI3NzcsNyBAQAogCiAtLS0tLS0tLS0tLS0tLQogCi0qQ29weXJpZ2h0IChjKSAyMDEzLTIwMTYsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuKgorKkNvcHlyaWdodCAoYykgMjAxMy0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLioKIAogLi4gX01pZ3JhdGlvbiBHdWlkZTogcGxhdGZvcm0tbWlncmF0aW9uLWd1aWRlLnJzdAogLi4gX2luY2x1ZGUvcGxhdC9jb21tb24vcGxhdGZvcm0uaDogLi4vaW5jbHVkZS9wbGF0L2NvbW1vbi9wbGF0Zm9ybS5oCmRpZmYgLS1naXQgYS9kb2NzL3NkZWkucnN0IGIvZG9jcy9zZGVpLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjdiNzI0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9zZGVpLnJzdApAQCAtMCwwICsxLDM3MCBAQAorU29mdHdhcmUgRGVsZWdhdGVkIEV4Y2VwdGlvbiBJbnRlcmZhY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworLi4gc2VjdGlvbi1udW1iZXJpbmc6OgorICAgIDpzdWZmaXg6IC4KKworLi4gY29udGVudHM6OgorICAgIDpkZXB0aDogMgorCitUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSBTREVJIGRpc3BhdGNoZXIgaW1wbGVtZW50YXRpb24gaW4gQVJNCitUcnVzdGVkIEZpcm13YXJlLgorCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCitgU29mdHdhcmUgRGVsZWdhdGVkIEV4Y2VwdGlvbiBJbnRlcmZhY2VgXyAoU0RFSSkgaXMgYW4gQVJNIHNwZWNpZmljYXRpb24gZm9yCitOb24tc2VjdXJlIHdvcmxkIHRvIHJlZ2lzdGVyIGhhbmRsZXJzIHdpdGggZmlybXdhcmUgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCithYm91dCBzeXN0ZW0gZXZlbnRzLiBGaXJtd2FyZSB3aWxsIGZpcnN0IHJlY2VpdmUgdGhlIHN5c3RlbSBldmVudHMgYnkgd2F5IG9mCithc3luY2hyb25vdXMgZXhjZXB0aW9ucyBhbmQsIGluIHJlc3BvbnNlLCBhcnJhbmdlcyBmb3IgdGhlIHJlZ2lzdGVyZWQgaGFuZGxlciB0bworZXhlY3V0ZSBpbiB0aGUgTm9uLXNlY3VyZSBFTC4KKworTm9ybWFsIHdvcmxkIHNvZnR3YXJlIHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIFNERUkgZGlzcGF0Y2hlciAobWFrZXMgU0RFSQorcmVxdWVzdHMgYW5kIHJlY2VpdmVzIG5vdGlmaWNhdGlvbnMpIGlzIHJlZmVycmVkIHRvIGFzIHRoZSAqU0RFSSBDbGllbnQqLiBBCitjbGllbnQgcmVjZWl2ZXMgdGhlIGV2ZW50IG5vdGlmaWNhdGlvbiBhdCB0aGUgcmVnaXN0ZXJlZCBoYW5kbGVyIGV2ZW4gd2hlbiBpdAord2FzIGV4ZWN1dGluZyB3aXRoIGV4Y2VwdGlvbnMgbWFza2VkLiBUaGUgbGlzdCBvZiBTREVJIGV2ZW50cyBhdmFpbGFibGUgdG8gdGhlCitjbGllbnQgYXJlIHNwZWNpZmljIHRvIHRoZSBwbGF0Zm9ybSBbI3N0ZC1ldmVudF1fLiBTZWUgYWxzbyBgRGV0ZXJtaW5pbmcgY2xpZW50CitFTGBfLgorCisuLiBfZ2VuZXJhbCBTREVJIGRpc3BhdGNoOgorCitUaGUgZm9sbG93aW5nIGZpZ3VyZSBkZXBpY3RzIGEgZ2VuZXJhbCBzZXF1ZW5jZSBpbnZvbHZpbmcgU0RFSSBjbGllbnQgZXhlY3V0aW5nCithdCBFTDIgYW5kIGFuIGV2ZW50IGRpc3BhdGNoIHJlc3VsdGluZyBmcm9tIHRoZSB0cmlnZ2VyaW5nIG9mIGEgYm91bmQgaW50ZXJydXB0LgorQSBjb21tZW50YXJ5IGlzIHByb3ZpZGVkIGJlbG93OgorCisuLiBpbWFnZTo6IHBsYW50dW1sL3NkZWlfZ2VuZXJhbC5zdmcKKworQXMgcGFydCBvZiBpbml0aWFsaXNhdGlvbiwgdGhlIFNERUkgY2xpZW50IGJpbmRzIGEgTm9uLXNlY3VyZSBpbnRlcnJ1cHQgWzFdLCBhbmQKK3RoZSBTREVJIGRpc3BhdGNoZXIgcmV0dXJucyBhIHBsYXRmb3JtIGR5bmFtaWMgZXZlbnQgbnVtYmVyIFsyXS4gVGhlIGNsaWVudCB0aGVuCityZWdpc3RlcnMgYSBoYW5kbGVyIGZvciB0aGF0IGV2ZW50IFszXSwgZW5hYmxlcyB0aGUgZXZlbnQgWzVdLCBhbmQgdW5tYXNrcyBhbGwKK2V2ZW50cyBvbiB0aGUgY3VycmVudCBQRSBbN10uIFRoaXMgc2VxdWVuY2UgaXMgdHlwaWNhbCBvZiBhbiBTREVJIGNsaWVudCwgYnV0IGl0CittYXkgaW52b2x2ZSBhZGRpdGlvbmFsIFNERUkgY2FsbHMuCisKK0F0IGEgbGF0ZXIgcG9pbnQgaW4gdGltZSwgd2hlbiB0aGUgYm91bmQgaW50ZXJydXB0IHRyaWdnZXJzIFs5XSwgaXQncyB0cmFwcGVkIHRvCitFTDMuIFRoZSBpbnRlcnJ1cHQgaXMgaGFuZGVkIG92ZXIgdG8gdGhlIFNERUkgZGlzcGF0Y2hlciwgd2hpY2ggdGhlbiBhcnJhbmdlcyB0bworZXhlY3V0ZSB0aGUgcmVnaXN0ZXJlZCBoYW5kbGVyIFsxMF0uIFRoZSBjbGllbnQgdGVybWluYXRlcyBpdHMgZXhlY3V0aW9uIHdpdGgKK2BgU0RFSV9FVkVOVF9DT01QTEVURWBgIFsxMV0sIGZvbGxvd2luZyB3aGljaCB0aGUgZGlzcGF0Y2hlciByZXN1bWVzIHRoZQorb3JpZ2luYWwgRUwyIGV4ZWN1dGlvbiBbMTNdLiBOb3RlIHRoYXQgdGhlIFNERUkgaW50ZXJydXB0IHJlbWFpbnMgYWN0aXZlIHVudGlsCit0aGUgY2xpZW50IGhhbmRsZXIgY29tcGxldGVzLCBhdCB3aGljaCBwb2ludCBFTDMgZG9lcyBFT0kgWzEyXS4KKworU0RFSSBldmVudHMgY2FuIGJlIGV4cGxpY2l0bHkgZGlzcGF0Y2hlZCBpbiByZXNwb25zZSB0byBvdGhlciBhc3luY2hyb25vdXMKK2V4Y2VwdGlvbnMuIFNlZSBgRXhwbGljaXQgZGlzcGF0Y2ggb2YgZXZlbnRzYF8uCisKK1RoZSByZW1haW5kZXIgb2YgdGhpcyBkb2N1bWVudCBvbmx5IGRpc2N1c3NlcyB0aGUgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZgorU0RFSSBkaXNwYXRjaGVyIGluIEFSTSBUcnVzdGVkIEZpcm13YXJlLCBhbmQgYXNzdW1lcyB0aGF0IHRoZSByZWFkZXIgaXMgZmFtaWxpYXIKK3dpdGggdGhlIFNERUkgc3BlY2lmaWNhdGlvbiwgdGhlIGludGVyZmFjZXMsIGFuZCB0aGVpciByZXF1aXJlbWVudHMuCisKKy4uIFsjc3RkLWV2ZW50XSBFeGNlcHQgZXZlbnQgMCwgd2hpY2ggaXMgZGVmaW5lZCBieSB0aGUgU0RFSSBzcGVjaWZpY2F0aW9uIGFzIGEKKyAgICAgICAgICAgICAgICBzdGFuZGFyZCBldmVudC4KKworRGVmaW5pbmcgZXZlbnRzCistLS0tLS0tLS0tLS0tLS0KKworQSBwbGF0Zm9ybSBjaG9vc2luZyB0byBpbmNsdWRlIHRoZSBTREVJIGRpc3BhdGNoZXIgbXVzdCBhbHNvIGRlZmluZSB0aGUgZXZlbnRzCithdmFpbGFibGUgb24gdGhlIHBsYXRmb3JtLCBhbG9uZyB3aXRoIHRoZWlyIGF0dHJpYnV0ZXMuCisKK1RoZSBwbGF0Zm9ybSBpcyBleHBlY3RlZCB0byBwcm92aWRlIHR3byBhcnJheXMgb2YgZXZlbnQgZGVzY3JpcHRvcnM6IG9uZSBmb3IKK3ByaXZhdGUgZXZlbnRzLCBhbmQgYW5vdGhlciBmb3Igc2hhcmVkIGV2ZW50cy4gVGhlIFNERUkgZGlzcGF0Y2hlciBwcm92aWRlcworYGBTREVJX1BSSVZBVEVfRVZFTlQoKWBgIGFuZCBgYFNERUlfU0hBUkVEX0VWRU5UKClgYCBtYWNyb3MgdG8gcG9wdWxhdGUgdGhlCitldmVudCBkZXNjcmlwdG9ycy4gQm90aCBtYWNyb3MgdGFrZSAzIGFyZ3VtZW50czoKKworLSAgVGhlIGV2ZW50IG51bWJlcjogdGhpcyBtdXN0IGJlIGEgcG9zaXRpdmUgMzItYml0IGludGVnZXIuCisKKy0gIFRoZSBpbnRlcnJ1cHQgbnVtYmVyIHRoZSBldmVudCBpcyBib3VuZCB0bzoKKworICAgLSBJZiBpdCdzIG5vdCBhcHBsaWNhYmxlIHRvIGFuIGV2ZW50LCB0aGlzIHNoYWxsIGJlIGxlZnQgYXMgYGAwYGAuCisKKyAgIC0gSWYgdGhlIGV2ZW50IGlzIGR5bmFtaWMsIHRoaXMgc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBgYFNERUlfRFlOX0lSUWBgLgorCistICBBIGJpdCBtYXAgb2YgYEV2ZW50IGZsYWdzYF8uCisKK1RvIGRlZmluZSBldmVudCAwLCB0aGUgbWFjcm8gYGBTREVJX0RFRklORV9FVkVOVF8wKClgYCBzaG91bGQgYmUgdXNlZC4gVGhpcworbWFjcm8gdGFrZXMgb25seSBvbmUgcGFyYW1ldGVyOiBhbiBTR0kgbnVtYmVyIHRvIHNpZ25hbCBvdGhlciBQRXMuCisKK09uY2UgdGhlIGV2ZW50IGRlc2NyaXB0b3IgYXJyYXlzIGFyZSBkZWZpbmVkLCB0aGV5IHNob3VsZCBiZSBleHBvcnRlZCB0byB0aGUKK1NERUkgZGlzcGF0Y2hlciB1c2luZyB0aGUgYGBSRUdJU1RFUl9TREVJX01BUCgpYGAgbWFjcm8sIHBhc3NpbmcgaXQgdGhlIHBvaW50ZXJzCit0byB0aGUgcHJpdmF0ZSBhbmQgc2hhcmVkIGV2ZW50IGRlc2NyaXB0b3IgYXJyYXlzLCByZXNwZWN0aXZlbHkuIE5vdGUgdGhhdCB0aGUKK2BgUkVHSVNURVJfU0RFSV9NQVAoKWBgIG1hY3JvIG11c3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBmaWxlIHdoZXJlIHRoZSBhcnJheXMgYXJlCitkZWZpbmVkLgorCitSZWdhcmRpbmcgZXZlbnQgZGVzY3JpcHRvcnM6CisKKy0gIEZvciBFdmVudCAwOgorCisgICAtIFRoZXJlIG11c3QgYmUgZXhhY3RseSBvbmUgZGVzY3JpcHRvciBpbiB0aGUgcHJpdmF0ZSBhcnJheSwgYW5kIG5vbmUgaW4gdGhlCisgICAgIHNoYXJlZCBhcnJheS4KKworICAgLSBUaGUgZXZlbnQgc2hvdWxkIGJlIGRlZmluZWQgdXNpbmcgYGBTREVJX0RFRklORV9FVkVOVF8wKClgYC4KKworICAgLSBNdXN0IGJlIGJvdW5kIHRvIGEgU2VjdXJlIFNHSSBvbiB0aGUgcGxhdGZvcm0uCisKKy0gIFN0YXRpY2FsbHkgYm91bmQgc2hhcmVkIGFuZCBwcml2YXRlIGludGVycnVwdHMgbXVzdCBiZSBib3VuZCB0byBzaGFyZWQgYW5kCisgICBwcml2YXRlIGludGVycnVwdHMgb24gdGhlIHBsYXRmb3JtLCByZXNwZWN0aXZlbHkuIFNlZSB0aGUgc2VjdGlvbiBvbgorICAgYGludGVycnVwdCBjb25maWd1cmF0aW9uYF9fLgorCisgICAuLiBfXzogYENvbmZpZ3VyYXRpb24gd2l0aGluIEV4Y2VwdGlvbiBIYW5kbGluZyBGcmFtZXdvcmtgXworCistICBCb3RoIGFycmF5cyBzaG91bGQgYmUgb25lLWRpbWVuc2lvbmFsLiBUaGUgYGBSRUdJU1RFUl9TREVJX01BUCgpYGAgbWFjcm8KKyAgIHRha2VzIGNhcmUgb2YgcmVwbGljYXRpbmcgcHJpdmF0ZSBldmVudHMgZm9yIGVhY2ggUEUgb24gdGhlIHBsYXRmb3JtLgorCistICBCb3RoIGFycmF5cyBtdXN0IGJlIHNvcnRlZCBpbiB0aGUgaW5jcmVhc2luZyBvcmRlciBvZiBldmVudCBudW1iZXIuCisKK1RoZSBTREVJIHNwZWNpZmljYXRpb24gZG9lc24ndCBoYXZlIHByb3Zpc2lvbnMgZm9yIGRpc2NvdmVyeSBvZiBhdmFpbGFibGUgZXZlbnRzCitvbiB0aGUgcGxhdGZvcm0uIFRoZSBsaXN0IG9mIGV2ZW50cyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgY2xpZW50LCBhbG9uZyB3aXRoCit0aGVpciBzZW1hbnRpY3MsIGhhdmUgdG8gYmUgY29tbXVuaWNhdGVkIG91dCBvZiBiYW5kOyBmb3IgZXhhbXBsZSwgdGhyb3VnaAorRGV2aWNlIFRyZWVzIG9yIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gdGFibGVzLgorCitTZWUgYWxzbyBgRXZlbnQgZGVmaW5pdGlvbiBleGFtcGxlYF8uCisKK0V2ZW50IGZsYWdzCit+fn5+fn5+fn5+fgorCitFdmVudCBmbGFncyBkZXNjcmliZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgZXZlbnQuIFRoZXkgYXJlIGJpdCBtYXBzIHRoYXQgY2FuIGJlCitgYE9SYGBcIGVkIHRvIGZvcm0gcGFyYW1ldGVycyB0byBtYWNyb3MgdGhhdCBgZGVmaW5lIGV2ZW50c2BfXy4KKworLi4gX186IGBEZWZpbmluZyBldmVudHNgXworCistICBgYFNERUlfTUFQRl9EWU5BTUlDYGA6IE1hcmtzIHRoZSBldmVudCBhcyBkeW5hbWljLiBEeW5hbWljIGV2ZW50cyBjYW4gYmUKKyAgIGJvdW5kIHRvIChvciByZWxlYXNlZCBmcm9tKSBhbnkgTm9uLXNlY3VyZSBpbnRlcnJ1cHQgYXQgcnVudGltZSB2aWEuIHRoZQorICAgYGBTREVJX0lOVEVSUlVQVF9CSU5EYGAgYW5kIGBgU0RFSV9JTlRFUlJVUFRfUkVMRUFTRWBgIGNhbGxzLgorCistICBgYFNERUlfTUFQRl9CT1VORGBgOiBNYXJrcyB0aGUgZXZlbnQgYXMgc3RhdGljYWxseSBib3VuZCB0byBhbiBpbnRlcnJ1cHQuCisgICBUaGVzZSBldmVudHMgY2Fubm90IGJlIHJlLWJvdW5kIGF0IHJ1bnRpbWUuCisKKy0gIGBgU0RFSV9NQVBGX0NSSVRJQ0FMYGA6IE1hcmtzIHRoZSBldmVudCBhcyBoYXZpbmcgKkNyaXRpY2FsKiBwcmlvcml0eS4KKyAgIFdpdGhvdXQgdGhpcyBmbGFnLCB0aGUgZXZlbnQgaXMgYXNzdW1lZCB0byBoYXZlICpOb3JtYWwqIHByaW9yaXR5LgorCitFdmVudCBkZWZpbml0aW9uIGV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBjb2RlOjogYworCisgICBzdGF0aWMgc2RlaV9ldl9tYXBfdCBwbGF0X3ByaXZhdGVfc2RlaVtdID0geworICAgICAgICAvKiBFdmVudCAwIGRlZmluaXRpb24gKi8KKyAgICAgICAgU0RFSV9ERUZJTkVfRVZFTlRfMCg4KSwKKworICAgICAgICAvKiBQUEkgKi8KKyAgICAgICAgU0RFSV9QUklWQVRFX0VWRU5UKDgsIDIzLCBTREVJX01BUEZfQk9VTkQpLAorCisgICAgICAgIC8qIER5bmFtaWMgcHJpdmF0ZSBldmVudHMgKi8KKyAgICAgICAgU0RFSV9QUklWQVRFX0VWRU5UKDEwMCwgU0RFSV9EWU5fSVJRLCBTREVJX01BUEZfRFlOQU1JQyksCisgICAgICAgIFNERUlfUFJJVkFURV9FVkVOVCgxMDEsIFNERUlfRFlOX0lSUSwgU0RFSV9NQVBGX0RZTkFNSUMpCisgICB9OworCisgICAvKiBTaGFyZWQgZXZlbnQgbWFwcGluZ3MgKi8KKyAgIHN0YXRpYyBzZGVpX2V2X21hcF90IHBsYXRfc2hhcmVkX3NkZWlbXSA9IHsKKyAgICAgICAgU0RFSV9TSEFSRURfRVZFTlQoODA0LCAwLCBTREVJX01BUEZfRFlOQU1JQyksCisKKyAgICAgICAgLyogRHluYW1pYyBzaGFyZWQgZXZlbnRzICovCisgICAgICAgIFNERUlfU0hBUkVEX0VWRU5UKDMwMDAsIFNERUlfRFlOX0lSUSwgU0RFSV9NQVBGX0RZTkFNSUMpLAorICAgICAgICBTREVJX1NIQVJFRF9FVkVOVCgzMDAxLCBTREVJX0RZTl9JUlEsIFNERUlfTUFQRl9EWU5BTUlDKQorICAgfTsKKworICAgLyogRXhwb3J0IFNERUkgZXZlbnRzICovCisgICBSRUdJU1RFUl9TREVJX01BUChwbGF0X3ByaXZhdGVfc2RlaSwgcGxhdF9zaGFyZWRfc2RlaSk7CisKK0NvbmZpZ3VyYXRpb24gd2l0aGluIEV4Y2VwdGlvbiBIYW5kbGluZyBGcmFtZXdvcmsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIFNERUkgZGlzcGF0Y2hlciBmdW5jdGlvbnMgYWxvbmdzaWRlIHRoZSBFeGNlcHRpb24gSGFuZGxpbmcgRnJhbWV3b3JrLiBUaGlzCittZWFucyB0aGF0IHRoZSBwbGF0Zm9ybSBtdXN0IGFzc2lnbiBwcmlvcml0aWVzIHRvIGJvdGggTm9ybWFsIGFuZCBDcml0aWNhbCBTREVJCitpbnRlcnJ1cHRzIGZvciB0aGUgcGxhdGZvcm06CisKKy0gIEluc3RhbGwgcHJpb3JpdHkgZGVzY3JpcHRvcnMgZm9yIE5vcm1hbCBhbmQgQ3JpdGljYWwgU0RFSSBpbnRlcnJ1cHRzLgorCistICBGb3IgdGhvc2UgaW50ZXJydXB0cyB0aGF0IGFyZSBzdGF0aWNhbGx5IGJvdW5kIChpLmUuIGV2ZW50cyBkZWZpbmVkIGFzIGhhdmluZworICAgdGhlIGBgU0RFSV9NQVBGX0JPVU5EYGAgcHJvcGVydHkpLCBlbnVtZXJhdGUgdGhlaXIgcHJvcGVydGllcyBmb3IgdGhlIEdJQworICAgZHJpdmVyIHRvIGNvbmZpZ3VyZSBpbnRlcnJ1cHRzIGFjY29yZGluZ2x5LgorCisgICBUaGUgaW50ZXJydXB0cyBtdXN0IGJlIGNvbmZpZ3VyZWQgdG8gdGFyZ2V0IEVMMy4gVGhpcyBtZWFucyB0aGF0IHRoZXkgc2hvdWxkCisgICBiZSBjb25maWd1cmVkIGFzICpHcm91cCAwKi4gIEFkZGl0aW9uYWxseSwgb24gR0lDdjIgc3lzdGVtcywgdGhlIGJ1aWxkIG9wdGlvbgorICAgYGBHSUNWMl9HMF9GT1JfRUwzYGAgbXVzdCBiZSBzZXQgdG8gYGAxYGAuCisKK1NlZSBhbHNvIGBTREVJIHBvcnRpbmcgcmVxdWlyZW1lbnRzYF8uCisKK0RldGVybWluaW5nIGNsaWVudCBFTAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBTREVJIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgdGhhdCB0aGUgKnBoeXNpY2FsKiBTREVJIGNsaWVudCBleGVjdXRlcyBpbiB0aGUKK2hpZ2hlc3QgTm9uLXNlY3VyZSBFTCBpbXBsZW1lbnRlZCBvbiB0aGUgc3lzdGVtLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGRpc3BhdGNoZXIKK3dpbGwgb25seSBhbGxvdyBTREVJIGNhbGxzIHRvIGJlIG1hZGUgZnJvbToKKworLSAgRUwyLCBpZiBFTDIgaXMgaW1wbGVtZW50ZWQuIFRoZSBIeXBlcnZpc29yIGlzIGV4cGVjdGVkIHRvIGltcGxlbWVudCBhCisgICAqdmlydHVhbCogU0RFSSBkaXNwYXRjaGVyIHRvIHN1cHBvcnQgU0RFSSBjbGllbnRzIGluIEd1ZXN0IE9wZXJhdGluZyBTeXN0ZW1zCisgICBleGVjdXRpbmcgaW4gTm9uLXNlY3VyZSBFTDEuCisKKy0gIE5vbi1zZWN1cmUgRUwxLCBpZiBFTDIgaXMgbm90IGltcGxlbWVudGVkIG9yIGRpc2FibGVkLgorCitTZWUgdGhlIGZ1bmN0aW9uIGBgc2RlaV9jbGllbnRfZWwoKWBgIGluIGBgc2RlaV9wcml2YXRlLmhgYC4KKworRXhwbGljaXQgZGlzcGF0Y2ggb2YgZXZlbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVHlwaWNhbGx5LCBhbiBTREVJIGV2ZW50IGRpc3BhdGNoIGlzIGNhdXNlZCBieSB0aGUgUEUgcmVjZWl2aW5nIGludGVycnVwdHMgdGhhdAorYXJlIGJvdW5kIHRvIGFuIFNERUkgZXZlbnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgU2VjdXJlIHdvcmxkCityZXF1aXJlcyBkaXNwYXRjaCBvZiBhbiBTREVJIGV2ZW50IGFzIGEgZGlyZWN0IG9yIGluZGlyZWN0IHJlc3VsdCBvZiBhIHBhc3QKK2FjdGl2aXR5LCB2aXouIHJlY2VpdmluZyBhIFNlY3VyZSBpbnRlcnJ1cHQgb3IgYW4gZXhjZXB0aW9uLgorCitUaGUgU0RFSSBkaXNwYXRjaGVyIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGBgc2RlaV9kaXNwYXRjaF9ldmVudCgpYGAgQVBJIGZvcgordGhpcyBwdXJwb3NlLiBUaGUgQVBJIGhhcyB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZToKKworOjoKKworICAgICAgICBpbnQgc2RlaV9kaXNwYXRjaF9ldmVudChpbnQgZXZfbnVtLCB1bnNpZ25lZCBpbnQgcHJlZW1wdGVkX3NlY19zdGF0ZSk7CisKKy0gIFRoZSBwYXJhbWV0ZXIgYGBldl9udW1gYCBpcyB0aGUgZXZlbnQgbnVtYmVyIHRvIGRpc3BhdGNoOworCistICBUaGUgcGFyYW1ldGVyIGBgcHJlZW1wdGVkX3NlY19zdGF0ZWBgIGluZGljYXRlcyB0aGUgY29udGV4dCB0aGF0IHdhcworICAgcHJlZW1wdGVkLiBUaGlzIG11c3QgYmUgZWl0aGVyIGBgU0VDVVJFYGAgb3IgYGBOT05fU0VDVVJFYGAuCisKK1RoZSBBUEkgcmV0dXJucyBgYDBgYCBvbiBzdWNjZXNzLCBvciBgYC0xYGAgb24gZmFpbHVyZS4KKworVGhlIGZvbGxvd2luZyBmaWd1cmUgZGVwaWN0cyBhIHNjZW5hcmlvIGludm9sdmluZyBleHBsaWNpdCBkaXNwYXRjaCBvZiBTREVJCitldmVudC4gQSBjb21tZW50YXJ5IGlzIHByb3ZpZGVkIGJlbG93OgorCisuLiBpbWFnZTo6IHBsYW50dW1sL3NkZWlfZXhwbGljaXRfZGlzcGF0Y2guc3ZnCisKK0FzIHBhcnQgb2YgaW5pdGlhbGlzYXRpb24sIHRoZSBTREVJIGNsaWVudCByZWdpc3RlcnMgYSBoYW5kbGVyIGZvciBhIHBsYXRmb3JtCitldmVudCBbMV0sIGVuYWJsZXMgdGhlIGV2ZW50IFszXSwgYW5kIHVubWFza3MgdGhlIGN1cnJlbnQgUEUgWzVdLiBOb3RlIHRoYXQsCit1bmxpa2UgaW4gYGdlbmVyYWwgU0RFSSBkaXNwYXRjaGBfLCB0aGlzIGRvZXNuJ3QgaW52b2x2ZSBpbnRlcnJ1cHQgYmluZGluZywgYXMKK2JvdW5kIG9yIGR5bmFtaWMgZXZlbnRzIGNhbid0IGJlIGV4cGxpY2l0bHkgZGlzcGF0Y2hlZCAoc2VlIHRoZSBzZWN0aW9uIGJlbG93KS4KKworQXQgYSBsYXRlciBwb2ludCBpbiB0aW1lLCBhIGNyaXRpY2FsIGV2ZW50IFsjY3JpdGljYWwtZXZlbnRdXyBpcyB0cmFwcGVkIGludG8KK0VMMyBbN10uIEVMMyBwZXJmb3JtcyBhIGZpcnN0LWxldmVsIHRyaWFnZSBvZiB0aGUgZXZlbnQsIGFuZCBkZWNpZGVzIHRvIGRpc3BhdGNoCit0byBhIFNlY3VyZSBQYXJ0aXRpb24gWyNzZWNwYXJ0XV8gZm9yIGZ1cnRoZXIgaGFuZGxpbmcgWzhdLiBUaGUgZGlzcGF0Y2gKK2NvbXBsZXRlcywgYnV0IGludGVuZHMgdG8gaW52b2x2ZSBOb24tc2VjdXJlIHdvcmxkIGluIGZ1cnRoZXIgaGFuZGxpbmcsIGFuZAordGhlcmVmb3JlIGRlY2lkZXMgdG8gZXhwbGljaXRseSBkaXNwYXRjaCBhbiBldmVudCBbMTBdICh3aGljaCB0aGUgY2xpZW50IGhhZAorYWxyZWFkeSByZWdpc3RlcmVkIGZvciBbMV0pLiBUaGUgcmVzdCBvZiB0aGUgc2VxdWVuY2UgaXMgc2ltaWxhciB0byB0aGF0IGluIHRoZQorYGdlbmVyYWwgU0RFSSBkaXNwYXRjaGBfOiB0aGUgcmVxdWVzdGVkIGV2ZW50IGlzIGRpc3BhdGNoZWQgdG8gdGhlIGNsaWVudAorKGFzc3VtaW5nIGFsbCB0aGUgY29uZGl0aW9ucyBhcmUgbWV0KSwgYW5kIHdoZW4gdGhlIGhhbmRsZXIgY29tcGxldGVzLCB0aGUKK3ByZWVtcHRlZCBleGVjdXRpb24gcmVzdW1lcy4KKworLi4gWyNjcml0aWNhbC1ldmVudF0gRXhhbXBsZXMgb2YgY3JpdGljYWwgZXZlbnQgYXJlICpTRXJyb3IqLCAqU3luY2hyb25vdXMKKyAgICAgICAgICAgICAgICAgICAgIEV4dGVybmFsIEFib3J0KiwgKkZhdWx0IEhhbmRsaW5nIGludGVycnVwdCosIG9yICpFcnJvcgorICAgICAgICAgICAgICAgICAgICAgUmVjb3ZlcnkgaW50ZXJydXB0KiBmcm9tIG9uZSBvZiBSQVMgbm9kZXMgaW4gdGhlIHN5c3RlbS4KKworLi4gWyNzZWNwYXJ0XSBEaXNwYXRjaGluZyB0byBTZWN1cmUgUGFydGl0aW9uIGludm9sdmVzICpTZWN1cmUgUGFydGl0aW9uCisgICAgICAgICAgICAgIE1hbmFnZXIqLCB3aGljaCBpc24ndCBkZXBpY3RlZCBpbiB0aGUgc2VxdWVuY2UuCisKK0NvbmRpdGlvbnMgZm9yIGV2ZW50IGRpc3BhdGNoCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBbGwgb2YgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHMgbXVzdCBiZSBtZXQgZm9yIHRoZSBBUEkgdG8gcmV0dXJuIGBgMGBgIGFuZAorZXZlbnQgdG8gYmUgZGlzcGF0Y2hlZDoKKworLSAgU0RFSSBldmVudHMgbXVzdCBiZSB1bm1hc2tlZCBvbiB0aGUgUEUuIEkuZS4gdGhlIGNsaWVudCBtdXN0IGhhdmUgY2FsbGVkCisgICBgYFBFX1VOTUFTS2BgIGJlZm9yZWhhbmQuCisKKy0gIEV2ZW50IDAgY2FuJ3QgYmUgZGlzcGF0Y2hlZC4KKworLSAgVGhlIGV2ZW50IG11c3QgbmVpdGhlciBiZSBhIGR5bmFtaWMgZXZlbnQgbm9yIGJlIGJvdW5kIHRvIGFuIGludGVycnVwdC4KKworLSAgVGhlIGV2ZW50IG11c3QgYmUgcHJpdmF0ZSB0byB0aGUgUEUuCisKKy0gIFRoZSBldmVudCBtdXN0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGZvciBhbmQgZW5hYmxlZC4KKworLSAgQSBkaXNwYXRjaCBmb3IgdGhlIHNhbWUgZXZlbnQgbXVzdCBub3QgYmUgb3V0c3RhbmRpbmcuIEkuZS4gaXQgaGFzbid0IGFscmVhZHkKKyAgIGJlZW4gZGlzcGF0Y2hlZCBhbmQgaXMgeWV0IHRvIGJlIGNvbXBsZXRlZC4KKworLSAgVGhlIHByaW9yaXR5IG9mIHRoZSBldmVudCAoZWl0aGVyIENyaXRpY2FsIG9yIE5vcm1hbCwgYXMgY29uZmlndXJlZCBieSB0aGUKKyAgIHBsYXRmb3JtIGF0IGJ1aWxkLXRpbWUpIHNob3VsZG4ndCBjYXVzZSBwcmlvcml0eSBpbnZlcnNpb24uIFRoaXMgbWVhbnM6CisKKyAgIC0gIElmIGl0J3Mgb2YgTm9ybWFsIHByaW9yaXR5LCBuZWl0aGVyIE5vcm1hbCBub3IgQ3JpdGljYWwgcHJpb3JpdHkgZGlzcGF0Y2gKKyAgICAgIG11c3QgYmUgb3V0c3RhbmRpbmcgb24gdGhlIFBFLgorCisgICAtICBJZiBpdCdzIG9mIGEgQ3JpdGljYWwgcHJpb3JpdHksIG5vIENyaXRpY2FsIHByaW9yaXR5IGRpc3BhdGNoIG11c3QgYmUKKyAgICAgIG91dHN0YW5kaW5nIG9uIHRoZSBQRS4KKworRnVydGhlciwgdGhlIGNhbGxlciBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIGZvbGxvd2luZyBhc3N1bXB0aW9ucyBtYWRlIGJ5IHRoZQorZGlzcGF0Y2hlcjoKKworLSAgVGhlIGNhbGxlciBvZiB0aGUgQVBJIGlzIGEgY29tcG9uZW50IHJ1bm5pbmcgaW4gRUwzOyBmb3IgZXhhbXBsZSwgdGhlICpTZWN1cmUKKyAgIFBhcnRpdGlvbiBNYW5hZ2VyKi4KKworLSAgVGhlIHJlcXVlc3RlZCBkaXNwYXRjaCB3aWxsIGJlIHBlcm1pdHRlZCBieSB0aGUgRXhjZXB0aW9uIEhhbmRsaW5nIEZyYW1ld29yay4KKyAgIEkuZS4gdGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1ZXN0ZWQgZGlzcGF0Y2ggaGFzIHN1ZmZpY2llbnQKKyAgIHByaW9yaXR5IHNvIGFzIG5vdCB0byBjYXVzZSBwcmlvcml0eSBsZXZlbCBpbnZlcnNpb24gd2l0aGluIEV4Y2VwdGlvbgorICAgSGFuZGxpbmcgRnJhbWV3b3JrLgorCistICBBdCB0aGUgdGltZSBvZiB0aGUgY2FsbCwgdGhlIGFjdGl2ZSBjb250ZXh0IGlzIFNlY3VyZSwgYW5kIGl0IGhhcyBiZWVuIHNhdmVkLgorCistICBVcG9uIHJldHVybmluZyBzdWNjZXNzLCB0aGUgTm9uLXNlY3VyZSBjb250ZXh0IHdpbGwgYmUgcmVzdG9yZWQgYW5kIHNldHVwIGZvcgorICAgdGhlIGV2ZW50IGRpc3BhdGNoLCBhbmQgaXQgd2lsbCBiZSB0aGUgYWN0aXZlIGNvbnRleHQuIFRoZSBOb24tc2VjdXJlIGNvbnRleHQKKyAgIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgZnVydGhlciBieSB0aGUgY2FsbGVyLgorCistICBUaGUgQVBJIHJldHVybmluZyBzdWNjZXNzIG9ubHkgbWVhbnMgdGhhdCB0aGUgZGlzcGF0Y2ggaXMgc2NoZWR1bGVkIGF0IHRoZQorICAgbmV4dCBgYEVSRVRgYCwgYW5kIG5vdCBpbW1lZGlhdGVseSBwZXJmb3JtZWQuIEFsc28sIHRoZSBjYWxsZXIgbXVzdCBiZQorICAgcHJlcGFyZWQgZm9yIHRoaXMgQVBJIHRvIHJldHVybiBmYWlsdXJlIGFuZCBoYW5kbGUgYWNjb3JkaW5nbHkuCisKKy0gIFVwb24gY29tcGxldGluZyB0aGUgZXZlbnQgKGkuZS4gd2hlbiB0aGUgY2xpZW50IGNhbGxzIGVpdGhlcgorICAgYGBTREVJX0VWRU5UX0NPTVBMRVRFYGAgb3IgYGBTREVJX0NPTVBMRVRFX0FORF9SRVNVTUVgYCksIHRoZSBwcmVlbXB0ZWQKKyAgIGNvbnRleHQgaXMgcmVzdW1lZCAoYXMgaW5kaWNhdGVkIGJ5IHRoZSBgYHByZWVtcHRlZF9zZWNfc3RhdGVgYCBwYXJhbWV0ZXIgb2YKKyAgIHRoZSBBUEkpLgorCitQb3J0aW5nIHJlcXVpcmVtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHBvcnRpbmcgcmVxdWlyZW1lbnRzIG9mIHRoZSBTREVJIGRpc3BhdGNoZXIgYXJlIG91dGxpbmVkIGluIHRoZSBgcG9ydGluZworZ3VpZGVgX18uCisKKy4uIF9fOiBgU0RFSSBwb3J0aW5nIHJlcXVpcmVtZW50c2BfCisKK05vdGUgb24gd3JpdGluZyBTREVJIGV2ZW50IGhhbmRsZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqVGhpcyBzZWN0aW9uIHBlcnRhaW5zIHRvIFNERUkgZXZlbnQgaGFuZGxlcnMgaW4gZ2VuZXJhbCwgbm90IGp1c3Qgd2hlbiB1c2luZworQVJNIFRydXN0ZWQgRmlybXdhcmUgU0RFSSBkaXNwYXRjaGVyLioKKworVGhlIFNERUkgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGF0IGV2ZW50IGhhbmRsZXJzIHByZXNlcnZlIHRoZSBjb250ZW50cyBvZiBhbGwKK3JlZ2lzdGVycyBleGNlcHQgYGB4MGBgIHRvIGBgeDE3YGAuIFRoaXMgaGFzIHNpZ25pZmljYW5jZSBpZiBldmVudCBoYW5kbGVyIGlzCit3cml0dGVuIGluIEM6IGNvbXBpbGVycyB0eXBpY2FsbHkgYWRqdXN0IHRoZSBzdGFjayBmcmFtZSBhdCB0aGUgYmVnaW5uaW5nIGFuZAorZW5kIG9mIEMgZnVuY3Rpb25zLiBGb3IgZXhhbXBsZSwgQUFyY2g2NCBHQ0MgdHlwaWNhbGx5IHByb2R1Y2VzIHRoZSBmb2xsb3dpbmcKK2Z1bmN0aW9uIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZToKKworOjoKKworICAgICAgICBjX2V2ZW50X2hhbmRsZXI6CisgICAgICAgICAgICAgICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCMtMzJdIQorICAgICAgICAgICAgICAgIG1vdiAgICAgeDI5LCBzcAorCisgICAgICAgICAgICAgICAgLi4uCisKKyAgICAgICAgICAgICAgICBibCAgICAgIC4uLgorCisgICAgICAgICAgICAgICAgLi4uCisKKyAgICAgICAgICAgICAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCMzMgorICAgICAgICAgICAgICAgIHJldAorCitUaGUgcmVnaXN0ZXIgYGB4MjlgYCBpcyB1c2VkIGFzIGZyYW1lIHBvaW50ZXIgaW4gdGhlIHByb2xvZ3VlLiBCZWNhdXNlIG5laXRoZXIgYQordmFsaWQgYGBTREVJX0VWRU5UX0NPTVBMRVRFYGAgbm9yIGBgU0RFSV9FVkVOVF9DT01QTEVURV9BTkRfUkVTVU1FYGAgY2FsbHMKK3JldHVybiB0byB0aGUgaGFuZGxlciwgdGhlIGVwaWxvZ3VlIG5ldmVyIGdldHMgZXhlY3V0ZWQsIGFuZCByZWdpc3RlcnMgYGB4MjlgYAorYW5kIGBgeDMwYGAgKGluIHRoZSBjYXNlIGFib3ZlKSBhcmUgaW5hZHZlcnRlbnRseSBjb3JydXB0ZWQuIFRoaXMgdmlvbGF0ZXMgdGhlCitTREVJIHNwZWNpZmljYXRpb24sIGFuZCB0aGUgbm9ybWFsIGV4ZWN1dGlvbiB0aGVyZWFmdGVyIHdpbGwgcmVzdWx0IGluCit1bmV4cGVjdGVkIGJlaGF2aW91ci4KKworVG8gd29yayB0aGlzIGFyb3VuZCwgaXQncyBhZHZpc2VkIHRoYXQgdGhlIHRvcC1sZXZlbCBldmVudCBoYW5kbGVycyBhcmUKK2ltcGxlbWVudGVkIGluIGFzc2VtYmx5LCBmb2xsb3dpbmcgYSBzaW1pbGFyIHBhdHRlcm4gYXMgYmVsb3c6CisKKzo6CisKKyAgICAgICAgYXNtX2V2ZW50X2hhbmRsZXI6CisgICAgICAgICAgICAgICAgLyogU2F2ZSBsaW5rIHJlZ2lzdGVyIHdoaWxzdCBtYWludGFpbmluZyBzdGFjayBhbGlnbm1lbnQgKi8KKyAgICAgICAgICAgICAgICBzdHAgICAgIHh6ciwgeDMwLCBbc3AsICMtMTZdIQorICAgICAgICAgICAgICAgIGJsICAgICAgY19ldmVudF9oYW5kbGVyCisKKyAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGxpbmsgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICBsZHAgICAgIHh6ciwgeDMwLCBbc3BdLCAjMTYKKworICAgICAgICAgICAgICAgIC8qIENvbXBsZXRlIGNhbGwgKi8KKyAgICAgICAgICAgICAgICBsZHIgICAgIHgwLCA9U0RFSV9FVkVOVF9DT01QTEVURQorICAgICAgICAgICAgICAgIHNtYyAgICAgIzAKKyAgICAgICAgICAgICAgICBiICAgICAgIC4KKworLS0tLQorCisqQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLioKKworLi4gX1NERUkgc3BlY2lmaWNhdGlvbjogaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLmRlbjAwNTRhL0FSTV9ERU4wMDU0QV9Tb2Z0d2FyZV9EZWxlZ2F0ZWRfRXhjZXB0aW9uX0ludGVyZmFjZS5wZGYKKy4uIF9TREVJIHBvcnRpbmcgcmVxdWlyZW1lbnRzOiBwb3J0aW5nLWd1aWRlLnJzdCNzZGVpLXBvcnRpbmctcmVxdWlyZW1lbnRzCmRpZmYgLS1naXQgYS9kb2NzL3NwbS11c2VyLWd1aWRlLnJzdCBiL2RvY3Mvc3BtLXVzZXItZ3VpZGUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjY0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3NwbS11c2VyLWd1aWRlLnJzdApAQCAtMCwwICsxLDU5IEBACitBUk0gVHJ1c3RlZCBGaXJtd2FyZSAtIFNQTSBVc2VyIEd1aWRlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIHNlY3Rpb24tbnVtYmVyaW5nOjoKKyAgICA6c3VmZml4OiAuCisKKy4uIGNvbnRlbnRzOjoKKworCitUaGlzIGRvY3VtZW50IGJyaWVmbHkgcHJlc2VudHMgdGhlIFNlY3VyZSBQYXJ0aXRpb24gTWFuYWdlbWVudCAoU1BNKSBzdXBwb3J0IGluCit0aGUgQXJtIFRydXN0ZWQgRmlybXdhcmUgKFRGKSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0byBidWlsZCBBcm0gVEYgd2l0aAorU1BNIHN1cHBvcnQuCisKK092ZXJ2aWV3IG9mIHRoZSBTUE0gc29mdHdhcmUgc3RhY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1BNIGlzIHN1cHBvcnRlZCBvbiB0aGUgQXJtIEZWUCBleGNsdXNpdmVseSBhdCB0aGUgbW9tZW50LgorCitJdCBpcyBub3QgY3VycmVudGx5IHBvc3NpYmxlIGZvciBCTDMxIHRvIGludGVncmF0ZSBTUE0gc3VwcG9ydCBhbmQgYSBTZWN1cmUKK1BheWxvYWQgRGlzcGF0Y2hlciAoU1BEKSBhdCB0aGUgc2FtZSB0aW1lOyB0aGV5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIEluIHRoZQorU1BNIGJvb3RmbG93LCBhIFNlY3VyZSBQYXJ0aXRpb24gKFNQKSBpbWFnZSBleGVjdXRpbmcgYXQgU2VjdXJlLUVMMCByZXBsYWNlcyB0aGUKK1NlY3VyZSBQYXlsb2FkIGltYWdlIGV4ZWN1dGluZyBhdCBTZWN1cmUtRUwxIChlLmcuIGEgVHJ1c3RlZCBPUykuIEJvdGggYXJlCityZWZlcnJlZCB0byBhcyBCTDMyLgorCitBIHdvcmtpbmcgcHJvdG90eXBlIG9mIGEgU1AgaGFzIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmVwdXJwb3NpbmcgdGhlIEVESzIgY29kZQorYW5kIHRvb2xzLCBsZXZlcmFnaW5nIHRoZSBjb25jZXB0IG9mIHRoZSAqU3RhbmRhbG9uZSBNYW5hZ2VtZW50IE1vZGUgKE1NKSogaW4KK3RoZSBVRUZJIHNwZWNpZmljYXRpb24gKHNlZSB0aGUgUEkgdjEuNiBWb2x1bWUgNDogTWFuYWdlbWVudCBNb2RlIENvcmUKK0ludGVyZmFjZSkuIFRoaXMgd2lsbCBiZSByZWZlcnJlZCB0byBhcyB0aGUgKlN0YW5kYWxvbmUgTU0gU2VjdXJlIFBhcnRpdGlvbiogaW4KK3RoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQuCisKKworQnVpbGRpbmcgVEYgd2l0aCBTUE0gc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBlbmFibGUgU1BNIHN1cHBvcnQgaW4gdGhlIFRGLCB0aGUgc291cmNlIGNvZGUgbXVzdCBiZSBjb21waWxlZCB3aXRoIHRoZSBidWlsZAorZmxhZyBgYEVOQUJMRV9TUE09MWBgLiBPbiBBcm0gcGxhdGZvcm1zIHRoZSBidWlsZCBvcHRpb24gYGBBUk1fQkwzMV9JTl9EUkFNYGAKK2NhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgbG9jYXRpb24gb2YgQkwzMSwgYm90aCBTUkFNIGFuZCBEUkFNIGFyZSBzdXBwb3J0ZWQuCisKKworVXNpbmcgdGhlIFN0YW5kYWxvbmUgTU0gU1AKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZpcnN0LCBidWlsZCB0aGUgU3RhbmRhbG9uZSBNTSBTZWN1cmUgUGFydGl0aW9uLiBUbyBidWlsZCBpdCwgcmVmZXIgdG8gdGhlCitgaW5zdHJ1Y3Rpb25zIGluIHRoZSBFREsyIHJlcG9zaXRvcnlgXy4KKworVGhlbiBidWlsZCBURiB3aXRoIFNQTSBzdXBwb3J0IGFuZCBpbmNsdWRlIHRoZSBTdGFuZGFsb25lIE1NIFNlY3VyZSBQYXJ0aXRpb24KK2ltYWdlIGluIHRoZSBGSVA6CisKKzo6CisKKyAgICBCTDMyPXBhdGgvdG8vc3RhbmRhbG9uZS9tbS9zcCBCTDMzPXBhdGgvdG8vYmwzMy5iaW4gXAorICAgIG1ha2UgUExBVD1mdnAgRU5BQkxFX1NQTT0xIGZpcCBhbGwKKworCistLS0tLS0tLS0tLS0tLQorCisqQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLioKKworLi4gX2luc3RydWN0aW9ucyBpbiB0aGUgRURLMiByZXBvc2l0b3J5OiBodHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazItc3RhZ2luZy9ibG9iL0FBcmNoNjRTdGFuZGFsb25lTW0vSG93dG9CdWlsZC5NRApkaWZmIC0tZ2l0IGEvZG9jcy91c2VyLWd1aWRlLnJzdCBiL2RvY3MvdXNlci1ndWlkZS5yc3QKaW5kZXggMWZmMDgwZC4uMTNmMDk2NCAxMDA2NDQKLS0tIGEvZG9jcy91c2VyLWd1aWRlLnJzdAorKysgYi9kb2NzL3VzZXItZ3VpZGUucnN0CkBAIC0yMTksNyArMjE5LDggQEAKIAogLSAgYGBBUk1fQVJDSF9NQUpPUmBgOiBUaGUgbWFqb3IgdmVyc2lvbiBvZiBBUk0gQXJjaGl0ZWN0dXJlIHRvIHRhcmdldCB3aGVuCiAgICBjb21waWxpbmcgQVJNIFRydXN0ZWQgRmlybXdhcmUuIEl0cyB2YWx1ZSBtdXN0IGJlIG51bWVyaWMsIGFuZCBkZWZhdWx0cyB0bwotICAgOCAuIFNlZSBhbHNvLCAqQVJNdjggQXJjaGl0ZWN0dXJlIEV4dGVuc2lvbnMqIGluIGBGaXJtd2FyZSBEZXNpZ25gXy4KKyAgIDggLiBTZWUgYWxzbywgKkFSTXY4IEFyY2hpdGVjdHVyZSBFeHRlbnNpb25zKiBhbmQKKyAgICpBUk12NyBBcmNoaXRlY3R1cmUgRXh0ZW5zaW9ucyogaW4gYEZpcm13YXJlIERlc2lnbmBfLgogCiAtICBgYEFSTV9BUkNIX01JTk9SYGA6IFRoZSBtaW5vciB2ZXJzaW9uIG9mIEFSTSBBcmNoaXRlY3R1cmUgdG8gdGFyZ2V0IHdoZW4KICAgIGNvbXBpbGluZyBBUk0gVHJ1c3RlZCBGaXJtd2FyZS4gSXRzIHZhbHVlIG11c3QgYmUgYSBudW1lcmljLCBhbmQgZGVmYXVsdHMKQEAgLTMyMCw2ICszMjEsMTEgQEAKICAgIHBheWxvYWQuIFBsZWFzZSByZWZlciB0byB0aGUgIkJvb3RpbmcgYW4gRUwzIHBheWxvYWQiIHNlY3Rpb24gZm9yIG1vcmUKICAgIGRldGFpbHMuCiAKKy0gIGBgRU5BQkxFX0FNVWBgOiBCb29sZWFuIG9wdGlvbiB0byBlbmFibGUgQWN0aXZpdHkgTW9uaXRvciBVbml0IGV4dGVuc2lvbnMuCisgICBUaGlzIGlzIGFuIG9wdGlvbmFsIGFyY2hpdGVjdHVyYWwgZmVhdHVyZSBhdmFpbGFibGUgb24gdjguNCBvbndhcmRzLiBTb21lCisgICB2OC4yIGltcGxlbWVudGF0aW9ucyBhbHNvIGltcGxlbWVudCBhbiBBTVUgYW5kIHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvCisgICBlbmFibGUgdGhpcyBmZWF0dXJlIG9uIHRob3NlIHN5c3RlbXMgYXMgd2VsbC4gRGVmYXVsdCBpcyAwLgorCiAtICBgYEVOQUJMRV9BU1NFUlRJT05TYGA6IFRoaXMgb3B0aW9uIGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IGNhbGxzIHRvIGBgYXNzZXJ0KClgYAogICAgYXJlIGNvbXBpbGVkIG91dC4gRm9yIGRlYnVnIGJ1aWxkcywgdGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gMSwgYW5kIGNhbGxzIHRvCiAgICBgYGFzc2VydCgpYGAgYXJlIGxlZnQgaW4gcGxhY2UuIEZvciByZWxlYXNlIGJ1aWxkcywgdGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gMApAQCAtMzQ0LDkgKzM1MCwyMCBAQAogICAgdGhlIGBgRU5BQkxFX1BNRmBgIGJ1aWxkIG9wdGlvbiBhcyB3ZWxsLiBEZWZhdWx0IGlzIDAuCiAKIC0gIGBgRU5BQkxFX1NQRV9GT1JfTE9XRVJfRUxTYGAgOiBCb29sZWFuIG9wdGlvbiB0byBlbmFibGUgU3RhdGlzdGljYWwgUHJvZmlsaW5nCi0gICBleHRlbnNpb25zLiBUaGlzIGlzIGFuIG9wdGlvbmFsIGFyY2hpdGVjdHVyYWwgZmVhdHVyZSBhdmFpbGFibGUgb25seSBmb3IKLSAgIEFBcmNoNjQgOC4yIG9ud2FyZHMuIFRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIDEgYnV0IGlzIGF1dG9tYXRpY2FsbHkKLSAgIGRpc2FibGVkIHdoZW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgQUFyY2gzMiBvciBBQXJjaDY0IDguMC84LjEuCisgICBleHRlbnNpb25zLiBUaGlzIGlzIGFuIG9wdGlvbmFsIGFyY2hpdGVjdHVyYWwgZmVhdHVyZSBmb3IgQUFyY2g2NC4KKyAgIFRoZSBkZWZhdWx0IGlzIDEgYnV0IGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZQorICAgaXMgQUFyY2gzMi4KKworLSAgYGBFTkFCTEVfU1ZFX0ZPUl9OU2BgOiBCb29sZWFuIG9wdGlvbiB0byBlbmFibGUgU2NhbGFibGUgVmVjdG9yIEV4dGVuc2lvbgorICAgKFNWRSkgZm9yIHRoZSBOb24tc2VjdXJlIHdvcmxkIG9ubHkuIFNWRSBpcyBhbiBvcHRpb25hbCBhcmNoaXRlY3R1cmFsIGZlYXR1cmUKKyAgIGZvciBBQXJjaDY0LiBOb3RlIHRoYXQgd2hlbiBTVkUgaXMgZW5hYmxlZCBmb3IgdGhlIE5vbi1zZWN1cmUgd29ybGQsIGFjY2VzcworICAgdG8gU0lNRCBhbmQgZmxvYXRpbmctcG9pbnQgZnVuY3Rpb25hbGl0eSBmcm9tIHRoZSBTZWN1cmUgd29ybGQgaXMgZGlzYWJsZWQuCisgICBUaGlzIGlzIHRvIGF2b2lkIGNvcnJ1cHRpb24gb2YgdGhlIE5vbi1zZWN1cmUgd29ybGQgZGF0YSBpbiB0aGUgWi1yZWdpc3RlcnMKKyAgIHdoaWNoIGFyZSBhbGlhc2VkIGJ5IHRoZSBTSU1EIGFuZCBGUCByZWdpc3RlcnMuIFRoZSBidWlsZCBvcHRpb24gaXMgbm90CisgICBjb21wYXRpYmxlIHdpdGggdGhlIGBgQ1RYX0lOQ0xVREVfRlBSRUdTYGAgYnVpbGQgb3B0aW9uLCBhbmQgd2lsbCByYWlzZSBhbgorICAgYXNzZXJ0IG9uIHBsYXRmb3JtcyB3aGVyZSBTVkUgaXMgaW1wbGVtZW50ZWQgYW5kIGBgRU5BQkxFX1NWRV9GT1JfTlNgYCBzZXQgdG8KKyAgIDEuIFRoZSBkZWZhdWx0IGlzIDEgYnV0IGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbiB0aGUgdGFyZ2V0CisgICBhcmNoaXRlY3R1cmUgaXMgQUFyY2gzMi4KIAogLSAgYGBFTkFCTEVfU1RBQ0tfUFJPVEVDVE9SYGA6IFN0cmluZyBvcHRpb24gdG8gZW5hYmxlIHRoZSBzdGFjayBwcm90ZWN0aW9uCiAgICBjaGVja3MgaW4gR0NDLiBBbGxvd2VkIHZhbHVlcyBhcmUgImFsbCIsICJzdHJvbmciIGFuZCAiMCIgKGRlZmF1bHQpLgpAQCAtMzYxLDYgKzM3OCwxMSBAQAogICAgRmlybXdhcmUgYXMgZXJyb3IuIEl0IGNhbiB0YWtlIHRoZSB2YWx1ZSAxIChmbGFnIHRoZSB1c2Ugb2YgZGVwcmVjYXRlZAogICAgQVBJcyBhcyBlcnJvcikgb3IgMC4gVGhlIGRlZmF1bHQgaXMgMC4KIAorLSAgYGBFTDNfRVhDRVBUSU9OX0hBTkRMSU5HYGA6IFdoZW4gc2V0IHRvIGBgMWBgLCBlbmFibGUgaGFuZGxpbmcgb2YgZXhjZXB0aW9ucworICAgdGFyZ2V0ZWQgYXQgRUwzLiBXaGVuIHNldCBgYDBgYCAoZGVmYXVsdCksIG5vIGV4Y2VwdGlvbnMgYXJlIGV4cGVjdGVkIG9yCisgICBoYW5kbGVkIGF0IEVMMywgYW5kIGEgcGFuaWMgd2lsbCByZXN1bHQuIFRoaXMgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIEFBcmNoNjQKKyAgIGJ1aWxkcy4KKwogLSAgYGBGSVBfTkFNRWBgOiBUaGlzIGlzIGFuIG9wdGlvbmFsIGJ1aWxkIG9wdGlvbiB3aGljaCBzcGVjaWZpZXMgdGhlIEZJUAogICAgZmlsZW5hbWUgZm9yIHRoZSBgYGZpcGBgIHRhcmdldC4gRGVmYXVsdCBpcyBgYGZpcC5iaW5gYC4KIApAQCAtMzg2LDYgKzQwOCwxOSBAQAogICAgaW1hZ2VzIHdpbGwgaW5jbHVkZSBzdXBwb3J0IGZvciBUcnVzdGVkIEJvYXJkIEJvb3QsIGJ1dCB0aGUgRklQIGFuZCBGV1VcX0ZJUAogICAgd2lsbCBub3QgaW5jbHVkZSB0aGUgY29ycmVzcG9uZGluZyBjZXJ0aWZpY2F0ZXMsIGNhdXNpbmcgYSBib290IGZhaWx1cmUuCiAKKy0gIGBgR0lDVjJfRzBfRk9SX0VMM2BgOiBVbmxpa2UgR0lDdjMsIHRoZSBHSUN2MiBhcmNoaXRlY3R1cmUgZG9lc24ndCBoYXZlCisgICBpbmhlcmVudCBzdXBwb3J0IGZvciBzcGVjaWZpYyBFTDMgdHlwZSBpbnRlcnJ1cHRzLiBTZXR0aW5nIHRoaXMgYnVpbGQgb3B0aW9uCisgICB0byBgYDFgYCBhc3N1bWVzIEdJQ3YyICpHcm91cCAwKiBpbnRlcnJ1cHRzIGFyZSBleHBlY3RlZCB0byB0YXJnZXQgRUwzLCBib3RoCisgICBieSBgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXJgX18gYW5kIGBJbnRlcnJ1cHQgTWFuYWdlbWVudCBGcmFtZXdvcmtgX18uCisgICBUaGlzIGFsbG93cyBHSUN2MiBwbGF0Zm9ybXMgdG8gZW5hYmxlIGZlYXR1cmVzIHJlcXVpcmluZyBFTDMgaW50ZXJydXB0IHR5cGUuCisgICBUaGlzIGFsc28gbWVhbnMgdGhhdCBhbGwgR0lDdjIgR3JvdXAgMCBpbnRlcnJ1cHRzIGFyZSBkZWxpdmVyZWQgdG8gRUwzLCBhbmQKKyAgIHRoZSBTZWN1cmUgUGF5bG9hZCBpbnRlcnJ1cHRzIG5lZWRzIHRvIGJlIHN5bmNocm9ub3VzbHkgaGFuZGVkIG92ZXIgdG8gU2VjdXJlCisgICBFTDEgZm9yIGhhbmRsaW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBpcyBgYDBgYCwgd2hpY2ggbWVhbnMgdGhlCisgICBHcm91cCAwIGludGVycnVwdHMgYXJlIGFzc3VtZWQgdG8gYmUgaGFuZGxlZCBieSBTZWN1cmUgRUwxLgorCisgICAuLiBfXzogYHBsYXRmb3JtLWludGVycnVwdC1jb250cm9sbGVyLUFQSS5yc3RgCisgICAuLiBfXzogYGludGVycnVwdC1mcmFtZXdvcmstZGVzaWduLnJzdGAKKwogLSAgYGBIQU5ETEVfRUFfRUwzX0ZJUlNUYGA6IFdoZW4gZGVmaW5lZCBFeHRlcm5hbCBBYm9ydHMgYW5kIFNFcnJvciBJbnRlcnJ1cHRzCiAgICB3aWxsIGJlIGFsd2F5cyB0cmFwcGVkIGluIEVMMyBpLmUuIGluIEJMMzEgYXQgcnVudGltZS4KIApAQCAtNDA3LDExICs0NDIsMTUgQEAKIAogLSAgYGBLRVlfQUxHYGA6IFRoaXMgYnVpbGQgZmxhZyBlbmFibGVzIHRoZSB1c2VyIHRvIHNlbGVjdCB0aGUgYWxnb3JpdGhtIHRvIGJlCiAgICB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBQS0NTIGtleXMgYW5kIHN1YnNlcXVlbnQgc2lnbmluZyBvZiB0aGUgY2VydGlmaWNhdGUuCi0gICBJdCBhY2NlcHRzIDMgdmFsdWVzIHZpeiBgYHJzYWBgLCBgYHJzYV8xXzVgYCwgYGBlY2RzYWBgLiBUaGUgYGByc2FfMV81YGAgaXMKKyAgIEl0IGFjY2VwdHMgMyB2YWx1ZXMgdml6LiBgYHJzYWBgLCBgYHJzYV8xXzVgYCwgYGBlY2RzYWBgLiBUaGUgYGByc2FfMV81YGAgaXMKICAgIHRoZSBsZWdhY3kgUEtDUyMxIFJTQSAxLjUgYWxnb3JpdGhtIHdoaWNoIGlzIG5vdCBUQkJSIGNvbXBsaWFudCBhbmQgaXMKICAgIHJldGFpbmVkIG9ubHkgZm9yIGNvbXBhdGliaWxpdHkuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgZmxhZyBpcyBgYHJzYWBgCiAgICB3aGljaCBpcyB0aGUgVEJCUiBjb21wbGlhbnQgUEtDUyMxIFJTQSAyLjEgc2NoZW1lLgogCistICBgYEhBU0hfQUxHYGA6IFRoaXMgYnVpbGQgZmxhZyBlbmFibGVzIHRoZSB1c2VyIHRvIHNlbGVjdCB0aGUgc2VjdXJlIGhhc2gKKyAgIGFsZ29yaXRobS4gSXQgYWNjZXB0cyAzIHZhbHVlcyB2aXouIGBgc2hhMjU2YGAsIGBgc2hhMzg0YGAsIGBgc2hhNTEyYGAuCisgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIGZsYWcgaXMgYGBzaGEyNTZgYC4KKwogLSAgYGBMREZMQUdTYGA6IEV4dHJhIHVzZXIgb3B0aW9ucyBhcHBlbmRlZCB0byB0aGUgbGlua2VycycgY29tbWFuZCBsaW5lIGluCiAgICBhZGRpdGlvbiB0byB0aGUgb25lIHNldCBieSB0aGUgYnVpbGQgc3lzdGVtLgogCkBAIC01MTYsNiArNTU1LDEyIEBACiAgICBvcHRpb25hbC4gSXQgaXMgb25seSBuZWVkZWQgaWYgdGhlIHBsYXRmb3JtIG1ha2VmaWxlIHNwZWNpZmllcyB0aGF0IGl0CiAgICBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBidWlsZCB0aGUgYGBmd3VfZmlwYGAgdGFyZ2V0LgogCistICBgYFNERUlfU1VQUE9SVGBgOiBTZXR0aW5nIHRoaXMgdG8gYGAxYGAgZW5hYmxlcyBzdXBwb3J0IGZvciBTb2Z0d2FyZQorICAgRGVsZWdhdGVkIEV4Y2VwdGlvbiBJbnRlcmZhY2UgdG8gQkwzMSBpbWFnZS4gVGhpcyBkZWZhdWx0cyB0byBgYDBgYC4KKworICAgV2hlbiBzZXQgdG8gYGAxYGAsIHRoZSBidWlsZCBvcHRpb24gYGBFTDNfRVhDRVBUSU9OX0hBTkRMSU5HYGAgbXVzdCBhbHNvIGJlCisgICBzZXQgdG8gYGAxYGAuCisKIC0gIGBgU0VQQVJBVEVfQ09ERV9BTkRfUk9EQVRBYGA6IFdoZXRoZXIgY29kZSBhbmQgcmVhZC1vbmx5IGRhdGEgc2hvdWxkIGJlCiAgICBpc29sYXRlZCBvbiBzZXBhcmF0ZSBtZW1vcnkgcGFnZXMuIFRoaXMgaXMgYSB0cmFkZS1vZmYgYmV0d2VlbiBzZWN1cml0eSBhbmQKICAgIG1lbW9yeSB1c2FnZS4gU2VlICJJc29sYXRpbmcgY29kZSBhbmQgcmVhZC1vbmx5IGRhdGEgb24gc2VwYXJhdGUgbWVtb3J5CkBAIC02NDMsMTIgKzY4OCwxOCBAQAogICAgICAgYGBhcm1fcm90cGtfcnNhLmRlcmBgLCBsb2NhdGVkIGluIGBgcGxhdC9hcm0vYm9hcmQvY29tbW9uL3JvdHBrYGAuIFRvIHVzZQogICAgICAgdGhpcyBvcHRpb24sIGBgYXJtX3JvdHByaXZrX3JzYS5wZW1gYCBtdXN0IGJlIHNwZWNpZmllZCBhcyBgYFJPVF9LRVlgYCB3aGVuCiAgICAgICBjcmVhdGluZyB0aGUgY2VydGlmaWNhdGVzLgorICAgLSAgYGBkZXZlbF9lY2RzYWBgIDogcmV0dXJuIGEgZGV2ZWxvcG1lbnQgcHVibGljIGtleSBoYXNoIGVtYmVkZGVkIGluIHRoZSBCTDEKKyAgICAgIGFuZCBCTDIgYmluYXJpZXMuIFRoaXMgaGFzaCBoYXMgYmVlbiBvYnRhaW5lZCBmcm9tIHRoZSBFQ0RTQSBwdWJsaWMga2V5CisgICAgICBgYGFybV9yb3Rwa19lY2RzYS5kZXJgYCwgbG9jYXRlZCBpbiBgYHBsYXQvYXJtL2JvYXJkL2NvbW1vbi9yb3Rwa2BgLiBUbyB1c2UKKyAgICAgIHRoaXMgb3B0aW9uLCBgYGFybV9yb3Rwcml2a19lY2RzYS5wZW1gYCBtdXN0IGJlIHNwZWNpZmllZCBhcyBgYFJPVF9LRVlgYAorICAgICAgd2hlbiBjcmVhdGluZyB0aGUgY2VydGlmaWNhdGVzLgogCiAtICBgYEFSTV9UU1BfUkFNX0xPQ0FUSU9OYGA6IGxvY2F0aW9uIG9mIHRoZSBUU1AgYmluYXJ5LiBPcHRpb25zOgogCi0gICAtICBgYHRzcmFtYGAgOiBUcnVzdGVkIFNSQU0gKGRlZmF1bHQgb3B0aW9uKQorICAgLSAgYGB0c3JhbWBgIDogVHJ1c3RlZCBTUkFNIChkZWZhdWx0IG9wdGlvbiB3aGVuIFRCQiBpcyBub3QgZW5hYmxlZCkKICAgIC0gIGBgdGRyYW1gYCA6IFRydXN0ZWQgRFJBTSAoaWYgYXZhaWxhYmxlKQotICAgLSAgYGBkcmFtYGAgOiBTZWN1cmUgcmVnaW9uIGluIERSQU0gKGNvbmZpZ3VyZWQgYnkgdGhlIFRydXN0Wm9uZSBjb250cm9sbGVyKQorICAgLSAgYGBkcmFtYGAgIDogU2VjdXJlIHJlZ2lvbiBpbiBEUkFNIChkZWZhdWx0IG9wdGlvbiB3aGVuIFRCQiBpcyBlbmFibGVkLAorICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCBieSB0aGUgVHJ1c3Rab25lIGNvbnRyb2xsZXIpCiAKIC0gIGBgQVJNX1hMQVRfVEFCTEVTX0xJQl9WMWBgOiBib29sZWFuIG9wdGlvbiB0byBjb21waWxlIHRoZSBUcnVzdGVkIEZpcm13YXJlCiAgICB3aXRoIHZlcnNpb24gMSBvZiB0aGUgdHJhbnNsYXRpb24gdGFibGVzIGxpYnJhcnkgaW5zdGVhZCBvZiB2ZXJzaW9uIDIuIEl0IGlzCkBAIC05OTAsNiArMTA0MSwxMCBAQAogICAgICAgaW4gdGhlIEFSTSBwbGF0Zm9ybSBwb3J0LiBUaGUgcHJpdmF0ZS9wdWJsaWMgUlNBIGtleSBwYWlyIG1heSBiZQogICAgICAgZm91bmQgaW4gYGBwbGF0L2FybS9ib2FyZC9jb21tb24vcm90cGtgYC4KIAorICAgLSAgYGBBUk1fUk9UUEtfTE9DQVRJT049ZGV2ZWxfZWNkc2FgYDogdXNlIHRoZSBST1RQSyBoYXNoIHRoYXQgaXMgaGFyZGNvZGVkCisgICAgICBpbiB0aGUgQVJNIHBsYXRmb3JtIHBvcnQuIFRoZSBwcml2YXRlL3B1YmxpYyBFQ0RTQSBrZXkgcGFpciBtYXkgYmUKKyAgICAgIGZvdW5kIGluIGBgcGxhdC9hcm0vYm9hcmQvY29tbW9uL3JvdHBrYGAuCisKICAgIEV4YW1wbGUgb2YgY29tbWFuZCBsaW5lIHVzaW5nIFJTQSBkZXZlbG9wbWVudCBrZXlzOgogCiAgICA6OgpAQCAtMTE2OCw3ICsxMjIzLDcgQEAKIAogICAgICAgICAgIG1ha2UgQVJDSD1hYXJjaDY0IFBMQVQ9anVubyBMT0FEX0lNQUdFX1YyPTEgSlVOT19BQVJDSDMyX0VMM19SVU5USU1FPTEgXAogICAgICAgICAgIEJMMzM9PHBhdGgtdG8tanVubzMyLW9lLXVib290Pi9TT0ZUV0FSRS9ibDMzLXVib290LmJpbiBcCi0gICAgICAgICAgU0NQX0JMMj08cGF0aC10by1qdW5vMzItb2UtdWJvb3Q+L1NPRlRXQVJFL3NjcF9ibDIuYmluIFNQRD10c3BkIFwKKyAgICAgICAgICBTQ1BfQkwyPTxwYXRoLXRvLWp1bm8zMi1vZS11Ym9vdD4vU09GVFdBUkUvc2NwX2JsMi5iaW4gXAogICAgICAgICAgIEJMMzI9PHBhdGgtdG8tYmwzMj4vYmwzMi5iaW4gYWxsIGZpcAogCiBUaGUgcmVzdWx0aW5nIEJMMSBhbmQgRklQIGltYWdlcyBtYXkgYmUgZm91bmQgaW46CkBAIC0xMTgzLDYgKzEyMzgsNTYgQEAKICAgICAuL2J1aWxkL2Z2cC9yZWxlYXNlL2JsMS5iaW4KICAgICAuL2J1aWxkL2Z2cC9yZWxlYXNlL2ZpcC5iaW4KIAorCitCb290aW5nIEZpcm13YXJlIFVwZGF0ZSBpbWFnZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBGaXJtd2FyZSBVcGRhdGUgKEZXVSkgaXMgZW5hYmxlZCB0aGVyZSBhcmUgYXQgbGVhc3QgMiBuZXcgaW1hZ2VzCit0aGF0IGhhdmUgdG8gYmUgbG9hZGVkLCB0aGUgTm9uLVNlY3VyZSBGV1UgUk9NIChOUy1CTDFVKSwgYW5kIHRoZQorRldVIEZJUC4KKworSnVubworfn5+fgorCitUaGUgbmV3IGltYWdlcyBtdXN0IGJlIHByb2dyYW1tZWQgaW4gZmxhc2ggbWVtb3J5IGJ5IGFkZGluZworYW4gZW50cnkgaW4gdGhlIGBgU0lURTEvSEJJMDI2MngvaW1hZ2VzLnR4dGBgIGNvbmZpZ3VyYXRpb24gZmlsZQorb24gdGhlIEp1bm8gU0QgY2FyZCAod2hlcmUgYGB4YGAgZGVwZW5kcyBvbiB0aGUgcmV2aXNpb24gb2YgdGhlIEp1bm8gYm9hcmQpLgorUmVmZXIgdG8gdGhlIGBKdW5vIEdldHRpbmcgU3RhcnRlZCBHdWlkZWBfLCBzZWN0aW9uIDIuMyAiRmxhc2ggbWVtb3J5Citwcm9ncmFtbWluZyIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIFVzZXIgc2hvdWxkIGVuc3VyZSB0aGVzZSBkbyBub3QKK292ZXJsYXAgd2l0aCBhbnkgb3RoZXIgZW50cmllcyBpbiB0aGUgZmlsZS4KKworOjoKKworCU5PUjEwVVBEQVRFOiBBVVRPICAgICAgICAgICAgICAgICAgICAgICA7SW1hZ2UgVXBkYXRlOk5PTkUvQVVUTy9GT1JDRQorCU5PUjEwQUREUkVTUzogMHgwMDQwMDAwMCAgICAgICAgICAgICAgICA7SW1hZ2UgRmxhc2ggQWRkcmVzcyBbbnNfYmwydV9iYXNlX2FkZHJlc3NdCisJTk9SMTBGSUxFOiBcU09GVFdBUkVcZnd1X2ZpcC5iaW4gICAgICAgIDtJbWFnZSBGaWxlIE5hbWUKKwlOT1IxMExPQUQ6IDAwMDAwMDAwICAgICAgICAgICAgICAgICAgICAgO0ltYWdlIExvYWQgQWRkcmVzcworCU5PUjEwRU5UUlk6IDAwMDAwMDAwICAgICAgICAgICAgICAgICAgICA7SW1hZ2UgRW50cnkgUG9pbnQKKworCU5PUjExVVBEQVRFOiBBVVRPICAgICAgICAgICAgICAgICAgICAgICA7SW1hZ2UgVXBkYXRlOk5PTkUvQVVUTy9GT1JDRQorCU5PUjExQUREUkVTUzogMHgwM0VCODAwMCAgICAgICAgICAgICAgICA7SW1hZ2UgRmxhc2ggQWRkcmVzcyBbbnNfYmwxdV9iYXNlX2FkZHJlc3NdCisJTk9SMTFGSUxFOiBcU09GVFdBUkVcbnNfYmwxdS5iaW4gICAgICAgIDtJbWFnZSBGaWxlIE5hbWUKKwlOT1IxMUxPQUQ6IDAwMDAwMDAwICAgICAgICAgICAgICAgICAgICAgO0ltYWdlIExvYWQgQWRkcmVzcworCitUaGUgYWRkcmVzcyBuc19ibDF1X2Jhc2VfYWRkcmVzcyBpcyB0aGUgdmFsdWUgb2YgTlNfQkwxVV9CQVNFIC0gMHg4MDAwMDAwLgorSW4gdGhlIHNhbWUgd2F5LCB0aGUgYWRkcmVzcyBuc19ibDJ1X2Jhc2VfYWRkcmVzcyBpcyB0aGUgdmFsdWUgb2YKK05TX0JMMlVfQkFTRSAtIDB4ODAwMDAwMC4KKworRlZQCit+fn4KKworVGhlIGFkZGl0aW9uYWwgZmlwIGltYWdlcyBtdXN0IGJlIGxvYWRlZCB3aXRoOgorCis6OgorCisgICAgLS1kYXRhIGNsdXN0ZXIwLmNwdTA9IjxwYXRoX3RvPi9uc19ibDF1LmJpbiJAMHgwYmViODAwMAlbbnNfYmwxdV9iYXNlX2FkZHJlc3NdCisgICAgLS1kYXRhIGNsdXN0ZXIwLmNwdTA9IjxwYXRoX3RvPi9md3VfZmlwLmJpbiJAMHgwODQwMDAwMAlbbnNfYmwydV9iYXNlX2FkZHJlc3NdCisKK1RoZSBhZGRyZXNzIG5zX2JsMXVfYmFzZV9hZGRyZXNzIGlzIHRoZSB2YWx1ZSBvZiBOU19CTDFVX0JBU0UuCitJbiB0aGUgc2FtZSB3YXksIHRoZSBhZGRyZXNzIG5zX2JsMnVfYmFzZV9hZGRyZXNzIGlzIHRoZSB2YWx1ZSBvZgorTlNfQkwyVV9CQVNFLgorCisKIEVMMyBwYXlsb2FkcyBhbHRlcm5hdGl2ZSBib290IGZsb3cKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTM3MCwxMCArMTQ3NSwxMCBAQAogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBBQXJjaDY0IGJ1aWxkIG9mIEFSTSBUcnVzdGVkIEZpcm13YXJlIGhhcyBiZWVuIHRlc3RlZAogb24gdGhlIGZvbGxvd2luZyBBUk0gRlZQcyAoNjQtYml0IGhvc3QgbWFjaGluZSBvbmx5KS4KIAotTk9URTogVW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQsIHRoZSBtb2RlbCB2ZXJzaW9uIGlzIFZlcnNpb24gMTEuMCBCdWlsZCAxMS4wLjM0LgorTk9URTogVW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQsIHRoZSBtb2RlbCB2ZXJzaW9uIGlzIFZlcnNpb24gMTEuMSBCdWlsZCAxMS4xLjIyLgogCiAtICBgYEZvdW5kYXRpb25fUGxhdGZvcm1gYAotLSAgYGBGVlBfQmFzZV9BRU12OEEtQUVNdjhBYGAgKFZlcnNpb24gOC41LCBCdWlsZCAwLjguODUwMikKKy0gIGBgRlZQX0Jhc2VfQUVNdjhBLUFFTXY4QWBgIChWZXJzaW9uIDguNywgQnVpbGQgMC44Ljg3MDIpCiAtICBgYEZWUF9CYXNlX0NvcnRleC1BMzV4NGBgCiAtICBgYEZWUF9CYXNlX0NvcnRleC1BNTN4NGBgCiAtICBgYEZWUF9CYXNlX0NvcnRleC1BNTd4NC1BNTN4NGBgCkBAIC0xMzg2LDcgKzE0OTEsNyBAQAogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBBQXJjaDMyIGJ1aWxkIG9mIEFSTSBUcnVzdGVkIEZpcm13YXJlIGhhcyBiZWVuIHRlc3RlZAogb24gdGhlIGZvbGxvd2luZyBBUk0gRlZQcyAoNjQtYml0IGhvc3QgbWFjaGluZSBvbmx5KS4KIAotLSAgYGBGVlBfQmFzZV9BRU12OEEtQUVNdjhBYGAgKFZlcnNpb24gOC41LCBCdWlsZCAwLjguODUwMikKKy0gIGBgRlZQX0Jhc2VfQUVNdjhBLUFFTXY4QWBgIChWZXJzaW9uIDguNywgQnVpbGQgMC44Ljg3MDIpCiAtICBgYEZWUF9CYXNlX0NvcnRleC1BMzJ4NGBgCiAKIE5PVEU6IFRoZSBidWlsZCBudW1iZXJzIHF1b3RlZCBhYm92ZSBhcmUgdGhvc2UgcmVwb3J0ZWQgYnkgbGF1bmNoaW5nIHRoZSBGVlAKQEAgLTE0MDUsNyArMTUxMCw3IEBACiBDQURJLWNvbXBsaWFudCBkZWJ1Z2dlciAoZm9yIGV4YW1wbGUsIEFSTSBEUy01KSBjYW4gY29ubmVjdCB0byBhbmQgY29udHJvbCBpdHMKIGV4ZWN1dGlvbi4KIAotTk9URTogV2l0aCBGVlAgbW9kZWwgVmVyc2lvbiAxMS4wIEJ1aWxkIDExLjAuMzQgYW5kIFZlcnNpb24gOC41IEJ1aWxkIDAuOC41MjAyCitOT1RFOiBTaW5jZSBGVlAgbW9kZWwgVmVyc2lvbiAxMS4wIEJ1aWxkIDExLjAuMzQgYW5kIFZlcnNpb24gOC41IEJ1aWxkIDAuOC41MjAyCiB0aGUgaW50ZXJuYWwgc3luY2hyb25pc2F0aW9uIHRpbWluZ3MgY2hhbmdlZCBjb21wYXJlZCB0byBvbGRlciB2ZXJzaW9ucyBvZiB0aGUKIG1vZGVscy4gVGhlIG1vZGVscyBjYW4gYmUgbGF1bmNoZWQgd2l0aCBgYC1RIDEwMGBgIG9wdGlvbiBpZiB0aGV5IGFyZSByZXF1aXJlZAogdG8gbWF0Y2ggdGhlIHJ1biB0aW1lIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgb2xkZXIgdmVyc2lvbnMuCmRpZmYgLS1naXQgYS9kb2NzL3hsYXQtdGFibGVzLWxpYi12Mi1kZXNpZ24ucnN0IGIvZG9jcy94bGF0LXRhYmxlcy1saWItdjItZGVzaWduLnJzdAppbmRleCAzMDA2Y2U3Li4wN2NiZjg2IDEwMDY0NAotLS0gYS9kb2NzL3hsYXQtdGFibGVzLWxpYi12Mi1kZXNpZ24ucnN0CisrKyBiL2RvY3MveGxhdC10YWJsZXMtbGliLXYyLWRlc2lnbi5yc3QKQEAgLTY2LDcgKzY2LDggQEAKIC0gaXRzIHBoeXNpY2FsIGJhc2UgYWRkcmVzczsKIC0gaXRzIHZpcnR1YWwgYmFzZSBhZGRyZXNzOwogLSBpdHMgc2l6ZTsKLS0gaXRzIGF0dHJpYnV0ZXMuCistIGl0cyBhdHRyaWJ1dGVzOworLSBpdHMgbWFwcGluZyBncmFudWxhcml0eSAob3B0aW9uYWwpLgogCiBTZWUgdGhlIGBgc3RydWN0IG1tYXBfcmVnaW9uYGAgdHlwZSBpbiBgeGxhdFxfdGFibGVzXF92Mi5oYF8uCiAKQEAgLTc2LDkgKzc3LDM3IEBACiAKIFRoZSByZWdpb24gYXR0cmlidXRlcyBzcGVjaWZ5IHRoZSB0eXBlIG9mIG1lbW9yeSAoZm9yIGV4YW1wbGUgZGV2aWNlIG9yIGNhY2hlZAogbm9ybWFsIG1lbW9yeSkgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IGFjY2VzcyBwZXJtaXNzaW9ucyAocmVhZC1vbmx5IG9yCi1yZWFkLXdyaXRlLCBleGVjdXRhYmxlIG9yIG5vdCwgc2VjdXJlIG9yIG5vbi1zZWN1cmUsIGFuZCBzbyBvbikuIFNlZSB0aGUKLWBgbW1hcF9hdHRyX3RgYCBlbnVtZXJhdGlvbiB0eXBlIGluIGB4bGF0XF90YWJsZXNcX3YyLmhgXy4KK3JlYWQtd3JpdGUsIGV4ZWN1dGFibGUgb3Igbm90LCBzZWN1cmUgb3Igbm9uLXNlY3VyZSwgYW5kIHNvIG9uKS4gSW4gdGhlIGNhc2Ugb2YKK3RoZSBFTDEmMCB0cmFuc2xhdGlvbiByZWdpbWUsIHRoZSBhdHRyaWJ1dGVzIGFsc28gc3BlY2lmeSB3aGV0aGVyIHRoZSByZWdpb24gaXMKK2EgVXNlciByZWdpb24gKEVMMCkgb3IgUHJpdmlsZWdlZCByZWdpb24gKEVMMSkuIFNlZSB0aGUgYGBtbWFwX2F0dHJfdGBgCitlbnVtZXJhdGlvbiB0eXBlIGluIGB4bGF0XF90YWJsZXNcX3YyLmhgXy4gTm90ZSB0aGF0IGZvciB0aGUgRUwxJjAgdHJhbnNsYXRpb24KK3JlZ2ltZSB0aGUgRXhlY3V0ZSBOZXZlciBhdHRyaWJ1dGUgaXMgc2V0IHNpbXVsdGFuZW91c2x5IGZvciBib3RoIEVMMSBhbmQgRUwwLgogCitUaGUgZ3JhbnVsYXJpdHkgY29udHJvbHMgdGhlIHRyYW5zbGF0aW9uIHRhYmxlIGxldmVsIHRvIGdvIGRvd24gdG8gd2hlbiBtYXBwaW5nCit0aGUgcmVnaW9uLiBGb3IgZXhhbXBsZSwgYXNzdW1pbmcgdGhlIE1NVSBoYXMgYmVlbiBjb25maWd1cmVkIHRvIHVzZSBhIDRLQgorZ3JhbnVsZSBzaXplLCB0aGUgbGlicmFyeSBtaWdodCBtYXAgYSAyTUIgbWVtb3J5IHJlZ2lvbiB1c2luZyBlaXRoZXIgb2YgdGhlIHR3bworZm9sbG93aW5nIG9wdGlvbnM6CisKKy0gdXNpbmcgYSBzaW5nbGUgbGV2ZWwtMiB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyeTsKKy0gdXNpbmcgYSBsZXZlbC0yIGludGVybWVkaWF0ZSBlbnRyeSB0byBhIGxldmVsLTMgdHJhbnNsYXRpb24gdGFibGUgKHdoaWNoCisgIGNvbnRhaW5zIDUxMiBlbnRyaWVzLCBlYWNoIG1hcHBpbmcgNEtCKS4KKworVGhlIGZpcnN0IHNvbHV0aW9uIHBvdGVudGlhbGx5IHJlcXVpcmVzIGxlc3MgdHJhbnNsYXRpb24gdGFibGVzLCBoZW5jZQorcG90ZW50aWFsbHkgbGVzcyBtZW1vcnkuICBIb3dldmVyLCBpZiBwYXJ0IG9mIHRoaXMgMk1CIHJlZ2lvbiBpcyBsYXRlciByZW1hcHBlZAord2l0aCBkaWZmZXJlbnQgbWVtb3J5IGF0dHJpYnV0ZXMsIHRoZSBsaWJyYXJ5IG1pZ2h0IG5lZWQgdG8gc3BsaXQgdGhlIGV4aXN0aW5nCitwYWdlIHRhYmxlcyB0byByZWZpbmUgdGhlIG1hcHBpbmdzLiBJZiBhIHNpbmdsZSBsZXZlbC0yIGVudHJ5IGhhcyBiZWVuIHVzZWQKK2hlcmUsIGEgbGV2ZWwtMyB0YWJsZSB3aWxsIG5lZWQgdG8gYmUgYWxsb2NhdGVkIG9uIHRoZSBmbHkgYW5kIHRoZSBsZXZlbC0yCittb2RpZmllZCB0byBwb2ludCB0byB0aGlzIG5ldyBsZXZlbC0zIHRhYmxlLiBUaGlzIGhhcyBhIHBlcmZvcm1hbmNlIGNvc3QgYXQKK3J1bi10aW1lLgorCitJZiB0aGUgdXNlciBrbm93cyB1cGZyb250IHRoYXQgc3VjaCBhIHJlbWFwcGluZyBvcGVyYXRpb24gaXMgbGlrZWx5IHRvIGhhcHBlbgordGhlbiB0aGV5IG1pZ2h0IGVuZm9yY2UgYSA0S0IgbWFwcGluZyBncmFudWxhcml0eSBmb3IgdGhpcyAyTUIgcmVnaW9uIGZyb20gdGhlCitiZWdpbm5pbmc7IHJlbWFwcGluZyBzb21lIG9mIHRoZXNlIDRLQiBwYWdlcyBvbiB0aGUgZmx5IHRoZW4gYmVjb21lcyBhCitsaWdodHdlaWdodCBvcGVyYXRpb24uCisKK1RoZSByZWdpb24ncyBncmFudWxhcml0eSBpcyBhbiBvcHRpb25hbCBmaWVsZDsgaWYgaXQgaXMgbm90IHNwZWNpZmllZCB0aGUKK2xpYnJhcnkgd2lsbCBjaG9vc2UgdGhlIG1hcHBpbmcgZ3JhbnVsYXJpdHkgZm9yIHRoaXMgcmVnaW9uIGFzIGl0IHNlZXMgZml0IChtb3JlCitkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiBgVGhlIG1lbW9yeSBtYXBwaW5nIGFsZ29yaXRobWBfIHNlY3Rpb24gYmVsb3cpLgogCiBUcmFuc2xhdGlvbiBDb250ZXh0CiB+fn5+fn5+fn5+fn5+fn5+fn5+CkBAIC0xOTAsNiArMjE5LDExIEBACiBjb21wYXRpYmlsaXR5IGJyZWFrcywgc2hvdWxkIHRoZSBgYG1tYXBfcmVnaW9uYGAgc3RydWN0dXJlIHR5cGUgZXZvbHZlIGluIHRoZQogZnV0dXJlLgogCitUaGUgYGBNQVBfUkVHSU9OKClgYCBhbmQgYGBNQVBfUkVHSU9OX0ZMQVQoKWBgIG1hY3JvcyBkbyBub3QgYWxsb3cgc3BlY2lmeWluZyBhCittYXBwaW5nIGdyYW51bGFyaXR5LCB3aGljaCBsZWF2ZXMgdGhlIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gZnJlZSB0byBjaG9vc2UKK2l0LiBIb3dldmVyLCBpbiBjYXNlcyB3aGVyZSBhIHNwZWNpZmljIGdyYW51bGFyaXR5IGlzIHJlcXVpcmVkLCB0aGUKK2BgTUFQX1JFR0lPTjIoKWBgIG1hY3JvIG1pZ2h0IGJlIHVzZWQgaW5zdGVhZC4KKwogQXMgZXhwbGFpbmVkIGVhcmxpZXIgaW4gdGhpcyBkb2N1bWVudCwgd2hlbiB0aGUgZHluYW1pYyBtYXBwaW5nIGZlYXR1cmUgaXMKIGRpc2FibGVkLCB0aGVyZSBpcyBubyBub3Rpb24gb2YgZHluYW1pYyByZWdpb25zLiBDb25jZXB0dWFsbHksIHRoZXJlIGFyZSBvbmx5CiBzdGF0aWMgcmVnaW9ucy4gRm9yIHRoaXMgcmVhc29uIChhbmQgdG8gcmV0YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKQEAgLTI2NSw2ICsyOTksOSBAQAogQ29yZSBtb2R1bGUKIH5+fn5+fn5+fn5+CiAKK0Zyb20gbW1hcCByZWdpb25zIHRvIHRyYW5zbGF0aW9uIHRhYmxlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKIEFsbCB0aGUgQVBJcyBpbiB0aGlzIG1vZHVsZSB3b3JrIG9uIGEgdHJhbnNsYXRpb24gY29udGV4dC4gVGhlIHRyYW5zbGF0aW9uCiBjb250ZXh0IGNvbnRhaW5zIHRoZSBsaXN0IG9mIGBgbW1hcF9yZWdpb25gYCwgd2hpY2ggaG9sZHMgdGhlIGluZm9ybWF0aW9uIG9mIGFsbAogdGhlIHJlZ2lvbnMgdGhhdCBhcmUgbWFwcGVkIGF0IGFueSBnaXZlbiB0aW1lLiBXaGVuZXZlciB0aGVyZSBpcyBhIHJlcXVlc3QgdG8KQEAgLTI4OCwxNCArMzI1LDE4IEBACiBiZSBhZGRlZC4gQ2hhbmdlcyB0byB0aGUgdHJhbnNsYXRpb24gdGFibGVzIChhcyB3ZWxsIGFzIHRoZSBtbWFwIHJlZ2lvbnMgbGlzdCkKIHdpbGwgdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkuCiAKK1RoZSBtZW1vcnkgbWFwcGluZyBhbGdvcml0aG0KK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKwogVGhlIG1hcHBpbmcgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSByZWN1cnNpdmUgYWxnb3JpdGhtLiBJdCBpcyBob3dldmVyCiBib3VuZCBieSB0aGUgbGV2ZWwgb2YgZGVwdGggb2YgdGhlIHRyYW5zbGF0aW9uIHRhYmxlcyAodGhlIEFSTXY4LUEgYXJjaGl0ZWN0dXJlCiBhbGxvd3MgdXAgdG8gNCBsb29rdXAgbGV2ZWxzKS4KIAotQnkgZGVmYXVsdCwgdGhlIGFsZ29yaXRobSB3aWxsIGF0dGVtcHQgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiB0cmFuc2xhdGlvbgotdGFibGVzIGNyZWF0ZWQgdG8gc2F0aXNmeSB0aGUgdXNlcidzIHJlcXVlc3QuIEl0IHdpbGwgZmF2b3VyIG1hcHBpbmcgYSByZWdpb24KLXVzaW5nIHRoZSBiaWdnZXN0IHBvc3NpYmxlIGJsb2Nrcywgb25seSBjcmVhdGluZyBhIHN1Yi10YWJsZSBpZiBpdCBpcyBzdHJpY3RseQotbmVjZXNzYXJ5LiBUaGlzIGlzIHRvIHJlZHVjZSB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0aGUgZmlybXdhcmUuCitCeSBkZWZhdWx0IFsjZ3JhbnVsYXJpdHktcmVmXV8sIHRoZSBhbGdvcml0aG0gd2lsbCBhdHRlbXB0IHRvIG1pbmltaXplIHRoZQorbnVtYmVyIG9mIHRyYW5zbGF0aW9uIHRhYmxlcyBjcmVhdGVkIHRvIHNhdGlzZnkgdGhlIHVzZXIncyByZXF1ZXN0LiBJdCB3aWxsCitmYXZvdXIgbWFwcGluZyBhIHJlZ2lvbiB1c2luZyB0aGUgYmlnZ2VzdCBwb3NzaWJsZSBibG9ja3MsIG9ubHkgY3JlYXRpbmcgYQorc3ViLXRhYmxlIGlmIGl0IGlzIHN0cmljdGx5IG5lY2Vzc2FyeS4gVGhpcyBpcyB0byByZWR1Y2UgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YKK3RoZSBmaXJtd2FyZS4KIAogVGhlIG1vc3QgY29tbW9uIHJlYXNvbiBmb3IgbmVlZGluZyBhIHN1Yi10YWJsZSBpcyB3aGVuIGEgc3BlY2lmaWMgbWFwcGluZwogcmVxdWlyZXMgYSBmaW5lciBncmFudWxhcml0eS4gTWlzYWxpZ25lZCByZWdpb25zIGFsc28gcmVxdWlyZSBhIGZpbmVyCkBAIC0zMjIsNiArMzYzLDEyIEBACiByZWZlciB0byB0aGUgY29tbWVudHMgaW4gdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBjb3JlIG1vZHVsZSBmb3IgbW9yZSBkZXRhaWxzCiBhYm91dCB0aGUgc29ydGluZyBhbGdvcml0aG0gaW4gdXNlLgogCisuLiBbI2dyYW51bGFyaXR5LXJlZl0gVGhhdCBpcywgd2hlbiBtbWFwIHJlZ2lvbnMgZG8gbm90IGVuZm9yY2UgdGhlaXIgbWFwcGluZworICAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5LgorCitUTEIgbWFpbnRlbmFuY2Ugb3BlcmF0aW9ucworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKwogVGhlIGxpYnJhcnkgdGFrZXMgY2FyZSBvZiBwZXJmb3JtaW5nIFRMQiBtYWludGVuYW5jZSBvcGVyYXRpb25zIHdoZW4gcmVxdWlyZWQuCiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgdXNlciByZXF1ZXN0cyByZW1vdmluZyBhIGR5bmFtaWMgcmVnaW9uLCB0aGUgbGlicmFyeQogaW52YWxpZGF0ZXMgYWxsIFRMQiBlbnRyaWVzIGFzc29jaWF0ZWQgdG8gdGhhdCByZWdpb24gdG8gZW5zdXJlIHRoYXQgdGhlc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXJtL2Njbi9jY24uYyBiL2RyaXZlcnMvYXJtL2Njbi9jY24uYwppbmRleCBlYzI2NGQyLi5hZmI3ZDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FybS9jY24vY2NuLmMKKysrIGIvZHJpdmVycy9hcm0vY2NuL2Njbi5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAkJbm9kZV9pZCA9IGNjbl9wbGF0X2Rlc2MtPm1hc3Rlcl90b19ybl9pZF9tYXBbaWZhY2VfaWRdOwogCiAJCS8qIFNldCB0aGUgYml0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBub2RlIElEICovCi0JCXJuX2lkX21hcCB8PSAoMVVMIDw8IG5vZGVfaWQpOworCQlybl9pZF9tYXAgfD0gKDFVTEwgPDwgbm9kZV9pZCk7CiAJfQogCiAJcmV0dXJuIHJuX2lkX21hcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXJtL2Njbi9jY25fcHJpdmF0ZS5oIGIvZHJpdmVycy9hcm0vY2NuL2Njbl9wcml2YXRlLmgKaW5kZXggZjcxNTk3Yy4uYzE3YzI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hcm0vY2NuL2Njbl9wcml2YXRlLmgKKysrIGIvZHJpdmVycy9hcm0vY2NuL2Njbl9wcml2YXRlLmgKQEAgLTEzNCwxMyArMTM0LDEzIEBACiAjZGVmaW5lIEhORl9TQU1fQ1RSTF9TTjFfSURfU0hJRlQJOAogI2RlZmluZSBITkZfU0FNX0NUUkxfU04yX0lEX1NISUZUCTE2CiAKLSNkZWZpbmUgSE5GX1NBTV9DVFJMX1RBQjBfTUFTSwkJMHgzZlVMCisjZGVmaW5lIEhORl9TQU1fQ1RSTF9UQUIwX01BU0sJCVVMTCgweDNmKQogI2RlZmluZSBITkZfU0FNX0NUUkxfVEFCMF9TSElGVAkJNDgKLSNkZWZpbmUgSE5GX1NBTV9DVFJMX1RBQjFfTUFTSwkJMHgzZlVMCisjZGVmaW5lIEhORl9TQU1fQ1RSTF9UQUIxX01BU0sJCVVMTCgweDNmKQogI2RlZmluZSBITkZfU0FNX0NUUkxfVEFCMV9TSElGVAkJNTYKIAogI2RlZmluZSBITkZfU0FNX0NUUkxfM1NOX0VOQl9TSElGVAkzMgotI2RlZmluZSBITkZfU0FNX0NUUkxfM1NOX0VOQl9NQVNLCTB4MDFVTAorI2RlZmluZSBITkZfU0FNX0NUUkxfM1NOX0VOQl9NQVNLCVVMTCgweDAxKQogCiAvKgogICogTWFjcm8gdG8gY3JlYXRlIGEgdmFsdWUgc3VpdGFibGUgZm9yIHByb2dyYW1taW5nIGludG8gYSBITkYgU0FNIENvbnRyb2wKQEAgLTE2OSw3ICsxNjksNyBAQAogI2RlZmluZSBGT1JfRUFDSF9CSVQoYml0X3BvcywgYml0X21hcCkJCQlcCiAJZm9yIChiaXRfcG9zID0gX19idWlsdGluX2N0emxsKGJpdF9tYXApOwlcCiAJICAgICBiaXRfbWFwOwkJCQkJXAotCSAgICAgYml0X21hcCAmPSB+KDFVTCA8PCBiaXRfcG9zKSwJCVwKKwkgICAgIGJpdF9tYXAgJj0gfigxVUxMIDw8IChiaXRfcG9zKSksCQlcCiAJICAgICBiaXRfcG9zID0gX19idWlsdGluX2N0emxsKGJpdF9tYXApKQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hcm0vZ2ljL2NvbW1vbi9naWNfY29tbW9uLmMgYi9kcml2ZXJzL2FybS9naWMvY29tbW9uL2dpY19jb21tb24uYwppbmRleCA2NTM1ODEzLi5kNTIzNzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FybS9naWMvY29tbW9uL2dpY19jb21tb24uYworKysgYi9kcml2ZXJzL2FybS9naWMvY29tbW9uL2dpY19jb21tb24uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAqLwpAQCAtMjczLDYgKzI3MywxNCBAQAogCWdpY2Rfd3JpdGVfaWNwZW5kcihiYXNlLCBpZCwgKDEgPDwgYml0X251bSkpOwogfQogCit1bnNpZ25lZCBpbnQgZ2ljZF9nZXRfaXNhY3RpdmVyKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQpCit7CisJdW5zaWduZWQgaW50IGJpdF9udW0gPSBpZCAmICgoMSA8PCBJU0FDVElWRVJfU0hJRlQpIC0gMSk7CisJdW5zaWduZWQgaW50IHJlZ192YWwgPSBnaWNkX3JlYWRfaXNhY3RpdmVyKGJhc2UsIGlkKTsKKworCXJldHVybiAocmVnX3ZhbCA+PiBiaXRfbnVtKSAmIDB4MTsKK30KKwogdm9pZCBnaWNkX3NldF9pc2FjdGl2ZXIodWludHB0cl90IGJhc2UsIHVuc2lnbmVkIGludCBpZCkKIHsKIAl1bnNpZ25lZCBiaXRfbnVtID0gaWQgJiAoKDEgPDwgSVNBQ1RJVkVSX1NISUZUKSAtIDEpOwpAQCAtMjkxLDMgKzI5OSwxNSBAQAogewogCW1taW9fd3JpdGVfOChiYXNlICsgR0lDRF9JUFJJT1JJVFlSICsgaWQsIHByaSAmIEdJQ19QUklfTUFTSyk7CiB9CisKK3ZvaWQgZ2ljZF9zZXRfaWNmZ3IodWludHB0cl90IGJhc2UsIHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IGNmZykKK3sKKwl1bnNpZ25lZCBiaXRfbnVtID0gaWQgJiAoKDEgPDwgSUNGR1JfU0hJRlQpIC0gMSk7CisJdWludDMyX3QgcmVnX3ZhbCA9IGdpY2RfcmVhZF9pY2ZncihiYXNlLCBpZCk7CisKKwkvKiBDbGVhciB0aGUgZmllbGQsIGFuZCBpbnNlcnQgcmVxdWlyZWQgY29uZmlndXJhdGlvbiAqLworCXJlZ192YWwgJj0gfihHSUNfQ0ZHX01BU0sgPDwgYml0X251bSk7CisJcmVnX3ZhbCB8PSAoKGNmZyAmIEdJQ19DRkdfTUFTSykgPDwgYml0X251bSk7CisKKwlnaWNkX3dyaXRlX2ljZmdyKGJhc2UsIGlkLCByZWdfdmFsKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXJtL2dpYy9jb21tb24vZ2ljX2NvbW1vbl9wcml2YXRlLmggYi9kcml2ZXJzL2FybS9naWMvY29tbW9uL2dpY19jb21tb25fcHJpdmF0ZS5oCmluZGV4IDIwNzdjYzQuLjIwMjFmOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXJtL2dpYy9jb21tb24vZ2ljX2NvbW1vbl9wcml2YXRlLmgKKysrIGIvZHJpdmVycy9hcm0vZ2ljL2NvbW1vbi9naWNfY29tbW9uX3ByaXZhdGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgKi8KQEAgLTczLDggKzczLDEwIEBACiB2b2lkIGdpY2Rfc2V0X2ljZW5hYmxlcih1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkKTsKIHZvaWQgZ2ljZF9zZXRfaXNwZW5kcih1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkKTsKIHZvaWQgZ2ljZF9zZXRfaWNwZW5kcih1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkKTsKK3Vuc2lnbmVkIGludCBnaWNkX2dldF9pc2FjdGl2ZXIodWludHB0cl90IGJhc2UsIHVuc2lnbmVkIGludCBpZCk7CiB2b2lkIGdpY2Rfc2V0X2lzYWN0aXZlcih1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkKTsKIHZvaWQgZ2ljZF9zZXRfaWNhY3RpdmVyKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQpOwogdm9pZCBnaWNkX3NldF9pcHJpb3JpdHlyKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcmkpOwordm9pZCBnaWNkX3NldF9pY2Zncih1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgY2ZnKTsKIAogI2VuZGlmIC8qIEdJQ19DT01NT05fUFJJVkFURV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hcm0vZ2ljL3YyL2dpY3YyX2hlbHBlcnMuYyBiL2RyaXZlcnMvYXJtL2dpYy92Mi9naWN2Ml9oZWxwZXJzLmMKaW5kZXggN2NkYmMyNy4uMGRmNTBmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hcm0vZ2ljL3YyL2dpY3YyX2hlbHBlcnMuYworKysgYi9kcml2ZXJzL2FybS9naWMvdjIvZ2ljdjJfaGVscGVycy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGRlYnVnLmg+CiAjaW5jbHVkZSA8Z2ljX2NvbW1vbi5oPgorI2luY2x1ZGUgPGludGVycnVwdF9wcm9wcy5oPgogI2luY2x1ZGUgIi4uL2NvbW1vbi9naWNfY29tbW9uX3ByaXZhdGUuaCIKICNpbmNsdWRlICJnaWN2Ml9wcml2YXRlLmgiCiAKQEAgLTcyLDE1ICs3Myw2IEBACiAJbW1pb193cml0ZV8zMihiYXNlICsgR0lDRF9TUEVORFNHSVIgKyAobiA8PCAyKSwgdmFsKTsKIH0KIAotLyoKLSAqIEFjY2Vzc29yIHRvIHdyaXRlIHRoZSBHSUMgRGlzdHJpYnV0b3IgSVRBUkdFVFNSIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gKiBpbnRlcnJ1cHQgYGlkYC4KLSAqLwotdm9pZCBnaWNkX3NldF9pdGFyZ2V0c3IodWludHB0cl90IGJhc2UsIHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHRhcmdldCkKLXsKLQltbWlvX3dyaXRlXzgoYmFzZSArIEdJQ0RfSVRBUkdFVFNSICsgaWQsIHRhcmdldCAmIEdJQ19UQVJHRVRfQ1BVX01BU0spOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR2V0IHRoZSBjdXJyZW50IENQVSBiaXQgbWFzayBmcm9tIEdJQ0RfSVRBUkdFVFNSMAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEyMSw2ICsxMTMsNyBAQAogCQlnaWNkX3dyaXRlX2ljZmdyKGdpY2RfYmFzZSwgaW5kZXgsIDApOwogfQogCisjaWYgIUVSUk9SX0RFUFJFQ0FURUQKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29uZmlndXJlIHNlY3VyZSBHMCBTUElzLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE1NCw4ICsxNDcsNTAgQEAKIAl9CiAKIH0KKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbmZpZ3VyZSBwcm9wZXJ0aWVzIG9mIHNlY3VyZSBHMCBTUElzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2ljdjJfc2VjdXJlX3NwaXNfY29uZmlndXJlX3Byb3BzKHVpbnRwdHJfdCBnaWNkX2Jhc2UsCisJCWNvbnN0IGludGVycnVwdF9wcm9wX3QgKmludGVycnVwdF9wcm9wcywKKwkJdW5zaWduZWQgaW50IGludGVycnVwdF9wcm9wc19udW0pCit7CisJdW5zaWduZWQgaW50IGk7CisJY29uc3QgaW50ZXJydXB0X3Byb3BfdCAqcHJvcF9kZXNjOworCisJLyogTWFrZSBzdXJlIHRoZXJlJ3MgYSB2YWxpZCBwcm9wZXJ0eSBhcnJheSAqLworCWFzc2VydChpbnRlcnJ1cHRfcHJvcHNfbnVtICE9IDAgPyAodWludHB0cl90KSBpbnRlcnJ1cHRfcHJvcHMgOiAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnRlcnJ1cHRfcHJvcHNfbnVtOyBpKyspIHsKKwkJcHJvcF9kZXNjID0gJmludGVycnVwdF9wcm9wc1tpXTsKKworCQlpZiAocHJvcF9kZXNjLT5pbnRyX251bSA8IE1JTl9TUElfSUQpCisJCQljb250aW51ZTsKKworCQkvKiBDb25maWd1cmUgdGhpcyBpbnRlcnJ1cHQgYXMgYSBzZWN1cmUgaW50ZXJydXB0ICovCisJCWFzc2VydChwcm9wX2Rlc2MtPmludHJfZ3JwID09IEdJQ1YyX0lOVFJfR1JPVVAwKTsKKwkJZ2ljZF9jbHJfaWdyb3VwcihnaWNkX2Jhc2UsIHByb3BfZGVzYy0+aW50cl9udW0pOworCisJCS8qIFNldCB0aGUgcHJpb3JpdHkgb2YgdGhpcyBpbnRlcnJ1cHQgKi8KKwkJZ2ljZF9zZXRfaXByaW9yaXR5cihnaWNkX2Jhc2UsIHByb3BfZGVzYy0+aW50cl9udW0sCisJCQkJcHJvcF9kZXNjLT5pbnRyX3ByaSk7CisKKwkJLyogVGFyZ2V0IHRoZSBzZWN1cmUgaW50ZXJydXB0cyB0byBwcmltYXJ5IENQVSAqLworCQlnaWNkX3NldF9pdGFyZ2V0c3IoZ2ljZF9iYXNlLCBwcm9wX2Rlc2MtPmludHJfbnVtLAorCQkJCWdpY3YyX2dldF9jcHVpZl9pZChnaWNkX2Jhc2UpKTsKKworCQkvKiBTZXQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gKi8KKwkJZ2ljZF9zZXRfaWNmZ3IoZ2ljZF9iYXNlLCBwcm9wX2Rlc2MtPmludHJfbnVtLAorCQkJCXByb3BfZGVzYy0+aW50cl9jZmcpOworCisJCS8qIEVuYWJsZSB0aGlzIGludGVycnVwdCAqLworCQlnaWNkX3NldF9pc2VuYWJsZXIoZ2ljZF9iYXNlLCBwcm9wX2Rlc2MtPmludHJfbnVtKTsKKwl9Cit9CisKKyNpZiAhRVJST1JfREVQUkVDQVRFRAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEhlbHBlciBmdW5jdGlvbiB0byBjb25maWd1cmUgc2VjdXJlIEcwIFNHSXMgYW5kIFBQSXMuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBnaWN2Ml9zZWN1cmVfcHBpX3NnaV9zZXR1cCh1aW50cHRyX3QgZ2ljZF9iYXNlLApAQCAtMjAyLDMgKzIzNyw2NiBAQAogCS8qIEVuYWJsZSB0aGUgR3JvdXAgMCBTR0lzIGFuZCBQUElzICovCiAJZ2ljZF93cml0ZV9pc2VuYWJsZXIoZ2ljZF9iYXNlLCAwLCBzZWNfcHBpX3NnaV9tYXNrKTsKIH0KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbmZpZ3VyZSBwcm9wZXJ0aWVzIG9mIHNlY3VyZSBHMCBTR0lzIGFuZCBQUElzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2ljdjJfc2VjdXJlX3BwaV9zZ2lfc2V0dXBfcHJvcHModWludHB0cl90IGdpY2RfYmFzZSwKKwkJY29uc3QgaW50ZXJydXB0X3Byb3BfdCAqaW50ZXJydXB0X3Byb3BzLAorCQl1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3Byb3BzX251bSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1aW50MzJfdCBzZWNfcHBpX3NnaV9tYXNrID0gMDsKKwljb25zdCBpbnRlcnJ1cHRfcHJvcF90ICpwcm9wX2Rlc2M7CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBhIHZhbGlkIHByb3BlcnR5IGFycmF5ICovCisJYXNzZXJ0KGludGVycnVwdF9wcm9wc19udW0gIT0gMCA/ICh1aW50cHRyX3QpIGludGVycnVwdF9wcm9wcyA6IDEpOworCisJLyoKKwkgKiBEaXNhYmxlIGFsbCBTR0lzIChpbXAuIGRlZi4pL1BQSXMgYmVmb3JlIGNvbmZpZ3VyaW5nIHRoZW0uIFRoaXMgaXMgYQorCSAqIG1vcmUgc2NhbGFibGUgYXBwcm9hY2ggYXMgaXQgYXZvaWRzIGNsZWFyaW5nIHRoZSBlbmFibGUgYml0cyBpbiB0aGUKKwkgKiBHSUNEX0NUTFIuCisJICovCisJZ2ljZF93cml0ZV9pY2VuYWJsZXIoZ2ljZF9iYXNlLCAwLCB+MCk7CisKKwkvKiBTZXR1cCB0aGUgZGVmYXVsdCBQUEkvU0dJIHByaW9yaXRpZXMgZG9pbmcgZm91ciBhdCBhIHRpbWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUlOX1NQSV9JRDsgaSArPSA0KQorCQlnaWNkX3dyaXRlX2lwcmlvcml0eXIoZ2ljZF9iYXNlLCBpLCBHSUNEX0lQUklPUklUWVJfREVGX1ZBTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW50ZXJydXB0X3Byb3BzX251bTsgaSsrKSB7CisJCXByb3BfZGVzYyA9ICZpbnRlcnJ1cHRfcHJvcHNbaV07CisKKwkJaWYgKHByb3BfZGVzYy0+aW50cl9udW0gPj0gTUlOX1NQSV9JRCkKKwkJCWNvbnRpbnVlOworCisJCS8qIENvbmZpZ3VyZSB0aGlzIGludGVycnVwdCBhcyBhIHNlY3VyZSBpbnRlcnJ1cHQgKi8KKwkJYXNzZXJ0KHByb3BfZGVzYy0+aW50cl9ncnAgPT0gR0lDVjJfSU5UUl9HUk9VUDApOworCisJCS8qCisJCSAqIFNldCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBmb3IgUFBJcy4gQ29uZmlndXJhdGlvbiBmb3IgU0dJcworCQkgKiBhcmUgaWdub3JlZC4KKwkJICovCisJCWlmICgocHJvcF9kZXNjLT5pbnRyX251bSA+PSBNSU5fUFBJX0lEKSAmJgorCQkJCShwcm9wX2Rlc2MtPmludHJfbnVtIDwgTUlOX1NQSV9JRCkpIHsKKwkJCWdpY2Rfc2V0X2ljZmdyKGdpY2RfYmFzZSwgcHJvcF9kZXNjLT5pbnRyX251bSwKKwkJCQkJcHJvcF9kZXNjLT5pbnRyX2NmZyk7CisJCX0KKworCQkvKiBXZSBoYXZlIGFuIFNHSSBvciBhIFBQSS4gVGhleSBhcmUgR3JvdXAwIGF0IHJlc2V0ICovCisJCXNlY19wcGlfc2dpX21hc2sgfD0gKDF1IDw8IHByb3BfZGVzYy0+aW50cl9udW0pOworCisJCS8qIFNldCB0aGUgcHJpb3JpdHkgb2YgdGhpcyBpbnRlcnJ1cHQgKi8KKwkJZ2ljZF9zZXRfaXByaW9yaXR5cihnaWNkX2Jhc2UsIHByb3BfZGVzYy0+aW50cl9udW0sCisJCQkJcHJvcF9kZXNjLT5pbnRyX3ByaSk7CisJfQorCisJLyoKKwkgKiBJbnZlcnQgdGhlIGJpdG1hc2sgdG8gY3JlYXRlIGEgbWFzayBmb3Igbm9uLXNlY3VyZSBQUElzIGFuZCBTR0lzLgorCSAqIFByb2dyYW0gdGhlIEdJQ0RfSUdST1VQUjAgd2l0aCB0aGlzIGJpdCBtYXNrLgorCSAqLworCWdpY2Rfd3JpdGVfaWdyb3VwcihnaWNkX2Jhc2UsIDAsIH5zZWNfcHBpX3NnaV9tYXNrKTsKKworCS8qIEVuYWJsZSB0aGUgR3JvdXAgMCBTR0lzIGFuZCBQUElzICovCisJZ2ljZF93cml0ZV9pc2VuYWJsZXIoZ2ljZF9iYXNlLCAwLCBzZWNfcHBpX3NnaV9tYXNrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXJtL2dpYy92Mi9naWN2Ml9tYWluLmMgYi9kcml2ZXJzL2FybS9naWMvdjIvZ2ljdjJfbWFpbi5jCmluZGV4IGRlYWM5MjcuLjg3OTg2NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXJtL2dpYy92Mi9naWN2Ml9tYWluLmMKKysrIGIvZHJpdmVycy9hcm0vZ2ljL3YyL2dpY3YyX21haW4uYwpAQCAtMTAsMTEgKzEwLDIwIEBACiAjaW5jbHVkZSA8ZGVidWcuaD4KICNpbmNsdWRlIDxnaWNfY29tbW9uLmg+CiAjaW5jbHVkZSA8Z2ljdjIuaD4KKyNpbmNsdWRlIDxpbnRlcnJ1cHRfcHJvcHMuaD4KKyNpbmNsdWRlIDxzcGlubG9jay5oPgogI2luY2x1ZGUgIi4uL2NvbW1vbi9naWNfY29tbW9uX3ByaXZhdGUuaCIKICNpbmNsdWRlICJnaWN2Ml9wcml2YXRlLmgiCiAKIHN0YXRpYyBjb25zdCBnaWN2Ml9kcml2ZXJfZGF0YV90ICpkcml2ZXJfZGF0YTsKIAorLyoKKyAqIFNwaW5sb2NrIHRvIGd1YXJkIHJlZ2lzdGVycyBuZWVkaW5nIHJlYWQtbW9kaWZ5LXdyaXRlLiBBUElzIHByb3RlY3RlZCBieSB0aGlzCisgKiBzcGlubG9jayBhcmUgdXNlZCBlaXRoZXIgYXQgYm9vdCB0aW1lICh3aGVuIG9ubHkgYSBzaW5nbGUgQ1BVIGlzIGFjdGl2ZSksIG9yCisgKiB3aGVuIHRoZSBzeXN0ZW0gaXMgZnVsbHkgY29oZXJlbnQuCisgKi8KK3NwaW5sb2NrX3QgZ2ljX2xvY2s7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBFbmFibGUgc2VjdXJlIGludGVycnVwdHMgYW5kIHVzZSBGSVFzIHRvIHJvdXRlIHRoZW0uIERpc2FibGUgbGVnYWN5IGJ5cGFzcwogICogYW5kIHNldCB0aGUgcHJpb3JpdHkgbWFzayByZWdpc3RlciB0byBhbGxvdyBhbGwgaW50ZXJydXB0cyB0byB0cmlja2xlIGluLgpAQCAtNjMsMTMgKzcyLDMyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBnaWN2Ml9wY3B1X2Rpc3RpZl9pbml0KHZvaWQpCiB7CisJdW5zaWduZWQgaW50IGN0bHI7CisKIAlhc3NlcnQoZHJpdmVyX2RhdGEpOwogCWFzc2VydChkcml2ZXJfZGF0YS0+Z2ljZF9iYXNlKTsKLQlhc3NlcnQoZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9hcnJheSk7CiAKLQlnaWN2Ml9zZWN1cmVfcHBpX3NnaV9zZXR1cChkcml2ZXJfZGF0YS0+Z2ljZF9iYXNlLAotCQkJCQlkcml2ZXJfZGF0YS0+ZzBfaW50ZXJydXB0X251bSwKLQkJCQkJZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9hcnJheSk7CisjaWYgIUVSUk9SX0RFUFJFQ0FURUQKKwlpZiAoZHJpdmVyX2RhdGEtPmludGVycnVwdF9wcm9wcyAhPSBOVUxMKSB7CisjZW5kaWYKKwkJZ2ljdjJfc2VjdXJlX3BwaV9zZ2lfc2V0dXBfcHJvcHMoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwKKwkJCQlkcml2ZXJfZGF0YS0+aW50ZXJydXB0X3Byb3BzLAorCQkJCWRyaXZlcl9kYXRhLT5pbnRlcnJ1cHRfcHJvcHNfbnVtKTsKKyNpZiAhRVJST1JfREVQUkVDQVRFRAorCX0gZWxzZSB7CisJCWFzc2VydChkcml2ZXJfZGF0YS0+ZzBfaW50ZXJydXB0X2FycmF5KTsKKwkJZ2ljdjJfc2VjdXJlX3BwaV9zZ2lfc2V0dXAoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwKKwkJCQlkcml2ZXJfZGF0YS0+ZzBfaW50ZXJydXB0X251bSwKKwkJCQlkcml2ZXJfZGF0YS0+ZzBfaW50ZXJydXB0X2FycmF5KTsKKwl9CisjZW5kaWYKKworCS8qIEVuYWJsZSBHMCBpbnRlcnJ1cHRzIGlmIG5vdCBhbHJlYWR5ICovCisJY3RsciA9IGdpY2RfcmVhZF9jdGxyKGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOworCWlmICgoY3RsciAmIENUTFJfRU5BQkxFX0cwX0JJVCkgPT0gMCkgeworCQlnaWNkX3dyaXRlX2N0bHIoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwKKwkJCQljdGxyIHwgQ1RMUl9FTkFCTEVfRzBfQklUKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04Myw3ICsxMTEsNiBAQAogCiAJYXNzZXJ0KGRyaXZlcl9kYXRhKTsKIAlhc3NlcnQoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSk7Ci0JYXNzZXJ0KGRyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfYXJyYXkpOwogCiAJLyogRGlzYWJsZSB0aGUgZGlzdHJpYnV0b3IgYmVmb3JlIGdvaW5nIGZ1cnRoZXIgKi8KIAljdGxyID0gZ2ljZF9yZWFkX2N0bHIoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSk7CkBAIC05MywxMCArMTIwLDIyIEBACiAJLyogU2V0IHRoZSBkZWZhdWx0IGF0dHJpYnV0ZSBvZiBhbGwgU1BJcyAqLwogCWdpY3YyX3NwaXNfY29uZmlndXJlX2RlZmF1bHRzKGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOwogCi0JLyogQ29uZmlndXJlIHRoZSBHMCBTUElzICovCi0JZ2ljdjJfc2VjdXJlX3NwaXNfY29uZmlndXJlKGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UsCi0JCQkJCWRyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfbnVtLAotCQkJCQlkcml2ZXJfZGF0YS0+ZzBfaW50ZXJydXB0X2FycmF5KTsKKyNpZiAhRVJST1JfREVQUkVDQVRFRAorCWlmIChkcml2ZXJfZGF0YS0+aW50ZXJydXB0X3Byb3BzICE9IE5VTEwpIHsKKyNlbmRpZgorCQlnaWN2Ml9zZWN1cmVfc3Bpc19jb25maWd1cmVfcHJvcHMoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwKKwkJCQlkcml2ZXJfZGF0YS0+aW50ZXJydXB0X3Byb3BzLAorCQkJCWRyaXZlcl9kYXRhLT5pbnRlcnJ1cHRfcHJvcHNfbnVtKTsKKyNpZiAhRVJST1JfREVQUkVDQVRFRAorCX0gZWxzZSB7CisJCWFzc2VydChkcml2ZXJfZGF0YS0+ZzBfaW50ZXJydXB0X2FycmF5KTsKKworCQkvKiBDb25maWd1cmUgdGhlIEcwIFNQSXMgKi8KKwkJZ2ljdjJfc2VjdXJlX3NwaXNfY29uZmlndXJlKGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UsCisJCQkJZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9udW0sCisJCQkJZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9hcnJheSk7CisJfQorI2VuZGlmCiAKIAkvKiBSZS1lbmFibGUgdGhlIHNlY3VyZSBTUElzIG5vdyB0aGF0IHRoZXkgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgKi8KIAlnaWNkX3dyaXRlX2N0bHIoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwgY3RsciB8IENUTFJfRU5BQkxFX0cwX0JJVCk7CkBAIC0xMTIsMjUgKzE1MSw0NCBAQAogCWFzc2VydChwbGF0X2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOwogCWFzc2VydChwbGF0X2RyaXZlcl9kYXRhLT5naWNjX2Jhc2UpOwogCi0JLyoKLQkgKiBUaGUgcGxhdGZvcm0gc2hvdWxkIHByb3ZpZGUgYSBsaXN0IG9mIGF0bGVhc3Qgb25lIHR5cGUgb2YKLQkgKiBpbnRlcnJ1cHRzCi0JICovCi0JYXNzZXJ0KHBsYXRfZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9hcnJheSk7CisjaWYgIUVSUk9SX0RFUFJFQ0FURUQKKwlpZiAocGxhdF9kcml2ZXJfZGF0YS0+aW50ZXJydXB0X3Byb3BzID09IE5VTEwpIHsKKwkJLyogSW50ZXJydXB0IHByb3BlcnRpZXMgYXJyYXkgc2l6ZSBtdXN0IGJlIDAgKi8KKwkJYXNzZXJ0KHBsYXRfZHJpdmVyX2RhdGEtPmludGVycnVwdF9wcm9wc19udW0gPT0gMCk7CiAKLQkvKgotCSAqIElmIHRoZXJlIGFyZSBubyBpbnRlcnJ1cHRzIG9mIGEgcGFydGljdWxhciB0eXBlLCB0aGVuIHRoZSBudW1iZXIgb2YKLQkgKiBpbnRlcnJ1cHRzIG9mIHRoYXQgdHlwZSBzaG91bGQgYmUgMCBhbmQgdmljZS12ZXJzYS4KLQkgKi8KLQlhc3NlcnQocGxhdF9kcml2ZXJfZGF0YS0+ZzBfaW50ZXJydXB0X2FycmF5ID8KLQkgICAgICAgcGxhdF9kcml2ZXJfZGF0YS0+ZzBfaW50ZXJydXB0X251bSA6Ci0JICAgICAgIHBsYXRfZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9udW0gPT0gMCk7CisJCS8qIFRoZSBwbGF0Zm9ybSBzaG91bGQgcHJvdmlkZSBhIGxpc3Qgb2Ygc2VjdXJlIGludGVycnVwdHMgKi8KKwkJYXNzZXJ0KHBsYXRfZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9hcnJheSk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUgYXJlIG5vIGludGVycnVwdHMgb2YgYSBwYXJ0aWN1bGFyIHR5cGUsIHRoZW4gdGhlCisJCSAqIG51bWJlciBvZiBpbnRlcnJ1cHRzIG9mIHRoYXQgdHlwZSBzaG91bGQgYmUgMCBhbmQgdmljZS12ZXJzYS4KKwkJICovCisJCWFzc2VydChwbGF0X2RyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfYXJyYXkgPworCQkJCXBsYXRfZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9udW0gOgorCQkJCXBsYXRfZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9udW0gPT0gMCk7CisJfQorI2Vsc2UKKwlhc3NlcnQocGxhdF9kcml2ZXJfZGF0YS0+aW50ZXJydXB0X3Byb3BzICE9IE5VTEwpOworCWFzc2VydChwbGF0X2RyaXZlcl9kYXRhLT5pbnRlcnJ1cHRfcHJvcHNfbnVtID4gMCk7CisjZW5kaWYKIAogCS8qIEVuc3VyZSB0aGF0IHRoaXMgaXMgYSBHSUN2MiBzeXN0ZW0gKi8KIAlnaWNfdmVyc2lvbiA9IGdpY2RfcmVhZF9waWRyMihwbGF0X2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOwogCWdpY192ZXJzaW9uID0gKGdpY192ZXJzaW9uID4+IFBJRFIyX0FSQ0hfUkVWX1NISUZUKQogCQkJCQkmIFBJRFIyX0FSQ0hfUkVWX01BU0s7Ci0JYXNzZXJ0KGdpY192ZXJzaW9uID09IEFSQ0hfUkVWX0dJQ1YyKTsKKworCS8qCisJICogR0lDdjEgd2l0aCBzZWN1cml0eSBleHRlbnNpb24gY29tcGxpZXMgd2l0aCB0cnVzdGVkIGZpcm13YXJlCisJICogR0lDdjIgZHJpdmVyIGFzIGZhciBhcyB2aXJ0dWFsaXphdGlvbiBhbmQgZmV3IHRyaWNreSBwb3dlcgorCSAqIGZlYXR1cmVzIGFyZSBub3QgdXNlZC4gR0lDdjIgZmVhdHVyZXMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZAorCSAqIGJ5IEdJQ3YxIHdpdGggU2VjdXJpdHkgRXh0ZW5zaW9ucyBhcmU6CisJICogLSB2aXJ0dWFsIGludGVycnVwdCBzdXBwb3J0LgorCSAqIC0gd2FrZSB1cCBldmVudHMuCisJICogLSB3cml0ZWFibGUgR0lDIHN0YXRlIHJlZ2lzdGVyIChmb3IgcG93ZXIgc2VxdWVuY2VzKQorCSAqIC0gaW50ZXJydXB0IHByaW9yaXR5IGRyb3AuCisJICogLSBpbnRlcnJ1cHQgc2lnbmFsIGJ5cGFzcy4KKwkgKi8KKwlhc3NlcnQoZ2ljX3ZlcnNpb24gPT0gQVJDSF9SRVZfR0lDVjIgfHwgZ2ljX3ZlcnNpb24gPT0gQVJDSF9SRVZfR0lDVjEpOwogCiAJZHJpdmVyX2RhdGEgPSBwbGF0X2RyaXZlcl9kYXRhOwogCkBAIC0yNDAsMyArMjk4LDI3MiBAQAogCiAJcmV0dXJuIGdpY2RfZ2V0X2lncm91cHIoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwgaWQpOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmlvcml0eSBvZiB0aGUgaW50ZXJydXB0IHRoZSBwcm9jZXNzb3IgaXMKKyAqIGN1cnJlbnRseSBzZXJ2aWNpbmcuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordW5zaWduZWQgaW50IGdpY3YyX2dldF9ydW5uaW5nX3ByaW9yaXR5KHZvaWQpCit7CisJYXNzZXJ0KGRyaXZlcl9kYXRhKTsKKwlhc3NlcnQoZHJpdmVyX2RhdGEtPmdpY2NfYmFzZSk7CisKKwlyZXR1cm4gZ2ljY19yZWFkX3Jwcihkcml2ZXJfZGF0YS0+Z2ljY19iYXNlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgR0lDdjIgdGFyZ2V0IG1hc2sgcGF0dGVybiBmb3IgdGhlIGN1cnJlbnQgUEUuIFRoZSBQRQorICogdGFyZ2V0IG1hc2sgaXMgdXNlZCB0byB0cmFuc2xhdGUgbGluZWFyIFBFIGluZGV4IChyZXR1cm5lZCBieSBwbGF0Zm9ybSBjb3JlCisgKiBwb3NpdGlvbikgdG8gYSBiaXQgbWFzayB1c2VkIHdoZW4gdGFyZ2V0aW5nIGludGVycnVwdHMgdG8gYSBQRSwgdml6LiB3aGVuCisgKiByYWlzaW5nIFNHSXMgYW5kIHJvdXRpbmcgU1BJcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdpY3YyX3NldF9wZV90YXJnZXRfbWFzayh1bnNpZ25lZCBpbnQgcHJvY19udW0pCit7CisJYXNzZXJ0KGRyaXZlcl9kYXRhKTsKKwlhc3NlcnQoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSk7CisJYXNzZXJ0KGRyaXZlcl9kYXRhLT50YXJnZXRfbWFza3MpOworCWFzc2VydChwcm9jX251bSA8IEdJQ1YyX01BWF9UQVJHRVRfUEUpOworCWFzc2VydChwcm9jX251bSA8IGRyaXZlcl9kYXRhLT50YXJnZXRfbWFza3NfbnVtKTsKKworCS8qIFJldHVybiBpZiB0aGUgdGFyZ2V0IG1hc2sgaXMgYWxyZWFkeSBwb3B1bGF0ZWQgKi8KKwlpZiAoZHJpdmVyX2RhdGEtPnRhcmdldF9tYXNrc1twcm9jX251bV0pCisJCXJldHVybjsKKworCS8qCisJICogVXBkYXRlIHRhcmdldCByZWdpc3RlciBjb3JyZXNwb25kaW5nIHRvIHRoaXMgQ1BVIGFuZCBmbHVzaCBmb3IgaXQgdG8KKwkgKiBiZSB2aXNpYmxlIHRvIG90aGVyIENQVXMuCisJICovCisJaWYgKGRyaXZlcl9kYXRhLT50YXJnZXRfbWFza3NbcHJvY19udW1dID09IDApIHsKKwkJZHJpdmVyX2RhdGEtPnRhcmdldF9tYXNrc1twcm9jX251bV0gPQorCQkJZ2ljdjJfZ2V0X2NwdWlmX2lkKGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOworI2lmICFIV19BU1NJU1RFRF9DT0hFUkVOQ1kKKwkJLyoKKwkJICogUEVzIG9ubHkgdXBkYXRlIHRoZWlyIG93biBtYXNrcy4gUHJpbWFyeSB1cGRhdGVzIGl0IHdpdGgKKwkJICogY2FjaGVzIG9uLiBCdXQgYmVjYXVzZSBzZWNvbmRhcmllcyBkb2VzIGl0IHdpdGggY2FjaGVzIG9mZiwKKwkJICogYWxsIHVwZGF0ZXMgZ28gdG8gbWVtb3J5IGRpcmVjdGx5LCBhbmQgdGhlcmUncyBubyBkYW5nZXIgb2YKKwkJICogc2Vjb25kYXJpZXMgb3ZlcndyaXRpbmcgZWFjaCBvdGhlcnMnIG1hc2ssIGRlc3BpdGUKKwkJICogdGFyZ2V0X21hc2tzW10gbm90IGJlaW5nIGNhY2hlIGxpbmUgYWxpZ25lZC4KKwkJICovCisJCWZsdXNoX2RjYWNoZV9yYW5nZSgodWludHB0cl90KQorCQkJCSZkcml2ZXJfZGF0YS0+dGFyZ2V0X21hc2tzW3Byb2NfbnVtXSwKKwkJCQlzaXplb2YoZHJpdmVyX2RhdGEtPnRhcmdldF9tYXNrc1twcm9jX251bV0pKTsKKyNlbmRpZgorCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYWN0aXZlIHN0YXR1cyBvZiB0aGUgaW50ZXJydXB0IChlaXRoZXIgYmVjYXVzZSB0aGUKKyAqIHN0YXRlIGlzIGFjdGl2ZSwgb3IgYWN0aXZlIGFuZCBwZW5kaW5nKS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1bnNpZ25lZCBpbnQgZ2ljdjJfZ2V0X2ludGVycnVwdF9hY3RpdmUodW5zaWduZWQgaW50IGlkKQoreworCWFzc2VydChkcml2ZXJfZGF0YSk7CisJYXNzZXJ0KGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOworCWFzc2VydChpZCA8PSBNQVhfU1BJX0lEKTsKKworCXJldHVybiBnaWNkX2dldF9pc2FjdGl2ZXIoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwgaWQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgaWRlbnRpZmllZCBieSBpZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdpY3YyX2VuYWJsZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGlkKQoreworCWFzc2VydChkcml2ZXJfZGF0YSk7CisJYXNzZXJ0KGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOworCWFzc2VydChpZCA8PSBNQVhfU1BJX0lEKTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgYW55IHNoYXJlZCB2YXJpYWJsZSB1cGRhdGVzIGRlcGVuZGluZyBvbiBvdXQgb2YgYmFuZAorCSAqIGludGVycnVwdCB0cmlnZ2VyIGFyZSBvYnNlcnZlZCBiZWZvcmUgZW5hYmxpbmcgaW50ZXJydXB0LgorCSAqLworCWRzYmlzaHN0KCk7CisJZ2ljZF9zZXRfaXNlbmFibGVyKGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UsIGlkKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGludGVycnVwdCBpZGVudGlmaWVkIGJ5IGlkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2ljdjJfZGlzYWJsZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGlkKQoreworCWFzc2VydChkcml2ZXJfZGF0YSk7CisJYXNzZXJ0KGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOworCWFzc2VydChpZCA8PSBNQVhfU1BJX0lEKTsKKworCS8qCisJICogRGlzYWJsZSBpbnRlcnJ1cHQsIGFuZCBlbnN1cmUgdGhhdCBhbnkgc2hhcmVkIHZhcmlhYmxlIHVwZGF0ZXMKKwkgKiBkZXBlbmRpbmcgb24gb3V0IG9mIGJhbmQgaW50ZXJydXB0IHRyaWdnZXIgYXJlIG9ic2VydmVkIGFmdGVyd2FyZHMuCisJICovCisJZ2ljZF9zZXRfaWNlbmFibGVyKGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UsIGlkKTsKKwlkc2Jpc2hzdCgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgYXMgc3VwcGxpZWQgZm9yIHRoZSBnaXZlbiBpbnRlcnJ1cHQKKyAqIGlkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2ljdjJfc2V0X2ludGVycnVwdF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcmlvcml0eSkKK3sKKwlhc3NlcnQoZHJpdmVyX2RhdGEpOworCWFzc2VydChkcml2ZXJfZGF0YS0+Z2ljZF9iYXNlKTsKKwlhc3NlcnQoaWQgPD0gTUFYX1NQSV9JRCk7CisKKwlnaWNkX3NldF9pcHJpb3JpdHlyKGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UsIGlkLCBwcmlvcml0eSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIGFzc2lnbnMgZ3JvdXAgZm9yIHRoZSBpbnRlcnJ1cHQgaWRlbnRpZmllZCBieSBpZC4gVGhlIGdyb3VwIGNhbgorICogYmUgYW55IG9mIEdJQ1YyX0lOVFJfR1JPVVAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnaWN2Ml9zZXRfaW50ZXJydXB0X3R5cGUodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlhc3NlcnQoZHJpdmVyX2RhdGEpOworCWFzc2VydChkcml2ZXJfZGF0YS0+Z2ljZF9iYXNlKTsKKwlhc3NlcnQoaWQgPD0gTUFYX1NQSV9JRCk7CisKKwkvKiBTZXJpYWxpemUgcmVhZC1tb2RpZnktd3JpdGUgdG8gRGlzdHJpYnV0b3IgcmVnaXN0ZXJzICovCisJc3Bpbl9sb2NrKCZnaWNfbG9jayk7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBHSUNWMl9JTlRSX0dST1VQMToKKwkJZ2ljZF9zZXRfaWdyb3Vwcihkcml2ZXJfZGF0YS0+Z2ljZF9iYXNlLCBpZCk7CisJCWJyZWFrOworCWNhc2UgR0lDVjJfSU5UUl9HUk9VUDA6CisJCWdpY2RfY2xyX2lncm91cHIoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwgaWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhc3NlcnQoMCk7CisJfQorCXNwaW5fdW5sb2NrKCZnaWNfbG9jayk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIHJhaXNlcyB0aGUgc3BlY2lmaWVkIFNHSSB0byByZXF1ZXN0ZWQgdGFyZ2V0cy4KKyAqCisgKiBUaGUgcHJvY19udW0gcGFyYW1ldGVyIG11c3QgYmUgdGhlIGxpbmVhciBpbmRleCBvZiB0aGUgdGFyZ2V0IFBFIGluIHRoZQorICogc3lzdGVtLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2ljdjJfcmFpc2Vfc2dpKGludCBzZ2lfbnVtLCBpbnQgcHJvY19udW0pCit7CisJdW5zaWduZWQgaW50IHNnaXJfdmFsLCB0YXJnZXQ7CisKKwlhc3NlcnQoZHJpdmVyX2RhdGEpOworCWFzc2VydChwcm9jX251bSA8IEdJQ1YyX01BWF9UQVJHRVRfUEUpOworCWFzc2VydChkcml2ZXJfZGF0YS0+Z2ljZF9iYXNlKTsKKworCS8qCisJICogVGFyZ2V0IG1hc2tzIGFycmF5IG11c3QgaGF2ZSBiZWVuIHN1cHBsaWVkLCBhbmQgdGhlIGNvcmUgcG9zaXRpb24KKwkgKiBzaG91bGQgYmUgdmFsaWQuCisJICovCisJYXNzZXJ0KGRyaXZlcl9kYXRhLT50YXJnZXRfbWFza3MpOworCWFzc2VydChwcm9jX251bSA8IGRyaXZlcl9kYXRhLT50YXJnZXRfbWFza3NfbnVtKTsKKworCS8qIERvbid0IHJhaXNlIFNHSSBpZiB0aGUgbWFzayBoYXNuJ3QgYmVlbiBwb3B1bGF0ZWQgKi8KKwl0YXJnZXQgPSBkcml2ZXJfZGF0YS0+dGFyZ2V0X21hc2tzW3Byb2NfbnVtXTsKKwlhc3NlcnQodGFyZ2V0ICE9IDApOworCisJc2dpcl92YWwgPSBHSUNWMl9TR0lSX1ZBTFVFKFNHSVJfVEdUX1NQRUNJRklDLCB0YXJnZXQsIHNnaV9udW0pOworCisJLyoKKwkgKiBFbnN1cmUgdGhhdCBhbnkgc2hhcmVkIHZhcmlhYmxlIHVwZGF0ZXMgZGVwZW5kaW5nIG9uIG91dCBvZiBiYW5kCisJICogaW50ZXJydXB0IHRyaWdnZXIgYXJlIG9ic2VydmVkIGJlZm9yZSByYWlzaW5nIFNHSS4KKwkgKi8KKwlkc2Jpc2hzdCgpOworCWdpY2Rfd3JpdGVfc2dpcihkcml2ZXJfZGF0YS0+Z2ljZF9iYXNlLCBzZ2lyX3ZhbCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGludGVycnVwdCByb3V0aW5nIGZvciB0aGUgZ2l2ZW4gU1BJIGludGVycnVwdCBpZC4KKyAqIFRoZSBpbnRlcnJ1cHQgcm91dGluZyBpcyBzcGVjaWZpZWQgaW4gcm91dGluZyBtb2RlLiBUaGUgcHJvY19udW0gcGFyYW1ldGVyIGlzCisgKiBsaW5lYXIgaW5kZXggb2YgdGhlIFBFIHRvIHRhcmdldCBTUEkuIFdoZW4gcHJvY19udW0gPCAwLCB0aGUgU1BJIG1heSB0YXJnZXQKKyAqIGFsbCBQRXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnaWN2Ml9zZXRfc3BpX3JvdXRpbmcodW5zaWduZWQgaW50IGlkLCBpbnQgcHJvY19udW0pCit7CisJaW50IHRhcmdldDsKKworCWFzc2VydChkcml2ZXJfZGF0YSk7CisJYXNzZXJ0KGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOworCisJYXNzZXJ0KGlkID49IE1JTl9TUElfSUQgJiYgaWQgPD0gTUFYX1NQSV9JRCk7CisKKwkvKgorCSAqIFRhcmdldCBtYXNrcyBhcnJheSBtdXN0IGhhdmUgYmVlbiBzdXBwbGllZCwgYW5kIHRoZSBjb3JlIHBvc2l0aW9uCisJICogc2hvdWxkIGJlIHZhbGlkLgorCSAqLworCWFzc2VydChkcml2ZXJfZGF0YS0+dGFyZ2V0X21hc2tzKTsKKwlhc3NlcnQocHJvY19udW0gPCBHSUNWMl9NQVhfVEFSR0VUX1BFKTsKKwlhc3NlcnQocHJvY19udW0gPCBkcml2ZXJfZGF0YS0+dGFyZ2V0X21hc2tzX251bSk7CisKKwlpZiAocHJvY19udW0gPCAwKSB7CisJCS8qIFRhcmdldCBhbGwgUEVzICovCisJCXRhcmdldCA9IEdJQ19UQVJHRVRfQ1BVX01BU0s7CisJfSBlbHNlIHsKKwkJLyogRG9uJ3Qgcm91dGUgaW50ZXJydXB0IGlmIHRoZSBtYXNrIGhhc24ndCBiZWVuIHBvcHVsYXRlZCAqLworCQl0YXJnZXQgPSBkcml2ZXJfZGF0YS0+dGFyZ2V0X21hc2tzW3Byb2NfbnVtXTsKKwkJYXNzZXJ0KHRhcmdldCAhPSAwKTsKKwl9CisKKwlnaWNkX3NldF9pdGFyZ2V0c3IoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwgaWQsIHRhcmdldCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgcGVuZGluZyBzdGF0dXMgb2YgYW4gaW50ZXJydXB0IGlkZW50aWZpZWQgYnkgaWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnaWN2Ml9jbGVhcl9pbnRlcnJ1cHRfcGVuZGluZyh1bnNpZ25lZCBpbnQgaWQpCit7CisJYXNzZXJ0KGRyaXZlcl9kYXRhKTsKKwlhc3NlcnQoZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSk7CisKKwkvKiBTR0lzIGNhbid0IGJlIGNsZWFyZWQgcGVuZGluZyAqLworCWFzc2VydChpZCA+PSBNSU5fUFBJX0lEKTsKKworCS8qCisJICogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHQsIGFuZCBlbnN1cmUgdGhhdCBhbnkgc2hhcmVkIHZhcmlhYmxlIHVwZGF0ZXMKKwkgKiBkZXBlbmRpbmcgb24gb3V0IG9mIGJhbmQgaW50ZXJydXB0IHRyaWdnZXIgYXJlIG9ic2VydmVkIGFmdGVyd2FyZHMuCisJICovCisJZ2ljZF9zZXRfaWNwZW5kcihkcml2ZXJfZGF0YS0+Z2ljZF9iYXNlLCBpZCk7CisJZHNiaXNoc3QoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcGVuZGluZyBzdGF0dXMgb2YgYW4gaW50ZXJydXB0IGlkZW50aWZpZWQgYnkgaWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnaWN2Ml9zZXRfaW50ZXJydXB0X3BlbmRpbmcodW5zaWduZWQgaW50IGlkKQoreworCWFzc2VydChkcml2ZXJfZGF0YSk7CisJYXNzZXJ0KGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOworCisJLyogU0dJcyBjYW4ndCBiZSBjbGVhcmVkIHBlbmRpbmcgKi8KKwlhc3NlcnQoaWQgPj0gTUlOX1BQSV9JRCk7CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IGFueSBzaGFyZWQgdmFyaWFibGUgdXBkYXRlcyBkZXBlbmRpbmcgb24gb3V0IG9mIGJhbmQKKwkgKiBpbnRlcnJ1cHQgdHJpZ2dlciBhcmUgb2JzZXJ2ZWQgYmVmb3JlIHNldHRpbmcgaW50ZXJydXB0IHBlbmRpbmcuCisJICovCisJZHNiaXNoc3QoKTsKKwlnaWNkX3NldF9pc3BlbmRyKGRyaXZlcl9kYXRhLT5naWNkX2Jhc2UsIGlkKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUE1SIHJlZ2lzdGVyIHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlLiBSZXR1cm5zIHRoZQorICogb3JpZ2luYWwgUE1SLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Vuc2lnbmVkIGludCBnaWN2Ml9zZXRfcG1yKHVuc2lnbmVkIGludCBtYXNrKQoreworCXVuc2lnbmVkIGludCBvbGRfbWFzazsKKworCWFzc2VydChkcml2ZXJfZGF0YSk7CisJYXNzZXJ0KGRyaXZlcl9kYXRhLT5naWNjX2Jhc2UpOworCisJb2xkX21hc2sgPSBnaWNjX3JlYWRfcG1yKGRyaXZlcl9kYXRhLT5naWNjX2Jhc2UpOworCisJLyoKKwkgKiBPcmRlciBtZW1vcnkgdXBkYXRlcyB3LnIudC4gUE1SIHdyaXRlLCBhbmQgZW5zdXJlIHRoZXkncmUgdmlzaWJsZQorCSAqIGJlZm9yZSBwb3RlbnRpYWwgb3V0IG9mIGJhbmQgaW50ZXJydXB0IHRyaWdnZXIgYmVjYXVzZSBvZiBQTVIgdXBkYXRlLgorCSAqLworCWRtYmlzaHN0KCk7CisJZ2ljY193cml0ZV9wbXIoZHJpdmVyX2RhdGEtPmdpY2NfYmFzZSwgbWFzayk7CisJZHNiaXNoc3QoKTsKKworCXJldHVybiBvbGRfbWFzazsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXJtL2dpYy92Mi9naWN2Ml9wcml2YXRlLmggYi9kcml2ZXJzL2FybS9naWMvdjIvZ2ljdjJfcHJpdmF0ZS5oCmluZGV4IDkxYWI0M2EuLjI1NjAwZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXJtL2dpYy92Mi9naWN2Ml9wcml2YXRlLmgKKysrIGIvZHJpdmVycy9hcm0vZ2ljL3YyL2dpY3YyX3ByaXZhdGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgKi8KQEAgLTE1LDEyICsxNSwyMCBAQAogICogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBnaWN2Ml9zcGlzX2NvbmZpZ3VyZV9kZWZhdWx0cyh1aW50cHRyX3QgZ2ljZF9iYXNlKTsKKyNpZiAhRVJST1JfREVQUkVDQVRFRAogdm9pZCBnaWN2Ml9zZWN1cmVfc3Bpc19jb25maWd1cmUodWludHB0cl90IGdpY2RfYmFzZSwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBudW1faW50cywKIAkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc2VjX2ludHJfbGlzdCk7CiB2b2lkIGdpY3YyX3NlY3VyZV9wcGlfc2dpX3NldHVwKHVpbnRwdHJfdCBnaWNkX2Jhc2UsCiAJCQkJCXVuc2lnbmVkIGludCBudW1faW50cywKIAkJCQkJY29uc3QgdW5zaWduZWQgaW50ICpzZWNfaW50cl9saXN0KTsKKyNlbmRpZgordm9pZCBnaWN2Ml9zZWN1cmVfc3Bpc19jb25maWd1cmVfcHJvcHModWludHB0cl90IGdpY2RfYmFzZSwKKwkJY29uc3QgaW50ZXJydXB0X3Byb3BfdCAqaW50ZXJydXB0X3Byb3BzLAorCQl1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3Byb3BzX251bSk7Cit2b2lkIGdpY3YyX3NlY3VyZV9wcGlfc2dpX3NldHVwX3Byb3BzKHVpbnRwdHJfdCBnaWNkX2Jhc2UsCisJCWNvbnN0IGludGVycnVwdF9wcm9wX3QgKmludGVycnVwdF9wcm9wcywKKwkJdW5zaWduZWQgaW50IGludGVycnVwdF9wcm9wc19udW0pOwogdW5zaWduZWQgaW50IGdpY3YyX2dldF9jcHVpZl9pZCh1aW50cHRyX3QgYmFzZSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMiw2ICs0MCwyNSBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR0lDIERpc3RyaWJ1dG9yIGludGVyZmFjZSBhY2Nlc3NvcnMgZm9yIHdyaXRpbmcgZW50aXJlIHJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdpY2RfZ2V0X2l0YXJnZXRzcih1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkKQoreworCXJldHVybiBtbWlvX3JlYWRfOChiYXNlICsgR0lDRF9JVEFSR0VUU1IgKyBpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnaWNkX3NldF9pdGFyZ2V0c3IodWludHB0cl90IGJhc2UsIHVuc2lnbmVkIGludCBpZCwKKwkJdW5zaWduZWQgaW50IHRhcmdldCkKK3sKKwltbWlvX3dyaXRlXzgoYmFzZSArIEdJQ0RfSVRBUkdFVFNSICsgaWQsIHRhcmdldCAmIEdJQ19UQVJHRVRfQ1BVX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2ljZF93cml0ZV9zZ2lyKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCW1taW9fd3JpdGVfMzIoYmFzZSArIEdJQ0RfU0dJUiwgdmFsKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdJQyBDUFUgaW50ZXJmYWNlIGFjY2Vzc29ycyBmb3IgcmVhZGluZyBlbnRpcmUgcmVnaXN0ZXJzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC04MCw2ICsxMDcsMTEgQEAKIAlyZXR1cm4gbW1pb19yZWFkXzMyKGJhc2UgKyBHSUNDX0lJRFIpOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnaWNjX3JlYWRfcnByKHVpbnRwdHJfdCBiYXNlKQoreworCXJldHVybiBtbWlvX3JlYWRfMzIoYmFzZSArIEdJQ0NfUlBSKTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdJQyBDUFUgaW50ZXJmYWNlIGFjY2Vzc29ycyBmb3Igd3JpdGluZyBlbnRpcmUgcmVnaXN0ZXJzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hcm0vZ2ljL3YzL2FybV9naWN2M19jb21tb24uYyBiL2RyaXZlcnMvYXJtL2dpYy92My9hcm1fZ2ljdjNfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1NTJjYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYXJtL2dpYy92My9hcm1fZ2ljdjNfY29tbW9uLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKy8qCisgKiBEcml2ZXIgZm9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZmVhdHVyZXMgdGhhdCBhcmUgaWRlbnRpY2FsIGluIEFSTSBHSUN2MworKiBpbXBsZW1lbnRhdGlvbnMgKEdJQy01MDAgYW5kIEdJQy02MDAgZm9yIG5vdykuIFRoaXMgZHJpdmVyIG9ubHkgb3ZlcnJpZGVzCisqIEFQSXMgdGhhdCBhcmUgZGlmZmVyZW50IHRvIHRob3NlIGdlbmVyaWMgb25lcyBpbiBHSUN2MyBkcml2ZXIuCisgKi8KKworI2luY2x1ZGUgPGFyY2hfaGVscGVycy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGdpY3YzLmg+CisKKyNpbmNsdWRlICJnaWN2M19wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJtX2dpY3YzX2NvbW1vbi5oIgorCisvKgorICogRmx1c2ggdGhlIGludGVybmFsIEdJQyBjYWNoZSBvZiB0aGUgTFBJcyBwZW5kaW5nIHRhYmxlcyB0byBtZW1vcnkgYmVmb3JlCisgKiBzYXZpbmcgdGhlIHN0YXRlIG9mIHRoZSBSZWRpc3RyaWJ1dG9yLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSBwb3dlcmluZyBvZmYKKyAqIHRoZSBHSUMgd2hlbiB0aGUgcGVuZGluZyBzdGF0dXMgbXVzdCBiZSBwcmVzZXJ2ZWQuCisgKiBgcmRpc3RfcHJvY19udW1gIGlzIHRoZSBwcm9jZXNzb3IgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFJlZGlzdHJpYnV0b3Igb2YgdGhlCisgKiBjdXJyZW50IENQVS4KKyAqLwordm9pZCBhcm1fZ2ljdjNfZGlzdGlmX3ByZV9zYXZlKHVuc2lnbmVkIGludCByZGlzdF9wcm9jX251bSkKK3sKKwl1aW50cHRyX3QgZ2ljcl9iYXNlID0gMDsKKworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YSk7CisJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX2Jhc2VfYWRkcnMpOworCisJLyoKKwkgKiBUaGUgR0lDUl9XQUtFUi5TbGVlcCBiaXQgc2hvdWxkIGJlIHNldCBvbmx5IHdoZW4gYm90aAorCSAqIEdJQ1JfV0FLRVIuQ2hpbGRyZW5Bc2xlZXAgYW5kIEdJQ1JfV0FLRVIuUHJvY2Vzc29yU2xlZXAgYXJlIHNldCBvbgorCSAqIGFsbCB0aGUgUmVkaXN0cmlidXRvcnMuCisJICovCisJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9udW07IGkrKykgeworCQlnaWNyX2Jhc2UgPSBnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9iYXNlX2FkZHJzW2ldOworCQlhc3NlcnQoZ2ljcl9iYXNlKTsKKwkJYXNzZXJ0KGdpY3JfcmVhZF93YWtlcihnaWNyX2Jhc2UpICYgV0FLRVJfQ0FfQklUKTsKKwkJYXNzZXJ0KGdpY3JfcmVhZF93YWtlcihnaWNyX2Jhc2UpICYgV0FLRVJfUFNfQklUKTsKKwl9CisKKwlnaWNyX2Jhc2UgPSBnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9iYXNlX2FkZHJzW3JkaXN0X3Byb2NfbnVtXTsKKwkvKgorCSAqIEFjY29yZGluZyB0byB0aGUgVFJNLCB0aGVyZSBpcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUKKwkgKiBHSUNSX1dBS0VSLlNsZWVwIGFuZCBHSUNSX1dBS0VSLlF1aWVzY2VudCBiaXRzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkCisJICogdGhyb3VnaCBhbnkgb2YgdGhlIFJlZGlzdHJpYnV0b3IuCisJICovCisKKwkvKgorCSAqIFNldCBHSUNSX1dBS0VSLlNsZWVwCisJICogQWZ0ZXIgdGhpcyBwb2ludCwgdGhlIHN5c3RlbSBtdXN0IGJlIGNvbmZpZ3VyZWQgc28gdGhhdCB0aGUKKwkgKiB3YWtlX3JlcXVlc3Qgc2lnbmFscyBmb3IgdGhlIHJpZ2h0IGNvcmVzIGFyZSBhc3NlcnRlZCB3aGVuIGEgd2FrZXVwCisJICogaW50ZXJydXB0IGlzIGRldGVjdGVkLiBUaGUgR0lDIHdpbGwgbm90IGJlIGFibGUgdG8gZG8gdGhhdCBhbnltb3JlCisJICogd2hlbiB0aGUgR0lDUl9XQUtFUi5TbGVlcCBiaXQgaXMgc2V0IHRvIDEuCisJICovCisJZ2ljcl93cml0ZV93YWtlcihnaWNyX2Jhc2UsIGdpY3JfcmVhZF93YWtlcihnaWNyX2Jhc2UpIHwgV0FLRVJfU0xfQklUKTsKKworCS8qIFdhaXQgdW50aWwgdGhlIEdJQ1JfV0FLRVIuUXVpZXNjZW50IGJpdCBpcyBzZXQgKi8KKwl3aGlsZSAoIShnaWNyX3JlYWRfd2FrZXIoZ2ljcl9iYXNlKSAmIFdBS0VSX1FTQ19CSVQpKQorCQk7Cit9CisKKy8qCisgKiBBbGxvdyB0aGUgTFBJcyBwZW5kaW5nIHN0YXRlIHRvIGJlIHJlYWQgYmFjayBmcm9tIHRoZSB0YWJsZXMgaW4gbWVtb3J5IGFmdGVyCisgKiBoYXZpbmcgcmVzdG9yZWQgdGhlIHN0YXRlIG9mIHRoZSBHSUMgUmVkaXN0cmlidXRvci4KKyAqLwordm9pZCBhcm1fZ2ljdjNfZGlzdGlmX3Bvc3RfcmVzdG9yZSh1bnNpZ25lZCBpbnQgcmRpc3RfcHJvY19udW0pCit7CisJdWludHB0cl90IGdpY3JfYmFzZTsKKworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YSk7CisJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX2Jhc2VfYWRkcnMpOworCisJLyoKKwkgKiBBY2NvcmRpbmcgdG8gdGhlIFRSTSwgdGhlcmUgaXMgb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlCisJICogR0lDUl9XQUtFUi5TbGVlcCBhbmQgR0lDUl9XQUtFUi5RdWllc2NlbnQgYml0cyB0aGF0IGNhbiBiZSBhY2Nlc3NlZAorCSAqIHRocm91Z2ggYW55IG9mIHRoZSBSZWRpc3RyaWJ1dG9yLgorCSAqLworCWdpY3JfYmFzZSA9IGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX2Jhc2VfYWRkcnNbcmRpc3RfcHJvY19udW1dOworCWFzc2VydChnaWNyX2Jhc2UpOworCisJLyoKKwkgKiBXcml0ZXMgdG8gR0lDUl9XQUtFUi5TbGVlcCBiaXQgYXJlIGlnbm9yZWQgaWYgR0lDUl9XQUtFUi5RdWllc2NlbnQKKwkgKiBiaXQgaXMgbm90IHNldC4gV2Ugc2hvdWxkIGJlIGFscmlnaHQgb24gcG93ZXIgb24gcGF0aCwgdGhlcmVmb3JlCisJICogY29taW5nIG91dCBvZiBzbGVlcCBhbmQgUXVpZXNjZW50IHNob3VsZCBiZSBzZXQsIGJ1dCB3ZSBhc3NlcnQgaW4KKwkgKiBjYXNlLgorCSAqLworCWFzc2VydChnaWNyX3JlYWRfd2FrZXIoZ2ljcl9iYXNlKSAmIFdBS0VSX1FTQ19CSVQpOworCisJLyogQ2xlYXIgR0lDUl9XQUtFUi5TbGVlcCAqLworCWdpY3Jfd3JpdGVfd2FrZXIoZ2ljcl9iYXNlLCBnaWNyX3JlYWRfd2FrZXIoZ2ljcl9iYXNlKSAmIH5XQUtFUl9TTF9CSVQpOworCisJLyoKKwkgKiBXZSBkb24ndCBrbm93IGlmIHRoZSBlZmZlY3RzIG9mIHNldHRpbmcgR0lDUl9XQUtFUi5TbGVlcCBiaXQgaXMKKwkgKiBpbnN0YW50YW5lb3VzLCBzbyB3ZSB3YWl0IHVudGlsIHRoZSBpbnRlcmZhY2UgaXMgbm90IFF1aWVzY2VudAorCSAqIGFueW1vcmUuCisJICovCisJd2hpbGUgKGdpY3JfcmVhZF93YWtlcihnaWNyX2Jhc2UpICYgV0FLRVJfUVNDX0JJVCkKKwkJOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FybS9naWMvdjMvZ2ljNTAwLmMgYi9kcml2ZXJzL2FybS9naWMvdjMvZ2ljNTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAzZTMzZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYXJtL2dpYy92My9naWM1MDAuYwpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisvKgorICogRHJpdmVyIGZvciBHSUM1MDAtc3BlY2lmaWMgZmVhdHVyZXMuIFRoaXMgZHJpdmVyIG9ubHkgb3ZlcnJpZGVzIEFQSXMgdGhhdCBhcmUKKyAqIGRpZmZlcmVudCB0byB0aG9zZSBnZW5lcmljIG9uZXMgaW4gR0lDdjMgZHJpdmVyLgorICovCisjaW5jbHVkZSAiZ2ljdjNfcHJpdmF0ZS5oIgorCit2b2lkIGdpY3YzX2Rpc3RpZl9wcmVfc2F2ZSh1bnNpZ25lZCBpbnQgcHJvY19udW0pCit7CisJYXJtX2dpY3YzX2Rpc3RpZl9wcmVfc2F2ZShwcm9jX251bSk7Cit9CisKK3ZvaWQgZ2ljdjNfZGlzdGlmX3Bvc3RfcmVzdG9yZSh1bnNpZ25lZCBpbnQgcHJvY19udW0pCit7CisJYXJtX2dpY3YzX2Rpc3RpZl9wb3N0X3Jlc3RvcmUocHJvY19udW0pOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FybS9naWMvdjMvZ2ljNjAwLmMgYi9kcml2ZXJzL2FybS9naWMvdjMvZ2ljNjAwLmMKaW5kZXggNGVhMzFhYi4uZWI0ZmM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hcm0vZ2ljL3YzL2dpYzYwMC5jCisrKyBiL2RyaXZlcnMvYXJtL2dpYy92My9naWM2MDAuYwpAQCAtMTgsMzIgKzE4LDI5IEBACiAjaW5jbHVkZSAiZ2ljdjNfcHJpdmF0ZS5oIgogCiAvKiBHSUM2MDAtc3BlY2lmaWMgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBHSUNSX1BXUlIJCTB4MjQKKyNkZWZpbmUgR0lDUl9QV1JSCTB4MjQKIAogLyogR0lDUl9QV1JSIGZpZWxkcyAqLwogI2RlZmluZSBQV1JSX1JEUERfU0hJRlQJCTAKICNkZWZpbmUgUFdSUl9SREdQRF9TSElGVAkyCiAjZGVmaW5lIFBXUlJfUkRHUE9fU0hJRlQJMwogCi0jZGVmaW5lIFBXUlJfUkRHUEQJCSgxIDw8IFBXUlJfUkRHUERfU0hJRlQpCi0jZGVmaW5lIFBXUlJfUkRHUE8JCSgxIDw8IFBXUlJfUkRHUE9fU0hJRlQpCisjZGVmaW5lIFBXUlJfUkRHUEQJKDEgPDwgUFdSUl9SREdQRF9TSElGVCkKKyNkZWZpbmUgUFdSUl9SREdQTwkoMSA8PCBQV1JSX1JER1BPX1NISUZUKQogCiAvKiBWYWx1ZXMgdG8gd3JpdGUgdG8gR0lDUl9QV1JSIHJlZ2lzdGVyIHRvIHBvd2VyIHJlZGlzdHJpYnV0b3IgKi8KLSNkZWZpbmUgUFdSUl9PTgkJCSgwIDw8IFBXUlJfUkRQRF9TSElGVCkKLSNkZWZpbmUgUFdSUl9PRkYJCSgxIDw8IFBXUlJfUkRQRF9TSElGVCkKLQotLyogR2VuZXJpYyBHSUN2MyByZXNvdXJjZXMgKi8KLWV4dGVybiBjb25zdCBnaWN2M19kcml2ZXJfZGF0YV90ICpnaWN2M19kcml2ZXJfZGF0YTsKKyNkZWZpbmUgUFdSUl9PTgkJKDAgPDwgUFdSUl9SRFBEX1NISUZUKQorI2RlZmluZSBQV1JSX09GRgkoMSA8PCBQV1JSX1JEUERfU0hJRlQpCiAKIC8qIEdJQzYwMC1zcGVjaWZpYyBhY2Nlc3NvciBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkIGdpY3Jfd3JpdGVfcHdycih1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IHZhbCkKIHsKLSAgICAgICBtbWlvX3dyaXRlXzMyKGJhc2UgKyBHSUNSX1BXUlIsIHZhbCk7CisJbW1pb193cml0ZV8zMihiYXNlICsgR0lDUl9QV1JSLCB2YWwpOwogfQogCiBzdGF0aWMgdWludDMyX3QgZ2ljcl9yZWFkX3B3cnIodWludHB0cl90IGJhc2UpCiB7Ci0gICAgICAgcmV0dXJuIG1taW9fcmVhZF8zMihiYXNlICsgR0lDUl9QV1JSKTsKKwlyZXR1cm4gbW1pb19yZWFkXzMyKGJhc2UgKyBHSUNSX1BXUlIpOwogfQogCiBzdGF0aWMgaW50IGdpY3JfZ3JvdXBfcG93ZXJpbmdfZG93bih1aW50MzJfdCBwd3JyKQpAQCAtODIsNiArNzksMTYgQEAKIAl9CiB9CiAKK3ZvaWQgZ2ljdjNfZGlzdGlmX3ByZV9zYXZlKHVuc2lnbmVkIGludCBwcm9jX251bSkKK3sKKwlhcm1fZ2ljdjNfZGlzdGlmX3ByZV9zYXZlKHByb2NfbnVtKTsKK30KKwordm9pZCBnaWN2M19kaXN0aWZfcG9zdF9yZXN0b3JlKHVuc2lnbmVkIGludCBwcm9jX251bSkKK3sKKwlhcm1fZ2ljdjNfZGlzdGlmX3Bvc3RfcmVzdG9yZShwcm9jX251bSk7Cit9CisKIC8qCiAgKiBQb3dlciBvZmYgR0lDNjAwIHJlZGlzdHJpYnV0b3IKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hcm0vZ2ljL3YzL2dpY3YzX2hlbHBlcnMuYyBiL2RyaXZlcnMvYXJtL2dpYy92My9naWN2M19oZWxwZXJzLmMKaW5kZXggNzNhZDA2MC4uZGVlNjNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hcm0vZ2ljL3YzL2dpY3YzX2hlbHBlcnMuYworKysgYi9kcml2ZXJzL2FybS9naWMvdjMvZ2ljdjNfaGVscGVycy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGRlYnVnLmg+CiAjaW5jbHVkZSA8Z2ljX2NvbW1vbi5oPgorI2luY2x1ZGUgPGludGVycnVwdF9wcm9wcy5oPgogI2luY2x1ZGUgIi4uL2NvbW1vbi9naWNfY29tbW9uX3ByaXZhdGUuaCIKICNpbmNsdWRlICJnaWN2M19wcml2YXRlLmgiCiAKQEAgLTE3Miw2ICsxNzMsNTEgQEAKIH0KIAogLyoKKyAqIEFjY2Vzc29yIHRvIHNldCB0aGUgYml0IGNvcnJlc3BvbmRpbmcgdG8gaW50ZXJydXB0IElEIGluIEdJQyBSZS1kaXN0cmlidXRvcgorICogSUNFTkFCTEVSMC4KKyAqLwordm9pZCBnaWNyX3NldF9pY2VuYWJsZXIwKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQpCit7CisJdW5zaWduZWQgYml0X251bSA9IGlkICYgKCgxIDw8IElDRU5BQkxFUl9TSElGVCkgLSAxKTsKKworCWdpY3Jfd3JpdGVfaWNlbmFibGVyMChiYXNlLCAoMSA8PCBiaXRfbnVtKSk7Cit9CisKKy8qCisgKiBBY2Nlc3NvciB0byBzZXQgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvIGludGVycnVwdCBJRCBpbiBHSUMgUmUtZGlzdHJpYnV0b3IKKyAqIElTQUNUSVZFUjAuCisgKi8KK3Vuc2lnbmVkIGludCBnaWNyX2dldF9pc2FjdGl2ZXIwKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQpCit7CisJdW5zaWduZWQgYml0X251bSA9IGlkICYgKCgxIDw8IElTQUNUSVZFUl9TSElGVCkgLSAxKTsKKwl1bnNpZ25lZCBpbnQgcmVnX3ZhbCA9IGdpY3JfcmVhZF9pc2FjdGl2ZXIwKGJhc2UpOworCisJcmV0dXJuIChyZWdfdmFsID4+IGJpdF9udW0pICYgMHgxOworfQorCisvKgorICogQWNjZXNzb3IgdG8gY2xlYXIgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvIGludGVycnVwdCBJRCBpbiBHSUMgUmUtZGlzdHJpYnV0b3IKKyAqIElDUEVORFJSMC4KKyAqLwordm9pZCBnaWNyX3NldF9pY3BlbmRyMCh1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkKQoreworCXVuc2lnbmVkIGJpdF9udW0gPSBpZCAmICgoMSA8PCBJQ1BFTkRSX1NISUZUKSAtIDEpOworCisJZ2ljcl93cml0ZV9pY3BlbmRyMChiYXNlLCAoMSA8PCBiaXRfbnVtKSk7Cit9CisKKy8qCisgKiBBY2Nlc3NvciB0byBzZXQgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvIGludGVycnVwdCBJRCBpbiBHSUMgUmUtZGlzdHJpYnV0b3IKKyAqIElTUEVORFIwLgorICovCit2b2lkIGdpY3Jfc2V0X2lzcGVuZHIwKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQpCit7CisJdW5zaWduZWQgYml0X251bSA9IGlkICYgKCgxIDw8IElTUEVORFJfU0hJRlQpIC0gMSk7CisKKwlnaWNyX3dyaXRlX2lzcGVuZHIwKGJhc2UsICgxIDw8IGJpdF9udW0pKTsKK30KKworLyoKICAqIEFjY2Vzc29yIHRvIHNldCB0aGUgYnl0ZSBjb3JyZXNwb25kaW5nIHRvIGludGVycnVwdCBJRAogICogaW4gR0lDIFJlLWRpc3RyaWJ1dG9yIElQUklPUklUWVIuCiAgKi8KQEAgLTE4MCw2ICsyMjYsMzggQEAKIAltbWlvX3dyaXRlXzgoYmFzZSArIEdJQ1JfSVBSSU9SSVRZUiArIGlkLCBwcmkgJiBHSUNfUFJJX01BU0spOwogfQogCisvKgorICogQWNjZXNzb3IgdG8gc2V0IHRoZSBiaXQgZmllbGRzIGNvcnJlc3BvbmRpbmcgdG8gaW50ZXJydXB0IElECisgKiBpbiBHSUMgUmUtZGlzdHJpYnV0b3IgSUNGR1IwLgorICovCit2b2lkIGdpY3Jfc2V0X2ljZmdyMCh1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgY2ZnKQoreworCXVuc2lnbmVkIGJpdF9udW0gPSBpZCAmICgoMSA8PCBJQ0ZHUl9TSElGVCkgLSAxKTsKKwl1aW50MzJfdCByZWdfdmFsID0gZ2ljcl9yZWFkX2ljZmdyMChiYXNlKTsKKworCS8qIENsZWFyIHRoZSBmaWVsZCwgYW5kIGluc2VydCByZXF1aXJlZCBjb25maWd1cmF0aW9uICovCisJcmVnX3ZhbCAmPSB+KEdJQ19DRkdfTUFTSyA8PCBiaXRfbnVtKTsKKwlyZWdfdmFsIHw9ICgoY2ZnICYgR0lDX0NGR19NQVNLKSA8PCBiaXRfbnVtKTsKKworCWdpY3Jfd3JpdGVfaWNmZ3IwKGJhc2UsIHJlZ192YWwpOworfQorCisvKgorICogQWNjZXNzb3IgdG8gc2V0IHRoZSBiaXQgZmllbGRzIGNvcnJlc3BvbmRpbmcgdG8gaW50ZXJydXB0IElECisgKiBpbiBHSUMgUmUtZGlzdHJpYnV0b3IgSUNGR1IxLgorICovCit2b2lkIGdpY3Jfc2V0X2ljZmdyMSh1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgY2ZnKQoreworCXVuc2lnbmVkIGJpdF9udW0gPSBpZCAmICgoMSA8PCBJQ0ZHUl9TSElGVCkgLSAxKTsKKwl1aW50MzJfdCByZWdfdmFsID0gZ2ljcl9yZWFkX2ljZmdyMShiYXNlKTsKKworCS8qIENsZWFyIHRoZSBmaWVsZCwgYW5kIGluc2VydCByZXF1aXJlZCBjb25maWd1cmF0aW9uICovCisJcmVnX3ZhbCAmPSB+KEdJQ19DRkdfTUFTSyA8PCBiaXRfbnVtKTsKKwlyZWdfdmFsIHw9ICgoY2ZnICYgR0lDX0NGR19NQVNLKSA8PCBiaXRfbnVtKTsKKworCWdpY3Jfd3JpdGVfaWNmZ3IxKGJhc2UsIHJlZ192YWwpOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZ1bmN0aW9uIG1hcmtzIHRoZSBjb3JlIGFzIGF3YWtlIGluIHRoZSByZS1kaXN0cmlidXRvciBhbmQKICAqIGVuc3VyZXMgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIGFjdGl2ZS4KQEAgLTI4Nyw2ICszNjUsNyBAQAogCQlnaWNkX3dyaXRlX2ljZmdyKGdpY2RfYmFzZSwgaW5kZXgsIDApOwogfQogCisjaWYgIUVSUk9SX0RFUFJFQ0FURUQKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29uZmlndXJlIHNlY3VyZSBHMCBhbmQgRzFTIFNQSXMuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzMzLDYgKzQxMiw2MyBAQAogCX0KIAogfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29uZmlndXJlIHByb3BlcnRpZXMgb2Ygc2VjdXJlIFNQSXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1bnNpZ25lZCBpbnQgZ2ljdjNfc2VjdXJlX3NwaXNfY29uZmlndXJlX3Byb3BzKHVpbnRwdHJfdCBnaWNkX2Jhc2UsCisJCWNvbnN0IGludGVycnVwdF9wcm9wX3QgKmludGVycnVwdF9wcm9wcywKKwkJdW5zaWduZWQgaW50IGludGVycnVwdF9wcm9wc19udW0pCit7CisJdW5zaWduZWQgaW50IGk7CisJY29uc3QgaW50ZXJydXB0X3Byb3BfdCAqY3VycmVudF9wcm9wOworCXVuc2lnbmVkIGxvbmcgbG9uZyBnaWNfYWZmaW5pdHlfdmFsOworCXVuc2lnbmVkIGludCBjdGxyX2VuYWJsZSA9IDA7CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBhIHZhbGlkIHByb3BlcnR5IGFycmF5ICovCisJYXNzZXJ0KGludGVycnVwdF9wcm9wcyAhPSBOVUxMKTsKKwlhc3NlcnQoaW50ZXJydXB0X3Byb3BzX251bSA+IDApOworCisJZm9yIChpID0gMDsgaSA8IGludGVycnVwdF9wcm9wc19udW07IGkrKykgeworCQljdXJyZW50X3Byb3AgPSAmaW50ZXJydXB0X3Byb3BzW2ldOworCisJCWlmIChjdXJyZW50X3Byb3AtPmludHJfbnVtIDwgTUlOX1NQSV9JRCkKKwkJCWNvbnRpbnVlOworCisJCS8qIENvbmZpZ3VyZSB0aGlzIGludGVycnVwdCBhcyBhIHNlY3VyZSBpbnRlcnJ1cHQgKi8KKwkJZ2ljZF9jbHJfaWdyb3VwcihnaWNkX2Jhc2UsIGN1cnJlbnRfcHJvcC0+aW50cl9udW0pOworCisJCS8qIENvbmZpZ3VyZSB0aGlzIGludGVycnVwdCBhcyBHMCBvciBhIEcxUyBpbnRlcnJ1cHQgKi8KKwkJYXNzZXJ0KChjdXJyZW50X3Byb3AtPmludHJfZ3JwID09IElOVFJfR1JPVVAwKSB8fAorCQkJCShjdXJyZW50X3Byb3AtPmludHJfZ3JwID09IElOVFJfR1JPVVAxUykpOworCQlpZiAoY3VycmVudF9wcm9wLT5pbnRyX2dycCA9PSBJTlRSX0dST1VQMVMpIHsKKwkJCWdpY2Rfc2V0X2lncnBtb2RyKGdpY2RfYmFzZSwgY3VycmVudF9wcm9wLT5pbnRyX251bSk7CisJCQljdGxyX2VuYWJsZSB8PSBDVExSX0VOQUJMRV9HMVNfQklUOworCQl9IGVsc2UgeworCQkJZ2ljZF9jbHJfaWdycG1vZHIoZ2ljZF9iYXNlLCBjdXJyZW50X3Byb3AtPmludHJfbnVtKTsKKwkJCWN0bHJfZW5hYmxlIHw9IENUTFJfRU5BQkxFX0cwX0JJVDsKKwkJfQorCisJCS8qIFNldCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiAqLworCQlnaWNkX3NldF9pY2ZncihnaWNkX2Jhc2UsIGN1cnJlbnRfcHJvcC0+aW50cl9udW0sCisJCQkJY3VycmVudF9wcm9wLT5pbnRyX2NmZyk7CisKKwkJLyogU2V0IHRoZSBwcmlvcml0eSBvZiB0aGlzIGludGVycnVwdCAqLworCQlnaWNkX3NldF9pcHJpb3JpdHlyKGdpY2RfYmFzZSwgY3VycmVudF9wcm9wLT5pbnRyX251bSwKKwkJCQljdXJyZW50X3Byb3AtPmludHJfcHJpKTsKKworCQkvKiBUYXJnZXQgU1BJcyB0byB0aGUgcHJpbWFyeSBDUFUgKi8KKwkJZ2ljX2FmZmluaXR5X3ZhbCA9IGdpY2RfaXJvdXRlcl92YWxfZnJvbV9tcGlkcihyZWFkX21waWRyKCksIDApOworCQlnaWNkX3dyaXRlX2lyb3V0ZXIoZ2ljZF9iYXNlLCBjdXJyZW50X3Byb3AtPmludHJfbnVtLAorCQkJCWdpY19hZmZpbml0eV92YWwpOworCisJCS8qIEVuYWJsZSB0aGlzIGludGVycnVwdCAqLworCQlnaWNkX3NldF9pc2VuYWJsZXIoZ2ljZF9iYXNlLCBjdXJyZW50X3Byb3AtPmludHJfbnVtKTsKKwl9CisKKwlyZXR1cm4gY3Rscl9lbmFibGU7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgb2YgU1BJcy4KQEAgLTM2Miw2ICs0OTgsNyBAQAogCWdpY3Jfd3JpdGVfaWNmZ3IxKGdpY3JfYmFzZSwgMCk7CiB9CiAKKyNpZiAhRVJST1JfREVQUkVDQVRFRAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEhlbHBlciBmdW5jdGlvbiB0byBjb25maWd1cmUgc2VjdXJlIEcwIGFuZCBHMVMgU1BJcy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zOTksMyArNTM2LDYwIEBACiAJCX0KIAl9CiB9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhlbHBlciBmdW5jdGlvbiB0byBjb25maWd1cmUgcHJvcGVydGllcyBvZiBzZWN1cmUgRzAgYW5kIEcxUyBQUElzIGFuZCBTR0lzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Vuc2lnbmVkIGludCBnaWN2M19zZWN1cmVfcHBpX3NnaV9jb25maWd1cmVfcHJvcHModWludHB0cl90IGdpY3JfYmFzZSwKKwkJY29uc3QgaW50ZXJydXB0X3Byb3BfdCAqaW50ZXJydXB0X3Byb3BzLAorCQl1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3Byb3BzX251bSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwljb25zdCBpbnRlcnJ1cHRfcHJvcF90ICpjdXJyZW50X3Byb3A7CisJdW5zaWduZWQgaW50IGN0bHJfZW5hYmxlID0gMDsKKworCS8qIE1ha2Ugc3VyZSB0aGVyZSdzIGEgdmFsaWQgcHJvcGVydHkgYXJyYXkgKi8KKwlhc3NlcnQoaW50ZXJydXB0X3Byb3BzICE9IE5VTEwpOworCWFzc2VydChpbnRlcnJ1cHRfcHJvcHNfbnVtID4gMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW50ZXJydXB0X3Byb3BzX251bTsgaSsrKSB7CisJCWN1cnJlbnRfcHJvcCA9ICZpbnRlcnJ1cHRfcHJvcHNbaV07CisKKwkJaWYgKGN1cnJlbnRfcHJvcC0+aW50cl9udW0gPj0gTUlOX1NQSV9JRCkKKwkJCWNvbnRpbnVlOworCisJCS8qIENvbmZpZ3VyZSB0aGlzIGludGVycnVwdCBhcyBhIHNlY3VyZSBpbnRlcnJ1cHQgKi8KKwkJZ2ljcl9jbHJfaWdyb3VwcjAoZ2ljcl9iYXNlLCBjdXJyZW50X3Byb3AtPmludHJfbnVtKTsKKworCQkvKiBDb25maWd1cmUgdGhpcyBpbnRlcnJ1cHQgYXMgRzAgb3IgYSBHMVMgaW50ZXJydXB0ICovCisJCWFzc2VydCgoY3VycmVudF9wcm9wLT5pbnRyX2dycCA9PSBJTlRSX0dST1VQMCkgfHwKKwkJCQkoY3VycmVudF9wcm9wLT5pbnRyX2dycCA9PSBJTlRSX0dST1VQMVMpKTsKKwkJaWYgKGN1cnJlbnRfcHJvcC0+aW50cl9ncnAgPT0gSU5UUl9HUk9VUDFTKSB7CisJCQlnaWNyX3NldF9pZ3JwbW9kcjAoZ2ljcl9iYXNlLCBjdXJyZW50X3Byb3AtPmludHJfbnVtKTsKKwkJCWN0bHJfZW5hYmxlIHw9IENUTFJfRU5BQkxFX0cxU19CSVQ7CisJCX0gZWxzZSB7CisJCQlnaWNyX2Nscl9pZ3JwbW9kcjAoZ2ljcl9iYXNlLCBjdXJyZW50X3Byb3AtPmludHJfbnVtKTsKKwkJCWN0bHJfZW5hYmxlIHw9IENUTFJfRU5BQkxFX0cwX0JJVDsKKwkJfQorCisJCS8qIFNldCB0aGUgcHJpb3JpdHkgb2YgdGhpcyBpbnRlcnJ1cHQgKi8KKwkJZ2ljcl9zZXRfaXByaW9yaXR5cihnaWNyX2Jhc2UsIGN1cnJlbnRfcHJvcC0+aW50cl9udW0sCisJCQkJY3VycmVudF9wcm9wLT5pbnRyX3ByaSk7CisKKwkJLyoKKwkJICogU2V0IGludGVycnVwdCBjb25maWd1cmF0aW9uIGZvciBQUElzLiBDb25maWd1cmF0aW9uIGZvciBTR0lzCisJCSAqIGFyZSBpZ25vcmVkLgorCQkgKi8KKwkJaWYgKChjdXJyZW50X3Byb3AtPmludHJfbnVtID49IE1JTl9QUElfSUQpICYmCisJCQkJKGN1cnJlbnRfcHJvcC0+aW50cl9udW0gPCBNSU5fU1BJX0lEKSkgeworCQkJZ2ljcl9zZXRfaWNmZ3IxKGdpY3JfYmFzZSwgY3VycmVudF9wcm9wLT5pbnRyX251bSwKKwkJCQkJY3VycmVudF9wcm9wLT5pbnRyX2NmZyk7CisJCX0KKworCQkvKiBFbmFibGUgdGhpcyBpbnRlcnJ1cHQgKi8KKwkJZ2ljcl9zZXRfaXNlbmFibGVyMChnaWNyX2Jhc2UsIGN1cnJlbnRfcHJvcC0+aW50cl9udW0pOworCX0KKworCXJldHVybiBjdGxyX2VuYWJsZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXJtL2dpYy92My9naWN2M19tYWluLmMgYi9kcml2ZXJzL2FybS9naWMvdjMvZ2ljdjNfbWFpbi5jCmluZGV4IGI2OGQ5OTguLjhkZTViZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXJtL2dpYy92My9naWN2M19tYWluLmMKKysrIGIvZHJpdmVycy9hcm0vZ2ljL3YzL2dpY3YzX21haW4uYwpAQCAtOSwxOCArOSw0OCBAQAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGRlYnVnLmg+CiAjaW5jbHVkZSA8Z2ljdjMuaD4KKyNpbmNsdWRlIDxpbnRlcnJ1cHRfcHJvcHMuaD4KKyNpbmNsdWRlIDxzcGlubG9jay5oPgogI2luY2x1ZGUgImdpY3YzX3ByaXZhdGUuaCIKIAogY29uc3QgZ2ljdjNfZHJpdmVyX2RhdGFfdCAqZ2ljdjNfZHJpdmVyX2RhdGE7CiBzdGF0aWMgdW5zaWduZWQgaW50IGdpY3YyX2NvbXBhdDsKIAogLyoKKyAqIFNwaW5sb2NrIHRvIGd1YXJkIHJlZ2lzdGVycyBuZWVkaW5nIHJlYWQtbW9kaWZ5LXdyaXRlLiBBUElzIHByb3RlY3RlZCBieSB0aGlzCisgKiBzcGlubG9jayBhcmUgdXNlZCBlaXRoZXIgYXQgYm9vdCB0aW1lICh3aGVuIG9ubHkgYSBzaW5nbGUgQ1BVIGlzIGFjdGl2ZSksIG9yCisgKiB3aGVuIHRoZSBzeXN0ZW0gaXMgZnVsbHkgY29oZXJlbnQuCisgKi8KK3NwaW5sb2NrX3QgZ2ljX2xvY2s7CisKKy8qCiAgKiBSZWRpc3RyaWJ1dG9yIHBvd2VyIG9wZXJhdGlvbnMgYXJlIHdlYWtseSBib3VuZCBzbyB0aGF0IHRoZXkgY2FuIGJlCiAgKiBvdmVycmlkZGVuCiAgKi8KICNwcmFnbWEgd2VhayBnaWN2M19yZGlzdGlmX29mZgogI3ByYWdtYSB3ZWFrIGdpY3YzX3JkaXN0aWZfb24KIAorCisvKiBIZWxwZXIgbWFjcm9zIHRvIHNhdmUgYW5kIHJlc3RvcmUgR0lDRCByZWdpc3RlcnMgdG8gYW5kIGZyb20gdGhlIGNvbnRleHQgKi8KKyNkZWZpbmUgUkVTVE9SRV9HSUNEX1JFR1MoYmFzZSwgY3R4LCBpbnRyX251bSwgcmVnLCBSRUcpCQlcCisJZG8gewkJCQkJCQkJXAorCQlmb3IgKHVuc2lnbmVkIGludCBpbnRfaWQgPSBNSU5fU1BJX0lEOyBpbnRfaWQgPCBpbnRyX251bTsgXAorCQkJCWludF9pZCArPSAoMSA8PCBSRUcjI19TSElGVCkpIHsJCVwKKwkJCWdpY2Rfd3JpdGVfIyNyZWcoYmFzZSwgaW50X2lkLAkJCVwKKwkJCQljdHgtPmdpY2RfIyNyZWdbKGludF9pZCAtIE1JTl9TUElfSUQpID4+IFJFRyMjX1NISUZUXSk7IFwKKwkJfQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQVZFX0dJQ0RfUkVHUyhiYXNlLCBjdHgsIGludHJfbnVtLCByZWcsIFJFRykJCQlcCisJZG8gewkJCQkJCQkJXAorCQlmb3IgKHVuc2lnbmVkIGludCBpbnRfaWQgPSBNSU5fU1BJX0lEOyBpbnRfaWQgPCBpbnRyX251bTsgXAorCQkJCWludF9pZCArPSAoMSA8PCBSRUcjI19TSElGVCkpIHsJCVwKKwkJCWN0eC0+Z2ljZF8jI3JlZ1soaW50X2lkIC0gTUlOX1NQSV9JRCkgPj4gUkVHIyNfU0hJRlRdID1cCisJCQkJCWdpY2RfcmVhZF8jI3JlZyhiYXNlLCBpbnRfaWQpOwlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGlzZXMgdGhlIEFSTSBHSUN2MyBkcml2ZXIgaW4gRUwzIHdpdGggcHJvdmlkZWQgcGxhdGZvcm0KICAqIGlucHV0cy4KQEAgLTM3LDIzICs2NywzMyBAQAogCiAJYXNzZXJ0KElTX0lOX0VMMygpKTsKIAotCS8qCi0JICogVGhlIHBsYXRmb3JtIHNob3VsZCBwcm92aWRlIGEgbGlzdCBvZiBhdCBsZWFzdCBvbmUgdHlwZSBvZgotCSAqIGludGVycnVwdHMKLQkgKi8KLQlhc3NlcnQocGxhdF9kcml2ZXJfZGF0YS0+ZzBfaW50ZXJydXB0X2FycmF5IHx8Ci0JICAgICAgIHBsYXRfZHJpdmVyX2RhdGEtPmcxc19pbnRlcnJ1cHRfYXJyYXkpOworI2lmICFFUlJPUl9ERVBSRUNBVEVECisJaWYgKHBsYXRfZHJpdmVyX2RhdGEtPmludGVycnVwdF9wcm9wcyA9PSBOVUxMKSB7CisJCS8qIEludGVycnVwdCBwcm9wZXJ0aWVzIGFycmF5IHNpemUgbXVzdCBiZSAwICovCisJCWFzc2VydChwbGF0X2RyaXZlcl9kYXRhLT5pbnRlcnJ1cHRfcHJvcHNfbnVtID09IDApOwogCi0JLyoKLQkgKiBJZiB0aGVyZSBhcmUgbm8gaW50ZXJydXB0cyBvZiBhIHBhcnRpY3VsYXIgdHlwZSwgdGhlbiB0aGUgbnVtYmVyIG9mCi0JICogaW50ZXJydXB0cyBvZiB0aGF0IHR5cGUgc2hvdWxkIGJlIDAgYW5kIHZpY2UtdmVyc2EuCi0JICovCi0JYXNzZXJ0KHBsYXRfZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9hcnJheSA/Ci0JICAgICAgIHBsYXRfZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9udW0gOgotCSAgICAgICBwbGF0X2RyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfbnVtID09IDApOwotCWFzc2VydChwbGF0X2RyaXZlcl9kYXRhLT5nMXNfaW50ZXJydXB0X2FycmF5ID8KLQkgICAgICAgcGxhdF9kcml2ZXJfZGF0YS0+ZzFzX2ludGVycnVwdF9udW0gOgotCSAgICAgICBwbGF0X2RyaXZlcl9kYXRhLT5nMXNfaW50ZXJydXB0X251bSA9PSAwKTsKKwkJLyoKKwkJICogVGhlIHBsYXRmb3JtIHNob3VsZCBwcm92aWRlIGEgbGlzdCBvZiBhdCBsZWFzdCBvbmUgdHlwZSBvZgorCQkgKiBpbnRlcnJ1cHQuCisJCSAqLworCQlhc3NlcnQocGxhdF9kcml2ZXJfZGF0YS0+ZzBfaW50ZXJydXB0X2FycmF5IHx8CisJCQkJcGxhdF9kcml2ZXJfZGF0YS0+ZzFzX2ludGVycnVwdF9hcnJheSk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUgYXJlIG5vIGludGVycnVwdHMgb2YgYSBwYXJ0aWN1bGFyIHR5cGUsIHRoZW4gdGhlCisJCSAqIG51bWJlciBvZiBpbnRlcnJ1cHRzIG9mIHRoYXQgdHlwZSBzaG91bGQgYmUgMCBhbmQgdmljZS12ZXJzYS4KKwkJICovCisJCWFzc2VydChwbGF0X2RyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfYXJyYXkgPworCQkJCXBsYXRfZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9udW0gOgorCQkJCXBsYXRfZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9udW0gPT0gMCk7CisJCWFzc2VydChwbGF0X2RyaXZlcl9kYXRhLT5nMXNfaW50ZXJydXB0X2FycmF5ID8KKwkJCQlwbGF0X2RyaXZlcl9kYXRhLT5nMXNfaW50ZXJydXB0X251bSA6CisJCQkJcGxhdF9kcml2ZXJfZGF0YS0+ZzFzX2ludGVycnVwdF9udW0gPT0gMCk7CisJfQorI2Vsc2UKKwlhc3NlcnQocGxhdF9kcml2ZXJfZGF0YS0+aW50ZXJydXB0X3Byb3BzICE9IE5VTEwpOworCWFzc2VydChwbGF0X2RyaXZlcl9kYXRhLT5pbnRlcnJ1cHRfcHJvcHNfbnVtID4gMCk7CisjZW5kaWYKIAogCS8qIENoZWNrIGZvciBzeXN0ZW0gcmVnaXN0ZXIgc3VwcG9ydCAqLwogI2lmZGVmIEFBUkNIMzIKQEAgLTExOSw4ICsxNTksNiBAQAogCiAJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhKTsKIAlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSk7Ci0JYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhLT5nMXNfaW50ZXJydXB0X2FycmF5IHx8Ci0JICAgICAgIGdpY3YzX2RyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfYXJyYXkpOwogCiAJYXNzZXJ0KElTX0lOX0VMMygpKTsKIApAQCAtMTQyLDIzICsxODAsMzcgQEAKIAkvKiBTZXQgdGhlIGRlZmF1bHQgYXR0cmlidXRlIG9mIGFsbCBTUElzICovCiAJZ2ljdjNfc3Bpc19jb25maWd1cmVfZGVmYXVsdHMoZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSk7CiAKLQkvKiBDb25maWd1cmUgdGhlIEcxUyBTUElzICovCi0JaWYgKGdpY3YzX2RyaXZlcl9kYXRhLT5nMXNfaW50ZXJydXB0X2FycmF5KSB7Ci0JCWdpY3YzX3NlY3VyZV9zcGlzX2NvbmZpZ3VyZShnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlLAorI2lmICFFUlJPUl9ERVBSRUNBVEVECisJaWYgKGdpY3YzX2RyaXZlcl9kYXRhLT5pbnRlcnJ1cHRfcHJvcHMgIT0gTlVMTCkgeworI2VuZGlmCisJCWJpdG1hcCA9IGdpY3YzX3NlY3VyZV9zcGlzX2NvbmZpZ3VyZV9wcm9wcygKKwkJCQlnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlLAorCQkJCWdpY3YzX2RyaXZlcl9kYXRhLT5pbnRlcnJ1cHRfcHJvcHMsCisJCQkJZ2ljdjNfZHJpdmVyX2RhdGEtPmludGVycnVwdF9wcm9wc19udW0pOworI2lmICFFUlJPUl9ERVBSRUNBVEVECisJfSBlbHNlIHsKKwkJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhLT5nMXNfaW50ZXJydXB0X2FycmF5IHx8CisJCQkJZ2ljdjNfZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9hcnJheSk7CisKKwkJLyogQ29uZmlndXJlIHRoZSBHMVMgU1BJcyAqLworCQlpZiAoZ2ljdjNfZHJpdmVyX2RhdGEtPmcxc19pbnRlcnJ1cHRfYXJyYXkpIHsKKwkJCWdpY3YzX3NlY3VyZV9zcGlzX2NvbmZpZ3VyZShnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlLAogCQkJCQlnaWN2M19kcml2ZXJfZGF0YS0+ZzFzX2ludGVycnVwdF9udW0sCiAJCQkJCWdpY3YzX2RyaXZlcl9kYXRhLT5nMXNfaW50ZXJydXB0X2FycmF5LAogCQkJCQlJTlRSX0dST1VQMVMpOwotCQliaXRtYXAgfD0gQ1RMUl9FTkFCTEVfRzFTX0JJVDsKLQl9CisJCQliaXRtYXAgfD0gQ1RMUl9FTkFCTEVfRzFTX0JJVDsKKwkJfQogCi0JLyogQ29uZmlndXJlIHRoZSBHMCBTUElzICovCi0JaWYgKGdpY3YzX2RyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfYXJyYXkpIHsKLQkJZ2ljdjNfc2VjdXJlX3NwaXNfY29uZmlndXJlKGdpY3YzX2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UsCisJCS8qIENvbmZpZ3VyZSB0aGUgRzAgU1BJcyAqLworCQlpZiAoZ2ljdjNfZHJpdmVyX2RhdGEtPmcwX2ludGVycnVwdF9hcnJheSkgeworCQkJZ2ljdjNfc2VjdXJlX3NwaXNfY29uZmlndXJlKGdpY3YzX2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UsCiAJCQkJCWdpY3YzX2RyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfbnVtLAogCQkJCQlnaWN2M19kcml2ZXJfZGF0YS0+ZzBfaW50ZXJydXB0X2FycmF5LAogCQkJCQlJTlRSX0dST1VQMCk7Ci0JCWJpdG1hcCB8PSBDVExSX0VOQUJMRV9HMF9CSVQ7CisJCQliaXRtYXAgfD0gQ1RMUl9FTkFCTEVfRzBfQklUOworCQl9CiAJfQorI2VuZGlmCiAKIAkvKiBFbmFibGUgdGhlIHNlY3VyZSBTUElzIG5vdyB0aGF0IHRoZXkgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgKi8KIAlnaWNkX3NldF9jdGxyKGdpY3YzX2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UsIGJpdG1hcCwgUldQX1RSVUUpOwpAQCAtMTcyLDE0ICsyMjQsMTYgQEAKIHZvaWQgZ2ljdjNfcmRpc3RpZl9pbml0KHVuc2lnbmVkIGludCBwcm9jX251bSkKIHsKIAl1aW50cHRyX3QgZ2ljcl9iYXNlOworCXVuc2lnbmVkIGludCBiaXRtYXAgPSAwOworCXVpbnQzMl90IGN0bHI7CiAKIAlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEpOwogCWFzc2VydChwcm9jX251bSA8IGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX251bSk7CiAJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX2Jhc2VfYWRkcnMpOwogCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlKTsKLQlhc3NlcnQoZ2ljZF9yZWFkX2N0bHIoZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSkgJiBDVExSX0FSRV9TX0JJVCk7Ci0JYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhLT5nMXNfaW50ZXJydXB0X2FycmF5IHx8Ci0JICAgICAgIGdpY3YzX2RyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfYXJyYXkpOworCisJY3RsciA9IGdpY2RfcmVhZF9jdGxyKGdpY3YzX2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOworCWFzc2VydChjdGxyICYgQ1RMUl9BUkVfU19CSVQpOwogCiAJYXNzZXJ0KElTX0lOX0VMMygpKTsKIApAQCAtMTkxLDIxICsyNDUsNDAgQEAKIAkvKiBTZXQgdGhlIGRlZmF1bHQgYXR0cmlidXRlIG9mIGFsbCBTR0lzIGFuZCBQUElzICovCiAJZ2ljdjNfcHBpX3NnaV9jb25maWd1cmVfZGVmYXVsdHMoZ2ljcl9iYXNlKTsKIAotCS8qIENvbmZpZ3VyZSB0aGUgRzFTIFNHSXMvUFBJcyAqLwotCWlmIChnaWN2M19kcml2ZXJfZGF0YS0+ZzFzX2ludGVycnVwdF9hcnJheSkgewotCQlnaWN2M19zZWN1cmVfcHBpX3NnaV9jb25maWd1cmUoZ2ljcl9iYXNlLAorI2lmICFFUlJPUl9ERVBSRUNBVEVECisJaWYgKGdpY3YzX2RyaXZlcl9kYXRhLT5pbnRlcnJ1cHRfcHJvcHMgIT0gTlVMTCkgeworI2VuZGlmCisJCWJpdG1hcCA9IGdpY3YzX3NlY3VyZV9wcGlfc2dpX2NvbmZpZ3VyZV9wcm9wcyhnaWNyX2Jhc2UsCisJCQkJZ2ljdjNfZHJpdmVyX2RhdGEtPmludGVycnVwdF9wcm9wcywKKwkJCQlnaWN2M19kcml2ZXJfZGF0YS0+aW50ZXJydXB0X3Byb3BzX251bSk7CisjaWYgIUVSUk9SX0RFUFJFQ0FURUQKKwl9IGVsc2UgeworCQlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEtPmcxc19pbnRlcnJ1cHRfYXJyYXkgfHwKKwkJICAgICAgIGdpY3YzX2RyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfYXJyYXkpOworCisJCS8qIENvbmZpZ3VyZSB0aGUgRzFTIFNHSXMvUFBJcyAqLworCQlpZiAoZ2ljdjNfZHJpdmVyX2RhdGEtPmcxc19pbnRlcnJ1cHRfYXJyYXkpIHsKKwkJCWdpY3YzX3NlY3VyZV9wcGlfc2dpX2NvbmZpZ3VyZShnaWNyX2Jhc2UsCiAJCQkJCWdpY3YzX2RyaXZlcl9kYXRhLT5nMXNfaW50ZXJydXB0X251bSwKIAkJCQkJZ2ljdjNfZHJpdmVyX2RhdGEtPmcxc19pbnRlcnJ1cHRfYXJyYXksCiAJCQkJCUlOVFJfR1JPVVAxUyk7Ci0JfQorCQkJYml0bWFwIHw9IENUTFJfRU5BQkxFX0cxU19CSVQ7CisJCX0KIAotCS8qIENvbmZpZ3VyZSB0aGUgRzAgU0dJcy9QUElzICovCi0JaWYgKGdpY3YzX2RyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfYXJyYXkpIHsKLQkJZ2ljdjNfc2VjdXJlX3BwaV9zZ2lfY29uZmlndXJlKGdpY3JfYmFzZSwKKwkJLyogQ29uZmlndXJlIHRoZSBHMCBTR0lzL1BQSXMgKi8KKwkJaWYgKGdpY3YzX2RyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfYXJyYXkpIHsKKwkJCWdpY3YzX3NlY3VyZV9wcGlfc2dpX2NvbmZpZ3VyZShnaWNyX2Jhc2UsCiAJCQkJCWdpY3YzX2RyaXZlcl9kYXRhLT5nMF9pbnRlcnJ1cHRfbnVtLAogCQkJCQlnaWN2M19kcml2ZXJfZGF0YS0+ZzBfaW50ZXJydXB0X2FycmF5LAogCQkJCQlJTlRSX0dST1VQMCk7CisJCQliaXRtYXAgfD0gQ1RMUl9FTkFCTEVfRzBfQklUOworCQl9CiAJfQorI2VuZGlmCisKKwkvKiBFbmFibGUgaW50ZXJydXB0IGdyb3VwcyBhcyByZXF1aXJlZCwgaWYgbm90IGFscmVhZHkgKi8KKwlpZiAoKGN0bHIgJiBiaXRtYXApICE9IGJpdG1hcCkKKwkJZ2ljZF9zZXRfY3RscihnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlLCBiaXRtYXAsIFJXUF9UUlVFKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQwNiwzICs0NzksNjc5IEBACiAJLyogRWxzZSBpdCBpcyBhIEdyb3VwIDAgU2VjdXJlIGludGVycnVwdCAqLwogCXJldHVybiBJTlRSX0dST1VQMDsKIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbiB0byBzYXZlIGFuZCBkaXNhYmxlIHRoZSBHSUMgSVRTIHJlZ2lzdGVyIGNvbnRleHQuIFRoZSBwb3dlcgorICogbWFuYWdlbWVudCBvZiBHSUMgSVRTIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQgYW5kIHRoaXMgZnVuY3Rpb24gZG9lc24ndAorICogc2F2ZSBhbnkgbWVtb3J5IHN0cnVjdHVyZXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBJVFMuIEFzIHRoZSBzZXF1ZW5jZSB0byBzYXZlCisgKiB0aGlzIHN0YXRlIGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQsIGl0IHNob3VsZCBiZSBleGVjdXRlZCBpbiBwbGF0Zm9ybQorICogc3BlY2lmaWMgY29kZS4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFsb25lIGFuZCB0aGVuIHBvd2VyaW5nIGRvd24gdGhlIEdJQyBhbmQKKyAqIElUUyB3aXRob3V0IGltcGxlbWVudGluZyB0aGUgYWZvcmVtZW50aW9uZWQgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSB3aWxsCisgKiBjb3JydXB0IHRoZSBJVFMgc3RhdGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGludm9rZWQgYWZ0ZXIgdGhlIEdJQyBDUFUgaW50ZXJmYWNlIGlzIGRpc2FibGVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnaWN2M19pdHNfc2F2ZV9kaXNhYmxlKHVpbnRwdHJfdCBnaXRzX2Jhc2UsIGdpY3YzX2l0c19jdHhfdCAqIGNvbnN0IGl0c19jdHgpCit7CisJaW50IGk7CisKKwlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEpOworCWFzc2VydChJU19JTl9FTDMoKSk7CisJYXNzZXJ0KGl0c19jdHgpOworCWFzc2VydChnaXRzX2Jhc2UpOworCisJaXRzX2N0eC0+Z2l0c19jdGxyID0gZ2l0c19yZWFkX2N0bHIoZ2l0c19iYXNlKTsKKworCS8qIERpc2FibGUgdGhlIElUUyAqLworCWdpdHNfd3JpdGVfY3RscihnaXRzX2Jhc2UsIGl0c19jdHgtPmdpdHNfY3RsciAmCisJCQkJCSh+R0lUU19DVExSX0VOQUJMRURfQklUKSk7CisKKwkvKiBXYWl0IGZvciBxdWllc2NlbnQgc3RhdGUgKi8KKwlnaXRzX3dhaXRfZm9yX3F1aWVzY2VudF9iaXQoZ2l0c19iYXNlKTsKKworCWl0c19jdHgtPmdpdHNfY2Jhc2VyID0gZ2l0c19yZWFkX2NiYXNlcihnaXRzX2Jhc2UpOworCWl0c19jdHgtPmdpdHNfY3dyaXRlciA9IGdpdHNfcmVhZF9jd3JpdGVyKGdpdHNfYmFzZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpdHNfY3R4LT5naXRzX2Jhc2VyKTsgaSsrKQorCQlpdHNfY3R4LT5naXRzX2Jhc2VyW2ldID0gZ2l0c19yZWFkX2Jhc2VyKGdpdHNfYmFzZSwgaSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb24gdG8gcmVzdG9yZSB0aGUgR0lDIElUUyByZWdpc3RlciBjb250ZXh0LiBUaGUgcG93ZXIKKyAqIG1hbmFnZW1lbnQgb2YgR0lDIElUUyBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGFuZCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QKKyAqIHJlc3RvcmUgYW55IG1lbW9yeSBzdHJ1Y3R1cmVzIHJlcXVpcmVkIHRvIHN1cHBvcnQgSVRTLiBUaGUgYXNzdW1wdGlvbiBpcworICogdGhhdCB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBpbiBtZW1vcnkgYW5kIGFyZSByZXRhaW5lZCBkdXJpbmcgc3lzdGVtIHN1c3BlbmQuCisgKgorICogVGhpcyBtdXN0IGJlIGludm9rZWQgYmVmb3JlIHRoZSBHSUMgQ1BVIGludGVyZmFjZSBpcyBlbmFibGVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnaWN2M19pdHNfcmVzdG9yZSh1aW50cHRyX3QgZ2l0c19iYXNlLCBjb25zdCBnaWN2M19pdHNfY3R4X3QgKiBjb25zdCBpdHNfY3R4KQoreworCWludCBpOworCisJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhKTsKKwlhc3NlcnQoSVNfSU5fRUwzKCkpOworCWFzc2VydChpdHNfY3R4KTsKKwlhc3NlcnQoZ2l0c19iYXNlKTsKKworCS8qIEFzc2VydCB0aGF0IHRoZSBHSVRTIGlzIGRpc2FibGVkIGFuZCBxdWllc2NlbnQgKi8KKwlhc3NlcnQoKGdpdHNfcmVhZF9jdGxyKGdpdHNfYmFzZSkgJiBHSVRTX0NUTFJfRU5BQkxFRF9CSVQpID09IDApOworCWFzc2VydCgoZ2l0c19yZWFkX2N0bHIoZ2l0c19iYXNlKSAmIEdJVFNfQ1RMUl9RVUlFU0NFTlRfQklUKSAhPSAwKTsKKworCWdpdHNfd3JpdGVfY2Jhc2VyKGdpdHNfYmFzZSwgaXRzX2N0eC0+Z2l0c19jYmFzZXIpOworCWdpdHNfd3JpdGVfY3dyaXRlcihnaXRzX2Jhc2UsIGl0c19jdHgtPmdpdHNfY3dyaXRlcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpdHNfY3R4LT5naXRzX2Jhc2VyKTsgaSsrKQorCQlnaXRzX3dyaXRlX2Jhc2VyKGdpdHNfYmFzZSwgaSwgaXRzX2N0eC0+Z2l0c19iYXNlcltpXSk7CisKKwkvKiBSZXN0b3JlIHRoZSBJVFMgQ1RMUiBidXQgbGVhdmUgdGhlIElUUyBkaXNhYmxlZCAqLworCWdpdHNfd3JpdGVfY3RscihnaXRzX2Jhc2UsIGl0c19jdHgtPmdpdHNfY3RsciAmCisJCQkofkdJVFNfQ1RMUl9FTkFCTEVEX0JJVCkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uIHRvIHNhdmUgdGhlIEdJQyBSZWRpc3RyaWJ1dG9yIHJlZ2lzdGVyIGNvbnRleHQuIFRoaXMgZnVuY3Rpb24KKyAqIG11c3QgYmUgaW52b2tlZCBhZnRlciBDUFUgaW50ZXJmYWNlIGRpc2FibGUgYW5kIHByaW9yIHRvIERpc3RyaWJ1dG9yIHNhdmUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdpY3YzX3JkaXN0aWZfc2F2ZSh1bnNpZ25lZCBpbnQgcHJvY19udW0sIGdpY3YzX3JlZGlzdF9jdHhfdCAqIGNvbnN0IHJkaXN0X2N0eCkKK3sKKwl1aW50cHRyX3QgZ2ljcl9iYXNlOworCXVuc2lnbmVkIGludCBpbnRfaWQ7CisKKwlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEpOworCWFzc2VydChwcm9jX251bSA8IGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX251bSk7CisJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX2Jhc2VfYWRkcnMpOworCWFzc2VydChJU19JTl9FTDMoKSk7CisJYXNzZXJ0KHJkaXN0X2N0eCk7CisKKwlnaWNyX2Jhc2UgPSBnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9iYXNlX2FkZHJzW3Byb2NfbnVtXTsKKworCS8qCisJICogV2FpdCBmb3IgYW55IHdyaXRlIHRvIEdJQ1JfQ1RMUiB0byBjb21wbGV0ZSBiZWZvcmUgdHJ5aW5nIHRvIHNhdmUgYW55CisJICogc3RhdGUuCisJICovCisJZ2ljcl93YWl0X2Zvcl9wZW5kaW5nX3dyaXRlKGdpY3JfYmFzZSk7CisKKwlyZGlzdF9jdHgtPmdpY3JfY3RsciA9IGdpY3JfcmVhZF9jdGxyKGdpY3JfYmFzZSk7CisKKwlyZGlzdF9jdHgtPmdpY3JfcHJvcGJhc2VyID0gZ2ljcl9yZWFkX3Byb3BiYXNlcihnaWNyX2Jhc2UpOworCXJkaXN0X2N0eC0+Z2ljcl9wZW5kYmFzZXIgPSBnaWNyX3JlYWRfcGVuZGJhc2VyKGdpY3JfYmFzZSk7CisKKwlyZGlzdF9jdHgtPmdpY3JfaWdyb3VwcjAgPSBnaWNyX3JlYWRfaWdyb3VwcjAoZ2ljcl9iYXNlKTsKKwlyZGlzdF9jdHgtPmdpY3JfaXNlbmFibGVyMCA9IGdpY3JfcmVhZF9pc2VuYWJsZXIwKGdpY3JfYmFzZSk7CisJcmRpc3RfY3R4LT5naWNyX2lzcGVuZHIwID0gZ2ljcl9yZWFkX2lzcGVuZHIwKGdpY3JfYmFzZSk7CisJcmRpc3RfY3R4LT5naWNyX2lzYWN0aXZlcjAgPSBnaWNyX3JlYWRfaXNhY3RpdmVyMChnaWNyX2Jhc2UpOworCXJkaXN0X2N0eC0+Z2ljcl9pY2ZncjAgPSBnaWNyX3JlYWRfaWNmZ3IwKGdpY3JfYmFzZSk7CisJcmRpc3RfY3R4LT5naWNyX2ljZmdyMSA9IGdpY3JfcmVhZF9pY2ZncjEoZ2ljcl9iYXNlKTsKKwlyZGlzdF9jdHgtPmdpY3JfaWdycG1vZHIwID0gZ2ljcl9yZWFkX2lncnBtb2RyMChnaWNyX2Jhc2UpOworCXJkaXN0X2N0eC0+Z2ljcl9uc2FjciA9IGdpY3JfcmVhZF9uc2FjcihnaWNyX2Jhc2UpOworCWZvciAoaW50X2lkID0gTUlOX1NHSV9JRDsgaW50X2lkIDwgVE9UQUxfUENQVV9JTlRSX05VTTsKKwkJCWludF9pZCArPSAoMSA8PCBJUFJJT1JJVFlSX1NISUZUKSkgeworCQlyZGlzdF9jdHgtPmdpY3JfaXByaW9yaXR5clsoaW50X2lkIC0gTUlOX1NHSV9JRCkgPj4gSVBSSU9SSVRZUl9TSElGVF0gPQorCQkJCWdpY3JfcmVhZF9pcHJpb3JpdHlyKGdpY3JfYmFzZSwgaW50X2lkKTsKKwl9CisKKworCS8qCisJICogQ2FsbCB0aGUgcHJlLXNhdmUgaG9vayB0aGF0IGltcGxlbWVudHMgdGhlIElNUCBERUYgc2VxdWVuY2UgdGhhdCBtYXkKKwkgKiBiZSByZXF1aXJlZCBvbiBzb21lIEdJQyBpbXBsZW1lbnRhdGlvbnMuIEFzIHRoaXMgbWF5IG5lZWQgdG8gYWNjZXNzCisJICogdGhlIFJlZGlzdHJpYnV0b3IgcmVnaXN0ZXJzLCB3ZSBwYXNzIGl0IHByb2NfbnVtLgorCSAqLworCWdpY3YzX2Rpc3RpZl9wcmVfc2F2ZShwcm9jX251bSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb24gdG8gcmVzdG9yZSB0aGUgR0lDIFJlZGlzdHJpYnV0b3IgcmVnaXN0ZXIgY29udGV4dC4gV2UgZGlzYWJsZQorICogTFBJIGFuZCBwZXItY3B1IGludGVycnVwdHMgYmVmb3JlIHdlIHN0YXJ0IHJlc3RvcmUgb2YgdGhlIFJlZGlzdHJpYnV0b3IuCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW52b2tlZCBhZnRlciBEaXN0cmlidXRvciByZXN0b3JlIGJ1dCBwcmlvciB0bworICogQ1BVIGludGVyZmFjZSBlbmFibGUuIFRoZSBwZW5kaW5nIGFuZCBhY3RpdmUgaW50ZXJydXB0cyBhcmUgcmVzdG9yZWQKKyAqIGFmdGVyIHRoZSBpbnRlcnJ1cHRzIGFyZSBmdWxseSBjb25maWd1cmVkIGFuZCBlbmFibGVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnaWN2M19yZGlzdGlmX2luaXRfcmVzdG9yZSh1bnNpZ25lZCBpbnQgcHJvY19udW0sCisJCQkJY29uc3QgZ2ljdjNfcmVkaXN0X2N0eF90ICogY29uc3QgcmRpc3RfY3R4KQoreworCXVpbnRwdHJfdCBnaWNyX2Jhc2U7CisJdW5zaWduZWQgaW50IGludF9pZDsKKworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YSk7CisJYXNzZXJ0KHByb2NfbnVtIDwgZ2ljdjNfZHJpdmVyX2RhdGEtPnJkaXN0aWZfbnVtKTsKKwlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEtPnJkaXN0aWZfYmFzZV9hZGRycyk7CisJYXNzZXJ0KElTX0lOX0VMMygpKTsKKwlhc3NlcnQocmRpc3RfY3R4KTsKKworCWdpY3JfYmFzZSA9IGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX2Jhc2VfYWRkcnNbcHJvY19udW1dOworCisJLyogUG93ZXIgb24gcmVkaXN0cmlidXRvciAqLworCWdpY3YzX3JkaXN0aWZfb24ocHJvY19udW0pOworCisJLyoKKwkgKiBDYWxsIHRoZSBwb3N0LXJlc3RvcmUgaG9vayB0aGF0IGltcGxlbWVudHMgdGhlIElNUCBERUYgc2VxdWVuY2UgdGhhdAorCSAqIG1heSBiZSByZXF1aXJlZCBvbiBzb21lIEdJQyBpbXBsZW1lbnRhdGlvbnMuIEFzIHRoaXMgbWF5IG5lZWQgdG8KKwkgKiBhY2Nlc3MgdGhlIFJlZGlzdHJpYnV0b3IgcmVnaXN0ZXJzLCB3ZSBwYXNzIGl0IHByb2NfbnVtLgorCSAqLworCWdpY3YzX2Rpc3RpZl9wb3N0X3Jlc3RvcmUocHJvY19udW0pOworCisJLyoKKwkgKiBEaXNhYmxlIGFsbCBTR0lzIChpbXAuIGRlZi4pL1BQSXMgYmVmb3JlIGNvbmZpZ3VyaW5nIHRoZW0uIFRoaXMgaXMgYQorCSAqIG1vcmUgc2NhbGFibGUgYXBwcm9hY2ggYXMgaXQgYXZvaWRzIGNsZWFyaW5nIHRoZSBlbmFibGUgYml0cyBpbiB0aGUKKwkgKiBHSUNEX0NUTFIKKwkgKi8KKwlnaWNyX3dyaXRlX2ljZW5hYmxlcjAoZ2ljcl9iYXNlLCB+MCk7CisJLyogV2FpdCBmb3IgcGVuZGluZyB3cml0ZXMgdG8gR0lDUl9JQ0VOQUJMRVIgKi8KKwlnaWNyX3dhaXRfZm9yX3BlbmRpbmdfd3JpdGUoZ2ljcl9iYXNlKTsKKworCS8qCisJICogRGlzYWJsZSB0aGUgTFBJcyB0byBhdm9pZCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yIHdoZW4gd3JpdGluZyB0bworCSAqIEdJQ1JfUFJPUEJBU0VSIGFuZCBHSUNSX1BFTkRCQVNFUi4KKwkgKi8KKwlnaWNyX3dyaXRlX2N0bHIoZ2ljcl9iYXNlLAorCQkJcmRpc3RfY3R4LT5naWNyX2N0bHIgJiB+KEdJQ1JfQ1RMUl9FTl9MUElTX0JJVCkpOworCisJLyogUmVzdG9yZSByZWdpc3RlcnMnIGNvbnRlbnQgKi8KKwlnaWNyX3dyaXRlX3Byb3BiYXNlcihnaWNyX2Jhc2UsIHJkaXN0X2N0eC0+Z2ljcl9wcm9wYmFzZXIpOworCWdpY3Jfd3JpdGVfcGVuZGJhc2VyKGdpY3JfYmFzZSwgcmRpc3RfY3R4LT5naWNyX3BlbmRiYXNlcik7CisKKwlnaWNyX3dyaXRlX2lncm91cHIwKGdpY3JfYmFzZSwgcmRpc3RfY3R4LT5naWNyX2lncm91cHIwKTsKKworCWZvciAoaW50X2lkID0gTUlOX1NHSV9JRDsgaW50X2lkIDwgVE9UQUxfUENQVV9JTlRSX05VTTsKKwkJCWludF9pZCArPSAoMSA8PCBJUFJJT1JJVFlSX1NISUZUKSkgeworCQlnaWNyX3dyaXRlX2lwcmlvcml0eXIoZ2ljcl9iYXNlLCBpbnRfaWQsCisJCXJkaXN0X2N0eC0+Z2ljcl9pcHJpb3JpdHlyWworCQkJCShpbnRfaWQgLSBNSU5fU0dJX0lEKSA+PiBJUFJJT1JJVFlSX1NISUZUXSk7CisJfQorCisJZ2ljcl93cml0ZV9pY2ZncjAoZ2ljcl9iYXNlLCByZGlzdF9jdHgtPmdpY3JfaWNmZ3IwKTsKKwlnaWNyX3dyaXRlX2ljZmdyMShnaWNyX2Jhc2UsIHJkaXN0X2N0eC0+Z2ljcl9pY2ZncjEpOworCWdpY3Jfd3JpdGVfaWdycG1vZHIwKGdpY3JfYmFzZSwgcmRpc3RfY3R4LT5naWNyX2lncnBtb2RyMCk7CisJZ2ljcl93cml0ZV9uc2FjcihnaWNyX2Jhc2UsIHJkaXN0X2N0eC0+Z2ljcl9uc2Fjcik7CisKKwkvKiBSZXN0b3JlIGFmdGVyIGdyb3VwIGFuZCBwcmlvcml0aWVzIGFyZSBzZXQgKi8KKwlnaWNyX3dyaXRlX2lzcGVuZHIwKGdpY3JfYmFzZSwgcmRpc3RfY3R4LT5naWNyX2lzcGVuZHIwKTsKKwlnaWNyX3dyaXRlX2lzYWN0aXZlcjAoZ2ljcl9iYXNlLCByZGlzdF9jdHgtPmdpY3JfaXNhY3RpdmVyMCk7CisKKwkvKgorCSAqIFdhaXQgZm9yIGFsbCB3cml0ZXMgdG8gdGhlIERpc3RyaWJ1dG9yIHRvIGNvbXBsZXRlIGJlZm9yZSBlbmFibGluZworCSAqIHRoZSBTR0kgYW5kIFBQSXMuCisJICovCisJZ2ljcl93YWl0X2Zvcl91cHN0cmVhbV9wZW5kaW5nX3dyaXRlKGdpY3JfYmFzZSk7CisJZ2ljcl93cml0ZV9pc2VuYWJsZXIwKGdpY3JfYmFzZSwgcmRpc3RfY3R4LT5naWNyX2lzZW5hYmxlcjApOworCisJLyoKKwkgKiBSZXN0b3JlIEdJQ1JfQ1RMUi5FbmFibGVfTFBJcyBiaXQgYW5kIHdhaXQgZm9yIHBlbmRpbmcgd3JpdGVzIGluIGNhc2UKKwkgKiB0aGUgZmlyc3Qgd3JpdGUgdG8gR0lDUl9DVExSIHdhcyBzdGlsbCBpbiBmbGlnaHQgKHRoaXMgd3JpdGUgb25seQorCSAqIHJlc3RvcmVzIEdJQ1JfQ1RMUi5FbmFibGVfTFBJcyBhbmQgbm8gd2FpdGluZyBpcyByZXF1aXJlZCBmb3IgdGhpcworCSAqIGJpdCkuCisJICovCisJZ2ljcl93cml0ZV9jdGxyKGdpY3JfYmFzZSwgcmRpc3RfY3R4LT5naWNyX2N0bHIpOworCWdpY3Jfd2FpdF9mb3JfcGVuZGluZ193cml0ZShnaWNyX2Jhc2UpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uIHRvIHNhdmUgdGhlIEdJQyBEaXN0cmlidXRvciByZWdpc3RlciBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uCisgKiBtdXN0IGJlIGludm9rZWQgYWZ0ZXIgQ1BVIGludGVyZmFjZSBkaXNhYmxlIGFuZCBSZWRpc3RyaWJ1dG9yIHNhdmUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdpY3YzX2Rpc3RpZl9zYXZlKGdpY3YzX2Rpc3RfY3R4X3QgKiBjb25zdCBkaXN0X2N0eCkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2ludHM7CisKKwlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEpOworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlKTsKKwlhc3NlcnQoSVNfSU5fRUwzKCkpOworCWFzc2VydChkaXN0X2N0eCk7CisKKwl1aW50cHRyX3QgZ2ljZF9iYXNlID0gZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZTsKKworCW51bV9pbnRzID0gZ2ljZF9yZWFkX3R5cGVyKGdpY2RfYmFzZSk7CisJbnVtX2ludHMgJj0gVFlQRVJfSVRfTElORVNfTk9fTUFTSzsKKwludW1faW50cyA9IChudW1faW50cyArIDEpIDw8IDU7CisKKwlhc3NlcnQobnVtX2ludHMgPD0gTUFYX1NQSV9JRCArIDEpOworCisJLyogV2FpdCBmb3IgcGVuZGluZyB3cml0ZSB0byBjb21wbGV0ZSAqLworCWdpY2Rfd2FpdF9mb3JfcGVuZGluZ193cml0ZShnaWNkX2Jhc2UpOworCisJLyogU2F2ZSB0aGUgR0lDRF9DVExSICovCisJZGlzdF9jdHgtPmdpY2RfY3RsciA9IGdpY2RfcmVhZF9jdGxyKGdpY2RfYmFzZSk7CisKKwkvKiBTYXZlIEdJQ0RfSUdST1VQUiBmb3IgSU5USURzIDMyIC0gMTAyMCAqLworCVNBVkVfR0lDRF9SRUdTKGdpY2RfYmFzZSwgZGlzdF9jdHgsIG51bV9pbnRzLCBpZ3JvdXByLCBJR1JPVVBSKTsKKworCS8qIFNhdmUgR0lDRF9JU0VOQUJMRVIgZm9yIElOVF9JRHMgMzIgLSAxMDIwICovCisJU0FWRV9HSUNEX1JFR1MoZ2ljZF9iYXNlLCBkaXN0X2N0eCwgbnVtX2ludHMsIGlzZW5hYmxlciwgSVNFTkFCTEVSKTsKKworCS8qIFNhdmUgR0lDRF9JU1BFTkRSIGZvciBJTlRJRHMgMzIgLSAxMDIwICovCisJU0FWRV9HSUNEX1JFR1MoZ2ljZF9iYXNlLCBkaXN0X2N0eCwgbnVtX2ludHMsIGlzcGVuZHIsIElTUEVORFIpOworCisJLyogU2F2ZSBHSUNEX0lTQUNUSVZFUiBmb3IgSU5USURzIDMyIC0gMTAyMCAqLworCVNBVkVfR0lDRF9SRUdTKGdpY2RfYmFzZSwgZGlzdF9jdHgsIG51bV9pbnRzLCBpc2FjdGl2ZXIsIElTQUNUSVZFUik7CisKKwkvKiBTYXZlIEdJQ0RfSVBSSU9SSVRZUiBmb3IgSU5USURzIDMyIC0gMTAyMCAqLworCVNBVkVfR0lDRF9SRUdTKGdpY2RfYmFzZSwgZGlzdF9jdHgsIG51bV9pbnRzLCBpcHJpb3JpdHlyLCBJUFJJT1JJVFlSKTsKKworCS8qIFNhdmUgR0lDRF9JQ0ZHUiBmb3IgSU5USURzIDMyIC0gMTAyMCAqLworCVNBVkVfR0lDRF9SRUdTKGdpY2RfYmFzZSwgZGlzdF9jdHgsIG51bV9pbnRzLCBpY2ZnciwgSUNGR1IpOworCisJLyogU2F2ZSBHSUNEX0lHUlBNT0RSIGZvciBJTlRJRHMgMzIgLSAxMDIwICovCisJU0FWRV9HSUNEX1JFR1MoZ2ljZF9iYXNlLCBkaXN0X2N0eCwgbnVtX2ludHMsIGlncnBtb2RyLCBJR1JQTU9EUik7CisKKwkvKiBTYXZlIEdJQ0RfTlNBQ1IgZm9yIElOVElEcyAzMiAtIDEwMjAgKi8KKwlTQVZFX0dJQ0RfUkVHUyhnaWNkX2Jhc2UsIGRpc3RfY3R4LCBudW1faW50cywgbnNhY3IsIE5TQUNSKTsKKworCS8qIFNhdmUgR0lDRF9JUk9VVEVSIGZvciBJTlRJRHMgMzIgLSAxMDI0ICovCisJU0FWRV9HSUNEX1JFR1MoZ2ljZF9iYXNlLCBkaXN0X2N0eCwgbnVtX2ludHMsIGlyb3V0ZXIsIElST1VURVIpOworCisJLyoKKwkgKiBHSUNEX0lUQVJHRVRTUjxuPiBhbmQgR0lDRF9TUEVORFNHSVI8bj4gYXJlIFJBWi9XSSB3aGVuCisJICogR0lDRF9DVExSLkFSRV8oU3xOUykgYml0cyBhcmUgc2V0IHdoaWNoIGlzIHRoZSBjYXNlIGZvciBvdXIgR0lDdjMKKwkgKiBkcml2ZXIuCisJICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb24gdG8gcmVzdG9yZSB0aGUgR0lDIERpc3RyaWJ1dG9yIHJlZ2lzdGVyIGNvbnRleHQuIFdlIGRpc2FibGUgRzAsIEcxUworICogYW5kIEcxTlMgaW50ZXJydXB0IGdyb3VwcyBiZWZvcmUgd2Ugc3RhcnQgcmVzdG9yZSBvZiB0aGUgRGlzdHJpYnV0b3IuIFRoaXMKKyAqIGZ1bmN0aW9uIG11c3QgYmUgaW52b2tlZCBwcmlvciB0byBSZWRpc3RyaWJ1dG9yIHJlc3RvcmUgYW5kIENQVSBpbnRlcmZhY2UKKyAqIGVuYWJsZS4gVGhlIHBlbmRpbmcgYW5kIGFjdGl2ZSBpbnRlcnJ1cHRzIGFyZSByZXN0b3JlZCBhZnRlciB0aGUgaW50ZXJydXB0cworICogYXJlIGZ1bGx5IGNvbmZpZ3VyZWQgYW5kIGVuYWJsZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdpY3YzX2Rpc3RpZl9pbml0X3Jlc3RvcmUoY29uc3QgZ2ljdjNfZGlzdF9jdHhfdCAqIGNvbnN0IGRpc3RfY3R4KQoreworCXVuc2lnbmVkIGludCBudW1faW50cyA9IDA7CisKKwlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEpOworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlKTsKKwlhc3NlcnQoSVNfSU5fRUwzKCkpOworCWFzc2VydChkaXN0X2N0eCk7CisKKwl1aW50cHRyX3QgZ2ljZF9iYXNlID0gZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZTsKKworCS8qCisJICogQ2xlYXIgdGhlICJlbmFibGUiIGJpdHMgZm9yIEcwL0cxUy9HMU5TIGludGVycnVwdHMgYmVmb3JlIGNvbmZpZ3VyaW5nCisJICogdGhlIEFSRV9TIGJpdC4gVGhlIERpc3RyaWJ1dG9yIG1pZ2h0IGdlbmVyYXRlIGEgc3lzdGVtIGVycm9yCisJICogb3RoZXJ3aXNlLgorCSAqLworCWdpY2RfY2xyX2N0bHIoZ2ljZF9iYXNlLAorCQkgICAgICBDVExSX0VOQUJMRV9HMF9CSVQgfAorCQkgICAgICBDVExSX0VOQUJMRV9HMVNfQklUIHwKKwkJICAgICAgQ1RMUl9FTkFCTEVfRzFOU19CSVQsCisJCSAgICAgIFJXUF9UUlVFKTsKKworCS8qIFNldCB0aGUgQVJFX1MgYW5kIEFSRV9OUyBiaXQgbm93IHRoYXQgaW50ZXJydXB0cyBoYXZlIGJlZW4gZGlzYWJsZWQgKi8KKwlnaWNkX3NldF9jdGxyKGdpY2RfYmFzZSwgQ1RMUl9BUkVfU19CSVQgfCBDVExSX0FSRV9OU19CSVQsIFJXUF9UUlVFKTsKKworCW51bV9pbnRzID0gZ2ljZF9yZWFkX3R5cGVyKGdpY2RfYmFzZSk7CisJbnVtX2ludHMgJj0gVFlQRVJfSVRfTElORVNfTk9fTUFTSzsKKwludW1faW50cyA9IChudW1faW50cyArIDEpIDw8IDU7CisKKwlhc3NlcnQobnVtX2ludHMgPD0gTUFYX1NQSV9JRCArIDEpOworCisJLyogUmVzdG9yZSBHSUNEX0lHUk9VUFIgZm9yIElOVElEcyAzMiAtIDEwMjAgKi8KKwlSRVNUT1JFX0dJQ0RfUkVHUyhnaWNkX2Jhc2UsIGRpc3RfY3R4LCBudW1faW50cywgaWdyb3VwciwgSUdST1VQUik7CisKKwkvKiBSZXN0b3JlIEdJQ0RfSVBSSU9SSVRZUiBmb3IgSU5USURzIDMyIC0gMTAyMCAqLworCVJFU1RPUkVfR0lDRF9SRUdTKGdpY2RfYmFzZSwgZGlzdF9jdHgsIG51bV9pbnRzLCBpcHJpb3JpdHlyLCBJUFJJT1JJVFlSKTsKKworCS8qIFJlc3RvcmUgR0lDRF9JQ0ZHUiBmb3IgSU5USURzIDMyIC0gMTAyMCAqLworCVJFU1RPUkVfR0lDRF9SRUdTKGdpY2RfYmFzZSwgZGlzdF9jdHgsIG51bV9pbnRzLCBpY2ZnciwgSUNGR1IpOworCisJLyogUmVzdG9yZSBHSUNEX0lHUlBNT0RSIGZvciBJTlRJRHMgMzIgLSAxMDIwICovCisJUkVTVE9SRV9HSUNEX1JFR1MoZ2ljZF9iYXNlLCBkaXN0X2N0eCwgbnVtX2ludHMsIGlncnBtb2RyLCBJR1JQTU9EUik7CisKKwkvKiBSZXN0b3JlIEdJQ0RfTlNBQ1IgZm9yIElOVElEcyAzMiAtIDEwMjAgKi8KKwlSRVNUT1JFX0dJQ0RfUkVHUyhnaWNkX2Jhc2UsIGRpc3RfY3R4LCBudW1faW50cywgbnNhY3IsIE5TQUNSKTsKKworCS8qIFJlc3RvcmUgR0lDRF9JUk9VVEVSIGZvciBJTlRJRHMgMzIgLSAxMDIwICovCisJUkVTVE9SRV9HSUNEX1JFR1MoZ2ljZF9iYXNlLCBkaXN0X2N0eCwgbnVtX2ludHMsIGlyb3V0ZXIsIElST1VURVIpOworCisJLyoKKwkgKiBSZXN0b3JlIElTRU5BQkxFUiwgSVNQRU5EUiBhbmQgSVNBQ1RJVkVSIGFmdGVyIHRoZSBpbnRlcnJ1cHRzIGFyZQorCSAqIGNvbmZpZ3VyZWQuCisJICovCisKKwkvKiBSZXN0b3JlIEdJQ0RfSVNFTkFCTEVSIGZvciBJTlRfSURzIDMyIC0gMTAyMCAqLworCVJFU1RPUkVfR0lDRF9SRUdTKGdpY2RfYmFzZSwgZGlzdF9jdHgsIG51bV9pbnRzLCBpc2VuYWJsZXIsIElTRU5BQkxFUik7CisKKwkvKiBSZXN0b3JlIEdJQ0RfSVNQRU5EUiBmb3IgSU5USURzIDMyIC0gMTAyMCAqLworCVJFU1RPUkVfR0lDRF9SRUdTKGdpY2RfYmFzZSwgZGlzdF9jdHgsIG51bV9pbnRzLCBpc3BlbmRyLCBJU1BFTkRSKTsKKworCS8qIFJlc3RvcmUgR0lDRF9JU0FDVElWRVIgZm9yIElOVElEcyAzMiAtIDEwMjAgKi8KKwlSRVNUT1JFX0dJQ0RfUkVHUyhnaWNkX2Jhc2UsIGRpc3RfY3R4LCBudW1faW50cywgaXNhY3RpdmVyLCBJU0FDVElWRVIpOworCisJLyogUmVzdG9yZSB0aGUgR0lDRF9DVExSICovCisJZ2ljZF93cml0ZV9jdGxyKGdpY2RfYmFzZSwgZGlzdF9jdHgtPmdpY2RfY3Rscik7CisJZ2ljZF93YWl0X2Zvcl9wZW5kaW5nX3dyaXRlKGdpY2RfYmFzZSk7CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgcHJpb3JpdHkgb2YgdGhlIGludGVycnVwdCB0aGUgcHJvY2Vzc29yIGlzIGN1cnJlbnRseQorICogc2VydmljaW5nLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Vuc2lnbmVkIGludCBnaWN2M19nZXRfcnVubmluZ19wcmlvcml0eSh2b2lkKQoreworCXJldHVybiByZWFkX2ljY19ycHJfZWwxKCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgaW50ZXJydXB0IGlkZW50aWZpZWQgYnkgaWQgaXMgYWN0aXZlICh3aGV0aGVyIHRoZQorICogc3RhdGUgaXMgZWl0aGVyIGFjdGl2ZSwgb3IgYWN0aXZlIGFuZCBwZW5kaW5nKS4gVGhlIHByb2NfbnVtIGlzIHVzZWQgaWYgdGhlCisgKiBpbnRlcnJ1cHQgaXMgU0dJIG9yIFBQSSBhbmQgcHJvZ3JhbXMgdGhlIGNvcnJlc3BvbmRpbmcgUmVkaXN0cmlidXRvcgorICogaW50ZXJmYWNlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Vuc2lnbmVkIGludCBnaWN2M19nZXRfaW50ZXJydXB0X2FjdGl2ZSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcm9jX251bSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEpOworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlKTsKKwlhc3NlcnQocHJvY19udW0gPCBnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9udW0pOworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9iYXNlX2FkZHJzKTsKKwlhc3NlcnQoaWQgPD0gTUFYX1NQSV9JRCk7CisKKwlpZiAoaWQgPCBNSU5fU1BJX0lEKSB7CisJCS8qIEZvciBTR0lzIGFuZCBQUElzICovCisJCXZhbHVlID0gZ2ljcl9nZXRfaXNhY3RpdmVyMCgKKwkJCQlnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9iYXNlX2FkZHJzW3Byb2NfbnVtXSwgaWQpOworCX0gZWxzZSB7CisJCXZhbHVlID0gZ2ljZF9nZXRfaXNhY3RpdmVyKGdpY3YzX2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UsIGlkKTsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGludGVycnVwdCBpZGVudGlmaWVkIGJ5IGlkLiBUaGUgcHJvY19udW0KKyAqIGlzIHVzZWQgaWYgdGhlIGludGVycnVwdCBpcyBTR0kgb3IgUFBJLCBhbmQgcHJvZ3JhbXMgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIFJlZGlzdHJpYnV0b3IgaW50ZXJmYWNlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2ljdjNfZW5hYmxlX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcm9jX251bSkKK3sKKwlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEpOworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlKTsKKwlhc3NlcnQocHJvY19udW0gPCBnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9udW0pOworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9iYXNlX2FkZHJzKTsKKwlhc3NlcnQoaWQgPD0gTUFYX1NQSV9JRCk7CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IGFueSBzaGFyZWQgdmFyaWFibGUgdXBkYXRlcyBkZXBlbmRpbmcgb24gb3V0IG9mIGJhbmQKKwkgKiBpbnRlcnJ1cHQgdHJpZ2dlciBhcmUgb2JzZXJ2ZWQgYmVmb3JlIGVuYWJsaW5nIGludGVycnVwdC4KKwkgKi8KKwlkc2Jpc2hzdCgpOworCWlmIChpZCA8IE1JTl9TUElfSUQpIHsKKwkJLyogRm9yIFNHSXMgYW5kIFBQSXMgKi8KKwkJZ2ljcl9zZXRfaXNlbmFibGVyMCgKKwkJCQlnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9iYXNlX2FkZHJzW3Byb2NfbnVtXSwKKwkJCQlpZCk7CisJfSBlbHNlIHsKKwkJZ2ljZF9zZXRfaXNlbmFibGVyKGdpY3YzX2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UsIGlkKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBpbnRlcnJ1cHQgaWRlbnRpZmllZCBieSBpZC4gVGhlIHByb2NfbnVtCisgKiBpcyB1c2VkIGlmIHRoZSBpbnRlcnJ1cHQgaXMgU0dJIG9yIFBQSSwgYW5kIHByb2dyYW1zIHRoZSBjb3JyZXNwb25kaW5nCisgKiBSZWRpc3RyaWJ1dG9yIGludGVyZmFjZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdpY3YzX2Rpc2FibGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHByb2NfbnVtKQoreworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YSk7CisJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOworCWFzc2VydChwcm9jX251bSA8IGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX251bSk7CisJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX2Jhc2VfYWRkcnMpOworCWFzc2VydChpZCA8PSBNQVhfU1BJX0lEKTsKKworCS8qCisJICogRGlzYWJsZSBpbnRlcnJ1cHQsIGFuZCBlbnN1cmUgdGhhdCBhbnkgc2hhcmVkIHZhcmlhYmxlIHVwZGF0ZXMKKwkgKiBkZXBlbmRpbmcgb24gb3V0IG9mIGJhbmQgaW50ZXJydXB0IHRyaWdnZXIgYXJlIG9ic2VydmVkIGFmdGVyd2FyZHMuCisJICovCisJaWYgKGlkIDwgTUlOX1NQSV9JRCkgeworCQkvKiBGb3IgU0dJcyBhbmQgUFBJcyAqLworCQlnaWNyX3NldF9pY2VuYWJsZXIwKAorCQkJCWdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX2Jhc2VfYWRkcnNbcHJvY19udW1dLAorCQkJCWlkKTsKKworCQkvKiBXcml0ZSB0byBjbGVhciBlbmFibGUgcmVxdWlyZXMgd2FpdGluZyBmb3IgcGVuZGluZyB3cml0ZXMgKi8KKwkJZ2ljcl93YWl0X2Zvcl9wZW5kaW5nX3dyaXRlKAorCQkJCWdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX2Jhc2VfYWRkcnNbcHJvY19udW1dKTsKKwl9IGVsc2UgeworCQlnaWNkX3NldF9pY2VuYWJsZXIoZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwgaWQpOworCisJCS8qIFdyaXRlIHRvIGNsZWFyIGVuYWJsZSByZXF1aXJlcyB3YWl0aW5nIGZvciBwZW5kaW5nIHdyaXRlcyAqLworCQlnaWNkX3dhaXRfZm9yX3BlbmRpbmdfd3JpdGUoZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSk7CisJfQorCisJZHNiaXNoc3QoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgaW50ZXJydXB0IHByaW9yaXR5IGFzIHN1cHBsaWVkIGZvciB0aGUgZ2l2ZW4gaW50ZXJydXB0CisgKiBpZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdpY3YzX3NldF9pbnRlcnJ1cHRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgcHJvY19udW0sCisJCXVuc2lnbmVkIGludCBwcmlvcml0eSkKK3sKKwl1aW50cHRyX3QgZ2ljcl9iYXNlOworCisJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhKTsKKwlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSk7CisJYXNzZXJ0KHByb2NfbnVtIDwgZ2ljdjNfZHJpdmVyX2RhdGEtPnJkaXN0aWZfbnVtKTsKKwlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEtPnJkaXN0aWZfYmFzZV9hZGRycyk7CisJYXNzZXJ0KGlkIDw9IE1BWF9TUElfSUQpOworCisJaWYgKGlkIDwgTUlOX1NQSV9JRCkgeworCQlnaWNyX2Jhc2UgPSBnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9iYXNlX2FkZHJzW3Byb2NfbnVtXTsKKwkJZ2ljcl9zZXRfaXByaW9yaXR5cihnaWNyX2Jhc2UsIGlkLCBwcmlvcml0eSk7CisJfSBlbHNlIHsKKwkJZ2ljZF9zZXRfaXByaW9yaXR5cihnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlLCBpZCwgcHJpb3JpdHkpOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gYXNzaWducyBncm91cCBmb3IgdGhlIGludGVycnVwdCBpZGVudGlmaWVkIGJ5IGlkLiBUaGUgcHJvY19udW0KKyAqIGlzIHVzZWQgaWYgdGhlIGludGVycnVwdCBpcyBTR0kgb3IgUFBJLCBhbmQgcHJvZ3JhbXMgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIFJlZGlzdHJpYnV0b3IgaW50ZXJmYWNlLiBUaGUgZ3JvdXAgY2FuIGJlIGFueSBvZiBHSUNWM19JTlRSX0dST1VQKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2ljdjNfc2V0X2ludGVycnVwdF90eXBlKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHByb2NfbnVtLAorCQl1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaWdyb3VwID0gMCwgZ3JwbW9kID0gMDsKKwl1aW50cHRyX3QgZ2ljcl9iYXNlOworCisJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhKTsKKwlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSk7CisJYXNzZXJ0KHByb2NfbnVtIDwgZ2ljdjNfZHJpdmVyX2RhdGEtPnJkaXN0aWZfbnVtKTsKKwlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEtPnJkaXN0aWZfYmFzZV9hZGRycyk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElOVFJfR1JPVVAxUzoKKwkJaWdyb3VwID0gMDsKKwkJZ3JwbW9kID0gMTsKKwkJYnJlYWs7CisJY2FzZSBJTlRSX0dST1VQMDoKKwkJaWdyb3VwID0gMDsKKwkJZ3JwbW9kID0gMDsKKwkJYnJlYWs7CisJY2FzZSBJTlRSX0dST1VQMU5TOgorCQlpZ3JvdXAgPSAxOworCQlncnBtb2QgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhc3NlcnQoMCk7CisJfQorCisJaWYgKGlkIDwgTUlOX1NQSV9JRCkgeworCQlnaWNyX2Jhc2UgPSBnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9iYXNlX2FkZHJzW3Byb2NfbnVtXTsKKwkJaWYgKGlncm91cCkKKwkJCWdpY3Jfc2V0X2lncm91cHIwKGdpY3JfYmFzZSwgaWQpOworCQllbHNlCisJCQlnaWNyX2Nscl9pZ3JvdXByMChnaWNyX2Jhc2UsIGlkKTsKKworCQlpZiAoZ3JwbW9kKQorCQkJZ2ljcl9zZXRfaWdycG1vZHIwKGdpY3JfYmFzZSwgaWQpOworCQllbHNlCisJCQlnaWNyX2Nscl9pZ3JwbW9kcjAoZ2ljcl9iYXNlLCBpZCk7CisJfSBlbHNlIHsKKwkJLyogU2VyaWFsaXplIHJlYWQtbW9kaWZ5LXdyaXRlIHRvIERpc3RyaWJ1dG9yIHJlZ2lzdGVycyAqLworCQlzcGluX2xvY2soJmdpY19sb2NrKTsKKwkJaWYgKGlncm91cCkKKwkJCWdpY2Rfc2V0X2lncm91cHIoZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwgaWQpOworCQllbHNlCisJCQlnaWNkX2Nscl9pZ3JvdXByKGdpY3YzX2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UsIGlkKTsKKworCQlpZiAoZ3JwbW9kKQorCQkJZ2ljZF9zZXRfaWdycG1vZHIoZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwgaWQpOworCQllbHNlCisJCQlnaWNkX2Nscl9pZ3JwbW9kcihnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlLCBpZCk7CisJCXNwaW5fdW5sb2NrKCZnaWNfbG9jayk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmdW5jdGlvbiByYWlzZXMgdGhlIHNwZWNpZmllZCBTZWN1cmUgR3JvdXAgMCBTR0kuCisgKgorICogVGhlIHRhcmdldCBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbGlkIE1QSURSIGluIHRoZSBzeXN0ZW0uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnaWN2M19yYWlzZV9zZWN1cmVfZzBfc2dpKGludCBzZ2lfbnVtLCB1X3JlZ2lzdGVyX3QgdGFyZ2V0KQoreworCXVuc2lnbmVkIGludCB0Z3QsIGFmZjMsIGFmZjIsIGFmZjEsIGFmZjA7CisJdWludDY0X3Qgc2dpX3ZhbDsKKworCS8qIFZlcmlmeSBpbnRlcnJ1cHQgbnVtYmVyIGlzIGluIHRoZSBTR0kgcmFuZ2UgKi8KKwlhc3NlcnQoKHNnaV9udW0gPj0gTUlOX1NHSV9JRCkgJiYgKHNnaV9udW0gPCBNSU5fUFBJX0lEKSk7CisKKwkvKiBFeHRyYWN0IGFmZmluaXR5IGZpZWxkcyBmcm9tIHRhcmdldCAqLworCWFmZjAgPSBNUElEUl9BRkZMVkwwX1ZBTCh0YXJnZXQpOworCWFmZjEgPSBNUElEUl9BRkZMVkwxX1ZBTCh0YXJnZXQpOworCWFmZjIgPSBNUElEUl9BRkZMVkwyX1ZBTCh0YXJnZXQpOworCWFmZjMgPSBNUElEUl9BRkZMVkwzX1ZBTCh0YXJnZXQpOworCisJLyoKKwkgKiBNYWtlIHRhcmdldCBsaXN0IGZyb20gYWZmaW5pdHkgMCwgYW5kIGVuc3VyZSBHSUN2MyBTR0kgY2FuIHRhcmdldAorCSAqIHRoaXMgUEUuCisJICovCisJYXNzZXJ0KGFmZjAgPCBHSUNWM19NQVhfU0dJX1RBUkdFVFMpOworCXRndCA9IEJJVChhZmYwKTsKKworCS8qIFJhaXNlIFNHSSB0byBQRSBzcGVjaWZpZWQgYnkgaXRzIGFmZmluaXR5ICovCisJc2dpX3ZhbCA9IEdJQ1YzX1NHSVJfVkFMVUUoYWZmMywgYWZmMiwgYWZmMSwgc2dpX251bSwgU0dJUl9JUk1fVE9fQUZGLAorCQkJdGd0KTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgYW55IHNoYXJlZCB2YXJpYWJsZSB1cGRhdGVzIGRlcGVuZGluZyBvbiBvdXQgb2YgYmFuZAorCSAqIGludGVycnVwdCB0cmlnZ2VyIGFyZSBvYnNlcnZlZCBiZWZvcmUgcmFpc2luZyBTR0kuCisJICovCisJZHNiaXNoc3QoKTsKKwl3cml0ZV9pY2Nfc2dpMHJfZWwxKHNnaV92YWwpOworCWlzYigpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBpbnRlcnJ1cHQgcm91dGluZyBmb3IgdGhlIGdpdmVuIFNQSSBpbnRlcnJ1cHQgaWQuCisgKiBUaGUgaW50ZXJydXB0IHJvdXRpbmcgaXMgc3BlY2lmaWVkIGluIHJvdXRpbmcgbW9kZSBhbmQgbXBpZHIuCisgKgorICogVGhlIHJvdXRpbmcgbW9kZSBjYW4gYmUgZWl0aGVyIG9mOgorICogIC0gR0lDVjNfSVJNX0FOWQorICogIC0gR0lDVjNfSVJNX1BFCisgKgorICogVGhlIG1waWRyIGlzIHRoZSBhZmZpbml0eSBvZiB0aGUgUEUgdG8gd2hpY2ggdGhlIGludGVycnVwdCB3aWxsIGJlIHJvdXRlZCwKKyAqIGFuZCBpcyBpZ25vcmVkIGZvciByb3V0aW5nIG1vZGUgR0lDVjNfSVJNX0FOWS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdpY3YzX3NldF9zcGlfcm91dGluZyh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBpcm0sIHVfcmVnaXN0ZXJfdCBtcGlkcikKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWZmOworCXVpbnQ2NF90IHJvdXRlcjsKKworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YSk7CisJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOworCisJYXNzZXJ0KChpcm0gPT0gR0lDVjNfSVJNX0FOWSkgfHwgKGlybSA9PSBHSUNWM19JUk1fUEUpKTsKKwlhc3NlcnQoaWQgPj0gTUlOX1NQSV9JRCAmJiBpZCA8PSBNQVhfU1BJX0lEKTsKKworCWFmZiA9IGdpY2RfaXJvdXRlcl92YWxfZnJvbV9tcGlkcihtcGlkciwgaXJtKTsKKwlnaWNkX3dyaXRlX2lyb3V0ZXIoZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwgaWQsIGFmZik7CisKKwkvKgorCSAqIEluIGltcGxlbWVudGF0aW9ucyB0aGF0IGRvIG5vdCByZXF1aXJlIDEgb2YgTiBkaXN0cmlidXRpb24gb2YgU1BJcywKKwkgKiBJUk0gbWlnaHQgYmUgUkFaL1dJLiBSZWFkIGJhY2sgYW5kIHZlcmlmeSBJUk0gYml0LgorCSAqLworCWlmIChpcm0gPT0gR0lDVjNfSVJNX0FOWSkgeworCQlyb3V0ZXIgPSBnaWNkX3JlYWRfaXJvdXRlcihnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlLCBpZCk7CisJCWlmICghKChyb3V0ZXIgPj4gSVJPVVRFUl9JUk1fU0hJRlQpICYgSVJPVVRFUl9JUk1fTUFTSykpIHsKKwkJCUVSUk9SKCJHSUN2MyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnQgcm91dGluZyBBTllcbiIpOworCQkJcGFuaWMoKTsKKwkJfQorCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBwZW5kaW5nIHN0YXR1cyBvZiBhbiBpbnRlcnJ1cHQgaWRlbnRpZmllZCBieSBpZC4KKyAqIFRoZSBwcm9jX251bSBpcyB1c2VkIGlmIHRoZSBpbnRlcnJ1cHQgaXMgU0dJIG9yIFBQSSwgYW5kIHByb2dyYW1zIHRoZQorICogY29ycmVzcG9uZGluZyBSZWRpc3RyaWJ1dG9yIGludGVyZmFjZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdpY3YzX2NsZWFyX2ludGVycnVwdF9wZW5kaW5nKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHByb2NfbnVtKQoreworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YSk7CisJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UpOworCWFzc2VydChwcm9jX251bSA8IGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX251bSk7CisJYXNzZXJ0KGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX2Jhc2VfYWRkcnMpOworCisJLyoKKwkgKiBDbGVhciBwZW5kaW5nIGludGVycnVwdCwgYW5kIGVuc3VyZSB0aGF0IGFueSBzaGFyZWQgdmFyaWFibGUgdXBkYXRlcworCSAqIGRlcGVuZGluZyBvbiBvdXQgb2YgYmFuZCBpbnRlcnJ1cHQgdHJpZ2dlciBhcmUgb2JzZXJ2ZWQgYWZ0ZXJ3YXJkcy4KKwkgKi8KKwlpZiAoaWQgPCBNSU5fU1BJX0lEKSB7CisJCS8qIEZvciBTR0lzIGFuZCBQUElzICovCisJCWdpY3Jfc2V0X2ljcGVuZHIwKGdpY3YzX2RyaXZlcl9kYXRhLT5yZGlzdGlmX2Jhc2VfYWRkcnNbcHJvY19udW1dLAorCQkJCWlkKTsKKwl9IGVsc2UgeworCQlnaWNkX3NldF9pY3BlbmRyKGdpY3YzX2RyaXZlcl9kYXRhLT5naWNkX2Jhc2UsIGlkKTsKKwl9CisJZHNiaXNoc3QoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcGVuZGluZyBzdGF0dXMgb2YgYW4gaW50ZXJydXB0IGlkZW50aWZpZWQgYnkgaWQuCisgKiBUaGUgcHJvY19udW0gaXMgdXNlZCBpZiB0aGUgaW50ZXJydXB0IGlzIFNHSSBvciBQUEkgYW5kIHByb2dyYW1zIHRoZQorICogY29ycmVzcG9uZGluZyBSZWRpc3RyaWJ1dG9yIGludGVyZmFjZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdpY3YzX3NldF9pbnRlcnJ1cHRfcGVuZGluZyh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcm9jX251bSkKK3sKKwlhc3NlcnQoZ2ljdjNfZHJpdmVyX2RhdGEpOworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YS0+Z2ljZF9iYXNlKTsKKwlhc3NlcnQocHJvY19udW0gPCBnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9udW0pOworCWFzc2VydChnaWN2M19kcml2ZXJfZGF0YS0+cmRpc3RpZl9iYXNlX2FkZHJzKTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgYW55IHNoYXJlZCB2YXJpYWJsZSB1cGRhdGVzIGRlcGVuZGluZyBvbiBvdXQgb2YgYmFuZAorCSAqIGludGVycnVwdCB0cmlnZ2VyIGFyZSBvYnNlcnZlZCBiZWZvcmUgc2V0dGluZyBpbnRlcnJ1cHQgcGVuZGluZy4KKwkgKi8KKwlkc2Jpc2hzdCgpOworCWlmIChpZCA8IE1JTl9TUElfSUQpIHsKKwkJLyogRm9yIFNHSXMgYW5kIFBQSXMgKi8KKwkJZ2ljcl9zZXRfaXNwZW5kcjAoZ2ljdjNfZHJpdmVyX2RhdGEtPnJkaXN0aWZfYmFzZV9hZGRyc1twcm9jX251bV0sCisJCQkJaWQpOworCX0gZWxzZSB7CisJCWdpY2Rfc2V0X2lzcGVuZHIoZ2ljdjNfZHJpdmVyX2RhdGEtPmdpY2RfYmFzZSwgaWQpOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUE1SIHJlZ2lzdGVyIHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlLiBSZXR1cm5zIHRoZQorICogb3JpZ2luYWwgUE1SLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Vuc2lnbmVkIGludCBnaWN2M19zZXRfcG1yKHVuc2lnbmVkIGludCBtYXNrKQoreworCXVuc2lnbmVkIGludCBvbGRfbWFzazsKKworCW9sZF9tYXNrID0gcmVhZF9pY2NfcG1yX2VsMSgpOworCisJLyoKKwkgKiBPcmRlciBtZW1vcnkgdXBkYXRlcyB3LnIudC4gUE1SIHdyaXRlLCBhbmQgZW5zdXJlIHRoZXkncmUgdmlzaWJsZQorCSAqIGJlZm9yZSBwb3RlbnRpYWwgb3V0IG9mIGJhbmQgaW50ZXJydXB0IHRyaWdnZXIgYmVjYXVzZSBvZiBQTVIgdXBkYXRlLgorCSAqIFBNUiBzeXN0ZW0gcmVnaXN0ZXIgd3JpdGVzIGFyZSBzZWxmLXN5bmNocm9uaXppbmcsIHNvIG5vIElTQiByZXF1aXJlZAorCSAqIHRoZXJlYWZ0ZXIuCisJICovCisJZHNiaXNoc3QoKTsKKwl3cml0ZV9pY2NfcG1yX2VsMShtYXNrKTsKKworCXJldHVybiBvbGRfbWFzazsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXJtL2dpYy92My9naWN2M19wcml2YXRlLmggYi9kcml2ZXJzL2FybS9naWMvdjMvZ2ljdjNfcHJpdmF0ZS5oCmluZGV4IGY5NWNmYWIuLjUyMDM5MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXJtL2dpYy92My9naWN2M19wcml2YXRlLmgKKysrIGIvZHJpdmVycy9hcm0vZ2ljL3YzL2dpY3YzX3ByaXZhdGUuaApAQCAtNyw2ICs3LDcgQEAKICNpZm5kZWYgX19HSUNWM19QUklWQVRFX0hfXwogI2RlZmluZSBfX0dJQ1YzX1BSSVZBVEVfSF9fCiAKKyNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxnaWNfY29tbW9uLmg+CiAjaW5jbHVkZSA8Z2ljdjMuaD4KICNpbmNsdWRlIDxtbWlvLmg+CkBAIC0yMiwxNyArMjMsNiBAQAogI2RlZmluZSBSV1BfRkFMU0UJCTAKIAogLyoKLSAqIE1hY3JvIHRvIHdhaXQgZm9yIHVwZGF0ZXMgdG8gOgotICogR0lDRF9DVExSWzI6MF0gLSB0aGUgR3JvdXAgRW5hYmxlcwotICogR0lDRF9DVExSWzU6NF0gLSB0aGUgQVJFIGJpdHMKLSAqIEdJQ0RfSUNFTkFCTEVSbiAtIHRoZSBjbGVhcmluZyBvZiBlbmFibGUgc3RhdGUgZm9yIFNQSXMKLSAqLwotI2RlZmluZSBnaWNkX3dhaXRfZm9yX3BlbmRpbmdfd3JpdGUoZ2ljZF9iYXNlKQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJOwkJCQkJCVwKLQl9IHdoaWxlIChnaWNkX3JlYWRfY3RscihnaWNkX2Jhc2UpICYgR0lDRF9DVExSX1JXUF9CSVQpCi0KLS8qCiAgKiBNYWNybyB0byBjb252ZXJ0IGFuIG1waWRyIHRvIGEgdmFsdWUgc3VpdGFibGUgZm9yIHByb2dyYW1taW5nIGludG8gYQogICogR0lDRF9JUk9VVEVSLiBCaXRzWzMxOjI0XSBpbiB0aGUgTVBJRFIgYXJlIGNsZWFyZWQgYXMgdGhleSBhcmUgbm90IHJlbGV2YW50CiAgKiB0byBHSUN2My4KQEAgLTQyLDE4ICszMiw2IEBACiAJIChpcm0gJiBJUk9VVEVSX0lSTV9NQVNLKSA8PCBJUk9VVEVSX0lSTV9TSElGVCkKIAogLyoKLSAqIE1hY3JvIHRvIHdhaXQgZm9yIHVwZGF0ZXMgdG8gOgotICogR0lDUl9JQ0VOQUJMRVIwCi0gKiBHSUNSX0NUTFIuRFBHMVMKLSAqIEdJQ1JfQ1RMUi5EUEcxTlMKLSAqIEdJQ1JfQ1RMUi5EUEcwCi0gKi8KLSNkZWZpbmUgZ2ljcl93YWl0X2Zvcl9wZW5kaW5nX3dyaXRlKGdpY3JfYmFzZSkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCTsJCQkJCQlcCi0JfSB3aGlsZSAoZ2ljcl9yZWFkX2N0bHIoZ2ljcl9iYXNlKSAmIEdJQ1JfQ1RMUl9SV1BfQklUKQotCi0vKgogICogTWFjcm8gdG8gY29udmVydCBhIEdJQ1JfVFlQRVIgYWZmaW5pdHkgdmFsdWUgaW50byBhIE1QSURSIHZhbHVlLiBCaXRzWzMxOjI0XQogICogYXJlIHplcm9lcy4KICAqLwpAQCAtNjYsNiArNDQsMTEgQEAKICNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR0lDdjMgcHJpdmF0ZSBnbG9iYWwgdmFyaWFibGVzIGRlY2xhcmF0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBjb25zdCBnaWN2M19kcml2ZXJfZGF0YV90ICpnaWN2M19kcml2ZXJfZGF0YTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFByaXZhdGUgR0lDdjMgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYWNjZXNzaW5nIGVudGlyZSByZWdpc3RlcnMuCiAgKiBOb3RlOiBUaGUgcmF3IHJlZ2lzdGVyIHZhbHVlcyBjb3JyZXNwb25kIHRvIG11bHRpcGxlIGludGVycnVwdCBJRHMgYW5kCiAgKiB0aGUgbnVtYmVyIG9mIGludGVycnVwdCBJRHMgaW52b2x2ZWQgZGVwZW5kcyBvbiB0aGUgcmVnaXN0ZXIgYWNjZXNzZWQuCkBAIC04NCw5ICs2NywxMyBAQAogdW5zaWduZWQgaW50IGdpY2RfZ2V0X2lncnBtb2RyKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQpOwogdW5zaWduZWQgaW50IGdpY3JfZ2V0X2lncnBtb2RyMCh1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkKTsKIHVuc2lnbmVkIGludCBnaWNyX2dldF9pZ3JvdXByMCh1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkKTsKK3Vuc2lnbmVkIGludCBnaWNyX2dldF9pc2FjdGl2ZXIwKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQpOwogdm9pZCBnaWNkX3NldF9pZ3JwbW9kcih1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkKTsKIHZvaWQgZ2ljcl9zZXRfaWdycG1vZHIwKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQpOwogdm9pZCBnaWNyX3NldF9pc2VuYWJsZXIwKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQpOwordm9pZCBnaWNyX3NldF9pY2VuYWJsZXIwKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQpOwordm9pZCBnaWNyX3NldF9pc3BlbmRyMCh1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkKTsKK3ZvaWQgZ2ljcl9zZXRfaWNwZW5kcjAodWludHB0cl90IGJhc2UsIHVuc2lnbmVkIGludCBpZCk7CiB2b2lkIGdpY3Jfc2V0X2lncm91cHIwKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQpOwogdm9pZCBnaWNkX2Nscl9pZ3JwbW9kcih1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGlkKTsKIHZvaWQgZ2ljcl9jbHJfaWdycG1vZHIwKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaWQpOwpAQCAtOTgsNiArODUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgZ2ljdjNfc3Bpc19jb25maWd1cmVfZGVmYXVsdHModWludHB0cl90IGdpY2RfYmFzZSk7CiB2b2lkIGdpY3YzX3BwaV9zZ2lfY29uZmlndXJlX2RlZmF1bHRzKHVpbnRwdHJfdCBnaWNyX2Jhc2UpOworI2lmICFFUlJPUl9ERVBSRUNBVEVECiB2b2lkIGdpY3YzX3NlY3VyZV9zcGlzX2NvbmZpZ3VyZSh1aW50cHRyX3QgZ2ljZF9iYXNlLAogCQkJCSAgICAgdW5zaWduZWQgaW50IG51bV9pbnRzLAogCQkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50ICpzZWNfaW50cl9saXN0LApAQCAtMTA2LDYgKzk0LDEzIEBACiAJCQkJCXVuc2lnbmVkIGludCBudW1faW50cywKIAkJCQkJY29uc3QgdW5zaWduZWQgaW50ICpzZWNfaW50cl9saXN0LAogCQkJCQl1bnNpZ25lZCBpbnQgaW50X2dycCk7CisjZW5kaWYKK3Vuc2lnbmVkIGludCBnaWN2M19zZWN1cmVfcHBpX3NnaV9jb25maWd1cmVfcHJvcHModWludHB0cl90IGdpY3JfYmFzZSwKKwkJY29uc3QgaW50ZXJydXB0X3Byb3BfdCAqaW50ZXJydXB0X3Byb3BzLAorCQl1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3Byb3BzX251bSk7Cit1bnNpZ25lZCBpbnQgZ2ljdjNfc2VjdXJlX3NwaXNfY29uZmlndXJlX3Byb3BzKHVpbnRwdHJfdCBnaWNkX2Jhc2UsCisJCWNvbnN0IGludGVycnVwdF9wcm9wX3QgKmludGVycnVwdF9wcm9wcywKKwkJdW5zaWduZWQgaW50IGludGVycnVwdF9wcm9wc19udW0pOwogdm9pZCBnaWN2M19yZGlzdGlmX2Jhc2VfYWRkcnNfcHJvYmUodWludHB0cl90ICpyZGlzdGlmX2Jhc2VfYWRkcnMsCiAJCQkJCXVuc2lnbmVkIGludCByZGlzdGlmX251bSwKIAkJCQkJdWludHB0cl90IGdpY3JfYmFzZSwKQEAgLTExNiw2ICsxMTEsMTggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHSUMgRGlzdHJpYnV0b3IgaW50ZXJmYWNlIGFjY2Vzc29ycwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBXYWl0IGZvciB1cGRhdGVzIHRvIDoKKyAqIEdJQ0RfQ1RMUlsyOjBdIC0gdGhlIEdyb3VwIEVuYWJsZXMKKyAqIEdJQ0RfQ1RMUls1OjRdIC0gdGhlIEFSRSBiaXRzCisgKiBHSUNEX0lDRU5BQkxFUm4gLSB0aGUgY2xlYXJpbmcgb2YgZW5hYmxlIHN0YXRlIGZvciBTUElzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBnaWNkX3dhaXRfZm9yX3BlbmRpbmdfd3JpdGUodWludHB0cl90IGdpY2RfYmFzZSkKK3sKKwl3aGlsZSAoZ2ljZF9yZWFkX2N0bHIoZ2ljZF9iYXNlKSAmIEdJQ0RfQ1RMUl9SV1BfQklUKQorCQk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdpY2RfcmVhZF9waWRyMih1aW50cHRyX3QgYmFzZSkKIHsKIAlyZXR1cm4gbW1pb19yZWFkXzMyKGJhc2UgKyBHSUNEX1BJRFIyX0dJQ1YzKTsKQEAgLTE2MSw2ICsxNjgsMTEgQEAKIAlyZXR1cm4gbW1pb19yZWFkXzY0KGJhc2UgKyBHSUNSX0NUTFIpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZ2ljcl93cml0ZV9jdGxyKHVpbnRwdHJfdCBiYXNlLCB1aW50NjRfdCB2YWwpCit7CisJbW1pb193cml0ZV82NChiYXNlICsgR0lDUl9DVExSLCB2YWwpOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBnaWNyX3JlYWRfdHlwZXIodWludHB0cl90IGJhc2UpCiB7CiAJcmV0dXJuIG1taW9fcmVhZF82NChiYXNlICsgR0lDUl9UWVBFUik7CkBAIC0xNzYsNiArMTg4LDI5IEBACiAJbW1pb193cml0ZV8zMihiYXNlICsgR0lDUl9XQUtFUiwgdmFsKTsKIH0KIAorLyoKKyAqIFdhaXQgZm9yIHVwZGF0ZXMgdG8gOgorICogR0lDUl9JQ0VOQUJMRVIwCisgKiBHSUNSX0NUTFIuRFBHMVMKKyAqIEdJQ1JfQ1RMUi5EUEcxTlMKKyAqIEdJQ1JfQ1RMUi5EUEcwCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBnaWNyX3dhaXRfZm9yX3BlbmRpbmdfd3JpdGUodWludHB0cl90IGdpY3JfYmFzZSkKK3sKKwl3aGlsZSAoZ2ljcl9yZWFkX2N0bHIoZ2ljcl9iYXNlKSAmIEdJQ1JfQ1RMUl9SV1BfQklUKQorCQk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnaWNyX3dhaXRfZm9yX3Vwc3RyZWFtX3BlbmRpbmdfd3JpdGUodWludHB0cl90IGdpY3JfYmFzZSkKK3sKKwl3aGlsZSAoZ2ljcl9yZWFkX2N0bHIoZ2ljcl9iYXNlKSAmIEdJQ1JfQ1RMUl9VV1BfQklUKQorCQk7Cit9CisKKy8qIFByaXZhdGUgaW1wbGVtZW50YXRpb24gb2YgRGlzdHJpYnV0b3IgcG93ZXIgY29udHJvbCBob29rcyAqLwordm9pZCBhcm1fZ2ljdjNfZGlzdGlmX3ByZV9zYXZlKHVuc2lnbmVkIGludCByZGlzdF9wcm9jX251bSk7Cit2b2lkIGFybV9naWN2M19kaXN0aWZfcG9zdF9yZXN0b3JlKHVuc2lnbmVkIGludCByZGlzdF9wcm9jX251bSk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHSUMgUmUtZGlzdHJpYnV0b3IgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgZW50aXJlIHJlZ2lzdGVycy4KICAqIE5vdGU6IFRoZSByYXcgcmVnaXN0ZXIgdmFsdWVzIGNvcnJlc3BvbmQgdG8gbXVsdGlwbGUgaW50ZXJydXB0IElEcyBhbmQKQEAgLTE5Niw2ICsyMzEsMTEgQEAKIAlyZXR1cm4gbW1pb19yZWFkXzMyKGJhc2UgKyBHSUNSX0lTRU5BQkxFUjApOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZ2ljcl93cml0ZV9pY3BlbmRyMCh1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IHZhbCkKK3sKKwltbWlvX3dyaXRlXzMyKGJhc2UgKyBHSUNSX0lDUEVORFIwLCB2YWwpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2ljcl93cml0ZV9pc2VuYWJsZXIwKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgdmFsKQogewogCW1taW9fd3JpdGVfMzIoYmFzZSArIEdJQ1JfSVNFTkFCTEVSMCwgdmFsKTsKQEAgLTIwNiw2ICsyNDYsMTYgQEAKIAlyZXR1cm4gbW1pb19yZWFkXzMyKGJhc2UgKyBHSUNSX0lHUk9VUFIwKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2ljcl9yZWFkX2lzcGVuZHIwKHVpbnRwdHJfdCBiYXNlKQoreworCXJldHVybiBtbWlvX3JlYWRfMzIoYmFzZSArIEdJQ1JfSVNQRU5EUjApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2ljcl93cml0ZV9pc3BlbmRyMCh1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IHZhbCkKK3sKKwltbWlvX3dyaXRlXzMyKGJhc2UgKyBHSUNSX0lTUEVORFIwLCB2YWwpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2ljcl93cml0ZV9pZ3JvdXByMCh1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IHZhbCkKIHsKIAltbWlvX3dyaXRlXzMyKGJhc2UgKyBHSUNSX0lHUk9VUFIwLCB2YWwpOwpAQCAtMjIxLDE0ICsyNzEsMTIwIEBACiAJbW1pb193cml0ZV8zMihiYXNlICsgR0lDUl9JR1JQTU9EUjAsIHZhbCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdpY3JfcmVhZF9uc2Fjcih1aW50cHRyX3QgYmFzZSkKK3sKKwlyZXR1cm4gbW1pb19yZWFkXzMyKGJhc2UgKyBHSUNSX05TQUNSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdpY3Jfd3JpdGVfbnNhY3IodWludHB0cl90IGJhc2UsIHVuc2lnbmVkIGludCB2YWwpCit7CisJbW1pb193cml0ZV8zMihiYXNlICsgR0lDUl9OU0FDUiwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2ljcl9yZWFkX2lzYWN0aXZlcjAodWludHB0cl90IGJhc2UpCit7CisJcmV0dXJuIG1taW9fcmVhZF8zMihiYXNlICsgR0lDUl9JU0FDVElWRVIwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdpY3Jfd3JpdGVfaXNhY3RpdmVyMCh1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IHZhbCkKK3sKKwltbWlvX3dyaXRlXzMyKGJhc2UgKyBHSUNSX0lTQUNUSVZFUjAsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdpY3JfcmVhZF9pY2ZncjAodWludHB0cl90IGJhc2UpCit7CisJcmV0dXJuIG1taW9fcmVhZF8zMihiYXNlICsgR0lDUl9JQ0ZHUjApOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnaWNyX3JlYWRfaWNmZ3IxKHVpbnRwdHJfdCBiYXNlKQogewogCXJldHVybiBtbWlvX3JlYWRfMzIoYmFzZSArIEdJQ1JfSUNGR1IxKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGdpY3Jfd3JpdGVfaWNmZ3IwKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCW1taW9fd3JpdGVfMzIoYmFzZSArIEdJQ1JfSUNGR1IwLCB2YWwpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2ljcl93cml0ZV9pY2ZncjEodWludHB0cl90IGJhc2UsIHVuc2lnbmVkIGludCB2YWwpCiB7CiAJbW1pb193cml0ZV8zMihiYXNlICsgR0lDUl9JQ0ZHUjEsIHZhbCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdpY3JfcmVhZF9wcm9wYmFzZXIodWludHB0cl90IGJhc2UpCit7CisJcmV0dXJuIG1taW9fcmVhZF8zMihiYXNlICsgR0lDUl9QUk9QQkFTRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2ljcl93cml0ZV9wcm9wYmFzZXIodWludHB0cl90IGJhc2UsIHVuc2lnbmVkIGludCB2YWwpCit7CisJbW1pb193cml0ZV8zMihiYXNlICsgR0lDUl9QUk9QQkFTRVIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdpY3JfcmVhZF9wZW5kYmFzZXIodWludHB0cl90IGJhc2UpCit7CisJcmV0dXJuIG1taW9fcmVhZF8zMihiYXNlICsgR0lDUl9QRU5EQkFTRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2ljcl93cml0ZV9wZW5kYmFzZXIodWludHB0cl90IGJhc2UsIHVuc2lnbmVkIGludCB2YWwpCit7CisJbW1pb193cml0ZV8zMihiYXNlICsgR0lDUl9QRU5EQkFTRVIsIHZhbCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHSUMgSVRTIGZ1bmN0aW9ucyB0byByZWFkIGFuZCB3cml0ZSBlbnRpcmUgSVRTIHJlZ2lzdGVycy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGdpdHNfcmVhZF9jdGxyKHVpbnRwdHJfdCBiYXNlKQoreworCXJldHVybiBtbWlvX3JlYWRfMzIoYmFzZSArIEdJVFNfQ1RMUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnaXRzX3dyaXRlX2N0bHIodWludHB0cl90IGJhc2UsIHVuc2lnbmVkIGludCB2YWwpCit7CisJbW1pb193cml0ZV8zMihiYXNlICsgR0lUU19DVExSLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGdpdHNfcmVhZF9jYmFzZXIodWludHB0cl90IGJhc2UpCit7CisJcmV0dXJuIG1taW9fcmVhZF82NChiYXNlICsgR0lUU19DQkFTRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2l0c193cml0ZV9jYmFzZXIodWludHB0cl90IGJhc2UsIHVpbnQ2NF90IHZhbCkKK3sKKwltbWlvX3dyaXRlXzMyKGJhc2UgKyBHSVRTX0NCQVNFUiwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdCBnaXRzX3JlYWRfY3dyaXRlcih1aW50cHRyX3QgYmFzZSkKK3sKKwlyZXR1cm4gbW1pb19yZWFkXzY0KGJhc2UgKyBHSVRTX0NXUklURVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2l0c193cml0ZV9jd3JpdGVyKHVpbnRwdHJfdCBiYXNlLCB1aW50NjRfdCB2YWwpCit7CisJbW1pb193cml0ZV8zMihiYXNlICsgR0lUU19DV1JJVEVSLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGdpdHNfcmVhZF9iYXNlcih1aW50cHRyX3QgYmFzZSwgdW5zaWduZWQgaW50IGl0c190YWJsZV9pZCkKK3sKKwlhc3NlcnQoaXRzX3RhYmxlX2lkIDwgOCk7CisJcmV0dXJuIG1taW9fcmVhZF82NChiYXNlICsgR0lUU19CQVNFUiArICg4ICogaXRzX3RhYmxlX2lkKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnaXRzX3dyaXRlX2Jhc2VyKHVpbnRwdHJfdCBiYXNlLCB1bnNpZ25lZCBpbnQgaXRzX3RhYmxlX2lkLCB1aW50NjRfdCB2YWwpCit7CisJYXNzZXJ0KGl0c190YWJsZV9pZCA8IDgpOworCW1taW9fd3JpdGVfNjQoYmFzZSArIEdJVFNfQkFTRVIgKyAoOCAqIGl0c190YWJsZV9pZCksIHZhbCk7Cit9CisKKy8qCisgKiBXYWl0IGZvciBRdWllc2NlbnQgYml0IHdoZW4gR0lDIElUUyBpcyBkaXNhYmxlZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZ2l0c193YWl0X2Zvcl9xdWllc2NlbnRfYml0KHVpbnRwdHJfdCBnaXRzX2Jhc2UpCit7CisJYXNzZXJ0KCEoZ2l0c19yZWFkX2N0bHIoZ2l0c19iYXNlKSAmIEdJVFNfQ1RMUl9FTkFCTEVEX0JJVCkpOworCXdoaWxlICgoZ2l0c19yZWFkX2N0bHIoZ2l0c19iYXNlKSAmIEdJVFNfQ1RMUl9RVUlFU0NFTlRfQklUKSA9PSAwKQorCQk7Cit9CisKKwogI2VuZGlmIC8qIF9fR0lDVjNfUFJJVkFURV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXV0aC9tYmVkdGxzL21iZWR0bHNfY29tbW9uLmMgYi9kcml2ZXJzL2F1dGgvbWJlZHRscy9tYmVkdGxzX2NvbW1vbi5jCmluZGV4IGU5YWE0MDkuLjIwNWMyNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXV0aC9tYmVkdGxzL21iZWR0bHNfY29tbW9uLmMKKysrIGIvZHJpdmVycy9hdXRoL21iZWR0bHMvbWJlZHRsc19jb21tb24uYwpAQCAtMTQsOCArMTQsOSBAQAogLyoKICAqIG1iZWQgVExTIGhlYXAKICAqLwotI2lmIChURl9NQkVEVExTX0tFWV9BTEdfSUQgPT0gVEZfTUJFRFRMU19FQ0RTQSkKLSNkZWZpbmUgTUJFRFRMU19IRUFQX1NJWkUJCSgxNCoxMDI0KQorI2lmIChURl9NQkVEVExTX0tFWV9BTEdfSUQgPT0gVEZfTUJFRFRMU19FQ0RTQSkgXAorCXx8IChURl9NQkVEVExTX0tFWV9BTEdfSUQgPT0gVEZfTUJFRFRMU19SU0FfQU5EX0VDRFNBKQorI2RlZmluZSBNQkVEVExTX0hFQVBfU0laRQkJKDEzKjEwMjQpCiAjZWxpZiAoVEZfTUJFRFRMU19LRVlfQUxHX0lEID09IFRGX01CRURUTFNfUlNBKQogI2RlZmluZSBNQkVEVExTX0hFQVBfU0laRQkJKDcqMTAyNCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdXRoL21iZWR0bHMvbWJlZHRsc19jcnlwdG8uYyBiL2RyaXZlcnMvYXV0aC9tYmVkdGxzL21iZWR0bHNfY3J5cHRvLmMKaW5kZXggZDg4MTBkNi4uYmM5ZWQzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdXRoL21iZWR0bHMvbWJlZHRsc19jcnlwdG8uYworKysgYi9kcml2ZXJzL2F1dGgvbWJlZHRscy9tYmVkdGxzX2NyeXB0by5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSwgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAqLwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxjcnlwdG9fbW9kLmg+CiAjaW5jbHVkZSA8ZGVidWcuaD4KICNpbmNsdWRlIDxtYmVkdGxzX2NvbW1vbi5oPgorI2luY2x1ZGUgPG1iZWR0bHNfY29uZmlnLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXV0aC9tYmVkdGxzL21iZWR0bHNfY3J5cHRvLm1rIGIvZHJpdmVycy9hdXRoL21iZWR0bHMvbWJlZHRsc19jcnlwdG8ubWsKaW5kZXggMjFiODU3Yi4uOGViNDg3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdXRoL21iZWR0bHMvbWJlZHRsc19jcnlwdG8ubWsKKysrIGIvZHJpdmVycy9hdXRoL21iZWR0bHMvbWJlZHRsc19jcnlwdG8ubWsKQEAgLTM3LDI4ICszNyw1OCBAQAogCQkJCQlwa193cmFwLmMgCQkJCVwKIAkJCQkJcGtwYXJzZS5jIAkJCQlcCiAJCQkJCXBrd3JpdGUuYyAJCQkJXAotCQkJCQlzaGEyNTYuYwkJCQlcCiAJCQkJCSkKIAoraWZlcSAoJHtIQVNIX0FMR30sIHNoYTM4NCkKKyAgICBNQkVEVExTX0NSWVBUT19TT1VSQ0VTICArPSBcCisJCQkJCSQoYWRkcHJlZml4ICR7TUJFRFRMU19ESVJ9L2xpYnJhcnkvLAlcCisJCQkJCQlzaGEyNTYuYyAgICAgICAgICAgIFwKKwkJCQkJCXNoYTUxMi5jICAgICAgICAgICAgXAorCQkJCQkpCisgICAgVEZfTUJFRFRMU19IQVNIX0FMR19JRAk6PQlURl9NQkVEVExTX1NIQTM4NAorZWxzZSBpZmVxICgke0hBU0hfQUxHfSwgc2hhNTEyKQorICAgIE1CRURUTFNfQ1JZUFRPX1NPVVJDRVMgICs9IFwKKwkJCQkJJChhZGRwcmVmaXggJHtNQkVEVExTX0RJUn0vbGlicmFyeS8sCVwKKwkJCQkJCXNoYTI1Ni5jICAgICAgICAgICAgXAorCQkJCQkJc2hhNTEyLmMgICAgICAgICAgICBcCisJCQkJCSkKKyAgICBURl9NQkVEVExTX0hBU0hfQUxHX0lECTo9CVRGX01CRURUTFNfU0hBNTEyCitlbHNlCisgICAgTUJFRFRMU19DUllQVE9fU09VUkNFUyAgKz0gXAorCQkJCQkkKGFkZHByZWZpeCAke01CRURUTFNfRElSfS9saWJyYXJ5LywJXAorCQkJCQkJc2hhMjU2LmMgICAgICAgICAgICBcCisJCQkJCSkKKyAgICBURl9NQkVEVExTX0hBU0hfQUxHX0lECTo9CVRGX01CRURUTFNfU0hBMjU2CitlbmRpZgorCiAjIEtleSBhbGdvcml0aG0gc3BlY2lmaWMgZmlsZXMKK01CRURUTFNfRUNEU0FfQ1JZUFRPX1NPVVJDRVMJKz0JJChhZGRwcmVmaXggJHtNQkVEVExTX0RJUn0vbGlicmFyeS8sCVwKKwkJCQkJZWNkc2EuYwkJCQkJXAorCQkJCQllY3BfY3VydmVzLmMJCQkJXAorCQkJCQllY3AuYwkJCQkJXAorCQkJCQkpCisKK01CRURUTFNfUlNBX0NSWVBUT19TT1VSQ0VTCSs9CSQoYWRkcHJlZml4ICR7TUJFRFRMU19ESVJ9L2xpYnJhcnkvLAlcCisJCQkJCXJzYS5jCQkJCQlcCisJCQkJCSkKKwogaWZlcSAoJHtURl9NQkVEVExTX0tFWV9BTEd9LGVjZHNhKQotICAgIE1CRURUTFNfQ1JZUFRPX1NPVVJDRVMJKz0JJChhZGRwcmVmaXggJHtNQkVEVExTX0RJUn0vbGlicmFyeS8sCVwKLSAgICAJCQkJCWVjZHNhLmMJCQkJCVwKLSAgICAJCQkJCWVjcF9jdXJ2ZXMuYwkJCQlcCi0gICAgCQkJCQllY3AuYwkJCQkJXAotICAgIAkJCQkJKQorICAgIE1CRURUTFNfQ1JZUFRPX1NPVVJDRVMJKz0JJChNQkVEVExTX0VDRFNBX0NSWVBUT19TT1VSQ0VTKQogICAgIFRGX01CRURUTFNfS0VZX0FMR19JRAk6PQlURl9NQkVEVExTX0VDRFNBCiBlbHNlIGlmZXEgKCR7VEZfTUJFRFRMU19LRVlfQUxHfSxyc2EpCi0gICAgTUJFRFRMU19DUllQVE9fU09VUkNFUwkrPQkkKGFkZHByZWZpeCAke01CRURUTFNfRElSfS9saWJyYXJ5LywJXAotICAgIAkJCQkJcnNhLmMJCQkJCVwKLSAgICAJCQkJCSkKKyAgICBNQkVEVExTX0NSWVBUT19TT1VSQ0VTCSs9CSQoTUJFRFRMU19SU0FfQ1JZUFRPX1NPVVJDRVMpCiAgICAgVEZfTUJFRFRMU19LRVlfQUxHX0lECTo9CVRGX01CRURUTFNfUlNBCitlbHNlIGlmZXEgKCR7VEZfTUJFRFRMU19LRVlfQUxHfSxyc2ErZWNkc2EpCisgICAgTUJFRFRMU19DUllQVE9fU09VUkNFUwkrPQkkKE1CRURUTFNfRUNEU0FfQ1JZUFRPX1NPVVJDRVMpCisgICAgTUJFRFRMU19DUllQVE9fU09VUkNFUwkrPQkkKE1CRURUTFNfUlNBX0NSWVBUT19TT1VSQ0VTKQorICAgIFRGX01CRURUTFNfS0VZX0FMR19JRAk6PQlURl9NQkVEVExTX1JTQV9BTkRfRUNEU0EKIGVsc2UKICAgICAkKGVycm9yICJURl9NQkVEVExTX0tFWV9BTEc9JHtURl9NQkVEVExTX0tFWV9BTEd9IG5vdCBzdXBwb3J0ZWQgb24gbWJlZCBUTFMiKQogZW5kaWYKIAogIyBOZWVkcyB0byBiZSBzZXQgdG8gZHJpdmUgbWJlZCBUTFMgY29uZmlndXJhdGlvbiBjb3JyZWN0bHkKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxURl9NQkVEVExTX0tFWV9BTEdfSUQpKQorJChldmFsICQoY2FsbCBhZGRfZGVmaW5lLFRGX01CRURUTFNfSEFTSF9BTEdfSUQpKQogCiBCTDFfU09VUkNFUwkJCSs9CSR7TUJFRFRMU19DUllQVE9fU09VUkNFU30KIEJMMl9TT1VSQ0VTCQkJKz0JJHtNQkVEVExTX0NSWVBUT19TT1VSQ0VTfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdXRoL3RiYnIvdGJicl9jb3QuYyBiL2RyaXZlcnMvYXV0aC90YmJyL3RiYnJfY290LmMKaW5kZXggNGFhYWIzOS4uMDFkNmZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdXRoL3RiYnIvdGJicl9jb3QuYworKysgYi9kcml2ZXJzL2F1dGgvdGJici90YmJyX2NvdC5jCkBAIC0xOSw3ICsxOSw3IEBACiAgKiBNYXhpbXVtIGtleSBhbmQgaGFzaCBzaXplcyAoaW4gREVSIGZvcm1hdCkKICAqLwogI2RlZmluZSBQS19ERVJfTEVOCQkJMjk0Ci0jZGVmaW5lIEhBU0hfREVSX0xFTgkJCTUxCisjZGVmaW5lIEhBU0hfREVSX0xFTgkJCTgzCiAKIC8qCiAgKiBUaGUgcGxhdGZvcm0gbXVzdCBhbGxvY2F0ZSBidWZmZXJzIHRvIHN0b3JlIHRoZSBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2JsMzEvZWhmLmggYi9pbmNsdWRlL2JsMzEvZWhmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4Yzk1NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYmwzMS9laGYuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIF9fRUhGX0hfXworI2RlZmluZSBfX0VIRl9IX18KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHV0aWxzX2RlZi5oPgorCisvKiBWYWxpZCBwcmlvcml0aWVzIHNldCBiaXQgMCBvZiB0aGUgcHJpb3JpdHkgaGFuZGxlci4gKi8KKyNkZWZpbmUgX0VIRl9QUklfVkFMSUQJKCgodWludHB0cl90KSAxKSA8PCAwKQorCisvKiBNYXJrZXIgZm9yIG5vIGhhbmRsZXIgcmVnaXN0ZXJlZCBmb3IgYSB2YWxpZCBwcmlvcml0eSAqLworI2RlZmluZSBfRUhGX05PX0hBTkRMRVIJKDAgfCBfRUhGX1BSSV9WQUxJRCkKKworLyogRXh0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0b3AgYml0cyBmcm9tIDcgbG93ZXIgYml0cyBvZiBwcmlvcml0eSAqLworI2RlZmluZSBFSEZfUFJJX1RPX0lEWChwcmksIHBsYXRfYml0cykgXAorCSgocHJpICYgMHg3ZikgPj4gKDcgLSBwbGF0X2JpdHMpKQorCisvKiBJbnN0YWxsIGV4Y2VwdGlvbiBwcmlvcml0eSBkZXNjcmlwdG9yIGF0IGEgc3VpdGFibGUgaW5kZXggKi8KKyNkZWZpbmUgRUhGX1BSSV9ERVNDKHBsYXRfYml0cywgcHJpb3JpdHkpIFwKKwlbRUhGX1BSSV9UT19JRFgocHJpb3JpdHksIHBsYXRfYml0cyldID0geyBcCisJCS5laGZfaGFuZGxlciA9IF9FSEZfTk9fSEFORExFUiwgXAorCX0KKworLyogTWFjcm8gZm9yIHBsYXRmb3JtcyB0byByZWdpdGVyIGl0cyBleGNlcHRpb24gcHJpb3JpdGllcyAqLworI2RlZmluZSBFSEZfUkVHSVNURVJfUFJJT1JJVElFUyhwcmlvcml0aWVzLCBudW0sIGJpdHMpIFwKKwljb25zdCBlaGZfcHJpb3JpdGllc190IGV4Y2VwdGlvbl9kYXRhID0geyBcCisJCS5udW1fcHJpb3JpdGllcyA9IG51bSwgXAorCQkuZWhmX3ByaW9yaXRpZXMgPSBwcmlvcml0aWVzLCBcCisJCS5wcmlfYml0cyA9IGJpdHMsIFwKKwl9CisKKy8qCisgKiBQcmlvcml0eSBzdGFjaywgbWFuYWdlZCBhcyBhIGJpdG1hcC4KKyAqCisgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyAzMiBwcmlvcml0eSBsZXZlbHMsIGFsbG93aW5nIHBsYXRmb3JtcyB0byB1c2UgdXAgdG8gNQorICogdG9wIGJpdHMgb2YgcHJpb3JpdHkuIEJ1dCB0aGUgdHlwZSBjYW4gYmUgY2hhbmdlZCB0byB1aW50NjRfdCBzaG91bGQgbmVlZAorICogYXJpc2UgdG8gc3VwcG9ydCA2NCBwcmlvcml0eSBsZXZlbHMsIGFsbG93aW5nIHBsYXRmb3JtcyB0byB1c2UgdXAgdG8gNiB0b3AKKyAqIGJpdHMgb2YgcHJpb3JpdHkuCisgKi8KK3R5cGVkZWYgdWludDMyX3QgZWhmX3ByaV9iaXRzX3Q7CisKKy8qCisgKiBQZXItUEUgZXhjZXB0aW9uIGRhdGEuIFRoZSBkYXRhIGZvciBlYWNoIFBFIGlzIGtlcHQgYXMgYSBwZXItQ1BVIGRhdGEgZmllbGQuCisgKiBTZWUgY3B1X2RhdGEuaC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWVoZl9wcmlfYml0c190IGFjdGl2ZV9wcmlfYml0czsKKworCS8qIFByaW9yaXR5IG1hc2sgdmFsdWUgYmVmb3JlIGFueSBwcmlvcml0eSBsZXZlbHMgd2VyZSBhY3RpdmUgKi8KKwl1aW50OF90IGluaXRfcHJpX21hc2s7CisKKwkvKiBOb24tc2VjdXJlIHByaW9yaXR5IG1hc2sgdmFsdWUgc3Rhc2hlZCBkdXJpbmcgU2VjdXJlIGV4ZWN1dGlvbiAqLworCXVpbnQ4X3QgbnNfcHJpX21hc2s7Cit9IF9fYWxpZ25lZChzaXplb2YodWludDY0X3QpKSBwZV9leGNfZGF0YV90OworCit0eXBlZGVmIGludCAoKmVoZl9oYW5kbGVyX3QpKHVpbnQzMl90IGludHJfcmF3LCB1aW50MzJfdCBmbGFncywgdm9pZCAqaGFuZGxlLAorCQl2b2lkICpjb29raWUpOworCit0eXBlZGVmIHN0cnVjdCBlaGZfcHJpX2Rlc2MgeworCS8qCisJICogNC1ieXRlLWFsaWduZWQgZXhjZXB0aW9uIGhhbmRsZXIuIEJpdCAwIGluZGljYXRlcyB0aGUgY29ycmVzcG9uZGluZworCSAqIHByaW9yaXR5IGxldmVsIGlzIHZhbGlkLiBUaGlzIGlzIGVmZmVjdGl2ZWx5IG9mIGVoZl9oYW5kbGVyX3QgdHlwZSwKKwkgKiBidXQgbGVmdCBhcyB1aW50cHRyX3QgaW4gb3JkZXIgdG8gbWFrZSBwb2ludGVyIGFyaXRobWV0aWMgY29udmVuaWVudC4KKwkgKi8KKwl1aW50cHRyX3QgZWhmX2hhbmRsZXI7Cit9IGVoZl9wcmlfZGVzY190OworCit0eXBlZGVmIHN0cnVjdCBlaGZfcHJpb3JpdGllcyB7CisJZWhmX3ByaV9kZXNjX3QgKmVoZl9wcmlvcml0aWVzOworCXVuc2lnbmVkIGludCBudW1fcHJpb3JpdGllczsKKwlpbnQgcHJpX2JpdHM7Cit9IGVoZl9wcmlvcml0aWVzX3Q7CisKK3ZvaWQgZWhmX2luaXQodm9pZCk7Cit2b2lkIGVoZl9hY3RpdmF0ZV9wcmlvcml0eSh1bnNpZ25lZCBpbnQgcHJpb3JpdHkpOwordm9pZCBlaGZfZGVhY3RpdmF0ZV9wcmlvcml0eSh1bnNpZ25lZCBpbnQgcHJpb3JpdHkpOwordm9pZCBlaGZfcmVnaXN0ZXJfcHJpb3JpdHlfaGFuZGxlcih1bnNpZ25lZCBpbnQgcHJpLCBlaGZfaGFuZGxlcl90IGhhbmRsZXIpOwordm9pZCBlaGZfYWxsb3dfbnNfcHJlZW1wdGlvbih2b2lkKTsKK3Vuc2lnbmVkIGludCBlaGZfaXNfbnNfcHJlZW1wdGlvbl9hbGxvd2VkKHZvaWQpOworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0VIRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYmwzMS9pbnRlcnJ1cHRfbWdtdC5oIGIvaW5jbHVkZS9ibDMxL2ludGVycnVwdF9tZ210LmgKaW5kZXggOWE2YTdmYS4uY2NjYWQzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ibDMxL2ludGVycnVwdF9tZ210LmgKKysrIGIvaW5jbHVkZS9ibDMxL2ludGVycnVwdF9tZ210LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDE0LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCkBAIC0xNyw2ICsxNywxMSBAQAogI2RlZmluZSBJTlRSX1RZUEVfTlMJCQlVKDIpCiAjZGVmaW5lIE1BWF9JTlRSX1RZUEVTCQkJVSgzKQogI2RlZmluZSBJTlRSX1RZUEVfSU5WQUwJCQlNQVhfSU5UUl9UWVBFUworCisvKiBJbnRlcnJ1cHQgcm91dGluZyBtb2RlcyAqLworI2RlZmluZSBJTlRSX1JPVVRJTkdfTU9ERV9QRQkJMAorI2RlZmluZSBJTlRSX1JPVVRJTkdfTU9ERV9BTlkJCTEKKwogLyoKICAqIENvbnN0YW50IHBhc3NlZCB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaW4gdGhlICdpZCcgZmllbGQgd2hlbiB0aGUKICAqIGZyYW1ld29yayBkb2VzIG5vdCByZWFkIHRoZSBnaWMgcmVnaXN0ZXJzIHRvIGRldGVybWluZSB0aGUgaW50ZXJydXB0IGlkLgpAQCAtOTMsNiArOTgsOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKIC8qIFByb3RvdHlwZSBmb3IgZGVmaW5pbmcgYSBoYW5kbGVyIGZvciBhbiBpbnRlcnJ1cHQgdHlwZSAqLwogdHlwZWRlZiB1aW50NjRfdCAoKmludGVycnVwdF90eXBlX2hhbmRsZXJfdCkodWludDMyX3QgaWQsCiAJCQkJCSAgICAgdWludDMyX3QgZmxhZ3MsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW1vbi9hYXJjaDMyL2FzbV9tYWNyb3MuUyBiL2luY2x1ZGUvY29tbW9uL2FhcmNoMzIvYXNtX21hY3Jvcy5TCmluZGV4IGY1NzM3NDQuLjc0MzIyMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbW9uL2FhcmNoMzIvYXNtX21hY3Jvcy5TCisrKyBiL2luY2x1ZGUvY29tbW9uL2FhcmNoMzIvYXNtX21hY3Jvcy5TCkBAIC03OSw2ICs3OSwyNSBAQAogCWxkciByMCwgPShcX25hbWUgKyBcX3NpemUpCiAJLmVuZG0KIAorI2lmIEFSTV9BUkNIX01BSk9SID09IDcgJiYgIWRlZmluZWQoQVJNVjdfU1VQUE9SVFNfVklSVFVBTElaQVRJT04pCisJLyoKKwkgKiBBUk12NyBjb3JlcyB3aXRob3V0IFZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbiBkbyBub3Qgc3VwcG9ydCB0aGUKKwkgKiBlcmV0IGluc3RydWN0aW9uLgorCSAqLworCS5tYWNybyBlcmV0CisJbW92cwlwYywgbHIKKwkuZW5kbQorI2VuZGlmCisKKyNpZiAoQVJNX0FSQ0hfTUFKT1IgPT0gNykKKwkvKiBBUk12NyBkb2VzIG5vdCBzdXBwb3J0IHN0bCBpbnN0cnVjdGlvbiAqLworCS5tYWNybyBzdGwgX3JlZywgX3dyaXRlX2xvY2sKKwlkbWIKKwlzdHIJXF9yZWcsIFxfd3JpdGVfbG9jaworCWRzYgorCS5lbmRtCisjZW5kaWYKKwogCS8qCiAJICogSGVscGVyIG1hY3JvIHRvIGdlbmVyYXRlIHRoZSBiZXN0IG1vdi9tb3Z3L21vdnQgY29tYmluYXRpb25zCiAJICogYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSB0byBiZSBtb3ZlZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uL2FhcmNoMzIvZWwzX2NvbW1vbl9tYWNyb3MuUyBiL2luY2x1ZGUvY29tbW9uL2FhcmNoMzIvZWwzX2NvbW1vbl9tYWNyb3MuUwppbmRleCA2ZmMwMGRkLi41OWU5OWY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW1vbi9hYXJjaDMyL2VsM19jb21tb25fbWFjcm9zLlMKKysrIGIvaW5jbHVkZS9jb21tb24vYWFyY2gzMi9lbDNfY29tbW9uX21hY3Jvcy5TCkBAIC0xMDcsNiArMTA3LDcgQEAKIAl2bXNyCUZQRVhDLCByMAogCWlzYgogCisjaWYgKEFSTV9BUkNIX01BSk9SID4gNykKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkgKiBJbml0aWFsaXNlIFNEQ1IsIHNldHRpbmcgYWxsIHRoZSBmaWVsZHMgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBody4KIAkgKgpAQCAtMTE2LDYgKzExNyw3IEBACiAJICovCiAJbGRyCXIwLCA9KFNEQ1JfUkVTRVRfVkFMIHwgU0RDUl9TUEQoU0RDUl9TUERfRElTQUJMRSkpCiAJc3Rjb3ByCXIwLCBTRENSCisjZW5kaWYKIAogCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uL2FhcmNoNjQvYXNtX21hY3Jvcy5TIGIvaW5jbHVkZS9jb21tb24vYWFyY2g2NC9hc21fbWFjcm9zLlMKaW5kZXggNmQ2OTg5Yy4uOTRhOWRmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tb24vYWFyY2g2NC9hc21fbWFjcm9zLlMKKysrIGIvaW5jbHVkZS9jb21tb24vYWFyY2g2NC9hc21fbWFjcm9zLlMKQEAgLTUxLDggKzUxLDggQEAKIAkgKiBzbyB0aGF0IGl0IGluc2VydHMgaWxsZWdhbCBBQXJjaDY0IGluc3RydWN0aW9ucy4gVGhpcyBpbmNyZWFzZXMKIAkgKiBzZWN1cml0eSwgcm9idXN0bmVzcyBhbmQgcG90ZW50aWFsbHkgZmFjaWxpdGF0ZXMgZGVidWdnaW5nLgogCSAqLwotCS5tYWNybyB2ZWN0b3JfYmFzZSAgbGFiZWwKLQkuc2VjdGlvbiAudmVjdG9ycywgImF4IgorCS5tYWNybyB2ZWN0b3JfYmFzZSAgbGFiZWwsIHNlY3Rpb25fbmFtZT0udmVjdG9ycworCS5zZWN0aW9uIFxzZWN0aW9uX25hbWUsICJheCIKIAkuYWxpZ24gMTEsIDAKIAlcbGFiZWw6CiAJLmVuZG0KQEAgLTY0LDkgKzY0LDkgQEAKIAkgKiBzbyB0aGF0IGl0IGluc2VydHMgaWxsZWdhbCBBQXJjaDY0IGluc3RydWN0aW9ucy4gVGhpcyBpbmNyZWFzZXMKIAkgKiBzZWN1cml0eSwgcm9idXN0bmVzcyBhbmQgcG90ZW50aWFsbHkgZmFjaWxpdGF0ZXMgZGVidWdnaW5nLgogCSAqLwotCS5tYWNybyB2ZWN0b3JfZW50cnkgIGxhYmVsCisJLm1hY3JvIHZlY3Rvcl9lbnRyeSAgbGFiZWwsIHNlY3Rpb25fbmFtZT0udmVjdG9ycwogCS5jZmlfc2VjdGlvbnMgLmRlYnVnX2ZyYW1lCi0JLnNlY3Rpb24gLnZlY3RvcnMsICJheCIKKwkuc2VjdGlvbiBcc2VjdGlvbl9uYW1lLCAiYXgiCiAJLmFsaWduIDcsIDAKIAkudHlwZSBcbGFiZWwsICVmdW5jdGlvbgogCS5mdW5jIFxsYWJlbApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb21tb24vYWFyY2g2NC9lbDNfY29tbW9uX21hY3Jvcy5TIGIvaW5jbHVkZS9jb21tb24vYWFyY2g2NC9lbDNfY29tbW9uX21hY3Jvcy5TCmluZGV4IDM0ZmRhZWUuLjYzYTBmYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbW9uL2FhcmNoNjQvZWwzX2NvbW1vbl9tYWNyb3MuUworKysgYi9pbmNsdWRlL2NvbW1vbi9hYXJjaDY0L2VsM19jb21tb25fbWFjcm9zLlMKQEAgLTk1LDEwICs5NSw2IEBACiAJICogTURDUl9FTDMuU1BEMzI6IFNldCB0byAwYjEwIHRvIGRpc2FibGUgQUFyY2gzMiBTZWN1cmUgc2VsZi1ob3N0ZWQKIAkgKiAgcHJpdmlsZWdlZCBkZWJ1ZyBmcm9tIFMtRUwxLgogCSAqCi0JICogTURDUl9FTDMuTlNQQiAoQVJNIHY4LjIpOiBTUEUgZW5hYmxlZCBpbiBub24tc2VjdXJlIHN0YXRlIGFuZAotCSAqIGRpc2FibGVkIGluIHNlY3VyZSBzdGF0ZS4gQWNjZXNzZXMgdG8gU1BFIHJlZ2lzdGVycyBhdCBTRUwxIGdlbmVyYXRlCi0JICogdHJhcCBleGNlcHRpb25zIHRvIEVMMy4KLQkgKgogCSAqIE1EQ1JfRUwzLlRET1NBOiBTZXQgdG8gemVybyBzbyB0aGF0IEVMMiBhbmQgRUwyIFN5c3RlbSByZWdpc3RlcgogCSAqICBhY2Nlc3MgdG8gdGhlIHBvd2VyZG93biBkZWJ1ZyByZWdpc3RlcnMgZG8gbm90IHRyYXAgdG8gRUwzLgogCSAqCkBAIC0xMTIsMTkgKzEwOCw2IEBACiAJICovCiAJbW92X2ltbQl4MCwgKChNRENSX0VMM19SRVNFVF9WQUwgfCBNRENSX1NERF9CSVQgfCBNRENSX1NQRDMyKE1EQ1JfU1BEMzJfRElTQUJMRSkpIFwKIAkJCSYgfihNRENSX1RET1NBX0JJVCB8IE1EQ1JfVERBX0JJVCB8IE1EQ1JfVFBNX0JJVCkpCi0KLSNpZiBFTkFCTEVfU1BFX0ZPUl9MT1dFUl9FTFMKLQkvKiBEZXRlY3QgaWYgU1BFIGlzIGltcGxlbWVudGVkICovCi0JbXJzCXgxLCBpZF9hYTY0ZGZyMF9lbDEKLQl1YmZ4CXgxLCB4MSwgI0lEX0FBNjRERlIwX1BNU19TSElGVCwgI0lEX0FBNjRERlIwX1BNU19MRU5HVEgKLQljbXAJeDEsICMweDEKLQliLm5lCTFmCi0KLQkvKiBFbmFibGUgU1BFIGZvciB1c2UgYnkgbm9ybWFsIHdvcmxkICovCi0Jb3JyCXgwLCB4MCwgI01EQ1JfTlNQQihNRENSX05TUEJfRUwxKQotMToKLSNlbmRpZgotCiAJbXNyCW1kY3JfZWwzLCB4MAogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDQsOSArMTI3LDkgQEAKIAkgKiBDUFRSX0VMMy5UVEE6IFNldCB0byB6ZXJvIHNvIHRoYXQgU3lzdGVtIHJlZ2lzdGVyIGFjY2Vzc2VzIHRvIHRoZQogCSAqICB0cmFjZSByZWdpc3RlcnMgZG8gbm90IHRyYXAgdG8gRUwzLgogCSAqCi0JICogQ1BUUl9FTDMuVEZQOiBTZXQgdG8gemVybyBzbyB0aGF0IGFjY2Vzc2VzIHRvIEFkdmFuY2VkIFNJTUQgYW5kCi0JICogIGZsb2F0aW5nLXBvaW50IGZ1bmN0aW9uYWxpdHkgZG8gbm90IHRyYXAgdG8gRUwzLgotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIENQVFJfRUwzLlRGUDogU2V0IHRvIHplcm8gc28gdGhhdCBhY2Nlc3NlcyB0byB0aGUgVi0gb3IgWi0gcmVnaXN0ZXJzCisJICogIGJ5IEFkdmFuY2VkIFNJTUQsIGZsb2F0aW5nLXBvaW50IG9yIFNWRSBpbnN0cnVjdGlvbnMgKGlmIGltcGxlbWVudGVkKQorCSAqICBkbyBub3QgdHJhcCB0byBFTDMuCiAJICovCiAJbW92X2ltbSB4MCwgKENQVFJfRUwzX1JFU0VUX1ZBTCAmIH4oVENQQUNfQklUIHwgVFRBX0JJVCB8IFRGUF9CSVQpKQogCW1zcgljcHRyX2VsMywgeDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uL2JsX2NvbW1vbi5oIGIvaW5jbHVkZS9jb21tb24vYmxfY29tbW9uLmgKaW5kZXggMTVmZmM1Ny4uODkxNWJhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tb24vYmxfY29tbW9uLmgKKysrIGIvaW5jbHVkZS9jb21tb24vYmxfY29tbW9uLmgKQEAgLTIwNSw3ICsyMDUsNiBAQAogCiAjaWYgTE9BRF9JTUFHRV9WMgogCi1pbnQgbG9hZF9pbWFnZSh1bnNpZ25lZCBpbnQgaW1hZ2VfaWQsIGltYWdlX2luZm9fdCAqaW1hZ2VfZGF0YSk7CiBpbnQgbG9hZF9hdXRoX2ltYWdlKHVuc2lnbmVkIGludCBpbWFnZV9pZCwgaW1hZ2VfaW5mb190ICppbWFnZV9kYXRhKTsKIAogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uL2ludGVycnVwdF9wcm9wcy5oIGIvaW5jbHVkZS9jb21tb24vaW50ZXJydXB0X3Byb3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4NmI0MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29tbW9uL2ludGVycnVwdF9wcm9wcy5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpZm5kZWYgX19JTlRFUlJVUFRfUFJPUFNfSF9fCisjZGVmaW5lIF9fSU5URVJSVVBUX1BST1BTX0hfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBDcmVhdGUgYW4gaW50ZXJydXB0IHByb3BlcnR5IGRlc2NyaXB0b3IgZnJvbSB2YXJpb3VzIGludGVycnVwdCBwcm9wZXJ0aWVzICovCisjZGVmaW5lIElOVFJfUFJPUF9ERVNDKG51bSwgcHJpLCBncnAsIGNmZykgXAorCXsgXAorCQkuaW50cl9udW0gPSBudW0sIFwKKwkJLmludHJfcHJpID0gcHJpLCBcCisJCS5pbnRyX2dycCA9IGdycCwgXAorCQkuaW50cl9jZmcgPSBjZmcsIFwKKwl9CisKK3R5cGVkZWYgc3RydWN0IGludGVycnVwdF9wcm9wIHsKKwl1bnNpZ25lZCBpbnQgaW50cl9udW06MTA7CisJdW5zaWduZWQgaW50IGludHJfcHJpOjg7CisJdW5zaWduZWQgaW50IGludHJfZ3JwOjI7CisJdW5zaWduZWQgaW50IGludHJfY2ZnOjI7Cit9IGludGVycnVwdF9wcm9wX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfX0lOVEVSUlVQVF9QUk9QU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uL3BhcmFtX2hlYWRlci5oIGIvaW5jbHVkZS9jb21tb24vcGFyYW1faGVhZGVyLmgKaW5kZXggOTBkNTliMy4uYzk4MmZjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tb24vcGFyYW1faGVhZGVyLmgKKysrIGIvaW5jbHVkZS9jb21tb24vcGFyYW1faGVhZGVyLmgKQEAgLTgsMTIgKzgsMTMgQEAKICNkZWZpbmUgX19QQVJBTV9IRUFERVJfSF9fCiAKIC8qIFBhcmFtIGhlYWRlciB0eXBlcyAqLwotI2RlZmluZSBQQVJBTV9FUAkJMHgwMQotI2RlZmluZSBQQVJBTV9JTUFHRV9CSU5BUlkJMHgwMgotI2RlZmluZSBQQVJBTV9CTDMxCQkweDAzCi0jZGVmaW5lIFBBUkFNX0JMX0xPQURfSU5GTwkweDA0Ci0jZGVmaW5lIFBBUkFNX0JMX1BBUkFNUwkJMHgwNQotI2RlZmluZSBQQVJBTV9QU0NJX0xJQl9BUkdTCTB4MDYKKyNkZWZpbmUgUEFSQU1fRVAJCQkweDAxCisjZGVmaW5lIFBBUkFNX0lNQUdFX0JJTkFSWQkJMHgwMgorI2RlZmluZSBQQVJBTV9CTDMxCQkJMHgwMworI2RlZmluZSBQQVJBTV9CTF9MT0FEX0lORk8JCTB4MDQKKyNkZWZpbmUgUEFSQU1fQkxfUEFSQU1TCQkJMHgwNQorI2RlZmluZSBQQVJBTV9QU0NJX0xJQl9BUkdTCQkweDA2CisjZGVmaW5lIFBBUkFNX1NQX0lNQUdFX0JPT1RfSU5GTwkweDA3CiAKIC8qIFBhcmFtIGhlYWRlciB2ZXJzaW9uICovCiAjZGVmaW5lIFZFUlNJT05fMQkweDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RyaXZlcnMvYXJtL2FybV9naWN2M19jb21tb24uaCBiL2luY2x1ZGUvZHJpdmVycy9hcm0vYXJtX2dpY3YzX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NzBlM2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RyaXZlcnMvYXJtL2FybV9naWN2M19jb21tb24uaApAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworI2lmbmRlZiBfX0FSTV9HSUNWM19DT01NT05fSF9fCisjZGVmaW5lIF9fQVJNX0dJQ1YzX0NPTU1PTl9IX18KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdJQzUwMC9HSUM2MDAgUmUtZGlzdHJpYnV0b3IgaW50ZXJmYWNlIHJlZ2lzdGVycyAmIGNvbnN0YW50cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogR0lDUl9XQUtFUiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZQlXQUtFUl9TTF9TSElGVAkJMAorI2RlZmluZQlXQUtFUl9RU0NfU0hJRlQJCTMxCisKKyNkZWZpbmUgV0FLRVJfU0xfQklUCQkoMVUgPDwgV0FLRVJfU0xfU0hJRlQpCisjZGVmaW5lIFdBS0VSX1FTQ19CSVQJCSgxVSA8PCBXQUtFUl9RU0NfU0hJRlQpCisKKyNlbmRpZiAvKiBfX0FSTV9HSUNWM19DT01NT05fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RyaXZlcnMvYXJtL2dpY19jb21tb24uaCBiL2luY2x1ZGUvZHJpdmVycy9hcm0vZ2ljX2NvbW1vbi5oCmluZGV4IDdlMDk3YWQuLjAwMWY1NzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJpdmVycy9hcm0vZ2ljX2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvZHJpdmVycy9hcm0vZ2ljX2NvbW1vbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCkBAIC0xMiwyMCArMTIsMzIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBDb25zdGFudHMgdG8gY2F0ZWdvcmlzZSBpbnRlcnJ1cHRzICovCiAjZGVmaW5lIE1JTl9TR0lfSUQJCTAKKyNkZWZpbmUgTUlOX1NFQ19TR0lfSUQJCTgKICNkZWZpbmUgTUlOX1BQSV9JRAkJMTYKICNkZWZpbmUgTUlOX1NQSV9JRAkJMzIKKyNkZWZpbmUgTUFYX1NQSV9JRAkJMTAxOQorCisjZGVmaW5lIFRPVEFMX1NQSV9JTlRSX05VTQkoTUFYX1NQSV9JRCAtIE1JTl9TUElfSUQgKyAxKQorI2RlZmluZSBUT1RBTF9QQ1BVX0lOVFJfTlVNCShNSU5fU1BJX0lEIC0gTUlOX1NHSV9JRCkKIAogLyogTWFzayBmb3IgdGhlIHByaW9yaXR5IGZpZWxkIGNvbW1vbiB0byBhbGwgR0lDIGludGVyZmFjZXMgKi8KICNkZWZpbmUgR0lDX1BSSV9NQVNLCQkJMHhmZgogCisvKiBNYXNrIGZvciB0aGUgY29uZmlndXJhdGlvbiBmaWVsZCBjb21tb24gdG8gYWxsIEdJQyBpbnRlcmZhY2VzICovCisjZGVmaW5lIEdJQ19DRkdfTUFTSwkJCTB4MworCiAvKiBDb25zdGFudCB0byBpbmRpY2F0ZSBhIHNwdXJpb3VzIGludGVycnVwdCBpbiBhbGwgR0lDIHZlcnNpb25zICovCiAjZGVmaW5lIEdJQ19TUFVSSU9VU19JTlRFUlJVUFQJCTEwMjMKIAorLyogSW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zICovCisjZGVmaW5lIEdJQ19JTlRSX0NGR19MRVZFTAkJMAorI2RlZmluZSBHSUNfSU5UUl9DRkdfRURHRQkJMQorCiAvKiBDb25zdGFudHMgdG8gY2F0ZWdvcmlzZSBwcmlvcml0aWVzICovCi0jZGVmaW5lIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWQkwCi0jZGVmaW5lIEdJQ19MT1dFU1RfU0VDX1BSSU9SSVRZCQkxMjcKLSNkZWZpbmUgR0lDX0hJR0hFU1RfTlNfUFJJT1JJVFkJCTEyOAotI2RlZmluZSBHSUNfTE9XRVNUX05TX1BSSU9SSVRZCQkyNTQgLyogMjU1IHdvdWxkIGRpc2FibGUgYW4gaW50ZXJydXB0ICovCisjZGVmaW5lIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWQkweDAKKyNkZWZpbmUgR0lDX0xPV0VTVF9TRUNfUFJJT1JJVFkJCTB4N2YKKyNkZWZpbmUgR0lDX0hJR0hFU1RfTlNfUFJJT1JJVFkJCTB4ODAKKyNkZWZpbmUgR0lDX0xPV0VTVF9OU19QUklPUklUWQkJMHhmZSAvKiAweGZmIHdvdWxkIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdJQyBEaXN0cmlidXRvciBpbnRlcmZhY2UgcmVnaXN0ZXIgb2Zmc2V0cyB0aGF0IGFyZSBjb21tb24gdG8gR0lDdjMgJiBHSUN2MgpAQCAtNjAsNiArNzIsOCBAQAogI2RlZmluZSBBUkNIX1JFVl9HSUNWMwkJMHgzCiAvKiBHSUN2MiByZXZpc2lvbiBhcyByZXBvcnRlZCBieSB0aGUgUElEUjIgcmVnaXN0ZXIgKi8KICNkZWZpbmUgQVJDSF9SRVZfR0lDVjIJCTB4MgorLyogR0lDdjEgcmV2aXNpb24gYXMgcmVwb3J0ZWQgYnkgdGhlIFBJRFIyIHJlZ2lzdGVyICovCisjZGVmaW5lIEFSQ0hfUkVWX0dJQ1YxCQkweDEKIAogI2RlZmluZSBJR1JPVVBSX1NISUZUCQk1CiAjZGVmaW5lIElTRU5BQkxFUl9TSElGVAkJNQpAQCAtNjksNiArODMsNyBAQAogI2RlZmluZSBJU0FDVElWRVJfU0hJRlQJCTUKICNkZWZpbmUgSUNBQ1RJVkVSX1NISUZUCQlJU0FDVElWRVJfU0hJRlQKICNkZWZpbmUgSVBSSU9SSVRZUl9TSElGVAkyCisjZGVmaW5lIElUQVJHRVRTUl9TSElGVAkJMgogI2RlZmluZSBJQ0ZHUl9TSElGVAkJNAogI2RlZmluZSBOU0FDUl9TSElGVAkJNAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RyaXZlcnMvYXJtL2dpY192Mi5oIGIvaW5jbHVkZS9kcml2ZXJzL2FybS9naWNfdjIuaAppbmRleCAzYTNkN2FhLi4yNThiODk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RyaXZlcnMvYXJtL2dpY192Mi5oCisrKyBiL2luY2x1ZGUvZHJpdmVycy9hcm0vZ2ljX3YyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgKi8KQEAgLTcsNiArNyw5IEBACiAjaWZuZGVmIF9fR0lDX1YyX0hfXwogI2RlZmluZSBfX0dJQ19WMl9IX18KIAorLyogVGhlIG1hY3JvcyByZXF1aXJlZCBoZXJlIGFyZSBhZGRpdGlvbmFsIHRvIHRob3NlIGluIGdpY19jb21tb24uaC4gKi8KKyNpbmNsdWRlIDxnaWNfY29tbW9uLmg+CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRISVMgRFJJVkVSIElTIERFUFJFQ0FURUQuIEZvciBHSUN2MiBzeXN0ZW1zLCB1c2UgdGhlIGRyaXZlciBpbiBnaWN2Mi5oCiAgKiBhbmQgZm9yIEdJQ3YzIHN5c3RlbXMsIHVzZSB0aGUgZHJpdmVyIGluIGdpY3YzLmguCkBAIC0xOSw1MCArMjIsMjAgQEAKICNkZWZpbmUgTUFYX1BQSVMJCVUoMTQpCiAjZGVmaW5lIE1BWF9TR0lTCQlVKDE2KQogCi0jZGVmaW5lIE1JTl9TR0lfSUQJCVUoMCkKLSNkZWZpbmUgTUlOX1BQSV9JRAkJVSgxNikKLSNkZWZpbmUgTUlOX1NQSV9JRAkJVSgzMikKIAogI2RlZmluZSBHUlAwCQkJVSgwKQogI2RlZmluZSBHUlAxCQkJVSgxKQotI2RlZmluZSBHSUNfUFJJX01BU0sJCVUoMHhmZikKLSNkZWZpbmUgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZIFUoMCkKLSNkZWZpbmUgR0lDX0xPV0VTVF9TRUNfUFJJT1JJVFkJVSgxMjcpCi0jZGVmaW5lIEdJQ19ISUdIRVNUX05TX1BSSU9SSVRZCVUoMTI4KQotI2RlZmluZSBHSUNfTE9XRVNUX05TX1BSSU9SSVRZCVUoMjU0KSAvKiAyNTUgd291bGQgZGlzYWJsZSBhbiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgR0lDX1NQVVJJT1VTX0lOVEVSUlVQVAlVKDEwMjMpCiAjZGVmaW5lIEdJQ19UQVJHRVRfQ1BVX01BU0sJVSgweGZmKQogCiAjZGVmaW5lIEVOQUJMRV9HUlAwCQkoVSgxKSA8PCAwKQogI2RlZmluZSBFTkFCTEVfR1JQMQkJKFUoMSkgPDwgMSkKIAogLyogRGlzdHJpYnV0b3IgaW50ZXJmYWNlIGRlZmluaXRpb25zICovCi0jZGVmaW5lIEdJQ0RfQ1RMUgkJVSgweDApCi0jZGVmaW5lIEdJQ0RfVFlQRVIJCVUoMHg0KQotI2RlZmluZSBHSUNEX0lHUk9VUFIJCVUoMHg4MCkKLSNkZWZpbmUgR0lDRF9JU0VOQUJMRVIJCVUoMHgxMDApCi0jZGVmaW5lIEdJQ0RfSUNFTkFCTEVSCQlVKDB4MTgwKQotI2RlZmluZSBHSUNEX0lTUEVORFIJCVUoMHgyMDApCi0jZGVmaW5lIEdJQ0RfSUNQRU5EUgkJVSgweDI4MCkKLSNkZWZpbmUgR0lDRF9JU0FDVElWRVIJCVUoMHgzMDApCi0jZGVmaW5lIEdJQ0RfSUNBQ1RJVkVSCQlVKDB4MzgwKQotI2RlZmluZSBHSUNEX0lQUklPUklUWVIJCVUoMHg0MDApCiAjZGVmaW5lIEdJQ0RfSVRBUkdFVFNSCQlVKDB4ODAwKQotI2RlZmluZSBHSUNEX0lDRkdSCQlVKDB4QzAwKQogI2RlZmluZSBHSUNEX1NHSVIJCVUoMHhGMDApCiAjZGVmaW5lIEdJQ0RfQ1BFTkRTR0lSCQlVKDB4RjEwKQogI2RlZmluZSBHSUNEX1NQRU5EU0dJUgkJVSgweEYyMCkKIAotI2RlZmluZSBJR1JPVVBSX1NISUZUCQlVKDUpCi0jZGVmaW5lIElTRU5BQkxFUl9TSElGVAkJVSg1KQotI2RlZmluZSBJQ0VOQUJMRVJfU0hJRlQJCUlTRU5BQkxFUl9TSElGVAotI2RlZmluZSBJU1BFTkRSX1NISUZUCQlVKDUpCi0jZGVmaW5lIElDUEVORFJfU0hJRlQJCUlTUEVORFJfU0hJRlQKLSNkZWZpbmUgSVNBQ1RJVkVSX1NISUZUCQlVKDUpCi0jZGVmaW5lIElDQUNUSVZFUl9TSElGVAkJSVNBQ1RJVkVSX1NISUZUCi0jZGVmaW5lIElQUklPUklUWVJfU0hJRlQJVSgyKQotI2RlZmluZSBJVEFSR0VUU1JfU0hJRlQJCVUoMikKLSNkZWZpbmUgSUNGR1JfU0hJRlQJCVUoNCkKICNkZWZpbmUgQ1BFTkRTR0lSX1NISUZUCQlVKDIpCiAjZGVmaW5lIFNQRU5EU0dJUl9TSElGVAkJQ1BFTkRTR0lSX1NISUZUCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJpdmVycy9hcm0vZ2ljX3YzLmggYi9pbmNsdWRlL2RyaXZlcnMvYXJtL2dpY192My5oCmluZGV4IGVlOGYyNmIuLjAyZjkwMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJpdmVycy9hcm0vZ2ljX3YzLmgKKysrIGIvaW5jbHVkZS9kcml2ZXJzL2FybS9naWNfdjMuaApAQCAtMjYsMTcgKzI2LDE3IEBACiAjZGVmaW5lIEdJQ1JfV0FLRVIJCTB4MTQKIAogLyogR0lDUl9XQUtFUiBiaXQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgV0FLRVJfQ0EJCSgxVUwgPDwgMikKLSNkZWZpbmUgV0FLRVJfUFMJCSgxVUwgPDwgMSkKKyNkZWZpbmUgV0FLRVJfQ0EJCShVKDEpIDw8IDIpCisjZGVmaW5lIFdBS0VSX1BTCQkoVSgxKSA8PCAxKQogCiAvKiBHSUNSX1RZUEVSIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBHSUNSX1RZUEVSX0FGRl9TSElGVAkzMgogI2RlZmluZSBHSUNSX1RZUEVSX0FGRl9NQVNLCTB4ZmZmZmZmZmYKLSNkZWZpbmUgR0lDUl9UWVBFUl9MQVNUCQkoMVVMIDw8IDQpCisjZGVmaW5lIEdJQ1JfVFlQRVJfTEFTVAkJKFUoMSkgPDwgNCkKIAogLyogR0lDdjMgSUNDX1NSRSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMqLwotI2RlZmluZSBJQ0NfU1JFX0VOCQkoMVVMIDw8IDMpCi0jZGVmaW5lIElDQ19TUkVfU1JFCQkoMVVMIDw8IDApCisjZGVmaW5lIElDQ19TUkVfRU4JCShVKDEpIDw8IDMpCisjZGVmaW5lIElDQ19TUkVfU1JFCQkoVSgxKSA8PCAwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR0lDdjMgZGVmaW50aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcml2ZXJzL2FybS9naWN2Mi5oIGIvaW5jbHVkZS9kcml2ZXJzL2FybS9naWN2Mi5oCmluZGV4IGE3ODgwMjUuLjZlODMyMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJpdmVycy9hcm0vZ2ljdjIuaAorKysgYi9pbmNsdWRlL2RyaXZlcnMvYXJtL2dpY3YyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDE1LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCkBAIC0xMCw5ICsxMCwxNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdJQ3YyIG1pc2NlbGxhbmVvdXMgZGVmaW5pdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEludGVycnVwdCBncm91cCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBHSUNWMl9JTlRSX0dST1VQMAkwCisjZGVmaW5lIEdJQ1YyX0lOVFJfR1JPVVAxCTEKKwogLyogSW50ZXJydXB0IElEcyByZXBvcnRlZCBieSB0aGUgSFBQSVIgYW5kIElBUiByZWdpc3RlcnMgKi8KICNkZWZpbmUgUEVORElOR19HMV9JTlRJRAkxMDIyCiAKKy8qIEdJQ3YyIGNhbiBvbmx5IHRhcmdldCB1cCB0byA4IFBFcyAqLworI2RlZmluZSBHSUNWMl9NQVhfVEFSR0VUX1BFCTgKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdJQ3YyIHNwZWNpZmljIERpc3RyaWJ1dG9yIGludGVyZmFjZSByZWdpc3RlciBvZmZzZXRzIGFuZCBjb25zdGFudHMuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjgsNiArMzYsMTkgQEAKICNkZWZpbmUgQ1BFTkRTR0lSX1NISUZUCQkyCiAjZGVmaW5lIFNQRU5EU0dJUl9TSElGVAkJQ1BFTkRTR0lSX1NISUZUCiAKKyNkZWZpbmUgU0dJUl9UR1RMU1RGTFRfU0hJRlQJMjQKKyNkZWZpbmUgU0dJUl9UR1RMU1RGTFRfTUFTSwkweDMKKyNkZWZpbmUgU0dJUl9UR1RMU1RfU0hJRlQJMTYKKyNkZWZpbmUgU0dJUl9UR1RMU1RfTUFTSwkweGZmCisjZGVmaW5lIFNHSVJfSU5USURfTUFTSwkJMHhmCisKKyNkZWZpbmUgU0dJUl9UR1RfU1BFQ0lGSUMJMAorCisjZGVmaW5lIEdJQ1YyX1NHSVJfVkFMVUUodGd0X2xzdF9mbHQsIHRndCwgaW50aWQpIFwKKwkoKCgodGd0X2xzdF9mbHQpICYgU0dJUl9UR1RMU1RGTFRfTUFTSykgPDwgU0dJUl9UR1RMU1RGTFRfU0hJRlQpIHwgXAorCSAoKCh0Z3QpICYgU0dJUl9UR1RMU1RfTUFTSykgPDwgU0dJUl9UR1RMU1RfU0hJRlQpIHwgXAorCSAoKGludGlkKSAmIFNHSVJfSU5USURfTUFTSykpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHSUN2MiBzcGVjaWZpYyBDUFUgaW50ZXJmYWNlIHJlZ2lzdGVyIG9mZnNldHMgYW5kIGNvbnN0YW50cy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05NSw2ICsxMTYsNyBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisjaW5jbHVkZSA8aW50ZXJydXB0X3Byb3BzLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDMsMjMgKzEyNSw0MyBAQAogICogaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgR0lDdjIgZHJpdmVyLiBUaGUgYXR0cmlidXRlcyBhcmUgZGVzY3JpYmVkCiAgKiBiZWxvdy4KICAqCi0gKiAxLiBUaGUgJ2dpY2RfYmFzZScgZmllbGQgY29udGFpbnMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgRGlzdHJpYnV0b3IKLSAqICAgIGludGVyZmFjZSBwcm9ncmFtbWVyJ3Mgdmlldy4KKyAqIFRoZSAnZ2ljZF9iYXNlJyBmaWVsZCBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBEaXN0cmlidXRvciBpbnRlcmZhY2UKKyAqIHByb2dyYW1tZXIncyB2aWV3LgogICoKLSAqIDIuIFRoZSAnZ2ljY19iYXNlJyBmaWVsZCBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBDUFUgSW50ZXJmYWNlCi0gKiAgICBwcm9ncmFtbWVyJ3Mgdmlldy4KKyAqIFRoZSAnZ2ljY19iYXNlJyBmaWVsZCBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBDUFUgSW50ZXJmYWNlCisgKiBwcm9ncmFtbWVyJ3Mgdmlldy4KICAqCi0gKiAzLiBUaGUgJ2cwX2ludGVycnVwdF9hcnJheScgZmllbGQgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IGluIHdoaWNoIGVhY2gKLSAqICAgIGVudHJ5IGNvcnJlc3BvbmRzIHRvIGFuIElEIG9mIGEgR3JvdXAgMCBpbnRlcnJ1cHQuCisgKiBUaGUgJ2cwX2ludGVycnVwdF9hcnJheScgZmllbGQgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IGluIHdoaWNoIGVhY2ggZW50cnkKKyAqIGNvcnJlc3BvbmRzIHRvIGFuIElEIG9mIGEgR3JvdXAgMCBpbnRlcnJ1cHQuIFRoaXMgZmllbGQgaXMgaWdub3JlZCB3aGVuCisgKiAnaW50ZXJydXB0X3Byb3BzJyBmaWVsZCBpcyB1c2VkLiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuCiAgKgotICogNC4gVGhlICdnMF9pbnRlcnJ1cHRfbnVtJyBmaWVsZCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlCi0gKiAgICAnZzBfaW50ZXJydXB0X2FycmF5Jy4KKyAqIFRoZSAnZzBfaW50ZXJydXB0X251bScgZmllbGQgY29udGFpbnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZQorICogJ2cwX2ludGVycnVwdF9hcnJheScuIFRoaXMgZmllbGQgaXMgaWdub3JlZCB3aGVuICdpbnRlcnJ1cHRfcHJvcHMnIGZpZWxkIGlzCisgKiB1c2VkLiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuCisgKgorICogVGhlICd0YXJnZXRfbWFza3MnIGlzIGEgcG9pbnRlciB0byBhbiBhcnJheSBjb250YWluaW5nICd0YXJnZXRfbWFza3NfbnVtJworICogZWxlbWVudHMuIFRoZSBHSUMgZHJpdmVyIHdpbGwgcG9wdWxhdGUgdGhlIGFycmF5IHdpdGggcGVyLVBFIHRhcmdldCBtYXNrIHRvCisgKiB1c2UgdG8gd2hlbiB0YXJnZXRpbmcgaW50ZXJydXB0cy4KKyAqCisgKiBUaGUgJ2ludGVycnVwdF9wcm9wcycgZmllbGQgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IHRoYXQgZW51bWVyYXRlcyBzZWN1cmUKKyAqIGludGVycnVwdHMgYW5kIHRoZWlyIHByb3BlcnRpZXMuIElmIHRoaXMgZmllbGQgaXMgbm90IE5VTEwsIGJvdGgKKyAqICdnMF9pbnRlcnJ1cHRfYXJyYXknIGFuZCAnZzFzX2ludGVycnVwdF9hcnJheScgZmllbGRzIGFyZSBpZ25vcmVkLgorICoKKyAqIFRoZSAnaW50ZXJydXB0X3Byb3BzX251bScgZmllbGQgY29udGFpbnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZQorICogJ2ludGVycnVwdF9wcm9wcycgYXJyYXkuIElmIHRoaXMgZmllbGQgaXMgbm9uLXplcm8sICdnMF9pbnRlcnJ1cHRfbnVtJyBpcworICogaWdub3JlZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB0eXBlZGVmIHN0cnVjdCBnaWN2Ml9kcml2ZXJfZGF0YSB7CiAJdWludHB0cl90IGdpY2RfYmFzZTsKIAl1aW50cHRyX3QgZ2ljY19iYXNlOworI2lmICFFUlJPUl9ERVBSRUNBVEVECiAJdW5zaWduZWQgaW50IGcwX2ludGVycnVwdF9udW07CiAJY29uc3QgdW5zaWduZWQgaW50ICpnMF9pbnRlcnJ1cHRfYXJyYXk7CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQgKnRhcmdldF9tYXNrczsKKwl1bnNpZ25lZCBpbnQgdGFyZ2V0X21hc2tzX251bTsKKwljb25zdCBpbnRlcnJ1cHRfcHJvcF90ICppbnRlcnJ1cHRfcHJvcHM7CisJdW5zaWduZWQgaW50IGludGVycnVwdF9wcm9wc19udW07CiB9IGdpY3YyX2RyaXZlcl9kYXRhX3Q7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzYsNiArMTc4LDE4IEBACiB1bnNpZ25lZCBpbnQgZ2ljdjJfYWNrbm93bGVkZ2VfaW50ZXJydXB0KHZvaWQpOwogdm9pZCBnaWN2Ml9lbmRfb2ZfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpZCk7CiB1bnNpZ25lZCBpbnQgZ2ljdjJfZ2V0X2ludGVycnVwdF9ncm91cCh1bnNpZ25lZCBpbnQgaWQpOwordW5zaWduZWQgaW50IGdpY3YyX2dldF9ydW5uaW5nX3ByaW9yaXR5KHZvaWQpOwordm9pZCBnaWN2Ml9zZXRfcGVfdGFyZ2V0X21hc2sodW5zaWduZWQgaW50IHByb2NfbnVtKTsKK3Vuc2lnbmVkIGludCBnaWN2Ml9nZXRfaW50ZXJydXB0X2FjdGl2ZSh1bnNpZ25lZCBpbnQgaWQpOwordm9pZCBnaWN2Ml9lbmFibGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpZCk7Cit2b2lkIGdpY3YyX2Rpc2FibGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpZCk7Cit2b2lkIGdpY3YyX3NldF9pbnRlcnJ1cHRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgcHJpb3JpdHkpOwordm9pZCBnaWN2Ml9zZXRfaW50ZXJydXB0X3R5cGUodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgdHlwZSk7Cit2b2lkIGdpY3YyX3JhaXNlX3NnaShpbnQgc2dpX251bSwgaW50IHByb2NfbnVtKTsKK3ZvaWQgZ2ljdjJfc2V0X3NwaV9yb3V0aW5nKHVuc2lnbmVkIGludCBpZCwgaW50IHByb2NfbnVtKTsKK3ZvaWQgZ2ljdjJfc2V0X2ludGVycnVwdF9wZW5kaW5nKHVuc2lnbmVkIGludCBpZCk7Cit2b2lkIGdpY3YyX2NsZWFyX2ludGVycnVwdF9wZW5kaW5nKHVuc2lnbmVkIGludCBpZCk7Cit1bnNpZ25lZCBpbnQgZ2ljdjJfc2V0X3Btcih1bnNpZ25lZCBpbnQgbWFzayk7CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfX0dJQ1YyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcml2ZXJzL2FybS9naWN2My5oIGIvaW5jbHVkZS9kcml2ZXJzL2FybS9naWN2My5oCmluZGV4IDhkOTk4MWEuLmYyYTUzNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJpdmVycy9hcm0vZ2ljdjMuaAorKysgYi9pbmNsdWRlL2RyaXZlcnMvYXJtL2dpY3YzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgKi8KQEAgLTIyLDYgKzIyLDkgQEAKIC8qIENvbnN0YW50IHRvIGNhdGVnb3JpemUgTFBJIGludGVycnVwdCAqLwogI2RlZmluZSBNSU5fTFBJX0lECQk4MTkyCiAKKy8qIEdJQ3YzIGNhbiBvbmx5IHRhcmdldCB1cCB0byAxNiBQRXMgd2l0aCBTR0kgKi8KKyNkZWZpbmUgR0lDVjNfTUFYX1NHSV9UQVJHRVRTCTE2CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHSUN2MyBzcGVjaWZpYyBEaXN0cmlidXRvciBpbnRlcmZhY2UgcmVnaXN0ZXIgb2Zmc2V0cyBhbmQgY29uc3RhbnRzLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTY2LDkgKzY5LDE1IEBACiAjZGVmaW5lIEdJQ0RfQ1RMUl9SV1BfQklUCQkoMSA8PCBHSUNEX0NUTFJfUldQX1NISUZUKQogCiAvKiBHSUNEX0lST1VURVIgc2hpZnRzIGFuZCBtYXNrcyAqLworI2RlZmluZSBJUk9VVEVSX1NISUZUCQkwCiAjZGVmaW5lIElST1VURVJfSVJNX1NISUZUCTMxCiAjZGVmaW5lIElST1VURVJfSVJNX01BU0sJMHgxCiAKKyNkZWZpbmUgR0lDVjNfSVJNX1BFCQkwCisjZGVmaW5lIEdJQ1YzX0lSTV9BTlkJCTEKKworI2RlZmluZSBOVU1fT0ZfRElTVF9SRUdTCTMwCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHSUN2MyBSZS1kaXN0cmlidXRvciBpbnRlcmZhY2UgcmVnaXN0ZXJzICYgY29uc3RhbnRzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzcsMTggKzg2LDI5IEBACiAjZGVmaW5lIEdJQ1JfQ1RMUgkJMHgwCiAjZGVmaW5lIEdJQ1JfVFlQRVIJCTB4MDgKICNkZWZpbmUgR0lDUl9XQUtFUgkJMHgxNAorI2RlZmluZSBHSUNSX1BST1BCQVNFUgkJMHg3MAorI2RlZmluZSBHSUNSX1BFTkRCQVNFUgkJMHg3OAogI2RlZmluZSBHSUNSX0lHUk9VUFIwCQkoR0lDUl9TR0lCQVNFX09GRlNFVCArIDB4ODApCiAjZGVmaW5lIEdJQ1JfSVNFTkFCTEVSMAkJKEdJQ1JfU0dJQkFTRV9PRkZTRVQgKyAweDEwMCkKICNkZWZpbmUgR0lDUl9JQ0VOQUJMRVIwCQkoR0lDUl9TR0lCQVNFX09GRlNFVCArIDB4MTgwKQorI2RlZmluZSBHSUNSX0lTUEVORFIwCQkoR0lDUl9TR0lCQVNFX09GRlNFVCArIDB4MjAwKQorI2RlZmluZSBHSUNSX0lDUEVORFIwCQkoR0lDUl9TR0lCQVNFX09GRlNFVCArIDB4MjgwKQorI2RlZmluZSBHSUNSX0lTQUNUSVZFUjAJCShHSUNSX1NHSUJBU0VfT0ZGU0VUICsgMHgzMDApCisjZGVmaW5lIEdJQ1JfSUNBQ1RJVkVSMAkJKEdJQ1JfU0dJQkFTRV9PRkZTRVQgKyAweDM4MCkKICNkZWZpbmUgR0lDUl9JUFJJT1JJVFlSCQkoR0lDUl9TR0lCQVNFX09GRlNFVCArIDB4NDAwKQogI2RlZmluZSBHSUNSX0lDRkdSMAkJKEdJQ1JfU0dJQkFTRV9PRkZTRVQgKyAweGMwMCkKICNkZWZpbmUgR0lDUl9JQ0ZHUjEJCShHSUNSX1NHSUJBU0VfT0ZGU0VUICsgMHhjMDQpCiAjZGVmaW5lIEdJQ1JfSUdSUE1PRFIwCQkoR0lDUl9TR0lCQVNFX09GRlNFVCArIDB4ZDAwKQorI2RlZmluZSBHSUNSX05TQUNSCQkoR0lDUl9TR0lCQVNFX09GRlNFVCArIDB4ZTAwKQogCiAvKiBHSUNSX0NUTFIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIEdJQ1JfQ1RMUl9VV1BfU0hJRlQJMzEKKyNkZWZpbmUgR0lDUl9DVExSX1VXUF9NQVNLCTB4MQorI2RlZmluZSBHSUNSX0NUTFJfVVdQX0JJVAkoMVUgPDwgR0lDUl9DVExSX1VXUF9TSElGVCkKICNkZWZpbmUgR0lDUl9DVExSX1JXUF9TSElGVAkzCiAjZGVmaW5lIEdJQ1JfQ1RMUl9SV1BfTUFTSwkweDEKLSNkZWZpbmUgR0lDUl9DVExSX1JXUF9CSVQJKDEgPDwgR0lDUl9DVExSX1JXUF9TSElGVCkKKyNkZWZpbmUgR0lDUl9DVExSX1JXUF9CSVQJKDFVIDw8IEdJQ1JfQ1RMUl9SV1BfU0hJRlQpCisjZGVmaW5lIEdJQ1JfQ1RMUl9FTl9MUElTX0JJVAkoMVUgPDwgMCkKIAogLyogR0lDUl9XQUtFUiBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgV0FLRVJfQ0FfU0hJRlQJCTIKQEAgLTExMSw2ICsxMzEsOCBAQAogCiAjZGVmaW5lIFRZUEVSX0xBU1RfQklUCQkoMSA8PCBUWVBFUl9MQVNUX1NISUZUKQogCisjZGVmaW5lIE5VTV9PRl9SRURJU1RfUkVHUwkzMAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR0lDdjMgQ1BVIGludGVyZmFjZSByZWdpc3RlcnMgJiBjb25zdGFudHMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNDcsMTAgKzE2OSw1MSBAQAogI2RlZmluZSBJQVIxX0VMMV9JTlRJRF9TSElGVAkJMAogI2RlZmluZSBJQVIxX0VMMV9JTlRJRF9NQVNLCQkweGZmZmZmZgogCisvKiBJQ0MgU0dJIG1hY3JvcyAqLworI2RlZmluZSBTR0lSX1RHVF9NQVNLCQkJMHhmZmZmCisjZGVmaW5lIFNHSVJfQUZGMV9TSElGVAkJCTE2CisjZGVmaW5lIFNHSVJfSU5USURfU0hJRlQJCTI0CisjZGVmaW5lIFNHSVJfSU5USURfTUFTSwkJCTB4ZgorI2RlZmluZSBTR0lSX0FGRjJfU0hJRlQJCQkzMgorI2RlZmluZSBTR0lSX0lSTV9TSElGVAkJCTQwCisjZGVmaW5lIFNHSVJfSVJNX01BU0sJCQkweDEKKyNkZWZpbmUgU0dJUl9BRkYzX1NISUZUCQkJNDgKKyNkZWZpbmUgU0dJUl9BRkZfTUFTSwkJCTB4ZgorCisjZGVmaW5lIFNHSVJfSVJNX1RPX0FGRgkJCTAKKworI2RlZmluZSBHSUNWM19TR0lSX1ZBTFVFKGFmZjMsIGFmZjIsIGFmZjEsIGludGlkLCBpcm0sIHRndCkgXAorCSgoKCh1aW50NjRfdCkgKGFmZjMpICYgU0dJUl9BRkZfTUFTSykgPDwgU0dJUl9BRkYzX1NISUZUKSB8IFwKKwkgKCgodWludDY0X3QpIChpcm0pICYgU0dJUl9JUk1fTUFTSykgPDwgU0dJUl9JUk1fU0hJRlQpIHwgXAorCSAoKCh1aW50NjRfdCkgKGFmZjIpICYgU0dJUl9BRkZfTUFTSykgPDwgU0dJUl9BRkYyX1NISUZUKSB8IFwKKwkgKCgoaW50aWQpICYgU0dJUl9JTlRJRF9NQVNLKSA8PCBTR0lSX0lOVElEX1NISUZUKSB8IFwKKwkgKCgoYWZmMSkgJiBTR0lSX0FGRl9NQVNLKSA8PCBTR0lSX0FGRjFfU0hJRlQpIHwgXAorCSAoKHRndCkgJiBTR0lSX1RHVF9NQVNLKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHSUN2MyBJVFMgcmVnaXN0ZXJzIGFuZCBjb25zdGFudHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBHSVRTX0NUTFIJCQkweDAKKyNkZWZpbmUgR0lUU19JSURSCQkJMHg0CisjZGVmaW5lIEdJVFNfVFlQRVIJCQkweDgKKyNkZWZpbmUgR0lUU19DQkFTRVIJCQkweDgwCisjZGVmaW5lIEdJVFNfQ1dSSVRFUgkJCTB4ODgKKyNkZWZpbmUgR0lUU19DUkVBRFIJCQkweDkwCisjZGVmaW5lIEdJVFNfQkFTRVIJCQkweDEwMAorCisvKiBHSVRTX0NUTFIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIEdJVFNfQ1RMUl9FTkFCTEVEX0JJVAkJMQorI2RlZmluZSBHSVRTX0NUTFJfUVVJRVNDRU5UX1NISUZUCTMxCisjZGVmaW5lIEdJVFNfQ1RMUl9RVUlFU0NFTlRfQklUCQkoMVUgPDwgR0lUU19DVExSX1FVSUVTQ0VOVF9TSElGVCkKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorI2luY2x1ZGUgPGdpY19jb21tb24uaD4KKyNpbmNsdWRlIDxpbnRlcnJ1cHRfcHJvcHMuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx0eXBlcy5oPgorI2luY2x1ZGUgPHV0aWxzX2RlZi5oPgogCiAjZGVmaW5lIGdpY3YzX2lzX2ludHJfaWRfc3BlY2lhbF9pZGVudGlmaWVyKGlkKQlcCiAJKCgoaWQpID49IFBFTkRJTkdfRzFTX0lOVElEKSAmJiAoKGlkKSA8PSBHSUNfU1BVUklPVVNfSU5URVJSVVBUKSkKQEAgLTE3Miw2MyArMjM1LDEzNyBAQAogCQkJCQkJCUlBUjBfRUwxX0lOVElEX01BU0sKICNkZWZpbmUgZ2ljdjNfZW5kX29mX2ludGVycnVwdChpZCkJCXdyaXRlX2ljY19lb2lyMF9lbDEoaWQpCiAKKy8qCisgKiBUaGlzIG1hY3JvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBHSUNEIHJlZ2lzdGVycyBjb3JyZXNwb25kaW5nIHRvCisgKiB0aGUgbmFtZS4KKyAqLworI2RlZmluZSBHSUNEX05VTV9SRUdTKHJlZ19uYW1lKQlcCisJRElWX1JPVU5EX1VQXzJFVkFMKFRPVEFMX1NQSV9JTlRSX05VTSwgKDEgPDwgcmVnX25hbWUgIyMgX1NISUZUKSkKKworI2RlZmluZSBHSUNSX05VTV9SRUdTKHJlZ19uYW1lKQlcCisJRElWX1JPVU5EX1VQXzJFVkFMKFRPVEFMX1BDUFVfSU5UUl9OVU0sICgxIDw8IHJlZ19uYW1lICMjIF9TSElGVCkpCisKKy8qIEludGVycnVwdCBJRCBtYXNrIGZvciBIUFBJUiwgQUhQUElSLCBJQVIgYW5kIEFJQVIgQ1BVIEludGVyZmFjZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSU5UX0lEX01BU0sJMHhmZmZmZmYKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBzb21lIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGF0dHJpYnV0ZXMgb2YgdGhlCiAgKiBHSUN2MyBJUC4gSXQgaXMgdXNlZCBieSB0aGUgcGxhdGZvcm0gcG9ydCB0byBzcGVjaWZ5IHRoZXNlIGF0dHJpYnV0ZXMgaW4gb3JkZXIKICAqIHRvIGluaXRpYWxpc2UgdGhlIEdJQ1YzIGRyaXZlci4gVGhlIGF0dHJpYnV0ZXMgYXJlIGRlc2NyaWJlZCBiZWxvdy4KICAqCi0gKiAxLiBUaGUgJ2dpY2RfYmFzZScgZmllbGQgY29udGFpbnMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgRGlzdHJpYnV0b3IKLSAqICAgIGludGVyZmFjZSBwcm9ncmFtbWVyJ3Mgdmlldy4KKyAqIFRoZSAnZ2ljZF9iYXNlJyBmaWVsZCBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBEaXN0cmlidXRvciBpbnRlcmZhY2UKKyAqIHByb2dyYW1tZXIncyB2aWV3LgogICoKLSAqIDIuIFRoZSAnZ2ljcl9iYXNlJyBmaWVsZCBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBSZS1kaXN0cmlidXRvcgotICogICAgaW50ZXJmYWNlIHByb2dyYW1tZXIncyB2aWV3LgorICogVGhlICdnaWNyX2Jhc2UnIGZpZWxkIGNvbnRhaW5zIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFJlLWRpc3RyaWJ1dG9yCisgKiBpbnRlcmZhY2UgcHJvZ3JhbW1lcidzIHZpZXcuCiAgKgotICogMy4gVGhlICdnMF9pbnRlcnJ1cHRfYXJyYXknIGZpZWxkIGlzIGEgcG9udGVyIHRvIGFuIGFycmF5IGluIHdoaWNoIGVhY2gKLSAqICAgIGVudHJ5IGNvcnJlc3BvbmRzIHRvIGFuIElEIG9mIGEgR3JvdXAgMCBpbnRlcnJ1cHQuCisgKiBUaGUgJ2cwX2ludGVycnVwdF9hcnJheScgZmllbGQgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IGluIHdoaWNoIGVhY2ggZW50cnkKKyAqIGNvcnJlc3BvbmRzIHRvIGFuIElEIG9mIGEgR3JvdXAgMCBpbnRlcnJ1cHQuIFRoaXMgZmllbGQgaXMgaWdub3JlZCB3aGVuCisgKiAnaW50ZXJydXB0X3Byb3BzJyBmaWVsZCBpcyB1c2VkLiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuCiAgKgotICogNC4gVGhlICdnMF9pbnRlcnJ1cHRfbnVtJyBmaWVsZCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlCi0gKiAgICAnZzBfaW50ZXJydXB0X2FycmF5Jy4KKyAqIFRoZSAnZzBfaW50ZXJydXB0X251bScgZmllbGQgY29udGFpbnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZQorICogJ2cwX2ludGVycnVwdF9hcnJheScuIFRoaXMgZmllbGQgaXMgaWdub3JlZCB3aGVuICdpbnRlcnJ1cHRfcHJvcHMnIGZpZWxkIGlzCisgKiB1c2VkLiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuCiAgKgotICogNS4gVGhlICdnMXNfaW50ZXJydXB0X2FycmF5JyBmaWVsZCBpcyBhIHBvbnRlciB0byBhbiBhcnJheSBpbiB3aGljaCBlYWNoCi0gKiAgICBlbnRyeSBjb3JyZXNwb25kcyB0byBhbiBJRCBvZiBhIEdyb3VwIDEgaW50ZXJydXB0LgorICogVGhlICdnMXNfaW50ZXJydXB0X2FycmF5JyBmaWVsZCBpcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgaW4gd2hpY2ggZWFjaCBlbnRyeQorICogY29ycmVzcG9uZHMgdG8gYW4gSUQgb2YgYSBHcm91cCAxIGludGVycnVwdC4gVGhpcyBmaWVsZCBpcyBpZ25vcmVkIHdoZW4KKyAqICdpbnRlcnJ1cHRfcHJvcHMnIGZpZWxkIGlzIHVzZWQuIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4KICAqCi0gKiA2LiBUaGUgJ2cxc19pbnRlcnJ1cHRfbnVtJyBmaWVsZCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlCi0gKiAgICAnZzFzX2ludGVycnVwdF9hcnJheScuCisgKiBUaGUgJ2cxc19pbnRlcnJ1cHRfbnVtJyBmaWVsZCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlCisgKiAnZzFzX2ludGVycnVwdF9hcnJheScuIFRoaXMgZmllbGQgbXVzdCBiZSAwIGlmICdpbnRlcnJ1cHRfcHJvcHMnIGZpZWxkIGlzCisgKiB1c2VkLiBUaGlzIGZpZWxkIGlzIGlnbm9yZWQgd2hlbiAnaW50ZXJydXB0X3Byb3BzJyBmaWVsZCBpcyB1c2VkLiBUaGlzIGZpZWxkCisgKiBpcyBkZXByZWNhdGVkLgogICoKLSAqIDcuIFRoZSAncmRpc3RpZl9udW0nIGZpZWxkIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgUmVkaXN0cmlidXRvciBpbnRlcmZhY2VzCi0gKiAgICB0aGUgR0lDIGltcGxlbWVudHMuIFRoaXMgaXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBDUFVzIG9yIENQVSBpbnRlcmZhY2VzCi0gKiAgICBpbnN0YW50aWF0ZWQgaW4gdGhlIEdJQy4KKyAqIFRoZSAnaW50ZXJydXB0X3Byb3BzJyBmaWVsZCBpcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgdGhhdCBlbnVtZXJhdGVzIHNlY3VyZQorICogaW50ZXJydXB0cyBhbmQgdGhlaXIgcHJvcGVydGllcy4gSWYgdGhpcyBmaWVsZCBpcyBub3QgTlVMTCwgYm90aAorICogJ2cwX2ludGVycnVwdF9hcnJheScgYW5kICdnMXNfaW50ZXJydXB0X2FycmF5JyBmaWVsZHMgYXJlIGlnbm9yZWQuCiAgKgotICogOC4gVGhlICdyZGlzdGlmX2Jhc2VfYWRkcnMnIGZpZWxkIGlzIGEgcG9pbnRlciB0byBhbiBhcnJheSB0aGF0IGhhcyBhbiBlbnRyeQotICogICAgZm9yIHN0b3JpbmcgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgUmVkaXN0cmlidXRvciBpbnRlcmZhY2UgZnJhbWUgb2YgZWFjaAotICogICAgQ1BVIGluIHRoZSBzeXN0ZW0uIFRoZSBzaXplIG9mIHRoZSBhcnJheSA9ICdyZGlzdGlmX251bScuIFRoZSBiYXNlCi0gKiAgICBhZGRyZXNzZXMgYXJlIGRldGVjdGVkIGR1cmluZyBkcml2ZXIgaW5pdGlhbGlzYXRpb24uCisgKiBUaGUgJ2ludGVycnVwdF9wcm9wc19udW0nIGZpZWxkIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUKKyAqICdpbnRlcnJ1cHRfcHJvcHMnIGFycmF5LiBJZiB0aGlzIGZpZWxkIGlzIG5vbi16ZXJvLCBib3RoICdnMF9pbnRlcnJ1cHRfbnVtJworICogYW5kICdnMXNfaW50ZXJydXB0X251bScgYXJlIGlnbm9yZWQuCiAgKgotICogOS4gVGhlICdtcGlkcl90b19jb3JlX3BvcycgZmllbGQgaXMgYSBwb2ludGVyIHRvIGEgaGFzaCBmdW5jdGlvbiB3aGljaCB0aGUKLSAqICAgIGRyaXZlciB3aWxsIHVzZSB0byBjb252ZXJ0IGFuIE1QSURSIHZhbHVlIHRvIGEgbGluZWFyIGNvcmUgaW5kZXguIFRoaXMKLSAqICAgIGluZGV4IHdpbGwgYmUgdXNlZCBmb3IgYWNjZXNzaW5nIHRoZSAncmRpc3RpZl9iYXNlX2FkZHJzJyBhcnJheS4gVGhpcyBpcwotICogICAgYW4gb3B0aW9uYWwgZmllbGQuIEEgR0lDdjMgaW1wbGVtZW50YXRpb24gbWFwcyBlYWNoIE1QSURSIHRvIGEgbGluZWFyIGNvcmUKLSAqICAgIGluZGV4IGFzIHdlbGwuIFRoaXMgbWFwcGluZyBjYW4gYmUgZm91bmQgYnkgcmVhZGluZyB0aGUgIkFmZmluaXR5IFZhbHVlIgotICogICAgYW5kICJQcm9jZXNzb3IgTnVtYmVyIiBmaWVsZHMgaW4gdGhlIEdJQ1JfVFlQRVIuIEl0IGlzIElNUC4gREVGLiBpZiB0aGUKLSAqICAgICJQcm9jZXNzb3IgTnVtYmVycyIgYXJlIHN1aXRhYmxlIHRvIGluZGV4IGludG8gYW4gYXJyYXkgdG8gYWNjZXNzIGNvcmUKLSAqICAgIHNwZWNpZmljIGluZm9ybWF0aW9uLiBJZiB0aGlzIG5vdCB0aGUgY2FzZSwgdGhlIHBsYXRmb3JtIHBvcnQgbXVzdCBwcm92aWRlCi0gKiAgICBhIGhhc2ggZnVuY3Rpb24uIE90aGVyd2lzZSwgdGhlICJQcm9jZXNzb3IgTnVtYmVyIiBmaWVsZCB3aWxsIGJlIHVzZWQgdG8KLSAqICAgIGFjY2VzcyB0aGUgYXJyYXkgZWxlbWVudHMuCisgKiBUaGUgJ3JkaXN0aWZfbnVtJyBmaWVsZCBjb250YWlucyB0aGUgbnVtYmVyIG9mIFJlZGlzdHJpYnV0b3IgaW50ZXJmYWNlcyB0aGUKKyAqIEdJQyBpbXBsZW1lbnRzLiBUaGlzIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgQ1BVcyBvciBDUFUgaW50ZXJmYWNlcworICogaW5zdGFudGlhdGVkIGluIHRoZSBHSUMuCisgKgorICogVGhlICdyZGlzdGlmX2Jhc2VfYWRkcnMnIGZpZWxkIGlzIGEgcG9pbnRlciB0byBhbiBhcnJheSB0aGF0IGhhcyBhbiBlbnRyeSBmb3IKKyAqIHN0b3JpbmcgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgUmVkaXN0cmlidXRvciBpbnRlcmZhY2UgZnJhbWUgb2YgZWFjaCBDUFUgaW4KKyAqIHRoZSBzeXN0ZW0uIFRoZSBzaXplIG9mIHRoZSBhcnJheSA9ICdyZGlzdGlmX251bScuIFRoZSBiYXNlIGFkZHJlc3NlcyBhcmUKKyAqIGRldGVjdGVkIGR1cmluZyBkcml2ZXIgaW5pdGlhbGlzYXRpb24uCisgKgorICogVGhlICdtcGlkcl90b19jb3JlX3BvcycgZmllbGQgaXMgYSBwb2ludGVyIHRvIGEgaGFzaCBmdW5jdGlvbiB3aGljaCB0aGUKKyAqIGRyaXZlciB3aWxsIHVzZSB0byBjb252ZXJ0IGFuIE1QSURSIHZhbHVlIHRvIGEgbGluZWFyIGNvcmUgaW5kZXguIFRoaXMgaW5kZXgKKyAqIHdpbGwgYmUgdXNlZCBmb3IgYWNjZXNzaW5nIHRoZSAncmRpc3RpZl9iYXNlX2FkZHJzJyBhcnJheS4gVGhpcyBpcyBhbgorICogb3B0aW9uYWwgZmllbGQuIEEgR0lDdjMgaW1wbGVtZW50YXRpb24gbWFwcyBlYWNoIE1QSURSIHRvIGEgbGluZWFyIGNvcmUgaW5kZXgKKyAqIGFzIHdlbGwuIFRoaXMgbWFwcGluZyBjYW4gYmUgZm91bmQgYnkgcmVhZGluZyB0aGUgIkFmZmluaXR5IFZhbHVlIiBhbmQKKyAqICJQcm9jZXNzb3IgTnVtYmVyIiBmaWVsZHMgaW4gdGhlIEdJQ1JfVFlQRVIuIEl0IGlzIElNUC4gREVGLiBpZiB0aGUKKyAqICJQcm9jZXNzb3IgTnVtYmVycyIgYXJlIHN1aXRhYmxlIHRvIGluZGV4IGludG8gYW4gYXJyYXkgdG8gYWNjZXNzIGNvcmUKKyAqIHNwZWNpZmljIGluZm9ybWF0aW9uLiBJZiB0aGlzIG5vdCB0aGUgY2FzZSwgdGhlIHBsYXRmb3JtIHBvcnQgbXVzdCBwcm92aWRlIGEKKyAqIGhhc2ggZnVuY3Rpb24uIE90aGVyd2lzZSwgdGhlICJQcm9jZXNzb3IgTnVtYmVyIiBmaWVsZCB3aWxsIGJlIHVzZWQgdG8gYWNjZXNzCisgKiB0aGUgYXJyYXkgZWxlbWVudHMuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgKCptcGlkcl9oYXNoX2ZuKSh1X3JlZ2lzdGVyX3QgbXBpZHIpOwogCiB0eXBlZGVmIHN0cnVjdCBnaWN2M19kcml2ZXJfZGF0YSB7CiAJdWludHB0cl90IGdpY2RfYmFzZTsKIAl1aW50cHRyX3QgZ2ljcl9iYXNlOworI2lmICFFUlJPUl9ERVBSRUNBVEVECiAJdW5zaWduZWQgaW50IGcwX2ludGVycnVwdF9udW07CiAJdW5zaWduZWQgaW50IGcxc19pbnRlcnJ1cHRfbnVtOwogCWNvbnN0IHVuc2lnbmVkIGludCAqZzBfaW50ZXJydXB0X2FycmF5OwogCWNvbnN0IHVuc2lnbmVkIGludCAqZzFzX2ludGVycnVwdF9hcnJheTsKKyNlbmRpZgorCWNvbnN0IGludGVycnVwdF9wcm9wX3QgKmludGVycnVwdF9wcm9wczsKKwl1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3Byb3BzX251bTsKIAl1bnNpZ25lZCBpbnQgcmRpc3RpZl9udW07CiAJdWludHB0cl90ICpyZGlzdGlmX2Jhc2VfYWRkcnM7CiAJbXBpZHJfaGFzaF9mbiBtcGlkcl90b19jb3JlX3BvczsKIH0gZ2ljdjNfZHJpdmVyX2RhdGFfdDsKIAordHlwZWRlZiBzdHJ1Y3QgZ2ljdjNfcmVkaXN0X2N0eCB7CisJLyogNjQgYml0cyByZWdpc3RlcnMgKi8KKwl1aW50NjRfdCBnaWNyX3Byb3BiYXNlcjsKKwl1aW50NjRfdCBnaWNyX3BlbmRiYXNlcjsKKworCS8qIDMyIGJpdHMgcmVnaXN0ZXJzICovCisJdWludDMyX3QgZ2ljcl9jdGxyOworCXVpbnQzMl90IGdpY3JfaWdyb3VwcjA7CisJdWludDMyX3QgZ2ljcl9pc2VuYWJsZXIwOworCXVpbnQzMl90IGdpY3JfaXNwZW5kcjA7CisJdWludDMyX3QgZ2ljcl9pc2FjdGl2ZXIwOworCXVpbnQzMl90IGdpY3JfaXByaW9yaXR5cltHSUNSX05VTV9SRUdTKElQUklPUklUWVIpXTsKKwl1aW50MzJfdCBnaWNyX2ljZmdyMDsKKwl1aW50MzJfdCBnaWNyX2ljZmdyMTsKKwl1aW50MzJfdCBnaWNyX2lncnBtb2RyMDsKKwl1aW50MzJfdCBnaWNyX25zYWNyOworfSBnaWN2M19yZWRpc3RfY3R4X3Q7CisKK3R5cGVkZWYgc3RydWN0IGdpY3YzX2Rpc3RfY3R4IHsKKwkvKiA2NCBiaXRzIHJlZ2lzdGVycyAqLworCXVpbnQ2NF90IGdpY2RfaXJvdXRlcltUT1RBTF9TUElfSU5UUl9OVU1dOworCisJLyogMzIgYml0cyByZWdpc3RlcnMgKi8KKwl1aW50MzJfdCBnaWNkX2N0bHI7CisJdWludDMyX3QgZ2ljZF9pZ3JvdXByW0dJQ0RfTlVNX1JFR1MoSUdST1VQUildOworCXVpbnQzMl90IGdpY2RfaXNlbmFibGVyW0dJQ0RfTlVNX1JFR1MoSVNFTkFCTEVSKV07CisJdWludDMyX3QgZ2ljZF9pc3BlbmRyW0dJQ0RfTlVNX1JFR1MoSVNQRU5EUildOworCXVpbnQzMl90IGdpY2RfaXNhY3RpdmVyW0dJQ0RfTlVNX1JFR1MoSVNBQ1RJVkVSKV07CisJdWludDMyX3QgZ2ljZF9pcHJpb3JpdHlyW0dJQ0RfTlVNX1JFR1MoSVBSSU9SSVRZUildOworCXVpbnQzMl90IGdpY2RfaWNmZ3JbR0lDRF9OVU1fUkVHUyhJQ0ZHUildOworCXVpbnQzMl90IGdpY2RfaWdycG1vZHJbR0lDRF9OVU1fUkVHUyhJR1JQTU9EUildOworCXVpbnQzMl90IGdpY2RfbnNhY3JbR0lDRF9OVU1fUkVHUyhOU0FDUildOworfSBnaWN2M19kaXN0X2N0eF90OworCit0eXBlZGVmIHN0cnVjdCBnaWN2M19pdHNfY3R4IHsKKwkvKiA2NCBiaXRzIHJlZ2lzdGVycyAqLworCXVpbnQ2NF90IGdpdHNfY2Jhc2VyOworCXVpbnQ2NF90IGdpdHNfY3dyaXRlcjsKKwl1aW50NjRfdCBnaXRzX2Jhc2VyWzhdOworCisJLyogMzIgYml0cyByZWdpc3RlcnMgKi8KKwl1aW50MzJfdCBnaXRzX2N0bHI7Cit9IGdpY3YzX2l0c19jdHhfdDsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdJQ3YzIEVMMyBkcml2ZXIgQVBJCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjQzLDcgKzM4MCwzNSBAQAogdW5zaWduZWQgaW50IGdpY3YzX2dldF9wZW5kaW5nX2ludGVycnVwdF9pZCh2b2lkKTsKIHVuc2lnbmVkIGludCBnaWN2M19nZXRfaW50ZXJydXB0X3R5cGUodW5zaWduZWQgaW50IGlkLAogCQkJCQkgIHVuc2lnbmVkIGludCBwcm9jX251bSk7Cit2b2lkIGdpY3YzX2Rpc3RpZl9pbml0X3Jlc3RvcmUoY29uc3QgZ2ljdjNfZGlzdF9jdHhfdCAqIGNvbnN0IGRpc3RfY3R4KTsKK3ZvaWQgZ2ljdjNfZGlzdGlmX3NhdmUoZ2ljdjNfZGlzdF9jdHhfdCAqIGNvbnN0IGRpc3RfY3R4KTsKKy8qCisgKiBnaWN2M19kaXN0aWZfcG9zdF9yZXN0b3JlIGFuZCBnaWN2M19kaXN0aWZfcHJlX3NhdmUgbXVzdCBiZSBpbXBsZW1lbnRlZCBpZgorICogZ2ljdjNfZGlzdGlmX3NhdmUgYW5kIGdpY3YzX3JkaXN0aWZfaW5pdF9yZXN0b3JlIGFyZSB1c2VkLiBJZiBubworICogaW1wbGVtZW50YXRpb24tZGVmaW5lZCBzZXF1ZW5jZSBpcyBuZWVkZWQgYXQgdGhlc2Ugc3RlcHMsIGFuIGVtcHR5IGZ1bmN0aW9uCisgKiBjYW4gYmUgcHJvdmlkZWQuCisgKi8KK3ZvaWQgZ2ljdjNfZGlzdGlmX3Bvc3RfcmVzdG9yZSh1bnNpZ25lZCBpbnQgcHJvY19udW0pOwordm9pZCBnaWN2M19kaXN0aWZfcHJlX3NhdmUodW5zaWduZWQgaW50IHByb2NfbnVtKTsKK3ZvaWQgZ2ljdjNfcmRpc3RpZl9pbml0X3Jlc3RvcmUodW5zaWduZWQgaW50IHByb2NfbnVtLCBjb25zdCBnaWN2M19yZWRpc3RfY3R4X3QgKiBjb25zdCByZGlzdF9jdHgpOwordm9pZCBnaWN2M19yZGlzdGlmX3NhdmUodW5zaWduZWQgaW50IHByb2NfbnVtLCBnaWN2M19yZWRpc3RfY3R4X3QgKiBjb25zdCByZGlzdF9jdHgpOwordm9pZCBnaWN2M19pdHNfc2F2ZV9kaXNhYmxlKHVpbnRwdHJfdCBnaXRzX2Jhc2UsIGdpY3YzX2l0c19jdHhfdCAqIGNvbnN0IGl0c19jdHgpOwordm9pZCBnaWN2M19pdHNfcmVzdG9yZSh1aW50cHRyX3QgZ2l0c19iYXNlLCBjb25zdCBnaWN2M19pdHNfY3R4X3QgKiBjb25zdCBpdHNfY3R4KTsKIAordW5zaWduZWQgaW50IGdpY3YzX2dldF9ydW5uaW5nX3ByaW9yaXR5KHZvaWQpOwordW5zaWduZWQgaW50IGdpY3YzX2dldF9pbnRlcnJ1cHRfYWN0aXZlKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHByb2NfbnVtKTsKK3ZvaWQgZ2ljdjNfZW5hYmxlX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcm9jX251bSk7Cit2b2lkIGdpY3YzX2Rpc2FibGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHByb2NfbnVtKTsKK3ZvaWQgZ2ljdjNfc2V0X2ludGVycnVwdF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcm9jX251bSwKKwkJdW5zaWduZWQgaW50IHByaW9yaXR5KTsKK3ZvaWQgZ2ljdjNfc2V0X2ludGVycnVwdF90eXBlKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHByb2NfbnVtLAorCQl1bnNpZ25lZCBpbnQgZ3JvdXApOwordm9pZCBnaWN2M19yYWlzZV9zZWN1cmVfZzBfc2dpKGludCBzZ2lfbnVtLCB1X3JlZ2lzdGVyX3QgdGFyZ2V0KTsKK3ZvaWQgZ2ljdjNfc2V0X3NwaV9yb3V0aW5nKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IGlybSwKKwkJdV9yZWdpc3Rlcl90IG1waWRyKTsKK3ZvaWQgZ2ljdjNfc2V0X2ludGVycnVwdF9wZW5kaW5nKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHByb2NfbnVtKTsKK3ZvaWQgZ2ljdjNfY2xlYXJfaW50ZXJydXB0X3BlbmRpbmcodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgcHJvY19udW0pOwordW5zaWduZWQgaW50IGdpY3YzX3NldF9wbXIodW5zaWduZWQgaW50IG1hc2spOwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19HSUNWM19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJpdmVycy9hdXRoL21iZWR0bHMvbWJlZHRsc19jb25maWcuaCBiL2luY2x1ZGUvZHJpdmVycy9hdXRoL21iZWR0bHMvbWJlZHRsc19jb25maWcuaAppbmRleCBmZGViNTJiLi5mOGYyNjA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RyaXZlcnMvYXV0aC9tYmVkdGxzL21iZWR0bHNfY29uZmlnLmgKKysrIGIvaW5jbHVkZS9kcml2ZXJzL2F1dGgvbWJlZHRscy9tYmVkdGxzX2NvbmZpZy5oCkBAIC05LDggKzksMTYgQEAKIC8qCiAgKiBLZXkgYWxnb3JpdGhtcyBjdXJyZW50bHkgc3VwcG9ydGVkIG9uIG1iZWQgVExTIGxpYnJhcmllcwogICovCi0jZGVmaW5lIFRGX01CRURUTFNfUlNBCQkxCi0jZGVmaW5lIFRGX01CRURUTFNfRUNEU0EJMgorI2RlZmluZSBURl9NQkVEVExTX1JTQQkJCTEKKyNkZWZpbmUgVEZfTUJFRFRMU19FQ0RTQQkJMgorI2RlZmluZSBURl9NQkVEVExTX1JTQV9BTkRfRUNEU0EJMworCisvKgorICogSGFzaCBhbGdvcml0aG1zIGN1cnJlbnRseSBzdXBwb3J0ZWQgb24gbWJlZCBUTFMgbGlicmFyaWVzCisgKi8KKyNkZWZpbmUgVEZfTUJFRFRMU19TSEEyNTYJCTEKKyNkZWZpbmUgVEZfTUJFRFRMU19TSEEzODQJCTIKKyNkZWZpbmUgVEZfTUJFRFRMU19TSEE1MTIJCTMKIAogLyoKICAqIENvbmZpZ3VyYXRpb24gZmlsZSB0byBidWlsZCBtYmVkIFRMUyB3aXRoIHRoZSByZXF1aXJlZCBmZWF0dXJlcyBmb3IKQEAgLTMwLDcgKzM4LDYgQEAKICNkZWZpbmUgTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTgogI2RlZmluZSBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFCiAjZGVmaW5lIE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UKLSNkZWZpbmUgTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVAogCiAjZGVmaW5lIE1CRURUTFNfQVNOMV9QQVJTRV9DCiAjZGVmaW5lIE1CRURUTFNfQVNOMV9XUklURV9DCkBAIC01Niw5ICs2MywxOSBAQAogI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAogI2VsaWYgKFRGX01CRURUTFNfS0VZX0FMR19JRCA9PSBURl9NQkVEVExTX1JTQSkKICNkZWZpbmUgTUJFRFRMU19SU0FfQworI2RlZmluZSBNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUCisjZWxpZiAoVEZfTUJFRFRMU19LRVlfQUxHX0lEID09IFRGX01CRURUTFNfUlNBX0FORF9FQ0RTQSkKKyNkZWZpbmUgTUJFRFRMU19SU0FfQworI2RlZmluZSBNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUCisjZGVmaW5lIE1CRURUTFNfRUNEU0FfQworI2RlZmluZSBNQkVEVExTX0VDUF9DCisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECiAjZW5kaWYKIAogI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9DCisjaWYgKFRGX01CRURUTFNfSEFTSF9BTEdfSUQgIT0gVEZfTUJFRFRMU19TSEEyNTYpCisjZGVmaW5lIE1CRURUTFNfU0hBNTEyX0MKKyNlbmRpZgogCiAjZGVmaW5lIE1CRURUTFNfVkVSU0lPTl9DCiAKQEAgLTY5LDEyICs4NiwxMyBAQAogI2RlZmluZSBNQkVEVExTX01QSV9XSU5ET1dfU0laRSAgICAgICAgICAgICAgMgogI2RlZmluZSBNQkVEVExTX01QSV9NQVhfU0laRSAgICAgICAgICAgICAgIDI1NgogCi0vKiBTeXN0ZW0gaGVhZGVycyByZXF1aXJlZCB0byBidWlsZCBtYmVkIFRMUyB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQogLyogTWVtb3J5IGJ1ZmZlciBhbGxvY2F0b3Igb3B0aW9ucyAqLwogI2RlZmluZSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRSAgICAgICAgOAogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyogU3lzdGVtIGhlYWRlcnMgcmVxdWlyZWQgdG8gYnVpbGQgbWJlZCBUTFMgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uICovCisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSAibWJlZHRscy9jaGVja19jb25maWcuaCIKKyNlbmRpZgogCiAjZW5kaWYgLyogX19NQkVEVExTX0NPTkZJR19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliL2FhcmNoMzIvYXJjaC5oIGIvaW5jbHVkZS9saWIvYWFyY2gzMi9hcmNoLmgKaW5kZXggNWZiYjgzYS4uNGQyYTVmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWIvYWFyY2gzMi9hcmNoLmgKKysrIGIvaW5jbHVkZS9saWIvYWFyY2gzMi9hcmNoLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKIAkJKCgobXBpZHIpID4+IE1QSURSX0FGRjFfU0hJRlQpICYgTVBJRFJfQUZGTFZMX01BU0spCiAjZGVmaW5lIE1QSURSX0FGRkxWTDJfVkFMKG1waWRyKSBcCiAJCSgoKG1waWRyKSA+PiBNUElEUl9BRkYyX1NISUZUKSAmIE1QSURSX0FGRkxWTF9NQVNLKQorI2RlZmluZSBNUElEUl9BRkZMVkwzX1ZBTChtcGlkcikJMAogCiAvKgogICogVGhlIE1QSURSX01BWF9BRkZMVkwgY291bnQgc3RhcnRzIGZyb20gMC4gVGFrZSBjYXJlIHRvCkBAIC03Nyw2ICs3OCwxMSBAQAogLyogQ1NTRUxSIGRlZmluaXRpb25zICovCiAjZGVmaW5lIExFVkVMX1NISUZUCQkxCiAKKy8qIElEX1BGUjAgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSURfUEZSMF9BTVVfU0hJRlQJVSgyMCkKKyNkZWZpbmUgSURfUEZSMF9BTVVfTEVOR1RICVUoNCkKKyNkZWZpbmUgSURfUEZSMF9BTVVfTUFTSwlVKDB4ZikKKwogLyogSURfUEZSMSBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBJRF9QRlIxX1ZJUlRFWFRfU0hJRlQJMTIKICNkZWZpbmUgSURfUEZSMV9WSVJURVhUX01BU0sJMHhmCkBAIC04NiwxNSArOTIsMjEgQEAKICNkZWZpbmUgSURfUEZSMV9HSUNfTUFTSwkweGYKIAogLyogU0NUTFIgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgU0NUTFJfUkVTMQkoKDEgPDwgMjMpIHwgKDEgPDwgMjIpIHwgKDEgPDwgMTEpIHwgKDEgPDwgNCkgfCBcCi0JCQkoMSA8PCAzKSkKKyNkZWZpbmUgU0NUTFJfUkVTMV9ERUYJCSgoMSA8PCAyMykgfCAoMSA8PCAyMikgfCAoMSA8PCA0KSB8ICgxIDw8IDMpKQorI2lmIEFSTV9BUkNIX01BSk9SID09IDcKKyNkZWZpbmUgU0NUTFJfUkVTMQkJU0NUTFJfUkVTMV9ERUYKKyNlbHNlCisjZGVmaW5lIFNDVExSX1JFUzEJCShTQ1RMUl9SRVMxX0RFRiB8ICgxIDw8IDExKSkKKyNlbmRpZgogI2RlZmluZSBTQ1RMUl9NX0JJVAkJKDEgPDwgMCkKICNkZWZpbmUgU0NUTFJfQV9CSVQJCSgxIDw8IDEpCiAjZGVmaW5lIFNDVExSX0NfQklUCQkoMSA8PCAyKQogI2RlZmluZSBTQ1RMUl9DUDE1QkVOX0JJVAkoMSA8PCA1KQogI2RlZmluZSBTQ1RMUl9JVERfQklUCQkoMSA8PCA3KQorI2RlZmluZSBTQ1RMUl9aX0JJVAkJKDEgPDwgMTEpCiAjZGVmaW5lIFNDVExSX0lfQklUCQkoMSA8PCAxMikKICNkZWZpbmUgU0NUTFJfVl9CSVQJCSgxIDw8IDEzKQorI2RlZmluZSBTQ1RMUl9SUl9CSVQJCSgxIDw8IDE0KQogI2RlZmluZSBTQ1RMUl9OVFdJX0JJVAkJKDEgPDwgMTYpCiAjZGVmaW5lIFNDVExSX05UV0VfQklUCQkoMSA8PCAxOCkKICNkZWZpbmUgU0NUTFJfV1hOX0JJVAkJKDEgPDwgMTkpCkBAIC0xODAsNiArMTkyLDcgQEAKIC8qIEhDUFRSIGRlZmluaXRpb25zICovCiAjZGVmaW5lIEhDUFRSX1JFUzEJCSgoMSA8PCAxMykgfCAoMTw8MTIpIHwgMHgzZmYpCiAjZGVmaW5lIFRDUEFDX0JJVAkJKDEgPDwgMzEpCisjZGVmaW5lIFRBTV9CSVQJCQkoMSA8PCAzMCkKICNkZWZpbmUgVFRBX0JJVAkJCSgxIDw8IDIwKQogI2RlZmluZSBUQ1AxMV9CSVQJCSgxIDw8IDEwKQogI2RlZmluZSBUQ1AxMF9CSVQJCSgxIDw8IDEwKQpAQCAtMzUwLDYgKzM2Myw4IEBACiAjZGVmaW5lIFBNQ1JfTl9TSElGVAkJMTEKICNkZWZpbmUgUE1DUl9OX01BU0sJCTB4MWYKICNkZWZpbmUgUE1DUl9OX0JJVFMJCShQTUNSX05fTUFTSyA8PCBQTUNSX05fU0hJRlQpCisjZGVmaW5lIFBNQ1JfTENfQklUCQkoMSA8PCA2KQorI2RlZmluZSBQTUNSX0RQX0JJVAkJKDEgPDwgNSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERlZmluaXRpb25zIG9mIHJlZ2lzdGVyIG9mZnNldHMsIGZpZWxkcyBhbmQgbWFjcm9zIGZvciBDUFUgc3lzdGVtCkBAIC0zODIsNiArMzk3LDcgQEAKIC8qIFN5c3RlbSByZWdpc3RlciBkZWZpbmVzIFRoZSBmb3JtYXQgaXM6IGNvcHJvYywgb3B0MSwgQ1JuLCBDUm0sIG9wdDIgKi8KICNkZWZpbmUgU0NSCQlwMTUsIDAsIGMxLCBjMSwgMAogI2RlZmluZSBTQ1RMUgkJcDE1LCAwLCBjMSwgYzAsIDAKKyNkZWZpbmUgQUNUTFIJCXAxNSwgMCwgYzEsIGMwLCAxCiAjZGVmaW5lIFNEQ1IJCXAxNSwgMCwgYzEsIGMzLCAxCiAjZGVmaW5lIE1QSURSCQlwMTUsIDAsIGMwLCBjMCwgNQogI2RlZmluZSBNSURSCQlwMTUsIDAsIGMwLCBjMCwgMApAQCAtMzk3LDYgKzQxMyw3IEBACiAjZGVmaW5lIERDSVNXCQlwMTUsIDAsIGM3LCBjNiwgMgogI2RlZmluZSBDVFIJCXAxNSwgMCwgYzAsIGMwLCAxCiAjZGVmaW5lIENOVEZSUQkJcDE1LCAwLCBjMTQsIGMwLCAwCisjZGVmaW5lIElEX1BGUjAJCXAxNSwgMCwgYzAsIGMxLCAwCiAjZGVmaW5lIElEX1BGUjEJCXAxNSwgMCwgYzAsIGMxLCAxCiAjZGVmaW5lIE1BSVIwCQlwMTUsIDAsIGMxMCwgYzIsIDAKICNkZWZpbmUgTUFJUjEJCXAxNSwgMCwgYzEwLCBjMiwgMQpAQCAtNDI4LDYgKzQ0NSwxMSBAQAogI2RlZmluZSBQTUNSCQlwMTUsIDAsIGM5LCBjMTIsIDAKICNkZWZpbmUgQ05USFBfQ1RMCXAxNSwgNCwgYzE0LCBjMiwgMQogCisvKiBBQXJjaDMyIGNvcHJvYyByZWdpc3RlcnMgZm9yIDMyYml0IE1NVSBkZXNjcmlwdG9yIHN1cHBvcnQgKi8KKyNkZWZpbmUgUFJSUgkJcDE1LCAwLCBjMTAsIGMyLCAwCisjZGVmaW5lIE5NUlIJCXAxNSwgMCwgYzEwLCBjMiwgMQorI2RlZmluZSBEQUNSCQlwMTUsIDAsIGMzLCBjMCwgMAorCiAvKiBHSUN2MyBDUFUgSW50ZXJmYWNlIHN5c3RlbSByZWdpc3RlciBkZWZpbmVzLiBUaGUgZm9ybWF0IGlzOiBjb3Byb2MsIG9wdDEsIENSbiwgQ1JtLCBvcHQyICovCiAjZGVmaW5lIElDQ19JQVIxCXAxNSwgMCwgYzEyLCBjMTIsIDAKICNkZWZpbmUgSUNDX0lBUjAJcDE1LCAwLCBjMTIsIGM4LCAwCkBAIC01MTAsNCArNTMyLDI4IEBACiAKICNkZWZpbmUgTUFLRV9NQUlSX05PUk1BTF9NRU1PUlkoaW5uZXIsIG91dGVyKQkoKGlubmVyKSB8ICgob3V0ZXIpIDw8IE1BSVJfTk9STV9PVVRFUl9TSElGVCkpCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucyBmb3Igc3lzdGVtIHJlZ2lzdGVyIGludGVyZmFjZSB0byBBTVUgZm9yIEFSTXY4LjQgb253YXJkcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQU1DUgkJcDE1LCAwLCBjMTMsIGMyLCAwCisjZGVmaW5lIEFNQ0ZHUgkJcDE1LCAwLCBjMTMsIGMyLCAxCisjZGVmaW5lIEFNQ0dDUgkJcDE1LCAwLCBjMTMsIGMyLCAyCisjZGVmaW5lIEFNVVNFUkVOUglwMTUsIDAsIGMxMywgYzIsIDMKKyNkZWZpbmUgQU1DTlRFTkNMUjAJcDE1LCAwLCBjMTMsIGMyLCA0CisjZGVmaW5lIEFNQ05URU5TRVQwCXAxNSwgMCwgYzEzLCBjMiwgNQorI2RlZmluZSBBTUNOVEVOQ0xSMQlwMTUsIDAsIGMxMywgYzMsIDAKKyNkZWZpbmUgQU1DTlRFTlNFVDEJcDE1LCAwLCBjMTMsIGMxLCAxCisKKy8qIEFjdGl2aXR5IE1vbml0b3IgR3JvdXAgMCBFdmVudCBDb3VudGVyIFJlZ2lzdGVycyAqLworI2RlZmluZSBBTUVWQ05UUjAwCXAxNSwgMCwgYzAKKyNkZWZpbmUgQU1FVkNOVFIwMQlwMTUsIDEsIGMwCisjZGVmaW5lIEFNRVZDTlRSMDIJcDE1LCAyLCBjMAorI2RlZmluZSBBTUVWQ05UUjAzCXAxNSwgMywgYzAKKworLyogQWN0aXZpdHkgTW9uaXRvciBHcm91cCAwIEV2ZW50IFR5cGUgUmVnaXN0ZXJzICovCisjZGVmaW5lIEFNRVZUWVBFUjAwCXAxNSwgMCwgYzEzLCBjNiwgMAorI2RlZmluZSBBTUVWVFlQRVIwMQlwMTUsIDAsIGMxMywgYzYsIDEKKyNkZWZpbmUgQU1FVlRZUEVSMDIJcDE1LCAwLCBjMTMsIGM2LCAyCisjZGVmaW5lIEFNRVZUWVBFUjAzCXAxNSwgMCwgYzEzLCBjNiwgMworCiAjZW5kaWYgLyogX19BUkNIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWIvYWFyY2gzMi9hcmNoX2hlbHBlcnMuaCBiL2luY2x1ZGUvbGliL2FhcmNoMzIvYXJjaF9oZWxwZXJzLmgKaW5kZXggNWQzMTgzNi4uMDIzMDE5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWIvYWFyY2gzMi9hcmNoX2hlbHBlcnMuaAorKysgYi9pbmNsdWRlL2xpYi9hYXJjaDMyL2FyY2hfaGVscGVycy5oCkBAIC0yMTMsNiArMjEzLDcgQEAKIERFRklORV9TWVNPUF9UWVBFX0ZVTkMoZHNiLCBpc2gpCiBERUZJTkVfU1lTT1BfVFlQRV9GVU5DKGRzYiwgaXNoc3QpCiBERUZJTkVfU1lTT1BfVFlQRV9GVU5DKGRtYiwgaXNoKQorREVGSU5FX1NZU09QX1RZUEVfRlVOQyhkbWIsIGlzaHN0KQogREVGSU5FX1NZU09QX0ZVTkMoaXNiKQogCiB2b2lkIF9fZGVhZDIgc21jKHVpbnQzMl90IHIwLCB1aW50MzJfdCByMSwgdWludDMyX3QgcjIsIHVpbnQzMl90IHIzLApAQCAtMjI2LDYgKzIyNyw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogREVGSU5FX0NPUFJPQ1JfUkVBRF9GVU5DKG1waWRyLCBNUElEUikKIERFRklORV9DT1BST0NSX1JFQURfRlVOQyhtaWRyLCBNSURSKQorREVGSU5FX0NPUFJPQ1JfUkVBRF9GVU5DKGlkX3BmcjAsIElEX1BGUjApCiBERUZJTkVfQ09QUk9DUl9SRUFEX0ZVTkMoaWRfcGZyMSwgSURfUEZSMSkKIERFRklORV9DT1BST0NSX1JFQURfRlVOQyhpc3IsIElTUikKIERFRklORV9DT1BST0NSX1JFQURfRlVOQyhjbGlkciwgQ0xJRFIpCkBAIC0yMzQsNiArMjM2LDcgQEAKIERFRklORV9DT1BST0NSX1JXX0ZVTkNTKHNjciwgU0NSKQogREVGSU5FX0NPUFJPQ1JfUldfRlVOQ1MoY3RyLCBDVFIpCiBERUZJTkVfQ09QUk9DUl9SV19GVU5DUyhzY3RsciwgU0NUTFIpCitERUZJTkVfQ09QUk9DUl9SV19GVU5DUyhhY3RsciwgQUNUTFIpCiBERUZJTkVfQ09QUk9DUl9SV19GVU5DUyhoc2N0bHIsIEhTQ1RMUikKIERFRklORV9DT1BST0NSX1JXX0ZVTkNTKGhjciwgSENSKQogREVGSU5FX0NPUFJPQ1JfUldfRlVOQ1MoaGNwdHIsIEhDUFRSKQpAQCAtMjU3LDYgKzI2MCw3IEBACiBERUZJTkVfQ09QUk9DUl9SV19GVU5DUyhpY2Nfc3JlX2VsMiwgSUNDX0hTUkUpCiBERUZJTkVfQ09QUk9DUl9SV19GVU5DUyhpY2Nfc3JlX2VsMywgSUNDX01TUkUpCiBERUZJTkVfQ09QUk9DUl9SV19GVU5DUyhpY2NfcG1yX2VsMSwgSUNDX1BNUikKK0RFRklORV9DT1BST0NSX1JXX0ZVTkNTKGljY19ycHJfZWwxLCBJQ0NfUlBSKQogREVGSU5FX0NPUFJPQ1JfUldfRlVOQ1MoaWNjX2lncnBlbjFfZWwzLCBJQ0NfTUdSUEVOMSkKIERFRklORV9DT1BST0NSX1JXX0ZVTkNTKGljY19pZ3JwZW4wX2VsMSwgSUNDX0lHUlBFTjApCiBERUZJTkVfQ09QUk9DUl9SV19GVU5DUyhpY2NfaHBwaXIwX2VsMSwgSUNDX0hQUElSMCkKQEAgLTI2NSwxMSArMjY5LDI0IEBACiBERUZJTkVfQ09QUk9DUl9SV19GVU5DUyhpY2NfaWFyMV9lbDEsIElDQ19JQVIxKQogREVGSU5FX0NPUFJPQ1JfUldfRlVOQ1MoaWNjX2VvaXIwX2VsMSwgSUNDX0VPSVIwKQogREVGSU5FX0NPUFJPQ1JfUldfRlVOQ1MoaWNjX2VvaXIxX2VsMSwgSUNDX0VPSVIxKQorREVGSU5FX0NPUFJPQ1JfUldfRlVOQ1NfNjQoaWNjX3NnaTByX2VsMSwgSUNDX1NHSTBSX0VMMV82NCkKIAogREVGSU5FX0NPUFJPQ1JfUldfRlVOQ1MoaGRjciwgSERDUikKIERFRklORV9DT1BST0NSX1JXX0ZVTkNTKGNudGhwX2N0bCwgQ05USFBfQ1RMKQogREVGSU5FX0NPUFJPQ1JfUkVBRF9GVU5DKHBtY3IsIFBNQ1IpCiAKK0RFRklORV9DT1BST0NSX1JXX0ZVTkNTKG5zYWNyLCBOU0FDUikKKworLyogQUFyY2gzMiBjb3Byb2MgcmVnaXN0ZXJzIGZvciAzMmJpdCBNTVUgZGVzY3JpcHRvciBzdXBwb3J0ICovCitERUZJTkVfQ09QUk9DUl9SV19GVU5DUyhwcnJyLCBQUlJSKQorREVGSU5FX0NPUFJPQ1JfUldfRlVOQ1Mobm1yciwgTk1SUikKK0RFRklORV9DT1BST0NSX1JXX0ZVTkNTKGRhY3IsIERBQ1IpCisKK0RFRklORV9DT1BST0NSX1JXX0ZVTkNTKGFtY250ZW5zZXQwLCBBTUNOVEVOU0VUMCkKK0RFRklORV9DT1BST0NSX1JXX0ZVTkNTKGFtY250ZW5zZXQxLCBBTUNOVEVOU0VUMSkKK0RFRklORV9DT1BST0NSX1JXX0ZVTkNTKGFtY250ZW5jbHIwLCBBTUNOVEVOQ0xSMCkKK0RFRklORV9DT1BST0NSX1JXX0ZVTkNTKGFtY250ZW5jbHIxLCBBTUNOVEVOQ0xSMSkKKwogLyoKICAqIFRMQkkgb3BlcmF0aW9uIHByb3RvdHlwZXMKICAqLwpAQCAtMjkzLDYgKzMxMCw3IEBACiAKIC8qIFByZXZpb3VzbHkgZGVmaW5lZCBhY2Nlc3NvciBmdW5jdGlvbnMgd2l0aCBpbmNvbXBsZXRlIHJlZ2lzdGVyIG5hbWVzICAqLwogI2RlZmluZSBkc2IoKQkJCWRzYnN5KCkKKyNkZWZpbmUgZG1iKCkJCQlkbWJzeSgpCiAKICNkZWZpbmUgSVNfSU5fU0VDVVJFKCkgXAogCShHRVRfTlNfQklUKHJlYWRfc2NyKCkpID09IDApCkBAIC0zMjQsNCArMzQyLDcgQEAKIAogI2RlZmluZSByZWFkX2N0cl9lbDAoKQkJcmVhZF9jdHIoKQogCisjZGVmaW5lIHdyaXRlX2ljY19zZ2kwcl9lbDEoX3YpIFwKKwkJd3JpdGU2NF9pY2Nfc2dpMHJfZWwxKF92KQorCiAjZW5kaWYgLyogX19BUkNIX0hFTFBFUlNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYi9hYXJjaDMyL3NtY2NfaGVscGVycy5oIGIvaW5jbHVkZS9saWIvYWFyY2gzMi9zbWNjX2hlbHBlcnMuaAppbmRleCAxYmM4NDM4Li41M2YxYWE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYi9hYXJjaDMyL3NtY2NfaGVscGVycy5oCisrKyBiL2luY2x1ZGUvbGliL2FhcmNoMzIvc21jY19oZWxwZXJzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDE2LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCkBAIC0yMSw3ICsyMSw4IEBACiAjZGVmaW5lIFNNQ19DVFhfU1BfTU9OCQkweDdDCiAjZGVmaW5lIFNNQ19DVFhfTFJfTU9OCQkweDgwCiAjZGVmaW5lIFNNQ19DVFhfU0NSCQkweDg0Ci0jZGVmaW5lIFNNQ19DVFhfU0laRQkJMHg4OAorI2RlZmluZSBTTUNfQ1RYX1BNQ1IJCTB4ODgKKyNkZWZpbmUgU01DX0NUWF9TSVpFCQkweDhDCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8Y2Fzc2VydC5oPgpAQCAtNzMsNiArNzQsNyBAQAogCXVfcmVnaXN0ZXJfdCBzcF9tb247CiAJdV9yZWdpc3Rlcl90IGxyX21vbjsKIAl1X3JlZ2lzdGVyX3Qgc2NyOworCXVfcmVnaXN0ZXJfdCBwbWNyOwogfSBzbWNfY3R4X3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYi9hYXJjaDMyL3NtY2NfbWFjcm9zLlMgYi9pbmNsdWRlL2xpYi9hYXJjaDMyL3NtY2NfbWFjcm9zLlMKaW5kZXggN2VkZjQxMC4uOTNmMjExZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWIvYWFyY2gzMi9zbWNjX21hY3Jvcy5TCisrKyBiL2luY2x1ZGUvbGliL2FhcmNoMzIvc21jY19tYWNyb3MuUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgKi8KQEAgLTEzLDYgKzEzLDggQEAKICAqIHNwc3IsIGxyLCBzcCByZWdpc3RlcnMgYW5kIHRoZSBgc2NyYCByZWdpc3RlciB0byB0aGUgU01DIGNvbnRleHQgb24gZW50cnkKICAqIGR1ZSBhIFNNQyBjYWxsLiBUaGUgYGxyYCBvZiB0aGUgY3VycmVudCBtb2RlIChtb25pdG9yKSBpcyBleHBlY3RlZCB0byBiZQogICogYWxyZWFkeSBzYXZlZC4gVGhlIGBzcGAgbXVzdCBwb2ludCB0byB0aGUgYHNtY19jdHhfdGAgdG8gc2F2ZSB0by4KKyAqIEFkZGl0aW9uYWxseSwgYWxzbyBzYXZlIHRoZSAncG1jcicgcmVnaXN0ZXIgYXMgdGhpcyBpcyB1cGRhdGVkIHdoaWxzdAorICogZXhlY3V0aW5nIGluIHRoZSBzZWN1cmUgd29ybGQuCiAgKi8KIAkubWFjcm8gc21jY19zYXZlX2dwX21vZGVfcmVncwogCS8qIFNhdmUgcjAgLSByMTIgaW4gdGhlIFNNQyBjb250ZXh0ICovCkBAIC0yMCw2ICsyMiw0NCBAQAogCW1vdglyMCwgc3AKIAlhZGQJcjAsIHIwLCAjU01DX0NUWF9TUF9VU1IKIAorI2lmIEFSTV9BUkNIX01BSk9SID09IDcgJiYgIWRlZmluZWQoQVJNVjdfU1VQUE9SVFNfVklSVFVBTElaQVRJT04pCisJLyogTXVzdCBiZSBpbiBzZWN1cmUgc3RhdGUgdG8gcmVzdG9yZSBNb25pdG9yIG1vZGUgKi8KKwlsZGNvcHIJcjQsIFNDUgorCWJpYwlyMiwgcjQsICNTQ1JfTlNfQklUCisJc3Rjb3ByCXIyLCBTQ1IKKwlpc2IKKworCWNwcwkjTU9ERTMyX3N5cworCXN0bQlyMCEsIHtzcCwgbHJ9CisKKwljcHMJI01PREUzMl9pcnEKKwltcnMJcjIsIHNwc3IKKwlzdG0JcjAhLCB7cjIsIHNwLCBscn0KKworCWNwcwkjTU9ERTMyX2ZpcQorCW1ycwlyMiwgc3BzcgorCXN0bQlyMCEsIHtyMiwgc3AsIGxyfQorCisJY3BzCSNNT0RFMzJfc3ZjCisJbXJzCXIyLCBzcHNyCisJc3RtCXIwISwge3IyLCBzcCwgbHJ9CisKKwljcHMJI01PREUzMl9hYnQKKwltcnMJcjIsIHNwc3IKKwlzdG0JcjAhLCB7cjIsIHNwLCBscn0KKworCWNwcwkjTU9ERTMyX3VuZAorCW1ycwlyMiwgc3BzcgorCXN0bQlyMCEsIHtyMiwgc3AsIGxyfQorCisJLyogbHJfbW9uIGlzIGFscmVhZHkgc2F2ZWQgYnkgY2FsbGVyICovCisJY3BzCSNNT0RFMzJfbW9uCisJbXJzCXIyLCBzcHNyCisJc3RtCXIwISwge3IyfQorCisJc3Rjb3ByCXI0LCBTQ1IKKwlpc2IKKyNlbHNlCiAJLyogU2F2ZSB0aGUgYmFua2VkIHJlZ2lzdGVycyBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgU1BTUiBhbmQgTFIgKi8KIAltcnMJcjQsIHNwX3VzcgogCW1ycwlyNSwgbHJfdXNyCkBAIC00MiwxMCArODIsMTMgQEAKIAltcnMJcjExLCBscl91bmQKIAltcnMJcjEyLCBzcHNyCiAJc3RtCXIwISwge3I0LXIxMn0KLQogCS8qIGxyX21vbiBpcyBhbHJlYWR5IHNhdmVkIGJ5IGNhbGxlciAqLworCiAJbGRjb3ByCXI0LCBTQ1IKKyNlbmRpZgogCXN0cglyNCwgW3NwLCAjU01DX0NUWF9TQ1JdCisJbGRjb3ByCXI0LCBQTUNSCisJc3RyCXI0LCBbc3AsICNTTUNfQ1RYX1BNQ1JdCiAJLmVuZG0KIAogLyoKQEAgLTcwLDggKzExMyw1MiBAQAogCXN0Y29wcglyMSwgU0NSCiAJaXNiCiAKKwkvKgorCSAqIFJlc3RvcmUgdGhlIFBNQ1IgcmVnaXN0ZXIuCisJICovCisJbGRyCXIxLCBbcjAsICNTTUNfQ1RYX1BNQ1JdCisJc3Rjb3ByCXIxLCBQTUNSCisKIAkvKiBSZXN0b3JlIHRoZSBiYW5rZWQgcmVnaXN0ZXJzIGluY2x1ZGluZyB0aGUgY3VycmVudCBTUFNSICovCiAJYWRkCXIxLCByMCwgI1NNQ19DVFhfU1BfVVNSCisKKyNpZiBBUk1fQVJDSF9NQUpPUiA9PSA3ICYmICFkZWZpbmVkKEFSTVY3X1NVUFBPUlRTX1ZJUlRVQUxJWkFUSU9OKQorCS8qIE11c3QgYmUgaW4gc2VjdXJlIHN0YXRlIHRvIHJlc3RvcmUgTW9uaXRvciBtb2RlICovCisJbGRjb3ByCXI0LCBTQ1IKKwliaWMJcjIsIHI0LCAjU0NSX05TX0JJVAorCXN0Y29wcglyMiwgU0NSCisJaXNiCisKKwljcHMJI01PREUzMl9zeXMKKwlsZG0JcjEhLCB7c3AsIGxyfQorCisJY3BzCSNNT0RFMzJfaXJxCisJbGRtCXIxISwge3IyLCBzcCwgbHJ9CisJbXNyCXNwc3JfZnN4YywgcjIKKworCWNwcwkjTU9ERTMyX2ZpcQorCWxkbQlyMSEsIHtyMiwgc3AsIGxyfQorCW1zcglzcHNyX2ZzeGMsIHIyCisKKwljcHMJI01PREUzMl9zdmMKKwlsZG0JcjEhLCB7cjIsIHNwLCBscn0KKwltc3IJc3Bzcl9mc3hjLCByMgorCisJY3BzCSNNT0RFMzJfYWJ0CisJbGRtCXIxISwge3IyLCBzcCwgbHJ9CisJbXNyCXNwc3JfZnN4YywgcjIKKworCWNwcwkjTU9ERTMyX3VuZAorCWxkbQlyMSEsIHtyMiwgc3AsIGxyfQorCW1zcglzcHNyX2ZzeGMsIHIyCisKKwljcHMJI01PREUzMl9tb24KKwlsZG0JcjEhLCB7cjJ9CisJbXNyCXNwc3JfZnN4YywgcjIKKworCXN0Y29wcglyNCwgU0NSCisJaXNiCisjZWxzZQogCWxkbQlyMSEsIHtyNC1yMTJ9CiAJbXNyCXNwX3VzciwgcjQKIAltc3IJbHJfdXNyLCByNQpAQCAtOTksNiArMTg2LDcgQEAKIAkgKiBmLT5bMzE6MjRdIGFuZCBjLT5bNzowXSBiaXRzIG9mIFNQU1IuCiAJICovCiAJbXNyCXNwc3JfZnN4YywgcjEyCisjZW5kaWYKIAogCS8qIFJlc3RvcmUgdGhlIExSICovCiAJbGRyCWxyLCBbcjAsICNTTUNfQ1RYX0xSX01PTl0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliL2FhcmNoNjQvYXJjaC5oIGIvaW5jbHVkZS9saWIvYWFyY2g2NC9hcmNoLmgKaW5kZXggZTM4YTUzMC4uOTZlMmQ1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWIvYWFyY2g2NC9hcmNoLmgKKysrIGIvaW5jbHVkZS9saWIvYWFyY2g2NC9hcmNoLmgKQEAgLTY4LDYgKzY4LDcgQEAKICNkZWZpbmUgSUNDX0NUTFJfRUwxICAgIFMzXzBfQzEyX0MxMl80CiAjZGVmaW5lIElDQ19DVExSX0VMMyAgICBTM182X0MxMl9DMTJfNAogI2RlZmluZSBJQ0NfUE1SX0VMMSAgICAgUzNfMF9DNF9DNl8wCisjZGVmaW5lIElDQ19SUFJfRUwxICAgICBTM18wX0MxMl9DMTFfMwogI2RlZmluZSBJQ0NfSUdSUEVOMV9FTDMgUzNfNl9jMTJfYzEyXzcKICNkZWZpbmUgSUNDX0lHUlBFTjBfRUwxIFMzXzBfYzEyX2MxMl82CiAjZGVmaW5lIElDQ19IUFBJUjBfRUwxICBTM18wX2MxMl9jOF8yCkBAIC03Niw2ICs3Nyw3IEBACiAjZGVmaW5lIElDQ19JQVIxX0VMMSAgICBTM18wX2MxMl9jMTJfMAogI2RlZmluZSBJQ0NfRU9JUjBfRUwxICAgUzNfMF9jMTJfYzhfMQogI2RlZmluZSBJQ0NfRU9JUjFfRUwxICAgUzNfMF9jMTJfYzEyXzEKKyNkZWZpbmUgSUNDX1NHSTBSX0VMMQlTM18wX2MxMl9jMTFfNwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR2VuZXJpYyB0aW1lciBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVycyAmIG9mZnNldHMKQEAgLTEwOCw3ICsxMTAsMTMgQEAKICNkZWZpbmUgSURfQUE2NFBGUjBfRUwxX1NISUZUCVUoNCkKICNkZWZpbmUgSURfQUE2NFBGUjBfRUwyX1NISUZUCVUoOCkKICNkZWZpbmUgSURfQUE2NFBGUjBfRUwzX1NISUZUCVUoMTIpCisjZGVmaW5lIElEX0FBNjRQRlIwX0FNVV9TSElGVAlVKDQ0KQorI2RlZmluZSBJRF9BQTY0UEZSMF9BTVVfTEVOR1RICVUoNCkKKyNkZWZpbmUgSURfQUE2NFBGUjBfQU1VX01BU0sJVSgweGYpCiAjZGVmaW5lIElEX0FBNjRQRlIwX0VMWF9NQVNLCVUoMHhmKQorI2RlZmluZSBJRF9BQTY0UEZSMF9TVkVfU0hJRlQJVSgzMikKKyNkZWZpbmUgSURfQUE2NFBGUjBfU1ZFX01BU0sJVSgweGYpCisjZGVmaW5lIElEX0FBNjRQRlIwX1NWRV9MRU5HVEgJVSg0KQogCiAvKiBJRF9BQTY0REZSMF9FTDEuUE1TIGRlZmluaXRpb25zIChmb3IgQVJNdjguMispICovCiAjZGVmaW5lIElEX0FBNjRERlIwX1BNU19TSElGVAlVKDMyKQpAQCAtMTI0LDYgKzEzMiw3IEBACiAjZGVmaW5lIElEX0FBNjRQRlIwX0dJQ19NQVNLCSgoVSgxKSA8PCBJRF9BQTY0UEZSMF9HSUNfV0lEVEgpIC0gMSkKIAogLyogSURfQUE2NE1NRlIwX0VMMSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJRF9BQTY0TU1GUjBfRUwxX1BBUkFOR0VfU0hJRlQJVSgwKQogI2RlZmluZSBJRF9BQTY0TU1GUjBfRUwxX1BBUkFOR0VfTUFTSwlVKDB4ZikKIAogI2RlZmluZSBQQVJBTkdFXzAwMDAJVSgzMikKQEAgLTEzMiw2ICsxNDEsMjIgQEAKICNkZWZpbmUgUEFSQU5HRV8wMDExCVUoNDIpCiAjZGVmaW5lIFBBUkFOR0VfMDEwMAlVKDQ0KQogI2RlZmluZSBQQVJBTkdFXzAxMDEJVSg0OCkKKyNkZWZpbmUgUEFSQU5HRV8wMTEwCVUoNTIpCisKKyNkZWZpbmUgSURfQUE2NE1NRlIwX0VMMV9UR1JBTjRfU0hJRlQJCVUoMjgpCisjZGVmaW5lIElEX0FBNjRNTUZSMF9FTDFfVEdSQU40X01BU0sJCVUoMHhmKQorI2RlZmluZSBJRF9BQTY0TU1GUjBfRUwxX1RHUkFONF9TVVBQT1JURUQJVSgweDApCisjZGVmaW5lIElEX0FBNjRNTUZSMF9FTDFfVEdSQU40X05PVF9TVVBQT1JURUQJVSgweGYpCisKKyNkZWZpbmUgSURfQUE2NE1NRlIwX0VMMV9UR1JBTjY0X1NISUZUCQlVKDI0KQorI2RlZmluZSBJRF9BQTY0TU1GUjBfRUwxX1RHUkFONjRfTUFTSwkJVSgweGYpCisjZGVmaW5lIElEX0FBNjRNTUZSMF9FTDFfVEdSQU42NF9TVVBQT1JURUQJVSgweDApCisjZGVmaW5lIElEX0FBNjRNTUZSMF9FTDFfVEdSQU42NF9OT1RfU1VQUE9SVEVECVUoMHhmKQorCisjZGVmaW5lIElEX0FBNjRNTUZSMF9FTDFfVEdSQU4xNl9TSElGVAkJVSgyMCkKKyNkZWZpbmUgSURfQUE2NE1NRlIwX0VMMV9UR1JBTjE2X01BU0sJCVUoMHhmKQorI2RlZmluZSBJRF9BQTY0TU1GUjBfRUwxX1RHUkFOMTZfU1VQUE9SVEVECVUoMHgxKQorI2RlZmluZSBJRF9BQTY0TU1GUjBfRUwxX1RHUkFOMTZfTk9UX1NVUFBPUlRFRAlVKDB4MCkKIAogLyogSURfUEZSMV9FTDEgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgSURfUEZSMV9WSVJURVhUX1NISUZUCVUoMTIpCkBAIC0xNTgsMTIgKzE4MywyNSBAQAogI2RlZmluZSBTQ1RMUl9BX0JJVAkJKFUoMSkgPDwgMSkKICNkZWZpbmUgU0NUTFJfQ19CSVQJCShVKDEpIDw8IDIpCiAjZGVmaW5lIFNDVExSX1NBX0JJVAkJKFUoMSkgPDwgMykKKyNkZWZpbmUgU0NUTFJfU0EwX0JJVAkJKFUoMSkgPDwgNCkKICNkZWZpbmUgU0NUTFJfQ1AxNUJFTl9CSVQJKFUoMSkgPDwgNSkKKyNkZWZpbmUgU0NUTFJfSVREX0JJVAkJKFUoMSkgPDwgNykKKyNkZWZpbmUgU0NUTFJfU0VEX0JJVAkJKFUoMSkgPDwgOCkKKyNkZWZpbmUgU0NUTFJfVU1BX0JJVAkJKFUoMSkgPDwgOSkKICNkZWZpbmUgU0NUTFJfSV9CSVQJCShVKDEpIDw8IDEyKQorI2RlZmluZSBTQ1RMUl9WX0JJVAkJKFUoMSkgPDwgMTMpCisjZGVmaW5lIFNDVExSX0RaRV9CSVQJCShVKDEpIDw8IDE0KQorI2RlZmluZSBTQ1RMUl9VQ1RfQklUCQkoVSgxKSA8PCAxNSkKICNkZWZpbmUgU0NUTFJfTlRXSV9CSVQJCShVKDEpIDw8IDE2KQogI2RlZmluZSBTQ1RMUl9OVFdFX0JJVAkJKFUoMSkgPDwgMTgpCiAjZGVmaW5lIFNDVExSX1dYTl9CSVQJCShVKDEpIDw8IDE5KQorI2RlZmluZSBTQ1RMUl9VV1hOX0JJVAkJKFUoMSkgPDwgMjApCisjZGVmaW5lIFNDVExSX0UwRV9CSVQJCShVKDEpIDw8IDI0KQogI2RlZmluZSBTQ1RMUl9FRV9CSVQJCShVKDEpIDw8IDI1KQorI2RlZmluZSBTQ1RMUl9VQ0lfQklUCQkoVSgxKSA8PCAyNikKKyNkZWZpbmUgU0NUTFJfVFJFX0JJVAkJKFUoMSkgPDwgMjgpCisjZGVmaW5lIFNDVExSX0FGRV9CSVQJCShVKDEpIDw8IDI5KQorI2RlZmluZSBTQ1RMUl9URV9CSVQJCShVKDEpIDw8IDMwKQogI2RlZmluZSBTQ1RMUl9SRVNFVF9WQUwJCVNDVExSX0VMM19SRVMxCiAKIC8qIENQQUNSX0VsMSBkZWZpbml0aW9ucyAqLwpAQCAtMjYzLDE1ICszMDEsMTkgQEAKIAogLyogQ1BUUl9FTDMgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgVENQQUNfQklUCQkoVSgxKSA8PCAzMSkKKyNkZWZpbmUgVEFNX0JJVAkJCShVKDEpIDw8IDMwKQogI2RlZmluZSBUVEFfQklUCQkJKFUoMSkgPDwgMjApCiAjZGVmaW5lIFRGUF9CSVQJCQkoVSgxKSA8PCAxMCkKKyNkZWZpbmUgQ1BUUl9FWl9CSVQJCShVKDEpIDw8IDgpCiAjZGVmaW5lIENQVFJfRUwzX1JFU0VUX1ZBTAlVKDB4MCkKIAogLyogQ1BUUl9FTDIgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgQ1BUUl9FTDJfUkVTMQkJKChVKDEpIDw8IDEzKSB8IChVKDEpIDw8IDEyKSB8IChVKDB4M2ZmKSkpCiAjZGVmaW5lIENQVFJfRUwyX1RDUEFDX0JJVAkoVSgxKSA8PCAzMSkKKyNkZWZpbmUgQ1BUUl9FTDJfVEFNX0JJVAkoVSgxKSA8PCAzMCkKICNkZWZpbmUgQ1BUUl9FTDJfVFRBX0JJVAkoVSgxKSA8PCAyMCkKICNkZWZpbmUgQ1BUUl9FTDJfVEZQX0JJVAkoVSgxKSA8PCAxMCkKKyNkZWZpbmUgQ1BUUl9FTDJfVFpfQklUCQkoVSgxKSA8PCA4KQogI2RlZmluZSBDUFRSX0VMMl9SRVNFVF9WQUwJQ1BUUl9FTDJfUkVTMQogCiAvKiBDUFNSL1NQU1IgZGVmaW5pdGlvbnMgKi8KQEAgLTMxMiw3ICszNTQsNyBAQAogLyoKICAqIFRDUiBkZWZpbnRpb25zCiAgKi8KLSNkZWZpbmUgVENSX0VMM19SRVMxCQkoKDFVTCA8PCAzMSkgfCAoMVVMIDw8IDIzKSkKKyNkZWZpbmUgVENSX0VMM19SRVMxCQkoKFUoMSkgPDwgMzEpIHwgKFUoMSkgPDwgMjMpKQogI2RlZmluZSBUQ1JfRUwxX0lQU19TSElGVAlVKDMyKQogI2RlZmluZSBUQ1JfRUwzX1BTX1NISUZUCVUoMTYpCiAKQEAgLTM0OCw2ICszOTAsMTUgQEAKICNkZWZpbmUgVENSX1NIX09VVEVSX1NIQVJFQUJMRQkoVSgweDIpIDw8IDEyKQogI2RlZmluZSBUQ1JfU0hfSU5ORVJfU0hBUkVBQkxFCShVKDB4MykgPDwgMTIpCiAKKyNkZWZpbmUgVENSX1RHMF9TSElGVAkJVSgxNCkKKyNkZWZpbmUgVENSX1RHMF9NQVNLCQlVKDMpCisjZGVmaW5lIFRDUl9URzBfNEsJCShVTEwoMCkgPDwgVENSX1RHMF9TSElGVCkKKyNkZWZpbmUgVENSX1RHMF82NEsJCShVTEwoMSkgPDwgVENSX1RHMF9TSElGVCkKKyNkZWZpbmUgVENSX1RHMF8xNksJCShVTEwoMikgPDwgVENSX1RHMF9TSElGVCkKKworI2RlZmluZSBUQ1JfRVBEMF9CSVQJCShVKDEpIDw8IDcpCisjZGVmaW5lIFRDUl9FUEQxX0JJVAkJKFUoMSkgPDwgMjMpCisKICNkZWZpbmUgTU9ERV9TUF9TSElGVAkJVSgweDApCiAjZGVmaW5lIE1PREVfU1BfTUFTSwkJVSgweDEpCiAjZGVmaW5lIE1PREVfU1BfRUwwCQlVKDB4MCkKQEAgLTUwMCw5ICs1NTEsMjYgQEAKICNkZWZpbmUgQ05UQUNSX1JXUFRfU0hJRlQJVSgweDUpCiAKIC8qIFBNQ1JfRUwwIGRlZmluaXRpb25zICovCisjZGVmaW5lIFBNQ1JfRUwwX1JFU0VUX1ZBTAlVKDB4MCkKICNkZWZpbmUgUE1DUl9FTDBfTl9TSElGVAlVKDExKQogI2RlZmluZSBQTUNSX0VMMF9OX01BU0sJCVUoMHgxZikKICNkZWZpbmUgUE1DUl9FTDBfTl9CSVRTCQkoUE1DUl9FTDBfTl9NQVNLIDw8IFBNQ1JfRUwwX05fU0hJRlQpCisjZGVmaW5lIFBNQ1JfRUwwX0xDX0JJVAkJKFUoMSkgPDwgNikKKyNkZWZpbmUgUE1DUl9FTDBfRFBfQklUCQkoVSgxKSA8PCA1KQorI2RlZmluZSBQTUNSX0VMMF9YX0JJVAkJKFUoMSkgPDwgNCkKKyNkZWZpbmUgUE1DUl9FTDBfRF9CSVQJCShVKDEpIDw8IDMpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucyBmb3Igc3lzdGVtIHJlZ2lzdGVyIGludGVyZmFjZSB0byBTVkUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFpDUl9FTDMJCQlTM182X0MxX0MyXzAKKyNkZWZpbmUgWkNSX0VMMgkJCVMzXzRfQzFfQzJfMAorCisvKiBaQ1JfRUwzIGRlZmluaXRpb25zICovCisjZGVmaW5lIFpDUl9FTDNfTEVOX01BU0sJVSgweGYpCisKKy8qIFpDUl9FTDIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWkNSX0VMMl9MRU5fTUFTSwlVKDB4ZikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERlZmluaXRpb25zIG9mIE1BSVIgZW5jb2RpbmdzIGZvciBkZXZpY2UgYW5kIG5vcm1hbCBtZW1vcnkKQEAgLTU1Myw0ICs2MjEsMzkgQEAKIAogI2RlZmluZSBNQUtFX01BSVJfTk9STUFMX01FTU9SWShpbm5lciwgb3V0ZXIpCSgoaW5uZXIpIHwgKChvdXRlcikgPDwgTUFJUl9OT1JNX09VVEVSX1NISUZUKSkKIAorLyogUEFSX0VMMSBmaWVsZHMgKi8KKyNkZWZpbmUgUEFSX0ZfU0hJRlQJMAorI2RlZmluZSBQQVJfRl9NQVNLCTEKKyNkZWZpbmUgUEFSX0FERFJfU0hJRlQJMTIKKyNkZWZpbmUgUEFSX0FERFJfTUFTSwkoQklUKDQwKSAtIDEpIC8qIDQwLWJpdHMtd2lkZSBwYWdlIGFkZHJlc3MgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zIGZvciBzeXN0ZW0gcmVnaXN0ZXIgaW50ZXJmYWNlIHRvIFNQRQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUE1CTElNSVRSX0VMMQkJUzNfMF9DOV9DMTBfMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMgZm9yIHN5c3RlbSByZWdpc3RlciBpbnRlcmZhY2UgdG8gQU1VIGZvciBBUk12OC40IG9ud2FyZHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEFNQ1JfRUwwCQlTM18zX0MxM19DMl8wCisjZGVmaW5lIEFNQ0ZHUl9FTDAJCVMzXzNfQzEzX0MyXzEKKyNkZWZpbmUgQU1DR0NSX0VMMAkJUzNfM19DMTNfQzJfMgorI2RlZmluZSBBTVVTRVJFTlJfRUwwCQlTM18zX0MxM19DMl8zCisjZGVmaW5lIEFNQ05URU5DTFIwX0VMMAkJUzNfM19DMTNfQzJfNAorI2RlZmluZSBBTUNOVEVOU0VUMF9FTDAJCVMzXzNfQzEzX0MyXzUKKyNkZWZpbmUgQU1DTlRFTkNMUjFfRUwwCQlTM18zX0MxM19DM18wCisjZGVmaW5lIEFNQ05URU5TRVQxX0VMMAkJUzNfM19DMTNfQzNfMQorCisvKiBBY3Rpdml0eSBNb25pdG9yIEdyb3VwIDAgRXZlbnQgQ291bnRlciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQU1FVkNOVFIwMF9FTDAJCVMzXzNfQzEzX0M0XzAKKyNkZWZpbmUgQU1FVkNOVFIwMV9FTDAJCVMzXzNfQzEzX0M0XzEKKyNkZWZpbmUgQU1FVkNOVFIwMl9FTDAJCVMzXzNfQzEzX0M0XzIKKyNkZWZpbmUgQU1FVkNOVFIwM19FTDAJCVMzXzNfQzEzX0M0XzMKKworLyogQWN0aXZpdHkgTW9uaXRvciBHcm91cCAwIEV2ZW50IFR5cGUgUmVnaXN0ZXJzICovCisjZGVmaW5lIEFNRVZUWVBFUjAwX0VMMAkJUzNfM19DMTNfQzZfMAorI2RlZmluZSBBTUVWVFlQRVIwMV9FTDAJCVMzXzNfQzEzX0M2XzEKKyNkZWZpbmUgQU1FVlRZUEVSMDJfRUwwCQlTM18zX0MxM19DNl8yCisjZGVmaW5lIEFNRVZUWVBFUjAzX0VMMAkJUzNfM19DMTNfQzZfMworCiAjZW5kaWYgLyogX19BUkNIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWIvYWFyY2g2NC9hcmNoX2hlbHBlcnMuaCBiL2luY2x1ZGUvbGliL2FhcmNoNjQvYXJjaF9oZWxwZXJzLmgKaW5kZXggMGQwZDdkMy4uODMxZGZiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWIvYWFyY2g2NC9hcmNoX2hlbHBlcnMuaAorKysgYi9pbmNsdWRlL2xpYi9hYXJjaDY0L2FyY2hfaGVscGVycy5oCkBAIC0zMSwxMSArMzEsOCBAQAogCV9fYXNtX18gdm9sYXRpbGUgKCJtc3IgIiAjX3JlZ19uYW1lICIsICUwIiA6IDogInIiICh2KSk7CVwKIH0KIAotI2RlZmluZSBfREVGSU5FX1NZU1JFR19XUklURV9DT05TVF9GVU5DKF9uYW1lLCBfcmVnX25hbWUpCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfICMjIF9uYW1lKGNvbnN0IHVpbnQ2NF90IHYpCQkJXAotewkJCQkJCQkJCVwKLQlfX2FzbV9fIHZvbGF0aWxlICgibXNyICIgI19yZWdfbmFtZSAiLCAlMCIgOiA6ICJpIiAodikpOwlcCi19CisjZGVmaW5lIFNZU1JFR19XUklURV9DT05TVChyZWdfbmFtZSwgdikJCQkJXAorCV9fYXNtX18gdm9sYXRpbGUgKCJtc3IgIiAjcmVnX25hbWUgIiwgJTAiIDogOiAiaSIgKHYpKQogCiAvKiBEZWZpbmUgcmVhZCBmdW5jdGlvbiBmb3Igc3lzdGVtIHJlZ2lzdGVyICovCiAjZGVmaW5lIERFRklORV9TWVNSRUdfUkVBRF9GVU5DKF9uYW1lKSAJCQlcCkBAIC01OSwxMSArNTYsNiBAQAogI2RlZmluZSBERUZJTkVfUkVOQU1FX1NZU1JFR19XUklURV9GVU5DKF9uYW1lLCBfcmVnX25hbWUpCVwKIAlfREVGSU5FX1NZU1JFR19XUklURV9GVU5DKF9uYW1lLCBfcmVnX25hbWUpCiAKLS8qIERlZmluZSB3cml0ZSBmdW5jdGlvbiBmb3Igc3BlY2lhbCBzeXN0ZW0gcmVnaXN0ZXJzICovCi0jZGVmaW5lIERFRklORV9TWVNSRUdfV1JJVEVfQ09OU1RfRlVOQyhfbmFtZSkJCVwKLQlfREVGSU5FX1NZU1JFR19XUklURV9DT05TVF9GVU5DKF9uYW1lLCBfbmFtZSkKLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTWFjcm9zIHRvIGNyZWF0ZSBpbmxpbmUgZnVuY3Rpb25zIGZvciBzeXN0ZW0gaW5zdHJ1Y3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTYzLDYgKzE1NSw3IEBACiBERUZJTkVfU1lTT1BfVFlQRV9QQVJBTV9GVU5DKGF0LCBzMTJlMXcpCiBERUZJTkVfU1lTT1BfVFlQRV9QQVJBTV9GVU5DKGF0LCBzMTJlMHIpCiBERUZJTkVfU1lTT1BfVFlQRV9QQVJBTV9GVU5DKGF0LCBzMTJlMHcpCitERUZJTkVfU1lTT1BfVFlQRV9QQVJBTV9GVU5DKGF0LCBzMWUycikKIAogdm9pZCBmbHVzaF9kY2FjaGVfcmFuZ2UodWludHB0cl90IGFkZHIsIHNpemVfdCBzaXplKTsKIHZvaWQgY2xlYW5fZGNhY2hlX3JhbmdlKHVpbnRwdHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSk7CkBAIC0xNzEsMTUgKzE2NCwxNyBAQAogdm9pZCBkY3N3X29wX2xvdWlzKHVfcmVnaXN0ZXJfdCBvcF90eXBlKTsKIHZvaWQgZGNzd19vcF9hbGwodV9yZWdpc3Rlcl90IG9wX3R5cGUpOwogCit2b2lkIGRpc2FibGVfbW11X2VsMSh2b2lkKTsKIHZvaWQgZGlzYWJsZV9tbXVfZWwzKHZvaWQpOwordm9pZCBkaXNhYmxlX21tdV9pY2FjaGVfZWwxKHZvaWQpOwogdm9pZCBkaXNhYmxlX21tdV9pY2FjaGVfZWwzKHZvaWQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTWlzYy4gYWNjZXNzb3IgcHJvdG90eXBlcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotREVGSU5FX1NZU1JFR19XUklURV9DT05TVF9GVU5DKGRhaWZzZXQpCi1ERUZJTkVfU1lTUkVHX1dSSVRFX0NPTlNUX0ZVTkMoZGFpZmNscikKKyNkZWZpbmUgd3JpdGVfZGFpZmNscih2YWwpIFNZU1JFR19XUklURV9DT05TVChkYWlmY2xyLCB2YWwpCisjZGVmaW5lIHdyaXRlX2RhaWZzZXQodmFsKSBTWVNSRUdfV1JJVEVfQ09OU1QoZGFpZnNldCwgdmFsKQogCiBERUZJTkVfU1lTUkVHX1JFQURfRlVOQyhwYXJfZWwxKQogREVGSU5FX1NZU1JFR19SRUFEX0ZVTkMoaWRfcGZyMV9lbDEpCkBAIC0yMDIsOCArMTk3LDEwIEBACiBERUZJTkVfU1lTT1BfVFlQRV9GVU5DKGRtYiwgc3QpCiBERUZJTkVfU1lTT1BfVFlQRV9GVU5DKGRtYiwgbGQpCiBERUZJTkVfU1lTT1BfVFlQRV9GVU5DKGRzYiwgaXNoKQorREVGSU5FX1NZU09QX1RZUEVfRlVOQyhkc2IsIG5zaCkKIERFRklORV9TWVNPUF9UWVBFX0ZVTkMoZHNiLCBpc2hzdCkKIERFRklORV9TWVNPUF9UWVBFX0ZVTkMoZG1iLCBpc2gpCitERUZJTkVfU1lTT1BfVFlQRV9GVU5DKGRtYiwgaXNoc3QpCiBERUZJTkVfU1lTT1BfRlVOQyhpc2IpCiAKIHVpbnQzMl90IGdldF9hZmZsdmxfc2hpZnQodWludDMyX3QpOwpAQCAtMzA1LDE0ICszMDIsMTYgQEAKIERFRklORV9TWVNSRUdfUkVBRF9GVU5DKGN0cl9lbDApCiAKIERFRklORV9TWVNSRUdfUldfRlVOQ1MobWRjcl9lbDIpCitERUZJTkVfU1lTUkVHX1JXX0ZVTkNTKG1kY3JfZWwzKQogREVGSU5FX1NZU1JFR19SV19GVU5DUyhoc3RyX2VsMikKIERFRklORV9TWVNSRUdfUldfRlVOQ1MoY250aHBfY3RsX2VsMikKLURFRklORV9TWVNSRUdfUkVBRF9GVU5DKHBtY3JfZWwwKQorREVGSU5FX1NZU1JFR19SV19GVU5DUyhwbWNyX2VsMCkKIAogREVGSU5FX1JFTkFNRV9TWVNSRUdfUldfRlVOQ1MoaWNjX3NyZV9lbDEsIElDQ19TUkVfRUwxKQogREVGSU5FX1JFTkFNRV9TWVNSRUdfUldfRlVOQ1MoaWNjX3NyZV9lbDIsIElDQ19TUkVfRUwyKQogREVGSU5FX1JFTkFNRV9TWVNSRUdfUldfRlVOQ1MoaWNjX3NyZV9lbDMsIElDQ19TUkVfRUwzKQogREVGSU5FX1JFTkFNRV9TWVNSRUdfUldfRlVOQ1MoaWNjX3Btcl9lbDEsIElDQ19QTVJfRUwxKQorREVGSU5FX1JFTkFNRV9TWVNSRUdfUkVBRF9GVU5DKGljY19ycHJfZWwxLCBJQ0NfUlBSX0VMMSkKIERFRklORV9SRU5BTUVfU1lTUkVHX1JXX0ZVTkNTKGljY19pZ3JwZW4xX2VsMywgSUNDX0lHUlBFTjFfRUwzKQogREVGSU5FX1JFTkFNRV9TWVNSRUdfUldfRlVOQ1MoaWNjX2lncnBlbjBfZWwxLCBJQ0NfSUdSUEVOMF9FTDEpCiBERUZJTkVfUkVOQU1FX1NZU1JFR19SRUFEX0ZVTkMoaWNjX2hwcGlyMF9lbDEsIElDQ19IUFBJUjBfRUwxKQpAQCAtMzIxLDcgKzMyMCwxNyBAQAogREVGSU5FX1JFTkFNRV9TWVNSRUdfUkVBRF9GVU5DKGljY19pYXIxX2VsMSwgSUNDX0lBUjFfRUwxKQogREVGSU5FX1JFTkFNRV9TWVNSRUdfV1JJVEVfRlVOQyhpY2NfZW9pcjBfZWwxLCBJQ0NfRU9JUjBfRUwxKQogREVGSU5FX1JFTkFNRV9TWVNSRUdfV1JJVEVfRlVOQyhpY2NfZW9pcjFfZWwxLCBJQ0NfRU9JUjFfRUwxKQorREVGSU5FX1JFTkFNRV9TWVNSRUdfV1JJVEVfRlVOQyhpY2Nfc2dpMHJfZWwxLCBJQ0NfU0dJMFJfRUwxKQogCitERUZJTkVfUkVOQU1FX1NZU1JFR19SV19GVU5DUyhhbWNudGVuY2xyMF9lbDAsIEFNQ05URU5DTFIwX0VMMCkKK0RFRklORV9SRU5BTUVfU1lTUkVHX1JXX0ZVTkNTKGFtY250ZW5zZXQwX2VsMCwgQU1DTlRFTlNFVDBfRUwwKQorREVGSU5FX1JFTkFNRV9TWVNSRUdfUldfRlVOQ1MoYW1jbnRlbmNscjFfZWwwLCBBTUNOVEVOQ0xSMV9FTDApCitERUZJTkVfUkVOQU1FX1NZU1JFR19SV19GVU5DUyhhbWNudGVuc2V0MV9lbDAsIEFNQ05URU5TRVQxX0VMMCkKKworREVGSU5FX1JFTkFNRV9TWVNSRUdfUldfRlVOQ1MocG1ibGltaXRyX2VsMSwgUE1CTElNSVRSX0VMMSkKKworREVGSU5FX1JFTkFNRV9TWVNSRUdfV1JJVEVfRlVOQyh6Y3JfZWwzLCBaQ1JfRUwzKQorREVGSU5FX1JFTkFNRV9TWVNSRUdfV1JJVEVfRlVOQyh6Y3JfZWwyLCBaQ1JfRUwyKQogCiAjZGVmaW5lIElTX0lOX0VMKHgpIFwKIAkoR0VUX0VMKHJlYWRfQ3VycmVudEVsKCkpID09IE1PREVfRUwjI3gpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2ExMi5oIGIvaW5jbHVkZS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hMTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDY4YTQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hMTIuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIF9fQ09SVEVYX0ExMl9IX18KKyNkZWZpbmUgX19DT1JURVhfQTEyX0hfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29ydGV4LUExMiBtaWRyIHdpdGggdmVyc2lvbi9yZXZpc2lvbiBzZXQgdG8gMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ09SVEVYX0ExMl9NSURSCQkJMHg0MTBGQzBDMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ1BVIEF1eGlsaWFyeSBDb250cm9sIHJlZ2lzdGVyIHNwZWNpZmljIGRlZmluaXRpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ09SVEVYX0ExMl9BQ1RMUl9TTVBfQklUCSgxIDw8IDYpCisKKyNlbmRpZiAvKiBfX0NPUlRFWF9BMTJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2ExNS5oIGIvaW5jbHVkZS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hMTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDVjMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hMTUuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIF9fQ09SVEVYX0ExNV9IX18KKyNkZWZpbmUgX19DT1JURVhfQTE1X0hfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29ydGV4LUExNSBtaWRyIHdpdGggdmVyc2lvbi9yZXZpc2lvbiBzZXQgdG8gMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ09SVEVYX0ExNV9NSURSCQkJMHg0MTBGQzBGMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ1BVIEF1eGlsaWFyeSBDb250cm9sIHJlZ2lzdGVyIHNwZWNpZmljIGRlZmluaXRpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ09SVEVYX0ExNV9BQ1RMUl9TTVBfQklUCSgxIDw8IDYpCisKKyNlbmRpZiAvKiBfX0NPUlRFWF9BMTVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2ExNy5oIGIvaW5jbHVkZS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hMTcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmNhOTFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hMTcuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIF9fQ09SVEVYX0ExN19IX18KKyNkZWZpbmUgX19DT1JURVhfQTE3X0hfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29ydGV4LUExNyBtaWRyIHdpdGggdmVyc2lvbi9yZXZpc2lvbiBzZXQgdG8gMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ09SVEVYX0ExN19NSURSCQkJMHg0MTBGQzBFMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ1BVIEF1eGlsaWFyeSBDb250cm9sIHJlZ2lzdGVyIHNwZWNpZmljIGRlZmluaXRpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ09SVEVYX0ExN19BQ1RMUl9TTVBfQklUCSgxIDw8IDYpCisKKyNlbmRpZiAvKiBfX0NPUlRFWF9BMTdfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E1LmggYi9pbmNsdWRlL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwYjdmZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGliL2NwdXMvYWFyY2gzMi9jb3J0ZXhfYTUuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIF9fQ09SVEVYX0E1X0hfXworI2RlZmluZSBfX0NPUlRFWF9BNV9IX18KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcnRleC1BOCBtaWRyIHdpdGggdmVyc2lvbi9yZXZpc2lvbiBzZXQgdG8gMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ09SVEVYX0E1X01JRFIJCQkweDQxMEZDMDUwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDUFUgQXV4aWxpYXJ5IENvbnRyb2wgcmVnaXN0ZXIgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDT1JURVhfQTVfQUNUTFJfU01QX0JJVAkJKDEgPDwgNikKKworI2VuZGlmIC8qIF9fQ09SVEVYX0E1X0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hNy5oIGIvaW5jbHVkZS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYjBkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E3LmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2lmbmRlZiBfX0NPUlRFWF9BN19IX18KKyNkZWZpbmUgX19DT1JURVhfQTdfSF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3J0ZXgtQTcgbWlkciB3aXRoIHZlcnNpb24vcmV2aXNpb24gc2V0IHRvIDAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENPUlRFWF9BN19NSURSCQkJMHg0MTBGQzA3MAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ1BVIEF1eGlsaWFyeSBDb250cm9sIHJlZ2lzdGVyIHNwZWNpZmljIGRlZmluaXRpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ09SVEVYX0E3X0FDVExSX1NNUF9CSVQJCSgxIDw8IDYpCisKKyNlbmRpZiAvKiBfX0NPUlRFWF9BN19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliL2NwdXMvYWFyY2gzMi9jb3J0ZXhfYTkuaCBiL2luY2x1ZGUvbGliL2NwdXMvYWFyY2gzMi9jb3J0ZXhfYTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTg1ZjliCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hOS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpZm5kZWYgX19DT1JURVhfQTlfSF9fCisjZGVmaW5lIF9fQ09SVEVYX0E5X0hfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29ydGV4LUE5IG1pZHIgd2l0aCB2ZXJzaW9uL3JldmlzaW9uIHNldCB0byAwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDT1JURVhfQTlfTUlEUgkJCTB4NDEwRkMwOTAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENQVSBBdXhpbGlhcnkgQ29udHJvbCByZWdpc3RlciBzcGVjaWZpYyBkZWZpbml0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENPUlRFWF9BOV9BQ1RMUl9TTVBfQklUCQkoMSA8PCA2KQorI2RlZmluZSBDT1JURVhfQTlfQUNUTFJfRkxaV19CSVQJKDEgPDwgMykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENQVSBQb3dlciBDb250cm9sIFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQQ1IJCXAxNSwgMCwgYzE1LCBjMCwgMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFyY2hfaGVscGVycy5oPgorREVGSU5FX0NPUFJPQ1JfUldfRlVOQ1MocGNyLCBQQ1IpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09SVEVYX0E5X0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWIvY3B1cy9hYXJjaDY0L2NvcnRleF9hNzUuaCBiL2luY2x1ZGUvbGliL2NwdXMvYWFyY2g2NC9jb3J0ZXhfYTc1LmgKaW5kZXggMWZmZTIwYi4uZDY4Yzk1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWIvY3B1cy9hYXJjaDY0L2NvcnRleF9hNzUuaAorKysgYi9pbmNsdWRlL2xpYi9jcHVzL2FhcmNoNjQvY29ydGV4X2E3NS5oCkBAIC0xOSw0ICsxOSwzOCBAQAogLyogRGVmaW5pdGlvbnMgb2YgcmVnaXN0ZXIgZmllbGQgbWFzayBpbiBDT1JURVhfQTc1X0NQVVBXUkNUTFJfRUwxICovCiAjZGVmaW5lIENPUlRFWF9BNzVfQ09SRV9QV1JETl9FTl9NQVNLCTB4MQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ1BVIEFjdGl2aXR5IE1vbml0b3IgVW5pdCByZWdpc3RlciBzcGVjaWZpYyBkZWZpbml0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENQVUFNQ05URU5DTFJfRUwwCVMzXzNfQzE1X0M5XzcKKyNkZWZpbmUgQ1BVQU1DTlRFTlNFVF9FTDAJUzNfM19DMTVfQzlfNgorI2RlZmluZSBDUFVBTUNGR1JfRUwwCQlTM18zX0MxNV9DMTBfNgorI2RlZmluZSBDUFVBTVVTRVJFTlJfRUwwCVMzXzNfQzE1X0MxMF83CisKKy8qIEFjdGl2aXR5IE1vbml0b3IgRXZlbnQgQ291bnRlciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ1BVQU1FVkNOVFIwX0VMMAlTM18zX0MxNV9DOV8wCisjZGVmaW5lIENQVUFNRVZDTlRSMV9FTDAJUzNfM19DMTVfQzlfMQorI2RlZmluZSBDUFVBTUVWQ05UUjJfRUwwCVMzXzNfQzE1X0M5XzIKKyNkZWZpbmUgQ1BVQU1FVkNOVFIzX0VMMAlTM18zX0MxNV9DOV8zCisjZGVmaW5lIENQVUFNRVZDTlRSNF9FTDAJUzNfM19DMTVfQzlfNAorCisvKiBBY3Rpdml0eSBNb25pdG9yIEV2ZW50IFR5cGUgUmVnaXN0ZXJzICovCisjZGVmaW5lIENQVUFNRVZUWVBFUjBfRUwwCVMzXzNfQzE1X0MxMF8wCisjZGVmaW5lIENQVUFNRVZUWVBFUjFfRUwwCVMzXzNfQzE1X0MxMF8xCisjZGVmaW5lIENQVUFNRVZUWVBFUjJfRUwwCVMzXzNfQzE1X0MxMF8yCisjZGVmaW5lIENQVUFNRVZUWVBFUjNfRUwwCVMzXzNfQzE1X0MxMF8zCisjZGVmaW5lIENQVUFNRVZUWVBFUjRfRUwwCVMzXzNfQzE1X0MxMF80CisKKyNkZWZpbmUgQ09SVEVYX0E3NV9BQ1RMUl9BTUVOX0JJVAkoVSgxKSA8PCA0KQorCisvKgorICogVGhlIENvcnRleC1BNzUgY29yZSBpbXBsZW1lbnRzIGZpdmUgY291bnRlcnMsIDAtNC4gRXZlbnRzIDAsIDEsIDIsIGFyZQorICogZml4ZWQgYW5kIGFyZSBlbmFibGVkIChHcm91cCAwKS4gRXZlbnRzIDMgYW5kIDQgKEdyb3VwIDEpIGFyZQorICogcHJvZ3JhbW1hYmxlIGJ5IHByb2dyYW1taW5nIHRoZSBhcHByb3ByaWF0ZSBFdmVudCBjb3VudCBiaXRzIGluCisgKiBDUFVBTUVWVFlQRVI8bj4gcmVnaXN0ZXIgYW5kIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiBQbGF0Zm9ybXMgbWF5CisgKiBlbmFibGUgdGhpcyB3aXRoIHN1aXRhYmxlIHByb2dyYW1taW5nLgorICovCisjZGVmaW5lIENPUlRFWF9BNzVfQU1VX0dST1VQMF9NQVNLCTB4NworI2RlZmluZSBDT1JURVhfQTc1X0FNVV9HUk9VUDFfTUFTSwkoMCA8PCAzKQorCiAjZW5kaWYgLyogX19DT1JURVhfQTc1X0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWIvZWwzX3J1bnRpbWUvYWFyY2g2NC9jb250ZXh0LmggYi9pbmNsdWRlL2xpYi9lbDNfcnVudGltZS9hYXJjaDY0L2NvbnRleHQuaAppbmRleCBkY2JmMWM5Li41ODg5OTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYi9lbDNfcnVudGltZS9hYXJjaDY0L2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2xpYi9lbDNfcnVudGltZS9hYXJjaDY0L2NvbnRleHQuaApAQCAtODcsMjIgKzg3LDIyIEBACiAjZGVmaW5lIENUWF9BRlNSMV9FTDEJCVUoMHg5OCkKICNkZWZpbmUgQ1RYX0NPTlRFWFRJRFJfRUwxCVUoMHhhMCkKICNkZWZpbmUgQ1RYX1ZCQVJfRUwxCQlVKDB4YTgpCisjZGVmaW5lIENUWF9QTUNSX0VMMAkJVSgweGIwKQogCiAvKgogICogSWYgdGhlIHBsYXRmb3JtIGlzIEFBcmNoNjQtb25seSwgdGhlcmUgaXMgbm8gbmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIHRoZXNlCiAgKiBBQXJjaDMyIHJlZ2lzdGVycy4KICAqLwogI2lmIENUWF9JTkNMVURFX0FBUkNIMzJfUkVHUwotI2RlZmluZSBDVFhfU1BTUl9BQlQJCVUoMHhiMCkKLSNkZWZpbmUgQ1RYX1NQU1JfVU5ECQlVKDB4YjgpCi0jZGVmaW5lIENUWF9TUFNSX0lSUQkJVSgweGMwKQotI2RlZmluZSBDVFhfU1BTUl9GSVEJCVUoMHhjOCkKLSNkZWZpbmUgQ1RYX0RBQ1IzMl9FTDIJCVUoMHhkMCkKLSNkZWZpbmUgQ1RYX0lGU1IzMl9FTDIJCVUoMHhkOCkKLSNkZWZpbmUgQ1RYX0ZQX0ZQRVhDMzJfRUwyCVUoMHhlMCkKLSNkZWZpbmUgQ1RYX1RJTUVSX1NZU1JFR1NfT0ZGCQlVKDB4ZjApIC8qIEFsaWduIHRvIHRoZSBuZXh0IDE2IGJ5dGUgYm91bmRhcnkgKi8KKyNkZWZpbmUgQ1RYX1NQU1JfQUJUCQlVKDB4YzApICAvKiBBbGlnbiB0byB0aGUgbmV4dCAxNiBieXRlIGJvdW5kYXJ5ICovCisjZGVmaW5lIENUWF9TUFNSX1VORAkJVSgweGM4KQorI2RlZmluZSBDVFhfU1BTUl9JUlEJCVUoMHhkMCkKKyNkZWZpbmUgQ1RYX1NQU1JfRklRCQlVKDB4ZDgpCisjZGVmaW5lIENUWF9EQUNSMzJfRUwyCQlVKDB4ZTApCisjZGVmaW5lIENUWF9JRlNSMzJfRUwyCQlVKDB4ZTgpCisjZGVmaW5lIENUWF9USU1FUl9TWVNSRUdTX09GRglVKDB4ZjApIC8qIEFsaWduIHRvIHRoZSBuZXh0IDE2IGJ5dGUgYm91bmRhcnkgKi8KICNlbHNlCi0jZGVmaW5lIENUWF9USU1FUl9TWVNSRUdTX09GRgkJVSgweGIwKQorI2RlZmluZSBDVFhfVElNRVJfU1lTUkVHU19PRkYJVSgweGMwKSAgLyogQWxpZ24gdG8gdGhlIG5leHQgMTYgYnl0ZSBib3VuZGFyeSAqLwogI2VuZGlmIC8qIF9fQ1RYX0lOQ0xVREVfQUFSQ0gzMl9SRUdTX18gKi8KIAogLyoKQEAgLTE2MCw3ICsxNjAsMTIgQEAKICNkZWZpbmUgQ1RYX0ZQX1EzMQkJVSgweDFmMCkKICNkZWZpbmUgQ1RYX0ZQX0ZQU1IJCVUoMHgyMDApCiAjZGVmaW5lIENUWF9GUF9GUENSCQlVKDB4MjA4KQotI2RlZmluZSBDVFhfRlBSRUdTX0VORAkJVSgweDIxMCkKKyNpZiBDVFhfSU5DTFVERV9BQVJDSDMyX1JFR1MKKyNkZWZpbmUgQ1RYX0ZQX0ZQRVhDMzJfRUwyCVUoMHgyMTApCisjZGVmaW5lIENUWF9GUFJFR1NfRU5ECQlVKDB4MjIwKSAvKiBBbGlnbiB0byB0aGUgbmV4dCAxNiBieXRlIGJvdW5kYXJ5ICovCisjZWxzZQorI2RlZmluZSBDVFhfRlBSRUdTX0VORAkJVSgweDIxMCkgLyogQWxpZ24gdG8gdGhlIG5leHQgMTYgYnl0ZSBib3VuZGFyeSAqLworI2VuZGlmCiAjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KQEAgLTMwOCw3ICszMTMsNiBAQAogICogRnVuY3Rpb24gcHJvdG90eXBlcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgZWwxX3N5c3JlZ3NfY29udGV4dF9zYXZlKGVsMV9zeXNfcmVnc190ICpyZWdzKTsKLXZvaWQgZWwxX3N5c3JlZ3NfY29udGV4dF9zYXZlX3Bvc3Rfb3BzKHZvaWQpOwogdm9pZCBlbDFfc3lzcmVnc19jb250ZXh0X3Jlc3RvcmUoZWwxX3N5c19yZWdzX3QgKnJlZ3MpOwogI2lmIENUWF9JTkNMVURFX0ZQUkVHUwogdm9pZCBmcHJlZ3NfY29udGV4dF9zYXZlKGZwX3JlZ3NfdCAqcmVncyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYi9lbDNfcnVudGltZS9jcHVfZGF0YS5oIGIvaW5jbHVkZS9saWIvZWwzX3J1bnRpbWUvY3B1X2RhdGEuaAppbmRleCBjMGMzYTE5Li4zZjQ4ZGU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYi9lbDNfcnVudGltZS9jcHVfZGF0YS5oCisrKyBiL2luY2x1ZGUvbGliL2VsM19ydW50aW1lL2NwdV9kYXRhLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgKi8KQEAgLTcsNiArNyw3IEBACiAjaWZuZGVmIF9fQ1BVX0RBVEFfSF9fCiAjZGVmaW5lIF9fQ1BVX0RBVEFfSF9fCiAKKyNpbmNsdWRlIDxlaGYuaD4KICNpbmNsdWRlIDxwbGF0Zm9ybV9kZWYuaD4JLyogQ0FDSEVfV1JJVEVCQUNLX0dSQU5VTEUgcmVxdWlyZWQgKi8KIAogI2lmZGVmIEFBUkNIMzIKQEAgLTk2LDYgKzk3LDkgQEAKICNpZiBQTEFUX1BDUFVfREFUQV9TSVpFCiAJdWludDhfdCBwbGF0Zm9ybV9jcHVfZGF0YVtQTEFUX1BDUFVfREFUQV9TSVpFXTsKICNlbmRpZgorI2lmIGRlZmluZWQoSU1BR0VfQkwzMSkgJiYgRUwzX0VYQ0VQVElPTl9IQU5ETElORworCXBlX2V4Y19kYXRhX3QgZWhmX2RhdGE7CisjZW5kaWYKIH0gX19hbGlnbmVkKENBQ0hFX1dSSVRFQkFDS19HUkFOVUxFKSBjcHVfZGF0YV90OwogCiAjaWYgQ1JBU0hfUkVQT1JUSU5HCkBAIC0xNDEsMTcgKzE0NSwxNyBAQAogI2RlZmluZSBzZXRfY3B1X2RhdGEoX20sIF92KQkJICAgX2NwdV9kYXRhKCktPl9tID0gX3YKICNkZWZpbmUgZ2V0X2NwdV9kYXRhX2J5X2luZGV4KF9peCwgX20pCSAgIF9jcHVfZGF0YV9ieV9pbmRleChfaXgpLT5fbQogI2RlZmluZSBzZXRfY3B1X2RhdGFfYnlfaW5kZXgoX2l4LCBfbSwgX3YpIF9jcHVfZGF0YV9ieV9pbmRleChfaXgpLT5fbSA9IF92Ci0KKy8qICgoY3B1X2RhdGFfdCAqKTApLT5fbSBpcyBhIGR1bW15IHRvIGdldCB0aGUgc2l6ZW9mIHRoZSBzdHJ1Y3QgbWVtYmVyIF9tICovCiAjZGVmaW5lIGZsdXNoX2NwdV9kYXRhKF9tKQkgICBmbHVzaF9kY2FjaGVfcmFuZ2UoKHVpbnRwdHJfdCkJICBcCi0JCQkJCQkgICAgICAmKF9jcHVfZGF0YSgpLT5fbSksIFwKLQkJCQkJCSAgICAgIHNpemVvZihfY3B1X2RhdGEoKS0+X20pKQorCQkJCQkJJihfY3B1X2RhdGEoKS0+X20pLCBcCisJCQkJCQlzaXplb2YoKChjcHVfZGF0YV90ICopMCktPl9tKSkKICNkZWZpbmUgaW52X2NwdV9kYXRhKF9tKQkgICBpbnZfZGNhY2hlX3JhbmdlKCh1aW50cHRyX3QpCSAgCSAgXAotCQkJCQkJICAgICAgJihfY3B1X2RhdGEoKS0+X20pLCBcCi0JCQkJCQkgICAgICBzaXplb2YoX2NwdV9kYXRhKCktPl9tKSkKKwkJCQkJCSYoX2NwdV9kYXRhKCktPl9tKSwgXAorCQkJCQkJc2l6ZW9mKCgoY3B1X2RhdGFfdCAqKTApLT5fbSkpCiAjZGVmaW5lIGZsdXNoX2NwdV9kYXRhX2J5X2luZGV4KF9peCwgX20pCVwKIAkJCQkgICBmbHVzaF9kY2FjaGVfcmFuZ2UoKHVpbnRwdHJfdCkJICBcCiAJCQkJCSAmKF9jcHVfZGF0YV9ieV9pbmRleChfaXgpLT5fbSksICBcCi0JCQkJCSBzaXplb2YoX2NwdV9kYXRhX2J5X2luZGV4KF9peCktPl9tKSkKKwkJCQkJCXNpemVvZigoKGNwdV9kYXRhX3QgKikwKS0+X20pKQogCiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliL2VsM19ydW50aW1lL3B1YnN1Yi5oIGIvaW5jbHVkZS9saWIvZWwzX3J1bnRpbWUvcHVic3ViLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4NTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGliL2VsM19ydW50aW1lL3B1YnN1Yi5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpZm5kZWYgX19QVUJTVUJfSF9fCisjZGVmaW5lIF9fUFVCU1VCX0hfXworCisjZGVmaW5lIF9fcHVic3ViX3N0YXJ0X3N5bShldmVudCkJX19wdWJzdWJfIyNldmVudCMjX3N0YXJ0CisjZGVmaW5lIF9fcHVic3ViX2VuZF9zeW0oZXZlbnQpCQlfX3B1YnN1Yl8jI2V2ZW50IyNfZW5kCisKKyNpZmRlZiBfX0xJTktFUl9fCisKKy8qIEZvciB0aGUgbGlua2VyIC4uLiAqLworCisjZGVmaW5lIF9fcHVic3ViX3NlY3Rpb24oZXZlbnQpCQlfX3B1YnN1Yl8jI2V2ZW50CisKKy8qCisgKiBSRUdJU1RFUl9QVUJTVUJfRVZFTlQgaGFzIGEgZGlmZmVyZW50IGRlZmluaXRpb24gYmV0d2VlbiBsaW5rZXIgYW5kIGNvbXBpbGVyCisgKiBjb250ZXh0cy4gSW4gbGlua2VyIGNvbnRleHQsIHRoaXMgY29sbGVjdHMgcHVic3ViIHNlY3Rpb25zIGZvciBlYWNoIGV2ZW50LAorICogcGxhY2luZyBndWFyZCBzeW1ib2xzIGFyb3VuZCBlYWNoLgorICovCisjZGVmaW5lIFJFR0lTVEVSX1BVQlNVQl9FVkVOVChldmVudCkgXAorCV9fcHVic3ViX3N0YXJ0X3N5bShldmVudCkgPSAuOyBcCisJS0VFUCgqKF9fcHVic3ViX3NlY3Rpb24oZXZlbnQpKSk7IFwKKwlfX3B1YnN1Yl9lbmRfc3ltKGV2ZW50KSA9IC4KKworI2Vsc2UgLyogX19MSU5LRVJfXyAqLworCisvKiBGb3IgdGhlIGNvbXBpbGVyIC4uLiAqLworCisjaW5jbHVkZSA8YXJjaF9oZWxwZXJzLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y2RlZnMuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2RlZmluZSBfX3B1YnN1Yl9zZWN0aW9uKGV2ZW50KQkJX19zZWN0aW9uKCJfX3B1YnN1Yl8iICNldmVudCkKKworLyoKKyAqIEluIGNvbXBpbGVyIGNvbnRleHQsIFJFR0lTVEVSX1BVQlNVQl9FVkVOVCBkZWNsYXJlcyB0aGUgcGVyLWV2ZW50IHN5bWJvbHMKKyAqIGV4cG9ydGVkIGJ5IHRoZSBsaW5rZXIgcmVxdWlyZWQgZm9yIHRoZSBvdGhlciBwdWJzdWIgbWFjcm9zIHRvIHdvcmsuCisgKi8KKyNkZWZpbmUgUkVHSVNURVJfUFVCU1VCX0VWRU5UKGV2ZW50KSBcCisJZXh0ZXJuIHB1YnN1Yl9jYl90IF9fcHVic3ViX3N0YXJ0X3N5bShldmVudClbXTsgXAorCWV4dGVybiBwdWJzdWJfY2JfdCBfX3B1YnN1Yl9lbmRfc3ltKGV2ZW50KVtdCisKKy8qCisgKiBIYXZlIHRoZSBmdW5jdGlvbiBmdW5jIGNhbGxlZCBiYWNrIHdoZW4gdGhlIHNwZWNpZmllZCBldmVudCBoYXBwZW5zLiBUaGlzCisgKiBtYWNybyBwbGFjZXMgdGhlIGZ1bmN0aW9uIGFkZHJlc3MgaW50byB0aGUgcHVic3ViIHNlY3Rpb24sIHdoaWNoIGlzIHBpY2tlZCB1cAorICogYW5kIGludm9rZWQgYnkgdGhlIGludm9rZV9wdWJzdWJzKCkgZnVuY3Rpb24gdmlhLiB0aGUgUFVCTElTSF9FVkVOVCogbWFjcm9zLgorICovCisjZGVmaW5lIFNVQlNDUklCRV9UT19FVkVOVChldmVudCwgZnVuYykgXAorCXB1YnN1Yl9jYl90IF9fY2JfZnVuY18jI2Z1bmMjI2V2ZW50IF9fcHVic3ViX3NlY3Rpb24oZXZlbnQpID0gZnVuYworCisvKgorICogSXRlcmF0ZSBvdmVyIHN1YnNjcmliZWQgaGFuZGxlcnMgZm9yIGEgZGVmaW5lZCBldmVudC4gJ2V2ZW50JyBpcyB0aGUgbmFtZSBvZgorICogdGhlIGV2ZW50LCBhbmQgJ3N1YnNjcmliZXInIGEgbG9jYWwgdmFyaWFibGUgb2YgdHlwZSAncHVic3ViX2NiX3QgKicuCisgKi8KKyNkZWZpbmUgZm9yX2VhY2hfc3Vic2NyaWJlcihldmVudCwgc3Vic2NyaWJlcikgXAorCWZvciAoc3Vic2NyaWJlciA9IF9fcHVic3ViX3N0YXJ0X3N5bShldmVudCk7IFwKKwkJCXN1YnNjcmliZXIgPCBfX3B1YnN1Yl9lbmRfc3ltKGV2ZW50KTsgXAorCQkJc3Vic2NyaWJlcisrKQorCisvKgorICogUHVibGlzaCBhIGRlZmluZWQgZXZlbnQgc3VwcGx5aW5nIGFuIGFyZ3VtZW50LiBBbGwgc3Vic2NyaWJlZCBoYW5kbGVycyBhcmUKKyAqIGludm9rZWQsIGJ1dCB0aGUgcmV0dXJuIHZhbHVlIG9mIGhhbmRsZXJzIGFyZSBpZ25vcmVkIGZvciBub3cuCisgKi8KKyNkZWZpbmUgUFVCTElTSF9FVkVOVF9BUkcoZXZlbnQsIGFyZykgXAorCWRvIHsgXAorCQlwdWJzdWJfY2JfdCAqc3Vic2NyaWJlcjsgXAorCQlmb3JfZWFjaF9zdWJzY3JpYmVyKGV2ZW50LCBzdWJzY3JpYmVyKSB7IFwKKwkJCSgqc3Vic2NyaWJlcikoYXJnKTsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisvKiBQdWJsaXNoIGEgZGVmaW5lZCBldmVudCB3aXRoIE5VTEwgYXJndW1lbnQgKi8KKyNkZWZpbmUgUFVCTElTSF9FVkVOVChldmVudCkJUFVCTElTSF9FVkVOVF9BUkcoZXZlbnQsIE5VTEwpCisKKy8qIFN1YnNjcmliZXIgY2FsbGJhY2sgdHlwZSAqLwordHlwZWRlZiB2b2lkKiAoKnB1YnN1Yl9jYl90KShjb25zdCB2b2lkICphcmcpOworCisjZW5kaWYJLyogX19MSU5LRVJfXyAqLworI2VuZGlmCS8qIF9fUFVCU1VCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWIvZWwzX3J1bnRpbWUvcHVic3ViX2V2ZW50cy5oIGIvaW5jbHVkZS9saWIvZWwzX3J1bnRpbWUvcHVic3ViX2V2ZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZmVkYjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpYi9lbDNfcnVudGltZS9wdWJzdWJfZXZlbnRzLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPHB1YnN1Yi5oPgorCisvKgorICogVGhpcyBmaWxlIGRlZmluZXMgYSBsaXN0IG9mIHB1YnN1YiBldmVudHMsIGRlY2xhcmVkIHVzaW5nCisgKiBSRUdJU1RFUl9QVUJTVUJfRVZFTlQoKSBtYWNyby4KKyAqLworCisvKgorICogRXZlbnQgcHVibGlzaGVkIGFmdGVyIGEgQ1BVIGhhcyBiZWVuIHBvd2VyZWQgdXAgYW5kIGZpbmlzaGVkIGl0cworICogaW5pdGlhbGl6YXRpb24uCisgKi8KK1JFR0lTVEVSX1BVQlNVQl9FVkVOVChwc2NpX2NwdV9vbl9maW5pc2gpOworCisjaWZkZWYgQUFSQ0g2NAorLyoKKyAqIFRoZXNlIGV2ZW50cyBhcmUgcHVibGlzaGVkIGJ5IHRoZSBBQXJjaDY0IGNvbnRleHQgbWFuYWdlbWVudCBmcmFtZXdvcmsKKyAqIGFmdGVyIHRoZSBzZWN1cmUgY29udGV4dCBpcyByZXN0b3JlZC9zYXZlZCB2aWEKKyAqIGNtX2VsMV9zeXNyZWdzX2NvbnRleHRfe3Jlc3RvcmUsc2F2ZX0oKSBBUEkuCisgKi8KK1JFR0lTVEVSX1BVQlNVQl9FVkVOVChjbV9lbnRlcmluZ19zZWN1cmVfd29ybGQpOworUkVHSVNURVJfUFVCU1VCX0VWRU5UKGNtX2V4aXRlZF9zZWN1cmVfd29ybGQpOworCisvKgorICogVGhlc2UgZXZlbnRzIGFyZSBwdWJsaXNoZWQgYnkgdGhlIEFBcmNoNjQgY29udGV4dCBtYW5hZ2VtZW50IGZyYW1ld29yaworICogYWZ0ZXIgdGhlIG5vcm1hbCBjb250ZXh0IGlzIHJlc3RvcmVkL3NhdmVkIHZpYQorICogY21fZWwxX3N5c3JlZ3NfY29udGV4dF97cmVzdG9yZSxzYXZlfSgpIEFQSS4KKyAqLworUkVHSVNURVJfUFVCU1VCX0VWRU5UKGNtX2VudGVyaW5nX25vcm1hbF93b3JsZCk7CitSRUdJU1RFUl9QVUJTVUJfRVZFTlQoY21fZXhpdGVkX25vcm1hbF93b3JsZCk7CisjZW5kaWYgLyogQUFSQ0g2NCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWIvZXh0ZW5zaW9ucy9hbXUuaCBiL2luY2x1ZGUvbGliL2V4dGVuc2lvbnMvYW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlZmU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGliL2V4dGVuc2lvbnMvYW11LmgKQEAgLTAsMCArMSwxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2lmbmRlZiBfX0FNVV9IX18KKyNkZWZpbmUgX19BTVVfSF9fCisKKy8qIEVuYWJsZSBhbGwgZ3JvdXAgMCBjb3VudGVycyAqLworI2RlZmluZSBBTVVfR1JPVVAwX0NPVU5URVJTX01BU0sJMHhmCisKK3ZvaWQgYW11X2VuYWJsZShpbnQgZWwyX3VudXNlZCk7CisKKyNlbmRpZiAvKiBfX0FNVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliL2V4dGVuc2lvbnMvc3BlLmggYi9pbmNsdWRlL2xpYi9leHRlbnNpb25zL3NwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzQxMjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpYi9leHRlbnNpb25zL3NwZS5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpZm5kZWYgX19TUEVfSF9fCisjZGVmaW5lIF9fU1BFX0hfXworCit2b2lkIHNwZV9lbmFibGUoaW50IGVsMl91bnVzZWQpOwordm9pZCBzcGVfZGlzYWJsZSh2b2lkKTsKKworI2VuZGlmIC8qIF9fU1BFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWIvZXh0ZW5zaW9ucy9zdmUuaCBiL2luY2x1ZGUvbGliL2V4dGVuc2lvbnMvc3ZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5MjNlMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGliL2V4dGVuc2lvbnMvc3ZlLmgKQEAgLTAsMCArMSwxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2lmbmRlZiBfX1NWRV9IX18KKyNkZWZpbmUgX19TVkVfSF9fCisKK3ZvaWQgc3ZlX2VuYWJsZShpbnQgZWwyX3VudXNlZCk7CisKKyNlbmRpZiAvKiBfX1NWRV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliL3BzY2kvcHNjaS5oIGIvaW5jbHVkZS9saWIvcHNjaS9wc2NpLmgKaW5kZXggMGVkMzljOS4uMDY0MzRmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWIvcHNjaS9wc2NpLmgKKysrIGIvaW5jbHVkZS9saWIvcHNjaS9wc2NpLmgKQEAgLTY1LDYgKzY1LDExIEBACiAjZGVmaW5lIFBTQ0lfU1RBVF9SRVNJREVOQ1lfQUFSQ0g2NAlVKDB4YzQwMDAwMTApCiAjZGVmaW5lIFBTQ0lfU1RBVF9DT1VOVF9BQVJDSDMyCQlVKDB4ODQwMDAwMTEpCiAjZGVmaW5lIFBTQ0lfU1RBVF9DT1VOVF9BQVJDSDY0CQlVKDB4YzQwMDAwMTEpCisjZGVmaW5lIFBTQ0lfU1lTVEVNX1JFU0VUMl9BQVJDSDMyCVUoMHg4NDAwMDAxMikKKyNkZWZpbmUgUFNDSV9TWVNURU1fUkVTRVQyX0FBUkNINjQJVSgweGM0MDAwMDEyKQorI2RlZmluZSBQU0NJX01FTV9QUk9URUNUCQlVKDB4ODQwMDAwMTMpCisjZGVmaW5lIFBTQ0lfTUVNX0NIS19SQU5HRV9BQVJDSDMyCVUoMHg4NDAwMDAxNCkKKyNkZWZpbmUgUFNDSV9NRU1fQ0hLX1JBTkdFX0FBUkNINjQJVSgweGM0MDAwMDE0KQogCiAvKiBNYWNybyB0byBoZWxwIGJ1aWxkIHRoZSBwc2NpIGNhcGFiaWxpdGllcyBiaXRmaWVsZCAqLwogI2RlZmluZSBkZWZpbmVfcHNjaV9jYXAoeCkJCShVKDEpIDw8ICh4ICYgVSgweDFmKSkpCkBAIC0xNDYsNyArMTUxLDcgQEAKICAqIFBTQ0kgdmVyc2lvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgUFNDSV9NQUpPUl9WRVIJCShVKDEpIDw8IDE2KQotI2RlZmluZSBQU0NJX01JTk9SX1ZFUgkJVSgweDApCisjZGVmaW5lIFBTQ0lfTUlOT1JfVkVSCQlVKDB4MSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFBTQ0kgZXJyb3IgY29kZXMKQEAgLTE2NCw2ICsxNjksMTQgQEAKIAogI2RlZmluZSBQU0NJX0lOVkFMSURfTVBJRFIJfigodV9yZWdpc3Rlcl90KTApCiAKKy8qCisgKiBTWVNURU1fUkVTRVQyIG1hY3JvcworICovCisjZGVmaW5lIFBTQ0lfUkVTRVQyX1RZUEVfVkVORE9SX1NISUZUCTMxCisjZGVmaW5lIFBTQ0lfUkVTRVQyX1RZUEVfVkVORE9SCQkoMVUgPDwgUFNDSV9SRVNFVDJfVFlQRV9WRU5ET1JfU0hJRlQpCisjZGVmaW5lIFBTQ0lfUkVTRVQyX1RZUEVfQVJDSAkJKDBVIDw8IFBTQ0lfUkVTRVQyX1RZUEVfVkVORE9SX1NISUZUKQorI2RlZmluZSBQU0NJX1JFU0VUMl9TWVNURU1fV0FSTV9SRVNFVAkoUFNDSV9SRVNFVDJfVFlQRV9BUkNIIHwgMCkKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2luY2x1ZGUgPHN0ZGludC5oPgpAQCAtMjg4LDYgKzMwMSwxMSBAQAogCQkJCSAgICB1bnNpZ25lZCBpbnQgcG93ZXJfc3RhdGUsCiAJCQkJICAgIHBzY2lfcG93ZXJfc3RhdGVfdCAqb3V0cHV0X3N0YXRlKTsKIAlpbnQgKCpnZXRfbm9kZV9od19zdGF0ZSkodV9yZWdpc3Rlcl90IG1waWRyLCB1bnNpZ25lZCBpbnQgcG93ZXJfbGV2ZWwpOworCWludCAoKm1lbV9wcm90ZWN0X2NoaykodWludHB0cl90IGJhc2UsIHVfcmVnaXN0ZXJfdCBsZW5ndGgpOworCWludCAoKnJlYWRfbWVtX3Byb3RlY3QpKGludCAqdmFsKTsKKwlpbnQgKCp3cml0ZV9tZW1fcHJvdGVjdCkoaW50IHZhbCk7CisJaW50ICgqc3lzdGVtX3Jlc2V0MikoaW50IGlzX3ZlbmRvciwKKwkJCQlpbnQgcmVzZXRfdHlwZSwgdV9yZWdpc3Rlcl90IGNvb2tpZSk7CiB9IHBsYXRfcHNjaV9vcHNfdDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliL3V0aWxzLmggYi9pbmNsdWRlL2xpYi91dGlscy5oCmluZGV4IGI3NTgxM2YuLmNmYzgzMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGliL3V0aWxzLmgKKysrIGIvaW5jbHVkZS9saWIvdXRpbHMuaApAQCAtMTksNiArMTksMjUgQEAKIAogI2luY2x1ZGUgPHR5cGVzLmg+CiAKK3R5cGVkZWYgc3RydWN0IG1lbV9yZWdpb25fdCB7CisJdWludHB0cl90IGJhc2U7CisJc2l6ZV90IG5ieXRlczsKK30gbWVtX3JlZ2lvbl90OworCisvKgorICogemVyb19ub3JtYWxtZW0gYWxsIHRoZSByZWdpb25zIGRlZmluZWQgaW4gdGJsLgorICovCit2b2lkIGNsZWFyX21lbV9yZWdpb25zKG1lbV9yZWdpb25fdCAqdGJsLCBzaXplX3QgbnJlZ2lvbnMpOworCisKKy8qCisgKiBjaGVja3MgdGhhdCBhIHJlZ2lvbiAoYWRkciArIG5ieXRlcy0xKSBvZiBtZW1vcnkgaXMgdG90YWxseSBjb3ZlcmVkIGJ5CisgKiBvbmUgb2YgdGhlIHJlZ2lvbnMgZGVmaW5lZCBpbiB0YmwuIENhbGxlciBtdXN0IGVuc3VyZSB0aGF0IChhZGRyK25ieXRlcy0xKQorICogZG9lc24ndCBvdmVyZmxvdy4KKyAqLworaW50IG1lbV9yZWdpb25faW5fYXJyYXlfY2hrKG1lbV9yZWdpb25fdCAqdGJsLCBzaXplX3QgbnJlZ2lvbnMsCisJCQkgICAgdWludHB0cl90IGFkZHIsIHNpemVfdCBuYnl0ZXMpOworCiAvKgogICogRmlsbCBhIHJlZ2lvbiBvZiBub3JtYWwgbWVtb3J5IG9mIHNpemUgImxlbmd0aCIgaW4gYnl0ZXMgd2l0aCB6ZXJvIGJ5dGVzLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliL3V0aWxzX2RlZi5oIGIvaW5jbHVkZS9saWIvdXRpbHNfZGVmLmgKaW5kZXggMjZhYzQ0MC4uMTg1YTFjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saWIvdXRpbHNfZGVmLmgKKysrIGIvaW5jbHVkZS9saWIvdXRpbHNfZGVmLmgKQEAgLTE2LDcgKzE2LDEzIEBACiAKICNkZWZpbmUgU0laRV9GUk9NX0xPRzJfV09SRFMobikJCSg0IDw8IChuKSkKIAotI2RlZmluZSBCSVQobnIpCQkJCSgxVUwgPDwgKG5yKSkKKyNkZWZpbmUgQklUKG5yKQkJCQkoMVVMTCA8PCAobnIpKQorCisvKgorICogVGhpcyB2YXJpYW50IG9mIGRpdl9yb3VuZF91cCBjYW4gYmUgdXNlZCBpbiBtYWNybyBkZWZpbml0aW9uIGJ1dCBzaG91bGQgbm90CisgKiBiZSB1c2VkIGluIEMgY29kZSBhcyB0aGUgYGRpdmAgcGFyYW1ldGVyIGlzIGV2YWx1YXRlZCB0d2ljZS4KKyAqLworI2RlZmluZSBESVZfUk9VTkRfVVBfMkVWQUwobiwgZCkJKCgobikgKyAoZCkgLSAxKSAvIChkKSkKIAogI2RlZmluZSBNSU4oeCwgeSkgX19leHRlbnNpb25fXyAoewlcCiAJX190eXBlb2ZfXyh4KSBfeCA9ICh4KTsJCVwKQEAgLTQ5LDYgKzU1LDExIEBACiAjZGVmaW5lIHJvdW5kX2Rvd24odmFsdWUsIGJvdW5kYXJ5KQkJXAogCSgodmFsdWUpICYgfnJvdW5kX2JvdW5kYXJ5KHZhbHVlLCBib3VuZGFyeSkpCiAKKyNkZWZpbmUgZGl2X3JvdW5kX3VwKHZhbCwgZGl2KSBfX2V4dGVuc2lvbl9fICh7CVwKKwlfX3R5cGVvZl9fKGRpdikgX2RpdiA9IChkaXYpOwkJXAorCXJvdW5kX3VwKCh2YWwpLCBfZGl2KS9fZGl2OwkJXAorfSkKKwogLyoKICAqIEV2YWx1YXRlcyB0byAxIGlmIChwdHIgKyBpbmMpIG92ZXJmbG93cywgMCBvdGhlcndpc2UuCiAgKiBCb3RoIGFyZ3VtZW50cyBtdXN0IGJlIHVuc2lnbmVkIHBvaW50ZXIgdmFsdWVzIChpLmUuIHVpbnRwdHJfdCkuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYi94bGF0X3RhYmxlcy9hYXJjaDY0L3hsYXRfdGFibGVzX2FhcmNoNjQuaCBiL2luY2x1ZGUvbGliL3hsYXRfdGFibGVzL2FhcmNoNjQveGxhdF90YWJsZXNfYWFyY2g2NC5oCmluZGV4IDczODFiYzguLjYwMjFlNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGliL3hsYXRfdGFibGVzL2FhcmNoNjQveGxhdF90YWJsZXNfYWFyY2g2NC5oCisrKyBiL2luY2x1ZGUvbGliL3hsYXRfdGFibGVzL2FhcmNoNjQveGxhdF90YWJsZXNfYWFyY2g2NC5oCkBAIC0xNiw2ICsxNiwxMSBAQAogI2VuZGlmCiAKIC8qCisgKiBFbmNvZGUgYSBQaHlzaWNhbCBBZGRyZXNzIFNwYWNlIHNpemUgZm9yIGl0cyB1c2UgaW4gVENSX0VMeC4KKyAqLwordW5zaWduZWQgbG9uZyBsb25nIHRjcl9waHlzaWNhbF9hZGRyX3NpemVfYml0cyh1bnNpZ25lZCBsb25nIGxvbmcgbWF4X2FkZHIpOworCisvKgogICogSW4gQUFyY2g2NCBzdGF0ZSwgdGhlIE1NVSBtYXkgc3VwcG9ydCA0IEtCLCAxNiBLQiBhbmQgNjQgS0IgcGFnZQogICogZ3JhbnVsYXJpdHkuIEZvciA0S0IgZ3JhbnVsYXJpdHksIGEgbGV2ZWwgMCB0YWJsZSBkZXNjcmlwdG9yIGRvZXNuJ3Qgc3VwcG9ydAogICogYmxvY2sgdHJhbnNsYXRpb24uIEZvciAxNktCLCB0aGUgc2FtZSB0aGluZyBoYXBwZW5zIHRvIGxldmVscyAwIGFuZCAxLiBGb3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliL3hsYXRfdGFibGVzL3hsYXRfdGFibGVzX2RlZnMuaCBiL2luY2x1ZGUvbGliL3hsYXRfdGFibGVzL3hsYXRfdGFibGVzX2RlZnMuaAppbmRleCBiMGY1YTA0Li4zYTdmMjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYi94bGF0X3RhYmxlcy94bGF0X3RhYmxlc19kZWZzLmgKKysrIGIvaW5jbHVkZS9saWIveGxhdF90YWJsZXMveGxhdF90YWJsZXNfZGVmcy5oCkBAIC0yNCw5ICsyNCwxOSBAQAogI2RlZmluZSBGT1VSX0tCX0lOREVYKHgpCSgoeCkgPj4gRk9VUl9LQl9TSElGVCkKIAogI2RlZmluZSBJTlZBTElEX0RFU0MJCVUoMHgwKQorLyoKKyAqIEEgYmxvY2sgZGVzY3JpcHRvciBwb2ludHMgdG8gYSByZWdpb24gb2YgbWVtb3J5IGJpZ2dlciB0aGFuIHRoZSBncmFudWxlIHNpemUKKyAqIChlLmcuIGEgMk1CIHJlZ2lvbiB3aGVuIHRoZSBncmFudWxlIHNpemUgaXMgNEtCKS4KKyAqLwogI2RlZmluZSBCTE9DS19ERVNDCQlVKDB4MSkgLyogVGFibGUgbGV2ZWxzIDAtMiAqLworLyogQSB0YWJsZSBkZXNjcmlwdG9yIHBvaW50cyB0byB0aGUgbmV4dCBsZXZlbCBvZiB0cmFuc2xhdGlvbiB0YWJsZS4gKi8KICNkZWZpbmUgVEFCTEVfREVTQwkJVSgweDMpIC8qIFRhYmxlIGxldmVscyAwLTIgKi8KKy8qCisgKiBBIHBhZ2UgZGVzY3JpcHRvciBwb2ludHMgdG8gYSBwYWdlLCBpLmUuIGEgbWVtb3J5IHJlZ2lvbiB3aG9zZSBzaXplIGlzIHRoZQorICogdHJhbnNsYXRpb24gZ3JhbnVsZSBzaXplIChlLmcuIDRLQikuCisgKi8KICNkZWZpbmUgUEFHRV9ERVNDCQlVKDB4MykgLyogVGFibGUgbGV2ZWwgMyAqLworCiAjZGVmaW5lIERFU0NfTUFTSwkJVSgweDMpCiAKICNkZWZpbmUgRklSU1RfTEVWRUxfREVTQ19OCU9ORV9HQl9TSElGVApAQCAtODQsMTQgKzk0LDM5IEBACiAjZGVmaW5lIFhMQVRfQkxPQ0tfTUFTSyhsZXZlbCkJKFhMQVRfQkxPQ0tfU0laRShsZXZlbCkgLSAxKQogLyogTWFzayB0byBnZXQgdGhlIGFkZHJlc3MgYml0cyBjb21tb24gdG8gYSBibG9jayBvZiBhIGNlcnRhaW4gdGFibGUgbGV2ZWwqLwogI2RlZmluZSBYTEFUX0FERFJfTUFTSyhsZXZlbCkJKH5YTEFUX0JMT0NLX01BU0sobGV2ZWwpKQorLyoKKyAqIEV4dHJhY3QgZnJvbSB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzIHRoZSBpbmRleCBpbnRvIHRoZSBnaXZlbiBsb29rdXAgbGV2ZWwuCisgKiBUaGlzIG1hY3JvIGFzc3VtZXMgdGhlIHN5c3RlbSBpcyB1c2luZyB0aGUgNEtCIHRyYW5zbGF0aW9uIGdyYW51bGUuCisgKi8KKyNkZWZpbmUgWExBVF9UQUJMRV9JRFgodmlydHVhbF9hZGRyLCBsZXZlbCkJXAorCSgoKHZpcnR1YWxfYWRkcikgPj4gWExBVF9BRERSX1NISUZUKGxldmVsKSkgJiBVTEwoMHgxRkYpKQogCiAvKgotICogQVBbMV0gYml0IGlzIGlnbm9yZWQgYnkgaGFyZHdhcmUgYW5kIGlzCi0gKiB0cmVhdGVkIGFzIGlmIGl0IGlzIE9uZSBpbiBFTDIvRUwzCisgKiBUaGUgQVJNdjggdHJhbnNsYXRpb24gdGFibGUgZGVzY3JpcHRvciBmb3JtYXQgZGVmaW5lcyBBUFsyOjFdIGFzIHRoZSBBY2Nlc3MKKyAqIFBlcm1pc3Npb25zIGJpdHMsIGFuZCBkb2VzIG5vdCBkZWZpbmUgYW4gQVBbMF0gYml0LgorICoKKyAqIEFQWzFdIGlzIHZhbGlkIG9ubHkgZm9yIGEgc3RhZ2UgMSB0cmFuc2xhdGlvbiB0aGF0IHN1cHBvcnRzIHR3byBWQSByYW5nZXMKKyAqIChpLmUuIGluIHRoZSBBUk12OEEuMCBhcmNoaXRlY3R1cmUsIHRoYXQgaXMgdGhlIFMtRUwxJjAgcmVnaW1lKS4KKyAqCisgKiBBUFsxXSBpcyBSRVMwIGZvciBzdGFnZSAxIHRyYW5zbGF0aW9ucyB0aGF0IHN1cHBvcnQgb25seSBvbmUgVkEgcmFuZ2UKKyAqIChlLmcuIEVMMykuCiAgKi8KLSNkZWZpbmUgQVBfUk8JCQkJKFUoMHgxKSA8PCA1KQotI2RlZmluZSBBUF9SVwkJCQkoVSgweDApIDw8IDUpCisjZGVmaW5lIEFQMl9TSElGVAkJCVUoMHg3KQorI2RlZmluZSBBUDJfUk8JCQkJVSgweDEpCisjZGVmaW5lIEFQMl9SVwkJCQlVKDB4MCkKIAorI2RlZmluZSBBUDFfU0hJRlQJCQlVKDB4NikKKyNkZWZpbmUgQVAxX0FDQ0VTU19VTlBSSVZJTEVHRUQJCVUoMHgxKQorI2RlZmluZSBBUDFfTk9fQUNDRVNTX1VOUFJJVklMRUdFRAlVKDB4MCkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgbXVzdCBhbGwgYmUgcGFzc2VkIHRvIHRoZSBMT1dFUl9BVFRSUygpIG1hY3JvIHRvCisgKiBnZXQgdGhlIHJpZ2h0IGJpdG1hc2suCisgKi8KKyNkZWZpbmUgQVBfUk8JCQkJKEFQMl9STyA8PCA1KQorI2RlZmluZSBBUF9SVwkJCQkoQVAyX1JXIDw8IDUpCisjZGVmaW5lIEFQX0FDQ0VTU19VTlBSSVZJTEVHRUQJCShBUDFfQUNDRVNTX1VOUFJJVklMRUdFRCAgICA8PCA0KQorI2RlZmluZSBBUF9OT19BQ0NFU1NfVU5QUklWSUxFR0VECShBUDFfTk9fQUNDRVNTX1VOUFJJVklMRUdFRCA8PCA0KQogI2RlZmluZSBOUwkJCQkoVSgweDEpIDw8IDMpCiAjZGVmaW5lIEFUVFJfTk9OX0NBQ0hFQUJMRV9JTkRFWAlVKDB4MikKICNkZWZpbmUgQVRUUl9ERVZJQ0VfSU5ERVgJCVUoMHgxKQpAQCAtMTA5LDYgKzE0NCwyOCBAQAogI2RlZmluZSBBVFRSX0lOREVYX0dFVChhdHRyKQkJKCgoYXR0cikgPj4gMikgJiBBVFRSX0lOREVYX01BU0spCiAKIC8qCisgKiBTaGlmdCB2YWx1ZXMgZm9yIHRoZSBhdHRyaWJ1dGVzIGZpZWxkcyBpbiBhIGJsb2NrIG9yIHBhZ2UgZGVzY3JpcHRvci4KKyAqIFNlZSBzZWN0aW9uIEQ0LjMuMyBpbiB0aGUgQVJNdjgtQSBBUk0gKGlzc3VlIEIuYSkuCisgKi8KKworLyogTWVtb3J5IGF0dHJpYnV0ZXMgaW5kZXggZmllbGQsIEF0dHJJbmR4WzI6MF0uICovCisjZGVmaW5lIEFUVFJfSU5ERVhfU0hJRlQJCTIKKy8qIE5vbi1zZWN1cmUgYml0LCBOUy4gKi8KKyNkZWZpbmUgTlNfU0hJRlQJCQk1CisvKiBTaGFyZWFiaWxpdHkgZmllbGQsIFNIWzE6MF0gKi8KKyNkZWZpbmUgU0hBUkVBQklMSVRZX1NISUZUCQk4CisvKiBUaGUgQWNjZXNzIEZsYWcsIEFGLiAqLworI2RlZmluZSBBQ0NFU1NfRkxBR19TSElGVAkJMTAKKy8qIFRoZSBub3QgZ2xvYmFsIGJpdCwgbkcuICovCisjZGVmaW5lIE5PVF9HTE9CQUxfU0hJRlQJCTExCisvKiBDb250aWd1b3VzIGhpbnQgYml0LiAqLworI2RlZmluZSBDT05UX0hJTlRfU0hJRlQJCQk1MgorLyogRXhlY3V0ZS1uZXZlciBiaXRzLCBYTi4gKi8KKyNkZWZpbmUgUFhOX1NISUZUCQkJNTMKKyNkZWZpbmUgWE5fU0hJRlQJCQk1NAorI2RlZmluZSBVWE5fU0hJRlQJCQlYTl9TSElGVAorCisvKgogICogRmxhZ3MgdG8gb3ZlcnJpZGUgZGVmYXVsdCB2YWx1ZXMgdXNlZCB0byBwcm9ncmFtIHN5c3RlbSByZWdpc3RlcnMgd2hpbGUKICAqIGVuYWJsaW5nIHRoZSBNTVUuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliL3hsYXRfdGFibGVzL3hsYXRfdGFibGVzX3YyLmggYi9pbmNsdWRlL2xpYi94bGF0X3RhYmxlcy94bGF0X3RhYmxlc192Mi5oCmluZGV4IDJiZTQzMjkuLmJhM2UzNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGliL3hsYXRfdGFibGVzL3hsYXRfdGFibGVzX3YyLmgKKysrIGIvaW5jbHVkZS9saWIveGxhdF90YWJsZXMveGxhdF90YWJsZXNfdjIuaApAQCAtMTUsMjAgKzE1LDM2IEBACiAjaW5jbHVkZSA8eGxhdF9tbXVfaGVscGVycy5oPgogI2luY2x1ZGUgPHhsYXRfdGFibGVzX3YyX2hlbHBlcnMuaD4KIAotLyogSGVscGVyIG1hY3JvIHRvIGRlZmluZSBlbnRyaWVzIGZvciBtbWFwX3JlZ2lvbl90LiBJdCBjcmVhdGVzCi0gKiBpZGVudGl0eSBtYXBwaW5ncyBmb3IgZWFjaCByZWdpb24uCisvKgorICogRGVmYXVsdCBncmFudWxhcml0eSBzaXplIGZvciBhbiBtbWFwX3JlZ2lvbl90LgorICogVXNlZnVsIHdoZW4gbm8gc3BlY2lmaWMgZ3JhbnVsYXJpdHkgaXMgcmVxdWlyZWQuCisgKgorICogQnkgZGVmYXVsdCwgY2hvb3NlIHRoZSBiaWdnZXN0IHBvc3NpYmxlIGJsb2NrIHNpemUgYWxsb3dlZCBieSB0aGUKKyAqIGFyY2hpdGVjdHVyYWwgc3RhdGUgYW5kIGdyYW51bGUgc2l6ZSBpbiBvcmRlciB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHBhZ2UKKyAqIHRhYmxlcyByZXF1aXJlZCBmb3IgdGhlIG1hcHBpbmcuCiAgKi8KLSNkZWZpbmUgTUFQX1JFR0lPTl9GTEFUKGFkciwgc3osIGF0dHIpIE1BUF9SRUdJT04oYWRyLCBhZHIsIHN6LCBhdHRyKQorI2RlZmluZSBSRUdJT05fREVGQVVMVF9HUkFOVUxBUklUWQlYTEFUX0JMT0NLX1NJWkUoTUlOX0xWTF9CTE9DS19ERVNDKQogCi0vKiBIZWxwZXIgbWFjcm8gdG8gZGVmaW5lIGVudHJpZXMgZm9yIG1tYXBfcmVnaW9uX3QuIEl0IGFsbG93cyB0bwotICogcmUtbWFwIGFkZHJlc3MgbWFwcGluZ3MgZnJvbSAncGEnIHRvICd2YScgZm9yIGVhY2ggcmVnaW9uLgorLyogSGVscGVyIG1hY3JvIHRvIGRlZmluZSBhbiBtbWFwX3JlZ2lvbl90LiAqLworI2RlZmluZSBNQVBfUkVHSU9OKF9wYSwgX3ZhLCBfc3osIF9hdHRyKQlcCisJX01BUF9SRUdJT05fRlVMTF9TUEVDKF9wYSwgX3ZhLCBfc3osIF9hdHRyLCBSRUdJT05fREVGQVVMVF9HUkFOVUxBUklUWSkKKworLyogSGVscGVyIG1hY3JvIHRvIGRlZmluZSBhbiBtbWFwX3JlZ2lvbl90IHdpdGggYW4gaWRlbnRpdHkgbWFwcGluZy4gKi8KKyNkZWZpbmUgTUFQX1JFR0lPTl9GTEFUKF9hZHIsIF9zeiwgX2F0dHIpCQkJXAorCU1BUF9SRUdJT04oX2FkciwgX2FkciwgX3N6LCBfYXR0cikKKworLyoKKyAqIEhlbHBlciBtYWNybyB0byBkZWZpbmUgYW4gbW1hcF9yZWdpb25fdCB0byBtYXAgd2l0aCB0aGUgZGVzaXJlZCBncmFudWxhcml0eQorICogb2YgdHJhbnNsYXRpb24gdGFibGVzLgorICoKKyAqIFRoZSBncmFudWxhcml0eSB2YWx1ZSBwYXNzZWQgdG8gdGhpcyBtYWNybyBtdXN0IGJlIGEgdmFsaWQgYmxvY2sgb3IgcGFnZQorICogc2l6ZS4gV2hlbiB1c2luZyBhIDRLQiB0cmFuc2xhdGlvbiBncmFudWxlLCB0aGlzIG1pZ2h0IGJlIDRLQiwgMk1CIG9yIDFHQi4KKyAqIFBhc3NpbmcgUkVHSU9OX0RFRkFVTFRfR1JBTlVMQVJJVFkgaXMgYWxzbyBhbGxvd2VkIGFuZCBtZWFucyB0aGF0IHRoZSBsaWJyYXJ5CisgKiBpcyBmcmVlIHRvIGNob29zZSB0aGUgZ3JhbnVsYXJpdHkgZm9yIHRoaXMgcmVnaW9uLiBJbiB0aGlzIGNhc2UsIGl0IGlzCisgKiBlcXVpdmFsZW50IHRvIHRoZSBNQVBfUkVHSU9OKCkgbWFjcm8uCiAgKi8KLSNkZWZpbmUgTUFQX1JFR0lPTihfcGEsIF92YSwgX3N6LCBfYXR0cikgKChtbWFwX3JlZ2lvbl90KXsJXAotCS5iYXNlX3BhID0gKF9wYSksCQkJCQlcCi0JLmJhc2VfdmEgPSAoX3ZhKSwJCQkJCVwKLQkuc2l6ZSAgICA9IChfc3opLAkJCQkJXAotCS5hdHRyICAgID0gKF9hdHRyKSwJCQkJCVwKLQl9KQorI2RlZmluZSBNQVBfUkVHSU9OMihfcGEsIF92YSwgX3N6LCBfYXR0ciwgX2dyKQkJCVwKKwlfTUFQX1JFR0lPTl9GVUxMX1NQRUMoX3BhLCBfdmEsIF9zeiwgX2F0dHIsIF9ncikKIAogLyoKICAqIFNoaWZ0cyBhbmQgbWFza3MgdG8gYWNjZXNzIGZpZWxkcyBvZiBhbiBtbWFwX2F0dHJfdApAQCAtNDEsNiArNTcsMTEgQEAKICNkZWZpbmUgTVRfU0VDX1NISUZUCQlVKDQpCiAvKiBBY2Nlc3MgcGVybWlzc2lvbnMgZm9yIGluc3RydWN0aW9uIGV4ZWN1dGlvbiAoRVhFQ1VURS9FWEVDVVRFX05FVkVSKSAqLwogI2RlZmluZSBNVF9FWEVDVVRFX1NISUZUCVUoNSkKKy8qCisgKiBJbiB0aGUgRUwxJjAgdHJhbnNsYXRpb24gcmVnaW1lLCBtYXJrIHRoZSByZWdpb24gYXMgVXNlciAoRUwwKSBvcgorICogUHJpdmlsZWdlZCAoRUwxKS4gSW4gdGhlIEVMMyB0cmFuc2xhdGlvbiByZWdpbWUgdGhpcyBoYXMgbm8gZWZmZWN0LgorICovCisjZGVmaW5lIE1UX1VTRVJfU0hJRlQJCVUoNikKIC8qIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZCAqLwogCiAvKgpAQCAtNzMsMTAgKzk0LDIwIEBACiAJICovCiAJTVRfRVhFQ1VURQkJPSBVKDApIDw8IE1UX0VYRUNVVEVfU0hJRlQsCiAJTVRfRVhFQ1VURV9ORVZFUgk9IFUoMSkgPDwgTVRfRVhFQ1VURV9TSElGVCwKKworCS8qCisJICogV2hlbiBtYXBwaW5nIGEgcmVnaW9uIGF0IEVMMCBvciBFTDEsIHRoaXMgYXR0cmlidXRlIHdpbGwgYmUgdXNlZCB0bworCSAqIGRldGVybWluZSBpZiBhIFVzZXIgbWFwcGluZyAoRUwwKSB3aWxsIGJlIGNyZWF0ZWQgb3IgYSBQcml2aWxlZ2VkCisJICogbWFwcGluZyAoRUwxKS4KKwkgKi8KKwlNVF9VU0VSCQkJCT0gVSgxKSA8PCBNVF9VU0VSX1NISUZULAorCU1UX1BSSVZJTEVHRUQJCQk9IFUoMCkgPDwgTVRfVVNFUl9TSElGVCwKIH0gbW1hcF9hdHRyX3Q7CiAKKy8qIENvbXBvdW5kIGF0dHJpYnV0ZXMgZm9yIG1vc3QgY29tbW9uIHVzYWdlcyAqLwogI2RlZmluZSBNVF9DT0RFCQkoTVRfTUVNT1JZIHwgTVRfUk8gfCBNVF9FWEVDVVRFKQogI2RlZmluZSBNVF9ST19EQVRBCShNVF9NRU1PUlkgfCBNVF9STyB8IE1UX0VYRUNVVEVfTkVWRVIpCisjZGVmaW5lIE1UX1JXX0RBVEEJKE1UX01FTU9SWSB8IE1UX1JXIHwgTVRfRVhFQ1VURV9ORVZFUikKIAogLyoKICAqIFN0cnVjdHVyZSBmb3Igc3BlY2lmeWluZyBhIHNpbmdsZSByZWdpb24gb2YgbWVtb3J5LgpAQCAtODYsOSArMTE3LDE5IEBACiAJdWludHB0cl90CQliYXNlX3ZhOwogCXNpemVfdAkJCXNpemU7CiAJbW1hcF9hdHRyX3QJCWF0dHI7CisJLyogRGVzaXJlZCBncmFudWxhcml0eS4gU2VlIHRoZSBNQVBfUkVHSU9OMigpIG1hY3JvIGZvciBtb3JlIGRldGFpbHMuICovCisJc2l6ZV90CQkJZ3JhbnVsYXJpdHk7CiB9IG1tYXBfcmVnaW9uX3Q7CiAKIC8qCisgKiBUcmFuc2xhdGlvbiByZWdpbWVzIHN1cHBvcnRlZCBieSB0aGlzIGxpYnJhcnkuCisgKi8KK3R5cGVkZWYgZW51bSB4bGF0X3JlZ2ltZSB7CisJRUwxX0VMMF9SRUdJTUUsCisJRUwzX1JFR0lNRSwKK30geGxhdF9yZWdpbWVfdDsKKworLyoKICAqIERlY2xhcmUgdGhlIHRyYW5zbGF0aW9uIGNvbnRleHQgdHlwZS4KICAqIEl0cyBkZWZpbml0aW9uIGlzIHByaXZhdGUuCiAgKi8KQEAgLTEyMyw4ICsxNjQsMzIgQEAKICAqLwogI2RlZmluZSBSRUdJU1RFUl9YTEFUX0NPTlRFWFQoX2N0eF9uYW1lLCBfbW1hcF9jb3VudCwgX3hsYXRfdGFibGVzX2NvdW50LAlcCiAJCQlfdmlydF9hZGRyX3NwYWNlX3NpemUsIF9waHlfYWRkcl9zcGFjZV9zaXplKQkJXAotCV9SRUdJU1RFUl9YTEFUX0NPTlRFWFQoX2N0eF9uYW1lLCBfbW1hcF9jb3VudCwgX3hsYXRfdGFibGVzX2NvdW50LAlcCi0JCV92aXJ0X2FkZHJfc3BhY2Vfc2l6ZSwgX3BoeV9hZGRyX3NwYWNlX3NpemUpCisJX1JFR0lTVEVSX1hMQVRfQ09OVEVYVF9GVUxMX1NQRUMoX2N0eF9uYW1lLCBfbW1hcF9jb3VudCwJXAorCQkJCQkgX3hsYXRfdGFibGVzX2NvdW50LAkJXAorCQkJCQkgX3ZpcnRfYWRkcl9zcGFjZV9zaXplLAkJXAorCQkJCQkgX3BoeV9hZGRyX3NwYWNlX3NpemUsCQlcCisJCQkJCSBJTUFHRV9YTEFUX0RFRkFVTFRfUkVHSU1FLAlcCisJCQkJCSJ4bGF0X3RhYmxlIikKKworLyoKKyAqIFNhbWUgYXMgUkVHSVNURVJfWExBVF9DT05URVhUIHBsdXMgdGhlIGFkZGl0aW9uYWwgcGFyYW1ldGVyczoKKyAqCisgKiBfeGxhdF9yZWdpbWU6CisgKiAgIFNwZWNpZnkgdGhlIHRyYW5zbGF0aW9uIHJlZ2ltZSBtYW5hZ2VkIGJ5IHRoaXMgeGxhdF9jdHhfdCBpbnN0YW5jZS4gVGhlCisgKiAgIHZhbHVlcyBhcmUgdGhlIG9uZSBmcm9tIHhsYXRfcmVnaW1lX3QgZW51bWVyYXRpb24uCisgKgorICogX3NlY3Rpb25fbmFtZToKKyAqICAgU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbiB3aGVyZSB0aGUgdHJhbnNsYXRpb24gdGFibGVzIGhhdmUgdG8gYmUKKyAqICAgcGxhY2VkIGJ5IHRoZSBsaW5rZXIuCisgKi8KKyNkZWZpbmUgUkVHSVNURVJfWExBVF9DT05URVhUMihfY3R4X25hbWUsIF9tbWFwX2NvdW50LCBfeGxhdF90YWJsZXNfY291bnQsCVwKKwkJCV92aXJ0X2FkZHJfc3BhY2Vfc2l6ZSwgX3BoeV9hZGRyX3NwYWNlX3NpemUsCQlcCisJCQlfeGxhdF9yZWdpbWUsIF9zZWN0aW9uX25hbWUpCQkJCVwKKwlfUkVHSVNURVJfWExBVF9DT05URVhUX0ZVTExfU1BFQyhfY3R4X25hbWUsIF9tbWFwX2NvdW50LAlcCisJCQkJCSBfeGxhdF90YWJsZXNfY291bnQsCQlcCisJCQkJCSBfdmlydF9hZGRyX3NwYWNlX3NpemUsCQlcCisJCQkJCSBfcGh5X2FkZHJfc3BhY2Vfc2l6ZSwJCVwKKwkJCQkJIF94bGF0X3JlZ2ltZSwgX3NlY3Rpb25fbmFtZSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR2VuZXJpYyB0cmFuc2xhdGlvbiB0YWJsZSBBUElzLgpAQCAtMTkzLDUgKzI1OCw2NiBAQAogCiAjZW5kaWYgLyogUExBVF9YTEFUX1RBQkxFU19EWU5BTUlDICovCiAKKy8qCisgKiBDaGFuZ2UgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHN0YXJ0aW5nIGZyb20gYSBnaXZlbgorICogdmlydHVhbCBhZGRyZXNzIGluIGEgc2V0IG9mIHRyYW5zbGF0aW9uIHRhYmxlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgYWZ0ZXIgdGhlIHRyYW5zbGF0aW9uIHRhYmxlcyBoYXZlIGJlZW4KKyAqIGluaXRpYWxpemVkLgorICoKKyAqIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gbXVzdCBiZSBhbGlnbmVkIG9uIGEgcGFnZSBib3VuZGFyeS4KKyAqIFRoZSBzaXplIG9mIHRoaXMgbWVtb3J5IHJlZ2lvbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYSBwYWdlIHNpemUuCisgKiBUaGUgbWVtb3J5IHJlZ2lvbiBtdXN0IGJlIGFscmVhZHkgbWFwcGVkIGJ5IHRoZSBnaXZlbiB0cmFuc2xhdGlvbiB0YWJsZXMKKyAqIGFuZCBpdCBtdXN0IGJlIG1hcHBlZCBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgYSBwYWdlLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuCisgKgorICogSW4gY2FzZSBvZiBlcnJvciwgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzIHJlbWFpbiB1bmNoYW5nZWQgYW5kIHRoaXMgZnVuY3Rpb24KKyAqIGhhcyBubyBlZmZlY3QuCisgKgorICogY3R4CisgKiAgIFRyYW5zbGF0aW9uIGNvbnRleHQgdG8gd29yayBvbi4KKyAqIGJhc2VfdmE6CisgKiAgIFZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgMXN0IHBhZ2UgdG8gY2hhbmdlIHRoZSBhdHRyaWJ1dGVzIG9mLgorICogc2l6ZToKKyAqICAgU2l6ZSBpbiBieXRlcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4KKyAqIGF0dHI6CisgKiAgIE5ldyBhdHRyaWJ1dGVzIG9mIHRoZSBwYWdlIHRhYmxlcy4gVGhlIGF0dHJpYnV0ZXMgdGhhdCBjYW4gYmUgY2hhbmdlZCBhcmUKKyAqICAgZGF0YSBhY2Nlc3MgKE1UX1JPL01UX1JXKSwgaW5zdHJ1Y3Rpb24gYWNjZXNzIChNVF9FWEVDVVRFX05FVkVSL01UX0VYRUNVVEUpCisgKiAgIGFuZCB1c2VyL3ByaXZpbGVnZWQgYWNjZXNzIChNVF9VU0VSL01UX1BSSVZJTEVHRUQpIGluIHRoZSBjYXNlIG9mIGNvbnRleHRzCisgKiAgIHRoYXQgYXJlIHVzZWQgaW4gdGhlIEVMMSYwIHRyYW5zbGF0aW9uIHJlZ2ltZS4gQWxzbywgbm90ZSB0aGF0IHRoaXMKKyAqICAgZnVuY3Rpb24gZG9lc24ndCBhbGxvdyB0byByZW1hcCBhIHJlZ2lvbiBhcyBSVyBhbmQgZXhlY3V0YWJsZSwgb3IgdG8gcmVtYXAKKyAqICAgZGV2aWNlIG1lbW9yeSBhcyBleGVjdXRhYmxlLgorICoKKyAqIE5PVEU6IFRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGFibGUgdG8gd3JpdGUgdG8gdGhlIHRyYW5zbGF0aW9uCisgKiB0YWJsZXMsIGkuZS4gdGhlIG1lbW9yeSB3aGVyZSB0aGV5IGFyZSBzdG9yZWQgbXVzdCBiZSBtYXBwZWQgd2l0aCByZWFkLXdyaXRlCisgKiBhY2Nlc3MgcGVybWlzc2lvbnMuIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBpdCBpcyB0aGUgY2FzZS4gSWYgdGhpcyBpcyBub3QKKyAqIHRoZSBjYXNlIHRoZW4gdGhpcyBmdW5jdGlvbiBtaWdodCB0cmlnZ2VyIGEgZGF0YSBhYm9ydCBleGNlcHRpb24uCisgKgorICogTk9URTI6IFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoYXQgdGhlIHRhcmdldGVkCisgKiB0cmFuc2xhdGlvbiB0YWJsZXMgYXJlIG5vdCBtb2RpZmllZCBieSBhbnkgb3RoZXIgY29kZSB3aGlsZSB0aGlzIGZ1bmN0aW9uIGlzCisgKiBleGVjdXRpbmcuCisgKi8KK2ludCBjaGFuZ2VfbWVtX2F0dHJpYnV0ZXMoeGxhdF9jdHhfdCAqY3R4LCB1aW50cHRyX3QgYmFzZV92YSwgc2l6ZV90IHNpemUsCisJCQltbWFwX2F0dHJfdCBhdHRyKTsKKworLyoKKyAqIFF1ZXJ5IHRoZSBtZW1vcnkgYXR0cmlidXRlcyBvZiBhIG1lbW9yeSBwYWdlIGluIGEgc2V0IG9mIHRyYW5zbGF0aW9uIHRhYmxlcy4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZXJyb3IuCisgKiBPbiBzdWNjZXNzLCB0aGUgYXR0cmlidXRlcyBhcmUgc3RvcmVkIGludG8gKmF0dHJpYnV0ZXMuCisgKgorICogY3R4CisgKiAgIFRyYW5zbGF0aW9uIGNvbnRleHQgdG8gd29yayBvbi4KKyAqIGJhc2VfdmEKKyAqICAgVmlydHVhbCBhZGRyZXNzIG9mIHRoZSBwYWdlIHRvIGdldCB0aGUgYXR0cmlidXRlcyBvZi4KKyAqICAgVGhlcmUgYXJlIG5vIGFsaWdubWVudCByZXN0cmljdGlvbnMgb24gdGhpcyBhZGRyZXNzLiBUaGUgYXR0cmlidXRlcyBvZiB0aGUKKyAqICAgbWVtb3J5IHBhZ2UgaXQgbGllcyB3aXRoaW4gYXJlIHJldHVybmVkLgorICogYXR0cmlidXRlcworICogICBPdXRwdXQgcGFyYW1ldGVyIHdoZXJlIHRvIHN0b3JlIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSB0YXJnZXRlZCBtZW1vcnkgcGFnZS4KKyAqLworaW50IGdldF9tZW1fYXR0cmlidXRlcyhjb25zdCB4bGF0X2N0eF90ICpjdHgsIHVpbnRwdHJfdCBiYXNlX3ZhLAorCQltbWFwX2F0dHJfdCAqYXR0cmlidXRlcyk7CisKICNlbmRpZiAvKl9fQVNTRU1CTFlfXyovCiAjZW5kaWYgLyogX19YTEFUX1RBQkxFU19WMl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGliL3hsYXRfdGFibGVzL3hsYXRfdGFibGVzX3YyX2hlbHBlcnMuaCBiL2luY2x1ZGUvbGliL3hsYXRfdGFibGVzL3hsYXRfdGFibGVzX3YyX2hlbHBlcnMuaAppbmRleCBmNWUzMTAwLi4xYmU5OWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpYi94bGF0X3RhYmxlcy94bGF0X3RhYmxlc192Ml9oZWxwZXJzLmgKKysrIGIvaW5jbHVkZS9saWIveGxhdF90YWJsZXMveGxhdF90YWJsZXNfdjJfaGVscGVycy5oCkBAIC0yNyw2ICsyNywyMCBAQAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLwogc3RydWN0IG1tYXBfcmVnaW9uOwogCisvKgorICogSGVscGVyIG1hY3JvIHRvIGRlZmluZSBhbiBtbWFwX3JlZ2lvbl90LiAgVGhpcyBtYWNybyBhbGxvd3MgdG8gc3BlY2lmeSBhbGwKKyAqIHRoZSBmaWVsZHMgb2YgdGhlIHN0cnVjdHVyZSBidXQgaXRzIHBhcmFtZXRlciBsaXN0IGlzIG5vdCBndWFyYW50ZWVkIHRvCisgKiByZW1haW4gc3RhYmxlIGFzIHdlIGFkZCBtZW1iZXJzIHRvIG1tYXBfcmVnaW9uX3QuCisgKi8KKyNkZWZpbmUgX01BUF9SRUdJT05fRlVMTF9TUEVDKF9wYSwgX3ZhLCBfc3osIF9hdHRyLCBfZ3IpCVwKKwl7CQkJCQkJCVwKKwkJLmJhc2VfcGEgPSAoX3BhKSwJCQkJXAorCQkuYmFzZV92YSA9IChfdmEpLAkJCQlcCisJCS5zaXplID0gKF9zeiksCQkJCQlcCisJCS5hdHRyID0gKF9hdHRyKSwJCQkJXAorCQkuZ3JhbnVsYXJpdHkgPSAoX2dyKSwJCQkJXAorCX0KKwogLyogU3RydWN0IHRoYXQgaG9sZHMgYWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cmFuc2xhdGlvbiB0YWJsZXMuICovCiBzdHJ1Y3QgeGxhdF9jdHggewogCS8qCkBAIC04NSwxMSArOTksMTIgQEAKIAl1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ7CiAKIAkvKgotCSAqIEJpdCBtYXNrIHRoYXQgaGFzIHRvIGJlIE9SZWQgdG8gdGhlIHJlc3Qgb2YgYSB0cmFuc2xhdGlvbiB0YWJsZQotCSAqIGRlc2NyaXB0b3IgaW4gb3JkZXIgdG8gcHJvaGliaXQgZXhlY3V0aW9uIG9mIGNvZGUgYXQgdGhlIGV4Y2VwdGlvbgotCSAqIGxldmVsIG9mIHRoaXMgdHJhbnNsYXRpb24gY29udGV4dC4KKwkgKiBUcmFuc2xhdGlvbiByZWdpbWUgbWFuYWdlZCBieSB0aGlzIHhsYXRfY3R4X3QuIEl0IHRha2VzIHRoZSB2YWx1ZXMgb2YKKwkgKiB0aGUgZW51bWVyYXRpb24geGxhdF9yZWdpbWVfdC4gVGhlIHR5cGUgaXMgImludCIgdG8gYXZvaWQgYSBjaXJjdWxhcgorCSAqIGRlcGVuZGVuY3kgb24geGxhdF90YWJsZXNfdjIuaCwgYnV0IHRoaXMgbWVtYmVyIG11c3QgYmUgdHJlYXRlZCBhcworCSAqIHhsYXRfcmVnaW1lX3QuCiAJICovCi0JdWludDY0X3QgZXhlY3V0ZV9uZXZlcl9tYXNrOworCWludCB4bGF0X3JlZ2ltZTsKIH07CiAKICNpZiBQTEFUX1hMQVRfVEFCTEVTX0RZTkFNSUMKQEAgLTEwNiw5ICsxMjEsOSBAQAogCS8qIGRvIG5vdGhpbmcgKi8KICNlbmRpZiAvKiBQTEFUX1hMQVRfVEFCTEVTX0RZTkFNSUMgKi8KIAotCi0jZGVmaW5lIF9SRUdJU1RFUl9YTEFUX0NPTlRFWFQoX2N0eF9uYW1lLCBfbW1hcF9jb3VudCwgX3hsYXRfdGFibGVzX2NvdW50LAlcCi0JCQlfdmlydF9hZGRyX3NwYWNlX3NpemUsIF9waHlfYWRkcl9zcGFjZV9zaXplKQkJXAorI2RlZmluZSBfUkVHSVNURVJfWExBVF9DT05URVhUX0ZVTExfU1BFQyhfY3R4X25hbWUsIF9tbWFwX2NvdW50LCBfeGxhdF90YWJsZXNfY291bnQsCVwKKwkJCV92aXJ0X2FkZHJfc3BhY2Vfc2l6ZSwgX3BoeV9hZGRyX3NwYWNlX3NpemUsCQlcCisJCQlfeGxhdF9yZWdpbWUsIF9zZWN0aW9uX25hbWUpCQkJCVwKIAlDQVNTRVJUKENIRUNLX1ZJUlRfQUREUl9TUEFDRV9TSVpFKF92aXJ0X2FkZHJfc3BhY2Vfc2l6ZSksCQlcCiAJCWFzc2VydF9pbnZhbGlkX3ZpcnR1YWxfYWRkcl9zcGFjZV9zaXplX2Zvcl8jI19jdHhfbmFtZSk7CVwKIAkJCQkJCQkJCQlcCkBAIC0xMTksNyArMTM0LDcgQEAKIAkJCQkJCQkJCQlcCiAJc3RhdGljIHVpbnQ2NF90IF9jdHhfbmFtZSMjX3hsYXRfdGFibGVzW194bGF0X3RhYmxlc19jb3VudF0JCVwKIAkJW1hMQVRfVEFCTEVfRU5UUklFU10JCQkJCQlcCi0JCV9fYWxpZ25lZChYTEFUX1RBQkxFX1NJWkUpIF9fc2VjdGlvbigieGxhdF90YWJsZSIpOwkJXAorCQlfX2FsaWduZWQoWExBVF9UQUJMRV9TSVpFKSBfX3NlY3Rpb24oX3NlY3Rpb25fbmFtZSk7CQlcCiAJCQkJCQkJCQkJXAogCXN0YXRpYyB1aW50NjRfdCBfY3R4X25hbWUjI19iYXNlX3hsYXRfdGFibGUJCQkJXAogCQlbR0VUX05VTV9CQVNFX0xFVkVMX0VOVFJJRVMoX3ZpcnRfYWRkcl9zcGFjZV9zaXplKV0JCVwKQEAgLTE0MCwxMiArMTU1LDM4IEBACiAJCS50YWJsZXMgPSBfY3R4X25hbWUjI194bGF0X3RhYmxlcywJCQkJXAogCQkudGFibGVzX251bSA9IF94bGF0X3RhYmxlc19jb3VudCwJCQkJXAogCQkgX1JFR0lTVEVSX0RZTk1BUF9TVFJVQ1QoX2N0eF9uYW1lKQkJCQlcCisJCS54bGF0X3JlZ2ltZSA9IChfeGxhdF9yZWdpbWUpLAkJCQkJXAogCQkubWF4X3BhID0gMCwJCQkJCQkJXAogCQkubWF4X3ZhID0gMCwJCQkJCQkJXAogCQkubmV4dF90YWJsZSA9IDAsCQkJCQkJXAogCQkuaW5pdGlhbGl6ZWQgPSAwLAkJCQkJCVwKIAl9CiAKKyNpZiBBQVJDSDY0CisKKy8qCisgKiBUaGlzIElNQUdFX0VMIG1hY3JvIG11c3Qgbm90IHRvIGJlIHVzZWQgb3V0c2lkZSB0aGUgbGlicmFyeSwgYW5kIGl0IGlzIG9ubHkKKyAqIHVzZWQgaW4gQUFyY2g2NC4KKyAqLworI2lmIGRlZmluZWQoSU1BR0VfQkwxKSB8fCBkZWZpbmVkKElNQUdFX0JMMzEpCisjIGRlZmluZSBJTUFHRV9FTAkzCisjIGRlZmluZSBJTUFHRV9YTEFUX0RFRkFVTFRfUkVHSU1FIEVMM19SRUdJTUUKKyNlbHNlCisjIGRlZmluZSBJTUFHRV9FTAkxCisjIGRlZmluZSBJTUFHRV9YTEFUX0RFRkFVTFRfUkVHSU1FIEVMMV9FTDBfUkVHSU1FCisjZW5kaWYKKworI2Vsc2UgLyogaWYgQUFSQ0gzMiAqLworCisvKgorICogVGhlIFBMMSYwIHRyYW5zbGF0aW9uIHJlZ2ltZSBpbiBBQXJjaDMyIGJlaGF2ZXMgbGlrZSB0aGUgRUwxJjAgcmVnaW1lIGluCisgKiBBQXJjaDY0IGV4Y2VwdCBmb3IgdGhlIFhOIGJpdHMsIGJ1dCB3ZSBzZXQgYW5kIHVuc2V0IHRoZW0gYXQgdGhlIHNhbWUgdGltZSwKKyAqIHNvIHRoZXJlJ3Mgbm8gZGlmZmVyZW5jZSBpbiBwcmFjdGljZS4KKyAqLworI2RlZmluZSBJTUFHRV9YTEFUX0RFRkFVTFRfUkVHSU1FIEVMMV9FTDBfUkVHSU1FCisKKyNlbmRpZiAvKiBBQVJDSDY0ICovCisKICNlbmRpZiAvKl9fQVNTRU1CTFlfXyovCiAKICNlbmRpZiAvKiBfX1hMQVRfVEFCTEVTX1YyX0hFTFBFUlNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BsYXQvYXJtL2JvYXJkL2NvbW1vbi9ib2FyZF9hcm1fZGVmLmggYi9pbmNsdWRlL3BsYXQvYXJtL2JvYXJkL2NvbW1vbi9ib2FyZF9hcm1fZGVmLmgKaW5kZXggNzUxYzNiYi4uNjllYjcyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wbGF0L2FybS9ib2FyZC9jb21tb24vYm9hcmRfYXJtX2RlZi5oCisrKyBiL2luY2x1ZGUvcGxhdC9hcm0vYm9hcmQvY29tbW9uL2JvYXJkX2FybV9kZWYuaApAQCAtNTIsMTEgKzUyLDIxIEBACiAgKiBUaGV5IGFyZSBhbHNvIHVzZWQgZm9yIHRoZSBkeW5hbWljYWxseSBtYXBwZWQgcmVnaW9ucyBpbiB0aGUgaW1hZ2VzIHRoYXQKICAqIGVuYWJsZSBkeW5hbWljIG1lbW9yeSBtYXBwaW5nLgogICovCi0jaWYgZGVmaW5lZChJTUFHRV9CTDMxKSB8fCBkZWZpbmVkKElNQUdFX0JMMzIpCi0jIGRlZmluZSBQTEFUX0FSTV9NTUFQX0VOVFJJRVMJCTYKLSMgZGVmaW5lIE1BWF9YTEFUX1RBQkxFUwkJNAorI2lmIGRlZmluZWQoSU1BR0VfQkwzMSkKKyMgaWYgRU5BQkxFX1NQTQorIyAgZGVmaW5lIFBMQVRfQVJNX01NQVBfRU5UUklFUwkJOQorIyAgZGVmaW5lIE1BWF9YTEFUX1RBQkxFUwkJNworIyAgZGVmaW5lIFBMQVRfU1BfSU1BR0VfTU1BUF9SRUdJT05TCTcKKyMgIGRlZmluZSBQTEFUX1NQX0lNQUdFX01BWF9YTEFUX1RBQkxFUwkxMAorIyBlbHNlCisjICBkZWZpbmUgUExBVF9BUk1fTU1BUF9FTlRSSUVTCQk3CisjICBkZWZpbmUgTUFYX1hMQVRfVEFCTEVTCQk1CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKElNQUdFX0JMMzIpCisjIGRlZmluZSBQTEFUX0FSTV9NTUFQX0VOVFJJRVMJCTcKKyMgZGVmaW5lIE1BWF9YTEFUX1RBQkxFUwkJNQogI2Vsc2UKLSMgZGVmaW5lIFBMQVRfQVJNX01NQVBfRU5UUklFUwkJMTAKKyMgZGVmaW5lIFBMQVRfQVJNX01NQVBfRU5UUklFUwkJMTEKICMgZGVmaW5lIE1BWF9YTEFUX1RBQkxFUwkJNQogI2VuZGlmCiAKQEAgLTY0LDE0ICs3NCwxNCBAQAogICogUExBVF9BUk1fTUFYX0JMMV9SV19TSVpFIGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGN1cnJlbnQgQkwxIFJXIGRlYnVnIHNpemUKICAqIHBsdXMgYSBsaXR0bGUgc3BhY2UgZm9yIGdyb3d0aC4KICAqLwotI2RlZmluZSBQTEFUX0FSTV9NQVhfQkwxX1JXX1NJWkUJMHhBMDAwCisjZGVmaW5lIFBMQVRfQVJNX01BWF9CTDFfUldfU0laRQkweEIwMDAKIAogLyoKICAqIFBMQVRfQVJNX01BWF9CTDJfU0laRSBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBjdXJyZW50IEJMMiBkZWJ1ZyBzaXplIHBsdXMgYQogICogbGl0dGxlIHNwYWNlIGZvciBncm93dGguCiAgKi8KICNpZiBUUlVTVEVEX0JPQVJEX0JPT1QKLSMgZGVmaW5lIFBMQVRfQVJNX01BWF9CTDJfU0laRQkJMHgxRDAwMAorIyBkZWZpbmUgUExBVF9BUk1fTUFYX0JMMl9TSVpFCQkweDFFMDAwCiAjZWxzZQogIyBkZWZpbmUgUExBVF9BUk1fTUFYX0JMMl9TSVpFCQkweEYwMDAKICNlbmRpZgpAQCAtODIsNiArOTIsMTQgQEAKICAqLwogI2RlZmluZSBQTEFUX0FSTV9NQVhfQkwzMV9TSVpFCQkweDFEMDAwCiAKKyNpZmRlZiBBQVJDSDMyCisvKgorICogUExBVF9BUk1fTUFYX0JMMzJfU0laRSBpcyBjYWxjdWxhdGVkIGZvciBTUF9NSU4gYXMgdGhlIEFBcmNoMzIgU2VjdXJlCisgKiBQYXlsb2FkLgorICovCisjIGRlZmluZSBQTEFUX0FSTV9NQVhfQkwzMl9TSVpFCQkweDFEMDAwCisjZW5kaWYKKwogI2VuZGlmIC8qIEFSTV9CT0FSRF9PUFRJTUlTRV9NRU0gKi8KIAogI2RlZmluZSBNQVhfSU9fREVWSUNFUwkJCTMKQEAgLTg5LDExICsxMDcsMjYgQEAKIAogI2RlZmluZSBQTEFUX0FSTV9UUlVTVEVEX1NSQU1fU0laRQkweDAwMDQwMDAwCS8qIDI1NiBLQiAqLwogCisvKiBSZXNlcnZlIHRoZSBsYXN0IGJsb2NrIG9mIGZsYXNoIGZvciBQU0NJIE1FTSBQUk9URUNUIGZsYWcgKi8KICNkZWZpbmUgUExBVF9BUk1fRklQX0JBU0UJCVYyTV9GTEFTSDBfQkFTRQotI2RlZmluZSBQTEFUX0FSTV9GSVBfTUFYX1NJWkUJCVYyTV9GTEFTSDBfU0laRQorI2RlZmluZSBQTEFUX0FSTV9GSVBfTUFYX1NJWkUJCShWMk1fRkxBU0gwX1NJWkUgLSBWMk1fRkxBU0hfQkxPQ0tfU0laRSkKIAogI2RlZmluZSBQTEFUX0FSTV9OVk1fQkFTRQkJVjJNX0ZMQVNIMF9CQVNFCi0jZGVmaW5lIFBMQVRfQVJNX05WTV9TSVpFCQlWMk1fRkxBU0gwX1NJWkUKKyNkZWZpbmUgUExBVF9BUk1fTlZNX1NJWkUJCShWMk1fRkxBU0gwX1NJWkUgLSBWMk1fRkxBU0hfQkxPQ0tfU0laRSkKIAorLyogUFNDSSBtZW1vcnkgcHJvdGVjdCBkZWZpbml0aW9uczoKKyAqIFRoaXMgdmFyaWFibGUgaXMgc3RvcmVkIGluIGEgbm9uLXNlY3VyZSBmbGFzaCBiZWNhdXNlIHNvbWUgQVJNIHJlZmVyZW5jZQorICogcGxhdGZvcm1zIGRvIG5vdCBoYXZlIHNlY3VyZSBOVlJBTS4gUmVhbCBzeXN0ZW1zIHRoYXQgcHJvdmlkZWQgTUVNX1BST1RFQ1QKKyAqIHN1cHBvcnQgbXVzdCB1c2UgYSBzZWN1cmUgTlZSQU0gdG8gc3RvcmUgdGhlIFBTQ0kgTUVNX1BST1RFQ1QgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUgUExBVF9BUk1fTUVNX1BST1RfQUREUgkJKFYyTV9GTEFTSDBfQkFTRSArIFwKKwkJCQkJIFYyTV9GTEFTSDBfU0laRSAtIFYyTV9GTEFTSF9CTE9DS19TSVpFKQorCisvKgorICogTWFwIG1lbV9wcm90ZWN0IGZsYXNoIHJlZ2lvbiB3aXRoIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zCisgKi8KKyNkZWZpbmUgQVJNX1YyTV9NQVBfTUVNX1BST1RFQ1QJCU1BUF9SRUdJT05fRkxBVChQTEFUX0FSTV9NRU1fUFJPVF9BRERSLAlcCisJCQkJCQlWMk1fRkxBU0hfQkxPQ0tfU0laRSwJCVwKKwkJCQkJCU1UX0RFVklDRSB8IE1UX1JXIHwgTVRfU0VDVVJFKQogCiAjZW5kaWYgLyogX19CT0FSRF9BUk1fREVGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wbGF0L2FybS9ib2FyZC9jb21tb24vdjJtX2RlZi5oIGIvaW5jbHVkZS9wbGF0L2FybS9ib2FyZC9jb21tb24vdjJtX2RlZi5oCmluZGV4IDJhZDUxM2EuLmU1ZjUzNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGxhdC9hcm0vYm9hcmQvY29tbW9uL3YybV9kZWYuaAorKysgYi9pbmNsdWRlL3BsYXQvYXJtL2JvYXJkL2NvbW1vbi92Mm1fZGVmLmgKQEAgLTY5LDYgKzY5LDcgQEAKIC8qIE5PUiBGbGFzaCAqLwogI2RlZmluZSBWMk1fRkxBU0gwX0JBU0UJCQkweDA4MDAwMDAwCiAjZGVmaW5lIFYyTV9GTEFTSDBfU0laRQkJCTB4MDQwMDAwMDAKKyNkZWZpbmUgVjJNX0ZMQVNIX0JMT0NLX1NJWkUJCTB4MDAwNDAwMDAJLyogMjU2IEtCICovCiAKICNkZWZpbmUgVjJNX0lPRlBHQV9CQVNFCQkJMHgxYzAwMDAwMAogI2RlZmluZSBWMk1fSU9GUEdBX1NJWkUJCQkweDAzMDAwMDAwCkBAIC0xMjAsNiArMTIxLDExIEBACiAJCQkJCQlWMk1fSU9GUEdBX1NJWkUsCQlcCiAJCQkJCQlNVF9ERVZJQ0UgfCBNVF9SVyB8IE1UX1NFQ1VSRSkKIAorLyogUmVnaW9uIGVxdWl2YWxlbnQgdG8gVjJNX01BUF9JT0ZQR0Egc3VpdGFibGUgZm9yIG1hcHBpbmcgYXQgRUwwICovCisjZGVmaW5lIFYyTV9NQVBfSU9GUEdBX0VMMAkJTUFQX1JFR0lPTl9GTEFUKAkJXAorCQkJCQkJVjJNX0lPRlBHQV9CQVNFLAlcCisJCQkJCQlWMk1fSU9GUEdBX1NJWkUsCVwKKwkJCQkJCU1UX0RFVklDRSB8IE1UX1JXIHwgTVRfU0VDVVJFIHwgTVRfVVNFUikKIAogCiAjZW5kaWYgLyogX19WMk1fREVGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wbGF0L2FybS9jb21tb24vYXJtX2NvbW1vbi5sZC5TIGIvaW5jbHVkZS9wbGF0L2FybS9jb21tb24vYXJtX2NvbW1vbi5sZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZGZhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3BsYXQvYXJtL2NvbW1vbi9hcm1fY29tbW9uLmxkLlMKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKyNpZm5kZWYgX19BUk1fQ09NTU9OX0xEX1NfXworI2RlZmluZSBfX0FSTV9DT01NT05fTERfU19fCisKKyNpbmNsdWRlIDx4bGF0X3RhYmxlc19kZWZzLmg+CisKK01FTU9SWSB7CisgICAgRUwzX1NFQ19EUkFNIChydyk6IE9SSUdJTiA9IEFSTV9FTDNfVFpDX0RSQU0xX0JBU0UsIExFTkdUSCA9IEFSTV9FTDNfVFpDX0RSQU0xX1NJWkUKK30KKworU0VDVElPTlMKK3sKKwkuID0gQVJNX0VMM19UWkNfRFJBTTFfQkFTRTsKKwlBU1NFUlQoLiA9PSBBTElHTihQQUdFX1NJWkUpLAorCSJBUk1fRUwzX1RaQ19EUkFNX0JBU0UgYWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIHBhZ2UgYm91bmRhcnkuIikKKwllbDNfdHpjX2RyYW0gKE5PTE9BRCkgOiBBTElHTihQQUdFX1NJWkUpIHsKKwlfX0VMM19TRUNfRFJBTV9TVEFSVF9fID0gLjsKKwkqKGFybV9lbDNfdHpjX2RyYW0pCisJX19FTDNfU0VDX0RSQU1fVU5BTElHTkVEX0VORF9fID0gLjsKKworCS4gPSBORVhUKFBBR0VfU0laRSk7CisJX19FTDNfU0VDX0RSQU1fRU5EX18gPSAuOworCX0gPkVMM19TRUNfRFJBTQorfQorCisjZW5kaWYgLyogX19BUk1fQ09NTU9OX0xEX1NfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wbGF0L2FybS9jb21tb24vYXJtX2RlZi5oIGIvaW5jbHVkZS9wbGF0L2FybS9jb21tb24vYXJtX2RlZi5oCmluZGV4IDc4N2NjYjAuLjc4ODc1MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGxhdC9hcm0vY29tbW9uL2FybV9kZWYuaAorKysgYi9pbmNsdWRlL3BsYXQvYXJtL2NvbW1vbi9hcm1fZGVmLmgKQEAgLTgsNiArOCw4IEBACiAKICNpbmNsdWRlIDxhcmNoLmg+CiAjaW5jbHVkZSA8Y29tbW9uX2RlZi5oPgorI2luY2x1ZGUgPGdpY19jb21tb24uaD4KKyNpbmNsdWRlIDxpbnRlcnJ1cHRfcHJvcHMuaD4KICNpbmNsdWRlIDxwbGF0Zm9ybV9kZWYuaD4KICNpbmNsdWRlIDx0YmJyX2ltZ19kZWYuaD4KICNpbmNsdWRlIDx1dGlsc19kZWYuaD4KQEAgLTc1LDExICs3NywyMyBAQAogI2RlZmluZSBBUk1fU0NQX1RaQ19EUkFNMV9FTkQJCShBUk1fU0NQX1RaQ19EUkFNMV9CQVNFICsJXAogCQkJCQkgQVJNX1NDUF9UWkNfRFJBTTFfU0laRSAtIDEpCiAKKy8qCisgKiBEZWZpbmUgYSAyTUIgcmVnaW9uIHdpdGhpbiB0aGUgVFpDIHNlY3VyZWQgRFJBTSBmb3IgdXNlIGJ5IEVMMyBydW50aW1lCisgKiBmaXJtd2FyZS4gVGhpcyByZWdpb24gaXMgbWVhbnQgdG8gYmUgTk9MT0FEIGFuZCB3aWxsIG5vdCBiZSB6ZXJvCisgKiBpbml0aWFsaXplZC4gRGF0YSBzZWN0aW9ucyB3aXRoIHRoZSBhdHRyaWJ1dGUgYGFybV9lbDNfdHpjX2RyYW1gIHdpbGwgYmUKKyAqIHBsYWNlZCBoZXJlLgorICovCisjZGVmaW5lIEFSTV9FTDNfVFpDX0RSQU0xX0JBU0UJCShBUk1fU0NQX1RaQ19EUkFNMV9CQVNFIC0gQVJNX0VMM19UWkNfRFJBTTFfU0laRSkKKyNkZWZpbmUgQVJNX0VMM19UWkNfRFJBTTFfU0laRQkJVUxMKDB4MDAyMDAwMDApIC8qIDIgTUIgKi8KKyNkZWZpbmUgQVJNX0VMM19UWkNfRFJBTTFfRU5ECQkoQVJNX0VMM19UWkNfRFJBTTFfQkFTRSArCVwKKwkJCQkJQVJNX0VMM19UWkNfRFJBTTFfU0laRSAtIDEpCisKICNkZWZpbmUgQVJNX0FQX1RaQ19EUkFNMV9CQVNFCQkoQVJNX0RSQU0xX0JBU0UgKwkJXAogCQkJCQkgQVJNX0RSQU0xX1NJWkUgLQkJXAogCQkJCQkgQVJNX1RaQ19EUkFNMV9TSVpFKQogI2RlZmluZSBBUk1fQVBfVFpDX0RSQU0xX1NJWkUJCShBUk1fVFpDX0RSQU0xX1NJWkUgLQkJXAotCQkJCQkgQVJNX1NDUF9UWkNfRFJBTTFfU0laRSkKKwkJCQkJIChBUk1fU0NQX1RaQ19EUkFNMV9TSVpFICsJXAorCQkJCQkgQVJNX0VMM19UWkNfRFJBTTFfU0laRSkpCiAjZGVmaW5lIEFSTV9BUF9UWkNfRFJBTTFfRU5ECQkoQVJNX0FQX1RaQ19EUkFNMV9CQVNFICsJXAogCQkJCQkgQVJNX0FQX1RaQ19EUkFNMV9TSVpFIC0gMSkKIApAQCAtMTUyLDkgKzE2Niw4IEBACiAjZGVmaW5lIEFSTV9JUlFfU0VDX1NHSV83CQkxNQogCiAvKgotICogRGVmaW5lIGEgbGlzdCBvZiBHcm91cCAxIFNlY3VyZSBhbmQgR3JvdXAgMCBpbnRlcnJ1cHRzIGFzIHBlciBHSUN2MwotICogdGVybWlub2xvZ3kuIE9uIGEgR0lDdjIgc3lzdGVtIG9yIG1vZGUsIHRoZSBsaXN0cyB3aWxsIGJlIG1lcmdlZCBhbmQgdHJlYXRlZAotICogYXMgR3JvdXAgMCBpbnRlcnJ1cHRzLgorICogTGlzdCBvZiBzZWN1cmUgaW50ZXJydXB0cyBhcmUgZGVwcmVjYXRlZCwgYnV0IGFyZSByZXRhaW5lZCBvbmx5IHRvIHN1cHBvcnQKKyAqIGxlZ2FjeSBjb25maWd1cmF0aW9ucy4KICAqLwogI2RlZmluZSBBUk1fRzFTX0lSUVMJCQlBUk1fSVJRX1NFQ19QSFlfVElNRVIsCQlcCiAJCQkJCUFSTV9JUlFfU0VDX1NHSV8xLAkJXApAQCAtMTY3LDYgKzE4MCwzMyBAQAogI2RlZmluZSBBUk1fRzBfSVJRUwkJCUFSTV9JUlFfU0VDX1NHSV8wLAkJXAogCQkJCQlBUk1fSVJRX1NFQ19TR0lfNgogCisvKgorICogRGVmaW5lIGEgbGlzdCBvZiBHcm91cCAxIFNlY3VyZSBhbmQgR3JvdXAgMCBpbnRlcnJ1cHQgcHJvcGVydGllcyBhcyBwZXIgR0lDdjMKKyAqIHRlcm1pbm9sb2d5LiBPbiBhIEdJQ3YyIHN5c3RlbSBvciBtb2RlLCB0aGUgbGlzdHMgd2lsbCBiZSBtZXJnZWQgYW5kIHRyZWF0ZWQKKyAqIGFzIEdyb3VwIDAgaW50ZXJydXB0cy4KKyAqLworI2RlZmluZSBBUk1fRzFTX0lSUV9QUk9QUyhncnApIFwKKwlJTlRSX1BST1BfREVTQyhBUk1fSVJRX1NFQ19QSFlfVElNRVIsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfTEVWRUwpLCBcCisJSU5UUl9QUk9QX0RFU0MoQVJNX0lSUV9TRUNfU0dJXzEsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfRURHRSksIFwKKwlJTlRSX1BST1BfREVTQyhBUk1fSVJRX1NFQ19TR0lfMiwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19FREdFKSwgXAorCUlOVFJfUFJPUF9ERVNDKEFSTV9JUlFfU0VDX1NHSV8zLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0VER0UpLCBcCisJSU5UUl9QUk9QX0RFU0MoQVJNX0lSUV9TRUNfU0dJXzQsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfRURHRSksIFwKKwlJTlRSX1BST1BfREVTQyhBUk1fSVJRX1NFQ19TR0lfNSwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19FREdFKSwgXAorCUlOVFJfUFJPUF9ERVNDKEFSTV9JUlFfU0VDX1NHSV83LCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0VER0UpCisKKyNkZWZpbmUgQVJNX0cwX0lSUV9QUk9QUyhncnApIFwKKwlJTlRSX1BST1BfREVTQyhBUk1fSVJRX1NFQ19TR0lfMCwgUExBVF9TREVJX05PUk1BTF9QUkksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0VER0UpLCBcCisJSU5UUl9QUk9QX0RFU0MoQVJNX0lSUV9TRUNfU0dJXzYsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfRURHRSkKKwogI2RlZmluZSBBUk1fTUFQX1NIQVJFRF9SQU0JCU1BUF9SRUdJT05fRkxBVCgJCVwKIAkJCQkJCUFSTV9TSEFSRURfUkFNX0JBU0UsCVwKIAkJCQkJCUFSTV9TSEFSRURfUkFNX1NJWkUsCVwKQEAgLTE3Nyw3ICsyMTcsMTIgQEAKIAkJCQkJCUFSTV9OU19EUkFNMV9TSVpFLAlcCiAJCQkJCQlNVF9NRU1PUlkgfCBNVF9SVyB8IE1UX05TKQogCisjZGVmaW5lIEFSTV9NQVBfRFJBTTIJCQlNQVBfUkVHSU9OX0ZMQVQoCQlcCisJCQkJCQlBUk1fRFJBTTJfQkFTRSwJCVwKKwkJCQkJCUFSTV9EUkFNMl9TSVpFLAkJXAorCQkJCQkJTVRfTUVNT1JZIHwgTVRfUlcgfCBNVF9OUykKICNpZmRlZiBTUERfdHNwZAorCiAjZGVmaW5lIEFSTV9NQVBfVFNQX1NFQ19NRU0JCU1BUF9SRUdJT05fRkxBVCgJCVwKIAkJCQkJCVRTUF9TRUNfTUVNX0JBU0UsCVwKIAkJCQkJCVRTUF9TRUNfTUVNX1NJWkUsCVwKQEAgLTE5MSw2ICsyMzYsMTEgQEAKIAkJCQkJCU1UX01FTU9SWSB8IE1UX1JXIHwgTVRfU0VDVVJFKQogI2VuZGlmCiAKKyNkZWZpbmUgQVJNX01BUF9FTDNfVFpDX0RSQU0JCU1BUF9SRUdJT05fRkxBVCgJCQlcCisJCQkJCQlBUk1fRUwzX1RaQ19EUkFNMV9CQVNFLAlcCisJCQkJCQlBUk1fRUwzX1RaQ19EUkFNMV9TSVpFLAlcCisJCQkJCQlNVF9NRU1PUlkgfCBNVF9SVyB8IE1UX1NFQ1VSRSkKKwogLyoKICAqIFRoZSBudW1iZXIgb2YgcmVnaW9ucyBsaWtlIFJPKGNvZGUpLCBjb2hlcmVudCBhbmQgZGF0YSByZXF1aXJlZCBieQogICogZGlmZmVyZW50IEJMIHN0YWdlcyB3aGljaCBuZWVkIHRvIGJlIG1hcHBlZCBpbiB0aGUgTU1VLgpAQCAtMjI0LDggKzI3NCwxOCBAQAogICogUmVxdWlyZWQgcGxhdGZvcm0gcG9ydGluZyBkZWZpbml0aW9ucyBjb21tb24gdG8gYWxsIEFSTSBzdGFuZGFyZCBwbGF0Zm9ybXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyoKKyAqIFdlIG5lZWQgdG8gYWNjZXNzIERSQU0yIGZyb20gQkwyIGZvciBQU0NJX01FTV9QUk9URUNUIGZvcgorICogQUFyY2g2NCBidWlsZHMKKyAqLworI2lmZGVmIEFBUkNINjQKKyNkZWZpbmUgUExBVF9QSFlfQUREUl9TUEFDRV9TSVpFCQkJKDF1bGwgPDwgMzYpCisjZGVmaW5lIFBMQVRfVklSVF9BRERSX1NQQUNFX1NJWkUJCQkoMXVsbCA8PCAzNikKKyNlbHNlCiAjZGVmaW5lIFBMQVRfUEhZX0FERFJfU1BBQ0VfU0laRQkJCSgxdWxsIDw8IDMyKQogI2RlZmluZSBQTEFUX1ZJUlRfQUREUl9TUEFDRV9TSVpFCQkJKDF1bGwgPDwgMzIpCisjZW5kaWYKKwogCiAvKgogICogVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBkZWVwZXN0IHJldGVudGlvbiBzdGF0ZSBwb3NzaWJsZS4gQSBoaWdoZXIgc3RhdGUKQEAgLTI2NiwxNCArMzI2LDIxIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQkwyIHNwZWNpZmljIGRlZmluZXMuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIEFSTV9CTDMxX0lOX0RSQU0gfHwgKGRlZmluZWQoQUFSQ0gzMikgJiYgIWRlZmluZWQoSlVOT19BQVJDSDMyX0VMM19SVU5USU1FKSkKKyNpZiBBUk1fQkwzMV9JTl9EUkFNCiAvKgotICogRm9yIEFBcmNoMzIgQkwzMSBpcyBub3QgYXBwbGljYWJsZS4KICAqIEZvciBBQXJjaDY0IEJMMzEgaXMgbG9hZGVkIGluIHRoZSBEUkFNLgogICogUHV0IEJMMiBqdXN0IGJlbG93IEJMMS4KICAqLwogI2RlZmluZSBCTDJfQkFTRQkJCShCTDFfUldfQkFTRSAtIFBMQVRfQVJNX01BWF9CTDJfU0laRSkKICNkZWZpbmUgQkwyX0xJTUlUCQkJQkwxX1JXX0JBU0UKKworI2VsaWYgZGVmaW5lZChBQVJDSDMyKSB8fCBKVU5PX0FBUkNIMzJfRUwzX1JVTlRJTUUKKy8qCisgKiBQdXQgQkwyIGp1c3QgYmVsb3cgQkwzMi4KKyAqLworI2RlZmluZSBCTDJfQkFTRQkJCShCTDMyX0JBU0UgLSBQTEFUX0FSTV9NQVhfQkwyX1NJWkUpCisjZGVmaW5lIEJMMl9MSU1JVAkJCUJMMzJfQkFTRQorCiAjZWxzZQogLyoKICAqIFB1dCBCTDIganVzdCBiZWxvdyBCTDMxLgpAQCAtMzEwLDY3ICszNzcsODYgQEAKICNkZWZpbmUgQkwzMV9MSU1JVAkJCShBUk1fQkxfUkFNX0JBU0UgKyBBUk1fQkxfUkFNX1NJWkUpCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQUFSQ0gzMikgfHwgSlVOT19BQVJDSDMyX0VMM19SVU5USU1FCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQkwzMiBzcGVjaWZpYyBkZWZpbmVzLgorICogQkwzMiBzcGVjaWZpYyBkZWZpbmVzIGZvciBFTDMgcnVudGltZSBpbiBBQXJjaDMyIG1vZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjIGlmIFJFU0VUX1RPX1NQX01JTiAmJiAhSlVOT19BQVJDSDMyX0VMM19SVU5USU1FCisvKiBTUF9NSU4gaXMgdGhlIG9ubHkgQkwgaW1hZ2UgaW4gU1JBTS4gQWxsb2NhdGUgdGhlIHdob2xlIG9mIFNSQU0gdG8gQkwzMiAqLworIyAgZGVmaW5lIEJMMzJfQkFTRQkJCUFSTV9CTF9SQU1fQkFTRQorIyAgZGVmaW5lIEJMMzJfTElNSVQJCQkoQVJNX0JMX1JBTV9CQVNFICsgQVJNX0JMX1JBTV9TSVpFKQorIyBlbHNlCisvKiBQdXQgQkwzMiBhdCB0aGUgdG9wIG9mIHRoZSBUcnVzdGVkIFNSQU0uKi8KKyMgIGRlZmluZSBCTDMyX0JBU0UJCQkoQVJNX0JMX1JBTV9CQVNFICsJCVwKKwkJCQkJCUFSTV9CTF9SQU1fU0laRSAtCVwKKwkJCQkJCVBMQVRfQVJNX01BWF9CTDMyX1NJWkUpCisjICBkZWZpbmUgQkwzMl9QUk9HQklUU19MSU1JVAkJQkwxX1JXX0JBU0UKKyMgIGRlZmluZSBCTDMyX0xJTUlUCQkJKEFSTV9CTF9SQU1fQkFTRSArIEFSTV9CTF9SQU1fU0laRSkKKyMgZW5kaWYgLyogUkVTRVRfVE9fU1BfTUlOICYmICFKVU5PX0FBUkNIMzJfRUwzX1JVTlRJTUUgKi8KKworI2Vsc2UKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCTDMyIHNwZWNpZmljIGRlZmluZXMgZm9yIEVMMyBydW50aW1lIGluIEFBcmNoNjQgbW9kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBPbiBBUk0gc3RhbmRhcmQgcGxhdGZvcm1zLCB0aGUgVFNQIGNhbiBleGVjdXRlIGZyb20gVHJ1c3RlZCBTUkFNLAogICogVHJ1c3RlZCBEUkFNIChpZiBhdmFpbGFibGUpIG9yIHRoZSBEUkFNIHJlZ2lvbiBzZWN1cmVkIGJ5IHRoZSBUcnVzdFpvbmUKICAqIGNvbnRyb2xsZXIuCiAgKi8KLSNpZiBBUk1fQkwzMV9JTl9EUkFNCi0jIGRlZmluZSBUU1BfU0VDX01FTV9CQVNFCQkoQVJNX0FQX1RaQ19EUkFNMV9CQVNFICsJXAotCQkJCQkJUExBVF9BUk1fTUFYX0JMMzFfU0laRSkKLSMgZGVmaW5lIFRTUF9TRUNfTUVNX1NJWkUJCShBUk1fQVBfVFpDX0RSQU0xX1NJWkUgLQlcCi0JCQkJCQlQTEFUX0FSTV9NQVhfQkwzMV9TSVpFKQotIyBkZWZpbmUgQkwzMl9CQVNFCQkJKEFSTV9BUF9UWkNfRFJBTTFfQkFTRSArCVwKLQkJCQkJCVBMQVRfQVJNX01BWF9CTDMxX1NJWkUpCi0jIGRlZmluZSBCTDMyX0xJTUlUCQkJKEFSTV9BUF9UWkNfRFJBTTFfQkFTRSArCVwKKyMgaWYgRU5BQkxFX1NQTQorIyAgZGVmaW5lIFRTUF9TRUNfTUVNX0JBU0UJCShBUk1fQVBfVFpDX0RSQU0xX0JBU0UgKyBVTEwoMHgyMDAwMDApKQorIyAgZGVmaW5lIFRTUF9TRUNfTUVNX1NJWkUJCShBUk1fQVBfVFpDX0RSQU0xX1NJWkUgLSBVTEwoMHgyMDAwMDApKQorIyAgZGVmaW5lIEJMMzJfQkFTRQkJCShBUk1fQVBfVFpDX0RSQU0xX0JBU0UgKyBVTEwoMHgyMDAwMDApKQorIyAgZGVmaW5lIEJMMzJfTElNSVQJCQkoQVJNX0FQX1RaQ19EUkFNMV9CQVNFICsJXAogCQkJCQkJQVJNX0FQX1RaQ19EUkFNMV9TSVpFKQotI2VsaWYgQVJNX1RTUF9SQU1fTE9DQVRJT05fSUQgPT0gQVJNX1RSVVNURURfU1JBTV9JRAotIyBkZWZpbmUgVFNQX1NFQ19NRU1fQkFTRQkJQVJNX0JMX1JBTV9CQVNFCi0jIGRlZmluZSBUU1BfU0VDX01FTV9TSVpFCQlBUk1fQkxfUkFNX1NJWkUKLSMgZGVmaW5lIFRTUF9QUk9HQklUU19MSU1JVAkJQkwyX0JBU0UKLSMgZGVmaW5lIEJMMzJfQkFTRQkJCUFSTV9CTF9SQU1fQkFTRQotIyBkZWZpbmUgQkwzMl9MSU1JVAkJCUJMMzFfQkFTRQotI2VsaWYgQVJNX1RTUF9SQU1fTE9DQVRJT05fSUQgPT0gQVJNX1RSVVNURURfRFJBTV9JRAotIyBkZWZpbmUgVFNQX1NFQ19NRU1fQkFTRQkJUExBVF9BUk1fVFJVU1RFRF9EUkFNX0JBU0UKLSMgZGVmaW5lIFRTUF9TRUNfTUVNX1NJWkUJCVBMQVRfQVJNX1RSVVNURURfRFJBTV9TSVpFCi0jIGRlZmluZSBCTDMyX0JBU0UJCQlQTEFUX0FSTV9UUlVTVEVEX0RSQU1fQkFTRQotIyBkZWZpbmUgQkwzMl9MSU1JVAkJCShQTEFUX0FSTV9UUlVTVEVEX0RSQU1fQkFTRQlcCisjIGVsaWYgQVJNX0JMMzFfSU5fRFJBTQorIyAgZGVmaW5lIFRTUF9TRUNfTUVNX0JBU0UJCShBUk1fQVBfVFpDX0RSQU0xX0JBU0UgKwlcCisJCQkJCQlQTEFUX0FSTV9NQVhfQkwzMV9TSVpFKQorIyAgZGVmaW5lIFRTUF9TRUNfTUVNX1NJWkUJCShBUk1fQVBfVFpDX0RSQU0xX1NJWkUgLQlcCisJCQkJCQlQTEFUX0FSTV9NQVhfQkwzMV9TSVpFKQorIyAgZGVmaW5lIEJMMzJfQkFTRQkJCShBUk1fQVBfVFpDX0RSQU0xX0JBU0UgKwlcCisJCQkJCQlQTEFUX0FSTV9NQVhfQkwzMV9TSVpFKQorIyAgZGVmaW5lIEJMMzJfTElNSVQJCQkoQVJNX0FQX1RaQ19EUkFNMV9CQVNFICsJXAorCQkJCQkJQVJNX0FQX1RaQ19EUkFNMV9TSVpFKQorIyBlbGlmIEFSTV9UU1BfUkFNX0xPQ0FUSU9OX0lEID09IEFSTV9UUlVTVEVEX1NSQU1fSUQKKyMgIGRlZmluZSBUU1BfU0VDX01FTV9CQVNFCQlBUk1fQkxfUkFNX0JBU0UKKyMgIGRlZmluZSBUU1BfU0VDX01FTV9TSVpFCQlBUk1fQkxfUkFNX1NJWkUKKyMgIGRlZmluZSBUU1BfUFJPR0JJVFNfTElNSVQJCUJMMl9CQVNFCisjICBkZWZpbmUgQkwzMl9CQVNFCQkJQVJNX0JMX1JBTV9CQVNFCisjICBkZWZpbmUgQkwzMl9MSU1JVAkJCUJMMzFfQkFTRQorIyBlbGlmIEFSTV9UU1BfUkFNX0xPQ0FUSU9OX0lEID09IEFSTV9UUlVTVEVEX0RSQU1fSUQKKyMgIGRlZmluZSBUU1BfU0VDX01FTV9CQVNFCQlQTEFUX0FSTV9UUlVTVEVEX0RSQU1fQkFTRQorIyAgZGVmaW5lIFRTUF9TRUNfTUVNX1NJWkUJCVBMQVRfQVJNX1RSVVNURURfRFJBTV9TSVpFCisjICBkZWZpbmUgQkwzMl9CQVNFCQkJUExBVF9BUk1fVFJVU1RFRF9EUkFNX0JBU0UKKyMgIGRlZmluZSBCTDMyX0xJTUlUCQkJKFBMQVRfQVJNX1RSVVNURURfRFJBTV9CQVNFCVwKIAkJCQkJCSsgKDEgPDwgMjEpKQotI2VsaWYgQVJNX1RTUF9SQU1fTE9DQVRJT05fSUQgPT0gQVJNX0RSQU1fSUQKLSMgZGVmaW5lIFRTUF9TRUNfTUVNX0JBU0UJCUFSTV9BUF9UWkNfRFJBTTFfQkFTRQotIyBkZWZpbmUgVFNQX1NFQ19NRU1fU0laRQkJQVJNX0FQX1RaQ19EUkFNMV9TSVpFCi0jIGRlZmluZSBCTDMyX0JBU0UJCQlBUk1fQVBfVFpDX0RSQU0xX0JBU0UKLSMgZGVmaW5lIEJMMzJfTElNSVQJCQkoQVJNX0FQX1RaQ19EUkFNMV9CQVNFICsJXAorIyBlbGlmIEFSTV9UU1BfUkFNX0xPQ0FUSU9OX0lEID09IEFSTV9EUkFNX0lECisjICBkZWZpbmUgVFNQX1NFQ19NRU1fQkFTRQkJQVJNX0FQX1RaQ19EUkFNMV9CQVNFCisjICBkZWZpbmUgVFNQX1NFQ19NRU1fU0laRQkJQVJNX0FQX1RaQ19EUkFNMV9TSVpFCisjICBkZWZpbmUgQkwzMl9CQVNFCQkJQVJNX0FQX1RaQ19EUkFNMV9CQVNFCisjICBkZWZpbmUgQkwzMl9MSU1JVAkJCShBUk1fQVBfVFpDX0RSQU0xX0JBU0UgKwlcCiAJCQkJCQlBUk1fQVBfVFpDX0RSQU0xX1NJWkUpCi0jZWxzZQotIyBlcnJvciAiVW5zdXBwb3J0ZWQgQVJNX1RTUF9SQU1fTE9DQVRJT05fSUQgdmFsdWUiCi0jZW5kaWYKKyMgZWxzZQorIyAgZXJyb3IgIlVuc3VwcG9ydGVkIEFSTV9UU1BfUkFNX0xPQ0FUSU9OX0lEIHZhbHVlIgorIyBlbmRpZgorI2VuZGlmIC8qIEFBUkNIMzIgfHwgSlVOT19BQVJDSDMyX0VMM19SVU5USU1FICovCiAKLS8qIEJMMzIgaXMgbWFuZGF0b3J5IGluIEFBcmNoMzIgKi8KLSNpZm5kZWYgQUFSQ0gzMgotI2lmZGVmIFNQRF9ub25lCi0jdW5kZWYgQkwzMl9CQVNFCi0jZW5kaWYgLyogU1BEX25vbmUgKi8KLSNlbmRpZgorLyoKKyAqIEJMMzIgaXMgbWFuZGF0b3J5IGluIEFBcmNoMzIuIEluIEFBcmNoNjQsIHVuZGVmaW5lIEJMMzJfQkFTRSBpZiB0aGVyZSBpcyBubworICogU1BEIGFuZCBubyBTUE0sIGFzIHRoZXkgYXJlIHRoZSBvbmx5IG9uZXMgdGhhdCBjYW4gYmUgdXNlZCBhcyBCTDMyLgorICovCisjaWYgIShkZWZpbmVkKEFBUkNIMzIpIHx8IEpVTk9fQUFSQ0gzMl9FTDNfUlVOVElNRSkKKyMgaWYgZGVmaW5lZChTUERfbm9uZSkgJiYgIUVOQUJMRV9TUE0KKyMgIHVuZGVmIEJMMzJfQkFTRQorIyBlbmRpZiAvKiBkZWZpbmVkKFNQRF9ub25lKSAmJiAhRU5BQkxFX1NQTSAqLworI2VuZGlmIC8qICEoZGVmaW5lZChBQVJDSDMyKSB8fCBKVU5PX0FBUkNIMzJfRUwzX1JVTlRJTUUpICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBGV1UgSW1hZ2VzOiBOU19CTDFVLCBCTDJVICYgTlNfQkwyVSBkZWZpbmVzLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgQkwyVV9CQVNFCQkJQkwyX0JBU0UKLSNpZiBBUk1fQkwzMV9JTl9EUkFNIHx8IChkZWZpbmVkKEFBUkNIMzIpICYmICFkZWZpbmVkKEpVTk9fQUFSQ0gzMl9FTDNfUlVOVElNRSkpCi0vKgotICogRm9yIEFBcmNoMzIgQkwzMSBpcyBub3QgYXBwbGljYWJsZS4KLSAqIEZvciBBQXJjaDY0IEJMMzEgaXMgbG9hZGVkIGluIHRoZSBEUkFNLgotICogQkwyVSBleHRlbmRzIHVwIHRvIEJMMS4KLSAqLwotI2RlZmluZSBCTDJVX0xJTUlUCQkJQkwxX1JXX0JBU0UKLSNlbHNlCi0vKiBCTDJVIGV4dGVuZHMgdXAgdG8gQkwzMS4gKi8KLSNkZWZpbmUgQkwyVV9MSU1JVAkJCUJMMzFfQkFTRQotI2VuZGlmCisjZGVmaW5lIEJMMlVfTElNSVQJCQlCTDJfTElNSVQKKwogI2RlZmluZSBOU19CTDJVX0JBU0UJCQlBUk1fTlNfRFJBTTFfQkFTRQogI2RlZmluZSBOU19CTDFVX0JBU0UJCQkoUExBVF9BUk1fTlZNX0JBU0UgKyAweDAzRUI4MDAwKQogCkBAIC0zODUsNSArNDcxLDI0IEBACiAgKi8KICNkZWZpbmUgUExBVF9QRVJDUFVfQkFLRVJZX0xPQ0tfU0laRQkJKDEgKiBDQUNIRV9XUklURUJBQ0tfR1JBTlVMRSkKIAorLyogUHJpb3JpdHkgbGV2ZWxzIGZvciBBUk0gcGxhdGZvcm1zICovCisjZGVmaW5lIFBMQVRfU0RFSV9DUklUSUNBTF9QUkkJCTB4NjAKKyNkZWZpbmUgUExBVF9TREVJX05PUk1BTF9QUkkJCTB4NzAKKworLyogQVJNIHBsYXRmb3JtcyB1c2UgMyB1cHBlciBiaXRzIG9mIHNlY3VyZSBpbnRlcnJ1cHQgcHJpb3JpdHkgKi8KKyNkZWZpbmUgQVJNX1BSSV9CSVRTCQkJMworCisvKiBTR0kgdXNlZCBmb3IgU0RFSSBzaWduYWxsaW5nICovCisjZGVmaW5lIEFSTV9TREVJX1NHSQkJCUFSTV9JUlFfU0VDX1NHSV8wCisKKy8qIEFSTSBTREVJIGR5bmFtaWMgcHJpdmF0ZSBldmVudCBudW1iZXJzICovCisjZGVmaW5lIEFSTV9TREVJX0RQX0VWRU5UXzAJCTEwMDAKKyNkZWZpbmUgQVJNX1NERUlfRFBfRVZFTlRfMQkJMTAwMQorI2RlZmluZSBBUk1fU0RFSV9EUF9FVkVOVF8yCQkxMDAyCisKKy8qIEFSTSBTREVJIGR5bmFtaWMgc2hhcmVkIGV2ZW50IG51bWJlcnMgKi8KKyNkZWZpbmUgQVJNX1NERUlfRFNfRVZFTlRfMAkJMjAwMAorI2RlZmluZSBBUk1fU0RFSV9EU19FVkVOVF8xCQkyMDAxCisjZGVmaW5lIEFSTV9TREVJX0RTX0VWRU5UXzIJCTIwMDIKIAogI2VuZGlmIC8qIF9fQVJNX0RFRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGxhdC9hcm0vY29tbW9uL2FybV9zcG1fZGVmLmggYi9pbmNsdWRlL3BsYXQvYXJtL2NvbW1vbi9hcm1fc3BtX2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNWM5NTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3BsYXQvYXJtL2NvbW1vbi9hcm1fc3BtX2RlZi5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworI2lmbmRlZiBfX0FSTV9TUE1fREVGX0hfXworI2RlZmluZSBfX0FSTV9TUE1fREVGX0hfXworCisjaW5jbHVkZSA8YXJtX2RlZi5oPgorI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgorI2luY2x1ZGUgPHV0aWxzX2RlZi5oPgorI2luY2x1ZGUgPHhsYXRfdGFibGVzX2RlZnMuaD4KKworLyoKKyAqIElmIEJMMzEgaXMgcGxhY2VkIGluIERSQU0sIHBsYWNlIHRoZSBTZWN1cmUgUGFydGl0aW9uIGluIERSQU0gcmlnaHQgYWZ0ZXIgdGhlCisgKiByZWdpb24gdXNlZCBieSBCTDMxLiBJZiBCTDMxIGl0IGlzIHBsYWNlZCBpbiBTUkFNLCBwdXQgdGhlIFNlY3VyZSBQYXJ0aXRpb24KKyAqIGF0IHRoZSBiYXNlIG9mIERSQU0uCisgKi8KKyNkZWZpbmUgQVJNX1NQX0lNQUdFX0JBU0UJCUJMMzJfQkFTRQorI2RlZmluZSBBUk1fU1BfSU1BR0VfTElNSVQJCUJMMzJfTElNSVQKKy8qIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIFMtRUwwIHBheWxvYWQgY2FuIGJlIDNNQiAqLworI2RlZmluZSBBUk1fU1BfSU1BR0VfU0laRQkJVUxMKDB4MzAwMDAwKQorCisjaWZkZWYgSU1BR0VfQkwyCisvKiBTUE0gUGF5bG9hZCBtZW1vcnkuIE1hcHBlZCBhcyBSVyBpbiBCTDIuICovCisjZGVmaW5lIEFSTV9TUF9JTUFHRV9NTUFQCQlNQVBfUkVHSU9OX0ZMQVQoCQkJXAorCQkJCQkJQVJNX1NQX0lNQUdFX0JBU0UsCQlcCisJCQkJCQlBUk1fU1BfSU1BR0VfU0laRSwJCVwKKwkJCQkJCU1UX01FTU9SWSB8IE1UX1JXIHwgTVRfU0VDVVJFKQorI2VuZGlmCisjaWZkZWYgSU1BR0VfQkwzMQorLyogU1BNIFBheWxvYWQgbWVtb3J5LiBNYXBwZWQgYXMgY29kZSBpbiBTLUVMMSAqLworI2RlZmluZSBBUk1fU1BfSU1BR0VfTU1BUAkJTUFQX1JFR0lPTjIoCQkJCVwKKwkJCQkJCUFSTV9TUF9JTUFHRV9CQVNFLAkJXAorCQkJCQkJQVJNX1NQX0lNQUdFX0JBU0UsCQlcCisJCQkJCQlBUk1fU1BfSU1BR0VfU0laRSwJCVwKKwkJCQkJCU1UX0NPREUgfCBNVF9TRUNVUkUgfCBNVF9VU0VSLAlcCisJCQkJCQlQQUdFX1NJWkUpCisjZW5kaWYKKworLyoKKyAqIE1lbW9yeSBzaGFyZWQgYmV0d2VlbiBFTDMgYW5kIFMtRUwwLiBJdCBpcyB1c2VkIGJ5IEVMMyB0byBwdXNoIGRhdGEgaW50bworICogUy1FTDAsIHNvIGl0IGlzIG1hcHBlZCB3aXRoIFJXIHBlcm1pc3Npb24gZnJvbSBFTDMgYW5kIHdpdGggUk8gcGVybWlzc2lvbgorICogZnJvbSBTLUVMMC4gUGxhY2VkIGFmdGVyIFNQTSBQYXlsb2FkIG1lbW9yeS4KKyAqLworI2RlZmluZSBQTEFUX1NQTV9CVUZfQkFTRQkJKEFSTV9TUF9JTUFHRV9CQVNFICsgQVJNX1NQX0lNQUdFX1NJWkUpCisjZGVmaW5lIFBMQVRfU1BNX0JVRl9TSVpFCQlVTEwoMHgxMDAwMDApCisKKyNkZWZpbmUgQVJNX1NQTV9CVUZfRUwzX01NQVAJCU1BUF9SRUdJT05fRkxBVCgJCQlcCisJCQkJCQlQTEFUX1NQTV9CVUZfQkFTRSwJCVwKKwkJCQkJCVBMQVRfU1BNX0JVRl9TSVpFLAkJXAorCQkJCQkJTVRfUldfREFUQSB8IE1UX1NFQ1VSRSkKKyNkZWZpbmUgQVJNX1NQTV9CVUZfRUwwX01NQVAJCU1BUF9SRUdJT04yKAkJCVwKKwkJCQkJCVBMQVRfU1BNX0JVRl9CQVNFLAkJXAorCQkJCQkJUExBVF9TUE1fQlVGX0JBU0UsCQlcCisJCQkJCQlQTEFUX1NQTV9CVUZfU0laRSwJCVwKKwkJCQkJCU1UX1JPX0RBVEEgfCBNVF9TRUNVUkUgfCBNVF9VU0VSLFwKKwkJCQkJCVBBR0VfU0laRSkKKworLyoKKyAqIE1lbW9yeSBzaGFyZWQgYmV0d2VlbiBOb3JtYWwgd29ybGQgYW5kIFMtRUwwIGZvciBwYXNzaW5nIGRhdGEgZHVyaW5nIHNlcnZpY2UKKyAqIHJlcXVlc3RzLiBNYXBwZWQgYXMgUlcgYW5kIE5TLiBQbGFjZWQgYWZ0ZXIgdGhlIHNoYXJlZCBtZW1vcnkgYmV0d2VlbiBFTDMgYW5kCisgKiBTLUVMMC4KKyAqLworI2RlZmluZSBBUk1fU1BfSU1BR0VfTlNfQlVGX0JBU0UJKFBMQVRfU1BNX0JVRl9CQVNFICsgUExBVF9TUE1fQlVGX1NJWkUpCisjZGVmaW5lIEFSTV9TUF9JTUFHRV9OU19CVUZfU0laRQlVTEwoMHgxMDAwMCkKKyNkZWZpbmUgQVJNX1NQX0lNQUdFX05TX0JVRl9NTUFQCU1BUF9SRUdJT04yKAkJCQlcCisJCQkJCQlBUk1fU1BfSU1BR0VfTlNfQlVGX0JBU0UsCVwKKwkJCQkJCUFSTV9TUF9JTUFHRV9OU19CVUZfQkFTRSwJXAorCQkJCQkJQVJNX1NQX0lNQUdFX05TX0JVRl9TSVpFLAlcCisJCQkJCQlNVF9SV19EQVRBIHwgTVRfTlMgfCBNVF9VU0VSLAlcCisJCQkJCQlQQUdFX1NJWkUpCisKKy8qCisgKiBSVyBtZW1vcnksIHdoaWNoIHVzZXMgdGhlIHJlbWFpbmluZyBUcnVzdGVkIERSQU0uIFBsYWNlZCBhZnRlciB0aGUgbWVtb3J5CisgKiBzaGFyZWQgYmV0d2VlbiBTZWN1cmUgYW5kIE5vbi1zZWN1cmUgd29ybGRzLiBGaXJzdCB0aGVyZSBpcyB0aGUgc3RhY2sgbWVtb3J5CisgKiBmb3IgYWxsIENQVXMgYW5kIHRoZW4gdGhlcmUgaXMgdGhlIGNvbW1vbiBoZWFwIG1lbW9yeS4gQm90aCBhcmUgbWFwcGVkIHdpdGgKKyAqIFJXIHBlcm1pc3Npb25zLgorICovCisjZGVmaW5lIFBMQVRfU1BfSU1BR0VfU1RBQ0tfQkFTRQkoQVJNX1NQX0lNQUdFX05TX0JVRl9CQVNFICsJCVwKKwkJCQkJCUFSTV9TUF9JTUFHRV9OU19CVUZfU0laRSkKKyNkZWZpbmUgUExBVF9TUF9JTUFHRV9TVEFDS19QQ1BVX1NJWkUJVUxMKDB4MjAwMCkKKyNkZWZpbmUgQVJNX1NQX0lNQUdFX1NUQUNLX1RPVEFMX1NJWkUJKFBMQVRGT1JNX0NPUkVfQ09VTlQgKgkJCVwKKwkJCQkJIFBMQVRfU1BfSU1BR0VfU1RBQ0tfUENQVV9TSVpFKQorCisjZGVmaW5lIEFSTV9TUF9JTUFHRV9IRUFQX0JBU0UJCShQTEFUX1NQX0lNQUdFX1NUQUNLX0JBU0UgKwkJXAorCQkJCQkgQVJNX1NQX0lNQUdFX1NUQUNLX1RPVEFMX1NJWkUpCisjZGVmaW5lIEFSTV9TUF9JTUFHRV9IRUFQX1NJWkUJCShBUk1fU1BfSU1BR0VfTElNSVQgLSBBUk1fU1BfSU1BR0VfSEVBUF9CQVNFKQorCisjZGVmaW5lIEFSTV9TUF9JTUFHRV9SV19NTUFQCQlNQVBfUkVHSU9OMigJCQkJXAorCQkJCQkJUExBVF9TUF9JTUFHRV9TVEFDS19CQVNFLAlcCisJCQkJCQlQTEFUX1NQX0lNQUdFX1NUQUNLX0JBU0UsCVwKKwkJCQkJCShBUk1fU1BfSU1BR0VfTElNSVQgLQkJXAorCQkJCQkJIFBMQVRfU1BfSU1BR0VfU1RBQ0tfQkFTRSksCVwKKwkJCQkJCU1UX1JXX0RBVEEgfCBNVF9TRUNVUkUgfCBNVF9VU0VSLFwKKwkJCQkJCVBBR0VfU0laRSkKKworLyogVG90YWwgbnVtYmVyIG9mIG1lbW9yeSByZWdpb25zIHdpdGggZGlzdGluY3QgcHJvcGVydGllcyAqLworI2RlZmluZSBBUk1fU1BfSU1BR0VfTlVNX01FTV9SRUdJT05TCTYKKworLyoKKyAqIE5hbWUgb2YgdGhlIHNlY3Rpb24gdG8gcHV0IHRoZSB0cmFuc2xhdGlvbiB0YWJsZXMgdXNlZCBieSB0aGUgUy1FTDEvUy1FTDAKKyAqIGNvbnRleHQgb2YgYSBTZWN1cmUgUGFydGl0aW9uLgorICovCisjZGVmaW5lIFBMQVRfU1BfSU1BR0VfWExBVF9TRUNUSU9OX05BTUUJImFybV9lbDNfdHpjX2RyYW0iCisKKy8qIENvb2tpZXMgcGFzc2VkIHRvIHRoZSBTZWN1cmUgUGFydGl0aW9uIGF0IGJvb3QuIE5vdCB1c2VkIGJ5IEFSTSBwbGF0Zm9ybXMuICovCisjZGVmaW5lIFBMQVRfU1BNX0NPT0tJRV8wCQlVTEwoMCkKKyNkZWZpbmUgUExBVF9TUE1fQ09PS0lFXzEJCVVMTCgwKQorCisjZW5kaWYgLyogX19BUk1fU1BNX0RFRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGxhdC9hcm0vY29tbW9uL3BsYXRfYXJtLmggYi9pbmNsdWRlL3BsYXQvYXJtL2NvbW1vbi9wbGF0X2FybS5oCmluZGV4IGYwZTk3NjcuLmFiZDczOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGxhdC9hcm0vY29tbW9uL3BsYXRfYXJtLmgKKysrIGIvaW5jbHVkZS9wbGF0L2FybS9jb21tb24vcGxhdF9hcm0uaApAQCAtMTE5LDkgKzExOSwxNSBAQAogLyogUE0gdXRpbGl0eSBmdW5jdGlvbnMgKi8KIGludCBhcm1fdmFsaWRhdGVfcG93ZXJfc3RhdGUodW5zaWduZWQgaW50IHBvd2VyX3N0YXRlLAogCQkJICAgIHBzY2lfcG93ZXJfc3RhdGVfdCAqcmVxX3N0YXRlKTsKK2ludCBhcm1fdmFsaWRhdGVfcHNjaV9lbnRyeXBvaW50KHVpbnRwdHJfdCBlbnRyeXBvaW50KTsKIGludCBhcm1fdmFsaWRhdGVfbnNfZW50cnlwb2ludCh1aW50cHRyX3QgZW50cnlwb2ludCk7Cit2b2lkIGFybV9zeXN0ZW1fcHdyX2RvbWFpbl9zYXZlKHZvaWQpOwogdm9pZCBhcm1fc3lzdGVtX3B3cl9kb21haW5fcmVzdW1lKHZvaWQpOwogdm9pZCBhcm1fcHJvZ3JhbV90cnVzdGVkX21haWxib3godWludHB0cl90IGFkZHJlc3MpOworaW50IGFybV9wc2NpX3JlYWRfbWVtX3Byb3RlY3QoaW50ICp2YWwpOworaW50IGFybV9ub3JfcHNjaV93cml0ZV9tZW1fcHJvdGVjdChpbnQgdmFsKTsKK3ZvaWQgYXJtX25vcl9wc2NpX2RvX21lbV9wcm90ZWN0KHZvaWQpOworaW50IGFybV9wc2NpX21lbV9wcm90ZWN0X2Noayh1aW50cHRyX3QgYmFzZSwgdV9yZWdpc3Rlcl90IGxlbmd0aCk7CiAKIC8qIFRvcG9sb2d5IHV0aWxpdHkgZnVuY3Rpb24gKi8KIGludCBhcm1fY2hlY2tfbXBpZHIodV9yZWdpc3Rlcl90IG1waWRyKTsKQEAgLTE3OSw2ICsxODUsOCBAQAogdm9pZCBwbGF0X2FybV9naWNfcmVkaXN0aWZfb24odm9pZCk7CiB2b2lkIHBsYXRfYXJtX2dpY19yZWRpc3RpZl9vZmYodm9pZCk7CiB2b2lkIHBsYXRfYXJtX2dpY19wY3B1X2luaXQodm9pZCk7Cit2b2lkIHBsYXRfYXJtX2dpY19zYXZlKHZvaWQpOwordm9pZCBwbGF0X2FybV9naWNfcmVzdW1lKHZvaWQpOwogdm9pZCBwbGF0X2FybV9zZWN1cml0eV9zZXR1cCh2b2lkKTsKIHZvaWQgcGxhdF9hcm1fcHdyY19zZXR1cCh2b2lkKTsKIHZvaWQgcGxhdF9hcm1faW50ZXJjb25uZWN0X2luaXQodm9pZCk7CkBAIC0yMTksNyArMjI3LDQgQEAKIAkJdWludDMyX3QgY29va2llX2xvLAogCQl2b2lkICpoYW5kbGUpOwogCi0vKiBEaXNhYmxlIFN0YXRpc3RpY2FsIFByb2ZpbGluZyBFeHRlbnNpb25zIGhlbHBlciAqLwotdm9pZCBhcm1fZGlzYWJsZV9zcGUodm9pZCk7Ci0KICNlbmRpZiAvKiBfX1BMQVRfQVJNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wbGF0L2FybS9jc3MvY29tbW9uL2Nzc19kZWYuaCBiL2luY2x1ZGUvcGxhdC9hcm0vY3NzL2NvbW1vbi9jc3NfZGVmLmgKaW5kZXggYWMwNzY5Yy4uYTJjMGI0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wbGF0L2FybS9jc3MvY29tbW9uL2Nzc19kZWYuaAorKysgYi9pbmNsdWRlL3BsYXQvYXJtL2Nzcy9jb21tb24vY3NzX2RlZi5oCkBAIC04LDYgKzgsOCBAQAogI2RlZmluZSBfX0NTU19ERUZfSF9fCiAKICNpbmNsdWRlIDxhcm1fZGVmLmg+CisjaW5jbHVkZSA8Z2ljX2NvbW1vbi5oPgorI2luY2x1ZGUgPGludGVycnVwdF9wcm9wcy5oPgogI2luY2x1ZGUgPHR6YzQwMC5oPgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDEsMTQgKzQzLDIxIEBACiAjZGVmaW5lIE1IVV9DUFVfSU5UUl9TX1NFVF9PRkZTRVQJMHgzMDgKIAogLyoKLSAqIERlZmluZSBhIGxpc3Qgb2YgR3JvdXAgMSBTZWN1cmUgaW50ZXJydXB0cyBhcyBwZXIgR0lDdjMgdGVybWlub2xvZ3kuIE9uIGEKLSAqIEdJQ3YyIHN5c3RlbSBvciBtb2RlLCB0aGUgaW50ZXJydXB0cyB3aWxsIGJlIHRyZWF0ZWQgYXMgR3JvdXAgMCBpbnRlcnJ1cHRzLgorICogRGVmaW5lIGEgbGlzdCBvZiBHcm91cCAxIFNlY3VyZSBpbnRlcnJ1cHQgcHJvcGVydGllcyBhcyBwZXIgR0lDdjMKKyAqIHRlcm1pbm9sb2d5LiBPbiBhIEdJQ3YyIHN5c3RlbSBvciBtb2RlLCB0aGUgaW50ZXJydXB0cyB3aWxsIGJlIHRyZWF0ZWQgYXMKKyAqIEdyb3VwIDAgaW50ZXJydXB0cy4KICAqLwotI2RlZmluZSBDU1NfRzFTX0lSUVMJCQlDU1NfSVJRX01IVSwJCVwKLQkJCQkJQ1NTX0lSUV9HUFVfU01NVV8wLAlcCi0JCQkJCUNTU19JUlFfVFpDLAkJXAotCQkJCQlDU1NfSVJRX1RaX1dET0csCVwKLQkJCQkJQ1NTX0lSUV9TRUNfU1lTX1RJTUVSCisjZGVmaW5lIENTU19HMVNfSVJRX1BST1BTKGdycCkgXAorCUlOVFJfUFJPUF9ERVNDKENTU19JUlFfTUhVLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0xFVkVMKSwgXAorCUlOVFJfUFJPUF9ERVNDKENTU19JUlFfR1BVX1NNTVVfMCwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19MRVZFTCksIFwKKwlJTlRSX1BST1BfREVTQyhDU1NfSVJRX1RaQywgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19MRVZFTCksIFwKKwlJTlRSX1BST1BfREVTQyhDU1NfSVJRX1RaX1dET0csIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfTEVWRUwpLCBcCisJSU5UUl9QUk9QX0RFU0MoQ1NTX0lSUV9TRUNfU1lTX1RJTUVSLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0xFVkVMKQogCiAjaWYgQ1NTX1VTRV9TQ01JX1NEU19EUklWRVIKIC8qIE1lbW9yeSByZWdpb24gZm9yIHNoYXJlZCBkYXRhIHN0b3JhZ2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGxhdC9jb21tb24vcGxhdGZvcm0uaCBiL2luY2x1ZGUvcGxhdC9jb21tb24vcGxhdGZvcm0uaAppbmRleCBlMTg5ZjY0Li5mMTFiZWU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BsYXQvY29tbW9uL3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9wbGF0L2NvbW1vbi9wbGF0Zm9ybS5oCkBAIC0yMyw2ICsyMyw4IEBACiBzdHJ1Y3QgaW1hZ2VfZGVzYzsKIHN0cnVjdCBibF9sb2FkX2luZm87CiBzdHJ1Y3QgYmxfcGFyYW1zOworc3RydWN0IG1tYXBfcmVnaW9uOworc3RydWN0IHNlY3VyZV9wYXJ0aXRpb25fYm9vdF9pbmZvOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogcGxhdF9nZXRfcm90cGtfaW5mbygpIGZsYWdzCkBAIC03MCw2ICs3MiwyNyBAQAogCQkJCSAgICAgdWludDMyX3Qgc2VjdXJpdHlfc3RhdGUpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogT3B0aW9uYWwgaW50ZXJydXB0IG1hbmFnZW1lbnQgZnVuY3Rpb25zLCBkZXBlbmRpbmcgb24gY2hvc2VuIEVMMyBjb21wb25lbnRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Vuc2lnbmVkIGludCBwbGF0X2ljX2dldF9ydW5uaW5nX3ByaW9yaXR5KHZvaWQpOworaW50IHBsYXRfaWNfaXNfc3BpKHVuc2lnbmVkIGludCBpZCk7CitpbnQgcGxhdF9pY19pc19wcGkodW5zaWduZWQgaW50IGlkKTsKK2ludCBwbGF0X2ljX2lzX3NnaSh1bnNpZ25lZCBpbnQgaWQpOwordW5zaWduZWQgaW50IHBsYXRfaWNfZ2V0X2ludGVycnVwdF9hY3RpdmUodW5zaWduZWQgaW50IGlkKTsKK3ZvaWQgcGxhdF9pY19kaXNhYmxlX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgaWQpOwordm9pZCBwbGF0X2ljX2VuYWJsZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGlkKTsKK2ludCBwbGF0X2ljX2hhc19pbnRlcnJ1cHRfdHlwZSh1bnNpZ25lZCBpbnQgdHlwZSk7Cit2b2lkIHBsYXRfaWNfc2V0X2ludGVycnVwdF90eXBlKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IHR5cGUpOwordm9pZCBwbGF0X2ljX3NldF9pbnRlcnJ1cHRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgcHJpb3JpdHkpOwordm9pZCBwbGF0X2ljX3JhaXNlX2VsM19zZ2koaW50IHNnaV9udW0sIHVfcmVnaXN0ZXJfdCB0YXJnZXQpOwordm9pZCBwbGF0X2ljX3NldF9zcGlfcm91dGluZyh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCByb3V0aW5nX21vZGUsCisJCXVfcmVnaXN0ZXJfdCBtcGlkcik7Cit2b2lkIHBsYXRfaWNfc2V0X2ludGVycnVwdF9wZW5kaW5nKHVuc2lnbmVkIGludCBpZCk7Cit2b2lkIHBsYXRfaWNfY2xlYXJfaW50ZXJydXB0X3BlbmRpbmcodW5zaWduZWQgaW50IGlkKTsKK3Vuc2lnbmVkIGludCBwbGF0X2ljX3NldF9wcmlvcml0eV9tYXNrKHVuc2lnbmVkIGludCBtYXNrKTsKK3Vuc2lnbmVkIGludCBwbGF0X2ljX2dldF9pbnRlcnJ1cHRfaWQodW5zaWduZWQgaW50IHJhdyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBPcHRpb25hbCBjb21tb24gZnVuY3Rpb25zIChtYXkgYmUgb3ZlcnJpZGRlbikKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1aW50cHRyX3QgcGxhdF9nZXRfbXlfc3RhY2sodm9pZCk7CkBAIC04MCw2ICsxMDMsOCBAQAogdm9pZCBwbGF0X2Vycm9yX2hhbmRsZXIoaW50IGVycikgX19kZWFkMjsKIHZvaWQgcGxhdF9wYW5pY19oYW5kbGVyKHZvaWQpIF9fZGVhZDI7CiBjb25zdCBjaGFyICpwbGF0X2xvZ19nZXRfcHJlZml4KHVuc2lnbmVkIGludCBsb2dfbGV2ZWwpOwordm9pZCBibDJfcGxhdF9wcmVsb2FkX3NldHVwKHZvaWQpOworaW50IHBsYXRfdHJ5X25leHRfYm9vdF9zb3VyY2Uodm9pZCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBNYW5kYXRvcnkgQkwxIGZ1bmN0aW9ucwpAQCAtODksNiArMTE0LDE2IEBACiB2b2lkIGJsMV9wbGF0Zm9ybV9zZXR1cCh2b2lkKTsKIHN0cnVjdCBtZW1pbmZvICpibDFfcGxhdF9zZWNfbWVtX2xheW91dCh2b2lkKTsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE9wdGlvbmFsIEVMMyBjb21wb25lbnQgZnVuY3Rpb25zIGluIEJMMzEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNERUkgcGxhdGZvcm0gZnVuY3Rpb25zICovCisjaWYgU0RFSV9TVVBQT1JUCitpbnQgcGxhdF9zZGVpX3ZhbGlkYXRlX2VudHJ5X3BvaW50KHVpbnRwdHJfdCBlcCwgdW5zaWduZWQgaW50IGNsaWVudF9tb2RlKTsKK3ZvaWQgcGxhdF9zZGVpX2hhbmRsZV9tYXNrZWRfdHJpZ2dlcih1aW50NjRfdCBtcGlkciwgdW5zaWduZWQgaW50IGludHIpOworI2VuZGlmCisKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGlzIG1hbmRhdG9yeSB3aGVuIHRoZQogICogZmlybXdhcmUgdXBkYXRlIGZlYXR1cmUgaXMgdXNlZC4KQEAgLTI3MSw2ICszMDYsMTMgQEAKIGludCBwbGF0X3NldF9udl9jdHIyKHZvaWQgKmNvb2tpZSwgY29uc3Qgc3RydWN0IGF1dGhfaW1nX2Rlc2NfcyAqaW1nX2Rlc2MsCiAJCXVuc2lnbmVkIGludCBudl9jdHIpOwogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2VjdXJlIFBhcnRpdGlvbnMgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY29uc3Qgc3RydWN0IG1tYXBfcmVnaW9uICpwbGF0X2dldF9zZWN1cmVfcGFydGl0aW9uX21tYXAodm9pZCAqY29va2llKTsKK2NvbnN0IHN0cnVjdCBzZWN1cmVfcGFydGl0aW9uX2Jvb3RfaW5mbyAqcGxhdF9nZXRfc2VjdXJlX3BhcnRpdGlvbl9ib290X2luZm8oCisJCXZvaWQgKmNvb2tpZSk7CisKICNpZiBMT0FEX0lNQUdFX1YyCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTWFuZGF0b3J5IEJMIGltYWdlIGxvYWQgZnVuY3Rpb25zKG1heSBiZSBvdmVycmlkZGVuKS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2VydmljZXMvc2RlaS5oIGIvaW5jbHVkZS9zZXJ2aWNlcy9zZGVpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U5YTAwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc2VydmljZXMvc2RlaS5oCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIF9fU0RFSV9IX18KKyNkZWZpbmUgX19TREVJX0hfXworCisjaW5jbHVkZSA8c3BpbmxvY2suaD4KKyNpbmNsdWRlIDx1dGlsc19kZWYuaD4KKworLyogUmFuZ2UgMHhDNDAwMDAyMCAtIDB4QzQwMDAwM0YgcmVzZXJ2ZWQgZm9yIFNERSA2NGJpdCBzbWMgY2FsbHMgKi8KKyNkZWZpbmUgU0RFSV9WRVJTSU9OCQkJCTB4QzQwMDAwMjAKKyNkZWZpbmUgU0RFSV9FVkVOVF9SRUdJU1RFUgkJCTB4QzQwMDAwMjEKKyNkZWZpbmUgU0RFSV9FVkVOVF9FTkFCTEUJCQkweEM0MDAwMDIyCisjZGVmaW5lIFNERUlfRVZFTlRfRElTQUJMRQkJCTB4QzQwMDAwMjMKKyNkZWZpbmUgU0RFSV9FVkVOVF9DT05URVhUCQkJMHhDNDAwMDAyNAorI2RlZmluZSBTREVJX0VWRU5UX0NPTVBMRVRFCQkJMHhDNDAwMDAyNQorI2RlZmluZSBTREVJX0VWRU5UX0NPTVBMRVRFX0FORF9SRVNVTUUJCTB4QzQwMDAwMjYKKworI2RlZmluZSBTREVJX0VWRU5UX1VOUkVHSVNURVIJCQkweEM0MDAwMDI3CisjZGVmaW5lIFNERUlfRVZFTlRfU1RBVFVTCQkJMHhDNDAwMDAyOAorI2RlZmluZSBTREVJX0VWRU5UX0dFVF9JTkZPCQkJMHhDNDAwMDAyOQorI2RlZmluZSBTREVJX0VWRU5UX1JPVVRJTkdfU0VUCQkJMHhDNDAwMDAyQQorI2RlZmluZSBTREVJX1BFX01BU0sJCQkJMHhDNDAwMDAyQgorI2RlZmluZSBTREVJX1BFX1VOTUFTSwkJCQkweEM0MDAwMDJDCisKKyNkZWZpbmUgU0RFSV9JTlRFUlJVUFRfQklORAkJCTB4QzQwMDAwMkQKKyNkZWZpbmUgU0RFSV9JTlRFUlJVUFRfUkVMRUFTRQkJCTB4QzQwMDAwMkUKKyNkZWZpbmUgU0RFSV9FVkVOVF9TSUdOQUwJCQkweEM0MDAwMDJGCisjZGVmaW5lIFNERUlfRkVBVFVSRVMJCQkJMHhDNDAwMDAzMAorI2RlZmluZSBTREVJX1BSSVZBVEVfUkVTRVQJCQkweEM0MDAwMDMxCisjZGVmaW5lIFNERUlfU0hBUkVEX1JFU0VUCQkJMHhDNDAwMDAzMgorCisvKiBTREVJX0VWRU5UX1JFR0lTVEVSIGZsYWdzICovCisjZGVmaW5lIFNERUlfUkVHRl9STV9BTlkJMAorI2RlZmluZSBTREVJX1JFR0ZfUk1fUEUJCTEKKworLyogU0RFSV9FVkVOVF9DT01QTEVURSBzdGF0dXMgZmxhZ3MgKi8KKyNkZWZpbmUgU0RFSV9FVl9IQU5ETEVECQkwCisjZGVmaW5lIFNERUlfRVZfRkFJTEVECQkxCisKKy8qIFNERSBldmVudCBzdGF0dXMgdmFsdWVzIGluIGJpdCBwb3NpdGlvbiAqLworI2RlZmluZSBTREVJX1NUQVRGX1JFR0lTVEVSRUQJCTAKKyNkZWZpbmUgU0RFSV9TVEFURl9FTkFCTEVECQkxCisjZGVmaW5lIFNERUlfU1RBVEZfUlVOTklORwkJMgorCisvKiBJbnRlcm5hbDogU0RFSSBmbGFnIGJpdCBwb3NpdGlvbnMgKi8KKyNkZWZpbmUgX1NERUlfTUFQRl9EWU5BTUlDX1NISUZUCTEKKyNkZWZpbmUgX1NERUlfTUFQRl9CT1VORF9TSElGVAkJMgorI2RlZmluZSBfU0RFSV9NQVBGX1NJR05BTEFCTEVfU0hJRlQJMworI2RlZmluZSBfU0RFSV9NQVBGX1BSSVZBVEVfU0hJRlQJNAorI2RlZmluZSBfU0RFSV9NQVBGX0NSSVRJQ0FMX1NISUZUCTUKKworLyogU0RFSSBldmVudCAwICovCisjZGVmaW5lIFNERUlfRVZFTlRfMAkwCisKKy8qIFBsYWNlaG9sZGVyIGludGVycnVwdCBmb3IgZHluYW1pYyBtYXBwaW5nICovCisjZGVmaW5lIFNERUlfRFlOX0lSUQkwCisKKy8qIFNERUkgZmxhZ3MgKi8KKworLyoKKyAqIFRoZXNlIGZsYWdzIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhbiBldmVudCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGFuCisgKiBpbnRlcnJ1cHQuIFN0YXRpYyBldmVudHMgYXJlIHBlcm1hbmVudGx5IGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcnJ1cHQsIGFuZAorICogY2FuJ3QgYmUgY2hhbmdlZCBhdCBydW50aW1lLiAgQXNzb2NpYXRpb24gb2YgZHluYW1pYyBldmVudHMgd2l0aCBpbnRlcnJ1cHRzCisgKiBjYW4gYmUgY2hhbmdlZCBhdCBydW4gdGltZSB1c2luZyB0aGUgU0RFSV9JTlRFUlJVUFRfQklORCBhbmQKKyAqIFNERUlfSU5URVJSVVBUX1JFTEVBU0UgY2FsbHMuCisgKgorICogU0RFSV9NQVBGX0RZTkFNSUMgb25seSBpbmRpY2F0ZXMgcnVuIHRpbWUgY29uZmlndXJhYmlsaXR5LCB3aGVyZSBhcworICogU0RFSV9NQVBGX0JPVU5EIGluZGljYXRlcyBpbnRlcnJ1cHQgYXNzb2NpYXRpb24uIEZvciBleGFtcGxlOgorICoKKyAqICAtIENhbGxpbmcgU0RFSV9JTlRFUlJVUFRfQklORCBvbiBhIGR5bmFtaWMgZXZlbnQgd2lsbCBoYXZlIGJvdGgKKyAqICAgIFNERUlfTUFQRl9EWU5BTUlDIGFuZCBTREVJX01BUEZfQk9VTkQgc2V0LgorICoKKyAqICAtIFN0YXRpY2FsbHktYm91bmQgZXZlbnRzIHdpbGwgYWx3YXlzIGhhdmUgU0RFSV9NQVBGX0JPVU5EIHNldCwgYW5kIG5laXRoZXIKKyAqICAgIFNERUlfSU5URVJSVVBUX0JJTkQgbm9yIFNERUlfSU5URVJSVVBUX1JFTEVBU0UgY2FuIGJlIGNhbGxlZCBvbiB0aGVtLgorICoKKyAqIFNlZSBhbHNvIHRoZSBpc19tYXBfYm91bmQoKSBtYWNyby4KKyAqLworI2RlZmluZSBTREVJX01BUEZfRFlOQU1JQwlCSVQoX1NERUlfTUFQRl9EWU5BTUlDX1NISUZUKQorI2RlZmluZSBTREVJX01BUEZfQk9VTkQJCUJJVChfU0RFSV9NQVBGX0JPVU5EX1NISUZUKQorCisjZGVmaW5lIFNERUlfTUFQRl9TSUdOQUxBQkxFCUJJVChfU0RFSV9NQVBGX1NJR05BTEFCTEVfU0hJRlQpCisjZGVmaW5lIFNERUlfTUFQRl9QUklWQVRFCUJJVChfU0RFSV9NQVBGX1BSSVZBVEVfU0hJRlQpCisjZGVmaW5lIFNERUlfTUFQRl9DUklUSUNBTAlCSVQoX1NERUlfTUFQRl9DUklUSUNBTF9TSElGVCkKKworLyogSW5kaWNlcyBvZiBwcml2YXRlIGFuZCBzaGFyZWQgbWFwcGluZ3MgKi8KKyNkZWZpbmUgX1NERUlfTUFQX0lEWF9QUklWCTAKKyNkZWZpbmUgX1NERUlfTUFQX0lEWF9TSFJECTEKKyNkZWZpbmUgX1NERUlfTUFQX0lEWF9NQVgJMgorCisvKiBUaGUgbWFjcm9zIGJlbG93IGFyZSB1c2VkIHRvIGlkZW50aWZ5IFNERUkgY2FsbHMgZnJvbSB0aGUgU01DIGZ1bmN0aW9uIElEICovCisjZGVmaW5lIFNERUlfRklEX01BU0sJCVUoMHhmZmUwKQorI2RlZmluZSBTREVJX0ZJRF9WQUxVRQkJVSgweDIwKQorI2RlZmluZSBpc19zZGVpX2ZpZChfZmlkKSBcCisJKCgoKF9maWQpICYgU0RFSV9GSURfTUFTSykgPT0gU0RFSV9GSURfVkFMVUUpICYmIFwKKwkgKCgoX2ZpZCA+PiBGVU5DSURfQ0NfU0hJRlQpICYgRlVOQ0lEX0NDX01BU0spID09IFNNQ182NCkpCisKKyNkZWZpbmUgU0RFSV9FVkVOVF9NQVAoX2V2ZW50LCBfaW50ciwgX2ZsYWdzKSBcCisJeyBcCisJCS5ldl9udW0gPSBfZXZlbnQsIFwKKwkJLmludHIgPSBfaW50ciwgXAorCQkubWFwX2ZsYWdzID0gX2ZsYWdzIFwKKwl9CisKKyNkZWZpbmUgU0RFSV9TSEFSRURfRVZFTlQoX2V2ZW50LCBfaW50ciwgX2ZsYWdzKSBcCisJU0RFSV9FVkVOVF9NQVAoX2V2ZW50LCBfaW50ciwgX2ZsYWdzKQorCisjZGVmaW5lIFNERUlfUFJJVkFURV9FVkVOVChfZXZlbnQsIF9pbnRyLCBfZmxhZ3MpIFwKKwlTREVJX0VWRU5UX01BUChfZXZlbnQsIF9pbnRyLCBfZmxhZ3MgfCBTREVJX01BUEZfUFJJVkFURSkKKworI2RlZmluZSBTREVJX0RFRklORV9FVkVOVF8wKF9pbnRyKSBcCisJU0RFSV9QUklWQVRFX0VWRU5UKFNERUlfRVZFTlRfMCwgX2ludHIsIFNERUlfTUFQRl9TSUdOQUxBQkxFKQorCisvKgorICogRGVjbGFyZSBzaGFyZWQgYW5kIHByaXZhdGUgZW50cmllcyBmb3IgZWFjaCBjb3JlLiBBbHNvIGRlY2xhcmUgYSBnbG9iYWwKKyAqIHN0cnVjdHVyZSBjb250YWluaW5nIHByaXZhdGUgYW5kIHNoYXJlIGVudHJpZXMuCisgKgorICogVGhpcyBtYWNybyBtdXN0IGJlIHVzZWQgaW4gdGhlIHNhbWUgZmlsZSBhcyB0aGUgcGxhdGZvcm0gU0RFSSBtYXBwaW5ncyBhcmUKKyAqIGRlY2xhcmVkLiBPbmx5IHRoZW4gd291bGQgQVJSQVlfU0laRSgpIHlpZWxkIGEgbWVhbmluZ2Z1bCB2YWx1ZS4KKyAqLworI2RlZmluZSBSRUdJU1RFUl9TREVJX01BUChfcHJpdmF0ZSwgX3NoYXJlZCkgXAorCXNkZWlfZW50cnlfdCBzZGVpX3ByaXZhdGVfZXZlbnRfdGFibGUgXAorCQlbUExBVEZPUk1fQ09SRV9DT1VOVCAqIEFSUkFZX1NJWkUoX3ByaXZhdGUpXTsgXAorCXNkZWlfZW50cnlfdCBzZGVpX3NoYXJlZF9ldmVudF90YWJsZVtBUlJBWV9TSVpFKF9zaGFyZWQpXTsgXAorCWNvbnN0IHNkZWlfbWFwcGluZ190IHNkZWlfZ2xvYmFsX21hcHBpbmdzW10gPSB7IFwKKwkJW19TREVJX01BUF9JRFhfUFJJVl0gPSB7IFwKKwkJCS5tYXAgPSBfcHJpdmF0ZSwgXAorCQkJLm51bV9tYXBzID0gQVJSQVlfU0laRShfcHJpdmF0ZSkgXAorCQl9LCBcCisJCVtfU0RFSV9NQVBfSURYX1NIUkRdID0geyBcCisJCQkubWFwID0gX3NoYXJlZCwgXAorCQkJLm51bV9tYXBzID0gQVJSQVlfU0laRShfc2hhcmVkKSBcCisJCX0sIFwKKwl9CisKK3R5cGVkZWYgdWludDhfdCBzZGVpX3N0YXRlX3Q7CisKKy8qIFJ1bnRpbWUgZGF0YSBvZiBTREVJIGV2ZW50ICovCit0eXBlZGVmIHN0cnVjdCBzZGVpX2VudHJ5IHsKKwl1aW50NjRfdCBlcDsJCS8qIEVudHJ5IHBvaW50ICovCisJdWludDY0X3QgYXJnOwkJLyogRW50cnkgcG9pbnQgYXJndW1lbnQgKi8KKwl1aW50NjRfdCBhZmZpbml0eTsJLyogQWZmaW5pdHkgb2Ygc2hhcmVkIGV2ZW50ICovCisJdW5zaWduZWQgaW50IHJlZ19mbGFnczsJLyogUmVnaXN0cmF0aW9uIGZsYWdzICovCisKKwkvKiBFdmVudCBoYW5kbGVyIHN0YXRlczogcmVnaXN0ZXJlZCwgZW5hYmxlZCwgcnVubmluZyAqLworCXNkZWlfc3RhdGVfdCBzdGF0ZTsKK30gc2RlaV9lbnRyeV90OworCisvKiBNYXBwaW5nIG9mIFNERUkgZXZlbnRzIHRvIGludGVycnVwdHMsIGFuZCBhc3NvY2lhdGVkIGRhdGEgKi8KK3R5cGVkZWYgc3RydWN0IHNkZWlfZXZfbWFwIHsKKwlpbnQzMl90IGV2X251bTsJCS8qIEV2ZW50IG51bWJlciAqLworCXVuc2lnbmVkIGludCBpbnRyOwkvKiBQaHlzaWNhbCBpbnRlcnJ1cHQgbnVtYmVyIGZvciBhIGJvdW5kIG1hcCAqLworCXVuc2lnbmVkIGludCBtYXBfZmxhZ3M7CS8qIE1hcHBpbmcgZmxhZ3MsIHNlZSBTREVJX01BUEZfKiAqLworCWludCByZWdfY291bnQ7CQkvKiBSZWdpc3RyYXRpb24gY291bnQgKi8KKwlzcGlubG9ja190IGxvY2s7CS8qIFBlci1ldmVudCBsb2NrICovCit9IHNkZWlfZXZfbWFwX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNkZWlfbWFwcGluZyB7CisJc2RlaV9ldl9tYXBfdCAqbWFwOworCXNpemVfdCBudW1fbWFwczsKK30gc2RlaV9tYXBwaW5nX3Q7CisKKy8qIEhhbmRsZXIgdG8gYmUgY2FsbGVkIHRvIGhhbmRsZSBTREVJIHNtYyBjYWxscyAqLwordWludDY0X3Qgc2RlaV9zbWNfaGFuZGxlcih1aW50MzJfdCBzbWNfZmlkLAorCQl1aW50NjRfdCB4MSwKKwkJdWludDY0X3QgeDIsCisJCXVpbnQ2NF90IHgzLAorCQl1aW50NjRfdCB4NCwKKwkJdm9pZCAqY29va2llLAorCQl2b2lkICpoYW5kbGUsCisJCXVpbnQ2NF90IGZsYWdzKTsKKwordm9pZCBzZGVpX2luaXQodm9pZCk7CisKKy8qIFB1YmxpYyBBUEkgdG8gZGlzcGF0Y2ggYW4gZXZlbnQgdG8gTm9ybWFsIHdvcmxkICovCitpbnQgc2RlaV9kaXNwYXRjaF9ldmVudChpbnQgZXZfbnVtLCB1bnNpZ25lZCBpbnQgcHJlZW1wdGVkX3NlY19zdGF0ZSk7CisKKyNlbmRpZiAvKiBfX1NERUlfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NlcnZpY2VzL3NlY3VyZV9wYXJ0aXRpb24uaCBiL2luY2x1ZGUvc2VydmljZXMvc2VjdXJlX3BhcnRpdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNGY3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NlcnZpY2VzL3NlY3VyZV9wYXJ0aXRpb24uaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIF9fU0VDVVJFX1BBUlRJVElPTl9IX18KKyNkZWZpbmUgX19TRUNVUkVfUEFSVElUSU9OX0hfXworCisjaW5jbHVkZSA8YmxfY29tbW9uLmg+CisjaW5jbHVkZSA8dHlwZXMuaD4KKyNpbmNsdWRlIDx1dGlsc19kZWYuaD4KKworLyogTGlua2VyIHN5bWJvbHMgKi8KK2V4dGVybiB1aW50cHRyX3QgX19TUF9JTUFHRV9YTEFUX1RBQkxFU19TVEFSVF9fOworZXh0ZXJuIHVpbnRwdHJfdCBfX1NQX0lNQUdFX1hMQVRfVEFCTEVTX0VORF9fOworCisvKiBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTUF9JTUFHRV9YTEFUX1RBQkxFU19TVEFSVAlcCisJKHVpbnRwdHJfdCkoJl9fU1BfSU1BR0VfWExBVF9UQUJMRVNfU1RBUlRfXykKKyNkZWZpbmUgU1BfSU1BR0VfWExBVF9UQUJMRVNfRU5ECVwKKwkodWludHB0cl90KSgmX19TUF9JTUFHRV9YTEFUX1RBQkxFU19FTkRfXykKKyNkZWZpbmUgU1BfSU1BR0VfWExBVF9UQUJMRVNfU0laRQlcCisJKFNQX0lNQUdFX1hMQVRfVEFCTEVTX0VORCAtIFNQX0lNQUdFX1hMQVRfVEFCTEVTX1NUQVJUKQorCisvKgorICogRmxhZ3MgdXNlZCBieSB0aGUgc2VjdXJlX3BhcnRpdGlvbl9tcF9pbmZvIHN0cnVjdHVyZSB0byBkZXNjcmliZSB0aGUKKyAqIGNoYXJhY3RlcmlzdGljcyBvZiBhIGNwdS4gT25seSBhIHNpbmdsZSBmbGFnIGlzIGRlZmluZWQgYXQgdGhlIG1vbWVudCB0bworICogaW5kaWNhdGUgdGhlIHByaW1hcnkgY3B1LgorICovCisjZGVmaW5lIE1QX0lORk9fRkxBR19QUklNQVJZX0NQVQlVKDB4MDAwMDAwMDEpCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5pdGlhbGlzZSBhIFMtRUwwCisgKiBwYXJ0aXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHNlY3VyZV9wYXJ0aXRpb25fbXBfaW5mbyB7CisJdV9yZWdpc3Rlcl90CQltcGlkcjsKKwl1bnNpZ25lZCBpbnQJCWxpbmVhcl9pZDsKKwl1bnNpZ25lZCBpbnQJCWZsYWdzOworfSBzZWN1cmVfcGFydGl0aW9uX21wX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc2VjdXJlX3BhcnRpdGlvbl9ib290X2luZm8geworCXBhcmFtX2hlYWRlcl90CQloOworCXVpbnRwdHJfdAkJc3BfbWVtX2Jhc2U7CisJdWludHB0cl90CQlzcF9tZW1fbGltaXQ7CisJdWludHB0cl90CQlzcF9pbWFnZV9iYXNlOworCXVpbnRwdHJfdAkJc3Bfc3RhY2tfYmFzZTsKKwl1aW50cHRyX3QJCXNwX2hlYXBfYmFzZTsKKwl1aW50cHRyX3QJCXNwX25zX2NvbW1fYnVmX2Jhc2U7CisJdWludHB0cl90CQlzcF9zaGFyZWRfYnVmX2Jhc2U7CisJc2l6ZV90CQkJc3BfaW1hZ2Vfc2l6ZTsKKwlzaXplX3QJCQlzcF9wY3B1X3N0YWNrX3NpemU7CisJc2l6ZV90CQkJc3BfaGVhcF9zaXplOworCXNpemVfdAkJCXNwX25zX2NvbW1fYnVmX3NpemU7CisJc2l6ZV90CQkJc3Bfc2hhcmVkX2J1Zl9zaXplOworCXVuc2lnbmVkIGludAkJbnVtX3NwX21lbV9yZWdpb25zOworCXVuc2lnbmVkIGludAkJbnVtX2NwdXM7CisJc2VjdXJlX3BhcnRpdGlvbl9tcF9pbmZvX3QJKm1wX2luZm87Cit9IHNlY3VyZV9wYXJ0aXRpb25fYm9vdF9pbmZvX3Q7CisKKy8qIFNldHVwIGZ1bmN0aW9uIGZvciBzZWN1cmUgcGFydGl0aW9ucyBjb250ZXh0LiAqLworCit2b2lkIHNlY3VyZV9wYXJ0aXRpb25fc2V0dXAodm9pZCk7CisKKyNlbmRpZiAvKiBfX1NFQ1VSRV9QQVJUSVRJT05fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NlcnZpY2VzL3NwbV9zdmMuaCBiL2luY2x1ZGUvc2VydmljZXMvc3BtX3N2Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczODk3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NlcnZpY2VzL3NwbV9zdmMuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIF9fU1BNX1NWQ19IX18KKyNkZWZpbmUgX19TUE1fU1ZDX0hfXworCisjaW5jbHVkZSA8dXRpbHNfZGVmLmg+CisKKyNkZWZpbmUgU1BNX1ZFUlNJT05fTUFKT1IJVSgwKQorI2RlZmluZSBTUE1fVkVSU0lPTl9NSU5PUglVKDEpCisjZGVmaW5lIFNQTV9WRVJTSU9OX0ZPUk0obWFqb3IsIG1pbm9yKQkoKG1ham9yIDw8IDE2KSB8IChtaW5vcikpCisjZGVmaW5lIFNQTV9WRVJTSU9OX0NPTVBJTEVECVNQTV9WRVJTSU9OX0ZPUk0oU1BNX1ZFUlNJT05fTUFKT1IsIFNQTV9WRVJTSU9OX01JTk9SKQorCisjZGVmaW5lIFNQX1ZFUlNJT05fTUFKT1IJVSgxKQorI2RlZmluZSBTUF9WRVJTSU9OX01JTk9SCVUoMCkKKyNkZWZpbmUgU1BfVkVSU0lPTl9GT1JNKG1ham9yLCBtaW5vcikJKChtYWpvciA8PCAxNikgfCAobWlub3IpKQorI2RlZmluZSBTUF9WRVJTSU9OX0NPTVBJTEVECVNQX1ZFUlNJT05fRk9STShTUF9WRVJTSU9OX01BSk9SLCBTUF9WRVJTSU9OX01JTk9SKQorCisvKiBUaGUgbWFjcm9zIGJlbG93IGFyZSB1c2VkIHRvIGlkZW50aWZ5IFNQTSBjYWxscyBmcm9tIHRoZSBTTUMgZnVuY3Rpb24gSUQgKi8KKyNkZWZpbmUgU1BNX0ZJRF9NQVNLCQkJVSgweGZmZmYpCisjZGVmaW5lIFNQTV9GSURfTUlOX1ZBTFVFCQlVKDB4NDApCisjZGVmaW5lIFNQTV9GSURfTUFYX1ZBTFVFCQlVKDB4N2YpCisjZGVmaW5lIGlzX3NwbV9maWQoX2ZpZCkJCQkJCQlcCisJCSgoKChfZmlkKSAmIFNQTV9GSURfTUFTSykgPj0gU1BNX0ZJRF9NSU5fVkFMVUUpICYmCVwKKwkJICgoKF9maWQpICYgU1BNX0ZJRF9NQVNLKSA8PSBTUE1fRklEX01BWF9WQUxVRSkpCisKKy8qCisgKiBTTUMgSURzIGRlZmluZWQgZm9yIGFjY2Vzc2luZyBzZXJ2aWNlcyBpbXBsZW1lbnRlZCBieSB0aGUgU2VjdXJlIFBhcnRpdGlvbgorICogTWFuYWdlciBmcm9tIHRoZSBTZWN1cmUgUGFydGl0aW9uKHMpLiBUaGVzZSBzZXJ2aWNlcyBlbmFibGUgYSBwYXJ0aXRpb24gdG8KKyAqIGhhbmRsZSBkZWxlZ2F0ZWQgZXZlbnRzIGFuZCByZXF1ZXN0IHByaXZpbGVnZWQgb3BlcmF0aW9ucyBmcm9tIHRoZSBtYW5hZ2VyLgorICovCisjZGVmaW5lIFNQTV9WRVJTSU9OX0FBUkNIMzIJCQlVKDB4ODQwMDAwNjApCisjZGVmaW5lIFNQX0VWRU5UX0NPTVBMRVRFX0FBUkNINjQJCVUoMHhDNDAwMDA2MSkKKyNkZWZpbmUgU1BfTUVNT1JZX0FUVFJJQlVURVNfR0VUX0FBUkNINjQJVSgweEM0MDAwMDY0KQorI2RlZmluZSBTUF9NRU1PUllfQVRUUklCVVRFU19TRVRfQUFSQ0g2NAlVKDB4QzQwMDAwNjUpCisKKy8qCisgKiBNYWNyb3MgdXNlZCBieSBTUF9NRU1PUllfQVRUUklCVVRFU19TRVRfQUFSQ0g2NC4KKyAqLworCisjZGVmaW5lIFNQX01FTU9SWV9BVFRSSUJVVEVTX0FDQ0VTU19OT0FDQ0VTUwlVKDApCisjZGVmaW5lIFNQX01FTU9SWV9BVFRSSUJVVEVTX0FDQ0VTU19SVwkJVSgxKQorLyogVmFsdWUgVSgyKSBpcyByZXNlcnZlZC4gKi8KKyNkZWZpbmUgU1BfTUVNT1JZX0FUVFJJQlVURVNfQUNDRVNTX1JPCQlVKDMpCisjZGVmaW5lIFNQX01FTU9SWV9BVFRSSUJVVEVTX0FDQ0VTU19NQVNLCVUoMykKKyNkZWZpbmUgU1BfTUVNT1JZX0FUVFJJQlVURVNfQUNDRVNTX1NISUZUCTAKKworI2RlZmluZSBTUF9NRU1PUllfQVRUUklCVVRFU19FWEVDCQkoVSgwKSA8PCAyKQorI2RlZmluZSBTUF9NRU1PUllfQVRUUklCVVRFU19OT05fRVhFQwkJKFUoMSkgPDwgMikKKworLyoKKyAqIFNNQyBJRHMgZGVmaW5lZCBpbiBbMV0gZm9yIGFjY2Vzc2luZyBzZWN1cmUgcGFydGl0aW9uIHNlcnZpY2VzIGZyb20gdGhlCisgKiBOb24tc2VjdXJlIHdvcmxkLiBUaGVzZSBGSURzIG9jY3VweSB0aGUgcmFuZ2UgMHg0MCAtIDB4NWYKKyAqIFsxXSBERU4wMDYwQV9BUk1fTU1fSW50ZXJmYWNlX1NwZWNpZmljYXRpb24ucGRmCisgKi8KKyNkZWZpbmUgU1BfVkVSU0lPTl9BQVJDSDY0CQlVKDB4QzQwMDAwNDApCisjZGVmaW5lIFNQX1ZFUlNJT05fQUFSQ0gzMgkJVSgweDg0MDAwMDQwKQorCisjZGVmaW5lIE1NX0NPTU1VTklDQVRFX0FBUkNINjQJCVUoMHhDNDAwMDA0MSkKKyNkZWZpbmUgTU1fQ09NTVVOSUNBVEVfQUFSQ0gzMgkJVSgweDg0MDAwMDQxKQorCisvKiBTUE0gZXJyb3IgY29kZXMuICovCisjZGVmaW5lIFNQTV9TVUNDRVNTCQkwCisjZGVmaW5lIFNQTV9OT1RfU1VQUE9SVEVECS0xCisjZGVmaW5lIFNQTV9JTlZBTElEX1BBUkFNRVRFUgktMgorI2RlZmluZSBTUE1fREVOSUVECQktMworI2RlZmluZSBTUE1fTk9fTUVNT1JZCQktNQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK2ludDMyX3Qgc3BtX3NldHVwKHZvaWQpOworCit1aW50NjRfdCBzcG1fc21jX2hhbmRsZXIodWludDMyX3Qgc21jX2ZpZCwKKwkJCSB1aW50NjRfdCB4MSwKKwkJCSB1aW50NjRfdCB4MiwKKwkJCSB1aW50NjRfdCB4MywKKwkJCSB1aW50NjRfdCB4NCwKKwkJCSB2b2lkICpjb29raWUsCisJCQkgdm9pZCAqaGFuZGxlLAorCQkJIHVpbnQ2NF90IGZsYWdzKTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19TUE1fU1ZDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGliL2FhcmNoMzIvYXJtMzJfYWVhYmlfZGl2bW9kLmMgYi9saWIvYWFyY2gzMi9hcm0zMl9hZWFiaV9kaXZtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGYyZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2FhcmNoMzIvYXJtMzJfYWVhYmlfZGl2bW9kLmMKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKy8qCisgKiBGb3JtIEFCSSBzcGVjaWZpY2F0aW9uczoKKyAqICAgICAgaW50IF9fYWVhYmlfaWRpdihpbnQgbnVtZXJhdG9yLCBpbnQgZGVub21pbmF0b3IpOworICogICAgIHVuc2lnbmVkIF9fYWVhYmlfdWlkaXYodW5zaWduZWQgbnVtZXJhdG9yLCB1bnNpZ25lZCBkZW5vbWluYXRvcik7CisgKgorICogICAgIHR5cGVkZWYgc3RydWN0IHsgaW50IHF1b3Q7IGludCByZW07IH0gaWRpdl9yZXR1cm47CisgKiAgICAgdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBxdW90OyB1bnNpZ25lZCByZW07IH0gdWlkaXZfcmV0dXJuOworICoKKyAqICAgICBfX3ZhbHVlX2luX3JlZ3MgaWRpdl9yZXR1cm4gX19hZWFiaV9pZGl2bW9kKGludCBudW1lcmF0b3IsCisgKiAgICAgaW50ICpkZW5vbWluYXRvcik7CisgKiAgICAgX192YWx1ZV9pbl9yZWdzIHVpZGl2X3JldHVybiBfX2FlYWJpX3VpZGl2bW9kKHVuc2lnbmVkICpudW1lcmF0b3IsCisgKiAgICAgdW5zaWduZWQgZGVub21pbmF0b3IpOworICovCisKKy8qIHN0cnVjdCBxciAtIHN0b3JlcyBxdXRpZW50L3JlbWFpbmRlciB0byBoYW5kbGUgZGl2bW9kIEVBQkkgaW50ZXJmYWNlcy4gKi8KK3N0cnVjdCBxciB7CisJdW5zaWduZWQgaW50IHE7CQkvKiBjb21wdXRlZCBxdW90aWVudCAqLworCXVuc2lnbmVkIGludCByOwkJLyogY29tcHV0ZWQgcmVtYWluZGVyICovCisJdW5zaWduZWQgaW50IHFfbjsJLyogc3BlY2ZpY2llcyBpZiBxdW90aWVudCBzaGFsbCBiZSBuZWdhdGl2ZSAqLworCXVuc2lnbmVkIGludCByX247CS8qIHNwZWNmaWNpZXMgaWYgcmVtYWluZGVyIHNoYWxsIGJlIG5lZ2F0aXZlICovCit9OworCitzdGF0aWMgdm9pZCB1aW50X2Rpdl9xcih1bnNpZ25lZCBpbnQgbnVtZXJhdG9yLCB1bnNpZ25lZCBpbnQgZGVub21pbmF0b3IsCisJCQlzdHJ1Y3QgcXIgKnFyKTsKKworLyogcmV0dXJucyBpbiBSMCBhbmQgUjEgYnkgdGFpbCBjYWxsaW5nIGFuIGFzbSBmdW5jdGlvbiAqLwordW5zaWduZWQgaW50IF9fYWVhYmlfdWlkaXZtb2QodW5zaWduZWQgaW50IG51bWVyYXRvciwgdW5zaWduZWQgaW50IGRlbm9taW5hdG9yKTsKKwordW5zaWduZWQgaW50IF9fYWVhYmlfdWlkaXYodW5zaWduZWQgaW50IG51bWVyYXRvciwgdW5zaWduZWQgaW50IGRlbm9taW5hdG9yKTsKK3Vuc2lnbmVkIGludCBfX2FlYWJpX3VpbW9kKHVuc2lnbmVkIGludCBudW1lcmF0b3IsIHVuc2lnbmVkIGludCBkZW5vbWluYXRvcik7CisKKy8qIHJldHVybnMgaW4gUjAgYW5kIFIxIGJ5IHRhaWwgY2FsbGluZyBhbiBhc20gZnVuY3Rpb24gKi8KK3NpZ25lZCBpbnQgX19hZWFiaV9pZGl2bW9kKHNpZ25lZCBpbnQgbnVtZXJhdG9yLCBzaWduZWQgaW50IGRlbm9taW5hdG9yKTsKKworc2lnbmVkIGludCBfX2FlYWJpX2lkaXYoc2lnbmVkIGludCBudW1lcmF0b3IsIHNpZ25lZCBpbnQgZGVub21pbmF0b3IpOworc2lnbmVkIGludCBfX2FlYWJpX2ltb2Qoc2lnbmVkIGludCBudW1lcmF0b3IsIHNpZ25lZCBpbnQgZGVub21pbmF0b3IpOworCisvKgorICogX19zdGVfaWRpdm1vZF9yZXRfdCBfX2FlYWJpX2lkaXZtb2Qoc2lnbmVkIG51bWVyYXRvciwgc2lnbmVkIGRlbm9taW5hdG9yKQorICogTnVtZXJhdG9yIGFuZCBEZW5vbWluYXRvciBhcmUgcmVjZWl2ZWQgaW4gUjAgYW5kIFIxLgorICogV2hlcmUgX19zdGVfaWRpdm1vZF9yZXRfdCBpcyByZXR1cm5lZCBpbiBSMCBhbmQgUjEuCisgKgorICogX19zdGVfdWlkaXZtb2RfcmV0X3QgX19hZWFiaV91aWRpdm1vZCh1bnNpZ25lZCBudW1lcmF0b3IsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbm9taW5hdG9yKQorICogTnVtZXJhdG9yIGFuZCBEZW5vbWluYXRvciBhcmUgcmVjZWl2ZWQgaW4gUjAgYW5kIFIxLgorICogV2hlcmUgX19zdGVfdWlkaXZtb2RfcmV0X3QgaXMgcmV0dXJuZWQgaW4gUjAgYW5kIFIxLgorICovCisjaWZkZWYgX19HTlVDX18KK3NpZ25lZCBpbnQgcmV0X2lkaXZtb2RfdmFsdWVzKHNpZ25lZCBpbnQgcXVvdGllbnQsIHNpZ25lZCBpbnQgcmVtYWluZGVyKTsKK3Vuc2lnbmVkIGludCByZXRfdWlkaXZtb2RfdmFsdWVzKHVuc2lnbmVkIGludCBxdW90aWVudCwgdW5zaWduZWQgaW50IHJlbWFpbmRlcik7CisjZWxzZQorI2Vycm9yICJDb21waWxlciBub3Qgc3VwcG9ydGVkIgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGRpdmlzaW9uX3FyKHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcCwgc3RydWN0IHFyICpxcikKK3sKKwl1bnNpZ25lZCBpbnQgaSA9IDEsIHEgPSAwOworCisJaWYgKHAgPT0gMCkgeworCQlxci0+ciA9IDB4RkZGRkZGRkY7CS8qIGRpdmlzaW9uIGJ5IDAgKi8KKwkJcmV0dXJuOworCX0KKworCXdoaWxlICgocCA+PiAzMSkgPT0gMCkgeworCQlpID0gaSA8PCAxOwkvKiBjb3VudCB0aGUgbWF4IGRpdmlzaW9uIHN0ZXBzICovCisJCXAgPSBwIDw8IDE7ICAgICAvKiBpbmNyZWFzZSBwIHVudGlsIGl0IGhhcyBtYXhpbXVtIHNpemUqLworCX0KKworCXdoaWxlIChpID4gMCkgeworCQlxID0gcSA8PCAxOwkvKiB3cml0ZSBiaXQgaW4gcSBhdCBpbmRleCAoc2l6ZS0xKSAqLworCQlpZiAobiA+PSBwKSB7CisJCQluIC09IHA7CisJCQlxKys7CisJCX0KKwkJcCA9IHAgPj4gMTsJLyogZGVjcmVhc2UgcCAqLworCQlpID0gaSA+PiAxOwkvKiBkZWNyZWFzZSByZW1haW5pbmcgc2l6ZSBpbiBxICovCisJfQorCXFyLT5yID0gbjsKKwlxci0+cSA9IHE7Cit9CisKK3N0YXRpYyB2b2lkIHVpbnRfZGl2X3FyKHVuc2lnbmVkIGludCBudW1lcmF0b3IsIHVuc2lnbmVkIGludCBkZW5vbWluYXRvciwKKwkJCXN0cnVjdCBxciAqcXIpCit7CisJZGl2aXNpb25fcXIobnVtZXJhdG9yLCBkZW5vbWluYXRvciwgcXIpOworCisJLyogbmVnYXRlIHF1b3RpZW50IGFuZC9vciByZW1haW5kZXIgYWNjb3JkaW5nIHRvIHJlcXVlc3RlciAqLworCWlmIChxci0+cV9uKQorCQlxci0+cSA9IC1xci0+cTsKKwlpZiAocXItPnJfbikKKwkJcXItPnIgPSAtcXItPnI7Cit9CisKK3Vuc2lnbmVkIGludCBfX2FlYWJpX3VpZGl2KHVuc2lnbmVkIGludCBudW1lcmF0b3IsIHVuc2lnbmVkIGludCBkZW5vbWluYXRvcikKK3sKKwlzdHJ1Y3QgcXIgcXIgPSB7IC5xX24gPSAwLCAucl9uID0gMCB9OworCisJdWludF9kaXZfcXIobnVtZXJhdG9yLCBkZW5vbWluYXRvciwgJnFyKTsKKworCXJldHVybiBxci5xOworfQorCit1bnNpZ25lZCBpbnQgX19hZWFiaV91aW1vZCh1bnNpZ25lZCBpbnQgbnVtZXJhdG9yLCB1bnNpZ25lZCBpbnQgZGVub21pbmF0b3IpCit7CisJc3RydWN0IHFyIHFyID0geyAucV9uID0gMCwgLnJfbiA9IDAgfTsKKworCXVpbnRfZGl2X3FyKG51bWVyYXRvciwgZGVub21pbmF0b3IsICZxcik7CisKKwlyZXR1cm4gcXIucjsKK30KKwordW5zaWduZWQgaW50IF9fYWVhYmlfdWlkaXZtb2QodW5zaWduZWQgaW50IG51bWVyYXRvciwgdW5zaWduZWQgaW50IGRlbm9taW5hdG9yKQoreworCXN0cnVjdCBxciBxciA9IHsgLnFfbiA9IDAsIC5yX24gPSAwIH07CisKKwl1aW50X2Rpdl9xcihudW1lcmF0b3IsIGRlbm9taW5hdG9yLCAmcXIpOworCisJcmV0dXJuIHJldF91aWRpdm1vZF92YWx1ZXMocXIucSwgcXIucik7Cit9CisKK3NpZ25lZCBpbnQgX19hZWFiaV9pZGl2KHNpZ25lZCBpbnQgbnVtZXJhdG9yLCBzaWduZWQgaW50IGRlbm9taW5hdG9yKQoreworCXN0cnVjdCBxciBxciA9IHsgLnFfbiA9IDAsIC5yX24gPSAwIH07CisKKwlpZiAoKChudW1lcmF0b3IgPCAwKSAmJiAoZGVub21pbmF0b3IgPiAwKSkgfHwKKwkgICAgKChudW1lcmF0b3IgPiAwKSAmJiAoZGVub21pbmF0b3IgPCAwKSkpCisJCXFyLnFfbiA9IDE7CS8qIHF1b3RpZW50IHNoYWxsIGJlIG5lZ2F0ZSAqLworCisJaWYgKG51bWVyYXRvciA8IDApIHsKKwkJbnVtZXJhdG9yID0gLW51bWVyYXRvcjsKKwkJcXIucl9uID0gMTsJLyogcmVtYWluZGVyIHNoYWxsIGJlIG5lZ2F0ZSAqLworCX0KKworCWlmIChkZW5vbWluYXRvciA8IDApCisJCWRlbm9taW5hdG9yID0gLWRlbm9taW5hdG9yOworCisJdWludF9kaXZfcXIobnVtZXJhdG9yLCBkZW5vbWluYXRvciwgJnFyKTsKKworCXJldHVybiBxci5xOworfQorCitzaWduZWQgaW50IF9fYWVhYmlfaW1vZChzaWduZWQgaW50IG51bWVyYXRvciwgc2lnbmVkIGludCBkZW5vbWluYXRvcikKK3sKKwlzaWduZWQgaW50IHM7CisJc2lnbmVkIGludCBpOworCXNpZ25lZCBpbnQgajsKKwlzaWduZWQgaW50IGg7CisJc3RydWN0IHFyIHFyID0geyAucV9uID0gMCwgLnJfbiA9IDAgfTsKKworCS8qIGluIGNhc2UgbW9kdWxvIG9mIGEgcG93ZXIgb2YgMiAqLworCWZvciAoaSA9IDAsIGogPSAwLCBoID0gMCwgcyA9IGRlbm9taW5hdG9yOyAocyAhPSAwKSB8fCAoaCA+IDEpOyBpKyspIHsKKwkJaWYgKHMgJiAxKSB7CisJCQlqID0gaTsKKwkJCWgrKzsKKwkJfQorCQlzID0gcyA+PiAxOworCX0KKwlpZiAoaCA9PSAxKQorCQlyZXR1cm4gbnVtZXJhdG9yID4+IGo7CisKKwlpZiAoKChudW1lcmF0b3IgPCAwKSAmJiAoZGVub21pbmF0b3IgPiAwKSkgfHwKKwkgICAgKChudW1lcmF0b3IgPiAwKSAmJiAoZGVub21pbmF0b3IgPCAwKSkpCisJCXFyLnFfbiA9IDE7CS8qIHF1b3RpZW50IHNoYWxsIGJlIG5lZ2F0ZSAqLworCisJaWYgKG51bWVyYXRvciA8IDApIHsKKwkJbnVtZXJhdG9yID0gLW51bWVyYXRvcjsKKwkJcXIucl9uID0gMTsJLyogcmVtYWluZGVyIHNoYWxsIGJlIG5lZ2F0ZSAqLworCX0KKworCWlmIChkZW5vbWluYXRvciA8IDApCisJCWRlbm9taW5hdG9yID0gLWRlbm9taW5hdG9yOworCisJdWludF9kaXZfcXIobnVtZXJhdG9yLCBkZW5vbWluYXRvciwgJnFyKTsKKworCXJldHVybiBxci5yOworfQorCitzaWduZWQgaW50IF9fYWVhYmlfaWRpdm1vZChzaWduZWQgaW50IG51bWVyYXRvciwgc2lnbmVkIGludCBkZW5vbWluYXRvcikKK3sKKwlzdHJ1Y3QgcXIgcXIgPSB7IC5xX24gPSAwLCAucl9uID0gMCB9OworCisJaWYgKCgobnVtZXJhdG9yIDwgMCkgJiYgKGRlbm9taW5hdG9yID4gMCkpIHx8CisJICAgICgobnVtZXJhdG9yID4gMCkgJiYgKGRlbm9taW5hdG9yIDwgMCkpKQorCQlxci5xX24gPSAxOwkvKiBxdW90aWVudCBzaGFsbCBiZSBuZWdhdGUgKi8KKworCWlmIChudW1lcmF0b3IgPCAwKSB7CisJCW51bWVyYXRvciA9IC1udW1lcmF0b3I7CisJCXFyLnJfbiA9IDE7CS8qIHJlbWFpbmRlciBzaGFsbCBiZSBuZWdhdGUgKi8KKwl9CisKKwlpZiAoZGVub21pbmF0b3IgPCAwKQorCQlkZW5vbWluYXRvciA9IC1kZW5vbWluYXRvcjsKKworCXVpbnRfZGl2X3FyKG51bWVyYXRvciwgZGVub21pbmF0b3IsICZxcik7CisKKwlyZXR1cm4gcmV0X2lkaXZtb2RfdmFsdWVzKHFyLnEsIHFyLnIpOworfQpkaWZmIC0tZ2l0IGEvbGliL2FhcmNoMzIvYXJtMzJfYWVhYmlfZGl2bW9kX2EzMi5TIGIvbGliL2FhcmNoMzIvYXJtMzJfYWVhYmlfZGl2bW9kX2EzMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTVkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYWFyY2gzMi9hcm0zMl9hZWFiaV9kaXZtb2RfYTMyLlMKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPGFzbV9tYWNyb3MuUz4KKworLyoKKyAqIEVBQkkgd3JhcHBlcnMgZnJvbSB0aGUgdWRpdm1vZCBhbmQgaWRpdm1vZCBmdW5jdGlvbnMKKyAqLworCisJLmdsb2JsIHJldF91aWRpdm1vZF92YWx1ZXMKKwkuZ2xvYmwgcmV0X2lkaXZtb2RfdmFsdWVzCisKKy8qCisgKiBzaWduZWQgcmV0X2lkaXZtb2RfdmFsdWVzKHNpZ25lZCBxdW90LCBzaWduZWQgcmVtKTsKKyAqIHJldHVybiBxdW90aWVudCBhbmQgcmVtYWluaW5nIHRoZSBFQUJJIHdheSAocmVncyByMCxyMSkKKyAqLworZnVuYyByZXRfaWRpdm1vZF92YWx1ZXMKKyAgICAgICAgYnggbHIKK2VuZGZ1bmMgcmV0X2lkaXZtb2RfdmFsdWVzCisKKy8qCisgKiB1bnNpZ25lZCByZXRfdWlkaXZtb2RfdmFsdWVzKHVuc2lnbmVkIHF1b3QsIHVuc2lnbmVkIHJlbSk7CisgKiByZXR1cm4gcXVvdGllbnQgYW5kIHJlbWFpbmluZyB0aGUgRUFCSSB3YXkgKHJlZ3MgcjAscjEpCisgKi8KK2Z1bmMgcmV0X3VpZGl2bW9kX3ZhbHVlcworICAgICAgICBieCAgICAgIGxyCitlbmRmdW5jIHJldF91aWRpdm1vZF92YWx1ZXMKZGlmZiAtLWdpdCBhL2xpYi9hYXJjaDY0L21pc2NfaGVscGVycy5TIGIvbGliL2FhcmNoNjQvbWlzY19oZWxwZXJzLlMKaW5kZXggNzgxNTNiZi4uOWRmZTQ2YSAxMDA2NDQKLS0tIGEvbGliL2FhcmNoNjQvbWlzY19oZWxwZXJzLlMKKysrIGIvbGliL2FhcmNoNjQvbWlzY19oZWxwZXJzLlMKQEAgLTE4LDcgKzE4LDkgQEAKIAkuZ2xvYmwJemVyb21lbTE2CiAJLmdsb2JsCW1lbWNweTE2CiAKKwkuZ2xvYmwJZGlzYWJsZV9tbXVfZWwxCiAJLmdsb2JsCWRpc2FibGVfbW11X2VsMworCS5nbG9ibAlkaXNhYmxlX21tdV9pY2FjaGVfZWwxCiAJLmdsb2JsCWRpc2FibGVfbW11X2ljYWNoZV9lbDMKIAogI2lmIFNVUFBPUlRfVkZQCkBAIC00NTEsMTEgKzQ1MywxMSBAQAogCiBmdW5jIGRpc2FibGVfbW11X2VsMwogCW1vdgl4MSwgIyhTQ1RMUl9NX0JJVCB8IFNDVExSX0NfQklUKQotZG9fZGlzYWJsZV9tbXU6Citkb19kaXNhYmxlX21tdV9lbDM6CiAJbXJzCXgwLCBzY3Rscl9lbDMKIAliaWMJeDAsIHgwLCB4MQogCW1zcglzY3Rscl9lbDMsIHgwCi0JaXNiCQkJCS8vIGVuc3VyZSBNTVUgaXMgb2ZmCisJaXNiCS8qIGVuc3VyZSBNTVUgaXMgb2ZmICovCiAJZHNiCXN5CiAJcmV0CiBlbmRmdW5jIGRpc2FibGVfbW11X2VsMwpAQCAtNDYzLDEwICs0NjUsMzIgQEAKIAogZnVuYyBkaXNhYmxlX21tdV9pY2FjaGVfZWwzCiAJbW92CXgxLCAjKFNDVExSX01fQklUIHwgU0NUTFJfQ19CSVQgfCBTQ1RMUl9JX0JJVCkKLQliCWRvX2Rpc2FibGVfbW11CisJYglkb19kaXNhYmxlX21tdV9lbDMKIGVuZGZ1bmMgZGlzYWJsZV9tbXVfaWNhY2hlX2VsMwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERpc2FibGUgdGhlIE1NVSBhdCBFTDEKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK2Z1bmMgZGlzYWJsZV9tbXVfZWwxCisJbW92CXgxLCAjKFNDVExSX01fQklUIHwgU0NUTFJfQ19CSVQpCitkb19kaXNhYmxlX21tdV9lbDE6CisJbXJzCXgwLCBzY3Rscl9lbDEKKwliaWMJeDAsIHgwLCB4MQorCW1zcglzY3Rscl9lbDEsIHgwCisJaXNiCS8qIGVuc3VyZSBNTVUgaXMgb2ZmICovCisJZHNiCXN5CisJcmV0CitlbmRmdW5jIGRpc2FibGVfbW11X2VsMQorCisKK2Z1bmMgZGlzYWJsZV9tbXVfaWNhY2hlX2VsMQorCW1vdgl4MSwgIyhTQ1RMUl9NX0JJVCB8IFNDVExSX0NfQklUIHwgU0NUTFJfSV9CSVQpCisJYglkb19kaXNhYmxlX21tdV9lbDEKK2VuZGZ1bmMgZGlzYWJsZV9tbXVfaWNhY2hlX2VsMQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEVuYWJsZSB0aGUgdXNlIG9mIFZGUCBhdCBFTDMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCmRpZmYgLS1naXQgYS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hMTIuUyBiL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2ExMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYzk3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hMTIuUwpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaW5jbHVkZSA8YXJjaC5oPgorI2luY2x1ZGUgPGFzbV9tYWNyb3MuUz4KKyNpbmNsdWRlIDxhc3NlcnRfbWFjcm9zLlM+CisjaW5jbHVkZSA8Y29ydGV4X2ExMi5oPgorI2luY2x1ZGUgPGNwdV9tYWNyb3MuUz4KKworCS5tYWNybyBhc3NlcnRfY2FjaGVfZW5hYmxlZAorI2lmIEVOQUJMRV9BU1NFUlRJT05TCisJCWxkY29wcglyMCwgU0NUTFIKKwkJdHN0CXIwLCAjU0NUTFJfQ19CSVQKKwkJQVNNX0FTU0VSVChlcSkKKyNlbmRpZgorCS5lbmRtCisKK2Z1bmMgY29ydGV4X2ExMl9kaXNhYmxlX3NtcAorCWxkY29wcglyMCwgQUNUTFIKKwliaWMJcjAsICNDT1JURVhfQTEyX0FDVExSX1NNUF9CSVQKKwlzdGNvcHIJcjAsIEFDVExSCisJaXNiCisJZHNiCXN5CisJYngJbHIKK2VuZGZ1bmMgY29ydGV4X2ExMl9kaXNhYmxlX3NtcAorCitmdW5jIGNvcnRleF9hMTJfZW5hYmxlX3NtcAorCWxkY29wcglyMCwgQUNUTFIKKwlvcnIJcjAsICNDT1JURVhfQTEyX0FDVExSX1NNUF9CSVQKKwlzdGNvcHIJcjAsIEFDVExSCisJaXNiCisJYngJbHIKK2VuZGZ1bmMgY29ydGV4X2ExMl9lbmFibGVfc21wCisKK2Z1bmMgY29ydGV4X2ExMl9yZXNldF9mdW5jCisJYgljb3J0ZXhfYTEyX2VuYWJsZV9zbXAKK2VuZGZ1bmMgY29ydGV4X2ExMl9yZXNldF9mdW5jCisKK2Z1bmMgY29ydGV4X2ExMl9jb3JlX3B3cl9kd24KKwlwdXNoCXtyMTIsIGxyfQorCisJYXNzZXJ0X2NhY2hlX2VuYWJsZWQKKworCS8qIEZsdXNoIEwxIGNhY2hlICovCisJbW92CXIwLCAjRENfT1BfQ0lTVworCWJsCWRjc3dfb3BfbGV2ZWwxCisKKwkvKiBFeGl0IGNsdXN0ZXIgY29oZXJlbmN5ICovCisJcG9wCXtyMTIsIGxyfQorCWIJY29ydGV4X2ExMl9kaXNhYmxlX3NtcAorZW5kZnVuYyBjb3J0ZXhfYTEyX2NvcmVfcHdyX2R3bgorCitmdW5jIGNvcnRleF9hMTJfY2x1c3Rlcl9wd3JfZHduCisJcHVzaAl7cjEyLCBscn0KKworCWFzc2VydF9jYWNoZV9lbmFibGVkCisKKwkvKiBGbHVzaCBMMSBjYWNoZXMgKi8KKwltb3YJcjAsICNEQ19PUF9DSVNXCisJYmwJZGNzd19vcF9sZXZlbDEKKworCWJsCXBsYXRfZGlzYWJsZV9hY3AKKworCS8qIEV4aXQgY2x1c3RlciBjb2hlcmVuY3kgKi8KKwlwb3AJe3IxMiwgbHJ9CisJYgljb3J0ZXhfYTEyX2Rpc2FibGVfc21wCitlbmRmdW5jIGNvcnRleF9hMTJfY2x1c3Rlcl9wd3JfZHduCisKK2RlY2xhcmVfY3B1X29wcyBjb3J0ZXhfYTEyLCBDT1JURVhfQTEyX01JRFIsIFwKKwljb3J0ZXhfYTEyX3Jlc2V0X2Z1bmMsIFwKKwljb3J0ZXhfYTEyX2NvcmVfcHdyX2R3biwgXAorCWNvcnRleF9hMTJfY2x1c3Rlcl9wd3JfZHduCmRpZmYgLS1naXQgYS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hMTUuUyBiL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2ExNS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNWExMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hMTUuUwpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaW5jbHVkZSA8YXJjaC5oPgorI2luY2x1ZGUgPGFzbV9tYWNyb3MuUz4KKyNpbmNsdWRlIDxhc3NlcnRfbWFjcm9zLlM+CisjaW5jbHVkZSA8Y29ydGV4X2ExNS5oPgorI2luY2x1ZGUgPGNwdV9tYWNyb3MuUz4KKworLyoKKyAqIENvcnRleC1BMTUgc3VwcG9ydCBMUEFFIGFuZCBWaXJ0dWFsaXphdGlvbiBFeHRlbnNpb25zLgorICogRG9uJ3QgY2FyZSBpZiBjb25maXVncmF0aW9uIHVzZXMgb3Igbm90IExQQUUgYW5kIFZFLgorICogVGhlcmVmb3JlLCB3aGVyZSB3ZSBkb24ndCBjaGVjayBBUkNIX0lTX0FSTVY3X1dJVEhfTFBBRS9WRQorICovCisKKwkubWFjcm8gYXNzZXJ0X2NhY2hlX2VuYWJsZWQKKyNpZiBFTkFCTEVfQVNTRVJUSU9OUworCQlsZGNvcHIJcjAsIFNDVExSCisJCXRzdAlyMCwgI1NDVExSX0NfQklUCisJCUFTTV9BU1NFUlQoZXEpCisjZW5kaWYKKwkuZW5kbQorCitmdW5jIGNvcnRleF9hMTVfZGlzYWJsZV9zbXAKKwlsZGNvcHIJcjAsIEFDVExSCisJYmljCXIwLCAjQ09SVEVYX0ExNV9BQ1RMUl9TTVBfQklUCisJc3Rjb3ByCXIwLCBBQ1RMUgorCWlzYgorCWRzYglzeQorCWJ4CWxyCitlbmRmdW5jIGNvcnRleF9hMTVfZGlzYWJsZV9zbXAKKworZnVuYyBjb3J0ZXhfYTE1X2VuYWJsZV9zbXAKKwlsZGNvcHIJcjAsIEFDVExSCisJb3JyCXIwLCAjQ09SVEVYX0ExNV9BQ1RMUl9TTVBfQklUCisJc3Rjb3ByCXIwLCBBQ1RMUgorCWlzYgorCWJ4CWxyCitlbmRmdW5jIGNvcnRleF9hMTVfZW5hYmxlX3NtcAorCitmdW5jIGNvcnRleF9hMTVfcmVzZXRfZnVuYworCWIJY29ydGV4X2ExNV9lbmFibGVfc21wCitlbmRmdW5jIGNvcnRleF9hMTVfcmVzZXRfZnVuYworCitmdW5jIGNvcnRleF9hMTVfY29yZV9wd3JfZHduCisJcHVzaAl7cjEyLCBscn0KKworCWFzc2VydF9jYWNoZV9lbmFibGVkCisKKwkvKiBGbHVzaCBMMSBjYWNoZSAqLworCW1vdglyMCwgI0RDX09QX0NJU1cKKwlibAlkY3N3X29wX2xldmVsMQorCisJLyogRXhpdCBjbHVzdGVyIGNvaGVyZW5jeSAqLworCXBvcAl7cjEyLCBscn0KKwliCWNvcnRleF9hMTVfZGlzYWJsZV9zbXAKK2VuZGZ1bmMgY29ydGV4X2ExNV9jb3JlX3B3cl9kd24KKworZnVuYyBjb3J0ZXhfYTE1X2NsdXN0ZXJfcHdyX2R3bgorCXB1c2gJe3IxMiwgbHJ9CisKKwlhc3NlcnRfY2FjaGVfZW5hYmxlZAorCisJLyogRmx1c2ggTDEgY2FjaGVzICovCisJbW92CXIwLCAjRENfT1BfQ0lTVworCWJsCWRjc3dfb3BfbGV2ZWwxCisKKwlibAlwbGF0X2Rpc2FibGVfYWNwCisKKwkvKiBFeGl0IGNsdXN0ZXIgY29oZXJlbmN5ICovCisJcG9wCXtyMTIsIGxyfQorCWIJY29ydGV4X2ExNV9kaXNhYmxlX3NtcAorZW5kZnVuYyBjb3J0ZXhfYTE1X2NsdXN0ZXJfcHdyX2R3bgorCitkZWNsYXJlX2NwdV9vcHMgY29ydGV4X2ExNSwgQ09SVEVYX0ExNV9NSURSLCBcCisJY29ydGV4X2ExNV9yZXNldF9mdW5jLCBcCisJY29ydGV4X2ExNV9jb3JlX3B3cl9kd24sIFwKKwljb3J0ZXhfYTE1X2NsdXN0ZXJfcHdyX2R3bgpkaWZmIC0tZ2l0IGEvbGliL2NwdXMvYWFyY2gzMi9jb3J0ZXhfYTE3LlMgYi9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hMTcuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTZkNGYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2NwdXMvYWFyY2gzMi9jb3J0ZXhfYTE3LlMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPGFyY2guaD4KKyNpbmNsdWRlIDxhc21fbWFjcm9zLlM+CisjaW5jbHVkZSA8YXNzZXJ0X21hY3Jvcy5TPgorI2luY2x1ZGUgPGNvcnRleF9hMTcuaD4KKyNpbmNsdWRlIDxjcHVfbWFjcm9zLlM+CisKKwkubWFjcm8gYXNzZXJ0X2NhY2hlX2VuYWJsZWQKKyNpZiBFTkFCTEVfQVNTRVJUSU9OUworCQlsZGNvcHIJcjAsIFNDVExSCisJCXRzdAlyMCwgI1NDVExSX0NfQklUCisJCUFTTV9BU1NFUlQoZXEpCisjZW5kaWYKKwkuZW5kbQorCitmdW5jIGNvcnRleF9hMTdfZGlzYWJsZV9zbXAKKwlsZGNvcHIJcjAsIEFDVExSCisJYmljCXIwLCAjQ09SVEVYX0ExN19BQ1RMUl9TTVBfQklUCisJc3Rjb3ByCXIwLCBBQ1RMUgorCWlzYgorCWRzYglzeQorCWJ4CWxyCitlbmRmdW5jIGNvcnRleF9hMTdfZGlzYWJsZV9zbXAKKworZnVuYyBjb3J0ZXhfYTE3X2VuYWJsZV9zbXAKKwlsZGNvcHIJcjAsIEFDVExSCisJb3JyCXIwLCAjQ09SVEVYX0ExN19BQ1RMUl9TTVBfQklUCisJc3Rjb3ByCXIwLCBBQ1RMUgorCWlzYgorCWJ4CWxyCitlbmRmdW5jIGNvcnRleF9hMTdfZW5hYmxlX3NtcAorCitmdW5jIGNvcnRleF9hMTdfcmVzZXRfZnVuYworCWIJY29ydGV4X2ExN19lbmFibGVfc21wCitlbmRmdW5jIGNvcnRleF9hMTdfcmVzZXRfZnVuYworCitmdW5jIGNvcnRleF9hMTdfY29yZV9wd3JfZHduCisJcHVzaAl7cjEyLCBscn0KKworCWFzc2VydF9jYWNoZV9lbmFibGVkCisKKwkvKiBGbHVzaCBMMSBjYWNoZSAqLworCW1vdglyMCwgI0RDX09QX0NJU1cKKwlibAlkY3N3X29wX2xldmVsMQorCisJLyogRXhpdCBjbHVzdGVyIGNvaGVyZW5jeSAqLworCXBvcAl7cjEyLCBscn0KKwliCWNvcnRleF9hMTdfZGlzYWJsZV9zbXAKK2VuZGZ1bmMgY29ydGV4X2ExN19jb3JlX3B3cl9kd24KKworZnVuYyBjb3J0ZXhfYTE3X2NsdXN0ZXJfcHdyX2R3bgorCXB1c2gJe3IxMiwgbHJ9CisKKwlhc3NlcnRfY2FjaGVfZW5hYmxlZAorCisJLyogRmx1c2ggTDEgY2FjaGVzICovCisJbW92CXIwLCAjRENfT1BfQ0lTVworCWJsCWRjc3dfb3BfbGV2ZWwxCisKKwlibAlwbGF0X2Rpc2FibGVfYWNwCisKKwkvKiBFeGl0IGNsdXN0ZXIgY29oZXJlbmN5ICovCisJcG9wCXtyMTIsIGxyfQorCWIJY29ydGV4X2ExN19kaXNhYmxlX3NtcAorZW5kZnVuYyBjb3J0ZXhfYTE3X2NsdXN0ZXJfcHdyX2R3bgorCitkZWNsYXJlX2NwdV9vcHMgY29ydGV4X2ExNywgQ09SVEVYX0ExN19NSURSLCBcCisJY29ydGV4X2ExN19yZXNldF9mdW5jLCBcCisJY29ydGV4X2ExN19jb3JlX3B3cl9kd24sIFwKKwljb3J0ZXhfYTE3X2NsdXN0ZXJfcHdyX2R3bgpkaWZmIC0tZ2l0IGEvbGliL2NwdXMvYWFyY2gzMi9jb3J0ZXhfYTUuUyBiL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E1LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA3YzEzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E1LlMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPGFyY2guaD4KKyNpbmNsdWRlIDxhc21fbWFjcm9zLlM+CisjaW5jbHVkZSA8YXNzZXJ0X21hY3Jvcy5TPgorI2luY2x1ZGUgPGNvcnRleF9hNS5oPgorI2luY2x1ZGUgPGNwdV9tYWNyb3MuUz4KKworCS5tYWNybyBhc3NlcnRfY2FjaGVfZW5hYmxlZAorI2lmIEVOQUJMRV9BU1NFUlRJT05TCisJCWxkY29wcglyMCwgU0NUTFIKKwkJdHN0CXIwLCAjU0NUTFJfQ19CSVQKKwkJQVNNX0FTU0VSVChlcSkKKyNlbmRpZgorCS5lbmRtCisKK2Z1bmMgY29ydGV4X2E1X2Rpc2FibGVfc21wCisJbGRjb3ByCXIwLCBBQ1RMUgorCWJpYwlyMCwgI0NPUlRFWF9BNV9BQ1RMUl9TTVBfQklUCisJc3Rjb3ByCXIwLCBBQ1RMUgorCWlzYgorCWRzYglzeQorCWJ4CWxyCitlbmRmdW5jIGNvcnRleF9hNV9kaXNhYmxlX3NtcAorCitmdW5jIGNvcnRleF9hNV9lbmFibGVfc21wCisJbGRjb3ByCXIwLCBBQ1RMUgorCW9ycglyMCwgI0NPUlRFWF9BNV9BQ1RMUl9TTVBfQklUCisJc3Rjb3ByCXIwLCBBQ1RMUgorCWlzYgorCWJ4CWxyCitlbmRmdW5jIGNvcnRleF9hNV9lbmFibGVfc21wCisKK2Z1bmMgY29ydGV4X2E1X3Jlc2V0X2Z1bmMKKwliCWNvcnRleF9hNV9lbmFibGVfc21wCitlbmRmdW5jIGNvcnRleF9hNV9yZXNldF9mdW5jCisKK2Z1bmMgY29ydGV4X2E1X2NvcmVfcHdyX2R3bgorCXB1c2gJe3IxMiwgbHJ9CisKKwlhc3NlcnRfY2FjaGVfZW5hYmxlZAorCisJLyogRmx1c2ggTDEgY2FjaGUgKi8KKwltb3YJcjAsICNEQ19PUF9DSVNXCisJYmwJZGNzd19vcF9sZXZlbDEKKworCS8qIEV4aXQgY2x1c3RlciBjb2hlcmVuY3kgKi8KKwlwb3AJe3IxMiwgbHJ9CisJYgljb3J0ZXhfYTVfZGlzYWJsZV9zbXAKK2VuZGZ1bmMgY29ydGV4X2E1X2NvcmVfcHdyX2R3bgorCitmdW5jIGNvcnRleF9hNV9jbHVzdGVyX3B3cl9kd24KKwlwdXNoCXtyMTIsIGxyfQorCisJYXNzZXJ0X2NhY2hlX2VuYWJsZWQKKworCS8qIEZsdXNoIEwxIGNhY2hlcyAqLworCW1vdglyMCwgI0RDX09QX0NJU1cKKwlibAlkY3N3X29wX2xldmVsMQorCisJYmwJcGxhdF9kaXNhYmxlX2FjcAorCisJLyogRXhpdCBjbHVzdGVyIGNvaGVyZW5jeSAqLworCXBvcAl7cjEyLCBscn0KKwliCWNvcnRleF9hNV9kaXNhYmxlX3NtcAorZW5kZnVuYyBjb3J0ZXhfYTVfY2x1c3Rlcl9wd3JfZHduCisKK2RlY2xhcmVfY3B1X29wcyBjb3J0ZXhfYTUsIENPUlRFWF9BNV9NSURSLCBcCisJY29ydGV4X2E1X3Jlc2V0X2Z1bmMsIFwKKwljb3J0ZXhfYTVfY29yZV9wd3JfZHduLCBcCisJY29ydGV4X2E1X2NsdXN0ZXJfcHdyX2R3bgpkaWZmIC0tZ2l0IGEvbGliL2NwdXMvYWFyY2gzMi9jb3J0ZXhfYTUzLlMgYi9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hNTMuUwppbmRleCA3NGNlZGMzLi4xNjQ3ZTE2IDEwMDY0NAotLS0gYS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hNTMuUworKysgYi9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hNTMuUwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJcHVzaAl7cjEyLCBscn0KIAogCS8qIEFzc2VydCBpZiBjYWNoZSBpcyBlbmFibGVkICovCi0jaWYgQVNNX0FTU0VSVElPTgorI2lmIEVOQUJMRV9BU1NFUlRJT05TCiAJbGRjb3ByCXIwLCBTQ1RMUgogCXRzdAlyMCwgI1NDVExSX0NfQklUCiAJQVNNX0FTU0VSVChlcSkKQEAgLTIwNCw3ICsyMDQsNyBAQAogCXB1c2gJe3IxMiwgbHJ9CiAKIAkvKiBBc3NlcnQgaWYgY2FjaGUgaXMgZW5hYmxlZCAqLwotI2lmIEFTTV9BU1NFUlRJT04KKyNpZiBFTkFCTEVfQVNTRVJUSU9OUwogCWxkY29wcglyMCwgU0NUTFIKIAl0c3QJcjAsICNTQ1RMUl9DX0JJVAogCUFTTV9BU1NFUlQoZXEpCmRpZmYgLS1naXQgYS9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hNTcuUyBiL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E1Ny5TCmluZGV4IGI1MTg5ZTcuLjY0YTZkNjcgMTAwNjQ0Ci0tLSBhL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E1Ny5TCisrKyBiL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E1Ny5TCkBAIC00MDYsNyArNDA2LDcgQEAKIAlwdXNoCXtyMTIsIGxyfQogCiAJLyogQXNzZXJ0IGlmIGNhY2hlIGlzIGVuYWJsZWQgKi8KLSNpZiBBU01fQVNTRVJUSU9OCisjaWYgRU5BQkxFX0FTU0VSVElPTlMKIAlsZGNvcHIJcjAsIFNDVExSCiAJdHN0CXIwLCAjU0NUTFJfQ19CSVQKIAlBU01fQVNTRVJUKGVxKQpAQCAtNDQ4LDcgKzQ0OCw3IEBACiAJcHVzaAl7cjEyLCBscn0KIAogCS8qIEFzc2VydCBpZiBjYWNoZSBpcyBlbmFibGVkICovCi0jaWYgQVNNX0FTU0VSVElPTgorI2lmIEVOQUJMRV9BU1NFUlRJT05TCiAJbGRjb3ByCXIwLCBTQ1RMUgogCXRzdAlyMCwgI1NDVExSX0NfQklUCiAJQVNNX0FTU0VSVChlcSkKZGlmZiAtLWdpdCBhL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E3LlMgYi9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hNy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzhkMWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hNy5TCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxhcmNoLmg+CisjaW5jbHVkZSA8YXNtX21hY3Jvcy5TPgorI2luY2x1ZGUgPGFzc2VydF9tYWNyb3MuUz4KKyNpbmNsdWRlIDxjb3J0ZXhfYTcuaD4KKyNpbmNsdWRlIDxjcHVfbWFjcm9zLlM+CisKKwkubWFjcm8gYXNzZXJ0X2NhY2hlX2VuYWJsZWQKKyNpZiBFTkFCTEVfQVNTRVJUSU9OUworCQlsZGNvcHIJcjAsIFNDVExSCisJCXRzdAlyMCwgI1NDVExSX0NfQklUCisJCUFTTV9BU1NFUlQoZXEpCisjZW5kaWYKKwkuZW5kbQorCitmdW5jIGNvcnRleF9hN19kaXNhYmxlX3NtcAorCWxkY29wcglyMCwgQUNUTFIKKwliaWMJcjAsICNDT1JURVhfQTdfQUNUTFJfU01QX0JJVAorCXN0Y29wcglyMCwgQUNUTFIKKwlpc2IKKwlkc2IJc3kKKwlieAlscgorZW5kZnVuYyBjb3J0ZXhfYTdfZGlzYWJsZV9zbXAKKworZnVuYyBjb3J0ZXhfYTdfZW5hYmxlX3NtcAorCWxkY29wcglyMCwgQUNUTFIKKwlvcnIJcjAsICNDT1JURVhfQTdfQUNUTFJfU01QX0JJVAorCXN0Y29wcglyMCwgQUNUTFIKKwlpc2IKKwlieAlscgorZW5kZnVuYyBjb3J0ZXhfYTdfZW5hYmxlX3NtcAorCitmdW5jIGNvcnRleF9hN19yZXNldF9mdW5jCisJYgljb3J0ZXhfYTdfZW5hYmxlX3NtcAorZW5kZnVuYyBjb3J0ZXhfYTdfcmVzZXRfZnVuYworCitmdW5jIGNvcnRleF9hN19jb3JlX3B3cl9kd24KKwlwdXNoCXtyMTIsIGxyfQorCisJYXNzZXJ0X2NhY2hlX2VuYWJsZWQKKworCS8qIEZsdXNoIEwxIGNhY2hlICovCisJbW92CXIwLCAjRENfT1BfQ0lTVworCWJsCWRjc3dfb3BfbGV2ZWwxCisKKwkvKiBFeGl0IGNsdXN0ZXIgY29oZXJlbmN5ICovCisJcG9wCXtyMTIsIGxyfQorCWIJY29ydGV4X2E3X2Rpc2FibGVfc21wCitlbmRmdW5jIGNvcnRleF9hN19jb3JlX3B3cl9kd24KKworZnVuYyBjb3J0ZXhfYTdfY2x1c3Rlcl9wd3JfZHduCisJcHVzaAl7cjEyLCBscn0KKworCWFzc2VydF9jYWNoZV9lbmFibGVkCisKKwkvKiBGbHVzaCBMMSBjYWNoZXMgKi8KKwltb3YJcjAsICNEQ19PUF9DSVNXCisJYmwJZGNzd19vcF9sZXZlbDEKKworCWJsCXBsYXRfZGlzYWJsZV9hY3AKKworCS8qIEV4aXQgY2x1c3RlciBjb2hlcmVuY3kgKi8KKwlwb3AJe3IxMiwgbHJ9CisJYgljb3J0ZXhfYTdfZGlzYWJsZV9zbXAKK2VuZGZ1bmMgY29ydGV4X2E3X2NsdXN0ZXJfcHdyX2R3bgorCitkZWNsYXJlX2NwdV9vcHMgY29ydGV4X2E3LCBDT1JURVhfQTdfTUlEUiwgXAorCWNvcnRleF9hN19yZXNldF9mdW5jLCBcCisJY29ydGV4X2E3X2NvcmVfcHdyX2R3biwgXAorCWNvcnRleF9hN19jbHVzdGVyX3B3cl9kd24KZGlmZiAtLWdpdCBhL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E3Mi5TIGIvbGliL2NwdXMvYWFyY2gzMi9jb3J0ZXhfYTcyLlMKaW5kZXggNjljYzJlYS4uNzU1MDUyMCAxMDA2NDQKLS0tIGEvbGliL2NwdXMvYWFyY2gzMi9jb3J0ZXhfYTcyLlMKKysrIGIvbGliL2NwdXMvYWFyY2gzMi9jb3J0ZXhfYTcyLlMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXB1c2gJe3IxMiwgbHJ9CiAKIAkvKiBBc3NlcnQgaWYgY2FjaGUgaXMgZW5hYmxlZCAqLwotI2lmIEFTTV9BU1NFUlRJT04KKyNpZiBFTkFCTEVfQVNTRVJUSU9OUwogCWxkY29wcglyMCwgU0NUTFIKIAl0c3QJcjAsICNTQ1RMUl9DX0JJVAogCUFTTV9BU1NFUlQoZXEpCkBAIC0xNjcsNyArMTY3LDcgQEAKIAlwdXNoCXtyMTIsIGxyfQogCiAJLyogQXNzZXJ0IGlmIGNhY2hlIGlzIGVuYWJsZWQgKi8KLSNpZiBBU01fQVNTRVJUSU9OCisjaWYgRU5BQkxFX0FTU0VSVElPTlMKIAlsZGNvcHIJcjAsIFNDVExSCiAJdHN0CXIwLCAjU0NUTFJfQ19CSVQKIAlBU01fQVNTRVJUKGVxKQpkaWZmIC0tZ2l0IGEvbGliL2NwdXMvYWFyY2gzMi9jb3J0ZXhfYTkuUyBiL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzMGY4NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E5LlMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPGFyY2guaD4KKyNpbmNsdWRlIDxhc21fbWFjcm9zLlM+CisjaW5jbHVkZSA8YXNzZXJ0X21hY3Jvcy5TPgorI2luY2x1ZGUgPGNvcnRleF9hOS5oPgorI2luY2x1ZGUgPGNwdV9tYWNyb3MuUz4KKworCS5tYWNybyBhc3NlcnRfY2FjaGVfZW5hYmxlZAorI2lmIEVOQUJMRV9BU1NFUlRJT05TCisJCWxkY29wcglyMCwgU0NUTFIKKwkJdHN0CXIwLCAjU0NUTFJfQ19CSVQKKwkJQVNNX0FTU0VSVChlcSkKKyNlbmRpZgorCS5lbmRtCisKK2Z1bmMgY29ydGV4X2E5X2Rpc2FibGVfc21wCisJbGRjb3ByCXIwLCBBQ1RMUgorCWJpYwlyMCwgI0NPUlRFWF9BOV9BQ1RMUl9TTVBfQklUCisJc3Rjb3ByCXIwLCBBQ1RMUgorCWlzYgorCWRzYglzeQorCWJ4CWxyCitlbmRmdW5jIGNvcnRleF9hOV9kaXNhYmxlX3NtcAorCitmdW5jIGNvcnRleF9hOV9lbmFibGVfc21wCisJbGRjb3ByCXIwLCBBQ1RMUgorCW9ycglyMCwgI0NPUlRFWF9BOV9BQ1RMUl9TTVBfQklUCisJc3Rjb3ByCXIwLCBBQ1RMUgorCWlzYgorCWJ4CWxyCitlbmRmdW5jIGNvcnRleF9hOV9lbmFibGVfc21wCisKK2Z1bmMgY29ydGV4X2E5X3Jlc2V0X2Z1bmMKKwliCWNvcnRleF9hOV9lbmFibGVfc21wCitlbmRmdW5jIGNvcnRleF9hOV9yZXNldF9mdW5jCisKK2Z1bmMgY29ydGV4X2E5X2NvcmVfcHdyX2R3bgorCXB1c2gJe3IxMiwgbHJ9CisKKwlhc3NlcnRfY2FjaGVfZW5hYmxlZAorCisJLyogRmx1c2ggTDEgY2FjaGUgKi8KKwltb3YJcjAsICNEQ19PUF9DSVNXCisJYmwJZGNzd19vcF9sZXZlbDEKKworCS8qIEV4aXQgY2x1c3RlciBjb2hlcmVuY3kgKi8KKwlwb3AJe3IxMiwgbHJ9CisJYgljb3J0ZXhfYTlfZGlzYWJsZV9zbXAKK2VuZGZ1bmMgY29ydGV4X2E5X2NvcmVfcHdyX2R3bgorCitmdW5jIGNvcnRleF9hOV9jbHVzdGVyX3B3cl9kd24KKwlwdXNoCXtyMTIsIGxyfQorCisJYXNzZXJ0X2NhY2hlX2VuYWJsZWQKKworCS8qIEZsdXNoIEwxIGNhY2hlcyAqLworCW1vdglyMCwgI0RDX09QX0NJU1cKKwlibAlkY3N3X29wX2xldmVsMQorCisJYmwJcGxhdF9kaXNhYmxlX2FjcAorCisJLyogRXhpdCBjbHVzdGVyIGNvaGVyZW5jeSAqLworCXBvcAl7cjEyLCBscn0KKwliCWNvcnRleF9hOV9kaXNhYmxlX3NtcAorZW5kZnVuYyBjb3J0ZXhfYTlfY2x1c3Rlcl9wd3JfZHduCisKK2RlY2xhcmVfY3B1X29wcyBjb3J0ZXhfYTksIENPUlRFWF9BOV9NSURSLCBcCisJY29ydGV4X2E5X3Jlc2V0X2Z1bmMsIFwKKwljb3J0ZXhfYTlfY29yZV9wd3JfZHduLCBcCisJY29ydGV4X2E5X2NsdXN0ZXJfcHdyX2R3bgpkaWZmIC0tZ2l0IGEvbGliL2NwdXMvYWFyY2g2NC9jb3J0ZXhfYTc1LlMgYi9saWIvY3B1cy9hYXJjaDY0L2NvcnRleF9hNzUuUwppbmRleCAxZjQ1MDBjLi40Y2FiOWU0IDEwMDY0NAotLS0gYS9saWIvY3B1cy9hYXJjaDY0L2NvcnRleF9hNzUuUworKysgYi9saWIvY3B1cy9hYXJjaDY0L2NvcnRleF9hNzUuUwpAQCAtMTEsNiArMTEsMzMgQEAKICNpbmNsdWRlIDxwbGF0X21hY3Jvcy5TPgogI2luY2x1ZGUgPGNvcnRleF9hNzUuaD4KIAorZnVuYyBjb3J0ZXhfYTc1X3Jlc2V0X2Z1bmMKKyNpZiBFTkFCTEVfQU1VCisJLyogTWFrZSBzdXJlIGFjY2Vzc2VzIGZyb20gRUwwL0VMMSBhbmQgRUwyIGFyZSBub3QgdHJhcHBlZCB0byBFTDMgKi8KKwltcnMJeDAsIGFjdGxyX2VsMworCW9ycgl4MCwgeDAsICNDT1JURVhfQTc1X0FDVExSX0FNRU5fQklUCisJbXNyCWFjdGxyX2VsMywgeDAKKwlpc2IKKworCS8qIE1ha2Ugc3VyZSBhY2Nlc3NlcyBmcm9tIEVMMC9FTDEgYXJlIG5vdCB0cmFwcGVkIHRvIEVMMiAqLworCW1ycwl4MCwgYWN0bHJfZWwyCisJb3JyCXgwLCB4MCwgI0NPUlRFWF9BNzVfQUNUTFJfQU1FTl9CSVQKKwltc3IJYWN0bHJfZWwyLCB4MAorCWlzYgorCisJLyogRW5hYmxlIGdyb3VwMCBjb3VudGVycyAqLworCW1vdgl4MCwgI0NPUlRFWF9BNzVfQU1VX0dST1VQMF9NQVNLCisJbXNyCUNQVUFNQ05URU5TRVRfRUwwLCB4MAorCWlzYgorCisJLyogRW5hYmxlIGdyb3VwMSBjb3VudGVycyAqLworCW1vdgl4MCwgI0NPUlRFWF9BNzVfQU1VX0dST1VQMV9NQVNLCisJbXNyCUNQVUFNQ05URU5TRVRfRUwwLCB4MAorCWlzYgorI2VuZGlmCisJcmV0CitlbmRmdW5jIGNvcnRleF9hNzVfcmVzZXRfZnVuYworCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogSFcgd2lsbCBkbyB0aGUgY2FjaGUgbWFpbnRlbmFuY2Ugd2hpbGUgcG93ZXJpbmcgZG93bgogCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDcsNSArNzQsNSBAQAogZW5kZnVuYyBjb3J0ZXhfYTc1X2NwdV9yZWdfZHVtcAogCiBkZWNsYXJlX2NwdV9vcHMgY29ydGV4X2E3NSwgQ09SVEVYX0E3NV9NSURSLCBcCi0JQ1BVX05PX1JFU0VUX0ZVTkMsIFwKKwljb3J0ZXhfYTc1X3Jlc2V0X2Z1bmMsIFwKIAljb3J0ZXhfYTc1X2NvcmVfcHdyX2R3bgpkaWZmIC0tZ2l0IGEvbGliL2VsM19ydW50aW1lL2FhcmNoMzIvY29udGV4dF9tZ210LmMgYi9saWIvZWwzX3J1bnRpbWUvYWFyY2gzMi9jb250ZXh0X21nbXQuYwppbmRleCAzZTdhNWI3Li43NmU0NDBlIDEwMDY0NAotLS0gYS9saWIvZWwzX3J1bnRpbWUvYWFyY2gzMi9jb250ZXh0X21nbXQuYworKysgYi9saWIvZWwzX3J1bnRpbWUvYWFyY2gzMi9jb250ZXh0X21nbXQuYwpAQCAtNCw2ICs0LDcgQEAKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAqLwogCisjaW5jbHVkZSA8YW11Lmg+CiAjaW5jbHVkZSA8YXJjaC5oPgogI2luY2x1ZGUgPGFyY2hfaGVscGVycy5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgpAQCAtMTI1LDYgKzEyNiwyMCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW5hYmxlIGFyY2hpdGVjdHVyZSBleHRlbnNpb25zIG9uIGZpcnN0IGVudHJ5IHRvIE5vbi1zZWN1cmUgd29ybGQuCisgKiBXaGVuIEVMMiBpcyBpbXBsZW1lbnRlZCBidXQgdW51c2VkIGBlbDJfdW51c2VkYCBpcyBub24temVybywgb3RoZXJ3aXNlCisgKiBpdCBpcyB6ZXJvLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGVuYWJsZV9leHRlbnNpb25zX25vbnNlY3VyZShpbnQgZWwyX3VudXNlZCkKK3sKKyNpZiBJTUFHRV9CTDMyCisjaWYgRU5BQkxFX0FNVQorCWFtdV9lbmFibGUoZWwyX3VudXNlZCk7CisjZW5kaWYKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgY3B1X2NvbnRleHQgZm9yIGEgQ1BVIHNwZWNpZmllZCBieQogICogaXRzIGBjcHVfaWR4YCBmb3IgZmlyc3QgdXNlLCBhbmQgc2V0cyB0aGUgaW5pdGlhbCBlbnRyeXBvaW50IHN0YXRlIGFzCiAgKiBzcGVjaWZpZWQgYnkgdGhlIGVudHJ5X3BvaW50X2luZm8gc3RydWN0dXJlLgpAQCAtMTYxLDYgKzE3Niw3IEBACiB7CiAJdWludDMyX3QgaHNjdGxyLCBzY3I7CiAJY3B1X2NvbnRleHRfdCAqY3R4ID0gY21fZ2V0X2NvbnRleHQoc2VjdXJpdHlfc3RhdGUpOworCWludCBlbDJfdW51c2VkID0gMDsKIAogCWFzc2VydChjdHgpOwogCkBAIC0xODUsNiArMjAxLDggQEAKIAkJCWlzYigpOwogCQl9IGVsc2UgaWYgKHJlYWRfaWRfcGZyMSgpICYKIAkJCShJRF9QRlIxX1ZJUlRFWFRfTUFTSyA8PCBJRF9QRlIxX1ZJUlRFWFRfU0hJRlQpKSB7CisJCQllbDJfdW51c2VkID0gMTsKKwogCQkJLyoKIAkJCSAqIFNldCB0aGUgTlMgYml0IHRvIGFjY2VzcyBOUyBjb3BpZXMgb2YgY2VydGFpbiBiYW5rZWQKIAkJCSAqIHJlZ2lzdGVycwpAQCAtMjgzLDUgKzMwMSw2IEBACiAJCQl3cml0ZV9zY3IocmVhZF9zY3IoKSAmIH5TQ1JfTlNfQklUKTsKIAkJCWlzYigpOwogCQl9CisJCWVuYWJsZV9leHRlbnNpb25zX25vbnNlY3VyZShlbDJfdW51c2VkKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9saWIvZWwzX3J1bnRpbWUvYWFyY2g2NC9jb250ZXh0LlMgYi9saWIvZWwzX3J1bnRpbWUvYWFyY2g2NC9jb250ZXh0LlMKaW5kZXggOGE2YzExYi4uNjIwZWMxNiAxMDA2NDQKLS0tIGEvbGliL2VsM19ydW50aW1lL2FhcmNoNjQvY29udGV4dC5TCisrKyBiL2xpYi9lbDNfcnVudGltZS9hYXJjaDY0L2NvbnRleHQuUwpAQCAtOSw3ICs5LDYgQEAKICNpbmNsdWRlIDxjb250ZXh0Lmg+CiAKIAkuZ2xvYmFsCWVsMV9zeXNyZWdzX2NvbnRleHRfc2F2ZQotCS5nbG9iYWwgZWwxX3N5c3JlZ3NfY29udGV4dF9zYXZlX3Bvc3Rfb3BzCiAJLmdsb2JhbAllbDFfc3lzcmVnc19jb250ZXh0X3Jlc3RvcmUKICNpZiBDVFhfSU5DTFVERV9GUFJFR1MKIAkuZ2xvYmFsCWZwcmVnc19jb250ZXh0X3NhdmUKQEAgLTc0LDYgKzczLDkgQEAKIAltcnMJeDksIHZiYXJfZWwxCiAJc3RwCXgxNywgeDksIFt4MCwgI0NUWF9DT05URVhUSURSX0VMMV0KIAorCW1ycwl4MTAsIHBtY3JfZWwwCisJc3RyCXgxMCwgW3gwLCAjQ1RYX1BNQ1JfRUwwXQorCiAJLyogU2F2ZSBBQXJjaDMyIHN5c3RlbSByZWdpc3RlcnMgaWYgdGhlIGJ1aWxkIGhhcyBpbnN0cnVjdGVkIHNvICovCiAjaWYgQ1RYX0lOQ0xVREVfQUFSQ0gzMl9SRUdTCiAJbXJzCXgxMSwgc3Bzcl9hYnQKQEAgLTg3LDkgKzg5LDYgQEAKIAltcnMJeDE1LCBkYWNyMzJfZWwyCiAJbXJzCXgxNiwgaWZzcjMyX2VsMgogCXN0cAl4MTUsIHgxNiwgW3gwLCAjQ1RYX0RBQ1IzMl9FTDJdCi0KLQltcnMJeDE3LCBmcGV4YzMyX2VsMgotCXN0cgl4MTcsIFt4MCwgI0NUWF9GUF9GUEVYQzMyX0VMMl0KICNlbmRpZgogCiAJLyogU2F2ZSBOUyB0aW1lciByZWdpc3RlcnMgaWYgdGhlIGJ1aWxkIGhhcyBpbnN0cnVjdGVkIHNvICovCkBAIC0xMTIsMzYgKzExMSw2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBzdHJpY3RseSBmb2xsb3dzIHRoZSBBQXJjaDY0CiAgKiBQQ1MgdG8gdXNlIHg5LXgxNyAodGVtcG9yYXJ5IGNhbGxlci1zYXZlZCByZWdpc3RlcnMpCi0gKiB0byBkbyBwb3N0IG9wZXJhdGlvbnMgYWZ0ZXIgc2F2aW5nIHRoZSBFTDEgc3lzdGVtCi0gKiByZWdpc3RlciBjb250ZXh0LgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotZnVuYyBlbDFfc3lzcmVnc19jb250ZXh0X3NhdmVfcG9zdF9vcHMKLSNpZiBFTkFCTEVfU1BFX0ZPUl9MT1dFUl9FTFMKLQkvKiBEZXRlY3QgaWYgU1BFIGlzIGltcGxlbWVudGVkICovCi0JbXJzCXg5LCBpZF9hYTY0ZGZyMF9lbDEKLQl1YmZ4CXg5LCB4OSwgI0lEX0FBNjRERlIwX1BNU19TSElGVCwgI0lEX0FBNjRERlIwX1BNU19MRU5HVEgKLQljbXAJeDksICMweDEKLQliLm5lCTFmCi0KLQkvKgotCSAqIEJlZm9yZSBzd2l0Y2hpbmcgZnJvbSBub3JtYWwgd29ybGQgdG8gc2VjdXJlIHdvcmxkCi0JICogdGhlIHByb2ZpbGluZyBidWZmZXJzIG5lZWQgdG8gYmUgZHJhaW5lZCBvdXQgdG8gbWVtb3J5LiAgVGhpcyBpcwotCSAqIHJlcXVpcmVkIHRvIGF2b2lkIGFuIGludmFsaWQgbWVtb3J5IGFjY2VzcyB3aGVuIFRUQlIgaXMgc3dpdGNoZWQKLQkgKiBmb3IgZW50cnkgdG8gU0VMMS4KLQkgKi8KLQkuYXJjaAlhcm12OC4yLWErcHJvZmlsZQotCXBzYgljc3luYwotCWRzYgluc2gKLQkuYXJjaAlhcm12OC1hCi0xOgotI2VuZGlmCi0JcmV0Ci1lbmRmdW5jIGVsMV9zeXNyZWdzX2NvbnRleHRfc2F2ZV9wb3N0X29wcwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBzdHJpY3RseSBmb2xsb3dzIHRoZSBBQXJjaDY0Ci0gKiBQQ1MgdG8gdXNlIHg5LXgxNyAodGVtcG9yYXJ5IGNhbGxlci1zYXZlZCByZWdpc3RlcnMpCiAgKiB0byByZXN0b3JlIEVMMSBzeXN0ZW0gcmVnaXN0ZXIgY29udGV4dC4gIEl0IGFzc3VtZXMKICAqIHRoYXQgJ3gwJyBpcyBwb2ludGluZyB0byBhICdlbDFfc3lzX3JlZ3MnIHN0cnVjdHVyZQogICogZnJvbSB3aGVyZSB0aGUgcmVnaXN0ZXIgY29udGV4dCB3aWxsIGJlIHJlc3RvcmVkCkBAIC0xOTMsNiArMTYyLDkgQEAKIAltc3IJY29udGV4dGlkcl9lbDEsIHgxNwogCW1zcgl2YmFyX2VsMSwgeDkKIAorCWxkcgl4MTAsIFt4MCwgI0NUWF9QTUNSX0VMMF0KKwltc3IJcG1jcl9lbDAsIHgxMAorCiAJLyogUmVzdG9yZSBBQXJjaDMyIHN5c3RlbSByZWdpc3RlcnMgaWYgdGhlIGJ1aWxkIGhhcyBpbnN0cnVjdGVkIHNvICovCiAjaWYgQ1RYX0lOQ0xVREVfQUFSQ0gzMl9SRUdTCiAJbGRwCXgxMSwgeDEyLCBbeDAsICNDVFhfU1BTUl9BQlRdCkBAIC0yMDYsOSArMTc4LDYgQEAKIAlsZHAJeDE1LCB4MTYsIFt4MCwgI0NUWF9EQUNSMzJfRUwyXQogCW1zcglkYWNyMzJfZWwyLCB4MTUKIAltc3IJaWZzcjMyX2VsMiwgeDE2Ci0KLQlsZHIJeDE3LCBbeDAsICNDVFhfRlBfRlBFWEMzMl9FTDJdCi0JbXNyCWZwZXhjMzJfZWwyLCB4MTcKICNlbmRpZgogCS8qIFJlc3RvcmUgTlMgdGltZXIgcmVnaXN0ZXJzIGlmIHRoZSBidWlsZCBoYXMgaW5zdHJ1Y3RlZCBzbyAqLwogI2lmIE5TX1RJTUVSX1NXSVRDSApAQCAtMjY5LDYgKzIzOCwxMCBAQAogCW1ycwl4MTAsIGZwY3IKIAlzdHIJeDEwLCBbeDAsICNDVFhfRlBfRlBDUl0KIAorI2lmIENUWF9JTkNMVURFX0FBUkNIMzJfUkVHUworCW1ycwl4MTEsIGZwZXhjMzJfZWwyCisJc3RyCXgxMSwgW3gwLCAjQ1RYX0ZQX0ZQRVhDMzJfRUwyXQorI2VuZGlmCiAJcmV0CiBlbmRmdW5jIGZwcmVnc19jb250ZXh0X3NhdmUKIApAQCAtMzEyLDYgKzI4NSwxMCBAQAogCWxkcgl4MTAsIFt4MCwgI0NUWF9GUF9GUENSXQogCW1zcglmcGNyLCB4MTAKIAorI2lmIENUWF9JTkNMVURFX0FBUkNIMzJfUkVHUworCWxkcgl4MTEsIFt4MCwgI0NUWF9GUF9GUEVYQzMyX0VMMl0KKwltc3IJZnBleGMzMl9lbDIsIHgxMQorI2VuZGlmCiAJLyoKIAkgKiBObyBleHBsaWN0IElTQiByZXF1aXJlZCBoZXJlIGFzIEVSRVQgdG8KIAkgKiBzd2l0Y2ggdG8gc2VjdXJlIEVMMSBvciBub24tc2VjdXJlIHdvcmxkCmRpZmYgLS1naXQgYS9saWIvZWwzX3J1bnRpbWUvYWFyY2g2NC9jb250ZXh0X21nbXQuYyBiL2xpYi9lbDNfcnVudGltZS9hYXJjaDY0L2NvbnRleHRfbWdtdC5jCmluZGV4IDNkMjYwNTYuLmM2YzIyNDkgMTAwNjQ0Ci0tLSBhL2xpYi9lbDNfcnVudGltZS9hYXJjaDY0L2NvbnRleHRfbWdtdC5jCisrKyBiL2xpYi9lbDNfcnVudGltZS9hYXJjaDY0L2NvbnRleHRfbWdtdC5jCkBAIC00LDYgKzQsNyBAQAogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCiAKKyNpbmNsdWRlIDxhbXUuaD4KICNpbmNsdWRlIDxhcmNoLmg+CiAjaW5jbHVkZSA8YXJjaF9oZWxwZXJzLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CkBAIC0xMyw4ICsxNCwxMSBAQAogI2luY2x1ZGUgPGludGVycnVwdF9tZ210Lmg+CiAjaW5jbHVkZSA8cGxhdGZvcm0uaD4KICNpbmNsdWRlIDxwbGF0Zm9ybV9kZWYuaD4KKyNpbmNsdWRlIDxwdWJzdWJfZXZlbnRzLmg+CiAjaW5jbHVkZSA8c21jY19oZWxwZXJzLmg+CisjaW5jbHVkZSA8c3BlLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3ZlLmg+CiAjaW5jbHVkZSA8dXRpbHMuaD4KIAogCkBAIC01OCw3ICs2Miw3IEBACiBzdGF0aWMgdm9pZCBjbV9pbml0X2NvbnRleHRfY29tbW9uKGNwdV9jb250ZXh0X3QgKmN0eCwgY29uc3QgZW50cnlfcG9pbnRfaW5mb190ICplcCkKIHsKIAl1bnNpZ25lZCBpbnQgc2VjdXJpdHlfc3RhdGU7Ci0JdWludDMyX3Qgc2NyX2VsMzsKKwl1aW50MzJfdCBzY3JfZWwzLCBwbWNyX2VsMDsKIAllbDNfc3RhdGVfdCAqc3RhdGU7CiAJZ3BfcmVnc190ICpncF9yZWdzOwogCXVuc2lnbmVkIGxvbmcgc2N0bHJfZWx4OwpAQCAtMTY0LDExICsxNjgsMzUgQEAKIAogCS8qCiAJICogU3RvcmUgdGhlIGluaXRpYWxpc2VkIFNDVExSX0VMMSB2YWx1ZSBpbiB0aGUgY3B1X2NvbnRleHQgLSBTQ1RMUl9FTDIKLQkgKiBhbmQgb3RoZXIgRUwyIHJlc2dpc3RlcnMgYXJlIHNldCB1cCBieSBjbV9wcmVhcHJlX25zX2VudHJ5KCkgYXMgdGhleQorCSAqIGFuZCBvdGhlciBFTDIgcmVnaXN0ZXJzIGFyZSBzZXQgdXAgYnkgY21fcHJlYXByZV9uc19lbnRyeSgpIGFzIHRoZXkKIAkgKiBhcmUgbm90IHBhcnQgb2YgdGhlIHN0b3JlZCBjcHVfY29udGV4dC4KIAkgKi8KIAl3cml0ZV9jdHhfcmVnKGdldF9zeXNyZWdzX2N0eChjdHgpLCBDVFhfU0NUTFJfRUwxLCBzY3Rscl9lbHgpOwogCisJaWYgKHNlY3VyaXR5X3N0YXRlID09IFNFQ1VSRSkgeworCQkvKgorCQkgKiBJbml0aWFsaXNlIFBNQ1JfRUwwIGZvciBzZWN1cmUgY29udGV4dCBvbmx5LCBzZXR0aW5nIGFsbAorCQkgKiBmaWVsZHMgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBody4gU29tZSBmaWVsZHMgYXJlCisJCSAqIGFyY2hpdGVjdHVyYWxseSBVTktOT1dOIG9uIHJlc2V0LgorCQkgKgorCQkgKiBQTUNSX0VMMC5MQzogU2V0IHRvIG9uZSBzbyB0aGF0IGN5Y2xlIGNvdW50ZXIgb3ZlcmZsb3csIHRoYXQKKwkJICogIGlzIHJlY29yZGVkIGluIFBNT1ZTQ0xSX0VMMFszMV0sIG9jY3VycyBvbiB0aGUgaW5jcmVtZW50CisJCSAqICB0aGF0IGNoYW5nZXMgUE1DQ05UUl9FTDBbNjNdIGZyb20gMSB0byAwLgorCQkgKgorCQkgKiBQTUNSX0VMMC5EUDogU2V0IHRvIG9uZSBzbyB0aGF0IHRoZSBjeWNsZSBjb3VudGVyLAorCQkgKiAgUE1DQ05UUl9FTDAgZG9lcyBub3QgY291bnQgd2hlbiBldmVudCBjb3VudGluZyBpcyBwcm9oaWJpdGVkLgorCQkgKgorCQkgKiBQTUNSX0VMMC5YOiBTZXQgdG8gemVybyB0byBkaXNhYmxlIGV4cG9ydCBvZiBldmVudHMuCisJCSAqCisJCSAqIFBNQ1JfRUwwLkQ6IFNldCB0byB6ZXJvIHNvIHRoYXQsIHdoZW4gZW5hYmxlZCwgUE1DQ05UUl9FTDAKKwkJICogIGNvdW50cyBvbiBldmVyeSBjbG9jayBjeWNsZS4KKwkJICovCisJCXBtY3JfZWwwID0gKChQTUNSX0VMMF9SRVNFVF9WQUwgfCBQTUNSX0VMMF9MQ19CSVQKKwkJCQl8IFBNQ1JfRUwwX0RQX0JJVCkKKwkJCQkmIH4oUE1DUl9FTDBfWF9CSVQgfCBQTUNSX0VMMF9EX0JJVCkpOworCQl3cml0ZV9jdHhfcmVnKGdldF9zeXNyZWdzX2N0eChjdHgpLCBDVFhfUE1DUl9FTDAsIHBtY3JfZWwwKTsKKwl9CisKIAkvKiBQb3B1bGF0ZSBFTDMgc3RhdGUgc28gdGhhdCB3ZSd2ZSB0aGUgcmlnaHQgY29udGV4dCBiZWZvcmUgZG9pbmcgRVJFVCAqLwogCXN0YXRlID0gZ2V0X2VsM3N0YXRlX2N0eChjdHgpOwogCXdyaXRlX2N0eF9yZWcoc3RhdGUsIENUWF9TQ1JfRUwzLCBzY3JfZWwzKTsKQEAgLTE4NCw2ICsyMTIsMjggQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVuYWJsZSBhcmNoaXRlY3R1cmUgZXh0ZW5zaW9ucyBvbiBmaXJzdCBlbnRyeSB0byBOb24tc2VjdXJlIHdvcmxkLgorICogV2hlbiBFTDIgaXMgaW1wbGVtZW50ZWQgYnV0IHVudXNlZCBgZWwyX3VudXNlZGAgaXMgbm9uLXplcm8sIG90aGVyd2lzZQorICogaXQgaXMgemVyby4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlbmFibGVfZXh0ZW5zaW9uc19ub25zZWN1cmUoaW50IGVsMl91bnVzZWQpCit7CisjaWYgSU1BR0VfQkwzMQorI2lmIEVOQUJMRV9TUEVfRk9SX0xPV0VSX0VMUworCXNwZV9lbmFibGUoZWwyX3VudXNlZCk7CisjZW5kaWYKKworI2lmIEVOQUJMRV9BTVUKKwlhbXVfZW5hYmxlKGVsMl91bnVzZWQpOworI2VuZGlmCisKKyNpZiBFTkFCTEVfU1ZFX0ZPUl9OUworCXN2ZV9lbmFibGUoZWwyX3VudXNlZCk7CisjZW5kaWYKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgY3B1X2NvbnRleHQgZm9yIGEgQ1BVIHNwZWNpZmllZCBieQogICogaXRzIGBjcHVfaWR4YCBmb3IgZmlyc3QgdXNlLCBhbmQgc2V0cyB0aGUgaW5pdGlhbCBlbnRyeXBvaW50IHN0YXRlIGFzCiAgKiBzcGVjaWZpZWQgYnkgdGhlIGVudHJ5X3BvaW50X2luZm8gc3RydWN0dXJlLgpAQCAtMjIwLDYgKzI3MCw3IEBACiB7CiAJdWludDMyX3Qgc2N0bHJfZWx4LCBzY3JfZWwzLCBtZGNyX2VsMjsKIAljcHVfY29udGV4dF90ICpjdHggPSBjbV9nZXRfY29udGV4dChzZWN1cml0eV9zdGF0ZSk7CisJaW50IGVsMl91bnVzZWQgPSAwOwogCiAJYXNzZXJ0KGN0eCk7CiAKQEAgLTIzMyw2ICsyODQsOCBAQAogCQkJc2N0bHJfZWx4IHw9IFNDVExSX0VMMl9SRVMxOwogCQkJd3JpdGVfc2N0bHJfZWwyKHNjdGxyX2VseCk7CiAJCX0gZWxzZSBpZiAoRUxfSU1QTEVNRU5URUQoMikpIHsKKwkJCWVsMl91bnVzZWQgPSAxOworCiAJCQkvKgogCQkJICogRUwyIHByZXNlbnQgYnV0IHVudXNlZCwgbmVlZCB0byBkaXNhYmxlIHNhZmVseS4KIAkJCSAqIFNDVExSX0VMMiBjYW4gYmUgaWdub3JlZCBpbiB0aGlzIGNhc2UuCkBAIC0zMTUsMTMgKzM2OCw2IEBACiAJCQkgKiByZWx5aW5nIG9uIGh3LiBTb21lIGZpZWxkcyBhcmUgYXJjaGl0ZWN0dXJhbGx5CiAJCQkgKiBVTktOT1dOIG9uIHJlc2V0LgogCQkJICoKLQkJCSAqIE1EQ1JfRUwyLlRQTVMgKEFSTSB2OC4yKTogRG8gbm90IHRyYXAgc3RhdGlzdGljYWwKLQkJCSAqIHByb2ZpbGluZyBjb250cm9scyB0byBFTDIuCi0JCQkgKgotCQkJICogTURDUl9FTDIuRTJQQiAoQVJNIHY4LjIpOiBTUEUgZW5hYmxlZCBpbiBub24tc2VjdXJlCi0JCQkgKiBzdGF0ZS4gQWNjZXNzZXMgdG8gcHJvZmlsaW5nIGJ1ZmZlciBjb250cm9scyBhdAotCQkJICogbm9uLXNlY3VyZSBFTDEgYXJlIG5vdCB0cmFwcGVkIHRvIEVMMi4KLQkJCSAqCiAJCQkgKiBNRENSX0VMMi5URFJBOiBTZXQgdG8gemVybyBzbyB0aGF0IE5vbi1zZWN1cmUgRUwwIGFuZAogCQkJICogIEVMMSBTeXN0ZW0gcmVnaXN0ZXIgYWNjZXNzZXMgdG8gdGhlIERlYnVnIFJPTQogCQkJICogIHJlZ2lzdGVycyBhcmUgbm90IHRyYXBwZWQgdG8gRUwyLgpAQCAtMzU4LDIyICs0MDQsNiBAQAogCQkJCQl8IE1EQ1JfRUwyX0hQTUVfQklUIHwgTURDUl9FTDJfVFBNX0JJVAogCQkJCQl8IE1EQ1JfRUwyX1RQTUNSX0JJVCkpOwogCi0jaWYgRU5BQkxFX1NQRV9GT1JfTE9XRVJfRUxTCi0JCQl1aW50NjRfdCBpZF9hYTY0ZGZyMF9lbDE7Ci0KLQkJCS8qIERldGVjdCBpZiBTUEUgaXMgaW1wbGVtZW50ZWQgKi8KLQkJCWlkX2FhNjRkZnIwX2VsMSA9IHJlYWRfaWRfYWE2NGRmcjBfZWwxKCkgPj4KLQkJCQlJRF9BQTY0REZSMF9QTVNfU0hJRlQ7Ci0JCQlpZiAoKGlkX2FhNjRkZnIwX2VsMSAmIElEX0FBNjRERlIwX1BNU19NQVNLKSA9PSAxKSB7Ci0JCQkJLyoKLQkJCQkgKiBNYWtlIHN1cmUgdHJhcHMgdG8gRUwyIGFyZSBub3QgZ2VuZXJhdGVkIGlmCi0JCQkJICogRUwyIGlzIGltcGxlbWVudGVkIGJ1dCBub3QgdXNlZC4KLQkJCQkgKi8KLQkJCQltZGNyX2VsMiAmPSB+TURDUl9FTDJfVFBNUzsKLQkJCQltZGNyX2VsMiB8PSBNRENSX0VMMl9FMlBCKE1EQ1JfRUwyX0UyUEJfRUwxKTsKLQkJCX0KLSNlbmRpZgotCiAJCQl3cml0ZV9tZGNyX2VsMihtZGNyX2VsMik7CiAKIAkJCS8qCkBAIC0zOTUsMTEgKzQyNSwxMSBAQAogCQkJd3JpdGVfY250aHBfY3RsX2VsMihDTlRIUF9DVExfUkVTRVRfVkFMICYKIAkJCQkJCX4oQ05USFBfQ1RMX0VOQUJMRV9CSVQpKTsKIAkJfQorCQllbmFibGVfZXh0ZW5zaW9uc19ub25zZWN1cmUoZWwyX3VudXNlZCk7CiAJfQogCi0JZWwxX3N5c3JlZ3NfY29udGV4dF9yZXN0b3JlKGdldF9zeXNyZWdzX2N0eChjdHgpKTsKLQotCWNtX3NldF9uZXh0X2NvbnRleHQoY3R4KTsKKwljbV9lbDFfc3lzcmVnc19jb250ZXh0X3Jlc3RvcmUoc2VjdXJpdHlfc3RhdGUpOworCWNtX3NldF9uZXh0X2VyZXRfY29udGV4dChzZWN1cml0eV9zdGF0ZSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MTUsNyArNDQ1LDEzIEBACiAJYXNzZXJ0KGN0eCk7CiAKIAllbDFfc3lzcmVnc19jb250ZXh0X3NhdmUoZ2V0X3N5c3JlZ3NfY3R4KGN0eCkpOwotCWVsMV9zeXNyZWdzX2NvbnRleHRfc2F2ZV9wb3N0X29wcygpOworCisjaWYgSU1BR0VfQkwzMQorCWlmIChzZWN1cml0eV9zdGF0ZSA9PSBTRUNVUkUpCisJCVBVQkxJU0hfRVZFTlQoY21fZXhpdGVkX3NlY3VyZV93b3JsZCk7CisJZWxzZQorCQlQVUJMSVNIX0VWRU5UKGNtX2V4aXRlZF9ub3JtYWxfd29ybGQpOworI2VuZGlmCiB9CiAKIHZvaWQgY21fZWwxX3N5c3JlZ3NfY29udGV4dF9yZXN0b3JlKHVpbnQzMl90IHNlY3VyaXR5X3N0YXRlKQpAQCAtNDI2LDYgKzQ2MiwxMyBAQAogCWFzc2VydChjdHgpOwogCiAJZWwxX3N5c3JlZ3NfY29udGV4dF9yZXN0b3JlKGdldF9zeXNyZWdzX2N0eChjdHgpKTsKKworI2lmIElNQUdFX0JMMzEKKwlpZiAoc2VjdXJpdHlfc3RhdGUgPT0gU0VDVVJFKQorCQlQVUJMSVNIX0VWRU5UKGNtX2VudGVyaW5nX3NlY3VyZV93b3JsZCk7CisJZWxzZQorCQlQVUJMSVNIX0VWRU5UKGNtX2VudGVyaW5nX25vcm1hbF93b3JsZCk7CisjZW5kaWYKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2xpYi9leHRlbnNpb25zL2FtdS9hYXJjaDMyL2FtdS5jIGIvbGliL2V4dGVuc2lvbnMvYW11L2FhcmNoMzIvYW11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ1MGJkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHRlbnNpb25zL2FtdS9hYXJjaDMyL2FtdS5jCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxhbXUuaD4KKyNpbmNsdWRlIDxhcmNoLmg+CisjaW5jbHVkZSA8YXJjaF9oZWxwZXJzLmg+CisKK3ZvaWQgYW11X2VuYWJsZShpbnQgZWwyX3VudXNlZCkKK3sKKwl1aW50NjRfdCBmZWF0dXJlczsKKworCWZlYXR1cmVzID0gcmVhZF9pZF9wZnIwKCkgPj4gSURfUEZSMF9BTVVfU0hJRlQ7CisJaWYgKChmZWF0dXJlcyAmIElEX1BGUjBfQU1VX01BU0spID09IDEpIHsKKwkJaWYgKGVsMl91bnVzZWQpIHsKKwkJCXVpbnQ2NF90IHY7CisKKwkJCS8qCisJCQkgKiBOb24tc2VjdXJlIGFjY2VzcyBmcm9tIEVMMCBvciBFTDEgdG8gdGhlIEFjdGl2aXR5IE1vbml0b3IKKwkJCSAqIHJlZ2lzdGVycyBkbyBub3QgdHJhcCB0byBFTDIuCisJCQkgKi8KKwkJCXYgPSByZWFkX2hjcHRyKCk7CisJCQl2ICY9IH5UQU1fQklUOworCQkJd3JpdGVfaGNwdHIodik7CisJCX0KKworCQkvKiBFbmFibGUgZ3JvdXAgMCBjb3VudGVycyAqLworCQl3cml0ZV9hbWNudGVuc2V0MChBTVVfR1JPVVAwX0NPVU5URVJTX01BU0spOworCX0KK30KZGlmZiAtLWdpdCBhL2xpYi9leHRlbnNpb25zL2FtdS9hYXJjaDY0L2FtdS5jIGIvbGliL2V4dGVuc2lvbnMvYW11L2FhcmNoNjQvYW11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3YjM0OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9leHRlbnNpb25zL2FtdS9hYXJjaDY0L2FtdS5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxhbXUuaD4KKyNpbmNsdWRlIDxhcmNoLmg+CisjaW5jbHVkZSA8YXJjaF9oZWxwZXJzLmg+CisKK3ZvaWQgYW11X2VuYWJsZShpbnQgZWwyX3VudXNlZCkKK3sKKwl1aW50NjRfdCBmZWF0dXJlczsKKworCWZlYXR1cmVzID0gcmVhZF9pZF9hYTY0cGZyMF9lbDEoKSA+PiBJRF9BQTY0UEZSMF9BTVVfU0hJRlQ7CisJaWYgKChmZWF0dXJlcyAmIElEX0FBNjRQRlIwX0FNVV9NQVNLKSA9PSAxKSB7CisJCXVpbnQ2NF90IHY7CisKKwkJaWYgKGVsMl91bnVzZWQpIHsKKwkJCS8qCisJCQkgKiBDUFRSX0VMMi5UQU06IFNldCB0byB6ZXJvIHNvIGFueSBhY2Nlc3NlcyB0bworCQkJICogdGhlIEFjdGl2aXR5IE1vbml0b3IgcmVnaXN0ZXJzIGRvIG5vdCB0cmFwIHRvIEVMMi4KKwkJCSAqLworCQkJdiA9IHJlYWRfY3B0cl9lbDIoKTsKKwkJCXYgJj0gfkNQVFJfRUwyX1RBTV9CSVQ7CisJCQl3cml0ZV9jcHRyX2VsMih2KTsKKwkJfQorCisJCS8qCisJCSAqIENQVFJfRUwzLlRBTTogU2V0IHRvIHplcm8gc28gdGhhdCBhbnkgYWNjZXNzZXMgdG8KKwkJICogdGhlIEFjdGl2aXR5IE1vbml0b3IgcmVnaXN0ZXJzIGRvIG5vdCB0cmFwIHRvIEVMMy4KKwkJICovCisJCXYgPSByZWFkX2NwdHJfZWwzKCk7CisJCXYgJj0gflRBTV9CSVQ7CisJCXdyaXRlX2NwdHJfZWwzKHYpOworCisJCS8qIEVuYWJsZSBncm91cCAwIGNvdW50ZXJzICovCisJCXdyaXRlX2FtY250ZW5zZXQwX2VsMChBTVVfR1JPVVAwX0NPVU5URVJTX01BU0spOworCX0KK30KZGlmZiAtLWdpdCBhL2xpYi9leHRlbnNpb25zL3NwZS9zcGUuYyBiL2xpYi9leHRlbnNpb25zL3NwZS9zcGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjI5N2YyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dGVuc2lvbnMvc3BlL3NwZS5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxhcmNoLmg+CisjaW5jbHVkZSA8YXJjaF9oZWxwZXJzLmg+CisjaW5jbHVkZSA8cHVic3ViLmg+CisKKy8qCisgKiBUaGUgYXNzZW1ibGVyIGRvZXMgbm90IHlldCB1bmRlcnN0YW5kIHRoZSBwc2IgY3N5bmMgbW5lbW9uaWMKKyAqIHNvIHVzZSB0aGUgZXF1aXZhbGVudCBoaW50IGluc3RydWN0aW9uLgorICovCisjZGVmaW5lIHBzYl9jc3luYygpCWFzbSB2b2xhdGlsZSgiaGludCAjMTciKQorCit2b2lkIHNwZV9lbmFibGUoaW50IGVsMl91bnVzZWQpCit7CisJdWludDY0X3QgZmVhdHVyZXM7CisKKwlmZWF0dXJlcyA9IHJlYWRfaWRfYWE2NGRmcjBfZWwxKCkgPj4gSURfQUE2NERGUjBfUE1TX1NISUZUOworCWlmICgoZmVhdHVyZXMgJiBJRF9BQTY0REZSMF9QTVNfTUFTSykgPT0gMSkgeworCQl1aW50NjRfdCB2OworCisJCWlmIChlbDJfdW51c2VkKSB7CisJCQkvKgorCQkJICogTURDUl9FTDIuVFBNUyAoQVJNIHY4LjIpOiBEbyBub3QgdHJhcCBzdGF0aXN0aWNhbAorCQkJICogcHJvZmlsaW5nIGNvbnRyb2xzIHRvIEVMMi4KKwkJCSAqCisJCQkgKiBNRENSX0VMMi5FMlBCIChBUk0gdjguMik6IFNQRSBlbmFibGVkIGluIE5vbi1zZWN1cmUKKwkJCSAqIHN0YXRlLiBBY2Nlc3NlcyB0byBwcm9maWxpbmcgYnVmZmVyIGNvbnRyb2xzIGF0CisJCQkgKiBOb24tc2VjdXJlIEVMMSBhcmUgbm90IHRyYXBwZWQgdG8gRUwyLgorCQkJICovCisJCQl2ID0gcmVhZF9tZGNyX2VsMigpOworCQkJdiAmPSB+TURDUl9FTDJfVFBNUzsKKwkJCXYgfD0gTURDUl9FTDJfRTJQQihNRENSX0VMMl9FMlBCX0VMMSk7CisJCQl3cml0ZV9tZGNyX2VsMih2KTsKKwkJfQorCisJCS8qCisJCSAqIE1EQ1JfRUwyLk5TUEIgKEFSTSB2OC4yKTogU1BFIGVuYWJsZWQgaW4gTm9uLXNlY3VyZSBzdGF0ZQorCQkgKiBhbmQgZGlzYWJsZWQgaW4gc2VjdXJlIHN0YXRlLiBBY2Nlc3NlcyB0byBTUEUgcmVnaXN0ZXJzIGF0CisJCSAqIFMtRUwxIGdlbmVyYXRlIHRyYXAgZXhjZXB0aW9ucyB0byBFTDMuCisJCSAqLworCQl2ID0gcmVhZF9tZGNyX2VsMygpOworCQl2IHw9IE1EQ1JfTlNQQihNRENSX05TUEJfRUwxKTsKKwkJd3JpdGVfbWRjcl9lbDModik7CisJfQorfQorCit2b2lkIHNwZV9kaXNhYmxlKHZvaWQpCit7CisJdWludDY0X3QgZmVhdHVyZXM7CisKKwlmZWF0dXJlcyA9IHJlYWRfaWRfYWE2NGRmcjBfZWwxKCkgPj4gSURfQUE2NERGUjBfUE1TX1NISUZUOworCWlmICgoZmVhdHVyZXMgJiBJRF9BQTY0REZSMF9QTVNfTUFTSykgPT0gMSkgeworCQl1aW50NjRfdCB2OworCisJCS8qIERyYWluIGJ1ZmZlcmVkIGRhdGEgKi8KKwkJcHNiX2NzeW5jKCk7CisJCWRzYm5zaCgpOworCisJCS8qIERpc2FibGUgcHJvZmlsaW5nIGJ1ZmZlciAqLworCQl2ID0gcmVhZF9wbWJsaW1pdHJfZWwxKCk7CisJCXYgJj0gfigxVUxMIDw8IDApOworCQl3cml0ZV9wbWJsaW1pdHJfZWwxKHYpOworCQlpc2IoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkICpzcGVfZHJhaW5fYnVmZmVyc19ob29rKGNvbnN0IHZvaWQgKmFyZykKK3sKKwl1aW50NjRfdCBmZWF0dXJlczsKKworCWZlYXR1cmVzID0gcmVhZF9pZF9hYTY0ZGZyMF9lbDEoKSA+PiBJRF9BQTY0REZSMF9QTVNfU0hJRlQ7CisJaWYgKChmZWF0dXJlcyAmIElEX0FBNjRERlIwX1BNU19NQVNLKSA9PSAxKSB7CisJCS8qIERyYWluIGJ1ZmZlcmVkIGRhdGEgKi8KKwkJcHNiX2NzeW5jKCk7CisJCWRzYm5zaCgpOworCX0KKworCXJldHVybiAwOworfQorCitTVUJTQ1JJQkVfVE9fRVZFTlQoY21fZW50ZXJpbmdfc2VjdXJlX3dvcmxkLCBzcGVfZHJhaW5fYnVmZmVyc19ob29rKTsKZGlmZiAtLWdpdCBhL2xpYi9leHRlbnNpb25zL3N2ZS9zdmUuYyBiL2xpYi9leHRlbnNpb25zL3N2ZS9zdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGU1MWJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2V4dGVuc2lvbnMvc3ZlL3N2ZS5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaW5jbHVkZSA8YXJjaC5oPgorI2luY2x1ZGUgPGFyY2hfaGVscGVycy5oPgorI2luY2x1ZGUgPHB1YnN1Yi5oPgorI2luY2x1ZGUgPHN2ZS5oPgorCitzdGF0aWMgdm9pZCAqZGlzYWJsZV9zdmVfaG9vayhjb25zdCB2b2lkICphcmcpCit7CisJdWludDY0X3QgZmVhdHVyZXM7CisKKwlmZWF0dXJlcyA9IHJlYWRfaWRfYWE2NHBmcjBfZWwxKCkgPj4gSURfQUE2NFBGUjBfU1ZFX1NISUZUOworCWlmICgoZmVhdHVyZXMgJiBJRF9BQTY0UEZSMF9TVkVfTUFTSykgPT0gMSkgeworCQl1aW50NjRfdCBjcHRyOworCisJCS8qCisJCSAqIERpc2FibGUgU1ZFLCBTSU1EIGFuZCBGUCBhY2Nlc3MgZm9yIHRoZSBTZWN1cmUgd29ybGQuCisJCSAqIEFzIHRoZSBTSU1EL0ZQIHJlZ2lzdGVycyBhcmUgcGFydCBvZiB0aGUgU1ZFIFotcmVnaXN0ZXJzLCBhbnkKKwkJICogdXNlIG9mIFNJTUQvRlAgZnVuY3Rpb25hbGl0eSB3aWxsIGNvcnJ1cHQgdGhlIFNWRSByZWdpc3RlcnMuCisJCSAqIFRoZXJlZm9yZSBpdCBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCB1c2Ugb2YgU0lNRC9GUCBzdXBwb3J0CisJCSAqIGluIHRoZSBTZWN1cmUgd29ybGQgYXMgd2VsbCBhcyBTVkUgZnVuY3Rpb25hbGl0eS4KKwkJICovCisJCWNwdHIgPSByZWFkX2NwdHJfZWwzKCk7CisJCWNwdHIgPSAoY3B0ciB8IFRGUF9CSVQpICYgfihDUFRSX0VaX0JJVCk7CisJCXdyaXRlX2NwdHJfZWwzKGNwdHIpOworCisJCS8qCisJCSAqIE5vIGV4cGxpY2l0IElTQiByZXF1aXJlZCBoZXJlIGFzIEVSRVQgdG8gc3dpdGNoIHRvIFNlY3VyZQorCQkgKiB3b3JsZCBjb3ZlcnMgaXQKKwkJICovCisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqZW5hYmxlX3N2ZV9ob29rKGNvbnN0IHZvaWQgKmFyZykKK3sKKwl1aW50NjRfdCBmZWF0dXJlczsKKworCWZlYXR1cmVzID0gcmVhZF9pZF9hYTY0cGZyMF9lbDEoKSA+PiBJRF9BQTY0UEZSMF9TVkVfU0hJRlQ7CisJaWYgKChmZWF0dXJlcyAmIElEX0FBNjRQRlIwX1NWRV9NQVNLKSA9PSAxKSB7CisJCXVpbnQ2NF90IGNwdHI7CisKKwkJLyoKKwkJICogRW5hYmxlIFNWRSwgU0lNRCBhbmQgRlAgYWNjZXNzIGZvciB0aGUgTm9uLXNlY3VyZSB3b3JsZC4KKwkJICovCisJCWNwdHIgPSByZWFkX2NwdHJfZWwzKCk7CisJCWNwdHIgPSAoY3B0ciB8IENQVFJfRVpfQklUKSAmIH4oVEZQX0JJVCk7CisJCXdyaXRlX2NwdHJfZWwzKGNwdHIpOworCisJCS8qCisJCSAqIE5vIGV4cGxpY2l0IElTQiByZXF1aXJlZCBoZXJlIGFzIEVSRVQgdG8gc3dpdGNoIHRvIE5vbi1zZWN1cmUKKwkJICogd29ybGQgY292ZXJzIGl0CisJCSAqLworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBzdmVfZW5hYmxlKGludCBlbDJfdW51c2VkKQoreworCXVpbnQ2NF90IGZlYXR1cmVzOworCisJZmVhdHVyZXMgPSByZWFkX2lkX2FhNjRwZnIwX2VsMSgpID4+IElEX0FBNjRQRlIwX1NWRV9TSElGVDsKKwlpZiAoKGZlYXR1cmVzICYgSURfQUE2NFBGUjBfU1ZFX01BU0spID09IDEpIHsKKwkJdWludDY0X3QgY3B0cjsKKyNpZiBDVFhfSU5DTFVERV9GUFJFR1MKKwkJLyoKKwkJICogQ1RYX0lOQ0xVREVfRlBSRUdTIGlzIG5vdCBzdXBwb3J0ZWQgb24gU1ZFIGVuYWJsZWQgc3lzdGVtcy4KKwkJICovCisJCWFzc2VydCgwKTsKKyNlbmRpZgorCQkvKgorCQkgKiBVcGRhdGUgQ1BUUl9FTDMgdG8gZW5hYmxlIGFjY2VzcyB0byBTVkUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlCisJCSAqIE5vbi1zZWN1cmUgd29ybGQuCisJCSAqIE5PVEUgLSBhc3N1bWVkIHRoYXQgQ1BUUl9FTDMuVEZQIGlzIHNldCB0byBhbGxvdyBhY2Nlc3MgdG8KKwkJICogdGhlIFNJTUQsIGZsb2F0aW5nLXBvaW50IGFuZCBTVkUgc3VwcG9ydC4KKwkJICoKKwkJICogQ1BUUl9FTDMuRVo6IFNldCB0byAxIHRvIGVuYWJsZSBhY2Nlc3MgdG8gU1ZFICBmdW5jdGlvbmFsaXR5CisJCSAqICBpbiB0aGUgTm9uLXNlY3VyZSB3b3JsZC4KKwkJICovCisJCWNwdHIgPSByZWFkX2NwdHJfZWwzKCk7CisJCWNwdHIgfD0gQ1BUUl9FWl9CSVQ7CisJCXdyaXRlX2NwdHJfZWwzKGNwdHIpOworCisJCS8qCisJCSAqIE5lZWQgZXhwbGljaXQgSVNCIGhlcmUgdG8gZ3VhcmFudGVlIHRoYXQgdXBkYXRlIHRvIFpDUl9FTHgKKwkJICogYW5kIENQVFJfRUwyLlRaIGRvIG5vdCByZXN1bHQgaW4gdHJhcCB0byBFTDMuCisJCSAqLworCQlpc2IoKTsKKworCQkvKgorCQkgKiBFbnN1cmUgbG93ZXIgRUxzIGhhdmUgYWNjZXNzIHRvIGZ1bGwgdmVjdG9yIGxlbmd0aC4KKwkJICovCisJCXdyaXRlX3pjcl9lbDMoWkNSX0VMM19MRU5fTUFTSyk7CisKKwkJaWYgKGVsMl91bnVzZWQpIHsKKwkJCS8qCisJCQkgKiBVcGRhdGUgQ1BUUl9FTDIgdG8gZW5hYmxlIGFjY2VzcyB0byBTVkUgZnVuY3Rpb25hbGl0eQorCQkJICogZm9yIE5vbi1zZWN1cmUgd29ybGQsIEVMMiBhbmQgTm9uLXNlY3VyZSBFTDEgYW5kIEVMMC4KKwkJCSAqIE5PVEUgLSBhc3N1bWVkIHRoYXQgQ1BUUl9FTDIuVEZQIGlzIHNldCB0byBhbGxvdworCQkJICogYWNjZXNzIHRvIHRoZSBTSU1ELCBmbG9hdGluZy1wb2ludCBhbmQgU1ZFIHN1cHBvcnQuCisJCQkgKgorCQkJICogQ1BUUl9FTDIuVFo6IFNldCB0byAwIHRvIGVuYWJsZSBhY2Nlc3MgdG8gU1ZFIHN1cHBvcnQKKwkJCSAqICBmb3IgRUwyIGFuZCBOb24tc2VjdXJlIEVMMSBhbmQgRUwwLgorCQkJICovCisJCQljcHRyID0gcmVhZF9jcHRyX2VsMigpOworCQkJY3B0ciAmPSB+KENQVFJfRUwyX1RaX0JJVCk7CisJCQl3cml0ZV9jcHRyX2VsMihjcHRyKTsKKworCQkJLyoKKwkJCSAqIEVuc3VyZSBsb3dlciBFTHMgaGF2ZSBhY2Nlc3MgdG8gZnVsbCB2ZWN0b3IgbGVuZ3RoLgorCQkJICovCisJCQl3cml0ZV96Y3JfZWwyKFpDUl9FTDJfTEVOX01BU0spOworCQl9CisJCS8qCisJCSAqIE5vIGV4cGxpY2l0IElTQiByZXF1aXJlZCBoZXJlIGFzIEVSRVQgdG8gc3dpdGNoIHRvCisJCSAqIE5vbi1zZWN1cmUgd29ybGQgY292ZXJzIGl0LgorCQkgKi8KKwl9Cit9CisKK1NVQlNDUklCRV9UT19FVkVOVChjbV9leGl0ZWRfbm9ybWFsX3dvcmxkLCBkaXNhYmxlX3N2ZV9ob29rKTsKK1NVQlNDUklCRV9UT19FVkVOVChjbV9lbnRlcmluZ19ub3JtYWxfd29ybGQsIGVuYWJsZV9zdmVfaG9vayk7CmRpZmYgLS1naXQgYS9saWIvbG9ja3MvZXhjbHVzaXZlL2FhcmNoMzIvc3BpbmxvY2suUyBiL2xpYi9sb2Nrcy9leGNsdXNpdmUvYWFyY2gzMi9zcGlubG9jay5TCmluZGV4IGJjNzdiYzkuLjk0OTJjYzAgMTAwNjQ0Ci0tLSBhL2xpYi9sb2Nrcy9leGNsdXNpdmUvYWFyY2gzMi9zcGlubG9jay5TCisrKyBiL2xpYi9sb2Nrcy9leGNsdXNpdmUvYWFyY2gzMi9zcGlubG9jay5TCkBAIC05LDYgKzksMTcgQEAKIAkuZ2xvYmwJc3Bpbl9sb2NrCiAJLmdsb2JsCXNwaW5fdW5sb2NrCiAKKyNpZiBBUk1fQVJDSF9BVF9MRUFTVCg4LCAwKQorLyoKKyAqIEFjY29yZGluZyB0byB0aGUgQVJNdjgtQSBBcmNoaXRlY3R1cmUgUmVmZXJlbmNlIE1hbnVhbCwgIndoZW4gdGhlIGdsb2JhbAorICogbW9uaXRvciBmb3IgYSBQRSBjaGFuZ2VzIGZyb20gRXhjbHVzaXZlIEFjY2VzcyBzdGF0ZSB0byBPcGVuIEFjY2VzcyBzdGF0ZSwKKyAqIGFuIGV2ZW50IGlzIGdlbmVyYXRlZC4iLiBUaGlzIGFwcGxpZXMgdG8gYm90aCBBQXJjaDMyIGFuZCBBQXJjaDY0IG1vZGVzIG9mCisgKiBBUk12OC1BLiBBcyBhIHJlc3VsdCwgbm8gZXhwbGljaXQgU0VWIHdpdGggdW5sb2NrIGlzIHJlcXVpcmVkLgorICovCisjZGVmaW5lIENPTkRfU0VWKCkKKyNlbHNlCisjZGVmaW5lIENPTkRfU0VWKCkJc2V2CisjZW5kaWYKIAogZnVuYyBzcGluX2xvY2sKIAltb3YJcjIsICMxCkBAIC0yNyw1ICszOCw2IEBACiBmdW5jIHNwaW5fdW5sb2NrCiAJbW92CXIxLCAjMAogCXN0bAlyMSwgW3IwXQorCUNPTkRfU0VWKCkKIAlieAlscgogZW5kZnVuYyBzcGluX3VubG9jawpkaWZmIC0tZ2l0IGEvbGliL3BzY2kvcHNjaV9jb21tb24uYyBiL2xpYi9wc2NpL3BzY2lfY29tbW9uLmMKaW5kZXggNDUwMmMyNC4uMjIyMGE3NCAxMDA2NDQKLS0tIGEvbGliL3BzY2kvcHNjaV9jb21tb24uYworKysgYi9saWIvcHNjaS9wc2NpX2NvbW1vbi5jCkBAIC03NjcsMTIgKzc2NywxMiBAQAogCXBzY2lfYWNxdWlyZV9wd3JfZG9tYWluX2xvY2tzKGVuZF9wd3JsdmwsCiAJCQkJICAgICAgY3B1X2lkeCk7CiAKKwlwc2NpX2dldF90YXJnZXRfbG9jYWxfcHdyX3N0YXRlcyhlbmRfcHdybHZsLCAmc3RhdGVfaW5mbyk7CisKICNpZiBFTkFCTEVfUFNDSV9TVEFUCiAJcGxhdF9wc2NpX3N0YXRfYWNjb3VudGluZ19zdG9wKCZzdGF0ZV9pbmZvKTsKICNlbmRpZgogCi0JcHNjaV9nZXRfdGFyZ2V0X2xvY2FsX3B3cl9zdGF0ZXMoZW5kX3B3cmx2bCwgJnN0YXRlX2luZm8pOwotCiAJLyoKIAkgKiBUaGlzIENQVSBjb3VsZCBiZSByZXN1bWluZyBmcm9tIHN1c3BlbmQgb3IgaXQgY291bGQgaGF2ZSBqdXN0IGJlZW4KIAkgKiB0dXJuZWQgb24uIFRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlc2UgMiBjYXNlcywgd2UgZXhhbWluZSB0aGUKZGlmZiAtLWdpdCBhL2xpYi9wc2NpL3BzY2lfbGliLm1rIGIvbGliL3BzY2kvcHNjaV9saWIubWsKaW5kZXggMjkwODBkYi4uMWQ0YWFjNCAxMDA2NDQKLS0tIGEvbGliL3BzY2kvcHNjaV9saWIubWsKKysrIGIvbGliL3BzY2kvcHNjaV9saWIubWsKQEAgLTE3LDYgKzE3LDcgQEAKIAkJCQlsaWIvcHNjaS9wc2NpX21haW4uYwkJCVwKIAkJCQlsaWIvcHNjaS9wc2NpX3NldHVwLmMJCQlcCiAJCQkJbGliL3BzY2kvcHNjaV9zeXN0ZW1fb2ZmLmMJCVwKKwkJCQlsaWIvcHNjaS9wc2NpX21lbV9wcm90ZWN0LmMJCVwKIAkJCQlsaWIvcHNjaS8ke0FSQ0h9L3BzY2lfaGVscGVycy5TCiAKIGlmZXEgKCR7QVJDSH0sIGFhcmNoNjQpCmRpZmYgLS1naXQgYS9saWIvcHNjaS9wc2NpX21haW4uYyBiL2xpYi9wc2NpL3BzY2lfbWFpbi5jCmluZGV4IDI1NzQ3OWEuLjhlNDFjZjAgMTAwNjQ0Ci0tLSBhL2xpYi9wc2NpL3BzY2lfbWFpbi5jCisrKyBiL2xpYi9wc2NpL3BzY2lfbWFpbi5jCkBAIC0yMjAsNiArMjIwLDIzIEBACiAJaWYgKHRhcmdldF9pZHggPT0gLTEpCiAJCXJldHVybiBQU0NJX0VfSU5WQUxJRF9QQVJBTVM7CiAKKwkvKgorCSAqIEdlbmVyaWMgbWFuYWdlbWVudDoKKwkgKiBQZXJmb3JtIGNhY2hlIG1haW50YW5lbmNlIGFoZWFkIG9mIHJlYWRpbmcgdGhlIHRhcmdldCBDUFUgc3RhdGUgdG8KKwkgKiBlbnN1cmUgdGhhdCB0aGUgZGF0YSBpcyBub3Qgc3RhbGUuCisJICogVGhlcmUgaXMgYSB0aGVvcmV0aWNhbCBlZGdlIGNhc2Ugd2hlcmUgdGhlIGNhY2hlIG1heSBjb250YWluIHN0YWxlCisJICogZGF0YSBmb3IgdGhlIHRhcmdldCBDUFUgZGF0YSAtIHRoaXMgY2FuIG9jY3VyIHVuZGVyIHRoZSBmb2xsb3dpbmcKKwkgKiBjb25kaXRpb25zOgorCSAqIC0gdGhlIHRhcmdldCBDUFUgaXMgaW4gYW5vdGhlciBjbHVzdGVyIGZyb20gdGhlIGN1cnJlbnQKKwkgKiAtIHRoZSB0YXJnZXQgQ1BVIHdhcyB0aGUgbGFzdCBDUFUgdG8gc2h1dGRvd24gb24gaXRzIGNsdXN0ZXIKKwkgKiAtIHRoZSBjbHVzdGVyIHdhcyByZW1vdmVkIGZyb20gY29oZXJlbmN5IGFzIHBhcnQgb2YgdGhlIENQVSBzaHV0ZG93bgorCSAqCisJICogSW4gdGhpcyBjYXNlIHRoZSBjYWNoZSBtYWludGVuYWNlIHRoYXQgd2FzIHBlcmZvcm1lZCBhcyBwYXJ0IG9mIHRoZQorCSAqIHRhcmdldCBDUFVzIHNodXRkb3duIHdhcyBub3Qgc2VlbiBieSB0aGUgY3VycmVudCBDUFUncyBjbHVzdGVyLiBBbmQKKwkgKiBzbyB0aGUgY2FjaGUgbWF5IGNvbnRhaW4gc3RhbGUgZGF0YSBmb3IgdGhlIHRhcmdldCBDUFUuCisJICovCisJZmx1c2hfY3B1X2RhdGFfYnlfaW5kZXgodGFyZ2V0X2lkeCwgcHNjaV9zdmNfY3B1X2RhdGEuYWZmX2luZm9fc3RhdGUpOworCiAJcmV0dXJuIHBzY2lfZ2V0X2FmZl9pbmZvX3N0YXRlX2J5X2lkeCh0YXJnZXRfaWR4KTsKIH0KIApAQCAtNDA4LDYgKzQyNSwxNSBAQAogCQljYXNlIFBTQ0lfU1RBVF9DT1VOVF9BQVJDSDMyOgogCQkJcmV0dXJuIHBzY2lfc3RhdF9jb3VudCh4MSwgeDIpOwogI2VuZGlmCisJCWNhc2UgUFNDSV9NRU1fUFJPVEVDVDoKKwkJCXJldHVybiBwc2NpX21lbV9wcm90ZWN0KHgxKTsKKworCQljYXNlIFBTQ0lfTUVNX0NIS19SQU5HRV9BQVJDSDMyOgorCQkJcmV0dXJuIHBzY2lfbWVtX2Noa19yYW5nZSh4MSwgeDIpOworCisJCWNhc2UgUFNDSV9TWVNURU1fUkVTRVQyX0FBUkNIMzI6CisJCQkvKiBXZSBzaG91bGQgbmV2ZXIgcmV0dXJuIGZyb20gcHNjaV9zeXN0ZW1fcmVzZXQyKCkgKi8KKwkJCXJldHVybiBwc2NpX3N5c3RlbV9yZXNldDIoeDEsIHgyKTsKIAogCQlkZWZhdWx0OgogCQkJYnJlYWs7CkBAIC00NDUsNiArNDcxLDEzIEBACiAJCQlyZXR1cm4gcHNjaV9zdGF0X2NvdW50KHgxLCB4Mik7CiAjZW5kaWYKIAorCQljYXNlIFBTQ0lfTUVNX0NIS19SQU5HRV9BQVJDSDY0OgorCQkJcmV0dXJuIHBzY2lfbWVtX2Noa19yYW5nZSh4MSwgeDIpOworCisJCWNhc2UgUFNDSV9TWVNURU1fUkVTRVQyX0FBUkNINjQ6CisJCQkvKiBXZSBzaG91bGQgbmV2ZXIgcmV0dXJuIGZyb20gcHNjaV9zeXN0ZW1fcmVzZXQyKCkgKi8KKwkJCXJldHVybiBwc2NpX3N5c3RlbV9yZXNldDIoeDEsIHgyKTsKKwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2xpYi9wc2NpL3BzY2lfbWVtX3Byb3RlY3QuYyBiL2xpYi9wc2NpL3BzY2lfbWVtX3Byb3RlY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2E4NGU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3BzY2kvcHNjaV9tZW1fcHJvdGVjdC5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx1dGlscy5oPgorI2luY2x1ZGUgInBzY2lfcHJpdmF0ZS5oIgorCitpbnQgcHNjaV9tZW1fcHJvdGVjdCh1bnNpZ25lZCBpbnQgZW5hYmxlKQoreworCWludCB2YWw7CisKKwlhc3NlcnQocHNjaV9wbGF0X3BtX29wcy0+cmVhZF9tZW1fcHJvdGVjdCk7CisJYXNzZXJ0KHBzY2lfcGxhdF9wbV9vcHMtPndyaXRlX21lbV9wcm90ZWN0KTsKKworCWlmIChwc2NpX3BsYXRfcG1fb3BzLT5yZWFkX21lbV9wcm90ZWN0KCZ2YWwpIDwgMCkKKwkJcmV0dXJuIFBTQ0lfRV9OT1RfU1VQUE9SVEVEOworCWlmIChwc2NpX3BsYXRfcG1fb3BzLT53cml0ZV9tZW1fcHJvdGVjdChlbmFibGUpIDwgMCkKKwkJcmV0dXJuIFBTQ0lfRV9OT1RfU1VQUE9SVEVEOworCisJcmV0dXJuIHZhbCAhPSAwOworfQorCitpbnQgcHNjaV9tZW1fY2hrX3JhbmdlKHVpbnRwdHJfdCBiYXNlLCB1X3JlZ2lzdGVyX3QgbGVuZ3RoKQoreworCWludCByZXQ7CisKKwlhc3NlcnQocHNjaV9wbGF0X3BtX29wcy0+bWVtX3Byb3RlY3RfY2hrKTsKKworCWlmIChsZW5ndGggPT0gMCB8fCBjaGVja191cHRyX292ZXJmbG93KGJhc2UsIGxlbmd0aC0xKSkKKwkJcmV0dXJuIFBTQ0lfRV9ERU5JRUQ7CisKKwlyZXQgPSBwc2NpX3BsYXRfcG1fb3BzLT5tZW1fcHJvdGVjdF9jaGsoYmFzZSwgbGVuZ3RoKTsKKwlyZXR1cm4gKHJldCA8IDApID8gUFNDSV9FX0RFTklFRCA6IFBTQ0lfRV9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvbGliL3BzY2kvcHNjaV9vbi5jIGIvbGliL3BzY2kvcHNjaV9vbi5jCmluZGV4IGQzZDBlMmYuLjUzYjA0NGUgMTAwNjQ0Ci0tLSBhL2xpYi9wc2NpL3BzY2lfb24uYworKysgYi9saWIvcHNjaS9wc2NpX29uLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxjb250ZXh0X21nbXQuaD4KICNpbmNsdWRlIDxkZWJ1Zy5oPgogI2luY2x1ZGUgPHBsYXRmb3JtLmg+CisjaW5jbHVkZSA8cHVic3ViX2V2ZW50cy5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgInBzY2lfcHJpdmF0ZS5oIgogCkBAIC0xODgsNiArMTg5LDggQEAKIAlpZiAocHNjaV9zcGRfcG0gJiYgcHNjaV9zcGRfcG0tPnN2Y19vbl9maW5pc2gpCiAJCXBzY2lfc3BkX3BtLT5zdmNfb25fZmluaXNoKDApOwogCisJUFVCTElTSF9FVkVOVChwc2NpX2NwdV9vbl9maW5pc2gpOworCiAJLyogUG9wdWxhdGUgdGhlIG1waWRyIGZpZWxkIHdpdGhpbiB0aGUgY3B1IG5vZGUgYXJyYXkgKi8KIAkvKiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgb25seSBvbmNlICovCiAJcHNjaV9jcHVfcGRfbm9kZXNbY3B1X2lkeF0ubXBpZHIgPSByZWFkX21waWRyKCkgJiBNUElEUl9BRkZJTklUWV9NQVNLOwpkaWZmIC0tZ2l0IGEvbGliL3BzY2kvcHNjaV9wcml2YXRlLmggYi9saWIvcHNjaS9wc2NpX3ByaXZhdGUuaAppbmRleCBkYTZhMjBmLi41MDRmYjllIDEwMDY0NAotLS0gYS9saWIvcHNjaS9wc2NpX3ByaXZhdGUuaAorKysgYi9saWIvcHNjaS9wc2NpX3ByaXZhdGUuaApAQCAtODksNyArODksOSBAQAogCQkJZGVmaW5lX3BzY2lfY2FwKFBTQ0lfTk9ERV9IV19TVEFURV9BQVJDSDY0KSB8CVwKIAkJCWRlZmluZV9wc2NpX2NhcChQU0NJX1NZU1RFTV9TVVNQRU5EX0FBUkNINjQpIHwJXAogCQkJZGVmaW5lX3BzY2lfY2FwKFBTQ0lfU1RBVF9SRVNJREVOQ1lfQUFSQ0g2NCkgfAlcCi0JCQlkZWZpbmVfcHNjaV9jYXAoUFNDSV9TVEFUX0NPVU5UX0FBUkNINjQpKQorCQkJZGVmaW5lX3BzY2lfY2FwKFBTQ0lfU1RBVF9DT1VOVF9BQVJDSDY0KSB8CVwKKwkJCWRlZmluZV9wc2NpX2NhcChQU0NJX1NZU1RFTV9SRVNFVDJfQUFSQ0g2NCkgfAlcCisJCQlkZWZpbmVfcHNjaV9jYXAoUFNDSV9NRU1fQ0hLX1JBTkdFX0FBUkNINjQpKQogCiAvKgogICogSGVscGVyIG1hY3JvcyB0byBnZXQvc2V0IHRoZSBmaWVsZHMgb2YgUFNDSSBwZXItY3B1IGRhdGEuCkBAIC0yNTgsNiArMjYwLDcgQEAKIC8qIFByaXZhdGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGZyb20gcHNjaV9zeXN0ZW1fb2ZmLmMgKi8KIHZvaWQgX19kZWFkMiBwc2NpX3N5c3RlbV9vZmYodm9pZCk7CiB2b2lkIF9fZGVhZDIgcHNjaV9zeXN0ZW1fcmVzZXQodm9pZCk7CitpbnQgcHNjaV9zeXN0ZW1fcmVzZXQyKHVpbnQzMl90IHJlc2V0X3R5cGUsIHVfcmVnaXN0ZXJfdCBjb29raWUpOwogCiAvKiBQcml2YXRlIGV4cG9ydGVkIGZ1bmN0aW9ucyBmcm9tIHBzY2lfc3RhdC5jICovCiB2b2lkIHBzY2lfc3RhdHNfdXBkYXRlX3B3cl9kb3duKHVuc2lnbmVkIGludCBlbmRfcHdybHZsLApAQCAtMjY5LDQgKzI3Miw4IEBACiB1X3JlZ2lzdGVyX3QgcHNjaV9zdGF0X2NvdW50KHVfcmVnaXN0ZXJfdCB0YXJnZXRfY3B1LAogCQkJdW5zaWduZWQgaW50IHBvd2VyX3N0YXRlKTsKIAorLyogUHJpdmF0ZSBleHBvcnRlZCBmdW5jdGlvbnMgZnJvbSBwc2NpX21lbV9wcm90ZWN0LmMgKi8KK2ludCBwc2NpX21lbV9wcm90ZWN0KHVuc2lnbmVkIGludCBlbmFibGUpOworaW50IHBzY2lfbWVtX2Noa19yYW5nZSh1aW50cHRyX3QgYmFzZSwgdV9yZWdpc3Rlcl90IGxlbmd0aCk7CisKICNlbmRpZiAvKiBfX1BTQ0lfUFJJVkFURV9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYi9wc2NpL3BzY2lfc2V0dXAuYyBiL2xpYi9wc2NpL3BzY2lfc2V0dXAuYwppbmRleCBmNzBlMzRkLi5jMDBiZDk0IDEwMDY0NAotLS0gYS9saWIvcHNjaS9wc2NpX3NldHVwLmMKKysrIGIvbGliL3BzY2kvcHNjaV9zZXR1cC5jCkBAIC0yNDMsNiArMjQzLDEzIEBACiAJCXBzY2lfY2FwcyB8PSAgZGVmaW5lX3BzY2lfY2FwKFBTQ0lfU1lTVEVNX1JFU0VUKTsKIAlpZiAocHNjaV9wbGF0X3BtX29wcy0+Z2V0X25vZGVfaHdfc3RhdGUpCiAJCXBzY2lfY2FwcyB8PSBkZWZpbmVfcHNjaV9jYXAoUFNDSV9OT0RFX0hXX1NUQVRFX0FBUkNINjQpOworCWlmIChwc2NpX3BsYXRfcG1fb3BzLT5yZWFkX21lbV9wcm90ZWN0ICYmCisJCQlwc2NpX3BsYXRfcG1fb3BzLT53cml0ZV9tZW1fcHJvdGVjdCkKKwkJcHNjaV9jYXBzIHw9IGRlZmluZV9wc2NpX2NhcChQU0NJX01FTV9QUk9URUNUKTsKKwlpZiAocHNjaV9wbGF0X3BtX29wcy0+bWVtX3Byb3RlY3RfY2hrKQorCQlwc2NpX2NhcHMgfD0gZGVmaW5lX3BzY2lfY2FwKFBTQ0lfTUVNX0NIS19SQU5HRV9BQVJDSDY0KTsKKwlpZiAocHNjaV9wbGF0X3BtX29wcy0+c3lzdGVtX3Jlc2V0MikKKwkJcHNjaV9jYXBzIHw9IGRlZmluZV9wc2NpX2NhcChQU0NJX1NZU1RFTV9SRVNFVDJfQUFSQ0g2NCk7CiAKICNpZiBFTkFCTEVfUFNDSV9TVEFUCiAJcHNjaV9jYXBzIHw9ICBkZWZpbmVfcHNjaV9jYXAoUFNDSV9TVEFUX1JFU0lERU5DWV9BQVJDSDY0KTsKQEAgLTI1OSw4ICsyNjYsMTAgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIHBzY2lfYXJjaF9zZXR1cCh2b2lkKQogeworI2lmIEFSTV9BUkNIX01BSk9SID4gNyB8fCBkZWZpbmVkKEFSTVY3X1NVUFBPUlRTX0dFTkVSSUNfVElNRVIpCiAJLyogUHJvZ3JhbSB0aGUgY291bnRlciBmcmVxdWVuY3kgKi8KIAl3cml0ZV9jbnRmcnFfZWwwKHBsYXRfZ2V0X3N5c2NudF9mcmVxMigpKTsKKyNlbmRpZgogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY3B1X29wcyBwb2ludGVyLiAqLwogCWluaXRfY3B1X29wcygpOwpkaWZmIC0tZ2l0IGEvbGliL3BzY2kvcHNjaV9zdXNwZW5kLmMgYi9saWIvcHNjaS9wc2NpX3N1c3BlbmQuYwppbmRleCA0MGVjZGVlLi5kOTQ5MDY3IDEwMDY0NAotLS0gYS9saWIvcHNjaS9wc2NpX3N1c3BlbmQuYworKysgYi9saWIvcHNjaS9wc2NpX3N1c3BlbmQuYwpAQCAtMzcsNiArMzcsMTEgQEAKIAkgKi8KIAlwc2NpX2dldF90YXJnZXRfbG9jYWxfcHdyX3N0YXRlcyhlbmRfcHdybHZsLCAmc3RhdGVfaW5mbyk7CiAKKyNpZiBFTkFCTEVfUFNDSV9TVEFUCisJcGxhdF9wc2NpX3N0YXRfYWNjb3VudGluZ19zdG9wKCZzdGF0ZV9pbmZvKTsKKwlwc2NpX3N0YXRzX3VwZGF0ZV9wd3JfdXAoZW5kX3B3cmx2bCwgJnN0YXRlX2luZm8pOworI2VuZGlmCisKIAkvKgogCSAqIFBsYXQuIG1hbmFnZW1lbnQ6IEFsbG93IHRoZSBwbGF0Zm9ybSB0byBkbyBvcGVyYXRpb25zCiAJICogb24gd2FraW5nIHVwIGZyb20gcmV0ZW50aW9uLgpAQCAtMjM2LDEwICsyNDEsNiBAQAogCSAgICBQTUZfTk9fQ0FDSEVfTUFJTlQpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEVfUFNDSV9TVEFUCi0JcGxhdF9wc2NpX3N0YXRfYWNjb3VudGluZ19zdGFydChzdGF0ZV9pbmZvKTsKLSNlbmRpZgotCiAJLyoKIAkgKiBXZSB3aWxsIHJlYWNoIGhlcmUgaWYgb25seSByZXRlbnRpb24vc3RhbmRieSBzdGF0ZXMgaGF2ZSBiZWVuCiAJICogcmVxdWVzdGVkIGF0IG11bHRpcGxlIHBvd2VyIGxldmVscy4gVGhpcyBtZWFucyB0aGF0IHRoZSBjcHUKQEAgLTI0NywxMSArMjQ4LDYgQEAKIAkgKi8KIAl3ZmkoKTsKIAotI2lmIEVOQUJMRV9QU0NJX1NUQVQKLQlwbGF0X3BzY2lfc3RhdF9hY2NvdW50aW5nX3N0b3Aoc3RhdGVfaW5mbyk7Ci0JcHNjaV9zdGF0c191cGRhdGVfcHdyX3VwKGVuZF9wd3JsdmwsIHN0YXRlX2luZm8pOwotI2VuZGlmCi0KICNpZiBFTkFCTEVfUlVOVElNRV9JTlNUUlVNRU5UQVRJT04KIAlQTUZfQ0FQVFVSRV9USU1FU1RBTVAocnRfaW5zdHJfc3ZjLAogCSAgICBSVF9JTlNUUl9FWElUX0hXX0xPV19QV1IsCmRpZmYgLS1naXQgYS9saWIvcHNjaS9wc2NpX3N5c3RlbV9vZmYuYyBiL2xpYi9wc2NpL3BzY2lfc3lzdGVtX29mZi5jCmluZGV4IGVmNWQzZDEuLjEzZTlmNGEgMTAwNjQ0Ci0tLSBhL2xpYi9wc2NpL3BzY2lfc3lzdGVtX29mZi5jCisrKyBiL2xpYi9wc2NpL3BzY2lfc3lzdGVtX29mZi5jCkBAIC00OSwzICs0OSwzMyBAQAogCiAJLyogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4uIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLwogfQorCitpbnQgcHNjaV9zeXN0ZW1fcmVzZXQyKHVpbnQzMl90IHJlc2V0X3R5cGUsIHVfcmVnaXN0ZXJfdCBjb29raWUpCit7CisJaW50IGlzX3ZlbmRvcjsKKworCXBzY2lfcHJpbnRfcG93ZXJfZG9tYWluX21hcCgpOworCisJYXNzZXJ0KHBzY2lfcGxhdF9wbV9vcHMtPnN5c3RlbV9yZXNldDIpOworCisJaXNfdmVuZG9yID0gKHJlc2V0X3R5cGUgPj4gUFNDSV9SRVNFVDJfVFlQRV9WRU5ET1JfU0hJRlQpICYgMTsKKwlpZiAoIWlzX3ZlbmRvcikgeworCQkvKgorCQkgKiBPbmx5IFdBUk1fUkVTRVQgaXMgYWxsb3dlZCBmb3IgYXJjaGl0ZWN0dXJhbCB0eXBlIHJlc2V0cy4KKwkJICovCisJCWlmIChyZXNldF90eXBlICE9IFBTQ0lfUkVTRVQyX1NZU1RFTV9XQVJNX1JFU0VUKQorCQkJcmV0dXJuIFBTQ0lfRV9JTlZBTElEX1BBUkFNUzsKKwkJaWYgKHBzY2lfcGxhdF9wbV9vcHMtPndyaXRlX21lbV9wcm90ZWN0ICYmCisJCSAgICBwc2NpX3BsYXRfcG1fb3BzLT53cml0ZV9tZW1fcHJvdGVjdCgwKSA8IDApIHsKKwkJCXJldHVybiBQU0NJX0VfTk9UX1NVUFBPUlRFRDsKKwkJfQorCX0KKworCS8qIE5vdGlmeSB0aGUgU2VjdXJlIFBheWxvYWQgRGlzcGF0Y2hlciAqLworCWlmIChwc2NpX3NwZF9wbSAmJiBwc2NpX3NwZF9wbS0+c3ZjX3N5c3RlbV9yZXNldCkgeworCQlwc2NpX3NwZF9wbS0+c3ZjX3N5c3RlbV9yZXNldCgpOworCX0KKwljb25zb2xlX2ZsdXNoKCk7CisKKwlyZXR1cm4gcHNjaV9wbGF0X3BtX29wcy0+c3lzdGVtX3Jlc2V0Mihpc192ZW5kb3IsIHJlc2V0X3R5cGUsIGNvb2tpZSk7Cit9CmRpZmYgLS1naXQgYS9saWIvdXRpbHMvbWVtX3JlZ2lvbi5jIGIvbGliL3V0aWxzL21lbV9yZWdpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWM2MjMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3V0aWxzL21lbV9yZWdpb24uYwpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8dXRpbHMuaD4KKworLyoKKyAqIEFsbCB0aGUgcmVnaW9ucyBkZWZpbmVkIGluIG1lbV9yZWdpb25fdCBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzCisgKgorICogLSBBbnkgY29udGlndW91cyByZWdpb25zIG11c3QgYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgZW50cnkuCisgKiAtIFRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZWFjaCByZWdpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4KKyAqIC0gVGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBoaWdoZXN0IGFkZHJlc3Mgd2l0aGluIHRoZSByZWdpb24gKGJhc2UgKyBuYnl0ZXMtMSkKKyAqICAgZG9lc24ndCBwcm9kdWNlIGFuIG92ZXJmbG93LgorICoKKyAqIFRoZXNlIGNvbmRpdGlvbnMgbXVzdCBiZSBmdWxmaWxsZWQgYnkgdGhlIGNhbGxlciBhbmQgdGhleSBhcmVuJ3QgY2hlY2tlZAorICogYXQgcnVudGltZS4KKyAqLworCisvKgorICogemVyb19ub3JtYWxtZW0gYWxsIHRoZSByZWdpb25zIGRlZmluZWQgaW4gdGJsLgorICogSXQgYXNzdW1lcyB0aGF0IE1NVSBpcyBlbmFibGVkIGFuZCB0aGUgbWVtb3J5IGlzIE5vcm1hbCBtZW1vcnkuCisgKiB0YmwgbXVzdCBiZSBhIHZhbGlkIHBvaW50ZXIgdG8gYSBtZW1vcnkgbWVtX3JlZ2lvbl90IGFycmF5LAorICogbnJlZ2lvbnMgaXMgdGhlIHNpemUgb2YgdGhlIGFycmF5LgorICovCit2b2lkIGNsZWFyX21lbV9yZWdpb25zKG1lbV9yZWdpb25fdCAqdGJsLCBzaXplX3QgbnJlZ2lvbnMpCit7CisJc2l6ZV90IGk7CisKKwlhc3NlcnQodGJsKTsKKwlhc3NlcnQobnJlZ2lvbnMgPiAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBucmVnaW9uczsgaSsrKSB7CisJCWFzc2VydCh0YmwtPm5ieXRlcyA+IDApOworCQlhc3NlcnQoIWNoZWNrX3VwdHJfb3ZlcmZsb3codGJsLT5iYXNlLCB0YmwtPm5ieXRlcy0xKSk7CisJCXplcm9fbm9ybWFsbWVtKCh2b2lkICopICh0YmwtPmJhc2UpLCB0YmwtPm5ieXRlcyk7CisJCXRibCsrOworCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoYXQgYSByZWdpb24gKGFkZHIgKyBuYnl0ZXMtMSkgb2YgbWVtb3J5IGlzIHRvdGFsbHkKKyAqIGNvdmVyZWQgYnkgb25lIG9mIHRoZSByZWdpb25zIGRlZmluZWQgaW4gdGJsLgorICogdGJsIG11c3QgYmUgYSB2YWxpZCBwb2ludGVyIHRvIGEgbWVtb3J5IG1lbV9yZWdpb25fdCBhcnJheSwgbnJlZ2lvbnMKKyAqIGlzIHRoZSBzaXplIG9mIHRoZSBhcnJheSBhbmQgdGhlIHJlZ2lvbiBkZXNjcmliZWQgYnkgYWRkciBhbmQgbmJ5dGVzIG11c3QKKyAqIG5vdCBnZW5lcmF0ZSBhbiBvdmVyZmxvdy4KKyAqIFJldHVybnM6CisgKiAgLTEgbWVhbnMgdGhhdCB0aGUgcmVnaW9uIGlzIG5vdCBjb3ZlcmVkIGJ5IGFueSBvZiB0aGUgcmVnaW9ucworICogICAgIGRlc2NyaWJlZCBpbiB0YmwuCisgKiAgIDAgdGhlIHJlZ2lvbiAoYWRkciArIG5ieXRlcy0xKSBpcyBjb3ZlcmVkIGJ5IG9uZSBvZiB0aGUgcmVnaW9ucyBkZXNjcmliZWQKKyAqICAgICBpbiB0YmwKKyAqLworaW50IG1lbV9yZWdpb25faW5fYXJyYXlfY2hrKG1lbV9yZWdpb25fdCAqdGJsLCBzaXplX3QgbnJlZ2lvbnMsCisJCQkgICAgdWludHB0cl90IGFkZHIsIHNpemVfdCBuYnl0ZXMpCit7CisJdWludHB0cl90IHJlZ2lvbl9zdGFydCwgcmVnaW9uX2VuZCwgc3RhcnQsIGVuZDsKKwlzaXplX3QgaTsKKworCWFzc2VydCh0YmwpOworCWFzc2VydChuYnl0ZXMgPiAwKTsKKwlhc3NlcnQoIWNoZWNrX3VwdHJfb3ZlcmZsb3coYWRkciwgbmJ5dGVzLTEpKTsKKworCXJlZ2lvbl9zdGFydCA9IGFkZHI7CisJcmVnaW9uX2VuZCA9IGFkZHIgKyAobmJ5dGVzIC0gMSk7CisJZm9yIChpID0gMDsgaSA8IG5yZWdpb25zOyBpKyspIHsKKwkJYXNzZXJ0KHRibC0+bmJ5dGVzID4gMCk7CisJCWFzc2VydCghY2hlY2tfdXB0cl9vdmVyZmxvdyh0YmwtPmJhc2UsIHRibC0+bmJ5dGVzLTEpKTsKKwkJc3RhcnQgPSB0YmwtPmJhc2U7CisJCWVuZCA9IHN0YXJ0ICsgKHRibC0+bmJ5dGVzIC0gMSk7CisJCWlmIChyZWdpb25fc3RhcnQgPj0gc3RhcnQgJiYgcmVnaW9uX2VuZCA8PSBlbmQpCisJCQlyZXR1cm4gMDsKKwkJdGJsKys7CisJfQorCisJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvbGliL3hsYXRfdGFibGVzL2FhcmNoMzIveGxhdF90YWJsZXMuYyBiL2xpYi94bGF0X3RhYmxlcy9hYXJjaDMyL3hsYXRfdGFibGVzLmMKaW5kZXggYzdlMzRmMi4uNzIwZDQ0NiAxMDA2NDQKLS0tIGEvbGliL3hsYXRfdGFibGVzL2FhcmNoMzIveGxhdF90YWJsZXMuYworKysgYi9saWIveGxhdF90YWJsZXMvYWFyY2gzMi94bGF0X3RhYmxlcy5jCkBAIC0xMyw2ICsxMywxMCBAQAogI2luY2x1ZGUgPHhsYXRfdGFibGVzLmg+CiAjaW5jbHVkZSAiLi4veGxhdF90YWJsZXNfcHJpdmF0ZS5oIgogCisjaWYgQVJNX0FSQ0hfTUFKT1IgPT0gNyAmJiAhZGVmaW5lZChBUk1WN19TVVBQT1JUU19MQVJHRV9QQUdFX0FERFJFU1NJTkcpCisjZXJyb3IgQVJNdjcgdGFyZ2V0IGRvZXMgbm90IHN1cHBvcnQgTFBBRSBNTVUgZGVzY3JpcHRvcnMKKyNlbmRpZgorCiAjZGVmaW5lIFhMQVRfVEFCTEVfTEVWRUxfQkFTRQlcCiAgICAgICAgR0VUX1hMQVRfVEFCTEVfTEVWRUxfQkFTRShQTEFUX1ZJUlRfQUREUl9TUEFDRV9TSVpFKQogCmRpZmYgLS1naXQgYS9saWIveGxhdF90YWJsZXMvYWFyY2g2NC94bGF0X3RhYmxlcy5jIGIvbGliL3hsYXRfdGFibGVzL2FhcmNoNjQveGxhdF90YWJsZXMuYwppbmRleCAyZGRmOGNiLi5lYWJjM2RmIDEwMDY0NAotLS0gYS9saWIveGxhdF90YWJsZXMvYWFyY2g2NC94bGF0X3RhYmxlcy5jCisrKyBiL2xpYi94bGF0X3RhYmxlcy9hYXJjaDY0L3hsYXRfdGFibGVzLmMKQEAgLTYwLDcgKzYwLDEwIEBACiAvKiBQaHlzaWNhbCBBZGRyZXNzIHJhbmdlcyBzdXBwb3J0ZWQgaW4gdGhlIEFBcmNoNjQgTWVtb3J5IE1vZGVsICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBhX3JhbmdlX2JpdHNfYXJyW10gPSB7CiAJUEFSQU5HRV8wMDAwLCBQQVJBTkdFXzAwMDEsIFBBUkFOR0VfMDAxMCwgUEFSQU5HRV8wMDExLCBQQVJBTkdFXzAxMDAsCi0JUEFSQU5HRV8wMTAxCisJUEFSQU5HRV8wMTAxLAorI2lmIEFSTV9BUkNIX0FUX0xFQVNUKDgsIDIpCisJUEFSQU5HRV8wMTEwLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGdldF9tYXhfc3VwcG9ydGVkX3BhKHZvaWQpCkBAIC0xODIsNyArMTg1LDExIEBACiAKIC8qIERlZmluZSBFTDEgYW5kIEVMMyB2YXJpYW50cyBvZiB0aGUgZnVuY3Rpb24gZW5hYmxpbmcgdGhlIE1NVSAqLwogREVGSU5FX0VOQUJMRV9NTVVfRUwoMSwKLQkJKHRjcl9wc19iaXRzIDw8IFRDUl9FTDFfSVBTX1NISUZUKSwKKwkJLyoKKwkJICogVENSX0VMMS5FUEQxOiBEaXNhYmxlIHRyYW5zbGF0aW9uIHRhYmxlIHdhbGsgZm9yIGFkZHJlc3NlcworCQkgKiB0aGF0IGFyZSB0cmFuc2xhdGVkIHVzaW5nIFRUQlIxX0VMMS4KKwkJICovCisJCVRDUl9FUEQxX0JJVCB8ICh0Y3JfcHNfYml0cyA8PCBUQ1JfRUwxX0lQU19TSElGVCksCiAJCXRsYml2bWFsbGUxKQogREVGSU5FX0VOQUJMRV9NTVVfRUwoMywKIAkJVENSX0VMM19SRVMxIHwgKHRjcl9wc19iaXRzIDw8IFRDUl9FTDNfUFNfU0hJRlQpLApkaWZmIC0tZ2l0IGEvbGliL3hsYXRfdGFibGVzX3YyL2FhcmNoMzIveGxhdF90YWJsZXNfYXJjaC5jIGIvbGliL3hsYXRfdGFibGVzX3YyL2FhcmNoMzIveGxhdF90YWJsZXNfYXJjaC5jCmluZGV4IGU2NmI5MjcuLmZjN2NhNDYgMTAwNjQ0Ci0tLSBhL2xpYi94bGF0X3RhYmxlc192Mi9hYXJjaDMyL3hsYXRfdGFibGVzX2FyY2guYworKysgYi9saWIveGxhdF90YWJsZXNfdjIvYWFyY2gzMi94bGF0X3RhYmxlc19hcmNoLmMKQEAgLTE0LDYgKzE0LDEwIEBACiAjaW5jbHVkZSA8eGxhdF90YWJsZXNfdjIuaD4KICNpbmNsdWRlICIuLi94bGF0X3RhYmxlc19wcml2YXRlLmgiCiAKKyNpZiBBUk1fQVJDSF9NQUpPUiA9PSA3ICYmICFkZWZpbmVkKEFSTVY3X1NVUFBPUlRTX0xBUkdFX1BBR0VfQUREUkVTU0lORykKKyNlcnJvciBBUk12NyB0YXJnZXQgZG9lcyBub3Qgc3VwcG9ydCBMUEFFIE1NVSBkZXNjcmlwdG9ycworI2VuZGlmCisKICNpZiBFTkFCTEVfQVNTRVJUSU9OUwogdW5zaWduZWQgbG9uZyBsb25nIHhsYXRfYXJjaF9nZXRfbWF4X3N1cHBvcnRlZF9wYSh2b2lkKQogewpAQCAtMjIsMTMgKzI2LDExIEBACiB9CiAjZW5kaWYgLyogRU5BQkxFX0FTU0VSVElPTlMqLwogCi1pbnQgaXNfbW11X2VuYWJsZWQodm9pZCkKK2ludCBpc19tbXVfZW5hYmxlZF9jdHgoY29uc3QgeGxhdF9jdHhfdCAqY3R4IF9fdW51c2VkKQogewogCXJldHVybiAocmVhZF9zY3RscigpICYgU0NUTFJfTV9CSVQpICE9IDA7CiB9CiAKLSNpZiBQTEFUX1hMQVRfVEFCTEVTX0RZTkFNSUMKLQogdm9pZCB4bGF0X2FyY2hfdGxiaV92YSh1aW50cHRyX3QgdmEpCiB7CiAJLyoKQEAgLTQwLDYgKzQyLDE3IEBACiAJdGxiaW12YWFpcyhUTEJJX0FERFIodmEpKTsKIH0KIAordm9pZCB4bGF0X2FyY2hfdGxiaV92YV9yZWdpbWUodWludHB0cl90IHZhLCB4bGF0X3JlZ2ltZV90IHhsYXRfcmVnaW1lIF9fdW51c2VkKQoreworCS8qCisJICogRW5zdXJlIHRoZSB0cmFuc2xhdGlvbiB0YWJsZSB3cml0ZSBoYXMgZHJhaW5lZCBpbnRvIG1lbW9yeSBiZWZvcmUKKwkgKiBpbnZhbGlkYXRpbmcgdGhlIFRMQiBlbnRyeS4KKwkgKi8KKwlkc2Jpc2hzdCgpOworCisJdGxiaW12YWFpcyhUTEJJX0FERFIodmEpKTsKK30KKwogdm9pZCB4bGF0X2FyY2hfdGxiaV92YV9zeW5jKHZvaWQpCiB7CiAJLyogSW52YWxpZGF0ZSBhbGwgZW50cmllcyBmcm9tIGJyYW5jaCBwcmVkaWN0b3JzLiAqLwpAQCAtNjYsOCArNzksNiBAQAogCWlzYigpOwogfQogCi0jZW5kaWYgLyogUExBVF9YTEFUX1RBQkxFU19EWU5BTUlDICovCi0KIGludCB4bGF0X2FyY2hfY3VycmVudF9lbCh2b2lkKQogewogCS8qCkBAIC03NywxMSArODgsNiBAQAogCXJldHVybiAzOwogfQogCi11aW50NjRfdCB4bGF0X2FyY2hfZ2V0X3huX2Rlc2MoaW50IGVsIF9fdW51c2VkKQotewotCXJldHVybiBVUFBFUl9BVFRSUyhYTik7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBGdW5jdGlvbiBmb3IgZW5hYmxpbmcgdGhlIE1NVSBpbiBTZWN1cmUgUEwxLCBhc3N1bWluZyB0aGF0IHRoZSBwYWdlIHRhYmxlcwogICogaGF2ZSBhbHJlYWR5IGJlZW4gY3JlYXRlZC4KZGlmZiAtLWdpdCBhL2xpYi94bGF0X3RhYmxlc192Mi9hYXJjaDMyL3hsYXRfdGFibGVzX2FyY2hfcHJpdmF0ZS5oIGIvbGliL3hsYXRfdGFibGVzX3YyL2FhcmNoMzIveGxhdF90YWJsZXNfYXJjaF9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5Mzk1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi94bGF0X3RhYmxlc192Mi9hYXJjaDMyL3hsYXRfdGFibGVzX2FyY2hfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpZm5kZWYgX19YTEFUX1RBQkxFU19BUkNIX1BSSVZBVEVfSF9fCisjZGVmaW5lIF9fWExBVF9UQUJMRVNfQVJDSF9QUklWQVRFX0hfXworCisjaW5jbHVkZSA8eGxhdF90YWJsZXNfZGVmcy5oPgorI2luY2x1ZGUgPHhsYXRfdGFibGVzX3YyLmg+CisKKy8qCisgKiBSZXR1cm4gdGhlIGV4ZWN1dGUtbmV2ZXIgbWFzayB0aGF0IHdpbGwgcHJldmVudCBpbnN0cnVjdGlvbiBmZXRjaCBhdCB0aGUKKyAqIGdpdmVuIHRyYW5zbGF0aW9uIHJlZ2ltZS4KKyAqLworc3RhdGljIGlubGluZSB1aW50NjRfdCB4bGF0X2FyY2hfcmVnaW1lX2dldF94bl9kZXNjKHhsYXRfcmVnaW1lX3QgcmVnaW1lIF9fdW51c2VkKQoreworCXJldHVybiBVUFBFUl9BVFRSUyhYTik7Cit9CisKKyNlbmRpZiAvKiBfX1hMQVRfVEFCTEVTX0FSQ0hfUFJJVkFURV9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYi94bGF0X3RhYmxlc192Mi9hYXJjaDY0L3hsYXRfdGFibGVzX2FyY2guYyBiL2xpYi94bGF0X3RhYmxlc192Mi9hYXJjaDY0L3hsYXRfdGFibGVzX2FyY2guYwppbmRleCAwOTdlODE1Li5hYTViOWU1IDEwMDY0NAotLS0gYS9saWIveGxhdF90YWJsZXNfdjIvYWFyY2g2NC94bGF0X3RhYmxlc19hcmNoLmMKKysrIGIvbGliL3hsYXRfdGFibGVzX3YyL2FhcmNoNjQveGxhdF90YWJsZXNfYXJjaC5jCkBAIC0xMCwyMSArMTAsMTMgQEAKICNpbmNsdWRlIDxibF9jb21tb24uaD4KICNpbmNsdWRlIDxjYXNzZXJ0Lmg+CiAjaW5jbHVkZSA8Y29tbW9uX2RlZi5oPgotI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHV0aWxzLmg+CiAjaW5jbHVkZSA8dXRpbHNfZGVmLmg+CiAjaW5jbHVkZSA8eGxhdF90YWJsZXNfdjIuaD4KICNpbmNsdWRlICIuLi94bGF0X3RhYmxlc19wcml2YXRlLmgiCiAKLSNpZiBkZWZpbmVkKElNQUdFX0JMMSkgfHwgZGVmaW5lZChJTUFHRV9CTDMxKQotIyBkZWZpbmUgSU1BR0VfRUwJMwotI2Vsc2UKLSMgZGVmaW5lIElNQUdFX0VMCTEKLSNlbmRpZgotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGNhbGNfcGh5c2ljYWxfYWRkcl9zaXplX2JpdHMoCi0JCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfYWRkcikKK3Vuc2lnbmVkIGxvbmcgbG9uZyB0Y3JfcGh5c2ljYWxfYWRkcl9zaXplX2JpdHModW5zaWduZWQgbG9uZyBsb25nIG1heF9hZGRyKQogewogCS8qIFBoeXNpY2FsIGFkZHJlc3MgY2FuJ3QgZXhjZWVkIDQ4IGJpdHMgKi8KIAlhc3NlcnQoKG1heF9hZGRyICYgQUREUl9NQVNLXzQ4X1RPXzYzKSA9PSAwKTsKQEAgLTU2LDcgKzQ4LDEwIEBACiAvKiBQaHlzaWNhbCBBZGRyZXNzIHJhbmdlcyBzdXBwb3J0ZWQgaW4gdGhlIEFBcmNoNjQgTWVtb3J5IE1vZGVsICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBhX3JhbmdlX2JpdHNfYXJyW10gPSB7CiAJUEFSQU5HRV8wMDAwLCBQQVJBTkdFXzAwMDEsIFBBUkFOR0VfMDAxMCwgUEFSQU5HRV8wMDExLCBQQVJBTkdFXzAxMDAsCi0JUEFSQU5HRV8wMTAxCisJUEFSQU5HRV8wMTAxLAorI2lmIEFSTV9BUkNIX0FUX0xFQVNUKDgsIDIpCisJUEFSQU5HRV8wMTEwLAorI2VuZGlmCiB9OwogCiB1bnNpZ25lZCBsb25nIGxvbmcgeGxhdF9hcmNoX2dldF9tYXhfc3VwcG9ydGVkX3BhKHZvaWQpCkBAIC03MSwyMCArNjYsMzEgQEAKIH0KICNlbmRpZiAvKiBFTkFCTEVfQVNTRVJUSU9OUyovCiAKLWludCBpc19tbXVfZW5hYmxlZCh2b2lkKQoraW50IGlzX21tdV9lbmFibGVkX2N0eChjb25zdCB4bGF0X2N0eF90ICpjdHgpCit7CisJaWYgKGN0eC0+eGxhdF9yZWdpbWUgPT0gRUwxX0VMMF9SRUdJTUUpIHsKKwkJYXNzZXJ0KHhsYXRfYXJjaF9jdXJyZW50X2VsKCkgPj0gMSk7CisJCXJldHVybiAocmVhZF9zY3Rscl9lbDEoKSAmIFNDVExSX01fQklUKSAhPSAwOworCX0gZWxzZSB7CisJCWFzc2VydChjdHgtPnhsYXRfcmVnaW1lID09IEVMM19SRUdJTUUpOworCQlhc3NlcnQoeGxhdF9hcmNoX2N1cnJlbnRfZWwoKSA+PSAzKTsKKwkJcmV0dXJuIChyZWFkX3NjdGxyX2VsMygpICYgU0NUTFJfTV9CSVQpICE9IDA7CisJfQorfQorCisKK3ZvaWQgeGxhdF9hcmNoX3RsYmlfdmEodWludHB0cl90IHZhKQogewogI2lmIElNQUdFX0VMID09IDEKIAlhc3NlcnQoSVNfSU5fRUwoMSkpOwotCXJldHVybiAocmVhZF9zY3Rscl9lbDEoKSAmIFNDVExSX01fQklUKSAhPSAwOworCXhsYXRfYXJjaF90bGJpX3ZhX3JlZ2ltZSh2YSwgRUwxX0VMMF9SRUdJTUUpOwogI2VsaWYgSU1BR0VfRUwgPT0gMwogCWFzc2VydChJU19JTl9FTCgzKSk7Ci0JcmV0dXJuIChyZWFkX3NjdGxyX2VsMygpICYgU0NUTFJfTV9CSVQpICE9IDA7CisJeGxhdF9hcmNoX3RsYmlfdmFfcmVnaW1lKHZhLCBFTDNfUkVHSU1FKTsKICNlbmRpZgogfQogCi0jaWYgUExBVF9YTEFUX1RBQkxFU19EWU5BTUlDCi0KLXZvaWQgeGxhdF9hcmNoX3RsYmlfdmEodWludHB0cl90IHZhKQordm9pZCB4bGF0X2FyY2hfdGxiaV92YV9yZWdpbWUodWludHB0cl90IHZhLCB4bGF0X3JlZ2ltZV90IHhsYXRfcmVnaW1lKQogewogCS8qCiAJICogRW5zdXJlIHRoZSB0cmFuc2xhdGlvbiB0YWJsZSB3cml0ZSBoYXMgZHJhaW5lZCBpbnRvIG1lbW9yeSBiZWZvcmUKQEAgLTkyLDEzICs5OCwyMSBAQAogCSAqLwogCWRzYmlzaHN0KCk7CiAKLSNpZiBJTUFHRV9FTCA9PSAxCi0JYXNzZXJ0KElTX0lOX0VMKDEpKTsKLQl0bGJpdmFhZTFpcyhUTEJJX0FERFIodmEpKTsKLSNlbGlmIElNQUdFX0VMID09IDMKLQlhc3NlcnQoSVNfSU5fRUwoMykpOwotCXRsYml2YWUzaXMoVExCSV9BRERSKHZhKSk7Ci0jZW5kaWYKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBpbnZhbGlkYXRpb24gb2YgVExCIGVudHJpZXMgZm9yIHRoZSBFTDMKKwkgKiBhbmQgRUwxJjAgdHJhbnNsYXRpb24gcmVnaW1lcy4KKwkgKgorCSAqIEFsc28sIGl0IGlzIGFyY2hpdGVjdHVyYWxseSBVTkRFRklORUQgdG8gaW52YWxpZGF0ZSBUTEJzIG9mIGEgaGlnaGVyCisJICogZXhjZXB0aW9uIGxldmVsIChzZWUgc2VjdGlvbiBENC45LjIgb2YgdGhlIEFSTSBBUk0gcmV2IEIuYSkuCisJICovCisJaWYgKHhsYXRfcmVnaW1lID09IEVMMV9FTDBfUkVHSU1FKSB7CisJCWFzc2VydCh4bGF0X2FyY2hfY3VycmVudF9lbCgpID49IDEpOworCQl0bGJpdmFhZTFpcyhUTEJJX0FERFIodmEpKTsKKwl9IGVsc2UgeworCQlhc3NlcnQoeGxhdF9yZWdpbWUgPT0gRUwzX1JFR0lNRSk7CisJCWFzc2VydCh4bGF0X2FyY2hfY3VycmVudF9lbCgpID49IDMpOworCQl0bGJpdmFlM2lzKFRMQklfQUREUih2YSkpOworCX0KIH0KIAogdm9pZCB4bGF0X2FyY2hfdGxiaV92YV9zeW5jKHZvaWQpCkBAIC0xMjQsOCArMTM4LDYgQEAKIAlpc2IoKTsKIH0KIAotI2VuZGlmIC8qIFBMQVRfWExBVF9UQUJMRVNfRFlOQU1JQyAqLwotCiBpbnQgeGxhdF9hcmNoX2N1cnJlbnRfZWwodm9pZCkKIHsKIAlpbnQgZWwgPSBHRVRfRUwocmVhZF9DdXJyZW50RWwoKSk7CkBAIC0xMzUsMTYgKzE0Nyw2IEBACiAJcmV0dXJuIGVsOwogfQogCi11aW50NjRfdCB4bGF0X2FyY2hfZ2V0X3huX2Rlc2MoaW50IGVsKQotewotCWlmIChlbCA9PSAzKSB7Ci0JCXJldHVybiBVUFBFUl9BVFRSUyhYTik7Ci0JfSBlbHNlIHsKLQkJYXNzZXJ0KGVsID09IDEpOwotCQlyZXR1cm4gVVBQRVJfQVRUUlMoUFhOKTsKLQl9Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBNYWNybyBnZW5lcmF0aW5nIHRoZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24gZW5hYmxpbmcgdGhlIE1NVSBpbiB0aGUgZ2l2ZW4KICAqIGV4Y2VwdGlvbiBsZXZlbCwgYXNzdW1pbmcgdGhhdCB0aGUgcGFnZXRhYmxlcyBoYXZlIGFscmVhZHkgYmVlbiBjcmVhdGVkLgpAQCAtMjUyLDExICsyNTQsMTUgQEAKIAkgKiBJdCBpcyBzYWZlciB0byByZXN0cmljdCB0aGUgbWF4IHBoeXNpY2FsIGFkZHJlc3MgYWNjZXNzaWJsZSBieSB0aGUKIAkgKiBoYXJkd2FyZSBhcyBtdWNoIGFzIHBvc3NpYmxlLgogCSAqLwotCXVuc2lnbmVkIGxvbmcgbG9uZyB0Y3JfcHNfYml0cyA9IGNhbGNfcGh5c2ljYWxfYWRkcl9zaXplX2JpdHMobWF4X3BhKTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdGNyX3BzX2JpdHMgPSB0Y3JfcGh5c2ljYWxfYWRkcl9zaXplX2JpdHMobWF4X3BhKTsKIAogI2lmIElNQUdFX0VMID09IDEKIAlhc3NlcnQoSVNfSU5fRUwoMSkpOwotCXRjciB8PSB0Y3JfcHNfYml0cyA8PCBUQ1JfRUwxX0lQU19TSElGVDsKKwkvKgorCSAqIFRDUl9FTDEuRVBEMTogRGlzYWJsZSB0cmFuc2xhdGlvbiB0YWJsZSB3YWxrIGZvciBhZGRyZXNzZXMgdGhhdCBhcmUKKwkgKiB0cmFuc2xhdGVkIHVzaW5nIFRUQlIxX0VMMS4KKwkgKi8KKwl0Y3IgfD0gVENSX0VQRDFfQklUIHwgKHRjcl9wc19iaXRzIDw8IFRDUl9FTDFfSVBTX1NISUZUKTsKIAllbmFibGVfbW11X2ludGVybmFsX2VsMShmbGFncywgbWFpciwgdGNyLCB0dGJyKTsKICNlbGlmIElNQUdFX0VMID09IDMKIAlhc3NlcnQoSVNfSU5fRUwoMykpOwpkaWZmIC0tZ2l0IGEvbGliL3hsYXRfdGFibGVzX3YyL2FhcmNoNjQveGxhdF90YWJsZXNfYXJjaF9wcml2YXRlLmggYi9saWIveGxhdF90YWJsZXNfdjIvYWFyY2g2NC94bGF0X3RhYmxlc19hcmNoX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjAxNTkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3hsYXRfdGFibGVzX3YyL2FhcmNoNjQveGxhdF90YWJsZXNfYXJjaF9wcml2YXRlLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2lmbmRlZiBfX1hMQVRfVEFCTEVTX0FSQ0hfUFJJVkFURV9IX18KKyNkZWZpbmUgX19YTEFUX1RBQkxFU19BUkNIX1BSSVZBVEVfSF9fCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDx4bGF0X3RhYmxlc19kZWZzLmg+CisjaW5jbHVkZSA8eGxhdF90YWJsZXNfdjIuaD4KKworLyoKKyAqIFJldHVybiB0aGUgZXhlY3V0ZS1uZXZlciBtYXNrIHRoYXQgd2lsbCBwcmV2ZW50IGluc3RydWN0aW9uIGZldGNoIGF0IGFsbCBFTHMKKyAqIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHJlZ2ltZS4KKyAqLworc3RhdGljIGlubGluZSB1aW50NjRfdCB4bGF0X2FyY2hfcmVnaW1lX2dldF94bl9kZXNjKHhsYXRfcmVnaW1lX3QgcmVnaW1lKQoreworCWlmIChyZWdpbWUgPT0gRUwxX0VMMF9SRUdJTUUpIHsKKwkJcmV0dXJuIFVQUEVSX0FUVFJTKFVYTikgfCBVUFBFUl9BVFRSUyhQWE4pOworCX0gZWxzZSB7CisJCWFzc2VydChyZWdpbWUgPT0gRUwzX1JFR0lNRSk7CisJCXJldHVybiBVUFBFUl9BVFRSUyhYTik7CisJfQorfQorCisjZW5kaWYgLyogX19YTEFUX1RBQkxFU19BUkNIX1BSSVZBVEVfSF9fICovCmRpZmYgLS1naXQgYS9saWIveGxhdF90YWJsZXNfdjIveGxhdF90YWJsZXMubWsgYi9saWIveGxhdF90YWJsZXNfdjIveGxhdF90YWJsZXMubWsKaW5kZXggYjk0Y2U1ZC4uMDZkZDg0NCAxMDA2NDQKLS0tIGEvbGliL3hsYXRfdGFibGVzX3YyL3hsYXRfdGFibGVzLm1rCisrKyBiL2xpYi94bGF0X3RhYmxlc192Mi94bGF0X3RhYmxlcy5tawpAQCAtNywzICs3LDUgQEAKIFhMQVRfVEFCTEVTX0xJQl9TUkNTCTo9CSQoYWRkcHJlZml4IGxpYi94bGF0X3RhYmxlc192Mi8sCVwKIAkJCQkke0FSQ0h9L3hsYXRfdGFibGVzX2FyY2guYwkJXAogCQkJCXhsYXRfdGFibGVzX2ludGVybmFsLmMpCisKK0lOQ0xVREVTCQkrPQktSWxpYi94bGF0X3RhYmxlc192Mi8ke0FSQ0h9CmRpZmYgLS1naXQgYS9saWIveGxhdF90YWJsZXNfdjIveGxhdF90YWJsZXNfaW50ZXJuYWwuYyBiL2xpYi94bGF0X3RhYmxlc192Mi94bGF0X3RhYmxlc19pbnRlcm5hbC5jCmluZGV4IDQ3OTI5OTAuLjBhY2ZhY2IgMTAwNjQ0Ci0tLSBhL2xpYi94bGF0X3RhYmxlc192Mi94bGF0X3RhYmxlc19pbnRlcm5hbC5jCisrKyBiL2xpYi94bGF0X3RhYmxlc192Mi94bGF0X3RhYmxlc19pbnRlcm5hbC5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dHlwZXMuaD4KICNpbmNsdWRlIDx1dGlscy5oPgotI2luY2x1ZGUgPHhsYXRfdGFibGVzX2FyY2guaD4KKyNpbmNsdWRlIDx4bGF0X3RhYmxlc19hcmNoX3ByaXZhdGUuaD4KICNpbmNsdWRlIDx4bGF0X3RhYmxlc19kZWZzLmg+CiAjaW5jbHVkZSA8eGxhdF90YWJsZXNfdjIuaD4KIApAQCAtMTEyLDkgKzExMiwxMSBAQAogCiAjZW5kaWYgLyogUExBVF9YTEFUX1RBQkxFU19EWU5BTUlDICovCiAKLS8qIFJldHVybnMgYSBibG9jay9wYWdlIHRhYmxlIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlbiBsZXZlbCBhbmQgYXR0cmlidXRlcy4gKi8KLXN0YXRpYyB1aW50NjRfdCB4bGF0X2Rlc2MobW1hcF9hdHRyX3QgYXR0ciwgdW5zaWduZWQgbG9uZyBsb25nIGFkZHJfcGEsCi0JCQkgIGludCBsZXZlbCwgdWludDY0X3QgZXhlY3V0ZV9uZXZlcl9tYXNrKQorLyoKKyAqIFJldHVybnMgYSBibG9jay9wYWdlIHRhYmxlIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlbiBsZXZlbCBhbmQgYXR0cmlidXRlcy4KKyAqLwordWludDY0X3QgeGxhdF9kZXNjKGNvbnN0IHhsYXRfY3R4X3QgKmN0eCwgbW1hcF9hdHRyX3QgYXR0ciwKKwkJICAgdW5zaWduZWQgbG9uZyBsb25nIGFkZHJfcGEsIGludCBsZXZlbCkKIHsKIAl1aW50NjRfdCBkZXNjOwogCWludCBtZW1fdHlwZTsKQEAgLTEzMyw5ICsxMzUsMjggQEAKIAkgKiBEZWR1Y2Ugb3RoZXIgZmllbGRzIG9mIHRoZSBkZXNjcmlwdG9yIGJhc2VkIG9uIHRoZSBNVF9OUyBhbmQgTVRfUlcKIAkgKiBtZW1vcnkgcmVnaW9uIGF0dHJpYnV0ZXMuCiAJICovCisJZGVzYyB8PSBMT1dFUl9BVFRSUyhBQ0NFU1NfRkxBRyk7CisKIAlkZXNjIHw9IChhdHRyICYgTVRfTlMpID8gTE9XRVJfQVRUUlMoTlMpIDogMDsKIAlkZXNjIHw9IChhdHRyICYgTVRfUlcpID8gTE9XRVJfQVRUUlMoQVBfUlcpIDogTE9XRVJfQVRUUlMoQVBfUk8pOwotCWRlc2MgfD0gTE9XRVJfQVRUUlMoQUNDRVNTX0ZMQUcpOworCisJLyoKKwkgKiBEbyBub3QgYWxsb3cgdW5wcml2aWxlZ2VkIGFjY2VzcyB3aGVuIHRoZSBtYXBwaW5nIGlzIGZvciBhIHByaXZpbGVnZWQKKwkgKiBFTC4gRm9yIHRyYW5zbGF0aW9uIHJlZ2ltZXMgdGhhdCBkbyBub3QgaGF2ZSBtYXBwaW5ncyBmb3IgYWNjZXNzIGZvcgorCSAqIGxvd2VyIGV4Y2VwdGlvbiBsZXZlbHMsIHNldCBBUFsyXSB0byBBUF9OT19BQ0NFU1NfVU5QUklWSUxFR0VELgorCSAqLworCWlmIChjdHgtPnhsYXRfcmVnaW1lID09IEVMMV9FTDBfUkVHSU1FKSB7CisJCWlmIChhdHRyICYgTVRfVVNFUikgeworCQkJLyogRUwwIG1hcHBpbmcgcmVxdWVzdGVkLCBzbyB3ZSBnaXZlIFVzZXIgYWNjZXNzICovCisJCQlkZXNjIHw9IExPV0VSX0FUVFJTKEFQX0FDQ0VTU19VTlBSSVZJTEVHRUQpOworCQl9IGVsc2UgeworCQkJLyogRUwxIG1hcHBpbmcgcmVxdWVzdGVkLCBubyBVc2VyIGFjY2VzcyBncmFudGVkICovCisJCQlkZXNjIHw9IExPV0VSX0FUVFJTKEFQX05PX0FDQ0VTU19VTlBSSVZJTEVHRUQpOworCQl9CisJfSBlbHNlIHsKKwkJYXNzZXJ0KGN0eC0+eGxhdF9yZWdpbWUgPT0gRUwzX1JFR0lNRSk7CisJCWRlc2MgfD0gTE9XRVJfQVRUUlMoQVBfTk9fQUNDRVNTX1VOUFJJVklMRUdFRCk7CisJfQogCiAJLyoKIAkgKiBEZWR1Y2Ugc2hhcmVhYmlsaXR5IGRvbWFpbiBhbmQgZXhlY3V0YWJpbGl0eSBvZiB0aGUgbWVtb3J5IHJlZ2lvbgpAQCAtMTU2LDcgKzE3Nyw3IEBACiAJCSAqIGZldGNoLCB3aGljaCBjb3VsZCBiZSBhbiBpc3N1ZSBpZiB0aGlzIG1lbW9yeSByZWdpb24KIAkJICogY29ycmVzcG9uZHMgdG8gYSByZWFkLXNlbnNpdGl2ZSBwZXJpcGhlcmFsLgogCQkgKi8KLQkJZGVzYyB8PSBleGVjdXRlX25ldmVyX21hc2s7CisJCWRlc2MgfD0geGxhdF9hcmNoX3JlZ2ltZV9nZXRfeG5fZGVzYyhjdHgtPnhsYXRfcmVnaW1lKTsKIAogCX0gZWxzZSB7IC8qIE5vcm1hbCBtZW1vcnkgKi8KIAkJLyoKQEAgLTE3MSwxMCArMTkyLDEzIEBACiAJCSAqIHRyYW5zbGF0aW9uIHRhYmxlLgogCQkgKgogCQkgKiBGb3IgcmVhZC1vbmx5IG1lbW9yeSwgcmVseSBvbiB0aGUgTVRfRVhFQ1VURS9NVF9FWEVDVVRFX05FVkVSCi0JCSAqIGF0dHJpYnV0ZSB0byBmaWd1cmUgb3V0IHRoZSB2YWx1ZSBvZiB0aGUgWE4gYml0LgorCQkgKiBhdHRyaWJ1dGUgdG8gZmlndXJlIG91dCB0aGUgdmFsdWUgb2YgdGhlIFhOIGJpdC4gIFRoZSBhY3R1YWwKKwkJICogWE4gYml0KHMpIHRvIHNldCBpbiB0aGUgZGVzY3JpcHRvciBkZXBlbmRzIG9uIHRoZSBjb250ZXh0J3MKKwkJICogdHJhbnNsYXRpb24gcmVnaW1lIGFuZCB0aGUgcG9saWN5IGFwcGxpZWQgaW4KKwkJICogeGxhdF9hcmNoX3JlZ2ltZV9nZXRfeG5fZGVzYygpLgogCQkgKi8KIAkJaWYgKChhdHRyICYgTVRfUlcpIHx8IChhdHRyICYgTVRfRVhFQ1VURV9ORVZFUikpIHsKLQkJCWRlc2MgfD0gZXhlY3V0ZV9uZXZlcl9tYXNrOworCQkJZGVzYyB8PSB4bGF0X2FyY2hfcmVnaW1lX2dldF94bl9kZXNjKGN0eC0+eGxhdF9yZWdpbWUpOwogCQl9CiAKIAkJaWYgKG1lbV90eXBlID09IE1UX01FTU9SWSkgewpAQCAtMzE0LDcgKzMzOCw3IEBACiAJCWlmIChhY3Rpb24gPT0gQUNUSU9OX1dSSVRFX0JMT0NLX0VOVFJZKSB7CiAKIAkJCXRhYmxlX2Jhc2VbdGFibGVfaWR4XSA9IElOVkFMSURfREVTQzsKLQkJCXhsYXRfYXJjaF90bGJpX3ZhKHRhYmxlX2lkeF92YSk7CisJCQl4bGF0X2FyY2hfdGxiaV92YV9yZWdpbWUodGFibGVfaWR4X3ZhLCBjdHgtPnhsYXRfcmVnaW1lKTsKIAogCQl9IGVsc2UgaWYgKGFjdGlvbiA9PSBBQ1RJT05fUkVDVVJTRV9JTlRPX1RBQkxFKSB7CiAKQEAgLTMzMCw3ICszNTQsOCBAQAogCQkJICovCiAJCQlpZiAoeGxhdF90YWJsZV9pc19lbXB0eShjdHgsIHN1YnRhYmxlKSkgewogCQkJCXRhYmxlX2Jhc2VbdGFibGVfaWR4XSA9IElOVkFMSURfREVTQzsKLQkJCQl4bGF0X2FyY2hfdGxiaV92YSh0YWJsZV9pZHhfdmEpOworCQkJCXhsYXRfYXJjaF90bGJpX3ZhX3JlZ2ltZSh0YWJsZV9pZHhfdmEsCisJCQkJCQljdHgtPnhsYXRfcmVnaW1lKTsKIAkJCX0KIAogCQl9IGVsc2UgewpAQCAtNDE3LDcgKzQ0Miw4IEBACiAJCQkJICogZGVzY3JpcHRvcnMuIElmIG5vdCwgY3JlYXRlIGEgdGFibGUgaW5zdGVhZC4KIAkJCQkgKi8KIAkJCQlpZiAoKGRlc3RfcGEgJiBYTEFUX0JMT0NLX01BU0sobGV2ZWwpKSB8fAotCQkJCSAgICAobGV2ZWwgPCBNSU5fTFZMX0JMT0NLX0RFU0MpKQorCQkJCSAgICAobGV2ZWwgPCBNSU5fTFZMX0JMT0NLX0RFU0MpIHx8CisJCQkJICAgIChtbS0+Z3JhbnVsYXJpdHkgPCBYTEFUX0JMT0NLX1NJWkUobGV2ZWwpKSkKIAkJCQkJcmV0dXJuIEFDVElPTl9DUkVBVEVfTkVXX1RBQkxFOwogCQkJCWVsc2UKIAkJCQkJcmV0dXJuIEFDVElPTl9XUklURV9CTE9DS19FTlRSWTsKQEAgLTUzNSw4ICs1NjEsNyBAQAogCQlpZiAoYWN0aW9uID09IEFDVElPTl9XUklURV9CTE9DS19FTlRSWSkgewogCiAJCQl0YWJsZV9iYXNlW3RhYmxlX2lkeF0gPQotCQkJCXhsYXRfZGVzYyhtbS0+YXR0ciwgdGFibGVfaWR4X3BhLCBsZXZlbCwKLQkJCQkJICBjdHgtPmV4ZWN1dGVfbmV2ZXJfbWFzayk7CisJCQkJeGxhdF9kZXNjKGN0eCwgbW0tPmF0dHIsIHRhYmxlX2lkeF9wYSwgbGV2ZWwpOwogCiAJCX0gZWxzZSBpZiAoYWN0aW9uID09IEFDVElPTl9DUkVBVEVfTkVXX1RBQkxFKSB7CiAKQEAgLTU5MCw5ICs2MTUsMTAgQEAKIAltbWFwX3JlZ2lvbl90ICptbSA9IG1tYXA7CiAKIAl3aGlsZSAobW0tPnNpemUpIHsKLQkJdGZfcHJpbnRmKCIgVkE6JXAgIFBBOjB4JWxseCAgc2l6ZToweCV6eCAgYXR0cjoweCV4XG4iLAorCQl0Zl9wcmludGYoIiBWQTolcCAgUEE6MHglbGx4ICBzaXplOjB4JXp4ICBhdHRyOjB4JXgiLAogCQkJCSh2b2lkICopbW0tPmJhc2VfdmEsIG1tLT5iYXNlX3BhLAogCQkJCW1tLT5zaXplLCBtbS0+YXR0cik7CisJCXRmX3ByaW50ZigiIGdyYW51bGFyaXR5OjB4JXp4XG4iLCBtbS0+Z3JhbnVsYXJpdHkpOwogCQkrK21tOwogCX07CiAJdGZfcHJpbnRmKCJcbiIpOwpAQCAtNjA4LDExICs2MzQsMTMgQEAKICAqICAgRU5PTUVNOiBUaGVyZSBpcyBub3QgZW5vdWdoIG1lbW9yeSBpbiB0aGUgbW1hcCBhcnJheS4KICAqICAgIEVQRVJNOiBSZWdpb24gb3ZlcmxhcHMgYW5vdGhlciBvbmUgaW4gYW4gaW52YWxpZCB3YXkuCiAgKi8KLXN0YXRpYyBpbnQgbW1hcF9hZGRfcmVnaW9uX2NoZWNrKHhsYXRfY3R4X3QgKmN0eCwgdW5zaWduZWQgbG9uZyBsb25nIGJhc2VfcGEsCi0JCQkJIHVpbnRwdHJfdCBiYXNlX3ZhLCBzaXplX3Qgc2l6ZSwKLQkJCQkgbW1hcF9hdHRyX3QgYXR0cikKK3N0YXRpYyBpbnQgbW1hcF9hZGRfcmVnaW9uX2NoZWNrKHhsYXRfY3R4X3QgKmN0eCwgY29uc3QgbW1hcF9yZWdpb25fdCAqbW0pCiB7Ci0JbW1hcF9yZWdpb25fdCAqbW0gPSBjdHgtPm1tYXA7CisJdW5zaWduZWQgbG9uZyBsb25nIGJhc2VfcGEgPSBtbS0+YmFzZV9wYTsKKwl1aW50cHRyX3QgYmFzZV92YSA9IG1tLT5iYXNlX3ZhOworCXNpemVfdCBzaXplID0gbW0tPnNpemU7CisJc2l6ZV90IGdyYW51bGFyaXR5ID0gbW0tPmdyYW51bGFyaXR5OworCiAJdW5zaWduZWQgbG9uZyBsb25nIGVuZF9wYSA9IGJhc2VfcGEgKyBzaXplIC0gMTsKIAl1aW50cHRyX3QgZW5kX3ZhID0gYmFzZV92YSArIHNpemUgLSAxOwogCkBAIC02MjAsNiArNjQ4LDEyIEBACiAJCQkhSVNfUEFHRV9BTElHTkVEKHNpemUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICgoZ3JhbnVsYXJpdHkgIT0gWExBVF9CTE9DS19TSVpFKDEpKSAmJgorCQkoZ3JhbnVsYXJpdHkgIT0gWExBVF9CTE9DS19TSVpFKDIpKSAmJgorCQkoZ3JhbnVsYXJpdHkgIT0gWExBVF9CTE9DS19TSVpFKDMpKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiBDaGVjayBmb3Igb3ZlcmZsb3dzICovCiAJaWYgKChiYXNlX3BhID4gZW5kX3BhKSB8fCAoYmFzZV92YSA+IGVuZF92YSkpCiAJCXJldHVybiAtRVJBTkdFOwpAQCAtNjMwLDIyICs2NjQsMjcgQEAKIAlpZiAoKGJhc2VfcGEgKyAodW5zaWduZWQgbG9uZyBsb25nKXNpemUgLSAxVUxMKSA+IGN0eC0+cGFfbWF4X2FkZHJlc3MpCiAJCXJldHVybiAtRVJBTkdFOwogCi0JLyogQ2hlY2sgdGhhdCB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgbW1hcCBhcnJheSAqLworCS8qIENoZWNrIHRoYXQgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIGN0eC0+bW1hcCBhcnJheSAqLwogCWlmIChjdHgtPm1tYXBbY3R4LT5tbWFwX251bSAtIDFdLnNpemUgIT0gMCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBDaGVjayBmb3IgUEFzIGFuZCBWQXMgb3ZlcmxhcHMgd2l0aCBhbGwgb3RoZXIgcmVnaW9ucyAqLwotCWZvciAobW0gPSBjdHgtPm1tYXA7IG1tLT5zaXplOyArK21tKSB7CisJZm9yIChtbWFwX3JlZ2lvbl90ICptbV9jdXJzb3IgPSBjdHgtPm1tYXA7CisJCQkJCQltbV9jdXJzb3ItPnNpemU7ICsrbW1fY3Vyc29yKSB7CiAKLQkJdWludHB0cl90IG1tX2VuZF92YSA9IG1tLT5iYXNlX3ZhICsgbW0tPnNpemUgLSAxOworCQl1aW50cHRyX3QgbW1fY3Vyc29yX2VuZF92YSA9IG1tX2N1cnNvci0+YmFzZV92YQorCQkJCQkJCSsgbW1fY3Vyc29yLT5zaXplIC0gMTsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBvbmUgb2YgdGhlIHJlZ2lvbnMgaXMgY29tcGxldGVseSBpbnNpZGUgdGhlIG90aGVyCiAJCSAqIG9uZS4KIAkJICovCiAJCWludCBmdWxseV9vdmVybGFwcGVkX3ZhID0KLQkJCSgoYmFzZV92YSA+PSBtbS0+YmFzZV92YSkgJiYgKGVuZF92YSA8PSBtbV9lbmRfdmEpKSB8fAotCQkJKChtbS0+YmFzZV92YSA+PSBiYXNlX3ZhKSAmJiAobW1fZW5kX3ZhIDw9IGVuZF92YSkpOworCQkJKChiYXNlX3ZhID49IG1tX2N1cnNvci0+YmFzZV92YSkgJiYKKwkJCQkJKGVuZF92YSA8PSBtbV9jdXJzb3JfZW5kX3ZhKSkgfHwKKworCQkJKChtbV9jdXJzb3ItPmJhc2VfdmEgPj0gYmFzZV92YSkgJiYKKwkJCQkJCShtbV9jdXJzb3JfZW5kX3ZhIDw9IGVuZF92YSkpOwogCiAJCS8qCiAJCSAqIEZ1bGwgVkEgb3ZlcmxhcHMgYXJlIG9ubHkgYWxsb3dlZCBpZiBib3RoIHJlZ2lvbnMgYXJlCkBAIC02NTYsMTMgKzY5NSwxNiBAQAogCQlpZiAoZnVsbHlfb3ZlcmxhcHBlZF92YSkgewogCiAjaWYgUExBVF9YTEFUX1RBQkxFU19EWU5BTUlDCi0JCQlpZiAoKGF0dHIgJiBNVF9EWU5BTUlDKSB8fCAobW0tPmF0dHIgJiBNVF9EWU5BTUlDKSkKKwkJCWlmICgobW0tPmF0dHIgJiBNVF9EWU5BTUlDKSB8fAorCQkJCQkJKG1tX2N1cnNvci0+YXR0ciAmIE1UX0RZTkFNSUMpKQogCQkJCXJldHVybiAtRVBFUk07CiAjZW5kaWYgLyogUExBVF9YTEFUX1RBQkxFU19EWU5BTUlDICovCi0JCQlpZiAoKG1tLT5iYXNlX3ZhIC0gbW0tPmJhc2VfcGEpICE9IChiYXNlX3ZhIC0gYmFzZV9wYSkpCisJCQlpZiAoKG1tX2N1cnNvci0+YmFzZV92YSAtIG1tX2N1cnNvci0+YmFzZV9wYSkgIT0KKwkJCQkJCQkoYmFzZV92YSAtIGJhc2VfcGEpKQogCQkJCXJldHVybiAtRVBFUk07CiAKLQkJCWlmICgoYmFzZV92YSA9PSBtbS0+YmFzZV92YSkgJiYgKHNpemUgPT0gbW0tPnNpemUpKQorCQkJaWYgKChiYXNlX3ZhID09IG1tX2N1cnNvci0+YmFzZV92YSkgJiYKKwkJCQkJCShzaXplID09IG1tX2N1cnNvci0+c2l6ZSkpCiAJCQkJcmV0dXJuIC1FUEVSTTsKIAogCQl9IGVsc2UgewpAQCAtNjcyLDEzICs3MTQsMTUgQEAKIAkJCSAqIFBhcnRpYWwgb3ZlcmxhcHMgYXJlIG5vdCBhbGxvd2VkCiAJCQkgKi8KIAotCQkJdW5zaWduZWQgbG9uZyBsb25nIG1tX2VuZF9wYSA9Ci0JCQkJCQkgICAgIG1tLT5iYXNlX3BhICsgbW0tPnNpemUgLSAxOworCQkJdW5zaWduZWQgbG9uZyBsb25nIG1tX2N1cnNvcl9lbmRfcGEgPQorCQkJCSAgICAgbW1fY3Vyc29yLT5iYXNlX3BhICsgbW1fY3Vyc29yLT5zaXplIC0gMTsKIAogCQkJaW50IHNlcGFyYXRlZF9wYSA9Ci0JCQkJKGVuZF9wYSA8IG1tLT5iYXNlX3BhKSB8fCAoYmFzZV9wYSA+IG1tX2VuZF9wYSk7CisJCQkJKGVuZF9wYSA8IG1tX2N1cnNvci0+YmFzZV9wYSkgfHwKKwkJCQkoYmFzZV9wYSA+IG1tX2N1cnNvcl9lbmRfcGEpOwogCQkJaW50IHNlcGFyYXRlZF92YSA9Ci0JCQkJKGVuZF92YSA8IG1tLT5iYXNlX3ZhKSB8fCAoYmFzZV92YSA+IG1tX2VuZF92YSk7CisJCQkJKGVuZF92YSA8IG1tX2N1cnNvci0+YmFzZV92YSkgfHwKKwkJCQkoYmFzZV92YSA+IG1tX2N1cnNvcl9lbmRfdmEpOwogCiAJCQlpZiAoIShzZXBhcmF0ZWRfdmEgJiYgc2VwYXJhdGVkX3BhKSkKIAkJCQlyZXR1cm4gLUVQRVJNOwpAQCAtNzAzLDggKzc0Nyw3IEBACiAJLyogU3RhdGljIHJlZ2lvbnMgbXVzdCBiZSBhZGRlZCBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSB4bGF0IHRhYmxlcy4gKi8KIAlhc3NlcnQoIWN0eC0+aW5pdGlhbGl6ZWQpOwogCi0JcmV0ID0gbW1hcF9hZGRfcmVnaW9uX2NoZWNrKGN0eCwgbW0tPmJhc2VfcGEsIG1tLT5iYXNlX3ZhLCBtbS0+c2l6ZSwKLQkJCQkgICAgbW0tPmF0dHIpOworCXJldCA9IG1tYXBfYWRkX3JlZ2lvbl9jaGVjayhjdHgsIG1tKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJRVJST1IoIm1tYXBfYWRkX3JlZ2lvbl9jaGVjaygpIGZhaWxlZC4gZXJyb3IgJWRcbiIsIHJldCk7CiAJCWFzc2VydCgwKTsKQEAgLTc5OSw3ICs4NDIsMTAgQEAKIAlpZiAoIW1tLT5zaXplKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IG1tYXBfYWRkX3JlZ2lvbl9jaGVjayhjdHgsIG1tLT5iYXNlX3BhLCBtbS0+YmFzZV92YSwgbW0tPnNpemUsIG1tLT5hdHRyIHwgTVRfRFlOQU1JQyk7CisJLyogTm93IHRoaXMgcmVnaW9uIGlzIGEgZHluYW1pYyBvbmUgKi8KKwltbS0+YXR0ciB8PSBNVF9EWU5BTUlDOworCisJcmV0ID0gbW1hcF9hZGRfcmVnaW9uX2NoZWNrKGN0eCwgbW0pOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtODA4LDE0ICs4NTQsMTcgQEAKIAkgKiBzdGF0aWMgcmVnaW9ucyBpbiBtbWFwX2FkZF9yZWdpb25fY3R4KCkuCiAJICovCiAKLQl3aGlsZSAoKG1tX2N1cnNvci0+YmFzZV92YSArIG1tX2N1cnNvci0+c2l6ZSAtIDEpIDwgZW5kX3ZhICYmIG1tX2N1cnNvci0+c2l6ZSkKKwl3aGlsZSAoKG1tX2N1cnNvci0+YmFzZV92YSArIG1tX2N1cnNvci0+c2l6ZSAtIDEpCisJCQkJCTwgZW5kX3ZhICYmIG1tX2N1cnNvci0+c2l6ZSkKIAkJKyttbV9jdXJzb3I7CiAKLQl3aGlsZSAoKG1tX2N1cnNvci0+YmFzZV92YSArIG1tX2N1cnNvci0+c2l6ZSAtIDEgPT0gZW5kX3ZhKSAmJiAobW1fY3Vyc29yLT5zaXplIDwgbW0tPnNpemUpKQorCXdoaWxlICgobW1fY3Vyc29yLT5iYXNlX3ZhICsgbW1fY3Vyc29yLT5zaXplIC0gMSA9PSBlbmRfdmEpCisJCQkJJiYgKG1tX2N1cnNvci0+c2l6ZSA8IG1tLT5zaXplKSkKIAkJKyttbV9jdXJzb3I7CiAKIAkvKiBNYWtlIHJvb20gZm9yIG5ldyByZWdpb24gYnkgbW92aW5nIG90aGVyIHJlZ2lvbnMgdXAgYnkgb25lIHBsYWNlICovCi0JbWVtbW92ZShtbV9jdXJzb3IgKyAxLCBtbV9jdXJzb3IsICh1aW50cHRyX3QpbW1fbGFzdCAtICh1aW50cHRyX3QpbW1fY3Vyc29yKTsKKwltZW1tb3ZlKG1tX2N1cnNvciArIDEsIG1tX2N1cnNvciwKKwkJICAgICAodWludHB0cl90KW1tX2xhc3QgLSAodWludHB0cl90KW1tX2N1cnNvcik7CiAKIAkvKgogCSAqIENoZWNrIHdlIGhhdmVuJ3QgbG9zdCB0aGUgZW1wdHkgc2VudGluYWwgZnJvbSB0aGUgZW5kIG9mIHRoZSBhcnJheS4KQEAgLTgyNSwxOSArODc0LDIwIEBACiAJYXNzZXJ0KG1tX2xhc3QtPnNpemUgPT0gMCk7CiAKIAkqbW1fY3Vyc29yID0gKm1tOwotCW1tX2N1cnNvci0+YXR0ciB8PSBNVF9EWU5BTUlDOwogCiAJLyoKIAkgKiBVcGRhdGUgdGhlIHRyYW5zbGF0aW9uIHRhYmxlcyBpZiB0aGUgeGxhdCB0YWJsZXMgYXJlIGluaXRpYWxpemVkLiBJZgogCSAqIG5vdCwgdGhpcyByZWdpb24gd2lsbCBiZSBtYXBwZWQgd2hlbiB0aGV5IGFyZSBpbml0aWFsaXplZC4KIAkgKi8KIAlpZiAoY3R4LT5pbml0aWFsaXplZCkgewotCQl1aW50cHRyX3QgZW5kX3ZhID0geGxhdF90YWJsZXNfbWFwX3JlZ2lvbihjdHgsIG1tX2N1cnNvciwgMCwgY3R4LT5iYXNlX3RhYmxlLAotCQkJCWN0eC0+YmFzZV90YWJsZV9lbnRyaWVzLCBjdHgtPmJhc2VfbGV2ZWwpOworCQl1aW50cHRyX3QgZW5kX3ZhID0geGxhdF90YWJsZXNfbWFwX3JlZ2lvbihjdHgsIG1tX2N1cnNvciwKKwkJCQkwLCBjdHgtPmJhc2VfdGFibGUsIGN0eC0+YmFzZV90YWJsZV9lbnRyaWVzLAorCQkJCWN0eC0+YmFzZV9sZXZlbCk7CiAKIAkJLyogRmFpbGVkIHRvIG1hcCwgcmVtb3ZlIG1tYXAgZW50cnksIHVubWFwIGFuZCByZXR1cm4gZXJyb3IuICovCiAJCWlmIChlbmRfdmEgIT0gbW1fY3Vyc29yLT5iYXNlX3ZhICsgbW1fY3Vyc29yLT5zaXplIC0gMSkgewotCQkJbWVtbW92ZShtbV9jdXJzb3IsIG1tX2N1cnNvciArIDEsICh1aW50cHRyX3QpbW1fbGFzdCAtICh1aW50cHRyX3QpbW1fY3Vyc29yKTsKKwkJCW1lbW1vdmUobW1fY3Vyc29yLCBtbV9jdXJzb3IgKyAxLAorCQkJCSh1aW50cHRyX3QpbW1fbGFzdCAtICh1aW50cHRyX3QpbW1fY3Vyc29yKTsKIAogCQkJLyoKIAkJCSAqIENoZWNrIGlmIHRoZSBtYXBwaW5nIGZ1bmN0aW9uIGFjdHVhbGx5IG1hbmFnZWQgdG8gbWFwCkBAIC04NDcsOCArODk3LDggQEAKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAogCQkJLyoKLQkJCSAqIFNvbWV0aGluZyB3ZW50IHdyb25nIGFmdGVyIG1hcHBpbmcgc29tZSB0YWJsZSBlbnRyaWVzLAotCQkJICogdW5kbyBldmVyeSBjaGFuZ2UgZG9uZSB1cCB0byB0aGlzIHBvaW50LgorCQkJICogU29tZXRoaW5nIHdlbnQgd3JvbmcgYWZ0ZXIgbWFwcGluZyBzb21lIHRhYmxlCisJCQkgKiBlbnRyaWVzLCB1bmRvIGV2ZXJ5IGNoYW5nZSBkb25lIHVwIHRvIHRoaXMgcG9pbnQuCiAJCQkgKi8KIAkJCW1tYXBfcmVnaW9uX3QgdW5tYXBfbW0gPSB7CiAJCQkJCS5iYXNlX3BhID0gMCwKQEAgLTk3Miw5ICsxMDIyLDEwIEBACiAjaWYgTE9HX0xFVkVMID49IExPR19MRVZFTF9WRVJCT1NFCiAKIC8qIFByaW50IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBzcGVjaWZpZWQgYmxvY2sgZGVzY3JpcHRvci4gKi8KLXN0YXRpYyB2b2lkIHhsYXRfZGVzY19wcmludCh1aW50NjRfdCBkZXNjLCB1aW50NjRfdCBleGVjdXRlX25ldmVyX21hc2spCitzdGF0aWMgdm9pZCB4bGF0X2Rlc2NfcHJpbnQoY29uc3QgeGxhdF9jdHhfdCAqY3R4LCB1aW50NjRfdCBkZXNjKQogewogCWludCBtZW1fdHlwZV9pbmRleCA9IEFUVFJfSU5ERVhfR0VUKGRlc2MpOworCXhsYXRfcmVnaW1lX3QgeGxhdF9yZWdpbWUgPSBjdHgtPnhsYXRfcmVnaW1lOwogCiAJaWYgKG1lbV90eXBlX2luZGV4ID09IEFUVFJfSVdCV0FfT1dCV0FfTlRSX0lOREVYKSB7CiAJCXRmX3ByaW50ZigiTUVNIik7CkBAIC05ODUsOSArMTAzNiw0OSBAQAogCQl0Zl9wcmludGYoIkRFViIpOwogCX0KIAotCXRmX3ByaW50ZihMT1dFUl9BVFRSUyhBUF9STykgJiBkZXNjID8gIi1STyIgOiAiLVJXIik7CisJY29uc3QgY2hhciAqcHJpdl9zdHIgPSAiKFBSSVYpIjsKKwljb25zdCBjaGFyICp1c2VyX3N0ciA9ICIoVVNFUikiOworCisJLyoKKwkgKiBTaG93aW5nIFByaXZpbGVnZWQgdnMgVW5wcml2aWxlZ2VkIG9ubHkgbWFrZXMgc2Vuc2UgZm9yIEVMMSYwCisJICogbWFwcGluZ3MKKwkgKi8KKwljb25zdCBjaGFyICpyb19zdHIgPSAiLVJPIjsKKwljb25zdCBjaGFyICpyd19zdHIgPSAiLVJXIjsKKwljb25zdCBjaGFyICpub19hY2Nlc3Nfc3RyID0gIi1OT0FDQ0VTUyI7CisKKwlpZiAoeGxhdF9yZWdpbWUgPT0gRUwzX1JFR0lNRSkgeworCQkvKiBGb3IgRUwzLCB0aGUgQVBbMl0gYml0IGlzIGFsbCB3aGF0IG1hdHRlcnMgKi8KKwkJdGZfcHJpbnRmKChkZXNjICYgTE9XRVJfQVRUUlMoQVBfUk8pKSA/IHJvX3N0ciA6IHJ3X3N0cik7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqYXBfc3RyID0gKGRlc2MgJiBMT1dFUl9BVFRSUyhBUF9STykpID8gcm9fc3RyIDogcndfc3RyOworCQl0Zl9wcmludGYoYXBfc3RyKTsKKwkJdGZfcHJpbnRmKHByaXZfc3RyKTsKKwkJLyoKKwkJICogRUwwIGNhbiBvbmx5IGhhdmUgdGhlIHNhbWUgcGVybWlzc2lvbnMgYXMgRUwxIG9yIG5vCisJCSAqIHBlcm1pc3Npb25zIGF0IGFsbC4KKwkJICovCisJCXRmX3ByaW50ZigoZGVzYyAmIExPV0VSX0FUVFJTKEFQX0FDQ0VTU19VTlBSSVZJTEVHRUQpKQorCQkJICA/IGFwX3N0ciA6IG5vX2FjY2Vzc19zdHIpOworCQl0Zl9wcmludGYodXNlcl9zdHIpOworCX0KKworCWNvbnN0IGNoYXIgKnhuX3N0ciA9ICItWE4iOworCWNvbnN0IGNoYXIgKmV4ZWNfc3RyID0gIi1FWEVDIjsKKworCWlmICh4bGF0X3JlZ2ltZSA9PSBFTDNfUkVHSU1FKSB7CisJCS8qIEZvciBFTDMsIHRoZSBYTiBiaXQgaXMgYWxsIHdoYXQgbWF0dGVycyAqLworCQl0Zl9wcmludGYoTE9XRVJfQVRUUlMoWE4pICYgZGVzYyA/IHhuX3N0ciA6IGV4ZWNfc3RyKTsKKwl9IGVsc2UgeworCQkvKiBGb3IgRUwwIGFuZCBFTDEsIHdlIG5lZWQgdG8ga25vdyB3aG8gaGFzIHdoaWNoIHJpZ2h0cyAqLworCQl0Zl9wcmludGYoTE9XRVJfQVRUUlMoUFhOKSAmIGRlc2MgPyB4bl9zdHIgOiBleGVjX3N0cik7CisJCXRmX3ByaW50Zihwcml2X3N0cik7CisKKwkJdGZfcHJpbnRmKExPV0VSX0FUVFJTKFVYTikgJiBkZXNjID8geG5fc3RyIDogZXhlY19zdHIpOworCQl0Zl9wcmludGYodXNlcl9zdHIpOworCX0KKwogCXRmX3ByaW50ZihMT1dFUl9BVFRSUyhOUykgJiBkZXNjID8gIi1OUyIgOiAiLVMiKTsKLQl0Zl9wcmludGYoZXhlY3V0ZV9uZXZlcl9tYXNrICYgZGVzYyA/ICItWE4iIDogIi1FWEVDIik7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbGV2ZWxfc3BhY2Vyc1tdID0gewpAQCAtMTAwNCw5ICsxMDk1LDEwIEBACiAgKiBSZWN1cnNpdmUgZnVuY3Rpb24gdGhhdCByZWFkcyB0aGUgdHJhbnNsYXRpb24gdGFibGVzIHBhc3NlZCBhcyBhbiBhcmd1bWVudAogICogYW5kIHByaW50cyB0aGVpciBzdGF0dXMuCiAgKi8KLXN0YXRpYyB2b2lkIHhsYXRfdGFibGVzX3ByaW50X2ludGVybmFsKGNvbnN0IHVpbnRwdHJfdCB0YWJsZV9iYXNlX3ZhLAorc3RhdGljIHZvaWQgeGxhdF90YWJsZXNfcHJpbnRfaW50ZXJuYWwoeGxhdF9jdHhfdCAqY3R4LAorCQljb25zdCB1aW50cHRyX3QgdGFibGVfYmFzZV92YSwKIAkJdWludDY0X3QgKmNvbnN0IHRhYmxlX2Jhc2UsIGNvbnN0IGludCB0YWJsZV9lbnRyaWVzLAotCQljb25zdCB1bnNpZ25lZCBpbnQgbGV2ZWwsIGNvbnN0IHVpbnQ2NF90IGV4ZWN1dGVfbmV2ZXJfbWFzaykKKwkJY29uc3QgdW5zaWduZWQgaW50IGxldmVsKQogewogCWFzc2VydChsZXZlbCA8PSBYTEFUX1RBQkxFX0xFVkVMX01BWCk7CiAKQEAgLTEwNjUsMTcgKzExNTcsMTYgQEAKIAogCQkJCXVpbnRwdHJfdCBhZGRyX2lubmVyID0gZGVzYyAmIFRBQkxFX0FERFJfTUFTSzsKIAotCQkJCXhsYXRfdGFibGVzX3ByaW50X2ludGVybmFsKHRhYmxlX2lkeF92YSwKKwkJCQl4bGF0X3RhYmxlc19wcmludF9pbnRlcm5hbChjdHgsIHRhYmxlX2lkeF92YSwKIAkJCQkJKHVpbnQ2NF90ICopYWRkcl9pbm5lciwKLQkJCQkJWExBVF9UQUJMRV9FTlRSSUVTLCBsZXZlbCsxLAotCQkJCQlleGVjdXRlX25ldmVyX21hc2spOworCQkJCQlYTEFUX1RBQkxFX0VOVFJJRVMsIGxldmVsICsgMSk7CiAJCQl9IGVsc2UgewogCQkJCXRmX3ByaW50ZigiJXNWQTolcCBQQToweCVsbHggc2l6ZToweCV6eCAiLAogCQkJCQkgIGxldmVsX3NwYWNlcnNbbGV2ZWxdLAogCQkJCQkgICh2b2lkICopdGFibGVfaWR4X3ZhLAogCQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpKGRlc2MgJiBUQUJMRV9BRERSX01BU0spLAogCQkJCQkgIGxldmVsX3NpemUpOwotCQkJCXhsYXRfZGVzY19wcmludChkZXNjLCBleGVjdXRlX25ldmVyX21hc2spOworCQkJCXhsYXRfZGVzY19wcmludChjdHgsIGRlc2MpOwogCQkJCXRmX3ByaW50ZigiXG4iKTsKIAkJCX0KIAkJfQpAQCAtMTA5NSw3ICsxMTg2LDE1IEBACiB2b2lkIHhsYXRfdGFibGVzX3ByaW50KHhsYXRfY3R4X3QgKmN0eCkKIHsKICNpZiBMT0dfTEVWRUwgPj0gTE9HX0xFVkVMX1ZFUkJPU0UKKwljb25zdCBjaGFyICp4bGF0X3JlZ2ltZV9zdHI7CisJaWYgKGN0eC0+eGxhdF9yZWdpbWUgPT0gRUwxX0VMMF9SRUdJTUUpIHsKKwkJeGxhdF9yZWdpbWVfc3RyID0gIjEmMCI7CisJfSBlbHNlIHsKKwkJYXNzZXJ0KGN0eC0+eGxhdF9yZWdpbWUgPT0gRUwzX1JFR0lNRSk7CisJCXhsYXRfcmVnaW1lX3N0ciA9ICIzIjsKKwl9CiAJVkVSQk9TRSgiVHJhbnNsYXRpb24gdGFibGVzIHN0YXRlOlxuIik7CisJVkVSQk9TRSgiICBYbGF0IHJlZ2ltZTogICAgIEVMJXNcbiIsIHhsYXRfcmVnaW1lX3N0cik7CiAJVkVSQk9TRSgiICBNYXggYWxsb3dlZCBQQTogIDB4JWxseFxuIiwgY3R4LT5wYV9tYXhfYWRkcmVzcyk7CiAJVkVSQk9TRSgiICBNYXggYWxsb3dlZCBWQTogICVwXG4iLCAodm9pZCAqKSBjdHgtPnZhX21heF9hZGRyZXNzKTsKIAlWRVJCT1NFKCIgIE1heCBtYXBwZWQgUEE6ICAgMHglbGx4XG4iLCBjdHgtPm1heF9wYSk7CkBAIC0xMTE5LDIzICsxMjE4LDIyIEBACiAJCXVzZWRfcGFnZV90YWJsZXMsIGN0eC0+dGFibGVzX251bSwKIAkJY3R4LT50YWJsZXNfbnVtIC0gdXNlZF9wYWdlX3RhYmxlcyk7CiAKLQl4bGF0X3RhYmxlc19wcmludF9pbnRlcm5hbCgwLCBjdHgtPmJhc2VfdGFibGUsIGN0eC0+YmFzZV90YWJsZV9lbnRyaWVzLAotCQkJCSAgIGN0eC0+YmFzZV9sZXZlbCwgY3R4LT5leGVjdXRlX25ldmVyX21hc2spOworCXhsYXRfdGFibGVzX3ByaW50X2ludGVybmFsKGN0eCwgMCwgY3R4LT5iYXNlX3RhYmxlLAorCQkJCSAgIGN0eC0+YmFzZV90YWJsZV9lbnRyaWVzLCBjdHgtPmJhc2VfbGV2ZWwpOwogI2VuZGlmIC8qIExPR19MRVZFTCA+PSBMT0dfTEVWRUxfVkVSQk9TRSAqLwogfQogCiB2b2lkIGluaXRfeGxhdF90YWJsZXNfY3R4KHhsYXRfY3R4X3QgKmN0eCkKIHsKKwlhc3NlcnQoY3R4ICE9IE5VTEwpOworCWFzc2VydCghY3R4LT5pbml0aWFsaXplZCk7CisJYXNzZXJ0KGN0eC0+eGxhdF9yZWdpbWUgPT0gRUwzX1JFR0lNRSB8fCBjdHgtPnhsYXRfcmVnaW1lID09IEVMMV9FTDBfUkVHSU1FKTsKKwlhc3NlcnQoIWlzX21tdV9lbmFibGVkX2N0eChjdHgpKTsKKwogCW1tYXBfcmVnaW9uX3QgKm1tID0gY3R4LT5tbWFwOwogCi0JYXNzZXJ0KCFpc19tbXVfZW5hYmxlZCgpKTsKLQlhc3NlcnQoIWN0eC0+aW5pdGlhbGl6ZWQpOwotCiAJcHJpbnRfbW1hcChtbSk7CiAKLQljdHgtPmV4ZWN1dGVfbmV2ZXJfbWFzayA9Ci0JCQl4bGF0X2FyY2hfZ2V0X3huX2Rlc2MoeGxhdF9hcmNoX2N1cnJlbnRfZWwoKSk7Ci0KIAkvKiBBbGwgdGFibGVzIG11c3QgYmUgemVyb2VkIGJlZm9yZSBtYXBwaW5nIGFueSByZWdpb24uICovCiAKIAlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGN0eC0+YmFzZV90YWJsZV9lbnRyaWVzOyBpKyspCkBAIC0xMjE3LDMgKzEzMTUsMzQ4IEBACiB9CiAKICNlbmRpZiAvKiBBQVJDSDMyICovCisKKy8qCisgKiBEbyBhIHRyYW5zbGF0aW9uIHRhYmxlIHdhbGsgdG8gZmluZCB0aGUgYmxvY2sgb3IgcGFnZSBkZXNjcmlwdG9yIHRoYXQgbWFwcworICogdmlydHVhbF9hZGRyLgorICoKKyAqIE9uIHN1Y2Nlc3MsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvciB3aXRoaW4gdGhlIHRyYW5zbGF0aW9uCisgKiB0YWJsZS4gSXRzIGxvb2t1cCBsZXZlbCBpcyBzdG9yZWQgaW4gJypvdXRfbGV2ZWwnLgorICogT24gZXJyb3IsIHJldHVybiBOVUxMLgorICoKKyAqIHhsYXRfdGFibGVfYmFzZQorICogICBCYXNlIGFkZHJlc3MgZm9yIHRoZSBpbml0aWFsIGxvb2t1cCBsZXZlbC4KKyAqIHhsYXRfdGFibGVfYmFzZV9lbnRyaWVzCisgKiAgIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0cmFuc2xhdGlvbiB0YWJsZSBmb3IgdGhlIGluaXRpYWwgbG9va3VwIGxldmVsLgorICogdmlydF9hZGRyX3NwYWNlX3NpemUKKyAqICAgU2l6ZSBpbiBieXRlcyBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgorICovCitzdGF0aWMgdWludDY0X3QgKmZpbmRfeGxhdF90YWJsZV9lbnRyeSh1aW50cHRyX3QgdmlydHVhbF9hZGRyLAorCQkJCSAgICAgICB2b2lkICp4bGF0X3RhYmxlX2Jhc2UsCisJCQkJICAgICAgIGludCB4bGF0X3RhYmxlX2Jhc2VfZW50cmllcywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHZpcnRfYWRkcl9zcGFjZV9zaXplLAorCQkJCSAgICAgICBpbnQgKm91dF9sZXZlbCkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhcnRfbGV2ZWw7CisJdWludDY0X3QgKnRhYmxlOworCWludCBlbnRyaWVzOworCisJVkVSQk9TRSgiJXMoJXApXG4iLCBfX2Z1bmNfXywgKHZvaWQgKil2aXJ0dWFsX2FkZHIpOworCisJc3RhcnRfbGV2ZWwgPSBHRVRfWExBVF9UQUJMRV9MRVZFTF9CQVNFKHZpcnRfYWRkcl9zcGFjZV9zaXplKTsKKwlWRVJCT1NFKCJTdGFydGluZyB0cmFuc2xhdGlvbiB0YWJsZSB3YWxrIGZyb20gbGV2ZWwgJWlcbiIsIHN0YXJ0X2xldmVsKTsKKworCXRhYmxlID0geGxhdF90YWJsZV9iYXNlOworCWVudHJpZXMgPSB4bGF0X3RhYmxlX2Jhc2VfZW50cmllczsKKworCWZvciAodW5zaWduZWQgaW50IGxldmVsID0gc3RhcnRfbGV2ZWw7CisJICAgICBsZXZlbCA8PSBYTEFUX1RBQkxFX0xFVkVMX01BWDsKKwkgICAgICsrbGV2ZWwpIHsKKwkJaW50IGlkeDsKKwkJdWludDY0X3QgZGVzYzsKKwkJdWludDY0X3QgZGVzY190eXBlOworCisJCVZFUkJPU0UoIlRhYmxlIGFkZHJlc3M6ICVwXG4iLCAodm9pZCAqKXRhYmxlKTsKKworCQlpZHggPSBYTEFUX1RBQkxFX0lEWCh2aXJ0dWFsX2FkZHIsIGxldmVsKTsKKwkJVkVSQk9TRSgiSW5kZXggaW50byBsZXZlbCAlaSB0YWJsZTogJWlcbiIsIGxldmVsLCBpZHgpOworCQlpZiAoaWR4ID49IGVudHJpZXMpIHsKKwkJCVZFUkJPU0UoIkludmFsaWQgYWRkcmVzc1xuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWRlc2MgPSB0YWJsZVtpZHhdOworCQlkZXNjX3R5cGUgPSBkZXNjICYgREVTQ19NQVNLOworCQlWRVJCT1NFKCJEZXNjcmlwdG9yIGF0IGxldmVsICVpOiAweCVsbHhcbiIsIGxldmVsLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZGVzYyk7CisKKwkJaWYgKGRlc2NfdHlwZSA9PSBJTlZBTElEX0RFU0MpIHsKKwkJCVZFUkJPU0UoIkludmFsaWQgZW50cnkgKG1lbW9yeSBub3QgbWFwcGVkKVxuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWlmIChsZXZlbCA9PSBYTEFUX1RBQkxFX0xFVkVMX01BWCkgeworCQkJLyoKKwkJCSAqIFRoZXJlIGNhbid0IGJlIHRhYmxlIGVudHJpZXMgYXQgdGhlIGZpbmFsIGxvb2t1cAorCQkJICogbGV2ZWwuCisJCQkgKi8KKwkJCWFzc2VydChkZXNjX3R5cGUgPT0gUEFHRV9ERVNDKTsKKwkJCVZFUkJPU0UoIkRlc2NyaXB0b3IgbWFwcGluZyBhIG1lbW9yeSBwYWdlIChzaXplOiAweCVsbHgpXG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpWExBVF9CTE9DS19TSVpFKFhMQVRfVEFCTEVfTEVWRUxfTUFYKSk7CisJCQkqb3V0X2xldmVsID0gbGV2ZWw7CisJCQlyZXR1cm4gJnRhYmxlW2lkeF07CisJCX0KKworCQlpZiAoZGVzY190eXBlID09IEJMT0NLX0RFU0MpIHsKKwkJCVZFUkJPU0UoIkRlc2NyaXB0b3IgbWFwcGluZyBhIG1lbW9yeSBibG9jayAoc2l6ZTogMHglbGx4KVxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKVhMQVRfQkxPQ0tfU0laRShsZXZlbCkpOworCQkJKm91dF9sZXZlbCA9IGxldmVsOworCQkJcmV0dXJuICZ0YWJsZVtpZHhdOworCQl9CisKKwkJYXNzZXJ0KGRlc2NfdHlwZSA9PSBUQUJMRV9ERVNDKTsKKwkJVkVSQk9TRSgiVGFibGUgZGVzY3JpcHRvciwgY29udGludWluZyB4bGF0IHRhYmxlIHdhbGsuLi5cbiIpOworCQl0YWJsZSA9ICh1aW50NjRfdCAqKSh1aW50cHRyX3QpKGRlc2MgJiBUQUJMRV9BRERSX01BU0spOworCQllbnRyaWVzID0gWExBVF9UQUJMRV9FTlRSSUVTOworCX0KKworCS8qCisJICogVGhpcyBzaG91bGRuJ3QgYmUgcmVhY2hlZCwgdGhlIHRyYW5zbGF0aW9uIHRhYmxlIHdhbGsgc2hvdWxkIGVuZCBhdAorCSAqIG1vc3QgYXQgbGV2ZWwgWExBVF9UQUJMRV9MRVZFTF9NQVggYW5kIHJldHVybiBmcm9tIGluc2lkZSB0aGUgbG9vcC4KKwkgKi8KKwlhc3NlcnQoMCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgaW50IGdldF9tZW1fYXR0cmlidXRlc19pbnRlcm5hbChjb25zdCB4bGF0X2N0eF90ICpjdHgsIHVpbnRwdHJfdCBiYXNlX3ZhLAorCQltbWFwX2F0dHJfdCAqYXR0cmlidXRlcywgdWludDY0X3QgKip0YWJsZV9lbnRyeSwKKwkJdW5zaWduZWQgbG9uZyBsb25nICphZGRyX3BhLCBpbnQgKnRhYmxlX2xldmVsKQoreworCXVpbnQ2NF90ICplbnRyeTsKKwl1aW50NjRfdCBkZXNjOworCWludCBsZXZlbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmlydF9hZGRyX3NwYWNlX3NpemU7CisKKwkvKgorCSAqIFNhbml0eS1jaGVjayBhcmd1bWVudHMuCisJICovCisJYXNzZXJ0KGN0eCAhPSBOVUxMKTsKKwlhc3NlcnQoY3R4LT5pbml0aWFsaXplZCk7CisJYXNzZXJ0KGN0eC0+eGxhdF9yZWdpbWUgPT0gRUwxX0VMMF9SRUdJTUUgfHwgY3R4LT54bGF0X3JlZ2ltZSA9PSBFTDNfUkVHSU1FKTsKKworCXZpcnRfYWRkcl9zcGFjZV9zaXplID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljdHgtPnZhX21heF9hZGRyZXNzICsgMTsKKwlhc3NlcnQodmlydF9hZGRyX3NwYWNlX3NpemUgPiAwKTsKKworCWVudHJ5ID0gZmluZF94bGF0X3RhYmxlX2VudHJ5KGJhc2VfdmEsCisJCQkJY3R4LT5iYXNlX3RhYmxlLAorCQkJCWN0eC0+YmFzZV90YWJsZV9lbnRyaWVzLAorCQkJCXZpcnRfYWRkcl9zcGFjZV9zaXplLAorCQkJCSZsZXZlbCk7CisJaWYgKGVudHJ5ID09IE5VTEwpIHsKKwkJV0FSTigiQWRkcmVzcyAlcCBpcyBub3QgbWFwcGVkLlxuIiwgKHZvaWQgKiliYXNlX3ZhKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFkZHJfcGEgIT0gTlVMTCkgeworCQkqYWRkcl9wYSA9ICplbnRyeSAmIFRBQkxFX0FERFJfTUFTSzsKKwl9CisKKwlpZiAodGFibGVfZW50cnkgIT0gTlVMTCkgeworCQkqdGFibGVfZW50cnkgPSBlbnRyeTsKKwl9CisKKwlpZiAodGFibGVfbGV2ZWwgIT0gTlVMTCkgeworCQkqdGFibGVfbGV2ZWwgPSBsZXZlbDsKKwl9CisKKwlkZXNjID0gKmVudHJ5OworCisjaWYgTE9HX0xFVkVMID49IExPR19MRVZFTF9WRVJCT1NFCisJVkVSQk9TRSgiQXR0cmlidXRlczogIik7CisJeGxhdF9kZXNjX3ByaW50KGN0eCwgZGVzYyk7CisJdGZfcHJpbnRmKCJcbiIpOworI2VuZGlmIC8qIExPR19MRVZFTCA+PSBMT0dfTEVWRUxfVkVSQk9TRSAqLworCisJYXNzZXJ0KGF0dHJpYnV0ZXMgIT0gTlVMTCk7CisJKmF0dHJpYnV0ZXMgPSAwOworCisJaW50IGF0dHJfaW5kZXggPSAoZGVzYyA+PiBBVFRSX0lOREVYX1NISUZUKSAmIEFUVFJfSU5ERVhfTUFTSzsKKworCWlmIChhdHRyX2luZGV4ID09IEFUVFJfSVdCV0FfT1dCV0FfTlRSX0lOREVYKSB7CisJCSphdHRyaWJ1dGVzIHw9IE1UX01FTU9SWTsKKwl9IGVsc2UgaWYgKGF0dHJfaW5kZXggPT0gQVRUUl9OT05fQ0FDSEVBQkxFX0lOREVYKSB7CisJCSphdHRyaWJ1dGVzIHw9IE1UX05PTl9DQUNIRUFCTEU7CisJfSBlbHNlIHsKKwkJYXNzZXJ0KGF0dHJfaW5kZXggPT0gQVRUUl9ERVZJQ0VfSU5ERVgpOworCQkqYXR0cmlidXRlcyB8PSBNVF9ERVZJQ0U7CisJfQorCisJaW50IGFwMl9iaXQgPSAoZGVzYyA+PiBBUDJfU0hJRlQpICYgMTsKKworCWlmIChhcDJfYml0ID09IEFQMl9SVykKKwkJKmF0dHJpYnV0ZXMgfD0gTVRfUlc7CisKKwlpZiAoY3R4LT54bGF0X3JlZ2ltZSA9PSBFTDFfRUwwX1JFR0lNRSkgeworCQlpbnQgYXAxX2JpdCA9IChkZXNjID4+IEFQMV9TSElGVCkgJiAxOworCQlpZiAoYXAxX2JpdCA9PSBBUDFfQUNDRVNTX1VOUFJJVklMRUdFRCkKKwkJCSphdHRyaWJ1dGVzIHw9IE1UX1VTRVI7CisJfQorCisJaW50IG5zX2JpdCA9IChkZXNjID4+IE5TX1NISUZUKSAmIDE7CisKKwlpZiAobnNfYml0ID09IDEpCisJCSphdHRyaWJ1dGVzIHw9IE1UX05TOworCisJdWludDY0X3QgeG5fbWFzayA9IHhsYXRfYXJjaF9yZWdpbWVfZ2V0X3huX2Rlc2MoY3R4LT54bGF0X3JlZ2ltZSk7CisKKwlpZiAoKGRlc2MgJiB4bl9tYXNrKSA9PSB4bl9tYXNrKSB7CisJCSphdHRyaWJ1dGVzIHw9IE1UX0VYRUNVVEVfTkVWRVI7CisJfSBlbHNlIHsKKwkJYXNzZXJ0KChkZXNjICYgeG5fbWFzaykgPT0gMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworaW50IGdldF9tZW1fYXR0cmlidXRlcyhjb25zdCB4bGF0X2N0eF90ICpjdHgsIHVpbnRwdHJfdCBiYXNlX3ZhLAorCQltbWFwX2F0dHJfdCAqYXR0cmlidXRlcykKK3sKKwlyZXR1cm4gZ2V0X21lbV9hdHRyaWJ1dGVzX2ludGVybmFsKGN0eCwgYmFzZV92YSwgYXR0cmlidXRlcywKKwkJCQkJICAgTlVMTCwgTlVMTCwgTlVMTCk7Cit9CisKKworaW50IGNoYW5nZV9tZW1fYXR0cmlidXRlcyh4bGF0X2N0eF90ICpjdHgsCisJCQl1aW50cHRyX3QgYmFzZV92YSwKKwkJCXNpemVfdCBzaXplLAorCQkJbW1hcF9hdHRyX3QgYXR0cikKK3sKKwkvKiBOb3RlOiBUaGlzIGltcGxlbWVudGF0aW9uIGlzbid0IG9wdGltaXplZC4gKi8KKworCWFzc2VydChjdHggIT0gTlVMTCk7CisJYXNzZXJ0KGN0eC0+aW5pdGlhbGl6ZWQpOworCisJdW5zaWduZWQgbG9uZyBsb25nIHZpcnRfYWRkcl9zcGFjZV9zaXplID0KKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyljdHgtPnZhX21heF9hZGRyZXNzICsgMTsKKwlhc3NlcnQodmlydF9hZGRyX3NwYWNlX3NpemUgPiAwKTsKKworCWlmICghSVNfUEFHRV9BTElHTkVEKGJhc2VfdmEpKSB7CisJCVdBUk4oIiVzOiBBZGRyZXNzICVwIGlzIG5vdCBhbGlnbmVkIG9uIGEgcGFnZSBib3VuZGFyeS5cbiIsCisJCSAgICAgX19mdW5jX18sICh2b2lkICopYmFzZV92YSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzaXplID09IDApIHsKKwkJV0FSTigiJXM6IFNpemUgaXMgMC5cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChzaXplICUgUEFHRV9TSVpFKSAhPSAwKSB7CisJCVdBUk4oIiVzOiBTaXplIDB4JXp4IGlzIG5vdCBhIG11bHRpcGxlIG9mIGEgcGFnZSBzaXplLlxuIiwKKwkJICAgICBfX2Z1bmNfXywgc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgoKGF0dHIgJiBNVF9FWEVDVVRFX05FVkVSKSA9PSAwKSAmJiAoKGF0dHIgJiBNVF9SVykgIT0gMCkpIHsKKwkJV0FSTigiJXMoKSBkb2Vzbid0IGFsbG93IHRvIHJlbWFwIG1lbW9yeSBhcyByZWFkLXdyaXRlIGFuZCBleGVjdXRhYmxlLlxuIiwKKwkJICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWludCBwYWdlc19jb3VudCA9IHNpemUgLyBQQUdFX1NJWkU7CisKKwlWRVJCT1NFKCJDaGFuZ2luZyBtZW1vcnkgYXR0cmlidXRlcyBvZiAlaSBwYWdlcyBzdGFydGluZyBmcm9tIGFkZHJlc3MgJXAuLi5cbiIsCisJCXBhZ2VzX2NvdW50LCAodm9pZCAqKWJhc2VfdmEpOworCisJdWludHB0cl90IGJhc2VfdmFfb3JpZ2luYWwgPSBiYXNlX3ZhOworCisJLyoKKwkgKiBTYW5pdHkgY2hlY2tzLgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgcGFnZXNfY291bnQ7ICsraSkgeworCQl1aW50NjRfdCAqZW50cnk7CisJCXVpbnQ2NF90IGRlc2M7CisJCWludCBsZXZlbDsKKworCQllbnRyeSA9IGZpbmRfeGxhdF90YWJsZV9lbnRyeShiYXNlX3ZhLAorCQkJCQkgICAgICBjdHgtPmJhc2VfdGFibGUsCisJCQkJCSAgICAgIGN0eC0+YmFzZV90YWJsZV9lbnRyaWVzLAorCQkJCQkgICAgICB2aXJ0X2FkZHJfc3BhY2Vfc2l6ZSwKKwkJCQkJICAgICAgJmxldmVsKTsKKwkJaWYgKGVudHJ5ID09IE5VTEwpIHsKKwkJCVdBUk4oIkFkZHJlc3MgJXAgaXMgbm90IG1hcHBlZC5cbiIsICh2b2lkICopYmFzZV92YSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWRlc2MgPSAqZW50cnk7CisKKwkJLyoKKwkJICogQ2hlY2sgdGhhdCBhbGwgdGhlIHJlcXVpcmVkIHBhZ2VzIGFyZSBtYXBwZWQgYXQgcGFnZQorCQkgKiBncmFudWxhcml0eS4KKwkJICovCisJCWlmICgoKGRlc2MgJiBERVNDX01BU0spICE9IFBBR0VfREVTQykgfHwKKwkJCShsZXZlbCAhPSBYTEFUX1RBQkxFX0xFVkVMX01BWCkpIHsKKwkJCVdBUk4oIkFkZHJlc3MgJXAgaXMgbm90IG1hcHBlZCBhdCB0aGUgcmlnaHQgZ3JhbnVsYXJpdHkuXG4iLAorCQkJICAgICAodm9pZCAqKWJhc2VfdmEpOworCQkJV0FSTigiR3JhbnVsYXJpdHkgaXMgMHglbGx4LCBzaG91bGQgYmUgMHgleC5cbiIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpWExBVF9CTE9DS19TSVpFKGxldmVsKSwgUEFHRV9TSVpFKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyoKKwkJICogSWYgdGhlIHJlZ2lvbiB0eXBlIGlzIGRldmljZSwgaXQgc2hvdWxkbid0IGJlIGV4ZWN1dGFibGUuCisJCSAqLworCQlpbnQgYXR0cl9pbmRleCA9IChkZXNjID4+IEFUVFJfSU5ERVhfU0hJRlQpICYgQVRUUl9JTkRFWF9NQVNLOworCQlpZiAoYXR0cl9pbmRleCA9PSBBVFRSX0RFVklDRV9JTkRFWCkgeworCQkJaWYgKChhdHRyICYgTVRfRVhFQ1VURV9ORVZFUikgPT0gMCkgeworCQkJCVdBUk4oIlNldHRpbmcgZGV2aWNlIG1lbW9yeSBhcyBleGVjdXRhYmxlIGF0IGFkZHJlc3MgJXAuIiwKKwkJCQkgICAgICh2b2lkICopYmFzZV92YSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKworCQliYXNlX3ZhICs9IFBBR0VfU0laRTsKKwl9CisKKwkvKiBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlLiAqLworCWJhc2VfdmEgPSBiYXNlX3ZhX29yaWdpbmFsOworCisJVkVSQk9TRSgiJXM6IEFsbCBwYWdlcyBhcmUgbWFwcGVkLCBub3cgY2hhbmdpbmcgdGhlaXIgYXR0cmlidXRlcy4uLlxuIiwKKwkJX19mdW5jX18pOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBwYWdlc19jb3VudDsgKytpKSB7CisKKwkJbW1hcF9hdHRyX3Qgb2xkX2F0dHIsIG5ld19hdHRyOworCQl1aW50NjRfdCAqZW50cnk7CisJCWludCBsZXZlbDsKKwkJdW5zaWduZWQgbG9uZyBsb25nIGFkZHJfcGE7CisKKwkJZ2V0X21lbV9hdHRyaWJ1dGVzX2ludGVybmFsKGN0eCwgYmFzZV92YSwgJm9sZF9hdHRyLAorCQkJCQkgICAgJmVudHJ5LCAmYWRkcl9wYSwgJmxldmVsKTsKKworCQlWRVJCT1NFKCJPbGQgYXR0cmlidXRlczogMHgleFxuIiwgb2xkX2F0dHIpOworCisJCS8qCisJCSAqIEZyb20gYXR0ciwgb25seSBNVF9STy9NVF9SVywgTVRfRVhFQ1VURS9NVF9FWEVDVVRFX05FVkVSIGFuZAorCQkgKiBNVF9VU0VSL01UX1BSSVZJTEVHRUQgYXJlIHRha2VuIGludG8gYWNjb3VudC4gQW55IG90aGVyCisJCSAqIGluZm9ybWF0aW9uIGlzIGlnbm9yZWQuCisJCSAqLworCisJCS8qIENsZWFuIHRoZSBvbGQgYXR0cmlidXRlcyBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlYnVpbHQuICovCisJCW5ld19hdHRyID0gb2xkX2F0dHIgJiB+KE1UX1JXfE1UX0VYRUNVVEVfTkVWRVJ8TVRfVVNFUik7CisKKwkJLyoKKwkJICogVXBkYXRlIGF0dHJpYnV0ZXMsIGJ1dCBmaWx0ZXIgb3V0IHRoZSBvbmVzIHRoaXMgZnVuY3Rpb24KKwkJICogaXNuJ3QgYWxsb3dlZCB0byBjaGFuZ2UuCisJCSAqLworCQluZXdfYXR0ciB8PSBhdHRyICYgKE1UX1JXfE1UX0VYRUNVVEVfTkVWRVJ8TVRfVVNFUik7CisKKwkJVkVSQk9TRSgiTmV3IGF0dHJpYnV0ZXM6IDB4JXhcbiIsIG5ld19hdHRyKTsKKworCQkvKgorCQkgKiBUaGUgYnJlYWstYmVmb3JlLW1ha2Ugc2VxdWVuY2UgcmVxdWlyZXMgd3JpdGluZyBhbiBpbnZhbGlkCisJCSAqIGRlc2NyaXB0b3IgYW5kIG1ha2luZyBzdXJlIHRoYXQgdGhlIHN5c3RlbSBzZWVzIHRoZSBjaGFuZ2UKKwkJICogYmVmb3JlIHdyaXRpbmcgdGhlIG5ldyBkZXNjcmlwdG9yLgorCQkgKi8KKwkJKmVudHJ5ID0gSU5WQUxJRF9ERVNDOworCisJCS8qIEludmFsaWRhdGUgYW55IGNhY2hlZCBjb3B5IG9mIHRoaXMgbWFwcGluZyBpbiB0aGUgVExCcy4gKi8KKwkJeGxhdF9hcmNoX3RsYmlfdmFfcmVnaW1lKGJhc2VfdmEsIGN0eC0+eGxhdF9yZWdpbWUpOworCisJCS8qIEVuc3VyZSBjb21wbGV0aW9uIG9mIHRoZSBpbnZhbGlkYXRpb24uICovCisJCXhsYXRfYXJjaF90bGJpX3ZhX3N5bmMoKTsKKworCQkvKiBXcml0ZSBuZXcgZGVzY3JpcHRvciAqLworCQkqZW50cnkgPSB4bGF0X2Rlc2MoY3R4LCBuZXdfYXR0ciwgYWRkcl9wYSwgbGV2ZWwpOworCisJCWJhc2VfdmEgKz0gUEFHRV9TSVpFOworCX0KKworCS8qIEVuc3VyZSB0aGF0IHRoZSBsYXN0IGRlc2NyaXB0b3Igd3JpdGVuIGlzIHNlZW4gYnkgdGhlIHN5c3RlbS4gKi8KKwlkc2Jpc2goKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL3hsYXRfdGFibGVzX3YyL3hsYXRfdGFibGVzX3ByaXZhdGUuaCBiL2xpYi94bGF0X3RhYmxlc192Mi94bGF0X3RhYmxlc19wcml2YXRlLmgKaW5kZXggZDM1MjU4My4uNzllZmJlYiAxMDA2NDQKLS0tIGEvbGliL3hsYXRfdGFibGVzX3YyL3hsYXRfdGFibGVzX3ByaXZhdGUuaAorKysgYi9saWIveGxhdF90YWJsZXNfdjIveGxhdF90YWJsZXNfcHJpdmF0ZS5oCkBAIC0zNCwxMiArMzQsMjQgQEAKIAlNVF9EWU5BTUlDCT0gMSA8PCBNVF9EWU5fU0hJRlQKIH0gbW1hcF9wcml2X2F0dHJfdDsKIAorI2VuZGlmIC8qIFBMQVRfWExBVF9UQUJMRVNfRFlOQU1JQyAqLworCiAvKgotICogRnVuY3Rpb24gdXNlZCB0byBpbnZhbGlkYXRlIGFsbCBsZXZlbHMgb2YgdGhlIHRyYW5zbGF0aW9uIHdhbGsgZm9yIGEgZ2l2ZW4KLSAqIHZpcnR1YWwgYWRkcmVzcy4gSXQgbXVzdCBiZSBjYWxsZWQgZm9yIGV2ZXJ5IHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5IHRoYXQgaXMKLSAqIG1vZGlmaWVkLgorICogSW52YWxpZGF0ZSBhbGwgVExCIGVudHJpZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzLiBUaGlzCisgKiBvcGVyYXRpb24gYXBwbGllcyB0byBhbGwgUEVzIGluIHRoZSBzYW1lIElubmVyIFNoYXJlYWJsZSBkb21haW4gYXMgdGhlIFBFCisgKiB0aGF0IGV4ZWN1dGVzIHRoaXMgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb25zIG11c3QgYmUgY2FsbGVkIGZvciBldmVyeQorICogdHJhbnNsYXRpb24gdGFibGUgZW50cnkgdGhhdCBpcyBtb2RpZmllZC4KKyAqCisgKiB4bGF0X2FyY2hfdGxiaV92YSgpIGFwcGxpZXMgdGhlIGludmFsaWRhdGlvbiB0byB0aGUgZXhjZXB0aW9uIGxldmVsIG9mIHRoZQorICogY3VycmVudCB0cmFuc2xhdGlvbiByZWdpbWUsIHdoZXJlYXMgeGxhdF9hcmNoX3RsYmlfdmFfcmVnaW1lKCkgYXBwbGllcyBpdCB0bworICogdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHJlZ2ltZS4KKyAqCisgKiBOb3RlLCBob3dldmVyLCB0aGF0IGl0IGlzIGFyY2hpdGVjdHVyYWxseSBVTkRFRklORUQgdG8gaW52YWxpZGF0ZSBUTEIgZW50cmllcworICogcGVydGFpbmluZyB0byBhIGhpZ2hlciBleGNlcHRpb24gbGV2ZWwsIGUuZy4gaW52YWxpZGF0aW5nIEVMMyBlbnRyaWVzIGZyb20KKyAqIFMtRUwxLgogICovCiB2b2lkIHhsYXRfYXJjaF90bGJpX3ZhKHVpbnRwdHJfdCB2YSk7Cit2b2lkIHhsYXRfYXJjaF90bGJpX3ZhX3JlZ2ltZSh1aW50cHRyX3QgdmEsIHhsYXRfcmVnaW1lX3QgeGxhdF9yZWdpbWUpOwogCiAvKgogICogVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYW55IGNvZGUgdGhhdCB1c2VzIHRoZSBmdW5jdGlvbgpAQCAtNDcsOCArNTksNiBAQAogICovCiB2b2lkIHhsYXRfYXJjaF90bGJpX3ZhX3N5bmModm9pZCk7CiAKLSNlbmRpZiAvKiBQTEFUX1hMQVRfVEFCTEVTX0RZTkFNSUMgKi8KLQogLyogUHJpbnQgVkEsIFBBLCBzaXplIGFuZCBhdHRyaWJ1dGVzIG9mIGFsbCByZWdpb25zIGluIHRoZSBtbWFwIGFycmF5LiAqLwogdm9pZCBwcmludF9tbWFwKG1tYXBfcmVnaW9uX3QgKmNvbnN0IG1tYXApOwogCkBAIC02NiwxMyArNzYsNiBAQAogaW50IHhsYXRfYXJjaF9jdXJyZW50X2VsKHZvaWQpOwogCiAvKgotICogUmV0dXJucyB0aGUgYml0IG1hc2sgdGhhdCBoYXMgdG8gYmUgT1JlZCB0byB0aGUgcmVzdCBvZiBhIHRyYW5zbGF0aW9uIHRhYmxlCi0gKiBkZXNjcmlwdG9yIHNvIHRoYXQgZXhlY3V0aW9uIG9mIGNvZGUgaXMgcHJvaGliaXRlZCBhdCB0aGUgZ2l2ZW4gRXhjZXB0aW9uCi0gKiBMZXZlbC4KLSAqLwotdWludDY0X3QgeGxhdF9hcmNoX2dldF94bl9kZXNjKGludCBlbCk7Ci0KLS8qCiAgKiBSZXR1cm4gdGhlIG1heGltdW0gcGh5c2ljYWwgYWRkcmVzcyBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLgogICogVGhpcyB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBleGVjdXRpb24gc3RhdGUgKEFBcmNoMzIvQUFyY2g2NCkuCiAgKi8KQEAgLTgyLDcgKzg1LDEwIEBACiB2b2lkIGVuYWJsZV9tbXVfYXJjaCh1bnNpZ25lZCBpbnQgZmxhZ3MsIHVpbnQ2NF90ICpiYXNlX3RhYmxlLAogCQl1bnNpZ25lZCBsb25nIGxvbmcgcGEsIHVpbnRwdHJfdCBtYXhfdmEpOwogCi0vKiBSZXR1cm4gMSBpZiB0aGUgTU1VIG9mIHRoaXMgRXhjZXB0aW9uIExldmVsIGlzIGVuYWJsZWQsIDAgb3RoZXJ3aXNlLiAqLwotaW50IGlzX21tdV9lbmFibGVkKHZvaWQpOworLyoKKyAqIFJldHVybiAxIGlmIHRoZSBNTVUgb2YgdGhlIHRyYW5zbGF0aW9uIHJlZ2ltZSBtYW5hZ2VkIGJ5IHRoZSBnaXZlbiB4bGF0X2N0eF90CisgKiBpcyBlbmFibGVkLCAwIG90aGVyd2lzZS4KKyAqLworaW50IGlzX21tdV9lbmFibGVkX2N0eChjb25zdCB4bGF0X2N0eF90ICpjdHgpOwogCiAjZW5kaWYgLyogX19YTEFUX1RBQkxFU19QUklWQVRFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbWFpbnRhaW5lcnMucnN0IGIvbWFpbnRhaW5lcnMucnN0CmluZGV4IDM4ODA3M2UuLjA0YWI2OTUgMTAwNjQ0Ci0tLSBhL21haW50YWluZXJzLnJzdAorKysgYi9tYWludGFpbmVycy5yc3QKQEAgLTIxLDggKzIxLDggQEAKIAogRmlsZXM6CiAKLS0gIGRvY3Mvc3BkL29wdGVlLWRpc3BhdGNoZXIubWQKLS0gIGRvY3MvcGxhdC9xZW11Lm1kCistICBkb2NzL3BsYXQvcWVtdS5yc3QKKy0gIGRvY3Mvc3BkL29wdGVlLWRpc3BhdGNoZXIucnN0CiAtICBzZXJ2aWNlcy9zcGQvb3B0ZWVkL1wqCiAtICBwbGF0L3FlbXUvXCoKIApAQCAtMzMsOCArMzMsOSBAQAogCiBGaWxlczoKIAotLSAgZG9jcy9zcGQvdGxrLWRpc3BhdGNoZXIubWQKLS0gIGRvY3Mvc3BkL3RydXN0eS1kaXNwYXRjaGVyLm1kCistICBkb2NzL3BsYXQvbnZpZGlhLXRlZ3JhLnJzdAorLSAgZG9jcy9zcGQvdGxrLWRpc3BhdGNoZXIucnN0CistICBkb2NzL3NwZC90cnVzdHktZGlzcGF0Y2hlci5yc3QKIC0gIGluY2x1ZGUvYmwzMi9wYXlsb2Fkcy90bGsuaAogLSAgaW5jbHVkZS9saWIvY3B1cy9hYXJjaDY0L2RlbnZlci5oCiAtICBsaWIvY3B1cy9hYXJjaDY0L2RlbnZlci5TCkBAIC00OSw4ICs1MCw5IEBACiAKIEZpbGVzOgogCi0tICBkb2NzL3BsYXQvaGlrZXkubWQKLS0gIGRvY3MvcGxhdC9oaWtleTk2MC5tZAorLSAgZG9jcy9wbGF0L2hpa2V5LnJzdAorLSAgZG9jcy9wbGF0L2hpa2V5OTYwLnJzdAorLSAgZG9jcy9wbGF0L3BvcGxhci5yc3QKIC0gIGRyaXZlcnMvZW1tYy9cKgogLSAgZHJpdmVycy9wYXJ0aXRpb24vXCoKIC0gIGRyaXZlcnMvc3lub3BzeXMvZW1tYy9cKgpAQCAtNzEsMzIgKzczLDYwIEBACiAKIC0gIHBsYXQvbWVkaWF0ZWsvXCoKIAorUmFzcGJlcnJ5IFBpIDMgcGxhdGZvcm0gc3ViLW1haW50YWluZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FudG9uaW8gTmnDsW8gRMOtYXogKGFudG9uaW8ubmlub2RpYXpAYXJtLmNvbSwgYGFudG9uaW8tbmluby1kaWF6LWFybWBfKQorCitGaWxlczoKKworLSAgZG9jcy9wbGF0L3JwaTMucnN0CistICBwbGF0L3JwaTMvXCoKKwogUm9ja0NoaXAgcGxhdGZvcm0gc3ViLW1haW50YWluZXIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRvbnkgWGllICh0b255LnhpZUByb2NrLWNoaXBzLmNvbSwgYFRvbnlYaWUwNmBfCi1vciBgcmtjaHJvbWVgXykKK29yIGByb2NrY2hpcC1saW51eGBfKQogCiBGaWxlczoKIAogLSAgcGxhdC9yb2NrY2hpcC9cKgogCi1YaWxpbnggcGxhdGZvcm0gc3ViLW1haW50YWluZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVW5pUGhpZXIgcGxhdGZvcm0gc3ViLW1haW50YWluZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVPDtnJlbiBCcmlua21hbm4gKHNvcmVuLmJyaW5rbWFubkB4aWxpbnguY29tLCBgc29yZW5iLXhsbnhgXykKK01hc2FoaXJvIFlhbWFkYSAoeWFtYWRhLm1hc2FoaXJvQHNvY2lvbmV4dC5jb20sIGBtYXNhaGlyMHlgXykKIAogRmlsZXM6CiAKLS0gIGRvY3MvcGxhdC94aWxpbngtenlucW1wLm1kCistIGRvY3MvcGxhdC9zb2Npb25leHQtdW5pcGhpZXIucnN0CistIHBsYXQvc29jaW9uZXh0L1wqCisKK1hpbGlueCBwbGF0Zm9ybSBzdWItbWFpbnRhaW5lcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NpdmEgRHVyZ2EgUHJhc2FkIFBhbGFkdWd1IChzaXZhLmR1cmdhLnBhbGFkdWd1QHhpbGlueC5jb20sIGBzaXZhZHVyYF8pCisKK0ZpbGVzOgorCistICBkb2NzL3BsYXQveGlsaW54LXp5bnFtcC5yc3QKIC0gIHBsYXQveGlsaW54L1wqCiAKK0FSTXY3IGFyY2hpdGVjdHVyZSBzdWItbWFpbnRhaW5lcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V0aWVubmUgQ2FycmllcmUgKGV0aWVubmUuY2FycmllcmVAbGluYXJvLm9yZywgYGV0aWVubmUtbG1zYF8pCisKKy4uIF9hbnRvbmlvLW5pbm8tZGlhei1hcm06IGh0dHBzOi8vZ2l0aHViLmNvbS9hbnRvbmlvLW5pbm8tZGlhei1hcm0KIC4uIF9kYW5oLWFybTogaHR0cHM6Ly9naXRodWIuY29tL2RhbmgtYXJtCiAuLiBfZGF2aWRjdW5hZG8tYXJtOiBodHRwczovL2dpdGh1Yi5jb20vZGF2aWRjdW5hZG8tYXJtCiAuLiBfamVuc3dpLWxpbmFybzogaHR0cHM6Ly9naXRodWIuY29tL2plbnN3aS1saW5hcm8KIC4uIF92d2FkZWthcjogaHR0cHM6Ly9naXRodWIuY29tL3Z3YWRla2FyCiAuLiBfaHpodWFuZzE6IGh0dHBzOi8vZ2l0aHViLmNvbS9oemh1YW5nMQorLi4gX21hc2FoaXIweTogaHR0cHM6Ly9naXRodWIuY29tL21hc2FoaXIweQogLi4gX210azA5NDIyOiBodHRwczovL2dpdGh1Yi5jb20vbXRrMDk0MjIKIC4uIF9Ub255WGllMDY6IGh0dHBzOi8vZ2l0aHViLmNvbS9Ub255WGllMDYKLS4uIF9ya2Nocm9tZTogaHR0cHM6Ly9naXRodWIuY29tL3JrY2hyb21lCi0uLiBfc29yZW5iLXhsbng6IGh0dHBzOi8vZ2l0aHViLmNvbS9zb3JlbmIteGxueAorLi4gX3NpdmFkdXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaXZhZHVyCisuLiBfcm9ja2NoaXAtbGludXg6IGh0dHBzOi8vZ2l0aHViLmNvbS9yb2NrY2hpcC1saW51eAorLi4gX2V0aWVubmUtbG1zOiBodHRwczovL2dpdGh1Yi5jb20vZXRpZW5uZS1sbXMKZGlmZiAtLWdpdCBhL21ha2VfaGVscGVycy9hcm12Ny1hLWNwdXMubWsgYi9tYWtlX2hlbHBlcnMvYXJtdjctYS1jcHVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZTdlYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tYWtlX2hlbHBlcnMvYXJtdjctYS1jcHVzLm1rCkBAIC0wLDAgKzEsNTAgQEAKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisjCisKK2lmbmVxICgke0FSQ0h9LGFhcmNoMzIpCiskKGVycm9yIEFSTV9BUkNIX01BSk9SPTcgbWFuZGF0ZXMgQVJDSD1hYXJjaDMyKQorZW5kaWYKKworIyBGb3IgQVJNdjcsIHNldCBtYXJjaDMyIGZyb20gcGxhdGZvcm0gZGlyZWN0aXZlIEFSTVY3X0NPUlRFWF9BeD15ZXMKKyMgYW5kIEFSTV9XSVRIX05FT049eWVzL25vLgorIworIyBHQ0MgYW5kIENsYW5nIHJlcXVpcmUgLW1hcmNoPWFybXY3LWEgZm9yIEMtQTkgYW5kIC1tYXJjaD1hcm12N3ZlIGZvciBDLUExNS4KKyMgYXJtQ2xhbmcgcmVxdWlyZXMgLW1hcmNoPWFybXY3LWEgZm9yIGFsbCBBUk12NyBDb3J0ZXgtQS4gVG8gY29tcGx5IHdpdGgKKyMgYWxsLCBqdXN0IGRyb3AgLW1hcmNoIGFuZCBzdXBwbHkgb25seSAtbWNwdS4KKworIyBQbGF0Zm9ybSBjYW4gb3ZlcnJpZGUgbWFyY2gzMi1kaXJlY3RpdmUgdGhyb3VnaCBNQVJDSDMyX0RJUkVDVElWRQoraWZkZWYgTUFSQ0gzMl9ESVJFQ1RJVkUKK21hcmNoMzItZGlyZWN0aXZlCQk6PSAkKE1BUkNIMzJfRElSRUNUSVZFKQorZWxzZQorbWFyY2gzMi1zZXQtJHtBUk1fQ09SVEVYX0E1fQk6PSAtbWNwdT1jb3J0ZXgtYTUKK21hcmNoMzItc2V0LSR7QVJNX0NPUlRFWF9BN30JOj0gLW1jcHU9Y29ydGV4LWE3CittYXJjaDMyLXNldC0ke0FSTV9DT1JURVhfQTl9CTo9IC1tY3B1PWNvcnRleC1hOQorbWFyY2gzMi1zZXQtJHtBUk1fQ09SVEVYX0ExMn0JOj0gLW1jcHU9Y29ydGV4LWExMgorbWFyY2gzMi1zZXQtJHtBUk1fQ09SVEVYX0ExNX0JOj0gLW1jcHU9Y29ydGV4LWExNQorbWFyY2gzMi1zZXQtJHtBUk1fQ09SVEVYX0ExN30JOj0gLW1jcHU9Y29ydGV4LWExNworbWFyY2gzMi1uZW9uLSQoQVJNX1dJVEhfTkVPTikJOj0gLW1mcHU9bmVvbgorCisjIGRlZmF1bHQgdG8gLW1hcmNoPWFybXY3LWEgYXMgdGFyZ2V0IGRpcmVjdGl2ZQorbWFyY2gzMi1zZXQteWVzCQkJPz0gLW1hcmNoPWFybXY3LWEKK21hcmNoMzItZGlyZWN0aXZlCQk6PSAke21hcmNoMzItc2V0LXllc30gJHttYXJjaDMyLW5lb24teWVzfQorZW5kaWYKKworIyBQbGF0Zm9ybSBtYXkgb3ZlcnJpZGUgdGhlc2UgZXh0ZW5zaW9uIHN1cHBvcnQgZGlyZWN0aXZlczoKKyMKKyMgQVJNVjdfU1VQUE9SVFNfTEFSR0VfUEFHRV9BRERSRVNTSU5HCisjIERlZmluZWQgaWYgY29yZSBzdXBwb3J0cyB0aGUgTGFyZ2UgUGFnZSBBZGRyZXNzaW5nIGV4dGVuc2lvbi4KKyMKKyMgQVJNVjdfU1VQUE9SVFNfVklSVFVBTElaQVRJT04KKyMgRGVmaW5lZCBpZiBBUk12NyBjb3JlIHN1cHBvcnRzIHRoZSBWaXJ0dWFsaXphdGlvbiBleHRlbnNpb24uCisjCisjIEFSTVY3X1NVUFBPUlRTX0dFTkVSSUNfVElNRVIKKyMgRGVmaW5lZCBpZiBBUk12NyBjb3JlIHN1cHBvcnRzIHRoZSBHZW5lcmljIFRpbWVyIGV4dGVuc2lvbi4KKworaWZlcSAoJChmaWx0ZXIgeWVzLCQoQVJNX0NPUlRFWF9BNykgJChBUk1fQ09SVEVYX0ExMikgJChBUk1fQ09SVEVYX0ExNSkgJChBUk1fQ09SVEVYX0ExNykpLHllcykKKyQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxBUk1WN19TVVBQT1JUU19MQVJHRV9QQUdFX0FERFJFU1NJTkcpKQorJChldmFsICQoY2FsbCBhZGRfZGVmaW5lLEFSTVY3X1NVUFBPUlRTX1ZJUlRVQUxJWkFUSU9OKSkKKyQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxBUk1WN19TVVBQT1JUU19HRU5FUklDX1RJTUVSKSkKK2VuZGlmCmRpZmYgLS1naXQgYS9tYWtlX2hlbHBlcnMvYnVpbGRfbWFjcm9zLm1rIGIvbWFrZV9oZWxwZXJzL2J1aWxkX21hY3Jvcy5tawppbmRleCBmZDhlYjA1Li5lMWJmYmJlIDEwMDY0NAotLS0gYS9tYWtlX2hlbHBlcnMvYnVpbGRfbWFjcm9zLm1rCisrKyBiL21ha2VfaGVscGVycy9idWlsZF9tYWNyb3MubWsKQEAgLTI5MSw3ICsyOTEsNyBAQAogCiAjIENyZWF0ZSBnZW5lcmF0b3JzIGZvciBvYmplY3QgZGlyZWN0b3J5IHN0cnVjdHVyZQogCi0kKGV2YWwgJChjYWxsIE1BS0VfUFJFUkVRX0RJUiwke0JVSUxEX0RJUn0sKSkKKyQoZXZhbCAkKGNhbGwgTUFLRV9QUkVSRVFfRElSLCR7QlVJTERfRElSfSwke0JVSUxEX1BMQVR9KSkKIAogJChldmFsICQoZm9yZWFjaCBvYmpkLCR7T0JKX0RJUlN9LCQoY2FsbCBNQUtFX1BSRVJFUV9ESVIsJHtvYmpkfSwke0JVSUxEX0RJUn0pKSkKIApkaWZmIC0tZ2l0IGEvbWFrZV9oZWxwZXJzL2RlZmF1bHRzLm1rIGIvbWFrZV9oZWxwZXJzL2RlZmF1bHRzLm1rCmluZGV4IDg2MDEwNDYuLmZhMGQxN2QgMTAwNjQ0Ci0tLSBhL21ha2VfaGVscGVycy9kZWZhdWx0cy5taworKysgYi9tYWtlX2hlbHBlcnMvZGVmYXVsdHMubWsKQEAgLTI0LDkgKzI0LDYgQEAKICMgaW4gRUwzLiBUaGUgcGxhdGZvcm0gcG9ydCBjYW4gY2hhbmdlIHRoaXMgdmFsdWUgaWYgbmVlZGVkLgogQVJNX0dJQ19BUkNICQkJOj0gMgogCi0jIEZsYWcgdXNlZCB0byBpbmRpY2F0ZSBpZiBBU01fQVNTRVJUSU9OIHNob3VsZCBiZSBlbmFibGVkIGZvciB0aGUgYnVpbGQuCi1BU01fQVNTRVJUSU9OCQkJOj0gMAotCiAjIEJhc2UgY29tbWl0IHRvIHBlcmZvcm0gY29kZSBjaGVjayBvbgogQkFTRV9DT01NSVQJCQk6PSBvcmlnaW4vbWFzdGVyCiAKQEAgLTYyLDYgKzU5LDkgQEAKICMgRmxhZyB0byBlbmFibGUgc3RhY2sgY29ycnVwdGlvbiBwcm90ZWN0aW9uCiBFTkFCTEVfU1RBQ0tfUFJPVEVDVE9SCQk6PSAwCiAKKyMgRmxhZyB0byBlbmFibGUgZXhjZXB0aW9uIGhhbmRsaW5nIGluIEVMMworRUwzX0VYQ0VQVElPTl9IQU5ETElORwkJOj0gMAorCiAjIEJ1aWxkIGZsYWcgdG8gdHJlYXQgdXNhZ2Ugb2YgZGVwcmVjYXRlZCBwbGF0Zm9ybSBhbmQgZnJhbWV3b3JrIEFQSXMgYXMgZXJyb3IuCiBFUlJPUl9ERVBSRUNBVEVECQk6PSAwCiAKQEAgLTc3LDYgKzc3LDEwIEBACiAjIEZvciBDaGFpbiBvZiBUcnVzdAogR0VORVJBVEVfQ09UCQkJOj0gMAogCisjIEhpbnQgcGxhdGZvcm0gaW50ZXJydXB0IGNvbnRyb2wgbGF5ZXIgdGhhdCBHcm91cCAwIGludGVycnVwdHMgYXJlIGZvciBFTDMuIEJ5CisjIGRlZmF1bHQsIHRoZXkgYXJlIGZvciBTZWN1cmUgRUwxLgorR0lDVjJfRzBfRk9SX0VMMwkJOj0gMAorCiAjIFdoZXRoZXIgc3lzdGVtIGNvaGVyZW5jeSBpcyBtYW5hZ2VkIGluIGhhcmR3YXJlLCB3aXRob3V0IGV4cGxpY2l0IHNvZnR3YXJlCiAjIG9wZXJhdGlvbnMuCiBIV19BU1NJU1RFRF9DT0hFUkVOQ1kJCTo9IDAKQEAgLTEwNyw2ICsxMTEsOSBAQAogIyBGb3IgQ2hhaW4gb2YgVHJ1c3QKIFNBVkVfS0VZUwkJCTo9IDAKIAorIyBTb2Z0d2FyZSBEZWxlZ2F0ZWQgRXhjZXB0aW9uIHN1cHBvcnQKK1NERUlfU1VQUE9SVCAgICAgICAgICAgIAk6PSAwCisKICMgV2hldGhlciBjb2RlIGFuZCByZWFkLW9ubHkgZGF0YSBzaG91bGQgYmUgcHV0IG9uIHNlcGFyYXRlIG1lbW9yeSBwYWdlcy4gVGhlCiAjIHBsYXRmb3JtIE1ha2VmaWxlIGlzIGZyZWUgdG8gb3ZlcnJpZGUgdGhpcyB2YWx1ZS4KIFNFUEFSQVRFX0NPREVfQU5EX1JPREFUQQk6PSAwCkBAIC0xMTQsNiArMTIxLDkgQEAKICMgU1BEIGNob2ljZQogU1BECQkJCTo9IG5vbmUKIAorIyBGb3IgaW5jbHVkaW5nIHRoZSBTZWN1cmUgUGFydGl0aW9uIE1hbmFnZXIKK0VOQUJMRV9TUE0JCQk6PSAwCisKICMgRmxhZyB0byBpbnRyb2R1Y2UgYW4gaW5maW5pdGUgbG9vcCBpbiBCTDEganVzdCBiZWZvcmUgaXQgZXhpdHMgaW50byB0aGUgbmV4dAogIyBpbWFnZS4gVGhpcyBpcyBtZWFudCB0byBoZWxwIGRlYnVnZ2luZyB0aGUgcG9zdC1CTDIgcGhhc2UuCiBTUElOX09OX0JMMV9FWElUCQk6PSAwCkBAIC0xMzYsMTkgKzE0NiwyMSBAQAogIyBwbGF0Zm9ybXMpLgogV0FSTUJPT1RfRU5BQkxFX0RDQUNIRV9FQVJMWQk6PSAwCiAKLSMgQnkgZGVmYXVsdCwgZW5hYmxlIFN0YXRpc3RpY2FsIFByb2ZpbGluZyBFeHRlbnNpb25zLgotIyBUaGUgdG9wIGxldmVsIE1ha2VmaWxlIHdpbGwgZGlzYWJsZSB0aGlzIGZlYXR1cmUgZGVwZW5kaW5nIG9uCi0jIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGFuZCB2ZXJzaW9uIG51bWJlci4KKyMgQnVpbGQgb3B0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBTdGF0aXN0aWNhbCBQcm9maWxpbmcgRXh0ZW5zaW9ucwogRU5BQkxFX1NQRV9GT1JfTE9XRVJfRUxTCTo9IDEKIAotIyBTUEUgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGJ1dCBvbmx5IHN1cHBvcnRlZCBvbiBBQXJjaDY0IDguMiBvbndhcmRzLgotIyBEaXNhYmxlIGl0IGluIGFsbCBvdGhlciBjYXNlcy4KKyMgU1BFIGlzIG9ubHkgc3VwcG9ydGVkIG9uIEFBcmNoNjQgc28gZGlzYWJsZSBpdCBvbiBBQXJjaDMyLgogaWZlcSAoJHtBUkNIfSxhYXJjaDMyKQogICAgIG92ZXJyaWRlIEVOQUJMRV9TUEVfRk9SX0xPV0VSX0VMUyA6PSAwCitlbmRpZgorCitFTkFCTEVfQU1VCQkJOj0gMAorCisjIEJ5IGRlZmF1bHQsIGVuYWJsZSBTY2FsYWJsZSBWZWN0b3IgRXh0ZW5zaW9uIGlmIGltcGxlbWVudGVkIGZvciBOb24tc2VjdXJlCisjIGxvd2VyIEVMcworIyBOb3RlIFNWRSBpcyBvbmx5IHN1cHBvcnRlZCBvbiBBQXJjaDY0IC0gdGhlcmVmb3JlIGRvIG5vdCBlbmFibGUgaW4gQUFyY2gzMgoraWZuZXEgKCR7QVJDSH0sYWFyY2gzMikKKyAgICBFTkFCTEVfU1ZFX0ZPUl9OUwkJOj0gMQogZWxzZQotICAgIGlmZXEgKCR7QVJNX0FSQ0hfTUFKT1J9LDgpCi0gICAgICAgIGlmZXEgKCQoQVJNX0FSQ0hfTUlOT1IpLCQoZmlsdGVyICQoQVJNX0FSQ0hfTUlOT1IpLDAgMSkpCi0gICAgICAgICAgICBFTkFCTEVfU1BFX0ZPUl9MT1dFUl9FTFMgOj0gMAotICAgICAgICBlbmRpZgotICAgIGVuZGlmCisgICAgb3ZlcnJpZGUgRU5BQkxFX1NWRV9GT1JfTlMJOj0gMAogZW5kaWYKZGlmZiAtLWdpdCBhL21ha2VfaGVscGVycy90YmJyL3RiYnJfdG9vbHMubWsgYi9tYWtlX2hlbHBlcnMvdGJici90YmJyX3Rvb2xzLm1rCmluZGV4IDcxMmZhNmYuLjZlNmUyNzMgMTAwNjQ0Ci0tLSBhL21ha2VfaGVscGVycy90YmJyL3RiYnJfdG9vbHMubWsKKysrIGIvbWFrZV9oZWxwZXJzL3RiYnIvdGJicl90b29scy5tawpAQCAtNTQsNiArNTQsNyBAQAogIyBwYWNrZWQgaW4gdGhlIEZJUCkuIERldmVsb3BlcnMgY2FuIHVzZSB0aGVpciBvd24ga2V5cyBieSBzcGVjaWZ5aW5nIHRoZSBwcm9wZXIKICMgYnVpbGQgb3B0aW9uIGluIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBidWlsZGluZyB0aGUgVHJ1c3RlZCBGaXJtd2FyZQogJChpZiAke0tFWV9BTEd9LCQoZXZhbCAkKGNhbGwgQ0VSVF9BRERfQ01EX09QVCwke0tFWV9BTEd9LC0ta2V5LWFsZykpKQorJChpZiAke0hBU0hfQUxHfSwkKGV2YWwgJChjYWxsIENFUlRfQUREX0NNRF9PUFQsJHtIQVNIX0FMR30sLS1oYXNoLWFsZykpKQogJChpZiAke1JPVF9LRVl9LCQoZXZhbCAkKGNhbGwgQ0VSVF9BRERfQ01EX09QVCwke1JPVF9LRVl9LC0tcm90LWtleSkpKQogJChpZiAke1JPVF9LRVl9LCQoZXZhbCAkKGNhbGwgRldVX0NFUlRfQUREX0NNRF9PUFQsJHtST1RfS0VZfSwtLXJvdC1rZXkpKSkKICQoaWYgJHtUUlVTVEVEX1dPUkxEX0tFWX0sJChldmFsICQoY2FsbCBDRVJUX0FERF9DTURfT1BULCR7VFJVU1RFRF9XT1JMRF9LRVl9LC0tdHJ1c3RlZC13b3JsZC1rZXkpKSkKQEAgLTc2LDYgKzc3LDcgQEAKIGVuZGlmCiAKIGlmZXEgKCR7QVJDSH0sYWFyY2g2NCkKK2lmZXEgKCR7TkVFRF9CTDMxfSx5ZXMpCiAjIEFkZCB0aGUgQkwzMSBDb1QgKGtleSBjZXJ0ICsgaW1nIGNlcnQgKyBpbWFnZSkKICQoaWYgJHtCTDMxfSwkKGV2YWwgJChjYWxsIENFUlRfQUREX0NNRF9PUFQsJHtCTDMxfSwtLXNvYy1mdyx0cnVlKSksXAogICAgICAgICAgICAgICQoZXZhbCAkKGNhbGwgQ0VSVF9BRERfQ01EX09QVCwkKGNhbGwgSU1HX0JJTiwzMSksLS1zb2MtZncsdHJ1ZSkpKQpAQCAtODUsNiArODcsNyBAQAogJChldmFsICQoY2FsbCBGSVBfQUREX1BBWUxPQUQsJHtCVUlMRF9QTEFUfS9zb2NfZndfY29udGVudC5jcnQsLS1zb2MtZnctY2VydCkpCiAkKGV2YWwgJChjYWxsIEZJUF9BRERfUEFZTE9BRCwke0JVSUxEX1BMQVR9L3NvY19md19rZXkuY3J0LC0tc29jLWZ3LWtleS1jZXJ0KSkKIGVuZGlmCitlbmRpZgogCiAjIEFkZCB0aGUgQkwzMiBDb1QgKGtleSBjZXJ0ICsgaW1nIGNlcnQgKyBpbWFnZSkKIGlmZXEgKCR7TkVFRF9CTDMyfSx5ZXMpCmRpZmYgLS1naXQgYS9wbGF0L2FybS9ib2FyZC9jb21tb24vYm9hcmRfYXJtX3RydXN0ZWRfYm9vdC5jIGIvcGxhdC9hcm0vYm9hcmQvY29tbW9uL2JvYXJkX2FybV90cnVzdGVkX2Jvb3QuYwppbmRleCA1ZDM2ZDE3Li42YzAzYzkxIDEwMDY0NAotLS0gYS9wbGF0L2FybS9ib2FyZC9jb21tb24vYm9hcmRfYXJtX3RydXN0ZWRfYm9vdC5jCisrKyBiL3BsYXQvYXJtL2JvYXJkL2NvbW1vbi9ib2FyZF9hcm1fdHJ1c3RlZF9ib290LmMKQEAgLTE4LDYgKzE4LDcgQEAKIC8qIFJPVFBLIGxvY2F0aW9ucyAqLwogI2RlZmluZSBBUk1fUk9UUEtfUkVHU19JRAkJMQogI2RlZmluZSBBUk1fUk9UUEtfREVWRUxfUlNBX0lECQkyCisjZGVmaW5lIEFSTV9ST1RQS19ERVZFTF9FQ0RTQV9JRAkzCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJvdHBrX2hhc2hfaGRyW10gPQkJXAogCQkiXHgzMFx4MzFceDMwXHgwRFx4MDZceDA5XHg2MFx4ODZceDQ4IglcCkBAIC00MSw2ICs0MiwxMiBAQAogCQkiXHgzN1x4N0FceDcyXHg0N1x4MUJceEVDXHgzMlx4NzMiCVwKIAkJIlx4RTlceDkyXHgzMlx4RTJceDQ5XHg1OVx4RjZceDVFIglcCiAJCSJceDhCXHg0QVx4NEFceDQ2XHhEOFx4MjJceDlBXHhEQSI7CisjZWxpZiAoQVJNX1JPVFBLX0xPQ0FUSU9OX0lEID09IEFSTV9ST1RQS19ERVZFTF9FQ0RTQV9JRCkKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFybV9kZXZlbF9yb3Rwa19oYXNoW10gPQlcCisJCSJceDJFXHg0MFx4QkZceDZFXHhGOVx4MTJceEJCXHg5OCIJXAorCQkiXHgzMVx4NzFceDA5XHgwRVx4MUVceDE1XHgzRFx4MEIiCVwKKwkJIlx4RkRceEQxXHhDQ1x4NjlceDRBXHg5OFx4RUJceDhCIglcCisJCSJceEEwXHhCMFx4MjBceDg2XHg0RVx4NkNceDA3XHgxNyI7CiAjZW5kaWYKIAogLyoKQEAgLTY5LDcgKzc2LDggQEAKIAltZW1jcHkocm90cGtfaGFzaF9kZXIsIHJvdHBrX2hhc2hfaGRyLCByb3Rwa19oYXNoX2hkcl9sZW4pOwogCWRzdCA9ICh1aW50OF90ICopJnJvdHBrX2hhc2hfZGVyW3JvdHBrX2hhc2hfaGRyX2xlbl07CiAKLSNpZiAoQVJNX1JPVFBLX0xPQ0FUSU9OX0lEID09IEFSTV9ST1RQS19ERVZFTF9SU0FfSUQpCisjaWYgKEFSTV9ST1RQS19MT0NBVElPTl9JRCA9PSBBUk1fUk9UUEtfREVWRUxfUlNBX0lEKSBcCisJfHwgKEFSTV9ST1RQS19MT0NBVElPTl9JRCA9PSBBUk1fUk9UUEtfREVWRUxfRUNEU0FfSUQpCiAJbWVtY3B5KGRzdCwgYXJtX2RldmVsX3JvdHBrX2hhc2gsIFNIQTI1Nl9CWVRFUyk7CiAjZWxpZiAoQVJNX1JPVFBLX0xPQ0FUSU9OX0lEID09IEFSTV9ST1RQS19SRUdTX0lEKQogCXVpbnQzMl90ICpzcmMsIHRtcDsKQEAgLTEyMSw3ICsxMjksOCBAQAogCQkqZHN0KysgPSAodWludDhfdCkoKHRtcCA+PiA4KSAmIDB4RkYpOwogCQkqZHN0KysgPSAodWludDhfdCkodG1wICYgMHhGRik7CiAJfQotI2VuZGlmIC8qIChBUk1fUk9UUEtfTE9DQVRJT05fSUQgPT0gQVJNX1JPVFBLX0RFVkVMX1JTQV9JRCkgKi8KKyNlbmRpZiAvKiAoQVJNX1JPVFBLX0xPQ0FUSU9OX0lEID09IEFSTV9ST1RQS19ERVZFTF9SU0FfSUQpIFwKKwkJICB8fCAoQVJNX1JPVFBLX0xPQ0FUSU9OX0lEID09IEFSTV9ST1RQS19ERVZFTF9FQ0RTQV9JRCkgKi8KIAogCSprZXlfcHRyID0gKHZvaWQgKilyb3Rwa19oYXNoX2RlcjsKIAkqa2V5X2xlbiA9ICh1bnNpZ25lZCBpbnQpc2l6ZW9mKHJvdHBrX2hhc2hfZGVyKTsKZGlmZiAtLWdpdCBhL3BsYXQvYXJtL2JvYXJkL2NvbW1vbi9ib2FyZF9jb21tb24ubWsgYi9wbGF0L2FybS9ib2FyZC9jb21tb24vYm9hcmRfY29tbW9uLm1rCmluZGV4IDQ2NjcyOTguLmQ2M2FlOWEgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2JvYXJkL2NvbW1vbi9ib2FyZF9jb21tb24ubWsKKysrIGIvcGxhdC9hcm0vYm9hcmQvY29tbW9uL2JvYXJkX2NvbW1vbi5tawpAQCAtMSw1ICsxLDUgQEAKICMKLSMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAjCkBAIC0xMiw5ICsxMiwxMyBAQAogCiBCTDFfU09VUkNFUwkJKz0JcGxhdC9hcm0vYm9hcmQvY29tbW9uL2RyaXZlcnMvbm9yZmxhc2gvbm9yZmxhc2guYwogCi1CTDJfU09VUkNFUwkJKz0JcGxhdC9hcm0vYm9hcmQvY29tbW9uL2RyaXZlcnMvbm9yZmxhc2gvbm9yZmxhc2guYworQkwyX1NPVVJDRVMJCSs9CWxpYi91dGlscy9tZW1fcmVnaW9uLmMJCQkJCVwKKwkJCQlwbGF0L2FybS9jb21tb24vYXJtX25vcl9wc2NpX21lbV9wcm90ZWN0LmMJCVwKKwkJCQlwbGF0L2FybS9ib2FyZC9jb21tb24vZHJpdmVycy9ub3JmbGFzaC9ub3JmbGFzaC5jCiAKLSNCTDMxX1NPVVJDRVMJCSs9CitCTDMxX1NPVVJDRVMJCSs9CWxpYi91dGlscy9tZW1fcmVnaW9uLmMJCQkJCVwKKwkJCQlwbGF0L2FybS9ib2FyZC9jb21tb24vZHJpdmVycy9ub3JmbGFzaC9ub3JmbGFzaC5jCVwKKwkJCQlwbGF0L2FybS9jb21tb24vYXJtX25vcl9wc2NpX21lbV9wcm90ZWN0LmMKIAogaWZuZXEgKCR7VFJVU1RFRF9CT0FSRF9CT09UfSwwKQogICBpZm5lcSAoJHtBUk1fQ1JZUFRPQ0VMTF9JTlRFR30sIDEpCkBAIC0yMiw3ICsyNiwxMSBAQAogICAgIGlmZXEgKCR7QVJNX1JPVFBLX0xPQ0FUSU9OfSwgcmVncykKICAgICAgICAgQVJNX1JPVFBLX0xPQ0FUSU9OX0lEID0gQVJNX1JPVFBLX1JFR1NfSUQKICAgICBlbHNlIGlmZXEgKCR7QVJNX1JPVFBLX0xPQ0FUSU9OfSwgZGV2ZWxfcnNhKQorICAgICAgICBLRVlfQUxHIDo9IHJzYQogICAgICAgICBBUk1fUk9UUEtfTE9DQVRJT05fSUQgPSBBUk1fUk9UUEtfREVWRUxfUlNBX0lECisgICAgZWxzZSBpZmVxICgke0FSTV9ST1RQS19MT0NBVElPTn0sIGRldmVsX2VjZHNhKQorICAgICAgICBLRVlfQUxHIDo9IGVjZHNhCisgICAgICAgIEFSTV9ST1RQS19MT0NBVElPTl9JRCA9IEFSTV9ST1RQS19ERVZFTF9FQ0RTQV9JRAogICAgIGVsc2UKICAgICAgICAgJChlcnJvciAiVW5zdXBwb3J0ZWQgQVJNX1JPVFBLX0xPQ0FUSU9OIHZhbHVlIikKICAgICBlbmRpZgpkaWZmIC0tZ2l0IGEvcGxhdC9hcm0vYm9hcmQvY29tbW9uL2JvYXJkX2Nzc19jb21tb24uYyBiL3BsYXQvYXJtL2JvYXJkL2NvbW1vbi9ib2FyZF9jc3NfY29tbW9uLmMKaW5kZXggMTU5YmY4Ni4uMDMyZWJkZiAxMDA2NDQKLS0tIGEvcGxhdC9hcm0vYm9hcmQvY29tbW9uL2JvYXJkX2Nzc19jb21tb24uYworKysgYi9wbGF0L2FybS9ib2FyZC9jb21tb24vYm9hcmRfY3NzX2NvbW1vbi5jCkBAIC0yOSwxMCArMjksMTYgQEAKIGNvbnN0IG1tYXBfcmVnaW9uX3QgcGxhdF9hcm1fbW1hcFtdID0gewogCUFSTV9NQVBfU0hBUkVEX1JBTSwKIAlWMk1fTUFQX0ZMQVNIMF9STywKKyNpZmRlZiBQTEFUX0FSTV9NRU1fUFJPVF9BRERSCisJQVJNX1YyTV9NQVBfTUVNX1BST1RFQ1QsCisjZW5kaWYKIAlWMk1fTUFQX0lPRlBHQSwKIAlDU1NfTUFQX0RFVklDRSwKIAlTT0NfQ1NTX01BUF9ERVZJQ0UsCiAJQVJNX01BUF9OU19EUkFNMSwKKyNpZmRlZiBBQVJDSDY0CisJQVJNX01BUF9EUkFNMiwKKyNlbmRpZgogI2lmZGVmIFNQRF90c3BkCiAJQVJNX01BUF9UU1BfU0VDX01FTSwKICNlbmRpZgpAQCAtNTYsNiArNjIsOSBAQAogCUFSTV9NQVBfU0hBUkVEX1JBTSwKIAlWMk1fTUFQX0lPRlBHQSwKIAlDU1NfTUFQX0RFVklDRSwKKyNpZmRlZiBQTEFUX0FSTV9NRU1fUFJPVF9BRERSCisJQVJNX1YyTV9NQVBfTUVNX1BST1RFQ1QsCisjZW5kaWYKIAlTT0NfQ1NTX01BUF9ERVZJQ0UsCiAJezB9CiB9OwpkaWZmIC0tZ2l0IGEvcGxhdC9hcm0vYm9hcmQvY29tbW9uL3JvdHBrL2FybV9yb3Rwa19lY2RzYS5kZXIgYi9wbGF0L2FybS9ib2FyZC9jb21tb24vcm90cGsvYXJtX3JvdHBrX2VjZHNhLmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTQ3ODc3Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdC9hcm0vYm9hcmQvY29tbW9uL3JvdHBrL2FybV9yb3Rwa19lY2RzYS5kZXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGxhdC9hcm0vYm9hcmQvY29tbW9uL3JvdHBrL2FybV9yb3Rwa19lY2RzYV9zaGEyNTYuYmluIGIvcGxhdC9hcm0vYm9hcmQvY29tbW9uL3JvdHBrL2FybV9yb3Rwa19lY2RzYV9zaGEyNTYuYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZTEyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0L2FybS9ib2FyZC9jb21tb24vcm90cGsvYXJtX3JvdHBrX2VjZHNhX3NoYTI1Ni5iaW4KQEAgLTAsMCArMSBAQAorLkC/bvkSu5gxcQkOHhU9C/3RzGlKmOuLoLAghk5sBxcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbGF0L2FybS9ib2FyZC9jb21tb24vcm90cGsvYXJtX3JvdHByaXZrX2VjZHNhLnBlbSBiL3BsYXQvYXJtL2JvYXJkL2NvbW1vbi9yb3Rway9hcm1fcm90cHJpdmtfZWNkc2EucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMzI4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0L2FybS9ib2FyZC9jb21tb24vcm90cGsvYXJtX3JvdHByaXZrX2VjZHNhLnBlbQpAQCAtMCwwICsxLDUgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUhjQ0FRRUVJTlNhWDZudnpTM3RlaUJKQTdXbFRMUktKT2FqcHkyOW8yY0FyTGJVWG9aQm9Bb0dDQ3FHU000OQorQXdFSG9VUURRZ0FFbStaSXZUUTQ0YUtrODNEaFZMc3ZzRnBLRFAvQ2g5dkErNEhwK2ZtVmZYNmdESDhLMU9CaQorU3BSZjdGSjlSR1BJbjJINnhzdCthMU90TE1XVURScUdrUT09CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9wbGF0L2FybS9ib2FyZC9mdnAvZnZwX2NvbW1vbi5jIGIvcGxhdC9hcm0vYm9hcmQvZnZwL2Z2cF9jb21tb24uYwppbmRleCBlODY5ZjViLi42NzI5ODYzIDEwMDY0NAotLS0gYS9wbGF0L2FybS9ib2FyZC9mdnAvZnZwX2NvbW1vbi5jCisrKyBiL3BsYXQvYXJtL2JvYXJkL2Z2cC9mdnBfY29tbW9uLmMKQEAgLTYsNiArNiw3IEBACiAKICNpbmNsdWRlIDxhcm1fY29uZmlnLmg+CiAjaW5jbHVkZSA8YXJtX2RlZi5oPgorI2luY2x1ZGUgPGFybV9zcG1fZGVmLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8Y2NpLmg+CiAjaW5jbHVkZSA8Y2NuLmg+CkBAIC0xMyw2ICsxNCw3IEBACiAjaW5jbHVkZSA8Z2ljdjIuaD4KICNpbmNsdWRlIDxtbWlvLmg+CiAjaW5jbHVkZSA8cGxhdF9hcm0uaD4KKyNpbmNsdWRlIDxzZWN1cmVfcGFydGl0aW9uLmg+CiAjaW5jbHVkZSA8djJtX2RlZi5oPgogI2luY2x1ZGUgIi4uL2Z2cF9kZWYuaCIKIApAQCAtNzksNiArODEsOSBAQAogCU1BUF9ERVZJQ0UwLAogCU1BUF9ERVZJQ0UxLAogCUFSTV9NQVBfTlNfRFJBTTEsCisjaWZkZWYgQUFSQ0g2NAorCUFSTV9NQVBfRFJBTTIsCisjZW5kaWYKICNpZmRlZiBTUERfdHNwZAogCUFSTV9NQVBfVFNQX1NFQ19NRU0sCiAjZW5kaWYKQEAgLTg2LDYgKzkxLDkgQEAKIAkvKiBUbyBhY2Nlc3MgdGhlIFJvb3Qgb2YgVHJ1c3QgUHVibGljIEtleSByZWdpc3RlcnMuICovCiAJTUFQX0RFVklDRTIsCiAjZW5kaWYKKyNpZiBFTkFCTEVfU1BNCisJQVJNX1NQX0lNQUdFX01NQVAsCisjZW5kaWYKICNpZiBBUk1fQkwzMV9JTl9EUkFNCiAJQVJNX01BUF9CTDMxX1NFQ19EUkFNLAogI2VuZGlmCkBAIC0xMDYsMTEgKzExNCwyNyBAQAogI2lmZGVmIElNQUdFX0JMMzEKIGNvbnN0IG1tYXBfcmVnaW9uX3QgcGxhdF9hcm1fbW1hcFtdID0gewogCUFSTV9NQVBfU0hBUkVEX1JBTSwKKwlBUk1fTUFQX0VMM19UWkNfRFJBTSwKIAlWMk1fTUFQX0lPRlBHQSwKIAlNQVBfREVWSUNFMCwKIAlNQVBfREVWSUNFMSwKKwlBUk1fVjJNX01BUF9NRU1fUFJPVEVDVCwKKyNpZiBFTkFCTEVfU1BNCisJQVJNX1NQTV9CVUZfRUwzX01NQVAsCisjZW5kaWYKIAl7MH0KIH07CisKKyNpZiBFTkFCTEVfU1BNICYmIGRlZmluZWQoSU1BR0VfQkwzMSkKK2NvbnN0IG1tYXBfcmVnaW9uX3QgcGxhdF9hcm1fc2VjdXJlX3BhcnRpdGlvbl9tbWFwW10gPSB7CisJVjJNX01BUF9JT0ZQR0FfRUwwLCAvKiBmb3IgdGhlIFVBUlQgKi8KKwlBUk1fU1BfSU1BR0VfTU1BUCwKKwlBUk1fU1BfSU1BR0VfTlNfQlVGX01NQVAsCisJQVJNX1NQX0lNQUdFX1JXX01NQVAsCisJQVJNX1NQTV9CVUZfRUwwX01NQVAsCisJezB9Cit9OworI2VuZGlmCiAjZW5kaWYKICNpZmRlZiBJTUFHRV9CTDMyCiBjb25zdCBtbWFwX3JlZ2lvbl90IHBsYXRfYXJtX21tYXBbXSA9IHsKQEAgLTE1MSw2ICsxNzUsNTcgQEAKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFX1NQTSAmJiBkZWZpbmVkKElNQUdFX0JMMzEpCisvKgorICogQm9vdCBpbmZvcm1hdGlvbiBwYXNzZWQgdG8gYSBzZWN1cmUgcGFydGl0aW9uIGR1cmluZyBpbml0aWFsaXNhdGlvbi4gTGluZWFyCisgKiBpbmRpY2VzIGluIE1QIGluZm9ybWF0aW9uIHdpbGwgYmUgZmlsbGVkIGF0IHJ1bnRpbWUuCisgKi8KK3N0YXRpYyBzZWN1cmVfcGFydGl0aW9uX21wX2luZm9fdCBzcF9tcF9pbmZvW10gPSB7CisJWzBdID0gezB4ODAwMDAwMDAsIDB9LAorCVsxXSA9IHsweDgwMDAwMDAxLCAwfSwKKwlbMl0gPSB7MHg4MDAwMDAwMiwgMH0sCisJWzNdID0gezB4ODAwMDAwMDMsIDB9LAorCVs0XSA9IHsweDgwMDAwMTAwLCAwfSwKKwlbNV0gPSB7MHg4MDAwMDEwMSwgMH0sCisJWzZdID0gezB4ODAwMDAxMDIsIDB9LAorCVs3XSA9IHsweDgwMDAwMTAzLCAwfSwKK307CisKK2NvbnN0IHNlY3VyZV9wYXJ0aXRpb25fYm9vdF9pbmZvX3QgcGxhdF9hcm1fc2VjdXJlX3BhcnRpdGlvbl9ib290X2luZm8gPSB7CisJLmgudHlwZSAgICAgICAgICAgICAgPSBQQVJBTV9TUF9JTUFHRV9CT09UX0lORk8sCisJLmgudmVyc2lvbiAgICAgICAgICAgPSBWRVJTSU9OXzEsCisJLmguc2l6ZSAgICAgICAgICAgICAgPSBzaXplb2Yoc2VjdXJlX3BhcnRpdGlvbl9ib290X2luZm9fdCksCisJLmguYXR0ciAgICAgICAgICAgICAgPSAwLAorCS5zcF9tZW1fYmFzZSAgICAgICAgID0gQVJNX1NQX0lNQUdFX0JBU0UsCisJLnNwX21lbV9saW1pdCAgICAgICAgPSBBUk1fU1BfSU1BR0VfTElNSVQsCisJLnNwX2ltYWdlX2Jhc2UgICAgICAgPSBBUk1fU1BfSU1BR0VfQkFTRSwKKwkuc3Bfc3RhY2tfYmFzZSAgICAgICA9IFBMQVRfU1BfSU1BR0VfU1RBQ0tfQkFTRSwKKwkuc3BfaGVhcF9iYXNlICAgICAgICA9IEFSTV9TUF9JTUFHRV9IRUFQX0JBU0UsCisJLnNwX25zX2NvbW1fYnVmX2Jhc2UgPSBBUk1fU1BfSU1BR0VfTlNfQlVGX0JBU0UsCisJLnNwX3NoYXJlZF9idWZfYmFzZSAgPSBQTEFUX1NQTV9CVUZfQkFTRSwKKwkuc3BfaW1hZ2Vfc2l6ZSAgICAgICA9IEFSTV9TUF9JTUFHRV9TSVpFLAorCS5zcF9wY3B1X3N0YWNrX3NpemUgID0gUExBVF9TUF9JTUFHRV9TVEFDS19QQ1BVX1NJWkUsCisJLnNwX2hlYXBfc2l6ZSAgICAgICAgPSBBUk1fU1BfSU1BR0VfSEVBUF9TSVpFLAorCS5zcF9uc19jb21tX2J1Zl9zaXplID0gQVJNX1NQX0lNQUdFX05TX0JVRl9TSVpFLAorCS5zcF9zaGFyZWRfYnVmX3NpemUgID0gUExBVF9TUE1fQlVGX1NJWkUsCisJLm51bV9zcF9tZW1fcmVnaW9ucyAgPSBBUk1fU1BfSU1BR0VfTlVNX01FTV9SRUdJT05TLAorCS5udW1fY3B1cyAgICAgICAgICAgID0gUExBVEZPUk1fQ09SRV9DT1VOVCwKKwkubXBfaW5mbyAgICAgICAgICAgICA9ICZzcF9tcF9pbmZvWzBdLAorfTsKKworY29uc3Qgc3RydWN0IG1tYXBfcmVnaW9uICpwbGF0X2dldF9zZWN1cmVfcGFydGl0aW9uX21tYXAodm9pZCAqY29va2llKQoreworCXJldHVybiBwbGF0X2FybV9zZWN1cmVfcGFydGl0aW9uX21tYXA7Cit9CisKK2NvbnN0IHN0cnVjdCBzZWN1cmVfcGFydGl0aW9uX2Jvb3RfaW5mbyAqcGxhdF9nZXRfc2VjdXJlX3BhcnRpdGlvbl9ib290X2luZm8oCisJCXZvaWQgKmNvb2tpZSkKK3sKKwlyZXR1cm4gJnBsYXRfYXJtX3NlY3VyZV9wYXJ0aXRpb25fYm9vdF9pbmZvOworfQorCisjZW5kaWYKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEEgc2luZ2xlIGJvb3QgbG9hZGVyIHN0YWNrIGlzIGV4cGVjdGVkIHRvIHdvcmsgb24gYm90aCB0aGUgRm91bmRhdGlvbiBGVlAKICAqIG1vZGVscyBhbmQgdGhlIHR3byBmbGF2b3VycyBvZiB0aGUgQmFzZSBGVlAgbW9kZWxzIChBRU12OCAmIENvcnRleCkuIFRoZQpkaWZmIC0tZ2l0IGEvcGxhdC9hcm0vYm9hcmQvZnZwL2Z2cF9wbS5jIGIvcGxhdC9hcm0vYm9hcmQvZnZwL2Z2cF9wbS5jCmluZGV4IDlhMDIwODkuLjcyODQ1ODQgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2JvYXJkL2Z2cC9mdnBfcG0uYworKysgYi9wbGF0L2FybS9ib2FyZC9mdnAvZnZwX3BtLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTYsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgKi8KQEAgLTksMTAgKzksMTIgQEAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxkZWJ1Zy5oPgogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Z2ljdjMuaD4KICNpbmNsdWRlIDxtbWlvLmg+CiAjaW5jbHVkZSA8cGxhdF9hcm0uaD4KICNpbmNsdWRlIDxwbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHBzY2kuaD4KKyNpbmNsdWRlIDxzcGUuaD4KICNpbmNsdWRlIDx2Mm1fZGVmLmg+CiAjaW5jbHVkZSAiZHJpdmVycy9wd3JjL2Z2cF9wd3JjLmgiCiAjaW5jbHVkZSAiZnZwX2RlZi5oIgpAQCAtMzYsNiArMzgsOSBAQAogCS8qIFN0YXRlLWlkIC0gMHgyMiAqLwogCWFybV9tYWtlX3B3cnN0YXRlX2x2bDEoQVJNX0xPQ0FMX1NUQVRFX09GRiwgQVJNX0xPQ0FMX1NUQVRFX09GRiwKIAkJCUFSTV9QV1JfTFZMMSwgUFNUQVRFX1RZUEVfUE9XRVJET1dOKSwKKwkvKiBTdGF0ZS1pZCAtIDB4MjIyICovCisJYXJtX21ha2VfcHdyc3RhdGVfbHZsMihBUk1fTE9DQUxfU1RBVEVfT0ZGLCBBUk1fTE9DQUxfU1RBVEVfT0ZGLAorCQlBUk1fTE9DQUxfU1RBVEVfT0ZGLCBBUk1fUFdSX0xWTDIsIFBTVEFURV9UWVBFX1BPV0VSRE9XTiksCiAJMCwKIH07CiAjZW5kaWYKQEAgLTUzLDcgKzU4LDcgQEAKIAkgKiBPbiBwb3dlciBkb3duIHdlIG5lZWQgdG8gZGlzYWJsZSBzdGF0aXN0aWNhbCBwcm9maWxpbmcgZXh0ZW5zaW9ucwogCSAqIGJlZm9yZSBleGl0aW5nIGNvaGVyZW5jeS4KIAkgKi8KLQlhcm1fZGlzYWJsZV9zcGUoKTsKKwlzcGVfZGlzYWJsZSgpOwogI2VuZGlmCiAKIAkvKiBEaXNhYmxlIGNvaGVyZW5jeSBpZiB0aGlzIGNsdXN0ZXIgaXMgdG8gYmUgdHVybmVkIG9mZiAqLwpAQCAtNjMsNiArNjgsMTggQEAKIAlmdnBfcHdyY193cml0ZV9wY29mZnIobXBpZHIpOwogfQogCisvKgorICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgaG9va3MgYXZvaWQgc2V0dGluZyB0aGUgR0lDUl9XQUtFUi5TbGVlcCBiaXQKKyAqIG9uIEFSTSBHSUN2MyBpbXBsZW1lbnRhdGlvbnMgb24gRlZQLiBUaGlzIGlzIHJlcXVpcmVkLCBiZWNhdXNlIEZWUCBkb2VzIG5vdAorICogc3VwcG9ydCBTWVNURU1fU1VTUEVORCBhbmQgaXQgaXMgYGZha2VkYCBpbiBmaXJtd2FyZS4gSGVuY2UsIGZvciB3YWtlIHVwCisgKiBmcm9tIGBmYWtlYCBzeXN0ZW0gc3VzcGVuZCB0aGUgR0lDIG11c3Qgbm90IGJlIHBvd2VyZWQgb2ZmLgorICovCit2b2lkIGFybV9naWN2M19kaXN0aWZfcHJlX3NhdmUodW5zaWduZWQgaW50IHByb2NfbnVtKQore30KKwordm9pZCBhcm1fZ2ljdjNfZGlzdGlmX3Bvc3RfcmVzdG9yZSh1bnNpZ25lZCBpbnQgcHJvY19udW0pCit7fQorCiBzdGF0aWMgdm9pZCBmdnBfcG93ZXJfZG9tYWluX29uX2ZpbmlzaF9jb21tb24oY29uc3QgcHNjaV9wb3dlcl9zdGF0ZV90ICp0YXJnZXRfc3RhdGUpCiB7CiAJdW5zaWduZWQgbG9uZyBtcGlkcjsKQEAgLTkwLDYgKzEwNywxMCBAQAogCQkvKiBFbmFibGUgY29oZXJlbmN5IGlmIHRoaXMgY2x1c3RlciB3YXMgb2ZmICovCiAJCWZ2cF9pbnRlcmNvbm5lY3RfZW5hYmxlKCk7CiAJfQorCS8qIFBlcmZvcm0gdGhlIGNvbW1vbiBzeXN0ZW0gc3BlY2lmaWMgb3BlcmF0aW9ucyAqLworCWlmICh0YXJnZXRfc3RhdGUtPnB3cl9kb21haW5fc3RhdGVbQVJNX1BXUl9MVkwyXSA9PQorCQkJCQkJQVJNX0xPQ0FMX1NUQVRFX09GRikKKwkJYXJtX3N5c3RlbV9wd3JfZG9tYWluX3Jlc3VtZSgpOwogCiAJLyoKIAkgKiBDbGVhciBQV0tVUFIuV0VOIGJpdCB0byBlbnN1cmUgaW50ZXJydXB0cyBkbyBub3QgaW50ZXJmZXJlCkBAIC0yMDEsMTMgKzIyMiwxOCBAQAogCSAqIHJlZ2lzdGVyIGNvbnRleHQuCiAJICovCiAKLQkvKiBQcm9ncmFtIHRoZSBwb3dlciBjb250cm9sbGVyIHRvIHBvd2VyIG9mZiB0aGlzIGNwdS4gKi8KLQlmdnBfcHdyY193cml0ZV9wcG9mZnIocmVhZF9tcGlkcl9lbDEoKSk7Ci0KIAkvKiBQZXJmb3JtIHRoZSBjb21tb24gY2x1c3RlciBzcGVjaWZpYyBvcGVyYXRpb25zICovCiAJaWYgKHRhcmdldF9zdGF0ZS0+cHdyX2RvbWFpbl9zdGF0ZVtBUk1fUFdSX0xWTDFdID09CiAJCQkJCUFSTV9MT0NBTF9TVEFURV9PRkYpCiAJCWZ2cF9jbHVzdGVyX3B3cmR3bl9jb21tb24oKTsKKworCS8qIFBlcmZvcm0gdGhlIGNvbW1vbiBzeXN0ZW0gc3BlY2lmaWMgb3BlcmF0aW9ucyAqLworCWlmICh0YXJnZXRfc3RhdGUtPnB3cl9kb21haW5fc3RhdGVbQVJNX1BXUl9MVkwyXSA9PQorCQkJCQkJQVJNX0xPQ0FMX1NUQVRFX09GRikKKwkJYXJtX3N5c3RlbV9wd3JfZG9tYWluX3NhdmUoKTsKKworCS8qIFByb2dyYW0gdGhlIHBvd2VyIGNvbnRyb2xsZXIgdG8gcG93ZXIgb2ZmIHRoaXMgY3B1LiAqLworCWZ2cF9wd3JjX3dyaXRlX3Bwb2ZmcihyZWFkX21waWRyX2VsMSgpKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMwOSw2ICszMzUsNTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogVGhlIEZWUCBkb2Vzbid0IHRydWx5IHN1cHBvcnQgcG93ZXIgbWFuYWdlbWVudCBhdCBTWVNURU0gcG93ZXIgZG9tYWluLiBUaGUKKyAqIFNZU1RFTV9TVVNQRU5EIHdpbGwgYmUgZG93bi1ncmFkZWQgdG8gdGhlIGNsdXN0ZXIgbGV2ZWwgd2l0aGluIHRoZSBwbGF0Zm9ybQorICogbGF5ZXIuIFRoZSBgZmFrZWAgU1lTVEVNX1NVU1BFTkQgYWxsb3dzIHVzIHRvIHZhbGlkYXRlIHNvbWUgb2YgdGhlIGRyaXZlcgorICogc2F2ZSBhbmQgcmVzdG9yZSBzZXF1ZW5jZXMgb24gRlZQLgorICovCit2b2lkIGZ2cF9nZXRfc3lzX3N1c3BlbmRfcG93ZXJfc3RhdGUocHNjaV9wb3dlcl9zdGF0ZV90ICpyZXFfc3RhdGUpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSBBUk1fUFdSX0xWTDA7IGkgPD0gUExBVF9NQVhfUFdSX0xWTDsgaSsrKQorCQlyZXFfc3RhdGUtPnB3cl9kb21haW5fc3RhdGVbaV0gPSBBUk1fTE9DQUxfU1RBVEVfT0ZGOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSGFuZGxlciB0byBmaWx0ZXIgUFNDSSByZXF1ZXN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogVGhlIHN5c3RlbSBwb3dlciBkb21haW4gc3VzcGVuZCBpcyBvbmx5IHN1cHBvcnRlZCBvbmx5IHZpYQorICogUFNDSSBTWVNURU1fU1VTUEVORCBBUEkuIFBTQ0kgQ1BVX1NVU1BFTkQgcmVxdWVzdCB0byBzeXN0ZW0gcG93ZXIgZG9tYWluCisgKiB3aWxsIGJlIGRvd25ncmFkZWQgdG8gdGhlIGxvd2VyIGxldmVsLgorICovCitzdGF0aWMgaW50IGZ2cF92YWxpZGF0ZV9wb3dlcl9zdGF0ZSh1bnNpZ25lZCBpbnQgcG93ZXJfc3RhdGUsCisJCQkgICAgcHNjaV9wb3dlcl9zdGF0ZV90ICpyZXFfc3RhdGUpCit7CisJaW50IHJjOworCXJjID0gYXJtX3ZhbGlkYXRlX3Bvd2VyX3N0YXRlKHBvd2VyX3N0YXRlLCByZXFfc3RhdGUpOworCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB0aGUgc3lzdGVtIHBvd2VyIGRvbWFpbiBsZXZlbCBpcyBuZXZlciBzdXNwZW5kZWQKKwkgKiB2aWEgUFNDSSBDUFUgU1VTUEVORCBBUEkuIEN1cnJlbnRseSBzeXN0ZW0gc3VzcGVuZCBpcyBvbmx5CisJICogc3VwcG9ydGVkIHZpYSBQU0NJIFNZU1RFTSBTVVNQRU5EIEFQSS4KKwkgKi8KKwlyZXFfc3RhdGUtPnB3cl9kb21haW5fc3RhdGVbQVJNX1BXUl9MVkwyXSA9IEFSTV9MT0NBTF9TVEFURV9SVU47CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ3VzdG9tIGB0cmFuc2xhdGVfcG93ZXJfc3RhdGVfYnlfbXBpZHJgIGhhbmRsZXIgZm9yIEZWUC4gVW5saWtlIGluIHRoZQorICogYGZ2cF92YWxpZGF0ZV9wb3dlcl9zdGF0ZWAsIHdlIGRvIG5vdCBkb3duZ3JhZGUgdGhlIHN5c3RlbSBwb3dlcgorICogZG9tYWluIGxldmVsIHJlcXVlc3QgaW4gYHBvd2VyX3N0YXRlYCBhcyBpdCB3aWxsIGJlIHVzZWQgdG8gcXVlcnkgdGhlCisgKiBQU0NJX1NUQVRfQ09VTlQvUkVTSURFTkNZIGF0IHRoZSBzeXN0ZW0gcG93ZXIgZG9tYWluIGxldmVsLgorICovCitzdGF0aWMgaW50IGZ2cF90cmFuc2xhdGVfcG93ZXJfc3RhdGVfYnlfbXBpZHIodV9yZWdpc3Rlcl90IG1waWRyLAorCQl1bnNpZ25lZCBpbnQgcG93ZXJfc3RhdGUsCisJCXBzY2lfcG93ZXJfc3RhdGVfdCAqb3V0cHV0X3N0YXRlKQoreworCXJldHVybiBhcm1fdmFsaWRhdGVfcG93ZXJfc3RhdGUocG93ZXJfc3RhdGUsIG91dHB1dF9zdGF0ZSk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBFeHBvcnQgdGhlIHBsYXRmb3JtIGhhbmRsZXJzIHZpYSBwbGF0X2FybV9wc2NpX3BtX29wcy4gVGhlIEFSTSBTdGFuZGFyZAogICogcGxhdGZvcm0gbGF5ZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVnaXN0ZXJpbmcgdGhlIGhhbmRsZXJzIHdpdGggUFNDSS4KQEAgLTMyMiw3ICszOTgsMjYgQEAKIAkucHdyX2RvbWFpbl9zdXNwZW5kX2ZpbmlzaCA9IGZ2cF9wd3JfZG9tYWluX3N1c3BlbmRfZmluaXNoLAogCS5zeXN0ZW1fb2ZmID0gZnZwX3N5c3RlbV9vZmYsCiAJLnN5c3RlbV9yZXNldCA9IGZ2cF9zeXN0ZW1fcmVzZXQsCi0JLnZhbGlkYXRlX3Bvd2VyX3N0YXRlID0gYXJtX3ZhbGlkYXRlX3Bvd2VyX3N0YXRlLAotCS52YWxpZGF0ZV9uc19lbnRyeXBvaW50ID0gYXJtX3ZhbGlkYXRlX25zX2VudHJ5cG9pbnQsCi0JLmdldF9ub2RlX2h3X3N0YXRlID0gZnZwX25vZGVfaHdfc3RhdGUKKwkudmFsaWRhdGVfcG93ZXJfc3RhdGUgPSBmdnBfdmFsaWRhdGVfcG93ZXJfc3RhdGUsCisJLnZhbGlkYXRlX25zX2VudHJ5cG9pbnQgPSBhcm1fdmFsaWRhdGVfcHNjaV9lbnRyeXBvaW50LAorCS50cmFuc2xhdGVfcG93ZXJfc3RhdGVfYnlfbXBpZHIgPSBmdnBfdHJhbnNsYXRlX3Bvd2VyX3N0YXRlX2J5X21waWRyLAorCS5nZXRfbm9kZV9od19zdGF0ZSA9IGZ2cF9ub2RlX2h3X3N0YXRlLAorI2lmICFBUk1fQkwzMV9JTl9EUkFNCisJLyoKKwkgKiBUaGUgVHJ1c3Rab25lIENvbnRyb2xsZXIgaXMgc2V0IHVwIGR1cmluZyB0aGUgd2FybWJvb3Qgc2VxdWVuY2UgYWZ0ZXIKKwkgKiByZXN1bWluZyB0aGUgQ1BVIGZyb20gYSBTWVNURU1fU1VTUEVORC4gSWYgQkwzMSBpcyBsb2NhdGVkIGluIFNSQU0KKwkgKiB0aGlzIGlzICBub3QgYSBwcm9ibGVtIGJ1dCwgaWYgaXQgaXMgaW4gVFpDLXNlY3VyZWQgRFJBTSwgaXQgdHJpZXMgdG8KKwkgKiByZWNvbmZpZ3VyZSB0aGUgc2FtZSBtZW1vcnkgaXQgaXMgcnVubmluZyBvbiwgY2F1c2luZyBhbiBleGNlcHRpb24uCisJICovCisJLmdldF9zeXNfc3VzcGVuZF9wb3dlcl9zdGF0ZSA9IGZ2cF9nZXRfc3lzX3N1c3BlbmRfcG93ZXJfc3RhdGUsCisjZW5kaWYKKyNpZiAhUkVTRVRfVE9fQkwzMSAmJiAhUkVTRVRfVE9fU1BfTUlOCisJLyoKKwkgKiBtZW1fcHJvdGVjdCBpcyBub3Qgc3VwcG9ydGVkIGluIFJFU0VUX1RPX0JMMzEgYW5kIFJFU0VUX1RPX1NQX01JTiwKKwkgKiBhcyB0aGF0IHdvdWxkIHJlcXVpcmUgbWFwcGluZyBpbiBhbGwgb2YgTlMgRFJBTSBpbnRvIEJMMzEgb3IgQkwzMi4KKwkgKi8KKwkubWVtX3Byb3RlY3RfY2hrCT0gYXJtX3BzY2lfbWVtX3Byb3RlY3RfY2hrLAorCS5yZWFkX21lbV9wcm90ZWN0CT0gYXJtX3BzY2lfcmVhZF9tZW1fcHJvdGVjdCwKKwkud3JpdGVfbWVtX3Byb3RlY3QJPSBhcm1fbm9yX3BzY2lfd3JpdGVfbWVtX3Byb3RlY3QsCisjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9wbGF0L2FybS9ib2FyZC9mdnAvZnZwX3RvcG9sb2d5LmMgYi9wbGF0L2FybS9ib2FyZC9mdnAvZnZwX3RvcG9sb2d5LmMKaW5kZXggY2YxNDkyYi4uNGEwMDdmNCAxMDA2NDQKLS0tIGEvcGxhdC9hcm0vYm9hcmQvZnZwL2Z2cF90b3BvbG9neS5jCisrKyBiL3BsYXQvYXJtL2JvYXJkL2Z2cC9mdnBfdG9wb2xvZ3kuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgImRyaXZlcnMvcHdyYy9mdnBfcHdyYy5oIgogCiAvKiBUaGUgRlZQIHBvd2VyIGRvbWFpbiB0cmVlIGRlc2NyaXB0b3IgKi8KLXVuc2lnbmVkIGNoYXIgZnZwX3Bvd2VyX2RvbWFpbl90cmVlX2Rlc2NbRlZQX0NMVVNURVJfQ09VTlQgKyAxXTsKK3Vuc2lnbmVkIGNoYXIgZnZwX3Bvd2VyX2RvbWFpbl90cmVlX2Rlc2NbRlZQX0NMVVNURVJfQ09VTlQgKyAyXTsKIAogCiBDQVNTRVJUKEZWUF9DTFVTVEVSX0NPVU5UICYmIEZWUF9DTFVTVEVSX0NPVU5UIDw9IDI1NiwgYXNzZXJ0X2ludmFsaWRfZnZwX2NsdXN0ZXJfY291bnQpOwpAQCAtMjMsMTggKzIzLDE4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogY29uc3QgdW5zaWduZWQgY2hhciAqcGxhdF9nZXRfcG93ZXJfZG9tYWluX3RyZWVfZGVzYyh2b2lkKQogewotCWludCBpOworCXVuc2lnbmVkIGludCBpOwogCiAJLyoKLQkgKiBUaGUgRlZQIHBvd2VyIGRvbWFpbiB0cmVlIGRvZXMgbm90IGhhdmUgYSBzaW5nbGUgc3lzdGVtIGxldmVsIHBvd2VyIGRvbWFpbgotCSAqIGkuZS4gYSBzaW5nbGUgcm9vdCBub2RlLiBUaGUgZmlyc3QgZW50cnkgaW4gdGhlIHBvd2VyIGRvbWFpbiBkZXNjcmlwdG9yCi0JICogc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcG93ZXIgZG9tYWlucyBhdCB0aGUgaGlnaGVzdCBwb3dlciBsZXZlbC4gRm9yIHRoZSBGVlAKLQkgKiB0aGlzIGlzIHRoZSBudW1iZXIgb2YgY2x1c3RlciBwb3dlciBkb21haW5zLgorCSAqIFRoZSBoaWdoZXN0IGxldmVsIGlzIHRoZSBzeXN0ZW0gbGV2ZWwuIFRoZSBuZXh0IGxldmVsIGlzIGNvbnN0aXR1dGVkCisJICogYnkgY2x1c3RlcnMgYW5kIHRoZW4gY29yZXMgaW4gY2x1c3RlcnMuCiAJICovCi0JZnZwX3Bvd2VyX2RvbWFpbl90cmVlX2Rlc2NbMF0gPSBGVlBfQ0xVU1RFUl9DT1VOVDsKKwlmdnBfcG93ZXJfZG9tYWluX3RyZWVfZGVzY1swXSA9IDE7CisJZnZwX3Bvd2VyX2RvbWFpbl90cmVlX2Rlc2NbMV0gPSBGVlBfQ0xVU1RFUl9DT1VOVDsKIAogCWZvciAoaSA9IDA7IGkgPCBGVlBfQ0xVU1RFUl9DT1VOVDsgaSsrKQotCQlmdnBfcG93ZXJfZG9tYWluX3RyZWVfZGVzY1tpICsgMV0gPSBGVlBfTUFYX0NQVVNfUEVSX0NMVVNURVI7CisJCWZ2cF9wb3dlcl9kb21haW5fdHJlZV9kZXNjW2kgKyAyXSA9IEZWUF9NQVhfQ1BVU19QRVJfQ0xVU1RFUjsKKwogCiAJcmV0dXJuIGZ2cF9wb3dlcl9kb21haW5fdHJlZV9kZXNjOwogfQpkaWZmIC0tZ2l0IGEvcGxhdC9hcm0vYm9hcmQvZnZwL2luY2x1ZGUvcGxhdC5sZC5TIGIvcGxhdC9hcm0vYm9hcmQvZnZwL2luY2x1ZGUvcGxhdC5sZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YzNkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0L2FybS9ib2FyZC9mdnAvaW5jbHVkZS9wbGF0LmxkLlMKQEAgLTAsMCArMSwxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKyNpZm5kZWYgX19QTEFUX0xEX1NfXworI2RlZmluZSBfX1BMQVRfTERfU19fCisKKyNpbmNsdWRlIDxhcm1fY29tbW9uLmxkLlM+CisKKyNlbmRpZiAvKiBfX1BMQVRfTERfU19fICovCmRpZmYgLS1naXQgYS9wbGF0L2FybS9ib2FyZC9mdnAvaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaCBiL3BsYXQvYXJtL2JvYXJkL2Z2cC9pbmNsdWRlL3BsYXRmb3JtX2RlZi5oCmluZGV4IGJmMDM4ZTkuLjcwODBmYzMgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2JvYXJkL2Z2cC9pbmNsdWRlL3BsYXRmb3JtX2RlZi5oCisrKyBiL3BsYXQvYXJtL2JvYXJkL2Z2cC9pbmNsdWRlL3BsYXRmb3JtX2RlZi5oCkBAIC04LDEwICs4LDExIEBACiAjZGVmaW5lIF9fUExBVEZPUk1fREVGX0hfXwogCiAjaW5jbHVkZSA8YXJtX2RlZi5oPgorI2luY2x1ZGUgPGFybV9zcG1fZGVmLmg+CiAjaW5jbHVkZSA8Ym9hcmRfYXJtX2RlZi5oPgogI2luY2x1ZGUgPGNvbW1vbl9kZWYuaD4KICNpbmNsdWRlIDx0emM0MDAuaD4KLSNpbmNsdWRlIDx1dGlscy5oPgorI2luY2x1ZGUgPHV0aWxzX2RlZi5oPgogI2luY2x1ZGUgPHYybV9kZWYuaD4KICNpbmNsdWRlICIuLi9mdnBfZGVmLmgiCiAKQEAgLTIwLDkgKzIxLDkgQEAKIAkoRlZQX0NMVVNURVJfQ09VTlQgKiBGVlBfTUFYX0NQVVNfUEVSX0NMVVNURVIgKiBGVlBfTUFYX1BFX1BFUl9DUFUpCiAKICNkZWZpbmUgUExBVF9OVU1fUFdSX0RPTUFJTlMJCShGVlBfQ0xVU1RFUl9DT1VOVCArIFwKLQkJCQkJUExBVEZPUk1fQ09SRV9DT1VOVCkKKwkJCQkJUExBVEZPUk1fQ09SRV9DT1VOVCkgKyAxCiAKLSNkZWZpbmUgUExBVF9NQVhfUFdSX0xWTAkJQVJNX1BXUl9MVkwxCisjZGVmaW5lIFBMQVRfTUFYX1BXUl9MVkwJCUFSTV9QV1JfTFZMMgogCiAvKgogICogT3RoZXIgcGxhdGZvcm0gcG9ydGluZyBkZWZpbml0aW9ucyBhcmUgcHJvdmlkZWQgYnkgaW5jbHVkZWQgaGVhZGVycwpAQCAtMTM2LDQgKzEzNywxMyBAQAogCiAjZGVmaW5lIFBMQVRfQVJNX0cwX0lSUVMJCUFSTV9HMF9JUlFTCiAKKyNkZWZpbmUgUExBVF9BUk1fRzFTX0lSUV9QUk9QUyhncnApIFwKKwlBUk1fRzFTX0lSUV9QUk9QUyhncnApLCBcCisJSU5UUl9QUk9QX0RFU0MoRlZQX0lSUV9UWl9XRE9HLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0xFVkVMKSwgXAorCUlOVFJfUFJPUF9ERVNDKEZWUF9JUlFfU0VDX1NZU19USU1FUiwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19MRVZFTCkKKworI2RlZmluZSBQTEFUX0FSTV9HMF9JUlFfUFJPUFMoZ3JwKQlBUk1fRzBfSVJRX1BST1BTKGdycCkKKwogI2VuZGlmIC8qIF9fUExBVEZPUk1fREVGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdC9hcm0vYm9hcmQvZnZwL3BsYXRmb3JtLm1rIGIvcGxhdC9hcm0vYm9hcmQvZnZwL3BsYXRmb3JtLm1rCmluZGV4IDZkOGFhNWYuLjdlZGJkM2QgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2JvYXJkL2Z2cC9wbGF0Zm9ybS5taworKysgYi9wbGF0L2FybS9ib2FyZC9mdnAvcGxhdGZvcm0ubWsKQEAgLTQ4LDcgKzQ4LDggQEAKIAogIyBDaG9vc2UgdGhlIEdJQyBzb3VyY2VzIGRlcGVuZGluZyB1cG9uIHRoZSBob3cgdGhlIEZWUCB3aWxsIGJlIGludm9rZWQKIGlmZXEgKCR7RlZQX1VTRV9HSUNfRFJJVkVSfSwgRlZQX0dJQ1YzKQotRlZQX0dJQ19TT1VSQ0VTCQk6PQkke0ZWUF9HSUNWM19TT1VSQ0VTfQorRlZQX0dJQ19TT1VSQ0VTCQk6PQkke0ZWUF9HSUNWM19TT1VSQ0VTfQkJCVwKKwkJCQlkcml2ZXJzL2FybS9naWMvdjMvZ2ljNTAwLmMKIGVsc2UgaWZlcSAoJHtGVlBfVVNFX0dJQ19EUklWRVJ9LEZWUF9HSUM2MDApCiBGVlBfR0lDX1NPVVJDRVMJCTo9CSR7RlZQX0dJQ1YzX1NPVVJDRVN9CQkJXAogCQkJCWRyaXZlcnMvYXJtL2dpYy92My9naWM2MDAuYwpAQCAtMTQ2LDYgKzE0Nyw5IEBACiAjIERpc2FibGUgdGhlIFBTQ0kgcGxhdGZvcm0gY29tcGF0aWJpbGl0eSBsYXllcgogRU5BQkxFX1BMQVRfQ09NUEFUCTo9IAkwCiAKKyMgRW5hYmxlIEFjdGl2aXR5IE1vbml0b3IgVW5pdCBleHRlbnNpb25zIGJ5IGRlZmF1bHQKK0VOQUJMRV9BTVUJCQk6PQkxCisKIGlmbmVxICgke0VOQUJMRV9TVEFDS19QUk9URUNUT1J9LDApCiBQTEFUX0JMX0NPTU1PTl9TT1VSQ0VTCSs9CXBsYXQvYXJtL2JvYXJkL2Z2cC9mdnBfc3RhY2tfcHJvdGVjdG9yLmMKIGVuZGlmCkBAIC0xNTQsNSArMTU4LDggQEAKICAgICBORUVEX0JMMzIgOj0geWVzCiBlbmRpZgogCisjIEFkZCBzdXBwb3J0IGZvciBwbGF0Zm9ybSBzdXBwbGllZCBsaW5rZXIgc2NyaXB0IGZvciBCTDMxIGJ1aWxkCiskKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsUExBVF9FWFRSQV9MRF9TQ1JJUFQpKQorCiBpbmNsdWRlIHBsYXQvYXJtL2JvYXJkL2NvbW1vbi9ib2FyZF9jb21tb24ubWsKIGluY2x1ZGUgcGxhdC9hcm0vY29tbW9uL2FybV9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3BsYXQvYXJtL2JvYXJkL2Z2cC9zcF9taW4vc3BfbWluLWZ2cC5tayBiL3BsYXQvYXJtL2JvYXJkL2Z2cC9zcF9taW4vc3BfbWluLWZ2cC5tawppbmRleCA4NjRkZjFiLi5iMzcwZmQ1IDEwMDY0NAotLS0gYS9wbGF0L2FybS9ib2FyZC9mdnAvc3BfbWluL3NwX21pbi1mdnAubWsKKysrIGIvcGxhdC9hcm0vYm9hcmQvZnZwL3NwX21pbi9zcF9taW4tZnZwLm1rCkBAIC01LDExICs1LDE0IEBACiAjCiAKICMgU1BfTUlOIHNvdXJjZSBmaWxlcyBzcGVjaWZpYyB0byBGVlAgcGxhdGZvcm0KLUJMMzJfU09VUkNFUwkJKz0JcGxhdC9hcm0vYm9hcmQvZnZwL2FhcmNoMzIvZnZwX2hlbHBlcnMuUwlcCitCTDMyX1NPVVJDRVMJCSs9CWxpYi91dGlscy9tZW1fcmVnaW9uLmMJCQkJXAorCQkJCXBsYXQvYXJtL2JvYXJkL2Z2cC9hYXJjaDMyL2Z2cF9oZWxwZXJzLlMJXAogCQkJCXBsYXQvYXJtL2JvYXJkL2Z2cC9kcml2ZXJzL3B3cmMvZnZwX3B3cmMuYwlcCiAJCQkJcGxhdC9hcm0vYm9hcmQvZnZwL2Z2cF9wbS5jCQkJXAogCQkJCXBsYXQvYXJtL2JvYXJkL2Z2cC9mdnBfdG9wb2xvZ3kuYwkJXAogCQkJCXBsYXQvYXJtL2JvYXJkL2Z2cC9zcF9taW4vZnZwX3NwX21pbl9zZXR1cC5jCVwKKwkJCQlwbGF0L2FybS9ib2FyZC9jb21tb24vZHJpdmVycy9ub3JmbGFzaC9ub3JmbGFzaC5jCVwKKwkJCQlwbGF0L2FybS9jb21tb24vYXJtX25vcl9wc2NpX21lbV9wcm90ZWN0LmMJXAogCQkJCSR7RlZQX0NQVV9MSUJTfQkJCQkJXAogCQkJCSR7RlZQX0dJQ19TT1VSQ0VTfQkJCQlcCiAJCQkJJHtGVlBfSU5URVJDT05ORUNUX1NPVVJDRVN9CQkJXApkaWZmIC0tZ2l0IGEvcGxhdC9hcm0vYm9hcmQvZnZwL3RzcC90c3AtZnZwLm1rIGIvcGxhdC9hcm0vYm9hcmQvZnZwL3RzcC90c3AtZnZwLm1rCmluZGV4IDg4MDA3MmMuLjg2MWZlNzIgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2JvYXJkL2Z2cC90c3AvdHNwLWZ2cC5taworKysgYi9wbGF0L2FybS9ib2FyZC9mdnAvdHNwL3RzcC1mdnAubWsKQEAgLTEsMTIgKzEsMTMgQEAKICMKLSMgQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxMy0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAjCiAKICMgVFNQIHNvdXJjZSBmaWxlcyBzcGVjaWZpYyB0byBGVlAgcGxhdGZvcm0KLUJMMzJfU09VUkNFUwkJKz0JcGxhdC9hcm0vYm9hcmQvZnZwL2Z2cF90b3BvbG9neS5jCQlcCitCTDMyX1NPVVJDRVMJCSs9CXBsYXQvYXJtL2JvYXJkL2Z2cC9hYXJjaDY0L2Z2cF9oZWxwZXJzLlMJXAogCQkJCXBsYXQvYXJtL2JvYXJkL2Z2cC9kcml2ZXJzL3B3cmMvZnZwX3B3cmMuYwlcCisJCQkJcGxhdC9hcm0vYm9hcmQvZnZwL2Z2cF90b3BvbG9neS5jCQlcCiAJCQkJcGxhdC9hcm0vYm9hcmQvZnZwL3RzcC9mdnBfdHNwX3NldHVwLmMJCVwKIAkJCQkke0ZWUF9HSUNfU09VUkNFU30KIApkaWZmIC0tZ2l0IGEvcGxhdC9hcm0vYm9hcmQvanVuby9pbmNsdWRlL3BsYXRmb3JtX2RlZi5oIGIvcGxhdC9hcm0vYm9hcmQvanVuby9pbmNsdWRlL3BsYXRmb3JtX2RlZi5oCmluZGV4IGYxNzE0ZTEuLmU0NzVlY2UgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2JvYXJkL2p1bm8vaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaAorKysgYi9wbGF0L2FybS9ib2FyZC9qdW5vL2luY2x1ZGUvcGxhdGZvcm1fZGVmLmgKQEAgLTEyLDYgKzEyLDkgQEAKICNpbmNsdWRlIDxib2FyZF9jc3NfZGVmLmg+CiAjaW5jbHVkZSA8Y29tbW9uX2RlZi5oPgogI2luY2x1ZGUgPGNzc19kZWYuaD4KKyNpZiBUUlVTVEVEX0JPQVJEX0JPT1QKKyNpbmNsdWRlIDxtYmVkdGxzX2NvbmZpZy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8c29jX2Nzc19kZWYuaD4KICNpbmNsdWRlIDx0emM0MDAuaD4KICNpbmNsdWRlIDx2Mm1fZGVmLmg+CkBAIC02OCwxMSArNzEsMTEgQEAKIAogI2lmZGVmIElNQUdFX0JMMgogI2lmZGVmIFNQRF9vcHRlZWQKLSMgZGVmaW5lIFBMQVRfQVJNX01NQVBfRU5UUklFUwkJOQotIyBkZWZpbmUgTUFYX1hMQVRfVEFCTEVTCQk0CisjIGRlZmluZSBQTEFUX0FSTV9NTUFQX0VOVFJJRVMJCTExCisjIGRlZmluZSBNQVhfWExBVF9UQUJMRVMJCTUKICNlbHNlCi0jIGRlZmluZSBQTEFUX0FSTV9NTUFQX0VOVFJJRVMJCTgKLSMgZGVmaW5lIE1BWF9YTEFUX1RBQkxFUwkJMworIyBkZWZpbmUgUExBVF9BUk1fTU1BUF9FTlRSSUVTCQkxMAorIyBkZWZpbmUgTUFYX1hMQVRfVEFCTEVTCQk0CiAjZW5kaWYKICNlbmRpZgogCkBAIC04Miw4ICs4NSw4IEBACiAjZW5kaWYKIAogI2lmZGVmIElNQUdFX0JMMzEKLSMgIGRlZmluZSBQTEFUX0FSTV9NTUFQX0VOVFJJRVMJCTUKLSMgIGRlZmluZSBNQVhfWExBVF9UQUJMRVMJCTIKKyMgIGRlZmluZSBQTEFUX0FSTV9NTUFQX0VOVFJJRVMJCTcKKyMgIGRlZmluZSBNQVhfWExBVF9UQUJMRVMJCTMKICNlbmRpZgogCiAjaWZkZWYgSU1BR0VfQkwzMgpAQCAtOTYsNyArOTksNyBAQAogICogcGx1cyBhIGxpdHRsZSBzcGFjZSBmb3IgZ3Jvd3RoLgogICovCiAjaWYgVFJVU1RFRF9CT0FSRF9CT09UCi0jIGRlZmluZSBQTEFUX0FSTV9NQVhfQkwxX1JXX1NJWkUJMHg5MDAwCisjIGRlZmluZSBQTEFUX0FSTV9NQVhfQkwxX1JXX1NJWkUJMHhBMDAwCiAjZWxzZQogIyBkZWZpbmUgUExBVF9BUk1fTUFYX0JMMV9SV19TSVpFCTB4NjAwMAogI2VuZGlmCkBAIC0xMDYsNyArMTA5LDExIEBACiAgKiBsaXR0bGUgc3BhY2UgZm9yIGdyb3d0aC4KICAqLwogI2lmIFRSVVNURURfQk9BUkRfQk9PVAotIyBkZWZpbmUgUExBVF9BUk1fTUFYX0JMMl9TSVpFCQkweDE4MDAwCisjaWYgVEZfTUJFRFRMU19LRVlfQUxHX0lEID09IFRGX01CRURUTFNfUlNBX0FORF9FQ0RTQQorIyBkZWZpbmUgUExBVF9BUk1fTUFYX0JMMl9TSVpFCQkweDFFMDAwCisjZWxzZQorIyBkZWZpbmUgUExBVF9BUk1fTUFYX0JMMl9TSVpFCQkweDFBMDAwCisjZW5kaWYKICNlbHNlCiAjIGRlZmluZSBQTEFUX0FSTV9NQVhfQkwyX1NJWkUJCTB4QzAwMAogI2VuZGlmCkBAIC0xMTQsOCArMTIxLDIxIEBACiAvKgogICogUExBVF9BUk1fTUFYX0JMMzFfU0laRSBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBjdXJyZW50IEJMMzEgZGVidWcgc2l6ZSBwbHVzIGEKICAqIGxpdHRsZSBzcGFjZSBmb3IgZ3Jvd3RoLgorICogU0NQX0JMMiBpbWFnZSBpcyBsb2FkZWQgaW50byB0aGUgc3BhY2UgQkwzMSAtPiBCTDFfUldfQkFTRS4KKyAqIEZvciBUQkIgdXNlIGNhc2UsIFBMQVRfQVJNX01BWF9CTDFfUldfU0laRSBoYXMgYmVlbiBpbmNyZWFzZWQgYW5kIHRoZXJlZm9yZQorICogUExBVF9BUk1fTUFYX0JMMzFfU0laRSBoYXMgYmVlbiBpbmNyZWFzZWQgdG8gZW5zdXJlIFNDUF9CTDIgaGFzIHRoZSBzYW1lCisgKiBzcGFjZSBhdmFpbGFibGUuCiAgKi8KLSNkZWZpbmUgUExBVF9BUk1fTUFYX0JMMzFfU0laRQkJMHgxRDAwMAorI2RlZmluZSBQTEFUX0FSTV9NQVhfQkwzMV9TSVpFCQkweDFFMDAwCisKKyNpZiBKVU5PX0FBUkNIMzJfRUwzX1JVTlRJTUUKKy8qCisgKiBQTEFUX0FSTV9NQVhfQkwzMl9TSVpFIGlzIGNhbGN1bGF0ZWQgZm9yIFNQX01JTiBhcyB0aGUgQUFyY2gzMiBTZWN1cmUKKyAqIFBheWxvYWQuIFdlIGFsc28gbmVlZCB0byB0YWtlIGNhcmUgb2YgU0NQX0JMMiBzaXplIGFzIHdlbGwsIGFzIHRoZSBTQ1BfQkwyCisgKiBpcyBsb2FkZWQgaW50byB0aGUgc3BhY2UgQkwzMiAtPiBCTDFfUldfQkFTRQorICovCisjIGRlZmluZSBQTEFUX0FSTV9NQVhfQkwzMl9TSVpFCQkweDFFMDAwCisjZW5kaWYKIAogLyoKICAqIFNpbmNlIGZyZWUgU1JBTSBzcGFjZSBpcyBzY2FudCwgZW5hYmxlIHRoZSBBU1NFUlRJT04gbWVzc2FnZSBzaXplCkBAIC0xODksMjMgKzIwOSwyNyBAQAogICovCiAjZGVmaW5lIFBMQVRfQ1NTX01BWF9TQ1BfQkwyVV9TSVpFCTB4MTQwMDAKIAotLyoKLSAqIERlZmluZSBhIGxpc3Qgb2YgR3JvdXAgMSBTZWN1cmUgYW5kIEdyb3VwIDAgaW50ZXJydXB0cyBhcyBwZXIgR0lDdjMKLSAqIHRlcm1pbm9sb2d5LiBPbiBhIEdJQ3YyIHN5c3RlbSBvciBtb2RlLCB0aGUgbGlzdHMgd2lsbCBiZSBtZXJnZWQgYW5kIHRyZWF0ZWQKLSAqIGFzIEdyb3VwIDAgaW50ZXJydXB0cy4KLSAqLwotI2RlZmluZSBQTEFUX0FSTV9HMVNfSVJRUwkJQ1NTX0cxU19JUlFTLAkJCVwKLQkJCQkJQVJNX0cxU19JUlFTLAkJCVwKLQkJCQkJSlVOT19JUlFfRE1BX1NNTVUsCQlcCi0JCQkJCUpVTk9fSVJRX0hETENEMF9TTU1VLAkJXAotCQkJCQlKVU5PX0lSUV9IRExDRDFfU01NVSwJCVwKLQkJCQkJSlVOT19JUlFfVVNCX1NNTVUsCQlcCi0JCQkJCUpVTk9fSVJRX1RISU5fTElOS1NfU01NVSwJXAotCQkJCQlKVU5PX0lSUV9TRUNfSTJDLAkJXAotCQkJCQlKVU5PX0lSUV9HUFVfU01NVV8xLAkJXAotCQkJCQlKVU5PX0lSUV9FVFJfU01NVQorI2RlZmluZSBQTEFUX0FSTV9HMVNfSVJRX1BST1BTKGdycCkgXAorCUNTU19HMVNfSVJRX1BST1BTKGdycCksIFwKKwlBUk1fRzFTX0lSUV9QUk9QUyhncnApLCBcCisJSU5UUl9QUk9QX0RFU0MoSlVOT19JUlFfRE1BX1NNTVUsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgXAorCQlncnAsIEdJQ19JTlRSX0NGR19MRVZFTCksIFwKKwlJTlRSX1BST1BfREVTQyhKVU5PX0lSUV9IRExDRDBfU01NVSwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBcCisJCWdycCwgR0lDX0lOVFJfQ0ZHX0xFVkVMKSwgXAorCUlOVFJfUFJPUF9ERVNDKEpVTk9fSVJRX0hETENEMV9TTU1VLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIFwKKwkJZ3JwLCBHSUNfSU5UUl9DRkdfTEVWRUwpLCBcCisJSU5UUl9QUk9QX0RFU0MoSlVOT19JUlFfVVNCX1NNTVUsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgXAorCQlncnAsIEdJQ19JTlRSX0NGR19MRVZFTCksIFwKKwlJTlRSX1BST1BfREVTQyhKVU5PX0lSUV9USElOX0xJTktTX1NNTVUsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgXAorCQlncnAsIEdJQ19JTlRSX0NGR19MRVZFTCksIFwKKwlJTlRSX1BST1BfREVTQyhKVU5PX0lSUV9TRUNfSTJDLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIFwKKwkJZ3JwLCBHSUNfSU5UUl9DRkdfTEVWRUwpLCBcCisJSU5UUl9QUk9QX0RFU0MoSlVOT19JUlFfR1BVX1NNTVVfMSwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBcCisJCWdycCwgR0lDX0lOVFJfQ0ZHX0xFVkVMKSwgXAorCUlOVFJfUFJPUF9ERVNDKEpVTk9fSVJRX0VUUl9TTU1VLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIFwKKwkJZ3JwLCBHSUNfSU5UUl9DRkdfTEVWRUwpCiAKLSNkZWZpbmUgUExBVF9BUk1fRzBfSVJRUwkJQVJNX0cwX0lSUVMKKyNkZWZpbmUgUExBVF9BUk1fRzBfSVJRX1BST1BTKGdycCkJQVJNX0cwX0lSUV9QUk9QUyhncnApCiAKIC8qCiAgKiBSZXF1aXJlZCBBUk0gQ1NTIFNvQyBiYXNlZCBwbGF0Zm9ybSBwb3J0aW5nIGRlZmluaXRpb25zCmRpZmYgLS1naXQgYS9wbGF0L2FybS9ib2FyZC9qdW5vL2p1bm9fYmwyX3NldHVwLmMgYi9wbGF0L2FybS9ib2FyZC9qdW5vL2p1bm9fYmwyX3NldHVwLmMKaW5kZXggMjc3MWUwZi4uY2VkZWY2NiAxMDA2NDQKLS0tIGEvcGxhdC9hcm0vYm9hcmQvanVuby9qdW5vX2JsMl9zZXR1cC5jCisrKyBiL3BsYXQvYXJtL2JvYXJkL2p1bm8vanVub19ibDJfc2V0dXAuYwpAQCAtMjksMzMgKzI5LDQgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0KLSNpZiAhQ1NTX1VTRV9TQ01JX1NEU19EUklWRVIKLS8qCi0gKiBXZSBuZWVkIHRvIG92ZXJyaWRlIHNvbWUgb2YgdGhlIHBsYXRmb3JtIGZ1bmN0aW9ucyB3aGVuIGJvb3RpbmcgU1BfTUlOCi0gKiBvbiBKdW5vIEFBcmNoMzIuIFRoZXNlIG5lZWRzIHRvIGJlIGRvbmUgb25seSBmb3IgU0NQSS9CT00gU0NQIHN5c3RlbXMgYXMKLSAqIGluIGNhc2Ugb2YgU0RTLCB0aGUgc3RydWN0dXJlcyByZW1haW4gaW4gbWVtb3J5IGFuZCBkb2Vzbid0IG5lZWQgdG8gYmUKLSAqIG92ZXJ3cml0dGVuLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2NwX2Jvb3RfY29uZmlnOwotCi12b2lkIGJsMl9lYXJseV9wbGF0Zm9ybV9zZXR1cChtZW1pbmZvX3QgKm1lbV9sYXlvdXQpCi17Ci0JYXJtX2JsMl9lYXJseV9wbGF0Zm9ybV9zZXR1cChtZW1fbGF5b3V0KTsKLQotCS8qIFNhdmUgU0NQIEJvb3QgY29uZmlnIGJlZm9yZSBpdCBnZXRzIG92ZXJ3cml0dGVuIGJ5IFNDUF9CTDIgbG9hZGluZyAqLwotCVZFUkJPU0UoIkJMMjogU2F2aW5nIFNDUCBCb290IGNvbmZpZyA9IDB4JXhcbiIsIHNjcF9ib290X2NvbmZpZyk7Ci0Jc2NwX2Jvb3RfY29uZmlnID0gbW1pb19yZWFkXzMyKFNDUF9CT09UX0NGR19BRERSKTsKLX0KLQotdm9pZCBibDJfcGxhdGZvcm1fc2V0dXAodm9pZCkKLXsKLQlhcm1fYmwyX3BsYXRmb3JtX3NldHVwKCk7Ci0KLQltbWlvX3dyaXRlXzMyKFNDUF9CT09UX0NGR19BRERSLCBzY3BfYm9vdF9jb25maWcpOwotCVZFUkJPU0UoIkJMMjogUmVzdG9yZWQgU0NQIEJvb3QgY29uZmlnID0gMHgleFxuIiwgc2NwX2Jvb3RfY29uZmlnKTsKLX0KLSNlbmRpZgotCiAjZW5kaWYgLyogSlVOT19BQVJDSDMyX0VMM19SVU5USU1FICovCmRpZmYgLS1naXQgYS9wbGF0L2FybS9ib2FyZC9qdW5vL3BsYXRmb3JtLm1rIGIvcGxhdC9hcm0vYm9hcmQvanVuby9wbGF0Zm9ybS5tawppbmRleCA3OTkxNmNkLi5mZWU0MzkxIDEwMDY0NAotLS0gYS9wbGF0L2FybS9ib2FyZC9qdW5vL3BsYXRmb3JtLm1rCisrKyBiL3BsYXQvYXJtL2JvYXJkL2p1bm8vcGxhdGZvcm0ubWsKQEAgLTMxLDYgKzMxLDE5IEBACiAkKGV2YWwgJChjYWxsIGFzc2VydF9ib29sZWFuLEpVTk9fQUFSQ0gzMl9FTDNfUlVOVElNRSkpCiAkKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsSlVOT19BQVJDSDMyX0VMM19SVU5USU1FKSkKIAoraWZlcSAoJHtKVU5PX0FBUkNIMzJfRUwzX1JVTlRJTUV9LCAxKQorIyBJbmNsdWRlIEJMMzIgaW4gRklQCitORUVEX0JMMzIJCTo9IHllcworIyBCTDMxIGlzIG5vdCByZXF1aXJlZAorb3ZlcnJpZGUgQkwzMV9TT1VSQ0VTID0KKworIyBUaGUgQkwzMiBuZWVkcyB0byBiZSBidWlsdCBzZXBhcmF0ZWx5IGludm9raW5nIHRoZSBBQVJDSDMyIGNvbXBpbGVyIGFuZAorIyBiZSBzcGVjaWZlZCB2aWEgYEJMMzJgIGJ1aWxkIG9wdGlvbi4KKyAgaWZuZXEgKCR7QVJDSH0sIGFhcmNoMzIpCisgICAgb3ZlcnJpZGUgQkwzMl9TT1VSQ0VTID0KKyAgZW5kaWYKK2VuZGlmCisKIGlmZXEgKCR7QVJDSH0sYWFyY2g2NCkKIEJMMV9TT1VSQ0VTCQkrPQlsaWIvY3B1cy9hYXJjaDY0L2NvcnRleF9hNTMuUwkJXAogCQkJCWxpYi9jcHVzL2FhcmNoNjQvY29ydGV4X2E1Ny5TCQlcCkBAIC04NiwxMSArOTksMTEgQEAKICMgRW5hYmxlIG1lbW9yeSBtYXAgcmVsYXRlZCBjb25zdGFudHMgb3B0aW1pc2F0aW9uCiBBUk1fQk9BUkRfT1BUSU1JU0VfTUVNCQk6PQkxCiAKKyMgRG8gbm90IGVuYWJsZSBTVkUKK0VOQUJMRV9TVkVfRk9SX05TCQk6PQkwCisKIGluY2x1ZGUgcGxhdC9hcm0vYm9hcmQvY29tbW9uL2JvYXJkX2Nzcy5tawogaW5jbHVkZSBwbGF0L2FybS9jb21tb24vYXJtX2NvbW1vbi5tawogaW5jbHVkZSBwbGF0L2FybS9zb2MvY29tbW9uL3NvY19jc3MubWsKIGluY2x1ZGUgcGxhdC9hcm0vY3NzL2NvbW1vbi9jc3NfY29tbW9uLm1rCiAKLWlmZXEgKCR7S0VZX0FMR30sZWNkc2EpCi0gICAgJChlcnJvciAiRUNEU0Ega2V5IGFsZ29yaXRobSBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIG9uIEp1bm8uIikKLWVuZGlmCmRpZmYgLS1naXQgYS9wbGF0L2FybS9ib2FyZC9qdW5vL3NwX21pbi9zcF9taW4tanVuby5tayBiL3BsYXQvYXJtL2JvYXJkL2p1bm8vc3BfbWluL3NwX21pbi1qdW5vLm1rCmluZGV4IDMzNmM0ZTcuLmNkMWY0OTcgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2JvYXJkL2p1bm8vc3BfbWluL3NwX21pbi1qdW5vLm1rCisrKyBiL3BsYXQvYXJtL2JvYXJkL2p1bm8vc3BfbWluL3NwX21pbi1qdW5vLm1rCkBAIC04LDcgKzgsMTAgQEAKIEJMMzJfU09VUkNFUwkrPQlsaWIvY3B1cy9hYXJjaDMyL2NvcnRleF9hNTMuUwkJXAogCQkJbGliL2NwdXMvYWFyY2gzMi9jb3J0ZXhfYTU3LlMJCVwKIAkJCWxpYi9jcHVzL2FhcmNoMzIvY29ydGV4X2E3Mi5TCQlcCisJCQlsaWIvdXRpbHMvbWVtX3JlZ2lvbi5jCQkJXAorCQkJcGxhdC9hcm0vYm9hcmQvY29tbW9uL2RyaXZlcnMvbm9yZmxhc2gvbm9yZmxhc2guYwlcCiAJCQlwbGF0L2FybS9ib2FyZC9qdW5vL2p1bm9fdG9wb2xvZ3kuYwlcCisJCQlwbGF0L2FybS9jb21tb24vYXJtX25vcl9wc2NpX21lbV9wcm90ZWN0LmMJXAogCQkJcGxhdC9hcm0vc29jL2NvbW1vbi9zb2NfY3NzX3NlY3VyaXR5LmMJXAogCQkJJHtKVU5PX0dJQ19TT1VSQ0VTfQkJCVwKIAkJCSR7SlVOT19JTlRFUkNPTk5FQ1RfU09VUkNFU30JCVwKZGlmZiAtLWdpdCBhL3BsYXQvYXJtL2NvbW1vbi9hYXJjaDY0L2FybV9laGYuYyBiL3BsYXQvYXJtL2NvbW1vbi9hYXJjaDY0L2FybV9laGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODViN2JiCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdC9hcm0vY29tbW9uL2FhcmNoNjQvYXJtX2VoZi5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxlaGYuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybV9kZWYuaD4KKworLyoKKyAqIEVudW1lcmF0aW9uIG9mIHByaW9yaXR5IGxldmVscyBvbiBBUk0gcGxhdGZvcm1zLgorICovCitlaGZfcHJpX2Rlc2NfdCBhcm1fZXhjZXB0aW9uc1tdID0geworI2lmIFNERUlfU1VQUE9SVAorCS8qIENyaXRpY2FsIHByaW9yaXR5IFNERUkgKi8KKwlFSEZfUFJJX0RFU0MoQVJNX1BSSV9CSVRTLCBQTEFUX1NERUlfQ1JJVElDQUxfUFJJKSwKKworCS8qIE5vcm1hbCBwcmlvcml0eSBTREVJICovCisJRUhGX1BSSV9ERVNDKEFSTV9QUklfQklUUywgUExBVF9TREVJX05PUk1BTF9QUkkpLAorI2VuZGlmCit9OworCisvKiBQbHVnIGluIEFSTSBleGNlcHRpb25zIHRvIEV4Y2VwdGlvbiBIYW5kbGluZyBGcmFtZXdvcmsuICovCitFSEZfUkVHSVNURVJfUFJJT1JJVElFUyhhcm1fZXhjZXB0aW9ucywgQVJSQVlfU0laRShhcm1fZXhjZXB0aW9ucyksIEFSTV9QUklfQklUUyk7CmRpZmYgLS1naXQgYS9wbGF0L2FybS9jb21tb24vYWFyY2g2NC9hcm1faGVscGVycy5TIGIvcGxhdC9hcm0vY29tbW9uL2FhcmNoNjQvYXJtX2hlbHBlcnMuUwppbmRleCBiNTNlNjBkLi45ZDNhMTA4IDEwMDY0NAotLS0gYS9wbGF0L2FybS9jb21tb24vYWFyY2g2NC9hcm1faGVscGVycy5TCisrKyBiL3BsYXQvYXJtL2NvbW1vbi9hYXJjaDY0L2FybV9oZWxwZXJzLlMKQEAgLTEyLDcgKzEyLDYgQEAKIAkuZ2xvYmwJcGxhdF9jcmFzaF9jb25zb2xlX3B1dGMKIAkuZ2xvYmwJcGxhdF9jcmFzaF9jb25zb2xlX2ZsdXNoCiAJLmdsb2JsCXBsYXRmb3JtX21lbV9pbml0Ci0JLmdsb2JsCWFybV9kaXNhYmxlX3NwZQogCiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODgsMzQgKzg3LDYgQEAKIAlyZXQKIGVuZGZ1bmMgcGxhdGZvcm1fbWVtX2luaXQKIAotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogdm9pZCBhcm1fZGlzYWJsZV9zcGUgKHZvaWQpOwotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICovCi0jaWYgRU5BQkxFX1NQRV9GT1JfTE9XRVJfRUxTCi1mdW5jIGFybV9kaXNhYmxlX3NwZQotCS8qIERldGVjdCBpZiBTUEUgaXMgaW1wbGVtZW50ZWQgKi8KLQltcnMJeDAsIGlkX2FhNjRkZnIwX2VsMQotCXViZngJeDAsIHgwLCAjSURfQUE2NERGUjBfUE1TX1NISUZULCAjSURfQUE2NERGUjBfUE1TX0xFTkdUSAotCWNtcAl4MCwgIzB4MQotCWIubmUJMWYKLQotCS8qIERyYWluIGJ1ZmZlcmVkIGRhdGEgKi8KLQkuYXJjaAlhcm12OC4yLWErcHJvZmlsZQotCXBzYgljc3luYwotCWRzYgluc2gKLQotCS8qIERpc2FibGUgUHJvZmlsaW5nIEJ1ZmZlciAqLwotCW1ycwl4MCwgcG1ibGltaXRyX2VsMQotCWJpYwl4MCwgeDAsICMxCi0JbXNyCXBtYmxpbWl0cl9lbDEsIHgwCi0JaXNiCi0JLmFyY2gJYXJtdjgtYQotMToKLQlyZXQKLWVuZGZ1bmMgYXJtX2Rpc2FibGVfc3BlCi0jZW5kaWYKLQogLyoKICAqIE5lZWQgdG8gdXNlIGNvaGVyZW50IHN0YWNrIHdoZW4gQVJNIENyeXB0b2NlbGwgaXMgdXNlZCB0byBhdXRoZXRpY2F0ZSBpbWFnZXMKICAqIHNpbmNlIENyeXB0b2NlbGwgdXNlcyBETUEgdG8gdHJhbnNmZXIgZGF0YSBhbmQgaXQgaXMgbm90IGNvaGVyZW50IHdpdGggdGhlCmRpZmYgLS1naXQgYS9wbGF0L2FybS9jb21tb24vYWFyY2g2NC9hcm1fc2RlaS5jIGIvcGxhdC9hcm0vY29tbW9uL2FhcmNoNjQvYXJtX3NkZWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTQ4MDBjCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdC9hcm0vY29tbW9uL2FhcmNoNjQvYXJtX3NkZWkuYwpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisvKiBTREVJIGNvbmZpZ3VyYXRpb24gZm9yIEFSTSBwbGF0Zm9ybXMgKi8KKworI2luY2x1ZGUgPGVoZi5oPgorI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgorI2luY2x1ZGUgPHNkZWkuaD4KKworLyogUHJpdmF0ZSBldmVudCBtYXBwaW5ncyAqLworc3RhdGljIHNkZWlfZXZfbWFwX3QgYXJtX3ByaXZhdGVfc2RlaVtdID0geworCS8qIEV2ZW50IDAgKi8KKwlTREVJX0RFRklORV9FVkVOVF8wKEFSTV9TREVJX1NHSSksCisKKwkvKiBEeW5hbWljIHByaXZhdGUgZXZlbnRzICovCisJU0RFSV9QUklWQVRFX0VWRU5UKEFSTV9TREVJX0RQX0VWRU5UXzAsIFNERUlfRFlOX0lSUSwgU0RFSV9NQVBGX0RZTkFNSUMpLAorCVNERUlfUFJJVkFURV9FVkVOVChBUk1fU0RFSV9EUF9FVkVOVF8xLCBTREVJX0RZTl9JUlEsIFNERUlfTUFQRl9EWU5BTUlDKSwKKwlTREVJX1BSSVZBVEVfRVZFTlQoQVJNX1NERUlfRFBfRVZFTlRfMiwgU0RFSV9EWU5fSVJRLCBTREVJX01BUEZfRFlOQU1JQyksCit9OworCisvKiBTaGFyZWQgZXZlbnQgbWFwcGluZ3MgKi8KK3N0YXRpYyBzZGVpX2V2X21hcF90IGFybV9zaGFyZWRfc2RlaVtdID0geworCS8qIER5bmFtaWMgc2hhcmVkIGV2ZW50cyAqLworCVNERUlfU0hBUkVEX0VWRU5UKEFSTV9TREVJX0RTX0VWRU5UXzAsIFNERUlfRFlOX0lSUSwgU0RFSV9NQVBGX0RZTkFNSUMpLAorCVNERUlfU0hBUkVEX0VWRU5UKEFSTV9TREVJX0RTX0VWRU5UXzEsIFNERUlfRFlOX0lSUSwgU0RFSV9NQVBGX0RZTkFNSUMpLAorCVNERUlfU0hBUkVEX0VWRU5UKEFSTV9TREVJX0RTX0VWRU5UXzIsIFNERUlfRFlOX0lSUSwgU0RFSV9NQVBGX0RZTkFNSUMpLAorfTsKKworLyogRXhwb3J0IEFSTSBTREVJIGV2ZW50cyAqLworUkVHSVNURVJfU0RFSV9NQVAoYXJtX3ByaXZhdGVfc2RlaSwgYXJtX3NoYXJlZF9zZGVpKTsKZGlmZiAtLWdpdCBhL3BsYXQvYXJtL2NvbW1vbi9hcm1fYmwyX3NldHVwLmMgYi9wbGF0L2FybS9jb21tb24vYXJtX2JsMl9zZXR1cC5jCmluZGV4IGNhYjYxMTMuLjVkODMxMTggMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2NvbW1vbi9hcm1fYmwyX3NldHVwLmMKKysrIGIvcGxhdC9hcm0vY29tbW9uL2FybV9ibDJfc2V0dXAuYwpAQCAtMTkzLDYgKzE5MywxMCBAQAogewogCS8qIEluaXRpYWxpemUgdGhlIHNlY3VyZSBlbnZpcm9ubWVudCAqLwogCXBsYXRfYXJtX3NlY3VyaXR5X3NldHVwKCk7CisKKyNpZiBkZWZpbmVkKFBMQVRfQVJNX01FTV9QUk9UX0FERFIpCisJYXJtX25vcl9wc2NpX2RvX21lbV9wcm90ZWN0KCk7CisjZW5kaWYKIH0KIAogdm9pZCBibDJfcGxhdGZvcm1fc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL3BsYXQvYXJtL2NvbW1vbi9hcm1fY29tbW9uLmMgYi9wbGF0L2FybS9jb21tb24vYXJtX2NvbW1vbi5jCmluZGV4IDQyMGEzODYuLmJmNjM5NzMgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2NvbW1vbi9hcm1fY29tbW9uLmMKKysrIGIvcGxhdC9hcm0vY29tbW9uL2FybV9jb21tb24uYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPG1taW8uaD4KICNpbmNsdWRlIDxwbGF0X2FybS5oPgogI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgorI2luY2x1ZGUgPHNlY3VyZV9wYXJ0aXRpb24uaD4KIAogZXh0ZXJuIGNvbnN0IG1tYXBfcmVnaW9uX3QgcGxhdF9hcm1fbW1hcFtdOwogCkBAIC03OSw2ICs4MCwxNCBAQAogCQkJTVRfREVWSUNFIHwgTVRfUlcgfCBNVF9TRUNVUkUpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEVfU1BNICYmIGRlZmluZWQoSU1BR0VfQkwzMSkKKwkvKiBUaGUgYWRkcmVzcyBvZiB0aGUgZm9sbG93aW5nIHJlZ2lvbiBpcyBjYWxjdWxhdGVkIGJ5IHRoZSBsaW5rZXIuICovCisJbW1hcF9hZGRfcmVnaW9uKFNQX0lNQUdFX1hMQVRfVEFCTEVTX1NUQVJULAorCQkJU1BfSU1BR0VfWExBVF9UQUJMRVNfU1RBUlQsCisJCQlTUF9JTUFHRV9YTEFUX1RBQkxFU19TSVpFLAorCQkJTVRfTUVNT1JZIHwgTVRfUlcgfCBNVF9TRUNVUkUpOworI2VuZGlmCisKIAkvKiBOb3cgKHJlLSltYXAgdGhlIHBsYXRmb3JtLXNwZWNpZmljIG1lbW9yeSByZWdpb25zICovCiAJbW1hcF9hZGQocGxhdF9hcm1fZ2V0X21tYXAoKSk7CiAKQEAgLTE5NSwzICsyMDQsNTEgQEAKIH0KIAogI2VuZGlmIC8qIEFSTV9TWVNfQ05UQ1RMX0JBU0UgKi8KKworI2lmIFNERUlfU1VQUE9SVAorLyoKKyAqIFRyYW5zbGF0ZSBTREVJIGVudHJ5IHBvaW50IHRvIFBBLCBhbmQgcGVyZm9ybSBzdGFuZGFyZCBBUk0gZW50cnkgcG9pbnQKKyAqIHZhbGlkYXRpb24gb24gaXQuCisgKi8KK2ludCBwbGF0X3NkZWlfdmFsaWRhdGVfZW50cnlfcG9pbnQodWludHB0cl90IGVwLCB1bnNpZ25lZCBpbnQgY2xpZW50X21vZGUpCit7CisJdWludDY0X3QgcGFyLCBwYTsKKwl1aW50MzJfdCBzY3JfZWwzOworCisJLyogRG9pbmcgTm9uLXNlY3VyZSBhZGRyZXNzIHRyYW5zbGF0aW9uIHJlcXVpcmVzIFNDUl9FTDMuTlMgc2V0ICovCisJc2NyX2VsMyA9IHJlYWRfc2NyX2VsMygpOworCXdyaXRlX3Njcl9lbDMoc2NyX2VsMyB8IFNDUl9OU19CSVQpOworCWlzYigpOworCisJYXNzZXJ0KChjbGllbnRfbW9kZSA9PSBNT0RFX0VMMikgfHwgKGNsaWVudF9tb2RlID09IE1PREVfRUwxKSk7CisJaWYgKGNsaWVudF9tb2RlID09IE1PREVfRUwyKSB7CisJCS8qCisJCSAqIFRyYW5zbGF0ZSBlbnRyeSBwb2ludCB0byBQaHlzaWNhbCBBZGRyZXNzIHVzaW5nIHRoZSBFTDIKKwkJICogdHJhbnNsYXRpb24gcmVnaW1lLgorCQkgKi8KKwkJYXRzMWUycihlcCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVHJhbnNsYXRlIGVudHJ5IHBvaW50IHRvIFBoeXNpY2FsIEFkZHJlc3MgdXNpbmcgdGhlIEVMMSYwCisJCSAqIHRyYW5zbGF0aW9uIHJlZ2ltZSwgaW5jbHVkaW5nIHN0YWdlIDIuCisJCSAqLworCQlhdHMxMmUxcihlcCk7CisJfQorCWlzYigpOworCXBhciA9IHJlYWRfcGFyX2VsMSgpOworCisJLyogUmVzdG9yZSBvcmlnaW5hbCBTQ1JMX0VMMyAqLworCXdyaXRlX3Njcl9lbDMoc2NyX2VsMyk7CisJaXNiKCk7CisKKwkvKiBJZiB0aGUgdHJhbnNsYXRpb24gcmVzdWx0ZWQgaW4gZmF1bHQsIHJldHVybiBmYWlsdXJlICovCisJaWYgKChwYXIgJiBQQVJfRl9NQVNLKSAhPSAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBFeHRyYWN0IFBoeXNpY2FsIEFkZHJlc3MgZnJvbSBQQVIgKi8KKwlwYSA9IChwYXIgJiAoUEFSX0FERFJfTUFTSyA8PCBQQVJfQUREUl9TSElGVCkpOworCisJLyogUGVyZm9ybSBOUyBlbnRyeSBwb2ludCB2YWxpZGF0aW9uIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzICovCisJcmV0dXJuIGFybV92YWxpZGF0ZV9uc19lbnRyeXBvaW50KHBhKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcGxhdC9hcm0vY29tbW9uL2FybV9jb21tb24ubWsgYi9wbGF0L2FybS9jb21tb24vYXJtX2NvbW1vbi5tawppbmRleCA4MmYwMmIxLi4xN2FjYWU1IDEwMDY0NAotLS0gYS9wbGF0L2FybS9jb21tb24vYXJtX2NvbW1vbi5taworKysgYi9wbGF0L2FybS9jb21tb24vYXJtX2NvbW1vbi5tawpAQCAtOSw3ICs5LDEyIEBACiAgICMgRFJBTSAoaWYgYXZhaWxhYmxlKSBvciB0aGUgVFpDIHNlY3VyZWQgYXJlYSBvZiBEUkFNLgogICAjIFRydXN0ZWQgU1JBTSBpcyB0aGUgZGVmYXVsdC4KIAotICBBUk1fVFNQX1JBTV9MT0NBVElPTgk6PQl0c3JhbQorICBpZm5lcSAoJHtUUlVTVEVEX0JPQVJEX0JPT1R9LDApCisgICAgQVJNX1RTUF9SQU1fTE9DQVRJT04JPz0JZHJhbQorICBlbHNlCisgICAgQVJNX1RTUF9SQU1fTE9DQVRJT04JPz0JdHNyYW0KKyAgZW5kaWYKKwogICBpZmVxICgke0FSTV9UU1BfUkFNX0xPQ0FUSU9OfSwgdHNyYW0pCiAgICAgQVJNX1RTUF9SQU1fTE9DQVRJT05fSUQgPSBBUk1fVFJVU1RFRF9TUkFNX0lECiAgIGVsc2UgaWZlcSAoJHtBUk1fVFNQX1JBTV9MT0NBVElPTn0sIHRkcmFtKQpAQCAtMjEsMTQgKzI2LDE3IEBACiAgIGVuZGlmCiAKICAgIyBQcm9jZXNzIGZsYWdzCi0gICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxBUk1fVFNQX1JBTV9MT0NBVElPTl9JRCkpCi0KICAgIyBQcm9jZXNzIEFSTV9CTDMxX0lOX0RSQU0gZmxhZwogICBBUk1fQkwzMV9JTl9EUkFNCQk6PQkwCiAgICQoZXZhbCAkKGNhbGwgYXNzZXJ0X2Jvb2xlYW4sQVJNX0JMMzFfSU5fRFJBTSkpCiAgICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxBUk1fQkwzMV9JTl9EUkFNKSkKK2Vsc2UKKyAgQVJNX1RTUF9SQU1fTE9DQVRJT05fSUQgPSBBUk1fVFJVU1RFRF9TUkFNX0lECiBlbmRpZgogCiskKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsQVJNX1RTUF9SQU1fTE9DQVRJT05fSUQpKQorCisKICMgRm9yIHRoZSBvcmlnaW5hbCBwb3dlci1zdGF0ZSBwYXJhbWV0ZXIgZm9ybWF0LCB0aGUgU3RhdGUtSUQgY2FuIGJlIGVuY29kZWQKICMgYWNjb3JkaW5nIHRvIHRoZSByZWNvbW1lbmRlZCBlbmNvZGluZyBvciB6ZXJvLiBUaGlzIGZsYWcgZGV0ZXJtaW5lcyB3aGljaAogIyBTdGF0ZS1JRCBlbmNvZGluZyB0byBiZSBwYXJzZWQuCkBAIC0xNzYsNiArMTg0LDE0IEBACiAJCQkJbGliL3BtZi9wbWZfc21jLmMKIGVuZGlmCiAKK2lmZXEgKCR7RUwzX0VYQ0VQVElPTl9IQU5ETElOR30sMSkKK0JMMzFfU09VUkNFUwkJKz0JcGxhdC9hcm0vY29tbW9uL2FhcmNoNjQvYXJtX2VoZi5jCitlbmRpZgorCitpZmVxICgke1NERUlfU1VQUE9SVH0sMSkKK0JMMzFfU09VUkNFUwkJKz0JcGxhdC9hcm0vY29tbW9uL2FhcmNoNjQvYXJtX3NkZWkuYworZW5kaWYKKwogaWZuZXEgKCR7VFJVU1RFRF9CT0FSRF9CT09UfSwwKQogCiAgICAgIyBJbmNsdWRlIGNvbW1vbiBUQkIgc291cmNlcwpkaWZmIC0tZ2l0IGEvcGxhdC9hcm0vY29tbW9uL2FybV9naWN2Mi5jIGIvcGxhdC9hcm0vY29tbW9uL2FybV9naWN2Mi5jCmluZGV4IDUyMWZhOGMuLjU2NDRjNjAgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2NvbW1vbi9hcm1fZ2ljdjIuYworKysgYi9wbGF0L2FybS9jb21tb24vYXJtX2dpY3YyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDE1LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCkBAIC0yMywxNiArMjMsMjAgQEAKICAqIE9uIGEgR0lDdjIgc3lzdGVtLCB0aGUgR3JvdXAgMSBzZWN1cmUgaW50ZXJydXB0cyBhcmUgdHJlYXRlZCBhcyBHcm91cCAwCiAgKiBpbnRlcnJ1cHRzLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBnMF9pbnRlcnJ1cHRfYXJyYXlbXSA9IHsKLQlQTEFUX0FSTV9HMVNfSVJRUywKLQlQTEFUX0FSTV9HMF9JUlFTCitzdGF0aWMgY29uc3QgaW50ZXJydXB0X3Byb3BfdCBhcm1faW50ZXJydXB0X3Byb3BzW10gPSB7CisJUExBVF9BUk1fRzFTX0lSUV9QUk9QUyhHSUNWMl9JTlRSX0dST1VQMCksCisJUExBVF9BUk1fRzBfSVJRX1BST1BTKEdJQ1YyX0lOVFJfR1JPVVAwKQogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCB0YXJnZXRfbWFza19hcnJheVtQTEFURk9STV9DT1JFX0NPVU5UXTsKKwogc3RhdGljIGNvbnN0IGdpY3YyX2RyaXZlcl9kYXRhX3QgYXJtX2dpY19kYXRhID0gewogCS5naWNkX2Jhc2UgPSBQTEFUX0FSTV9HSUNEX0JBU0UsCiAJLmdpY2NfYmFzZSA9IFBMQVRfQVJNX0dJQ0NfQkFTRSwKLQkuZzBfaW50ZXJydXB0X251bSA9IEFSUkFZX1NJWkUoZzBfaW50ZXJydXB0X2FycmF5KSwKLQkuZzBfaW50ZXJydXB0X2FycmF5ID0gZzBfaW50ZXJydXB0X2FycmF5LAorCS5pbnRlcnJ1cHRfcHJvcHMgPSBhcm1faW50ZXJydXB0X3Byb3BzLAorCS5pbnRlcnJ1cHRfcHJvcHNfbnVtID0gQVJSQVlfU0laRShhcm1faW50ZXJydXB0X3Byb3BzKSwKKwkudGFyZ2V0X21hc2tzID0gdGFyZ2V0X21hc2tfYXJyYXksCisJLnRhcmdldF9tYXNrc19udW0gPSBBUlJBWV9TSVpFKHRhcmdldF9tYXNrX2FycmF5KSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ3LDYgKzUxLDcgQEAKIHsKIAlnaWN2Ml9kaXN0aWZfaW5pdCgpOwogCWdpY3YyX3BjcHVfZGlzdGlmX2luaXQoKTsKKwlnaWN2Ml9zZXRfcGVfdGFyZ2V0X21hc2socGxhdF9teV9jb3JlX3BvcygpKTsKIAlnaWN2Ml9jcHVpZl9lbmFibGUoKTsKIH0KIApAQCAtNzIsNiArNzcsNyBAQAogdm9pZCBwbGF0X2FybV9naWNfcGNwdV9pbml0KHZvaWQpCiB7CiAJZ2ljdjJfcGNwdV9kaXN0aWZfaW5pdCgpOworCWdpY3YyX3NldF9wZV90YXJnZXRfbWFzayhwbGF0X215X2NvcmVfcG9zKCkpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04NywzICs5MywyMSBAQAogewogCXJldHVybjsKIH0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUk0gY29tbW9uIGhlbHBlciB0byBzYXZlICYgcmVzdG9yZSB0aGUgR0lDdjMgb24gcmVzdW1lIGZyb20gc3lzdGVtIHN1c3BlbmQuCisgKiBUaGUgbm9ybWFsIHdvcmxkIGN1cnJlbnRseSB0YWtlcyBjYXJlIG9mIHNhdmluZyBhbmQgcmVzdG9yaW5nIHRoZSBHSUN2MgorICogcmVnaXN0ZXJzIGR1ZSB0byBsZWdhY3kgcmVhc29ucy4gSGVuY2Ugd2UganVzdCBpbml0aWFsaXplIHRoZSBEaXN0cmlidXRvcgorICogb24gcmVzdW1lIGZyb20gc3lzdGVtIHN1c3BlbmQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHBsYXRfYXJtX2dpY19zYXZlKHZvaWQpCit7CisJcmV0dXJuOworfQorCit2b2lkIHBsYXRfYXJtX2dpY19yZXN1bWUodm9pZCkKK3sKKwlnaWN2Ml9kaXN0aWZfaW5pdCgpOworCWdpY3YyX3BjcHVfZGlzdGlmX2luaXQoKTsKK30KZGlmZiAtLWdpdCBhL3BsYXQvYXJtL2NvbW1vbi9hcm1fZ2ljdjMuYyBiL3BsYXQvYXJtL2NvbW1vbi9hcm1fZ2ljdjMuYwppbmRleCBjOWJiYTA5Li5lMjczYjc3IDEwMDY0NAotLS0gYS9wbGF0L2FybS9jb21tb24vYXJtX2dpY3YzLmMKKysrIGIvcGxhdC9hcm0vY29tbW9uL2FybV9naWN2My5jCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSA8YXJtX2RlZi5oPgogI2luY2x1ZGUgPGdpY3YzLmg+CisjaW5jbHVkZSA8aW50ZXJydXB0X3Byb3BzLmg+CiAjaW5jbHVkZSA8cGxhdF9hcm0uaD4KICNpbmNsdWRlIDxwbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgpAQCAtMjUsMTUgKzI2LDE3IEBACiAvKiBUaGUgR0lDdjMgZHJpdmVyIG9ubHkgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgaW4gRUwzICovCiBzdGF0aWMgdWludHB0cl90IHJkaXN0aWZfYmFzZV9hZGRyc1tQTEFURk9STV9DT1JFX0NPVU5UXTsKIAotLyogQXJyYXkgb2YgR3JvdXAxIHNlY3VyZSBpbnRlcnJ1cHRzIHRvIGJlIGNvbmZpZ3VyZWQgYnkgdGhlIGdpYyBkcml2ZXIgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZzFzX2ludGVycnVwdF9hcnJheVtdID0gewotCVBMQVRfQVJNX0cxU19JUlFTCitzdGF0aWMgY29uc3QgaW50ZXJydXB0X3Byb3BfdCBhcm1faW50ZXJydXB0X3Byb3BzW10gPSB7CisJUExBVF9BUk1fRzFTX0lSUV9QUk9QUyhJTlRSX0dST1VQMVMpLAorCVBMQVRfQVJNX0cwX0lSUV9QUk9QUyhJTlRSX0dST1VQMCkKIH07CiAKLS8qIEFycmF5IG9mIEdyb3VwMCBpbnRlcnJ1cHRzIHRvIGJlIGNvbmZpZ3VyZWQgYnkgdGhlIGdpYyBkcml2ZXIgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZzBfaW50ZXJydXB0X2FycmF5W10gPSB7Ci0JUExBVF9BUk1fRzBfSVJRUwotfTsKKy8qCisgKiBXZSBzYXZlIGFuZCByZXN0b3JlIHRoZSBHSUN2MyBjb250ZXh0IG9uIHN5c3RlbSBzdXNwZW5kLiBBbGxvY2F0ZSB0aGUKKyAqIGRhdGEgaW4gdGhlIGRlc2lnbmF0ZWQgRUwzIFNlY3VyZSBjYXJ2ZS1vdXQgbWVtb3J5CisgKi8KK2dpY3YzX3JlZGlzdF9jdHhfdCByZGlzdF9jdHggX19zZWN0aW9uKCJhcm1fZWwzX3R6Y19kcmFtIik7CitnaWN2M19kaXN0X2N0eF90IGRpc3RfY3R4IF9fc2VjdGlvbigiYXJtX2VsM190emNfZHJhbSIpOwogCiAvKgogICogTVBJRFIgaGFzaGluZyBmdW5jdGlvbiBmb3IgdHJhbnNsYXRpbmcgTVBJRFJzIHJlYWQgZnJvbSBHSUNSX1RZUEVSIHJlZ2lzdGVyCkBAIC01OCwxMCArNjEsOCBAQAogY29uc3QgZ2ljdjNfZHJpdmVyX2RhdGFfdCBhcm1fZ2ljX2RhdGEgPSB7CiAJLmdpY2RfYmFzZSA9IFBMQVRfQVJNX0dJQ0RfQkFTRSwKIAkuZ2ljcl9iYXNlID0gUExBVF9BUk1fR0lDUl9CQVNFLAotCS5nMF9pbnRlcnJ1cHRfbnVtID0gQVJSQVlfU0laRShnMF9pbnRlcnJ1cHRfYXJyYXkpLAotCS5nMXNfaW50ZXJydXB0X251bSA9IEFSUkFZX1NJWkUoZzFzX2ludGVycnVwdF9hcnJheSksCi0JLmcwX2ludGVycnVwdF9hcnJheSA9IGcwX2ludGVycnVwdF9hcnJheSwKLQkuZzFzX2ludGVycnVwdF9hcnJheSA9IGcxc19pbnRlcnJ1cHRfYXJyYXksCisJLmludGVycnVwdF9wcm9wcyA9IGFybV9pbnRlcnJ1cHRfcHJvcHMsCisJLmludGVycnVwdF9wcm9wc19udW0gPSBBUlJBWV9TSVpFKGFybV9pbnRlcnJ1cHRfcHJvcHMpLAogCS5yZGlzdGlmX251bSA9IFBMQVRGT1JNX0NPUkVfQ09VTlQsCiAJLnJkaXN0aWZfYmFzZV9hZGRycyA9IHJkaXN0aWZfYmFzZV9hZGRycywKIAkubXBpZHJfdG9fY29yZV9wb3MgPSBhcm1fZ2ljdjNfbXBpZHJfaGFzaApAQCAtMTI3LDMgKzEyOCw1OCBAQAogewogCWdpY3YzX3JkaXN0aWZfb2ZmKHBsYXRfbXlfY29yZV9wb3MoKSk7CiB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFSTSBjb21tb24gaGVscGVyIHRvIHNhdmUgJiByZXN0b3JlIHRoZSBHSUN2MyBvbiByZXN1bWUgZnJvbSBzeXN0ZW0gc3VzcGVuZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBwbGF0X2FybV9naWNfc2F2ZSh2b2lkKQoreworCisJLyoKKwkgKiBJZiBhbiBJVFMgaXMgYXZhaWxhYmxlLCBzYXZlIGl0cyBjb250ZXh0IGJlZm9yZQorCSAqIHRoZSBSZWRpc3RyaWJ1dG9yIHVzaW5nOgorCSAqIGdpY3YzX2l0c19zYXZlX2Rpc2FibGUoZ2l0c19iYXNlLCAmaXRzX2N0eFtpXSkKKwkgKiBBZGRpdGlvbm5hbHksIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgc2VxdWVuY2UgbWF5CisJICogYmUgcmVxdWlyZWQgdG8gc2F2ZSB0aGUgd2hvbGUgSVRTIHN0YXRlLgorCSAqLworCisJLyoKKwkgKiBTYXZlIHRoZSBHSUMgUmVkaXN0cmlidXRvcnMgYW5kIElUUyBjb250ZXh0cyBiZWZvcmUgdGhlCisJICogRGlzdHJpYnV0b3IgY29udGV4dC4gQXMgd2Ugb25seSBoYW5kbGUgU1lTVEVNIFNVU1BFTkQgQVBJLAorCSAqIHdlIG9ubHkgbmVlZCB0byBzYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBDUFUgdGhhdCBpcyBpc3N1aW5nCisJICogdGhlIFNZU1RFTSBTVVNQRU5EIGNhbGwsIGkuZS4gdGhlIGN1cnJlbnQgQ1BVLgorCSAqLworCWdpY3YzX3JkaXN0aWZfc2F2ZShwbGF0X215X2NvcmVfcG9zKCksICZyZGlzdF9jdHgpOworCisJLyogU2F2ZSB0aGUgR0lDIERpc3RyaWJ1dG9yIGNvbnRleHQgKi8KKwlnaWN2M19kaXN0aWZfc2F2ZSgmZGlzdF9jdHgpOworCisJLyoKKwkgKiBGcm9tIGhlcmUsIGFsbCB0aGUgY29tcG9uZW50cyBvZiB0aGUgR0lDIGNhbiBiZSBzYWZlbHkgcG93ZXJlZCBkb3duCisJICogYXMgbG9uZyBhcyB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgd2F5IHRvIGhhbmRsZSB3YWtldXAgaW50ZXJydXB0CisJICogc291cmNlcy4KKwkgKi8KK30KKwordm9pZCBwbGF0X2FybV9naWNfcmVzdW1lKHZvaWQpCit7CisJLyogUmVzdG9yZSB0aGUgR0lDIERpc3RyaWJ1dG9yIGNvbnRleHQgKi8KKwlnaWN2M19kaXN0aWZfaW5pdF9yZXN0b3JlKCZkaXN0X2N0eCk7CisKKwkvKgorCSAqIFJlc3RvcmUgdGhlIEdJQyBSZWRpc3RyaWJ1dG9yIGFuZCBJVFMgY29udGV4dHMgYWZ0ZXIgdGhlCisJICogRGlzdHJpYnV0b3IgY29udGV4dC4gQXMgd2Ugb25seSBoYW5kbGUgU1lTVEVNIFNVU1BFTkQgQVBJLAorCSAqIHdlIG9ubHkgbmVlZCB0byByZXN0b3JlIHRoZSBjb250ZXh0IG9mIHRoZSBDUFUgdGhhdCBpc3N1ZWQKKwkgKiB0aGUgU1lTVEVNIFNVU1BFTkQgY2FsbC4KKwkgKi8KKwlnaWN2M19yZGlzdGlmX2luaXRfcmVzdG9yZShwbGF0X215X2NvcmVfcG9zKCksICZyZGlzdF9jdHgpOworCisJLyoKKwkgKiBJZiBhbiBJVFMgaXMgYXZhaWxhYmxlLCByZXN0b3JlIGl0cyBjb250ZXh0IGFmdGVyCisJICogdGhlIFJlZGlzdHJpYnV0b3IgdXNpbmc6CisJICogZ2ljdjNfaXRzX3Jlc3RvcmUoZ2l0c19iYXNlLCAmaXRzX2N0eFtpXSkKKwkgKiBBbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHNlcXVlbmNlIG1heSBiZSByZXF1aXJlZCB0bworCSAqIHJlc3RvcmUgdGhlIHdob2xlIElUUyBzdGF0ZS4gVGhlIElUUyBtdXN0IGFsc28gYmUKKwkgKiByZS1lbmFibGVkIGFmdGVyIHRoaXMgc2VxdWVuY2UgaGFzIGJlZW4gZXhlY3V0ZWQuCisJICovCit9CmRpZmYgLS1naXQgYS9wbGF0L2FybS9jb21tb24vYXJtX2dpY3YzX2xlZ2FjeS5jIGIvcGxhdC9hcm0vY29tbW9uL2FybV9naWN2M19sZWdhY3kuYwppbmRleCBhMDE0YThlLi5lMTk3OTlhIDEwMDY0NAotLS0gYS9wbGF0L2FybS9jb21tb24vYXJtX2dpY3YzX2xlZ2FjeS5jCisrKyBiL3BsYXQvYXJtL2NvbW1vbi9hcm1fZ2ljdjNfbGVnYWN5LmMKQEAgLTg0LDMgKzg0LDE2IEBACiB7CiAJcmV0dXJuOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUk0gY29tbW9uIGhlbHBlciB0byBzYXZlICYgcmVzdG9yZSB0aGUgR0lDdjMgb24gcmVzdW1lIGZyb20gc3lzdGVtIHN1c3BlbmQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHBsYXRfYXJtX2dpY19zYXZlKHZvaWQpCit7CisJcmV0dXJuOworfQorCit2b2lkIHBsYXRfYXJtX2dpY19yZXN1bWUodm9pZCkKK3sKKwlhcm1fZ2ljX3NldHVwKCk7Cit9CmRpZmYgLS1naXQgYS9wbGF0L2FybS9jb21tb24vYXJtX25vcl9wc2NpX21lbV9wcm90ZWN0LmMgYi9wbGF0L2FybS9jb21tb24vYXJtX25vcl9wc2NpX21lbV9wcm90ZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUyNjNmZAotLS0gL2Rldi9udWxsCisrKyBiL3BsYXQvYXJtL2NvbW1vbi9hcm1fbm9yX3BzY2lfbWVtX3Byb3RlY3QuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaW5jbHVkZSA8ZGVidWcuaD4KKyNpbmNsdWRlIDxtbWlvLmg+CisjaW5jbHVkZSA8bm9yZmxhc2guaD4KKyNpbmNsdWRlIDxwbGF0X2FybS5oPgorI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgorI2luY2x1ZGUgPHBzY2kuaD4KKyNpbmNsdWRlIDx1dGlscy5oPgorCittZW1fcmVnaW9uX3QgYXJtX3JhbV9yYW5nZXNbXSA9IHsKKwl7QVJNX05TX0RSQU0xX0JBU0UsIEFSTV9OU19EUkFNMV9TSVpFfSwKKyNpZmRlZiBBQVJDSDY0CisJe0FSTV9EUkFNMl9CQVNFLCBBUk1fRFJBTTJfU0laRX0sCisjZW5kaWYKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbiB0aGF0IHJlYWRzIHRoZSBjb250ZW50IG9mIHRoZSBtZW1vcnkgcHJvdGVjdCB2YXJpYWJsZSB0aGF0CisgKiBlbmFibGVzIGNsZWFyaW5nIG9mIG5vbiBzZWN1cmUgbWVtb3J5IHdoZW4gc3lzdGVtIGJvb3RzLiBUaGlzIHZhcmlhYmxlCisgKiBzaG91bGQgYmUgc3RvcmVkIGluIGEgc2VjdXJlIE5WUkFNLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBhcm1fcHNjaV9yZWFkX21lbV9wcm90ZWN0KGludCAqZW5hYmxlZCkKK3sKKwlpbnQgdG1wOworCisJdG1wID0gKihpbnQgKikgUExBVF9BUk1fTUVNX1BST1RfQUREUjsKKwkqZW5hYmxlZCA9ICh0bXAgPT0gMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbiB0aGF0IHdyaXRlcyB0aGUgY29udGVudCBvZiB0aGUgbWVtb3J5IHByb3RlY3QgdmFyaWFibGUgdGhhdAorICogZW5hYmxlcyBvdmVyd3JpdHRlbiBvZiBub24gc2VjdXJlIG1lbW9yeSB3aGVuIHN5c3RlbSBib290cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgYXJtX25vcl9wc2NpX3dyaXRlX21lbV9wcm90ZWN0KGludCB2YWwpCit7CisJaW50IGVuYWJsZSA9ICh2YWwgIT0gMCk7CisKKwlpZiAobm9yX3VubG9jayhQTEFUX0FSTV9NRU1fUFJPVF9BRERSKSAhPSAwKSB7CisJCUVSUk9SKCJ1bmxvY2tpbmcgbWVtb3J5IHByb3RlY3QgdmFyaWFibGVcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGVuYWJsZSkgeworCQkvKgorCQkgKiBJZiB3ZSB3YW50IHRvIHdyaXRlIGEgdmFsdWUgZGlmZmVyZW50IHRoYW4gMAorCQkgKiB0aGVuIHdlIGhhdmUgdG8gZXJhc2UgdGhlIGZ1bGwgYmxvY2sgYmVjYXVzZQorCQkgKiBvdGhlcndpc2Ugd2UgY2Fubm90IGVuc3VyZSB0aGF0IHRoZSB2YWx1ZSBwcm9ncmFtbWVkCisJCSAqIGludG8gdGhlIGZsYXNoIGlzIGdvaW5nIHRvIGJlIHRoZSBzYW1lIHRoYW4gdGhlIHZhbHVlCisJCSAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyCisJCSAqLworCQlpZiAobm9yX2VyYXNlKFBMQVRfQVJNX01FTV9QUk9UX0FERFIpICE9IDApIHsKKwkJCUVSUk9SKCJlcmFzaW5nIGJsb2NrIGNvbnRhaW5pbmcgbWVtb3J5IHByb3RlY3QgdmFyaWFibGVcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKG5vcl93b3JkX3Byb2dyYW0oUExBVF9BUk1fTUVNX1BST1RfQUREUiwgZW5hYmxlKSAhPSAwKSB7CisJCUVSUk9SKCJwcm9ncmFtbWluZyBtZW1vcnkgcHJvdGVjdGlvbiB2YXJpYWJsZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbiB1c2VkIGZvciByZXF1aXJlZCBwc2NpIG9wZXJhdGlvbnMgcGVyZm9ybWVkIHdoZW4KKyAqIHN5c3RlbSBib290cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgYXJtX25vcl9wc2NpX2RvX21lbV9wcm90ZWN0KHZvaWQpCit7CisJaW50IGVuYWJsZTsKKworCWFybV9wc2NpX3JlYWRfbWVtX3Byb3RlY3QoJmVuYWJsZSk7CisJaWYgKCFlbmFibGUpCisJCXJldHVybjsKKwlJTkZPKCJQU0NJOiBPdmVyd3JpdHRpbmcgbm9uIHNlY3VyZSBtZW1vcnlcbiIpOworCWNsZWFyX21lbV9yZWdpb25zKGFybV9yYW1fcmFuZ2VzLCBBUlJBWV9TSVpFKGFybV9yYW1fcmFuZ2VzKSk7CisJYXJtX25vcl9wc2NpX3dyaXRlX21lbV9wcm90ZWN0KDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgYSByZWdpb24gaXMgcHJvdGVjdGVkIGJ5IHRoZSBtZW1vcnkgcHJvdGVjdAorICogbWVjaGFuaXNtCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGFybV9wc2NpX21lbV9wcm90ZWN0X2Noayh1aW50cHRyX3QgYmFzZSwgdV9yZWdpc3Rlcl90IGxlbmd0aCkKK3sKKwlyZXR1cm4gbWVtX3JlZ2lvbl9pbl9hcnJheV9jaGsoYXJtX3JhbV9yYW5nZXMsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoYXJtX3JhbV9yYW5nZXMpLAorCQkJCSAgICAgICBiYXNlLCBsZW5ndGgpOworfQpkaWZmIC0tZ2l0IGEvcGxhdC9hcm0vY29tbW9uL2FybV9wbS5jIGIvcGxhdC9hcm0vY29tbW9uL2FybV9wbS5jCmluZGV4IGNjMTMxYTkuLjQ0YWM1YjUgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2NvbW1vbi9hcm1fcG0uYworKysgYi9wbGF0L2FybS9jb21tb24vYXJtX3BtLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgKi8KQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxjb25zb2xlLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxwbGF0X2FybS5oPgorI2luY2x1ZGUgPHBsYXRmb3JtLmg+CiAjaW5jbHVkZSA8cGxhdGZvcm1fZGVmLmg+CiAjaW5jbHVkZSA8cHNjaS5oPgogCkBAIC0xMTEsNyArMTEyLDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEFSTSBzdGFuZGFyZCBwbGF0Zm9ybSBoYW5kbGVyIGNhbGxlZCB0byBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIG5vbiBzZWN1cmUKLSAqIGVudHJ5cG9pbnQuCisgKiBlbnRyeXBvaW50LiBSZXR1cm5zIDAgaWYgdGhlIGVudHJ5cG9pbnQgaXMgdmFsaWQsIG9yIC0xIG90aGVyd2lzZS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgYXJtX3ZhbGlkYXRlX25zX2VudHJ5cG9pbnQodWludHB0cl90IGVudHJ5cG9pbnQpCiB7CkBAIC0xMjAsMTUgKzEyMSwyMyBAQAogCSAqIHNlY3VyZSBEUkFNLgogCSAqLwogCWlmICgoZW50cnlwb2ludCA+PSBBUk1fTlNfRFJBTTFfQkFTRSkgJiYgKGVudHJ5cG9pbnQgPAotCQkJKEFSTV9OU19EUkFNMV9CQVNFICsgQVJNX05TX0RSQU0xX1NJWkUpKSkKLQkJcmV0dXJuIFBTQ0lfRV9TVUNDRVNTOworCQkJKEFSTV9OU19EUkFNMV9CQVNFICsgQVJNX05TX0RSQU0xX1NJWkUpKSkgeworCQlyZXR1cm4gMDsKKwl9CiAjaWZuZGVmIEFBUkNIMzIKIAlpZiAoKGVudHJ5cG9pbnQgPj0gQVJNX0RSQU0yX0JBU0UpICYmIChlbnRyeXBvaW50IDwKLQkJCShBUk1fRFJBTTJfQkFTRSArIEFSTV9EUkFNMl9TSVpFKSkpCi0JCXJldHVybiBQU0NJX0VfU1VDQ0VTUzsKKwkJCShBUk1fRFJBTTJfQkFTRSArIEFSTV9EUkFNMl9TSVpFKSkpIHsKKwkJcmV0dXJuIDA7CisJfQogI2VuZGlmCiAKLQlyZXR1cm4gUFNDSV9FX0lOVkFMSURfQUREUkVTUzsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBhcm1fdmFsaWRhdGVfcHNjaV9lbnRyeXBvaW50KHVpbnRwdHJfdCBlbnRyeXBvaW50KQoreworCXJldHVybiBhcm1fdmFsaWRhdGVfbnNfZW50cnlwb2ludChlbnRyeXBvaW50KSA9PSAwID8gUFNDSV9FX1NVQ0NFU1MgOgorCQlQU0NJX0VfSU5WQUxJRF9BRERSRVNTOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDAsNiArMTQ5LDI0IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhlbHBlciBmdW5jdGlvbiB0byBzYXZlIHRoZSBwbGF0Zm9ybSBzdGF0ZSBiZWZvcmUgYSBzeXN0ZW0gc3VzcGVuZC4gU2F2ZSB0aGUKKyAqIHN0YXRlIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50cyB3aGljaCBhcmUgbm90IGluIHRoZSBBbHdheXMgT04gcG93ZXIgZG9tYWluLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBhcm1fc3lzdGVtX3B3cl9kb21haW5fc2F2ZSh2b2lkKQoreworCS8qIEFzc2VydCBzeXN0ZW0gcG93ZXIgZG9tYWluIGlzIGF2YWlsYWJsZSBvbiB0aGUgcGxhdGZvcm0gKi8KKwlhc3NlcnQoUExBVF9NQVhfUFdSX0xWTCA+PSBBUk1fUFdSX0xWTDIpOworCisJcGxhdF9hcm1fZ2ljX3NhdmUoKTsKKworCS8qCisJICogQWxsIHRoZSBvdGhlciBwZXJpcGhlcmFsIHdoaWNoIGFyZSBjb25maWd1cmVkIGJ5IEFSTSBURiBhcmUKKwkgKiByZS1pbml0aWFsaXplZCBvbiByZXN1bWUgZnJvbSBzeXN0ZW0gc3VzcGVuZC4gSGVuY2Ugd2UKKwkgKiBkb24ndCBzYXZlIHRoZWlyIHN0YXRlIGhlcmUuCisJICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEhlbHBlciBmdW5jdGlvbiB0byByZXN1bWUgdGhlIHBsYXRmb3JtIGZyb20gc3lzdGVtIHN1c3BlbmQuIFJlaW5pdGlhbGl6ZQogICogdGhlIHN5c3RlbSBjb21wb25lbnRzIHdoaWNoIGFyZSBub3QgaW4gdGhlIEFsd2F5cyBPTiBwb3dlciBkb21haW4uCiAgKiBUT0RPOiBVbmlmeSB0aGUgcGxhdGZvcm0gc2V0dXAgd2hlbiB3YWtpbmcgdXAgZnJvbSBjb2xkIGJvb3QgYW5kIHN5c3RlbQpAQCAtMTUzLDEyICsxODAsOCBAQAogCS8qIEFzc2VydCBzeXN0ZW0gcG93ZXIgZG9tYWluIGlzIGF2YWlsYWJsZSBvbiB0aGUgcGxhdGZvcm0gKi8KIAlhc3NlcnQoUExBVF9NQVhfUFdSX0xWTCA+PSBBUk1fUFdSX0xWTDIpOwogCi0JLyoKLQkgKiBUT0RPOiBPbiBHSUN2MyBzeXN0ZW1zLCBmaWd1cmUgb3V0IHdoZXRoZXIgdGhlIGNvcmUgdGhhdCB3YWtlcyB1cAotCSAqIGZpcnN0IGZyb20gc3lzdGVtIHN1c3BlbmQgbmVlZCB0byBpbml0aWFsaXplIHRoZSByZS1kaXN0cmlidXRvcgotCSAqIGludGVyZmFjZSBvZiBhbGwgdGhlIG90aGVyIHN1c3BlbmRlZCBjb3Jlcy4KLQkgKi8KLQlwbGF0X2FybV9naWNfaW5pdCgpOworCXBsYXRfYXJtX2dpY19yZXN1bWUoKTsKKwogCXBsYXRfYXJtX3NlY3VyaXR5X3NldHVwKCk7CiAJYXJtX2NvbmZpZ3VyZV9zeXNfdGltZXIoKTsKIH0KZGlmZiAtLWdpdCBhL3BsYXQvYXJtL2NvbW1vbi9hcm1fdHpjNDAwLmMgYi9wbGF0L2FybS9jb21tb24vYXJtX3R6YzQwMC5jCmluZGV4IDFkNjFjNTcuLmNmMTMzMjYgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2NvbW1vbi9hcm1fdHpjNDAwLmMKKysrIGIvcGxhdC9hcm0vY29tbW9uL2FybV90emM0MDAuYwpAQCAtMSwxMCArMSwxMSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCiAKICNpbmNsdWRlIDxhcm1fZGVmLmg+CisjaW5jbHVkZSA8YXJtX3NwbV9kZWYuaD4KICNpbmNsdWRlIDxkZWJ1Zy5oPgogI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgogI2luY2x1ZGUgPHR6YzQwMC5oPgpAQCAtNDAsNyArNDEsNyBAQAogCiAJLyogUmVnaW9uIDEgc2V0IHRvIGNvdmVyIFNlY3VyZSBwYXJ0IG9mIERSQU0gKi8KIAl0emM0MDBfY29uZmlndXJlX3JlZ2lvbihQTEFUX0FSTV9UWkNfRklMVEVSUywgMSwKLQkJCUFSTV9BUF9UWkNfRFJBTTFfQkFTRSwgQVJNX0FQX1RaQ19EUkFNMV9FTkQsCisJCQlBUk1fQVBfVFpDX0RSQU0xX0JBU0UsIEFSTV9FTDNfVFpDX0RSQU0xX0VORCwKIAkJCVRaQ19SRUdJT05fU19SRFdSLAogCQkJMCk7CiAKQEAgLTU2LDkgKzU3LDI2IEBACiAJCQlBUk1fRFJBTTJfQkFTRSwgQVJNX0RSQU0yX0VORCwKIAkJCUFSTV9UWkNfTlNfRFJBTV9TX0FDQ0VTUywKIAkJCVBMQVRfQVJNX1RaQ19OU19ERVZfQUNDRVNTKTsKLSNlbHNlCi0JLyogQWxsb3cgc2VjdXJlIGFjY2VzcyBvbmx5IHRvIERSQU0gZm9yIEVMMyBwYXlsb2Fkcy4gKi8KLQl0emM0MDBfY29uZmlndXJlX3JlZ2lvbjAoVFpDX1JFR0lPTl9TX1JEV1IsIDApOworCisjaWYgRU5BQkxFX1NQTQorCS8qCisJICogUmVnaW9uIDQgc2V0IHRvIGNvdmVyIE5vbi1TZWN1cmUgYWNjZXNzIHRvIHRoZSBjb21tdW5pY2F0aW9uIGJ1ZmZlcgorCSAqIHNoYXJlZCB3aXRoIHRoZSBTZWN1cmUgd29ybGQuCisJICovCisJdHpjNDAwX2NvbmZpZ3VyZV9yZWdpb24oUExBVF9BUk1fVFpDX0ZJTFRFUlMsCisJCQkJNCwKKwkJCQlBUk1fU1BfSU1BR0VfTlNfQlVGX0JBU0UsCisJCQkJKEFSTV9TUF9JTUFHRV9OU19CVUZfQkFTRSArCisJCQkJIEFSTV9TUF9JTUFHRV9OU19CVUZfU0laRSkgLSAxLAorCQkJCVRaQ19SRUdJT05fU19OT05FLAorCQkJCVBMQVRfQVJNX1RaQ19OU19ERVZfQUNDRVNTKTsKKyNlbmRpZgorCisjZWxzZSAvKiBpZiBkZWZpbmVkKEVMM19QQVlMT0FEX0JBU0UpICovCisKKwkvKiBBbGxvdyBTZWN1cmUgYW5kIE5vbi1zZWN1cmUgYWNjZXNzIHRvIERSQU0gZm9yIEVMMyBwYXlsb2FkcyAqLworCXR6YzQwMF9jb25maWd1cmVfcmVnaW9uMChUWkNfUkVHSU9OX1NfUkRXUiwgUExBVF9BUk1fVFpDX05TX0RFVl9BQ0NFU1MpOworCiAjZW5kaWYgLyogRUwzX1BBWUxPQURfQkFTRSAqLwogCiAJLyoKZGlmZiAtLWdpdCBhL3BsYXQvYXJtL2NvbW1vbi9hcm1fdHpjX2RtYzUwMC5jIGIvcGxhdC9hcm0vY29tbW9uL2FybV90emNfZG1jNTAwLmMKaW5kZXggMjFjYTRlOC4uOGU0MTM5MSAxMDA2NDQKLS0tIGEvcGxhdC9hcm0vY29tbW9uL2FybV90emNfZG1jNTAwLmMKKysrIGIvcGxhdC9hcm0vY29tbW9uL2FybV90emNfZG1jNTAwLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogCS8qIFJlZ2lvbiAxIHNldCB0byBjb3ZlciBTZWN1cmUgcGFydCBvZiBEUkFNICovCiAJdHpjX2RtYzUwMF9jb25maWd1cmVfcmVnaW9uKDEsIEFSTV9BUF9UWkNfRFJBTTFfQkFTRSwKLQkJQVJNX0FQX1RaQ19EUkFNMV9FTkQsCisJCUFSTV9FTDNfVFpDX0RSQU0xX0VORCwKIAkJVFpDX1JFR0lPTl9TX1JEV1IsCiAJCTApOwogCmRpZmYgLS1naXQgYS9wbGF0L2FybS9jc3MvY29tbW9uL2Nzc19ibDJfc2V0dXAuYyBiL3BsYXQvYXJtL2Nzcy9jb21tb24vY3NzX2JsMl9zZXR1cC5jCmluZGV4IDliNDgwMGUuLmI0YWFmZDQgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2Nzcy9jb21tb24vY3NzX2JsMl9zZXR1cC5jCisrKyBiL3BsYXQvYXJtL2Nzcy9jb21tb24vY3NzX2JsMl9zZXR1cC5jCkBAIC00OSwxMyArNDksMTMgQEAKIH0KIAogI2lmICFDU1NfVVNFX1NDTUlfU0RTX0RSSVZFUgotIyBpZmRlZiBFTDNfUEFZTE9BRF9CQVNFCisjIGlmIGRlZmluZWQoRUwzX1BBWUxPQURfQkFTRSkgfHwgSlVOT19BQVJDSDMyX0VMM19SVU5USU1FCiAKIC8qCiAgKiBXZSBuZWVkIHRvIG92ZXJyaWRlIHNvbWUgb2YgdGhlIHBsYXRmb3JtIGZ1bmN0aW9ucyB3aGVuIGJvb3RpbmcgYW4gRUwzCi0gKiBwYXlsb2FkLiBUaGVzZSBuZWVkcyB0byBiZSBkb25lIG9ubHkgZm9yIFNDUEkvQk9NIFNDUCBzeXN0ZW1zIGFzCi0gKiBpbiBjYXNlIG9mIFNEUywgdGhlIHN0cnVjdHVyZXMgcmVtYWluIGluIG1lbW9yeSBhbmQgZG9lc24ndCBuZWVkIHRvIGJlCi0gKiBvdmVyd3JpdHRlbi4KKyAqIHBheWxvYWQgb3IgU1BfTUlOIG9uIEp1bm8gQUFyY2gzMi4gVGhpcyBuZWVkcyB0byBiZSBkb25lIG9ubHkgZm9yCisgKiBTQ1BJL0JPTSBTQ1Agc3lzdGVtcyBhcyBpbiBjYXNlIG9mIFNEUywgdGhlIHN0cnVjdHVyZXMgcmVtYWluIGluIG1lbW9yeSBhbmQKKyAqIGRvbid0IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4uCiAgKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBzY3BfYm9vdF9jb25maWc7CmRpZmYgLS1naXQgYS9wbGF0L2FybS9jc3MvY29tbW9uL2Nzc19wbS5jIGIvcGxhdC9hcm0vY3NzL2NvbW1vbi9jc3NfcG0uYwppbmRleCBlMGU1MjAwLi40YTYxNWUxIDEwMDY0NAotLS0gYS9wbGF0L2FybS9jc3MvY29tbW9uL2Nzc19wbS5jCisrKyBiL3BsYXQvYXJtL2Nzcy9jb21tb24vY3NzX3BtLmMKQEAgLTc0LDYgKzc0LDkgQEAKIHsKIAlhc3NlcnQoQ1NTX0NPUkVfUFdSX1NUQVRFKHRhcmdldF9zdGF0ZSkgPT0gQVJNX0xPQ0FMX1NUQVRFX09GRik7CiAKKwkvKiBFbmFibGUgdGhlIGdpYyBjcHUgaW50ZXJmYWNlICovCisJcGxhdF9hcm1fZ2ljX2NwdWlmX2VuYWJsZSgpOworCiAJLyoKIAkgKiBQZXJmb3JtIHRoZSBjb21tb24gY2x1c3RlciBzcGVjaWZpYyBvcGVyYXRpb25zIGkuZSBlbmFibGUgY29oZXJlbmN5CiAJICogaWYgdGhpcyBjbHVzdGVyIHdhcyBvZmYuCkBAIC05NSwxMyArOTgsMTAgQEAKIAkvKiBBc3NlcnQgdGhhdCB0aGUgc3lzdGVtIHBvd2VyIGRvbWFpbiBuZWVkIG5vdCBiZSBpbml0aWFsaXplZCAqLwogCWFzc2VydChDU1NfU1lTVEVNX1BXUl9TVEFURSh0YXJnZXRfc3RhdGUpID09IEFSTV9MT0NBTF9TVEFURV9SVU4pOwogCi0JY3NzX3B3cl9kb21haW5fb25fZmluaXNoZXJfY29tbW9uKHRhcmdldF9zdGF0ZSk7Ci0KIAkvKiBQcm9ncmFtIHRoZSBnaWMgcGVyLWNwdSBkaXN0cmlidXRvciBvciByZS1kaXN0cmlidXRvciBpbnRlcmZhY2UgKi8KIAlwbGF0X2FybV9naWNfcGNwdV9pbml0KCk7CiAKLQkvKiBFbmFibGUgdGhlIGdpYyBjcHUgaW50ZXJmYWNlICovCi0JcGxhdF9hcm1fZ2ljX2NwdWlmX2VuYWJsZSgpOworCWNzc19wd3JfZG9tYWluX29uX2ZpbmlzaGVyX2NvbW1vbih0YXJnZXRfc3RhdGUpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTQ0LDggKzE0NCwxOCBAQAogCWlmIChDU1NfQ09SRV9QV1JfU1RBVEUodGFyZ2V0X3N0YXRlKSA9PSBBUk1fTE9DQUxfU1RBVEVfUkVUKQogCQlyZXR1cm47CiAKKwogCWFzc2VydChDU1NfQ09SRV9QV1JfU1RBVEUodGFyZ2V0X3N0YXRlKSA9PSBBUk1fTE9DQUxfU1RBVEVfT0ZGKTsKIAljc3NfcG93ZXJfZG93bl9jb21tb24odGFyZ2V0X3N0YXRlKTsKKworCS8qIFBlcmZvcm0gc3lzdGVtIGRvbWFpbiBzdGF0ZSBzYXZpbmcgaWYgaXNzdWluZyBzeXN0ZW0gc3VzcGVuZCAqLworCWlmIChDU1NfU1lTVEVNX1BXUl9TVEFURSh0YXJnZXRfc3RhdGUpID09IEFSTV9MT0NBTF9TVEFURV9PRkYpIHsKKwkJYXJtX3N5c3RlbV9wd3JfZG9tYWluX3NhdmUoKTsKKworCQkvKiBQb3dlciBvZmYgdGhlIFJlZGlzdHJpYnV0b3IgYWZ0ZXIgaGF2aW5nIHNhdmVkIGl0cyBjb250ZXh0ICovCisJCXBsYXRfYXJtX2dpY19yZWRpc3RpZl9vZmYoKTsKKwl9CisKIAljc3Nfc2NwX3N1c3BlbmQodGFyZ2V0X3N0YXRlKTsKIH0KIApAQCAtMTY1LDEwICsxNzUsMTIgQEAKIAogCS8qIFBlcmZvcm0gc3lzdGVtIGRvbWFpbiByZXN0b3JlIGlmIHdva2VuIHVwIGZyb20gc3lzdGVtIHN1c3BlbmQgKi8KIAlpZiAoQ1NTX1NZU1RFTV9QV1JfU1RBVEUodGFyZ2V0X3N0YXRlKSA9PSBBUk1fTE9DQUxfU1RBVEVfT0ZGKQorCQkvKgorCQkgKiBBdCB0aGlzIHBvaW50LCB0aGUgRGlzdHJpYnV0b3IgbXVzdCBiZSBwb3dlcmVkIG9uIHRvIGJlIHJlYWR5CisJCSAqIHRvIGhhdmUgaXRzIHN0YXRlIHJlc3RvcmVkLiBUaGUgUmVkaXN0cmlidXRvciB3aWxsIGJlIHBvd2VyZWQKKwkJICogb24gYXMgcGFydCBvZiBnaWN2M19yZGlzdGlmX2luaXRfcmVzdG9yZS4KKwkJICovCiAJCWFybV9zeXN0ZW1fcHdyX2RvbWFpbl9yZXN1bWUoKTsKLQllbHNlCi0JCS8qIEVuYWJsZSB0aGUgZ2ljIGNwdSBpbnRlcmZhY2UgKi8KLQkJcGxhdF9hcm1fZ2ljX2NwdWlmX2VuYWJsZSgpOwogCiAJY3NzX3B3cl9kb21haW5fb25fZmluaXNoZXJfY29tbW9uKHRhcmdldF9zdGF0ZSk7CiB9CkBAIC0yODcsOCArMjk5LDIwIEBACiAJLnN5c3RlbV9vZmYJCT0gY3NzX3N5c3RlbV9vZmYsCiAJLnN5c3RlbV9yZXNldAkJPSBjc3Nfc3lzdGVtX3Jlc2V0LAogCS52YWxpZGF0ZV9wb3dlcl9zdGF0ZQk9IGNzc192YWxpZGF0ZV9wb3dlcl9zdGF0ZSwKLQkudmFsaWRhdGVfbnNfZW50cnlwb2ludCA9IGFybV92YWxpZGF0ZV9uc19lbnRyeXBvaW50LAorCS52YWxpZGF0ZV9uc19lbnRyeXBvaW50ID0gYXJtX3ZhbGlkYXRlX3BzY2lfZW50cnlwb2ludCwKIAkudHJhbnNsYXRlX3Bvd2VyX3N0YXRlX2J5X21waWRyID0gY3NzX3RyYW5zbGF0ZV9wb3dlcl9zdGF0ZV9ieV9tcGlkciwKIAkuZ2V0X25vZGVfaHdfc3RhdGUJPSBjc3Nfbm9kZV9od19zdGF0ZSwKLQkuZ2V0X3N5c19zdXNwZW5kX3Bvd2VyX3N0YXRlID0gY3NzX2dldF9zeXNfc3VzcGVuZF9wb3dlcl9zdGF0ZQorCS5nZXRfc3lzX3N1c3BlbmRfcG93ZXJfc3RhdGUgPSBjc3NfZ2V0X3N5c19zdXNwZW5kX3Bvd2VyX3N0YXRlLAorLyoKKyAqIG1lbV9wcm90ZWN0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gUkVTRVRfVE9fQkwzMSBhbmQgUkVTRVRfVE9fU1BfTUlOLAorICogYXMgdGhhdCB3b3VsZCByZXF1aXJlIG1hcHBpbmcgaW4gYWxsIG9mIE5TIERSQU0gaW50byBCTDMxIG9yIEJMMzIuCisgKi8KKyNpZiBkZWZpbmVkKFBMQVRfQVJNX01FTV9QUk9UX0FERFIpICYmICFSRVNFVF9UT19CTDMxICYmICFSRVNFVF9UT19TUF9NSU4KKwkubWVtX3Byb3RlY3RfY2hrCT0gYXJtX3BzY2lfbWVtX3Byb3RlY3RfY2hrLAorCS5yZWFkX21lbV9wcm90ZWN0CT0gYXJtX3BzY2lfcmVhZF9tZW1fcHJvdGVjdCwKKwkud3JpdGVfbWVtX3Byb3RlY3QJPSBhcm1fbm9yX3BzY2lfd3JpdGVfbWVtX3Byb3RlY3QsCisjZW5kaWYKKyNpZiBDU1NfVVNFX1NDTUlfU0RTX0RSSVZFUgorCS5zeXN0ZW1fcmVzZXQyCQk9IGNzc19zeXN0ZW1fcmVzZXQyLAorI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvcGxhdC9hcm0vY3NzL2RyaXZlcnMvc2NwL2Nzc19wbV9zY21pLmMgYi9wbGF0L2FybS9jc3MvZHJpdmVycy9zY3AvY3NzX3BtX3NjbWkuYwppbmRleCBjMzliYzRiLi5lMjljZDg2IDEwMDY0NAotLS0gYS9wbGF0L2FybS9jc3MvZHJpdmVycy9zY3AvY3NzX3BtX3NjbWkuYworKysgYi9wbGF0L2FybS9jc3MvZHJpdmVycy9zY3AvY3NzX3BtX3NjbWkuYwpAQCAtMjU5LDEwICsyNTksNyBAQAogCXJldHVybiBIV19PRkY7CiB9CiAKLS8qCi0gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2h1dGRvd24gdGhlIHN5c3RlbSB2aWEgU0NNSS4KLSAqLwotdm9pZCBfX2RlYWQyIGNzc19zY3Bfc3lzX3NodXRkb3duKHZvaWQpCit2b2lkIF9fZGVhZDIgY3NzX3NjcF9zeXN0ZW1fb2ZmKGludCBzdGF0ZSkKIHsKIAlpbnQgcmV0OwogCkBAIC0yNzMsNTIgKzI3MCwzNyBAQAogCXBsYXRfYXJtX2dpY19jcHVpZl9kaXNhYmxlKCk7CiAKIAkvKgotCSAqIElzc3VlIFNDTUkgY29tbWFuZCBmb3IgU1lTVEVNX1NIVVRET1dOLiBGaXJzdCBpc3N1ZSBhIGdyYWNlZnVsCisJICogSXNzdWUgU0NNSSBjb21tYW5kLiBGaXJzdCBpc3N1ZSBhIGdyYWNlZnVsCiAJICogcmVxdWVzdCBhbmQgaWYgdGhhdCBmYWlscyBmb3JjZSB0aGUgcmVxdWVzdC4KIAkgKi8KIAlyZXQgPSBzY21pX3N5c19wd3Jfc3RhdGVfc2V0KHNjbWlfaGFuZGxlLAogCQkJU0NNSV9TWVNfUFdSX0ZPUkNFRlVMX1JFUSwKLQkJCVNDTUlfU1lTX1BXUl9TSFVURE9XTik7CisJCQlzdGF0ZSk7CisKIAlpZiAocmV0ICE9IFNDTUlfRV9TVUNDRVNTKSB7Ci0JCUVSUk9SKCJTQ01JIHN5c3RlbSBwb3dlciBkb21haW4gc2h1dGRvd24gcmV0dXJuIDB4JXggdW5leHBlY3RlZFxuIiwKLQkJCQlyZXQpOworCQlFUlJPUigiU0NNSSBzeXN0ZW0gcG93ZXIgc3RhdGUgc2V0IDB4JXggcmV0dXJucyB1bmV4cGVjdGVkIDB4JXhcbiIsCisJCQlzdGF0ZSwgcmV0KTsKIAkJcGFuaWMoKTsKIAl9Ci0KIAl3ZmkoKTsKLQlFUlJPUigiQ1NTIFN5c3RlbSBTaHV0ZG93bjogb3BlcmF0aW9uIG5vdCBoYW5kbGVkLlxuIik7CisJRVJST1IoIkNTUyBzZXQgcG93ZXIgc3RhdGU6IG9wZXJhdGlvbiBub3QgaGFuZGxlZC5cbiIpOwogCXBhbmljKCk7CiB9CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2h1dGRvd24gdGhlIHN5c3RlbSB2aWEgU0NNSS4KKyAqLwordm9pZCBfX2RlYWQyIGNzc19zY3Bfc3lzX3NodXRkb3duKHZvaWQpCit7CisJY3NzX3NjcF9zeXN0ZW1fb2ZmKFNDTUlfU1lTX1BXUl9TSFVURE9XTik7Cit9CisKKy8qCiAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzZXQgdGhlIHN5c3RlbSB2aWEgU0NNSS4KICAqLwogdm9pZCBfX2RlYWQyIGNzc19zY3Bfc3lzX3JlYm9vdCh2b2lkKQogewotCWludCByZXQ7Ci0KLQkvKgotCSAqIERpc2FibGUgR0lDIENQVSBpbnRlcmZhY2UgdG8gcHJldmVudCBwZW5kaW5nIGludGVycnVwdCBmcm9tIHdha2luZwotCSAqIHVwIHRoZSBBUCBmcm9tIFdGSS4KLQkgKi8KLQlwbGF0X2FybV9naWNfY3B1aWZfZGlzYWJsZSgpOwotCi0JLyoKLQkgKiBJc3N1ZSBTQ01JIGNvbW1hbmQgZm9yIFNZU1RFTV9SRUJPT1QuIEZpcnN0IGlzc3VlIGEgZ3JhY2VmdWwKLQkgKiByZXF1ZXN0IGFuZCBpZiB0aGF0IGZhaWxzIGZvcmNlIHRoZSByZXF1ZXN0LgotCSAqLwotCXJldCA9IHNjbWlfc3lzX3B3cl9zdGF0ZV9zZXQoc2NtaV9oYW5kbGUsCi0JCQlTQ01JX1NZU19QV1JfRk9SQ0VGVUxfUkVRLAotCQkJU0NNSV9TWVNfUFdSX0NPTERfUkVTRVQpOwotCWlmIChyZXQgIT0gU0NNSV9FX1NVQ0NFU1MpIHsKLQkJRVJST1IoIlNDTUkgc3lzdGVtIHBvd2VyIGRvbWFpbiByZXNldCByZXR1cm4gMHgleCB1bmV4cGVjdGVkXG4iLAotCQkJCXJldCk7Ci0JCXBhbmljKCk7Ci0JfQotCi0Jd2ZpKCk7Ci0JRVJST1IoIkNTUyBTeXN0ZW0gUmVzZXQ6IG9wZXJhdGlvbiBub3QgaGFuZGxlZC5cbiIpOwotCXBhbmljKCk7CisJY3NzX3NjcF9zeXN0ZW1fb2ZmKFNDTUlfU1lTX1BXUl9DT0xEX1JFU0VUKTsKIH0KIAogc2NtaV9jaGFubmVsX3BsYXRfaW5mb190IHBsYXRfY3NzX3NjbWlfcGxhdF9pbmZvID0gewpAQCAtMzc2LDEzICszNTgsMzUgQEAKIAkJb3BzLT5zeXN0ZW1fb2ZmID0gTlVMTDsKIAkJb3BzLT5zeXN0ZW1fcmVzZXQgPSBOVUxMOwogCQlvcHMtPmdldF9zeXNfc3VzcGVuZF9wb3dlcl9zdGF0ZSA9IE5VTEw7Ci0JfSBlbHNlIGlmICghKG1zZ19hdHRyICYgU0NNSV9TWVNfUFdSX1NVU1BFTkRfU1VQUE9SVEVEKSkgewotCQkvKgotCQkgKiBTeXN0ZW0gcG93ZXIgbWFuYWdlbWVudCBwcm90b2NvbCBpcyBhdmFpbGFibGUsIGJ1dCBpdCBkb2VzCi0JCSAqIG5vdCBzdXBwb3J0IFNZU1RFTSBTVVNQRU5ELgotCQkgKi8KLQkJb3BzLT5nZXRfc3lzX3N1c3BlbmRfcG93ZXJfc3RhdGUgPSBOVUxMOworCX0gZWxzZSB7CisJCWlmICghKG1zZ19hdHRyICYgU0NNSV9TWVNfUFdSX1NVU1BFTkRfU1VQUE9SVEVEKSkgeworCQkJLyoKKwkJCSAqIFN5c3RlbSBwb3dlciBtYW5hZ2VtZW50IHByb3RvY29sIGlzIGF2YWlsYWJsZSwgYnV0CisJCQkgKiBpdCBkb2VzIG5vdCBzdXBwb3J0IFNZU1RFTSBTVVNQRU5ELgorCQkJICovCisJCQlvcHMtPmdldF9zeXNfc3VzcGVuZF9wb3dlcl9zdGF0ZSA9IE5VTEw7CisJCX0KKwkJaWYgKCEobXNnX2F0dHIgJiBTQ01JX1NZU19QV1JfV0FSTV9SRVNFVF9TVVBQT1JURUQpKSB7CisJCQkvKgorCQkJICogV0FSTSByZXNldCBpcyBub3QgYXZhaWxhYmxlLgorCQkJICovCisJCQlvcHMtPnN5c3RlbV9yZXNldDIgPSBOVUxMOworCQl9CiAJfQogCiAJcmV0dXJuIG9wczsKIH0KKworaW50IGNzc19zeXN0ZW1fcmVzZXQyKGludCBpc192ZW5kb3IsIGludCByZXNldF90eXBlLCB1X3JlZ2lzdGVyX3QgY29va2llKQoreworCWlmIChpc192ZW5kb3IgfHwgKHJlc2V0X3R5cGUgIT0gUFNDSV9SRVNFVDJfU1lTVEVNX1dBUk1fUkVTRVQpKQorCQlyZXR1cm4gUFNDSV9FX0lOVkFMSURfUEFSQU1TOworCisJY3NzX3NjcF9zeXN0ZW1fb2ZmKFNDTUlfU1lTX1BXUl9XQVJNX1JFU0VUKTsKKwkvKgorCSAqIGNzc19zY3Bfc3lzdGVtX29mZiBjYW5ub3QgcmV0dXJuIChpdCBpcyBhIF9fZGVhZCBmdW5jdGlvbiksCisJICogYnV0IGNzc19zeXN0ZW1fcmVzZXQyIGhhcyB0byByZXR1cm4gc29tZSB2YWx1ZSwgZXZlbiBpbgorCSAqIHRoaXMgY2FzZS4KKwkgKi8KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3BsYXQvYXJtL2Nzcy9kcml2ZXJzL3NjcC9jc3Nfc2NwLmggYi9wbGF0L2FybS9jc3MvZHJpdmVycy9zY3AvY3NzX3NjcC5oCmluZGV4IDIyM2UzNzIuLjFmMGNmOGUgMTAwNjQ0Ci0tLSBhL3BsYXQvYXJtL2Nzcy9kcml2ZXJzL3NjcC9jc3Nfc2NwLmgKKysrIGIvcGxhdC9hcm0vY3NzL2RyaXZlcnMvc2NwL2Nzc19zY3AuaApAQCAtMTUsMTIgKzE1LDE0IEBACiBzdHJ1Y3QgcHNjaV9wb3dlcl9zdGF0ZTsKIAogLyogQVBJIGZvciBwb3dlciBtYW5hZ2VtZW50IGJ5IFNDUCAqLworaW50IGNzc19zeXN0ZW1fcmVzZXQyKGludCBpc192ZW5kb3IsIGludCByZXNldF90eXBlLCB1X3JlZ2lzdGVyX3QgY29va2llKTsKIHZvaWQgY3NzX3NjcF9zdXNwZW5kKGNvbnN0IHN0cnVjdCBwc2NpX3Bvd2VyX3N0YXRlICp0YXJnZXRfc3RhdGUpOwogdm9pZCBjc3Nfc2NwX29mZihjb25zdCBzdHJ1Y3QgcHNjaV9wb3dlcl9zdGF0ZSAqdGFyZ2V0X3N0YXRlKTsKIHZvaWQgY3NzX3NjcF9vbih1X3JlZ2lzdGVyX3QgbXBpZHIpOwogaW50IGNzc19zY3BfZ2V0X3Bvd2VyX3N0YXRlKHVfcmVnaXN0ZXJfdCBtcGlkciwgdW5zaWduZWQgaW50IHBvd2VyX2xldmVsKTsKIHZvaWQgX19kZWFkMiBjc3Nfc2NwX3N5c19zaHV0ZG93bih2b2lkKTsKIHZvaWQgX19kZWFkMiBjc3Nfc2NwX3N5c19yZWJvb3Qodm9pZCk7Cit2b2lkIF9fZGVhZDIgY3NzX3NjcF9zeXN0ZW1fb2ZmKGludCBzdGF0ZSk7CiAKIC8qIEFQSSBmb3IgU0NQIEJvb3QgSW1hZ2UgdHJhbnNmZXIuIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yICovCiBpbnQgY3NzX3NjcF9ib290X2ltYWdlX3hmZXIodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBpbWFnZV9zaXplKTsKZGlmZiAtLWdpdCBhL3BsYXQvY29tbW9uL2FhcmNoMzIvcGxhdGZvcm1faGVscGVycy5TIGIvcGxhdC9jb21tb24vYWFyY2gzMi9wbGF0Zm9ybV9oZWxwZXJzLlMKaW5kZXggYjVmNDFmZi4uMGEwZTkyNyAxMDA2NDQKLS0tIGEvcGxhdC9jb21tb24vYWFyY2gzMi9wbGF0Zm9ybV9oZWxwZXJzLlMKKysrIGIvcGxhdC9jb21tb24vYWFyY2gzMi9wbGF0Zm9ybV9oZWxwZXJzLlMKQEAgLTcsMTMgKzcsMjcgQEAKICNpbmNsdWRlIDxhcmNoLmg+CiAjaW5jbHVkZSA8YXNtX21hY3Jvcy5TPgogCisJLndlYWsJcGxhdF9yZXBvcnRfZXhjZXB0aW9uCiAJLndlYWsJcGxhdF9jcmFzaF9jb25zb2xlX2luaXQKIAkud2VhawlwbGF0X2NyYXNoX2NvbnNvbGVfcHV0YwogCS53ZWFrCXBsYXRfY3Jhc2hfY29uc29sZV9mbHVzaAogCS53ZWFrCXBsYXRfcmVzZXRfaGFuZGxlcgogCS53ZWFrCXBsYXRfZGlzYWJsZV9hY3AKKwkud2VhawlibDFfcGxhdF9wcmVwYXJlX2V4aXQKIAkud2VhawlwbGF0Zm9ybV9tZW1faW5pdAorCS53ZWFrCXBsYXRfZXJyb3JfaGFuZGxlcgogCS53ZWFrCXBsYXRfcGFuaWNfaGFuZGxlcgorCS53ZWFrCWJsMl9wbGF0X3ByZWxvYWRfc2V0dXAKKwkud2VhawlwbGF0X3RyeV9uZXh0X2Jvb3Rfc291cmNlCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIFBsYWNlaG9sZGVyIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCBiZSByZWRlZmluZWQgYnkKKwkgKiBlYWNoIHBsYXRmb3JtLgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCitmdW5jIHBsYXRfcmVwb3J0X2V4Y2VwdGlvbgorCWJ4CWxyCitlbmRmdW5jIHBsYXRfcmVwb3J0X2V4Y2VwdGlvbgogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkgKiBQbGFjZWhvbGRlciBmdW5jdGlvbiB3aGljaCBzaG91bGQgYmUgcmVkZWZpbmVkIGJ5CkBAIC03Miw2ICs4NiwyNSBAQAogZW5kZnVuYyBwbGF0Zm9ybV9tZW1faW5pdAogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiB2b2lkIGJsMV9wbGF0X3ByZXBhcmVfZXhpdChlbnRyeV9wb2ludF9pbmZvX3QgKmVwX2luZm8pOworCSAqIENhbGxlZCBiZWZvcmUgZXhpdGluZyBCTDEuIERlZmF1bHQ6IGRvIG5vdGhpbmcKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworZnVuYyBibDFfcGxhdF9wcmVwYXJlX2V4aXQKKwlieAlscgorZW5kZnVuYyBibDFfcGxhdF9wcmVwYXJlX2V4aXQKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogdm9pZCBwbGF0X2Vycm9yX2hhbmRsZXIoaW50IGVycikgX19kZWFkMjsKKwkgKiBFbmRsZXNzIGxvb3AgYnkgZGVmYXVsdC4KKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworZnVuYyBwbGF0X2Vycm9yX2hhbmRsZXIKKwl3ZmkKKwliCXBsYXRfZXJyb3JfaGFuZGxlcgorZW5kZnVuYyBwbGF0X2Vycm9yX2hhbmRsZXIKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogdm9pZCBwbGF0X3BhbmljX2hhbmRsZXIodm9pZCkgX19kZWFkMjsKIAkgKiBFbmRsZXNzIGxvb3AgYnkgZGVmYXVsdC4KIAkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzksMyArMTEyLDIzIEBACiBmdW5jIHBsYXRfcGFuaWNfaGFuZGxlcgogCWIJcGxhdF9wYW5pY19oYW5kbGVyCiBlbmRmdW5jIHBsYXRfcGFuaWNfaGFuZGxlcgorCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIFBsYWNlaG9sZGVyIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCBiZSByZWRlZmluZWQgYnkKKwkgKiBlYWNoIHBsYXRmcm9tLgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCitmdW5jIGJsMl9wbGF0X3ByZWxvYWRfc2V0dXAKKwlieAlscgorZW5kZnVuYyBibDJfcGxhdF9wcmVsb2FkX3NldHVwCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIFBsYWNlaG9sZGVyIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCBiZSByZWRlZmluZWQgYnkKKwkgKiBlYWNoIHBsYXRmcm9tLgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCitmdW5jIHBsYXRfdHJ5X25leHRfYm9vdF9zb3VyY2UKKwltb3YJcjAsICMwCisJYngJbHIKK2VuZGZ1bmMgcGxhdF90cnlfbmV4dF9ib290X3NvdXJjZQpkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vYWFyY2g2NC9wbGF0X2NvbW1vbi5jIGIvcGxhdC9jb21tb24vYWFyY2g2NC9wbGF0X2NvbW1vbi5jCmluZGV4IDA1MDg0ZTEuLmE4N2U3YzYgMTAwNjQ0Ci0tLSBhL3BsYXQvY29tbW9uL2FhcmNoNjQvcGxhdF9jb21tb24uYworKysgYi9wbGF0L2NvbW1vbi9hYXJjaDY0L3BsYXRfY29tbW9uLmMKQEAgLTMsNiArMyw4IEBACiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCisKKyNpbmNsdWRlIDxhcmNoX2hlbHBlcnMuaD4KICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxjb25zb2xlLmg+CiAjaW5jbHVkZSA8cGxhdGZvcm0uaD4KQEAgLTIwLDYgKzIyLDExIEBACiAjcHJhZ21hIHdlYWsgcGxhdF9nZXRfc3lzY250X2ZyZXEyCiAjZW5kaWYgLyogRVJST1JfREVQUkVDQVRFRCAqLwogCisjaWYgU0RFSV9TVVBQT1JUCisjcHJhZ21hIHdlYWsgcGxhdF9zZGVpX2hhbmRsZV9tYXNrZWRfdHJpZ2dlcgorI3ByYWdtYSB3ZWFrIHBsYXRfc2RlaV92YWxpZGF0ZV9lbnRyeV9wb2ludAorI2VuZGlmCisKIHZvaWQgYmwzMV9wbGF0X2VuYWJsZV9tbXUodWludDMyX3QgZmxhZ3MpCiB7CiAJZW5hYmxlX21tdV9lbDMoZmxhZ3MpOwpAQCAtNjQsMyArNzEsMjIgQEAKIAlyZXR1cm4gKHVuc2lnbmVkIGludClmcmVxOwogfQogI2VuZGlmIC8qIEVSUk9SX0RFUFJFQ0FURUQgKi8KKworI2lmIFNERUlfU1VQUE9SVAorLyoKKyAqIEZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBzcHVyaW91cyBTREVJIGludGVycnVwdHMgd2hpbGUgZXZlbnRzIGFyZSBtYXNrZWQuCisgKi8KK3ZvaWQgcGxhdF9zZGVpX2hhbmRsZV9tYXNrZWRfdHJpZ2dlcih1aW50NjRfdCBtcGlkciwgdW5zaWduZWQgaW50IGludHIpCit7CisJV0FSTigiU3B1cmlvdXMgU0RFSSBpbnRlcnJ1cHQgJXUgb24gbWFza2VkIFBFICVseFxuIiwgaW50ciwgbXBpZHIpOworfQorCisvKgorICogRGVmYXVsdCBGdW5jdGlvbiB0byB2YWxpZGF0ZSBTREVJIGVudHJ5IHBvaW50LCB3aGljaCByZXR1cm5zIHN1Y2Nlc3MuCisgKiBQbGF0Zm9ybXMgbWF5IG92ZXJyaWRlIHRoaXMgd2l0aCB0aGVpciBvd24gdmFsaWRhdGlvbiBtZWNoYW5pc20uCisgKi8KK2ludCBwbGF0X3NkZWlfdmFsaWRhdGVfZW50cnlfcG9pbnQodWludHB0cl90IGVwLCB1bnNpZ25lZCBpbnQgY2xpZW50X21vZGUpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3BsYXQvY29tbW9uL2FhcmNoNjQvcGxhdGZvcm1faGVscGVycy5TIGIvcGxhdC9jb21tb24vYWFyY2g2NC9wbGF0Zm9ybV9oZWxwZXJzLlMKaW5kZXggZTYwZGIyMC4uNzk3YTkzNiAxMDA2NDQKLS0tIGEvcGxhdC9jb21tb24vYWFyY2g2NC9wbGF0Zm9ybV9oZWxwZXJzLlMKKysrIGIvcGxhdC9jb21tb24vYWFyY2g2NC9wbGF0Zm9ybV9oZWxwZXJzLlMKQEAgLTE3LDYgKzE3LDggQEAKIAkud2VhawlibDFfcGxhdF9wcmVwYXJlX2V4aXQKIAkud2VhawlwbGF0X2Vycm9yX2hhbmRsZXIKIAkud2VhawlwbGF0X3BhbmljX2hhbmRsZXIKKwkud2VhawlibDJfcGxhdF9wcmVsb2FkX3NldHVwCisJLndlYWsJcGxhdF90cnlfbmV4dF9ib290X3NvdXJjZQogCiAjaWYgIUVOQUJMRV9QTEFUX0NPTVBBVAogCS5nbG9ibAlwbGF0Zm9ybV9nZXRfY29yZV9wb3MKQEAgLTEyOSwzICsxMzEsMjIgQEAKIAl3ZmkKIAliCXBsYXRfcGFuaWNfaGFuZGxlcgogZW5kZnVuYyBwbGF0X3BhbmljX2hhbmRsZXIKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogUGxhY2Vob2xkZXIgZnVuY3Rpb24gd2hpY2ggc2hvdWxkIGJlIHJlZGVmaW5lZCBieQorCSAqIGVhY2ggcGxhdGZyb20uCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KK2Z1bmMgYmwyX3BsYXRfcHJlbG9hZF9zZXR1cAorCXJldAorZW5kZnVuYyBibDJfcGxhdF9wcmVsb2FkX3NldHVwCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIFBsYWNlaG9sZGVyIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCBiZSByZWRlZmluZWQgYnkKKwkgKiBlYWNoIHBsYXRmcm9tLgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCitmdW5jIHBsYXRfdHJ5X25leHRfYm9vdF9zb3VyY2UKKwltb3YJeDAsICMwCisJcmV0CitlbmRmdW5jIHBsYXRfdHJ5X25leHRfYm9vdF9zb3VyY2UKZGlmZiAtLWdpdCBhL3BsYXQvY29tbW9uL3BsYXRfZ2ljdjIuYyBiL3BsYXQvY29tbW9uL3BsYXRfZ2ljdjIuYwppbmRleCA1MGE4MTgxLi4zOGUxYTYxIDEwMDY0NAotLS0gYS9wbGF0L2NvbW1vbi9wbGF0X2dpY3YyLmMKKysrIGIvcGxhdC9jb21tb24vcGxhdF9naWN2Mi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSwgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAqLwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxnaWNfY29tbW9uLmg+CiAjaW5jbHVkZSA8Z2ljdjIuaD4KICNpbmNsdWRlIDxpbnRlcnJ1cHRfbWdtdC5oPgorI2luY2x1ZGUgPHBsYXRmb3JtLmg+CiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIHBsYXRmb3JtIEdJQyBmdW5jdGlvbnMgYXJlIHdlYWtseSBkZWZpbmVkLiBUaGV5CkBAIC0yMCw2ICsyMSwxOCBAQAogI3ByYWdtYSB3ZWFrIHBsYXRfaWNfZW5kX29mX2ludGVycnVwdAogI3ByYWdtYSB3ZWFrIHBsYXRfaW50ZXJydXB0X3R5cGVfdG9fbGluZQogCisjcHJhZ21hIHdlYWsgcGxhdF9pY19nZXRfcnVubmluZ19wcmlvcml0eQorI3ByYWdtYSB3ZWFrIHBsYXRfaWNfaXNfc3BpCisjcHJhZ21hIHdlYWsgcGxhdF9pY19pc19wcGkKKyNwcmFnbWEgd2VhayBwbGF0X2ljX2lzX3NnaQorI3ByYWdtYSB3ZWFrIHBsYXRfaWNfZ2V0X2ludGVycnVwdF9hY3RpdmUKKyNwcmFnbWEgd2VhayBwbGF0X2ljX2VuYWJsZV9pbnRlcnJ1cHQKKyNwcmFnbWEgd2VhayBwbGF0X2ljX2Rpc2FibGVfaW50ZXJydXB0CisjcHJhZ21hIHdlYWsgcGxhdF9pY19zZXRfaW50ZXJydXB0X3ByaW9yaXR5CisjcHJhZ21hIHdlYWsgcGxhdF9pY19zZXRfaW50ZXJydXB0X3R5cGUKKyNwcmFnbWEgd2VhayBwbGF0X2ljX3JhaXNlX2VsM19zZ2kKKyNwcmFnbWEgd2VhayBwbGF0X2ljX3NldF9zcGlfcm91dGluZworCiAvKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgaW50ZXJydXB0IGF0CiAgKiB0aGUgSW50ZXJydXB0IGNvbnRyb2xsZXIKQEAgLTUzLDggKzY2LDEzIEBACiAJaWQgPSBnaWN2Ml9nZXRfcGVuZGluZ19pbnRlcnJ1cHRfdHlwZSgpOwogCiAJLyogQXNzdW1lIHRoYXQgYWxsIHNlY3VyZSBpbnRlcnJ1cHRzIGFyZSBTLUVMMSBpbnRlcnJ1cHRzICovCi0JaWYgKGlkIDwgUEVORElOR19HMV9JTlRJRCkKKwlpZiAoaWQgPCBQRU5ESU5HX0cxX0lOVElEKSB7CisjaWYgR0lDVjJfRzBfRk9SX0VMMworCQlyZXR1cm4gSU5UUl9UWVBFX0VMMzsKKyNlbHNlCiAJCXJldHVybiBJTlRSX1RZUEVfU19FTDE7CisjZW5kaWYKKwl9CiAKIAlpZiAoaWQgPT0gR0lDX1NQVVJJT1VTX0lOVEVSUlVQVCkKIAkJcmV0dXJuIElOVFJfVFlQRV9JTlZBTDsKQEAgLTgzLDcgKzEwMSwxMiBAQAogCXR5cGUgPSBnaWN2Ml9nZXRfaW50ZXJydXB0X2dyb3VwKGlkKTsKIAogCS8qIEFzc3VtZSB0aGF0IGFsbCBzZWN1cmUgaW50ZXJydXB0cyBhcmUgUy1FTDEgaW50ZXJydXB0cyAqLwotCXJldHVybiAodHlwZSkgPyBJTlRSX1RZUEVfTlMgOiBJTlRSX1RZUEVfU19FTDE7CisJcmV0dXJuIHR5cGUgPT0gR0lDVjJfSU5UUl9HUk9VUDEgPyBJTlRSX1RZUEVfTlMgOgorI2lmIEdJQ1YyX0cwX0ZPUl9FTDMKKwkJSU5UUl9UWVBFX0VMMzsKKyNlbHNlCisJCUlOVFJfVFlQRV9TX0VMMTsKKyNlbmRpZgogfQogCiAvKgpAQCAtMTIyLDMgKzE0NSwxNDUgQEAKIAlyZXR1cm4gKChnaWN2Ml9pc19maXFfZW5hYmxlZCgpKSA/IF9fYnVpbHRpbl9jdHooU0NSX0ZJUV9CSVQpIDoKIAkJCQkJCV9fYnVpbHRpbl9jdHooU0NSX0lSUV9CSVQpKTsKIH0KKwordW5zaWduZWQgaW50IHBsYXRfaWNfZ2V0X3J1bm5pbmdfcHJpb3JpdHkodm9pZCkKK3sKKwlyZXR1cm4gZ2ljdjJfZ2V0X3J1bm5pbmdfcHJpb3JpdHkoKTsKK30KKworaW50IHBsYXRfaWNfaXNfc3BpKHVuc2lnbmVkIGludCBpZCkKK3sKKwlyZXR1cm4gKGlkID49IE1JTl9TUElfSUQpICYmIChpZCA8PSBNQVhfU1BJX0lEKTsKK30KKworaW50IHBsYXRfaWNfaXNfcHBpKHVuc2lnbmVkIGludCBpZCkKK3sKKwlyZXR1cm4gKGlkID49IE1JTl9QUElfSUQpICYmIChpZCA8IE1JTl9TUElfSUQpOworfQorCitpbnQgcGxhdF9pY19pc19zZ2kodW5zaWduZWQgaW50IGlkKQoreworCXJldHVybiAoaWQgPj0gTUlOX1NHSV9JRCkgJiYgKGlkIDwgTUlOX1BQSV9JRCk7Cit9CisKK3Vuc2lnbmVkIGludCBwbGF0X2ljX2dldF9pbnRlcnJ1cHRfYWN0aXZlKHVuc2lnbmVkIGludCBpZCkKK3sKKwlyZXR1cm4gZ2ljdjJfZ2V0X2ludGVycnVwdF9hY3RpdmUoaWQpOworfQorCit2b2lkIHBsYXRfaWNfZW5hYmxlX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgaWQpCit7CisJZ2ljdjJfZW5hYmxlX2ludGVycnVwdChpZCk7Cit9CisKK3ZvaWQgcGxhdF9pY19kaXNhYmxlX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgaWQpCit7CisJZ2ljdjJfZGlzYWJsZV9pbnRlcnJ1cHQoaWQpOworfQorCit2b2lkIHBsYXRfaWNfc2V0X2ludGVycnVwdF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcmlvcml0eSkKK3sKKwlnaWN2Ml9zZXRfaW50ZXJydXB0X3ByaW9yaXR5KGlkLCBwcmlvcml0eSk7Cit9CisKK2ludCBwbGF0X2ljX2hhc19pbnRlcnJ1cHRfdHlwZSh1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKyNpZiBHSUNWMl9HMF9GT1JfRUwzCisJY2FzZSBJTlRSX1RZUEVfRUwzOgorI2Vsc2UKKwljYXNlIElOVFJfVFlQRV9TX0VMMToKKyNlbmRpZgorCWNhc2UgSU5UUl9UWVBFX05TOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3ZvaWQgcGxhdF9pY19zZXRfaW50ZXJydXB0X3R5cGUodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlpbnQgZ2ljdjJfdHlwZSA9IDA7CisKKwkvKiBNYXAgY2Fub25pY2FsIGludGVycnVwdCB0eXBlIHRvIEdJQ3YyIHR5cGUgKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKyNpZiBHSUNWMl9HMF9GT1JfRUwzCisJY2FzZSBJTlRSX1RZUEVfRUwzOgorI2Vsc2UKKwljYXNlIElOVFJfVFlQRV9TX0VMMToKKyNlbmRpZgorCQlnaWN2Ml90eXBlID0gR0lDVjJfSU5UUl9HUk9VUDA7CisJCWJyZWFrOworCWNhc2UgSU5UUl9UWVBFX05TOgorCQlnaWN2Ml90eXBlID0gR0lDVjJfSU5UUl9HUk9VUDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFzc2VydCgwKTsKKwl9CisKKwlnaWN2Ml9zZXRfaW50ZXJydXB0X3R5cGUoaWQsIGdpY3YyX3R5cGUpOworfQorCit2b2lkIHBsYXRfaWNfcmFpc2VfZWwzX3NnaShpbnQgc2dpX251bSwgdV9yZWdpc3Rlcl90IHRhcmdldCkKK3sKKyNpZiBHSUNWMl9HMF9GT1JfRUwzCisJaW50IGlkOworCisJLyogVGFyZ2V0IG11c3QgYmUgYSB2YWxpZCBNUElEUiBpbiB0aGUgc3lzdGVtICovCisJaWQgPSBwbGF0X2NvcmVfcG9zX2J5X21waWRyKHRhcmdldCk7CisJYXNzZXJ0KGlkID49IDApOworCisJLyogVmVyaWZ5IHRoYXQgdGhpcyBpcyBhIHNlY3VyZSBTR0kgKi8KKwlhc3NlcnQocGxhdF9pY19nZXRfaW50ZXJydXB0X3R5cGUoc2dpX251bSkgPT0gSU5UUl9UWVBFX0VMMyk7CisKKwlnaWN2Ml9yYWlzZV9zZ2koc2dpX251bSwgaWQpOworI2Vsc2UKKwlhc3NlcnQoMCk7CisjZW5kaWYKK30KKwordm9pZCBwbGF0X2ljX3NldF9zcGlfcm91dGluZyh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCByb3V0aW5nX21vZGUsCisJCXVfcmVnaXN0ZXJfdCBtcGlkcikKK3sKKwlpbnQgcHJvY19udW0gPSAwOworCisJc3dpdGNoIChyb3V0aW5nX21vZGUpIHsKKwljYXNlIElOVFJfUk9VVElOR19NT0RFX1BFOgorCQlwcm9jX251bSA9IHBsYXRfY29yZV9wb3NfYnlfbXBpZHIobXBpZHIpOworCQlhc3NlcnQocHJvY19udW0gPj0gMCk7CisJCWJyZWFrOworCWNhc2UgSU5UUl9ST1VUSU5HX01PREVfQU5ZOgorCQkvKiBCaXQgbWFzayBzZWxlY3RpbmcgYWxsIDggQ1BVcyBhcyBjYW5kaWRhdGVzICovCisJCXByb2NfbnVtID0gLTE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFzc2VydCgwKTsKKwl9CisKKwlnaWN2Ml9zZXRfc3BpX3JvdXRpbmcoaWQsIHByb2NfbnVtKTsKK30KKwordm9pZCBwbGF0X2ljX3NldF9pbnRlcnJ1cHRfcGVuZGluZyh1bnNpZ25lZCBpbnQgaWQpCit7CisJZ2ljdjJfc2V0X2ludGVycnVwdF9wZW5kaW5nKGlkKTsKK30KKwordm9pZCBwbGF0X2ljX2NsZWFyX2ludGVycnVwdF9wZW5kaW5nKHVuc2lnbmVkIGludCBpZCkKK3sKKwlnaWN2Ml9jbGVhcl9pbnRlcnJ1cHRfcGVuZGluZyhpZCk7Cit9CisKK3Vuc2lnbmVkIGludCBwbGF0X2ljX3NldF9wcmlvcml0eV9tYXNrKHVuc2lnbmVkIGludCBtYXNrKQoreworCXJldHVybiBnaWN2Ml9zZXRfcG1yKG1hc2spOworfQorCit1bnNpZ25lZCBpbnQgcGxhdF9pY19nZXRfaW50ZXJydXB0X2lkKHVuc2lnbmVkIGludCByYXcpCit7CisJdW5zaWduZWQgaW50IGlkID0gKHJhdyAmIElOVF9JRF9NQVNLKTsKKworCWlmIChpZCA9PSBHSUNfU1BVUklPVVNfSU5URVJSVVBUKQorCQlpZCA9IElOVFJfSURfVU5BVkFJTEFCTEU7CisKKwlyZXR1cm4gaWQ7Cit9CmRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9wbGF0X2dpY3YzLmMgYi9wbGF0L2NvbW1vbi9wbGF0X2dpY3YzLmMKaW5kZXggMDMwYTFkOS4uMDMwZWVhNyAxMDA2NDQKLS0tIGEvcGxhdC9jb21tb24vcGxhdF9naWN2My5jCisrKyBiL3BsYXQvY29tbW9uL3BsYXRfZ2ljdjMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAqLwpAQCAtMjYsNiArMjYsMjAgQEAKICNwcmFnbWEgd2VhayBwbGF0X2ljX2VuZF9vZl9pbnRlcnJ1cHQKICNwcmFnbWEgd2VhayBwbGF0X2ludGVycnVwdF90eXBlX3RvX2xpbmUKIAorI3ByYWdtYSB3ZWFrIHBsYXRfaWNfZ2V0X3J1bm5pbmdfcHJpb3JpdHkKKyNwcmFnbWEgd2VhayBwbGF0X2ljX2lzX3NwaQorI3ByYWdtYSB3ZWFrIHBsYXRfaWNfaXNfcHBpCisjcHJhZ21hIHdlYWsgcGxhdF9pY19pc19zZ2kKKyNwcmFnbWEgd2VhayBwbGF0X2ljX2dldF9pbnRlcnJ1cHRfYWN0aXZlCisjcHJhZ21hIHdlYWsgcGxhdF9pY19lbmFibGVfaW50ZXJydXB0CisjcHJhZ21hIHdlYWsgcGxhdF9pY19kaXNhYmxlX2ludGVycnVwdAorI3ByYWdtYSB3ZWFrIHBsYXRfaWNfc2V0X2ludGVycnVwdF9wcmlvcml0eQorI3ByYWdtYSB3ZWFrIHBsYXRfaWNfc2V0X2ludGVycnVwdF90eXBlCisjcHJhZ21hIHdlYWsgcGxhdF9pY19yYWlzZV9lbDNfc2dpCisjcHJhZ21hIHdlYWsgcGxhdF9pY19zZXRfc3BpX3JvdXRpbmcKKyNwcmFnbWEgd2VhayBwbGF0X2ljX3NldF9pbnRlcnJ1cHRfcGVuZGluZworI3ByYWdtYSB3ZWFrIHBsYXRfaWNfY2xlYXJfaW50ZXJydXB0X3BlbmRpbmcKKwogQ0FTU0VSVCgoSU5UUl9UWVBFX1NfRUwxID09IElOVFJfR1JPVVAxUykgJiYKIAkoSU5UUl9UWVBFX05TID09IElOVFJfR1JPVVAxTlMpICYmCiAJKElOVFJfVFlQRV9FTDMgPT0gSU5UUl9HUk9VUDApLCBhc3NlcnRfaW50ZXJydXB0X3R5cGVfbWlzbWF0Y2gpOwpAQCAtMTU1LDYgKzE2OSwxMTYgQEAKIAkJcmV0dXJuIF9fYnVpbHRpbl9jdHooU0NSX0ZJUV9CSVQpOwogCX0KIH0KKwordW5zaWduZWQgaW50IHBsYXRfaWNfZ2V0X3J1bm5pbmdfcHJpb3JpdHkodm9pZCkKK3sKKwlyZXR1cm4gZ2ljdjNfZ2V0X3J1bm5pbmdfcHJpb3JpdHkoKTsKK30KKworaW50IHBsYXRfaWNfaXNfc3BpKHVuc2lnbmVkIGludCBpZCkKK3sKKwlyZXR1cm4gKGlkID49IE1JTl9TUElfSUQpICYmIChpZCA8PSBNQVhfU1BJX0lEKTsKK30KKworaW50IHBsYXRfaWNfaXNfcHBpKHVuc2lnbmVkIGludCBpZCkKK3sKKwlyZXR1cm4gKGlkID49IE1JTl9QUElfSUQpICYmIChpZCA8IE1JTl9TUElfSUQpOworfQorCitpbnQgcGxhdF9pY19pc19zZ2kodW5zaWduZWQgaW50IGlkKQoreworCXJldHVybiAoaWQgPj0gTUlOX1NHSV9JRCkgJiYgKGlkIDwgTUlOX1BQSV9JRCk7Cit9CisKK3Vuc2lnbmVkIGludCBwbGF0X2ljX2dldF9pbnRlcnJ1cHRfYWN0aXZlKHVuc2lnbmVkIGludCBpZCkKK3sKKwlyZXR1cm4gZ2ljdjNfZ2V0X2ludGVycnVwdF9hY3RpdmUoaWQsIHBsYXRfbXlfY29yZV9wb3MoKSk7Cit9CisKK3ZvaWQgcGxhdF9pY19lbmFibGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpZCkKK3sKKwlnaWN2M19lbmFibGVfaW50ZXJydXB0KGlkLCBwbGF0X215X2NvcmVfcG9zKCkpOworfQorCit2b2lkIHBsYXRfaWNfZGlzYWJsZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGlkKQoreworCWdpY3YzX2Rpc2FibGVfaW50ZXJydXB0KGlkLCBwbGF0X215X2NvcmVfcG9zKCkpOworfQorCit2b2lkIHBsYXRfaWNfc2V0X2ludGVycnVwdF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBwcmlvcml0eSkKK3sKKwlnaWN2M19zZXRfaW50ZXJydXB0X3ByaW9yaXR5KGlkLCBwbGF0X215X2NvcmVfcG9zKCksIHByaW9yaXR5KTsKK30KKworaW50IHBsYXRfaWNfaGFzX2ludGVycnVwdF90eXBlKHVuc2lnbmVkIGludCB0eXBlKQoreworCWFzc2VydCgodHlwZSA9PSBJTlRSX1RZUEVfRUwzKSB8fCAodHlwZSA9PSBJTlRSX1RZUEVfU19FTDEpIHx8CisJCQkodHlwZSA9PSBJTlRSX1RZUEVfTlMpKTsKKwlyZXR1cm4gMTsKK30KKwordm9pZCBwbGF0X2ljX3NldF9pbnRlcnJ1cHRfdHlwZSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCB0eXBlKQoreworCWdpY3YzX3NldF9pbnRlcnJ1cHRfdHlwZShpZCwgcGxhdF9teV9jb3JlX3BvcygpLCB0eXBlKTsKK30KKwordm9pZCBwbGF0X2ljX3JhaXNlX2VsM19zZ2koaW50IHNnaV9udW0sIHVfcmVnaXN0ZXJfdCB0YXJnZXQpCit7CisJLyogVGFyZ2V0IG11c3QgYmUgYSB2YWxpZCBNUElEUiBpbiB0aGUgc3lzdGVtICovCisJYXNzZXJ0KHBsYXRfY29yZV9wb3NfYnlfbXBpZHIodGFyZ2V0KSA+PSAwKTsKKworCS8qIFZlcmlmeSB0aGF0IHRoaXMgaXMgYSBzZWN1cmUgRUwzIFNHSSAqLworCWFzc2VydChwbGF0X2ljX2dldF9pbnRlcnJ1cHRfdHlwZShzZ2lfbnVtKSA9PSBJTlRSX1RZUEVfRUwzKTsKKworCWdpY3YzX3JhaXNlX3NlY3VyZV9nMF9zZ2koc2dpX251bSwgdGFyZ2V0KTsKK30KKwordm9pZCBwbGF0X2ljX3NldF9zcGlfcm91dGluZyh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCByb3V0aW5nX21vZGUsCisJCXVfcmVnaXN0ZXJfdCBtcGlkcikKK3sKKwl1bnNpZ25lZCBpbnQgaXJtID0gMDsKKworCXN3aXRjaCAocm91dGluZ19tb2RlKSB7CisJY2FzZSBJTlRSX1JPVVRJTkdfTU9ERV9QRToKKwkJYXNzZXJ0KHBsYXRfY29yZV9wb3NfYnlfbXBpZHIobXBpZHIpID49IDApOworCQlpcm0gPSBHSUNWM19JUk1fUEU7CisJCWJyZWFrOworCWNhc2UgSU5UUl9ST1VUSU5HX01PREVfQU5ZOgorCQlpcm0gPSBHSUNWM19JUk1fQU5ZOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhc3NlcnQoMCk7CisJfQorCisJZ2ljdjNfc2V0X3NwaV9yb3V0aW5nKGlkLCBpcm0sIG1waWRyKTsKK30KKwordm9pZCBwbGF0X2ljX3NldF9pbnRlcnJ1cHRfcGVuZGluZyh1bnNpZ25lZCBpbnQgaWQpCit7CisJLyogRGlzYWxsb3cgc2V0dGluZyBTR0lzIHBlbmRpbmcgKi8KKwlhc3NlcnQoaWQgPj0gTUlOX1BQSV9JRCk7CisJZ2ljdjNfc2V0X2ludGVycnVwdF9wZW5kaW5nKGlkLCBwbGF0X215X2NvcmVfcG9zKCkpOworfQorCit2b2lkIHBsYXRfaWNfY2xlYXJfaW50ZXJydXB0X3BlbmRpbmcodW5zaWduZWQgaW50IGlkKQoreworCS8qIERpc2FsbG93IHNldHRpbmcgU0dJcyBwZW5kaW5nICovCisJYXNzZXJ0KGlkID49IE1JTl9QUElfSUQpOworCWdpY3YzX2NsZWFyX2ludGVycnVwdF9wZW5kaW5nKGlkLCBwbGF0X215X2NvcmVfcG9zKCkpOworfQorCit1bnNpZ25lZCBpbnQgcGxhdF9pY19zZXRfcHJpb3JpdHlfbWFzayh1bnNpZ25lZCBpbnQgbWFzaykKK3sKKwlyZXR1cm4gZ2ljdjNfc2V0X3BtcihtYXNrKTsKK30KKwordW5zaWduZWQgaW50IHBsYXRfaWNfZ2V0X2ludGVycnVwdF9pZCh1bnNpZ25lZCBpbnQgcmF3KQoreworCXVuc2lnbmVkIGludCBpZCA9IChyYXcgJiBJTlRfSURfTUFTSyk7CisKKwlyZXR1cm4gKGdpY3YzX2lzX2ludHJfaWRfc3BlY2lhbF9pZGVudGlmaWVyKGlkKSA/CisJCQlJTlRSX0lEX1VOQVZBSUxBQkxFIDogaWQpOworfQogI2VuZGlmCiAjaWZkZWYgSU1BR0VfQkwzMgogCmRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9wbGF0X3BzY2lfY29tbW9uLmMgYi9wbGF0L2NvbW1vbi9wbGF0X3BzY2lfY29tbW9uLmMKaW5kZXggOTVhZGIwNS4uMGU4MThkMCAxMDA2NDQKLS0tIGEvcGxhdC9jb21tb24vcGxhdF9wc2NpX2NvbW1vbi5jCisrKyBiL3BsYXQvY29tbW9uL3BsYXRfcHNjaV9jb21tb24uYwpAQCAtMTgsNiArMTgsMTMgQEAKIC8qIFRpY2tzIGVsYXBzZWQgaW4gb25lIHNlY29uZCBieSBhIHNpZ25hbCBvZiAxIE1IeiAqLwogI2RlZmluZSBNSFpfVElDS1NfUEVSX1NFQyAxMDAwMDAwCiAKKy8qIE1heGltdW0gdGltZS1zdGFtcCB2YWx1ZSByZWFkIGZyb20gYXJjaGl0ZWN0dXJhbCBjb3VudGVycyAqLworI2lmZGVmIEFBUkNIMzIKKyNkZWZpbmUgTUFYX1RTCVVJTlQzMl9NQVgKKyNlbHNlCisjZGVmaW5lIE1BWF9UUwlVSU5UNjRfTUFYCisjZW5kaWYKKwogLyogRm9sbG93aW5nIGFyZSB1c2VkIGFzIElEJ3MgdG8gY2FwdHVyZSB0aW1lLXN0YW1wICovCiAjZGVmaW5lIFBTQ0lfU1RBVF9JRF9FTlRFUl9MT1dfUFdSCQkwCiAjZGVmaW5lIFBTQ0lfU1RBVF9JRF9FWElUX0xPV19QV1IJCTEKQEAgLTQ1LDcgKzUyLDcgQEAKIAlhc3NlcnQocmVzaWRlbmN5X2Rpdik7CiAKIAlpZiAocHdydXB0cyA8IHB3cmRudHMpCi0JCXJlcyA9IFVJTlQ2NF9NQVggLSBwd3JkbnRzICsgcHdydXB0czsKKwkJcmVzID0gTUFYX1RTIC0gcHdyZG50cyArIHB3cnVwdHM7CiAJZWxzZQogCQlyZXMgPSBwd3J1cHRzIC0gcHdyZG50czsKIApkaWZmIC0tZ2l0IGEvcGxhdC9jb21wYXQvcGxhdF9jb21wYXQubWsgYi9wbGF0L2NvbXBhdC9wbGF0X2NvbXBhdC5tawppbmRleCBhZjg4NTQyLi5mMTg2N2RhIDEwMDY0NAotLS0gYS9wbGF0L2NvbXBhdC9wbGF0X2NvbXBhdC5taworKysgYi9wbGF0L2NvbXBhdC9wbGF0X2NvbXBhdC5tawpAQCAtMTgsMyArMTgsNiBAQAogQkwzMV9TT1VSQ0VTCQkrPQlwbGF0L2NvbW1vbi9wbGF0X3BzY2lfY29tbW9uLmMJCVwKIAkJCQlwbGF0L2NvbXBhdC9wbGF0X3BtX2NvbXBhdC5jCQlcCiAJCQkJcGxhdC9jb21wYXQvcGxhdF90b3BvbG9neV9jb21wYXQuYworCisjIERvIG5vdCBlbmFibGUgU1ZFCitFTkFCTEVfU1ZFX0ZPUl9OUwk6PQkwCmRpZmYgLS1naXQgYS9wbGF0L2hpc2lsaWNvbi9oaWtleS9hYXJjaDY0L2hpa2V5X2NvbW1vbi5jIGIvcGxhdC9oaXNpbGljb24vaGlrZXkvYWFyY2g2NC9oaWtleV9jb21tb24uYwppbmRleCAwMmEwMGFjLi5kNWI2M2NjIDEwMDY0NAotLS0gYS9wbGF0L2hpc2lsaWNvbi9oaWtleS9hYXJjaDY0L2hpa2V5X2NvbW1vbi5jCisrKyBiL3BsYXQvaGlzaWxpY29uL2hpa2V5L2FhcmNoNjQvaGlrZXlfY29tbW9uLmMKQEAgLTU5LDcgKzU5LDcgQEAKICAqIFRoaXMgZG9lc24ndCBpbmNsdWRlIFRydXN0ZWQgUkFNIGFzIHRoZSAnbWVtX2xheW91dCcgYXJndW1lbnQgcGFzc2VkIHRvCiAgKiBoaWtleV9pbml0X21tdV9lbHgoKSB3aWxsIGdpdmUgdGhlIGF2YWlsYWJsZSBzdWJzZXQgb2YgdGhhdCwKICAqLwotI2lmIElNQUdFX0JMMQorI2lmZGVmIElNQUdFX0JMMQogc3RhdGljIGNvbnN0IG1tYXBfcmVnaW9uX3QgaGlrZXlfbW1hcFtdID0gewogCU1BUF9ERVZJQ0UsCiAJTUFQX1JPTV9QQVJBTSwKQEAgLTY4LDcgKzY4LDcgQEAKIH07CiAjZW5kaWYKIAotI2lmIElNQUdFX0JMMgorI2lmZGVmIElNQUdFX0JMMgogc3RhdGljIGNvbnN0IG1tYXBfcmVnaW9uX3QgaGlrZXlfbW1hcFtdID0gewogCU1BUF9ERFIsCiAJTUFQX0RFVklDRSwKQEAgLTgyLDcgKzgyLDcgQEAKIH07CiAjZW5kaWYKIAotI2lmIElNQUdFX0JMMzEKKyNpZmRlZiBJTUFHRV9CTDMxCiBzdGF0aWMgY29uc3QgbW1hcF9yZWdpb25fdCBoaWtleV9tbWFwW10gPSB7CiAJTUFQX0RFVklDRSwKIAlNQVBfU1JBTSwKQEAgLTkxLDcgKzkxLDcgQEAKIH07CiAjZW5kaWYKIAotI2lmIElNQUdFX0JMMzIKKyNpZmRlZiBJTUFHRV9CTDMyCiBzdGF0aWMgY29uc3QgbW1hcF9yZWdpb25fdCBoaWtleV9tbWFwW10gPSB7CiAJTUFQX0RFVklDRSwKIAlNQVBfRERSLApkaWZmIC0tZ2l0IGEvcGxhdC9oaXNpbGljb24vaGlrZXkvaGlrZXlfYmwxX3NldHVwLmMgYi9wbGF0L2hpc2lsaWNvbi9oaWtleS9oaWtleV9ibDFfc2V0dXAuYwppbmRleCBmNTlhNTQ1Li5kZjBhZDhlIDEwMDY0NAotLS0gYS9wbGF0L2hpc2lsaWNvbi9oaWtleS9oaWtleV9ibDFfc2V0dXAuYworKysgYi9wbGF0L2hpc2lsaWNvbi9oaWtleS9oaWtleV9ibDFfc2V0dXAuYwpAQCAtNDg5LDYgKzQ4OSwxNSBAQAogCXJlc2V0X21tYzFfY2xrKCk7CiB9CiAKK3N0YXRpYyB2b2lkIGhpa2V5X3J0Y19pbml0KHZvaWQpCit7CisJdWludDMyX3QgZGF0YTsKKworCWRhdGEgPSBtbWlvX3JlYWRfMzIoQU9fU0NfUEVSSVBIX0NMS0VONCk7CisJZGF0YSB8PSBBT19TQ19QRVJJUEhfUlNURElTNF9SRVNFVF9SVEMwX047CisJbW1pb193cml0ZV8zMihBT19TQ19QRVJJUEhfQ0xLRU40LCBkYXRhKTsKK30KKwogLyoKICAqIEZ1bmN0aW9uIHdoaWNoIHdpbGwgcGVyZm9ybSBhbnkgcmVtYWluaW5nIHBsYXRmb3JtLXNwZWNpZmljIHNldHVwIHRoYXQgY2FuCiAgKiBvY2N1ciBhZnRlciB0aGUgTU1VIGFuZCBkYXRhIGNhY2hlIGhhdmUgYmVlbiBlbmFibGVkLgpAQCAtNTA1LDYgKzUxNCw4IEBACiAJaGlrZXlfcG11c3NpX2luaXQoKTsKIAloaWtleV9oaTY1NTNfaW5pdCgpOwogCisJaGlrZXlfcnRjX2luaXQoKTsKKwogCWhpa2V5X21tY19wbGxfaW5pdCgpOwogCiAJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihkd19tbWNfcGFyYW1zX3QpKTsKZGlmZiAtLWdpdCBhL3BsYXQvaGlzaWxpY29uL2hpa2V5L2hpa2V5X2JsMzFfc2V0dXAuYyBiL3BsYXQvaGlzaWxpY29uL2hpa2V5L2hpa2V5X2JsMzFfc2V0dXAuYwppbmRleCBjNTkyZmM3Li40MTJiNTkzIDEwMDY0NAotLS0gYS9wbGF0L2hpc2lsaWNvbi9oaWtleS9oaWtleV9ibDMxX3NldHVwLmMKKysrIGIvcGxhdC9oaXNpbGljb24vaGlrZXkvaGlrZXlfYmwzMV9zZXR1cC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8aGk2MjIwLmg+CiAjaW5jbHVkZSA8aGlzaV9pcGMuaD4KICNpbmNsdWRlIDxoaXNpX3B3cmMuaD4KKyNpbmNsdWRlIDxtbWlvLmg+CiAjaW5jbHVkZSA8cGxhdGZvcm1fZGVmLmg+CiAKICNpbmNsdWRlICJoaWtleV9kZWYuaCIKQEAgLTE1Miw2ICsxNTMsMjAgQEAKIAkJCSAgIEJMMzFfQ09IRVJFTlRfUkFNX0xJTUlUKTsKIH0KIAorLyogSW5pdGlhbGl6ZSBFRE1BQyBjb250cm9sbGVyIHdpdGggbm9uLXNlY3VyZSBtb2RlLiAqLworc3RhdGljIHZvaWQgaGlrZXlfZWRtYV9pbml0KHZvaWQpCit7CisJaW50IGk7CisJdWludDMyX3Qgbm9uX3NlY3VyZTsKKworCW5vbl9zZWN1cmUgPSBFRE1BQ19TRUNfQ1RSTF9JTlRSX1NFQyB8IEVETUFDX1NFQ19DVFJMX0dMT0JBTF9TRUM7CisJbW1pb193cml0ZV8zMihFRE1BQ19TRUNfQ1RSTCwgbm9uX3NlY3VyZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRURNQUNfQ0hBTk5FTF9OVU1TOyBpKyspIHsKKwkJbW1pb193cml0ZV8zMihFRE1BQ19BWElfQ09ORihpKSwgKDEgPDwgNikgfCAoMSA8PCAxOCkpOworCX0KK30KKwogdm9pZCBibDMxX3BsYXRmb3JtX3NldHVwKHZvaWQpCiB7CiAJLyogSW5pdGlhbGl6ZSB0aGUgR0lDIGRyaXZlciwgY3B1IGFuZCBkaXN0cmlidXRvciBpbnRlcmZhY2VzICovCkBAIC0xNjAsNiArMTc1LDggQEAKIAlnaWN2Ml9wY3B1X2Rpc3RpZl9pbml0KCk7CiAJZ2ljdjJfY3B1aWZfZW5hYmxlKCk7CiAKKwloaWtleV9lZG1hX2luaXQoKTsKKwogCWhpc2lfaXBjX2luaXQoKTsKIAloaXNpX3B3cmNfc2V0dXAoKTsKIH0KZGlmZiAtLWdpdCBhL3BsYXQvaGlzaWxpY29uL2hpa2V5L2hpa2V5X2lvX3N0b3JhZ2UuYyBiL3BsYXQvaGlzaWxpY29uL2hpa2V5L2hpa2V5X2lvX3N0b3JhZ2UuYwppbmRleCA2MGVjNDJiLi41N2M2NmQ1IDEwMDY0NAotLS0gYS9wbGF0L2hpc2lsaWNvbi9oaWtleS9oaWtleV9pb19zdG9yYWdlLmMKKysrIGIvcGxhdC9oaXNpbGljb24vaGlrZXkvaGlrZXlfaW9fc3RvcmFnZS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAKIHN0YXRpYyBjb25zdCBpb19ibG9ja19kZXZfc3BlY190IGVtbWNfZGV2X3NwZWMgPSB7CiAJLyogSXQncyB1c2VkIGFzIHRlbXAgYnVmZmVyIGluIGJsb2NrIGRyaXZlci4gKi8KLSNpZiBJTUFHRV9CTDEKKyNpZmRlZiBJTUFHRV9CTDEKIAkuYnVmZmVyCQk9IHsKIAkJLm9mZnNldAk9IEhJS0VZX0JMMV9NTUNfREFUQV9CQVNFLAogCQkubGVuZ3RoCT0gSElLRVlfQkwxX01NQ19EQVRBX1NJWkUsCmRpZmYgLS1naXQgYS9wbGF0L2hpc2lsaWNvbi9oaWtleS9pbmNsdWRlL2hpNjIyMC5oIGIvcGxhdC9oaXNpbGljb24vaGlrZXkvaW5jbHVkZS9oaTYyMjAuaAppbmRleCBhOWM0MDhkLi5mZTc3MjBhIDEwMDY0NAotLS0gYS9wbGF0L2hpc2lsaWNvbi9oaWtleS9pbmNsdWRlL2hpNjIyMC5oCisrKyBiL3BsYXQvaGlzaWxpY29uL2hpa2V5L2luY2x1ZGUvaGk2MjIwLmgKQEAgLTQyLDYgKzQyLDEzIEBACiAKICNkZWZpbmUgRFdVU0JfQkFTRQkJCQkweEY3MkMwMDAwCiAKKyNkZWZpbmUgRURNQUNfQkFTRQkJCQkweGY3MzcwMDAwCisjZGVmaW5lIEVETUFDX1NFQ19DVFJMCQkJCShFRE1BQ19CQVNFICsgMHg2OTQpCisjZGVmaW5lIEVETUFDX0FYSV9DT05GKHgpCQkJKEVETUFDX0JBU0UgKyAweDgyMCArICh4IDw8IDYpKQorI2RlZmluZSBFRE1BQ19TRUNfQ1RSTF9JTlRSX1NFQwkJCSgxIDw8IDEpCisjZGVmaW5lIEVETUFDX1NFQ19DVFJMX0dMT0JBTF9TRUMJCSgxIDw8IDApCisjZGVmaW5lIEVETUFDX0NIQU5ORUxfTlVNUwkJCTE2CisKICNkZWZpbmUgUE1VU1NJX0JBU0UJCQkJMHhGODAwMDAwMAogCiAjZGVmaW5lIFNQODA0X1RJTUVSMF9CQVNFCQkJMHhGODAwODAwMApkaWZmIC0tZ2l0IGEvcGxhdC9oaXNpbGljb24vaGlrZXkvaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaCBiL3BsYXQvaGlzaWxpY29uL2hpa2V5L2luY2x1ZGUvcGxhdGZvcm1fZGVmLmgKaW5kZXggMDE4MDY1NC4uZjRhM2ZkNCAxMDA2NDQKLS0tIGEvcGxhdC9oaXNpbGljb24vaGlrZXkvaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaAorKysgYi9wbGF0L2hpc2lsaWNvbi9oaWtleS9pbmNsdWRlL3BsYXRmb3JtX2RlZi5oCkBAIC0xNTEsMTUgKzE1MSwxNSBAQAogICovCiAjZGVmaW5lIEFERFJfU1BBQ0VfU0laRQkJCSgxdWxsIDw8IDMyKQogCi0jaWYgSU1BR0VfQkwxIHx8IElNQUdFX0JMMzIKKyNpZiBkZWZpbmVkKElNQUdFX0JMMSkgfHwgZGVmaW5lZChJTUFHRV9CTDMyKQogI2RlZmluZSBNQVhfWExBVF9UQUJMRVMJCQkzCiAjZW5kaWYKIAotI2lmIElNQUdFX0JMMzEKKyNpZmRlZiBJTUFHRV9CTDMxCiAjZGVmaW5lIE1BWF9YTEFUX1RBQkxFUwkJCTQKICNlbmRpZgogCi0jaWYgSU1BR0VfQkwyCisjaWZkZWYgSU1BR0VfQkwyCiAjaWYgTE9BRF9JTUFHRV9WMgogI2lmZGVmIFNQRF9vcHRlZWQKICNkZWZpbmUgTUFYX1hMQVRfVEFCTEVTCQkJNApkaWZmIC0tZ2l0IGEvcGxhdC9oaXNpbGljb24vaGlrZXkvcGxhdGZvcm0ubWsgYi9wbGF0L2hpc2lsaWNvbi9oaWtleS9wbGF0Zm9ybS5tawppbmRleCAyNjIxOGE0Li4xOGI1ZTE1IDEwMDY0NAotLS0gYS9wbGF0L2hpc2lsaWNvbi9oaWtleS9wbGF0Zm9ybS5taworKysgYi9wbGF0L2hpc2lsaWNvbi9oaWtleS9wbGF0Zm9ybS5tawpAQCAtMjQsNiArMjQsNyBAQAogUExBVF9QTDA2MV9NQVhfR1BJT1MJCTo9CTE2MAogQ09MRF9CT09UX1NJTkdMRV9DUFUJCTo9CTEKIFBST0dSQU1NQUJMRV9SRVNFVF9BRERSRVNTCTo9CTEKK0VOQUJMRV9TVkVfRk9SX05TCQk6PQkwCiAKICMgUHJvY2VzcyBmbGFncwogJChldmFsICQoY2FsbCBhZGRfZGVmaW5lLEhJS0VZX1RTUF9SQU1fTE9DQVRJT05fSUQpKQpkaWZmIC0tZ2l0IGEvcGxhdC9oaXNpbGljb24vaGlrZXk5NjAvYWFyY2g2NC9oaWtleTk2MF9jb21tb24uYyBiL3BsYXQvaGlzaWxpY29uL2hpa2V5OTYwL2FhcmNoNjQvaGlrZXk5NjBfY29tbW9uLmMKaW5kZXggYmNlMGM5Ni4uYjEwMjBhNiAxMDA2NDQKLS0tIGEvcGxhdC9oaXNpbGljb24vaGlrZXk5NjAvYWFyY2g2NC9oaWtleTk2MF9jb21tb24uYworKysgYi9wbGF0L2hpc2lsaWNvbi9oaWtleTk2MC9hYXJjaDY0L2hpa2V5OTYwX2NvbW1vbi5jCkBAIC01NSw3ICs1NSw3IEBACiAgKiBUaGlzIGRvZXNuJ3QgaW5jbHVkZSBUcnVzdGVkIFJBTSBhcyB0aGUgJ21lbV9sYXlvdXQnIGFyZ3VtZW50IHBhc3NlZCB0bwogICogaGlrZXk5NjBfaW5pdF9tbXVfZWx4KCkgd2lsbCBnaXZlIHRoZSBhdmFpbGFibGUgc3Vic2V0IG9mIHRoYXQsCiAgKi8KLSNpZiBJTUFHRV9CTDEKKyNpZmRlZiBJTUFHRV9CTDEKIHN0YXRpYyBjb25zdCBtbWFwX3JlZ2lvbl90IGhpa2V5OTYwX21tYXBbXSA9IHsKIAlNQVBfVUZTX0RBVEEsCiAJTUFQX0JMMV9SVywKQEAgLTY1LDcgKzY1LDcgQEAKIH07CiAjZW5kaWYKIAotI2lmIElNQUdFX0JMMgorI2lmZGVmIElNQUdFX0JMMgogc3RhdGljIGNvbnN0IG1tYXBfcmVnaW9uX3QgaGlrZXk5NjBfbW1hcFtdID0gewogCU1BUF9ERFIsCiAJTUFQX0RFVklDRSwKQEAgLTc5LDcgKzc5LDcgQEAKIH07CiAjZW5kaWYKIAotI2lmIElNQUdFX0JMMzEKKyNpZmRlZiBJTUFHRV9CTDMxCiBzdGF0aWMgY29uc3QgbW1hcF9yZWdpb25fdCBoaWtleTk2MF9tbWFwW10gPSB7CiAJTUFQX0RFVklDRSwKIAlNQVBfVFNQX01FTSwKQEAgLTg3LDcgKzg3LDcgQEAKIH07CiAjZW5kaWYKIAotI2lmIElNQUdFX0JMMzIKKyNpZmRlZiBJTUFHRV9CTDMyCiBzdGF0aWMgY29uc3QgbW1hcF9yZWdpb25fdCBoaWtleTk2MF9tbWFwW10gPSB7CiAJTUFQX0RFVklDRSwKIAlNQVBfRERSLApkaWZmIC0tZ2l0IGEvcGxhdC9oaXNpbGljb24vaGlrZXk5NjAvaGlrZXk5NjBfcG0uYyBiL3BsYXQvaGlzaWxpY29uL2hpa2V5OTYwL2hpa2V5OTYwX3BtLmMKaW5kZXggMzQ4Y2RiYS4uMDc4ZjBkOCAxMDA2NDQKLS0tIGEvcGxhdC9oaXNpbGljb24vaGlrZXk5NjAvaGlrZXk5NjBfcG0uYworKysgYi9wbGF0L2hpc2lsaWNvbi9oaWtleTk2MC9oaWtleTk2MF9wbS5jCkBAIC0yNiw2ICsyNiwzOCBAQAogI2RlZmluZSBTWVNURU1fUFdSX1NUQVRFKHN0YXRlKSBcCiAJKChzdGF0ZSktPnB3cl9kb21haW5fc3RhdGVbUExBVF9NQVhfUFdSX0xWTF0pCiAKKyNkZWZpbmUgUFNUQVRFX1dJRFRICQk0CisjZGVmaW5lIFBTVEFURV9NQVNLCQkoKDEgPDwgUFNUQVRFX1dJRFRIKSAtIDEpCisKKyNkZWZpbmUgTUFLRV9QV1JTVEFURShsdmwyX3N0YXRlLCBsdmwxX3N0YXRlLCBsdmwwX3N0YXRlLCBwd3JfbHZsLCB0eXBlKSBcCisJCSgoKGx2bDJfc3RhdGUpIDw8IChQU1RBVEVfSURfU0hJRlQgKyBQU1RBVEVfV0lEVEggKiAyKSkgfCBcCisJCSAoKGx2bDFfc3RhdGUpIDw8IChQU1RBVEVfSURfU0hJRlQgKyBQU1RBVEVfV0lEVEgpKSB8IFwKKwkJICgobHZsMF9zdGF0ZSkgPDwgKFBTVEFURV9JRF9TSElGVCkpIHwgXAorCQkgKChwd3JfbHZsKSA8PCBQU1RBVEVfUFdSX0xWTF9TSElGVCkgfCBcCisJCSAoKHR5cGUpIDw8IFBTVEFURV9UWVBFX1NISUZUKSkKKworLyoKKyAqIFRoZSB0YWJsZSBzdG9yaW5nIHRoZSB2YWxpZCBpZGxlIHBvd2VyIHN0YXRlcy4gRW5zdXJlIHRoYXQgdGhlCisgKiBhcnJheSBlbnRyaWVzIGFyZSBwb3B1bGF0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHN0YXRlLWlkIHRvCisgKiBlbmFibGUgdXMgdG8gdXNlIGJpbmFyeSBzZWFyY2ggZHVyaW5nIHBvd2VyIHN0YXRlIHZhbGlkYXRpb24uCisgKiBUaGUgdGFibGUgbXVzdCBiZSB0ZXJtaW5hdGVkIGJ5IGEgTlVMTCBlbnRyeS4KKyAqLworY29uc3QgdW5zaWduZWQgaW50IGhpa2V5OTYwX3B3cl9pZGxlX3N0YXRlc1tdID0geworCS8qIFN0YXRlLWlkIC0gMHgwMDEgKi8KKwlNQUtFX1BXUlNUQVRFKFBMQVRfTUFYX1JVTl9TVEFURSwgUExBVF9NQVhfUlVOX1NUQVRFLAorCQkgICAgICBQTEFUX01BWF9TVEJfU1RBVEUsIE1QSURSX0FGRkxWTDAsIFBTVEFURV9UWVBFX1NUQU5EQlkpLAorCS8qIFN0YXRlLWlkIC0gMHgwMDIgKi8KKwlNQUtFX1BXUlNUQVRFKFBMQVRfTUFYX1JVTl9TVEFURSwgUExBVF9NQVhfUlVOX1NUQVRFLAorCQkgICAgICBQTEFUX01BWF9SRVRfU1RBVEUsIE1QSURSX0FGRkxWTDAsIFBTVEFURV9UWVBFX1NUQU5EQlkpLAorCS8qIFN0YXRlLWlkIC0gMHgwMDMgKi8KKwlNQUtFX1BXUlNUQVRFKFBMQVRfTUFYX1JVTl9TVEFURSwgUExBVF9NQVhfUlVOX1NUQVRFLAorCQkgICAgICBQTEFUX01BWF9PRkZfU1RBVEUsIE1QSURSX0FGRkxWTDAsIFBTVEFURV9UWVBFX1BPV0VSRE9XTiksCisJLyogU3RhdGUtaWQgLSAweDAzMyAqLworCU1BS0VfUFdSU1RBVEUoUExBVF9NQVhfUlVOX1NUQVRFLCBQTEFUX01BWF9PRkZfU1RBVEUsCisJCSAgICAgIFBMQVRfTUFYX09GRl9TVEFURSwgTVBJRFJfQUZGTFZMMSwgUFNUQVRFX1RZUEVfUE9XRVJET1dOKSwKKwkwLAorfTsKKwogI2RlZmluZSBETUFDX0dMQl9SRUdfU0VDCTB4Njk0CiAjZGVmaW5lIEFYSV9DT05GX0JBU0UJCTB4ODIwCiAKQEAgLTM2LDE2ICs2OCwyMSBAQAogCXVuc2lnbmVkIGxvbmcgc2NyOwogCXVuc2lnbmVkIGludCB2YWwgPSAwOwogCi0JYXNzZXJ0KGNwdV9zdGF0ZSA9PSBQTEFUX01BWF9SRVRfU1RBVEUpOworCWFzc2VydChjcHVfc3RhdGUgPT0gUExBVF9NQVhfU1RCX1NUQVRFIHx8CisJICAgICAgIGNwdV9zdGF0ZSA9PSBQTEFUX01BWF9SRVRfU1RBVEUpOwogCiAJc2NyID0gcmVhZF9zY3JfZWwzKCk7CiAKIAkvKiBFbmFibGUgUGh5c2ljYWwgSVJRIGFuZCBGSVEgdG8gd2FrZSB0aGUgQ1BVKi8KIAl3cml0ZV9zY3JfZWwzKHNjciB8IFNDUl9JUlFfQklUIHwgU0NSX0ZJUV9CSVQpOwogCi0Jc2V0X3JldGVudGlvbl90aWNrcyh2YWwpOworCWlmIChjcHVfc3RhdGUgPT0gUExBVF9NQVhfUkVUX1NUQVRFKQorCQlzZXRfcmV0ZW50aW9uX3RpY2tzKHZhbCk7CisKIAl3ZmkoKTsKLQljbHJfcmV0ZW50aW9uX3RpY2tzKHZhbCk7CisKKwlpZiAoY3B1X3N0YXRlID09IFBMQVRfTUFYX1JFVF9TVEFURSkKKwkJY2xyX3JldGVudGlvbl90aWNrcyh2YWwpOwogCiAJLyoKIAkgKiBSZXN0b3JlIFNDUiB0byB0aGUgb3JpZ2luYWwgdmFsdWUsIHN5bmNocm9uaXNhemlvbiBvZgpAQCAtMTI0LDM4ICsxNjEsMzQgQEAKIGludCBoaWtleTk2MF92YWxpZGF0ZV9wb3dlcl9zdGF0ZSh1bnNpZ25lZCBpbnQgcG93ZXJfc3RhdGUsCiAJCQkgICAgICAgcHNjaV9wb3dlcl9zdGF0ZV90ICpyZXFfc3RhdGUpCiB7Ci0JaW50IHBzdGF0ZSA9IHBzY2lfZ2V0X3BzdGF0ZV90eXBlKHBvd2VyX3N0YXRlKTsKLQlpbnQgcHdyX2x2bCA9IHBzY2lfZ2V0X3BzdGF0ZV9wd3JsdmwocG93ZXJfc3RhdGUpOworCXVuc2lnbmVkIGludCBzdGF0ZV9pZDsKIAlpbnQgaTsKIAogCWFzc2VydChyZXFfc3RhdGUpOwogCi0JaWYgKHB3cl9sdmwgPiBQTEFUX01BWF9QV1JfTFZMKQotCQlyZXR1cm4gUFNDSV9FX0lOVkFMSURfUEFSQU1TOwotCi0JLyogU2FuaXR5IGNoZWNrIHRoZSByZXF1ZXN0ZWQgc3RhdGUgKi8KLQlpZiAocHN0YXRlID09IFBTVEFURV9UWVBFX1NUQU5EQlkpIHsKLQkJLyoKLQkJICogSXQncyBwb3NzaWJsZSB0byBlbnRlciBzdGFuZGJ5IG9ubHkgb24gcG93ZXIgbGV2ZWwgMAotCQkgKiBJZ25vcmUgYW55IG90aGVyIHBvd2VyIGxldmVsLgotCQkgKi8KLQkJaWYgKHB3cl9sdmwgIT0gTVBJRFJfQUZGTFZMMCkKLQkJCXJldHVybiBQU0NJX0VfSU5WQUxJRF9QQVJBTVM7Ci0KLQkJcmVxX3N0YXRlLT5wd3JfZG9tYWluX3N0YXRlW01QSURSX0FGRkxWTDBdID0KLQkJCQkJUExBVF9NQVhfUkVUX1NUQVRFOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IE1QSURSX0FGRkxWTDA7IGkgPD0gcHdyX2x2bDsgaSsrKQotCQkJcmVxX3N0YXRlLT5wd3JfZG9tYWluX3N0YXRlW2ldID0KLQkJCQkJUExBVF9NQVhfT0ZGX1NUQVRFOworCS8qCisJICogIEN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgYSBsaW5lYXIgc2VhcmNoIGZvciBmaW5kaW5nIHRoZSBtYXRjaGluZworCSAqICBlbnRyeSBpbiB0aGUgaWRsZSBwb3dlciBzdGF0ZSBhcnJheS4gVGhpcyBjYW4gYmUgbWFkZSBhIGJpbmFyeQorCSAqICBzZWFyY2ggaWYgdGhlIG51bWJlciBvZiBlbnRyaWVzIGp1c3RpZnkgdGhlIGFkZGl0aW9uYWwgY29tcGxleGl0eS4KKwkgKi8KKwlmb3IgKGkgPSAwOyAhIWhpa2V5OTYwX3B3cl9pZGxlX3N0YXRlc1tpXTsgaSsrKSB7CisJCWlmIChwb3dlcl9zdGF0ZSA9PSBoaWtleTk2MF9wd3JfaWRsZV9zdGF0ZXNbaV0pCisJCQlicmVhazsKIAl9CiAKLQkvKgotCSAqIFdlIGV4cGVjdCB0aGUgJ3N0YXRlIGlkJyB0byBiZSB6ZXJvLgotCSAqLwotCWlmIChwc2NpX2dldF9wc3RhdGVfaWQocG93ZXJfc3RhdGUpKQorCS8qIFJldHVybiBlcnJvciBpZiBlbnRyeSBub3QgZm91bmQgaW4gdGhlIGlkbGUgc3RhdGUgYXJyYXkgKi8KKwlpZiAoIWhpa2V5OTYwX3B3cl9pZGxlX3N0YXRlc1tpXSkKIAkJcmV0dXJuIFBTQ0lfRV9JTlZBTElEX1BBUkFNUzsKIAorCWkgPSAwOworCXN0YXRlX2lkID0gcHNjaV9nZXRfcHN0YXRlX2lkKHBvd2VyX3N0YXRlKTsKKworCS8qIFBhcnNlIHRoZSBTdGF0ZSBJRCBhbmQgcG9wdWxhdGUgdGhlIHN0YXRlIGluZm8gcGFyYW1ldGVyICovCisJd2hpbGUgKHN0YXRlX2lkKSB7CisJCXJlcV9zdGF0ZS0+cHdyX2RvbWFpbl9zdGF0ZVtpKytdID0gc3RhdGVfaWQgJiBQU1RBVEVfTUFTSzsKKwkJc3RhdGVfaWQgPj49IFBTVEFURV9XSURUSDsKKwl9CisKIAlyZXR1cm4gUFNDSV9FX1NVQ0NFU1M7CiB9CiAKZGlmZiAtLWdpdCBhL3BsYXQvaGlzaWxpY29uL2hpa2V5OTYwL2luY2x1ZGUvcGxhdGZvcm1fZGVmLmggYi9wbGF0L2hpc2lsaWNvbi9oaWtleTk2MC9pbmNsdWRlL3BsYXRmb3JtX2RlZi5oCmluZGV4IDIwMjk1MmMuLjJhYzdmMmEgMTAwNjQ0Ci0tLSBhL3BsYXQvaGlzaWxpY29uL2hpa2V5OTYwL2luY2x1ZGUvcGxhdGZvcm1fZGVmLmgKKysrIGIvcGxhdC9oaXNpbGljb24vaGlrZXk5NjAvaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaApAQCAtMzEsOCArMzEsMTAgQEAKICNkZWZpbmUgUExBVF9OVU1fUFdSX0RPTUFJTlMJCShQTEFURk9STV9DT1JFX0NPVU5UICsgXAogCQkJCQkgUExBVEZPUk1fQ0xVU1RFUl9DT1VOVCArIDEpCiAKLSNkZWZpbmUgUExBVF9NQVhfUkVUX1NUQVRFCQkxCi0jZGVmaW5lIFBMQVRfTUFYX09GRl9TVEFURQkJMgorI2RlZmluZSBQTEFUX01BWF9SVU5fU1RBVEUJCTAKKyNkZWZpbmUgUExBVF9NQVhfU1RCX1NUQVRFCQkxCisjZGVmaW5lIFBMQVRfTUFYX1JFVF9TVEFURQkJMgorI2RlZmluZSBQTEFUX01BWF9PRkZfU1RBVEUJCTMKIAogI2RlZmluZSBNQVhfSU9fREVWSUNFUwkJCTMKICNkZWZpbmUgTUFYX0lPX0hBTkRMRVMJCQk0CkBAIC0xMTYsMTEgKzExOCwxMSBAQAogICovCiAjZGVmaW5lIEFERFJfU1BBQ0VfU0laRQkJCSgxdWxsIDw8IDMyKQogCi0jaWYgSU1BR0VfQkwxIHx8IElNQUdFX0JMMzEgfHwgSU1BR0VfQkwzMgorI2lmIGRlZmluZWQoSU1BR0VfQkwxKSB8fCBkZWZpbmVkKElNQUdFX0JMMzEpIHx8IGRlZmluZWQoSU1BR0VfQkwzMikKICNkZWZpbmUgTUFYX1hMQVRfVEFCTEVTCQkJMwogI2VuZGlmCiAKLSNpZiBJTUFHRV9CTDIKKyNpZmRlZiBJTUFHRV9CTDIKICNpZiBMT0FEX0lNQUdFX1YyCiAjaWZkZWYgU1BEX29wdGVlZAogI2RlZmluZSBNQVhfWExBVF9UQUJMRVMJCQk0CmRpZmYgLS1naXQgYS9wbGF0L2hpc2lsaWNvbi9oaWtleTk2MC9wbGF0Zm9ybS5tayBiL3BsYXQvaGlzaWxpY29uL2hpa2V5OTYwL3BsYXRmb3JtLm1rCmluZGV4IGRhN2JiODIuLjY5NWYwOTIgMTAwNjQ0Ci0tLSBhL3BsYXQvaGlzaWxpY29uL2hpa2V5OTYwL3BsYXRmb3JtLm1rCisrKyBiL3BsYXQvaGlzaWxpY29uL2hpa2V5OTYwL3BsYXRmb3JtLm1rCkBAIC0yMCw2ICsyMCw3IEBACiBDUkFTSF9DT05TT0xFX0JBU0UJCTo9CVBMMDExX1VBUlQ2X0JBU0UKIENPTERfQk9PVF9TSU5HTEVfQ1BVCQk6PQkxCiBQUk9HUkFNTUFCTEVfUkVTRVRfQUREUkVTUwk6PQkxCitFTkFCTEVfU1ZFX0ZPUl9OUwkJOj0JMAogCiAjIFByb2Nlc3MgZmxhZ3MKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxISUtFWTk2MF9UU1BfUkFNX0xPQ0FUSU9OX0lEKSkKZGlmZiAtLWdpdCBhL3BsYXQvaGlzaWxpY29uL3BvcGxhci9pbmNsdWRlL3BsYXRmb3JtX2RlZi5oIGIvcGxhdC9oaXNpbGljb24vcG9wbGFyL2luY2x1ZGUvcGxhdGZvcm1fZGVmLmgKaW5kZXggMWI0NGRkNy4uYjdhZmU4MiAxMDA2NDQKLS0tIGEvcGxhdC9oaXNpbGljb24vcG9wbGFyL2luY2x1ZGUvcGxhdGZvcm1fZGVmLmgKKysrIGIvcGxhdC9oaXNpbGljb24vcG9wbGFyL2luY2x1ZGUvcGxhdGZvcm1fZGVmLmgKQEAgLTksNiArOSw4IEBACiAKICNpbmNsdWRlIDxhcmNoLmg+CiAjaW5jbHVkZSA8Y29tbW9uX2RlZi5oPgorI2luY2x1ZGUgPGdpY19jb21tb24uaD4KKyNpbmNsdWRlIDxpbnRlcnJ1cHRfcHJvcHMuaD4KICNpbmNsdWRlIDx0YmJyL3RiYnJfaW1nX2RlZi5oPgogI2luY2x1ZGUgImhpMzc5OGN2MjAwLmgiCiAjaW5jbHVkZSAicG9wbGFyX2xheW91dC5oIgkJLyogQkwgbWVtb3J5IHJlZ2lvbiBzaXplcywgZXRjICovCkBAIC02OSwyMCArNzEsMzQgQEAKICNkZWZpbmUgUExBVF9BUk1fR0lDRF9CQVNFCUdJQ0RfQkFTRQogI2RlZmluZSBQTEFUX0FSTV9HSUNDX0JBU0UJR0lDQ19CQVNFCiAKLSNkZWZpbmUgUExBVF9BUk1fRzFTX0lSUVMJSElTSV9JUlFfU0VDX1NHSV8wLCAgXAotCQkJCUhJU0lfSVJRX1NFQ19TR0lfMSwgIFwKLQkJCQlISVNJX0lSUV9TRUNfU0dJXzIsICBcCi0JCQkJSElTSV9JUlFfU0VDX1NHSV8zLCAgXAotCQkJCUhJU0lfSVJRX1NFQ19TR0lfNCwgIFwKLQkJCQlISVNJX0lSUV9TRUNfU0dJXzUsICBcCi0JCQkJSElTSV9JUlFfU0VDX1NHSV82LCAgXAotCQkJCUhJU0lfSVJRX1NFQ19TR0lfNywgIFwKLQkJCQlISVNJX0lSUV9TRUNfVElNRVIwLCBcCi0JCQkJSElTSV9JUlFfU0VDX1RJTUVSMSwgXAotCQkJCUhJU0lfSVJRX1NFQ19USU1FUjIsIFwKLQkJCQlISVNJX0lSUV9TRUNfVElNRVIzLCBcCi0JCQkJSElTSV9JUlFfU0VDX0FYSQorI2RlZmluZSBQTEFUX0FSTV9HMVNfSVJRX1BST1BTKGdycCkgXAorCUlOVFJfUFJPUF9ERVNDKEhJU0lfSVJRX1NFQ19TR0lfMCwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19MRVZFTCksIFwKKwlJTlRSX1BST1BfREVTQyhISVNJX0lSUV9TRUNfU0dJXzEsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfTEVWRUwpLCBcCisJSU5UUl9QUk9QX0RFU0MoSElTSV9JUlFfU0VDX1NHSV8yLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0xFVkVMKSwgXAorCUlOVFJfUFJPUF9ERVNDKEhJU0lfSVJRX1NFQ19TR0lfMywgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19MRVZFTCksIFwKKwlJTlRSX1BST1BfREVTQyhISVNJX0lSUV9TRUNfU0dJXzQsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfTEVWRUwpLCBcCisJSU5UUl9QUk9QX0RFU0MoSElTSV9JUlFfU0VDX1NHSV81LCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0xFVkVMKSwgXAorCUlOVFJfUFJPUF9ERVNDKEhJU0lfSVJRX1NFQ19TR0lfNiwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19MRVZFTCksIFwKKwlJTlRSX1BST1BfREVTQyhISVNJX0lSUV9TRUNfU0dJXzcsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfTEVWRUwpLCBcCisJSU5UUl9QUk9QX0RFU0MoSElTSV9JUlFfU0VDX1RJTUVSMCwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19MRVZFTCksIFwKKwlJTlRSX1BST1BfREVTQyhISVNJX0lSUV9TRUNfVElNRVIxLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0xFVkVMKSwgXAorCUlOVFJfUFJPUF9ERVNDKEhJU0lfSVJRX1NFQ19USU1FUjIsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfTEVWRUwpLCBcCisJSU5UUl9QUk9QX0RFU0MoSElTSV9JUlFfU0VDX1RJTUVSMywgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19MRVZFTCksIFwKKwlJTlRSX1BST1BfREVTQyhISVNJX0lSUV9TRUNfQVhJLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0xFVkVMKQogCi0jZGVmaW5lIFBMQVRfQVJNX0cwX0lSUVMKKyNkZWZpbmUgUExBVF9BUk1fRzBfSVJRX1BST1BTKGdycCkKIAogI2VuZGlmIC8qIF9fUExBVEZPUk1fREVGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdC9oaXNpbGljb24vcG9wbGFyL3BsYXRmb3JtLm1rIGIvcGxhdC9oaXNpbGljb24vcG9wbGFyL3BsYXRmb3JtLm1rCmluZGV4IGZjNzVmZjMuLjI4ZTBkMWYgMTAwNjQ0Ci0tLSBhL3BsYXQvaGlzaWxpY29uL3BvcGxhci9wbGF0Zm9ybS5taworKysgYi9wbGF0L2hpc2lsaWNvbi9wb3BsYXIvcGxhdGZvcm0ubWsKQEAgLTEzLDYgKzEzLDcgQEAKIEVSUkFUQV9BNTNfODU1ODczCQk6PSAxCiBFUlJBVEFfQTUzXzgzNTc2OQkJOj0gMQogRVJSQVRBX0E1M184NDM0MTkJCTo9IDEKK0VOQUJMRV9TVkVfRk9SX05TCQk6PSAwCiAKIEFSTV9HSUNfQVJDSAkJCTo9IDIKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxBUk1fR0lDX0FSQ0gpKQpAQCAtNjksNCArNzAsMyBAQAogCQlwbGF0L2hpc2lsaWNvbi9wb3BsYXIvYmwzMV9wbGF0X3NldHVwLmMJCQlcCiAJCXBsYXQvaGlzaWxpY29uL3BvcGxhci9wbGF0X3RvcG9sb2d5LmMJCQlcCiAJCXBsYXQvaGlzaWxpY29uL3BvcGxhci9wbGF0X3BtLmMKLQpkaWZmIC0tZ2l0IGEvcGxhdC9tZWRpYXRlay9tdDY3OTUvYmwzMS5sZC5TIGIvcGxhdC9tZWRpYXRlay9tdDY3OTUvYmwzMS5sZC5TCmluZGV4IDBmNjBhMGMuLmVhY2IxYjIgMTAwNjQ0Ci0tLSBhL3BsYXQvbWVkaWF0ZWsvbXQ2Nzk1L2JsMzEubGQuUworKysgYi9wbGF0L21lZGlhdGVrL210Njc5NS9ibDMxLmxkLlMKQEAgLTUsNiArNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgorI2luY2x1ZGUgPHhsYXRfdGFibGVzX2RlZnMuaD4KIAogT1VUUFVUX0ZPUk1BVChQTEFURk9STV9MSU5LRVJfRk9STUFUKQogT1VUUFVUX0FSQ0goUExBVEZPUk1fTElOS0VSX0FSQ0gpCkBAIC0yOSw3ICszMCw3IEBACiAgICAgICAgICooLnZlY3RvcnMpCiAgICAgfSA+UkFNCiAKLSAgICBBU1NFUlQoLiA9PSBBTElHTig0MDk2KSwKKyAgICBBU1NFUlQoLiA9PSBBTElHTihQQUdFX1NJWkUpLAogICAgICAgICAgICAiQkwzMV9CQVNFIGFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSBwYWdlIGJvdW5kYXJ5LiIpCiAKICAgICBybyAuIDogewpAQCAtNTgsNyArNTksNyBAQAogICAgICAgICAgKiBleGVjdXRhYmxlLiAgTm8gUlcgZGF0YSBmcm9tIHRoZSBuZXh0IHNlY3Rpb24gbXVzdCBjcmVlcCBpbi4KICAgICAgICAgICogRW5zdXJlIHRoZSByZXN0IG9mIHRoZSBjdXJyZW50IG1lbW9yeSBwYWdlIGlzIHVudXNlZC4KICAgICAgICAgICovCi0gICAgICAgIC4gPSBORVhUKDQwOTYpOworICAgICAgICAuID0gTkVYVChQQUdFX1NJWkUpOwogICAgICAgICBfX1JPX0VORF9fID0gLjsKICAgICB9ID5SQU0KIApAQCAtMTQ0LDcgKzE0NSw3IEBACiAgICAgICogYXJlIG5vdCBtaXhlZCB3aXRoIG5vcm1hbCBkYXRhLiAgVGhpcyBpcyByZXF1aXJlZCB0byBzZXQgdXAgdGhlIGNvcnJlY3QKICAgICAgKiBtZW1vcnkgYXR0cmlidXRlcyBmb3IgdGhlIGNvaGVyZW50IGRhdGEgcGFnZSB0YWJsZXMuCiAgICAgICovCi0gICAgY29oZXJlbnRfcmFtIChOT0xPQUQpIDogQUxJR04oNDA5NikgeworICAgIGNvaGVyZW50X3JhbSAoTk9MT0FEKSA6IEFMSUdOKFBBR0VfU0laRSkgewogICAgICAgICBfX0NPSEVSRU5UX1JBTV9TVEFSVF9fID0gLjsKICAgICAgICAgLyoKICAgICAgICAgICogQmFrZXJ5IGxvY2tzIGFyZSBzdG9yZWQgaW4gY29oZXJlbnQgbWVtb3J5CkBAIC0xNTksNyArMTYwLDcgQEAKICAgICAgICAgICogYXMgZGV2aWNlIG1lbW9yeS4gIE5vIG90aGVyIHVuZXhwZWN0ZWQgZGF0YSBtdXN0IGNyZWVwIGluLgogICAgICAgICAgKiBFbnN1cmUgdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgbWVtb3J5IHBhZ2UgaXMgdW51c2VkLgogICAgICAgICAgKi8KLSAgICAgICAgLiA9IE5FWFQoNDA5Nik7CisgICAgICAgIC4gPSBORVhUKFBBR0VfU0laRSk7CiAgICAgICAgIF9fQ09IRVJFTlRfUkFNX0VORF9fID0gLjsKICAgICB9ID5SQU0yCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3BsYXQvbWVkaWF0ZWsvbXQ2Nzk1L3BsYXRmb3JtLm1rIGIvcGxhdC9tZWRpYXRlay9tdDY3OTUvcGxhdGZvcm0ubWsKaW5kZXggNGViYzc4ZS4uODIzMDA2NyAxMDA2NDQKLS0tIGEvcGxhdC9tZWRpYXRlay9tdDY3OTUvcGxhdGZvcm0ubWsKKysrIGIvcGxhdC9tZWRpYXRlay9tdDY3OTUvcGxhdGZvcm0ubWsKQEAgLTY2LDMgKzY2LDUgQEAKIAogJChldmFsICQoY2FsbCBhZGRfZGVmaW5lLE1US19TSVBfS0VSTkVMX0JPT1RfRU5BQkxFKSkKIAorIyBEbyBub3QgZW5hYmxlIFNWRQorRU5BQkxFX1NWRV9GT1JfTlMJOj0JMApkaWZmIC0tZ2l0IGEvcGxhdC9tZWRpYXRlay9tdDgxNzMvaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaCBiL3BsYXQvbWVkaWF0ZWsvbXQ4MTczL2luY2x1ZGUvcGxhdGZvcm1fZGVmLmgKaW5kZXggMmYwYjE0MS4uNzZlNjk0YiAxMDA2NDQKLS0tIGEvcGxhdC9tZWRpYXRlay9tdDgxNzMvaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaAorKysgYi9wbGF0L21lZGlhdGVrL210ODE3My9pbmNsdWRlL3BsYXRmb3JtX2RlZi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCkBAIC03LDYgKzcsOCBAQAogI2lmbmRlZiBfX1BMQVRGT1JNX0RFRl9IX18KICNkZWZpbmUgX19QTEFURk9STV9ERUZfSF9fCiAKKyNpbmNsdWRlIDxnaWNfY29tbW9uLmg+CisjaW5jbHVkZSA8aW50ZXJydXB0X3Byb3BzLmg+CiAjaW5jbHVkZSAibXQ4MTczX2RlZi5oIgogCiAKQEAgLTExNSwxNSArMTE3LDI0IEBACiAjZGVmaW5lIFBMQVRfQVJNX0dJQ0RfQkFTRSAgICAgIEJBU0VfR0lDRF9CQVNFCiAjZGVmaW5lIFBMQVRfQVJNX0dJQ0NfQkFTRSAgICAgIEJBU0VfR0lDQ19CQVNFCiAKLSNkZWZpbmUgUExBVF9BUk1fRzFTX0lSUVMgICAgICAgTVRfSVJRX1NFQ19TR0lfMCwgXAotCQkJCU1UX0lSUV9TRUNfU0dJXzEsIFwKLQkJCQlNVF9JUlFfU0VDX1NHSV8yLCBcCi0JCQkJTVRfSVJRX1NFQ19TR0lfMywgXAotCQkJCU1UX0lSUV9TRUNfU0dJXzQsIFwKLQkJCQlNVF9JUlFfU0VDX1NHSV81LCBcCi0JCQkJTVRfSVJRX1NFQ19TR0lfNiwgXAotCQkJCU1UX0lSUV9TRUNfU0dJXzcKKyNkZWZpbmUgUExBVF9BUk1fRzFTX0lSUV9QUk9QUyhncnApIFwKKwlJTlRSX1BST1BfREVTQyhNVF9JUlFfU0VDX1NHSV8wLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0VER0UpLCBcCisJSU5UUl9QUk9QX0RFU0MoTVRfSVJRX1NFQ19TR0lfMSwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19FREdFKSwgXAorCUlOVFJfUFJPUF9ERVNDKE1UX0lSUV9TRUNfU0dJXzIsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfRURHRSksIFwKKwlJTlRSX1BST1BfREVTQyhNVF9JUlFfU0VDX1NHSV8zLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0VER0UpLCBcCisJSU5UUl9QUk9QX0RFU0MoTVRfSVJRX1NFQ19TR0lfNCwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19FREdFKSwgXAorCUlOVFJfUFJPUF9ERVNDKE1UX0lSUV9TRUNfU0dJXzUsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfRURHRSksIFwKKwlJTlRSX1BST1BfREVTQyhNVF9JUlFfU0VDX1NHSV82LCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0VER0UpLCBcCisJSU5UUl9QUk9QX0RFU0MoTVRfSVJRX1NFQ19TR0lfNywgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19FREdFKQogCi0jZGVmaW5lIFBMQVRfQVJNX0cwX0lSUVMKKyNkZWZpbmUgUExBVF9BUk1fRzBfSVJRX1BST1BTKGdycCkKIAogI2VuZGlmIC8qIF9fUExBVEZPUk1fREVGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdC9tZWRpYXRlay9tdDgxNzMvcGxhdGZvcm0ubWsgYi9wbGF0L21lZGlhdGVrL210ODE3My9wbGF0Zm9ybS5tawppbmRleCBjZDAxNjQ1Li4yZWVmODFiIDEwMDY0NAotLS0gYS9wbGF0L21lZGlhdGVrL210ODE3My9wbGF0Zm9ybS5taworKysgYi9wbGF0L21lZGlhdGVrL210ODE3My9wbGF0Zm9ybS5tawpAQCAtNzAsMyArNzAsNiBAQAogUFJPR1JBTU1BQkxFX1JFU0VUX0FERFJFU1MJOj0JMQogCiAkKGV2YWwgJChjYWxsIGFkZF9kZWZpbmUsTVRLX1NJUF9TRVRfQVVUSE9SSVpFRF9TRUNVUkVfUkVHX0VOQUJMRSkpCisKKyMgRG8gbm90IGVuYWJsZSBTVkUKK0VOQUJMRV9TVkVfRk9SX05TCQk6PQkwCmRpZmYgLS1naXQgYS9wbGF0L252aWRpYS90ZWdyYS9jb21tb24vdGVncmFfZ2ljLmMgYi9wbGF0L252aWRpYS90ZWdyYS9jb21tb24vdGVncmFfZ2ljLmMKaW5kZXggZTQ4MGU3Ny4uM2FjZTU1NCAxMDA2NDQKLS0tIGEvcGxhdC9udmlkaWEvdGVncmEvY29tbW9uL3RlZ3JhX2dpYy5jCisrKyBiL3BsYXQvbnZpZGlhL3RlZ3JhL2NvbW1vbi90ZWdyYV9naWMuYwpAQCAtMjM3LDEwICsyMzcsMTAgQEAKIAogCWlkID0gZ2ljY19yZWFkX2hwcGlyKFRFR1JBX0dJQ0NfQkFTRSkgJiBJTlRfSURfTUFTSzsKIAotCWlmIChpZCA8IDEwMjJVTCkgeworCWlmIChpZCA8IDEwMjJVKSB7CiAJCXJldCA9IGlkOwotCX0gZWxzZSBpZiAoaWQgPT0gMTAyM1VMKSB7Ci0JCXJldCA9IDB4RkZGRkZGRkZVTDsgLyogSU5UUl9JRF9VTkFWQUlMQUJMRSAqLworCX0gZWxzZSBpZiAoaWQgPT0gMTAyM1UpIHsKKwkJcmV0ID0gMHhGRkZGRkZGRlU7IC8qIElOVFJfSURfVU5BVkFJTEFCTEUgKi8KIAl9IGVsc2UgewogCQkvKgogCQkgKiBGaW5kIG91dCB3aGljaCBub24tc2VjdXJlIGludGVycnVwdCBpdCBpcyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0CmRpZmYgLS1naXQgYS9wbGF0L252aWRpYS90ZWdyYS9wbGF0Zm9ybS5tayBiL3BsYXQvbnZpZGlhL3RlZ3JhL3BsYXRmb3JtLm1rCmluZGV4IDlhOWU3OWUuLmFkNjA2MjAgMTAwNjQ0Ci0tLSBhL3BsYXQvbnZpZGlhL3RlZ3JhL3BsYXRmb3JtLm1rCisrKyBiL3BsYXQvbnZpZGlhL3RlZ3JhL3BsYXRmb3JtLm1rCkBAIC0yOSw2ICsyOSw5IEBACiAjIGRvIG5vdCB1c2UgY29oZXJlbnQgbWVtb3J5CiBVU0VfQ09IRVJFTlRfTUVNCTo9CTAKIAorIyBkbyBub3QgZW5hYmxlIFNWRQorRU5BQkxFX1NWRV9GT1JfTlMJOj0JMAorCiBpbmNsdWRlIHBsYXQvbnZpZGlhL3RlZ3JhL2NvbW1vbi90ZWdyYV9jb21tb24ubWsKIGluY2x1ZGUgJHtTT0NfRElSfS9wbGF0Zm9ybV8ke1RBUkdFVF9TT0N9Lm1rCiAKZGlmZiAtLWdpdCBhL3BsYXQvbnZpZGlhL3RlZ3JhL3NvYy90MTg2L2RyaXZlcnMvbWNlL2FyaS5jIGIvcGxhdC9udmlkaWEvdGVncmEvc29jL3QxODYvZHJpdmVycy9tY2UvYXJpLmMKaW5kZXggZDM0ZjdlMi4uN2ViNmM2YyAxMDA2NDQKLS0tIGEvcGxhdC9udmlkaWEvdGVncmEvc29jL3QxODYvZHJpdmVycy9tY2UvYXJpLmMKKysrIGIvcGxhdC9udmlkaWEvdGVncmEvc29jL3QxODYvZHJpdmVycy9tY2UvYXJpLmMKQEAgLTQzNSw3ICs0MzUsNyBAQAogCiAJcmV0ID0gYXJpX3JlcXVlc3Rfd2FpdChhcmlfYmFzZSwgMFUsIFRFR1JBX0FSSV9NQ0EsCiAJCQkgICAgICAgKHVpbnQzMl90KW1jYV9hcmdfZGF0YSwKLQkJCSAgICAgICAodWludDMyX3QpKG1jYV9hcmdfZGF0YSA+PiAzMlVMKSk7CisJCQkgICAgICAgKHVpbnQzMl90KShtY2FfYXJnX2RhdGEgPj4gMzJVKSk7CiAJaWYgKHJldCA9PSAwKSB7CiAJCXJlc3BfbG8gPSBhcmlfZ2V0X3Jlc3BvbnNlX2xvdyhhcmlfYmFzZSk7CiAJCXJlc3BfaGkgPSBhcmlfZ2V0X3Jlc3BvbnNlX2hpZ2goYXJpX2Jhc2UpOwpAQCAtNDUwLDcgKzQ1MCw3IEBACiAJCQlpZiAoZGF0YSAhPSBOVUxMKSB7CiAJCQkJcmVzcF9sbyA9IGFyaV9nZXRfcmVxdWVzdF9sb3coYXJpX2Jhc2UpOwogCQkJCXJlc3BfaGkgPSBhcmlfZ2V0X3JlcXVlc3RfaGlnaChhcmlfYmFzZSk7Ci0JCQkJKmRhdGEgPSAoKHVpbnQ2NF90KXJlc3BfaGkgPDwgMzJVTCkgfAorCQkJCSpkYXRhID0gKCh1aW50NjRfdClyZXNwX2hpIDw8IDMyVSkgfAogCQkJCQkgKHVpbnQ2NF90KXJlc3BfbG87CiAJCQl9CiAJCX0KQEAgLTUxMyw3ICs1MTMsNyBAQAogCQkgKiB0byB0aGUgdW5jb3JlIHBlcmZtb24gcmVnaXN0ZXJzCiAJCSAqLwogCQl2YWwgPSAocmVxX2NtZCA9PSBVTkNPUkVfUEVSRk1PTl9DTURfV1JJVEUpID8KLQkJCSh1aW50MzJfdCkqZGF0YSA6IDBVTDsKKwkJCSh1aW50MzJfdCkqZGF0YSA6IDBVOwogCiAJCXJldCA9IGFyaV9yZXF1ZXN0X3dhaXQoYXJpX2Jhc2UsIDBVLCBURUdSQV9BUklfUEVSRk1PTiwgdmFsLAogCQkJCSAgICAgICAodWludDMyX3QpcmVxKTsKZGlmZiAtLWdpdCBhL3BsYXQvcWVtdS9hYXJjaDY0L3BsYXRfaGVscGVycy5TIGIvcGxhdC9xZW11L2FhcmNoNjQvcGxhdF9oZWxwZXJzLlMKaW5kZXggZjI4N2U1Yi4uZWQ1NTM3OSAxMDA2NDQKLS0tIGEvcGxhdC9xZW11L2FhcmNoNjQvcGxhdF9oZWxwZXJzLlMKKysrIGIvcGxhdC9xZW11L2FhcmNoNjQvcGxhdF9oZWxwZXJzLlMKQEAgLTYzLDYgKzYzLDcgQEAKIGZ1bmMgcGxhdF9zZWNvbmRhcnlfY29sZF9ib290X3NldHVwCiAJLyogQ2FsY3VsYXRlIGFkZHJlc3Mgb2Ygb3VyIGhvbGQgZW50cnkgKi8KIAlibAlwbGF0X215X2NvcmVfcG9zCisJbHNsCXgwLCB4MCwgI1BMQVRfUUVNVV9IT0xEX0VOVFJZX1NISUZUCiAJbW92X2ltbQl4MiwgUExBVF9RRU1VX0hPTERfQkFTRQogCiAJLyogV2FpdCB1bnRpbCB3ZSBoYXZlIGEgZ28gKi8KZGlmZiAtLWdpdCBhL3BsYXQvcWVtdS9pbmNsdWRlL3BsYXRmb3JtX2RlZi5oIGIvcGxhdC9xZW11L2luY2x1ZGUvcGxhdGZvcm1fZGVmLmgKaW5kZXggZTkxYTdkYi4uMGFlMjhlYSAxMDA2NDQKLS0tIGEvcGxhdC9xZW11L2luY2x1ZGUvcGxhdGZvcm1fZGVmLmgKKysrIGIvcGxhdC9xZW11L2luY2x1ZGUvcGxhdGZvcm1fZGVmLmgKQEAgLTczLDkgKzczLDggQEAKICNkZWZpbmUgU0VDX0RSQU1fQkFTRQkJCTB4MGUxMDAwMDAKICNkZWZpbmUgU0VDX0RSQU1fU0laRQkJCTB4MDBmMDAwMDAKIAotLyogTG9hZCBwYWdlYWJsZSBwYXJ0IG9mIE9QLVRFRSBhdCBlbmQgb2Ygc2VjdXJlIERSQU0gKi8KLSNkZWZpbmUgUUVNVV9PUFRFRV9QQUdFQUJMRV9MT0FEX0JBU0UJKFNFQ19EUkFNX0JBU0UgKyBTRUNfRFJBTV9TSVpFIC0gXAotCQkJCQkgUUVNVV9PUFRFRV9QQUdFQUJMRV9MT0FEX1NJWkUpCisvKiBMb2FkIHBhZ2VhYmxlIHBhcnQgb2YgT1AtVEVFIDJNQiBhYm92ZSBzZWN1cmUgRFJBTSBiYXNlICovCisjZGVmaW5lIFFFTVVfT1BURUVfUEFHRUFCTEVfTE9BRF9CQVNFCShTRUNfRFJBTV9CQVNFICsgMHgwMDIwMDAwMCkKICNkZWZpbmUgUUVNVV9PUFRFRV9QQUdFQUJMRV9MT0FEX1NJWkUJMHgwMDQwMDAwMAogCiAvKgpAQCAtOTAsNyArODksOCBAQAogI2RlZmluZSBQTEFUX1FFTVVfSE9MRF9CQVNFCQkoUExBVF9RRU1VX1RSVVNURURfTUFJTEJPWF9CQVNFICsgOCkKICNkZWZpbmUgUExBVF9RRU1VX0hPTERfU0laRQkJKFBMQVRGT1JNX0NPUkVfQ09VTlQgKiBcCiAJCQkJCSBQTEFUX1FFTVVfSE9MRF9FTlRSWV9TSVpFKQotI2RlZmluZSBQTEFUX1FFTVVfSE9MRF9FTlRSWV9TSVpFCTgKKyNkZWZpbmUgUExBVF9RRU1VX0hPTERfRU5UUllfU0hJRlQJMworI2RlZmluZSBQTEFUX1FFTVVfSE9MRF9FTlRSWV9TSVpFCSgxIDw8IFBMQVRfUUVNVV9IT0xEX0VOVFJZX1NISUZUKQogI2RlZmluZSBQTEFUX1FFTVVfSE9MRF9TVEFURV9XQUlUCTAKICNkZWZpbmUgUExBVF9RRU1VX0hPTERfU1RBVEVfR08JCTEKIApkaWZmIC0tZ2l0IGEvcGxhdC9xZW11L3BsYXRmb3JtLm1rIGIvcGxhdC9xZW11L3BsYXRmb3JtLm1rCmluZGV4IGVkMTk3YTEuLjQzYWI4NDYgMTAwNjQ0Ci0tLSBhL3BsYXQvcWVtdS9wbGF0Zm9ybS5taworKysgYi9wbGF0L3FlbXUvcGxhdGZvcm0ubWsKQEAgLTEzLDYgKzEzLDcgQEAKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxRRU1VX0xPQURfQkwzMikpCiBlbmRpZgogCitQTEFUX1BBVEggICAgICAgICAgICAgICA6PSAgICAgIHBsYXQvcWVtdS8KIFBMQVRfSU5DTFVERVMJCTo9CS1JaW5jbHVkZS9wbGF0L2FybS9jb21tb24vCQlcCiAJCQkJLUlpbmNsdWRlL3BsYXQvYXJtL2NvbW1vbi9hYXJjaDY0LwlcCiAJCQkJLUlwbGF0L3FlbXUvaW5jbHVkZQkJCVwKQEAgLTM2LDYgKzM3LDUxIEBACiBQTEFUX0JMX0NPTU1PTl9TT1VSQ0VTCSs9CSR7WExBVF9UQUJMRVNfTElCX1NSQ1N9CiBlbmRpZgogCitpZm5lcSAoJHtUUlVTVEVEX0JPQVJEX0JPT1R9LDApCisKKyAgICBpbmNsdWRlIGRyaXZlcnMvYXV0aC9tYmVkdGxzL21iZWR0bHNfY3J5cHRvLm1rCisgICAgaW5jbHVkZSBkcml2ZXJzL2F1dGgvbWJlZHRscy9tYmVkdGxzX3g1MDkubWsKKworICAgIFVTRV9UQkJSX0RFRlMJOj0JMQorCisgICAgQVVUSF9TT1VSQ0VTCTo9CWRyaXZlcnMvYXV0aC9hdXRoX21vZC5jCQkJXAorCQkJCWRyaXZlcnMvYXV0aC9jcnlwdG9fbW9kLmMJCVwKKwkJCQlkcml2ZXJzL2F1dGgvaW1nX3BhcnNlcl9tb2QuYwkJXAorCQkJCWRyaXZlcnMvYXV0aC90YmJyL3RiYnJfY290LmMKKworICAgIFBMQVRfSU5DTFVERVMJKz0JLUlpbmNsdWRlL2JsMS90YmJyCisKKyAgICBCTDFfU09VUkNFUwkJKz0JJHtBVVRIX1NPVVJDRVN9CQkJCVwKKwkJCQlibDEvdGJici90YmJyX2ltZ19kZXNjLmMJCVwKKwkJCQlwbGF0L2NvbW1vbi90YmJyL3BsYXRfdGJici5jCQlcCisJCQkJcGxhdC9xZW11L3FlbXVfdHJ1c3RlZF9ib290LmMJICAgICAJXAorCQkJCSQoUExBVF9QQVRIKS9xZW11X3JvdHBrLlMKKworICAgIEJMMl9TT1VSQ0VTCQkrPQkke0FVVEhfU09VUkNFU30JCQkJXAorCQkJCXBsYXQvY29tbW9uL3RiYnIvcGxhdF90YmJyLmMJCVwKKwkJCQlwbGF0L3FlbXUvcWVtdV90cnVzdGVkX2Jvb3QuYwkgICAgIAlcCisJCQkJJChQTEFUX1BBVEgpL3FlbXVfcm90cGsuUworCisgICAgUk9UX0tFWSAgICAgICAgICAgICA9ICQoQlVJTERfUExBVCkvcm90X2tleS5wZW0KKyAgICBST1RQS19IQVNIICAgICAgICAgID0gJChCVUlMRF9QTEFUKS9yb3Rwa19zaGEyNTYuYmluCisKKyAgICAkKGV2YWwgJChjYWxsIGFkZF9kZWZpbmVfdmFsLFJPVFBLX0hBU0gsJyIkKFJPVFBLX0hBU0gpIicpKQorCisgICAgJChCVUlMRF9QTEFUKS9ibDEvcWVtdV9yb3Rway5vOiAkKFJPVFBLX0hBU0gpCisgICAgJChCVUlMRF9QTEFUKS9ibDIvcWVtdV9yb3Rway5vOiAkKFJPVFBLX0hBU0gpCisKKyAgICBjZXJ0aWZpY2F0ZXM6ICQoUk9UX0tFWSkKKworICAgICQoUk9UX0tFWSk6CisJQGVjaG8gIiAgT1BFTlNTTCAkQCIKKwkkKFEpb3BlbnNzbCBnZW5yc2EgMjA0OCA+ICRAIDI+L2Rldi9udWxsCisKKyAgICAkKFJPVFBLX0hBU0gpOiAkKFJPVF9LRVkpCisJQGVjaG8gIiAgT1BFTlNTTCAkQCIKKwkkKFEpb3BlbnNzbCByc2EgLWluICQ8IC1wdWJvdXQgLW91dGZvcm0gREVSIDI+L2Rldi9udWxsIHxcCisJb3BlbnNzbCBkZ3N0IC1zaGEyNTYgLWJpbmFyeSA+ICRAIDI+L2Rldi9udWxsCitlbmRpZgorCiBCTDFfU09VUkNFUwkJKz0JZHJpdmVycy9pby9pb19zZW1paG9zdGluZy5jCQlcCiAJCQkJZHJpdmVycy9pby9pb19zdG9yYWdlLmMJCQlcCiAJCQkJZHJpdmVycy9pby9pb19maXAuYwkJCVwKQEAgLTEwNywzICsxNTMsNiBAQAogCiAjIFByb2Nlc3MgZmxhZ3MKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxCTDMyX1JBTV9MT0NBVElPTl9JRCkpCisKKyMgRG8gbm90IGVuYWJsZSBTVkUKK0VOQUJMRV9TVkVfRk9SX05TCTo9CTAKZGlmZiAtLWdpdCBhL3BsYXQvcWVtdS9xZW11X2JsMzFfc2V0dXAuYyBiL3BsYXQvcWVtdS9xZW11X2JsMzFfc2V0dXAuYwppbmRleCA1YmY0NTg5Li5mNzlhODg1IDEwMDY0NAotLS0gYS9wbGF0L3FlbXUvcWVtdV9ibDMxX3NldHVwLmMKKysrIGIvcGxhdC9xZW11L3FlbXVfYmwzMV9zZXR1cC5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGJsX2NvbW1vbi5oPgogI2luY2x1ZGUgPGNvbnNvbGUuaD4KKyNpbmNsdWRlIDxnaWNfY29tbW9uLmg+CiAjaW5jbHVkZSA8Z2ljdjIuaD4KICNpbmNsdWRlIDxwbGF0Zm9ybV9kZWYuaD4KICNpbmNsdWRlICJxZW11X3ByaXZhdGUuaCIKQEAgLTExMiwyMiArMTEzLDQwIEBACiAJCQkgICAgICBCTF9DT0hFUkVOVF9SQU1fQkFTRSwgQkxfQ09IRVJFTlRfUkFNX0VORCk7CiB9CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaXJxX3NlY19hcnJheVtdID0gewotCVFFTVVfSVJRX1NFQ19TR0lfMCwKLQlRRU1VX0lSUV9TRUNfU0dJXzEsCi0JUUVNVV9JUlFfU0VDX1NHSV8yLAotCVFFTVVfSVJRX1NFQ19TR0lfMywKLQlRRU1VX0lSUV9TRUNfU0dJXzQsCi0JUUVNVV9JUlFfU0VDX1NHSV81LAotCVFFTVVfSVJRX1NFQ19TR0lfNiwKLQlRRU1VX0lSUV9TRUNfU0dJXzcsCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBPbiBhIEdJQ3YyIHN5c3RlbSwgdGhlIEdyb3VwIDEgc2VjdXJlIGludGVycnVwdHMgYXJlIHRyZWF0ZWQgYXMgR3JvdXAgMAorICogaW50ZXJydXB0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUExBVEZPUk1fRzFTX1BST1BTKGdycCkJCQkJCQlcCisJSU5UUl9QUk9QX0RFU0MoUUVNVV9JUlFfU0VDX1NHSV8wLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksCVwKKwkJCQkJICAgZ3JwLCBHSUNfSU5UUl9DRkdfRURHRSksCVwKKwlJTlRSX1BST1BfREVTQyhRRU1VX0lSUV9TRUNfU0dJXzEsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwJXAorCQkJCQkgICBncnAsIEdJQ19JTlRSX0NGR19FREdFKSwJXAorCUlOVFJfUFJPUF9ERVNDKFFFTVVfSVJRX1NFQ19TR0lfMiwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLAlcCisJCQkJCSAgIGdycCwgR0lDX0lOVFJfQ0ZHX0VER0UpLAlcCisJSU5UUl9QUk9QX0RFU0MoUUVNVV9JUlFfU0VDX1NHSV8zLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksCVwKKwkJCQkJICAgZ3JwLCBHSUNfSU5UUl9DRkdfRURHRSksCVwKKwlJTlRSX1BST1BfREVTQyhRRU1VX0lSUV9TRUNfU0dJXzQsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwJXAorCQkJCQkgICBncnAsIEdJQ19JTlRSX0NGR19FREdFKSwJXAorCUlOVFJfUFJPUF9ERVNDKFFFTVVfSVJRX1NFQ19TR0lfNSwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLAlcCisJCQkJCSAgIGdycCwgR0lDX0lOVFJfQ0ZHX0VER0UpLAlcCisJSU5UUl9QUk9QX0RFU0MoUUVNVV9JUlFfU0VDX1NHSV82LCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksCVwKKwkJCQkJICAgZ3JwLCBHSUNfSU5UUl9DRkdfRURHRSksCVwKKwlJTlRSX1BST1BfREVTQyhRRU1VX0lSUV9TRUNfU0dJXzcsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwJXAorCQkJCQkgICBncnAsIEdJQ19JTlRSX0NGR19FREdFKQorCisjZGVmaW5lIFBMQVRGT1JNX0cwX1BST1BTKGdycCkKKworc3RhdGljIGNvbnN0IGludGVycnVwdF9wcm9wX3QgcWVtdV9pbnRlcnJ1cHRfcHJvcHNbXSA9IHsKKwlQTEFURk9STV9HMVNfUFJPUFMoR0lDVjJfSU5UUl9HUk9VUDApLAorCVBMQVRGT1JNX0cwX1BST1BTKEdJQ1YyX0lOVFJfR1JPVVAwKQogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBnaWN2Ml9kcml2ZXJfZGF0YSBwbGF0X2dpY3YyX2RyaXZlcl9kYXRhID0gewogCS5naWNkX2Jhc2UgPSBHSUNEX0JBU0UsCiAJLmdpY2NfYmFzZSA9IEdJQ0NfQkFTRSwKLQkuZzBfaW50ZXJydXB0X251bSA9IEFSUkFZX1NJWkUoaXJxX3NlY19hcnJheSksCi0JLmcwX2ludGVycnVwdF9hcnJheSA9IGlycV9zZWNfYXJyYXksCisJLmludGVycnVwdF9wcm9wcyA9IHFlbXVfaW50ZXJydXB0X3Byb3BzLAorCS5pbnRlcnJ1cHRfcHJvcHNfbnVtID0gQVJSQVlfU0laRShxZW11X2ludGVycnVwdF9wcm9wcyksCiB9OwogCiB2b2lkIGJsMzFfcGxhdGZvcm1fc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL3BsYXQvcWVtdS9xZW11X2lvX3N0b3JhZ2UuYyBiL3BsYXQvcWVtdS9xZW11X2lvX3N0b3JhZ2UuYwppbmRleCBlMGY3ZThhLi4xOTE4ZjIxIDEwMDY0NAotLS0gYS9wbGF0L3FlbXUvcWVtdV9pb19zdG9yYWdlLmMKKysrIGIvcGxhdC9xZW11L3FlbXVfaW9fc3RvcmFnZS5jCkBAIC0yNiwxNCArMjYsMTQgQEAKICNkZWZpbmUgQkwzM19JTUFHRV9OQU1FCQkJImJsMzMuYmluIgogCiAjaWYgVFJVU1RFRF9CT0FSRF9CT09UCi0jZGVmaW5lIEJMMl9DRVJUX05BTUUJCQkiYmwyLmNydCIKKyNkZWZpbmUgVFJVU1RFRF9CT09UX0ZXX0NFUlRfTkFNRQkidGJfZncuY3J0IgogI2RlZmluZSBUUlVTVEVEX0tFWV9DRVJUX05BTUUJCSJ0cnVzdGVkX2tleS5jcnQiCi0jZGVmaW5lIEJMMzFfS0VZX0NFUlRfTkFNRQkJImJsMzFfa2V5LmNydCIKLSNkZWZpbmUgQkwzMl9LRVlfQ0VSVF9OQU1FCQkiYmwzMl9rZXkuY3J0IgotI2RlZmluZSBCTDMzX0tFWV9DRVJUX05BTUUJCSJibDMzX2tleS5jcnQiCi0jZGVmaW5lIEJMMzFfQ0VSVF9OQU1FCQkJImJsMzEuY3J0IgotI2RlZmluZSBCTDMyX0NFUlRfTkFNRQkJCSJibDMyLmNydCIKLSNkZWZpbmUgQkwzM19DRVJUX05BTUUJCQkiYmwzMy5jcnQiCisjZGVmaW5lIFNPQ19GV19LRVlfQ0VSVF9OQU1FCQkic29jX2Z3X2tleS5jcnQiCisjZGVmaW5lIFRPU19GV19LRVlfQ0VSVF9OQU1FCQkidG9zX2Z3X2tleS5jcnQiCisjZGVmaW5lIE5UX0ZXX0tFWV9DRVJUX05BTUUJCSJudF9md19rZXkuY3J0IgorI2RlZmluZSBTT0NfRldfQ09OVEVOVF9DRVJUX05BTUUJInNvY19md19jb250ZW50LmNydCIKKyNkZWZpbmUgVE9TX0ZXX0NPTlRFTlRfQ0VSVF9OQU1FCSJ0b3NfZndfY29udGVudC5jcnQiCisjZGVmaW5lIE5UX0ZXX0NPTlRFTlRfQ0VSVF9OQU1FCQkibnRfZndfY29udGVudC5jcnQiCiAjZW5kaWYgLyogVFJVU1RFRF9CT0FSRF9CT09UICovCiAKIApAQCAtNzYsMzYgKzc2LDM2IEBACiB9OwogCiAjaWYgVFJVU1RFRF9CT0FSRF9CT09UCi1zdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgYmwyX2NlcnRfdXVpZF9zcGVjID0gewotCS51dWlkID0gVVVJRF9UUlVTVEVEX0JPT1RfRklSTVdBUkVfQkwyX0NFUlQsCitzdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgdGJfZndfY2VydF91dWlkX3NwZWMgPSB7CisJLnV1aWQgPSBVVUlEX1RSVVNURURfQk9PVF9GV19DRVJULAogfTsKIAogc3RhdGljIGNvbnN0IGlvX3V1aWRfc3BlY190IHRydXN0ZWRfa2V5X2NlcnRfdXVpZF9zcGVjID0gewogCS51dWlkID0gVVVJRF9UUlVTVEVEX0tFWV9DRVJULAogfTsKIAotc3RhdGljIGNvbnN0IGlvX3V1aWRfc3BlY190IGJsMzFfa2V5X2NlcnRfdXVpZF9zcGVjID0gewotCS51dWlkID0gVVVJRF9FTDNfUlVOVElNRV9GSVJNV0FSRV9CTDMxX0tFWV9DRVJULAorc3RhdGljIGNvbnN0IGlvX3V1aWRfc3BlY190IHNvY19md19rZXlfY2VydF91dWlkX3NwZWMgPSB7CisJLnV1aWQgPSBVVUlEX1NPQ19GV19LRVlfQ0VSVCwKIH07CiAKLXN0YXRpYyBjb25zdCBpb191dWlkX3NwZWNfdCBibDMyX2tleV9jZXJ0X3V1aWRfc3BlYyA9IHsKLQkudXVpZCA9IFVVSURfU0VDVVJFX1BBWUxPQURfQkwzMl9LRVlfQ0VSVCwKK3N0YXRpYyBjb25zdCBpb191dWlkX3NwZWNfdCB0b3NfZndfa2V5X2NlcnRfdXVpZF9zcGVjID0geworCS51dWlkID0gVVVJRF9UUlVTVEVEX09TX0ZXX0tFWV9DRVJULAogfTsKIAotc3RhdGljIGNvbnN0IGlvX3V1aWRfc3BlY190IGJsMzNfa2V5X2NlcnRfdXVpZF9zcGVjID0gewotCS51dWlkID0gVVVJRF9OT05fVFJVU1RFRF9GSVJNV0FSRV9CTDMzX0tFWV9DRVJULAorc3RhdGljIGNvbnN0IGlvX3V1aWRfc3BlY190IG50X2Z3X2tleV9jZXJ0X3V1aWRfc3BlYyA9IHsKKwkudXVpZCA9IFVVSURfTk9OX1RSVVNURURfRldfS0VZX0NFUlQsCiB9OwogCi1zdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgYmwzMV9jZXJ0X3V1aWRfc3BlYyA9IHsKLQkudXVpZCA9IFVVSURfRUwzX1JVTlRJTUVfRklSTVdBUkVfQkwzMV9DRVJULAorc3RhdGljIGNvbnN0IGlvX3V1aWRfc3BlY190IHNvY19md19jZXJ0X3V1aWRfc3BlYyA9IHsKKwkudXVpZCA9IFVVSURfU09DX0ZXX0NPTlRFTlRfQ0VSVCwKIH07CiAKLXN0YXRpYyBjb25zdCBpb191dWlkX3NwZWNfdCBibDMyX2NlcnRfdXVpZF9zcGVjID0gewotCS51dWlkID0gVVVJRF9TRUNVUkVfUEFZTE9BRF9CTDMyX0NFUlQsCitzdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgdG9zX2Z3X2NlcnRfdXVpZF9zcGVjID0geworCS51dWlkID0gVVVJRF9UUlVTVEVEX09TX0ZXX0NPTlRFTlRfQ0VSVCwKIH07CiAKLXN0YXRpYyBjb25zdCBpb191dWlkX3NwZWNfdCBibDMzX2NlcnRfdXVpZF9zcGVjID0gewotCS51dWlkID0gVVVJRF9OT05fVFJVU1RFRF9GSVJNV0FSRV9CTDMzX0NFUlQsCitzdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgbnRfZndfY2VydF91dWlkX3NwZWMgPSB7CisJLnV1aWQgPSBVVUlEX05PTl9UUlVTVEVEX0ZXX0NPTlRFTlRfQ0VSVCwKIH07CiAjZW5kaWYgLyogVFJVU1RFRF9CT0FSRF9CT09UICovCiAKQEAgLTEzNSwzNiArMTM1LDM2IEBACiAJCS5tb2RlID0gRk9QRU5fTU9ERV9SQgogCX0sCiAjaWYgVFJVU1RFRF9CT0FSRF9CT09UCi0JW0JMMl9DRVJUX0lEXSA9IHsKLQkJLnBhdGggPSBCTDJfQ0VSVF9OQU1FLAorCVtUUlVTVEVEX0JPT1RfRldfQ0VSVF9JRF0gPSB7CisJCS5wYXRoID0gVFJVU1RFRF9CT09UX0ZXX0NFUlRfTkFNRSwKIAkJLm1vZGUgPSBGT1BFTl9NT0RFX1JCCiAJfSwKIAlbVFJVU1RFRF9LRVlfQ0VSVF9JRF0gPSB7CiAJCS5wYXRoID0gVFJVU1RFRF9LRVlfQ0VSVF9OQU1FLAogCQkubW9kZSA9IEZPUEVOX01PREVfUkIKIAl9LAotCVtCTDMxX0tFWV9DRVJUX0lEXSA9IHsKLQkJLnBhdGggPSBCTDMxX0tFWV9DRVJUX05BTUUsCisJW1NPQ19GV19LRVlfQ0VSVF9JRF0gPSB7CisJCS5wYXRoID0gU09DX0ZXX0tFWV9DRVJUX05BTUUsCiAJCS5tb2RlID0gRk9QRU5fTU9ERV9SQgogCX0sCi0JW0JMMzJfS0VZX0NFUlRfSURdID0gewotCQkucGF0aCA9IEJMMzJfS0VZX0NFUlRfTkFNRSwKKwlbVFJVU1RFRF9PU19GV19LRVlfQ0VSVF9JRF0gPSB7CisJCS5wYXRoID0gVE9TX0ZXX0tFWV9DRVJUX05BTUUsCiAJCS5tb2RlID0gRk9QRU5fTU9ERV9SQgogCX0sCi0JW0JMMzNfS0VZX0NFUlRfSURdID0gewotCQkucGF0aCA9IEJMMzNfS0VZX0NFUlRfTkFNRSwKKwlbTk9OX1RSVVNURURfRldfS0VZX0NFUlRfSURdID0geworCQkucGF0aCA9IE5UX0ZXX0tFWV9DRVJUX05BTUUsCiAJCS5tb2RlID0gRk9QRU5fTU9ERV9SQgogCX0sCi0JW0JMMzFfQ0VSVF9JRF0gPSB7Ci0JCS5wYXRoID0gQkwzMV9DRVJUX05BTUUsCisJW1NPQ19GV19DT05URU5UX0NFUlRfSURdID0geworCQkucGF0aCA9IFNPQ19GV19DT05URU5UX0NFUlRfTkFNRSwKIAkJLm1vZGUgPSBGT1BFTl9NT0RFX1JCCiAJfSwKLQlbQkwzMl9DRVJUX0lEXSA9IHsKLQkJLnBhdGggPSBCTDMyX0NFUlRfTkFNRSwKKwlbVFJVU1RFRF9PU19GV19DT05URU5UX0NFUlRfSURdID0geworCQkucGF0aCA9IFRPU19GV19DT05URU5UX0NFUlRfTkFNRSwKIAkJLm1vZGUgPSBGT1BFTl9NT0RFX1JCCiAJfSwKLQlbQkwzM19DRVJUX0lEXSA9IHsKLQkJLnBhdGggPSBCTDMzX0NFUlRfTkFNRSwKKwlbTk9OX1RSVVNURURfRldfQ09OVEVOVF9DRVJUX0lEXSA9IHsKKwkJLnBhdGggPSBOVF9GV19DT05URU5UX0NFUlRfTkFNRSwKIAkJLm1vZGUgPSBGT1BFTl9NT0RFX1JCCiAJfSwKICNlbmRpZiAvKiBUUlVTVEVEX0JPQVJEX0JPT1QgKi8KQEAgLTIxOSw5ICsyMTksOSBAQAogCQlvcGVuX2ZpcAogCX0sCiAjaWYgVFJVU1RFRF9CT0FSRF9CT09UCi0JW0JMMl9DRVJUX0lEXSA9IHsKKwlbVFJVU1RFRF9CT09UX0ZXX0NFUlRfSURdID0gewogCQkmZmlwX2Rldl9oYW5kbGUsCi0JCSh1aW50cHRyX3QpJmJsMl9jZXJ0X3V1aWRfc3BlYywKKwkJKHVpbnRwdHJfdCkmdGJfZndfY2VydF91dWlkX3NwZWMsCiAJCW9wZW5fZmlwCiAJfSwKIAlbVFJVU1RFRF9LRVlfQ0VSVF9JRF0gPSB7CkBAIC0yMjksMzQgKzIyOSwzNCBAQAogCQkodWludHB0cl90KSZ0cnVzdGVkX2tleV9jZXJ0X3V1aWRfc3BlYywKIAkJb3Blbl9maXAKIAl9LAotCVtCTDMxX0tFWV9DRVJUX0lEXSA9IHsKKwlbU09DX0ZXX0tFWV9DRVJUX0lEXSA9IHsKIAkJJmZpcF9kZXZfaGFuZGxlLAotCQkodWludHB0cl90KSZibDMxX2tleV9jZXJ0X3V1aWRfc3BlYywKKwkJKHVpbnRwdHJfdCkmc29jX2Z3X2tleV9jZXJ0X3V1aWRfc3BlYywKIAkJb3Blbl9maXAKIAl9LAotCVtCTDMyX0tFWV9DRVJUX0lEXSA9IHsKKwlbVFJVU1RFRF9PU19GV19LRVlfQ0VSVF9JRF0gPSB7CiAJCSZmaXBfZGV2X2hhbmRsZSwKLQkJKHVpbnRwdHJfdCkmYmwzMl9rZXlfY2VydF91dWlkX3NwZWMsCisJCSh1aW50cHRyX3QpJnRvc19md19rZXlfY2VydF91dWlkX3NwZWMsCiAJCW9wZW5fZmlwCiAJfSwKLQlbQkwzM19LRVlfQ0VSVF9JRF0gPSB7CisJW05PTl9UUlVTVEVEX0ZXX0tFWV9DRVJUX0lEXSA9IHsKIAkJJmZpcF9kZXZfaGFuZGxlLAotCQkodWludHB0cl90KSZibDMzX2tleV9jZXJ0X3V1aWRfc3BlYywKKwkJKHVpbnRwdHJfdCkmbnRfZndfa2V5X2NlcnRfdXVpZF9zcGVjLAogCQlvcGVuX2ZpcAogCX0sCi0JW0JMMzFfQ0VSVF9JRF0gPSB7CisJW1NPQ19GV19DT05URU5UX0NFUlRfSURdID0gewogCQkmZmlwX2Rldl9oYW5kbGUsCi0JCSh1aW50cHRyX3QpJmJsMzFfY2VydF91dWlkX3NwZWMsCisJCSh1aW50cHRyX3QpJnNvY19md19jZXJ0X3V1aWRfc3BlYywKIAkJb3Blbl9maXAKIAl9LAotCVtCTDMyX0NFUlRfSURdID0geworCVtUUlVTVEVEX09TX0ZXX0NPTlRFTlRfQ0VSVF9JRF0gPSB7CiAJCSZmaXBfZGV2X2hhbmRsZSwKLQkJKHVpbnRwdHJfdCkmYmwzMl9jZXJ0X3V1aWRfc3BlYywKKwkJKHVpbnRwdHJfdCkmdG9zX2Z3X2NlcnRfdXVpZF9zcGVjLAogCQlvcGVuX2ZpcAogCX0sCi0JW0JMMzNfQ0VSVF9JRF0gPSB7CisJW05PTl9UUlVTVEVEX0ZXX0NPTlRFTlRfQ0VSVF9JRF0gPSB7CiAJCSZmaXBfZGV2X2hhbmRsZSwKLQkJKHVpbnRwdHJfdCkmYmwzM19jZXJ0X3V1aWRfc3BlYywKKwkJKHVpbnRwdHJfdCkmbnRfZndfY2VydF91dWlkX3NwZWMsCiAJCW9wZW5fZmlwCiAJfSwKICNlbmRpZiAvKiBUUlVTVEVEX0JPQVJEX0JPT1QgKi8KZGlmZiAtLWdpdCBhL3BsYXQvcWVtdS9xZW11X3JvdHBrLlMgYi9wbGF0L3FlbXUvcWVtdV9yb3Rway5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMWI4M2YKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0L3FlbXUvcWVtdV9yb3Rway5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKwkuZ2xvYmFsIHFlbXVfcm90cGtfaGFzaAorCS5nbG9iYWwgcWVtdV9yb3Rwa19oYXNoX2VuZAorcWVtdV9yb3Rwa19oYXNoOgorCS8qIERFUiBoZWFkZXIgKi8KKwkuYnl0ZSAweDMwLCAweDMxLCAweDMwLCAweDBELCAweDA2LCAweDA5LCAweDYwLCAweDg2LCAweDQ4CisJLmJ5dGUgMHgwMSwgMHg2NSwgMHgwMywgMHgwNCwgMHgwMiwgMHgwMSwgMHgwNSwgMHgwMCwgMHgwNCwgMHgyMAorCS8qIFNIQTI1NiAqLworCS5pbmNiaW4gUk9UUEtfSEFTSAorcWVtdV9yb3Rwa19oYXNoX2VuZDoKZGlmZiAtLWdpdCBhL3BsYXQvcWVtdS9xZW11X3RydXN0ZWRfYm9vdC5jIGIvcGxhdC9xZW11L3FlbXVfdHJ1c3RlZF9ib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4ZmVkMgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXQvcWVtdS9xZW11X3RydXN0ZWRfYm9vdC5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxwbGF0Zm9ybS5oPgorCitleHRlcm4gY2hhciBxZW11X3JvdHBrX2hhc2hbXSwgcWVtdV9yb3Rwa19oYXNoX2VuZFtdOworCitpbnQgcGxhdF9nZXRfcm90cGtfaW5mbyh2b2lkICpjb29raWUsIHZvaWQgKiprZXlfcHRyLCB1bnNpZ25lZCBpbnQgKmtleV9sZW4sCisJCQl1bnNpZ25lZCBpbnQgKmZsYWdzKQoreworCSprZXlfcHRyID0gcWVtdV9yb3Rwa19oYXNoOworCSprZXlfbGVuID0gcWVtdV9yb3Rwa19oYXNoX2VuZCAtIHFlbXVfcm90cGtfaGFzaDsKKwkqZmxhZ3MgPSBST1RQS19JU19IQVNIOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwbGF0X2dldF9udl9jdHIodm9pZCAqY29va2llLCB1bnNpZ25lZCBpbnQgKm52X2N0cikKK3sKKwkqbnZfY3RyID0gMDsKKworCXJldHVybiAwOworfQorCitpbnQgcGxhdF9zZXRfbnZfY3RyKHZvaWQgKmNvb2tpZSwgdW5zaWduZWQgaW50IG52X2N0cikKK3sKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3BsYXQvcm9ja2NoaXAvcmszMzI4L2luY2x1ZGUvcGxhdGZvcm1fZGVmLmggYi9wbGF0L3JvY2tjaGlwL3JrMzMyOC9pbmNsdWRlL3BsYXRmb3JtX2RlZi5oCmluZGV4IDczMDRkY2YuLjM5ZDNjMjEgMTAwNjQ0Ci0tLSBhL3BsYXQvcm9ja2NoaXAvcmszMzI4L2luY2x1ZGUvcGxhdGZvcm1fZGVmLmgKKysrIGIvcGxhdC9yb2NrY2hpcC9yazMzMjgvaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaApAQCAtMjYsMTMgKzI2LDEzIEBACiAvKiBTaXplIG9mIGNhY2hlYWJsZSBzdGFja3MgKi8KICNpZiBERUJVR19YTEFUX1RBQkxFCiAjZGVmaW5lIFBMQVRGT1JNX1NUQUNLX1NJWkUgMHg4MDAKLSNlbGlmIElNQUdFX0JMMQorI2VsaWYgZGVmaW5lZChJTUFHRV9CTDEpCiAjZGVmaW5lIFBMQVRGT1JNX1NUQUNLX1NJWkUgMHg0NDAKLSNlbGlmIElNQUdFX0JMMgorI2VsaWYgZGVmaW5lZChJTUFHRV9CTDIpCiAjZGVmaW5lIFBMQVRGT1JNX1NUQUNLX1NJWkUgMHg0MDAKLSNlbGlmIElNQUdFX0JMMzEKKyNlbGlmIGRlZmluZWQoSU1BR0VfQkwzMSkKICNkZWZpbmUgUExBVEZPUk1fU1RBQ0tfU0laRSAweDgwMAotI2VsaWYgSU1BR0VfQkwzMgorI2VsaWYgZGVmaW5lZChJTUFHRV9CTDMyKQogI2RlZmluZSBQTEFURk9STV9TVEFDS19TSVpFIDB4NDQwCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvcGxhdC9yb2NrY2hpcC9yazMzMjgvcGxhdGZvcm0ubWsgYi9wbGF0L3JvY2tjaGlwL3JrMzMyOC9wbGF0Zm9ybS5tawppbmRleCA4ODYzZmI0Li41ZGU0NjgwIDEwMDY0NAotLS0gYS9wbGF0L3JvY2tjaGlwL3JrMzMyOC9wbGF0Zm9ybS5taworKysgYi9wbGF0L3JvY2tjaGlwL3JrMzMyOC9wbGF0Zm9ybS5tawpAQCAtNDgsNyArNDgsMTAgQEAKIAkJCQkke1JLX1BMQVRfU09DfS9kcml2ZXJzL3BtdS9wbXUuYwkJXAogCQkJCSR7UktfUExBVF9TT0N9L2RyaXZlcnMvc29jL3NvYy5jCiAKLUVOQUJMRV9QTEFUX0NPTVBBVCAJOj0gICAgICAwCitFTkFCTEVfUExBVF9DT01QQVQgCTo9CTAKIAogJChldmFsICQoY2FsbCBhZGRfZGVmaW5lLFBMQVRfRVhUUkFfTERfU0NSSVBUKSkKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxQTEFUX1NLSVBfT1BURUVfU19FTDFfSU5UX1JFR0lTVEVSKSkKKworIyBEbyBub3QgZW5hYmxlIFNWRQorRU5BQkxFX1NWRV9GT1JfTlMJOj0JMApkaWZmIC0tZ2l0IGEvcGxhdC9yb2NrY2hpcC9yazMzNjgvcGxhdGZvcm0ubWsgYi9wbGF0L3JvY2tjaGlwL3JrMzM2OC9wbGF0Zm9ybS5tawppbmRleCBmNjk2MGNmLi5kM2M2ZWVmIDEwMDY0NAotLS0gYS9wbGF0L3JvY2tjaGlwL3JrMzM2OC9wbGF0Zm9ybS5taworKysgYi9wbGF0L3JvY2tjaGlwL3JrMzM2OC9wbGF0Zm9ybS5tawpAQCAtNDgsNiArNDgsOSBAQAogCQkJCSR7UktfUExBVF9TT0N9L2RyaXZlcnMvc29jL3NvYy5jCQlcCiAJCQkJJHtSS19QTEFUX1NPQ30vZHJpdmVycy9kZHIvZGRyX3JrMzM2OC5jCQlcCiAKLUVOQUJMRV9QTEFUX0NPTVBBVAk6PSAgICAgIDAKK0VOQUJMRV9QTEFUX0NPTVBBVAk6PQkwCiAKICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxQTEFUX0VYVFJBX0xEX1NDUklQVCkpCisKKyMgRG8gbm90IGVuYWJsZSBTVkUKK0VOQUJMRV9TVkVfRk9SX05TCTo9CTAKZGlmZiAtLWdpdCBhL3BsYXQvcm9ja2NoaXAvcmszMzk5L2luY2x1ZGUvcGxhdC5sZC5TIGIvcGxhdC9yb2NrY2hpcC9yazMzOTkvaW5jbHVkZS9wbGF0LmxkLlMKaW5kZXggYzQyZDlhOS4uODVmNGRjMyAxMDA2NDQKLS0tIGEvcGxhdC9yb2NrY2hpcC9yazMzOTkvaW5jbHVkZS9wbGF0LmxkLlMKKysrIGIvcGxhdC9yb2NrY2hpcC9yazMzOTkvaW5jbHVkZS9wbGF0LmxkLlMKQEAgLTYsNiArNiw4IEBACiAjaWZuZGVmIF9fUk9DS0NISVBfUExBVF9MRF9TX18KICNkZWZpbmUgX19ST0NLQ0hJUF9QTEFUX0xEX1NfXwogCisjaW5jbHVkZSA8eGxhdF90YWJsZXNfZGVmcy5oPgorCiBNRU1PUlkgewogICAgIFNSQU0gKHJ3eCk6IE9SSUdJTiA9IFNSQU1fQkFTRSwgTEVOR1RIID0gU1JBTV9TSVpFCiAgICAgUE1VU1JBTSAocnd4KTogT1JJR0lOID0gUE1VU1JBTV9CQVNFLCBMRU5HVEggPSBQTVVTUkFNX1JTSVpFCkBAIC0xNCw3ICsxNiw3IEBACiBTRUNUSU9OUwogewogCS4gPSBTUkFNX0JBU0U7Ci0JQVNTRVJUKC4gPT0gQUxJR04oNDA5NiksCisJQVNTRVJUKC4gPT0gQUxJR04oUEFHRV9TSVpFKSwKIAkJIlNSQU1fQkFTRSBhZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgcGFnZSBib3VuZGFyeS4iKQogCiAJLyoKQEAgLTI3LDQwICsyOSw0MCBAQAogCSAqIHwgc3JhbSBkYXRhCiAJICogLS0tLS0tLS0tLS0tLS0tLQogCSAqLwotCS5pbmNiaW5fc3JhbSA6IEFMSUdOKDQwOTYpIHsKKwkuaW5jYmluX3NyYW0gOiBBTElHTihQQUdFX1NJWkUpIHsKIAkJX19zcmFtX2luY2Jpbl9zdGFydCA9IC47CiAJCSooLnNyYW0uaW5jYmluKQogCQkgX19zcmFtX2luY2Jpbl9yZWFsX2VuZCA9IC47Ci0JCS4gPSBBTElHTig0MDk2KTsKKwkJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJCV9fc3JhbV9pbmNiaW5fZW5kID0gLjsKIAl9ID5TUkFNCiAJQVNTRVJUKChfX3NyYW1faW5jYmluX3JlYWxfZW5kIC0gX19zcmFtX2luY2Jpbl9zdGFydCkgPD0KIAkJU1JBTV9CSU5fTElNSVQsICIuaW5jYmluX3NyYW0gaGFzIGV4Y2VlZGVkIGl0cyBsaW1pdCIpCiAKLQkudGV4dF9zcmFtIDogQUxJR04oNDA5NikgeworCS50ZXh0X3NyYW0gOiBBTElHTihQQUdFX1NJWkUpIHsKIAkJX19ibDMxX3NyYW1fdGV4dF9zdGFydCA9IC47CiAJCSooLnNyYW0udGV4dCkKIAkJKiguc3JhbS5yb2RhdGEpCiAJCV9fYmwzMV9zcmFtX3RleHRfcmVhbF9lbmQgPSAuOwotCQkuID0gQUxJR04oNDA5Nik7CisJCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCQlfX2JsMzFfc3JhbV90ZXh0X2VuZCA9IC47CiAJfSA+U1JBTQogCUFTU0VSVCgoX19ibDMxX3NyYW1fdGV4dF9yZWFsX2VuZCAtIF9fYmwzMV9zcmFtX3RleHRfc3RhcnQpIDw9CiAJCVNSQU1fVEVYVF9MSU1JVCwgIi50ZXh0X3NyYW0gaGFzIGV4Y2VlZGVkIGl0cyBsaW1pdCIpCiAKLQkuZGF0YV9zcmFtIDogQUxJR04oNDA5NikgeworCS5kYXRhX3NyYW0gOiBBTElHTihQQUdFX1NJWkUpIHsKIAkJX19ibDMxX3NyYW1fZGF0YV9zdGFydCA9IC47CiAJCSooLnNyYW0uZGF0YSkKIAkJX19ibDMxX3NyYW1fZGF0YV9yZWFsX2VuZCA9IC47Ci0JCS4gPSBBTElHTig0MDk2KTsKKwkJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJCV9fYmwzMV9zcmFtX2RhdGFfZW5kID0gLjsKIAl9ID5TUkFNCiAJQVNTRVJUKChfX2JsMzFfc3JhbV9kYXRhX3JlYWxfZW5kIC0gX19ibDMxX3NyYW1fZGF0YV9zdGFydCkgPD0KIAkJU1JBTV9EQVRBX0xJTUlULCAiLmRhdGFfc3JhbSBoYXMgZXhjZWVkZWQgaXRzIGxpbWl0IikKIAotCS5zdGFja19zcmFtIDogQUxJR04oNDA5NikgeworCS5zdGFja19zcmFtIDogQUxJR04oUEFHRV9TSVpFKSB7CiAJCV9fYmwzMV9zcmFtX3N0YWNrX3N0YXJ0ID0gLjsKLQkJLiArPSA0MDk2OworCQkuICs9IFBBR0VfU0laRTsKIAkJX19ibDMxX3NyYW1fc3RhY2tfZW5kID0gLjsKIAl9ID5TUkFNCiAKZGlmZiAtLWdpdCBhL3BsYXQvcm9ja2NoaXAvcmszMzk5L3BsYXRfc2lwX2NhbGxzLmMgYi9wbGF0L3JvY2tjaGlwL3JrMzM5OS9wbGF0X3NpcF9jYWxscy5jCmluZGV4IDA3NGRjMTkuLjJmYmRhNjcgMTAwNjQ0Ci0tLSBhL3BsYXQvcm9ja2NoaXAvcmszMzk5L3BsYXRfc2lwX2NhbGxzLmMKKysrIGIvcGxhdC9yb2NrY2hpcC9yazMzOTkvcGxhdF9zaXBfY2FsbHMuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPHBsYXRfc2lwX2NhbGxzLmg+CiAjaW5jbHVkZSA8cm9ja2NoaXBfc2lwX3N2Yy5oPgogI2luY2x1ZGUgPHJ1bnRpbWVfc3ZjLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAKICNkZWZpbmUgUktfU0lQX0REUl9DRkcJCTB4ODIwMDAwMDgKICNkZWZpbmUgRFJBTV9JTklUCQkweDAwCmRpZmYgLS1naXQgYS9wbGF0L3JvY2tjaGlwL3JrMzM5OS9wbGF0Zm9ybS5tayBiL3BsYXQvcm9ja2NoaXAvcmszMzk5L3BsYXRmb3JtLm1rCmluZGV4IDg1Y2NhMWIuLjMzYjk3MjMgMTAwNjQ0Ci0tLSBhL3BsYXQvcm9ja2NoaXAvcmszMzk5L3BsYXRmb3JtLm1rCisrKyBiL3BsYXQvcm9ja2NoaXAvcmszMzk5L3BsYXRmb3JtLm1rCkBAIC04OCw3ICs4OCwxMCBAQAogJHtCVUlMRF9QTEFUfS9ibDMxL2Nkbl9kcC5vOiBDQ0FDSEVfRVhUUkFGSUxFUz0kKEhEQ1BGVykKICR7UktfUExBVF9TT0N9L2RyaXZlcnMvZHAvY2RuX2RwLmM6ICQoSERDUEZXKQogCi0kKGV2YWwgJChjYWxsIE1BS0VfUFJFUkVRX0RJUiwke0JVSUxEX00wfSwpKQorJChldmFsICQoY2FsbCBNQUtFX1BSRVJFUV9ESVIsJHtCVUlMRF9NMH0sJHtCVUlMRF9QTEFUfSkpCiAuUEhPTlk6ICQoUkszMzk5TTBGVykKICQoUkszMzk5TTBGVyk6IHwgJHtCVUlMRF9NMH0KIAkkKE1BS0UpIC1DICR7UktfUExBVF9TT0N9L2RyaXZlcnMvbTAgQlVJTEQ9JChhYnNwYXRoICR7QlVJTERfUExBVH0vbTApCisKKyMgRG8gbm90IGVuYWJsZSBTVkUKK0VOQUJMRV9TVkVfRk9SX05TCTo9CTAKZGlmZiAtLWdpdCBhL3BsYXQvcnBpMy9hYXJjaDY0L3BsYXRfaGVscGVycy5TIGIvcGxhdC9ycGkzL2FhcmNoNjQvcGxhdF9oZWxwZXJzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhNTQyZgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXQvcnBpMy9hYXJjaDY0L3BsYXRfaGVscGVycy5TCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxhcmNoLmg+CisjaW5jbHVkZSA8YXNtX21hY3Jvcy5TPgorI2luY2x1ZGUgPGFzc2VydF9tYWNyb3MuUz4KKyNpbmNsdWRlIDxwbGF0Zm9ybV9kZWYuaD4KKworI2luY2x1ZGUgIi4uL3JwaTNfaHcuaCIKKworCS5nbG9ibAlwbGF0X2NyYXNoX2NvbnNvbGVfZmx1c2gKKwkuZ2xvYmwJcGxhdF9jcmFzaF9jb25zb2xlX2luaXQKKwkuZ2xvYmwJcGxhdF9jcmFzaF9jb25zb2xlX3B1dGMKKwkuZ2xvYmwJcGxhdGZvcm1fbWVtX2luaXQKKwkuZ2xvYmwJcGxhdF9nZXRfbXlfZW50cnlwb2ludAorCS5nbG9ibAlwbGF0X2lzX215X2NwdV9wcmltYXJ5CisJLmdsb2JsCXBsYXRfbXlfY29yZV9wb3MKKwkuZ2xvYmwJcGxhdF9yZXNldF9oYW5kbGVyCisJLmdsb2JsCXBsYXRfcnBpM19jYWxjX2NvcmVfcG9zCisJLmdsb2JsCXBsYXRfc2Vjb25kYXJ5X2NvbGRfYm9vdF9zZXR1cAorCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgdW5zaWduZWQgaW50IHBsYXRfbXlfY29yZV9wb3Modm9pZCkKKwkgKgorCSAqICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIHBsYXRfcnBpM19jYWxjX2NvcmVfcG9zKCkKKwkgKiAgZGVmaW5pdGlvbiB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBjYWxsaW5nIENQVS4KKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworZnVuYyBwbGF0X215X2NvcmVfcG9zCisJbXJzCXgwLCBtcGlkcl9lbDEKKwliCXBsYXRfcnBpM19jYWxjX2NvcmVfcG9zCitlbmRmdW5jIHBsYXRfbXlfY29yZV9wb3MKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogIHVuc2lnbmVkIGludCBwbGF0X3JwaTNfY2FsY19jb3JlX3Bvcyh1X3JlZ2lzdGVyX3QgbXBpZHIpOworCSAqCisJICogIENvcmVQb3MgPSAoQ2x1c3RlcklkICogNCkgKyBDb3JlSWQKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworZnVuYyBwbGF0X3JwaTNfY2FsY19jb3JlX3BvcworCWFuZAl4MSwgeDAsICNNUElEUl9DUFVfTUFTSworCWFuZAl4MCwgeDAsICNNUElEUl9DTFVTVEVSX01BU0sKKwlhZGQJeDAsIHgxLCB4MCwgTFNSICM2CisJcmV0CitlbmRmdW5jIHBsYXRfcnBpM19jYWxjX2NvcmVfcG9zCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIHVuc2lnbmVkIGludCBwbGF0X2lzX215X2NwdV9wcmltYXJ5ICh2b2lkKTsKKwkgKgorCSAqIEZpbmQgb3V0IHdoZXRoZXIgdGhlIGN1cnJlbnQgY3B1IGlzIHRoZSBwcmltYXJ5CisJICogY3B1LgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCitmdW5jIHBsYXRfaXNfbXlfY3B1X3ByaW1hcnkKKwltcnMJeDAsIG1waWRyX2VsMQorCWFuZAl4MCwgeDAsICMoTVBJRFJfQ0xVU1RFUl9NQVNLIHwgTVBJRFJfQ1BVX01BU0spCisJY21wCXgwLCAjUlBJM19QUklNQVJZX0NQVQorCWNzZXQJdzAsIGVxCisJcmV0CitlbmRmdW5jIHBsYXRfaXNfbXlfY3B1X3ByaW1hcnkKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogdm9pZCBwbGF0X3NlY29uZGFyeV9jb2xkX2Jvb3Rfc2V0dXAgKHZvaWQpOworCSAqCisJICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgYWN0aW9ucworCSAqIG5lZWRlZCBmb3IgYSBzZWNvbmRhcnkgY3B1IGFmdGVyIGEgY29sZCByZXNldCBlLmcKKwkgKiBtYXJrIHRoZSBjcHUncyBwcmVzZW5jZSwgbWVjaGFuaXNtIHRvIHBsYWNlIGl0IGluIGEKKwkgKiBob2xkaW5nIHBlbiBldGMuCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KK2Z1bmMgcGxhdF9zZWNvbmRhcnlfY29sZF9ib290X3NldHVwCisJLyogQ2FsY3VsYXRlIGFkZHJlc3Mgb2Ygb3VyIGhvbGQgZW50cnkgKi8KKwlibAlwbGF0X215X2NvcmVfcG9zCisJbHNsCXgwLCB4MCwgIzMKKwltb3ZfaW1tCXgyLCBQTEFUX1JQSTNfVE1fSE9MRF9CQVNFCisJYWRkCXgwLCB4MCwgeDIKKworCS8qCisJICogVGhpcyBjb2RlIHJ1bnMgd2F5IGJlZm9yZSByZXF1ZXN0aW5nIHRoZSB3YXJtYm9vdCBvZiB0aGlzIGNvcmUsCisJICogc28gaXQgaXMgcG9zc2libGUgdG8gY2xlYXIgdGhlIG1haWxib3ggYmVmb3JlIGdldHRpbmcgYSByZXF1ZXN0CisJICogdG8gYm9vdC4KKwkgKi8KKwltb3YJeDEsIFBMQVRfUlBJM19UTV9IT0xEX1NUQVRFX1dBSVQKKwlzdHIJeDEsW3gwXQorCisJLyogV2FpdCB1bnRpbCB3ZSBoYXZlIGEgZ28gKi8KK3BvbGxfbWFpbGJveDoKKwl3ZmUKKwlsZHIJeDEsIFt4MF0KKwljbXAJeDEsIFBMQVRfUlBJM19UTV9IT0xEX1NUQVRFX0dPCisJYm5lCXBvbGxfbWFpbGJveAorCisJLyogSnVtcCB0byB0aGUgcHJvdmlkZWQgZW50cnlwb2ludCAqLworCW1vdl9pbW0JeDAsIFBMQVRfUlBJM19UTV9FTlRSWVBPSU5UCisJbGRyCXgxLCBbeDBdCisJYnIJeDEKK2VuZGZ1bmMgcGxhdF9zZWNvbmRhcnlfY29sZF9ib290X3NldHVwCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiB1aW50cHRyX3QgcGxhdF9nZXRfbXlfZW50cnlwb2ludCAodm9pZCk7CisJICoKKwkgKiBNYWluIGpvYiBvZiB0aGlzIHJvdXRpbmUgaXMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIGNvbGQgYW5kIGEgd2FybQorCSAqIGJvb3QuCisJICoKKwkgKiBUaGlzIGZ1bmN0aW9ucyByZXR1cm5zOgorCSAqICAtIDAgZm9yIGEgY29sZCBib290LgorCSAqICAtIEFueSBvdGhlciB2YWx1ZSBmb3IgYSB3YXJtIGJvb3QuCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCitmdW5jIHBsYXRfZ2V0X215X2VudHJ5cG9pbnQKKwkvKiBUT0RPOiBzdXBwb3J0IHdhcm0gYm9vdCAqLworCW1vdgl4MCwgIzAKKwlyZXQKK2VuZGZ1bmMgcGxhdF9nZXRfbXlfZW50cnlwb2ludAorCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogdm9pZCBwbGF0Zm9ybV9tZW1faW5pdCAodm9pZCk7CisJICoKKwkgKiBObyBuZWVkIHRvIGNhcnJ5IG91dCBhbnkgbWVtb3J5IGluaXRpYWxpemF0aW9uLgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworZnVuYyBwbGF0Zm9ybV9tZW1faW5pdAorCXJldAorZW5kZnVuYyBwbGF0Zm9ybV9tZW1faW5pdAorCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogaW50IHBsYXRfY3Jhc2hfY29uc29sZV9pbml0KHZvaWQpCisJICogRnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgY3Jhc2ggY29uc29sZQorCSAqIHdpdGhvdXQgYSBDIFJ1bnRpbWUgdG8gcHJpbnQgY3Jhc2ggcmVwb3J0LgorCSAqIENsb2JiZXIgbGlzdCA6IHgwIC0geDMKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KK2Z1bmMgcGxhdF9jcmFzaF9jb25zb2xlX2luaXQKKwltb3ZfaW1tCXgwLCBQTEFUX1JQSTNfVUFSVF9CQVNFCisJbW92X2ltbQl4MSwgUExBVF9SUEkzX1VBUlRfQ0xLX0lOX0haCisJbW92X2ltbQl4MiwgUExBVF9SUEkzX1VBUlRfQkFVRFJBVEUKKwliCWNvbnNvbGVfY29yZV9pbml0CitlbmRmdW5jIHBsYXRfY3Jhc2hfY29uc29sZV9pbml0CisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBpbnQgcGxhdF9jcmFzaF9jb25zb2xlX3B1dGMoaW50IGMpCisJICogRnVuY3Rpb24gdG8gcHJpbnQgYSBjaGFyYWN0ZXIgb24gdGhlIGNyYXNoCisJICogY29uc29sZSB3aXRob3V0IGEgQyBSdW50aW1lLgorCSAqIENsb2JiZXIgbGlzdCA6IHgxLCB4MgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworZnVuYyBwbGF0X2NyYXNoX2NvbnNvbGVfcHV0YworCW1vdl9pbW0JeDEsIFBMQVRfUlBJM19VQVJUX0JBU0UKKwliCWNvbnNvbGVfY29yZV9wdXRjCitlbmRmdW5jIHBsYXRfY3Jhc2hfY29uc29sZV9wdXRjCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBpbnQgcGxhdF9jcmFzaF9jb25zb2xlX2ZsdXNoKCkKKwkgKiBGdW5jdGlvbiB0byBmb3JjZSBhIHdyaXRlIG9mIGFsbCBidWZmZXJlZAorCSAqIGRhdGEgdGhhdCBoYXNuJ3QgYmVlbiBvdXRwdXQuCisJICogT3V0IDogcmV0dXJuIC0xIG9uIGVycm9yIGVsc2UgcmV0dXJuIDAuCisJICogQ2xvYmJlciBsaXN0IDogeDAsIHgxCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCitmdW5jIHBsYXRfY3Jhc2hfY29uc29sZV9mbHVzaAorCW1vdl9pbW0JeDEsIFBMQVRfUlBJM19VQVJUX0JBU0UKKwliCWNvbnNvbGVfY29yZV9mbHVzaAorZW5kZnVuYyBwbGF0X2NyYXNoX2NvbnNvbGVfZmx1c2gKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIHZvaWQgcGxhdF9yZXNldF9oYW5kbGVyKHZvaWQpOworCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworZnVuYyBwbGF0X3Jlc2V0X2hhbmRsZXIKKwkvKiB1c2UgdGhlIDE5LjIgTUh6IGNsb2NrIGZvciB0aGUgYXJjaGl0ZWN0ZWQgdGltZXIgKi8KKwltb3YJeDAsICNSUEkzX0lOVENfQkFTRV9BRERSRVNTCisJbW92CXcxLCAjMHg4MDAwMDAwMAorCXN0cgl3enIsIFt4MCwgI1JQSTNfSU5UQ19DT05UUk9MX09GRlNFVF0KKwlzdHIJdzEsIFt4MCwgI1JQSTNfSU5UQ19QUkVTQ0FMRVJfT0ZGU0VUXQorCisJLyogd2lyZSBtYWlsYm94IDMgdG8gdGhlIEZJUSBsaW5lICovCisJbW92CXcxLCBSUEkzX0lOVENfTUJPWF9DT05UUk9MX1NMT1QzX0ZJUQorCXN0cgl3MSwgW3gwLCAjUlBJM19JTlRDX01CT1hfQ09OVFJPTF9PRkZTRVRdCisJcmV0CitlbmRmdW5jIHBsYXRfcmVzZXRfaGFuZGxlcgpkaWZmIC0tZ2l0IGEvcGxhdC9ycGkzL2FhcmNoNjQvcnBpM19ibDJfbWVtX3BhcmFtc19kZXNjLmMgYi9wbGF0L3JwaTMvYWFyY2g2NC9ycGkzX2JsMl9tZW1fcGFyYW1zX2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2FjZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdC9ycGkzL2FhcmNoNjQvcnBpM19ibDJfbWVtX3BhcmFtc19kZXNjLmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPGJsX2NvbW1vbi5oPgorI2luY2x1ZGUgPGRlc2NfaW1hZ2VfbG9hZC5oPgorI2luY2x1ZGUgPHBsYXRmb3JtLmg+CisjaW5jbHVkZSA8cGxhdGZvcm1fZGVmLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGb2xsb3dpbmcgZGVzY3JpcHRvciBwcm92aWRlcyBCTCBpbWFnZS9lcCBpbmZvcm1hdGlvbiB0aGF0IGdldHMgdXNlZAorICogYnkgQkwyIHRvIGxvYWQgdGhlIGltYWdlcyBhbmQgYWxzbyBzdWJzZXQgb2YgdGhpcyBpbmZvcm1hdGlvbiBpcworICogcGFzc2VkIHRvIG5leHQgQkwgaW1hZ2UuIFRoZSBpbWFnZSBsb2FkaW5nIHNlcXVlbmNlIGlzIG1hbmFnZWQgYnkKKyAqIHBvcHVsYXRpbmcgdGhlIGltYWdlcyBpbiByZXF1aXJlZCBsb2FkaW5nIG9yZGVyLiBUaGUgaW1hZ2UgZXhlY3V0aW9uCisgKiBzZXF1ZW5jZSBpcyBtYW5hZ2VkIGJ5IHBvcHVsYXRpbmcgdGhlIGBuZXh0X2hhbmRvZmZfaW1hZ2VfaWRgIHdpdGgKKyAqIHRoZSBuZXh0IGV4ZWN1dGFibGUgaW1hZ2UgaWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGJsX21lbV9wYXJhbXNfbm9kZV90IGJsMl9tZW1fcGFyYW1zX2Rlc2NzW10gPSB7CisKKwkvKiBGaWxsIEJMMzEgcmVsYXRlZCBpbmZvcm1hdGlvbiAqLworCXsKKwkJLmltYWdlX2lkID0gQkwzMV9JTUFHRV9JRCwKKworCQlTRVRfU1RBVElDX1BBUkFNX0hFQUQoZXBfaW5mbywgUEFSQU1fRVAsCisJCQkJICAgICAgVkVSU0lPTl8yLCBlbnRyeV9wb2ludF9pbmZvX3QsCisJCQkJICAgICAgU0VDVVJFIHwgRVhFQ1VUQUJMRSB8IEVQX0ZJUlNUX0VYRSksCisJCS5lcF9pbmZvLnBjID0gQkwzMV9CQVNFLAorCQkuZXBfaW5mby5zcHNyID0gU1BTUl82NChNT0RFX0VMMywgTU9ERV9TUF9FTFgsCisJCQkJCURJU0FCTEVfQUxMX0VYQ0VQVElPTlMpLAorI2lmIERFQlVHCisJCS5lcF9pbmZvLmFyZ3MuYXJnMSA9IFJQSTNfQkwzMV9QTEFUX1BBUkFNX1ZBTCwKKyNlbmRpZgorCQlTRVRfU1RBVElDX1BBUkFNX0hFQUQoaW1hZ2VfaW5mbywgUEFSQU1fRVAsCisJCQkJICAgICAgVkVSU0lPTl8yLCBpbWFnZV9pbmZvX3QsCisJCQkJICAgICAgSU1BR0VfQVRUUklCX1BMQVRfU0VUVVApLAorCQkuaW1hZ2VfaW5mby5pbWFnZV9iYXNlID0gQkwzMV9CQVNFLAorCQkuaW1hZ2VfaW5mby5pbWFnZV9tYXhfc2l6ZSA9IEJMMzFfTElNSVQgLSBCTDMxX0JBU0UsCisKKyMgaWZkZWYgQkwzMl9CQVNFCisJCS5uZXh0X2hhbmRvZmZfaW1hZ2VfaWQgPSBCTDMyX0lNQUdFX0lELAorIyBlbHNlCisJCS5uZXh0X2hhbmRvZmZfaW1hZ2VfaWQgPSBCTDMzX0lNQUdFX0lELAorIyBlbmRpZgorCX0sCisKKyMgaWZkZWYgQkwzMl9CQVNFCisJLyogRmlsbCBCTDMyIHJlbGF0ZWQgaW5mb3JtYXRpb24gKi8KKwl7CisJCS5pbWFnZV9pZCA9IEJMMzJfSU1BR0VfSUQsCisKKwkJU0VUX1NUQVRJQ19QQVJBTV9IRUFEKGVwX2luZm8sIFBBUkFNX0VQLAorCQkJCSAgICAgIFZFUlNJT05fMiwgZW50cnlfcG9pbnRfaW5mb190LAorCQkJCSAgICAgIFNFQ1VSRSB8IEVYRUNVVEFCTEUpLAorCQkuZXBfaW5mby5wYyA9IEJMMzJfQkFTRSwKKworCQlTRVRfU1RBVElDX1BBUkFNX0hFQUQoaW1hZ2VfaW5mbywgUEFSQU1fRVAsCisJCQkJICAgICAgVkVSU0lPTl8yLCBpbWFnZV9pbmZvX3QsIDApLAorCQkuaW1hZ2VfaW5mby5pbWFnZV9iYXNlID0gQkwzMl9CQVNFLAorCQkuaW1hZ2VfaW5mby5pbWFnZV9tYXhfc2l6ZSA9IEJMMzJfTElNSVQgLSBCTDMyX0JBU0UsCisKKwkJLm5leHRfaGFuZG9mZl9pbWFnZV9pZCA9IEJMMzNfSU1BR0VfSUQsCisJfSwKKworCS8qCisJICogRmlsbCBCTDMyIGV4dGVybmFsIDEgcmVsYXRlZCBpbmZvcm1hdGlvbi4KKwkgKiBBIHR5cGljYWwgdXNlIGZvciBleHRyYTEgaW1hZ2UgaXMgd2l0aCBPUC1URUUgd2hlcmUgaXQgaXMgdGhlIHBhZ2VyCisJICogaW1hZ2UuCisJICovCisJeworCQkuaW1hZ2VfaWQgPSBCTDMyX0VYVFJBMV9JTUFHRV9JRCwKKworCQlTRVRfU1RBVElDX1BBUkFNX0hFQUQoZXBfaW5mbywgUEFSQU1fRVAsCisJCQkJICAgICAgVkVSU0lPTl8yLCBlbnRyeV9wb2ludF9pbmZvX3QsCisJCQkJICAgICAgU0VDVVJFIHwgTk9OX0VYRUNVVEFCTEUpLAorCisJCVNFVF9TVEFUSUNfUEFSQU1fSEVBRChpbWFnZV9pbmZvLCBQQVJBTV9FUCwKKwkJCQkgICAgICBWRVJTSU9OXzIsIGltYWdlX2luZm9fdCwKKwkJCQkgICAgICBJTUFHRV9BVFRSSUJfU0tJUF9MT0FESU5HKSwKKwkJLmltYWdlX2luZm8uaW1hZ2VfYmFzZSA9IEJMMzJfQkFTRSwKKwkJLmltYWdlX2luZm8uaW1hZ2VfbWF4X3NpemUgPSBCTDMyX0xJTUlUIC0gQkwzMl9CQVNFLAorCisJCS5uZXh0X2hhbmRvZmZfaW1hZ2VfaWQgPSBJTlZBTElEX0lNQUdFX0lELAorCX0sCisKKwkvKgorCSAqIEZpbGwgQkwzMiBleHRlcm5hbCAyIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisJICogQSB0eXBpY2FsIHVzZSBmb3IgZXh0cmEyIGltYWdlIGlzIHdpdGggT1AtVEVFIHdoZXJlIGl0IGlzIHRoZSBwYWdlZAorCSAqIGltYWdlLgorCSAqLworCXsKKwkJLmltYWdlX2lkID0gQkwzMl9FWFRSQTJfSU1BR0VfSUQsCisKKwkJU0VUX1NUQVRJQ19QQVJBTV9IRUFEKGVwX2luZm8sIFBBUkFNX0VQLAorCQkJCSAgICAgIFZFUlNJT05fMiwgZW50cnlfcG9pbnRfaW5mb190LAorCQkJCSAgICAgIFNFQ1VSRSB8IE5PTl9FWEVDVVRBQkxFKSwKKworCQlTRVRfU1RBVElDX1BBUkFNX0hFQUQoaW1hZ2VfaW5mbywgUEFSQU1fRVAsCisJCQkJICAgICAgVkVSU0lPTl8yLCBpbWFnZV9pbmZvX3QsCisJCQkJICAgICAgSU1BR0VfQVRUUklCX1NLSVBfTE9BRElORyksCisJCS5uZXh0X2hhbmRvZmZfaW1hZ2VfaWQgPSBJTlZBTElEX0lNQUdFX0lELAorCX0sCisjIGVuZGlmIC8qIEJMMzJfQkFTRSAqLworCisJLyogRmlsbCBCTDMzIHJlbGF0ZWQgaW5mb3JtYXRpb24gKi8KKwl7CisJCS5pbWFnZV9pZCA9IEJMMzNfSU1BR0VfSUQsCisJCVNFVF9TVEFUSUNfUEFSQU1fSEVBRChlcF9pbmZvLCBQQVJBTV9FUCwKKwkJCQkgICAgICBWRVJTSU9OXzIsIGVudHJ5X3BvaW50X2luZm9fdCwKKwkJCQkgICAgICBOT05fU0VDVVJFIHwgRVhFQ1VUQUJMRSksCisjIGlmZGVmIFBSRUxPQURFRF9CTDMzX0JBU0UKKwkJLmVwX2luZm8ucGMgPSBQUkVMT0FERURfQkwzM19CQVNFLAorCisJCVNFVF9TVEFUSUNfUEFSQU1fSEVBRChpbWFnZV9pbmZvLCBQQVJBTV9FUCwKKwkJCQkgICAgICBWRVJTSU9OXzIsIGltYWdlX2luZm9fdCwKKwkJCQkgICAgICBJTUFHRV9BVFRSSUJfU0tJUF9MT0FESU5HKSwKKyMgZWxzZQorCQkuZXBfaW5mby5wYyA9IFBMQVRfUlBJM19OU19JTUFHRV9PRkZTRVQsCisKKwkJU0VUX1NUQVRJQ19QQVJBTV9IRUFEKGltYWdlX2luZm8sIFBBUkFNX0VQLAorCQkJCSAgICAgIFZFUlNJT05fMiwgaW1hZ2VfaW5mb190LCAwKSwKKwkJLmltYWdlX2luZm8uaW1hZ2VfYmFzZSA9IFBMQVRfUlBJM19OU19JTUFHRV9PRkZTRVQsCisJCS5pbWFnZV9pbmZvLmltYWdlX21heF9zaXplID0gUExBVF9SUEkzX05TX0lNQUdFX01BWF9TSVpFLAorIyBlbmRpZiAvKiBQUkVMT0FERURfQkwzM19CQVNFICovCisKKwkJLm5leHRfaGFuZG9mZl9pbWFnZV9pZCA9IElOVkFMSURfSU1BR0VfSUQsCisJfQorfTsKKworUkVHSVNURVJfQkxfSU1BR0VfREVTQ1MoYmwyX21lbV9wYXJhbXNfZGVzY3MpCmRpZmYgLS1naXQgYS9wbGF0L3JwaTMvaW5jbHVkZS9wbGF0X21hY3Jvcy5TIGIvcGxhdC9ycGkzL2luY2x1ZGUvcGxhdF9tYWNyb3MuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWUwNTdlCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdC9ycGkzL2luY2x1ZGUvcGxhdF9tYWNyb3MuUwpAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisjaWZuZGVmIF9fUExBVF9NQUNST1NfU19fCisjZGVmaW5lIF9fUExBVF9NQUNST1NfU19fCisKKyNpbmNsdWRlIDxhcm1fbWFjcm9zLlM+CisjaW5jbHVkZSA8cGxhdGZvcm1fZGVmLmg+CisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBUaGUgYmVsb3cgcmVxdWlyZWQgcGxhdGZvcm0gcG9ydGluZyBtYWNybworCSAqIHByaW50cyBvdXQgcmVsZXZhbnQgcGxhdGZvcm0gcmVnaXN0ZXJzCisJICogd2hlbmV2ZXIgYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiBpcyB0YWtlbiBpbgorCSAqIEJMMzEuCisJICogQ2xvYmJlcnM6IHgwIC0geDEwLCB4MTYsIHgxNywgc3AKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KKwkubWFjcm8gcGxhdF9jcmFzaF9wcmludF9yZWdzCisJLmVuZG0KKworI2VuZGlmIC8qIF9fUExBVF9NQUNST1NfU19fICovCmRpZmYgLS1naXQgYS9wbGF0L3JwaTMvaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaCBiL3BsYXQvcnBpMy9pbmNsdWRlL3BsYXRmb3JtX2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMmYxZGEKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0L3JwaTMvaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaApAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIF9fUExBVEZPUk1fREVGX0hfXworI2RlZmluZSBfX1BMQVRGT1JNX0RFRl9IX18KKworI2luY2x1ZGUgPGFyY2guaD4KKyNpbmNsdWRlIDxjb21tb25fZGVmLmg+CisjaW5jbHVkZSA8dGJicl9pbWdfZGVmLmg+CisjaW5jbHVkZSA8dXRpbHNfZGVmLmg+CisKKyNpbmNsdWRlICIuLi9ycGkzX2h3LmgiCisKKy8qIFNwZWNpYWwgdmFsdWUgdXNlZCB0byB2ZXJpZnkgcGxhdGZvcm0gcGFyYW1ldGVycyBmcm9tIEJMMiB0byBCTDMxICovCisjZGVmaW5lIFJQSTNfQkwzMV9QTEFUX1BBUkFNX1ZBTAlVTEwoMHgwRjFFMkQzQzRCNUE2OTc4KQorCisjZGVmaW5lIFBMQVRGT1JNX1NUQUNLX1NJWkUJCVVMTCgweDEwMDApCisKKyNkZWZpbmUgUExBVEZPUk1fTUFYX0NQVVNfUEVSX0NMVVNURVIJVSg0KQorI2RlZmluZSBQTEFURk9STV9DTFVTVEVSX0NPVU5UCQlVKDEpCisjZGVmaW5lIFBMQVRGT1JNX0NMVVNURVIwX0NPUkVfQ09VTlQJUExBVEZPUk1fTUFYX0NQVVNfUEVSX0NMVVNURVIKKyNkZWZpbmUgUExBVEZPUk1fQ09SRV9DT1VOVAkJUExBVEZPUk1fQ0xVU1RFUjBfQ09SRV9DT1VOVAorCisjZGVmaW5lIFJQSTNfUFJJTUFSWV9DUFUJCVUoMCkKKworI2RlZmluZSBQTEFUX01BWF9QV1JfTFZMCQlNUElEUl9BRkZMVkwxCisjZGVmaW5lIFBMQVRfTlVNX1BXUl9ET01BSU5TCQkoUExBVEZPUk1fQ0xVU1RFUl9DT1VOVCArIFwKKwkJCQkJIFBMQVRGT1JNX0NPUkVfQ09VTlQpCisKKyNkZWZpbmUgUExBVF9NQVhfUkVUX1NUQVRFCQlVKDEpCisjZGVmaW5lIFBMQVRfTUFYX09GRl9TVEFURQkJVSgyKQorCisvKiBMb2NhbCBwb3dlciBzdGF0ZSBmb3IgcG93ZXIgZG9tYWlucyBpbiBSdW4gc3RhdGUuICovCisjZGVmaW5lIFBMQVRfTE9DQUxfU1RBVEVfUlVOCQlVKDApCisvKiBMb2NhbCBwb3dlciBzdGF0ZSBmb3IgcmV0ZW50aW9uLiBWYWxpZCBvbmx5IGZvciBDUFUgcG93ZXIgZG9tYWlucyAqLworI2RlZmluZSBQTEFUX0xPQ0FMX1NUQVRFX1JFVAkJVSgxKQorLyoKKyAqIExvY2FsIHBvd2VyIHN0YXRlIGZvciBPRkYvcG93ZXItZG93bi4gVmFsaWQgZm9yIENQVSBhbmQgY2x1c3RlciBwb3dlcgorICogZG9tYWlucy4KKyAqLworI2RlZmluZSBQTEFUX0xPQ0FMX1NUQVRFX09GRgkJVSgyKQorCisvKgorICogTWFjcm9zIHVzZWQgdG8gcGFyc2Ugc3RhdGUgaW5mb3JtYXRpb24gZnJvbSBTdGF0ZS1JRCBpZiBpdCBpcyB1c2luZyB0aGUKKyAqIHJlY29tbWVuZGVkIGVuY29kaW5nIGZvciBTdGF0ZS1JRC4KKyAqLworI2RlZmluZSBQTEFUX0xPQ0FMX1BTVEFURV9XSURUSAkJVSg0KQorI2RlZmluZSBQTEFUX0xPQ0FMX1BTVEFURV9NQVNLCQkoKFUoMSkgPDwgUExBVF9MT0NBTF9QU1RBVEVfV0lEVEgpIC0gMSkKKworLyoKKyAqIFNvbWUgZGF0YSBtdXN0IGJlIGFsaWduZWQgb24gdGhlIGJpZ2dlc3QgY2FjaGUgbGluZSBzaXplIGluIHRoZSBwbGF0Zm9ybS4KKyAqIFRoaXMgaXMga25vd24gb25seSB0byB0aGUgcGxhdGZvcm0gYXMgaXQgbWlnaHQgaGF2ZSBhIGNvbWJpbmF0aW9uIG9mCisgKiBpbnRlZ3JhdGVkIGFuZCBleHRlcm5hbCBjYWNoZXMuCisgKi8KKyNkZWZpbmUgQ0FDSEVfV1JJVEVCQUNLX1NISUZUCQlVKDYpCisjZGVmaW5lIENBQ0hFX1dSSVRFQkFDS19HUkFOVUxFCQkoVSgxKSA8PCBDQUNIRV9XUklURUJBQ0tfU0hJRlQpCisKKy8qCisgKiBQYXJ0aXRpb24gbWVtb3J5IGludG8gc2VjdXJlIFJPTSwgbm9uLXNlY3VyZSBEUkFNLCBzZWN1cmUgIlNSQU0iLCBhbmQKKyAqIHNlY3VyZSBEUkFNLiBOb3RlIHRoYXQgdGhpcyBpcyBhbGwgYWN0dWFsbHkgRFJBTSB3aXRoIGRpZmZlcmVudCBuYW1lcywKKyAqIHRoZXJlIGlzIG5vIFNlY3VyZSBSQU0gaW4gdGhlIFJhc3BiZXJyeSBQaSAzLgorICovCisjZGVmaW5lIFNFQ19ST01fQkFTRQkJCVVMTCgweDAwMDAwMDAwKQorI2RlZmluZSBTRUNfUk9NX1NJWkUJCQlVTEwoMHgwMDAxMDAwMCkKKworLyogRklQIHBsYWNlZCBhZnRlciBST00gdG8gYXBwZW5kIGl0IHRvIEJMMSB3aXRoIHZlcnkgbGl0dGxlIHBhZGRpbmcuICovCisjZGVmaW5lIFBMQVRfUlBJM19GSVBfQkFTRQkJVUxMKDB4MDAwMTAwMDApCisjZGVmaW5lIFBMQVRfUlBJM19GSVBfTUFYX1NJWkUJCVVMTCgweDAwMUYwMDAwKQorCisvKiBXZSBoYXZlIDE2TSBvZiBtZW1vcnkgcmVzZXJ2ZWQgYXQgYXQgMjU2TSAqLworI2RlZmluZSBTRUNfU1JBTV9CQVNFCQkJVUxMKDB4MTAwMDAwMDApCisjZGVmaW5lIFNFQ19TUkFNX1NJWkUJCQlVTEwoMHgwMDEwMDAwMCkKKworI2RlZmluZSBTRUNfRFJBTTBfQkFTRQkJCVVMTCgweDEwMTAwMDAwKQorI2RlZmluZSBTRUNfRFJBTTBfU0laRQkJCVVMTCgweDAwMjAwMDAwKQorCisjZGVmaW5lIE5TX0RSQU0wX0JBU0UJCQlVTEwoMHgxMDMwMDAwMCkKKyNkZWZpbmUgTlNfRFJBTTBfU0laRQkJCVVMTCgweDAwRDAwMDAwKQorLyogRW5kIG9mIHJlc2VydmVkIG1lbW9yeSAqLworCisvKgorICogQkwzMyBlbnRyeXBvaW50LgorICovCisjZGVmaW5lIFBMQVRfUlBJM19OU19JTUFHRV9PRkZTRVQJTlNfRFJBTTBfQkFTRQorI2RlZmluZSBQTEFUX1JQSTNfTlNfSU1BR0VfTUFYX1NJWkUJTlNfRFJBTTBfU0laRQorCisvKgorICogSS9PIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBERVZJQ0UwX0JBU0UJCQlSUEkzX0lPX0JBU0UKKyNkZWZpbmUgREVWSUNFMF9TSVpFCQkJUlBJM19JT19TSVpFCisKKy8qCisgKiBBcm0gVEYgbGl2ZXMgaW4gU1JBTSwgcGFydGl0aW9uIGl0IGhlcmUKKyAqLworI2RlZmluZSBTSEFSRURfUkFNX0JBU0UJCQlTRUNfU1JBTV9CQVNFCisjZGVmaW5lIFNIQVJFRF9SQU1fU0laRQkJCVVMTCgweDAwMDAxMDAwKQorCisjZGVmaW5lIEJMX1JBTV9CQVNFCQkJKFNIQVJFRF9SQU1fQkFTRSArIFNIQVJFRF9SQU1fU0laRSkKKyNkZWZpbmUgQkxfUkFNX1NJWkUJCQkoU0VDX1NSQU1fU0laRSAtIFNIQVJFRF9SQU1fU0laRSkKKworLyoKKyAqIE1haWxib3ggdG8gY29udHJvbCB0aGUgc2Vjb25kYXJ5IGNvcmVzLkFsbCBzZWNvbmRhcnkgY29yZXMgYXJlIGhlbGQgaW4gYSB3YWl0CisgKiBsb29wIGluIGNvbGQgYm9vdC4gVG8gcmVsZWFzZSB0aGVtIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwcyAocGx1cyBhbnkKKyAqIGFkZGl0aW9uYWwgYmFycmllcnMgdGhhdCBtYXkgYmUgbmVlZGVkKToKKyAqCisgKiAgICAgdWludDY0X3QgKmVudHJ5cG9pbnQgPSAodWludDY0X3QgKilQTEFUX1JQSTNfVE1fRU5UUllQT0lOVDsKKyAqICAgICAqZW50cnlwb2ludCA9IEFERFJFU1NfVE9fSlVNUF9UTzsKKyAqCisgKiAgICAgdWludDY0X3QgKm1ib3hfZW50cnkgPSAodWludDY0X3QgKilQTEFUX1JQSTNfVE1fSE9MRF9CQVNFOworICogICAgIG1ib3hfZW50cnlbY3B1X2lkXSA9IFBMQVRfUlBJM19UTV9IT0xEX1NUQVRFX0dPOworICoKKyAqICAgICBzZXYoKTsKKyAqLworI2RlZmluZSBQTEFUX1JQSTNfVFJVU1RFRF9NQUlMQk9YX0JBU0UJU0hBUkVEX1JBTV9CQVNFCisKKyNkZWZpbmUgUExBVF9SUEkzX1RNX0VOVFJZUE9JTlQJCVBMQVRfUlBJM19UUlVTVEVEX01BSUxCT1hfQkFTRQorI2RlZmluZSBQTEFUX1JQSTNfVE1fRU5UUllQT0lOVF9TSVpFCVVMTCg4KQorCisjZGVmaW5lIFBMQVRfUlBJM19UTV9IT0xEX0JBU0UJCShQTEFUX1JQSTNfVE1fRU5UUllQT0lOVCArIFwKKwkJCQkJIFBMQVRfUlBJM19UTV9FTlRSWVBPSU5UX1NJWkUpCisjZGVmaW5lIFBMQVRfUlBJM19UTV9IT0xEX0VOVFJZX1NJWkUJVUxMKDgpCisjZGVmaW5lIFBMQVRfUlBJM19UTV9IT0xEX1NJWkUJCShQTEFUX1JQSTNfVE1fSE9MRF9FTlRSWV9TSVpFICogXAorCQkJCQkgUExBVEZPUk1fQ09SRV9DT1VOVCkKKworI2RlZmluZSBQTEFUX1JQSTNfVFJVU1RFRF9NQUlMQk9YX1NJWkUJKFBMQVRfUlBJM19UTV9FTlRSWVBPSU5UX1NJWkUgKyBcCisJCQkJCSBQTEFUX1JQSTNfVE1fSE9MRF9TSVpFKQorCisjZGVmaW5lIFBMQVRfUlBJM19UTV9IT0xEX1NUQVRFX1dBSVQJVUxMKDApCisjZGVmaW5lIFBMQVRfUlBJM19UTV9IT0xEX1NUQVRFX0dPCVVMTCgxKQorCisvKgorICogQkwxIHNwZWNpZmljIGRlZmluZXMuCisgKgorICogQkwxIFJXIGRhdGEgaXMgcmVsb2NhdGVkIGZyb20gUk9NIHRvIFJBTSBhdCBydW50aW1lIHNvIHdlIG5lZWQgMiBzZXRzIG9mCisgKiBhZGRyZXNzZXMuCisgKgorICogUHV0IEJMMSBSVyBhdCB0aGUgdG9wIG9mIHRoZSBTZWN1cmUgU1JBTS4gQkwxX1JXX0JBU0UgaXMgY2FsY3VsYXRlZCB1c2luZworICogdGhlIGN1cnJlbnQgQkwxIFJXIGRlYnVnIHNpemUgcGx1cyBhIGxpdHRsZSBzcGFjZSBmb3IgZ3Jvd3RoLgorICovCisjZGVmaW5lIFBMQVRfTUFYX0JMMV9SV19TSVpFCQlVTEwoMHgxMjAwMCkKKworI2RlZmluZSBCTDFfUk9fQkFTRQkJCVNFQ19ST01fQkFTRQorI2RlZmluZSBCTDFfUk9fTElNSVQJCQkoU0VDX1JPTV9CQVNFICsgU0VDX1JPTV9TSVpFKQorI2RlZmluZSBCTDFfUldfQkFTRQkJCShCTDFfUldfTElNSVQgLSBQTEFUX01BWF9CTDFfUldfU0laRSkKKyNkZWZpbmUgQkwxX1JXX0xJTUlUCQkJKEJMX1JBTV9CQVNFICsgQkxfUkFNX1NJWkUpCisKKy8qCisgKiBCTDIgc3BlY2lmaWMgZGVmaW5lcy4KKyAqCisgKiBQdXQgQkwyIGp1c3QgYmVsb3cgQkwzMS4gQkwyX0JBU0UgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgY3VycmVudCBCTDIgZGVidWcKKyAqIHNpemUgcGx1cyBhIGxpdHRsZSBzcGFjZSBmb3IgZ3Jvd3RoLgorICovCisjZGVmaW5lIFBMQVRfTUFYX0JMMl9TSVpFCQlVTEwoMHgyQzAwMCkKKworI2RlZmluZSBCTDJfQkFTRQkJCShCTDJfTElNSVQgLSBQTEFUX01BWF9CTDJfU0laRSkKKyNkZWZpbmUgQkwyX0xJTUlUCQkJQkwzMV9CQVNFCisKKy8qCisgKiBCTDMxIHNwZWNpZmljIGRlZmluZXMuCisgKgorICogUHV0IEJMMzEgYXQgdGhlIHRvcCBvZiB0aGUgVHJ1c3RlZCBTUkFNLiBCTDMxX0JBU0UgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUKKyAqIGN1cnJlbnQgQkwzMSBkZWJ1ZyBzaXplIHBsdXMgYSBsaXR0bGUgc3BhY2UgZm9yIGdyb3d0aC4KKyAqLworI2RlZmluZSBQTEFUX01BWF9CTDMxX1NJWkUJCVVMTCgweDIwMDAwKQorCisjZGVmaW5lIEJMMzFfQkFTRQkJCShCTDMxX0xJTUlUIC0gUExBVF9NQVhfQkwzMV9TSVpFKQorI2RlZmluZSBCTDMxX0xJTUlUCQkJKEJMX1JBTV9CQVNFICsgQkxfUkFNX1NJWkUpCisjZGVmaW5lIEJMMzFfUFJPR0JJVFNfTElNSVQJCUJMMV9SV19CQVNFCisKKy8qCisgKiBCTDMyIHNwZWNpZmljIGRlZmluZXMuCisgKgorICogQkwzMiBjYW4gZXhlY3V0ZSBmcm9tIFNlY3VyZSBTUkFNIG9yIFNlY3VyZSBEUkFNLgorICovCisjZGVmaW5lIEJMMzJfU1JBTV9CQVNFCQkJQkxfUkFNX0JBU0UKKyNkZWZpbmUgQkwzMl9TUkFNX0xJTUlUCQkJQkwzMV9CQVNFCisjZGVmaW5lIEJMMzJfRFJBTV9CQVNFCQkJU0VDX0RSQU0wX0JBU0UKKyNkZWZpbmUgQkwzMl9EUkFNX0xJTUlUCQkJKFNFQ19EUkFNMF9CQVNFICsgU0VDX0RSQU0wX1NJWkUpCisKKyNkZWZpbmUgU0VDX1NSQU1fSUQJCQkwCisjZGVmaW5lIFNFQ19EUkFNX0lECQkJMQorCisjaWYgUlBJM19CTDMyX1JBTV9MT0NBVElPTl9JRCA9PSBTRUNfU1JBTV9JRAorIyBkZWZpbmUgQkwzMl9NRU1fQkFTRQkJCUJMX1JBTV9CQVNFCisjIGRlZmluZSBCTDMyX01FTV9TSVpFCQkJQkxfUkFNX1NJWkUKKyMgZGVmaW5lIEJMMzJfQkFTRQkJCUJMMzJfU1JBTV9CQVNFCisjIGRlZmluZSBCTDMyX0xJTUlUCQkJQkwzMl9TUkFNX0xJTUlUCisjZWxpZiBSUEkzX0JMMzJfUkFNX0xPQ0FUSU9OX0lEID09IFNFQ19EUkFNX0lECisjIGRlZmluZSBCTDMyX01FTV9CQVNFCQkJU0VDX0RSQU0wX0JBU0UKKyMgZGVmaW5lIEJMMzJfTUVNX1NJWkUJCQlTRUNfRFJBTTBfU0laRQorIyBkZWZpbmUgQkwzMl9CQVNFCQkJQkwzMl9EUkFNX0JBU0UKKyMgZGVmaW5lIEJMMzJfTElNSVQJCQlCTDMyX0RSQU1fTElNSVQKKyNlbHNlCisjIGVycm9yICJVbnN1cHBvcnRlZCBSUEkzX0JMMzJfUkFNX0xPQ0FUSU9OX0lEIHZhbHVlIgorI2VuZGlmCisjZGVmaW5lIEJMMzJfU0laRQkJCShCTDMyX0xJTUlUIC0gQkwzMl9CQVNFKQorCisjaWZkZWYgU1BEX25vbmUKKyN1bmRlZiBCTDMyX0JBU0UKKyNlbmRpZiAvKiBTUERfbm9uZSAqLworCisvKgorICogT3RoZXIgbWVtb3J5LXJlbGF0ZWQgZGVmaW5lcy4KKyAqLworI2RlZmluZSBBRERSX1NQQUNFX1NJWkUJCQkoVUxMKDEpIDw8IDMyKQorCisjZGVmaW5lIE1BWF9NTUFQX1JFR0lPTlMJCVUoOCkKKyNkZWZpbmUgTUFYX1hMQVRfVEFCTEVTCQkJVSg0KQorCisjZGVmaW5lIE1BWF9JT19ERVZJQ0VTCQkJVSgzKQorI2RlZmluZSBNQVhfSU9fSEFORExFUwkJCVUoNCkKKworLyoKKyAqIFNlcmlhbC1yZWxhdGVkIGNvbnN0YW50cy4KKyAqLworI2RlZmluZSBQTEFUX1JQSTNfVUFSVF9CQVNFCQlSUEkzX01JTklfVUFSVF9CQVNFCisjZGVmaW5lIFBMQVRfUlBJM19VQVJUX0NMS19JTl9IWglSUEkzX01JTklfVUFSVF9DTEtfSU5fSFoKKyNkZWZpbmUgUExBVF9SUEkzX1VBUlRfQkFVRFJBVEUJCVVMTCgxMTUyMDApCisKKy8qCisgKiBTeXN0ZW0gY291bnRlcgorICovCisjZGVmaW5lIFNZU19DT1VOVEVSX0ZSRVFfSU5fVElDS1MJVUxMKDE5MjAwMDAwKQorCisjZW5kaWYgLyogX19QTEFURk9STV9ERUZfSF9fICovCmRpZmYgLS1naXQgYS9wbGF0L3JwaTMvcGxhdGZvcm0ubWsgYi9wbGF0L3JwaTMvcGxhdGZvcm0ubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIxZjgwMQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXQvcnBpMy9wbGF0Zm9ybS5tawpAQCAtMCwwICsxLDExMyBAQAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorIworCitQTEFUX0lOQ0xVREVTCQk6PQktSWluY2x1ZGUvY29tbW9uL3RiYnIJCQlcCisJCQkJLUlpbmNsdWRlL3BsYXQvYXJtL2NvbW1vbi8JCVwKKwkJCQktSWluY2x1ZGUvcGxhdC9hcm0vY29tbW9uL2FhcmNoNjQvCVwKKwkJCQktSXBsYXQvcnBpMy9pbmNsdWRlCisKK1BMQVRfQkxfQ09NTU9OX1NPVVJDRVMJOj0JZHJpdmVycy9jb25zb2xlL2FhcmNoNjQvY29uc29sZS5TCVwKKwkJCQlkcml2ZXJzL3RpL3VhcnQvYWFyY2g2NC8xNjU1MF9jb25zb2xlLlMJXAorCQkJCXBsYXQvcnBpMy9ycGkzX2NvbW1vbi5jCisKK0JMMV9TT1VSQ0VTCQkrPQlkcml2ZXJzL2lvL2lvX2ZpcC5jCQkJXAorCQkJCWRyaXZlcnMvaW8vaW9fbWVtbWFwLmMJCQlcCisJCQkJZHJpdmVycy9pby9pb19zdG9yYWdlLmMJCQlcCisJCQkJbGliL2NwdXMvYWFyY2g2NC9jb3J0ZXhfYTUzLlMJCVwKKwkJCQlwbGF0L2NvbW1vbi9hYXJjaDY0L3BsYXRmb3JtX21wX3N0YWNrLlMJXAorCQkJCXBsYXQvcnBpMy9hYXJjaDY0L3BsYXRfaGVscGVycy5TCVwKKwkJCQlwbGF0L3JwaTMvcnBpM19ibDFfc2V0dXAuYwkJXAorCQkJCXBsYXQvcnBpMy9ycGkzX2lvX3N0b3JhZ2UuYworCitCTDJfU09VUkNFUwkJKz0JY29tbW9uL2Rlc2NfaW1hZ2VfbG9hZC5jCQlcCisJCQkJZHJpdmVycy9pby9pb19maXAuYwkJCVwKKwkJCQlkcml2ZXJzL2lvL2lvX21lbW1hcC5jCQkJXAorCQkJCWRyaXZlcnMvaW8vaW9fc3RvcmFnZS5jCQkJXAorCQkJCXBsYXQvY29tbW9uL2FhcmNoNjQvcGxhdGZvcm1fbXBfc3RhY2suUwlcCisJCQkJcGxhdC9ycGkzL2FhcmNoNjQvcGxhdF9oZWxwZXJzLlMJXAorCQkJCXBsYXQvcnBpMy9hYXJjaDY0L3JwaTNfYmwyX21lbV9wYXJhbXNfZGVzYy5jIFwKKwkJCQlwbGF0L3JwaTMvcnBpM19ibDJfc2V0dXAuYwkJXAorCQkJCXBsYXQvcnBpMy9ycGkzX2ltYWdlX2xvYWQuYwkJXAorCQkJCXBsYXQvcnBpMy9ycGkzX2lvX3N0b3JhZ2UuYworCitCTDMxX1NPVVJDRVMJCSs9CWxpYi9jcHVzL2FhcmNoNjQvY29ydGV4X2E1My5TCQlcCisJCQkJcGxhdC9jb21tb24vYWFyY2g2NC9wbGF0X3BzY2lfY29tbW9uLmMJXAorCQkJCXBsYXQvcnBpMy9hYXJjaDY0L3BsYXRfaGVscGVycy5TCVwKKwkJCQlwbGF0L3JwaTMvcnBpM19ibDMxX3NldHVwLmMJCVwKKwkJCQlwbGF0L3JwaTMvcnBpM19wbS5jCQkJXAorCQkJCXBsYXQvcnBpMy9ycGkzX3RvcG9sb2d5LmMKKworIyBUcmFuc2xhdGlvbiB0YWJsZXMgbGlicmFyeQoraW5jbHVkZSBsaWIveGxhdF90YWJsZXNfdjIveGxhdF90YWJsZXMubWsKKworUExBVF9CTF9DT01NT05fU09VUkNFUwkrPQkke1hMQVRfVEFCTEVTX0xJQl9TUkNTfQorCisjIFR1bmUgY29tcGlsZXIgZm9yIENvcnRleC1BNTMKK2lmZXEgKCQobm90ZGlyICQoQ0MpKSxhcm1jbGFuZykKKyAgICBURl9DRkxBR1NfYWFyY2g2NAkrPQktbWNwdT1jb3J0ZXgtYTUzCitlbHNlIGlmbmVxICgkKGZpbmRzdHJpbmcgY2xhbmcsJChub3RkaXIgJChDQykpKSwpCisgICAgVEZfQ0ZMQUdTX2FhcmNoNjQJKz0JLW1jcHU9Y29ydGV4LWE1MworZWxzZQorICAgIFRGX0NGTEFHU19hYXJjaDY0CSs9CS1tdHVuZT1jb3J0ZXgtYTUzCitlbmRpZgorCisjIEJ1aWxkIGNvbmZpZyBmbGFncworIyAtLS0tLS0tLS0tLS0tLS0tLS0KKworIyBFbmFibGUgYWxsIGVycmF0YSB3b3JrYXJvdW5kcyBmb3IgQ29ydGV4LUE1MworRVJSQVRBX0E1M184MjYzMTkJCTo9IDEKK0VSUkFUQV9BNTNfODM1NzY5CQk6PSAxCitFUlJBVEFfQTUzXzgzNjg3MAkJOj0gMQorRVJSQVRBX0E1M184NDM0MTkJCTo9IDEKK0VSUkFUQV9BNTNfODU1ODczCQk6PSAxCisKKyMgRGlzYWJsZSB0aGUgUFNDSSBwbGF0Zm9ybSBjb21wYXRpYmlsaXR5IGxheWVyIGJ5IGRlZmF1bHQKK0VOQUJMRV9QTEFUX0NPTVBBVAkJOj0gMAorCisjIEVuYWJsZSByZXNldCB0byBCTDMxIGJ5IGRlZmF1bHQKK1JFU0VUX1RPX0JMMzEJCQk6PSAxCisKKyMgSGF2ZSBkaWZmZXJlbnQgc2VjdGlvbnMgZm9yIGNvZGUgYW5kIHJvZGF0YQorU0VQQVJBVEVfQ09ERV9BTkRfUk9EQVRBCTo9IDEKKworIyBVc2UgQ29oZXJlbnQgbWVtb3J5CitVU0VfQ09IRVJFTlRfTUVNCQk6PSAxCisKKyMgRW5hYmxlIG5ldyB2ZXJzaW9uIG9mIGltYWdlIGxvYWRpbmcKK0xPQURfSU1BR0VfVjIJCQk6PSAxCisKKyMgUGxhdGZvcm0gYnVpbGQgZmxhZ3MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBCTDMzIGltYWdlcyBhcmUgaW4gQUFyY2g2NCBieSBkZWZhdWx0CitSUEkzX0JMMzNfSU5fQUFSQ0gzMgkJOj0gMAorCisjIEJMMzIgbG9jYXRpb24KK1JQSTNfQkwzMl9SQU1fTE9DQVRJT04JOj0gdGRyYW0KK2lmZXEgKCR7UlBJM19CTDMyX1JBTV9MT0NBVElPTn0sIHRzcmFtKQorICBSUEkzX0JMMzJfUkFNX0xPQ0FUSU9OX0lEID0gU0VDX1NSQU1fSUQKK2Vsc2UgaWZlcSAoJHtSUEkzX0JMMzJfUkFNX0xPQ0FUSU9OfSwgdGRyYW0pCisgIFJQSTNfQkwzMl9SQU1fTE9DQVRJT05fSUQgPSBTRUNfRFJBTV9JRAorZWxzZQorICAkKGVycm9yICJVbnN1cHBvcnRlZCBSUEkzX0JMMzJfUkFNX0xPQ0FUSU9OIHZhbHVlIikKK2VuZGlmCisKKyMgUHJvY2VzcyBwbGF0Zm9ybSBmbGFncworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxSUEkzX0JMMzJfUkFNX0xPQ0FUSU9OX0lEKSkKKyQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxSUEkzX0JMMzNfSU5fQUFSQ0gzMikpCisKKyMgVmVyaWZ5IGJ1aWxkIGNvbmZpZworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lmbmVxICgke0xPQURfSU1BR0VfVjJ9LCAxKQorICAkKGVycm9yIEVycm9yOiBycGkzIG5lZWRzIExPQURfSU1BR0VfVjI9MSkKK2VuZGlmCisKK2lmZXEgKCR7QVJDSH0sYWFyY2gzMikKKyAgJChlcnJvciBFcnJvcjogQUFyY2gzMiBub3Qgc3VwcG9ydGVkIG9uIHJwaTMpCitlbmRpZgpkaWZmIC0tZ2l0IGEvcGxhdC9ycGkzL3JwaTNfYmwxX3NldHVwLmMgYi9wbGF0L3JwaTMvcnBpM19ibDFfc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWMwZjRhCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdC9ycGkzL3JwaTNfYmwxX3NldHVwLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaW5jbHVkZSA8YXJjaC5oPgorI2luY2x1ZGUgPGFyY2hfaGVscGVycy5oPgorI2luY2x1ZGUgPGJsX2NvbW1vbi5oPgorI2luY2x1ZGUgPGNvbnNvbGUuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybV9kZWYuaD4KKyNpbmNsdWRlIDx4bGF0X21tdV9oZWxwZXJzLmg+CisjaW5jbHVkZSA8eGxhdF90YWJsZXNfZGVmcy5oPgorCisjaW5jbHVkZSAiLi4vLi4vYmwxL2JsMV9wcml2YXRlLmgiCisjaW5jbHVkZSAicnBpM19wcml2YXRlLmgiCisKKy8qIERhdGEgc3RydWN0dXJlIHdoaWNoIGhvbGRzIHRoZSBleHRlbnRzIG9mIHRoZSB0cnVzdGVkIFNSQU0gZm9yIEJMMSAqLworc3RhdGljIG1lbWluZm9fdCBibDFfdHpyYW1fbGF5b3V0OworCittZW1pbmZvX3QgKmJsMV9wbGF0X3NlY19tZW1fbGF5b3V0KHZvaWQpCit7CisJcmV0dXJuICZibDFfdHpyYW1fbGF5b3V0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGVyZm9ybSBhbnkgQkwxIHNwZWNpZmljIHBsYXRmb3JtIGFjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBibDFfZWFybHlfcGxhdGZvcm1fc2V0dXAodm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIHRoZSBjb25zb2xlIHRvIHByb3ZpZGUgZWFybHkgZGVidWcgc3VwcG9ydCAqLworCWNvbnNvbGVfaW5pdChQTEFUX1JQSTNfVUFSVF9CQVNFLCBQTEFUX1JQSTNfVUFSVF9DTEtfSU5fSFosCisJCSAgICAgUExBVF9SUEkzX1VBUlRfQkFVRFJBVEUpOworCisJLyogQWxsb3cgQkwxIHRvIHNlZSB0aGUgd2hvbGUgVHJ1c3RlZCBSQU0gKi8KKwlibDFfdHpyYW1fbGF5b3V0LnRvdGFsX2Jhc2UgPSBCTF9SQU1fQkFTRTsKKwlibDFfdHpyYW1fbGF5b3V0LnRvdGFsX3NpemUgPSBCTF9SQU1fU0laRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGVyZm9ybSB0aGUgdmVyeSBlYXJseSBwbGF0Zm9ybSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgc2V0dXAuICBUaGlzIG9ubHkKKyAqIGRvZXMgYmFzaWMgaW5pdGlhbGl6YXRpb24uIExhdGVyIGFyY2hpdGVjdHVyYWwgc2V0dXAgKGJsMV9hcmNoX3NldHVwKCkpCisgKiBkb2VzIG5vdCBkbyBhbnl0aGluZyBwbGF0Zm9ybSBzcGVjaWZpYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgYmwxX3BsYXRfYXJjaF9zZXR1cCh2b2lkKQoreworCXJwaTNfc2V0dXBfcGFnZV90YWJsZXMoYmwxX3R6cmFtX2xheW91dC50b3RhbF9iYXNlLAorCQkJICAgICAgIGJsMV90enJhbV9sYXlvdXQudG90YWxfc2l6ZSwKKwkJCSAgICAgICBCTF9DT0RFX0JBU0UsIEJMMV9DT0RFX0VORCwKKwkJCSAgICAgICBCTDFfUk9fREFUQV9CQVNFLCBCTDFfUk9fREFUQV9FTkQKKyNpZiBVU0VfQ09IRVJFTlRfTUVNCisJCQkgICAgICAgLCBCTF9DT0hFUkVOVF9SQU1fQkFTRSwgQkxfQ09IRVJFTlRfUkFNX0VORAorI2VuZGlmCisJCQkgICAgICApOworCisJZW5hYmxlX21tdV9lbDMoMCk7Cit9CisKK3ZvaWQgYmwxX3BsYXRmb3JtX3NldHVwKHZvaWQpCit7CisJLyogSW5pdGlhbGlzZSB0aGUgSU8gbGF5ZXIgYW5kIHJlZ2lzdGVyIHBsYXRmb3JtIElPIGRldmljZXMgKi8KKwlwbGF0X3JwaTNfaW9fc2V0dXAoKTsKK30KZGlmZiAtLWdpdCBhL3BsYXQvcnBpMy9ycGkzX2JsMl9zZXR1cC5jIGIvcGxhdC9ycGkzL3JwaTNfYmwyX3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZkODIyZQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXQvcnBpMy9ycGkzX2JsMl9zZXR1cC5jCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPGFyY2hfaGVscGVycy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGJsX2NvbW1vbi5oPgorI2luY2x1ZGUgPGNvbnNvbGUuaD4KKyNpbmNsdWRlIDxkZWJ1Zy5oPgorI2luY2x1ZGUgPGRlc2NfaW1hZ2VfbG9hZC5oPgorI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgorI2luY2x1ZGUgPHhsYXRfbW11X2hlbHBlcnMuaD4KKyNpbmNsdWRlIDx4bGF0X3RhYmxlc19kZWZzLmg+CisKKyNpbmNsdWRlICJycGkzX3ByaXZhdGUuaCIKKworLyogRGF0YSBzdHJ1Y3R1cmUgd2hpY2ggaG9sZHMgdGhlIGV4dGVudHMgb2YgdGhlIHRydXN0ZWQgU1JBTSBmb3IgQkwyICovCitzdGF0aWMgbWVtaW5mb190IGJsMl90enJhbV9sYXlvdXQgX19hbGlnbmVkKENBQ0hFX1dSSVRFQkFDS19HUkFOVUxFKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJMMSBoYXMgcGFzc2VkIHRoZSBleHRlbnRzIG9mIHRoZSB0cnVzdGVkIFNSQU0gdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0byBCTDIKKyAqIGluIHgwLiBUaGlzIG1lbW9yeSBsYXlvdXQgaXMgc2l0dGluZyBhdCB0aGUgYmFzZSBvZiB0aGUgZnJlZSB0cnVzdGVkIFNSQU0uCisgKiBDb3B5IGl0IHRvIGEgc2FmZSBsb2NhdGlvbiBiZWZvcmUgaXRzIHJlY2xhaW1lZCBieSBsYXRlciBCTDIgZnVuY3Rpb25hbGl0eS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGJsMl9lYXJseV9wbGF0Zm9ybV9zZXR1cChtZW1pbmZvX3QgKm1lbV9sYXlvdXQpCit7CisJLyogSW5pdGlhbGl6ZSB0aGUgY29uc29sZSB0byBwcm92aWRlIGVhcmx5IGRlYnVnIHN1cHBvcnQgKi8KKwljb25zb2xlX2luaXQoUExBVF9SUEkzX1VBUlRfQkFTRSwgUExBVF9SUEkzX1VBUlRfQ0xLX0lOX0haLAorCQkgICAgIFBMQVRfUlBJM19VQVJUX0JBVURSQVRFKTsKKworCS8qIFNldHVwIHRoZSBCTDIgbWVtb3J5IGxheW91dCAqLworCWJsMl90enJhbV9sYXlvdXQgPSAqbWVtX2xheW91dDsKKworCXBsYXRfcnBpM19pb19zZXR1cCgpOworfQorCit2b2lkIGJsMl9wbGF0Zm9ybV9zZXR1cCh2b2lkKQoreworCS8qCisJICogVGhpcyBpcyB3aGVyZSBhIFRydXN0Wm9uZSBhZGRyZXNzIHNwYWNlIGNvbnRyb2xsZXIgYW5kIG90aGVyCisJICogc2VjdXJpdHkgcmVsYXRlZCBwZXJpcGhlcmFscywgd291bGQgYmUgY29uZmlndXJlZC4KKwkgKi8KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBlcmZvcm0gdGhlIHZlcnkgZWFybHkgcGxhdGZvcm0gc3BlY2lmaWMgYXJjaGl0ZWN0dXJhbCBzZXR1cCBoZXJlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgYmwyX3BsYXRfYXJjaF9zZXR1cCh2b2lkKQoreworCXJwaTNfc2V0dXBfcGFnZV90YWJsZXMoYmwyX3R6cmFtX2xheW91dC50b3RhbF9iYXNlLAorCQkJICAgICAgIGJsMl90enJhbV9sYXlvdXQudG90YWxfc2l6ZSwKKwkJCSAgICAgICBCTF9DT0RFX0JBU0UsIEJMX0NPREVfRU5ELAorCQkJICAgICAgIEJMX1JPX0RBVEFfQkFTRSwgQkxfUk9fREFUQV9FTkQKKyNpZiBVU0VfQ09IRVJFTlRfTUVNCisJCQkgICAgICAgLCBCTF9DT0hFUkVOVF9SQU1fQkFTRSwgQkxfQ09IRVJFTlRfUkFNX0VORAorI2VuZGlmCisJCQkgICAgICApOworCisJZW5hYmxlX21tdV9lbDEoMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IHRoZSBwbGF0Zm9ybXMgdG8gdXBkYXRlL3VzZSBpbWFnZQorICogaW5mb3JtYXRpb24gZm9yIGdpdmVuIGBpbWFnZV9pZGAuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGJsMl9wbGF0X2hhbmRsZV9wb3N0X2ltYWdlX2xvYWQodW5zaWduZWQgaW50IGltYWdlX2lkKQoreworCWludCBlcnIgPSAwOworCWJsX21lbV9wYXJhbXNfbm9kZV90ICpibF9tZW1fcGFyYW1zID0gZ2V0X2JsX21lbV9wYXJhbXNfbm9kZShpbWFnZV9pZCk7CisKKwlhc3NlcnQoYmxfbWVtX3BhcmFtcyAhPSBOVUxMKTsKKworCXN3aXRjaCAoaW1hZ2VfaWQpIHsKKwljYXNlIEJMMzJfSU1BR0VfSUQ6CisJCWJsX21lbV9wYXJhbXMtPmVwX2luZm8uc3BzciA9IHJwaTNfZ2V0X3Nwc3JfZm9yX2JsMzJfZW50cnkoKTsKKwkJYnJlYWs7CisKKwljYXNlIEJMMzNfSU1BR0VfSUQ6CisJCS8qIEJMMzMgZXhwZWN0cyB0byByZWNlaXZlIHRoZSBwcmltYXJ5IENQVSBNUElEICh0aHJvdWdoIHIwKSAqLworCQlibF9tZW1fcGFyYW1zLT5lcF9pbmZvLmFyZ3MuYXJnMCA9IDB4ZmZmZiAmIHJlYWRfbXBpZHIoKTsKKwkJYmxfbWVtX3BhcmFtcy0+ZXBfaW5mby5zcHNyID0gcnBpM19nZXRfc3Bzcl9mb3JfYmwzM19lbnRyeSgpOworCQlicmVhazsKKworCX0KKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9wbGF0L3JwaTMvcnBpM19ibDMxX3NldHVwLmMgYi9wbGF0L3JwaTMvcnBpM19ibDMxX3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkxMzM1NgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXQvcnBpMy9ycGkzX2JsMzFfc2V0dXAuYwpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8YmxfY29tbW9uLmg+CisjaW5jbHVkZSA8Y29uc29sZS5oPgorI2luY2x1ZGUgPHBsYXRmb3JtLmg+CisjaW5jbHVkZSA8cGxhdGZvcm1fZGVmLmg+CisjaW5jbHVkZSA8eGxhdF9tbXVfaGVscGVycy5oPgorI2luY2x1ZGUgPHhsYXRfdGFibGVzX2RlZnMuaD4KKworI2luY2x1ZGUgInJwaTNfcHJpdmF0ZS5oIgorCisjZGVmaW5lIEJMMzFfRU5ECSh1aW50cHRyX3QpKCZfX0JMMzFfRU5EX18pCisKKy8qCisgKiBQbGFjZWhvbGRlciB2YXJpYWJsZXMgZm9yIGNvcHlpbmcgdGhlIGFyZ3VtZW50cyB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgdG8KKyAqIEJMMzEgZnJvbSBCTDIuCisgKi8KK3N0YXRpYyBlbnRyeV9wb2ludF9pbmZvX3QgYmwzMl9pbWFnZV9lcF9pbmZvOworc3RhdGljIGVudHJ5X3BvaW50X2luZm9fdCBibDMzX2ltYWdlX2VwX2luZm87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSAnZW50cnlfcG9pbnRfaW5mbycgc3RydWN0dXJlIG9mIHRoZSBuZXh0IGltYWdlIGZvcgorICogdGhlIHNlY3VyaXR5IHN0YXRlIHNwZWNpZmllZC4gQkwzMyBjb3JyZXNwb25kcyB0byB0aGUgbm9uLXNlY3VyZSBpbWFnZSB0eXBlCisgKiB3aGlsZSBCTDMyIGNvcnJlc3BvbmRzIHRvIHRoZSBzZWN1cmUgaW1hZ2UgdHlwZS4gQSBOVUxMIHBvaW50ZXIgaXMgcmV0dXJuZWQKKyAqIGlmIHRoZSBpbWFnZSBkb2VzIG5vdCBleGlzdC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitlbnRyeV9wb2ludF9pbmZvX3QgKmJsMzFfcGxhdF9nZXRfbmV4dF9pbWFnZV9lcF9pbmZvKHVpbnQzMl90IHR5cGUpCit7CisJZW50cnlfcG9pbnRfaW5mb190ICpuZXh0X2ltYWdlX2luZm87CisKKwlhc3NlcnQoc2VjX3N0YXRlX2lzX3ZhbGlkKHR5cGUpICE9IDApOworCisJbmV4dF9pbWFnZV9pbmZvID0gKHR5cGUgPT0gTk9OX1NFQ1VSRSkKKwkJCT8gJmJsMzNfaW1hZ2VfZXBfaW5mbyA6ICZibDMyX2ltYWdlX2VwX2luZm87CisKKwkvKiBOb25lIG9mIHRoZSBpbWFnZXMgY2FuIGhhdmUgMHgwIGFzIHRoZSBlbnRyeXBvaW50LiAqLworCWlmIChuZXh0X2ltYWdlX2luZm8tPnBjKSB7CisJCXJldHVybiBuZXh0X2ltYWdlX2luZm87CisJfSBlbHNlIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGVyZm9ybSBhbnkgQkwzMSBlYXJseSBwbGF0Zm9ybSBzZXR1cC4gSGVyZSBpcyBhbiBvcHBvcnR1bml0eSB0byBjb3B5CisgKiBwYXJhbWV0ZXJzIHBhc3NlZCBieSB0aGUgY2FsbGluZyBFTCAoUy1FTDEgaW4gQkwyICYgUy1FTDMgaW4gQkwxKSBiZWZvcmUKKyAqIHRoZXkgYXJlIGxvc3QgKHBvdGVudGlhbGx5KS4gVGhpcyBuZWVkcyB0byBiZSBkb25lIGJlZm9yZSB0aGUgTU1VIGlzCisgKiBpbml0aWFsaXplZCBzbyB0aGF0IHRoZSBtZW1vcnkgbGF5b3V0IGNhbiBiZSB1c2VkIHdoaWxlIGNyZWF0aW5nIHBhZ2UKKyAqIHRhYmxlcy4gQkwyIGhhcyBmbHVzaGVkIHRoaXMgaW5mb3JtYXRpb24gdG8gbWVtb3J5LCBzbyB3ZSBhcmUgZ3VhcmFudGVlZAorICogdG8gcGljayB1cCBnb29kIGRhdGEuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBibDMxX2Vhcmx5X3BsYXRmb3JtX3NldHVwKHZvaWQgKmZyb21fYmwyLAorCQkJICAgICAgIHZvaWQgKnBsYXRfcGFyYW1zX2Zyb21fYmwyKQoreworCS8qIEluaXRpYWxpemUgdGhlIGNvbnNvbGUgdG8gcHJvdmlkZSBlYXJseSBkZWJ1ZyBzdXBwb3J0ICovCisJY29uc29sZV9pbml0KFBMQVRfUlBJM19VQVJUX0JBU0UsIFBMQVRfUlBJM19VQVJUX0NMS19JTl9IWiwKKwkJICAgICBQTEFUX1JQSTNfVUFSVF9CQVVEUkFURSk7CisKKyNpZiBSRVNFVF9UT19CTDMxCisKKwkvKiBUaGVyZSBhcmUgbm8gcGFyYW1ldGVycyBmcm9tIEJMMiBpZiBCTDMxIGlzIGEgcmVzZXQgdmVjdG9yICovCisJYXNzZXJ0KGZyb21fYmwyID09IE5VTEwpOworCWFzc2VydChwbGF0X3BhcmFtc19mcm9tX2JsMiA9PSBOVUxMKTsKKworI2lmZGVmIEJMMzJfQkFTRQorCS8qIFBvcHVsYXRlIGVudHJ5IHBvaW50IGluZm9ybWF0aW9uIGZvciBCTDMyICovCisJU0VUX1BBUkFNX0hFQUQoJmJsMzJfaW1hZ2VfZXBfaW5mbywKKwkJCQlQQVJBTV9FUCwKKwkJCQlWRVJTSU9OXzEsCisJCQkJMCk7CisJU0VUX1NFQ1VSSVRZX1NUQVRFKGJsMzJfaW1hZ2VfZXBfaW5mby5oLmF0dHIsIFNFQ1VSRSk7CisJYmwzMl9pbWFnZV9lcF9pbmZvLnBjID0gQkwzMl9CQVNFOworCWJsMzJfaW1hZ2VfZXBfaW5mby5zcHNyID0gcnBpM19nZXRfc3Bzcl9mb3JfYmwzMl9lbnRyeSgpOworI2VuZGlmIC8qIEJMMzJfQkFTRSAqLworCisJLyogUG9wdWxhdGUgZW50cnkgcG9pbnQgaW5mb3JtYXRpb24gZm9yIEJMMzMgKi8KKwlTRVRfUEFSQU1fSEVBRCgmYmwzM19pbWFnZV9lcF9pbmZvLAorCQkJCVBBUkFNX0VQLAorCQkJCVZFUlNJT05fMSwKKwkJCQkwKTsKKwkvKgorCSAqIFRlbGwgQkwzMSB3aGVyZSB0aGUgbm9uLXRydXN0ZWQgc29mdHdhcmUgaW1hZ2UKKwkgKiBpcyBsb2NhdGVkIGFuZCB0aGUgZW50cnkgc3RhdGUgaW5mb3JtYXRpb24KKwkgKi8KKwlibDMzX2ltYWdlX2VwX2luZm8ucGMgPSBwbGF0X2dldF9uc19pbWFnZV9lbnRyeXBvaW50KCk7CisKKwlibDMzX2ltYWdlX2VwX2luZm8uc3BzciA9IHJwaTNfZ2V0X3Nwc3JfZm9yX2JsMzNfZW50cnkoKTsKKwlTRVRfU0VDVVJJVFlfU1RBVEUoYmwzM19pbWFnZV9lcF9pbmZvLmguYXR0ciwgTk9OX1NFQ1VSRSk7CisKKyNlbHNlIC8qIFJFU0VUX1RPX0JMMzEgKi8KKworCS8qCisJICogSW4gZGVidWcgYnVpbGRzLCB3ZSBwYXNzIGEgc3BlY2lhbCB2YWx1ZSBpbiAncGxhdF9wYXJhbXNfZnJvbV9ibDInCisJICogdG8gdmVyaWZ5IHBsYXRmb3JtIHBhcmFtZXRlcnMgZnJvbSBCTDIgdG8gQkwzMS4KKwkgKiBJbiByZWxlYXNlIGJ1aWxkcywgaXQncyBub3QgdXNlZC4KKwkgKi8KKwlhc3NlcnQoKCh1aW50cHRyX3QpcGxhdF9wYXJhbXNfZnJvbV9ibDIpID09IFJQSTNfQkwzMV9QTEFUX1BBUkFNX1ZBTCk7CisKKwkvKgorCSAqIENoZWNrIHBhcmFtcyBwYXNzZWQgZnJvbSBCTDIgc2hvdWxkIG5vdCBiZSBOVUxMLAorCSAqLworCWJsX3BhcmFtc190ICpwYXJhbXNfZnJvbV9ibDIgPSAoYmxfcGFyYW1zX3QgKilmcm9tX2JsMjsKKworCWFzc2VydChwYXJhbXNfZnJvbV9ibDIgIT0gTlVMTCk7CisJYXNzZXJ0KHBhcmFtc19mcm9tX2JsMi0+aC50eXBlID09IFBBUkFNX0JMX1BBUkFNUyk7CisJYXNzZXJ0KHBhcmFtc19mcm9tX2JsMi0+aC52ZXJzaW9uID49IFZFUlNJT05fMik7CisKKwlibF9wYXJhbXNfbm9kZV90ICpibF9wYXJhbXMgPSBwYXJhbXNfZnJvbV9ibDItPmhlYWQ7CisKKwkvKgorCSAqIENvcHkgQkwzMyBhbmQgQkwzMiAoaWYgcHJlc2VudCksIGVudHJ5IHBvaW50IGluZm9ybWF0aW9uLgorCSAqIFRoZXkgYXJlIHN0b3JlZCBpbiBTZWN1cmUgUkFNLCBpbiBCTDIncyBhZGRyZXNzIHNwYWNlLgorCSAqLworCXdoaWxlIChibF9wYXJhbXMpIHsKKwkJaWYgKGJsX3BhcmFtcy0+aW1hZ2VfaWQgPT0gQkwzMl9JTUFHRV9JRCkgeworCQkJYmwzMl9pbWFnZV9lcF9pbmZvID0gKmJsX3BhcmFtcy0+ZXBfaW5mbzsKKwkJfQorCisJCWlmIChibF9wYXJhbXMtPmltYWdlX2lkID09IEJMMzNfSU1BR0VfSUQpIHsKKwkJCWJsMzNfaW1hZ2VfZXBfaW5mbyA9ICpibF9wYXJhbXMtPmVwX2luZm87CisJCX0KKworCQlibF9wYXJhbXMgPSBibF9wYXJhbXMtPm5leHRfcGFyYW1zX2luZm87CisJfQorCisJaWYgKGJsMzNfaW1hZ2VfZXBfaW5mby5wYyA9PSAwKSB7CisJCXBhbmljKCk7CisJfQorCisjZW5kaWYgLyogUkVTRVRfVE9fQkwzMSAqLworfQorCit2b2lkIGJsMzFfcGxhdF9hcmNoX3NldHVwKHZvaWQpCit7CisJcnBpM19zZXR1cF9wYWdlX3RhYmxlcyhCTDMxX0JBU0UsIEJMMzFfRU5EIC0gQkwzMV9CQVNFLAorCQkJICAgICAgIEJMX0NPREVfQkFTRSwgQkxfQ09ERV9FTkQsCisJCQkgICAgICAgQkxfUk9fREFUQV9CQVNFLCBCTF9ST19EQVRBX0VORAorI2lmIFVTRV9DT0hFUkVOVF9NRU0KKwkJCSAgICAgICAsIEJMX0NPSEVSRU5UX1JBTV9CQVNFLCBCTF9DT0hFUkVOVF9SQU1fRU5ECisjZW5kaWYKKwkJCSAgICAgICk7CisKKwllbmFibGVfbW11X2VsMygwKTsKK30KKwordm9pZCBibDMxX3BsYXRmb3JtX3NldHVwKHZvaWQpCit7CisjaWYgUkVTRVRfVE9fQkwzMQorCS8qCisJICogRG8gaW5pdGlhbCBzZWN1cml0eSBjb25maWd1cmF0aW9uIHRvIGFsbG93IERSQU0vZGV2aWNlIGFjY2VzcworCSAqIChpZiBlYXJsaWVyIEJMIGhhcyBub3QgYWxyZWFkeSBkb25lIHNvKS4KKwkgKi8KKyNlbmRpZiAvKiBSRVNFVF9UT19CTDMxICovCisKKwlyZXR1cm47Cit9CisKK3ZvaWQgYmwzMV9wbGF0X3J1bnRpbWVfc2V0dXAodm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIHRoZSBydW50aW1lIGNvbnNvbGUgKi8KKwljb25zb2xlX2luaXQoUExBVF9SUEkzX1VBUlRfQkFTRSwgUExBVF9SUEkzX1VBUlRfQ0xLX0lOX0haLAorCQkgICAgIFBMQVRfUlBJM19VQVJUX0JBVURSQVRFKTsKK30KZGlmZiAtLWdpdCBhL3BsYXQvcnBpMy9ycGkzX2NvbW1vbi5jIGIvcGxhdC9ycGkzL3JwaTNfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdkY2UwOQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXQvcnBpMy9ycGkzX2NvbW1vbi5jCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxhcmNoX2hlbHBlcnMuaD4KKyNpbmNsdWRlIDxibF9jb21tb24uaD4KKyNpbmNsdWRlIDxkZWJ1Zy5oPgorI2luY2x1ZGUgPGludGVycnVwdF9tZ210Lmg+CisjaW5jbHVkZSA8cGxhdGZvcm1fZGVmLmg+CisjaW5jbHVkZSA8eGxhdF90YWJsZXNfdjIuaD4KKworI2luY2x1ZGUgInJwaTNfaHcuaCIKKyNpbmNsdWRlICJycGkzX3ByaXZhdGUuaCIKKworI2RlZmluZSBNQVBfREVWSUNFMAlNQVBfUkVHSU9OX0ZMQVQoREVWSUNFMF9CQVNFLAkJCVwKKwkJCQkJREVWSUNFMF9TSVpFLAkJCVwKKwkJCQkJTVRfREVWSUNFIHwgTVRfUlcgfCBNVF9TRUNVUkUpCisKKyNkZWZpbmUgTUFQX1NIQVJFRF9SQU0JTUFQX1JFR0lPTl9GTEFUKFNIQVJFRF9SQU1fQkFTRSwJCVwKKwkJCQkJU0hBUkVEX1JBTV9TSVpFLAkJXAorCQkJCQlNVF9ERVZJQ0UgIHwgTVRfUlcgfCBNVF9TRUNVUkUpCisKKyNkZWZpbmUgTUFQX05TX0RSQU0wCU1BUF9SRUdJT05fRkxBVChOU19EUkFNMF9CQVNFLCBOU19EUkFNMF9TSVpFLAlcCisJCQkJCU1UX01FTU9SWSB8IE1UX1JXIHwgTVRfTlMpCisKKyNkZWZpbmUgTUFQX0ZJUAkJTUFQX1JFR0lPTl9GTEFUKFBMQVRfUlBJM19GSVBfQkFTRSwJCVwKKwkJCQkJUExBVF9SUEkzX0ZJUF9NQVhfU0laRSwJCVwKKwkJCQkJTVRfTUVNT1JZIHwgTVRfUk8gfCBNVF9OUykKKworI2RlZmluZSBNQVBfQkwzMl9NRU0JTUFQX1JFR0lPTl9GTEFUKEJMMzJfTUVNX0JBU0UsIEJMMzJfTUVNX1NJWkUsCVwKKwkJCQkJTVRfTUVNT1JZIHwgTVRfUlcgfCBNVF9TRUNVUkUpCisKKy8qCisgKiBUYWJsZSBvZiByZWdpb25zIGZvciB2YXJpb3VzIEJMIHN0YWdlcyB0byBtYXAgdXNpbmcgdGhlIE1NVS4KKyAqLworI2lmZGVmIElNQUdFX0JMMQorc3RhdGljIGNvbnN0IG1tYXBfcmVnaW9uX3QgcGxhdF9ycGkzX21tYXBbXSA9IHsKKwlNQVBfU0hBUkVEX1JBTSwKKwlNQVBfREVWSUNFMCwKKwlNQVBfRklQLAorCXswfQorfTsKKyNlbmRpZgorCisjaWZkZWYgSU1BR0VfQkwyCitzdGF0aWMgY29uc3QgbW1hcF9yZWdpb25fdCBwbGF0X3JwaTNfbW1hcFtdID0geworCU1BUF9TSEFSRURfUkFNLAorCU1BUF9ERVZJQ0UwLAorCU1BUF9GSVAsCisJTUFQX05TX0RSQU0wLAorI2lmZGVmIEJMMzJfQkFTRQorCU1BUF9CTDMyX01FTSwKKyNlbmRpZgorCXswfQorfTsKKyNlbmRpZgorCisjaWZkZWYgSU1BR0VfQkwzMQorc3RhdGljIGNvbnN0IG1tYXBfcmVnaW9uX3QgcGxhdF9ycGkzX21tYXBbXSA9IHsKKwlNQVBfU0hBUkVEX1JBTSwKKwlNQVBfREVWSUNFMCwKKyNpZmRlZiBCTDMyX0JBU0UKKwlNQVBfQkwzMl9NRU0sCisjZW5kaWYKKwl7MH0KK307CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgdHJhbnNsYXRpb24gdGFibGVzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgcnBpM19zZXR1cF9wYWdlX3RhYmxlcyh1aW50cHRyX3QgdG90YWxfYmFzZSwgc2l6ZV90IHRvdGFsX3NpemUsCisJCQkgICAgdWludHB0cl90IGNvZGVfc3RhcnQsIHVpbnRwdHJfdCBjb2RlX2xpbWl0LAorCQkJICAgIHVpbnRwdHJfdCByb2RhdGFfc3RhcnQsIHVpbnRwdHJfdCByb2RhdGFfbGltaXQKKyNpZiBVU0VfQ09IRVJFTlRfTUVNCisJCQkgICAgLCB1aW50cHRyX3QgY29oX3N0YXJ0LCB1aW50cHRyX3QgY29oX2xpbWl0CisjZW5kaWYKKwkJCSAgICApCit7CisJLyoKKwkgKiBNYXAgdGhlIFRydXN0ZWQgU1JBTSB3aXRoIGFwcHJvcHJpYXRlIG1lbW9yeSBhdHRyaWJ1dGVzLgorCSAqIFN1YnNlcXVlbnQgbWFwcGluZ3Mgd2lsbCBhZGp1c3QgdGhlIGF0dHJpYnV0ZXMgZm9yIHNwZWNpZmljIHJlZ2lvbnMuCisJICovCisJVkVSQk9TRSgiVHJ1c3RlZCBTUkFNIHNlZW4gYnkgdGhpcyBCTCBpbWFnZTogJXAgLSAlcFxuIiwKKwkJKHZvaWQgKikgdG90YWxfYmFzZSwgKHZvaWQgKikgKHRvdGFsX2Jhc2UgKyB0b3RhbF9zaXplKSk7CisJbW1hcF9hZGRfcmVnaW9uKHRvdGFsX2Jhc2UsIHRvdGFsX2Jhc2UsCisJCQl0b3RhbF9zaXplLAorCQkJTVRfTUVNT1JZIHwgTVRfUlcgfCBNVF9TRUNVUkUpOworCisJLyogUmUtbWFwIHRoZSBjb2RlIHNlY3Rpb24gKi8KKwlWRVJCT1NFKCJDb2RlIHJlZ2lvbjogJXAgLSAlcFxuIiwKKwkJKHZvaWQgKikgY29kZV9zdGFydCwgKHZvaWQgKikgY29kZV9saW1pdCk7CisJbW1hcF9hZGRfcmVnaW9uKGNvZGVfc3RhcnQsIGNvZGVfc3RhcnQsCisJCQljb2RlX2xpbWl0IC0gY29kZV9zdGFydCwKKwkJCU1UX0NPREUgfCBNVF9TRUNVUkUpOworCisJLyogUmUtbWFwIHRoZSByZWFkLW9ubHkgZGF0YSBzZWN0aW9uICovCisJVkVSQk9TRSgiUmVhZC1vbmx5IGRhdGEgcmVnaW9uOiAlcCAtICVwXG4iLAorCQkodm9pZCAqKSByb2RhdGFfc3RhcnQsICh2b2lkICopIHJvZGF0YV9saW1pdCk7CisJbW1hcF9hZGRfcmVnaW9uKHJvZGF0YV9zdGFydCwgcm9kYXRhX3N0YXJ0LAorCQkJcm9kYXRhX2xpbWl0IC0gcm9kYXRhX3N0YXJ0LAorCQkJTVRfUk9fREFUQSB8IE1UX1NFQ1VSRSk7CisKKyNpZiBVU0VfQ09IRVJFTlRfTUVNCisJLyogUmUtbWFwIHRoZSBjb2hlcmVudCBtZW1vcnkgcmVnaW9uICovCisJVkVSQk9TRSgiQ29oZXJlbnQgcmVnaW9uOiAlcCAtICVwXG4iLAorCQkodm9pZCAqKSBjb2hfc3RhcnQsICh2b2lkICopIGNvaF9saW1pdCk7CisJbW1hcF9hZGRfcmVnaW9uKGNvaF9zdGFydCwgY29oX3N0YXJ0LAorCQkJY29oX2xpbWl0IC0gY29oX3N0YXJ0LAorCQkJTVRfREVWSUNFIHwgTVRfUlcgfCBNVF9TRUNVUkUpOworI2VuZGlmCisKKwltbWFwX2FkZChwbGF0X3JwaTNfbW1hcCk7CisKKwlpbml0X3hsYXRfdGFibGVzKCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZXR1cm4gZW50cnlwb2ludCBvZiBCTDMzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnRwdHJfdCBwbGF0X2dldF9uc19pbWFnZV9lbnRyeXBvaW50KHZvaWQpCit7CisjaWZkZWYgUFJFTE9BREVEX0JMMzNfQkFTRQorCXJldHVybiBQUkVMT0FERURfQkwzM19CQVNFOworI2Vsc2UKKwlyZXR1cm4gUExBVF9SUEkzX05TX0lNQUdFX09GRlNFVDsKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2V0cyBTUFNSIGZvciBCTDMyIGVudHJ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWludDMyX3QgcnBpM19nZXRfc3Bzcl9mb3JfYmwzMl9lbnRyeSh2b2lkKQoreworCS8qCisJICogVGhlIFNlY3VyZSBQYXlsb2FkIERpc3BhdGNoZXIgc2VydmljZSBpcyByZXNwb25zaWJsZSBmb3IKKwkgKiBzZXR0aW5nIHRoZSBTUFNSIHByaW9yIHRvIGVudHJ5IGludG8gdGhlIEJMMzIgaW1hZ2UuCisJICovCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZXRzIFNQU1IgZm9yIEJMMzMgZW50cnkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50MzJfdCBycGkzX2dldF9zcHNyX2Zvcl9ibDMzX2VudHJ5KHZvaWQpCit7CisjaWYgUlBJM19CTDMzX0lOX0FBUkNIMzIKKwlJTkZPKCJCTDMzIHdpbGwgYm9vdCBpbiBOb24tc2VjdXJlIEFBcmNoMzIgSHlwZXJ2aXNvciBtb2RlXG4iKTsKKwlyZXR1cm4gU1BTUl9NT0RFMzIoTU9ERTMyX2h5cCwgU1BTUl9UX0FSTSwgU1BTUl9FX0xJVFRMRSwKKwkJCSAgIERJU0FCTEVfQUxMX0VYQ0VQVElPTlMpOworI2Vsc2UKKwlyZXR1cm4gU1BTUl82NChNT0RFX0VMMiwgTU9ERV9TUF9FTFgsIERJU0FCTEVfQUxMX0VYQ0VQVElPTlMpOworI2VuZGlmCit9CisKK3Vuc2lnbmVkIGludCBwbGF0X2dldF9zeXNjbnRfZnJlcTIodm9pZCkKK3sKKwlyZXR1cm4gU1lTX0NPVU5URVJfRlJFUV9JTl9USUNLUzsKK30KKwordWludDMyX3QgcGxhdF9pY19nZXRfcGVuZGluZ19pbnRlcnJ1cHRfdHlwZSh2b2lkKQoreworCXJldHVybiBJTlRSX1RZUEVfSU5WQUw7Cit9CmRpZmYgLS1naXQgYS9wbGF0L3JwaTMvcnBpM19ody5oIGIvcGxhdC9ycGkzL3JwaTNfaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDI3MmUwCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdC9ycGkzL3JwaTNfaHcuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpZm5kZWYgX19SUEkzX0hXX18KKyNkZWZpbmUgX19SUEkzX0hXX18KKworI2luY2x1ZGUgPHV0aWxzX2RlZi5oPgorCisvKgorICogUGVyaXBoZXJhbHMKKyAqLworCisjZGVmaW5lIFJQSTNfSU9fQkFTRQkJCVVMTCgweDNGMDAwMDAwKQorI2RlZmluZSBSUEkzX0lPX1NJWkUJCQlVTEwoMHgwMTAwMDAwMCkKKworLyoKKyAqIFNlcmlhbCBwb3J0IChjYWxsZWQgJ01pbmkgVUFSVCcgaW4gdGhlIEJDTSBkb2N1Y21lbnRhdGlvbikuCisgKi8KKyNkZWZpbmUgUlBJM19JT19NSU5JX1VBUlRfT0ZGU0VUCVVMTCgweDAwMjE1MDQwKQorI2RlZmluZSBSUEkzX01JTklfVUFSVF9CQVNFCQkoUlBJM19JT19CQVNFICsgUlBJM19JT19NSU5JX1VBUlRfT0ZGU0VUKQorI2RlZmluZSBSUEkzX01JTklfVUFSVF9DTEtfSU5fSFoJVUxMKDUwMDAwMDAwMCkKKworLyoKKyAqIFBvd2VyIG1hbmFnZW1lbnQsIHJlc2V0IGNvbnRyb2xsZXIsIHdhdGNoZG9nLgorICovCisjZGVmaW5lIFJQSTNfSU9fUE1fT0ZGU0VUCQlVTEwoMHgwMDEwMDAwMCkKKyNkZWZpbmUgUlBJM19QTV9CQVNFCQkJKFJQSTNfSU9fQkFTRSArIFJQSTNfSU9fUE1fT0ZGU0VUKQorLyogUmVnaXN0ZXJzIG9uIHRvcCBvZiBSUEkzX1BNX0JBU0UuICovCisjZGVmaW5lIFJQSTNfUE1fUlNUQ19PRkZTRVQJCVVMTCgweDAwMDAwMDFDKQorI2RlZmluZSBSUEkzX1BNX1dET0dfT0ZGU0VUCQlVTEwoMHgwMDAwMDAyNCkKKy8qIFdhdGNoZG9nIGNvbnN0YW50cyAqLworI2RlZmluZSBSUEkzX1BNX1BBU1NXT1JECQlVTEwoMHg1QTAwMDAwMCkKKyNkZWZpbmUgUlBJM19QTV9SU1RDX1dSQ0ZHX01BU0sJCVVMTCgweDAwMDAwMDMwKQorI2RlZmluZSBSUEkzX1BNX1JTVENfV1JDRkdfRlVMTF9SRVNFVAlVTEwoMHgwMDAwMDAyMCkKKworLyoKKyAqIExvY2FsIGludGVycnVwdCBjb250cm9sbGVyCisgKi8KKyNkZWZpbmUgUlBJM19JTlRDX0JBU0VfQUREUkVTUwkJCVVMTCgweDQwMDAwMDAwKQorLyogUmVnaXN0ZXJzIG9uIHRvcCBvZiBSUEkzX0lOVENfQkFTRV9BRERSRVNTICovCisjZGVmaW5lIFJQSTNfSU5UQ19DT05UUk9MX09GRlNFVAkJVUxMKDB4MDAwMDAwMDApCisjZGVmaW5lIFJQSTNfSU5UQ19QUkVTQ0FMRVJfT0ZGU0VUCQlVTEwoMHgwMDAwMDAwOCkKKyNkZWZpbmUgUlBJM19JTlRDX01CT1hfQ09OVFJPTF9PRkZTRVQJCVVMTCgweDAwMDAwMDUwKQorI2RlZmluZSBSUEkzX0lOVENfTUJPWF9DT05UUk9MX1NMT1QzX0ZJUQlVTEwoMHgwMDAwMDA4MCkKKyNkZWZpbmUgUlBJM19JTlRDX1BFTkRJTkdfRklRX09GRlNFVAkJVUxMKDB4MDAwMDAwNzApCisjZGVmaW5lIFJQSTNfSU5UQ19QRU5ESU5HX0ZJUV9NQk9YMwkJVUxMKDB4MDAwMDAwODApCisKKyNlbmRpZiAvKiBfX1JQSTNfSFdfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdC9ycGkzL3JwaTNfaW1hZ2VfbG9hZC5jIGIvcGxhdC9ycGkzL3JwaTNfaW1hZ2VfbG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZDllNGYKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0L3JwaTMvcnBpM19pbWFnZV9sb2FkLmMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaW5jbHVkZSA8YmxfY29tbW9uLmg+CisjaW5jbHVkZSA8ZGVzY19pbWFnZV9sb2FkLmg+CisjaW5jbHVkZSA8cGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybV9kZWYuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHNvIHRoYXQgdGhleSBhcmUgdmlzaWJsZQorICogaW4gbWVtb3J5IGZvciB0aGUgbmV4dCBCTCBpbWFnZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHBsYXRfZmx1c2hfbmV4dF9ibF9wYXJhbXModm9pZCkKK3sKKwlmbHVzaF9ibF9wYXJhbXNfZGVzYygpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mIGxvYWRhYmxlIGltYWdlcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitibF9sb2FkX2luZm9fdCAqcGxhdF9nZXRfYmxfaW1hZ2VfbG9hZF9pbmZvKHZvaWQpCit7CisJcmV0dXJuIGdldF9ibF9sb2FkX2luZm9fZnJvbV9tZW1fcGFyYW1zX2Rlc2MoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGlzdCBvZiBleGVjdXRhYmxlIGltYWdlcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitibF9wYXJhbXNfdCAqcGxhdF9nZXRfbmV4dF9ibF9wYXJhbXModm9pZCkKK3sKKwlyZXR1cm4gZ2V0X25leHRfYmxfcGFyYW1zX2Zyb21fbWVtX3BhcmFtc19kZXNjKCk7Cit9CmRpZmYgLS1naXQgYS9wbGF0L3JwaTMvcnBpM19pb19zdG9yYWdlLmMgYi9wbGF0L3JwaTMvcnBpM19pb19zdG9yYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjNDVlZgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXQvcnBpMy9ycGkzX2lvX3N0b3JhZ2UuYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8YmxfY29tbW9uLmg+CisjaW5jbHVkZSA8ZGVidWcuaD4KKyNpbmNsdWRlIDxmaXJtd2FyZV9pbWFnZV9wYWNrYWdlLmg+CisjaW5jbHVkZSA8aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8aW9fZmlwLmg+CisjaW5jbHVkZSA8aW9fbWVtbWFwLmg+CisjaW5jbHVkZSA8cGxhdGZvcm1fZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIFNlbWlob3N0aW5nIGZpbGVuYW1lcyAqLworI2RlZmluZSBCTDJfSU1BR0VfTkFNRQkJCSJibDIuYmluIgorI2RlZmluZSBCTDMxX0lNQUdFX05BTUUJCQkiYmwzMS5iaW4iCisjZGVmaW5lIEJMMzJfSU1BR0VfTkFNRQkJCSJibDMyLmJpbiIKKyNkZWZpbmUgQkwzM19JTUFHRV9OQU1FCQkJImJsMzMuYmluIgorCisjaWYgVFJVU1RFRF9CT0FSRF9CT09UCisjZGVmaW5lIEJMMl9DRVJUX05BTUUJCQkiYmwyLmNydCIKKyNkZWZpbmUgVFJVU1RFRF9LRVlfQ0VSVF9OQU1FCQkidHJ1c3RlZF9rZXkuY3J0IgorI2RlZmluZSBCTDMxX0tFWV9DRVJUX05BTUUJCSJibDMxX2tleS5jcnQiCisjZGVmaW5lIEJMMzJfS0VZX0NFUlRfTkFNRQkJImJsMzJfa2V5LmNydCIKKyNkZWZpbmUgQkwzM19LRVlfQ0VSVF9OQU1FCQkiYmwzM19rZXkuY3J0IgorI2RlZmluZSBCTDMxX0NFUlRfTkFNRQkJCSJibDMxLmNydCIKKyNkZWZpbmUgQkwzMl9DRVJUX05BTUUJCQkiYmwzMi5jcnQiCisjZGVmaW5lIEJMMzNfQ0VSVF9OQU1FCQkJImJsMzMuY3J0IgorI2VuZGlmIC8qIFRSVVNURURfQk9BUkRfQk9PVCAqLworCisvKiBJTyBkZXZpY2VzICovCitzdGF0aWMgY29uc3QgaW9fZGV2X2Nvbm5lY3Rvcl90ICpmaXBfZGV2X2NvbjsKK3N0YXRpYyB1aW50cHRyX3QgZmlwX2Rldl9oYW5kbGU7CitzdGF0aWMgY29uc3QgaW9fZGV2X2Nvbm5lY3Rvcl90ICptZW1tYXBfZGV2X2NvbjsKK3N0YXRpYyB1aW50cHRyX3QgbWVtbWFwX2Rldl9oYW5kbGU7CisKK3N0YXRpYyBjb25zdCBpb19ibG9ja19zcGVjX3QgZmlwX2Jsb2NrX3NwZWMgPSB7CisJLm9mZnNldCA9IFBMQVRfUlBJM19GSVBfQkFTRSwKKwkubGVuZ3RoID0gUExBVF9SUEkzX0ZJUF9NQVhfU0laRQorfTsKKworc3RhdGljIGNvbnN0IGlvX3V1aWRfc3BlY190IGJsMl91dWlkX3NwZWMgPSB7CisJLnV1aWQgPSBVVUlEX1RSVVNURURfQk9PVF9GSVJNV0FSRV9CTDIsCit9OworCitzdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgYmwzMV91dWlkX3NwZWMgPSB7CisJLnV1aWQgPSBVVUlEX0VMM19SVU5USU1FX0ZJUk1XQVJFX0JMMzEsCit9OworCitzdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgYmwzMl91dWlkX3NwZWMgPSB7CisJLnV1aWQgPSBVVUlEX1NFQ1VSRV9QQVlMT0FEX0JMMzIsCit9OworCitzdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgYmwzM191dWlkX3NwZWMgPSB7CisJLnV1aWQgPSBVVUlEX05PTl9UUlVTVEVEX0ZJUk1XQVJFX0JMMzMsCit9OworCisjaWYgVFJVU1RFRF9CT0FSRF9CT09UCitzdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgYmwyX2NlcnRfdXVpZF9zcGVjID0geworCS51dWlkID0gVVVJRF9UUlVTVEVEX0JPT1RfRklSTVdBUkVfQkwyX0NFUlQsCit9OworCitzdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgdHJ1c3RlZF9rZXlfY2VydF91dWlkX3NwZWMgPSB7CisJLnV1aWQgPSBVVUlEX1RSVVNURURfS0VZX0NFUlQsCit9OworCitzdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgYmwzMV9rZXlfY2VydF91dWlkX3NwZWMgPSB7CisJLnV1aWQgPSBVVUlEX0VMM19SVU5USU1FX0ZJUk1XQVJFX0JMMzFfS0VZX0NFUlQsCit9OworCitzdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgYmwzMl9rZXlfY2VydF91dWlkX3NwZWMgPSB7CisJLnV1aWQgPSBVVUlEX1NFQ1VSRV9QQVlMT0FEX0JMMzJfS0VZX0NFUlQsCit9OworCitzdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgYmwzM19rZXlfY2VydF91dWlkX3NwZWMgPSB7CisJLnV1aWQgPSBVVUlEX05PTl9UUlVTVEVEX0ZJUk1XQVJFX0JMMzNfS0VZX0NFUlQsCit9OworCitzdGF0aWMgY29uc3QgaW9fdXVpZF9zcGVjX3QgYmwzMV9jZXJ0X3V1aWRfc3BlYyA9IHsKKwkudXVpZCA9IFVVSURfRUwzX1JVTlRJTUVfRklSTVdBUkVfQkwzMV9DRVJULAorfTsKKworc3RhdGljIGNvbnN0IGlvX3V1aWRfc3BlY190IGJsMzJfY2VydF91dWlkX3NwZWMgPSB7CisJLnV1aWQgPSBVVUlEX1NFQ1VSRV9QQVlMT0FEX0JMMzJfQ0VSVCwKK307CisKK3N0YXRpYyBjb25zdCBpb191dWlkX3NwZWNfdCBibDMzX2NlcnRfdXVpZF9zcGVjID0geworCS51dWlkID0gVVVJRF9OT05fVFJVU1RFRF9GSVJNV0FSRV9CTDMzX0NFUlQsCit9OworI2VuZGlmIC8qIFRSVVNURURfQk9BUkRfQk9PVCAqLworCitzdGF0aWMgaW50IG9wZW5fZmlwKGNvbnN0IHVpbnRwdHJfdCBzcGVjKTsKK3N0YXRpYyBpbnQgb3Blbl9tZW1tYXAoY29uc3QgdWludHB0cl90IHNwZWMpOworCitzdHJ1Y3QgcGxhdF9pb19wb2xpY3kgeworCXVpbnRwdHJfdCAqZGV2X2hhbmRsZTsKKwl1aW50cHRyX3QgaW1hZ2Vfc3BlYzsKKwlpbnQgKCpjaGVjaykoY29uc3QgdWludHB0cl90IHNwZWMpOworfTsKKworLyogQnkgZGVmYXVsdCwgbG9hZCBpbWFnZXMgZnJvbSB0aGUgRklQICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRfaW9fcG9saWN5IHBvbGljaWVzW10gPSB7CisJW0ZJUF9JTUFHRV9JRF0gPSB7CisJCSZtZW1tYXBfZGV2X2hhbmRsZSwKKwkJKHVpbnRwdHJfdCkmZmlwX2Jsb2NrX3NwZWMsCisJCW9wZW5fbWVtbWFwCisJfSwKKwlbQkwyX0lNQUdFX0lEXSA9IHsKKwkJJmZpcF9kZXZfaGFuZGxlLAorCQkodWludHB0cl90KSZibDJfdXVpZF9zcGVjLAorCQlvcGVuX2ZpcAorCX0sCisJW0JMMzFfSU1BR0VfSURdID0geworCQkmZmlwX2Rldl9oYW5kbGUsCisJCSh1aW50cHRyX3QpJmJsMzFfdXVpZF9zcGVjLAorCQlvcGVuX2ZpcAorCX0sCisJW0JMMzJfSU1BR0VfSURdID0geworCQkmZmlwX2Rldl9oYW5kbGUsCisJCSh1aW50cHRyX3QpJmJsMzJfdXVpZF9zcGVjLAorCQlvcGVuX2ZpcAorCX0sCisJW0JMMzNfSU1BR0VfSURdID0geworCQkmZmlwX2Rldl9oYW5kbGUsCisJCSh1aW50cHRyX3QpJmJsMzNfdXVpZF9zcGVjLAorCQlvcGVuX2ZpcAorCX0sCisjaWYgVFJVU1RFRF9CT0FSRF9CT09UCisJW0JMMl9DRVJUX0lEXSA9IHsKKwkJJmZpcF9kZXZfaGFuZGxlLAorCQkodWludHB0cl90KSZibDJfY2VydF91dWlkX3NwZWMsCisJCW9wZW5fZmlwCisJfSwKKwlbVFJVU1RFRF9LRVlfQ0VSVF9JRF0gPSB7CisJCSZmaXBfZGV2X2hhbmRsZSwKKwkJKHVpbnRwdHJfdCkmdHJ1c3RlZF9rZXlfY2VydF91dWlkX3NwZWMsCisJCW9wZW5fZmlwCisJfSwKKwlbQkwzMV9LRVlfQ0VSVF9JRF0gPSB7CisJCSZmaXBfZGV2X2hhbmRsZSwKKwkJKHVpbnRwdHJfdCkmYmwzMV9rZXlfY2VydF91dWlkX3NwZWMsCisJCW9wZW5fZmlwCisJfSwKKwlbQkwzMl9LRVlfQ0VSVF9JRF0gPSB7CisJCSZmaXBfZGV2X2hhbmRsZSwKKwkJKHVpbnRwdHJfdCkmYmwzMl9rZXlfY2VydF91dWlkX3NwZWMsCisJCW9wZW5fZmlwCisJfSwKKwlbQkwzM19LRVlfQ0VSVF9JRF0gPSB7CisJCSZmaXBfZGV2X2hhbmRsZSwKKwkJKHVpbnRwdHJfdCkmYmwzM19rZXlfY2VydF91dWlkX3NwZWMsCisJCW9wZW5fZmlwCisJfSwKKwlbQkwzMV9DRVJUX0lEXSA9IHsKKwkJJmZpcF9kZXZfaGFuZGxlLAorCQkodWludHB0cl90KSZibDMxX2NlcnRfdXVpZF9zcGVjLAorCQlvcGVuX2ZpcAorCX0sCisJW0JMMzJfQ0VSVF9JRF0gPSB7CisJCSZmaXBfZGV2X2hhbmRsZSwKKwkJKHVpbnRwdHJfdCkmYmwzMl9jZXJ0X3V1aWRfc3BlYywKKwkJb3Blbl9maXAKKwl9LAorCVtCTDMzX0NFUlRfSURdID0geworCQkmZmlwX2Rldl9oYW5kbGUsCisJCSh1aW50cHRyX3QpJmJsMzNfY2VydF91dWlkX3NwZWMsCisJCW9wZW5fZmlwCisJfSwKKyNlbmRpZiAvKiBUUlVTVEVEX0JPQVJEX0JPT1QgKi8KK307CisKK3N0YXRpYyBpbnQgb3Blbl9maXAoY29uc3QgdWludHB0cl90IHNwZWMpCit7CisJaW50IHJlc3VsdDsKKwl1aW50cHRyX3QgbG9jYWxfaW1hZ2VfaGFuZGxlOworCisJLyogU2VlIGlmIGEgRmlybXdhcmUgSW1hZ2UgUGFja2FnZSBpcyBhdmFpbGFibGUgKi8KKwlyZXN1bHQgPSBpb19kZXZfaW5pdChmaXBfZGV2X2hhbmRsZSwgKHVpbnRwdHJfdClGSVBfSU1BR0VfSUQpOworCWlmIChyZXN1bHQgPT0gMCkgeworCQlyZXN1bHQgPSBpb19vcGVuKGZpcF9kZXZfaGFuZGxlLCBzcGVjLCAmbG9jYWxfaW1hZ2VfaGFuZGxlKTsKKwkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQlWRVJCT1NFKCJVc2luZyBGSVBcbiIpOworCQkJaW9fY2xvc2UobG9jYWxfaW1hZ2VfaGFuZGxlKTsKKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IG9wZW5fbWVtbWFwKGNvbnN0IHVpbnRwdHJfdCBzcGVjKQoreworCWludCByZXN1bHQ7CisJdWludHB0cl90IGxvY2FsX2ltYWdlX2hhbmRsZTsKKworCXJlc3VsdCA9IGlvX2Rldl9pbml0KG1lbW1hcF9kZXZfaGFuZGxlLCAodWludHB0cl90KU5VTEwpOworCWlmIChyZXN1bHQgPT0gMCkgeworCQlyZXN1bHQgPSBpb19vcGVuKG1lbW1hcF9kZXZfaGFuZGxlLCBzcGVjLCAmbG9jYWxfaW1hZ2VfaGFuZGxlKTsKKwkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQlWRVJCT1NFKCJVc2luZyBNZW1tYXBcbiIpOworCQkJaW9fY2xvc2UobG9jYWxfaW1hZ2VfaGFuZGxlKTsKKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHBsYXRfcnBpM19pb19zZXR1cCh2b2lkKQoreworCWludCBpb19yZXN1bHQ7CisKKwlpb19yZXN1bHQgPSByZWdpc3Rlcl9pb19kZXZfZmlwKCZmaXBfZGV2X2Nvbik7CisJYXNzZXJ0KGlvX3Jlc3VsdCA9PSAwKTsKKworCWlvX3Jlc3VsdCA9IHJlZ2lzdGVyX2lvX2Rldl9tZW1tYXAoJm1lbW1hcF9kZXZfY29uKTsKKwlhc3NlcnQoaW9fcmVzdWx0ID09IDApOworCisJLyogT3BlbiBjb25uZWN0aW9ucyB0byBkZXZpY2VzIGFuZCBjYWNoZSB0aGUgaGFuZGxlcyAqLworCWlvX3Jlc3VsdCA9IGlvX2Rldl9vcGVuKGZpcF9kZXZfY29uLCAodWludHB0cl90KU5VTEwsCisJCQkJJmZpcF9kZXZfaGFuZGxlKTsKKwlhc3NlcnQoaW9fcmVzdWx0ID09IDApOworCisJaW9fcmVzdWx0ID0gaW9fZGV2X29wZW4obWVtbWFwX2Rldl9jb24sICh1aW50cHRyX3QpTlVMTCwKKwkJCQkmbWVtbWFwX2Rldl9oYW5kbGUpOworCWFzc2VydChpb19yZXN1bHQgPT0gMCk7CisKKwkvKiBJZ25vcmUgaW1wcm9iYWJsZSBlcnJvcnMgaW4gcmVsZWFzZSBidWlsZHMgKi8KKwkodm9pZClpb19yZXN1bHQ7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4gSU8gZGV2aWNlIGhhbmRsZSBhbmQgc3BlY2lmaWNhdGlvbiB3aGljaCBjYW4gYmUgdXNlZCB0byBhY2Nlc3MKKyAqIGFuIGltYWdlLiBVc2UgdGhpcyB0byBlbmZvcmNlIHBsYXRmb3JtIGxvYWQgcG9saWN5CisgKi8KK2ludCBwbGF0X2dldF9pbWFnZV9zb3VyY2UodW5zaWduZWQgaW50IGltYWdlX2lkLCB1aW50cHRyX3QgKmRldl9oYW5kbGUsCisJCQkgIHVpbnRwdHJfdCAqaW1hZ2Vfc3BlYykKK3sKKwlpbnQgcmVzdWx0OworCWNvbnN0IHN0cnVjdCBwbGF0X2lvX3BvbGljeSAqcG9saWN5OworCisJYXNzZXJ0KGltYWdlX2lkIDwgQVJSQVlfU0laRShwb2xpY2llcykpOworCisJcG9saWN5ID0gJnBvbGljaWVzW2ltYWdlX2lkXTsKKwlyZXN1bHQgPSBwb2xpY3ktPmNoZWNrKHBvbGljeS0+aW1hZ2Vfc3BlYyk7CisJaWYgKHJlc3VsdCA9PSAwKSB7CisJCSppbWFnZV9zcGVjID0gcG9saWN5LT5pbWFnZV9zcGVjOworCQkqZGV2X2hhbmRsZSA9ICoocG9saWN5LT5kZXZfaGFuZGxlKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvcGxhdC9ycGkzL3JwaTNfcG0uYyBiL3BsYXQvcnBpMy9ycGkzX3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwNjdmYgotLS0gL2Rldi9udWxsCisrKyBiL3BsYXQvcnBpMy9ycGkzX3BtLmMKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPGFyY2hfaGVscGVycy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGNvbnNvbGUuaD4KKyNpbmNsdWRlIDxkZWJ1Zy5oPgorI2luY2x1ZGUgPG1taW8uaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybV9kZWYuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHBzY2kuaD4KKworI2luY2x1ZGUgInJwaTNfaHcuaCIKKworLyoKKyAqIFRoZSBzZWN1cmUgZW50cnkgcG9pbnQgdG8gYmUgdXNlZCBvbiB3YXJtIHJlc2V0LgorICovCitzdGF0aWMgdWludHB0cl90IHNlY3VyZV9lbnRyeXBvaW50OworCisvKiBNYWtlIGNvbXBvc2l0ZSBwb3dlciBzdGF0ZSBwYXJhbWV0ZXIgdGlsbCBwb3dlciBsZXZlbCAwICovCisjaWYgUFNDSV9FWFRFTkRFRF9TVEFURV9JRAorCisjZGVmaW5lIHJwaTNfbWFrZV9wd3JzdGF0ZV9sdmwwKGx2bDBfc3RhdGUsIHB3cl9sdmwsIHR5cGUpIFwKKwkJKCgobHZsMF9zdGF0ZSkgPDwgUFNUQVRFX0lEX1NISUZUKSB8IFwKKwkJICgodHlwZSkgPDwgUFNUQVRFX1RZUEVfU0hJRlQpKQorCisjZWxzZQorCisjZGVmaW5lIHJwaTNfbWFrZV9wd3JzdGF0ZV9sdmwwKGx2bDBfc3RhdGUsIHB3cl9sdmwsIHR5cGUpIFwKKwkJKCgobHZsMF9zdGF0ZSkgPDwgUFNUQVRFX0lEX1NISUZUKSB8IFwKKwkJICgocHdyX2x2bCkgPDwgUFNUQVRFX1BXUl9MVkxfU0hJRlQpIHwgXAorCQkgKCh0eXBlKSA8PCBQU1RBVEVfVFlQRV9TSElGVCkpCisKKyNlbmRpZiAvKiBQU0NJX0VYVEVOREVEX1NUQVRFX0lEICovCisKKyNkZWZpbmUgcnBpM19tYWtlX3B3cnN0YXRlX2x2bDEobHZsMV9zdGF0ZSwgbHZsMF9zdGF0ZSwgcHdyX2x2bCwgdHlwZSkgXAorCQkoKChsdmwxX3N0YXRlKSA8PCBQTEFUX0xPQ0FMX1BTVEFURV9XSURUSCkgfCBcCisJCSBycGkzX21ha2VfcHdyc3RhdGVfbHZsMChsdmwwX3N0YXRlLCBwd3JfbHZsLCB0eXBlKSkKKworLyoKKyAqICBUaGUgdGFibGUgc3RvcmluZyB0aGUgdmFsaWQgaWRsZSBwb3dlciBzdGF0ZXMuIEVuc3VyZSB0aGF0IHRoZQorICogIGFycmF5IGVudHJpZXMgYXJlIHBvcHVsYXRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgb2Ygc3RhdGUtaWQgdG8KKyAqICBlbmFibGUgdXMgdG8gdXNlIGJpbmFyeSBzZWFyY2ggZHVyaW5nIHBvd2VyIHN0YXRlIHZhbGlkYXRpb24uCisgKiAgVGhlIHRhYmxlIG11c3QgYmUgdGVybWluYXRlZCBieSBhIE5VTEwgZW50cnkuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcnBpM19wbV9pZGxlX3N0YXRlc1tdID0geworCS8qIFN0YXRlLWlkIC0gMHgwMSAqLworCXJwaTNfbWFrZV9wd3JzdGF0ZV9sdmwxKFBMQVRfTE9DQUxfU1RBVEVfUlVOLCBQTEFUX0xPQ0FMX1NUQVRFX1JFVCwKKwkJCQlNUElEUl9BRkZMVkwwLCBQU1RBVEVfVFlQRV9TVEFOREJZKSwKKwkvKiBTdGF0ZS1pZCAtIDB4MDIgKi8KKwlycGkzX21ha2VfcHdyc3RhdGVfbHZsMShQTEFUX0xPQ0FMX1NUQVRFX1JVTiwgUExBVF9MT0NBTF9TVEFURV9PRkYsCisJCQkJTVBJRFJfQUZGTFZMMCwgUFNUQVRFX1RZUEVfUE9XRVJET1dOKSwKKwkvKiBTdGF0ZS1pZCAtIDB4MjIgKi8KKwlycGkzX21ha2VfcHdyc3RhdGVfbHZsMShQTEFUX0xPQ0FMX1NUQVRFX09GRiwgUExBVF9MT0NBTF9TVEFURV9PRkYsCisJCQkJTVBJRFJfQUZGTFZMMSwgUFNUQVRFX1RZUEVfUE9XRVJET1dOKSwKKwkwLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBsYXRmb3JtIGhhbmRsZXIgY2FsbGVkIHRvIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgcG93ZXIgc3RhdGUKKyAqIHBhcmFtZXRlci4gVGhlIHBvd2VyIHN0YXRlIHBhcmFtZXRlciBoYXMgdG8gYmUgYSBjb21wb3NpdGUgcG93ZXIgc3RhdGUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBycGkzX3ZhbGlkYXRlX3Bvd2VyX3N0YXRlKHVuc2lnbmVkIGludCBwb3dlcl9zdGF0ZSwKKwkJCQkgICAgIHBzY2lfcG93ZXJfc3RhdGVfdCAqcmVxX3N0YXRlKQoreworCXVuc2lnbmVkIGludCBzdGF0ZV9pZDsKKwlpbnQgaTsKKworCWFzc2VydChyZXFfc3RhdGUgIT0gMCk7CisKKwkvKgorCSAqICBDdXJyZW50bHkgd2UgYXJlIHVzaW5nIGEgbGluZWFyIHNlYXJjaCBmb3IgZmluZGluZyB0aGUgbWF0Y2hpbmcKKwkgKiAgZW50cnkgaW4gdGhlIGlkbGUgcG93ZXIgc3RhdGUgYXJyYXkuIFRoaXMgY2FuIGJlIG1hZGUgYSBiaW5hcnkKKwkgKiAgc2VhcmNoIGlmIHRoZSBudW1iZXIgb2YgZW50cmllcyBqdXN0aWZ5IHRoZSBhZGRpdGlvbmFsIGNvbXBsZXhpdHkuCisJICovCisJZm9yIChpID0gMDsgcnBpM19wbV9pZGxlX3N0YXRlc1tpXSAhPSAwOyBpKyspIHsKKwkJaWYgKHBvd2VyX3N0YXRlID09IHJwaTNfcG1faWRsZV9zdGF0ZXNbaV0pIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogUmV0dXJuIGVycm9yIGlmIGVudHJ5IG5vdCBmb3VuZCBpbiB0aGUgaWRsZSBzdGF0ZSBhcnJheSAqLworCWlmICghcnBpM19wbV9pZGxlX3N0YXRlc1tpXSkgeworCQlyZXR1cm4gUFNDSV9FX0lOVkFMSURfUEFSQU1TOworCX0KKworCWkgPSAwOworCXN0YXRlX2lkID0gcHNjaV9nZXRfcHN0YXRlX2lkKHBvd2VyX3N0YXRlKTsKKworCS8qIFBhcnNlIHRoZSBTdGF0ZSBJRCBhbmQgcG9wdWxhdGUgdGhlIHN0YXRlIGluZm8gcGFyYW1ldGVyICovCisJd2hpbGUgKHN0YXRlX2lkKSB7CisJCXJlcV9zdGF0ZS0+cHdyX2RvbWFpbl9zdGF0ZVtpKytdID0gc3RhdGVfaWQgJgorCQkJCQkJUExBVF9MT0NBTF9QU1RBVEVfTUFTSzsKKwkJc3RhdGVfaWQgPj49IFBMQVRfTE9DQUxfUFNUQVRFX1dJRFRIOworCX0KKworCXJldHVybiBQU0NJX0VfU1VDQ0VTUzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBsYXRmb3JtIGhhbmRsZXIgY2FsbGVkIHdoZW4gYSBDUFUgaXMgYWJvdXQgdG8gZW50ZXIgc3RhbmRieS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBycGkzX2NwdV9zdGFuZGJ5KHBsYXRfbG9jYWxfc3RhdGVfdCBjcHVfc3RhdGUpCit7CisJYXNzZXJ0KGNwdV9zdGF0ZSA9PSBQTEFUX0xPQ0FMX1NUQVRFX1JFVCk7CisKKwkvKgorCSAqIEVudGVyIHN0YW5kYnkgc3RhdGUuCisJICogZHNiIGlzIGdvb2QgcHJhY3RpY2UgYmVmb3JlIHVzaW5nIHdmaSB0byBlbnRlciBsb3cgcG93ZXIgc3RhdGVzCisJICovCisJZHNiKCk7CisJd2ZpKCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQbGF0Zm9ybSBoYW5kbGVyIGNhbGxlZCB3aGVuIGEgcG93ZXIgZG9tYWluIGlzIGFib3V0IHRvIGJlIHR1cm5lZCBvbi4gVGhlCisgKiBtcGlkciBkZXRlcm1pbmVzIHRoZSBDUFUgdG8gYmUgdHVybmVkIG9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcnBpM19wd3JfZG9tYWluX29uKHVfcmVnaXN0ZXJfdCBtcGlkcikKK3sKKwlpbnQgcmMgPSBQU0NJX0VfU1VDQ0VTUzsKKwl1bnNpZ25lZCBpbnQgcG9zID0gcGxhdF9jb3JlX3Bvc19ieV9tcGlkcihtcGlkcik7CisJdWludDY0X3QgKmhvbGRfYmFzZSA9ICh1aW50NjRfdCAqKVBMQVRfUlBJM19UTV9IT0xEX0JBU0U7CisKKwlhc3NlcnQocG9zIDwgUExBVEZPUk1fQ09SRV9DT1VOVCk7CisKKwlob2xkX2Jhc2VbcG9zXSA9IFBMQVRfUlBJM19UTV9IT0xEX1NUQVRFX0dPOworCisJLyogTWFrZSBzdXJlIHRoYXQgdGhlIHdyaXRlIGhhcyBjb21wbGV0ZWQgKi8KKwlkc2IoKTsKKwlpc2IoKTsKKworCXNldigpOworCisJcmV0dXJuIHJjOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGxhdGZvcm0gaGFuZGxlciBjYWxsZWQgd2hlbiBhIHBvd2VyIGRvbWFpbiBoYXMganVzdCBiZWVuIHBvd2VyZWQgb24gYWZ0ZXIKKyAqIGJlaW5nIHR1cm5lZCBvZmYgZWFybGllci4gVGhlIHRhcmdldF9zdGF0ZSBlbmNvZGVzIHRoZSBsb3cgcG93ZXIgc3RhdGUgdGhhdAorICogZWFjaCBsZXZlbCBoYXMgd29rZW4gdXAgZnJvbS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHJwaTNfcHdyX2RvbWFpbl9vbl9maW5pc2goY29uc3QgcHNjaV9wb3dlcl9zdGF0ZV90ICp0YXJnZXRfc3RhdGUpCit7CisJYXNzZXJ0KHRhcmdldF9zdGF0ZS0+cHdyX2RvbWFpbl9zdGF0ZVtNUElEUl9BRkZMVkwwXSA9PQorCQkJCQlQTEFUX0xPQ0FMX1NUQVRFX09GRik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQbGF0Zm9ybSBoYW5kbGVyIHRvIHJlYm9vdCB0aGUgc3lzdGVtCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRVNFVF9USU1FT1VUCTEwCisKK3N0YXRpYyB2b2lkIF9fZGVhZDIgcnBpM19zeXN0ZW1fcmVzZXQodm9pZCkKK3sKKwkvKiBTZXR1cCB3YXRjaGRvZyBmb3IgcmVzZXQgKi8KKworCXN0YXRpYyBjb25zdCB1aW50cHRyX3QgYmFzZSA9IFJQSTNfUE1fQkFTRTsKKwl1aW50MzJfdCByc3RjOworCisJSU5GTygicnBpMzogUFNDSSBTeXN0ZW0gUmVzZXQ6IGludm9raW5nIHdhdGNoZG9nIHJlc2V0XG4iKTsKKworCWNvbnNvbGVfZmx1c2goKTsKKworCXJzdGMgPSBtbWlvX3JlYWRfMzIoYmFzZSArIFJQSTNfUE1fUlNUQ19PRkZTRVQpOworCXJzdGMgJj0gflJQSTNfUE1fUlNUQ19XUkNGR19NQVNLOworCXJzdGMgfD0gUlBJM19QTV9SU1RDX1dSQ0ZHX0ZVTExfUkVTRVQ7CisKKwlkbWJzdCgpOworCisJLyoKKwkgKiBXYXRjaGRvZyB0aW1lciA9IFRpbWVyIGNsb2NrIC8gMTYKKwkgKiBQYXNzd29yZCAoMzE6MTYpIHwgVmFsdWUgKDExOjApCisJICovCisJbW1pb193cml0ZV8zMihiYXNlICsgUlBJM19QTV9XRE9HX09GRlNFVCwKKwkJICAgICAgUlBJM19QTV9QQVNTV09SRCB8IFJFU0VUX1RJTUVPVVQpOworCW1taW9fd3JpdGVfMzIoYmFzZSArIFJQSTNfUE1fUlNUQ19PRkZTRVQsCisJCSAgICAgIFJQSTNfUE1fUEFTU1dPUkQgfCByc3RjKTsKKworCWZvciAoOzspIHsKKwkJd2ZpKCk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGxhdGZvcm0gaGFuZGxlcnMgYW5kIHNldHVwIGZ1bmN0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBjb25zdCBwbGF0X3BzY2lfb3BzX3QgcGxhdF9ycGkzX3BzY2lfcG1fb3BzID0geworCS5jcHVfc3RhbmRieSA9IHJwaTNfY3B1X3N0YW5kYnksCisJLnB3cl9kb21haW5fb24gPSBycGkzX3B3cl9kb21haW5fb24sCisJLnB3cl9kb21haW5fb25fZmluaXNoID0gcnBpM19wd3JfZG9tYWluX29uX2ZpbmlzaCwKKwkuc3lzdGVtX3Jlc2V0ID0gcnBpM19zeXN0ZW1fcmVzZXQsCisJLnZhbGlkYXRlX3Bvd2VyX3N0YXRlID0gcnBpM192YWxpZGF0ZV9wb3dlcl9zdGF0ZSwKK307CisKK2ludCBwbGF0X3NldHVwX3BzY2lfb3BzKHVpbnRwdHJfdCBzZWNfZW50cnlwb2ludCwKKwkJCWNvbnN0IHBsYXRfcHNjaV9vcHNfdCAqKnBzY2lfb3BzKQoreworCXVpbnRwdHJfdCAqbWFpbGJveCA9ICh2b2lkICopUExBVF9SUEkzX1RSVVNURURfTUFJTEJPWF9CQVNFOworCisJKm1haWxib3ggPSBzZWNfZW50cnlwb2ludDsKKwlzZWN1cmVfZW50cnlwb2ludCA9ICh1aW50cHRyX3Qpc2VjX2VudHJ5cG9pbnQ7CisJKnBzY2lfb3BzID0gJnBsYXRfcnBpM19wc2NpX3BtX29wczsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcGxhdC9ycGkzL3JwaTNfcHJpdmF0ZS5oIGIvcGxhdC9ycGkzL3JwaTNfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYzQwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0L3JwaTMvcnBpM19wcml2YXRlLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIF9fUlBJM19QUklWQVRFX0hfXworI2RlZmluZSBfX1JQSTNfUFJJVkFURV9IX18KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb24gYW5kIHZhcmlhYmxlIHByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFV0aWxpdHkgZnVuY3Rpb25zICovCit2b2lkIHJwaTNfc2V0dXBfcGFnZV90YWJsZXModWludHB0cl90IHRvdGFsX2Jhc2UsIHNpemVfdCB0b3RhbF9zaXplLAorCQkJICAgIHVpbnRwdHJfdCBjb2RlX3N0YXJ0LCB1aW50cHRyX3QgY29kZV9saW1pdCwKKwkJCSAgICB1aW50cHRyX3Qgcm9kYXRhX3N0YXJ0LCB1aW50cHRyX3Qgcm9kYXRhX2xpbWl0CisjaWYgVVNFX0NPSEVSRU5UX01FTQorCQkJICAgICwgdWludHB0cl90IGNvaF9zdGFydCwgdWludHB0cl90IGNvaF9saW1pdAorI2VuZGlmCisJCQkgICAgKTsKKworLyogT3B0aW9uYWwgZnVuY3Rpb25zIHJlcXVpcmVkIGluIHRoZSBSYXNwYmVycnkgUGkgMyBwb3J0ICovCit1bnNpZ25lZCBpbnQgcGxhdF9ycGkzX2NhbGNfY29yZV9wb3ModV9yZWdpc3Rlcl90IG1waWRyKTsKKworLyogQkwyIHV0aWxpdHkgZnVuY3Rpb25zICovCit1aW50MzJfdCBycGkzX2dldF9zcHNyX2Zvcl9ibDMyX2VudHJ5KHZvaWQpOwordWludDMyX3QgcnBpM19nZXRfc3Bzcl9mb3JfYmwzM19lbnRyeSh2b2lkKTsKKworLyogSU8gc3RvcmFnZSB1dGlsaXR5IGZ1bmN0aW9ucyAqLwordm9pZCBwbGF0X3JwaTNfaW9fc2V0dXAodm9pZCk7CisKKyNlbmRpZiAvKl9fUlBJM19QUklWQVRFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdC9ycGkzL3JwaTNfdG9wb2xvZ3kuYyBiL3BsYXQvcnBpMy9ycGkzX3RvcG9sb2d5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUwM2VjMwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXQvcnBpMy9ycGkzX3RvcG9sb2d5LmMKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaW5jbHVkZSA8YXJjaC5oPgorI2luY2x1ZGUgPHBsYXRmb3JtX2RlZi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSAicnBpM19wcml2YXRlLmgiCisKKy8qIFRoZSBwb3dlciBkb21haW4gdHJlZSBkZXNjcmlwdG9yICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBwb3dlcl9kb21haW5fdHJlZV9kZXNjW10gPSB7CisJLyogTnVtYmVyIG9mIHJvb3Qgbm9kZXMgKi8KKwlQTEFURk9STV9DTFVTVEVSX0NPVU5ULAorCS8qIE51bWJlciBvZiBjaGlsZHJlbiBmb3IgdGhlIGZpcnN0IG5vZGUgKi8KKwlQTEFURk9STV9DTFVTVEVSMF9DT1JFX0NPVU5ULAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgQVJNIGRlZmF1bHQgdG9wb2xvZ3kgdHJlZSBpbmZvcm1hdGlvbi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitjb25zdCB1bnNpZ25lZCBjaGFyICpwbGF0X2dldF9wb3dlcl9kb21haW5fdHJlZV9kZXNjKHZvaWQpCit7CisJcmV0dXJuIHBvd2VyX2RvbWFpbl90cmVlX2Rlc2M7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgYSBwYXJ0IG9mIHRoZSBjcml0aWNhbCBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgcHNjaQorICogZ2VuZXJpYyBsYXllciBhbmQgdGhlIHBsYXRmb3JtIHRoYXQgYWxsb3dzIHRoZSBmb3JtZXIgdG8gcXVlcnkgdGhlIHBsYXRmb3JtCisgKiB0byBjb252ZXJ0IGFuIE1QSURSIHRvIGEgdW5pcXVlIGxpbmVhciBpbmRleC4gQW4gZXJyb3IgY29kZSAoLTEpIGlzIHJldHVybmVkCisgKiBpbiBjYXNlIHRoZSBNUElEUiBpcyBpbnZhbGlkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBwbGF0X2NvcmVfcG9zX2J5X21waWRyKHVfcmVnaXN0ZXJfdCBtcGlkcikKK3sKKwl1bnNpZ25lZCBpbnQgY2x1c3Rlcl9pZCwgY3B1X2lkOworCisJbXBpZHIgJj0gTVBJRFJfQUZGSU5JVFlfTUFTSzsKKwlpZiAobXBpZHIgJiB+KE1QSURSX0NMVVNURVJfTUFTSyB8IE1QSURSX0NQVV9NQVNLKSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJY2x1c3Rlcl9pZCA9IChtcGlkciA+PiBNUElEUl9BRkYxX1NISUZUKSAmIE1QSURSX0FGRkxWTF9NQVNLOworCWNwdV9pZCA9IChtcGlkciA+PiBNUElEUl9BRkYwX1NISUZUKSAmIE1QSURSX0FGRkxWTF9NQVNLOworCisJaWYgKGNsdXN0ZXJfaWQgPj0gUExBVEZPUk1fQ0xVU1RFUl9DT1VOVCkgeworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGNwdV9pZCA+PSBQTEFURk9STV9NQVhfQ1BVU19QRVJfQ0xVU1RFUikgeworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIHBsYXRfcnBpM19jYWxjX2NvcmVfcG9zKG1waWRyKTsKK30KZGlmZiAtLWdpdCBhL3BsYXQvc29jaW9uZXh0L3VuaXBoaWVyL3BsYXRmb3JtLm1rIGIvcGxhdC9zb2Npb25leHQvdW5pcGhpZXIvcGxhdGZvcm0ubWsKaW5kZXggNzI3OTJmOC4uM2M3ODA1NCAxMDA2NDQKLS0tIGEvcGxhdC9zb2Npb25leHQvdW5pcGhpZXIvcGxhdGZvcm0ubWsKKysrIGIvcGxhdC9zb2Npb25leHQvdW5pcGhpZXIvcGxhdGZvcm0ubWsKQEAgLTEwLDYgKzEwLDcgQEAKIG92ZXJyaWRlIExPQURfSU1BR0VfVjIJCTo9IDEKIG92ZXJyaWRlIFVTRV9DT0hFUkVOVF9NRU0JOj0gMQogb3ZlcnJpZGUgVVNFX1RCQlJfREVGUwkJOj0gMQorb3ZlcnJpZGUgRU5BQkxFX1NWRV9GT1JfTlMJOj0gMAogCiAjIENvcnRleC1BNTMgcmV2aXNpb24gcjBwNC01MXJlbDAKICMgbmVlZGVkIGZvciBMRDIwLCB1bm5lZWRlZCBmb3IgTEQxMSwgUFhzMyAobm8gQUNFKQpAQCAtMjEsNiArMjIsOSBAQAogJChldmFsICQoY2FsbCBhZGRfZGVmaW5lLFVOSVBISUVSX0xPQURfQkwzMikpCiBlbmRpZgogCisjIExpYnJhcmllcworaW5jbHVkZSBsaWIveGxhdF90YWJsZXNfdjIveGxhdF90YWJsZXMubWsKKwogUExBVF9QQVRICQk6PQlwbGF0L3NvY2lvbmV4dC91bmlwaGllcgogUExBVF9JTkNMVURFUwkJOj0JLUkkKFBMQVRfUEFUSCkvaW5jbHVkZQogCkBAIC0zNywxMiArNDEsMTEgQEAKIAogIyBjb21tb24gc291cmNlcyBmb3IgQkwxLCBCTDIsIEJMMzEKIFBMQVRfQkxfQ09NTU9OX1NPVVJDRVMJKz0JZHJpdmVycy9jb25zb2xlL2FhcmNoNjQvY29uc29sZS5TCVwKLQkJCQlsaWIveGxhdF90YWJsZXNfdjIvYWFyY2g2NC94bGF0X3RhYmxlc19hcmNoLmMgXAotCQkJCWxpYi94bGF0X3RhYmxlc192Mi94bGF0X3RhYmxlc19pbnRlcm5hbC5jIFwKIAkJCQkkKFBMQVRfUEFUSCkvdW5pcGhpZXJfY29uc29sZS5TCQlcCiAJCQkJJChQTEFUX1BBVEgpL3VuaXBoaWVyX2hlbHBlcnMuUwkJXAogCQkJCSQoUExBVF9QQVRIKS91bmlwaGllcl9zb2NfaW5mby5jCVwKLQkJCQkkKFBMQVRfUEFUSCkvdW5pcGhpZXJfeGxhdF9zZXR1cC5jCisJCQkJJChQTEFUX1BBVEgpL3VuaXBoaWVyX3hsYXRfc2V0dXAuYwlcCisJCQkJJHtYTEFUX1RBQkxFU19MSUJfU1JDU30KIAogQkwxX1NPVVJDRVMJCSs9CWxpYi9jcHVzL2FhcmNoNjQvY29ydGV4X2E1My5TCQlcCiAJCQkJbGliL2NwdXMvYWFyY2g2NC9jb3J0ZXhfYTcyLlMJCVwKQEAgLTk5LDcgKzEwMiw3IEBACiAkKEJVSUxEX1BMQVQpL2JsMi91bmlwaGllcl9yb3Rway5vOiAkKFJPVFBLX0hBU0gpCiAKIGNlcnRpZmljYXRlczogJChST1RfS0VZKQotJChST1RfS0VZKToKKyQoUk9UX0tFWSk6IHwgJChCVUlMRF9QTEFUKQogCUBlY2hvICIgIE9QRU5TU0wgJEAiCiAJJChRKW9wZW5zc2wgZ2VucnNhIDIwNDggPiAkQCAyPi9kZXYvbnVsbAogCmRpZmYgLS1naXQgYS9wbGF0L3NvY2lvbmV4dC91bmlwaGllci91bmlwaGllcl9naWN2My5jIGIvcGxhdC9zb2Npb25leHQvdW5pcGhpZXIvdW5pcGhpZXJfZ2ljdjMuYwppbmRleCAwNWE0ZTM1Li45M2JjNzNhIDEwMDY0NAotLS0gYS9wbGF0L3NvY2lvbmV4dC91bmlwaGllci91bmlwaGllcl9naWN2My5jCisrKyBiL3BsYXQvc29jaW9uZXh0L3VuaXBoaWVyL3VuaXBoaWVyX2dpY3YzLmMKQEAgLTYsNiArNiw3IEBACiAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxnaWN2My5oPgorI2luY2x1ZGUgPGludGVycnVwdF9wcm9wcy5oPgogI2luY2x1ZGUgPHBsYXRmb3JtLmg+CiAjaW5jbHVkZSA8cGxhdGZvcm1fZGVmLmg+CiAKQEAgLTEzLDE5ICsxNCwzOSBAQAogCiBzdGF0aWMgdWludHB0cl90IHVuaXBoaWVyX3JkaXN0aWZfYmFzZV9hZGRyc1tQTEFURk9STV9DT1JFX0NPVU5UXTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBnMF9pbnRlcnJ1cHRfYXJyYXlbXSA9IHsKLQk4LAkvKiBTR0kwICovCi0JMTQsCS8qIFNHSTYgKi8KLX07CitzdGF0aWMgY29uc3QgaW50ZXJydXB0X3Byb3BfdCB1bmlwaGllcl9pbnRlcnJ1cHRfcHJvcHNbXSA9IHsKKwkvKiBHMCBpbnRlcnJ1cHRzICovCiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZzFzX2ludGVycnVwdF9hcnJheVtdID0gewotCTI5LAkvKiBUaW1lciAqLwotCTksCS8qIFNHSTEgKi8KLQkxMCwJLyogU0dJMiAqLwotCTExLAkvKiBTR0kzICovCi0JMTIsCS8qIFNHSTQgKi8KLQkxMywJLyogU0dJNSAqLwotCTE1LAkvKiBTR0k3ICovCisJLyogU0dJMCAqLworCUlOVFJfUFJPUF9ERVNDKDgsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgSU5UUl9HUk9VUDAsCisJCQlHSUNfSU5UUl9DRkdfRURHRSksCisJLyogU0dJNiAqLworCUlOVFJfUFJPUF9ERVNDKDE0LCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIElOVFJfR1JPVVAwLAorCQkJR0lDX0lOVFJfQ0ZHX0VER0UpLAorCisJLyogRzFTIGludGVycnVwdHMgKi8KKworCS8qIFRpbWVyICovCisJSU5UUl9QUk9QX0RFU0MoMjksIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgSU5UUl9HUk9VUDFTLAorCQkJR0lDX0lOVFJfQ0ZHX0xFVkVMKSwKKwkvKiBTR0kxICovCisJSU5UUl9QUk9QX0RFU0MoOSwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBJTlRSX0dST1VQMVMsCisJCQlHSUNfSU5UUl9DRkdfRURHRSksCisJLyogU0dJMiAqLworCUlOVFJfUFJPUF9ERVNDKDEwLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIElOVFJfR1JPVVAxUywKKwkJCUdJQ19JTlRSX0NGR19FREdFKSwKKwkvKiBTR0kzICovCisJSU5UUl9QUk9QX0RFU0MoMTEsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgSU5UUl9HUk9VUDFTLAorCQkJR0lDX0lOVFJfQ0ZHX0VER0UpLAorCS8qIFNHSTQgKi8KKwlJTlRSX1BST1BfREVTQygxMiwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBJTlRSX0dST1VQMVMsCisJCQlHSUNfSU5UUl9DRkdfRURHRSksCisJLyogU0dJNSAqLworCUlOVFJfUFJPUF9ERVNDKDEzLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIElOVFJfR1JPVVAxUywKKwkJCUdJQ19JTlRSX0NGR19FREdFKSwKKwkvKiBTR0k3ICovCisJSU5UUl9QUk9QX0RFU0MoMTUsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgSU5UUl9HUk9VUDFTLAorCQkJR0lDX0lOVFJfQ0ZHX0VER0UpCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHVuaXBoaWVyX21waWRyX3RvX2NvcmVfcG9zKHVfcmVnaXN0ZXJfdCBtcGlkcikKQEAgLTM3LDEwICs1OCw4IEBACiAJW1VOSVBISUVSX1NPQ19MRDExXSA9IHsKIAkJLmdpY2RfYmFzZSA9IDB4NWZlMDAwMDAsCiAJCS5naWNyX2Jhc2UgPSAweDVmZTQwMDAwLAotCQkuZzBfaW50ZXJydXB0X251bSA9IEFSUkFZX1NJWkUoZzBfaW50ZXJydXB0X2FycmF5KSwKLQkJLmcxc19pbnRlcnJ1cHRfbnVtID0gQVJSQVlfU0laRShnMXNfaW50ZXJydXB0X2FycmF5KSwKLQkJLmcwX2ludGVycnVwdF9hcnJheSA9IGcwX2ludGVycnVwdF9hcnJheSwKLQkJLmcxc19pbnRlcnJ1cHRfYXJyYXkgPSBnMXNfaW50ZXJydXB0X2FycmF5LAorCQkuaW50ZXJydXB0X3Byb3BzID0gdW5pcGhpZXJfaW50ZXJydXB0X3Byb3BzLAorCQkuaW50ZXJydXB0X3Byb3BzX251bSA9IEFSUkFZX1NJWkUodW5pcGhpZXJfaW50ZXJydXB0X3Byb3BzKSwKIAkJLnJkaXN0aWZfbnVtID0gUExBVEZPUk1fQ09SRV9DT1VOVCwKIAkJLnJkaXN0aWZfYmFzZV9hZGRycyA9IHVuaXBoaWVyX3JkaXN0aWZfYmFzZV9hZGRycywKIAkJLm1waWRyX3RvX2NvcmVfcG9zID0gdW5pcGhpZXJfbXBpZHJfdG9fY29yZV9wb3MsCkBAIC00OCwxMCArNjcsOCBAQAogCVtVTklQSElFUl9TT0NfTEQyMF0gPSB7CiAJCS5naWNkX2Jhc2UgPSAweDVmZTAwMDAwLAogCQkuZ2ljcl9iYXNlID0gMHg1ZmU4MDAwMCwKLQkJLmcwX2ludGVycnVwdF9udW0gPSBBUlJBWV9TSVpFKGcwX2ludGVycnVwdF9hcnJheSksCi0JCS5nMXNfaW50ZXJydXB0X251bSA9IEFSUkFZX1NJWkUoZzFzX2ludGVycnVwdF9hcnJheSksCi0JCS5nMF9pbnRlcnJ1cHRfYXJyYXkgPSBnMF9pbnRlcnJ1cHRfYXJyYXksCi0JCS5nMXNfaW50ZXJydXB0X2FycmF5ID0gZzFzX2ludGVycnVwdF9hcnJheSwKKwkJLmludGVycnVwdF9wcm9wcyA9IHVuaXBoaWVyX2ludGVycnVwdF9wcm9wcywKKwkJLmludGVycnVwdF9wcm9wc19udW0gPSBBUlJBWV9TSVpFKHVuaXBoaWVyX2ludGVycnVwdF9wcm9wcyksCiAJCS5yZGlzdGlmX251bSA9IFBMQVRGT1JNX0NPUkVfQ09VTlQsCiAJCS5yZGlzdGlmX2Jhc2VfYWRkcnMgPSB1bmlwaGllcl9yZGlzdGlmX2Jhc2VfYWRkcnMsCiAJCS5tcGlkcl90b19jb3JlX3BvcyA9IHVuaXBoaWVyX21waWRyX3RvX2NvcmVfcG9zLApAQCAtNTksMTAgKzc2LDggQEAKIAlbVU5JUEhJRVJfU09DX1BYUzNdID0gewogCQkuZ2ljZF9iYXNlID0gMHg1ZmUwMDAwMCwKIAkJLmdpY3JfYmFzZSA9IDB4NWZlODAwMDAsCi0JCS5nMF9pbnRlcnJ1cHRfbnVtID0gQVJSQVlfU0laRShnMF9pbnRlcnJ1cHRfYXJyYXkpLAotCQkuZzFzX2ludGVycnVwdF9udW0gPSBBUlJBWV9TSVpFKGcxc19pbnRlcnJ1cHRfYXJyYXkpLAotCQkuZzBfaW50ZXJydXB0X2FycmF5ID0gZzBfaW50ZXJydXB0X2FycmF5LAotCQkuZzFzX2ludGVycnVwdF9hcnJheSA9IGcxc19pbnRlcnJ1cHRfYXJyYXksCisJCS5pbnRlcnJ1cHRfcHJvcHMgPSB1bmlwaGllcl9pbnRlcnJ1cHRfcHJvcHMsCisJCS5pbnRlcnJ1cHRfcHJvcHNfbnVtID0gQVJSQVlfU0laRSh1bmlwaGllcl9pbnRlcnJ1cHRfcHJvcHMpLAogCQkucmRpc3RpZl9udW0gPSBQTEFURk9STV9DT1JFX0NPVU5ULAogCQkucmRpc3RpZl9iYXNlX2FkZHJzID0gdW5pcGhpZXJfcmRpc3RpZl9iYXNlX2FkZHJzLAogCQkubXBpZHJfdG9fY29yZV9wb3MgPSB1bmlwaGllcl9tcGlkcl90b19jb3JlX3BvcywKZGlmZiAtLWdpdCBhL3BsYXQvc29jaW9uZXh0L3VuaXBoaWVyL3VuaXBoaWVyX3JvdHBrLlMgYi9wbGF0L3NvY2lvbmV4dC91bmlwaGllci91bmlwaGllcl9yb3Rway5TCmluZGV4IDAwNDVhMzQuLjIxYzQ0YjYgMTAwNjQ0Ci0tLSBhL3BsYXQvc29jaW9uZXh0L3VuaXBoaWVyL3VuaXBoaWVyX3JvdHBrLlMKKysrIGIvcGxhdC9zb2Npb25leHQvdW5pcGhpZXIvdW5pcGhpZXJfcm90cGsuUwpAQCAtNiw2ICs2LDcgQEAKIAogCS5nbG9iYWwgdW5pcGhpZXJfcm90cGtfaGFzaAogCS5nbG9iYWwgdW5pcGhpZXJfcm90cGtfaGFzaF9lbmQKKwkuc2VjdGlvbiAucm9kYXRhLnVuaXBoaWVyX3JvdHBrX2hhc2gsICJhIgogdW5pcGhpZXJfcm90cGtfaGFzaDoKIAkvKiBERVIgaGVhZGVyICovCiAJLmJ5dGUgMHgzMCwgMHgzMSwgMHgzMCwgMHgwRCwgMHgwNiwgMHgwOSwgMHg2MCwgMHg4NiwgMHg0OApkaWZmIC0tZ2l0IGEvcGxhdC94aWxpbngvenlucW1wL2luY2x1ZGUvcGxhdGZvcm1fZGVmLmggYi9wbGF0L3hpbGlueC96eW5xbXAvaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaAppbmRleCBhMDliNWM2Li41ZGQ4ZDg2IDEwMDY0NAotLS0gYS9wbGF0L3hpbGlueC96eW5xbXAvaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaAorKysgYi9wbGF0L3hpbGlueC96eW5xbXAvaW5jbHVkZS9wbGF0Zm9ybV9kZWYuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiwgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAqLwpAQCAtOCw2ICs4LDggQEAKICNkZWZpbmUgX19QTEFURk9STV9ERUZfSF9fCiAKICNpbmNsdWRlIDxhcmNoLmg+CisjaW5jbHVkZSA8Z2ljX2NvbW1vbi5oPgorI2luY2x1ZGUgPGludGVycnVwdF9wcm9wcy5oPgogI2luY2x1ZGUgIi4uL3p5bnFtcF9kZWYuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTg1LDIwICs4NywzMCBAQAogI2RlZmluZSBQTEFUX0FSTV9HSUNEX0JBU0UJQkFTRV9HSUNEX0JBU0UKICNkZWZpbmUgUExBVF9BUk1fR0lDQ19CQVNFCUJBU0VfR0lDQ19CQVNFCiAvKgotICogRGVmaW5lIGEgbGlzdCBvZiBHcm91cCAxIFNlY3VyZSBhbmQgR3JvdXAgMCBpbnRlcnJ1cHRzIGFzIHBlciBHSUN2MworICogRGVmaW5lIHByb3BlcnRpZXMgb2YgR3JvdXAgMSBTZWN1cmUgYW5kIEdyb3VwIDAgaW50ZXJydXB0cyBhcyBwZXIgR0lDdjMKICAqIHRlcm1pbm9sb2d5LiBPbiBhIEdJQ3YyIHN5c3RlbSBvciBtb2RlLCB0aGUgbGlzdHMgd2lsbCBiZSBtZXJnZWQgYW5kIHRyZWF0ZWQKICAqIGFzIEdyb3VwIDAgaW50ZXJydXB0cy4KICAqLwotI2RlZmluZSBQTEFUX0FSTV9HMVNfSVJRUwlBUk1fSVJRX1NFQ19QSFlfVElNRVIsCVwKLQkJCQlBUk1fSVJRX1NFQ19TR0lfMCwJXAotCQkJCUFSTV9JUlFfU0VDX1NHSV8xLAlcCi0JCQkJQVJNX0lSUV9TRUNfU0dJXzIsCVwKLQkJCQlBUk1fSVJRX1NFQ19TR0lfMywJXAotCQkJCUFSTV9JUlFfU0VDX1NHSV80LAlcCi0JCQkJQVJNX0lSUV9TRUNfU0dJXzUsCVwKLQkJCQlBUk1fSVJRX1NFQ19TR0lfNiwJXAotCQkJCUFSTV9JUlFfU0VDX1NHSV83CisjZGVmaW5lIFBMQVRfQVJNX0cxU19JUlFfUFJPUFMoZ3JwKSBcCisJSU5UUl9QUk9QX0RFU0MoQVJNX0lSUV9TRUNfUEhZX1RJTUVSLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0xFVkVMKSwgXAorCUlOVFJfUFJPUF9ERVNDKEFSTV9JUlFfU0VDX1NHSV8wLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0VER0UpLCBcCisJSU5UUl9QUk9QX0RFU0MoQVJNX0lSUV9TRUNfU0dJXzEsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfRURHRSksIFwKKwlJTlRSX1BST1BfREVTQyhBUk1fSVJRX1NFQ19TR0lfMiwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19FREdFKSwgXAorCUlOVFJfUFJPUF9ERVNDKEFSTV9JUlFfU0VDX1NHSV8zLCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0VER0UpLCBcCisJSU5UUl9QUk9QX0RFU0MoQVJNX0lSUV9TRUNfU0dJXzQsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfRURHRSksIFwKKwlJTlRSX1BST1BfREVTQyhBUk1fSVJRX1NFQ19TR0lfNSwgR0lDX0hJR0hFU1RfU0VDX1BSSU9SSVRZLCBncnAsIFwKKwkJCUdJQ19JTlRSX0NGR19FREdFKSwgXAorCUlOVFJfUFJPUF9ERVNDKEFSTV9JUlFfU0VDX1NHSV82LCBHSUNfSElHSEVTVF9TRUNfUFJJT1JJVFksIGdycCwgXAorCQkJR0lDX0lOVFJfQ0ZHX0VER0UpLCBcCisJSU5UUl9QUk9QX0RFU0MoQVJNX0lSUV9TRUNfU0dJXzcsIEdJQ19ISUdIRVNUX1NFQ19QUklPUklUWSwgZ3JwLCBcCisJCQlHSUNfSU5UUl9DRkdfRURHRSkKIAotI2RlZmluZSBQTEFUX0FSTV9HMF9JUlFTCisjZGVmaW5lIFBMQVRfQVJNX0cwX0lSUV9QUk9QUyhncnApCiAKICNlbmRpZiAvKiBfX1BMQVRGT1JNX0RFRl9IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXQveGlsaW54L3p5bnFtcC9wbGF0Zm9ybS5tayBiL3BsYXQveGlsaW54L3p5bnFtcC9wbGF0Zm9ybS5tawppbmRleCBjYTg3Y2M4Li5jYjNiNDQyIDEwMDY0NAotLS0gYS9wbGF0L3hpbGlueC96eW5xbXAvcGxhdGZvcm0ubWsKKysrIGIvcGxhdC94aWxpbngvenlucW1wL3BsYXRmb3JtLm1rCkBAIC0xMSw2ICsxMSw5IEBACiBTRVBBUkFURV9DT0RFX0FORF9ST0RBVEEgOj0gMQogb3ZlcnJpZGUgUkVTRVRfVE9fQkwzMSA6PSAxCiAKKyMgRG8gbm90IGVuYWJsZSBTVkUKK0VOQUJMRV9TVkVfRk9SX05TCTo9IDAKKwogaWZkZWYgWllOUU1QX0FURl9NRU1fQkFTRQogICAgICQoZXZhbCAkKGNhbGwgYWRkX2RlZmluZSxaWU5RTVBfQVRGX01FTV9CQVNFKSkKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvc3BkL29wdGVlZC9vcHRlZWRfY29tbW9uLmMgYi9zZXJ2aWNlcy9zcGQvb3B0ZWVkL29wdGVlZF9jb21tb24uYwppbmRleCAyNjkzZTdkLi5lNWUyYmU3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zcGQvb3B0ZWVkL29wdGVlZF9jb21tb24uYworKysgYi9zZXJ2aWNlcy9zcGQvb3B0ZWVkL29wdGVlZF9jb21tb24uYwpAQCAtNzgsNyArNzgsNyBAQAogCWNtX3NldF9uZXh0X2VyZXRfY29udGV4dChTRUNVUkUpOwogCiAJcmMgPSBvcHRlZWRfZW50ZXJfc3AoJm9wdGVlX2N0eC0+Y19ydF9jdHgpOwotI2lmIERFQlVHCisjaWYgRU5BQkxFX0FTU0VSVElPTlMKIAlvcHRlZV9jdHgtPmNfcnRfY3R4ID0gMDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zcGQvdGxrZC90bGtkX2NvbW1vbi5jIGIvc2VydmljZXMvc3BkL3Rsa2QvdGxrZF9jb21tb24uYwppbmRleCA1OTlkN2EzLi40ODNkNDViIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zcGQvdGxrZC90bGtkX2NvbW1vbi5jCisrKyBiL3NlcnZpY2VzL3NwZC90bGtkL3Rsa2RfY29tbW9uLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCWNtX3NldF9uZXh0X2VyZXRfY29udGV4dChTRUNVUkUpOwogCiAJcmMgPSB0bGtkX2VudGVyX3NwKCZ0bGtfY3R4LT5jX3J0X2N0eCk7Ci0jaWYgREVCVUcKKyNpZiBFTkFCTEVfQVNTRVJUSU9OUwogCXRsa19jdHgtPmNfcnRfY3R4ID0gMDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zcGQvdHJ1c3R5L3RydXN0eS5jIGIvc2VydmljZXMvc3BkL3RydXN0eS90cnVzdHkuYwppbmRleCBlMzg2ZjcxLi5lY2JjZmFlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zcGQvdHJ1c3R5L3RydXN0eS5jCisrKyBiL3NlcnZpY2VzL3NwZC90cnVzdHkvdHJ1c3R5LmMKQEAgLTk5LDYgKzk5LDE2IEBACiAJcmV0LnIxID0gcjE7CiAJcmV0LnIwID0gcjA7CiAKKwkvKgorCSAqIFRvIGF2b2lkIHRoZSBhZGRpdGlvbmFsIG92ZXJoZWFkIGluIFBTQ0kgZmxvdywgc2tpcCBGUCBjb250ZXh0CisJICogc2F2aW5nL3Jlc3RvcmluZyBpbiBjYXNlIG9mIENQVSBzdXNwZW5kIGFuZCByZXN1bWUsIGFzc3N1bWluZyB0aGF0CisJICogd2hlbiBpdCdzIG5lZWRlZCB0aGUgUFNDSSBjYWxsZXIgaGFzIHByZXNlcnZlZCBGUCBjb250ZXh0IGJlZm9yZQorCSAqIGdvaW5nIGhlcmUuCisJICovCisjaWYgQ1RYX0lOQ0xVREVfRlBSRUdTCisJaWYgKHIwICE9IFNNQ19GQ19DUFVfU1VTUEVORCAmJiByMCAhPSBTTUNfRkNfQ1BVX1JFU1VNRSkKKwkJZnByZWdzX2NvbnRleHRfc2F2ZShnZXRfZnByZWdzX2N0eChjbV9nZXRfY29udGV4dChzZWN1cml0eV9zdGF0ZSkpKTsKKyNlbmRpZgogCWNtX2VsMV9zeXNyZWdzX2NvbnRleHRfc2F2ZShzZWN1cml0eV9zdGF0ZSk7CiAKIAljdHgtPnNhdmVkX3NlY3VyaXR5X3N0YXRlID0gc2VjdXJpdHlfc3RhdGU7CkBAIC0xMDcsNiArMTE3LDExIEBACiAJYXNzZXJ0KGN0eC0+c2F2ZWRfc2VjdXJpdHlfc3RhdGUgPT0gIXNlY3VyaXR5X3N0YXRlKTsKIAogCWNtX2VsMV9zeXNyZWdzX2NvbnRleHRfcmVzdG9yZShzZWN1cml0eV9zdGF0ZSk7CisjaWYgQ1RYX0lOQ0xVREVfRlBSRUdTCisJaWYgKHIwICE9IFNNQ19GQ19DUFVfU1VTUEVORCAmJiByMCAhPSBTTUNfRkNfQ1BVX1JFU1VNRSkKKwkJZnByZWdzX2NvbnRleHRfcmVzdG9yZShnZXRfZnByZWdzX2N0eChjbV9nZXRfY29udGV4dChzZWN1cml0eV9zdGF0ZSkpKTsKKyNlbmRpZgorCiAJY21fc2V0X25leHRfZXJldF9jb250ZXh0KHNlY3VyaXR5X3N0YXRlKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zcGQvdHNwZC90c3BkX2NvbW1vbi5jIGIvc2VydmljZXMvc3BkL3RzcGQvdHNwZF9jb21tb24uYwppbmRleCAxNTM4MjMyLi5kZTU0ZGJlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zcGQvdHNwZC90c3BkX2NvbW1vbi5jCisrKyBiL3NlcnZpY2VzL3NwZC90c3BkL3RzcGRfY29tbW9uLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAljbV9zZXRfbmV4dF9lcmV0X2NvbnRleHQoU0VDVVJFKTsKIAogCXJjID0gdHNwZF9lbnRlcl9zcCgmdHNwX2N0eC0+Y19ydF9jdHgpOwotI2lmIERFQlVHCisjaWYgRU5BQkxFX0FTU0VSVElPTlMKIAl0c3BfY3R4LT5jX3J0X2N0eCA9IDA7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvc3RkX3N2Yy9zZGVpL3NkZWlfZXZlbnQuYyBiL3NlcnZpY2VzL3N0ZF9zdmMvc2RlaS9zZGVpX2V2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwZTc3OQotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL3N0ZF9zdmMvc2RlaS9zZGVpX2V2ZW50LmMKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHV0aWxzLmg+CisjaW5jbHVkZSAic2RlaV9wcml2YXRlLmgiCisKKyNkZWZpbmUgTUFQX09GRihfbWFwLCBfbWFwcGluZykgKChfbWFwKSAtIChfbWFwcGluZyktPm1hcCkKKworLyoKKyAqIEdldCBTREVJIGVudHJ5IHdpdGggdGhlIGdpdmVuIG1hcHBpbmc6IG9uIHN1Y2Nlc3MsIHJldHVybnMgcG9pbnRlciB0byBTREVJCisgKiBlbnRyeS4gT24gZXJyb3IsIHJldHVybnMgTlVMTC4KKyAqCisgKiBCb3RoIHNoYXJlZCBhbmQgcHJpdmF0ZSBtYXBzIGFyZSBzdG9yZWQgaW4gc2luZ2xlLWRpbWVuc2lvbmFsIGFycmF5LiBQcml2YXRlCisgKiBldmVudCBlbnRyaWVzIGFyZSBrZXB0IGZvciBlYWNoIFBFIGZvcm1pbmcgYSAyRCBhcnJheS4KKyAqLworc2RlaV9lbnRyeV90ICpnZXRfZXZlbnRfZW50cnkoc2RlaV9ldl9tYXBfdCAqbWFwKQoreworCWNvbnN0IHNkZWlfbWFwcGluZ190ICptYXBwaW5nOworCXNkZWlfZW50cnlfdCAqY3B1X3ByaXZfYmFzZTsKKwl1bnNpZ25lZCBpbnQgaWR4LCBiYXNlX2lkeDsKKworCWlmIChpc19ldmVudF9wcml2YXRlKG1hcCkpIHsKKwkJLyoKKwkJICogRm9yIGEgcHJpdmF0ZSBtYXAsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBtYXBwaW5nIGluIHRoZQorCQkgKiBhcnJheS4KKwkJICovCisJCW1hcHBpbmcgPSBTREVJX1BSSVZBVEVfTUFQUElORygpOworCQlpZHggPSBNQVBfT0ZGKG1hcCwgbWFwcGluZyk7CisKKwkJLyogQmFzZSBvZiBwcml2YXRlIG1hcHBpbmdzIGZvciB0aGlzIENQVSAqLworCQliYXNlX2lkeCA9IHBsYXRfbXlfY29yZV9wb3MoKSAqIG1hcHBpbmctPm51bV9tYXBzOworCQljcHVfcHJpdl9iYXNlID0gJnNkZWlfcHJpdmF0ZV9ldmVudF90YWJsZVtiYXNlX2lkeF07CisKKwkJLyoKKwkJICogUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBlbnRyeSBhdCB0aGUgc2FtZSBpbmRleCBpbiB0aGUKKwkJICogcGVyLUNQVSBldmVudCBlbnRyeS4KKwkJICovCisJCXJldHVybiAmY3B1X3ByaXZfYmFzZVtpZHhdOworCX0gZWxzZSB7CisJCW1hcHBpbmcgPSBTREVJX1NIQVJFRF9NQVBQSU5HKCk7CisJCWlkeCA9IE1BUF9PRkYobWFwLCBtYXBwaW5nKTsKKworCQlyZXR1cm4gJnNkZWlfc2hhcmVkX2V2ZW50X3RhYmxlW2lkeF07CisJfQorfQorCisvKgorICogRmluZCBldmVudCBtYXBwaW5nIGZvciBhIGdpdmVuIGludGVycnVwdCBudW1iZXI6IE9uIHN1Y2Nlc3MsIHJldHVybnMgcG9pbnRlcgorICogdG8gdGhlIGV2ZW50IG1hcHBpbmcuIE9uIGVycm9yLCByZXR1cm5zIE5VTEwuCisgKi8KK3NkZWlfZXZfbWFwX3QgKmZpbmRfZXZlbnRfbWFwX2J5X2ludHIoaW50IGludHJfbnVtLCBpbnQgc2hhcmVkKQoreworCWNvbnN0IHNkZWlfbWFwcGluZ190ICptYXBwaW5nOworCXNkZWlfZXZfbWFwX3QgKm1hcDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qCisJICogTG9vayBmb3IgYSBtYXRjaCBpbiBwcml2YXRlIGFuZCBzaGFyZWQgbWFwcGluZ3MsIGFzIHJlcXVlc3RlZC4gVGhpcworCSAqIGlzIGEgbGluZWFyIHNlYXJjaC4gSG93ZXZlciwgaWYgdGhlIG1hcHBpbmdzIGFyZSByZXF1aXJlZCB0byBiZQorCSAqIHNvcnRlZCwgZm9yIGxhcmdlIG1hcHMsIHdlIGNvdWxkIGNvbnNpZGVyIGJpbmFyeSBzZWFyY2guCisJICovCisJbWFwcGluZyA9IHNoYXJlZCA/IFNERUlfU0hBUkVEX01BUFBJTkcoKSA6IFNERUlfUFJJVkFURV9NQVBQSU5HKCk7CisJaXRlcmF0ZV9tYXBwaW5nKG1hcHBpbmcsIGksIG1hcCkgeworCQlpZiAobWFwLT5pbnRyID09IGludHJfbnVtKQorCQkJcmV0dXJuIG1hcDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEZpbmQgZXZlbnQgbWFwcGluZyBmb3IgYSBnaXZlbiBldmVudCBudW1iZXI6IE9uIHN1Y2Nlc3MgcmV0dXJucyBwb2ludGVyIHRvCisgKiB0aGUgZXZlbnQgbWFwcGluZy4gT24gZXJyb3IsIHJldHVybnMgTlVMTC4KKyAqLworc2RlaV9ldl9tYXBfdCAqZmluZF9ldmVudF9tYXAoaW50IGV2X251bSkKK3sKKwljb25zdCBzZGVpX21hcHBpbmdfdCAqbWFwcGluZzsKKwlzZGVpX2V2X21hcF90ICptYXA7CisJdW5zaWduZWQgaW50IGksIGo7CisKKwkvKgorCSAqIEl0ZXJhdGUgdGhyb3VnaCBtYXBwaW5ncyB0byBmaW5kIGEgbWF0Y2guIFRoaXMgaXMgYSBsaW5lYXIgc2VhcmNoLgorCSAqIEhvd2V2ZXIsIGlmIHRoZSBtYXBwaW5ncyBhcmUgcmVxdWlyZWQgdG8gYmUgc29ydGVkLCBmb3IgbGFyZ2UgbWFwcywKKwkgKiB3ZSBjb3VsZCBjb25zaWRlciBiaW5hcnkgc2VhcmNoLgorCSAqLworCWZvcl9lYWNoX21hcHBpbmdfdHlwZShpLCBtYXBwaW5nKSB7CisJCWl0ZXJhdGVfbWFwcGluZyhtYXBwaW5nLCBqLCBtYXApIHsKKwkJCWlmIChtYXAtPmV2X251bSA9PSBldl9udW0pCisJCQkJcmV0dXJuIG1hcDsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvc3RkX3N2Yy9zZGVpL3NkZWlfaW50cl9tZ210LmMgYi9zZXJ2aWNlcy9zdGRfc3ZjL3NkZWkvc2RlaV9pbnRyX21nbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmJmNDZkCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvc3RkX3N2Yy9zZGVpL3NkZWlfaW50cl9tZ210LmMKQEAgLTAsMCArMSw2NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxhcmNoX2hlbHBlcnMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxibF9jb21tb24uaD4KKyNpbmNsdWRlIDxjYXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y29udGV4dF9tZ210Lmg+CisjaW5jbHVkZSA8ZGVidWcuaD4KKyNpbmNsdWRlIDxlaGYuaD4KKyNpbmNsdWRlIDxpbnRlcnJ1cHRfbWdtdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWVfc3ZjLmg+CisjaW5jbHVkZSA8c2RlaS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInNkZWlfcHJpdmF0ZS5oIgorCisjZGVmaW5lIFBFX01BU0tFRAkxCisjZGVmaW5lIFBFX05PVF9NQVNLRUQJMAorCisvKiB4MC14MTcgR1BSRUdTIGNvbnRleHQgKi8KKyNkZWZpbmUgU0RFSV9TQVZFRF9HUFJFR1MJMTgKKworLyogTWF4aW11bSBwcmVlbXB0aW9uIG5lc3RpbmcgbGV2ZWxzOiBDcml0aWNhbCBwcmlvcml0eSBhbmQgTm9ybWFsIHByaW9yaXR5ICovCisjZGVmaW5lIE1BWF9FVkVOVF9ORVNUSU5HCTIKKworLyogUGVyLUNQVSBTREVJIHN0YXRlIGFjY2VzcyBtYWNybyAqLworI2RlZmluZSBzZGVpX2dldF90aGlzX3BlX3N0YXRlKCkJKCZzZGVpX2NwdV9zdGF0ZVtwbGF0X215X2NvcmVfcG9zKCldKQorCisvKiBTdHJ1Y3R1cmUgdG8gc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgYW4gb3V0c3RhbmRpbmcgZGlzcGF0Y2ggKi8KK3R5cGVkZWYgc3RydWN0IHNkZWlfZGlzcGF0Y2hfY29udGV4dCB7CisJc2RlaV9ldl9tYXBfdCAqbWFwOworCXVuc2lnbmVkIGludCBzZWNfc3RhdGU7CisJdW5zaWduZWQgaW50IGludHJfcmF3OworCXVpbnQ2NF90IHhbU0RFSV9TQVZFRF9HUFJFR1NdOworCisJLyogRXhjZXB0aW9uIHN0YXRlIHJlZ2lzdGVycyAqLworCXVpbnQ2NF90IGVscl9lbDM7CisJdWludDY0X3Qgc3Bzcl9lbDM7Cit9IHNkZWlfZGlzcGF0Y2hfY29udGV4dF90OworCisvKiBQZXItQ1BVIFNERUkgc3RhdGUgZGF0YSAqLwordHlwZWRlZiBzdHJ1Y3Qgc2RlaV9jcHVfc3RhdGUgeworCXNkZWlfZGlzcGF0Y2hfY29udGV4dF90IGRpc3BhdGNoX3N0YWNrW01BWF9FVkVOVF9ORVNUSU5HXTsKKwl1bnNpZ25lZCBzaG9ydCBzdGFja190b3A7IC8qIEVtcHR5IGFzY2VuZGluZyAqLworCXVuc2lnbmVkIGludCBwZV9tYXNrZWQ6MTsKKwl1bnNpZ25lZCBpbnQgcGVuZGluZ19lbmFibGVzOjE7Cit9IHNkZWlfY3B1X3N0YXRlX3Q7CisKKy8qIFNERUkgc3RhdGVzIGZvciBhbGwgY29yZXMgaW4gdGhlIHN5c3RlbSAqLworc3RhdGljIHNkZWlfY3B1X3N0YXRlX3Qgc2RlaV9jcHVfc3RhdGVbUExBVEZPUk1fQ09SRV9DT1VOVF07CisKK3Vuc2lnbmVkIGludCBzZGVpX3BlX21hc2sodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0OworCXNkZWlfY3B1X3N0YXRlX3QgKnN0YXRlID0gc2RlaV9nZXRfdGhpc19wZV9zdGF0ZSgpOworCisJLyoKKwkgKiBSZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjYWxsIGhhZCBhbnkgZWZmZWN0IGluIHRoZSBtYXNrCisJICogc3RhdHVzIG9mIHRoaXMgUEUuCisJICovCisJcmV0ID0gKHN0YXRlLT5wZV9tYXNrZWQgXiBQRV9NQVNLRUQpOworCXN0YXRlLT5wZV9tYXNrZWQgPSBQRV9NQVNLRUQ7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHNkZWlfcGVfdW5tYXNrKHZvaWQpCit7CisJaW50IGk7CisJc2RlaV9ldl9tYXBfdCAqbWFwOworCXNkZWlfZW50cnlfdCAqc2U7CisJc2RlaV9jcHVfc3RhdGVfdCAqc3RhdGUgPSBzZGVpX2dldF90aGlzX3BlX3N0YXRlKCk7CisJdWludDY0X3QgbXlfbXBpZHIgPSByZWFkX21waWRyX2VsMSgpICYgTVBJRFJfQUZGSU5JVFlfTUFTSzsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIHBlbmRpbmcgZW5hYmxlcywgaXRlcmF0ZSB0aHJvdWdoIHRoZSBwcml2YXRlIG1hcHBpbmdzCisJICogYW5kIGVuYWJsZSB0aG9zZSBib3VuZCBtYXBzIHRoYXQgYXJlIGluIGVuYWJsZWQgc3RhdGUuIEFsc28sIGl0ZXJhdGUKKwkgKiB0aHJvdWdoIHNoYXJlZCBtYXBwaW5ncyBhbmQgZW5hYmxlIGludGVycnVwdHMgb2YgZXZlbnRzIHRoYXQgYXJlCisJICogdGFyZ2V0ZWQgdG8gdGhpcyBQRS4KKwkgKi8KKwlpZiAoc3RhdGUtPnBlbmRpbmdfZW5hYmxlcykgeworCQlmb3JfZWFjaF9wcml2YXRlX21hcChpLCBtYXApIHsKKwkJCXNlID0gZ2V0X2V2ZW50X2VudHJ5KG1hcCk7CisJCQlpZiAoaXNfbWFwX2JvdW5kKG1hcCkgJiYgR0VUX0VWX1NUQVRFKHNlLCBFTkFCTEVEKSkKKwkJCQlwbGF0X2ljX2VuYWJsZV9pbnRlcnJ1cHQobWFwLT5pbnRyKTsKKwkJfQorCisJCWZvcl9lYWNoX3NoYXJlZF9tYXAoaSwgbWFwKSB7CisJCQlzZSA9IGdldF9ldmVudF9lbnRyeShtYXApOworCisJCQlzZGVpX21hcF9sb2NrKG1hcCk7CisJCQlpZiAoaXNfbWFwX2JvdW5kKG1hcCkgJiYKKwkJCQkJR0VUX0VWX1NUQVRFKHNlLCBFTkFCTEVEKSAmJgorCQkJCQkoc2UtPnJlZ19mbGFncyA9PSBTREVJX1JFR0ZfUk1fUEUpICYmCisJCQkJCShzZS0+YWZmaW5pdHkgPT0gbXlfbXBpZHIpKSB7CisJCQkJcGxhdF9pY19lbmFibGVfaW50ZXJydXB0KG1hcC0+aW50cik7CisJCQl9CisJCQlzZGVpX21hcF91bmxvY2sobWFwKTsKKwkJfQorCX0KKworCXN0YXRlLT5wZW5kaW5nX2VuYWJsZXMgPSAwOworCXN0YXRlLT5wZV9tYXNrZWQgPSBQRV9OT1RfTUFTS0VEOworfQorCisvKiBQdXNoIGEgZGlzcGF0Y2ggY29udGV4dCB0byB0aGUgZGlzcGF0Y2ggc3RhY2sgKi8KK3N0YXRpYyBzZGVpX2Rpc3BhdGNoX2NvbnRleHRfdCAqcHVzaF9kaXNwYXRjaCh2b2lkKQoreworCXNkZWlfY3B1X3N0YXRlX3QgKnN0YXRlID0gc2RlaV9nZXRfdGhpc19wZV9zdGF0ZSgpOworCXNkZWlfZGlzcGF0Y2hfY29udGV4dF90ICpkaXNwX2N0eDsKKworCS8qIENhbm5vdCBoYXZlIG1vcmUgdGhhbiBtYXggZXZlbnRzICovCisJYXNzZXJ0KHN0YXRlLT5zdGFja190b3AgPCBNQVhfRVZFTlRfTkVTVElORyk7CisKKwlkaXNwX2N0eCA9ICZzdGF0ZS0+ZGlzcGF0Y2hfc3RhY2tbc3RhdGUtPnN0YWNrX3RvcF07CisJc3RhdGUtPnN0YWNrX3RvcCsrOworCisJcmV0dXJuIGRpc3BfY3R4OworfQorCisvKiBQb3AgYSBkaXNwYXRjaCBjb250ZXh0IHRvIHRoZSBkaXNwYXRjaCBzdGFjayAqLworc3RhdGljIHNkZWlfZGlzcGF0Y2hfY29udGV4dF90ICpwb3BfZGlzcGF0Y2godm9pZCkKK3sKKwlzZGVpX2NwdV9zdGF0ZV90ICpzdGF0ZSA9IHNkZWlfZ2V0X3RoaXNfcGVfc3RhdGUoKTsKKworCWlmIChzdGF0ZS0+c3RhY2tfdG9wID09IDApCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0KHN0YXRlLT5zdGFja190b3AgPD0gTUFYX0VWRU5UX05FU1RJTkcpOworCisJc3RhdGUtPnN0YWNrX3RvcC0tOworCisJcmV0dXJuICZzdGF0ZS0+ZGlzcGF0Y2hfc3RhY2tbc3RhdGUtPnN0YWNrX3RvcF07Cit9CisKKy8qIFJldHJpZXZlIHRoZSBjb250ZXh0IGF0IHRoZSB0b3Agb2YgZGlzcGF0Y2ggc3RhY2sgKi8KK3N0YXRpYyBzZGVpX2Rpc3BhdGNoX2NvbnRleHRfdCAqZ2V0X291dHN0YW5kaW5nX2Rpc3BhdGNoKHZvaWQpCit7CisJc2RlaV9jcHVfc3RhdGVfdCAqc3RhdGUgPSBzZGVpX2dldF90aGlzX3BlX3N0YXRlKCk7CisKKwlpZiAoc3RhdGUtPnN0YWNrX3RvcCA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWFzc2VydChzdGF0ZS0+c3RhY2tfdG9wIDw9IE1BWF9FVkVOVF9ORVNUSU5HKTsKKworCXJldHVybiAmc3RhdGUtPmRpc3BhdGNoX3N0YWNrW3N0YXRlLT5zdGFja190b3AgLSAxXTsKK30KKworc3RhdGljIHZvaWQgc2F2ZV9ldmVudF9jdHgoc2RlaV9ldl9tYXBfdCAqbWFwLCB2b2lkICp0Z3RfY3R4LCBpbnQgc2VjX3N0YXRlLAorCQl1bnNpZ25lZCBpbnQgaW50cl9yYXcpCit7CisJc2RlaV9kaXNwYXRjaF9jb250ZXh0X3QgKmRpc3BfY3R4OworCWdwX3JlZ3NfdCAqdGd0X2dwcmVnczsKKwllbDNfc3RhdGVfdCAqdGd0X2VsMzsKKworCWFzc2VydCh0Z3RfY3R4KTsKKwl0Z3RfZ3ByZWdzID0gZ2V0X2dwcmVnc19jdHgodGd0X2N0eCk7CisJdGd0X2VsMyA9IGdldF9lbDNzdGF0ZV9jdHgodGd0X2N0eCk7CisKKwlkaXNwX2N0eCA9IHB1c2hfZGlzcGF0Y2goKTsKKwlhc3NlcnQoZGlzcF9jdHgpOworCWRpc3BfY3R4LT5zZWNfc3RhdGUgPSBzZWNfc3RhdGU7CisJZGlzcF9jdHgtPm1hcCA9IG1hcDsKKwlkaXNwX2N0eC0+aW50cl9yYXcgPSBpbnRyX3JhdzsKKworCS8qIFNhdmUgZ2VuZXJhbCBwdXJwb3NlIGFuZCBleGNlcHRpb24gcmVnaXN0ZXJzICovCisJbWVtY3B5KGRpc3BfY3R4LT54LCB0Z3RfZ3ByZWdzLCBzaXplb2YoZGlzcF9jdHgtPngpKTsKKwlkaXNwX2N0eC0+c3Bzcl9lbDMgPSByZWFkX2N0eF9yZWcodGd0X2VsMywgQ1RYX1NQU1JfRUwzKTsKKwlkaXNwX2N0eC0+ZWxyX2VsMyA9IHJlYWRfY3R4X3JlZyh0Z3RfZWwzLCBDVFhfRUxSX0VMMyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfZXZlbnRfY3R4KHNkZWlfZGlzcGF0Y2hfY29udGV4dF90ICpkaXNwX2N0eCwgdm9pZCAqdGd0X2N0eCkKK3sKKwlncF9yZWdzX3QgKnRndF9ncHJlZ3M7CisJZWwzX3N0YXRlX3QgKnRndF9lbDM7CisKKwlhc3NlcnQodGd0X2N0eCk7CisJdGd0X2dwcmVncyA9IGdldF9ncHJlZ3NfY3R4KHRndF9jdHgpOworCXRndF9lbDMgPSBnZXRfZWwzc3RhdGVfY3R4KHRndF9jdHgpOworCisJQ0FTU0VSVChzaXplb2YoZGlzcF9jdHgtPngpID09IChTREVJX1NBVkVEX0dQUkVHUyAqIHNpemVvZih1aW50NjRfdCkpLAorCQkJZm9vKTsKKworCS8qIFJlc3RvcmUgZ2VuZXJhbCBwdXJwb3NlIGFuZCBleGNlcHRpb24gcmVnaXN0ZXJzICovCisJbWVtY3B5KHRndF9ncHJlZ3MsIGRpc3BfY3R4LT54LCBzaXplb2YoZGlzcF9jdHgtPngpKTsKKwl3cml0ZV9jdHhfcmVnKHRndF9lbDMsIENUWF9TUFNSX0VMMywgZGlzcF9jdHgtPnNwc3JfZWwzKTsKKwl3cml0ZV9jdHhfcmVnKHRndF9lbDMsIENUWF9FTFJfRUwzLCBkaXNwX2N0eC0+ZWxyX2VsMyk7Cit9CisKK3N0YXRpYyB2b2lkIHNhdmVfc2VjdXJlX2NvbnRleHQodm9pZCkKK3sKKwljbV9lbDFfc3lzcmVnc19jb250ZXh0X3NhdmUoU0VDVVJFKTsKK30KKworLyogUmVzdG9yZSBTZWN1cmUgY29udGV4dCBhbmQgYXJyYW5nZSB0byByZXN1bWUgaXQgYXQgdGhlIG5leHQgRVJFVCAqLworc3RhdGljIHZvaWQgcmVzdG9yZV9hbmRfcmVzdW1lX3NlY3VyZV9jb250ZXh0KHZvaWQpCit7CisJY21fZWwxX3N5c3JlZ3NfY29udGV4dF9yZXN0b3JlKFNFQ1VSRSk7CisJY21fc2V0X25leHRfZXJldF9jb250ZXh0KFNFQ1VSRSk7Cit9CisKKy8qCisgKiBSZXN0b3JlIE5vbi1zZWN1cmUgY29udGV4dCBhbmQgYXJyYW5nZSB0byByZXN1bWUgaXQgYXQgdGhlIG5leHQgRVJFVC4gUmV0dXJuCisgKiBwb2ludGVyIHRvIHRoZSBOb24tc2VjdXJlIGNvbnRleHQuCisgKi8KK3N0YXRpYyBjcHVfY29udGV4dF90ICpyZXN0b3JlX2FuZF9yZXN1bWVfbnNfY29udGV4dCh2b2lkKQoreworCWNwdV9jb250ZXh0X3QgKm5zX2N0eDsKKworCWNtX2VsMV9zeXNyZWdzX2NvbnRleHRfcmVzdG9yZShOT05fU0VDVVJFKTsKKwljbV9zZXRfbmV4dF9lcmV0X2NvbnRleHQoTk9OX1NFQ1VSRSk7CisKKwluc19jdHggPSBjbV9nZXRfY29udGV4dChOT05fU0VDVVJFKTsKKwlhc3NlcnQobnNfY3R4KTsKKworCXJldHVybiBuc19jdHg7Cit9CisKKy8qCisgKiBQb3B1bGF0ZSB0aGUgTm9uLXNlY3VyZSBjb250ZXh0IHNvIHRoYXQgdGhlIG5leHQgRVJFVCB3aWxsIGRpc3BhdGNoIHRvIHRoZQorICogU0RFSSBjbGllbnQuCisgKi8KK3N0YXRpYyB2b2lkIHNldHVwX25zX2Rpc3BhdGNoKHNkZWlfZXZfbWFwX3QgKm1hcCwgc2RlaV9lbnRyeV90ICpzZSwKKwkJY3B1X2NvbnRleHRfdCAqY3R4LCBpbnQgc2VjX3N0YXRlX3RvX3Jlc3VtZSwKKwkJdW5zaWduZWQgaW50IGludHJfcmF3KQoreworCWVsM19zdGF0ZV90ICplbDNfY3R4ID0gZ2V0X2VsM3N0YXRlX2N0eChjdHgpOworCisJLyogUHVzaCB0aGUgZXZlbnQgYW5kIGNvbnRleHQgKi8KKwlzYXZlX2V2ZW50X2N0eChtYXAsIGN0eCwgc2VjX3N0YXRlX3RvX3Jlc3VtZSwgaW50cl9yYXcpOworCisJLyoKKwkgKiBTZXR1cCBoYW5kbGVyIGFyZ3VtZW50czoKKwkgKgorCSAqIC0geDA6IEV2ZW50IG51bWJlcgorCSAqIC0geDE6IEhhbmRsZXIgYXJndW1lbnQgc3VwcGxpZWQgYXQgdGhlIHRpbWUgb2YgZXZlbnQgcmVnaXN0cmF0aW9uCisJICogLSB4MjogSW50ZXJydXB0ZWQgUEMKKwkgKiAtIHgzOiBJbnRlcnJ1cHRlZCBTUFNSCisJICovCisJU01DX1NFVF9HUChjdHgsIENUWF9HUFJFR19YMCwgbWFwLT5ldl9udW0pOworCVNNQ19TRVRfR1AoY3R4LCBDVFhfR1BSRUdfWDEsIHNlLT5hcmcpOworCVNNQ19TRVRfR1AoY3R4LCBDVFhfR1BSRUdfWDIsIHJlYWRfY3R4X3JlZyhlbDNfY3R4LCBDVFhfRUxSX0VMMykpOworCVNNQ19TRVRfR1AoY3R4LCBDVFhfR1BSRUdfWDMsIHJlYWRfY3R4X3JlZyhlbDNfY3R4LCBDVFhfU1BTUl9FTDMpKTsKKworCS8qCisJICogUHJlcGFyZSBmb3IgRVJFVDoKKwkgKgorCSAqIC0gU2V0IFBDIHRvIHRoZSByZWdpc3RlcmVkIGhhbmRsZXIgYWRkcmVzcworCSAqIC0gU2V0IFNQU1IgdG8ganVtcCB0byBjbGllbnQgRUwgd2l0aCBleGNlcHRpb25zIG1hc2tlZAorCSAqLworCWNtX3NldF9lbHJfc3Bzcl9lbDMoTk9OX1NFQ1VSRSwgKHVpbnRwdHJfdCkgc2UtPmVwLAorCQkJU1BTUl82NChzZGVpX2NsaWVudF9lbCgpLCBNT0RFX1NQX0VMWCwKKwkJCQlESVNBQkxFX0FMTF9FWENFUFRJT05TKSk7Cit9CisKKy8qIEhhbmRsZSBhIHRyaWdnZXJlZCBTREVJIGludGVycnVwdCB3aGlsZSBldmVudHMgd2VyZSBtYXNrZWQgb24gdGhpcyBQRSAqLworc3RhdGljIHZvaWQgaGFuZGxlX21hc2tlZF90cmlnZ2VyKHNkZWlfZXZfbWFwX3QgKm1hcCwgc2RlaV9lbnRyeV90ICpzZSwKKwkJc2RlaV9jcHVfc3RhdGVfdCAqc3RhdGUsIHVuc2lnbmVkIGludCBpbnRyX3JhdykKK3sKKwl1aW50NjRfdCBteV9tcGlkciBfX3VudXNlZCA9IChyZWFkX21waWRyX2VsMSgpICYgTVBJRFJfQUZGSU5JVFlfTUFTSyk7CisJaW50IGRpc2FibGUgPSAwOworCisJLyogTm90aGluZyB0byBkbyBmb3IgZXZlbnQgMCAqLworCWlmIChtYXAtPmV2X251bSA9PSBTREVJX0VWRU5UXzApCisJCXJldHVybjsKKworCS8qCisJICogRm9yIGEgcHJpdmF0ZSBldmVudCwgb3IgZm9yIGEgc2hhcmVkIGV2ZW50IHNwZWNpZmljYWxseSByb3V0ZWQgdG8KKwkgKiB0aGlzIENQVSwgd2UgZGlzYWJsZSBpbnRlcnJ1cHQsIGxlYXZlIHRoZSBpbnRlcnJ1cHQgcGVuZGluZywgYW5kIGRvCisJICogRU9JLgorCSAqLworCWlmIChpc19ldmVudF9wcml2YXRlKG1hcCkpIHsKKwkJZGlzYWJsZSA9IDE7CisJfSBlbHNlIGlmIChzZS0+cmVnX2ZsYWdzID09IFNERUlfUkVHRl9STV9QRSkgeworCQlhc3NlcnQoc2UtPmFmZmluaXR5ID09IG15X21waWRyKTsKKwkJZGlzYWJsZSA9IDE7CisJfQorCisJaWYgKGRpc2FibGUpIHsKKwkJcGxhdF9pY19kaXNhYmxlX2ludGVycnVwdChtYXAtPmludHIpOworCQlwbGF0X2ljX3NldF9pbnRlcnJ1cHRfcGVuZGluZyhtYXAtPmludHIpOworCQlwbGF0X2ljX2VuZF9vZl9pbnRlcnJ1cHQoaW50cl9yYXcpOworCQlzdGF0ZS0+cGVuZGluZ19lbmFibGVzID0gMTsKKworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBXZSBqdXN0IHJlY2VpdmVkIGEgc2hhcmVkIGV2ZW50IHdpdGggcm91dGluZyBzZXQgdG8gQU5ZIFBFLiBUaGUKKwkgKiBpbnRlcnJ1cHQgY2FuJ3QgYmUgZGVsZWdhdGVkIG9uIHRoaXMgUEUgYXMgU0RFSSBldmVudHMgYXJlIG1hc2tlZC4KKwkgKiBIb3dldmVyLCBiZWNhdXNlIGl0cyByb3V0aW5nIG1vZGUgaXMgQU5ZLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZQorCSAqIGV2ZW50IGNhbiBiZSBkZWxlZ2F0ZWQgb24gYW55IG90aGVyIFBFIHRoYXQgaGFzbid0IG1hc2tlZCBldmVudHMuCisJICogVGhlcmVmb3JlLCB3ZSBzZXQgdGhlIGludGVycnVwdCBiYWNrIHBlbmRpbmcgc28gYXMgdG8gZ2l2ZSBvdGhlcgorCSAqIHN1aXRhYmxlIFBFcyBhIGNoYW5jZSBvZiBoYW5kbGluZyBpdC4KKwkgKi8KKwlhc3NlcnQocGxhdF9pY19pc19zcGkobWFwLT5pbnRyKSk7CisJcGxhdF9pY19zZXRfaW50ZXJydXB0X3BlbmRpbmcobWFwLT5pbnRyKTsKKworCS8qCisJICogTGVhdmluZyB0aGUgc2FtZSBpbnRlcnJ1cHQgcGVuZGluZyBhbHNvIG1lYW5zIHRoYXQgdGhlIHNhbWUgaW50ZXJydXB0CisJICogY2FuIHRhcmdldCB0aGlzIFBFIGFnYWluIGFzIHNvb24gYXMgdGhpcyBQRSBsZWF2ZXMgRUwzLiBXaGV0aGVyIGFuZAorCSAqIGhvdyBvZnRlbiB0aGF0IGhhcHBlbnMgZGVwZW5kcyBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgR0lDLgorCSAqCisJICogV2UgdGhlcmVmb3JlIGNhbGwgYSBwbGF0Zm9ybSBoYW5kbGVyIHRvIHJlc29sdmUgdGhpcyBzaXR1YXRpb24uCisJICovCisJcGxhdF9zZGVpX2hhbmRsZV9tYXNrZWRfdHJpZ2dlcihteV9tcGlkciwgbWFwLT5pbnRyKTsKKworCS8qIFRoaXMgUEUgaXMgbWFza2VkLiBXZSBFT0kgdGhlIGludGVycnVwdCwgYXMgaXQgY2FuJ3QgYmUgZGVsZWdhdGVkICovCisJcGxhdF9pY19lbmRfb2ZfaW50ZXJydXB0KGludHJfcmF3KTsKK30KKworLyogU0RFSSBtYWluIGludGVycnVwdCBoYW5kbGVyICovCitpbnQgc2RlaV9pbnRyX2hhbmRsZXIodWludDMyX3QgaW50cl9yYXcsIHVpbnQzMl90IGZsYWdzLCB2b2lkICpoYW5kbGUsCisJCXZvaWQgKmNvb2tpZSkKK3sKKwlzZGVpX2VudHJ5X3QgKnNlOworCWNwdV9jb250ZXh0X3QgKmN0eDsKKwlzZGVpX2V2X21hcF90ICptYXA7CisJc2RlaV9kaXNwYXRjaF9jb250ZXh0X3QgKmRpc3BfY3R4OworCXVuc2lnbmVkIGludCBzZWNfc3RhdGU7CisJc2RlaV9jcHVfc3RhdGVfdCAqc3RhdGU7CisJdWludDMyX3QgaW50cjsKKworCS8qCisJICogVG8gaGFuZGxlIGFuIGV2ZW50LCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBiZSB0cnVlOgorCSAqCisJICogMS4gRXZlbnQgbXVzdCBiZSBzaWduYWxsZWQKKwkgKiAyLiBFdmVudCBtdXN0IGJlIGVuYWJsZWQKKwkgKiAzLiBUaGlzIFBFIG11c3QgYmUgYSB0YXJnZXQgUEUgZm9yIHRoZSBldmVudAorCSAqIDQuIFBFIG11c3QgYmUgdW5tYXNrZWQgZm9yIFNERUkKKwkgKiA1LiBJZiB0aGlzIGlzIGEgbm9ybWFsIGV2ZW50LCBubyBldmVudCBtdXN0IGJlIHJ1bm5pbmcKKwkgKiA2LiBJZiB0aGlzIGlzIGEgY3JpdGljYWwgZXZlbnQsIG5vIGNyaXRpY2FsIGV2ZW50IG11c3QgYmUgcnVubmluZworCSAqCisJICogKDEpIGFuZCAoMikgYXJlIHRydWUgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHJ1bm5pbmcKKwkgKiAoMykgaXMgZW5mb3JjZWQgaW4gR0lDIGJ5IHNlbGVjdGluZyB0aGUgYXBwcm9wcmlhdGUgcm91dGluZyBvcHRpb24KKwkgKiAoNCkgaXMgc2F0aXNmaWVkIGJ5IGNsaWVudCBjYWxsaW5nIFBFX1VOTUFTSworCSAqICg1KSBhbmQgKDYpIGlzIGVuZm9yY2VkIHVzaW5nIGludGVycnVwdCBwcmlvcml0eSwgdGhlIFJQUiwgaW4gR0lDOgorCSAqICAgLSBOb3JtYWwgU0RFSSBldmVudHMgYmVsb25nIHRvIE5vcm1hbCBTREUgcHJpb3JpdHkgY2xhc3MKKwkgKiAgIC0gQ3JpdGljYWwgU0RFSSBldmVudHMgYmVsb25nIHRvIENyaXRpY2FsIENTREUgcHJpb3JpdHkgY2xhc3MKKwkgKgorCSAqIFRoZSBpbnRlcnJ1cHQgaGFzIGFscmVhZHkgYmVlbiBhY2tub3dsZWRnZWQsIGFuZCB0aGVyZWZvcmUgaXMgYWN0aXZlLAorCSAqIHNvIG5vIG90aGVyIFBFIGNhbiBoYW5kbGUgdGhpcyBldmVudCB3aGlsZSB3ZSBhcmUgYXQgaXQuCisJICoKKwkgKiBGaW5kIGlmIHRoaXMgaXMgYW4gU0RFSSBpbnRlcnJ1cHQuIFRoZXJlIG11c3QgYmUgYW4gZXZlbnQgbWFwcGVkIHRvCisJICogdGhpcyBpbnRlcnJ1cHQKKwkgKi8KKwlpbnRyID0gcGxhdF9pY19nZXRfaW50ZXJydXB0X2lkKGludHJfcmF3KTsKKwltYXAgPSBmaW5kX2V2ZW50X21hcF9ieV9pbnRyKGludHIsIHBsYXRfaWNfaXNfc3BpKGludHIpKTsKKwlpZiAoIW1hcCkgeworCQlFUlJPUigiTm8gU0RFSSBtYXAgZm9yIGludGVycnVwdCAldVxuIiwgaW50cik7CisJCXBhbmljKCk7CisJfQorCisJLyoKKwkgKiBSZWNlaXZlZCBpbnRlcnJ1cHQgbnVtYmVyIG11c3QgZWl0aGVyIGNvcnJlc3BvbmQgdG8gZXZlbnQgMCwgb3IgbXVzdAorCSAqIGJlIGJvdW5kIGludGVycnVwdC4KKwkgKi8KKwlhc3NlcnQoKG1hcC0+ZXZfbnVtID09IFNERUlfRVZFTlRfMCkgfHwgaXNfbWFwX2JvdW5kKG1hcCkpOworCisJc2UgPSBnZXRfZXZlbnRfZW50cnkobWFwKTsKKwlzdGF0ZSA9IHNkZWlfZ2V0X3RoaXNfcGVfc3RhdGUoKTsKKworCWlmIChzdGF0ZS0+cGVfbWFza2VkID09IFBFX01BU0tFRCkgeworCQkvKgorCQkgKiBJbnRlcnJ1cHRzIHJlY2VpdmVkIHdoaWxlIHRoaXMgUEUgd2FzIG1hc2tlZCBjYW4ndCBiZQorCQkgKiBkaXNwYXRjaGVkLgorCQkgKi8KKwkJU0RFSV9MT0coImludGVycnVwdCAldSBvbiAlbHggd2hpbGUgUEUgbWFza2VkXG4iLCBtYXAtPmludHIsCisJCQkJcmVhZF9tcGlkcl9lbDEoKSk7CisJCWlmIChpc19ldmVudF9zaGFyZWQobWFwKSkKKwkJCXNkZWlfbWFwX2xvY2sobWFwKTsKKworCQloYW5kbGVfbWFza2VkX3RyaWdnZXIobWFwLCBzZSwgc3RhdGUsIGludHJfcmF3KTsKKworCQlpZiAoaXNfZXZlbnRfc2hhcmVkKG1hcCkpCisJCQlzZGVpX21hcF91bmxvY2sobWFwKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJbnNlcnQgbG9hZCBiYXJyaWVyIGZvciBzaWduYWxsZWQgU0RFSSBldmVudCAqLworCWlmIChtYXAtPmV2X251bSA9PSBTREVJX0VWRU5UXzApCisJCWRtYmxkKCk7CisKKwlpZiAoaXNfZXZlbnRfc2hhcmVkKG1hcCkpCisJCXNkZWlfbWFwX2xvY2sobWFwKTsKKworCS8qIEFzc2VydCBzaGFyZWQgZXZlbnQgcm91dGVkIHRvIHRoaXMgUEUgaGFkIGJlZW4gY29uZmlndXJlZCBzbyAqLworCWlmIChpc19ldmVudF9zaGFyZWQobWFwKSAmJiAoc2UtPnJlZ19mbGFncyA9PSBTREVJX1JFR0ZfUk1fUEUpKSB7CisJCWFzc2VydChzZS0+YWZmaW5pdHkgPT0KKwkJCQkocmVhZF9tcGlkcl9lbDEoKSAmIE1QSURSX0FGRklOSVRZX01BU0spKTsKKwl9CisKKwlpZiAoIWNhbl9zZGVpX3N0YXRlX3RyYW5zKHNlLCBET19ESVNQQVRDSCkpIHsKKwkJU0RFSV9MT0coIlNERUkgZXZlbnQgMHgleCBjYW4ndCBiZSBkaXNwYXRjaGVkOyBzdGF0ZT0weCV4XG4iLAorCQkJCW1hcC0+ZXZfbnVtLCBzZS0+c3RhdGUpOworCisJCS8qCisJCSAqIElmIHRoZSBldmVudCBpcyByZWdpc3RlcmVkLCBsZWF2ZSB0aGUgaW50ZXJydXB0IHBlbmRpbmcgc28KKwkJICogdGhhdCBpdCdzIGRlbGl2ZXJlZCB3aGVuIHRoZSBldmVudCBpcyBlbmFibGVkLgorCQkgKi8KKwkJaWYgKEdFVF9FVl9TVEFURShzZSwgUkVHSVNURVJFRCkpCisJCQlwbGF0X2ljX3NldF9pbnRlcnJ1cHRfcGVuZGluZyhtYXAtPmludHIpOworCisJCS8qCisJCSAqIFRoZSBpbnRlcnJ1cHQgd2FzIGRpc2FibGVkIG9yIHVucmVnaXN0ZXJlZCBhZnRlciB0aGUgaGFuZGxlcgorCQkgKiBzdGFydGVkIHRvIGV4ZWN1dGUsIHdoaWNoIG1lYW5zIG5vdyB0aGUgaW50ZXJydXB0IGlzIGFscmVhZHkKKwkJICogZGlzYWJsZWQgYW5kIHdlIGp1c3QgbmVlZCB0byBFT0kgdGhlIGludGVycnVwdC4KKwkJICovCisJCXBsYXRfaWNfZW5kX29mX2ludGVycnVwdChpbnRyX3Jhdyk7CisKKwkJaWYgKGlzX2V2ZW50X3NoYXJlZChtYXApKQorCQkJc2RlaV9tYXBfdW5sb2NrKG1hcCk7CisKKwkJcmV0dXJuIDA7CisJfQorCisJZGlzcF9jdHggPSBnZXRfb3V0c3RhbmRpbmdfZGlzcGF0Y2goKTsKKwlpZiAoaXNfZXZlbnRfY3JpdGljYWwobWFwKSkgeworCQkvKgorCQkgKiBJZiB0aGlzIGV2ZW50IGlzIENyaXRpY2FsLCBhbmQgaWYgdGhlcmUncyBhbiBvdXRzdGFuZGluZworCQkgKiBkaXNwYXRjaCwgYXNzZXJ0IHRoZSBsYXR0ZXIgaXMgYSBOb3JtYWwgZGlzcGF0Y2guIENyaXRpY2FsCisJCSAqIGV2ZW50cyBjYW4gcHJlZW1wdCBhbiBvdXRzdGFuZGluZyBOb3JtYWwgZXZlbnQgZGlzcGF0Y2guCisJCSAqLworCQlpZiAoZGlzcF9jdHgpCisJCQlhc3NlcnQoaXNfZXZlbnRfbm9ybWFsKGRpc3BfY3R4LT5tYXApKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBJZiB0aGlzIGV2ZW50IGlzIE5vcm1hbCwgYXNzZXJ0IHRoYXQgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nCisJCSAqIGRpc3BhdGNoZXMuIE5vcm1hbCBldmVudHMgY2FuJ3QgcHJlZW1wdCBhbnkgb3V0c3RhbmRpbmcgZXZlbnQKKwkJICogZGlzcGF0Y2hlcy4KKwkJICovCisJCWFzc2VydChkaXNwX2N0eCA9PSBOVUxMKTsKKwl9CisKKwlzZWNfc3RhdGUgPSBnZXRfaW50ZXJydXB0X3NyY19zcyhmbGFncyk7CisKKwlpZiAoaXNfZXZlbnRfc2hhcmVkKG1hcCkpCisJCXNkZWlfbWFwX3VubG9jayhtYXApOworCisJU0RFSV9MT0coIkFDSyAlbHgsIGV2OiVkIHNzOiVkIHNwc3I6JWx4IEVMUjolbHhcbiIsIHJlYWRfbXBpZHJfZWwxKCksCisJCQltYXAtPmV2X251bSwgc2VjX3N0YXRlLCByZWFkX3Nwc3JfZWwzKCksCisJCQlyZWFkX2Vscl9lbDMoKSk7CisKKwljdHggPSBoYW5kbGU7CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGludGVycnVwdGVkIHNlY3VyZSBzdGF0ZS4gUGVyZm9ybSBhIGNvbnRleHQgc3dpdGNoIHNvCisJICogdGhhdCB3ZSBjYW4gZGVsZWdhdGUgdG8gTlMuCisJICovCisJaWYgKHNlY19zdGF0ZSA9PSBTRUNVUkUpIHsKKwkJc2F2ZV9zZWN1cmVfY29udGV4dCgpOworCQljdHggPSByZXN0b3JlX2FuZF9yZXN1bWVfbnNfY29udGV4dCgpOworCX0KKworCXNldHVwX25zX2Rpc3BhdGNoKG1hcCwgc2UsIGN0eCwgc2VjX3N0YXRlLCBpbnRyX3Jhdyk7CisKKwkvKgorCSAqIEVuZCBvZiBpbnRlcnJ1cHQgaXMgZG9uZSBpbiBzZGVpX2V2ZW50X2NvbXBsZXRlLCB3aGVuIHRoZSBjbGllbnQKKwkgKiBzaWduYWxzIGNvbXBsZXRpb24uCisJICovCisJcmV0dXJuIDA7Cit9CisKKy8qIEV4cGxpY2l0bHkgZGlzcGF0Y2ggdGhlIGdpdmVuIFNERUkgZXZlbnQgKi8KK2ludCBzZGVpX2Rpc3BhdGNoX2V2ZW50KGludCBldl9udW0sIHVuc2lnbmVkIGludCBwcmVlbXB0ZWRfc2VjX3N0YXRlKQoreworCXNkZWlfZW50cnlfdCAqc2U7CisJc2RlaV9ldl9tYXBfdCAqbWFwOworCWNwdV9jb250ZXh0X3QgKmN0eDsKKwlzZGVpX2Rpc3BhdGNoX2NvbnRleHRfdCAqZGlzcF9jdHg7CisJc2RlaV9jcHVfc3RhdGVfdCAqc3RhdGU7CisKKwkvKiBWYWxpZGF0ZSBwcmVlbXB0ZWQgc2VjdXJpdHkgc3RhdGUgKi8KKwlpZiAoKHByZWVtcHRlZF9zZWNfc3RhdGUgIT0gU0VDVVJFKSAmJgorCQkJKHByZWVtcHRlZF9zZWNfc3RhdGUgIT0gTk9OX1NFQ1VSRSkpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIENhbid0IGRpc3BhdGNoIGlmIGV2ZW50cyBhcmUgbWFza2VkIG9uIHRoaXMgUEUgKi8KKwlzdGF0ZSA9IHNkZWlfZ2V0X3RoaXNfcGVfc3RhdGUoKTsKKwlpZiAoc3RhdGUtPnBlX21hc2tlZCA9PSBQRV9NQVNLRUQpCisJCXJldHVybiAtMTsKKworCS8qIEV2ZW50IDAgY2FuJ3QgYmUgZGlzcGF0Y2hlZCAqLworCWlmIChldl9udW0gPT0gU0RFSV9FVkVOVF8wKQorCQlyZXR1cm4gLTE7CisKKwkvKiBMb2NhdGUgbWFwcGluZyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgKi8KKwltYXAgPSBmaW5kX2V2ZW50X21hcChldl9udW0pOworCWlmICghbWFwKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIFN0YXRpY2FsbHktYm91bmQgb3IgZHluYW1pYyBtYXBzIGFyZSBkaXNwYXRjaGVkIG9ubHkgYXMgYSByZXN1bHQgb2YKKwkgKiBpbnRlcnJ1cHQsIGFuZCBub3QgdXBvbiBleHBsaWNpdCByZXF1ZXN0LgorCSAqLworCWlmIChpc19tYXBfZHluYW1pYyhtYXApIHx8IGlzX21hcF9ib3VuZChtYXApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBUaGUgZXZlbnQgbXVzdCBiZSBwcml2YXRlICovCisJaWYgKGlzX2V2ZW50X3NoYXJlZChtYXApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBFeGFtaW5lIHN0YXRlIG9mIGRpc3BhdGNoIHN0YWNrICovCisJZGlzcF9jdHggPSBnZXRfb3V0c3RhbmRpbmdfZGlzcGF0Y2goKTsKKwlpZiAoZGlzcF9jdHgpIHsKKwkJLyoKKwkJICogVGhlcmUncyBhbiBvdXRzdGFuZGluZyBkaXNwYXRjaC4gSWYgdGhlIG91dHN0YW5kaW5nIGRpc3BhdGNoCisJCSAqIGlzIGNyaXRpY2FsLCBubyBtb3JlIGRpc3BhdGNoZXMgYXJlIHBvc3NpYmxlLgorCQkgKi8KKwkJaWYgKGlzX2V2ZW50X2NyaXRpY2FsKGRpc3BfY3R4LT5tYXApKQorCQkJcmV0dXJuIC0xOworCisJCS8qCisJCSAqIElmIHRoZSBvdXRzdGFuZGluZyBkaXNwYXRjaCBpcyBOb3JtYWwsIG9ubHkgY3JpdGljYWwgZXZlbnRzCisJCSAqIGNhbiBiZSBkaXNwYXRjaGVkLgorCQkgKi8KKwkJaWYgKGlzX2V2ZW50X25vcm1hbChtYXApKQorCQkJcmV0dXJuIC0xOworCX0KKworCXNlID0gZ2V0X2V2ZW50X2VudHJ5KG1hcCk7CisJaWYgKCFjYW5fc2RlaV9zdGF0ZV90cmFucyhzZSwgRE9fRElTUEFUQ0gpKQorCQlyZXR1cm4gLTE7CisKKwkvKiBBY3RpdmF0ZSB0aGUgcHJpb3JpdHkgY29ycmVzcG9uZGluZyB0byB0aGUgZXZlbnQgYmVpbmcgZGlzcGF0Y2hlZCAqLworCWVoZl9hY3RpdmF0ZV9wcmlvcml0eShzZGVpX2V2ZW50X3ByaW9yaXR5KG1hcCkpOworCisJLyoKKwkgKiBXZSBhc3N1bWUgdGhlIGN1cnJlbnQgY29udGV4dCBpcyBTRUNVUkUsIGFuZCB0aGF0IGl0J3MgYWxyZWFkeSBiZWVuCisJICogc2F2ZWQuCisJICovCisJY3R4ID0gcmVzdG9yZV9hbmRfcmVzdW1lX25zX2NvbnRleHQoKTsKKworCS8qCisJICogVGhlIGNhbGxlciBoYXMgZWZmZWN0aXZlbHkgdGVybWluYXRlZCBleGVjdXRpb24uIFJlY29yZCB0byByZXN1bWUgdGhlCisJICogcHJlZW1wdGVkIGNvbnRleHQgbGF0ZXIgd2hlbiB0aGUgZXZlbnQgY29tcGxldGVzIG9yCisJICogY29tcGxldGUtYW5kLXJlc3VtZXMuCisJICovCisJc2V0dXBfbnNfZGlzcGF0Y2gobWFwLCBzZSwgY3R4LCBwcmVlbXB0ZWRfc2VjX3N0YXRlLCAwKTsKKworCXJldHVybiAwOworfQorCitpbnQgc2RlaV9ldmVudF9jb21wbGV0ZShpbnQgcmVzdW1lLCB1aW50NjRfdCBwYykKK3sKKwlzZGVpX2Rpc3BhdGNoX2NvbnRleHRfdCAqZGlzcF9jdHg7CisJc2RlaV9lbnRyeV90ICpzZTsKKwlzZGVpX2V2X21hcF90ICptYXA7CisJY3B1X2NvbnRleHRfdCAqY3R4OworCXNkZWlfYWN0aW9uX3QgYWN0OworCXVuc2lnbmVkIGludCBjbGllbnRfZWwgPSBzZGVpX2NsaWVudF9lbCgpOworCisJLyogUmV0dXJuIGVycm9yIGlmIGNhbGxlZCB3aXRob3V0IGFuIGFjdGl2ZSBldmVudCAqLworCWRpc3BfY3R4ID0gcG9wX2Rpc3BhdGNoKCk7CisJaWYgKCFkaXNwX2N0eCkKKwkJcmV0dXJuIFNERUlfRURFTlk7CisKKwkvKiBWYWxpZGF0ZSByZXN1bXB0aW9uIHBvaW50ICovCisJaWYgKHJlc3VtZSAmJiAocGxhdF9zZGVpX3ZhbGlkYXRlX2VudHJ5X3BvaW50KHBjLCBjbGllbnRfZWwpICE9IDApKQorCQlyZXR1cm4gU0RFSV9FREVOWTsKKworCW1hcCA9IGRpc3BfY3R4LT5tYXA7CisJYXNzZXJ0KG1hcCk7CisKKwlzZSA9IGdldF9ldmVudF9lbnRyeShtYXApOworCisJU0RFSV9MT0coIkVPSTolbHgsICVkIHNwc3I6JWx4IGVscjolbHhcbiIsIHJlYWRfbXBpZHJfZWwxKCksCisJCQltYXAtPmV2X251bSwgcmVhZF9zcHNyX2VsMygpLCByZWFkX2Vscl9lbDMoKSk7CisKKwlpZiAoaXNfZXZlbnRfc2hhcmVkKG1hcCkpCisJCXNkZWlfbWFwX2xvY2sobWFwKTsKKworCWFjdCA9IHJlc3VtZSA/IERPX0NPTVBMRVRFX1JFU1VNRSA6IERPX0NPTVBMRVRFOworCWlmICghY2FuX3NkZWlfc3RhdGVfdHJhbnMoc2UsIGFjdCkpIHsKKwkJaWYgKGlzX2V2ZW50X3NoYXJlZChtYXApKQorCQkJc2RlaV9tYXBfdW5sb2NrKG1hcCk7CisJCXJldHVybiBTREVJX0VERU5ZOworCX0KKworCS8qCisJICogUmVzdG9yZSBOb24tc2VjdXJlIHRvIGhvdyBpdCB3YXMgb3JpZ2luYWxseSBpbnRlcnJ1cHRlZC4gT25jZSBkb25lLAorCSAqIGl0J3MgdXAtdG8tZGF0ZSB3aXRoIHRoZSBzYXZlZCBjb3B5LgorCSAqLworCWN0eCA9IGNtX2dldF9jb250ZXh0KE5PTl9TRUNVUkUpOworCXJlc3RvcmVfZXZlbnRfY3R4KGRpc3BfY3R4LCBjdHgpOworCisJaWYgKHJlc3VtZSkgeworCQkvKgorCQkgKiBDb21wbGV0ZS1hbmQtcmVzdW1lIGNhbGwuIFByZXBhcmUgdGhlIE5vbi1zZWN1cmUgY29udGV4dAorCQkgKiAoY3VycmVudGx5IGFjdGl2ZSkgZm9yIGNvbXBsZXRlIGFuZCByZXN1bWUuCisJCSAqLworCQljbV9zZXRfZWxyX3Nwc3JfZWwzKE5PTl9TRUNVUkUsIHBjLCBTUFNSXzY0KGNsaWVudF9lbCwKKwkJCQkJTU9ERV9TUF9FTFgsIERJU0FCTEVfQUxMX0VYQ0VQVElPTlMpKTsKKworCQkvKgorCQkgKiBNYWtlIGl0IGxvb2sgYXMgaWYgYSBzeW5jaHJvbm91cyBleGNlcHRpb24gd2VyZSB0YWtlbiBhdCB0aGUKKwkJICogc3VwcGxpZWQgTm9uLXNlY3VyZSByZXN1bXB0aW9uIHBvaW50LiBQb3B1bGF0ZSBTUFNSIGFuZAorCQkgKiBFTFJfRUx4IHNvIHRoYXQgYW4gRVJFVCBmcm9tIHRoZXJlIHdvcmtzIGFzIGV4cGVjdGVkLgorCQkgKgorCQkgKiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBjbGllbnQsIGlmIG5lY2Vzc2FyeSwgd291bGQgaGF2ZQorCQkgKiBzYXZlZCBhbnkgbGl2ZSBjb250ZW50IGluIHRoZXNlIHJlZ2lzdGVycyBiZWZvcmUgbWFraW5nIHRoaXMKKwkJICogY2FsbC4KKwkJICovCisJCWlmIChjbGllbnRfZWwgPT0gTU9ERV9FTDIpIHsKKwkJCXdyaXRlX2Vscl9lbDIoZGlzcF9jdHgtPmVscl9lbDMpOworCQkJd3JpdGVfc3Bzcl9lbDIoZGlzcF9jdHgtPnNwc3JfZWwzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEVMMSAqLworCQkJd3JpdGVfZWxyX2VsMShkaXNwX2N0eC0+ZWxyX2VsMyk7CisJCQl3cml0ZV9zcHNyX2VsMShkaXNwX2N0eC0+c3Bzcl9lbDMpOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0aGUgY2F1c2Ugb2YgZGlzcGF0Y2ggb3JpZ2luYWxseSBpbnRlcnJ1cHRlZCB0aGUgU2VjdXJlIHdvcmxkLCBhbmQKKwkgKiBpZiBOb24tc2VjdXJlIHdvcmxkIHdhc24ndCBhbGxvd2VkIHRvIHByZWVtcHQgU2VjdXJlIGV4ZWN1dGlvbiwKKwkgKiByZXN1bWUgU2VjdXJlLgorCSAqCisJICogTm8gbmVlZCB0byBzYXZlIHRoZSBOb24tc2VjdXJlIGNvbnRleHQgYWhlYWQgb2YgYSB3b3JsZCBzd2l0Y2g6IHRoZQorCSAqIE5vbi1zZWN1cmUgY29udGV4dCB3YXMgZnVsbHkgc2F2ZWQgYmVmb3JlIGRpc3BhdGNoLCBhbmQgaGFzIGJlZW4KKwkgKiByZXR1cm5lZCB0byBpdHMgcHJlLWRpc3BhdGNoIHN0YXRlLgorCSAqLworCWlmICgoZGlzcF9jdHgtPnNlY19zdGF0ZSA9PSBTRUNVUkUpICYmCisJCQkoZWhmX2lzX25zX3ByZWVtcHRpb25fYWxsb3dlZCgpID09IDApKSB7CisJCXJlc3RvcmVfYW5kX3Jlc3VtZV9zZWN1cmVfY29udGV4dCgpOworCX0KKworCWlmICgobWFwLT5ldl9udW0gPT0gU0RFSV9FVkVOVF8wKSB8fCBpc19tYXBfYm91bmQobWFwKSkgeworCQkvKgorCQkgKiBUaGUgZXZlbnQgd2FzIGRpc3BhdGNoZWQgYWZ0ZXIgcmVjZWl2aW5nIFNERUkgaW50ZXJydXB0LiBXaXRoCisJCSAqIHRoZSBldmVudCBoYW5kbGluZyBjb21wbGV0ZWQsIEVPSSB0aGUgY29ycmVzcG9uZGluZworCQkgKiBpbnRlcnJ1cHQuCisJCSAqLworCQlwbGF0X2ljX2VuZF9vZl9pbnRlcnJ1cHQoZGlzcF9jdHgtPmludHJfcmF3KTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBBbiB1bmJvdW5kIGV2ZW50IG11c3QgaGF2ZSBiZWVuIGRpc3BhdGNoZWQgZXhwbGljaXRseS4KKwkJICogRGVhY3RpdmF0ZSB0aGUgcHJpb3JpdHkgbGV2ZWwgdGhhdCB3YXMgYWN0aXZhdGVkIGF0IHRoZSB0aW1lCisJCSAqIG9mIGV4cGxpY2l0IGRpc3BhdGNoLgorCQkgKi8KKwkJZWhmX2RlYWN0aXZhdGVfcHJpb3JpdHkoc2RlaV9ldmVudF9wcmlvcml0eShtYXApKTsKKwl9CisKKwlpZiAoaXNfZXZlbnRfc2hhcmVkKG1hcCkpCisJCXNkZWlfbWFwX3VubG9jayhtYXApOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzZGVpX2V2ZW50X2NvbnRleHQodm9pZCAqaGFuZGxlLCB1bnNpZ25lZCBpbnQgcGFyYW0pCit7CisJc2RlaV9kaXNwYXRjaF9jb250ZXh0X3QgKmRpc3BfY3R4OworCisJaWYgKHBhcmFtID49IFNERUlfU0FWRURfR1BSRUdTKQorCQlyZXR1cm4gU0RFSV9FSU5WQUw7CisKKwkvKiBHZXQgb3V0c3RhbmRpbmcgZGlzcGF0Y2ggb24gdGhpcyBDUFUgKi8KKwlkaXNwX2N0eCA9IGdldF9vdXRzdGFuZGluZ19kaXNwYXRjaCgpOworCWlmICghZGlzcF9jdHgpCisJCXJldHVybiBTREVJX0VERU5ZOworCisJYXNzZXJ0KGRpc3BfY3R4LT5tYXApOworCisJaWYgKCFjYW5fc2RlaV9zdGF0ZV90cmFucyhnZXRfZXZlbnRfZW50cnkoZGlzcF9jdHgtPm1hcCksIERPX0NPTlRFWFQpKQorCQlyZXR1cm4gU0RFSV9FREVOWTsKKworCS8qCisJICogTm8gbG9ja2luZyBpcyByZXF1aXJlZCBmb3IgdGhlIFJ1bm5pbmcgc3RhdHVzIGFzIHRoaXMgaXMgdGhlIG9ubHkgQ1BVCisJICogd2hpY2ggY2FuIGNvbXBsZXRlIHRoZSBldmVudAorCSAqLworCisJcmV0dXJuIGRpc3BfY3R4LT54W3BhcmFtXTsKK30KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3N0ZF9zdmMvc2RlaS9zZGVpX21haW4uYyBiL3NlcnZpY2VzL3N0ZF9zdmMvc2RlaS9zZGVpX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTY5MzA3Ci0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvc3RkX3N2Yy9zZGVpL3NkZWlfbWFpbi5jCkBAIC0wLDAgKzEsMTA2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPGFyY2hfaGVscGVycy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGJsMzEuaD4KKyNpbmNsdWRlIDxibF9jb21tb24uaD4KKyNpbmNsdWRlIDxjYXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y29udGV4dC5oPgorI2luY2x1ZGUgPGNvbnRleHRfbWdtdC5oPgorI2luY2x1ZGUgPGRlYnVnLmg+CisjaW5jbHVkZSA8ZWhmLmg+CisjaW5jbHVkZSA8aW50ZXJydXB0X21nbXQuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHB1YnN1Yi5oPgorI2luY2x1ZGUgPHJ1bnRpbWVfc3ZjLmg+CisjaW5jbHVkZSA8c2RlaS5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHV0aWxzLmg+CisjaW5jbHVkZSAic2RlaV9wcml2YXRlLmgiCisKKyNkZWZpbmUgTUFKT1JfVkVSU0lPTgkxCisjZGVmaW5lIE1JTk9SX1ZFUlNJT04JMAorI2RlZmluZSBWRU5ET1JfVkVSU0lPTgkwCisKKyNkZWZpbmUgTUFLRV9TREVJX1ZFUlNJT04oX21ham9yLCBfbWlub3IsIF92ZW5kb3IpIFwKKwkoKCgodW5zaWduZWQgbG9uZyBsb25nKShfbWFqb3IpKSA8PCA0OCkgfCBcCisJICgoKHVuc2lnbmVkIGxvbmcgbG9uZykoX21pbm9yKSkgPDwgMzIpIHwgXAorCSAoX3ZlbmRvcikpCisKKyNkZWZpbmUgTE9XRVNUX0lOVFJfUFJJT1JJVFkJCTB4ZmYKKworI2RlZmluZSBpc192YWxpZF9hZmZpbml0eShfbXBpZHIpCShwbGF0X2NvcmVfcG9zX2J5X21waWRyKF9tcGlkcikgPj0gMCkKKworQ0FTU0VSVChQTEFUX1NERUlfQ1JJVElDQUxfUFJJIDwgUExBVF9TREVJX05PUk1BTF9QUkksCisJCXNkZWlfY3JpdGljYWxfbXVzdF9oYXZlX2hpZ2hlcl9wcmlvcml0eSk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX2R5bl9wcml2X3Nsb3RzLCBudW1fZHluX3NocmRfc2xvdHM7CisKKy8qIEluaXRpYWxpc2UgU0RFSSBtYXAgZW50cmllcyAqLworc3RhdGljIHZvaWQgaW5pdF9tYXAoc2RlaV9ldl9tYXBfdCAqbWFwKQoreworCW1hcC0+cmVnX2NvdW50ID0gMDsKK30KKworLyogQ29udmVydCBtYXBwaW5nIHRvIFNERUkgY2xhc3MgKi8KK3NkZWlfY2xhc3NfdCBtYXBfdG9fY2xhc3Moc2RlaV9ldl9tYXBfdCAqbWFwKQoreworCXJldHVybiBpc19ldmVudF9jcml0aWNhbChtYXApID8gU0RFSV9DUklUSUNBTCA6IFNERUlfTk9STUFMOworfQorCisvKiBDbGVhciBTREVJIGV2ZW50IGVudHJpZXMgZXhjZXB0IHN0YXRlICovCitzdGF0aWMgdm9pZCBjbGVhcl9ldmVudF9lbnRyaWVzKHNkZWlfZW50cnlfdCAqc2UpCit7CisJc2UtPmVwID0gMDsKKwlzZS0+YXJnID0gMDsKKwlzZS0+YWZmaW5pdHkgPSAwOworCXNlLT5yZWdfZmxhZ3MgPSAwOworfQorCisvKiBQZXJmb3JtIENQVS1zcGVjaWZpYyBzdGF0ZSBpbml0aWFsaXNhdGlvbiAqLworc3RhdGljIHZvaWQgKnNkZWlfY3B1X29uX2luaXQoY29uc3Qgdm9pZCAqYXJnKQoreworCWludCBpOworCXNkZWlfZXZfbWFwX3QgKm1hcDsKKwlzZGVpX2VudHJ5X3QgKnNlOworCisJLyogSW5pdGlhbGl6ZSBwcml2YXRlIG1hcHBpbmdzIG9uIHRoaXMgQ1BVICovCisJZm9yX2VhY2hfcHJpdmF0ZV9tYXAoaSwgbWFwKSB7CisJCXNlID0gZ2V0X2V2ZW50X2VudHJ5KG1hcCk7CisJCWNsZWFyX2V2ZW50X2VudHJpZXMoc2UpOworCQlzZS0+c3RhdGUgPSAwOworCX0KKworCVNERUlfTE9HKCJQcml2YXRlIGV2ZW50cyBpbml0aWFsaXplZCBvbiAlbHhcbiIsIHJlYWRfbXBpZHJfZWwxKCkpOworCisJLyogQWxsIFBFcyBzdGFydCB3aXRoIFNERUkgZXZlbnRzIG1hc2tlZCAqLworCXNkZWlfcGVfbWFzaygpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEluaXRpYWxpc2UgYW4gU0RFSSBjbGFzcyAqLwordm9pZCBzZGVpX2NsYXNzX2luaXQoc2RlaV9jbGFzc190IGNsYXNzKQoreworCXVuc2lnbmVkIGludCBpLCB6ZXJvX2ZvdW5kIF9fdW51c2VkID0gMDsKKwlpbnQgZXZfbnVtX3NvX2ZhciBfX3VudXNlZDsKKwlzZGVpX2V2X21hcF90ICptYXA7CisKKwkvKiBTYW5pdHkgY2hlY2sgYW5kIGNvbmZpZ3VyYXRpb24gb2Ygc2hhcmVkIGV2ZW50cyAqLworCWV2X251bV9zb19mYXIgPSAtMTsKKwlmb3JfZWFjaF9zaGFyZWRfbWFwKGksIG1hcCkgeworI2lmIEVOQUJMRV9BU1NFUlRJT05TCisJCS8qIEVuc3VyZSBtYXBwaW5ncyBhcmUgc29ydGVkICovCisJCWFzc2VydCgoZXZfbnVtX3NvX2ZhciA8IDApIHx8IChtYXAtPmV2X251bSA+IGV2X251bV9zb19mYXIpKTsKKworCQlldl9udW1fc29fZmFyID0gbWFwLT5ldl9udW07CisKKwkJLyogRXZlbnQgMCBtdXN0IG5vdCBiZSBzaGFyZWQgKi8KKwkJYXNzZXJ0KG1hcC0+ZXZfbnVtICE9IFNERUlfRVZFTlRfMCk7CisKKwkJLyogQ2hlY2sgZm9yIHZhbGlkIGV2ZW50ICovCisJCWFzc2VydChtYXAtPmV2X251bSA+PSAwKTsKKworCQkvKiBNYWtlIHN1cmUgaXQncyBhIHNoYXJlZCBldmVudCAqLworCQlhc3NlcnQoaXNfZXZlbnRfc2hhcmVkKG1hcCkpOworCisJCS8qIE5vIHNoYXJlZCBtYXBwaW5nIHNob3VsZCBoYXZlIHNpZ25hbGFibGUgcHJvcGVydHkgKi8KKwkJYXNzZXJ0KCFpc19ldmVudF9zaWduYWxhYmxlKG1hcCkpOworI2VuZGlmCisKKwkJLyogU2tpcCBpbml0aWFsaXppbmcgdGhlIHdyb25nIHByaW9yaXR5ICovCisJCWlmIChtYXBfdG9fY2xhc3MobWFwKSAhPSBjbGFzcykKKwkJCWNvbnRpbnVlOworCisJCS8qIFBsYXRmb3JtIGV2ZW50cyBhcmUgYWx3YXlzIGJvdW5kLCBzbyBzZXQgdGhlIGJvdW5kIGZsYWcgKi8KKwkJaWYgKGlzX21hcF9keW5hbWljKG1hcCkpIHsKKwkJCWFzc2VydChtYXAtPmludHIgPT0gU0RFSV9EWU5fSVJRKTsKKwkJCWFzc2VydChpc19ldmVudF9ub3JtYWwobWFwKSk7CisJCQludW1fZHluX3NocmRfc2xvdHMrKzsKKwkJfSBlbHNlIHsKKwkJCS8qIFNoYXJlZCBtYXBwaW5ncyBtdXN0IGJlIGJvdW5kIHRvIHNoYXJlZCBpbnRlcnJ1cHQgKi8KKwkJCWFzc2VydChwbGF0X2ljX2lzX3NwaShtYXAtPmludHIpKTsKKwkJCXNldF9tYXBfYm91bmQobWFwKTsKKwkJfQorCisJCWluaXRfbWFwKG1hcCk7CisJfQorCisJLyogU2FuaXR5IGNoZWNrIGFuZCBjb25maWd1cmF0aW9uIG9mIHByaXZhdGUgZXZlbnRzIGZvciB0aGlzIENQVSAqLworCWV2X251bV9zb19mYXIgPSAtMTsKKwlmb3JfZWFjaF9wcml2YXRlX21hcChpLCBtYXApIHsKKyNpZiBFTkFCTEVfQVNTRVJUSU9OUworCQkvKiBFbnN1cmUgbWFwcGluZ3MgYXJlIHNvcnRlZCAqLworCQlhc3NlcnQoKGV2X251bV9zb19mYXIgPCAwKSB8fCAobWFwLT5ldl9udW0gPiBldl9udW1fc29fZmFyKSk7CisKKwkJZXZfbnVtX3NvX2ZhciA9IG1hcC0+ZXZfbnVtOworCisJCWlmIChtYXAtPmV2X251bSA9PSBTREVJX0VWRU5UXzApIHsKKwkJCXplcm9fZm91bmQgPSAxOworCisJCQkvKiBFdmVudCAwIG11c3QgYmUgYSBTZWN1cmUgU0dJICovCisJCQlhc3NlcnQoaXNfc2VjdXJlX3NnaShtYXAtPmludHIpKTsKKworCQkJLyoKKwkJCSAqIEV2ZW50IDAgY2FuIGhhdmUgb25seSBoYXZlIHNpZ25hbGFibGUgZmxhZyAoYXBhcnQKKwkJCSAqIGZyb20gYmVpbmcgcHJpdmF0ZQorCQkJICovCisJCQlhc3NlcnQobWFwLT5tYXBfZmxhZ3MgPT0gKFNERUlfTUFQRl9TSUdOQUxBQkxFIHwKKwkJCQkJCVNERUlfTUFQRl9QUklWQVRFKSk7CisJCX0gZWxzZSB7CisJCQkvKiBObyBvdGhlciBtYXBwaW5nIHNob3VsZCBoYXZlIHNpZ25hbGFibGUgcHJvcGVydHkgKi8KKwkJCWFzc2VydCghaXNfZXZlbnRfc2lnbmFsYWJsZShtYXApKTsKKwkJfQorCisJCS8qIENoZWNrIGZvciB2YWxpZCBldmVudCAqLworCQlhc3NlcnQobWFwLT5ldl9udW0gPj0gMCk7CisKKwkJLyogTWFrZSBzdXJlIGl0J3MgYSBwcml2YXRlIGV2ZW50ICovCisJCWFzc2VydChpc19ldmVudF9wcml2YXRlKG1hcCkpOworI2VuZGlmCisKKwkJLyogU2tpcCBpbml0aWFsaXppbmcgdGhlIHdyb25nIHByaW9yaXR5ICovCisJCWlmIChtYXBfdG9fY2xhc3MobWFwKSAhPSBjbGFzcykKKwkJCWNvbnRpbnVlOworCisJCS8qIFBsYXRmb3JtIGV2ZW50cyBhcmUgYWx3YXlzIGJvdW5kLCBzbyBzZXQgdGhlIGJvdW5kIGZsYWcgKi8KKwkJaWYgKG1hcC0+ZXZfbnVtICE9IFNERUlfRVZFTlRfMCkgeworCQkJaWYgKGlzX21hcF9keW5hbWljKG1hcCkpIHsKKwkJCQlhc3NlcnQobWFwLT5pbnRyID09IFNERUlfRFlOX0lSUSk7CisJCQkJYXNzZXJ0KGlzX2V2ZW50X25vcm1hbChtYXApKTsKKwkJCQludW1fZHluX3ByaXZfc2xvdHMrKzsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBQcml2YXRlIG1hcHBpbmdzIG11c3QgYmUgYm91bmQgdG8gcHJpdmF0ZQorCQkJCSAqIGludGVycnVwdC4KKwkJCQkgKi8KKwkJCQlhc3NlcnQocGxhdF9pY19pc19wcGkobWFwLT5pbnRyKSk7CisJCQkJc2V0X21hcF9ib3VuZChtYXApOworCQkJfQorCQl9CisKKwkJaW5pdF9tYXAobWFwKTsKKwl9CisKKwkvKiBFbnN1cmUgZXZlbnQgMCBpcyBpbiB0aGUgbWFwcGluZyAqLworCWFzc2VydCh6ZXJvX2ZvdW5kKTsKKworCXNkZWlfY3B1X29uX2luaXQoTlVMTCk7Cit9CisKKy8qIFNERUkgZGlzcGF0Y2hlciBpbml0aWFsaXNhdGlvbiAqLwordm9pZCBzZGVpX2luaXQodm9pZCkKK3sKKwlzZGVpX2NsYXNzX2luaXQoU0RFSV9DUklUSUNBTCk7CisJc2RlaV9jbGFzc19pbml0KFNERUlfTk9STUFMKTsKKworCS8qIFJlZ2lzdGVyIHByaW9yaXR5IGxldmVsIGhhbmRsZXJzICovCisJZWhmX3JlZ2lzdGVyX3ByaW9yaXR5X2hhbmRsZXIoUExBVF9TREVJX0NSSVRJQ0FMX1BSSSwKKwkJCXNkZWlfaW50cl9oYW5kbGVyKTsKKwllaGZfcmVnaXN0ZXJfcHJpb3JpdHlfaGFuZGxlcihQTEFUX1NERUlfTk9STUFMX1BSSSwKKwkJCXNkZWlfaW50cl9oYW5kbGVyKTsKK30KKworLyogUG9wdWxhdGUgU0RFSSBldmVudCBlbnRyeSAqLworc3RhdGljIHZvaWQgc2V0X3NkZWlfZW50cnkoc2RlaV9lbnRyeV90ICpzZSwgdWludDY0X3QgZXAsIHVpbnQ2NF90IGFyZywKKwkJdW5zaWduZWQgaW50IGZsYWdzLCB1aW50NjRfdCBhZmZpbml0eSkKK3sKKwlhc3NlcnQoc2UgIT0gTlVMTCk7CisKKwlzZS0+ZXAgPSBlcDsKKwlzZS0+YXJnID0gYXJnOworCXNlLT5hZmZpbml0eSA9IChhZmZpbml0eSAmIE1QSURSX0FGRklOSVRZX01BU0spOworCXNlLT5yZWdfZmxhZ3MgPSBmbGFnczsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzZGVpX3ZlcnNpb24odm9pZCkKK3sKKwlyZXR1cm4gTUFLRV9TREVJX1ZFUlNJT04oTUFKT1JfVkVSU0lPTiwgTUlOT1JfVkVSU0lPTiwgVkVORE9SX1ZFUlNJT04pOworfQorCisvKiBWYWxpZGF0ZSBmbGFncyBhbmQgTVBJRFIgdmFsdWVzIGZvciBSRUdJU1RFUiBhbmQgUk9VVElOR19TRVQgY2FsbHMgKi8KK3N0YXRpYyBpbnQgdmFsaWRhdGVfZmxhZ3ModWludDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1waWRyKQoreworCS8qIFZhbGlkYXRlIGZsYWdzICovCisJc3dpdGNoIChmbGFncykgeworCWNhc2UgU0RFSV9SRUdGX1JNX1BFOgorCQlpZiAoIWlzX3ZhbGlkX2FmZmluaXR5KG1waWRyKSkKKwkJCXJldHVybiBTREVJX0VJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBTREVJX1JFR0ZfUk1fQU5ZOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVbmtub3duIGZsYWdzICovCisJCXJldHVybiBTREVJX0VJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogU2V0IHJvdXRpbmcgb2YgYW4gU0RFSSBldmVudCAqLworc3RhdGljIGludCBzZGVpX2V2ZW50X3JvdXRpbmdfc2V0KGludCBldl9udW0sIHVpbnQ2NF90IGZsYWdzLCB1aW50NjRfdCBtcGlkcikKK3sKKwlpbnQgcmV0LCByb3V0aW5nOworCXNkZWlfZXZfbWFwX3QgKm1hcDsKKwlzZGVpX2VudHJ5X3QgKnNlOworCisJcmV0ID0gdmFsaWRhdGVfZmxhZ3MoZmxhZ3MsIG1waWRyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogQ2hlY2sgaWYgdmFsaWQgZXZlbnQgbnVtYmVyICovCisJbWFwID0gZmluZF9ldmVudF9tYXAoZXZfbnVtKTsKKwlpZiAoIW1hcCkKKwkJcmV0dXJuIFNERUlfRUlOVkFMOworCisJLyogVGhlIGV2ZW50IG11c3Qgbm90IGJlIHByaXZhdGUgKi8KKwlpZiAoaXNfZXZlbnRfcHJpdmF0ZShtYXApKQorCQlyZXR1cm4gU0RFSV9FSU5WQUw7CisKKwlzZSA9IGdldF9ldmVudF9lbnRyeShtYXApOworCisJc2RlaV9tYXBfbG9jayhtYXApOworCisJaWYgKCFpc19tYXBfYm91bmQobWFwKSB8fCBpc19ldmVudF9wcml2YXRlKG1hcCkpIHsKKwkJcmV0ID0gU0RFSV9FSU5WQUw7CisJCWdvdG8gZmluaXNoOworCX0KKworCWlmICghY2FuX3NkZWlfc3RhdGVfdHJhbnMoc2UsIERPX1JPVVRJTkcpKSB7CisJCXJldCA9IFNERUlfRURFTlk7CisJCWdvdG8gZmluaXNoOworCX0KKworCS8qIENob29zZSBhcHByb3ByaWF0ZSByb3V0aW5nICovCisJcm91dGluZyA9IChmbGFncyA9PSBTREVJX1JFR0ZfUk1fQU5ZKSA/IElOVFJfUk9VVElOR19NT0RFX0FOWSA6CisJCUlOVFJfUk9VVElOR19NT0RFX1BFOworCisJLyogVXBkYXRlIGV2ZW50IHJlZ2lzdHJhdGlvbiBmbGFnICovCisJc2UtPnJlZ19mbGFncyA9IGZsYWdzOworCisJLyoKKwkgKiBST1VUSU5HX1NFVCBpcyBwZXJtaXNzaWJsZSBvbmx5IHdoZW4gZXZlbnQgY29tcG9zaXRlIHN0YXRlIGlzCisJICogJ3JlZ2lzdGVyZWQsIGRpc2FibGVkLCBhbmQgbm90IHJ1bm5pbmcnLiBUaGlzIG1lYW5zIHRoYXQgdGhlCisJICogaW50ZXJydXB0IGlzIGN1cnJlbnRseSBkaXNhYmxlZCwgYW5kIG5vdCBhY3RpdmUuCisJICovCisJcGxhdF9pY19zZXRfc3BpX3JvdXRpbmcobWFwLT5pbnRyLCByb3V0aW5nLCAodV9yZWdpc3Rlcl90KSBtcGlkcik7CisKK2ZpbmlzaDoKKwlzZGVpX21hcF91bmxvY2sobWFwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFJlZ2lzdGVyIGhhbmRsZXIgYW5kIGFyZ3VtZW50IGZvciBhbiBTREVJIGV2ZW50ICovCitzdGF0aWMgaW50IHNkZWlfZXZlbnRfcmVnaXN0ZXIoaW50IGV2X251bSwgdWludDY0X3QgZXAsIHVpbnQ2NF90IGFyZywKKwkJdWludDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1waWRyKQoreworCWludCByZXQ7CisJc2RlaV9lbnRyeV90ICpzZTsKKwlzZGVpX2V2X21hcF90ICptYXA7CisJc2RlaV9zdGF0ZV90IGJhY2t1cF9zdGF0ZTsKKworCWlmICghZXAgfHwgKHBsYXRfc2RlaV92YWxpZGF0ZV9lbnRyeV9wb2ludChlcCwgc2RlaV9jbGllbnRfZWwoKSkgIT0gMCkpCisJCXJldHVybiBTREVJX0VJTlZBTDsKKworCXJldCA9IHZhbGlkYXRlX2ZsYWdzKGZsYWdzLCBtcGlkcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENoZWNrIGlmIHZhbGlkIGV2ZW50IG51bWJlciAqLworCW1hcCA9IGZpbmRfZXZlbnRfbWFwKGV2X251bSk7CisJaWYgKCFtYXApCisJCXJldHVybiBTREVJX0VJTlZBTDsKKworCS8qIFByaXZhdGUgZXZlbnRzIGFsd2F5cyB0YXJnZXQgdGhlIFBFICovCisJaWYgKGlzX2V2ZW50X3ByaXZhdGUobWFwKSkKKwkJZmxhZ3MgPSBTREVJX1JFR0ZfUk1fUEU7CisKKwlzZSA9IGdldF9ldmVudF9lbnRyeShtYXApOworCisJLyoKKwkgKiBFdmVuIHRob3VnaCByZWdpc3RlciBvcGVyYXRpb24gaXMgcGVyLWV2ZW50IChhZGRpdGlvbmFsbHkgZm9yIHByaXZhdGUKKwkgKiBldmVudHMsIHJlZ2lzdHJhdGlvbiBpcyByZXF1aXJlZCBpbmRpdmlkdWFsbHkpLCBpdCBoYXMgdG8gYmUKKwkgKiBzZXJpYWxpc2VkIHdpdGggcmVzcGVjdCB0byBiaW5kL3JlbGVhc2UsIHdoaWNoIGFyZSBnbG9iYWwgb3BlcmF0aW9ucy4KKwkgKiBTbyB3ZSBob2xkIHRoZSBsb2NrIHRocm91Z2hvdXQsIHVuY29uZGl0aW9uYWxseS4KKwkgKi8KKwlzZGVpX21hcF9sb2NrKG1hcCk7CisKKwliYWNrdXBfc3RhdGUgPSBzZS0+c3RhdGU7CisJaWYgKCFjYW5fc2RlaV9zdGF0ZV90cmFucyhzZSwgRE9fUkVHSVNURVIpKQorCQlnb3RvIGZhbGxiYWNrOworCisJLyoKKwkgKiBXaGVuIHJlZ2lzdGVyaW5nIGZvciBkeW5hbWljIGV2ZW50cywgbWFrZSBzdXJlIGl0J3MgYmVlbiBib3VuZAorCSAqIGFscmVhZHkuIFRoaXMgaGFzIHRvIGJlIHRoZSBjYXNlIGFzLCB3aXRob3V0IGJpbmRpbmcsIHRoZSBjbGllbnQKKwkgKiBjYW4ndCBrbm93IGFib3V0IHRoZSBldmVudCBudW1iZXIgdG8gcmVnaXN0ZXIgZm9yLgorCSAqLworCWlmIChpc19tYXBfZHluYW1pYyhtYXApICYmICFpc19tYXBfYm91bmQobWFwKSkKKwkJZ290byBmYWxsYmFjazsKKworCWlmIChpc19ldmVudF9wcml2YXRlKG1hcCkpIHsKKwkJLyogTXVsdGlwbGUgY2FsbHMgdG8gcmVnaXN0ZXIgYXJlIHBvc3NpYmxlIGZvciBwcml2YXRlIGV2ZW50cyAqLworCQlhc3NlcnQobWFwLT5yZWdfY291bnQgPj0gMCk7CisJfSBlbHNlIHsKKwkJLyogT25seSBzaW5nbGUgY2FsbCB0byByZWdpc3RlciBpcyBwb3NzaWJsZSBmb3Igc2hhcmVkIGV2ZW50cyAqLworCQlhc3NlcnQobWFwLT5yZWdfY291bnQgPT0gMCk7CisJfQorCisJaWYgKGlzX21hcF9ib3VuZChtYXApKSB7CisJCS8qIE1lYW53aGlsZSwgZGlkIGFueSBQRSBBQ0sgdGhlIGludGVycnVwdD8gKi8KKwkJaWYgKHBsYXRfaWNfZ2V0X2ludGVycnVwdF9hY3RpdmUobWFwLT5pbnRyKSkKKwkJCWdvdG8gZmFsbGJhY2s7CisKKwkJLyogVGhlIGludGVycnVwdCBtdXN0IGN1cnJlbnRseSBvd25lZCBieSBOb24tc2VjdXJlICovCisJCWlmIChwbGF0X2ljX2dldF9pbnRlcnJ1cHRfdHlwZShtYXAtPmludHIpICE9IElOVFJfVFlQRV9OUykKKwkJCWdvdG8gZmFsbGJhY2s7CisKKwkJLyoKKwkJICogRGlzYWJsZSBmb3J3YXJkaW5nIG9mIG5ldyBpbnRlcnJ1cHQgdHJpZ2dlcnMgdG8gQ1BVCisJCSAqIGludGVyZmFjZS4KKwkJICovCisJCXBsYXRfaWNfZGlzYWJsZV9pbnRlcnJ1cHQobWFwLT5pbnRyKTsKKworCQkvKgorCQkgKiBBbnkgZXZlbnRzIHRoYXQgYXJlIHRyaWdnZXJlZCBhZnRlciByZWdpc3RlciBhbmQgYmVmb3JlCisJCSAqIGVuYWJsZSBzaG91bGQgcmVtYWluIHBlbmRpbmcuIENsZWFyIGFueSBwcmV2aW91cyBpbnRlcnJ1cHQKKwkJICogdHJpZ2dlcnMgd2hpY2ggYXJlIHBlbmRpbmcgKGV4Y2VwdCBmb3IgU0dJcykuIFRoaXMgaGFzIG5vCisJCSAqIGFmZmVjdCBvbiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy4KKwkJICovCisJCWlmIChldl9udW0gIT0gU0RFSV9FVkVOVF8wKQorCQkJcGxhdF9pY19jbGVhcl9pbnRlcnJ1cHRfcGVuZGluZyhtYXAtPmludHIpOworCisJCS8qIE1hcCBpbnRlcnJ1cHQgdG8gRUwzIGFuZCBwcm9ncmFtIHRoZSBjb3JyZWN0IHByaW9yaXR5ICovCisJCXBsYXRfaWNfc2V0X2ludGVycnVwdF90eXBlKG1hcC0+aW50ciwgSU5UUl9UWVBFX0VMMyk7CisKKwkJLyogUHJvZ3JhbSB0aGUgYXBwcm9wcmlhdGUgaW50ZXJydXB0IHByaW9yaXR5ICovCisJCXBsYXRfaWNfc2V0X2ludGVycnVwdF9wcmlvcml0eShtYXAtPmludHIsIHNkZWlfZXZlbnRfcHJpb3JpdHkobWFwKSk7CisKKwkJLyoKKwkJICogU2V0IHRoZSByb3V0aW5nIG1vZGUgZm9yIHNoYXJlZCBldmVudCBhcyByZXF1ZXN0ZWQuIFdlCisJCSAqIGFscmVhZHkgZW5zdXJlIHRoYXQgc2hhcmVkIGV2ZW50cyBnZXQgYm91bmQgdG8gU1BJcy4KKwkJICovCisJCWlmIChpc19ldmVudF9zaGFyZWQobWFwKSkgeworCQkJcGxhdF9pY19zZXRfc3BpX3JvdXRpbmcobWFwLT5pbnRyLAorCQkJCQkoKGZsYWdzID09IFNERUlfUkVHRl9STV9BTlkpID8KKwkJCQkJIElOVFJfUk9VVElOR19NT0RFX0FOWSA6CisJCQkJCSBJTlRSX1JPVVRJTkdfTU9ERV9QRSksCisJCQkJCSh1X3JlZ2lzdGVyX3QpIG1waWRyKTsKKwkJfQorCX0KKworCS8qIFBvcHVsYXRlIGV2ZW50IGVudHJpZXMgKi8KKwlzZXRfc2RlaV9lbnRyeShzZSwgZXAsIGFyZywgZmxhZ3MsIG1waWRyKTsKKworCS8qIEluY3JlbWVudCByZWdpc3RlciBjb3VudCAqLworCW1hcC0+cmVnX2NvdW50Kys7CisKKwlzZGVpX21hcF91bmxvY2sobWFwKTsKKworCXJldHVybiAwOworCitmYWxsYmFjazoKKwkvKiBSZWluc3RhdGUgcHJldmlvdXMgc3RhdGUgKi8KKwlzZS0+c3RhdGUgPSBiYWNrdXBfc3RhdGU7CisKKwlzZGVpX21hcF91bmxvY2sobWFwKTsKKworCXJldHVybiBTREVJX0VERU5ZOworfQorCisvKiBFbmFibGUgU0RFSSBldmVudCAqLworc3RhdGljIGludCBzZGVpX2V2ZW50X2VuYWJsZShpbnQgZXZfbnVtKQoreworCXNkZWlfZXZfbWFwX3QgKm1hcDsKKwlzZGVpX2VudHJ5X3QgKnNlOworCWludCByZXQsIGJlZm9yZSwgYWZ0ZXI7CisKKwkvKiBDaGVjayBpZiB2YWxpZCBldmVudCBudW1iZXIgKi8KKwltYXAgPSBmaW5kX2V2ZW50X21hcChldl9udW0pOworCWlmICghbWFwKQorCQlyZXR1cm4gU0RFSV9FSU5WQUw7CisKKwlzZSA9IGdldF9ldmVudF9lbnRyeShtYXApOworCXJldCA9IFNERUlfRURFTlk7CisKKwlpZiAoaXNfZXZlbnRfc2hhcmVkKG1hcCkpCisJCXNkZWlfbWFwX2xvY2sobWFwKTsKKworCWJlZm9yZSA9IEdFVF9FVl9TVEFURShzZSwgRU5BQkxFRCk7CisJaWYgKCFjYW5fc2RlaV9zdGF0ZV90cmFucyhzZSwgRE9fRU5BQkxFKSkKKwkJZ290byBmaW5pc2g7CisJYWZ0ZXIgPSBHRVRfRVZfU1RBVEUoc2UsIEVOQUJMRUQpOworCisJLyoKKwkgKiBFbmFibGUgaW50ZXJydXB0IGZvciBib3VuZCBldmVudHMgb25seSBpZiB0aGVyZSdzIGEgY2hhbmdlIGluIGVuYWJsZWQKKwkgKiBzdGF0ZS4KKwkgKi8KKwlpZiAoaXNfbWFwX2JvdW5kKG1hcCkgJiYgKCFiZWZvcmUgJiYgYWZ0ZXIpKQorCQlwbGF0X2ljX2VuYWJsZV9pbnRlcnJ1cHQobWFwLT5pbnRyKTsKKworCXJldCA9IDA7CisKK2ZpbmlzaDoKKwlpZiAoaXNfZXZlbnRfc2hhcmVkKG1hcCkpCisJCXNkZWlfbWFwX3VubG9jayhtYXApOworCisJcmV0dXJuIHJldDsKK30KKworLyogRGlzYWJsZSBTREVJIGV2ZW50ICovCitzdGF0aWMgaW50IHNkZWlfZXZlbnRfZGlzYWJsZShpbnQgZXZfbnVtKQoreworCXNkZWlfZXZfbWFwX3QgKm1hcDsKKwlzZGVpX2VudHJ5X3QgKnNlOworCWludCByZXQsIGJlZm9yZSwgYWZ0ZXI7CisKKwkvKiBDaGVjayBpZiB2YWxpZCBldmVudCBudW1iZXIgKi8KKwltYXAgPSBmaW5kX2V2ZW50X21hcChldl9udW0pOworCWlmICghbWFwKQorCQlyZXR1cm4gU0RFSV9FSU5WQUw7CisKKwlzZSA9IGdldF9ldmVudF9lbnRyeShtYXApOworCXJldCA9IFNERUlfRURFTlk7CisKKwlpZiAoaXNfZXZlbnRfc2hhcmVkKG1hcCkpCisJCXNkZWlfbWFwX2xvY2sobWFwKTsKKworCWJlZm9yZSA9IEdFVF9FVl9TVEFURShzZSwgRU5BQkxFRCk7CisJaWYgKCFjYW5fc2RlaV9zdGF0ZV90cmFucyhzZSwgRE9fRElTQUJMRSkpCisJCWdvdG8gZmluaXNoOworCWFmdGVyID0gR0VUX0VWX1NUQVRFKHNlLCBFTkFCTEVEKTsKKworCS8qCisJICogRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIGJvdW5kIGV2ZW50cyBvbmx5IGlmIHRoZXJlJ3MgYSBjaGFuZ2UgaW4KKwkgKiBlbmFibGVkIHN0YXRlLgorCSAqLworCWlmIChpc19tYXBfYm91bmQobWFwKSAmJiAoYmVmb3JlICYmICFhZnRlcikpCisJCXBsYXRfaWNfZGlzYWJsZV9pbnRlcnJ1cHQobWFwLT5pbnRyKTsKKworCXJldCA9IDA7CisKK2ZpbmlzaDoKKwlpZiAoaXNfZXZlbnRfc2hhcmVkKG1hcCkpCisJCXNkZWlfbWFwX3VubG9jayhtYXApOworCisJcmV0dXJuIHJldDsKK30KKworLyogUXVlcnkgU0RFSSBldmVudCBpbmZvcm1hdGlvbiAqLworc3RhdGljIHVpbnQ2NF90IHNkZWlfZXZlbnRfZ2V0X2luZm8oaW50IGV2X251bSwgaW50IGluZm8pCit7CisJc2RlaV9lbnRyeV90ICpzZTsKKwlzZGVpX2V2X21hcF90ICptYXA7CisKKwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHJlZ2lzdGVyZWQ7CisJdWludDY0X3QgYWZmaW5pdHk7CisKKwkvKiBDaGVjayBpZiB2YWxpZCBldmVudCBudW1iZXIgKi8KKwltYXAgPSBmaW5kX2V2ZW50X21hcChldl9udW0pOworCWlmICghbWFwKQorCQlyZXR1cm4gU0RFSV9FSU5WQUw7CisKKwlzZSA9IGdldF9ldmVudF9lbnRyeShtYXApOworCisJaWYgKGlzX2V2ZW50X3NoYXJlZChtYXApKQorCQlzZGVpX21hcF9sb2NrKG1hcCk7CisKKwkvKiBTYW1wbGUgc3RhdGUgdW5kZXIgbG9jayAqLworCXJlZ2lzdGVyZWQgPSBHRVRfRVZfU1RBVEUoc2UsIFJFR0lTVEVSRUQpOworCWZsYWdzID0gc2UtPnJlZ19mbGFnczsKKwlhZmZpbml0eSA9IHNlLT5hZmZpbml0eTsKKworCWlmIChpc19ldmVudF9zaGFyZWQobWFwKSkKKwkJc2RlaV9tYXBfdW5sb2NrKG1hcCk7CisKKwlzd2l0Y2ggKGluZm8pIHsKKwljYXNlIFNERUlfSU5GT19FVl9UWVBFOgorCQlyZXR1cm4gaXNfZXZlbnRfc2hhcmVkKG1hcCk7CisKKwljYXNlIFNERUlfSU5GT19FVl9OT1RfU0lHTkFMRUQ6CisJCXJldHVybiAhaXNfZXZlbnRfc2lnbmFsYWJsZShtYXApOworCisJY2FzZSBTREVJX0lORk9fRVZfUFJJT1JJVFk6CisJCXJldHVybiBpc19ldmVudF9jcml0aWNhbChtYXApOworCisJY2FzZSBTREVJX0lORk9fRVZfUk9VVElOR19NT0RFOgorCQlpZiAoIWlzX2V2ZW50X3NoYXJlZChtYXApKQorCQkJcmV0dXJuIFNERUlfRUlOVkFMOworCQlpZiAoIXJlZ2lzdGVyZWQpCisJCQlyZXR1cm4gU0RFSV9FREVOWTsKKwkJcmV0dXJuIChmbGFncyA9PSBTREVJX1JFR0ZfUk1fUEUpOworCisJY2FzZSBTREVJX0lORk9fRVZfUk9VVElOR19BRkY6CisJCWlmICghaXNfZXZlbnRfc2hhcmVkKG1hcCkpCisJCQlyZXR1cm4gU0RFSV9FSU5WQUw7CisJCWlmICghcmVnaXN0ZXJlZCkKKwkJCXJldHVybiBTREVJX0VERU5ZOworCQlpZiAoZmxhZ3MgIT0gU0RFSV9SRUdGX1JNX1BFKQorCQkJcmV0dXJuIFNERUlfRUlOVkFMOworCQlyZXR1cm4gYWZmaW5pdHk7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gU0RFSV9FSU5WQUw7CisJfQorfQorCisvKiBVbnJlZ2lzdGVyIGFuIFNERUkgZXZlbnQgKi8KK3N0YXRpYyBpbnQgc2RlaV9ldmVudF91bnJlZ2lzdGVyKGludCBldl9udW0pCit7CisJaW50IHJldCA9IDA7CisJc2RlaV9lbnRyeV90ICpzZTsKKwlzZGVpX2V2X21hcF90ICptYXA7CisKKwkvKiBDaGVjayBpZiB2YWxpZCBldmVudCBudW1iZXIgKi8KKwltYXAgPSBmaW5kX2V2ZW50X21hcChldl9udW0pOworCWlmICghbWFwKQorCQlyZXR1cm4gU0RFSV9FSU5WQUw7CisKKwlzZSA9IGdldF9ldmVudF9lbnRyeShtYXApOworCisJLyoKKwkgKiBFdmVuIHRob3VnaCB1bnJlZ2lzdGVyIG9wZXJhdGlvbiBpcyBwZXItZXZlbnQgKGFkZGl0aW9uYWxseSBmb3IKKwkgKiBwcml2YXRlIGV2ZW50cywgdW5yZWdpc3RyYXRpb24gaXMgcmVxdWlyZWQgaW5kaXZpZHVhbGx5KSwgaXQgaGFzIHRvCisJICogYmUgc2VyaWFsaXNlZCB3aXRoIHJlc3BlY3QgdG8gYmluZC9yZWxlYXNlLCB3aGljaCBhcmUgZ2xvYmFsCisJICogb3BlcmF0aW9ucy4gIFNvIHdlIGhvbGQgdGhlIGxvY2sgdGhyb3VnaG91dCwgdW5jb25kaXRpb25hbGx5LgorCSAqLworCXNkZWlfbWFwX2xvY2sobWFwKTsKKworCWlmICghY2FuX3NkZWlfc3RhdGVfdHJhbnMoc2UsIERPX1VOUkVHSVNURVIpKSB7CisJCS8qCisJCSAqIEV2ZW4gaWYgdGhlIGNhbGwgaXMgaW52YWxpZCwgYW5kIHRoZSBoYW5kbGVyIGlzIHJ1bm5pbmcgKGZvcgorCQkgKiBleGFtcGxlLCBoYXZpbmcgdW5yZWdpc3RlcmVkIGZyb20gYSBydW5uaW5nIGhhbmRsZXIgZWFybGllciksCisJCSAqIHJldHVybiBwZW5kaW5nIGVycm9yIGNvZGU7IG90aGVyd2lzZSwgcmV0dXJuIGRlbnkuCisJCSAqLworCQlyZXQgPSBHRVRfRVZfU1RBVEUoc2UsIFJVTk5JTkcpID8gU0RFSV9FUEVORCA6IFNERUlfRURFTlk7CisKKwkJZ290byBmaW5pc2g7CisJfQorCisJbWFwLT5yZWdfY291bnQtLTsKKwlpZiAoaXNfZXZlbnRfcHJpdmF0ZShtYXApKSB7CisJCS8qIE11bHRpcGxlIGNhbGxzIHRvIHJlZ2lzdGVyIGFyZSBwb3NzaWJsZSBmb3IgcHJpdmF0ZSBldmVudHMgKi8KKwkJYXNzZXJ0KG1hcC0+cmVnX2NvdW50ID49IDApOworCX0gZWxzZSB7CisJCS8qIE9ubHkgc2luZ2xlIGNhbGwgdG8gcmVnaXN0ZXIgaXMgcG9zc2libGUgZm9yIHNoYXJlZCBldmVudHMgKi8KKwkJYXNzZXJ0KG1hcC0+cmVnX2NvdW50ID09IDApOworCX0KKworCWlmIChpc19tYXBfYm91bmQobWFwKSkgeworCQlwbGF0X2ljX2Rpc2FibGVfaW50ZXJydXB0KG1hcC0+aW50cik7CisKKwkJLyoKKwkJICogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHQuIFNraXAgZm9yIFNHSXMgYXMgdGhleSBtYXkgbm90IGJlCisJCSAqIGNsZWFyZWQgb24gaW50ZXJydXB0IGNvbnRyb2xsZXJzLgorCQkgKi8KKwkJaWYgKGV2X251bSAhPSBTREVJX0VWRU5UXzApCisJCQlwbGF0X2ljX2NsZWFyX2ludGVycnVwdF9wZW5kaW5nKG1hcC0+aW50cik7CisKKwkJYXNzZXJ0KHBsYXRfaWNfZ2V0X2ludGVycnVwdF90eXBlKG1hcC0+aW50cikgPT0gSU5UUl9UWVBFX0VMMyk7CisJCXBsYXRfaWNfc2V0X2ludGVycnVwdF90eXBlKG1hcC0+aW50ciwgSU5UUl9UWVBFX05TKTsKKwkJcGxhdF9pY19zZXRfaW50ZXJydXB0X3ByaW9yaXR5KG1hcC0+aW50ciwgTE9XRVNUX0lOVFJfUFJJT1JJVFkpOworCX0KKworCWNsZWFyX2V2ZW50X2VudHJpZXMoc2UpOworCisJLyoKKwkgKiBJZiB0aGUgaGFuZGxlciBpcyBydW5uaW5nIGF0IHRoZSB0aW1lIG9mIHVucmVnaXN0ZXIsIHJldHVybiB0aGUKKwkgKiBwZW5kaW5nIGVycm9yIGNvZGUuCisJICovCisJaWYgKEdFVF9FVl9TVEFURShzZSwgUlVOTklORykpCisJCXJldCA9IFNERUlfRVBFTkQ7CisKK2ZpbmlzaDoKKwlzZGVpX21hcF91bmxvY2sobWFwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFF1ZXJ5IHN0YXR1cyBvZiBhbiBTREVJIGV2ZW50ICovCitzdGF0aWMgaW50IHNkZWlfZXZlbnRfc3RhdHVzKGludCBldl9udW0pCit7CisJc2RlaV9ldl9tYXBfdCAqbWFwOworCXNkZWlfZW50cnlfdCAqc2U7CisJc2RlaV9zdGF0ZV90IHN0YXRlOworCisJLyogQ2hlY2sgaWYgdmFsaWQgZXZlbnQgbnVtYmVyICovCisJbWFwID0gZmluZF9ldmVudF9tYXAoZXZfbnVtKTsKKwlpZiAoIW1hcCkKKwkJcmV0dXJuIFNERUlfRUlOVkFMOworCisJc2UgPSBnZXRfZXZlbnRfZW50cnkobWFwKTsKKworCWlmIChpc19ldmVudF9zaGFyZWQobWFwKSkKKwkJc2RlaV9tYXBfbG9jayhtYXApOworCisJLyogU3RhdGUgdmFsdWUgZGlyZWN0bHkgbWFwcyB0byB0aGUgZXhwZWN0ZWQgcmV0dXJuIGZvcm1hdCAqLworCXN0YXRlID0gc2UtPnN0YXRlOworCisJaWYgKGlzX2V2ZW50X3NoYXJlZChtYXApKQorCQlzZGVpX21hcF91bmxvY2sobWFwKTsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyogQmluZCBhbiBTREVJIGV2ZW50IHRvIGFuIGludGVycnVwdCAqLworc3RhdGljIGludCBzZGVpX2ludGVycnVwdF9iaW5kKGludCBpbnRyX251bSkKK3sKKwlzZGVpX2V2X21hcF90ICptYXA7CisJaW50IHJldHJ5ID0gMSwgc2hhcmVkX21hcHBpbmc7CisKKwkvKiBTR0lzIGFyZSBub3QgYWxsb3dlZCB0byBiZSBib3VuZCAqLworCWlmIChwbGF0X2ljX2lzX3NnaShpbnRyX251bSkpCisJCXJldHVybiBTREVJX0VJTlZBTDsKKworCXNoYXJlZF9tYXBwaW5nID0gcGxhdF9pY19pc19zcGkoaW50cl9udW0pOworCWRvIHsKKwkJLyoKKwkJICogQmFpbCBvdXQgaWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBldmVudCBmb3IgdGhpcyBpbnRlcnJ1cHQsCisJCSAqIGVpdGhlciBwbGF0Zm9ybS1kZWZpbmVkIG9yIGR5bmFtaWMuCisJCSAqLworCQltYXAgPSBmaW5kX2V2ZW50X21hcF9ieV9pbnRyKGludHJfbnVtLCBzaGFyZWRfbWFwcGluZyk7CisJCWlmIChtYXApIHsKKwkJCWlmIChpc19tYXBfZHluYW1pYyhtYXApKSB7CisJCQkJaWYgKGlzX21hcF9ib3VuZChtYXApKSB7CisJCQkJCS8qCisJCQkJCSAqIER5bmFtaWMgZXZlbnQsIGFscmVhZHkgYm91bmQuIFJldHVybgorCQkJCQkgKiBldmVudCBudW1iZXIuCisJCQkJCSAqLworCQkJCQlyZXR1cm4gbWFwLT5ldl9udW07CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBCaW5kaW5nIG5vbi1keW5hbWljIGV2ZW50ICovCisJCQkJcmV0dXJuIFNERUlfRUlOVkFMOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogVGhlIGludGVycnVwdCBpcyBub3QgYm91bmQgeWV0LiBUcnkgdG8gZmluZCBhIGZyZWUgc2xvdCB0bworCQkgKiBiaW5kIGl0LiBGcmVlIGR5bmFtaWMgbWFwcGluZ3MgaGF2ZSB0aGVpciBpbnRlcnJ1cHQgc2V0IGFzCisJCSAqIFNERUlfRFlOX0lSUS4KKwkJICovCisJCW1hcCA9IGZpbmRfZXZlbnRfbWFwX2J5X2ludHIoU0RFSV9EWU5fSVJRLCBzaGFyZWRfbWFwcGluZyk7CisJCWlmICghbWFwKQorCQkJcmV0dXJuIFNERUlfRU5PTUVNOworCisJCS8qIFRoZSByZXR1cm5lZCBtYXBwaW5nIG11c3QgYmUgZHluYW1pYyAqLworCQlhc3NlcnQoaXNfbWFwX2R5bmFtaWMobWFwKSk7CisKKwkJLyoKKwkJICogV2UgY2Fubm90IGFzc2VydCBmb3IgYm91bmQgbWFwcyBoZXJlLCBhcyB3ZSBtaWdodCBiZSByYWNpbmcKKwkJICogd2l0aCBhbm90aGVyIGJpbmQuCisJCSAqLworCisJCS8qIFRoZSByZXF1ZXN0ZWQgaW50ZXJydXB0IG11c3QgYWxyZWFkeSBiZWxvbmcgdG8gTlMgKi8KKwkJaWYgKHBsYXRfaWNfZ2V0X2ludGVycnVwdF90eXBlKGludHJfbnVtKSAhPSBJTlRSX1RZUEVfTlMpCisJCQlyZXR1cm4gU0RFSV9FREVOWTsKKworCQkvKgorCQkgKiBJbnRlcnJ1cHQgcHJvZ3JhbW1pbmcgYW5kIG93bmVyc2hpcCB0cmFuc2ZlciBhcmUgZGVmZXJyZWQKKwkJICogdW50aWwgcmVnaXN0ZXIuCisJCSAqLworCisJCXNkZWlfbWFwX2xvY2sobWFwKTsKKwkJaWYgKCFpc19tYXBfYm91bmQobWFwKSkgeworCQkJbWFwLT5pbnRyID0gaW50cl9udW07CisJCQlzZXRfbWFwX2JvdW5kKG1hcCk7CisJCQlyZXRyeSA9IDA7CisJCX0KKwkJc2RlaV9tYXBfdW5sb2NrKG1hcCk7CisJfSB3aGlsZSAocmV0cnkpOworCisJcmV0dXJuIG1hcC0+ZXZfbnVtOworfQorCisvKiBSZWxlYXNlIGEgYm91bmQgU0RFSSBldmVudCBwcmV2aW91c2x5IHRvIGFuIGludGVycnVwdCAqLworc3RhdGljIGludCBzZGVpX2ludGVycnVwdF9yZWxlYXNlKGludCBldl9udW0pCit7CisJaW50IHJldCA9IDA7CisJc2RlaV9ldl9tYXBfdCAqbWFwOworCXNkZWlfZW50cnlfdCAqc2U7CisKKwkvKiBDaGVjayBpZiB2YWxpZCBldmVudCBudW1iZXIgKi8KKwltYXAgPSBmaW5kX2V2ZW50X21hcChldl9udW0pOworCWlmICghbWFwKQorCQlyZXR1cm4gU0RFSV9FSU5WQUw7CisKKwlpZiAoIWlzX21hcF9keW5hbWljKG1hcCkpCisJCXJldHVybiBTREVJX0VJTlZBTDsKKworCXNlID0gZ2V0X2V2ZW50X2VudHJ5KG1hcCk7CisKKwlzZGVpX21hcF9sb2NrKG1hcCk7CisKKwkvKiBFdmVudCBtdXN0IGhhdmUgYmVlbiB1bnJlZ2lzdGVyZWQgYmVmb3JlIHJlbGVhc2UgKi8KKwlpZiAobWFwLT5yZWdfY291bnQgIT0gMCkgeworCQlyZXQgPSBTREVJX0VERU5ZOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwkvKgorCSAqIEludGVycnVwdCByZWxlYXNlIG5ldmVyIGNhdXNlcyB0aGUgc3RhdGUgdG8gY2hhbmdlLiBXZSBvbmx5IGNoZWNrCisJICogd2hldGhlciBpdCdzIHBlcm1pc3NpYmxlIG9yIG5vdC4KKwkgKi8KKwlpZiAoIWNhbl9zZGVpX3N0YXRlX3RyYW5zKHNlLCBET19SRUxFQVNFKSkgeworCQlyZXQgPSBTREVJX0VERU5ZOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwlpZiAoaXNfbWFwX2JvdW5kKG1hcCkpIHsKKwkJLyoKKwkJICogRGVueSByZWxlYXNlIGlmIHRoZSBpbnRlcnJ1cHQgaXMgYWN0aXZlLCB3aGljaCBtZWFucyBpdCdzCisJCSAqIHByb2JhYmx5IGJlaW5nIGFja25vd2xlZGdlZCBhbmQgaGFuZGxlZCBlbHNld2hlcmUuCisJCSAqLworCQlpZiAocGxhdF9pY19nZXRfaW50ZXJydXB0X2FjdGl2ZShtYXAtPmludHIpKSB7CisJCQlyZXQgPSBTREVJX0VERU5ZOworCQkJZ290byBmaW5pc2g7CisJCX0KKworCQkvKgorCQkgKiBJbnRlcnJ1cHQgcHJvZ3JhbW1pbmcgYW5kIG93bmVyc2hpcCB0cmFuc2ZlciBhcmUgYWxyZWFkeSBkb25lCisJCSAqIGR1cmluZyB1bnJlZ2lzdGVyLgorCQkgKi8KKworCQltYXAtPmludHIgPSBTREVJX0RZTl9JUlE7CisJCWNscl9tYXBfYm91bmQobWFwKTsKKwl9IGVsc2UgeworCQlTREVJX0xPRygiRXJyb3IgcmVsZWFzZSBib3VuZDolZCBjbnQ6JWRcbiIsIGlzX21hcF9ib3VuZChtYXApLAorCQkJCW1hcC0+cmVnX2NvdW50KTsKKwkJcmV0ID0gU0RFSV9FSU5WQUw7CisJfQorCitmaW5pc2g6CisJc2RlaV9tYXBfdW5sb2NrKG1hcCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBQZXJmb3JtIHJlc2V0IG9mIHByaXZhdGUgU0RFSSBldmVudHMgKi8KK3N0YXRpYyBpbnQgc2RlaV9wcml2YXRlX3Jlc2V0KHZvaWQpCit7CisJc2RlaV9ldl9tYXBfdCAqbWFwOworCWludCByZXQgPSAwLCBmaW5hbF9yZXQgPSAwLCBpOworCisJLyogVW5yZWdpc3RlciBhbGwgcHJpdmF0ZSBldmVudHMgKi8KKwlmb3JfZWFjaF9wcml2YXRlX21hcChpLCBtYXApIHsKKwkJLyoKKwkJICogVGhlIHVucmVnaXN0ZXIgY2FuIGZhaWwgaWYgdGhlIGV2ZW50IGlzIG5vdCByZWdpc3RlcmVkLCB3aGljaAorCQkgKiBpcyBhbGxvd2VkLCBhbmQgYSBkZW55IHdpbGwgYmUgcmV0dXJuZWQuIEJ1dCBpZiB0aGUgZXZlbnQgaXMKKwkJICogcnVubmluZyBvciB1bnJlZ2lzdGVyIHBlbmRpbmcsIHRoZSBjYWxsIGZhaWxzLgorCQkgKi8KKwkJcmV0ID0gc2RlaV9ldmVudF91bnJlZ2lzdGVyKG1hcC0+ZXZfbnVtKTsKKwkJaWYgKChyZXQgPT0gU0RFSV9FUEVORCkgJiYgKGZpbmFsX3JldCA9PSAwKSkKKwkJCWZpbmFsX3JldCA9IFNERUlfRURFTlk7CisJfQorCisJcmV0dXJuIGZpbmFsX3JldDsKK30KKworLyogUGVyZm9ybSByZXNldCBvZiBzaGFyZWQgU0RFSSBldmVudHMgKi8KK3N0YXRpYyBpbnQgc2RlaV9zaGFyZWRfcmVzZXQodm9pZCkKK3sKKwljb25zdCBzZGVpX21hcHBpbmdfdCAqbWFwcGluZzsKKwlzZGVpX2V2X21hcF90ICptYXA7CisJaW50IHJldCA9IDAsIGZpbmFsX3JldCA9IDAsIGksIGo7CisKKwkvKiBVbnJlZ2lzdGVyIGFsbCBzaGFyZWQgZXZlbnRzICovCisJZm9yX2VhY2hfc2hhcmVkX21hcChpLCBtYXApIHsKKwkJLyoKKwkJICogVGhlIHVucmVnaXN0ZXIgY2FuIGZhaWwgaWYgdGhlIGV2ZW50IGlzIG5vdCByZWdpc3RlcmVkLCB3aGljaAorCQkgKiBpcyBhbGxvd2VkLCBhbmQgYSBkZW55IHdpbGwgYmUgcmV0dXJuZWQuIEJ1dCBpZiB0aGUgZXZlbnQgaXMKKwkJICogcnVubmluZyBvciB1bnJlZ2lzdGVyIHBlbmRpbmcsIHRoZSBjYWxsIGZhaWxzLgorCQkgKi8KKwkJcmV0ID0gc2RlaV9ldmVudF91bnJlZ2lzdGVyKG1hcC0+ZXZfbnVtKTsKKwkJaWYgKChyZXQgPT0gU0RFSV9FUEVORCkgJiYgKGZpbmFsX3JldCA9PSAwKSkKKwkJCWZpbmFsX3JldCA9IFNERUlfRURFTlk7CisJfQorCisJaWYgKGZpbmFsX3JldCAhPSAwKQorCQlyZXR1cm4gZmluYWxfcmV0OworCisJLyoKKwkgKiBMb29wIHRocm91Z2ggYm90aCBwcml2YXRlIGFuZCBzaGFyZWQgbWFwcGluZ3MsIGFuZCByZWxlYXNlIGFsbAorCSAqIGJpbmRpbmdzLgorCSAqLworCWZvcl9lYWNoX21hcHBpbmdfdHlwZShpLCBtYXBwaW5nKSB7CisJCWl0ZXJhdGVfbWFwcGluZyhtYXBwaW5nLCBqLCBtYXApIHsKKwkJCS8qCisJCQkgKiBSZWxlYXNlIGJpbmRpbmdzIGZvciBtYXBwaW5ncyB0aGF0IGFyZSBkeW5hbWljIGFuZAorCQkJICogYm91bmQuCisJCQkgKi8KKwkJCWlmIChpc19tYXBfZHluYW1pYyhtYXApICYmIGlzX21hcF9ib3VuZChtYXApKSB7CisJCQkJLyoKKwkJCQkgKiBBbnkgZmFpbHVyZSB0byByZWxlYXNlIHdvdWxkIG1lYW4gdGhlcmUgaXMgYXQKKwkJCQkgKiBsZWFzdCBhIFBFIHJlZ2lzdGVyZWQgZm9yIHRoZSBldmVudC4KKwkJCQkgKi8KKwkJCQlyZXQgPSBzZGVpX2ludGVycnVwdF9yZWxlYXNlKG1hcC0+ZXZfbnVtKTsKKwkJCQlpZiAoKHJldCAhPSAwKSAmJiAoZmluYWxfcmV0ID09IDApKQorCQkJCQlmaW5hbF9yZXQgPSByZXQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gZmluYWxfcmV0OworfQorCisvKiBTZW5kIGEgc2lnbmFsIHRvIGFub3RoZXIgU0RFSSBjbGllbnQgUEUgKi8KK2ludCBzZGVpX3NpZ25hbChpbnQgZXZlbnQsIHVpbnQ2NF90IHRhcmdldF9wZSkKK3sKKwlzZGVpX2V2X21hcF90ICptYXA7CisKKwkvKiBPbmx5IGV2ZW50IDAgY2FuIGJlIHNpZ25hbGxlZCAqLworCWlmIChldmVudCAhPSBTREVJX0VWRU5UXzApCisJCXJldHVybiBTREVJX0VJTlZBTDsKKworCS8qIEZpbmQgbWFwcGluZyBmb3IgZXZlbnQgMCAqLworCW1hcCA9IGZpbmRfZXZlbnRfbWFwKFNERUlfRVZFTlRfMCk7CisJaWYgKCFtYXApCisJCXJldHVybiBTREVJX0VJTlZBTDsKKworCS8qIFRoZSBldmVudCBtdXN0IGJlIHNpZ25hbGFibGUgKi8KKwlpZiAoIWlzX2V2ZW50X3NpZ25hbGFibGUobWFwKSkKKwkJcmV0dXJuIFNERUlfRUlOVkFMOworCisJLyogVmFsaWRhdGUgdGFyZ2V0ICovCisJaWYgKHBsYXRfY29yZV9wb3NfYnlfbXBpZHIodGFyZ2V0X3BlKSA8IDApCisJCXJldHVybiBTREVJX0VJTlZBTDsKKworCS8qIFJhaXNlIFNHSS4gUGxhdGZvcm0gd2lsbCB2YWxpZGF0ZSB0YXJnZXRfcGUgKi8KKwlwbGF0X2ljX3JhaXNlX2VsM19zZ2kobWFwLT5pbnRyLCAodV9yZWdpc3Rlcl90KSB0YXJnZXRfcGUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFF1ZXJ5IFNERUkgZGlzcGF0Y2hlciBmZWF0dXJlcyAqLwordWludDY0X3Qgc2RlaV9mZWF0dXJlcyh1bnNpZ25lZCBpbnQgZmVhdHVyZSkKK3sKKwlpZiAoZmVhdHVyZSA9PSBTREVJX0ZFQVRVUkVfQklORF9TTE9UUykgeworCQlyZXR1cm4gRkVBVFVSRV9CSU5EX1NMT1RTKG51bV9keW5fcHJpdl9zbG90cywKKwkJCQludW1fZHluX3NocmRfc2xvdHMpOworCX0KKworCXJldHVybiBTREVJX0VJTlZBTDsKK30KKworLyogU0RFSSB0b3AgbGV2ZWwgaGFuZGxlciBmb3Igc2VydmljaW5nIFNNQ3MgKi8KK3VpbnQ2NF90IHNkZWlfc21jX2hhbmRsZXIodWludDMyX3Qgc21jX2ZpZCwKKwkJCSAgdWludDY0X3QgeDEsCisJCQkgIHVpbnQ2NF90IHgyLAorCQkJICB1aW50NjRfdCB4MywKKwkJCSAgdWludDY0X3QgeDQsCisJCQkgIHZvaWQgKmNvb2tpZSwKKwkJCSAgdm9pZCAqaGFuZGxlLAorCQkJICB1aW50NjRfdCBmbGFncykKK3sKKworCXVpbnQ2NF90IHg1OworCWludCBzcyA9IGdldF9pbnRlcnJ1cHRfc3JjX3NzKGZsYWdzKTsKKwlpbnQ2NF90IHJldDsKKwl1bnNpZ25lZCBpbnQgcmVzdW1lID0gMDsKKworCWlmIChzcyAhPSBOT05fU0VDVVJFKQorCQlTTUNfUkVUMShoYW5kbGUsIFNNQ19VTkspOworCisJLyogVmVyaWZ5IHRoZSBjYWxsZXIgRUwgKi8KKwlpZiAoR0VUX0VMKHJlYWRfc3Bzcl9lbDMoKSkgIT0gc2RlaV9jbGllbnRfZWwoKSkKKwkJU01DX1JFVDEoaGFuZGxlLCBTTUNfVU5LKTsKKworCXN3aXRjaCAoc21jX2ZpZCkgeworCWNhc2UgU0RFSV9WRVJTSU9OOgorCQlTREVJX0xPRygiPiBWRVJcbiIpOworCQlyZXQgPSBzZGVpX3ZlcnNpb24oKTsKKwkJU0RFSV9MT0coIjwgVkVSOiVseFxuIiwgcmV0KTsKKwkJU01DX1JFVDEoaGFuZGxlLCByZXQpOworCQlicmVhazsKKworCWNhc2UgU0RFSV9FVkVOVF9SRUdJU1RFUjoKKwkJeDUgPSBTTUNfR0VUX0dQKGhhbmRsZSwgQ1RYX0dQUkVHX1g1KTsKKwkJU0RFSV9MT0coIj4gUkVHKG46JWQgZTolbHggYTolbHggZjoleCBtOiVseClcbiIsIChpbnQpIHgxLAorCQkJCXgyLCB4MywgKGludCkgeDQsIHg1KTsKKwkJcmV0ID0gc2RlaV9ldmVudF9yZWdpc3Rlcih4MSwgeDIsIHgzLCB4NCwgeDUpOworCQlTREVJX0xPRygiPCBSRUc6JWxkXG4iLCByZXQpOworCQlTTUNfUkVUMShoYW5kbGUsIHJldCk7CisJCWJyZWFrOworCisJY2FzZSBTREVJX0VWRU5UX0VOQUJMRToKKwkJU0RFSV9MT0coIj4gRU5BQkxFKG46JWQpXG4iLCAoaW50KSB4MSk7CisJCXJldCA9IHNkZWlfZXZlbnRfZW5hYmxlKHgxKTsKKwkJU0RFSV9MT0coIjwgRU5BQkxFOiVsZFxuIiwgcmV0KTsKKwkJU01DX1JFVDEoaGFuZGxlLCByZXQpOworCQlicmVhazsKKworCWNhc2UgU0RFSV9FVkVOVF9ESVNBQkxFOgorCQlTREVJX0xPRygiPiBESVNBQkxFKG46JWQpXG4iLCAoaW50KSB4MSk7CisJCXJldCA9IHNkZWlfZXZlbnRfZGlzYWJsZSh4MSk7CisJCVNERUlfTE9HKCI8IERJU0FCTEU6JWxkXG4iLCByZXQpOworCQlTTUNfUkVUMShoYW5kbGUsIHJldCk7CisJCWJyZWFrOworCisJY2FzZSBTREVJX0VWRU5UX0NPTlRFWFQ6CisJCVNERUlfTE9HKCI+IENUWChwOiVkKTolbHhcbiIsIChpbnQpIHgxLCByZWFkX21waWRyX2VsMSgpKTsKKwkJcmV0ID0gc2RlaV9ldmVudF9jb250ZXh0KGhhbmRsZSwgeDEpOworCQlTREVJX0xPRygiPCBDVFg6JWxkXG4iLCByZXQpOworCQlTTUNfUkVUMShoYW5kbGUsIHJldCk7CisJCWJyZWFrOworCisJY2FzZSBTREVJX0VWRU5UX0NPTVBMRVRFX0FORF9SRVNVTUU6CisJCXJlc3VtZSA9IDE7CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBTREVJX0VWRU5UX0NPTVBMRVRFOgorCQlTREVJX0xPRygiPiBDT01QTEVURShyOiVkIHN0YS9lcDolbHgpOiVseFxuIiwgcmVzdW1lLCB4MSwKKwkJCQlyZWFkX21waWRyX2VsMSgpKTsKKwkJcmV0ID0gc2RlaV9ldmVudF9jb21wbGV0ZShyZXN1bWUsIHgxKTsKKwkJU0RFSV9MT0coIjwgQ09NUExFVEU6JWx4XG4iLCByZXQpOworCisJCS8qCisJCSAqIFNldCBlcnJvciBjb2RlIG9ubHkgaWYgdGhlIGNhbGwgZmFpbGVkLiBJZiB0aGUgY2FsbAorCQkgKiBzdWNjZWVkZWQsIHdlIGRpc2NhcmQgdGhlIGRpc3BhdGNoZWQgY29udGV4dCwgYW5kIHJlc3RvcmUgdGhlCisJCSAqIGludGVycnVwdGVkIGNvbnRleHQgdG8gYSBwcmlzdGluZSBjb25kaXRpb24sIGFuZCB0aGVyZWZvcmUKKwkJICogc2hvdWxkbid0IGJlIG1vZGlmaWVkLiBXZSBkb24ndCByZXR1cm4gdG8gdGhlIGNhbGxlciBpbiB0aGlzCisJCSAqIGNhc2UgYW55d2F5LgorCQkgKi8KKwkJaWYgKHJldCkKKwkJCVNNQ19SRVQxKGhhbmRsZSwgcmV0KTsKKworCQlTTUNfUkVUMChoYW5kbGUpOworCQlicmVhazsKKworCWNhc2UgU0RFSV9FVkVOVF9TVEFUVVM6CisJCVNERUlfTE9HKCI+IFNUQVQobjolZClcbiIsIChpbnQpIHgxKTsKKwkJcmV0ID0gc2RlaV9ldmVudF9zdGF0dXMoeDEpOworCQlTREVJX0xPRygiPCBTVEFUOiVsZFxuIiwgcmV0KTsKKwkJU01DX1JFVDEoaGFuZGxlLCByZXQpOworCQlicmVhazsKKworCWNhc2UgU0RFSV9FVkVOVF9HRVRfSU5GTzoKKwkJU0RFSV9MT0coIj4gSU5GTyhuOiVkLCAlZClcbiIsIChpbnQpIHgxLCAoaW50KSB4Mik7CisJCXJldCA9IHNkZWlfZXZlbnRfZ2V0X2luZm8oeDEsIHgyKTsKKwkJU0RFSV9MT0coIjwgSU5GTzolbGRcbiIsIHJldCk7CisJCVNNQ19SRVQxKGhhbmRsZSwgcmV0KTsKKwkJYnJlYWs7CisKKwljYXNlIFNERUlfRVZFTlRfVU5SRUdJU1RFUjoKKwkJU0RFSV9MT0coIj4gVU5SRUcobjolZClcbiIsIChpbnQpIHgxKTsKKwkJcmV0ID0gc2RlaV9ldmVudF91bnJlZ2lzdGVyKHgxKTsKKwkJU0RFSV9MT0coIjwgVU5SRUc6JWxkXG4iLCByZXQpOworCQlTTUNfUkVUMShoYW5kbGUsIHJldCk7CisJCWJyZWFrOworCisJY2FzZSBTREVJX1BFX1VOTUFTSzoKKwkJU0RFSV9MT0coIj4gVU5NQVNLOiVseFxuIiwgcmVhZF9tcGlkcl9lbDEoKSk7CisJCXNkZWlfcGVfdW5tYXNrKCk7CisJCVNERUlfTE9HKCI8IFVOTUFTSzolZFxuIiwgMCk7CisJCVNNQ19SRVQxKGhhbmRsZSwgMCk7CisJCWJyZWFrOworCisJY2FzZSBTREVJX1BFX01BU0s6CisJCVNERUlfTE9HKCI+IE1BU0s6JWx4XG4iLCByZWFkX21waWRyX2VsMSgpKTsKKwkJcmV0ID0gc2RlaV9wZV9tYXNrKCk7CisJCVNERUlfTE9HKCI8IE1BU0s6JWxkXG4iLCByZXQpOworCQlTTUNfUkVUMShoYW5kbGUsIHJldCk7CisJCWJyZWFrOworCisJY2FzZSBTREVJX0lOVEVSUlVQVF9CSU5EOgorCQlTREVJX0xPRygiPiBCSU5EKCVkKVxuIiwgKGludCkgeDEpOworCQlyZXQgPSBzZGVpX2ludGVycnVwdF9iaW5kKHgxKTsKKwkJU0RFSV9MT0coIjwgQklORDolbGRcbiIsIHJldCk7CisJCVNNQ19SRVQxKGhhbmRsZSwgcmV0KTsKKwkJYnJlYWs7CisKKwljYXNlIFNERUlfSU5URVJSVVBUX1JFTEVBU0U6CisJCVNERUlfTE9HKCI+IFJFTCglZClcbiIsIChpbnQpIHgxKTsKKwkJcmV0ID0gc2RlaV9pbnRlcnJ1cHRfcmVsZWFzZSh4MSk7CisJCVNERUlfTE9HKCI8IFJFTDolbGRcbiIsIHJldCk7CisJCVNNQ19SRVQxKGhhbmRsZSwgcmV0KTsKKwkJYnJlYWs7CisKKwljYXNlIFNERUlfU0hBUkVEX1JFU0VUOgorCQlTREVJX0xPRygiPiBTX1JFU0VUKCk6JWx4XG4iLCByZWFkX21waWRyX2VsMSgpKTsKKwkJcmV0ID0gc2RlaV9zaGFyZWRfcmVzZXQoKTsKKwkJU0RFSV9MT0coIjwgU19SRVNFVDolbGRcbiIsIHJldCk7CisJCVNNQ19SRVQxKGhhbmRsZSwgcmV0KTsKKwkJYnJlYWs7CisKKwljYXNlIFNERUlfUFJJVkFURV9SRVNFVDoKKwkJU0RFSV9MT0coIj4gUF9SRVNFVCgpOiVseFxuIiwgcmVhZF9tcGlkcl9lbDEoKSk7CisJCXJldCA9IHNkZWlfcHJpdmF0ZV9yZXNldCgpOworCQlTREVJX0xPRygiPCBQX1JFU0VUOiVsZFxuIiwgcmV0KTsKKwkJU01DX1JFVDEoaGFuZGxlLCByZXQpOworCQlicmVhazsKKworCWNhc2UgU0RFSV9FVkVOVF9ST1VUSU5HX1NFVDoKKwkJU0RFSV9MT0coIj4gUk9VVEVfU0VUKG46JWQgZjolbHggYWZmOiVseClcbiIsIChpbnQpIHgxLCB4MiwgeDMpOworCQlyZXQgPSBzZGVpX2V2ZW50X3JvdXRpbmdfc2V0KHgxLCB4MiwgeDMpOworCQlTREVJX0xPRygiPCBST1VURV9TRVQ6JWxkXG4iLCByZXQpOworCQlTTUNfUkVUMShoYW5kbGUsIHJldCk7CisJCWJyZWFrOworCisJY2FzZSBTREVJX0ZFQVRVUkVTOgorCQlTREVJX0xPRygiPiBGVFJTKGY6JWx4KVxuIiwgeDEpOworCQlyZXQgPSBzZGVpX2ZlYXR1cmVzKHgxKTsKKwkJU0RFSV9MT0coIjwgRlRSUzolbHhcbiIsIHJldCk7CisJCVNNQ19SRVQxKGhhbmRsZSwgcmV0KTsKKwkJYnJlYWs7CisKKwljYXNlIFNERUlfRVZFTlRfU0lHTkFMOgorCQlTREVJX0xPRygiPiBTSUdOQUwoZTolbHggdDolbHgpXG4iLCB4MSwgeDIpOworCQlyZXQgPSBzZGVpX3NpZ25hbCh4MSwgeDIpOworCQlTREVJX0xPRygiPCBTSUdOQUw6JWxkXG4iLCByZXQpOworCQlTTUNfUkVUMShoYW5kbGUsIHJldCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCVdBUk4oIlVuaW1wbGVtZW50ZWQgU0RFSSBDYWxsOiAweCV4XG4iLCBzbWNfZmlkKTsKKwlTTUNfUkVUMShoYW5kbGUsIFNNQ19VTkspOworfQorCisvKiBTdWJzY3JpYmUgdG8gUFNDSSBDUFUgb24gdG8gaW5pdGlhbGl6ZSBwZXItQ1BVIFNERUkgY29uZmlndXJhdGlvbiAqLworU1VCU0NSSUJFX1RPX0VWRU5UKHBzY2lfY3B1X29uX2ZpbmlzaCwgc2RlaV9jcHVfb25faW5pdCk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zdGRfc3ZjL3NkZWkvc2RlaV9wcml2YXRlLmggYi9zZXJ2aWNlcy9zdGRfc3ZjL3NkZWkvc2RlaV9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkYjQxOQotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL3N0ZF9zdmMvc2RlaS9zZGVpX3ByaXZhdGUuaApAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2lmbmRlZiBfX1NERUlfUFJJVkFURV9IX18KKyNkZWZpbmUgX19TREVJX1BSSVZBVEVfSF9fCisKKyNpbmNsdWRlIDxhcmNoX2hlbHBlcnMuaD4KKyNpbmNsdWRlIDxkZWJ1Zy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8aW50ZXJydXB0X21nbXQuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHNkZWkuaD4KKyNpbmNsdWRlIDxzcGlubG9jay5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDx0eXBlcy5oPgorI2luY2x1ZGUgPHV0aWxzX2RlZi5oPgorCisjaWZkZWYgQUFSQ0gzMgorIyBlcnJvciBTREVJIGlzIGltcGxlbWVudGVkIG9ubHkgZm9yIEFBcmNoNjQgc3lzdGVtcworI2VuZGlmCisKKyNpZm5kZWYgUExBVF9TREVJX0NSSVRJQ0FMX1BSSQorIyBlcnJvciBQbGF0Zm9ybSBtdXN0IGRlZmluZSBTREVJIGNyaXRpY2FsIHByaW9yaXR5IHZhbHVlCisjZW5kaWYKKworI2lmbmRlZiBQTEFUX1NERUlfTk9STUFMX1BSSQorIyBlcnJvciBQbGF0Zm9ybSBtdXN0IGRlZmluZSBTREVJIG5vcm1hbCBwcmlvcml0eSB2YWx1ZQorI2VuZGlmCisKKy8qIE91dHB1dCBTREVJIGxvZ3MgYXMgdmVyYm9zZSAqLworI2RlZmluZSBTREVJX0xPRyguLi4pCVZFUkJPU0UoIlNERUk6ICIgX19WQV9BUkdTX18pCisKKy8qIFNERUkgaGFuZGxlciB1bnJlZ2lzdGVyZWQgc3RhdGUuIFRoaXMgaXMgdGhlIGRlZmF1bHQgc3RhdGUuICovCisjZGVmaW5lIFNERUlfU1RBVEVfVU5SRUdJU1RFUkVECQkwCisKKy8qIFNERSBldmVudCBzdGF0dXMgdmFsdWVzIGluIGJpdCBwb3NpdGlvbiAqLworI2RlZmluZSBTREVJX1NUQVRGX1JFR0lTVEVSRUQJCTAKKyNkZWZpbmUgU0RFSV9TVEFURl9FTkFCTEVECQkxCisjZGVmaW5lIFNERUlfU1RBVEZfUlVOTklORwkJMgorCisvKiBTREVJIFNNQyBlcnJvciBjb2RlcyAqLworI2RlZmluZQlTREVJX0VJTlZBTAkoLTIpCisjZGVmaW5lCVNERUlfRURFTlkJKC0zKQorI2RlZmluZQlTREVJX0VQRU5ECSgtNSkKKyNkZWZpbmUJU0RFSV9FTk9NRU0JKC0xMCkKKworLyoKKyAqICdpbmZvJyBwYXJhbWV0ZXIgdG8gU0RFSV9FVkVOVF9HRVRfSU5GTyBTTUMuCisgKgorICogTm90ZSB0aGF0IHRoZSBTREVJIHYxLjAgc3BlaWZpY2F0aW9uIG1pc3Rha2VubHkgZW51bWVyYXRlcyB0aGUKKyAqIFNERUlfSU5GT19FVl9TSUdOQUxFRCBhcyBTREVJX0lORk9fU0lHTkFMRUQuIFRoaXMgd2lsbCBiZSBjb3JyZWN0ZWQgaW4gYQorICogZnV0dXJlIHZlcnNpb24uCisgKi8KKyNkZWZpbmUgU0RFSV9JTkZPX0VWX1RZUEUJCTAKKyNkZWZpbmUgU0RFSV9JTkZPX0VWX05PVF9TSUdOQUxFRAkxCisjZGVmaW5lIFNERUlfSU5GT19FVl9QUklPUklUWQkJMgorI2RlZmluZSBTREVJX0lORk9fRVZfUk9VVElOR19NT0RFCTMKKyNkZWZpbmUgU0RFSV9JTkZPX0VWX1JPVVRJTkdfQUZGCTQKKworI2RlZmluZSBTREVJX1BSSVZBVEVfTUFQUElORygpCSgmc2RlaV9nbG9iYWxfbWFwcGluZ3NbX1NERUlfTUFQX0lEWF9QUklWXSkKKyNkZWZpbmUgU0RFSV9TSEFSRURfTUFQUElORygpCSgmc2RlaV9nbG9iYWxfbWFwcGluZ3NbX1NERUlfTUFQX0lEWF9TSFJEXSkKKworI2RlZmluZSBmb3JfZWFjaF9tYXBwaW5nX3R5cGUoX2ksIF9tYXBwaW5nKSBcCisJZm9yIChfaSA9IDAsIF9tYXBwaW5nID0gJnNkZWlfZ2xvYmFsX21hcHBpbmdzW2ldOyBcCisJCQlfaSA8IF9TREVJX01BUF9JRFhfTUFYOyBcCisJCQlfaSsrLCBfbWFwcGluZyA9ICZzZGVpX2dsb2JhbF9tYXBwaW5nc1tpXSkKKworI2RlZmluZSBpdGVyYXRlX21hcHBpbmcoX21hcHBpbmcsIF9pLCBfbWFwKSBcCisJZm9yIChfbWFwID0gKF9tYXBwaW5nKS0+bWFwLCBfaSA9IDA7IFwKKwkJCV9pIDwgKF9tYXBwaW5nKS0+bnVtX21hcHM7IFwKKwkJCV9pKyssIF9tYXArKykKKworI2RlZmluZSBmb3JfZWFjaF9wcml2YXRlX21hcChfaSwgX21hcCkgXAorCWl0ZXJhdGVfbWFwcGluZyhTREVJX1BSSVZBVEVfTUFQUElORygpLCBfaSwgX21hcCkKKworI2RlZmluZSBmb3JfZWFjaF9zaGFyZWRfbWFwKF9pLCBfbWFwKSBcCisJaXRlcmF0ZV9tYXBwaW5nKFNERUlfU0hBUkVEX01BUFBJTkcoKSwgX2ksIF9tYXApCisKKy8qIFNERUlfRkVBVFVSRVMgKi8KKyNkZWZpbmUgU0RFSV9GRUFUVVJFX0JJTkRfU0xPVFMJCTAKKyNkZWZpbmUgQklORF9TTE9UU19NQVNLCQkJMHhmZmZmCisjZGVmaW5lIEZFQVRVUkVTX1NIQVJFRF9TTE9UU19TSElGVAkxNgorI2RlZmluZSBGRUFUVVJFU19QUklWQVRFX1NMT1RTX1NISUZUCTAKKyNkZWZpbmUgRkVBVFVSRV9CSU5EX1NMT1RTKF9wcml2LCBfc2hyZCkgXAorCSgoKChfcHJpdikgJiBCSU5EX1NMT1RTX01BU0spIDw8IEZFQVRVUkVTX1BSSVZBVEVfU0xPVFNfU0hJRlQpIHwgXAorCSAoKChfc2hyZCkgJiBCSU5EX1NMT1RTX01BU0spIDw8IEZFQVRVUkVTX1NIQVJFRF9TTE9UU19TSElGVCkpCisKKyNkZWZpbmUgR0VUX0VWX1NUQVRFKF9lLCBfcykJZ2V0X2V2X3N0YXRlX2JpdChfZSwgU0RFSV9TVEFURl8jI19zKQorI2RlZmluZSBTRVRfRVZfU1RBVEUoX2UsIF9zKQljbHJfZXZfc3RhdGVfYml0KF9lLT5zdGF0ZSwgU0RFSV9TVEFURl8jI19zKQorCitzdGF0aWMgaW5saW5lIGludCBpc19ldmVudF9wcml2YXRlKHNkZWlfZXZfbWFwX3QgKm1hcCkKK3sKKwlyZXR1cm4gKChtYXAtPm1hcF9mbGFncyAmIEJJVChfU0RFSV9NQVBGX1BSSVZBVEVfU0hJRlQpKSAhPSAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfZXZlbnRfc2hhcmVkKHNkZWlfZXZfbWFwX3QgKm1hcCkKK3sKKwlyZXR1cm4gIWlzX2V2ZW50X3ByaXZhdGUobWFwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfZXZlbnRfY3JpdGljYWwoc2RlaV9ldl9tYXBfdCAqbWFwKQoreworCXJldHVybiAoKG1hcC0+bWFwX2ZsYWdzICYgQklUKF9TREVJX01BUEZfQ1JJVElDQUxfU0hJRlQpKSAhPSAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfZXZlbnRfbm9ybWFsKHNkZWlfZXZfbWFwX3QgKm1hcCkKK3sKKwlyZXR1cm4gIWlzX2V2ZW50X2NyaXRpY2FsKG1hcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2V2ZW50X3NpZ25hbGFibGUoc2RlaV9ldl9tYXBfdCAqbWFwKQoreworCXJldHVybiAoKG1hcC0+bWFwX2ZsYWdzICYgQklUKF9TREVJX01BUEZfU0lHTkFMQUJMRV9TSElGVCkpICE9IDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19tYXBfZHluYW1pYyhzZGVpX2V2X21hcF90ICptYXApCit7CisJcmV0dXJuICgobWFwLT5tYXBfZmxhZ3MgJiBCSVQoX1NERUlfTUFQRl9EWU5BTUlDX1NISUZUKSkgIT0gMCk7Cit9CisKKy8qCisgKiBDaGVja3Mgd2hldGhlciBhbiBldmVudCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gaW50ZXJydXB0LiBTdGF0aWMgZXZlbnRzIGFsd2F5cworICogcmV0dXJuIHRydWUsIGFuZCBkeW5hbWljIGV2ZW50cyByZXR1cm4gd2hldGhlciBTREVJX0lOVEVSUlVQVF9CSU5EIGhhZCBiZWVuCisgKiBjYWxsZWQgb24gdGhlbS4gVGhpcyBjYW4gYmUgdXNlZCBvbiBib3RoIHN0YXRpYyBvciBkeW5hbWljIGV2ZW50cyB0byBjaGVjaworICogZm9yIGFuIGFzc29jaWF0ZWQgaW50ZXJydXB0LgorICovCitzdGF0aWMgaW5saW5lIGludCBpc19tYXBfYm91bmQoc2RlaV9ldl9tYXBfdCAqbWFwKQoreworCXJldHVybiAoKG1hcC0+bWFwX2ZsYWdzICYgQklUKF9TREVJX01BUEZfQk9VTkRfU0hJRlQpKSAhPSAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9tYXBfYm91bmQoc2RlaV9ldl9tYXBfdCAqbWFwKQoreworCW1hcC0+bWFwX2ZsYWdzIHw9IEJJVChfU0RFSV9NQVBGX0JPVU5EX1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNscl9tYXBfYm91bmQoc2RlaV9ldl9tYXBfdCAqbWFwKQoreworCW1hcC0+bWFwX2ZsYWdzICY9IH4oQklUKF9TREVJX01BUEZfQk9VTkRfU0hJRlQpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfc2VjdXJlX3NnaSh1bnNpZ25lZCBpbnQgaW50cikKK3sKKwlyZXR1cm4gKHBsYXRfaWNfaXNfc2dpKGludHIpICYmCisJCQkocGxhdF9pY19nZXRfaW50ZXJydXB0X3R5cGUoaW50cikgPT0gSU5UUl9UWVBFX0VMMykpOworfQorCisvKgorICogRGV0ZXJtaW5lIEVMIG9mIHRoZSBjbGllbnQuIElmIEVMMiBpcyBpbXBsZW1lbnRlZCAoaGVuY2UgdGhlIGVuYWJsZWQgSENFCisgKiBiaXQpLCBkZWVtIEVMMjsgb3RoZXJ3aXNlLCBkZWVtIEVMMS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2RlaV9jbGllbnRfZWwodm9pZCkKK3sKKwlyZXR1cm4gcmVhZF9zY3JfZWwzKCkgJiBTQ1JfSENFX0JJVCA/IE1PREVfRUwyIDogTU9ERV9FTDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNkZWlfZXZlbnRfcHJpb3JpdHkoc2RlaV9ldl9tYXBfdCAqbWFwKQoreworCXJldHVybiBpc19ldmVudF9jcml0aWNhbChtYXApID8gUExBVF9TREVJX0NSSVRJQ0FMX1BSSSA6CisJCVBMQVRfU0RFSV9OT1JNQUxfUFJJOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfZXZfc3RhdGVfYml0KHNkZWlfZW50cnlfdCAqc2UsIHVuc2lnbmVkIGludCBiaXRfbm8pCit7CisJcmV0dXJuICgoc2UtPnN0YXRlICYgQklUKGJpdF9ubykpICE9IDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xyX2V2X3N0YXRlX2JpdChzZGVpX2VudHJ5X3QgKnNlLCB1bnNpZ25lZCBpbnQgYml0X25vKQoreworCXNlLT5zdGF0ZSAmPSB+QklUKGJpdF9ubyk7Cit9CisKKy8qIFNERUkgYWN0aW9ucyBmb3Igc3RhdGUgdHJhbnNpdGlvbiAqLwordHlwZWRlZiBlbnVtIHsKKwkvKgorCSAqIEFjdGlvbnMgcmVzdWx0aW5nIGZyb20gY2xpZW50IHJlcXVlc3RzLiBUaGVzZSBkaXJlY3RseSBtYXAgdG8gU01DCisJICogY2FsbHMuIE5vdGUgdGhhdCB0aGUgc3RhdGUgdGFibGUgY29sdW1ucyBhcmUgbGlzdGVkIGluIHRoaXMgb3JkZXIKKwkgKiB0b28uCisJICovCisJRE9fUkVHSVNURVIgPSAwLAorCURPX1JFTEVBU0UgPSAxLAorCURPX0VOQUJMRSA9IDIsCisJRE9fRElTQUJMRSA9IDMsCisJRE9fVU5SRUdJU1RFUiA9IDQsCisJRE9fUk9VVElORyA9IDUsCisJRE9fQ09OVEVYVCA9IDYsCisJRE9fQ09NUExFVEUgPSA3LAorCURPX0NPTVBMRVRFX1JFU1VNRSA9IDgsCisKKwkvKiBBY3Rpb24gZm9yIGV2ZW50IGRpc3BhdGNoICovCisJRE9fRElTUEFUQ0ggPSA5LAorCisJRE9fTUFYLAorfSBzZGVpX2FjdGlvbl90OworCit0eXBlZGVmIGVudW0geworCVNERUlfTk9STUFMLAorCVNERUlfQ1JJVElDQUwKK30gc2RlaV9jbGFzc190OworCitzdGF0aWMgaW5saW5lIHZvaWQgc2RlaV9tYXBfbG9jayhzZGVpX2V2X21hcF90ICptYXApCit7CisJc3Bpbl9sb2NrKCZtYXAtPmxvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2RlaV9tYXBfdW5sb2NrKHNkZWlfZXZfbWFwX3QgKm1hcCkKK3sKKwlzcGluX3VubG9jaygmbWFwLT5sb2NrKTsKK30KKworZXh0ZXJuIGNvbnN0IHNkZWlfbWFwcGluZ190IHNkZWlfZ2xvYmFsX21hcHBpbmdzW107CitleHRlcm4gc2RlaV9lbnRyeV90IHNkZWlfcHJpdmF0ZV9ldmVudF90YWJsZVtdOworZXh0ZXJuIHNkZWlfZW50cnlfdCBzZGVpX3NoYXJlZF9ldmVudF90YWJsZVtdOworCit2b2lkIGluaXRfc2RlaV9zdGF0ZSh2b2lkKTsKKworc2RlaV9ldl9tYXBfdCAqZmluZF9ldmVudF9tYXBfYnlfaW50cihpbnQgaW50cl9udW0sIGludCBzaGFyZWQpOworc2RlaV9ldl9tYXBfdCAqZmluZF9ldmVudF9tYXAoaW50IGV2X251bSk7CitzZGVpX2VudHJ5X3QgKmdldF9ldmVudF9lbnRyeShzZGVpX2V2X21hcF90ICptYXApOworCitpbnQgc2RlaV9ldmVudF9jb250ZXh0KHZvaWQgKmhhbmRsZSwgdW5zaWduZWQgaW50IHBhcmFtKTsKK2ludCBzZGVpX2V2ZW50X2NvbXBsZXRlKGludCByZXN1bWUsIHVpbnQ2NF90IGFyZyk7CisKK3ZvaWQgc2RlaV9wZV91bm1hc2sodm9pZCk7Cit1bnNpZ25lZCBpbnQgc2RlaV9wZV9tYXNrKHZvaWQpOworCitpbnQgc2RlaV9pbnRyX2hhbmRsZXIodWludDMyX3QgaW50ciwgdWludDMyX3QgZmxhZ3MsIHZvaWQgKmhhbmRsZSwKKwkJdm9pZCAqY29va2llKTsKK2Jvb2wgY2FuX3NkZWlfc3RhdGVfdHJhbnMoc2RlaV9lbnRyeV90ICpzZSwgc2RlaV9hY3Rpb25fdCBhY3QpOworCisjZW5kaWYgLyogX19TREVJX1BSSVZBVEVfSF9fICovCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zdGRfc3ZjL3NkZWkvc2RlaV9zdGF0ZS5jIGIvc2VydmljZXMvc3RkX3N2Yy9zZGVpL3NkZWlfc3RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjYwZGZkCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvc3RkX3N2Yy9zZGVpL3NkZWlfc3RhdGUuYwpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGNhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSAic2RlaV9wcml2YXRlLmgiCisKKy8qIEFsaWFzZXMgZm9yIFNERUkgaGFuZGxlciBzdGF0ZXM6ICdSJ3VubmluZywgJ0UnbmFibGVkLCBhbmQgcmUnRydpc3RlcmVkICovCisjZGVmaW5lIHJfCQkwCisjZGVmaW5lIFJfCQkoMXUgPDwgU0RFSV9TVEFURl9SVU5OSU5HKQorCisjZGVmaW5lIGVfCQkwCisjZGVmaW5lIEVfCQkoMXUgPDwgU0RFSV9TVEFURl9FTkFCTEVEKQorCisjZGVmaW5lIGdfCQkwCisjZGVmaW5lIEdfCQkoMXUgPDwgU0RFSV9TVEFURl9SRUdJU1RFUkVEKQorCisvKiBBbGwgcG9zc2libGUgY29tcG9zaXRlIGhhbmRsZXIgc3RhdGVzICovCisjZGVmaW5lIHJlZ18JCShyXyB8IGVfIHwgZ18pCisjZGVmaW5lIHJlR18JCShyXyB8IGVfIHwgR18pCisjZGVmaW5lIHJFZ18JCShyXyB8IEVfIHwgZ18pCisjZGVmaW5lIHJFR18JCShyXyB8IEVfIHwgR18pCisjZGVmaW5lIFJlZ18JCShSXyB8IGVfIHwgZ18pCisjZGVmaW5lIFJlR18JCShSXyB8IGVfIHwgR18pCisjZGVmaW5lIFJFZ18JCShSXyB8IEVfIHwgZ18pCisjZGVmaW5lIFJFR18JCShSXyB8IEVfIHwgR18pCisKKyNkZWZpbmUgTUFYX1NUQVRFUwkoUkVHXyArIDEpCisKKy8qIEludmFsaWQgc3RhdGUgKi8KKyNkZWZpbmUJU0RFSV9TVEFURV9JTlZBTElECSgoc2RlaV9zdGF0ZV90KSAoLTEpKQorCisvKiBObyBjaGFuZ2UgaW4gc3RhdGUgKi8KKyNkZWZpbmUJU0RFSV9TVEFURV9OT1AJCSgoc2RlaV9zdGF0ZV90KSAoLTIpKQorCisjZGVmaW5lIFhfX18JCVNERUlfU1RBVEVfSU5WQUxJRAorI2RlZmluZSBOT1BfCQlTREVJX1NUQVRFX05PUAorCisvKiBFbnN1cmUgc3BlY2lhbCBzdGF0ZXMgZG9uJ3Qgb3ZlcmxhcCB3aXRoIHZhbGlkIG9uZXMgKi8KK0NBU1NFUlQoWF9fXyA+IFJFR18sIHNkZWlfc3RhdGVfb3ZlcmxhcF9pbnZhbGlkKTsKK0NBU1NFUlQoTk9QXyA+IFJFR18sIHNkZWlfc3RhdGVfb3ZlcmxhcF9ub3ApOworCisvKgorICogU0RFSSBoYW5kbGVyIHN0YXRlIG1hY2hpbmU6IHJlZmVyIHRvIHNlY3Rpb25zIDYuMSBhbmQgNi4xLjIgb2YgdGhlIFNERUkgdjEuMAorICogc3BlY2lmaWNhdGlvbjoKKyAqCisgKiBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2MuZGVuMDA1NGEvQVJNX0RFTjAwNTRBX1NvZnR3YXJlX0RlbGVnYXRlZF9FeGNlcHRpb25fSW50ZXJmYWNlLnBkZgorICoKKyAqIE5vdCBhbGwgY2FsbHMgY29udHJpYnV0ZSB0byBoYW5kbGVyIHN0YXRlIHRyYW5zaXRpb24uIFRoaXMgdGFibGUgaXMgYWxzbyB1c2VkCisgKiB0byB2YWxpZGF0ZSB3aGV0aGVyIGEgY2FsbCBpcyBwZXJtaXNzaWJsZSBhdCBhIGdpdmVuIGhhbmRsZXIgc3RhdGU6CisgKgorICogIC0gWF9fXyBkZW5vdGVzIGEgZm9yYmlkZGVuIHRyYW5zaXRpb247CisgKiAgLSBOT1BfIGRlbm90ZXMgYSBwZXJtaXR0ZWQgdHJhbnNpdGlvbiwgYnV0IHRoZXJlJ3Mgbm8gY2hhbmdlIGluIHN0YXRlOworICogIC0gT3RoZXJ3aXNlLCBYWFhfIGdpdmVzIHRoZSBuZXcgc3RhdGUuCisgKgorICogRElTUFthdGNoXSBpcyBhIHRyYW5zaXRpb24gYWRkZWQgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGlzIG5vdCBtZW50aW9uZWQKKyAqIGluIHRoZSBzcGVjLgorICoKKyAqIFRob3NlIGNhbGxzIHRoYXQgdGhlIHNwZWMgbWVudGlvbnMgYXMgY2FuIGJlIG1hZGUgYW55IHRpbWUgZG9uJ3QgcGljdHVyZSBpbgorICogdGhpcyB0YWJsZS4KKyAqLworCitzdGF0aWMgY29uc3Qgc2RlaV9zdGF0ZV90IHNkZWlfc3RhdGVfdGFibGVbTUFYX1NUQVRFU11bRE9fTUFYXSA9IHsKKy8qCisgKglBY3Rpb246CQlSRUcgICAgIFJFTAlFTkEJRElTQQlVUkVHCVJPVVQJQ1RYCUNPTVAJQ09NUFIJRElTUAorICoJTm90ZXM6CQkJWzNdCQkJWzFdCVszXQlbM11bNF0JCQlbMl0KKyAqLworCS8qIEhhbmRsZXIgdW5yZWdpc3RlcmVkLCBkaXNhYmxlZCwgYW5kIG5vdCBydW5uaW5nLiBUaGlzIGlzIHRoZSBkZWZhdWx0IHN0YXRlLiAqLworLyogMCAqLwlbcmVnX10gPSB7CXJlR18sCU5PUF8sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCX0sCisKKwkvKiBIYW5kbGVyIHVucmVnaXN0ZXJlZCBhbmQgcnVubmluZyAqLworLyogNCAqLwlbUmVnX10gPSB7CVhfX18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCU5PUF8sCXJlZ18sCXJlZ18sCVhfX18sCX0sCisKKwkvKiBIYW5kbGVyIHJlZ2lzdGVyZWQgKi8KKy8qIDEgKi8JW3JlR19dID0gewlYX19fLAlYX19fLAlyRUdfLAlOT1BfLAlyZWdfLAlOT1BfLAlYX19fLAlYX19fLAlYX19fLAlYX19fLAl9LAorCisJLyogSGFuZGxlciByZWdpc3RlcmVkIGFuZCBydW5uaW5nICovCisvKiA1ICovCVtSZUdfXSA9IHsJWF9fXywJWF9fXywJUkVHXywJTk9QXywJUmVnXywJWF9fXywJTk9QXywJcmVHXywJcmVHXywJWF9fXywJfSwKKworCS8qIEhhbmRsZXIgcmVnaXN0ZXJlZCBhbmQgZW5hYmxlZCAqLworLyogMyAqLwlbckVHX10gPSB7CVhfX18sCVhfX18sCU5PUF8sCXJlR18sCXJlZ18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCVJFR18sCX0sCisKKwkvKiBIYW5kbGVyIHJlZ2lzdGVyZWQsIGVuYWJsZWQsIGFuZCBydW5uaW5nICovCisvKiA3ICovCVtSRUdfXSA9IHsJWF9fXywJWF9fXywJTk9QXywJUmVHXywJUmVnXywJWF9fXywJTk9QXywJckVHXywJckVHXywJWF9fXywJfSwKKworCS8qCisJICogSW52YWxpZCBzdGF0ZXM6IG5vIHZhbGlkIHRyYW5zaXRpb24gd291bGQgbGVhdmUgdGhlIGhhbmRsZXIgaW4gdGhlc2UKKwkgKiBzdGF0ZXM7IGFuZCBubyB0cmFuc2l0aW9uIGZyb20gdGhlc2Ugc3RhdGVzIGlzIHBvc3NpYmxlIGVpdGhlci4KKwkgKi8KKworCS8qCisJICogSGFuZGxlciBjYW4ndCBiZSBlbmFibGVkIHdpdGhvdXQgYmVpbmcgcmVnaXN0ZXJlZC4gSS5lLiwgWEVnIGlzCisJICogaW1wb3NzaWJsZS4KKwkgKi8KKy8qIDIgKi8JW3JFZ19dID0gewlYX19fLAlYX19fLAlYX19fLAlYX19fLAlYX19fLAlYX19fLAlYX19fLAlYX19fLAlYX19fLAlYX19fLAl9LAorLyogNiAqLwlbUkVnX10gPSB7CVhfX18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCVhfX18sCX0sCit9OworCisvKgorICogWzFdIFVucmVnaXN0ZXIgd2lsbCBhbHdheXMgYWxzbyBkaXNhYmxlIHRoZSBldmVudCwgc28gdGhlIG5ldyBzdGF0ZSB3aWxsIGhhdmUKKyAqICAgICBYZWcuCisgKiBbMl0gRXZlbnQgaXMgY29uc2lkZXJlZCBmb3IgZGlzcGF0Y2ggb25seSB3aGVuIGl0J3MgYm90aCByZWdpc3RlcmVkIGFuZAorICogICAgIGVuYWJsZWQuCisgKiBbM10gTmV2ZXIgY2F1c2VzIGNoYW5nZSBpbiBzdGF0ZS4KKyAqIFs0XSBPbmx5IGFsbG93ZWQgd2hlbiBydW5uaW5nLgorICovCisKKy8qCisgKiBHaXZlbiBhbiBhY3Rpb24sIHRyYW5zaXRpb24gdGhlIHN0YXRlIG9mIGFuIGV2ZW50IGJ5IGxvb2tpbmcgdXAgdGhlIHN0YXRlCisgKiB0YWJsZSBhYm92ZToKKyAqCisgKiAgLSBSZXR1cm4gZmFsc2UgZm9yIGludmFsaWQgdHJhbnNpdGlvbjsKKyAqICAtIFJldHVybiB0cnVlIGZvciB2YWxpZCB0cmFuc2l0aW9uIHRoYXQgY2F1c2VzIG5vIGNoYW5nZSBpbiBzdGF0ZTsKKyAqICAtIE90aGVyd2lzZSwgdXBkYXRlIHN0YXRlIGFuZCByZXR1cm4gdHJ1ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIGhvbGRzIG5lY2Vzc2FyeSBsb2Nrcy4gSWYgdGhlCisgKiB0cmFuc2l0aW9uIGhhcyBjb25zdHJhaW5zIG90aGVyIHRoYW4gdGhlIHN0YXRlIHRhYmxlIGRlc2NyaWJlcywgdGhlIGNhbGxlciBpcworICogZXhwZWN0ZWQgdG8gcmVzdG9yZSB0aGUgcHJldmlvdXMgc3RhdGUuIFNlZSBzZGVpX2V2ZW50X3JlZ2lzdGVyKCkgZm9yCisgKiBleGFtcGxlLgorICovCitib29sIGNhbl9zZGVpX3N0YXRlX3RyYW5zKHNkZWlfZW50cnlfdCAqc2UsIHNkZWlfYWN0aW9uX3QgYWN0KQoreworCXNkZWlfc3RhdGVfdCBuZXh0OworCisJYXNzZXJ0KGFjdCA8IERPX01BWCk7CisJaWYgKHNlLT5zdGF0ZSA+PSBNQVhfU1RBVEVTKSB7CisJCVdBUk4oIiBldmVudCBzdGF0ZSBpbnZhbGlkOiAleFxuIiwgc2UtPnN0YXRlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCW5leHQgPSBzZGVpX3N0YXRlX3RhYmxlW3NlLT5zdGF0ZV1bYWN0XTsKKwlzd2l0Y2ggKG5leHQpIHsKKwljYXNlIFNERUlfU1RBVEVfSU5WQUxJRDoKKwkJcmV0dXJuIGZhbHNlOworCisJY2FzZSBTREVJX1NUQVRFX05PUDoKKwkJcmV0dXJuIHRydWU7CisKKwlkZWZhdWx0OgorCQkvKiBWYWxpZCB0cmFuc2l0aW9uLiBVcGRhdGUgc3RhdGUuICovCisJCVNERUlfTE9HKCIgZXZlbnQgc3RhdGUgMHgleCA9PiAweCV4XG4iLCBzZS0+c3RhdGUsIG5leHQpOworCQlzZS0+c3RhdGUgPSBuZXh0OworCisJCXJldHVybiB0cnVlOworCX0KK30KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3N0ZF9zdmMvc3BtL2FhcmNoNjQvc3BtX2hlbHBlcnMuUyBiL3NlcnZpY2VzL3N0ZF9zdmMvc3BtL2FhcmNoNjQvc3BtX2hlbHBlcnMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM1ODExCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvc3RkX3N2Yy9zcG0vYWFyY2g2NC9zcG1faGVscGVycy5TCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxhc21fbWFjcm9zLlM+CisjaW5jbHVkZSAiLi4vc3BtX3ByaXZhdGUuaCIKKworCS5nbG9iYWwgc3BtX3NlY3VyZV9wYXJ0aXRpb25fZW50ZXIKKwkuZ2xvYmFsIHNwbV9zZWN1cmVfcGFydGl0aW9uX2V4aXQKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggU1BfRUwwIGFzIHN0YWNrLiBIZXJlIHdlIHN0YXNoIG91ciBFTDMKKwkgKiBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIG9uIHRvIHRoZSBzdGFjayBhcyBhIHBhcnQgb2Ygc2F2aW5nIHRoZSBDCisJICogcnVudGltZSBhbmQgZW50ZXIgdGhlIHNlY3VyZSBwYXlsb2FkLgorCSAqICd4MCcgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgd2hlcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIEMKKwkgKiAgcnVudGltZSBjb250ZXh0IGlzIHRvIGJlIHNhdmVkLgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworZnVuYyBzcG1fc2VjdXJlX3BhcnRpdGlvbl9lbnRlcgorCS8qIE1ha2Ugc3BhY2UgZm9yIHRoZSByZWdpc3RlcnMgdGhhdCB3ZSdyZSBnb2luZyB0byBzYXZlICovCisJbW92CXgzLCBzcAorCXN0cgl4MywgW3gwLCAjMF0KKwlzdWIJc3AsIHNwLCAjU1BfQ19SVF9DVFhfU0laRQorCisJLyogU2F2ZSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIG9uIHRvIHRoZSBzdGFjayAqLworCXN0cAl4MTksIHgyMCwgW3NwLCAjU1BfQ19SVF9DVFhfWDE5XQorCXN0cAl4MjEsIHgyMiwgW3NwLCAjU1BfQ19SVF9DVFhfWDIxXQorCXN0cAl4MjMsIHgyNCwgW3NwLCAjU1BfQ19SVF9DVFhfWDIzXQorCXN0cAl4MjUsIHgyNiwgW3NwLCAjU1BfQ19SVF9DVFhfWDI1XQorCXN0cAl4MjcsIHgyOCwgW3NwLCAjU1BfQ19SVF9DVFhfWDI3XQorCXN0cAl4MjksIHgzMCwgW3NwLCAjU1BfQ19SVF9DVFhfWDI5XQorCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogRXZlcnl0aGluZyBpcyBzZXR1cCBub3cuIGVsM19leGl0KCkgd2lsbCB1c2UgdGhlIHNlY3VyZSBjb250ZXh0IHRvCisJICogcmVzdG9yZSB0byB0aGUgZ2VuZXJhbCBwdXJwb3NlIGFuZCBFTDMgc3lzdGVtIHJlZ2lzdGVycyB0byBFUkVUCisJICogaW50byB0aGUgc2VjdXJlIHBheWxvYWQuCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisJYgllbDNfZXhpdAorZW5kZnVuYyBzcG1fc2VjdXJlX3BhcnRpdGlvbl9lbnRlcgorCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCAneDAnIHBvaW50aW5nIHRvIGEgQyBydW50aW1lIGNvbnRleHQKKwkgKiBzYXZlZCBpbiBzcG1fc2VjdXJlX3BhcnRpdGlvbl9lbnRlcigpLgorCSAqIEl0IHJlc3RvcmVzIHRoZSBzYXZlZCByZWdpc3RlcnMgYW5kIGp1bXBzIHRvIHRoYXQgcnVudGltZSB3aXRoICd4MCcKKwkgKiBhcyB0aGUgbmV3IFNQIHJlZ2lzdGVyLiBUaGlzIGRlc3Ryb3lzIHRoZSBDIHJ1bnRpbWUgY29udGV4dCB0aGF0IGhhZAorCSAqIGJlZW4gYnVpbHQgb24gdGhlIHN0YWNrIGJlbG93IHRoZSBzYXZlZCBjb250ZXh0IGJ5IHRoZSBjYWxsZXIuIExhdGVyCisJICogdGhlIHNlY29uZCBwYXJhbWV0ZXIgJ3gxJyBpcyBwYXNzZWQgYXMgYSByZXR1cm4gdmFsdWUgdG8gdGhlIGNhbGxlci4KKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KK2Z1bmMgc3BtX3NlY3VyZV9wYXJ0aXRpb25fZXhpdAorCS8qIFJlc3RvcmUgdGhlIHByZXZpb3VzIHN0YWNrICovCisJbW92CXNwLCB4MAorCisJLyogUmVzdG9yZSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIG9uIHRvIHRoZSBzdGFjayAqLworCWxkcAl4MTksIHgyMCwgW3gwLCAjKFNQX0NfUlRfQ1RYX1gxOSAtIFNQX0NfUlRfQ1RYX1NJWkUpXQorCWxkcAl4MjEsIHgyMiwgW3gwLCAjKFNQX0NfUlRfQ1RYX1gyMSAtIFNQX0NfUlRfQ1RYX1NJWkUpXQorCWxkcAl4MjMsIHgyNCwgW3gwLCAjKFNQX0NfUlRfQ1RYX1gyMyAtIFNQX0NfUlRfQ1RYX1NJWkUpXQorCWxkcAl4MjUsIHgyNiwgW3gwLCAjKFNQX0NfUlRfQ1RYX1gyNSAtIFNQX0NfUlRfQ1RYX1NJWkUpXQorCWxkcAl4MjcsIHgyOCwgW3gwLCAjKFNQX0NfUlRfQ1RYX1gyNyAtIFNQX0NfUlRfQ1RYX1NJWkUpXQorCWxkcAl4MjksIHgzMCwgW3gwLCAjKFNQX0NfUlRfQ1RYX1gyOSAtIFNQX0NfUlRfQ1RYX1NJWkUpXQorCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogVGhpcyBzaG91bGQgdGFrZSB1cyBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgY2FsbCB0byB0aGUKKwkgKiBsYXN0IHNwbV9zZWN1cmVfcGFydGl0aW9uX2VudGVyKCkuKiBQbGFjZSB0aGUgc2Vjb25kIHBhcmFtZXRlciB0byB4MAorCSAqIHNvIHRoYXQgdGhlIGNhbGxlciB3aWxsIHNlZSBpdCBhcyBhIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBvcmlnaW5hbAorCSAqIGVudHJ5IGNhbGwuCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisJbW92CXgwLCB4MQorCXJldAorZW5kZnVuYyBzcG1fc2VjdXJlX3BhcnRpdGlvbl9leGl0CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zdGRfc3ZjL3NwbS9hYXJjaDY0L3NwbV9zaGltX2V4Y2VwdGlvbnMuUyBiL3NlcnZpY2VzL3N0ZF9zdmMvc3BtL2FhcmNoNjQvc3BtX3NoaW1fZXhjZXB0aW9ucy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODI0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9zdGRfc3ZjL3NwbS9hYXJjaDY0L3NwbV9zaGltX2V4Y2VwdGlvbnMuUwpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPGFyY2guaD4KKyNpbmNsdWRlIDxhc21fbWFjcm9zLlM+CisjaW5jbHVkZSA8YmxfY29tbW9uLmg+CisjaW5jbHVkZSA8Y29udGV4dC5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVmVyeSBzaW1wbGUgc3RhY2tsZXNzIGV4Y2VwdGlvbiBoYW5kbGVycyB1c2VkIGJ5IHRoZSBzcG0gc2hpbSBsYXllci4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwkuZ2xvYmwJc3BtX3NoaW1fZXhjZXB0aW9uc19wdHIKKwordmVjdG9yX2Jhc2Ugc3BtX3NoaW1fZXhjZXB0aW9uc19wdHIsIC5zcG1fc2hpbV9leGNlcHRpb25zCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIEN1cnJlbnQgRUwgd2l0aCBTUDAgOiAweDAgLSAweDIwMAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCit2ZWN0b3JfZW50cnkgU3luY2hyb25vdXNFeGNlcHRpb25TUDAsIC5zcG1fc2hpbV9leGNlcHRpb25zCisJYgkuCisJY2hlY2tfdmVjdG9yX3NpemUgU3luY2hyb25vdXNFeGNlcHRpb25TUDAKKwordmVjdG9yX2VudHJ5IElycVNQMCwgLnNwbV9zaGltX2V4Y2VwdGlvbnMKKwliCS4KKwljaGVja192ZWN0b3Jfc2l6ZSBJcnFTUDAKKwordmVjdG9yX2VudHJ5IEZpcVNQMCwgLnNwbV9zaGltX2V4Y2VwdGlvbnMKKwliCS4KKwljaGVja192ZWN0b3Jfc2l6ZSBGaXFTUDAKKwordmVjdG9yX2VudHJ5IFNFcnJvclNQMCwgLnNwbV9zaGltX2V4Y2VwdGlvbnMKKwliCS4KKwljaGVja192ZWN0b3Jfc2l6ZSBTRXJyb3JTUDAKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogQ3VycmVudCBFTCB3aXRoIFNQeDogMHgyMDAgLSAweDQwMAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCit2ZWN0b3JfZW50cnkgU3luY2hyb25vdXNFeGNlcHRpb25TUHgsIC5zcG1fc2hpbV9leGNlcHRpb25zCisJYgkuCisJY2hlY2tfdmVjdG9yX3NpemUgU3luY2hyb25vdXNFeGNlcHRpb25TUHgKKwordmVjdG9yX2VudHJ5IElycVNQeCwgLnNwbV9zaGltX2V4Y2VwdGlvbnMKKwliCS4KKwljaGVja192ZWN0b3Jfc2l6ZSBJcnFTUHgKKwordmVjdG9yX2VudHJ5IEZpcVNQeCwgLnNwbV9zaGltX2V4Y2VwdGlvbnMKKwliCS4KKwljaGVja192ZWN0b3Jfc2l6ZSBGaXFTUHgKKwordmVjdG9yX2VudHJ5IFNFcnJvclNQeCwgLnNwbV9zaGltX2V4Y2VwdGlvbnMKKwliCS4KKwljaGVja192ZWN0b3Jfc2l6ZSBTRXJyb3JTUHgKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogTG93ZXIgRUwgdXNpbmcgQUFyY2g2NCA6IDB4NDAwIC0gMHg2MDAuIE5vIGV4Y2VwdGlvbnMKKwkgKiBhcmUgaGFuZGxlZCBzaW5jZSBzZWN1cmVfcGFydGl0aW9uIGRvZXMgbm90IGltcGxlbWVudAorCSAqIGEgbG93ZXIgRUwKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLwordmVjdG9yX2VudHJ5IFN5bmNocm9ub3VzRXhjZXB0aW9uQTY0LCAuc3BtX3NoaW1fZXhjZXB0aW9ucworCW1zcgl0cGlkcl9lbDEsIHgzMAorCW1ycwl4MzAsIGVzcl9lbDEKKwl1YmZ4CXgzMCwgeDMwLCAjRVNSX0VDX1NISUZULCAjRVNSX0VDX0xFTkdUSAorCisJY21wCXgzMCwgI0VDX0FBUkNINjRfU1ZDCisJYi5lcSAJZG9fc21jCisKKwljbXAJeDMwLCAjRUNfQUFSQ0gzMl9TVkMKKwliLmVxCWRvX3NtYworCisJY21wCXgzMCwgI0VDX0FBUkNINjRfU1lTCisJYi5lcQloYW5kbGVfc3lzX3RyYXAKKworCS8qIEZhaWwgaW4gYWxsIHRoZSBvdGhlciBjYXNlcyAqLworCWIJcGFuaWMKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIFRlbGwgU1BNIHRoYXQgd2UgYXJlIGRvbmUgaW5pdGlhbGlzaW5nCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCitkb19zbWM6CisJbXJzCXgzMCwgdHBpZHJfZWwxCisJc21jCSMwCisJZXJldAorCisJLyogQUFyY2g2NCBzeXN0ZW0gaW5zdHJ1Y3Rpb25zIHRyYXAgYXJlIGhhbmRsZWQgYXMgYSBwYW5pYyBmb3Igbm93ICovCitoYW5kbGVfc3lzX3RyYXA6CitwYW5pYzoKKwliCXBhbmljCisJY2hlY2tfdmVjdG9yX3NpemUgU3luY2hyb25vdXNFeGNlcHRpb25BNjQKKwordmVjdG9yX2VudHJ5IElycUE2NCwgLnNwbV9zaGltX2V4Y2VwdGlvbnMKKwliCS4KKwljaGVja192ZWN0b3Jfc2l6ZSBJcnFBNjQKKwordmVjdG9yX2VudHJ5IEZpcUE2NCwgLnNwbV9zaGltX2V4Y2VwdGlvbnMKKwliCS4KKwljaGVja192ZWN0b3Jfc2l6ZSBGaXFBNjQKKwordmVjdG9yX2VudHJ5IFNFcnJvckE2NCwgLnNwbV9zaGltX2V4Y2VwdGlvbnMKKwliCS4KKwljaGVja192ZWN0b3Jfc2l6ZSBTRXJyb3JBNjQKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogTG93ZXIgRUwgdXNpbmcgQUFyY2gzMiA6IDB4NjAwIC0gMHg4MDAKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLwordmVjdG9yX2VudHJ5IFN5bmNocm9ub3VzRXhjZXB0aW9uQTMyLCAuc3BtX3NoaW1fZXhjZXB0aW9ucworCWIJLgorCWNoZWNrX3ZlY3Rvcl9zaXplIFN5bmNocm9ub3VzRXhjZXB0aW9uQTMyCisKK3ZlY3Rvcl9lbnRyeSBJcnFBMzIsIC5zcG1fc2hpbV9leGNlcHRpb25zCisJYgkuCisJY2hlY2tfdmVjdG9yX3NpemUgSXJxQTMyCisKK3ZlY3Rvcl9lbnRyeSBGaXFBMzIsIC5zcG1fc2hpbV9leGNlcHRpb25zCisJYgkuCisJY2hlY2tfdmVjdG9yX3NpemUgRmlxQTMyCisKK3ZlY3Rvcl9lbnRyeSBTRXJyb3JBMzIsIC5zcG1fc2hpbV9leGNlcHRpb25zCisJYgkuCisJY2hlY2tfdmVjdG9yX3NpemUgU0Vycm9yQTMyCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zdGRfc3ZjL3NwbS9zZWN1cmVfcGFydGl0aW9uX3NldHVwLmMgYi9zZXJ2aWNlcy9zdGRfc3ZjL3NwbS9zZWN1cmVfcGFydGl0aW9uX3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmMGVkZgotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL3N0ZF9zdmMvc3BtL3NlY3VyZV9wYXJ0aXRpb25fc2V0dXAuYwpAQCAtMCwwICsxLDMxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2luY2x1ZGUgPGFyY2guaD4KKyNpbmNsdWRlIDxhcmNoX2hlbHBlcnMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjb21tb25fZGVmLmg+CisjaW5jbHVkZSA8Y29udGV4dC5oPgorI2luY2x1ZGUgPGNvbnRleHRfbWdtdC5oPgorI2luY2x1ZGUgPGRlYnVnLmg+CisjaW5jbHVkZSA8cGxhdGZvcm1fZGVmLmg+CisjaW5jbHVkZSA8cGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxzZWN1cmVfcGFydGl0aW9uLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dHlwZXMuaD4KKyNpbmNsdWRlIDx4bGF0X3RhYmxlc192Mi5oPgorCisjaW5jbHVkZSAic3BtX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJzcG1fc2hpbV9wcml2YXRlLmgiCisKKy8qIFBsYWNlIHRyYW5zbGF0aW9uIHRhYmxlcyBieSBkZWZhdWx0IGFsb25nIHdpdGggdGhlIG9uZXMgdXNlZCBieSBCTDMxLiAqLworI2lmbmRlZiBQTEFUX1NQX0lNQUdFX1hMQVRfU0VDVElPTl9OQU1FCisjZGVmaW5lIFBMQVRfU1BfSU1BR0VfWExBVF9TRUNUSU9OX05BTUUJInhsYXRfdGFibGUiCisjZW5kaWYKKworLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgdGhlIHRyYW5zbGF0aW9uIGNvbnRleHQgZm9yIHRoZSBzZWN1cmUgcGFydGl0aW9uLiAqLworUkVHSVNURVJfWExBVF9DT05URVhUMihzZWN1cmVfcGFydGl0aW9uLAorCQkJUExBVF9TUF9JTUFHRV9NTUFQX1JFR0lPTlMsCisJCQlQTEFUX1NQX0lNQUdFX01BWF9YTEFUX1RBQkxFUywKKwkJCVBMQVRfVklSVF9BRERSX1NQQUNFX1NJWkUsIFBMQVRfUEhZX0FERFJfU1BBQ0VfU0laRSwKKwkJCUVMMV9FTDBfUkVHSU1FLCBQTEFUX1NQX0lNQUdFX1hMQVRfU0VDVElPTl9OQU1FKTsKKworLyogRXhwb3J0IGEgaGFuZGxlIG9uIHRoZSBzZWN1cmUgcGFydGl0aW9uIHRyYW5zbGF0aW9uIGNvbnRleHQgKi8KK3hsYXRfY3R4X3QgKnNlY3VyZV9wYXJ0aXRpb25feGxhdF9jdHhfaGFuZGxlID0gJnNlY3VyZV9wYXJ0aXRpb25feGxhdF9jdHg7CisKKy8qIFNldHVwIGNvbnRleHQgb2YgdGhlIFNlY3VyZSBQYXJ0aXRpb24gKi8KK3ZvaWQgc2VjdXJlX3BhcnRpdGlvbl9zZXR1cCh2b2lkKQoreworCVZFUkJPU0UoIlMtRUwxL1MtRUwwIGNvbnRleHQgc2V0dXAgc3RhcnQuLi5cbiIpOworCisJY3B1X2NvbnRleHRfdCAqY3R4ID0gY21fZ2V0X2NvbnRleHQoU0VDVVJFKTsKKworCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIGdvdCBhIFNlY3VyZSBjb250ZXh0LiAqLworCWFzc2VydChjdHggIT0gTlVMTCk7CisKKwkvKiBBc3NlcnQgd2UgYXJlIGluIFNlY3VyZSBzdGF0ZS4gKi8KKwlhc3NlcnQoKHJlYWRfc2NyX2VsMygpICYgU0NSX05TX0JJVCkgPT0gMCk7CisKKwkvKiBEaXNhYmxlIE1NVSBhdCBFTDEuICovCisJZGlzYWJsZV9tbXVfaWNhY2hlX2VsMSgpOworCisJLyogSW52YWxpZGF0ZSBUTEJzIGF0IEVMMS4gKi8KKwl0bGJpdm1hbGxlMSgpOworCisJLyoKKwkgKiBHZW5lcmFsLVB1cnBvc2UgcmVnaXN0ZXJzCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworCisJLyoKKwkgKiBYMDogVmlydHVhbCBhZGRyZXNzIG9mIGEgYnVmZmVyIHNoYXJlZCBiZXR3ZWVuIEVMMyBhbmQgU2VjdXJlIEVMMC4KKwkgKiAgICAgVGhlIGJ1ZmZlciB3aWxsIGJlIG1hcHBlZCBpbiB0aGUgU2VjdXJlIEVMMSB0cmFuc2xhdGlvbiByZWdpbWUKKwkgKiAgICAgd2l0aCBOb3JtYWwgSVMgV0JXQSBhdHRyaWJ1dGVzIGFuZCBSTyBkYXRhIGFuZCBFeGVjdXRlIE5ldmVyCisJICogICAgIGluc3RydWN0aW9uIGFjY2VzcyBwZXJtaXNzaW9ucy4KKwkgKgorCSAqIFgxOiBTaXplIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMKKwkgKgorCSAqIFgyOiBjb29raWUgdmFsdWUgKEltcGxlbWVudGF0aW9uIERlZmluZWQpCisJICoKKwkgKiBYMzogY29va2llIHZhbHVlIChJbXBsZW1lbnRhdGlvbiBEZWZpbmVkKQorCSAqCisJICogWDQgdG8gWDMwID0gMCAoYWxyZWFkeSBkb25lIGJ5IGNtX2luaXRfbXlfY29udGV4dCgpKQorCSAqLworCXdyaXRlX2N0eF9yZWcoZ2V0X2dwcmVnc19jdHgoY3R4KSwgQ1RYX0dQUkVHX1gwLCBQTEFUX1NQTV9CVUZfQkFTRSk7CisJd3JpdGVfY3R4X3JlZyhnZXRfZ3ByZWdzX2N0eChjdHgpLCBDVFhfR1BSRUdfWDEsIFBMQVRfU1BNX0JVRl9TSVpFKTsKKwl3cml0ZV9jdHhfcmVnKGdldF9ncHJlZ3NfY3R4KGN0eCksIENUWF9HUFJFR19YMiwgUExBVF9TUE1fQ09PS0lFXzApOworCXdyaXRlX2N0eF9yZWcoZ2V0X2dwcmVnc19jdHgoY3R4KSwgQ1RYX0dQUkVHX1gzLCBQTEFUX1NQTV9DT09LSUVfMSk7CisKKwkvKgorCSAqIFNQX0VMMDogQSBub24temVybyB2YWx1ZSB3aWxsIGluZGljYXRlIHRvIHRoZSBTUCB0aGF0IHRoZSBTUE0gaGFzCisJICogaW5pdGlhbGl6ZWQgdGhlIHN0YWNrIHBvaW50ZXIgZm9yIHRoZSBjdXJyZW50IENQVSB0aHJvdWdoCisJICogaW1wbGVtZW50YXRpb24gZGVmaW5lZCBtZWFucy4gVGhlIHZhbHVlIHdpbGwgYmUgMCBvdGhlcndpc2UuCisJICovCisJd3JpdGVfY3R4X3JlZyhnZXRfZ3ByZWdzX2N0eChjdHgpLCBDVFhfR1BSRUdfU1BfRUwwLAorCQkJUExBVF9TUF9JTUFHRV9TVEFDS19CQVNFICsgUExBVF9TUF9JTUFHRV9TVEFDS19QQ1BVX1NJWkUpOworCisJLyoKKwkgKiBTZXR1cCB0cmFuc2xhdGlvbiB0YWJsZXMKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KKworI2lmIEVOQUJMRV9BU1NFUlRJT05TCisKKwkvKiBHZXQgbWF4IGdyYW51bGFyaXR5IHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0uICovCisKKwl1X3JlZ2lzdGVyX3QgaWRfYWE2NG1tZnIwX2VsMSA9IHJlYWRfaWRfYWE2NG1tZnIwX2VsMSgpOworCisJaW50IHRncmFuNjRfc3VwcG9ydGVkID0KKwkJKChpZF9hYTY0bW1mcjBfZWwxID4+IElEX0FBNjRNTUZSMF9FTDFfVEdSQU42NF9TSElGVCkgJgorCQkgSURfQUE2NE1NRlIwX0VMMV9UR1JBTjY0X01BU0spID09CisJCSBJRF9BQTY0TU1GUjBfRUwxX1RHUkFONjRfU1VQUE9SVEVEOworCisJaW50IHRncmFuMTZfc3VwcG9ydGVkID0KKwkJKChpZF9hYTY0bW1mcjBfZWwxID4+IElEX0FBNjRNTUZSMF9FTDFfVEdSQU4xNl9TSElGVCkgJgorCQkgSURfQUE2NE1NRlIwX0VMMV9UR1JBTjE2X01BU0spID09CisJCSBJRF9BQTY0TU1GUjBfRUwxX1RHUkFOMTZfU1VQUE9SVEVEOworCisJaW50IHRncmFuNF9zdXBwb3J0ZWQgPQorCQkoKGlkX2FhNjRtbWZyMF9lbDEgPj4gSURfQUE2NE1NRlIwX0VMMV9UR1JBTjRfU0hJRlQpICYKKwkJIElEX0FBNjRNTUZSMF9FTDFfVEdSQU40X01BU0spID09CisJCSBJRF9BQTY0TU1GUjBfRUwxX1RHUkFONF9TVVBQT1JURUQ7CisKKwl1aW50cHRyX3QgbWF4X2dyYW51bGVfc2l6ZTsKKworCWlmICh0Z3JhbjY0X3N1cHBvcnRlZCkgeworCQltYXhfZ3JhbnVsZV9zaXplID0gNjQgKiAxMDI0OworCX0gZWxzZSBpZiAodGdyYW4xNl9zdXBwb3J0ZWQpIHsKKwkJbWF4X2dyYW51bGVfc2l6ZSA9IDE2ICogMTAyNDsKKwl9IGVsc2UgeworCQlhc3NlcnQodGdyYW40X3N1cHBvcnRlZCk7CisJCW1heF9ncmFudWxlX3NpemUgPSA0ICogMTAyNDsKKwl9CisKKwlWRVJCT1NFKCJNYXggdHJhbnNsYXRpb24gZ3JhbnVsZSBzdXBwb3J0ZWQ6ICVsdSBLaUJcbiIsCisJCW1heF9ncmFudWxlX3NpemUgLyAxMDI0KTsKKworCXVpbnRwdHJfdCBtYXhfZ3JhbnVsZV9zaXplX21hc2sgPSBtYXhfZ3JhbnVsZV9zaXplIC0gMTsKKworCS8qIEJhc2UgbXVzdCBiZSBhbGlnbmVkIHRvIHRoZSBtYXggZ3JhbnVsYXJpdHkgKi8KKwlhc3NlcnQoKEFSTV9TUF9JTUFHRV9OU19CVUZfQkFTRSAmIG1heF9ncmFudWxlX3NpemVfbWFzaykgPT0gMCk7CisKKwkvKiBTaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgbWF4IGdyYW51bGFyaXR5ICovCisJYXNzZXJ0KChBUk1fU1BfSU1BR0VfTlNfQlVGX1NJWkUgJiBtYXhfZ3JhbnVsZV9zaXplX21hc2spID09IDApOworCisjZW5kaWYgLyogRU5BQkxFX0FTU0VSVElPTlMgKi8KKworCS8qIFRoaXMgcmVnaW9uIGNvbnRhaW5zIHRoZSBleGNlcHRpb24gdmVjdG9ycyB1c2VkIGF0IFMtRUwxLiAqLworCWNvbnN0IG1tYXBfcmVnaW9uX3Qgc2VsMV9leGNlcHRpb25fdmVjdG9ycyA9CisJCU1BUF9SRUdJT05fRkxBVChTUE1fU0hJTV9FWENFUFRJT05TX1NUQVJULAorCQkJCVNQTV9TSElNX0VYQ0VQVElPTlNfU0laRSwKKwkJCQlNVF9DT0RFIHwgTVRfU0VDVVJFIHwgTVRfUFJJVklMRUdFRCk7CisJbW1hcF9hZGRfcmVnaW9uX2N0eCgmc2VjdXJlX3BhcnRpdGlvbl94bGF0X2N0eCwKKwkJCSAgICAmc2VsMV9leGNlcHRpb25fdmVjdG9ycyk7CisKKwltbWFwX2FkZF9jdHgoJnNlY3VyZV9wYXJ0aXRpb25feGxhdF9jdHgsCisJCSAgICAgcGxhdF9nZXRfc2VjdXJlX3BhcnRpdGlvbl9tbWFwKE5VTEwpKTsKKworCWluaXRfeGxhdF90YWJsZXNfY3R4KCZzZWN1cmVfcGFydGl0aW9uX3hsYXRfY3R4KTsKKworCS8qCisJICogTU1VLXJlbGF0ZWQgcmVnaXN0ZXJzCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisKKwkvKiBTZXQgYXR0cmlidXRlcyBpbiB0aGUgcmlnaHQgaW5kaWNlcyBvZiB0aGUgTUFJUiAqLworCXVfcmVnaXN0ZXJfdCBtYWlyX2VsMSA9CisJCU1BSVJfQVRUUl9TRVQoQVRUUl9ERVZJQ0UsIEFUVFJfREVWSUNFX0lOREVYKSB8CisJCU1BSVJfQVRUUl9TRVQoQVRUUl9JV0JXQV9PV0JXQV9OVFIsIEFUVFJfSVdCV0FfT1dCV0FfTlRSX0lOREVYKSB8CisJCU1BSVJfQVRUUl9TRVQoQVRUUl9OT05fQ0FDSEVBQkxFLCBBVFRSX05PTl9DQUNIRUFCTEVfSU5ERVgpOworCisJd3JpdGVfY3R4X3JlZyhnZXRfc3lzcmVnc19jdHgoY3R4KSwgQ1RYX01BSVJfRUwxLCBtYWlyX2VsMSk7CisKKwkvKiBTZXR1cCBUQ1JfRUwxLiAqLworCXVfcmVnaXN0ZXJfdCB0Y3JfcHNfYml0cyA9IHRjcl9waHlzaWNhbF9hZGRyX3NpemVfYml0cyhQTEFUX1BIWV9BRERSX1NQQUNFX1NJWkUpOworCisJdV9yZWdpc3Rlcl90IHRjcl9lbDEgPQorCQkvKiBTaXplIG9mIHJlZ2lvbiBhZGRyZXNzZWQgYnkgVFRCUjBfRUwxID0gMl4oNjQtVDBTWikgYnl0ZXMuICovCisJCSg2NCAtIF9fYnVpbHRpbl9jdHpsKFBMQVRfVklSVF9BRERSX1NQQUNFX1NJWkUpKQkJfAorCQkvKiBJbm5lciBhbmQgb3V0ZXIgV0JXQSwgc2hhcmVhYmxlLiAqLworCQlUQ1JfU0hfSU5ORVJfU0hBUkVBQkxFIHwgVENSX1JHTl9PVVRFUl9XQkEgfCBUQ1JfUkdOX0lOTkVSX1dCQQl8CisJCS8qIFNldCB0aGUgZ3JhbnVsYXJpdHkgdG8gNEtCLiAqLworCQlUQ1JfVEcwXzRLCQkJCQkJCXwKKwkJLyogTGltaXQgSW50ZXJtZWRpYXRlIFBoeXNpY2FsIEFkZHJlc3MgU2l6ZS4gKi8KKwkJdGNyX3BzX2JpdHMgPDwgVENSX0VMMV9JUFNfU0hJRlQJCQkJfAorCQkvKiBEaXNhYmxlIHRyYW5zbGF0aW9ucyB1c2luZyBUQkJSMV9FTDEuICovCisJCVRDUl9FUEQxX0JJVAorCQkvKiBUaGUgcmVtYWluaW5nIGZpZWxkcyByZWxhdGVkIHRvIFRCQlIxX0VMMSBhcmUgbGVmdCBhcyB6ZXJvLiAqLworCTsKKworCXRjcl9lbDEgJj0gfigKKwkJLyogRW5hYmxlIHRyYW5zbGF0aW9ucyB1c2luZyBUQkJSMF9FTDEgKi8KKwkJVENSX0VQRDBfQklUCisJKTsKKworCXdyaXRlX2N0eF9yZWcoZ2V0X3N5c3JlZ3NfY3R4KGN0eCksIENUWF9UQ1JfRUwxLCB0Y3JfZWwxKTsKKworCS8qIFNldHVwIFNDVExSX0VMMSAqLworCXVfcmVnaXN0ZXJfdCBzY3Rscl9lbDEgPSByZWFkX2N0eF9yZWcoZ2V0X3N5c3JlZ3NfY3R4KGN0eCksIENUWF9TQ1RMUl9FTDEpOworCisJc2N0bHJfZWwxIHw9CisJCS8qU0NUTFJfRUwxX1JFUzEgfCovCisJCS8qIERvbid0IHRyYXAgREMgQ1ZBVSwgREMgQ0lWQUMsIERDIENWQUMsIERDIENWQVAsIG9yIElDIElWQVUgKi8KKwkJU0NUTFJfVUNJX0JJVAkJCQkJCQl8CisJCS8qIFJXIHJlZ2lvbnMgYXQgeGxhdCByZWdpbWUgRUwxJjAgYXJlIGZvcmNlZCB0byBiZSBYTi4gKi8KKwkJU0NUTFJfV1hOX0JJVAkJCQkJCQl8CisJCS8qIERvbid0IHRyYXAgdG8gRUwxIGV4ZWN1dGlvbiBvZiBXRkkgb3IgV0ZFIGF0IEVMMC4gKi8KKwkJU0NUTFJfTlRXSV9CSVQgfCBTQ1RMUl9OVFdFX0JJVAkJCQkJfAorCQkvKiBEb24ndCB0cmFwIHRvIEVMMSBhY2Nlc3NlcyB0byBDVFJfRUwwIGZyb20gRUwwLiAqLworCQlTQ1RMUl9VQ1RfQklUCQkJCQkJCXwKKwkJLyogRG9uJ3QgdHJhcCB0byBFTDEgZXhlY3V0aW9uIG9mIERaIFpWQSBhdCBFTDAuICovCisJCVNDVExSX0RaRV9CSVQJCQkJCQkJfAorCQkvKiBFbmFibGUgU1AgQWxpZ25tZW50IGNoZWNrIGZvciBFTDAgKi8KKwkJU0NUTFJfU0EwX0JJVAkJCQkJCQl8CisJCS8qIEFsbG93IGNhY2hlYWJsZSBkYXRhIGFuZCBpbnN0ci4gYWNjZXNzZXMgdG8gbm9ybWFsIG1lbW9yeS4gKi8KKwkJU0NUTFJfQ19CSVQgfCBTQ1RMUl9JX0JJVAkJCQkJfAorCQkvKiBBbGlnbm1lbnQgZmF1bHQgY2hlY2tpbmcgZW5hYmxlZCB3aGVuIGF0IEVMMSBhbmQgRUwwLiAqLworCQlTQ1RMUl9BX0JJVAkJCQkJCQl8CisJCS8qIEVuYWJsZSBNTVUuICovCisJCVNDVExSX01fQklUCisJOworCisJc2N0bHJfZWwxICY9IH4oCisJCS8qIEV4cGxpY2l0IGRhdGEgYWNjZXNzZXMgYXQgRUwwIGFyZSBsaXR0bGUtZW5kaWFuLiAqLworCQlTQ1RMUl9FMEVfQklUCQkJCQkJCXwKKwkJLyogQWNjZXNzZXMgdG8gREFJRiBmcm9tIEVMMCBhcmUgdHJhcHBlZCB0byBFTDEuICovCisJCVNDVExSX1VNQV9CSVQKKwkpOworCisJd3JpdGVfY3R4X3JlZyhnZXRfc3lzcmVnc19jdHgoY3R4KSwgQ1RYX1NDVExSX0VMMSwgc2N0bHJfZWwxKTsKKworCS8qIFBvaW50IFRUQlIwX0VMMSBhdCB0aGUgdGFibGVzIG9mIHRoZSBjb250ZXh0IGNyZWF0ZWQgZm9yIHRoZSBTUC4gKi8KKwl3cml0ZV9jdHhfcmVnKGdldF9zeXNyZWdzX2N0eChjdHgpLCBDVFhfVFRCUjBfRUwxLAorCQkJKHVfcmVnaXN0ZXJfdClzZWN1cmVfcGFydGl0aW9uX2Jhc2VfeGxhdF90YWJsZSk7CisKKwkvKgorCSAqIFNldHVwIG90aGVyIHN5c3RlbSByZWdpc3RlcnMKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisKKwkvKiBTaGltIEV4Y2VwdGlvbiBWZWN0b3IgQmFzZSBBZGRyZXNzICovCisJd3JpdGVfY3R4X3JlZyhnZXRfc3lzcmVnc19jdHgoY3R4KSwgQ1RYX1ZCQVJfRUwxLAorCQkJU1BNX1NISU1fRVhDRVBUSU9OU19QVFIpOworCisJLyoKKwkgKiBGUEVOOiBGb3JiaWQgdGhlIFNlY3VyZSBQYXJ0aXRpb24gdG8gYWNjZXNzIEZQL1NJTUQgcmVnaXN0ZXJzLgorCSAqIFRUQTogRW5hYmxlIGFjY2VzcyB0byB0cmFjZSByZWdpc3RlcnMuCisJICogWkVOICh2OC4yKTogVHJhcCBTVkUgaW5zdHJ1Y3Rpb25zIGFuZCBhY2Nlc3MgdG8gU1ZFIHJlZ2lzdGVycy4KKwkgKi8KKwl3cml0ZV9jdHhfcmVnKGdldF9zeXNyZWdzX2N0eChjdHgpLCBDVFhfQ1BBQ1JfRUwxLAorCQkJQ1BBQ1JfRUwxX0ZQRU4oQ1BBQ1JfRUwxX0ZQX1RSQVBfQUxMKSk7CisKKwkvKgorCSAqIFByZXBhcmUgaW5mb3JtYXRpb24gaW4gYnVmZmVyIHNoYXJlZCBiZXR3ZWVuIEVMMyBhbmQgUy1FTDAKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisKKwl2b2lkICpzaGFyZWRfYnVmX3B0ciA9ICh2b2lkICopIFBMQVRfU1BNX0JVRl9CQVNFOworCisJLyogQ29weSB0aGUgYm9vdCBpbmZvcm1hdGlvbiBpbnRvIHRoZSBzaGFyZWQgYnVmZmVyIHdpdGggdGhlIFNQLiAqLworCWFzc2VydCgodWludHB0cl90KXNoYXJlZF9idWZfcHRyICsgc2l6ZW9mKHNlY3VyZV9wYXJ0aXRpb25fYm9vdF9pbmZvX3QpCisJICAgICAgIDw9IChQTEFUX1NQTV9CVUZfQkFTRSArIFBMQVRfU1BNX0JVRl9TSVpFKSk7CisKKwlhc3NlcnQoUExBVF9TUE1fQlVGX0JBU0UgPD0gKFVJTlRQVFJfTUFYIC0gUExBVF9TUE1fQlVGX1NJWkUgKyAxKSk7CisKKwljb25zdCBzZWN1cmVfcGFydGl0aW9uX2Jvb3RfaW5mb190ICpzcF9ib290X2luZm8gPQorCQkJcGxhdF9nZXRfc2VjdXJlX3BhcnRpdGlvbl9ib290X2luZm8oTlVMTCk7CisKKwlhc3NlcnQoc3BfYm9vdF9pbmZvICE9IE5VTEwpOworCisJbWVtY3B5KCh2b2lkICopIHNoYXJlZF9idWZfcHRyLCAoY29uc3Qgdm9pZCAqKSBzcF9ib290X2luZm8sCisJICAgICAgIHNpemVvZihzZWN1cmVfcGFydGl0aW9uX2Jvb3RfaW5mb190KSk7CisKKwkvKiBQb2ludGVyIHRvIHRoZSBNUCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBwbGF0Zm9ybSBwb3J0LiAqLworCXNlY3VyZV9wYXJ0aXRpb25fbXBfaW5mb190ICpzcF9tcF9pbmZvID0KKwkJKChzZWN1cmVfcGFydGl0aW9uX2Jvb3RfaW5mb190ICopIHNoYXJlZF9idWZfcHRyKS0+bXBfaW5mbzsKKworCWFzc2VydChzcF9tcF9pbmZvICE9IE5VTEwpOworCisJLyoKKwkgKiBQb2ludCB0aGUgc2hhcmVkIGJ1ZmZlciBNUCBpbmZvcm1hdGlvbiBwb2ludGVyIHRvIHdoZXJlIHRoZSBpbmZvIHdpbGwKKwkgKiBiZSBwb3B1bGF0ZWQsIGp1c3QgYWZ0ZXIgdGhlIGJvb3QgaW5mby4KKwkgKi8KKwkoKHNlY3VyZV9wYXJ0aXRpb25fYm9vdF9pbmZvX3QgKikgc2hhcmVkX2J1Zl9wdHIpLT5tcF9pbmZvID0KKwkJKHNlY3VyZV9wYXJ0aXRpb25fbXBfaW5mb190ICopICgodWludHB0cl90KXNoYXJlZF9idWZfcHRyCisJCQkJKyBzaXplb2Yoc2VjdXJlX3BhcnRpdGlvbl9ib290X2luZm9fdCkpOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIHNoYXJlZCBidWZmZXIgcG9pbnRlciB0byB3aGVyZSB0aGUgTVAgaW5mb3JtYXRpb24gZm9yIHRoZQorCSAqIHBheWxvYWQgd2lsbCBiZSBwb3B1bGF0ZWQKKwkgKi8KKwlzaGFyZWRfYnVmX3B0ciA9ICgoc2VjdXJlX3BhcnRpdGlvbl9ib290X2luZm9fdCAqKSBzaGFyZWRfYnVmX3B0ciktPm1wX2luZm87CisKKwkvKgorCSAqIENvcHkgdGhlIGNwdSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBzaGFyZWQgYnVmZmVyIGFyZWEgYWZ0ZXIgdGhlIGJvb3QKKwkgKiBpbmZvcm1hdGlvbi4KKwkgKi8KKwlhc3NlcnQoc3BfYm9vdF9pbmZvLT5udW1fY3B1cyA8PSBQTEFURk9STV9DT1JFX0NPVU5UKTsKKworCWFzc2VydCgodWludHB0cl90KXNoYXJlZF9idWZfcHRyCisJICAgICAgIDw9IChQTEFUX1NQTV9CVUZfQkFTRSArIFBMQVRfU1BNX0JVRl9TSVpFIC0KKwkJICAgICAgIChzcF9ib290X2luZm8tPm51bV9jcHVzICogc2l6ZW9mKCpzcF9tcF9pbmZvKSkpKTsKKworCW1lbWNweShzaGFyZWRfYnVmX3B0ciwgKGNvbnN0IHZvaWQgKikgc3BfbXBfaW5mbywKKwkJc3BfYm9vdF9pbmZvLT5udW1fY3B1cyAqIHNpemVvZigqc3BfbXBfaW5mbykpOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGxpbmVhciBpbmRpY2VzIG9mIGNvcmVzIGluIGJvb3QgaW5mb3JtYXRpb24gZm9yIHRoZQorCSAqIHNlY3VyZSBwYXJ0aXRpb24gYW5kIGZsYWcgdGhlIHByaW1hcnkgQ1BVCisJICovCisJc3BfbXBfaW5mbyA9IChzZWN1cmVfcGFydGl0aW9uX21wX2luZm9fdCAqKSBzaGFyZWRfYnVmX3B0cjsKKworCWZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBzcF9ib290X2luZm8tPm51bV9jcHVzOyBpbmRleCsrKSB7CisJCXVfcmVnaXN0ZXJfdCBtcGlkciA9IHNwX21wX2luZm9baW5kZXhdLm1waWRyOworCisJCXNwX21wX2luZm9baW5kZXhdLmxpbmVhcl9pZCA9IHBsYXRfY29yZV9wb3NfYnlfbXBpZHIobXBpZHIpOworCQlpZiAocGxhdF9teV9jb3JlX3BvcygpID09IHNwX21wX2luZm9baW5kZXhdLmxpbmVhcl9pZCkKKwkJCXNwX21wX2luZm9baW5kZXhdLmZsYWdzIHw9IE1QX0lORk9fRkxBR19QUklNQVJZX0NQVTsKKwl9CisKKwlWRVJCT1NFKCJTLUVMMS9TLUVMMCBjb250ZXh0IHNldHVwIGVuZC5cbiIpOworfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvc3RkX3N2Yy9zcG0vc3BtLm1rIGIvc2VydmljZXMvc3RkX3N2Yy9zcG0vc3BtLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmVhZWUKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9zdGRfc3ZjL3NwbS9zcG0ubWsKQEAgLTAsMCArMSwyNSBAQAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyMKKworaWZuZXEgKCR7U1BEfSxub25lKQorICAgICAgICAkKGVycm9yICJFcnJvcjogU1BEIGFuZCBTUE0gYXJlIGluY29tcGF0aWJsZSBidWlsZCBvcHRpb25zLiIpCitlbmRpZgoraWZuZXEgKCR7QVJDSH0sYWFyY2g2NCkKKyAgICAgICAgJChlcnJvciAiRXJyb3I6IFNQTSBpcyBvbmx5IHN1cHBvcnRlZCBvbiBhYXJjaDY0LiIpCitlbmRpZgorCisjIFNQTSBzb3VyY2VzCisKKworU1BNX1NPVVJDRVMJOj0JJChhZGRwcmVmaXggc2VydmljZXMvc3RkX3N2Yy9zcG0vLAlcCisJCQlzcG1fbWFpbi5jCQkJCVwKKwkJCSR7QVJDSH0vc3BtX2hlbHBlcnMuUwkJCVwKKwkJCXNlY3VyZV9wYXJ0aXRpb25fc2V0dXAuYwkJXAorCQkJJHtBUkNIfS9zcG1fc2hpbV9leGNlcHRpb25zLlMpCisKKworIyBMZXQgdGhlIHRvcC1sZXZlbCBNYWtlZmlsZSBrbm93IHRoYXQgd2UgaW50ZW5kIHRvIGluY2x1ZGUgYSBCTDMyIGltYWdlCitORUVEX0JMMzIJCTo9CXllcwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvc3RkX3N2Yy9zcG0vc3BtX21haW4uYyBiL3NlcnZpY2VzL3N0ZF9zdmMvc3BtL3NwbV9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmM2EzMAotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL3N0ZF9zdmMvc3BtL3NwbV9tYWluLmMKQEAgLTAsMCArMSw0NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxhcmNoX2hlbHBlcnMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxibDMxLmg+CisjaW5jbHVkZSA8Y29udGV4dF9tZ210Lmg+CisjaW5jbHVkZSA8ZGVidWcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHBsYXRmb3JtLmg+CisjaW5jbHVkZSA8cnVudGltZV9zdmMuaD4KKyNpbmNsdWRlIDxzZWN1cmVfcGFydGl0aW9uLmg+CisjaW5jbHVkZSA8c21jYy5oPgorI2luY2x1ZGUgPHNtY2NfaGVscGVycy5oPgorI2luY2x1ZGUgPHNwaW5sb2NrLmg+CisjaW5jbHVkZSA8c3BtX3N2Yy5oPgorI2luY2x1ZGUgPHV0aWxzLmg+CisjaW5jbHVkZSA8eGxhdF90YWJsZXNfdjIuaD4KKworI2luY2x1ZGUgInNwbV9wcml2YXRlLmgiCisKKy8qIExvY2sgdXNlZCBmb3IgU1BfTUVNT1JZX0FUVFJJQlVURVNfR0VUIGFuZCBTUF9NRU1PUllfQVRUUklCVVRFU19TRVQgKi8KK3N0YXRpYyBzcGlubG9ja190IG1lbV9hdHRyX3NtY19sb2NrOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2VjdXJlIFBhcnRpdGlvbiBjb250ZXh0IGluZm9ybWF0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzZWN1cmVfcGFydGl0aW9uX2NvbnRleHRfdCBzcF9jdHg7Cit1bnNpZ25lZCBpbnQgc3BfaW5pdF9pbl9wcm9ncmVzczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlcGxhY2UgdGhlIFMtRUwxIHJlLWVudHJ5IGluZm9ybWF0aW9uIHdpdGggUy1FTDAgcmUtZW50cnkKKyAqIGluZm9ybWF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzcG1fc2V0dXBfbmV4dF9lcmV0X2ludG9fc2VsMChjcHVfY29udGV4dF90ICpzZWN1cmVfY29udGV4dCkKK3sKKwlhc3NlcnQoc2VjdXJlX2NvbnRleHQgPT0gY21fZ2V0X2NvbnRleHQoU0VDVVJFKSk7CisKKwljbV9zZXRfZWxyX3Nwc3JfZWwzKFNFQ1VSRSwgcmVhZF9lbHJfZWwxKCksIHJlYWRfc3Bzcl9lbDEoKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIFNQIGNvbnRleHQgcG9pbnRlciBhbmQ6CisgKiAxLiBBcHBsaWVzIHRoZSBTLUVMMSBzeXN0ZW0gcmVnaXN0ZXIgY29udGV4dCBmcm9tIHNwX2N0eC0+Y3B1X2N0eC4KKyAqIDIuIFNhdmVzIHRoZSBjdXJyZW50IEMgcnVudGltZSBzdGF0ZSAoY2FsbGVlLXNhdmVkIHJlZ2lzdGVycykgb24gdGhlIHN0YWNrCisgKiAgICBmcmFtZSBhbmQgc2F2ZXMgYSByZWZlcmVuY2UgdG8gdGhpcyBzdGF0ZS4KKyAqIDMuIENhbGxzIGVsM19leGl0KCkgc28gdGhhdCB0aGUgRUwzIHN5c3RlbSBhbmQgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycworICogICAgZnJvbSB0aGUgc3BfY3R4LT5jcHVfY3R4IGFyZSB1c2VkIHRvIGVudGVyIHRoZSBzZWN1cmUgcGF5bG9hZCBpbWFnZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdWludDY0X3Qgc3BtX3N5bmNocm9ub3VzX3NwX2VudHJ5KHNlY3VyZV9wYXJ0aXRpb25fY29udGV4dF90ICpzcF9jdHhfcHRyKQoreworCXVpbnQ2NF90IHJjOworCisJYXNzZXJ0KHNwX2N0eF9wdHIgIT0gTlVMTCk7CisJYXNzZXJ0KHNwX2N0eF9wdHItPmNfcnRfY3R4ID09IDApOworCWFzc2VydChjbV9nZXRfY29udGV4dChTRUNVUkUpID09ICZzcF9jdHhfcHRyLT5jcHVfY3R4KTsKKworCS8qIEFwcGx5IHRoZSBTZWN1cmUgRUwxIHN5c3RlbSByZWdpc3RlciBjb250ZXh0IGFuZCBzd2l0Y2ggdG8gaXQgKi8KKwljbV9lbDFfc3lzcmVnc19jb250ZXh0X3Jlc3RvcmUoU0VDVVJFKTsKKwljbV9zZXRfbmV4dF9lcmV0X2NvbnRleHQoU0VDVVJFKTsKKworCVZFUkJPU0UoIiVzOiBXZSdyZSBhYm91dCB0byBlbnRlciB0aGUgU2VjdXJlIHBhcnRpdGlvbi4uLlxuIiwgX19mdW5jX18pOworCisJcmMgPSBzcG1fc2VjdXJlX3BhcnRpdGlvbl9lbnRlcigmc3BfY3R4X3B0ci0+Y19ydF9jdHgpOworI2lmIEVOQUJMRV9BU1NFUlRJT05TCisJc3BfY3R4X3B0ci0+Y19ydF9jdHggPSAwOworI2VuZGlmCisKKwlyZXR1cm4gcmM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBTZWN1cmUgcGFydGl0aW9uIGNvbnRleHQgcG9pbnRlciBhbmQ6CisgKiAxLiBTYXZlcyB0aGUgUy1FTDEgc3lzdGVtIHJlZ2lzdGVyIGNvbnRleHQgdHAgc3BfY3R4LT5jcHVfY3R4LgorICogMi4gUmVzdG9yZXMgdGhlIGN1cnJlbnQgQyBydW50aW1lIHN0YXRlIChjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzKSBmcm9tIHRoZQorICogICAgc3RhY2sgZnJhbWUgdXNpbmcgdGhlIHJlZmVyZW5jZSB0byB0aGlzIHN0YXRlIHNhdmVkIGluCisgKiAgICBzcG1fc2VjdXJlX3BhcnRpdGlvbl9lbnRlcigpLgorICogMy4gSXQgZG9lcyBub3QgbmVlZCB0byBzYXZlIGFueSBnZW5lcmFsIHB1cnBvc2Ugb3IgRUwzIHN5c3RlbSByZWdpc3RlciBzdGF0ZQorICogICAgYXMgdGhlIGdlbmVyaWMgc21jIGVudHJ5IHJvdXRpbmUgc2hvdWxkIGhhdmUgc2F2ZWQgdGhvc2UuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgX19kZWFkMiBzcG1fc3luY2hyb25vdXNfc3BfZXhpdCgKKwkJCXNlY3VyZV9wYXJ0aXRpb25fY29udGV4dF90ICpzcF9jdHhfcHRyLCB1aW50NjRfdCByZXQpCit7CisJYXNzZXJ0KHNwX2N0eF9wdHIgIT0gTlVMTCk7CisJLyogU2F2ZSB0aGUgU2VjdXJlIEVMMSBzeXN0ZW0gcmVnaXN0ZXIgY29udGV4dCAqLworCWFzc2VydChjbV9nZXRfY29udGV4dChTRUNVUkUpID09ICZzcF9jdHhfcHRyLT5jcHVfY3R4KTsKKwljbV9lbDFfc3lzcmVnc19jb250ZXh0X3NhdmUoU0VDVVJFKTsKKworCWFzc2VydChzcF9jdHhfcHRyLT5jX3J0X2N0eCAhPSAwKTsKKwlzcG1fc2VjdXJlX3BhcnRpdGlvbl9leGl0KHNwX2N0eF9wdHItPmNfcnRfY3R4LCByZXQpOworCisJLyogU2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUgKi8KKwlhc3NlcnQoMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZ1bmN0aW9uIHBhc3NlcyBjb250cm9sIHRvIHRoZSBTZWN1cmUgUGFydGl0aW9uIGltYWdlIChCTDMyKSBmb3IgdGhlCisgKiBmaXJzdCB0aW1lIG9uIHRoZSBwcmltYXJ5IGNwdSBhZnRlciBhIGNvbGQgYm9vdC4gSXQgYXNzdW1lcyB0aGF0IGEgdmFsaWQKKyAqIHNlY3VyZSBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBieSBzcG1fc2V0dXAoKSB3aGljaCBjYW4gYmUgZGlyZWN0bHkKKyAqIHVzZWQuIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBzeW5jaHJvbm91cyBlbnRyeSBpbnRvIHRoZSBTZWN1cmUgcGF5bG9hZC4KKyAqIFRoZSBTUCBwYXNzZXMgY29udHJvbCBiYWNrIHRvIHRoaXMgcm91dGluZSB0aHJvdWdoIGEgU01DLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludDMyX3Qgc3BtX2luaXQodm9pZCkKK3sKKwllbnRyeV9wb2ludF9pbmZvX3QgKnNlY3VyZV9wYXJ0aXRpb25fZXBfaW5mbzsKKwl1aW50NjRfdCByYzsKKworCVZFUkJPU0UoIiVzIGVudHJ5XG4iLCBfX2Z1bmNfXyk7CisKKwkvKgorCSAqIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgU2VjdXJlIFBhcnRpdGlvbiAoQkwzMikgaW1hZ2UuIEl0cworCSAqIGFic2VuY2UgaXMgYSBjcml0aWNhbCBmYWlsdXJlLgorCSAqLworCXNlY3VyZV9wYXJ0aXRpb25fZXBfaW5mbyA9IGJsMzFfcGxhdF9nZXRfbmV4dF9pbWFnZV9lcF9pbmZvKFNFQ1VSRSk7CisJYXNzZXJ0KHNlY3VyZV9wYXJ0aXRpb25fZXBfaW5mbyk7CisKKwkvKgorCSAqIEluaXRpYWxpc2UgdGhlIGNvbW1vbiBjb250ZXh0IGFuZCB0aGVuIG92ZXJsYXkgdGhlIFMtRUwwIHNwZWNpZmljCisJICogY29udGV4dCBvbiB0b3Agb2YgaXQuCisJICovCisJY21faW5pdF9teV9jb250ZXh0KHNlY3VyZV9wYXJ0aXRpb25fZXBfaW5mbyk7CisJc2VjdXJlX3BhcnRpdGlvbl9zZXR1cCgpOworCisJLyoKKwkgKiBBcnJhbmdlIGZvciBhbiBlbnRyeSBpbnRvIHRoZSBzZWN1cmUgcGF5bG9hZC4KKwkgKi8KKwlzcF9pbml0X2luX3Byb2dyZXNzID0gMTsKKwlyYyA9IHNwbV9zeW5jaHJvbm91c19zcF9lbnRyeSgmc3BfY3R4KTsKKwlhc3NlcnQocmMgPT0gMCk7CisJc3BfaW5pdF9pbl9wcm9ncmVzcyA9IDA7CisJVkVSQk9TRSgiU1BfTUVNT1JZX0FUVFJJQlVURVNfU0VUX0FBUkNINjQgYXZhaWxhYmlsaXR5IGhhcyBiZWVuIHJldm9rZWRcbiIpOworCisJcmV0dXJuIHJjOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2l2ZW4gYSBzZWN1cmUgcGF5bG9hZCBlbnRyeXBvaW50IGluZm8gcG9pbnRlciwgZW50cnkgcG9pbnQgUEMgJiBwb2ludGVyIHRvCisgKiBhIGNvbnRleHQgZGF0YSBzdHJ1Y3R1cmUsIHRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHRoZSBTUE0gY29udGV4dCBhbmQKKyAqIGVudHJ5IHBvaW50IGluZm8gZm9yIHRoZSBzZWN1cmUgcGF5bG9hZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgc3BtX2luaXRfc3BfZXBfc3RhdGUoc3RydWN0IGVudHJ5X3BvaW50X2luZm8gKnNwX2VwX2luZm8sCisJCQkgIHVpbnQ2NF90IHBjLAorCQkJICBzZWN1cmVfcGFydGl0aW9uX2NvbnRleHRfdCAqc3BfY3R4X3B0cikKK3sKKwl1aW50MzJfdCBlcF9hdHRyOworCisJYXNzZXJ0KHNwX2VwX2luZm8pOworCWFzc2VydChwYyk7CisJYXNzZXJ0KHNwX2N0eF9wdHIpOworCisJY21fc2V0X2NvbnRleHQoJnNwX2N0eF9wdHItPmNwdV9jdHgsIFNFQ1VSRSk7CisKKwkvKiBpbml0aWFsaXNlIGFuIGVudHJ5cG9pbnQgdG8gc2V0IHVwIHRoZSBDUFUgY29udGV4dCAqLworCWVwX2F0dHIgPSBTRUNVUkUgfCBFUF9TVF9FTkFCTEU7CisJaWYgKHJlYWRfc2N0bHJfZWwzKCkgJiBTQ1RMUl9FRV9CSVQpCisJCWVwX2F0dHIgfD0gRVBfRUVfQklHOworCVNFVF9QQVJBTV9IRUFEKHNwX2VwX2luZm8sIFBBUkFNX0VQLCBWRVJTSU9OXzEsIGVwX2F0dHIpOworCisJc3BfZXBfaW5mby0+cGMgPSBwYzsKKwkvKiBUaGUgU1BNIHBheWxvYWQgcnVucyBpbiBTLUVMMCAqLworCXNwX2VwX2luZm8tPnNwc3IgPSBTUFNSXzY0KE1PREVfRUwwLAorCQkJCSAgIE1PREVfU1BfRUwwLAorCQkJCSAgIERJU0FCTEVfQUxMX0VYQ0VQVElPTlMpOworCisJemVyb21lbSgmc3BfZXBfaW5mby0+YXJncywgc2l6ZW9mKHNwX2VwX2luZm8tPmFyZ3MpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNlY3VyZSBQYXJ0aXRpb24gTWFuYWdlciBzZXR1cC4gVGhlIFNQTSBmaW5kcyBvdXQgdGhlIFNQIGVudHJ5cG9pbnQgaWYgbm90CisgKiBhbHJlYWR5IGtub3duIGFuZCBpbml0aWFsaXNlcyB0aGUgY29udGV4dCBmb3IgZW50cnkgaW50byB0aGUgU1AgZm9yIGl0cworICogaW5pdGlhbGlzYXRpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50MzJfdCBzcG1fc2V0dXAodm9pZCkKK3sKKwllbnRyeV9wb2ludF9pbmZvX3QgKnNlY3VyZV9wYXJ0aXRpb25fZXBfaW5mbzsKKworCVZFUkJPU0UoIiVzIGVudHJ5XG4iLCBfX2Z1bmNfXyk7CisKKwkvKgorCSAqIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgU2VjdXJlIFBhcnRpdGlvbiAoQkwzMikgaW1hZ2UuIEl0cworCSAqIGFic2VuY2UgaXMgYSBjcml0aWNhbCBmYWlsdXJlLgorCSAqLworCXNlY3VyZV9wYXJ0aXRpb25fZXBfaW5mbyA9IGJsMzFfcGxhdF9nZXRfbmV4dF9pbWFnZV9lcF9pbmZvKFNFQ1VSRSk7CisJaWYgKCFzZWN1cmVfcGFydGl0aW9uX2VwX2luZm8pIHsKKwkJV0FSTigiTm8gU1BNIHByb3ZpZGVkIGJ5IEJMMiBib290IGxvYWRlciwgQm9vdGluZyBkZXZpY2UiCisJCQkiIHdpdGhvdXQgU1BNIGluaXRpYWxpemF0aW9uLiBTTUNzIGRlc3RpbmVkIGZvciBTUE0iCisJCQkiIHdpbGwgcmV0dXJuIFNNQ19VTktcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gdmFsaWQgZW50cnkgcG9pbnQgZm9yIFNQLCB3ZSByZXR1cm4gYSBub24temVybyB2YWx1ZQorCSAqIHNpZ25hbGxpbmcgZmFpbHVyZSBpbml0aWFsaXppbmcgdGhlIHNlcnZpY2UuIFdlIGJhaWwgb3V0IHdpdGhvdXQKKwkgKiByZWdpc3RlcmluZyBhbnkgaGFuZGxlcnMKKwkgKi8KKwlpZiAoIXNlY3VyZV9wYXJ0aXRpb25fZXBfaW5mby0+cGMpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJc3BtX2luaXRfc3BfZXBfc3RhdGUoc2VjdXJlX3BhcnRpdGlvbl9lcF9pbmZvLAorCQkJICAgICAgc2VjdXJlX3BhcnRpdGlvbl9lcF9pbmZvLT5wYywKKwkJCSAgICAgICZzcF9jdHgpOworCisJLyoKKwkgKiBBbGwgU1BNIGluaXRpYWxpemF0aW9uIGRvbmUuIE5vdyByZWdpc3RlciBvdXIgaW5pdCBmdW5jdGlvbiB3aXRoCisJICogQkwzMSBmb3IgZGVmZXJyZWQgaW52b2NhdGlvbgorCSAqLworCWJsMzFfcmVnaXN0ZXJfYmwzMl9pbml0KCZzcG1faW5pdCk7CisKKwlWRVJCT1NFKCIlcyBleGl0XG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEF0dHJpYnV0ZXMgYXJlIGVuY29kZWQgdXNpbmcgYSBkaWZmZXJlbnQgZm9ybWF0IGluIHRoZSBTTUMgaW50ZXJmYWNlIHRoYW4gaW4KKyAqIHRoZSBUcnVzdGVkIEZpcm13YXJlLCB3aGVyZSB0aGUgbW1hcF9hdHRyX3QgZW51bSB0eXBlIGlzIHVzZWQuIFRoaXMgZnVuY3Rpb24KKyAqIGNvbnZlcnRzIGFuIGF0dHJpYnV0ZXMgdmFsdWUgZnJvbSB0aGUgU01DIGZvcm1hdCB0byB0aGUgbW1hcF9hdHRyX3QgZm9ybWF0IGJ5CisgKiBzZXR0aW5nIE1UX1JXL01UX1JPLCBNVF9VU0VSL01UX1BSSVZJTEVHRUQgYW5kIE1UX0VYRUNVVEUvTVRfRVhFQ1VURV9ORVZFUi4KKyAqIFRoZSBvdGhlciBmaWVsZHMgYXJlIGxlZnQgYXMgMCBiZWNhdXNlIHRoZXkgYXJlIGlnbm9yZWQgYnkgdGhlIGZ1bmN0aW9uCisgKiBjaGFuZ2VfbWVtX2F0dHJpYnV0ZXMoKS4KKyAqLworc3RhdGljIG1tYXBfYXR0cl90IHNtY19hdHRyX3RvX21tYXBfYXR0cih1bnNpZ25lZCBpbnQgYXR0cmlidXRlcykKK3sKKwltbWFwX2F0dHJfdCB0Zl9hdHRyID0gMDsKKworCXVuc2lnbmVkIGludCBhY2Nlc3MgPSAoYXR0cmlidXRlcyAmIFNQX01FTU9SWV9BVFRSSUJVVEVTX0FDQ0VTU19NQVNLKQorCQkJICAgICAgPj4gU1BfTUVNT1JZX0FUVFJJQlVURVNfQUNDRVNTX1NISUZUOworCisJaWYgKGFjY2VzcyA9PSBTUF9NRU1PUllfQVRUUklCVVRFU19BQ0NFU1NfUlcpIHsKKwkJdGZfYXR0ciB8PSBNVF9SVyB8IE1UX1VTRVI7CisJfSBlbHNlIGlmIChhY2Nlc3MgPT0gIFNQX01FTU9SWV9BVFRSSUJVVEVTX0FDQ0VTU19STykgeworCQl0Zl9hdHRyIHw9IE1UX1JPIHwgTVRfVVNFUjsKKwl9IGVsc2UgeworCQkvKiBPdGhlciB2YWx1ZXMgYXJlIHJlc2VydmVkLiAqLworCQlhc3NlcnQoYWNjZXNzID09ICBTUF9NRU1PUllfQVRUUklCVVRFU19BQ0NFU1NfTk9BQ0NFU1MpOworCQkvKiBUaGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0IHRoZXJlJ3Mgbm8gYWNjZXNzIGZyb20gRUwwICovCisJCXRmX2F0dHIgfD0gTVRfUk8gfCBNVF9QUklWSUxFR0VEOworCX0KKworCWlmICgoYXR0cmlidXRlcyAmIFNQX01FTU9SWV9BVFRSSUJVVEVTX05PTl9FWEVDKSA9PSAwKSB7CisJCXRmX2F0dHIgfD0gTVRfRVhFQ1VURTsKKwl9IGVsc2UgeworCQl0Zl9hdHRyIHw9IE1UX0VYRUNVVEVfTkVWRVI7CisJfQorCisJcmV0dXJuIHRmX2F0dHI7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGF0dHJpYnV0ZXMgZnJvbSB0aGUgVHJ1c3RlZCBGaXJtd2FyZSBmb3JtYXQgaW50byB0aGUKKyAqIFNNQyBpbnRlcmZhY2UgZm9ybWF0LgorICovCitzdGF0aWMgaW50IHNtY19tbWFwX3RvX3NtY19hdHRyKG1tYXBfYXR0cl90IGF0dHIpCit7CisJaW50IHNtY19hdHRyID0gMDsKKworCWludCBkYXRhX2FjY2VzczsKKworCWlmICgoYXR0ciAmIE1UX1VTRVIpID09IDApIHsKKwkJLyogTm8gYWNjZXNzIGZyb20gRUwwLiAqLworCQlkYXRhX2FjY2VzcyA9IFNQX01FTU9SWV9BVFRSSUJVVEVTX0FDQ0VTU19OT0FDQ0VTUzsKKwl9IGVsc2UgeworCQlpZiAoKGF0dHIgJiBNVF9SVykgIT0gMCkgeworCQkJYXNzZXJ0KE1UX1RZUEUoYXR0cikgIT0gTVRfREVWSUNFKTsKKwkJCWRhdGFfYWNjZXNzID0gU1BfTUVNT1JZX0FUVFJJQlVURVNfQUNDRVNTX1JXOworCQl9IGVsc2UgeworCQkJZGF0YV9hY2Nlc3MgPSBTUF9NRU1PUllfQVRUUklCVVRFU19BQ0NFU1NfUk87CisJCX0KKwl9CisKKwlzbWNfYXR0ciB8PSAoZGF0YV9hY2Nlc3MgJiBTUF9NRU1PUllfQVRUUklCVVRFU19BQ0NFU1NfTUFTSykKKwkJICAgIDw8IFNQX01FTU9SWV9BVFRSSUJVVEVTX0FDQ0VTU19TSElGVDsKKworCWlmIChhdHRyICYgTVRfRVhFQ1VURV9ORVZFUikgeworCQlzbWNfYXR0ciB8PSBTUF9NRU1PUllfQVRUUklCVVRFU19OT05fRVhFQzsKKwl9CisKKwlyZXR1cm4gc21jX2F0dHI7Cit9CisKK3N0YXRpYyBpbnQgc3BtX21lbW9yeV9hdHRyaWJ1dGVzX2dldF9zbWNfaGFuZGxlcih1aW50cHRyX3QgYmFzZV92YSkKK3sKKwlzcGluX2xvY2soJm1lbV9hdHRyX3NtY19sb2NrKTsKKworCW1tYXBfYXR0cl90IGF0dHJpYnV0ZXM7CisJaW50IHJjID0gZ2V0X21lbV9hdHRyaWJ1dGVzKHNlY3VyZV9wYXJ0aXRpb25feGxhdF9jdHhfaGFuZGxlLAorCQkJCSAgICAgYmFzZV92YSwgJmF0dHJpYnV0ZXMpOworCisJc3Bpbl91bmxvY2soJm1lbV9hdHRyX3NtY19sb2NrKTsKKworCS8qIENvbnZlcnQgZXJyb3IgY29kZXMgb2YgZ2V0X21lbV9hdHRyaWJ1dGVzKCkgaW50byBTUE0gb25lcy4gKi8KKwlhc3NlcnQocmMgPT0gMCB8fCByYyA9PSAtRUlOVkFMKTsKKworCWlmIChyYyA9PSAwKSB7CisJCXJldHVybiBzbWNfbW1hcF90b19zbWNfYXR0cihhdHRyaWJ1dGVzKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gU1BNX0lOVkFMSURfUEFSQU1FVEVSOworCX0KK30KKworc3RhdGljIGludCBzcG1fbWVtb3J5X2F0dHJpYnV0ZXNfc2V0X3NtY19oYW5kbGVyKHVfcmVnaXN0ZXJfdCBwYWdlX2FkZHJlc3MsCisJCQkJCXVfcmVnaXN0ZXJfdCBwYWdlc19jb3VudCwKKwkJCQkJdV9yZWdpc3Rlcl90IHNtY19hdHRyaWJ1dGVzKQoreworCXVpbnRwdHJfdCBiYXNlX3ZhID0gKHVpbnRwdHJfdCkgcGFnZV9hZGRyZXNzOworCXNpemVfdCBzaXplID0gKHNpemVfdCkgKHBhZ2VzX2NvdW50ICogUEFHRV9TSVpFKTsKKwl1bnNpZ25lZCBpbnQgYXR0cmlidXRlcyA9ICh1bnNpZ25lZCBpbnQpIHNtY19hdHRyaWJ1dGVzOworCisJSU5GTygiICBTdGFydCBhZGRyZXNzICA6IDB4JWx4XG4iLCBiYXNlX3ZhKTsKKwlJTkZPKCIgIE51bWJlciBvZiBwYWdlczogJWkgKCV6aSBieXRlcylcbiIsIChpbnQpIHBhZ2VzX2NvdW50LCBzaXplKTsKKwlJTkZPKCIgIEF0dHJpYnV0ZXMgICAgIDogMHgleFxuIiwgYXR0cmlidXRlcyk7CisKKwlzcGluX2xvY2soJm1lbV9hdHRyX3NtY19sb2NrKTsKKworCWludCByZXQgPSBjaGFuZ2VfbWVtX2F0dHJpYnV0ZXMoc2VjdXJlX3BhcnRpdGlvbl94bGF0X2N0eF9oYW5kbGUsCisJCQliYXNlX3ZhLCBzaXplLCBzbWNfYXR0cl90b19tbWFwX2F0dHIoYXR0cmlidXRlcykpOworCisJc3Bpbl91bmxvY2soJm1lbV9hdHRyX3NtY19sb2NrKTsKKworCS8qIENvbnZlcnQgZXJyb3IgY29kZXMgb2YgY2hhbmdlX21lbV9hdHRyaWJ1dGVzKCkgaW50byBTUE0gb25lcy4gKi8KKwlhc3NlcnQocmV0ID09IDAgfHwgcmV0ID09IC1FSU5WQUwpOworCisJcmV0dXJuIChyZXQgPT0gMCkgPyBTUE1fU1VDQ0VTUyA6IFNQTV9JTlZBTElEX1BBUkFNRVRFUjsKK30KKworCit1aW50NjRfdCBzcG1fc21jX2hhbmRsZXIodWludDMyX3Qgc21jX2ZpZCwKKwkJCSB1aW50NjRfdCB4MSwKKwkJCSB1aW50NjRfdCB4MiwKKwkJCSB1aW50NjRfdCB4MywKKwkJCSB1aW50NjRfdCB4NCwKKwkJCSB2b2lkICpjb29raWUsCisJCQkgdm9pZCAqaGFuZGxlLAorCQkJIHVpbnQ2NF90IGZsYWdzKQoreworCWNwdV9jb250ZXh0X3QgKm5zX2NwdV9jb250ZXh0OworCXVuc2lnbmVkIGludCBuczsKKworCS8qIERldGVybWluZSB3aGljaCBzZWN1cml0eSBzdGF0ZSB0aGlzIFNNQyBvcmlnaW5hdGVkIGZyb20gKi8KKwlucyA9IGlzX2NhbGxlcl9ub25fc2VjdXJlKGZsYWdzKTsKKworCWlmIChucyA9PSBTTUNfRlJPTV9TRUNVUkUpIHsKKworCQkvKiBIYW5kbGUgU01DcyBmcm9tIFNlY3VyZSB3b3JsZC4gKi8KKworCQlzd2l0Y2ggKHNtY19maWQpIHsKKworCQljYXNlICBTUE1fVkVSU0lPTl9BQVJDSDMyOgorCQkJU01DX1JFVDEoaGFuZGxlLCBTUE1fVkVSU0lPTl9DT01QSUxFRCk7CisKKwkJY2FzZSBTUF9FVkVOVF9DT01QTEVURV9BQVJDSDY0OgorCQkJYXNzZXJ0KGhhbmRsZSA9PSBjbV9nZXRfY29udGV4dChTRUNVUkUpKTsKKwkJCWNtX2VsMV9zeXNyZWdzX2NvbnRleHRfc2F2ZShTRUNVUkUpOworCQkJc3BtX3NldHVwX25leHRfZXJldF9pbnRvX3NlbDAoaGFuZGxlKTsKKworCQkJaWYgKHNwX2luaXRfaW5fcHJvZ3Jlc3MpIHsKKwkJCQkvKgorCQkJCSAqIFNQTSByZXBvcnRzIGNvbXBsZXRpb24uIFRoZSBTUE0gbXVzdCBoYXZlCisJCQkJICogaW5pdGlhdGVkIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRocm91Z2ggYQorCQkJCSAqIHN5bmNocm9ub3VzIGVudHJ5IGludG8gdGhlIHNlY3VyZQorCQkJCSAqIHBhcnRpdGlvbi4gSnVtcCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBDCisJCQkJICogcnVudGltZSBjb250ZXh0LgorCQkJCSAqLworCQkJCXNwbV9zeW5jaHJvbm91c19zcF9leGl0KCZzcF9jdHgsIHgxKTsKKwkJCQlhc3NlcnQoMCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIHRoZSByZXN1bHQgZnJvbSB0aGUgU2VjdXJlIHBhcnRpdGlvbiBvZiBhbgorCQkJICogZWFybGllciByZXF1ZXN0LiBDb3B5IHRoZSByZXN1bHQgaW50byB0aGUgbm9uLXNlY3VyZQorCQkJICogY29udGV4dCwgc2F2ZSB0aGUgc2VjdXJlIHN0YXRlIGFuZCByZXR1cm4gdG8gdGhlCisJCQkgKiBub24tc2VjdXJlIHN0YXRlLgorCQkJICovCisKKwkJCS8qIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgbm9uLXNlY3VyZSBjb250ZXh0ICovCisJCQluc19jcHVfY29udGV4dCA9IGNtX2dldF9jb250ZXh0KE5PTl9TRUNVUkUpOworCQkJYXNzZXJ0KG5zX2NwdV9jb250ZXh0KTsKKworCQkJLyogUmVzdG9yZSBub24tc2VjdXJlIHN0YXRlICovCisJCQljbV9lbDFfc3lzcmVnc19jb250ZXh0X3Jlc3RvcmUoTk9OX1NFQ1VSRSk7CisJCQljbV9zZXRfbmV4dF9lcmV0X2NvbnRleHQoTk9OX1NFQ1VSRSk7CisKKwkJCS8qIFJldHVybiB0byBub3JtYWwgd29ybGQgKi8KKwkJCVNNQ19SRVQxKG5zX2NwdV9jb250ZXh0LCB4MSk7CisKKwkJY2FzZSBTUF9NRU1PUllfQVRUUklCVVRFU19HRVRfQUFSQ0g2NDoKKwkJCUlORk8oIlJlY2VpdmVkIFNQX01FTU9SWV9BVFRSSUJVVEVTX0dFVF9BQVJDSDY0IFNNQ1xuIik7CisKKwkJCWlmICghc3BfaW5pdF9pbl9wcm9ncmVzcykgeworCQkJCVdBUk4oIlNQX01FTU9SWV9BVFRSSUJVVEVTX0dFVF9BQVJDSDY0IGlzIGF2YWlsYWJsZSBhdCBib290IHRpbWUgb25seVxuIik7CisJCQkJU01DX1JFVDEoaGFuZGxlLCBTUE1fTk9UX1NVUFBPUlRFRCk7CisJCQl9CisJCQlTTUNfUkVUMShoYW5kbGUsIHNwbV9tZW1vcnlfYXR0cmlidXRlc19nZXRfc21jX2hhbmRsZXIoeDEpKTsKKworCQljYXNlIFNQX01FTU9SWV9BVFRSSUJVVEVTX1NFVF9BQVJDSDY0OgorCQkJSU5GTygiUmVjZWl2ZWQgU1BfTUVNT1JZX0FUVFJJQlVURVNfU0VUX0FBUkNINjQgU01DXG4iKTsKKworCQkJaWYgKCFzcF9pbml0X2luX3Byb2dyZXNzKSB7CisJCQkJV0FSTigiU1BfTUVNT1JZX0FUVFJJQlVURVNfU0VUX0FBUkNINjQgaXMgYXZhaWxhYmxlIGF0IGJvb3QgdGltZSBvbmx5XG4iKTsKKwkJCQlTTUNfUkVUMShoYW5kbGUsIFNQTV9OT1RfU1VQUE9SVEVEKTsKKwkJCX0KKwkJCVNNQ19SRVQxKGhhbmRsZSwgc3BtX21lbW9yeV9hdHRyaWJ1dGVzX3NldF9zbWNfaGFuZGxlcih4MSwgeDIsIHgzKSk7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisKKwkJLyogSGFuZGxlIFNNQ3MgZnJvbSBOb24tc2VjdXJlIHdvcmxkLiAqLworCisJCXN3aXRjaCAoc21jX2ZpZCkgeworCisJCWNhc2UgIFNQX1ZFUlNJT05fQUFSQ0g2NDoKKwkJY2FzZSAgU1BfVkVSU0lPTl9BQVJDSDMyOgorCQkJU01DX1JFVDEoaGFuZGxlLCBTUF9WRVJTSU9OX0NPTVBJTEVEKTsKKworCQljYXNlIE1NX0NPTU1VTklDQVRFX0FBUkNIMzI6CisJCWNhc2UgTU1fQ09NTVVOSUNBVEVfQUFSQ0g2NDoKKworCQkJLyogU2F2ZSB0aGUgTm9ybWFsIHdvcmxkIGNvbnRleHQgKi8KKwkJCWNtX2VsMV9zeXNyZWdzX2NvbnRleHRfc2F2ZShOT05fU0VDVVJFKTsKKworCQkJLyoKKwkJCSAqIFJlc3RvcmUgdGhlIHNlY3VyZSB3b3JsZCBjb250ZXh0IGFuZCBwcmVwYXJlIGZvcgorCQkJICogZW50cnkgaW4gUy1FTDAKKwkJCSAqLworCQkJYXNzZXJ0KCZzcF9jdHguY3B1X2N0eCA9PSBjbV9nZXRfY29udGV4dChTRUNVUkUpKTsKKwkJCWNtX2VsMV9zeXNyZWdzX2NvbnRleHRfcmVzdG9yZShTRUNVUkUpOworCQkJY21fc2V0X25leHRfZXJldF9jb250ZXh0KFNFQ1VSRSk7CisKKwkJCS8qIENvb2tpZS4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIEl0IG11c3QgYmUgemVyby4gKi8KKwkJCWFzc2VydCh4MSA9PSAwKTsKKworCQkJaWYgKHgzICE9IDApIHsKKwkJCQlWRVJCT1NFKCJNTV9DT01NVU5JQ0FURV9BQVJDSDMyLzY0OiBYMyBpcyBub3QgMCBhcyByZWNvbW1lbmRlZC5cbiIpOworCQkJfQorCisJCQlTTUNfUkVUNCgmc3BfY3R4LmNwdV9jdHgsIHNtY19maWQsIHgxLCB4MiwgeDMpOworCisJCWNhc2UgU1BfTUVNT1JZX0FUVFJJQlVURVNfR0VUX0FBUkNINjQ6CisJCWNhc2UgU1BfTUVNT1JZX0FUVFJJQlVURVNfU0VUX0FBUkNINjQ6CisJCQkvKiBTTUMgaW50ZXJmYWNlcyByZXNlcnZlZCBmb3Igc2VjdXJlIGNhbGxlcnMuICovCisJCQlTTUNfUkVUMShoYW5kbGUsIFNQTV9OT1RfU1VQUE9SVEVEKTsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlTTUNfUkVUMShoYW5kbGUsIFNNQ19VTkspOworfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvc3RkX3N2Yy9zcG0vc3BtX3ByaXZhdGUuaCBiL3NlcnZpY2VzL3N0ZF9zdmMvc3BtL3NwbV9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5OTNlOAotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL3N0ZF9zdmMvc3BtL3NwbV9wcml2YXRlLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworI2lmbmRlZiBfX1NQTV9QUklWQVRFX0hfXworI2RlZmluZSBfX1NQTV9QUklWQVRFX0hfXworCisjaW5jbHVkZSA8Y29udGV4dC5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29uc3RhbnRzIHRoYXQgYWxsb3cgYXNzZW1ibGVyIGNvZGUgdG8gcHJlc2VydmUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyBvZiB0aGUKKyAqIEMgcnVudGltZSBjb250ZXh0IHdoaWxlIHBlcmZvcm1pbmcgYSBzZWN1cml0eSBzdGF0ZSBzd2l0Y2guCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTUF9DX1JUX0NUWF9YMTkJCTB4MAorI2RlZmluZSBTUF9DX1JUX0NUWF9YMjAJCTB4OAorI2RlZmluZSBTUF9DX1JUX0NUWF9YMjEJCTB4MTAKKyNkZWZpbmUgU1BfQ19SVF9DVFhfWDIyCQkweDE4CisjZGVmaW5lIFNQX0NfUlRfQ1RYX1gyMwkJMHgyMAorI2RlZmluZSBTUF9DX1JUX0NUWF9YMjQJCTB4MjgKKyNkZWZpbmUgU1BfQ19SVF9DVFhfWDI1CQkweDMwCisjZGVmaW5lIFNQX0NfUlRfQ1RYX1gyNgkJMHgzOAorI2RlZmluZSBTUF9DX1JUX0NUWF9YMjcJCTB4NDAKKyNkZWZpbmUgU1BfQ19SVF9DVFhfWDI4CQkweDQ4CisjZGVmaW5lIFNQX0NfUlRfQ1RYX1gyOQkJMHg1MAorI2RlZmluZSBTUF9DX1JUX0NUWF9YMzAJCTB4NTgKKworI2RlZmluZSBTUF9DX1JUX0NUWF9TSVpFCTB4NjAKKyNkZWZpbmUgU1BfQ19SVF9DVFhfRU5UUklFUwkoU1BfQ19SVF9DVFhfU0laRSA+PiBEV09SRF9TSElGVCkKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8eGxhdF90YWJsZXNfdjIuaD4KKworLyogSGFuZGxlIG9uIHRoZSBTZWN1cmUgcGFydGl0aW9uIHRyYW5zbGF0aW9uIGNvbnRleHQgKi8KK2V4dGVybiB4bGF0X2N0eF90ICpzZWN1cmVfcGFydGl0aW9uX3hsYXRfY3R4X2hhbmRsZTsKKworc3RydWN0IGVudHJ5X3BvaW50X2luZm87CisKK3R5cGVkZWYgc3RydWN0IHNlY3VyZV9wYXJ0aXRpb25fY29udGV4dCB7CisJdWludDY0X3QgY19ydF9jdHg7CisJY3B1X2NvbnRleHRfdCBjcHVfY3R4OworfSBzZWN1cmVfcGFydGl0aW9uX2NvbnRleHRfdDsKKwordWludDY0X3Qgc3BtX3NlY3VyZV9wYXJ0aXRpb25fZW50ZXIodWludDY0X3QgKmNfcnRfY3R4KTsKK3ZvaWQgX19kZWFkMiBzcG1fc2VjdXJlX3BhcnRpdGlvbl9leGl0KHVpbnQ2NF90IGNfcnRfY3R4LCB1aW50NjRfdCByZXQpOwordm9pZCBzcG1faW5pdF9zcF9lcF9zdGF0ZShzdHJ1Y3QgZW50cnlfcG9pbnRfaW5mbyAqc3BfZXBfaW5mbywKKwkJCSAgdWludDY0X3QgcGMsCisJCQkgIHNlY3VyZV9wYXJ0aXRpb25fY29udGV4dF90ICpzcF9jdHhfcHRyKTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fU1BNX1BSSVZBVEVfSF9fICovCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zdGRfc3ZjL3NwbS9zcG1fc2hpbV9wcml2YXRlLmggYi9zZXJ2aWNlcy9zdGRfc3ZjL3NwbS9zcG1fc2hpbV9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5NTNjZAotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL3N0ZF9zdmMvc3BtL3NwbV9zaGltX3ByaXZhdGUuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCisjaWZuZGVmIF9fU1BNX1NISU1fUFJJVkFURV9fCisjZGVmaW5lIF9fU1BNX1NISU1fUFJJVkFURV9fCisKKyNpbmNsdWRlIDx0eXBlcy5oPgorCisvKiBBc3NlbWJseSBzb3VyY2UgKi8KK2V4dGVybiB1aW50cHRyX3Qgc3BtX3NoaW1fZXhjZXB0aW9uc19wdHI7CisKKy8qIExpbmtlciBzeW1ib2xzICovCitleHRlcm4gdWludHB0cl90IF9fU1BNX1NISU1fRVhDRVBUSU9OU19TVEFSVF9fOworZXh0ZXJuIHVpbnRwdHJfdCBfX1NQTV9TSElNX0VYQ0VQVElPTlNfRU5EX187CisKKy8qIERlZmluaXRpb25zICovCisjZGVmaW5lIFNQTV9TSElNX0VYQ0VQVElPTlNfUFRSCQkodWludHB0cl90KSgmc3BtX3NoaW1fZXhjZXB0aW9uc19wdHIpCisKKyNkZWZpbmUgU1BNX1NISU1fRVhDRVBUSU9OU19TVEFSVAlcCisJKHVpbnRwdHJfdCkoJl9fU1BNX1NISU1fRVhDRVBUSU9OU19TVEFSVF9fKQorI2RlZmluZSBTUE1fU0hJTV9FWENFUFRJT05TX0VORAkJXAorCSh1aW50cHRyX3QpKCZfX1NQTV9TSElNX0VYQ0VQVElPTlNfRU5EX18pCisjZGVmaW5lIFNQTV9TSElNX0VYQ0VQVElPTlNfU0laRQlcCisJKFNQTV9TSElNX0VYQ0VQVElPTlNfRU5EIC0gU1BNX1NISU1fRVhDRVBUSU9OU19TVEFSVCkKKworI2VuZGlmIC8qIF9fU1BNX1NISU1fUFJJVkFURV9fICovCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zdGRfc3ZjL3N0ZF9zdmNfc2V0dXAuYyBiL3NlcnZpY2VzL3N0ZF9zdmMvc3RkX3N2Y19zZXR1cC5jCmluZGV4IDhlNjkwNDYuLmZmYzM0NzEgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3N0ZF9zdmMvc3RkX3N2Y19zZXR1cC5jCisrKyBiL3NlcnZpY2VzL3N0ZF9zdmMvc3RkX3N2Y19zZXR1cC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE2LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICovCkBAIC0xMSw3ICsxMSw5IEBACiAjaW5jbHVkZSA8cHNjaS5oPgogI2luY2x1ZGUgPHJ1bnRpbWVfaW5zdHIuaD4KICNpbmNsdWRlIDxydW50aW1lX3N2Yy5oPgorI2luY2x1ZGUgPHNkZWkuaD4KICNpbmNsdWRlIDxzbWNjX2hlbHBlcnMuaD4KKyNpbmNsdWRlIDxzcG1fc3ZjLmg+CiAjaW5jbHVkZSA8c3RkX3N2Yy5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHV1aWQuaD4KQEAgLTI1LDE1ICsyNywzMSBAQAogc3RhdGljIGludDMyX3Qgc3RkX3N2Y19zZXR1cCh2b2lkKQogewogCXVpbnRwdHJfdCBzdmNfYXJnOworCWludCByZXQgPSAwOwogCiAJc3ZjX2FyZyA9IGdldF9hcm1fc3RkX3N2Y19hcmdzKFBTQ0lfRklEX01BU0spOwogCWFzc2VydChzdmNfYXJnKTsKIAogCS8qCi0JICogUFNDSSBpcyB0aGUgb25seSBzcGVjaWZpY2F0aW9uIGltcGxlbWVudGVkIGFzIGEgU3RhbmRhcmQgU2VydmljZS4KKwkgKiBQU0NJIGlzIG9uZSBvZiB0aGUgc3BlY2lmaWNhdGlvbnMgaW1wbGVtZW50ZWQgYXMgYSBTdGFuZGFyZCBTZXJ2aWNlLgogCSAqIFRoZSBgcHNjaV9zZXR1cCgpYCBhbHNvIGRvZXMgRUwzIGFyY2hpdGVjdHVyYWwgc2V0dXAuCiAJICovCi0JcmV0dXJuIHBzY2lfc2V0dXAoKGNvbnN0IHBzY2lfbGliX2FyZ3NfdCAqKXN2Y19hcmcpOworCWlmIChwc2NpX3NldHVwKChjb25zdCBwc2NpX2xpYl9hcmdzX3QgKilzdmNfYXJnKSAhPSBQU0NJX0VfU1VDQ0VTUykgeworCQlyZXQgPSAxOworCX0KKworI2lmIEVOQUJMRV9TUE0KKwlpZiAoc3BtX3NldHVwKCkgIT0gMCkgeworCQlyZXQgPSAxOworCX0KKyNlbmRpZgorCisjaWYgU0RFSV9TVVBQT1JUCisJLyogU0RFSSBpbml0aWFsaXNhdGlvbiAqLworCXNkZWlfaW5pdCgpOworI2VuZGlmCisKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtODAsNiArOTgsMjQgQEAKIAkJU01DX1JFVDEoaGFuZGxlLCByZXQpOwogCX0KIAorI2lmIEVOQUJMRV9TUE0KKwkvKgorCSAqIERpc3BhdGNoIFNQTSBjYWxscyB0byBTUE0gU01DIGhhbmRsZXIgYW5kIHJldHVybiBpdHMgcmV0dXJuCisJICogdmFsdWUKKwkgKi8KKwlpZiAoaXNfc3BtX2ZpZChzbWNfZmlkKSkgeworCQlyZXR1cm4gc3BtX3NtY19oYW5kbGVyKHNtY19maWQsIHgxLCB4MiwgeDMsIHg0LCBjb29raWUsCisJCQkJICAgICAgIGhhbmRsZSwgZmxhZ3MpOworCX0KKyNlbmRpZgorCisjaWYgU0RFSV9TVVBQT1JUCisJaWYgKGlzX3NkZWlfZmlkKHNtY19maWQpKSB7CisJCXJldHVybiBzZGVpX3NtY19oYW5kbGVyKHNtY19maWQsIHgxLCB4MiwgeDMsIHg0LCBjb29raWUsIGhhbmRsZSwKKwkJCQlmbGFncyk7CisJfQorI2VuZGlmCisKIAlzd2l0Y2ggKHNtY19maWQpIHsKIAljYXNlIEFSTV9TVERfU1ZDX0NBTExfQ09VTlQ6CiAJCS8qCmRpZmYgLS1naXQgYS90b29scy9jZXJ0X2NyZWF0ZS9pbmNsdWRlL2NlcnQuaCBiL3Rvb2xzL2NlcnRfY3JlYXRlL2luY2x1ZGUvY2VydC5oCmluZGV4IDI1NmU3YWYuLjliNGVmNWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2NlcnRfY3JlYXRlL2luY2x1ZGUvY2VydC5oCisrKyBiL3Rvb2xzL2NlcnRfY3JlYXRlL2luY2x1ZGUvY2VydC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSwgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAqLwpAQCAtNDgsNyArNDgsMTMgQEAKIGludCBjZXJ0X2luaXQodm9pZCk7CiBjZXJ0X3QgKmNlcnRfZ2V0X2J5X29wdChjb25zdCBjaGFyICpvcHQpOwogaW50IGNlcnRfYWRkX2V4dChYNTA5ICppc3N1ZXIsIFg1MDkgKnN1YmplY3QsIGludCBuaWQsIGNoYXIgKnZhbHVlKTsKLWludCBjZXJ0X25ldyhpbnQga2V5X2FsZywgY2VydF90ICpjZXJ0LCBpbnQgZGF5cywgaW50IGNhLCBTVEFDS19PRihYNTA5X0VYVEVOU0lPTikgKiBzayk7CitpbnQgY2VydF9uZXcoCisJaW50IGtleV9hbGcsCisJaW50IG1kX2FsZywKKwljZXJ0X3QgKmNlcnQsCisJaW50IGRheXMsCisJaW50IGNhLAorCVNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqIHNrKTsKIAogLyogTWFjcm8gdG8gcmVnaXN0ZXIgdGhlIGNlcnRpZmljYXRlcyB1c2VkIGluIHRoZSBDb1QgKi8KICNkZWZpbmUgUkVHSVNURVJfQ09UKF9jZXJ0cykgXApkaWZmIC0tZ2l0IGEvdG9vbHMvY2VydF9jcmVhdGUvaW5jbHVkZS9rZXkuaCBiL3Rvb2xzL2NlcnRfY3JlYXRlL2luY2x1ZGUva2V5LmgKaW5kZXggMzA0ZmE2MS4uMWEyNTNjYyAxMDA2NDQKLS0tIGEvdG9vbHMvY2VydF9jcmVhdGUvaW5jbHVkZS9rZXkuaAorKysgYi90b29scy9jZXJ0X2NyZWF0ZS9pbmNsdWRlL2tleS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSwgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAqLwpAQCAtMzAsNiArMzAsMTMgQEAKIAlLRVlfQUxHX01BWF9OVU0KIH07CiAKKy8qIFN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobXMgKi8KK2VudW17CisJSEFTSF9BTEdfU0hBMjU2LAorCUhBU0hfQUxHX1NIQTM4NCwKKwlIQVNIX0FMR19TSEE1MTIsCit9OworCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGUga2V5cwogICogcmVxdWlyZWQgdG8gc2lnbiB0aGUgY2VydGlmaWNhdGVzLgpkaWZmIC0tZ2l0IGEvdG9vbHMvY2VydF9jcmVhdGUvaW5jbHVkZS9zaGEuaCBiL3Rvb2xzL2NlcnRfY3JlYXRlL2luY2x1ZGUvc2hhLmgKaW5kZXggNjkwN2ZhMS4uNGQwN2ExZSAxMDA2NDQKLS0tIGEvdG9vbHMvY2VydF9jcmVhdGUvaW5jbHVkZS9zaGEuaAorKysgYi90b29scy9jZXJ0X2NyZWF0ZS9pbmNsdWRlL3NoYS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSwgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAqLwpAQCAtNyw2ICs3LDYgQEAKICNpZm5kZWYgU0hBX0hfCiAjZGVmaW5lIFNIQV9IXwogCi1pbnQgc2hhX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGNoYXIgKm1kKTsKK2ludCBzaGFfZmlsZShpbnQgbWRfYWxnLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgY2hhciAqbWQpOwogCiAjZW5kaWYgLyogU0hBX0hfICovCmRpZmYgLS1naXQgYS90b29scy9jZXJ0X2NyZWF0ZS9zcmMvY2VydC5jIGIvdG9vbHMvY2VydF9jcmVhdGUvc3JjL2NlcnQuYwppbmRleCAxYjg0ZTM2Li44ZThhZWU2IDEwMDY0NAotLS0gYS90b29scy9jZXJ0X2NyZWF0ZS9zcmMvY2VydC5jCisrKyBiL3Rvb2xzL2NlcnRfY3JlYXRlL3NyYy9jZXJ0LmMKQEAgLTU2LDYgKzU2LDE5IEBACiAKIAlyZXR1cm4gcmV0OwogfQorY29uc3QgRVZQX01EICpnZXRfZGlnZXN0KGludCBhbGcpCit7CisJc3dpdGNoIChhbGcpIHsKKwljYXNlIEhBU0hfQUxHX1NIQTI1NjoKKwkJcmV0dXJuIEVWUF9zaGEyNTYoKTsKKwljYXNlIEhBU0hfQUxHX1NIQTM4NDoKKwkJcmV0dXJuIEVWUF9zaGEzODQoKTsKKwljYXNlIEhBU0hfQUxHX1NIQTUxMjoKKwkJcmV0dXJuIEVWUF9zaGE1MTIoKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CiAKIGludCBjZXJ0X2FkZF9leHQoWDUwOSAqaXNzdWVyLCBYNTA5ICpzdWJqZWN0LCBpbnQgbmlkLCBjaGFyICp2YWx1ZSkKIHsKQEAgLTc5LDcgKzkyLDEzIEBACiAJcmV0dXJuIDE7CiB9CiAKLWludCBjZXJ0X25ldyhpbnQga2V5X2FsZywgY2VydF90ICpjZXJ0LCBpbnQgZGF5cywgaW50IGNhLCBTVEFDS19PRihYNTA5X0VYVEVOU0lPTikgKiBzaykKK2ludCBjZXJ0X25ldygKKwlpbnQga2V5X2FsZywKKwlpbnQgbWRfYWxnLAorCWNlcnRfdCAqY2VydCwKKwlpbnQgZGF5cywKKwlpbnQgY2EsCisJU1RBQ0tfT0YoWDUwOV9FWFRFTlNJT04pICogc2spCiB7CiAJRVZQX1BLRVkgKnBrZXkgPSBrZXlzW2NlcnQtPmtleV0ua2V5OwogCWNlcnRfdCAqaXNzdWVyX2NlcnQgPSAmY2VydHNbY2VydC0+aXNzdWVyXTsKQEAgLTkwLDcgKzEwOSw3IEBACiAJWDUwOV9OQU1FICpuYW1lOwogCUFTTjFfSU5URUdFUiAqc25vOwogCWludCBpLCBudW0sIHJjID0gMDsKLQlFVlBfTURfQ1RYIG1kQ3R4OworCUVWUF9NRF9DVFggKm1kQ3R4OwogCUVWUF9QS0VZX0NUWCAqcEtleUN0eCA9IE5VTEw7CiAKIAkvKiBDcmVhdGUgdGhlIGNlcnRpZmljYXRlIHN0cnVjdHVyZSAqLwpAQCAtMTExLDEwICsxMzAsMTQgQEAKIAkJaXNzdWVyID0geDsKIAl9CiAKLQlFVlBfTURfQ1RYX2luaXQoJm1kQ3R4KTsKKwltZEN0eCA9IEVWUF9NRF9DVFhfY3JlYXRlKCk7CisJaWYgKG1kQ3R4ID09IE5VTEwpIHsKKwkJRVJSX3ByaW50X2Vycm9yc19mcChzdGRvdXQpOworCQlnb3RvIEVORDsKKwl9CiAKIAkvKiBTaWduIHRoZSBjZXJ0aWZpY2F0ZSB3aXRoIHRoZSBpc3N1ZXIga2V5ICovCi0JaWYgKCFFVlBfRGlnZXN0U2lnbkluaXQoJm1kQ3R4LCAmcEtleUN0eCwgRVZQX3NoYTI1NigpLCBOVUxMLCBpa2V5KSkgeworCWlmICghRVZQX0RpZ2VzdFNpZ25Jbml0KG1kQ3R4LCAmcEtleUN0eCwgZ2V0X2RpZ2VzdChtZF9hbGcpLCBOVUxMLCBpa2V5KSkgewogCQlFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZG91dCk7CiAJCWdvdG8gRU5EOwogCX0KQEAgLTEzNCw3ICsxNTcsNyBAQAogCQkJZ290byBFTkQ7CiAJCX0KIAotCQlpZiAoIUVWUF9QS0VZX0NUWF9zZXRfcnNhX21nZjFfbWQocEtleUN0eCwgRVZQX3NoYTI1NigpKSkgeworCQlpZiAoIUVWUF9QS0VZX0NUWF9zZXRfcnNhX21nZjFfbWQocEtleUN0eCwgZ2V0X2RpZ2VzdChtZF9hbGcpKSkgewogCQkJRVJSX3ByaW50X2Vycm9yc19mcChzdGRvdXQpOwogCQkJZ290byBFTkQ7CiAJCX0KQEAgLTE4NCw3ICsyMDcsNyBAQAogCQl9CiAJfQogCi0JaWYgKCFYNTA5X3NpZ25fY3R4KHgsICZtZEN0eCkpIHsKKwlpZiAoIVg1MDlfc2lnbl9jdHgoeCwgbWRDdHgpKSB7CiAJCUVSUl9wcmludF9lcnJvcnNfZnAoc3Rkb3V0KTsKIAkJZ290byBFTkQ7CiAJfQpAQCAtMTk0LDcgKzIxNyw3IEBACiAJY2VydC0+eCA9IHg7CiAKIEVORDoKLQlFVlBfTURfQ1RYX2NsZWFudXAoJm1kQ3R4KTsKKwlFVlBfTURfQ1RYX2Rlc3Ryb3kobWRDdHgpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvY2VydF9jcmVhdGUvc3JjL2V4dC5jIGIvdG9vbHMvY2VydF9jcmVhdGUvc3JjL2V4dC5jCmluZGV4IDhhZTY2NDAuLjA1NWRkYmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2NlcnRfY3JlYXRlL3NyYy9leHQuYworKysgYi90b29scy9jZXJ0X2NyZWF0ZS9zcmMvZXh0LmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCWludCBzejsKIAogCS8qIE9CSkVDVF9JREVOVElGSUVSIHdpdGggaGFzaCBhbGdvcml0aG0gKi8KLQlhbGdvcml0aG0gPSBPQkpfbmlkMm9iaihtZC0+dHlwZSk7CisJYWxnb3JpdGhtID0gT0JKX25pZDJvYmooRVZQX01EX3R5cGUobWQpKTsKIAlpZiAoYWxnb3JpdGhtID09IE5VTEwpIHsKIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvY2VydF9jcmVhdGUvc3JjL2tleS5jIGIvdG9vbHMvY2VydF9jcmVhdGUvc3JjL2tleS5jCmluZGV4IGMxYmRlNWQuLjg3MWY5ZWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2NlcnRfY3JlYXRlL3NyYy9rZXkuYworKysgYi90b29scy9jZXJ0X2NyZWF0ZS9zcmMva2V5LmMKQEAgLTQzLDEzICs0MywzMSBAQAogCiBzdGF0aWMgaW50IGtleV9jcmVhdGVfcnNhKGtleV90ICprZXkpCiB7Ci0JUlNBICpyc2E7CisJQklHTlVNICplOworCVJTQSAqcnNhID0gTlVMTDsKIAotCXJzYSA9IFJTQV9nZW5lcmF0ZV9rZXkoUlNBX0tFWV9CSVRTLCBSU0FfRjQsIE5VTEwsIE5VTEwpOworCWUgPSBCTl9uZXcoKTsKKwlpZiAoZSA9PSBOVUxMKSB7CisJCXByaW50ZigiQ2Fubm90IGNyZWF0ZSBSU0EgZXhwb25lbnRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoIUJOX3NldF93b3JkKGUsIFJTQV9GNCkpIHsKKwkJcHJpbnRmKCJDYW5ub3QgYXNzaWduIFJTQSBleHBvbmVudFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJzYSA9IFJTQV9uZXcoKTsKIAlpZiAocnNhID09IE5VTEwpIHsKIAkJcHJpbnRmKCJDYW5ub3QgY3JlYXRlIFJTQSBrZXlcbiIpOwogCQlnb3RvIGVycjsKIAl9CisKKwlpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgocnNhLCBSU0FfS0VZX0JJVFMsIGUsIE5VTEwpKSB7CisJCXByaW50ZigiQ2Fubm90IGdlbmVyYXRlIFJTQSBrZXlcbiIpOworCQlnb3RvIGVycjsKKwl9CisKIAlpZiAoIUVWUF9QS0VZX2Fzc2lnbl9SU0Eoa2V5LT5rZXksIHJzYSkpIHsKIAkJcHJpbnRmKCJDYW5ub3QgYXNzaWduIFJTQSBrZXlcbiIpOwogCQlnb3RvIGVycjsKQEAgLTU4LDYgKzc2LDcgQEAKIAlyZXR1cm4gMTsKIGVycjoKIAlSU0FfZnJlZShyc2EpOworCUJOX2ZyZWUoZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkxLDkgKzExMCwxMCBAQAogCiB0eXBlZGVmIGludCAoKmtleV9jcmVhdGVfZm5fdCkoa2V5X3QgKmtleSk7CiBzdGF0aWMgY29uc3Qga2V5X2NyZWF0ZV9mbl90IGtleV9jcmVhdGVfZm5bS0VZX0FMR19NQVhfTlVNXSA9IHsKLQlrZXlfY3JlYXRlX3JzYSwKKwlrZXlfY3JlYXRlX3JzYSwgCS8qIEtFWV9BTEdfUlNBICovCisJa2V5X2NyZWF0ZV9yc2EsIAkvKiBLRVlfQUxHX1JTQV8xXzUgKi8KICNpZm5kZWYgT1BFTlNTTF9OT19FQwotCWtleV9jcmVhdGVfZWNkc2EsCisJa2V5X2NyZWF0ZV9lY2RzYSwgCS8qIEtFWV9BTEdfRUNEU0EgKi8KICNlbmRpZiAvKiBPUEVOU1NMX05PX0VDICovCiB9OwogCmRpZmYgLS1naXQgYS90b29scy9jZXJ0X2NyZWF0ZS9zcmMvbWFpbi5jIGIvdG9vbHMvY2VydF9jcmVhdGUvc3JjL21haW4uYwppbmRleCBkZjU5OTYxLi40YWJmZTZkIDEwMDY0NAotLS0gYS90b29scy9jZXJ0X2NyZWF0ZS9zcmMvbWFpbi5jCisrKyBiL3Rvb2xzL2NlcnRfY3JlYXRlL3NyYy9tYWluLmMKQEAgLTY4LDYgKzY4LDcgQEAKIAogLyogR2xvYmFsIG9wdGlvbnMgKi8KIHN0YXRpYyBpbnQga2V5X2FsZzsKK3N0YXRpYyBpbnQgaGFzaF9hbGc7CiBzdGF0aWMgaW50IG5ld19rZXlzOwogc3RhdGljIGludCBzYXZlX2tleXM7CiBzdGF0aWMgaW50IHByaW50X2NlcnQ7CkBAIC05NSw2ICs5NiwxMiBAQAogI2VuZGlmIC8qIE9QRU5TU0xfTk9fRUMgKi8KIH07CiAKK3N0YXRpYyBjb25zdCBjaGFyICpoYXNoX2FsZ3Nfc3RyW10gPSB7CisJW0hBU0hfQUxHX1NIQTI1Nl0gPSAic2hhMjU2IiwKKwlbSEFTSF9BTEdfU0hBMzg0XSA9ICJzaGEzODQiLAorCVtIQVNIX0FMR19TSEE1MTJdID0gInNoYTUxMiIsCit9OworCiBzdGF0aWMgdm9pZCBwcmludF9oZWxwKGNvbnN0IGNoYXIgKmNtZCwgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHQpCiB7CiAJaW50IHJlbSwgaSA9IDA7CkBAIC0xNTAsNiArMTU3LDE5IEBACiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgaW50IGdldF9oYXNoX2FsZyhjb25zdCBjaGFyICpoYXNoX2FsZ19zdHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IE5VTV9FTEVNKGhhc2hfYWxnc19zdHIpIDsgaSsrKSB7CisJCWlmICgwID09IHN0cmNtcChoYXNoX2FsZ19zdHIsIGhhc2hfYWxnc19zdHJbaV0pKSB7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKworCXJldHVybiAtMTsKK30KKwogc3RhdGljIHZvaWQgY2hlY2tfY21kX3BhcmFtcyh2b2lkKQogewogCWNlcnRfdCAqY2VydDsKQEAgLTIyOCw2ICsyNDgsMTAgQEAKIFBLQ1MjMSB2Mi4xLCAncnNhXzFfNScgLSBSU0EgUEtDUyMxIHYxLjUsICdlY2RzYSciCiAJfSwKIAl7CisJCXsgImhhc2gtYWxnIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdzJyB9LAorCQkiSGFzaCBhbGdvcml0aG0gOiAnc2hhMjU2JyAoZGVmYXVsdCksICdzaGEzODQnLCAnc2hhNTEyJyIKKwl9LAorCXsKIAkJeyAic2F2ZS1rZXlzIiwgbm9fYXJndW1lbnQsIE5VTEwsICdrJyB9LAogCQkiU2F2ZSBrZXkgcGFpcnMgaW50byBmaWxlcy4gRmlsZW5hbWVzIG11c3QgYmUgcHJvdmlkZWQiCiAJfSwKQEAgLTI0NCw3ICsyNjgsNyBAQAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlTVEFDS19PRihYNTA5X0VYVEVOU0lPTikgKiBzazsKLQlYNTA5X0VYVEVOU0lPTiAqY2VydF9leHQ7CisJWDUwOV9FWFRFTlNJT04gKmNlcnRfZXh0ID0gTlVMTDsKIAlleHRfdCAqZXh0OwogCWtleV90ICprZXk7CiAJY2VydF90ICpjZXJ0OwpAQCAtMjU0LDcgKzI3OCw4IEBACiAJY29uc3Qgc3RydWN0IG9wdGlvbiAqY21kX29wdDsKIAljb25zdCBjaGFyICpjdXJfb3B0OwogCXVuc2lnbmVkIGludCBlcnJfY29kZTsKLQl1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKwl1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKKwl1bnNpZ25lZCBpbnQgIG1kX2xlbjsKIAljb25zdCBFVlBfTUQgKm1kX2luZm87CiAKIAlOT1RJQ0UoIkNvVCBHZW5lcmF0aW9uIFRvb2w6ICVzXG4iLCBidWlsZF9tc2cpOwpAQCAtMjYyLDYgKzI4Nyw3IEBACiAKIAkvKiBTZXQgZGVmYXVsdCBvcHRpb25zICovCiAJa2V5X2FsZyA9IEtFWV9BTEdfUlNBOworCWhhc2hfYWxnID0gSEFTSF9BTEdfU0hBMjU2OwogCiAJLyogQWRkIGNvbW1vbiBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fRUxFTShjb21tb25fY21kX29wdCk7IGkrKykgewpAQCAtMjkxLDcgKzMxNyw3IEBACiAKIAl3aGlsZSAoMSkgewogCQkvKiBnZXRvcHRfbG9uZyBzdG9yZXMgdGhlIG9wdGlvbiBpbmRleCBoZXJlLiAqLwotCQljID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImE6aGtucCIsIGNtZF9vcHQsICZvcHRfaWR4KTsKKwkJYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhOmhrbnBzOiIsIGNtZF9vcHQsICZvcHRfaWR4KTsKIAogCQkvKiBEZXRlY3QgdGhlIGVuZCBvZiB0aGUgb3B0aW9ucy4gKi8KIAkJaWYgKGMgPT0gLTEpIHsKQEAgLTMxOCw2ICszNDQsMTMgQEAKIAkJY2FzZSAncCc6CiAJCQlwcmludF9jZXJ0ID0gMTsKIAkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCWhhc2hfYWxnID0gZ2V0X2hhc2hfYWxnKG9wdGFyZyk7CisJCQlpZiAoaGFzaF9hbGcgPCAwKSB7CisJCQkJRVJST1IoIkludmFsaWQgaGFzaCBhbGdvcml0aG0gJyVzJ1xuIiwgb3B0YXJnKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgQ01EX09QVF9FWFQ6CiAJCQljdXJfb3B0ID0gY21kX29wdF9nZXRfbmFtZShvcHRfaWR4KTsKIAkJCWV4dCA9IGV4dF9nZXRfYnlfb3B0KGN1cl9vcHQpOwpAQCAtMzQzLDkgKzM3NiwxOCBAQAogCS8qIENoZWNrIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgKi8KIAljaGVja19jbWRfcGFyYW1zKCk7CiAKLQkvKiBJbmRpY2F0ZSBTSEEyNTYgYXMgaW1hZ2UgaGFzaCBhbGdvcml0aG0gaW4gdGhlIGNlcnRpZmljYXRlCisJLyogSW5kaWNhdGUgU0hBIGFzIGltYWdlIGhhc2ggYWxnb3JpdGhtIGluIHRoZSBjZXJ0aWZpY2F0ZQogCSAqIGV4dGVuc2lvbiAqLwotCW1kX2luZm8gPSBFVlBfc2hhMjU2KCk7CisJaWYgKGhhc2hfYWxnID09IEhBU0hfQUxHX1NIQTM4NCkgeworCQltZF9pbmZvID0gRVZQX3NoYTM4NCgpOworCQltZF9sZW4gID0gU0hBMzg0X0RJR0VTVF9MRU5HVEg7CisJfSBlbHNlIGlmIChoYXNoX2FsZyA9PSBIQVNIX0FMR19TSEE1MTIpIHsKKwkJbWRfaW5mbyA9IEVWUF9zaGE1MTIoKTsKKwkJbWRfbGVuICA9IFNIQTUxMl9ESUdFU1RfTEVOR1RIOworCX0gZWxzZSB7CisJCW1kX2luZm8gPSBFVlBfc2hhMjU2KCk7CisJCW1kX2xlbiAgPSBTSEEyNTZfRElHRVNUX0xFTkdUSDsKKwl9CiAKIAkvKiBMb2FkIHByaXZhdGUga2V5cyBmcm9tIGZpbGVzIChvciBnZW5lcmF0ZSBuZXcgb25lcykgKi8KIAlmb3IgKGkgPSAwIDsgaSA8IG51bV9rZXlzIDsgaSsrKSB7CkBAIC00MjEsMTQgKzQ2MywxNCBAQAogCQkJCWlmIChleHQtPmFyZyA9PSBOVUxMKSB7CiAJCQkJCWlmIChleHQtPm9wdGlvbmFsKSB7CiAJCQkJCQkvKiBJbmNsdWRlIGEgaGFzaCBmaWxsZWQgd2l0aCB6ZXJvcyAqLwotCQkJCQkJbWVtc2V0KG1kLCAweDAsIFNIQTI1Nl9ESUdFU1RfTEVOR1RIKTsKKwkJCQkJCW1lbXNldChtZCwgMHgwLCBTSEE1MTJfRElHRVNUX0xFTkdUSCk7CiAJCQkJCX0gZWxzZSB7CiAJCQkJCQkvKiBEbyBub3QgaW5jbHVkZSB0aGlzIGhhc2ggaW4gdGhlIGNlcnRpZmljYXRlICovCiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0gZWxzZSB7CiAJCQkJCS8qIENhbGN1bGF0ZSB0aGUgaGFzaCBvZiB0aGUgZmlsZSAqLwotCQkJCQlpZiAoIXNoYV9maWxlKGV4dC0+YXJnLCBtZCkpIHsKKwkJCQkJaWYgKCFzaGFfZmlsZShoYXNoX2FsZywgZXh0LT5hcmcsIG1kKSkgewogCQkJCQkJRVJST1IoIkNhbm5vdCBjYWxjdWxhdGUgaGFzaCBvZiAlc1xuIiwKIAkJCQkJCQlleHQtPmFyZyk7CiAJCQkJCQlleGl0KDEpOwpAQCAtNDM2LDcgKzQ3OCw3IEBACiAJCQkJfQogCQkJCUNIRUNLX05VTEwoY2VydF9leHQsIGV4dF9uZXdfaGFzaChleHRfbmlkLAogCQkJCQkJRVhUX0NSSVQsIG1kX2luZm8sIG1kLAotCQkJCQkJU0hBMjU2X0RJR0VTVF9MRU5HVEgpKTsKKwkJCQkJCW1kX2xlbikpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBFWFRfVFlQRV9QS0VZOgogCQkJCUNIRUNLX05VTEwoY2VydF9leHQsIGV4dF9uZXdfa2V5KGV4dF9uaWQsCkBAIC00NTMsNyArNDk1LDcgQEAKIAkJfQogCiAJCS8qIENyZWF0ZSBjZXJ0aWZpY2F0ZS4gU2lnbmVkIHdpdGggY29ycmVzcG9uZGluZyBrZXkgKi8KLQkJaWYgKGNlcnQtPmZuICYmICFjZXJ0X25ldyhrZXlfYWxnLCBjZXJ0LCBWQUxfREFZUywgMCwgc2spKSB7CisJCWlmIChjZXJ0LT5mbiAmJiAhY2VydF9uZXcoa2V5X2FsZywgaGFzaF9hbGcsIGNlcnQsIFZBTF9EQVlTLCAwLCBzaykpIHsKIAkJCUVSUk9SKCJDYW5ub3QgY3JlYXRlICVzXG4iLCBjZXJ0LT5jbik7CiAJCQlleGl0KDEpOwogCQl9CmRpZmYgLS1naXQgYS90b29scy9jZXJ0X2NyZWF0ZS9zcmMvc2hhLmMgYi90b29scy9jZXJ0X2NyZWF0ZS9zcmMvc2hhLmMKaW5kZXggMjk3MTU5My4uM2Q5NzdmYiAxMDA2NDQKLS0tIGEvdG9vbHMvY2VydF9jcmVhdGUvc3JjL3NoYS5jCisrKyBiL3Rvb2xzL2NlcnRfY3JlYXRlL3NyYy9zaGEuYwpAQCAtMSwyMCArMSwyMSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSwgQVJNIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAqLwogCiAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KICNpbmNsdWRlIDxzdGRpby5oPgotCiAjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJrZXkuaCIKIAogI2RlZmluZSBCVUZGRVJfU0laRQkyNTYKIAotaW50IHNoYV9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBjaGFyICptZCkKK2ludCBzaGFfZmlsZShpbnQgbWRfYWxnLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgY2hhciAqbWQpCiB7CiAJRklMRSAqaW5GaWxlOwogCVNIQTI1Nl9DVFggc2hhQ29udGV4dDsKKwlTSEE1MTJfQ1RYIHNoYTUxMkNvbnRleHQ7CiAJaW50IGJ5dGVzOwogCXVuc2lnbmVkIGNoYXIgZGF0YVtCVUZGRVJfU0laRV07CiAKQEAgLTI5LDExICszMCwyNSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlTSEEyNTZfSW5pdCgmc2hhQ29udGV4dCk7Ci0Jd2hpbGUgKChieXRlcyA9IGZyZWFkKGRhdGEsIDEsIEJVRkZFUl9TSVpFLCBpbkZpbGUpKSAhPSAwKSB7Ci0JCVNIQTI1Nl9VcGRhdGUoJnNoYUNvbnRleHQsIGRhdGEsIGJ5dGVzKTsKKwlpZiAobWRfYWxnID09IEhBU0hfQUxHX1NIQTM4NCkgeworCQlTSEEzODRfSW5pdCgmc2hhNTEyQ29udGV4dCk7CisJCXdoaWxlICgoYnl0ZXMgPSBmcmVhZChkYXRhLCAxLCBCVUZGRVJfU0laRSwgaW5GaWxlKSkgIT0gMCkgeworCQkJU0hBMzg0X1VwZGF0ZSgmc2hhNTEyQ29udGV4dCwgZGF0YSwgYnl0ZXMpOworCQl9CisJCVNIQTM4NF9GaW5hbChtZCwgJnNoYTUxMkNvbnRleHQpOworCX0gZWxzZSBpZiAobWRfYWxnID09IEhBU0hfQUxHX1NIQTUxMikgeworCQlTSEE1MTJfSW5pdCgmc2hhNTEyQ29udGV4dCk7CisJCXdoaWxlICgoYnl0ZXMgPSBmcmVhZChkYXRhLCAxLCBCVUZGRVJfU0laRSwgaW5GaWxlKSkgIT0gMCkgeworCQkJU0hBNTEyX1VwZGF0ZSgmc2hhNTEyQ29udGV4dCwgZGF0YSwgYnl0ZXMpOworCQl9CisJCVNIQTUxMl9GaW5hbChtZCwgJnNoYTUxMkNvbnRleHQpOworCX0gZWxzZSB7CisJCVNIQTI1Nl9Jbml0KCZzaGFDb250ZXh0KTsKKwkJd2hpbGUgKChieXRlcyA9IGZyZWFkKGRhdGEsIDEsIEJVRkZFUl9TSVpFLCBpbkZpbGUpKSAhPSAwKSB7CisJCQlTSEEyNTZfVXBkYXRlKCZzaGFDb250ZXh0LCBkYXRhLCBieXRlcyk7CisJCX0KKwkJU0hBMjU2X0ZpbmFsKG1kLCAmc2hhQ29udGV4dCk7CiAJfQotCVNIQTI1Nl9GaW5hbChtZCwgJnNoYUNvbnRleHQpOwogCiAJZmNsb3NlKGluRmlsZSk7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS90b29scy9maXB0b29sL2ZpcHRvb2wuYyBiL3Rvb2xzL2ZpcHRvb2wvZmlwdG9vbC5jCmluZGV4IDAyMjIzZDkuLjFkY2I3ZTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ZpcHRvb2wvZmlwdG9vbC5jCisrKyBiL3Rvb2xzL2ZpcHRvb2wvZmlwdG9vbC5jCkBAIC05LDE4ICs5LDEyIEBACiAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGdldG9wdC5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotCi0jaW5jbHVkZSA8ZmlybXdhcmVfaW1hZ2VfcGFja2FnZS5oPgogCiAjaW5jbHVkZSAiZmlwdG9vbC5oIgogI2luY2x1ZGUgInRiYnJfY29uZmlnLmgiCkBAIC0xNjEsNyArMTU1LDcgQEAKIHsKIAlhc3NlcnQoZGVzYyAhPSBOVUxMKTsKIAotCWlmIChkZXNjLT5hY3Rpb25fYXJnICE9IERPX1VOU1BFQykKKwlpZiAoZGVzYy0+YWN0aW9uX2FyZyAhPSAoY2hhciAqKURPX1VOU1BFQykKIAkJZnJlZShkZXNjLT5hY3Rpb25fYXJnKTsKIAlkZXNjLT5hY3Rpb24gPSBhY3Rpb247CiAJZGVzYy0+YWN0aW9uX2FyZyA9IE5VTEw7CkBAIC0yNzgsNyArMjcyLDcgQEAKIAogc3RhdGljIGludCBwYXJzZV9maXAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGZpcF90b2NfaGVhZGVyX3QgKnRvY19oZWFkZXJfb3V0KQogewotCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBCTERfUExBVF9TVEFUIHN0OwogCUZJTEUgKmZwOwogCWNoYXIgKmJ1ZiwgKmJ1ZmVuZDsKIAlmaXBfdG9jX2hlYWRlcl90ICp0b2NfaGVhZGVyOwpAQCAtMzcwLDExICszNjQsMTIgQEAKIAogc3RhdGljIGltYWdlX3QgKnJlYWRfaW1hZ2VfZnJvbV9maWxlKGNvbnN0IHV1aWRfdCAqdXVpZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7Ci0Jc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IEJMRF9QTEFUX1NUQVQgc3Q7CiAJaW1hZ2VfdCAqaW1hZ2U7CiAJRklMRSAqZnA7CiAKIAlhc3NlcnQodXVpZCAhPSBOVUxMKTsKKwlhc3NlcnQoZmlsZW5hbWUgIT0gTlVMTCk7CiAKIAlmcCA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKTsKIAlpZiAoZnAgPT0gTlVMTCkKQEAgLTQ2OSw2ICs0NjQsNyBAQAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbWFnZS0+dG9jX2Uub2Zmc2V0X2FkZHJlc3MsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWltYWdlLT50b2NfZS5zaXplLAogCQkgICAgICAgZGVzYy0+Y21kbGluZV9uYW1lKTsKKyNpZm5kZWYgX01TQ19WRVIJLyogV2UgZG9uJ3QgaGF2ZSBTSEEyNTYgZm9yIFZpc3VhbCBTdHVkaW8uICovCiAJCWlmICh2ZXJib3NlKSB7CiAJCQl1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKIApAQCAtNDc2LDYgKzQ3Miw3IEBACiAJCQlwcmludGYoIiwgc2hhMjU2PSIpOwogCQkJbWRfcHJpbnQobWQsIHNpemVvZihtZCkpOwogCQl9CisjZW5kaWYKIAkJcHV0Y2hhcignXG4nKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpcHRvb2wvZmlwdG9vbC5oIGIvdG9vbHMvZmlwdG9vbC9maXB0b29sLmgKaW5kZXggNGI1Y2RkOS4uZDhhNWQyYyAxMDA2NDQKLS0tIGEvdG9vbHMvZmlwdG9vbC9maXB0b29sLmgKKysrIGIvdG9vbHMvZmlwdG9vbC9maXB0b29sLmgKQEAgLTEzLDYgKzEzLDggQEAKICNpbmNsdWRlIDxmaXJtd2FyZV9pbWFnZV9wYWNrYWdlLmg+CiAjaW5jbHVkZSA8dXVpZC5oPgogCisjaW5jbHVkZSAiZmlwdG9vbF9wbGF0Zm9ybS5oIgorCiAjZGVmaW5lIE5FTEVNKHgpIChzaXplb2YgKHgpIC8gc2l6ZW9mICooeCkpCiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvdG9vbHMvZmlwdG9vbC9maXB0b29sX3BsYXRmb3JtLmggYi90b29scy9maXB0b29sL2ZpcHRvb2xfcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDBhMTIwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZmlwdG9vbC9maXB0b29sX3BsYXRmb3JtLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBBUk0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBCdWlsZCBwbGF0Zm9ybSBzcGVjaWZpYyBoYW5kbGluZy4KKyAqIFRoaXMgYWxsb3dzIGZvciBidWlsZHMgb24gbm9uLVBvc2l4IHBsYXRmb3JtcworICogZS5nLiBWaXN1YWwgU3R1ZGlvIG9uIFdpbmRvd3MKKyAqLworCisjaWZuZGVmIF9fRklQVE9PTF9QTEFURk9STV9IX18KKyMJZGVmaW5lIF9fRklQVE9PTF9QTEFURk9STV9IX18KKworIwlpZm5kZWYgX01TQ19WRVIKKworCQkvKiBOb3QgVmlzdWFsIFN0dWRpbywgc28gaW5jbHVkZSBQb3NpeCBIZWFkZXJzLiAqLworIwkJaW5jbHVkZSA8Z2V0b3B0Lmg+CisjCQlpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorIwkJaW5jbHVkZSA8dW5pc3RkLmg+CisKKyMJCWRlZmluZSAgQkxEX1BMQVRfU1RBVCBzdGF0CisKKyMJZWxzZQorCisJCS8qIFZpc3VhbCBTdHVkaW8uICovCisjCQlpbmNsdWRlICJ3aW5fcG9zaXguaCIKKworIwllbmRpZgorCisjZW5kaWYgLyogX19GSVBUT09MX1BMQVRGT1JNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvZmlwdG9vbC93aW5fcG9zaXguYyBiL3Rvb2xzL2ZpcHRvb2wvd2luX3Bvc2l4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmZWIxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2ZpcHRvb2wvd2luX3Bvc2l4LmMKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgIndpbl9wb3NpeC5oIgorCisvKgorICogVGhpcyB2YXJpYWJsZSBpcyBzZXQgYnkgZ2V0b3B0IHRvIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZQorICogYXJndiBhcnJheSB0byBiZSBwcm9jZXNzZWQuIE9uY2UgZ2V0b3B0IGhhcyBmb3VuZCBhbGwgb2YgdGhlIG9wdGlvbgorICogYXJndW1lbnRzLCB5b3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHRvIGRldGVybWluZSB3aGVyZSB0aGUgcmVtYWluaW5nCisgKiBub24tb3B0aW9uIGFyZ3VtZW50cyBiZWdpbi4gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyAxLgorICovCitpbnQgb3B0aW5kID0gMTsKKworLyoKKyAqIElmIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIG5vbnplcm8sIHRoZW4gZ2V0b3B0IHByaW50cyBhbiBlcnJvcgorICogbWVzc2FnZSB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGlmIGl0IGVuY291bnRlcnMgYW4gdW5rbm93biBvcHRpb24KKyAqIGRlZmF1bHQgY2hhcmFjdGVyIG9yIGFuIG9wdGlvbiB3aXRoIGEgbWlzc2luZyByZXF1aXJlZCBhcmd1bWVudC4KKyAqIElmIHlvdSBzZXQgdGhpcyB2YXJpYWJsZSB0byB6ZXJvLCBnZXRvcHQgZG9lcyBub3QgcHJpbnQgYW55IG1lc3NhZ2VzLAorICogYnV0IGl0IHN0aWxsIHJldHVybnMgdGhlIGNoYXJhY3RlciA/IHRvIGluZGljYXRlIGFuIGVycm9yLgorICovCitjb25zdCBpbnQgb3B0ZXJyOyAvKiA9IDA7ICovCisvKiBjb25zdCBiZWNhdXNlIHdlIGRvIG5vdCBpbXBsZW1lbnQgZXJyb3IgcHJpbnRpbmcuKi8KKy8qIE5vdCBpbml0aWFsaXNlZCB0byBjb25mb3JtIHdpdGggdGhlIGNvZGluZyBzdGFuZGFyZC4gKi8KKworLyoKKyAqIFdoZW4gZ2V0b3B0IGVuY291bnRlcnMgYW4gdW5rbm93biBvcHRpb24gY2hhcmFjdGVyIG9yIGFuIG9wdGlvbiB3aXRoIGEKKyAqIG1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQsIGl0IHN0b3JlcyB0aGF0IG9wdGlvbiBjaGFyYWN0ZXIgaW4gdGhpcworICogdmFyaWFibGUuCisgKi8KK2ludCBvcHRvcHQ7CS8qID0gMDsgKi8KKworLyoKKyAqIFRoaXMgdmFyaWFibGUgaXMgc2V0IGJ5IGdldG9wdCB0byBwb2ludCBhdCB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbgorICogYXJndW1lbnQsIGZvciB0aG9zZSBvcHRpb25zIHRoYXQgYWNjZXB0IGFyZ3VtZW50cy4KKyAqLworY2hhciAqb3B0YXJnOwkvKiA9IDA7ICovCisKK2VudW0gcmV0dXJuX2ZsYWdzIHsKKwlSRVRfRVJST1IgPSAtMSwKKwlSRVRfRU5EX09QVF9MSVNUID0gLTEsCisJUkVUX05PX1BBUkFNID0gJz8nLAorCVJFVF9OT19QQVJBTTIgPSAnOicsCisJUkVUX1VOS05PV05fT1BUID0gJz8nCit9OworCisvKgorICogQ29tbW9uIGluaXRpYWxpc2F0aW9uIG9uIGVudHJ5LgorICovCitzdGF0aWMKK3ZvaWQgZ2V0b3B0X2luaXQodm9pZCkKK3sKKwlvcHRhcmcgPSAoY2hhciAqKTA7CisJb3B0b3B0ID0gMDsKKwkvKiBvcHRpbmQgbWF5IGJlIHplcm8gd2l0aCBzb21lIFBPU0lYIHVzZXMuCisJICogRm9yIG91ciBwdXJwb3NlcyB3ZSBqdXN0IGNoYW5nZSBpdCB0byAxLgorCSAqLworCWlmIChvcHRpbmQgPT0gMCkKKwkJb3B0aW5kID0gMTsKK30KKworLyoKKyAqIENvbW1vbiBoYW5kbGluZyBmb3IgYSBzaW5nbGUgbGV0dGVyIG9wdGlvbi4KKyAqLworc3RhdGljCitpbnQgZ2V0b3B0XzFjaGFyKGludCBhcmdjLAorCQkgY2hhciAqY29uc3QgYXJndltdLAorCQkgY29uc3QgY2hhciAqY29uc3Qgb3BzdHJpbmcsCisJCSBjb25zdCBpbnQgb3B0Y2hhcikKK3sKKwlzaXplX3QgbmxlbiA9IChvcHN0cmluZyA9PSAwKSA/IDAgOiBzdHJsZW4ob3BzdHJpbmcpOworCXNpemVfdCBsb3B0bjsKKworCWZvciAobG9wdG4gPSAwOyBsb3B0biA8IG5sZW47IGxvcHRuKyspIHsKKwkJaWYgKG9wdGNoYXIgPT0gb3BzdHJpbmdbbG9wdG5dKSB7CisJCQlpZiAob3BzdHJpbmdbbG9wdG4gKyAxXSA9PSAnOicpIHsKKwkJCQkvKiBPcHRpb24gaGFzIGFyZ3VtZW50ICovCisJCQkJaWYgKG9wdGluZCA8IGFyZ2MpIHsKKwkJCQkJLyogRm91bmQgYXJndW1lbnQuICovCisJCQkJCWFzc2VydChhcmd2ICE9IDApOworCQkJCQlvcHRpbmQrKzsKKwkJCQkJb3B0YXJnID0gYXJndltvcHRpbmQrK107CisJCQkJCXJldHVybiBvcHRjaGFyOworCQkJCX0KKwkJCQkvKiBNaXNzaW5nIGFyZ3VtZW50LiAqLworCQkJCWlmIChvcHN0cmluZ1tsb3B0biArIDJdID09ICc6JykgeworCQkJCQkvKiBPSyBpZiBvcHRpb25hbCAieDo6Ii4gKi8KKwkJCQkJb3B0aW5kKys7CisJCQkJCXJldHVybiBvcHRjaGFyOworCQkJCX0KKwkJCQkvKiBBY3R1YWwgbWlzc2luZyB2YWx1ZS4gKi8KKwkJCQlvcHRvcHQgPSBvcHRjaGFyOworCQkJCXJldHVybiAoKG9wc3RyaW5nWzBdID09ICc6JykKKwkJCQkJPyBSRVRfTk9fUEFSQU0yCisJCQkJCTogUkVUX05PX1BBUkFNKTsKKwkJCX0KKwkJCS8qIE5vIGFyZ3VtZW50LCBqdXN0IHJldHVybiBvcHRpb24gY2hhciAqLworCQkJb3B0aW5kKys7CisJCQlyZXR1cm4gb3B0Y2hhcjsKKwkJfQorCX0KKwkvKgorCSAqIElmIGdldG9wdCBmaW5kcyBhbiBvcHRpb24gY2hhcmFjdGVyIGluIGFyZ3YgdGhhdCB3YXMgbm90IGluY2x1ZGVkIGluCisJICogb3B0aW9ucywgLi4uIGl0IHJldHVybnMgJz8nIGFuZCBzZXRzIHRoZSBleHRlcm5hbCB2YXJpYWJsZSBvcHRvcHQgdG8KKwkgKiB0aGUgYWN0dWFsIG9wdGlvbiBjaGFyYWN0ZXIuCisJICovCisJb3B0b3B0ID0gb3B0Y2hhcjsKKwlyZXR1cm4gUkVUX1VOS05PV05fT1BUOworfQorCitpbnQgZ2V0b3B0KGludCBhcmdjLAorCSAgIGNoYXIgKmFyZ3ZbXSwKKwkgICBjaGFyICpvcHN0cmluZykKK3sKKwlpbnQgcmVzdWx0ID0gUkVUX0VORF9PUFRfTElTVDsKKwlzaXplX3QgYXJnbiA9IDA7CisJc2l6ZV90IG5sZW4gPSBzdHJsZW4ob3BzdHJpbmcpOworCisJZ2V0b3B0X2luaXQoKTsKKwkvKiBJZiB3ZSBoYXZlIGFuIGFyZ3VtZW50IGxlZnQgdG8gcGxheSB3aXRoICovCisJaWYgKChhcmdjID4gb3B0aW5kKSAmJiAoYXJndiAhPSAwKSkgeworCQljb25zdCBjaGFyICphcmcgPSAoY29uc3QgY2hhciAqKWFyZ3Zbb3B0aW5kXTsKKworCQlpZiAoKGFyZyAhPSAwKSAmJiAoYXJnWzBdID09ICctJykpCisJCQlyZXN1bHQgPSBnZXRvcHRfMWNoYXIoYXJnYywgYXJndiwgb3BzdHJpbmcsIGFyZ1sxXSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIE1hdGNoIGFuIGFyZ3VtZW50IHZhbHVlIGFnYWluc3QgYW4gb3B0aW9uIG5hbWUuCisgKiBOb3RlIHRoYXQgd2Ugb25seSBtYXRjaCBvdmVyIHRoZSBzaG9ydGVyIGxlbmd0aCBvZiB0aGUgcGFpciwgdG8gYWxsb3cKKyAqIGZvciBhYmJyZXZpYXRpb24gb3Igc2F5IC0tbWF0Y2g9dmFsdWUKKyAqIExvbmcgb3B0aW9uIG5hbWVzIG1heSBiZSBhYmJyZXZpYXRlZCBpZiB0aGUgYWJicmV2aWF0aW9uIGlzIHVuaXF1ZSBvciBhbgorICogZXhhY3QgbWF0Y2ggZm9yIHNvbWUgZGVmaW5lZCBvcHRpb24uCisgKiBBIGxvbmcgb3B0aW9uIG1heSB0YWtlIGEgcGFyYW1ldGVyLCBvZiB0aGUgZm9ybSAtLW9wdD1wYXJhbSBvciAtLW9wdCBwYXJhbS4KKyovCitzdGF0aWMKK2ludCBvcHRtYXRjaChjb25zdCBjaGFyICphcmd2YWwsIGNvbnN0IGNoYXIgKm9wdG5hbWUpCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwl3aGlsZSAoKHJlc3VsdCA9PSAwKSAmJiAoKm9wdG5hbWUgIT0gMCkgJiYgKCphcmd2YWwgIT0gMCkpCisJCXJlc3VsdCA9ICgqYXJndmFsKyspIC0gKCpvcHRuYW1lKyspOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIEhhbmRsaW5nIGZvciBhIHNpbmdsZSBsb25nIG9wdGlvbi4gKi8KK3N0YXRpYworaW50IGdldG9wdF8xbG9uZyhjb25zdCBpbnQgYXJnYywKKwkJIGNoYXIgKmNvbnN0IGFyZ3ZbXSwKKwkJIGNvbnN0IHN0cnVjdCBvcHRpb24gKmNvbnN0IGxvbmdvcHRzLAorCQkgY29uc3QgY2hhciAqY29uc3Qgb3B0bmFtZSwKKwkJIGludCAqY29uc3QgaW5kZXhwdHIpCit7CisJaW50IHJlc3VsdCA9IFJFVF9VTktOT1dOX09QVDsKKwlzaXplX3QgbG9wdG4gPSAwOworCisJd2hpbGUgKGxvbmdvcHRzW2xvcHRuXS5uYW1lICE9IDApIHsKKwkJaWYgKG9wdG1hdGNoKG9wdG5hbWUsIGxvbmdvcHRzW2xvcHRuXS5uYW1lKSA9PSAwKSB7CisJCQkvKiBXZSBmb3VuZCBhIG1hdGNoLiAqLworCQkJcmVzdWx0ID0gbG9uZ29wdHNbbG9wdG5dLnZhbDsKKwkJCWlmIChpbmRleHB0ciAhPSAwKQorCQkJCSppbmRleHB0ciA9IGxvcHRuOworCQkJc3dpdGNoIChsb25nb3B0c1tsb3B0bl0uaGFzX2FyZykgeworCQkJY2FzZSByZXF1aXJlZF9hcmd1bWVudDoKKwkJCQlpZiAoKG9wdGluZCArIDEpID49IGFyZ2MpIHsKKwkJCQkJLyogTWlzc2luZyBhcmd1bWVudC4gKi8KKwkJCQkJb3B0b3B0ID0gcmVzdWx0OworCQkJCQlyZXR1cm4gUkVUX05PX1BBUkFNOworCQkJCX0KKwkJCQkvKiBGYWxsdGhyb3VnaCB0byBnZXQgb3B0aW9uIHZhbHVlLiAqLworCisJCQljYXNlIG9wdGlvbmFsX2FyZ3VtZW50OgorCQkJCWlmICgoYXJnYyAtIG9wdGluZCkgPiAwKSB7CisJCQkJCS8qIEZvdW5kIGFyZ3VtZW50LiAqLworCQkJCQlvcHRhcmcgPSBhcmd2Wysrb3B0aW5kXTsKKwkJCQl9CisJCQkJLyogRmFsbHRocm91Z2ggdG8gaGFuZGxlIGZsYWcuICovCisKKwkJCWNhc2Ugbm9fYXJndW1lbnQ6CisJCQkJb3B0aW5kKys7CisJCQkJaWYgKGxvbmdvcHRzW2xvcHRuXS5mbGFnICE9IDApIHsKKwkJCQkJKmxvbmdvcHRzW2xvcHRuXS5mbGFnID0gcmVzdWx0OworCQkJCQlyZXN1bHQgPSAwOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQkrK2xvcHRuOworCX0KKwkvKgorCSAqIElmIGdldG9wdCBmaW5kcyBhbiBvcHRpb24gY2hhcmFjdGVyIGluIGFyZ3YgdGhhdCB3YXMgbm90IGluY2x1ZGVkCisJICogaW4gb3B0aW9ucywgLi4uIGl0IHJldHVybnMgJz8nIGFuZCBzZXRzIHRoZSBleHRlcm5hbCB2YXJpYWJsZQorCSAqIG9wdG9wdCB0byB0aGUgYWN0dWFsIG9wdGlvbiBjaGFyYWN0ZXIuCisJICovCisJcmV0dXJuIFJFVF9VTktOT1dOX09QVDsKK30KKworLyoKKyAqIGdldG9wdF9sb25nIGdldHMgdGhlIG5leHQgb3B0aW9uIGFyZ3VtZW50IGZyb20gdGhlIGFyZ3VtZW50IGxpc3QKKyAqIHNwZWNpZmllZCBieSB0aGUgYXJndiBhbmQgYXJnYyBhcmd1bWVudHMuICBPcHRpb25zIG1heSBiZSBlaXRoZXIgc2hvcnQKKyAqIChzaW5nbGUgbGV0dGVyKSBhcyBmb3IgZ2V0b3B0LCBvciBsb25nZXIgbmFtZXMgKHByZWNlZGVkIGJ5IC0tKS4KKyAqLworaW50IGdldG9wdF9sb25nKGludCBhcmdjLAorCQljaGFyICphcmd2W10sCisJCWNvbnN0IGNoYXIgKnNob3J0b3B0cywKKwkJY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsCisJCWludCAqaW5kZXhwdHIpCit7CisJaW50IHJlc3VsdCA9IFJFVF9FTkRfT1BUX0xJU1Q7CisKKwlnZXRvcHRfaW5pdCgpOworCS8qIElmIHdlIGhhdmUgYW4gYXJndW1lbnQgbGVmdCB0byBwbGF5IHdpdGggKi8KKwlpZiAoKGFyZ2MgPiBvcHRpbmQpICYmIChhcmd2ICE9IDApKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3Zbb3B0aW5kXTsKKworCQlpZiAoKGFyZyAhPSAwKSAmJiAoYXJnWzBdID09ICctJykpIHsKKwkJCWlmIChhcmdbMV0gPT0gJy0nKSB7CisJCQkJLyogTG9va3MgbGlrZSBhIGxvbmcgb3B0aW9uLiAqLworCQkJCXJlc3VsdCA9IGdldG9wdF8xbG9uZyhhcmdjLAorCQkJCQkJICAgICAgYXJndiwKKwkJCQkJCSAgICAgIGxvbmdvcHRzLAorCQkJCQkJICAgICAgJmFyZ1syXSwKKwkJCQkJCSAgICAgIGluZGV4cHRyKTsKKwkJCX0gZWxzZSB7CisJCQkJcmVzdWx0ID0gZ2V0b3B0XzFjaGFyKGFyZ2MsCisJCQkJCQkgICAgICBhcmd2LAorCQkJCQkJICAgICAgc2hvcnRvcHRzLAorCQkJCQkJICAgICAgYXJnWzFdKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogZ2V0b3B0X2xvbmdfb25seSBnZXRzIHRoZSBuZXh0IG9wdGlvbiBhcmd1bWVudCBmcm9tIHRoZSBhcmd1bWVudCBsaXN0CisgKiBzcGVjaWZpZWQgYnkgdGhlIGFyZ3YgYW5kIGFyZ2MgYXJndW1lbnRzLiAgT3B0aW9ucyBtYXkgYmUgZWl0aGVyIHNob3J0CisgKiBvciBsb25nIGFzIGZvciBnZXRvcHRfbG9uZywgYnV0IHRoZSBsb25nIG5hbWVzIG1heSBoYXZlIGEgc2luZ2xlICctJworICogcHJlZml4IHRvby4KKyAqLworaW50IGdldG9wdF9sb25nX29ubHkoaW50IGFyZ2MsCisJCSAgICAgY2hhciAqYXJndltdLAorCQkgICAgIGNvbnN0IGNoYXIgKnNob3J0b3B0cywKKwkJICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nb3B0cywKKwkJICAgICBpbnQgKmluZGV4cHRyKQoreworCWludCByZXN1bHQgPSBSRVRfRU5EX09QVF9MSVNUOworCisJZ2V0b3B0X2luaXQoKTsKKwkvKiBJZiB3ZSBoYXZlIGFuIGFyZ3VtZW50IGxlZnQgdG8gcGxheSB3aXRoICovCisJaWYgKChhcmdjID4gb3B0aW5kKSAmJiAoYXJndiAhPSAwKSkgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W29wdGluZF07CisKKwkJaWYgKChhcmcgIT0gMCkgJiYgKGFyZ1swXSA9PSAnLScpKSB7CisJCQlpZiAoYXJnWzFdID09ICctJykgeworCQkJCS8qIExvb2tzIGxpa2UgYSBsb25nIG9wdGlvbi4gKi8KKwkJCQlyZXN1bHQgPSBnZXRvcHRfMWxvbmcoYXJnYywKKwkJCQkJCSAgICAgIGFyZ3YsCisJCQkJCQkgICAgICBsb25nb3B0cywKKwkJCQkJCSAgICAgICZhcmdbMl0sCisJCQkJCQkgICAgICBpbmRleHB0cik7CisJCQl9IGVsc2UgeworCQkJCXJlc3VsdCA9IGdldG9wdF8xbG9uZyhhcmdjLAorCQkJCQkJICAgICAgYXJndiwKKwkJCQkJCSAgICAgIGxvbmdvcHRzLAorCQkJCQkJICAgICAgJmFyZ1sxXSwKKwkJCQkJCSAgICAgIGluZGV4cHRyKTsKKwkJCQlpZiAocmVzdWx0ID09IFJFVF9VTktOT1dOX09QVCkgeworCQkJCQlyZXN1bHQgPSBnZXRvcHRfMWNoYXIoYXJnYywKKwkJCQkJCQkgICAgICBhcmd2LAorCQkJCQkJCSAgICAgIHNob3J0b3B0cywKKwkJCQkJCQkgICAgICBhcmdbMV0pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZmlwdG9vbC93aW5fcG9zaXguaCBiL3Rvb2xzL2ZpcHRvb2wvd2luX3Bvc2l4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNmYzM5OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2ZpcHRvb2wvd2luX3Bvc2l4LmgKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKKyNpZm5kZWYgX19XSU5QT1NJWF9IX18KKyMJZGVmaW5lIF9fV0lOUE9TSVhfSF9fCisKKyMJZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisKKyMJaW5jbHVkZSA8ZGlyZWN0Lmg+CisjCWluY2x1ZGUgPGlvLmg+CisjCWluY2x1ZGUgPHN0ZGludC5oPgorIwlpbmNsdWRlIDxzdGRsaWIuaD4KKyMJaW5jbHVkZSA8c3RyaW5nLmg+CisjCWluY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyMJaW5jbHVkZSAidXVpZC5oIgorCisKKy8qIERlcml2ZSBvciBwcm92aWRlIFdpbmRvd3MgZXF1aXZhbGVudHMgb2YgUG9zaXgvR0NDL1VuaXggc3R1ZmYuICovCisjCWlmbmRlZiBQQVRIX01BWAorIwkJaWZkZWYgTUFYX1BBVEgKKyMJCQlkZWZpbmUgUEFUSF9NQVggTUFYX1BBVEgKKyMJCWVsc2UKKyMJCQlpZmRlZiBfTUFYX1BBVEgKKyMJCQkJZGVmaW5lIE1BWF9QQVRIIF9NQVhfUEFUSAorIwkJCQlkZWZpbmUgUEFUSF9NQVggX01BWF9QQVRICisjCQkJZWxzZQorIwkJCQlkZWZpbmUgUEFUSF9NQVggMjYwCisjCQkJZW5kaWYKKyMJCWVuZGlmCisjCWVuZGlmCisKKyMJaWZuZGVmIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisjCQlkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgMQorIwllbmRpZgorCisvKgorICogUGxhdGZvcm0gc3BlY2lmaWMgbmFtZXMuCisgKgorICogVmlzdWFsIFN0dWRpbyBkZXByZWNhdGVzIGEgbnVtYmVyIG9mIFBPU0lYIGZ1bmN0aW9ucyBhbmQgb25seSBwcm92aWRlcworICogSVNPIEMrKyBjb21wbGlhbnQgYWx0ZXJuYXRpdmVzIChkaXN0aW5ndWlzaGVkIGJ5IHRoZWlyICdfJyBwcmVmaXgpLgorICogVGhlc2UgbWFjcm9zIGhlbHAgcHJvdmlkZSBhIHN0b3BnYXAgZm9yIHRoYXQuCisgKi8KKworLyogZmlsZW5vIGNhbm5vdCBiZSBhbiBpbmxpbmUgZnVuY3Rpb24sIGJlY2F1c2UgX2ZpbGVubyBpcyBhIG1hY3JvLiAqLworIwlkZWZpbmUgZmlsZW5vKGZpbGVwdHIpIF9maWxlbm8oZmlsZXB0cikKKworLyogX2ZzdGF0IHVzZXMgdGhlIF9zdGF0IHN0cnVjdHVyZSwgbm90IHN0YXQuICovCisjCWRlZmluZSBCTERfUExBVF9TVEFUCV9zdGF0CisKKy8qIERlZmluZSBmbGFnIHZhbHVlcyBmb3IgX2FjY2Vzcy4gKi8KKyMJZGVmaW5lIEZfT0sJMAorCisKKy8qIGdldG9wdCBpbXBsZW1lbnRhdGlvbiBmb3IgV2luZG93czogRGF0YS4gKi8KKworLyogTGVnaXRpbWF0ZSB2YWx1ZXMgZm9yIG9wdGlvbi5oYXNfYXJnLiAqLworZW51bSBoYXNfYXJnX3ZhbHVlcyB7CisJbm9fYXJndW1lbnQsCQkvKiBObyBhcmd1bWVudCB2YWx1ZSByZXF1aXJlZCAqLworCXJlcXVpcmVkX2FyZ3VtZW50LAkvKiB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZC4gKi8KKwlvcHRpb25hbF9hcmd1bWVudAkvKiB2YWx1ZSBtYXkgYmUgc3BlY2lmaWVkLiAqLworfTsKKworLyogTG9uZyBvcHRpb24gdGFibGUgZW50cnkgZm9yIGdldF9vcHRfbG9uZy4gKi8KK3N0cnVjdCBvcHRpb24geworCS8qIFRoZSBuYW1lIG9mIHRoZSBvcHRpb24uICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qCisJICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG9wdGlvbiB0YWtlcyBhbiBhcmd1bWVudC4KKwkgKiBQb3NzaWJsZSB2YWx1ZXM6IHNlZSBoYXNfYXJnX3ZhbHVlcyBhYm92ZS4KKwkgKi8KKwlpbnQgaGFzX2FyZzsKKworCS8qIElmIG5vdCBudWxsLCB3aGVuIG9wdGlvbiBwcmVzZW50LCAqZmxhZyBpcyBzZXQgdG8gdmFsLiAqLworCWludCAqZmxhZzsKKworCS8qCisJICogVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wdGlvbiB0byByZXR1cm4KKwkgKiAoYW5kIHNhdmUgaW4gKmZsYWcgd2hlbiBub3QgbnVsbCkKKwkgKi8KKwlpbnQgdmFsOworfTsKKworLyoKKyAqIFRoaXMgdmFyaWFibGUgaXMgc2V0IGJ5IGdldG9wdCB0byBwb2ludCBhdCB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbgorICogYXJndW1lbnQsIGZvciB0aG9zZSBvcHRpb25zIHRoYXQgYWNjZXB0IGFyZ3VtZW50cy4KKyAqLworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKworLyoKKyAqIFdoZW4gdGhpcyB2YXJpYWJsZSBpcyBub3QgemVybywgZ2V0b3B0IGVtaXRzIGFuIGVycm9yIG1lc3NhZ2UgdG8gc3RkZXJyCisgKiBpZiBpdCBlbmNvdW50ZXJzIGFuIHVuc3BlY2lmaWVkIG9wdGlvbiwgb3IgYSBtaXNzaW5nIGFyZ3VtZW50LgorICogT3RoZXJ3aXNlIG5vIG1lc3NhZ2UgaXMgcmVwb3J0ZWQuCisgKi8KK2V4dGVybiBjb25zdCBpbnQgb3B0ZXJyOwkvKiBjb25zdCBhcyBOT1QgdXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uLiAqLworCisvKgorICogVGhpcyB2YXJpYWJsZSBpcyBzZXQgYnkgZ2V0b3B0IHRvIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZQorICogYXJndiBhcnJheSB0byBiZSBwcm9jZXNzZWQuIE9uY2UgZ2V0b3B0IGhhcyBmb3VuZCBhbGwgb2YgdGhlIG9wdGlvbgorICogYXJndW1lbnRzLCB5b3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHRvIGRldGVybWluZSB3aGVyZSB0aGUgcmVtYWluaW5nCisgKiBub24tb3B0aW9uIGFyZ3VtZW50cyBiZWdpbi4gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyAxLgorICovCitleHRlcm4gaW50IG9wdGluZDsKKworLyoKKyAqIFdoZW4gZ2V0b3B0IGVuY291bnRlcnMgYW4gdW5rbm93biBvcHRpb24gY2hhcmFjdGVyIG9yIGFuIG9wdGlvbiB3aXRoIGEKKyAqIG1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQsIGl0IHN0b3JlcyB0aGF0IG9wdGlvbiBjaGFyYWN0ZXIgaW4gdGhpcworICogdmFyaWFibGUuCisgKi8KK2V4dGVybiBpbnQgb3B0b3B0OworCisKKy8qCisgKiBQbGF0Zm9ybSBzcGVjaWZpYyBuYW1lcy4KKyAqCisgKiBWaXN1YWwgU3R1ZGlvIGRlcHJlY2F0ZXMgYSBudW1iZXIgb2YgUE9TSVggZnVuY3Rpb25zIGFuZCBvbmx5IHByb3ZpZGVzCisgKiBJU08gQysrIGNvbXBsaWFudCBhbHRlcm5hdGl2ZXMgKGRpc3Rpbmd1aXNoZWQgYnkgdGhlaXIgJ18nIHByZWZpeCkuCisgKiBUaGVzZSBpbmxpbmUgZnVuY3Rpb25zIHByb3ZpZGUgYSBzdG9wZ2FwIGZvciB0aGF0LgorICovCisKK2lubGluZSBpbnQgYWNjZXNzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKQoreworCXJldHVybiBfYWNjZXNzKHBhdGgsIG1vZGUpOworfQorCitpbmxpbmUgaW50IGNoZGlyKGNvbnN0IGNoYXIgKnMpCit7CisJcmV0dXJuIF9jaGRpcihzKTsKK30KKworaW5saW5lIGludCBmc3RhdChpbnQgZmQsIHN0cnVjdCBfc3RhdCAqYnVmZmVyKQoreworCXJldHVybiBfZnN0YXQoZmQsIGJ1ZmZlcik7Cit9CisKK2lubGluZSBjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKwlyZXR1cm4gX3N0cmR1cChzKTsKK30KKworLyoKKyAqIGdldG9wdCBpbXBsZW1lbnRhdGlvbiBmb3IgV2luZG93czogRnVuY3Rpb25zLgorICoKKyAqIFdpbmRvd3MgZG9lcyBub3QgaGF2ZSB0aGUgZ2V0b3B0IGZhbWlseSBvZiBmdW5jdGlvbnMsIGFzIGl0IG5vcm1hbGx5CisgKiB1c2VzICcvJyBpbnN0ZWFkIG9mICctJyBhcyB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiBkZWxpbWl0ZXIuCisgKiBUaGVzZSBmdW5jdGlvbnMgcHJvdmlkZSBhIFdpbmRvd3MgdmVyc2lvbiB0aGF0ICB1c2VzICctJywgd2hpY2ggcHJlY2x1ZGVzCisgKiB1c2luZyAnLScgYXMgdGhlIGludGlhbCBsZXR0ZXIgb2YgYSBwcm9ncmFtIGFyZ3VtZW50LgorICogVGhpcyBpcyBub3Qgc2VlbiBhcyBhIHByb2JsZW0gaW4gdGhlIHNwZWNpZmljIGluc3RhbmNlIG9mIGZpcHRvb2wsCisgKiBhbmQgZW5hYmxlcyBleGlzdGluZyBtYWtlZmlsZXMgdG8gd29yayBvbiBhIFdpbmRvd3MgYnVpbGQgZW52aXJvbm1lbnQuCisgKi8KKworLyoKKyAqIFRoZSBnZXRvcHQgZnVuY3Rpb24gZ2V0cyB0aGUgbmV4dCBvcHRpb24gYXJndW1lbnQgZnJvbSB0aGUgYXJndW1lbnQgbGlzdAorICogc3BlY2lmaWVkIGJ5IHRoZSBhcmd2IGFuZCBhcmdjIGFyZ3VtZW50cy4KKyAqLworaW50IGdldG9wdChpbnQgYXJnYywKKwkgICBjaGFyICphcmd2W10sCisJICAgY2hhciAqb3B0aW9ucyk7CisKKy8qCisgKiBnZXRvcHRfbG9uZyBnZXRzIHRoZSBuZXh0IG9wdGlvbiBhcmd1bWVudCBmcm9tIHRoZSBhcmd1bWVudCBsaXN0CisgKiBzcGVjaWZpZWQgYnkgdGhlIGFyZ3YgYW5kIGFyZ2MgYXJndW1lbnRzLiAgT3B0aW9ucyBtYXkgYmUgZWl0aGVyIHNob3J0CisgKiAoc2luZ2xlIGxldHRlcikgYXMgZm9yIGdldG9wdCwgb3IgbG9uZ2VyIG5hbWVzIChwcmVjZWRlZCBieSAtLSkuCisgKi8KK2ludCBnZXRvcHRfbG9uZyhpbnQgYXJnYywKKwkJY2hhciAqYXJndltdLAorCQljb25zdCBjaGFyICpzaG9ydG9wdHMsCisJCWNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLAorCQlpbnQgKmluZGV4cHRyKTsKKworLyoKKyAqIGdldG9wdF9sb25nX29ubHkgZ2V0cyB0aGUgbmV4dCBvcHRpb24gYXJndW1lbnQgZnJvbSB0aGUgYXJndW1lbnQgbGlzdAorICogc3BlY2lmaWVkIGJ5IHRoZSBhcmd2IGFuZCBhcmdjIGFyZ3VtZW50cy4gIE9wdGlvbnMgbWF5IGJlIGVpdGhlciBzaG9ydAorICogb3IgbG9uZyBhcyBmb3IgZ2V0b3B0X2xvbmcsIGJ1dCB0aGUgbG9uZyBuYW1lcyBtYXkgaGF2ZSBhIHNpbmdsZSAnLScKKyAqIHByZWZpeCwgdG9vLgorICovCitpbnQgZ2V0b3B0X2xvbmdfb25seShpbnQgYXJnYywKKwkJCSAgIGNoYXIgKmFyZ3ZbXSwKKwkJCSAgIGNvbnN0IGNoYXIgKnNob3J0b3B0cywKKwkJCSAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLAorCQkJICAgaW50ICppbmRleHB0cik7CisKKyNlbmRpZiAvKiBfX1dJTlBPU0lYX0hfXyAqLwo=