ZGlmZiAtLWdpdCBhL2F1dG8vZmVhdHVyZSBiL2F1dG8vZmVhdHVyZQppbmRleCA1YTQwYzY5Li4xNWRhNWJkIDEwMDY0NAotLS0gYS9hdXRvL2ZlYXR1cmUKKysrIGIvYXV0by9mZWF0dXJlCkBAIC0zOSwyOSArMzksNDYgQEAKIAogaWYgWyAteCAkTkdYX0FVVE9URVNUIF07IHRoZW4KIAotICAgIGlmIFsgJG5neF9mZWF0dXJlX3J1biA9IHllcyBdOyB0aGVuCisgICAgY2FzZSAiJG5neF9mZWF0dXJlX3J1biIgaW4KIAotICAgICAgIGlmICROR1hfQVVUT1RFU1QgMj4mMSA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgICBlY2hvICIgZm91bmQiCi0gICAgICAgICAgIG5neF9mb3VuZD15ZXMKKyAgICAgICAgeWVzKQorICAgICAgICAgICAgaWYgJE5HWF9BVVRPVEVTVCAyPiYxID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiIGZvdW5kIgorICAgICAgICAgICAgICAgIG5neF9mb3VuZD15ZXMKIAotICAgICAgICAgICBpZiB0ZXN0IC1uICIkbmd4X2ZlYXR1cmVfbmFtZSI7IHRoZW4KLSAgICAgICAgICAgICAgIGhhdmU9JG5neF9oYXZlX2ZlYXR1cmUgLiBhdXRvL2hhdmUKLSAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkbmd4X2ZlYXR1cmVfbmFtZSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaGF2ZT0kbmd4X2hhdmVfZmVhdHVyZSAuIGF1dG8vaGF2ZQorICAgICAgICAgICAgICAgIGZpCiAKLSAgICAgICBlbHNlCi0gICAgICAgICAgIGVjaG8gIiBmb3VuZCBidXQgaXMgbm90IHdvcmtpbmciCi0gICAgICAgZmkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlY2hvICIgZm91bmQgYnV0IGlzIG5vdCB3b3JraW5nIgorICAgICAgICAgICAgZmkKKyAgICAgICAgOzsKIAotICAgIGVsc2UKLSAgICAgICBlY2hvICIgZm91bmQiCi0gICAgICAgbmd4X2ZvdW5kPXllcworICAgICAgICBidWcpCisgICAgICAgICAgICBpZiAkTkdYX0FVVE9URVNUIDI+JjEgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICIgbm90IGZvdW5kIgogCi0gICAgICAgaWYgdGVzdCAtbiAiJG5neF9mZWF0dXJlX25hbWUiOyB0aGVuCi0gICAgICAgICAgIGhhdmU9JG5neF9oYXZlX2ZlYXR1cmUgLiBhdXRvL2hhdmUKLSAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVjaG8gIiBmb3VuZCIKKyAgICAgICAgICAgICAgICBuZ3hfZm91bmQ9eWVzCiAKLSAgICBmaQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRuZ3hfZmVhdHVyZV9uYW1lIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBoYXZlPSRuZ3hfaGF2ZV9mZWF0dXJlIC4gYXV0by9oYXZlCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIGVjaG8gIiBmb3VuZCIKKyAgICAgICAgICAgIG5neF9mb3VuZD15ZXMKKworICAgICAgICAgICAgaWYgdGVzdCAtbiAiJG5neF9mZWF0dXJlX25hbWUiOyB0aGVuCisgICAgICAgICAgICAgICAgaGF2ZT0kbmd4X2hhdmVfZmVhdHVyZSAuIGF1dG8vaGF2ZQorICAgICAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgIGVzYWMKIAogZWxzZQogICAgIGVjaG8gIiBub3QgZm91bmQiCmRpZmYgLS1naXQgYS9hdXRvL29zL2ZlYXR1cmVzIGIvYXV0by9vcy9mZWF0dXJlcwppbmRleCA4NDhlNDgzLi43MDI4MTUxIDEwMDY0NAotLS0gYS9hdXRvL29zL2ZlYXR1cmVzCisrKyBiL2F1dG8vb3MvZmVhdHVyZXMKQEAgLTg3LDEzICs4Nyw4OCBAQAogICAgICAgICBuZ3hfZmVhdHVyZV90ZXN0PSJzdHJ1Y3Qga2V2ZW50ICBrZXY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtldi5mZmxhZ3MgPSBOT1RFX0xPV0FUOyIKICAgICAgICAgLiBhdXRvL2ZlYXR1cmUKKworCisgICAgICAgIG5neF9mZWF0dXJlPSJrcXVldWUncyBFVkZJTFRfVElNRVIiCisgICAgICAgIG5neF9mZWF0dXJlX25hbWU9Ik5HWF9IQVZFX1RJTUVSX0VWRU5UIgorICAgICAgICBuZ3hfZmVhdHVyZV9ydW49eWVzCisgICAgICAgIG5neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzeXMvZXZlbnQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPiIKKyAgICAgICAgbmd4X2ZlYXR1cmVfbGlicz0KKyAgICAgICAgbmd4X2ZlYXR1cmVfdGVzdD0iaW50ICAgICAga3E7CisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga2V2ZW50ICAgIGtldjsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAgdHM7CisKKyAgICAgICAgICAgICAgICAgIGlmICgoa3EgPSBrcXVldWUoKSkgPT0gLTEpIHJldHVybiAxOworCisgICAgICAgICAgICAgICAgICBrZXYuaWRlbnQgPSAwOworICAgICAgICAgICAgICAgICAga2V2LmZpbHRlciA9IEVWRklMVF9USU1FUjsKKyAgICAgICAgICAgICAgICAgIGtldi5mbGFncyA9IEVWX0FERHxFVl9FTkFCTEU7CisgICAgICAgICAgICAgICAgICBrZXYuZmZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICAgIGtldi5kYXRhID0gMTAwMDsKKyAgICAgICAgICAgICAgICAgIGtldi51ZGF0YSA9IDA7CisKKyAgICAgICAgICAgICAgICAgIHRzLnR2X3NlYyA9IDA7CisgICAgICAgICAgICAgICAgICB0cy50dl9uc2VjID0gMDsKKworICAgICAgICAgICAgICAgICAgaWYgKGtldmVudChrcSwgJmtldiwgMSwgJmtldiwgMSwgJnRzKSA9PSAtMSkgcmV0dXJuIDE7CisKKyAgICAgICAgICAgICAgICAgIGlmIChrZXYuZmxhZ3MgJiBFVl9FUlJPUikgcmV0dXJuIDE7IgorCisgICAgICAgIC4gYXV0by9mZWF0dXJlCisKKworICAgICAgICBpZiBbICIkTkdYX1NZU1RFTSIgPSAiRGFyd2luIiBdOyB0aGVuCisKKyAgICAgICAgICAgIG5neF9mZWF0dXJlPSJNYWNPU1ggNjQtYml0IGtxdWV1ZSBtaWxsaXNlY29uZCB0aW1lb3V0IGJ1ZyIKKyAgICAgICAgICAgIG5neF9mZWF0dXJlX25hbWU9CisgICAgICAgICAgICBuZ3hfZmVhdHVyZV9ydW49YnVnCisgICAgICAgICAgICBuZ3hfZmVhdHVyZV9pbmNzPSIjaW5jbHVkZSA8c3lzL2V2ZW50Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4iCisgICAgICAgICAgICBuZ3hfZmVhdHVyZV9saWJzPQorICAgICAgICAgICAgbmd4X2ZlYXR1cmVfdGVzdD0iaW50ICBrcTsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBrZXZlbnQgICAga2V2OworICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICB0czsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICAgdHYsIHR2MDsKKworICAgICAgICAgICAgICAgICAga3EgPSBrcXVldWUoKTsKKworICAgICAgICAgICAgICAgICAgdHMudHZfc2VjID0gMDsKKyAgICAgICAgICAgICAgICAgIHRzLnR2X25zZWMgPSA5OTkwMDAwMDA7CisKKyAgICAgICAgICAgICAgICAgIGdldHRpbWVvZmRheSgmdHYsIDApOworICAgICAgICAgICAgICAgICAga2V2ZW50KGtxLCBOVUxMLCAwLCAma2V2LCAxLCAmdHMpOworICAgICAgICAgICAgICAgICAgZ2V0dGltZW9mZGF5KCZ0djAsIDApOworICAgICAgICAgICAgICAgICAgdGltZXJzdWIoJnR2MCwgJnR2LCAmdHYpOworCisgICAgICAgICAgICAgICAgICBpZiAodHYudHZfc2VjICogMTAwMDAwMCArIHR2LnR2X3VzZWMgPCA5MDAwMDApIHJldHVybiAxOyIKKworICAgICAgICAgICAgLiBhdXRvL2ZlYXR1cmUKKworICAgICAgICAgICAgbmd4X21hY29zeF9rZXZlbnRfYnVnPSRuZ3hfZm91bmQKKyAgICAgICAgZmkKICAgICBmaQogZmkKIAotaWYgWyAiJE5HWF9TWVNURU0iID0gIk5ldEJTRCIgXTsgdGhlbgogCi0gICAgaGF2ZT1OR1hfSEFWRV9USU1FUl9FVkVOVCAuIGF1dG8vaGF2ZQotICAgIGVjaG8gIiArIGtxdWV1ZSdzIEVWRklMVF9USU1FUiBmb3VuZCIKK2lmIFsgIi4kbmd4X21hY29zeF9rZXZlbnRfYnVnIiA9IC55ZXMgXTsgdGhlbgorCisgICAgY2F0IDw8IEVORCA+PiAkTkdYX0FVVE9fQ09ORklHX0gKKworI2RlZmluZSBOR1hfTUFDT1NYX0tFVkVOVF9CVUdfU0hJRlQgICA8PCAzMgorCitFTkQKKworZWxzZQorICAgIGNhdCA8PCBFTkQgPj4gJE5HWF9BVVRPX0NPTkZJR19ICisKKyNkZWZpbmUgTkdYX01BQ09TWF9LRVZFTlRfQlVHX1NISUZUCisKK0VORAorZmkKKworCitpZiBbICIkTkdYX1NZU1RFTSIgPSAiTmV0QlNEIiBdOyB0aGVuCiAKICAgICAjIE5ldEJTRCAyLjAgaW5jb21wYXRpYmx5IGRlZmluZXMga2V2ZW50LnVkYXRhIGFzICJpbnRwdHJfdCIKIApkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCAwOGNhNWEwLi42MWM2MDM0IDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtOSw2ICs5LDg0IEBACiA8dGl0bGUgbGFuZz0iZW4iPm5naW54IGNoYW5nZWxvZzwvdGl0bGU+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjMuMzEiIGRhdGU9IjEwLjAzLjIwMDYiPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivUxdDF0tggbmdpbngg0MXSxcTBo9QgzsXXxdLO2cUgz9TXxdTZINDSz8vTydLP18HOzs/HzyDC3MvFzsTBLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorbm93IG5naW54IHBhc3NlcyB0aGUgbWFsZm9ybWVkIHByb3hpZWQgYmFja2VuZCByZXNwb25zZXMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnX2SBsaXN0ZW4g0M/ExMXS1snXwcDUIMHE0sXTINcg18nExSAiKjrQz9LUIi4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAibGlzdGVuIiBkaXJlY3RpdmVzIHN1cHBvcnQgdGhlIGFkZHJlc3MgaW4gdGhlICIqOnBvcnQiIGZvcm0uCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DPxMTF0tbLwSBFVkZJTEVSX1RJTUVSINcgTWFjT1NYIDEwLjQuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgRVZGSUxFUl9USU1FUiBzdXBwb3J0IGluIE1hY09TWCAxMC40LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0id29ya2Fyb3VuZCI+Cis8cGFyYSBsYW5nPSJydSI+CivPwsjPxCDP28nCy8kgz8LSwcLP1MvJIM3JzMzJ08XL1c7EztnIINTBys3B1dTP1yBrcXVldWUg1yA2NC3CydTOz80g0cTSxSBNYWNPU1guCivz0MHTycLPIOHOxNLFwCDuycfNwdTVzMnO1S4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2ZvciBNYWNPU1ggNjQtYml0IGtlcm5lbCBrcXVldWUgbWlsbGlzZWNvbmQgdGltZW91dCBidWcuCitUaGFua3MgQW5kcmVpIE5pZ21hdHVsaW4uCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorxdPMySDXztXU0skgz8TOz8fPINPF0tfF0sEgz9DJ08HO2SDOxdPLz8zYy88gxMnSxcvUydcgbGlzdGVuLCDTzNXbwcDdycggzsEKK9LB2s7ZyCDBxNLF08HILCDUzyDJzcXOwSDTxdLXxdLP1yDXycTBICIqLmRvbWFpbi50bGQiINLBws/UwczJINTPzNjLzworxMzRINDF0tfPx88gwcTSxdPBOworz9vJwsvBINDP0dfJzMHT2CDXIDAuMy4xOC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2lmIHRoZXJlIHdlcmUgc2V2ZXJhbCAibGlzdGVuIiBkaXJlY3RpdmVzIGxpc3RlbmluZyBvbmUgdmFyaW91cyBhZGRyZXNzZXMKK2luc2lkZSBvbmUgc2VydmVyLCB0aGVuIHNlcnZlciBuYW1lcyBsaWtlICIqLmRvbWFpbi50bGQiIHdvcmtlZCBmb3IgZmlyc3QKK2FkZHJlc3Mgb25seTsKK2J1ZyBhcHBlYXJlZCBpbiAwLjMuMTguCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor0NLJIMnT0M/M2NrP18HOyckg0NLP1M/Lz8zBIEhUVFBTINcgxMnSxcvUydfFIHByb3h5X3Bhc3MgzsUg0MXSxcTB18HMydPYCivawdDSz9PZINMg1MXMz80sINrB0MnTwc7O2c0g188g19LFzcXOztnKIMbByswuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpZiB0aGUgSFRUUCBwcm90b2NvbCB3YXMgdXNlZCBpbiB0aGUgInByb3h5X3Bhc3MiIGRpcmVjdGl2ZSBhbmQKK3RoZSByZXF1ZXN0IGJvZHkgd2FzIGluIHRlbXBvcmFyaWx5IGZpbGUgdGhlbiB0aGUgcmVxdWVzdCB3YXMgbm90IHRyYW5zZmVycmVkLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9PP183F09TJzc/T1Ngg0yBwZXJsIDUuOC44LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorcGVybCA1LjguOCBjb21wYXRpYmlsaXR5LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMy4zMCIgZGF0ZT0iMjIuMDIuMjAwNiI+CiAKIDxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KQEAgLTMyLDEwICsxMTAsMTIgQEAKIAogPGNoYW5nZSB0eXBlPSJidWdmaXgiPgogPHBhcmEgbGFuZz0icnUiPgotbmdpbnggzsUg08/CydLBzNPRIM7BIGkzODYg0MzB1MbP0s3FLCDF08zJIMnT0M/M2NrP18HM09EgUElDLgorbmdpbnggzsUg08/CydLBzNPRIM7BIGkzODYg0MzB1MbP0s3FLCDF08zJIMnT0M/M2NrP18HM09EgUElDOworz9vJwsvBINDP0dfJzMHT2CDXIDAuMy4yNy4KIDwvcGFyYT4KIDxwYXJhIGxhbmc9ImVuIj4KLW5naW54IGNvdWxkIG5vdCBiZSBidWlsdCBvbiBpMzg2IHBsYXRmb3JtLCBpZiB0aGUgUElDIHdhcyB1c2VkLgorbmdpbnggY291bGQgbm90IGJlIGJ1aWx0IG9uIGkzODYgcGxhdGZvcm0sIGlmIHRoZSBQSUMgd2FzIHVzZWQ7CitidWcgYXBwZWFyZWQgaW4gMC4zLjI3LgogPC9wYXJhPgogPC9jaGFuZ2U+CiAKQEAgLTIyNSw3ICszMDUsNyBAQAogPC9wYXJhPgogPHBhcmEgbGFuZz0iZW4iPgogaWYgdGhlIEhUVFAgcHJvdG9jb2wgd2FzIHVzZWQgaW4gdGhlICJwcm94eV9wYXNzIiBkaXJlY3RpdmUgdGhlbgotdGhlIHJlcXVlc3RzIHdpdGggdGhlIGJvZHkgZGlkIG5vdCB0cmFuc2ZlcnJlZC4KK3RoZSByZXF1ZXN0cyB3aXRoIHRoZSBib2R5IHdhcyBub3QgdHJhbnNmZXJyZWQuCiA8L3BhcmE+CiA8L2NoYW5nZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggZDBmZjI3Zi4uZThmNjA4NCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjMwIgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4zMSIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfT0xEUElEX0VYVCAgICAgIi5vbGRiaW4iCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfaGFzaC5jIGIvc3JjL2NvcmUvbmd4X2hhc2guYwppbmRleCAxZjY3N2M5Li4yODc2MzE4IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfaGFzaC5jCisrKyBiL3NyYy9jb3JlL25neF9oYXNoLmMKQEAgLTc0MSwxMCArNzQxLDEwIEBACiAgICAgbmd4X3VpbnRfdCBmbGFncykKIHsKICAgICBzaXplX3QgICAgICAgICAgIGxlbjsKKyAgICB1X2NoYXIgICAgICAgICAgKnJldmVyc2U7CiAgICAgbmd4X3N0cl90ICAgICAgICpuYW1lOwogICAgIG5neF91aW50X3QgICAgICAgaSwgaywgbiwgc2tpcDsKICAgICBuZ3hfaGFzaF9rZXlfdCAgKmhrOwotICAgIHVfY2hhciAgICAgICAgICAgYnVmWzIwNDhdOwogCiAgICAgaWYgKCEoZmxhZ3MgJiBOR1hfSEFTSF9XSUxEQ0FSRF9LRVkpKSB7CiAKQEAgLTg2MywxNCArODYzLDE5IEBACiAgICAgICAgICAqICAgICAgYW5kICIuZXhhbXBsZS5jb20iIHRvICJjb20uZXhhbXBsZVwwIgogICAgICAgICAgKi8KIAorICAgICAgICByZXZlcnNlID0gbmd4X3BhbGxvYyhoYS0+dGVtcF9wb29sLCBrZXktPmxlbik7CisgICAgICAgIGlmIChyZXZlcnNlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKwogICAgICAgICBsZW4gPSAwOwogICAgICAgICBuID0gMDsKIAogICAgICAgICBmb3IgKGkgPSBrZXktPmxlbiAtIDE7IGk7IGktLSkgewogICAgICAgICAgICAgaWYgKGtleS0+ZGF0YVtpXSA9PSAnLicpIHsKLSAgICAgICAgICAgICAgICBuZ3hfbWVtY3B5KCZidWZbbl0sICZrZXktPmRhdGFbaSArIDFdLCBsZW4pOworICAgICAgICAgICAgICAgIG5neF9tZW1jcHkoJnJldmVyc2Vbbl0sICZrZXktPmRhdGFbaSArIDFdLCBsZW4pOwogICAgICAgICAgICAgICAgIG4gKz0gbGVuOwotICAgICAgICAgICAgICAgIGJ1ZltuKytdID0gJy4nOworICAgICAgICAgICAgICAgIHJldmVyc2VbbisrXSA9ICcuJzsKICAgICAgICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtODc5LDExICs4ODQsMjIgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChsZW4pIHsKLSAgICAgICAgICAgIG5neF9tZW1jcHkoJmJ1ZltuXSwgJmtleS0+ZGF0YVsxXSwgbGVuKTsKKyAgICAgICAgICAgIG5neF9tZW1jcHkoJnJldmVyc2Vbbl0sICZrZXktPmRhdGFbMV0sIGxlbik7CiAgICAgICAgICAgICBuICs9IGxlbjsKICAgICAgICAgfQogCi0gICAgICAgIGJ1ZltuXSA9ICdcMCc7CisgICAgICAgIHJldmVyc2Vbbl0gPSAnXDAnOworCisKKyAgICAgICAgaGsgPSBuZ3hfYXJyYXlfcHVzaCgmaGEtPmRuc193aWxkY2FyZHMpOworICAgICAgICBpZiAoaGsgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGhrLT5rZXkubGVuID0ga2V5LT5sZW4gLSAxOworICAgICAgICBoay0+a2V5LmRhdGEgPSByZXZlcnNlOworICAgICAgICBoay0+a2V5X2hhc2ggPSAwOworICAgICAgICBoay0+dmFsdWUgPSB2YWx1ZTsKIAogCiAgICAgICAgIC8qIGNoZWNrIGNvbmZsaWN0cyBpbiB3aWxkY2FyZCBoYXNoICovCkBAIC05MjIsMjAgKzkzOCw4IEBACiAgICAgICAgIGlmIChuYW1lLT5kYXRhID09IE5VTEwpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KKwogICAgICAgICBuZ3hfbWVtY3B5KG5hbWUtPmRhdGEsIGtleS0+ZGF0YSArIHNraXAsIG5hbWUtPmxlbik7Ci0KLQotICAgICAgICBuZ3hfbWVtY3B5KGtleS0+ZGF0YSwgYnVmLCBrZXktPmxlbik7Ci0gICAgICAgIGtleS0+bGVuLS07Ci0KLSAgICAgICAgaGsgPSBuZ3hfYXJyYXlfcHVzaCgmaGEtPmRuc193aWxkY2FyZHMpOwotICAgICAgICBpZiAoaGsgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGhrLT5rZXkgPSAqa2V5OwotICAgICAgICBoay0+a2V5X2hhc2ggPSAwOwotICAgICAgICBoay0+dmFsdWUgPSB2YWx1ZTsKICAgICB9CiAKICAgICByZXR1cm4gTkdYX09LOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2txdWV1ZV9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMKaW5kZXggODhiNWIzZi4uZjNjYTczNyAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2txdWV1ZV9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfa3F1ZXVlX21vZHVsZS5jCkBAIC00OTAsOCArNDkwLDE3IEBACiAgICAgICAgIHRwID0gTlVMTDsKIAogICAgIH0gZWxzZSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogNjQtYml0IE1hY09TWCBrZXJuZWwgaGFzIHRoZSBidWc6IGtlcm5lbCBsZXZlbCB0cy50dl9uc2VjIGlzCisgICAgICAgICAqIHRoZSBpbnQzMl90IHdoaWxlIHVzZXIgbGV2ZWwgdHMudHZfbnNlYyBpcyB0aGUgbG9uZyAoNjQtYml0KSwKKyAgICAgICAgICogc28gb24gdGhlIGJpZyBlbmRpYW4gUG93ZXJQQyBhbGwgbmFub3NlY29uZHMgYXJlIGxvc3QuCisgICAgICAgICAqIE5HWF9NQUNPU1hfS0VWRU5UX0JVR19TSElGVCBvbiB0aGVzZSBtYWNoaW5lcyBpcyAiPDwgMzIiLgorICAgICAgICAgKi8KKwogICAgICAgICB0cy50dl9zZWMgPSB0aW1lciAvIDEwMDA7Ci0gICAgICAgIHRzLnR2X25zZWMgPSAodGltZXIgJSAxMDAwKSAqIDEwMDAwMDA7CisgICAgICAgIHRzLnR2X25zZWMgPSAobG9uZykgKCh0aW1lciAlIDEwMDApICogMTAwMDAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfTUFDT1NYX0tFVkVOVF9CVUdfU0hJRlQ7CiAgICAgICAgIHRwID0gJnRzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCmluZGV4IDk3OGMzMjUuLjcxNWIwNzAgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKQEAgLTEwNDMsOCArMTA0Myw3IEBACiAgICAgICAgICAgICAvKiB0aGVyZSB3YXMgZXJyb3Igd2hpbGUgYSBoZWFkZXIgbGluZSBwYXJzaW5nICovCiAKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1faGVhZGVyX2Vycm9yc1tyYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBOR1hfSFRUUF9QQVJTRV9IRUFERVJfRVJST1JdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInVwc3RyZWFtIHNlbnQgaW52YWxpZCBoZWFkZXIiKTsKIAogICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1VQU1RSRUFNX0lOVkFMSURfSEVBREVSOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYwppbmRleCBlNjZiNDhiLi4zNGU2ZGQxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKQEAgLTgwMCw5ICs4MDAsMTEgQEAKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICJ1cHN0cmVhbSBzZW50IG5vIHZhbGlkIEhUVFAvMS4wIGhlYWRlciIpOwogCisjaWYgMAogICAgICAgICBpZiAodS0+YWNjZWwpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9VUFNUUkVBTV9JTlZBTElEX0hFQURFUjsKICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgci0+aHR0cF92ZXJzaW9uID0gTkdYX0hUVFBfVkVSU0lPTl85OwogICAgICAgICBwLT5zdGF0dXMgPSBOR1hfSFRUUF9PSzsKQEAgLTk2MSw2ICs5NjMsMTAgQEAKIAogICAgICAgICAvKiBIVFRQIHN0YXR1cyBjb2RlICovCiAgICAgICAgIGNhc2Ugc3dfc3RhdHVzOgorICAgICAgICAgICAgaWYgKGNoID09ICcgJykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoY2ggPCAnMCcgfHwgY2ggPiAnOScpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfUFJPWFlfUEFSU0VfTk9fSEVBREVSOwogICAgICAgICAgICAgfQpAQCAtMTExMSw4ICsxMTE3LDcgQEAKICAgICAgICAgLyogdGhlcmUgd2FzIGVycm9yIHdoaWxlIGEgaGVhZGVyIGxpbmUgcGFyc2luZyAqLwogCiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9oZWFkZXJfZXJyb3JzW3JjCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gTkdYX0hUVFBfUEFSU0VfSEVBREVSX0VSUk9SXSk7CisgICAgICAgICAgICAgICAgICAgICAgInVwc3RyZWFtIHNlbnQgaW52YWxpZCBoZWFkZXIiKTsKIAogICAgICAgICByZXR1cm4gTkdYX0hUVFBfVVBTVFJFQU1fSU5WQUxJRF9IRUFERVI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL01ha2VmaWxlLlBMIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL01ha2VmaWxlLlBMCmluZGV4IDZmYTNkZjcuLjQ4ZjFlYmMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvcGVybC9NYWtlZmlsZS5QTAorKysgYi9zcmMvaHR0cC9tb2R1bGVzL3BlcmwvTWFrZWZpbGUuUEwKQEAgLTEzLDYgKzEzLDcgQEAKICAgICBBVVRIT1IgICAgICAgICAgICA9PiAnSWdvciBTeXNvZXYnLAogCiAgICAgQ0NGTEFHUyAgICAgICAgICAgPT4gIiRFTlZ7TkdYX1BFUkxfQ0ZMQUdTfSIsCisgICAgT1BUSU1JWkUgICAgICAgICAgPT4gJy1PJywKIAogICAgIElOQyAgICAgICAgICAgICAgID0+ICItSSAuLi8uLi8uLi8uLi8uLi9zcmMvY29yZSAiIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAiLUkgLi4vLi4vLi4vLi4vLi4vc3JjL2V2ZW50ICIgLgpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL3Blcmwvbmd4X2h0dHBfcGVybF9tb2R1bGUuYwppbmRleCAwNjljMjE2Li4wYTk4MmU2IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Blcmwvbmd4X2h0dHBfcGVybF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL3Blcmwvbmd4X2h0dHBfcGVybF9tb2R1bGUuYwpAQCAtNjMyLDcgKzYzMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FsbF9zdjogJWQiLCBzdGF0dXMpOwogCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsaW5lID0gUE9QcHg7CisgICAgICAgICAgICBsaW5lID0gU3ZQVngoUE9Qcywgbl9hKTsKICAgICAgICAgICAgIHJ2LT5sZW4gPSBuX2E7CiAKICAgICAgICAgICAgIHJ2LT5kYXRhID0gbmd4X3BhbGxvYyhyLT5wb29sLCBuX2EpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHAuYyBiL3NyYy9odHRwL25neF9odHRwLmMKaW5kZXggN2YxOWE0My4uZmI1ZGNiNyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHAuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cC5jCkBAIC01NjMsNiArNTYzLDggQEAKIAogICAgICAgICB2aXJ0dWFsX25hbWVzOgogCisgICAgICAgICAgICBuZ3hfbWVtemVybygmaGEsIHNpemVvZihuZ3hfaGFzaF9rZXlzX2FycmF5c190KSk7CisKICAgICAgICAgICAgIGhhLnRlbXBfcG9vbCA9IG5neF9jcmVhdGVfcG9vbCgxNjM4NCwgY2YtPmxvZyk7CiAgICAgICAgICAgICBpZiAoaGEudGVtcF9wb29sID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CkBAIC01NzgsNiArNTgwLDkgQEAKICAgICAgICAgICAgIG5hbWUgPSBpbl9hZGRyW2FdLm5hbWVzLmVsdHM7CiAgICAgICAgICAgICBmb3IgKHMgPSAwOyBzIDwgaW5fYWRkclthXS5uYW1lcy5uZWx0czsgcysrKSB7CiAKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGNmLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VydmVyIG5hbWUgXCIlVlwiIiwgJm5hbWVbc10ubmFtZSk7CisKICAgICAgICAgICAgICAgICBjaCA9IG5hbWVbc10ubmFtZS5kYXRhWzBdOwogCiAgICAgICAgICAgICAgICAgaWYgKGNoID09ICcqJyB8fCBjaCA9PSAnLicpIHsKQEAgLTYwMCw2ICs2MDUsOSBAQAogCiAgICAgICAgICAgICBmb3IgKHMgPSAwOyBzIDwgaW5fYWRkclthXS5uYW1lcy5uZWx0czsgcysrKSB7CiAKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGNmLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lsZGNhcmQgc2VydmVyIG5hbWUgXCIlVlwiIiwgJm5hbWVbc10ubmFtZSk7CisKICAgICAgICAgICAgICAgICBjaCA9IG5hbWVbc10ubmFtZS5kYXRhWzBdOwogCiAgICAgICAgICAgICAgICAgaWYgKGNoICE9ICcqJyAmJiBjaCAhPSAnLicpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IGRhMTQyYzMuLjI2YTFkNjkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtMjI0Myw2ICsyMjQzLDEwIEBACiAgICAgbHMtPmNvbmYucmN2YnVmID0gLTE7CiAgICAgbHMtPmNvbmYuc25kYnVmID0gLTE7CiAKKyAgICBpZiAoaW5ldF91cHN0cmVhbS5ob3N0LmxlbiA9PSAxICYmIGluZXRfdXBzdHJlYW0uaG9zdC5kYXRhWzBdID09ICcqJykgeworICAgICAgICBpbmV0X3Vwc3RyZWFtLmhvc3QubGVuID0gMDsKKyAgICB9CisKICAgICBpZiAoaW5ldF91cHN0cmVhbS5ob3N0LmxlbikgewogICAgICAgICBpbmV0X3Vwc3RyZWFtLmhvc3QuZGF0YVtpbmV0X3Vwc3RyZWFtLmhvc3QubGVuXSA9ICdcMCc7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaCBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAppbmRleCBmYWNkNThlLi44NDUwYjA0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCkBAIC0zNyw3ICszNyw2IEBACiAjZGVmaW5lIE5HWF9IVFRQX1BBUlNFX0lOVkFMSURfUkVRVUVTVCAgICAgMTEKICNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF8wOV9NRVRIT0QgICAxMgogCi0jZGVmaW5lIE5HWF9IVFRQX1BBUlNFX0hFQURFUl9FUlJPUiAgICAgICAgMTMKICNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9IRUFERVIgICAgICAxMwogCiAjZGVmaW5lIE5HWF9IVFRQX1pFUk9fSU5fVVJJICAgICAgICAgICAgICAgMQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKaW5kZXggZTczYjNiMy4uNzg2MDgxOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCkBAIC0yNTksMTIgKzI1OSw2IEBACiB9OwogCiAKLWNoYXIgKm5neF9odHRwX3Vwc3RyZWFtX2hlYWRlcl9lcnJvcnNbXSA9IHsKLSAgICAidXBzdHJlYW0gc2VudCBpbnZhbGlkIGhlYWRlciIsCi0gICAgInVwc3RyZWFtIHNlbnQgdG9vIGxvbmcgaGVhZGVyIGxpbmUiCi19OwotCi0KIHZvaWQKIG5neF9odHRwX3Vwc3RyZWFtX2luaXQobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewpAQCAtNjI0LDYgKzYxOCw3IEBACiAgICAgfQogCiAgICAgYy0+c2VuZGZpbGUgPSAwOworICAgIHUtPm91dHB1dC5zZW5kZmlsZSA9IDA7CiAKICAgICBwZWVyID0gJnUtPnBlZXIucGVlcnMtPnBlZXJbdS0+cGVlci5jdXJfcGVlcl07CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oCmluZGV4IDFiNDc5NWEuLmExNzgwMjkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uaApAQCAtMTk5LDcgKzE5OSw1IEBACiAKIGV4dGVybiBuZ3hfbW9kdWxlX3QgIG5neF9odHRwX3Vwc3RyZWFtX21vZHVsZTsKIAotZXh0ZXJuIGNoYXIgKm5neF9odHRwX3Vwc3RyZWFtX2hlYWRlcl9lcnJvcnNbXTsKLQogCiAjZW5kaWYgLyogX05HWF9IVFRQX1VQU1RSRUFNX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfY29yZV9tb2R1bGUuYwppbmRleCA0NDQ4NGFjLi5jNDU0ZjE5IDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX2NvcmVfbW9kdWxlLmMKQEAgLTQ0Miw2ICs0NDIsMTAgQEAKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAorICAgIGlmIChpbmV0X3Vwc3RyZWFtLmhvc3QubGVuID09IDEgJiYgaW5ldF91cHN0cmVhbS5ob3N0LmRhdGFbMF0gPT0gJyonKSB7CisgICAgICAgIGluZXRfdXBzdHJlYW0uaG9zdC5sZW4gPSAwOworICAgIH0KKwogICAgIGlmIChpbmV0X3Vwc3RyZWFtLmhvc3QubGVuKSB7CiAgICAgICAgIGluZXRfdXBzdHJlYW0uaG9zdC5kYXRhW2luZXRfdXBzdHJlYW0uaG9zdC5sZW5dID0gJ1wwJzsKIAo=