ZGlmZiAtLWdpdCBhL2NvbnN0YW50cy9hbm5vdGF0aW9uX2NvbW1vbi5oIGIvY29uc3RhbnRzL2Fubm90YXRpb25fY29tbW9uLmgKaW5kZXggYmU2NDIwNi4uNjU2ODQyYiAxMDA2NDQKLS0tIGEvY29uc3RhbnRzL2Fubm90YXRpb25fY29tbW9uLmgKKysrIGIvY29uc3RhbnRzL2Fubm90YXRpb25fY29tbW9uLmgKQEAgLTMyLDYgKzMyLDkgQEAKIC8vIEVudHJpZXMgZm9yIGluayBhbm5vdGF0aW9ucwogY29uc3RleHByIGNoYXIga0lua0xpc3RbXSA9ICJJbmtMaXN0IjsKIAorLy8gRW50cmllcyBmb3IgbGluZSBhbm5vdGF0aW9ucworY29uc3RleHByIGNoYXIga0xbXSA9ICJMIjsKKwogfSAgLy8gbmFtZXNwYWNlIGFubm90YXRpb24KIH0gIC8vIG5hbWVzcGFjZSBwZGZpdW0KIApkaWZmIC0tZ2l0IGEvZnBkZnNkay9mcGRmX2Fubm90LmNwcCBiL2ZwZGZzZGsvZnBkZl9hbm5vdC5jcHAKaW5kZXggNTFiNDMzMi4uODVmODZlNSAxMDA2NDQKLS0tIGEvZnBkZnNkay9mcGRmX2Fubm90LmNwcAorKysgYi9mcGRmc2RrL2ZwZGZfYW5ub3QuY3BwCkBAIC04ODcsNiArODg3LDMyIEBACiAgIHJldHVybiBwb2ludHNfbGVuOwogfQogCitGUERGX0VYUE9SVCBGUERGX0JPT0wgRlBERl9DQUxMQ09OViBGUERGQW5ub3RfR2V0TGluZShGUERGX0FOTk9UQVRJT04gYW5ub3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU19QT0lOVEYqIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNfUE9JTlRGKiBlbmQpIHsKKyAgaWYgKCFzdGFydCB8fCAhZW5kKQorICAgIHJldHVybiBmYWxzZTsKKworICBGUERGX0FOTk9UQVRJT05fU1VCVFlQRSBzdWJ0eXBlID0gRlBERkFubm90X0dldFN1YnR5cGUoYW5ub3QpOworICBpZiAoc3VidHlwZSAhPSBGUERGX0FOTk9UX0xJTkUpCisgICAgcmV0dXJuIGZhbHNlOworCisgIENQREZfRGljdGlvbmFyeSogYW5ub3RfZGljdCA9IEdldEFubm90RGljdEZyb21GUERGQW5ub3RhdGlvbihhbm5vdCk7CisgIGlmICghYW5ub3RfZGljdCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgQ1BERl9BcnJheSogbGluZSA9IGFubm90X2RpY3QtPkdldEFycmF5Rm9yKHBkZml1bTo6YW5ub3RhdGlvbjo6a0wpOworICBpZiAoIWxpbmUgfHwgbGluZS0+c2l6ZSgpIDwgNCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgc3RhcnQtPnggPSBsaW5lLT5HZXROdW1iZXJBdCgwKTsKKyAgc3RhcnQtPnkgPSBsaW5lLT5HZXROdW1iZXJBdCgxKTsKKyAgZW5kLT54ID0gbGluZS0+R2V0TnVtYmVyQXQoMik7CisgIGVuZC0+eSA9IGxpbmUtPkdldE51bWJlckF0KDMpOworCisgIHJldHVybiB0cnVlOworfQorCiBGUERGX0VYUE9SVCBGUERGX0JPT0wgRlBERl9DQUxMQ09OViBGUERGQW5ub3RfSGFzS2V5KEZQREZfQU5OT1RBVElPTiBhbm5vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlBERl9CWVRFU1RSSU5HIGtleSkgewogICBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QgPSBHZXRBbm5vdERpY3RGcm9tRlBERkFubm90YXRpb24oYW5ub3QpOwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9mcGRmX2Fubm90X2VtYmVkZGVydGVzdC5jcHAgYi9mcGRmc2RrL2ZwZGZfYW5ub3RfZW1iZWRkZXJ0ZXN0LmNwcAppbmRleCAyMzNmODQyLi44YTAxNmI5IDEwMDY0NAotLS0gYS9mcGRmc2RrL2ZwZGZfYW5ub3RfZW1iZWRkZXJ0ZXN0LmNwcAorKysgYi9mcGRmc2RrL2ZwZGZfYW5ub3RfZW1iZWRkZXJ0ZXN0LmNwcApAQCAtMzM3NywzICszMzc3LDQ4IEBACiAKICAgVW5sb2FkUGFnZShwYWdlKTsKIH0KKworVEVTVF9GKEZQREZBbm5vdEVtYmVkZGVyVGVzdCwgTGluZUFubm90YXRpb24pIHsKKyAgQVNTRVJUX1RSVUUoT3BlbkRvY3VtZW50KCJsaW5lX2Fubm90LnBkZiIpKTsKKyAgRlBERl9QQUdFIHBhZ2UgPSBMb2FkUGFnZSgwKTsKKyAgQVNTRVJUX1RSVUUocGFnZSk7CisgIEVYUEVDVF9FUSgyLCBGUERGUGFnZV9HZXRBbm5vdENvdW50KHBhZ2UpKTsKKworICB7CisgICAgU2NvcGVkRlBERkFubm90YXRpb24gYW5ub3QoRlBERlBhZ2VfR2V0QW5ub3QocGFnZSwgMCkpOworICAgIEFTU0VSVF9UUlVFKGFubm90KTsKKworICAgIC8vIEZQREZBbm5vdF9HZXRWZXJ0aWNlcygpIHBvc2l0aXZlIHRlc3RpbmcuCisgICAgRlNfUE9JTlRGIHN0YXJ0OworICAgIEZTX1BPSU5URiBlbmQ7CisgICAgQVNTRVJUX1RSVUUoRlBERkFubm90X0dldExpbmUoYW5ub3QuZ2V0KCksICZzdGFydCwgJmVuZCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxNTkuMGYsIHN0YXJ0LngpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyOTYuMGYsIHN0YXJ0LnkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0NzIuMGYsIGVuZC54KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMjQzLjQyZiwgZW5kLnkpOworCisgICAgLy8gRlBERkFubm90X0dldFZlcnRpY2VzKCkgbmVnYXRpdmUgdGVzdGluZy4KKyAgICBFWFBFQ1RfRkFMU0UoRlBERkFubm90X0dldExpbmUobnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIEVYUEVDVF9GQUxTRShGUERGQW5ub3RfR2V0TGluZShhbm5vdC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOworICB9CisKKyAgeworICAgIFNjb3BlZEZQREZBbm5vdGF0aW9uIGFubm90KEZQREZQYWdlX0dldEFubm90KHBhZ2UsIDEpKTsKKyAgICBBU1NFUlRfVFJVRShhbm5vdCk7CisKKyAgICAvLyBUb28gZmV3IGVsZW1lbnRzIGluIHRoZSBsaW5lIGFycmF5LgorICAgIEZTX1BPSU5URiBzdGFydDsKKyAgICBGU19QT0lOVEYgZW5kOworICAgIEVYUEVDVF9GQUxTRShGUERGQW5ub3RfR2V0TGluZShhbm5vdC5nZXQoKSwgJnN0YXJ0LCAmZW5kKSk7CisgIH0KKworICB7CisgICAgLy8gV3JvbmcgYW5ub3RhdGlvbiB0eXBlLgorICAgIFNjb3BlZEZQREZBbm5vdGF0aW9uIGlua19hbm5vdChGUERGUGFnZV9DcmVhdGVBbm5vdChwYWdlLCBGUERGX0FOTk9UX0lOSykpOworICAgIEZTX1BPSU5URiBzdGFydDsKKyAgICBGU19QT0lOVEYgZW5kOworICAgIEVYUEVDVF9GQUxTRShGUERGQW5ub3RfR2V0TGluZShpbmtfYW5ub3QuZ2V0KCksICZzdGFydCwgJmVuZCkpOworICB9CisKKyAgVW5sb2FkUGFnZShwYWdlKTsKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvZnBkZl92aWV3X2NfYXBpX3Rlc3QuYyBiL2ZwZGZzZGsvZnBkZl92aWV3X2NfYXBpX3Rlc3QuYwppbmRleCBiNDdiMDRmLi5mZjUxMWY0IDEwMDY0NAotLS0gYS9mcGRmc2RrL2ZwZGZfdmlld19jX2FwaV90ZXN0LmMKKysrIGIvZnBkZnNkay9mcGRmX3ZpZXdfY19hcGlfdGVzdC5jCkBAIC02MSw2ICs2MSw3IEBACiAgICAgQ0hLKEZQREZBbm5vdF9HZXRGb3JtRmllbGRWYWx1ZSk7CiAgICAgQ0hLKEZQREZBbm5vdF9HZXRJbmtMaXN0Q291bnQpOwogICAgIENISyhGUERGQW5ub3RfR2V0SW5rTGlzdFBhdGgpOworICAgIENISyhGUERGQW5ub3RfR2V0TGluZSk7CiAgICAgQ0hLKEZQREZBbm5vdF9HZXRMaW5rKTsKICAgICBDSEsoRlBERkFubm90X0dldExpbmtlZEFubm90KTsKICAgICBDSEsoRlBERkFubm90X0dldE51bWJlclZhbHVlKTsKZGlmZiAtLWdpdCBhL3B1YmxpYy9mcGRmX2Fubm90LmggYi9wdWJsaWMvZnBkZl9hbm5vdC5oCmluZGV4IGQxMjEzNDQuLjZjOGEyMzcgMTAwNjQ0Ci0tLSBhL3B1YmxpYy9mcGRmX2Fubm90LmgKKysrIGIvcHVibGljL2ZwZGZfYW5ub3QuaApAQCAtNDQwLDYgKzQ0MCwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKIAogLy8gRXhwZXJpbWVudGFsIEFQSS4KKy8vIEdldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBjb29yZGluYXRlcyBvZiBhIGxpbmUgYW5ub3RhdGlvbi4KKy8vCisvLyAgIGFubm90ICAtIGhhbmRsZSB0byBhbiBhbm5vdGF0aW9uLCBhcyByZXR1cm5lZCBieSBlLmcuIEZQREZQYWdlX0dldEFubm90KCkKKy8vICAgc3RhcnQgLSBzdGFydGluZyBwb2ludAorLy8gICBlbmQgLSBlbmRpbmcgcG9pbnQKKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGFubm90YXRpb24gaXMgb2YgdHlwZSBsaW5lLCB8c3RhcnR8IGFuZCB8ZW5kfCBhcmUgbm90CisvLyBOVUxMLCBmYWxzZSBvdGhlcndpc2UuCitGUERGX0VYUE9SVCBGUERGX0JPT0wgRlBERl9DQUxMQ09OViBGUERGQW5ub3RfR2V0TGluZShGUERGX0FOTk9UQVRJT04gYW5ub3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU19QT0lOVEYqIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNfUE9JTlRGKiBlbmQpOworCisvLyBFeHBlcmltZW50YWwgQVBJLgogLy8gQ2hlY2sgaWYgfGFubm90fCdzIGRpY3Rpb25hcnkgaGFzIHxrZXl8IGFzIGEga2V5LgogLy8KIC8vICAgYW5ub3QgIC0gaGFuZGxlIHRvIGFuIGFubm90YXRpb24uCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Jlc291cmNlcy9saW5lX2Fubm90LmluIGIvdGVzdGluZy9yZXNvdXJjZXMvbGluZV9hbm5vdC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGFlY2YyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9yZXNvdXJjZXMvbGluZV9hbm5vdC5pbgpAQCAtMCwwICsxLDQ4IEBACit7e2hlYWRlcn19Cit7e29iamVjdCAxIDB9fSA8PAorICAvVHlwZSAvQ2F0YWxvZworICAvUGFnZXMgMiAwIFIKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDIgMH19IDw8CisgIC9UeXBlIC9QYWdlcworICAvQ291bnQgMQorICAvS2lkcyBbMyAwIFJdCis+PgorZW5kb2JqCit7e29iamVjdCAzIDB9fSA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCisgIC9Bbm5vdHMgWworICAgIDQgMCBSIDUgMCBSCisgIF0KKyAgL1RhYnMgL1IKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDQgMH19IDw8CisgIC9UeXBlIC9Bbm5vdAorICAvU3VidHlwZSAvTGluZQorICAvTk0gKExpbmUtMSkKKyAgL0YgNAorICAvTCBbMTU5IDI5NiA0NzIgMjQzLjQyXQorICAvUCAzIDAgUgorICAvQyBbMSAwLjkwMTk2IDBdCisgIC9SZWN0IFsyOTMgNTMwIDM0OSA1NDJdCis+PgorZW5kb2JqCit7e29iamVjdCA1IDB9fSA8PAorICAvVHlwZSAvQW5ub3QKKyAgL1N1YnR5cGUgL0xpbmUKKyAgL05NIChMaW5lLTIpCisgIC9GIDQKKyAgL0wgWzE1OSAyOTYgNDcyXQorICAvUCAzIDAgUgorICAvQyBbMSAwLjkwMTk2IDBdCisgIC9SZWN0IFsyOTMgNTMwIDM0OSA1NDJdCis+PgorZW5kb2JqCit7e3hyZWZ9fQore3t0cmFpbGVyfX0KK3t7c3RhcnR4cmVmfX0KKyUlRU9GCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Jlc291cmNlcy9saW5lX2Fubm90LnBkZiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2xpbmVfYW5ub3QucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTFkNGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy9saW5lX2Fubm90LnBkZgpAQCAtMCwwICsxLDYwIEBACislUERGLTEuNworJaDypPQKKzEgMCBvYmogPDwKKyAgL1R5cGUgL0NhdGFsb2cKKyAgL1BhZ2VzIDIgMCBSCis+PgorZW5kb2JqCisyIDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlcworICAvQ291bnQgMQorICAvS2lkcyBbMyAwIFJdCis+PgorZW5kb2JqCiszIDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KKyAgL0Fubm90cyBbCisgICAgNCAwIFIgNSAwIFIKKyAgXQorICAvVGFicyAvUgorPj4KK2VuZG9iagorNCAwIG9iaiA8PAorICAvVHlwZSAvQW5ub3QKKyAgL1N1YnR5cGUgL0xpbmUKKyAgL05NIChMaW5lLTEpCisgIC9GIDQKKyAgL0wgWzE1OSAyOTYgNDcyIDI0My40Ml0KKyAgL1AgMyAwIFIKKyAgL0MgWzEgMC45MDE5NiAwXQorICAvUmVjdCBbMjkzIDUzMCAzNDkgNTQyXQorPj4KK2VuZG9iagorNSAwIG9iaiA8PAorICAvVHlwZSAvQW5ub3QKKyAgL1N1YnR5cGUgL0xpbmUKKyAgL05NIChMaW5lLTIpCisgIC9GIDQKKyAgL0wgWzE1OSAyOTYgNDcyXQorICAvUCAzIDAgUgorICAvQyBbMSAwLjkwMTk2IDBdCisgIC9SZWN0IFsyOTMgNTMwIDM0OSA1NDJdCis+PgorZW5kb2JqCit4cmVmCiswIDYKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMTUgMDAwMDAgbiAKKzAwMDAwMDAwNjggMDAwMDAgbiAKKzAwMDAwMDAxMzEgMDAwMDAgbiAKKzAwMDAwMDAyNTEgMDAwMDAgbiAKKzAwMDAwMDA0MDggMDAwMDAgbiAKK3RyYWlsZXIgPDwKKyAgL1Jvb3QgMSAwIFIKKyAgL1NpemUgNgorPj4KK3N0YXJ0eHJlZgorNTU4CislJUVPRgo=