From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kimi Suganuma Date: Wed, 12 Mar 2003 06:59:50 +0000 Subject: Re: [Discontig-devel] Re: [Linux-ia64] discontigmem patch for 2.4.20 MIME-Version: 1 Content-Type: multipart/mixed; boundary="------_3E6ED602C23C030F4530_MULTIPART_MIXED_" Message-Id: List-Id: References: In-Reply-To: To: linux-ia64@vger.kernel.org --------_3E6ED602C23C030F4530_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Hi Bjorn, Erich, I fixed a bug about cpu_to_node_map[] and eliminated warnings as much as I can. Now, I'll start to think of merging VIRTUAL_MEM_MAP and NUMA. :-) Regards, Kimi On Fri, 7 Mar 2003 12:36:01 -0700 Bjorn Helgaas wrote: > > And about problems on HP machines, I guess the reason is that > > the current CONFIG_NUMA kernel doesn't work right on a system > > which needs the VIRTUAL_MEM_MAP function. > > Ah, it looks like you enforce this in the 2.5 config files: > > config VIRTUAL_MEM_MAP > bool "Enable Virtual Mem Map" > depends on !NUMA > > Unfortunately, 2.4 doesn't have VIRTUAL_MEM_MAP as a config > option (it's enabled automatically if needed), so we can't do > that directly. > > > ... it would better if CONFIG_NUMA kernel works on all types > > of machines. So I'll try to find out a solution for this issue. > > That would be ideal. Seems like there ought to be opportunities > for unification of DISCONTIGMEM, VIRTUAL_MEM_MAP, and parts of > NUMA. The current scheme feels a little clunky, especially for > configuring a "generic" kernel. (It sounds like it isn't even > possible to configure a kernel generic enough for both SGI SNx > and HP zx1 boxes.) > > Bjorn > -- suganuma --------_3E6ED602C23C030F4530_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="discontig-2.4.20-030312.patch" Content-Disposition: attachment; filename="discontig-2.4.20-030312.patch" Content-Transfer-Encoding: base64 ZGlmZiAtTnVyIGxpbnV4LTIuNC4yMC1iYXNlL2FyY2gvaWE2NC9jb25maWcuaW4gbGludXgtMi40 LjIwLWRjbS9hcmNoL2lhNjQvY29uZmlnLmluCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9hcmNoL2lh NjQvY29uZmlnLmluCU1vbiBNYXIgIDMgMTA6MjQ6MjEgMjAwMworKysgbGludXgtMi40LjIwLWRj bS9hcmNoL2lhNjQvY29uZmlnLmluCU1vbiBNYXIgIDMgMTA6NTU6MTIgMjAwMwpAQCAtNjYsNiAr NjYsMTQgQEAKIGZpCiAKIGlmIFsgIiRDT05GSUdfSUE2NF9HRU5FUklDIiA9ICJ5IiAtbyAiJENP TkZJR19JQTY0X0RJRyIgPSAieSIgLW8gIiRDT05GSUdfSUE2NF9IUF9aWDEiID0gInkiIF07IHRo ZW4KKwlib29sICcgIEVuYWJsZSBOVU1BIHN1cHBvcnQnIENPTkZJR19OVU1BCisJaWYgWyAiJENP TkZJR19OVU1BIiA9ICJ5IiBdOyB0aGVuCisJCWRlZmluZV9ib29sIENPTkZJR19ESVNDT05USUdN RU0geQorICAJCWNob2ljZSAnTWF4aW11bSBNZW1vcnkgcGVyIE5VTUEgTm9kZScJCQlcCisJCSIx NkdCCQlDT05GSUdfSUE2NF9OT0RFU0laRV8xNkdCCQlcCisJCSA2NEdCCQlDT05GSUdfSUE2NF9O T0RFU0laRV82NEdCCQlcCisJCSAyNTZHQgkJQ09ORklHX0lBNjRfTk9ERVNJWkVfMjU2R0IiIDE2 R0IKKwlmaQogCWJvb2wgJyAgRW5hYmxlIElBLTY0IE1hY2hpbmUgQ2hlY2sgQWJvcnQnIENPTkZJ R19JQTY0X01DQQogCWRlZmluZV9ib29sIENPTkZJR19QTSB5CiBmaQpkaWZmIC1OdXIgbGludXgt Mi40LjIwLWJhc2UvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMgbGludXgtMi40LjIwLWRjbS9hcmNo L2lhNjQva2VybmVsL2FjcGkuYwotLS0gbGludXgtMi40LjIwLWJhc2UvYXJjaC9pYTY0L2tlcm5l bC9hY3BpLmMJTW9uIE1hciAgMyAxMDoyNDoyMSAyMDAzCisrKyBsaW51eC0yLjQuMjAtZGNtL2Fy Y2gvaWE2NC9rZXJuZWwvYWNwaS5jCVdlZCBNYXIgMTIgMTM6MzY6MTggMjAwMwpAQCAtOCw2ICs4 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 bmNsdWRlIDxhc20vbnVtYS5oPgogCiAKICNkZWZpbmUgUFJFRklYCQkJIkFDUEk6ICIKQEAgLTIy Miw3ICsyMjcsNyBAQAogYWNwaV9zdGF0dXMKIGFjcGlfaHBfY3NyX3NwYWNlKGFjcGlfaGFuZGxl IG9iaiwgdTY0ICpjc3JfYmFzZSwgdTY0ICpjc3JfbGVuZ3RoKQogewotCWludCBpLCBvZmZzZXQg PSAwOworCWludCBvZmZzZXQgPSAwOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX2J1ZmZl ciBidWYgPSB7IC5sZW5ndGggID0gQUNQSV9BTExPQ0FURV9CVUZGRVIsCiAJCQkgICAgLnBvaW50 ZXIgPSBOVUxMIH07CkBAIC01NTksNiArNTY0LDE5MSBAQAogfQogCiAKKyNpZmRlZiBDT05GSUdf QUNQSV9OVU1BCisKKyNkZWZpbmUgU0xJVF9ERUJVRworCisjZGVmaW5lIFBYTV9GTEFHX0xFTiAo KE1BWF9QWE1fRE9NQUlOUyArIDEpLzMyKQorCitzdGF0aWMgaW50IF9faW5pdGRhdGEgc3JhdF9u dW1fY3B1czsJCQkvKiBudW1iZXIgb2YgY3B1cyAqLworc3RhdGljIHUzMiBfX2luaXRkYXRhIHB4 bV9mbGFnW1BYTV9GTEFHX0xFTl07CisjZGVmaW5lIHB4bV9iaXRfc2V0KGJpdCkJKHNldF9iaXQo Yml0LCh2b2lkICopcHhtX2ZsYWcpKQorI2RlZmluZSBweG1fYml0X3Rlc3QoYml0KQkodGVzdF9i aXQoYml0LCh2b2lkICopcHhtX2ZsYWcpKQorLyogbWFwcyB0byBjb252ZXJ0IGJldHdlZW4gcHJv eGltaXR5IGRvbWFpbiBhbmQgbG9naWNhbCBub2RlIElEICovCitpbnQgX19pbml0ZGF0YSBweG1f dG9fbmlkX21hcFtNQVhfUFhNX0RPTUFJTlNdOworaW50IF9faW5pdGRhdGEgbmlkX3RvX3B4bV9t YXBbTlJfTk9ERVNdOworc3RhdGljIHN0cnVjdCBhY3BpX3RhYmxlX3NsaXQgX19pbml0ZGF0YSAq c2xpdF90YWJsZTsKKworLyoKKyAqIEFDUEkgMi4wIFNMSVQgKFN5c3RlbSBMb2NhbGl0eSBJbmZv cm1hdGlvbiBUYWJsZSkKKyAqIGh0dHA6Ly9kZXZyZXNvdXJjZS5ocC5jb20vZGV2cmVzb3VyY2Uv RG9jcy9UZWNoUGFwZXJzL0lBNjQvc2xpdC5wZGYKKyAqLwordm9pZCBfX2luaXQKK2FjcGlfbnVt YV9zbGl0X2luaXQgKHN0cnVjdCBhY3BpX3RhYmxlX3NsaXQgKnNsaXQpCit7CisJdTMyIGxlbjsK KworCWxlbiA9IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpICsgOAorCQkrIHNsaXQt PmxvY2FsaXRpZXMgKiBzbGl0LT5sb2NhbGl0aWVzOworCWlmIChzbGl0LT5oZWFkZXIubGVuZ3Ro ICE9IGxlbikgeworCQlwcmludGsoIkFDUEkgMi4wIFNMSVQ6IHNpemUgbWlzbWF0Y2g6ICVkIGV4 cGVjdGVkLCAlZCBhY3R1YWxcbiIsCisJCSAgICAgIGxlbiwgc2xpdC0+aGVhZGVyLmxlbmd0aCk7 CisJCW1lbXNldChudW1hX3NsaXQsIDEwLCBzaXplb2YobnVtYV9zbGl0KSk7CisJCXJldHVybjsK Kwl9CisJc2xpdF90YWJsZSA9IHNsaXQ7Cit9CisKK3ZvaWQgX19pbml0CithY3BpX251bWFfcHJv Y2Vzc29yX2FmZmluaXR5X2luaXQgKHN0cnVjdCBhY3BpX3RhYmxlX3Byb2Nlc3Nvcl9hZmZpbml0 eSAqcGEpCit7CisJLyogcmVjb3JkIHRoaXMgbm9kZSBpbiBwcm94aW1pdHkgYml0bWFwICovCisJ cHhtX2JpdF9zZXQocGEtPnByb3hpbWl0eV9kb21haW4pOworCisJbm9kZV9jcHVpZFtzcmF0X251 bV9jcHVzXS5waHlzX2lkID0gKHBhLT5hcGljX2lkIDw8IDgpIHwgKHBhLT5sc2FwaWNfZWlkKTsK KwkvKiBuaWQgc2hvdWxkIGJlIG92ZXJyaWRkZW4gYXMgbG9naWNhbCBub2RlIGlkIGxhdGVyICov CisJbm9kZV9jcHVpZFtzcmF0X251bV9jcHVzXS5uaWQgPSBwYS0+cHJveGltaXR5X2RvbWFpbjsK KwlzcmF0X251bV9jcHVzKys7Cit9CisKK3ZvaWQgX19pbml0CithY3BpX251bWFfbWVtb3J5X2Fm ZmluaXR5X2luaXQgKHN0cnVjdCBhY3BpX3RhYmxlX21lbW9yeV9hZmZpbml0eSAqbWEpCit7CisJ dW5zaWduZWQgbG9uZyBwYWRkciwgc2l6ZSwgaG9sZV9zaXplLCBtaW5faG9sZV9zaXplOworCXU4 IHB4bTsKKwlzdHJ1Y3Qgbm9kZV9tZW1ibGtfcyAqcCwgKnEsICpwZW5kOworCisJcHhtID0gbWEt PnByb3hpbWl0eV9kb21haW47CisKKwkvKiBmaWxsIG5vZGUgbWVtb3J5IGNodW5rIHN0cnVjdHVy ZSAqLworCXBhZGRyID0gbWEtPmJhc2VfYWRkcl9oaTsKKwlwYWRkciA9IChwYWRkciA8PCAzMikg fCBtYS0+YmFzZV9hZGRyX2xvOworCXNpemUgPSBtYS0+bGVuZ3RoX2hpOworCXNpemUgPSAoc2l6 ZSA8PCAzMikgfCBtYS0+bGVuZ3RoX2xvOworCisJaWYgKG51bV9tZW1ibGtzID49IE5SX01FTUJM S1MpIHsKKwkJcHJpbnRrKCJUb28gbWFueSBtZW0gY2h1bmtzIGluIFNSQVQuIElnbm9yaW5nICVs ZCBNQnl0ZXMgYXQgJWx4XG4iLAorCQkJc2l6ZS8oMTAyNCoxMDI0KSwgcGFkZHIpOworCQlyZXR1 cm47CisJfQorCisJLyogSWdub3JlIGRpc2FibGVkIGVudHJpZXMgKi8KKwlpZiAoIW1hLT5mbGFn cy5lbmFibGVkKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdoZW4gdGhlIGNodW5rIGlzIG5vdCB0 aGUgZmlyc3Qgb25lIGluIHRoZSBub2RlLCBjaGVjayBkaXN0YW5jZQorCSAqIGZyb20gdGhlIG90 aGVyIGNodW5rcy4gV2hlbiB0aGUgaG9sZSBpcyB0b28gaHVnZSBpZ25vcmUgdGhlIGNodW5rLgor CSAqIFRoaXMgcmVzdHJpY3Rpb24gc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBtdWx0aXBsZSBjaHVu a3MgcGVyIG5vZGUKKwkgKiBpcyBzdXBwb3J0ZWQuCisJICovCisJcGVuZCA9ICZub2RlX21lbWJs a1tudW1fbWVtYmxrc107CisJbWluX2hvbGVfc2l6ZSA9IDA7CisJZm9yIChwID0gJm5vZGVfbWVt YmxrWzBdOyBwIDwgcGVuZDsgcCsrKSB7CisJCWlmIChwLT5uaWQgIT0gcHhtKQorCQkJY29udGlu dWU7CisJCWlmIChwLT5zdGFydF9wYWRkciA8IHBhZGRyKQorCQkJaG9sZV9zaXplID0gcGFkZHIg LSAocC0+c3RhcnRfcGFkZHIgKyBwLT5zaXplKTsKKwkJZWxzZQorCQkJaG9sZV9zaXplID0gcC0+ c3RhcnRfcGFkZHIgLSAocGFkZHIgKyBzaXplKTsKKworCQlpZiAoIW1pbl9ob2xlX3NpemUgfHwg aG9sZV9zaXplIDwgbWluX2hvbGVfc2l6ZSkKKwkJCW1pbl9ob2xlX3NpemUgPSBob2xlX3NpemU7 CisJfQorCisjaWYgMAkvKiB0ZXN0ICovCisJaWYgKG1pbl9ob2xlX3NpemUpIHsKKwkJaWYgKG1p bl9ob2xlX3NpemUgPiBzaXplKSB7CisJCQlwcmludGsoIlRvbyBodWdlIG1lbW9yeSBob2xlLiBJ Z25vcmluZyAlbGQgTUJ5dGVzIGF0ICVseFxuIiwKKwkJCQlzaXplLygxMDI0KjEwMjQpLCBwYWRk cik7CisJCQlyZXR1cm47CisJCX0KKwl9CisjZW5kaWYKKworCS8qIHJlY29yZCB0aGlzIG5vZGUg aW4gcHJveGltaXR5IGJpdG1hcCAqLworCXB4bV9iaXRfc2V0KHB4bSk7CisKKwkvKiBJbnNlcnRp b24gc29ydCBiYXNlZCBvbiBiYXNlIGFkZHJlc3MgKi8KKwlwZW5kID0gJm5vZGVfbWVtYmxrW251 bV9tZW1ibGtzXTsKKwlmb3IgKHAgPSAmbm9kZV9tZW1ibGtbMF07IHAgPCBwZW5kOyBwKyspIHsK KwkJaWYgKHBhZGRyIDwgcC0+c3RhcnRfcGFkZHIpCisJCQlicmVhazsKKwl9CisJaWYgKHAgPCBw ZW5kKSB7CisJCWZvciAocSA9IHBlbmQ7IHEgPj0gcDsgcS0tKQorCQkJKihxICsgMSkgPSAqcTsK Kwl9CisJcC0+c3RhcnRfcGFkZHIgPSBwYWRkcjsKKwlwLT5zaXplID0gc2l6ZTsKKwlwLT5uaWQg PSBweG07CisJbnVtX21lbWJsa3MrKzsKK30KKwordm9pZCBfX2luaXQKK2FjcGlfbnVtYV9hcmNo X2ZpeHVwKHZvaWQpCit7CisJaW50IGksIGosIG5vZGVfZnJvbSwgbm9kZV90bzsKKworCS8qIGNh bGN1bGF0ZSB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgaW4gc3lzdGVtIGZyb20gUFhNIGJpdG1hcCAq LworCW51bW5vZGVzID0gMDsJCS8qIGluaXQgdG90YWwgbm9kZXMgaW4gc3lzdGVtICovCisKKwlt ZW1zZXQocHhtX3RvX25pZF9tYXAsIC0xLCBzaXplb2YocHhtX3RvX25pZF9tYXApKTsKKwltZW1z ZXQobmlkX3RvX3B4bV9tYXAsIC0xLCBzaXplb2YobmlkX3RvX3B4bV9tYXApKTsKKwlmb3IgKGkg PSAwOyBpIDwgTUFYX1BYTV9ET01BSU5TOyBpKyspIHsKKwkJaWYgKHB4bV9iaXRfdGVzdChpKSkg eworCQkJcHhtX3RvX25pZF9tYXBbaV0gPSBudW1ub2RlczsKKwkJCW5pZF90b19weG1fbWFwW251 bW5vZGVzKytdID0gaTsKKwkJfQorCX0KKworCS8qIHNldCBsb2dpY2FsIG5vZGUgaWQgaW4gbWVt b3J5IGNodW5rIHN0cnVjdHVyZSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fbWVtYmxrczsgaSsr KQorCQlub2RlX21lbWJsa1tpXS5uaWQgPSBweG1fdG9fbmlkX21hcFtub2RlX21lbWJsa1tpXS5u aWRdOworCisJLyogYXNzaWduIG1lbW9yeSBiYW5rIG51bWJlcnMgZm9yIGVhY2ggY2h1bmsgb24g ZWFjaCBub2RlICovCisJZm9yIChpID0gMDsgaSA8IG51bW5vZGVzOyBpKyspIHsKKwkJaW50IGJh bms7CisKKwkJYmFuayA9IDA7CisJCWZvciAoaiA9IDA7IGogPCBudW1fbWVtYmxrczsgaisrKQor CQkJaWYgKG5vZGVfbWVtYmxrW2pdLm5pZCA9PSBpKQorCQkJCW5vZGVfbWVtYmxrW2pdLmJhbmsg PSBiYW5rKys7CisJfQorCisJLyogc2V0IGxvZ2ljYWwgbm9kZSBpZCBpbiBjcHUgc3RydWN0dXJl ICovCisJZm9yIChpID0gMDsgaSA8IHNyYXRfbnVtX2NwdXM7IGkrKykKKwkJbm9kZV9jcHVpZFtp XS5uaWQgPSBweG1fdG9fbmlkX21hcFtub2RlX2NwdWlkW2ldLm5pZF07CisKKwlwcmludGsoIk51 bWJlciBvZiBsb2dpY2FsIG5vZGVzIGluIHN5c3RlbSA9ICVkXG4iLCBudW1ub2Rlcyk7CisJcHJp bnRrKCJOdW1iZXIgb2YgbWVtb3J5IGNodW5rcyBpbiBzeXN0ZW0gPSAlZFxuIiwgbnVtX21lbWJs a3MpOworCisJaWYgKCFzbGl0X3RhYmxlKSByZXR1cm47CisJbWVtc2V0KG51bWFfc2xpdCwgLTEs IHNpemVvZihudW1hX3NsaXQpKTsKKwlmb3IgKGk9MDsgaTxzbGl0X3RhYmxlLT5sb2NhbGl0aWVz OyBpKyspIHsKKwkJaWYgKCFweG1fYml0X3Rlc3QoaSkpCisJCQljb250aW51ZTsKKwkJbm9kZV9m cm9tID0gcHhtX3RvX25pZF9tYXBbaV07CisJCWZvciAoaj0wOyBqPHNsaXRfdGFibGUtPmxvY2Fs aXRpZXM7IGorKykgeworCQkJaWYgKCFweG1fYml0X3Rlc3QoaikpCisJCQkJY29udGludWU7CisJ CQlub2RlX3RvID0gcHhtX3RvX25pZF9tYXBbal07CisJCQlub2RlX2Rpc3RhbmNlKG5vZGVfZnJv bSwgbm9kZV90bykgPSAKKwkJCQlzbGl0X3RhYmxlLT5lbnRyeVtpKnNsaXRfdGFibGUtPmxvY2Fs aXRpZXMgKyBqXTsKKwkJfQorCX0KKworI2lmZGVmIFNMSVRfREVCVUcKKwlwcmludGsoIkFDUEkg Mi4wIFNMSVQgbG9jYWxpdHkgdGFibGU6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtbm9kZXM7 IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgbnVtbm9kZXM7IGorKykKKwkJCXByaW50aygiJTAz ZCAiLCBub2RlX2Rpc3RhbmNlKGksaikpOworCQlwcmludGsoIlxuIik7CisJfQorI2VuZGlmCit9 CisjZW5kaWYgLyogQ09ORklHX0FDUElfTlVNQSAqLworCiBzdGF0aWMgaW50IF9faW5pdAogYWNw aV9wYXJzZV9mYWR0ICh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXpl KQogewpAQCAtNjY1LDEyICs4NTUsNiBAQAogaW50IF9faW5pdAogYWNwaV9ib290X2luaXQgKGNo YXIgKmNtZGxpbmUpCiB7Ci0JaW50IHJlc3VsdDsKLQotCS8qIEluaXRpYWxpemUgdGhlIEFDUEkg Ym9vdC10aW1lIHRhYmxlIHBhcnNlciAqLwotCXJlc3VsdCA9IGFjcGlfdGFibGVfaW5pdChjbWRs aW5lKTsKLQlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OwogCiAJLyoKIAkgKiBNQURUCkBA IC03MzgsNiArOTIyLDEwIEBACiAJCWF2YWlsYWJsZV9jcHVzID0gMTsgLyogV2UndmUgZ290IGF0 IGxlYXN0IG9uZSBvZiB0aGVzZSwgbm8/ICovCiAJfQogCXNtcF9ib290X2RhdGEuY3B1X2NvdW50 ID0gdG90YWxfY3B1czsKKwlzbXBfYnVpbGRfY3B1X21hcCgpOworI2lmZGVmIENPTkZJR19OVU1B CisJYnVpbGRfY3B1X3RvX25vZGVfbWFwKCk7CisjZW5kaWYKICNlbmRpZgogCS8qIE1ha2UgYm9v dC11cCBsb29rIHByZXR0eSAqLwogCXByaW50aygiJWQgQ1BVcyBhdmFpbGFibGUsICVkIENQVXMg dG90YWxcbiIsIGF2YWlsYWJsZV9jcHVzLCB0b3RhbF9jcHVzKTsKZGlmZiAtTnVyIGxpbnV4LTIu NC4yMC1iYXNlL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYyBsaW51eC0yLjQuMjAtZGNtL2FyY2gv aWE2NC9rZXJuZWwvc2V0dXAuYwotLS0gbGludXgtMi40LjIwLWJhc2UvYXJjaC9pYTY0L2tlcm5l bC9zZXR1cC5jCUZyaSBOb3YgMjkgMDg6NTM6MDkgMjAwMgorKysgbGludXgtMi40LjIwLWRjbS9h cmNoL2lhNjQva2VybmVsL3NldHVwLmMJV2VkIE1hciAxMiAxMzo0OTowNiAyMDAzCkBAIC0zNCw2 ICszNCw3IEBACiAKICNpbmNsdWRlIDxhc20vaWEzMi5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+ CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2lu Y2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2FsLmg+CkBAIC00OSwxNiAr NTAsOSBAQAogIyBlcnJvciAic3RydWN0IGNwdWluZm9faWE2NCB0b28gYmlnISIKICNlbmRpZgog Ci0jZGVmaW5lIE1JTihhLGIpCSgoYSkgPCAoYikgPyAoYSkgOiAoYikpCi0jZGVmaW5lIE1BWChh LGIpCSgoYSkgPiAoYikgPyAoYSkgOiAoYikpCi0KIGV4dGVybiBjaGFyIF9lbmQ7CiAKLSNpZmRl ZiBDT05GSUdfTlVNQQotIHN0cnVjdCBjcHVpbmZvX2lhNjQgKmJvb3RfY3B1X2RhdGE7Ci0jZWxz ZQogIHN0cnVjdCBjcHVpbmZvX2lhNjQgX2NwdV9kYXRhW05SX0NQVVNdIF9fYXR0cmlidXRlX18g KChzZWN0aW9uICgiX19zcGVjaWFsX3BhZ2Vfc2VjdGlvbiIpKSk7Ci0jZW5kaWYKIAogdW5zaWdu ZWQgbG9uZyBpYTY0X2N5Y2xlc19wZXJfdXNlYzsKIHN0cnVjdCBpYTY0X2Jvb3RfcGFyYW0gKmlh NjRfYm9vdF9wYXJhbTsKQEAgLTk1LDYgKzg5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcnN2ZF9yZWdp b24gcnN2ZF9yZWdpb25bSUE2NF9NQVhfUlNWRF9SRUdJT05TICsgMV07CiBzdGF0aWMgaW50IG51 bV9yc3ZkX3JlZ2lvbnM7CiAKKyNpZm5kZWYgQ09ORklHX0RJU0NPTlRJR01FTQogc3RhdGljIHVu c2lnbmVkIGxvbmcgYm9vdG1hcF9zdGFydDsgLyogcGh5c2ljYWwgYWRkcmVzcyB3aGVyZSB0aGUg Ym9vdG1lbSBtYXAgaXMgbG9jYXRlZCAqLwogCiBzdGF0aWMgaW50CkBAIC0xMDcsMTggKzEwMiw2 NCBAQAogCQkqbWF4X3BmbiA9IHBmbjsKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiAhQ09ORklH X0RJU0NPTlRJR01FTSAqLwogCiAjZGVmaW5lIElHTk9SRV9QRk4wCTEJLyogWFhYIGZpeCBtZTog aWdub3JlIHBmbiAwIHVudGlsIFRMQiBtaXNzIGhhbmRsZXIgaXMgdXBkYXRlZC4uLiAqLwogCisj aWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQogLyoKLSAqIEZyZWUgYXZhaWxhYmxlIG1lbW9yeSBi YXNlZCBvbiB0aGUgcHJpbWl0aXZlIG1hcCBjcmVhdGVkIGZyb20KLSAqIHRoZSBib290IHBhcmFt ZXRlcnMuIFRoaXMgcm91dGluZSBkb2VzIG5vdCBhc3N1bWUgdGhlIGluY29taW5nCi0gKiBzZWdt ZW50cyBhcmUgc29ydGVkLgorICogZWZpX21lbW1hcF93YWxrKCkga25vd3Mgbm90aGluZyBhYm91 dCBsYXlvdXQgb2YgbWVtb3J5IGFjcm9zcyBub2Rlcy4gRmluZAorICogb3V0IHRvIHdoaWNoIG5v ZGUgYSBibG9jayBvZiBtZW1vcnkgYmVsb25ncy4gIElnbm9yZSBtZW1vcnkgdGhhdCB3ZSBjYW5u b3QKKyAqIGlkZW50aWZ5LCBhbmQgc3BsaXQgYmxvY2tzIHRoYXQgcnVuIGFjcm9zcyBtdWx0aXBs ZSBub2Rlcy4KKyAqCisgKiBUYWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gcm91bmQgdGhlIHN0YXJ0 IGFkZHJlc3MgdXAgYW5kIHRoZSBlbmQgYWRkcmVzcworICogZG93biB0byBwYWdlIGJvdW5kYXJp ZXMuCiAgKi8KLXN0YXRpYyBpbnQKLWZyZWVfYXZhaWxhYmxlX21lbW9yeSAodW5zaWduZWQgbG9u ZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHZvaWQgKmFyZykKK3ZvaWQKK2NhbGxfcGVybm9k ZV9tZW1vcnkgKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB2b2lkICph cmcpCit7CisJdW5zaWduZWQgbG9uZyBycywgcmU7CisJdm9pZCAoKmZ1bmMpKHVuc2lnbmVkIGxv bmcsIHVuc2lnbmVkIGxvbmcsIGludCwgaW50KTsKKwlpbnQgaTsKKworCXN0YXJ0ID0gUEFHRV9B TElHTihzdGFydCk7CisJZW5kICY9IFBBR0VfTUFTSzsKKwlpZiAoc3RhcnQgPj0gZW5kKQorCQly ZXR1cm47CisKKwlmdW5jID0gYXJnOworCisJaWYgKCFudW1fbWVtYmxrcykgeworCQkvKiB0aGlz IG1hY2hpbmUgZG9lc24ndCBoYXZlIFNSQVQsICovCisJCS8qIHNvIGNhbGwgZnVuYyB3aXRoIG5p ZD0wLCBiYW5rPTAgKi8KKwkJaWYgKHN0YXJ0IDwgZW5kKQorCQkJKCpmdW5jKShzdGFydCwgZW5k IC0gc3RhcnQsIDAsIDApOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9t ZW1ibGtzOyBpKyspIHsKKwkJcnMgPSBtYXgoc3RhcnQsIG5vZGVfbWVtYmxrW2ldLnN0YXJ0X3Bh ZGRyKTsKKwkJcmUgPSBtaW4oZW5kLCBub2RlX21lbWJsa1tpXS5zdGFydF9wYWRkcitub2RlX21l bWJsa1tpXS5zaXplKTsKKworCQlpZiAocnMgPCByZSkKKwkJCSgqZnVuYykocnMsIHJlLXJzLCBu b2RlX21lbWJsa1tpXS5uaWQsCisJCQkJbm9kZV9tZW1ibGtbaV0uYmFuayk7CisJfQorfQorI2Vu ZGlmIC8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KKworLyoKKyAqIEZpbHRlciBpbmNvbWluZyBt ZW1vcnkgc2VnbWVudHMgYmFzZWQgb24gdGhlIHByaW1pdGl2ZSBtYXAgY3JlYXRlZCBmcm9tCisg KiB0aGUgYm9vdCBwYXJhbWV0ZXJzLiBTZWdtZW50cyBjb250YWluZWQgaW4gdGhlIG1hcCBhcmUg cmVtb3ZlZCBmcm9tIHRoZQorICogbWVtb3J5IHJhbmdlcy4gQSBjYWxsZXItc3BlY2lmaWVkIGZ1 bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBtZW1vcnkKKyAqIHJhbmdlcyB0aGF0IHJlbWFpbiBh ZnRlciBmaWx0ZXJpbmcuCisgKiBUaGlzIHJvdXRpbmUgZG9lcyBub3QgYXNzdW1lIHRoZSBpbmNv bWluZyBzZWdtZW50cyBhcmUgc29ydGVkLgorICovCitpbnQKK2ZpbHRlcl9yc3ZkX21lbW9yeSAo dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHZvaWQgKmFyZykKIHsKIAl1 bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQsIHByZXZfc3RhcnQ7CisJdm9pZCAo KmZ1bmMpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogCWludCBpOwogCiAjaWYgSUdO T1JFX1BGTjAKQEAgLTEzMiwxMyArMTczLDE4IEBACiAJICogbG93ZXN0IHBvc3NpYmxlIGFkZHJl c3Mod2Fsa2VyIHVzZXMgdmlydHVhbCkKIAkgKi8KIAlwcmV2X3N0YXJ0ID0gUEFHRV9PRkZTRVQ7 CisJZnVuYyA9IGFyZzsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fcnN2ZF9yZWdpb25zOyArK2kp IHsKLQkJcmFuZ2Vfc3RhcnQgPSBNQVgoc3RhcnQsIHByZXZfc3RhcnQpOwotCQlyYW5nZV9lbmQg ICA9IE1JTihlbmQsIHJzdmRfcmVnaW9uW2ldLnN0YXJ0KTsKKwkJcmFuZ2Vfc3RhcnQgPSBtYXgo c3RhcnQsIHByZXZfc3RhcnQpOworCQlyYW5nZV9lbmQgICA9IG1pbihlbmQsIHJzdmRfcmVnaW9u W2ldLnN0YXJ0KTsKIAogCQlpZiAocmFuZ2Vfc3RhcnQgPCByYW5nZV9lbmQpCi0JCQlmcmVlX2Jv b3RtZW0oX19wYShyYW5nZV9zdGFydCksIHJhbmdlX2VuZCAtIHJhbmdlX3N0YXJ0KTsKKyNpZmRl ZiBDT05GSUdfRElTQ09OVElHTUVNCisJCQljYWxsX3Blcm5vZGVfbWVtb3J5KF9fcGEocmFuZ2Vf c3RhcnQpLCBfX3BhKHJhbmdlX2VuZCksIGZ1bmMpOworI2Vsc2UKKwkJCSgqZnVuYykoX19wYShy YW5nZV9zdGFydCksIHJhbmdlX2VuZCAtIHJhbmdlX3N0YXJ0KTsKKyNlbmRpZgogCiAJCS8qIG5v dGhpbmcgbW9yZSBhdmFpbGFibGUgaW4gdGhpcyBzZWdtZW50ICovCiAJCWlmIChyYW5nZV9lbmQg PT0gZW5kKSByZXR1cm4gMDsKQEAgLTE1MCw2ICsxOTYsNyBAQAogfQogCiAKKyNpZm5kZWYgQ09O RklHX0RJU0NPTlRJR01FTQogLyoKICAqIEZpbmQgYSBwbGFjZSB0byBwdXQgdGhlIGJvb3RtYXAg YW5kIHJldHVybiBpdHMgc3RhcnRpbmcgYWRkcmVzcyBpbiBib290bWFwX3N0YXJ0LgogICogVGhp cyBhZGRyZXNzIG11c3QgYmUgcGFnZS1hbGlnbmVkLgpAQCAtMTcxLDggKzIxOCw4IEBACiAJZnJl ZV9zdGFydCA9IFBBR0VfT0ZGU0VUOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9yc3ZkX3JlZ2lv bnM7IGkrKykgewotCQlyYW5nZV9zdGFydCA9IE1BWChzdGFydCwgZnJlZV9zdGFydCk7Ci0JCXJh bmdlX2VuZCAgID0gTUlOKGVuZCwgcnN2ZF9yZWdpb25baV0uc3RhcnQgJiBQQUdFX01BU0spOwor CQlyYW5nZV9zdGFydCA9IG1heChzdGFydCwgZnJlZV9zdGFydCk7CisJCXJhbmdlX2VuZCAgID0g bWluKGVuZCwgcnN2ZF9yZWdpb25baV0uc3RhcnQgJiBQQUdFX01BU0spOwogCiAJCWlmIChyYW5n ZV9lbmQgPD0gcmFuZ2Vfc3RhcnQpIGNvbnRpbnVlOwkvKiBza2lwIG92ZXIgZW1wdHkgcmFuZ2Ug Ki8KIApAQCAtMTg4LDYgKzIzNSw3IEBACiAJfQogCXJldHVybiAwOwogfQorI2VuZGlmIC8qIENP TkZJR19ESVNDT05USUdNRU0gKi8KIAogc3RhdGljIHZvaWQKIHNvcnRfcmVnaW9ucyAoc3RydWN0 IHJzdmRfcmVnaW9uICpyc3ZkX3JlZ2lvbiwgaW50IG1heCkKQEAgLTI1Miw2ICszMDAsMTQgQEAK IAogCXNvcnRfcmVnaW9ucyhyc3ZkX3JlZ2lvbiwgbnVtX3JzdmRfcmVnaW9ucyk7CiAKKyNpZmRl ZiBDT05GSUdfRElTQ09OVElHTUVNCisJeworCQlleHRlcm4gdm9pZCBkaXNjb250aWdfbWVtX2lu aXQodm9pZCk7CisJCWJvb3RtYXBfc2l6ZSA9IG1heF9wZm4gPSAwOyAgICAgLyogc3RvcCBnY2Mg d2FybmluZ3MgKi8KKwkJZGlzY29udGlnX21lbV9pbml0KCk7CisJfQorI2Vsc2UgLyogIUNPTkZJ R19ESVNDT05USUdNRU0gKi8KKwogCS8qIGZpcnN0IGZpbmQgaGlnaGVzdCBwYWdlIGZyYW1lIG51 bWJlciAqLwogCW1heF9wZm4gPSAwOwogCWVmaV9tZW1tYXBfd2FsayhmaW5kX21heF9wZm4sICZt YXhfcGZuKTsKQEAgLTI2OCw4ICszMjQsOSBAQAogCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1l bShib290bWFwX3N0YXJ0ID4+IFBBR0VfU0hJRlQsIG1heF9wZm4pOwogCiAJLyogRnJlZSBhbGwg YXZhaWxhYmxlIG1lbW9yeSwgdGhlbiBtYXJrIGJvb3RtZW0tbWFwIGFzIGJlaW5nIGluIHVzZS4g ICovCi0JZWZpX21lbW1hcF93YWxrKGZyZWVfYXZhaWxhYmxlX21lbW9yeSwgMCk7CisJZWZpX21l bW1hcF93YWxrKGZpbHRlcl9yc3ZkX21lbW9yeSwgZnJlZV9ib290bWVtKTsKIAlyZXNlcnZlX2Jv b3RtZW0oYm9vdG1hcF9zdGFydCwgYm9vdG1hcF9zaXplKTsKKyNlbmRpZiAvKiAhQ09ORklHX0RJ U0NPTlRJR01FTSAqLwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJaWYgKGlhNjRf Ym9vdF9wYXJhbS0+aW5pdHJkX3N0YXJ0KSB7CkBAIC0yOTYsNiArMzUzLDE5IEBACiAKIAllZmlf aW5pdCgpOwogCisjaWZkZWYgQ09ORklHX0FDUElfQk9PVAorCS8qIEluaXRpYWxpemUgdGhlIEFD UEkgYm9vdC10aW1lIHRhYmxlIHBhcnNlciAqLworCWFjcGlfdGFibGVfaW5pdCgqY21kbGluZV9w KTsKKworI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKKwlhY3BpX251bWFfaW5pdCgpOworI2VuZGlm CisjZWxzZQorIyBpZmRlZiBDT05GSUdfU01QCisJc21wX2J1aWxkX2NwdV9tYXAoKTsJLyogaGFw cGVucywgZS5nLiwgd2l0aCB0aGUgU2tpIHNpbXVsYXRvciAqLworIyBlbmRpZgorI2VuZGlmIC8q IENPTkZJR19BUENJX0JPT1QgKi8KKwogCWlvbWVtX3Jlc291cmNlLmVuZCA9IH4wVUw7CS8qIEZJ WE1FIHByb2JhYmx5IGJlbG9uZ3MgZWxzZXdoZXJlICovCiAJZmluZF9tZW1vcnkoKTsKIApAQCAt NTM3LDQwICs2MDcsMTEgQEAKIAlwYWxfdm1faW5mb18yX3VfdCB2bWk7CiAJdW5zaWduZWQgaW50 IG1heF9jdHg7CiAJc3RydWN0IGNwdWluZm9faWE2NCAqbXlfY3B1X2RhdGE7Ci0jaWZkZWYgQ09O RklHX05VTUEKLQlpbnQgY3B1LCBvcmRlcjsKIAotCS8qCi0JICogSWYgTlVNQSBpcyBjb25maWd1 cmVkLCB0aGUgY3B1X2RhdGEgYXJyYXkgaXMgbm90IHByZWFsbG9jYXRlZC4gVGhlIGJvb3QgY3B1 Ci0JICogYWxsb2NhdGVzIGVudHJpZXMgZm9yIGV2ZXJ5IHBvc3NpYmxlIGNwdS4gQXMgdGhlIHJl bWFpbmluZyBjcHVzIGNvbWUgb25saW5lLAotCSAqIHRoZXkgcmVhbGxvY2F0ZSBhIG5ldyBjcHVf ZGF0YSBzdHJ1Y3R1cmUgb24gdGhlaXIgbG9jYWwgbm9kZS4gVGhpcyBleHRyYSB3b3JrCi0JICog aXMgcmVxdWlyZWQgYmVjYXVzZSBzb21lIGJvb3QgY29kZSByZWZlcmVuY2VzIGFsbCBjcHVfZGF0 YSBzdHJ1Y3R1cmVzCi0JICogYmVmb3JlIHRoZSBjcHVzIGFyZSBhY3R1YWxseSBzdGFydGVkLgot CSAqLwotCWlmICghYm9vdF9jcHVfZGF0YSkgewotCQlteV9jcHVfZGF0YSA9IGFsbG9jX2Jvb3Rt ZW1fcGFnZXNfbm9kZShOT0RFX0RBVEEobnVtYV9ub2RlX2lkKCkpLAotCQkJCQkJICAgICAgIHNp emVvZihzdHJ1Y3QgY3B1aW5mb19pYTY0KSk7Ci0JCWJvb3RfY3B1X2RhdGEgPSBteV9jcHVfZGF0 YTsKLQkJbXlfY3B1X2RhdGEtPmNwdV9kYXRhWzBdID0gbXlfY3B1X2RhdGE7Ci0JCWZvciAoY3B1 ID0gMTsgY3B1IDwgTlJfQ1BVUzsgKytjcHUpCi0JCQlteV9jcHVfZGF0YS0+Y3B1X2RhdGFbY3B1 XQotCQkJCT0gYWxsb2NfYm9vdG1lbV9wYWdlc19ub2RlKE5PREVfREFUQShudW1hX25vZGVfaWQo KSksCi0JCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBjcHVpbmZvX2lhNjQpKTsKLQkJZm9yIChjcHUg PSAxOyBjcHUgPCBOUl9DUFVTOyArK2NwdSkKLQkJCW1lbWNweShteV9jcHVfZGF0YS0+Y3B1X2Rh dGFbY3B1XS0+Y3B1X2RhdGEsCi0JCQkgICAgICAgbXlfY3B1X2RhdGEtPmNwdV9kYXRhLCBzaXpl b2YobXlfY3B1X2RhdGEtPmNwdV9kYXRhKSk7Ci0JfSBlbHNlIHsKLQkJb3JkZXIgPSBnZXRfb3Jk ZXIoc2l6ZW9mKHN0cnVjdCBjcHVpbmZvX2lhNjQpKTsKLQkJbXlfY3B1X2RhdGEgPSBwYWdlX2Fk ZHJlc3MoYWxsb2NfcGFnZXNfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTCwgb3JkZXIp KTsKLQkJbWVtY3B5KG15X2NwdV9kYXRhLCBib290X2NwdV9kYXRhLT5jcHVfZGF0YVtzbXBfcHJv Y2Vzc29yX2lkKCldLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjcHVpbmZvX2lhNjQpKTsKLQkJ X19mcmVlX3BhZ2VzKHZpcnRfdG9fcGFnZShib290X2NwdV9kYXRhLT5jcHVfZGF0YVtzbXBfcHJv Y2Vzc29yX2lkKCldKSwKLQkJCSAgICAgb3JkZXIpOwotCQlmb3IgKGNwdSA9IDA7IGNwdSA8IE5S X0NQVVM7ICsrY3B1KQotCQkJYm9vdF9jcHVfZGF0YS0+Y3B1X2RhdGFbY3B1XS0+Y3B1X2RhdGFb c21wX3Byb2Nlc3Nvcl9pZCgpXSA9IG15X2NwdV9kYXRhOwotCX0KLSNlbHNlCiAJbXlfY3B1X2Rh dGEgPSBjcHVfZGF0YShzbXBfcHJvY2Vzc29yX2lkKCkpOworCisjaWZkZWYgQ09ORklHX0RJU0NP TlRJR01FTQorICAgICAgICBteV9jcHVfZGF0YS0+bm9kZV9kYXRhID0gZ2V0X25vZGVfZGF0YV9w dHIoKTsKICNlbmRpZgogCiAJLyoKZGlmZiAtTnVyIGxpbnV4LTIuNC4yMC1iYXNlL2FyY2gvaWE2 NC9rZXJuZWwvc21wYm9vdC5jIGxpbnV4LTIuNC4yMC1kY20vYXJjaC9pYTY0L2tlcm5lbC9zbXBi b290LmMKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCU1v biBNYXIgIDMgMTA6MjQ6MjEgMjAwMworKysgbGludXgtMi40LjIwLWRjbS9hcmNoL2lhNjQva2Vy bmVsL3NtcGJvb3QuYwlXZWQgTWFyIDEyIDEzOjM0OjA4IDIwMDMKQEAgLTU3NSwzICs1NzUsNjYg QEAKIAkJc21wX251bV9jcHVzID0gMTsKIAl9CiB9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBs b2dpY2FsIENQVSBudW1iZXIgdG8gU0FQSUNJRCBtYXBwaW5nCisgKi8KK3ZvaWQgX19pbml0Citz bXBfYnVpbGRfY3B1X21hcCAodm9pZCkKK3sKKwlpbnQgc2FwaWNpZCwgY3B1LCBpOworCWludCBi b290X2NwdV9pZCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJZm9yIChjcHUgPSAwOyBj cHUgPCBOUl9DUFVTOyBjcHUrKykKKwkJaWE2NF9jcHVfdG9fc2FwaWNpZFtjcHVdID0gLTE7CisK KwlpYTY0X2NwdV90b19zYXBpY2lkWzBdID0gYm9vdF9jcHVfaWQ7CisKKwlmb3IgKGNwdSA9IDEs IGkgPSAwOyBpIDwgc21wX2Jvb3RfZGF0YS5jcHVfY291bnQ7IGkrKykgeworCQlzYXBpY2lkID0g c21wX2Jvb3RfZGF0YS5jcHVfcGh5c19pZFtpXTsKKwkJaWYgKHNhcGljaWQgPT0gLTEgfHwgc2Fw aWNpZCA9PSBib290X2NwdV9pZCkKKwkJCWNvbnRpbnVlOworCQlpYTY0X2NwdV90b19zYXBpY2lk W2NwdV0gPSBzYXBpY2lkOworCQljcHUrKzsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfTlVNQQor CisvKiBvbiB3aGljaCBub2RlIGlzIGVhY2ggbG9naWNhbCBDUFUgKG9uZSBjYWNoZWxpbmUgZXZl biBmb3IgNjQgQ1BVcykgKi8KK3ZvbGF0aWxlIGNoYXIgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNd IF9fY2FjaGVsaW5lX2FsaWduZWQ7CisvKiB3aGljaCBsb2dpY2FsIENQVXMgYXJlIG9uIHdoaWNo IG5vZGVzICovCit2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG5vZGVfdG9fY3B1X21hc2tbTUFYX05V TU5PREVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOworCisvKgorICogQnVpbGQgY3B1IHRvIG5vZGUg bWFwcGluZyBhbmQgaW5pdGlhbGl6ZSB0aGUgcGVyIG5vZGUgY3B1IG1hc2tzLgorICovCit2b2lk IF9faW5pdAorYnVpbGRfY3B1X3RvX25vZGVfbWFwICh2b2lkKQoreworCWludCBjcHUsIGksIG5v ZGU7CisKKwlmb3Iobm9kZT0wOyBub2RlPE1BWF9OVU1OT0RFUzsgbm9kZSsrKQorCQlub2RlX3Rv X2NwdV9tYXNrW25vZGVdID0gMDsKKwlmb3IoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgKytjcHUp IHsKKwkJLyoKKwkJICogQWxsIEl0YW5pdW0gTlVNQSBwbGF0Zm9ybXMgSSBrbm93IHVzZSBBQ1BJ LCBzbyBtYXliZSB3ZQorCQkgKiBjYW4gZHJvcCB0aGlzIGlmZGVmIGNvbXBsZXRlbHkuICAgICAg ICAgICAgICAgICAgICBbRUZdCisJCSAqLworI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKKwkJbm9k ZSA9IC0xOworCQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgKytpKQorCQkJaWYgKGNwdV9waHlz aWNhbF9pZChjcHUpID09IG5vZGVfY3B1aWRbaV0ucGh5c19pZCkgeworCQkJCW5vZGUgPSBub2Rl X2NwdWlkW2ldLm5pZDsKKwkJCQlicmVhazsKKwkJCX0KKyNlbHNlCisjCQllcnJvciBGaXhtZTog RHVubm8gaG93IHRvIGJ1aWxkIENQVS10by1ub2RlIG1hcC4KKyNlbmRpZgorCQljcHVfdG9fbm9k ZV9tYXBbY3B1XSA9IG5vZGU7CisJCWlmIChub2RlID49IDApCisJCQlub2RlX3RvX2NwdV9tYXNr W25vZGVdIHw9ICgxVUwgPDwgY3B1KTsKKwl9Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfTlVNQSAq LwpkaWZmIC1OdXIgbGludXgtMi40LjIwLWJhc2UvYXJjaC9pYTY0L21tL01ha2VmaWxlIGxpbnV4 LTIuNC4yMC1kY20vYXJjaC9pYTY0L21tL01ha2VmaWxlCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9h cmNoL2lhNjQvbW0vTWFrZWZpbGUJTW9uIE1hciAgMyAxMDoyNDoyMSAyMDAzCisrKyBsaW51eC0y LjQuMjAtZGNtL2FyY2gvaWE2NC9tbS9NYWtlZmlsZQlNb24gTWFyICAzIDEwOjU1OjEyIDIwMDMK QEAgLTEyLDUgKzEyLDcgQEAKIGV4cG9ydC1vYmpzIDo9IGluaXQubwogCiBvYmoteQkgOj0gaW5p dC5vIGZhdWx0Lm8gdGxiLm8gZXh0YWJsZS5vCitvYmotJChDT05GSUdfTlVNQSkgKz0gbnVtYS5v CitvYmotJChDT05GSUdfRElTQ09OVElHTUVNKSArPSBkaXNjb250aWcubwogCiBpbmNsdWRlICQo VE9QRElSKS9SdWxlcy5tYWtlCmRpZmYgLU51ciBsaW51eC0yLjQuMjAtYmFzZS9hcmNoL2lhNjQv bW0vZGlzY29udGlnLmMgbGludXgtMi40LjIwLWRjbS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMK LS0tIGxpbnV4LTIuNC4yMC1iYXNlL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwlUaHUgSmFuICAx IDA5OjAwOjAwIDE5NzAKKysrIGxpbnV4LTIuNC4yMC1kY20vYXJjaC9pYTY0L21tL2Rpc2NvbnRp Zy5jCVdlZCBNYXIgMTIgMTM6NTc6MTAgMjAwMwpAQCAtMCwwICsxLDMxNSBAQAorLyoKKyAqIENv cHlyaWdodCAoYykgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAxIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKGMp IDIwMDEgVG9ueSBMdWNrIDx0b255Lmx1Y2tAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChjKSAy MDAyIE5FQyBDb3JwLgorICogQ29weXJpZ2h0IChjKSAyMDAyIEtpbWlvIFN1Z2FudW1hIDxrLXN1 Z2FudW1hQGRhLmpwLm5lYy5jb20+CisgKi8KKworLyoKKyAqIFBsYXRmb3JtIGluaXRpYWxpemF0 aW9uIGZvciBEaXNjb250aWcgTWVtb3J5CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2lu Y2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRl IDxsaW51eC9lZmkuaD4KKworCisvKgorICogUm91bmQgYW4gYWRkcmVzcyB1cHdhcmQgdG8gdGhl IG5leHQgbXVsdGlwbGUgb2YgR1JBTlVMRSBzaXplLgorICovCisjZGVmaW5lIEdSQU5VTEVST1VO RFVQKG4pICgoKG4pK0lBNjRfR1JBTlVMRV9TSVpFLTEpICYgfihJQTY0X0dSQU5VTEVfU0laRS0x KSkKKworc3RhdGljIHN0cnVjdCBpYTY0X25vZGVfZGF0YQkqbm9kZV9kYXRhW05SX05PREVTXTsK K3N0YXRpYyBsb25nCQkJYm9vdF9wZ19kYXRhWzgqTlJfTk9ERVMrc2l6ZW9mKHBnX2RhdGFfdCld ICBfX2luaXRkYXRhOworc3RhdGljIHBnX2RhdGFfdAkJKnBnX2RhdGFfcHRyW05SX05PREVTXSBf X2luaXRkYXRhOworc3RhdGljIGJvb3RtZW1fZGF0YV90CQliZGF0YVtOUl9OT0RFU11bTlJfQkFO S1NfUEVSX05PREUrMV0gX19pbml0ZGF0YTsKKworZXh0ZXJuIGludCAgZmlsdGVyX3JzdmRfbWVt b3J5ICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdm9pZCAqYXJnKTsK KworLyoKKyAqIFJldHVybiB0aGUgY29tcGFjdCBub2RlIG51bWJlciBvZiB0aGlzIGNwdS4gVXNl ZCBwcmlvciB0bworICogc2V0dGluZyB1cCB0aGUgY3B1X2RhdGEgYXJlYS4KKyAqCU5vdGUgLSBu b3QgZmFzdCwgaW50ZW5kZWQgZm9yIGJvb3QgdXNlIG9ubHkhIQorICovCitpbnQKK2Jvb3RfZ2V0 X2xvY2FsX25vZGVpZCh2b2lkKQoreworCWludAlpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0NQ VVM7IGkrKykKKwkJaWYgKG5vZGVfY3B1aWRbaV0ucGh5c19pZCA9PSBoYXJkX3NtcF9wcm9jZXNz b3JfaWQoKSkKKwkJCXJldHVybiBub2RlX2NwdWlkW2ldLm5pZDsKKworCS8qIG5vZGUgaW5mbyBt aXNzaW5nLCBzbyBuaWQgc2hvdWxkIGJlIDAuLiAqLworCXJldHVybiAwOworfQorCisvKgorICog UmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcGdfZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgbm9kZS4KKyAq IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBPTkxZIGluIGVhcmx5IGJvb3QgYmVmb3JlIHRoZSBjcHVf ZGF0YQorICogc3RydWN0dXJlIGlzIGF2YWlsYWJsZS4KKyAqLworcGdfZGF0YV90KiBfX2luaXQK K2Jvb3RfZ2V0X3BnX2RhdGFfcHRyKGxvbmcgbm9kZSkKK3sKKwlyZXR1cm4gcGdfZGF0YV9wdHJb bm9kZV07Cit9CisKKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5vZGUgZGF0YSBm b3IgdGhlIGN1cnJlbnQgbm9kZS4KKyAqCShib290dGltZSBpbml0aWFsaXphdGlvbiBvbmx5KQor ICovCitzdHJ1Y3QgaWE2NF9ub2RlX2RhdGEgKgorZ2V0X25vZGVfZGF0YV9wdHIodm9pZCkKK3sK KwlyZXR1cm4gbm9kZV9kYXRhW2Jvb3RfZ2V0X2xvY2FsX25vZGVpZCgpXTsKK30KKworLyoKKyAq IFdlIGFsbG9jYXRlIG9uZSBvZiB0aGUgYm9vdG1lbV9kYXRhX3Qgc3RydWN0cyBmb3IgZWFjaCBw aWVjZSBvZiBtZW1vcnkKKyAqIHRoYXQgd2Ugd2lzaCB0byB0cmVhdCBhcyBhIGNvbnRpZ3VvdXMg YmxvY2suICBFYWNoIHN1Y2ggYmxvY2sgbXVzdCBzdGFydAorICogb24gYSBCQU5LU0laRSBib3Vu ZGFyeS4gIE11bHRpcGxlIGJhbmtzIHBlciBub2RlIGlzIG5vdCBzdXBwb3J0ZWQuCisgKi8KK3N0 YXRpYyBpbnQgX19pbml0CitidWlsZF9tYXBzKHVuc2lnbmVkIGxvbmcgcHN0YXJ0LCB1bnNpZ25l ZCBsb25nIGxlbmd0aCwgaW50IG5vZGUpCit7CisJYm9vdG1lbV9kYXRhX3QJKmJkcDsKKwl1bnNp Z25lZCBsb25nIGNzdGFydCwgZXBmbjsKKworCWJkcCA9IHBnX2RhdGFfcHRyW25vZGVdLT5iZGF0 YTsKKwllcGZuID0gR1JBTlVMRVJPVU5EVVAocHN0YXJ0ICsgbGVuZ3RoKSA+PiBQQUdFX1NISUZU OworCWNzdGFydCA9IHBzdGFydCAmIH4oQkFOS1NJWkUgLSAxKTsKKworCWlmICghYmRwLT5ub2Rl X2xvd19wZm4pIHsKKwkJYmRwLT5ub2RlX2Jvb3Rfc3RhcnQgPSBjc3RhcnQ7CisJCWJkcC0+bm9k ZV9sb3dfcGZuID0gZXBmbjsKKwl9IGVsc2UgeworCQliZHAtPm5vZGVfYm9vdF9zdGFydCA9IG1p bihjc3RhcnQsIGJkcC0+bm9kZV9ib290X3N0YXJ0KTsKKwkJYmRwLT5ub2RlX2xvd19wZm4gPSBt YXgoZXBmbiwgYmRwLT5ub2RlX2xvd19wZm4pOworCX0KKworCW1pbl9sb3dfcGZuID0gbWluKG1p bl9sb3dfcGZuLCBiZHAtPm5vZGVfYm9vdF9zdGFydD4+UEFHRV9TSElGVCk7CisJbWF4X2xvd19w Zm4gPSBtYXgobWF4X2xvd19wZm4sIGJkcC0+bm9kZV9sb3dfcGZuKTsKKworCXJldHVybiAwOwor fQorCisvKgorICogRmluZCBzcGFjZSBvbiBlYWNoIG5vZGUgZm9yIHRoZSBib290bWVtIG1hcC4K KyAqCisgKiBDYWxsZWQgYnkgZWZpX21lbW1hcF93YWxrIHRvIGZpbmQgYm9vdCBtZW1vcnkgb24g ZWFjaCBub2RlLiBOb3RlIHRoYXQKKyAqIG9ubHkgYmxvY2tzIHRoYXQgYXJlIGZyZWUgYXJlIHBh c3NlZCB0byB0aGlzIHJvdXRpbmUgKGN1cnJlbnRseSBmaWx0ZXJlZCBieQorICogZnJlZV9hdmFp bGFibGVfbWVtb3J5KS4KKyAqLworc3RhdGljIGludCBfX2luaXQKK2ZpbmRfYm9vdG1hcF9zcGFj ZSh1bnNpZ25lZCBsb25nIHBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGludCBub2RlKQor eworCXVuc2lnbmVkIGxvbmcJbWFwc2l6ZSwgcGFnZXMsIGVwZm47CisJYm9vdG1lbV9kYXRhX3QJ KmJkcDsKKworCWVwZm4gPSAocHN0YXJ0ICsgbGVuZ3RoKSA+PiBQQUdFX1NISUZUOworCWJkcCA9 ICZwZ19kYXRhX3B0cltub2RlXS0+YmRhdGFbMF07CisKKwlpZiAocHN0YXJ0IDwgYmRwLT5ub2Rl X2Jvb3Rfc3RhcnQgfHwgZXBmbiA+IGJkcC0+bm9kZV9sb3dfcGZuKQorCQlyZXR1cm4gMDsKKwor CWlmICghYmRwLT5ub2RlX2Jvb3RtZW1fbWFwKSB7CisJCXBhZ2VzID0gYmRwLT5ub2RlX2xvd19w Zm4gLSAoYmRwLT5ub2RlX2Jvb3Rfc3RhcnQ+PlBBR0VfU0hJRlQpOworCQltYXBzaXplID0gYm9v dG1lbV9ib290bWFwX3BhZ2VzKHBhZ2VzKSA8PCBQQUdFX1NISUZUOworCQlpZiAobGVuZ3RoID4g bWFwc2l6ZSkgeworCQkJaW5pdF9ib290bWVtX25vZGUoCisJCQkJQk9PVF9OT0RFX0RBVEEobm9k ZSksCisJCQkJcHN0YXJ0Pj5QQUdFX1NISUZULCAKKwkJCQliZHAtPm5vZGVfYm9vdF9zdGFydD4+ UEFHRV9TSElGVCwKKwkJCQliZHAtPm5vZGVfbG93X3Bmbik7CisJCX0KKworCX0KKworCXJldHVy biAwOworfQorCisKKy8qCisgKiBGcmVlIGF2YWlsYWJsZSBtZW1vcnkgdG8gdGhlIGJvb3RtZW0g YWxsb2NhdG9yLgorICoKKyAqIE5vdGUgdGhhdCBvbmx5IGJsb2NrcyB0aGF0IGFyZSBmcmVlIGFy ZSBwYXNzZWQgdG8gdGhpcyByb3V0aW5lIChjdXJyZW50bHkgCisgKiBmaWx0ZXJlZCBieSBmcmVl X2F2YWlsYWJsZV9tZW1vcnkpLgorICoKKyAqLworc3RhdGljIGludCBfX2luaXQKK2Rpc2NvbnRp Z19mcmVlX2Jvb3RtZW1fbm9kZSh1bnNpZ25lZCBsb25nIHBzdGFydCwgdW5zaWduZWQgbG9uZyBs ZW5ndGgsIGludCBub2RlKQoreworCWZyZWVfYm9vdG1lbV9ub2RlKEJPT1RfTk9ERV9EQVRBKG5v ZGUpLCBwc3RhcnQsIGxlbmd0aCk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogUmVzZXJ2 ZSB0aGUgc3BhY2UgdXNlZCBieSB0aGUgYm9vdG1lbSBtYXBzLgorICovCitzdGF0aWMgdm9pZCBf X2luaXQKK2Rpc2NvbnRpZ19yZXNlcnZlX2Jvb3RtZW0odm9pZCkKK3sKKwlpbnQJCW5vZGU7CisJ dW5zaWduZWQgbG9uZwltYXBiYXNlLCBtYXBzaXplLCBwYWdlczsKKwlib290bWVtX2RhdGFfdAkq YmRwOworCisJZm9yIChub2RlID0gMDsgbm9kZSA8IG51bW5vZGVzOyBub2RlKyspIHsKKwkJYmRw ID0gQk9PVF9OT0RFX0RBVEEobm9kZSktPmJkYXRhOworCisJCXBhZ2VzID0gYmRwLT5ub2RlX2xv d19wZm4gLSAoYmRwLT5ub2RlX2Jvb3Rfc3RhcnQ+PlBBR0VfU0hJRlQpOworCQltYXBzaXplID0g Ym9vdG1lbV9ib290bWFwX3BhZ2VzKHBhZ2VzKSA8PCBQQUdFX1NISUZUOworCQltYXBiYXNlID0g X19wYShiZHAtPm5vZGVfYm9vdG1lbV9tYXApOworCQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShCT09U X05PREVfREFUQShub2RlKSwgbWFwYmFzZSwgbWFwc2l6ZSk7CisJfQorfQorCisvKgorICogQWxs b2NhdGUgcGVyIG5vZGUgdGFibGVzLgorICogCS0gdGhlIHBnX2RhdGEgc3RydWN0dXJlIGlzIGFs bG9jYXRlZCBvbiBlYWNoIG5vZGUuIFRoaXMgbWluaW1pemVzIG9mZm5vZGUgCisgKgkgIG1lbW9y eSByZWZlcmVuY2VzCisgKgktIHRoZSBub2RlIGRhdGEgaXMgYWxsb2NhdGVkICYgaW5pdGlhbGl6 ZWQuIFBvcnRpb25zIG9mIHRoaXMgc3RydWN0dXJlIGlzIHJlYWQtb25seSAoYWZ0ZXIgCisgKgkg IGJvb3QpIGFuZCBjb250YWlucyBub2RlLWxvY2FsIHBvaW50ZXJzIHRvIHVzZWZ1bHMgZGF0YSBz dHJ1Y3R1cmVzIGxvY2F0ZWQgb24KKyAqCSAgb3RoZXIgbm9kZXMuCisgKgorICogV2UgYWxzbyBz d2l0Y2ggdG8gdXNpbmcgdGhlICJyZWFsIiBwZ19kYXRhIHN0cnVjdHVyZXMgYXQgdGhpcyBwb2lu dC4gRWFybGllciBpbiBib290LCB3ZQorICogdXNlIGEgZGlmZmVyZW50IHN0cnVjdHVyZS4gVGhl IG9ubHkgdXNlIGZvciBwZ19kYXRhIHByaW9yIHRvIHRoZSBwb2ludCBpbiBib290IGlzIHRvIGdl dCAKKyAqIHRoZSBwb2ludGVyIHRvIHRoZSBiZGF0YSBmb3IgdGhlIG5vZGUuCisgKi8KK3N0YXRp YyB2b2lkIF9faW5pdAorYWxsb2NhdGVfcGVybm9kZV9zdHJ1Y3R1cmVzKHZvaWQpCit7CisJcGdf ZGF0YV90CSpwZ2RhdD0wLCAqbmV3X3BnZGF0X2xpc3Q9MDsKKwlpbnQJCW5vZGUsIG15bm9kZTsK KworCW15bm9kZSA9IGJvb3RfZ2V0X2xvY2FsX25vZGVpZCgpOworCWZvciAobm9kZSA9IG51bW5v ZGVzIC0gMTsgbm9kZSA+PSAwIDsgbm9kZS0tKSB7CisJCW5vZGVfZGF0YVtub2RlXSA9IGFsbG9j X2Jvb3RtZW1fbm9kZShCT09UX05PREVfREFUQShub2RlKSwgc2l6ZW9mIChzdHJ1Y3QgaWE2NF9u b2RlX2RhdGEpKTsKKwkJcGdkYXQgPSBfX2FsbG9jX2Jvb3RtZW1fbm9kZShCT09UX05PREVfREFU QShub2RlKSwgc2l6ZW9mKHBnX2RhdGFfdCksIFNNUF9DQUNIRV9CWVRFUywgMCk7CisJCXBnZGF0 LT5iZGF0YSA9ICYoYmRhdGFbbm9kZV1bMF0pOworCQlwZ19kYXRhX3B0cltub2RlXSA9IHBnZGF0 OworCQlwZ2RhdC0+bm9kZV9uZXh0ID0gbmV3X3BnZGF0X2xpc3Q7CisJCW5ld19wZ2RhdF9saXN0 ID0gcGdkYXQ7CisJfQorCQorCW1lbWNweShub2RlX2RhdGFbbXlub2RlXS0+cGdfZGF0YV9wdHJz LCBwZ19kYXRhX3B0ciwgc2l6ZW9mKHBnX2RhdGFfcHRyKSk7CisJbWVtY3B5KG5vZGVfZGF0YVtt eW5vZGVdLT5ub2RlX2RhdGFfcHRycywgbm9kZV9kYXRhLCBzaXplb2Yobm9kZV9kYXRhKSk7CisK KwlwZ2RhdF9saXN0ID0gbmV3X3BnZGF0X2xpc3Q7Cit9CisKKy8qCisgKiBDYWxsZWQgZWFybHkg aW4gYm9vdCB0byBzZXR1cCB0aGUgYm9vdCBtZW1vcnkgYWxsb2NhdG9yLCBhbmQgdG8KKyAqIGFs bG9jYXRlIHRoZSBub2RlLWxvY2FsIHBnX2RhdGEgJiBub2RlLWRpcmVjdG9yeSBkYXRhIHN0cnVj dHVyZXMuLgorICovCit2b2lkIF9faW5pdAorZGlzY29udGlnX21lbV9pbml0KHZvaWQpCit7CisJ aW50CW5vZGU7CisKKwlpZiAobnVtbm9kZXMgPT0gMCkgeworCQlwcmludGsoIm5vZGUgaW5mbyBt aXNzaW5nIVxuIik7CisJCW51bW5vZGVzID0gMTsKKwl9CisKKwlmb3IgKG5vZGUgPSAwOyBub2Rl IDwgbnVtbm9kZXM7IG5vZGUrKykgeworCQlwZ19kYXRhX3B0cltub2RlXSA9IChwZ19kYXRhX3Qq KSAmYm9vdF9wZ19kYXRhW25vZGVdOworCQlwZ19kYXRhX3B0cltub2RlXS0+YmRhdGEgPSAmYmRh dGFbbm9kZV1bMF07CisJfQorCisJbWluX2xvd19wZm4gPSAtMTsKKwltYXhfbG93X3BmbiA9IDA7 CisKKyAgICAgICAgZWZpX21lbW1hcF93YWxrKGZpbHRlcl9yc3ZkX21lbW9yeSwgYnVpbGRfbWFw cyk7CisgICAgICAgIGVmaV9tZW1tYXBfd2FsayhmaWx0ZXJfcnN2ZF9tZW1vcnksIGZpbmRfYm9v dG1hcF9zcGFjZSk7CisgICAgICAgIGVmaV9tZW1tYXBfd2FsayhmaWx0ZXJfcnN2ZF9tZW1vcnks IGRpc2NvbnRpZ19mcmVlX2Jvb3RtZW1fbm9kZSk7CisJZGlzY29udGlnX3Jlc2VydmVfYm9vdG1l bSgpOworCWFsbG9jYXRlX3Blcm5vZGVfc3RydWN0dXJlcygpOworfQorCisvKgorICogSW5pdGlh bGl6ZSB0aGUgcGFnaW5nIHN5c3RlbS4KKyAqCS0gZGV0ZXJtaW5lIHNpemVzIG9mIGVhY2ggbm9k ZQorICoJLSBpbml0aWFsaXplIHRoZSBwYWdpbmcgc3lzdGVtIGZvciB0aGUgbm9kZQorICoJLSBi dWlsZCB0aGUgbm9kZWRpciBmb3IgdGhlIG5vZGUuIFRoaXMgY29udGFpbnMgcG9pbnRlcnMgdG8K KyAqCSAgdGhlIHBlci1iYW5rIG1lbV9tYXAgZW50cmllcy4KKyAqCS0gZml4IHRoZSBwYWdlIHN0 cnVjdCAidmlydHVhbCIgcG9pbnRlcnMuIFRoZXNlIGFyZSBiYW5rIHNwZWNpZmljCisgKgkgIHZh bHVlcyB0aGF0IHRoZSBwYWdpbmcgc3lzdGVtIGRvZXNudCB1bmRlcnN0YW5kLgorICoJLSByZXBs aWNhdGUgdGhlIG5vZGVkaXIgc3RydWN0dXJlIHRvIG90aGVyIG5vZGVzCQorICovIAorCit2b2lk IF9faW5pdAorZGlzY29udGlnX3BhZ2luZ19pbml0KHZvaWQpCit7CisJaW50CQlub2RlLCBteW5v ZGU7CisJdW5zaWduZWQgbG9uZwltYXhfZG1hLCB6b25lc19zaXplW01BWF9OUl9aT05FU107CisJ dW5zaWduZWQgbG9uZwlrYWRkciwgZWthZGRyLCBiaWQ7CisJc3RydWN0IHBhZ2UJKnBhZ2U7CisJ Ym9vdG1lbV9kYXRhX3QJKmJkcDsKKworCW1heF9tYXBuciA9IDA7CisJbWF4X2RtYSA9IHZpcnRf dG9fcGh5cygodm9pZCAqKSBNQVhfRE1BX0FERFJFU1MpID4+IFBBR0VfU0hJRlQ7CisKKwlteW5v ZGUgPSBib290X2dldF9sb2NhbF9ub2RlaWQoKTsKKwlmb3IgKGJpZCA9IDA7IGJpZCA8IE5SX0JB TktTOyBiaWQrKykgeworCQlub2RlX2RhdGFbbXlub2RlXS0+bm9kZV9pZF9tYXBbYmlkXSA9IC0x OworCQlub2RlX2RhdGFbbXlub2RlXS0+YmFua19tZW1fbWFwX2Jhc2VbYmlkXSA9IE5VTEw7CisJ fQorCisJZm9yIChub2RlID0gMDsgbm9kZSA8IG51bW5vZGVzOyBub2RlKyspIHsKKwkJbG9uZyBw Zm4sIHN0YXJ0cGZuOworCisJCW1lbXNldCh6b25lc19zaXplLCAwLCBzaXplb2Yoem9uZXNfc2l6 ZSkpOworCisJCXN0YXJ0cGZuID0gLTE7CisJCWJkcCA9IEJPT1RfTk9ERV9EQVRBKG5vZGUpLT5i ZGF0YTsKKwkJcGZuID0gYmRwLT5ub2RlX2Jvb3Rfc3RhcnQgPj4gUEFHRV9TSElGVDsKKwkJaWYg KHN0YXJ0cGZuID09IC0xKQorCQkJc3RhcnRwZm4gPSBwZm47CisJCWlmIChwZm4gPiBtYXhfZG1h KQorCQkJem9uZXNfc2l6ZVtaT05FX05PUk1BTF0gKz0gKGJkcC0+bm9kZV9sb3dfcGZuIC0gcGZu KTsKKwkJZWxzZSBpZiAoYmRwLT5ub2RlX2xvd19wZm4gPCBtYXhfZG1hKQorCQkJem9uZXNfc2l6 ZVtaT05FX0RNQV0gKz0gKGJkcC0+bm9kZV9sb3dfcGZuIC0gcGZuKTsKKwkJZWxzZSB7CisJCQl6 b25lc19zaXplW1pPTkVfRE1BXSArPSAobWF4X2RtYSAtIHBmbik7CisJCQl6b25lc19zaXplW1pP TkVfTk9STUFMXSArPSAoYmRwLT5ub2RlX2xvd19wZm4gLSBtYXhfZG1hKTsKKwkJfQorCisJCWZy ZWVfYXJlYV9pbml0X25vZGUobm9kZSwgTk9ERV9EQVRBKG5vZGUpLCBOVUxMLCB6b25lc19zaXpl LCBzdGFydHBmbjw8UEFHRV9TSElGVCwgMCk7CisKKwkJcGFnZSA9IE5PREVfREFUQShub2RlKS0+ bm9kZV9tZW1fbWFwOworCisJCWJkcCA9IEJPT1RfTk9ERV9EQVRBKG5vZGUpLT5iZGF0YTsKKwor CQlrYWRkciA9ICh1bnNpZ25lZCBsb25nKV9fdmEoYmRwLT5ub2RlX2Jvb3Rfc3RhcnQpOworCQll a2FkZHIgPSAodW5zaWduZWQgbG9uZylfX3ZhKGJkcC0+bm9kZV9sb3dfcGZuIDw8IFBBR0VfU0hJ RlQpOworCQl3aGlsZSAoa2FkZHIgPCBla2FkZHIpIHsKKwkJCWlmIChwYWRkcl90b19uaWQoX19w YShrYWRkcikpID09IG5vZGUpIHsKKwkJCQliaWQgPSBCQU5LX01FTV9NQVBfSU5ERVgoa2FkZHIp OworCQkJCW5vZGVfZGF0YVtteW5vZGVdLT5ub2RlX2lkX21hcFtiaWRdID0gbm9kZTsKKwkJCQlu b2RlX2RhdGFbbXlub2RlXS0+YmFua19tZW1fbWFwX2Jhc2VbYmlkXSA9IHBhZ2U7CisJCQkJcHJp bnRrKCJhZGRyKCVseCksIGJhbmsoJWxkKSAtPiBub2RlKCVkKSwgcGFnZSglbHgpXG4iLCBrYWRk ciwgYmlkLCBub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKTsKKwkJCX0KKwkJCWthZGRyICs9IEJB TktTSVpFOworCQkJcGFnZSArPSBCQU5LU0laRS9QQUdFX1NJWkU7CisJCX0KKwkJbWF4X21hcG5y ID0gbWF4KG1heF9tYXBuciwgKHVuc2lnbmVkIGxvbmcpKHBhZ2UgLSBtZW1fbWFwKSk7CisJfQor CisJLyoKKwkgKiBGaW5pc2ggc2V0dGluZyB1cCB0aGUgbm9kZSBkYXRhIGZvciB0aGlzIG5vZGUs IHRoZW4gY29weSBpdCB0byB0aGUgb3RoZXIgbm9kZXMuCisJICovCisJZm9yIChub2RlPTA7IG5v ZGUgPCBudW1ub2Rlczsgbm9kZSsrKQorCQlpZiAobXlub2RlICE9IG5vZGUpIHsKKwkJCW1lbWNw eShub2RlX2RhdGFbbm9kZV0sIG5vZGVfZGF0YVtteW5vZGVdLCBzaXplb2Yoc3RydWN0IGlhNjRf bm9kZV9kYXRhKSk7CisJCQlub2RlX2RhdGFbbm9kZV0tPm5vZGUgPSBub2RlOworCQl9Cit9CisK ZGlmZiAtTnVyIGxpbnV4LTIuNC4yMC1iYXNlL2FyY2gvaWE2NC9tbS9pbml0LmMgbGludXgtMi40 LjIwLWRjbS9hcmNoL2lhNjQvbW0vaW5pdC5jCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9hcmNoL2lh NjQvbW0vaW5pdC5jCU1vbiBNYXIgIDMgMTA6MjQ6MjEgMjAwMworKysgbGludXgtMi40LjIwLWRj bS9hcmNoL2lhNjQvbW0vaW5pdC5jCVdlZCBNYXIgMTIgMTQ6MDA6MzIgMjAwMwpAQCAtMTYsNiAr MTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+ CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAKICNp bmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgpAQCAtMzgsMTIgKzM5 LDE0IEBACiB1bnNpZ25lZCBsb25nIE1BWF9ETUFfQUREUkVTUyA9IFBBR0VfT0ZGU0VUICsgMHgx MDAwMDAwMDBVTDsKICNkZWZpbmUgTEFSR0VfR0FQIDB4NDAwMDAwMDAgLyogVXNlIHZpcnR1YWwg bWVtIG1hcCBpZiBhIGhvbGUgaXMgPiB0aGFuIHRoaXMgKi8KIAotc3RhdGljIHVuc2lnbmVkIGxv bmcgdG90YWxyYW1fcGFnZXM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RhbHJhbV9wYWdlcywg cmVzZXJ2ZWRfcGFnZXM7CiAKIHVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQgPSBWTUFMTE9DX0VO RF9JTklUOwogCisjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KIHN0YXRpYyBzdHJ1Y3QgcGFn ZSAqdm1lbV9tYXA7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1fZG1hX3BoeXNwYWdlczsKKyNl bmRpZgogCiBpbnQKIGRvX2NoZWNrX3BndF9jYWNoZSAoaW50IGxvdywgaW50IGhpZ2gpCkBAIC0x ODYsNDEgKzE4OSw0OCBAQAogCXJldHVybjsKIH0KIAorI2lmZGVmIENPTkZJR19ESVNDT05USUdN RU0KIHZvaWQKIHNob3dfbWVtKHZvaWQpCiB7Ci0JaW50IGksIHRvdGFsID0gMCwgcmVzZXJ2ZWQg PSAwOworCWludCBpLCByZXNlcnZlZCA9IDA7CiAJaW50IHNoYXJlZCA9IDAsIGNhY2hlZCA9IDA7 CisJcGdfZGF0YV90ICpwZ2RhdCA9IHBnZGF0X2xpc3Q7CiAKIAlwcmludGsoIk1lbS1pbmZvOlxu Iik7CiAJc2hvd19mcmVlX2FyZWFzKCk7CiAKLSNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCi0J ewotCQlwZ19kYXRhX3QgKnBnZGF0ID0gcGdkYXRfbGlzdDsKLQotCQlwcmludGsoIkZyZWUgc3dh cDogICAgICAgJTZka0JcbiIsIG5yX3N3YXBfcGFnZXM8PChQQUdFX1NISUZULTEwKSk7Ci0JCWRv IHsKLQkJCXByaW50aygiTm9kZSBJRDogJWRcbiIsIHBnZGF0LT5ub2RlX2lkKTsKLQkJCWZvcihp ID0gMDsgaSA8IHBnZGF0LT5ub2RlX3NpemU7IGkrKykgewotCQkJCWlmIChQYWdlUmVzZXJ2ZWQo cGdkYXQtPm5vZGVfbWVtX21hcCtpKSkKLQkJCQkJcmVzZXJ2ZWQrKzsKLQkJCQllbHNlIGlmIChQ YWdlU3dhcENhY2hlKHBnZGF0LT5ub2RlX21lbV9tYXAraSkpCi0JCQkJCWNhY2hlZCsrOwotCQkJ CWVsc2UgaWYgKHBhZ2VfY291bnQocGdkYXQtPm5vZGVfbWVtX21hcCArIGkpKQotCQkJCQlzaGFy ZWQgKz0gcGFnZV9jb3VudChwZ2RhdC0+bm9kZV9tZW1fbWFwICsgaSkgLSAxOwotCQkJfQotCQkJ cHJpbnRrKCJcdCVkIHBhZ2VzIG9mIFJBTVxuIiwgcGdkYXQtPm5vZGVfc2l6ZSk7Ci0JCQlwcmlu dGsoIlx0JWQgcmVzZXJ2ZWQgcGFnZXNcbiIsIHJlc2VydmVkKTsKLQkJCXByaW50aygiXHQlZCBw YWdlcyBzaGFyZWRcbiIsIHNoYXJlZCk7Ci0JCQlwcmludGsoIlx0JWQgcGFnZXMgc3dhcCBjYWNo ZWRcbiIsIGNhY2hlZCk7Ci0JCQlwZ2RhdCA9IHBnZGF0LT5ub2RlX25leHQ7Ci0JCX0gd2hpbGUg KHBnZGF0KTsKLQkJcHJpbnRrKCJUb3RhbCBvZiAlbGQgcGFnZXMgaW4gcGFnZSB0YWJsZSBjYWNo ZVxuIiwgcGd0YWJsZV9jYWNoZV9zaXplKTsKLQkJc2hvd19idWZmZXJzKCk7Ci0JCXByaW50aygi JWQgZnJlZSBidWZmZXIgcGFnZXNcbiIsIG5yX2ZyZWVfYnVmZmVyX3BhZ2VzKCkpOwotCX0KKwlw cmludGsoIkZyZWUgc3dhcDogICAgICAgJTZka0JcbiIsIG5yX3N3YXBfcGFnZXM8PChQQUdFX1NI SUZULTEwKSk7CisJZG8geworCQlwcmludGsoIk5vZGUgSUQ6ICVkXG4iLCBwZ2RhdC0+bm9kZV9p ZCk7CisJCWZvcihpID0gMDsgaSA8IHBnZGF0LT5ub2RlX3NpemU7IGkrKykgeworCQkJaWYgKFBh Z2VSZXNlcnZlZChwZ2RhdC0+bm9kZV9tZW1fbWFwK2kpKQorCQkJCXJlc2VydmVkKys7CisJCQll bHNlIGlmIChQYWdlU3dhcENhY2hlKHBnZGF0LT5ub2RlX21lbV9tYXAraSkpCisJCQkJY2FjaGVk Kys7CisJCQllbHNlIGlmIChwYWdlX2NvdW50KHBnZGF0LT5ub2RlX21lbV9tYXAgKyBpKSkKKwkJ CQlzaGFyZWQgKz0gcGFnZV9jb3VudChwZ2RhdC0+bm9kZV9tZW1fbWFwICsgaSkgLSAxOworCQl9 CisJCXByaW50aygiXHQlbGQgcGFnZXMgb2YgUkFNXG4iLCBwZ2RhdC0+bm9kZV9zaXplKTsKKwkJ cHJpbnRrKCJcdCVkIHJlc2VydmVkIHBhZ2VzXG4iLCByZXNlcnZlZCk7CisJCXByaW50aygiXHQl ZCBwYWdlcyBzaGFyZWRcbiIsIHNoYXJlZCk7CisJCXByaW50aygiXHQlZCBwYWdlcyBzd2FwIGNh Y2hlZFxuIiwgY2FjaGVkKTsKKwkJcGdkYXQgPSBwZ2RhdC0+bm9kZV9uZXh0OworCX0gd2hpbGUg KHBnZGF0KTsKKwlwcmludGsoIlRvdGFsIG9mICVsZCBwYWdlcyBpbiBwYWdlIHRhYmxlIGNhY2hl XG4iLCBwZ3RhYmxlX2NhY2hlX3NpemUpOworCXNob3dfYnVmZmVycygpOworCXByaW50aygiJWQg ZnJlZSBidWZmZXIgcGFnZXNcbiIsIG5yX2ZyZWVfYnVmZmVyX3BhZ2VzKCkpOworfQogI2Vsc2Ug LyogIUNPTkZJR19ESVNDT05USUdNRU0gKi8KK3ZvaWQKK3Nob3dfbWVtKHZvaWQpCit7CisJaW50 IGksIHRvdGFsID0gMCwgcmVzZXJ2ZWQgPSAwOworCWludCBzaGFyZWQgPSAwLCBjYWNoZWQgPSAw OworCisJcHJpbnRrKCJNZW0taW5mbzpcbiIpOworCXNob3dfZnJlZV9hcmVhcygpOworCiAJcHJp bnRrKCJGcmVlIHN3YXA6ICAgICAgICU2ZGtCXG4iLCBucl9zd2FwX3BhZ2VzPDwoUEFHRV9TSElG VC0xMCkpOwogCWkgPSBtYXhfbWFwbnI7CiAJd2hpbGUgKGktLSA+IDApIHsKQEAgLTI0MCw4ICsy NTAsOCBAQAogCXByaW50aygiJWQgcGFnZXMgc3dhcCBjYWNoZWRcbiIsIGNhY2hlZCk7CiAJcHJp bnRrKCIlbGQgcGFnZXMgaW4gcGFnZSB0YWJsZSBjYWNoZVxuIiwgcGd0YWJsZV9jYWNoZV9zaXpl KTsKIAlzaG93X2J1ZmZlcnMoKTsKLSNlbmRpZiAvKiAhQ09ORklHX0RJU0NPTlRJR01FTSAqLwog fQorI2VuZGlmIC8qICFDT05GSUdfRElTQ09OVElHTUVNICovCiAKIC8qCiAgKiBUaGlzIGlzIGxp a2UgcHV0X2RpcnR5X3BhZ2UoKSBidXQgaW5zdGFsbHMgYSBjbGVhbiBwYWdlIHdpdGggUEFHRV9H QVRFIHByb3RlY3Rpb24KQEAgLTM1Nyw2ICszNjcsNyBAQAogCWlhNjRfdGxiX2luaXQoKTsKIH0K IAorI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiBzdGF0aWMgaW50CiBjcmVhdGVfbWVtX21h cF9wYWdlX3RhYmxlICh1NjQgc3RhcnQsIHU2NCBlbmQsIHZvaWQgKmFyZykKIHsKQEAgLTQ2Niw2 ICs0NzcsNyBAQAogCQkqY291bnQgKz0gKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUOwogCXJl dHVybiAwOwogfQorI2VuZGlmIC8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KIAogaW50CiBpYTY0 X3BhZ2VfdmFsaWQgKHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtNDk4LDIwICs1MTAsMjggQEAKIAls YXN0X2VuZCA9IGVuZDsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19E SVNDT05USUdNRU0gKi8KIAogLyoKICAqIFNldCB1cCB0aGUgcGFnZSB0YWJsZXMuCiAgKi8KKyNp ZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCit2b2lkCitwYWdpbmdfaW5pdCAodm9pZCkKK3sKKwll eHRlcm4gdm9pZCBkaXNjb250aWdfcGFnaW5nX2luaXQodm9pZCk7CisKKwlkaXNjb250aWdfcGFn aW5nX2luaXQoKTsKKwllZmlfbWVtbWFwX3dhbGsoY291bnRfcGFnZXMsICZudW1fcGh5c3BhZ2Vz KTsKK30KKyNlbHNlIC8qICFDT05GSUdfRElTQ09OVElHTUVNICovCiB2b2lkCiBwYWdpbmdfaW5p dCAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIG1heF9kbWE7CiAJdW5zaWduZWQgbG9uZyB6b25l c19zaXplW01BWF9OUl9aT05FU107CiAJdW5zaWduZWQgbG9uZyB6aG9sZXNfc2l6ZVtNQVhfTlJf Wk9ORVNdOwotI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiAJdW5zaWduZWQgbG9uZyBtYXhf Z2FwOwotI2VuZGlmCiAKIAkvKiBpbml0aWFsaXplIG1lbV9tYXBbXSAqLwogCkBAIC01MzksOSAr NTU5LDYgQEAKIAkJfQogCX0KIAotI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KLQlmcmVlX2Fy ZWFfaW5pdF9ub2RlKDAsIE5VTEwsIE5VTEwsIHpvbmVzX3NpemUsIDAsIHpob2xlc19zaXplKTsK LSNlbHNlCiAJbWF4X2dhcCA9IDA7CiAJZWZpX21lbW1hcF93YWxrKGZpbmRfbGFyZ2VzdF9ob2xl LCAodTY0ICopJm1heF9nYXApOwogCkBAIC01NjIsMjAgKzU3OSwxOSBAQAogCQlmcmVlX2FyZWFf aW5pdF9ub2RlKDAsIE5VTEwsIHZtZW1fbWFwLCB6b25lc19zaXplLCAwLCB6aG9sZXNfc2l6ZSk7 CiAJCXByaW50aygiVmlydHVhbCBtZW1fbWFwIHN0YXJ0cyBhdCAweCVwXG4iLCBtZW1fbWFwKTsK IAl9Ci0jZW5kaWYKIH0KKyNlbmRpZiAvKiAhQ09ORklHX0RJU0NPTlRJR01FTSAqLwogCiBzdGF0 aWMgaW50Ci1jb3VudF9yZXNlcnZlZF9wYWdlcyAodTY0IHN0YXJ0LCB1NjQgZW5kLCB2b2lkICph cmcpCitjb3VudF9yZXNlcnZlZF9wYWdlcyAodTY0IHN0YXJ0LCB1NjQgZW5kKQogewogCXVuc2ln bmVkIGxvbmcgbnVtX3Jlc2VydmVkID0gMDsKLQl1bnNpZ25lZCBsb25nICpjb3VudCA9IGFyZzsK IAlzdHJ1Y3QgcGFnZSAqcGc7CiAKIAlmb3IgKHBnID0gdmlydF90b19wYWdlKCh2b2lkICopc3Rh cnQpOyBwZyA8IHZpcnRfdG9fcGFnZSgodm9pZCAqKWVuZCk7ICsrcGcpCiAJCWlmIChQYWdlUmVz ZXJ2ZWQocGcpKQogCQkJKytudW1fcmVzZXJ2ZWQ7Ci0JKmNvdW50ICs9IG51bV9yZXNlcnZlZDsK KwlyZXNlcnZlZF9wYWdlcyArPSBudW1fcmVzZXJ2ZWQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4 Myw4ICs1OTksMTEgQEAKIG1lbV9pbml0ICh2b2lkKQogewogCWV4dGVybiBjaGFyIF9fc3RhcnRf Z2F0ZV9zZWN0aW9uW107Ci0JbG9uZyByZXNlcnZlZF9wYWdlcywgY29kZXNpemUsIGRhdGFzaXpl LCBpbml0c2l6ZTsKKwlsb25nIGNvZGVzaXplLCBkYXRhc2l6ZSwgaW5pdHNpemU7CiAJdW5zaWdu ZWQgbG9uZyBudW1fcGd0X3BhZ2VzOworCXBnX2RhdGFfdCAqcGdkYXQ7CisJZXh0ZXJuIGludCAg ZmlsdGVyX3JzdmRfbWVtb3J5ICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVu ZCwgdm9pZCAqYXJnKTsKKwogCiAjaWZkZWYgQ09ORklHX1BDSQogCS8qCkBAIC01OTUsMTYgKzYx NCwxOSBAQAogCXBsYXRmb3JtX3BjaV9kbWFfaW5pdCgpOwogI2VuZGlmCiAKKyNpZm5kZWYgQ09O RklHX0RJU0NPTlRJR01FTQogCWlmICghbWVtX21hcCkKIAkJQlVHKCk7CiAKIAltYXhfbWFwbnIg PSBtYXhfbG93X3BmbjsKKyNlbmRpZgogCWhpZ2hfbWVtb3J5ID0gX192YShtYXhfbG93X3BmbiAq IFBBR0VfU0laRSk7CiAKLQl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FsbF9ib290bWVtKCk7CisJ Zm9yX2VhY2hfcGdkYXQocGdkYXQpCisJCXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYWxsX2Jvb3Rt ZW1fbm9kZShwZ2RhdCk7CiAKIAlyZXNlcnZlZF9wYWdlcyA9IDA7Ci0JZWZpX21lbW1hcF93YWxr KGNvdW50X3Jlc2VydmVkX3BhZ2VzLCAmcmVzZXJ2ZWRfcGFnZXMpOworCWVmaV9tZW1tYXBfd2Fs ayhmaWx0ZXJfcnN2ZF9tZW1vcnksIGNvdW50X3Jlc2VydmVkX3BhZ2VzKTsKIAogCWNvZGVzaXpl ID0gICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0IC0gKHVuc2lnbmVkIGxvbmcpICZfc3RleHQ7CiAJ ZGF0YXNpemUgPSAgKHVuc2lnbmVkIGxvbmcpICZfZWRhdGEgLSAodW5zaWduZWQgbG9uZykgJl9l dGV4dDsKZGlmZiAtTnVyIGxpbnV4LTIuNC4yMC1iYXNlL2FyY2gvaWE2NC9tbS9udW1hLmMgbGlu dXgtMi40LjIwLWRjbS9hcmNoL2lhNjQvbW0vbnVtYS5jCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9h cmNoL2lhNjQvbW0vbnVtYS5jCVRodSBKYW4gIDEgMDk6MDA6MDAgMTk3MAorKysgbGludXgtMi40 LjIwLWRjbS9hcmNoL2lhNjQvbW0vbnVtYS5jCVdlZCBNYXIgMTIgMTM6MzQ6MTAgMjAwMwpAQCAt MCwwICsxLDQ2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUg dGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUK KyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIE5VTUEgc3Bl Y2lmaWMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgd2hpY2ggY2FuCisgKiBiZSBzcGxpdCBhd2F5 IGZyb20gRElTQ09OVElHTUVNIGFuZCBhcmUgdXNlZCBvbiBOVU1BIG1hY2hpbmVzIHdpdGgKKyAq IGNvbnRpZ3VvdXMgbWVtb3J5LgorICogCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAyMDAy LzA4LzA3IEVyaWNoIEZvY2h0IDxlZm9jaHRAZXNzLm5lYy5kZT4KKyAqLworCisjaW5jbHVkZSA8 bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGlu dXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1l bS5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGFzbS9udW1hLmg+CisK Ky8qCisgKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZXMgYXJlIHVzdWFsbHkgaW5pdGlhbGl6ZWQg YnkgQUNQSSBvcgorICogc2ltaWxhciBtZWNoYW5pc21zIGFuZCBkZXNjcmliZSB0aGUgTlVNQSBj aGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIG1hY2hpbmUuCisgKi8KK2ludCBudW1fbWVtYmxrcyA9IDA7 CitzdHJ1Y3Qgbm9kZV9tZW1ibGtfcyBub2RlX21lbWJsa1tOUl9NRU1CTEtTXTsKK3N0cnVjdCBu b2RlX2NwdWlkX3Mgbm9kZV9jcHVpZFtOUl9DUFVTXTsKKy8qCisgKiBUaGlzIGlzIGEgbWF0cml4 IHdpdGggImRpc3RhbmNlcyIgYmV0d2VlbiBub2RlcywgdGhleSBzaG91bGQgYmUKKyAqIHByb3Bv cnRpb25hbCB0byB0aGUgbWVtb3J5IGFjY2VzcyBsYXRlbmN5IHJhdGlvcy4KKyAqLwordTggbnVt YV9zbGl0W05SX05PREVTICogTlJfTk9ERVNdOworCisvKiBJZGVudGlmeSB3aGljaCBjbm9kZSBh IHBoeXNpY2FsIGFkZHJlc3MgcmVzaWRlcyBvbiAqLworaW50CitwYWRkcl90b19uaWQodW5zaWdu ZWQgbG9uZyBwYWRkcikKK3sKKwlpbnQJaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fbWVtYmxr czsgaSsrKQorCQlpZiAocGFkZHIgPj0gbm9kZV9tZW1ibGtbaV0uc3RhcnRfcGFkZHIgJiYKKwkJ ICAgIHBhZGRyIDwgbm9kZV9tZW1ibGtbaV0uc3RhcnRfcGFkZHIgKyBub2RlX21lbWJsa1tpXS5z aXplKQorCQkJYnJlYWs7CisKKwlyZXR1cm4gKGkgPCBudW1fbWVtYmxrcykgPyBub2RlX21lbWJs a1tpXS5uaWQgOiAtMTsKK30KZGlmZiAtTnVyIGxpbnV4LTIuNC4yMC1iYXNlL2RyaXZlcnMvYWNw aS9Db25maWcuaW4gbGludXgtMi40LjIwLWRjbS9kcml2ZXJzL2FjcGkvQ29uZmlnLmluCi0tLSBs aW51eC0yLjQuMjAtYmFzZS9kcml2ZXJzL2FjcGkvQ29uZmlnLmluCU1vbiBNYXIgIDMgMTA6MjQ6 MjEgMjAwMworKysgbGludXgtMi40LjIwLWRjbS9kcml2ZXJzL2FjcGkvQ29uZmlnLmluCU1vbiBN YXIgIDMgMTA6NTU6MTIgMjAwMwpAQCAtMzYsNiArMzYsOSBAQAogICAgIHRyaXN0YXRlICAgICAn ICBGYW4nCQlDT05GSUdfQUNQSV9GQU4KICAgICB0cmlzdGF0ZSAgICAgJyAgUHJvY2Vzc29yJwkJ Q09ORklHX0FDUElfUFJPQ0VTU09SCiAgICAgZGVwX3RyaXN0YXRlICcgIFRoZXJtYWwgWm9uZScg Q09ORklHX0FDUElfVEhFUk1BTCAkQ09ORklHX0FDUElfUFJPQ0VTU09SCisgICAgaWYgWyAiJENP TkZJR19OVU1BIiA9ICJ5IiBdOyB0aGVuCisgICAgICBib29sCSAnICBOVU1BIHN1cHBvcnQnIAlD T05GSUdfQUNQSV9OVU1BCisgICAgZmkKICAgICBib29sICAgICAgICAgJyAgRGVidWcgU3RhdGVt ZW50cycgCUNPTkZJR19BQ1BJX0RFQlVHCiAgIGZpCiAKQEAgLTExOSw2ICsxMjIsOSBAQAogICAg IHRyaXN0YXRlICAgICAnICBGYW4nCQlDT05GSUdfQUNQSV9GQU4KICAgICB0cmlzdGF0ZSAgICAg JyAgUHJvY2Vzc29yJwkJQ09ORklHX0FDUElfUFJPQ0VTU09SCiAgICAgZGVwX3RyaXN0YXRlICcg IFRoZXJtYWwgWm9uZScgQ09ORklHX0FDUElfVEhFUk1BTCAkQ09ORklHX0FDUElfUFJPQ0VTU09S CisgICAgaWYgWyAiJENPTkZJR19OVU1BIiA9ICJ5IiBdOyB0aGVuCisgICAgICBib29sCSAnICBO VU1BIHN1cHBvcnQnIAlDT05GSUdfQUNQSV9OVU1BCisgICAgZmkKICAgICBib29sICAgICAgICAg JyAgRGVidWcgU3RhdGVtZW50cycgCUNPTkZJR19BQ1BJX0RFQlVHCiAgICAgZW5kbWVudQogICBm aQpkaWZmIC1OdXIgbGludXgtMi40LjIwLWJhc2UvZHJpdmVycy9hY3BpL01ha2VmaWxlIGxpbnV4 LTIuNC4yMC1kY20vZHJpdmVycy9hY3BpL01ha2VmaWxlCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9k cml2ZXJzL2FjcGkvTWFrZWZpbGUJTW9uIE1hciAgMyAxMDoyNDoyMSAyMDAzCisrKyBsaW51eC0y LjQuMjAtZGNtL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQlNb24gTWFyICAzIDEwOjU1OjEyIDIwMDMK QEAgLTUwLDYgKzUwLDcgQEAKICAgb2JqLSQoQ09ORklHX0FDUElfUFJPQ0VTU09SKQkrPSBwcm9j ZXNzb3IubwogICBvYmotJChDT05GSUdfQUNQSV9USEVSTUFMKQkrPSB0aGVybWFsLm8KICAgb2Jq LSQoQ09ORklHX0FDUElfU1lTVEVNKQkrPSBzeXN0ZW0ubworb2JqLSQoQ09ORklHX0FDUElfTlVN QSkgICAgICAgICArPSBudW1hLm8KIGVuZGlmCiAKIGluY2x1ZGUgJChUT1BESVIpL1J1bGVzLm1h a2UKZGlmZiAtTnVyIGxpbnV4LTIuNC4yMC1iYXNlL2RyaXZlcnMvYWNwaS9udW1hLmMgbGludXgt Mi40LjIwLWRjbS9kcml2ZXJzL2FjcGkvbnVtYS5jCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9kcml2 ZXJzL2FjcGkvbnVtYS5jCVRodSBKYW4gIDEgMDk6MDA6MDAgMTk3MAorKysgbGludXgtMi40LjIw LWRjbS9kcml2ZXJzL2FjcGkvbnVtYS5jCU1vbiBNYXIgIDMgMTA6NTU6MTIgMjAwMwpAQCAtMCww ICsxLDE4NiBAQAorLyoKKyAqICBhY3BpX251bWEuYyAtIEFDUEkgTlVNQSBzdXBwb3J0CisgKgor ICogIENvcHlyaWdodCAoQykgMjAwMiBUYWtheW9zaGkgS29jaGkgPHQta291Y2hpQGNxLmpwLm5l Yy5jb20+CisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUg MzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgv aW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Cisj aW5jbHVkZSAiYWNwaV9idXMuaCIKKworZXh0ZXJuIGludCBfX2luaXQgYWNwaV90YWJsZV9wYXJz ZV9tYWR0X2ZhbWlseSAoZW51bSBhY3BpX3RhYmxlX2lkIGlkLCB1bnNpZ25lZCBsb25nIG1hZHRf c2l6ZSwgaW50IGVudHJ5X2lkLCBhY3BpX21hZHRfZW50cnlfaGFuZGxlciBoYW5kbGVyKTsKKwor dm9pZCBfX2luaXQKK2FjcGlfdGFibGVfcHJpbnRfc3JhdF9lbnRyeSAoCisJYWNwaV90YWJsZV9l bnRyeV9oZWFkZXIJKmhlYWRlcikKK3sKKwlpZiAoIWhlYWRlcikKKwkJcmV0dXJuOworCisJc3dp dGNoIChoZWFkZXItPnR5cGUpIHsKKworCWNhc2UgQUNQSV9TUkFUX1BST0NFU1NPUl9BRkZJTklU WToKKwl7CisJCXN0cnVjdCBhY3BpX3RhYmxlX3Byb2Nlc3Nvcl9hZmZpbml0eSAqcCA9CisJCQko c3RydWN0IGFjcGlfdGFibGVfcHJvY2Vzc29yX2FmZmluaXR5KikgaGVhZGVyOworCQlwcmludGso S0VSTl9JTkZPICJTUkFUIFByb2Nlc3NvciAoaWRbMHglMDJ4XSBlaWRbMHglMDJ4XSkgaW4gcHJv eGltaXR5IGRvbWFpbiAlZCAlc1xuIiwKKwkJICAgICAgIHAtPmFwaWNfaWQsIHAtPmxzYXBpY19l aWQsIHAtPnByb3hpbWl0eV9kb21haW4sCisJCSAgICAgICBwLT5mbGFncy5lbmFibGVkPyJlbmFi bGVkIjoiZGlzYWJsZWQiKTsKKwl9CisJCWJyZWFrOworCisJY2FzZSBBQ1BJX1NSQVRfTUVNT1JZ X0FGRklOSVRZOgorCXsKKwkJc3RydWN0IGFjcGlfdGFibGVfbWVtb3J5X2FmZmluaXR5ICpwID0K KwkJCShzdHJ1Y3QgYWNwaV90YWJsZV9tZW1vcnlfYWZmaW5pdHkqKSBoZWFkZXI7CisJCXByaW50 ayhLRVJOX0lORk8gIlNSQVQgTWVtb3J5ICgweCUwOHglMDh4IGxlbmd0aCAweCUwOHglMDh4IHR5 cGUgMHgleCkgaW4gcHJveGltaXR5IGRvbWFpbiAlZCAlcyVzXG4iLAorCQkgICAgICAgcC0+YmFz ZV9hZGRyX2hpLCBwLT5iYXNlX2FkZHJfbG8sIHAtPmxlbmd0aF9oaSwgcC0+bGVuZ3RoX2xvLAor CQkgICAgICAgcC0+bWVtb3J5X3R5cGUsIHAtPnByb3hpbWl0eV9kb21haW4sCisJCSAgICAgICBw LT5mbGFncy5lbmFibGVkID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKKwkJICAgICAgIHAtPmZs YWdzLmhvdF9wbHVnZ2FibGUgPyAiIGhvdC1wbHVnZ2FibGUiIDogIiIpOworCX0KKwkJYnJlYWs7 CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJGb3VuZCB1bnN1cHBvcnRlZCBT UkFUIGVudHJ5ICh0eXBlID0gMHgleClcbiIsCisJCQloZWFkZXItPnR5cGUpOworCQlicmVhazsK Kwl9Cit9CisKKworc3RhdGljIGludCBfX2luaXQKK2FjcGlfcGFyc2Vfc2xpdCAodW5zaWduZWQg bG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgYWNwaV90YWJs ZV9zbGl0CSpzbGl0OworCXUzMgkJCWxvY2FsaXRpZXM7CisKKwlpZiAoIXBoeXNfYWRkciB8fCAh c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzbGl0ID0gKHN0cnVjdCBhY3BpX3RhYmxlX3Ns aXQgKikgX192YShwaHlzX2FkZHIpOworCisJLyogZG93bmNhc3QganVzdCBmb3IgJWxsdSB2cyAl bHUgZm9yIGkzODYvaWE2NCAgKi8KKwlsb2NhbGl0aWVzID0gKHUzMikgc2xpdC0+bG9jYWxpdGll czsKKworCXByaW50ayhLRVJOX0lORk8gIlNMSVQgbG9jYWxpdGllcyAldXgldVxuIiwgbG9jYWxp dGllcywgbG9jYWxpdGllcyk7CisKKwlhY3BpX251bWFfc2xpdF9pbml0KHNsaXQpOworCisJcmV0 dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfX2luaXQKK2FjcGlfcGFyc2VfcHJvY2Vzc29yX2Fm ZmluaXR5IChhY3BpX3RhYmxlX2VudHJ5X2hlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCBhY3Bp X3RhYmxlX3Byb2Nlc3Nvcl9hZmZpbml0eSAqcHJvY2Vzc29yX2FmZmluaXR5ID0gTlVMTDsKKwor CXByb2Nlc3Nvcl9hZmZpbml0eSA9IChzdHJ1Y3QgYWNwaV90YWJsZV9wcm9jZXNzb3JfYWZmaW5p dHkqKSBoZWFkZXI7CisJaWYgKCFwcm9jZXNzb3JfYWZmaW5pdHkpCisJCXJldHVybiAtRUlOVkFM OworCisJYWNwaV90YWJsZV9wcmludF9zcmF0X2VudHJ5KGhlYWRlcik7CisKKwkvKiBsZXQgYXJj aGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0IHRvIGRvIGl0ICovCisJYWNwaV9udW1hX3Byb2Nlc3Nv cl9hZmZpbml0eV9pbml0KHByb2Nlc3Nvcl9hZmZpbml0eSk7CisKKwlyZXR1cm4gMDsKK30KKwor CitzdGF0aWMgaW50IF9faW5pdAorYWNwaV9wYXJzZV9tZW1vcnlfYWZmaW5pdHkgKGFjcGlfdGFi bGVfZW50cnlfaGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IGFjcGlfdGFibGVfbWVtb3J5X2Fm ZmluaXR5ICptZW1vcnlfYWZmaW5pdHkgPSBOVUxMOworCisJbWVtb3J5X2FmZmluaXR5ID0gKHN0 cnVjdCBhY3BpX3RhYmxlX21lbW9yeV9hZmZpbml0eSopIGhlYWRlcjsKKwlpZiAoIW1lbW9yeV9h ZmZpbml0eSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhY3BpX3RhYmxlX3ByaW50X3NyYXRfZW50 cnkoaGVhZGVyKTsKKworCS8qIGxldCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHBhcnQgdG8gZG8g aXQgKi8KKwlhY3BpX251bWFfbWVtb3J5X2FmZmluaXR5X2luaXQobWVtb3J5X2FmZmluaXR5KTsK KworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0CithY3BpX3BhcnNlX3NyYXQg KHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0 IGFjcGlfdGFibGVfc3JhdAkqc3JhdCA9IE5VTEw7CisKKwlpZiAoIXBoeXNfYWRkciB8fCAhc2l6 ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcmF0ID0gKHN0cnVjdCBhY3BpX3RhYmxlX3NyYXQg KikgX192YShwaHlzX2FkZHIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiU1JBVCByZXZpc2lvbiAl ZFxuIiwgc3JhdC0+dGFibGVfcmV2aXNpb24pOworCisJcmV0dXJuIDA7Cit9CisKKworaW50IF9f aW5pdAorYWNwaV90YWJsZV9wYXJzZV9zcmF0ICgKKwllbnVtIGFjcGlfc3JhdF9lbnRyeV9pZAlp ZCwKKwlhY3BpX21hZHRfZW50cnlfaGFuZGxlcgloYW5kbGVyKQoreworCXJldHVybiBhY3BpX3Rh YmxlX3BhcnNlX21hZHRfZmFtaWx5KEFDUElfU1JBVCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxl X3NyYXQpLAorCQkJCQkgICAgaWQsIGhhbmRsZXIpOworfQorCisKK2ludCBfX2luaXQKK2FjcGlf bnVtYV9pbml0KCkKK3sKKwlpbnQJCQlyZXN1bHQ7CisKKwkvKiBTUkFUOiBTdGF0aWMgUmVzb3Vy Y2UgQWZmaW5pdHkgVGFibGUgKi8KKwlyZXN1bHQgPSBhY3BpX3RhYmxlX3BhcnNlKEFDUElfU1JB VCwgYWNwaV9wYXJzZV9zcmF0KTsKKworCWlmIChyZXN1bHQgPiAwKSB7CisJCXJlc3VsdCA9IGFj cGlfdGFibGVfcGFyc2Vfc3JhdChBQ1BJX1NSQVRfUFJPQ0VTU09SX0FGRklOSVRZLAorCQkJCQkg ICAgICAgYWNwaV9wYXJzZV9wcm9jZXNzb3JfYWZmaW5pdHkpOworCQlyZXN1bHQgPSBhY3BpX3Rh YmxlX3BhcnNlX3NyYXQoQUNQSV9TUkFUX01FTU9SWV9BRkZJTklUWSwKKwkJCQkJICAgICAgIGFj cGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5KTsKKwl9IGVsc2UgeworCQkvKiBGSVhNRSAqLworCQlw cmludGsoIldhcm5pbmc6IGFjcGlfdGFibGVfcGFyc2UoQUNQSV9TUkFUKSByZXR1cm5lZCAlZCFc biIscmVzdWx0KTsKKwl9CisKKwkvKiBTTElUOiBTeXN0ZW0gTG9jYWxpdHkgSW5mb3JtYXRpb24g VGFibGUgKi8KKwlyZXN1bHQgPSBhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0xJVCwgYWNwaV9wYXJz ZV9zbGl0KTsKKwlpZiAocmVzdWx0IDwgMSkgeworCQkvKiBGSVhNRSAqLworCQlwcmludGsoIldh cm5pbmc6IGFjcGlfdGFibGVfcGFyc2UoQUNQSV9TTElUKSByZXR1cm5lZCAlZCFcbiIscmVzdWx0 KTsKKwl9CisKKwlhY3BpX251bWFfYXJjaF9maXh1cCgpOworCXJldHVybiAwOworfQpkaWZmIC1O dXIgbGludXgtMi40LjIwLWJhc2UvZHJpdmVycy9hY3BpL3RhYmxlcy5jIGxpbnV4LTIuNC4yMC1k Y20vZHJpdmVycy9hY3BpL3RhYmxlcy5jCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9kcml2ZXJzL2Fj cGkvdGFibGVzLmMJTW9uIE1hciAgMyAxMDoyNDoyMiAyMDAzCisrKyBsaW51eC0yLjQuMjAtZGNt L2RyaXZlcnMvYWNwaS90YWJsZXMuYwlNb24gTWFyICAzIDEwOjU1OjEyIDIwMDMKQEAgLTIyNCwx MSArMjI0LDEzIEBACiAKIAogaW50IF9faW5pdAotYWNwaV90YWJsZV9wYXJzZV9tYWR0ICgKK2Fj cGlfdGFibGVfcGFyc2VfbWFkdF9mYW1pbHkgKAogCWVudW0gYWNwaV90YWJsZV9pZAlpZCwKKwl1 bnNpZ25lZCBsb25nCQltYWR0X3NpemUsCisJaW50CQkJZW50cnlfaWQsCiAJYWNwaV9tYWR0X2Vu dHJ5X2hhbmRsZXIJaGFuZGxlcikKIHsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9tYWR0CSptYWR0ID0g TlVMTDsKKwl2b2lkCQkJKm1hZHQgPSBOVUxMOwogCWFjcGlfdGFibGVfZW50cnlfaGVhZGVyCSpl bnRyeSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZwkJY291bnQgPSAwOwogCXVuc2lnbmVkIGxvbmcJ CW1hZHRfZW5kID0gMDsKQEAgLTI0MCwxOSArMjQyLDIxIEBACiAJLyogTG9jYXRlIHRoZSBNQURU IChpZiBleGlzdHMpLiBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUuICovCiAKIAlmb3IgKGkgPSAw OyBpIDwgc2R0LmNvdW50OyBpKyspIHsKLQkJaWYgKHNkdC5lbnRyeVtpXS5pZCAhPSBBQ1BJX0FQ SUMpCisJCWlmIChzZHQuZW50cnlbaV0uaWQgIT0gaWQpCiAJCQljb250aW51ZTsKLQkJbWFkdCA9 IChzdHJ1Y3QgYWNwaV90YWJsZV9tYWR0ICopCisJCW1hZHQgPSAodm9pZCAqKQogCQkJX19hY3Bp X21hcF90YWJsZShzZHQuZW50cnlbaV0ucGEsIHNkdC5lbnRyeVtpXS5zaXplKTsKIAkJaWYgKCFt YWR0KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiVW5hYmxlIHRvIG1hcCBNQURU XG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJVbmFibGUgdG8gbWFwICVzXG4i LAorCQkJICAgICAgIGFjcGlfdGFibGVfc2lnbmF0dXJlc1tpZF0pOwogCQkJcmV0dXJuIC1FTk9E RVY7CiAJCX0KIAkJYnJlYWs7CiAJfQogCiAJaWYgKCFtYWR0KSB7Ci0JCXByaW50ayhLRVJOX1dB Uk5JTkcgUFJFRklYICJNQURUIG5vdCBwcmVzZW50XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklO RyBQUkVGSVggIiVzIG5vdCBwcmVzZW50XG4iLAorCQkgICAgICAgYWNwaV90YWJsZV9zaWduYXR1 cmVzW2lkXSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMjYxLDE4ICsyNjUsMjggQEAK IAkvKiBQYXJzZSBhbGwgZW50cmllcyBsb29raW5nIGZvciBhIG1hdGNoLiAqLwogCiAJZW50cnkg PSAoYWNwaV90YWJsZV9lbnRyeV9oZWFkZXIgKikKLQkJKCh1bnNpZ25lZCBsb25nKSBtYWR0ICsg c2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX21hZHQpKTsKKwkJKCh1bnNpZ25lZCBsb25nKSBtYWR0 ICsgbWFkdF9zaXplKTsKIAogCXdoaWxlICgoKHVuc2lnbmVkIGxvbmcpIGVudHJ5KSA8IG1hZHRf ZW5kKSB7Ci0JCWlmIChlbnRyeS0+dHlwZSA9PSBpZCkgeworCQlpZiAoZW50cnktPnR5cGUgPT0g ZW50cnlfaWQpIHsKIAkJCWNvdW50Kys7CiAJCQloYW5kbGVyKGVudHJ5KTsKIAkJfQogCQllbnRy eSA9IChhY3BpX3RhYmxlX2VudHJ5X2hlYWRlciAqKQotCQkJKCh1bnNpZ25lZCBsb25nKSBlbnRy eSArPSBlbnRyeS0+bGVuZ3RoKTsKKwkJCSgodW5zaWduZWQgbG9uZykgZW50cnkgKyBlbnRyeS0+ bGVuZ3RoKTsKIAl9CiAKIAlyZXR1cm4gY291bnQ7Cit9CisKKworaW50IF9faW5pdAorYWNwaV90 YWJsZV9wYXJzZV9tYWR0ICgKKwllbnVtIGFjcGlfbWFkdF9lbnRyeV9pZAlpZCwKKwlhY3BpX21h ZHRfZW50cnlfaGFuZGxlcgloYW5kbGVyKQoreworCXJldHVybiBhY3BpX3RhYmxlX3BhcnNlX21h ZHRfZmFtaWx5KEFDUElfQVBJQywgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX21hZHQpLAorCQkJ CQkgICAgaWQsIGhhbmRsZXIpOwogfQogCiAKZGlmZiAtTnVyIGxpbnV4LTIuNC4yMC1iYXNlL2lu Y2x1ZGUvYXNtLWlhNjQvYWNwaS5oIGxpbnV4LTIuNC4yMC1kY20vaW5jbHVkZS9hc20taWE2NC9h Y3BpLmgKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oCU1vbiBN YXIgIDMgMTA6MjQ6MjMgMjAwMworKysgbGludXgtMi40LjIwLWRjbS9pbmNsdWRlL2FzbS1pYTY0 L2FjcGkuaAlXZWQgTWFyIDEyIDE0OjE3OjM5IDIwMDMKQEAgLTk3LDE3ICs5NywxOCBAQAogCX0g d2hpbGUgKDApCiAKIGNvbnN0IGNoYXIgKmFjcGlfZ2V0X3N5c25hbWUgKHZvaWQpOwotaW50IGFj cGlfYm9vdF9pbml0IChjaGFyICpjZGxpbmUpOwogaW50IGFjcGlfcmVxdWVzdF92ZWN0b3IgKHUz MiBpbnRfdHlwZSk7CiBpbnQgYWNwaV9nZXRfcHJ0IChzdHJ1Y3QgcGNpX3ZlY3Rvcl9zdHJ1Y3Qg Kip2ZWN0b3JzLCBpbnQgKmNvdW50KTsKIGludCBhY3BpX2dldF9pbnRlcnJ1cHRfbW9kZWwgKGlu dCAqdHlwZSk7CiBpbnQgYWNwaV9pcnFfdG9fdmVjdG9yICh1MzIgaXJxKTsKIAotI2lmZGVmIENP TkZJR19ESVNDT05USUdNRU0KLSNkZWZpbmUgTk9ERV9BUlJBWV9JTkRFWCh4KQkoKHgpIC8gOCkJ LyogOCBiaXRzL2NoYXIgKi8KLSNkZWZpbmUgTk9ERV9BUlJBWV9PRkZTRVQoeCkJKCh4KSAlIDgp CS8qIDggYml0cy9jaGFyICovCi0jZGVmaW5lIE1BWF9QWE1fRE9NQUlOUwkJKDI1NikKLSNlbmRp ZiAvKiBDT05GSUdfRElTQ09OVElHTUVNICovCisjaWZkZWYgQ09ORklHX0FDUElfTlVNQQorI2lu Y2x1ZGUgPGFzbS9udW1hLmg+CisvKiBQcm94aW1pdHkgYml0bWFwIGxlbmd0aDsgX1BYTSBpcyBh dCBtb3N0IDI1NSAoOCBiaXQpKi8KKyNkZWZpbmUgTUFYX1BYTV9ET01BSU5TICgyNTYpCitleHRl cm4gaW50IF9faW5pdGRhdGEgcHhtX3RvX25pZF9tYXBbTUFYX1BYTV9ET01BSU5TXTsKK2V4dGVy biBpbnQgX19pbml0ZGF0YSBuaWRfdG9fcHhtX21hcFtOUl9OT0RFU107CisjZW5kaWYKIAogI2Vu ZGlmIC8qX19LRVJORUxfXyovCiAKZGlmZiAtTnVyIGxpbnV4LTIuNC4yMC1iYXNlL2luY2x1ZGUv YXNtLWlhNjQvbW16b25lLmggbGludXgtMi40LjIwLWRjbS9pbmNsdWRlL2FzbS1pYTY0L21tem9u ZS5oCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9pbmNsdWRlL2FzbS1pYTY0L21tem9uZS5oCVRodSBK YW4gIDEgMDk6MDA6MDAgMTk3MAorKysgbGludXgtMi40LjIwLWRjbS9pbmNsdWRlL2FzbS1pYTY0 L21tem9uZS5oCVdlZCBNYXIgMTIgMTM6NDE6MDggMjAwMwpAQCAtMCwwICsxLDE0MyBAQAorLyoK KyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5H IiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRh aWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBB bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAyIE5FQyBDb3JwLgorICog Q29weXJpZ2h0IChjKSAyMDAyIEVyaWNoIEZvY2h0IDxlZm9jaHRAZXNzLm5lYy5kZT4KKyAqIENv cHlyaWdodCAoYykgMjAwMiBLaW1pbyBTdWdhbnVtYSA8ay1zdWdhbnVtYUBkYS5qcC5uZWMuY29t PgorICovCisjaWZuZGVmIF9BU01fSUE2NF9NTVpPTkVfSAorI2RlZmluZSBfQVNNX0lBNjRfTU1a T05FX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQu aD4KKworLyoKKyAqIEdpdmVuIGEga2FkZHIsIGZpbmQgdGhlIGJhc2UgbWVtX21hcCBhZGRyZXNz IGZvciB0aGUgc3RhcnQgb2YgdGhlIG1lbV9tYXAKKyAqIGVudHJpZXMgZm9yIHRoZSBiYW5rIGNv bnRhaW5pbmcgdGhlIGthZGRyLgorICovCisjZGVmaW5lIEJBTktfTUVNX01BUF9CQVNFKGthZGRy KSBsb2NhbF9ub2RlX2RhdGEtPmJhbmtfbWVtX21hcF9iYXNlW0JBTktfTUVNX01BUF9JTkRFWChr YWRkcildCisKKy8qCisgKiBHaXZlbiBhIGthZGRyLCB0aGlzIG1hY3JvIHJldHVybiB0aGUgcmVs YXRpdmUgbWFwIG51bWJlciAKKyAqIHdpdGhpbiB0aGUgYmFuay4KKyAqLworI2RlZmluZSBCQU5L X01BUF9OUihrYWRkcikgCShCQU5LX09GRlNFVChrYWRkcikgPj4gUEFHRV9TSElGVCkKKworLyoK KyAqIEdpdmVuIGEgcHRlLCB0aGlzIG1hY3JvIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBwYWdl IHN0cnVjdCBmb3IgdGhlIHB0ZS4KKyAqLworI2RlZmluZSBwdGVfcGFnZShwdGUpCXZpcnRfdG9f cGFnZShQQUdFX09GRlNFVCB8IChwdGVfdmFsKHB0ZSkmX1BGTl9NQVNLKSkKKworLyoKKyAqIERl dGVybWluZSBpZiBhIGthZGRyIGlzIGEgdmFsaWQgbWVtb3J5IGFkZHJlc3Mgb2YgbWVtb3J5IHRo YXQKKyAqIGFjdHVhbGx5IGV4aXN0cy4gCisgKgorICogVGhlIGNoZWNrIGNvbnNpc3RzIG9mIDIg cGFydHM6CisgKgktIHZlcmlmeSB0aGF0IHRoZSBhZGRyZXNzIGlzIGEgcmVnaW9uIDcgYWRkcmVz cyAmIGRvZXMgbm90IAorICoJICBjb250YWluIGFueSBiaXRzIHRoYXQgcHJlY2x1ZGUgaXQgZnJv bSBiZWluZyBhIHZhbGlkIHBsYXRmb3JtCisgKgkgIG1lbW9yeSBhZGRyZXNzCisgKgktIHZlcmlm eSB0aGF0IHRoZSBjaHVuayBhY3R1YWxseSBleGlzdHMuCisgKgorICogTm90ZSB0aGF0IElPIGFk ZHJlc3NlcyBhcmUgTk9UIGNvbnNpZGVyZWQgdmFsaWQgYWRkcmVzc2VzLgorICoKKyAqIE5vdGUs IG1hbnkgcGxhdGZvcm1zIGNhbiBzaW1wbHkgY2hlY2sgaWYga2FkZHIgZXhjZWVkcyBhIHNwZWNp ZmljIHNpemUuICAKKyAqCShIb3dldmVyLCB0aGlzIHdvbnQgd29yayBvbiBTR0kgcGxhdGZvcm1z IHNpbmNlIElPIHNwYWNlIGlzIGVtYmVkZGVkIAorICogCXdpdGhpbiB0aGUgcmFuZ2Ugb2YgdmFs aWQgbWVtb3J5IGFkZHJlc3NlcyAmIG5vZGVzIGhhdmUgaG9sZXMgaW4gdGhlIAorICoJYWRkcmVz cyByYW5nZSBiZXR3ZWVuIGJhbmtzKS4gCisgKi8KKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGth ZGRyKQkJKHtsb25nIF9rYXY9KGxvbmcpKGthZGRyKTsJXAorCQkJCQlWQUxJRF9NRU1fS0FERFIo X2thdik7fSkKKworLyoKKyAqIEdpdmVuIGEga2FkZHIsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhl IHBhZ2Ugc3RydWN0IGZvciB0aGUgcGFnZS4KKyAqIElmIHRoZSBrYWRkciBkb2VzIG5vdCByZXBy ZXNlbnQgUkFNIG1lbW9yeSB0aGF0IHBvdGVudGlhbGx5IGV4aXN0cywgcmV0dXJuCisgKiBhIHBv aW50ZXIgdGhlIHBhZ2Ugc3RydWN0IGZvciBtYXhfbWFwbnIuIElPIGFkZHJlc3NlcyB3aWxsCisg KiByZXR1cm4gdGhlIHBhZ2UgZm9yIG1heF9uci4gQWRkcmVzc2VzIGluIHVucG9wdWxhdGVkIFJB TSBiYW5rcyBtYXkKKyAqIHJldHVybiB1bmRlZmluZWQgcmVzdWx0cyBPUiBtYXkgcGFuaWMgdGhl IHN5c3RlbS4KKyAqCisgKi8KKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQkoe2xvbmcgX2t2 dHA9KGxvbmcpKGthZGRyKTsJXAorCQkJCShWQUxJRF9NRU1fS0FERFIoX2t2dHApKQlcCisJCQkJ CT8gQkFOS19NRU1fTUFQX0JBU0UoX2t2dHApICsgQkFOS19NQVBfTlIoX2t2dHApCVwKKwkJCQkJ OiBOVUxMO30pCisKKy8qCisgKiBHaXZlbiBhIHBhZ2Ugc3RydWN0IGVudHJ5LCByZXR1cm4gdGhl IHBoeXNpY2FsIGFkZHJlc3MgdGhhdCB0aGUgcGFnZSBzdHJ1Y3QgcmVwcmVzZW50cy4KKyAqIFNp bmNlIElBNjQgaGFzIGFsbCBtZW1vcnkgaW4gdGhlIERNQSB6b25lLCB0aGUgZm9sbG93aW5nIHdv cmtzOgorICovCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQlfX3BhKHBhZ2VfYWRkcmVzcyhw YWdlKSkKKworI2RlZmluZSBub2RlX21lbV9tYXAobmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVf bWVtX21hcCkKKworI2RlZmluZSBub2RlX2xvY2FsbnIocGZuLCBuaWQpCSgocGZuKSAtIE5PREVf REFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikKKworI2RlZmluZSBwZm5fdG9fcGFnZShwZm4pCShz dHJ1Y3QgcGFnZSAqKShub2RlX21lbV9tYXAocGZuX3RvX25pZChwZm4pKSArIG5vZGVfbG9jYWxu cihwZm4sIHBmbl90b19uaWQocGZuKSkpCisKKyNkZWZpbmUgcGZuX3RvX25pZChwZm4pCQkgbG9j YWxfbm9kZV9kYXRhLT5ub2RlX2lkX21hcFsocGZuIDw8IFBBR0VfU0hJRlQpID4+IERJR19CQU5L U0hJRlRdCisKKyNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJKGxvbmcpKChwYWdlIC0gcGFnZV96 b25lKHBhZ2UpLT56b25lX21lbV9tYXApICsgcGFnZV96b25lKHBhZ2UpLT56b25lX3N0YXJ0X3Bm bikKKworCisvKgorICogcGZuX3ZhbGlkIHNob3VsZCBiZSBtYWRlIGFzIGZhc3QgYXMgcG9zc2li bGUsIGFuZCB0aGUgY3VycmVudCBkZWZpbml0aW9uCisgKiBpcyB2YWxpZCBmb3IgbWFjaGluZXMg dGhhdCBhcmUgTlVNQSwgYnV0IHN0aWxsIGNvbnRpZ3VvdXMsIHdoaWNoIGlzIHdoYXQKKyAqIGlz IGN1cnJlbnRseSBzdXBwb3J0ZWQuIEEgbW9yZSBnZW5lcmFsaXNlZCwgYnV0IHNsb3dlciBkZWZp bml0aW9uIHdvdWxkCisgKiBiZSBzb21ldGhpbmcgbGlrZSB0aGlzIC0gbWJsaWdoOgorICogKCBw Zm5fdG9fcGdkYXQocGZuKSAmJiAocGZuIDwgbm9kZV9lbmRfcGZuKHBmbl90b19uaWQocGZuKSkp ICkKKyAqLworI2RlZmluZSBwZm5fdmFsaWQocGZuKSAgICAgICAgICAocGZuIDwgbWF4X2xvd19w Zm4pCitleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3BmbjsKKworCisjaWZkZWYgQ09ORklH X05VTUEKKworLyoKKyAqIFBsYXRmb3JtIGRlZmluaXRpb25zIGZvciBESUcgcGxhdGZvcm0gd2l0 aCBjb250aWd1b3VzIG1lbW9yeS4KKyAqLworI2RlZmluZSBNQVhfUEhZU05PREVfSUQJOAkvKiBN YXhpbXVtIG5vZGUgbnVtYmVyICsxICovCisjZGVmaW5lIE5SX05PREVTCTgJLyogTWF4aW11bSBu dW1iZXIgb2Ygbm9kZXMgaW4gU1NJICovCisKKyNkZWZpbmUgTUFYX1BIWVNfTUVNT1JZCSgxVUwg PDwgNDApCS8qIDEgVEIgKi8KKworLyoKKyAqIEJhbmsgZGVmaW5pdGlvbnMuCisgKiBDb25maWd1 cmFibGUgc2V0dGluZ3MgZm9yIERJRzogNTEyTUIvYmFuazogIDE2R0Ivbm9kZSwKKyAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDIwNDhNQi9iYW5rOiAgNjRHQi9ub2RlLAorICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgODE5Mk1CL2Jhbms6IDI1NkdCL25vZGUuCisgKi8K KyNkZWZpbmUgTlJfQkFOS1NfUEVSX05PREUJMzIKKyNpZiBkZWZpbmVkKENPTkZJR19JQTY0X05P REVTSVpFXzE2R0IpCisjIGRlZmluZSBESUdfQkFOS1NISUZUCQkyOQorI2VsaWYgZGVmaW5lZChD T05GSUdfSUE2NF9OT0RFU0laRV82NEdCKQorIyBkZWZpbmUgRElHX0JBTktTSElGVAkJMzEKKyNl bGlmIGRlZmluZWQoQ09ORklHX0lBNjRfTk9ERVNJWkVfMjU2R0IpCisjIGRlZmluZSBESUdfQkFO S1NISUZUCQkzMworI2Vsc2UKKyMgZXJyb3IgVW5zdXBwb3J0ZWQgYmFuayBhbmQgbm9kZXNpemUh CisjZW5kaWYKKyNkZWZpbmUgQkFOS1NJWkUJCSgxVUwgPDwgRElHX0JBTktTSElGVCkKKyNkZWZp bmUgQkFOS19PRkZTRVQoYWRkcikJKCh1bnNpZ25lZCBsb25nKShhZGRyKSAmIChCQU5LU0laRS0x KSkKKyNkZWZpbmUgTlJfQkFOS1MJCShOUl9CQU5LU19QRVJfTk9ERSAqIE5SX05PREVTKQorCisv KgorICogVkFMSURfTUVNX0tBRERSIHJldHVybnMgYSBib29sZWFuIHRvIGluZGljYXRlIGlmIGEg a2FkZHIgaXMKKyAqIHBvdGVudGlhbGx5IGEgdmFsaWQgY2FjaGVhYmxlIGlkZW50aXR5IG1hcHBl ZCBSQU0gbWVtb3J5IGFkZHJlc3MuCisgKiBOb3RlIHRoYXQgdGhlIFJBTSBtYXkgb3IgbWF5IG5v dCBhY3R1YWxseSBiZSBwcmVzZW50ISEKKyAqLworICNkZWZpbmUgVkFMSURfTUVNX0tBRERSKGth ZGRyKQkxCisvKiAjZGVmaW5lIFZBTElEX01FTV9LQUREUihrYWRkcikJKEJBTktfTUVNX01BUF9C QVNFKGthZGRyKSA9PSBOVUxMID8gTlVMTCA6IDEpICovCisKKy8qCisgKiBHaXZlbiBhIG5vZGVp ZCAmIGEgYmFuayBudW1iZXIsIGZpbmQgdGhlIGFkZHJlc3Mgb2YgdGhlIG1lbV9tYXAKKyAqIGVu dHJ5IGZvciB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgYmFuay4KKyAqLworI2RlZmluZSBCQU5LX01F TV9NQVBfSU5ERVgoa2FkZHIpIFwKKwkoKCh1bnNpZ25lZCBsb25nKShrYWRkcikgJiAoTUFYX1BI WVNfTUVNT1JZLTEpKSA+PiBESUdfQkFOS1NISUZUKQorCitleHRlcm4gdm9pZCBidWlsZF9jcHVf dG9fbm9kZV9tYXAodm9pZCk7CisKKyNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLworI2VuZGlmIC8q IF9BU01fSUE2NF9NTVpPTkVfSCAqLwpkaWZmIC1OdXIgbGludXgtMi40LjIwLWJhc2UvaW5jbHVk ZS9hc20taWE2NC9ub2RlZGF0YS5oIGxpbnV4LTIuNC4yMC1kY20vaW5jbHVkZS9hc20taWE2NC9u b2RlZGF0YS5oCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9pbmNsdWRlL2FzbS1pYTY0L25vZGVkYXRh LmgJVGh1IEphbiAgMSAwOTowMDowMCAxOTcwCisrKyBsaW51eC0yLjQuMjAtZGNtL2luY2x1ZGUv YXNtLWlhNjQvbm9kZWRhdGEuaAlXZWQgTWFyIDEyIDEzOjQxOjE1IDIwMDMKQEAgLTAsMCArMSw3 NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0 aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxl ICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3Ig bW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBTaWxpY29uIEdyYXBoaWNz LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAyIE5FQyBD b3JwLgorICogQ29weXJpZ2h0IChjKSAyMDAyIEVyaWNoIEZvY2h0IDxlZm9jaHRAZXNzLm5lYy5k ZT4KKyAqIENvcHlyaWdodCAoYykgMjAwMiBLaW1pbyBTdWdhbnVtYSA8ay1zdWdhbnVtYUBkYS5q cC5uZWMuY29tPgorICovCisKKworI2lmbmRlZiBfQVNNX0lBNjRfTk9ERURBVEFfSAorI2RlZmlu ZSBfQVNNX0lBNjRfTk9ERURBVEFfSAorCisKKyNpbmNsdWRlIDxhc20vbW16b25lLmg+CisKKy8q CisgKiBOb2RlIERhdGEuIE9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGlzIGxvY2F0ZWQgb24gZWFj aCBub2RlIG9mIGEgTlVNQSBzeXN0ZW0uCisgKi8KKworc3RydWN0IHBnbGlzdF9kYXRhOworc3Ry dWN0IGlhNjRfbm9kZV9kYXRhIHsKKwlzaG9ydAkJCW5vZGU7CisgICAgICAgIHN0cnVjdCBwZ2xp c3RfZGF0YQkqcGdfZGF0YV9wdHJzW05SX05PREVTXTsKKwlzdHJ1Y3QgcGFnZQkJKmJhbmtfbWVt X21hcF9iYXNlW05SX0JBTktTXTsKKwlzdHJ1Y3QgaWE2NF9ub2RlX2RhdGEJKm5vZGVfZGF0YV9w dHJzW05SX05PREVTXTsKKwlzaG9ydAkJCW5vZGVfaWRfbWFwW05SX0JBTktTXTsKK307CisKKwor LyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5vZGVfZGF0YSBzdHJ1Y3R1cmUgZm9yIHRo ZSBleGVjdXRpbmcgY3B1LgorICovCisjZGVmaW5lIGxvY2FsX25vZGVfZGF0YQkJKGxvY2FsX2Nw dV9kYXRhLT5ub2RlX2RhdGEpCisKKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5v ZGVfZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzcGVjaWZpZWQgbm9kZS4KKyAqLworI2RlZmluZSBu b2RlX2RhdGEobm9kZSkJKGxvY2FsX25vZGVfZGF0YS0+bm9kZV9kYXRhX3B0cnNbbm9kZV0pCisK Ky8qCisgKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBub2RlX2lkL25vZGVfZGF0YSBmb3IgdGhlIGN1 cnJlbnQgY3B1LgorICogICAgKGJvb3QgdGltZSBvbmx5KQorICovCitleHRlcm4gaW50IGJvb3Rf Z2V0X2xvY2FsX25vZGVpZCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgaWE2NF9ub2RlX2RhdGEgKmdl dF9ub2RlX2RhdGFfcHRyKHZvaWQpOworCisvKgorICogR2l2ZW4gYSBub2RlIGlkLCByZXR1cm4g YSBwb2ludGVyIHRvIHRoZSBwZ19kYXRhX3QgZm9yIHRoZSBub2RlLgorICogVGhlIGZvbGxvd2lu ZyAyIG1hY3JvcyBhcmUgc2ltaWxhci4gCisgKgorICogTk9ERV9EQVRBIAktIHNob3VsZCBiZSB1 c2VkIGluIGFsbCBjb2RlIG5vdCByZWxhdGVkIHRvIHN5c3RlbQorICoJCSAgaW5pdGlhbGl6YXRp b24uIEl0IHVzZXMgcGVybm9kZSBkYXRhIHN0cnVjdHVyZXMgdG8gbWluaW1pemUKKyAqCQkgIG9m Zm5vZGUgbWVtb3J5IHJlZmVyZW5jZXMuIEhvd2V2ZXIsIHRoZXNlIHN0cnVjdHVyZSBhcmUgbm90 IAorICoJCSAgcHJlc2VudCBkdXJpbmcgYm9vdC4gVGhpcyBtYWNybyBjYW4gYmUgdXNlZCBvbmNl IGNwdV9pbml0CisgKgkJICBjb21wbGV0ZXMuCisgKgorICogQk9PVF9OT0RFX0RBVEEKKyAqCQkt IHNob3VsZCBiZSB1c2VkIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24gCisgKgkJICBwcmlv ciB0byBmcmVlaW5nIF9faW5pdGRhdGEuIEl0IGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgcGVyY3B1 CisgKgkJICBhcmVhIGJlaW5nIHByZXNlbnQuCisgKgorICogTk9URTogICBUaGUgbmFtZXMgb2Yg dGhlc2UgbWFjcm9zIGFyZSBtaXNsZWFkaW5nIGJ1dCBhcmUgZGlmZmljdWx0IHRvIGNoYW5nZQor ICoJICAgc2luY2UgdGhleSBhcmUgdXNlZCBpbiBnZW5lcmljIGxpbnV4ICYgb24gb3RoZXIgYXJj aGl0ZWN1cmVzLgorICovCisjZGVmaW5lIE5PREVfREFUQShuaWQpCQkobG9jYWxfbm9kZV9kYXRh LT5wZ19kYXRhX3B0cnNbbmlkXSkKKyNkZWZpbmUgQk9PVF9OT0RFX0RBVEEobmlkKQlib290X2dl dF9wZ19kYXRhX3B0cigobG9uZykobmlkKSkKKworc3RydWN0IHBnbGlzdF9kYXRhOworZXh0ZXJu IHN0cnVjdCBwZ2xpc3RfZGF0YSAqIF9faW5pdCBib290X2dldF9wZ19kYXRhX3B0cihsb25nKTsK KworI2VuZGlmIC8qIF9BU01fSUE2NF9OT0RFREFUQV9IICovCmRpZmYgLU51ciBsaW51eC0yLjQu MjAtYmFzZS9pbmNsdWRlL2FzbS1pYTY0L251bWEuaCBsaW51eC0yLjQuMjAtZGNtL2luY2x1ZGUv YXNtLWlhNjQvbnVtYS5oCi0tLSBsaW51eC0yLjQuMjAtYmFzZS9pbmNsdWRlL2FzbS1pYTY0L251 bWEuaAlUaHUgSmFuICAxIDA5OjAwOjAwIDE5NzAKKysrIGxpbnV4LTIuNC4yMC1kY20vaW5jbHVk ZS9hc20taWE2NC9udW1hLmgJV2VkIE1hciAxMiAxMzo0MToxNSAyMDAzCkBAIC0wLDAgKzEsNzAg QEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAi Q09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgTlVNQSBzcGVjaWZpYyBwcm90 b3R5cGVzIGFuZCBkZWZpbml0aW9ucy4KKyAqIAorICogMjAwMi8wOC8wNSBFcmljaCBGb2NodCA8 ZWZvY2h0QGVzcy5uZWMuZGU+CisgKgorICovCisjaWZuZGVmIF9BU01fSUE2NF9OVU1BX0gKKyNk ZWZpbmUgX0FTTV9JQTY0X05VTUFfSAorCisjaWZkZWYgQ09ORklHX05VTUEKKworI2lmZGVmIENP TkZJR19ESVNDT05USUdNRU0KKyMgaW5jbHVkZSA8YXNtL21tem9uZS5oPgorIyBkZWZpbmUgTlJf TUVNQkxLUyAgIChOUl9CQU5LUykKKyNlbHNlCisjIGRlZmluZSBOUl9OT0RFUyAgICAgKDgpCisj IGRlZmluZSBOUl9NRU1CTEtTICAgKE5SX05PREVTICogOCkKKyNlbmRpZgorCisjaW5jbHVkZSA8 bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CitleHRlcm4gdm9sYXRp bGUgY2hhciBjcHVfdG9fbm9kZV9tYXBbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKK2V4 dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG5vZGVfdG9fY3B1X21hc2tbTlJfTk9ERVNdIF9f Y2FjaGVsaW5lX2FsaWduZWQ7CisKKy8qIFN0dWZmIGJlbG93IHRoaXMgbGluZSBjb3VsZCBiZSBh cmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgKi8KKworZXh0ZXJuIGludCBudW1fbWVtYmxrczsJCS8q IHRvdGFsIG51bWJlciBvZiBtZW1vcnkgY2h1bmtzICovCisKKy8qCisgKiBMaXN0IG9mIG5vZGUg bWVtb3J5IGNodW5rcy4gRmlsbGVkIHdoZW4gcGFyc2luZyBTUkFUIHRhYmxlIHRvCisgKiBvYnRh aW4gaW5mb3JtYXRpb24gYWJvdXQgbWVtb3J5IG5vZGVzLgorKi8KKworc3RydWN0IG5vZGVfbWVt YmxrX3MgeworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFkZHI7CisJdW5zaWduZWQgbG9uZyBzaXpl OworCWludCBuaWQ7CQkvKiB3aGljaCBsb2dpY2FsIG5vZGUgY29udGFpbnMgdGhpcyBjaHVuaz8g Ki8KKwlpbnQgYmFuazsJCS8qIHdoaWNoIG1lbSBiYW5rIG9uIHRoaXMgbm9kZSAqLworfTsKKwor c3RydWN0IG5vZGVfY3B1aWRfcyB7CisJdTE2CXBoeXNfaWQ7CS8qIGlkIDw8IDggfCBlaWQgKi8K KwlpbnQJbmlkOwkJLyogbG9naWNhbCBub2RlIGNvbnRhaW5pbmcgdGhpcyBDUFUgKi8KK307CisK K2V4dGVybiBzdHJ1Y3Qgbm9kZV9tZW1ibGtfcyBub2RlX21lbWJsa1tOUl9NRU1CTEtTXTsKK2V4 dGVybiBzdHJ1Y3Qgbm9kZV9jcHVpZF9zIG5vZGVfY3B1aWRbTlJfQ1BVU107CisKKy8qCisgKiBB Q1BJIDIuMCBTTElUIChTeXN0ZW0gTG9jYWxpdHkgSW5mb3JtYXRpb24gVGFibGUpCisgKiBodHRw Oi8vZGV2cmVzb3VyY2UuaHAuY29tL2RldnJlc291cmNlL0RvY3MvVGVjaFBhcGVycy9JQTY0L3Ns aXQucGRmCisgKgorICogVGhpcyBpcyBhIG1hdHJpeCB3aXRoICJkaXN0YW5jZXMiIGJldHdlZW4g bm9kZXMsIHRoZXkgc2hvdWxkIGJlCisgKiBwcm9wb3J0aW9uYWwgdG8gdGhlIG1lbW9yeSBhY2Nl c3MgbGF0ZW5jeSByYXRpb3MuCisgKi8KKworZXh0ZXJuIHU4IG51bWFfc2xpdFtOUl9OT0RFUyAq IE5SX05PREVTXTsKKyNkZWZpbmUgbm9kZV9kaXN0YW5jZShmcm9tLHRvKSAobnVtYV9zbGl0W2Zy b20gKiBudW1ub2RlcyArIHRvXSkKKworZXh0ZXJuIGludCBwYWRkcl90b19uaWQodW5zaWduZWQg bG9uZyBwYWRkcik7CisKKyNkZWZpbmUgbG9jYWxfbm9kZWlkIChjcHVfdG9fbm9kZV9tYXBbc21w X3Byb2Nlc3Nvcl9pZCgpXSkKKworI2VuZGlmIC8qIENPTkZJR19OVU1BICovCisKKyNlbmRpZiAv KiBfQVNNX0lBNjRfTlVNQV9IICovCmRpZmYgLU51ciBsaW51eC0yLjQuMjAtYmFzZS9pbmNsdWRl L2FzbS1pYTY0L251bW5vZGVzLmggbGludXgtMi40LjIwLWRjbS9pbmNsdWRlL2FzbS1pYTY0L251 bW5vZGVzLmgKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2luY2x1ZGUvYXNtLWlhNjQvbnVtbm9kZXMu aAlUaHUgSmFuICAxIDA5OjAwOjAwIDE5NzAKKysrIGxpbnV4LTIuNC4yMC1kY20vaW5jbHVkZS9h c20taWE2NC9udW1ub2Rlcy5oCVdlZCBNYXIgMTIgMTM6NDE6MTUgMjAwMwpAQCAtMCwwICsxLDcg QEAKKyNpZm5kZWYgX0FTTV9NQVhfTlVNTk9ERVNfSAorI2RlZmluZSBfQVNNX01BWF9OVU1OT0RF U19ICisKKyNpbmNsdWRlIDxhc20vbW16b25lLmg+CisjZGVmaW5lIE1BWF9OVU1OT0RFUwlOUl9O T0RFUworCisjZW5kaWYgLyogX0FTTV9NQVhfTlVNTk9ERVNfSCAqLwpkaWZmIC1OdXIgbGludXgt Mi40LjIwLWJhc2UvaW5jbHVkZS9hc20taWE2NC9wYWdlLmggbGludXgtMi40LjIwLWRjbS9pbmNs dWRlL2FzbS1pYTY0L3BhZ2UuaAotLS0gbGludXgtMi40LjIwLWJhc2UvaW5jbHVkZS9hc20taWE2 NC9wYWdlLmgJTW9uIE1hciAgMyAxMDoyNDoyMyAyMDAzCisrKyBsaW51eC0yLjQuMjAtZGNtL2lu Y2x1ZGUvYXNtLWlhNjQvcGFnZS5oCVdlZCBNYXIgMTIgMTM6Mjc6NDEgMjAwMwpAQCAtNTIsMjAg KzUyLDE2IEBACiAgKi8KICNkZWZpbmUgTUFQX05SX0RFTlNFKGFkZHIpCSgoKHVuc2lnbmVkIGxv bmcpIChhZGRyKSAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKQogCisjaWZuZGVmIENPTkZJ R19ESVNDT05USUdNRU0KICNpZmRlZiBDT05GSUdfSUE2NF9HRU5FUklDCiAjIGluY2x1ZGUgPGFz bS9tYWNodmVjLmg+CiAjIGRlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCShtZW1fbWFwICsgcGxh dGZvcm1fbWFwX25yKGthZGRyKSkKICMgZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkoKHBhZ2Ug LSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKQotI2VsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfU0dJ X1NOMSkKLSMgaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KLSMgIGRlZmluZSB2aXJ0X3RvX3Bh Z2Uoa2FkZHIpCShtZW1fbWFwICsgTUFQX05SX0RFTlNFKGthZGRyKSkKLSMgIGRlZmluZSBwYWdl X3RvX3BoeXMocGFnZSkJWFhYIGZpeCBtZQotIyBlbmRpZgogI2Vsc2UKICMgZGVmaW5lIHZpcnRf dG9fcGFnZShrYWRkcikJKG1lbV9tYXAgKyBNQVBfTlJfREVOU0Uoa2FkZHIpKQogIyBkZWZpbmUg cGFnZV90b19waHlzKHBhZ2UpCSgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCiAjZW5k aWYKLQorI2VuZGlmCiBzdHJ1Y3QgcGFnZTsKIGV4dGVybiBpbnQgaWE2NF9wYWdlX3ZhbGlkIChz dHJ1Y3QgcGFnZSAqKTsKICNkZWZpbmUgVkFMSURfUEFHRShwYWdlKQkoKChwYWdlIC0gbWVtX21h cCkgPCBtYXhfbWFwbnIpICYmIGlhNjRfcGFnZV92YWxpZChwYWdlKSkKZGlmZiAtTnVyIGxpbnV4 LTIuNC4yMC1iYXNlL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oIGxpbnV4LTIuNC4yMC1kY20v aW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmgKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2luY2x1ZGUv YXNtLWlhNjQvcGd0YWJsZS5oCU1vbiBNYXIgIDMgMTA6MjQ6MjMgMjAwMworKysgbGludXgtMi40 LjIwLWRjbS9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaAlXZWQgTWFyIDEyIDEzOjQxOjM4IDIw MDMKQEAgLTIwNiw2ICsyMDYsMTUgQEAKICAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0 IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCiAgKiBhbmQgYSBwYWdlIGVu dHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgogICovCisj aWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQorI2RlZmluZSBta19wdGUocGFnZSxwZ3Byb3QpCQkJ CQkJCVwKKyh7CQkJCQkJCQkJCVwKKwlwdGVfdCBfX3B0ZTsJCQkJCQkJCVwKKwkJCQkJCQkJCQlc CisJcHRlX3ZhbChfX3B0ZSkgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSkgLSBQ QUdFX09GRlNFVCArIHBncHJvdF92YWwocGdwcm90KTsJXAorCV9fcHRlOwkJCQkJCQkJCVwKK30p CisjZWxzZQogI2RlZmluZSBta19wdGUocGFnZSxwZ3Byb3QpCQkJCQkJCVwKICh7CQkJCQkJCQkJ CVwKIAlwdGVfdCBfX3B0ZTsJCQkJCQkJCVwKQEAgLTIxMyw2ICsyMjIsNyBAQAogCXB0ZV92YWwo X19wdGUpID0gKChwYWdlIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHBn cHJvdCk7CVwKIAlfX3B0ZTsJCQkJCQkJCQlcCiB9KQorI2VuZGlmCiAKIC8qIFRoaXMgdGFrZXMg YSBwaHlzaWNhbCBwYWdlIGFkZHJlc3MgdGhhdCBpcyB1c2VkIGJ5IHRoZSByZW1hcHBpbmcgZnVu Y3Rpb25zICovCiAjZGVmaW5lIG1rX3B0ZV9waHlzKHBoeXNwYWdlLCBwZ3Byb3QpIFwKQEAgLTQ0 MCw2ICs0NTAsNyBAQAogICovCiAjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3 aGlsZSAoMCkKIAorI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiAvKiBhcmNoIG1lbV9tYXAg aW5pdCByb3V0aW5lcyBhcmUgbmVlZGVkIGR1ZSB0byBob2xlcyBpbiBhIHZpcnR1YWwgbWVtX21h cCAqLwogI2RlZmluZSBIQVZFX0FSQ0hfTUVNTUFQX0lOSVQKIApAQCAtNDQ5LDcgKzQ2MCw3IEBA CiBleHRlcm4gdW5zaWduZWQgbG9uZyBhcmNoX21lbW1hcF9pbml0IChtZW1tYXBfaW5pdF9jYWxs YmFja190ICpjYWxsYmFjaywKIAlzdHJ1Y3QgcGFnZSAqc3RhcnQsIHN0cnVjdCBwYWdlICplbmQs IGludCB6b25lLAogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFkZHIsIGludCBoaWdobWVtKTsKLQor I2VuZGlmIC8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KICMgZW5kaWYgLyogIV9fQVNTRU1CTFlf XyAqLwogCiAvKgpkaWZmIC1OdXIgbGludXgtMi40LjIwLWJhc2UvaW5jbHVkZS9hc20taWE2NC9w cm9jZXNzb3IuaCBsaW51eC0yLjQuMjAtZGNtL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgK LS0tIGxpbnV4LTIuNC4yMC1iYXNlL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgJTW9uIE1h ciAgMyAxMDoyNDoyMyAyMDAzCisrKyBsaW51eC0yLjQuMjAtZGNtL2luY2x1ZGUvYXNtLWlhNjQv cHJvY2Vzc29yLmgJV2VkIE1hciAxMiAxMzo0MToxNSAyMDAzCkBAIC04Nyw2ICs4Nyw5IEBACiAj aW5jbHVkZSA8YXNtL3JzZS5oPgogI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KICNpbmNsdWRlIDxh c20vYXRvbWljLmg+CisjaWZkZWYgQ09ORklHX05VTUEKKyNpbmNsdWRlIDxhc20vbm9kZWRhdGEu aD4KKyNlbmRpZgogCiAvKiBsaWtlIGFib3ZlIGJ1dCBleHByZXNzZWQgYXMgYml0ZmllbGRzIGZv ciBtb3JlIGVmZmljaWVudCBhY2Nlc3M6ICovCiBzdHJ1Y3QgaWE2NF9wc3IgewpAQCAtMTg3LDkg KzE5MCw4IEBACiAJfSBpcGk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTlVNQQotCXZvaWQgKm5v ZGVfZGlyZWN0b3J5OwotCWludCBudW1hX25vZGVfaWQ7Ci0Jc3RydWN0IGNwdWluZm9faWE2NCAq Y3B1X2RhdGFbTlJfQ1BVU107CisJc3RydWN0IGlhNjRfbm9kZV9kYXRhICpub2RlX2RhdGE7CisJ aW50IG5vZGVpZDsKICNlbmRpZgogCS8qIFBsYXRmb3JtIHNwZWNpZmljIHdvcmQuICBNVVNUIEJF IExBU1QgSU4gU1RSVUNUICovCiAJX191NjQgcGxhdGZvcm1fc3BlY2lmaWM7CkBAIC0yMDEsMjMg KzIwMyw4IEBACiAgKi8KICNkZWZpbmUgbG9jYWxfY3B1X2RhdGEJCSgoc3RydWN0IGNwdWluZm9f aWE2NCAqKSBQRVJDUFVfQUREUikKIAotLyoKLSAqIE9uIE5VTUEgc3lzdGVtcywgY3B1X2RhdGEg Zm9yIGVhY2ggY3B1IGlzIGFsbG9jYXRlZCBkdXJpbmcgY3B1X2luaXQoKSAmIGlzIGFsbG9jYXRl ZCBvbgotICogdGhlIG5vZGUgdGhhdCBjb250YWlucyB0aGUgY3B1LiBUaGlzIG1pbmltaXplcyBv ZmYtbm9kZSBtZW1vcnkgcmVmZXJlbmNlcy4gIGNwdV9kYXRhCi0gKiBmb3IgZWFjaCBjcHUgY29u dGFpbnMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlIGNwdV9kYXRhIHN0cnVjdHVyZXMgb2Yg ZWFjaCBvZiB0aGUKLSAqIG90aGVyIGNwdXMuCi0gKgotICogT24gbm9uLU5VTUEgc3lzdGVtcywg Y3B1X2RhdGEgaXMgYSBzdGF0aWMgYXJyYXkgYWxsb2NhdGVkIGF0IGNvbXBpbGUgdGltZS4gIFJl ZmVyZW5jZXMKLSAqIHRvIHRoZSBjcHVfZGF0YSBvZiBhbm90aGVyIGNwdSBpcyBkb25lIGJ5IGRp cmVjdCByZWZlcmVuY2VzIHRvIHRoZSBhcHByb3ByaWF0ZSBlbnRyeSBvZgotICogdGhlIGFycmF5 LgotICovCi0jaWZkZWYgQ09ORklHX05VTUEKLSMgZGVmaW5lIGNwdV9kYXRhKGNwdSkJCWxvY2Fs X2NwdV9kYXRhLT5jcHVfZGF0YVtjcHVdCi0jIGRlZmluZSBudW1hX25vZGVfaWQoKQkJKGxvY2Fs X2NwdV9kYXRhLT5udW1hX25vZGVfaWQpCi0jZWxzZQotICBleHRlcm4gc3RydWN0IGNwdWluZm9f aWE2NCBfY3B1X2RhdGFbTlJfQ1BVU107Ci0jIGRlZmluZSBjcHVfZGF0YShjcHUpCQkoJl9jcHVf ZGF0YVtjcHVdKQotI2VuZGlmCitleHRlcm4gc3RydWN0IGNwdWluZm9faWE2NAlfY3B1X2RhdGFb TlJfQ1BVU107CisjZGVmaW5lIGNwdV9kYXRhKGNwdSkJCSgmX2NwdV9kYXRhW2NwdV0pCiAKIGV4 dGVybiB2b2lkIGlkZW50aWZ5X2NwdSAoc3RydWN0IGNwdWluZm9faWE2NCAqKTsKIGV4dGVybiB2 b2lkIHByaW50X2NwdV9pbmZvIChzdHJ1Y3QgY3B1aW5mb19pYTY0ICopOwpkaWZmIC1OdXIgbGlu dXgtMi40LjIwLWJhc2UvaW5jbHVkZS9hc20taWE2NC9zbXAuaCBsaW51eC0yLjQuMjAtZGNtL2lu Y2x1ZGUvYXNtLWlhNjQvc21wLmgKLS0tIGxpbnV4LTIuNC4yMC1iYXNlL2luY2x1ZGUvYXNtLWlh NjQvc21wLmgJU2F0IE5vdiAxMCAwNzoyNjoxNyAyMDAxCisrKyBsaW51eC0yLjQuMjAtZGNtL2lu Y2x1ZGUvYXNtLWlhNjQvc21wLmgJV2VkIE1hciAxMiAxMzo0MTozNiAyMDAzCkBAIC0xMjIsNiAr MTIyLDggQEAKIGV4dGVybiBpbnQgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlIChpbnQgY3B1aWQs IHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCiAJCQkJICAgICBpbnQgcmV0 cnksIGludCB3YWl0KTsKIAorZXh0ZXJuIHZvaWQgc21wX2J1aWxkX2NwdV9tYXAodm9pZCk7CisK IAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KICNlbmRpZiAvKiBfQVNNX0lBNjRfU01QX0ggKi8K ZGlmZiAtTnVyIGxpbnV4LTIuNC4yMC1iYXNlL2luY2x1ZGUvYXNtLWlhNjQvdG9wb2xvZ3kuaCBs aW51eC0yLjQuMjAtZGNtL2luY2x1ZGUvYXNtLWlhNjQvdG9wb2xvZ3kuaAotLS0gbGludXgtMi40 LjIwLWJhc2UvaW5jbHVkZS9hc20taWE2NC90b3BvbG9neS5oCVRodSBKYW4gIDEgMDk6MDA6MDAg MTk3MAorKysgbGludXgtMi40LjIwLWRjbS9pbmNsdWRlL2FzbS1pYTY0L3RvcG9sb2d5LmgJV2Vk IE1hciAxMiAxNDoxNzo0MiAyMDAzCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBsaW51eC9pbmNs dWRlL2FzbS1pYTY0L3RvcG9sb2d5LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIEVyaWNo IEZvY2h0LCBORUMKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0FTTV9JQTY0X1RPUE9MT0dZX0gKKyNkZWZp bmUgX0FTTV9JQTY0X1RPUE9MT0dZX0gKKworI2luY2x1ZGUgPGFzbS9hY3BpLmg+CisjaW5jbHVk ZSA8YXNtL251bWEuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNpZmRlZiBDT05GSUdfTlVN QQorLyoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgbm9kZSBjb250YWluaW5nIENQVSAn Y3B1JworICovCisjZGVmaW5lIF9fY3B1X3RvX25vZGUoY3B1KSAoaW50KShjcHVfdG9fbm9kZV9t YXBbY3B1XSkKKworLyoKKyAqIFJldHVybnMgYSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9k ZScuCisgKi8KKyNkZWZpbmUgX19ub2RlX3RvX2NwdV9tYXNrKG5vZGUpIChub2RlX3RvX2NwdV9t YXNrW25vZGVdKQorCisjZWxzZQorI2RlZmluZSBfX2NwdV90b19ub2RlKGNwdSkgKDApCisjZGVm aW5lIF9fbm9kZV90b19jcHVfbWFzayhub2RlKSAocGh5c19jcHVfcHJlc2VudF9tYXApCisjZW5k aWYKKworLyoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgbm9kZSBjb250YWluaW5nIE1l bUJsayAnbWVtYmxrJworICovCisjaWZkZWYgQ09ORklHX0FDUElfTlVNQQorI2RlZmluZSBfX21l bWJsa190b19ub2RlKG1lbWJsaykgKG5vZGVfbWVtYmxrW21lbWJsa10ubmlkKQorI2Vsc2UKKyNk ZWZpbmUgX19tZW1ibGtfdG9fbm9kZShtZW1ibGspIChtZW1ibGspCisjZW5kaWYKKworLyoKKyAq IFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgbm9kZSBjb250YWluaW5nIE5vZGUgJ25pZCcuCisg KiBOb3QgaW1wbGVtZW50ZWQgaGVyZS4gTXVsdGktbGV2ZWwgaGllcmFyY2hpZXMgZGV0ZWN0ZWQg d2l0aAorICogdGhlIGhlbHAgb2Ygbm9kZV9kaXN0YW5jZSgpLgorICovCisjZGVmaW5lIF9fcGFy ZW50X25vZGUobmlkKSAobmlkKQorCisvKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBm aXJzdCBDUFUgb24gTm9kZSAnbm9kZScuCisgKi8KKyNkZWZpbmUgX19ub2RlX3RvX2ZpcnN0X2Nw dShub2RlKSAoX19mZnMoX19ub2RlX3RvX2NwdV9tYXNrKG5vZGUpKSkKKworLyoKKyAqIFJldHVy bnMgdGhlIG51bWJlciBvZiB0aGUgZmlyc3QgTWVtQmxrIG9uIE5vZGUgJ25vZGUnCisgKiBTaG91 bGQgYmUgZml4ZWQgd2hlbiBJQTY0IGRpc2NvbnRpZ21lbSBnb2VzIGluLgorICovCisjZGVmaW5l IF9fbm9kZV90b19tZW1ibGsobm9kZSkgKG5vZGUpCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfVE9Q T0xPR1lfSCAqLwpkaWZmIC1OdXIgbGludXgtMi40LjIwLWJhc2UvaW5jbHVkZS9saW51eC9hY3Bp LmggbGludXgtMi40LjIwLWRjbS9pbmNsdWRlL2xpbnV4L2FjcGkuaAotLS0gbGludXgtMi40LjIw LWJhc2UvaW5jbHVkZS9saW51eC9hY3BpLmgJTW9uIE1hciAgMyAxMDoyNDoyMyAyMDAzCisrKyBs aW51eC0yLjQuMjAtZGNtL2luY2x1ZGUvbGludXgvYWNwaS5oCVdlZCBNYXIgMTIgMTQ6MTc6NDAg MjAwMwpAQCAtMzQ0LDYgKzM0NCwxNCBAQAogdm9pZCBhY3BpX3RhYmxlX3ByaW50IChzdHJ1Y3Qg YWNwaV90YWJsZV9oZWFkZXIgKiwgdW5zaWduZWQgbG9uZyk7CiB2b2lkIGFjcGlfdGFibGVfcHJp bnRfbWFkdF9lbnRyeSAoYWNwaV90YWJsZV9lbnRyeV9oZWFkZXIgKik7CiAKKyNpZmRlZiBDT05G SUdfQUNQSV9OVU1BCitpbnQgX19pbml0IGFjcGlfbnVtYV9pbml0KHZvaWQpOwordm9pZCBfX2lu aXQgYWNwaV9udW1hX3NsaXRfaW5pdCAoc3RydWN0IGFjcGlfdGFibGVfc2xpdCAqKTsKK3ZvaWQg X19pbml0IGFjcGlfbnVtYV9wcm9jZXNzb3JfYWZmaW5pdHlfaW5pdCAoc3RydWN0IGFjcGlfdGFi bGVfcHJvY2Vzc29yX2FmZmluaXR5ICopOwordm9pZCBfX2luaXQgYWNwaV9udW1hX21lbW9yeV9h ZmZpbml0eV9pbml0IChzdHJ1Y3QgYWNwaV90YWJsZV9tZW1vcnlfYWZmaW5pdHkgKik7Cit2b2lk IF9faW5pdCBhY3BpX251bWFfYXJjaF9maXh1cCh2b2lkKTsKKyNlbmRpZgorCiAjZW5kaWYgLypD T05GSUdfQUNQSV9CT09UKi8KIAogCmRpZmYgLU51ciBsaW51eC0yLjQuMjAtYmFzZS9pbmNsdWRl L2xpbnV4L21tem9uZS5oIGxpbnV4LTIuNC4yMC1kY20vaW5jbHVkZS9saW51eC9tbXpvbmUuaAot LS0gbGludXgtMi40LjIwLWJhc2UvaW5jbHVkZS9saW51eC9tbXpvbmUuaAlNb24gTWFyICAzIDEw OjI0OjIzIDIwMDMKKysrIGxpbnV4LTIuNC4yMC1kY20vaW5jbHVkZS9saW51eC9tbXpvbmUuaAlX ZWQgTWFyIDEyIDE0OjE3OjQyIDIwMDMKQEAgLTgsNiArOCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4 L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dh aXQuaD4KKyNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisjaW5jbHVkZSA8YXNtL251bW5vZGVz Lmg+CisjZW5kaWYKKyNpZm5kZWYgTUFYX05VTU5PREVTCisjZGVmaW5lIE1BWF9OVU1OT0RFUyAx CisjZW5kaWYKIAogLyoKICAqIEZyZWUgbWVtb3J5IG1hbmFnZW1lbnQgLSB6b25lZCBidWRkeSBh bGxvY2F0b3IuCkBAIC0yMTIsNiArMjE4LDE1IEBACiAjZGVmaW5lIGZvcl9lYWNoX3pvbmUoem9u ZSkgXAogCWZvcih6b25lID0gcGdkYXRfbGlzdC0+bm9kZV96b25lczsgem9uZTsgem9uZSA9IG5l eHRfem9uZSh6b25lKSkKIAorI2lmZGVmIENPTkZJR19OVU1BCisjZGVmaW5lIE1BWF9OUl9NRU1C TEtTICBCSVRTX1BFUl9MT05HIC8qIE1heCBudW1iZXIgb2YgTWVtb3J5IEJsb2NrcyAqLworI2Vs c2UgLyogIUNPTkZJR19OVU1BICovCisjZGVmaW5lIE1BWF9OUl9NRU1CTEtTICAxCisjZW5kaWYg LyogQ09ORklHX05VTUEgKi8KKworI2luY2x1ZGUgPGFzbS90b3BvbG9neS5oPgorLyogUmV0dXJu cyB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IE5vZGUuICovCisjZGVmaW5lIG51bWFfbm9kZV9p ZCgpICAgICAgICAgIChfX2NwdV90b19ub2RlKHNtcF9wcm9jZXNzb3JfaWQoKSkpCiAKICNpZm5k ZWYgQ09ORklHX0RJU0NPTlRJR01FTQogCmRpZmYgLU51ciBsaW51eC0yLjQuMjAtYmFzZS9pbml0 L21haW4uYyBsaW51eC0yLjQuMjAtZGNtL2luaXQvbWFpbi5jCi0tLSBsaW51eC0yLjQuMjAtYmFz ZS9pbml0L21haW4uYwlNb24gTWFyICAzIDEwOjI0OjIzIDIwMDMKKysrIGxpbnV4LTIuNC4yMC1k Y20vaW5pdC9tYWluLmMJV2VkIE1hciAxMiAxMzozMzozMiAyMDAzCkBAIC0yOTAsNiArMjkwLDcg QEAKIAogCiBleHRlcm4gdm9pZCBzZXR1cF9hcmNoKGNoYXIgKiopOworZXh0ZXJuIHZvaWQgX19p bml0IGJ1aWxkX2FsbF96b25lbGlzdHModm9pZCk7CiBleHRlcm4gdm9pZCBjcHVfaWRsZSh2b2lk KTsKIAogdW5zaWduZWQgbG9uZyB3YWl0X2luaXRfaWRsZTsKQEAgLTM2MCw2ICszNjEsNyBAQAog CWxvY2tfa2VybmVsKCk7CiAJcHJpbnRrKGxpbnV4X2Jhbm5lcik7CiAJc2V0dXBfYXJjaCgmY29t bWFuZF9saW5lKTsKKwlidWlsZF9hbGxfem9uZWxpc3RzKCk7CiAJcHJpbnRrKCJLZXJuZWwgY29t bWFuZCBsaW5lOiAlc1xuIiwgc2F2ZWRfY29tbWFuZF9saW5lKTsKIAlwYXJzZV9vcHRpb25zKGNv bW1hbmRfbGluZSk7CiAJdHJhcF9pbml0KCk7CmRpZmYgLU51ciBsaW51eC0yLjQuMjAtYmFzZS9t bS9wYWdlX2FsbG9jLmMgbGludXgtMi40LjIwLWRjbS9tbS9wYWdlX2FsbG9jLmMKLS0tIGxpbnV4 LTIuNC4yMC1iYXNlL21tL3BhZ2VfYWxsb2MuYwlNb24gTWFyICAzIDEwOjI0OjIzIDIwMDMKKysr IGxpbnV4LTIuNC4yMC1kY20vbW0vcGFnZV9hbGxvYy5jCU1vbiBNYXIgIDMgMTA6NTU6MTIgMjAw MwpAQCAtNTg2LDEzICs1ODYsNDEgQEAKIC8qCiAgKiBCdWlsZHMgYWxsb2NhdGlvbiBmYWxsYmFj ayB6b25lIGxpc3RzLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYnVpbGRfem9uZWxpc3RzKHBn X2RhdGFfdCAqcGdkYXQpCitzdGF0aWMgaW50IF9faW5pdCBidWlsZF96b25lbGlzdHNfbm9kZShw Z19kYXRhX3QgKnBnZGF0LCB6b25lbGlzdF90ICp6b25lbGlzdCwgaW50IGosIGludCBrKQogewot CWludCBpLCBqLCBrOworCXN3aXRjaCAoaykgeworCQl6b25lX3QgKnpvbmU7CisJZGVmYXVsdDoK KwkJQlVHKCk7CisJY2FzZSBaT05FX0hJR0hNRU06CisJCXpvbmUgPSBwZ2RhdC0+bm9kZV96b25l cyArIFpPTkVfSElHSE1FTTsKKwkJaWYgKHpvbmUtPm1lbXNpemUpIHsKKyNpZm5kZWYgQ09ORklH X0hJR0hNRU0KKwkJCUJVRygpOworI2VuZGlmCisJCQl6b25lbGlzdC0+em9uZXNbaisrXSA9IHpv bmU7CisJCX0KKwljYXNlIFpPTkVfTk9STUFMOgorCQl6b25lID0gcGdkYXQtPm5vZGVfem9uZXMg KyBaT05FX05PUk1BTDsKKwkJaWYgKHpvbmUtPm1lbXNpemUpCisJCQl6b25lbGlzdC0+em9uZXNb aisrXSA9IHpvbmU7CisJY2FzZSBaT05FX0RNQToKKwkJem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVz ICsgWk9ORV9ETUE7CisJCWlmICh6b25lLT5tZW1zaXplKQorCQkJem9uZWxpc3QtPnpvbmVzW2or K10gPSB6b25lOworCX0KIAorCXJldHVybiBqOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYnVp bGRfem9uZWxpc3RzKHBnX2RhdGFfdCAqcGdkYXQpCit7CisJaW50IGksIGosIGssIG5vZGUsIGxv Y2FsX25vZGU7CisKKwlsb2NhbF9ub2RlID0gcGdkYXQtPm5vZGVfaWQ7CisJcHJpbnRrKCJCdWls ZGluZyB6b25lbGlzdCBmb3Igbm9kZSA6ICVkXG4iLCBsb2NhbF9ub2RlKTsKIAlmb3IgKGkgPSAw OyBpIDw9IEdGUF9aT05FTUFTSzsgaSsrKSB7CiAJCXpvbmVsaXN0X3QgKnpvbmVsaXN0OwotCQl6 b25lX3QgKnpvbmU7CiAKIAkJem9uZWxpc3QgPSBwZ2RhdC0+bm9kZV96b25lbGlzdHMgKyBpOwog CQltZW1zZXQoem9uZWxpc3QsIDAsIHNpemVvZigqem9uZWxpc3QpKTsKQEAgLTYwNCwzMSArNjMy LDMwIEBACiAJCWlmIChpICYgX19HRlBfRE1BKQogCQkJayA9IFpPTkVfRE1BOwogCi0JCXN3aXRj aCAoaykgewotCQkJZGVmYXVsdDoKLQkJCQlCVUcoKTsKLQkJCS8qCi0JCQkgKiBmYWxsdGhyb3Vn aDoKLQkJCSAqLwotCQkJY2FzZSBaT05FX0hJR0hNRU06Ci0JCQkJem9uZSA9IHBnZGF0LT5ub2Rl X3pvbmVzICsgWk9ORV9ISUdITUVNOwotCQkJCWlmICh6b25lLT5tZW1zaXplKSB7Ci0jaWZuZGVm IENPTkZJR19ISUdITUVNCi0JCQkJCUJVRygpOwotI2VuZGlmCi0JCQkJCXpvbmVsaXN0LT56b25l c1tqKytdID0gem9uZTsKLQkJCQl9Ci0JCQljYXNlIFpPTkVfTk9STUFMOgotCQkJCXpvbmUgPSBw Z2RhdC0+bm9kZV96b25lcyArIFpPTkVfTk9STUFMOwotCQkJCWlmICh6b25lLT5tZW1zaXplKQot CQkJCQl6b25lbGlzdC0+em9uZXNbaisrXSA9IHpvbmU7Ci0JCQljYXNlIFpPTkVfRE1BOgotCQkJ CXpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIFpPTkVfRE1BOwotCQkJCWlmICh6b25lLT5tZW1z aXplKQotCQkJCQl6b25lbGlzdC0+em9uZXNbaisrXSA9IHpvbmU7Ci0JCX0KKwkJaiA9IGJ1aWxk X3pvbmVsaXN0c19ub2RlKHBnZGF0LCB6b25lbGlzdCwgaiwgayk7CisJCS8qCisJCSAqIE5vdyB3 ZSBidWlsZCB0aGUgem9uZWxpc3Qgc28gdGhhdCBpdCBjb250YWlucyB0aGUgem9uZXMKKwkJICog b2YgYWxsIHRoZSBvdGhlciBub2Rlcy4KKwkJICogV2UgZG9uJ3Qgd2FudCB0byBwcmVzc3VyZSBh IHBhcnRpY3VsYXIgbm9kZSwgc28gd2hlbgorCQkgKiBidWlsZGluZyB0aGUgem9uZXMgZm9yIG5v ZGUgTiwgd2UgbWFrZSBzdXJlIHRoYXQgdGhlCisJCSAqIHpvbmVzIGNvbWluZyByaWdodCBhZnRl ciB0aGUgbG9jYWwgb25lcyBhcmUgdGhvc2UgZnJvbQorCQkgKiBub2RlIE4rMSAobW9kdWxvIE4p CisJCSAqLworCQlmb3IgKG5vZGUgPSBsb2NhbF9ub2RlICsgMTsgbm9kZSA8IG51bW5vZGVzOyBu b2RlKyspCisJCQlqID0gYnVpbGRfem9uZWxpc3RzX25vZGUoTk9ERV9EQVRBKG5vZGUpLCB6b25l bGlzdCwgaiwgayk7CisJCWZvciAobm9kZSA9IDA7IG5vZGUgPCBsb2NhbF9ub2RlOyBub2RlKysp CisJCQlqID0gYnVpbGRfem9uZWxpc3RzX25vZGUoTk9ERV9EQVRBKG5vZGUpLCB6b25lbGlzdCwg aiwgayk7CisKIAkJem9uZWxpc3QtPnpvbmVzW2orK10gPSBOVUxMOwotCX0gCisJfQorfQorCit2 b2lkIF9faW5pdCBidWlsZF9hbGxfem9uZWxpc3RzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3Io aSA9IDAgOyBpIDwgbnVtbm9kZXMgOyBpKyspCisJCWJ1aWxkX3pvbmVsaXN0cyhOT0RFX0RBVEEo aSkpOwogfQogCiAvKgpAQCAtODA2LDYgKzgzMyw3IEBACiAJCSAqIHVwIGJ5IGZyZWVfYWxsX2Jv b3RtZW0oKSBvbmNlIHRoZSBlYXJseSBib290IHByb2Nlc3MgaXMKIAkJICogZG9uZS4gTm9uLWF0 b21pYyBpbml0aWFsaXphdGlvbiwgc2luZ2xlLXBhc3MuCiAJCSAqLworCiAJCXpvbmVfc3RhcnRf cGFkZHIgPSBNRU1NQVBfSU5JVChtZW1fbWFwICsgb2Zmc2V0LAogCQkJCW1lbV9tYXAgKyBvZmZz ZXQgKyBzaXplLAogCQkJCW5pZCAqIE1BWF9OUl9aT05FUyArIGosIHpvbmVfc3RhcnRfcGFkZHIs CkBAIC04NTAsNyArODc4LDYgQEAKIAkJCSAgKHVuc2lnbmVkIGxvbmcgKikgYWxsb2NfYm9vdG1l bV9ub2RlKHBnZGF0LCBiaXRtYXBfc2l6ZSk7CiAJCX0KIAl9Ci0JYnVpbGRfem9uZWxpc3RzKHBn ZGF0KTsKIH0KIAogdm9pZCBfX2luaXQgZnJlZV9hcmVhX2luaXQodW5zaWduZWQgbG9uZyAqem9u ZXNfc2l6ZSkK --------_3E6ED602C23C030F4530_MULTIPART_MIXED_--