From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Antipov Newsgroups: gmane.emacs.devel Subject: immediate strings #2 Date: Mon, 28 Nov 2011 13:11:51 +0400 Message-ID: <4ED35057.8010103@yandex.ru> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------050002080508050409010300" X-Trace: dough.gmane.org 1322471531 1969 80.91.229.12 (28 Nov 2011 09:12:11 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Mon, 28 Nov 2011 09:12:11 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Nov 28 10:12:07 2011 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1RUxFt-0003vd-PD for ged-emacs-devel@m.gmane.org; Mon, 28 Nov 2011 10:12:06 +0100 Original-Received: from localhost ([::1]:37207 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RUxFk-0003pT-CY for ged-emacs-devel@m.gmane.org; Mon, 28 Nov 2011 04:11:56 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:45329) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RUxFW-0003Zs-Eq for emacs-devel@gnu.org; Mon, 28 Nov 2011 04:11:49 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RUxFO-0005Hg-MR for emacs-devel@gnu.org; Mon, 28 Nov 2011 04:11:42 -0500 Original-Received: from mail-bw0-f41.google.com ([209.85.214.41]:65503) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RUxFO-0005Hc-7k for emacs-devel@gnu.org; Mon, 28 Nov 2011 04:11:34 -0500 Original-Received: by bke17 with SMTP id 17so9261679bke.0 for ; Mon, 28 Nov 2011 01:11:32 -0800 (PST) Original-Received: by 10.205.135.133 with SMTP id ig5mr18038364bkc.84.1322471492197; Mon, 28 Nov 2011 01:11:32 -0800 (PST) Original-Received: from [192.168.0.171] ([78.153.153.8]) by mx.google.com with ESMTPS id l5sm24934512bkv.9.2011.11.28.01.11.30 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 28 Nov 2011 01:11:31 -0800 (PST) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20111115 Thunderbird/8.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 209.85.214.41 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:146296 Archived-At: This is a multi-part message in MIME format. --------------050002080508050409010300 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Here is the next version of immediate strings patch, with further improve= ments suggested by Paul. As it was said, strings up to 21 bytes on 64-bit and u= p to 9 bytes on 32-bit can be immediate (trailing '\0' is not counted). Note t= his code assumes sizeof (EMACS_INT) is equal to sizeof (void *), so it's not compatible with WIDE_EMACS_INT. Since there was a reasonable doubts whether this stuff is practically use= ful, I did two benchmarks. The fisrt one was a simple string allocation benchm= ark, attached as stringbench.el. The second one was just a compilation of all = stuff in lisp subdirectory with byte-force-recompile. Everything was tested wit= h 64-bit executables and '-Q -batch' command line options. Configuration: ./configure --prefix=3D/not/exists --without-sound --witho= ut-pop \ --with-x-toolkit=3Dlucid --without-dbus --without-libotf = \ --without-selinux --without-xft --without-gsettings \ --without-gnutls --without-rsvg --without-xml2 Compiler: gcc 4.6.1, optimization flags -O3 Old executable size 12855360 bytes, new exectable size 12904512 bytes (0.= 38% larger code size). * Benchmark 1, 8 runs for each executable: -- Old -- 33.24user 0.23system 0:33.72elapsed 99%CPU (0avgtext+0avgdata 368268maxre= sident)k 0inputs+0outputs (0major+112338minor)pagefaults 0swaps 32.29user 0.25system 0:32.77elapsed 99%CPU (0avgtext+0avgdata 338012maxre= sident)k 0inputs+0outputs (0major+124684minor)pagefaults 0swaps 33.31user 0.24system 0:33.80elapsed 99%CPU (0avgtext+0avgdata 330612maxre= sident)k 0inputs+0outputs (0major+120164minor)pagefaults 0swaps 33.91user 0.24system 0:34.41elapsed 99%CPU (0avgtext+0avgdata 351588maxre= sident)k 0inputs+0outputs (0major+125401minor)pagefaults 0swaps 33.17user 0.27system 0:33.69elapsed 99%CPU (0avgtext+0avgdata 331480maxre= sident)k 0inputs+0outputs (0major+120374minor)pagefaults 0swaps 33.26user 0.31system 0:33.83elapsed 99%CPU (0avgtext+0avgdata 332956maxre= sident)k 0inputs+0outputs (0major+148027minor)pagefaults 0swaps 33.38user 0.28system 0:33.90elapsed 99%CPU (0avgtext+0avgdata 334400maxre= sident)k 0inputs+0outputs (0major+133420minor)pagefaults 0swaps 33.13user 0.23system 0:33.61elapsed 99%CPU (0avgtext+0avgdata 331132maxre= sident)k 0inputs+0outputs (0major+120341minor)pagefaults 0swaps -- New -- 32.59user 0.35system 0:33.18elapsed 99%CPU (0avgtext+0avgdata 332528maxre= sident)k 0inputs+0outputs (0major+149273minor)pagefaults 0swaps 32.62user 0.31system 0:33.17elapsed 99%CPU (0avgtext+0avgdata 332532maxre= sident)k 0inputs+0outputs (0major+149274minor)pagefaults 0swaps 32.44user 0.30system 0:32.98elapsed 99%CPU (0avgtext+0avgdata 333696maxre= sident)k 0inputs+0outputs (0major+145349minor)pagefaults 0swaps 29.29user 0.30system 0:29.80elapsed 99%CPU (0avgtext+0avgdata 366444maxre= sident)k 0inputs+0outputs (0major+136105minor)pagefaults 0swaps 31.90user 0.33system 0:32.47elapsed 99%CPU (0avgtext+0avgdata 362092maxre= sident)k 0inputs+0outputs (0major+161330minor)pagefaults 0swaps 34.29user 0.34system 0:34.88elapsed 99%CPU (0avgtext+0avgdata 375636maxre= sident)k 0inputs+0outputs (0major+160050minor)pagefaults 0swaps 32.64user 0.31system 0:33.20elapsed 99%CPU (0avgtext+0avgdata 336572maxre= sident)k 0inputs+0outputs (0major+150284minor)pagefaults 0swaps 33.17user 0.27system 0:33.69elapsed 99%CPU (0avgtext+0avgdata 360560maxre= sident)k 0inputs+0outputs (0major+126406minor)pagefaults 0swaps -- Results -- Got 2.5% better speed, but ~3.1% larger heap usage. It's expected that he= ap usage should be smaller, why it isn't? Old code increments consing_since_= gc with the number of bytes allocated for each new string's data, but new code do= es so only for non-immediate strings; so, old code calls GC earlier than new, t= hus giving smaller peak heap usage. * Benchmark 2, 8 runs for each executable: -- Old -- 91.86user 0.49system 2:27.21elapsed 62%CPU (0avgtext+0avgdata 74736maxres= ident)k 0inputs+77864outputs (0major+39292minor)pagefaults 0swaps 91.57user 0.54system 2:27.30elapsed 62%CPU (0avgtext+0avgdata 74648maxres= ident)k 0inputs+78536outputs (0major+38641minor)pagefaults 0swaps 89.58user 0.52system 2:21.93elapsed 63%CPU (0avgtext+0avgdata 74684maxres= ident)k 0inputs+78536outputs (0major+38903minor)pagefaults 0swaps 91.53user 0.53system 2:25.14elapsed 63%CPU (0avgtext+0avgdata 74612maxres= ident)k 0inputs+78536outputs (0major+38538minor)pagefaults 0swaps 91.49user 0.56system 2:24.56elapsed 63%CPU (0avgtext+0avgdata 74708maxres= ident)k 0inputs+78528outputs (0major+38716minor)pagefaults 0swaps 91.77user 0.53system 2:24.01elapsed 64%CPU (0avgtext+0avgdata 74660maxres= ident)k 0inputs+78536outputs (0major+39164minor)pagefaults 0swaps 91.44user 0.54system 2:27.12elapsed 62%CPU (0avgtext+0avgdata 74728maxres= ident)k 0inputs+78536outputs (0major+39173minor)pagefaults 0swaps 91.72user 0.50system 2:24.25elapsed 63%CPU (0avgtext+0avgdata 74680maxres= ident)k 0inputs+78528outputs (0major+39538minor)pagefaults 0swaps -- New -- 89.98user 0.53system 2:22.79elapsed 63%CPU (0avgtext+0avgdata 73440maxres= ident)k 0inputs+78536outputs (0major+36362minor)pagefaults 0swaps 89.91user 0.51system 2:24.10elapsed 62%CPU (0avgtext+0avgdata 73528maxres= ident)k 0inputs+78528outputs (0major+36753minor)pagefaults 0swaps 89.85user 0.48system 2:24.74elapsed 62%CPU (0avgtext+0avgdata 73392maxres= ident)k 0inputs+78536outputs (0major+36745minor)pagefaults 0swaps 90.12user 0.54system 2:22.56elapsed 63%CPU (0avgtext+0avgdata 73440maxres= ident)k 0inputs+78536outputs (0major+37347minor)pagefaults 0swaps 89.95user 0.53system 2:23.74elapsed 62%CPU (0avgtext+0avgdata 73416maxres= ident)k 0inputs+78536outputs (0major+37292minor)pagefaults 0swaps 91.26user 0.53system 2:25.64elapsed 63%CPU (0avgtext+0avgdata 73440maxres= ident)k 0inputs+78536outputs (0major+36782minor)pagefaults 0swaps 90.03user 0.56system 2:25.01elapsed 62%CPU (0avgtext+0avgdata 73376maxres= ident)k 0inputs+78536outputs (0major+37418minor)pagefaults 0swaps 90.15user 0.54system 2:25.73elapsed 62%CPU (0avgtext+0avgdata 73448maxres= ident)k 0inputs+78536outputs (0major+37279minor)pagefaults 0swaps -- Results -- Got ~1.3% better speed, ~1.7% smaller heap usage. Since this benchmark do= es a lot of things besides string allocation, 'later GC' effect is negligible here= =2E Obviously, new string code is more complex, and, =D0=B0s it seems at firs= t, should be slower because any access to string data involves an evaluation of a cond= itional expression, which creates more pressure to instruction cache and branch p= rediction logic. But an overall improvement may be explained by better spatial loca= lity and thus better data cache utilization (normal string and it's data may be al= located far away from each other, so when cache line is filled by accessing a mem= ber of Lisp_String, it's very unlikely to get the same cache line filled with st= ring data; for an immediate string, such a case should be quite rare). This may be c= hecked, for example, with valgrind by using it's cachegrind tool (but I didn't tr= ied this yet). Dmitry --------------050002080508050409010300 Content-Type: text/plain; name="stringbench.el" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="stringbench.el" KGRlZnVuIGxvdC1vZi1zdHJpbmdzIChuc3RyaW5ncyBtYXhsZW5ndGgpCiAgKGxldCAoKGNv dW50IDApIChzdHJpbmdzIG5pbCkpCiAgICAod2hpbGUgKDw9IGNvdW50IG5zdHJpbmdzKQog ICAgICAobGV0KiAoKGxlbmd0aCAoMSsgKCUgY291bnQgbWF4bGVuZ3RoKSkpCgkgICAgIChz dHJpbmcgKG1ha2Utc3RyaW5nIGxlbmd0aCA2NSkpKQoJKGFuZCAoemVyb3AgKGxvZ2FuZCBs ZW5ndGggMSkpCgkgICAgIChzZXRxIHN0cmluZ3MgKGNvbnMgc3RyaW5nIHN0cmluZ3MpKSkK CShzZXRxIGNvdW50ICgxKyBjb3VudCkpKSkpKQoKKGRlZnVuIHJ1bnRlc3QgKCkKICAobGV0 ICgobnN0cmluZ3MgMTYpKQogICAgKHdoaWxlICg8PSBuc3RyaW5ncyAxMDQ4NTc2KQogICAg ICAobGV0ICgobWF4bGVuZ3RoIDIpKQoJKHdoaWxlICg8PSBtYXhsZW5ndGggMTAyNCkKCSAg KGxvdC1vZi1zdHJpbmdzIG5zdHJpbmdzIG1heGxlbmd0aCkKCSAgKHNldHEgbWF4bGVuZ3Ro ICgqIDIgbWF4bGVuZ3RoKSkpKQogICAgICAoc2V0cSBuc3RyaW5ncyAoKiAyIG5zdHJpbmdz KSkpKSkK --------------050002080508050409010300 Content-Type: text/plain; name="immstr2.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="immstr2.patch" PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9hbGxvYy5jJwotLS0gc3JjL2FsbG9jLmMJMjAxMS0x MS0yMCAwMzowNzowMiArMDAwMAorKysgc3JjL2FsbG9jLmMJMjAxMS0xMS0yOCAwNTozMjox OSArMDAwMApAQCAtMTM2LDIwICsxMzYsMTQgQEAKIC8qIE1hcmssIHVubWFyaywgcXVlcnkg bWFyayBiaXQgb2YgYSBMaXNwIHN0cmluZy4gIFMgbXVzdCBiZSBhIHBvaW50ZXIKICAgIHRv IGEgc3RydWN0IExpc3BfU3RyaW5nLiAgKi8KIAotI2RlZmluZSBNQVJLX1NUUklORyhTKQkJ KChTKS0+c2l6ZSB8PSBBUlJBWV9NQVJLX0ZMQUcpCi0jZGVmaW5lIFVOTUFSS19TVFJJTkco UykJKChTKS0+c2l6ZSAmPSB+QVJSQVlfTUFSS19GTEFHKQotI2RlZmluZSBTVFJJTkdfTUFS S0VEX1AoUykJKCgoUyktPnNpemUgJiBBUlJBWV9NQVJLX0ZMQUcpICE9IDApCisjZGVmaW5l IE1BUktfU1RSSU5HKFMpCQkoKFMpLT5nY21hcmtiaXQgPSAxKQorI2RlZmluZSBVTk1BUktf U1RSSU5HKFMpCSgoUyktPmdjbWFya2JpdCA9IDApCisjZGVmaW5lIFNUUklOR19NQVJLRURf UChTKQkoKFMpLT5nY21hcmtiaXQpCiAKICNkZWZpbmUgVkVDVE9SX01BUksoVikJCSgoVikt PmhlYWRlci5zaXplIHw9IEFSUkFZX01BUktfRkxBRykKICNkZWZpbmUgVkVDVE9SX1VOTUFS SyhWKQkoKFYpLT5oZWFkZXIuc2l6ZSAmPSB+QVJSQVlfTUFSS19GTEFHKQogI2RlZmluZSBW RUNUT1JfTUFSS0VEX1AoVikJKCgoViktPmhlYWRlci5zaXplICYgQVJSQVlfTUFSS19GTEFH KSAhPSAwKQogCi0vKiBWYWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIFMsIGEgcG9p bnRlciB0byBhIHN0cnVjdCBMaXNwX1N0cmluZy4KLSAgIEJlIGNhcmVmdWwgZHVyaW5nIEdD LCBiZWNhdXNlIFMtPnNpemUgY29udGFpbnMgdGhlIG1hcmsgYml0IGZvcgotICAgc3RyaW5n cy4gICovCi0KLSNkZWZpbmUgR0NfU1RSSU5HX0JZVEVTKFMpCShTVFJJTkdfQllURVMgKFMp KQotCiAvKiBHbG9iYWwgdmFyaWFibGVzLiAgKi8KIHN0cnVjdCBlbWFjc19nbG9iYWxzIGds b2JhbHM7CiAKQEAgLTM4Myw2ICszNzcsNyBAQAogc3RhdGljIHZvaWQgbWFya19zdGFjayAo dm9pZCk7CiBzdGF0aWMgaW50IGxpdmVfdmVjdG9yX3AgKHN0cnVjdCBtZW1fbm9kZSAqLCB2 b2lkICopOwogc3RhdGljIGludCBsaXZlX2J1ZmZlcl9wIChzdHJ1Y3QgbWVtX25vZGUgKiwg dm9pZCAqKTsKK3N0YXRpYyBpbnQgbGl2ZV9zdHJpbmdfZGF0YV9wIChzdHJ1Y3QgTGlzcF9T dHJpbmcgKik7CiBzdGF0aWMgaW50IGxpdmVfc3RyaW5nX3AgKHN0cnVjdCBtZW1fbm9kZSAq LCB2b2lkICopOwogc3RhdGljIGludCBsaXZlX2NvbnNfcCAoc3RydWN0IG1lbV9ub2RlICos IHZvaWQgKik7CiBzdGF0aWMgaW50IGxpdmVfc3ltYm9sX3AgKHN0cnVjdCBtZW1fbm9kZSAq LCB2b2lkICopOwpAQCAtMTczMyw3ICsxNzI4LDggQEAKICAgIGEgcG9pbnRlciB0byB0aGUg YHUuZGF0YScgbWVtYmVyIG9mIGl0cyBzZGF0YSBzdHJ1Y3R1cmU7IHRoZQogICAgc3RydWN0 dXJlIHN0YXJ0cyBhdCBhIGNvbnN0YW50IG9mZnNldCBpbiBmcm9udCBvZiB0aGF0LiAgKi8K IAotI2RlZmluZSBTREFUQV9PRl9TVFJJTkcoUykgKChzdHJ1Y3Qgc2RhdGEgKikgKChTKS0+ ZGF0YSAtIFNEQVRBX0RBVEFfT0ZGU0VUKSkKKyNkZWZpbmUgU0RBVEFfT0ZfU1RSSU5HKFMp ICgoUyktPmltbWJpdCA/IChhYm9ydCAoKSwgKHN0cnVjdCBzZGF0YSAqKSBOVUxMKSBcCisg IDogKChzdHJ1Y3Qgc2RhdGEgKikgKChTKS0+dS5kYXQuZGF0YSAtIFNEQVRBX0RBVEFfT0ZG U0VUKSkpCiAKIAogI2lmZGVmIEdDX0NIRUNLX1NUUklOR19PVkVSUlVOCkBAIC0xODE1LDIx ICsxODExLDM0IEBACiAKIHN0YXRpYyBpbnQgY2hlY2tfc3RyaW5nX2J5dGVzX2NvdW50Owog Ci0jZGVmaW5lIENIRUNLX1NUUklOR19CWVRFUyhTKQlTVFJJTkdfQllURVMgKFMpCi0KLQot LyogTGlrZSBHQ19TVFJJTkdfQllURVMsIGJ1dCB3aXRoIGRlYnVnZ2luZyBjaGVjay4gICov CisjZGVmaW5lIENIRUNLX1NUUklOR19CWVRFUyhTKQlzdHJpbmdfYnl0ZXMgKFMpCiAKIEVN QUNTX0lOVAogc3RyaW5nX2J5dGVzIChzdHJ1Y3QgTGlzcF9TdHJpbmcgKnMpCiB7Ci0gIEVN QUNTX0lOVCBuYnl0ZXMgPQotICAgIChzLT5zaXplX2J5dGUgPCAwID8gcy0+c2l6ZSAmIH5B UlJBWV9NQVJLX0ZMQUcgOiBzLT5zaXplX2J5dGUpOworICBFTUFDU19JTlQgbmJ5dGVzOwog Ci0gIGlmICghUFVSRV9QT0lOVEVSX1AgKHMpCi0gICAgICAmJiBzLT5kYXRhCi0gICAgICAm JiBuYnl0ZXMgIT0gU0RBVEFfTkJZVEVTIChTREFUQV9PRl9TVFJJTkcgKHMpKSkKLSAgICBh Ym9ydCAoKTsKKyAgaWYgKHMtPmltbWJpdCkKKyAgICB7CisgICAgICBuYnl0ZXMgPSBzLT51 LmltbS5zaXplX2J5dGUgPCAwID8KKwlzLT51LmltbS5zaXplIDogcy0+dS5pbW0uc2l6ZV9i eXRlOworICAgICAgaWYgKG5ieXRlcyA+PSBTVFJJTkdfSU1NX01BWCkKKwkvKiBJbXBvc3Np YmxlIGltbWVkaWF0ZSBzdHJpbmcuICAqLworCWFib3J0ICgpOworICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIG5ieXRlcyA9IHMtPnUuZGF0LnNpemVfYnl0ZSA8IDAgPworCXMtPnUu ZGF0LnNpemUgOiBzLT51LmRhdC5zaXplX2J5dGU7CisgICAgICBpZiAobmJ5dGVzIDwgU1RS SU5HX0lNTV9NQVgpCisJLyogSW1wb3NzaWJsZSBub3JtYWwgc3RyaW5nLiAgKi8KKwlhYm9y dCAoKTsKKyAgICAgIGlmICghUFVSRV9QT0lOVEVSX1AgKHMpICYmCisJICBzLT51LmRhdC5k YXRhICYmCisJICBuYnl0ZXMgIT0gU0RBVEFfTkJZVEVTIChTREFUQV9PRl9TVFJJTkcgKHMp KSkKKwkvKiBOb3JtYWwgbm9uLXB1cmUgc3RyaW5nIHdpdGggc2l6ZSBtaXNtYXRjaC4gICov CisJYWJvcnQgKCk7CisgICAgfQogICByZXR1cm4gbmJ5dGVzOwogfQogCkBAIC0xODU0LDcg KzE4NjMsNyBAQAogCUNIRUNLX1NUUklOR19CWVRFUyAoZnJvbS0+c3RyaW5nKTsKIAogICAg ICAgaWYgKGZyb20tPnN0cmluZykKLQluYnl0ZXMgPSBHQ19TVFJJTkdfQllURVMgKGZyb20t PnN0cmluZyk7CisJbmJ5dGVzID0gc3RyaW5nX2J5dGVzIChmcm9tLT5zdHJpbmcpOwogICAg ICAgZWxzZQogCW5ieXRlcyA9IFNEQVRBX05CWVRFUyAoZnJvbSk7CiAKQEAgLTIwMDAsOCAr MjAwOSw4IEBACiAgIC8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0 byBzdG9yZSBOQllURVMgYnl0ZXMKICAgICAgb2Ygc3RyaW5nIGRhdGEuICAqLwogICBuZWVk ZWQgPSBTREFUQV9TSVpFIChuYnl0ZXMpOwotICBvbGRfZGF0YSA9IHMtPmRhdGEgPyBTREFU QV9PRl9TVFJJTkcgKHMpIDogTlVMTDsKLSAgb2xkX25ieXRlcyA9IEdDX1NUUklOR19CWVRF UyAocyk7CisgIG9sZF9kYXRhID0gcy0+dS5kYXQuZGF0YSA/IFNEQVRBX09GX1NUUklORyAo cykgOiBOVUxMOworICBvbGRfbmJ5dGVzID0gc3RyaW5nX2J5dGVzIChzKTsKIAogICBNQUxM T0NfQkxPQ0tfSU5QVVQ7CiAKQEAgLTIwNjAsMTMgKzIwNjksMTEgQEAKICAgTUFMTE9DX1VO QkxPQ0tfSU5QVVQ7CiAKICAgZGF0YS0+c3RyaW5nID0gczsKLSAgcy0+ZGF0YSA9IFNEQVRB X0RBVEEgKGRhdGEpOworICBzLT51LmRhdC5kYXRhID0gU0RBVEFfREFUQSAoZGF0YSk7CiAj aWZkZWYgR0NfQ0hFQ0tfU1RSSU5HX0JZVEVTCiAgIFNEQVRBX05CWVRFUyAoZGF0YSkgPSBu Ynl0ZXM7CiAjZW5kaWYKLSAgcy0+c2l6ZSA9IG5jaGFyczsKLSAgcy0+c2l6ZV9ieXRlID0g bmJ5dGVzOwotICBzLT5kYXRhW25ieXRlc10gPSAnXDAnOworICBzLT51LmRhdC5kYXRhW25i eXRlc10gPSAnXDAnOwogI2lmZGVmIEdDX0NIRUNLX1NUUklOR19PVkVSUlVOCiAgIG1lbWNw eSAoKGNoYXIgKikgZGF0YSArIG5lZWRlZCwgc3RyaW5nX292ZXJydW5fY29va2llLAogCSAg R0NfU1RSSU5HX09WRVJSVU5fQ09PS0lFX1NJWkUpOwpAQCAtMjA4NCw2ICsyMDkxLDEyIEBA CiAgIGNvbnNpbmdfc2luY2VfZ2MgKz0gbmVlZGVkOwogfQogCisjaWZkZWYgR0NfU1RSSU5H X1NUQVRTCisKK3N0YXRpYyBFTUFDU19JTlQgdG90YWxfaW1tX3N0cmluZ3MsIHRvdGFsX2Rh dF9zdHJpbmdzOworc3RhdGljIEVNQUNTX0lOVCB0b3RhbF9pbW1fYnl0ZXMsIHRvdGFsX2Rh dF9ieXRlczsKKworI2VuZGlmCiAKIC8qIFN3ZWVwIGFuZCBjb21wYWN0IHN0cmluZ3MuICAq LwogCkBAIC0yMDk3LDYgKzIxMTAsMTEgQEAKICAgdG90YWxfc3RyaW5ncyA9IHRvdGFsX2Zy ZWVfc3RyaW5ncyA9IDA7CiAgIHRvdGFsX3N0cmluZ19zaXplID0gMDsKIAorI2lmZGVmIEdD X1NUUklOR19TVEFUUworICB0b3RhbF9pbW1fc3RyaW5ncyA9IHRvdGFsX2RhdF9zdHJpbmdz ID0gMDsKKyAgdG90YWxfaW1tX2J5dGVzID0gdG90YWxfZGF0X2J5dGVzID0gMDsKKyNlbmRp ZgorCiAgIC8qIFNjYW4gc3RyaW5nc19ibG9ja3MsIGZyZWUgTGlzcF9TdHJpbmdzIHRoYXQg YXJlbid0IG1hcmtlZC4gICovCiAgIGZvciAoYiA9IHN0cmluZ19ibG9ja3M7IGI7IGIgPSBu ZXh0KQogICAgIHsKQEAgLTIxMDksNDkgKzIxMjcsNjAgQEAKIAl7CiAJICBzdHJ1Y3QgTGlz cF9TdHJpbmcgKnMgPSBiLT5zdHJpbmdzICsgaTsKIAotCSAgaWYgKHMtPmRhdGEpCisJICBp ZiAoU1RSSU5HX01BUktFRF9QIChzKSkKKwkgICAgewkgICAgICAKKwkgICAgICAvKiBTdHJp bmcgaXMgbGl2ZTsgdW5tYXJrIGl0IGFuZCBpdHMgaW50ZXJ2YWxzLiAgKi8KKwkgICAgICBV Tk1BUktfU1RSSU5HIChzKTsKKworCSAgICAgIGlmICghTlVMTF9JTlRFUlZBTF9QIChzLT5p bnRlcnZhbHMpKQorCQlVTk1BUktfQkFMQU5DRV9JTlRFUlZBTFMgKHMtPmludGVydmFscyk7 CisKKwkgICAgICArK3RvdGFsX3N0cmluZ3M7CisJICAgICAgdG90YWxfc3RyaW5nX3NpemUg Kz0gc3RyaW5nX2J5dGVzIChzKTsKKyNpZmRlZiBHQ19TVFJJTkdfU1RBVFMKKwkgICAgICBp ZiAocy0+aW1tYml0KQorCQl7CisJCSAgdG90YWxfaW1tX3N0cmluZ3MrKzsKKwkJICB0b3Rh bF9pbW1fYnl0ZXMgKz0gc3RyaW5nX2J5dGVzIChzKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJ eworCQkgIHRvdGFsX2RhdF9zdHJpbmdzKys7CisJCSAgdG90YWxfZGF0X2J5dGVzICs9IHN0 cmluZ19ieXRlcyAocyk7CisJCX0KKyNlbmRpZiAvKiBHQ19TVFJJTkdfU1RBVFMgKi8KKwkg ICAgfQorCSAgZWxzZQogCSAgICB7Ci0JICAgICAgLyogU3RyaW5nIHdhcyBub3Qgb24gZnJl ZS1saXN0IGJlZm9yZS4gICovCi0JICAgICAgaWYgKFNUUklOR19NQVJLRURfUCAocykpCi0J CXsKLQkJICAvKiBTdHJpbmcgaXMgbGl2ZTsgdW5tYXJrIGl0IGFuZCBpdHMgaW50ZXJ2YWxz LiAgKi8KLQkJICBVTk1BUktfU1RSSU5HIChzKTsKLQotCQkgIGlmICghTlVMTF9JTlRFUlZB TF9QIChzLT5pbnRlcnZhbHMpKQotCQkgICAgVU5NQVJLX0JBTEFOQ0VfSU5URVJWQUxTIChz LT5pbnRlcnZhbHMpOwotCi0JCSAgKyt0b3RhbF9zdHJpbmdzOwotCQkgIHRvdGFsX3N0cmlu Z19zaXplICs9IFNUUklOR19CWVRFUyAocyk7Ci0JCX0KKwkgICAgICBpZiAocy0+aW1tYml0 KQorCQkvKiBGaWxsIGRhdGEgd2l0aCBzcGVjaWFsIHBhdHRlcm4uIFVzZWQgYnkKKwkJICAg R0MgdG8gZmluZCBkZWFkIGltbWVkaWF0ZSBzdHJpbmdzLiAgKi8KKwkJbWVtc2V0IChzLT51 LmltbS5kYXRhLCAweGZmLCBTVFJJTkdfSU1NX01BWCk7CiAJICAgICAgZWxzZQogCQl7Ci0J CSAgLyogU3RyaW5nIGlzIGRlYWQuICBQdXQgaXQgb24gdGhlIGZyZWUtbGlzdC4gICovCi0J CSAgc3RydWN0IHNkYXRhICpkYXRhID0gU0RBVEFfT0ZfU1RSSU5HIChzKTsKKwkJICBpZiAo cy0+dS5kYXQuZGF0YSkKKwkJICAgIHsKKwkJICAgICAgLyogU3RyaW5nIGlzIGRlYWQuICBQ dXQgaXQgb24gdGhlIGZyZWUtbGlzdC4gICovCisJCSAgICAgIHN0cnVjdCBzZGF0YSAqZGF0 YSA9IFNEQVRBX09GX1NUUklORyAocyk7CiAKLQkJICAvKiBTYXZlIHRoZSBzaXplIG9mIFMg aW4gaXRzIHNkYXRhIHNvIHRoYXQgd2Uga25vdwotCQkgICAgIGhvdyBsYXJnZSB0aGF0IGlz LiAgUmVzZXQgdGhlIHNkYXRhJ3Mgc3RyaW5nCi0JCSAgICAgYmFjay1wb2ludGVyIHNvIHRo YXQgd2Uga25vdyBpdCdzIGZyZWUuICAqLworCQkgICAgICAvKiBTYXZlIHRoZSBzaXplIG9m IFMgaW4gaXRzIHNkYXRhIHNvIHRoYXQgd2Uga25vdworCQkJIGhvdyBsYXJnZSB0aGF0IGlz LiAgUmVzZXQgdGhlIHNkYXRhJ3Mgc3RyaW5nCisJCQkgYmFjay1wb2ludGVyIHNvIHRoYXQg d2Uga25vdyBpdCdzIGZyZWUuICAqLwogI2lmZGVmIEdDX0NIRUNLX1NUUklOR19CWVRFUwot CQkgIGlmIChHQ19TVFJJTkdfQllURVMgKHMpICE9IFNEQVRBX05CWVRFUyAoZGF0YSkpCi0J CSAgICBhYm9ydCAoKTsKKwkJICAgICAgaWYgKHN0cmluZ19ieXRlcyAocykgIT0gU0RBVEFf TkJZVEVTIChkYXRhKSkKKwkJCWFib3J0ICgpOwogI2Vsc2UKLQkJICBkYXRhLT51Lm5ieXRl cyA9IEdDX1NUUklOR19CWVRFUyAocyk7CisJCSAgICAgIGRhdGEtPnUubmJ5dGVzID0gc3Ry aW5nX2J5dGVzIChzKTsKICNlbmRpZgotCQkgIGRhdGEtPnN0cmluZyA9IE5VTEw7Ci0KLQkJ ICAvKiBSZXNldCB0aGUgc3RyaW5ncydzIGBkYXRhJyBtZW1iZXIgc28gdGhhdCB3ZQotCQkg ICAgIGtub3cgaXQncyBmcmVlLiAgKi8KLQkJICBzLT5kYXRhID0gTlVMTDsKLQotCQkgIC8q IFB1dCB0aGUgc3RyaW5nIG9uIHRoZSBmcmVlLWxpc3QuICAqLwotCQkgIE5FWFRfRlJFRV9M SVNQX1NUUklORyAocykgPSBzdHJpbmdfZnJlZV9saXN0OwotCQkgIHN0cmluZ19mcmVlX2xp c3QgPSBzOwotCQkgICsrbmZyZWU7CisJCSAgICAgIGRhdGEtPnN0cmluZyA9IE5VTEw7CisK KwkJICAgICAgLyogUmVzZXQgdGhlIHN0cmluZ3MncyBgZGF0YScgbWVtYmVyCisJCQkgc28g dGhhdCB3ZSBrbm93IGl0J3MgZnJlZS4gICovCisJCSAgICAgIHMtPnUuZGF0LmRhdGEgPSBO VUxMOworCQkgICAgfQogCQl9Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIC8q IFMgd2FzIG9uIHRoZSBmcmVlLWxpc3QgYmVmb3JlLiAgUHV0IGl0IHRoZXJlIGFnYWluLiAg Ki8KKworCSAgICAgIC8qIFB1dCB0aGUgc3RyaW5nIG9uIHRoZSBmcmVlLWxpc3QuICAqLwog CSAgICAgIE5FWFRfRlJFRV9MSVNQX1NUUklORyAocykgPSBzdHJpbmdfZnJlZV9saXN0Owog CSAgICAgIHN0cmluZ19mcmVlX2xpc3QgPSBzOwogCSAgICAgICsrbmZyZWU7CkBAIC0yMjQz LDEyICsyMjcyLDEyIEBACiAJICAvKiBDaGVjayB0aGF0IHRoZSBzdHJpbmcgc2l6ZSByZWNv cmRlZCBpbiB0aGUgc3RyaW5nIGlzIHRoZQogCSAgICAgc2FtZSBhcyB0aGUgb25lIHJlY29y ZGVkIGluIHRoZSBzZGF0YSBzdHJ1Y3R1cmUuICovCiAJICBpZiAoZnJvbS0+c3RyaW5nCi0J ICAgICAgJiYgR0NfU1RSSU5HX0JZVEVTIChmcm9tLT5zdHJpbmcpICE9IFNEQVRBX05CWVRF UyAoZnJvbSkpCisJICAgICAgJiYgc3RyaW5nX2J5dGVzIChmcm9tLT5zdHJpbmcpICE9IFNE QVRBX05CWVRFUyAoZnJvbSkpCiAJICAgIGFib3J0ICgpOwogI2VuZGlmIC8qIEdDX0NIRUNL X1NUUklOR19CWVRFUyAqLwogCiAJICBpZiAoZnJvbS0+c3RyaW5nKQotCSAgICBuYnl0ZXMg PSBHQ19TVFJJTkdfQllURVMgKGZyb20tPnN0cmluZyk7CisJICAgIG5ieXRlcyA9IHN0cmlu Z19ieXRlcyAoZnJvbS0+c3RyaW5nKTsKIAkgIGVsc2UKIAkgICAgbmJ5dGVzID0gU0RBVEFf TkJZVEVTIChmcm9tKTsKIApAQCAtMjI4NCw3ICsyMzEzLDcgQEAKIAkJewogCQkgIHhhc3Nl cnQgKHRiICE9IGIgfHwgdG8gPCBmcm9tKTsKIAkJICBtZW1tb3ZlICh0bywgZnJvbSwgbmJ5 dGVzICsgR0NfU1RSSU5HX0VYVFJBKTsKLQkJICB0by0+c3RyaW5nLT5kYXRhID0gU0RBVEFf REFUQSAodG8pOworCQkgIHRvLT5zdHJpbmctPnUuZGF0LmRhdGEgPSBTREFUQV9EQVRBICh0 byk7CiAJCX0KIAogCSAgICAgIC8qIEFkdmFuY2UgcGFzdCB0aGUgc2RhdGEgd2UgY29waWVk IHRvLiAgKi8KQEAgLTI1MzMsNyArMjU2MiwxOSBAQAogICAgIHJldHVybiBlbXB0eV9tdWx0 aWJ5dGVfc3RyaW5nOwogCiAgIHMgPSBhbGxvY2F0ZV9zdHJpbmcgKCk7Ci0gIGFsbG9jYXRl X3N0cmluZ19kYXRhIChzLCBuY2hhcnMsIG5ieXRlcyk7CisgIGlmIChuYnl0ZXMgPCBTVFJJ TkdfSU1NX01BWCkKKyAgICB7CisgICAgICBzLT5pbW1iaXQgPSAxOworICAgICAgcy0+dS5p bW0uc2l6ZSA9IG5jaGFyczsKKyAgICAgIHMtPnUuaW1tLnNpemVfYnl0ZSA9IG5ieXRlczsK KyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzLT5pbW1iaXQgPSAwOworICAgICAgcy0+ dS5kYXQuc2l6ZSA9IG5jaGFyczsKKyAgICAgIHMtPnUuZGF0LnNpemVfYnl0ZSA9IG5ieXRl czsKKyAgICAgIGFsbG9jYXRlX3N0cmluZ19kYXRhIChzLCBuY2hhcnMsIG5ieXRlcyk7Cisg ICAgfQogICBYU0VUU1RSSU5HIChzdHJpbmcsIHMpOwogICBzdHJpbmdfY2hhcnNfY29uc2Vk ICs9IG5ieXRlczsKICAgcmV0dXJuIHN0cmluZzsKQEAgLTM4ODQsNiArMzkyNSwyMiBAQAog ICB4LT5jb2xvciA9IE1FTV9CTEFDSzsKIH0KIAorLyogTm9uLXplcm8gaWYgZGF0YSBvZiBT IGlzIHZhbGlkLiAgKi8KKworc3RhdGljIGlubGluZSBpbnQKK2xpdmVfc3RyaW5nX2RhdGFf cCAoc3RydWN0IExpc3BfU3RyaW5nICpzKQoreworICBpZiAocy0+aW1tYml0KQorICAgIHsK KyAgICAgIHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgICAgIGZvciAocCA9IHMtPnUuaW1tLmRh dGE7IHAgPCBzLT51LmltbS5kYXRhICsgU1RSSU5HX0lNTV9NQVg7IHArKykKKwlpZiAoKnAg IT0gMHhmZikKKwkgIHJldHVybiAxOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICByZXR1 cm4gcy0+dS5kYXQuZGF0YSAhPSBOVUxMOworfQogCiAvKiBWYWx1ZSBpcyBub24temVybyBp ZiBQIGlzIGEgcG9pbnRlciB0byBhIGxpdmUgTGlzcCBzdHJpbmcgb24KICAgIHRoZSBoZWFw LiAgTSBpcyBhIHBvaW50ZXIgdG8gdGhlIG1lbV9ibG9jayBmb3IgUC4gICovCkBAIC0zOTAx LDcgKzM5NTgsNyBAQAogICAgICAgcmV0dXJuIChvZmZzZXQgPj0gMAogCSAgICAgICYmIG9m ZnNldCAlIHNpemVvZiBiLT5zdHJpbmdzWzBdID09IDAKIAkgICAgICAmJiBvZmZzZXQgPCAo U1RSSU5HX0JMT0NLX1NJWkUgKiBzaXplb2YgYi0+c3RyaW5nc1swXSkKLQkgICAgICAmJiAo KHN0cnVjdCBMaXNwX1N0cmluZyAqKSBwKS0+ZGF0YSAhPSBOVUxMKTsKKwkgICAgICAmJiBs aXZlX3N0cmluZ19kYXRhX3AgKChzdHJ1Y3QgTGlzcF9TdHJpbmcgKikgcCkpOwogICAgIH0K ICAgZWxzZQogICAgIHJldHVybiAwOwpAQCAtNDgwMSwxNSArNDg1OCwyOSBAQAogICBzdHJ1 Y3QgTGlzcF9TdHJpbmcgKnM7CiAKICAgcyA9IChzdHJ1Y3QgTGlzcF9TdHJpbmcgKikgcHVy ZV9hbGxvYyAoc2l6ZW9mICpzLCBMaXNwX1N0cmluZyk7Ci0gIHMtPmRhdGEgPSAodW5zaWdu ZWQgY2hhciAqKSBmaW5kX3N0cmluZ19kYXRhX2luX3B1cmUgKGRhdGEsIG5ieXRlcyk7Ci0g IGlmIChzLT5kYXRhID09IE5VTEwpCi0gICAgewotICAgICAgcy0+ZGF0YSA9ICh1bnNpZ25l ZCBjaGFyICopIHB1cmVfYWxsb2MgKG5ieXRlcyArIDEsIC0xKTsKLSAgICAgIG1lbWNweSAo cy0+ZGF0YSwgZGF0YSwgbmJ5dGVzKTsKLSAgICAgIHMtPmRhdGFbbmJ5dGVzXSA9ICdcMCc7 Ci0gICAgfQotICBzLT5zaXplID0gbmNoYXJzOwotICBzLT5zaXplX2J5dGUgPSBtdWx0aWJ5 dGUgPyBuYnl0ZXMgOiAtMTsKKworICBpZiAobmJ5dGVzIDwgU1RSSU5HX0lNTV9NQVgpCisg ICAgeworICAgICAgbWVtY3B5IChzLT51LmltbS5kYXRhLCBkYXRhLCBuYnl0ZXMpOworICAg ICAgcy0+dS5pbW0uZGF0YVtuYnl0ZXNdID0gJ1wwJzsKKyAgICAgIHMtPmltbWJpdCA9IDE7 CisgICAgICBzLT51LmltbS5zaXplID0gbmNoYXJzOworICAgICAgcy0+dS5pbW0uc2l6ZV9i eXRlID0gbXVsdGlieXRlID8gbmJ5dGVzIDogLTE7CisgICAgfQorICBlbHNlCisgICAgewor ICAgICAgcy0+dS5kYXQuZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIGZpbmRfc3RyaW5nX2Rh dGFfaW5fcHVyZSAoZGF0YSwgbmJ5dGVzKTsKKyAgICAgIGlmIChzLT51LmRhdC5kYXRhID09 IE5VTEwpCisJeworCSAgcy0+dS5kYXQuZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIHB1cmVf YWxsb2MgKG5ieXRlcyArIDEsIC0xKTsKKwkgIG1lbWNweSAocy0+dS5kYXQuZGF0YSwgZGF0 YSwgbmJ5dGVzKTsKKwkgIHMtPnUuZGF0LmRhdGFbbmJ5dGVzXSA9ICdcMCc7CisJfQorICAg ICAgcy0+aW1tYml0ID0gMDsKKyAgICAgIHMtPnUuZGF0LnNpemUgPSBuY2hhcnM7CisgICAg ICBzLT51LmRhdC5zaXplX2J5dGUgPSBtdWx0aWJ5dGUgPyBuYnl0ZXMgOiAtMTsKKyAgICB9 CisKICAgcy0+aW50ZXJ2YWxzID0gTlVMTF9JTlRFUlZBTDsKICAgWFNFVFNUUklORyAoc3Ry aW5nLCBzKTsKICAgcmV0dXJuIHN0cmluZzsKQEAgLTQ4MjYsOSArNDg5NywyMyBAQAogICBF TUFDU19JTlQgbmNoYXJzID0gc3RybGVuIChkYXRhKTsKIAogICBzID0gKHN0cnVjdCBMaXNw X1N0cmluZyAqKSBwdXJlX2FsbG9jIChzaXplb2YgKnMsIExpc3BfU3RyaW5nKTsKLSAgcy0+ c2l6ZSA9IG5jaGFyczsKLSAgcy0+c2l6ZV9ieXRlID0gLTE7Ci0gIHMtPmRhdGEgPSAodW5z aWduZWQgY2hhciAqKSBkYXRhOworCisgIGlmIChuY2hhcnMgPCBTVFJJTkdfSU1NX01BWCkK KyAgICB7CisgICAgICBtZW1jcHkgKHMtPnUuaW1tLmRhdGEsIGRhdGEsIG5jaGFycyk7Cisg ICAgICBzLT51LmltbS5kYXRhW25jaGFyc10gPSAnXDAnOworICAgICAgcy0+aW1tYml0ID0g MTsKKyAgICAgIHMtPnUuaW1tLnNpemUgPSBuY2hhcnM7CisgICAgICBzLT51LmltbS5zaXpl X2J5dGUgPSAtMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzLT51LmRhdC5kYXRh ID0gKHVuc2lnbmVkIGNoYXIgKikgZGF0YTsKKyAgICAgIHMtPmltbWJpdCA9IDA7CisgICAg ICBzLT51LmRhdC5zaXplID0gbmNoYXJzOworICAgICAgcy0+dS5kYXQuc2l6ZV9ieXRlID0g LTE7CisgICAgfQorCiAgIHMtPmludGVydmFscyA9IE5VTExfSU5URVJWQUw7CiAgIFhTRVRT VFJJTkcgKHN0cmluZywgcyk7CiAgIHJldHVybiBzdHJpbmc7CkBAIC02MjUwLDYgKzYzMzUs MzEgQEAKICAgcmV0dXJuIEZsaXN0ICg4LCBjb25zZWQpOwogfQogCisjaWZkZWYgR0NfU1RS SU5HX1NUQVRTCisKK0RFRlVOICgic3RyaW5nLXN0YXRzIiwgRnN0cmluZ19zdGF0cywgU3N0 cmluZ19zdGF0cywgMCwgMCwgMCwKKyAgICAgICBkb2M6IC8qIFJldHVybiBhIGxpc3Qgb2Yg Y291bnRlcnMgdGhhdCBtZWFzdXJlcyBob3cgbXVjaAorc3RyaW5ncyBvZiBhIHBhcnRpY3Vs YXIgaW50ZXJuYWwgc3RydWN0dXJlIGFyZSBhbGl2ZSBhZnRlciBsYXN0CitnYXJiYWdlIGNv bGxlY3Rpb24sIGFuZCBob3cgbWFueSBieXRlcyBhcmUgaW4gdGhlbS4KK1RoZSBlbGVtZW50 cyBvZiB0aGUgdmFsdWUgYXJlIGFyZSBhcyBmb2xsb3dzOgorICAoSU1NLVNUUklOR1MgSU1N LUJZVEVTIERBVC1TVFJJTkdTIERBVC1CWVRFUykKK3doZXJlIElNTS1TVFJJTkdTIGlzIHRo ZSBudW1iZXIgb2YgaW1tZWRpYXRlIHN0cmluZ3MsIElNTS1CWVRFUworaXMgdGhlIHRvdGFs IG51bWJlciBvZiBieXRlcyBpbiB0aGVtLCBEQVQtU1RSSU5HUyBpcyB0aGUgbnVtYmVyIG9m Citub3JtYWwgc3RyaW5ncyBhbmQgREFULUJZRVMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBi eXRlcyBpbiB0aGVtLiAgKi8pCisgICh2b2lkKQoreworICBMaXNwX09iamVjdCBkYXRhWzRd OworCisgIGRhdGFbMF0gPSBtYWtlX251bWJlciAobWluIChNT1NUX1BPU0lUSVZFX0ZJWE5V TSwgdG90YWxfaW1tX3N0cmluZ3MpKTsKKyAgZGF0YVsxXSA9IG1ha2VfbnVtYmVyIChtaW4g KE1PU1RfUE9TSVRJVkVfRklYTlVNLCB0b3RhbF9pbW1fYnl0ZXMpKTsKKyAgZGF0YVsyXSA9 IG1ha2VfbnVtYmVyIChtaW4gKE1PU1RfUE9TSVRJVkVfRklYTlVNLCB0b3RhbF9kYXRfc3Ry aW5ncykpOworICBkYXRhWzNdID0gbWFrZV9udW1iZXIgKG1pbiAoTU9TVF9QT1NJVElWRV9G SVhOVU0sIHRvdGFsX2RhdF9ieXRlcykpOworCisgIHJldHVybiBGbGlzdCAoNCwgZGF0YSk7 Cit9CisKKyNlbmRpZiAvKiBHQ19TVFJJTkdfU1RBVFMgKi8KKwogLyogRmluZCBhdCBtb3N0 IEZJTkRfTUFYIHN5bWJvbHMgd2hpY2ggaGF2ZSBPQkogYXMgdGhlaXIgdmFsdWUgb3IKICAg IGZ1bmN0aW9uLiAgVGhpcyBpcyB1c2VkIGluIGdkYmluaXQncyBgeHdoaWNoc3ltYm9scycg Y29tbWFuZC4gICovCiAKQEAgLTY0NzUsNyArNjU4NSw5IEBACiAgIGRlZnN1YnIgKCZTZ2Fy YmFnZV9jb2xsZWN0KTsKICAgZGVmc3ViciAoJlNtZW1vcnlfbGltaXQpOwogICBkZWZzdWJy ICgmU21lbW9yeV91c2VfY291bnRzKTsKLQorI2lmZGVmIEdDX1NUUklOR19TVEFUUworICBk ZWZzdWJyICgmU3N0cmluZ19zdGF0cyk7CisjZW5kaWYKICNpZiBHQ19NQVJLX1NUQUNLID09 IEdDX1VTRV9HQ1BST1NfQ0hFQ0tfWk9NQklFUwogICBkZWZzdWJyICgmU2djX3N0YXR1cyk7 CiAjZW5kaWYKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZm5zLmMnCi0tLSBzcmMvZm5zLmMJ MjAxMS0xMS0xOSAwOToxODozMSArMDAwMAorKysgc3JjL2Zucy5jCTIwMTEtMTEtMjggMDU6 MjE6NTkgKzAwMDAKQEAgLTIxNzYsOCArMjE3Niw4IEBACiAJICBpbnQgbGVuID0gQ0hBUl9T VFJJTkcgKGNoYXJ2YWwsIHN0cik7CiAJICBFTUFDU19JTlQgc2l6ZV9ieXRlID0gU0JZVEVT IChhcnJheSk7CiAKLQkgIGlmIChJTlRfTVVMVElQTFlfT1ZFUkZMT1cgKFNDSEFSUyAoYXJy YXkpLCBsZW4pCi0JICAgICAgfHwgU0NIQVJTIChhcnJheSkgKiBsZW4gIT0gc2l6ZV9ieXRl KQorCSAgaWYgKElOVF9NVUxUSVBMWV9PVkVSRkxPVyAoc2l6ZSwgbGVuKQorCSAgICAgIHx8 IHNpemUgKiBsZW4gIT0gc2l6ZV9ieXRlKQogCSAgICBlcnJvciAoIkF0dGVtcHQgdG8gY2hh bmdlIGJ5dGUgbGVuZ3RoIG9mIGEgc3RyaW5nIik7CiAJICBmb3IgKGlkeCA9IDA7IGlkeCA8 IHNpemVfYnl0ZTsgaWR4KyspCiAJICAgICpwKysgPSBzdHJbaWR4ICUgbGVuXTsKCj09PSBt b2RpZmllZCBmaWxlICdzcmMvbGlzcC5oJwotLS0gc3JjL2xpc3AuaAkyMDExLTExLTI3IDE4 OjUyOjUzICswMDAwCisrKyBzcmMvbGlzcC5oCTIwMTEtMTEtMjggMDY6MDE6NDUgKzAwMDAK QEAgLTY5NiwxNyArNjk2LDIzIEBACiAKIC8qIENvbnZlbmllbmNlIG1hY3JvcyBmb3IgZGVh bGluZyB3aXRoIExpc3Agc3RyaW5ncy4gICovCiAKLSNkZWZpbmUgU0RBVEEoc3RyaW5nKQkJ KFhTVFJJTkcgKHN0cmluZyktPmRhdGEgKyAwKQorI2RlZmluZSBTREFUQShzdHJpbmcpCQko WFNUUklORyAoc3RyaW5nKS0+aW1tYml0ID8gXAorCQkJCSAoWFNUUklORyAoc3RyaW5nKS0+ dS5pbW0uZGF0YSArIDApIDogXAorCQkJCSAoWFNUUklORyAoc3RyaW5nKS0+dS5kYXQuZGF0 YSArIDApKQogI2RlZmluZSBTUkVGKHN0cmluZywgaW5kZXgpCShTREFUQSAoc3RyaW5nKVtp bmRleF0gKyAwKQogI2RlZmluZSBTU0VUKHN0cmluZywgaW5kZXgsIG5ldykgKFNEQVRBIChz dHJpbmcpW2luZGV4XSA9IChuZXcpKQotI2RlZmluZSBTQ0hBUlMoc3RyaW5nKQkJKFhTVFJJ TkcgKHN0cmluZyktPnNpemUgKyAwKQotI2RlZmluZSBTQllURVMoc3RyaW5nKQkJKFNUUklO R19CWVRFUyAoWFNUUklORyAoc3RyaW5nKSkgKyAwKQorI2RlZmluZSBTQ0hBUlMoc3RyaW5n KQkJKFhTVFJJTkcgKHN0cmluZyktPmltbWJpdCA/IFwKKwkJCQkgKFhTVFJJTkcgKHN0cmlu ZyktPnUuaW1tLnNpemUgKyAwKSA6IFwKKwkJCQkgKFhTVFJJTkcgKHN0cmluZyktPnUuZGF0 LnNpemUgKyAwKSkKKyNkZWZpbmUgU0JZVEVTKHN0cmluZykJCShzdHJpbmdfYnl0ZXMgKFhT VFJJTkcgKHN0cmluZykpICsgMCkKIAogLyogQXZvaWQgImRpZmZlciBpbiBzaWduIiB3YXJu aW5ncy4gICovCiAjZGVmaW5lIFNTREFUQSh4KSAgKChjaGFyICopIFNEQVRBICh4KSkKIAog I2RlZmluZSBTVFJJTkdfU0VUX0NIQVJTKHN0cmluZywgbmV3c2l6ZSkgXAotICAgIChYU1RS SU5HIChzdHJpbmcpLT5zaXplID0gKG5ld3NpemUpKQorICAoWFNUUklORyAoc3RyaW5nKS0+ aW1tYml0ID8gXAorICAgKFhTVFJJTkcgKHN0cmluZyktPnUuaW1tLnNpemUgPSAobmV3c2l6 ZSkpIDogXAorICAgKFhTVFJJTkcgKHN0cmluZyktPnUuZGF0LnNpemUgPSAobmV3c2l6ZSkp KQogCiAjZGVmaW5lIFNUUklOR19DT1BZSU4oc3RyaW5nLCBpbmRleCwgbmV3LCBjb3VudCkg XAogICAgIG1lbWNweSAoU0RBVEEgKHN0cmluZykgKyBpbmRleCwgbmV3LCBjb3VudCkKQEAg LTc5NiwyNCArODAyLDEyIEBACiAjZGVmaW5lIENEUl9TQUZFKGMpCQkJCVwKICAgKENPTlNQ ICgoYykpID8gWENEUiAoKGMpKSA6IFFuaWwpCiAKKyNkZWZpbmUgU1RSSU5HX1NJWkVfQllU RShzdHJpbmcpIChYU1RSSU5HIChzdHJpbmcpLT5pbW1iaXQgPyBcCisJCQkJICBYU1RSSU5H IChzdHJpbmcpLT51LmltbS5zaXplX2J5dGUgOiBcCisJCQkJICBYU1RSSU5HIChzdHJpbmcp LT51LmRhdC5zaXplX2J5dGUpCisKIC8qIE5vbnplcm8gaWYgU1RSIGlzIGEgbXVsdGlieXRl IHN0cmluZy4gICovCi0jZGVmaW5lIFNUUklOR19NVUxUSUJZVEUoU1RSKSAgXAotICAoWFNU UklORyAoU1RSKS0+c2l6ZV9ieXRlID49IDApCi0KLS8qIFJldHVybiB0aGUgbGVuZ3RoIGlu IGJ5dGVzIG9mIFNUUi4gICovCi0KLSNpZmRlZiBHQ19DSEVDS19TVFJJTkdfQllURVMKLQot c3RydWN0IExpc3BfU3RyaW5nOwotZXh0ZXJuIEVNQUNTX0lOVCBzdHJpbmdfYnl0ZXMgKHN0 cnVjdCBMaXNwX1N0cmluZyAqKTsKLSNkZWZpbmUgU1RSSU5HX0JZVEVTKFMpIHN0cmluZ19i eXRlcyAoKFMpKQotCi0jZWxzZSAvKiBub3QgR0NfQ0hFQ0tfU1RSSU5HX0JZVEVTICovCi0K LSNkZWZpbmUgU1RSSU5HX0JZVEVTKFNUUikgIFwKLSAgKChTVFIpLT5zaXplX2J5dGUgPCAw ID8gKFNUUiktPnNpemUgOiAoU1RSKS0+c2l6ZV9ieXRlKQotCi0jZW5kaWYgLyogbm90IEdD X0NIRUNLX1NUUklOR19CWVRFUyAqLworI2RlZmluZSBTVFJJTkdfTVVMVElCWVRFKHN0cmlu ZykgKFNUUklOR19TSVpFX0JZVEUgKHN0cmluZykgPiAwKQogCiAvKiBBbiB1cHBlciBib3Vu ZCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgTGlzcCBzdHJpbmcsIG5vdAogICAgY291 bnRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwuICBUaGlzIGEgdGlnaHQgZW5vdWdoIGJvdW5k IHRvCkBAIC04MjksMTggKzgyMywyOCBAQAogI2RlZmluZSBTVFJJTkdfQllURVNfQk9VTkQg IFwKICAgbWluIChNT1NUX1BPU0lUSVZFX0ZJWE5VTSwgKHB0cmRpZmZfdCkgbWluIChTSVpF X01BWCwgUFRSRElGRl9NQVgpIC0gMSkKIAorLyogTWF4aW11bSBhbW91bnQgb2YgYnl0ZXMs IGluY2x1ZGluZyAnXDAnLCBpbiBhbiBpbW1lZGlhdGUgc3RyaW5nLgorICAgVGhpcyBhc3N1 bWVzIHRoYXQgc2l6ZW9mIChFTUFDU19JTlQpIGlzIGVxdWFsIHRvIHNpemVvZiAodm9pZCAq ICkuICAqLworI2RlZmluZSBTVFJJTkdfSU1NX01BWCAoMyAqIHNpemVvZiAoRU1BQ1NfSU5U KSAtIDIpCisKIC8qIE1hcmsgU1RSIGFzIGEgdW5pYnl0ZSBzdHJpbmcuICAqLwogI2RlZmlu ZSBTVFJJTkdfU0VUX1VOSUJZVEUoU1RSKSAgXAogICBkbyB7IGlmIChFUSAoU1RSLCBlbXB0 eV9tdWx0aWJ5dGVfc3RyaW5nKSkgIFwKICAgICAgIChTVFIpID0gZW1wdHlfdW5pYnl0ZV9z dHJpbmc7ICBcCi0gICAgZWxzZSBYU1RSSU5HIChTVFIpLT5zaXplX2J5dGUgPSAtMTsgfSB3 aGlsZSAoMCkKKyAgICBlbHNlIGlmIChYU1RSSU5HIChTVFIpLT5pbW1iaXQpIFwKKyAgICAg IFhTVFJJTkcgKFNUUiktPnUuaW1tLnNpemVfYnl0ZSA9IC0xOyBcCisgICAgZWxzZSBcCisg ICAgICBYU1RSSU5HIChTVFIpLT51LmRhdC5zaXplX2J5dGUgPSAtMTsgfSB3aGlsZSAoMCkK IAogLyogTWFyayBTVFIgYXMgYSBtdWx0aWJ5dGUgc3RyaW5nLiAgQXNzdXJlIHRoYXQgU1RS IGNvbnRhaW5zIG9ubHkKICAgIEFTQ0lJIGNoYXJhY3RlcnMgaW4gYWR2YW5jZS4gICovCiAj ZGVmaW5lIFNUUklOR19TRVRfTVVMVElCWVRFKFNUUikgIFwKICAgZG8geyBpZiAoRVEgKFNU UiwgZW1wdHlfdW5pYnl0ZV9zdHJpbmcpKSAgXAogICAgICAgKFNUUikgPSBlbXB0eV9tdWx0 aWJ5dGVfc3RyaW5nOyAgXAotICAgIGVsc2UgWFNUUklORyAoU1RSKS0+c2l6ZV9ieXRlID0g WFNUUklORyAoU1RSKS0+c2l6ZTsgfSB3aGlsZSAoMCkKKyAgICBlbHNlIGlmIChYU1RSSU5H IChTVFIpLT5pbW1iaXQpIFwKKyAgICAgIFhTVFJJTkcgKFNUUiktPnUuaW1tLnNpemVfYnl0 ZSA9IFhTVFJJTkcgKFNUUiktPnUuaW1tLnNpemU7IFwKKyAgICBlbHNlIFwKKyAgICAgIFhT VFJJTkcgKFNUUiktPnUuZGF0LnNpemVfYnl0ZSA9IFhTVFJJTkcgKFNUUiktPnUuZGF0LnNp emU7IH0gd2hpbGUgKDApCiAKIC8qIEdldCB0ZXh0IHByb3BlcnRpZXMuICAqLwogI2RlZmlu ZSBTVFJJTkdfSU5URVJWQUxTKFNUUikgIChYU1RSSU5HIChTVFIpLT5pbnRlcnZhbHMgKyAw KQpAQCAtODQ4LDE2ICs4NTIsNTkgQEAKIC8qIFNldCB0ZXh0IHByb3BlcnRpZXMuICAqLwog I2RlZmluZSBTVFJJTkdfU0VUX0lOVEVSVkFMUyhTVFIsIElOVCkgKFhTVFJJTkcgKFNUUikt PmludGVydmFscyA9IChJTlQpKQogCi0vKiBJbiBhIHN0cmluZyBvciB2ZWN0b3IsIHRoZSBz aWduIGJpdCBvZiB0aGUgYHNpemUnIGlzIHRoZSBnYyBtYXJrIGJpdCAqLwotCiBzdHJ1Y3Qg TGlzcF9TdHJpbmcKICAgewotICAgIEVNQUNTX0lOVCBzaXplOwotICAgIEVNQUNTX0lOVCBz aXplX2J5dGU7Ci0gICAgSU5URVJWQUwgaW50ZXJ2YWxzOwkJLyogdGV4dCBwcm9wZXJ0aWVz IGluIHRoaXMgc3RyaW5nICovCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICAvKiBU ZXh0IHByb3BlcnRpZXMgaW4gdGhpcyBzdHJpbmcuICAqLworICAgIElOVEVSVkFMIGludGVy dmFsczsKKworICAgIC8qIE1hcmsgYml0IHVzZWQgZm9yIEdDLiAgKi8KKyAgICB1bnNpZ25l ZCBnY21hcmtiaXQgOiAxOworCisgICAgLyogU3RyaW5nIHN1YnR5cGUuICAqLworICAgIHVu c2lnbmVkIGltbWJpdCA6IDE7CisKKyAgICB1bmlvbiB7CisKKyAgICAgIC8qIFdoZW4gSU1N QklUIGlzIDEuICovCisgICAgICBzdHJ1Y3QgeworCUVNQUNTX0lOVCBzaXplIDogNzsKKwlF TUFDU19JTlQgc2l6ZV9ieXRlIDogNzsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbU1RSSU5HX0lN TV9NQVhdOworICAgICAgfSBpbW07CisgICAgICAKKyAgICAgIC8qIFdoZW4gSU1NQklUIGlz IDAuICAqLworICAgICAgc3RydWN0IHsKKwlFTUFDU19JTlQgc2l6ZSA6IEJJVFNfUEVSX0VN QUNTX0lOVCAtIDE7CisJRU1BQ1NfSU5UIHNpemVfYnl0ZSA6IEJJVFNfUEVSX0VNQUNTX0lO VCAtIDE7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICAgIH0gZGF0OworICAgIH0gdTsK ICAgfTsKIAorLyogUmV0dXJuIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgU1RSLiAgKi8KKwor I2lmZGVmIEdDX0NIRUNLX1NUUklOR19CWVRFUworCisvKiBTbG93ZXIgdmVyc2lvbiB3aXRo IGRlYnVnZ2luZyBjaGVjay4gICovCisKK2V4dGVybiBFTUFDU19JTlQgc3RyaW5nX2J5dGVz IChzdHJ1Y3QgTGlzcF9TdHJpbmcgKik7CisKKyNlbHNlIC8qIG5vdCBHQ19DSEVDS19TVFJJ TkdfQllURVMgKi8KKworc3RhdGljIGlubGluZQorRU1BQ1NfSU5UIHN0cmluZ19ieXRlcyAo c3RydWN0IExpc3BfU3RyaW5nICpzKQoreworICBFTUFDU19JTlQgc2l6ZSwgc2l6ZV9ieXRl OworCisgIGlmIChzLT5pbW1iaXQpCisgICAgc2l6ZSA9IHMtPnUuaW1tLnNpemUsIHNpemVf Ynl0ZSA9IHMtPnUuaW1tLnNpemVfYnl0ZTsKKyAgZWxzZQorICAgIHNpemUgPSBzLT51LmRh dC5zaXplLCBzaXplX2J5dGUgPSBzLT51LmRhdC5zaXplX2J5dGU7CisgIHJldHVybiBzaXpl X2J5dGUgPCAwID8gc2l6ZSA6IHNpemVfYnl0ZTsKK30KKworI2VuZGlmIC8qIEdDX0NIRUNL X1NUUklOR19CWVRFUyAqLworCiAvKiBIZWFkZXIgb2YgdmVjdG9yLWxpa2Ugb2JqZWN0cy4g IFRoaXMgZG9jdW1lbnRzIHRoZSBsYXlvdXQgY29uc3RyYWludHMgb24KICAgIHZlY3RvcnMg YW5kIHBzZXVkb3ZlY3RvcnMgb3RoZXIgdGhhbiBzdHJ1Y3QgTGlzcF9TdWJyLiAgSXQgYWxz byBwcmV2ZW50cwogICAgY29tcGlsZXJzIGZyb20gYmVpbmcgZm9vbGVkIGJ5IEVtYWNzJ3Mg dHlwZSBwdW5uaW5nOiB0aGUgWFNFVFBTRVVET1ZFQ1RPUgoK --------------050002080508050409010300--