ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBhOTQ5NTVmLi5lNGQ4ODcxIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDYgKzEsMzAgQEAKIAogCQlDaGFuZ2VMb2cgZmlsZSBmb3IgemxpYgogCitDaGFuZ2VzIGluIDEuMC45ICgxNyBGZWIgMTk5OCkKKy0gYWRkZWQgZ3pwdXRzIGFuZCBnemdldHMgZnVuY3Rpb25zCistIGRvIG5vdCBjbGVhciBlb2YgZmxhZyBpbiBnenNlZWsgKE1hcmsgRGlla2hhbnMpCistIGZpeCBnenNlZWsgZm9yIGZpbGVzIGluIHRyYW5zcGFyZW50IG1vZGUgKE1hcmsgRGlla2hhbnMpCistIGRvIG5vdCBhc3N1bWUgdGhhdCB2c3ByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiAoSmVucyBLcmlua2UpCistIHJlcGxhY2UgRVhQT1JUIHdpdGggWkVYUE9SVCB0byBhdm9pZCBjb25mbGljdCB3aXRoIG90aGVyIHByb2dyYW1zCistIGFkZGVkIGNvbXByZXNzMiBpbiB6Y29uZi5oLCB6bGliLmRlZiwgemxpYi5kbnQKKy0gbmV3IGFzbSBjb2RlIGZyb20gR2lsbGVzIFZvbGxhbnQgaW4gY29udHJpYi9hc20zODYKKy0gc2ltcGxpZnkgdGhlIGluZmxhdGUgY29kZSAoTWFyayk6CisgLiBSZXBsYWNlIFpBTExPQydzIGluIGh1ZnRfYnVpbGQoKSB3aXRoIHNpbmdsZSBaQUxMT0MgaW4gaW5mbGF0ZV9ibG9ja3NfbmV3KCkKKyAuIFpBTExPQyB0aGUgbGVuZ3RoIGxpc3QgaW4gaW5mbGF0ZV90cmVlc19maXhlZCgpIGluc3RlYWQgb2YgdXNpbmcgc3RhY2sKKyAuIFpBTExPQyB0aGUgdmFsdWUgYXJlYSBmb3IgaHVmdF9idWlsZCgpIGluc3RlYWQgb2YgdXNpbmcgc3RhY2sKKyAuIFNpbXBsaWZ5IFpfRklOSVNIIGNoZWNrIGluIGluZmxhdGUoKQorCistIEF2b2lkIGdjYyAyLjguMCBjb21wYXJpc29uIGJ1ZyBhIGxpdHRsZSBkaWZmZXJlbnRseSB0aGFuIHpsaWIgMS4wLjgKKy0gaW4gaW5mdHJlZXMuYywgYXZvaWQgY2MgLU8gYnVnIG9uIEhQIChGYXJzaGlkIEVsYWhpKQorLSBpbiB6Y29uZi5oIG1vdmUgdGhlIFpMSUJfRExMIHN0dWZmIGVhcmxpZXIgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aAorICB0aGUgZGVjbGFyYXRpb24gb2YgRkFSIChHaWxsZXMgVk9sbGFudCkKKy0gaW5zdGFsbCBsaWJ6LnNvKiB3aXRoIG1vZGUgNzU1IChleGVjdXRhYmxlKSBpbnN0ZWFkIG9mIDY0NCAoTWFyYyBMZWhtYW5uKQorLSByZWFkX2J1ZiBidWYgcGFyYW1ldGVyIG9mIHR5cGUgQnl0ZWYqIGluc3RlYWQgb2YgY2hhcmYqCistIHptZW1jcHkgcGFyYW1ldGVycyBhcmUgb2YgdHlwZSBCeXRlZiosIG5vdCBjaGFyZiogKEpvc2VwaCBTdHJvdXQpCistIGRvIG5vdCByZWRlY2xhcmUgdW5saW5rIGluIG1pbmlnemlwLmMgZm9yIFdJTjMyIChKb2huIEJvd2xlcikKKy0gZml4IGNoZWNrIGZvciBwcmVzZW5jZSBvZiBkaXJlY3RvcmllcyBpbiAibWFrZSBpbnN0YWxsIiAoSWFuIFdpbGxpcykKKwogQ2hhbmdlcyBpbiAxLjAuOCAoMjcgSmFuIDE5OTgpCiAtIGZpeGVkIG9mZnNldHMgaW4gY29udHJpYi9hc20zODYvZ3ZtYXQzMi5hc20gKEdpbGxlcyBWb2xsYW50KQogLSBmaXggZ3pnZXRjIGFuZCBnenB1dGMgZm9yIGJpZyBlbmRpYW4gc3lzdGVtcyAoTWFya3VzIE9iZXJodW1lcikKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMGRlNjE2Yy4uZjZjM2NhNyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTIzLDcgKzIzLDcgQEAKIExERkxBR1M9LUwuIC1segogTERTSEFSRUQ9JChDQykKIAotVkVSPTEuMC44CitWRVI9MS4wLjkKIExJQlM9bGliei5hCiBTSEFSRURMSUI9bGliei5zbwogCkBAIC00NCw3ICs0NCw3IEBACiAgIGFsZ29yaXRobS50eHQgemxpYi4zIG1zZG9zL01ha2UqW2EtejAtOV0gbXNkb3MvemxpYi5kZWYgbXNkb3MvemxpYi5yYyBcCiAgIG50L01ha2VmaWxlLm50IG50L3psaWIuZG50ICBjb250cmliL1JFQURNRS5jb250cmliIGNvbnRyaWIvKi50eHQgXAogICBjb250cmliL2FzbTM4Ni8qLmFzbSBjb250cmliL2FzbTM4Ni8qLmMgXAotICBjb250cmliL2FzbTM4Ni8qLmJhdCBjb250cmliL2FzbTM4Ni8qLm1hayBjb250cmliL2lvc3RyZWFtLyouY3BwIFwKKyAgY29udHJpYi9hc20zODYvKi5iYXQgY29udHJpYi9hc20zODYvemxpYnZjLmQ/PyBjb250cmliL2lvc3RyZWFtLyouY3BwIFwKICAgY29udHJpYi9pb3N0cmVhbS8qLmggIGNvbnRyaWIvaW9zdHJlYW0yLyouaCBjb250cmliL2lvc3RyZWFtMi8qLmNwcCBcCiAgIGNvbnRyaWIvdW50Z3ovTWFrZWZpbGUgY29udHJpYi91bnRnei8qLmMgY29udHJpYi91bnRnei8qLnczMgogCkBAIC03NywxMiArNzcsMTIgQEAKIAkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXAubyAkKExERkxBR1MpCiAKIGluc3RhbGw6ICQoTElCUykKLQktQGlmIFsgISAkKHByZWZpeCkvaW5jbHVkZSAgXTsgdGhlbiBta2RpciAkKHByZWZpeCkvaW5jbHVkZTsgZmkKLQktQGlmIFsgISAkKGV4ZWNfcHJlZml4KS9saWIgXTsgdGhlbiBta2RpciAkKGV4ZWNfcHJlZml4KS9saWI7IGZpCisJLUBpZiBbICEgLWQgJChwcmVmaXgpL2luY2x1ZGUgIF07IHRoZW4gbWtkaXIgJChwcmVmaXgpL2luY2x1ZGU7IGZpCisJLUBpZiBbICEgLWQgJChleGVjX3ByZWZpeCkvbGliIF07IHRoZW4gbWtkaXIgJChleGVjX3ByZWZpeCkvbGliOyBmaQogCWNwIHpsaWIuaCB6Y29uZi5oICQocHJlZml4KS9pbmNsdWRlCiAJY2htb2QgNjQ0ICQocHJlZml4KS9pbmNsdWRlL3psaWIuaCAkKHByZWZpeCkvaW5jbHVkZS96Y29uZi5oCiAJY3AgJChMSUJTKSAkKGV4ZWNfcHJlZml4KS9saWIKLQljZCAkKGV4ZWNfcHJlZml4KS9saWI7IGNobW9kIDY0NCAkKExJQlMpCisJY2QgJChleGVjX3ByZWZpeCkvbGliOyBjaG1vZCA3NTUgJChMSUJTKQogCS1AKGNkICQoZXhlY19wcmVmaXgpL2xpYjsgJChSQU5MSUIpIGxpYnouYSB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKIAljZCAkKGV4ZWNfcHJlZml4KS9saWI7IGlmIHRlc3QgLWYgJChTSEFSRURMSUIpLiQoVkVSKTsgdGhlbiBcCiAJICBybSAtZiAkKFNIQVJFRExJQikgJChTSEFSRURMSUIpLjE7IFwKQEAgLTExMiwxMiArMTEyLDE0IEBACiAKIHppcDoKIAltdiBNYWtlZmlsZSBNYWtlZmlsZX47IGNwIC1wIE1ha2VmaWxlLmluIE1ha2VmaWxlCisJcm0gLWYgdGVzdC5jIHp0ZXN0Ki5jCiAJdj1gc2VkIC1uIC1lICdzL1wuLy9nJyAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoLipcKSIuKi9cMS9wJyA8IHpsaWIuaGA7XAogCXppcCAtdWw5IHpsaWIkJHYgJChESVNURklMRVMpCiAJbXYgTWFrZWZpbGV+IE1ha2VmaWxlCiAKIGRpc3Q6CiAJbXYgTWFrZWZpbGUgTWFrZWZpbGV+OyBjcCAtcCBNYWtlZmlsZS5pbiBNYWtlZmlsZQorCXJtIC1mIHRlc3QuYyB6dGVzdCouYwogCWQ9emxpYi1gc2VkIC1uICcvVkVSU0lPTiAiL3MvLioiXCguKlwpIi4qL1wxL3AnIDwgemxpYi5oYDtcCiAJcm0gLWYgJCRkLnRhci5nejsgXAogCWlmIHRlc3QgISAtZCAuLi8kJGQ7IHRoZW4gcm0gLWYgLi4vJCRkOyBsbiAtcyBgcHdkYCAuLi8kJGQ7IGZpOyBcCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCmluZGV4IDBkZTYxNmMuLmY2YzNjYTcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmluCisrKyBiL01ha2VmaWxlLmluCkBAIC0yMyw3ICsyMyw3IEBACiBMREZMQUdTPS1MLiAtbHoKIExEU0hBUkVEPSQoQ0MpCiAKLVZFUj0xLjAuOAorVkVSPTEuMC45CiBMSUJTPWxpYnouYQogU0hBUkVETElCPWxpYnouc28KIApAQCAtNDQsNyArNDQsNyBAQAogICBhbGdvcml0aG0udHh0IHpsaWIuMyBtc2Rvcy9NYWtlKlthLXowLTldIG1zZG9zL3psaWIuZGVmIG1zZG9zL3psaWIucmMgXAogICBudC9NYWtlZmlsZS5udCBudC96bGliLmRudCAgY29udHJpYi9SRUFETUUuY29udHJpYiBjb250cmliLyoudHh0IFwKICAgY29udHJpYi9hc20zODYvKi5hc20gY29udHJpYi9hc20zODYvKi5jIFwKLSAgY29udHJpYi9hc20zODYvKi5iYXQgY29udHJpYi9hc20zODYvKi5tYWsgY29udHJpYi9pb3N0cmVhbS8qLmNwcCBcCisgIGNvbnRyaWIvYXNtMzg2LyouYmF0IGNvbnRyaWIvYXNtMzg2L3psaWJ2Yy5kPz8gY29udHJpYi9pb3N0cmVhbS8qLmNwcCBcCiAgIGNvbnRyaWIvaW9zdHJlYW0vKi5oICBjb250cmliL2lvc3RyZWFtMi8qLmggY29udHJpYi9pb3N0cmVhbTIvKi5jcHAgXAogICBjb250cmliL3VudGd6L01ha2VmaWxlIGNvbnRyaWIvdW50Z3ovKi5jIGNvbnRyaWIvdW50Z3ovKi53MzIKIApAQCAtNzcsMTIgKzc3LDEyIEBACiAJJChDQykgJChDRkxBR1MpIC1vICRAIG1pbmlnemlwLm8gJChMREZMQUdTKQogCiBpbnN0YWxsOiAkKExJQlMpCi0JLUBpZiBbICEgJChwcmVmaXgpL2luY2x1ZGUgIF07IHRoZW4gbWtkaXIgJChwcmVmaXgpL2luY2x1ZGU7IGZpCi0JLUBpZiBbICEgJChleGVjX3ByZWZpeCkvbGliIF07IHRoZW4gbWtkaXIgJChleGVjX3ByZWZpeCkvbGliOyBmaQorCS1AaWYgWyAhIC1kICQocHJlZml4KS9pbmNsdWRlICBdOyB0aGVuIG1rZGlyICQocHJlZml4KS9pbmNsdWRlOyBmaQorCS1AaWYgWyAhIC1kICQoZXhlY19wcmVmaXgpL2xpYiBdOyB0aGVuIG1rZGlyICQoZXhlY19wcmVmaXgpL2xpYjsgZmkKIAljcCB6bGliLmggemNvbmYuaCAkKHByZWZpeCkvaW5jbHVkZQogCWNobW9kIDY0NCAkKHByZWZpeCkvaW5jbHVkZS96bGliLmggJChwcmVmaXgpL2luY2x1ZGUvemNvbmYuaAogCWNwICQoTElCUykgJChleGVjX3ByZWZpeCkvbGliCi0JY2QgJChleGVjX3ByZWZpeCkvbGliOyBjaG1vZCA2NDQgJChMSUJTKQorCWNkICQoZXhlY19wcmVmaXgpL2xpYjsgY2htb2QgNzU1ICQoTElCUykKIAktQChjZCAkKGV4ZWNfcHJlZml4KS9saWI7ICQoUkFOTElCKSBsaWJ6LmEgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCiAJY2QgJChleGVjX3ByZWZpeCkvbGliOyBpZiB0ZXN0IC1mICQoU0hBUkVETElCKS4kKFZFUik7IHRoZW4gXAogCSAgcm0gLWYgJChTSEFSRURMSUIpICQoU0hBUkVETElCKS4xOyBcCkBAIC0xMTIsMTIgKzExMiwxNCBAQAogCiB6aXA6CiAJbXYgTWFrZWZpbGUgTWFrZWZpbGV+OyBjcCAtcCBNYWtlZmlsZS5pbiBNYWtlZmlsZQorCXJtIC1mIHRlc3QuYyB6dGVzdCouYwogCXY9YHNlZCAtbiAtZSAncy9cLi8vZycgLWUgJy9WRVJTSU9OICIvcy8uKiJcKC4qXCkiLiovXDEvcCcgPCB6bGliLmhgO1wKIAl6aXAgLXVsOSB6bGliJCR2ICQoRElTVEZJTEVTKQogCW12IE1ha2VmaWxlfiBNYWtlZmlsZQogCiBkaXN0OgogCW12IE1ha2VmaWxlIE1ha2VmaWxlfjsgY3AgLXAgTWFrZWZpbGUuaW4gTWFrZWZpbGUKKwlybSAtZiB0ZXN0LmMgenRlc3QqLmMKIAlkPXpsaWItYHNlZCAtbiAnL1ZFUlNJT04gIi9zLy4qIlwoLipcKSIuKi9cMS9wJyA8IHpsaWIuaGA7XAogCXJtIC1mICQkZC50YXIuZ3o7IFwKIAlpZiB0ZXN0ICEgLWQgLi4vJCRkOyB0aGVuIHJtIC1mIC4uLyQkZDsgbG4gLXMgYHB3ZGAgLi4vJCRkOyBmaTsgXApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDBhZGM2NmYuLmMxZDIxN2YgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNCArMSw0IEBACi16bGliIDEuMC44IGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4gIEFsbCB0aGUgY29kZQoremxpYiAxLjAuOSBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuICBBbGwgdGhlIGNvZGUKIGlzIHRocmVhZCBzYWZlLiAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeQogaXMgZGVzY3JpYmVkIGJ5IFJGQ3MgKFJlcXVlc3QgZm9yIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzIAogZnRwOi8vZHMuaW50ZXJuaWMubmV0L3JmYy9yZmMxOTUwLnR4dCAoemxpYiBmb3JtYXQpLCByZmMxOTUxLnR4dCAoZGVmbGF0ZQpAQCAtMjUsMTggKzI1LDIyIEBACiBEci4gRG9iYidzIEpvdXJuYWw7IGEgY29weSBvZiB0aGUgYXJ0aWNsZSBpcyBhdmFpbGFibGUgaW4KIGh0dHA6Ly93ZWIyLmFpcm1haWwubmV0L21hcmtuL2FydGljbGVzL3psaWJ0b29sL3psaWJ0b29sLmh0bQogCi1UaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4wLjggYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgotVGhlIG1haW4gY2hhbmdlcyBzaW5jZSAxLjAuNyBhcmU6CitUaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4wLjkgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgorVGhlIG1haW4gY2hhbmdlcyBzaW5jZSAxLjAuOCBhcmU6CiAKLS0gZml4ZWQgb2Zmc2V0cyBpbiBjb250cmliL2FzbTM4Ni9ndm1hdDMyLmFzbSAoR2lsbGVzIFZvbGxhbnQpCi0tIGZpeCBnemdldGMgYW5kIGd6cHV0YyBmb3IgYmlnIGVuZGlhbiBzeXN0ZW1zIChNYXJrdXMgT2Jlcmh1bWVyKQotLSBhZGRlZCBjb21wcmVzczIoKSB0byBhbGxvdyBzZXR0aW5nIHRoZSBjb21wcmVzc2lvbiBsZXZlbAotLSBpbmNsdWRlIHN5cy90eXBlcy5oIHRvIGdldCBvZmZfdCBvbiBzb21lIHN5c3RlbXMgKE1hcmMgTGVobWFubiAmIFFpbmdMb25nKQotLSB1c2UgY29uc3RhbnQgYXJyYXlzIGZvciB0aGUgc3RhdGljIHRyZWVzIGluIHRyZWVzLmMgaW5zdGVhZCBvZiBjb21wdXRpbmcKLSAgdGhlbSBhdCBydW4gdGltZSAodGhhbmtzIHRvIEtlbiBSYWVidXJuIGZvciB0aGlzIHN1Z2dlc3Rpb24pLiBUbyBjcmVhdGUKLSAgdHJlZXMuaCwgY29tcGlsZSB3aXRoIEdFTl9UUkVFU19IIGFuZCBydW4gIm1ha2UgdGVzdCIuCi0tIGNoZWNrIHJldHVybiBjb2RlIG9mIGV4YW1wbGUgaW4gIm1ha2UgdGVzdCIgYW5kIGRpc3BsYXkgcmVzdWx0Ci0tIHBhc3MgbWluaWd6aXAgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gZmlsZV9jb21wcmVzcworLSBhZGRlZCBnenB1dHMgYW5kIGd6Z2V0cyBmdW5jdGlvbnMKKy0gZG8gbm90IGNsZWFyIGVvZiBmbGFnIGluIGd6c2VlayAoTWFyayBEaWVraGFucykKKy0gZml4IGd6c2VlayBmb3IgZmlsZXMgaW4gdHJhbnNwYXJlbnQgbW9kZSAoTWFyayBEaWVraGFucykKKy0gZG8gbm90IGFzc3VtZSB0aGF0IHZzcHJpbnRmIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIChKZW5zIEtyaW5rZSkKKy0gcmVwbGFjZSBFWFBPUlQgd2l0aCBaRVhQT1JUIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggb3RoZXIgcHJvZ3JhbXMKKy0gYWRkZWQgY29tcHJlc3MyIGluIHpjb25mLmgsIHpsaWIuZGVmLCB6bGliLmRudAorLSBuZXcgYXNtIGNvZGUgZnJvbSBHaWxsZXMgVm9sbGFudCBpbiBjb250cmliL2FzbTM4NgorLSBzaW1wbGlmeSB0aGUgaW5mbGF0ZSBjb2RlIChNYXJrKToKKyAuIFJlcGxhY2UgWkFMTE9DJ3MgaW4gaHVmdF9idWlsZCgpIHdpdGggc2luZ2xlIFpBTExPQyBpbiBpbmZsYXRlX2Jsb2Nrc19uZXcoKQorIC4gWkFMTE9DIHRoZSBsZW5ndGggbGlzdCBpbiBpbmZsYXRlX3RyZWVzX2ZpeGVkKCkgaW5zdGVhZCBvZiB1c2luZyBzdGFjaworIC4gWkFMTE9DIHRoZSB2YWx1ZSBhcmVhIGZvciBodWZ0X2J1aWxkKCkgaW5zdGVhZCBvZiB1c2luZyBzdGFjaworIC4gU2ltcGxpZnkgWl9GSU5JU0ggY2hlY2sgaW4gaW5mbGF0ZSgpCisKIAogVW5zdXBwb3J0ZWQgdGhpcmQgcGFydHkgY29udHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5ICJjb250cmliIi4KIApAQCAtNjUsOSArNjksNiBAQAogICBTZWUgY29udHJpYi92aXN1YWwtYmFzaWMudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgogICBJIGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSBzdHJ1Y3R1cmVzIGluIFZpc3VhbCBCYXNpYywgc29ycnkuCiAKLS0gIm1ha2UgdGVzdCIgZmFpbHMgb24gU29sYXJpcyAyLjYgd2l0aCBnY2MgMi44LjAuIEl0IHdvcmtzIHdpdGggY2MgYW5kCi0gICB3aXRoIGdjYyAyLjcuMi4xLgotCiAtIEZvciA2NC1iaXQgSXJpeCwgZGVmbGF0ZS5jIG11c3QgYmUgY29tcGlsZWQgd2l0aG91dCBhbnkgb3B0aW1pemF0aW9uLgogICBXaXRoIC1PLCBvbmUgbGlicG5nIHRlc3QgZmFpbHMuIFRoZSB0ZXN0IHdvcmtzIGluIDMyIGJpdCBtb2RlICh3aXRoCiAgIHRoZSAtbjMyIGNvbXBpbGVyIGZsYWcpLiBUaGUgY29tcGlsZXIgYnVnIGhhcyBiZWVuIHJlcG9ydGVkIHRvIFNHSS4KQEAgLTc1LDExICs3NiwxMiBAQAogLSB6bGliIGRvZXNuJ3Qgd29yayB3aXRoIGdjYyAyLjYuMyBvbiBhIERFQyAzMDAwLzMwMExYIHVuZGVyIE9TRi8xIDIuMSAgIAogICBpdCB3b3JrcyB3aGVuIGNvbXBpbGVkIHdpdGggY2MuCiAKLS0gemxpYiBkb2Vzbid0IHdvcmsgb24gSFAtVVggOS4wNSB3aXRoIG9uZSBjYyBjb21waWxlciAodGhlIG9uZSBub3QKLSAgYWNjZXB0aW5nIHRoZSAtTyBvcHRpb24pLiBJdCB3b3JrcyB3aXRoIHRoZSBvdGhlciBjYyBjb21waWxlci4KKy0gemxpYiBkb2Vzbid0IHdvcmsgb24gSFAtVVggOS4wNSB3aXRoIHNvbWUgdmVyc2lvbnMgb2YgL2Jpbi9jYy4gSXQgd29ya3MKKyAgd2l0aCBvdGhlciBjb21waWxlcnMuIFVzZSAibWFrZSB0ZXN0IiB0byBjaGVjayB5b3VyIGNvbXBpbGVyLgogCiAtIEZvciBzaGFyZWQgbWVtb3J5IG11bHRpcHJvY2Vzc29ycywgdGhlIGRlY29tcHJlc3Npb24gY29kZSBhc3N1bWVzIHRoYXQKLSAgd3JpdGVzIHRvIHBvaW50ZXJzIGFyZSBhdG9taWMuCisgIHdyaXRlcyB0byBwb2ludGVycyBhcmUgYXRvbWljLiBBbHNvIHRoZSBmdW5jdGlvbnMgemFsbG9jIGFuZCB6ZnJlZSBwYXNzZWQKKyAgdG8gZGVmbGF0ZUluaXQgbXVzdCBiZSBtdWx0aS10aHJlYWRlZCBpbiB0aGlzIGNhc2UuCiAKIC0gZ3pkb3BlbiBpcyBub3Qgc3VwcG9ydGVkIG9uIFJJU0NPUywgQkVPUyBhbmQgTWFjCiAKZGlmZiAtLWdpdCBhL2FkbGVyMzIuYyBiL2FkbGVyMzIuYwppbmRleCA2NzVhNDZjLi4xNmNmOWE3IDEwMDY0NAotLS0gYS9hZGxlcjMyLmMKKysrIGIvYWRsZXIzMi5jCkBAIC0xOCw3ICsxOCw3IEBACiAjZGVmaW5lIERPMTYoYnVmKSAgIERPOChidWYsMCk7IERPOChidWYsOCk7CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLXVMb25nIEVYUE9SVCBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbikKK3VMb25nIFpFWFBPUlQgYWRsZXIzMihhZGxlciwgYnVmLCBsZW4pCiAgICAgdUxvbmcgYWRsZXI7CiAgICAgY29uc3QgQnl0ZWYgKmJ1ZjsKICAgICB1SW50IGxlbjsKZGlmZiAtLWdpdCBhL2NvbXByZXNzLmMgYi9jb21wcmVzcy5jCmluZGV4IGI3NzY3NGEuLjFjZWU0NzAgMTAwNjQ0Ci0tLSBhL2NvbXByZXNzLmMKKysrIGIvY29tcHJlc3MuYwpAQCAtMTgsNyArMTgsNyBAQAogICAgbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyLAogICAgWl9TVFJFQU1fRVJST1IgaWYgdGhlIGxldmVsIHBhcmFtZXRlciBpcyBpbnZhbGlkLgogKi8KLWludCBFWFBPUlQgY29tcHJlc3MyIChkZXN0LCBkZXN0TGVuLCBzb3VyY2UsIHNvdXJjZUxlbiwgbGV2ZWwpCitpbnQgWkVYUE9SVCBjb21wcmVzczIgKGRlc3QsIGRlc3RMZW4sIHNvdXJjZSwgc291cmNlTGVuLCBsZXZlbCkKICAgICBCeXRlZiAqZGVzdDsKICAgICB1TG9uZ2YgKmRlc3RMZW47CiAgICAgY29uc3QgQnl0ZWYgKnNvdXJjZTsKQEAgLTU4LDcgKzU4LDcgQEAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KLWludCBFWFBPUlQgY29tcHJlc3MgKGRlc3QsIGRlc3RMZW4sIHNvdXJjZSwgc291cmNlTGVuKQoraW50IFpFWFBPUlQgY29tcHJlc3MgKGRlc3QsIGRlc3RMZW4sIHNvdXJjZSwgc291cmNlTGVuKQogICAgIEJ5dGVmICpkZXN0OwogICAgIHVMb25nZiAqZGVzdExlbjsKICAgICBjb25zdCBCeXRlZiAqc291cmNlOwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGYwZDAxZTguLmJkZTUzYjEgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTE0LDYgKzE0LDEwIEBACiAjICAgIChzZXRlbnYgcHJlZml4ICRIT01FOyBzZXRlbnYgQ0MgY2M7IHNldGVudiBDRkxBR1MgIi1PNCI7IC4vY29uZmlndXJlKQogIyBMRFNIQVJFRCBpcyB0aGUgY29tbWFuZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5CiAKKyMgSW5jb3JyZWN0IHNldHRpbmdzIG9mIENDIG9yIENGTEFHUyBtYXkgcHJldmVudCBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LgorIyBJZiB5b3UgaGF2ZSBwcm9ibGVtcywgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUyBiZWZvcmUgcmVwb3J0aW5nCisjIGFuIGVycm9yLgorCiBMSUJTPWxpYnouYQogU0hBUkVETElCPWxpYnouc28KIFZFUj1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXCguKlwpIi4qL1wxL3AnIDwgemxpYi5oYApAQCAtMjMsNiArMjcsOCBAQAogZXhlY19wcmVmaXg9JHtleGVjX3ByZWZpeC0kcHJlZml4fQogc2hhcmVkX2V4dD0nLnNvJwogc2hhcmVkPTAKK29sZF9jYz0iJENDIgorb2xkX2NmbGFncz0iJENGTEFHUyIKIAogY2FzZSAiJDEiIGluCiAgIC1zKiB8IC0tcyopIHNoYXJlZD0xOyBzaGlmdDs7CkBAIC05Niw5ICsxMDIsMTIgQEAKICAgICBDRkxBR1M9IiRTRkxBR1MiCiAgICAgTElCUz0iJFNIQVJFRExJQi4kVkVSIgogICAgIGVjaG8gQnVpbGRpbmcgc2hhcmVkIGxpYnJhcnkgJFNIQVJFRExJQi4kVkVSIHdpdGggJENDLgotICBlbHNlCisgIGVsaWYgdGVzdCAteiAiJG9sZF9jYyIgLWEgLXogIiRvbGRfY2ZsYWdzIjsgdGhlbgogICAgIGVjaG8gTm8gc2hhcmVkIGxpYnJhcnkgc3VwcHBvcnQuCiAgICAgc2hhcmVkPTA7CisgIGVsc2UKKyAgICBlY2hvICdObyBzaGFyZWQgbGlicmFyeSBzdXBwcG9ydDsgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUycKKyAgICBzaGFyZWQ9MDsKICAgZmkKIGZpCiBpZiB0ZXN0ICRzaGFyZWQgLWVxIDA7IHRoZW4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYXNtMzg2L2d2bWF0MzIuYXNtIGIvY29udHJpYi9hc20zODYvZ3ZtYXQzMi5hc20KaW5kZXggMjkxOGE1ZC4uMjhkNTI3ZiAxMDA2NDQKLS0tIGEvY29udHJpYi9hc20zODYvZ3ZtYXQzMi5hc20KKysrIGIvY29udHJpYi9hc20zODYvZ3ZtYXQzMi5hc20KQEAgLTksNDAgKzksMzYgQEAKIDsgRm9yIFZpc3VhbCBDKysgNC4yIGFuZCBNTCA2LjExYyAodmVyc2lvbiBpbiBkaXJlY3RvcnkgXE1BU002MTFDIG9mIFdpbjk1IERESykKIDsgICBJIGNvbXBpbGUgd2l0aCA6ICJtbCAvY29mZiAvWmkgL2MgZ3ZtYXQzMi5hc20iCiA7Ci07IHVJbnQgbG9uZ2VzdF9tYXRjaF9ndmFzbShJUG9zIGN1cl9tYXRjaCxpbnQqIG1hdGNoX3N0YXJ0X3B0cix1SW50IHNjYW5fZW5kLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCBzY2FuX3N0YXJ0LHVzaCogcHJldix1Y2gqIHdpbmRvdyxpbnQgYmVzdF9sZW4sCi07ICAgICAgICAgICAgICAgICAgICAgICAgICBJUG9zIGxpbWl0LHVJbnQgY2hhaW5fbGVuZ3RoLHVjaCogc2NhbnJwLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCBuaWNlX21hdGNoKTsKIAotO3VJbnQgbG9uZ2VzdF9tYXRjaChzLCBjdXJfbWF0Y2gpCis7dUludCBsb25nZXN0X21hdGNoXzdmZmYocywgY3VyX21hdGNoKQogOyAgICBkZWZsYXRlX3N0YXRlICpzOwogOyAgICBJUG9zIGN1cl9tYXRjaDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgbWF0Y2ggKi8KIAotCU5iU3RhY2sJCWVxdQk3NgotCWN1cl9tYXRjaAllcXUJZHdvcmQgcHRyW2VzcCtOYlN0YWNrLTBdCi0Jc3RyX3MJCWVxdQlkd29yZCBwdHJbZXNwK05iU3RhY2stNF0KLQk7IDUgZHdvcmQgb24gdG9wIChyZXQsZWJwLGVzaSxlZGksZWJ4KQotCWFkcnJldAkJZXF1CWR3b3JkIHB0cltlc3ArTmJTdGFjay04XQotCXB1c2hlYnAJCWVxdQlkd29yZCBwdHJbZXNwK05iU3RhY2stMTJdCi0JcHVzaGVkaQkJZXF1CWR3b3JkIHB0cltlc3ArTmJTdGFjay0xNl0KLQlwdXNoZXNpCQllcXUJZHdvcmQgcHRyW2VzcCtOYlN0YWNrLTIwXQotCXB1c2hlYngJCWVxdQlkd29yZCBwdHJbZXNwK05iU3RhY2stMjRdCisgICAgICAgIE5iU3RhY2sgICAgICAgICBlcXUgICAgIDc2CisgICAgICAgIGN1cl9tYXRjaCAgICAgICBlcXUgICAgIGR3b3JkIHB0cltlc3ArTmJTdGFjay0wXQorICAgICAgICBzdHJfcyAgICAgICAgICAgZXF1ICAgICBkd29yZCBwdHJbZXNwK05iU3RhY2stNF0KKzsgNSBkd29yZCBvbiB0b3AgKHJldCxlYnAsZXNpLGVkaSxlYngpCisgICAgICAgIGFkcnJldCAgICAgICAgICBlcXUgICAgIGR3b3JkIHB0cltlc3ArTmJTdGFjay04XQorICAgICAgICBwdXNoZWJwICAgICAgICAgZXF1ICAgICBkd29yZCBwdHJbZXNwK05iU3RhY2stMTJdCisgICAgICAgIHB1c2hlZGkgICAgICAgICBlcXUgICAgIGR3b3JkIHB0cltlc3ArTmJTdGFjay0xNl0KKyAgICAgICAgcHVzaGVzaSAgICAgICAgIGVxdSAgICAgZHdvcmQgcHRyW2VzcCtOYlN0YWNrLTIwXQorICAgICAgICBwdXNoZWJ4ICAgICAgICAgZXF1ICAgICBkd29yZCBwdHJbZXNwK05iU3RhY2stMjRdCiAKLQljaGFpbl9sZW5ndGggICAgZXF1IGR3b3JkIHB0ciBbZXNwK05iU3RhY2stMjhdCi0JbGltaXQgICAgICAgICAgIGVxdSBkd29yZCBwdHIgW2VzcCtOYlN0YWNrLTMyXQotCWJlc3RfbGVuICAgICAgICBlcXUgZHdvcmQgcHRyIFtlc3ArTmJTdGFjay0zNl0KLQl3aW5kb3cgICAgICAgICAgZXF1IGR3b3JkIHB0ciBbZXNwK05iU3RhY2stNDBdCi0JcHJldiAgICAgICAgICAgIGVxdSBkd29yZCBwdHIgW2VzcCtOYlN0YWNrLTQ0XQotCXNjYW5fc3RhcnQgICAgICBlcXUgIHdvcmQgcHRyIFtlc3ArTmJTdGFjay00OF0KLQlzY2FuX2VuZCAgICAgICAgZXF1ICB3b3JkIHB0ciBbZXNwK05iU3RhY2stNTJdCi0JbWF0Y2hfc3RhcnRfcHRyIGVxdSBkd29yZCBwdHIgW2VzcCtOYlN0YWNrLTU2XQotCW5pY2VfbWF0Y2ggICAgICBlcXUgZHdvcmQgcHRyIFtlc3ArTmJTdGFjay02MF0KLQlzY2FucnAgICAgICAgICAgZXF1IGR3b3JkIHB0ciBbZXNwK05iU3RhY2stNjRdCisgICAgICAgIGNoYWluX2xlbmd0aCAgICBlcXUgICAgIGR3b3JkIHB0ciBbZXNwK05iU3RhY2stMjhdCisgICAgICAgIGxpbWl0ICAgICAgICAgICBlcXUgICAgIGR3b3JkIHB0ciBbZXNwK05iU3RhY2stMzJdCisgICAgICAgIGJlc3RfbGVuICAgICAgICBlcXUgICAgIGR3b3JkIHB0ciBbZXNwK05iU3RhY2stMzZdCisgICAgICAgIHdpbmRvdyAgICAgICAgICBlcXUgICAgIGR3b3JkIHB0ciBbZXNwK05iU3RhY2stNDBdCisgICAgICAgIHByZXYgICAgICAgICAgICBlcXUgICAgIGR3b3JkIHB0ciBbZXNwK05iU3RhY2stNDRdCisgICAgICAgIHNjYW5fc3RhcnQgICAgICBlcXUgICAgICB3b3JkIHB0ciBbZXNwK05iU3RhY2stNDhdCisgICAgICAgIHdtYXNrICAgICAgICAgICBlcXUgICAgIGR3b3JkIHB0ciBbZXNwK05iU3RhY2stNTJdCisgICAgICAgIG1hdGNoX3N0YXJ0X3B0ciBlcXUgICAgIGR3b3JkIHB0ciBbZXNwK05iU3RhY2stNTZdCisgICAgICAgIG5pY2VfbWF0Y2ggICAgICBlcXUgICAgIGR3b3JkIHB0ciBbZXNwK05iU3RhY2stNjBdCisgICAgICAgIHNjYW4gICAgICAgICAgICBlcXUgICAgIGR3b3JkIHB0ciBbZXNwK05iU3RhY2stNjRdCiAKLQl3aW5kb3dsZW4gICAgICAgZXF1IGR3b3JkIHB0ciBbZXNwK05iU3RhY2stNjhdCi0JbWF0Y2hfc3RhcnQgICAgIGVxdSBkd29yZCBwdHIgW2VzcCtOYlN0YWNrLTcyXQotCXN0cmVuZAkJCWVxdSBkd29yZCBwdHIgW2VzcCtOYlN0YWNrLTc2XQotCU5iU3RhY2tBZGQJCWVxdQkoNzYtMjQpCisgICAgICAgIHdpbmRvd2xlbiAgICAgICBlcXUgICAgIGR3b3JkIHB0ciBbZXNwK05iU3RhY2stNjhdCisgICAgICAgIG1hdGNoX3N0YXJ0ICAgICBlcXUgICAgIGR3b3JkIHB0ciBbZXNwK05iU3RhY2stNzJdCisgICAgICAgIHN0cmVuZCAgICAgICAgICBlcXUgICAgIGR3b3JkIHB0ciBbZXNwK05iU3RhY2stNzZdCisgICAgICAgIE5iU3RhY2tBZGQgICAgICBlcXUgICAgIChOYlN0YWNrLTI0KQogCiAgICAgLjM4NnAKIApAQCAtNTAsMTEgKzQ2LDExIEBACiAgICAgLk1PREVMICBGTEFUCiAKIAotQGxtdHlwZQkJCQlUWVBFREVGICAgICAgICAgUFJPVE8gQyA6UFRSICwgOlNEV09SRAotbG9uZ2VzdF9tYXRjaF9jCQlQUk9UTyAgICAgICAgICAgQGxtdHlwZQogCi0gICAgOyAgYWxsIHRoZSArNCBvZmZzZXRzIGFyZSBkdWUgdG8gdGhlIGFkZGl0aW9uIG9mIHBlbmRpbmdfYnVmX3NpemUKLSAgICA7ICBpbiB0aGUgZGVmbGF0ZV9zdGF0ZSBzdHJ1Y3R1cmUgc2luY2UgdGhlIGFzbSBjb2RlIHdhcyBmaXJzdCB3cml0dGVuCis7ICBhbGwgdGhlICs0IG9mZnNldHMgYXJlIGR1ZSB0byB0aGUgYWRkaXRpb24gb2YgcGVuZGluZ19idWZfc2l6ZSAoaW4gemxpYgorOyAgaW4gdGhlIGRlZmxhdGVfc3RhdGUgc3RydWN0dXJlIHNpbmNlIHRoZSBhc20gY29kZSB3YXMgZmlyc3Qgd3JpdHRlbgorOyAgKGlmIHlvdSBjb21waWxlIHdpdGggemxpYiAxLjAuNCBvciBvbGRlciwgcmVtb3ZlIHRoZSArNCkuCis7ICBOb3RlIDogdGhlc2UgdmFsdWUgYXJlIGdvb2Qgd2l0aCBhIDggYnl0ZXMgYm91bmRhcnkgcGFjayBzdHJ1Y3R1cmUKICAgICBkZXBfY2hhaW5fbGVuZ3RoICAgIGVxdSAgICAgNzBoKzQKICAgICBkZXBfd2luZG93ICAgICAgICAgIGVxdSAgICAgMmNoKzQKICAgICBkZXBfc3Ryc3RhcnQgICAgICAgIGVxdSAgICAgNjBoKzQKQEAgLTY4LDM5OCArNjQsNDk2IEBACiAgICAgZGVwX2xvb2thaGVhZCAgICAgICBlcXUgICAgIDY4aCs0CiAKIAotX1RFWFQgICBzZWdtZW50Ci0gICAgcHVibGljICBfbG9uZ2VzdF9tYXRjaF9hc203ZmZmCitfVEVYVCAgICAgICAgICAgICAgICAgICBzZWdtZW50CiAKLSAgICBNQVhfTUFUQ0gJCWVxdSAyNTgKLQlNSU5fTUFUQ0gJCWVxdSAzCi0JTUlOX0xPT0tBSEVBRCBlcXUgKE1BWF9NQVRDSCtNSU5fTUFUQ0grMSkKK0lGREVGIE5PVU5ERVJMSU5FCisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgIGxvbmdlc3RfbWF0Y2hfN2ZmZgorOyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyAgbWF0Y2hfaW5pdAorRUxTRQorICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljICBfbG9uZ2VzdF9tYXRjaF83ZmZmCis7ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljICBfbWF0Y2hfaW5pdAorRU5ESUYKKworICAgIE1BWF9NQVRDSCAgICAgICAgICAgZXF1ICAgICAyNTgKKyAgICBNSU5fTUFUQ0ggICAgICAgICAgIGVxdSAgICAgMworICAgIE1JTl9MT09LQUhFQUQgICAgICAgZXF1ICAgICAoTUFYX01BVENIK01JTl9NQVRDSCsxKQorCisKKworSUZERUYgTk9VTkRFUkxJTkUKKzttYXRjaF9pbml0ICAgICAgcHJvYyBuZWFyCis7ICAgICAgICAgICAgICAgIHJldAorO21hdGNoX2luaXQgICAgICBlbmRwCitFTFNFCis7X21hdGNoX2luaXQgICAgIHByb2MgbmVhcgorOyAgICAgICAgICAgICAgICByZXQKKztfbWF0Y2hfaW5pdCAgICAgZW5kcAorRU5ESUYKKworCitJRkRFRiBOT1VOREVSTElORQorbG9uZ2VzdF9tYXRjaF83ZmZmICAgcHJvYyBuZWFyCitFTFNFCitfbG9uZ2VzdF9tYXRjaF83ZmZmICBwcm9jIG5lYXIKK0VORElGCisKKyAgICAgICAgbW92ICAgICBlZHgsW2VzcCs0XQorCisKKworICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBwdXNoICAgIGVkaQorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVieAorCisgICAgICAgIHN1YiAgICAgZXNwLE5iU3RhY2tBZGQKIAogOyBpbml0aWFsaXplIG9yIGNoZWNrIHRoZSB2YXJpYWJsZXMgdXNlZCBpbiBtYXRjaC5hc20uCisgICAgICAgIG1vdiAgICAgZWJwLGVkeAogCi0KLTsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTsgU2V0IG1hdGNoX3N0YXJ0IHRvIHRoZSBsb25nZXN0IG1hdGNoIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBzdHJpbmcgYW5kCi07IHJldHVybiBpdHMgbGVuZ3RoLiBNYXRjaGVzIHNob3J0ZXIgb3IgZXF1YWwgdG8gcHJldl9sZW5ndGggYXJlIGRpc2NhcmRlZCwKLTsgaW4gd2hpY2ggY2FzZSB0aGUgcmVzdWx0IGlzIGVxdWFsIHRvIHByZXZfbGVuZ3RoIGFuZCBtYXRjaF9zdGFydCBpcwotOyBnYXJiYWdlLgotOyBJTiBhc3NlcnRpb25zOiBjdXJfbWF0Y2ggaXMgdGhlIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW4gZm9yIHRoZSBjdXJyZW50Ci07ICAgc3RyaW5nIChzdHJzdGFydCkgYW5kIGl0cyBkaXN0YW5jZSBpcyA8PSBNQVhfRElTVCwgYW5kIHByZXZfbGVuZ3RoID49IDEKLQotOyBpbnQgbG9uZ2VzdF9tYXRjaChjdXJfbWF0Y2gpCi0KLV9sb25nZXN0X21hdGNoX2FzbTdmZmYgcHJvYyBuZWFyCi0KLQotCi0JICAgIDsgcmV0dXJuIGFkZHJlc3MKLQotCQltb3YJCWVheCxbZXNwKzRdCi0JCW1vdgkJYngsW2VheCtkZXBfd19tYXNrXQotCQljbXAJCWJ4LDdmZmZoCi0JCWpuegkJbG9uZ2VzdF9tYXRjaF9jCi0KLQkgICAgcHVzaCAgICBlYnAgICAgICAgICAgICAgCi0JICAgIHB1c2ggICAgZWRpICAgICAgICAgICAgIAotCSAgICBwdXNoICAgIGVzaSAgICAgICAgICAgICAKLQkgICAgcHVzaCAgICBlYnggICAgICAgICAgICAgCi0KLQkgICAgc3ViICAgICBlc3AsTmJTdGFja0FkZAotCi0JCTsvL21vdgkJZWJwLHN0cl9zCi0JCW1vdgkJZWJwLGVheAotCi0JCW1vdgkJZWF4LFtlYnArZGVwX21heF9jaGFpbl9sZW5ndGhdCi0JCW1vdgkJZWJ4LFtlYnArZGVwX3ByZXZfbGVuZ3RoXQotCQljbXAJCVtlYnArZGVwX2dvb2RfbWF0Y2hdLGVieAk7IGlmIHByZXZfbGVuZ3RoPj1nb29kX21hdGNoIGNoYWluX2xlbmd0aCA+Pj0gMgotCQlqYQkJbm9zaHIJCQotCQlzaHIJCWVheCwyCis7IGNoYWluX2xlbmd0aCA9IHMtPm1heF9jaGFpbl9sZW5ndGgKKzsgaWYgKHByZXZfbGVuZ3RoPj1nb29kX21hdGNoKSBjaGFpbl9sZW5ndGggPj49IDIKKyAgICAgICAgbW92ICAgICBlZHgsW2VicCtkZXBfY2hhaW5fbGVuZ3RoXQorICAgICAgICBtb3YgICAgIGVieCxbZWJwK2RlcF9wcmV2X2xlbmd0aF0KKyAgICAgICAgY21wICAgICBbZWJwK2RlcF9nb29kX21hdGNoXSxlYngKKyAgICAgICAgamEgICAgICBub3NocgorICAgICAgICBzaHIgICAgIGVkeCwyCiBub3NocjoKLQkJbW92CQllZGksW2VicCtkZXBfbmljZV9tYXRjaF0KLQkJbW92CQljaGFpbl9sZW5ndGgsZWF4Ci0JCW1vdgkJZWR4LFtlYnArZGVwX2xvb2thaGVhZF0KLQkJY21wCQllZHgsZWRpCi07aWYgKCh1SW50KW5pY2VfbWF0Y2ggPiBzLT5sb29rYWhlYWQpIG5pY2VfbWF0Y2ggPSBzLT5sb29rYWhlYWQ7Ci0JCWphZQkJbm9sb29rYWhlYWRuaWNlbWF0Y2gKLQkJbW92CQllZGksZWR4Cis7IHdlIGluY3JlbWVudCBjaGFpbl9sZW5ndGggYmVjYXVzZSBpbiB0aGUgYXNtLCB0aGUgLS1jaGFpbl9sZW5naHQgaXMgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcAorICAgICAgICBpbmMgICAgIGVkeAorICAgICAgICBtb3YgICAgIGVkaSxbZWJwK2RlcF9uaWNlX21hdGNoXQorICAgICAgICBtb3YgICAgIGNoYWluX2xlbmd0aCxlZHgKKyAgICAgICAgbW92ICAgICBlYXgsW2VicCtkZXBfbG9va2FoZWFkXQorICAgICAgICBjbXAgICAgIGVheCxlZGkKKzsgaWYgKCh1SW50KW5pY2VfbWF0Y2ggPiBzLT5sb29rYWhlYWQpIG5pY2VfbWF0Y2ggPSBzLT5sb29rYWhlYWQ7CisgICAgICAgIGphZSAgICAgbm9sb29rYWhlYWRuaWNlbWF0Y2gKKyAgICAgICAgbW92ICAgICBlZGksZWF4CiBub2xvb2thaGVhZG5pY2VtYXRjaDoKLQkJbW92CQliZXN0X2xlbixlYngKKzsgYmVzdF9sZW4gPSBzLT5wcmV2X2xlbmd0aAorICAgICAgICBtb3YgICAgIGJlc3RfbGVuLGVieAogCis7IHdpbmRvdyA9IHMtPndpbmRvdworICAgICAgICBtb3YgICAgIGVzaSxbZWJwK2RlcF93aW5kb3ddCisgICAgICAgIG1vdiAgICAgZWN4LFtlYnArZGVwX3N0cnN0YXJ0XQorICAgICAgICBtb3YgICAgIHdpbmRvdyxlc2kKIAotCQltb3YJCWVzaSxbZWJwK2RlcF93aW5kb3ddCi0JCW1vdgkJZWN4LFtlYnArZGVwX3N0cnN0YXJ0XQotCQltb3YJCXdpbmRvdyxlc2kKLQkJCi0JCW1vdgkJbmljZV9tYXRjaCxlZGkKLQkJYWRkCQllc2ksZWN4Ci0JCW1vdgkJc2NhbnJwLGVzaQotCQltb3YJCWF4LHdvcmQgcHRyIFtlc2ldCi0JCW1vdgkJYngsd29yZCBwdHIgW2VzaStlYngtMV0KLQkJYWRkCQllc2ksTUFYX01BVENILTEKLQkJbW92CQlzY2FuX3N0YXJ0LGF4Ci0JCW1vdgkJc3RyZW5kLGVzaQotCQltb3YJCXNjYW5fZW5kLGJ4CisgICAgICAgIG1vdiAgICAgbmljZV9tYXRjaCxlZGkKKzsgc2NhbiA9IHdpbmRvdyArIHN0cnN0YXJ0CisgICAgICAgIGFkZCAgICAgZXNpLGVjeAorICAgICAgICBtb3YgICAgIHNjYW4sZXNpCis7IGR4ID0gKndpbmRvdworICAgICAgICBtb3YgICAgIGR4LHdvcmQgcHRyIFtlc2ldCis7IGJ4ID0gKih3aW5kb3crYmVzdF9sZW4tMSkKKyAgICAgICAgbW92ICAgICBieCx3b3JkIHB0ciBbZXNpK2VieC0xXQorICAgICAgICBhZGQgICAgIGVzaSxNQVhfTUFUQ0gtMQorOyBzY2FuX3N0YXJ0ID0gKnNjYW4KKyAgICAgICAgbW92ICAgICBzY2FuX3N0YXJ0LGR4Cis7IHN0cmVuZCA9IHNjYW4gKyBNQVhfTUFUQ0gtMQorICAgICAgICBtb3YgICAgIHN0cmVuZCxlc2kKKzsgYnggPSBzY2FuX2VuZCA9ICood2luZG93K2Jlc3RfbGVuLTEpCiAKIDsgICAgSVBvcyBsaW1pdCA9IHMtPnN0cnN0YXJ0ID4gKElQb3MpTUFYX0RJU1QocykgPwogOyAgICAgICAgcy0+c3Ryc3RhcnQgLSAoSVBvcylNQVhfRElTVChzKSA6IE5JTDsKIAotCQltb3YJCWVzaSxbZWJwK2RlcF93X3NpemVdCi0JCXN1YgkJZXNpLE1JTl9MT09LQUhFQUQKLQkJOyBoZXJlIGVzaSA9IE1BWF9ESVNUKHMpCi0JCXN1YgkJZWN4LGVzaQotCQlqYQkJbm9kaXN0Ci0JCXhvcgkJZWN4LGVjeAorICAgICAgICBtb3YgICAgIGVzaSxbZWJwK2RlcF93X3NpemVdCisgICAgICAgIHN1YiAgICAgZXNpLE1JTl9MT09LQUhFQUQKKzsgaGVyZSBlc2kgPSBNQVhfRElTVChzKQorICAgICAgICBzdWIgICAgIGVjeCxlc2kKKyAgICAgICAgamEgICAgICBub2Rpc3QKKyAgICAgICAgeG9yICAgICBlY3gsZWN4CiBub2Rpc3Q6Ci0JCW1vdgkJbGltaXQsZWN4CisgICAgICAgIG1vdiAgICAgbGltaXQsZWN4CiAKKzsgcHJldiA9IHMtPnByZXYKKyAgICAgICAgbW92ICAgICBlZHgsW2VicCtkZXBfcHJldl0KKyAgICAgICAgbW92ICAgICBwcmV2LGVkeAogCis7CisgICAgICAgIG1vdiAgICAgZWR4LGR3b3JkIHB0ciBbZWJwK2RlcF9tYXRjaF9zdGFydF0KKyAgICAgICAgbW92ICAgICBicCxzY2FuX3N0YXJ0CisgICAgICAgIG1vdiAgICAgZWF4LGN1cl9tYXRjaAorICAgICAgICBtb3YgICAgIG1hdGNoX3N0YXJ0LGVkeAogCisgICAgICAgIG1vdiAgICAgZWR4LHdpbmRvdworICAgICAgICBtb3YgICAgIGVkaSxlZHgKKyAgICAgICAgYWRkICAgICBlZGksYmVzdF9sZW4KKyAgICAgICAgbW92ICAgICBlc2kscHJldgorICAgICAgICBkZWMgICAgIGVkaQorOyB3aW5kb3dsZW4gPSB3aW5kb3cgKyBiZXN0X2xlbiAtMQorICAgICAgICBtb3YgICAgIHdpbmRvd2xlbixlZGkKIAotCQltb3YJCWVheCxbZWJwK2RlcF9wcmV2XQotCQltb3YJCXByZXYsZWF4Ci0KLQkgICAgbW92ICAgICBlYngsZHdvcmQgcHRyIFtlYnArZGVwX21hdGNoX3N0YXJ0XQotCSAgICBtb3YgICAgIGJwLHNjYW5fc3RhcnQKLQkgICAgbW92ICAgICBlZHgsY3VyX21hdGNoCi0JICAgIG1vdiAgICAgbWF0Y2hfc3RhcnQsZWJ4Ci0KLQkgICAgbW92ICAgICBieCxzY2FuX2VuZAotCSAgICBtb3YgICAgIGVheCx3aW5kb3cKLQkJbW92CQllZGksZWF4Ci0JICAgIGFkZCAgICAgZWRpLGJlc3RfbGVuCi0JICAgIG1vdiAgICAgZXNpLHByZXYKLQkJZGVjICAgICBlZGkKLQkgICAgbW92ICAgICB3aW5kb3dsZW4sZWRpCi0JICAgIAotCSAgICBqbXAgICAgIGJlZ2lubG9vcDIKLQkgICAgYWxpZ24gICA0CisgICAgICAgIGptcCAgICAgYmVnaW5sb29wMgorICAgICAgICBhbGlnbiAgIDQKIAogOyBoZXJlLCBpbiB0aGUgbG9vcAotOzs7OyAgICAgICBlYXggPSBjaGFpbl9sZW5ndGgKLTsgICAgICAgZWR4ID0gZHggPSBjdXJfbWF0Y2gKKzsgICAgICAgZWF4ID0gYXggPSBjdXJfbWF0Y2gKIDsgICAgICAgZWN4ID0gbGltaXQKIDsgICAgICAgIGJ4ID0gc2Nhbl9lbmQKIDsgICAgICAgIGJwID0gc2Nhbl9zdGFydAotOyAgICAgICBlZGkgPSB3aW5kb3dsZW4gKHdpbmRvdyArIGJlc3RfbGVuKQorOyAgICAgICBlZGkgPSB3aW5kb3dsZW4gKHdpbmRvdyArIGJlc3RfbGVuIC0xKQogOyAgICAgICBlc2kgPSBwcmV2CiAKIAotOy8vIGhlcmU7IGVheCA8PTE2Ci1ub3JtYWxiZWcwYWRkMTY6IAotCQlhZGQJCWNoYWluX2xlbmd0aCwxNgotCQlqegkJZXhpdGxvb3AKLW5vcm1hbGJlZzA6IAotCSAgICBjbXAgICAgIHdvcmQgcHRyW2VkaStlZHgtMF0sYngKLQkgICAgamUgICAgICBub3JtYWxiZWcyCi0JICAgIGFuZCAgICAgZWR4LDdmZmZoCi0JICAgIG1vdiAgICAgZHgsd29yZCBwdHJbZXNpK2VkeCoyXQotCSAgICBjbXAgICAgIGVjeCxlZHgKLQkgICAgam5iICAgICBleGl0bG9vcAotCSAgICBkZWMgICAgIGNoYWluX2xlbmd0aAotCQlqbnoJCW5vcm1hbGJlZzAKLTtqbmJleGl0bG9vcHNob3J0MToKLQkJam1wICAgICBleGl0bG9vcAorOy8vIGhlcmU7IGNoYWluX2xlbmd0aCA8PTE2Citub3JtYWxiZWcwYWRkMTY6CisgICAgICAgIGFkZCAgICAgY2hhaW5fbGVuZ3RoLDE2CisgICAgICAgIGp6ICAgICAgZXhpdGxvb3AKK25vcm1hbGJlZzA6CisgICAgICAgIGNtcCAgICAgd29yZCBwdHJbZWRpK2VheF0sYngKKyAgICAgICAgamUgICAgICBub3JtYWxiZWcybm9yb2xsCityY29udGxhYm5vcm9sbDoKKzsgY3VyX21hdGNoID0gcHJldltjdXJfbWF0Y2ggJiB3bWFza10KKyAgICAgICAgYW5kICAgICBlYXgsN2ZmZmgKKyAgICAgICAgbW92ICAgICBheCx3b3JkIHB0cltlc2krZWF4KjJdCis7IGlmIGN1cl9tYXRjaCA+IGxpbWl0LCBnbyB0byBleGl0bG9vcAorICAgICAgICBjbXAgICAgIGVjeCxlYXgKKyAgICAgICAgam5iICAgICBleGl0bG9vcAorOyBpZiAtLWNoYWluX2xlbmd0aCAhPSAwLCBnbyB0byBleGl0bG9vcAorICAgICAgICBkZWMgICAgIGNoYWluX2xlbmd0aAorICAgICAgICBqbnogICAgIG5vcm1hbGJlZzAKKyAgICAgICAgam1wICAgICBleGl0bG9vcAorCitub3JtYWxiZWcybm9yb2xsOgorOyBpZiAoc2Nhbl9zdGFydD09KihjdXJfbWF0Y2grd2luZG93KSkgZ290byBub3JtYWxiZWcyCisgICAgICAgIGNtcCAgICAgYnAsd29yZCBwdHJbZWR4K2VheF0KKyAgICAgICAgam5lICAgICByY29udGxhYm5vcm9sbAorICAgICAgICBqbXAgICAgIG5vcm1hbGJlZzIKIAogY29udGxvb3AzOgotCSAgICBtb3YgICAgIGVkaSx3aW5kb3dsZW4KKyAgICAgICAgbW92ICAgICBlZGksd2luZG93bGVuCiAKIDsgY3VyX21hdGNoID0gcHJldltjdXJfbWF0Y2ggJiB3bWFza10KLQkgICAgYW5kCQllZHgsN2ZmZmgKLQkgICAgbW92ICAgICBkeCx3b3JkIHB0cltlc2krZWR4KjJdCisgICAgICAgIGFuZCAgICAgZWF4LDdmZmZoCisgICAgICAgIG1vdiAgICAgYXgsd29yZCBwdHJbZXNpK2VheCoyXQogOyBpZiBjdXJfbWF0Y2ggPiBsaW1pdCwgZ28gdG8gZXhpdGxvb3AKLQkgICAgY21wICAgICBlY3gsZWR4CisgICAgICAgIGNtcCAgICAgZWN4LGVheAogam5iZXhpdGxvb3BzaG9ydDE6Ci0JICAgIGpuYiAgICAgZXhpdGxvb3AKKyAgICAgICAgam5iICAgICBleGl0bG9vcAogOyBpZiAtLWNoYWluX2xlbmd0aCAhPSAwLCBnbyB0byBleGl0bG9vcAogCisKKzsgYmVnaW4gdGhlIG1haW4gbG9vcAogYmVnaW5sb29wMjoKLQkJc3ViCQljaGFpbl9sZW5ndGgsMTYrMQotCQlqbmEgICAgIG5vcm1hbGJlZzBhZGQxNgorICAgICAgICBzdWIgICAgIGNoYWluX2xlbmd0aCwxNisxCis7IGlmIGNoYWluX2xlbmd0aCA8PTE2LCBkb24ndCB1c2UgdGhlIHVucm9sbGVkIGxvb3AKKyAgICAgICAgam5hICAgICBub3JtYWxiZWcwYWRkMTYKIAogZG8xNjoKLQkgICAgY21wICAgICB3b3JkIHB0cltlZGkrZWR4XSxieAotCSAgICBqZSAgICAgIG5vcm1hbGJlZzJkYzAKKyAgICAgICAgY21wICAgICB3b3JkIHB0cltlZGkrZWF4XSxieAorICAgICAgICBqZSAgICAgIG5vcm1hbGJlZzJkYzAKIAotbWFjY24JTUFDUk8JbGFiCi0JICAgIGFuZCAgICAgZWR4LDdmZmZoCi0JICAgIG1vdiAgICAgZHgsd29yZCBwdHJbZXNpK2VkeCoyXQotCSAgICBjbXAgICAgIGVjeCxlZHgKLQkgICAgam5iICAgICBleGl0bG9vcAotCSAgICBjbXAgICAgIHdvcmQgcHRyW2VkaStlZHgtMF0sYngKLQkgICAgamUgICAgICBsYWIKLQkJRU5ETQorbWFjY24gICBNQUNSTyAgIGxhYgorICAgICAgICBhbmQgICAgIGVheCw3ZmZmaAorICAgICAgICBtb3YgICAgIGF4LHdvcmQgcHRyW2VzaStlYXgqMl0KKyAgICAgICAgY21wICAgICBlY3gsZWF4CisgICAgICAgIGpuYiAgICAgZXhpdGxvb3AKKyAgICAgICAgY21wICAgICB3b3JkIHB0cltlZGkrZWF4XSxieAorICAgICAgICBqZSAgICAgIGxhYgorICAgICAgICBFTkRNCiAKIHJjb250bG9vcDA6Ci0JCW1hY2NuIG5vcm1hbGJlZzJkYzEKKyAgICAgICAgbWFjY24gICBub3JtYWxiZWcyZGMxCiAKIHJjb250bG9vcDE6Ci0JCW1hY2NuIG5vcm1hbGJlZzJkYzIKKyAgICAgICAgbWFjY24gICBub3JtYWxiZWcyZGMyCiAKIHJjb250bG9vcDI6Ci0JCW1hY2NuIG5vcm1hbGJlZzJkYzMKKyAgICAgICAgbWFjY24gICBub3JtYWxiZWcyZGMzCiAKIHJjb250bG9vcDM6Ci0JCW1hY2NuIG5vcm1hbGJlZzJkYzQKKyAgICAgICAgbWFjY24gICBub3JtYWxiZWcyZGM0CiAKIHJjb250bG9vcDQ6Ci0JCW1hY2NuIG5vcm1hbGJlZzJkYzUKKyAgICAgICAgbWFjY24gICBub3JtYWxiZWcyZGM1CiAKIHJjb250bG9vcDU6Ci0JCW1hY2NuIG5vcm1hbGJlZzJkYzYKKyAgICAgICAgbWFjY24gICBub3JtYWxiZWcyZGM2CiAKIHJjb250bG9vcDY6Ci0JCW1hY2NuIG5vcm1hbGJlZzJkYzcKKyAgICAgICAgbWFjY24gICBub3JtYWxiZWcyZGM3CiAKIHJjb250bG9vcDc6Ci0JCW1hY2NuIG5vcm1hbGJlZzJkYzgKKyAgICAgICAgbWFjY24gICBub3JtYWxiZWcyZGM4CiAKIHJjb250bG9vcDg6Ci0JCW1hY2NuIG5vcm1hbGJlZzJkYzkKKyAgICAgICAgbWFjY24gICBub3JtYWxiZWcyZGM5CiAKIHJjb250bG9vcDk6Ci0JCW1hY2NuIG5vcm1hbGJlZzJkYzEwCisgICAgICAgIG1hY2NuICAgbm9ybWFsYmVnMmRjMTAKIAogcmNvbnRsb29wMTA6Ci0JCW1hY2NuIG5vcm1hbGJlZzJkYzExCisgICAgICAgIG1hY2NuICAgc2hvcnQgbm9ybWFsYmVnMmRjMTEKIAogcmNvbnRsb29wMTE6Ci0JCW1hY2NuIHNob3J0IG5vcm1hbGJlZzJkYzEyCisgICAgICAgIG1hY2NuICAgc2hvcnQgbm9ybWFsYmVnMmRjMTIKIAogcmNvbnRsb29wMTI6Ci0JCW1hY2NuIHNob3J0IG5vcm1hbGJlZzJkYzEzCisgICAgICAgIG1hY2NuICAgc2hvcnQgbm9ybWFsYmVnMmRjMTMKIAogcmNvbnRsb29wMTM6Ci0JCW1hY2NuIHNob3J0IG5vcm1hbGJlZzJkYzE0CisgICAgICAgIG1hY2NuICAgc2hvcnQgbm9ybWFsYmVnMmRjMTQKIAogcmNvbnRsb29wMTQ6Ci0JCW1hY2NuIHNob3J0IG5vcm1hbGJlZzJkYzE1CisgICAgICAgIG1hY2NuICAgc2hvcnQgbm9ybWFsYmVnMmRjMTUKIAogcmNvbnRsb29wMTU6Ci0JICAgIGFuZCAgICAgZWR4LDdmZmZoCi0JICAgIG1vdiAgICAgZHgsd29yZCBwdHJbZXNpK2VkeCoyXQotCSAgICBjbXAgICAgIGVjeCxlZHgKLQkgICAgam5iICAgICBzaG9ydCBleGl0bG9vcHNob3J0CisgICAgICAgIGFuZCAgICAgZWF4LDdmZmZoCisgICAgICAgIG1vdiAgICAgYXgsd29yZCBwdHJbZXNpK2VheCoyXQorICAgICAgICBjbXAgICAgIGVjeCxlYXgKKyAgICAgICAgam5iICAgICBleGl0bG9vcAogCi0JCXN1YgkJY2hhaW5fbGVuZ3RoLDE2Ci0JCWphCQlkbzE2Ci0JCWptcAkJbm9ybWFsYmVnMGFkZDE2CisgICAgICAgIHN1YiAgICAgY2hhaW5fbGVuZ3RoLDE2CisgICAgICAgIGphICAgICAgZG8xNgorICAgICAgICBqbXAgICAgIG5vcm1hbGJlZzBhZGQxNgogCiA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwogCi1leGl0bG9vcHNob3J0OgotCQlqbXAJCWV4aXRsb29wICAgICAgICAgICAgICAgICAgCitub3JtYmVnIE1BQ1JPICAgcmNvbnRsYWIsdmFsc3ViCis7IGlmIHdlIGFyZSBoZXJlLCB3ZSBrbm93IHRoYXQgKihtYXRjaCtiZXN0X2xlbi0xKSA9PSBzY2FuX2VuZAorICAgICAgICBjbXAgICAgIGJwLHdvcmQgcHRyW2VkeCtlYXhdCis7IGlmIChtYXRjaCAhPSBzY2FuX3N0YXJ0KSBnb3RvIHJjb250bGFiCisgICAgICAgIGpuZSAgICAgcmNvbnRsYWIKKzsgY2FsY3VsYXRlIHRoZSBnb29kIGNoYWluX2xlbmd0aCwgYW5kIHdlJ2xsIGNvbXBhcmUgc2NhbiBhbmQgbWF0Y2ggc3RyaW5nCisgICAgICAgIGFkZCAgICAgY2hhaW5fbGVuZ3RoLDE2LXZhbHN1YgorICAgICAgICBqbXAgICAgIGlzZXEKKyAgICAgICAgRU5ETQogCi1ub3JtYmVnCU1BQ1JPCXJjb250bGFiLHZhbHN1YgotCSAgICBjbXAgICAgIGJwLHdvcmQgcHRyW2VheCtlZHhdCi0JCWpuZQkJcmNvbnRsYWIKLQkJYWRkICAgICBjaGFpbl9sZW5ndGgsMTYtdmFsc3ViCi0JCWptcAkJaXNlcQotCQlFTkRNCi0KLW5vcm1hbGJlZzJkYzEyOgotCQlub3JtYmVnCXJjb250bG9vcDEyLDEyCi0KLW5vcm1hbGJlZzJkYzEzOgotCQlub3JtYmVnCXJjb250bG9vcDEzLDEzCi0KLW5vcm1hbGJlZzJkYzE0OgotCQlub3JtYmVnCXJjb250bG9vcDE0LDE0Ci0KLW5vcm1hbGJlZzJkYzE1OgotCQlub3JtYmVnCXJjb250bG9vcDE1LDE1CiAKIG5vcm1hbGJlZzJkYzExOgotCQlub3JtYmVnCXJjb250bG9vcDExLDExCisgICAgICAgIG5vcm1iZWcgcmNvbnRsb29wMTEsMTEKKworbm9ybWFsYmVnMmRjMTI6CisgICAgICAgIG5vcm1iZWcgc2hvcnQgcmNvbnRsb29wMTIsMTIKKworbm9ybWFsYmVnMmRjMTM6CisgICAgICAgIG5vcm1iZWcgc2hvcnQgcmNvbnRsb29wMTMsMTMKKworbm9ybWFsYmVnMmRjMTQ6CisgICAgICAgIG5vcm1iZWcgc2hvcnQgcmNvbnRsb29wMTQsMTQKKworbm9ybWFsYmVnMmRjMTU6CisgICAgICAgIG5vcm1iZWcgc2hvcnQgcmNvbnRsb29wMTUsMTUKIAogbm9ybWFsYmVnMmRjMTA6Ci0JCW5vcm1iZWcJcmNvbnRsb29wMTAsMTAKLQorICAgICAgICBub3JtYmVnIHJjb250bG9vcDEwLDEwCiAKIG5vcm1hbGJlZzJkYzk6Ci0JCW5vcm1iZWcJcmNvbnRsb29wOSw5CisgICAgICAgIG5vcm1iZWcgcmNvbnRsb29wOSw5CiAKIG5vcm1hbGJlZzJkYzg6Ci0JCW5vcm1iZWcJcmNvbnRsb29wOCw4CisgICAgICAgIG5vcm1iZWcgcmNvbnRsb29wOCw4CiAKIG5vcm1hbGJlZzJkYzc6Ci0JCW5vcm1iZWcJcmNvbnRsb29wNyw3Ci0KLW5vcm1hbGJlZzJkYzU6Ci0JCW5vcm1iZWcJcmNvbnRsb29wNSw1Ci0KLQotCi0KKyAgICAgICAgbm9ybWJlZyByY29udGxvb3A3LDcKIAogbm9ybWFsYmVnMmRjNjoKLQkJbm9ybWJlZwlyY29udGxvb3A2LDYKKyAgICAgICAgbm9ybWJlZyByY29udGxvb3A2LDYKKworbm9ybWFsYmVnMmRjNToKKyAgICAgICAgbm9ybWJlZyByY29udGxvb3A1LDUKIAogbm9ybWFsYmVnMmRjNDoKLQkJbm9ybWJlZwlyY29udGxvb3A0LDQKKyAgICAgICAgbm9ybWJlZyByY29udGxvb3A0LDQKIAogbm9ybWFsYmVnMmRjMzoKLQkJbm9ybWJlZwlyY29udGxvb3AzLDMKKyAgICAgICAgbm9ybWJlZyByY29udGxvb3AzLDMKIAogbm9ybWFsYmVnMmRjMjoKLQkJbm9ybWJlZwlyY29udGxvb3AyLDIKKyAgICAgICAgbm9ybWJlZyByY29udGxvb3AyLDIKIAogbm9ybWFsYmVnMmRjMToKLQkJbm9ybWJlZwlyY29udGxvb3AxLDEKKyAgICAgICAgbm9ybWJlZyByY29udGxvb3AxLDEKIAogbm9ybWFsYmVnMmRjMDoKLQkJbm9ybWJlZwlyY29udGxvb3AwLDAKKyAgICAgICAgbm9ybWJlZyByY29udGxvb3AwLDAKIAogCiA7IHdlIGdvIGluIG5vcm1hbGJlZzIgYmVjYXVzZSAqKHVzaGYqKShtYXRjaCtiZXN0X2xlbi0xKSA9PSBzY2FuX2VuZAogCiBub3JtYWxiZWcyOgorICAgICAgICBtb3YgICAgIGVkaSx3aW5kb3cKIAotCQkJIDsgMTAgbm9wIGhlcmUgdGFrZSAxMCUgdGltZQotCQltb3YJCWVkaSx3aW5kb3cKLQkJICA7bW92ICAgICBjaGFpbl9sZW5ndGgsZWF4ICAgIDsgbm93LCB3ZSBuZWVkIGVheC4uLgotCQkJCQkKLQkgICAgY21wICAgICBicCx3b3JkIHB0cltlZGkrZWR4XQotCSAgICBqbmUgICAgIGNvbnRsb29wMyAgICAgICAgICAgICAgICAgICA7IGlmICoodXNoZiopbWF0Y2ggIT0gc2Nhbl9zdGFydCwgY29udGludWUKKyAgICAgICAgY21wICAgICBicCx3b3JkIHB0cltlZGkrZWF4XQorICAgICAgICBqbmUgICAgIGNvbnRsb29wMyAgICAgICAgICAgICAgICAgICA7IGlmICoodXNoZiopbWF0Y2ggIT0gc2Nhbl9zdGFydCwgY29udGludWUKIAogaXNlcToKKzsgaWYgd2UgYXJlIGhlcmUsIHdlIGtub3cgdGhhdCAqKG1hdGNoK2Jlc3RfbGVuLTEpID09IHNjYW5fZW5kCis7IGFuZCAobWF0Y2ggPT0gc2Nhbl9zdGFydCkKIAotCQltb3YJCWVkaSxlYXgKLQkgICAgbW92ICAgICBlc2ksc2NhbnJwICAgICAgICAgICAgICAgICAgOyBlc2kgPSBzY2FuICAgIAotCSAgICBhZGQgICAgIGVkaSxlZHgJCQkJOyBlZGkgPSB3aW5kb3cgKyBjdXJfbWF0Y2ggPSBtYXRjaAorICAgICAgICBtb3YgICAgIGVkaSxlZHgKKyAgICAgICAgbW92ICAgICBlc2ksc2NhbiAgICAgICAgICAgICAgICAgICAgOyBlc2kgPSBzY2FuCisgICAgICAgIGFkZCAgICAgZWRpLGVheCAgICAgICAgICAgICAgICAgICAgIDsgZWRpID0gd2luZG93ICsgY3VyX21hdGNoID0gbWF0Y2gKIAotCQkgICAgICAgCi0JICAgIG1vdiAgICAgZWF4LFtlc2krM10JCQkJCTsgY29tcGFyZSBtYW51YWxseSBkd29yZCBhdCBtYXRjaCszCi0JICAgIHhvciAgICAgZWF4LFtlZGkrM10gICAgICAgICAgICAgICAgIDsgICAgICAgYW5kIHNjYW4gKzMKKyAgICAgICAgbW92ICAgICBlZHgsW2VzaSszXSAgICAgICAgICAgICAgICAgOyBjb21wYXJlIG1hbnVhbGx5IGR3b3JkIGF0IG1hdGNoKzMKKyAgICAgICAgeG9yICAgICBlZHgsW2VkaSszXSAgICAgICAgICAgICAgICAgOyBhbmQgc2NhbiArMwogCi0JICAgIGp6ICAgICAgYmVnaW5jb21wYXJlICAgICAgICAgICAgICAgIDsgaWYgZXF1YWwsIGdvIHRvIGxvbmcgY29tcGFyZQorICAgICAgICBqeiAgICAgIGJlZ2luY29tcGFyZSAgICAgICAgICAgICAgICA7IGlmIGVxdWFsLCBnbyB0byBsb25nIGNvbXBhcmUKIAotCQkJOyB3ZSB3aWxsIGRldGVybWluZSB0aGUgdW5tYXRjaCBieXRlIGFuZCBjYWxjdWxhdGUgbGVuIChpbiBlc2kpCi0JCW9yCQlhbCxhbAotCQlqZQkJZXExcnIKLQkgICAgbW92ICAgICBlc2ksMwotCSAgICBqbXAgICAgIHRyZmludmFsCis7IHdlIHdpbGwgZGV0ZXJtaW5lIHRoZSB1bm1hdGNoIGJ5dGUgYW5kIGNhbGN1bGF0ZSBsZW4gKGluIGVzaSkKKyAgICAgICAgb3IgICAgICBkbCxkbAorICAgICAgICBqZSAgICAgIGVxMXJyCisgICAgICAgIG1vdiAgICAgZXNpLDMKKyAgICAgICAgam1wICAgICB0cmZpbnZhbAogZXExcnI6Ci0JICAgIG9yICAgICAgYXgsYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JICAgIGplICAgICAgZXExCisgICAgICAgIG9yICAgICAgZHgsZHgKKyAgICAgICAgamUgICAgICBlcTEKIAotCSAgICBtb3YgICAgIGVzaSw0Ci0JICAgIGptcCAgICAgdHJmaW52YWwKKyAgICAgICAgbW92ICAgICBlc2ksNAorICAgICAgICBqbXAgICAgIHRyZmludmFsCiBlcTE6Ci0JICAgIHNobCAgICAgZWF4LDgKLQkgICAganogICAgICBlcTExCi0JICAgIG1vdiAgICAgZXNpLDUKLQkgICAgam1wICAgICB0cmZpbnZhbAorICAgICAgICBhbmQgICAgIGVkeCwwZmZmZmZmaAorICAgICAgICBqeiAgICAgIGVxMTEKKyAgICAgICAgbW92ICAgICBlc2ksNQorICAgICAgICBqbXAgICAgIHRyZmludmFsCiBlcTExOgotCSAgICBtb3YgICAgIGVzaSw2Ci0JICAgIGptcCAgICAgdHJmaW52YWwKKyAgICAgICAgbW92ICAgICBlc2ksNgorICAgICAgICBqbXAgICAgIHRyZmludmFsCiAKIGJlZ2luY29tcGFyZToKLQkJOyBoZXJlIHdlIG5vdyBzY2FuIGFuZCBtYXRjaCBiZWdpbiBzYW1lCi0JICAgIGFkZCAgICAgZWRpLDYKLQkgICAgYWRkICAgICBlc2ksNgotCSAgICBtb3YgICAgIGVjeCwoTUFYX01BVENILSgyKzQpKS80ICAgICA7Ly87IHNjYW4gZm9yIGF0IG1vc3QgTUFYX01BVENIIGJ5dGVzCi0JICAgIHJlcGUgICAgY21wc2QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsvLzsgbG9vcCB1bnRpbCBtaXNtYXRjaAorICAgICAgICA7IGhlcmUgd2Ugbm93IHNjYW4gYW5kIG1hdGNoIGJlZ2luIHNhbWUKKyAgICAgICAgYWRkICAgICBlZGksNgorICAgICAgICBhZGQgICAgIGVzaSw2CisgICAgICAgIG1vdiAgICAgZWN4LChNQVhfTUFUQ0gtKDIrNCkpLzQgICAgIDsgc2NhbiBmb3IgYXQgbW9zdCBNQVhfTUFUQ0ggYnl0ZXMKKyAgICAgICAgcmVwZSAgICBjbXBzZCAgICAgICAgICAgICAgICAgICAgICAgOyBsb29wIHVudGlsIG1pc21hdGNoCiAKLQkgICAgamUgICAgICB0cmZpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBnbyB0byB0cmZpbiBpZiBub3QgdW5tYXRjaAotCQkJOyB3ZSBkZXRlcm1pbmUgdGhlIHVubWF0Y2ggYnl0ZQotCSAgICBzdWIgICAgIGVzaSw0Ci0JICAgIG1vdiAgICAgZWF4LFtlZGktNF0KLQkgICAgeG9yICAgICBlYXgsW2VzaV0KLQkgICAgb3IgICAgICBhbCxhbAorICAgICAgICBqZSAgICAgIHRyZmluICAgICAgICAgICAgICAgICAgICAgICA7IGdvIHRvIHRyZmluIGlmIG5vdCB1bm1hdGNoCis7IHdlIGRldGVybWluZSB0aGUgdW5tYXRjaCBieXRlCisgICAgICAgIHN1YiAgICAgZXNpLDQKKyAgICAgICAgbW92ICAgICBlZHgsW2VkaS00XQorICAgICAgICB4b3IgICAgIGVkeCxbZXNpXQogCi0JICAgIGpueiAgICAgdHJmaW4KLQkgICAgaW5jICAgICBlc2kKKyAgICAgICAgb3IgICAgICBkbCxkbAorICAgICAgICBqbnogICAgIHRyZmluCisgICAgICAgIGluYyAgICAgZXNpCiAKLQkgICAgb3IgICAgICBheCxheAotCSAgICBqbnogICAgIHRyZmluCi0JICAgIGluYyAgICAgZXNpCisgICAgICAgIG9yICAgICAgZHgsZHgKKyAgICAgICAgam56ICAgICB0cmZpbgorICAgICAgICBpbmMgICAgIGVzaQogCi0JICAgIHNobCAgICAgZWF4LDggICAgICAgICAgIAotCSAgICBqbnogICAgIHRyZmluCi0JICAgIGluYyAgICAgZXNpCisgICAgICAgIGFuZCAgICAgZWR4LDBmZmZmZmZoCisgICAgICAgIGpueiAgICAgdHJmaW4KKyAgICAgICAgaW5jICAgICBlc2kKIAotdHJmaW46ICAgICAgCi0JICAgIHN1YiAgICAgZXNpLHNjYW5ycCAgICAgICAgICA7IGVzaSA9IGxlbgordHJmaW46CisgICAgICAgIHN1YiAgICAgZXNpLHNjYW4gICAgICAgICAgOyBlc2kgPSBsZW4KIHRyZmludmFsOgotCSAgICBjbXAgICAgIGVzaSxiZXN0X2xlbiAgICAgICAgOyBpZiBsZW4gPD0gYmVzdF9sZW4sIGdvIGNvbnRsb29wMgotCSAgICBqYmUgICAgIGNvbnRsb29wMgorOyBoZXJlIHdlIGhhdmUgZmluaXNlZCBjb21wYXJlLCBhbmQgZXNpIGNvbnRhaW4gbGVuIG9mIGVxdWFsIHN0cmluZworICAgICAgICBjbXAgICAgIGVzaSxiZXN0X2xlbiAgICAgICAgOyBpZiBsZW4gPiBiZXN0X2xlbiwgZ28gbmV3YmVzdGxlbgorICAgICAgICBqYSAgICAgIHNob3J0IG5ld2Jlc3RsZW4KKzsgbm93IHdlIHJlc3RvcmUgZWR4LCBlY3ggYW5kIGVzaSwgZm9yIHRoZSBiaWcgbG9vcAorICAgICAgICBtb3YgICAgIGVzaSxwcmV2CisgICAgICAgIG1vdiAgICAgZWN4LGxpbWl0CisgICAgICAgIG1vdiAgICAgZWR4LHdpbmRvdworICAgICAgICBqbXAgICAgIGNvbnRsb29wMwogCi0JICAgIG1vdiAgICAgYmVzdF9sZW4sZXNpICAgICAgICA7IGxlbiBiZWNvbWUgYmVzdF9sZW4KK25ld2Jlc3RsZW46CisgICAgICAgIG1vdiAgICAgYmVzdF9sZW4sZXNpICAgICAgICA7IGxlbiBiZWNvbWUgYmVzdF9sZW4KIAotCSAgICBtb3YgICAgIG1hdGNoX3N0YXJ0LGVkeAotCSAgICBjbXAgICAgIGVzaSxuaWNlX21hdGNoIDsvLzsgaWYgZXNpID49IG5pY2VfbWF0Y2gsIGV4aXQKLQkgICAgbW92ICAgICBlY3gsc2NhbnJwCi0JICAgIGphZSAgICAgZXhpdGxvb3AKLQkgICAgYWRkICAgICBlc2ksd2luZG93Ci0JICAgIGFkZCAgICAgZWN4LGJlc3RfbGVuCi0JCQlkZWMgICAgICAgICAgICAgZXNpCi0JICAgIG1vdiAgICAgd2luZG93bGVuLGVzaQotCSAgICBtb3YgICAgIGJ4LFtlY3gtMV0KKyAgICAgICAgbW92ICAgICBtYXRjaF9zdGFydCxlYXggICAgIDsgc2F2ZSBuZXcgcG9zaXRpb24gYXMgbWF0Y2hfc3RhcnQKKyAgICAgICAgY21wICAgICBlc2ksbmljZV9tYXRjaCAgICAgIDsgaWYgYmVzdF9sZW4gPj0gbmljZV9tYXRjaCwgZXhpdAorICAgICAgICBqYWUgICAgIGV4aXRsb29wCisgICAgICAgIG1vdiAgICAgZWN4LHNjYW4KKyAgICAgICAgbW92ICAgICBlZHgsd2luZG93ICAgICAgICAgIDsgcmVzdG9yZSBlZHg9d2luZG93CisgICAgICAgIGFkZCAgICAgZWN4LGVzaQorICAgICAgICBhZGQgICAgIGVzaSxlZHgKKworICAgICAgICBkZWMgICAgIGVzaQorICAgICAgICBtb3YgICAgIHdpbmRvd2xlbixlc2kgICAgICAgOyB3aW5kb3dsZW4gPSB3aW5kb3cgKyBiZXN0X2xlbi0xCisgICAgICAgIG1vdiAgICAgYngsW2VjeC0xXSAgICAgICAgICA7IGJ4ID0gKihzY2FuK2Jlc3RfbGVuLTEpID0gc2Nhbl9lbmQKKworOyBub3cgd2UgcmVzdG9yZSBlY3ggYW5kIGVzaSwgZm9yIHRoZSBiaWcgbG9vcCA6CisgICAgICAgIG1vdiAgICAgZXNpLHByZXYKKyAgICAgICAgbW92ICAgICBlY3gsbGltaXQKKyAgICAgICAgam1wICAgICBjb250bG9vcDMKKworZXhpdGxvb3A6Cis7IGV4aXQgOiBzLT5tYXRjaF9zdGFydD1tYXRjaF9zdGFydAorICAgICAgICBtb3YgICAgIGVieCxtYXRjaF9zdGFydAorICAgICAgICBtb3YgICAgIGVicCxzdHJfcworICAgICAgICBtb3YgICAgIGVjeCxiZXN0X2xlbgorICAgICAgICBtb3YgICAgIGR3b3JkIHB0ciBbZWJwK2RlcF9tYXRjaF9zdGFydF0sZWJ4ICAgICAgICAKKyAgICAgICAgbW92ICAgICBlYXgsZHdvcmQgcHRyIFtlYnArZGVwX2xvb2thaGVhZF0KKyAgICAgICAgY21wICAgICBlY3gsZWF4CisgICAgICAgIGphICAgICAgbWluZXhsbworICAgICAgICBtb3YgICAgIGVheCxlY3gKK21pbmV4bG86Cis7IHJldHVybiBtaW4oYmVzdF9sZW4scy0+bG9va2FoZWFkKQorICAgICAgICAKKzsgcmVzdG9yZSBzdGFjayBhbmQgcmVnaXN0ZXIgZWJ4LGVzaSxlZGksZWJwCisgICAgICAgIGFkZCAgICAgZXNwLE5iU3RhY2tBZGQKKworICAgICAgICBwb3AgICAgIGVieAorICAgICAgICBwb3AgICAgIGVzaQorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKK0luZm9BdXRob3I6Cis7IHBsZWFzZSBkb24ndCByZW1vdmUgdGhpcyBzdHJpbmcgIQorOyBZb3VyIGFyZSBmcmVlIHVzZSBndm1hdDMyIGluIGFueSBmcmUgb3IgY29tbWVyY2lhbCBhcHBzIGlmIHlvdSBkb24ndCByZW1vdmUgdGhlIHN0cmluZyBpbiB0aGUgYmluYXJ5IQorICAgICAgICBkYiAgICAgMGRoLDBhaCwiR1ZNYXQzMiBvcHRpbWlzZWQgYXNzZW1ibHkgY29kZSB3cml0dGVuIDE5OTYtOTggYnkgR2lsbGVzIFZvbGxhbnQiLDBkaCwwYWgKIAogCi07IG5vdyB3ZSByZXN0b3JlIGVheCwgZWN4IGFuZCBlc2ksIGZvciB0aGUgYmlnIGxvb3AgOgotY29udGxvb3AyOgotCSAgICBtb3YgICAgIGVzaSxwcmV2Ci0JICAgIG1vdiAgICAgZWN4LGxpbWl0Ci0JICAgIDttb3YgICAgIGVheCxjaGFpbl9sZW5ndGgKLQkJbW92CQllYXgsd2luZG93Ci0JICAgIGptcCAgICAgY29udGxvb3AzCiAKLWV4aXRsb29wOiAgICAgICAgCi0JICAgIG1vdiAgICAgZWJ4LG1hdGNoX3N0YXJ0Ci0JCW1vdgkJZWJwLHN0cl9zCi0JICAgIG1vdiAgICAgZHdvcmQgcHRyIFtlYnArZGVwX21hdGNoX3N0YXJ0XSxlYngKLQkgICAgbW92ICAgICBlYXgsYmVzdF9sZW4KLQkgICAgYWRkICAgICBlc3AsTmJTdGFja0FkZAorSUZERUYgTk9VTkRFUkxJTkUKK2xvbmdlc3RfbWF0Y2hfN2ZmZiAgIGVuZHAKK0VMU0UKK19sb25nZXN0X21hdGNoXzdmZmYgIGVuZHAKK0VORElGCiAKIAotCSAgICBwb3AgICAgIGVieAotCSAgICBwb3AgICAgIGVzaQotCSAgICBwb3AgICAgIGVkaQotCSAgICBwb3AgICAgIGVicCAKLQkgICAgcmV0CitJRkRFRiBOT1VOREVSTElORQorY3B1ZGV0ZWN0MzIgICAgIHByb2MgbmVhcgorRUxTRQorX2NwdWRldGVjdDMyICAgIHByb2MgbmVhcgorRU5ESUYKIAotX2xvbmdlc3RfbWF0Y2hfYXNtN2ZmZiBlbmRwCisKKwlwdXNoZmQgICAgICAgICAgICAgICAgICA7IHB1c2ggb3JpZ2luYWwgRUZMQUdTCisJcG9wICAgICBlYXggICAgICAgICAgICAgOyBnZXQgb3JpZ2luYWwgRUZMQUdTCisJbW92ICAgICBlY3gsIGVheCAgICAgICAgOyBzYXZlIG9yaWdpbmFsIEVGTEFHUworCXhvciAgICAgZWF4LCA0MDAwMGggICAgIDsgZmxpcCBBQyBiaXQgaW4gRUZMQUdTCisJcHVzaCAgICBlYXggICAgICAgICAgICAgOyBzYXZlIG5ldyBFRkxBR1MgdmFsdWUgb24gc3RhY2sKKwlwb3BmZCAgICAgICAgICAgICAgICAgICA7IHJlcGxhY2UgY3VycmVudCBFRkxBR1MgdmFsdWUKKwlwdXNoZmQgICAgICAgICAgICAgICAgICA7IGdldCBuZXcgRUZMQUdTCisJcG9wICAgICBlYXggICAgICAgICAgICAgOyBzdG9yZSBuZXcgRUZMQUdTIGluIEVBWAorCXhvciAgICAgZWF4LCBlY3ggICAgICAgIDsgY2FuknQgdG9nZ2xlIEFDIGJpdCwgcHJvY2Vzc29yPTgwMzg2CisJanogICAgICBlbmRfY3B1X2lzXzM4NiAgOyBqdW1wIGlmIDgwMzg2IHByb2Nlc3NvcgorCXB1c2ggICAgZWN4CisJcG9wZmQgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIEFDIGJpdCBpbiBFRkxBR1MgZmlyc3QKKworCXB1c2hmZAorCXB1c2hmZAorCXBvcCAgICAgZWN4CisJCQkKKwltb3YgICAgIGVheCwgZWN4ICAgICAgICA7IGdldCBvcmlnaW5hbCBFRkxBR1MKKwl4b3IgICAgIGVheCwgMjAwMDAwaCAgICA7IGZsaXAgSUQgYml0IGluIEVGTEFHUworCXB1c2ggICAgZWF4ICAgICAgICAgICAgIDsgc2F2ZSBuZXcgRUZMQUdTIHZhbHVlIG9uIHN0YWNrCisJcG9wZmQgICAgICAgICAgICAgICAgICAgOyByZXBsYWNlIGN1cnJlbnQgRUZMQUdTIHZhbHVlCisJcHVzaGZkICAgICAgICAgICAgICAgICAgOyBnZXQgbmV3IEVGTEFHUworCXBvcAkJZWF4CSAgICAgICAgICAgIDsgc3RvcmUgbmV3IEVGTEFHUyBpbiBFQVgKKwlwb3BmZCAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgb3JpZ2luYWwgRUZMQUdTCisJeG9yCQllYXgsIGVjeCAgICAgICAgOyBjYW6SdCB0b2dnbGUgSUQgYml0LAorCWplCQlpc19vbGRfNDg2CQk7IHByb2Nlc3Nvcj1vbGQKKworCW1vdiAgICAgZWF4LDEKKwlkYiAgICAgIDBmaCwwYTJoICAgICAgICA7Q1BVSUQgICAKKworZXhpdGNwdWRldGVjdDoKKwlyZXQKKworZW5kX2NwdV9pc18zODY6CisJbW92ICAgICBlYXgsMDMwMGgKKwlqbXAgICAgIGV4aXRjcHVkZXRlY3QKKworaXNfb2xkXzQ4NjoKKwltb3YgICAgIGVheCwwNDAwaAorCWptcCAgICAgZXhpdGNwdWRldGVjdAorCitJRkRFRiBOT1VOREVSTElORQorY3B1ZGV0ZWN0MzIgICAgIGVuZHAKK0VMU0UKK19jcHVkZXRlY3QzMiAgICBlbmRwCitFTkRJRgogCiBfVEVYVCAgIGVuZHMKIGVuZApkaWZmIC0tZ2l0IGEvY29udHJpYi9hc20zODYvZ3ZtYXQzMmMuYyBiL2NvbnRyaWIvYXNtMzg2L2d2bWF0MzJjLmMKaW5kZXggNDNkNTMwYi4uZDg1M2JiNyAxMDA2NDQKLS0tIGEvY29udHJpYi9hc20zODYvZ3ZtYXQzMmMuYworKysgYi9jb250cmliL2FzbTM4Ni9ndm1hdDMyYy5jCkBAIC03LDcgKzcsNiBAQAogICogICAgIChhc3NlbWJseSBjb2RlIGlzIGZhc3RlciB3aXRoIGEgZml4ZWQgd21hc2spCiAgKgogICovCi0vLyNwcmFnbWEgb3B0aW1pemUoImFndCIsb24pCiAKICNpbmNsdWRlICJkZWZsYXRlLmgiCiAKQEAgLTE1LDY1ICsxNCwzMSBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIAogI2lmZGVmIEFTTVYKLQogI2RlZmluZSBOSUwgMAogCi1zdGF0aWMgdW5zaWduZWQgaW50IHRvdD0wOwotc3RhdGljIHVuc2lnbmVkIGludCB0b3RsMD0wOwotc3RhdGljIHVuc2lnbmVkIGludCB0b3RsMHAwPTA7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGJhMD0wOwotc3RhdGljIHVuc2lnbmVkIGludCBiYTE9MDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3B0YT0wOwotc3RhdGljIHVuc2lnbmVkIGludCBjcHRiPTA7Ci0KICNkZWZpbmUgVU5BTElHTkVEX09LCi0jZGVmaW5lIGd2c2hvdyhhLGIsYyxkKQotLyoKLXZvaWQgZ3ZzaG93KGludCBjaGFpbl9sZW5ndGgsaW50IGxlbixpbnQgbGltaXQsdXNoZiogcHJldikKLXsKLXN0YXRpYyBpbnQgaXZhbD0wOwotY2hhciBzels4MF07Ci11bnNpZ25lZCBsb25nIGk7Ci1pbnQgcHJldjA9KnByZXY7Ci0JaXZhbCsrOwotCS8vd3NwcmludGYoc3osImNhbGwgJXUsIGxlbj0ldSwgY2hhaW5fbGVuZ3RoPSV1XG4iLGl2YWwsbGVuLGNoYWluX2xlbmd0aCk7Ci0JLy9PdXRwdXREZWJ1Z1N0cmluZyhzeik7Ci0JdG90Kys7Ci0JaWYgKGxpbWl0PT1OSUwpCi0JCXRvdGwwKys7Ci0JaWYgKChsaW1pdD09TklMKSAmJiAocHJldjA9PTApKQotCQl0b3RsMHAwKys7Ci0JZm9yIChpPWxpbWl0KzE7aTwzMjc2ODtpKyspCi0JewotCQl1c2ggdmE9KihwcmV2K2kpOwotCQlpZiAoYmEwPjQwMDAwMDAwMDApCi0JCXsKLQkJCWJhMCs9MTA7Ci0JCX0KLQkJYmEwKys7Ci0JCWlmICgodmE+bGltaXQpIHx8ICh2YT09MCkpCi0JCQljb250aW51ZTsKLQkJYmExKys7Ci0JfQotfQotKi8KIAogCiAvKiBpZiB5b3VyIEMgY29tcGlsZXIgZG9uJ3QgYWRkIHVuZGVybGluZSBiZWZvcmUgZnVuY3Rpb24gbmFtZSwKIAkJZGVmaW5lIEFERF9VTkRFUkxJTkVfQVNNRlVOQyAqLwogI2lmZGVmIEFERF9VTkRFUkxJTkVfQVNNRlVOQwotI2RlZmluZSBsb25nZXN0X21hdGNoX2FzbTdmZmYgX2xvbmdlc3RfbWF0Y2hfYXNtN2ZmZgorI2RlZmluZSBsb25nZXN0X21hdGNoXzdmZmYgX2xvbmdlc3RfbWF0Y2hfN2ZmZgogI2VuZGlmCisKKworCiB2b2lkIG1hdGNoX2luaXQoKQogewogfQogCit1bnNpZ25lZCBsb25nIGNwdWRldGVjdDMyKCk7CisKIHVJbnQgbG9uZ2VzdF9tYXRjaF9jKAogICAgIGRlZmxhdGVfc3RhdGUgKnMsCiAgICAgSVBvcyBjdXJfbWF0Y2gpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3VycmVudCBtYXRjaCAqLwogCiAKLXVJbnQgbG9uZ2VzdF9tYXRjaF9hc203ZmZmKAordUludCBsb25nZXN0X21hdGNoXzdmZmYoCiAgICAgZGVmbGF0ZV9zdGF0ZSAqcywKICAgICBJUG9zIGN1cl9tYXRjaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IG1hdGNoICovCiAKQEAgLTgxLDkgKzQ2LDE1IEBACiAgICAgZGVmbGF0ZV9zdGF0ZSAqcywKICAgICBJUG9zIGN1cl9tYXRjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgbWF0Y2ggKi8KIHsKLSAgICBpZiAocy0+d19tYXNrID09IDB4N2ZmZikKLSAgICAgICAgcmV0dXJuIGxvbmdlc3RfbWF0Y2hfYXNtN2ZmZihzLGN1cl9tYXRjaCk7Ci0gICAgcmV0dXJuIGxvbmdlc3RfbWF0Y2hfYyhzLGN1cl9tYXRjaCk7CisJc3RhdGljIHVJbnQgaUlzUFBybz0yOworCisgICAgaWYgKChzLT53X21hc2sgPT0gMHg3ZmZmKSAmJiAoaUlzUFBybz09MCkpCisgICAgICAgIHJldHVybiBsb25nZXN0X21hdGNoXzdmZmYocyxjdXJfbWF0Y2gpOworCisJaWYgKGlJc1BQcm89PTIpCisJCWlJc1BQcm8gPSAoKChjcHVkZXRlY3QzMigpLzB4MTAwKSYweGYpPj02KSA/IDEgOiAwOworCisJcmV0dXJuIGxvbmdlc3RfbWF0Y2hfYyhzLGN1cl9tYXRjaCk7CiB9CiAKIApAQCAtMjIyLDcgKzE5Myw3IEBACiAgICAgfSB3aGlsZSAoKGN1cl9tYXRjaCA9IHByZXZbY3VyX21hdGNoICYgd21hc2tdKSA+IGxpbWl0CiAgICAgICAgICAgICAgJiYgLS1jaGFpbl9sZW5ndGggIT0gMCk7CiAKLSAgICBpZiAoKHVJbnQpYmVzdF9sZW4gPD0gcy0+bG9va2FoZWFkKSByZXR1cm4gYmVzdF9sZW47CisgICAgaWYgKCh1SW50KWJlc3RfbGVuIDw9IHMtPmxvb2thaGVhZCkgcmV0dXJuICh1SW50KWJlc3RfbGVuOwogICAgIHJldHVybiBzLT5sb29rYWhlYWQ7CiB9CiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYXNtMzg2L3psaWJ2Yy5kc3AgYi9jb250cmliL2FzbTM4Ni96bGlidmMuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Njc2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2FzbTM4Ni96bGlidmMuZHNwCkBAIC0wLDAgKzEsNjEyIEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InpsaWJ2YyIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNS4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyCisjIFRBUkdUWVBFICJXaW4zMiAoQUxQSEEpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDA2MDIKKworQ0ZHPXpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiemxpYnZjLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiemxpYnZjLm1hayIgQ0ZHPSJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgInpsaWJ2YyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlQXhwIiAoYmFzZWQgb25cCisgIldpbjMyIChBTFBIQSkgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0QXNtIiAoYmFzZWQgb25cCisgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlV2l0aG91dENydGRsbCIgKGJhc2VkIG9uXAorICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorCishSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiLlxSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiLlxSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi5cUmVsZWFzZSIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuXFJlbGVhc2UiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0NQUD1jbC5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIl9XSU5ETEwiIC9EICJfV0lOMzIiIC9EICJCVUlMRF9aTElCRExMIiAvRCAiWkxJQl9ETEwiIC9EICJEWU5BTUlDX0NSQ19UQUJMRSIgL0QgIkFTTVYiIC9GQWNzIC9GUiAvWVggL0ZEIC9jCitNVEw9bWlkbC5leGUKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCitSU0M9cmMuZXhlCisjIEFERCBCQVNFIFJTQyAvbCAweDQwYyAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDBjIC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGd2bWF0MzIub2JqIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIGNydGRsbC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFwIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYiAvb3V0OiIuXFJlbGVhc2VcemxpYi5kbGwiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiLlxEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIi5cRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLlxEZWJ1ZyIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICIuXERlYnVnIgorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0NQUD1jbC5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIl9XSU5ETEwiIC9EICJfV0lOMzIiIC9EICJCVUlMRF9aTElCRExMIiAvRCAiWkxJQl9ETEwiIC9ZWCAvRkQgL2MKK01UTD1taWRsLmV4ZQorIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKK1JTQz1yYy5leGUKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDBjIC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MGMgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLlxEZWJ1Z1x6bGliLmRsbCIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VBeHAiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJ6bGlidmNfXyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgInpsaWJ2Y19fIgorIyBQUk9QIEJBU0UgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgInpsaWJ2Y19fIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgInpsaWJ2Y19fIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitNVEw9bWlkbC5leGUKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorQ1BQPWNsLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL0d0MCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9XSU4zMiIgL0QgIkJVSUxEX1pMSUJETEwiIC9EICJaTElCX0RMTCIgL0QgIkRZTkFNSUNfQ1JDX1RBQkxFIiAvRkFjcyAvRlIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01UIC9HdDAgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfV0lOMzIiIC9EICJCVUlMRF9aTElCRExMIiAvRCAiWkxJQl9ETEwiIC9EICJEWU5BTUlDX0NSQ19UQUJMRSIgL0ZBY3MgL0ZSIC9ZWCAvRkQgL2MKK1JTQz1yYy5leGUKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDBjIC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MGMgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIgY3J0ZGxsLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYXAgL21hY2hpbmU6QUxQSEEgL25vZGVmYXVsdGxpYiAvb3V0OiIuXFJlbGVhc2VcemxpYi5kbGwiCisjIFNVQlRSQUNUIEJBU0UgTElOSzMyIC9wZGI6bm9uZQorIyBBREQgTElOSzMyIGNydGRsbC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFwIC9tYWNoaW5lOkFMUEhBIC9ub2RlZmF1bHRsaWIgL291dDoiemxpYnZjX19cemxpYi5kbGwiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0QXNtIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiemxpYnZjXzAiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJ6bGlidmNfMCIKKyMgUFJPUCBCQVNFIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICJ6bGlidmNfMCIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ6bGlidmNfMCIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorQ1BQPWNsLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJfV0lORExMIiAvRCAiX1dJTjMyIiAvRCAiQlVJTERfWkxJQkRMTCIgL0QgIlpMSUJfRExMIiAvRCAiRFlOQU1JQ19DUkNfVEFCTEUiIC9GQWNzIC9GUiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJfV0lORExMIiAvRCAiX1dJTjMyIiAvRCAiQlVJTERfWkxJQkRMTCIgL0QgIlpMSUJfRExMIiAvRCAiRFlOQU1JQ19DUkNfVEFCTEUiIC9GQWNzIC9GUiAvWVggL0ZEIC9jCitNVEw9bWlkbC5leGUKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorUlNDPXJjLmV4ZQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MGMgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwYyAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBjcnRkbGwubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hcCAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWIgL291dDoiLlxSZWxlYXNlXHpsaWIuZGxsIgorIyBTVUJUUkFDVCBCQVNFIExJTkszMiAvcGRiOm5vbmUKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBjcnRkbGwubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hcCAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWIgL291dDoiLlx6bGlidmNfMFx6bGliLmRsbCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZVdpdGhvdXRDcnRkbGwiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJ6bGlidmNfMSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgInpsaWJ2Y18xIgorIyBQUk9QIEJBU0UgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgInpsaWJ2Y18xIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgInpsaWJ2Y18xIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitDUFA9Y2wuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIl9XSU5ETEwiIC9EICJfV0lOMzIiIC9EICJCVUlMRF9aTElCRExMIiAvRCAiWkxJQl9ETEwiIC9EICJEWU5BTUlDX0NSQ19UQUJMRSIgL0QgIkFTTVYiIC9GQWNzIC9GUiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJfV0lORExMIiAvRCAiX1dJTjMyIiAvRCAiQlVJTERfWkxJQkRMTCIgL0QgIlpMSUJfRExMIiAvRCAiRFlOQU1JQ19DUkNfVEFCTEUiIC9EICJBU01WIiAvRkFjcyAvRlIgL1lYIC9GRCAvYworTVRMPW1pZGwuZXhlCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKK1JTQz1yYy5leGUKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDBjIC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MGMgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIgZ3ZtYXQzMi5vYmoga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgY3J0ZGxsLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYXAgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliIC9vdXQ6Ii5cUmVsZWFzZVx6bGliLmRsbCIKKyMgU1VCVFJBQ1QgQkFTRSBMSU5LMzIgL3BkYjpub25lCisjIEFERCBMSU5LMzIgZ3ZtYXQzMi5vYmoga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgY3J0ZGxsLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYXAgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliIC9vdXQ6Ii5cemxpYnZjXzFcemxpYi5kbGwiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgInpsaWJ2YyAtIFdpbjMyIERlYnVnIgorIyBOYW1lICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlQXhwIgorIyBOYW1lICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlV2l0aG91dEFzbSIKKyMgTmFtZSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZVdpdGhvdXRDcnRkbGwiCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtocGo7YmF0O2ZvcjtmOTAiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGFkbGVyMzIuYworCishSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgRGVidWciCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlQXhwIgorCitERVBfQ1BQX0FETEVSPVwKKwkiLlx6Y29uZi5oIlwKKwkiLlx6bGliLmgiXAorCQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZVdpdGhvdXRBc20iCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlV2l0aG91dENydGRsbCIKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llxjb21wcmVzcy5jCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBEZWJ1ZyIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VBeHAiCisKK0RFUF9DUFBfQ09NUFI9XAorCSIuXHpjb25mLmgiXAorCSIuXHpsaWIuaCJcCisJCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlV2l0aG91dEFzbSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0Q3J0ZGxsIgorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGNyYzMyLmMKKworIUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZUF4cCIKKworREVQX0NQUF9DUkMzMj1cCisJIi5cemNvbmYuaCJcCisJIi5cemxpYi5oIlwKKwkKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0QXNtIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZVdpdGhvdXRDcnRkbGwiCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cZGVmbGF0ZS5jCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBEZWJ1ZyIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VBeHAiCisKK0RFUF9DUFBfREVGTEE9XAorCSIuXGRlZmxhdGUuaCJcCisJIi5cemNvbmYuaCJcCisJIi5cemxpYi5oIlwKKwkiLlx6dXRpbC5oIlwKKwkKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0QXNtIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZVdpdGhvdXRDcnRkbGwiCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cZ3ZtYXQzMmMuYworCishSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgRGVidWciCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlQXhwIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZVdpdGhvdXRBc20iCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlV2l0aG91dENydGRsbCIKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxnemlvLmMKKworIUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZUF4cCIKKworREVQX0NQUF9HWklPXz1cCisJIi5cemNvbmYuaCJcCisJIi5cemxpYi5oIlwKKwkiLlx6dXRpbC5oIlwKKwkKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0QXNtIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZVdpdGhvdXRDcnRkbGwiCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5caW5mYmxvY2suYworCishSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgRGVidWciCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlQXhwIgorCitERVBfQ1BQX0lORkJMPVwKKwkiLlxpbmZibG9jay5oIlwKKwkiLlxpbmZjb2Rlcy5oIlwKKwkiLlxpbmZ0cmVlcy5oIlwKKwkiLlxpbmZ1dGlsLmgiXAorCSIuXHpjb25mLmgiXAorCSIuXHpsaWIuaCJcCisJIi5cenV0aWwuaCJcCisJCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlV2l0aG91dEFzbSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0Q3J0ZGxsIgorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGluZmNvZGVzLmMKKworIUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZUF4cCIKKworREVQX0NQUF9JTkZDTz1cCisJIi5caW5mYmxvY2suaCJcCisJIi5caW5mY29kZXMuaCJcCisJIi5caW5mZmFzdC5oIlwKKwkiLlxpbmZ0cmVlcy5oIlwKKwkiLlxpbmZ1dGlsLmgiXAorCSIuXHpjb25mLmgiXAorCSIuXHpsaWIuaCJcCisJIi5cenV0aWwuaCJcCisJCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlV2l0aG91dEFzbSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0Q3J0ZGxsIgorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGluZmZhc3QuYworCishSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgRGVidWciCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlQXhwIgorCitERVBfQ1BQX0lORkZBPVwKKwkiLlxpbmZibG9jay5oIlwKKwkiLlxpbmZjb2Rlcy5oIlwKKwkiLlxpbmZmYXN0LmgiXAorCSIuXGluZnRyZWVzLmgiXAorCSIuXGluZnV0aWwuaCJcCisJIi5cemNvbmYuaCJcCisJIi5cemxpYi5oIlwKKwkiLlx6dXRpbC5oIlwKKwkKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0QXNtIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZVdpdGhvdXRDcnRkbGwiCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5caW5mbGF0ZS5jCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBEZWJ1ZyIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VBeHAiCisKK0RFUF9DUFBfSU5GTEE9XAorCSIuXGluZmJsb2NrLmgiXAorCSIuXHpjb25mLmgiXAorCSIuXHpsaWIuaCJcCisJIi5cenV0aWwuaCJcCisJCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlV2l0aG91dEFzbSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0Q3J0ZGxsIgorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGluZnRyZWVzLmMKKworIUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZUF4cCIKKworREVQX0NQUF9JTkZUUj1cCisJIi5caW5mdHJlZXMuaCJcCisJIi5cemNvbmYuaCJcCisJIi5cemxpYi5oIlwKKwkiLlx6dXRpbC5oIlwKKwkKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0QXNtIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZVdpdGhvdXRDcnRkbGwiCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5caW5mdXRpbC5jCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBEZWJ1ZyIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VBeHAiCisKK0RFUF9DUFBfSU5GVVQ9XAorCSIuXGluZmJsb2NrLmgiXAorCSIuXGluZmNvZGVzLmgiXAorCSIuXGluZnRyZWVzLmgiXAorCSIuXGluZnV0aWwuaCJcCisJIi5cemNvbmYuaCJcCisJIi5cemxpYi5oIlwKKwkiLlx6dXRpbC5oIlwKKwkKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0QXNtIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZVdpdGhvdXRDcnRkbGwiCisKKyFFTkRJRiAKKworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cdHJlZXMuYworCishSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgRGVidWciCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlQXhwIgorCitERVBfQ1BQX1RSRUVTPVwKKwkiLlxkZWZsYXRlLmgiXAorCSIuXHpjb25mLmgiXAorCSIuXHpsaWIuaCJcCisJIi5cenV0aWwuaCJcCisJCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlV2l0aG91dEFzbSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0Q3J0ZGxsIgorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHVuY29tcHIuYworCishSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgRGVidWciCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlQXhwIgorCitERVBfQ1BQX1VOQ09NPVwKKwkiLlx6Y29uZi5oIlwKKwkiLlx6bGliLmgiXAorCQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZVdpdGhvdXRBc20iCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlV2l0aG91dENydGRsbCIKKworIUVORElGIAorCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx6bGliLnJjCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx6bGlidmMuZGVmCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx6dXRpbC5jCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBEZWJ1ZyIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VBeHAiCisKK0RFUF9DUFBfWlVUSUw9XAorCSIuXHpjb25mLmgiXAorCSIuXHpsaWIuaCJcCisJIi5cenV0aWwuaCJcCisJCisKKyFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlV2l0aG91dEFzbSIKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2VXaXRob3V0Q3J0ZGxsIgorCishRU5ESUYgCisKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmw7Zmk7ZmQiCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXGRlZmxhdGUuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5caW5mYmxvY2suaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5caW5mY29kZXMuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5caW5mZmFzdC5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxpbmZ0cmVlcy5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxpbmZ1dGlsLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHpjb25mLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHpsaWIuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cenV0aWwuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47Y250O3J0ZjtnaWY7anBnO2pwZWc7anBlIgorIyBFbmQgR3JvdXAKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvY29udHJpYi9hc20zODYvemxpYnZjLmRzdyBiL2NvbnRyaWIvYXNtMzg2L3psaWJ2Yy5kc3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyZTUwYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYXNtMzg2L3psaWJ2Yy5kc3cKQEAgLTAsMCArMSwyOSBAQAorTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDUuMDAKKyMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogInpsaWJ2YyI9Ii5cemxpYnZjLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworR2xvYmFsOgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08Mz4KK3t7eworfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9hc20zODYvemxpYnZjLm1hayBiL2NvbnRyaWIvYXNtMzg2L3psaWJ2Yy5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlM2QxNGIuLjAwMDAwMDAKLS0tIGEvY29udHJpYi9hc20zODYvemxpYnZjLm1haworKysgL2Rldi9udWxsCkBAIC0xLDc4MSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBOTUFLRSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA0LjIwCi0jICoqIERPIE5PVCBFRElUICoqCi0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKLQotIUlGICIkKENGRykiID09ICIiCi1DRkc9emxpYnZjIC0gV2luMzIgRGVidWcKLSFNRVNTQUdFIE5vIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkLiAgRGVmYXVsdGluZyB0byB6bGlidmMgLSBXaW4zMiBEZWJ1Zy4KLSFFTkRJRiAKLQotIUlGICIkKENGRykiICE9ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlIiAmJiAiJChDRkcpIiAhPSAiemxpYnZjIC0gV2luMzIgRGVidWciCi0hTUVTU0FHRSBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gIiQoQ0ZHKSIgc3BlY2lmaWVkLgotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0Ugb24gdGhpcyBtYWtlZmlsZQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGU6Ci0hTUVTU0FHRSAKLSFNRVNTQUdFIE5NQUtFIC9mICJ6bGlidmMubWFrIiBDRkc9InpsaWJ2YyAtIFdpbjMyIERlYnVnIgotIU1FU1NBR0UgCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKLSFNRVNTQUdFIAotIU1FU1NBR0UgInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQotIU1FU1NBR0UgInpsaWJ2YyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKLSFNRVNTQUdFIAotIUVSUk9SIEFuIGludmFsaWQgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQuCi0hRU5ESUYgCi0KLSFJRiAiJChPUykiID09ICJXaW5kb3dzX05UIgotTlVMTD0KLSFFTFNFIAotTlVMTD1udWwKLSFFTkRJRiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEJlZ2luIFByb2plY3QKLSMgUFJPUCBUYXJnZXRfTGFzdF9TY2FubmVkICJ6bGlidmMgLSBXaW4zMiBEZWJ1ZyIKLUNQUD1jbC5leGUKLVJTQz1yYy5leGUKLU1UTD1ta3R5cGxpYi5leGUKLQotIUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZSIKLQotIyBQUk9QIEJBU0UgVXNlX01GQyAwCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgotIyBQUk9QIFVzZV9NRkMgMAotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAotIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKLSMgUFJPUCBUYXJnZXRfRGlyICIiCi1PVVRESVI9LlxSZWxlYXNlCi1JTlRESVI9LlxSZWxlYXNlCi0KLUFMTCA6ICIkKE9VVERJUilcemxpYi5kbGwiICIkKE9VVERJUilcemxpYnZjLmJzYyIKLQotQ0xFQU4gOiAKLQktQGVyYXNlICIkKElOVERJUilcYWRsZXIzMi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGFkbGVyMzIuc2JyIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb21wcmVzcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbXByZXNzLnNiciIKLQktQGVyYXNlICIkKElOVERJUilcY3JjMzIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjcmMzMi5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRlZmxhdGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkZWZsYXRlLnNiciIKLQktQGVyYXNlICIkKElOVERJUilcZ3ZtYXQzMmMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxndm1hdDMyYy5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXGd6aW8ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxnemlvLnNiciIKLQktQGVyYXNlICIkKElOVERJUilcaW5mYmxvY2sub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmZibG9jay5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZmNvZGVzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5mY29kZXMuc2JyIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmZmYXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5mZmFzdC5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZmxhdGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmZsYXRlLnNiciIKLQktQGVyYXNlICIkKElOVERJUilcaW5mdHJlZXMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmZ0cmVlcy5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZnV0aWwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmZ1dGlsLnNiciIKLQktQGVyYXNlICIkKElOVERJUilcdHJlZXMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0cmVlcy5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVuY29tcHIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1bmNvbXByLnNiciIKLQktQGVyYXNlICIkKElOVERJUilcemxpYi5yZXMiCi0JLUBlcmFzZSAiJChJTlRESVIpXHp1dGlsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcenV0aWwuc2JyIgotCS1AZXJhc2UgIiQoT1VURElSKVx6bGliLmRsbCIKLQktQGVyYXNlICIkKE9VVERJUilcemxpYi5leHAiCi0JLUBlcmFzZSAiJChPVVRESVIpXHpsaWIubGliIgotCS1AZXJhc2UgIiQoT1VURElSKVx6bGliLm1hcCIKLQktQGVyYXNlICIkKE9VVERJUilcemxpYnZjLmJzYyIKLQotIiQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIkKE9VVERJUikiCi0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL2MKLSMgQUREIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiTkRFQlVHIiAvRCBmZG9wZW49X2Zkb3BlbiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIl9XSU5ETEwiIC9EICJfV0lOMzIiIC9EICJCVUlMRF9aTElCRExMIiAvRCAiWkxJQl9ETEwiIC9EICJBU01WIiAvRlIgL1lYIC9jCi1DUFBfUFJPSj0vbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiTkRFQlVHIiAvRCBmZG9wZW49X2Zkb3BlbiAvRCAiV0lOMzIiIC9EXAotICJfV0lORE9XUyIgL0QgIl9XSU5ETEwiIC9EICJfV0lOMzIiIC9EICJCVUlMRF9aTElCRExMIiAvRCAiWkxJQl9ETEwiIC9EICJBU01WIlwKLSAvRlIiJChJTlRESVIpLyIgL0ZwIiQoSU5URElSKS96bGlidmMucGNoIiAvWVggL0ZvIiQoSU5URElSKS8iIC9jIAotQ1BQX09CSlM9LlxSZWxlYXNlLwotQ1BQX1NCUlM9LlxSZWxlYXNlLwotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvd2luMzIKLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC93aW4zMgotTVRMX1BST0o9L25vbG9nbyAvRCAiTkRFQlVHIiAvd2luMzIgCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwYyAvZCAiTkRFQlVHIgotIyBBREQgUlNDIC9sIDB4NDBjIC9kICJOREVCVUciCi1SU0NfUFJPSj0vbCAweDQwYyAvZm8iJChJTlRESVIpL3psaWIucmVzIiAvZCAiTkRFQlVHIiAKLUJTQzMyPWJzY21ha2UuZXhlCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KLSMgQUREIEJTQzMyIC9ub2xvZ28KLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChPVVRESVIpL3psaWJ2Yy5ic2MiIAotQlNDMzJfU0JSUz0gXAotCSIkKElOVERJUilcYWRsZXIzMi5zYnIiIFwKLQkiJChJTlRESVIpXGNvbXByZXNzLnNiciIgXAotCSIkKElOVERJUilcY3JjMzIuc2JyIiBcCi0JIiQoSU5URElSKVxkZWZsYXRlLnNiciIgXAotCSIkKElOVERJUilcZ3ZtYXQzMmMuc2JyIiBcCi0JIiQoSU5URElSKVxnemlvLnNiciIgXAotCSIkKElOVERJUilcaW5mYmxvY2suc2JyIiBcCi0JIiQoSU5URElSKVxpbmZjb2Rlcy5zYnIiIFwKLQkiJChJTlRESVIpXGluZmZhc3Quc2JyIiBcCi0JIiQoSU5URElSKVxpbmZsYXRlLnNiciIgXAotCSIkKElOVERJUilcaW5mdHJlZXMuc2JyIiBcCi0JIiQoSU5URElSKVxpbmZ1dGlsLnNiciIgXAotCSIkKElOVERJUilcdHJlZXMuc2JyIiBcCi0JIiQoSU5URElSKVx1bmNvbXByLnNiciIgXAotCSIkKElOVERJUilcenV0aWwuc2JyIgotCi0iJChPVVRESVIpXHpsaWJ2Yy5ic2MiIDogIiQoT1VURElSKSIgJChCU0MzMl9TQlJTKQotICAgICQoQlNDMzIpIEA8PAotICAkKEJTQzMyX0ZMQUdTKSAkKEJTQzMyX1NCUlMpCi08PAotCi1MSU5LMzI9bGluay5leGUKLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4NgotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIGNydGRsbC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFwIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYiAvb3V0OiJSZWxlYXNlL3psaWIuZGxsIgotTElOSzMyX0ZMQUdTPWtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliXAotIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIGNydGRsbC5saWIgL25vbG9nb1wKLSAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvaW5jcmVtZW50YWw6bm8gL3BkYjoiJChPVVRESVIpL3psaWIucGRiIlwKLSAvbWFwOiIkKElOVERJUikvemxpYi5tYXAiIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYiAvZGVmOiIuXHpsaWIuZGVmIlwKLSAvb3V0OiIkKE9VVERJUikvemxpYi5kbGwiIC9pbXBsaWI6IiQoT1VURElSKS96bGliLmxpYiIgCi1ERUZfRklMRT0gXAotCSIuXHpsaWIuZGVmIgotTElOSzMyX09CSlM9IFwKLQkiJChJTlRESVIpXGFkbGVyMzIub2JqIiBcCi0JIiQoSU5URElSKVxjb21wcmVzcy5vYmoiIFwKLQkiJChJTlRESVIpXGNyYzMyLm9iaiIgXAotCSIkKElOVERJUilcZGVmbGF0ZS5vYmoiIFwKLQkiJChJTlRESVIpXGd2bWF0MzJjLm9iaiIgXAotCSIkKElOVERJUilcZ3ppby5vYmoiIFwKLQkiJChJTlRESVIpXGluZmJsb2NrLm9iaiIgXAotCSIkKElOVERJUilcaW5mY29kZXMub2JqIiBcCi0JIiQoSU5URElSKVxpbmZmYXN0Lm9iaiIgXAotCSIkKElOVERJUilcaW5mbGF0ZS5vYmoiIFwKLQkiJChJTlRESVIpXGluZnRyZWVzLm9iaiIgXAotCSIkKElOVERJUilcaW5mdXRpbC5vYmoiIFwKLQkiJChJTlRESVIpXHRyZWVzLm9iaiIgXAotCSIkKElOVERJUilcdW5jb21wci5vYmoiIFwKLQkiJChJTlRESVIpXHpsaWIucmVzIiBcCi0JIiQoSU5URElSKVx6dXRpbC5vYmoiIFwKLQkiLlxHVk1BVDMyLm9iaiIKLQotIiQoT1VURElSKVx6bGliLmRsbCIgOiAiJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJTkszMl9PQkpTKQotICAgICQoTElOSzMyKSBAPDwKLSAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCi08PAotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgRGVidWciCi0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMAotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgotIyBQUk9QIFVzZV9NRkMgMAotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQotIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnIgotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgotIyBQUk9QIFRhcmdldF9EaXIgIiIKLU9VVERJUj0uXERlYnVnCi1JTlRESVI9LlxEZWJ1ZwotCi1BTEwgOiAiJChPVVRESVIpXHpsaWIuZGxsIgotCi1DTEVBTiA6IAotCS1AZXJhc2UgIiQoSU5URElSKVxhZGxlcjMyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29tcHJlc3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjcmMzMi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRlZmxhdGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxndm1hdDMyYy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGd6aW8ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmZibG9jay5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZmNvZGVzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5mZmFzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZmxhdGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmZ0cmVlcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZnV0aWwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0cmVlcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVuY29tcHIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YzQwLmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmM0MC5wZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHpsaWIucmVzIgotCS1AZXJhc2UgIiQoSU5URElSKVx6dXRpbC5vYmoiCi0JLUBlcmFzZSAiJChPVVRESVIpXHpsaWIuZGxsIgotCS1AZXJhc2UgIiQoT1VURElSKVx6bGliLmV4cCIKLQktQGVyYXNlICIkKE9VVERJUilcemxpYi5pbGsiCi0JLUBlcmFzZSAiJChPVVRESVIpXHpsaWIubGliIgotCS1AZXJhc2UgIiQoT1VURElSKVx6bGliLnBkYiIKLQotIiQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIkKE9VVERJUikiCi0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL2MKLSMgQUREIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIl9XSU5ETEwiIC9EICJfV0lOMzIiIC9EICJCVUlMRF9aTElCRExMIiAvRCAiWkxJQl9ETEwiIC9ZWCAvYwotQ1BQX1BST0o9L25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiXAotIC9EICJfV0lORExMIiAvRCAiX1dJTjMyIiAvRCAiQlVJTERfWkxJQkRMTCIgL0QgIlpMSUJfRExMIlwKLSAvRnAiJChJTlRESVIpL3psaWJ2Yy5wY2giIC9ZWCAvRm8iJChJTlRESVIpLyIgL0ZkIiQoSU5URElSKS8iIC9jIAotQ1BQX09CSlM9LlxEZWJ1Zy8KLUNQUF9TQlJTPS5cLgotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvd2luMzIKLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC93aW4zMgotTVRMX1BST0o9L25vbG9nbyAvRCAiX0RFQlVHIiAvd2luMzIgCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwYyAvZCAiX0RFQlVHIgotIyBBREQgUlNDIC9sIDB4NDBjIC9kICJfREVCVUciCi1SU0NfUFJPSj0vbCAweDQwYyAvZm8iJChJTlRESVIpL3psaWIucmVzIiAvZCAiX0RFQlVHIiAKLUJTQzMyPWJzY21ha2UuZXhlCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KLSMgQUREIEJTQzMyIC9ub2xvZ28KLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChPVVRESVIpL3psaWJ2Yy5ic2MiIAotQlNDMzJfU0JSUz0gXAotCQotTElOSzMyPWxpbmsuZXhlCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2Ci0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiJEZWJ1Zy96bGliLmRsbCIKLUxJTkszMl9GTEFHUz1rZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYlwKLSBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvXAotIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9pbmNyZW1lbnRhbDp5ZXMgL3BkYjoiJChPVVRESVIpL3psaWIucGRiIiAvZGVidWdcCi0gL21hY2hpbmU6STM4NiAvZGVmOiIuXHpsaWIuZGVmIiAvb3V0OiIkKE9VVERJUikvemxpYi5kbGwiXAotIC9pbXBsaWI6IiQoT1VURElSKS96bGliLmxpYiIgCi1ERUZfRklMRT0gXAotCSIuXHpsaWIuZGVmIgotTElOSzMyX09CSlM9IFwKLQkiJChJTlRESVIpXGFkbGVyMzIub2JqIiBcCi0JIiQoSU5URElSKVxjb21wcmVzcy5vYmoiIFwKLQkiJChJTlRESVIpXGNyYzMyLm9iaiIgXAotCSIkKElOVERJUilcZGVmbGF0ZS5vYmoiIFwKLQkiJChJTlRESVIpXGd2bWF0MzJjLm9iaiIgXAotCSIkKElOVERJUilcZ3ppby5vYmoiIFwKLQkiJChJTlRESVIpXGluZmJsb2NrLm9iaiIgXAotCSIkKElOVERJUilcaW5mY29kZXMub2JqIiBcCi0JIiQoSU5URElSKVxpbmZmYXN0Lm9iaiIgXAotCSIkKElOVERJUilcaW5mbGF0ZS5vYmoiIFwKLQkiJChJTlRESVIpXGluZnRyZWVzLm9iaiIgXAotCSIkKElOVERJUilcaW5mdXRpbC5vYmoiIFwKLQkiJChJTlRESVIpXHRyZWVzLm9iaiIgXAotCSIkKElOVERJUilcdW5jb21wci5vYmoiIFwKLQkiJChJTlRESVIpXHpsaWIucmVzIiBcCi0JIiQoSU5URElSKVx6dXRpbC5vYmoiIFwKLQkiLlxHVk1BVDMyLm9iaiIKLQotIiQoT1VURElSKVx6bGliLmRsbCIgOiAiJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJTkszMl9PQkpTKQotICAgICQoTElOSzMyKSBAPDwKLSAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCi08PAotCi0hRU5ESUYgCi0KLS5jeyQoQ1BQX09CSlMpfS5vYmo6Ci0gICAkKENQUCkgJChDUFBfUFJPSikgJDwgIAotCi0uY3BweyQoQ1BQX09CSlMpfS5vYmo6Ci0gICAkKENQUCkgJChDUFBfUFJPSikgJDwgIAotCi0uY3h4eyQoQ1BQX09CSlMpfS5vYmo6Ci0gICAkKENQUCkgJChDUFBfUFJPSikgJDwgIAotCi0uY3skKENQUF9TQlJTKX0uc2JyOgotICAgJChDUFApICQoQ1BQX1BST0opICQ8ICAKLQotLmNwcHskKENQUF9TQlJTKX0uc2JyOgotICAgJChDUFApICQoQ1BQX1BST0opICQ8ICAKLQotLmN4eHskKENQUF9TQlJTKX0uc2JyOgotICAgJChDUFApICQoQ1BQX1BST0opICQ8ICAKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQmVnaW4gVGFyZ2V0Ci0KLSMgTmFtZSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZSIKLSMgTmFtZSAiemxpYnZjIC0gV2luMzIgRGVidWciCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBEZWJ1ZyIKLQotIUVORElGIAotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxhZGxlcjMyLmMKLURFUF9DUFBfQURMRVI9XAotCSIuXHpjb25mLmgiXAotCSIuXHpsaWIuaCJcCi0JCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCi0KLQotIiQoSU5URElSKVxhZGxlcjMyLm9iaiIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX0FETEVSKSAiJChJTlRESVIpIgotCi0iJChJTlRESVIpXGFkbGVyMzIuc2JyIiA6ICQoU09VUkNFKSAkKERFUF9DUFBfQURMRVIpICIkKElOVERJUikiCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgotCi0KLSIkKElOVERJUilcYWRsZXIzMi5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9BRExFUikgIiQoSU5URElSKSIKLQotCi0hRU5ESUYgCi0KLSMgRW5kIFNvdXJjZSBGaWxlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9Llxjb21wcmVzcy5jCi1ERVBfQ1BQX0NPTVBSPVwKLQkiLlx6Y29uZi5oIlwKLQkiLlx6bGliLmgiXAotCQotCi0hSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlIgotCi0KLSIkKElOVERJUilcY29tcHJlc3Mub2JqIiA6ICQoU09VUkNFKSAkKERFUF9DUFBfQ09NUFIpICIkKElOVERJUikiCi0KLSIkKElOVERJUilcY29tcHJlc3Muc2JyIiA6ICQoU09VUkNFKSAkKERFUF9DUFBfQ09NUFIpICIkKElOVERJUikiCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgotCi0KLSIkKElOVERJUilcY29tcHJlc3Mub2JqIiA6ICQoU09VUkNFKSAkKERFUF9DUFBfQ09NUFIpICIkKElOVERJUikiCi0KLQotIUVORElGIAotCi0jIEVuZCBTb3VyY2UgRmlsZQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cY3JjMzIuYwotREVQX0NQUF9DUkMzMj1cCi0JIi5cemNvbmYuaCJcCi0JIi5cemxpYi5oIlwKLQkKLQotIUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZSIKLQotCi0iJChJTlRESVIpXGNyYzMyLm9iaiIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX0NSQzMyKSAiJChJTlRESVIpIgotCi0iJChJTlRESVIpXGNyYzMyLnNiciIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX0NSQzMyKSAiJChJTlRESVIpIgotCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBEZWJ1ZyIKLQotCi0iJChJTlRESVIpXGNyYzMyLm9iaiIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX0NSQzMyKSAiJChJTlRESVIpIgotCi0KLSFFTkRJRiAKLQotIyBFbmQgU291cmNlIEZpbGUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGRlZmxhdGUuYwotCi0hSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlIgotCi1ERVBfQ1BQX0RFRkxBPVwKLQkiLlxkZWZsYXRlLmgiXAotCSIuXHpjb25mLmgiXAotCSIuXHpsaWIuaCJcCi0JIi5cenV0aWwuaCJcCi0JCi0KLSIkKElOVERJUilcZGVmbGF0ZS5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9ERUZMQSkgIiQoSU5URElSKSIKLQotIiQoSU5URElSKVxkZWZsYXRlLnNiciIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX0RFRkxBKSAiJChJTlRESVIpIgotCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBEZWJ1ZyIKLQotREVQX0NQUF9ERUZMQT1cCi0JIi5cZGVmbGF0ZS5oIlwKLQkiLlx6Y29uZi5oIlwKLQkiLlx6bGliLmgiXAotCSIuXHp1dGlsLmgiXAotCQotTk9ERVBfQ1BQX0RFRkxBPVwKLQkiLlxsb2NhbCJcCi0JCi0KLSIkKElOVERJUilcZGVmbGF0ZS5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9ERUZMQSkgIiQoSU5URElSKSIKLQotCi0hRU5ESUYgCi0KLSMgRW5kIFNvdXJjZSBGaWxlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxnemlvLmMKLURFUF9DUFBfR1pJT189XAotCSIuXHpjb25mLmgiXAotCSIuXHpsaWIuaCJcCi0JIi5cenV0aWwuaCJcCi0JCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCi0KLQotIiQoSU5URElSKVxnemlvLm9iaiIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX0daSU9fKSAiJChJTlRESVIpIgotCi0iJChJTlRESVIpXGd6aW8uc2JyIiA6ICQoU09VUkNFKSAkKERFUF9DUFBfR1pJT18pICIkKElOVERJUikiCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgotCi0KLSIkKElOVERJUilcZ3ppby5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9HWklPXykgIiQoSU5URElSKSIKLQotCi0hRU5ESUYgCi0KLSMgRW5kIFNvdXJjZSBGaWxlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxpbmZibG9jay5jCi1ERVBfQ1BQX0lORkJMPVwKLQkiLlxpbmZibG9jay5oIlwKLQkiLlxpbmZjb2Rlcy5oIlwKLQkiLlxpbmZ0cmVlcy5oIlwKLQkiLlxpbmZ1dGlsLmgiXAotCSIuXHpjb25mLmgiXAotCSIuXHpsaWIuaCJcCi0JIi5cenV0aWwuaCJcCi0JCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCi0KLQotIiQoSU5URElSKVxpbmZibG9jay5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9JTkZCTCkgIiQoSU5URElSKSIKLQotIiQoSU5URElSKVxpbmZibG9jay5zYnIiIDogJChTT1VSQ0UpICQoREVQX0NQUF9JTkZCTCkgIiQoSU5URElSKSIKLQotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgRGVidWciCi0KLQotIiQoSU5URElSKVxpbmZibG9jay5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9JTkZCTCkgIiQoSU5URElSKSIKLQotCi0hRU5ESUYgCi0KLSMgRW5kIFNvdXJjZSBGaWxlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxpbmZjb2Rlcy5jCi1ERVBfQ1BQX0lORkNPPVwKLQkiLlxpbmZibG9jay5oIlwKLQkiLlxpbmZjb2Rlcy5oIlwKLQkiLlxpbmZmYXN0LmgiXAotCSIuXGluZnRyZWVzLmgiXAotCSIuXGluZnV0aWwuaCJcCi0JIi5cemNvbmYuaCJcCi0JIi5cemxpYi5oIlwKLQkiLlx6dXRpbC5oIlwKLQkKLQotIUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZSIKLQotCi0iJChJTlRESVIpXGluZmNvZGVzLm9iaiIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX0lORkNPKSAiJChJTlRESVIpIgotCi0iJChJTlRESVIpXGluZmNvZGVzLnNiciIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX0lORkNPKSAiJChJTlRESVIpIgotCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBEZWJ1ZyIKLQotCi0iJChJTlRESVIpXGluZmNvZGVzLm9iaiIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX0lORkNPKSAiJChJTlRESVIpIgotCi0KLSFFTkRJRiAKLQotIyBFbmQgU291cmNlIEZpbGUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGluZmZhc3QuYwotREVQX0NQUF9JTkZGQT1cCi0JIi5caW5mYmxvY2suaCJcCi0JIi5caW5mY29kZXMuaCJcCi0JIi5caW5mZmFzdC5oIlwKLQkiLlxpbmZ0cmVlcy5oIlwKLQkiLlxpbmZ1dGlsLmgiXAotCSIuXHpjb25mLmgiXAotCSIuXHpsaWIuaCJcCi0JIi5cenV0aWwuaCJcCi0JCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCi0KLQotIiQoSU5URElSKVxpbmZmYXN0Lm9iaiIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX0lORkZBKSAiJChJTlRESVIpIgotCi0iJChJTlRESVIpXGluZmZhc3Quc2JyIiA6ICQoU09VUkNFKSAkKERFUF9DUFBfSU5GRkEpICIkKElOVERJUikiCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgotCi0KLSIkKElOVERJUilcaW5mZmFzdC5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9JTkZGQSkgIiQoSU5URElSKSIKLQotCi0hRU5ESUYgCi0KLSMgRW5kIFNvdXJjZSBGaWxlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxpbmZsYXRlLmMKLURFUF9DUFBfSU5GTEE9XAotCSIuXGluZmJsb2NrLmgiXAotCSIuXHpjb25mLmgiXAotCSIuXHpsaWIuaCJcCi0JIi5cenV0aWwuaCJcCi0JCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCi0KLQotIiQoSU5URElSKVxpbmZsYXRlLm9iaiIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX0lORkxBKSAiJChJTlRESVIpIgotCi0iJChJTlRESVIpXGluZmxhdGUuc2JyIiA6ICQoU09VUkNFKSAkKERFUF9DUFBfSU5GTEEpICIkKElOVERJUikiCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgotCi0KLSIkKElOVERJUilcaW5mbGF0ZS5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9JTkZMQSkgIiQoSU5URElSKSIKLQotCi0hRU5ESUYgCi0KLSMgRW5kIFNvdXJjZSBGaWxlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxpbmZ0cmVlcy5jCi1ERVBfQ1BQX0lORlRSPVwKLQkiLlxpbmZ0cmVlcy5oIlwKLQkiLlx6Y29uZi5oIlwKLQkiLlx6bGliLmgiXAotCSIuXHp1dGlsLmgiXAotCQotCi0hSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBSZWxlYXNlIgotCi0KLSIkKElOVERJUilcaW5mdHJlZXMub2JqIiA6ICQoU09VUkNFKSAkKERFUF9DUFBfSU5GVFIpICIkKElOVERJUikiCi0KLSIkKElOVERJUilcaW5mdHJlZXMuc2JyIiA6ICQoU09VUkNFKSAkKERFUF9DUFBfSU5GVFIpICIkKElOVERJUikiCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgotCi0KLSIkKElOVERJUilcaW5mdHJlZXMub2JqIiA6ICQoU09VUkNFKSAkKERFUF9DUFBfSU5GVFIpICIkKElOVERJUikiCi0KLQotIUVORElGIAotCi0jIEVuZCBTb3VyY2UgRmlsZQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5caW5mdXRpbC5jCi1ERVBfQ1BQX0lORlVUPVwKLQkiLlxpbmZibG9jay5oIlwKLQkiLlxpbmZjb2Rlcy5oIlwKLQkiLlxpbmZ0cmVlcy5oIlwKLQkiLlxpbmZ1dGlsLmgiXAotCSIuXHpjb25mLmgiXAotCSIuXHpsaWIuaCJcCi0JIi5cenV0aWwuaCJcCi0JCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCi0KLQotIiQoSU5URElSKVxpbmZ1dGlsLm9iaiIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX0lORlVUKSAiJChJTlRESVIpIgotCi0iJChJTlRESVIpXGluZnV0aWwuc2JyIiA6ICQoU09VUkNFKSAkKERFUF9DUFBfSU5GVVQpICIkKElOVERJUikiCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgotCi0KLSIkKElOVERJUilcaW5mdXRpbC5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9JTkZVVCkgIiQoSU5URElSKSIKLQotCi0hRU5ESUYgCi0KLSMgRW5kIFNvdXJjZSBGaWxlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9Llx0cmVlcy5jCi1ERVBfQ1BQX1RSRUVTPVwKLQkiLlxkZWZsYXRlLmgiXAotCSIuXHpjb25mLmgiXAotCSIuXHpsaWIuaCJcCi0JIi5cenV0aWwuaCJcCi0JCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCi0KLQotIiQoSU5URElSKVx0cmVlcy5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9UUkVFUykgIiQoSU5URElSKSIKLQotIiQoSU5URElSKVx0cmVlcy5zYnIiIDogJChTT1VSQ0UpICQoREVQX0NQUF9UUkVFUykgIiQoSU5URElSKSIKLQotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgRGVidWciCi0KLQotIiQoSU5URElSKVx0cmVlcy5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9UUkVFUykgIiQoSU5URElSKSIKLQotCi0hRU5ESUYgCi0KLSMgRW5kIFNvdXJjZSBGaWxlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9Llx1bmNvbXByLmMKLQotIUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZSIKLQotREVQX0NQUF9VTkNPTT1cCi0JIi5cemNvbmYuaCJcCi0JIi5cemxpYi5oIlwKLQkKLQotIiQoSU5URElSKVx1bmNvbXByLm9iaiIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX1VOQ09NKSAiJChJTlRESVIpIgotCi0iJChJTlRESVIpXHVuY29tcHIuc2JyIiA6ICQoU09VUkNFKSAkKERFUF9DUFBfVU5DT00pICIkKElOVERJUikiCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgotCi1ERVBfQ1BQX1VOQ09NPVwKLQkiLlx6Y29uZi5oIlwKLQkiLlx6bGliLmgiXAotCQotTk9ERVBfQ1BQX1VOQ09NPVwKLQkiLlx1bmNvbXByZXNzIlwKLQkKLQotIiQoSU5URElSKVx1bmNvbXByLm9iaiIgOiAkKFNPVVJDRSkgJChERVBfQ1BQX1VOQ09NKSAiJChJTlRESVIpIgotCi0KLSFFTkRJRiAKLQotIyBFbmQgU291cmNlIEZpbGUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXHp1dGlsLmMKLURFUF9DUFBfWlVUSUw9XAotCSIuXHpjb25mLmgiXAotCSIuXHpsaWIuaCJcCi0JIi5cenV0aWwuaCJcCi0JCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCi0KLQotIiQoSU5URElSKVx6dXRpbC5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9aVVRJTCkgIiQoSU5URElSKSIKLQotIiQoSU5URElSKVx6dXRpbC5zYnIiIDogJChTT1VSQ0UpICQoREVQX0NQUF9aVVRJTCkgIiQoSU5URElSKSIKLQotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgRGVidWciCi0KLQotIiQoSU5URElSKVx6dXRpbC5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9aVVRJTCkgIiQoSU5URElSKSIKLQotCi0hRU5ESUYgCi0KLSMgRW5kIFNvdXJjZSBGaWxlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9Llx6bGliLnJjCi0KLSIkKElOVERJUilcemxpYi5yZXMiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0gICAkKFJTQykgJChSU0NfUFJPSikgJChTT1VSQ0UpCi0KLQotIyBFbmQgU291cmNlIEZpbGUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXHpsaWIuZGVmCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJ6bGlidmMgLSBXaW4zMiBEZWJ1ZyIKLQotIUVORElGIAotCi0jIEVuZCBTb3VyY2UgRmlsZQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cR1ZNQVQzMi5vYmoKLQotIUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgUmVsZWFzZSIKLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIERlYnVnIgotCi0hRU5ESUYgCi0KLSMgRW5kIFNvdXJjZSBGaWxlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9Llxndm1hdDMyYy5jCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInpsaWJ2YyAtIFdpbjMyIFJlbGVhc2UiCi0KLURFUF9DUFBfR1ZNQVQ9XAotCSIuXGRlZmxhdGUuaCJcCi0JIi5cemNvbmYuaCJcCi0JIi5cemxpYi5oIlwKLQkiLlx6dXRpbC5oIlwKLQkKLQotIiQoSU5URElSKVxndm1hdDMyYy5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9HVk1BVCkgIiQoSU5URElSKSIKLQotIiQoSU5URElSKVxndm1hdDMyYy5zYnIiIDogJChTT1VSQ0UpICQoREVQX0NQUF9HVk1BVCkgIiQoSU5URElSKSIKLQotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiemxpYnZjIC0gV2luMzIgRGVidWciCi0KLURFUF9DUFBfR1ZNQVQ9XAotCSIuXGRlZmxhdGUuaCJcCi0JIi5cemNvbmYuaCJcCi0JIi5cemxpYi5oIlwKLQkiLlx6dXRpbC5oIlwKLQkKLQotIiQoSU5URElSKVxndm1hdDMyYy5vYmoiIDogJChTT1VSQ0UpICQoREVQX0NQUF9HVk1BVCkgIiQoSU5URElSKSIKLQotCi0hRU5ESUYgCi0KLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEVuZCBUYXJnZXQKLSMgRW5kIFByb2plY3QKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcmMzMi5jIGIvY3JjMzIuYwppbmRleCBjYzk4NTFlLi5hOTExMDFhIDEwMDY0NAotLS0gYS9jcmMzMi5jCisrKyBiL2NyYzMyLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBhc20gdmVyc2lvbnMgb2YgY3JjMzIoKQogICovCi1jb25zdCB1TG9uZ2YgKiBFWFBPUlQgZ2V0X2NyY190YWJsZSgpCitjb25zdCB1TG9uZ2YgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUoKQogewogI2lmZGVmIERZTkFNSUNfQ1JDX1RBQkxFCiAgIGlmIChjcmNfdGFibGVfZW1wdHkpIG1ha2VfY3JjX3RhYmxlKCk7CkBAIC0xMzksNyArMTM5LDcgQEAKICNkZWZpbmUgRE84KGJ1ZikgIERPNChidWYpOyBETzQoYnVmKTsKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotdUxvbmcgRVhQT1JUIGNyYzMyKGNyYywgYnVmLCBsZW4pCit1TG9uZyBaRVhQT1JUIGNyYzMyKGNyYywgYnVmLCBsZW4pCiAgICAgdUxvbmcgY3JjOwogICAgIGNvbnN0IEJ5dGVmICpidWY7CiAgICAgdUludCBsZW47CmRpZmYgLS1naXQgYS9kZWZsYXRlLmMgYi9kZWZsYXRlLmMKaW5kZXggMTZkNmExZC4uZTljMTRkNyAxMDA2NDQKLS0tIGEvZGVmbGF0ZS5jCisrKyBiL2RlZmxhdGUuYwpAQCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgImRlZmxhdGUuaCIKIAogY29uc3QgY2hhciBkZWZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgZGVmbGF0ZSAxLjAuOCBDb3B5cmlnaHQgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkgIjsKKyAgICIgZGVmbGF0ZSAxLjAuOSBDb3B5cmlnaHQgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtODAsNyArODAsNyBAQAogbG9jYWwgdm9pZCBsbV9pbml0ICAgICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogbG9jYWwgdm9pZCBwdXRTaG9ydE1TQiAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgdUludCBiKSk7CiBsb2NhbCB2b2lkIGZsdXNoX3BlbmRpbmcgIE9GKCh6X3N0cmVhbXAgc3RybSkpOwotbG9jYWwgaW50IHJlYWRfYnVmICAgICAgICBPRigoel9zdHJlYW1wIHN0cm0sIGNoYXJmICpidWYsIHVuc2lnbmVkIHNpemUpKTsKK2xvY2FsIGludCByZWFkX2J1ZiAgICAgICAgT0YoKHpfc3RyZWFtcCBzdHJtLCBCeXRlZiAqYnVmLCB1bnNpZ25lZCBzaXplKSk7CiAjaWZkZWYgQVNNVgogICAgICAgdm9pZCBtYXRjaF9pbml0IE9GKCh2b2lkKSk7IC8qIGFzbSBjb2RlIGluaXRpYWxpemF0aW9uICovCiAgICAgICB1SW50IGxvbmdlc3RfbWF0Y2ggIE9GKChkZWZsYXRlX3N0YXRlICpzLCBJUG9zIGN1cl9tYXRjaCkpOwpAQCAtMTc1LDEwICsxNzUsMTAgQEAKICAqLwogI2RlZmluZSBDTEVBUl9IQVNIKHMpIFwKICAgICBzLT5oZWFkW3MtPmhhc2hfc2l6ZS0xXSA9IE5JTDsgXAotICAgIHptZW16ZXJvKChjaGFyZiAqKXMtPmhlYWQsICh1bnNpZ25lZCkocy0+aGFzaF9zaXplLTEpKnNpemVvZigqcy0+aGVhZCkpOworICAgIHptZW16ZXJvKChCeXRlZiAqKXMtPmhlYWQsICh1bnNpZ25lZCkocy0+aGFzaF9zaXplLTEpKnNpemVvZigqcy0+aGVhZCkpOwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi1pbnQgRVhQT1JUIGRlZmxhdGVJbml0XyhzdHJtLCBsZXZlbCwgdmVyc2lvbiwgc3RyZWFtX3NpemUpCitpbnQgWkVYUE9SVCBkZWZsYXRlSW5pdF8oc3RybSwgbGV2ZWwsIHZlcnNpb24sIHN0cmVhbV9zaXplKQogICAgIHpfc3RyZWFtcCBzdHJtOwogICAgIGludCBsZXZlbDsKICAgICBjb25zdCBjaGFyICp2ZXJzaW9uOwpAQCAtMTkwLDcgKzE5MCw3IEBACiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLWludCBFWFBPUlQgZGVmbGF0ZUluaXQyXyhzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksCitpbnQgWkVYUE9SVCBkZWZsYXRlSW5pdDJfKHN0cm0sIGxldmVsLCBtZXRob2QsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSwKIAkJICB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkKICAgICB6X3N0cmVhbXAgc3RybTsKICAgICBpbnQgIGxldmVsOwpAQCAtMjc2LDcgKzI3Niw3IEBACiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLWludCBFWFBPUlQgZGVmbGF0ZVNldERpY3Rpb25hcnkgKHN0cm0sIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpCitpbnQgWkVYUE9SVCBkZWZsYXRlU2V0RGljdGlvbmFyeSAoc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCkKICAgICB6X3N0cmVhbXAgc3RybTsKICAgICBjb25zdCBCeXRlZiAqZGljdGlvbmFyeTsKICAgICB1SW50ICBkaWN0TGVuZ3RoOwpAQCAtMjk5LDcgKzI5OSw3IEBACiAJZGljdGlvbmFyeSArPSBkaWN0TGVuZ3RoIC0gbGVuZ3RoOyAvKiB1c2UgdGhlIHRhaWwgb2YgdGhlIGRpY3Rpb25hcnkgKi8KICNlbmRpZgogICAgIH0KLSAgICB6bWVtY3B5KChjaGFyZiAqKXMtPndpbmRvdywgZGljdGlvbmFyeSwgbGVuZ3RoKTsKKyAgICB6bWVtY3B5KHMtPndpbmRvdywgZGljdGlvbmFyeSwgbGVuZ3RoKTsKICAgICBzLT5zdHJzdGFydCA9IGxlbmd0aDsKICAgICBzLT5ibG9ja19zdGFydCA9IChsb25nKWxlbmd0aDsKIApAQCAtMzE3LDcgKzMxNyw3IEBACiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLWludCBFWFBPUlQgZGVmbGF0ZVJlc2V0IChzdHJtKQoraW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IChzdHJtKQogICAgIHpfc3RyZWFtcCBzdHJtOwogewogICAgIGRlZmxhdGVfc3RhdGUgKnM7CkBAIC0zNDcsNyArMzQ3LDcgQEAKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotaW50IEVYUE9SVCBkZWZsYXRlUGFyYW1zKHN0cm0sIGxldmVsLCBzdHJhdGVneSkKK2ludCBaRVhQT1JUIGRlZmxhdGVQYXJhbXMoc3RybSwgbGV2ZWwsIHN0cmF0ZWd5KQogICAgIHpfc3RyZWFtcCBzdHJtOwogICAgIGludCBsZXZlbDsKICAgICBpbnQgc3RyYXRlZ3k7CkBAIC00MjEsNyArNDIxLDcgQEAKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotaW50IEVYUE9SVCBkZWZsYXRlIChzdHJtLCBmbHVzaCkKK2ludCBaRVhQT1JUIGRlZmxhdGUgKHN0cm0sIGZsdXNoKQogICAgIHpfc3RyZWFtcCBzdHJtOwogICAgIGludCBmbHVzaDsKIHsKQEAgLTU1NSw3ICs1NTUsNyBAQAogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi1pbnQgRVhQT1JUIGRlZmxhdGVFbmQgKHN0cm0pCitpbnQgWkVYUE9SVCBkZWZsYXRlRW5kIChzdHJtKQogICAgIHpfc3RyZWFtcCBzdHJtOwogewogICAgIGludCBzdGF0dXM7CkBAIC01ODUsNyArNTg1LDcgQEAKICAqIFRvIHNpbXBsaWZ5IHRoZSBzb3VyY2UsIHRoaXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgMTYtYml0IE1TRE9TICh3aGljaAogICogZG9lc24ndCBoYXZlIGVub3VnaCBtZW1vcnkgYW55d2F5IHRvIGR1cGxpY2F0ZSBjb21wcmVzc2lvbiBzdGF0ZXMpLgogICovCi1pbnQgRVhQT1JUIGRlZmxhdGVDb3B5IChkZXN0LCBzb3VyY2UpCitpbnQgWkVYUE9SVCBkZWZsYXRlQ29weSAoZGVzdCwgc291cmNlKQogICAgIHpfc3RyZWFtcCBkZXN0OwogICAgIHpfc3RyZWFtcCBzb3VyY2U7CiB7CkBAIC02NDcsNyArNjQ3LDcgQEAKICAqLwogbG9jYWwgaW50IHJlYWRfYnVmKHN0cm0sIGJ1Ziwgc2l6ZSkKICAgICB6X3N0cmVhbXAgc3RybTsKLSAgICBjaGFyZiAqYnVmOworICAgIEJ5dGVmICpidWY7CiAgICAgdW5zaWduZWQgc2l6ZTsKIHsKICAgICB1bnNpZ25lZCBsZW4gPSBzdHJtLT5hdmFpbF9pbjsKQEAgLTg1Nyw4ICs4NTcsOCBAQAogICAgIGludCBsZW5ndGg7CiB7CiAgICAgLyogY2hlY2sgdGhhdCB0aGUgbWF0Y2ggaXMgaW5kZWVkIGEgbWF0Y2ggKi8KLSAgICBpZiAoem1lbWNtcCgoY2hhcmYgKilzLT53aW5kb3cgKyBtYXRjaCwKLSAgICAgICAgICAgICAgICAoY2hhcmYgKilzLT53aW5kb3cgKyBzdGFydCwgbGVuZ3RoKSAhPSBFUVVBTCkgeworICAgIGlmICh6bWVtY21wKHMtPndpbmRvdyArIG1hdGNoLAorICAgICAgICAgICAgICAgIHMtPndpbmRvdyArIHN0YXJ0LCBsZW5ndGgpICE9IEVRVUFMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHN0YXJ0ICV1LCBtYXRjaCAldSwgbGVuZ3RoICVkXG4iLAogCQlzdGFydCwgbWF0Y2gsIGxlbmd0aCk7CiAgICAgICAgIGRvIHsKQEAgLTkxMSw4ICs5MTEsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgfSBlbHNlIGlmIChzLT5zdHJzdGFydCA+PSB3c2l6ZStNQVhfRElTVChzKSkgewogCi0gICAgICAgICAgICB6bWVtY3B5KChjaGFyZiAqKXMtPndpbmRvdywgKGNoYXJmICopcy0+d2luZG93K3dzaXplLAotICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCl3c2l6ZSk7CisgICAgICAgICAgICB6bWVtY3B5KHMtPndpbmRvdywgcy0+d2luZG93K3dzaXplLCAodW5zaWduZWQpd3NpemUpOwogICAgICAgICAgICAgcy0+bWF0Y2hfc3RhcnQgLT0gd3NpemU7CiAgICAgICAgICAgICBzLT5zdHJzdGFydCAgICAtPSB3c2l6ZTsgLyogd2Ugbm93IGhhdmUgc3Ryc3RhcnQgPj0gTUFYX0RJU1QgKi8KICAgICAgICAgICAgIHMtPmJsb2NrX3N0YXJ0IC09IChsb25nKSB3c2l6ZTsKQEAgLTk1Niw4ICs5NTUsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgQXNzZXJ0KG1vcmUgPj0gMiwgIm1vcmUgPCAyIik7CiAKLSAgICAgICAgbiA9IHJlYWRfYnVmKHMtPnN0cm0sIChjaGFyZiAqKXMtPndpbmRvdyArIHMtPnN0cnN0YXJ0ICsgcy0+bG9va2FoZWFkLAotICAgICAgICAgICAgICAgICAgICAgbW9yZSk7CisgICAgICAgIG4gPSByZWFkX2J1ZihzLT5zdHJtLCBzLT53aW5kb3cgKyBzLT5zdHJzdGFydCArIHMtPmxvb2thaGVhZCwgbW9yZSk7CiAgICAgICAgIHMtPmxvb2thaGVhZCArPSBuOwogCiAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGhhc2ggdmFsdWUgbm93IHRoYXQgd2UgaGF2ZSBzb21lIGlucHV0OiAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZS5jIGIvZXhhbXBsZS5jCmluZGV4IDY1NmFiMzcuLjViMzQwNGEgMTAwNjQ0Ci0tLSBhL2V4YW1wbGUuYworKysgYi9leGFtcGxlLmMKQEAgLTk1LDcgKzk1LDExIEBACiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogICAgIGd6cHV0YyhmaWxlLCAnaCcpOwotICAgIGlmIChnenByaW50ZihmaWxlLCAiJXMsICVzISIsICJlbGxvIiwgImhlbGxvIikgIT0gbGVuLTIpIHsKKyAgICBpZiAoZ3pwdXRzKGZpbGUsICJlbGxvIikgIT0gNCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd6cHV0cyBlcnI6ICVzXG4iLCBnemVycm9yKGZpbGUsICZlcnIpKTsKKwlleGl0KDEpOworICAgIH0KKyAgICBpZiAoZ3pwcmludGYoZmlsZSwgIiwgJXMhIiwgImhlbGxvIikgIT0gOCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd6cHJpbnRmIGVycjogJXNcbiIsIGd6ZXJyb3IoZmlsZSwgJmVycikpOwogCWV4aXQoMSk7CiAgICAgfQpAQCAtMTMyLDE2ICsxMzYsMTcgQEAKIAlleGl0KDEpOwogICAgIH0KIAotICAgIHVuY29tcHJMZW4gPSBnenJlYWQoZmlsZSwgdW5jb21wciwgKHVuc2lnbmVkKXVuY29tcHJMZW4pOwotICAgIGlmICh1bmNvbXByTGVuICE9IDcpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJnenJlYWQgZXJyIGFmdGVyIGd6c2VlazogJXNcbiIsIGd6ZXJyb3IoZmlsZSwgJmVycikpOworICAgIGd6Z2V0cyhmaWxlLCAoY2hhciopdW5jb21wciwgdW5jb21wckxlbik7CisgICAgdW5jb21wckxlbiA9IHN0cmxlbigoY2hhciopdW5jb21wcik7CisgICAgaWYgKHVuY29tcHJMZW4gIT0gNikgeyAvKiAiaGVsbG8hIiAqLworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd6Z2V0cyBlcnIgYWZ0ZXIgZ3pzZWVrOiAlc1xuIiwgZ3plcnJvcihmaWxlLCAmZXJyKSk7CiAJZXhpdCgxKTsKICAgICB9CiAgICAgaWYgKHN0cmNtcCgoY2hhciopdW5jb21wciwgaGVsbG8rNykpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgZ3pyZWFkIGFmdGVyIGd6c2Vla1xuIik7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmFkIGd6Z2V0cyBhZnRlciBnenNlZWtcbiIpOwogCWV4aXQoMSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmKCJnenJlYWQoKSBhZnRlciBnenNlZWs6ICVzXG4iLCB1bmNvbXByKTsKKyAgICAgICAgcHJpbnRmKCJnemdldHMoKSBhZnRlciBnenNlZWs6ICVzXG4iLCB1bmNvbXByKTsKICAgICB9CiAKICAgICBnemNsb3NlKGZpbGUpOwpkaWZmIC0tZ2l0IGEvZ3ppby5jIGIvZ3ppby5jCmluZGV4IGE5YWE4MzAuLmI4MTY0OTQgMTAwNjQ0Ci0tLSBhL2d6aW8uYworKysgYi9nemlvLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIE9wZW5zIGEgZ3ppcCAoLmd6KSBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuCiAqLwotZ3pGaWxlIEVYUE9SVCBnem9wZW4gKHBhdGgsIG1vZGUpCitnekZpbGUgWkVYUE9SVCBnem9wZW4gKHBhdGgsIG1vZGUpCiAgICAgY29uc3QgY2hhciAqcGF0aDsKICAgICBjb25zdCBjaGFyICptb2RlOwogewpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgIEFzc29jaWF0ZSBhIGd6RmlsZSB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuIGZkIGlzIG5vdCBkdXAnZWQgaGVyZQogICAgdG8gbWltaWMgdGhlIGJlaGF2aW8odSlyIG9mIGZkb3Blbi4KICovCi1nekZpbGUgRVhQT1JUIGd6ZG9wZW4gKGZkLCBtb2RlKQorZ3pGaWxlIFpFWFBPUlQgZ3pkb3BlbiAoZmQsIG1vZGUpCiAgICAgaW50IGZkOwogICAgIGNvbnN0IGNoYXIgKm1vZGU7CiB7CkBAIC0xOTMsNyArMTkzLDcgQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBhbmQgc3RyYXRlZ3kKICAqLwotaW50IEVYUE9SVCBnenNldHBhcmFtcyAoZmlsZSwgbGV2ZWwsIHN0cmF0ZWd5KQoraW50IFpFWFBPUlQgZ3pzZXRwYXJhbXMgKGZpbGUsIGxldmVsLCBzdHJhdGVneSkKICAgICBnekZpbGUgZmlsZTsKICAgICBpbnQgbGV2ZWw7CiAgICAgaW50IHN0cmF0ZWd5OwpAQCAtMzM5LDcgKzMzOSw3IEBACiAgICAgIFJlYWRzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4KICAgIGd6cmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVhZCAoMCBmb3IgZW5kIG9mIGZpbGUpLgogKi8KLWludCBFWFBPUlQgZ3pyZWFkIChmaWxlLCBidWYsIGxlbikKK2ludCBaRVhQT1JUIGd6cmVhZCAoZmlsZSwgYnVmLCBsZW4pCiAgICAgZ3pGaWxlIGZpbGU7CiAgICAgdm9pZHAgYnVmOwogICAgIHVuc2lnbmVkIGxlbjsKQEAgLTM3NSw3ICszNzUsMTAgQEAKIAkJcy0+c3RyZWFtLmF2YWlsX291dCAtPSBmcmVhZChuZXh0X291dCwgMSwgcy0+c3RyZWFtLmF2YWlsX291dCwKIAkJCQkJICAgICBzLT5maWxlKTsKIAkgICAgfQotCSAgICByZXR1cm4gKGludCkobGVuIC0gcy0+c3RyZWFtLmF2YWlsX291dCk7CisJICAgIGxlbiAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OworCSAgICBzLT5zdHJlYW0udG90YWxfaW4gICs9ICh1TG9uZylsZW47CisJICAgIHMtPnN0cmVhbS50b3RhbF9vdXQgKz0gKHVMb25nKWxlbjsKKwkgICAgcmV0dXJuIChpbnQpbGVuOwogCX0KICAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9PSAwICYmICFzLT56X2VvZikgewogCkBAIC00MjUsNyArNDI4LDcgQEAKICAgICAgIFJlYWRzIG9uZSBieXRlIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gZ3pnZXRjIHJldHVybnMgdGhpcyBieXRlCiAgICBvciAtMSBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLgogKi8KLWludCBFWFBPUlQgZ3pnZXRjKGZpbGUpCitpbnQgWkVYUE9SVCBnemdldGMoZmlsZSkKICAgICBnekZpbGUgZmlsZTsKIHsKICAgICB1bnNpZ25lZCBjaGFyIGM7CkBAIC00MzQsMTIgKzQzNywzNSBAQAogfQogCiAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgUmVhZHMgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIHVudGlsIGxlbi0xIGNoYXJhY3RlcnMgYXJlCisgICByZWFkLCBvciBhIG5ld2xpbmUgY2hhcmFjdGVyIGlzIHJlYWQgYW5kIHRyYW5zZmVycmVkIHRvIGJ1Ziwgb3IgYW4KKyAgIGVuZC1vZi1maWxlIGNvbmRpdGlvbiBpcyBlbmNvdW50ZXJlZC4gIFRoZSBzdHJpbmcgaXMgdGhlbiB0ZXJtaW5hdGVkCisgICB3aXRoIGEgbnVsbCBjaGFyYWN0ZXIuCisgICAgICBnemdldHMgcmV0dXJucyBidWYsIG9yIFpfTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorCisgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgb3B0aW1pemVkIGF0IGFsbC4KKyovCitjaGFyICogWkVYUE9SVCBnemdldHMoZmlsZSwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGZpbGU7CisgICAgY2hhciAqYnVmOworICAgIGludCBsZW47Cit7CisgICAgY2hhciAqYiA9IGJ1ZjsKKyAgICBpZiAoYnVmID09IFpfTlVMTCB8fCBsZW4gPD0gMCkgcmV0dXJuIFpfTlVMTDsKKworICAgIHdoaWxlICgtLWxlbiA+IDAgJiYgZ3pyZWFkKGZpbGUsIGJ1ZiwgMSkgPT0gMSAmJiAqYnVmKysgIT0gJ1xuJykgOworICAgICpidWYgPSAnXDAnOworICAgIHJldHVybiBiID09IGJ1ZiAmJiBsZW4gPiAwID8gWl9OVUxMIDogYjsKK30KKworCiAjaWZuZGVmIE5PX0RFRkxBVEUKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgogICAgZ3p3cml0ZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiAoMCBpbiBjYXNlIG9mIGVycm9yKS4KICovCi1pbnQgRVhQT1JUIGd6d3JpdGUgKGZpbGUsIGJ1ZiwgbGVuKQoraW50IFpFWFBPUlQgZ3p3cml0ZSAoZmlsZSwgYnVmLCBsZW4pCiAgICAgZ3pGaWxlIGZpbGU7CiAgICAgY29uc3Qgdm9pZHAgYnVmOwogICAgIHVuc2lnbmVkIGxlbjsKQEAgLTQ3OCw3ICs1MDQsNyBAQAogI2lmZGVmIFNUREMKICNpbmNsdWRlIDxzdGRhcmcuaD4KIAotaW50IEVYUE9SVFZBIGd6cHJpbnRmIChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAvKiBhcmdzICovIC4uLikKK2ludCBaRVhQT1JUVkEgZ3pwcmludGYgKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC8qIGFyZ3MgKi8gLi4uKQogewogICAgIGNoYXIgYnVmW1pfQlVGU0laRV07CiAgICAgdmFfbGlzdCB2YTsKQEAgLTQ4NiwxOCArNTEyLDE5IEBACiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKICNpZmRlZiBIQVNfdnNucHJpbnRmCi0gICAgbGVuID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgdmEpOworICAgICh2b2lkKXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHZhKTsKICNlbHNlCi0gICAgbGVuID0gdnNwcmludGYoYnVmLCBmb3JtYXQsIHZhKTsKKyAgICAodm9pZCl2c3ByaW50ZihidWYsIGZvcm1hdCwgdmEpOwogI2VuZGlmCiAgICAgdmFfZW5kKHZhKTsKKyAgICBsZW4gPSBzdHJsZW4oYnVmKTsgLyogc29tZSAqc3ByaW50ZiBkb24ndCByZXR1cm4gdGhlIG5iIG9mIGJ5dGVzIHdyaXR0ZW4gKi8KICAgICBpZiAobGVuIDw9IDApIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgYnVmLCAodW5zaWduZWQpbGVuKTsKIH0KICNlbHNlIC8qIG5vdCBBTlNJIEMgKi8KIAotaW50IEVYUE9SVFZBIGd6cHJpbnRmIChmaWxlLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKK2ludCBaRVhQT1JUVkEgZ3pwcmludGYgKGZpbGUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLAogCSAgICAgICAgICAgICAgIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCkKICAgICBnekZpbGUgZmlsZTsKICAgICBjb25zdCBjaGFyICpmb3JtYXQ7CkBAIC01MjUsNyArNTUyLDcgQEAKICAgICAgIFdyaXRlcyBjLCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQgY2hhciwgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgogICAgZ3pwdXRjIHJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCiAqLwotaW50IEVYUE9SVCBnenB1dGMoZmlsZSwgYykKK2ludCBaRVhQT1JUIGd6cHV0YyhmaWxlLCBjKQogICAgIGd6RmlsZSBmaWxlOwogICAgIGludCBjOwogewpAQCAtNTM2LDYgKzU2MywxOSBAQAogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgV3JpdGVzIHRoZSBnaXZlbiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUsIGV4Y2x1ZGluZworICAgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLgorICAgICAgZ3pwdXRzIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCisqLworaW50IFpFWFBPUlQgZ3pwdXRzKGZpbGUsIHMpCisgICAgZ3pGaWxlIGZpbGU7CisgICAgY29uc3QgY2hhciAqczsKK3sKKyAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCAoY29uc3Qgdm9pZHApcywgKHVuc2lnbmVkKXN0cmxlbihzKSk7Cit9CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4gVGhlIHBhcmFtZXRlcgogICAgZmx1c2ggaXMgYXMgaW4gdGhlIGRlZmxhdGUoKSBmdW5jdGlvbi4KICovCkBAIC01NzgsNyArNjE4LDcgQEAKICAgICByZXR1cm4gIHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCA/IFpfT0sgOiBzLT56X2VycjsKIH0KIAotaW50IEVYUE9SVCBnemZsdXNoIChmaWxlLCBmbHVzaCkKK2ludCBaRVhQT1JUIGd6Zmx1c2ggKGZpbGUsIGZsdXNoKQogICAgICBnekZpbGUgZmlsZTsKICAgICAgaW50IGZsdXNoOwogewpAQCAtNTk5LDE3ICs2MzksMTcgQEAKICAgICAgIFNFRUtfRU5EIGlzIG5vdCBpbXBsZW1lbnRlZCwgcmV0dXJucyBlcnJvci4KICAgICAgIEluIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgZ3pzZWVrIGNhbiBiZSBleHRyZW1lbHkgc2xvdy4KICovCi16X29mZl90IEVYUE9SVCBnenNlZWsgKGZpbGUsIG9mZnNldCwgd2hlbmNlKQorel9vZmZfdCBaRVhQT1JUIGd6c2VlayAoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpCiAgICAgZ3pGaWxlIGZpbGU7CiAgICAgel9vZmZfdCBvZmZzZXQ7CiAgICAgaW50IHdoZW5jZTsKIHsKICAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwogCi0gICAgaWYgKHMgPT0gTlVMTCB8fCB3aGVuY2UgPT0gU0VFS19FTkQgfHwgcy0+el9lcnIgPT0gWl9FUlJOTykgcmV0dXJuIC0xTDsKLQotICAgIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7CisgICAgaWYgKHMgPT0gTlVMTCB8fCB3aGVuY2UgPT0gU0VFS19FTkQgfHwKKwlzLT56X2VyciA9PSBaX0VSUk5PIHx8IHMtPnpfZXJyID09IFpfREFUQV9FUlJPUikgeworCXJldHVybiAtMUw7CisgICAgfQogICAgIAogICAgIGlmIChzLT5tb2RlID09ICd3JykgewogI2lmZGVmIE5PX0RFRkxBVEUKQEAgLTYzOSw4ICs2NzksNiBAQAogICAgIH0KICAgICAvKiBSZXN0IG9mIGZ1bmN0aW9uIGlzIGZvciByZWFkaW5nIG9ubHkgKi8KIAotICAgIGlmIChzLT56X2VyciA9PSBaX0RBVEFfRVJST1IpIHJldHVybiAtMUw7Ci0KICAgICAvKiBjb21wdXRlIGFic29sdXRlIHBvc2l0aW9uICovCiAgICAgaWYgKHdoZW5jZSA9PSBTRUVLX0NVUikgewogCW9mZnNldCArPSBzLT5zdHJlYW0udG90YWxfb3V0OwpAQCAtNjUxLDcgKzY4OSw5IEBACiAJLyogbWFwIHRvIGZzZWVrICovCiAJcy0+c3RyZWFtLmF2YWlsX2luID0gMDsKIAlzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotCWlmIChmc2VlayhzLT5maWxlLCBvZmZzZXQsIFNFRUtfU0VUKSA8IDApIHJldHVybiAtMUw7CisgICAgICAgIGlmIChmc2VlayhzLT5maWxlLCBvZmZzZXQsIFNFRUtfU0VUKSA8IDApIHJldHVybiAtMUw7CisKKwlzLT5zdHJlYW0udG90YWxfaW4gPSBzLT5zdHJlYW0udG90YWxfb3V0ID0gKHVMb25nKW9mZnNldDsKIAlyZXR1cm4gb2Zmc2V0OwogICAgIH0KIApAQCAtNjgwLDcgKzcyMCw3IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgUmV3aW5kcyBpbnB1dCBmaWxlLiAKICovCi1pbnQgRVhQT1JUIGd6cmV3aW5kIChmaWxlKQoraW50IFpFWFBPUlQgZ3pyZXdpbmQgKGZpbGUpCiAgICAgZ3pGaWxlIGZpbGU7CiB7CiAgICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKQEAgLTcwNiw3ICs3NDYsNyBAQAogICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBUaGlzIHBvc2l0aW9uIHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCiAgICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uCiAqLwotel9vZmZfdCBFWFBPUlQgZ3p0ZWxsIChmaWxlKQorel9vZmZfdCBaRVhQT1JUIGd6dGVsbCAoZmlsZSkKICAgICBnekZpbGUgZmlsZTsKIHsKICAgICByZXR1cm4gZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX0NVUik7CkBAIC03MTYsNyArNzU2LDcgQEAKICAgICAgUmV0dXJucyAxIHdoZW4gRU9GIGhhcyBwcmV2aW91c2x5IGJlZW4gZGV0ZWN0ZWQgcmVhZGluZyB0aGUgZ2l2ZW4KICAgIGlucHV0IHN0cmVhbSwgb3RoZXJ3aXNlIHplcm8uCiAqLwotaW50IEVYUE9SVCBnemVvZiAoZmlsZSkKK2ludCBaRVhQT1JUIGd6ZW9mIChmaWxlKQogICAgIGd6RmlsZSBmaWxlOwogewogICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7CkBAIC03NTksNyArNzk5LDcgQEAKICAgICAgRmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaWYgbmVjZXNzYXJ5LCBjbG9zZXMgdGhlIGNvbXByZXNzZWQgZmlsZQogICAgYW5kIGRlYWxsb2NhdGVzIGFsbCB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlLgogKi8KLWludCBFWFBPUlQgZ3pjbG9zZSAoZmlsZSkKK2ludCBaRVhQT1JUIGd6Y2xvc2UgKGZpbGUpCiAgICAgZ3pGaWxlIGZpbGU7CiB7CiAgICAgaW50IGVycjsKQEAgLTc4OCw3ICs4MjgsNyBAQAogICAgZXJybnVtIGlzIHNldCB0byBaX0VSUk5PIGFuZCB0aGUgYXBwbGljYXRpb24gbWF5IGNvbnN1bHQgZXJybm8KICAgIHRvIGdldCB0aGUgZXhhY3QgZXJyb3IgY29kZS4KICovCi1jb25zdCBjaGFyKiAgRVhQT1JUIGd6ZXJyb3IgKGZpbGUsIGVycm51bSkKK2NvbnN0IGNoYXIqICBaRVhQT1JUIGd6ZXJyb3IgKGZpbGUsIGVycm51bSkKICAgICBnekZpbGUgZmlsZTsKICAgICBpbnQgKmVycm51bTsKIHsKZGlmZiAtLWdpdCBhL2luZmJsb2NrLmMgYi9pbmZibG9jay5jCmluZGV4IDdlOWM3YWYuLjE3OTQzYWIgMTAwNjQ0Ci0tLSBhL2luZmJsb2NrLmMKKysrIGIvaW5mYmxvY2suYwpAQCAtNzEsMTEgKzcxLDcgQEAKICAgaWYgKHMtPm1vZGUgPT0gQlRSRUUgfHwgcy0+bW9kZSA9PSBEVFJFRSkKICAgICBaRlJFRSh6LCBzLT5zdWIudHJlZXMuYmxlbnMpOwogICBpZiAocy0+bW9kZSA9PSBDT0RFUykKLSAgewogICAgIGluZmxhdGVfY29kZXNfZnJlZShzLT5zdWIuZGVjb2RlLmNvZGVzLCB6KTsKLSAgICBpbmZsYXRlX3RyZWVzX2ZyZWUocy0+c3ViLmRlY29kZS50ZCwgeik7Ci0gICAgaW5mbGF0ZV90cmVlc19mcmVlKHMtPnN1Yi5kZWNvZGUudGwsIHopOwotICB9CiAgIHMtPm1vZGUgPSBUWVBFOwogICBzLT5iaXRrID0gMDsKICAgcy0+Yml0YiA9IDA7CkBAIC05Niw4ICs5MiwxNSBAQAogICBpZiAoKHMgPSAoaW5mbGF0ZV9ibG9ja3Nfc3RhdGVmICopWkFMTE9DCiAgICAgICAgKHosMSxzaXplb2Yoc3RydWN0IGluZmxhdGVfYmxvY2tzX3N0YXRlKSkpID09IFpfTlVMTCkKICAgICByZXR1cm4gczsKKyAgaWYgKChzLT5odWZ0cyA9CisgICAgICAgKGluZmxhdGVfaHVmdCAqKVpBTExPQyh6LCBzaXplb2YoaW5mbGF0ZV9odWZ0KSwgTUFOWSkpID09IFpfTlVMTCkKKyAgeworICAgIFpGUkVFKHosIHMpOworICAgIHJldHVybiBaX05VTEw7CisgIH0KICAgaWYgKChzLT53aW5kb3cgPSAoQnl0ZWYgKilaQUxMT0MoeiwgMSwgdykpID09IFpfTlVMTCkKICAgeworICAgIFpGUkVFKHosIHMtPmh1ZnRzKTsKICAgICBaRlJFRSh6LCBzKTsKICAgICByZXR1cm4gWl9OVUxMOwogICB9CkBAIC0xMTAsOSArMTEzLDYgQEAKIH0KIAogCi0jaWZkZWYgREVCVUcKLSAgZXh0ZXJuIHVJbnQgaW5mbGF0ZV9odWZ0czsKLSNlbmRpZgogaW50IGluZmxhdGVfYmxvY2tzKHMsIHosIHIpCiBpbmZsYXRlX2Jsb2Nrc19zdGF0ZWYgKnM7CiB6X3N0cmVhbXAgejsKQEAgLTE1MywxNSArMTUzLDEzIEBACiAgICAgICAgICAgICB1SW50IGJsLCBiZDsKICAgICAgICAgICAgIGluZmxhdGVfaHVmdCAqdGwsICp0ZDsKIAotICAgICAgICAgICAgaW5mbGF0ZV90cmVlc19maXhlZCgmYmwsICZiZCwgJnRsLCAmdGQpOworICAgICAgICAgICAgaW5mbGF0ZV90cmVlc19maXhlZCgmYmwsICZiZCwgJnRsLCAmdGQsIHopOwogICAgICAgICAgICAgcy0+c3ViLmRlY29kZS5jb2RlcyA9IGluZmxhdGVfY29kZXNfbmV3KGJsLCBiZCwgdGwsIHRkLCB6KTsKICAgICAgICAgICAgIGlmIChzLT5zdWIuZGVjb2RlLmNvZGVzID09IFpfTlVMTCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgciA9IFpfTUVNX0VSUk9SOwogICAgICAgICAgICAgICBMRUFWRQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcy0+c3ViLmRlY29kZS50bCA9IFpfTlVMTDsgIC8qIGRvbid0IHRyeSB0byBmcmVlIHRoZXNlICovCi0gICAgICAgICAgICBzLT5zdWIuZGVjb2RlLnRkID0gWl9OVUxMOwogICAgICAgICAgIH0KICAgICAgICAgICBEVU1QQklUUygzKQogICAgICAgICAgIHMtPm1vZGUgPSBDT0RFUzsKQEAgLTI0NCw3ICsyNDIsNyBAQAogICAgICAgICBzLT5zdWIudHJlZXMuYmxlbnNbYm9yZGVyW3MtPnN1Yi50cmVlcy5pbmRleCsrXV0gPSAwOwogICAgICAgcy0+c3ViLnRyZWVzLmJiID0gNzsKICAgICAgIHQgPSBpbmZsYXRlX3RyZWVzX2JpdHMocy0+c3ViLnRyZWVzLmJsZW5zLCAmcy0+c3ViLnRyZWVzLmJiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+c3ViLnRyZWVzLnRiLCB6KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMtPnN1Yi50cmVlcy50Yiwgcy0+aHVmdHMsIHopOwogICAgICAgaWYgKHQgIT0gWl9PSykKICAgICAgIHsKICAgICAgICAgWkZSRUUoeiwgcy0+c3ViLnRyZWVzLmJsZW5zKTsKQEAgLTI4Niw3ICsyODQsNiBAQAogICAgICAgICAgIGlmIChpICsgaiA+IDI1OCArICh0ICYgMHgxZikgKyAoKHQgPj4gNSkgJiAweDFmKSB8fAogICAgICAgICAgICAgICAoYyA9PSAxNiAmJiBpIDwgMSkpCiAgICAgICAgICAgewotICAgICAgICAgICAgaW5mbGF0ZV90cmVlc19mcmVlKHMtPnN1Yi50cmVlcy50Yiwgeik7CiAgICAgICAgICAgICBaRlJFRSh6LCBzLT5zdWIudHJlZXMuYmxlbnMpOwogICAgICAgICAgICAgcy0+bW9kZSA9IEJBRDsKICAgICAgICAgICAgIHotPm1zZyA9IChjaGFyKikiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCI7CkBAIC0zMDAsNyArMjk3LDYgQEAKICAgICAgICAgICBzLT5zdWIudHJlZXMuaW5kZXggPSBpOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBpbmZsYXRlX3RyZWVzX2ZyZWUocy0+c3ViLnRyZWVzLnRiLCB6KTsKICAgICAgIHMtPnN1Yi50cmVlcy50YiA9IFpfTlVMTDsKICAgICAgIHsKICAgICAgICAgdUludCBibCwgYmQ7CkBAIC0zMTAsMTEgKzMwNiw5IEBACiAgICAgICAgIGJsID0gOTsgICAgICAgICAvKiBtdXN0IGJlIDw9IDkgZm9yIGxvb2thaGVhZCBhc3N1bXB0aW9ucyAqLwogICAgICAgICBiZCA9IDY7ICAgICAgICAgLyogbXVzdCBiZSA8PSA5IGZvciBsb29rYWhlYWQgYXNzdW1wdGlvbnMgKi8KICAgICAgICAgdCA9IHMtPnN1Yi50cmVlcy50YWJsZTsKLSNpZmRlZiBERUJVRwotICAgICAgaW5mbGF0ZV9odWZ0cyA9IDA7Ci0jZW5kaWYKICAgICAgICAgdCA9IGluZmxhdGVfdHJlZXNfZHluYW1pYygyNTcgKyAodCAmIDB4MWYpLCAxICsgKCh0ID4+IDUpICYgMHgxZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3ViLnRyZWVzLmJsZW5zLCAmYmwsICZiZCwgJnRsLCAmdGQsIHopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnN1Yi50cmVlcy5ibGVucywgJmJsLCAmYmQsICZ0bCwgJnRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh1ZnRzLCB6KTsKICAgICAgICAgWkZSRUUoeiwgcy0+c3ViLnRyZWVzLmJsZW5zKTsKICAgICAgICAgaWYgKHQgIT0gWl9PSykKICAgICAgICAgewpAQCAtMzIzLDE4ICszMTcsMTMgQEAKICAgICAgICAgICByID0gdDsKICAgICAgICAgICBMRUFWRQogICAgICAgICB9Ci0gICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgdHJlZXMgb2ssICVkICogJWQgYnl0ZXMgdXNlZFxuIiwKLSAgICAgICAgICAgICAgaW5mbGF0ZV9odWZ0cywgc2l6ZW9mKGluZmxhdGVfaHVmdCkpKTsKKyAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICB0cmVlcyBva1xuIikpOwogICAgICAgICBpZiAoKGMgPSBpbmZsYXRlX2NvZGVzX25ldyhibCwgYmQsIHRsLCB0ZCwgeikpID09IFpfTlVMTCkKICAgICAgICAgewotICAgICAgICAgIGluZmxhdGVfdHJlZXNfZnJlZSh0ZCwgeik7Ci0gICAgICAgICAgaW5mbGF0ZV90cmVlc19mcmVlKHRsLCB6KTsKICAgICAgICAgICByID0gWl9NRU1fRVJST1I7CiAgICAgICAgICAgTEVBVkUKICAgICAgICAgfQogICAgICAgICBzLT5zdWIuZGVjb2RlLmNvZGVzID0gYzsKLSAgICAgICAgcy0+c3ViLmRlY29kZS50bCA9IHRsOwotICAgICAgICBzLT5zdWIuZGVjb2RlLnRkID0gdGQ7CiAgICAgICB9CiAgICAgICBzLT5tb2RlID0gQ09ERVM7CiAgICAgY2FzZSBDT0RFUzoKQEAgLTM0Myw4ICszMzIsNiBAQAogICAgICAgICByZXR1cm4gaW5mbGF0ZV9mbHVzaChzLCB6LCByKTsKICAgICAgIHIgPSBaX09LOwogICAgICAgaW5mbGF0ZV9jb2Rlc19mcmVlKHMtPnN1Yi5kZWNvZGUuY29kZXMsIHopOwotICAgICAgaW5mbGF0ZV90cmVlc19mcmVlKHMtPnN1Yi5kZWNvZGUudGQsIHopOwotICAgICAgaW5mbGF0ZV90cmVlc19mcmVlKHMtPnN1Yi5kZWNvZGUudGwsIHopOwogICAgICAgTE9BRAogICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBjb2RlcyBlbmQsICVsdSB0b3RhbCBvdXRcbiIsCiAgICAgICAgICAgICAgIHotPnRvdGFsX291dCArIChxID49IHMtPnJlYWQgPyBxIC0gcy0+cmVhZCA6CkBAIC0zODYsNiArMzczLDcgQEAKIHsKICAgaW5mbGF0ZV9ibG9ja3NfcmVzZXQocywgeiwgWl9OVUxMKTsKICAgWkZSRUUoeiwgcy0+d2luZG93KTsKKyAgWkZSRUUoeiwgcy0+aHVmdHMpOwogICBaRlJFRSh6LCBzKTsKICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgIGJsb2NrcyBmcmVlZFxuIikpOwogICByZXR1cm4gWl9PSzsKQEAgLTM5Nyw3ICszODUsNyBAQAogY29uc3QgQnl0ZWYgKmQ7CiB1SW50ICBuOwogewotICB6bWVtY3B5KChjaGFyZiAqKXMtPndpbmRvdywgZCwgbik7CisgIHptZW1jcHkocy0+d2luZG93LCBkLCBuKTsKICAgcy0+cmVhZCA9IHMtPndyaXRlID0gcy0+d2luZG93ICsgbjsKIH0KIApkaWZmIC0tZ2l0IGEvaW5mbGF0ZS5jIGIvaW5mbGF0ZS5jCmluZGV4IDNjZmYzNjYuLjdiOWJjM2IgMTAwNjQ0Ci0tLSBhL2luZmxhdGUuYworKysgYi9pbmZsYXRlLmMKQEAgLTUwLDcgKzUwLDcgQEAKIH07CiAKIAotaW50IEVYUE9SVCBpbmZsYXRlUmVzZXQoeikKK2ludCBaRVhQT1JUIGluZmxhdGVSZXNldCh6KQogel9zdHJlYW1wIHo7CiB7CiAgIGlmICh6ID09IFpfTlVMTCB8fCB6LT5zdGF0ZSA9PSBaX05VTEwpCkBAIC02NCw3ICs2NCw3IEBACiB9CiAKIAotaW50IEVYUE9SVCBpbmZsYXRlRW5kKHopCitpbnQgWkVYUE9SVCBpbmZsYXRlRW5kKHopCiB6X3N0cmVhbXAgejsKIHsKICAgaWYgKHogPT0gWl9OVUxMIHx8IHotPnN0YXRlID09IFpfTlVMTCB8fCB6LT56ZnJlZSA9PSBaX05VTEwpCkBAIC03OCw3ICs3OCw3IEBACiB9CiAKIAotaW50IEVYUE9SVCBpbmZsYXRlSW5pdDJfKHosIHcsIHZlcnNpb24sIHN0cmVhbV9zaXplKQoraW50IFpFWFBPUlQgaW5mbGF0ZUluaXQyXyh6LCB3LCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkKIHpfc3RyZWFtcCB6OwogaW50IHc7CiBjb25zdCBjaGFyICp2ZXJzaW9uOwpAQCAtMTM1LDcgKzEzNSw3IEBACiB9CiAKIAotaW50IEVYUE9SVCBpbmZsYXRlSW5pdF8oeiwgdmVyc2lvbiwgc3RyZWFtX3NpemUpCitpbnQgWkVYUE9SVCBpbmZsYXRlSW5pdF8oeiwgdmVyc2lvbiwgc3RyZWFtX3NpemUpCiB6X3N0cmVhbXAgejsKIGNvbnN0IGNoYXIgKnZlcnNpb247CiBpbnQgc3RyZWFtX3NpemU7CkBAIC0xNDQsMTggKzE0NCwxOSBAQAogfQogCiAKLSNkZWZpbmUgTkVFREJZVEUge2lmKHotPmF2YWlsX2luPT0wKXJldHVybiByOyBpZiAoZiAhPSBaX0ZJTklTSCkgciA9IFpfT0s7fQorI2RlZmluZSBORUVEQllURSB7aWYoei0+YXZhaWxfaW49PTApcmV0dXJuIHI7cj1mO30KICNkZWZpbmUgTkVYVEJZVEUgKHotPmF2YWlsX2luLS0sei0+dG90YWxfaW4rKywqei0+bmV4dF9pbisrKQogCi1pbnQgRVhQT1JUIGluZmxhdGUoeiwgZikKK2ludCBaRVhQT1JUIGluZmxhdGUoeiwgZikKIHpfc3RyZWFtcCB6OwogaW50IGY7CiB7CiAgIGludCByOwogICB1SW50IGI7CiAKLSAgaWYgKHogPT0gWl9OVUxMIHx8IHotPnN0YXRlID09IFpfTlVMTCB8fCB6LT5uZXh0X2luID09IFpfTlVMTCB8fCBmIDwgMCkKKyAgaWYgKHogPT0gWl9OVUxMIHx8IHotPnN0YXRlID09IFpfTlVMTCB8fCB6LT5uZXh0X2luID09IFpfTlVMTCkKICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgIGYgPSBmID09IFpfRklOSVNIID8gWl9CVUZfRVJST1IgOiBaX09LOwogICByID0gWl9CVUZfRVJST1I7CiAgIHdoaWxlICgxKSBzd2l0Y2ggKHotPnN0YXRlLT5tb2RlKQogICB7CkBAIC0xOTAsNyArMTkxLDcgQEAKICAgICAgIGlmICghKGIgJiBQUkVTRVRfRElDVCkpCiAgICAgICB7CiAgICAgICAgIHotPnN0YXRlLT5tb2RlID0gQkxPQ0tTOwotCWJyZWFrOworICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIHotPnN0YXRlLT5tb2RlID0gRElDVDQ7CiAgICAgY2FzZSBESUNUNDoKQEAgLTIyNCw5ICsyMjUsMTAgQEAKICAgICAgICAgei0+c3RhdGUtPnN1Yi5tYXJrZXIgPSAwOyAgICAgICAvKiBjYW4gdHJ5IGluZmxhdGVTeW5jICovCiAgICAgICAgIGJyZWFrOwogICAgICAgfQorICAgICAgaWYgKHIgPT0gWl9PSykKKyAgICAgICAgciA9IGY7CiAgICAgICBpZiAociAhPSBaX1NUUkVBTV9FTkQpCi0gICAgICAgIHJldHVybiBmID09IFpfRklOSVNIICYmIHIgPT0gWl9PSyA/IFpfQlVGX0VSUk9SIDogcjsKLSAgICAgIHIgPSBaX09LOworICAgICAgICByZXR1cm4gcjsKICAgICAgIGluZmxhdGVfYmxvY2tzX3Jlc2V0KHotPnN0YXRlLT5ibG9ja3MsIHosICZ6LT5zdGF0ZS0+c3ViLmNoZWNrLndhcyk7CiAgICAgICBpZiAoei0+c3RhdGUtPm5vd3JhcCkKICAgICAgIHsKQEAgLTIzNCw3ICsyMzYsNiBAQAogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIHotPnN0YXRlLT5tb2RlID0gQ0hFQ0s0OwotICAgICAgaWYgKGYgPT0gWl9GSU5JU0gpIHIgPSBaX0JVRl9FUlJPUjsKICAgICBjYXNlIENIRUNLNDoKICAgICAgIE5FRURCWVRFCiAgICAgICB6LT5zdGF0ZS0+c3ViLmNoZWNrLm5lZWQgPSAodUxvbmcpTkVYVEJZVEUgPDwgMjQ7CkBAIC0yNzMsNyArMjc0LDcgQEAKIH0KIAogCi1pbnQgRVhQT1JUIGluZmxhdGVTZXREaWN0aW9uYXJ5KHosIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpCitpbnQgWkVYUE9SVCBpbmZsYXRlU2V0RGljdGlvbmFyeSh6LCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQogel9zdHJlYW1wIHo7CiBjb25zdCBCeXRlZiAqZGljdGlvbmFyeTsKIHVJbnQgIGRpY3RMZW5ndGg7CkBAIC0yOTcsNyArMjk4LDcgQEAKIH0KIAogCi1pbnQgRVhQT1JUIGluZmxhdGVTeW5jKHopCitpbnQgWkVYUE9SVCBpbmZsYXRlU3luYyh6KQogel9zdHJlYW1wIHo7CiB7CiAgIHVJbnQgbjsgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGxvb2sgYXQgKi8KQEAgLTMyMSw4ICszMjIsNyBAQAogICAvKiBzZWFyY2ggKi8KICAgd2hpbGUgKG4gJiYgbSA8IDQpCiAgIHsKLSAgICBzdGF0aWMgY29uc3QgQnl0ZSBtYXJrWzRdID0gezAsIDAsIDB4ZmYsIDB4ZmZ9OwotICAgIGlmICgqcCA9PSBtYXJrW21dKQorICAgIGlmICgqcCA9PSAoQnl0ZSkobSA8IDIgPyAwIDogKEJ5dGUpMHhmZikpCiAgICAgICBtKys7CiAgICAgZWxzZSBpZiAoKnApCiAgICAgICBtID0gMDsKQEAgLTM1NSw3ICszNTUsNyBAQAogICogZGVjb21wcmVzc2luZywgUFBQIGNoZWNrcyB0aGF0IGF0IHRoZSBlbmQgb2YgaW5wdXQgcGFja2V0LCBpbmZsYXRlIGlzCiAgKiB3YWl0aW5nIGZvciB0aGVzZSBsZW5ndGggYnl0ZXMuCiAgKi8KLWludCBFWFBPUlQgaW5mbGF0ZVN5bmNQb2ludCh6KQoraW50IFpFWFBPUlQgaW5mbGF0ZVN5bmNQb2ludCh6KQogel9zdHJlYW1wIHo7CiB7CiAgIGlmICh6ID09IFpfTlVMTCB8fCB6LT5zdGF0ZSA9PSBaX05VTEwgfHwgei0+c3RhdGUtPmJsb2NrcyA9PSBaX05VTEwpCmRpZmYgLS1naXQgYS9pbmZ0cmVlcy5jIGIvaW5mdHJlZXMuYwppbmRleCAzYzJmYWNmLi4yODJmMjc3IDEwMDY0NAotLS0gYS9pbmZ0cmVlcy5jCisrKyBiL2luZnRyZWVzLmMKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSAiaW5mdHJlZXMuaCIKIAogY29uc3QgY2hhciBpbmZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgaW5mbGF0ZSAxLjAuOCBDb3B5cmlnaHQgMTk5NS0xOTk4IE1hcmsgQWRsZXIgIjsKKyAgICIgaW5mbGF0ZSAxLjAuOSBDb3B5cmlnaHQgMTk5NS0xOTk4IE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtMzEsMTIgKzMxLDkgQEAKICAgICBjb25zdCB1SW50ZiAqLCAgICAgIC8qIGxpc3Qgb2YgZXh0cmEgYml0cyBmb3Igbm9uLXNpbXBsZSBjb2RlcyAqLwogICAgIGluZmxhdGVfaHVmdCAqIEZBUiosLyogcmVzdWx0OiBzdGFydGluZyB0YWJsZSAqLwogICAgIHVJbnRmICosICAgICAgICAgICAgLyogbWF4aW11bSBsb29rdXAgYml0cyAocmV0dXJucyBhY3R1YWwpICovCi0gICAgel9zdHJlYW1wICkpOyAgICAgICAvKiBmb3IgemFsbG9jIGZ1bmN0aW9uICovCi0KLWxvY2FsIHZvaWRwZiBmYWxsb2MgT0YoKAotICAgIHZvaWRwZiwgICAgICAgICAgICAgLyogb3BhcXVlIHBvaW50ZXIgKG5vdCB1c2VkKSAqLwotICAgIHVJbnQsICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGl0ZW1zICovCi0gICAgdUludCkpOyAgICAgICAgICAgICAvKiBzaXplIG9mIGl0ZW0gKi8KKyAgICBpbmZsYXRlX2h1ZnQgKiwgICAgIC8qIHNwYWNlIGZvciB0cmVlcyAqLworICAgIHVJbnQgKiwgICAgICAgICAgICAgLyogaHVmdHMgdXNlZCBpbiBzcGFjZSAqLworICAgIHVJbnRmICogKSk7ICAgICAgICAgLyogc3BhY2UgZm9yIHZhbHVlcyAqLwogCiAvKiBUYWJsZXMgZm9yIGRlZmxhdGUgZnJvbSBQS1pJUCdzIGFwcG5vdGUudHh0LiAqLwogbG9jYWwgY29uc3QgdUludCBjcGxlbnNbMzFdID0geyAvKiBDb3B5IGxlbmd0aHMgZm9yIGxpdGVyYWwgY29kZXMgMjU3Li4yODUgKi8KQEAgLTkwLDIxICs4NywxOCBAQAogCiAvKiBJZiBCTUFYIG5lZWRzIHRvIGJlIGxhcmdlciB0aGFuIDE2LCB0aGVuIGggYW5kIHhbXSBzaG91bGQgYmUgdUxvbmcuICovCiAjZGVmaW5lIEJNQVggMTUgICAgICAgICAvKiBtYXhpbXVtIGJpdCBsZW5ndGggb2YgYW55IGNvZGUgKi8KLSNkZWZpbmUgTl9NQVggMjg4ICAgICAgIC8qIG1heGltdW0gbnVtYmVyIG9mIGNvZGVzIGluIGFueSBzZXQgKi8KIAotI2lmZGVmIERFQlVHCi0gIHVJbnQgaW5mbGF0ZV9odWZ0czsKLSNlbmRpZgotCi1sb2NhbCBpbnQgaHVmdF9idWlsZChiLCBuLCBzLCBkLCBlLCB0LCBtLCB6cykKK2xvY2FsIGludCBodWZ0X2J1aWxkKGIsIG4sIHMsIGQsIGUsIHQsIG0sIGhwLCBobiwgdikKIHVJbnRmICpiOyAgICAgICAgICAgICAgIC8qIGNvZGUgbGVuZ3RocyBpbiBiaXRzIChhbGwgYXNzdW1lZCA8PSBCTUFYKSAqLwotdUludCBuOyAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzIChhc3N1bWVkIDw9IE5fTUFYKSAqLwordUludCBuOyAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzIChhc3N1bWVkIDw9IDI4OCkgKi8KIHVJbnQgczsgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzaW1wbGUtdmFsdWVkIGNvZGVzICgwLi5zLTEpICovCiBjb25zdCB1SW50ZiAqZDsgICAgICAgICAvKiBsaXN0IG9mIGJhc2UgdmFsdWVzIGZvciBub24tc2ltcGxlIGNvZGVzICovCiBjb25zdCB1SW50ZiAqZTsgICAgICAgICAvKiBsaXN0IG9mIGV4dHJhIGJpdHMgZm9yIG5vbi1zaW1wbGUgY29kZXMgKi8KIGluZmxhdGVfaHVmdCAqIEZBUiAqdDsgIC8qIHJlc3VsdDogc3RhcnRpbmcgdGFibGUgKi8KIHVJbnRmICptOyAgICAgICAgICAgICAgIC8qIG1heGltdW0gbG9va3VwIGJpdHMsIHJldHVybnMgYWN0dWFsICovCi16X3N0cmVhbXAgenM7ICAgICAgICAgICAvKiBmb3IgemFsbG9jIGZ1bmN0aW9uICovCitpbmZsYXRlX2h1ZnQgKmhwOyAgICAgICAvKiBzcGFjZSBmb3IgdHJlZXMgKi8KK3VJbnQgKmhuOyAgICAgICAgICAgICAgIC8qIGh1ZnRzIHVzZWQgaW4gc3BhY2UgKi8KK3VJbnRmICp2OyAgICAgICAgICAgICAgIC8qIHdvcmtpbmcgYXJlYTogdmFsdWVzIGluIG9yZGVyIG9mIGJpdCBsZW5ndGggKi8KIC8qIEdpdmVuIGEgbGlzdCBvZiBjb2RlIGxlbmd0aHMgYW5kIGEgbWF4aW11bSB0YWJsZSBzaXplLCBtYWtlIGEgc2V0IG9mCiAgICB0YWJsZXMgdG8gZGVjb2RlIHRoYXQgc2V0IG9mIGNvZGVzLiAgUmV0dXJuIFpfT0sgb24gc3VjY2VzcywgWl9CVUZfRVJST1IKICAgIGlmIHRoZSBnaXZlbiBjb2RlIHNldCBpcyBpbmNvbXBsZXRlICh0aGUgdGFibGVzIGFyZSBzdGlsbCBidWlsdCBpbiB0aGlzCkBAIC0xMjEsMTEgKzExNSwxMSBAQAogICByZWdpc3RlciB1SW50IGo7ICAgICAgICAgICAgICAvKiBjb3VudGVyICovCiAgIHJlZ2lzdGVyIGludCBrOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBiaXRzIGluIGN1cnJlbnQgY29kZSAqLwogICBpbnQgbDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBiaXRzIHBlciB0YWJsZSAocmV0dXJuZWQgaW4gbSkgKi8KKyAgdUludCBtYXNrOyAgICAgICAgICAgICAgICAgICAgLyogKDEgPDwgdykgLSAxLCB0byBhdm9pZCBjYyAtTyBidWcgb24gSFAgKi8KICAgcmVnaXN0ZXIgdUludGYgKnA7ICAgICAgICAgICAgLyogcG9pbnRlciBpbnRvIGNbXSwgYltdLCBvciB2W10gKi8KICAgaW5mbGF0ZV9odWZ0ICpxOyAgICAgICAgICAgICAgLyogcG9pbnRzIHRvIGN1cnJlbnQgdGFibGUgKi8KICAgc3RydWN0IGluZmxhdGVfaHVmdF9zIHI7ICAgICAgLyogdGFibGUgZW50cnkgZm9yIHN0cnVjdHVyZSBhc3NpZ25tZW50ICovCiAgIGluZmxhdGVfaHVmdCAqdVtCTUFYXTsgICAgICAgIC8qIHRhYmxlIHN0YWNrICovCi0gIHVJbnQgdltOX01BWF07ICAgICAgICAgICAgICAgIC8qIHZhbHVlcyBpbiBvcmRlciBvZiBiaXQgbGVuZ3RoICovCiAgIHJlZ2lzdGVyIGludCB3OyAgICAgICAgICAgICAgIC8qIGJpdHMgYmVmb3JlIHRoaXMgdGFibGUgPT0gKGwgKiBoKSAqLwogICB1SW50IHhbQk1BWCsxXTsgICAgICAgICAgICAgICAvKiBiaXQgb2Zmc2V0cywgdGhlbiBjb2RlIHN0YWNrICovCiAgIHVJbnRmICp4cDsgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgaW50byB4ICovCkBAIC0yMzMsMjAgKzIyNywxNiBAQAogICAgICAgICB9CiAgICAgICAgIHogPSAxIDw8IGo7ICAgICAgICAgICAgIC8qIHRhYmxlIGVudHJpZXMgZm9yIGotYml0IHRhYmxlICovCiAKLSAgICAgICAgLyogYWxsb2NhdGUgYW5kIGxpbmsgaW4gbmV3IHRhYmxlICovCi0gICAgICAgIGlmICgocSA9IChpbmZsYXRlX2h1ZnQgKilaQUxMT0MKLSAgICAgICAgICAgICAoenMseiArIDEsc2l6ZW9mKGluZmxhdGVfaHVmdCkpKSA9PSBaX05VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaCkKLSAgICAgICAgICAgIGluZmxhdGVfdHJlZXNfZnJlZSh1WzBdLCB6cyk7CisgICAgICAgIC8qIGFsbG9jYXRlIG5ldyB0YWJsZSAqLworICAgICAgICBpZiAoKmhuICsgeiA+IE1BTlkpICAgICAvKiAobm90ZTogZG9lc24ndCBtYXR0ZXIgZm9yIGZpeGVkKSAqLwogICAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsgICAvKiBub3QgZW5vdWdoIG1lbW9yeSAqLworICAgICAgICB1W2hdID0gcSA9IGhwICsgKmhuOworICAgICAgICAqaG4gKz0gejsKKyAgICAgICAgaWYgKHQgIT0gWl9OVUxMKSAgICAgICAgLyogZmlyc3QgdGFibGUgaXMgcmV0dXJuZWQgcmVzdWx0ICovCisgICAgICAgIHsKKyAgICAgICAgICAqdCA9IHE7CisgICAgICAgICAgdCA9IFpfTlVMTDsKICAgICAgICAgfQotI2lmZGVmIERFQlVHCi0gICAgICAgIGluZmxhdGVfaHVmdHMgKz0geiArIDE7Ci0jZW5kaWYKLSAgICAgICAgKnQgPSBxICsgMTsgICAgICAgICAgICAgLyogbGluayB0byBsaXN0IGZvciBodWZ0X2ZyZWUoKSAqLwotICAgICAgICAqKHQgPSAmKHEtPm5leHQpKSA9IFpfTlVMTDsKLSAgICAgICAgdVtoXSA9ICsrcTsgICAgICAgICAgICAgLyogdGFibGUgc3RhcnRzIGFmdGVyIGxpbmsgKi8KIAogICAgICAgICAvKiBjb25uZWN0IHRvIGxhc3QgdGFibGUsIGlmIHRoZXJlIGlzIG9uZSAqLwogICAgICAgICBpZiAoaCkKQEAgLTI4NiwxMCArMjc2LDEyIEBACiAgICAgICBpIF49IGo7CiAKICAgICAgIC8qIGJhY2t1cCBvdmVyIGZpbmlzaGVkIHRhYmxlcyAqLwotICAgICAgd2hpbGUgKChpICYgKCgxIDw8IHcpIC0gMSkpICE9IHhbaF0pCisgICAgICBtYXNrID0gKDEgPDwgdykgLSAxOyAgICAgIC8qIG5lZWRlZCBvbiBIUCwgY2MgLU8gYnVnICovCisgICAgICB3aGlsZSAoKGkgJiBtYXNrKSAhPSB4W2hdKQogICAgICAgewogICAgICAgICBoLS07ICAgICAgICAgICAgICAgICAgICAvKiBkb24ndCBuZWVkIHRvIHVwZGF0ZSBxICovCiAgICAgICAgIHcgLT0gbDsKKyAgICAgICAgbWFzayA9ICgxIDw8IHcpIC0gMTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTMwMCwyOCArMjkyLDM0IEBACiB9CiAKIAotaW50IGluZmxhdGVfdHJlZXNfYml0cyhjLCBiYiwgdGIsIHopCitpbnQgaW5mbGF0ZV90cmVlc19iaXRzKGMsIGJiLCB0YiwgaHAsIHopCiB1SW50ZiAqYzsgICAgICAgICAgICAgICAvKiAxOSBjb2RlIGxlbmd0aHMgKi8KIHVJbnRmICpiYjsgICAgICAgICAgICAgIC8qIGJpdHMgdHJlZSBkZXNpcmVkL2FjdHVhbCBkZXB0aCAqLwogaW5mbGF0ZV9odWZ0ICogRkFSICp0YjsgLyogYml0cyB0cmVlIHJlc3VsdCAqLwotel9zdHJlYW1wIHo7ICAgICAgICAgICAgLyogZm9yIHpmcmVlIGZ1bmN0aW9uICovCitpbmZsYXRlX2h1ZnQgKmhwOyAgICAgICAvKiBzcGFjZSBmb3IgdHJlZXMgKi8KK3pfc3RyZWFtcCB6OyAgICAgICAgICAgIC8qIGZvciBtZXNzYWdlcyAqLwogewogICBpbnQgcjsKKyAgdUludCBobiA9IDA7ICAgICAgICAgIC8qIGh1ZnRzIHVzZWQgaW4gc3BhY2UgKi8KKyAgdUludGYgKnY7ICAgICAgICAgICAgIC8qIHdvcmsgYXJlYSBmb3IgaHVmdF9idWlsZCAqLwogCi0gIHIgPSBodWZ0X2J1aWxkKGMsIDE5LCAxOSwgKHVJbnRmKilaX05VTEwsICh1SW50ZiopWl9OVUxMLCB0YiwgYmIsIHopOworICBpZiAoKHYgPSAodUludGYqKVpBTExPQyh6LCAxOSwgc2l6ZW9mKHVJbnQpKSkgPT0gWl9OVUxMKQorICAgIHJldHVybiBaX01FTV9FUlJPUjsKKyAgciA9IGh1ZnRfYnVpbGQoYywgMTksIDE5LCAodUludGYqKVpfTlVMTCwgKHVJbnRmKilaX05VTEwsCisgICAgICAgICAgICAgICAgIHRiLCBiYiwgaHAsICZobiwgdik7CiAgIGlmIChyID09IFpfREFUQV9FUlJPUikKICAgICB6LT5tc2cgPSAoY2hhciopIm92ZXJzdWJzY3JpYmVkIGR5bmFtaWMgYml0IGxlbmd0aHMgdHJlZSI7CiAgIGVsc2UgaWYgKHIgPT0gWl9CVUZfRVJST1IgfHwgKmJiID09IDApCiAgIHsKLSAgICBpbmZsYXRlX3RyZWVzX2ZyZWUoKnRiLCB6KTsKICAgICB6LT5tc2cgPSAoY2hhciopImluY29tcGxldGUgZHluYW1pYyBiaXQgbGVuZ3RocyB0cmVlIjsKICAgICByID0gWl9EQVRBX0VSUk9SOwogICB9CisgIFpGUkVFKHosIHYpOwogICByZXR1cm4gcjsKIH0KIAogCi1pbnQgaW5mbGF0ZV90cmVlc19keW5hbWljKG5sLCBuZCwgYywgYmwsIGJkLCB0bCwgdGQsIHopCitpbnQgaW5mbGF0ZV90cmVlc19keW5hbWljKG5sLCBuZCwgYywgYmwsIGJkLCB0bCwgdGQsIGhwLCB6KQogdUludCBubDsgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGxpdGVyYWwvbGVuZ3RoIGNvZGVzICovCiB1SW50IG5kOyAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZXMgKi8KIHVJbnRmICpjOyAgICAgICAgICAgICAgIC8qIHRoYXQgbWFueSAodG90YWwpIGNvZGUgbGVuZ3RocyAqLwpAQCAtMzI5LDI3ICszMjcsMzQgQEAKIHVJbnRmICpiZDsgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGRlc2lyZWQvYWN0dWFsIGJpdCBkZXB0aCAqLwogaW5mbGF0ZV9odWZ0ICogRkFSICp0bDsgLyogbGl0ZXJhbC9sZW5ndGggdHJlZSByZXN1bHQgKi8KIGluZmxhdGVfaHVmdCAqIEZBUiAqdGQ7IC8qIGRpc3RhbmNlIHRyZWUgcmVzdWx0ICovCi16X3N0cmVhbXAgejsgICAgICAgICAgICAvKiBmb3IgemZyZWUgZnVuY3Rpb24gKi8KK2luZmxhdGVfaHVmdCAqaHA7ICAgICAgIC8qIHNwYWNlIGZvciB0cmVlcyAqLworel9zdHJlYW1wIHo7ICAgICAgICAgICAgLyogZm9yIG1lc3NhZ2VzICovCiB7CiAgIGludCByOworICB1SW50IGhuID0gMDsgICAgICAgICAgLyogaHVmdHMgdXNlZCBpbiBzcGFjZSAqLworICB1SW50ZiAqdjsgICAgICAgICAgICAgLyogd29yayBhcmVhIGZvciBodWZ0X2J1aWxkICovCisKKyAgLyogYWxsb2NhdGUgd29yayBhcmVhICovCisgIGlmICgodiA9ICh1SW50ZiopWkFMTE9DKHosIDI4OCwgc2l6ZW9mKHVJbnQpKSkgPT0gWl9OVUxMKQorICAgIHJldHVybiBaX01FTV9FUlJPUjsKIAogICAvKiBidWlsZCBsaXRlcmFsL2xlbmd0aCB0cmVlICovCi0gIHIgPSBodWZ0X2J1aWxkKGMsIG5sLCAyNTcsIGNwbGVucywgY3BsZXh0LCB0bCwgYmwsIHopOworICByID0gaHVmdF9idWlsZChjLCBubCwgMjU3LCBjcGxlbnMsIGNwbGV4dCwgdGwsIGJsLCBocCwgJmhuLCB2KTsKICAgaWYgKHIgIT0gWl9PSyB8fCAqYmwgPT0gMCkKICAgewogICAgIGlmIChyID09IFpfREFUQV9FUlJPUikKICAgICAgIHotPm1zZyA9IChjaGFyKikib3ZlcnN1YnNjcmliZWQgbGl0ZXJhbC9sZW5ndGggdHJlZSI7CiAgICAgZWxzZSBpZiAociAhPSBaX01FTV9FUlJPUikKICAgICB7Ci0gICAgICBpbmZsYXRlX3RyZWVzX2ZyZWUoKnRsLCB6KTsKICAgICAgIHotPm1zZyA9IChjaGFyKikiaW5jb21wbGV0ZSBsaXRlcmFsL2xlbmd0aCB0cmVlIjsKICAgICAgIHIgPSBaX0RBVEFfRVJST1I7CiAgICAgfQorICAgIFpGUkVFKHosIHYpOwogICAgIHJldHVybiByOwogICB9CiAKICAgLyogYnVpbGQgZGlzdGFuY2UgdHJlZSAqLwotICByID0gaHVmdF9idWlsZChjICsgbmwsIG5kLCAwLCBjcGRpc3QsIGNwZGV4dCwgdGQsIGJkLCB6KTsKKyAgciA9IGh1ZnRfYnVpbGQoYyArIG5sLCBuZCwgMCwgY3BkaXN0LCBjcGRleHQsIHRkLCBiZCwgaHAsICZobiwgdik7CiAgIGlmIChyICE9IFpfT0sgfHwgKCpiZCA9PSAwICYmIG5sID4gMjU3KSkKICAgewogICAgIGlmIChyID09IFpfREFUQV9FUlJPUikKQEAgLTM1OSw3ICszNjQsNiBAQAogICAgICAgciA9IFpfT0s7CiAgICAgfQogI2Vsc2UKLSAgICAgIGluZmxhdGVfdHJlZXNfZnJlZSgqdGQsIHopOwogICAgICAgei0+bXNnID0gKGNoYXIqKSJpbmNvbXBsZXRlIGRpc3RhbmNlIHRyZWUiOwogICAgICAgciA9IFpfREFUQV9FUlJPUjsKICAgICB9CkBAIC0zNjgsMTkgKzM3MiwyMCBAQAogICAgICAgei0+bXNnID0gKGNoYXIqKSJlbXB0eSBkaXN0YW5jZSB0cmVlIHdpdGggbGVuZ3RocyI7CiAgICAgICByID0gWl9EQVRBX0VSUk9SOwogICAgIH0KLSAgICBpbmZsYXRlX3RyZWVzX2ZyZWUoKnRsLCB6KTsKKyAgICBaRlJFRSh6LCB2KTsKICAgICByZXR1cm4gcjsKICNlbmRpZgogICB9CiAKICAgLyogZG9uZSAqLworICBaRlJFRSh6LCB2KTsKICAgcmV0dXJuIFpfT0s7CiB9CiAKIAogLyogYnVpbGQgZml4ZWQgdGFibGVzIG9ubHkgb25jZS0ta2VlcCB0aGVtIGhlcmUgKi8KIGxvY2FsIGludCBmaXhlZF9idWlsdCA9IDA7Ci0jZGVmaW5lIEZJWEVESCA1MzAgICAgICAvKiBudW1iZXIgb2YgaHVmdHMgdXNlZCBieSBmaXhlZCB0YWJsZXMgKi8KKyNkZWZpbmUgRklYRURIIDQyNCAgICAgIC8qIG51bWJlciBvZiBodWZ0cyB1c2VkIGJ5IGZpeGVkIHRhYmxlcyAqLwogbG9jYWwgaW5mbGF0ZV9odWZ0IGZpeGVkX21lbVtGSVhFREhdOwogbG9jYWwgdUludCBmaXhlZF9ibDsKIGxvY2FsIHVJbnQgZml4ZWRfYmQ7CkBAIC0zODgsMzYgKzM5MywyOSBAQAogbG9jYWwgaW5mbGF0ZV9odWZ0ICpmaXhlZF90ZDsKIAogCi1sb2NhbCB2b2lkcGYgZmFsbG9jKHEsIG4sIHMpCi12b2lkcGYgcTsgICAgICAgLyogb3BhcXVlIHBvaW50ZXIgKi8KLXVJbnQgbjsgICAgICAgICAvKiBudW1iZXIgb2YgaXRlbXMgKi8KLXVJbnQgczsgICAgICAgICAvKiBzaXplIG9mIGl0ZW0gKi8KLXsKLSAgQXNzZXJ0KHMgPT0gc2l6ZW9mKGluZmxhdGVfaHVmdCkgJiYgbiA8PSAqKGludGYgKilxLAotICAgICAgICAgImluZmxhdGVfdHJlZXMgZmFsbG9jIG92ZXJmbG93Iik7Ci0gICooaW50ZiAqKXEgLT0gbitzLXM7IC8qIHMtcyB0byBhdm9pZCB3YXJuaW5nICovCi0gIHJldHVybiAodm9pZHBmKShmaXhlZF9tZW0gKyAqKGludGYgKilxKTsKLX0KLQotCi1pbnQgaW5mbGF0ZV90cmVlc19maXhlZChibCwgYmQsIHRsLCB0ZCkKK2ludCBpbmZsYXRlX3RyZWVzX2ZpeGVkKGJsLCBiZCwgdGwsIHRkLCB6KQogdUludGYgKmJsOyAgICAgICAgICAgICAgIC8qIGxpdGVyYWwgZGVzaXJlZC9hY3R1YWwgYml0IGRlcHRoICovCiB1SW50ZiAqYmQ7ICAgICAgICAgICAgICAgLyogZGlzdGFuY2UgZGVzaXJlZC9hY3R1YWwgYml0IGRlcHRoICovCiBpbmZsYXRlX2h1ZnQgKiBGQVIgKnRsOyAgLyogbGl0ZXJhbC9sZW5ndGggdHJlZSByZXN1bHQgKi8KIGluZmxhdGVfaHVmdCAqIEZBUiAqdGQ7ICAvKiBkaXN0YW5jZSB0cmVlIHJlc3VsdCAqLworel9zdHJlYW1wIHo7ICAgICAgICAgICAgIC8qIGZvciBtZW1vcnkgYWxsb2NhdGlvbiAqLwogewogICAvKiBidWlsZCBmaXhlZCB0YWJsZXMgaWYgbm90IGFscmVhZHkgKG11bHRpcGxlIG92ZXJsYXBwZWQgZXhlY3V0aW9ucyBvaykgKi8KICAgaWYgKCFmaXhlZF9idWlsdCkKICAgewogICAgIGludCBrOyAgICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlICovCi0gICAgdW5zaWduZWQgY1syODhdOyAgICAvKiBsZW5ndGggbGlzdCBmb3IgaHVmdF9idWlsZCAqLwotICAgIHpfc3RyZWFtIHo7ICAgICAgICAgLyogZm9yIGZhbGxvYyBmdW5jdGlvbiAqLwotICAgIGludCBmID0gRklYRURIOyAgICAgLyogbnVtYmVyIG9mIGh1ZnRzIGxlZnQgaW4gZml4ZWRfbWVtICovCisgICAgdUludCBmID0gMDsgICAgICAgICAvKiBudW1iZXIgb2YgaHVmdHMgdXNlZCBpbiBmaXhlZF9tZW0gKi8KKyAgICB1SW50ZiAqYzsgICAgICAgICAgIC8qIGxlbmd0aCBsaXN0IGZvciBodWZ0X2J1aWxkICovCisgICAgdUludGYgKnY7ICAgICAgICAgICAvKiB3b3JrIGFyZWEgZm9yIGh1ZnRfYnVpbGQgKi8KIAotICAgIC8qIHNldCB1cCBmYWtlIHpfc3RyZWFtIGZvciBtZW1vcnkgcm91dGluZXMgKi8KLSAgICB6LnphbGxvYyA9IGZhbGxvYzsKLSAgICB6LnpmcmVlID0gWl9OVUxMOwotICAgIHoub3BhcXVlID0gKHZvaWRwZikmZjsKKyAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KKyAgICBpZiAoKGMgPSAodUludGYqKVpBTExPQyh6LCAyODgsIHNpemVvZih1SW50KSkpID09IFpfTlVMTCkKKyAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKKyAgICBpZiAoKHYgPSAodUludGYqKVpBTExPQyh6LCAyODgsIHNpemVvZih1SW50KSkpID09IFpfTlVMTCkKKyAgICB7CisgICAgICBaRlJFRSh6LCBjKTsKKyAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKKyAgICB9CiAKICAgICAvKiBsaXRlcmFsIHRhYmxlICovCiAgICAgZm9yIChrID0gMDsgayA8IDE0NDsgaysrKQpAQCAtNDI5LDE2ICs0MjcsMTkgQEAKICAgICBmb3IgKDsgayA8IDI4ODsgaysrKQogICAgICAgY1trXSA9IDg7CiAgICAgZml4ZWRfYmwgPSA3OwotICAgIGh1ZnRfYnVpbGQoYywgMjg4LCAyNTcsIGNwbGVucywgY3BsZXh0LCAmZml4ZWRfdGwsICZmaXhlZF9ibCwgJnopOworICAgIGh1ZnRfYnVpbGQoYywgMjg4LCAyNTcsIGNwbGVucywgY3BsZXh0LCAmZml4ZWRfdGwsICZmaXhlZF9ibCwKKyAgICAgICAgICAgICAgIGZpeGVkX21lbSwgJmYsIHYpOwogCiAgICAgLyogZGlzdGFuY2UgdGFibGUgKi8KICAgICBmb3IgKGsgPSAwOyBrIDwgMzA7IGsrKykKICAgICAgIGNba10gPSA1OwogICAgIGZpeGVkX2JkID0gNTsKLSAgICBodWZ0X2J1aWxkKGMsIDMwLCAwLCBjcGRpc3QsIGNwZGV4dCwgJmZpeGVkX3RkLCAmZml4ZWRfYmQsICZ6KTsKKyAgICBodWZ0X2J1aWxkKGMsIDMwLCAwLCBjcGRpc3QsIGNwZGV4dCwgJmZpeGVkX3RkLCAmZml4ZWRfYmQsCisgICAgICAgICAgICAgICBmaXhlZF9tZW0sICZmLCB2KTsKIAogICAgIC8qIGRvbmUgKi8KLSAgICBBc3NlcnQoZiA9PSAwLCAiaW52YWxpZCBidWlsZCBvZiBmaXhlZCB0YWJsZXMiKTsKKyAgICBaRlJFRSh6LCB2KTsKKyAgICBaRlJFRSh6LCBjKTsKICAgICBmaXhlZF9idWlsdCA9IDE7CiAgIH0KICAgKmJsID0gZml4ZWRfYmw7CkBAIC00NDcsMzMgKzQ0OCwzIEBACiAgICp0ZCA9IGZpeGVkX3RkOwogICByZXR1cm4gWl9PSzsKIH0KLQotCi1pbnQgaW5mbGF0ZV90cmVlc19mcmVlKHQsIHopCi1pbmZsYXRlX2h1ZnQgKnQ7ICAgICAgICAvKiB0YWJsZSB0byBmcmVlICovCi16X3N0cmVhbXAgejsgICAgICAgICAgICAvKiBmb3IgemZyZWUgZnVuY3Rpb24gKi8KLS8qIEZyZWUgdGhlIG1hbGxvYydlZCB0YWJsZXMgYnVpbHQgYnkgaHVmdF9idWlsZCgpLCB3aGljaCBtYWtlcyBhIGxpbmtlZAotICAgbGlzdCBvZiB0aGUgdGFibGVzIGl0IG1hZGUsIHdpdGggdGhlIGxpbmtzIGluIGEgZHVtbXkgZmlyc3QgZW50cnkgb2YKLSAgIGVhY2ggdGFibGUuICovCi17Ci0gIHJlZ2lzdGVyIGluZmxhdGVfaHVmdCAqcCwgKnEsICpyOwotCi0gIC8qIFJldmVyc2UgbGlua2VkIGxpc3QgKi8KLSAgcCA9IFpfTlVMTDsKLSAgcSA9IHQ7Ci0gIHdoaWxlIChxICE9IFpfTlVMTCkKLSAgewotICAgIHIgPSAocSAtIDEpLT5uZXh0OwotICAgIChxIC0gMSktPm5leHQgPSBwOwotICAgIHAgPSBxOwotICAgIHEgPSByOwotICB9Ci0gIC8qIEdvIHRocm91Z2ggbGlua2VkIGxpc3QsIGZyZWVpbmcgZnJvbSB0aGUgbWFsbG9jZWQgKHRbLTFdKSBhZGRyZXNzLiAqLwotICB3aGlsZSAocCAhPSBaX05VTEwpCi0gIHsKLSAgICBxID0gKC0tcCktPm5leHQ7Ci0gICAgWkZSRUUoeixwKTsKLSAgICBwID0gcTsKLSAgfSAKLSAgcmV0dXJuIFpfT0s7Ci19CmRpZmYgLS1naXQgYS9pbmZ0cmVlcy5oIGIvaW5mdHJlZXMuaAppbmRleCBlM2RiNzVhLi5jMjUxM2QxIDEwMDY0NAotLS0gYS9pbmZ0cmVlcy5oCisrKyBiL2luZnRyZWVzLmgKQEAgLTI3LDE1ICsyNywxOSBAQAogICB9IG1vcmU7CiB9OwogCi0jaWZkZWYgREVCVUcKLSAgZXh0ZXJuIHVJbnQgaW5mbGF0ZV9odWZ0czsKLSNlbmRpZgorLyogTWF4aW11bSBzaXplIG9mIGR5bmFtaWMgdHJlZS4gIFRoZSBtYXhpbXVtIGZvdW5kIGluIGEgbG9uZyBidXQgbm9uLQorICAgZXhoYXVzdGl2ZSBzZWFyY2ggd2FzIDEwNDEgaHVmdCBzdHJ1Y3R1cmVzICg4NzUgZm9yIGxlbmd0aC9saXRlcmFscworICAgYW5kIDE2NiBmb3IgZGlzdGFuY2VzLCB0aGUgbGF0dGVyIGFjdHVhbGx5IHRoZSByZXN1bHQgb2YgYW4KKyAgIGV4aGF1c3RpdmUgc2VhcmNoKS4gIFRoZSBhY3R1YWwgbWF4aW11bSBpcyBub3Qga25vd24sIGJ1dCB0aGUKKyAgIHZhbHVlIGJlbG93IGlzIG1vcmUgdGhhbiBzYWZlLiAqLworI2RlZmluZSBNQU5ZIDE0NDAKIAogZXh0ZXJuIGludCBpbmZsYXRlX3RyZWVzX2JpdHMgT0YoKAogICAgIHVJbnRmICosICAgICAgICAgICAgICAgICAgICAvKiAxOSBjb2RlIGxlbmd0aHMgKi8KICAgICB1SW50ZiAqLCAgICAgICAgICAgICAgICAgICAgLyogYml0cyB0cmVlIGRlc2lyZWQvYWN0dWFsIGRlcHRoICovCiAgICAgaW5mbGF0ZV9odWZ0ICogRkFSICosICAgICAgIC8qIGJpdHMgdHJlZSByZXN1bHQgKi8KLSAgICB6X3N0cmVhbXAgKSk7ICAgICAgICAgICAgICAgLyogZm9yIHphbGxvYywgemZyZWUgZnVuY3Rpb25zICovCisgICAgaW5mbGF0ZV9odWZ0ICosICAgICAgICAgICAgIC8qIHNwYWNlIGZvciB0cmVlcyAqLworICAgIHpfc3RyZWFtcCkpOyAgICAgICAgICAgICAgICAvKiBmb3IgbWVzc2FnZXMgKi8KIAogZXh0ZXJuIGludCBpbmZsYXRlX3RyZWVzX2R5bmFtaWMgT0YoKAogICAgIHVJbnQsICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbGl0ZXJhbC9sZW5ndGggY29kZXMgKi8KQEAgLTQ1LDE1ICs0OSwxMiBAQAogICAgIHVJbnRmICosICAgICAgICAgICAgICAgICAgICAvKiBkaXN0YW5jZSBkZXNpcmVkL2FjdHVhbCBiaXQgZGVwdGggKi8KICAgICBpbmZsYXRlX2h1ZnQgKiBGQVIgKiwgICAgICAgLyogbGl0ZXJhbC9sZW5ndGggdHJlZSByZXN1bHQgKi8KICAgICBpbmZsYXRlX2h1ZnQgKiBGQVIgKiwgICAgICAgLyogZGlzdGFuY2UgdHJlZSByZXN1bHQgKi8KLSAgICB6X3N0cmVhbXAgKSk7ICAgICAgICAgICAgICAgLyogZm9yIHphbGxvYywgemZyZWUgZnVuY3Rpb25zICovCisgICAgaW5mbGF0ZV9odWZ0ICosICAgICAgICAgICAgIC8qIHNwYWNlIGZvciB0cmVlcyAqLworICAgIHpfc3RyZWFtcCkpOyAgICAgICAgICAgICAgICAvKiBmb3IgbWVzc2FnZXMgKi8KIAogZXh0ZXJuIGludCBpbmZsYXRlX3RyZWVzX2ZpeGVkIE9GKCgKICAgICB1SW50ZiAqLCAgICAgICAgICAgICAgICAgICAgLyogbGl0ZXJhbCBkZXNpcmVkL2FjdHVhbCBiaXQgZGVwdGggKi8KICAgICB1SW50ZiAqLCAgICAgICAgICAgICAgICAgICAgLyogZGlzdGFuY2UgZGVzaXJlZC9hY3R1YWwgYml0IGRlcHRoICovCiAgICAgaW5mbGF0ZV9odWZ0ICogRkFSICosICAgICAgIC8qIGxpdGVyYWwvbGVuZ3RoIHRyZWUgcmVzdWx0ICovCi0gICAgaW5mbGF0ZV9odWZ0ICogRkFSICopKTsgICAgIC8qIGRpc3RhbmNlIHRyZWUgcmVzdWx0ICovCi0KLWV4dGVybiBpbnQgaW5mbGF0ZV90cmVlc19mcmVlIE9GKCgKLSAgICBpbmZsYXRlX2h1ZnQgKiwgICAgICAgICAgICAgLyogdGFibGVzIHRvIGZyZWUgKi8KLSAgICB6X3N0cmVhbXAgKSk7ICAgICAgICAgICAgICAgLyogZm9yIHpmcmVlIGZ1bmN0aW9uICovCi0KKyAgICBpbmZsYXRlX2h1ZnQgKiBGQVIgKiwgICAgICAgLyogZGlzdGFuY2UgdHJlZSByZXN1bHQgKi8KKyAgICB6X3N0cmVhbXApKTsgICAgICAgICAgICAgICAgLyogZm9yIG1lbW9yeSBhbGxvY2F0aW9uICovCmRpZmYgLS1naXQgYS9pbmZ1dGlsLmggYi9pbmZ1dGlsLmgKaW5kZXggMTIxMzE2Yi4uOTlkMTEzNSAxMDA2NDQKLS0tIGEvaW5mdXRpbC5oCisrKyBiL2luZnV0aWwuaApAQCAtNDEsOCArNDEsNiBAQAogICAgICAgaW5mbGF0ZV9odWZ0ICp0YjsgICAgICAgICAvKiBiaXQgbGVuZ3RoIGRlY29kaW5nIHRyZWUgKi8KICAgICB9IHRyZWVzOyAgICAgICAgICAgIC8qIGlmIERUUkVFLCBkZWNvZGluZyBpbmZvIGZvciB0cmVlcyAqLwogICAgIHN0cnVjdCB7Ci0gICAgICBpbmZsYXRlX2h1ZnQgKnRsOwotICAgICAgaW5mbGF0ZV9odWZ0ICp0ZDsgICAgICAgICAvKiB0cmVlcyB0byBmcmVlICovCiAgICAgICBpbmZsYXRlX2NvZGVzX3N0YXRlZiAKICAgICAgICAgICpjb2RlczsKICAgICB9IGRlY29kZTsgICAgICAgICAgIC8qIGlmIENPREVTLCBjdXJyZW50IHN0YXRlICovCkBAIC01Miw2ICs1MCw3IEBACiAgIC8qIG1vZGUgaW5kZXBlbmRlbnQgaW5mb3JtYXRpb24gKi8KICAgdUludCBiaXRrOyAgICAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqLwogICB1TG9uZyBiaXRiOyAgICAgICAgICAgLyogYml0IGJ1ZmZlciAqLworICBpbmZsYXRlX2h1ZnQgKmh1ZnRzOyAgLyogc2luZ2xlIG1hbGxvYyBmb3IgdHJlZSBzcGFjZSAqLwogICBCeXRlZiAqd2luZG93OyAgICAgICAgLyogc2xpZGluZyB3aW5kb3cgKi8KICAgQnl0ZWYgKmVuZDsgICAgICAgICAgIC8qIG9uZSBieXRlIGFmdGVyIHNsaWRpbmcgd2luZG93ICovCiAgIEJ5dGVmICpyZWFkOyAgICAgICAgICAvKiB3aW5kb3cgcmVhZCBwb2ludGVyICovCmRpZmYgLS1naXQgYS9taW5pZ3ppcC5jIGIvbWluaWd6aXAuYwppbmRleCBmYjdmMjc4Li4xNGQxMjc3IDEwMDY0NAotLS0gYS9taW5pZ3ppcC5jCisrKyBiL21pbmlnemlwLmMKQEAgLTQ0LDEzICs0NCwxNSBAQAogIyAgZGVmaW5lIGZpbGVubyhmaWxlKSBmaWxlLT5fX2ZpbGUKICNlbmRpZgogCisjaWZuZGVmIFdJTjMyIC8qIHVubGluayBhbHJlYWR5IGluIHN0ZGlvLmggZm9yIFdJTjMyICovCisgIGV4dGVybiBpbnQgdW5saW5rIE9GKChjb25zdCBjaGFyICopKTsKKyNlbmRpZgorCiAjaWZuZGVmIEdaX1NVRkZJWAogIyAgZGVmaW5lIEdaX1NVRkZJWCAiLmd6IgogI2VuZGlmCiAjZGVmaW5lIFNVRkZJWF9MRU4gKHNpemVvZihHWl9TVUZGSVgpLTEpCiAKLWV4dGVybiBpbnQgdW5saW5rIE9GKChjb25zdCBjaGFyICopKTsKLQogI2RlZmluZSBCVUZMRU4gNDA5NgogI2RlZmluZSBNQVhfTkFNRV9MRU4gMTAyNAogCmRpZmYgLS1naXQgYS9tc2Rvcy96bGliLmRlZiBiL21zZG9zL3psaWIuZGVmCmluZGV4IDliY2RlYTQuLjg5ZTYyNmMgMTAwNjQ0Ci0tLSBhL21zZG9zL3psaWIuZGVmCisrKyBiL21zZG9zL3psaWIuZGVmCkBAIC04LDcgKzgsNyBAQAogCiBTVFVCCQknV0lOU1RVQi5FWEUnCiAKLVZFUlNJT04JCTEuMDgKK1ZFUlNJT04JCTEuMDkKIAogQ09ERQkJIEVYRUNVVEUgUkVBRAogCkBAIC01NSwzICs1NSw2IEBACiAgICAgekVycm9yICAgICAgICAgICAgICAgICAgICAgICAgIEAzNgogICAgIGluZmxhdGVTeW5jUG9pbnQgICAgICAgICAgICAgICBAMzcKICAgICBnZXRfY3JjX3RhYmxlICAgICAgICAgICAgICAgICAgQDM4CisgICAgY29tcHJlc3MyICAgICAgICAgICAgICAgICAgICAgIEAzOQorICAgIGd6cHV0cyAgICAgICAgICAgICAgICAgICAgICAgICBANDAKKyAgICBnemdldHMgICAgICAgICAgICAgICAgICAgICAgICAgQDQxCmRpZmYgLS1naXQgYS9tc2Rvcy96bGliLnJjIGIvbXNkb3MvemxpYi5yYwppbmRleCBjZGE3NzQ0Li44NjY5MGVjIDEwMDY0NAotLS0gYS9tc2Rvcy96bGliLnJjCisrKyBiL21zZG9zL3psaWIucmMKQEAgLTIsOCArMiw4IEBACiAKICNkZWZpbmUgSURSX1ZFUlNJT04xICAxCiBJRFJfVkVSU0lPTjEJVkVSU0lPTklORk8JTU9WRUFCTEUgSU1QVVJFIExPQURPTkNBTEwgRElTQ0FSREFCTEUKLSAgRklMRVZFUlNJT04JIDEsMCw4LDAKLSAgUFJPRFVDVFZFUlNJT04gMSwwLDgsMAorICBGSUxFVkVSU0lPTgkgMSwwLDksMAorICBQUk9EVUNUVkVSU0lPTiAxLDAsOSwwCiAgIEZJTEVGTEFHU01BU0sJVlNfRkZJX0ZJTEVGTEFHU01BU0sKICAgRklMRUZMQUdTCTAKICAgRklMRU9TCVZPU19ET1NfV0lORE9XUzMyCkBAIC0xNyw3ICsxNyw3IEBACiAKICAgICBCRUdJTgogICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJ6bGliIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeVwwIgotICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwJIjEuMC44XDAiCisgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLAkiMS4wLjlcMCIKICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLAkiemxpYlwwIgogICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLAkiemxpYi5kbGxcMCIKICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsCSJaTGliLkRMTFwwIgpkaWZmIC0tZ2l0IGEvbnQvemxpYi5kbnQgYi9udC96bGliLmRudAppbmRleCAxOGM5OTBjLi43Zjk0NzVjIDEwMDY0NAotLS0gYS9udC96bGliLmRudAorKysgYi9udC96bGliLmRudApAQCAtNDIsMyArNDIsNiBAQAogICAgIHpFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICBAMzYKICAgICBpbmZsYXRlU3luY1BvaW50ICAgICAgICAgICAgICAgQDM3CiAgICAgZ2V0X2NyY190YWJsZSAgICAgICAgICAgICAgICAgIEAzOAorICAgIGNvbXByZXNzMiAgICAgICAgICAgICAgICAgICAgICBAMzkKKyAgICBnenB1dHMgICAgICAgICAgICAgICAgICAgICAgICAgQDQwCisgICAgZ3pnZXRzICAgICAgICAgICAgICAgICAgICAgICAgIEA0MQpkaWZmIC0tZ2l0IGEvdGVzdC5jIGIvdGVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWM3NjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotZXh0ZXJuIGludCBnZXRjaGFyKCk7Ci1pbnQgaGVsbG8oKSB7cmV0dXJuIGdldGNoYXIoKTt9CmRpZmYgLS1naXQgYS91bmNvbXByLmMgYi91bmNvbXByLmMKaW5kZXggMmRiNDdjNC4uZDEwMzMyMSAxMDA2NDQKLS0tIGEvdW5jb21wci5jCisrKyBiL3VuY29tcHIuYwpAQCAtMjIsNyArMjIsNyBAQAogICAgZW5vdWdoIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0CiAgICBidWZmZXIsIG9yIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0YSB3YXMgY29ycnVwdGVkLgogKi8KLWludCBFWFBPUlQgdW5jb21wcmVzcyAoZGVzdCwgZGVzdExlbiwgc291cmNlLCBzb3VyY2VMZW4pCitpbnQgWkVYUE9SVCB1bmNvbXByZXNzIChkZXN0LCBkZXN0TGVuLCBzb3VyY2UsIHNvdXJjZUxlbikKICAgICBCeXRlZiAqZGVzdDsKICAgICB1TG9uZ2YgKmRlc3RMZW47CiAgICAgY29uc3QgQnl0ZWYgKnNvdXJjZTsKZGlmZiAtLWdpdCBhL3pjb25mLmggYi96Y29uZi5oCmluZGV4IDdiYzA1NGYuLjg5ZTFhMTYgMTAwNjQ0Ci0tLSBhL3pjb25mLmgKKysrIGIvemNvbmYuaApAQCAtMzAsNiArMzAsNyBAQAogIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgel9pbmZsYXRlU3luY1BvaW50CiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0CXpfaW5mbGF0ZVJlc2V0CiAjICBkZWZpbmUgY29tcHJlc3MJel9jb21wcmVzcworIyAgZGVmaW5lIGNvbXByZXNzMgl6X2NvbXByZXNzMgogIyAgZGVmaW5lIHVuY29tcHJlc3MJel91bmNvbXByZXNzCiAjICBkZWZpbmUgYWRsZXIzMgl6X2FkbGVyMzIKICMgIGRlZmluZSBjcmMzMgkJel9jcmMzMgpAQCAtMTU4LDYgKzE1OSwyOSBAQAogIyAgICBkZWZpbmUgRkFSIF9fZmFyCiAjICBlbmRpZgogI2VuZGlmCisKKy8qIENvbXBpbGUgd2l0aCAtRFpMSUJfRExMIGZvciBXaW5kb3dzIERMTCBzdXBwb3J0ICovCisjaWYgKGRlZmluZWQoX1dJTkRPV1MpIHx8IGRlZmluZWQoV0lORE9XUykpICYmIGRlZmluZWQoWkxJQl9ETEwpCisjICBpZmRlZiBGQVIKKyMgICAgdW5kZWYgRkFSCisjICBlbmRpZgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgZGVmaW5lIFpFWFBPUlQgIFdJTkFQSQorIyAgaWZkZWYgV0lOMzIKKyMgICAgZGVmaW5lIFpFWFBPUlRWQSAgV0lOQVBJVgorIyAgZWxzZQorIyAgICBkZWZpbmUgWkVYUE9SVFZBICBGQVIgX2NkZWNsIF9leHBvcnQKKyMgIGVuZGlmCisjZWxzZQorIyAgIGlmIGRlZmluZWQgKF9fQk9STEFORENfXykgJiYgZGVmaW5lZCAoX1dpbmRvd3MpICYmIGRlZmluZWQgKF9fRExMX18pCisjICAgICAgIGRlZmluZSBaRVhQT1JUIF9leHBvcnQKKyMgICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfZXhwb3J0CisjICAgZWxzZQorIyAgICAgICBkZWZpbmUgWkVYUE9SVAorIyAgICAgICBkZWZpbmUgWkVYUE9SVFZBCisjICAgZW5kaWYKKyNlbmRpZgorCiAjaWZuZGVmIEZBUgogIyAgIGRlZmluZSBGQVIKICNlbmRpZgpAQCAtMTk4LDI2ICsyMjIsNiBAQAogIyAgZGVmaW5lICB6X29mZl90IGxvbmcKICNlbmRpZgogCi0vKiBDb21waWxlIHdpdGggLURaTElCX0RMTCBmb3IgV2luZG93cyBETEwgc3VwcG9ydCAqLwotI2lmIChkZWZpbmVkKF9XSU5ET1dTKSB8fCBkZWZpbmVkKFdJTkRPV1MpKSAmJiBkZWZpbmVkKFpMSUJfRExMKQotIyAgdW5kZWYgRkFSCi0jICBpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jICBkZWZpbmUgRVhQT1JUICBXSU5BUEkKLSMgIGlmZGVmIFdJTjMyCi0jICAgIGRlZmluZSBFWFBPUlRWQSAgV0lOQVBJVgotIyAgZWxzZQotIyAgICBkZWZpbmUgRVhQT1JUVkEgIEZBUiBfY2RlY2wgX2V4cG9ydAotIyAgZW5kaWYKLSNlbHNlCi0jICAgaWYgZGVmaW5lZCAoX19CT1JMQU5EQ19fKSAmJiBkZWZpbmVkIChfV2luZG93cykgJiYgZGVmaW5lZCAoX19ETExfXykKLSMgICAgICAgZGVmaW5lIEVYUE9SVCBfZXhwb3J0Ci0jICAgICAgIGRlZmluZSBFWFBPUlRWQSBfZXhwb3J0Ci0jICAgZWxzZQotIyAgICAgICBkZWZpbmUgRVhQT1JUCi0jICAgICAgIGRlZmluZSBFWFBPUlRWQQotIyAgIGVuZGlmCi0jZW5kaWYKLQogLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KICNpZiBkZWZpbmVkKF9fTVZTX18pCiAjICAgcHJhZ21hIG1hcChkZWZsYXRlSW5pdF8sIkRFSU4iKQpkaWZmIC0tZ2l0IGEvemxpYi4zIGIvemxpYi4zCmluZGV4IDNjNDQyYmMuLmE5Njk4MzQgMTAwNjQ0Ci0tLSBhL3psaWIuMworKysgYi96bGliLjMKQEAgLTEsMTAgKzEsMTAgQEAKLS5USCBaTElCIDMgIjI2IEphbnVhcnkgMTk5OCIKKy5USCBaTElCIDMgIjE2IEZlYnJ1YXJ5IDE5OTgiCiAuU0ggTkFNRQogemxpYiBcLSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxpYnJhcnkKIC5TSCBTWU5PUFNJUwogW3NlZQogLkkgemxpYi5oCi1mb3IgZnVsbCBkZXNjcmlwdG9uXQorZm9yIGZ1bGwgZGVzY3JpcHRpb25dCiAuU0ggREVTQ1JJUFRJT04KIFRoZQogLkkgemxpYgpAQCAtODEsNyArODEsNyBAQAogLklQCiBmdHA6Ly9mdHAudXUubmV0L2dyYXBoaWNzL3BuZy9kb2N1bWVudHMvemxpYi96ZG9jLWluZGV4Lmh0bWwKIC5TSCBBVVRIT1JTCi1WZXJzaW9uIDEuMC44LgorVmVyc2lvbiAxLjAuOS4KIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkgKGpsb3VwQGd6aXAub3JnKQogYW5kIE1hcmsgQWRsZXIgKG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUpLgogLkxQCmRpZmYgLS1naXQgYS96bGliLmggYi96bGliLmgKaW5kZXggMjMxOTgzNS4uNWJjYmYxMiAxMDA2NDQKLS0tIGEvemxpYi5oCisrKyBiL3psaWIuaApAQCAtMSw1ICsxLDUgQEAKIC8qIHpsaWIuaCAtLSBpbnRlcmZhY2Ugb2YgdGhlICd6bGliJyBnZW5lcmFsIHB1cnBvc2UgY29tcHJlc3Npb24gbGlicmFyeQotICB2ZXJzaW9uIDEuMC44LCBKYW4gMjd0aCwgMTk5OAorICB2ZXJzaW9uIDEuMC45LCBGZWIgMTZ0aCwgMTk5OAogCiAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKIApAQCAtMzcsNyArMzcsNyBAQAogCiAjaW5jbHVkZSAiemNvbmYuaCIKIAotI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMC44IgorI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMC45IgogCiAvKiAKICAgICAgVGhlICd6bGliJyBjb21wcmVzc2lvbiBsaWJyYXJ5IHByb3ZpZGVzIGluLW1lbW9yeSBjb21wcmVzc2lvbiBhbmQKQEAgLTEwMSw2ICsxMDEsOSBAQAogICAgb3BhcXVlIHZhbHVlLgogCiAgICB6YWxsb2MgbXVzdCByZXR1cm4gWl9OVUxMIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aGUgb2JqZWN0LgorICAgSWYgemxpYiBpcyB1c2VkIGluIGEgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24sIHphbGxvYyBhbmQgemZyZWUgbXVzdCBiZQorICAgdGhyZWFkIHNhZmUuCisKICAgIE9uIDE2LWJpdCBzeXN0ZW1zLCB0aGUgZnVuY3Rpb25zIHphbGxvYyBhbmQgemZyZWUgbXVzdCBiZSBhYmxlIHRvIGFsbG9jYXRlCiAgICBleGFjdGx5IDY1NTM2IGJ5dGVzLCBidXQgd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8gYWxsb2NhdGUgbW9yZSB0aGFuIHRoaXMKICAgIGlmIHRoZSBzeW1ib2wgTUFYU0VHXzY0SyBpcyBkZWZpbmVkIChzZWUgemNvbmYuaCkuIFdBUk5JTkc6IE9uIE1TRE9TLApAQCAtMTY1LDcgKzE2OCw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2ljIGZ1bmN0aW9ucyAqLwogCi1leHRlcm4gY29uc3QgY2hhciAqIEVYUE9SVCB6bGliVmVyc2lvbiBPRigodm9pZCkpOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBaRVhQT1JUIHpsaWJWZXJzaW9uIE9GKCh2b2lkKSk7CiAvKiBUaGUgYXBwbGljYXRpb24gY2FuIGNvbXBhcmUgemxpYlZlcnNpb24gYW5kIFpMSUJfVkVSU0lPTiBmb3IgY29uc2lzdGVuY3kuCiAgICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGRpZmZlcnMsIHRoZSBsaWJyYXJ5IGNvZGUgYWN0dWFsbHkgdXNlZCBpcwogICAgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgemxpYi5oIGhlYWRlciBmaWxlIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgpAQCAtMTczLDcgKzE3Niw3IEBACiAgKi8KIAogLyogCi1leHRlcm4gaW50IEVYUE9SVCBkZWZsYXRlSW5pdCBPRigoel9zdHJlYW1wIHN0cm0sIGludCBsZXZlbCkpOworZXh0ZXJuIGludCBaRVhQT1JUIGRlZmxhdGVJbml0IE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGxldmVsKSk7CiAKICAgICAgSW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIHN0cmVhbSBzdGF0ZSBmb3IgY29tcHJlc3Npb24uIFRoZSBmaWVsZHMKICAgIHphbGxvYywgemZyZWUgYW5kIG9wYXF1ZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieSB0aGUgY2FsbGVyLgpAQCAtMTk1LDcgKzE5OCw3IEBACiAqLwogCiAKLWV4dGVybiBpbnQgRVhQT1JUIGRlZmxhdGUgT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgZmx1c2gpKTsKK2V4dGVybiBpbnQgWkVYUE9SVCBkZWZsYXRlIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGZsdXNoKSk7CiAvKgogICAgIGRlZmxhdGUgY29tcHJlc3NlcyBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUsIGFuZCBzdG9wcyB3aGVuIHRoZSBpbnB1dAogICBidWZmZXIgYmVjb21lcyBlbXB0eSBvciB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuIEl0IG1heSBpbnRyb2R1Y2Ugc29tZQpAQCAtMjcyLDcgKzI3NSw3IEBACiAqLwogCiAKLWV4dGVybiBpbnQgRVhQT1JUIGRlZmxhdGVFbmQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CitleHRlcm4gaW50IFpFWFBPUlQgZGVmbGF0ZUVuZCBPRigoel9zdHJlYW1wIHN0cm0pKTsKIC8qCiAgICAgIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGlzIHN0cmVhbSBhcmUgZnJlZWQuCiAgICBUaGlzIGZ1bmN0aW9uIGRpc2NhcmRzIGFueSB1bnByb2Nlc3NlZCBpbnB1dCBhbmQgZG9lcyBub3QgZmx1c2ggYW55CkBAIC0yODcsNyArMjkwLDcgQEAKIAogCiAvKiAKLWV4dGVybiBpbnQgRVhQT1JUIGluZmxhdGVJbml0IE9GKCh6X3N0cmVhbXAgc3RybSkpOworZXh0ZXJuIGludCBaRVhQT1JUIGluZmxhdGVJbml0IE9GKCh6X3N0cmVhbXAgc3RybSkpOwogCiAgICAgIEluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBzdHJlYW0gc3RhdGUgZm9yIGRlY29tcHJlc3Npb24uIFRoZSBmaWVsZHMKICAgIG5leHRfaW4sIGF2YWlsX2luLCB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYnkKQEAgLTMwNyw3ICszMTAsNyBAQAogKi8KIAogCi1leHRlcm4gaW50IEVYUE9SVCBpbmZsYXRlIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGZsdXNoKSk7CitleHRlcm4gaW50IFpFWFBPUlQgaW5mbGF0ZSBPRigoel9zdHJlYW1wIHN0cm0sIGludCBmbHVzaCkpOwogLyoKICAgICBpbmZsYXRlIGRlY29tcHJlc3NlcyBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUsIGFuZCBzdG9wcyB3aGVuIHRoZSBpbnB1dAogICBidWZmZXIgYmVjb21lcyBlbXB0eSBvciB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuIEl0IG1heSBzb21lCkBAIC0zNzYsNyArMzc5LDcgQEAKICovCiAKIAotZXh0ZXJuIGludCBFWFBPUlQgaW5mbGF0ZUVuZCBPRigoel9zdHJlYW1wIHN0cm0pKTsKK2V4dGVybiBpbnQgWkVYUE9SVCBpbmZsYXRlRW5kIE9GKCh6X3N0cmVhbXAgc3RybSkpOwogLyoKICAgICAgQWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoaXMgc3RyZWFtIGFyZSBmcmVlZC4KICAgIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgYW55IHVucHJvY2Vzc2VkIGlucHV0IGFuZCBkb2VzIG5vdCBmbHVzaCBhbnkKQEAgLTM5NCwxMiArMzk3LDEyIEBACiAqLwogCiAvKiAgIAotZXh0ZXJuIGludCBFWFBPUlQgZGVmbGF0ZUluaXQyIE9GKCh6X3N0cmVhbXAgc3RybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd2luZG93Qml0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtZW1MZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBzdHJhdGVneSkpOworZXh0ZXJuIGludCBaRVhQT1JUIGRlZmxhdGVJbml0MiBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdpbmRvd0JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG1lbUxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBzdHJhdGVneSkpOwogCiAgICAgIFRoaXMgaXMgYW5vdGhlciB2ZXJzaW9uIG9mIGRlZmxhdGVJbml0IHdpdGggbW9yZSBjb21wcmVzc2lvbiBvcHRpb25zLiBUaGUKICAgIGZpZWxkcyBuZXh0X2luLCB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYnkKQEAgLTQzNyw5ICs0NDAsOSBAQAogICAgbm90IHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotZXh0ZXJuIGludCBFWFBPUlQgZGVmbGF0ZVNldERpY3Rpb25hcnkgT0YoKHpfc3RyZWFtcCBzdHJtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ5dGVmICpkaWN0aW9uYXJ5LAotCQkJCSAgICAgICAgICAgdUludCAgZGljdExlbmd0aCkpOworZXh0ZXJuIGludCBaRVhQT1JUIGRlZmxhdGVTZXREaWN0aW9uYXJ5IE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKmRpY3Rpb25hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgIGRpY3RMZW5ndGgpKTsKIC8qCiAgICAgIEluaXRpYWxpemVzIHRoZSBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIGJ5dGUgc2VxdWVuY2UKICAgIHdpdGhvdXQgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZApAQCAtNDczLDggKzQ3Niw4IEBACiAgICBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgogKi8KIAotZXh0ZXJuIGludCBFWFBPUlQgZGVmbGF0ZUNvcHkgT0YoKHpfc3RyZWFtcCBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfc3RyZWFtcCBzb3VyY2UpKTsKK2V4dGVybiBpbnQgWkVYUE9SVCBkZWZsYXRlQ29weSBPRigoel9zdHJlYW1wIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfc3RyZWFtcCBzb3VyY2UpKTsKIC8qCiAgICAgIFNldHMgdGhlIGRlc3RpbmF0aW9uIHN0cmVhbSBhcyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHNvdXJjZSBzdHJlYW0uCiAKQEAgLTQ5MSw3ICs0OTQsNyBAQAogICAgZGVzdGluYXRpb24uCiAqLwogCi1leHRlcm4gaW50IEVYUE9SVCBkZWZsYXRlUmVzZXQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CitleHRlcm4gaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IE9GKCh6X3N0cmVhbXAgc3RybSkpOwogLyoKICAgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGRlZmxhdGVFbmQgZm9sbG93ZWQgYnkgZGVmbGF0ZUluaXQsCiAgICBidXQgZG9lcyBub3QgZnJlZSBhbmQgcmVhbGxvY2F0ZSBhbGwgdGhlIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLgpAQCAtNTAyLDcgKzUwNSw3IEBACiAgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgTlVMTCkuCiAqLwogCi1leHRlcm4gaW50IEVYUE9SVCBkZWZsYXRlUGFyYW1zIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGxldmVsLCBpbnQgc3RyYXRlZ3kpKTsKK2V4dGVybiBpbnQgWkVYUE9SVCBkZWZsYXRlUGFyYW1zIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGxldmVsLCBpbnQgc3RyYXRlZ3kpKTsKIC8qCiAgICAgIER5bmFtaWNhbGx5IHVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIGNvbXByZXNzaW9uIHN0cmF0ZWd5LiAgVGhlCiAgICBpbnRlcnByZXRhdGlvbiBvZiBsZXZlbCBhbmQgc3RyYXRlZ3kgaXMgYXMgaW4gZGVmbGF0ZUluaXQyLiAgVGhpcyBjYW4gYmUKQEAgLTUyMiw4ICs1MjUsOCBAQAogKi8KIAogLyogICAKLWV4dGVybiBpbnQgRVhQT1JUIGluZmxhdGVJbml0MiBPRigoel9zdHJlYW1wIHN0cm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd2luZG93Qml0cykpOworZXh0ZXJuIGludCBaRVhQT1JUIGluZmxhdGVJbml0MiBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdpbmRvd0JpdHMpKTsKIAogICAgICBUaGlzIGlzIGFub3RoZXIgdmVyc2lvbiBvZiBpbmZsYXRlSW5pdCB3aXRoIGFuIGV4dHJhIHBhcmFtZXRlci4gVGhlCiAgICBmaWVsZHMgbmV4dF9pbiwgYXZhaWxfaW4sIHphbGxvYywgemZyZWUgYW5kIG9wYXF1ZSBtdXN0IGJlIGluaXRpYWxpemVkCkBAIC01NDQsOSArNTQ3LDkgQEAKICAgIG1vZGlmaWVkLCBidXQgbmV4dF9vdXQgYW5kIGF2YWlsX291dCBhcmUgdW5jaGFuZ2VkLikKICovCiAKLWV4dGVybiBpbnQgRVhQT1JUIGluZmxhdGVTZXREaWN0aW9uYXJ5IE9GKCh6X3N0cmVhbXAgc3RybSwKLQkJCQkgICAgICAgICAgIGNvbnN0IEJ5dGVmICpkaWN0aW9uYXJ5LAotCQkJCQkgICB1SW50ICBkaWN0TGVuZ3RoKSk7CitleHRlcm4gaW50IFpFWFBPUlQgaW5mbGF0ZVNldERpY3Rpb25hcnkgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCeXRlZiAqZGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgZGljdExlbmd0aCkpOwogLyoKICAgICAgSW5pdGlhbGl6ZXMgdGhlIGRlY29tcHJlc3Npb24gZGljdGlvbmFyeSBmcm9tIHRoZSBnaXZlbiB1bmNvbXByZXNzZWQgYnl0ZQogICAgc2VxdWVuY2UuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBjYWxsIG9mIGluZmxhdGUKQEAgLTU2Myw3ICs1NjYsNyBAQAogICAgaW5mbGF0ZSgpLgogKi8KIAotZXh0ZXJuIGludCBFWFBPUlQgaW5mbGF0ZVN5bmMgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CitleHRlcm4gaW50IFpFWFBPUlQgaW5mbGF0ZVN5bmMgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CiAvKiAKICAgICBTa2lwcyBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSB1bnRpbCBhIGZ1bGwgZmx1c2ggcG9pbnQgKHNlZSBhYm92ZSB0aGUKICAgZGVzY3JpcHRpb24gb2YgZGVmbGF0ZSB3aXRoIFpfRlVMTF9GTFVTSCkgY2FuIGJlIGZvdW5kLCBvciB1bnRpbCBhbGwKQEAgLTU3OCw3ICs1ODEsNyBAQAogICB1bnRpbCBzdWNjZXNzIG9yIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS4KICovCiAKLWV4dGVybiBpbnQgRVhQT1JUIGluZmxhdGVSZXNldCBPRigoel9zdHJlYW1wIHN0cm0pKTsKK2V4dGVybiBpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CiAvKgogICAgICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gaW5mbGF0ZUVuZCBmb2xsb3dlZCBieSBpbmZsYXRlSW5pdCwKICAgIGJ1dCBkb2VzIG5vdCBmcmVlIGFuZCByZWFsbG9jYXRlIGFsbCB0aGUgaW50ZXJuYWwgZGVjb21wcmVzc2lvbiBzdGF0ZS4KQEAgLTU5OSw4ICs2MDIsOCBAQAogICAgdXRpbGl0eSBmdW5jdGlvbnMgY2FuIGVhc2lseSBiZSBtb2RpZmllZCBpZiB5b3UgbmVlZCBzcGVjaWFsIG9wdGlvbnMuCiAqLwogCi1leHRlcm4gaW50IEVYUE9SVCBjb21wcmVzcyBPRigoQnl0ZWYgKmRlc3QsICAgdUxvbmdmICpkZXN0TGVuLAotCQkJICAgICAgIGNvbnN0IEJ5dGVmICpzb3VyY2UsIHVMb25nIHNvdXJjZUxlbikpOworZXh0ZXJuIGludCBaRVhQT1JUIGNvbXByZXNzIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ5dGVmICpzb3VyY2UsIHVMb25nIHNvdXJjZUxlbikpOwogLyoKICAgICAgQ29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBzb3VyY2VMZW4gaXMKICAgIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwKQEAgLTYxNCw5ICs2MTcsOSBAQAogICAgYnVmZmVyLgogKi8KIAotZXh0ZXJuIGludCBFWFBPUlQgY29tcHJlc3MyIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sCi0JIAkJICAgICAgICBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4sCi0JCQkJaW50IGxldmVsKSk7CitleHRlcm4gaW50IFpFWFBPUlQgY29tcHJlc3MyIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwpKTsKIC8qCiAgICAgIENvbXByZXNzZXMgdGhlIHNvdXJjZSBidWZmZXIgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiBUaGUgbGV2ZWwKICAgIHBhcmFtZXRlciBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiBkZWZsYXRlSW5pdC4gIHNvdXJjZUxlbiBpcyB0aGUgYnl0ZQpAQCAtNjI5LDggKzYzMiw4IEBACiAgICBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgbGV2ZWwgcGFyYW1ldGVyIGlzIGludmFsaWQuCiAqLwogCi1leHRlcm4gaW50IEVYUE9SVCB1bmNvbXByZXNzIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sCi0JCQkJIGNvbnN0IEJ5dGVmICpzb3VyY2UsIHVMb25nIHNvdXJjZUxlbikpOworZXh0ZXJuIGludCBaRVhQT1JUIHVuY29tcHJlc3MgT0YoKEJ5dGVmICpkZXN0LCAgIHVMb25nZiAqZGVzdExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4pKTsKIC8qCiAgICAgIERlY29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBzb3VyY2VMZW4gaXMKICAgIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwKQEAgLTY1MCw3ICs2NTMsNyBAQAogCiB0eXBlZGVmIHZvaWRwIGd6RmlsZTsKIAotZXh0ZXJuIGd6RmlsZSBFWFBPUlQgZ3pvcGVuICBPRigoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkpOworZXh0ZXJuIGd6RmlsZSBaRVhQT1JUIGd6b3BlbiAgT0YoKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpKTsKIC8qCiAgICAgIE9wZW5zIGEgZ3ppcCAoLmd6KSBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuIFRoZSBtb2RlIHBhcmFtZXRlcgogICAgaXMgYXMgaW4gZm9wZW4gKCJyYiIgb3IgIndiIikgYnV0IGNhbiBhbHNvIGluY2x1ZGUgYSBjb21wcmVzc2lvbiBsZXZlbApAQCAtNjY2LDcgKzY2OSw3IEBACiAgICBjYW4gYmUgY2hlY2tlZCB0byBkaXN0aW5ndWlzaCB0aGUgdHdvIGNhc2VzIChpZiBlcnJubyBpcyB6ZXJvLCB0aGUKICAgIHpsaWIgZXJyb3IgaXMgWl9NRU1fRVJST1IpLiAgKi8KIAotZXh0ZXJuIGd6RmlsZSBFWFBPUlQgZ3pkb3BlbiAgT0YoKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSkpOworZXh0ZXJuIGd6RmlsZSBaRVhQT1JUIGd6ZG9wZW4gIE9GKChpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpKTsKIC8qCiAgICAgIGd6ZG9wZW4oKSBhc3NvY2lhdGVzIGEgZ3pGaWxlIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4gIEZpbGUKICAgIGRlc2NyaXB0b3JzIGFyZSBvYnRhaW5lZCBmcm9tIGNhbGxzIGxpa2Ugb3BlbiwgZHVwLCBjcmVhdCwgcGlwZSBvcgpAQCAtNjc5LDcgKzY4Miw3IEBACiAgICB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlLgogKi8KIAotZXh0ZXJuIGludCBFWFBPUlQgZ3pzZXRwYXJhbXMgT0YoKGd6RmlsZSBmaWxlLCBpbnQgbGV2ZWwsIGludCBzdHJhdGVneSkpOworZXh0ZXJuIGludCBaRVhQT1JUIGd6c2V0cGFyYW1zIE9GKChnekZpbGUgZmlsZSwgaW50IGxldmVsLCBpbnQgc3RyYXRlZ3kpKTsKIC8qCiAgICAgIER5bmFtaWNhbGx5IHVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgb3Igc3RyYXRlZ3kuIFNlZSB0aGUgZGVzY3JpcHRpb24KICAgIG9mIGRlZmxhdGVJbml0MiBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlc2UgcGFyYW1ldGVycy4KQEAgLTY4Nyw3ICs2OTAsNyBAQAogICAgb3BlbmVkIGZvciB3cml0aW5nLgogKi8KIAotZXh0ZXJuIGludCBFWFBPUlQgICAgZ3pyZWFkICBPRigoZ3pGaWxlIGZpbGUsIHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKSk7CitleHRlcm4gaW50IFpFWFBPUlQgICAgZ3pyZWFkICBPRigoZ3pGaWxlIGZpbGUsIHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKSk7CiAvKgogICAgICBSZWFkcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuCiAgICBJZiB0aGUgaW5wdXQgZmlsZSB3YXMgbm90IGluIGd6aXAgZm9ybWF0LCBnenJlYWQgY29waWVzIHRoZSBnaXZlbiBudW1iZXIKQEAgLTY5NSwzMyArNjk4LDQ5IEBACiAgICAgIGd6cmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHJlYWQgKDAgZm9yCiAgICBlbmQgb2YgZmlsZSwgLTEgZm9yIGVycm9yKS4gKi8KIAotZXh0ZXJuIGludCBFWFBPUlQgICAgZ3p3cml0ZSBPRigoZ3pGaWxlIGZpbGUsIGNvbnN0IHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKSk7CitleHRlcm4gaW50IFpFWFBPUlQgICAgZ3p3cml0ZSBPRigoZ3pGaWxlIGZpbGUsIGNvbnN0IHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKSk7CiAvKgogICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgogICAgZ3p3cml0ZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4KICAgICgwIGluIGNhc2Ugb2YgZXJyb3IpLgogKi8KIAotZXh0ZXJuIGludCBFWFBPUlRWQSAgIGd6cHJpbnRmIE9GKChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKK2V4dGVybiBpbnQgWkVYUE9SVFZBICAgZ3pwcmludGYgT0YoKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOwogLyoKICAgICAgQ29udmVydHMsIGZvcm1hdHMsIGFuZCB3cml0ZXMgdGhlIGFyZ3MgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSB1bmRlcgogICAgY29udHJvbCBvZiB0aGUgZm9ybWF0IHN0cmluZywgYXMgaW4gZnByaW50Zi4gZ3pwcmludGYgcmV0dXJucyB0aGUgbnVtYmVyIG9mCiAgICB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiAoMCBpbiBjYXNlIG9mIGVycm9yKS4KICovCiAKLWV4dGVybiBpbnQgRVhQT1JUICAgIGd6cHV0YyBPRigoZ3pGaWxlIGZpbGUsIGludCBjKSk7CitleHRlcm4gaW50IFpFWFBPUlQgZ3pwdXRzIE9GKChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqcykpOworLyoKKyAgICAgIFdyaXRlcyB0aGUgZ2l2ZW4gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgY29tcHJlc3NlZCBmaWxlLCBleGNsdWRpbmcKKyAgIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KKyAgICAgIGd6cHV0cyByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgorKi8KKworZXh0ZXJuIGNoYXIgKiBaRVhQT1JUIGd6Z2V0cyBPRigoZ3pGaWxlIGZpbGUsIGNoYXIgKmJ1ZiwgaW50IGxlbikpOworLyoKKyAgICAgIFJlYWRzIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSB1bnRpbCBsZW4tMSBjaGFyYWN0ZXJzIGFyZSByZWFkLCBvcgorICAgYSBuZXdsaW5lIGNoYXJhY3RlciBpcyByZWFkIGFuZCB0cmFuc2ZlcnJlZCB0byBidWYsIG9yIGFuIGVuZC1vZi1maWxlCisgICBjb25kaXRpb24gaXMgZW5jb3VudGVyZWQuICBUaGUgc3RyaW5nIGlzIHRoZW4gdGVybWluYXRlZCB3aXRoIGEgbnVsbAorICAgY2hhcmFjdGVyLgorICAgICAgZ3pnZXRzIHJldHVybnMgYnVmLCBvciBaX05VTEwgaW4gY2FzZSBvZiBlcnJvci4KKyovCisKK2V4dGVybiBpbnQgWkVYUE9SVCAgICBnenB1dGMgT0YoKGd6RmlsZSBmaWxlLCBpbnQgYykpOwogLyoKICAgICAgIFdyaXRlcyBjLCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQgY2hhciwgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgogICAgZ3pwdXRjIHJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCiAqLwogCi1leHRlcm4gaW50IEVYUE9SVCAgICBnemdldGMgT0YoKGd6RmlsZSBmaWxlKSk7CitleHRlcm4gaW50IFpFWFBPUlQgICAgZ3pnZXRjIE9GKChnekZpbGUgZmlsZSkpOwogLyoKICAgICAgIFJlYWRzIG9uZSBieXRlIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gZ3pnZXRjIHJldHVybnMgdGhpcyBieXRlCiAgICBvciAtMSBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLgogKi8KIAotZXh0ZXJuIGludCBFWFBPUlQgICAgZ3pmbHVzaCBPRigoZ3pGaWxlIGZpbGUsIGludCBmbHVzaCkpOworZXh0ZXJuIGludCBaRVhQT1JUICAgIGd6Zmx1c2ggT0YoKGd6RmlsZSBmaWxlLCBpbnQgZmx1c2gpKTsKIC8qCiAgICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4gVGhlIHBhcmFtZXRlcgogICAgZmx1c2ggaXMgYXMgaW4gdGhlIGRlZmxhdGUoKSBmdW5jdGlvbi4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgemxpYgpAQCAtNzMxLDcgKzc1MCw3IEBACiAgICBkZWdyYWRlIGNvbXByZXNzaW9uLgogKi8KIAotZXh0ZXJuIHpfb2ZmX3QgRVhQT1JUICAgIGd6c2VlayBPRigoZ3pGaWxlIGZpbGUsIHpfb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKSk7CitleHRlcm4gel9vZmZfdCBaRVhQT1JUICAgIGd6c2VlayBPRigoZ3pGaWxlIGZpbGUsIHpfb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKSk7CiAvKiAKICAgICAgIFNldHMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0aGUgZ2l2ZW4KICAgIGNvbXByZXNzZWQgZmlsZS4gVGhlIG9mZnNldCByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQpAQCAtNzQ4LDE0ICs3NjcsMTQgQEAKICAgIHdvdWxkIGJlIGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KICovCiAKLWV4dGVybiBpbnQgRVhQT1JUICAgIGd6cmV3aW5kIE9GKChnekZpbGUgZmlsZSkpOworZXh0ZXJuIGludCBaRVhQT1JUICAgIGd6cmV3aW5kIE9GKChnekZpbGUgZmlsZSkpOwogLyoKICAgICAgUmV3aW5kcyB0aGUgZ2l2ZW4gZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgb25seSBmb3IgcmVhZGluZy4KIAogICAgZ3pyZXdpbmQoZmlsZSkgaXMgZXF1aXZhbGVudCB0byAoaW50KWd6c2VlayhmaWxlLCAwTCwgU0VFS19TRVQpCiAqLwogCi1leHRlcm4gel9vZmZfdCBFWFBPUlQgICAgZ3p0ZWxsIE9GKChnekZpbGUgZmlsZSkpOworZXh0ZXJuIHpfb2ZmX3QgWkVYUE9SVCAgICBnenRlbGwgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgogICAgICBSZXR1cm5zIHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZ3pyZWFkIG9yIGd6d3JpdGUgb24gdGhlCiAgICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIFRoaXMgcG9zaXRpb24gcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUKQEAgLTc2NCwyMCArNzgzLDIwIEBACiAgICBnenRlbGwoZmlsZSkgaXMgZXF1aXZhbGVudCB0byBnenNlZWsoZmlsZSwgMEwsIFNFRUtfQ1VSKQogKi8KIAotZXh0ZXJuIGludCBFWFBPUlQgZ3plb2YgT0YoKGd6RmlsZSBmaWxlKSk7CitleHRlcm4gaW50IFpFWFBPUlQgZ3plb2YgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgogICAgICBSZXR1cm5zIDEgd2hlbiBFT0YgaGFzIHByZXZpb3VzbHkgYmVlbiBkZXRlY3RlZCByZWFkaW5nIHRoZSBnaXZlbgogICAgaW5wdXQgc3RyZWFtLCBvdGhlcndpc2UgemVyby4KICovCiAKLWV4dGVybiBpbnQgRVhQT1JUICAgIGd6Y2xvc2UgT0YoKGd6RmlsZSBmaWxlKSk7CitleHRlcm4gaW50IFpFWFBPUlQgICAgZ3pjbG9zZSBPRigoZ3pGaWxlIGZpbGUpKTsKIC8qCiAgICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGlmIG5lY2Vzc2FyeSwgY2xvc2VzIHRoZSBjb21wcmVzc2VkIGZpbGUKICAgIGFuZCBkZWFsbG9jYXRlcyBhbGwgdGhlIChkZSljb21wcmVzc2lvbiBzdGF0ZS4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgemxpYgogICAgZXJyb3IgbnVtYmVyIChzZWUgZnVuY3Rpb24gZ3plcnJvciBiZWxvdykuCiAqLwogCi1leHRlcm4gY29uc3QgY2hhciAqIEVYUE9SVCBnemVycm9yIE9GKChnekZpbGUgZmlsZSwgaW50ICplcnJudW0pKTsKK2V4dGVybiBjb25zdCBjaGFyICogWkVYUE9SVCBnemVycm9yIE9GKChnekZpbGUgZmlsZSwgaW50ICplcnJudW0pKTsKIC8qCiAgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBsYXN0IGVycm9yIHdoaWNoIG9jY3VycmVkIG9uIHRoZQogICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBlcnJudW0gaXMgc2V0IHRvIHpsaWIgZXJyb3IgbnVtYmVyLiBJZiBhbgpAQCAtNzk0LDcgKzgxMyw3IEBACiAgICBjb21wcmVzc2lvbiBsaWJyYXJ5LgogKi8KIAotZXh0ZXJuIHVMb25nIEVYUE9SVCBhZGxlcjMyIE9GKCh1TG9uZyBhZGxlciwgY29uc3QgQnl0ZWYgKmJ1ZiwgdUludCBsZW4pKTsKK2V4dGVybiB1TG9uZyBaRVhQT1JUIGFkbGVyMzIgT0YoKHVMb25nIGFkbGVyLCBjb25zdCBCeXRlZiAqYnVmLCB1SW50IGxlbikpOwogCiAvKgogICAgICBVcGRhdGUgYSBydW5uaW5nIEFkbGVyLTMyIGNoZWNrc3VtIHdpdGggdGhlIGJ5dGVzIGJ1ZlswLi5sZW4tMV0gYW5kCkBAIC04MTEsNyArODMwLDcgQEAKICAgICAgaWYgKGFkbGVyICE9IG9yaWdpbmFsX2FkbGVyKSBlcnJvcigpOwogKi8KIAotZXh0ZXJuIHVMb25nIEVYUE9SVCBjcmMzMiAgIE9GKCh1TG9uZyBjcmMsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKSk7CitleHRlcm4gdUxvbmcgWkVYUE9SVCBjcmMzMiAgIE9GKCh1TG9uZyBjcmMsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKSk7CiAvKgogICAgICBVcGRhdGUgYSBydW5uaW5nIGNyYyB3aXRoIHRoZSBieXRlcyBidWZbMC4ubGVuLTFdIGFuZCByZXR1cm4gdGhlIHVwZGF0ZWQKICAgIGNyYy4gSWYgYnVmIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWlyZWQgaW5pdGlhbCB2YWx1ZQpAQCAtODMzLDIyICs4NTIsMjMgQEAKIC8qIGRlZmxhdGVJbml0IGFuZCBpbmZsYXRlSW5pdCBhcmUgbWFjcm9zIHRvIGFsbG93IGNoZWNraW5nIHRoZSB6bGliIHZlcnNpb24KICAqIGFuZCB0aGUgY29tcGlsZXIncyB2aWV3IG9mIHpfc3RyZWFtOgogICovCi1leHRlcm4gaW50IEVYUE9SVCBkZWZsYXRlSW5pdF8gT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgbGV2ZWwsCi0JCQkgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sIGludCBzdHJlYW1fc2l6ZSkpOwotZXh0ZXJuIGludCBFWFBPUlQgaW5mbGF0ZUluaXRfIE9GKCh6X3N0cmVhbXAgc3RybSwKLQkJCQkgICBjb25zdCBjaGFyICp2ZXJzaW9uLCBpbnQgc3RyZWFtX3NpemUpKTsKLWV4dGVybiBpbnQgRVhQT1JUIGRlZmxhdGVJbml0Ml8gT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgIGxldmVsLCBpbnQgIG1ldGhvZCwKLQkJCQkgICAgaW50IHdpbmRvd0JpdHMsIGludCBtZW1MZXZlbCwgaW50IHN0cmF0ZWd5LAotCQkJCSAgICBjb25zdCBjaGFyICp2ZXJzaW9uLCBpbnQgc3RyZWFtX3NpemUpKTsKLWV4dGVybiBpbnQgRVhQT1JUIGluZmxhdGVJbml0Ml8gT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgIHdpbmRvd0JpdHMsCi0JCQkJICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sIGludCBzdHJlYW1fc2l6ZSkpOworZXh0ZXJuIGludCBaRVhQT1JUIGRlZmxhdGVJbml0XyBPRigoel9zdHJlYW1wIHN0cm0sIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sIGludCBzdHJlYW1fc2l6ZSkpOworZXh0ZXJuIGludCBaRVhQT1JUIGluZmxhdGVJbml0XyBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLCBpbnQgc3RyZWFtX3NpemUpKTsKK2V4dGVybiBpbnQgWkVYUE9SVCBkZWZsYXRlSW5pdDJfIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50ICBsZXZlbCwgaW50ICBtZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpbmRvd0JpdHMsIGludCBtZW1MZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyYXRlZ3ksIGNvbnN0IGNoYXIgKnZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmVhbV9zaXplKSk7CitleHRlcm4gaW50IFpFWFBPUlQgaW5mbGF0ZUluaXQyXyBPRigoel9zdHJlYW1wIHN0cm0sIGludCAgd2luZG93Qml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLCBpbnQgc3RyZWFtX3NpemUpKTsKICNkZWZpbmUgZGVmbGF0ZUluaXQoc3RybSwgbGV2ZWwpIFwKICAgICAgICAgZGVmbGF0ZUluaXRfKChzdHJtKSwgKGxldmVsKSwgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBpbmZsYXRlSW5pdChzdHJtKSBcCiAgICAgICAgIGluZmxhdGVJbml0Xygoc3RybSksICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKICNkZWZpbmUgZGVmbGF0ZUluaXQyKHN0cm0sIGxldmVsLCBtZXRob2QsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSkgXAogICAgICAgICBkZWZsYXRlSW5pdDJfKChzdHJtKSwobGV2ZWwpLChtZXRob2QpLCh3aW5kb3dCaXRzKSwobWVtTGV2ZWwpLFwKLQkJICAgICAgKHN0cmF0ZWd5KSwgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgICAgICAgICAgICAgICAoc3RyYXRlZ3kpLCAgICAgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBpbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgXAogICAgICAgICBpbmZsYXRlSW5pdDJfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCiAKQEAgLTg1Nyw5ICs4NzcsOSBAQAogICAgIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSB7aW50IGR1bW15O307IC8qIGhhY2sgZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwogI2VuZGlmCiAKLWV4dGVybiBjb25zdCBjaGFyICAgKiBFWFBPUlQgekVycm9yICAgICAgICAgICBPRigoaW50IGVycikpOwotZXh0ZXJuIGludCAgICAgICAgICAgIEVYUE9SVCBpbmZsYXRlU3luY1BvaW50IE9GKCh6X3N0cmVhbXAgeikpOwotZXh0ZXJuIGNvbnN0IHVMb25nZiAqIEVYUE9SVCBnZXRfY3JjX3RhYmxlICAgIE9GKCh2b2lkKSk7CitleHRlcm4gY29uc3QgY2hhciAgICogWkVYUE9SVCB6RXJyb3IgICAgICAgICAgIE9GKChpbnQgZXJyKSk7CitleHRlcm4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlU3luY1BvaW50IE9GKCh6X3N0cmVhbXAgeikpOworZXh0ZXJuIGNvbnN0IHVMb25nZiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSAgICBPRigodm9pZCkpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL3p0ZXN0Mjg5NzUuYyBiL3p0ZXN0Mjg5NzUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVjZmM0NC4uMDAwMDAwMAotLS0gYS96dGVzdDI4OTc1LmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1pbnQgaGVsbG8oKSB7cmV0dXJuIDA7fQpkaWZmIC0tZ2l0IGEvenV0aWwuYyBiL3p1dGlsLmMKaW5kZXggODdmNjY3OC4uNWEzZmU2ZSAxMDA2NDQKLS0tIGEvenV0aWwuYworKysgYi96dXRpbC5jCkBAIC0yNiw3ICsyNiw3IEBACiAiIn07CiAKIAotY29uc3QgY2hhciAqIEVYUE9SVCB6bGliVmVyc2lvbigpCitjb25zdCBjaGFyICogWkVYUE9SVCB6bGliVmVyc2lvbigpCiB7CiAgICAgcmV0dXJuIFpMSUJfVkVSU0lPTjsKIH0KQEAgLTQ5LDcgKzQ5LDcgQEAKIC8qIGV4cG9ydGVkIHRvIGFsbG93IGNvbnZlcnNpb24gb2YgZXJyb3IgY29kZSB0byBzdHJpbmcgZm9yIGNvbXByZXNzKCkgYW5kCiAgKiB1bmNvbXByZXNzKCkKICAqLwotY29uc3QgY2hhciAqIEVYUE9SVCB6RXJyb3IoZXJyKQorY29uc3QgY2hhciAqIFpFWFBPUlQgekVycm9yKGVycikKICAgICBpbnQgZXJyOwogewogICAgIHJldHVybiBFUlJfTVNHKGVycik7CmRpZmYgLS1naXQgYS96dXRpbC5oIGIvenV0aWwuaAppbmRleCBhYzMwYjhlLi41ZTQwM2QxIDEwMDY0NAotLS0gYS96dXRpbC5oCisrKyBiL3p1dGlsLmgKQEAgLTIwOCw3ICsyMDgsNyBAQAogI2VuZGlmCiAKIAotdHlwZWRlZiB1TG9uZyAoRVhQT1JUICpjaGVja19mdW5jKSBPRigodUxvbmcgY2hlY2ssIGNvbnN0IEJ5dGVmICpidWYsCit0eXBlZGVmIHVMb25nIChaRVhQT1JUICpjaGVja19mdW5jKSBPRigodUxvbmcgY2hlY2ssIGNvbnN0IEJ5dGVmICpidWYsCiAJCQkJICAgICAgIHVJbnQgbGVuKSk7CiB2b2lkcGYgemNhbGxvYyBPRigodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsIHVuc2lnbmVkIHNpemUpKTsKIHZvaWQgICB6Y2ZyZWUgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKSk7Cg==