From mboxrd@z Thu Jan 1 00:00:00 1970 From: suganuma Date: Tue, 04 Mar 2003 09:28:35 +0000 Subject: [Linux-ia64] discontigmem patch for 2.4.20 MIME-Version: 1 Content-Type: multipart/mixed; boundary="------_3E646F34BB180315A958_MULTIPART_MIXED_" Message-Id: List-Id: To: linux-ia64@vger.kernel.org --------_3E646F34BB180315A958_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Hi all, I back ported the IA64 discontigmem function in 2.5 to 2.4.20. I tested the patch on 8 way Itanium2 NUMA server with a NUMA kernel and an SMP kernel. David, Bjorn, please let me know is there any possibility that you take this patch into the ia64-patch for 2.4. Regards, Kimi -- suganuma --------_3E646F34BB180315A958_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="discontig-2.4.20-030304.patch" Content-Disposition: attachment; filename="discontig-2.4.20-030304.patch" Content-Transfer-Encoding: base64 ZGlmZiAtTnVyIGxpbnV4LTIuNC4yMC1iYXNlL2FyY2gvaWE2NC9jb25maWcuaW4gbGludXgtMi40 LjIwLWRjbS9hcmNoL2lhNjQvY29uZmlnLmluCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9hcmNoL2lh NjQvY29uZmlnLmluCU1vbiBNYXIgIDMgMTA6MjQ6MjEgMjAwMworKysgbGludXgtMi40LjIwLWRj bS9hcmNoL2lhNjQvY29uZmlnLmluCU1vbiBNYXIgIDMgMTA6NTU6MTIgMjAwMwpAQCAtNjYsNiAr NjYsMTQgQEAKIGZpCiAKIGlmIFsgIiRDT05GSUdfSUE2NF9HRU5FUklDIiA9ICJ5IiAtbyAiJENP TkZJR19JQTY0X0RJRyIgPSAieSIgLW8gIiRDT05GSUdfSUE2NF9IUF9aWDEiID0gInkiIF07IHRo ZW4KKwlib29sICcgIEVuYWJsZSBOVU1BIHN1cHBvcnQnIENPTkZJR19OVU1BCisJaWYgWyAiJENP TkZJR19OVU1BIiA9ICJ5IiBdOyB0aGVuCisJCWRlZmluZV9ib29sIENPTkZJR19ESVNDT05USUdN RU0geQorICAJCWNob2ljZSAnTWF4aW11bSBNZW1vcnkgcGVyIE5VTUEgTm9kZScJCQlcCisJCSIx NkdCCQlDT05GSUdfSUE2NF9OT0RFU0laRV8xNkdCCQlcCisJCSA2NEdCCQlDT05GSUdfSUE2NF9O T0RFU0laRV82NEdCCQlcCisJCSAyNTZHQgkJQ09ORklHX0lBNjRfTk9ERVNJWkVfMjU2R0IiIDE2 R0IKKwlmaQogCWJvb2wgJyAgRW5hYmxlIElBLTY0IE1hY2hpbmUgQ2hlY2sgQWJvcnQnIENPTkZJ R19JQTY0X01DQQogCWRlZmluZV9ib29sIENPTkZJR19QTSB5CiBmaQpkaWZmIC1OdXIgbGludXgt Mi40LjIwLWJhc2UvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMgbGludXgtMi40LjIwLWRjbS9hcmNo L2lhNjQva2VybmVsL2FjcGkuYwotLS0gbGludXgtMi40LjIwLWJhc2UvYXJjaC9pYTY0L2tlcm5l bC9hY3BpLmMJTW9uIE1hciAgMyAxMDoyNDoyMSAyMDAzCisrKyBsaW51eC0yLjQuMjAtZGNtL2Fy Y2gvaWE2NC9rZXJuZWwvYWNwaS5jCVR1ZSBNYXIgIDQgMTQ6MjY6NDggMjAwMwpAQCAtOCw2ICs4 LDkgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgSW50ZWwgQ29ycC4KICAqICBDb3B5cmlnaHQg KEMpIDIwMDAsMjAwMSBKLkkuIExlZSA8anVuZy1pay5sZWVAaW50ZWwuY29tPgogICogIENvcHly aWdodCAoQykgMjAwMSBQYXVsIERpZWZlbmJhdWdoIDxwYXVsLnMuZGllZmVuYmF1Z2hAaW50ZWwu Y29tPgorICogIENvcHlyaWdodCAoQykgMjAwMSBKZW5uYSBIYWxsIDxqZW5uYS5zLmhhbGxAaW50 ZWwuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwMSBUYWtheW9zaGkgS29jaGkgPHQta291Y2hp QGNxLmpwLm5lYy5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIEVyaWNoIEZvY2h0IDxlZm9j aHRAZXNzLm5lYy5kZT4KICAqCiAgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogICoKQEAgLTM4LDExICs0 MSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4K ICNpbmNsdWRlIDxsaW51eC9lZmkuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUg PGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pb3NhcGljLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2 ZWMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNp bmNsdWRlIDxhc20vbnVtYS5oPgogCiAKICNkZWZpbmUgUFJFRklYCQkJIkFDUEk6ICIKQEAgLTU1 OSw2ICs1NjQsMTkxIEBACiB9CiAKIAorI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKKworI2RlZmlu ZSBTTElUX0RFQlVHCisKKyNkZWZpbmUgUFhNX0ZMQUdfTEVOICgoTUFYX1BYTV9ET01BSU5TICsg MSkvMzIpCisKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBzcmF0X251bV9jcHVzOwkJCS8qIG51bWJl ciBvZiBjcHVzICovCitzdGF0aWMgdTMyIF9faW5pdGRhdGEgcHhtX2ZsYWdbUFhNX0ZMQUdfTEVO XTsKKyNkZWZpbmUgcHhtX2JpdF9zZXQoYml0KQkoc2V0X2JpdChiaXQsKHZvaWQgKilweG1fZmxh ZykpCisjZGVmaW5lIHB4bV9iaXRfdGVzdChiaXQpCSh0ZXN0X2JpdChiaXQsKHZvaWQgKilweG1f ZmxhZykpCisvKiBtYXBzIHRvIGNvbnZlcnQgYmV0d2VlbiBwcm94aW1pdHkgZG9tYWluIGFuZCBs b2dpY2FsIG5vZGUgSUQgKi8KK2ludCBfX2luaXRkYXRhIHB4bV90b19uaWRfbWFwW01BWF9QWE1f RE9NQUlOU107CitpbnQgX19pbml0ZGF0YSBuaWRfdG9fcHhtX21hcFtOUl9OT0RFU107CitzdGF0 aWMgc3RydWN0IGFjcGlfdGFibGVfc2xpdCBfX2luaXRkYXRhICpzbGl0X3RhYmxlOworCisvKgor ICogQUNQSSAyLjAgU0xJVCAoU3lzdGVtIExvY2FsaXR5IEluZm9ybWF0aW9uIFRhYmxlKQorICog aHR0cDovL2RldnJlc291cmNlLmhwLmNvbS9kZXZyZXNvdXJjZS9Eb2NzL1RlY2hQYXBlcnMvSUE2 NC9zbGl0LnBkZgorICovCit2b2lkIF9faW5pdAorYWNwaV9udW1hX3NsaXRfaW5pdCAoc3RydWN0 IGFjcGlfdGFibGVfc2xpdCAqc2xpdCkKK3sKKwl1MzIgbGVuOworCisJbGVuID0gc2l6ZW9mKHN0 cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikgKyA4CisJCSsgc2xpdC0+bG9jYWxpdGllcyAqIHNsaXQt PmxvY2FsaXRpZXM7CisJaWYgKHNsaXQtPmhlYWRlci5sZW5ndGggIT0gbGVuKSB7CisJCXByaW50 aygiQUNQSSAyLjAgU0xJVDogc2l6ZSBtaXNtYXRjaDogJWQgZXhwZWN0ZWQsICVkIGFjdHVhbFxu IiwKKwkJICAgICAgbGVuLCBzbGl0LT5oZWFkZXIubGVuZ3RoKTsKKwkJbWVtc2V0KG51bWFfc2xp dCwgMTAsIHNpemVvZihudW1hX3NsaXQpKTsKKwkJcmV0dXJuOworCX0KKwlzbGl0X3RhYmxlID0g c2xpdDsKK30KKwordm9pZCBfX2luaXQKK2FjcGlfbnVtYV9wcm9jZXNzb3JfYWZmaW5pdHlfaW5p dCAoc3RydWN0IGFjcGlfdGFibGVfcHJvY2Vzc29yX2FmZmluaXR5ICpwYSkKK3sKKwkvKiByZWNv cmQgdGhpcyBub2RlIGluIHByb3hpbWl0eSBiaXRtYXAgKi8KKwlweG1fYml0X3NldChwYS0+cHJv eGltaXR5X2RvbWFpbik7CisKKwlub2RlX2NwdWlkW3NyYXRfbnVtX2NwdXNdLnBoeXNfaWQgPSAo cGEtPmFwaWNfaWQgPDwgOCkgfCAocGEtPmxzYXBpY19laWQpOworCS8qIG5pZCBzaG91bGQgYmUg b3ZlcnJpZGRlbiBhcyBsb2dpY2FsIG5vZGUgaWQgbGF0ZXIgKi8KKwlub2RlX2NwdWlkW3NyYXRf bnVtX2NwdXNdLm5pZCA9IHBhLT5wcm94aW1pdHlfZG9tYWluOworCXNyYXRfbnVtX2NwdXMrKzsK K30KKwordm9pZCBfX2luaXQKK2FjcGlfbnVtYV9tZW1vcnlfYWZmaW5pdHlfaW5pdCAoc3RydWN0 IGFjcGlfdGFibGVfbWVtb3J5X2FmZmluaXR5ICptYSkKK3sKKwl1bnNpZ25lZCBsb25nIHBhZGRy LCBzaXplLCBob2xlX3NpemUsIG1pbl9ob2xlX3NpemU7CisJdTggcHhtOworCXN0cnVjdCBub2Rl X21lbWJsa19zICpwLCAqcSwgKnBlbmQ7CisKKwlweG0gPSBtYS0+cHJveGltaXR5X2RvbWFpbjsK KworCS8qIGZpbGwgbm9kZSBtZW1vcnkgY2h1bmsgc3RydWN0dXJlICovCisJcGFkZHIgPSBtYS0+ YmFzZV9hZGRyX2hpOworCXBhZGRyID0gKHBhZGRyIDw8IDMyKSB8IG1hLT5iYXNlX2FkZHJfbG87 CisJc2l6ZSA9IG1hLT5sZW5ndGhfaGk7CisJc2l6ZSA9IChzaXplIDw8IDMyKSB8IG1hLT5sZW5n dGhfbG87CisKKwlpZiAobnVtX21lbWJsa3MgPj0gTlJfTUVNQkxLUykgeworCQlwcmludGsoIlRv byBtYW55IG1lbSBjaHVua3MgaW4gU1JBVC4gSWdub3JpbmcgJWxkIE1CeXRlcyBhdCAlbHhcbiIs CisJCQlzaXplLygxMDI0KjEwMjQpLCBwYWRkcik7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZ25v cmUgZGlzYWJsZWQgZW50cmllcyAqLworCWlmICghbWEtPmZsYWdzLmVuYWJsZWQpCisJCXJldHVy bjsKKworCS8qCisJICogV2hlbiB0aGUgY2h1bmsgaXMgbm90IHRoZSBmaXJzdCBvbmUgaW4gdGhl IG5vZGUsIGNoZWNrIGRpc3RhbmNlCisJICogZnJvbSB0aGUgb3RoZXIgY2h1bmtzLiBXaGVuIHRo ZSBob2xlIGlzIHRvbyBodWdlIGlnbm9yZSB0aGUgY2h1bmsuCisJICogVGhpcyByZXN0cmljdGlv biBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIG11bHRpcGxlIGNodW5rcyBwZXIgbm9kZQorCSAqIGlz IHN1cHBvcnRlZC4KKwkgKi8KKwlwZW5kID0gJm5vZGVfbWVtYmxrW251bV9tZW1ibGtzXTsKKwlt aW5faG9sZV9zaXplID0gMDsKKwlmb3IgKHAgPSAmbm9kZV9tZW1ibGtbMF07IHAgPCBwZW5kOyBw KyspIHsKKwkJaWYgKHAtPm5pZCAhPSBweG0pCisJCQljb250aW51ZTsKKwkJaWYgKHAtPnN0YXJ0 X3BhZGRyIDwgcGFkZHIpCisJCQlob2xlX3NpemUgPSBwYWRkciAtIChwLT5zdGFydF9wYWRkciAr IHAtPnNpemUpOworCQllbHNlCisJCQlob2xlX3NpemUgPSBwLT5zdGFydF9wYWRkciAtIChwYWRk ciArIHNpemUpOworCisJCWlmICghbWluX2hvbGVfc2l6ZSB8fCBob2xlX3NpemUgPCBtaW5faG9s ZV9zaXplKQorCQkJbWluX2hvbGVfc2l6ZSA9IGhvbGVfc2l6ZTsKKwl9CisKKyNpZiAwCS8qIHRl c3QgKi8KKwlpZiAobWluX2hvbGVfc2l6ZSkgeworCQlpZiAobWluX2hvbGVfc2l6ZSA+IHNpemUp IHsKKwkJCXByaW50aygiVG9vIGh1Z2UgbWVtb3J5IGhvbGUuIElnbm9yaW5nICVsZCBNQnl0ZXMg YXQgJWx4XG4iLAorCQkJCXNpemUvKDEwMjQqMTAyNCksIHBhZGRyKTsKKwkJCXJldHVybjsKKwkJ fQorCX0KKyNlbmRpZgorCisJLyogcmVjb3JkIHRoaXMgbm9kZSBpbiBwcm94aW1pdHkgYml0bWFw ICovCisJcHhtX2JpdF9zZXQocHhtKTsKKworCS8qIEluc2VydGlvbiBzb3J0IGJhc2VkIG9uIGJh c2UgYWRkcmVzcyAqLworCXBlbmQgPSAmbm9kZV9tZW1ibGtbbnVtX21lbWJsa3NdOworCWZvciAo cCA9ICZub2RlX21lbWJsa1swXTsgcCA8IHBlbmQ7IHArKykgeworCQlpZiAocGFkZHIgPCBwLT5z dGFydF9wYWRkcikKKwkJCWJyZWFrOworCX0KKwlpZiAocCA8IHBlbmQpIHsKKwkJZm9yIChxID0g cGVuZDsgcSA+PSBwOyBxLS0pCisJCQkqKHEgKyAxKSA9ICpxOworCX0KKwlwLT5zdGFydF9wYWRk ciA9IHBhZGRyOworCXAtPnNpemUgPSBzaXplOworCXAtPm5pZCA9IHB4bTsKKwludW1fbWVtYmxr cysrOworfQorCit2b2lkIF9faW5pdAorYWNwaV9udW1hX2FyY2hfZml4dXAodm9pZCkKK3sKKwlp bnQgaSwgaiwgbm9kZV9mcm9tLCBub2RlX3RvOworCisJLyogY2FsY3VsYXRlIHRvdGFsIG51bWJl ciBvZiBub2RlcyBpbiBzeXN0ZW0gZnJvbSBQWE0gYml0bWFwICovCisJbnVtbm9kZXMgPSAwOwkJ LyogaW5pdCB0b3RhbCBub2RlcyBpbiBzeXN0ZW0gKi8KKworCW1lbXNldChweG1fdG9fbmlkX21h cCwgLTEsIHNpemVvZihweG1fdG9fbmlkX21hcCkpOworCW1lbXNldChuaWRfdG9fcHhtX21hcCwg LTEsIHNpemVvZihuaWRfdG9fcHhtX21hcCkpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfUFhNX0RP TUFJTlM7IGkrKykgeworCQlpZiAocHhtX2JpdF90ZXN0KGkpKSB7CisJCQlweG1fdG9fbmlkX21h cFtpXSA9IG51bW5vZGVzOworCQkJbmlkX3RvX3B4bV9tYXBbbnVtbm9kZXMrK10gPSBpOworCQl9 CisJfQorCisJLyogc2V0IGxvZ2ljYWwgbm9kZSBpZCBpbiBtZW1vcnkgY2h1bmsgc3RydWN0dXJl ICovCisJZm9yIChpID0gMDsgaSA8IG51bV9tZW1ibGtzOyBpKyspCisJCW5vZGVfbWVtYmxrW2ld Lm5pZCA9IHB4bV90b19uaWRfbWFwW25vZGVfbWVtYmxrW2ldLm5pZF07CisKKwkvKiBhc3NpZ24g bWVtb3J5IGJhbmsgbnVtYmVycyBmb3IgZWFjaCBjaHVuayBvbiBlYWNoIG5vZGUgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgbnVtbm9kZXM7IGkrKykgeworCQlpbnQgYmFuazsKKworCQliYW5rID0gMDsK KwkJZm9yIChqID0gMDsgaiA8IG51bV9tZW1ibGtzOyBqKyspCisJCQlpZiAobm9kZV9tZW1ibGtb al0ubmlkID09IGkpCisJCQkJbm9kZV9tZW1ibGtbal0uYmFuayA9IGJhbmsrKzsKKwl9CisKKwkv KiBzZXQgbG9naWNhbCBub2RlIGlkIGluIGNwdSBzdHJ1Y3R1cmUgKi8KKwlmb3IgKGkgPSAwOyBp IDwgc3JhdF9udW1fY3B1czsgaSsrKQorCQlub2RlX2NwdWlkW2ldLm5pZCA9IHB4bV90b19uaWRf bWFwW25vZGVfY3B1aWRbaV0ubmlkXTsKKworCXByaW50aygiTnVtYmVyIG9mIGxvZ2ljYWwgbm9k ZXMgaW4gc3lzdGVtID0gJWRcbiIsIG51bW5vZGVzKTsKKwlwcmludGsoIk51bWJlciBvZiBtZW1v cnkgY2h1bmtzIGluIHN5c3RlbSA9ICVkXG4iLCBudW1fbWVtYmxrcyk7CisKKwlpZiAoIXNsaXRf dGFibGUpIHJldHVybjsKKwltZW1zZXQobnVtYV9zbGl0LCAtMSwgc2l6ZW9mKG51bWFfc2xpdCkp OworCWZvciAoaT0wOyBpPHNsaXRfdGFibGUtPmxvY2FsaXRpZXM7IGkrKykgeworCQlpZiAoIXB4 bV9iaXRfdGVzdChpKSkKKwkJCWNvbnRpbnVlOworCQlub2RlX2Zyb20gPSBweG1fdG9fbmlkX21h cFtpXTsKKwkJZm9yIChqPTA7IGo8c2xpdF90YWJsZS0+bG9jYWxpdGllczsgaisrKSB7CisJCQlp ZiAoIXB4bV9iaXRfdGVzdChqKSkKKwkJCQljb250aW51ZTsKKwkJCW5vZGVfdG8gPSBweG1fdG9f bmlkX21hcFtqXTsKKwkJCW5vZGVfZGlzdGFuY2Uobm9kZV9mcm9tLCBub2RlX3RvKSA9IAorCQkJ CXNsaXRfdGFibGUtPmVudHJ5W2kqc2xpdF90YWJsZS0+bG9jYWxpdGllcyArIGpdOworCQl9CisJ fQorCisjaWZkZWYgU0xJVF9ERUJVRworCXByaW50aygiQUNQSSAyLjAgU0xJVCBsb2NhbGl0eSB0 YWJsZTpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBudW1ub2RlczsgaSsrKSB7CisJCWZvciAoaiA9 IDA7IGogPCBudW1ub2RlczsgaisrKQorCQkJcHJpbnRrKCIlMDNkICIsIG5vZGVfZGlzdGFuY2Uo aSxqKSk7CisJCXByaW50aygiXG4iKTsKKwl9CisjZW5kaWYKK30KKyNlbmRpZiAvKiBDT05GSUdf QUNQSV9OVU1BICovCisKIHN0YXRpYyBpbnQgX19pbml0CiBhY3BpX3BhcnNlX2ZhZHQgKHVuc2ln bmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CkBAIC02NjUsMTIgKzg1 NSw2IEBACiBpbnQgX19pbml0CiBhY3BpX2Jvb3RfaW5pdCAoY2hhciAqY21kbGluZSkKIHsKLQlp bnQgcmVzdWx0OwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgQUNQSSBib290LXRpbWUgdGFibGUgcGFy c2VyICovCi0JcmVzdWx0ID0gYWNwaV90YWJsZV9pbml0KGNtZGxpbmUpOwotCWlmIChyZXN1bHQp Ci0JCXJldHVybiByZXN1bHQ7CiAKIAkvKgogCSAqIE1BRFQKQEAgLTczOCw2ICs5MjIsOSBAQAog CQlhdmFpbGFibGVfY3B1cyA9IDE7IC8qIFdlJ3ZlIGdvdCBhdCBsZWFzdCBvbmUgb2YgdGhlc2Us IG5vPyAqLwogCX0KIAlzbXBfYm9vdF9kYXRhLmNwdV9jb3VudCA9IHRvdGFsX2NwdXM7CisjaWZk ZWYgQ09ORklHX05VTUEKKwlidWlsZF9jcHVfdG9fbm9kZV9tYXAoKTsKKyNlbmRpZgogI2VuZGlm CiAJLyogTWFrZSBib290LXVwIGxvb2sgcHJldHR5ICovCiAJcHJpbnRrKCIlZCBDUFVzIGF2YWls YWJsZSwgJWQgQ1BVcyB0b3RhbFxuIiwgYXZhaWxhYmxlX2NwdXMsIHRvdGFsX2NwdXMpOwpkaWZm IC1OdXIgbGludXgtMi40LjIwLWJhc2UvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGxpbnV4LTIu NC4yMC1kY20vYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9h cmNoL2lhNjQva2VybmVsL3NldHVwLmMJRnJpIE5vdiAyOSAwODo1MzowOSAyMDAyCisrKyBsaW51 eC0yLjQuMjAtZGNtL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwlUdWUgTWFyICA0IDE3OjQ1OjUw IDIwMDMKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9pYTMyLmg+CiAjaW5jbHVk ZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9t YWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zYWwu aD4KQEAgLTQ5LDE2ICs1MCw5IEBACiAjIGVycm9yICJzdHJ1Y3QgY3B1aW5mb19pYTY0IHRvbyBi aWchIgogI2VuZGlmCiAKLSNkZWZpbmUgTUlOKGEsYikJKChhKSA8IChiKSA/IChhKSA6IChiKSkK LSNkZWZpbmUgTUFYKGEsYikJKChhKSA+IChiKSA/IChhKSA6IChiKSkKLQogZXh0ZXJuIGNoYXIg X2VuZDsKIAotI2lmZGVmIENPTkZJR19OVU1BCi0gc3RydWN0IGNwdWluZm9faWE2NCAqYm9vdF9j cHVfZGF0YTsKLSNlbHNlCiAgc3RydWN0IGNwdWluZm9faWE2NCBfY3B1X2RhdGFbTlJfQ1BVU10g X19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCJfX3NwZWNpYWxfcGFnZV9zZWN0aW9uIikpKTsKLSNl bmRpZgogCiB1bnNpZ25lZCBsb25nIGlhNjRfY3ljbGVzX3Blcl91c2VjOwogc3RydWN0IGlhNjRf Ym9vdF9wYXJhbSAqaWE2NF9ib290X3BhcmFtOwpAQCAtMTEwLDE1ICsxMDQsNjAgQEAKIAogI2Rl ZmluZSBJR05PUkVfUEZOMAkxCS8qIFhYWCBmaXggbWU6IGlnbm9yZSBwZm4gMCB1bnRpbCBUTEIg bWlzcyBoYW5kbGVyIGlzIHVwZGF0ZWQuLi4gKi8KIAorI2lmZGVmIENPTkZJR19ESVNDT05USUdN RU0KIC8qCi0gKiBGcmVlIGF2YWlsYWJsZSBtZW1vcnkgYmFzZWQgb24gdGhlIHByaW1pdGl2ZSBt YXAgY3JlYXRlZCBmcm9tCi0gKiB0aGUgYm9vdCBwYXJhbWV0ZXJzLiBUaGlzIHJvdXRpbmUgZG9l cyBub3QgYXNzdW1lIHRoZSBpbmNvbWluZwotICogc2VnbWVudHMgYXJlIHNvcnRlZC4KKyAqIGVm aV9tZW1tYXBfd2FsaygpIGtub3dzIG5vdGhpbmcgYWJvdXQgbGF5b3V0IG9mIG1lbW9yeSBhY3Jv c3Mgbm9kZXMuIEZpbmQKKyAqIG91dCB0byB3aGljaCBub2RlIGEgYmxvY2sgb2YgbWVtb3J5IGJl bG9uZ3MuICBJZ25vcmUgbWVtb3J5IHRoYXQgd2UgY2Fubm90CisgKiBpZGVudGlmeSwgYW5kIHNw bGl0IGJsb2NrcyB0aGF0IHJ1biBhY3Jvc3MgbXVsdGlwbGUgbm9kZXMuCisgKgorICogVGFrZSB0 aGlzIG9wcG9ydHVuaXR5IHRvIHJvdW5kIHRoZSBzdGFydCBhZGRyZXNzIHVwIGFuZCB0aGUgZW5k IGFkZHJlc3MKKyAqIGRvd24gdG8gcGFnZSBib3VuZGFyaWVzLgogICovCi1zdGF0aWMgaW50Ci1m cmVlX2F2YWlsYWJsZV9tZW1vcnkgKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcg ZW5kLCB2b2lkICphcmcpCit2b2lkCitjYWxsX3Blcm5vZGVfbWVtb3J5ICh1bnNpZ25lZCBsb25n IHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdm9pZCAqYXJnKQoreworCXVuc2lnbmVkIGxvbmcg cnMsIHJlOworCXZvaWQgKCpmdW5jKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQs IGludCk7CisJaW50IGk7CisKKwlzdGFydCA9IFBBR0VfQUxJR04oc3RhcnQpOworCWVuZCAmPSBQ QUdFX01BU0s7CisJaWYgKHN0YXJ0ID49IGVuZCkKKwkJcmV0dXJuOworCisJZnVuYyA9IGFyZzsK KworCWlmICghbnVtX21lbWJsa3MpIHsKKwkJLyogdGhpcyBtYWNoaW5lIGRvZXNuJ3QgaGF2ZSBT UkFULCAqLworCQkvKiBzbyBjYWxsIGZ1bmMgd2l0aCBuaWQ9MCwgYmFuaz0wICovCisJCWlmIChz dGFydCA8IGVuZCkKKwkJCSgqZnVuYykoc3RhcnQsIGVuZCAtIHN0YXJ0LCAwLCAwKTsKKwkJcmV0 dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fbWVtYmxrczsgaSsrKSB7CisJCXJzID0g bWF4KHN0YXJ0LCBub2RlX21lbWJsa1tpXS5zdGFydF9wYWRkcik7CisJCXJlID0gbWluKGVuZCwg bm9kZV9tZW1ibGtbaV0uc3RhcnRfcGFkZHIrbm9kZV9tZW1ibGtbaV0uc2l6ZSk7CisKKwkJaWYg KHJzIDwgcmUpCisJCQkoKmZ1bmMpKHJzLCByZS1ycywgbm9kZV9tZW1ibGtbaV0ubmlkLAorCQkJ CW5vZGVfbWVtYmxrW2ldLmJhbmspOworCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfRElTQ09OVElH TUVNICovCisKKy8qCisgKiBGaWx0ZXIgaW5jb21pbmcgbWVtb3J5IHNlZ21lbnRzIGJhc2VkIG9u IHRoZSBwcmltaXRpdmUgbWFwIGNyZWF0ZWQgZnJvbQorICogdGhlIGJvb3QgcGFyYW1ldGVycy4g U2VnbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXAgYXJlIHJlbW92ZWQgZnJvbSB0aGUKKyAqIG1l bW9yeSByYW5nZXMuIEEgY2FsbGVyLXNwZWNpZmllZCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0 aGUgbWVtb3J5CisgKiByYW5nZXMgdGhhdCByZW1haW4gYWZ0ZXIgZmlsdGVyaW5nLgorICogVGhp cyByb3V0aW5lIGRvZXMgbm90IGFzc3VtZSB0aGUgaW5jb21pbmcgc2VnbWVudHMgYXJlIHNvcnRl ZC4KKyAqLworaW50CitmaWx0ZXJfcnN2ZF9tZW1vcnkgKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVu c2lnbmVkIGxvbmcgZW5kLCB2b2lkICphcmcpCiB7CiAJdW5zaWduZWQgbG9uZyByYW5nZV9zdGFy dCwgcmFuZ2VfZW5kLCBwcmV2X3N0YXJ0OworCXZvaWQgKCpmdW5jKSh1bnNpZ25lZCBsb25nLCB1 bnNpZ25lZCBsb25nKTsKIAlpbnQgaTsKIAogI2lmIElHTk9SRV9QRk4wCkBAIC0xMzIsMTMgKzE3 MSwxOCBAQAogCSAqIGxvd2VzdCBwb3NzaWJsZSBhZGRyZXNzKHdhbGtlciB1c2VzIHZpcnR1YWwp CiAJICovCiAJcHJldl9zdGFydCA9IFBBR0VfT0ZGU0VUOworCWZ1bmMgPSBhcmc7CiAKIAlmb3Ig KGkgPSAwOyBpIDwgbnVtX3JzdmRfcmVnaW9uczsgKytpKSB7Ci0JCXJhbmdlX3N0YXJ0ID0gTUFY KHN0YXJ0LCBwcmV2X3N0YXJ0KTsKLQkJcmFuZ2VfZW5kICAgPSBNSU4oZW5kLCByc3ZkX3JlZ2lv bltpXS5zdGFydCk7CisJCXJhbmdlX3N0YXJ0ID0gbWF4KHN0YXJ0LCBwcmV2X3N0YXJ0KTsKKwkJ cmFuZ2VfZW5kICAgPSBtaW4oZW5kLCByc3ZkX3JlZ2lvbltpXS5zdGFydCk7CiAKIAkJaWYgKHJh bmdlX3N0YXJ0IDwgcmFuZ2VfZW5kKQotCQkJZnJlZV9ib290bWVtKF9fcGEocmFuZ2Vfc3RhcnQp LCByYW5nZV9lbmQgLSByYW5nZV9zdGFydCk7CisjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQor CQkJY2FsbF9wZXJub2RlX21lbW9yeShfX3BhKHJhbmdlX3N0YXJ0KSwgX19wYShyYW5nZV9lbmQp LCBmdW5jKTsKKyNlbHNlCisJCQkoKmZ1bmMpKF9fcGEocmFuZ2Vfc3RhcnQpLCByYW5nZV9lbmQg LSByYW5nZV9zdGFydCk7CisjZW5kaWYKIAogCQkvKiBub3RoaW5nIG1vcmUgYXZhaWxhYmxlIGlu IHRoaXMgc2VnbWVudCAqLwogCQlpZiAocmFuZ2VfZW5kID09IGVuZCkgcmV0dXJuIDA7CkBAIC0x NTAsNiArMTk0LDcgQEAKIH0KIAogCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KIC8qCiAg KiBGaW5kIGEgcGxhY2UgdG8gcHV0IHRoZSBib290bWFwIGFuZCByZXR1cm4gaXRzIHN0YXJ0aW5n IGFkZHJlc3MgaW4gYm9vdG1hcF9zdGFydC4KICAqIFRoaXMgYWRkcmVzcyBtdXN0IGJlIHBhZ2Ut YWxpZ25lZC4KQEAgLTE3MSw4ICsyMTYsOCBAQAogCWZyZWVfc3RhcnQgPSBQQUdFX09GRlNFVDsK IAogCWZvciAoaSA9IDA7IGkgPCBudW1fcnN2ZF9yZWdpb25zOyBpKyspIHsKLQkJcmFuZ2Vfc3Rh cnQgPSBNQVgoc3RhcnQsIGZyZWVfc3RhcnQpOwotCQlyYW5nZV9lbmQgICA9IE1JTihlbmQsIHJz dmRfcmVnaW9uW2ldLnN0YXJ0ICYgUEFHRV9NQVNLKTsKKwkJcmFuZ2Vfc3RhcnQgPSBtYXgoc3Rh cnQsIGZyZWVfc3RhcnQpOworCQlyYW5nZV9lbmQgICA9IG1pbihlbmQsIHJzdmRfcmVnaW9uW2ld LnN0YXJ0ICYgUEFHRV9NQVNLKTsKIAogCQlpZiAocmFuZ2VfZW5kIDw9IHJhbmdlX3N0YXJ0KSBj b250aW51ZTsJLyogc2tpcCBvdmVyIGVtcHR5IHJhbmdlICovCiAKQEAgLTE4OCw2ICsyMzMsNyBA QAogCX0KIAlyZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfRElTQ09OVElHTUVNICovCiAK IHN0YXRpYyB2b2lkCiBzb3J0X3JlZ2lvbnMgKHN0cnVjdCByc3ZkX3JlZ2lvbiAqcnN2ZF9yZWdp b24sIGludCBtYXgpCkBAIC0yNTIsNiArMjk4LDE0IEBACiAKIAlzb3J0X3JlZ2lvbnMocnN2ZF9y ZWdpb24sIG51bV9yc3ZkX3JlZ2lvbnMpOwogCisjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQor CXsKKwkJZXh0ZXJuIHZvaWQgZGlzY29udGlnX21lbV9pbml0KHZvaWQpOworCQlib290bWFwX3Np emUgPSBtYXhfcGZuID0gMDsgICAgIC8qIHN0b3AgZ2NjIHdhcm5pbmdzICovCisJCWRpc2NvbnRp Z19tZW1faW5pdCgpOworCX0KKyNlbHNlIC8qICFDT05GSUdfRElTQ09OVElHTUVNICovCisKIAkv KiBmaXJzdCBmaW5kIGhpZ2hlc3QgcGFnZSBmcmFtZSBudW1iZXIgKi8KIAltYXhfcGZuID0gMDsK IAllZmlfbWVtbWFwX3dhbGsoZmluZF9tYXhfcGZuLCAmbWF4X3Bmbik7CkBAIC0yNjgsOCArMzIy LDkgQEAKIAlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW0oYm9vdG1hcF9zdGFydCA+PiBQQUdF X1NISUZULCBtYXhfcGZuKTsKIAogCS8qIEZyZWUgYWxsIGF2YWlsYWJsZSBtZW1vcnksIHRoZW4g bWFyayBib290bWVtLW1hcCBhcyBiZWluZyBpbiB1c2UuICAqLwotCWVmaV9tZW1tYXBfd2Fsayhm cmVlX2F2YWlsYWJsZV9tZW1vcnksIDApOworCWVmaV9tZW1tYXBfd2FsayhmaWx0ZXJfcnN2ZF9t ZW1vcnksIGZyZWVfYm9vdG1lbSk7CiAJcmVzZXJ2ZV9ib290bWVtKGJvb3RtYXBfc3RhcnQsIGJv b3RtYXBfc2l6ZSk7CisjZW5kaWYgLyogIUNPTkZJR19ESVNDT05USUdNRU0gKi8KIAogI2lmZGVm IENPTkZJR19CTEtfREVWX0lOSVRSRAogCWlmIChpYTY0X2Jvb3RfcGFyYW0tPmluaXRyZF9zdGFy dCkgewpAQCAtMjk2LDYgKzM1MSwxNiBAQAogCiAJZWZpX2luaXQoKTsKIAorI2lmZGVmIENPTkZJ R19BQ1BJX0JPT1QKKwkvKiBJbml0aWFsaXplIHRoZSBBQ1BJIGJvb3QtdGltZSB0YWJsZSBwYXJz ZXIgKi8KKwlhY3BpX3RhYmxlX2luaXQoKmNtZGxpbmVfcCk7CisKKyNpZmRlZiBDT05GSUdfQUNQ SV9OVU1BCisJYWNwaV9udW1hX2luaXQoKTsKKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX0FQ Q0lfQk9PVCAqLworCiAJaW9tZW1fcmVzb3VyY2UuZW5kID0gfjBVTDsJLyogRklYTUUgcHJvYmFi bHkgYmVsb25ncyBlbHNld2hlcmUgKi8KIAlmaW5kX21lbW9yeSgpOwogCkBAIC01MzcsNDAgKzYw MiwxMSBAQAogCXBhbF92bV9pbmZvXzJfdV90IHZtaTsKIAl1bnNpZ25lZCBpbnQgbWF4X2N0eDsK IAlzdHJ1Y3QgY3B1aW5mb19pYTY0ICpteV9jcHVfZGF0YTsKLSNpZmRlZiBDT05GSUdfTlVNQQot CWludCBjcHUsIG9yZGVyOwogCi0JLyoKLQkgKiBJZiBOVU1BIGlzIGNvbmZpZ3VyZWQsIHRoZSBj cHVfZGF0YSBhcnJheSBpcyBub3QgcHJlYWxsb2NhdGVkLiBUaGUgYm9vdCBjcHUKLQkgKiBhbGxv Y2F0ZXMgZW50cmllcyBmb3IgZXZlcnkgcG9zc2libGUgY3B1LiBBcyB0aGUgcmVtYWluaW5nIGNw dXMgY29tZSBvbmxpbmUsCi0JICogdGhleSByZWFsbG9jYXRlIGEgbmV3IGNwdV9kYXRhIHN0cnVj dHVyZSBvbiB0aGVpciBsb2NhbCBub2RlLiBUaGlzIGV4dHJhIHdvcmsKLQkgKiBpcyByZXF1aXJl ZCBiZWNhdXNlIHNvbWUgYm9vdCBjb2RlIHJlZmVyZW5jZXMgYWxsIGNwdV9kYXRhIHN0cnVjdHVy ZXMKLQkgKiBiZWZvcmUgdGhlIGNwdXMgYXJlIGFjdHVhbGx5IHN0YXJ0ZWQuCi0JICovCi0JaWYg KCFib290X2NwdV9kYXRhKSB7Ci0JCW15X2NwdV9kYXRhID0gYWxsb2NfYm9vdG1lbV9wYWdlc19u b2RlKE5PREVfREFUQShudW1hX25vZGVfaWQoKSksCi0JCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVj dCBjcHVpbmZvX2lhNjQpKTsKLQkJYm9vdF9jcHVfZGF0YSA9IG15X2NwdV9kYXRhOwotCQlteV9j cHVfZGF0YS0+Y3B1X2RhdGFbMF0gPSBteV9jcHVfZGF0YTsKLQkJZm9yIChjcHUgPSAxOyBjcHUg PCBOUl9DUFVTOyArK2NwdSkKLQkJCW15X2NwdV9kYXRhLT5jcHVfZGF0YVtjcHVdCi0JCQkJPSBh bGxvY19ib290bWVtX3BhZ2VzX25vZGUoTk9ERV9EQVRBKG51bWFfbm9kZV9pZCgpKSwKLQkJCQkJ CQkgICBzaXplb2Yoc3RydWN0IGNwdWluZm9faWE2NCkpOwotCQlmb3IgKGNwdSA9IDE7IGNwdSA8 IE5SX0NQVVM7ICsrY3B1KQotCQkJbWVtY3B5KG15X2NwdV9kYXRhLT5jcHVfZGF0YVtjcHVdLT5j cHVfZGF0YSwKLQkJCSAgICAgICBteV9jcHVfZGF0YS0+Y3B1X2RhdGEsIHNpemVvZihteV9jcHVf ZGF0YS0+Y3B1X2RhdGEpKTsKLQl9IGVsc2UgewotCQlvcmRlciA9IGdldF9vcmRlcihzaXplb2Yo c3RydWN0IGNwdWluZm9faWE2NCkpOwotCQlteV9jcHVfZGF0YSA9IHBhZ2VfYWRkcmVzcyhhbGxv Y19wYWdlc19ub2RlKG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMLCBvcmRlcikpOwotCQltZW1j cHkobXlfY3B1X2RhdGEsIGJvb3RfY3B1X2RhdGEtPmNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQo KV0sCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGNwdWluZm9faWE2NCkpOwotCQlfX2ZyZWVfcGFn ZXModmlydF90b19wYWdlKGJvb3RfY3B1X2RhdGEtPmNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQo KV0pLAotCQkJICAgICBvcmRlcik7Ci0JCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgKytj cHUpCi0JCQlib290X2NwdV9kYXRhLT5jcHVfZGF0YVtjcHVdLT5jcHVfZGF0YVtzbXBfcHJvY2Vz c29yX2lkKCldID0gbXlfY3B1X2RhdGE7Ci0JfQotI2Vsc2UKIAlteV9jcHVfZGF0YSA9IGNwdV9k YXRhKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKyNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisg ICAgICAgIG15X2NwdV9kYXRhLT5ub2RlX2RhdGEgPSBnZXRfbm9kZV9kYXRhX3B0cigpOwogI2Vu ZGlmCiAKIAkvKgpkaWZmIC1OdXIgbGludXgtMi40LjIwLWJhc2UvYXJjaC9pYTY0L2tlcm5lbC9z bXBib290LmMgbGludXgtMi40LjIwLWRjbS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwotLS0g bGludXgtMi40LjIwLWJhc2UvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMJTW9uIE1hciAgMyAx MDoyNDoyMSAyMDAzCisrKyBsaW51eC0yLjQuMjAtZGNtL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9v dC5jCU1vbiBNYXIgIDMgMTA6NTU6MTIgMjAwMwpAQCAtNTc1LDMgKzU3NSw0NCBAQAogCQlzbXBf bnVtX2NwdXMgPSAxOwogCX0KIH0KKworCisjaWZkZWYgQ09ORklHX05VTUEKKworLyogb24gd2hp Y2ggbm9kZSBpcyBlYWNoIGxvZ2ljYWwgQ1BVIChvbmUgY2FjaGVsaW5lIGV2ZW4gZm9yIDY0IENQ VXMpICovCit2b2xhdGlsZSBjaGFyIGNwdV90b19ub2RlX21hcFtOUl9DUFVTXSBfX2NhY2hlbGlu ZV9hbGlnbmVkOworLyogd2hpY2ggbG9naWNhbCBDUFVzIGFyZSBvbiB3aGljaCBub2RlcyAqLwor dm9sYXRpbGUgdW5zaWduZWQgbG9uZyBub2RlX3RvX2NwdV9tYXNrW01BWF9OVU1OT0RFU10gX19j YWNoZWxpbmVfYWxpZ25lZDsKKworLyoKKyAqIEJ1aWxkIGNwdSB0byBub2RlIG1hcHBpbmcgYW5k IGluaXRpYWxpemUgdGhlIHBlciBub2RlIGNwdSBtYXNrcy4KKyAqLwordm9pZCBfX2luaXQKK2J1 aWxkX2NwdV90b19ub2RlX21hcCAodm9pZCkKK3sKKwlpbnQgY3B1LCBpLCBub2RlOworCisJZm9y KG5vZGU9MDsgbm9kZTxNQVhfTlVNTk9ERVM7IG5vZGUrKykKKwkJbm9kZV90b19jcHVfbWFza1tu b2RlXSA9IDA7CisJZm9yKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7ICsrY3B1KSB7CisJCS8qCisJ CSAqIEFsbCBJdGFuaXVtIE5VTUEgcGxhdGZvcm1zIEkga25vdyB1c2UgQUNQSSwgc28gbWF5YmUg d2UKKwkJICogY2FuIGRyb3AgdGhpcyBpZmRlZiBjb21wbGV0ZWx5LiAgICAgICAgICAgICAgICAg ICAgW0VGXQorCQkgKi8KKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCisJCW5vZGUgPSAtMTsKKwkJ Zm9yIChpID0gMDsgaSA8IE5SX0NQVVM7ICsraSkKKwkJCWlmIChjcHVfcGh5c2ljYWxfaWQoY3B1 KSA9PSBub2RlX2NwdWlkW2ldLnBoeXNfaWQpIHsKKwkJCQlub2RlID0gbm9kZV9jcHVpZFtpXS5u aWQ7CisJCQkJYnJlYWs7CisJCQl9CisjZWxzZQorIwkJZXJyb3IgRml4bWU6IER1bm5vIGhvdyB0 byBidWlsZCBDUFUtdG8tbm9kZSBtYXAuCisjZW5kaWYKKwkJY3B1X3RvX25vZGVfbWFwW2NwdV0g PSBub2RlOworCQlpZiAobm9kZSA+PSAwKQorCQkJbm9kZV90b19jcHVfbWFza1tub2RlXSB8PSAo MVVMIDw8IGNwdSk7CisJfQorfQorCisjZW5kaWYgLyogQ09ORklHX05VTUEgKi8KZGlmZiAtTnVy IGxpbnV4LTIuNC4yMC1iYXNlL2FyY2gvaWE2NC9tbS9NYWtlZmlsZSBsaW51eC0yLjQuMjAtZGNt L2FyY2gvaWE2NC9tbS9NYWtlZmlsZQotLS0gbGludXgtMi40LjIwLWJhc2UvYXJjaC9pYTY0L21t L01ha2VmaWxlCU1vbiBNYXIgIDMgMTA6MjQ6MjEgMjAwMworKysgbGludXgtMi40LjIwLWRjbS9h cmNoL2lhNjQvbW0vTWFrZWZpbGUJTW9uIE1hciAgMyAxMDo1NToxMiAyMDAzCkBAIC0xMiw1ICsx Miw3IEBACiBleHBvcnQtb2JqcyA6PSBpbml0Lm8KIAogb2JqLXkJIDo9IGluaXQubyBmYXVsdC5v IHRsYi5vIGV4dGFibGUubworb2JqLSQoQ09ORklHX05VTUEpICs9IG51bWEubworb2JqLSQoQ09O RklHX0RJU0NPTlRJR01FTSkgKz0gZGlzY29udGlnLm8KIAogaW5jbHVkZSAkKFRPUERJUikvUnVs ZXMubWFrZQpkaWZmIC1OdXIgbGludXgtMi40LjIwLWJhc2UvYXJjaC9pYTY0L21tL2Rpc2NvbnRp Zy5jIGxpbnV4LTIuNC4yMC1kY20vYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCi0tLSBsaW51eC0y LjQuMjAtYmFzZS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMJVGh1IEphbiAgMSAwOTowMDowMCAx OTcwCisrKyBsaW51eC0yLjQuMjAtZGNtL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwlUdWUgTWFy ICA0IDE3OjE1OjM3IDIwMDMKQEAgLTAsMCArMSwzMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv cHlyaWdodCAoYykgMjAwMSBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChjKSAyMDAxIFRvbnkg THVjayA8dG9ueS5sdWNrQGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwMiBORUMgQ29y cC4KKyAqIENvcHlyaWdodCAoYykgMjAwMiBLaW1pbyBTdWdhbnVtYSA8ay1zdWdhbnVtYUBkYS5q cC5uZWMuY29tPgorICovCisKKy8qCisgKiBQbGF0Zm9ybSBpbml0aWFsaXphdGlvbiBmb3IgRGlz Y29udGlnIE1lbW9yeQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRl IDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51 eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvZWZp Lmg+CisKKworLyoKKyAqIFJvdW5kIGFuIGFkZHJlc3MgdXB3YXJkIHRvIHRoZSBuZXh0IG11bHRp cGxlIG9mIEdSQU5VTEUgc2l6ZS4KKyAqLworI2RlZmluZSBHUkFOVUxFUk9VTkRVUChuKSAoKChu KStJQTY0X0dSQU5VTEVfU0laRS0xKSAmIH4oSUE2NF9HUkFOVUxFX1NJWkUtMSkpCisKK3N0YXRp YyBzdHJ1Y3QgaWE2NF9ub2RlX2RhdGEJKm5vZGVfZGF0YVtOUl9OT0RFU107CitzdGF0aWMgbG9u ZwkJCWJvb3RfcGdfZGF0YVs4Kk5SX05PREVTK3NpemVvZihwZ19kYXRhX3QpXSAgX19pbml0ZGF0 YTsKK3N0YXRpYyBwZ19kYXRhX3QJCSpwZ19kYXRhX3B0cltOUl9OT0RFU10gX19pbml0ZGF0YTsK K3N0YXRpYyBib290bWVtX2RhdGFfdAkJYmRhdGFbTlJfTk9ERVNdW05SX0JBTktTX1BFUl9OT0RF KzFdIF9faW5pdGRhdGE7CisKK2V4dGVybiBpbnQgIGZpbHRlcl9yc3ZkX21lbW9yeSAodW5zaWdu ZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHZvaWQgKmFyZyk7CisKKy8qCisgKiBS ZXR1cm4gdGhlIGNvbXBhY3Qgbm9kZSBudW1iZXIgb2YgdGhpcyBjcHUuIFVzZWQgcHJpb3IgdG8K KyAqIHNldHRpbmcgdXAgdGhlIGNwdV9kYXRhIGFyZWEuCisgKglOb3RlIC0gbm90IGZhc3QsIGlu dGVuZGVkIGZvciBib290IHVzZSBvbmx5ISEKKyAqLworaW50Citib290X2dldF9sb2NhbF9ub2Rl aWQodm9pZCkKK3sKKwlpbnQJaTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspCisJ CWlmIChub2RlX2NwdWlkW2ldLnBoeXNfaWQgPT0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpCisJ CQlyZXR1cm4gbm9kZV9jcHVpZFtpXS5uaWQ7CisKKwkvKiBub2RlIGluZm8gbWlzc2luZywgc28g bmlkIHNob3VsZCBiZSAwLi4gKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiBhIHBv aW50ZXIgdG8gdGhlIHBnX2RhdGEgc3RydWN0dXJlIGZvciBhIG5vZGUuCisgKiBUaGlzIGZ1bmN0 aW9uIGlzIHVzZWQgT05MWSBpbiBlYXJseSBib290IGJlZm9yZSB0aGUgY3B1X2RhdGEKKyAqIHN0 cnVjdHVyZSBpcyBhdmFpbGFibGUuCisgKi8KK3BnX2RhdGFfdCogX19pbml0Citib290X2dldF9w Z19kYXRhX3B0cihsb25nIG5vZGUpCit7CisJcmV0dXJuIHBnX2RhdGFfcHRyW25vZGVdOworfQor CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBub2RlIGRhdGEgZm9yIHRoZSBjdXJy ZW50IG5vZGUuCisgKgkoYm9vdHRpbWUgaW5pdGlhbGl6YXRpb24gb25seSkKKyAqLworc3RydWN0 IGlhNjRfbm9kZV9kYXRhICoKK2dldF9ub2RlX2RhdGFfcHRyKHZvaWQpCit7CisJcmV0dXJuIG5v ZGVfZGF0YVtib290X2dldF9sb2NhbF9ub2RlaWQoKV07Cit9CisKKy8qCisgKiBXZSBhbGxvY2F0 ZSBvbmUgb2YgdGhlIGJvb3RtZW1fZGF0YV90IHN0cnVjdHMgZm9yIGVhY2ggcGllY2Ugb2YgbWVt b3J5CisgKiB0aGF0IHdlIHdpc2ggdG8gdHJlYXQgYXMgYSBjb250aWd1b3VzIGJsb2NrLiAgRWFj aCBzdWNoIGJsb2NrIG11c3Qgc3RhcnQKKyAqIG9uIGEgQkFOS1NJWkUgYm91bmRhcnkuICBNdWx0 aXBsZSBiYW5rcyBwZXIgbm9kZSBpcyBub3Qgc3VwcG9ydGVkLgorICovCitzdGF0aWMgaW50IF9f aW5pdAorYnVpbGRfbWFwcyh1bnNpZ25lZCBsb25nIHBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW5n dGgsIGludCBub2RlKQoreworCWJvb3RtZW1fZGF0YV90CSpiZHA7CisJdW5zaWduZWQgbG9uZyBj c3RhcnQsIGVwZm47CisKKwliZHAgPSBwZ19kYXRhX3B0cltub2RlXS0+YmRhdGE7CisJZXBmbiA9 IEdSQU5VTEVST1VORFVQKHBzdGFydCArIGxlbmd0aCkgPj4gUEFHRV9TSElGVDsKKwljc3RhcnQg PSBwc3RhcnQgJiB+KEJBTktTSVpFIC0gMSk7CisKKwlpZiAoIWJkcC0+bm9kZV9sb3dfcGZuKSB7 CisJCWJkcC0+bm9kZV9ib290X3N0YXJ0ID0gY3N0YXJ0OworCQliZHAtPm5vZGVfbG93X3BmbiA9 IGVwZm47CisJfSBlbHNlIHsKKwkJYmRwLT5ub2RlX2Jvb3Rfc3RhcnQgPSBtaW4oY3N0YXJ0LCBi ZHAtPm5vZGVfYm9vdF9zdGFydCk7CisJCWJkcC0+bm9kZV9sb3dfcGZuID0gbWF4KGVwZm4sIGJk cC0+bm9kZV9sb3dfcGZuKTsKKwl9CisKKwltaW5fbG93X3BmbiA9IG1pbihtaW5fbG93X3Bmbiwg YmRwLT5ub2RlX2Jvb3Rfc3RhcnQ+PlBBR0VfU0hJRlQpOworCW1heF9sb3dfcGZuID0gbWF4KG1h eF9sb3dfcGZuLCBiZHAtPm5vZGVfbG93X3Bmbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAq IEZpbmQgc3BhY2Ugb24gZWFjaCBub2RlIGZvciB0aGUgYm9vdG1lbSBtYXAuCisgKgorICogQ2Fs bGVkIGJ5IGVmaV9tZW1tYXBfd2FsayB0byBmaW5kIGJvb3QgbWVtb3J5IG9uIGVhY2ggbm9kZS4g Tm90ZSB0aGF0CisgKiBvbmx5IGJsb2NrcyB0aGF0IGFyZSBmcmVlIGFyZSBwYXNzZWQgdG8gdGhp cyByb3V0aW5lIChjdXJyZW50bHkgZmlsdGVyZWQgYnkKKyAqIGZyZWVfYXZhaWxhYmxlX21lbW9y eSkuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0CitmaW5kX2Jvb3RtYXBfc3BhY2UodW5zaWduZWQg bG9uZyBwc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBpbnQgbm9kZSkKK3sKKwl1bnNpZ25l ZCBsb25nCW1hcHNpemUsIHBhZ2VzLCBlcGZuOworCWJvb3RtZW1fZGF0YV90CSpiZHA7CisKKwll cGZuID0gKHBzdGFydCArIGxlbmd0aCkgPj4gUEFHRV9TSElGVDsKKwliZHAgPSAmcGdfZGF0YV9w dHJbbm9kZV0tPmJkYXRhWzBdOworCisJaWYgKHBzdGFydCA8IGJkcC0+bm9kZV9ib290X3N0YXJ0 IHx8IGVwZm4gPiBiZHAtPm5vZGVfbG93X3BmbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWJkcC0+ bm9kZV9ib290bWVtX21hcCkgeworCQlwYWdlcyA9IGJkcC0+bm9kZV9sb3dfcGZuIC0gKGJkcC0+ bm9kZV9ib290X3N0YXJ0Pj5QQUdFX1NISUZUKTsKKwkJbWFwc2l6ZSA9IGJvb3RtZW1fYm9vdG1h cF9wYWdlcyhwYWdlcykgPDwgUEFHRV9TSElGVDsKKwkJaWYgKGxlbmd0aCA+IG1hcHNpemUpIHsK KwkJCWluaXRfYm9vdG1lbV9ub2RlKAorCQkJCUJPT1RfTk9ERV9EQVRBKG5vZGUpLAorCQkJCXBz dGFydD4+UEFHRV9TSElGVCwgCisJCQkJYmRwLT5ub2RlX2Jvb3Rfc3RhcnQ+PlBBR0VfU0hJRlQs CisJCQkJYmRwLT5ub2RlX2xvd19wZm4pOworCQl9CisKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor CisvKgorICogRnJlZSBhdmFpbGFibGUgbWVtb3J5IHRvIHRoZSBib290bWVtIGFsbG9jYXRvci4K KyAqCisgKiBOb3RlIHRoYXQgb25seSBibG9ja3MgdGhhdCBhcmUgZnJlZSBhcmUgcGFzc2VkIHRv IHRoaXMgcm91dGluZSAoY3VycmVudGx5IAorICogZmlsdGVyZWQgYnkgZnJlZV9hdmFpbGFibGVf bWVtb3J5KS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgX19pbml0CitkaXNjb250aWdfZnJlZV9ib290 bWVtX25vZGUodW5zaWduZWQgbG9uZyBwc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBpbnQg bm9kZSkKK3sKKwlmcmVlX2Jvb3RtZW1fbm9kZShCT09UX05PREVfREFUQShub2RlKSwgcHN0YXJ0 LCBsZW5ndGgpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFJlc2VydmUgdGhlIHNwYWNl IHVzZWQgYnkgdGhlIGJvb3RtZW0gbWFwcy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0CitkaXNj b250aWdfcmVzZXJ2ZV9ib290bWVtKHZvaWQpCit7CisJaW50CQlub2RlOworCXVuc2lnbmVkIGxv bmcJbWFwYmFzZSwgbWFwc2l6ZSwgcGFnZXM7CisJYm9vdG1lbV9kYXRhX3QJKmJkcDsKKworCWZv ciAobm9kZSA9IDA7IG5vZGUgPCBudW1ub2Rlczsgbm9kZSsrKSB7CisJCWJkcCA9IEJPT1RfTk9E RV9EQVRBKG5vZGUpLT5iZGF0YTsKKworCQlwYWdlcyA9IGJkcC0+bm9kZV9sb3dfcGZuIC0gKGJk cC0+bm9kZV9ib290X3N0YXJ0Pj5QQUdFX1NISUZUKTsKKwkJbWFwc2l6ZSA9IGJvb3RtZW1fYm9v dG1hcF9wYWdlcyhwYWdlcykgPDwgUEFHRV9TSElGVDsKKwkJbWFwYmFzZSA9IF9fcGEoYmRwLT5u b2RlX2Jvb3RtZW1fbWFwKTsKKwkJcmVzZXJ2ZV9ib290bWVtX25vZGUoQk9PVF9OT0RFX0RBVEEo bm9kZSksIG1hcGJhc2UsIG1hcHNpemUpOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIHBlciBu b2RlIHRhYmxlcy4KKyAqIAktIHRoZSBwZ19kYXRhIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgb24g ZWFjaCBub2RlLiBUaGlzIG1pbmltaXplcyBvZmZub2RlIAorICoJICBtZW1vcnkgcmVmZXJlbmNl cworICoJLSB0aGUgbm9kZSBkYXRhIGlzIGFsbG9jYXRlZCAmIGluaXRpYWxpemVkLiBQb3J0aW9u cyBvZiB0aGlzIHN0cnVjdHVyZSBpcyByZWFkLW9ubHkgKGFmdGVyIAorICoJICBib290KSBhbmQg Y29udGFpbnMgbm9kZS1sb2NhbCBwb2ludGVycyB0byB1c2VmdWxzIGRhdGEgc3RydWN0dXJlcyBs b2NhdGVkIG9uCisgKgkgIG90aGVyIG5vZGVzLgorICoKKyAqIFdlIGFsc28gc3dpdGNoIHRvIHVz aW5nIHRoZSAicmVhbCIgcGdfZGF0YSBzdHJ1Y3R1cmVzIGF0IHRoaXMgcG9pbnQuIEVhcmxpZXIg aW4gYm9vdCwgd2UKKyAqIHVzZSBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUuIFRoZSBvbmx5IHVzZSBm b3IgcGdfZGF0YSBwcmlvciB0byB0aGUgcG9pbnQgaW4gYm9vdCBpcyB0byBnZXQgCisgKiB0aGUg cG9pbnRlciB0byB0aGUgYmRhdGEgZm9yIHRoZSBub2RlLgorICovCitzdGF0aWMgdm9pZCBfX2lu aXQKK2FsbG9jYXRlX3Blcm5vZGVfc3RydWN0dXJlcyh2b2lkKQoreworCXBnX2RhdGFfdAkqcGdk YXQ9MCwgKm5ld19wZ2RhdF9saXN0PTA7CisJaW50CQlub2RlLCBteW5vZGU7CisKKwlteW5vZGUg PSBib290X2dldF9sb2NhbF9ub2RlaWQoKTsKKwlmb3IgKG5vZGUgPSBudW1ub2RlcyAtIDE7IG5v ZGUgPj0gMCA7IG5vZGUtLSkgeworCQlub2RlX2RhdGFbbm9kZV0gPSBhbGxvY19ib290bWVtX25v ZGUoQk9PVF9OT0RFX0RBVEEobm9kZSksIHNpemVvZiAoc3RydWN0IGlhNjRfbm9kZV9kYXRhKSk7 CisJCXBnZGF0ID0gX19hbGxvY19ib290bWVtX25vZGUoQk9PVF9OT0RFX0RBVEEobm9kZSksIHNp emVvZihwZ19kYXRhX3QpLCBTTVBfQ0FDSEVfQllURVMsIDApOworCQlwZ2RhdC0+YmRhdGEgPSAm KGJkYXRhW25vZGVdWzBdKTsKKwkJcGdfZGF0YV9wdHJbbm9kZV0gPSBwZ2RhdDsKKwkJcGdkYXQt Pm5vZGVfbmV4dCA9IG5ld19wZ2RhdF9saXN0OworCQluZXdfcGdkYXRfbGlzdCA9IHBnZGF0Owor CX0KKwkKKwltZW1jcHkobm9kZV9kYXRhW215bm9kZV0tPnBnX2RhdGFfcHRycywgcGdfZGF0YV9w dHIsIHNpemVvZihwZ19kYXRhX3B0cikpOworCW1lbWNweShub2RlX2RhdGFbbXlub2RlXS0+bm9k ZV9kYXRhX3B0cnMsIG5vZGVfZGF0YSwgc2l6ZW9mKG5vZGVfZGF0YSkpOworCisJcGdkYXRfbGlz dCA9IG5ld19wZ2RhdF9saXN0OworfQorCisvKgorICogQ2FsbGVkIGVhcmx5IGluIGJvb3QgdG8g c2V0dXAgdGhlIGJvb3QgbWVtb3J5IGFsbG9jYXRvciwgYW5kIHRvCisgKiBhbGxvY2F0ZSB0aGUg bm9kZS1sb2NhbCBwZ19kYXRhICYgbm9kZS1kaXJlY3RvcnkgZGF0YSBzdHJ1Y3R1cmVzLi4KKyAq Lwordm9pZCBfX2luaXQKK2Rpc2NvbnRpZ19tZW1faW5pdCh2b2lkKQoreworCWludAlub2RlOwor CisJaWYgKG51bW5vZGVzID09IDApIHsKKwkJcHJpbnRrKCJub2RlIGluZm8gbWlzc2luZyFcbiIp OworCQludW1ub2RlcyA9IDE7CisJfQorCisJZm9yIChub2RlID0gMDsgbm9kZSA8IG51bW5vZGVz OyBub2RlKyspIHsKKwkJcGdfZGF0YV9wdHJbbm9kZV0gPSAocGdfZGF0YV90KikgJmJvb3RfcGdf ZGF0YVtub2RlXTsKKwkJcGdfZGF0YV9wdHJbbm9kZV0tPmJkYXRhID0gJmJkYXRhW25vZGVdWzBd OworCX0KKworCW1pbl9sb3dfcGZuID0gLTE7CisJbWF4X2xvd19wZm4gPSAwOworCisgICAgICAg IGVmaV9tZW1tYXBfd2FsayhmaWx0ZXJfcnN2ZF9tZW1vcnksIGJ1aWxkX21hcHMpOworICAgICAg ICBlZmlfbWVtbWFwX3dhbGsoZmlsdGVyX3JzdmRfbWVtb3J5LCBmaW5kX2Jvb3RtYXBfc3BhY2Up OworICAgICAgICBlZmlfbWVtbWFwX3dhbGsoZmlsdGVyX3JzdmRfbWVtb3J5LCBkaXNjb250aWdf ZnJlZV9ib290bWVtX25vZGUpOworCWRpc2NvbnRpZ19yZXNlcnZlX2Jvb3RtZW0oKTsKKwlhbGxv Y2F0ZV9wZXJub2RlX3N0cnVjdHVyZXMoKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIHBh Z2luZyBzeXN0ZW0uCisgKgktIGRldGVybWluZSBzaXplcyBvZiBlYWNoIG5vZGUKKyAqCS0gaW5p dGlhbGl6ZSB0aGUgcGFnaW5nIHN5c3RlbSBmb3IgdGhlIG5vZGUKKyAqCS0gYnVpbGQgdGhlIG5v ZGVkaXIgZm9yIHRoZSBub2RlLiBUaGlzIGNvbnRhaW5zIHBvaW50ZXJzIHRvCisgKgkgIHRoZSBw ZXItYmFuayBtZW1fbWFwIGVudHJpZXMuCisgKgktIGZpeCB0aGUgcGFnZSBzdHJ1Y3QgInZpcnR1 YWwiIHBvaW50ZXJzLiBUaGVzZSBhcmUgYmFuayBzcGVjaWZpYworICoJICB2YWx1ZXMgdGhhdCB0 aGUgcGFnaW5nIHN5c3RlbSBkb2VzbnQgdW5kZXJzdGFuZC4KKyAqCS0gcmVwbGljYXRlIHRoZSBu b2RlZGlyIHN0cnVjdHVyZSB0byBvdGhlciBub2RlcwkKKyAqLyAKKwordm9pZCBfX2luaXQKK2Rp c2NvbnRpZ19wYWdpbmdfaW5pdCh2b2lkKQoreworCWludAkJbm9kZSwgbXlub2RlOworCXVuc2ln bmVkIGxvbmcJbWF4X2RtYSwgem9uZXNfc2l6ZVtNQVhfTlJfWk9ORVNdOworCXVuc2lnbmVkIGxv bmcJa2FkZHIsIGVrYWRkciwgYmlkOworCXN0cnVjdCBwYWdlCSpwYWdlOworCWJvb3RtZW1fZGF0 YV90CSpiZHA7CisKKwltYXhfbWFwbnIgPSAwOworCW1heF9kbWEgPSB2aXJ0X3RvX3BoeXMoKHZv aWQgKikgTUFYX0RNQV9BRERSRVNTKSA+PiBQQUdFX1NISUZUOworCisJbXlub2RlID0gYm9vdF9n ZXRfbG9jYWxfbm9kZWlkKCk7CisJZm9yIChiaWQgPSAwOyBiaWQgPCBOUl9CQU5LUzsgYmlkKysp IHsKKwkJbm9kZV9kYXRhW215bm9kZV0tPm5vZGVfaWRfbWFwW2JpZF0gPSAtMTsKKwkJbm9kZV9k YXRhW215bm9kZV0tPmJhbmtfbWVtX21hcF9iYXNlW2JpZF0gPSBOVUxMOworCX0KKworCWZvciAo bm9kZSA9IDA7IG5vZGUgPCBudW1ub2Rlczsgbm9kZSsrKSB7CisJCWxvbmcgcGZuLCBzdGFydHBm bjsKKworCQltZW1zZXQoem9uZXNfc2l6ZSwgMCwgc2l6ZW9mKHpvbmVzX3NpemUpKTsKKworCQlz dGFydHBmbiA9IC0xOworCQliZHAgPSBCT09UX05PREVfREFUQShub2RlKS0+YmRhdGE7CisJCXBm biA9IGJkcC0+bm9kZV9ib290X3N0YXJ0ID4+IFBBR0VfU0hJRlQ7CisJCWlmIChzdGFydHBmbiA9 PSAtMSkKKwkJCXN0YXJ0cGZuID0gcGZuOworCQlpZiAocGZuID4gbWF4X2RtYSkKKwkJCXpvbmVz X3NpemVbWk9ORV9OT1JNQUxdICs9IChiZHAtPm5vZGVfbG93X3BmbiAtIHBmbik7CisJCWVsc2Ug aWYgKGJkcC0+bm9kZV9sb3dfcGZuIDwgbWF4X2RtYSkKKwkJCXpvbmVzX3NpemVbWk9ORV9ETUFd ICs9IChiZHAtPm5vZGVfbG93X3BmbiAtIHBmbik7CisJCWVsc2UgeworCQkJem9uZXNfc2l6ZVta T05FX0RNQV0gKz0gKG1heF9kbWEgLSBwZm4pOworCQkJem9uZXNfc2l6ZVtaT05FX05PUk1BTF0g Kz0gKGJkcC0+bm9kZV9sb3dfcGZuIC0gbWF4X2RtYSk7CisJCX0KKworCQlmcmVlX2FyZWFfaW5p dF9ub2RlKG5vZGUsIE5PREVfREFUQShub2RlKSwgTlVMTCwgem9uZXNfc2l6ZSwgc3RhcnRwZm48 PFBBR0VfU0hJRlQsIDApOworCisJCXBhZ2UgPSBOT0RFX0RBVEEobm9kZSktPm5vZGVfbWVtX21h cDsKKworCQliZHAgPSBCT09UX05PREVfREFUQShub2RlKS0+YmRhdGE7CisKKwkJa2FkZHIgPSAo dW5zaWduZWQgbG9uZylfX3ZhKGJkcC0+bm9kZV9ib290X3N0YXJ0KTsKKwkJZWthZGRyID0gKHVu c2lnbmVkIGxvbmcpX192YShiZHAtPm5vZGVfbG93X3BmbiA8PCBQQUdFX1NISUZUKTsKKwkJd2hp bGUgKGthZGRyIDwgZWthZGRyKSB7CisJCQlpZiAocGFkZHJfdG9fbmlkKF9fcGEoa2FkZHIpKSA9 PSBub2RlKSB7CisJCQkJYmlkID0gQkFOS19NRU1fTUFQX0lOREVYKGthZGRyKTsKKwkJCQlub2Rl X2RhdGFbbXlub2RlXS0+bm9kZV9pZF9tYXBbYmlkXSA9IG5vZGU7CisJCQkJbm9kZV9kYXRhW215 bm9kZV0tPmJhbmtfbWVtX21hcF9iYXNlW2JpZF0gPSBwYWdlOworCQkJCXByaW50aygiYWRkcigl bHgpLCBiYW5rKCVkKSAtPiBub2RlKCVkKSwgcGFnZSglbHgpXG4iLCBrYWRkciwgYmlkLCBub2Rl LCBwYWdlKTsKKwkJCX0KKwkJCWthZGRyICs9IEJBTktTSVpFOworCQkJcGFnZSArPSBCQU5LU0la RS9QQUdFX1NJWkU7CisJCX0KKwkJbWF4X21hcG5yID0gbWF4KG1heF9tYXBuciwgcGFnZSAtIG1l bV9tYXApOworCX0KKworCS8qCisJICogRmluaXNoIHNldHRpbmcgdXAgdGhlIG5vZGUgZGF0YSBm b3IgdGhpcyBub2RlLCB0aGVuIGNvcHkgaXQgdG8gdGhlIG90aGVyIG5vZGVzLgorCSAqLworCWZv ciAobm9kZT0wOyBub2RlIDwgbnVtbm9kZXM7IG5vZGUrKykKKwkJaWYgKG15bm9kZSAhPSBub2Rl KSB7CisJCQltZW1jcHkobm9kZV9kYXRhW25vZGVdLCBub2RlX2RhdGFbbXlub2RlXSwgc2l6ZW9m KHN0cnVjdCBpYTY0X25vZGVfZGF0YSkpOworCQkJbm9kZV9kYXRhW25vZGVdLT5ub2RlID0gbm9k ZTsKKwkJfQorfQorCmRpZmYgLU51ciBsaW51eC0yLjQuMjAtYmFzZS9hcmNoL2lhNjQvbW0vaW5p dC5jIGxpbnV4LTIuNC4yMC1kY20vYXJjaC9pYTY0L21tL2luaXQuYwotLS0gbGludXgtMi40LjIw LWJhc2UvYXJjaC9pYTY0L21tL2luaXQuYwlNb24gTWFyICAzIDEwOjI0OjIxIDIwMDMKKysrIGxp bnV4LTIuNC4yMC1kY20vYXJjaC9pYTY0L21tL2luaXQuYwlNb24gTWFyICAzIDEwOjU1OjEyIDIw MDMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8 bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgorI2luY2x1ZGUgPGxpbnV4L21t em9uZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4K QEAgLTM4LDcgKzM5LDcgQEAKIHVuc2lnbmVkIGxvbmcgTUFYX0RNQV9BRERSRVNTID0gUEFHRV9P RkZTRVQgKyAweDEwMDAwMDAwMFVMOwogI2RlZmluZSBMQVJHRV9HQVAgMHg0MDAwMDAwMCAvKiBV c2UgdmlydHVhbCBtZW0gbWFwIGlmIGEgaG9sZSBpcyA+IHRoYW4gdGhpcyAqLwogCi1zdGF0aWMg dW5zaWduZWQgbG9uZyB0b3RhbHJhbV9wYWdlczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRvdGFs cmFtX3BhZ2VzLCByZXNlcnZlZF9wYWdlczsKIAogdW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZCA9 IFZNQUxMT0NfRU5EX0lOSVQ7CiAKQEAgLTM1Nyw2ICszNTgsNyBAQAogCWlhNjRfdGxiX2luaXQo KTsKIH0KIAorI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiBzdGF0aWMgaW50CiBjcmVhdGVf bWVtX21hcF9wYWdlX3RhYmxlICh1NjQgc3RhcnQsIHU2NCBlbmQsIHZvaWQgKmFyZykKIHsKQEAg LTQ1Niw2ICs0NTgsNyBAQAogCiAJcmV0dXJuIHBhZ2VfdG9fcGh5cyhlbmQpOwogfQorI2VuZGlm IC8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KIAogc3RhdGljIGludAogY291bnRfZG1hX3BhZ2Vz ICh1NjQgc3RhcnQsIHU2NCBlbmQsIHZvaWQgKmFyZykKQEAgLTQ4NCw3ICs0ODcsNiBAQAogCXJl dHVybiAwOwogfQogCi0jaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KIHN0YXRpYyBpbnQKIGZp bmRfbGFyZ2VzdF9ob2xlKHU2NCBzdGFydCwgdTY0IGVuZCwgdm9pZCAqYXJnKQogewpAQCAtNDk4 LDIwICs1MDAsMjcgQEAKIAlsYXN0X2VuZCA9IGVuZDsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgog CiAvKgogICogU2V0IHVwIHRoZSBwYWdlIHRhYmxlcy4KICAqLworI2lmZGVmIENPTkZJR19ESVND T05USUdNRU0KK3ZvaWQKK3BhZ2luZ19pbml0ICh2b2lkKQoreworCWV4dGVybiB2b2lkIGRpc2Nv bnRpZ19wYWdpbmdfaW5pdCh2b2lkKTsKKworCWRpc2NvbnRpZ19wYWdpbmdfaW5pdCgpOworCWVm aV9tZW1tYXBfd2Fsayhjb3VudF9wYWdlcywgJm51bV9waHlzcGFnZXMpOworfQorI2Vsc2UgLyog IUNPTkZJR19ESVNDT05USUdNRU0gKi8KIHZvaWQKIHBhZ2luZ19pbml0ICh2b2lkKQogewogCXVu c2lnbmVkIGxvbmcgbWF4X2RtYTsKIAl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pP TkVTXTsKIAl1bnNpZ25lZCBsb25nIHpob2xlc19zaXplW01BWF9OUl9aT05FU107Ci0jaWZuZGVm IENPTkZJR19ESVNDT05USUdNRU0KIAl1bnNpZ25lZCBsb25nIG1heF9nYXA7Ci0jZW5kaWYKIAog CS8qIGluaXRpYWxpemUgbWVtX21hcFtdICovCiAKQEAgLTUzOSw5ICs1NDgsNiBAQAogCQl9CiAJ fQogCi0jaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQotCWZyZWVfYXJlYV9pbml0X25vZGUoMCwg TlVMTCwgTlVMTCwgem9uZXNfc2l6ZSwgMCwgemhvbGVzX3NpemUpOwotI2Vsc2UKIAltYXhfZ2Fw ID0gMDsKIAllZmlfbWVtbWFwX3dhbGsoZmluZF9sYXJnZXN0X2hvbGUsICh1NjQgKikmbWF4X2dh cCk7CiAKQEAgLTU2MiwyMCArNTY4LDE5IEBACiAJCWZyZWVfYXJlYV9pbml0X25vZGUoMCwgTlVM TCwgdm1lbV9tYXAsIHpvbmVzX3NpemUsIDAsIHpob2xlc19zaXplKTsKIAkJcHJpbnRrKCJWaXJ0 dWFsIG1lbV9tYXAgc3RhcnRzIGF0IDB4JXBcbiIsIG1lbV9tYXApOwogCX0KLSNlbmRpZgogfQor I2VuZGlmIC8qICFDT05GSUdfRElTQ09OVElHTUVNICovCiAKIHN0YXRpYyBpbnQKLWNvdW50X3Jl c2VydmVkX3BhZ2VzICh1NjQgc3RhcnQsIHU2NCBlbmQsIHZvaWQgKmFyZykKK2NvdW50X3Jlc2Vy dmVkX3BhZ2VzICh1NjQgc3RhcnQsIHU2NCBlbmQpCiB7CiAJdW5zaWduZWQgbG9uZyBudW1fcmVz ZXJ2ZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgKmNvdW50ID0gYXJnOwogCXN0cnVjdCBwYWdlICpw ZzsKIAogCWZvciAocGcgPSB2aXJ0X3RvX3BhZ2UoKHZvaWQgKilzdGFydCk7IHBnIDwgdmlydF90 b19wYWdlKCh2b2lkICopZW5kKTsgKytwZykKIAkJaWYgKFBhZ2VSZXNlcnZlZChwZykpCiAJCQkr K251bV9yZXNlcnZlZDsKLQkqY291bnQgKz0gbnVtX3Jlc2VydmVkOworCXJlc2VydmVkX3BhZ2Vz ICs9IG51bV9yZXNlcnZlZDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTgzLDggKzU4OCwxMSBAQAog bWVtX2luaXQgKHZvaWQpCiB7CiAJZXh0ZXJuIGNoYXIgX19zdGFydF9nYXRlX3NlY3Rpb25bXTsK LQlsb25nIHJlc2VydmVkX3BhZ2VzLCBjb2Rlc2l6ZSwgZGF0YXNpemUsIGluaXRzaXplOworCWxv bmcgY29kZXNpemUsIGRhdGFzaXplLCBpbml0c2l6ZTsKIAl1bnNpZ25lZCBsb25nIG51bV9wZ3Rf cGFnZXM7CisJcGdfZGF0YV90ICpwZ2RhdDsKKwlleHRlcm4gaW50ICBmaWx0ZXJfcnN2ZF9tZW1v cnkgKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB2b2lkICphcmcpOwor CiAKICNpZmRlZiBDT05GSUdfUENJCiAJLyoKQEAgLTU5NSwxNiArNjAzLDE5IEBACiAJcGxhdGZv cm1fcGNpX2RtYV9pbml0KCk7CiAjZW5kaWYKIAorI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVN CiAJaWYgKCFtZW1fbWFwKQogCQlCVUcoKTsKIAogCW1heF9tYXBuciA9IG1heF9sb3dfcGZuOwor I2VuZGlmCiAJaGlnaF9tZW1vcnkgPSBfX3ZhKG1heF9sb3dfcGZuICogUEFHRV9TSVpFKTsKIAot CXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYWxsX2Jvb3RtZW0oKTsKKwlmb3JfZWFjaF9wZ2RhdChw Z2RhdCkKKwkJdG90YWxyYW1fcGFnZXMgKz0gZnJlZV9hbGxfYm9vdG1lbV9ub2RlKHBnZGF0KTsK IAogCXJlc2VydmVkX3BhZ2VzID0gMDsKLQllZmlfbWVtbWFwX3dhbGsoY291bnRfcmVzZXJ2ZWRf cGFnZXMsICZyZXNlcnZlZF9wYWdlcyk7CisJZWZpX21lbW1hcF93YWxrKGZpbHRlcl9yc3ZkX21l bW9yeSwgY291bnRfcmVzZXJ2ZWRfcGFnZXMpOwogCiAJY29kZXNpemUgPSAgKHVuc2lnbmVkIGxv bmcpICZfZXRleHQgLSAodW5zaWduZWQgbG9uZykgJl9zdGV4dDsKIAlkYXRhc2l6ZSA9ICAodW5z aWduZWQgbG9uZykgJl9lZGF0YSAtICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0OwpkaWZmIC1OdXIg bGludXgtMi40LjIwLWJhc2UvYXJjaC9pYTY0L21tL251bWEuYyBsaW51eC0yLjQuMjAtZGNtL2Fy Y2gvaWE2NC9tbS9udW1hLmMKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2FyY2gvaWE2NC9tbS9udW1h LmMJVGh1IEphbiAgMSAwOTowMDowMCAxOTcwCisrKyBsaW51eC0yLjQuMjAtZGNtL2FyY2gvaWE2 NC9tbS9udW1hLmMJTW9uIE1hciAgMyAxMDo1NToxMiAyMDAzCkBAIC0wLDAgKzEsNDYgQEAKKy8q CisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlO RyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0 YWlscy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgTlVNQSBzcGVjaWZpYyB2YXJpYWJsZXMg YW5kIGZ1bmN0aW9ucyB3aGljaCBjYW4KKyAqIGJlIHNwbGl0IGF3YXkgZnJvbSBESVNDT05USUdN RU0gYW5kIGFyZSB1c2VkIG9uIE5VTUEgbWFjaGluZXMgd2l0aAorICogY29udGlndW91cyBtZW1v cnkuCisgKiAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDIvMDgvMDcgRXJpY2ggRm9j aHQgPGVmb2NodEBlc3MubmVjLmRlPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4K KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1 ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8 bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8YXNtL251bWEuaD4KKworLyoKKyAqIFRoZSBmb2xs b3dpbmcgc3RydWN0dXJlcyBhcmUgdXN1YWxseSBpbml0aWFsaXplZCBieSBBQ1BJIG9yCisgKiBz aW1pbGFyIG1lY2hhbmlzbXMgYW5kIGRlc2NyaWJlIHRoZSBOVU1BIGNoYXJhY3RlcmlzdGljcyBv ZiB0aGUgbWFjaGluZS4KKyAqLworaW50IG51bV9tZW1ibGtzID0gMDsKK3N0cnVjdCBub2RlX21l bWJsa19zIG5vZGVfbWVtYmxrW05SX01FTUJMS1NdOworc3RydWN0IG5vZGVfY3B1aWRfcyBub2Rl X2NwdWlkW05SX0NQVVNdOworLyoKKyAqIFRoaXMgaXMgYSBtYXRyaXggd2l0aCAiZGlzdGFuY2Vz IiBiZXR3ZWVuIG5vZGVzLCB0aGV5IHNob3VsZCBiZQorICogcHJvcG9ydGlvbmFsIHRvIHRoZSBt ZW1vcnkgYWNjZXNzIGxhdGVuY3kgcmF0aW9zLgorICovCit1OCBudW1hX3NsaXRbTlJfTk9ERVMg KiBOUl9OT0RFU107CisKKy8qIElkZW50aWZ5IHdoaWNoIGNub2RlIGEgcGh5c2ljYWwgYWRkcmVz cyByZXNpZGVzIG9uICovCitpbnQKK3BhZGRyX3RvX25pZCh1bnNpZ25lZCBsb25nIHBhZGRyKQor eworCWludAlpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9tZW1ibGtzOyBpKyspCisJCWlmIChw YWRkciA+PSBub2RlX21lbWJsa1tpXS5zdGFydF9wYWRkciAmJgorCQkgICAgcGFkZHIgPCBub2Rl X21lbWJsa1tpXS5zdGFydF9wYWRkciArIG5vZGVfbWVtYmxrW2ldLnNpemUpCisJCQlicmVhazsK KworCXJldHVybiAoaSA8IG51bV9tZW1ibGtzKSA/IG5vZGVfbWVtYmxrW2ldLm5pZCA6IC0xOwor fQpkaWZmIC1OdXIgbGludXgtMi40LjIwLWJhc2UvZHJpdmVycy9hY3BpL0NvbmZpZy5pbiBsaW51 eC0yLjQuMjAtZGNtL2RyaXZlcnMvYWNwaS9Db25maWcuaW4KLS0tIGxpbnV4LTIuNC4yMC1iYXNl L2RyaXZlcnMvYWNwaS9Db25maWcuaW4JTW9uIE1hciAgMyAxMDoyNDoyMSAyMDAzCisrKyBsaW51 eC0yLjQuMjAtZGNtL2RyaXZlcnMvYWNwaS9Db25maWcuaW4JTW9uIE1hciAgMyAxMDo1NToxMiAy MDAzCkBAIC0zNiw2ICszNiw5IEBACiAgICAgdHJpc3RhdGUgICAgICcgIEZhbicJCUNPTkZJR19B Q1BJX0ZBTgogICAgIHRyaXN0YXRlICAgICAnICBQcm9jZXNzb3InCQlDT05GSUdfQUNQSV9QUk9D RVNTT1IKICAgICBkZXBfdHJpc3RhdGUgJyAgVGhlcm1hbCBab25lJyBDT05GSUdfQUNQSV9USEVS TUFMICRDT05GSUdfQUNQSV9QUk9DRVNTT1IKKyAgICBpZiBbICIkQ09ORklHX05VTUEiID0gInki IF07IHRoZW4KKyAgICAgIGJvb2wJICcgIE5VTUEgc3VwcG9ydCcgCUNPTkZJR19BQ1BJX05VTUEK KyAgICBmaQogICAgIGJvb2wgICAgICAgICAnICBEZWJ1ZyBTdGF0ZW1lbnRzJyAJQ09ORklHX0FD UElfREVCVUcKICAgZmkKIApAQCAtMTE5LDYgKzEyMiw5IEBACiAgICAgdHJpc3RhdGUgICAgICcg IEZhbicJCUNPTkZJR19BQ1BJX0ZBTgogICAgIHRyaXN0YXRlICAgICAnICBQcm9jZXNzb3InCQlD T05GSUdfQUNQSV9QUk9DRVNTT1IKICAgICBkZXBfdHJpc3RhdGUgJyAgVGhlcm1hbCBab25lJyBD T05GSUdfQUNQSV9USEVSTUFMICRDT05GSUdfQUNQSV9QUk9DRVNTT1IKKyAgICBpZiBbICIkQ09O RklHX05VTUEiID0gInkiIF07IHRoZW4KKyAgICAgIGJvb2wJICcgIE5VTUEgc3VwcG9ydCcgCUNP TkZJR19BQ1BJX05VTUEKKyAgICBmaQogICAgIGJvb2wgICAgICAgICAnICBEZWJ1ZyBTdGF0ZW1l bnRzJyAJQ09ORklHX0FDUElfREVCVUcKICAgICBlbmRtZW51CiAgIGZpCmRpZmYgLU51ciBsaW51 eC0yLjQuMjAtYmFzZS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgbGludXgtMi40LjIwLWRjbS9kcml2 ZXJzL2FjcGkvTWFrZWZpbGUKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2RyaXZlcnMvYWNwaS9NYWtl ZmlsZQlNb24gTWFyICAzIDEwOjI0OjIxIDIwMDMKKysrIGxpbnV4LTIuNC4yMC1kY20vZHJpdmVy cy9hY3BpL01ha2VmaWxlCU1vbiBNYXIgIDMgMTA6NTU6MTIgMjAwMwpAQCAtNTAsNiArNTAsNyBA QAogICBvYmotJChDT05GSUdfQUNQSV9QUk9DRVNTT1IpCSs9IHByb2Nlc3Nvci5vCiAgIG9iai0k KENPTkZJR19BQ1BJX1RIRVJNQUwpCSs9IHRoZXJtYWwubwogICBvYmotJChDT05GSUdfQUNQSV9T WVNURU0pCSs9IHN5c3RlbS5vCitvYmotJChDT05GSUdfQUNQSV9OVU1BKSAgICAgICAgICs9IG51 bWEubwogZW5kaWYKIAogaW5jbHVkZSAkKFRPUERJUikvUnVsZXMubWFrZQpkaWZmIC1OdXIgbGlu dXgtMi40LjIwLWJhc2UvZHJpdmVycy9hY3BpL251bWEuYyBsaW51eC0yLjQuMjAtZGNtL2RyaXZl cnMvYWNwaS9udW1hLmMKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2RyaXZlcnMvYWNwaS9udW1hLmMJ VGh1IEphbiAgMSAwOTowMDowMCAxOTcwCisrKyBsaW51eC0yLjQuMjAtZGNtL2RyaXZlcnMvYWNw aS9udW1hLmMJTW9uIE1hciAgMyAxMDo1NToxMiAyMDAzCkBAIC0wLDAgKzEsMTg2IEBACisvKgor ICogIGFjcGlfbnVtYS5jIC0gQUNQSSBOVU1BIHN1cHBvcnQKKyAqCisgKiAgQ29weXJpZ2h0IChD KSAyMDAyIFRha2F5b3NoaSBLb2NoaSA8dC1rb3VjaGlAY3EuanAubmVjLmNvbT4KKyAqCisgKiB+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEg IDAyMTExLTEzMDcgIFVTQQorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICovCisKKyNp bmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxs aW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlICJhY3BpX2J1 cy5oIgorCitleHRlcm4gaW50IF9faW5pdCBhY3BpX3RhYmxlX3BhcnNlX21hZHRfZmFtaWx5IChl bnVtIGFjcGlfdGFibGVfaWQgaWQsIHVuc2lnbmVkIGxvbmcgbWFkdF9zaXplLCBpbnQgZW50cnlf aWQsIGFjcGlfbWFkdF9lbnRyeV9oYW5kbGVyIGhhbmRsZXIpOworCit2b2lkIF9faW5pdAorYWNw aV90YWJsZV9wcmludF9zcmF0X2VudHJ5ICgKKwlhY3BpX3RhYmxlX2VudHJ5X2hlYWRlcgkqaGVh ZGVyKQoreworCWlmICghaGVhZGVyKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGhlYWRlci0+dHlw ZSkgeworCisJY2FzZSBBQ1BJX1NSQVRfUFJPQ0VTU09SX0FGRklOSVRZOgorCXsKKwkJc3RydWN0 IGFjcGlfdGFibGVfcHJvY2Vzc29yX2FmZmluaXR5ICpwID0KKwkJCShzdHJ1Y3QgYWNwaV90YWJs ZV9wcm9jZXNzb3JfYWZmaW5pdHkqKSBoZWFkZXI7CisJCXByaW50ayhLRVJOX0lORk8gIlNSQVQg UHJvY2Vzc29yIChpZFsweCUwMnhdIGVpZFsweCUwMnhdKSBpbiBwcm94aW1pdHkgZG9tYWluICVk ICVzXG4iLAorCQkgICAgICAgcC0+YXBpY19pZCwgcC0+bHNhcGljX2VpZCwgcC0+cHJveGltaXR5 X2RvbWFpbiwKKwkJICAgICAgIHAtPmZsYWdzLmVuYWJsZWQ/ImVuYWJsZWQiOiJkaXNhYmxlZCIp OworCX0KKwkJYnJlYWs7CisKKwljYXNlIEFDUElfU1JBVF9NRU1PUllfQUZGSU5JVFk6CisJewor CQlzdHJ1Y3QgYWNwaV90YWJsZV9tZW1vcnlfYWZmaW5pdHkgKnAgPQorCQkJKHN0cnVjdCBhY3Bp X3RhYmxlX21lbW9yeV9hZmZpbml0eSopIGhlYWRlcjsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU1JB VCBNZW1vcnkgKDB4JTA4eCUwOHggbGVuZ3RoIDB4JTA4eCUwOHggdHlwZSAweCV4KSBpbiBwcm94 aW1pdHkgZG9tYWluICVkICVzJXNcbiIsCisJCSAgICAgICBwLT5iYXNlX2FkZHJfaGksIHAtPmJh c2VfYWRkcl9sbywgcC0+bGVuZ3RoX2hpLCBwLT5sZW5ndGhfbG8sCisJCSAgICAgICBwLT5tZW1v cnlfdHlwZSwgcC0+cHJveGltaXR5X2RvbWFpbiwKKwkJICAgICAgIHAtPmZsYWdzLmVuYWJsZWQg PyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAorCQkgICAgICAgcC0+ZmxhZ3MuaG90X3BsdWdnYWJs ZSA/ICIgaG90LXBsdWdnYWJsZSIgOiAiIik7CisJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJ CXByaW50ayhLRVJOX1dBUk5JTkcgIkZvdW5kIHVuc3VwcG9ydGVkIFNSQVQgZW50cnkgKHR5cGUg PSAweCV4KVxuIiwKKwkJCWhlYWRlci0+dHlwZSk7CisJCWJyZWFrOworCX0KK30KKworCitzdGF0 aWMgaW50IF9faW5pdAorYWNwaV9wYXJzZV9zbGl0ICh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwg dW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBhY3BpX3RhYmxlX3NsaXQJKnNsaXQ7CisJ dTMyCQkJbG9jYWxpdGllczsKKworCWlmICghcGh5c19hZGRyIHx8ICFzaXplKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCXNsaXQgPSAoc3RydWN0IGFjcGlfdGFibGVfc2xpdCAqKSBfX3ZhKHBoeXNf YWRkcik7CisKKwkvKiBkb3duY2FzdCBqdXN0IGZvciAlbGx1IHZzICVsdSBmb3IgaTM4Ni9pYTY0 ICAqLworCWxvY2FsaXRpZXMgPSAodTMyKSBzbGl0LT5sb2NhbGl0aWVzOworCisJcHJpbnRrKEtF Uk5fSU5GTyAiU0xJVCBsb2NhbGl0aWVzICV1eCV1XG4iLCBsb2NhbGl0aWVzLCBsb2NhbGl0aWVz KTsKKworCWFjcGlfbnVtYV9zbGl0X2luaXQoc2xpdCk7CisKKwlyZXR1cm4gMDsKK30KKworCitz dGF0aWMgaW50IF9faW5pdAorYWNwaV9wYXJzZV9wcm9jZXNzb3JfYWZmaW5pdHkgKGFjcGlfdGFi bGVfZW50cnlfaGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IGFjcGlfdGFibGVfcHJvY2Vzc29y X2FmZmluaXR5ICpwcm9jZXNzb3JfYWZmaW5pdHkgPSBOVUxMOworCisJcHJvY2Vzc29yX2FmZmlu aXR5ID0gKHN0cnVjdCBhY3BpX3RhYmxlX3Byb2Nlc3Nvcl9hZmZpbml0eSopIGhlYWRlcjsKKwlp ZiAoIXByb2Nlc3Nvcl9hZmZpbml0eSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhY3BpX3RhYmxl X3ByaW50X3NyYXRfZW50cnkoaGVhZGVyKTsKKworCS8qIGxldCBhcmNoaXRlY3R1cmUtZGVwZW5k ZW50IHBhcnQgdG8gZG8gaXQgKi8KKwlhY3BpX251bWFfcHJvY2Vzc29yX2FmZmluaXR5X2luaXQo cHJvY2Vzc29yX2FmZmluaXR5KTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgX19p bml0CithY3BpX3BhcnNlX21lbW9yeV9hZmZpbml0eSAoYWNwaV90YWJsZV9lbnRyeV9oZWFkZXIg KmhlYWRlcikKK3sKKwlzdHJ1Y3QgYWNwaV90YWJsZV9tZW1vcnlfYWZmaW5pdHkgKm1lbW9yeV9h ZmZpbml0eSA9IE5VTEw7CisKKwltZW1vcnlfYWZmaW5pdHkgPSAoc3RydWN0IGFjcGlfdGFibGVf bWVtb3J5X2FmZmluaXR5KikgaGVhZGVyOworCWlmICghbWVtb3J5X2FmZmluaXR5KQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCWFjcGlfdGFibGVfcHJpbnRfc3JhdF9lbnRyeShoZWFkZXIpOworCisJ LyogbGV0IGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydCB0byBkbyBpdCAqLworCWFjcGlfbnVt YV9tZW1vcnlfYWZmaW5pdHlfaW5pdChtZW1vcnlfYWZmaW5pdHkpOworCisJcmV0dXJuIDA7Cit9 CisKKworc3RhdGljIGludCBfX2luaXQKK2FjcGlfcGFyc2Vfc3JhdCAodW5zaWduZWQgbG9uZyBw aHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgYWNwaV90YWJsZV9zcmF0 CSpzcmF0ID0gTlVMTDsKKworCWlmICghcGh5c19hZGRyIHx8ICFzaXplKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCXNyYXQgPSAoc3RydWN0IGFjcGlfdGFibGVfc3JhdCAqKSBfX3ZhKHBoeXNfYWRk cik7CisKKwlwcmludGsoS0VSTl9JTkZPICJTUkFUIHJldmlzaW9uICVkXG4iLCBzcmF0LT50YWJs ZV9yZXZpc2lvbik7CisKKwlyZXR1cm4gMDsKK30KKworCitpbnQgX19pbml0CithY3BpX3RhYmxl X3BhcnNlX3NyYXQgKAorCWVudW0gYWNwaV9zcmF0X2VudHJ5X2lkCWlkLAorCWFjcGlfbWFkdF9l bnRyeV9oYW5kbGVyCWhhbmRsZXIpCit7CisJcmV0dXJuIGFjcGlfdGFibGVfcGFyc2VfbWFkdF9m YW1pbHkoQUNQSV9TUkFULCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfc3JhdCksCisJCQkJCSAg ICBpZCwgaGFuZGxlcik7Cit9CisKKworaW50IF9faW5pdAorYWNwaV9udW1hX2luaXQoKQorewor CWludAkJCXJlc3VsdDsKKworCS8qIFNSQVQ6IFN0YXRpYyBSZXNvdXJjZSBBZmZpbml0eSBUYWJs ZSAqLworCXJlc3VsdCA9IGFjcGlfdGFibGVfcGFyc2UoQUNQSV9TUkFULCBhY3BpX3BhcnNlX3Ny YXQpOworCisJaWYgKHJlc3VsdCA+IDApIHsKKwkJcmVzdWx0ID0gYWNwaV90YWJsZV9wYXJzZV9z cmF0KEFDUElfU1JBVF9QUk9DRVNTT1JfQUZGSU5JVFksCisJCQkJCSAgICAgICBhY3BpX3BhcnNl X3Byb2Nlc3Nvcl9hZmZpbml0eSk7CisJCXJlc3VsdCA9IGFjcGlfdGFibGVfcGFyc2Vfc3JhdChB Q1BJX1NSQVRfTUVNT1JZX0FGRklOSVRZLAorCQkJCQkgICAgICAgYWNwaV9wYXJzZV9tZW1vcnlf YWZmaW5pdHkpOworCX0gZWxzZSB7CisJCS8qIEZJWE1FICovCisJCXByaW50aygiV2FybmluZzog YWNwaV90YWJsZV9wYXJzZShBQ1BJX1NSQVQpIHJldHVybmVkICVkIVxuIixyZXN1bHQpOworCX0K KworCS8qIFNMSVQ6IFN5c3RlbSBMb2NhbGl0eSBJbmZvcm1hdGlvbiBUYWJsZSAqLworCXJlc3Vs dCA9IGFjcGlfdGFibGVfcGFyc2UoQUNQSV9TTElULCBhY3BpX3BhcnNlX3NsaXQpOworCWlmIChy ZXN1bHQgPCAxKSB7CisJCS8qIEZJWE1FICovCisJCXByaW50aygiV2FybmluZzogYWNwaV90YWJs ZV9wYXJzZShBQ1BJX1NMSVQpIHJldHVybmVkICVkIVxuIixyZXN1bHQpOworCX0KKworCWFjcGlf bnVtYV9hcmNoX2ZpeHVwKCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLU51ciBsaW51eC0yLjQuMjAt YmFzZS9kcml2ZXJzL2FjcGkvdGFibGVzLmMgbGludXgtMi40LjIwLWRjbS9kcml2ZXJzL2FjcGkv dGFibGVzLmMKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2RyaXZlcnMvYWNwaS90YWJsZXMuYwlNb24g TWFyICAzIDEwOjI0OjIyIDIwMDMKKysrIGxpbnV4LTIuNC4yMC1kY20vZHJpdmVycy9hY3BpL3Rh Ymxlcy5jCU1vbiBNYXIgIDMgMTA6NTU6MTIgMjAwMwpAQCAtMjI0LDExICsyMjQsMTMgQEAKIAog CiBpbnQgX19pbml0Ci1hY3BpX3RhYmxlX3BhcnNlX21hZHQgKAorYWNwaV90YWJsZV9wYXJzZV9t YWR0X2ZhbWlseSAoCiAJZW51bSBhY3BpX3RhYmxlX2lkCWlkLAorCXVuc2lnbmVkIGxvbmcJCW1h ZHRfc2l6ZSwKKwlpbnQJCQllbnRyeV9pZCwKIAlhY3BpX21hZHRfZW50cnlfaGFuZGxlcgloYW5k bGVyKQogewotCXN0cnVjdCBhY3BpX3RhYmxlX21hZHQJKm1hZHQgPSBOVUxMOworCXZvaWQJCQkq bWFkdCA9IE5VTEw7CiAJYWNwaV90YWJsZV9lbnRyeV9oZWFkZXIJKmVudHJ5ID0gTlVMTDsKIAl1 bnNpZ25lZCBsb25nCQljb3VudCA9IDA7CiAJdW5zaWduZWQgbG9uZwkJbWFkdF9lbmQgPSAwOwpA QCAtMjQwLDE5ICsyNDIsMjEgQEAKIAkvKiBMb2NhdGUgdGhlIE1BRFQgKGlmIGV4aXN0cykuIFRo ZXJlIHNob3VsZCBvbmx5IGJlIG9uZS4gKi8KIAogCWZvciAoaSA9IDA7IGkgPCBzZHQuY291bnQ7 IGkrKykgewotCQlpZiAoc2R0LmVudHJ5W2ldLmlkICE9IEFDUElfQVBJQykKKwkJaWYgKHNkdC5l bnRyeVtpXS5pZCAhPSBpZCkKIAkJCWNvbnRpbnVlOwotCQltYWR0ID0gKHN0cnVjdCBhY3BpX3Rh YmxlX21hZHQgKikKKwkJbWFkdCA9ICh2b2lkICopCiAJCQlfX2FjcGlfbWFwX3RhYmxlKHNkdC5l bnRyeVtpXS5wYSwgc2R0LmVudHJ5W2ldLnNpemUpOwogCQlpZiAoIW1hZHQpIHsKLQkJCXByaW50 ayhLRVJOX1dBUk5JTkcgUFJFRklYICJVbmFibGUgdG8gbWFwIE1BRFRcbiIpOworCQkJcHJpbnRr KEtFUk5fV0FSTklORyBQUkVGSVggIlVuYWJsZSB0byBtYXAgJXNcbiIsCisJCQkgICAgICAgYWNw aV90YWJsZV9zaWduYXR1cmVzW2lkXSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCQlicmVh azsKIAl9CiAKIAlpZiAoIW1hZHQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIk1B RFQgbm90IHByZXNlbnRcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiJXMgbm90 IHByZXNlbnRcbiIsCisJCSAgICAgICBhY3BpX3RhYmxlX3NpZ25hdHVyZXNbaWRdKTsKIAkJcmV0 dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0yNjEsMTggKzI2NSwyOCBAQAogCS8qIFBhcnNlIGFsbCBl bnRyaWVzIGxvb2tpbmcgZm9yIGEgbWF0Y2guICovCiAKIAllbnRyeSA9IChhY3BpX3RhYmxlX2Vu dHJ5X2hlYWRlciAqKQotCQkoKHVuc2lnbmVkIGxvbmcpIG1hZHQgKyBzaXplb2Yoc3RydWN0IGFj cGlfdGFibGVfbWFkdCkpOworCQkoKHVuc2lnbmVkIGxvbmcpIG1hZHQgKyBtYWR0X3NpemUpOwog CiAJd2hpbGUgKCgodW5zaWduZWQgbG9uZykgZW50cnkpIDwgbWFkdF9lbmQpIHsKLQkJaWYgKGVu dHJ5LT50eXBlID09IGlkKSB7CisJCWlmIChlbnRyeS0+dHlwZSA9PSBlbnRyeV9pZCkgewogCQkJ Y291bnQrKzsKIAkJCWhhbmRsZXIoZW50cnkpOwogCQl9CiAJCWVudHJ5ID0gKGFjcGlfdGFibGVf ZW50cnlfaGVhZGVyICopCi0JCQkoKHVuc2lnbmVkIGxvbmcpIGVudHJ5ICs9IGVudHJ5LT5sZW5n dGgpOworCQkJKCh1bnNpZ25lZCBsb25nKSBlbnRyeSArIGVudHJ5LT5sZW5ndGgpOwogCX0KIAog CXJldHVybiBjb3VudDsKK30KKworCitpbnQgX19pbml0CithY3BpX3RhYmxlX3BhcnNlX21hZHQg KAorCWVudW0gYWNwaV9tYWR0X2VudHJ5X2lkCWlkLAorCWFjcGlfbWFkdF9lbnRyeV9oYW5kbGVy CWhhbmRsZXIpCit7CisJcmV0dXJuIGFjcGlfdGFibGVfcGFyc2VfbWFkdF9mYW1pbHkoQUNQSV9B UElDLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfbWFkdCksCisJCQkJCSAgICBpZCwgaGFuZGxl cik7CiB9CiAKIApkaWZmIC1OdXIgbGludXgtMi40LjIwLWJhc2UvaW5jbHVkZS9hc20taWE2NC9h Y3BpLmggbGludXgtMi40LjIwLWRjbS9pbmNsdWRlL2FzbS1pYTY0L2FjcGkuaAotLS0gbGludXgt Mi40LjIwLWJhc2UvaW5jbHVkZS9hc20taWE2NC9hY3BpLmgJTW9uIE1hciAgMyAxMDoyNDoyMyAy MDAzCisrKyBsaW51eC0yLjQuMjAtZGNtL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oCVR1ZSBNYXIg IDQgMTc6NDA6MDQgMjAwMwpAQCAtOTcsMTcgKzk3LDE4IEBACiAJfSB3aGlsZSAoMCkKIAogY29u c3QgY2hhciAqYWNwaV9nZXRfc3lzbmFtZSAodm9pZCk7Ci1pbnQgYWNwaV9ib290X2luaXQgKGNo YXIgKmNkbGluZSk7CiBpbnQgYWNwaV9yZXF1ZXN0X3ZlY3RvciAodTMyIGludF90eXBlKTsKIGlu dCBhY3BpX2dldF9wcnQgKHN0cnVjdCBwY2lfdmVjdG9yX3N0cnVjdCAqKnZlY3RvcnMsIGludCAq Y291bnQpOwogaW50IGFjcGlfZ2V0X2ludGVycnVwdF9tb2RlbCAoaW50ICp0eXBlKTsKIGludCBh Y3BpX2lycV90b192ZWN0b3IgKHUzMiBpcnEpOwogCi0jaWZkZWYgQ09ORklHX0RJU0NPTlRJR01F TQotI2RlZmluZSBOT0RFX0FSUkFZX0lOREVYKHgpCSgoeCkgLyA4KQkvKiA4IGJpdHMvY2hhciAq LwotI2RlZmluZSBOT0RFX0FSUkFZX09GRlNFVCh4KQkoKHgpICUgOCkJLyogOCBiaXRzL2NoYXIg Ki8KLSNkZWZpbmUgTUFYX1BYTV9ET01BSU5TCQkoMjU2KQotI2VuZGlmIC8qIENPTkZJR19ESVND T05USUdNRU0gKi8KKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCisjaW5jbHVkZSA8YXNtL251bWEu aD4KKy8qIFByb3hpbWl0eSBiaXRtYXAgbGVuZ3RoOyBfUFhNIGlzIGF0IG1vc3QgMjU1ICg4IGJp dCkqLworI2RlZmluZSBNQVhfUFhNX0RPTUFJTlMgKDI1NikKK2V4dGVybiBpbnQgX19pbml0ZGF0 YSBweG1fdG9fbmlkX21hcFtNQVhfUFhNX0RPTUFJTlNdOworZXh0ZXJuIGludCBfX2luaXRkYXRh IG5pZF90b19weG1fbWFwW05SX05PREVTXTsKKyNlbmRpZgogCiAjZW5kaWYgLypfX0tFUk5FTF9f Ki8KIApkaWZmIC1OdXIgbGludXgtMi40LjIwLWJhc2UvaW5jbHVkZS9hc20taWE2NC9tbXpvbmUu aCBsaW51eC0yLjQuMjAtZGNtL2luY2x1ZGUvYXNtLWlhNjQvbW16b25lLmgKLS0tIGxpbnV4LTIu NC4yMC1iYXNlL2luY2x1ZGUvYXNtLWlhNjQvbW16b25lLmgJVGh1IEphbiAgMSAwOTowMDowMCAx OTcwCisrKyBsaW51eC0yLjQuMjAtZGNtL2luY2x1ZGUvYXNtLWlhNjQvbW16b25lLmgJVHVlIE1h ciAgNCAxNzo0MDowNCAyMDAzCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogVGhpcyBmaWxlIGlz IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRp cmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTkVDIENvcnAuCisgKiBDb3B5cmlnaHQgKGMpIDIw MDIgRXJpY2ggRm9jaHQgPGVmb2NodEBlc3MubmVjLmRlPgorICogQ29weXJpZ2h0IChjKSAyMDAy IEtpbWlvIFN1Z2FudW1hIDxrLXN1Z2FudW1hQGRhLmpwLm5lYy5jb20+CisgKi8KKyNpZm5kZWYg X0FTTV9JQTY0X01NWk9ORV9ICisjZGVmaW5lIF9BU01fSUE2NF9NTVpPTkVfSAorCisjaW5jbHVk ZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisvKgorICogR2l2 ZW4gYSBrYWRkciwgZmluZCB0aGUgYmFzZSBtZW1fbWFwIGFkZHJlc3MgZm9yIHRoZSBzdGFydCBv ZiB0aGUgbWVtX21hcAorICogZW50cmllcyBmb3IgdGhlIGJhbmsgY29udGFpbmluZyB0aGUga2Fk ZHIuCisgKi8KKyNkZWZpbmUgQkFOS19NRU1fTUFQX0JBU0Uoa2FkZHIpIGxvY2FsX25vZGVfZGF0 YS0+YmFua19tZW1fbWFwX2Jhc2VbQkFOS19NRU1fTUFQX0lOREVYKGthZGRyKV0KKworLyoKKyAq IEdpdmVuIGEga2FkZHIsIHRoaXMgbWFjcm8gcmV0dXJuIHRoZSByZWxhdGl2ZSBtYXAgbnVtYmVy IAorICogd2l0aGluIHRoZSBiYW5rLgorICovCisjZGVmaW5lIEJBTktfTUFQX05SKGthZGRyKSAJ KEJBTktfT0ZGU0VUKGthZGRyKSA+PiBQQUdFX1NISUZUKQorCisvKgorICogR2l2ZW4gYSBwdGUs IHRoaXMgbWFjcm8gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHBhZ2Ugc3RydWN0IGZvciB0aGUg cHRlLgorICovCisjZGVmaW5lIHB0ZV9wYWdlKHB0ZSkJdmlydF90b19wYWdlKFBBR0VfT0ZGU0VU IHwgKHB0ZV92YWwocHRlKSZfUEZOX01BU0spKQorCisvKgorICogRGV0ZXJtaW5lIGlmIGEga2Fk ZHIgaXMgYSB2YWxpZCBtZW1vcnkgYWRkcmVzcyBvZiBtZW1vcnkgdGhhdAorICogYWN0dWFsbHkg ZXhpc3RzLiAKKyAqCisgKiBUaGUgY2hlY2sgY29uc2lzdHMgb2YgMiBwYXJ0czoKKyAqCS0gdmVy aWZ5IHRoYXQgdGhlIGFkZHJlc3MgaXMgYSByZWdpb24gNyBhZGRyZXNzICYgZG9lcyBub3QgCisg KgkgIGNvbnRhaW4gYW55IGJpdHMgdGhhdCBwcmVjbHVkZSBpdCBmcm9tIGJlaW5nIGEgdmFsaWQg cGxhdGZvcm0KKyAqCSAgbWVtb3J5IGFkZHJlc3MKKyAqCS0gdmVyaWZ5IHRoYXQgdGhlIGNodW5r IGFjdHVhbGx5IGV4aXN0cy4KKyAqCisgKiBOb3RlIHRoYXQgSU8gYWRkcmVzc2VzIGFyZSBOT1Qg Y29uc2lkZXJlZCB2YWxpZCBhZGRyZXNzZXMuCisgKgorICogTm90ZSwgbWFueSBwbGF0Zm9ybXMg Y2FuIHNpbXBseSBjaGVjayBpZiBrYWRkciBleGNlZWRzIGEgc3BlY2lmaWMgc2l6ZS4gIAorICoJ KEhvd2V2ZXIsIHRoaXMgd29udCB3b3JrIG9uIFNHSSBwbGF0Zm9ybXMgc2luY2UgSU8gc3BhY2Ug aXMgZW1iZWRkZWQgCisgKiAJd2l0aGluIHRoZSByYW5nZSBvZiB2YWxpZCBtZW1vcnkgYWRkcmVz c2VzICYgbm9kZXMgaGF2ZSBob2xlcyBpbiB0aGUgCisgKglhZGRyZXNzIHJhbmdlIGJldHdlZW4g YmFua3MpLiAKKyAqLworI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoa2FkZHIpCQkoe2xvbmcgX2th dj0obG9uZykoa2FkZHIpOwlcCisJCQkJCVZBTElEX01FTV9LQUREUihfa2F2KTt9KQorCisvKgor ICogR2l2ZW4gYSBrYWRkciwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcGFnZSBzdHJ1Y3QgZm9y IHRoZSBwYWdlLgorICogSWYgdGhlIGthZGRyIGRvZXMgbm90IHJlcHJlc2VudCBSQU0gbWVtb3J5 IHRoYXQgcG90ZW50aWFsbHkgZXhpc3RzLCByZXR1cm4KKyAqIGEgcG9pbnRlciB0aGUgcGFnZSBz dHJ1Y3QgZm9yIG1heF9tYXBuci4gSU8gYWRkcmVzc2VzIHdpbGwKKyAqIHJldHVybiB0aGUgcGFn ZSBmb3IgbWF4X25yLiBBZGRyZXNzZXMgaW4gdW5wb3B1bGF0ZWQgUkFNIGJhbmtzIG1heQorICog cmV0dXJuIHVuZGVmaW5lZCByZXN1bHRzIE9SIG1heSBwYW5pYyB0aGUgc3lzdGVtLgorICoKKyAq LworI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCSh7bG9uZyBfa3Z0cD0obG9uZykoa2FkZHIp OwlcCisJCQkJKFZBTElEX01FTV9LQUREUihfa3Z0cCkpCVwKKwkJCQkJPyBCQU5LX01FTV9NQVBf QkFTRShfa3Z0cCkgKyBCQU5LX01BUF9OUihfa3Z0cCkJXAorCQkJCQk6IE5VTEw7fSkKKworLyoK KyAqIEdpdmVuIGEgcGFnZSBzdHJ1Y3QgZW50cnksIHJldHVybiB0aGUgcGh5c2ljYWwgYWRkcmVz cyB0aGF0IHRoZSBwYWdlIHN0cnVjdCByZXByZXNlbnRzLgorICogU2luY2UgSUE2NCBoYXMgYWxs IG1lbW9yeSBpbiB0aGUgRE1BIHpvbmUsIHRoZSBmb2xsb3dpbmcgd29ya3M6CisgKi8KKyNkZWZp bmUgcGFnZV90b19waHlzKHBhZ2UpCV9fcGEocGFnZV9hZGRyZXNzKHBhZ2UpKQorCisjZGVmaW5l IG5vZGVfbWVtX21hcChuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9tZW1fbWFwKQorCisjZGVm aW5lIG5vZGVfbG9jYWxucihwZm4sIG5pZCkJKChwZm4pIC0gTk9ERV9EQVRBKG5pZCktPm5vZGVf c3RhcnRfcGZuKQorCisjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJKHN0cnVjdCBwYWdlICopKG5v ZGVfbWVtX21hcChwZm5fdG9fbmlkKHBmbikpICsgbm9kZV9sb2NhbG5yKHBmbiwgcGZuX3RvX25p ZChwZm4pKSkKKworI2RlZmluZSBwZm5fdG9fbmlkKHBmbikJCSBsb2NhbF9ub2RlX2RhdGEtPm5v ZGVfaWRfbWFwWyhwZm4gPDwgUEFHRV9TSElGVCkgPj4gRElHX0JBTktTSElGVF0KKworI2RlZmlu ZSBwYWdlX3RvX3BmbihwYWdlKQkobG9uZykoKHBhZ2UgLSBwYWdlX3pvbmUocGFnZSktPnpvbmVf bWVtX21hcCkgKyBwYWdlX3pvbmUocGFnZSktPnpvbmVfc3RhcnRfcGZuKQorCisKKy8qCisgKiBw Zm5fdmFsaWQgc2hvdWxkIGJlIG1hZGUgYXMgZmFzdCBhcyBwb3NzaWJsZSwgYW5kIHRoZSBjdXJy ZW50IGRlZmluaXRpb24KKyAqIGlzIHZhbGlkIGZvciBtYWNoaW5lcyB0aGF0IGFyZSBOVU1BLCBi dXQgc3RpbGwgY29udGlndW91cywgd2hpY2ggaXMgd2hhdAorICogaXMgY3VycmVudGx5IHN1cHBv cnRlZC4gQSBtb3JlIGdlbmVyYWxpc2VkLCBidXQgc2xvd2VyIGRlZmluaXRpb24gd291bGQKKyAq IGJlIHNvbWV0aGluZyBsaWtlIHRoaXMgLSBtYmxpZ2g6CisgKiAoIHBmbl90b19wZ2RhdChwZm4p ICYmIChwZm4gPCBub2RlX2VuZF9wZm4ocGZuX3RvX25pZChwZm4pKSkgKQorICovCisjZGVmaW5l IHBmbl92YWxpZChwZm4pICAgICAgICAgIChwZm4gPCBtYXhfbG93X3BmbikKK2V4dGVybiB1bnNp Z25lZCBsb25nIG1heF9sb3dfcGZuOworCisKKyNpZmRlZiBDT05GSUdfTlVNQQorCisvKgorICog UGxhdGZvcm0gZGVmaW5pdGlvbnMgZm9yIERJRyBwbGF0Zm9ybSB3aXRoIGNvbnRpZ3VvdXMgbWVt b3J5LgorICovCisjZGVmaW5lIE1BWF9QSFlTTk9ERV9JRAk4CS8qIE1heGltdW0gbm9kZSBudW1i ZXIgKzEgKi8KKyNkZWZpbmUgTlJfTk9ERVMJOAkvKiBNYXhpbXVtIG51bWJlciBvZiBub2RlcyBp biBTU0kgKi8KKworI2RlZmluZSBNQVhfUEhZU19NRU1PUlkJKDFVTCA8PCA0MCkJLyogMSBUQiAq LworCisvKgorICogQmFuayBkZWZpbml0aW9ucy4KKyAqIENvbmZpZ3VyYWJsZSBzZXR0aW5ncyBm b3IgRElHOiA1MTJNQi9iYW5rOiAgMTZHQi9ub2RlLAorICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMjA0OE1CL2Jhbms6ICA2NEdCL25vZGUsCisgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA4MTkyTUIvYmFuazogMjU2R0Ivbm9kZS4KKyAqLworI2RlZmluZSBOUl9CQU5L U19QRVJfTk9ERQkzMgorI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfTk9ERVNJWkVfMTZHQikKKyMg ZGVmaW5lIERJR19CQU5LU0hJRlQJCTI5CisjZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0X05PREVT SVpFXzY0R0IpCisjIGRlZmluZSBESUdfQkFOS1NISUZUCQkzMQorI2VsaWYgZGVmaW5lZChDT05G SUdfSUE2NF9OT0RFU0laRV8yNTZHQikKKyMgZGVmaW5lIERJR19CQU5LU0hJRlQJCTMzCisjZWxz ZQorIyBlcnJvciBVbnN1cHBvcnRlZCBiYW5rIGFuZCBub2Rlc2l6ZSEKKyNlbmRpZgorI2RlZmlu ZSBCQU5LU0laRQkJKDFVTCA8PCBESUdfQkFOS1NISUZUKQorI2RlZmluZSBCQU5LX09GRlNFVChh ZGRyKQkoKHVuc2lnbmVkIGxvbmcpKGFkZHIpICYgKEJBTktTSVpFLTEpKQorI2RlZmluZSBOUl9C QU5LUwkJKE5SX0JBTktTX1BFUl9OT0RFICogTlJfTk9ERVMpCisKKy8qCisgKiBWQUxJRF9NRU1f S0FERFIgcmV0dXJucyBhIGJvb2xlYW4gdG8gaW5kaWNhdGUgaWYgYSBrYWRkciBpcworICogcG90 ZW50aWFsbHkgYSB2YWxpZCBjYWNoZWFibGUgaWRlbnRpdHkgbWFwcGVkIFJBTSBtZW1vcnkgYWRk cmVzcy4KKyAqIE5vdGUgdGhhdCB0aGUgUkFNIG1heSBvciBtYXkgbm90IGFjdHVhbGx5IGJlIHBy ZXNlbnQhIQorICovCisgI2RlZmluZSBWQUxJRF9NRU1fS0FERFIoa2FkZHIpCTEKKy8qICNkZWZp bmUgVkFMSURfTUVNX0tBRERSKGthZGRyKQkoQkFOS19NRU1fTUFQX0JBU0Uoa2FkZHIpID09IE5V TEwgPyBOVUxMIDogMSkgKi8KKworLyoKKyAqIEdpdmVuIGEgbm9kZWlkICYgYSBiYW5rIG51bWJl ciwgZmluZCB0aGUgYWRkcmVzcyBvZiB0aGUgbWVtX21hcAorICogZW50cnkgZm9yIHRoZSBmaXJz dCBwYWdlIG9mIHRoZSBiYW5rLgorICovCisjZGVmaW5lIEJBTktfTUVNX01BUF9JTkRFWChrYWRk cikgXAorCSgoKHVuc2lnbmVkIGxvbmcpKGthZGRyKSAmIChNQVhfUEhZU19NRU1PUlktMSkpID4+ IERJR19CQU5LU0hJRlQpCisKKyNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLworI2VuZGlmIC8qIF9B U01fSUE2NF9NTVpPTkVfSCAqLwpkaWZmIC1OdXIgbGludXgtMi40LjIwLWJhc2UvaW5jbHVkZS9h c20taWE2NC9ub2RlZGF0YS5oIGxpbnV4LTIuNC4yMC1kY20vaW5jbHVkZS9hc20taWE2NC9ub2Rl ZGF0YS5oCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9pbmNsdWRlL2FzbS1pYTY0L25vZGVkYXRhLmgJ VGh1IEphbiAgMSAwOTowMDowMCAxOTcwCisrKyBsaW51eC0yLjQuMjAtZGNtL2luY2x1ZGUvYXNt LWlhNjQvbm9kZWRhdGEuaAlUdWUgTWFyICA0IDE3OjQwOjA0IDIwMDMKQEAgLTAsMCArMSw3NSBA QAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJD T1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJ bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAyIE5FQyBDb3Jw LgorICogQ29weXJpZ2h0IChjKSAyMDAyIEVyaWNoIEZvY2h0IDxlZm9jaHRAZXNzLm5lYy5kZT4K KyAqIENvcHlyaWdodCAoYykgMjAwMiBLaW1pbyBTdWdhbnVtYSA8ay1zdWdhbnVtYUBkYS5qcC5u ZWMuY29tPgorICovCisKKworI2lmbmRlZiBfQVNNX0lBNjRfTk9ERURBVEFfSAorI2RlZmluZSBf QVNNX0lBNjRfTk9ERURBVEFfSAorCisKKyNpbmNsdWRlIDxhc20vbW16b25lLmg+CisKKy8qCisg KiBOb2RlIERhdGEuIE9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGlzIGxvY2F0ZWQgb24gZWFjaCBu b2RlIG9mIGEgTlVNQSBzeXN0ZW0uCisgKi8KKworc3RydWN0IHBnbGlzdF9kYXRhOworc3RydWN0 IGlhNjRfbm9kZV9kYXRhIHsKKwlzaG9ydAkJCW5vZGU7CisgICAgICAgIHN0cnVjdCBwZ2xpc3Rf ZGF0YQkqcGdfZGF0YV9wdHJzW05SX05PREVTXTsKKwlzdHJ1Y3QgcGFnZQkJKmJhbmtfbWVtX21h cF9iYXNlW05SX0JBTktTXTsKKwlzdHJ1Y3QgaWE2NF9ub2RlX2RhdGEJKm5vZGVfZGF0YV9wdHJz W05SX05PREVTXTsKKwlzaG9ydAkJCW5vZGVfaWRfbWFwW05SX0JBTktTXTsKK307CisKKworLyoK KyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5vZGVfZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBl eGVjdXRpbmcgY3B1LgorICovCisjZGVmaW5lIGxvY2FsX25vZGVfZGF0YQkJKGxvY2FsX2NwdV9k YXRhLT5ub2RlX2RhdGEpCisKKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5vZGVf ZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzcGVjaWZpZWQgbm9kZS4KKyAqLworI2RlZmluZSBub2Rl X2RhdGEobm9kZSkJKGxvY2FsX25vZGVfZGF0YS0+bm9kZV9kYXRhX3B0cnNbbm9kZV0pCisKKy8q CisgKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBub2RlX2lkL25vZGVfZGF0YSBmb3IgdGhlIGN1cnJl bnQgY3B1LgorICogICAgKGJvb3QgdGltZSBvbmx5KQorICovCitleHRlcm4gaW50IGJvb3RfZ2V0 X2xvY2FsX25vZGVpZCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgaWE2NF9ub2RlX2RhdGEgKmdldF9u b2RlX2RhdGFfcHRyKHZvaWQpOworCisvKgorICogR2l2ZW4gYSBub2RlIGlkLCByZXR1cm4gYSBw b2ludGVyIHRvIHRoZSBwZ19kYXRhX3QgZm9yIHRoZSBub2RlLgorICogVGhlIGZvbGxvd2luZyAy IG1hY3JvcyBhcmUgc2ltaWxhci4gCisgKgorICogTk9ERV9EQVRBIAktIHNob3VsZCBiZSB1c2Vk IGluIGFsbCBjb2RlIG5vdCByZWxhdGVkIHRvIHN5c3RlbQorICoJCSAgaW5pdGlhbGl6YXRpb24u IEl0IHVzZXMgcGVybm9kZSBkYXRhIHN0cnVjdHVyZXMgdG8gbWluaW1pemUKKyAqCQkgIG9mZm5v ZGUgbWVtb3J5IHJlZmVyZW5jZXMuIEhvd2V2ZXIsIHRoZXNlIHN0cnVjdHVyZSBhcmUgbm90IAor ICoJCSAgcHJlc2VudCBkdXJpbmcgYm9vdC4gVGhpcyBtYWNybyBjYW4gYmUgdXNlZCBvbmNlIGNw dV9pbml0CisgKgkJICBjb21wbGV0ZXMuCisgKgorICogQk9PVF9OT0RFX0RBVEEKKyAqCQktIHNo b3VsZCBiZSB1c2VkIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24gCisgKgkJICBwcmlvciB0 byBmcmVlaW5nIF9faW5pdGRhdGEuIEl0IGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgcGVyY3B1Cisg KgkJICBhcmVhIGJlaW5nIHByZXNlbnQuCisgKgorICogTk9URTogICBUaGUgbmFtZXMgb2YgdGhl c2UgbWFjcm9zIGFyZSBtaXNsZWFkaW5nIGJ1dCBhcmUgZGlmZmljdWx0IHRvIGNoYW5nZQorICoJ ICAgc2luY2UgdGhleSBhcmUgdXNlZCBpbiBnZW5lcmljIGxpbnV4ICYgb24gb3RoZXIgYXJjaGl0 ZWN1cmVzLgorICovCisjZGVmaW5lIE5PREVfREFUQShuaWQpCQkobG9jYWxfbm9kZV9kYXRhLT5w Z19kYXRhX3B0cnNbbmlkXSkKKyNkZWZpbmUgQk9PVF9OT0RFX0RBVEEobmlkKQlib290X2dldF9w Z19kYXRhX3B0cigobG9uZykobmlkKSkKKworc3RydWN0IHBnbGlzdF9kYXRhOworZXh0ZXJuIHN0 cnVjdCBwZ2xpc3RfZGF0YSAqIF9faW5pdCBib290X2dldF9wZ19kYXRhX3B0cihsb25nKTsKKwor I2VuZGlmIC8qIF9BU01fSUE2NF9OT0RFREFUQV9IICovCmRpZmYgLU51ciBsaW51eC0yLjQuMjAt YmFzZS9pbmNsdWRlL2FzbS1pYTY0L251bWEuaCBsaW51eC0yLjQuMjAtZGNtL2luY2x1ZGUvYXNt LWlhNjQvbnVtYS5oCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9pbmNsdWRlL2FzbS1pYTY0L251bWEu aAlUaHUgSmFuICAxIDA5OjAwOjAwIDE5NzAKKysrIGxpbnV4LTIuNC4yMC1kY20vaW5jbHVkZS9h c20taWE2NC9udW1hLmgJVHVlIE1hciAgNCAxNzo0MDowNCAyMDAzCkBAIC0wLDAgKzEsNzAgQEAK Ky8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09Q WUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgTlVNQSBzcGVjaWZpYyBwcm90b3R5 cGVzIGFuZCBkZWZpbml0aW9ucy4KKyAqIAorICogMjAwMi8wOC8wNSBFcmljaCBGb2NodCA8ZWZv Y2h0QGVzcy5uZWMuZGU+CisgKgorICovCisjaWZuZGVmIF9BU01fSUE2NF9OVU1BX0gKKyNkZWZp bmUgX0FTTV9JQTY0X05VTUFfSAorCisjaWZkZWYgQ09ORklHX05VTUEKKworI2lmZGVmIENPTkZJ R19ESVNDT05USUdNRU0KKyMgaW5jbHVkZSA8YXNtL21tem9uZS5oPgorIyBkZWZpbmUgTlJfTUVN QkxLUyAgIChOUl9CQU5LUykKKyNlbHNlCisjIGRlZmluZSBOUl9OT0RFUyAgICAgKDgpCisjIGRl ZmluZSBOUl9NRU1CTEtTICAgKE5SX05PREVTICogOCkKKyNlbmRpZgorCisjaW5jbHVkZSA8bGlu dXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CitleHRlcm4gdm9sYXRpbGUg Y2hhciBjcHVfdG9fbm9kZV9tYXBbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKK2V4dGVy biB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG5vZGVfdG9fY3B1X21hc2tbTlJfTk9ERVNdIF9fY2Fj aGVsaW5lX2FsaWduZWQ7CisKKy8qIFN0dWZmIGJlbG93IHRoaXMgbGluZSBjb3VsZCBiZSBhcmNo aXRlY3R1cmUgaW5kZXBlbmRlbnQgKi8KKworZXh0ZXJuIGludCBudW1fbWVtYmxrczsJCS8qIHRv dGFsIG51bWJlciBvZiBtZW1vcnkgY2h1bmtzICovCisKKy8qCisgKiBMaXN0IG9mIG5vZGUgbWVt b3J5IGNodW5rcy4gRmlsbGVkIHdoZW4gcGFyc2luZyBTUkFUIHRhYmxlIHRvCisgKiBvYnRhaW4g aW5mb3JtYXRpb24gYWJvdXQgbWVtb3J5IG5vZGVzLgorKi8KKworc3RydWN0IG5vZGVfbWVtYmxr X3MgeworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFkZHI7CisJdW5zaWduZWQgbG9uZyBzaXplOwor CWludCBuaWQ7CQkvKiB3aGljaCBsb2dpY2FsIG5vZGUgY29udGFpbnMgdGhpcyBjaHVuaz8gKi8K KwlpbnQgYmFuazsJCS8qIHdoaWNoIG1lbSBiYW5rIG9uIHRoaXMgbm9kZSAqLworfTsKKworc3Ry dWN0IG5vZGVfY3B1aWRfcyB7CisJdTE2CXBoeXNfaWQ7CS8qIGlkIDw8IDggfCBlaWQgKi8KKwlp bnQJbmlkOwkJLyogbG9naWNhbCBub2RlIGNvbnRhaW5pbmcgdGhpcyBDUFUgKi8KK307CisKK2V4 dGVybiBzdHJ1Y3Qgbm9kZV9tZW1ibGtfcyBub2RlX21lbWJsa1tOUl9NRU1CTEtTXTsKK2V4dGVy biBzdHJ1Y3Qgbm9kZV9jcHVpZF9zIG5vZGVfY3B1aWRbTlJfQ1BVU107CisKKy8qCisgKiBBQ1BJ IDIuMCBTTElUIChTeXN0ZW0gTG9jYWxpdHkgSW5mb3JtYXRpb24gVGFibGUpCisgKiBodHRwOi8v ZGV2cmVzb3VyY2UuaHAuY29tL2RldnJlc291cmNlL0RvY3MvVGVjaFBhcGVycy9JQTY0L3NsaXQu cGRmCisgKgorICogVGhpcyBpcyBhIG1hdHJpeCB3aXRoICJkaXN0YW5jZXMiIGJldHdlZW4gbm9k ZXMsIHRoZXkgc2hvdWxkIGJlCisgKiBwcm9wb3J0aW9uYWwgdG8gdGhlIG1lbW9yeSBhY2Nlc3Mg bGF0ZW5jeSByYXRpb3MuCisgKi8KKworZXh0ZXJuIHU4IG51bWFfc2xpdFtOUl9OT0RFUyAqIE5S X05PREVTXTsKKyNkZWZpbmUgbm9kZV9kaXN0YW5jZShmcm9tLHRvKSAobnVtYV9zbGl0W2Zyb20g KiBudW1ub2RlcyArIHRvXSkKKworZXh0ZXJuIGludCBwYWRkcl90b19uaWQodW5zaWduZWQgbG9u ZyBwYWRkcik7CisKKyNkZWZpbmUgbG9jYWxfbm9kZWlkIChjcHVfdG9fbm9kZV9tYXBbc21wX3By b2Nlc3Nvcl9pZCgpXSkKKworI2VuZGlmIC8qIENPTkZJR19OVU1BICovCisKKyNlbmRpZiAvKiBf QVNNX0lBNjRfTlVNQV9IICovCmRpZmYgLU51ciBsaW51eC0yLjQuMjAtYmFzZS9pbmNsdWRlL2Fz bS1pYTY0L251bW5vZGVzLmggbGludXgtMi40LjIwLWRjbS9pbmNsdWRlL2FzbS1pYTY0L251bW5v ZGVzLmgKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2luY2x1ZGUvYXNtLWlhNjQvbnVtbm9kZXMuaAlU aHUgSmFuICAxIDA5OjAwOjAwIDE5NzAKKysrIGxpbnV4LTIuNC4yMC1kY20vaW5jbHVkZS9hc20t aWE2NC9udW1ub2Rlcy5oCVR1ZSBNYXIgIDQgMTc6NDA6MDQgMjAwMwpAQCAtMCwwICsxLDcgQEAK KyNpZm5kZWYgX0FTTV9NQVhfTlVNTk9ERVNfSAorI2RlZmluZSBfQVNNX01BWF9OVU1OT0RFU19I CisKKyNpbmNsdWRlIDxhc20vbW16b25lLmg+CisjZGVmaW5lIE1BWF9OVU1OT0RFUwlOUl9OT0RF UworCisjZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC1OdXIgbGludXgtMi40 LjIwLWJhc2UvaW5jbHVkZS9hc20taWE2NC9wYWdlLmggbGludXgtMi40LjIwLWRjbS9pbmNsdWRl L2FzbS1pYTY0L3BhZ2UuaAotLS0gbGludXgtMi40LjIwLWJhc2UvaW5jbHVkZS9hc20taWE2NC9w YWdlLmgJTW9uIE1hciAgMyAxMDoyNDoyMyAyMDAzCisrKyBsaW51eC0yLjQuMjAtZGNtL2luY2x1 ZGUvYXNtLWlhNjQvcGFnZS5oCVR1ZSBNYXIgIDQgMTc6NDA6MDQgMjAwMwpAQCAtNTYsMTYgKzU2 LDEwIEBACiAjIGluY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjIGRlZmluZSB2aXJ0X3RvX3BhZ2Uo a2FkZHIpCShtZW1fbWFwICsgcGxhdGZvcm1fbWFwX25yKGthZGRyKSkKICMgZGVmaW5lIHBhZ2Vf dG9fcGh5cyhwYWdlKQkoKHBhZ2UgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKQotI2VsaWYgZGVm aW5lZCAoQ09ORklHX0lBNjRfU0dJX1NOMSkKLSMgaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0K LSMgIGRlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCShtZW1fbWFwICsgTUFQX05SX0RFTlNFKGth ZGRyKSkKLSMgIGRlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJWFhYIGZpeCBtZQotIyBlbmRpZgot I2Vsc2UKKyNlbGlmICFkZWZpbmVkIChDT05GSUdfRElTQ09OVElHTUVNKQogIyBkZWZpbmUgdmly dF90b19wYWdlKGthZGRyKQkobWVtX21hcCArIE1BUF9OUl9ERU5TRShrYWRkcikpCiAjIGRlZmlu ZSBwYWdlX3RvX3BoeXMocGFnZSkJKChwYWdlIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkKICNl bmRpZgotCiBzdHJ1Y3QgcGFnZTsKIGV4dGVybiBpbnQgaWE2NF9wYWdlX3ZhbGlkIChzdHJ1Y3Qg cGFnZSAqKTsKICNkZWZpbmUgVkFMSURfUEFHRShwYWdlKQkoKChwYWdlIC0gbWVtX21hcCkgPCBt YXhfbWFwbnIpICYmIGlhNjRfcGFnZV92YWxpZChwYWdlKSkKZGlmZiAtTnVyIGxpbnV4LTIuNC4y MC1iYXNlL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oIGxpbnV4LTIuNC4yMC1kY20vaW5jbHVk ZS9hc20taWE2NC9wZ3RhYmxlLmgKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2luY2x1ZGUvYXNtLWlh NjQvcGd0YWJsZS5oCU1vbiBNYXIgIDMgMTA6MjQ6MjMgMjAwMworKysgbGludXgtMi40LjIwLWRj bS9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaAlUdWUgTWFyICA0IDE3OjQwOjA3IDIwMDMKQEAg LTIwNiw2ICsyMDYsMTUgQEAKICAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFn ZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCiAgKiBhbmQgYSBwYWdlIGVudHJ5IGFu ZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgogICovCisjaWZkZWYg Q09ORklHX0RJU0NPTlRJR01FTQorI2RlZmluZSBta19wdGUocGFnZSxwZ3Byb3QpCQkJCQkJCVwK Kyh7CQkJCQkJCQkJCVwKKwlwdGVfdCBfX3B0ZTsJCQkJCQkJCVwKKwkJCQkJCQkJCQlcCisJcHRl X3ZhbChfX3B0ZSkgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSkgLSBQQUdFX09G RlNFVCArIHBncHJvdF92YWwocGdwcm90KTsJXAorCV9fcHRlOwkJCQkJCQkJCVwKK30pCisjZWxz ZQogI2RlZmluZSBta19wdGUocGFnZSxwZ3Byb3QpCQkJCQkJCVwKICh7CQkJCQkJCQkJCVwKIAlw dGVfdCBfX3B0ZTsJCQkJCQkJCVwKQEAgLTIxMyw2ICsyMjIsNyBAQAogCXB0ZV92YWwoX19wdGUp ID0gKChwYWdlIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHBncHJvdCk7 CVwKIAlfX3B0ZTsJCQkJCQkJCQlcCiB9KQorI2VuZGlmCiAKIC8qIFRoaXMgdGFrZXMgYSBwaHlz aWNhbCBwYWdlIGFkZHJlc3MgdGhhdCBpcyB1c2VkIGJ5IHRoZSByZW1hcHBpbmcgZnVuY3Rpb25z ICovCiAjZGVmaW5lIG1rX3B0ZV9waHlzKHBoeXNwYWdlLCBwZ3Byb3QpIFwKQEAgLTQ0MCw2ICs0 NTAsNyBAQAogICovCiAjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAo MCkKIAorI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiAvKiBhcmNoIG1lbV9tYXAgaW5pdCBy b3V0aW5lcyBhcmUgbmVlZGVkIGR1ZSB0byBob2xlcyBpbiBhIHZpcnR1YWwgbWVtX21hcCAqLwog I2RlZmluZSBIQVZFX0FSQ0hfTUVNTUFQX0lOSVQKIApAQCAtNDQ5LDcgKzQ2MCw3IEBACiBleHRl cm4gdW5zaWduZWQgbG9uZyBhcmNoX21lbW1hcF9pbml0IChtZW1tYXBfaW5pdF9jYWxsYmFja190 ICpjYWxsYmFjaywKIAlzdHJ1Y3QgcGFnZSAqc3RhcnQsIHN0cnVjdCBwYWdlICplbmQsIGludCB6 b25lLAogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFkZHIsIGludCBoaWdobWVtKTsKLQorI2VuZGlm IC8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KICMgZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwog CiAvKgpkaWZmIC1OdXIgbGludXgtMi40LjIwLWJhc2UvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNz b3IuaCBsaW51eC0yLjQuMjAtZGNtL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgKLS0tIGxp bnV4LTIuNC4yMC1iYXNlL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgJTW9uIE1hciAgMyAx MDoyNDoyMyAyMDAzCisrKyBsaW51eC0yLjQuMjAtZGNtL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vz c29yLmgJVHVlIE1hciAgNCAxNzo0MDowNCAyMDAzCkBAIC04Nyw2ICs4Nyw5IEBACiAjaW5jbHVk ZSA8YXNtL3JzZS5oPgogI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KICNpbmNsdWRlIDxhc20vYXRv bWljLmg+CisjaWZkZWYgQ09ORklHX05VTUEKKyNpbmNsdWRlIDxhc20vbm9kZWRhdGEuaD4KKyNl bmRpZgogCiAvKiBsaWtlIGFib3ZlIGJ1dCBleHByZXNzZWQgYXMgYml0ZmllbGRzIGZvciBtb3Jl IGVmZmljaWVudCBhY2Nlc3M6ICovCiBzdHJ1Y3QgaWE2NF9wc3IgewpAQCAtMTg3LDkgKzE5MCw4 IEBACiAJfSBpcGk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTlVNQQotCXZvaWQgKm5vZGVfZGly ZWN0b3J5OwotCWludCBudW1hX25vZGVfaWQ7Ci0Jc3RydWN0IGNwdWluZm9faWE2NCAqY3B1X2Rh dGFbTlJfQ1BVU107CisJc3RydWN0IGlhNjRfbm9kZV9kYXRhICpub2RlX2RhdGE7CisJaW50IG5v ZGVpZDsKICNlbmRpZgogCS8qIFBsYXRmb3JtIHNwZWNpZmljIHdvcmQuICBNVVNUIEJFIExBU1Qg SU4gU1RSVUNUICovCiAJX191NjQgcGxhdGZvcm1fc3BlY2lmaWM7CkBAIC0yMDEsMjMgKzIwMywx MiBAQAogICovCiAjZGVmaW5lIGxvY2FsX2NwdV9kYXRhCQkoKHN0cnVjdCBjcHVpbmZvX2lhNjQg KikgUEVSQ1BVX0FERFIpCiAKLS8qCi0gKiBPbiBOVU1BIHN5c3RlbXMsIGNwdV9kYXRhIGZvciBl YWNoIGNwdSBpcyBhbGxvY2F0ZWQgZHVyaW5nIGNwdV9pbml0KCkgJiBpcyBhbGxvY2F0ZWQgb24K LSAqIHRoZSBub2RlIHRoYXQgY29udGFpbnMgdGhlIGNwdS4gVGhpcyBtaW5pbWl6ZXMgb2ZmLW5v ZGUgbWVtb3J5IHJlZmVyZW5jZXMuICBjcHVfZGF0YQotICogZm9yIGVhY2ggY3B1IGNvbnRhaW5z IGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZSBjcHVfZGF0YSBzdHJ1Y3R1cmVzIG9mIGVhY2gg b2YgdGhlCi0gKiBvdGhlciBjcHVzLgotICoKLSAqIE9uIG5vbi1OVU1BIHN5c3RlbXMsIGNwdV9k YXRhIGlzIGEgc3RhdGljIGFycmF5IGFsbG9jYXRlZCBhdCBjb21waWxlIHRpbWUuICBSZWZlcmVu Y2VzCi0gKiB0byB0aGUgY3B1X2RhdGEgb2YgYW5vdGhlciBjcHUgaXMgZG9uZSBieSBkaXJlY3Qg cmVmZXJlbmNlcyB0byB0aGUgYXBwcm9wcmlhdGUgZW50cnkgb2YKLSAqIHRoZSBhcnJheS4KLSAq LwogI2lmZGVmIENPTkZJR19OVU1BCi0jIGRlZmluZSBjcHVfZGF0YShjcHUpCQlsb2NhbF9jcHVf ZGF0YS0+Y3B1X2RhdGFbY3B1XQotIyBkZWZpbmUgbnVtYV9ub2RlX2lkKCkJCShsb2NhbF9jcHVf ZGF0YS0+bnVtYV9ub2RlX2lkKQotI2Vsc2UKLSAgZXh0ZXJuIHN0cnVjdCBjcHVpbmZvX2lhNjQg X2NwdV9kYXRhW05SX0NQVVNdOwotIyBkZWZpbmUgY3B1X2RhdGEoY3B1KQkJKCZfY3B1X2RhdGFb Y3B1XSkKKyNkZWZpbmUgbnVtYV9ub2RlX2lkKCkJCShsb2NhbF9jcHVfZGF0YS0+bm9kZWlkKQog I2VuZGlmCisKK2V4dGVybiBzdHJ1Y3QgY3B1aW5mb19pYTY0CV9jcHVfZGF0YVtOUl9DUFVTXTsK KyNkZWZpbmUgY3B1X2RhdGEoY3B1KQkJKCZfY3B1X2RhdGFbY3B1XSkKIAogZXh0ZXJuIHZvaWQg aWRlbnRpZnlfY3B1IChzdHJ1Y3QgY3B1aW5mb19pYTY0ICopOwogZXh0ZXJuIHZvaWQgcHJpbnRf Y3B1X2luZm8gKHN0cnVjdCBjcHVpbmZvX2lhNjQgKik7CmRpZmYgLU51ciBsaW51eC0yLjQuMjAt YmFzZS9pbmNsdWRlL2FzbS1pYTY0L3RvcG9sb2d5LmggbGludXgtMi40LjIwLWRjbS9pbmNsdWRl L2FzbS1pYTY0L3RvcG9sb2d5LmgKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2luY2x1ZGUvYXNtLWlh NjQvdG9wb2xvZ3kuaAlUaHUgSmFuICAxIDA5OjAwOjAwIDE5NzAKKysrIGxpbnV4LTIuNC4yMC1k Y20vaW5jbHVkZS9hc20taWE2NC90b3BvbG9neS5oCVR1ZSBNYXIgIDQgMTc6NDA6MDQgMjAwMwpA QCAtMCwwICsxLDYzIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20taWE2NC90b3BvbG9neS5o CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBFcmljaCBGb2NodCwgTkVDCisgKgorICogQWxs IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAq IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisj aWZuZGVmIF9BU01fSUE2NF9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fSUE2NF9UT1BPTE9HWV9I CisKKyNpbmNsdWRlIDxhc20vYWNwaS5oPgorI2luY2x1ZGUgPGFzbS9udW1hLmg+CisjaW5jbHVk ZSA8YXNtL3NtcC5oPgorCisjaWZkZWYgQ09ORklHX05VTUEKKy8qCisgKiBSZXR1cm5zIHRoZSBu dW1iZXIgb2YgdGhlIG5vZGUgY29udGFpbmluZyBDUFUgJ2NwdScKKyAqLworI2RlZmluZSBfX2Nw dV90b19ub2RlKGNwdSkgKGludCkoY3B1X3RvX25vZGVfbWFwW2NwdV0pCisKKy8qCisgKiBSZXR1 cm5zIGEgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLgorICovCisjZGVmaW5lIF9fbm9k ZV90b19jcHVfbWFzayhub2RlKSAobm9kZV90b19jcHVfbWFza1tub2RlXSkKKworI2Vsc2UKKyNk ZWZpbmUgX19jcHVfdG9fbm9kZShjcHUpICgwKQorI2RlZmluZSBfX25vZGVfdG9fY3B1X21hc2so bm9kZSkgKHBoeXNfY3B1X3ByZXNlbnRfbWFwKQorI2VuZGlmCisKKy8qCisgKiBSZXR1cm5zIHRo ZSBudW1iZXIgb2YgdGhlIG5vZGUgY29udGFpbmluZyBNZW1CbGsgJ21lbWJsaycKKyAqLworI2lm ZGVmIENPTkZJR19BQ1BJX05VTUEKKyNkZWZpbmUgX19tZW1ibGtfdG9fbm9kZShtZW1ibGspIChu b2RlX21lbWJsa1ttZW1ibGtdLm5pZCkKKyNlbHNlCisjZGVmaW5lIF9fbWVtYmxrX3RvX25vZGUo bWVtYmxrKSAobWVtYmxrKQorI2VuZGlmCisKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg dGhlIG5vZGUgY29udGFpbmluZyBOb2RlICduaWQnLgorICogTm90IGltcGxlbWVudGVkIGhlcmUu IE11bHRpLWxldmVsIGhpZXJhcmNoaWVzIGRldGVjdGVkIHdpdGgKKyAqIHRoZSBoZWxwIG9mIG5v ZGVfZGlzdGFuY2UoKS4KKyAqLworI2RlZmluZSBfX3BhcmVudF9ub2RlKG5pZCkgKG5pZCkKKwor LyoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgZmlyc3QgQ1BVIG9uIE5vZGUgJ25vZGUn LgorICovCisjZGVmaW5lIF9fbm9kZV90b19maXJzdF9jcHUobm9kZSkgKF9fZmZzKF9fbm9kZV90 b19jcHVfbWFzayhub2RlKSkpCisKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGZp cnN0IE1lbUJsayBvbiBOb2RlICdub2RlJworICogU2hvdWxkIGJlIGZpeGVkIHdoZW4gSUE2NCBk aXNjb250aWdtZW0gZ29lcyBpbi4KKyAqLworI2RlZmluZSBfX25vZGVfdG9fbWVtYmxrKG5vZGUp IChub2RlKQorCisjZW5kaWYgLyogX0FTTV9JQTY0X1RPUE9MT0dZX0ggKi8KZGlmZiAtTnVyIGxp bnV4LTIuNC4yMC1iYXNlL2luY2x1ZGUvbGludXgvbW16b25lLmggbGludXgtMi40LjIwLWRjbS9p bmNsdWRlL2xpbnV4L21tem9uZS5oCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9pbmNsdWRlL2xpbnV4 L21tem9uZS5oCU1vbiBNYXIgIDMgMTA6MjQ6MjMgMjAwMworKysgbGludXgtMi40LjIwLWRjbS9p bmNsdWRlL2xpbnV4L21tem9uZS5oCVR1ZSBNYXIgIDQgMTc6NDA6MDQgMjAwMwpAQCAtOCw2ICs4 LDEyIEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9saXN0 Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0K KyNpbmNsdWRlIDxhc20vbnVtbm9kZXMuaD4KKyNlbmRpZgorI2lmbmRlZiBNQVhfTlVNTk9ERVMK KyNkZWZpbmUgTUFYX05VTU5PREVTIDEKKyNlbmRpZgogCiAvKgogICogRnJlZSBtZW1vcnkgbWFu YWdlbWVudCAtIHpvbmVkIGJ1ZGR5IGFsbG9jYXRvci4KQEAgLTIxMiw2ICsyMTgsMTUgQEAKICNk ZWZpbmUgZm9yX2VhY2hfem9uZSh6b25lKSBcCiAJZm9yKHpvbmUgPSBwZ2RhdF9saXN0LT5ub2Rl X3pvbmVzOyB6b25lOyB6b25lID0gbmV4dF96b25lKHpvbmUpKQogCisjaWZkZWYgQ09ORklHX05V TUEKKyNkZWZpbmUgTUFYX05SX01FTUJMS1MgIEJJVFNfUEVSX0xPTkcgLyogTWF4IG51bWJlciBv ZiBNZW1vcnkgQmxvY2tzICovCisjZWxzZSAvKiAhQ09ORklHX05VTUEgKi8KKyNkZWZpbmUgTUFY X05SX01FTUJMS1MgIDEKKyNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLworCisjaW5jbHVkZSA8YXNt L3RvcG9sb2d5Lmg+CisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgTm9kZS4g Ki8KKyNkZWZpbmUgbnVtYV9ub2RlX2lkKCkgICAgICAgICAgKF9fY3B1X3RvX25vZGUoc21wX3By b2Nlc3Nvcl9pZCgpKSkKIAogI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiAKZGlmZiAtTnVy IGxpbnV4LTIuNC4yMC1iYXNlL2luaXQvbWFpbi5jIGxpbnV4LTIuNC4yMC1kY20vaW5pdC9tYWlu LmMKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2luaXQvbWFpbi5jCU1vbiBNYXIgIDMgMTA6MjQ6MjMg MjAwMworKysgbGludXgtMi40LjIwLWRjbS9pbml0L21haW4uYwlNb24gTWFyICAzIDEwOjU1OjEy IDIwMDMKQEAgLTM2MCw2ICszNjAsNyBAQAogCWxvY2tfa2VybmVsKCk7CiAJcHJpbnRrKGxpbnV4 X2Jhbm5lcik7CiAJc2V0dXBfYXJjaCgmY29tbWFuZF9saW5lKTsKKwlidWlsZF9hbGxfem9uZWxp c3RzKCk7CiAJcHJpbnRrKCJLZXJuZWwgY29tbWFuZCBsaW5lOiAlc1xuIiwgc2F2ZWRfY29tbWFu ZF9saW5lKTsKIAlwYXJzZV9vcHRpb25zKGNvbW1hbmRfbGluZSk7CiAJdHJhcF9pbml0KCk7CmRp ZmYgLU51ciBsaW51eC0yLjQuMjAtYmFzZS9tbS9wYWdlX2FsbG9jLmMgbGludXgtMi40LjIwLWRj bS9tbS9wYWdlX2FsbG9jLmMKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL21tL3BhZ2VfYWxsb2MuYwlN b24gTWFyICAzIDEwOjI0OjIzIDIwMDMKKysrIGxpbnV4LTIuNC4yMC1kY20vbW0vcGFnZV9hbGxv Yy5jCU1vbiBNYXIgIDMgMTA6NTU6MTIgMjAwMwpAQCAtNTg2LDEzICs1ODYsNDEgQEAKIC8qCiAg KiBCdWlsZHMgYWxsb2NhdGlvbiBmYWxsYmFjayB6b25lIGxpc3RzLgogICovCi1zdGF0aWMgaW5s aW5lIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpCitzdGF0aWMgaW50IF9f aW5pdCBidWlsZF96b25lbGlzdHNfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCB6b25lbGlzdF90ICp6 b25lbGlzdCwgaW50IGosIGludCBrKQogewotCWludCBpLCBqLCBrOworCXN3aXRjaCAoaykgewor CQl6b25lX3QgKnpvbmU7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJY2FzZSBaT05FX0hJR0hNRU06 CisJCXpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIFpPTkVfSElHSE1FTTsKKwkJaWYgKHpvbmUt Pm1lbXNpemUpIHsKKyNpZm5kZWYgQ09ORklHX0hJR0hNRU0KKwkJCUJVRygpOworI2VuZGlmCisJ CQl6b25lbGlzdC0+em9uZXNbaisrXSA9IHpvbmU7CisJCX0KKwljYXNlIFpPTkVfTk9STUFMOgor CQl6b25lID0gcGdkYXQtPm5vZGVfem9uZXMgKyBaT05FX05PUk1BTDsKKwkJaWYgKHpvbmUtPm1l bXNpemUpCisJCQl6b25lbGlzdC0+em9uZXNbaisrXSA9IHpvbmU7CisJY2FzZSBaT05FX0RNQToK KwkJem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzICsgWk9ORV9ETUE7CisJCWlmICh6b25lLT5tZW1z aXplKQorCQkJem9uZWxpc3QtPnpvbmVzW2orK10gPSB6b25lOworCX0KIAorCXJldHVybiBqOwor fQorCitzdGF0aWMgdm9pZCBfX2luaXQgYnVpbGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQp Cit7CisJaW50IGksIGosIGssIG5vZGUsIGxvY2FsX25vZGU7CisKKwlsb2NhbF9ub2RlID0gcGdk YXQtPm5vZGVfaWQ7CisJcHJpbnRrKCJCdWlsZGluZyB6b25lbGlzdCBmb3Igbm9kZSA6ICVkXG4i LCBsb2NhbF9ub2RlKTsKIAlmb3IgKGkgPSAwOyBpIDw9IEdGUF9aT05FTUFTSzsgaSsrKSB7CiAJ CXpvbmVsaXN0X3QgKnpvbmVsaXN0OwotCQl6b25lX3QgKnpvbmU7CiAKIAkJem9uZWxpc3QgPSBw Z2RhdC0+bm9kZV96b25lbGlzdHMgKyBpOwogCQltZW1zZXQoem9uZWxpc3QsIDAsIHNpemVvZigq em9uZWxpc3QpKTsKQEAgLTYwNCwzMSArNjMyLDMwIEBACiAJCWlmIChpICYgX19HRlBfRE1BKQog CQkJayA9IFpPTkVfRE1BOwogCi0JCXN3aXRjaCAoaykgewotCQkJZGVmYXVsdDoKLQkJCQlCVUco KTsKLQkJCS8qCi0JCQkgKiBmYWxsdGhyb3VnaDoKLQkJCSAqLwotCQkJY2FzZSBaT05FX0hJR0hN RU06Ci0JCQkJem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzICsgWk9ORV9ISUdITUVNOwotCQkJCWlm ICh6b25lLT5tZW1zaXplKSB7Ci0jaWZuZGVmIENPTkZJR19ISUdITUVNCi0JCQkJCUJVRygpOwot I2VuZGlmCi0JCQkJCXpvbmVsaXN0LT56b25lc1tqKytdID0gem9uZTsKLQkJCQl9Ci0JCQljYXNl IFpPTkVfTk9STUFMOgotCQkJCXpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIFpPTkVfTk9STUFM OwotCQkJCWlmICh6b25lLT5tZW1zaXplKQotCQkJCQl6b25lbGlzdC0+em9uZXNbaisrXSA9IHpv bmU7Ci0JCQljYXNlIFpPTkVfRE1BOgotCQkJCXpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIFpP TkVfRE1BOwotCQkJCWlmICh6b25lLT5tZW1zaXplKQotCQkJCQl6b25lbGlzdC0+em9uZXNbaisr XSA9IHpvbmU7Ci0JCX0KKwkJaiA9IGJ1aWxkX3pvbmVsaXN0c19ub2RlKHBnZGF0LCB6b25lbGlz dCwgaiwgayk7CisJCS8qCisJCSAqIE5vdyB3ZSBidWlsZCB0aGUgem9uZWxpc3Qgc28gdGhhdCBp dCBjb250YWlucyB0aGUgem9uZXMKKwkJICogb2YgYWxsIHRoZSBvdGhlciBub2Rlcy4KKwkJICog V2UgZG9uJ3Qgd2FudCB0byBwcmVzc3VyZSBhIHBhcnRpY3VsYXIgbm9kZSwgc28gd2hlbgorCQkg KiBidWlsZGluZyB0aGUgem9uZXMgZm9yIG5vZGUgTiwgd2UgbWFrZSBzdXJlIHRoYXQgdGhlCisJ CSAqIHpvbmVzIGNvbWluZyByaWdodCBhZnRlciB0aGUgbG9jYWwgb25lcyBhcmUgdGhvc2UgZnJv bQorCQkgKiBub2RlIE4rMSAobW9kdWxvIE4pCisJCSAqLworCQlmb3IgKG5vZGUgPSBsb2NhbF9u b2RlICsgMTsgbm9kZSA8IG51bW5vZGVzOyBub2RlKyspCisJCQlqID0gYnVpbGRfem9uZWxpc3Rz X25vZGUoTk9ERV9EQVRBKG5vZGUpLCB6b25lbGlzdCwgaiwgayk7CisJCWZvciAobm9kZSA9IDA7 IG5vZGUgPCBsb2NhbF9ub2RlOyBub2RlKyspCisJCQlqID0gYnVpbGRfem9uZWxpc3RzX25vZGUo Tk9ERV9EQVRBKG5vZGUpLCB6b25lbGlzdCwgaiwgayk7CisKIAkJem9uZWxpc3QtPnpvbmVzW2or K10gPSBOVUxMOwotCX0gCisJfQorfQorCit2b2lkIF9faW5pdCBidWlsZF9hbGxfem9uZWxpc3Rz KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IoaSA9IDAgOyBpIDwgbnVtbm9kZXMgOyBpKyspCisJ CWJ1aWxkX3pvbmVsaXN0cyhOT0RFX0RBVEEoaSkpOwogfQogCiAvKgpAQCAtODA2LDYgKzgzMyw3 IEBACiAJCSAqIHVwIGJ5IGZyZWVfYWxsX2Jvb3RtZW0oKSBvbmNlIHRoZSBlYXJseSBib290IHBy b2Nlc3MgaXMKIAkJICogZG9uZS4gTm9uLWF0b21pYyBpbml0aWFsaXphdGlvbiwgc2luZ2xlLXBh c3MuCiAJCSAqLworCiAJCXpvbmVfc3RhcnRfcGFkZHIgPSBNRU1NQVBfSU5JVChtZW1fbWFwICsg b2Zmc2V0LAogCQkJCW1lbV9tYXAgKyBvZmZzZXQgKyBzaXplLAogCQkJCW5pZCAqIE1BWF9OUl9a T05FUyArIGosIHpvbmVfc3RhcnRfcGFkZHIsCkBAIC04NTAsNyArODc4LDYgQEAKIAkJCSAgKHVu c2lnbmVkIGxvbmcgKikgYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCBiaXRtYXBfc2l6ZSk7CiAJ CX0KIAl9Ci0JYnVpbGRfem9uZWxpc3RzKHBnZGF0KTsKIH0KIAogdm9pZCBfX2luaXQgZnJlZV9h cmVhX2luaXQodW5zaWduZWQgbG9uZyAqem9uZXNfc2l6ZSkK --------_3E646F34BB180315A958_MULTIPART_MIXED_--