ZGlmZiAtLWdpdCBhL2ZsYXNoL21pbmltb24vTWFrZWZpbGUgYi9mbGFzaC9taW5pbW9uL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YWUxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9mbGFzaC9taW5pbW9uL01ha2VmaWxlCkBAIC0wLDAgKzEsNTMgQEAKKyMgICAgICAgICAgICAgX19fX19fX19fXyAgICAgICAgICAgICAgIF9fICAgX19fLgorIyAgIE9wZW4gICAgICBcX19fX19fICAgXCBfX19fICAgX19fXyB8ICB8IF9cXyB8X18gICBfX19fX19fICBfX18KKyMgICBTb3VyY2UgICAgIHwgICAgICAgXy8vICBfIFxfLyBfX19cfCAgfC8gL3wgX18gXCAvICBfIFwgIFwvICAvCisjICAgSnVrZWJveCAgICB8ICAgIHwgICAoICA8Xz4gKSAgXF9fX3wgICAgPCB8IFxfXCAoICA8Xz4gPiA8ICA8CisjICAgRmlybXdhcmUgICB8X19fX3xfICAvXF9fX18vIFxfX18gID5fX3xfIFx8X19fICAvXF9fX18vX18vXF8gXAorIyAgICAgICAgICAgICAgICAgICAgIFwvICAgICAgICAgICAgXC8gICAgIFwvICAgIFwvICAgICAgICAgICAgXC8KKyMgJElkJAorIworCitDQyAgICA9IHNoLWVsZi1nY2MgCitMRCAgICA9IHNoLWVsZi1sZAorQVIgICAgPSBzaC1lbGYtYXIKK0FTICAgID0gc2gtZWxmLWFzCitPQyAgICA9IHNoLWVsZi1vYmpjb3B5CisKK0ZJUk1XQVJFIDo9IC4uLy4uL2Zpcm13YXJlCitUT09MU0RJUj0uLi8uLi90b29scworCitUQVJHRVQgPSBtaW5pbW9uCitMRFMgOj0gJChUQVJHRVQpLmxkcworCitJTkNMVURFUz0gLUkkKEZJUk1XQVJFKS9leHBvcnQgLUkuIC1JJChPQkpESVIpCitPQkpESVIgOj0gLgorCitDRkxBR1MgPSAtZnBpYyAtTyAtVyAtV2FsbCAtbTEgLW5vc3RkbGliIC1mZnJlZXN0YW5kaW5nIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZzY2hlZHVsZS1pbnNucyAkKElOQ0xVREVTKSAkKERFRklORVMpCitBRkxBR1MgKz0gLXNtYWxsIC1yZWxheAorCisKK2lmZGVmIERFQlVHCisgICAgREVGSU5FUyA6PSAtRERFQlVHCisgICAgQ0ZMQUdTICs9IC1nCitlbmRpZgorCitTUkMgOj0gJCh3aWxkY2FyZCAqLmMpCisKK09CSlMgOj0gJChTUkM6JS5jPSQoT0JKRElSKS8lLm8pCisKK0xJTktGSUxFID0gJChPQkpESVIpLyQoVEFSR0VUKS5sZHMKKworCiskKE9CSkRJUikvJChUQVJHRVQpLmJpbiA6ICQoT0JKRElSKS8kKFRBUkdFVCkuZWxmCisJJChPQykgLU8gYmluYXJ5ICQoT0JKRElSKS8kKFRBUkdFVCkuZWxmICQoT0JKRElSKS8kKFRBUkdFVCkuYmluCisJJChUT09MU0RJUikvc2gyZCAkKE9CSkRJUikvJChUQVJHRVQpLmJpbiAtbyAwOTAwMDAwID4gJChPQkpESVIpLyQoVEFSR0VUKS5hc20KKworJChPQkpESVIpLyQoVEFSR0VUKS5lbGYgOiAkKE9CSlMpIAorCSQoQ0MpIC1PcyAtbm9zdGRsaWIgLW8gJChPQkpESVIpLyQoVEFSR0VUKS5lbGYgLUwkKE9CSkRJUikgLVQkKExJTktGSUxFKSAtV2wsLU1hcCwkKE9CSkRJUikvJChUQVJHRVQpLm1hcAorCisKK2NsZWFuOgorCS1ybSAtZiAkKE9CSlMpICQoT0JKRElSKS8kKFRBUkdFVCkuYXNtIFwKKwkkKE9CSkRJUikvJChUQVJHRVQpLmJpbiBcCisJJChPQkpESVIpLyQoVEFSR0VUKS5lbGYgXAorCSQoT0JKRElSKS8kKFRBUkdFVCkubWFwCmRpZmYgLS1naXQgYS9mbGFzaC9taW5pbW9uL1JFQURNRSBiL2ZsYXNoL21pbmltb24vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MGVkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9mbGFzaC9taW5pbW9uL1JFQURNRQpAQCAtMCwwICsxLDYgQEAKKyhjKSAyMDAzIGJ5IEr2cmcgSG9oZW5zb2huCisKK01pbmlNb24gaXMgdGhlIHRpbnkgYnV0IHBvd2VyZnVsLWVub3VnaCBwaWVjZSBvZiBjb2RlIHRoYXQgY2FuIGJlIGxvYWRlZAord2l0aCB0aGUgVUFSVCBib290IG1vZC4gCitJdCBhbGxvd3MgdG8gcmVhZCBhbmQgd3JpdGUgbWVtb3J5LCBmbGFzaCBwcm9ncmFtLCBleGVjdXRlIGNvZGUuCitUaGlzIGlzIHN1aXRhYmxlIHRvIHJlZmxhc2ggdGhlIGJveCwgbG9hZCBSb2NrYm94IG9yIHRoZSBnZGIgc3R1YiwgZXRjLgpkaWZmIC0tZ2l0IGEvZmxhc2gvbWluaW1vbi9taW5pbW9uLmMgYi9mbGFzaC9taW5pbW9uL21pbmltb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzk4MWYyCi0tLSAvZGV2L251bGwKKysrIGIvZmxhc2gvbWluaW1vbi9taW5pbW9uLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8vIG1pbmltYWxpc3RpYyBtb25pdG9yCisvLyB0byBiZSBsb2FkZWQgd2l0aCB0aGUgVUFSVCBib290IGZlYXR1cmUKKy8vIGNhcGFibGUgb2YgcmVhZGluZyBhbmQgd3JpdGluZyBieXRlcywgY29tbWFuZGVkIGJ5IFVBUlQKKworI2luY2x1ZGUgInNoNzAzNC5oIgorI2luY2x1ZGUgIm1pbmltb24uaCIKKworLy8gc2NhbGFyIHR5cGVzCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgIFVJTlQ4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSU5UMTY7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIFVJTlQzMjsKKwordHlwZWRlZiB2b2lkKCp0cEZ1bmMpKHZvaWQpOyAvLyB0eXBlIGZvciBleGVjCit0eXBlZGVmIGludCgqdHBNYWluKSh2b2lkKTsgLy8gdHlwZSBmb3Igc3RhcnQgdmVjdG9yIHRvIG1haW4oKQorCisKKy8vIHByb3RvdHlwZXMKK2ludCBtYWluKHZvaWQpOworCisvLyBvdXIgYmluYXJ5IGhhcyB0byBzdGFydCB3aXRoIGEgdmVjdG9yIHRvIHRoZSBlbnRyeSBwb2ludAordHBNYWluIHN0YXJ0X3ZlY3RvcltdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLnN0YXJ0dmVjdG9yIikpKSA9IHttYWlufTsKKworCitVSU5UOCB1YXJ0X3JlYWQodm9pZCkKK3sKKwlVSU5UOCBieXRlOworCXdoaWxlICghKFNTUjEgJiBTQ0lfUkRSRikpOyAvLyB3YWl0IGZvciBjaGFyIHRvIGJlIGF2YWlsYWJsZQorCWJ5dGUgPSBSRFIxOworCVNTUjEgJj0gflNDSV9SRFJGOworCXJldHVybiBieXRlOworfQorCisKK3ZvaWQgdWFydF93cml0ZShVSU5UOCBieXRlKQoreworCXdoaWxlICghKFNTUjEgJiBTQ0lfVERSRSkpOyAvLyB3YWl0IGZvciB0cmFuc21pdCBidWZmZXIgZW1wdHkKKwlURFIxID0gYnl0ZTsKKwlTU1IxICY9IH5TQ0lfVERSRTsKK30KKworCitpbnQgbWFpbih2b2lkKQoreworCVVJTlQ4IGNtZDsKKwlVSU5UMzIgYWRkcjsKKwlVSU5UMzIgc2l6ZTsKKwlVSU5UMzIgY29udGVudDsKKwl2b2xhdGlsZSBVSU5UOCogcGFkZHIgPSAwOworCXZvbGF0aWxlIFVJTlQ4KiBwZmxhc2g7IC8vIGZsYXNoIGJhc2UgYWRkcmVzcworCisJd2hpbGUgKDEpCisJeworCQljbWQgPSB1YXJ0X3JlYWQoKTsKKwkJc3dpdGNoIChjbWQpCisJCXsKKwkJY2FzZSBCQVVEUkFURToKKwkJCWNvbnRlbnQgPSB1YXJ0X3JlYWQoKTsKKwkJCXVhcnRfd3JpdGUoY21kKTsgLy8gYWNrbm93bGVkZ2UgYnkgcmV0dXJuaW5nIHRoZSBjb21tYW5kIHZhbHVlCisJCQl3aGlsZSAoIShTU1IxICYgU0NJX1RFTkQpKTsgLy8gd2FpdCBmb3IgZW1wdHkgc2hpZnQgcmVnaXN0ZXIsIGJlZm9yZSBjaGFuZ2luZyBiYXVkcmF0ZQorCQkJQlJSMSA9IGNvbnRlbnQ7CisJCQlicmVhazsKKworCQljYXNlIEFERFJFU1M6CisJCQlhZGRyID0gKHVhcnRfcmVhZCgpIDw8IDI0KSB8ICh1YXJ0X3JlYWQoKSA8PCAxNikgfCAodWFydF9yZWFkKCkgPDwgOCkgfCB1YXJ0X3JlYWQoKTsKKwkJCXBhZGRyID0gKFVJTlQ4KilhZGRyOworCQkJcGZsYXNoID0gKFVJTlQ4KikoYWRkciAmIDB4RkZGODAwMDApOyAvLyByb3VuZCBkb3duIHRvIDUxMmsgYWxpZ24KKwkJCXVhcnRfd3JpdGUoY21kKTsgLy8gYWNrbm93bGVkZ2UgYnkgcmV0dXJuaW5nIHRoZSBjb21tYW5kIHZhbHVlCisJCQlicmVhazsKKworCQljYXNlIEJZVEVfUkVBRDoKKwkJCWNvbnRlbnQgPSAqcGFkZHIrKzsKKwkJCXVhcnRfd3JpdGUoY29udGVudCk7IC8vIHRoZSBjb250ZW50IGlzIHRoZSBhY2sJCisJCQlicmVhazsKKworCQljYXNlIEJZVEVfV1JJVEU6CisJCQljb250ZW50ID0gdWFydF9yZWFkKCk7CisJCQkqcGFkZHIrKyA9IGNvbnRlbnQ7CQkJCQkJCisJCQl1YXJ0X3dyaXRlKGNtZCk7IC8vIGFja25vd2xlZGdlIGJ5IHJldHVybmluZyB0aGUgY29tbWFuZCB2YWx1ZQorCQkJYnJlYWs7CisKKwkJY2FzZSBCWVRFX1JFQUQxNjoKKwkJCXNpemUgPSAxNjsKKwkJCXdoaWxlIChzaXplLS0pCisJCQl7CisJCQkJY29udGVudCA9ICpwYWRkcisrOworCQkJCXVhcnRfd3JpdGUoY29udGVudCk7IC8vIHRoZSBjb250ZW50IGlzIHRoZSBhY2sJCQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBCWVRFX1dSSVRFMTY6CisJCQlzaXplID0gMTY7CisJCQl3aGlsZSAoc2l6ZS0tKQorCQkJeworCQkJCWNvbnRlbnQgPSB1YXJ0X3JlYWQoKTsKKwkJCQkqcGFkZHIrKyA9IGNvbnRlbnQ7CQkJCQkJCisJCQl9CisJCQl1YXJ0X3dyaXRlKGNtZCk7IC8vIGFja25vd2xlZGdlIGJ5IHJldHVybmluZyB0aGUgY29tbWFuZCB2YWx1ZQorCQkJYnJlYWs7CisKKwkJY2FzZSBCWVRFX0ZMQVNIOgorCQkJY29udGVudCA9IHVhcnRfcmVhZCgpOworCQkJcGZsYXNoWzB4NTU1NV0gPSAweEFBOyAvLyBzZXQgZmxhc2ggdG8gY29tbWFuZCBtb2RlCisJCQlwZmxhc2hbMHgyQUFBXSA9IDB4NTU7CisJCQlwZmxhc2hbMHg1NTU1XSA9IDB4QTA7IC8vIGJ5dGUgcHJvZ3JhbSBjb21tYW5kCisJCQkqcGFkZHIrKyA9IGNvbnRlbnQ7CQkJCQkJCisJCQl1YXJ0X3dyaXRlKGNtZCk7IC8vIGFja25vd2xlZGdlIGJ5IHJldHVybmluZyB0aGUgY29tbWFuZCB2YWx1ZQorCQkJYnJlYWs7CisKKwkJY2FzZSBCWVRFX0ZMQVNIMTY6CisJCQlzaXplID0gMTY7CisJCQl3aGlsZSAoc2l6ZS0tKQorCQkJeworCQkJCWNvbnRlbnQgPSB1YXJ0X3JlYWQoKTsKKwkJCQlwZmxhc2hbMHg1NTU1XSA9IDB4QUE7IC8vIHNldCBmbGFzaCB0byBjb21tYW5kIG1vZGUKKwkJCQlwZmxhc2hbMHgyQUFBXSA9IDB4NTU7CisJCQkJcGZsYXNoWzB4NTU1NV0gPSAweEEwOyAvLyBieXRlIHByb2dyYW0gY29tbWFuZAorCQkJCSpwYWRkcisrID0gY29udGVudDsJCQkJCQkKKwkJCX0KKwkJCXVhcnRfd3JpdGUoY21kKTsgLy8gYWNrbm93bGVkZ2UgYnkgcmV0dXJuaW5nIHRoZSBjb21tYW5kIHZhbHVlCisJCQlicmVhazsKKworCQljYXNlIEhBTEZXT1JEX1JFQUQ6CisJCQljb250ZW50ID0gKihVSU5UMTYqKXBhZGRyOworCQkJcGFkZHIgKz0gMjsKKwkJCXVhcnRfd3JpdGUoY29udGVudCA+PiA4KTsgLy8gaGlnaGJ5dGUKKwkJCXVhcnRfd3JpdGUoY29udGVudCAmIDB4RkYpOyAvLyBsb3dieXRlCisJCQlicmVhazsKKwkJCisJCWNhc2UgSEFMRldPUkRfV1JJVEU6CisJCQljb250ZW50ID0gdWFydF9yZWFkKCkgPDwgOCB8IHVhcnRfcmVhZCgpOworCQkJKihVSU5UMTYqKXBhZGRyID0gY29udGVudDsKKwkJCXBhZGRyICs9IDI7CisJCQl1YXJ0X3dyaXRlKGNtZCk7IC8vIGFja25vd2xlZGdlIGJ5IHJldHVybmluZyB0aGUgY29tbWFuZCB2YWx1ZQorCQkJYnJlYWs7CisJCQorCQljYXNlIEVYRUNVVEU6CisJCQl7CisJCQkJdHBGdW5jIHBGdW5jID0gKHRwRnVuYylwYWRkcjsKKwkJCQlwRnVuYygpOworCQkJCXVhcnRfd3JpdGUoY21kKTsgLy8gYWNrbm93bGVkZ2UgYnkgcmV0dXJuaW5nIHRoZSBjb21tYW5kIHZhbHVlCisJCQl9CisJCQlicmVhazsKKworCisJCWRlZmF1bHQ6CisJCQl7CisJCQkJdm9sYXRpbGUgVUlOVDE2KiBwUG9ydEIgPSAoVUlOVDE2KikweDA1RkZGRkMyOworCQkJCSpwUG9ydEIgfD0gMSA8PCA2OyAvLyBiaXQgNiBpcyByZWQgTEVEIG9uCisJCQkJdWFydF93cml0ZSh+Y21kKTsgLy8gZXJyb3IgYWNrbm93bGVkZ2UKKwkJCX0KKworCQl9IC8vIGNhc2UKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2ZsYXNoL21pbmltb24vbWluaW1vbi5oIGIvZmxhc2gvbWluaW1vbi9taW5pbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZlOTgwNQotLS0gL2Rldi9udWxsCisrKyBiL2ZsYXNoL21pbmltb24vbWluaW1vbi5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX01JTklNT05fSAorI2RlZmluZSBfTUlOSU1PTl9ICisKKworLy8gQ29tbWFuZHMKKy8vIGFsbCBtdWx0aWJ5dGUgdmFsdWVzIChhZGRyZXNzLCBoYWxmd29yZHMpIGFyZSBwYXNzZWQgYXMgYmlnIGVuZGlhbiAKKy8vICAobW9zdCBzaWduaWZpY2FudCBvZiB0aGUgYnl0ZXMgZmlyc3QpCisKKy8vIHNldCB0aGUgYWRkcmVzcyAoYWxsIHJlYWQvd3JpdGUgY29tbWFuZHMgd2lsbCBhdXRvLWluY3JlbWVudCBpdCkKKyNkZWZpbmUgQkFVRFJBVEUgICAgICAgMHgwMCAvLyBmb2xsb3dlZCBieSBCUlIgdmFsdWU7IHJlc3BvbnNlOiBjb21tYW5kIGJ5dGUKKyNkZWZpbmUgQUREUkVTUyAgICAgICAgMHgwMSAvLyBmb2xsb3dlZCBieSA0IGJ5dGVzIGFkZHJlc3M7IHJlc3BvbnNlOiBjb21tYW5kIGJ5dGUKKyNkZWZpbmUgQllURV9SRUFEICAgICAgMHgwMiAvLyByZXNwb25zZTogMSBieXRlIGNvbnRlbnQKKyNkZWZpbmUgQllURV9XUklURSAgICAgMHgwMyAvLyBmb2xsb3dlZCBieSAxIGJ5dGUgY29udGVudDsgcmVzcG9uc2U6IGNvbW1hbmQgYnl0ZQorI2RlZmluZSBCWVRFX1JFQUQxNiAgICAweDA0IC8vIHJlc3BvbnNlOiAxNiBieXRlcyBjb250ZW50CisjZGVmaW5lIEJZVEVfV1JJVEUxNiAgIDB4MDUgLy8gZm9sbG93ZWQgYnkgMTYgYnl0ZXM7IHJlc3BvbnNlOiBjb21tYW5kIGJ5dGUKKyNkZWZpbmUgQllURV9GTEFTSCAgICAgMHgwNiAvLyBmb2xsb3dlZCBieSAxIGJ5dGUgY29udGVudDsgcmVzcG9uc2U6IGNvbW1hbmQgYnl0ZQorI2RlZmluZSBCWVRFX0ZMQVNIMTYgICAweDA3IC8vIGZvbGxvd2VkIGJ5IDE2IGJ5dGVzOyByZXNwb25zZTogY29tbWFuZCBieXRlCisjZGVmaW5lIEhBTEZXT1JEX1JFQUQgIDB4MDggLy8gcmVzcG9uc2U6IDIgYnl0ZSBjb250ZW50CisjZGVmaW5lIEhBTEZXT1JEX1dSSVRFIDB4MDkgLy8gZm9sbG93ZWQgYnkgMiBieXRlIGNvbnRlbnQ7IHJlc3BvbnNlOiBjb21tYW5kIGJ5dGUKKyNkZWZpbmUgRVhFQ1VURSAgICAgICAgMHgwQSAvLyByZXNwb25zZTogY29tbWFuZCBieXRlIGlmIGNhbGwgcmV0dXJucworI2RlZmluZSBWRVJTSU9OICAgICAgICAweDBCIC8vIHJlc3BvbnNlOiB2ZXJzaW9uCisKKworI2VuZGlmIC8vIF9NSU5JTU9OX0gKZGlmZiAtLWdpdCBhL2ZsYXNoL21pbmltb24vbWluaW1vbi5sZHMgYi9mbGFzaC9taW5pbW9uL21pbmltb24ubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZGJkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9mbGFzaC9taW5pbW9uL21pbmltb24ubGRzCkBAIC0wLDAgKzEsNjAgQEAKK09VVFBVVF9GT1JNQVQoZWxmMzItc2gpCitJTlBVVChtaW5pbW9uLm8pCisKK01FTU9SWQoreworCURSQU0gOiBPUklHSU4gPSAweDA5MDAwMDAwLCBMRU5HVEggPSAweDIwMDAwMAorfQorCitTRUNUSU9OUworeworCS5zdGFydHZlY3RvciA6CisJeworCQkqKC5zdGFydHZlY3RvcikgICAgCisJCS4gPSBBTElHTigweDQpOworCX0gPiBEUkFNCisKKwkuZ290IDoKKwl7CisJICAgKiguZ290KQorCX0gPiBEUkFNCisKKwkuZ290LnBsdCA6CisJeworCSAgICooLmdvdC5wbHQpCisJfSA+IERSQU0KKworCS5yZWxhLmdvdCA6CisJeworCSAgICooLnJlbGEuZ290KQorCX0gPiBEUkFNCisKKwkudGV4dCA6ICAgIAorCXsJIAorCQkuID0gQUxJR04oMHgyMDApOworCQkqKC5lbnRyeSkKKwkJKigudGV4dCkJCisJCS4gPSBBTElHTigweDQpOworCX0gPiBEUkFNCisJCisJLmRhdGEgOgorCXsKKwkJKiguZGF0YSkKKwl9ID4gRFJBTQorCisJLnJvZGF0YSA6CisJeworCQkqKC5yb2RhdGEpCisJCS4gPSBBTElHTigweDQpOworCX0gPiBEUkFNCisKKwkuYnNzIDoKKwl7CisJICAgKiguYnNzKQorCX0gPiBEUkFNCisKKwkuc3RhY2sgOgorCXsKKwkgICAqKC5zdGFjaykKKwl9ID4gRFJBTQorfQo=