From: "Yugui (Yuki Sonoda)" Date: 2008-10-07T22:55:50+09:00 Subject: [ruby-dev:36676] Re: Embedding struct RArray This is a multi-part message in MIME format. --------------070602010803050805040806 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Yuguiです。 少し修正したパッチ(添付)を適用してベンチマーク(添付)を取ってみました。 配列を生成して小さな修正を施す、というよくあるケースについて結構効いてい るように思えます。 このパッチの取り込みの件、いかがでしょうか? % ruby benchmark/driver.rb -e "tmp/master/ruby-trunk; tmp/array/ruby-trunk" -d benchmark -p "vm1_array" "1.8.7" ----------------------------------------------------------- benchmark results: name ruby 1.9.0 (2008-10-07 revision 0) [i386-darwin9.5.0] ruby 1.9.0 (2008-10-07 Array embedding 0) [i386-darwin9.5.0] loop_whileloop 2.290 2.230 vm1_array00* 56.080 34.768 vm1_array01* 59.314 32.824 vm1_array02* 58.405 37.891 vm1_array03* 61.440 41.745 vm1_array04* 67.146 60.404 vm1_array05* 67.111 59.538 vm1_array06* 70.136 63.797 vm1_array07* 73.448 68.127 vm1_array08* 78.289 72.425 vm1_array09* 81.875 74.695 vm1_array10* 80.650 83.679 vm1_array15* 104.824 102.354 vm1_array20* 136.173 132.310 vm1_array30* 167.625 167.287 vm1_array40* 209.358 221.168 vm1_array50* 269.420 256.223 -- Yugui http://yugui.jp 私は私をDumpする --------------070602010803050805040806 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="0001-embedding-struct-RArray.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="0001-embedding-struct-RArray.patch" RnJvbSAwM2ZjYjE0ZWNlNjZjOWYxZmViYTYyNjU4MDA5NDgyMDQxYTkxNGQ0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZdWtpIFNvbm9kYSAoWXVndWkpIDx5dWd1aUB5dWd1 aS5qcD4KRGF0ZTogVHVlLCA3IE9jdCAyMDA4IDIyOjUyOjMwICswOTAwClN1YmplY3Q6IFtQ QVRDSF0gZW1iZWRkaW5nIHN0cnVjdCBSQXJyYXkKCi0tLQogLmdkYmluaXQgICAgICAgICAg ICB8ICAgMjkgKysrKy0KIGFycmF5LmMgICAgICAgICAgICAgfCAgNDI0ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogZXh0L3RrL3RjbHRr bGliLmMgICB8ICAgIDggKy0KIGdjLmMgICAgICAgICAgICAgICAgfCAgICAyICstCiBpbmNs dWRlL3J1YnkvcnVieS5oIHwgICAzMyArKystCiBwYXJzZS55ICAgICAgICAgICAgIHwgICAg MiArLQogcHJvYy5jICAgICAgICAgICAgICB8ICAgIDYgKy0KIHZlcnNpb24uaCAgICAgICAg ICAgfCAgICAxICsKIDggZmlsZXMgY2hhbmdlZCwgMzUyIGluc2VydGlvbnMoKyksIDE1MyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS8uZ2RiaW5pdCBiLy5nZGJpbml0CmluZGV4IDg1 OThjZjAuLjk2ZTAzM2YgMTAwNjQ0Ci0tLSBhLy5nZGJpbml0CisrKyBiLy5nZGJpbml0CkBA IC0xMDQsOSArMTA0LDM0IEBAIGRlZmluZSBycAogICAgIHByaW50IChzdHJ1Y3QgUlJlZ2V4 cCAqKSRhcmcwCiAgIGVsc2UKICAgaWYgKCRmbGFncyAmIFJVQllfVF9NQVNLKSA9PSBSVUJZ X1RfQVJSQVkKLSAgICBwcmludGYgIlRfQVJSQVk6IGxlbj0lbGQgIiwgKChzdHJ1Y3QgUkFy cmF5KikkYXJnMCktPmxlbgorICAgIGlmICgkZmxhZ3MgJiBSVUJZX0ZMX1VTRVIxKQorICAg ICAgc2V0ICRsZW4gPSAoKCRmbGFncyAmIChSVUJZX0ZMX1VTRVIzfFJVQllfRkxfVVNFUjQp KSA+PiAoUlVCWV9GTF9VU0hJRlQrMykpCisgICAgICBwcmludGYgIlRfQVJSQVk6IGxlbj0l bGQgIiwgJGxlbgorICAgICAgcHJpbnRmICIoZW1iZWQpICIKKyAgICAgIGlmICgkbGVuID09 IDApCisJcHJpbnRmICJ7KGVtcHR5KX0gIgorICAgICAgZWxzZQorCW91dHB1dC94ICooKFZB TFVFKikoKHN0cnVjdCBSQXJyYXkqKSRhcmcwKS0+YXMuYXJ5KSBAICRsZW4KKwlwcmludGYg IiAiCisgICAgICBlbmQKKyAgICBlbHNlCisgICAgICBzZXQgJGxlbiA9ICgoc3RydWN0IFJB cnJheSopJGFyZzApLT5hcy5oZWFwLmxlbgorICAgICAgcHJpbnRmICJUX0FSUkFZOiBsZW49 JWxkICIsICRsZW4KKyAgICAgIGlmICgkZmxhZ3MgJiBSVUJZX0ZMX1VTRVIyKQorCXByaW50 ZiAiKHNoYXJlZCkgc2hhcmVkPSIKKwlvdXRwdXQveCAoKHN0cnVjdCBSQXJyYXkqKSRhcmcw KS0+YXMuaGVhcC5hdXguc2hhcmVkCisJcHJpbnRmICIgIgorICAgICAgZWxzZQorCXByaW50 ZiAiKG93bmVyc2hpcCkgY2FwYT0lbGQgIiwgKChzdHJ1Y3QgUkFycmF5KikkYXJnMCktPmFz LmhlYXAuYXV4LmNhcGEKKyAgICAgIGVuZAorICAgICAgaWYgKCRsZW4gPT0gMCkKKwlwcmlu dGYgInsoZW1wdHkpfSAiCisgICAgICBlbHNlCisJb3V0cHV0L3ggKigoVkFMVUUqKSgoc3Ry dWN0IFJBcnJheSopJGFyZzApLT5hcy5oZWFwLnB0cikgQCAkbGVuCisJcHJpbnRmICIgIgor ICAgICAgZW5kCisgICAgZW5kCiAgICAgcHJpbnQgKHN0cnVjdCBSQXJyYXkgKikkYXJnMAot ICAgIHgveHcgKChzdHJ1Y3QgUkFycmF5KikkYXJnMCktPnB0cgogICBlbHNlCiAgIGlmICgk ZmxhZ3MgJiBSVUJZX1RfTUFTSykgPT0gUlVCWV9UX0ZJWE5VTQogICAgIHByaW50ZiAiVF9G SVhOVU06ICIKZGlmZiAtLWdpdCBhL2FycmF5LmMgYi9hcnJheS5jCmluZGV4IGUzM2M3YmMu LjE0NDYyZmUgMTAwNjQ0Ci0tLSBhL2FycmF5LmMKKysrIGIvYXJyYXkuYwpAQCAtMTQsNiAr MTQsOCBAQAogI2luY2x1ZGUgInJ1YnkvcnVieS5oIgogI2luY2x1ZGUgInJ1YnkvdXRpbC5o IgogI2luY2x1ZGUgInJ1Ynkvc3QuaCIKKyNkZWZpbmUgTkRFQlVHCisjaW5jbHVkZSA8YXNz ZXJ0Lmg+CiAKIFZBTFVFIHJiX2NBcnJheTsKIApAQCAtMzgsMTggKzQwLDEyMCBAQCBtZW1m aWxsKHJlZ2lzdGVyIFZBTFVFICptZW0sIHJlZ2lzdGVyIGxvbmcgc2l6ZSwgcmVnaXN0ZXIg VkFMVUUgdmFsKQogICAgIH0KIH0KIAotI2RlZmluZSBBUllfU0hBUkVEX1AoYSkgRkxfVEVT VChhLCBFTFRTX1NIQVJFRCkKKyMgZGVmaW5lIEFSWV9TSEFSRURfUChhcnkpIFwKKyAgICAo YXNzZXJ0KCFGTF9URVNUKGFyeSwgRUxUU19TSEFSRUQpIHx8ICFGTF9URVNUKGFyeSwgUkFS UkFZX0VNQkVEX0ZMQUcpKSwgXAorICAgICBGTF9URVNUKGFyeSxFTFRTX1NIQVJFRCkpCisj IGRlZmluZSBBUllfRU1CRURfUChhcnkpIFwKKyAgICAoYXNzZXJ0KCFGTF9URVNUKGFyeSwg RUxUU19TSEFSRUQpIHx8ICFGTF9URVNUKGFyeSwgUkFSUkFZX0VNQkVEX0ZMQUcpKSwgXAor ICAgICBGTF9URVNUKGFyeSwgUkFSUkFZX0VNQkVEX0ZMQUcpKQogCisjZGVmaW5lIEFSWV9I RUFQX1BUUihhKSAoYXNzZXJ0KCFBUllfRU1CRURfUChhKSksIFJBUlJBWShhKS0+YXMuaGVh cC5wdHIpCisjZGVmaW5lIEFSWV9IRUFQX0xFTihhKSAoYXNzZXJ0KCFBUllfRU1CRURfUChh KSksIFJBUlJBWShhKS0+YXMuaGVhcC5sZW4pCisjZGVmaW5lIEFSWV9FTUJFRF9QVFIoYSkg KGFzc2VydChBUllfRU1CRURfUChhKSksIFJBUlJBWShhKS0+YXMuYXJ5KQorI2RlZmluZSBB UllfRU1CRURfTEVOKGEpIFwKKyAgICAoYXNzZXJ0KEFSWV9FTUJFRF9QKGEpKSwgXAorICAg ICAobG9uZykoKFJCQVNJQyhhKS0+ZmxhZ3MgPj4gUkFSUkFZX0VNQkVEX0xFTl9TSElGVCkg JiBcCisJIChSQVJSQVlfRU1CRURfTEVOX01BU0sgPj4gUkFSUkFZX0VNQkVEX0xFTl9TSElG VCkpKQorCisjZGVmaW5lIEFSWV9PV05TX0hFQVBfUChhKSAoIUZMX1RFU1QoYSwgRUxUU19T SEFSRUR8UkFSUkFZX0VNQkVEX0ZMQUcpKQorI2RlZmluZSBGTF9TRVRfRU1CRUQoYSkgZG8g eyBcCisgICAgYXNzZXJ0KCFBUllfU0hBUkVEX1AoYSkpOyBcCisgICAgYXNzZXJ0KCFPQkpf RlJPWkVOKGEpKTsgXAorICAgIEZMX1NFVChhLCBSQVJSQVlfRU1CRURfRkxBRyk7IFwKK30g d2hpbGUgKDApCisjZGVmaW5lIEZMX1VOU0VUX0VNQkVEKGFyeSkgRkxfVU5TRVQoYXJ5LCBS QVJSQVlfRU1CRURfRkxBR3xSQVJSQVlfRU1CRURfTEVOX01BU0spCisjZGVmaW5lIEZMX1NF VF9TSEFSRUQoYXJ5KSBkbyB7IFwKKyAgICBhc3NlcnQoIUFSWV9FTUJFRF9QKGFyeSkpOyBc CisgICAgRkxfU0VUKGFyeSwgRUxUU19TSEFSRUQpOyBcCit9IHdoaWxlICgwKQorI2RlZmlu ZSBGTF9VTlNFVF9TSEFSRUQoYXJ5KSBGTF9VTlNFVChhcnksIEVMVFNfU0hBUkVEKQorCisj ZGVmaW5lIEFSWV9TRVRfUFRSKGFyeSwgcCkgZG8geyBcCisgICAgYXNzZXJ0KCFBUllfRU1C RURfUChhcnkpKTsgXAorICAgIGFzc2VydCghT0JKX0ZST1pFTihhcnkpKTsgXAorICAgIFJB UlJBWShhcnkpLT5hcy5oZWFwLnB0ciA9IChwKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUg QVJZX1NFVF9FTUJFRF9MRU4oYXJ5LCBuKSBkbyB7IFwKKyAgICBsb25nIHRtcF9uID0gbjsg XAorICAgIGFzc2VydChBUllfRU1CRURfUChhcnkpKTsgXAorICAgIGFzc2VydCghT0JKX0ZS T1pFTihhcnkpKTsgXAorICAgIFJCQVNJQyhhcnkpLT5mbGFncyAmPSB+UkFSUkFZX0VNQkVE X0xFTl9NQVNLOyBcCisgICAgUkJBU0lDKGFyeSktPmZsYWdzIHw9ICh0bXBfbikgPDwgUkFS UkFZX0VNQkVEX0xFTl9TSElGVDsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgQVJZX1NFVF9I RUFQX0xFTihhcnksIG4pIGRvIHsgXAorICAgIGFzc2VydCghQVJZX0VNQkVEX1AoYXJ5KSk7 IFwKKyAgICBSQVJSQVkoYXJ5KS0+YXMuaGVhcC5sZW4gPSBuOyBcCit9IHdoaWxlICgwKQog I2RlZmluZSBBUllfU0VUX0xFTihhcnksIG4pIGRvIHsgXAotICAgIFJBUlJBWShhcnkpLT5s ZW4gPSAobik7XAorICAgIGlmIChBUllfRU1CRURfUChhcnkpKSB7IFwKKyAgICAgICAgQVJZ X1NFVF9FTUJFRF9MRU4oYXJ5LCBuKTsgXAorICAgIH0gXAorICAgIGVsc2UgeyBcCisgICAg ICAgIEFSWV9TRVRfSEVBUF9MRU4oYXJ5LCBuKTsgXAorICAgIH0gXAorICAgIGFzc2VydChS QVJSQVlfTEVOKGFyeSkgPT0gbik7IFwKIH0gd2hpbGUgKDApIAorI2RlZmluZSBBUllfSU5D UkVBU0VfUFRSKGFyeSwgbikgZG8gIHsgXAorICAgIGFzc2VydCghQVJZX0VNQkVEX1AoYXJ5 KSk7IFwKKyAgICBhc3NlcnQoIU9CSl9GUk9aRU4oYXJ5KSk7IFwKKyAgICBSQVJSQVkoYXJ5 KS0+YXMuaGVhcC5wdHIgKz0gbjsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgQVJZX0lOQ1JF QVNFX0xFTihhcnksIG4pIGRvICB7IFwKKyAgICBhc3NlcnQoIU9CSl9GUk9aRU4oYXJ5KSk7 IFwKKyAgICBpZiAoQVJZX0VNQkVEX1AoYXJ5KSkgeyBcCisgICAgICAgIEFSWV9TRVRfRU1C RURfTEVOKGFyeSwgUkFSUkFZX0xFTihhcnkpK24pOyBcCisgICAgfSBcCisgICAgZWxzZSB7 IFwKKyAgICAgICAgUkFSUkFZKGFyeSktPmFzLmhlYXAubGVuICs9IG47IFwKKyAgICB9IFwK K30gd2hpbGUgKDApCisKKyNkZWZpbmUgQVJZX0NBUEEoYXJ5KSAoQVJZX0VNQkVEX1AoYXJ5 KSA/IFJBUlJBWV9FTUJFRF9MRU5fTUFYIDogUkFSUkFZKGFyeSktPmFzLmhlYXAuYXV4LmNh cGEpCisjZGVmaW5lIEFSWV9TRVRfQ0FQQShhcnksIG4pIGRvIHsgXAorICAgIGFzc2VydCgh QVJZX0VNQkVEX1AoYXJ5KSk7IFwKKyAgICBhc3NlcnQoIUFSWV9TSEFSRURfUChhcnkpKTsg XAorICAgIGFzc2VydCghT0JKX0ZST1pFTihhcnkpKTsgXAorICAgIFJBUlJBWShhcnkpLT5h cy5oZWFwLmF1eC5jYXBhID0gKG4pOyBcCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIEFSWV9D QVBBKGFyeSkgUkFSUkFZKGFyeSktPmF1eC5jYXBhCi0jZGVmaW5lIFJFU0laRV9DQVBBKGFy eSxjYXBhY2l0eSkgZG8ge1wKLSAgICBSRUFMTE9DX04oUkFSUkFZKGFyeSktPnB0ciwgVkFM VUUsIChjYXBhY2l0eSkpO1wKLSAgICBSQVJSQVkoYXJ5KS0+YXV4LmNhcGEgPSAoY2FwYWNp dHkpO1wKKyNkZWZpbmUgQVJZX1NIQVJFRChhcnkpIChhc3NlcnQoQVJZX1NIQVJFRF9QKGFy eSkpLCBSQVJSQVkoYXJ5KS0+YXMuaGVhcC5hdXguc2hhcmVkKQorI2RlZmluZSBBUllfU0VU X1NIQVJFRChhcnksIHZhbHVlKSBkbyB7IFwKKyAgICBhc3NlcnQoIUFSWV9FTUJFRF9QKGFy eSkpOyBcCisgICAgYXNzZXJ0KEFSWV9TSEFSRURfUChhcnkpKTsgXAorICAgIFJBUlJBWShh cnkpLT5hcy5oZWFwLmF1eC5zaGFyZWQgPSAodmFsdWUpOyBcCiB9IHdoaWxlICgwKQogCitz dGF0aWMgdm9pZAorUkVTSVpFX0NBUEEoVkFMVUUgYXJ5LCBsb25nIGNhcGFjaXR5KQorewor ICAgIGFzc2VydCghT0JKX0ZST1pFTihhcnkpKTsgCisgICAgYXNzZXJ0KCFBUllfU0hBUkVE X1AoYXJ5KSk7IAorICAgIGlmIChjYXBhY2l0eSA+IFJBUlJBWV9FTUJFRF9MRU5fTUFYKSB7 CisgICAgICAgIGlmIChBUllfRU1CRURfUChhcnkpKSB7CisgICAgICAgICAgICBsb25nIGxl biA9IEFSWV9FTUJFRF9MRU4oYXJ5KTsgCisgICAgICAgICAgICBWQUxVRSAqcHRyID0gQUxM T0NfTihWQUxVRSwgKGNhcGFjaXR5KSk7CisgICAgICAgICAgICBNRU1DUFkocHRyLCBBUllf RU1CRURfUFRSKGFyeSksIFZBTFVFLCBsZW4pOyAKKyAgICAgICAgICAgIEZMX1VOU0VUX0VN QkVEKGFyeSk7IAorICAgICAgICAgICAgQVJZX1NFVF9QVFIoYXJ5LCBwdHIpOyAKKyAgICAg ICAgICAgIEFSWV9TRVRfSEVBUF9MRU4oYXJ5LCBsZW4pOyAKKyAgICAgICAgfQorICAgICAg ICBlbHNlIHsgCisgICAgICAgICAgICBSRUFMTE9DX04oUkFSUkFZKGFyeSktPmFzLmhlYXAu cHRyLCBWQUxVRSwgKGNhcGFjaXR5KSk7CisgICAgICAgIH0KKyAgICAgICAgQVJZX1NFVF9D QVBBKGFyeSwgKGNhcGFjaXR5KSk7IAorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYg KCFBUllfRU1CRURfUChhcnkpKSB7CisgICAgICAgICAgICBsb25nIGxlbiA9IEFSWV9IRUFQ X0xFTihhcnkpOyAKKyAgICAgICAgICAgIFZBTFVFICpwdHIgPSBBUllfSEVBUF9QVFIoYXJ5 KTsgCisgICAgICAgICAgICBNRU1DUFkoQVJZX0VNQkVEX1BUUihhcnkpLCBwdHIsIFZBTFVF LCBsZW4pOyAKKyAgICAgICAgICAgIEZMX1NFVF9FTUJFRChhcnkpOyAKKyAgICAgICAgICAg IEFSWV9TRVRfRU1CRURfTEVOKGFyeSwgbGVuKTsgCisgICAgICAgICAgICB4ZnJlZShwdHIp OyAKKyAgICAgICAgfQorICAgIH0KK30KKwogc3RhdGljIGlubGluZSB2b2lkCiByYl9hcnlf bW9kaWZ5X2NoZWNrKFZBTFVFIGFyeSkKIHsKQEAgLTYxLDE1ICsxNjUsMjMgQEAgcmJfYXJ5 X21vZGlmeV9jaGVjayhWQUxVRSBhcnkpCiBzdGF0aWMgdm9pZAogcmJfYXJ5X21vZGlmeShW QUxVRSBhcnkpCiB7Ci0gICAgVkFMVUUgKnB0cjsKLQogICAgIHJiX2FyeV9tb2RpZnlfY2hl Y2soYXJ5KTsKICAgICBpZiAoQVJZX1NIQVJFRF9QKGFyeSkpIHsKLQlwdHIgPSBBTExPQ19O KFZBTFVFLCBSQVJSQVlfTEVOKGFyeSkpOwotCUZMX1VOU0VUKGFyeSwgRUxUU19TSEFSRUQp OwotCVJBUlJBWShhcnkpLT5hdXguY2FwYSA9IFJBUlJBWV9MRU4oYXJ5KTsKLQlNRU1DUFko cHRyLCBSQVJSQVlfUFRSKGFyeSksIFZBTFVFLCBSQVJSQVlfTEVOKGFyeSkpOwotCVJBUlJB WShhcnkpLT5wdHIgPSBwdHI7CisgICAgICAgIGxvbmcgbGVuID0gUkFSUkFZX0xFTihhcnkp OworICAgICAgICBpZiAobGVuIDw9IFJBUlJBWV9FTUJFRF9MRU5fTUFYKSB7CisgICAgICAg ICAgICBWQUxVRSAqcHRyID0gQVJZX0hFQVBfUFRSKGFyeSk7CisgICAgICAgICAgICBGTF9V TlNFVF9TSEFSRUQoYXJ5KTsKKyAgICAgICAgICAgIEZMX1NFVF9FTUJFRChhcnkpOworICAg ICAgICAgICAgTUVNQ1BZKEFSWV9FTUJFRF9QVFIoYXJ5KSwgcHRyLCBWQUxVRSwgbGVuKTsK KyAgICAgICAgICAgIEFSWV9TRVRfRU1CRURfTEVOKGFyeSwgbGVuKTsKKyAgICAgICAgfQor ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZBTFVFICpwdHIgPSBBTExPQ19OKFZBTFVF LCBsZW4pOworICAgICAgICAgICAgRkxfVU5TRVRfU0hBUkVEKGFyeSk7CisgICAgICAgICAg ICBBUllfU0VUX0NBUEEoYXJ5LCBsZW4pOworICAgICAgICAgICAgTUVNQ1BZKHB0ciwgUkFS UkFZX1BUUihhcnkpLCBWQUxVRSwgbGVuKTsKKyAgICAgICAgICAgIEFSWV9TRVRfUFRSKGFy eSwgcHRyKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtOTksMTAgKzIxMSw4IEBAIGFy eV9hbGxvYyhWQUxVRSBrbGFzcykKIHsKICAgICBORVdPQkooYXJ5LCBzdHJ1Y3QgUkFycmF5 KTsKICAgICBPQkpTRVRVUChhcnksIGtsYXNzLCBUX0FSUkFZKTsKLQotICAgIGFyeS0+bGVu ID0gMDsKLSAgICBhcnktPnB0ciA9IDA7Ci0gICAgYXJ5LT5hdXguY2FwYSA9IDA7CisgICAg RkxfU0VUX0VNQkVEKChWQUxVRSlhcnkpOworICAgIEFSWV9TRVRfRU1CRURfTEVOKChWQUxV RSlhcnksIDApOwogCiAgICAgcmV0dXJuIChWQUxVRSlhcnk7CiB9CkBAIC0xMTksOSArMjI5 LDEyIEBAIGFyeV9uZXcoVkFMVUUga2xhc3MsIGxvbmcgbGVuKQogCXJiX3JhaXNlKHJiX2VB cmdFcnJvciwgImFycmF5IHNpemUgdG9vIGJpZyIpOwogICAgIH0KICAgICBhcnkgPSBhcnlf YWxsb2Moa2xhc3MpOwotICAgIGlmIChsZW4gPT0gMCkgbGVuKys7Ci0gICAgUkFSUkFZKGFy eSktPnB0ciA9IEFMTE9DX04oVkFMVUUsIGxlbik7Ci0gICAgUkFSUkFZKGFyeSktPmF1eC5j YXBhID0gbGVuOworICAgIGlmIChsZW4gPiBSQVJSQVlfRU1CRURfTEVOX01BWCkgeworICAg ICAgICBGTF9VTlNFVF9FTUJFRChhcnkpOworICAgICAgICBBUllfU0VUX1BUUihhcnksIEFM TE9DX04oVkFMVUUsIGxlbikpOworICAgICAgICBBUllfU0VUX0NBUEEoYXJ5LCBsZW4pOwor ICAgICAgICBBUllfU0VUX0hFQVBfTEVOKGFyeSwgMCk7CisgICAgfQogCiAgICAgcmV0dXJu IGFyeTsKIH0KQEAgLTEzNiw3ICsyNDksNyBAQCByYl9hcnlfbmV3Mihsb25nIGxlbikKIFZB TFVFCiByYl9hcnlfbmV3KHZvaWQpCiB7Ci0gICAgcmV0dXJuIHJiX2FyeV9uZXcyKEFSWV9E RUZBVUxUX1NJWkUpOworICAgIHJldHVybiByYl9hcnlfbmV3MihSQVJSQVlfRU1CRURfTEVO X01BWCk7CiB9CiAKICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTE1Niw3ICsyNjksNyBAQCBy Yl9hcnlfbmV3Myhsb25nIG4sIC4uLikKICAgICB9CiAgICAgdmFfZW5kKGFyKTsKIAotICAg IFJBUlJBWShhcnkpLT5sZW4gPSBuOworICAgIEFSWV9TRVRfTEVOKGFyeSwgbik7CiAgICAg cmV0dXJuIGFyeTsKIH0KIApAQCAtMTY4LDcgKzI4MSw3IEBAIHJiX2FyeV9uZXc0KGxvbmcg biwgY29uc3QgVkFMVUUgKmVsdHMpCiAgICAgYXJ5ID0gcmJfYXJ5X25ldzIobik7CiAgICAg aWYgKG4gPiAwICYmIGVsdHMpIHsKIAlNRU1DUFkoUkFSUkFZX1BUUihhcnkpLCBlbHRzLCBW QUxVRSwgbik7Ci0JUkFSUkFZKGFyeSktPmxlbiA9IG47CisJQVJZX1NFVF9MRU4oYXJ5LCBu KTsKICAgICB9CiAKICAgICByZXR1cm4gYXJ5OwpAQCAtMTgzLDMxICsyOTYsNDggQEAgcmJf YXJ5X3RtcF9uZXcobG9uZyBsZW4pCiB2b2lkCiByYl9hcnlfZnJlZShWQUxVRSBhcnkpCiB7 Ci0gICAgaWYgKCFBUllfU0hBUkVEX1AoYXJ5KSkgewotCXhmcmVlKFJBUlJBWShhcnkpLT5w dHIpOworICAgIGlmIChBUllfT1dOU19IRUFQX1AoYXJ5KSkgeworCXhmcmVlKEFSWV9IRUFQ X1BUUihhcnkpKTsKICAgICB9CiB9CiAKIHN0YXRpYyBWQUxVRQogYXJ5X21ha2Vfc2hhcmVk KFZBTFVFIGFyeSkKIHsKKyAgICBhc3NlcnQoIUFSWV9FTUJFRF9QKGFyeSkpOwogICAgIGlm IChBUllfU0hBUkVEX1AoYXJ5KSkgewotCXJldHVybiBSQVJSQVkoYXJ5KS0+YXV4LnNoYXJl ZDsKKwlyZXR1cm4gQVJZX1NIQVJFRChhcnkpOwogICAgIH0KICAgICBlbHNlIHsKIAlORVdP Qkooc2hhcmVkLCBzdHJ1Y3QgUkFycmF5KTsKIAlPQkpTRVRVUChzaGFyZWQsIDAsIFRfQVJS QVkpOworICAgICAgICBGTF9VTlNFVF9FTUJFRChzaGFyZWQpOwogCi0Jc2hhcmVkLT5sZW4g PSBSQVJSQVkoYXJ5KS0+bGVuOwotCXNoYXJlZC0+cHRyID0gUkFSUkFZKGFyeSktPnB0cjsK LQlzaGFyZWQtPmF1eC5jYXBhID0gUkFSUkFZKGFyeSktPmF1eC5jYXBhOwotCVJBUlJBWShh cnkpLT5hdXguc2hhcmVkID0gKFZBTFVFKXNoYXJlZDsKLQlGTF9TRVQoYXJ5LCBFTFRTX1NI QVJFRCk7CisgICAgICAgIEFSWV9TRVRfTEVOKChWQUxVRSlzaGFyZWQsIFJBUlJBWV9MRU4o YXJ5KSk7CisgICAgICAgIEFSWV9TRVRfUFRSKChWQUxVRSlzaGFyZWQsIFJBUlJBWV9QVFIo YXJ5KSk7CisgICAgICAgIEFSWV9TRVRfQ0FQQSgoVkFMVUUpc2hhcmVkLCBBUllfQ0FQQShh cnkpKTsKKwlGTF9TRVRfU0hBUkVEKGFyeSk7CisJQVJZX1NFVF9TSEFSRUQoYXJ5LCAoVkFM VUUpc2hhcmVkKTsKIAlPQkpfRlJFRVpFKHNoYXJlZCk7CiAJcmV0dXJuIChWQUxVRSlzaGFy ZWQ7CiAgICAgfQogfQogCisKK3N0YXRpYyBWQUxVRQorYXJ5X21ha2Vfc3Vic3RpdHV0aW9u KFZBTFVFIGFyeSkKK3sKKyAgICBpZiAoUkFSUkFZX0xFTihhcnkpIDw9IFJBUlJBWV9FTUJF RF9MRU5fTUFYKSB7CisgICAgICAgIFZBTFVFIHN1YnN0ID0gcmJfYXJ5X25ldzIoUkFSUkFZ X0xFTihhcnkpKTsKKyAgICAgICAgTUVNQ1BZKEFSWV9FTUJFRF9QVFIoc3Vic3QpLCBSQVJS QVlfUFRSKGFyeSksIFZBTFVFLCBSQVJSQVlfTEVOKGFyeSkpOworICAgICAgICBBUllfU0VU X0VNQkVEX0xFTihzdWJzdCwgUkFSUkFZX0xFTihhcnkpKTsKKyAgICAgICAgcmV0dXJuIHN1 YnN0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGFyeV9tYWtlX3NoYXJl ZChhcnkpOworICAgIH0KK30KKwogVkFMVUUKIHJiX2Fzc29jX25ldyhWQUxVRSBjYXIsIFZB TFVFIGNkcikKIHsKQEAgLTI5OCwxMCArNDI4LDEyIEBAIHJiX2FyeV9pbml0aWFsaXplKGlu dCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUgYXJ5KQogCiAgICAgcmJfYXJ5X21vZGlmeShh cnkpOwogICAgIGlmIChhcmdjID09ICAwKSB7Ci0JaWYgKFJBUlJBWV9QVFIoYXJ5KSAmJiAh QVJZX1NIQVJFRF9QKGFyeSkpIHsKLQkgICAgeGZyZWUoUkFSUkFZKGFyeSktPnB0cik7CisJ aWYgKEFSWV9PV05TX0hFQVBfUChhcnkpICYmIFJBUlJBWV9QVFIoYXJ5KSkgeworCSAgICB4 ZnJlZShBUllfSEVBUF9QVFIoYXJ5KSk7CiAJfQotCVJBUlJBWShhcnkpLT5sZW4gPSAwOwor ICAgICAgICBGTF9VTlNFVF9TSEFSRUQoYXJ5KTsKKyAgICAgICAgRkxfU0VUX0VNQkVEKGFy eSk7CisJQVJZX1NFVF9FTUJFRF9MRU4oYXJ5LCAwKTsKIAlpZiAocmJfYmxvY2tfZ2l2ZW5f cCgpKSB7CiAJICAgIHJiX3dhcm5pbmcoImdpdmVuIGJsb2NrIG5vdCB1c2VkIik7CiAJfQpA QCAtMzMzLDEyICs0NjUsMTIgQEAgcmJfYXJ5X2luaXRpYWxpemUoaW50IGFyZ2MsIFZBTFVF ICphcmd2LCBWQUxVRSBhcnkpCiAJfQogCWZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CiAJICAg IHJiX2FyeV9zdG9yZShhcnksIGksIHJiX3lpZWxkKExPTkcyTlVNKGkpKSk7Ci0JICAgIFJB UlJBWShhcnkpLT5sZW4gPSBpICsgMTsKKwkgICAgQVJZX1NFVF9MRU4oYXJ5LCBpICsgMSk7 CiAJfQogICAgIH0KICAgICBlbHNlIHsKIAltZW1maWxsKFJBUlJBWV9QVFIoYXJ5KSwgbGVu LCB2YWwpOwotCVJBUlJBWShhcnkpLT5sZW4gPSBsZW47CisJQVJZX1NFVF9MRU4oYXJ5LCBs ZW4pOwogICAgIH0KICAgICByZXR1cm4gYXJ5OwogfQpAQCAtMzU1LDE1ICs0ODcsMTEgQEAg cmJfYXJ5X2luaXRpYWxpemUoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBhcnkpCiBz dGF0aWMgVkFMVUUKIHJiX2FyeV9zX2NyZWF0ZShpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZB TFVFIGtsYXNzKQogewotICAgIFZBTFVFIGFyeSA9IGFyeV9hbGxvYyhrbGFzcyk7Ci0KLSAg ICBpZiAoYXJnYyA8IDApIHsKLQlyYl9yYWlzZShyYl9lQXJnRXJyb3IsICJuZWdhdGl2ZSBh cnJheSBzaXplIik7CisgICAgVkFMVUUgYXJ5ID0gYXJ5X25ldyhrbGFzcywgYXJnYyk7Cisg ICAgaWYgKGFyZ2MgPiAwICYmIGFyZ3YpIHsKKyAgICAgICAgTUVNQ1BZKFJBUlJBWV9QVFIo YXJ5KSwgYXJndiwgVkFMVUUsIGFyZ2MpOworICAgICAgICBBUllfU0VUX0xFTihhcnksIGFy Z2MpOwogICAgIH0KLSAgICBSQVJSQVkoYXJ5KS0+cHRyID0gQUxMT0NfTihWQUxVRSwgYXJn Yyk7Ci0gICAgUkFSUkFZKGFyeSktPmF1eC5jYXBhID0gYXJnYzsKLSAgICBNRU1DUFkoUkFS UkFZX1BUUihhcnkpLCBhcmd2LCBWQUxVRSwgYXJnYyk7Ci0gICAgUkFSUkFZKGFyeSktPmxl biA9IGFyZ2M7CiAKICAgICByZXR1cm4gYXJ5OwogfQpAQCAtNDAxLDI4ICs1MjksNDEgQEAg cmJfYXJ5X3N0b3JlKFZBTFVFIGFyeSwgbG9uZyBpZHgsIFZBTFVFIHZhbCkKICAgICB9CiAK ICAgICBpZiAoaWR4ID49IFJBUlJBWV9MRU4oYXJ5KSkgewotCVJBUlJBWShhcnkpLT5sZW4g PSBpZHggKyAxOworCUFSWV9TRVRfTEVOKGFyeSwgaWR4ICsgMSk7CiAgICAgfQogICAgIFJB UlJBWV9QVFIoYXJ5KVtpZHhdID0gdmFsOwogfQogCiBzdGF0aWMgVkFMVUUKLWFyeV9zaGFy ZWRfYXJyYXkoVkFMVUUga2xhc3MsIFZBTFVFIGFyeSkKK2FyeV9tYWtlX3BhcnRpYWwwKFZB TFVFIGFyeSwgbG9uZyBvZmZzZXQsIGxvbmcgbGVuKQogewotICAgIFZBTFVFIHZhbCA9IGFy eV9hbGxvYyhrbGFzcyk7CisgICAgYXNzZXJ0KG9mZnNldCA+PSAwKTsKKyAgICBhc3NlcnQo bGVuID49IDApOworICAgIGFzc2VydChvZmZzZXQrbGVuIDw9IFJBUlJBWV9MRU4oYXJ5KSk7 CiAKLSAgICBhcnlfbWFrZV9zaGFyZWQoYXJ5KTsKLSAgICBSQVJSQVkodmFsKS0+cHRyID0g UkFSUkFZKGFyeSktPnB0cjsKLSAgICBSQVJSQVkodmFsKS0+bGVuID0gUkFSUkFZKGFyeSkt PmxlbjsKLSAgICBSQVJSQVkodmFsKS0+YXV4LnNoYXJlZCA9IFJBUlJBWShhcnkpLT5hdXgu c2hhcmVkOwotICAgIEZMX1NFVCh2YWwsIEVMVFNfU0hBUkVEKTsKLSAgICByZXR1cm4gdmFs OworICAgIGlmIChsZW4gPD0gUkFSUkFZX0VNQkVEX0xFTl9NQVgpIHsKKyAgICAgICAgcmV0 dXJuIHJiX2FyeV9uZXc0KGxlbiwgUkFSUkFZX1BUUihhcnkpICsgb2Zmc2V0KTsKKyAgICB9 CisgICAgZWxzZSB7CisgICAgICAgIFZBTFVFIHNoYXJlZCwgcmVzdWx0ID0gYXJ5X2FsbG9j KHJiX29ial9jbGFzcyhhcnkpKTsKKyAgICAgICAgRkxfVU5TRVRfRU1CRUQocmVzdWx0KTsK KworICAgICAgICBzaGFyZWQgPSBhcnlfbWFrZV9zaGFyZWQoYXJ5KTsKKyAgICAgICAgQVJZ X1NFVF9QVFIocmVzdWx0LCBSQVJSQVlfUFRSKGFyeSkpOworICAgICAgICBBUllfU0VUX0xF TihyZXN1bHQsIFJBUlJBWV9MRU4oYXJ5KSk7CisgICAgICAgIEZMX1NFVF9TSEFSRUQocmVz dWx0KTsKKyAgICAgICAgQVJZX1NFVF9TSEFSRUQocmVzdWx0LCBzaGFyZWQpOworCisgICAg ICAgIEFSWV9JTkNSRUFTRV9QVFIocmVzdWx0LCBvZmZzZXQpOworICAgICAgICBBUllfU0VU X0xFTihyZXN1bHQsIGxlbik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogfQog CiBzdGF0aWMgVkFMVUUKLWFyeV9zaGFyZWRfZmlyc3QoaW50IGFyZ2MsIFZBTFVFICphcmd2 LCBWQUxVRSBhcnksIGludCBsYXN0KQorYXJ5X21ha2VfcGFydGlhbChpbnQgYXJnYywgVkFM VUUgKmFyZ3YsIFZBTFVFIGFyeSwgaW50IGxhc3QpCiB7Ci0gICAgVkFMVUUgbnYsIHJlc3Vs dDsKKyAgICBWQUxVRSBudjsKICAgICBsb25nIG47CiAgICAgbG9uZyBvZmZzZXQgPSAwOwog CkBAIC00MzcsMTEgKzU3OCw3IEBAIGFyeV9zaGFyZWRfZmlyc3QoaW50IGFyZ2MsIFZBTFVF ICphcmd2LCBWQUxVRSBhcnksIGludCBsYXN0KQogICAgIGlmIChsYXN0KSB7CiAJb2Zmc2V0 ID0gUkFSUkFZX0xFTihhcnkpIC0gbjsKICAgICB9Ci0gICAgcmVzdWx0ID0gYXJ5X3NoYXJl ZF9hcnJheShyYl9jQXJyYXksIGFyeSk7Ci0gICAgUkFSUkFZKHJlc3VsdCktPnB0ciArPSBv ZmZzZXQ7Ci0gICAgUkFSUkFZKHJlc3VsdCktPmxlbiA9IG47Ci0KLSAgICByZXR1cm4gcmVz dWx0OworICAgIHJldHVybiBhcnlfbWFrZV9wYXJ0aWFsMChhcnksIG9mZnNldCwgbik7CiB9 CiAKIC8qCkBAIC00OTIsMTQgKzYyOSwxNCBAQCByYl9hcnlfcG9wKFZBTFVFIGFyeSkKICAg ICBsb25nIG47CiAgICAgcmJfYXJ5X21vZGlmeV9jaGVjayhhcnkpOwogICAgIGlmIChSQVJS QVlfTEVOKGFyeSkgPT0gMCkgcmV0dXJuIFFuaWw7Ci0gICAgaWYgKCFBUllfU0hBUkVEX1Ao YXJ5KSAmJgotCVJBUlJBWV9MRU4oYXJ5KSAqIDMgPCBBUllfQ0FQQShhcnkpICYmCisgICAg aWYgKEFSWV9PV05TX0hFQVBfUChhcnkpICYmCisJQVJZX0hFQVBfTEVOKGFyeSkgKiAzIDwg QVJZX0NBUEEoYXJ5KSAmJgogCUFSWV9DQVBBKGFyeSkgPiBBUllfREVGQVVMVF9TSVpFKQog ICAgIHsKLQlSRVNJWkVfQ0FQQShhcnksIFJBUlJBWV9MRU4oYXJ5KSAqIDIpOworCVJFU0la RV9DQVBBKGFyeSwgQVJZX0hFQVBfTEVOKGFyeSkgKiAyKTsKICAgICB9CiAgICAgbiA9IFJB UlJBWV9MRU4oYXJ5KS0xOwotICAgIFJBUlJBWShhcnkpLT5sZW4gPSBuOworICAgIEFSWV9T RVRfTEVOKGFyeSwgbik7CiAgICAgcmV0dXJuIFJBUlJBWV9QVFIoYXJ5KVtuXTsKIH0KIApA QCAtNTMwLDggKzY2Nyw4IEBAIHJiX2FyeV9wb3BfbShpbnQgYXJnYywgVkFMVUUgKmFyZ3Ys IFZBTFVFIGFyeSkKICAgICB9CiAKICAgICByYl9hcnlfbW9kaWZ5X2NoZWNrKGFyeSk7Ci0g ICAgcmVzdWx0ID0gYXJ5X3NoYXJlZF9maXJzdChhcmdjLCBhcmd2LCBhcnksIFF0cnVlKTsK LSAgICBSQVJSQVkoYXJ5KS0+bGVuIC09IFJBUlJBWV9MRU4ocmVzdWx0KTsKKyAgICByZXN1 bHQgPSBhcnlfbWFrZV9wYXJ0aWFsKGFyZ2MsIGFyZ3YsIGFyeSwgUXRydWUpOworICAgIEFS WV9JTkNSRUFTRV9MRU4oYXJ5LCAtUkFSUkFZX0xFTihyZXN1bHQpKTsKICAgICByZXR1cm4g cmVzdWx0OwogfQogCkBAIC01NDYsMTQgKzY4MywxNiBAQCByYl9hcnlfc2hpZnQoVkFMVUUg YXJ5KQogICAgIGlmICghQVJZX1NIQVJFRF9QKGFyeSkpIHsKIAlpZiAoUkFSUkFZX0xFTihh cnkpIDwgQVJZX0RFRkFVTFRfU0laRSkgewogCSAgICBNRU1NT1ZFKFJBUlJBWV9QVFIoYXJ5 KSwgUkFSUkFZX1BUUihhcnkpKzEsIFZBTFVFLCBSQVJSQVlfTEVOKGFyeSktMSk7Ci0JICAg IFJBUlJBWShhcnkpLT5sZW4tLTsKKyAgICAgICAgICAgIEFSWV9JTkNSRUFTRV9MRU4oYXJ5 LCAtMSk7CiAJICAgIHJldHVybiB0b3A7CiAJfQotCVJBUlJBWV9QVFIoYXJ5KVswXSA9IFFu aWw7CisgICAgICAgIGFzc2VydCghQVJZX0VNQkVEX1AoYXJ5KSk7IC8qIEFSWV9FTUJFRF9M RU5fTUFYIDwgQVJZX0RFRkFVTFRfU0laRSAqLworCisJQVJZX0hFQVBfUFRSKGFyeSlbMF0g PSBRbmlsOwogCWFyeV9tYWtlX3NoYXJlZChhcnkpOwogICAgIH0KLSAgICBSQVJSQVkoYXJ5 KS0+cHRyKys7CQkvKiBzaGlmdCBwdHIgKi8KLSAgICBSQVJSQVkoYXJ5KS0+bGVuLS07Cisg ICAgQVJZX0lOQ1JFQVNFX1BUUihhcnksIDEpOwkJLyogc2hpZnQgcHRyICovCisgICAgQVJZ X0lOQ1JFQVNFX0xFTihhcnksIC0xKTsKIAogICAgIHJldHVybiB0b3A7CiB9CkBAIC01OTAs MTYgKzcyOSwxNSBAQCByYl9hcnlfc2hpZnRfbShpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZB TFVFIGFyeSkKICAgICB9CiAKICAgICByYl9hcnlfbW9kaWZ5X2NoZWNrKGFyeSk7Ci0gICAg cmVzdWx0ID0gYXJ5X3NoYXJlZF9maXJzdChhcmdjLCBhcmd2LCBhcnksIFFmYWxzZSk7Cisg ICAgcmVzdWx0ID0gYXJ5X21ha2VfcGFydGlhbChhcmdjLCBhcmd2LCBhcnksIFFmYWxzZSk7 CiAgICAgbiA9IFJBUlJBWV9MRU4ocmVzdWx0KTsKICAgICBpZiAoQVJZX1NIQVJFRF9QKGFy eSkpIHsKLQlSQVJSQVkoYXJ5KS0+cHRyICs9IG47Ci0JUkFSUkFZKGFyeSktPmxlbiAtPSBu OwotCX0KKyAgICAgICAgQVJZX0lOQ1JFQVNFX1BUUihhcnksIG4pOworICAgIH0KICAgICBl bHNlIHsKIAlNRU1NT1ZFKFJBUlJBWV9QVFIoYXJ5KSwgUkFSUkFZX1BUUihhcnkpK24sIFZB TFVFLCBSQVJSQVlfTEVOKGFyeSktbik7Ci0JUkFSUkFZKGFyeSktPmxlbiAtPSBuOwogICAg IH0KKyAgICBBUllfSU5DUkVBU0VfTEVOKGFyeSwgLW4pOwogCiAgICAgcmV0dXJuIHJlc3Vs dDsKIH0KQEAgLTYyMywxNCArNzYxLDE0IEBAIHJiX2FyeV91bnNoaWZ0X20oaW50IGFyZ2Ms IFZBTFVFICphcmd2LCBWQUxVRSBhcnkpCiAKICAgICBpZiAoYXJnYyA9PSAwKSByZXR1cm4g YXJ5OwogICAgIHJiX2FyeV9tb2RpZnkoYXJ5KTsKLSAgICBpZiAoUkFSUkFZKGFyeSktPmF1 eC5jYXBhIDw9IChsZW4gPSBSQVJSQVkoYXJ5KS0+bGVuKSArIGFyZ2MpIHsKKyAgICBpZiAo QVJZX0NBUEEoYXJ5KSA8PSAobGVuID0gUkFSUkFZX0xFTihhcnkpKSArIGFyZ2MpIHsKIAlS RVNJWkVfQ0FQQShhcnksIGxlbiArIGFyZ2MgKyBBUllfREVGQVVMVF9TSVpFKTsKICAgICB9 CiAKICAgICAvKiBzbGlkaW5nIGl0ZW1zICovCi0gICAgTUVNTU9WRShSQVJSQVkoYXJ5KS0+ cHRyICsgYXJnYywgUkFSUkFZKGFyeSktPnB0ciwgVkFMVUUsIGxlbik7Ci0gICAgTUVNQ1BZ KFJBUlJBWShhcnkpLT5wdHIsIGFyZ3YsIFZBTFVFLCBhcmdjKTsKLSAgICBSQVJSQVkoYXJ5 KS0+bGVuICs9IGFyZ2M7CisgICAgTUVNTU9WRShSQVJSQVlfUFRSKGFyeSkgKyBhcmdjLCBS QVJSQVlfUFRSKGFyeSksIFZBTFVFLCBsZW4pOworICAgIE1FTUNQWShSQVJSQVlfUFRSKGFy eSksIGFyZ3YsIFZBTFVFLCBhcmdjKTsKKyAgICBBUllfSU5DUkVBU0VfTEVOKGFyeSwgYXJn Yyk7CiAgICAgCiAgICAgcmV0dXJuIGFyeTsKIH0KQEAgLTY2NCw4ICs4MDIsNyBAQCByYl9h cnlfZW50cnkoVkFMVUUgYXJ5LCBsb25nIG9mZnNldCkKIFZBTFVFCiByYl9hcnlfc3Vic2Vx KFZBTFVFIGFyeSwgbG9uZyBiZWcsIGxvbmcgbGVuKQogewotICAgIFZBTFVFIGtsYXNzLCBh cnkyLCBzaGFyZWQ7Ci0gICAgVkFMVUUgKnB0cjsKKyAgICBWQUxVRSBrbGFzczsKIAogICAg IGlmIChiZWcgPiBSQVJSQVlfTEVOKGFyeSkpIHJldHVybiBRbmlsOwogICAgIGlmIChiZWcg PCAwIHx8IGxlbiA8IDApIHJldHVybiBRbmlsOwpAQCAtNjc2LDE1ICs4MTMsNyBAQCByYl9h cnlfc3Vic2VxKFZBTFVFIGFyeSwgbG9uZyBiZWcsIGxvbmcgbGVuKQogICAgIGtsYXNzID0g cmJfb2JqX2NsYXNzKGFyeSk7CiAgICAgaWYgKGxlbiA9PSAwKSByZXR1cm4gYXJ5X25ldyhr bGFzcywgMCk7CiAKLSAgICBzaGFyZWQgPSBhcnlfbWFrZV9zaGFyZWQoYXJ5KTsKLSAgICBw dHIgPSBSQVJSQVlfUFRSKGFyeSk7Ci0gICAgYXJ5MiA9IGFyeV9hbGxvYyhrbGFzcyk7Ci0g ICAgUkFSUkFZKGFyeTIpLT5wdHIgPSBwdHIgKyBiZWc7Ci0gICAgUkFSUkFZKGFyeTIpLT5s ZW4gPSBsZW47Ci0gICAgUkFSUkFZKGFyeTIpLT5hdXguc2hhcmVkID0gc2hhcmVkOwotICAg IEZMX1NFVChhcnkyLCBFTFRTX1NIQVJFRCk7Ci0KLSAgICByZXR1cm4gYXJ5MjsKKyAgICBy ZXR1cm4gYXJ5X21ha2VfcGFydGlhbDAoYXJ5LCBiZWcsIGxlbik7CiB9CiAKIC8qIApAQCAt Nzk0LDcgKzkyMyw3IEBAIHJiX2FyeV9maXJzdChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZB TFVFIGFyeSkKIAlyZXR1cm4gUkFSUkFZX1BUUihhcnkpWzBdOwogICAgIH0KICAgICBlbHNl IHsKLQlyZXR1cm4gYXJ5X3NoYXJlZF9maXJzdChhcmdjLCBhcmd2LCBhcnksIFFmYWxzZSk7 CisJcmV0dXJuIGFyeV9tYWtlX3BhcnRpYWwoYXJnYywgYXJndiwgYXJ5LCBRZmFsc2UpOwog ICAgIH0KIH0KIApAQCAtODE5LDcgKzk0OCw3IEBAIHJiX2FyeV9sYXN0KGludCBhcmdjLCBW QUxVRSAqYXJndiwgVkFMVUUgYXJ5KQogCXJldHVybiBSQVJSQVlfUFRSKGFyeSlbUkFSUkFZ X0xFTihhcnkpLTFdOwogICAgIH0KICAgICBlbHNlIHsKLQlyZXR1cm4gYXJ5X3NoYXJlZF9m aXJzdChhcmdjLCBhcmd2LCBhcnksIFF0cnVlKTsKKwlyZXR1cm4gYXJ5X21ha2VfcGFydGlh bChhcmdjLCBhcmd2LCBhcnksIFF0cnVlKTsKICAgICB9CiB9CiAKQEAgLTEwMDMsNyArMTEz Miw3IEBAIHJiX2FyeV9zcGxpY2UoVkFMVUUgYXJ5LCBsb25nIGJlZywgbG9uZyBsZW4sIFZB TFVFIHJwbCkKIAlpZiAocmxlbiA+IDApIHsKIAkgICAgTUVNQ1BZKFJBUlJBWV9QVFIoYXJ5 KSArIGJlZywgUkFSUkFZX1BUUihycGwpLCBWQUxVRSwgcmxlbik7CiAJfQotCVJBUlJBWShh cnkpLT5sZW4gPSBsZW47CisJQVJZX1NFVF9MRU4oYXJ5LCBsZW4pOwogICAgIH0KICAgICBl bHNlIHsKIAlsb25nIGFsZW47CkBAIC0xMDIwLDcgKzExNDksNyBAQCByYl9hcnlfc3BsaWNl KFZBTFVFIGFyeSwgbG9uZyBiZWcsIGxvbmcgbGVuLCBWQUxVRSBycGwpCiAJaWYgKGxlbiAh PSBybGVuKSB7CiAJICAgIE1FTU1PVkUoUkFSUkFZX1BUUihhcnkpICsgYmVnICsgcmxlbiwg UkFSUkFZX1BUUihhcnkpICsgYmVnICsgbGVuLAogCQkgICAgVkFMVUUsIFJBUlJBWV9MRU4o YXJ5KSAtIChiZWcgKyBsZW4pKTsKLQkgICAgUkFSUkFZKGFyeSktPmxlbiA9IGFsZW47CisJ ICAgIEFSWV9TRVRfTEVOKGFyeSwgYWxlbik7CiAJfQogCWlmIChybGVuID4gMCkgewogCSAg ICBNRU1NT1ZFKFJBUlJBWV9QVFIoYXJ5KSArIGJlZywgUkFSUkFZX1BUUihycGwpLCBWQUxV RSwgcmxlbik7CkBAIC0xMjM4LDEwICsxMzY3LDExIEBAIFZBTFVFCiByYl9hcnlfZHVwKFZB TFVFIGFyeSkKIHsKICAgICBWQUxVRSBkdXAgPSByYl9hcnlfbmV3MihSQVJSQVlfTEVOKGFy eSkpOwotCisgICAgaW50IGlzX2VtYmVkID0gQVJZX0VNQkVEX1AoZHVwKTsKICAgICBEVVBT RVRVUChkdXAsIGFyeSk7CisgICAgaWYgKGlzX2VtYmVkKSBGTF9TRVRfRU1CRUQoZHVwKTsK ICAgICBNRU1DUFkoUkFSUkFZX1BUUihkdXApLCBSQVJSQVlfUFRSKGFyeSksIFZBTFVFLCBS QVJSQVlfTEVOKGFyeSkpOwotICAgIFJBUlJBWShkdXApLT5sZW4gPSBSQVJSQVlfTEVOKGFy eSk7CisgICAgQVJZX1NFVF9MRU4oZHVwLCBSQVJSQVlfTEVOKGFyeSkpOwogCiAgICAgcmV0 dXJuIGR1cDsKIH0KQEAgLTE1NDgsOCArMTY3OCw5IEBAIFZBTFVFCiByYl9hcnlfc29ydF9i YW5nKFZBTFVFIGFyeSkKIHsKICAgICByYl9hcnlfbW9kaWZ5KGFyeSk7CisgICAgYXNzZXJ0 KCFBUllfU0hBUkVEX1AoYXJ5KSk7CiAgICAgaWYgKFJBUlJBWV9MRU4oYXJ5KSA+IDEpIHsK LQlWQUxVRSB0bXAgPSBhcnlfbWFrZV9zaGFyZWQoYXJ5KTsKKwlWQUxVRSB0bXAgPSBhcnlf bWFrZV9zdWJzdGl0dXRpb24oYXJ5KTsgLyogb25seSBhcnkgcmVmZXJzIHRtcCAqLwogCXN0 cnVjdCBhcnlfc29ydF9kYXRhIGRhdGE7CiAKIAlSQkFTSUModG1wKS0+a2xhc3MgPSAwOwpA QCAtMTU1OCwxOCArMTY4OSwzOSBAQCByYl9hcnlfc29ydF9iYW5nKFZBTFVFIGFyeSkKIAlk YXRhLm9wdF9pbml0ZWQgPSAwOwogCXJ1YnlfcXNvcnQoUkFSUkFZX1BUUih0bXApLCBSQVJS QVlfTEVOKHRtcCksIHNpemVvZihWQUxVRSksCiAJCSAgIHJiX2Jsb2NrX2dpdmVuX3AoKT9z b3J0XzE6c29ydF8yLCAmZGF0YSk7Ci0JaWYgKFJBUlJBWShhcnkpLT5wdHIgIT0gUkFSUkFZ KHRtcCktPnB0cikgewotCSAgICBpZiAoIUFSWV9TSEFSRURfUChhcnkpKSB4ZnJlZShSQVJS QVkoYXJ5KS0+cHRyKTsKLQkgICAgUkFSUkFZKGFyeSktPnB0ciA9IFJBUlJBWSh0bXApLT5w dHI7Ci0JICAgIFJBUlJBWShhcnkpLT5sZW4gPSBSQVJSQVkodG1wKS0+bGVuOwotCSAgICBS QVJSQVkoYXJ5KS0+YXV4LmNhcGEgPSBSQVJSQVkodG1wKS0+YXV4LmNhcGE7Ci0JICAgIEZM X1NFVChhcnksIEVMVFNfU0hBUkVEKTsKLQl9OwotCUZMX1VOU0VUKGFyeSwgRUxUU19TSEFS RUQpOwotCVJBUlJBWSh0bXApLT5wdHIgPSAwOwotCVJBUlJBWSh0bXApLT5sZW4gPSAwOwot CVJBUlJBWSh0bXApLT5hdXguY2FwYSA9IDA7Ci0JUkJBU0lDKHRtcCktPmtsYXNzID0gcmJf Y0FycmF5OworCisgICAgICAgIGlmIChBUllfRU1CRURfUChhcnkpIHx8IEFSWV9FTUJFRF9Q KHRtcCkpIHsKKyAgICAgICAgICAgIGFzc2VydChBUllfRU1CRURfUCh0bXApKTsKKyAgICAg ICAgICAgIE1FTUNQWShSQVJSQVlfUFRSKGFyeSksIEFSWV9FTUJFRF9QVFIodG1wKSwgVkFM VUUsIEFSWV9FTUJFRF9MRU4odG1wKSk7CisgICAgICAgICAgICBBUllfU0VUX0xFTihhcnks IEFSWV9FTUJFRF9MRU4odG1wKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg ICAgICAgICBhc3NlcnQoIUFSWV9FTUJFRF9QKGFyeSkpOworICAgICAgICAgICAgYXNzZXJ0 KCFBUllfRU1CRURfUCh0bXApKTsKKyAgICAgICAgICAgIGlmIChBUllfSEVBUF9QVFIoYXJ5 KSAhPSBBUllfSEVBUF9QVFIodG1wKSkgeworICAgICAgICAgICAgICAgIGFzc2VydCghQVJZ X1NIQVJFRF9QKHRtcCkpOworICAgICAgICAgICAgICAgIGlmIChBUllfU0hBUkVEX1AoYXJ5 KSkgeworICAgICAgICAgICAgICAgICAgICBGTF9VTlNFVF9TSEFSRUQoYXJ5KTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg ICAgIHhmcmVlKEFSWV9IRUFQX1BUUihhcnkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgQVJZX1NFVF9QVFIoYXJ5LCBSQVJSQVlfUFRSKHRtcCkpOworICAgICAg ICAgICAgICAgIEFSWV9TRVRfSEVBUF9MRU4oYXJ5LCBSQVJSQVlfTEVOKHRtcCkpOworICAg ICAgICAgICAgICAgIEFSWV9TRVRfQ0FQQShhcnksIEFSWV9DQVBBKHRtcCkpOworICAgICAg ICAgICAgfSAKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEZMX1VOU0VU X1NIQVJFRChhcnkpOworICAgICAgICAgICAgICAgIEFSWV9TRVRfQ0FQQShhcnksIEFSWV9D QVBBKHRtcCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogdG1wIHdhcyBsb3N0 IG93bmVyc2hpcCBmb3IgdGhlIHB0ciAqLworICAgICAgICAgICAgRkxfVU5TRVQodG1wLCBG TF9GUkVFWkUpOworICAgICAgICAgICAgRkxfU0VUX0VNQkVEKHRtcCk7CisgICAgICAgICAg ICBBUllfU0VUX0VNQkVEX0xFTih0bXAsIDApOworICAgICAgICAgICAgRkxfU0VUKHRtcCwg RkxfRlJFRVpFKTsKKwl9CisgICAgICAgIC8qIHRtcCB3aWxsIGJlIEdDJ2VkLiAqLworICAg ICAgICBSQkFTSUModG1wKS0+a2xhc3MgPSByYl9jQXJyYXk7CiAgICAgfQogICAgIHJldHVy biBhcnk7CiB9CkBAIC0xNzc4LDcgKzE5MzAsNyBAQCByYl9hcnlfZGVsZXRlKFZBTFVFIGFy eSwgVkFMVUUgaXRlbSkKIAogICAgIHJiX2FyeV9tb2RpZnkoYXJ5KTsKICAgICBpZiAoUkFS UkFZX0xFTihhcnkpID4gaTIpIHsKLQlSQVJSQVkoYXJ5KS0+bGVuID0gaTI7CisJQVJZX1NF VF9MRU4oYXJ5LCBpMik7CiAJaWYgKGkyICogMiA8IEFSWV9DQVBBKGFyeSkgJiYKIAkgICAg QVJZX0NBUEEoYXJ5KSA+IEFSWV9ERUZBVUxUX1NJWkUpIHsKIAkgICAgUkVTSVpFX0NBUEEo YXJ5LCBpMioyKTsKQEAgLTE4MDQsNyArMTk1Niw3IEBAIHJiX2FyeV9kZWxldGVfYXQoVkFM VUUgYXJ5LCBsb25nIHBvcykKICAgICBkZWwgPSBSQVJSQVlfUFRSKGFyeSlbcG9zXTsKICAg ICBNRU1NT1ZFKFJBUlJBWV9QVFIoYXJ5KStwb3MsIFJBUlJBWV9QVFIoYXJ5KStwb3MrMSwg VkFMVUUsCiAJICAgIFJBUlJBWV9MRU4oYXJ5KS1wb3MtMSk7Ci0gICAgUkFSUkFZKGFyeSkt Pmxlbi0tOworICAgIEFSWV9JTkNSRUFTRV9MRU4oYXJ5LCAtMSk7CiAKICAgICByZXR1cm4g ZGVsOwogfQpAQCAtMTkyMSw3ICsyMDczLDcgQEAgcmJfYXJ5X3JlamVjdF9iYW5nKFZBTFVF IGFyeSkKIAogICAgIGlmIChSQVJSQVlfTEVOKGFyeSkgPT0gaTIpIHJldHVybiBRbmlsOwog ICAgIGlmIChpMiA8IFJBUlJBWV9MRU4oYXJ5KSkKLQlSQVJSQVkoYXJ5KS0+bGVuID0gaTI7 CisJQVJZX1NFVF9MRU4oYXJ5LCBpMik7CiAgICAgcmV0dXJuIGFyeTsKIH0KIApAQCAtMjA4 OSwyMiArMjI0MSwzMCBAQCByYl9hcnlfdHJhbnNwb3NlKFZBTFVFIGFyeSkKIFZBTFVFCiBy Yl9hcnlfcmVwbGFjZShWQUxVRSBjb3B5LCBWQUxVRSBvcmlnKQogewotICAgIFZBTFVFIHNo YXJlZDsKLSAgICBWQUxVRSAqcHRyOwotCiAgICAgb3JpZyA9IHRvX2FyeShvcmlnKTsKICAg ICByYl9hcnlfbW9kaWZ5X2NoZWNrKGNvcHkpOwogICAgIGlmIChjb3B5ID09IG9yaWcpIHJl dHVybiBjb3B5OwotICAgIHNoYXJlZCA9IGFyeV9tYWtlX3NoYXJlZChvcmlnKTsKLSAgICBp ZiAoIUFSWV9TSEFSRURfUChjb3B5KSkgewotCXB0ciA9IFJBUlJBWShjb3B5KS0+cHRyOwot CXhmcmVlKHB0cik7Ci0gICAgfQotICAgIFJBUlJBWShjb3B5KS0+cHRyID0gUkFSUkFZKG9y aWcpLT5wdHI7Ci0gICAgUkFSUkFZKGNvcHkpLT5sZW4gPSBSQVJSQVkob3JpZyktPmxlbjsK LSAgICBSQVJSQVkoY29weSktPmF1eC5zaGFyZWQgPSBzaGFyZWQ7Ci0gICAgRkxfU0VUKGNv cHksIEVMVFNfU0hBUkVEKTsKIAorICAgIGlmIChSQVJSQVlfTEVOKG9yaWcpIDw9IFJBUlJB WV9FTUJFRF9MRU5fTUFYKSB7CisgICAgICAgIFZBTFVFICpwdHI7CisgICAgICAgIGlmIChB UllfT1dOU19IRUFQX1AoY29weSkpIHhmcmVlKEFSWV9IRUFQX1BUUihjb3B5KSk7CisgICAg ICAgIEZMX1VOU0VUX1NIQVJFRChjb3B5KTsKKyAgICAgICAgRkxfU0VUX0VNQkVEKGNvcHkp OworICAgICAgICBwdHIgPSBSQVJSQVlfUFRSKG9yaWcpOworICAgICAgICBNRU1DUFkoQVJZ X0VNQkVEX1BUUihjb3B5KSwgcHRyLCBWQUxVRSwgUkFSUkFZX0xFTihvcmlnKSk7CisgICAg ICAgIEFSWV9TRVRfRU1CRURfTEVOKGNvcHksIFJBUlJBWV9MRU4ob3JpZykpOworICAgIH0K KyAgICBlbHNlIHsKKyAgICAgICAgVkFMVUUgc2hhcmVkID0gYXJ5X21ha2Vfc2hhcmVkKG9y aWcpOworICAgICAgICBpZiAoQVJZX09XTlNfSEVBUF9QKGNvcHkpKSB7CisgICAgICAgICAg ICB4ZnJlZShBUllfSEVBUF9QVFIoY29weSkpOworICAgICAgICB9CisgICAgICAgIEZMX1VO U0VUX0VNQkVEKGNvcHkpOworICAgICAgICBGTF9TRVRfU0hBUkVEKGNvcHkpOworICAgICAg ICBBUllfU0VUX1BUUihjb3B5LCBSQVJSQVlfUFRSKG9yaWcpKTsKKyAgICAgICAgQVJZX1NF VF9MRU4oY29weSwgUkFSUkFZX0xFTihvcmlnKSk7CisgICAgICAgIEFSWV9TRVRfU0hBUkVE KGNvcHksIHNoYXJlZCk7CisgICAgfQogICAgIHJldHVybiBjb3B5OwogfQogCkBAIC0yMTIy LDcgKzIyODIsNyBAQCBWQUxVRQogcmJfYXJ5X2NsZWFyKFZBTFVFIGFyeSkKIHsKICAgICBy Yl9hcnlfbW9kaWZ5KGFyeSk7Ci0gICAgUkFSUkFZKGFyeSktPmxlbiA9IDA7CisgICAgQVJZ X1NFVF9MRU4oYXJ5LCAwKTsKICAgICBpZiAoQVJZX0RFRkFVTFRfU0laRSAqIDIgPCBBUllf Q0FQQShhcnkpKSB7CiAJUkVTSVpFX0NBUEEoYXJ5LCBBUllfREVGQVVMVF9TSVpFICogMik7 CiAgICAgfQpAQCAtMjIwMSw3ICsyMzYxLDcgQEAgcmJfYXJ5X2ZpbGwoaW50IGFyZ2MsIFZB TFVFICphcmd2LCBWQUxVRSBhcnkpCiAJICAgIFJFU0laRV9DQVBBKGFyeSwgZW5kKTsKIAl9 CiAJcmJfbWVtX2NsZWFyKFJBUlJBWV9QVFIoYXJ5KSArIFJBUlJBWV9MRU4oYXJ5KSwgZW5k IC0gUkFSUkFZX0xFTihhcnkpKTsKLQlSQVJSQVkoYXJ5KS0+bGVuID0gZW5kOworCUFSWV9T RVRfTEVOKGFyeSwgZW5kKTsKICAgICB9CiAKICAgICBpZiAoYmxvY2tfcCkgewpAQCAtMjI0 NSw3ICsyNDA1LDcgQEAgcmJfYXJ5X3BsdXMoVkFMVUUgeCwgVkFMVUUgeSkKICAgICB6ID0g cmJfYXJ5X25ldzIobGVuKTsKICAgICBNRU1DUFkoUkFSUkFZX1BUUih6KSwgUkFSUkFZX1BU Uih4KSwgVkFMVUUsIFJBUlJBWV9MRU4oeCkpOwogICAgIE1FTUNQWShSQVJSQVlfUFRSKHop ICsgUkFSUkFZX0xFTih4KSwgUkFSUkFZX1BUUih5KSwgVkFMVUUsIFJBUlJBWV9MRU4oeSkp OwotICAgIFJBUlJBWSh6KS0+bGVuID0gbGVuOworICAgIEFSWV9TRVRfTEVOKHosIGxlbik7 CiAgICAgcmV0dXJuIHo7CiB9CiAKQEAgLTIzMDcsNyArMjQ2Nyw3IEBAIHJiX2FyeV90aW1l cyhWQUxVRSBhcnksIFZBTFVFIHRpbWVzKQogICAgIGxlbiAqPSBSQVJSQVlfTEVOKGFyeSk7 CiAKICAgICBhcnkyID0gYXJ5X25ldyhyYl9vYmpfY2xhc3MoYXJ5KSwgbGVuKTsKLSAgICBS QVJSQVkoYXJ5MiktPmxlbiA9IGxlbjsKKyAgICBBUllfU0VUX0xFTihhcnkyLCBsZW4pOwog CiAgICAgZm9yIChpPTA7IGk8bGVuOyBpKz1SQVJSQVlfTEVOKGFyeSkpIHsKIAlNRU1DUFko UkFSUkFZX1BUUihhcnkyKStpLCBSQVJSQVlfUFRSKGFyeSksIFZBTFVFLCBSQVJSQVlfTEVO KGFyeSkpOwpAQCAtMjcxNiw3ICsyODc2LDcgQEAgcmJfYXJ5X3VuaXFfYmFuZyhWQUxVRSBh cnkpCiAJICAgIHJiX2FyeV9zdG9yZShhcnksIGorKywgdik7CiAJfQogICAgIH0KLSAgICBS QVJSQVkoYXJ5KS0+bGVuID0gajsKKyAgICBBUllfU0VUX0xFTihhcnksIGopOwogCiAgICAg cmV0dXJuIGFyeTsKIH0KQEAgLTI3NzEsNyArMjkzMSw3IEBAIHJiX2FyeV9jb21wYWN0X2Jh bmcoVkFMVUUgYXJ5KQogICAgIGlmIChuICogMiA8IEFSWV9DQVBBKGFyeSkgJiYgQVJZX0RF RkFVTFRfU0laRSAqIDIgPCBBUllfQ0FQQShhcnkpKSB7CiAJUkVTSVpFX0NBUEEoYXJ5LCBu ICogMik7CiAgICAgfQotICAgIFJBUlJBWShhcnkpLT5sZW4gPSBuOworICAgIEFSWV9TRVRf TEVOKGFyeSwgbik7CiAKICAgICByZXR1cm4gYXJ5OwogfQpAQCAtMzE2OCw3ICszMzI4LDcg QEAgcGVybXV0ZTAobG9uZyBuLCBsb25nIHIsIGxvbmcgKnAsIGxvbmcgaW5kZXgsIGludCAq dXNlZCwgVkFMVUUgdmFsdWVzKQogCQljb25zdCBWQUxVRSAqdmFsdWVzX2FycmF5ID0gUkFS UkFZX1BUUih2YWx1ZXMpOwogCiAJCWZvciAoaiA9IDA7IGogPCByOyBqKyspIHJlc3VsdF9h cnJheVtqXSA9IHZhbHVlc19hcnJheVtwW2pdXTsKLQkJUkFSUkFZKHJlc3VsdCktPmxlbiA9 IHI7CisJCUFSWV9TRVRfTEVOKHJlc3VsdCwgcik7CiAJCXJiX3lpZWxkKHJlc3VsdCk7CiAJ ICAgIH0KIAl9CkBAIC0zMjI4LDcgKzMzODgsNyBAQCByYl9hcnlfcGVybXV0YXRpb24oaW50 IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBhcnkpCiAJbG9uZyAqcCA9IChsb25nKilSU1RS SU5HX1BUUih0MCk7CiAJdm9sYXRpbGUgVkFMVUUgdDEgPSB0bXBidWYobixzaXplb2YoaW50 KSk7CiAJaW50ICp1c2VkID0gKGludCopUlNUUklOR19QVFIodDEpOwotCVZBTFVFIGFyeTAg PSBhcnlfbWFrZV9zaGFyZWQoYXJ5KTsgLyogcHJpdmF0ZSBkZWZlbnNpdmUgY29weSBvZiBh cnkgKi8KKwlWQUxVRSBhcnkwID0gYXJ5X21ha2Vfc3Vic3RpdHV0aW9uKGFyeSk7IC8qIHBy aXZhdGUgZGVmZW5zaXZlIGNvcHkgb2YgYXJ5ICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgbjsg aSsrKSB1c2VkW2ldID0gMDsgLyogaW5pdGlhbGl6ZSBhcnJheSAqLwogCmRpZmYgLS1naXQg YS9leHQvdGsvdGNsdGtsaWIuYyBiL2V4dC90ay90Y2x0a2xpYi5jCmluZGV4IDE5NDYyNzIu LjFkMzEyZTUgMTAwNjQ0Ci0tLSBhL2V4dC90ay90Y2x0a2xpYi5jCisrKyBiL2V4dC90ay90 Y2x0a2xpYi5jCkBAIC0zMDkwLDcgKzMwOTAsNyBAQCBpcF9ydWJ5X2NtZChjbGllbnREYXRh LCBpbnRlcnAsIGFyZ2MsIGFyZ3YpCiAgICAgLyogZ2V0IGFyZ3MgKi8KICAgICBhcmdzID0g cmJfYXJ5X25ldzIoYXJnYyAtIDIpOwogI2lmZGVmIEhBVkVfU1RSVUNUX1JBUlJBWV9MRU4K LSAgICBSQVJSQVkoYXJncyktPmxlbiA9IDA7CisgICAgUkFSUkFZKGFyZ3MpLT5hcy5oZWFw LmxlbiA9IDA7CiAjZW5kaWYKICAgICBmb3IoaSA9IDM7IGkgPCBhcmdjOyBpKyspIHsKICNp ZiBUQ0xfTUFKT1JfVkVSU0lPTiA+PSA4CkBAIC0zMDk5LDE0ICszMDk5LDE0IEBAIGlwX3J1 YnlfY21kKGNsaWVudERhdGEsIGludGVycCwgYXJnYywgYXJndikKICNpZm5kZWYgSEFWRV9T VFJVQ1RfUkFSUkFZX0xFTgogCXJiX2FyeV9wdXNoKGFyZ3MsIHJiX3RhaW50ZWRfc3RyX25l dyhzdHIsIGxlbikpOwogI2Vsc2UKLSAgICAgICAgUkFSUkFZKGFyZ3MpLT5wdHJbUkFSUkFZ KGFyZ3MpLT5sZW4rK10gPSByYl90YWludGVkX3N0cl9uZXcoc3RyLCBsZW4pOworICAgICAg ICBSQVJSQVkoYXJncyktPmFzLmhlYXAucHRyW1JBUlJBWShhcmdzKS0+YXMuaGVhcC5sZW4r K10gPSByYl90YWludGVkX3N0cl9uZXcoc3RyLCBsZW4pOwogI2VuZGlmCiAjZWxzZSAvKiBU Q0xfTUFKT1JfVkVSU0lPTiA8IDggKi8KICAgICAgICAgRFVNUDIoImFyZzolcyIsYXJndltp XSk7CiAjaWZuZGVmIEhBVkVfU1RSVUNUX1JBUlJBWV9MRU4KIAlyYl9hcnlfcHVzaChhcmdz LCByYl90YWludGVkX3N0cl9uZXcyKGFyZ3ZbaV0pKTsKICNlbHNlCi0gICAgICAgIFJBUlJB WShhcmdzKS0+cHRyW1JBUlJBWShhcmdzKS0+bGVuKytdID0gcmJfdGFpbnRlZF9zdHJfbmV3 Mihhcmd2W2ldKTsKKyAgICAgICAgUkFSUkFZKGFyZ3MpLT5hcy5oZWFwLnB0cltSQVJSQVko YXJncyktPmFzLmhlYXAubGVuKytdID0gcmJfdGFpbnRlZF9zdHJfbmV3Mihhcmd2W2ldKTsK ICNlbmRpZgogI2VuZGlmCiAgICAgfQpAQCAtODI5OCw3ICs4Mjk4LDcgQEAgaXBfaW52b2tl X3dpdGhfcG9zaXRpb24oYXJnYywgYXJndiwgb2JqLCBwb3NpdGlvbikKICAgICBEVU1QMigi YmFjayBmcm9tIGhhbmRsZXIgKGN1cnJlbnQgdGhyZWFkOiVseCkiLCBjdXJyZW50KTsKIAog ICAgIC8qIGdldCByZXN1bHQgJiBmcmVlIGFsbG9jYXRlZCBtZW1vcnkgKi8KLSAgICByZXQg PSBSQVJSQVkocmVzdWx0KS0+cHRyWzBdOworICAgIHJldCA9IFJBUlJBWShyZXN1bHQpLT5h cy5oZWFwLnB0clswXTsKICNpZiAwIC8qIHVzZSBUY2xfRXZlbnR1YWxseUZyZWUgKi8KICAg ICBUY2xfRXZlbnR1YWxseUZyZWUoKENsaWVudERhdGEpYWxsb2NfZG9uZSwgVENMX0RZTkFN SUMpOyAvKiBYWFhYWFhYWCAqLwogI2Vsc2UKZGlmZiAtLWdpdCBhL2djLmMgYi9nYy5jCmlu ZGV4IGM0NjdjYjEuLjQ3ZTU4YjcgMTAwNjQ0Ci0tLSBhL2djLmMKKysrIGIvZ2MuYwpAQCAt MTQ2Miw3ICsxNDYyLDcgQEAgZ2NfbWFya19jaGlsZHJlbihyYl9vYmpzcGFjZV90ICpvYmpz cGFjZSwgVkFMVUUgcHRyLCBpbnQgbGV2KQogCiAgICAgICBjYXNlIFRfQVJSQVk6CiAJaWYg KEZMX1RFU1Qob2JqLCBFTFRTX1NIQVJFRCkpIHsKLQkgICAgcHRyID0gb2JqLT5hcy5hcnJh eS5hdXguc2hhcmVkOworCSAgICBwdHIgPSBvYmotPmFzLmFycmF5LmFzLmhlYXAuYXV4LnNo YXJlZDsKIAkgICAgZ290byBhZ2FpbjsKIAl9CiAJZWxzZSB7CmRpZmYgLS1naXQgYS9pbmNs dWRlL3J1YnkvcnVieS5oIGIvaW5jbHVkZS9ydWJ5L3J1YnkuaAppbmRleCAxYzUzNzc3Li4y NDMzOTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3J1YnkvcnVieS5oCisrKyBiL2luY2x1ZGUv cnVieS9ydWJ5LmgKQEAgLTUwNCw3ICs1MDQsNyBAQCBWQUxVRSByYl9uZXdvYmoodm9pZCk7 CiAgICAgaWYgKEZMX1RFU1Qob2JqLCBGTF9FWElWQVIpKSByYl9jb3B5X2dlbmVyaWNfaXZh cigoVkFMVUUpY2xvbmUsKFZBTFVFKW9iaik7XAogfSB3aGlsZSAoMCkKICNkZWZpbmUgRFVQ U0VUVVAoZHVwLG9iaikgZG8ge1wKLSAgICBPQkpTRVRVUChkdXAscmJfb2JqX2NsYXNzKG9i aiksKFJCQVNJQyhvYmopLT5mbGFncykmKFRfTUFTS3xGTF9FWElWQVJ8RkxfVEFJTlR8Rkxf VU5UUlVTVEVEKSk7XAorICAgIE9CSlNFVFVQKGR1cCxyYl9vYmpfY2xhc3Mob2JqKSwgKFJC QVNJQyhvYmopLT5mbGFncykmKFRfTUFTS3xGTF9FWElWQVJ8RkxfVEFJTlR8RkxfVU5UUlVT VEVEKSk7IFwKICAgICBpZiAoRkxfVEVTVChvYmosIEZMX0VYSVZBUikpIHJiX2NvcHlfZ2Vu ZXJpY19pdmFyKChWQUxVRSlkdXAsKFZBTFVFKW9iaik7XAogfSB3aGlsZSAoMCkKIApAQCAt NTk2LDE3ICs1OTYsMzQgQEAgc3RydWN0IFJTdHJpbmcgewogICAgICBSU1RSSU5HKHN0cikt PmFzLmhlYXAucHRyKQogI2RlZmluZSBSU1RSSU5HX0VORChzdHIpIChSU1RSSU5HX1BUUihz dHIpK1JTVFJJTkdfTEVOKHN0cikpCiAKKyNkZWZpbmUgUkFSUkFZX0VNQkVEX0xFTl9NQVgg Mwogc3RydWN0IFJBcnJheSB7CiAgICAgc3RydWN0IFJCYXNpYyBiYXNpYzsKLSAgICBsb25n IGxlbjsKICAgICB1bmlvbiB7Ci0JbG9uZyBjYXBhOwotCVZBTFVFIHNoYXJlZDsKLSAgICB9 IGF1eDsKLSAgICBWQUxVRSAqcHRyOworCXN0cnVjdCB7CisJICAgIGxvbmcgbGVuOworCSAg ICB1bmlvbiB7CisJCWxvbmcgY2FwYTsKKwkJVkFMVUUgc2hhcmVkOworCSAgICB9IGF1eDsK KwkgICAgVkFMVUUgKnB0cjsKKwl9IGhlYXA7CisJVkFMVUUgYXJ5W1JBUlJBWV9FTUJFRF9M RU5fTUFYXTsKKyAgICB9IGFzOwogfTsKLSNkZWZpbmUgUkFSUkFZX0xFTihhKSBSQVJSQVko YSktPmxlbgotI2RlZmluZSBSQVJSQVlfUFRSKGEpIFJBUlJBWShhKS0+cHRyCisjZGVmaW5l IFJBUlJBWV9FTUJFRF9GTEFHIEZMX1VTRVIxCisvKiBGTF9VU0VSMiBpcyBmb3IgRUxUU19T SEFSRUQgKi8KKyNkZWZpbmUgUkFSUkFZX0VNQkVEX0xFTl9NQVNLIChGTF9VU0VSNHxGTF9V U0VSMykKKyNkZWZpbmUgUkFSUkFZX0VNQkVEX0xFTl9TSElGVCAoRkxfVVNISUZUKzMpCisj ZGVmaW5lIFJBUlJBWV9MRU4oYSkgXAorICAgICgoUkJBU0lDKGEpLT5mbGFncyAmIFJBUlJB WV9FTUJFRF9GTEFHKSA/IFwKKyAgICAgKGxvbmcpKChSQkFTSUMoYSktPmZsYWdzID4+IFJB UlJBWV9FTUJFRF9MRU5fU0hJRlQpICYgXAorCSAoUkFSUkFZX0VNQkVEX0xFTl9NQVNLID4+ IFJBUlJBWV9FTUJFRF9MRU5fU0hJRlQpKSA6IFwKKyAgICAgUkFSUkFZKGEpLT5hcy5oZWFw LmxlbikKKyNkZWZpbmUgUkFSUkFZX1BUUihhKSBcCisgICAgKChSQkFTSUMoYSktPmZsYWdz ICYgUkFSUkFZX0VNQkVEX0ZMQUcpID8gXAorICAgICBSQVJSQVkoYSktPmFzLmFyeSA6IFwK KyAgICAgUkFSUkFZKGEpLT5hcy5oZWFwLnB0cikKIAogc3RydWN0IFJSZWdleHAgewogICAg IHN0cnVjdCBSQmFzaWMgYmFzaWM7CmRpZmYgLS1naXQgYS9wYXJzZS55IGIvcGFyc2UueQpp bmRleCA2YjI5MTQyLi5iNDBhNDMwIDEwMDY0NAotLS0gYS9wYXJzZS55CisrKyBiL3BhcnNl LnkKQEAgLTQ5NDUsNyArNDk0NSw3IEBAIGNvdmVyYWdlKGNvbnN0IGNoYXIgKmYsIGludCBu KQogCWludCBpOwogCVJCQVNJQyhsaW5lcyktPmtsYXNzID0gMDsKIAlmb3IgKGkgPSAwOyBp IDwgbjsgaSsrKSBSQVJSQVlfUFRSKGxpbmVzKVtpXSA9IFFuaWw7Ci0JUkFSUkFZKGxpbmVz KS0+bGVuID0gbjsKKwlSQVJSQVkobGluZXMpLT5hcy5oZWFwLmxlbiA9IG47CiAJcmJfaGFz aF9hc2V0KGNvdmVyYWdlcywgZm5hbWUsIGxpbmVzKTsKIAlyZXR1cm4gbGluZXM7CiAgICAg fQpkaWZmIC0tZ2l0IGEvcHJvYy5jIGIvcHJvYy5jCmluZGV4IDcwNWE3NjQuLjQ5MDdkODAg MTAwNjQ0Ci0tLSBhL3Byb2MuYworKysgYi9wcm9jLmMKQEAgLTE2NzQsMTEgKzE2NzQsNyBA QCBzdGF0aWMgVkFMVUUgY3VycnkoVkFMVUUgZHVtbXksIFZBTFVFIGFyZ3MsIGludCBhcmdj LCBWQUxVRSAqYXJndiwgVkFMVUUgcGFzc2VkXwogc3RhdGljIFZBTFVFCiBtYWtlX2N1cnJ5 X3Byb2MoVkFMVUUgcHJvYywgVkFMVUUgcGFzc2VkLCBWQUxVRSBhcml0eSkKIHsKLSAgICBW QUxVRSBhcmdzID0gcmJfYXJ5X25ldzIoMyk7Ci0gICAgUkFSUkFZX1BUUihhcmdzKVswXSA9 IHByb2M7Ci0gICAgUkFSUkFZX1BUUihhcmdzKVsxXSA9IHBhc3NlZDsKLSAgICBSQVJSQVlf UFRSKGFyZ3MpWzJdID0gYXJpdHk7Ci0gICAgUkFSUkFZX0xFTihhcmdzKSA9IDM7CisgICAg VkFMVUUgYXJncyA9IHJiX2FyeV9uZXczKDMsIHByb2MsIHBhc3NlZCwgYXJpdHkpOwogICAg IHJiX2FyeV9mcmVlemUocGFzc2VkKTsKICAgICByYl9hcnlfZnJlZXplKGFyZ3MpOwogICAg IHJldHVybiByYl9wcm9jX25ldyhjdXJyeSwgYXJncyk7CmRpZmYgLS1naXQgYS92ZXJzaW9u LmggYi92ZXJzaW9uLmgKaW5kZXggODQ5N2NhMS4uMWFkN2JkMiAxMDA2NDQKLS0tIGEvdmVy c2lvbi5oCisrKyBiL3ZlcnNpb24uaApAQCAtMTAsNiArMTAsNyBAQAogI2RlZmluZSBSVUJZ X1JFTEVBU0VfWUVBUiAyMDA4CiAjZGVmaW5lIFJVQllfUkVMRUFTRV9NT05USCAxMAogI2Rl ZmluZSBSVUJZX1JFTEVBU0VfREFZIDcKKyNkZWZpbmUgUlVCWV9CUkFOQ0hfTkFNRSAiQXJy YXkgZW1iZWRkaW5nIgogCiAjaWZkZWYgUlVCWV9FWFRFUk4KIFJVQllfRVhURVJOIGNvbnN0 IGNoYXIgcnVieV92ZXJzaW9uW107Ci0tIAoxLjYuMC4xCgo= --------------070602010803050805040806 Content-Type: application/x-gzip; name="array-benchmark.tar.gz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="array-benchmark.tar.gz" H4sIAPtp60gAA+3a30rDMBTH8V3vKQLeKI55TpomG7gnERmdTlfcH6mbsre3XQt60QwM4wTD 73tTFnqxMT6kpGex3D6tNkX1drfYzD83PC+qqjgSjavF4FJRnTXmdHU2P11Jt5+bWNOAmZy2 xlJWr3NOLh8outg3ONPhY19USg2Oh9dDeea++raXF4kvJFs5o+HXqlwvVXmfdf+HulLt0nq3 e1c8VKq8nTWXQs3UNY/HdDPe7+ZFs/LAI/1YL9OIh8vt8zD270F/a9Hvn6P5N51/B/8SBfln +E8lj38dzb+1jX8mA/8SBfnX8J9KHv9ZNP/OwL9gQf4z+E8lj38Tyz8Tt8//8C9SkH8D/6nk 8Z9H88+E8z/Bgvzn8J9KHv82nv/u+V/Dv0RB/i38p5LHv4vnvzv/w/4vUpB/B/+p5PE/ieZf U+uf4V+iIP8T+E8lj/9pPP8Z9n/BgvxP4T+V+v2z8Pwf/7z/yw32f8HC5n8wAJhKHv/C5/+/ /buTf4Z/kcL84wVAKvX71/H2f9c9/2fwL1HY/B/2/1Tq959F9N+d/2P+X6Sw+T/4T6V+/yaa fyaL9/+Chc3/wX8q9fvP4/ln3fon+JcobP4P/hFCCCGEEEIIIYT+S987UkjrAFAAAA== --------------070602010803050805040806--