From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7771 invoked by alias); 3 Oct 2016 10:00:40 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 39544 Received: (qmail 22442 invoked from network); 3 Oct 2016 10:00:39 -0000 X-Qmail-Scanner-Diagnostics: from mail-qk0-f173.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(209.85.220.173):SA:0(0.0/5.0):. Processed in 1.873846 secs); 03 Oct 2016 10:00:39 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,SPF_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: sgniazdowski@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _netblocks.google.com designates 209.85.220.173 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=h6F0JtJblVSi2LxSoS+3T/uodX8OcKA0aMNyqNqqVQY=; b=URrPg6oMS4aXjzP83Auf9pvomdnZ4OEU/cvx+MmreSqLTy/OYg/4y64SXbkHNMf2mO 7iFKtrwduBWqnd220wBwE0CJV1WLFSyezHZmvXGwOruNeGVbClotx2SD7Z+Uu1fSKj3o LuV7y9cHcYYaiF8DCHf/ArSV8KgAXVpY7rF3rMZG0TKqgDWsgZTDTZ8dYzkPwJbqEl4p cLs1tvi3g8dccQa6y8g6qfEnV8/jFPN/cPO323OGSnZQ/IhbdeoayGyThCQwc6/Glty0 DxEcMwNdvY/0rzz+QE0bTOD9tfKiJS28salC5wYS787FG0ZEZhRZA4+DXtlXSE/Y2Vxg aPAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=h6F0JtJblVSi2LxSoS+3T/uodX8OcKA0aMNyqNqqVQY=; b=bLHckoJkptWBLIIy/yaZ+kDGRdO0q20LUjhn6T/jrX9Ir144D11I1/363P4eHghKY/ u5nHYQYifOOUbOcL2luU3I7pJLcRaE+DN7AqcRYU04CoxODPVoGLUvUIrfrovw13ZGy3 OOot+5uj23SRjURimRx8i7C5DpllcbYeIqAFGz41wjvIRCllj7sC4+UKaWNQz3X7GTne B8o0QvYaMarEmhOG/FqxqYIYa+7bL7oW7QSJwD9Mw3n+u8eV5mUMQGhZ1hI4EQnbwQKo UYD6YkvL/iBSlPvU206NZUR2ob6kqElfqaI1O3aGOpadtGbXdjyvezAY9eJP33Su7ncP Ll1w== X-Gm-Message-State: AA6/9RlgD3vu0J7mejJrfMCnfU5kgXc5ku0fg6mEjOrvp5cYjEauo97HnlHdFShosoE/VkBuqiRJmLjd0gEkog== X-Received: by 10.55.176.199 with SMTP id z190mr20303698qke.139.1475488825621; Mon, 03 Oct 2016 03:00:25 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <161002162145.ZM22574@torch.brasslantern.com> References: <161002162145.ZM22574@torch.brasslantern.com> From: Sebastian Gniazdowski Date: Mon, 3 Oct 2016 12:00:05 +0200 Message-ID: Subject: Re: [BUG] queueing_enabled grows infinitely when in .recursive-edit To: Bart Schaefer Cc: Zsh hackers list Content-Type: multipart/mixed; boundary=94eb2c06569052653a053df3038e --94eb2c06569052653a053df3038e Content-Type: text/plain; charset=UTF-8 On 3 October 2016 at 01:21, Bart Schaefer wrote: > There seem to be a bunch of inter-related things going on here. > > The first is that recursiveedit() calls zlecore() which calls > getkeycmd() which cascades into raw_getbyte() with do_keytmout = 0 > which in some circumstances means that raw_getbyte() effectively > does a blocking read on its first call and only runs the sched > after a key is pressed. I haven't figured out what's wrong with > the calc_timeout() logic that makes this possible, but it's a > race -- it happens only once in a while. It could be either way, if this is to be resolved. I mean, stopping sched when in .recursive-edit has some, if not total sense. It's like if user would be in an application. > The second is that zlecore() expects to be entered with the signal > queue disabled, but zle widgets are called with queueing enabled, so > recursiveedit() needs save/zero/restore the queue level around the > call to zlecore(). > > The third is that somewhere below execstring() from checksched(), > the signal queueing level is being incremented but not decremented. > The problem is that the execution code calls itself recursively so > deeply that I can't pinpoint the place this occurs. Even with a > watchpoint on queueing_enabled, it looks as though we should be > fine -- it's as if the recursive calls never quite unwind all the > way back to the top, but printing stack traces in gdb doesn't show > that happening at any place where queueing_enabled changes. > > Usually the third effect is hidden by the restore_queue_signals() > in getbyte(), but when in recursiveedit() the queue_signal_level() > in raw_getbyte() starts out > 0, and never goes all the way back > down again. Or something like that. I expected fixing the second > problem to again mask the third, but it does not. > > It's almost like there's a tail-call optimization occuring that is > causing an unqueue_signals() to be skipped. And in fact there are > cases where the queueing_enabled is decremented but the watchpoint > mysteriously does not trigger -- I see the smaller "old" value the > next time the watchpoint triggers on the *increment*, but I never > see the assignment that reduces the value. I think this is because > gdb actually stops on the NEXT instruction AFTER the watched location, > and there are some places where there is no breakable next line (the > unqueue_signals() is the last line of a function). > > It's quite normal for queueing_enabled to run up to 12 or so on a > normal execution stack and still decrement all the way back to zero, > so watching for a high-water mark is nearly useless. Early this morning I read this text like if watchpoints didn't work and now did whole path from recursiveedit to second raw_getbyte() call. In lldb watchpoitns worked apparently always correctly, maybe because I have no optimizations. Forgot to set breakpoint on raw_getbyte() and ended in going multiple steps "repeated", but maybe that's a luck, because vim/:setscrollbind shows nicely where repetition starts and that queueing_enabled is off by 1: https://asciinema.org/a/2c4p285gujuv0850uinrmj2le The first common entry is #8. I submit and now start to think about what's gathered. Best regards, Sebastian Gniazdowski --94eb2c06569052653a053df3038e Content-Type: text/plain; charset=US-ASCII; name="watch2.c.txt" Content-Disposition: attachment; filename="watch2.c.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ittvwhqd0 UHJvY2VzcyAxOTEyNyBzdG9wcGVkCiogdGhyZWFkICMxOiB0aWQgPSAweDJjYmQyYywgMHgwMDAw MDAwMTBmMjhiM2JhIHpsZS5zb2ByZWN1cnNpdmVlZGl0KGFyZ3M9MHgwMDAwMDAwMTBmMzhiMGEw KSArIDI2IGF0IHpsZV9tYWluLmM6MTkxNiwgcXVldWUgPSAnY29tLmFwcGxlLm1haW4tdGhyZWFk Jywgc3RvcCByZWFzb24gPSBicmVha3BvaW50IDEuMQogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEw ZjI4YjNiYSB6bGUuc29gcmVjdXJzaXZlZWRpdChhcmdzPTB4MDAwMDAwMDEwZjM4YjBhMCkgKyAy NiBhdCB6bGVfbWFpbi5jOjE5MTYKICAgMTkxMyByZWN1cnNpdmVlZGl0KFVOVVNFRChjaGFyICoq YXJncykpCiAgIDE5MTQgewogICAxOTE1ICAgICAvLyBNWSBERUJVRwotPiAxOTE2ICAgICBGSUxF ICpfRiA9IGZvcGVuKCIvdG1wL3JlY3Vyc2l2ZS50eHQiLCAiYSsiKTsKICAgMTkxNyAgICAgZnBy aW50ZiggX0YsICJyZWN1cnNpdmVlZGl0KCkgLSBxdWV1ZWluZ19lbmFibGVkICglZClcbiIsIHF1 ZXVlaW5nX2VuYWJsZWQgKTsKICAgMTkxOCAgICAgZmNsb3NlKF9GKTsKICAgMTkxOQoobGxkYikg cCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQwID0gMQoobGxkYikgd2F0Y2hwb2ludCBzZXQgdmFy aWFibGUgcXVldWVpbmdfZW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2F0Y2hwb2ludCBj cmVhdGVkOiBXYXRjaHBvaW50IDE6IGFkZHIgPSAweDEwZjAxNmUyOCBzaXplID0gNCBzdGF0ZSA9 IGVuYWJsZWQgdHlwZSA9IHcKICAgIHdhdGNocG9pbnQgc3BlYyA9ICdxdWV1ZWluZ19lbmFibGVk JwogICAgbmV3IHZhbHVlOiAxCihsbGRiKSBjCgosIHN0b3AgcmVhc29uID0gd2F0Y2hwb2ludCAx CiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1MTNkIHpzaC01LjItZGV2LTJgemFsbG9jKHNp emU9NikgKyA0NSBhdCBtZW0uYzo5NTYKICAgOTUzICAgICAgaWYgKCFzaXplKQogICA5NTQgICAg ICAgICAgc2l6ZSA9IDE7CiAgIDk1NSAgICAgIHF1ZXVlX3NpZ25hbHMoKTsKLT4gOTU2ICAgICAg aWYgKCEocHRyID0gKHZvaWQgKikgbWFsbG9jKHNpemUpKSkgewogICA5NTcgICAgICAgICAgemVy cigiZmF0YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkiKTsKICAgOTU4ICAgICAgICAgIGV4aXQoMSk7 CiAgIDk1OSAgICAgIH0KKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkMSA9IDIKCiAg ICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1MWEyIHpzaC01LjItZGV2LTJgemFsbG9jKHNpemU9 NikgKyAxNDYgYXQgbWVtLmM6OTYwCiAgIDk1NyAgICAgICAgICB6ZXJyKCJmYXRhbCBlcnJvcjog b3V0IG9mIG1lbW9yeSIpOwogICA5NTggICAgICAgICAgZXhpdCgxKTsKICAgOTU5ICAgICAgfQot PiA5NjAgICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgOTYxCiAgIDk2MiAgICAgIHJldHVybiBw dHI7CiAgIDk2MyAgfQoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQyID0gMQoKICAg IGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTRmOTYgenNoLTUuMi1kZXYtMmBwdXNoaGVhcCArIDIy IGF0IG1lbS5jOjMwMgogICAyOTkgICAgICBoX3B1c2grKzsKICAgMzAwICAjZW5kaWYKICAgMzAx Ci0+IDMwMiAgICAgIGZvciAoaCA9IGhlYXBzOyBoOyBoID0gaC0+bmV4dCkgewogICAzMDMgICAg ICAgICAgRFBVVFMoIWgtPnVzZWQgJiYgaC0+bmV4dCwgIkJVRzogZW1wdHkgaGVhcCIpOwogICAz MDQgICAgICAgICAgaHMgPSAoSGVhcHN0YWNrKSB6YWxsb2Moc2l6ZW9mKCpocykpOwogICAzMDUg ICAgICAgICAgaHMtPm5leHQgPSBoLT5zcDsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50 KSAkMyA9IDIKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1MTNkIHpzaC01LjItZGV2LTJg emFsbG9jKHNpemU9MTYpICsgNDUgYXQgbWVtLmM6OTU2CiAgIDk1MyAgICAgIGlmICghc2l6ZSkK ICAgOTU0ICAgICAgICAgIHNpemUgPSAxOwogICA5NTUgICAgICBxdWV1ZV9zaWduYWxzKCk7Ci0+ IDk1NiAgICAgIGlmICghKHB0ciA9ICh2b2lkICopIG1hbGxvYyhzaXplKSkpIHsKICAgOTU3ICAg ICAgICAgIHplcnIoImZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5Iik7CiAgIDk1OCAgICAgICAg ICBleGl0KDEpOwogICA5NTkgICAgICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkg JDQgPSAzCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNTFhMiB6c2gtNS4yLWRldi0yYHph bGxvYyhzaXplPTE2KSArIDE0NiBhdCBtZW0uYzo5NjAKICAgOTU3ICAgICAgICAgIHplcnIoImZh dGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5Iik7CiAgIDk1OCAgICAgICAgICBleGl0KDEpOwogICA5 NTkgICAgICB9Ci0+IDk2MCAgICAgIHVucXVldWVfc2lnbmFscygpOwogICA5NjEKICAgOTYyICAg ICAgcmV0dXJuIHB0cjsKICAgOTYzICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkg JDUgPSAyCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNTA1ZCB6c2gtNS4yLWRldi0yYHB1 c2hoZWFwICsgMjIxIGF0IG1lbS5jOjMxOAogICAzMTUgICAgICAgICAgfQogICAzMTYgICNlbmRp ZgogICAzMTcgICAgICB9Ci0+IDMxOCAgICAgIHVucXVldWVfc2lnbmFscygpOwogICAzMTkgIH0K ICAgMzIwCiAgIDMyMSAgLyogcmVzZXQgaGVhcHMgdG8gcHJldmlvdXMgc3RhdGUgKi8KKGxsZGIp IHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkNiA9IDEKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAw MTBmMjg4N2VkIHpsZS5zb2BnZXRieXRlKGRvX2tleXRtb3V0PTAsIHRpbWVvdXQ9MHgwMDAwMDAw MDAwMDAwMDAwKSArIDIzNyBhdCB6bGVfbWFpbi5jOjkwMwogICA5MDAgICAgICBlbHNlIHsKICAg OTAxICAgICAgICAgIGZvciAoOzspIHsKICAgOTAyICAgICAgICAgICAgICBpbnQgcSA9IHF1ZXVl X3NpZ25hbF9sZXZlbCgpOwotPiA5MDMgICAgICAgICAgICAgIGRvbnRfcXVldWVfc2lnbmFscygp OwogICA5MDQgICAgICAgICAgICAgIHIgPSByYXdfZ2V0Ynl0ZShkb19rZXl0bW91dCwgJmNjKTsK ICAgOTA1ICAgICAgICAgICAgICByZXN0b3JlX3F1ZXVlX3NpZ25hbHMocSk7CiAgIDkwNiAgICAg ICAgICAgICAgaWYgKHIgPT0gLTIpIHsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAk NyA9IDAKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE0Zjk2IHpzaC01LjItZGV2LTJgcHVz aGhlYXAgKyAyMiBhdCBtZW0uYzozMDIKICAgMjk5ICAgICAgaF9wdXNoKys7CiAgIDMwMCAgI2Vu ZGlmCiAgIDMwMQotPiAzMDIgICAgICBmb3IgKGggPSBoZWFwczsgaDsgaCA9IGgtPm5leHQpIHsK ICAgMzAzICAgICAgICAgIERQVVRTKCFoLT51c2VkICYmIGgtPm5leHQsICJCVUc6IGVtcHR5IGhl YXAiKTsKICAgMzA0ICAgICAgICAgIGhzID0gKEhlYXBzdGFjaykgemFsbG9jKHNpemVvZigqaHMp KTsKICAgMzA1ICAgICAgICAgIGhzLT5uZXh0ID0gaC0+c3A7CihsbGRiKSBwIHF1ZXVlaW5nX2Vu YWJsZWQKKGludCkgJDggPSAxCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNTEzZCB6c2gt NS4yLWRldi0yYHphbGxvYyhzaXplPTE2KSArIDQ1IGF0IG1lbS5jOjk1NgogICA5NTMgICAgICBp ZiAoIXNpemUpCiAgIDk1NCAgICAgICAgICBzaXplID0gMTsKICAgOTU1ICAgICAgcXVldWVfc2ln bmFscygpOwotPiA5NTYgICAgICBpZiAoIShwdHIgPSAodm9pZCAqKSBtYWxsb2Moc2l6ZSkpKSB7 CiAgIDk1NyAgICAgICAgICB6ZXJyKCJmYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSIpOwogICA5 NTggICAgICAgICAgZXhpdCgxKTsKICAgOTU5ICAgICAgfQoobGxkYikgcCBxdWV1ZWluZ19lbmFi bGVkCihpbnQpICQ5ID0gMgoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTUxYTIgenNoLTUu Mi1kZXYtMmB6YWxsb2Moc2l6ZT0xNikgKyAxNDYgYXQgbWVtLmM6OTYwCiAgIDk1NyAgICAgICAg ICB6ZXJyKCJmYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSIpOwogICA5NTggICAgICAgICAgZXhp dCgxKTsKICAgOTU5ICAgICAgfQotPiA5NjAgICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgOTYx CiAgIDk2MiAgICAgIHJldHVybiBwdHI7CiAgIDk2MyAgfQoobGxkYikgcCBxdWV1ZWluZ19lbmFi bGVkCihpbnQpICQxMCA9IDEKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1MDVkIHpzaC01 LjItZGV2LTJgcHVzaGhlYXAgKyAyMjEgYXQgbWVtLmM6MzE4CiAgIDMxNSAgICAgICAgICB9CiAg IDMxNiAgI2VuZGlmCiAgIDMxNyAgICAgIH0KLT4gMzE4ICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7 CiAgIDMxOSAgfQogICAzMjAKICAgMzIxICAvKiByZXNldCBoZWFwcyB0byBwcmV2aW91cyBzdGF0 ZSAqLwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQxMSA9IDAKCiAgICBmcmFtZSAj MDogMHgwMDAwMDAwMTBlZjYwMjAwIHpzaC01LjItZGV2LTJgemNvbnRleHRfc2F2ZV9wYXJ0aWFs KHBhcnRzPTcpICsgMzIgYXQgY29udGV4dC5jOjU4CiAgIDU1CiAgIDU2ICAgICAgIHF1ZXVlX3Np Z25hbHMoKTsKICAgNTcKLT4gNTggICAgICAgY3MgPSAoc3RydWN0IGNvbnRleHRfc3RhY2sgKilt YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb250ZXh0X3N0YWNrKSk7CiAgIDU5CiAgIDYwICAgICAgIGlm IChwYXJ0cyAmIFpDT05URVhUX0hJU1QpIHsKICAgNjEgICAgICAgICAgIGhpc3RfY29udGV4dF9z YXZlKCZjcy0+aGlzdF9zdGFjaywgIWNzdGFjayk7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQK KGludCkgJDEyID0gMQoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTUxM2QgenNoLTUuMi1k ZXYtMmB6YWxsb2Moc2l6ZT0yNTYpICsgNDUgYXQgbWVtLmM6OTU2CiAgIDk1MyAgICAgIGlmICgh c2l6ZSkKICAgOTU0ICAgICAgICAgIHNpemUgPSAxOwogICA5NTUgICAgICBxdWV1ZV9zaWduYWxz KCk7Ci0+IDk1NiAgICAgIGlmICghKHB0ciA9ICh2b2lkICopIG1hbGxvYyhzaXplKSkpIHsKICAg OTU3ICAgICAgICAgIHplcnIoImZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5Iik7CiAgIDk1OCAg ICAgICAgICBleGl0KDEpOwogICA5NTkgICAgICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQK KGludCkgJDEzID0gMgoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTUxYTIgenNoLTUuMi1k ZXYtMmB6YWxsb2Moc2l6ZT0yNTYpICsgMTQ2IGF0IG1lbS5jOjk2MAogICA5NTcgICAgICAgICAg emVycigiZmF0YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkiKTsKICAgOTU4ICAgICAgICAgIGV4aXQo MSk7CiAgIDk1OSAgICAgIH0KLT4gOTYwICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDk2MQog ICA5NjIgICAgICByZXR1cm4gcHRyOwogICA5NjMgIH0KKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxl ZAooaW50KSAkMTQgPSAxCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2MDJmMSB6c2gtNS4y LWRldi0yYHpjb250ZXh0X3NhdmVfcGFydGlhbChwYXJ0cz03KSArIDI3MyBhdCBjb250ZXh0LmM6 NzMKICAgNzAgICAgICAgY3MtPm5leHQgPSBjc3RhY2s7CiAgIDcxICAgICAgIGNzdGFjayA9IGNz OwogICA3MgotPiA3MyAgICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgNzQgICB9CiAgIDc1CiAg IDc2ICAgLyogc2F2ZSBjb250ZXh0IGluIGZ1bGwgKi8KKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxl ZAooaW50KSAkMTUgPSAwCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY5MDk3NCB6c2gtNS4y LWRldi0yYGlucHV0c2V0bGluZShzdHI9ImZ1biIsIGZsYWdzPTY0KSArIDM2IGF0IGlucHV0LmM6 Mzg2CiAgIDM4MyAgewogICAzODQgICAgICBxdWV1ZV9zaWduYWxzKCk7CiAgIDM4NQotPiAzODYg ICAgICBpZiAoKGluYnVmZmxhZ3MgJiBJTlBfRlJFRSkgJiYgaW5idWYpIHsKICAgMzg3ICAgICAg ICAgIGZyZWUoaW5idWYpOwogICAzODggICAgICB9CiAgIDM4OSAgICAgIGluYnVmID0gaW5idWZw dHIgPSBzdHI7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDE2ID0gMQoKICAgIGZy YW1lICMwOiAweDAwMDAwMDAxMGVmOTBhMzMgenNoLTUuMi1kZXYtMmBpbnB1dHNldGxpbmUoc3Ry PSJmdW4iLCBmbGFncz02NCkgKyAyMjcgYXQgaW5wdXQuYzo0MDQKICAgNDAxICAgICAgICAgIGlu YnVmY3QgPSBpbmJ1ZmxlZnQ7CiAgIDQwMiAgICAgIGluYnVmZmxhZ3MgPSBmbGFnczsKICAgNDAz Ci0+IDQwNCAgICAgIHVucXVldWVfc2lnbmFscygpOwogICA0MDUgIH0KICAgNDA2CihsbGRiKSBw IHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDE3ID0gMAoKICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEw ZWZiZTllZCB6c2gtNS4yLWRldi0yYGluaXRfcGFyc2UgKyAyOSBhdCBwYXJzZS5jOjQ2OQogICA0 NjYgIHsKICAgNDY3ICAgICAgcXVldWVfc2lnbmFscygpOwogICA0NjgKLT4gNDY5ICAgICAgaWYg KGVjYnVmKSB6ZnJlZShlY2J1ZiwgZWNsZW4pOwogICA0NzAKICAgNDcxICAgICAgZWNidWYgPSAo V29yZGNvZGUpIHphbGxvYygoZWNsZW4gPSBFQ19JTklUX1NJWkUpICogc2l6ZW9mKHdvcmRjb2Rl KSk7CiAgIDQ3MiAgICAgIGVjdXNlZCA9IDA7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGlu dCkgJDE4ID0gMQoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTUxM2QgenNoLTUuMi1kZXYt MmB6YWxsb2Moc2l6ZT0xMDI0KSArIDQ1IGF0IG1lbS5jOjk1NgogICA5NTMgICAgICBpZiAoIXNp emUpCiAgIDk1NCAgICAgICAgICBzaXplID0gMTsKICAgOTU1ICAgICAgcXVldWVfc2lnbmFscygp OwotPiA5NTYgICAgICBpZiAoIShwdHIgPSAodm9pZCAqKSBtYWxsb2Moc2l6ZSkpKSB7CiAgIDk1 NyAgICAgICAgICB6ZXJyKCJmYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSIpOwogICA5NTggICAg ICAgICAgZXhpdCgxKTsKICAgOTU5ICAgICAgfQoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihp bnQpICQxOSA9IDIKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1MWEyIHpzaC01LjItZGV2 LTJgemFsbG9jKHNpemU9MTAyNCkgKyAxNDYgYXQgbWVtLmM6OTYwCiAgIDk1NyAgICAgICAgICB6 ZXJyKCJmYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSIpOwogICA5NTggICAgICAgICAgZXhpdCgx KTsKICAgOTU5ICAgICAgfQotPiA5NjAgICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgOTYxCiAg IDk2MiAgICAgIHJldHVybiBwdHI7CiAgIDk2MyAgfQoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVk CihpbnQpICQyMCA9IDEKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmJlYWJiIHpzaC01LjIt ZGV2LTJgaW5pdF9wYXJzZSArIDIzNSBhdCBwYXJzZS5jOjQ4MAogICA0NzcKICAgNDc4ICAgICAg aW5pdF9wYXJzZV9zdGF0dXMoKTsKICAgNDc5Ci0+IDQ4MCAgICAgIHVucXVldWVfc2lnbmFscygp OwogICA0ODEgIH0KICAgNDgyCiAgIDQ4MyAgLyogQnVpbGQgZXByb2cuICovCihsbGRiKSBwIHF1 ZXVlaW5nX2VuYWJsZWQKKGludCkgJDIxID0gMAoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVm YTVhOTYgenNoLTUuMi1kZXYtMmB6aGFsbG9jKHNpemU9MzIpICsgNTQgYXQgbWVtLmM6NjA0CiAg IDYwMSAgICAgICAqIGJ1dCB3ZSB0aGluayB0aGF0IG5vdGhpbmcgdXBzdHJlYW0gb2YgZmhlYXAg aGFzIG1vcmUgZnJlZSBzcGFjZSwKICAgNjAyICAgICAgICogc28gd2h5IHN0YXJ0IG92ZXIgYXQg aGVhcHMganVzdCBiZWNhdXNlIGZoZWFwIGhhcyB0b28gbGl0dGxlPwogICA2MDMgICAgICAgKi8K LT4gNjA0ICAgICAgZm9yIChoID0gKGZoZWFwID8gZmhlYXAgOiBoZWFwcyk7IGg7IGggPSBoLT5u ZXh0KSB7CiAgIDYwNSAgICAgICAgICBocCA9IGg7CiAgIDYwNiAgICAgICAgICBpZiAoQVJFTkFf U0laRU9GKGgpID49IChuID0gc2l6ZSArIGgtPnVzZWQpKSB7CiAgIDYwNyAgICAgICAgICAgICAg dm9pZCAqcmV0OwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQyMiA9IDEKCiAgICBm cmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1YjU3IHpzaC01LjItZGV2LTJgemhhbGxvYyhzaXplPTMy KSArIDI0NyBhdCBtZW0uYzo2MTEKICAgNjA4CiAgIDYwOSAgICAgICAgICAgICAgaC0+dXNlZCA9 IG47CiAgIDYxMCAgICAgICAgICAgICAgcmV0ID0gYXJlbmEoaCkgKyBuIC0gc2l6ZTsKLT4gNjEx ICAgICAgICAgICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgNjEyICAjaWZkZWYgWlNIX0hFQVBf REVCVUcKICAgNjEzICAgICAgICAgICAgICBsYXN0X2hlYXBfaWQgPSBoLT5oZWFwX2lkOwogICA2 MTQgICAgICAgICAgICAgIGlmIChoZWFwX2RlYnVnX3ZlcmJvc2l0eSAmIEhEVl9BTExPQykgewoo bGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQyMyA9IDAKCiAgICBmcmFtZSAjMDogMHgw MDAwMDAwMTBlZmE1YTk2IHpzaC01LjItZGV2LTJgemhhbGxvYyhzaXplPTgpICsgNTQgYXQgbWVt LmM6NjA0CiAgIDYwMSAgICAgICAqIGJ1dCB3ZSB0aGluayB0aGF0IG5vdGhpbmcgdXBzdHJlYW0g b2YgZmhlYXAgaGFzIG1vcmUgZnJlZSBzcGFjZSwKICAgNjAyICAgICAgICogc28gd2h5IHN0YXJ0 IG92ZXIgYXQgaGVhcHMganVzdCBiZWNhdXNlIGZoZWFwIGhhcyB0b28gbGl0dGxlPwogICA2MDMg ICAgICAgKi8KLT4gNjA0ICAgICAgZm9yIChoID0gKGZoZWFwID8gZmhlYXAgOiBoZWFwcyk7IGg7 IGggPSBoLT5uZXh0KSB7CiAgIDYwNSAgICAgICAgICBocCA9IGg7CiAgIDYwNiAgICAgICAgICBp ZiAoQVJFTkFfU0laRU9GKGgpID49IChuID0gc2l6ZSArIGgtPnVzZWQpKSB7CiAgIDYwNyAgICAg ICAgICAgICAgdm9pZCAqcmV0OwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQyNCA9 IDEKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1YjU3IHpzaC01LjItZGV2LTJgemhhbGxv YyhzaXplPTgpICsgMjQ3IGF0IG1lbS5jOjYxMQogICA2MDgKICAgNjA5ICAgICAgICAgICAgICBo LT51c2VkID0gbjsKICAgNjEwICAgICAgICAgICAgICByZXQgPSBhcmVuYShoKSArIG4gLSBzaXpl OwotPiA2MTEgICAgICAgICAgICAgIHVucXVldWVfc2lnbmFscygpOwogICA2MTIgICNpZmRlZiBa U0hfSEVBUF9ERUJVRwogICA2MTMgICAgICAgICAgICAgIGxhc3RfaGVhcF9pZCA9IGgtPmhlYXBf aWQ7CiAgIDYxNCAgICAgICAgICAgICAgaWYgKGhlYXBfZGVidWdfdmVyYm9zaXR5ICYgSERWX0FM TE9DKSB7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDI1ID0gMAoKICAgIGZyYW1l ICMwOiAweDAwMDAwMDAxMGVmYmVmOGIgenNoLTUuMi1kZXYtMmBibGRfZXByb2coaGVhcD0xKSAr IDI3IGF0IHBhcnNlLmM6NTA1CiAgIDUwMgogICA1MDMgICAgICBxdWV1ZV9zaWduYWxzKCk7CiAg IDUwNAotPiA1MDUgICAgICBlY2FkZChXQ0JfRU5EKCkpOwogICA1MDYKICAgNTA3ICAgICAgcmV0 ID0gaGVhcCA/IChFcHJvZykgemhhbGxvYyhzaXplb2YoKnJldCkpIDogKEVwcm9nKSB6YWxsb2Mo c2l6ZW9mKCpyZXQpKTsKICAgNTA4ICAgICAgcmV0LT5sZW4gPSAoKGVjbnBhdHMgKiBzaXplb2Yo UGF0cHJvZykpICsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkMjYgPSAxCgogICAg ZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNWE5NiB6c2gtNS4yLWRldi0yYHpoYWxsb2Moc2l6ZT01 NikgKyA1NCBhdCBtZW0uYzo2MDQKICAgNjAxICAgICAgICogYnV0IHdlIHRoaW5rIHRoYXQgbm90 aGluZyB1cHN0cmVhbSBvZiBmaGVhcCBoYXMgbW9yZSBmcmVlIHNwYWNlLAogICA2MDIgICAgICAg KiBzbyB3aHkgc3RhcnQgb3ZlciBhdCBoZWFwcyBqdXN0IGJlY2F1c2UgZmhlYXAgaGFzIHRvbyBs aXR0bGU/CiAgIDYwMyAgICAgICAqLwotPiA2MDQgICAgICBmb3IgKGggPSAoZmhlYXAgPyBmaGVh cCA6IGhlYXBzKTsgaDsgaCA9IGgtPm5leHQpIHsKICAgNjA1ICAgICAgICAgIGhwID0gaDsKICAg NjA2ICAgICAgICAgIGlmIChBUkVOQV9TSVpFT0YoaCkgPj0gKG4gPSBzaXplICsgaC0+dXNlZCkp IHsKICAgNjA3ICAgICAgICAgICAgICB2b2lkICpyZXQ7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJs ZWQKKGludCkgJDI3ID0gMgoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTViNTcgenNoLTUu Mi1kZXYtMmB6aGFsbG9jKHNpemU9NTYpICsgMjQ3IGF0IG1lbS5jOjYxMQogICA2MDgKICAgNjA5 ICAgICAgICAgICAgICBoLT51c2VkID0gbjsKICAgNjEwICAgICAgICAgICAgICByZXQgPSBhcmVu YShoKSArIG4gLSBzaXplOwotPiA2MTEgICAgICAgICAgICAgIHVucXVldWVfc2lnbmFscygpOwog ICA2MTIgICNpZmRlZiBaU0hfSEVBUF9ERUJVRwogICA2MTMgICAgICAgICAgICAgIGxhc3RfaGVh cF9pZCA9IGgtPmhlYXBfaWQ7CiAgIDYxNCAgICAgICAgICAgICAgaWYgKGhlYXBfZGVidWdfdmVy Ym9zaXR5ICYgSERWX0FMTE9DKSB7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDI4 ID0gMQoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTVhOTYgenNoLTUuMi1kZXYtMmB6aGFs bG9jKHNpemU9MjQpICsgNTQgYXQgbWVtLmM6NjA0CiAgIDYwMSAgICAgICAqIGJ1dCB3ZSB0aGlu ayB0aGF0IG5vdGhpbmcgdXBzdHJlYW0gb2YgZmhlYXAgaGFzIG1vcmUgZnJlZSBzcGFjZSwKICAg NjAyICAgICAgICogc28gd2h5IHN0YXJ0IG92ZXIgYXQgaGVhcHMganVzdCBiZWNhdXNlIGZoZWFw IGhhcyB0b28gbGl0dGxlPwogICA2MDMgICAgICAgKi8KLT4gNjA0ICAgICAgZm9yIChoID0gKGZo ZWFwID8gZmhlYXAgOiBoZWFwcyk7IGg7IGggPSBoLT5uZXh0KSB7CiAgIDYwNSAgICAgICAgICBo cCA9IGg7CiAgIDYwNiAgICAgICAgICBpZiAoQVJFTkFfU0laRU9GKGgpID49IChuID0gc2l6ZSAr IGgtPnVzZWQpKSB7CiAgIDYwNyAgICAgICAgICAgICAgdm9pZCAqcmV0OwoobGxkYikgcCBxdWV1 ZWluZ19lbmFibGVkCihpbnQpICQyOSA9IDIKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1 YjU3IHpzaC01LjItZGV2LTJgemhhbGxvYyhzaXplPTI0KSArIDI0NyBhdCBtZW0uYzo2MTEKICAg NjA4CiAgIDYwOSAgICAgICAgICAgICAgaC0+dXNlZCA9IG47CiAgIDYxMCAgICAgICAgICAgICAg cmV0ID0gYXJlbmEoaCkgKyBuIC0gc2l6ZTsKLT4gNjExICAgICAgICAgICAgICB1bnF1ZXVlX3Np Z25hbHMoKTsKICAgNjEyICAjaWZkZWYgWlNIX0hFQVBfREVCVUcKICAgNjEzICAgICAgICAgICAg ICBsYXN0X2hlYXBfaWQgPSBoLT5oZWFwX2lkOwogICA2MTQgICAgICAgICAgICAgIGlmIChoZWFw X2RlYnVnX3ZlcmJvc2l0eSAmIEhEVl9BTExPQykgewoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVk CihpbnQpICQzMCA9IDEKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmJmMWJjIHpzaC01LjIt ZGV2LTJgYmxkX2Vwcm9nKGhlYXA9MSkgKyA1ODggYXQgcGFyc2UuYzo1MjgKICAgNTI1ICAgICAg emZyZWUoZWNidWYsIGVjbGVuKTsKICAgNTI2ICAgICAgZWNidWYgPSBOVUxMOwogICA1MjcKLT4g NTI4ICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDUyOQogICA1MzAgICAgICByZXR1cm4gcmV0 OwogICA1MzEgIH0KKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkMzEgPSAwCgogICAg ZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY4MTA2ZCB6c2gtNS4yLWRldi0yYGhlbmQocHJvZz0weDAw MDAwMDAwMDAwMDAwMDApICsgMTI1IGF0IGhpc3QuYzoxMzk1CiAgIDEzOTIgICAgIERQVVRTKHN0 b3BoaXN0ICE9IDIgJiYgIShpbmJ1ZmZsYWdzICYgSU5QX0FMSUFTKSAmJiAhY2hsaW5lLAogICAx MzkzICAgICAgICAgICAiQlVHOiBjaGxpbmUgaXMgTlVMTCBpbiBoZW5kKCkiKTsKICAgMTM5NCAg ICAgcXVldWVfc2lnbmFscygpOwotPiAxMzk1ICAgICBpZiAoaGlzdGRvbmUgJiBISVNURkxBR19T RVRUWSkKICAgMTM5NiAgICAgICAgIHNldHR5aW5mbygmc2h0dHlpbmZvKTsKICAgMTM5NyAgICAg aWYgKCEoaGlzdGFjdGl2ZSAmIEhBX05PSU5DKSkKICAgMTM5OCAgICAgICAgIHVubGlua2N1cmxp bmUoKTsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkMzIgPSAxCgogICAgZnJhbWUg IzA6IDB4MDAwMDAwMDEwZWY4MTE1OCB6c2gtNS4yLWRldi0yYGhlbmQocHJvZz0weDAwMDAwMDAw MDAwMDAwMDApICsgMzYwIGF0IGhpc3QuYzoxNDA1CiAgIDE0MDIgICAgICAgICBjaGxpbmUgPSBo cHRyID0gTlVMTDsKICAgMTQwMyAgICAgICAgIGNod29yZHMgPSBOVUxMOwogICAxNDA0ICAgICAg ICAgaGlzdGFjdGl2ZSA9IDA7Ci0+IDE0MDUgICAgICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAg MTQwNiAgICAgICAgIHJldHVybiAxOwogICAxNDA3ICAgICB9CiAgIDE0MDggICAgIGlmIChoaXN0 X2lnbm9yZV9hbGxfZHVwcyAhPSBpc3NldChISVNUSUdOT1JFQUxMRFVQUykKKGxsZGIpIHAgcXVl dWVpbmdfZW5hYmxlZAooaW50KSAkMzMgPSAwCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2 MDNmNSB6c2gtNS4yLWRldi0yYHpjb250ZXh0X3Jlc3RvcmVfcGFydGlhbChwYXJ0cz03KSArIDY5 IGF0IGNvbnRleHQuYzo5NgogICA5MyAgICAgICBEUFVUUyghY3N0YWNrLCAiQlVHOiB6Y29udGV4 dF9yZXN0b3JlKCkgd2l0aG91dCB6Y29udGV4dF9zYXZlKCkiKTsKICAgOTQKICAgOTUgICAgICAg cXVldWVfc2lnbmFscygpOwotPiA5NiAgICAgICBjc3RhY2sgPSBjc3RhY2stPm5leHQ7CiAgIDk3 CiAgIDk4ICAgICAgIGlmIChwYXJ0cyAmIFpDT05URVhUX0hJU1QpIHsKICAgOTkgICAgICAgICAg IGhpc3RfY29udGV4dF9yZXN0b3JlKCZjcy0+aGlzdF9zdGFjaywgIWNzdGFjayk7CihsbGRiKSBw IHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDM0ID0gMQoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAx MGVmNjA0ZGUgenNoLTUuMi1kZXYtMmB6Y29udGV4dF9yZXN0b3JlX3BhcnRpYWwocGFydHM9Nykg KyAzMDIgYXQgY29udGV4dC5jOjExMAogICAxMDcKICAgMTA4ICAgICAgZnJlZShjcyk7CiAgIDEw OQotPiAxMTAgICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgMTExICB9CiAgIDExMgogICAxMTMg IC8qIHJlc3RvcmUgZnVsbCBjb250ZXh0ICovCihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGlu dCkgJDM1ID0gMAoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmNjE3MjcgenNoLTUuMi1kZXYt MmBleGVjbGlzdChzdGF0ZT0weDAwMDA3ZmZmNTBjYjUxZjAsIGRvbnRfY2hhbmdlX2pvYj0wLCBl eGl0aW5nPTApICsgNTUgYXQgZXhlYy5jOjEyMDUKICAgMTIwMgogICAxMjAzICAgICBxdWV1ZV9z aWduYWxzKCk7CiAgIDEyMDQKLT4gMTIwNSAgICAgY2ogPSB0aGlzam9iOwogICAxMjA2ICAgICBv bGRfcGxpbmVfbGV2ZWwgPSBwbGluZV9sZXZlbDsKICAgMTIwNyAgICAgb2xkX2xpc3RfcGlwZSA9 IGxpc3RfcGlwZTsKICAgMTIwOCAgICAgb2xkX2xpc3RfcGlwZV9qb2IgPSBsaXN0X3BpcGVfam9i OwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQzNiA9IDEKCiAgICBmcmFtZSAjMDog MHgwMDAwMDAwMTBlZjYyODkyIHpzaC01LjItZGV2LTJgZXhlY3BsaW5lKHN0YXRlPTB4MDAwMDdm ZmY1MGNiNTFmMCwgc2xjb2RlPTMwNzQsIGhvdz0xOCwgbGFzdDE9MCkgKyAxOTQgYXQgZXhlYy5j OjE1MTQKICAgMTUxMSAgICAgICovCiAgIDE1MTIgICAgIHF1ZXVlX3NpZ25hbHMoKTsKICAgMTUx MwotPiAxNTE0ICAgICBwaiA9IHRoaXNqb2I7CiAgIDE1MTUgICAgIGlwaXBlWzBdID0gaXBpcGVb MV0gPSBvcGlwZVswXSA9IG9waXBlWzFdID0gMDsKICAgMTUxNiAgICAgY2hpbGRfYmxvY2soKTsK ICAgMTUxNwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQzNyA9IDIKCiAgICBmcmFt ZSAjMDogMHgwMDAwMDAwMTBlZmE1YTk2IHpzaC01LjItZGV2LTJgemhhbGxvYyhzaXplPTQ4KSAr IDU0IGF0IG1lbS5jOjYwNAogICA2MDEgICAgICAgKiBidXQgd2UgdGhpbmsgdGhhdCBub3RoaW5n IHVwc3RyZWFtIG9mIGZoZWFwIGhhcyBtb3JlIGZyZWUgc3BhY2UsCiAgIDYwMiAgICAgICAqIHNv IHdoeSBzdGFydCBvdmVyIGF0IGhlYXBzIGp1c3QgYmVjYXVzZSBmaGVhcCBoYXMgdG9vIGxpdHRs ZT8KICAgNjAzICAgICAgICovCi0+IDYwNCAgICAgIGZvciAoaCA9IChmaGVhcCA/IGZoZWFwIDog aGVhcHMpOyBoOyBoID0gaC0+bmV4dCkgewogICA2MDUgICAgICAgICAgaHAgPSBoOwogICA2MDYg ICAgICAgICAgaWYgKEFSRU5BX1NJWkVPRihoKSA+PSAobiA9IHNpemUgKyBoLT51c2VkKSkgewog ICA2MDcgICAgICAgICAgICAgIHZvaWQgKnJldDsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAoo aW50KSAkMzggPSAzCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNWI1NyB6c2gtNS4yLWRl di0yYHpoYWxsb2Moc2l6ZT00OCkgKyAyNDcgYXQgbWVtLmM6NjExCiAgIDYwOAogICA2MDkgICAg ICAgICAgICAgIGgtPnVzZWQgPSBuOwogICA2MTAgICAgICAgICAgICAgIHJldCA9IGFyZW5hKGgp ICsgbiAtIHNpemU7Ci0+IDYxMSAgICAgICAgICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDYx MiAgI2lmZGVmIFpTSF9IRUFQX0RFQlVHCiAgIDYxMyAgICAgICAgICAgICAgbGFzdF9oZWFwX2lk ID0gaC0+aGVhcF9pZDsKICAgNjE0ICAgICAgICAgICAgICBpZiAoaGVhcF9kZWJ1Z192ZXJib3Np dHkgJiBIRFZfQUxMT0MpIHsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkMzkgPSAy CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNWE5NiB6c2gtNS4yLWRldi0yYHpoYWxsb2Mo c2l6ZT04KSArIDU0IGF0IG1lbS5jOjYwNAogICA2MDEgICAgICAgKiBidXQgd2UgdGhpbmsgdGhh dCBub3RoaW5nIHVwc3RyZWFtIG9mIGZoZWFwIGhhcyBtb3JlIGZyZWUgc3BhY2UsCiAgIDYwMiAg ICAgICAqIHNvIHdoeSBzdGFydCBvdmVyIGF0IGhlYXBzIGp1c3QgYmVjYXVzZSBmaGVhcCBoYXMg dG9vIGxpdHRsZT8KICAgNjAzICAgICAgICovCi0+IDYwNCAgICAgIGZvciAoaCA9IChmaGVhcCA/ IGZoZWFwIDogaGVhcHMpOyBoOyBoID0gaC0+bmV4dCkgewogICA2MDUgICAgICAgICAgaHAgPSBo OwogICA2MDYgICAgICAgICAgaWYgKEFSRU5BX1NJWkVPRihoKSA+PSAobiA9IHNpemUgKyBoLT51 c2VkKSkgewogICA2MDcgICAgICAgICAgICAgIHZvaWQgKnJldDsKKGxsZGIpIHAgcXVldWVpbmdf ZW5hYmxlZAooaW50KSAkNDAgPSAzCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNWI1NyB6 c2gtNS4yLWRldi0yYHpoYWxsb2Moc2l6ZT04KSArIDI0NyBhdCBtZW0uYzo2MTEKICAgNjA4CiAg IDYwOSAgICAgICAgICAgICAgaC0+dXNlZCA9IG47CiAgIDYxMCAgICAgICAgICAgICAgcmV0ID0g YXJlbmEoaCkgKyBuIC0gc2l6ZTsKLT4gNjExICAgICAgICAgICAgICB1bnF1ZXVlX3NpZ25hbHMo KTsKICAgNjEyICAjaWZkZWYgWlNIX0hFQVBfREVCVUcKICAgNjEzICAgICAgICAgICAgICBsYXN0 X2hlYXBfaWQgPSBoLT5oZWFwX2lkOwogICA2MTQgICAgICAgICAgICAgIGlmIChoZWFwX2RlYnVn X3ZlcmJvc2l0eSAmIEhEVl9BTExPQykgewoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQp ICQ0MSA9IDIKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZjYzZGFhIHpzaC01LjItZGV2LTJg c2V0dW5kZXJzY29yZShzdHI9ImZ1biIpICsgMjYgYXQgZXhlYy5jOjI0NjgKICAgMjQ2NSBzZXR1 bmRlcnNjb3JlKGNoYXIgKnN0cikKICAgMjQ2NiB7CiAgIDI0NjcgICAgIHF1ZXVlX3NpZ25hbHMo KTsKLT4gMjQ2OCAgICAgaWYgKHN0ciAmJiAqc3RyKSB7CiAgIDI0NjkgICAgICAgICBpbnQgbCA9 IHN0cmxlbihzdHIpICsgMSwgbmwgPSAobCArIDMxKSAmIH4zMTsKICAgMjQ3MAogICAyNDcxICAg ICAgICAgaWYgKG5sID4gdW5kZXJzY29yZWxlbiB8fCAodW5kZXJzY29yZWxlbiAtIG5sKSA+IDY0 KSB7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDQyID0gMwoKICAgIGZyYW1lICMw OiAweDAwMDAwMDAxMGVmNjNmMTUgenNoLTUuMi1kZXYtMmBzZXR1bmRlcnNjb3JlKHN0cj0iZnVu IikgKyAzODkgYXQgZXhlYy5jOjI0ODUKICAgMjQ4MiAgICAgICAgICp6dW5kZXJzY29yZSA9ICdc MCc7CiAgIDI0ODMgICAgICAgICB1bmRlcnNjb3JldXNlZCA9IDE7CiAgIDI0ODQgICAgIH0KLT4g MjQ4NSAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDI0ODYgfQogICAyNDg3CihsbGRiKSBwIHF1 ZXVlaW5nX2VuYWJsZWQKKGludCkgJDQzID0gMgoKbWUgIzA6IDB4MDAwMDAwMDEwZWY2OGJiZCB6 c2gtNS4yLWRldi0yYGV4ZWNzaGZ1bmMoc2hmPTB4MDAwMDdmYTdlYzhkMzk0MCwgYXJncz0weDAw MDAwMDAxMGYzOGIxMjApICsgNDEzIGF0IGV4ZWMuYzo0OTkzCiAgIDQ5OTAgICAgICAgICBmZmx1 c2goeHRyZXJyKTsKICAgNDk5MSAgICAgfQogICA0OTkyICAgICBxdWV1ZV9zaWduYWxzKCk7Ci0+ IDQ5OTMgICAgIG9jcyA9IGNtZHN0YWNrOwogICA0OTk0ICAgICBvY3NwID0gY21kc3A7CiAgIDQ5 OTUgICAgIGNtZHN0YWNrID0gKHVuc2lnbmVkIGNoYXIgKikgemFsbG9jKENNRFNUQUNLU1opOwog ICA0OTk2ICAgICBjbWRzcCA9IDA7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDQ0 ID0gMwoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTUxM2QgenNoLTUuMi1kZXYtMmB6YWxs b2Moc2l6ZT0yNTYpICsgNDUgYXQgbWVtLmM6OTU2CiAgIDk1MyAgICAgIGlmICghc2l6ZSkKICAg OTU0ICAgICAgICAgIHNpemUgPSAxOwogICA5NTUgICAgICBxdWV1ZV9zaWduYWxzKCk7Ci0+IDk1 NiAgICAgIGlmICghKHB0ciA9ICh2b2lkICopIG1hbGxvYyhzaXplKSkpIHsKICAgOTU3ICAgICAg ICAgIHplcnIoImZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5Iik7CiAgIDk1OCAgICAgICAgICBl eGl0KDEpOwogICA5NTkgICAgICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDQ1 ID0gNAoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTUxYTIgenNoLTUuMi1kZXYtMmB6YWxs b2Moc2l6ZT0yNTYpICsgMTQ2IGF0IG1lbS5jOjk2MAogICA5NTcgICAgICAgICAgemVycigiZmF0 YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkiKTsKICAgOTU4ICAgICAgICAgIGV4aXQoMSk7CiAgIDk1 OSAgICAgIH0KLT4gOTYwICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDk2MQogICA5NjIgICAg ICByZXR1cm4gcHRyOwogICA5NjMgIH0KKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAk NDYgPSAzCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNWE5NiB6c2gtNS4yLWRldi0yYHpo YWxsb2Moc2l6ZT04KSArIDU0IGF0IG1lbS5jOjYwNAogICA2MDEgICAgICAgKiBidXQgd2UgdGhp bmsgdGhhdCBub3RoaW5nIHVwc3RyZWFtIG9mIGZoZWFwIGhhcyBtb3JlIGZyZWUgc3BhY2UsCiAg IDYwMiAgICAgICAqIHNvIHdoeSBzdGFydCBvdmVyIGF0IGhlYXBzIGp1c3QgYmVjYXVzZSBmaGVh cCBoYXMgdG9vIGxpdHRsZT8KICAgNjAzICAgICAgICovCi0+IDYwNCAgICAgIGZvciAoaCA9IChm aGVhcCA/IGZoZWFwIDogaGVhcHMpOyBoOyBoID0gaC0+bmV4dCkgewogICA2MDUgICAgICAgICAg aHAgPSBoOwogICA2MDYgICAgICAgICAgaWYgKEFSRU5BX1NJWkVPRihoKSA+PSAobiA9IHNpemUg KyBoLT51c2VkKSkgewogICA2MDcgICAgICAgICAgICAgIHZvaWQgKnJldDsKKGxsZGIpIHAgcXVl dWVpbmdfZW5hYmxlZAooaW50KSAkNDcgPSA0CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZh NWI1NyB6c2gtNS4yLWRldi0yYHpoYWxsb2Moc2l6ZT04KSArIDI0NyBhdCBtZW0uYzo2MTEKICAg NjA4CiAgIDYwOSAgICAgICAgICAgICAgaC0+dXNlZCA9IG47CiAgIDYxMCAgICAgICAgICAgICAg cmV0ID0gYXJlbmEoaCkgKyBuIC0gc2l6ZTsKLT4gNjExICAgICAgICAgICAgICB1bnF1ZXVlX3Np Z25hbHMoKTsKICAgNjEyICAjaWZkZWYgWlNIX0hFQVBfREVCVUcKICAgNjEzICAgICAgICAgICAg ICBsYXN0X2hlYXBfaWQgPSBoLT5oZWFwX2lkOwogICA2MTQgICAgICAgICAgICAgIGlmIChoZWFw X2RlYnVnX3ZlcmJvc2l0eSAmIEhEVl9BTExPQykgewoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVk CihpbnQpICQ0OCA9IDMKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZjY2N2E3IHpzaC01LjIt ZGV2LTJgZG9zaGZ1bmMoc2hmdW5jPTB4MDAwMDdmYTdlYzhkMzk0MCwgZG9zaGFyZ3M9MHgwMDAw MDAwMTBmMzhiMTIwLCBub3JldHVybnZhbD0wKSArIDE1MSBhdCBleGVjLmM6NTIyMQogICA1MjE4 CiAgIDUyMTkgICAgIHF1ZXVlX3NpZ25hbHMoKTsgICAgLyogTG90cyBvZiBtZW1vcnkgYW5kIGds b2JhbCBzdGF0ZSBjaGFuZ2VzIGNvbWluZyAqLwogICA1MjIwCi0+IDUyMjEgICAgIE5FV0hFQVBT KGZ1bmNoZWFwKSB7CiAgIDUyMjIgICAgICAgICBvYXJndjAgPSBOVUxMOwogICA1MjIzICAgICAg ICAgb2JyZWFrcyA9IGJyZWFrczsKICAgNTIyNCAgICAgICAgIG9jb250ZmxhZyA9IGNvbnRmbGFn OwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ0OSA9IDQKCiAgICBmcmFtZSAjMDog MHgwMDAwMDAwMTBlZmE0YmU2IHpzaC01LjItZGV2LTJgbmV3X2hlYXBzICsgMjIgYXQgbWVtLmM6 MTk5CiAgIDE5NiAgICAgIEhlYXAgaDsKICAgMTk3CiAgIDE5OCAgICAgIHF1ZXVlX3NpZ25hbHMo KTsKLT4gMTk5ICAgICAgaCA9IGhlYXBzOwogICAyMDAKICAgMjAxICAgICAgZmhlYXAgPSBoZWFw cyA9IE5VTEw7CiAgIDIwMiAgICAgIHVucXVldWVfc2lnbmFscygpOwoobGxkYikgcCBxdWV1ZWlu Z19lbmFibGVkCihpbnQpICQ1MCA9IDUKKGxsZGIpCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEw ZWZhNGMzOCB6c2gtNS4yLWRldi0yYG5ld19oZWFwcyArIDEwNCBhdCBtZW0uYzoyMDIKICAgMTk5 ICAgICAgaCA9IGhlYXBzOwogICAyMDAKICAgMjAxICAgICAgZmhlYXAgPSBoZWFwcyA9IE5VTEw7 Ci0+IDIwMiAgICAgIHVucXVldWVfc2lnbmFscygpOwogICAyMDMKICAgMjA0ICAjaWZkZWYgWlNI X0hFQVBfREVCVUcKICAgMjA1ICAgICAgaWYgKGhlYXBfZGVidWdfdmVyYm9zaXR5ICYgSERWX05F VykgewoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ1MSA9IDQKCiAgICBmcmFtZSAj MDogMHgwMDAwMDAwMTBlZmE1MTNkIHpzaC01LjItZGV2LTJgemFsbG9jKHNpemU9MTYpICsgNDUg YXQgbWVtLmM6OTU2CiAgIDk1MyAgICAgIGlmICghc2l6ZSkKICAgOTU0ICAgICAgICAgIHNpemUg PSAxOwogICA5NTUgICAgICBxdWV1ZV9zaWduYWxzKCk7Ci0+IDk1NiAgICAgIGlmICghKHB0ciA9 ICh2b2lkICopIG1hbGxvYyhzaXplKSkpIHsKICAgOTU3ICAgICAgICAgIHplcnIoImZhdGFsIGVy cm9yOiBvdXQgb2YgbWVtb3J5Iik7CiAgIDk1OCAgICAgICAgICBleGl0KDEpOwogICA5NTkgICAg ICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDUyID0gNQoKICAgIGZyYW1lICMw OiAweDAwMDAwMDAxMGVmYTUxYTIgenNoLTUuMi1kZXYtMmB6YWxsb2Moc2l6ZT0xNikgKyAxNDYg YXQgbWVtLmM6OTYwCiAgIDk1NyAgICAgICAgICB6ZXJyKCJmYXRhbCBlcnJvcjogb3V0IG9mIG1l bW9yeSIpOwogICA5NTggICAgICAgICAgZXhpdCgxKTsKICAgOTU5ICAgICAgfQotPiA5NjAgICAg ICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgOTYxCiAgIDk2MiAgICAgIHJldHVybiBwdHI7CiAgIDk2 MyAgfQoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ1MyA9IDQKCiAgICBmcmFtZSAj MDogMHgwMDAwMDAwMTBlZmE1YTk2IHpzaC01LjItZGV2LTJgemhhbGxvYyhzaXplPTgpICsgNTQg YXQgbWVtLmM6NjA0CiAgIDYwMSAgICAgICAqIGJ1dCB3ZSB0aGluayB0aGF0IG5vdGhpbmcgdXBz dHJlYW0gb2YgZmhlYXAgaGFzIG1vcmUgZnJlZSBzcGFjZSwKICAgNjAyICAgICAgICogc28gd2h5 IHN0YXJ0IG92ZXIgYXQgaGVhcHMganVzdCBiZWNhdXNlIGZoZWFwIGhhcyB0b28gbGl0dGxlPwog ICA2MDMgICAgICAgKi8KLT4gNjA0ICAgICAgZm9yIChoID0gKGZoZWFwID8gZmhlYXAgOiBoZWFw cyk7IGg7IGggPSBoLT5uZXh0KSB7CiAgIDYwNSAgICAgICAgICBocCA9IGg7CiAgIDYwNiAgICAg ICAgICBpZiAoQVJFTkFfU0laRU9GKGgpID49IChuID0gc2l6ZSArIGgtPnVzZWQpKSB7CiAgIDYw NyAgICAgICAgICAgICAgdm9pZCAqcmV0OwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQp ICQ1NCA9IDUKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1ZDE3IHpzaC01LjItZGV2LTJg emhhbGxvYyhzaXplPTgpICsgNjk1IGF0IG1lbS5jOjY3MgogICA2NjkgICAgICAgICAgICAgIGhl YXBzID0gaDsKICAgNjcwICAgICAgICAgIGZoZWFwID0gaDsKICAgNjcxCi0+IDY3MiAgICAgICAg ICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgNjczICAjaWZkZWYgWlNIX0hFQVBfREVCVUcKICAgNjc0 ICAgICAgICAgIGxhc3RfaGVhcF9pZCA9IGgtPmhlYXBfaWQ7CiAgIDY3NSAgICAgICAgICBpZiAo aGVhcF9kZWJ1Z192ZXJib3NpdHkgJiBIRFZfQUxMT0MpIHsKKGxsZGIpIHAgcXVldWVpbmdfZW5h YmxlZAooaW50KSAkNTUgPSA0CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNjkwZCB6c2gt NS4yLWRldi0yYHpzaGNhbGxvYyhzaXplPTE2KSArIDQ1IGF0IG1lbS5jOjk3NAogICA5NzEgICAg ICBpZiAoIXNpemUpCiAgIDk3MiAgICAgICAgICBzaXplID0gMTsKICAgOTczICAgICAgcXVldWVf c2lnbmFscygpOwotPiA5NzQgICAgICBpZiAoIShwdHIgPSAodm9pZCAqKSBtYWxsb2Moc2l6ZSkp KSB7CiAgIDk3NSAgICAgICAgICB6ZXJyKCJmYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSIpOwog ICA5NzYgICAgICAgICAgZXhpdCgxKTsKICAgOTc3ICAgICAgfQoobGxkYikgcCBxdWV1ZWluZ19l bmFibGVkCihpbnQpICQ1NiA9IDUKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE2OTcyIHpz aC01LjItZGV2LTJgenNoY2FsbG9jKHNpemU9MTYpICsgMTQ2IGF0IG1lbS5jOjk3OAogICA5NzUg ICAgICAgICAgemVycigiZmF0YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkiKTsKICAgOTc2ICAgICAg ICAgIGV4aXQoMSk7CiAgIDk3NyAgICAgIH0KLT4gOTc4ICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7 CiAgIDk3OSAgICAgIG1lbXNldChwdHIsIDAsIHNpemUpOwogICA5ODAKICAgOTgxICAgICAgcmV0 dXJuIHB0cjsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkNTcgPSA0CgogICAgZnJh bWUgIzA6IDB4MDAwMDAwMDEwZWZhNTEzZCB6c2gtNS4yLWRldi0yYHphbGxvYyhzaXplPTQpICsg NDUgYXQgbWVtLmM6OTU2CiAgIDk1MyAgICAgIGlmICghc2l6ZSkKICAgOTU0ICAgICAgICAgIHNp emUgPSAxOwogICA5NTUgICAgICBxdWV1ZV9zaWduYWxzKCk7Ci0+IDk1NiAgICAgIGlmICghKHB0 ciA9ICh2b2lkICopIG1hbGxvYyhzaXplKSkpIHsKICAgOTU3ICAgICAgICAgIHplcnIoImZhdGFs IGVycm9yOiBvdXQgb2YgbWVtb3J5Iik7CiAgIDk1OCAgICAgICAgICBleGl0KDEpOwogICA5NTkg ICAgICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDU4ID0gNQoKICAgIGZyYW1l ICMwOiAweDAwMDAwMDAxMGVmYTUxYTIgenNoLTUuMi1kZXYtMmB6YWxsb2Moc2l6ZT00KSArIDE0 NiBhdCBtZW0uYzo5NjAKICAgOTU3ICAgICAgICAgIHplcnIoImZhdGFsIGVycm9yOiBvdXQgb2Yg bWVtb3J5Iik7CiAgIDk1OCAgICAgICAgICBleGl0KDEpOwogICA5NTkgICAgICB9Ci0+IDk2MCAg ICAgIHVucXVldWVfc2lnbmFscygpOwogICA5NjEKICAgOTYyICAgICAgcmV0dXJuIHB0cjsKICAg OTYzICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDU5ID0gNAoKICAgIGZyYW1l ICMwOiAweDAwMDAwMDAxMGVmYTVhOTYgenNoLTUuMi1kZXYtMmB6aGFsbG9jKHNpemU9OCkgKyA1 NCBhdCBtZW0uYzo2MDQKICAgNjAxICAgICAgICogYnV0IHdlIHRoaW5rIHRoYXQgbm90aGluZyB1 cHN0cmVhbSBvZiBmaGVhcCBoYXMgbW9yZSBmcmVlIHNwYWNlLAogICA2MDIgICAgICAgKiBzbyB3 aHkgc3RhcnQgb3ZlciBhdCBoZWFwcyBqdXN0IGJlY2F1c2UgZmhlYXAgaGFzIHRvbyBsaXR0bGU/ CiAgIDYwMyAgICAgICAqLwotPiA2MDQgICAgICBmb3IgKGggPSAoZmhlYXAgPyBmaGVhcCA6IGhl YXBzKTsgaDsgaCA9IGgtPm5leHQpIHsKICAgNjA1ICAgICAgICAgIGhwID0gaDsKICAgNjA2ICAg ICAgICAgIGlmIChBUkVOQV9TSVpFT0YoaCkgPj0gKG4gPSBzaXplICsgaC0+dXNlZCkpIHsKICAg NjA3ICAgICAgICAgICAgICB2b2lkICpyZXQ7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGlu dCkgJDYwID0gNQoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTViNTcgenNoLTUuMi1kZXYt MmB6aGFsbG9jKHNpemU9OCkgKyAyNDcgYXQgbWVtLmM6NjExCiAgIDYwOAogICA2MDkgICAgICAg ICAgICAgIGgtPnVzZWQgPSBuOwogICA2MTAgICAgICAgICAgICAgIHJldCA9IGFyZW5hKGgpICsg biAtIHNpemU7Ci0+IDYxMSAgICAgICAgICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDYxMiAg I2lmZGVmIFpTSF9IRUFQX0RFQlVHCiAgIDYxMyAgICAgICAgICAgICAgbGFzdF9oZWFwX2lkID0g aC0+aGVhcF9pZDsKICAgNjE0ICAgICAgICAgICAgICBpZiAoaGVhcF9kZWJ1Z192ZXJib3NpdHkg JiBIRFZfQUxMT0MpIHsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkNjEgPSA0Cgog ICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2NzNlYyB6c2gtNS4yLWRldi0yYHJ1bnNoZnVuYyhw cm9nPTB4MDAwMDdmYTdlYzhjM2IwMCwgd3JhcD0weDAwMDAwMDAxMGYzMDYzMDAsIG5hbWU9ImZ1 biIpICsgNDQgYXQgZXhlYy5jOjU0ODgKICAgNTQ4NQogICA1NDg2ICAgICBxdWV1ZV9zaWduYWxz KCk7CiAgIDU0ODcKLT4gNTQ4OCAgICAgb3UgPSB6YWxsb2Mob3V1ID0gdW5kZXJzY29yZXVzZWQp OwogICA1NDg5ICAgICBpZiAob3UpCiAgIDU0OTAgICAgICAgICBtZW1jcHkob3UsIHp1bmRlcnNj b3JlLCB1bmRlcnNjb3JldXNlZCk7CiAgIDU0OTEKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAoo aW50KSAkNjIgPSA1CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNTEzZCB6c2gtNS4yLWRl di0yYHphbGxvYyhzaXplPTQpICsgNDUgYXQgbWVtLmM6OTU2CiAgIDk1MyAgICAgIGlmICghc2l6 ZSkKICAgOTU0ICAgICAgICAgIHNpemUgPSAxOwogICA5NTUgICAgICBxdWV1ZV9zaWduYWxzKCk7 Ci0+IDk1NiAgICAgIGlmICghKHB0ciA9ICh2b2lkICopIG1hbGxvYyhzaXplKSkpIHsKICAgOTU3 ICAgICAgICAgIHplcnIoImZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5Iik7CiAgIDk1OCAgICAg ICAgICBleGl0KDEpOwogICA5NTkgICAgICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGlu dCkgJDYzID0gNgoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTUxYTIgenNoLTUuMi1kZXYt MmB6YWxsb2Moc2l6ZT00KSArIDE0NiBhdCBtZW0uYzo5NjAKICAgOTU3ICAgICAgICAgIHplcnIo ImZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5Iik7CiAgIDk1OCAgICAgICAgICBleGl0KDEpOwog ICA5NTkgICAgICB9Ci0+IDk2MCAgICAgIHVucXVldWVfc2lnbmFscygpOwogICA5NjEKICAgOTYy ICAgICAgcmV0dXJuIHB0cjsKICAgOTYzICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGlu dCkgJDY0ID0gNQoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmNjE3MjcgenNoLTUuMi1kZXYt MmBleGVjbGlzdChzdGF0ZT0weDAwMDA3ZmZmNTBjYjQ0MzAsIGRvbnRfY2hhbmdlX2pvYj0xLCBl eGl0aW5nPTApICsgNTUgYXQgZXhlYy5jOjEyMDUKICAgMTIwMgogICAxMjAzICAgICBxdWV1ZV9z aWduYWxzKCk7CiAgIDEyMDQKLT4gMTIwNSAgICAgY2ogPSB0aGlzam9iOwogICAxMjA2ICAgICBv bGRfcGxpbmVfbGV2ZWwgPSBwbGluZV9sZXZlbDsKICAgMTIwNyAgICAgb2xkX2xpc3RfcGlwZSA9 IGxpc3RfcGlwZTsKICAgMTIwOCAgICAgb2xkX2xpc3RfcGlwZV9qb2IgPSBsaXN0X3BpcGVfam9i OwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ2NSA9IDYKCiAgICBmcmFtZSAjMDog MHgwMDAwMDAwMTBlZjYyODkyIHpzaC01LjItZGV2LTJgZXhlY3BsaW5lKHN0YXRlPTB4MDAwMDdm ZmY1MGNiNDQzMCwgc2xjb2RlPTUxMjIsIGhvdz0xOCwgbGFzdDE9MCkgKyAxOTQgYXQgZXhlYy5j OjE1MTQKICAgMTUxMSAgICAgICovCiAgIDE1MTIgICAgIHF1ZXVlX3NpZ25hbHMoKTsKICAgMTUx MwotPiAxNTE0ICAgICBwaiA9IHRoaXNqb2I7CiAgIDE1MTUgICAgIGlwaXBlWzBdID0gaXBpcGVb MV0gPSBvcGlwZVswXSA9IG9waXBlWzFdID0gMDsKICAgMTUxNiAgICAgY2hpbGRfYmxvY2soKTsK ICAgMTUxNwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ2NiA9IDcKCiAgICBmcmFt ZSAjMDogMHgwMDAwMDAwMTBlZmE1YTk2IHpzaC01LjItZGV2LTJgemhhbGxvYyhzaXplPTk2KSAr IDU0IGF0IG1lbS5jOjYwNAogICA2MDEgICAgICAgKiBidXQgd2UgdGhpbmsgdGhhdCBub3RoaW5n IHVwc3RyZWFtIG9mIGZoZWFwIGhhcyBtb3JlIGZyZWUgc3BhY2UsCiAgIDYwMiAgICAgICAqIHNv IHdoeSBzdGFydCBvdmVyIGF0IGhlYXBzIGp1c3QgYmVjYXVzZSBmaGVhcCBoYXMgdG9vIGxpdHRs ZT8KICAgNjAzICAgICAgICovCi0+IDYwNCAgICAgIGZvciAoaCA9IChmaGVhcCA/IGZoZWFwIDog aGVhcHMpOyBoOyBoID0gaC0+bmV4dCkgewogICA2MDUgICAgICAgICAgaHAgPSBoOwogICA2MDYg ICAgICAgICAgaWYgKEFSRU5BX1NJWkVPRihoKSA+PSAobiA9IHNpemUgKyBoLT51c2VkKSkgewog ICA2MDcgICAgICAgICAgICAgIHZvaWQgKnJldDsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAoo aW50KSAkNjcgPSA4CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNWI1NyB6c2gtNS4yLWRl di0yYHpoYWxsb2Moc2l6ZT05NikgKyAyNDcgYXQgbWVtLmM6NjExCiAgIDYwOAogICA2MDkgICAg ICAgICAgICAgIGgtPnVzZWQgPSBuOwogICA2MTAgICAgICAgICAgICAgIHJldCA9IGFyZW5hKGgp ICsgbiAtIHNpemU7Ci0+IDYxMSAgICAgICAgICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDYx MiAgI2lmZGVmIFpTSF9IRUFQX0RFQlVHCiAgIDYxMyAgICAgICAgICAgICAgbGFzdF9oZWFwX2lk ID0gaC0+aGVhcF9pZDsKICAgNjE0ICAgICAgICAgICAgICBpZiAoaGVhcF9kZWJ1Z192ZXJib3Np dHkgJiBIRFZfQUxMT0MpIHsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkNjggPSA3 CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNWE5NiB6c2gtNS4yLWRldi0yYHpoYWxsb2Mo c2l6ZT04KSArIDU0IGF0IG1lbS5jOjYwNAogICA2MDEgICAgICAgKiBidXQgd2UgdGhpbmsgdGhh dCBub3RoaW5nIHVwc3RyZWFtIG9mIGZoZWFwIGhhcyBtb3JlIGZyZWUgc3BhY2UsCiAgIDYwMiAg ICAgICAqIHNvIHdoeSBzdGFydCBvdmVyIGF0IGhlYXBzIGp1c3QgYmVjYXVzZSBmaGVhcCBoYXMg dG9vIGxpdHRsZT8KICAgNjAzICAgICAgICovCi0+IDYwNCAgICAgIGZvciAoaCA9IChmaGVhcCA/ IGZoZWFwIDogaGVhcHMpOyBoOyBoID0gaC0+bmV4dCkgewogICA2MDUgICAgICAgICAgaHAgPSBo OwogICA2MDYgICAgICAgICAgaWYgKEFSRU5BX1NJWkVPRihoKSA+PSAobiA9IHNpemUgKyBoLT51 c2VkKSkgewogICA2MDcgICAgICAgICAgICAgIHZvaWQgKnJldDsKKGxsZGIpIHAgcXVldWVpbmdf ZW5hYmxlZAooaW50KSAkNjkgPSA4CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNWI1NyB6 c2gtNS4yLWRldi0yYHpoYWxsb2Moc2l6ZT04KSArIDI0NyBhdCBtZW0uYzo2MTEKICAgNjA4CiAg IDYwOSAgICAgICAgICAgICAgaC0+dXNlZCA9IG47CiAgIDYxMCAgICAgICAgICAgICAgcmV0ID0g YXJlbmEoaCkgKyBuIC0gc2l6ZTsKLT4gNjExICAgICAgICAgICAgICB1bnF1ZXVlX3NpZ25hbHMo KTsKICAgNjEyICAjaWZkZWYgWlNIX0hFQVBfREVCVUcKICAgNjEzICAgICAgICAgICAgICBsYXN0 X2hlYXBfaWQgPSBoLT5oZWFwX2lkOwogICA2MTQgICAgICAgICAgICAgIGlmIChoZWFwX2RlYnVn X3ZlcmJvc2l0eSAmIEhEVl9BTExPQykgewoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQp ICQ3MCA9IDcKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1YTk2IHpzaC01LjItZGV2LTJg emhhbGxvYyhzaXplPTgpICsgNTQgYXQgbWVtLmM6NjA0CiAgIDYwMSAgICAgICAqIGJ1dCB3ZSB0 aGluayB0aGF0IG5vdGhpbmcgdXBzdHJlYW0gb2YgZmhlYXAgaGFzIG1vcmUgZnJlZSBzcGFjZSwK ICAgNjAyICAgICAgICogc28gd2h5IHN0YXJ0IG92ZXIgYXQgaGVhcHMganVzdCBiZWNhdXNlIGZo ZWFwIGhhcyB0b28gbGl0dGxlPwogICA2MDMgICAgICAgKi8KLT4gNjA0ICAgICAgZm9yIChoID0g KGZoZWFwID8gZmhlYXAgOiBoZWFwcyk7IGg7IGggPSBoLT5uZXh0KSB7CiAgIDYwNSAgICAgICAg ICBocCA9IGg7CiAgIDYwNiAgICAgICAgICBpZiAoQVJFTkFfU0laRU9GKGgpID49IChuID0gc2l6 ZSArIGgtPnVzZWQpKSB7CiAgIDYwNyAgICAgICAgICAgICAgdm9pZCAqcmV0OwoobGxkYikgcCBx dWV1ZWluZ19lbmFibGVkCihpbnQpICQ3MSA9IDgKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBl ZmE1YjU3IHpzaC01LjItZGV2LTJgemhhbGxvYyhzaXplPTgpICsgMjQ3IGF0IG1lbS5jOjYxMQog ICA2MDgKICAgNjA5ICAgICAgICAgICAgICBoLT51c2VkID0gbjsKICAgNjEwICAgICAgICAgICAg ICByZXQgPSBhcmVuYShoKSArIG4gLSBzaXplOwotPiA2MTEgICAgICAgICAgICAgIHVucXVldWVf c2lnbmFscygpOwogICA2MTIgICNpZmRlZiBaU0hfSEVBUF9ERUJVRwogICA2MTMgICAgICAgICAg ICAgIGxhc3RfaGVhcF9pZCA9IGgtPmhlYXBfaWQ7CiAgIDYxNCAgICAgICAgICAgICAgaWYgKGhl YXBfZGVidWdfdmVyYm9zaXR5ICYgSERWX0FMTE9DKSB7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJs ZWQKKGludCkgJDcyID0gNwoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTVhOTYgenNoLTUu Mi1kZXYtMmB6aGFsbG9jKHNpemU9OCkgKyA1NCBhdCBtZW0uYzo2MDQKICAgNjAxICAgICAgICog YnV0IHdlIHRoaW5rIHRoYXQgbm90aGluZyB1cHN0cmVhbSBvZiBmaGVhcCBoYXMgbW9yZSBmcmVl IHNwYWNlLAogICA2MDIgICAgICAgKiBzbyB3aHkgc3RhcnQgb3ZlciBhdCBoZWFwcyBqdXN0IGJl Y2F1c2UgZmhlYXAgaGFzIHRvbyBsaXR0bGU/CiAgIDYwMyAgICAgICAqLwotPiA2MDQgICAgICBm b3IgKGggPSAoZmhlYXAgPyBmaGVhcCA6IGhlYXBzKTsgaDsgaCA9IGgtPm5leHQpIHsKICAgNjA1 ICAgICAgICAgIGhwID0gaDsKICAgNjA2ICAgICAgICAgIGlmIChBUkVOQV9TSVpFT0YoaCkgPj0g KG4gPSBzaXplICsgaC0+dXNlZCkpIHsKICAgNjA3ICAgICAgICAgICAgICB2b2lkICpyZXQ7Cihs bGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDczID0gOAoobGxkYikKCiAgICBmcmFtZSAj MDogMHgwMDAwMDAwMTBlZmE1YjU3IHpzaC01LjItZGV2LTJgemhhbGxvYyhzaXplPTgpICsgMjQ3 IGF0IG1lbS5jOjYxMQogICA2MDgKICAgNjA5ICAgICAgICAgICAgICBoLT51c2VkID0gbjsKICAg NjEwICAgICAgICAgICAgICByZXQgPSBhcmVuYShoKSArIG4gLSBzaXplOwotPiA2MTEgICAgICAg ICAgICAgIHVucXVldWVfc2lnbmFscygpOwogICA2MTIgICNpZmRlZiBaU0hfSEVBUF9ERUJVRwog ICA2MTMgICAgICAgICAgICAgIGxhc3RfaGVhcF9pZCA9IGgtPmhlYXBfaWQ7CiAgIDYxNCAgICAg ICAgICAgICAgaWYgKGhlYXBfZGVidWdfdmVyYm9zaXR5ICYgSERWX0FMTE9DKSB7CihsbGRiKSBw IHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDc0ID0gNwoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAx MGVmNjNkYWEgenNoLTUuMi1kZXYtMmBzZXR1bmRlcnNjb3JlKHN0cj0iZnVuIikgKyAyNiBhdCBl eGVjLmM6MjQ2OAogICAyNDY1IHNldHVuZGVyc2NvcmUoY2hhciAqc3RyKQogICAyNDY2IHsKICAg MjQ2NyAgICAgcXVldWVfc2lnbmFscygpOwotPiAyNDY4ICAgICBpZiAoc3RyICYmICpzdHIpIHsK ICAgMjQ2OSAgICAgICAgIGludCBsID0gc3RybGVuKHN0cikgKyAxLCBubCA9IChsICsgMzEpICYg fjMxOwogICAyNDcwCiAgIDI0NzEgICAgICAgICBpZiAobmwgPiB1bmRlcnNjb3JlbGVuIHx8ICh1 bmRlcnNjb3JlbGVuIC0gbmwpID4gNjQpIHsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50 KSAkNzUgPSA4CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2M2YxNSB6c2gtNS4yLWRldi0y YHNldHVuZGVyc2NvcmUoc3RyPSJmdW4iKSArIDM4OSBhdCBleGVjLmM6MjQ4NQogICAyNDgyICAg ICAgICAgKnp1bmRlcnNjb3JlID0gJ1wwJzsKICAgMjQ4MyAgICAgICAgIHVuZGVyc2NvcmV1c2Vk ID0gMTsKICAgMjQ4NCAgICAgfQotPiAyNDg1ICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgMjQ4 NiB9CiAgIDI0ODcKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkNzYgPSA3CgogICAg ZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2ZTFjNiB6c2gtNS4yLWRldi0yYGV4ZWNjbWQoc3RhdGU9 MHgwMDAwN2ZmZjUwY2I0NDMwLCBpbnB1dD0wLCBvdXRwdXQ9MCwgaG93PTE4LCBsYXN0MT0yKSAr IDE4OTE4IGF0IGV4ZWMuYzozNzgyCiAgIDM3NzkgICAgICAgICAgICAgICAgICAgICB9CiAgIDM3 ODAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cGMgPSBvcGM7CiAgIDM3ODEgICAgICAgICAg ICAgICAgIH0KLT4gMzc4MiAgICAgICAgICAgICAgICAgZG9udF9xdWV1ZV9zaWduYWxzKCk7CiAg IDM3ODMgICAgICAgICAgICAgICAgIGlmICghZXJyZmxhZykKICAgMzc4NCAgICAgICAgICAgICAg ICAgICAgIGxhc3R2YWwgPSBleGVjYnVpbHRpbihhcmdzLCBhc3NpZ25zLCAoQnVpbHRpbikgaG4p OwogICAzNzg1ICAgICAgICAgICAgICAgICBpZiAoZG9fc2F2ZSAmIEJJTkZfQ09NTUFORCkKKGxs ZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkNzcgPSAwCgogICAgZnJhbWUgIzA6IDB4MDAw MDAwMDEwZWZhNWE5NiB6c2gtNS4yLWRldi0yYHpoYWxsb2Moc2l6ZT0yNCkgKyA1NCBhdCBtZW0u Yzo2MDQKICAgNjAxICAgICAgICogYnV0IHdlIHRoaW5rIHRoYXQgbm90aGluZyB1cHN0cmVhbSBv ZiBmaGVhcCBoYXMgbW9yZSBmcmVlIHNwYWNlLAogICA2MDIgICAgICAgKiBzbyB3aHkgc3RhcnQg b3ZlciBhdCBoZWFwcyBqdXN0IGJlY2F1c2UgZmhlYXAgaGFzIHRvbyBsaXR0bGU/CiAgIDYwMyAg ICAgICAqLwotPiA2MDQgICAgICBmb3IgKGggPSAoZmhlYXAgPyBmaGVhcCA6IGhlYXBzKTsgaDsg aCA9IGgtPm5leHQpIHsKICAgNjA1ICAgICAgICAgIGhwID0gaDsKICAgNjA2ICAgICAgICAgIGlm IChBUkVOQV9TSVpFT0YoaCkgPj0gKG4gPSBzaXplICsgaC0+dXNlZCkpIHsKICAgNjA3ICAgICAg ICAgICAgICB2b2lkICpyZXQ7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDc4ID0g MQoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTViNTcgenNoLTUuMi1kZXYtMmB6aGFsbG9j KHNpemU9MjQpICsgMjQ3IGF0IG1lbS5jOjYxMQogICA2MDgKICAgNjA5ICAgICAgICAgICAgICBo LT51c2VkID0gbjsKICAgNjEwICAgICAgICAgICAgICByZXQgPSBhcmVuYShoKSArIG4gLSBzaXpl OwotPiA2MTEgICAgICAgICAgICAgIHVucXVldWVfc2lnbmFscygpOwogICA2MTIgICNpZmRlZiBa U0hfSEVBUF9ERUJVRwogICA2MTMgICAgICAgICAgICAgIGxhc3RfaGVhcF9pZCA9IGgtPmhlYXBf aWQ7CiAgIDYxNCAgICAgICAgICAgICAgaWYgKGhlYXBfZGVidWdfdmVyYm9zaXR5ICYgSERWX0FM TE9DKSB7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDc5ID0gMAoKICAgIGZyYW1l ICMwOiAweDAwMDAwMDAxMGVmYTUxM2QgenNoLTUuMi1kZXYtMmB6YWxsb2Moc2l6ZT0zMikgKyA0 NSBhdCBtZW0uYzo5NTYKICAgOTUzICAgICAgaWYgKCFzaXplKQogICA5NTQgICAgICAgICAgc2l6 ZSA9IDE7CiAgIDk1NSAgICAgIHF1ZXVlX3NpZ25hbHMoKTsKLT4gOTU2ICAgICAgaWYgKCEocHRy ID0gKHZvaWQgKikgbWFsbG9jKHNpemUpKSkgewogICA5NTcgICAgICAgICAgemVycigiZmF0YWwg ZXJyb3I6IG91dCBvZiBtZW1vcnkiKTsKICAgOTU4ICAgICAgICAgIGV4aXQoMSk7CiAgIDk1OSAg ICAgIH0KKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkODAgPSAxCgogICAgZnJhbWUg IzA6IDB4MDAwMDAwMDEwZWZhNTFhMiB6c2gtNS4yLWRldi0yYHphbGxvYyhzaXplPTMyKSArIDE0 NiBhdCBtZW0uYzo5NjAKICAgOTU3ICAgICAgICAgIHplcnIoImZhdGFsIGVycm9yOiBvdXQgb2Yg bWVtb3J5Iik7CiAgIDk1OCAgICAgICAgICBleGl0KDEpOwogICA5NTkgICAgICB9Ci0+IDk2MCAg ICAgIHVucXVldWVfc2lnbmFscygpOwogICA5NjEKICAgOTYyICAgICAgcmV0dXJuIHB0cjsKICAg OTYzICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDgxID0gMAoKICAgIGZyYW1l ICMwOiAweDAwMDAwMDAxMGVmYTUxM2QgenNoLTUuMi1kZXYtMmB6YWxsb2Moc2l6ZT00KSArIDQ1 IGF0IG1lbS5jOjk1NgogICA5NTMgICAgICBpZiAoIXNpemUpCiAgIDk1NCAgICAgICAgICBzaXpl ID0gMTsKICAgOTU1ICAgICAgcXVldWVfc2lnbmFscygpOwotPiA5NTYgICAgICBpZiAoIShwdHIg PSAodm9pZCAqKSBtYWxsb2Moc2l6ZSkpKSB7CiAgIDk1NyAgICAgICAgICB6ZXJyKCJmYXRhbCBl cnJvcjogb3V0IG9mIG1lbW9yeSIpOwogICA5NTggICAgICAgICAgZXhpdCgxKTsKICAgOTU5ICAg ICAgfQoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ4MiA9IDEKCiAgICBmcmFtZSAj MDogMHgwMDAwMDAwMTBlZmE1MWEyIHpzaC01LjItZGV2LTJgemFsbG9jKHNpemU9NCkgKyAxNDYg YXQgbWVtLmM6OTYwCiAgIDk1NyAgICAgICAgICB6ZXJyKCJmYXRhbCBlcnJvcjogb3V0IG9mIG1l bW9yeSIpOwogICA5NTggICAgICAgICAgZXhpdCgxKTsKICAgOTU5ICAgICAgfQotPiA5NjAgICAg ICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgOTYxCiAgIDk2MiAgICAgIHJldHVybiBwdHI7CiAgIDk2 MyAgfQoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ4MyA9IDAKCiAgICBmcmFtZSAj MDogMHgwMDAwMDAwMTBlZmE1MTNkIHpzaC01LjItZGV2LTJgemFsbG9jKHNpemU9MTYpICsgNDUg YXQgbWVtLmM6OTU2CiAgIDk1MyAgICAgIGlmICghc2l6ZSkKICAgOTU0ICAgICAgICAgIHNpemUg PSAxOwogICA5NTUgICAgICBxdWV1ZV9zaWduYWxzKCk7Ci0+IDk1NiAgICAgIGlmICghKHB0ciA9 ICh2b2lkICopIG1hbGxvYyhzaXplKSkpIHsKICAgOTU3ICAgICAgICAgIHplcnIoImZhdGFsIGVy cm9yOiBvdXQgb2YgbWVtb3J5Iik7CiAgIDk1OCAgICAgICAgICBleGl0KDEpOwogICA5NTkgICAg ICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDg0ID0gMQoKICAgIGZyYW1lICMw OiAweDAwMDAwMDAxMGVmYTUxYTIgenNoLTUuMi1kZXYtMmB6YWxsb2Moc2l6ZT0xNikgKyAxNDYg YXQgbWVtLmM6OTYwCiAgIDk1NyAgICAgICAgICB6ZXJyKCJmYXRhbCBlcnJvcjogb3V0IG9mIG1l bW9yeSIpOwogICA5NTggICAgICAgICAgZXhpdCgxKTsKICAgOTU5ICAgICAgfQotPiA5NjAgICAg ICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgOTYxCiAgIDk2MiAgICAgIHJldHVybiBwdHI7CiAgIDk2 MyAgfQoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ4NSA9IDAKCiAgICBmcmFtZSAj MDogMHgwMDAwMDAwMTBlZmE1MTNkIHpzaC01LjItZGV2LTJgemFsbG9jKHNpemU9MjQpICsgNDUg YXQgbWVtLmM6OTU2CiAgIDk1MyAgICAgIGlmICghc2l6ZSkKICAgOTU0ICAgICAgICAgIHNpemUg PSAxOwogICA5NTUgICAgICBxdWV1ZV9zaWduYWxzKCk7Ci0+IDk1NiAgICAgIGlmICghKHB0ciA9 ICh2b2lkICopIG1hbGxvYyhzaXplKSkpIHsKICAgOTU3ICAgICAgICAgIHplcnIoImZhdGFsIGVy cm9yOiBvdXQgb2YgbWVtb3J5Iik7CiAgIDk1OCAgICAgICAgICBleGl0KDEpOwogICA5NTkgICAg ICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDg2ID0gMQoKICAgIGZyYW1lICMw OiAweDAwMDAwMDAxMGVmYTUxYTIgenNoLTUuMi1kZXYtMmB6YWxsb2Moc2l6ZT0yNCkgKyAxNDYg YXQgbWVtLmM6OTYwCiAgIDk1NyAgICAgICAgICB6ZXJyKCJmYXRhbCBlcnJvcjogb3V0IG9mIG1l bW9yeSIpOwogICA5NTggICAgICAgICAgZXhpdCgxKTsKICAgOTU5ICAgICAgfQotPiA5NjAgICAg ICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgOTYxCiAgIDk2MiAgICAgIHJldHVybiBwdHI7CiAgIDk2 MyAgfQoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ4NyA9IDAKCiAgICBmcmFtZSAj MDogMHgwMDAwMDAwMTBlZjZlMmQ5IHpzaC01LjItZGV2LTJgZXhlY2NtZChzdGF0ZT0weDAwMDA3 ZmZmNTBjYjQ0MzAsIGlucHV0PTAsIG91dHB1dD0wLCBob3c9MTgsIGxhc3QxPTIpICsgMTkxOTMg YXQgZXhlYy5jOjM3ODgKICAgMzc4NSAgICAgICAgICAgICAgICAgaWYgKGRvX3NhdmUgJiBCSU5G X0NPTU1BTkQpCiAgIDM3ODYgICAgICAgICAgICAgICAgICAgICBlcnJmbGFnICY9IH5FUlJGTEFH X0VSUk9SOwogICAzNzg3ICAgICAgICAgICAgICAgICByZXN0b3JlX3F1ZXVlX3NpZ25hbHMocSk7 Ci0+IDM3ODggICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwogICAzNzg5ICAgICAgICAg ICAgICAgICBpZiAoc2F2ZVsxXSA9PSAtMikgewogICAzNzkwICAgICAgICAgICAgICAgICAgICAg aWYgKGZlcnJvcihzdGRvdXQpKSB7CiAgIDM3OTEgICAgICAgICAgICAgICAgICAgICAgICAgendh cm4oIndyaXRlIGVycm9yOiAlZSIsIGVycm5vKTsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAoo aW50KSAkODggPSA3CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2Mzc2ZSB6c2gtNS4yLWRl di0yYGV4ZWNwbGluZShzdGF0ZT0weDAwMDA3ZmZmNTBjYjQ0MzAsIHNsY29kZT01MTIyLCBob3c9 MTgsIGxhc3QxPTApICsgMzk5OCBhdCBleGVjLmM6MTc3OQogICAxNzc2ICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgIDE3NzcgICAgICAgICAgICAgfQogICAxNzc4ICAgICAgICAgICAgIGNo aWxkX3VuYmxvY2soKTsKLT4gMTc3OSAgICAgICAgICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAg MTc4MAogICAxNzgxICAgICAgICAgICAgIGlmIChsaXN0X3BpcGUgJiYgKGxhc3R2YWwgJiAwMjAw KSAmJiBwaiA+PSAwICYmCiAgIDE3ODIgICAgICAgICAgICAgICAgICghKGpuLT5zdGF0ICYgU1RB VF9JTlVTRSkgfHwgKGpuLT5zdGF0ICYgU1RBVF9ET05FKSkpIHsKKGxsZGIpIHAgcXVldWVpbmdf ZW5hYmxlZAooaW50KSAkODkgPSA2CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2MjQzOSB6 c2gtNS4yLWRldi0yYGV4ZWNsaXN0KHN0YXRlPTB4MDAwMDdmZmY1MGNiNDQzMCwgZG9udF9jaGFu Z2Vfam9iPTEsIGV4aXRpbmc9MCkgKyAzNDAxIGF0IGV4ZWMuYzoxNDc3CiAgIDE0NzQgICAgICAg ICBzaWd0cmFwcGVkW1NJR0VYSVRdID0gMDsKICAgMTQ3NSAgICAgfQogICAxNDc2Ci0+IDE0Nzcg ICAgIHVucXVldWVfc2lnbmFscygpOwogICAxNDc4IH0KICAgMTQ3OQoobGxkYikgcCBxdWV1ZWlu Z19lbmFibGVkCihpbnQpICQ5MCA9IDUKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZjYzZGFh IHpzaC01LjItZGV2LTJgc2V0dW5kZXJzY29yZShzdHI9ImZ1biIpICsgMjYgYXQgZXhlYy5jOjI0 NjgKICAgMjQ2NSBzZXR1bmRlcnNjb3JlKGNoYXIgKnN0cikKICAgMjQ2NiB7CiAgIDI0NjcgICAg IHF1ZXVlX3NpZ25hbHMoKTsKLT4gMjQ2OCAgICAgaWYgKHN0ciAmJiAqc3RyKSB7CiAgIDI0Njkg ICAgICAgICBpbnQgbCA9IHN0cmxlbihzdHIpICsgMSwgbmwgPSAobCArIDMxKSAmIH4zMTsKICAg MjQ3MAogICAyNDcxICAgICAgICAgaWYgKG5sID4gdW5kZXJzY29yZWxlbiB8fCAodW5kZXJzY29y ZWxlbiAtIG5sKSA+IDY0KSB7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDkxID0g NgoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmNjNmMTUgenNoLTUuMi1kZXYtMmBzZXR1bmRl cnNjb3JlKHN0cj0iZnVuIikgKyAzODkgYXQgZXhlYy5jOjI0ODUKICAgMjQ4MiAgICAgICAgICp6 dW5kZXJzY29yZSA9ICdcMCc7CiAgIDI0ODMgICAgICAgICB1bmRlcnNjb3JldXNlZCA9IDE7CiAg IDI0ODQgICAgIH0KLT4gMjQ4NSAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDI0ODYgfQogICAy NDg3CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDkyID0gNQoKICAgIGZyYW1lICMw OiAweDAwMDAwMDAxMGVmYmQ5YTQgenNoLTUuMi1kZXYtMmBlbmRwYXJhbXNjb3BlICsgMzYgYXQg cGFyYW1zLmM6NTA4NwogICA1MDg0IGVuZHBhcmFtc2NvcGUodm9pZCkKICAgNTA4NSB7CiAgIDUw ODYgICAgIHF1ZXVlX3NpZ25hbHMoKTsKLT4gNTA4NyAgICAgbG9jYWxsZXZlbC0tOwogICA1MDg4 ICAgICAvKiBUaGlzIHBvcHMgYW55dGhpbmcgZnJvbSBhIGhpZ2hlciBsb2NhbGxldmVsICovCiAg IDUwODkgICAgIHNhdmVhbmRwb3BoaXN0c3RhY2soMCwgSEZJTEVfVVNFX09QVElPTlMpOwogICA1 MDkwICAgICBzY2FuaGFzaHRhYmxlKHBhcmFtdGFiLCAwLCAwLCAwLCBzY2FuZW5kc2NvcGUsIDAp OwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ5MyA9IDYKCiAgICBmcmFtZSAjMDog MHgwMDAwMDAwMTBlZmJkYTBiIHpzaC01LjItZGV2LTJgZW5kcGFyYW1zY29wZSArIDEzOSBhdCBw YXJhbXMuYzo1MDkxCiAgIDUwODggICAgIC8qIFRoaXMgcG9wcyBhbnl0aGluZyBmcm9tIGEgaGln aGVyIGxvY2FsbGV2ZWwgKi8KICAgNTA4OSAgICAgc2F2ZWFuZHBvcGhpc3RzdGFjaygwLCBIRklM RV9VU0VfT1BUSU9OUyk7CiAgIDUwOTAgICAgIHNjYW5oYXNodGFibGUocGFyYW10YWIsIDAsIDAs IDAsIHNjYW5lbmRzY29wZSwgMCk7Ci0+IDUwOTEgICAgIHVucXVldWVfc2lnbmFscygpOwogICA1 MDkyIH0KICAgNTA5MwogICA1MDk0IC8qKi8KKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50 KSAkOTQgPSA1CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2NzU2MSB6c2gtNS4yLWRldi0y YHJ1bnNoZnVuYyhwcm9nPTB4MDAwMDdmYTdlYzhjM2IwMCwgd3JhcD0weDAwMDAwMDAwMDAwMDAw MDAsIG5hbWU9ImZ1biIpICsgNDE3IGF0IGV4ZWMuYzo1NTE2CiAgIDU1MTMgICAgIH0KICAgNTUx NCAgICAgZW5kcGFyYW1zY29wZSgpOwogICA1NTE1Ci0+IDU1MTYgICAgIHVucXVldWVfc2lnbmFs cygpOwogICA1NTE3IH0KICAgNTUxOAoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ5 NSA9IDQKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE0ZDBhIHpzaC01LjItZGV2LTJgb2xk X2hlYXBzKG9sZD0weDAwMDAwMDAxMGYzOGIwMDApICsgMjYgYXQgbWVtLmM6MjI1CiAgIDIyMiAg ICAgIEhlYXAgaCwgbjsKICAgMjIzCiAgIDIyNCAgICAgIHF1ZXVlX3NpZ25hbHMoKTsKLT4gMjI1 ICAgICAgZm9yIChoID0gaGVhcHM7IGg7IGggPSBuKSB7CiAgIDIyNiAgICAgICAgICBuID0gaC0+ bmV4dDsKICAgMjI3ICAgICAgICAgIERQVVRTKGgtPnNwLCAiQlVHOiBvbGRfaGVhcHMoKSB3aXRo IHB1c2hlZCBoZWFwcyIpOwogICAyMjggICNpZmRlZiBaU0hfSEVBUF9ERUJVRwoobGxkYikgcCBx dWV1ZWluZ19lbmFibGVkCihpbnQpICQ5NiA9IDUKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBl ZmE0ZGI4IHpzaC01LjItZGV2LTJgb2xkX2hlYXBzKG9sZD0weDAwMDAwMDAxMGYzOGIwMDApICsg MjAwIGF0IG1lbS5jOjI2MAogICAyNTcgICAgICB9CiAgIDI1OCAgI2VuZGlmCiAgIDI1OSAgICAg IGZoZWFwID0gTlVMTDsKLT4gMjYwICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDI2MSAgfQog ICAyNjIKICAgMjYzICAvKiBUZW1wb3JhcmlseSBzd2l0Y2ggdG8gb3RoZXIgaGVhcHMgKG9yIGJh Y2sgYWdhaW4pLiAqLwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ5NyA9IDQKCiAg ICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZjY3MjM5IHpzaC01LjItZGV2LTJgZG9zaGZ1bmMoc2hm dW5jPTB4MDAwMDdmYTdlYzhkMzk0MCwgZG9zaGFyZ3M9MHgwMDAwMDAwMTBmMzhiMTIwLCBub3Jl dHVybnZhbD0wKSArIDI4NTcgYXQgZXhlYy5jOjU0NDYKICAgNTQ0MyAgICAgICAgIH0KICAgNTQ0 NCAgICAgfSBPTERIRUFQUzsKICAgNTQ0NQotPiA1NDQ2ICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsK ICAgNTQ0NwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQ5OCA9IDMKCiAgICBmcmFt ZSAjMDogMHgwMDAwMDAwMTBlZjY4Y2IzIHpzaC01LjItZGV2LTJgZXhlY3NoZnVuYyhzaGY9MHgw MDAwN2ZhN2VjOGQzOTQwLCBhcmdzPTB4MDAwMDAwMDEwZjM4YjEyMCkgKyA2NTkgYXQgZXhlYy5j OjUwMTAKICAgNTAwNwogICA1MDA4ICAgICBpZiAoIWxpc3RfcGlwZSkKICAgNTAwOSAgICAgICAg IGRlbGV0ZWZpbGVsaXN0KGxhc3RfZmlsZV9saXN0LCAwKTsKLT4gNTAxMCAgICAgdW5xdWV1ZV9z aWduYWxzKCk7CiAgIDUwMTEgfQogICA1MDEyCihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGlu dCkgJDk5ID0gMgoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmNjI0MzkgenNoLTUuMi1kZXYt MmBleGVjbGlzdChzdGF0ZT0weDAwMDA3ZmZmNTBjYjUxZjAsIGRvbnRfY2hhbmdlX2pvYj0wLCBl eGl0aW5nPTApICsgMzQwMSBhdCBleGVjLmM6MTQ3NwogICAxNDc0ICAgICAgICAgc2lndHJhcHBl ZFtTSUdFWElUXSA9IDA7CiAgIDE0NzUgICAgIH0KICAgMTQ3NgotPiAxNDc3ICAgICB1bnF1ZXVl X3NpZ25hbHMoKTsKICAgMTQ3OCB9CiAgIDE0NzkKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAoo aW50KSAkMTAwID0gMQoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTU1Y2UgenNoLTUuMi1k ZXYtMmBwb3BoZWFwICsgMzAgYXQgbWVtLmM6NDU0CiAgIDQ1MSAgICAgIGhfcG9wKys7CiAgIDQ1 MiAgI2VuZGlmCiAgIDQ1MwotPiA0NTQgICAgICBmaGVhcCA9IE5VTEw7CiAgIDQ1NSAgICAgIGZv ciAoaCA9IGhlYXBzOyBoOyBoID0gaG4pIHsKICAgNDU2ICAgICAgICAgIGhuID0gaC0+bmV4dDsK ICAgNDU3ICAgICAgICAgIGlmICgoaHMgPSBoLT5zcCkpIHsKKGxsZGIpIHAgcXVldWVpbmdfZW5h YmxlZAooaW50KSAkMTAxID0gMgoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTU3ZjQgenNo LTUuMi1kZXYtMmBwb3BoZWFwICsgNTgwIGF0IG1lbS5jOjUxNgogICA1MTMgICAgICBlbHNlCiAg IDUxNCAgICAgICAgICBoZWFwcyA9IE5VTEw7CiAgIDUxNQotPiA1MTYgICAgICB1bnF1ZXVlX3Np Z25hbHMoKTsKICAgNTE3ICB9CiAgIDUxOAogICA1MTkgICNpZmRlZiBVU0VfTU1BUAoobGxkYikg cCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQxMDIgPSAxCgogICAgZnJhbWUgIzA6IDB4MDAwMDAw MDEwZWZhNGY5NiB6c2gtNS4yLWRldi0yYHB1c2hoZWFwICsgMjIgYXQgbWVtLmM6MzAyCiAgIDI5 OSAgICAgIGhfcHVzaCsrOwogICAzMDAgICNlbmRpZgogICAzMDEKLT4gMzAyICAgICAgZm9yICho ID0gaGVhcHM7IGg7IGggPSBoLT5uZXh0KSB7CiAgIDMwMyAgICAgICAgICBEUFVUUyghaC0+dXNl ZCAmJiBoLT5uZXh0LCAiQlVHOiBlbXB0eSBoZWFwIik7CiAgIDMwNCAgICAgICAgICBocyA9IChI ZWFwc3RhY2spIHphbGxvYyhzaXplb2YoKmhzKSk7CiAgIDMwNSAgICAgICAgICBocy0+bmV4dCA9 IGgtPnNwOwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQxMDMgPSAyCgogICAgZnJh bWUgIzA6IDB4MDAwMDAwMDEwZWZhNTEzZCB6c2gtNS4yLWRldi0yYHphbGxvYyhzaXplPTE2KSAr IDQ1IGF0IG1lbS5jOjk1NgogICA5NTMgICAgICBpZiAoIXNpemUpCiAgIDk1NCAgICAgICAgICBz aXplID0gMTsKICAgOTU1ICAgICAgcXVldWVfc2lnbmFscygpOwotPiA5NTYgICAgICBpZiAoIShw dHIgPSAodm9pZCAqKSBtYWxsb2Moc2l6ZSkpKSB7CiAgIDk1NyAgICAgICAgICB6ZXJyKCJmYXRh bCBlcnJvcjogb3V0IG9mIG1lbW9yeSIpOwogICA5NTggICAgICAgICAgZXhpdCgxKTsKICAgOTU5 ICAgICAgfQoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQxMDQgPSAzCgogICAgZnJh bWUgIzA6IDB4MDAwMDAwMDEwZWZhNTFhMiB6c2gtNS4yLWRldi0yYHphbGxvYyhzaXplPTE2KSAr IDE0NiBhdCBtZW0uYzo5NjAKICAgOTU3ICAgICAgICAgIHplcnIoImZhdGFsIGVycm9yOiBvdXQg b2YgbWVtb3J5Iik7CiAgIDk1OCAgICAgICAgICBleGl0KDEpOwogICA5NTkgICAgICB9Ci0+IDk2 MCAgICAgIHVucXVldWVfc2lnbmFscygpOwogICA5NjEKICAgOTYyICAgICAgcmV0dXJuIHB0cjsK ICAgOTYzICB9CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDEwNSA9IDIKCiAgICBm cmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1MDVkIHpzaC01LjItZGV2LTJgcHVzaGhlYXAgKyAyMjEg YXQgbWVtLmM6MzE4CiAgIDMxNSAgICAgICAgICB9CiAgIDMxNiAgI2VuZGlmCiAgIDMxNyAgICAg IH0KLT4gMzE4ICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDMxOSAgfQogICAzMjAKICAgMzIx ICAvKiByZXNldCBoZWFwcyB0byBwcmV2aW91cyBzdGF0ZSAqLwoobGxkYikgcCBxdWV1ZWluZ19l bmFibGVkCihpbnQpICQxMDYgPSAxCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2MDIwMCB6 c2gtNS4yLWRldi0yYHpjb250ZXh0X3NhdmVfcGFydGlhbChwYXJ0cz03KSArIDMyIGF0IGNvbnRl eHQuYzo1OAogICA1NQogICA1NiAgICAgICBxdWV1ZV9zaWduYWxzKCk7CiAgIDU3Ci0+IDU4ICAg ICAgIGNzID0gKHN0cnVjdCBjb250ZXh0X3N0YWNrICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29u dGV4dF9zdGFjaykpOwogICA1OQogICA2MCAgICAgICBpZiAocGFydHMgJiBaQ09OVEVYVF9ISVNU KSB7CiAgIDYxICAgICAgICAgICBoaXN0X2NvbnRleHRfc2F2ZSgmY3MtPmhpc3Rfc3RhY2ssICFj c3RhY2spOwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQxMDcgPSAyCgogICAgZnJh bWUgIzA6IDB4MDAwMDAwMDEwZWZhNTEzZCB6c2gtNS4yLWRldi0yYHphbGxvYyhzaXplPTI1Nikg KyA0NSBhdCBtZW0uYzo5NTYKICAgOTUzICAgICAgaWYgKCFzaXplKQogICA5NTQgICAgICAgICAg c2l6ZSA9IDE7CiAgIDk1NSAgICAgIHF1ZXVlX3NpZ25hbHMoKTsKLT4gOTU2ICAgICAgaWYgKCEo cHRyID0gKHZvaWQgKikgbWFsbG9jKHNpemUpKSkgewogICA5NTcgICAgICAgICAgemVycigiZmF0 YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkiKTsKICAgOTU4ICAgICAgICAgIGV4aXQoMSk7CiAgIDk1 OSAgICAgIH0KKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkMTA4ID0gMwoKICAgIGZy YW1lICMwOiAweDAwMDAwMDAxMGVmYTUxYTIgenNoLTUuMi1kZXYtMmB6YWxsb2Moc2l6ZT0yNTYp ICsgMTQ2IGF0IG1lbS5jOjk2MAogICA5NTcgICAgICAgICAgemVycigiZmF0YWwgZXJyb3I6IG91 dCBvZiBtZW1vcnkiKTsKICAgOTU4ICAgICAgICAgIGV4aXQoMSk7CiAgIDk1OSAgICAgIH0KLT4g OTYwICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDk2MQogICA5NjIgICAgICByZXR1cm4gcHRy OwogICA5NjMgIH0KKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkMTA5ID0gMgoKICAg IGZyYW1lICMwOiAweDAwMDAwMDAxMGVmNjAyZjEgenNoLTUuMi1kZXYtMmB6Y29udGV4dF9zYXZl X3BhcnRpYWwocGFydHM9NykgKyAyNzMgYXQgY29udGV4dC5jOjczCiAgIDcwICAgICAgIGNzLT5u ZXh0ID0gY3N0YWNrOwogICA3MSAgICAgICBjc3RhY2sgPSBjczsKICAgNzIKLT4gNzMgICAgICAg dW5xdWV1ZV9zaWduYWxzKCk7CiAgIDc0ICAgfQogICA3NQogICA3NiAgIC8qIHNhdmUgY29udGV4 dCBpbiBmdWxsICovCihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDExMCA9IDEKCiAg ICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZjkwOTc0IHpzaC01LjItZGV2LTJgaW5wdXRzZXRsaW5l KHN0cj0iZnVuIiwgZmxhZ3M9NjQpICsgMzYgYXQgaW5wdXQuYzozODYKICAgMzgzICB7CiAgIDM4 NCAgICAgIHF1ZXVlX3NpZ25hbHMoKTsKICAgMzg1Ci0+IDM4NiAgICAgIGlmICgoaW5idWZmbGFn cyAmIElOUF9GUkVFKSAmJiBpbmJ1ZikgewogICAzODcgICAgICAgICAgZnJlZShpbmJ1Zik7CiAg IDM4OCAgICAgIH0KICAgMzg5ICAgICAgaW5idWYgPSBpbmJ1ZnB0ciA9IHN0cjsKKGxsZGIpIHAg cXVldWVpbmdfZW5hYmxlZAooaW50KSAkMTExID0gMgoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAx MGVmOTBhMzMgenNoLTUuMi1kZXYtMmBpbnB1dHNldGxpbmUoc3RyPSJmdW4iLCBmbGFncz02NCkg KyAyMjcgYXQgaW5wdXQuYzo0MDQKICAgNDAxICAgICAgICAgIGluYnVmY3QgPSBpbmJ1ZmxlZnQ7 CiAgIDQwMiAgICAgIGluYnVmZmxhZ3MgPSBmbGFnczsKICAgNDAzCi0+IDQwNCAgICAgIHVucXVl dWVfc2lnbmFscygpOwogICA0MDUgIH0KICAgNDA2CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQK KGludCkgJDExMiA9IDEKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmJlOWVkIHpzaC01LjIt ZGV2LTJgaW5pdF9wYXJzZSArIDI5IGF0IHBhcnNlLmM6NDY5CiAgIDQ2NiAgewogICA0NjcgICAg ICBxdWV1ZV9zaWduYWxzKCk7CiAgIDQ2OAotPiA0NjkgICAgICBpZiAoZWNidWYpIHpmcmVlKGVj YnVmLCBlY2xlbik7CiAgIDQ3MAogICA0NzEgICAgICBlY2J1ZiA9IChXb3JkY29kZSkgemFsbG9j KChlY2xlbiA9IEVDX0lOSVRfU0laRSkgKiBzaXplb2Yod29yZGNvZGUpKTsKICAgNDcyICAgICAg ZWN1c2VkID0gMDsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkMTEzID0gMgoKICAg IGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTUxM2QgenNoLTUuMi1kZXYtMmB6YWxsb2Moc2l6ZT0x MDI0KSArIDQ1IGF0IG1lbS5jOjk1NgogICA5NTMgICAgICBpZiAoIXNpemUpCiAgIDk1NCAgICAg ICAgICBzaXplID0gMTsKICAgOTU1ICAgICAgcXVldWVfc2lnbmFscygpOwotPiA5NTYgICAgICBp ZiAoIShwdHIgPSAodm9pZCAqKSBtYWxsb2Moc2l6ZSkpKSB7CiAgIDk1NyAgICAgICAgICB6ZXJy KCJmYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSIpOwogICA5NTggICAgICAgICAgZXhpdCgxKTsK ICAgOTU5ICAgICAgfQoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQxMTQgPSAzCgog ICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNTFhMiB6c2gtNS4yLWRldi0yYHphbGxvYyhzaXpl PTEwMjQpICsgMTQ2IGF0IG1lbS5jOjk2MAogICA5NTcgICAgICAgICAgemVycigiZmF0YWwgZXJy b3I6IG91dCBvZiBtZW1vcnkiKTsKICAgOTU4ICAgICAgICAgIGV4aXQoMSk7CiAgIDk1OSAgICAg IH0KLT4gOTYwICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDk2MQogICA5NjIgICAgICByZXR1 cm4gcHRyOwogICA5NjMgIH0KKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkMTE1ID0g MgoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYmVhYmIgenNoLTUuMi1kZXYtMmBpbml0X3Bh cnNlICsgMjM1IGF0IHBhcnNlLmM6NDgwCiAgIDQ3NwogICA0NzggICAgICBpbml0X3BhcnNlX3N0 YXR1cygpOwogICA0NzkKLT4gNDgwICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDQ4MSAgfQog ICA0ODIKICAgNDgzICAvKiBCdWlsZCBlcHJvZy4gKi8KKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxl ZAooaW50KSAkMTE2ID0gMQoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTVhOTYgenNoLTUu Mi1kZXYtMmB6aGFsbG9jKHNpemU9MzIpICsgNTQgYXQgbWVtLmM6NjA0CiAgIDYwMSAgICAgICAq IGJ1dCB3ZSB0aGluayB0aGF0IG5vdGhpbmcgdXBzdHJlYW0gb2YgZmhlYXAgaGFzIG1vcmUgZnJl ZSBzcGFjZSwKICAgNjAyICAgICAgICogc28gd2h5IHN0YXJ0IG92ZXIgYXQgaGVhcHMganVzdCBi ZWNhdXNlIGZoZWFwIGhhcyB0b28gbGl0dGxlPwogICA2MDMgICAgICAgKi8KLT4gNjA0ICAgICAg Zm9yIChoID0gKGZoZWFwID8gZmhlYXAgOiBoZWFwcyk7IGg7IGggPSBoLT5uZXh0KSB7CiAgIDYw NSAgICAgICAgICBocCA9IGg7CiAgIDYwNiAgICAgICAgICBpZiAoQVJFTkFfU0laRU9GKGgpID49 IChuID0gc2l6ZSArIGgtPnVzZWQpKSB7CiAgIDYwNyAgICAgICAgICAgICAgdm9pZCAqcmV0Owoo bGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQxMTcgPSAyCgogICAgZnJhbWUgIzA6IDB4 MDAwMDAwMDEwZWZhNWI1NyB6c2gtNS4yLWRldi0yYHpoYWxsb2Moc2l6ZT0zMikgKyAyNDcgYXQg bWVtLmM6NjExCiAgIDYwOAogICA2MDkgICAgICAgICAgICAgIGgtPnVzZWQgPSBuOwogICA2MTAg ICAgICAgICAgICAgIHJldCA9IGFyZW5hKGgpICsgbiAtIHNpemU7Ci0+IDYxMSAgICAgICAgICAg ICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDYxMiAgI2lmZGVmIFpTSF9IRUFQX0RFQlVHCiAgIDYx MyAgICAgICAgICAgICAgbGFzdF9oZWFwX2lkID0gaC0+aGVhcF9pZDsKICAgNjE0ICAgICAgICAg ICAgICBpZiAoaGVhcF9kZWJ1Z192ZXJib3NpdHkgJiBIRFZfQUxMT0MpIHsKKGxsZGIpIHAgcXVl dWVpbmdfZW5hYmxlZAooaW50KSAkMTE4ID0gMQoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVm YTVhOTYgenNoLTUuMi1kZXYtMmB6aGFsbG9jKHNpemU9OCkgKyA1NCBhdCBtZW0uYzo2MDQKICAg NjAxICAgICAgICogYnV0IHdlIHRoaW5rIHRoYXQgbm90aGluZyB1cHN0cmVhbSBvZiBmaGVhcCBo YXMgbW9yZSBmcmVlIHNwYWNlLAogICA2MDIgICAgICAgKiBzbyB3aHkgc3RhcnQgb3ZlciBhdCBo ZWFwcyBqdXN0IGJlY2F1c2UgZmhlYXAgaGFzIHRvbyBsaXR0bGU/CiAgIDYwMyAgICAgICAqLwot PiA2MDQgICAgICBmb3IgKGggPSAoZmhlYXAgPyBmaGVhcCA6IGhlYXBzKTsgaDsgaCA9IGgtPm5l eHQpIHsKICAgNjA1ICAgICAgICAgIGhwID0gaDsKICAgNjA2ICAgICAgICAgIGlmIChBUkVOQV9T SVpFT0YoaCkgPj0gKG4gPSBzaXplICsgaC0+dXNlZCkpIHsKICAgNjA3ICAgICAgICAgICAgICB2 b2lkICpyZXQ7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDExOSA9IDIKCiAgICBm cmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1YjU3IHpzaC01LjItZGV2LTJgemhhbGxvYyhzaXplPTgp ICsgMjQ3IGF0IG1lbS5jOjYxMQogICA2MDgKICAgNjA5ICAgICAgICAgICAgICBoLT51c2VkID0g bjsKICAgNjEwICAgICAgICAgICAgICByZXQgPSBhcmVuYShoKSArIG4gLSBzaXplOwotPiA2MTEg ICAgICAgICAgICAgIHVucXVldWVfc2lnbmFscygpOwogICA2MTIgICNpZmRlZiBaU0hfSEVBUF9E RUJVRwogICA2MTMgICAgICAgICAgICAgIGxhc3RfaGVhcF9pZCA9IGgtPmhlYXBfaWQ7CiAgIDYx NCAgICAgICAgICAgICAgaWYgKGhlYXBfZGVidWdfdmVyYm9zaXR5ICYgSERWX0FMTE9DKSB7Cihs bGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDEyMCA9IDEKCiAgICBmcmFtZSAjMDogMHgw MDAwMDAwMTBlZmJlZjhiIHpzaC01LjItZGV2LTJgYmxkX2Vwcm9nKGhlYXA9MSkgKyAyNyBhdCBw YXJzZS5jOjUwNQogICA1MDIKICAgNTAzICAgICAgcXVldWVfc2lnbmFscygpOwogICA1MDQKLT4g NTA1ICAgICAgZWNhZGQoV0NCX0VORCgpKTsKICAgNTA2CiAgIDUwNyAgICAgIHJldCA9IGhlYXAg PyAoRXByb2cpIHpoYWxsb2Moc2l6ZW9mKCpyZXQpKSA6IChFcHJvZykgemFsbG9jKHNpemVvZigq cmV0KSk7CiAgIDUwOCAgICAgIHJldC0+bGVuID0gKChlY25wYXRzICogc2l6ZW9mKFBhdHByb2cp KSArCihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDEyMSA9IDIKCiAgICBmcmFtZSAj MDogMHgwMDAwMDAwMTBlZmE1YTk2IHpzaC01LjItZGV2LTJgemhhbGxvYyhzaXplPTU2KSArIDU0 IGF0IG1lbS5jOjYwNAogICA2MDEgICAgICAgKiBidXQgd2UgdGhpbmsgdGhhdCBub3RoaW5nIHVw c3RyZWFtIG9mIGZoZWFwIGhhcyBtb3JlIGZyZWUgc3BhY2UsCiAgIDYwMiAgICAgICAqIHNvIHdo eSBzdGFydCBvdmVyIGF0IGhlYXBzIGp1c3QgYmVjYXVzZSBmaGVhcCBoYXMgdG9vIGxpdHRsZT8K ICAgNjAzICAgICAgICovCi0+IDYwNCAgICAgIGZvciAoaCA9IChmaGVhcCA/IGZoZWFwIDogaGVh cHMpOyBoOyBoID0gaC0+bmV4dCkgewogICA2MDUgICAgICAgICAgaHAgPSBoOwogICA2MDYgICAg ICAgICAgaWYgKEFSRU5BX1NJWkVPRihoKSA+PSAobiA9IHNpemUgKyBoLT51c2VkKSkgewogICA2 MDcgICAgICAgICAgICAgIHZvaWQgKnJldDsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50 KSAkMTIyID0gMwoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTViNTcgenNoLTUuMi1kZXYt MmB6aGFsbG9jKHNpemU9NTYpICsgMjQ3IGF0IG1lbS5jOjYxMQogICA2MDgKICAgNjA5ICAgICAg ICAgICAgICBoLT51c2VkID0gbjsKICAgNjEwICAgICAgICAgICAgICByZXQgPSBhcmVuYShoKSAr IG4gLSBzaXplOwotPiA2MTEgICAgICAgICAgICAgIHVucXVldWVfc2lnbmFscygpOwogICA2MTIg ICNpZmRlZiBaU0hfSEVBUF9ERUJVRwogICA2MTMgICAgICAgICAgICAgIGxhc3RfaGVhcF9pZCA9 IGgtPmhlYXBfaWQ7CiAgIDYxNCAgICAgICAgICAgICAgaWYgKGhlYXBfZGVidWdfdmVyYm9zaXR5 ICYgSERWX0FMTE9DKSB7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDEyMyA9IDIK CiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1YTk2IHpzaC01LjItZGV2LTJgemhhbGxvYyhz aXplPTI0KSArIDU0IGF0IG1lbS5jOjYwNAogICA2MDEgICAgICAgKiBidXQgd2UgdGhpbmsgdGhh dCBub3RoaW5nIHVwc3RyZWFtIG9mIGZoZWFwIGhhcyBtb3JlIGZyZWUgc3BhY2UsCiAgIDYwMiAg ICAgICAqIHNvIHdoeSBzdGFydCBvdmVyIGF0IGhlYXBzIGp1c3QgYmVjYXVzZSBmaGVhcCBoYXMg dG9vIGxpdHRsZT8KICAgNjAzICAgICAgICovCi0+IDYwNCAgICAgIGZvciAoaCA9IChmaGVhcCA/ IGZoZWFwIDogaGVhcHMpOyBoOyBoID0gaC0+bmV4dCkgewogICA2MDUgICAgICAgICAgaHAgPSBo OwogICA2MDYgICAgICAgICAgaWYgKEFSRU5BX1NJWkVPRihoKSA+PSAobiA9IHNpemUgKyBoLT51 c2VkKSkgewogICA2MDcgICAgICAgICAgICAgIHZvaWQgKnJldDsKKGxsZGIpIHAgcXVldWVpbmdf ZW5hYmxlZAooaW50KSAkMTI0ID0gMwoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTViNTcg enNoLTUuMi1kZXYtMmB6aGFsbG9jKHNpemU9MjQpICsgMjQ3IGF0IG1lbS5jOjYxMQogICA2MDgK ICAgNjA5ICAgICAgICAgICAgICBoLT51c2VkID0gbjsKICAgNjEwICAgICAgICAgICAgICByZXQg PSBhcmVuYShoKSArIG4gLSBzaXplOwotPiA2MTEgICAgICAgICAgICAgIHVucXVldWVfc2lnbmFs cygpOwogICA2MTIgICNpZmRlZiBaU0hfSEVBUF9ERUJVRwogICA2MTMgICAgICAgICAgICAgIGxh c3RfaGVhcF9pZCA9IGgtPmhlYXBfaWQ7CiAgIDYxNCAgICAgICAgICAgICAgaWYgKGhlYXBfZGVi dWdfdmVyYm9zaXR5ICYgSERWX0FMTE9DKSB7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGlu dCkgJDEyNSA9IDIKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmJmMWJjIHpzaC01LjItZGV2 LTJgYmxkX2Vwcm9nKGhlYXA9MSkgKyA1ODggYXQgcGFyc2UuYzo1MjgKICAgNTI1ICAgICAgemZy ZWUoZWNidWYsIGVjbGVuKTsKICAgNTI2ICAgICAgZWNidWYgPSBOVUxMOwogICA1MjcKLT4gNTI4 ICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDUyOQogICA1MzAgICAgICByZXR1cm4gcmV0Owog ICA1MzEgIH0KKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkMTI2ID0gMQoKICAgIGZy YW1lICMwOiAweDAwMDAwMDAxMGVmODEwNmQgenNoLTUuMi1kZXYtMmBoZW5kKHByb2c9MHgwMDAw MDAwMDAwMDAwMDAwKSArIDEyNSBhdCBoaXN0LmM6MTM5NQogICAxMzkyICAgICBEUFVUUyhzdG9w aGlzdCAhPSAyICYmICEoaW5idWZmbGFncyAmIElOUF9BTElBUykgJiYgIWNobGluZSwKICAgMTM5 MyAgICAgICAgICAgIkJVRzogY2hsaW5lIGlzIE5VTEwgaW4gaGVuZCgpIik7CiAgIDEzOTQgICAg IHF1ZXVlX3NpZ25hbHMoKTsKLT4gMTM5NSAgICAgaWYgKGhpc3Rkb25lICYgSElTVEZMQUdfU0VU VFkpCiAgIDEzOTYgICAgICAgICBzZXR0eWluZm8oJnNodHR5aW5mbyk7CiAgIDEzOTcgICAgIGlm ICghKGhpc3RhY3RpdmUgJiBIQV9OT0lOQykpCiAgIDEzOTggICAgICAgICB1bmxpbmtjdXJsaW5l KCk7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDEyNyA9IDIKCiAgICBmcmFtZSAj MDogMHgwMDAwMDAwMTBlZjgxMTU4IHpzaC01LjItZGV2LTJgaGVuZChwcm9nPTB4MDAwMDAwMDAw MDAwMDAwMCkgKyAzNjAgYXQgaGlzdC5jOjE0MDUKICAgMTQwMiAgICAgICAgIGNobGluZSA9IGhw dHIgPSBOVUxMOwogICAxNDAzICAgICAgICAgY2h3b3JkcyA9IE5VTEw7CiAgIDE0MDQgICAgICAg ICBoaXN0YWN0aXZlID0gMDsKLT4gMTQwNSAgICAgICAgIHVucXVldWVfc2lnbmFscygpOwogICAx NDA2ICAgICAgICAgcmV0dXJuIDE7CiAgIDE0MDcgICAgIH0KICAgMTQwOCAgICAgaWYgKGhpc3Rf aWdub3JlX2FsbF9kdXBzICE9IGlzc2V0KEhJU1RJR05PUkVBTExEVVBTKQoobGxkYikgcCBxdWV1 ZWluZ19lbmFibGVkCihpbnQpICQxMjggPSAxCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2 MDNmNSB6c2gtNS4yLWRldi0yYHpjb250ZXh0X3Jlc3RvcmVfcGFydGlhbChwYXJ0cz03KSArIDY5 IGF0IGNvbnRleHQuYzo5NgogICA5MyAgICAgICBEUFVUUyghY3N0YWNrLCAiQlVHOiB6Y29udGV4 dF9yZXN0b3JlKCkgd2l0aG91dCB6Y29udGV4dF9zYXZlKCkiKTsKICAgOTQKICAgOTUgICAgICAg cXVldWVfc2lnbmFscygpOwotPiA5NiAgICAgICBjc3RhY2sgPSBjc3RhY2stPm5leHQ7CiAgIDk3 CiAgIDk4ICAgICAgIGlmIChwYXJ0cyAmIFpDT05URVhUX0hJU1QpIHsKICAgOTkgICAgICAgICAg IGhpc3RfY29udGV4dF9yZXN0b3JlKCZjcy0+aGlzdF9zdGFjaywgIWNzdGFjayk7CihsbGRiKSBw IHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDEyOSA9IDIKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAw MTBlZjYwNGRlIHpzaC01LjItZGV2LTJgemNvbnRleHRfcmVzdG9yZV9wYXJ0aWFsKHBhcnRzPTcp ICsgMzAyIGF0IGNvbnRleHQuYzoxMTAKICAgMTA3CiAgIDEwOCAgICAgIGZyZWUoY3MpOwogICAx MDkKLT4gMTEwICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7CiAgIDExMSAgfQogICAxMTIKICAgMTEz ICAvKiByZXN0b3JlIGZ1bGwgY29udGV4dCAqLwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihp bnQpICQxMzAgPSAxCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2MTcyNyB6c2gtNS4yLWRl di0yYGV4ZWNsaXN0KHN0YXRlPTB4MDAwMDdmZmY1MGNiNTFmMCwgZG9udF9jaGFuZ2Vfam9iPTAs IGV4aXRpbmc9MCkgKyA1NSBhdCBleGVjLmM6MTIwNQogICAxMjAyCiAgIDEyMDMgICAgIHF1ZXVl X3NpZ25hbHMoKTsKICAgMTIwNAotPiAxMjA1ICAgICBjaiA9IHRoaXNqb2I7CiAgIDEyMDYgICAg IG9sZF9wbGluZV9sZXZlbCA9IHBsaW5lX2xldmVsOwogICAxMjA3ICAgICBvbGRfbGlzdF9waXBl ID0gbGlzdF9waXBlOwogICAxMjA4ICAgICBvbGRfbGlzdF9waXBlX2pvYiA9IGxpc3RfcGlwZV9q b2I7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDEzMSA9IDIKCiAgICBmcmFtZSAj MDogMHgwMDAwMDAwMTBlZjYyODkyIHpzaC01LjItZGV2LTJgZXhlY3BsaW5lKHN0YXRlPTB4MDAw MDdmZmY1MGNiNTFmMCwgc2xjb2RlPTMwNzQsIGhvdz0xOCwgbGFzdDE9MCkgKyAxOTQgYXQgZXhl Yy5jOjE1MTQKICAgMTUxMSAgICAgICovCiAgIDE1MTIgICAgIHF1ZXVlX3NpZ25hbHMoKTsKICAg MTUxMwotPiAxNTE0ICAgICBwaiA9IHRoaXNqb2I7CiAgIDE1MTUgICAgIGlwaXBlWzBdID0gaXBp cGVbMV0gPSBvcGlwZVswXSA9IG9waXBlWzFdID0gMDsKICAgMTUxNiAgICAgY2hpbGRfYmxvY2so KTsKICAgMTUxNwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQxMzIgPSAzCgogICAg ZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNWE5NiB6c2gtNS4yLWRldi0yYHpoYWxsb2Moc2l6ZT00 OCkgKyA1NCBhdCBtZW0uYzo2MDQKICAgNjAxICAgICAgICogYnV0IHdlIHRoaW5rIHRoYXQgbm90 aGluZyB1cHN0cmVhbSBvZiBmaGVhcCBoYXMgbW9yZSBmcmVlIHNwYWNlLAogICA2MDIgICAgICAg KiBzbyB3aHkgc3RhcnQgb3ZlciBhdCBoZWFwcyBqdXN0IGJlY2F1c2UgZmhlYXAgaGFzIHRvbyBs aXR0bGU/CiAgIDYwMyAgICAgICAqLwotPiA2MDQgICAgICBmb3IgKGggPSAoZmhlYXAgPyBmaGVh cCA6IGhlYXBzKTsgaDsgaCA9IGgtPm5leHQpIHsKICAgNjA1ICAgICAgICAgIGhwID0gaDsKICAg NjA2ICAgICAgICAgIGlmIChBUkVOQV9TSVpFT0YoaCkgPj0gKG4gPSBzaXplICsgaC0+dXNlZCkp IHsKICAgNjA3ICAgICAgICAgICAgICB2b2lkICpyZXQ7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJs ZWQKKGludCkgJDEzMyA9IDQKCiAgICBmcmFtZSAjMDogMHgwMDAwMDAwMTBlZmE1YjU3IHpzaC01 LjItZGV2LTJgemhhbGxvYyhzaXplPTQ4KSArIDI0NyBhdCBtZW0uYzo2MTEKICAgNjA4CiAgIDYw OSAgICAgICAgICAgICAgaC0+dXNlZCA9IG47CiAgIDYxMCAgICAgICAgICAgICAgcmV0ID0gYXJl bmEoaCkgKyBuIC0gc2l6ZTsKLT4gNjExICAgICAgICAgICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsK ICAgNjEyICAjaWZkZWYgWlNIX0hFQVBfREVCVUcKICAgNjEzICAgICAgICAgICAgICBsYXN0X2hl YXBfaWQgPSBoLT5oZWFwX2lkOwogICA2MTQgICAgICAgICAgICAgIGlmIChoZWFwX2RlYnVnX3Zl cmJvc2l0eSAmIEhEVl9BTExPQykgewoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQx MzQgPSAzCgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNWE5NiB6c2gtNS4yLWRldi0yYHpo YWxsb2Moc2l6ZT04KSArIDU0IGF0IG1lbS5jOjYwNAogICA2MDEgICAgICAgKiBidXQgd2UgdGhp bmsgdGhhdCBub3RoaW5nIHVwc3RyZWFtIG9mIGZoZWFwIGhhcyBtb3JlIGZyZWUgc3BhY2UsCiAg IDYwMiAgICAgICAqIHNvIHdoeSBzdGFydCBvdmVyIGF0IGhlYXBzIGp1c3QgYmVjYXVzZSBmaGVh cCBoYXMgdG9vIGxpdHRsZT8KICAgNjAzICAgICAgICovCi0+IDYwNCAgICAgIGZvciAoaCA9IChm aGVhcCA/IGZoZWFwIDogaGVhcHMpOyBoOyBoID0gaC0+bmV4dCkgewogICA2MDUgICAgICAgICAg aHAgPSBoOwogICA2MDYgICAgICAgICAgaWYgKEFSRU5BX1NJWkVPRihoKSA+PSAobiA9IHNpemUg KyBoLT51c2VkKSkgewogICA2MDcgICAgICAgICAgICAgIHZvaWQgKnJldDsKKGxsZGIpIHAgcXVl dWVpbmdfZW5hYmxlZAooaW50KSAkMTM1ID0gNAoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVm YTViNTcgenNoLTUuMi1kZXYtMmB6aGFsbG9jKHNpemU9OCkgKyAyNDcgYXQgbWVtLmM6NjExCiAg IDYwOAogICA2MDkgICAgICAgICAgICAgIGgtPnVzZWQgPSBuOwogICA2MTAgICAgICAgICAgICAg IHJldCA9IGFyZW5hKGgpICsgbiAtIHNpemU7Ci0+IDYxMSAgICAgICAgICAgICAgdW5xdWV1ZV9z aWduYWxzKCk7CiAgIDYxMiAgI2lmZGVmIFpTSF9IRUFQX0RFQlVHCiAgIDYxMyAgICAgICAgICAg ICAgbGFzdF9oZWFwX2lkID0gaC0+aGVhcF9pZDsKICAgNjE0ICAgICAgICAgICAgICBpZiAoaGVh cF9kZWJ1Z192ZXJib3NpdHkgJiBIRFZfQUxMT0MpIHsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxl ZAooaW50KSAkMTM2ID0gMwoKICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2M2RhYSB6c2gtNS4y LWRldi0yYHNldHVuZGVyc2NvcmUoc3RyPSJmdW4iKSArIDI2IGF0IGV4ZWMuYzoyNDY4CiAgIDI0 NjUgc2V0dW5kZXJzY29yZShjaGFyICpzdHIpCiAgIDI0NjYgewogICAyNDY3ICAgICBxdWV1ZV9z aWduYWxzKCk7Ci0+IDI0NjggICAgIGlmIChzdHIgJiYgKnN0cikgewogICAyNDY5ICAgICAgICAg aW50IGwgPSBzdHJsZW4oc3RyKSArIDEsIG5sID0gKGwgKyAzMSkgJiB+MzE7CiAgIDI0NzAKICAg MjQ3MSAgICAgICAgIGlmIChubCA+IHVuZGVyc2NvcmVsZW4gfHwgKHVuZGVyc2NvcmVsZW4gLSBu bCkgPiA2NCkgewoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQxMzcgPSA0CgogICAg ZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWY2M2YxNSB6c2gtNS4yLWRldi0yYHNldHVuZGVyc2NvcmUo c3RyPSJmdW4iKSArIDM4OSBhdCBleGVjLmM6MjQ4NQogICAyNDgyICAgICAgICAgKnp1bmRlcnNj b3JlID0gJ1wwJzsKICAgMjQ4MyAgICAgICAgIHVuZGVyc2NvcmV1c2VkID0gMTsKICAgMjQ4NCAg ICAgfQotPiAyNDg1ICAgICB1bnF1ZXVlX3NpZ25hbHMoKTsKICAgMjQ4NiB9CiAgIDI0ODcKKGxs ZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkMTM4ID0gMwoKICAgIGZyYW1lICMwOiAweDAw MDAwMDAxMGVmNjhiYmQgenNoLTUuMi1kZXYtMmBleGVjc2hmdW5jKHNoZj0weDAwMDA3ZmE3ZWM4 ZDM5NDAsIGFyZ3M9MHgwMDAwMDAwMTBmMzhiMTIwKSArIDQxMyBhdCBleGVjLmM6NDk5MwogICA0 OTkwICAgICAgICAgZmZsdXNoKHh0cmVycik7CiAgIDQ5OTEgICAgIH0KICAgNDk5MiAgICAgcXVl dWVfc2lnbmFscygpOwotPiA0OTkzICAgICBvY3MgPSBjbWRzdGFjazsKICAgNDk5NCAgICAgb2Nz cCA9IGNtZHNwOwogICA0OTk1ICAgICBjbWRzdGFjayA9ICh1bnNpZ25lZCBjaGFyICopIHphbGxv YyhDTURTVEFDS1NaKTsKICAgNDk5NiAgICAgY21kc3AgPSAwOwoobGxkYikgcCBxdWV1ZWluZ19l bmFibGVkCihpbnQpICQxMzkgPSA0CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNTEzZCB6 c2gtNS4yLWRldi0yYHphbGxvYyhzaXplPTI1NikgKyA0NSBhdCBtZW0uYzo5NTYKICAgOTUzICAg ICAgaWYgKCFzaXplKQogICA5NTQgICAgICAgICAgc2l6ZSA9IDE7CiAgIDk1NSAgICAgIHF1ZXVl X3NpZ25hbHMoKTsKLT4gOTU2ICAgICAgaWYgKCEocHRyID0gKHZvaWQgKikgbWFsbG9jKHNpemUp KSkgewogICA5NTcgICAgICAgICAgemVycigiZmF0YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkiKTsK ICAgOTU4ICAgICAgICAgIGV4aXQoMSk7CiAgIDk1OSAgICAgIH0KKGxsZGIpIHAgcXVldWVpbmdf ZW5hYmxlZAooaW50KSAkMTQwID0gNQoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTUxYTIg enNoLTUuMi1kZXYtMmB6YWxsb2Moc2l6ZT0yNTYpICsgMTQ2IGF0IG1lbS5jOjk2MAogICA5NTcg ICAgICAgICAgemVycigiZmF0YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkiKTsKICAgOTU4ICAgICAg ICAgIGV4aXQoMSk7CiAgIDk1OSAgICAgIH0KLT4gOTYwICAgICAgdW5xdWV1ZV9zaWduYWxzKCk7 CiAgIDk2MQogICA5NjIgICAgICByZXR1cm4gcHRyOwogICA5NjMgIH0KKGxsZGIpIHAgcXVldWVp bmdfZW5hYmxlZAooaW50KSAkMTQxID0gNAoKICAgIGZyYW1lICMwOiAweDAwMDAwMDAxMGVmYTVh OTYgenNoLTUuMi1kZXYtMmB6aGFsbG9jKHNpemU9OCkgKyA1NCBhdCBtZW0uYzo2MDQKICAgNjAx ICAgICAgICogYnV0IHdlIHRoaW5rIHRoYXQgbm90aGluZyB1cHN0cmVhbSBvZiBmaGVhcCBoYXMg bW9yZSBmcmVlIHNwYWNlLAogICA2MDIgICAgICAgKiBzbyB3aHkgc3RhcnQgb3ZlciBhdCBoZWFw cyBqdXN0IGJlY2F1c2UgZmhlYXAgaGFzIHRvbyBsaXR0bGU/CiAgIDYwMyAgICAgICAqLwotPiA2 MDQgICAgICBmb3IgKGggPSAoZmhlYXAgPyBmaGVhcCA6IGhlYXBzKTsgaDsgaCA9IGgtPm5leHQp IHsKICAgNjA1ICAgICAgICAgIGhwID0gaDsKICAgNjA2ICAgICAgICAgIGlmIChBUkVOQV9TSVpF T0YoaCkgPj0gKG4gPSBzaXplICsgaC0+dXNlZCkpIHsKICAgNjA3ICAgICAgICAgICAgICB2b2lk ICpyZXQ7CihsbGRiKSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDE0MiA9IDUKCiAgICBmcmFt ZSAjMDogMHgwMDAwMDAwMTBlZmE1YjU3IHpzaC01LjItZGV2LTJgemhhbGxvYyhzaXplPTgpICsg MjQ3IGF0IG1lbS5jOjYxMQogICA2MDgKICAgNjA5ICAgICAgICAgICAgICBoLT51c2VkID0gbjsK ICAgNjEwICAgICAgICAgICAgICByZXQgPSBhcmVuYShoKSArIG4gLSBzaXplOwotPiA2MTEgICAg ICAgICAgICAgIHVucXVldWVfc2lnbmFscygpOwogICA2MTIgICNpZmRlZiBaU0hfSEVBUF9ERUJV RwogICA2MTMgICAgICAgICAgICAgIGxhc3RfaGVhcF9pZCA9IGgtPmhlYXBfaWQ7CiAgIDYxNCAg ICAgICAgICAgICAgaWYgKGhlYXBfZGVidWdfdmVyYm9zaXR5ICYgSERWX0FMTE9DKSB7CihsbGRi KSBwIHF1ZXVlaW5nX2VuYWJsZWQKKGludCkgJDE0MyA9IDQKCiAgICBmcmFtZSAjMDogMHgwMDAw MDAwMTBlZjY2N2E3IHpzaC01LjItZGV2LTJgZG9zaGZ1bmMoc2hmdW5jPTB4MDAwMDdmYTdlYzhk Mzk0MCwgZG9zaGFyZ3M9MHgwMDAwMDAwMTBmMzhiMTIwLCBub3JldHVybnZhbD0wKSArIDE1MSBh dCBleGVjLmM6NTIyMQogICA1MjE4CiAgIDUyMTkgICAgIHF1ZXVlX3NpZ25hbHMoKTsgICAgLyog TG90cyBvZiBtZW1vcnkgYW5kIGdsb2JhbCBzdGF0ZSBjaGFuZ2VzIGNvbWluZyAqLwogICA1MjIw Ci0+IDUyMjEgICAgIE5FV0hFQVBTKGZ1bmNoZWFwKSB7CiAgIDUyMjIgICAgICAgICBvYXJndjAg PSBOVUxMOwogICA1MjIzICAgICAgICAgb2JyZWFrcyA9IGJyZWFrczsKICAgNTIyNCAgICAgICAg IG9jb250ZmxhZyA9IGNvbnRmbGFnOwoobGxkYikgcCBxdWV1ZWluZ19lbmFibGVkCihpbnQpICQx NDQgPSA1CgogICAgZnJhbWUgIzA6IDB4MDAwMDAwMDEwZWZhNGJlNiB6c2gtNS4yLWRldi0yYG5l d19oZWFwcyArIDIyIGF0IG1lbS5jOjE5OQogICAxOTYgICAgICBIZWFwIGg7CiAgIDE5NwogICAx OTggICAgICBxdWV1ZV9zaWduYWxzKCk7Ci0+IDE5OSAgICAgIGggPSBoZWFwczsKICAgMjAwCiAg IDIwMSAgICAgIGZoZWFwID0gaGVhcHMgPSBOVUxMOwogICAyMDIgICAgICB1bnF1ZXVlX3NpZ25h bHMoKTsKKGxsZGIpIHAgcXVldWVpbmdfZW5hYmxlZAooaW50KSAkMTQ1ID0gNgoKLy8gdmltOmZ0 PWMK --94eb2c06569052653a053df3038e--