From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15704 invoked by alias); 4 May 2003 08:36:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 15684 invoked by uid 71); 4 May 2003 08:36:00 -0000 Resent-Date: 4 May 2003 08:36:00 -0000 Resent-Message-ID: <20030504083600.15683.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, duz@sol-3.de Received: (qmail 14566 invoked by uid 48); 4 May 2003 08:29:03 -0000 Message-Id: <20030504082903.14565.qmail@sources.redhat.com> Date: Sun, 04 May 2003 08:36:00 -0000 From: duz@sol-3.de Reply-To: duz@sol-3.de To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/10616: ICE with -fomit-frame-pointer -march=athlon-tbird X-SW-Source: 2003-05/txt/msg00220.txt.bz2 List-Id: >Number: 10616 >Category: optimization >Synopsis: ICE with -fomit-frame-pointer -march=athlon-tbird >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sun May 04 08:36:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Dirk Zoller >Release: unknown-1.0 >Organization: >Environment: Debian GNU/Linux "testing". >Description: Internal compiler error triggered by the attached source file, when compiled like this: /usr/bin/g++-3.2 -c -O -fverbose-asm -fomit-frame-pointer -march=athlon-tbird -fno-implicit-templates -fno-exceptions messages.ii >How-To-Repeat: Compile the provided file as specified. All the specified options are needed to trigger the bug. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="messages.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="messages.ii" CgoKCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwoK CgoKCgoKCgoKCgp0eXBlZGVmIGxvbmcgbG9uZyBsbG9uZ190Owp0eXBlZGVmIHVuc2lnbmVkIGxv bmcgbG9uZyB1bGxvbmdfdDsKdHlwZWRlZiBsbG9uZ190IG15X2Zwb3NfdDsKCgpuYW1lc3BhY2Ug c3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQpleHRlcm4gIkMr KyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgY2xhc3MgZXhjZXB0aW9uCiAgewogIHB1Ymxp YzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSB0 aHJvdygpOwoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpOwog IH07CgoKCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVi bGljOgogICAgYmFkX2V4Y2VwdGlvbigpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9l eGNlcHRpb24oKSB0aHJvdygpOwogIH07CgoKICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFu ZGxlcikgKCk7CgogIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgoKICB0 ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygp OwoKCiAgdm9pZCB0ZXJtaW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoK ICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0 aHJvdygpOwoKCiAgdm9pZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f XykpOwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKbmFtZXNwYWNlIF9f Z251X2N4eAp7CiAgdm9pZCBfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIgKCk7Cn0KCn0KCmV4 dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1Ymxp YyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KCgog ICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190 IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CgoKICB0eXBlZGVmIHZvaWQg KCpuZXdfaGFuZGxlcikoKTsKCiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5k bGVyKSB0aHJvdygpOwp9CnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0 ZDo6YmFkX2FsbG9jKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChz dGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lk IG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3Rk OjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3Ig bmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBv cGVyYXRvciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9p ZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp OwoKCmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhy b3coKSB7IHJldHVybiBfX3A7IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6 ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CgoKaW5saW5lIHZvaWQgb3Bl cmF0b3IgZGVsZXRlICh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9OwppbmxpbmUgdm9pZCBvcGVy YXRvciBkZWxldGVbXSh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9OwoKfQoKCgoKZXh0ZXJuICJD IiB2b2lkICptYWxsb2MgKHNpemVfdCk7CmV4dGVybiAiQyIgdm9pZCBmcmVlICh2b2lkICopOwoK CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCBzeikgeyByZXR1cm4gbWFsbG9jIChz eik7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3Qgc3opIHsgcmV0dXJuIG1h bGxvYyAoc3opOyB9CmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqcCkgeyBmcmVl IChwKTsgfQppbmxpbmUgdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqcCkgeyBmcmVlIChw KTsgfQoKCgoKCgplbnVtIHsgX3Nob3J0XzEsIF9zaG9ydF8wLCBfc2hvcnRfc2l6ZSB9OwplbnVt IHsgX2ludF8zLCBfaW50XzIsIF9pbnRfMSwgX2ludF8wLCBfaW50X3NpemUgfTsKZW51bSB7IF9s b25nXzcsIF9sb25nXzYsIF9sb25nXzUsIF9sb25nXzQsIF9sb25nXzMsIF9sb25nXzIsIF9sb25n XzEsIF9sb25nXzAsIF9sb25nX3NpemUgfTsKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFF1ZXVl CnsKcHVibGljOgogIGNsYXNzIE5vZGU7IGZyaWVuZCBjbGFzcyBOb2RlOwogIGNsYXNzIEl0OyBm cmllbmQgY2xhc3MgSXQ7Cgpwcml2YXRlOgogIE5vZGUgKl90YWlsOwogIE5vZGUgKl9oZWFkOwoK CiAgc3RhdGljIE5vZGUgKm5pbCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Tm9kZSAqPiAo fjBMKTsgfQoKcHVibGljOgoKICBjbGFzcyBOb2RlCiAgewogICAgTm9kZSAqX25leHQ7CgogICAg ZnJpZW5kIGNsYXNzIFF1ZXVlOwogICAgZnJpZW5kIGNsYXNzIFF1ZXVlOjpJdDsKCiAgcHVibGlj OgogICAgTm9kZSgpCiAgICAgIDogX25leHQgKFF1ZXVlOjpuaWwoKSkge30KCiAgICBOb2RlIChU ICpuZXh0KQogICAgICA6IF9uZXh0IChuZXh0KSB7fQoKICAgIFQgKnFuX25leHQoKSBjb25zdCB7 CiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUICo+IChfbmV4dCk7IH0KCiAgICBib29sIGlzX3F1 ZXVlZCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9uZXh0ICE9IFF1ZXVlOjpuaWwoKTsgfQogIH07 CgoKICBjbGFzcyBJdAogIHsKICAgIE5vZGUgKl9wOwoKICBwdWJsaWM6CiAgICBJdCAoUXVldWUg Y29uc3QgJnEpCiAgICAgIDogX3AgKHEuX2hlYWQpIHt9CgogICAgVCAqb3BlcmF0b3IoKSgpIGNv bnN0IHsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4gKF9wKTsgfQoKICAgIFQgKm9wZXJh dG9yKysoKSB7CiAgICAgIGlmIChfcCkKICAgICAgICBfcCA9IF9wLT5fbmV4dDsKICAgICAgcmV0 dXJuIHN0YXRpY19jYXN0PFQgKj4gKF9wKTsgfQoKICAgIFQgKm9wZXJhdG9yKysgKGludCkgewog ICAgICBOb2RlICpyID0gX3A7CiAgICAgIGlmIChfcCkKICAgICAgICBfcCA9IF9wLT5fbmV4dDsK ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4gKHIpOyB9CgoKCiAgICBUICZvcGVyYXRvcioo KSBjb25zdCB7IHJldHVybiAqc3RhdGljX2Nhc3Q8VCAqPiAoX3ApOyB9CiAgICBUICpvcGVyYXRv ci0+KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPiAoX3ApOyB9CiAgfTsKCgpwdWJs aWM6CiAgUXVldWUoKQogICAgOiBfdGFpbCAoMCkKICAgICwgX2hlYWQgKDApCiAge30KCiAgUXVl dWUgKFF1ZXVlICZxKQogICAgOiBfdGFpbCAocS5fdGFpbCkKICAgICwgX2hlYWQgKHEuX2hlYWQp CiAgewogICAgcS5fdGFpbCA9IDA7CiAgICBxLl9oZWFkID0gMDsKICB9CgoKCiAgVCAqcV9uZXh0 KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPiAoX2hlYWQpOyB9CiAgVCAqcV9sYXN0 KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPiAoX3RhaWwpOyB9CgoKICBUICpxX250 aCAoaW50IG4pIGNvbnN0CiAgewogICAgTm9kZSAqcCA9IF9oZWFkOwogICAgd2hpbGUgKC0tbiA+ PSAwKQogICAgICBpZiAocCA9PSAwKQogICAgICAgIHJldHVybiAwOwogICAgICBlbHNlCiAgICAg ICAgcCA9IHAtPl9uZXh0OwogICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4gKHApOwogIH0KCgog IHZvaWQgcV9hZGQgKFQgKml0ZW0pCiAgewogICAgTm9kZSAqaSA9IGl0ZW07CiAgICBpZiAoX3Rh aWwpCiAgICAgIF90YWlsLT5fbmV4dCA9IGk7CiAgICBlbHNlCiAgICAgIF9oZWFkID0gaTsKICAg IF90YWlsID0gaTsKICAgIGktPl9uZXh0ID0gMDsKICB9CgoKICBib29sIHFfcHVzaCAoVCAqaXRl bSkKICB7CiAgICBOb2RlICppID0gaXRlbTsKICAgIGl0ZW0tPl9uZXh0ID0gX2hlYWQ7CiAgICBf aGVhZCA9IGk7CiAgICBpZiAoX3RhaWwgPT0gMCkKICAgICAgX3RhaWwgPSBpOwogICAgcmV0dXJu IHRydWU7CiAgfQoKCgogIGJvb2wgcV9hZGRfY2hlY2tlZCAoVCAqaXRlbSkKICB7CiAgICBOb2Rl ICppID0gaXRlbTsKICAgIGlmIChpLT5fbmV4dCAhPSBuaWwoKSkKICAgICAgcmV0dXJuIGZhbHNl OwogICAgcV9hZGQgKGl0ZW0pOwogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgYm9vbCBxX3B1c2hf Y2hlY2tlZCAoVCAqaXRlbSkKICB7CiAgICBOb2RlICppID0gaXRlbTsKICAgIGlmIChpLT5fbmV4 dCAhPSBuaWwoKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcV9wdXNoIChpdGVtKTsKICAgIHJl dHVybiB0cnVlOwogIH0KCgogIFQgKnFfcmVtb3ZlKCkKICB7CiAgICBpZiAoX2hlYWQgPT0gMCkK ICAgICAgcmV0dXJuIDA7CiAgICBOb2RlICpyZXN1bHQgPSBfaGVhZDsKICAgIF9oZWFkID0gX2hl YWQtPl9uZXh0OwogICAgaWYgKF9oZWFkID09IDApCiAgICAgIF90YWlsID0gMDsKICAgIHJlc3Vs dC0+X25leHQgPSBuaWwoKTsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxUICo+IChyZXN1bHQpOwog IH0KCgogIFQgKnFfcmVtb3ZlIChUICppdGVtKQogIHsKICAgIE5vZGUgKmkgPSBpdGVtOwogICAg aWYgKF9oZWFkID09IDApCiAgICAgIHJldHVybiAwOwogICAgaWYgKGkgPT0gX2hlYWQpCiAgICAg IHsKICAgICAgICBfaGVhZCA9IF9oZWFkLT5fbmV4dDsKICAgICAgICBpZiAoX2hlYWQgPT0gMCkK ICAgICAgICAgIF90YWlsID0gMDsKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICAgTm9k ZSAqcCA9IF9oZWFkOwogICAgICAgIHdoaWxlIChwLT5fbmV4dCkKICAgICAgICAgIGlmIChwLT5f bmV4dCA9PSBpKQogICAgICAgICAgICBnb3RvIGZvdW5kOwogICAgICAgICAgZWxzZQogICAgICAg ICAgICBwID0gcC0+X25leHQ7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIGZvdW5kOgogICAgICAg IHAtPl9uZXh0ID0gaS0+X25leHQ7CiAgICAgICAgaWYgKHAtPl9uZXh0ID09IDApCiAgICAgICAg ICBfdGFpbCA9IHA7CiAgICAgIH0KICAgIGktPl9uZXh0ID0gbmlsKCk7CiAgICByZXR1cm4gaXRl bTsKICB9CgogIHZvaWQgcV9yZW1vdmVfYWxsKCkKICB7CiAgICB3aGlsZSAoX2hlYWQpCiAgICAg IHsKICAgICAgICBOb2RlICpwID0gX2hlYWQ7CiAgICAgICAgX2hlYWQgPSBfaGVhZC0+X25leHQ7 CiAgICAgICAgcC0+X25leHQgPSBuaWwoKTsKICAgICAgfQogICAgX3RhaWwgPSAwOwogIH0KCiAg dm9pZCBxX2RlbGV0ZV9hbGwoKQogIHsKICAgIHdoaWxlIChfaGVhZCkKICAgICAgewogICAgICAg IE5vZGUgKnAgPSBfaGVhZDsKICAgICAgICBfaGVhZCA9IF9oZWFkLT5fbmV4dDsKICAgICAgICBk ZWxldGUgc3RhdGljX2Nhc3Q8VCAqPiAocCk7CiAgICAgIH0KICAgIF90YWlsID0gMDsKICB9Cgog IFF1ZXVlICZxX3JldmVyc2UoKQogIHsKICAgIFF1ZXVlIHMgKCp0aGlzKTsKICAgIGZvciAoOzsp CiAgICAgIHsKICAgICAgICBUICpwID0gcy5xX3JlbW92ZSgpOwogICAgICAgIGlmIChwID09IDAp CiAgICAgICAgICBicmVhazsKICAgICAgICBxX3B1c2ggKHApOwogICAgICB9CiAgICByZXR1cm4g KnRoaXM7CiAgfQoKcHJpdmF0ZToKCiAgdm9pZCBfcV9tb3ZlX2ZpcnN0IChRdWV1ZSAmbykKICB7 CiAgICBvLl9oZWFkID0gby5fdGFpbCA9IF9oZWFkOwogICAgX2hlYWQgPSBfaGVhZC0+X25leHQ7 CiAgfQoKICBib29sIF9xX21vdmVfbm9kZSAoUXVldWUgJm8pCiAgewogICAgby5fdGFpbC0+X25l eHQgPSBfaGVhZDsKICAgIG8uX3RhaWwgPSBfaGVhZDsKICAgIF9oZWFkID0gX2hlYWQtPl9uZXh0 OwogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIF9xX2FwcGVuZCAoUXVldWUgJm8pCiAgewog ICAgaWYgKChfdGFpbC0+X25leHQgPSBvLl9oZWFkKSAhPSAwKQogICAgICBfdGFpbCA9IG8uX3Rh aWw7CiAgfQoKICB2b2lkIF9xX3NvcnQoKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxf X3N0ZGNhbGxfXykpOwoKcHVibGljOgoKCgogIHZvaWQgcV9zb3J0KCkKICB7CiAgICBpZiAoX2hl YWQgIT0gX3RhaWwpCiAgICAgIF9xX3NvcnQoKTsKICB9CgoKCiAgdm9pZCBxX2FwcGVuZCAoUXVl dWUgJm8pCiAgewogICAgaWYgKCZvID09IHRoaXMpCiAgICAgIHJldHVybjsKICAgIGlmIChfdGFp bCkKICAgICAgX3FfYXBwZW5kIChvKTsKICAgIGVsc2UKICAgICAgKnRoaXMgPSBvOwogICAgby5f aGVhZCA9IG8uX3RhaWwgPSAwOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkClF1ZXVl PFQ+OjpfcV9zb3J0KCkKewoKCiAgUXVldWUgYSwgYjsKICBfcV9tb3ZlX2ZpcnN0IChhKTsKICBf cV9tb3ZlX2ZpcnN0IChiKTsKICBmb3IgKDs7KQogICAgewogICAgICBpZiAoX2hlYWQgPT0gMCkg YnJlYWs7IF9xX21vdmVfbm9kZSAoYSk7CiAgICAgIGlmIChfaGVhZCA9PSAwKSBicmVhazsgX3Ff bW92ZV9ub2RlIChiKTsKICAgIH0KICBfdGFpbCA9IDA7CiAgYS5fdGFpbC0+X25leHQgPSAwOwog IGIuX3RhaWwtPl9uZXh0ID0gMDsKCgogIGEucV9zb3J0KCk7CiAgYi5xX3NvcnQoKTsKCgoKICBp ZiAoY29tcGFyZSAoKnN0YXRpY19jYXN0PFQgKj4gKGEuX2hlYWQpLAogICAgICAgICAgICAgICAq c3RhdGljX2Nhc3Q8VCAqPiAoYi5faGVhZCkpIDwgMCkKICAgIGEuX3FfbW92ZV9maXJzdCAoKnRo aXMpOwogIGVsc2UKICAgIGIuX3FfbW92ZV9maXJzdCAoKnRoaXMpOwoKICBmb3IgKDs7KQogICAg ewogICAgICBpZiAoYS5faGVhZCA9PSAwKSB7IF9xX2FwcGVuZCAoYik7IGJyZWFrOyB9CiAgICAg IGlmIChiLl9oZWFkID09IDApIHsgX3FfYXBwZW5kIChhKTsgYnJlYWs7IH0KCiAgICAgIGlmIChj b21wYXJlICgqc3RhdGljX2Nhc3Q8VCAqPiAoYS5faGVhZCksCiAgICAgICAgICAgICAgICAgICAq c3RhdGljX2Nhc3Q8VCAqPiAoYi5faGVhZCkpIDwgMCkKICAgICAgICBhLl9xX21vdmVfbm9kZSAo KnRoaXMpOwogICAgICBlbHNlCiAgICAgICAgYi5fcV9tb3ZlX25vZGUgKCp0aGlzKTsKICAgIH0K ICBfdGFpbC0+X25leHQgPSAwOwp9CnN0cnVjdCByZWNvcmRfdHlwZTsKc3RydWN0IG1lbWJlcl90 eXBlOwpzdHJ1Y3QgaW5kZXhfdHlwZTsKc3RydWN0IGluZGV4X21lbWJlcl90eXBlOwpzdHJ1Y3Qg ZmllbGRfdHlwZTsKCnN0cnVjdCByZWNvcmRfaW5mb190OwpzdHJ1Y3QgaW5kZXhfaW5mb190OwoK CgoKc3RydWN0IGxpbmdvX3R5cGU7CmNsYXNzIExpbmdvOwoKCgoKZW51bSBlbHRfdHlwZV9lbnVt CnsKICB0aWRfbm9uZSwKICB0aWRfYm9vbCwKICB0aWRfY2hhciwKICB0aWRfdGlueSwKICB0aWRf dXRpbnksCiAgdGlkX3Nob3J0LAogIHRpZF91c2hvcnQsCiAgdGlkX2ludCwKICB0aWRfdWludCwK ICB0aWRfbG9uZywKICB0aWRfdWxvbmcsCiAgdGlkX2ZpeGVkMiwKICB0aWRfZml4ZWQzLAogIHRp ZF9maXhlZDQsCiAgdGlkX2ZpeGVkNSwKICB0aWRfZmxvYXQsCiAgdGlkX2RvdWJsZSwKICB0aWRf ZGF0ZSwKICB0aWRfdGltZSwKICB0aWRfc3RyaW5nLAogIHRpZF9yZWNvcmQsCiAgdGlkX19tYXgK fTsKCnN0cnVjdCBpbmRleF9iYXNlX3R5cGU7CnN0cnVjdCBpbmRleF9tYXhfdHlwZTsKCgoKCnRl bXBsYXRlIDxjbGFzcyByZWNvcmRfdCwgY2xhc3MgaW5kZXhfdCwgY2xhc3MgZGVyaXZlZF90PiBj bGFzcyBSZWNTZXQ7CnRlbXBsYXRlIDxjbGFzcyBCYXNlTWFwLAogICAgICAgICAgY2xhc3MgcmVj b3JkX3QsIGNsYXNzIGluZGV4X3QsIGNsYXNzIHZhbHVlX3Q+IGNsYXNzIFdyYXBNYXA7CgoKCgpl bnVtIGluZGV4X2ZsYWdzX2VudW0KewogIGtmbGFnX3ByaW1hcnkgPSAxIDw8IDAsCiAga2ZsYWdf dW5pcXVlID0gMSA8PCAxLAogIGtmbGFnX2R1cGxpY2F0ZXMgPSAxIDw8IDIsCiAga2ZsYWdfdGFi bGUgPSAxIDw8IDMKfTsKc3RydWN0IHNlbnRlbmNlX2hlYWRlcl9kZWZzCnsKICBlbnVtCiAgewoK CiAgICB2ZXJiX2JpdHMgPSAzLCB2ZXJiX21hc2sgPSAoMSA8PCAzKSAtIDEsCiAgICBhZHZlcmJf Yml0cyA9IDQsIGFkdmVyYl9tYXNrID0gKDEgPDwgNCkgLSAxLAogICAgZmxhZ3NfYml0cyA9IDYs IGZsYWdzX21hc2sgPSAoMSA8PCA2KSAtIDEsCiAgICBub3VuX2JpdHMgPSAxNSwgbm91bl9tYXNr ID0gKDEgPDwgMTUpIC0gMSwKICAgIGNvdW50X2JpdHMgPSAyMCwgY291bnRfbWFzayA9ICgxIDw8 IDIwKSAtIDEsCgogICAgaGVhZGVyX2JpdHMgPSA0OCwKCgogICAgaW5kZXhfYml0cyA9IDQsIGlu ZGV4X21hc2sgPSAoMSA8PCA0KSAtIDEsCiAgICB0eXBlX2JpdHMgPSAxMSwgdHlwZV9tYXNrID0g KDEgPDwgMTEpIC0gMQoKICB9OwoKCgogIHN0YXRpYyB1bnNpZ25lZCBtYWtlX2lpZCAodW5zaWdu ZWQgcmVjb3JkX2lkLCB1bnNpZ25lZCBpbmRleF9pZCkgewogICAgcmV0dXJuIGluZGV4X2lkICsg MSA8PCB0eXBlX2JpdHMgfCByZWNvcmRfaWQ7IH0KCgoKICBzdGF0aWMgaW50IGdldF9pbmRleF9p ZCAodW5zaWduZWQgaWlkKSB7CiAgICByZXR1cm4gaW50IChpaWQgPj4gdHlwZV9iaXRzICYgaW5k ZXhfbWFzaykgLSAxOyB9CgoKICBzdGF0aWMgdW5zaWduZWQgZ2V0X3JlY29yZF9pZCAodW5zaWdu ZWQgaWlkKSB7CiAgICByZXR1cm4gaWlkICYgdHlwZV9tYXNrOyB9CgogIHN0YXRpYyBib29sIGlz X2luZGV4ICh1bnNpZ25lZCBpaWQpIHsKICAgIHJldHVybiAoaWlkID4+IHR5cGVfYml0cyAmIGlu ZGV4X21hc2spICE9IDA7IH0KfTsKZW51bSB2ZXJiX3R5cGUKewoKICB2X2hhbmRsZSwgdl9sb2Fk LCB2X3N0b3JlLCB2X3JlbW92ZSwKCiAgZW51bV92ZXJiX3R5cGVfbWF4Cn07CgplbnVtIGFkdmVy Yl90eXBlCnsKCiAgYXZfbm9uZSwgYXZfY29udGQsIGF2X2Fuc3dlciwgYXZfc3luY2gsIGF2X3Jh bmdlLCBhdl9maXJzdCwgYXZfbGFzdCwKCiAgZW51bV9hZHZlcmJfdHlwZV9tYXgKfTsKCmVudW0g c2VudGVuY2VfZmxhZ19lbnVtCnsKCiAgc2Zfbm9fYW5zd2VyLCBzZl9ub19zdGF0dXMsIHNmX25v X3N1YnNjcmliZSwgc2Zfbm9fcmFuZ2UsCgogIGVudW1fc2VudGVuY2VfZmxhZ19tYXgKfTsKCmVu dW0gc2VudGVuY2VfZmxhZ190eXBlCnsKCiAgc2ZfYW5zd2VyID0gMSA8PCBzZl9ub19hbnN3ZXIs IHNmX3N0YXR1cyA9IDEgPDwgc2Zfbm9fc3RhdHVzLCBzZl9zdWJzY3JpYmUgPSAxIDw8IHNmX25v X3N1YnNjcmliZSwgc2ZfcmFuZ2UgPSAxIDw8IHNmX25vX3JhbmdlLAoKICBzZW50ZW5jZV9iaXRz X21hc2sgPSAoMSA8PCBlbnVtX3NlbnRlbmNlX2ZsYWdfbWF4KSAtIDEKfTsKCnN0cnVjdCB2ZXJi X2Rlc2NfdHlwZTsKc3RydWN0IGFkdmVyYl9kZXNjX3R5cGU7CnN0cnVjdCBmbGFnX2Rlc2NfdHlw ZTsKCgoKCmNsYXNzIFNlbnRlbmNlOwp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgU2VudGVuY2VU OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB2ZXJiX3JlcF90eXBlOwp0eXBlZGVmIHVuc2ln bmVkIHNob3J0IG5vdW5fcmVwX3R5cGU7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgY291bnRfcmVw X3R5cGU7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1lc3NhZ2VfcmVmX3R5cGU7CgpjbGFz cyBNZXNzYWdlOwoKCgoKCgoKCgoKCgoKCmNsYXNzIFZlY3RvckJhc2UKewpwcm90ZWN0ZWQ6CiAg dm9pZCAqX3BvbGljeTsKICB2b2lkICpfZGF0YTsKICB1bnNpZ25lZCBfc2l6ZTsKICB1bnNpZ25l ZCBfY291bnQ7CgogIFZlY3RvckJhc2UoKSB7fQogIFZlY3RvckJhc2UgKHVuc2lnbmVkIGluaXRp YWxfY2FwYWNpdHkpIHsKICAgIF9zaXplID0gaW5pdGlhbF9jYXBhY2l0eTsgX2NvdW50ID0gMDsg fQogIHZvaWQgc3dhcCAoVmVjdG9yQmFzZSAmKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygz KSxfX3N0ZGNhbGxfXykpOwoKcHVibGljOgogIHVuc2lnbmVkIGNvdW50KCkgY29uc3QgeyByZXR1 cm4gX2NvdW50OyB9CiAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9zaXplOyB9CiAg dW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBfc2l6ZTsgfQp9OwoKCmNsYXNzIFNl dEJhc2UgOiBwdWJsaWMgVmVjdG9yQmFzZQp7CnByb3RlY3RlZDoKICB1bnNpZ25lZCBfYml0czsK ICB1bnNpZ25lZCBfbWFzazsKCiAgaW5saW5lIHVuc2lnbmVkIGggKHVuc2lnbmVkIEspIGNvbnN0 OwoKICB2b2lkIHNldF9jYXBhY2l0eSAodW5zaWduZWQgY2FwYWNpdHkpIF9fYXR0cmlidXRlX18o KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgU2V0QmFzZSAodW5zaWduZWQgaW5pdGlh bF9jYXBhY2l0eSkgewogICAgc2V0X2NhcGFjaXR5IChpbml0aWFsX2NhcGFjaXR5KTsgX2NvdW50 ID0gMDsgfQogIHZvaWQgc3dhcCAoU2V0QmFzZSAmKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f XygzKSxfX3N0ZGNhbGxfXykpOwoKcHVibGljOgogIFNldEJhc2UoKSB7fQogIHVuc2lnbmVkIGNh cGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX3NpemUgLyAyOyB9Cn07CgoKY2xhc3MgSXRlcmF0b3JC YXNlCnsKcHJvdGVjdGVkOgogIFZlY3RvckJhc2UgY29uc3QgKl92ZWN0b3I7CiAgdm9pZCAqX3Bv c2l0aW9uOwp9OwoKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBnZW5lcmljX3NldF90LCBjbGFzcyB3cmFw cGVkX3NldF90LCBjbGFzcyBtZW1iZXJfdD4KY2xhc3MgV3JhcFNldEl0IDogcHVibGljIGdlbmVy aWNfc2V0X3Q6Okl0CnsKICB0eXBlZGVmIHR5cGVuYW1lIGdlbmVyaWNfc2V0X3Q6Okl0IGdlbmVy aWNfaXRfdDsKCnB1YmxpYzoKICBXcmFwU2V0SXQgKHdyYXBwZWRfc2V0X3QgJnMpCiAgICA6IGdl bmVyaWNfaXRfdCAocykge30KCiAgbWVtYmVyX3Qgb3BlcmF0b3IoKSgpIGNvbnN0IHsKICAgIHJl dHVybiBzdGF0aWNfY2FzdDxtZW1iZXJfdD4gKGdlbmVyaWNfaXRfdDo6b3BlcmF0b3IoKSgpKTsg fQoKICBtZW1iZXJfdCBvcGVyYXRvcisrKCkgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PG1lbWJl cl90PiAoZ2VuZXJpY19pdF90OjpvcGVyYXRvcisrKCkpOyB9CgogIG1lbWJlcl90IG9wZXJhdG9y KysgKGludCkgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PG1lbWJlcl90PiAoZ2VuZXJpY19pdF90 OjpvcGVyYXRvcisrICgwKSk7IH0KfTsKCgp0ZW1wbGF0ZTxjbGFzcyBnZW5lcmljX21hcF90LCBj bGFzcyB3cmFwcGVkX21hcF90LCBjbGFzcyBrZXlfdCwgY2xhc3MgbWVtYmVyX3Q+CmNsYXNzIFdy YXBNYXBJdCA6IHB1YmxpYyBnZW5lcmljX21hcF90OjpJdAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBn ZW5lcmljX21hcF90OjpJdCBnZW5lcmljX2l0X3Q7CgpwdWJsaWM6CiAgV3JhcE1hcEl0ICh3cmFw cGVkX21hcF90ICZtKQogICAgOiBnZW5lcmljX2l0X3QgKG0pIHt9CgogIGtleV90IGtleSgpIGNv bnN0IHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxrZXlfdD4gKGdlbmVyaWNfaXRfdDo6a2V5KCkp OyB9CgogIG1lbWJlcl90ICZ2YWwoKSBjb25zdCB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz dDxtZW1iZXJfdCAmPiAoZ2VuZXJpY19pdF90Ojp2YWwoKSk7IH0KCiAgbWVtYmVyX3Qgb3BlcmF0 b3IoKSgpIGNvbnN0IHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxtZW1iZXJfdD4gKGdlbmVyaWNf aXRfdDo6b3BlcmF0b3IoKSgpKTsgfQoKICBtZW1iZXJfdCBvcGVyYXRvcisrKCkgewogICAgcmV0 dXJuIHN0YXRpY19jYXN0PG1lbWJlcl90PiAoZ2VuZXJpY19pdF90OjpvcGVyYXRvcisrKCkpOyB9 CgogIG1lbWJlcl90IG9wZXJhdG9yKysgKGludCkgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PG1l bWJlcl90PiAoZ2VuZXJpY19pdF90OjpvcGVyYXRvcisrICgwKSk7IH0KfTsKCgp0ZW1wbGF0ZTxj bGFzcyBrZXlfdCwgY2xhc3MgdmFsX3Q+CmNsYXNzIE51bU1hcCA6IHB1YmxpYyBTZXRCYXNlCnsK cHVibGljOgogIH5OdW1NYXAoKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNh bGxfXykpOwogIE51bU1hcCAoa2V5X3Qgbm9fa2V5ID0gMCwgdW5zaWduZWQgaW5pdGlhbF9jYXBh Y2l0eSA9IDgpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoK ICB2b2lkIHN3YXAgKE51bU1hcCAmb3RoZXIpIHsgU2V0QmFzZTo6c3dhcCAob3RoZXIpOyB9CgoK ICBib29sIGluY2x1ZGVzIChrZXlfdCkgY29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18o MyksX19zdGRjYWxsX18pKTsKCgogIHZhbF90IGF0IChrZXlfdCkgY29uc3QgX19hdHRyaWJ1dGVf XygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKICB2YWxfdCByZW1vdmUgKGtleV90 KSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgdm9pZCBy ZW1vdmVfYWxsICh1bnNpZ25lZCBpbml0aWFsX2NhcGFjaXR5KSBfX2F0dHJpYnV0ZV9fKChfX3Jl Z3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgoKICB2YWxfdCAmc2xvdCAoa2V5X3QpIF9fYXR0 cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgdmFsX3QgJm9wZXJhdG9y W10gKGtleV90IGspIHsgcmV0dXJuIHNsb3QgKGspOyB9CgoKICBjbGFzcyBJdCA6IHB1YmxpYyBJ dGVyYXRvckJhc2UKICB7CiAgcHVibGljOgogICAgSXQgKE51bU1hcDxrZXlfdCwgdmFsX3Q+ICYp IF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgICB2b2lkIHJl c2V0KCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKICAgIGJv b2wgZW5kKCkgY29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p KTsKICAgIGtleV90IGtleSgpIGNvbnN0IF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9f c3RkY2FsbF9fKSk7CiAgICB2YWxfdCAmdmFsKCkgY29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdw YXJtX18oMyksX19zdGRjYWxsX18pKTsKICAgIHZhbF90IG9wZXJhdG9yKCkoKSBjb25zdCBfX2F0 dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwogICAgdmFsX3Qgb3BlcmF0 b3IrKygpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgICB2 YWxfdCBvcGVyYXRvcisrKGludCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRj YWxsX18pKTsKICB9Owp9OwoKCnR5cGVkZWYgTnVtTWFwPGludCwgaW50PiBJbnRJbnRNYXA7CnR5 cGVkZWYgTnVtTWFwPHVsbG9uZ190LCB1bGxvbmdfdD4gVWxsVWxsTWFwOwp0ZW1wbGF0ZTxjbGFz cyBUPgpjbGFzcyBJbnRQdHJNYXAgOiBwdWJsaWMgTnVtTWFwPGludCwgdm9pZCAqPgp7CiAgdHlw ZWRlZiBOdW1NYXA8aW50LCB2b2lkICo+IGJhc2VfdDsKcHVibGljOgogIEludFB0ck1hcCAoaW50 IG5vX251bSA9IDAsIGludCBpbml0aWFsX3N6ID0gOCkKICAgIDogYmFzZV90IChub19udW0sIGlu aXRpYWxfc3opIHt9CgogIFQgKmF0IChpbnQgbikgY29uc3QgewogICAgcmV0dXJuIHN0YXRpY19j YXN0PFQgKj4gKGJhc2VfdDo6YXQgKG4pKTsgfQogIFQgKnJlbW92ZSAoaW50IG4pIHsKICAgIHJl dHVybiBzdGF0aWNfY2FzdDxUICo+IChiYXNlX3Q6OnJlbW92ZSAobikpOyB9CiAgVCAqJm9wZXJh dG9yW10gKGludCBuKSB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUIComPiAoYmFzZV90 OjpzbG90IChuKSk7IH0KICB2b2lkIHN3YXAgKEludFB0ck1hcCAmb3RoZXIpIHsKICAgIGJhc2Vf dDo6c3dhcCAob3RoZXIpOyB9CgogIHR5cGVkZWYgV3JhcE1hcEl0PGJhc2VfdCwgSW50UHRyTWFw PFQ+LCBpbnQsIFQgKj4gSXQ7CgogIHZvaWQgZGVsZXRlX3ZhbHVlcygpIHsKICAgIEl0IGl0ICgq dGhpcyk7CiAgICBmb3IgKFQgKnAgPSBpdCgpOyAhaXQuZW5kKCk7IHAgPSArK2l0KQogICAgICBk ZWxldGUgcDsgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgZml4ZWRfdCwgY2xhc3MgVD4KY2xhc3MgRml4 UHRyTWFwIDogcHVibGljIE51bU1hcDxpbnQsIHZvaWQgKj4KewogIHR5cGVkZWYgTnVtTWFwPGlu dCwgdm9pZCAqPiBiYXNlX3Q7CnB1YmxpYzoKICBGaXhQdHJNYXAgKGludCBpbml0aWFsX3N6ID0g OCkKICAgIDogYmFzZV90ICgoLTIxNDc0ODM2NDcgLTEpLCBpbml0aWFsX3N6KSB7fQoKICBUICph dCAoZml4ZWRfdCBjb25zdCAmbikgY29uc3QgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4g KGJhc2VfdDo6YXQgKG4ucmVwKCkpKTsgfQogIFQgKnJlbW92ZSAoZml4ZWRfdCBjb25zdCAmbikg ewogICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4gKGJhc2VfdDo6cmVtb3ZlIChuLnJlcCgpKSk7 IH0KICBUIComb3BlcmF0b3JbXSAoZml4ZWRfdCBjb25zdCAmbikgewogICAgcmV0dXJuIHJlaW50 ZXJwcmV0X2Nhc3Q8VCAqJj4gKGJhc2VfdDo6c2xvdCAobi5yZXAoKSkpOyB9CiAgdm9pZCBzd2Fw IChGaXhQdHJNYXAgJm90aGVyKSB7CiAgICBiYXNlX3Q6OnN3YXAgKG90aGVyKTsgfQoKICB0eXBl ZGVmIFdyYXBNYXBJdDxiYXNlX3QsIEZpeFB0ck1hcDxmaXhlZF90LCBUPiwgaW50LCBUICo+IGJh c2VfaXRfdDsKICBzdHJ1Y3QgSXQgOiBwdWJsaWMgYmFzZV9pdF90CiAgewogICAgSXQgKEZpeFB0 ck1hcCAmbSkKICAgICAgOiBiYXNlX2l0X3QgKG0pIHt9CiAgICBmaXhlZF90IGNvbnN0IGtleSgp IGNvbnN0IHsKICAgICAgcmV0dXJuIGZpeGVkX3QgKGJhc2VfdDo6SXQ6OmtleSgpLCAwKTsgfQog IH07CgogIHRlbXBsYXRlPGNsYXNzIHNvbWVfdD4KICB2b2lkIGFkZF9rZXlzX3RvIChzb21lX3Qg JmJhZykgewogICAgZm9yIChJdCBpdCAoKnRoaXMpOyAhaXQuZW5kKCk7ICsraXQpCiAgICAgIGJh Zy5hZGQgKGl0LmtleSgpKTsgfQoKICB2b2lkIGRlbGV0ZV92YWx1ZXMoKSB7CiAgICBJdCBpdCAo KnRoaXMpOwogICAgZm9yIChUICpwID0gaXQoKTsgIWl0LmVuZCgpOyBwID0gKytpdCkKICAgICAg ZGVsZXRlIHA7IH0KfTsKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBLLCBjbGFzcyBpbnRfdD4KY2xhc3Mg UHRySW50TWFwIDogcHVibGljIE51bU1hcDx2b2lkICosIHZvaWQgKj4KewogIHR5cGVkZWYgTnVt TWFwPHZvaWQgKiwgdm9pZCAqPiBiYXNlX3Q7CgpwdWJsaWM6CiAgUHRySW50TWFwIChpbnQgaW5p dF9zeiA9IDgpIDogYmFzZV90ICgwLCBpbml0X3N6KSB7fQoKICBpbnRfdCBhdCAoSyAqaykgY29u c3QgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50X3Q+IChiYXNlX3Q6OmF0IChrKSk7 IH0KICBpbnRfdCByZW1vdmUgKEsgKmspIHsKICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGlu dF90PiAoYmFzZV90OjpyZW1vdmUgKGspKTsgfQogIGludF90ICZvcGVyYXRvcltdIChLICprKSB7 CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRfdCAmPiAoYmFzZV90OjpzbG90IChrKSk7 IH0KICB2b2lkIHN3YXAgKFB0ckludE1hcCAmb3RoZXIpIHsKICAgIGJhc2VfdDo6c3dhcCAob3Ro ZXIpOyB9CgogIHR5cGVkZWYgV3JhcE1hcEl0PGJhc2VfdCwgUHRySW50TWFwPEssIGludF90Piwg SyAqLCBpbnRfdD4gSXQ7CgogIHZvaWQgZGVsZXRlX2tleXMoKSB7CiAgICBJdCBpdCAoKnRoaXMp OwogICAgZm9yICg7IEsgKmsgPSBpdC5rZXkoKTsgKytpdCkKICAgICAgZGVsZXRlIGs7IH0KfTsK CgoKCgp0ZW1wbGF0ZTxjbGFzcyBLLCBjbGFzcyBUPgpjbGFzcyBQdHJQdHJNYXAgOiBwdWJsaWMg TnVtTWFwPHZvaWQgKiwgdm9pZCAqPgp7CiAgdHlwZWRlZiBOdW1NYXA8dm9pZCAqLCB2b2lkICo+ IGJhc2VfdDsKCnB1YmxpYzoKICBQdHJQdHJNYXAgKGludCBpbml0X3N6ID0gOCkgOiBiYXNlX3Qg KDAsIGluaXRfc3opIHt9CgogIFQgKmF0IChLICprKSBjb25zdCB7CiAgICByZXR1cm4gc3RhdGlj X2Nhc3Q8VCAqPiAoYmFzZV90OjphdCAoaykpOyB9CiAgVCAqcmVtb3ZlIChLICprKSB7CiAgICBy ZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPiAoYmFzZV90OjpyZW1vdmUgKGspKTsgfQogIFQgKiZvcGVy YXRvcltdIChLICprKSB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUIComPiAoYmFzZV90 OjpzbG90IChrKSk7IH0KICB2b2lkIHN3YXAgKFB0clB0ck1hcCAmb3RoZXIpIHsKICAgIGJhc2Vf dDo6c3dhcCAob3RoZXIpOyB9CgogIHR5cGVkZWYgV3JhcE1hcEl0PGJhc2VfdCwgUHRyUHRyTWFw PEssIFQ+LCBLICosIFQgKj4gSXQ7CgogIHZvaWQgZGVsZXRlX2tleXMoKSB7CiAgICBJdCBpdCAo KnRoaXMpOwogICAgZm9yICg7IEsgKmsgPSBpdC5rZXkoKTsgKytpdCkKICAgICAgZGVsZXRlIGs7 IH0KCiAgdm9pZCBkZWxldGVfdmFsdWVzKCkgewogICAgSXQgaXQgKCp0aGlzKTsKICAgIGZvciAo VCAqcCA9IGl0KCk7IGl0LmtleSgpOyBwID0gKytpdCkKICAgICAgZGVsZXRlIHA7IH0KCiAgdm9p ZCBkZWxldGVfYWxsKCkgewogICAgSXQgaXQgKCp0aGlzKTsKICAgIGZvciAoVCAqdCA9IGl0KCk7 IEsgKmsgPSBpdC5rZXkoKTsgdCA9ICsraXQpIHsKICAgICAgZGVsZXRlIGs7IGRlbGV0ZSB0OyB9 IH0KfTsKdGVtcGxhdGUgPGNsYXNzIHZhbF90PgpjbGFzcyBDb25TdHJNYXBCYXNlIDogcHVibGlj IFNldEJhc2UKewpwdWJsaWM6CiAgfkNvblN0ck1hcEJhc2UoKSBfX2F0dHJpYnV0ZV9fKChfX3Jl Z3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwogIENvblN0ck1hcEJhc2UgKHVuc2lnbmVkIGluaXRp YWxfY2FwYWNpdHkgPSA4LCB1bnNpZ25lZCBsZW5ndGggPSAwKSBfX2F0dHJpYnV0ZV9fKChfX3Jl Z3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgYm9vbCBpbmNsdWRlcyAoY2hhciBjb25zdCAq cykgY29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgog IHZhbF90IGF0IChjaGFyIGNvbnN0ICpzKSBjb25zdCBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f XygzKSxfX3N0ZGNhbGxfXykpOwoKCgogIHZhbF90IHJlbW92ZSAoY2hhciBjb25zdCAqcykgX19h dHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgogIHZvaWQgcmVtb3Zl X2FsbCAodW5zaWduZWQgaW5pdGlhbF9jYXBhY2l0eSA9IDgpIF9fYXR0cmlidXRlX18oKF9fcmVn cGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCgogIHZhbF90ICZzbG90IChjaGFyIGNvbnN0ICpz KSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgdm9pZCBn cm93ICh1bnNpZ25lZCBuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxf XykpOwoKCiAgY2xhc3MgSXQgOiBwdWJsaWMgSXRlcmF0b3JCYXNlCiAgewogIHB1YmxpYzoKICAg IEl0IChDb25TdHJNYXBCYXNlICYpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3Rk Y2FsbF9fKSk7CiAgICB2b2lkIHJlc2V0KCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyks X19zdGRjYWxsX18pKTsKICAgIGJvb2wgZW5kKCkgY29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdw YXJtX18oMyksX19zdGRjYWxsX18pKTsKICAgIGNoYXIgY29uc3QgKmtleSgpIGNvbnN0IF9fYXR0 cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgICB2YWxfdCAmdmFsKCkg Y29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKICAgIHZh bF90IG9wZXJhdG9yKCkoKSBjb25zdCBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0 ZGNhbGxfXykpOwogICAgdmFsX3Qgb3BlcmF0b3IrKygpIF9fYXR0cmlidXRlX18oKF9fcmVncGFy bV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgICB2YWxfdCBvcGVyYXRvcisrIChpbnQpIF9fYXR0cmli dXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgfTsKfTsKCnR5cGVkZWYgQ29u U3RyTWFwQmFzZTxpbnQ+IENvblN0ckludE1hcDsKdHlwZWRlZiBDb25TdHJNYXBCYXNlPHZvaWQg Kj4gQ29uU3RyUHRyTWFwOwoKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIENvblN0ck1hcCA6IHB1 YmxpYyBDb25TdHJQdHJNYXAKewogIHR5cGVkZWYgQ29uU3RyUHRyTWFwIGJhc2VfdDsKcHVibGlj OgogIENvblN0ck1hcCAodW5zaWduZWQgaW5pdGlhbF9jYXBhY2l0eSA9IDgsIHVuc2lnbmVkIGxl bmd0aCA9IDApCiAgICA6IGJhc2VfdCAoaW5pdGlhbF9jYXBhY2l0eSwgbGVuZ3RoKSB7fQoKICBU ICphdCAoY2hhciBjb25zdCAqcykgY29uc3QgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4g KGJhc2VfdDo6YXQgKHMpKTsgfQogIFQgKnJlbW92ZSAoY2hhciBjb25zdCAqcykgewogICAgcmV0 dXJuIHN0YXRpY19jYXN0PFQgKj4gKGJhc2VfdDo6cmVtb3ZlIChzKSk7IH0KICBUIComb3BlcmF0 b3JbXSAoY2hhciBjb25zdCAqcykgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqJj4g KGJhc2VfdDo6c2xvdCAocykpOyB9CiAgVCAqJnNsb3QgKGNoYXIgY29uc3QgKnMpIHsKICAgIHJl dHVybiByZWludGVycHJldF9jYXN0PFQgKiY+IChiYXNlX3Q6OnNsb3QgKHMpKTsgfQogIHZvaWQg c3dhcCAoQ29uU3RyTWFwICZvdGhlcikgewogICAgYmFzZV90Ojpzd2FwIChvdGhlcik7IH0KCiAg dHlwZWRlZiBXcmFwTWFwSXQ8YmFzZV90LCBDb25TdHJNYXAsIGNoYXIgY29uc3QgKiwgVCAqPiBJ dDsKCiAgdm9pZCBkZWxldGVfYWxsKCkgewogICAgZm9yIChJdCBpdCAoKnRoaXMpOyBpdC5rZXko KTsgKytpdCkgZGVsZXRlIGl0KCk7IH0KfTsKCgoKCgoKZW51bSBzb2wzX2lkc19lbnVtCnsKCgoK CiAgcmlkX3NvbDNfdW5pcXVlLAogIHJpZF9zb2wzX3VuaXF1ZV9pZCwKICByaWRfc29sM19nbG9i YWxfaWQsCiAgcmlkX3NvbDNfbG9hZF9pZCwKICByaWRfc29sM19yZXZpc2lvbiwKICByaWRfc29s M19kYXRlX3RpbWUsCiAgcmlkX3NvbDNfbG9nX2VudHJ5X191bnVzZWQsCiAgcmlkX3NvbDNfYWNj ZXNzX2NvbnRyb2wsCiAgcmlkX3NvbDNfY29udHJvbGxlZCwKICByaWRfc29sM19uYW1lZCwKICBy aWRfc29sM19vd25lZCwKICByaWRfc29sM19ldmVudCwKICByaWRfc29sM190cmFuc2FjdGlvbiwK ICByaWRfc29sM19hdF9leGNoYW5nZSwKICByaWRfc29sM19leGNoYW5nZV9ldmVudCwKCiAgcmlk X3NvbDNfdXNlciwKICByaWRfc29sM19ncm91cCwKICByaWRfc29sM19jdXN0b21lciwKICByaWRf c29sM19hY2NvdW50LAogIHJpZF9zb2wzX3JlZ2lzdGVyX3hjaGdpZiwKICByaWRfc29sM19wYWly LAoKICByaWRfc29sM190cmFkZXIsCgogIHJpZF9zb2wzX3RpY2tfc2l6ZSwKICByaWRfc29sM19p bnN0cnVtZW50LAogIHJpZF9zb2wzX2Rlcml2YXRpdmUsCiAgcmlkX3NvbDNfZGVyaXZhdGl2ZV9j bnRyLAogIHJpZF9zb2wzX2NudHJfZ3JvdXBfMSwKICByaWRfc29sM19jbnRyX2dyb3VwXzIsCiAg cmlkX3NvbDNfY250cl9ncm91cF8zLAogIHJpZF9zb2wzX3NwcmVhZF9kZWYsCiAgcmlkX3NvbDNf c3ByZWFkLAoKICByaWRfc29sM19pbnN0cl9zdG9jaywKICByaWRfc29sM19kaXZpZGVuZCwKCiAg cmlkX3NvbDNfaW5zdHJfaW5kZXgsCgogIHJpZF9zb2wzX2luc3RyX2Z1dHVyZSwKICByaWRfc29s M19pbnN0cl9mdXR1cmVfY250ciwKCiAgcmlkX3NvbDNfaW5zdHJfb3B0aW9uLAogIHJpZF9zb2wz X2luc3RyX29wdGlvbl9jbnRyLAoKICByaWRfc29sM19pbnN0cl9jdXJyZW5jeSwKCiAgcmlkX3Nv bDNfbWFya2V0X2VudHJ5LAogIHJpZF9zb2wzX21hcmtldF9jb3JyLAogIHJpZF9zb2wzX21hcmtl dF9kaWZmLAogIHJpZF9zb2wzX21hcmtldCwKICByaWRfc29sM190aWNrLAogIHJpZF9zb2wzX3By aWNlcywKCiAgcmlkX3NvbDNfdGhlb19wYXJhbWV0ZXJzLAogIHJpZF9zb2wzX3RoZW9fcGF5bWVu dCwKICByaWRfc29sM190aGVvX2lucHV0LAogIHJpZF9zb2wzX3RoZW9fb3V0cHV0LAoKICByaWRf c29sM19kcmF3bl9mdW5jdGlvbiwKICByaWRfc29sM19jb25zdF9yYXRlLAogIHJpZF9zb2wzX2Ry YXduX3JhdGUsCiAgcmlkX3NvbDNfY29uc3Rfdm9sYSwKICByaWRfc29sM19kcmF3bl92b2xhLAog IHJpZF9zb2wzX3NrZXdlZF92b2xhLAogIHJpZF9zb2wzX3NtaWxlX3NoYXBlLAogIHJpZF9zb2wz X2tpX3N0YXRpY19zbWlsZSwKICByaWRfc29sM19raV9keW5hbWljX3NtaWxlLAogIHJpZF9zb2wz X3ZvbGFfZ3JvdXAsCiAgcmlkX3NvbDNfdm9sYV9jdXJ2ZSwKICByaWRfc29sM19yYXRlX2N1cnZl LAoKICByaWRfc29sM190cmFkaW5nX3RpbWVfdmFsLAogIHJpZF9zb2wzX3JlYWxfbWFya2V0X3Zh bCwKICByaWRfc29sM19jb21ib19tYXJrZXRfdmFsLAogIHJpZF9zb2wzX3JlYWxfbWFya2V0X3Np ZGVfdmFsLAogIHJpZF9zb2wzX3JlYWxfcHJpY2VfdmFsLAogIHJpZF9zb2wzX2NvbWJvX3ByaWNl X3ZhbCwKICByaWRfc29sM19raV9keW5hbWljX3NtaWxlX3ZhbCwKICByaWRfc29sM19jb25zdF9k aXNjb3VudF9wcmljZV92YWwsCiAgcmlkX3NvbDNfZGlzY291bnRfcHJpY2VfdmFsLAogIHJpZF9z b2wzX3JhdGVfdmFsLAogIHJpZF9zb2wzX2ltbWVkaWF0ZV9jb25zdF9yYXRlX3ZhbCwKICByaWRf c29sM190aGVvX21hcmtldF92YWwsCiAgcmlkX3NvbDNfdGhlb19tYXJrZXRfZ3JvdXBfdmFsLAog IHJpZF9zb2wzX2F1dG9fdGhlb192YWwsCiAgcmlkX3NvbDNfaW1wbGllZF92b2xhX3ZhbCwKICBy aWRfc29sM19wb3NpdGlvbl92YWwsCiAgcmlkX3NvbDNfY29udHJhY3RfcG9zX3ZhbCwKICByaWRf c29sM19jb250cmFjdF9wb3NfdGhlb192YWwsCiAgcmlkX3NvbDNfZnV0dXJlX3RoZW9fbWFya2V0 X3ZhbCwKICByaWRfc29sM19wb3J0Zm9saW9fdmFsLAogIHJpZF9zb2wzX3BvcnRmb2xpb19wb3Nf dmFsLAogIHJpZF9zb2wzX3BvcnRmb2xpb19wb3NfdGhlb192YWwsCgogIHJpZF9zb2wzX29yZGVy ZGF0YSwKICByaWRfc29sM19vcmRlciwKICByaWRfc29sM19vcmRlcnN0YXRlLAogIHJpZF9zb2wz X29yZGVybG9nLAoKICByaWRfc29sM190cmFkZSwKCiAgcmlkX3NvbDNfdHJhbnNmZXIsCiAgcmlk X3NvbDNfcG9zaXRpb24sCgogIHJpZF9zb2wzX3BvcnRmb2xpbywKICByaWRfc29sM19wb3J0Zm9s aW9fbWJyLAoKICByaWRfc29sM19reWVfdGhlb19kb21haW4sCiAgcmlkX3NvbDNfa3llX3Rhc2ss CiAgcmlkX3NvbDNfa3llX3Rhc2tfdmFsLAogIHJpZF9zb2wzX2t5ZV9zdGF0aXN0aWNzLAogIHJp ZF9zb2wzX2t5ZV9zdGF0dXMsCgogIHJpZF9zb2wzX3Jlc291cmNlX3NldCwKICByaWRfc29sM19y ZXNvdXJjZV9rZXksCiAgcmlkX3NvbDNfcmVzb3VyY2UsCiAgcmlkX3NvbDNfcmVzb3VyY2VfdmFs LAoKCiAgcmlkX3NvbDNfYXV0b19vcHBvcnR1bml0eV92YWwsCiAgcmlkX3NvbDNfZGl2aWRlbmRf c2V0LAogIHJpZF9zb2wzX2F1dG9fZGFydGJvYXJkX3ZhbCwKICByaWRfc29sM19vd25fb3JkZXJf dmFsLAogIHJpZF9zb2wzX3BvcnRmb2xpb19jdHJfYWNjc192YWwsCiAgcmlkX3NvbDNfcXVvdGUs CiAgcmlkX3NvbDNfcXVvdGVfcmVxdWVzdCwKICByaWRfc29sM19pbnN0cl9jb21ibywKICByaWRf c29sM19pbnN0cl9jb21ib19tZW1iZXIsCgoKICByaWRfc29sM19ub19yZWNvcmQsCiAgcmlkX3Nv bDNfZ2VuZXJpYywKICByaWRfc29sM19zdGF0dXMsCiAgcmlkX3NvbDNfa2V5X2V4Y2hhbmdlLAog IHJpZF9zb2wzX2FwcGxpY2F0aW9uLAogIHJpZF9zb2wzX2FwcF9sb2dpbiwKICByaWRfc29sM19z ZXRfZGF0ZSwKICByaWRfc29sM191c2VyX2xvZ2luXzEsCiAgcmlkX3NvbDNfdXNlcl9sb2dpbl8y LAogIHJpZF9zb2wzX3VzZXJfbG9naW5fMywKICByaWRfc29sM191c2VyX2xvZ2luXzQsCiAgcmlk X3NvbDNfcGFzc3dvcmRfY2hhbmdlLAogIHJpZF9zb2wzX2xvZ2luX2luZm8sCiAgcmlkX3NvbDNf bG9nb3V0X2luZm8sCiAgcmlkX3NvbDNfbGljZW5zZSwKICByaWRfc29sM19saWNlbnNlX2luZm8s CiAgcmlkX3NvbDNfYWRtaW5fcmVxdWVzdCwKICByaWRfc29sM19hZG1pbl9jb21tYW5kLAogIHJp ZF9zb2wzX3JlcmVxdWVzdCwKICByaWRfc29sM19zb2wzZF9zdGFydCwKICByaWRfc29sM19pbnF1 aXJlX2NvbW1fZGV0YWlscywKICByaWRfc29sM19jb21tX2RldGFpbHMsCgoKICByaWRfc29sM19x dW90ZV9zaWRlLAogIHJpZF9zb2wzX2V4Y2hhbmdlX3B1YmxpYywKICByaWRfc29sM19leGNoYW5n ZV9wcml2YXRlX191bnVzZWQsCiAgcmlkX3NvbDNfbmV3cywKICByaWRfc29sM19mZWVfZGVmLAog IHJpZF9zb2wzX2ZlZV9zdHJ1Y3R1cmUsCgogIHJpZF9zb2wzX3JlZ2lzdGVyX29kcnBkciwKICBy aWRfc29sM19vcmRlcl9yb3V0ZSwKICByaWRfc29sM19pbnN0cl9jb21ib19jbnRyLAoKCgoKICBy aWRfc29sM190aWNrX2N1cnZlX3ZhbCwKICByaWRfc29sM19xdW90ZV92YWwsCiAgcmlkX3NvbDNf cXVvdGVfcmVxX3ZhbCwKICByaWRfc29sM19reWVfcmF0ZV92YWwsCiAgcmlkX3NvbDNfa3llX2Vl eWVfdmFsLAogIHJpZF9zb2wzX2t5ZV9xdW90ZV9leWVfdmFsLAogIHJpZF9zb2wzX2t5ZV9xdW90 ZXJfdmFsLAogIHJpZF9zb2wzX2t5ZV9xdW90ZXJfZ3JvdXBfdmFsLAogIHJpZF9zb2wzX2NsaWNr X3F0eV92YWwsCiAgcmlkX3NvbDNfcG9zX3ZhbCwKICByaWRfc29sM19wb3NfbWt0X3ZhbCwKICBy aWRfc29sM19wb3NfdGhlb192YWwsCiAgcmlkX3NvbDNfcG5sX3ZhbCwKICByaWRfc29sM19wbmxf bWt0X3ZhbCwKICByaWRfc29sM19wbmxfdGhlb192YWwsCiAgcmlkX3NvbDNfYXV0b19yYXRlX3Zh bCwKICByaWRfc29sM19hdXRvX3ZvbGFfdmFsLAogIHJpZF9zb2wzX3ZvbGFfdmFsLAogIHJpZF9z b2wzX3Bvc19lcXVpdl92YWwsCiAgcmlkX3NvbDNfcHJpY2VzX3ZhbCwKICByaWRfc29sM19tYXZn X2N1cnZlX3ZhbCwKICByaWRfc29sM19kaXZpZGVuZF92YWwsCiAgcmlkX3NvbDNfY29tYm9fcHJp Y2VzX3ZhbCwKICByaWRfc29sM19yaXNrX29mZnNldF92YWwsCiAgcmlkX3NvbDNfYXV0b192YWws CiAgcmlkX3NvbDNfcmlza19vZmZzZXQsCiAgcmlkX3NvbDNfY3VycmVuY3lfY3Z0X3ZhbCwKICBy aWRfc29sM190cmFkZV92b2x1bWVfdmFsLAoKICByaWRfc29sM19tYXJrZXRfbW92ZV92YWwsCiAg cmlkX3NvbDNfdGlja2VyX3ZhbCwKCiAgcmlkX3NvbDNfbWFjaF9rZXksCiAgcmlkX3NvbDNfbWFj aF90a2V5LAogIHJpZF9zb2wzX21hY2hfY3RsLAogIHJpZF9zb2wzX21hY2hfc3RhdGUsCgogIHJp ZF9zb2wzX21hY2hfc2VsLAogIHJpZF9zb2wzX21hY2hfdmFsLAogIHJpZF9zb2wzX21hY2hfc2Vs X3ZhbCwKCiAgcmlkX3NvbDNfa3llX2VkZ2VfdmFsLAogIHJpZF9zb2wzX21hY2hfa3llX3ZhbCwK ICByaWRfc29sM19tYWNoX2t5ZV9xcmFfdmFsLAogIHJpZF9zb2wzX21hY2hfcW1fdmFsLAoKICBy aWRfc29sM19tYWNoX3Nob3RzX3ZhbCwKICByaWRfc29sM19tYWNoX3N0YXRpc3RpY3MsCiAgcmlk X3NvbDNfbWFjaF9zdGF0LAoKICByaWRfc29sM19tYWNoX2F1dG9kZWxfdmFsLAoKICByaWRfc29s M19hdXRvX2dycF92YWwsCiAgcmlkX3NvbDNfYXV0b190aGVvX2dycF92YWwsCgogIHJpZF9zb2wz X19tYXgKfTsKc3RydWN0IGZpZWxkX3R5cGUKewogIGZpZWxkX3R5cGUgY29uc3QgKnByZXY7CiAg Y2hhciBjb25zdCAqbmFtZTsKICBjaGFyIGNvbnN0ICpkb2M7CiAgdW5zaWduZWQgc2hvcnQgdHlw ZTsKICB1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CiAgdW5zaWduZWQgc2hvcnQgc2l6ZTsKICByZWNv cmRfdHlwZSBjb25zdCAqcmVjb3JkOwogIGluZGV4X3R5cGUgY29uc3QgKnNlbGVjdHM7Cn07CgoK CnN0cnVjdCBwYXJlbnRfdHlwZQp7CiAgcmVjb3JkX3R5cGUgY29uc3QgKnJlY29yZDsKICB1bnNp Z25lZCBvZmZzZXQ7Cn07CgoKCnN0cnVjdCBtZW1iZXJfdHlwZQp7CiAgY2hhciBjb25zdCAqbmFt ZTsKICBjaGFyIGNvbnN0ICpkb2M7CiAgZmllbGRfdHlwZSBjb25zdCAqZmllbGQ7CiAgcmVjb3Jk X3R5cGUgY29uc3QgKnJlY29yZDsKICB1bnNpZ25lZCBzaG9ydCBjb3VudDsKICB1bnNpZ25lZCBz aG9ydCBvZmZzZXQ7Cn07CgoKCnN0cnVjdCByZWNvcmRfdHlwZQp7CiAgcmVjb3JkX3R5cGUgY29u c3QgKnByZXY7CiAgY2hhciBjb25zdCAqbmFtZTsKICBjaGFyIGNvbnN0ICpkb2M7CiAgdW5zaWdu ZWQgc2hvcnQgdHlwZV9pZDsKICB1bnNpZ25lZCBzaG9ydCBzaXplOwogIHVuc2lnbmVkIHNob3J0 IG5pbmRpY2VzOwogIHVuc2lnbmVkIHNob3J0IGZsYWdzOwogIHBhcmVudF90eXBlIGNvbnN0ICpj b25zdCAqcGFyZW50czsKICBtZW1iZXJfdHlwZSBjb25zdCAqY29uc3QgKm1lbWJlcnM7CiAgaW5k ZXhfdHlwZSBjb25zdCAqY29uc3QgKmluZGljZXM7Cn07CgoKCgoKCnN0cnVjdCBpbmRleF9tZW1i ZXJfdHlwZQp7CiAgbWVtYmVyX3R5cGUgY29uc3QgKm1lbWJlcjsKICB1bnNpZ25lZCBzaG9ydCBy ZWNvcmRfb2Zmc2V0OwogIHVuc2lnbmVkIHNob3J0IGluZGV4X29mZnNldDsKfTsKCgoKCnN0cnVj dCBpbmRleF90eXBlCnsKICBjaGFyIGNvbnN0ICpuYW1lOwogIGNoYXIgY29uc3QgKmRvYzsKICB1 bnNpZ25lZCBzaG9ydCB0eXBlX2lkOwogIHVuc2lnbmVkIHNob3J0IHNpemU7CiAgdW5zaWduZWQg c2hvcnQgZmxhZ3M7CiAgcmVjb3JkX3R5cGUgY29uc3QgKnJlY29yZDsKICBpbmRleF9tZW1iZXJf dHlwZSBjb25zdCAqY29uc3QgKm1lbWJlcnM7Cn07CgoKCgoKCnN0cnVjdCBmbGF0X21lbWJlcl90 eXBlCnsKICBjaGFyIGNvbnN0ICpuYW1lOwogIGZpZWxkX3R5cGUgY29uc3QgKmZpZWxkOwogIHVu c2lnbmVkIHNob3J0IG9mZnNldDsKfTsKCnN0cnVjdCBmbGF0X2luZGV4X3R5cGUKewogIGZsYXRf bWVtYmVyX3R5cGUgY29uc3QgKm1lbWJlcnM7CiAgdW5zaWduZWQgc2hvcnQgbm1lbWJlcnM7Cn07 CgpzdHJ1Y3QgZmxhdF9yZWNvcmRfdHlwZQp7CiAgZmxhdF9tZW1iZXJfdHlwZSBjb25zdCAqbWVt YmVyczsKICBmbGF0X2luZGV4X3R5cGUgY29uc3QgKmluZGljZXM7CiAgdW5zaWduZWQgc2hvcnQg bm1lbWJlcnM7CiAgdW5zaWduZWQgc2hvcnQgbmluZGljZXM7Cn07CgoKCgoKc3RydWN0IGxpbmdv X3R5cGUKewogIGNoYXIgY29uc3QgKm5hbWU7CiAgZmllbGRfdHlwZSBjb25zdCAqbGFzdF9maWVs ZDsKICByZWNvcmRfdHlwZSBjb25zdCAqbGFzdF9yZWNvcmQ7Cn07CgoKCgoKc3RydWN0IGluZGV4 X2luZm9fdAp7CiAgdW5zaWduZWQgc2hvcnQgbGluZWFyX3NpemU7CiAgdW5zaWduZWQgc2hvcnQg Y29sdW1uczsKICB1bnNpZ25lZCBzaG9ydCBjcmM7Cn07Cgp0eXBlZGVmIF9fYXR0cmlidXRlX18o KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgYm9vbCB2YWxpZGF0ZV90ICgKICByZWNvcmRf dHlwZSBjb25zdCAmLCBtZW1iZXJfdHlwZSBjb25zdCAmLCB2b2lkIGNvbnN0ICosIGNoYXIgKmV4 cGxhaW4pOwoKc3RydWN0IHJlY29yZF9pbmZvX3QKewogIGluZGV4X2luZm9fdCAqaW5kZXhfaW5m bzsKICBpbmRleF90eXBlIGNvbnN0ICpwcmltYXJ5X2luZGV4OwogIHZhbGlkYXRlX3QgKnZhbGlk YXRlOwogIHVuc2lnbmVkIHNob3J0IGxpbmVhcl9zaXplOwogIHVuc2lnbmVkIHNob3J0IGNvbHVt bnM7CiAgdW5zaWduZWQgc2hvcnQgY3JjOwogIHVuc2lnbmVkIHNob3J0IHVuaXFfbWFzazsKfTsK CgpjbGFzcyBMaW5nbwp7CgogIHN0YXRpYyBQdHJJbnRNYXA8Y2hhciwgaW50PiBfcmVmY291bnQ7 CgoKICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgKl9yZWNvcmRbXTsKICBzdGF0aWMgcmVjb3Jk X2luZm9fdCAqX3JlY29yZF9pbmZvW107CgoKICBzdGF0aWMgQ29uU3RyTWFwPGZpZWxkX3R5cGU+ IF9maWVsZHNfYnlfbmFtZTsKICBzdGF0aWMgQ29uU3RyTWFwPHJlY29yZF90eXBlPiBfcmVjb3Jk c19ieV9uYW1lOwogIHN0YXRpYyBDb25TdHJNYXA8aW5kZXhfdHlwZT4gX2luZGljZXNfYnlfbmFt ZTsKCgogIGxpbmdvX3R5cGUgY29uc3QgJl9saW5nbzsKCnB1YmxpYzoKICB+TGluZ28oKSBfX2F0 dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwogIExpbmdvIChsaW5nb190 eXBlIGNvbnN0ICYpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7 CgoKICBvcGVyYXRvciBsaW5nb190eXBlIGNvbnN0ICYoKSBjb25zdCB7IHJldHVybiBfbGluZ287 IH0KCgogIGNoYXIgY29uc3QgKm5hbWUoKSBjb25zdCB7IHJldHVybiBfbGluZ28ubmFtZTsgfQog IHJlY29yZF90eXBlIGNvbnN0ICphdCAodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gX3JlY29y ZFtpXTsgfQoKCgoKCgogIHN0YXRpYyByZWNvcmRfdHlwZSBjb25zdCAqZ2V0X3JlY29yZCAodW5z aWduZWQgbm91bikgewogICAgcmV0dXJuIG5vdW4gPCByaWRfc29sM19fbWF4ID8gX3JlY29yZFtu b3VuXSA6IDA7IH0KCiAgc3RhdGljIGluZGV4X3R5cGUgY29uc3QgKmdldF9pbmRleCAodW5zaWdu ZWQgbm91bikgewogICAgdW5zaWduZWQgcmlkID0gc2VudGVuY2VfaGVhZGVyX2RlZnM6OmdldF9y ZWNvcmRfaWQgKG5vdW4pOwogICAgdW5zaWduZWQgaWlkID0gc2VudGVuY2VfaGVhZGVyX2RlZnM6 OmdldF9pbmRleF9pZCAobm91bik7CiAgICByZWNvcmRfdHlwZSBjb25zdCAqcmRlc2MgPSBnZXRf cmVjb3JkIChyaWQpOwogICAgcmV0dXJuIHJkZXNjICYmIGlpZCA8IHJkZXNjLT5uaW5kaWNlcyA/ IHJkZXNjLT5pbmRpY2VzW2lpZF0gOiAwOyB9CgoKICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3Qg JnJlY29yZCAodW5zaWduZWQgcmlkKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0 ZGNhbGxfXykpOwogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZpbmRleCAodW5zaWduZWQgaWlk KSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKcHJpdmF0ZToK ICBzdGF0aWMgcmVjb3JkX2luZm9fdCBjb25zdCAmcmVjb3JkX2luZm8gKHVuc2lnbmVkIHJpZCkg ewogICAgcmV0dXJuICpfcmVjb3JkX2luZm9bcmlkXTsgfQogIHN0YXRpYyBpbmRleF9pbmZvX3Qg Y29uc3QgJmluZGV4X2luZm8gKHVuc2lnbmVkIGlpZCkgewogICAgcmV0dXJuIChfcmVjb3JkX2lu Zm9bc2VudGVuY2VfaGVhZGVyX2RlZnM6OmdldF9yZWNvcmRfaWQgKGlpZCldCiAgICAgICAgICAg IC0+aW5kZXhfaW5mb1tzZW50ZW5jZV9oZWFkZXJfZGVmczo6Z2V0X2luZGV4X2lkIChpaWQpXSk7 IH0KCnB1YmxpYzoKCgogIHN0YXRpYyBmaWVsZF90eXBlIGNvbnN0ICpmaWVsZCAoY2hhciBjb25z dCAqbmFtZSkgewogICAgcmV0dXJuIF9maWVsZHNfYnlfbmFtZS5hdCAobmFtZSk7IH0KICBzdGF0 aWMgcmVjb3JkX3R5cGUgY29uc3QgKnJlY29yZCAoY2hhciBjb25zdCAqbmFtZSkgewogICAgcmV0 dXJuIF9yZWNvcmRzX2J5X25hbWUuYXQgKG5hbWUpOyB9CiAgc3RhdGljIGluZGV4X3R5cGUgY29u c3QgKmluZGV4IChjaGFyIGNvbnN0ICpuYW1lKSB7CiAgICByZXR1cm4gX2luZGljZXNfYnlfbmFt ZS5hdCAobmFtZSk7IH0KCgoKCgogIHN0YXRpYyBpbmxpbmUgcmVjb3JkX2luZm9fdCBjb25zdCAm aW5mbyAocmVjb3JkX3R5cGUgY29uc3QgJmRlc2MpIHsKICAgIHJldHVybiByZWNvcmRfaW5mbyAo ZGVzYy50eXBlX2lkKTsgfQogIHN0YXRpYyBpbmxpbmUgaW5kZXhfaW5mb190IGNvbnN0ICZpbmZv IChpbmRleF90eXBlIGNvbnN0ICZpbmRleCkgewogICAgcmV0dXJuIGluZGV4X2luZm8gKGluZGV4 LnR5cGVfaWQpOyB9Cn07CgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgp1bmlvbiB3YWl0 CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWdu ZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3JlZHVtcDox OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2lnbmVkIGlu dDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QKICAgICAg ewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNpZ25lZCBp bnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAgICAgIH0g X193YWl0X3N0b3BwZWQ7CiAgfTsKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90Owog ICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50 IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKCgpfX2V4dGVuc2lvbl9f IHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25n IGludCByZW07CiAgfSBsbGRpdl90OwoKCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3Vy X21heCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hh ciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBp bnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpfX2V4dGVuc2lvbl9fIGV4 dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gZG91YmxlIHN0cnRv ZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQg c3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBk b3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRo cm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19l eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJv dyAoKTsKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9f ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0 aHJvdyAoKTsKCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2Nh bGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19j dHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlw ZV90b3VwcGVyOwoKCiAgY29uc3QgY2hhciAqX19uYW1lc1sxM107Cn0gKl9fbG9jYWxlX3Q7CgoK CmV4dGVybiBsb25nIGludCBzdHJ0b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0 aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsX2wgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z aWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVy biBkb3VibGUgc3RydG9kX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90 IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHN0cnRvZl9sIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25n IGRvdWJsZSBzdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQg X19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu dCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2lu dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoK ZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50 IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNp b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChf X2NvbnN0IGNoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu dCBfX2dyb3VwKQogICAgIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUK c3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvZF9pbnRlcm5hbCAoX19ucHRy LCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CnN0cnRvbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg ICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbF9pbnRlcm5hbCAo X19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg bG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICBy ZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9 CgoKCgpleHRlcm4gX19pbmxpbmUgZmxvYXQKc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVy biBfX3N0cnRvZl9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5s aW5lIGxvbmcgZG91YmxlCnN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9s ZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KCgoKCl9fZXh0ZW5zaW9uX18gZXh0 ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNl KSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0 ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBs b25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7 CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwg MCk7Cn0KCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3Ry dG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0 b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9u X18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29u c3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRl cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgoKZXh0ZXJuIF9faW5saW5l IGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiBz dHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCk7Cn0KZXh0ZXJuIF9faW5saW5lIGludAph dG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiAoaW50KSBzdHJ0 b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CmV4dGVybiBfX2lubGluZSBsb25n IGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiBzdHJ0 b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CgoKCgpfX2V4dGVuc2lvbl9fIGV4 dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CmF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg dGhyb3cgKCkKewogIHJldHVybiBzdHJ0b2xsIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEw KTsKfQoKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu IGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgpleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIg X191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdV9zaG9ydDsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3VfbG9uZzsK Cgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191 aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2ln bmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0 eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVm IHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVk ZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBp bnQgX19kZXZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aWRfdDsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX19naWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2lub190Owp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbm82NF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBf X21vZGVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50 IF9fb2ZmX3Q7CnR5cGVkZWYgbG9uZyBsb25nIGludCBfX29mZjY0X3Q7CnR5cGVkZWYgaW50IF9f cGlkX3Q7CnR5cGVkZWYgc3RydWN0IHsgaW50IF9fdmFsWzJdOyB9IF9fZnNpZF90Owp0eXBlZGVm IGxvbmcgaW50IF9fY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3JsaW1fdDsK dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmxpbTY0X3Q7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9faWRfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7Cgp0eXBl ZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190Owp0eXBlZGVmIGlu dCBfX2tleV90OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGlt ZXJfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGlu dCBfX2Jsa2NudF90Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19ibGtjbnQ2NF90OwoKCnR5cGVk ZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mc2Jsa2NudF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg bG9uZyBpbnQgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2Zz ZmlsY250X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2ZzZmlsY250NjRfdDsK CgoKCnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX29mZjY0X3QgX19sb2ZmX3Q7CnR5 cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CgoKdHlw ZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsK CgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5 cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19x dWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lk X3QgZnNpZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9f dCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19k ZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2Rl X3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191 aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5cGVkZWYgX19v ZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9f aWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9f ZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYg X19rZXlfdCBrZXlfdDsKCgp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwoKCgoKCnR5cGVkZWYg X190aW1lX3QgdGltZV90OwoKCgp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKdHlwZWRl ZiBfX3RpbWVyX3QgdGltZXJfdDsKCgoKdHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsK CgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCgoKCnR5cGVkZWYgdW5z aWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu dCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYg dW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fd29yZF9fKSkpOwoKCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlw ZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICog c2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwoKCgp0eXBlZGVm IF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKc3RydWN0IHRpbWVzcGVjCiAgewogICAgX190aW1l X3QgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwoKc3RydWN0IHRpbWV2YWwKICB7 CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKdHlw ZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9t YXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBm ZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CmV4dGVybiAiQyIgewoKCgoK CgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVh ZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAog ICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAg ICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmlj dCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3Jp dGVmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRz LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBf X3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmlj dCBfX3NpZ21hc2spIHRocm93ICgpOwoKCn0KCgoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtz aXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2Zz YmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsK dHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBm c2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCgoKCnN0 cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKCnR5 cGVkZWYgaW50IF9fYXRvbWljX2xvY2tfdDsKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewog IGxvbmcgaW50IF9fc3RhdHVzOwogIF9fYXRvbWljX2xvY2tfdCBfX3NwaW5sb2NrOwoKfTsKCgoK dHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoK Cgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsK ICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07 CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6 ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBf X3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVj dCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGlu ZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9 IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90 OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291 bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3Qg X3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVm IHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5 cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcnds b2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndf cmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBf X3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAg aW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoK CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0 aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlu bG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19i YV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJl YWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3Ry dWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCgp9CgoKCgoKCmV4dGVybiBsb25nIGlu dCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVk IGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2ln bmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChj aGFyICpfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsK ICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7 CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwog ICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJh bmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90 ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1 bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsK CmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVz dHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVs ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmlj dCBfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJp Y3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEg Kl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQp IHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAo KTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBk b3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoK CmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50 IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRl cm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFu ZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv aWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVk IHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJv dyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10p IHRocm93ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9y dCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNp Z25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0 cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg ICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVy YW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAg ICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZl ciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp WzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmlj dCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9f cmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhf ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50 ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVu c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg IGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNy YW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZl cikKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu dCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEg Kl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9y dCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2Rh dGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6 ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVy biB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKCgpleHRlcm4gdm9pZCAqcmVh bGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7 CgoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJu ICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7 CgoKCgoKfQoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxp Z24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gdm9p ZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK CgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQg Kl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIGV4 aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp OwoKCgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29u c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRl bnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVu diAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2Nv bnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQog ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1l KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCk7CmV4 dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0 ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBt a3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwpleHRlcm4gY2hhciAqbWtkdGVt cCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9f Y29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjYW5v bmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CmV4dGVy biBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoK CgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25z dCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoK CmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQg Kl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19z aXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQg Kl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg ICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMg KGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpf X2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9f eCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRl cm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9f bnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBs b25nIGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25n IGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGlu dCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0 IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUs IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnY3Z0 IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoK CgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwK ICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3Ry aWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192 YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBf X2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFn Y3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBz aXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUs IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVjdnRfciAo bG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGlu dCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAg ICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7 CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAog ICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp Y3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNp emVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNo YXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAo Y2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1i c3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7Cgpl eHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9f bikKICAgICB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hh ciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19y ZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpf X3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBj aGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50 IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp bnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp bnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7 CgoKCgoKfQppbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkgdW5zaWduZWQgY2hhciBt YXhfdmFsICh1bnNpZ25lZCBjaGFyKSB7IHJldHVybiAyNTU7IH0gaW5saW5lIF9fYXR0cmlidXRl X18oKF9fY29uc3RfXykpIGludCBsYmJpdHNvZiAodW5zaWduZWQgY2hhcikgeyByZXR1cm4gMzsg fTsKaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIHVuc2lnbmVkIHNob3J0IG1heF92 YWwgKHVuc2lnbmVkIHNob3J0KSB7IHJldHVybiAoMzI3NjcgKiAyICsgMSk7IH0gaW5saW5lIF9f YXR0cmlidXRlX18oKF9fY29uc3RfXykpIGludCBsYmJpdHNvZiAodW5zaWduZWQgc2hvcnQpIHsg cmV0dXJuIDQ7IH07CmlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKSB1bnNpZ25lZCBp bnQgbWF4X3ZhbCAodW5zaWduZWQgaW50KSB7IHJldHVybiAoMjE0NzQ4MzY0NyAqIDJVICsgMSk7 IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIGludCBsYmJpdHNvZiAodW5zaWdu ZWQgaW50KSB7IHJldHVybiA1OyB9OwppbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkg dW5zaWduZWQgbG9uZyBtYXhfdmFsICh1bnNpZ25lZCBsb25nKSB7IHJldHVybiAyMTQ3NDgzNjQ3 TDsgfSBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkgaW50IGxiYml0c29mICh1bnNp Z25lZCBsb25nKSB7IHJldHVybiA1OyB9OwppbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25zdF9f KSkgdWxsb25nX3QgbWF4X3ZhbCAodWxsb25nX3QpIHsgcmV0dXJuICg5MjIzMzcyMDM2ODU0Nzc1 ODA3TEwgKiAyVUxMICsgMSk7IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIGlu dCBsYmJpdHNvZiAodWxsb25nX3QpIHsgcmV0dXJuIDY7IH07CgppbmxpbmUgX19hdHRyaWJ1dGVf XygoX19jb25zdF9fKSkgY2hhciBtaW5fdmFsIChjaGFyKSB7IHJldHVybiBjaGFyICgoLTEyOCkp OyB9IGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKSBjaGFyIG1heF92YWwgKGNoYXIp IHsgcmV0dXJuIDEyNzsgfSBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkgaW50IGxi Yml0c29mIChjaGFyKSB7IHJldHVybiAzOyB9OwppbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25z dF9fKSkgc2hvcnQgbWluX3ZhbCAoc2hvcnQpIHsgcmV0dXJuIHNob3J0ICgoLTMyNzY3IC0xKSk7 IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIHNob3J0IG1heF92YWwgKHNob3J0 KSB7IHJldHVybiAzMjc2NzsgfSBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkgaW50 IGxiYml0c29mIChzaG9ydCkgeyByZXR1cm4gNDsgfTsKaW5saW5lIF9fYXR0cmlidXRlX18oKF9f Y29uc3RfXykpIGludCBtaW5fdmFsIChpbnQpIHsgcmV0dXJuIGludCAoKC0yMTQ3NDgzNjQ3IC0x KSk7IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIGludCBtYXhfdmFsIChpbnQp IHsgcmV0dXJuIDIxNDc0ODM2NDc7IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykp IGludCBsYmJpdHNvZiAoaW50KSB7IHJldHVybiA1OyB9OwppbmxpbmUgX19hdHRyaWJ1dGVfXygo X19jb25zdF9fKSkgbG9uZyBtaW5fdmFsIChsb25nKSB7IHJldHVybiBsb25nICgoLTIxNDc0ODM2 NDdMIC0xKSk7IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIGxvbmcgbWF4X3Zh bCAobG9uZykgeyByZXR1cm4gMjE0NzQ4MzY0N0w7IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9f Y29uc3RfXykpIGludCBsYmJpdHNvZiAobG9uZykgeyByZXR1cm4gNTsgfTsKaW5saW5lIF9fYXR0 cmlidXRlX18oKF9fY29uc3RfXykpIGxsb25nX3QgbWluX3ZhbCAobGxvbmdfdCkgeyByZXR1cm4g bGxvbmdfdCAoKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgLTEpKTsgfSBpbmxpbmUgX19hdHRyaWJ1 dGVfXygoX19jb25zdF9fKSkgbGxvbmdfdCBtYXhfdmFsIChsbG9uZ190KSB7IHJldHVybiA5MjIz MzcyMDM2ODU0Nzc1ODA3TEw7IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIGlu dCBsYmJpdHNvZiAobGxvbmdfdCkgeyByZXR1cm4gNjsgfTsKdW5zaWduZWQgbW9zdF9zaWduaWZp Y2FudF9iaXQgKHVuc2lnbmVkIG4pIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3Rk Y2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CnVuc2lnbmVkIG1vc3Rfc2lnbmlm aWNhbnRfYml0ICh1bGxvbmdfdCBuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0 ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKdW5zaWduZWQgbGVhc3Rfc2ln bmlmaWNhbnRfYml0ICh1bnNpZ25lZCBuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxf X3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwp1bnNpZ25lZCBsZWFzdF9z aWduaWZpY2FudF9iaXQgKHVsbG9uZ190IG4pIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMp LF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CgoKCnVuc2lnbmVkIG9u ZV9iaXRzICh2b2lkIGNvbnN0ICosIHNpemVfdCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18o MyksX19zdGRjYWxsX18pKTsKdW5zaWduZWQgb25lX2JpdHMgKHVuc2lnbmVkIHNob3J0KSBfX2F0 dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9f Y29uc3RfXykpOwp1bnNpZ25lZCBvbmVfYml0cyAodW5zaWduZWQpIF9fYXR0cmlidXRlX18oKF9f cmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CnVu c2lnbmVkIG9uZV9iaXRzICh1bGxvbmdfdCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyks X19zdGRjYWxsX18pKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKCgoKCgoKaW5saW5lIGRp dl90CmZsb29yZWRfZGl2IChpbnQgbnVtLCBpbnQgZGVub20pCnsKICBkaXZfdCByZXM7CiAgcmVz LnF1b3QgPSBudW0gLyBkZW5vbTsKICByZXMucmVtID0gbnVtICUgZGVub207CiAgaWYgKHJlcy5y ZW0gJiYgKG51bSBeIGRlbm9tKSA8IDApCiAgICB7CiAgICAgIHJlcy5xdW90LS07CiAgICAgIHJl cy5yZW0gKz0gZGVub207CiAgICB9CiAgcmV0dXJuIHJlczsKfQoKCgoKCnRlbXBsYXRlIDxjbGFz cyB1aW50X3Q+IHVpbnRfdCBpc3FydCAodWludF90IG4pIF9fYXR0cmlidXRlX18oKF9fcmVncGFy bV9fKDMpLF9fc3RkY2FsbF9fKSk7CnRlbXBsYXRlIDxjbGFzcyB1aW50X3Q+IGlubGluZSB1aW50 X3QgaWxvZyAodWludF90IG4pIHsKICByZXR1cm4gbW9zdF9zaWduaWZpY2FudF9iaXQgKG4pOyB9 CgoKCgoKdGVtcGxhdGUgPGNsYXNzIG51bV90PiBpbmxpbmUKYm9vbAppbmNsdWRlcyAobnVtX3Qg Y29uc3QgKmxpc3QsIHVuc2lnbmVkIGxlbmd0aCwgbnVtX3QgZWx0KQp7CiAgZm9yICg7IGxlbmd0 aCA+IDA7IC0tbGVuZ3RoKQogICAgaWYgKCpsaXN0KysgPT0gZWx0KQogICAgICByZXR1cm4gdHJ1 ZTsKICByZXR1cm4gZmFsc2U7Cn0KaW5saW5lIGJvb2wgc3RyX3RvX251bSAoY2hhciBjb25zdCAq c3RyLCBjaGFyICZ2YWwsIGludCBiYXNlID0gMTApIHsgY2hhciAqZW5kOyB2YWwgPSBzdHJ0b2wg KHN0ciwgJmVuZCwgYmFzZSk7IHJldHVybiBlbmRbMF0gPT0gJ1wwJzsgfQppbmxpbmUgYm9vbCBz dHJfdG9fbnVtIChjaGFyIGNvbnN0ICpzdHIsIHNob3J0ICZ2YWwsIGludCBiYXNlID0gMTApIHsg Y2hhciAqZW5kOyB2YWwgPSBzdHJ0b2wgKHN0ciwgJmVuZCwgYmFzZSk7IHJldHVybiBlbmRbMF0g PT0gJ1wwJzsgfQppbmxpbmUgYm9vbCBzdHJfdG9fbnVtIChjaGFyIGNvbnN0ICpzdHIsIGludCAm dmFsLCBpbnQgYmFzZSA9IDEwKSB7IGNoYXIgKmVuZDsgdmFsID0gc3RydG9sIChzdHIsICZlbmQs IGJhc2UpOyByZXR1cm4gZW5kWzBdID09ICdcMCc7IH0KaW5saW5lIGJvb2wgc3RyX3RvX251bSAo Y2hhciBjb25zdCAqc3RyLCBsb25nICZ2YWwsIGludCBiYXNlID0gMTApIHsgY2hhciAqZW5kOyB2 YWwgPSBzdHJ0b2wgKHN0ciwgJmVuZCwgYmFzZSk7IHJldHVybiBlbmRbMF0gPT0gJ1wwJzsgfQoK aW5saW5lIGJvb2wgc3RyX3RvX251bSAoY2hhciBjb25zdCAqc3RyLCB1bnNpZ25lZCBjaGFyICZ2 YWwsIGludCBiYXNlID0gMTApIHsgY2hhciAqZW5kOyB2YWwgPSBzdHJ0b3VsIChzdHIsICZlbmQs IGJhc2UpOyByZXR1cm4gZW5kWzBdID09ICdcMCc7IH0KaW5saW5lIGJvb2wgc3RyX3RvX251bSAo Y2hhciBjb25zdCAqc3RyLCB1bnNpZ25lZCBzaG9ydCAmdmFsLCBpbnQgYmFzZSA9IDEwKSB7IGNo YXIgKmVuZDsgdmFsID0gc3RydG91bCAoc3RyLCAmZW5kLCBiYXNlKTsgcmV0dXJuIGVuZFswXSA9 PSAnXDAnOyB9CmlubGluZSBib29sIHN0cl90b19udW0gKGNoYXIgY29uc3QgKnN0ciwgdW5zaWdu ZWQgaW50ICZ2YWwsIGludCBiYXNlID0gMTApIHsgY2hhciAqZW5kOyB2YWwgPSBzdHJ0b3VsIChz dHIsICZlbmQsIGJhc2UpOyByZXR1cm4gZW5kWzBdID09ICdcMCc7IH0KaW5saW5lIGJvb2wgc3Ry X3RvX251bSAoY2hhciBjb25zdCAqc3RyLCB1bnNpZ25lZCBsb25nICZ2YWwsIGludCBiYXNlID0g MTApIHsgY2hhciAqZW5kOyB2YWwgPSBzdHJ0b3VsIChzdHIsICZlbmQsIGJhc2UpOyByZXR1cm4g ZW5kWzBdID09ICdcMCc7IH0KaW5saW5lIGJvb2wgc3RyX3RvX251bSAoY2hhciBjb25zdCAqc3Ry LCBsbG9uZ190ICZ2YWwsIGludCBiYXNlID0gMTApIHsgY2hhciAqZW5kOyB2YWwgPSBzdHJ0b2xs IChzdHIsICZlbmQsIGJhc2UpOyByZXR1cm4gZW5kWzBdID09ICdcMCc7IH0KaW5saW5lIGJvb2wg c3RyX3RvX251bSAoY2hhciBjb25zdCAqc3RyLCB1bGxvbmdfdCAmdmFsLCBpbnQgYmFzZSA9IDEw KSB7IGNoYXIgKmVuZDsgdmFsID0gc3RydG91bGwgKHN0ciwgJmVuZCwgYmFzZSk7IHJldHVybiBl bmRbMF0gPT0gJ1wwJzsgfQpleHRlcm4gY2hhciBjb25zdCB3aGl0ZV9zcGFjZVtdOwoKCgpjaGFy ICpzdHJfZHVwIChjaGFyIGNvbnN0ICopIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9f c3RkY2FsbF9fKSk7CgoKCmNoYXIgKnN0cl9wY3B5IChjaGFyICosIGNoYXIgY29uc3QgKiwgdW5z aWduZWQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCnVu c2lnbmVkIHN0cl9ubGVuIChjaGFyIGNvbnN0ICosIHVuc2lnbmVkIGxlbikgX19hdHRyaWJ1dGVf XygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgppbnQgc3RyX2ljbXAgKGNoYXIgY29u c3QgKnMsIGNoYXIgY29uc3QgKnQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3Rk Y2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CmludCBzdHJfbmljbXAgKGNoYXIg Y29uc3QgKnMsIGNoYXIgY29uc3QgKnQsIHNpemVfdCBuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bh cm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKCmJvb2wg bWVtX2lzbnVsbCAodm9pZCBjb25zdCAqLCB1bnNpZ25lZCkgX19hdHRyaWJ1dGVfXygoX19yZWdw YXJtX18oMyksX19zdGRjYWxsX18pKTsKCgpjaGFyICpzdHJfdXBjYXNlIChjaGFyICpzKSBfX2F0 dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwpjaGFyICpzdHJfZG93bmNh c2UgKGNoYXIgKnMpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7 CmNoYXIgKnN0cl9jYXBpdGFsaXplIChjaGFyICpzKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f XygzKSxfX3N0ZGNhbGxfXykpOwoKCmNoYXIgKnN0cl91cGNhc2UgKGNoYXIgY29uc3QgKiwgY2hh ciAqLCB1bnNpZ25lZCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p KTsKY2hhciAqc3RyX2Rvd25jYXNlIChjaGFyIGNvbnN0ICosIGNoYXIgKiwgdW5zaWduZWQpIF9f YXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CmNoYXIgKnN0cl9jYXBp dGFsaXplIChjaGFyIGNvbnN0ICosIGNoYXIgKiwgdW5zaWduZWQpIF9fYXR0cmlidXRlX18oKF9f cmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCgpjaGFyICpzdHJfbGVmdF90cmltIChjaGFy ICosIGNoYXIgY29uc3QgKiA9IHdoaXRlX3NwYWNlKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f XygzKSxfX3N0ZGNhbGxfXykpOwpjaGFyICpzdHJfcmlnaHRfdHJpbSAoY2hhciAqLCBjaGFyIGNv bnN0ICogPSB3aGl0ZV9zcGFjZSkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRj YWxsX18pKTsKY2hhciAqc3RyX3RyaW0gKGNoYXIgKiwgY2hhciBjb25zdCAqID0gd2hpdGVfc3Bh Y2UpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKY2hhciAq c3RyX2JmY3B5IChjaGFyICosIGNoYXIgY29uc3QgKiwgaW50IG4pIF9fYXR0cmlidXRlX18oKF9f cmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CmNoYXIgKnN0cl96ZmNweSAoY2hhciAqLCBjaGFy IGNvbnN0ICosIGludCBuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxf XykpOwoKCgoKCnVuc2lnbmVkIHN0cl9lbnRhYiAoY2hhciBjb25zdCAqcywgdW5zaWduZWQgaW5k ZW50LCBjaGFyICp0LCB1bnNpZ25lZCB0bCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyks X19zdGRjYWxsX18pKTsKCgoKCmNoYXIgY29uc3QgKnN0cl9lcnJvciAoaW50IGVycikgX19hdHRy aWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgpib29sIHN0cl9zaGVsbF9t YXRjaCAoY2hhciBjb25zdCAqcCwgY2hhciBjb25zdCAqcykgX19hdHRyaWJ1dGVfXygoX19yZWdw YXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKYm9vbCBzdHJfcnVsZV9tYXRjaCAoY2hhciBjb25z dCAqcCwgY2hhciBjb25zdCAqcywKICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqKm1w LCB1bnNpZ25lZCAqbWwpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9f KSk7CgoKY2hhciBjb25zdCAqZ2V0X3Rva2VuIChjaGFyICpzLCB1bnNpZ25lZCBsZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqdG9rcywgY2hhciBjb25zdCAqZGVscyA9IHdo aXRlX3NwYWNlKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoK CmJvb2wgYm9vbF9ldmFsIChjaGFyIGNvbnN0ICpzLCBib29sICZ2YWwpIF9fYXR0cmlidXRlX18o KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKY2hhciAqZ2V0X2hvc3RfbmFtZSAoY2hh ciAqYnVmLCBpbnQgbGVuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxf XykpOwoKCgpjaGFyICpnZXRfc3lzdGVtX3VzZXIgKGNoYXIgKmJ1ZiwgaW50IGxlbikgX19hdHRy aWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgpleHRlcm4gY2hhciBhcHBs aWNhdGlvbl91c2VyWzEzXTsKCgpleHRlcm4gYm9vbCBzaW11bGF0aW9uX2Vudmlyb25tZW50Owpl eHRlcm4gYm9vbCB0cmFpbmluZ19lbnZpcm9ubWVudDsKCgp2b2lkIHNldF9lbnZpcm9ubWVudCAo Y2hhciBjb25zdCAqdmFyLCBjaGFyIGNvbnN0ICpmbXQgLi4uKQogIF9fYXR0cmlidXRlX18oKF9f Zm9ybWF0X18ocHJpbnRmLCAyLCAzKSkpOwpjaGFyIGNvbnN0ICpnZXRfZW52aXJvbm1lbnQgKGNo YXIgY29uc3QgKnZhcm5hbWUpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2Fs bF9fKSk7CgoKCmJvb2wgZXhwYW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlcyAoY2hhciBjb25zdCAq LCBjaGFyICosIHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCB2ZXJiYXRpbV9tYXNrID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCAqdmFyaWFibGVfY291bnQgPSAwKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f XygzKSxfX3N0ZGNhbGxfXykpOwoKCgpjaGFyIGNoZWNrX2RpZ2l0IChjaGFyIGNvbnN0ICosIHVu c2lnbmVkKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgoK CgoKc3RydWN0IGZzX3JzX3QKewogIGNoYXIgZnM7CiAgY2hhciBmc3I7CiAgY2hhciByczsKICBj aGFyIHJzcjsKICBjaGFyIHF1b3RlOwp9OwpleHRlcm4gZnNfcnNfdCBjb25zdCBkZWZhdWx0X2Zz X3JzOwoKdm9pZCB1bnNwYWNpZnkgKGNoYXIgY29uc3QgKmluLCBjaGFyICpvdXQsCiAgICAgICAg ICAgICAgICBmc19yc190IGNvbnN0ICYgPSBkZWZhdWx0X2ZzX3JzKSBfX2F0dHJpYnV0ZV9fKChf X3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCnZvaWQgc3BhY2lmeSAoY2hhciBjb25zdCAq aW4sIGNoYXIgKm91dCwKICAgICAgICAgICAgICBmc19yc190IGNvbnN0ICYgPSBkZWZhdWx0X2Zz X3JzKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwpjaGFyIGNv bnN0ICpudWxfdGVybWluYXRlZCAoY2hhciBjb25zdCAqcywgdW5zaWduZWQgbikgX19hdHRyaWJ1 dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKdGVtcGxhdGUgPGNsYXNzIHJlcF90 LCByZXBfdCBzY2FsZT4KY2xhc3MgZml4ZWRfVAp7CnByb3RlY3RlZDoKICByZXBfdCB4OwoKcHVi bGljOgogIGZpeGVkX1QoKSA6IHggKG1pbl92YWwgKHgpKSB7fQoKCiAgZml4ZWRfVCAoZml4ZWRf VCBjb25zdCAmbykgOiB4IChvLngpIHt9CiAgZml4ZWRfVCAmb3BlcmF0b3I9IChmaXhlZF9UIGNv bnN0ICZvKSB7IHggPSBvLng7IHJldHVybiAqdGhpczsgfQoKCiAgZml4ZWRfVCAocmVwX3QgcmVw LCBpbnQpIDogeCAocmVwKSB7fQoKCiAgZml4ZWRfVCAoZG91YmxlIHkpIDogeCAocmVwX3QgKFJp bnQgKHkgKiBzY2FsZSkpKSB7fQogIGZpeGVkX1QgJm9wZXJhdG9yPSAoZG91YmxlIHkpIHsgeCA9 IHJlcF90IChSaW50ICh5ICogc2NhbGUpKTsgcmV0dXJuICp0aGlzOyB9CgoKCiAgZml4ZWRfVCAo aW50IG4pIDogeCAobiAqIHNjYWxlKSB7fSBmaXhlZF9UICZvcGVyYXRvcj0gKGludCBuKSB7IHgg PSBuICogc2NhbGU7IHJldHVybiAqdGhpczsgfTsKICBmaXhlZF9UICh1bnNpZ25lZCBuKSA6IHgg KG4gKiBzY2FsZSkge30gZml4ZWRfVCAmb3BlcmF0b3I9ICh1bnNpZ25lZCBuKSB7IHggPSBuICog c2NhbGU7IHJldHVybiAqdGhpczsgfTsKICBmaXhlZF9UIChsb25nIG4pIDogeCAobiAqIHNjYWxl KSB7fSBmaXhlZF9UICZvcGVyYXRvcj0gKGxvbmcgbikgeyB4ID0gbiAqIHNjYWxlOyByZXR1cm4g KnRoaXM7IH07CiAgZml4ZWRfVCAodW5zaWduZWQgbG9uZyBuKSA6IHggKG4gKiBzY2FsZSkge30g Zml4ZWRfVCAmb3BlcmF0b3I9ICh1bnNpZ25lZCBsb25nIG4pIHsgeCA9IG4gKiBzY2FsZTsgcmV0 dXJuICp0aGlzOyB9OwogIGZpeGVkX1QgKGxsb25nX3QgbikgOiB4IChuICogc2NhbGUpIHt9IGZp eGVkX1QgJm9wZXJhdG9yPSAobGxvbmdfdCBuKSB7IHggPSBuICogc2NhbGU7IHJldHVybiAqdGhp czsgfTsKICBmaXhlZF9UICh1bGxvbmdfdCBuKSA6IHggKG4gKiBzY2FsZSkge30gZml4ZWRfVCAm b3BlcmF0b3I9ICh1bGxvbmdfdCBuKSB7IHggPSBuICogc2NhbGU7IHJldHVybiAqdGhpczsgfTsK CgoKICBvcGVyYXRvciBkb3VibGUoKSBjb25zdCB7IHJldHVybiB4ICogKDEuMC9zY2FsZSk7IH0K ICBkb3VibGUgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIHggKiAoMS4wL3NjYWxlKTsgfQoK CiAgYm9vbCBpc19udWxsKCkgY29uc3QgeyByZXR1cm4geCA9PSBtaW5fdmFsICh4KTsgfQogIHZv aWQgc2V0X251bGwoKSB7IHggPSBtaW5fdmFsICh4KTsgfQoKCiAgaW50IGNvbXBhcmUgKGZpeGVk X1QgY29uc3QgJm8pIGNvbnN0IHsgcmV0dXJuIHggLSBvLng7IH0KICB1bnNpZ25lZCBoYXNoKCkg Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+ICh4KTsgfQogIHJlcF90IHJlcCgp IGNvbnN0IHsgcmV0dXJuIHg7IH0KCgoKCiAgZml4ZWRfVCBjb25zdCAmb3BlcmF0b3IrPSAoZml4 ZWRfVCBjb25zdCAmbykgewogICAgeCArPSBvLng7IHJldHVybiAqdGhpczsgfQogIGZpeGVkX1Qg Y29uc3QgJm9wZXJhdG9yLT0gKGZpeGVkX1QgY29uc3QgJm8pIHsKICAgIHggLT0gby54OyByZXR1 cm4gKnRoaXM7IH0KCgoKCiAgZml4ZWRfVCBjb25zdCAmb3BlcmF0b3IqPSAoaW50IG8pIHsKICAg IHggKj0gbzsgcmV0dXJuICp0aGlzOyB9CiAgZml4ZWRfVCBjb25zdCAmb3BlcmF0b3IvPSAoaW50 IG8pIHsKICAgIHggLz0gbzsgcmV0dXJuICp0aGlzOyB9CiAgZml4ZWRfVCBjb25zdCAmb3BlcmF0 b3IqPSAoZG91YmxlIG8pIHsKICAgIHggPSBzdGF0aWNfY2FzdDxyZXBfdD4gKFJpbnQgKHggKiBv KSk7IHJldHVybiAqdGhpczsgfQogIGZpeGVkX1QgY29uc3QgJm9wZXJhdG9yLz0gKGRvdWJsZSBv KSB7CiAgICB4ID0gc3RhdGljX2Nhc3Q8cmVwX3Q+IChSaW50ICh4IC8gbykpOyByZXR1cm4gKnRo aXM7IH0KCiAgZml4ZWRfVCBvcGVyYXRvci0oKSBjb25zdCB7CiAgICByZXR1cm4gZml4ZWRfVCAo LXgpOyB9CgoKCiAgZml4ZWRfVCBvcGVyYXRvciArIChmaXhlZF9UIGNvbnN0ICYgbykgY29uc3Qg eyByZXR1cm4gZml4ZWRfVCAoKnRoaXMpICs9IG87IH07CiAgZml4ZWRfVCBvcGVyYXRvciAtIChm aXhlZF9UIGNvbnN0ICYgbykgY29uc3QgeyByZXR1cm4gZml4ZWRfVCAoKnRoaXMpIC09IG87IH07 CiAgZml4ZWRfVCBvcGVyYXRvciAqIChpbnQgbykgY29uc3QgeyByZXR1cm4gZml4ZWRfVCAoKnRo aXMpICo9IG87IH07CiAgZml4ZWRfVCBvcGVyYXRvciAvIChpbnQgbykgY29uc3QgeyByZXR1cm4g Zml4ZWRfVCAoKnRoaXMpIC89IG87IH07CiAgZml4ZWRfVCBvcGVyYXRvciAqIChkb3VibGUgbykg Y29uc3QgeyByZXR1cm4gZml4ZWRfVCAoKnRoaXMpICo9IG87IH07CiAgZml4ZWRfVCBvcGVyYXRv ciAvIChkb3VibGUgbykgY29uc3QgeyByZXR1cm4gZml4ZWRfVCAoKnRoaXMpIC89IG87IH07CiAg Ym9vbCBvcGVyYXRvciA8IChpbnQgeSkgY29uc3QgeyByZXR1cm4geCA8IHkgKiBzY2FsZTsgfSBi b29sIG9wZXJhdG9yIDwgKGRvdWJsZSB5KSBjb25zdCB7IHJldHVybiB4IDwgUmludCAoeSAqIHNj YWxlKTsgfSBib29sIG9wZXJhdG9yIDwgKGZpeGVkX1QgY29uc3QgJm8pIGNvbnN0IHsgcmV0dXJu IHggPCBvLng7IH0gYm9vbCBvcGVyYXRvciA8PSAoaW50IHkpIGNvbnN0IHsgcmV0dXJuIHggPD0g eSAqIHNjYWxlOyB9IGJvb2wgb3BlcmF0b3IgPD0gKGRvdWJsZSB5KSBjb25zdCB7IHJldHVybiB4 IDw9IFJpbnQgKHkgKiBzY2FsZSk7IH0gYm9vbCBvcGVyYXRvciA8PSAoZml4ZWRfVCBjb25zdCAm bykgY29uc3QgeyByZXR1cm4geCA8PSBvLng7IH07CiAgYm9vbCBvcGVyYXRvciAhPSAoaW50IHkp IGNvbnN0IHsgcmV0dXJuIHggIT0geSAqIHNjYWxlOyB9IGJvb2wgb3BlcmF0b3IgIT0gKGRvdWJs ZSB5KSBjb25zdCB7IHJldHVybiB4ICE9IFJpbnQgKHkgKiBzY2FsZSk7IH0gYm9vbCBvcGVyYXRv ciAhPSAoZml4ZWRfVCBjb25zdCAmbykgY29uc3QgeyByZXR1cm4geCAhPSBvLng7IH0gYm9vbCBv cGVyYXRvciA9PSAoaW50IHkpIGNvbnN0IHsgcmV0dXJuIHggPT0geSAqIHNjYWxlOyB9IGJvb2wg b3BlcmF0b3IgPT0gKGRvdWJsZSB5KSBjb25zdCB7IHJldHVybiB4ID09IFJpbnQgKHkgKiBzY2Fs ZSk7IH0gYm9vbCBvcGVyYXRvciA9PSAoZml4ZWRfVCBjb25zdCAmbykgY29uc3QgeyByZXR1cm4g eCA9PSBvLng7IH07CiAgYm9vbCBvcGVyYXRvciA+PSAoaW50IHkpIGNvbnN0IHsgcmV0dXJuIHgg Pj0geSAqIHNjYWxlOyB9IGJvb2wgb3BlcmF0b3IgPj0gKGRvdWJsZSB5KSBjb25zdCB7IHJldHVy biB4ID49IFJpbnQgKHkgKiBzY2FsZSk7IH0gYm9vbCBvcGVyYXRvciA+PSAoZml4ZWRfVCBjb25z dCAmbykgY29uc3QgeyByZXR1cm4geCA+PSBvLng7IH0gYm9vbCBvcGVyYXRvciA+IChpbnQgeSkg Y29uc3QgeyByZXR1cm4geCA+IHkgKiBzY2FsZTsgfSBib29sIG9wZXJhdG9yID4gKGRvdWJsZSB5 KSBjb25zdCB7IHJldHVybiB4ID4gUmludCAoeSAqIHNjYWxlKTsgfSBib29sIG9wZXJhdG9yID4g KGZpeGVkX1QgY29uc3QgJm8pIGNvbnN0IHsgcmV0dXJuIHggPiBvLng7IH07Cgp9OwoKZXh0ZXJu IHVuc2lnbmVkIGNvbnN0IGZsb2F0X05hTl9yZXBbMV07CmV4dGVybiB1bnNpZ25lZCBjb25zdCBk b3VibGVfTmFOX3JlcFsyXTsKaW5saW5lIGludCByYWRpeCgpIHsgcmV0dXJuIDI7IH0KaW5saW5l IGludCByb3VuZHMoKSB7IHJldHVybiAxOyB9CmlubGluZSBpbnQgZGlnIChmbG9hdCkgeyByZXR1 cm4gNjsgfSBpbmxpbmUgZmxvYXQgZXBzaWxvbiAoZmxvYXQpIHsgcmV0dXJuIDEuMTkyMDkyOTBl LTA3RjsgfSBpbmxpbmUgaW50IG1hbnRfZGlnIChmbG9hdCkgeyByZXR1cm4gMjQ7IH0gaW5saW5l IGZsb2F0IG1heGYgKGZsb2F0KSB7IHJldHVybiAzLjQwMjgyMzQ3ZSszOEY7IH0gaW5saW5lIGlu dCBtYXhfZXhwIChmbG9hdCkgeyByZXR1cm4gMTI4OyB9IGlubGluZSBpbnQgbWF4XzEwX2V4cCAo ZmxvYXQpIHsgcmV0dXJuIDM4OyB9IGlubGluZSBmbG9hdCBtaW5mIChmbG9hdCkgeyByZXR1cm4g MS4xNzU0OTQzNWUtMzhGOyB9IGlubGluZSBpbnQgbWluX2V4cCAoZmxvYXQpIHsgcmV0dXJuICgt MTI1KTsgfSBpbmxpbmUgaW50IG1pbl8xMF9leHAgKGZsb2F0KSB7IHJldHVybiAoLTM3KTsgfSBp bmxpbmUgZmxvYXQgTmFOIChmbG9hdCkgeyByZXR1cm4gKCpyZWludGVycHJldF9jYXN0PGZsb2F0 IGNvbnN0ICo+IChmbG9hdF9OYU5fcmVwKSk7IH0KaW5saW5lIGludCBkaWcgKGRvdWJsZSkgeyBy ZXR1cm4gMTU7IH0gaW5saW5lIGRvdWJsZSBlcHNpbG9uIChkb3VibGUpIHsgcmV0dXJuIDIuMjIw NDQ2MDQ5MjUwMzEzMWUtMTY7IH0gaW5saW5lIGludCBtYW50X2RpZyAoZG91YmxlKSB7IHJldHVy biA1MzsgfSBpbmxpbmUgZG91YmxlIG1heGYgKGRvdWJsZSkgeyByZXR1cm4gMS43OTc2OTMxMzQ4 NjIzMTU3ZSszMDg7IH0gaW5saW5lIGludCBtYXhfZXhwIChkb3VibGUpIHsgcmV0dXJuIDEwMjQ7 IH0gaW5saW5lIGludCBtYXhfMTBfZXhwIChkb3VibGUpIHsgcmV0dXJuIDMwODsgfSBpbmxpbmUg ZG91YmxlIG1pbmYgKGRvdWJsZSkgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7IH0g aW5saW5lIGludCBtaW5fZXhwIChkb3VibGUpIHsgcmV0dXJuICgtMTAyMSk7IH0gaW5saW5lIGlu dCBtaW5fMTBfZXhwIChkb3VibGUpIHsgcmV0dXJuICgtMzA3KTsgfSBpbmxpbmUgZG91YmxlIE5h TiAoZG91YmxlKSB7IHJldHVybiAoKnJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlIGNvbnN0ICo+IChk b3VibGVfTmFOX3JlcCkpOyB9CgppbmxpbmUgaW50IGRpZyAobG9uZyBkb3VibGUpIHsgcmV0dXJu IDE4OyB9IGlubGluZSBsb25nIGRvdWJsZSBlcHNpbG9uIChsb25nIGRvdWJsZSkgeyByZXR1cm4g MS4wODQyMDIxNzI0ODU1MDQ0MzQwMWUtMTlMOyB9IGlubGluZSBpbnQgbWFudF9kaWcgKGxvbmcg ZG91YmxlKSB7IHJldHVybiA2NDsgfSBpbmxpbmUgbG9uZyBkb3VibGUgbWF4ZiAobG9uZyBkb3Vi bGUpIHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMOyB9IGlubGluZSBpbnQg bWF4X2V4cCAobG9uZyBkb3VibGUpIHsgcmV0dXJuIDE2Mzg0OyB9IGlubGluZSBpbnQgbWF4XzEw X2V4cCAobG9uZyBkb3VibGUpIHsgcmV0dXJuIDQ5MzI7IH0gaW5saW5lIGxvbmcgZG91YmxlIG1p bmYgKGxvbmcgZG91YmxlKSB7IHJldHVybiAzLjM2MjEwMzE0MzExMjA5MzUwNjI2ZS00OTMyTDsg fSBpbmxpbmUgaW50IG1pbl9leHAgKGxvbmcgZG91YmxlKSB7IHJldHVybiAoLTE2MzgxKTsgfSBp bmxpbmUgaW50IG1pbl8xMF9leHAgKGxvbmcgZG91YmxlKSB7IHJldHVybiAoLTQ5MzEpOyB9IGlu bGluZSBsb25nIGRvdWJsZSBOYU4gKGxvbmcgZG91YmxlKSB7IHJldHVybiAoKnJlaW50ZXJwcmV0 X2Nhc3Q8ZG91YmxlIGNvbnN0ICo+IChkb3VibGVfTmFOX3JlcCkpOyB9CmV4dGVybiAiQyIgewoK CgoKCgoKCnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBkb3VibGUg ZG91YmxlX3Q7CgoKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBh c2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBf X3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs ZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X19hdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs ZSBjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUg X194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91Ymxl IHRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190YW4gKGRvdWJsZSBf X3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRv dWJsZSBzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRv dWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nv c3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpf X3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBhY29z aCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zaCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3Vi bGUgYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbmggKGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpl eHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9u ZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3Vi bGUgbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbW9kZiAoZG91YmxlIF9feCwgZG91 YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9feCwg ZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGV4 cG0xIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChkb3VibGUg X194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g ZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nYiAo ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgZXhwMiAoZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsK CgpleHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cg KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93IChk b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRl cm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2Zh YnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gZG91YmxlIGZsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoZG91Ymxl IF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbW9kIChkb3VibGUg X194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZiAoZG91Ymxl IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g aW50IF9fZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGUgKGRvdWJs ZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu IGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4g ZG91YmxlIHNpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X3NpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGNv cHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91Ymxl IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4g ZG91YmxlIG5hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25hbiAoX19jb25zdCBjaGFyICpfX3RhZ2Ip IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IF9f aXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGox IChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cgKCk7 CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X2puIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJs ZSB5MSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIHRocm93 ICgpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX195biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGVyZiAo ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKSB0aHJvdyAoKTsK ZXh0ZXJuIGRvdWJsZSBlcmZjIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJm YyAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJsZSkgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBkb3VibGUgdGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGdhbW1h IChkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19nYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGRvdWJsZSBsZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAo KTsKCgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX19yaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5l eHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3Vi bGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91 YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91Ymxl IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGJuIChkb3VibGUgX194LCBpbnQg X19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91YmxlIF9feCwgaW50IF9f bikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gaW50IF9faWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJs ZSBzY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fbmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSByb3Vu ZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yb3VuZCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX3RydW5jIChkb3Vi bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g ZG91YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCAq X19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSBfX3gp IHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBf X2xyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91 bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmQg KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZkaW0gKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZmRpbSAoZG91YmxlIF9feCwg ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWF4IChkb3VibGUgX194LCBk b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYXggKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91YmxlIF9feCwgZG91 YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194LCBkb3Vi bGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnkgKGRvdWJsZSBfX3Zh bHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g aW50IF9fc2lnbmJpdCAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIGZtYSAoZG91YmxlIF9feCwgZG91Ymxl IF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWEgKGRvdWJsZSBf X3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBz Y2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19z Y2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGFj b3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hY29zZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRh bmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5mIChmbG9hdCBfX3gp IHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJv dyAoKTsKCgpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5mIChmbG9h dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5mIChmbG9hdCBfX3gpIHRocm93ICgp OwoKZXh0ZXJuIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X3RhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIHRocm93ICgp OwoKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19zaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0 ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxv YXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBh Y29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAoZmxvYXQg X194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9h dCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChmbG9hdCBfX3gpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVy biBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBmIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikg dGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQg cG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3cxMGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cG0xZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVy biBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzFw ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoK CgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CgoKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoK CmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f c3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGh5cG90ZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19oeXBvdGYgKGZsb2F0 IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9h dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKCgoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZhYnNm IChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu IGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbW9k ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbW9kZiAo ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAo ZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0IF9fdmFsdWUpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWYg KGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f c2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBjb3B5 c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGZsb2F0 IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX2lzbmFu ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgpleHRlcm4gaW50IGlzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fajBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBqMWYgKGZsb2F0 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fajFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBm bG9hdCBqbmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qbmYgKGludCwg ZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX3kwZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTFmIChmbG9hdCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxv YXQgeW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZs b2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgZXJmY2Yg KGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsK ZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdh bW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19nYW1t YWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQs IGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxv YXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZmxvYXQgcmludGYg KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRmIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKCmV4dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uZXh0 YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKZXh0ZXJuIGZsb2F0IG5leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91 YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxv YXQgX19uZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IHJlbWFpbmRlcmYgKGZs b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVtYWluZGVyZiAo ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAo ZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxv YXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK CgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4 dGVybiBmbG9hdCBfX25lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBm bG9hdCByb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JvdW5kZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxvYXQgX194KSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3RydW5j ZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpl eHRlcm4gZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50 ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRl cm4gbG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50 IF9fbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxy b3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3Vu ZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQgX194 LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxvYXQgX194LCBm bG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9h dCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBf X3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9fdmFsdWUpIHRocm93 ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWdu Yml0ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQg X196KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ks IGZsb2F0IF9feikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJmIChmbG9hdCBfX3gs IGZsb2F0IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxiZiAoZmxvYXQgX194LCBm bG9hdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRv dWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IGNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nv c2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19z aW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91Ymxl ICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2hsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zaGwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2luaGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbmhsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBf X3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhw bCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBs b25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX21vZGZs IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu IGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVy biBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g bG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv bmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxv bmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk b3VibGUgbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2xvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBsb25n IGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3Rs IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBs b25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBk b3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3Vi bGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmlu aXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChs b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWdu aWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9u ZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19j b3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChf X2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gbG9uZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbmwg KGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgajBsIChsb25n IGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBkb3VibGUp IHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4g bG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91 YmxlIHkwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwg KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKSB0aHJv dyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoK CgoKCmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg ZG91YmxlIGVyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2VyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFs IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwgKGxv bmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRnYW1tYWwgKGxv bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAobG9uZyBk b3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91 YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91Ymxl LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFs X3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u ZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f bmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJk bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFp bmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f bikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9f bikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBuZWFyYnlp bnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZWFy YnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg cm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19y b3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0 cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJl bXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQg bHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmlu dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmlu dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxy aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3Vu ZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91 bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZmRp bWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv dyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUg Zm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBfX3ZhbHVl KSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50 IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBs b25nIGRvdWJsZSBfX3opIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBzaWduZ2FtOwplbnVtCiAgewogICAgRlBfTkFOLAoKICAgIEZQX0lORklO SVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9STUFMLAoKICAgIEZQX05PUk1BTAoKICB9 Owp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9Q T1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJT SU9OX1RZUEUgX0xJQl9WRVJTSU9OOwpzdHJ1Y3QgX19leGNlcHRpb24KCgoKICB7CiAgICBpbnQg dHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwog ICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhj ZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7Cl9faW5saW5lIGludApfX3NpZ25iaXRmIChmbG9hdCBf X3gpIHRocm93ICgpCnsKICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgZmxvYXQgX19mOyBpbnQgX19p OyB9IF9fdSA9IHsgX19mOiBfX3ggfTsKICByZXR1cm4gX191Ll9faSA8IDA7Cn0KX19pbmxpbmUg aW50Cl9fc2lnbmJpdCAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5p b24geyBkb3VibGUgX19kOyBpbnQgX19pWzJdOyB9IF9fdSA9IHsgX19kOiBfX3ggfTsKICByZXR1 cm4gX191Ll9faVsxXSA8IDA7Cn0KX19pbmxpbmUgaW50Cl9fc2lnbmJpdGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX2w7 IGludCBfX2lbM107IH0gX191ID0geyBfX2w6IF9feCB9OwogIHJldHVybiAoX191Ll9faVsyXSAm IDB4ODAwMCkgIT0gMDsKfQpfX2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSkgdGhyb3cgKCk7 IF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX194 ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBfX2lubGluZSBmbG9h dCBfX3NnbmYgKGZsb2F0KSB0aHJvdyAoKTsgX19pbmxpbmUgZmxvYXQgX19zZ25mIChmbG9hdCBf X3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4w IDogLTEuMCk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25nIGRvdWJsZSkgdGhy b3cgKCk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjAp OyB9CgoKCgpfX2lubGluZSBkb3VibGUgX19wb3cyIChkb3VibGUpIHRocm93ICgpOyBfX2lubGlu ZSBkb3VibGUgX19wb3cyIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fZXh0ZW5zaW9u X18gbG9uZyBsb25nIGludCBfX3AgPSAobG9uZyBsb25nIGludCkgX194OyBpZiAoX194ID09IChs b25nIGRvdWJsZSkgX19wKSB7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChf X3ZhbHVlKSA6ICIwIiAoMS4wKSwgInUiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19hc20g X192b2xhdGlsZV9fICgiZmxkCSUlc3QoMClcblx0IiAiZnJuZGludAkJCSMgaW50KHgpXG5cdCIg ImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHgpXG5cdCIgImYyeG0xCQkJIyAyXihm cmFjdCh4KSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAi MCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6 ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVy biBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IF9fcG93MmYgKGZsb2F0KSB0aHJvdyAoKTsgX19p bmxpbmUgZmxvYXQgX19wb3cyZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fZXh0ZW5z aW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9uZyBsb25nIGludCkgX194OyBpZiAoX194ID09 IChsb25nIGRvdWJsZSkgX19wKSB7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQi IChfX3ZhbHVlKSA6ICIwIiAoMS4wKSwgInUiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19h c20gX192b2xhdGlsZV9fICgiZmxkCSUlc3QoMClcblx0IiAiZnJuZGludAkJCSMgaW50KHgpXG5c dCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHgpXG5cdCIgImYyeG0xCQkJIyAy XihmcmFjdCh4KSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkg OiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxl IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJl dHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIF9fcG93MmwgKGxvbmcgZG91Ymxl KSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19wb3cybCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fZXhwb25lbnQ7IF9fZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9u ZyBsb25nIGludCkgX194OyBpZiAoX194ID09IChsb25nIGRvdWJsZSkgX19wKSB7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoMS4wKSwgInUiIChf X3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19hc20gX192b2xhdGlsZV9fICgiZmxkCSUlc3QoMClc blx0IiAiZnJuZGludAkJCSMgaW50KHgpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkj IGZyYWN0KHgpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4KSkgLSAxXG5cdCIgOiAiPXQiIChf X3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsg X19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3Zh bHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9Cl9faW5saW5lIHZvaWQK X19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhy b3cgKCkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fY29zcjsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX19zaW5yOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2luY29zXG5cdCIgImZuc3RzdwklJWF4 XG5cdCIgInRlc3RsCSQweDQwMCwgJSVlYXhcblx0IiAianoJMWZcblx0IiAiZmxkcGlcblx0IiAi ZmFkZAklJXN0KDApXG5cdCIgImZ4Y2gJJSVzdCgxKVxuXHQiICIyOiBmcHJlbTFcblx0IiAiZm5z dHN3CSUlYXhcblx0IiAidGVzdGwJJDB4NDAwLCAlJWVheFxuXHQiICJqbnoJMmJcblx0IiAiZnN0 cAklJXN0KDEpXG5cdCIgImZzaW5jb3Ncblx0IiAiMToiIDogIj10IiAoX19jb3NyKSwgIj11IiAo X19zaW5yKSA6ICIwIiAoX194KSk7ICpfX3NpbnggPSBfX3NpbnI7ICpfX2Nvc3ggPSBfX2Nvc3I7 Cn0KCl9faW5saW5lIHZvaWQKX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZs b2F0ICpfX2Nvc3gpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2Nvc3I7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fc2lucjsgX19hc20gX192b2xhdGlsZV9fICgiZnNpbmNvc1xu XHQiICJmbnN0c3cJJSVheFxuXHQiICJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIgImp6CTFmXG5c dCIgImZsZHBpXG5cdCIgImZhZGQJJSVzdCgwKVxuXHQiICJmeGNoCSUlc3QoMSlcblx0IiAiMjog ZnByZW0xXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInRlc3RsCSQweDQwMCwgJSVlYXhcblx0IiAi am56CTJiXG5cdCIgImZzdHAJJSVzdCgxKVxuXHQiICJmc2luY29zXG5cdCIgIjE6IiA6ICI9dCIg KF9fY29zciksICI9dSIgKF9fc2lucikgOiAiMCIgKF9feCkpOyAqX19zaW54ID0gX19zaW5yOyAq X19jb3N4ID0gX19jb3NyOwp9CgpfX2lubGluZSB2b2lkCl9fc2luY29zbCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKQp7 CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19jb3NyOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Np bnI7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW5jb3Ncblx0IiAiZm5zdHN3CSUlYXhcblx0IiAi dGVzdGwJJDB4NDAwLCAlJWVheFxuXHQiICJqegkxZlxuXHQiICJmbGRwaVxuXHQiICJmYWRkCSUl c3QoMClcblx0IiAiZnhjaAklJXN0KDEpXG5cdCIgIjI6IGZwcmVtMVxuXHQiICJmbnN0c3cJJSVh eFxuXHQiICJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIgImpuegkyYlxuXHQiICJmc3RwCSUlc3Qo MSlcblx0IiAiZnNpbmNvc1xuXHQiICIxOiIgOiAiPXQiIChfX2Nvc3IpLCAiPXUiIChfX3NpbnIp IDogIjAiIChfX3gpKTsgKl9fc2lueCA9IF9fc2lucjsgKl9fY29zeCA9IF9fY29zcjsKfQpfX2lu bGluZSBsb25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25l bnQ7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdGVtcDsgX19hc20gX192b2xhdGlsZV9fICgiZmxk bDJlCQkJIyBlXnggLSAxID0gMl4oeCAqIGxvZzIoZSkpIC0gMVxuXHQiICJmbXVsCSUlc3QoMSkJ CSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHgg KiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9n MihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgImZz Y2FsZQkJCSMgMl4oeCAqIGxvZzIoZSkpIC0gMl4oaW50KHggKiBsb2cyKGUpKSlcblx0IiA6ICI9 dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9s YXRpbGVfXyAoImZzY2FsZQkJCSMgMl5pbnQoeCAqIGxvZzIoZSkpXG5cdCIgOiAiPXQiIChfX3Rl bXApIDogIjAiICgxLjApLCAidSIgKF9fZXhwb25lbnQpKTsgX190ZW1wIC09IDEuMDsgcmV0dXJu IF9fdGVtcCArIF9fdmFsdWUgPzogX194OyB9Cl9faW5saW5lIGRvdWJsZSBleHAgKGRvdWJsZSBf X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXngg PSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIg ImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhj aFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJ IyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIg KF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRp bGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19l eHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBleHBmIChmbG9hdCBf X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXngg PSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIg ImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhj aFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJ IyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIg KF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRp bGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19l eHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBleHBsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgiZmxk bDJlCQkJIyBlXnggPSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBs b2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihl KSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5c dCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAoX192 YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1 ZSksICJ1IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfQpfX2lubGluZSBsb25nIGRv dWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2FzbSBfX3Zv bGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQiICJmbXVsCSUl c3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMg aW50KHggKiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4 ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5c dCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3Zh bHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9CgoK X19pbmxpbmUgZG91YmxlIHRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlMiBfX2F0dHJpYnV0 ZV9fICgoX191bnVzZWRfXykpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcHRhbiIgOiAiPXQiIChf X3ZhbHVlMiksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0g X19pbmxpbmUgZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9fYXR0cmlidXRl X18gKChfX3VudXNlZF9fKSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwdGFuIiA6ICI9dCIgKF9f dmFsdWUyKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBf X2lubGluZSBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTIg X19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsgX19hc20gX192b2xhdGlsZV9fICgiZnB0YW4i IDogIj10IiAoX192YWx1ZTIpLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBf X3ZhbHVlOyB9Cl9faW5saW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkg dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJz dCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9f eSwgZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwg InUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91 YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFu IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0 dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91Ymxl IF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f dmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw IiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CgoKX19pbmxp bmUgZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0 IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6 ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9f aW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdp c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxu XHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0g X19pbmxpbmUgbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9s YXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJ MWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIp OyByZXR1cm4gX192YWx1ZTsgfQpfX2lubGluZSBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgdGhy b3cgKCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz cXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBf X2lubGluZSBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGZsb2F0 IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkg OiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgc3Fy dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jl c3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAi IChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fc3FydGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3Vs dDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChf X3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgoKX19pbmxpbmUgZG91YmxlIGZhYnMgKGRvdWJsZSBf X3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzIChfX3gpOyB9Cl9faW5saW5lIGZs b2F0IGZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZiAo X194KTsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCk7IH0KX19pbmxpbmUgbG9uZyBkb3Vi bGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0aW5f ZmFic2wgKF9feCk7IH0KCgoKCgoKCl9faW5saW5lIGRvdWJsZSBzaW4gKGRvdWJsZSBfX3gpIHRo cm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm c2luIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBf X2lubGluZSBmbG9hdCBzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQg X19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDog IjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIHNpbmwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3Vs dDsgX19hc20gX192b2xhdGlsZV9fICgiZnNpbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9f eCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5lIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gp IHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmY29zIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsg fSBfX2lubGluZSBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZmxv YXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZjb3MiIDogIj10IiAoX19yZXN1bHQp IDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGNv c2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jl c3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmNvcyIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIg KF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5lIGRvdWJsZSBsb2cgKGRvdWJsZSBf X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmbGRsbjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6 ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgbG9nZiAoZmxvYXQg X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxl X18gKCJmbGRsbjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6 ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nbCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0 OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVz dWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KX19pbmxpbmUg ZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jl c3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbGcyOyBmeGNoOyBmeWwyeCIgOiAiPXQiIChf X3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5s aW5lIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGZsb2F0IF9f cmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsZzI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIg KF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19p bmxpbmUgbG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn aXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxnMjsg ZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJl dHVybiBfX3Jlc3VsdDsgfQoKX19pbmxpbmUgZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpIHRocm93 ICgpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3gsIF9fc3FydGwgKDEuMCAtIF9feCAqIF9feCkpOyB9 IF9faW5saW5lIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYXRh bjJsIChfX3gsIF9fc3FydGwgKDEuMCAtIF9feCAqIF9feCkpOyB9IF9faW5saW5lIGxvbmcgZG91 YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYXRhbjJsIChf X3gsIF9fc3FydGwgKDEuMCAtIF9feCAqIF9feCkpOyB9Cl9faW5saW5lIGRvdWJsZSBhY29zIChk b3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2F0YW4ybCAoX19zcXJ0bCAoMS4wIC0gX194 ICogX194KSwgX194KTsgfSBfX2lubGluZSBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB0aHJvdyAo KSB7IHJldHVybiBfX2F0YW4ybCAoX19zcXJ0bCAoMS4wIC0gX194ICogX194KSwgX194KTsgfSBf X2lubGluZSBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJl dHVybiBfX2F0YW4ybCAoX19zcXJ0bCAoMS4wIC0gX194ICogX194KSwgX194KTsgfQoKCl9faW5s aW5lIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBf X3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVz dWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUg ZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3Vs dDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6 ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBk b3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIg KF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9f aW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxp bmUgbG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IF9fZXh0 ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX3hsZDsgdW5zaWduZWQgaW50IF9feGlbM107 IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5fX3hpWzJdID0gKF9fbi5fX3hpWzJdICYgMHg4 MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAweDgwMDAwMDAwOyBfX24uX194aVswXSA9IDA7 IHJldHVybiBfX24uX194bGQ7IH0KX19pbmxpbmUgZG91YmxlIHNpbmggKGRvdWJsZSBfX3gpIHRo cm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wg KF9feCkpOyByZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApICsgX19leG0xKSAq IF9fc2duMWwgKF9feCk7IH0gX19pbmxpbmUgZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cg KCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194 KSk7IHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEuMCkgKyBfX2V4bTEpICogX19z Z24xbCAoX194KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2Zh YnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXht MSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCl9faW5saW5lIGRvdWJsZSBjb3NoIChkb3VibGUgX194 KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXggPSBfX2V4cGwgKF9feCk7IHJl dHVybiAwLjUgKiAoX19leCArIDEuMCAvIF9fZXgpOyB9IF9faW5saW5lIGZsb2F0IGNvc2hmIChm bG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leCA9IF9fZXhwbCAo X194KTsgcmV0dXJuIDAuNSAqIChfX2V4ICsgMS4wIC8gX19leCk7IH0gX19pbmxpbmUgbG9uZyBk b3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX2V4ID0gX19leHBsIChfX3gpOyByZXR1cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4 KTsgfQoKCgpfX2lubGluZSBkb3VibGUgdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdp c3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoLV9fZmFic2wgKF9feCArIF9feCkp OyByZXR1cm4gX19leG0xIC8gKF9fZXhtMSArIDIuMCkgKiBfX3NnbjFsICgtX194KTsgfSBfX2lu bGluZSBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fZXhtMSA9IF9fZXhwbTFsICgtX19mYWJzbCAoX194ICsgX194KSk7IHJldHVybiBfX2V4 bTEgLyAoX19leG0xICsgMi4wKSAqIF9fc2duMWwgKC1fX3gpOyB9IF9faW5saW5lIGxvbmcgZG91 YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX19leG0xID0gX19leHBtMWwgKC1fX2ZhYnNsIChfX3ggKyBfX3gpKTsgcmV0dXJuIF9fZXht MSAvIChfX2V4bTEgKyAyLjApICogX19zZ24xbCAoLV9feCk7IH0KCgoKCl9faW5saW5lIGRvdWJs ZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2ln bmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9 bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192 b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUg KCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGls ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5l IGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAi IDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xh dGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3Zv bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19p bmxpbmUgbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQg X19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xh dGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNm ZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3Rt cCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo X194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1 cm4gX192YWx1ZTsgfQpfX2lubGluZSBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0 IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBf X3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYg MHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChf X2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDog IjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7 IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93 ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBz aG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19h c20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19j dyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJt IiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVl KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j dykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg aW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykp OyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgi ZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQi IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cg JTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgZG91YmxlCmxk ZXhwIChkb3VibGUgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9 CgoKCgoKCl9faW5saW5lIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdp c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50 OyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3RlbXA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwy ZQkJCSMgZV54IC0gMSA9IDJeKHggKiBsb2cyKGUpKSAtIDFcblx0IiAiZm11bAklJXN0KDEpCQkj IHggKiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICog bG9nMihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIo ZSkpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiICJmc2Nh bGUJCQkjIDJeKHggKiBsb2cyKGUpKSAtIDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIgOiAiPXQi IChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0 aWxlX18gKCJmc2NhbGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxuXHQiIDogIj10IiAoX190ZW1w KSA6ICIwIiAoMS4wKSwgInUiIChfX2V4cG9uZW50KSk7IF9fdGVtcCAtPSAxLjA7IHJldHVybiBf X3RlbXAgKyBfX3ZhbHVlID86IF9feDsgfSBfX2lubGluZSBmbG9hdCBleHBtMWYgKGZsb2F0IF9f eCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25n IGRvdWJsZSBfX2V4cG9uZW50OyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3RlbXA7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54IC0gMSA9IDJeKHggKiBsb2cyKGUpKSAtIDFcblx0 IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZy bmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJ CSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihl KSkpIC0gMVxuXHQiICJmc2NhbGUJCQkjIDJeKHggKiBsb2cyKGUpKSAtIDJeKGludCh4ICogbG9n MihlKSkpXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9f eCkpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxu XHQiIDogIj10IiAoX190ZW1wKSA6ICIwIiAoMS4wKSwgInUiIChfX2V4cG9uZW50KSk7IF9fdGVt cCAtPSAxLjA7IHJldHVybiBfX3RlbXAgKyBfX3ZhbHVlID86IF9feDsgfSBfX2lubGluZSBsb25n IGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3RlbXA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54 IC0gMSA9IDJeKHggKiBsb2cyKGUpKSAtIDFcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cy KGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlc blx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIg ImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiICJmc2NhbGUJCQkjIDJe KHggKiBsb2cyKGUpKSAtIDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIgOiAiPXQiIChfX3ZhbHVl KSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm c2NhbGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxuXHQiIDogIj10IiAoX190ZW1wKSA6ICIwIiAo MS4wKSwgInUiIChfX2V4cG9uZW50KSk7IF9fdGVtcCAtPSAxLjA7IHJldHVybiBfX3RlbXAgKyBf X3ZhbHVlID86IF9feDsgfQoKCgoKCgpfX2lubGluZSBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gp IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9f eCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2ds ICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNo XG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsg cmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93 ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0g MS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAg KyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIg ImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJu IF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9f eCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2ds ICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNo XG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsg cmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgZG91YmxlIGFzaW5oIChkb3VibGUgX194KSB0aHJv dyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAo bG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBf X3kpICogX19zZ24xbCAoX194KSk7IH0gX19pbmxpbmUgZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gp IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0 dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4w KSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhc2luaGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBf X2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAq IF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9CgoKCgpfX2lubGlu ZSBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIGxvZ2wgKF9feCAr IF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfSBfX2lubGluZSBm bG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19z cXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9IF9faW5saW5lIGxvbmcg ZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBsb2dsIChf X3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0KCgpfX2lu bGluZSBkb3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsg X195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0gX19pbmxpbmUgZmxvYXQgYXRh bmhmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19m YWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBf X3kpKSAqIF9fc2duMWwgKF9feCk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmhsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJz bCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kp KSAqIF9fc2duMWwgKF9feCk7IH0KCgoKCl9faW5saW5lIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195 ICogX195KTsgfSBfX2lubGluZSBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0 aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9IF9faW5s aW5lIGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp IHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0KCl9f aW5saW5lIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xh dGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAi MCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBsb2diZiAoZmxvYXQg X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10 IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsg fSBfX2lubGluZSBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVu azsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwgIj11 IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfQpfX2lubGluZSBkb3Vi bGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7 IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0 KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxv YXQgbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsg X19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQp IDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25n IGRvdWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmeGNoOyBmeWwyeCIg OiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0 OyB9CgoKX19pbmxpbmUgZmxvYXQKbGRleHBmIChmbG9hdCBfX3gsIGludCBfX3kpIHRocm93ICgp CnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm c2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBf X3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCl9faW5saW5lIGxvbmcgZG91YmxlCmxkZXhwbCAobG9u ZyBkb3VibGUgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDog IjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CgoK X19pbmxpbmUgZG91YmxlIGZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikg dGhyb3cgKCkgeyByZXR1cm4gKF9feCAqIF9feSkgKyBfX3o7IH0gX19pbmxpbmUgZmxvYXQgZm1h ZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCkgeyByZXR1cm4gKF9f eCAqIF9feSkgKyBfX3o7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCkgeyByZXR1cm4g KF9feCAqIF9feSkgKyBfX3o7IH0KCl9faW5saW5lIGRvdWJsZSByaW50IChkb3VibGUgX194KSB0 aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgi ZnJuZGludCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7 IH0gX19pbmxpbmUgZmxvYXQgcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBm bG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnJuZGludCIgOiAiPXQiIChfX3Jl c3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3Vi bGUgcmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnJuZGludCIgOiAiPXQiIChfX3Jlc3Vs dCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KX19pbmxpbmUgbG9uZyBpbnQKbHJp bnRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9f IF9fdm9sYXRpbGVfXyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194 KSA6ICJzdCIpOyByZXR1cm4gX19scmludHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludCAo ZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192 b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDog InN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBf X3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkg OiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJp bnRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBf X2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDog InQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQpfX2lubGluZSBsb25nIGxv bmcgaW50CmxscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQgX19s bHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xs cmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9faW5s aW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAg bG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxs ICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19s bHJpbnRyZXM7Cn0KCgoKCgoKCl9faW5saW5lIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3Vi bGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQg X19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3Rzdwkl JWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Ns b2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsg fSBfX2lubGluZSBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIHsg cmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20g X192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQi ICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194 KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91 YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgeyBy ZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBf X3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIg ImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gp LCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgaW50Cl9fZmlu aXRlIChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgcmV0dXJuIChfX2V4dGVuc2lvbl9fCiAgICAg ICAgICAoKCgoKHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsgfSkge19fZDogX194fSku X19pWzFdCiAgICAgICAgICAgICB8IDB4ODAwZmZmZmZ1KSArIDEpID4+IDMxKSk7Cn0KCgoKX19p bmxpbmUgZG91YmxlIF9fY29zaG0xIChkb3VibGUpIHRocm93ICgpOyBfX2lubGluZSBkb3VibGUg X19jb3NobTEgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19l eG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9feCkpOyByZXR1cm4gMC41ICogKF9fZXhtMSAvIChf X2V4bTEgKyAxLjApKSAqIF9fZXhtMTsgfSBfX2lubGluZSBmbG9hdCBfX2Nvc2htMWYgKGZsb2F0 KSB0aHJvdyAoKTsgX19pbmxpbmUgZmxvYXQgX19jb3NobTFmIChmbG9hdCBfX3gpIHRocm93ICgp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9feCkp OyByZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApKSAqIF9fZXhtMTsgfSBfX2lu bGluZSBsb25nIGRvdWJsZSBfX2Nvc2htMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxp bmUgbG9uZyBkb3VibGUgX19jb3NobTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn aXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9feCkpOyByZXR1 cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApKSAqIF9fZXhtMTsgfQoKCgpfX2lubGlu ZSBkb3VibGUgX19hY29zaDFwIChkb3VibGUpIHRocm93ICgpOyBfX2lubGluZSBkb3VibGUgX19h Y29zaDFwIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBsb2cxcGwgKF9feCArIF9fc3Fy dGwgKF9feCkgKiBfX3NxcnRsIChfX3ggKyAyLjApKTsgfSBfX2lubGluZSBmbG9hdCBfX2Fjb3No MXBmIChmbG9hdCkgdGhyb3cgKCk7IF9faW5saW5lIGZsb2F0IF9fYWNvc2gxcGYgKGZsb2F0IF9f eCkgdGhyb3cgKCkgeyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0 bCAoX194ICsgMi4wKSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgX19hY29zaDFwbCAobG9uZyBk b3VibGUpIHRocm93ICgpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX2Fjb3NoMXBsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIGxvZzFwbCAoX194ICsgX19zcXJ0bCAoX194KSAq IF9fc3FydGwgKF9feCArIDIuMCkpOyB9Cn0KaW5saW5lIGZsb2F0IEFjb3MgKGZsb2F0IGEpIHsg cmV0dXJuIGFjb3MgKGEpOyB9IGlubGluZSBmbG9hdCBBc2luIChmbG9hdCBhKSB7IHJldHVybiBh c2luIChhKTsgfSBpbmxpbmUgZmxvYXQgQXRhbiAoZmxvYXQgYSkgeyByZXR1cm4gYXRhbiAoYSk7 IH0gaW5saW5lIGZsb2F0IEF0YW4yIChmbG9hdCBhLCBmbG9hdCBiKSB7IHJldHVybiBhdGFuMiAo YSwgYik7IH0gaW5saW5lIGZsb2F0IENvcyAoZmxvYXQgYSkgeyByZXR1cm4gY29zIChhKTsgfSBp bmxpbmUgZmxvYXQgU2luIChmbG9hdCBhKSB7IHJldHVybiBzaW4gKGEpOyB9IGlubGluZSBmbG9h dCBUYW4gKGZsb2F0IGEpIHsgcmV0dXJuIHRhbiAoYSk7IH0gaW5saW5lIGZsb2F0IENvc2ggKGZs b2F0IGEpIHsgcmV0dXJuIGNvc2ggKGEpOyB9IGlubGluZSBmbG9hdCBTaW5oIChmbG9hdCBhKSB7 IHJldHVybiBzaW5oIChhKTsgfSBpbmxpbmUgZmxvYXQgVGFuaCAoZmxvYXQgYSkgeyByZXR1cm4g dGFuaCAoYSk7IH0gaW5saW5lIGZsb2F0IEFicyAoZmxvYXQgYSkgeyByZXR1cm4gZmFicyAoYSk7 IH0gaW5saW5lIGZsb2F0IENlaWwgKGZsb2F0IGEpIHsgcmV0dXJuIGNlaWwgKGEpOyB9IGlubGlu ZSBmbG9hdCBGbG9vciAoZmxvYXQgYSkgeyByZXR1cm4gZmxvb3IgKGEpOyB9IGlubGluZSBmbG9h dCBSaW50IChmbG9hdCBhKSB7IHJldHVybiBmbG9vciAoYSArIC41KTsgfSBpbmxpbmUgZmxvYXQg Rm1vZCAoZmxvYXQgeCwgZmxvYXQgeSkgeyByZXR1cm4gZm1vZCAoeCwgeSk7IH0gaW5saW5lIGZs b2F0IE1vZGYgKGZsb2F0IHgsIGZsb2F0ICpwaW50KSB7IGRvdWJsZSBoLCByID0gbW9kZiAoeCwg JmgpOyAqcGludCA9IGg7IHJldHVybiByOyB9IGlubGluZSBmbG9hdCBGcmV4cCAoZmxvYXQgeCwg aW50ICpwZXhwKSB7IHJldHVybiBmcmV4cCAoeCwgcGV4cCk7IH0gaW5saW5lIGZsb2F0IExkZXhw IChmbG9hdCB4LCBpbnQgZXhwKSB7IHJldHVybiBsZGV4cCAoeCwgZXhwKTsgfSBpbmxpbmUgZmxv YXQgRXhwIChmbG9hdCBhKSB7IHJldHVybiBleHAgKGEpOyB9IGlubGluZSBmbG9hdCBMb2dOIChm bG9hdCBhKSB7IHJldHVybiBsb2cgKGEpOyB9IGlubGluZSBmbG9hdCBMb2cxMCAoZmxvYXQgYSkg eyByZXR1cm4gbG9nMTAgKGEpOyB9IGlubGluZSBmbG9hdCBQb3cgKGZsb2F0IGEsIGZsb2F0IGIp IHsgcmV0dXJuIHBvdyAoYSwgYik7IH0gaW5saW5lIGZsb2F0IFNxcnQgKGZsb2F0IGEpIHsgcmV0 dXJuIHNxcnQgKGEpOyB9IGlubGluZSBmbG9hdCBJc05hTiAoZmxvYXQgYSkgeyByZXR1cm4gKHNp emVvZiAoYSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lzbmFuZiAoYSkgOiBzaXplb2YgKGEpID09 IHNpemVvZiAoZG91YmxlKSA/IF9faXNuYW4gKGEpIDogX19pc25hbmwgKGEpKTsgfSBpbmxpbmUg ZmxvYXQgSXNJbmYgKGZsb2F0IGEpIHsgcmV0dXJuIChzaXplb2YgKGEpID09IHNpemVvZiAoZmxv YXQpID8gX19pc2luZmYgKGEpIDogc2l6ZW9mIChhKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2lz aW5mIChhKSA6IF9faXNpbmZsIChhKSk7IH0KaW5saW5lIGRvdWJsZSBBY29zIChkb3VibGUgYSkg eyByZXR1cm4gYWNvcyAoYSk7IH0gaW5saW5lIGRvdWJsZSBBc2luIChkb3VibGUgYSkgeyByZXR1 cm4gYXNpbiAoYSk7IH0gaW5saW5lIGRvdWJsZSBBdGFuIChkb3VibGUgYSkgeyByZXR1cm4gYXRh biAoYSk7IH0gaW5saW5lIGRvdWJsZSBBdGFuMiAoZG91YmxlIGEsIGRvdWJsZSBiKSB7IHJldHVy biBhdGFuMiAoYSwgYik7IH0gaW5saW5lIGRvdWJsZSBDb3MgKGRvdWJsZSBhKSB7IHJldHVybiBj b3MgKGEpOyB9IGlubGluZSBkb3VibGUgU2luIChkb3VibGUgYSkgeyByZXR1cm4gc2luIChhKTsg fSBpbmxpbmUgZG91YmxlIFRhbiAoZG91YmxlIGEpIHsgcmV0dXJuIHRhbiAoYSk7IH0gaW5saW5l IGRvdWJsZSBDb3NoIChkb3VibGUgYSkgeyByZXR1cm4gY29zaCAoYSk7IH0gaW5saW5lIGRvdWJs ZSBTaW5oIChkb3VibGUgYSkgeyByZXR1cm4gc2luaCAoYSk7IH0gaW5saW5lIGRvdWJsZSBUYW5o IChkb3VibGUgYSkgeyByZXR1cm4gdGFuaCAoYSk7IH0gaW5saW5lIGRvdWJsZSBBYnMgKGRvdWJs ZSBhKSB7IHJldHVybiBmYWJzIChhKTsgfSBpbmxpbmUgZG91YmxlIENlaWwgKGRvdWJsZSBhKSB7 IHJldHVybiBjZWlsIChhKTsgfSBpbmxpbmUgZG91YmxlIEZsb29yIChkb3VibGUgYSkgeyByZXR1 cm4gZmxvb3IgKGEpOyB9IGlubGluZSBkb3VibGUgUmludCAoZG91YmxlIGEpIHsgcmV0dXJuIGZs b29yIChhICsgLjUpOyB9IGlubGluZSBkb3VibGUgRm1vZCAoZG91YmxlIHgsIGRvdWJsZSB5KSB7 IHJldHVybiBmbW9kICh4LCB5KTsgfSBpbmxpbmUgZG91YmxlIE1vZGYgKGRvdWJsZSB4LCBkb3Vi bGUgKnBpbnQpIHsgcmV0dXJuIG1vZGYgKHgsIHBpbnQpOyB9IGlubGluZSBkb3VibGUgRnJleHAg KGRvdWJsZSB4LCBpbnQgKnBleHApIHsgcmV0dXJuIGZyZXhwICh4LCBwZXhwKTsgfSBpbmxpbmUg ZG91YmxlIExkZXhwIChkb3VibGUgeCwgaW50IGV4cCkgeyByZXR1cm4gbGRleHAgKHgsIGV4cCk7 IH0gaW5saW5lIGRvdWJsZSBFeHAgKGRvdWJsZSBhKSB7IHJldHVybiBleHAgKGEpOyB9IGlubGlu ZSBkb3VibGUgTG9nTiAoZG91YmxlIGEpIHsgcmV0dXJuIGxvZyAoYSk7IH0gaW5saW5lIGRvdWJs ZSBMb2cxMCAoZG91YmxlIGEpIHsgcmV0dXJuIGxvZzEwIChhKTsgfSBpbmxpbmUgZG91YmxlIFBv dyAoZG91YmxlIGEsIGRvdWJsZSBiKSB7IHJldHVybiBwb3cgKGEsIGIpOyB9IGlubGluZSBkb3Vi bGUgU3FydCAoZG91YmxlIGEpIHsgcmV0dXJuIHNxcnQgKGEpOyB9IGlubGluZSBkb3VibGUgSXNO YU4gKGRvdWJsZSBhKSB7IHJldHVybiAoc2l6ZW9mIChhKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f aXNuYW5mIChhKSA6IHNpemVvZiAoYSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc25hbiAoYSkg OiBfX2lzbmFubCAoYSkpOyB9IGlubGluZSBkb3VibGUgSXNJbmYgKGRvdWJsZSBhKSB7IHJldHVy biAoc2l6ZW9mIChhKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNpbmZmIChhKSA6IHNpemVvZiAo YSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc2luZiAoYSkgOiBfX2lzaW5mbCAoYSkpOyB9Cmlu bGluZSBsb25nIGRvdWJsZSBBY29zIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiBhY29zbCAoYSk7 IH0gaW5saW5lIGxvbmcgZG91YmxlIEFzaW4gKGxvbmcgZG91YmxlIGEpIHsgcmV0dXJuIGFzaW5s IChhKTsgfSBpbmxpbmUgbG9uZyBkb3VibGUgQXRhbiAobG9uZyBkb3VibGUgYSkgeyByZXR1cm4g YXRhbmwgKGEpOyB9IGlubGluZSBsb25nIGRvdWJsZSBBdGFuMiAobG9uZyBkb3VibGUgYSwgbG9u ZyBkb3VibGUgYikgeyByZXR1cm4gYXRhbjJsIChhLCBiKTsgfSBpbmxpbmUgbG9uZyBkb3VibGUg Q29zIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiBjb3NsIChhKTsgfSBpbmxpbmUgbG9uZyBkb3Vi bGUgU2luIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiBzaW5sIChhKTsgfSBpbmxpbmUgbG9uZyBk b3VibGUgVGFuIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiB0YW5sIChhKTsgfSBpbmxpbmUgbG9u ZyBkb3VibGUgQ29zaCAobG9uZyBkb3VibGUgYSkgeyByZXR1cm4gY29zaGwgKGEpOyB9IGlubGlu ZSBsb25nIGRvdWJsZSBTaW5oIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiBzaW5obCAoYSk7IH0g aW5saW5lIGxvbmcgZG91YmxlIFRhbmggKGxvbmcgZG91YmxlIGEpIHsgcmV0dXJuIHRhbmhsIChh KTsgfSBpbmxpbmUgbG9uZyBkb3VibGUgQWJzIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiBmYWJz bCAoYSk7IH0gaW5saW5lIGxvbmcgZG91YmxlIENlaWwgKGxvbmcgZG91YmxlIGEpIHsgcmV0dXJu IGNlaWxsIChhKTsgfSBpbmxpbmUgbG9uZyBkb3VibGUgRmxvb3IgKGxvbmcgZG91YmxlIGEpIHsg cmV0dXJuIGZsb29ybCAoYSk7IH0gaW5saW5lIGxvbmcgZG91YmxlIFJpbnQgKGxvbmcgZG91Ymxl IGEpIHsgcmV0dXJuIGZsb29ybCAoYSArIC41KTsgfSBpbmxpbmUgbG9uZyBkb3VibGUgRm1vZCAo bG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkgeyByZXR1cm4gZm1vZGwgKHgsIHkpOyB9IGlu bGluZSBsb25nIGRvdWJsZSBNb2RmIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqcGludCkg eyByZXR1cm4gbW9kZmwgKHgsIHBpbnQpOyB9IGlubGluZSBsb25nIGRvdWJsZSBGcmV4cCAobG9u ZyBkb3VibGUgeCwgaW50ICpwZXhwKSB7IHJldHVybiBmcmV4cGwgKHgsIHBleHApOyB9IGlubGlu ZSBsb25nIGRvdWJsZSBMZGV4cCAobG9uZyBkb3VibGUgeCwgaW50IGV4cCkgeyByZXR1cm4gbGRl eHBsICh4LCBleHApOyB9IGlubGluZSBsb25nIGRvdWJsZSBFeHAgKGxvbmcgZG91YmxlIGEpIHsg cmV0dXJuIGV4cGwgKGEpOyB9IGlubGluZSBsb25nIGRvdWJsZSBMb2dOIChsb25nIGRvdWJsZSBh KSB7IHJldHVybiBsb2dsIChhKTsgfSBpbmxpbmUgbG9uZyBkb3VibGUgTG9nMTAgKGxvbmcgZG91 YmxlIGEpIHsgcmV0dXJuIGxvZzEwbCAoYSk7IH0gaW5saW5lIGxvbmcgZG91YmxlIFBvdyAobG9u ZyBkb3VibGUgYSwgbG9uZyBkb3VibGUgYikgeyByZXR1cm4gcG93bCAoYSwgYik7IH0gaW5saW5l IGxvbmcgZG91YmxlIFNxcnQgKGxvbmcgZG91YmxlIGEpIHsgcmV0dXJuIHNxcnRsIChhKTsgfSBp bmxpbmUgbG9uZyBkb3VibGUgSXNOYU4gKGxvbmcgZG91YmxlIGEpIHsgcmV0dXJuIGlzbmFubCAo YSk7IH0gaW5saW5lIGxvbmcgZG91YmxlIElzSW5mIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiBp c2luZmwgKGEpOyB9CnRlbXBsYXRlIDxjbGFzcyBmbHRfdD4gaW5saW5lIGZsdF90IHJvdW5kX2Ru IChmbHRfdCB4LCBmbHRfdCBuKSB7CiAgcmV0dXJuIHggLSBGbW9kICh4LCBuKTsgfQoKCnRlbXBs YXRlIDxjbGFzcyBmbHRfdD4gaW5saW5lIGZsdF90IHJvdW5kX3VwIChmbHRfdCB4LCBmbHRfdCBu KSB7CiAgZmx0X3QgciA9IEZtb2QgKHgsIG4pOyByZXR1cm4gciA9PSAwID8geCA6IHggLSByICsg bjsgfQoKCgoKdGVtcGxhdGUgPGNsYXNzIGZsdF90PiBpbmxpbmUKYm9vbApmbHRfaXNfemVybyAo Zmx0X3QgeCkKewogIHJldHVybiBBYnMgKHgpIDwgZXBzaWxvbiAoeCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBmbHRfdD4gaW5saW5lCmJvb2wKZmx0X2VxIChmbHRfdCB4LCBmbHRfdCB5KQp7CiAgaWYg KHggPT0gMCkKICAgIHJldHVybiB5ID09IDA7CiAgZWxzZQogICAgcmV0dXJuIEFicyAoeCAvIHkg LSAxKSA8IDggKiBlcHNpbG9uICh4KTsKfQoKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2du dWNfdmFfbGlzdDsKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwpleHRlcm4gIkMiIHsK CgoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg X19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2Nv bnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4g dm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19y ZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24p CiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQg X19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2 b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25z dCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qg dm9pZCAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVf dCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4 dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAo Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFy ICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19y ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChf X2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFy ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBf X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f c3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3RyY29sbF9sIChfX2NvbnN0 IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm1f bCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLAogICAgICAg ICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo YXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X21hbGxvY19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9f c3RyaW5nLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxv Y19fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJj aHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9f cywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0 ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3Jl amVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g c2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAq c3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3Ry IChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0 b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxp bSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jl c3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVz dHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3Qg Y2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6 ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19u ZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBf X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpf X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19y ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBz dHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcs IHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoK CgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6 ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9f cywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZv aWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2 b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg YmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24p CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIg KmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3Ms IGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4g aW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25n IGludCBfX2xsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK CmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg Kl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIs IHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK CgoKZXh0ZXJuIGludCBzdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj aGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jYXNlY21w X2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hh ciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNj bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGlu dCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3Ry aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgp OwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19z dHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0 ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv dyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoK ZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK CgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJv dyAoKTsKfQoKCgoKY2xhc3MgYm9vbF90eXBlCnsKICB0eXBlZGVmIHNpZ25lZCBjaGFyIGJvb2xf dDsKICBib29sX3QgeDsKCnB1YmxpYzoKICBlbnVtIHsgbmlsID0gLTEgfTsKCnB1YmxpYzoKICBi b29sX3R5cGUoKSA6IHggKHN0YXRpY19jYXN0PGJvb2xfdD4gKG5pbCkpIHt9CiAgYm9vbF90eXBl IChib29sIGIpIDogeCAoc3RhdGljX2Nhc3Q8Ym9vbF90PiAoYikpIHt9CiAgYm9vbF90eXBlICZv cGVyYXRvcj0gKGJvb2wgYikgeyB4ID0gc3RhdGljX2Nhc3Q8Ym9vbF90PiAoYik7IHJldHVybiAq dGhpczsgfQoKICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4geCAhPSAnXDAnOyB9CiAg Ym9vbCBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4geCAhPSAnXDAnOyB9CiAgYm9vbF90ICZv cGVyYXRvcigpKCkgeyByZXR1cm4geDsgfQoKICBib29sIGlzX251bGwoKSBjb25zdCB7IHJldHVy biB4ID09IHN0YXRpY19jYXN0PGJvb2xfdD4gKG5pbCk7IH0KICB2b2lkIHNldF9udWxsKCkgeyB4 ID0gc3RhdGljX2Nhc3Q8Ym9vbF90PiAobmlsKTsgfQp9OwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNz IFB5PgpjbGFzcyB3cmFwX2ludF90CnsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgUHk6Om51 bV90IG51bV90OwoKcHJpdmF0ZToKICBudW1fdCB4OwoKcHVibGljOgogIHdyYXBfaW50X3QgKG51 bV90IGNvbnN0IGkgPSBQeTo6bmlsKCkpCiAgICA6IHggKGkpIHt9CiAgd3JhcF9pbnRfdCAmb3Bl cmF0b3I9IChudW1fdCBpKSB7CiAgICB4ID0gaTsgcmV0dXJuICp0aGlzOyB9CgogIGJvb2wgaXNf bnVsbCgpIGNvbnN0IHsgcmV0dXJuIFB5Ojppc19udWxsICh4KTsgfQogIHZvaWQgc2V0X251bGwo KSB7IHggPSBQeTo6bmlsKCk7IH0KCiAgb3BlcmF0b3IgbnVtX3QoKSBjb25zdCB7IHJldHVybiB4 OyB9CiAgbnVtX3QgY29uc3QgJm9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiB4OyB9CiAgbnVt X3QgJm9wZXJhdG9yKCkoKSB7IHJldHVybiB4OyB9CgogIHdyYXBfaW50X3QgJm9wZXJhdG9yKz0g KG51bV90IGkpIHsgeCArPSBpOyByZXR1cm4gKnRoaXM7IH0KICB3cmFwX2ludF90ICZvcGVyYXRv ci09IChudW1fdCBpKSB7IHggLT0gaTsgcmV0dXJuICp0aGlzOyB9CiAgd3JhcF9pbnRfdCAmb3Bl cmF0b3IqPSAobnVtX3QgaSkgeyB4ICo9IGk7IHJldHVybiAqdGhpczsgfQogIHdyYXBfaW50X3Qg Jm9wZXJhdG9yLz0gKG51bV90IGkpIHsgeCAvPSBpOyByZXR1cm4gKnRoaXM7IH0KICB3cmFwX2lu dF90ICZvcGVyYXRvciU9IChudW1fdCBpKSB7IHggJT0gaTsgcmV0dXJuICp0aGlzOyB9CgogIHdy YXBfaW50X3QgJm9wZXJhdG9yJj0gKG51bV90IGkpIHsgeCAmPSBpOyByZXR1cm4gKnRoaXM7IH0K ICB3cmFwX2ludF90ICZvcGVyYXRvcnw9IChudW1fdCBpKSB7IHggfD0gaTsgcmV0dXJuICp0aGlz OyB9CiAgd3JhcF9pbnRfdCAmb3BlcmF0b3JePSAobnVtX3QgaSkgeyB4IF49IGk7IHJldHVybiAq dGhpczsgfQoKICBudW1fdCBvcGVyYXRvcisrKCkgeyByZXR1cm4gKyt4OyB9IG51bV90IG9wZXJh dG9yKysgKGludCkgeyByZXR1cm4geCsrOyB9CiAgbnVtX3Qgb3BlcmF0b3ItLSgpIHsgcmV0dXJu IC0teDsgfSBudW1fdCBvcGVyYXRvci0tIChpbnQpIHsgcmV0dXJuIHgtLTsgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIFB5PgpjbGFzcyB3cmFwX2ZsdF90CnsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h bWUgUHk6Om51bV90IG51bV90OwoKcHJpdmF0ZToKICBudW1fdCB4OwoKcHVibGljOgogIHdyYXBf Zmx0X3QgKG51bV90IGNvbnN0IGkgPSBQeTo6bmlsKCkpCiAgICA6IHggKGkpIHt9CiAgd3JhcF9m bHRfdCAmb3BlcmF0b3I9IChudW1fdCBpKSB7CiAgICB4ID0gaTsgcmV0dXJuICp0aGlzOyB9Cgog IGJvb2wgaXNfbnVsbCgpIGNvbnN0IHsgcmV0dXJuIFB5Ojppc19udWxsICh4KTsgfQogIHZvaWQg c2V0X251bGwoKSB7IHggPSBQeTo6bmlsKCk7IH0KCiAgb3BlcmF0b3IgbnVtX3QoKSBjb25zdCB7 IHJldHVybiB4OyB9CiAgbnVtX3QgY29uc3QgJm9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiB4 OyB9CiAgbnVtX3QgJm9wZXJhdG9yKCkoKSB7IHJldHVybiB4OyB9CgogIHdyYXBfZmx0X3QgJm9w ZXJhdG9yKz0gKG51bV90IGkpIHsgeCArPSBpOyByZXR1cm4gKnRoaXM7IH0KICB3cmFwX2ZsdF90 ICZvcGVyYXRvci09IChudW1fdCBpKSB7IHggLT0gaTsgcmV0dXJuICp0aGlzOyB9CiAgd3JhcF9m bHRfdCAmb3BlcmF0b3IqPSAobnVtX3QgaSkgeyB4ICo9IGk7IHJldHVybiAqdGhpczsgfQogIHdy YXBfZmx0X3QgJm9wZXJhdG9yLz0gKG51bV90IGkpIHsgeCAvPSBpOyByZXR1cm4gKnRoaXM7IH0K CiAgaW50IGNvbXBhcmUgKHdyYXBfZmx0X3QgY29uc3QgJnkpIGNvbnN0CiAgewogICAgaWYgKGlz X251bGwoKSkKICAgICAgaWYgKHkuaXNfbnVsbCgpKQogICAgICAgIHJldHVybiAwOwogICAgICBl bHNlCiAgICAgICAgcmV0dXJuIC0xOwogICAgaWYgKHkuaXNfbnVsbCgpKQogICAgICByZXR1cm4g MTsKICAgIGlmIChmbHRfZXEgKHgsIHkoKSkpCiAgICAgIHJldHVybiAwOwogICAgaWYgKHggPCB5 KCkpCiAgICAgIHJldHVybiAtMTsKICAgIGVsc2UKICAgICAgcmV0dXJuIDE7CiAgfQp9OwpzdHJ1 Y3QgY2hhcl9weV90IHsgdHlwZWRlZiBjaGFyIG51bV90OyBzdGF0aWMgbnVtX3QgbmlsKCkgeyBy ZXR1cm4gKC0xMjgpOyB9IHN0YXRpYyBib29sIGlzX251bGwgKG51bV90IHgpIHsgcmV0dXJuIHgg PT0gbmlsKCk7IH0gc3RhdGljIGNoYXIgY29uc3QgZGVjaW1hbF9zY2FuX2ZtdFtdOyBzdGF0aWMg Y2hhciBjb25zdCBkZWNpbWFsX3ByaW50X2ZtdFtdOyB9OyB0eXBlZGVmIHdyYXBfaW50X3Q8Y2hh cl9weV90PiBjaGFyX3R5cGU7CnN0cnVjdCB0aW55X3B5X3QgeyB0eXBlZGVmIHNpZ25lZCBjaGFy IG51bV90OyBzdGF0aWMgbnVtX3QgbmlsKCkgeyByZXR1cm4gKC0xMjgpOyB9IHN0YXRpYyBib29s IGlzX251bGwgKG51bV90IHgpIHsgcmV0dXJuIHggPT0gbmlsKCk7IH0gc3RhdGljIGNoYXIgY29u c3QgZGVjaW1hbF9zY2FuX2ZtdFtdOyBzdGF0aWMgY2hhciBjb25zdCBkZWNpbWFsX3ByaW50X2Zt dFtdOyB9OyB0eXBlZGVmIHdyYXBfaW50X3Q8dGlueV9weV90PiB0aW55X3R5cGU7CnN0cnVjdCB1 dGlueV9weV90IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIG51bV90OyBzdGF0aWMgbnVtX3Qgbmls KCkgeyByZXR1cm4gMjU1OyB9IHN0YXRpYyBib29sIGlzX251bGwgKG51bV90IHgpIHsgcmV0dXJu IHggPT0gbmlsKCk7IH0gc3RhdGljIGNoYXIgY29uc3QgZGVjaW1hbF9zY2FuX2ZtdFtdOyBzdGF0 aWMgY2hhciBjb25zdCBkZWNpbWFsX3ByaW50X2ZtdFtdOyB9OyB0eXBlZGVmIHdyYXBfaW50X3Q8 dXRpbnlfcHlfdD4gdXRpbnlfdHlwZTsKc3RydWN0IHNob3J0X3B5X3QgeyB0eXBlZGVmIHNpZ25l ZCBzaG9ydCBudW1fdDsgc3RhdGljIG51bV90IG5pbCgpIHsgcmV0dXJuICgtMzI3NjcgLTEpOyB9 IHN0YXRpYyBib29sIGlzX251bGwgKG51bV90IHgpIHsgcmV0dXJuIHggPT0gbmlsKCk7IH0gc3Rh dGljIGNoYXIgY29uc3QgZGVjaW1hbF9zY2FuX2ZtdFtdOyBzdGF0aWMgY2hhciBjb25zdCBkZWNp bWFsX3ByaW50X2ZtdFtdOyB9OyB0eXBlZGVmIHdyYXBfaW50X3Q8c2hvcnRfcHlfdD4gc2hvcnRf dHlwZTsKc3RydWN0IHVzaG9ydF9weV90IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBudW1fdDsg c3RhdGljIG51bV90IG5pbCgpIHsgcmV0dXJuICgzMjc2NyAqIDIgKyAxKTsgfSBzdGF0aWMgYm9v bCBpc19udWxsIChudW1fdCB4KSB7IHJldHVybiB4ID09IG5pbCgpOyB9IHN0YXRpYyBjaGFyIGNv bnN0IGRlY2ltYWxfc2Nhbl9mbXRbXTsgc3RhdGljIGNoYXIgY29uc3QgZGVjaW1hbF9wcmludF9m bXRbXTsgfTsgdHlwZWRlZiB3cmFwX2ludF90PHVzaG9ydF9weV90PiB1c2hvcnRfdHlwZTsKc3Ry dWN0IGludF9weV90IHsgdHlwZWRlZiBzaWduZWQgaW50IG51bV90OyBzdGF0aWMgbnVtX3Qgbmls KCkgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3IC0xKTsgfSBzdGF0aWMgYm9vbCBpc19udWxsIChudW1f dCB4KSB7IHJldHVybiB4ID09IG5pbCgpOyB9IHN0YXRpYyBjaGFyIGNvbnN0IGRlY2ltYWxfc2Nh bl9mbXRbXTsgc3RhdGljIGNoYXIgY29uc3QgZGVjaW1hbF9wcmludF9mbXRbXTsgfTsgdHlwZWRl ZiB3cmFwX2ludF90PGludF9weV90PiBpbnRfdHlwZTsKc3RydWN0IHVpbnRfcHlfdCB7IHR5cGVk ZWYgdW5zaWduZWQgaW50IG51bV90OyBzdGF0aWMgbnVtX3QgbmlsKCkgeyByZXR1cm4gKDIxNDc0 ODM2NDcgKiAyVSArIDEpOyB9IHN0YXRpYyBib29sIGlzX251bGwgKG51bV90IHgpIHsgcmV0dXJu IHggPT0gbmlsKCk7IH0gc3RhdGljIGNoYXIgY29uc3QgZGVjaW1hbF9zY2FuX2ZtdFtdOyBzdGF0 aWMgY2hhciBjb25zdCBkZWNpbWFsX3ByaW50X2ZtdFtdOyB9OyB0eXBlZGVmIHdyYXBfaW50X3Q8 dWludF9weV90PiB1aW50X3R5cGU7CnN0cnVjdCBsb25nX3B5X3QgeyB0eXBlZGVmIGxsb25nX3Qg bnVtX3Q7IHN0YXRpYyBudW1fdCBuaWwoKSB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdM TCAtMSk7IH0gc3RhdGljIGJvb2wgaXNfbnVsbCAobnVtX3QgeCkgeyByZXR1cm4geCA9PSBuaWwo KTsgfSBzdGF0aWMgY2hhciBjb25zdCBkZWNpbWFsX3NjYW5fZm10W107IHN0YXRpYyBjaGFyIGNv bnN0IGRlY2ltYWxfcHJpbnRfZm10W107IH07IHR5cGVkZWYgd3JhcF9pbnRfdDxsb25nX3B5X3Q+ IGxvbmdfdHlwZTsKc3RydWN0IHVsb25nX3B5X3QgeyB0eXBlZGVmIHVsbG9uZ190IG51bV90OyBz dGF0aWMgbnVtX3QgbmlsKCkgeyByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwg KyAxKTsgfSBzdGF0aWMgYm9vbCBpc19udWxsIChudW1fdCB4KSB7IHJldHVybiB4ID09IG5pbCgp OyB9IHN0YXRpYyBjaGFyIGNvbnN0IGRlY2ltYWxfc2Nhbl9mbXRbXTsgc3RhdGljIGNoYXIgY29u c3QgZGVjaW1hbF9wcmludF9mbXRbXTsgfTsgdHlwZWRlZiB3cmFwX2ludF90PHVsb25nX3B5X3Q+ IHVsb25nX3R5cGU7CnN0cnVjdCBmbG9hdF9weV90IHsgdHlwZWRlZiBkb3VibGUgbnVtX3Q7IHN0 YXRpYyBudW1fdCBuaWwoKSB7IHJldHVybiAoKnJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlIGNvbnN0 ICo+IChkb3VibGVfTmFOX3JlcCkpOyB9IHN0YXRpYyBib29sIGlzX251bGwgKG51bV90IHgpIHsg cmV0dXJuIElzTmFOICh4KTsgfSBzdGF0aWMgY2hhciBjb25zdCBkZWNpbWFsX3NjYW5fZm10W107 IHN0YXRpYyBjaGFyIGNvbnN0IGRlY2ltYWxfcHJpbnRfZm10W107IH07IHR5cGVkZWYgd3JhcF9m bHRfdDxmbG9hdF9weV90PiBmbG9hdF90eXBlOwpzdHJ1Y3QgZG91YmxlX3B5X3QgeyB0eXBlZGVm IGRvdWJsZSBudW1fdDsgc3RhdGljIG51bV90IG5pbCgpIHsgcmV0dXJuICgqcmVpbnRlcnByZXRf Y2FzdDxkb3VibGUgY29uc3QgKj4gKGRvdWJsZV9OYU5fcmVwKSk7IH0gc3RhdGljIGJvb2wgaXNf bnVsbCAobnVtX3QgeCkgeyByZXR1cm4gSXNOYU4gKHgpOyB9IHN0YXRpYyBjaGFyIGNvbnN0IGRl Y2ltYWxfc2Nhbl9mbXRbXTsgc3RhdGljIGNoYXIgY29uc3QgZGVjaW1hbF9wcmludF9mbXRbXTsg fTsgdHlwZWRlZiB3cmFwX2ZsdF90PGRvdWJsZV9weV90PiBkb3VibGVfdHlwZTsKdHlwZWRlZiBm aXhlZF9UPGludCwgMTAwPiBmaXhlZDJfdHlwZTsKdHlwZWRlZiBmaXhlZF9UPGludCwgMTAwMD4g Zml4ZWQzX3R5cGU7CnR5cGVkZWYgZml4ZWRfVDxpbnQsIDEwMDAwPiBmaXhlZDRfdHlwZTsKdHlw ZWRlZiBmaXhlZF9UPGludCwgMTAwMDAwPiBmaXhlZDVfdHlwZTsKCgoKCnZvaWQgY29weSAoY2hh ciAqZHN0LCB1bnNpZ25lZCBkc3RsZW4sIGNoYXIgZHN0X3BhZCwKICAgICAgICAgICBjaGFyIGNv bnN0ICpzcmMsIHVuc2lnbmVkIHNyY2xlbikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyks X19zdGRjYWxsX18pKTsKCgoKCnZvaWQgY29weSAoY2hhciAqZHN0LCB1bnNpZ25lZCBkc3RsZW4s IGNoYXIgY29uc3QgKnNyYywgdW5zaWduZWQgc3JjbGVuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bh cm1fXygzKSxfX3N0ZGNhbGxfXykpOwp2b2lkIGNvcHkgKGNoYXIgKmRzdCwgdW5zaWduZWQgZHN0 bGVuLCBjaGFyIGNvbnN0ICpzcmMpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3Rk Y2FsbF9fKSk7CgoKdm9pZCBjb3B5c2IgKGNoYXIgKiwgdW5zaWduZWQsIGNoYXIgY29uc3QgKiwg dW5zaWduZWQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoK CgoKdm9pZCBzZXRfbnVsbCAoY2hhciAqcCwgaW50IGxlbikgX19hdHRyaWJ1dGVfXygoX19yZWdw YXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKCgoKdGVtcGxhdGUgPGludCBOPgpjbGFzcyBzdHJm aXhfdHlwZQp7CiAgY2hhciB4W04rMV07CgpwdWJsaWM6CiAgc3RyZml4X3R5cGUoKSB7IHNldF9u dWxsKCk7IH0KICBzdHJmaXhfdHlwZSAoY2hhciBjb25zdCAqcykgeyA6OmNvcHkgKHgsIE4rMSwg cyk7IH0KICBzdHJmaXhfdHlwZSAmb3BlcmF0b3I9IChjaGFyIGNvbnN0ICpzKXsgOjpjb3B5ICh4 LCBOKzEsIHMpOyByZXR1cm4gKnRoaXM7IH0KCgogIGJvb2wgaXNfbnVsbCgpIGNvbnN0IHsKICAg IHJldHVybiB4WzBdID09IGNoYXJfcHlfdDo6bmlsKCk7IH0KICB2b2lkIHNldF9udWxsKCkgewog ICAgOjpzZXRfbnVsbCAoeCwgTisxKTsgfQoKCgoKCiAgY2hhciAqb3BlcmF0b3IoKSgpIHsgcmV0 dXJuIHg7IH0KICBjaGFyIGNvbnN0ICpvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4geDsgfQoK CgoKCgoKICBib29sIG9wZXJhdG9yIDwgKGNoYXIgY29uc3QgKnMpIGNvbnN0IHsgcmV0dXJuIHN0 cm5jbXAgKHgsIHMsIE4rMSkgPCAwOyB9IGJvb2wgb3BlcmF0b3IgPCAoc3RyZml4X3R5cGUgY29u c3QgJm8pIGNvbnN0IHsgcmV0dXJuIHN0cm5jbXAgKHgsIG8ueCwgTisxKSA8IDA7IH0gYm9vbCBv cGVyYXRvciA8PSAoY2hhciBjb25zdCAqcykgY29uc3QgeyByZXR1cm4gc3RybmNtcCAoeCwgcywg TisxKSA8PSAwOyB9IGJvb2wgb3BlcmF0b3IgPD0gKHN0cmZpeF90eXBlIGNvbnN0ICZvKSBjb25z dCB7IHJldHVybiBzdHJuY21wICh4LCBvLngsIE4rMSkgPD0gMDsgfTsKICBib29sIG9wZXJhdG9y ICE9IChjaGFyIGNvbnN0ICpzKSBjb25zdCB7IHJldHVybiBzdHJuY21wICh4LCBzLCBOKzEpICE9 IDA7IH0gYm9vbCBvcGVyYXRvciAhPSAoc3RyZml4X3R5cGUgY29uc3QgJm8pIGNvbnN0IHsgcmV0 dXJuIHN0cm5jbXAgKHgsIG8ueCwgTisxKSAhPSAwOyB9IGJvb2wgb3BlcmF0b3IgPT0gKGNoYXIg Y29uc3QgKnMpIGNvbnN0IHsgcmV0dXJuIHN0cm5jbXAgKHgsIHMsIE4rMSkgPT0gMDsgfSBib29s IG9wZXJhdG9yID09IChzdHJmaXhfdHlwZSBjb25zdCAmbykgY29uc3QgeyByZXR1cm4gc3RybmNt cCAoeCwgby54LCBOKzEpID09IDA7IH07CiAgYm9vbCBvcGVyYXRvciA+PSAoY2hhciBjb25zdCAq cykgY29uc3QgeyByZXR1cm4gc3RybmNtcCAoeCwgcywgTisxKSA+PSAwOyB9IGJvb2wgb3BlcmF0 b3IgPj0gKHN0cmZpeF90eXBlIGNvbnN0ICZvKSBjb25zdCB7IHJldHVybiBzdHJuY21wICh4LCBv LngsIE4rMSkgPj0gMDsgfSBib29sIG9wZXJhdG9yID4gKGNoYXIgY29uc3QgKnMpIGNvbnN0IHsg cmV0dXJuIHN0cm5jbXAgKHgsIHMsIE4rMSkgPiAwOyB9IGJvb2wgb3BlcmF0b3IgPiAoc3RyZml4 X3R5cGUgY29uc3QgJm8pIGNvbnN0IHsgcmV0dXJuIHN0cm5jbXAgKHgsIG8ueCwgTisxKSA+IDA7 IH07CgoKCiAgdm9pZCBhc3NpZ24gKGNoYXIgY29uc3QgKnMsIHVuc2lnbmVkIGwpIHsKICAgIDo6 Y29weSAoeCwgTisxLCBzLCBsKTsgfQoKCiAgdm9pZCBhc3NpZ25fc2IgKGNoYXIgY29uc3QgKnMs IHVuc2lnbmVkIGwpIHsKICAgIDo6Y29weXNiICh4LCBOKzEsIHMsIGwpOyB9CgoKICB2b2lkIGNv cHlfb3V0IChjaGFyICpzLCB1bnNpZ25lZCBsKSBjb25zdCB7CiAgICA6OmNvcHkgKHMsIGwsIHgs IE4rMSk7IH0KCgogIGludCB2IChjaGFyIGNvbnN0ICp0ZXh0LCB2YV9saXN0IGFyZ3MpIHsKICAg IHJldHVybiB2c25wcmludGYgKHgsIE4rMSwgdGV4dCwgYXJncyk7IH0KCiAgaW50IG9wZXJhdG9y KCkgKGNoYXIgY29uc3QgKnRleHQgLi4uKQogICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KHByaW50ZiwgMiwgMykpKTsKICBpbnQgb3BlcmF0b3IoKSAoY2hhciBjb25zdCAqdGV4dCwgdmFf bGlzdCBhcmdzKSB7CiAgICByZXR1cm4gdiAodGV4dCwgYXJncyk7IH07Cn07Cgp0ZW1wbGF0ZSA8 aW50IE4+CmludApzdHJmaXhfdHlwZTxOPjo6b3BlcmF0b3IoKSAoY2hhciBjb25zdCAqdGV4dCAu Li4pCnsKICB2YV9saXN0IGFyZ3M7CiAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksdGV4 dCk7CiAgaW50IHJlc3VsdCA9IHYgKHRleHQsIGFyZ3MpOwogIF9fYnVpbHRpbl92YV9lbmQgKGFy Z3MpOwogIHJldHVybiByZXN1bHQ7Cn0KCgoKCgpjbGFzcyBzdHJmaXhfY3BfdAp7CiAgc3RhdGlj IGNoYXIgY29uc3QgX251bGxbXTsKICBjaGFyIGNvbnN0ICpfcDsKcHVibGljOgogIHN0cmZpeF9j cF90IChjaGFyIGNvbnN0ICpwKQogICAgOiBfcCAocCkge30KICBib29sIGlzX251bGwoKSBjb25z dCB7CiAgICByZXR1cm4gX3AgPT0gMCB8fCAqX3AgPT0gY2hhcl9weV90OjpuaWwoKTsgfQogIGNo YXIgY29uc3QgKm9wZXJhdG9yKCkoKSB7CiAgICByZXR1cm4gaXNfbnVsbCgpID8gX251bGwgOiBf cDsgfQogIG9wZXJhdG9yIGNoYXIgY29uc3QgKigpIHsKICAgIHJldHVybiBvcGVyYXRvcigpKCk7 IH0KfTsKCgoKc3RydWN0IHJlY29yZF9iYXNlX3R5cGUKewoKfTsKCgpzdHJ1Y3QgaW5kZXhfYmFz ZV90eXBlCnsKICB1c2hvcnRfdHlwZSBfc3BlY2lmaWVkOwogIGluZGV4X2Jhc2VfdHlwZSgpIDog X3NwZWNpZmllZCAoMCkge30KfTsKCgoKCgpzdHJ1Y3QgaW5kZXhfbWF4X3R5cGUgOiBwdWJsaWMg aW5kZXhfYmFzZV90eXBlCnsKICBkb3VibGUgeFszMF07CiAgaW5kZXhfbWF4X3R5cGUoKSB7IG1l bXNldCAoeCwgMCwgc2l6ZW9mIHgpOyB9Cn07CgpleHRlcm4gaW5kZXhfbWF4X3R5cGUgY29uc3Qg bG9hZF9hbGxfaW5kZXg7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoK CgoKCgpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91 cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93 ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9m ZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKCgoKCnN0cnVjdCBpdGltZXJz cGVjCiAgewogICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgc3RydWN0IHRpbWVz cGVjIGl0X3ZhbHVlOwogIH07CgoKc3RydWN0IHNpZ2V2ZW50OwoKCgpleHRlcm4gY2xvY2tfdCBj bG9jayAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lICh0aW1lX3QgKl9fdGlt ZXIpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0 aW1lX3QgX190aW1lMCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21h eHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVz dHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3RwKQogICAgIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZV9sIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90 IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg dG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90 IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJwdGltZV9sIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210 aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3Qg dG0gKmxvY2FsdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCmV4 dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3Rp bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9f dHApIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0 aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAq YXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBjaGFy ICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoK ZXh0ZXJuIGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIs CiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRl cm4gbG9uZyBpbnQgX190aW1lem9uZTsKCgoKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4 dGVybiB2b2lkIHR6c2V0ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBkYXlsaWdodDsK ZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoKCgoKCmV4dGVybiBpbnQgc3RpbWUgKF9fY29uc3Qg dGltZV90ICpfX3doZW4pIHRocm93ICgpOwpleHRlcm4gdGltZV90IHRpbWVnbSAoc3RydWN0IHRt ICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3RydWN0IHRtICpf X3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgbmFub3NsZWVwIChf X2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwKICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW1haW5pbmcpIHRocm93ICgpOwoKCgpleHRlcm4g aW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAq X19yZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90IF9f Y2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBj bG9ja19zZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgX19jb25zdCBzdHJ1Y3QgdGltZXNw ZWMgKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfbmFub3NsZWVwIChj bG9ja2lkX3QgX19jbG9ja19pZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNs b2NrX2dldGNwdWNsb2NraWQgKHBpZF90IF9fcGlkLCBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lk LAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9f ZXZwLAogICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdCAqX19yZXN0cmljdCBfX3RpbWVy aWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZGVsZXRlICh0aW1lcl90IF9fdGltZXJp ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJp ZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg aXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fb3ZhbHVlKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3Bl YyAqX192YWx1ZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4g KHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoK CgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0 cmluZywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Jlc2J1 ZnApIHRocm93ICgpOwoKCn0KCgoKCgpkb3VibGUgY29uc3QgZGF5c19wZXJfeWVhciA9IDM2NS4y NTsKZG91YmxlIGNvbnN0IHllYXJzX3Blcl9kYXkgPSAxIC8gZGF5c19wZXJfeWVhcjsKCmVudW0K ewogIGp1bGlhbl9kYXlfMTU4MjEwMTUgPSAyMjk5MTYxLAogIGp1bGlhbl9kYXlfZXBvY2ggPSAy NDQwNTg4LAogIHNlY29uZHNfcGVyX2RheSA9IDI0ICogNjAgKiA2MCwKICB0aWNrc19wZXJfc2Vj b25kID0gMTAwMDAKfTsKYm9vbCBpc19kYXRlIChpbnQgJnksIGludCBtLCBpbnQgZCkgX19hdHRy aWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKYm9vbCBpc190aW1lIChpbnQg aGgsIGludCBtbSwgaW50IHNzID0gMCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19z dGRjYWxsX18pKTsKCgoKCgppbnQgamRheSAoaW50IHksIGludCBtLCBpbnQgZCkgX19hdHRyaWJ1 dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKCgp2b2lkIG1keSAoaW50IGos IGludCAmbW0sIGludCAmZGQsIGludCAmeXkpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMp LF9fc3RkY2FsbF9fKSk7CgoKaW50IGVhc3RlciAoaW50IHllYXIpIF9fYXR0cmlidXRlX18oKF9f cmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCmVudW0geyBzdW5kYXksIG1vbmRheSwgdHVl c2RheSwgd2VkbmVzZGF5LCB0aHVyc2RheSwgZnJpZGF5LCBzYXR1cmRheSB9OwppbmxpbmUgaW50 IGRheV9vZl93ZWVrIChpbnQgaikgeyByZXR1cm4gKGogKyAxKSAlIDc7IH0KZXh0ZXJuIGNoYXIg Y29uc3Qgd2Vla2RheV9uYW1lc1tdWzRdOwoKCmV4dGVybiBjaGFyIGNvbnN0IG1vbnRoX25hbWVz W11bNF07CgoKdW5zaWduZWQgdHJhbnNsYXRlX21vbnRoIChjaGFyIGNvbnN0ICpzKSBfX2F0dHJp YnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgoKdW5zaWduZWQgdGlja190 b192aXN1YWwgKHVuc2lnbmVkKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNh bGxfXykpOwp1bnNpZ25lZCB2aXN1YWxfdG9fdGljayAodW5zaWduZWQpIF9fYXR0cmlidXRlX18o KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CnVuc2lnbmVkIGpkYXlfdG9fdmlzdWFsICh1 bnNpZ25lZCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKdW5z aWduZWQgdmlzdWFsX3RvX2pkYXkgKHVuc2lnbmVkKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f XygzKSxfX3N0ZGNhbGxfXykpOwoKCnZvaWQgdm1zX3RvX2RhdGVfdGltZSAobGxvbmdfdCB2bXMs IGludCAmamRheSwgaW50ICZ0aWNrKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0 ZGNhbGxfXykpOwoKCgpleHRlcm4gYm9vbCBydW5zX2F0X2RhdGVfb2Zmc2V0OwpleHRlcm4gaW50 IGdsb2JhbF9kYXRlX29mZnNldDsKCgoKCgpjbGFzcyB1dGNfb2Zmc2V0X3QKewogIGludCBfbGFz dF9kYXRlOwogIGludCBfbGFzdF9ob3VyOwogIGludCBfc2VjOwoKICB2b2lkIHNldCAoaW50IGRh dGUsIGludCBob3VyKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykp OwpwdWJsaWM6CiAgaW5saW5lIHV0Y19vZmZzZXRfdCgpOwogIGlubGluZSBpbnQgb3BlcmF0b3Io KSAoaW50IGRhdGUsIGludCBob3VyKTsKICBvcGVyYXRvciBpbnQoKSB7IHJldHVybiBfc2VjOyB9 Cn07CgpleHRlcm4gdXRjX29mZnNldF90IHV0Y190b19sb2NhbHRpbWVfb2Zmc2V0OwpleHRlcm4g dXRjX29mZnNldF90IGxvY2FsdGltZV90b191dGNfb2Zmc2V0OwoKCgoKCgoKY2xhc3MgdGltZV90 eXBlCnsKcHJvdGVjdGVkOgogIGludCBfdGljazsKCnB1YmxpYzoKICBlbnVtIHsgdGlja19udWxs ID0gKC0yMTQ3NDgzNjQ3IC0xKSwKICAgICAgICAgdGlja3NfcGVyX21zZWMgPSB0aWNrc19wZXJf c2Vjb25kIC8gMTAwMCwKICAgICAgICAgdXNlY19wZXJfdGljayA9IDEwMDAwMDAgLyB0aWNrc19w ZXJfc2Vjb25kLAogICAgICAgICB0aWNrc19wZXJfZGF5ID0gc2Vjb25kc19wZXJfZGF5ICogdGlj a3NfcGVyX3NlY29uZCB9OwoKICB0aW1lX3R5cGUgKGludCBoaCwgaW50IG1tLCBpbnQgc3MgPSAw LCBpbnQgbXMgPSAwKSB7CiAgICBzZXQgKGhoLCBtbSwgc3MsIG1zKTsgfQoKICB0aW1lX3R5cGUg KGJvb2wgaW5pdCA9IGZhbHNlKSB7IGlmIChpbml0KSBub3coKTsgZWxzZSBfdGljayA9IHRpY2tf bnVsbDsgfQogIHRpbWVfdHlwZSAoaW50IHQpIDogX3RpY2sgKHQpIHt9CiAgdGltZV90eXBlICh1 bnNpZ25lZCB0KSA6IF90aWNrICh0KSB7fQogIHRpbWVfdHlwZSAmb3BlcmF0b3I9IChpbnQgdCkg eyBfdGljayA9IHQ7IHJldHVybiAqdGhpczsgfQoKICB2b2lkIHNldF9udWxsKCkgeyBfdGljayA9 IHRpY2tfbnVsbDsgfQogIGJvb2wgaXNfbnVsbCgpIGNvbnN0IHsgcmV0dXJuIF90aWNrID09IHRp Y2tfbnVsbDsgfQoKCiAgaW50IHRpY2soKSBjb25zdCB7IHJldHVybiBfdGljazsgfQoKICBpbnQg aG91cigpIGNvbnN0IHsgcmV0dXJuIF90aWNrIC8gKDYwICogNjAgKiB0aWNrc19wZXJfc2Vjb25k KTsgfQogIGludCBtaW4oKSBjb25zdCB7IHJldHVybiBfdGljayAvICg2MCAqIHRpY2tzX3Blcl9z ZWNvbmQpICUgNjA7IH0KICBpbnQgc2VjKCkgY29uc3QgeyByZXR1cm4gX3RpY2sgLyB0aWNrc19w ZXJfc2Vjb25kICUgNjA7IH0KICBpbnQgbXNlYygpIGNvbnN0IHsgcmV0dXJuIF90aWNrICUgdGlj a3NfcGVyX3NlY29uZCAvIHRpY2tzX3Blcl9tc2VjOyB9CiAgaW50IHVzZWMoKSBjb25zdCB7IHJl dHVybiBfdGljayAlIHRpY2tzX3Blcl9zZWNvbmQgKiB1c2VjX3Blcl90aWNrOyB9CgogIHZvaWQg bm93KCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKICBib29s IHNldCAoaW50IGhoLCBpbnQgbW0sIGludCBzcyA9IDAsIGludCBtcyA9IDApIF9fYXR0cmlidXRl X18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKICB1bnNpZ25lZCB2aXN1YWwoKSBj b25zdCB7IHJldHVybiB0aWNrX3RvX3Zpc3VhbCAoX3RpY2spOyB9CiAgdm9pZCBzZXRfZnJvbV92 aXN1YWwgKHVuc2lnbmVkIHRpY2spIHsgX3RpY2sgPSB2aXN1YWxfdG9fdGljayAodGljayk7IH0K ICBib29sIHNldF9mcm9tX3Zpc3VhbCAoZG91YmxlKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f XygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgYm9vbCBzY2FuIChjaGFyIGNvbnN0ICopIF9fYXR0cmli dXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKICBib29sIG9wZXJhdG9yPCAo dGltZV90eXBlIGNvbnN0ICZ0KSBjb25zdCB7IHJldHVybiBfdGljayA8IHQuX3RpY2s7IH0KICBi b29sIG9wZXJhdG9yPD0gKHRpbWVfdHlwZSBjb25zdCAmdCkgY29uc3QgeyByZXR1cm4gX3RpY2sg PD0gdC5fdGljazsgfQogIGJvb2wgb3BlcmF0b3I+ICh0aW1lX3R5cGUgY29uc3QgJnQpIGNvbnN0 IHsgcmV0dXJuIF90aWNrID4gdC5fdGljazsgfQogIGJvb2wgb3BlcmF0b3I+PSAodGltZV90eXBl IGNvbnN0ICZ0KSBjb25zdCB7IHJldHVybiBfdGljayA+PSB0Ll90aWNrOyB9CiAgYm9vbCBvcGVy YXRvcj09ICh0aW1lX3R5cGUgY29uc3QgJnQpIGNvbnN0IHsgcmV0dXJuIF90aWNrID09IHQuX3Rp Y2s7IH0KICBib29sIG9wZXJhdG9yIT0gKHRpbWVfdHlwZSBjb25zdCAmdCkgY29uc3QgeyByZXR1 cm4gX3RpY2sgIT0gdC5fdGljazsgfQoKCiAgdGltZV90eXBlICZvcGVyYXRvcis9ICh0aW1lX3R5 cGUgdCkgeyBfdGljayArPSB0Ll90aWNrOyByZXR1cm4gKnRoaXM7IH0KICB0aW1lX3R5cGUgJm9w ZXJhdG9yLT0gKHRpbWVfdHlwZSB0KSB7IF90aWNrIC09IHQuX3RpY2s7IHJldHVybiAqdGhpczsg fQp9OwoKCgoKCmNsYXNzIGRhdGVfdHlwZQp7CnByb3RlY3RlZDoKICBpbnQgX2RheTsKCnB1Ymxp YzoKICBlbnVtIHsgZGF5X251bGwgPSAoLTIxNDc0ODM2NDcgLTEpIH07CgoKICB2b2lkIHRpbWUg KHRpbWVfdCAqdCkgeyBfZGF5ID0gKCh1bnNpZ25lZCAoKnQpIC8gc2Vjb25kc19wZXJfZGF5KQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBqdWxpYW5fZGF5X2Vwb2NoICsgZ2xv YmFsX2RhdGVfb2Zmc2V0KTsgfQogIHZvaWQgdG9kYXkoKSB7IHRpbWVfdCB0OyA6OnRpbWUgKCZ0 KTsgdGltZSAoJnQpOyB9CgoKICBkYXRlX3R5cGUgKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBk YXkpCiAgICA6IF9kYXkgKGpkYXkgKHllYXIsIG1vbnRoLCBkYXkpKSB7fQoKICBkYXRlX3R5cGUg KGJvb2wgaW5pdCA9IGZhbHNlKSB7IGlmIChpbml0KSB0b2RheSgpOyBlbHNlIF9kYXkgPSBkYXlf bnVsbDsgfQogIGRhdGVfdHlwZSAoaW50IHQpIDogX2RheSAodCkge30KICBkYXRlX3R5cGUgJm9w ZXJhdG9yPSAoaW50IGQpIHsgX2RheSA9IGQ7IHJldHVybiAqdGhpczsgfQoKICBpbnQgamR5KCkg Y29uc3QgeyByZXR1cm4gX2RheTsgfQoKICB2b2lkIHNldF9udWxsKCkgeyBfZGF5ID0gZGF5X251 bGw7IH0KICBib29sIGlzX251bGwoKSBjb25zdCB7IHJldHVybiBfZGF5ID09IGRheV9udWxsOyB9 CgoKICBib29sIHNldCAoaW50IHksIGludCBtLCBpbnQgZCkgX19hdHRyaWJ1dGVfXygoX19yZWdw YXJtX18oMyksX19zdGRjYWxsX18pKTsKCgogIHZvaWQgeW1kIChpbnQgJnksIGludCAmbSwgaW50 ICZkKSBjb25zdCB7CiAgICBpZiAoaXNfbnVsbCgpKSB5ID0gbSA9IGQgPSAwOyBlbHNlIG1keSAo X2RheSwgbSwgZCwgeSk7IH0KCgogIGludCBkYXlfb2Zfd2VlaygpIGNvbnN0IHsgcmV0dXJuIDo6 ZGF5X29mX3dlZWsgKF9kYXkpOyB9CiAgaW5saW5lIGJvb2wgaXNfd2Vla2VuZCgpIHsKICAgIHVu c2lnbmVkIHdlZWtkYXkgPSBkYXlfb2Zfd2VlaygpOwogICAgcmV0dXJuICh3ZWVrZGF5ICUgNyA9 PSAwIHx8IHdlZWtkYXkgJSA3ID09IDYpOyB9CgoKICB1bnNpZ25lZCB2aXN1YWwoKSBjb25zdCB7 IHJldHVybiBqZGF5X3RvX3Zpc3VhbCAoX2RheSk7IH0KICB2b2lkIHNldF9mcm9tX3Zpc3VhbCAo dW5zaWduZWQgZGF0ZSkgeyBfZGF5ID0gdmlzdWFsX3RvX2pkYXkgKGRhdGUpOyB9CgoKICBib29s IHNjYW4gKGNoYXIgY29uc3QgKikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRj YWxsX18pKTsKCgogIGJvb2wgb3BlcmF0b3I8IChkYXRlX3R5cGUgY29uc3QgJnQpIGNvbnN0IHsg cmV0dXJuIF9kYXkgPCB0Ll9kYXk7IH0KICBib29sIG9wZXJhdG9yPD0gKGRhdGVfdHlwZSBjb25z dCAmdCkgY29uc3QgeyByZXR1cm4gX2RheSA8PSB0Ll9kYXk7IH0KICBib29sIG9wZXJhdG9yPiAo ZGF0ZV90eXBlIGNvbnN0ICZ0KSBjb25zdCB7IHJldHVybiBfZGF5ID4gdC5fZGF5OyB9CiAgYm9v bCBvcGVyYXRvcj49IChkYXRlX3R5cGUgY29uc3QgJnQpIGNvbnN0IHsgcmV0dXJuIF9kYXkgPj0g dC5fZGF5OyB9CiAgYm9vbCBvcGVyYXRvcj09IChkYXRlX3R5cGUgY29uc3QgJnQpIGNvbnN0IHsg cmV0dXJuIF9kYXkgPT0gdC5fZGF5OyB9CiAgYm9vbCBvcGVyYXRvciE9IChkYXRlX3R5cGUgY29u c3QgJnQpIGNvbnN0IHsgcmV0dXJuIF9kYXkgIT0gdC5fZGF5OyB9CgoKICBkYXRlX3R5cGUgY29u c3QgJm9wZXJhdG9yKz0gKGludCBkYXlzKSB7IF9kYXkgKz0gZGF5czsgcmV0dXJuICp0aGlzOyB9 CiAgZGF0ZV90eXBlIGNvbnN0ICZvcGVyYXRvci09IChpbnQgZGF5cykgeyBfZGF5IC09IGRheXM7 IHJldHVybiAqdGhpczsgfQoKCiAgZGF0ZV90eXBlIGNvbnN0ICZwbHVzX3llYXJzIChpbnQgbikg X19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKICBkYXRlX3R5 cGUgY29uc3QgJnBsdXNfbW9udGhzIChpbnQgbikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18o MyksX19zdGRjYWxsX18pKTsKCgogIGRhdGVfdHlwZSBjb25zdCAmcGx1c193b3JrZGF5cyAoaW50 IG4pIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7Cn07CgoKCgoK dm9pZCBsb2NhbHRpbWVfdG9fdXRjIChkYXRlX3R5cGUgJiwgdGltZV90eXBlICYpIF9fYXR0cmli dXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CnZvaWQgdXRjX3RvX2xvY2FsdGlt ZSAoZGF0ZV90eXBlICYsIHRpbWVfdHlwZSAmKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygz KSxfX3N0ZGNhbGxfXykpOwoKCgp2b2lkIGRlY3JlbWVudCAoZGF0ZV90eXBlICYsIHRpbWVfdHlw ZSAmLCB0aW1lX3R5cGUpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9f KSk7CnZvaWQgaW5jcmVtZW50IChkYXRlX3R5cGUgJiwgdGltZV90eXBlICYsIHRpbWVfdHlwZSkg X19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKCgpjbGFzcyBk YXRlX3RpbWVfdHlwZSA6IHB1YmxpYyBkYXRlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg cHVibGljIHRpbWVfdHlwZQp7CnB1YmxpYzoKCiAgZGF0ZV90aW1lX3R5cGUgKGJvb2wgc2V0ID0g ZmFsc2UpIHsKICAgIGlmIChzZXQpIG5vdygpOyB9CgoKICBkYXRlX3RpbWVfdHlwZSAoZGF0ZV90 eXBlIGNvbnN0ICZkYXRlLCB0aW1lX3R5cGUgY29uc3QgJnRpbWUpCiAgICA6IGRhdGVfdHlwZSAo ZGF0ZSksIHRpbWVfdHlwZSAodGltZSkge30KCgogIGRhdGVfdGltZV90eXBlIChpbnQgeSwgaW50 IG0sIGludCBkLCBpbnQgSCwgaW50IE0sIGludCBTID0gMCwgaW50IE1TID0gMCkKICAgIDogZGF0 ZV90eXBlICh5LCBtLCBkKSwgdGltZV90eXBlIChILCBNLCBTLCBNUykge30KCiAgc3RhdGljIGRh dGVfdGltZV90eXBlIGNvbnN0IHVya25hbGw7CiAgc3RhdGljIGRhdGVfdGltZV90eXBlIGNvbnN0 IHNhbmt0X25pbW1lcmxlaW47CgoKICB2b2lkIHNldF9kYXRlIChpbnQgeSwgaW50IG0sIGludCBk KSB7IGRhdGVfdHlwZTo6c2V0ICh5LCBtLCBkKTsgfQogIHZvaWQgc2V0X3RpbWUgKGludCBoLCBp bnQgbSwgaW50IHMpIHsgdGltZV90eXBlOjpzZXQgKGgsIG0sIHMpOyB9CgogIHZvaWQgc2V0IChp bnQgeSwgaW50IG0sIGludCBkLCBpbnQgSCwgaW50IE0sIGludCBTKSB7CiAgICBkYXRlX3R5cGU6 OnNldCAoeSwgbSwgZCk7IHRpbWVfdHlwZTo6c2V0IChILCBNLCBTKTsgfQoKICB2b2lkIHNldF9m cm9tX3ZtcyAobGxvbmdfdCB2bXNfdGltZSkgewogICAgdm1zX3RvX2RhdGVfdGltZSAodm1zX3Rp bWUsIF9kYXksIF90aWNrKTsgfQoKICB2b2lkIG5vdygpIF9fYXR0cmlidXRlX18oKF9fcmVncGFy bV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgdGltZV90IHVuaXhfdGltZSgpIF9fYXR0cmlidXRlX18o KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgogIHZvaWQgbG9jYWx0aW1lX3RvX3V0Yygp IHsgOjpsb2NhbHRpbWVfdG9fdXRjICgqdGhpcywgKnRoaXMpOyB9CiAgdm9pZCB1dGNfdG9fbG9j YWx0aW1lKCkgeyA6OnV0Y190b19sb2NhbHRpbWUgKCp0aGlzLCAqdGhpcyk7IH0KCiAgZGF0ZV90 aW1lX3R5cGUgdXRjX29mKCkgY29uc3QgewogICAgZGF0ZV90aW1lX3R5cGUgdG1wICgqdGhpcyk7 IHRtcC5sb2NhbHRpbWVfdG9fdXRjKCk7IHJldHVybiB0bXA7IH0KICBkYXRlX3RpbWVfdHlwZSBs b2NhbHRpbWVfb2YoKSBjb25zdCB7CiAgICBkYXRlX3RpbWVfdHlwZSB0bXAgKCp0aGlzKTsgdG1w LnV0Y190b19sb2NhbHRpbWUoKTsgcmV0dXJuIHRtcDsgfQoKCiAgYm9vbCBvcGVyYXRvcjwgKGRh dGVfdGltZV90eXBlIGNvbnN0ICZ5KSBjb25zdCB7CiAgICByZXR1cm4gamR5KCkgPCB5LmpkeSgp IHx8IGpkeSgpID09IHkuamR5KCkgJiYgdGljaygpIDwgeS50aWNrKCk7IH0KICBib29sIG9wZXJh dG9yPiAoZGF0ZV90aW1lX3R5cGUgY29uc3QgJnkpIGNvbnN0IHsgcmV0dXJuICh5IDwgKnRoaXMp OyB9CiAgYm9vbCBvcGVyYXRvcj49IChkYXRlX3RpbWVfdHlwZSBjb25zdCAmeSkgY29uc3QgeyBy ZXR1cm4gISgqdGhpcyA8IHkpOyB9CiAgYm9vbCBvcGVyYXRvcjw9IChkYXRlX3RpbWVfdHlwZSBj b25zdCAmeSkgY29uc3QgeyByZXR1cm4gISh5IDwgKnRoaXMpOyB9CgogIGJvb2wgb3BlcmF0b3I9 PSAoZGF0ZV90aW1lX3R5cGUgY29uc3QgJnkpIGNvbnN0IHsKICAgIHJldHVybiBqZHkoKSA9PSB5 LmpkeSgpICYmIHRpY2soKSA9PSB5LnRpY2soKTsgfQogIGJvb2wgb3BlcmF0b3IhPSAoZGF0ZV90 aW1lX3R5cGUgY29uc3QgJnkpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0geSk7IH0KCgogIGRh dGVfdGltZV90eXBlIGNvbnN0ICZvcGVyYXRvcis9ICh0aW1lX3R5cGUgdCkgewogICAgaW5jcmVt ZW50ICgqdGhpcywgKnRoaXMsIHQpOwogICAgcmV0dXJuICp0aGlzOyB9CiAgZGF0ZV90aW1lX3R5 cGUgY29uc3QgJm9wZXJhdG9yKz0gKGRhdGVfdHlwZSBkKSB7CiAgICBzdGF0aWNfY2FzdDxkYXRl X3R5cGUgJj4gKCp0aGlzKSArPSBkLmpkeSgpOwogICAgcmV0dXJuICp0aGlzOyB9CiAgZGF0ZV90 aW1lX3R5cGUgY29uc3QgJm9wZXJhdG9yKz0gKGRhdGVfdGltZV90eXBlIGNvbnN0ICZkKSB7CiAg ICBvcGVyYXRvcis9IChzdGF0aWNfY2FzdDxkYXRlX3R5cGUgY29uc3QgJj4gKGQpKTsKICAgIG9w ZXJhdG9yKz0gKHN0YXRpY19jYXN0PHRpbWVfdHlwZSBjb25zdCAmPiAoZCkpOwogICAgcmV0dXJu ICp0aGlzOyB9CgogIGRhdGVfdGltZV90eXBlIGNvbnN0ICZvcGVyYXRvci09ICh0aW1lX3R5cGUg dCkgewogICAgZGVjcmVtZW50ICgqdGhpcywgKnRoaXMsIHQpOwogICAgcmV0dXJuICp0aGlzOyB9 CiAgZGF0ZV90aW1lX3R5cGUgY29uc3QgJm9wZXJhdG9yLT0gKGRhdGVfdHlwZSBkKSB7CiAgICBz dGF0aWNfY2FzdDxkYXRlX3R5cGUgJj4gKCp0aGlzKSAtPSBkLmpkeSgpOwogICAgcmV0dXJuICp0 aGlzOyB9CiAgZGF0ZV90aW1lX3R5cGUgY29uc3QgJm9wZXJhdG9yLT0gKGRhdGVfdGltZV90eXBl IGNvbnN0ICZkKSB7CiAgICAqdGhpcyAtPSBzdGF0aWNfY2FzdDxkYXRlX3R5cGUgY29uc3QgJj4g KGQpOwogICAgKnRoaXMgLT0gc3RhdGljX2Nhc3Q8dGltZV90eXBlIGNvbnN0ICY+IChkKTsKICAg IHJldHVybiAqdGhpczsgfQp9OwoKCmRvdWJsZSBkZWx0YV95ZWFycyAoZGF0ZV90aW1lX3R5cGUg Y29uc3QgJmEsIGRhdGVfdGltZV90eXBlIGNvbnN0ICZiKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bh cm1fXygzKSxfX3N0ZGNhbGxfXykpOwpkb3VibGUgZGVsdGFfZGF5cyAoZGF0ZV90aW1lX3R5cGUg Y29uc3QgJmEsIGRhdGVfdGltZV90eXBlIGNvbnN0ICZiKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bh cm1fXygzKSxfX3N0ZGNhbGxfXykpOwpkb3VibGUgZGVsdGFfc2Vjb25kcyAoZGF0ZV90aW1lX3R5 cGUgY29uc3QgJmEsIGRhdGVfdGltZV90eXBlIGNvbnN0ICZiKSBfX2F0dHJpYnV0ZV9fKChfX3Jl Z3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKZGF0ZV90aW1lX3R5cGUgZG91YmxlMmRhdGUgKGRv dWJsZSB4KTsKdm9pZCBkb3VibGUyZGF0ZSAoZG91YmxlIHgsIGludCAmZGF0ZSwgaW50ICZ0aW1l KTsKZG91YmxlIGRhdGUyZG91YmxlIChpbnQgZGF0ZSwgaW50IHRpbWUpOwpkb3VibGUgZGF0ZTJk b3VibGUgKGRhdGVfdGltZV90eXBlIGNvbnN0ICYpOwoKCgoKCnN0cnVjdCBmaWVsZF90eXBlOwpz dHJ1Y3QgbWVtYmVyX3R5cGU7CnN0cnVjdCByZWNvcmRfdHlwZTsKc3RydWN0IGluZGV4X3R5cGU7 CgoKdm9pZCBpbml0aWFsaXplIChyZWNvcmRfdHlwZSBjb25zdCAmLCB2b2lkICopIF9fYXR0cmli dXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CnZvaWQgaW5pdGlhbGl6ZSAoaW5k ZXhfdHlwZSBjb25zdCAmLCBpbmRleF9iYXNlX3R5cGUgKmtleSkgX19hdHRyaWJ1dGVfXygoX19y ZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCnR5cGVkZWYgdXRpbnlfdHlwZSBzb2wzX2J5dGVf dHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19ieXRlOwoKdHlwZWRlZiB1aW50 X3R5cGUgc29sM19lcnJvcl90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2Vy cm9yOwoKdHlwZWRlZiBzdHJmaXhfdHlwZTw4MD4gc29sM19tZXNzYWdlX3R5cGU7CmV4dGVybiBm aWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfbWVzc2FnZTsKCnR5cGVkZWYgYm9vbF90eXBlIHNvbDNf Ym9vbF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2Jvb2w7Cgp0eXBlZGVm IGludF90eXBlIHNvbDNfaW50X3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNf aW50OwoKdHlwZWRlZiB1aW50X3R5cGUgc29sM191aW50X3R5cGU7CmV4dGVybiBmaWVsZF90eXBl IGNvbnN0IGZkX3NvbDNfdWludDsKCnR5cGVkZWYgdXNob3J0X3R5cGUgc29sM19zbWFsbF9jb3Vu dF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX3NtYWxsX2NvdW50OwoKdHlw ZWRlZiB1aW50X3R5cGUgc29sM19jb3VudF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBm ZF9zb2wzX2NvdW50OwoKdHlwZWRlZiB1dGlueV90eXBlIHNvbDNfYml0X21hc2tfOF90eXBlOwpl eHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2JpdF9tYXNrXzg7Cgp0eXBlZGVmIHVzaG9y dF90eXBlIHNvbDNfYml0X21hc2tfMTZfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRf c29sM19iaXRfbWFza18xNjsKCnR5cGVkZWYgdWludF90eXBlIHNvbDNfYml0X21hc2tfMzJfdHlw ZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19iaXRfbWFza18zMjsKCnR5cGVkZWYg ZGF0ZV90eXBlIHNvbDNfZGF0ZV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wz X2RhdGU7Cgp0eXBlZGVmIHRpbWVfdHlwZSBzb2wzX3RpbWVfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5 cGUgY29uc3QgZmRfc29sM190aW1lOwoKdHlwZWRlZiBzdHJ1Y3Qgc29sM19kYXRlX3RpbWVfdHlw ZSBzb2wzX2RhdGVfdGltZV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2Rh dGVfdGltZTsKCnR5cGVkZWYgdXNob3J0X3R5cGUgc29sM19uZXRfcGFydG5lcl9pZF90eXBlOwpl eHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX25ldF9wYXJ0bmVyX2lkOwoKdHlwZWRlZiB1 dGlueV90eXBlIHNvbDNfbm9kZV9pZF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9z b2wzX25vZGVfaWQ7Cgp0eXBlZGVmIHVpbnRfdHlwZSBzb2wzX2F1dG9faWRfdHlwZTsKZXh0ZXJu IGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19hdXRvX2lkOwoKdHlwZWRlZiB1c2hvcnRfdHlwZSBz b2wzX3R5cGVfaWRfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM190eXBlX2lk OwoKdHlwZWRlZiB1aW50X3R5cGUgc29sM19sb2NhbF9pZF90eXBlOwpleHRlcm4gZmllbGRfdHlw ZSBjb25zdCBmZF9zb2wzX2xvY2FsX2lkOwoKdHlwZWRlZiB1c2hvcnRfdHlwZSBzb2wzX29mZnNl dF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX29mZnNldDsKCnR5cGVkZWYg c3RyZml4X3R5cGU8MzA+IHNvbDNfbmFtZV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBm ZF9zb2wzX25hbWU7Cgp0eXBlZGVmIHN0cmZpeF90eXBlPDYwPiBzb2wzX3RleHRfdHlwZTsKZXh0 ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM190ZXh0OwoKdHlwZWRlZiBzdHJmaXhfdHlwZTwx Mj4gc29sM19pc2luX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfaXNpbjsK CnR5cGVkZWYgZG91YmxlX3R5cGUgc29sM19wcmljZV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBj b25zdCBmZF9zb2wzX3ByaWNlOwoKdHlwZWRlZiBkb3VibGVfdHlwZSBzb2wzX3F1YW50aXR5X3R5 cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfcXVhbnRpdHk7Cgp0eXBlZGVmIGZp eGVkNF90eXBlIHNvbDNfc2hvcnRfcHJpY2VfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3Qg ZmRfc29sM19zaG9ydF9wcmljZTsKCnR5cGVkZWYgZml4ZWQzX3R5cGUgc29sM19zaG9ydF9xdWFu dGl0eV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX3Nob3J0X3F1YW50aXR5 OwoKdHlwZWRlZiBmaXhlZDRfdHlwZSBzb2wzX3NtYWxsX3F1YW50aXR5X3R5cGU7CmV4dGVybiBm aWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfc21hbGxfcXVhbnRpdHk7Cgp0eXBlZGVmIGZpeGVkNV90 eXBlIHNvbDNfc21hbGxfcmF0aW9fdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29s M19zbWFsbF9yYXRpbzsKCnR5cGVkZWYgY2hhcl90eXBlIHNvbDNfcXVhbGl0eV90eXBlOwpleHRl cm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX3F1YWxpdHk7Cgp0eXBlZGVmIHN0cmZpeF90eXBl PDI+IHNvbDNfY291bnRyeV9hMl90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wz X2NvdW50cnlfYTI7Cgp0eXBlZGVmIHN0cmZpeF90eXBlPDM+IHNvbDNfY3VycmVuY3lfYTNfdHlw ZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19jdXJyZW5jeV9hMzsKCnR5cGVkZWYg c3RyZml4X3R5cGU8ND4gc29sM19leGNoYW5nZV9pZF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBj b25zdCBmZF9zb2wzX2V4Y2hhbmdlX2lkOwoKCgoKZXh0ZXJuIHJlY29yZF90eXBlIGNvbnN0IHJk X3NvbDNfdW5pcXVlOwoKc3RydWN0IHNvbDNfdW5pcXVlX3R5cGUKewogIGVudW0geyBfcmlkID0g cmlkX3NvbDNfdW5pcXVlIH07CiAgZW51bSB7CiAgICBpaWRfX21heCB9OwogIHNvbDNfdW5pcXVl X3R5cGUoKSB7fQogIHN0YXRpYyByZWNvcmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIHJk X3NvbDNfdW5pcXVlOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMp OyB9CgogIHNvbDNfYXV0b19pZF90eXBlIGlkOwogIHNvbDNfbm9kZV9pZF90eXBlIG5vZGU7Cn07 CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM191bmlxdWVfbWVtYmVyX2lkOwpleHRlcm4g bWVtYmVyX3R5cGUgY29uc3Qgc29sM191bmlxdWVfbWVtYmVyX25vZGU7CgoKCgoKZXh0ZXJuIHJl Y29yZF90eXBlIGNvbnN0IHJkX3NvbDNfdW5pcXVlX2lkOwoKc3RydWN0IHNvbDNfdW5pcXVlX2lk X3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfdW5pcXVlX2lkIH07CiAgZW51bSB7CiAg ICBpaWRfYnlfYWxsLAogICAgaWlkX19tYXggfTsKICBzb2wzX3VuaXF1ZV9pZF90eXBlKCkge30K ICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX3VuaXF1 ZV9pZDsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBz b2wzX2xvY2FsX2lkX3R5cGUgaWQ7CiAgc29sM19ub2RlX2lkX3R5cGUgbm9kZTsKfTsKCmV4dGVy biBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VuaXF1ZV9pZF9tZW1iZXJfaWQ7CmV4dGVybiBtZW1i ZXJfdHlwZSBjb25zdCBzb2wzX3VuaXF1ZV9pZF9tZW1iZXJfbm9kZTsKCgoKCmV4dGVybiBpbmRl eF90eXBlIGNvbnN0IGlkX3NvbDNfdW5pcXVlX2lkX2J5X2FsbDsKCnN0cnVjdCBzb2wzX3VuaXF1 ZV9pZF9ieV9hbGxfdHlwZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlwZQp7CiAgZW51bSB7IF9y aWQgPSAoc29sM191bmlxdWVfaWRfdHlwZTo6aWlkX2J5X2FsbCArIDEgPDwgc2VudGVuY2VfaGVh ZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfdW5pcXVlX2lkX3R5cGU6Ol9yaWQpIH07CgogIHNv bDNfdW5pcXVlX2lkX2J5X2FsbF90eXBlKCkge30KICBzdGF0aWMgaW5kZXhfdHlwZSBjb25zdCAm ZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfdW5pcXVlX2lkX2J5X2FsbDsgfQogIHZvaWQgaW5pdCgp IHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX25vZGVfaWRfdHlwZSBub2Rl OwogIHNvbDNfbG9jYWxfaWRfdHlwZSBpZDsKfTsKCgp0eXBlZGVmIHN0cnVjdCBzb2wzX3VuaXF1 ZV9pZF90eXBlIHNvbDNfdW5pcXVlX2lkX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZk X3NvbDNfdW5pcXVlX2lkOwoKCgoKZXh0ZXJuIHJlY29yZF90eXBlIGNvbnN0IHJkX3NvbDNfZ2xv YmFsX2lkOwoKc3RydWN0IHNvbDNfZ2xvYmFsX2lkX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlk X3NvbDNfZ2xvYmFsX2lkIH07CiAgZW51bSB7CiAgICBpaWRfYnlfYWxsLAogICAgaWlkX19tYXgg fTsKICBzb2wzX2dsb2JhbF9pZF90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3Qg JmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2dsb2JhbF9pZDsgfQogIHZvaWQgaW5pdCgpIHsgaW5p dGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX2xvY2FsX2lkX3R5cGUgaWQ7CiAgc29s M19ub2RlX2lkX3R5cGUgbm9kZTsKICBzb2wzX3R5cGVfaWRfdHlwZSB0eXBlOwp9OwoKZXh0ZXJu IG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfZ2xvYmFsX2lkX21lbWJlcl9pZDsKZXh0ZXJuIG1lbWJl cl90eXBlIGNvbnN0IHNvbDNfZ2xvYmFsX2lkX21lbWJlcl9ub2RlOwpleHRlcm4gbWVtYmVyX3R5 cGUgY29uc3Qgc29sM19nbG9iYWxfaWRfbWVtYmVyX3R5cGU7CgoKCgpleHRlcm4gaW5kZXhfdHlw ZSBjb25zdCBpZF9zb2wzX2dsb2JhbF9pZF9ieV9hbGw7CgpzdHJ1Y3Qgc29sM19nbG9iYWxfaWRf YnlfYWxsX3R5cGUKICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0g KHNvbDNfZ2xvYmFsX2lkX3R5cGU6OmlpZF9ieV9hbGwgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9k ZWZzOjp0eXBlX2JpdHMgfCBzb2wzX2dsb2JhbF9pZF90eXBlOjpfcmlkKSB9OwoKICBzb2wzX2ds b2JhbF9pZF9ieV9hbGxfdHlwZSgpIHt9CiAgc3RhdGljIGluZGV4X3R5cGUgY29uc3QgJmRlc2Mo KSB7IHJldHVybiBpZF9zb2wzX2dsb2JhbF9pZF9ieV9hbGw7IH0KICB2b2lkIGluaXQoKSB7IGlu aXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM190eXBlX2lkX3R5cGUgdHlwZTsKICBz b2wzX25vZGVfaWRfdHlwZSBub2RlOwogIHNvbDNfbG9jYWxfaWRfdHlwZSBpZDsKfTsKCgp0eXBl ZGVmIHN0cnVjdCBzb2wzX2dsb2JhbF9pZF90eXBlIHNvbDNfZ2xvYmFsX2lkX3R5cGU7CmV4dGVy biBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfZ2xvYmFsX2lkOwoKCgoKZXh0ZXJuIHJlY29yZF90 eXBlIGNvbnN0IHJkX3NvbDNfbG9hZF9pZDsKCnN0cnVjdCBzb2wzX2xvYWRfaWRfdHlwZQp7CiAg ZW51bSB7IF9yaWQgPSByaWRfc29sM19sb2FkX2lkIH07CiAgZW51bSB7CiAgICBpaWRfX21heCB9 OwogIHNvbDNfbG9hZF9pZF90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRl c2MoKSB7IHJldHVybiByZF9zb2wzX2xvYWRfaWQ7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxp emUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM190eXBlX2lkX3R5cGUgdHlwZTsKICBzb2wzX2Nv dW50X3R5cGUgY291bnQ7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19sb2FkX2lk X21lbWJlcl90eXBlOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19sb2FkX2lkX21lbWJl cl9jb3VudDsKCgp0eXBlZGVmIHVzaG9ydF90eXBlIHNvbDNfcmV2aXNpb25fbm9fdHlwZTsKZXh0 ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19yZXZpc2lvbl9ubzsKCgoKCmV4dGVybiByZWNv cmRfdHlwZSBjb25zdCByZF9zb2wzX3JldmlzaW9uOwoKc3RydWN0IHNvbDNfcmV2aXNpb25fdHlw ZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM19yZXZpc2lvbiB9OwogIGVudW0gewogICAgaWlk X19tYXggfTsKICBzb2wzX3JldmlzaW9uX3R5cGUoKSB7fQogIHN0YXRpYyByZWNvcmRfdHlwZSBj b25zdCAmZGVzYygpIHsgcmV0dXJuIHJkX3NvbDNfcmV2aXNpb247IH0KICB2b2lkIGluaXQoKSB7 IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19yZXZpc2lvbl9ub190eXBlIHJl dmlzaW9uOwp9OwoKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfcmV2aXNpb25fbWVtYmVy X3JldmlzaW9uOwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX25hbWVkOwoK c3RydWN0IHNvbDNfbmFtZWRfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM19uYW1lZCB9 OwogIGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wzX25hbWVkX3R5cGUoKSB7fQogIHN0YXRp YyByZWNvcmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIHJkX3NvbDNfbmFtZWQ7IH0KICB2 b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19uYW1lX3R5 cGUgbmFtZTsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX25hbWVkX21lbWJlcl9u YW1lOwoKCnR5cGVkZWYgc3RydWN0IHNvbDNfdW5pcXVlX2lkX3R5cGUgc29sM191c2VyX2lkX3R5 cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfdXNlcl9pZDsKCnR5cGVkZWYgc3Ry dWN0IHNvbDNfdW5pcXVlX2lkX3R5cGUgc29sM19ncm91cF9pZF90eXBlOwpleHRlcm4gZmllbGRf dHlwZSBjb25zdCBmZF9zb2wzX2dyb3VwX2lkOwoKdHlwZWRlZiB1c2hvcnRfdHlwZSBzb2wzX2Fj Y2Vzc19iaXRzX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfYWNjZXNzX2Jp dHM7CgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM19hY2Nlc3NfY29udHJvbDsK CnN0cnVjdCBzb2wzX2FjY2Vzc19jb250cm9sX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3Nv bDNfYWNjZXNzX2NvbnRyb2wgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4IH07CiAgc29sM19hY2Nl c3NfY29udHJvbF90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7 IHJldHVybiByZF9zb2wzX2FjY2Vzc19jb250cm9sOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFs aXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfdXNlcl9pZF90eXBlIG93bmVyOwogIHNvbDNf Z3JvdXBfaWRfdHlwZSBncm91cDsKICBzb2wzX2FjY2Vzc19iaXRzX3R5cGUgYWNjZXNzOwp9OwoK ZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfYWNjZXNzX2NvbnRyb2xfbWVtYmVyX293bmVy OwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19hY2Nlc3NfY29udHJvbF9tZW1iZXJfZ3Jv dXA7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FjY2Vzc19jb250cm9sX21lbWJlcl9h Y2Nlc3M7CgoKCgoKZXh0ZXJuIHJlY29yZF90eXBlIGNvbnN0IHJkX3NvbDNfZGF0ZV90aW1lOwoK c3RydWN0IHNvbDNfZGF0ZV90aW1lX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfZGF0 ZV90aW1lIH07CiAgZW51bSB7CiAgICBpaWRfYnlfYWxsLAogICAgaWlkX19tYXggfTsKICBzb2wz X2RhdGVfdGltZV90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7 IHJldHVybiByZF9zb2wzX2RhdGVfdGltZTsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAo ZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX2RhdGVfdHlwZSBkYXRlOwogIHNvbDNfdGltZV90eXBl IHRpbWU7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19kYXRlX3RpbWVfbWVtYmVy X2RhdGU7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2RhdGVfdGltZV9tZW1iZXJfdGlt ZTsKCgoKCmV4dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfZGF0ZV90aW1lX2J5X2FsbDsK CnN0cnVjdCBzb2wzX2RhdGVfdGltZV9ieV9hbGxfdHlwZQogIDogcHVibGljIGluZGV4X2Jhc2Vf dHlwZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19kYXRlX3RpbWVfdHlwZTo6aWlkX2J5X2FsbCAr IDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfZGF0ZV90aW1lX3R5 cGU6Ol9yaWQpIH07CgogIHNvbDNfZGF0ZV90aW1lX2J5X2FsbF90eXBlKCkge30KICBzdGF0aWMg aW5kZXhfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfZGF0ZV90aW1lX2J5X2Fs bDsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wz X2RhdGVfdHlwZSBkYXRlOwogIHNvbDNfdGltZV90eXBlIHRpbWU7Cn07CgoKCgoKZXh0ZXJuIHJl Y29yZF90eXBlIGNvbnN0IHJkX3NvbDNfY29udHJvbGxlZDsKCnN0cnVjdCBzb2wzX2NvbnRyb2xs ZWRfdHlwZQogIDogcHVibGljIHNvbDNfdW5pcXVlX3R5cGUKICAsIHB1YmxpYyBzb2wzX2FjY2Vz c19jb250cm9sX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfY29udHJvbGxlZCB9Owog IGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wzX2NvbnRyb2xsZWRfdHlwZSgpIHt9CiAgc3Rh dGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19jb250cm9sbGVk OyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9Cgp9OwoKCgp0 eXBlZGVmIHN0cnVjdCBzb2wzX3VuaXF1ZV9pZF90eXBlIHNvbDNfYWNjb3VudF9pZF90eXBlOwpl eHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2FjY291bnRfaWQ7CgoKCgpleHRlcm4gcmVj b3JkX3R5cGUgY29uc3QgcmRfc29sM19vd25lZDsKCnN0cnVjdCBzb2wzX293bmVkX3R5cGUKewog IGVudW0geyBfcmlkID0gcmlkX3NvbDNfb3duZWQgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4IH07 CiAgc29sM19vd25lZF90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2Mo KSB7IHJldHVybiByZF9zb2wzX293bmVkOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChk ZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfYWNjb3VudF9pZF90eXBlIGFjY291bnQ7Cn07CgpleHRl cm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19vd25lZF9tZW1iZXJfYWNjb3VudDsKCgoKCgpleHRl cm4gcmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM190cmFuc2ZlcjsKCnN0cnVjdCBzb2wzX3RyYW5z ZmVyX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfdHJhbnNmZXIgfTsKICBlbnVtIHsK ICAgIGlpZF9fbWF4IH07CiAgc29sM190cmFuc2Zlcl90eXBlKCkge30KICBzdGF0aWMgcmVjb3Jk X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX3RyYW5zZmVyOyB9CiAgdm9pZCBp bml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfYWNjb3VudF9pZF90 eXBlIGRlYml0OwogIHNvbDNfYWNjb3VudF9pZF90eXBlIGNyZWRpdDsKICBzb2wzX2dsb2JhbF9p ZF90eXBlIGNvbnRyYWN0OwogIHNvbDNfcXVhbnRpdHlfdHlwZSBxdWFudGl0eTsKfTsKCmV4dGVy biBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3RyYW5zZmVyX21lbWJlcl9kZWJpdDsKZXh0ZXJuIG1l bWJlcl90eXBlIGNvbnN0IHNvbDNfdHJhbnNmZXJfbWVtYmVyX2NyZWRpdDsKZXh0ZXJuIG1lbWJl cl90eXBlIGNvbnN0IHNvbDNfdHJhbnNmZXJfbWVtYmVyX2NvbnRyYWN0OwpleHRlcm4gbWVtYmVy X3R5cGUgY29uc3Qgc29sM190cmFuc2Zlcl9tZW1iZXJfcXVhbnRpdHk7CgoKCgoKZXh0ZXJuIHJl Y29yZF90eXBlIGNvbnN0IHJkX3NvbDNfZXZlbnQ7CgpzdHJ1Y3Qgc29sM19ldmVudF90eXBlCiAg OiBwdWJsaWMgc29sM191bmlxdWVfdHlwZQogICwgcHVibGljIHNvbDNfZGF0ZV90aW1lX3R5cGUK ewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfZXZlbnQgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4 IH07CiAgc29sM19ldmVudF90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRl c2MoKSB7IHJldHVybiByZF9zb2wzX2V2ZW50OyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXpl IChkZXNjKCksIHRoaXMpOyB9Cgp9OwoKCgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3QgcmRf c29sM19hdF9leGNoYW5nZTsKCnN0cnVjdCBzb2wzX2F0X2V4Y2hhbmdlX3R5cGUKewogIGVudW0g eyBfcmlkID0gcmlkX3NvbDNfYXRfZXhjaGFuZ2UgfTsKICBlbnVtIHsKICAgIGlpZF9ieV9hbGws CiAgICBpaWRfX21heCB9OwogIHNvbDNfYXRfZXhjaGFuZ2VfdHlwZSgpIHt9CiAgc3RhdGljIHJl Y29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19hdF9leGNoYW5nZTsgfQog IHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX2V4Y2hh bmdlX2lkX3R5cGUgZXhjaGFuZ2U7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19h dF9leGNoYW5nZV9tZW1iZXJfZXhjaGFuZ2U7CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25zdCBp ZF9zb2wzX2F0X2V4Y2hhbmdlX2J5X2FsbDsKCnN0cnVjdCBzb2wzX2F0X2V4Y2hhbmdlX2J5X2Fs bF90eXBlCiAgOiBwdWJsaWMgaW5kZXhfYmFzZV90eXBlCnsKICBlbnVtIHsgX3JpZCA9IChzb2wz X2F0X2V4Y2hhbmdlX3R5cGU6OmlpZF9ieV9hbGwgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZz Ojp0eXBlX2JpdHMgfCBzb2wzX2F0X2V4Y2hhbmdlX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfYXRf ZXhjaGFuZ2VfYnlfYWxsX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNj KCkgeyByZXR1cm4gaWRfc29sM19hdF9leGNoYW5nZV9ieV9hbGw7IH0KICB2b2lkIGluaXQoKSB7 IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19leGNoYW5nZV9pZF90eXBlIGV4 Y2hhbmdlOwp9OwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2V4Y2hhbmdl X2V2ZW50OwoKc3RydWN0IHNvbDNfZXhjaGFuZ2VfZXZlbnRfdHlwZQogIDogcHVibGljIHNvbDNf ZXZlbnRfdHlwZQogICwgcHVibGljIHNvbDNfb3duZWRfdHlwZQogICwgcHVibGljIHNvbDNfcmV2 aXNpb25fdHlwZQogICwgcHVibGljIHNvbDNfYXRfZXhjaGFuZ2VfdHlwZQp7CiAgZW51bSB7IF9y aWQgPSByaWRfc29sM19leGNoYW5nZV9ldmVudCB9OwogIGVudW0gewogICAgaWlkX19tYXggfTsK ICBzb2wzX2V4Y2hhbmdlX2V2ZW50X3R5cGUoKSB7fQogIHN0YXRpYyByZWNvcmRfdHlwZSBjb25z dCAmZGVzYygpIHsgcmV0dXJuIHJkX3NvbDNfZXhjaGFuZ2VfZXZlbnQ7IH0KICB2b2lkIGluaXQo KSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCn07CgoKCgoKCmV4dGVybiByZWNvcmRf dHlwZSBjb25zdCByZF9zb2wzX2V4Y2hhbmdlX3B1YmxpYzsKCnN0cnVjdCBzb2wzX2V4Y2hhbmdl X3B1YmxpY190eXBlCiAgOiBwdWJsaWMgc29sM19leGNoYW5nZV9ldmVudF90eXBlCnsKICBlbnVt IHsgX3JpZCA9IHJpZF9zb2wzX2V4Y2hhbmdlX3B1YmxpYyB9OwogIGVudW0gewogICAgaWlkX19t YXggfTsKICBzb2wzX2V4Y2hhbmdlX3B1YmxpY190eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5 cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2V4Y2hhbmdlX3B1YmxpYzsgfQogIHZv aWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX3F1YWxpdHlf dHlwZSBxdWFsaXR5Owp9OwoKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfZXhjaGFuZ2Vf cHVibGljX21lbWJlcl9xdWFsaXR5OwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9z b2wzX25vX3JlY29yZDsKCnN0cnVjdCBzb2wzX25vX3JlY29yZF90eXBlCnsKICBlbnVtIHsgX3Jp ZCA9IHJpZF9zb2wzX25vX3JlY29yZCB9OwogIGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wz X25vX3JlY29yZF90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7 IHJldHVybiByZF9zb2wzX25vX3JlY29yZDsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAo ZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX2J5dGVfdHlwZSBkYXRhX2ZpZWxkWzJdOwp9OwoKZXh0 ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfbm9fcmVjb3JkX21lbWJlcl9kYXRhX2ZpZWxkOwoK CgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2dlbmVyaWM7CgpzdHJ1Y3Qgc29s M19nZW5lcmljX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfZ2VuZXJpYyB9OwogIGVu dW0gewogICAgaWlkX19tYXggfTsKICBzb2wzX2dlbmVyaWNfdHlwZSgpIHt9CiAgc3RhdGljIHJl Y29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19nZW5lcmljOyB9CiAgdm9p ZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfaW50X3R5cGUg dmFsdWVbMTBdOwogIHNvbDNfdGV4dF90eXBlIHRleHQ7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUg Y29uc3Qgc29sM19nZW5lcmljX21lbWJlcl92YWx1ZTsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0 IHNvbDNfZ2VuZXJpY19tZW1iZXJfdGV4dDsKCgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3Qg cmRfc29sM19zdGF0dXM7CgpzdHJ1Y3Qgc29sM19zdGF0dXNfdHlwZQp7CiAgZW51bSB7IF9yaWQg PSByaWRfc29sM19zdGF0dXMgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4IH07CiAgc29sM19zdGF0 dXNfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4g cmRfc29sM19zdGF0dXM7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhp cyk7IH0KCiAgc29sM19lcnJvcl90eXBlIGVycm9yOwogIHNvbDNfbWVzc2FnZV90eXBlIG1lc3Nh Z2U7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19zdGF0dXNfbWVtYmVyX2Vycm9y OwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19zdGF0dXNfbWVtYmVyX21lc3NhZ2U7CgoK dHlwZWRlZiB1dGlueV90eXBlIHNvbDNfcHVibGljX2tleV90eXBlWzEyOF07CmV4dGVybiBmaWVs ZF90eXBlIGNvbnN0IGZkX3NvbDNfcHVibGljX2tleTsKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBj b25zdCByZF9zb2wzX2tleV9leGNoYW5nZTsKCnN0cnVjdCBzb2wzX2tleV9leGNoYW5nZV90eXBl CnsKICBlbnVtIHsgX3JpZCA9IHJpZF9zb2wzX2tleV9leGNoYW5nZSB9OwogIGVudW0gewogICAg aWlkX19tYXggfTsKICBzb2wzX2tleV9leGNoYW5nZV90eXBlKCkge30KICBzdGF0aWMgcmVjb3Jk X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2tleV9leGNoYW5nZTsgfQogIHZv aWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX3B1YmxpY19r ZXlfdHlwZSBwazsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2tleV9leGNoYW5n ZV9tZW1iZXJfcGs7CgoKdHlwZWRlZiB1dGlueV90eXBlIHNvbDNfaXBfYWRkcmVzc190eXBlWzRd OwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2lwX2FkZHJlc3M7CgoKCgpleHRlcm4g cmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM19pbnF1aXJlX2NvbW1fZGV0YWlsczsKCnN0cnVjdCBz b2wzX2lucXVpcmVfY29tbV9kZXRhaWxzX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNf aW5xdWlyZV9jb21tX2RldGFpbHMgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4IH07CiAgc29sM19p bnF1aXJlX2NvbW1fZGV0YWlsc190eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3Qg JmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2lucXVpcmVfY29tbV9kZXRhaWxzOyB9CiAgdm9pZCBp bml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfaXBfYWRkcmVzc190 eXBlIGlwX2FkZHJlc3M7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19pbnF1aXJl X2NvbW1fZGV0YWlsc19tZW1iZXJfaXBfYWRkcmVzczsKCgoKCgpleHRlcm4gcmVjb3JkX3R5cGUg Y29uc3QgcmRfc29sM19jb21tX2RldGFpbHM7CgpzdHJ1Y3Qgc29sM19jb21tX2RldGFpbHNfdHlw ZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM19jb21tX2RldGFpbHMgfTsKICBlbnVtIHsKICAg IGlpZF9fbWF4IH07CiAgc29sM19jb21tX2RldGFpbHNfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29y ZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19jb21tX2RldGFpbHM7IH0KICB2 b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19pcF9hZGRy ZXNzX3R5cGUgbXVsdGljYXN0X2FkZHJlc3M7CiAgc29sM19ib29sX3R5cGUgY29tcHJlc3M7CiAg c29sM19ib29sX3R5cGUgZW5jcnlwdDsKICBzb2wzX2Jvb2xfdHlwZSBtdWx0aWNhc3Q7Cn07Cgpl eHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19jb21tX2RldGFpbHNfbWVtYmVyX211bHRpY2Fz dF9hZGRyZXNzOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19jb21tX2RldGFpbHNfbWVt YmVyX2NvbXByZXNzOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19jb21tX2RldGFpbHNf bWVtYmVyX2VuY3J5cHQ7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2NvbW1fZGV0YWls c19tZW1iZXJfbXVsdGljYXN0OwoKCnR5cGVkZWYgc3RyZml4X3R5cGU8NTA+IHNvbDNfaG9zdG5h bWVfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19ob3N0bmFtZTsKCnR5cGVk ZWYgc3RyZml4X3R5cGU8NTA+IHNvbDNfZGlzcGxheV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBj b25zdCBmZF9zb2wzX2Rpc3BsYXk7Cgp0eXBlZGVmIHN0cmZpeF90eXBlPDUwPiBzb2wzX2FwcGxp Y2F0aW9uX25hbWVfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19hcHBsaWNh dGlvbl9uYW1lOwoKdHlwZWRlZiBzdHJmaXhfdHlwZTwxMj4gc29sM19zeXN0ZW1fdXNlcl90eXBl OwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX3N5c3RlbV91c2VyOwoKCgoKZXh0ZXJu IHJlY29yZF90eXBlIGNvbnN0IHJkX3NvbDNfYXBwbGljYXRpb247CgpzdHJ1Y3Qgc29sM19hcHBs aWNhdGlvbl90eXBlCnsKICBlbnVtIHsgX3JpZCA9IHJpZF9zb2wzX2FwcGxpY2F0aW9uIH07CiAg ZW51bSB7CiAgICBpaWRfX21heCB9OwogIHNvbDNfYXBwbGljYXRpb25fdHlwZSgpIHt9CiAgc3Rh dGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19hcHBsaWNhdGlv bjsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wz X2hvc3RuYW1lX3R5cGUgaG9zdG5hbWU7CiAgc29sM19pcF9hZGRyZXNzX3R5cGUgaXBfYWRkcmVz czsKICBzb2wzX2lwX2FkZHJlc3NfdHlwZSBtdWx0aWNhc3RfZ3JvdXA7CiAgc29sM19kaXNwbGF5 X3R5cGUgZGlzcGxheTsKICBzb2wzX2FwcGxpY2F0aW9uX25hbWVfdHlwZSBhcHBsaWNhdGlvbjsK ICBzb2wzX3N5c3RlbV91c2VyX3R5cGUgc3lzdGVtX3VzZXI7CiAgc29sM19ib29sX3R5cGUgY29t cHJlc3Npb247CiAgc29sM19pbnRfdHlwZSBwaW5nX2ludGVydmFsOwogIHNvbDNfdWludF90eXBl IGFsaWdubWVudDsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FwcGxpY2F0aW9u X21lbWJlcl9ob3N0bmFtZTsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfYXBwbGljYXRp b25fbWVtYmVyX2lwX2FkZHJlc3M7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FwcGxp Y2F0aW9uX21lbWJlcl9tdWx0aWNhc3RfZ3JvdXA7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBz b2wzX2FwcGxpY2F0aW9uX21lbWJlcl9kaXNwbGF5OwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qg c29sM19hcHBsaWNhdGlvbl9tZW1iZXJfYXBwbGljYXRpb247CmV4dGVybiBtZW1iZXJfdHlwZSBj b25zdCBzb2wzX2FwcGxpY2F0aW9uX21lbWJlcl9zeXN0ZW1fdXNlcjsKZXh0ZXJuIG1lbWJlcl90 eXBlIGNvbnN0IHNvbDNfYXBwbGljYXRpb25fbWVtYmVyX2NvbXByZXNzaW9uOwpleHRlcm4gbWVt YmVyX3R5cGUgY29uc3Qgc29sM19hcHBsaWNhdGlvbl9tZW1iZXJfcGluZ19pbnRlcnZhbDsKZXh0 ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfYXBwbGljYXRpb25fbWVtYmVyX2FsaWdubWVudDsK CgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM19hcHBfbG9naW47CgpzdHJ1Y3Qg c29sM19hcHBfbG9naW5fdHlwZQogIDogcHVibGljIHNvbDNfYXBwbGljYXRpb25fdHlwZQp7CiAg ZW51bSB7IF9yaWQgPSByaWRfc29sM19hcHBfbG9naW4gfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4 IH07CiAgc29sM19hcHBfbG9naW5fdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0 ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19hcHBfbG9naW47IH0KICB2b2lkIGluaXQoKSB7IGlu aXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19pbnRfdHlwZSBub2RlX2lkOwogIHNv bDNfaW50X3R5cGUgdW5peF90aW1lOwogIHNvbDNfaW50X3R5cGUgZGF0ZV9vZmZzZXQ7Cn07Cgpl eHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19hcHBfbG9naW5fbWVtYmVyX25vZGVfaWQ7CmV4 dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FwcF9sb2dpbl9tZW1iZXJfdW5peF90aW1lOwpl eHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19hcHBfbG9naW5fbWVtYmVyX2RhdGVfb2Zmc2V0 OwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX3NldF9kYXRlOwoKc3RydWN0 IHNvbDNfc2V0X2RhdGVfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM19zZXRfZGF0ZSB9 OwogIGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wzX3NldF9kYXRlX3R5cGUoKSB7fQogIHN0 YXRpYyByZWNvcmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIHJkX3NvbDNfc2V0X2RhdGU7 IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19p bnRfdHlwZSBkYXRlX29mZnNldDsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3Nl dF9kYXRlX21lbWJlcl9kYXRlX29mZnNldDsKCgp0eXBlZGVmIHN0cmZpeF90eXBlPDEyPiBzb2wz X2xvZ2luX25hbWVfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19sb2dpbl9u YW1lOwoKCgoKZXh0ZXJuIHJlY29yZF90eXBlIGNvbnN0IHJkX3NvbDNfdXNlcl9sb2dpbl8xOwoK c3RydWN0IHNvbDNfdXNlcl9sb2dpbl8xX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNf dXNlcl9sb2dpbl8xIH07CiAgZW51bSB7CiAgICBpaWRfX21heCB9OwogIHNvbDNfdXNlcl9sb2dp bl8xX3R5cGUoKSB7fQogIHN0YXRpYyByZWNvcmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJu IHJkX3NvbDNfdXNlcl9sb2dpbl8xOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNj KCksIHRoaXMpOyB9CgogIHNvbDNfbG9naW5fbmFtZV90eXBlIGxvZ2luX25hbWU7Cn07CgpleHRl cm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM191c2VyX2xvZ2luXzFfbWVtYmVyX2xvZ2luX25hbWU7 CgoKdHlwZWRlZiB1dGlueV90eXBlIHNvbDNfc2FsdF90eXBlWzRdOwpleHRlcm4gZmllbGRfdHlw ZSBjb25zdCBmZF9zb2wzX3NhbHQ7CgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3QgcmRfc29s M191c2VyX2xvZ2luXzI7CgpzdHJ1Y3Qgc29sM191c2VyX2xvZ2luXzJfdHlwZQp7CiAgZW51bSB7 IF9yaWQgPSByaWRfc29sM191c2VyX2xvZ2luXzIgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4IH07 CiAgc29sM191c2VyX2xvZ2luXzJfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0 ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM191c2VyX2xvZ2luXzI7IH0KICB2b2lkIGluaXQoKSB7 IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19zYWx0X3R5cGUgcGFzc3dkX3Nh bHQ7CiAgc29sM19wdWJsaWNfa2V5X3R5cGUgcHVibGljX2tleTsKfTsKCmV4dGVybiBtZW1iZXJf dHlwZSBjb25zdCBzb2wzX3VzZXJfbG9naW5fMl9tZW1iZXJfcGFzc3dkX3NhbHQ7CmV4dGVybiBt ZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VzZXJfbG9naW5fMl9tZW1iZXJfcHVibGljX2tleTsKCgp0 eXBlZGVmIHV0aW55X3R5cGUgc29sM19pbml0dmVjX3R5cGVbOF07CmV4dGVybiBmaWVsZF90eXBl IGNvbnN0IGZkX3NvbDNfaW5pdHZlYzsKCnR5cGVkZWYgdXRpbnlfdHlwZSBzb2wzX2hhc2hfdHlw ZVsxNl07CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfaGFzaDsKCgoKCmV4dGVybiBy ZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX3VzZXJfbG9naW5fMzsKCnN0cnVjdCBzb2wzX3VzZXJf bG9naW5fM190eXBlCnsKICBlbnVtIHsgX3JpZCA9IHJpZF9zb2wzX3VzZXJfbG9naW5fMyB9Owog IGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wzX3VzZXJfbG9naW5fM190eXBlKCkge30KICBz dGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX3VzZXJfbG9n aW5fMzsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBz b2wzX3B1YmxpY19rZXlfdHlwZSBwdWJsaWNfa2V5OwogIHNvbDNfaGFzaF90eXBlIGtleV9oYXNo OwogIHNvbDNfaW5pdHZlY190eXBlIGluaXR2ZWM7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29u c3Qgc29sM191c2VyX2xvZ2luXzNfbWVtYmVyX3B1YmxpY19rZXk7CmV4dGVybiBtZW1iZXJfdHlw ZSBjb25zdCBzb2wzX3VzZXJfbG9naW5fM19tZW1iZXJfa2V5X2hhc2g7CmV4dGVybiBtZW1iZXJf dHlwZSBjb25zdCBzb2wzX3VzZXJfbG9naW5fM19tZW1iZXJfaW5pdHZlYzsKCgoKCgpleHRlcm4g cmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM191c2VyX2xvZ2luXzQ7CgpzdHJ1Y3Qgc29sM191c2Vy X2xvZ2luXzRfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM191c2VyX2xvZ2luXzQgfTsK ICBlbnVtIHsKICAgIGlpZF9fbWF4IH07CiAgc29sM191c2VyX2xvZ2luXzRfdHlwZSgpIHt9CiAg c3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM191c2VyX2xv Z2luXzQ7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAg c29sM19oYXNoX3R5cGUga2V5X2hhc2g7CiAgc29sM19pbml0dmVjX3R5cGUgaW5pdHZlYzsKfTsK CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VzZXJfbG9naW5fNF9tZW1iZXJfa2V5X2hh c2g7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VzZXJfbG9naW5fNF9tZW1iZXJfaW5p dHZlYzsKCgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM19wYXNzd29yZF9jaGFu Z2U7CgpzdHJ1Y3Qgc29sM19wYXNzd29yZF9jaGFuZ2VfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSBy aWRfc29sM19wYXNzd29yZF9jaGFuZ2UgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4IH07CiAgc29s M19wYXNzd29yZF9jaGFuZ2VfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZk ZXNjKCkgeyByZXR1cm4gcmRfc29sM19wYXNzd29yZF9jaGFuZ2U7IH0KICB2b2lkIGluaXQoKSB7 IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19sb2dpbl9uYW1lX3R5cGUgdXNl cjsKICBzb2wzX2hhc2hfdHlwZSBvbGRfcGFzc3dkX2hhc2g7CiAgc29sM19zYWx0X3R5cGUgcGFz c3dkX3NhbHQ7CiAgc29sM19oYXNoX3R5cGUgcGFzc3dkX2hhc2g7Cn07CgpleHRlcm4gbWVtYmVy X3R5cGUgY29uc3Qgc29sM19wYXNzd29yZF9jaGFuZ2VfbWVtYmVyX3VzZXI7CmV4dGVybiBtZW1i ZXJfdHlwZSBjb25zdCBzb2wzX3Bhc3N3b3JkX2NoYW5nZV9tZW1iZXJfb2xkX3Bhc3N3ZF9oYXNo OwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19wYXNzd29yZF9jaGFuZ2VfbWVtYmVyX3Bh c3N3ZF9zYWx0OwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19wYXNzd29yZF9jaGFuZ2Vf bWVtYmVyX3Bhc3N3ZF9oYXNoOwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wz X2xvZ2luX2luZm87CgpzdHJ1Y3Qgc29sM19sb2dpbl9pbmZvX3R5cGUKewogIGVudW0geyBfcmlk ID0gcmlkX3NvbDNfbG9naW5faW5mbyB9OwogIGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wz X2xvZ2luX2luZm9fdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkg eyByZXR1cm4gcmRfc29sM19sb2dpbl9pbmZvOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXpl IChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfbmV0X3BhcnRuZXJfaWRfdHlwZSBwYXJ0bmVyX2lk OwogIHNvbDNfbG9naW5fbmFtZV90eXBlIGxvZ2luX25hbWU7CiAgc29sM19hcHBsaWNhdGlvbl9u YW1lX3R5cGUgYXBwbGljYXRpb247Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19s b2dpbl9pbmZvX21lbWJlcl9wYXJ0bmVyX2lkOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29s M19sb2dpbl9pbmZvX21lbWJlcl9sb2dpbl9uYW1lOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qg c29sM19sb2dpbl9pbmZvX21lbWJlcl9hcHBsaWNhdGlvbjsKCgoKCgpleHRlcm4gcmVjb3JkX3R5 cGUgY29uc3QgcmRfc29sM19sb2dvdXRfaW5mbzsKCnN0cnVjdCBzb2wzX2xvZ291dF9pbmZvX3R5 cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfbG9nb3V0X2luZm8gfTsKICBlbnVtIHsKICAg IGlpZF9fbWF4IH07CiAgc29sM19sb2dvdXRfaW5mb190eXBlKCkge30KICBzdGF0aWMgcmVjb3Jk X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2xvZ291dF9pbmZvOyB9CiAgdm9p ZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfbmV0X3BhcnRu ZXJfaWRfdHlwZSBwYXJ0bmVyX2lkOwp9OwoKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNf bG9nb3V0X2luZm9fbWVtYmVyX3BhcnRuZXJfaWQ7CgoKdHlwZWRlZiBjaGFyX3R5cGUgc29sM19s aWNlbnNlX29wX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfbGljZW5zZV9v cDsKCnR5cGVkZWYgdXNob3J0X3R5cGUgc29sM19mZWF0dXJlX3R5cGU7CmV4dGVybiBmaWVsZF90 eXBlIGNvbnN0IGZkX3NvbDNfZmVhdHVyZTsKCnR5cGVkZWYgdWludF90eXBlIHNvbDNfZmVhdHVy ZXNfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19mZWF0dXJlczsKCgoKCmV4 dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2xpY2Vuc2U7CgpzdHJ1Y3Qgc29sM19saWNl bnNlX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfbGljZW5zZSB9OwogIGVudW0gewog ICAgaWlkX19tYXggfTsKICBzb2wzX2xpY2Vuc2VfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90 eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19saWNlbnNlOyB9CiAgdm9pZCBpbml0 KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfbGljZW5zZV9vcF90eXBl IG9wOwogIHNvbDNfZmVhdHVyZXNfdHlwZSBmZWF0dXJlczsKfTsKCmV4dGVybiBtZW1iZXJfdHlw ZSBjb25zdCBzb2wzX2xpY2Vuc2VfbWVtYmVyX29wOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qg c29sM19saWNlbnNlX21lbWJlcl9mZWF0dXJlczsKCgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29u c3QgcmRfc29sM19saWNlbnNlX2luZm87CgpzdHJ1Y3Qgc29sM19saWNlbnNlX2luZm9fdHlwZQp7 CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM19saWNlbnNlX2luZm8gfTsKICBlbnVtIHsKICAgIGlp ZF9fbWF4IH07CiAgc29sM19saWNlbnNlX2luZm9fdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90 eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19saWNlbnNlX2luZm87IH0KICB2b2lk IGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19mZWF0dXJlX3R5 cGUgZmVhdHVyZTsKICBzb2wzX2NvdW50X3R5cGUgaW51c2U7CiAgc29sM19jb3VudF90eXBlIHRv dGFsOwp9OwoKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfbGljZW5zZV9pbmZvX21lbWJl cl9mZWF0dXJlOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19saWNlbnNlX2luZm9fbWVt YmVyX2ludXNlOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19saWNlbnNlX2luZm9fbWVt YmVyX3RvdGFsOwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2FkbWluX3Jl cXVlc3Q7CgpzdHJ1Y3Qgc29sM19hZG1pbl9yZXF1ZXN0X3R5cGUKewogIGVudW0geyBfcmlkID0g cmlkX3NvbDNfYWRtaW5fcmVxdWVzdCB9OwogIGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wz X2FkbWluX3JlcXVlc3RfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNj KCkgeyByZXR1cm4gcmRfc29sM19hZG1pbl9yZXF1ZXN0OyB9CiAgdm9pZCBpbml0KCkgeyBpbml0 aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfaW50X3R5cGUgcGFydG5lcjsKICBzb2wz X2J5dGVfdHlwZSByZWxvYWQ7CiAgc29sM19ib29sX3R5cGUgc2h1dGRvd247CiAgc29sM19pbnRf dHlwZSBwcmlvcml0eTsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FkbWluX3Jl cXVlc3RfbWVtYmVyX3BhcnRuZXI7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FkbWlu X3JlcXVlc3RfbWVtYmVyX3JlbG9hZDsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfYWRt aW5fcmVxdWVzdF9tZW1iZXJfc2h1dGRvd247CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wz X2FkbWluX3JlcXVlc3RfbWVtYmVyX3ByaW9yaXR5OwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBj b25zdCByZF9zb2wzX2FkbWluX2NvbW1hbmQ7CgpzdHJ1Y3Qgc29sM19hZG1pbl9jb21tYW5kX3R5 cGUKICA6IHB1YmxpYyBzb2wzX2FwcGxpY2F0aW9uX3R5cGUKICAsIHB1YmxpYyBzb2wzX2FkbWlu X3JlcXVlc3RfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM19hZG1pbl9jb21tYW5kIH07 CiAgZW51bSB7CiAgICBpaWRfX21heCB9OwogIHNvbDNfYWRtaW5fY29tbWFuZF90eXBlKCkge30K ICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2FkbWlu X2NvbW1hbmQ7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0K CiAgc29sM19sb2dpbl9uYW1lX3R5cGUgbG9naW5fbmFtZTsKfTsKCmV4dGVybiBtZW1iZXJfdHlw ZSBjb25zdCBzb2wzX2FkbWluX2NvbW1hbmRfbWVtYmVyX2xvZ2luX25hbWU7CgoKdHlwZWRlZiB1 c2hvcnRfdHlwZSBzb2wzX3N0cmVhbV9pZF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBm ZF9zb2wzX3N0cmVhbV9pZDsKCnR5cGVkZWYgaW50X3R5cGUgc29sM19zZXF1ZW5jZV9ub190eXBl OwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX3NlcXVlbmNlX25vOwoKCgoKZXh0ZXJu IHJlY29yZF90eXBlIGNvbnN0IHJkX3NvbDNfcmVyZXF1ZXN0OwoKc3RydWN0IHNvbDNfcmVyZXF1 ZXN0X3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfcmVyZXF1ZXN0IH07CiAgZW51bSB7 CiAgICBpaWRfX21heCB9OwogIHNvbDNfcmVyZXF1ZXN0X3R5cGUoKSB7fQogIHN0YXRpYyByZWNv cmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIHJkX3NvbDNfcmVyZXF1ZXN0OyB9CiAgdm9p ZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfc3RyZWFtX2lk X3R5cGUgc3RyZWFtX2lkOwogIHNvbDNfc2VxdWVuY2Vfbm9fdHlwZSBzZXFfbG87CiAgc29sM19z ZXF1ZW5jZV9ub190eXBlIHNlcV9oaTsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wz X3JlcmVxdWVzdF9tZW1iZXJfc3RyZWFtX2lkOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29s M19yZXJlcXVlc3RfbWVtYmVyX3NlcV9sbzsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNf cmVyZXF1ZXN0X21lbWJlcl9zZXFfaGk7CgoKdHlwZWRlZiB1c2hvcnRfdHlwZSBzb2wzX3BvcnRf bnVtYmVyX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfcG9ydF9udW1iZXI7 Cgp0eXBlZGVmIHN0cmZpeF90eXBlPDI1Nj4gc29sM19jb21tYW5kbGluZV90eXBlOwpleHRlcm4g ZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2NvbW1hbmRsaW5lOwoKCgoKZXh0ZXJuIHJlY29yZF90 eXBlIGNvbnN0IHJkX3NvbDNfc29sM2Rfc3RhcnQ7CgpzdHJ1Y3Qgc29sM19zb2wzZF9zdGFydF90 eXBlCnsKICBlbnVtIHsgX3JpZCA9IHJpZF9zb2wzX3NvbDNkX3N0YXJ0IH07CiAgZW51bSB7CiAg ICBpaWRfX21heCB9OwogIHNvbDNfc29sM2Rfc3RhcnRfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29y ZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19zb2wzZF9zdGFydDsgfQogIHZv aWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX2lwX2FkZHJl c3NfdHlwZSBob3N0X2lkOwogIHNvbDNfcG9ydF9udW1iZXJfdHlwZSBwb3J0X2lkOwogIHNvbDNf Y29tbWFuZGxpbmVfdHlwZSBleGVjdXRhYmxlOwogIHNvbDNfY29tbWFuZGxpbmVfdHlwZSBwcm9n cmFtOwp9OwoKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfc29sM2Rfc3RhcnRfbWVtYmVy X2hvc3RfaWQ7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3NvbDNkX3N0YXJ0X21lbWJl cl9wb3J0X2lkOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19zb2wzZF9zdGFydF9tZW1i ZXJfZXhlY3V0YWJsZTsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfc29sM2Rfc3RhcnRf bWVtYmVyX3Byb2dyYW07CgoKdHlwZWRlZiBzdHJmaXhfdHlwZTwyNz4gc29sM19wYXNzd29yZF90 eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX3Bhc3N3b3JkOwoKdHlwZWRlZiB1 aW50X3R5cGUgc29sM19wcml2aWxlZ2VzX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZk X3NvbDNfcHJpdmlsZWdlczsKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX3Vz ZXI7CgpzdHJ1Y3Qgc29sM191c2VyX3R5cGUKICA6IHB1YmxpYyBzb2wzX2NvbnRyb2xsZWRfdHlw ZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM191c2VyIH07CiAgZW51bSB7CiAgICBpaWRfYnlf aWQsCiAgICBpaWRfYnlfbmFtZSwKICAgIGlpZF9fbWF4IH07CiAgc29sM191c2VyX3R5cGUoKSB7 fQogIHN0YXRpYyByZWNvcmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIHJkX3NvbDNfdXNl cjsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wz X2xvZ2luX25hbWVfdHlwZSBuYW1lOwogIHNvbDNfcGFzc3dvcmRfdHlwZSBwYXNzd29yZDsKICBz b2wzX3ByaXZpbGVnZXNfdHlwZSBncmFudGVkOwogIHNvbDNfcHJpdmlsZWdlc190eXBlIGRlbmll ZDsKICBzb2wzX2dyb3VwX2lkX3R5cGUgc2lnbl9ncm91cDsKICBzb2wzX2FjY2Vzc19iaXRzX3R5 cGUgc2lnbl9hY2Nlc3M7CiAgc29sM190ZXh0X3R5cGUgdGV4dFsyXTsKICBzb2wzX3VuaXF1ZV9p ZF90eXBlIHJlc291cmNlX3NldDsKICBzb2wzX3VuaXF1ZV9pZF90eXBlIHBvcnRmb2xpbzsKfTsK CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VzZXJfbWVtYmVyX25hbWU7CmV4dGVybiBt ZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VzZXJfbWVtYmVyX3Bhc3N3b3JkOwpleHRlcm4gbWVtYmVy X3R5cGUgY29uc3Qgc29sM191c2VyX21lbWJlcl9ncmFudGVkOwpleHRlcm4gbWVtYmVyX3R5cGUg Y29uc3Qgc29sM191c2VyX21lbWJlcl9kZW5pZWQ7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBz b2wzX3VzZXJfbWVtYmVyX3NpZ25fZ3JvdXA7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wz X3VzZXJfbWVtYmVyX3NpZ25fYWNjZXNzOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM191 c2VyX21lbWJlcl90ZXh0OwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM191c2VyX21lbWJl cl9yZXNvdXJjZV9zZXQ7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VzZXJfbWVtYmVy X3BvcnRmb2xpbzsKCgoKCmV4dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfdXNlcl9ieV9p ZDsKCnN0cnVjdCBzb2wzX3VzZXJfYnlfaWRfdHlwZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlw ZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM191c2VyX3R5cGU6OmlpZF9ieV9pZCArIDEgPDwgc2Vu dGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfdXNlcl90eXBlOjpfcmlkKSB9OwoK ICBzb2wzX3VzZXJfYnlfaWRfdHlwZSgpIHt9CiAgc3RhdGljIGluZGV4X3R5cGUgY29uc3QgJmRl c2MoKSB7IHJldHVybiBpZF9zb2wzX3VzZXJfYnlfaWQ7IH0KICB2b2lkIGluaXQoKSB7IGluaXRp YWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19ub2RlX2lkX3R5cGUgbm9kZTsKICBzb2wz X2F1dG9faWRfdHlwZSBpZDsKfTsKCgoKCmV4dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNf dXNlcl9ieV9uYW1lOwoKc3RydWN0IHNvbDNfdXNlcl9ieV9uYW1lX3R5cGUKICA6IHB1YmxpYyBp bmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0gKHNvbDNfdXNlcl90eXBlOjppaWRfYnlf bmFtZSArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfdXNlcl90 eXBlOjpfcmlkKSB9OwoKICBzb2wzX3VzZXJfYnlfbmFtZV90eXBlKCkge30KICBzdGF0aWMgaW5k ZXhfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfdXNlcl9ieV9uYW1lOyB9CiAg dm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfbG9naW5f bmFtZV90eXBlIG5hbWU7Cn07CgoKdHlwZWRlZiBzdHJmaXhfdHlwZTwyMD4gc29sM19ncm91cF9u YW1lX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfZ3JvdXBfbmFtZTsKCgoK CmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2dyb3VwOwoKc3RydWN0IHNvbDNfZ3Jv dXBfdHlwZQogIDogcHVibGljIHNvbDNfY29udHJvbGxlZF90eXBlCnsKICBlbnVtIHsgX3JpZCA9 IHJpZF9zb2wzX2dyb3VwIH07CiAgZW51bSB7CiAgICBpaWRfYnlfaWQsCiAgICBpaWRfYnlfbmFt ZSwKICAgIGlpZF9fbWF4IH07CiAgc29sM19ncm91cF90eXBlKCkge30KICBzdGF0aWMgcmVjb3Jk X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2dyb3VwOyB9CiAgdm9pZCBpbml0 KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfZ3JvdXBfbmFtZV90eXBl IG5hbWU7CiAgc29sM19wcml2aWxlZ2VzX3R5cGUgZ3JhbnRlZDsKICBzb2wzX3ByaXZpbGVnZXNf dHlwZSBkZW5pZWQ7CiAgc29sM190ZXh0X3R5cGUgdGV4dFsyXTsKfTsKCmV4dGVybiBtZW1iZXJf dHlwZSBjb25zdCBzb2wzX2dyb3VwX21lbWJlcl9uYW1lOwpleHRlcm4gbWVtYmVyX3R5cGUgY29u c3Qgc29sM19ncm91cF9tZW1iZXJfZ3JhbnRlZDsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNv bDNfZ3JvdXBfbWVtYmVyX2RlbmllZDsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfZ3Jv dXBfbWVtYmVyX3RleHQ7CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25zdCBpZF9zb2wzX2dyb3Vw X2J5X2lkOwoKc3RydWN0IHNvbDNfZ3JvdXBfYnlfaWRfdHlwZQogIDogcHVibGljIGluZGV4X2Jh c2VfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19ncm91cF90eXBlOjppaWRfYnlfaWQgKyAx IDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2JpdHMgfCBzb2wzX2dyb3VwX3R5cGU6Ol9y aWQpIH07CgogIHNvbDNfZ3JvdXBfYnlfaWRfdHlwZSgpIHt9CiAgc3RhdGljIGluZGV4X3R5cGUg Y29uc3QgJmRlc2MoKSB7IHJldHVybiBpZF9zb2wzX2dyb3VwX2J5X2lkOyB9CiAgdm9pZCBpbml0 KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfbm9kZV9pZF90eXBlIG5v ZGU7CiAgc29sM19hdXRvX2lkX3R5cGUgaWQ7Cn07CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25z dCBpZF9zb2wzX2dyb3VwX2J5X25hbWU7CgpzdHJ1Y3Qgc29sM19ncm91cF9ieV9uYW1lX3R5cGUK ICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0gKHNvbDNfZ3JvdXBf dHlwZTo6aWlkX2J5X25hbWUgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2JpdHMg fCBzb2wzX2dyb3VwX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfZ3JvdXBfYnlfbmFtZV90eXBlKCkg e30KICBzdGF0aWMgaW5kZXhfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfZ3Jv dXBfYnlfbmFtZTsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsg fQoKICBzb2wzX2dyb3VwX25hbWVfdHlwZSBuYW1lOwp9OwoKCnR5cGVkZWYgc3RyZml4X3R5cGU8 MjA+IHNvbDNfZmlyc3RfbmFtZV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wz X2ZpcnN0X25hbWU7Cgp0eXBlZGVmIHN0cmZpeF90eXBlPDIwPiBzb2wzX2xhc3RfbmFtZV90eXBl OwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2xhc3RfbmFtZTsKCnR5cGVkZWYgc3Ry Zml4X3R5cGU8MzA+IHNvbDNfb3JnYW5pemF0aW9uX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNv bnN0IGZkX3NvbDNfb3JnYW5pemF0aW9uOwoKdHlwZWRlZiBzdHJmaXhfdHlwZTwzMD4gc29sM19h ZGRyZXNzX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfYWRkcmVzczsKCgoK CmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2N1c3RvbWVyOwoKc3RydWN0IHNvbDNf Y3VzdG9tZXJfdHlwZQogIDogcHVibGljIHNvbDNfY29udHJvbGxlZF90eXBlCnsKICBlbnVtIHsg X3JpZCA9IHJpZF9zb2wzX2N1c3RvbWVyIH07CiAgZW51bSB7CiAgICBpaWRfYnlfaWQsCiAgICBp aWRfYnlfbmFtZSwKICAgIGlpZF9ieV9vcmdhbml6YXRpb24sCiAgICBpaWRfX21heCB9OwogIHNv bDNfY3VzdG9tZXJfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkg eyByZXR1cm4gcmRfc29sM19jdXN0b21lcjsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAo ZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX2ZpcnN0X25hbWVfdHlwZSBmaXJzdF9uYW1lOwogIHNv bDNfbGFzdF9uYW1lX3R5cGUgbGFzdF9uYW1lOwogIHNvbDNfb3JnYW5pemF0aW9uX3R5cGUgb3Jn YW5pemF0aW9uOwogIHNvbDNfYWRkcmVzc190eXBlIGFkZHJlc3NbM107Cn07CgpleHRlcm4gbWVt YmVyX3R5cGUgY29uc3Qgc29sM19jdXN0b21lcl9tZW1iZXJfZmlyc3RfbmFtZTsKZXh0ZXJuIG1l bWJlcl90eXBlIGNvbnN0IHNvbDNfY3VzdG9tZXJfbWVtYmVyX2xhc3RfbmFtZTsKZXh0ZXJuIG1l bWJlcl90eXBlIGNvbnN0IHNvbDNfY3VzdG9tZXJfbWVtYmVyX29yZ2FuaXphdGlvbjsKZXh0ZXJu IG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfY3VzdG9tZXJfbWVtYmVyX2FkZHJlc3M7CgoKCgpleHRl cm4gaW5kZXhfdHlwZSBjb25zdCBpZF9zb2wzX2N1c3RvbWVyX2J5X2lkOwoKc3RydWN0IHNvbDNf Y3VzdG9tZXJfYnlfaWRfdHlwZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlwZQp7CiAgZW51bSB7 IF9yaWQgPSAoc29sM19jdXN0b21lcl90eXBlOjppaWRfYnlfaWQgKyAxIDw8IHNlbnRlbmNlX2hl YWRlcl9kZWZzOjp0eXBlX2JpdHMgfCBzb2wzX2N1c3RvbWVyX3R5cGU6Ol9yaWQpIH07CgogIHNv bDNfY3VzdG9tZXJfYnlfaWRfdHlwZSgpIHt9CiAgc3RhdGljIGluZGV4X3R5cGUgY29uc3QgJmRl c2MoKSB7IHJldHVybiBpZF9zb2wzX2N1c3RvbWVyX2J5X2lkOyB9CiAgdm9pZCBpbml0KCkgeyBp bml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfbm9kZV9pZF90eXBlIG5vZGU7CiAg c29sM19hdXRvX2lkX3R5cGUgaWQ7Cn07CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25zdCBpZF9z b2wzX2N1c3RvbWVyX2J5X25hbWU7CgpzdHJ1Y3Qgc29sM19jdXN0b21lcl9ieV9uYW1lX3R5cGUK ICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0gKHNvbDNfY3VzdG9t ZXJfdHlwZTo6aWlkX2J5X25hbWUgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2Jp dHMgfCBzb2wzX2N1c3RvbWVyX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfY3VzdG9tZXJfYnlfbmFt ZV90eXBlKCkge30KICBzdGF0aWMgaW5kZXhfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIGlk X3NvbDNfY3VzdG9tZXJfYnlfbmFtZTsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVz YygpLCB0aGlzKTsgfQoKICBzb2wzX2xhc3RfbmFtZV90eXBlIGxhc3RfbmFtZTsKICBzb2wzX2Zp cnN0X25hbWVfdHlwZSBmaXJzdF9uYW1lOwogIHNvbDNfb3JnYW5pemF0aW9uX3R5cGUgb3JnYW5p emF0aW9uOwp9OwoKCgoKZXh0ZXJuIGluZGV4X3R5cGUgY29uc3QgaWRfc29sM19jdXN0b21lcl9i eV9vcmdhbml6YXRpb247CgpzdHJ1Y3Qgc29sM19jdXN0b21lcl9ieV9vcmdhbml6YXRpb25fdHlw ZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19jdXN0 b21lcl90eXBlOjppaWRfYnlfb3JnYW5pemF0aW9uICsgMSA8PCBzZW50ZW5jZV9oZWFkZXJfZGVm czo6dHlwZV9iaXRzIHwgc29sM19jdXN0b21lcl90eXBlOjpfcmlkKSB9OwoKICBzb2wzX2N1c3Rv bWVyX2J5X29yZ2FuaXphdGlvbl90eXBlKCkge30KICBzdGF0aWMgaW5kZXhfdHlwZSBjb25zdCAm ZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfY3VzdG9tZXJfYnlfb3JnYW5pemF0aW9uOyB9CiAgdm9p ZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfb3JnYW5pemF0 aW9uX3R5cGUgb3JnYW5pemF0aW9uOwogIHNvbDNfbGFzdF9uYW1lX3R5cGUgbGFzdF9uYW1lOwog IHNvbDNfZmlyc3RfbmFtZV90eXBlIGZpcnN0X25hbWU7Cn07CgoKdHlwZWRlZiBzdHJ1Y3Qgc29s M191bmlxdWVfaWRfdHlwZSBzb2wzX2N1c3RvbWVyX2lkX3R5cGU7CmV4dGVybiBmaWVsZF90eXBl IGNvbnN0IGZkX3NvbDNfY3VzdG9tZXJfaWQ7Cgp0eXBlZGVmIGNoYXJfdHlwZSBzb2wzX2FjY291 bnRfdHlwZV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2FjY291bnRfdHlw ZTsKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2FjY291bnQ7CgpzdHJ1Y3Qg c29sM19hY2NvdW50X3R5cGUKICA6IHB1YmxpYyBzb2wzX2NvbnRyb2xsZWRfdHlwZQp7CiAgZW51 bSB7IF9yaWQgPSByaWRfc29sM19hY2NvdW50IH07CiAgZW51bSB7CiAgICBpaWRfYnlfaWQsCiAg ICBpaWRfYnlfbmFtZSwKICAgIGlpZF9ieV9leGNoYW5nZSwKICAgIGlpZF9ieV9jdXN0b21lciwK ICAgIGlpZF9ieV90eXBlLAogICAgaWlkX19tYXggfTsKICBzb2wzX2FjY291bnRfdHlwZSgpIHt9 CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19hY2Nv dW50OyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNv bDNfYWNjb3VudF90eXBlX3R5cGUgdHlwZTsKICBzb2wzX2JpdF9tYXNrXzhfdHlwZSBmbGFnczsK ICBzb2wzX2N1c3RvbWVyX2lkX3R5cGUgY3VzdG9tZXI7CiAgc29sM19uYW1lX3R5cGUgbmFtZTsK ICBzb2wzX2V4Y2hhbmdlX2lkX3R5cGUgZXhjaGFuZ2U7CiAgc29sM190ZXh0X3R5cGUgdGV4dDsK fTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FjY291bnRfbWVtYmVyX3R5cGU7CmV4 dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FjY291bnRfbWVtYmVyX2ZsYWdzOwpleHRlcm4g bWVtYmVyX3R5cGUgY29uc3Qgc29sM19hY2NvdW50X21lbWJlcl9jdXN0b21lcjsKZXh0ZXJuIG1l bWJlcl90eXBlIGNvbnN0IHNvbDNfYWNjb3VudF9tZW1iZXJfbmFtZTsKZXh0ZXJuIG1lbWJlcl90 eXBlIGNvbnN0IHNvbDNfYWNjb3VudF9tZW1iZXJfZXhjaGFuZ2U7CmV4dGVybiBtZW1iZXJfdHlw ZSBjb25zdCBzb2wzX2FjY291bnRfbWVtYmVyX3RleHQ7CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBj b25zdCBpZF9zb2wzX2FjY291bnRfYnlfaWQ7CgpzdHJ1Y3Qgc29sM19hY2NvdW50X2J5X2lkX3R5 cGUKICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0gKHNvbDNfYWNj b3VudF90eXBlOjppaWRfYnlfaWQgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2Jp dHMgfCBzb2wzX2FjY291bnRfdHlwZTo6X3JpZCkgfTsKCiAgc29sM19hY2NvdW50X2J5X2lkX3R5 cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gaWRfc29s M19hY2NvdW50X2J5X2lkOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRo aXMpOyB9CgogIHNvbDNfbm9kZV9pZF90eXBlIG5vZGU7CiAgc29sM19hdXRvX2lkX3R5cGUgaWQ7 Cn07CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25zdCBpZF9zb2wzX2FjY291bnRfYnlfbmFtZTsK CnN0cnVjdCBzb2wzX2FjY291bnRfYnlfbmFtZV90eXBlCiAgOiBwdWJsaWMgaW5kZXhfYmFzZV90 eXBlCnsKICBlbnVtIHsgX3JpZCA9IChzb2wzX2FjY291bnRfdHlwZTo6aWlkX2J5X25hbWUgKyAx IDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2JpdHMgfCBzb2wzX2FjY291bnRfdHlwZTo6 X3JpZCkgfTsKCiAgc29sM19hY2NvdW50X2J5X25hbWVfdHlwZSgpIHt9CiAgc3RhdGljIGluZGV4 X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiBpZF9zb2wzX2FjY291bnRfYnlfbmFtZTsgfQog IHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX25hbWVf dHlwZSBuYW1lOwogIHNvbDNfYWNjb3VudF90eXBlX3R5cGUgdHlwZTsKICBzb2wzX2V4Y2hhbmdl X2lkX3R5cGUgZXhjaGFuZ2U7Cn07CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25zdCBpZF9zb2wz X2FjY291bnRfYnlfZXhjaGFuZ2U7CgpzdHJ1Y3Qgc29sM19hY2NvdW50X2J5X2V4Y2hhbmdlX3R5 cGUKICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0gKHNvbDNfYWNj b3VudF90eXBlOjppaWRfYnlfZXhjaGFuZ2UgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0 eXBlX2JpdHMgfCBzb2wzX2FjY291bnRfdHlwZTo6X3JpZCkgfTsKCiAgc29sM19hY2NvdW50X2J5 X2V4Y2hhbmdlX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNjKCkgeyBy ZXR1cm4gaWRfc29sM19hY2NvdW50X2J5X2V4Y2hhbmdlOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0 aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfZXhjaGFuZ2VfaWRfdHlwZSBleGNoYW5n ZTsKICBzb2wzX25hbWVfdHlwZSBuYW1lOwogIHNvbDNfYWNjb3VudF90eXBlX3R5cGUgdHlwZTsK fTsKCgoKCmV4dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfYWNjb3VudF9ieV9jdXN0b21l cjsKCnN0cnVjdCBzb2wzX2FjY291bnRfYnlfY3VzdG9tZXJfdHlwZQogIDogcHVibGljIGluZGV4 X2Jhc2VfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19hY2NvdW50X3R5cGU6OmlpZF9ieV9j dXN0b21lciArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfYWNj b3VudF90eXBlOjpfcmlkKSB9OwoKICBzb2wzX2FjY291bnRfYnlfY3VzdG9tZXJfdHlwZSgpIHt9 CiAgc3RhdGljIGluZGV4X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiBpZF9zb2wzX2FjY291 bnRfYnlfY3VzdG9tZXI7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhp cyk7IH0KCiAgc29sM19jdXN0b21lcl9pZF90eXBlIGN1c3RvbWVyOwp9OwoKCgoKZXh0ZXJuIGlu ZGV4X3R5cGUgY29uc3QgaWRfc29sM19hY2NvdW50X2J5X3R5cGU7CgpzdHJ1Y3Qgc29sM19hY2Nv dW50X2J5X3R5cGVfdHlwZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlwZQp7CiAgZW51bSB7IF9y aWQgPSAoc29sM19hY2NvdW50X3R5cGU6OmlpZF9ieV90eXBlICsgMSA8PCBzZW50ZW5jZV9oZWFk ZXJfZGVmczo6dHlwZV9iaXRzIHwgc29sM19hY2NvdW50X3R5cGU6Ol9yaWQpIH07CgogIHNvbDNf YWNjb3VudF9ieV90eXBlX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNj KCkgeyByZXR1cm4gaWRfc29sM19hY2NvdW50X2J5X3R5cGU7IH0KICB2b2lkIGluaXQoKSB7IGlu aXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19hY2NvdW50X3R5cGVfdHlwZSB0eXBl OwogIHNvbDNfZXhjaGFuZ2VfaWRfdHlwZSBleGNoYW5nZTsKICBzb2wzX25hbWVfdHlwZSBuYW1l Owp9OwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX3JlZ2lzdGVyX3hjaGdp ZjsKCnN0cnVjdCBzb2wzX3JlZ2lzdGVyX3hjaGdpZl90eXBlCnsKICBlbnVtIHsgX3JpZCA9IHJp ZF9zb2wzX3JlZ2lzdGVyX3hjaGdpZiB9OwogIGVudW0gewogICAgaWlkX2J5X2V4Y2hhbmdlLAog ICAgaWlkX2J5X3BhcnRuZXIsCiAgICBpaWRfX21heCB9OwogIHNvbDNfcmVnaXN0ZXJfeGNoZ2lm X3R5cGUoKSB7fQogIHN0YXRpYyByZWNvcmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIHJk X3NvbDNfcmVnaXN0ZXJfeGNoZ2lmOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNj KCksIHRoaXMpOyB9CgogIHNvbDNfZXhjaGFuZ2VfaWRfdHlwZSBleGNoYW5nZTsKICBzb2wzX2Jp dF9tYXNrXzMyX3R5cGUgZnVuY3Rpb25zOwogIHNvbDNfbmV0X3BhcnRuZXJfaWRfdHlwZSBwYXJ0 bmVyX2lkOwp9OwoKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfcmVnaXN0ZXJfeGNoZ2lm X21lbWJlcl9leGNoYW5nZTsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfcmVnaXN0ZXJf eGNoZ2lmX21lbWJlcl9mdW5jdGlvbnM7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3Jl Z2lzdGVyX3hjaGdpZl9tZW1iZXJfcGFydG5lcl9pZDsKCgoKCmV4dGVybiBpbmRleF90eXBlIGNv bnN0IGlkX3NvbDNfcmVnaXN0ZXJfeGNoZ2lmX2J5X2V4Y2hhbmdlOwoKc3RydWN0IHNvbDNfcmVn aXN0ZXJfeGNoZ2lmX2J5X2V4Y2hhbmdlX3R5cGUKICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUK ewogIGVudW0geyBfcmlkID0gKHNvbDNfcmVnaXN0ZXJfeGNoZ2lmX3R5cGU6OmlpZF9ieV9leGNo YW5nZSArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfcmVnaXN0 ZXJfeGNoZ2lmX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfcmVnaXN0ZXJfeGNoZ2lmX2J5X2V4Y2hh bmdlX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4g aWRfc29sM19yZWdpc3Rlcl94Y2hnaWZfYnlfZXhjaGFuZ2U7IH0KICB2b2lkIGluaXQoKSB7IGlu aXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19leGNoYW5nZV9pZF90eXBlIGV4Y2hh bmdlOwogIHNvbDNfYml0X21hc2tfMzJfdHlwZSBmdW5jdGlvbnM7Cn07CgoKCgpleHRlcm4gaW5k ZXhfdHlwZSBjb25zdCBpZF9zb2wzX3JlZ2lzdGVyX3hjaGdpZl9ieV9wYXJ0bmVyOwoKc3RydWN0 IHNvbDNfcmVnaXN0ZXJfeGNoZ2lmX2J5X3BhcnRuZXJfdHlwZQogIDogcHVibGljIGluZGV4X2Jh c2VfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19yZWdpc3Rlcl94Y2hnaWZfdHlwZTo6aWlk X2J5X3BhcnRuZXIgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2JpdHMgfCBzb2wz X3JlZ2lzdGVyX3hjaGdpZl90eXBlOjpfcmlkKSB9OwoKICBzb2wzX3JlZ2lzdGVyX3hjaGdpZl9i eV9wYXJ0bmVyX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNjKCkgeyBy ZXR1cm4gaWRfc29sM19yZWdpc3Rlcl94Y2hnaWZfYnlfcGFydG5lcjsgfQogIHZvaWQgaW5pdCgp IHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX25ldF9wYXJ0bmVyX2lkX3R5 cGUgcGFydG5lcl9pZDsKfTsKCgp0eXBlZGVmIHN0cmZpeF90eXBlPDEyPiBzb2wzX29yZGVyX3Jv dXRlcl9uYW1lX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfb3JkZXJfcm91 dGVyX25hbWU7CgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM19yZWdpc3Rlcl9v ZHJwZHI7CgpzdHJ1Y3Qgc29sM19yZWdpc3Rlcl9vZHJwZHJfdHlwZQp7CiAgZW51bSB7IF9yaWQg PSByaWRfc29sM19yZWdpc3Rlcl9vZHJwZHIgfTsKICBlbnVtIHsKICAgIGlpZF9ieV9wcm92aWRl ciwKICAgIGlpZF9fbWF4IH07CiAgc29sM19yZWdpc3Rlcl9vZHJwZHJfdHlwZSgpIHt9CiAgc3Rh dGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19yZWdpc3Rlcl9v ZHJwZHI7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAg c29sM19vcmRlcl9yb3V0ZXJfbmFtZV90eXBlIHByb3ZpZGVyX25hbWU7CiAgc29sM19uZXRfcGFy dG5lcl9pZF90eXBlIHBhcnRuZXJfaWQ7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29s M19yZWdpc3Rlcl9vZHJwZHJfbWVtYmVyX3Byb3ZpZGVyX25hbWU7CmV4dGVybiBtZW1iZXJfdHlw ZSBjb25zdCBzb2wzX3JlZ2lzdGVyX29kcnBkcl9tZW1iZXJfcGFydG5lcl9pZDsKCgoKCmV4dGVy biBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfcmVnaXN0ZXJfb2RycGRyX2J5X3Byb3ZpZGVyOwoK c3RydWN0IHNvbDNfcmVnaXN0ZXJfb2RycGRyX2J5X3Byb3ZpZGVyX3R5cGUKICA6IHB1YmxpYyBp bmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0gKHNvbDNfcmVnaXN0ZXJfb2RycGRyX3R5 cGU6OmlpZF9ieV9wcm92aWRlciArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0 cyB8IHNvbDNfcmVnaXN0ZXJfb2RycGRyX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfcmVnaXN0ZXJf b2RycGRyX2J5X3Byb3ZpZGVyX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZk ZXNjKCkgeyByZXR1cm4gaWRfc29sM19yZWdpc3Rlcl9vZHJwZHJfYnlfcHJvdmlkZXI7IH0KICB2 b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19vcmRlcl9y b3V0ZXJfbmFtZV90eXBlIHByb3ZpZGVyX25hbWU7Cn07CgoKdHlwZWRlZiBzdHJ1Y3Qgc29sM191 bmlxdWVfaWRfdHlwZSBzb2wzX3RyYWRlcl9pZF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25z dCBmZF9zb2wzX3RyYWRlcl9pZDsKCnR5cGVkZWYgc3RyZml4X3R5cGU8MzI+IHNvbDNfZXhjaGFu Z2VfdHJhZGVyX25hbWVfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19leGNo YW5nZV90cmFkZXJfbmFtZTsKCnR5cGVkZWYgc3RyZml4X3R5cGU8MzI+IHNvbDNfZXhjaGFuZ2Vf dHJhZGVyX3Bhc3N3b3JkX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfZXhj aGFuZ2VfdHJhZGVyX3Bhc3N3b3JkOwoKCgoKZXh0ZXJuIHJlY29yZF90eXBlIGNvbnN0IHJkX3Nv bDNfdHJhZGVyOwoKc3RydWN0IHNvbDNfdHJhZGVyX3R5cGUKICA6IHB1YmxpYyBzb2wzX2NvbnRy b2xsZWRfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM190cmFkZXIgfTsKICBlbnVtIHsK ICAgIGlpZF9ieV9pZCwKICAgIGlpZF9ieV9uYW1lLAogICAgaWlkX19tYXggfTsKICBzb2wzX3Ry YWRlcl90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVy biByZF9zb2wzX3RyYWRlcjsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0 aGlzKTsgfQoKICBzb2wzX2V4Y2hhbmdlX2lkX3R5cGUgZXhjaGFuZ2U7CiAgc29sM19leGNoYW5n ZV90cmFkZXJfbmFtZV90eXBlIHRyYWRlcl9uYW1lOwogIHNvbDNfZXhjaGFuZ2VfdHJhZGVyX3Bh c3N3b3JkX3R5cGUgZXhjaGFuZ2VfcGFzc3dvcmQ7CiAgc29sM190ZXh0X3R5cGUgdGV4dDsKfTsK CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3RyYWRlcl9tZW1iZXJfZXhjaGFuZ2U7CmV4 dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3RyYWRlcl9tZW1iZXJfdHJhZGVyX25hbWU7CmV4 dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3RyYWRlcl9tZW1iZXJfZXhjaGFuZ2VfcGFzc3dv cmQ7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3RyYWRlcl9tZW1iZXJfdGV4dDsKCgoK CmV4dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfdHJhZGVyX2J5X2lkOwoKc3RydWN0IHNv bDNfdHJhZGVyX2J5X2lkX3R5cGUKICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUKewogIGVudW0g eyBfcmlkID0gKHNvbDNfdHJhZGVyX3R5cGU6OmlpZF9ieV9pZCArIDEgPDwgc2VudGVuY2VfaGVh ZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfdHJhZGVyX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNf dHJhZGVyX2J5X2lkX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNjKCkg eyByZXR1cm4gaWRfc29sM190cmFkZXJfYnlfaWQ7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxp emUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19ub2RlX2lkX3R5cGUgbm9kZTsKICBzb2wzX2F1 dG9faWRfdHlwZSBpZDsKfTsKCgoKCmV4dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfdHJh ZGVyX2J5X25hbWU7CgpzdHJ1Y3Qgc29sM190cmFkZXJfYnlfbmFtZV90eXBlCiAgOiBwdWJsaWMg aW5kZXhfYmFzZV90eXBlCnsKICBlbnVtIHsgX3JpZCA9IChzb2wzX3RyYWRlcl90eXBlOjppaWRf YnlfbmFtZSArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfdHJh ZGVyX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfdHJhZGVyX2J5X25hbWVfdHlwZSgpIHt9CiAgc3Rh dGljIGluZGV4X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiBpZF9zb2wzX3RyYWRlcl9ieV9u YW1lOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNv bDNfZXhjaGFuZ2VfaWRfdHlwZSBleGNoYW5nZTsKICBzb2wzX2V4Y2hhbmdlX3RyYWRlcl9uYW1l X3R5cGUgdHJhZGVyX25hbWU7Cn07CgoKCgoKZXh0ZXJuIHJlY29yZF90eXBlIGNvbnN0IHJkX3Nv bDNfcGFpcjsKCnN0cnVjdCBzb2wzX3BhaXJfdHlwZQogIDogcHVibGljIHNvbDNfY29udHJvbGxl ZF90eXBlCnsKICBlbnVtIHsgX3JpZCA9IHJpZF9zb2wzX3BhaXIgfTsKICBlbnVtIHsKICAgIGlp ZF9ieV9pZCwKICAgIGlpZF9ieV8xc3QsCiAgICBpaWRfYnlfMm5kLAogICAgaWlkX2J5X3R5cGVz LAogICAgaWlkX19tYXggfTsKICBzb2wzX3BhaXJfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90 eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19wYWlyOyB9CiAgdm9pZCBpbml0KCkg eyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfdHlwZV9pZF90eXBlIHR5cGVf MTsKICBzb2wzX25vZGVfaWRfdHlwZSBub2RlXzE7CiAgc29sM19sb2NhbF9pZF90eXBlIGlkXzE7 CiAgc29sM190eXBlX2lkX3R5cGUgdHlwZV8yOwogIHNvbDNfbm9kZV9pZF90eXBlIG5vZGVfMjsK ICBzb2wzX2xvY2FsX2lkX3R5cGUgaWRfMjsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBz b2wzX3BhaXJfbWVtYmVyX3R5cGVfMTsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfcGFp cl9tZW1iZXJfbm9kZV8xOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19wYWlyX21lbWJl cl9pZF8xOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19wYWlyX21lbWJlcl90eXBlXzI7 CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3BhaXJfbWVtYmVyX25vZGVfMjsKZXh0ZXJu IG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfcGFpcl9tZW1iZXJfaWRfMjsKCgoKCmV4dGVybiBpbmRl eF90eXBlIGNvbnN0IGlkX3NvbDNfcGFpcl9ieV9pZDsKCnN0cnVjdCBzb2wzX3BhaXJfYnlfaWRf dHlwZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19w YWlyX3R5cGU6OmlpZF9ieV9pZCArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0 cyB8IHNvbDNfcGFpcl90eXBlOjpfcmlkKSB9OwoKICBzb2wzX3BhaXJfYnlfaWRfdHlwZSgpIHt9 CiAgc3RhdGljIGluZGV4X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiBpZF9zb2wzX3BhaXJf YnlfaWQ7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAg c29sM19ub2RlX2lkX3R5cGUgbm9kZTsKICBzb2wzX2F1dG9faWRfdHlwZSBpZDsKfTsKCgoKCmV4 dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfcGFpcl9ieV8xc3Q7CgpzdHJ1Y3Qgc29sM19w YWlyX2J5XzFzdF90eXBlCiAgOiBwdWJsaWMgaW5kZXhfYmFzZV90eXBlCnsKICBlbnVtIHsgX3Jp ZCA9IChzb2wzX3BhaXJfdHlwZTo6aWlkX2J5XzFzdCArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2Rl ZnM6OnR5cGVfYml0cyB8IHNvbDNfcGFpcl90eXBlOjpfcmlkKSB9OwoKICBzb2wzX3BhaXJfYnlf MXN0X3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4g aWRfc29sM19wYWlyX2J5XzFzdDsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygp LCB0aGlzKTsgfQoKICBzb2wzX3R5cGVfaWRfdHlwZSB0eXBlXzE7CiAgc29sM19ub2RlX2lkX3R5 cGUgbm9kZV8xOwogIHNvbDNfbG9jYWxfaWRfdHlwZSBpZF8xOwogIHNvbDNfdHlwZV9pZF90eXBl IHR5cGVfMjsKICBzb2wzX25vZGVfaWRfdHlwZSBub2RlXzI7CiAgc29sM19sb2NhbF9pZF90eXBl IGlkXzI7Cn07CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25zdCBpZF9zb2wzX3BhaXJfYnlfMm5k OwoKc3RydWN0IHNvbDNfcGFpcl9ieV8ybmRfdHlwZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlw ZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19wYWlyX3R5cGU6OmlpZF9ieV8ybmQgKyAxIDw8IHNl bnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2JpdHMgfCBzb2wzX3BhaXJfdHlwZTo6X3JpZCkgfTsK CiAgc29sM19wYWlyX2J5XzJuZF90eXBlKCkge30KICBzdGF0aWMgaW5kZXhfdHlwZSBjb25zdCAm ZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfcGFpcl9ieV8ybmQ7IH0KICB2b2lkIGluaXQoKSB7IGlu aXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM190eXBlX2lkX3R5cGUgdHlwZV8yOwog IHNvbDNfbm9kZV9pZF90eXBlIG5vZGVfMjsKICBzb2wzX2xvY2FsX2lkX3R5cGUgaWRfMjsKICBz b2wzX3R5cGVfaWRfdHlwZSB0eXBlXzE7CiAgc29sM19ub2RlX2lkX3R5cGUgbm9kZV8xOwogIHNv bDNfbG9jYWxfaWRfdHlwZSBpZF8xOwp9OwoKCgoKZXh0ZXJuIGluZGV4X3R5cGUgY29uc3QgaWRf c29sM19wYWlyX2J5X3R5cGVzOwoKc3RydWN0IHNvbDNfcGFpcl9ieV90eXBlc190eXBlCiAgOiBw dWJsaWMgaW5kZXhfYmFzZV90eXBlCnsKICBlbnVtIHsgX3JpZCA9IChzb2wzX3BhaXJfdHlwZTo6 aWlkX2J5X3R5cGVzICsgMSA8PCBzZW50ZW5jZV9oZWFkZXJfZGVmczo6dHlwZV9iaXRzIHwgc29s M19wYWlyX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfcGFpcl9ieV90eXBlc190eXBlKCkge30KICBz dGF0aWMgaW5kZXhfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfcGFpcl9ieV90 eXBlczsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBz b2wzX3R5cGVfaWRfdHlwZSB0eXBlXzE7CiAgc29sM190eXBlX2lkX3R5cGUgdHlwZV8yOwogIHNv bDNfbm9kZV9pZF90eXBlIG5vZGVfMTsKICBzb2wzX2xvY2FsX2lkX3R5cGUgaWRfMTsKICBzb2wz X25vZGVfaWRfdHlwZSBub2RlXzI7CiAgc29sM19sb2NhbF9pZF90eXBlIGlkXzI7Cn07CgoKZXh0 ZXJuIGxpbmdvX3R5cGUgY29uc3Qgc29sM19saW5nbzsKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBU PiBpbmxpbmUgVCBjb25zdCAmbm9fb3AgKFQgY29uc3QgJnQpIHsKICByZXR1cm4gdDsgfQp0ZW1w bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgY29uc3QgJk1pbiAoVCBjb25zdCAmYSwgVCBjb25zdCAm YikgewogIHJldHVybiBhIDwgYiA/IGEgOiBiOyB9CnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUg VCBjb25zdCAmTWF4IChUIGNvbnN0ICZhLCBUIGNvbnN0ICZiKSB7CiAgcmV0dXJuIGEgPiBiID8g YSA6IGI7IH0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZCBTd2FwIChUICZhLCBUICZi KSB7CiAgVCBjID0gYjsgYiA9IGE7IGEgPSBjOyB9CnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUg VCAqaW5jcmVtZW50ZWQgKFQgKmEsIGludCBuKSB7CiAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8 VCAqPiAocmVpbnRlcnByZXRfY2FzdDxjaGFyICo+IChhKSArIG4pOyB9CnRlbXBsYXRlIDxjbGFz cyBUPiBpbmxpbmUgVCBjb25zdCAqaW5jcmVtZW50ZWQgKFQgY29uc3QgKmEsIGludCBuKSB7CiAg cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCBjb25zdCAqPiAocmVpbnRlcnByZXRfY2FzdDxjaGFy IGNvbnN0ICo+IChhKSArIG4pOyB9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBpbml0 aWFsaXplZCA6IHB1YmxpYyBUCnsKICBpbml0aWFsaXplZCgpIHsKICAgIDo6aW5pdGlhbGl6ZSAo VDo6X2Rlc2MsIHRoaXMpOyB9CgogIGluaXRpYWxpemVkICZvcGVyYXRvcj0gKFQgY29uc3QgJnQp IHsKICAgICpzdGF0aWNfY2FzdDxUICo+ICh0aGlzKSA9IHQ7IHJldHVybiAqdGhpczsgfQp9OwoK CgoKCnZvaWQgcmFuZG9tX3NhbHQgKHNvbDNfc2FsdF90eXBlIHB3ZF9oYXNoKSBfX2F0dHJpYnV0 ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKdm9pZCBoYXNoX3Bhc3N3b3JkIChj aGFyIGNvbnN0ICpwYXNzd29yZCwKICAgICAgICAgICAgICAgICAgICBzb2wzX3NhbHRfdHlwZSBj b25zdCBwd2Rfc2FsdCwKICAgICAgICAgICAgICAgICAgICBzb2wzX2hhc2hfdHlwZSBwd2RfaGFz aCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKCgplbnVt IGxpY2Vuc2Vfb3BfZW51bQp7CiAgbGljZW5zZV9vcF9lbnVtZXJhdGUgPSAnRScsCiAgbGljZW5z ZV9vcF9pbnF1aXJlID0gJ0knLAogIGxpY2Vuc2Vfb3BfYWNxdWlyZSA9ICdBJywKICBsaWNlbnNl X29wX3JlbGVhc2UgPSAnUicKfTsKCmVudW0gbGljZW5zZV9mZWF0dXJlX2VudW0KewogIGZlYXR1 cmVfY2xpZW50LAogIGZlYXR1cmVfc2NyaXB0LAogIGZlYXR1cmVfZXVyZXgsCiAgZmVhdHVyZV94 ZXRyYSwKICBmZWF0dXJlX2FnZW50LAogIGZlYXR1cmVfcXVvdGUsCiAgZmVhdHVyZV9lZXllLAog IGZlYXR1cmVfdHJhaW5lciwKICBmZWF0dXJlX25vX3N1Y2gKfTsKCmV4dGVybiBjaGFyIGNvbnN0 IGZlYXR1cmVfbmFtZVtdWzhdOwpsaWNlbnNlX2ZlYXR1cmVfZW51bSBsaWNlbnNlX2ZlYXR1cmVf aWQgKGNoYXIgY29uc3QgKikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxs X18pKTsKCgoKCgp2b2lkIGNvbWJpbmVfcGFzc3dvcmQgKHNvbDNfaGFzaF90eXBlIGNvbnN0IGhh c2gsCiAgICAgICAgICAgICAgICAgICAgICAgc29sM19zYWx0X3R5cGUgY29uc3Qgc2FsdCwKICAg ICAgICAgICAgICAgICAgICAgICBzb2wzX3Bhc3N3b3JkX3R5cGUgJnB3ZCkgX19hdHRyaWJ1dGVf XygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCnZvaWQgc3BsaXRfcGFzc3dvcmQgKHNv bDNfcGFzc3dvcmRfdHlwZSBjb25zdCAmcHdkLAogICAgICAgICAgICAgICAgICAgICBzb2wzX2hh c2hfdHlwZSBoYXNoLAogICAgICAgICAgICAgICAgICAgICBzb2wzX3NhbHRfdHlwZSBzYWx0KSBf X2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKdm9pZCBzZXRfcGFz c3dvcmQgKGNoYXIgY29uc3QgKnBhc3N3b3JkLAogICAgICAgICAgICAgICAgICAgc29sM19zYWx0 X3R5cGUgY29uc3Qgc2FsdCwKICAgICAgICAgICAgICAgICAgIHNvbDNfcGFzc3dvcmRfdHlwZSAm cHdkKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKdm9pZCBz ZXRfcGFzc3dvcmQgKGNoYXIgY29uc3QgKnBhc3N3b3JkLAogICAgICAgICAgICAgICAgICAgc29s M19wYXNzd29yZF90eXBlICZwd2QpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3Rk Y2FsbF9fKSk7CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKYm9vbCBpc19zZXQgKFQg Y29uc3QgJnQpIHsKICByZXR1cm4gIXQuaXNfbnVsbCgpICYmIHQoKSAhPSAwOyB9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4gaW5saW5lCmJvb2wgaXNfdWlkIChUIGNvbnN0ICZ0KSB7CiAgcmV0dXJuICF0 Lm5vZGUuaXNfbnVsbCgpICYmIGlzX3NldCAodC5pZCk7IH0KCnRlbXBsYXRlIDxjbGFzcyBUPiBp bmxpbmUKYm9vbCBpc19naWQgKFQgY29uc3QgJmcpIHsKICByZXR1cm4gaXNfc2V0ICh0LnR5cGUp ICYmICF0Lm5vZGUuaXNfbnVsbCgpICYmIGlzX3NldCAodC5pZCk7IH0KCnRlbXBsYXRlIDxjbGFz cyBUMSwgY2xhc3MgVDI+IGlubGluZQpib29sIHVpZF9lcSAoVDEgY29uc3QgJmEsIFQyIGNvbnN0 ICZiKSB7CiAgcmV0dXJuIGEuaWQoKSA9PSBiLmlkKCkgJiYgYS5ub2RlKCkgPT0gYi5ub2RlKCk7 IH0KCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+IGlubGluZQp2b2lkIGFzc2lnbl91aWQg KFQxICZhLCBUMiBjb25zdCAmYikgewogIGEubm9kZSA9IGIubm9kZTsgYS5pZCA9IGIuaWQ7IH0K CnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKYm9vbCBnaWRfZXEgKHNvbDNfZ2xvYmFsX2lkX3R5 cGUgY29uc3QgJmEsIFQgY29uc3QgJmIpIHsKICByZXR1cm4gYS5pZCgpID09IGIuaWQoKSAmJiBh Lm5vZGUoKSA9PSBiLm5vZGUoKSAmJiBhLnR5cGUoKSA9PSBiLl9yaWQ7IH0KCnRlbXBsYXRlIDw+ IGlubGluZQpib29sIGdpZF9lcTxzb2wzX2dsb2JhbF9pZF90eXBlPiAoc29sM19nbG9iYWxfaWRf dHlwZSBjb25zdCAmYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbDNfZ2xv YmFsX2lkX3R5cGUgY29uc3QgJmIpIHsKICByZXR1cm4gYS5pZCgpID09IGIuaWQoKSAmJiBhLm5v ZGUoKSA9PSBiLm5vZGUoKSAmJiBhLnR5cGUoKSA9PSBiLnR5cGUoKTsgfQoKdGVtcGxhdGUgPGNs YXNzIFQxLCBjbGFzcyBUMj4gaW5saW5lCnZvaWQgYXNzaWduX2dpZCAoVDEgJmEsIFQyIGNvbnN0 ICZiKSB7CiAgYS50eXBlID0gYi50eXBlOyBhLm5vZGUgPSBiLm5vZGU7IGEuaWQgPSBiLmlkOyB9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPiBpbmxpbmUKdm9pZCBnaWRfZnJvbV91aWQg KFQxICZhLCBUMiBjb25zdCAmYikgewogIGEudHlwZSA9IGIuX3JpZDsgYS5ub2RlID0gYi5ub2Rl OyBhLmlkID0gYi5pZDsgfQoKCmJvb2wgaXNfdW5pcXVlX2lkX2luZGV4IChpbmRleF90eXBlIGNv bnN0ICZpbmRleCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsK Ym9vbCBoYXNfdW5pcXVlX2FzX3ByaW1hcnkgKHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKSBfX2F0 dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwpib29sIGxvY2F0ZV91bmlx dWVfaWQgKHJlY29yZF90eXBlIGNvbnN0ICZkZXNjLAogICAgICAgICAgICAgICAgICAgICAgIHZv aWQgY29uc3QgKnJlY29yZCwKICAgICAgICAgICAgICAgICAgICAgICBzb2wzX3VuaXF1ZV90eXBl IGNvbnN0IComdW5pcXVlKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxf XykpOwppbmxpbmUgYm9vbCBsb2NhdGVfdW5pcXVlX2lkIChyZWNvcmRfdHlwZSBjb25zdCAmZGVz YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmVjb3JkLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzb2wzX3VuaXF1ZV90eXBlIComdW5pcXVlKSB7CiAgcmV0dXJu IGxvY2F0ZV91bmlxdWVfaWQgKGRlc2MsIHJlY29yZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3RfY2FzdDxzb2wzX3VuaXF1ZV90eXBlIGNvbnN0IComPiAodW5pcXVlKSk7IH0KCgoK CgplbnVtIHNvbDNfaW50ZXJmYWNlX2Z1bmN0aW9uc19lbnVtCnsKCiAgaW50ZXJmYWNlX2Z1bmN0 aW9uX21hcmtldHMgPSAxIDw8IDAsCiAgaW50ZXJmYWNlX2Z1bmN0aW9uX3RyYWRlcyA9IDEgPDwg MSwKICBpbnRlcmZhY2VfZnVuY3Rpb25fb3JkZXIgPSAxIDw8IDIsCiAgaW50ZXJmYWNlX2Z1bmN0 aW9uX3F1b3RlID0gMSA8PCAzCn07Cgp2b2lkIGludGVyZmFjZV9mdW5jdGlvbnNfdG9fc3RyaW5n ICh1bnNpZ25lZCBmdW5jdGlvbnNfbWFzaywgY2hhciAqLCB1bnNpZ25lZCk7CgoKCgoKZW51bSBz b2wzX3F1YWxpdHlfZW51bQp7CiAgc29sM19xdWFsaXR5X2EgPSAnQScsCiAgc29sM19xdWFsaXR5 X2IgPSAnQicsCiAgc29sM19xdWFsaXR5X2MgPSAnQycKfTsKCgoKCgoKCmVudW0gc29sM19hY2Nl c3NfYml0c19lbnVtCnsKICBvd25lcl9hY2Nlc3NfcmVhZCA9IDEgPDwgMSwKICBvd25lcl9hY2Nl c3Nfd3JpdGUgPSAxIDw8IDIsCgogIGdyb3VwX2FjY2Vzc19yZWFkID0gMSA8PCA0LAogIGdyb3Vw X2FjY2Vzc193cml0ZSA9IDEgPDwgNSwKCiAgd29ybGRfYWNjZXNzX3JlYWQgPSAxIDw8IDcsCiAg d29ybGRfYWNjZXNzX3dyaXRlID0gMSA8PCA4LAoKICBhY2Nlc3NfcndfcndfcncgPSAob3duZXJf YWNjZXNzX3JlYWQgfCBvd25lcl9hY2Nlc3Nfd3JpdGUgfAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdyb3VwX2FjY2Vzc19yZWFkIHwgZ3JvdXBfYWNjZXNzX3dyaXRlIHwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZF9hY2Nlc3NfcmVhZCB8IHdvcmxk X2FjY2Vzc193cml0ZSkKfTsKCgoKCgoKZW51bSBzb2wzX3ByaXZpbGVnZXNfYml0c19lbnVtCnsK CiAgcHJpdl9sb2dpbiA9IDEgPDwgMCwKCgogIHByaXZfb3duX3Bhc3N3b3JkX2NoYW5nZSA9IDEg PDwgMSwKCgogIHByaXZfb3duX3VzZXJfY2hhbmdlID0gMSA8PCAyLAoKCiAgcHJpdl9hZGRfYWNj b3VudCA9IDEgPDwgMywKCgogIHByaXZfZ3JvdXBfYWNjb3VudCA9IDEgPDwgNCwKCgogIHByaXZf b3JkZXIgPSAxIDw8IDEwLAoKCiAgcHJpdl90cmFkZSA9IDEgPDwgMTEsCgoKICBwcml2X2ZlYXR1 cmVfcXVvdGUgPSAxIDw8IDE2LAogIHByaXZfZmVhdHVyZV9lZXllID0gMSA8PCAxNywKCgogIHBy aXZfdXNlcl9hZG1pbiA9IDEgPDwgMjQsCiAgcHJpdl9sb2dpbl9pbmZvID0gMSA8PCAyNywKICBw cml2X2tpbGxfc2VydmVyID0gMSA8PCAyOCwKICBwcml2X2tpbGxfcHJvZ3JhbXMgPSAxIDw8IDI5 LAogIHByaXZfZXZlcnl0aGluZ19yZWFkID0gMSA8PCAzMCwKICBwcml2X2V2ZXJ5dGhpbmdfd3Jp dGUgPSAxIDw8IDMxLAoKCiAgcHJpdl9hZG1pbl9kZW5pZWQgPSBwcml2X29yZGVyLAogIHByaXZf YWRtaW5fZ3JhbnRlZCA9IH5wcml2X2FkbWluX2RlbmllZCwKCgogIHByaXZfaW50ZXJmYWNlX2Rl bmllZCA9IDAsCiAgcHJpdl9pbnRlcmZhY2VfZ3JhbnRlZCA9IH5wcml2X2ludGVyZmFjZV9kZW5p ZWQKfTsKCgoKCgplbnVtIGFjY291bnRfdHlwZV9lbnVtCnsKICBhY2NvdW50X3R5cGVfY29sbGVj dGlvbiA9ICctJywKICBhY2NvdW50X3R5cGVfZXF5X2xvbmcgPSAnTCcsCiAgYWNjb3VudF90eXBl X2VxeV9zaG9ydCA9ICdTJywKICBhY2NvdW50X3R5cGVfY2FzaCA9ICdDJywKICBhY2NvdW50X3R5 cGVfZmVlID0gJ0YnLAogIGFjY291bnRfdHlwZV94Y2hnX2ZlZSA9ICdYJwp9OwoKZW51bSBhdmVy YWdlX2ZsYWdfYml0X2VudW0KewogIGF2ZXJhZ2VfZmxhZ19ub25lID0gMCwKICBhdmVyYWdlX2Zs YWdfZHVtYiA9IDEgPDwgMCwKICBhdmVyYWdlX2ZsYWdfZmlmbyA9IDEgPDwgMSwKICBhdmVyYWdl X2ZsYWdfbWFzayA9IDB4Mwp9OwpjbGFzcyBJT0hhbmRsZXI7CgpjbGFzcyBJb0RldmljZTsKY2xh c3MgRmlsZURlc2M7CgpjbGFzcyBzb2NrX2FkZHJfdDsKY2xhc3Mgc3VibmV0X3R5cGU7CgpjbGFz cyBTb2NrZXQ7CmNsYXNzIFBvcnQ7CmNsYXNzIEJDYXN0U29ja2V0OwpjbGFzcyBNQ2FzdFNvY2tl dDsKCmNsYXNzIElvU3RhY2s7CmNsYXNzIElvQ29udGV4dDsKY2xhc3MgU2VudE5vdGlmaWVkOwoK Y2xhc3MgTWFpbGJveDsKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgb2N0ZXRfdHlwZTsKCgpjbGFz cyBzb2NrX2FkZHJfdDsKCgoKZXh0ZXJuIGNsYXNzIExvZyBuZXRsb2c7CgoKCmV4dGVybiBJb0Nv bnRleHQgZGVmYXVsdF9pb19jb250ZXh0OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgcGFydG5l cl9pZF90eXBlOwoKCmVudW0geyBwYXJ0bmVyX25hbWVfbGVuID0gMzIgfTsKCgoKCgoKCmNsYXNz IE11dGV4CnsKcHJpdmF0ZToKCgoKICB1bnNpZ25lZCBfYnVmWygyNCArMykvNF07CgoKcHVibGlj OgogIE11dGV4KCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsK ICB+TXV0ZXgoKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoK ICB2b2lkIGdldCgpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7 CiAgdm9pZCByZWxlYXNlKCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxs X18pKTsKfTsKY2xhc3MgV2l0aExvY2sKewpwcml2YXRlOgogIE11dGV4ICZfbXV0ZXg7CgpwdWJs aWM6CiAgV2l0aExvY2sgKE11dGV4ICZtdXRleCkgOiBfbXV0ZXggKG11dGV4KSB7IF9tdXRleC5n ZXQoKTsgfQogIH5XaXRoTG9jaygpIHsgX211dGV4LnJlbGVhc2UoKTsgfQp9OwoKCmV4dGVybiAi QyIgewoKCgoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CgoKCgoKdHlwZWRlZiBzdHJ1 Y3QgX0lPX0ZJTEUgX19GSUxFOwp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CgoKCgoKCgoK CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBf X3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKCnR5 cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0g X0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0 ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CgoKCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9 IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgog IF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lM TEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVH QUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9f R0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIK fTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1 Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0 eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3Qg X19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5 cGVkZWYgd2ludF90ICgqX19nY29udl9idG93Y19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICos IHVuc2lnbmVkIGNoYXIpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVj dCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVj dCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChz dHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAq KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVm IGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgq X19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoq KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0 eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFy ICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3Ry dWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0 OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2dj b252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1 Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAK ewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29u c3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFt ZTsKICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfYnRv d2NfZmN0IF9fYnRvd2NfZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2dj b252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQg X19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVl ZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0 IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25l ZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0 aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19z dGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19k YXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVf dCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9u X18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90Owp0eXBl ZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAg c3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9f ZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2 X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2lu dDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0 eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g KF9fU0lfXykpKTsKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKdHlwZWRlZiB2 b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFy a2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwp9OwoK CmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0 aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CnN0cnVjdCBfSU9f RklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9J T19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNl OwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBf SU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7 CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0 IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50 IF9maWxlbm87CgoKCiAgaW50IF9mbGFnczI7CgogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAg dW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7 CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiAgX19vZmY2NF90 IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21v ZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lk ICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19G SUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9f Ml8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87 CnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9f YnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0 ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19z ZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlw ZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lv X3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNv b2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19m dW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7 CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2Zu ICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0g X0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9u c190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7CgoKZXh0 ZXJuIHZvaWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpfX2NmaWxl LCBpbnQgX19yZWFkX3dyaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9f Y29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4dGVybiAiQyIg ewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4g aW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cg KF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChf SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikg dGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpl eHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg X0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVl a2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lP X2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5sb2Nr ZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAo X0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICog X19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRlcm4gaW50 IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJp Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4 dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSB0aHJv dyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90 KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9f b2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrcG9z IChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBfSU9f ZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7Cn0KCgoKCnR5cGVkZWYgX19n bnVjX3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwoKCnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsK CgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90OwoKCgpleHRlcm4gc3RydWN0IF9JT19G SUxFICpzdGRpbjsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4gc3RydWN0 IF9JT19GSUxFICpzdGRlcnI7CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFy ICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIg Kl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUg KnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3Mp IHRocm93ICgpOwoKCgpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CmV4dGVybiBjaGFy ICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIGludCBm Y2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxF ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3Bl bjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAg ICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJu IEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNf Y29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rp b25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lk ICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxv YykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg c2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1 ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBj aGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3Np emUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAq X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUg Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFf bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9f cmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g aW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywg NCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90 IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgoKZXh0ZXJuIGludCB2 YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7 CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7 CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpl eHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f Zm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0 ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10 LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm X18sIDIsIDMpKSk7CgoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHZmc2Nh bmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRl cm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNf dmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo X19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgoKCmV4dGVybiBpbnQg ZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsK CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBp bnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxv Y2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBw dXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBp bnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBn ZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193 LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAg ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoK CgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3Ry aWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19y ZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90 IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93 ICgpOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5l cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5nZXRj IChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJl YWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK ZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6 ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVz dHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91 bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQg Kl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGlu dCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBp bnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJu IGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBf X29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cg KCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRf dCAqX19wb3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy biB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy biBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50 IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiB2 b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoK ZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19l cnJsaXN0W107CgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19j b25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3Mp IHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgp OwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0 IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGlu dCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg MCkpKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7Cmlu bGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNf dmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2Zt dCwgX19hcmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0 dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGluZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklM RSAqX19mcCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9f ZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQgY2hhciAqKSAo X19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAo dm9pZCkgdGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRyID49IChzdGRp biktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQgY2hhciAqKSAo c3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlubGluZSBpbnQKcHV0Y2hhciAoaW50IF9f YykgdGhyb3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoKCgppbmxp bmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkK ewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lP X3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2Mp KSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2Mp KSk7Cn0KCgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAo X19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWdu ZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRl X3B0cisrID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9f YykgdGhyb3cgKCkKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRv dXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIp IChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAo X19jKSkpOwp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5lcHRy LCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gX19nZXRk ZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlubGluZSBpbnQK ZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19z dHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVycm9yX3VubG9j a2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9m bGFncyAmIDB4MjApICE9IDApOwp9CgoKfQoKCmNsYXNzIHN0cnZhcl90eXBlOwoKCmNsYXNzIExv Zwp7CnB1YmxpYzoKCiAgZW51bSBwcmlvcml0eQogIHsKICAgIGVtZXJnLAogICAgYWxlcnQsCiAg ICBjcml0LAogICAgZXJyLAogICAgd2FybmluZywKICAgIG5vdGljZSwKICAgIGluZm8sCiAgICBk ZWJ1ZwogIH07Cgpwcml2YXRlOgoKICBGSUxFICpfZjsKCgogIHN0cnZhcl90eXBlICpfZGl2ZXJz aW9uOwoKCiAgY2hhciBjb25zdCAqX3N0cmZ0aW1lX2ZtdDsKCgogIHByaW9yaXR5IF90aHJlc2hv bGQ7CgoKICB0aW1lX3QgX2xhc3RfdGltZTsKICBjaGFyIF9mb3JtYXR0ZWRfdGltZVszMF07CiAg c2hvcnQgX2Zvcm1hdHRlZF9sZW5ndGg7CgoKICBmcmllbmQgY2xhc3MgTG9nU2luazsKICBNdXRl eCBfbXV0ZXg7CgoKICBpbmxpbmUgdm9pZCBwcmludCAoY2hhcikgX19hdHRyaWJ1dGVfXygoX19y ZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKICBpbmxpbmUgdm9pZCBwcmludCAoY2hhciBjb25z dCAqLCB1bnNpZ25lZCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p KTsKICBpbmxpbmUgdm9pZCB2Zm9ybWF0IChjaGFyIGNvbnN0ICosIHZhX2xpc3QpOwogIHZvaWQg Zm9ybWF0IChjaGFyIGNvbnN0ICosIC4uLikgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyhwcmlu dGYsIDIsIDMpKSk7CgoKCiAgdm9pZCB2X25vbG9jayAocHJpb3JpdHksIGNoYXIgY29uc3QgKiwg dmFfbGlzdCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKICB2 b2lkIHZfY29udF9ub2xvY2sgKHByaW9yaXR5LCBjaGFyIGNvbnN0ICptc2csIHZhX2xpc3QgYXJn cykgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgogIGlubGlu ZSB2b2lkIHN5bmNwIChwcmlvcml0eSk7CgoKCiAgTG9nIChjb25zdCBMb2cgJik7CiAgTG9nICZv cGVyYXRvcj0gKGNvbnN0IExvZyAmKTsKCnB1YmxpYzoKCiAgc3RhdGljIGNoYXIgY29uc3QgeXlt bWRkX2hobW1zc1tdOwogIHN0YXRpYyBjaGFyIGNvbnN0IG1tZGRfaGhtbXNzW107CiAgc3RhdGlj IGNoYXIgY29uc3QgaGhtbXNzW107CgogIH5Mb2coKSB7IGNsb3NlKCk7IH0KCgogIExvZyAoRklM RSAqZiA9IHN0ZGVyciwKICAgICAgIGNoYXIgY29uc3QgKnN0cmZ0aW1lX2ZtdCA9IG1tZGRfaGht bXNzKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgTG9n IChjaGFyIGNvbnN0ICpuYW1lLAogICAgICAgY2hhciBjb25zdCAqc3RyZnRpbWVfZm10ID0gbW1k ZF9oaG1tc3MpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoK CgogIHZvaWQgZGl2ZXJ0IChzdHJ2YXJfdHlwZSAqcykgeyBfZGl2ZXJzaW9uID0gczsgfQogIHZv aWQgdW5kaXZlcnQgKHN0cnZhcl90eXBlIGNvbnN0ICYpIF9fYXR0cmlidXRlX18oKF9fcmVncGFy bV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKICBMb2cgJm9wZXJhdG9yPSAoY2hhciBjb25zdCAqKSBf X2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgTG9nICZvcGVy YXRvcj0gKEZJTEUgKikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p KTsKCgogIHZvaWQgY2xvc2UoKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNh bGxfXykpOwoKCiAgRklMRSAqZmlsZSgpIGNvbnN0IHsgcmV0dXJuIF9mOyB9CgoKICB2b2lkIHBv c2l0aW9uIChteV9mcG9zX3QgJikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRj YWxsX18pKTsKCgogIHByaW9yaXR5IHRocmVzaG9sZCAocHJpb3JpdHkpIF9fYXR0cmlidXRlX18o KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCgogIGJvb2wgb3BlcmF0b3IoKSAocHJp b3JpdHkgcCkgY29uc3QgeyByZXR1cm4gcCA8PSBfdGhyZXNob2xkOyB9CgoKCgoKICBib29sIHYg KHByaW9yaXR5LCBjaGFyIGNvbnN0ICosIHZhX2xpc3QpIF9fYXR0cmlidXRlX18oKF9fcmVncGFy bV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgYm9vbCB2X2NvbnQgKHByaW9yaXR5LCBjaGFyIGNvbnN0 ICosIHZhX2xpc3QpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7 CgoKICB2b2lkIG9wZXJhdG9yKCkgKHByaW9yaXR5LCBjaGFyIGNvbnN0ICogLi4uKQogICAgX19h dHRyaWJ1dGVfXygoX19mb3JtYXRfXyhwcmludGYsIDMsIDQpKSk7CiAgdm9pZCBjb250IChwcmlv cml0eSwgY2hhciBjb25zdCAqIC4uLikKICAgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18ocHJp bnRmLCAzLCA0KSkpOwoKCgogIGJvb2wgb3BlcmF0b3IoKSAocHJpb3JpdHksIGludCwgY2hhciBj b25zdCAqIC4uLikKICAgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18ocHJpbnRmLCA0LCA1KSkp OwoKCiAgYm9vbCBkaXNwbGF5IChwcmlvcml0eSBwLCBjaGFyIGNvbnN0ICp0ZXh0LCBjaGFyIGNv bnN0ICpoZWFkbGluZSAuLi4pCiAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKHByaW50Ziwg NCwgNSkpKTsKCgogIGJvb2wgZHVtcCAocHJpb3JpdHksIHZvaWQgY29uc3QgKiwgc2l6ZV90KSBf X2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgoKCiAgdm9pZCBi YWNrdHJhY2UgKHByaW9yaXR5KSB7fQoKCgogIHZvaWQgc3luYyAoYm9vbCB0b19kaXNrID0gZmFs c2UpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7Cn07CgoKCmV4 dGVybiBMb2cgbWFpbmxvZzsKCgoKdm9pZCBiYWRfY29uZGl0aW9uX2Z1bmMgKGNoYXIgY29uc3Qg KiwgdW5zaWduZWQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7 CmJvb2wgcHJlc3VtcHRpb25fd3JvbmcgKGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqLCB1bnNp Z25lZCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKSBfX2F0dHJp YnV0ZV9fKChfX25vcmV0dXJuX18pKTsKCgoKCgoKc3RydWN0IHZlcmJfZGVzY190eXBlCnsKICB2 ZXJiX3R5cGUgdmVyYjsKICBjaGFyIGNvbnN0ICp0ZXh0Owp9OwoKc3RydWN0IGFkdmVyYl9kZXNj X3R5cGUKewogIGFkdmVyYl90eXBlIGFkdmVyYjsKICBjaGFyIGNvbnN0ICp0ZXh0Owp9OwoKc3Ry dWN0IGZsYWdfZGVzY190eXBlCnsKICBzZW50ZW5jZV9mbGFnX2VudW0gZmxhZzsKICBjaGFyIGNv bnN0ICp0ZXh0Owp9OwoKZXh0ZXJuIHZlcmJfZGVzY190eXBlIGNvbnN0IHZlcmJfZGVzY1tdOwpl eHRlcm4gYWR2ZXJiX2Rlc2NfdHlwZSBjb25zdCBhZHZlcmJfZGVzY1tdOwpleHRlcm4gZmxhZ19k ZXNjX3R5cGUgY29uc3QgZmxhZ19kZXNjW107CnN0cnVjdCBzZW50ZW5jZV90eXBlCnsKICBlbnVt IHsgaGVhZGVyX2J5dGVzID0gc2VudGVuY2VfaGVhZGVyX2RlZnM6OmhlYWRlcl9iaXRzIC8gOCwK ICAgICAgICAgbGluZWFyX3NpemUgPSBoZWFkZXJfYnl0ZXMgKyAyIH07CgogIHVuc2lnbmVkIHNo b3J0IF92ZXJiOwogIHVuc2lnbmVkIHNob3J0IF9hZHZlcmI7CiAgdW5zaWduZWQgc2hvcnQgX2Zs YWdzOwogIHVuc2lnbmVkIHNob3J0IF9ub3VuOwogIHVuc2lnbmVkIF9jb3VudDsKCiAgc2VudGVu Y2VfdHlwZSgpCiAgICA6IF92ZXJiICgwKSwgX2FkdmVyYiAoMCksIF9mbGFncyAoMCksIF9ub3Vu ICgwKSwgX2NvdW50ICgwKSB7fQoKICBzZW50ZW5jZV90eXBlICh2ZXJiX3R5cGUgdiwgYWR2ZXJi X3R5cGUgYXYsIHVuc2lnbmVkIGYsCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbiwgdW5zaWdu ZWQgYykKICAgIDogX3ZlcmIgKHYpLCBfYWR2ZXJiIChhdiksIF9mbGFncyAoZiksIF9ub3VuIChu KSwgX2NvdW50IChjKSB7fQp9OwoKCmNsYXNzIFNlbnRlbmNlIDogcHVibGljIFF1ZXVlPFNlbnRl bmNlPjo6Tm9kZSwKICAgICAgICAgICAgICAgICBwcml2YXRlIHNlbnRlbmNlX3R5cGUKewogIHVu c2lnbmVkIF9zaXplOwogIHZvaWQgKl9kYXRhOwoKICBmcmllbmQgY2xhc3MgTWVzc2FnZTsKICB2 b2lkIGxpbmVhcml6ZSAob2N0ZXRfdHlwZSAqJikgY29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdw YXJtX18oMyksX19zdGRjYWxsX18pKTsKICBib29sIGRlX2xpbmVhcml6ZSAob2N0ZXRfdHlwZSBj b25zdCAqJiwgdW5zaWduZWQgJiwgTG9nOjpwcmlvcml0eSkgX19hdHRyaWJ1dGVfXygoX19yZWdw YXJtX18oMyksX19zdGRjYWxsX18pKTsKCnByb3RlY3RlZDoKCiAgU2VudGVuY2UoKQogICAgOiBf c2l6ZSAobGluZWFyX3NpemUpLCBfZGF0YSAoMCkge30KCnB1YmxpYzoKICB+U2VudGVuY2UoKSB7 CiAgICBpZiAoX2NvdW50ID4gMSkgZnJlZSAoX2RhdGEpOyB9CgoKCiAgU2VudGVuY2UgKFNlbnRl bmNlICZzKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwogIFNl bnRlbmNlICZvcGVyYXRvcj0gKFNlbnRlbmNlICYpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9f KDMpLF9fc3RkY2FsbF9fKSk7CgoKCiAgdGVtcGxhdGUgPGNsYXNzIGRlc2NfdD4KICBTZW50ZW5j ZSAodmVyYl90eXBlIHZlcmIsIGFkdmVyYl90eXBlIGFkdmVyYiwgdW5zaWduZWQgZmxhZ3MsCiAg ICAgICAgICAgIGRlc2NfdCBjb25zdCAmZGVzYywgdm9pZCBjb25zdCAqZGF0YSwgdW5zaWduZWQg bikKICAgIDogc2VudGVuY2VfdHlwZSAodmVyYiwgYWR2ZXJiLCBmbGFncywgZGVzYy50eXBlX2lk LCBuKQogIHsKICAgIF9zaXplID0gbGluZWFyX3NpemUgKyBuICogTGluZ286OmluZm8gKGRlc2Mp LmxpbmVhcl9zaXplOwogICAgc3dpdGNoIChuKQogICAgICB7CiAgICAgIGNhc2UgMDoKICAgICAg ICBfZGF0YSA9IDA7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMToKICAgICAgICBfZGF0YSA9 IHN0YXRpY19jYXN0PHZvaWQgKmNvbnN0ICo+IChkYXRhKVswXTsKICAgICAgICBicmVhazsKICAg ICAgZGVmYXVsdDoKICAgICAgICBfZGF0YSA9IG1hbGxvYyAobiAqIHNpemVvZiAodm9pZCAqKSk7 CiAgICAgICAgbWVtY3B5IChfZGF0YSwgZGF0YSwgbiAqIHNpemVvZiAodm9pZCAqKSk7CiAgICAg ICAgYnJlYWs7CiAgICAgIH0KICB9CgoKICBTZW50ZW5jZSAodmVyYl90eXBlIHZlcmIsIGFkdmVy Yl90eXBlIGFkdmVyYiwgdW5zaWduZWQgZmxhZ3MsCiAgICAgICAgICAgIHJlY29yZF90eXBlIGNv bnN0ICZkZXNjLCB2b2lkICpkYXRhKQogICAgOiBzZW50ZW5jZV90eXBlICh2ZXJiLCBhZHZlcmIs IGZsYWdzLCBkZXNjLnR5cGVfaWQsIDEpCiAgewogICAgX3NpemUgPSBsaW5lYXJfc2l6ZSArIExp bmdvOjppbmZvIChkZXNjKS5saW5lYXJfc2l6ZTsKICAgIF9kYXRhID0gZGF0YTsKICB9CgoKICBT ZW50ZW5jZSAodmVyYl90eXBlIHZlcmIsIGFkdmVyYl90eXBlIGFkdmVyYiwgdW5zaWduZWQgZmxh Z3MsCiAgICAgICAgICAgIGluZGV4X3R5cGUgY29uc3QgJmRlc2MsIHZvaWQgKmRhdGEpCiAgICA6 IHNlbnRlbmNlX3R5cGUgKHZlcmIsIGFkdmVyYiwgZmxhZ3MsIGRlc2MudHlwZV9pZCwgMSkKICB7 CiAgICBfc2l6ZSA9IGxpbmVhcl9zaXplICsgTGluZ286OmluZm8gKGRlc2MpLmxpbmVhcl9zaXpl OwogICAgX2RhdGEgPSBkYXRhOwogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBUPgogIFNlbnRlbmNl ICh2ZXJiX3R5cGUgdmVyYiwgYWR2ZXJiX3R5cGUgYWR2ZXJiLCB1bnNpZ25lZCBmbGFncywKICAg ICAgICAgICAgVCBjb25zdCAqY29uc3QgKmRhdGEsIHVuc2lnbmVkIG4pCiAgICA6IHNlbnRlbmNl X3R5cGUgKHZlcmIsIGFkdmVyYiwgZmxhZ3MsIFQ6OmRlc2MoKS50eXBlX2lkLCBuKQogIHsKICAg IF9zaXplID0gbGluZWFyX3NpemUgKyBuICogTGluZ286OmluZm8gKFQ6OmRlc2MoKSkubGluZWFy X3NpemU7CiAgICBzd2l0Y2ggKG4pCiAgICAgIHsKICAgICAgY2FzZSAwOgogICAgICAgIF9kYXRh ID0gMDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxOgogICAgICAgIF9kYXRhID0gY29uc3Rf Y2FzdDxUICo+IChkYXRhWzBdKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAg ICBfZGF0YSA9IG1hbGxvYyAobiAqIHNpemVvZiAodm9pZCAqKSk7CiAgICAgICAgbWVtY3B5IChf ZGF0YSwgZGF0YSwgbiAqIHNpemVvZiAodm9pZCAqKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0K ICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBTZW50ZW5jZSAodmVyYl90eXBlIHZlcmIsIGFk dmVyYl90eXBlIGFkdmVyYiwgdW5zaWduZWQgZmxhZ3MsCiAgICAgICAgICAgIHVuc2lnbmVkIG4s IFQgY29uc3QgKmRhdGEpCiAgICA6IHNlbnRlbmNlX3R5cGUgKHZlcmIsIGFkdmVyYiwgZmxhZ3Ms IFQ6OmRlc2MoKS50eXBlX2lkLCBuKQogIHsKICAgIF9zaXplID0gbGluZWFyX3NpemUgKyBuICog TGluZ286OmluZm8gKFQ6OmRlc2MoKSkubGluZWFyX3NpemU7CiAgICBzd2l0Y2ggKG4pCiAgICAg IHsKICAgICAgY2FzZSAwOgogICAgICAgIF9kYXRhID0gMDsKICAgICAgICBicmVhazsKICAgICAg Y2FzZSAxOgogICAgICAgIF9kYXRhID0gY29uc3RfY2FzdDxUICo+IChkYXRhKTsKICAgICAgICBi cmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBfZGF0YSA9IG1hbGxvYyAobiAqIHNpemVvZiAo dm9pZCAqKSk7CiAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47ICsraSwgKytkYXRh KQogICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCBjb25zdCAqKj4gKF9kYXRhKVtpXSA9IGRhdGE7 CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBTZW50 ZW5jZSAodmVyYl90eXBlIHZlcmIsIGFkdmVyYl90eXBlIGFkdmVyYiwgdW5zaWduZWQgZmxhZ3Ms CiAgICAgICAgICAgIFQgY29uc3QgJmRhdGEpCiAgICA6IHNlbnRlbmNlX3R5cGUgKHZlcmIsIGFk dmVyYiwgZmxhZ3MsIFQ6OmRlc2MoKS50eXBlX2lkLCAxKQogIHsKICAgIF9zaXplID0gbGluZWFy X3NpemUgKyBMaW5nbzo6aW5mbyAoVDo6ZGVzYygpKS5saW5lYXJfc2l6ZTsKICAgIF9kYXRhID0g Y29uc3RfY2FzdDxUICo+ICgmZGF0YSk7CiAgfQoKCiAgU2VudGVuY2UgKHZlcmJfdHlwZSB2ZXJi LCBhZHZlcmJfdHlwZSBhZHZlcmIsIHVuc2lnbmVkIGZsYWdzLAogICAgICAgICAgICB2b2lkICpk YXRhLCB1bnNpZ25lZCBsZW5ndGgpCiAgICA6IHNlbnRlbmNlX3R5cGUgKHZlcmIsIGFkdmVyYiwg ZmxhZ3MsIHJpZF9zb2wzX25vX3JlY29yZCwgMSkKICB7CiAgICBfc2l6ZSA9IGxpbmVhcl9zaXpl ICsgbGVuZ3RoOwogICAgX2RhdGEgPSBkYXRhOwogIH0KCgogIHZvaWQgYWR2ZXJiIChhZHZlcmJf dHlwZSBhZHZlcmIpIHsgX2FkdmVyYiA9IGFkdmVyYjsgfQoKCiAgdmVyYl90eXBlIHZlcmIoKSBj b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDx2ZXJiX3R5cGU+IChfdmVyYik7IH0KICBhZHZlcmJf dHlwZSBhZHZlcmIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxhZHZlcmJfdHlwZT4gKF9h ZHZlcmIpOyB9CiAgdW5zaWduZWQgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICB1 bnNpZ25lZCBub3VuKCkgY29uc3QgeyByZXR1cm4gX25vdW47IH0KICB1bnNpZ25lZCBjb3VudCgp IGNvbnN0IHsgcmV0dXJuIF9jb3VudDsgfQogIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVy biBfc2l6ZTsgfQoKICBib29sIGlzX2luZGV4KCkgY29uc3QgewogICAgcmV0dXJuIHNlbnRlbmNl X2hlYWRlcl9kZWZzOjppc19pbmRleCAobm91bigpKTsgfQoKICB2b2lkICpjb25zdCAqYWxsX2Rh dGEoKSBjb25zdCB7CiAgICByZXR1cm4gKF9jb3VudCA9PSAwID8gMCA6IF9jb3VudCA9PSAxCiAg ICAgICAgICAgID8gJl9kYXRhIDogc3RhdGljX2Nhc3Q8dm9pZCAqKj4gKF9kYXRhKSk7IH0KCiAg dm9pZCAqKmFsbF9kYXRhKCkgewogICAgcmV0dXJuIGNvbnN0X2Nhc3Q8dm9pZCAqKj4gKAogICAg ICBzdGF0aWNfY2FzdDxTZW50ZW5jZSBjb25zdCAqPiAodGhpcyktPmFsbF9kYXRhKCkpOyB9Cgog IHZvaWQgKmRhdGEgKHVuc2lnbmVkIHNob3J0IGkpIGNvbnN0IHsKICAgIHJldHVybiAoaSA+PSBf Y291bnQgPyAwIDogX2NvdW50ID09IDEgPyBfZGF0YQogICAgICAgICAgICA6IHN0YXRpY19jYXN0 PHZvaWQgKio+IChfZGF0YSlbaV0pOyB9CgogIGJvb2wgc2NvcGVfZmxhZygpIGNvbnN0IHsKICAg IHJldHVybiBfZmxhZ3MgJiBzZl9zdWJzY3JpYmU7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBUPgog IGJvb2wgYWNjZXNzIChpbnQgaSwgVCAqJngpCiAgewogICAgaWYgKGxpbmdvICE9IFQ6Ol9saWQg fHwgdHlwZSAhPSBUOjpfcmlkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoY291bnQgPD0g aSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgeCA9IGNvdW50ID09IDEKICAgICAgPyBzdGF0aWNf Y2FzdDxUICo+IChfZGF0YSkKICAgICAgOiBzdGF0aWNfY2FzdDxUICoqPiAoX2RhdGEpW2ldOwog ICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgdm9pZCBmcmVlX2RhdGEoKQogIHsKICAgIGlmIChfY291 bnQgPiAxKSB7CiAgICAgIHVuc2lnbmVkIHNob3J0IGkgPSAwOwogICAgICBkbwogICAgICAgIGZy ZWUgKHN0YXRpY19jYXN0PHZvaWQgKio+IChfZGF0YSlbaV0pOwogICAgICB3aGlsZSAoKytpIDwg X2NvdW50KTsgfQogICAgX2NvdW50ID0gMDsKICAgIGZyZWUgKF9kYXRhKTsKICAgIF9kYXRhID0g MDsKICB9CgoKCgogIGNoYXIgKnRvX3N0cmluZyAoY2hhciAqcywgdW5zaWduZWQgbikgY29uc3Qg X19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgogIHVuc2lnbmVk IHN0ZWFsX2RhdGEgKHZvaWQgKipwID0gMCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyks X19zdGRjYWxsX18pKTsKCgogIHZvaWQgZGVlcGVuKCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJt X18oMyksX19zdGRjYWxsX18pKTsKCgogIHZvaWQgcHJldHR5X3ByaW50IChMb2cgJiwgTG9nOjpw cmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqd2hlcmUsIGludCBpbmRl bnQgPSAwKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwp9OwoK CnRlbXBsYXRlIDxjbGFzcyBSPgpjbGFzcyBTZW50ZW5jZVQgOiBwdWJsaWMgU2VudGVuY2UKewpw dWJsaWM6CiAgU2VudGVuY2VUKCkge30KICBTZW50ZW5jZVQgKHZlcmJfdHlwZSB2ZXJiLAogICAg ICAgICAgICAgYWR2ZXJiX3R5cGUgYWR2ZXJiLAogICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3Ms CiAgICAgICAgICAgICBSICoqciwKICAgICAgICAgICAgIHVuc2lnbmVkIG4pCiAgICA6IFNlbnRl bmNlICh2ZXJiLCBhZHZlcmIsIGZsYWdzLCAxLCAmcikge30KCiAgU2VudGVuY2VUICh2ZXJiX3R5 cGUgdmVyYiwKICAgICAgICAgICAgIGFkdmVyYl90eXBlIGFkdmVyYiwKICAgICAgICAgICAgIHVu c2lnbmVkIGZsYWdzLAogICAgICAgICAgICAgUiAmcikKICAgIDogU2VudGVuY2UgKHZlcmIsIGFk dmVyYiwgZmxhZ3MsIFI6OmRlc2MoKSwgJnIpIHt9CgoKICBTZW50ZW5jZVQgKFNlbnRlbmNlVDxS PiAmcykgOiBTZW50ZW5jZSAocykge30KICBTZW50ZW5jZVQgJm9wZXJhdG9yPSAoU2VudGVuY2VU PFI+ICZzKSB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2VudGVuY2VUICY+IChTZW50ZW5jZTo6 b3BlcmF0b3I9IChzKSk7IH0KCgogIFIgKmNvbnN0ICphbGwoKSBjb25zdCB7CiAgICByZXR1cm4g cmVpbnRlcnByZXRfY2FzdDxSICpjb25zdCAqPiAoYWxsX2RhdGEoKSk7IH0KCiAgUiAqYXQgKHVu c2lnbmVkIGkpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFIgKj4gKGRhdGEgKGkpKTsgfQogIFIgJm9w ZXJhdG9yW10gKHVuc2lnbmVkIGkpIHsgcmV0dXJuICphdCAoaSk7IH0KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgUj4KaW5saW5lIFNlbnRlbmNlVDxSPiAqaXNfYSAoU2VudGVuY2UgKnMsIFNlbnRlbmNl VDxSPiAqJnQpIHsKICByZXR1cm4gdCA9IChzLT5ub3VuKCkgPT0gUjo6X3JpZAogICAgICAgICAg ICAgID8gc3RhdGljX2Nhc3Q8U2VudGVuY2VUPFI+ICo+IChzKQogICAgICAgICAgICAgIDogMCk7 IH0KCnRlbXBsYXRlIDxjbGFzcyBSPgppbmxpbmUgU2VudGVuY2VUPFI+IGNvbnN0ICppc19hIChT ZW50ZW5jZSBjb25zdCAqcywgU2VudGVuY2VUPFI+IGNvbnN0IComdCkgewogIHJldHVybiB0ID0g KHMtPm5vdW4oKSA9PSBSOjpfcmlkCiAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxTZW50ZW5j ZVQ8Uj4gY29uc3QgKj4gKHMpCiAgICAgICAgICAgICAgOiAwKTsgfQoKCnN0cnVjdCBtZXNzYWdl X2hlYWRlcl90eXBlCnsKICB1bnNpZ25lZCBfc2l6ZTsKICBwYXJ0bmVyX2lkX3R5cGUgX3NlbmRl cjsKICBtZXNzYWdlX3JlZl90eXBlIF9teV9yZWY7CiAgbWVzc2FnZV9yZWZfdHlwZSBfeXJfcmVm OwoKCiAgZW51bSB7IGxpbmVhcl9zaXplID0gNCB9OwoKICBtZXNzYWdlX2hlYWRlcl90eXBlIChw YXJ0bmVyX2lkX3R5cGUgc2VuZGVyLAogICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfcmVm X3R5cGUgbXlfcmVmLAogICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfcmVmX3R5cGUgeXJf cmVmKQogICAgOiBfc2l6ZSAobGluZWFyX3NpemUpCiAgICAsIF9zZW5kZXIgKHNlbmRlcikKICAg ICwgX215X3JlZiAobXlfcmVmKQogICAgLCBfeXJfcmVmICh5cl9yZWYpIHt9Cn07CgoKY2xhc3Mg TWVzc2FnZSA6IHB1YmxpYyBRdWV1ZTxNZXNzYWdlPjo6Tm9kZSwKICAgICAgICAgICAgICAgIHB1 YmxpYyBRdWV1ZTxTZW50ZW5jZT4sCiAgICAgICAgICAgICAgICBwcml2YXRlIG1lc3NhZ2VfaGVh ZGVyX3R5cGUKewpwdWJsaWM6CiAgTWVzc2FnZSgpCiAgICA6IG1lc3NhZ2VfaGVhZGVyX3R5cGUg KDAsIDAsIDApIHt9CgogIE1lc3NhZ2UgKHBhcnRuZXJfaWRfdHlwZSBzZW5kZXIpCiAgICA6IG1l c3NhZ2VfaGVhZGVyX3R5cGUgKHNlbmRlciwgMCwgMCkge30KCiAgTWVzc2FnZSAobWVzc2FnZV9y ZWZfdHlwZSBteV9yZWYsCiAgICAgICAgICAgbWVzc2FnZV9yZWZfdHlwZSB5cl9yZWYpCiAgICA6 IG1lc3NhZ2VfaGVhZGVyX3R5cGUgKDAsIG15X3JlZiwgeXJfcmVmKSB7fQoKICBNZXNzYWdlIChT ZW50ZW5jZSAmcywKICAgICAgICAgICBtZXNzYWdlX3JlZl90eXBlIG15X3JlZiA9IDAsCiAgICAg ICAgICAgbWVzc2FnZV9yZWZfdHlwZSB5cl9yZWYgPSAwKQogICAgOiBtZXNzYWdlX2hlYWRlcl90 eXBlICgwLCBteV9yZWYsIHlyX3JlZikgewogICAgYWRkIChzKTsgfQoKICB1bnNpZ25lZCBzaXpl KCkgY29uc3QgeyByZXR1cm4gX3NpemU7IH0KICBwYXJ0bmVyX2lkX3R5cGUgc2VuZGVyKCkgY29u c3QgeyByZXR1cm4gX3NlbmRlcjsgfQogIG1lc3NhZ2VfcmVmX3R5cGUgbXlfcmVmKCkgY29uc3Qg eyByZXR1cm4gX215X3JlZjsgfQogIG1lc3NhZ2VfcmVmX3R5cGUgeXJfcmVmKCkgY29uc3QgeyBy ZXR1cm4gX3lyX3JlZjsgfQoKCiAgdm9pZCBzZXRfbXlfcmVmIChtZXNzYWdlX3JlZl90eXBlIHIp IHsgX215X3JlZiA9IHI7IH0KICB2b2lkIHNldF95cl9yZWYgKG1lc3NhZ2VfcmVmX3R5cGUgcikg eyBfeXJfcmVmID0gcjsgfQoKICB2b2lkIGFkZCAoU2VudGVuY2UgJnMpCiAgewogICAgX3NpemUg Kz0gcy5zaXplKCk7CiAgICBxX2FkZCAoJnMpOwogIH0KCiAgU2VudGVuY2UgKnJlbW92ZSgpCiAg ewogICAgU2VudGVuY2UgKnMgPSBxX3JlbW92ZSgpOwogICAgaWYgKHMpCiAgICAgIF9zaXplIC09 IHMtPnNpemUoKTsKICAgIHJldHVybiBzOwogIH0KCiAgdm9pZCBsaW5lYXJpemUgKG9jdGV0X3R5 cGUgKiYpIGNvbnN0IF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7 CiAgYm9vbCBkZV9saW5lYXJpemUgKHBhcnRuZXJfaWRfdHlwZSBzZW5kZXIsCiAgICAgICAgICAg ICAgICAgICAgIG9jdGV0X3R5cGUgY29uc3QgKiYsIHVuc2lnbmVkLCBMb2c6OnByaW9yaXR5KSBf X2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgYm9vbCBpc19s YXN0KCkgY29uc3QgewogICAgcmV0dXJuIHFfbGFzdCgpID09IDAgfHwgcV9sYXN0KCktPmFkdmVy YigpICE9IGF2X2NvbnRkOyB9CgoKICB2b2lkIGZyZWVfZGF0YSgpIF9fYXR0cmlidXRlX18oKF9f cmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKICB2b2lkIHByZXR0eV9wcmludCAoTG9nICYs IExvZzo6cHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKndoZXJlLCBp bnQgaW5kZW50ID0gMCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p KTsKCgogIGNsYXNzIEhhbmRsZXIKICB7CiAgcHVibGljOgogICAgdmlydHVhbCB+SGFuZGxlcigp OwogICAgdmlydHVhbCBib29sIGhhbmRsZSAoTWVzc2FnZSAmKSA9IDA7CiAgfTsKfTsKCmNsYXNz IHN0cnZhcl90eXBlOwoKCgp1bnNpZ25lZCBucGFyZW50cyAocmVjb3JkX3R5cGUgY29uc3QgJikg X19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKSBfX2F0dHJpYnV0ZV9f KChfX2NvbnN0X18pKTsKdW5zaWduZWQgbm1lbWJlcnMgKHJlY29yZF90eXBlIGNvbnN0ICYpIF9f YXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygo X19jb25zdF9fKSk7CnVuc2lnbmVkIG5tZW1iZXJzICggaW5kZXhfdHlwZSBjb25zdCAmKSBfX2F0 dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9f Y29uc3RfXykpOwoKCnVuc2lnbmVkIGNvbHVtbnMgKHJlY29yZF90eXBlIGNvbnN0ICYpIF9fYXR0 cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19j b25zdF9fKSk7CnVuc2lnbmVkIGNvbHVtbnMgKCBpbmRleF90eXBlIGNvbnN0ICYpIF9fYXR0cmli dXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25z dF9fKSk7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGVsZW1lbnRfc2l6ZV90OwpleHRlcm4g ZWxlbWVudF9zaXplX3QgY29uc3QgbGluZWFyX2VsZW1lbnRfc3pbXTsKCnVuc2lnbmVkIHNpemVf b2YgKGZpZWxkX3R5cGUgY29uc3QgKiwgZWxlbWVudF9zaXplX3QgY29uc3QgKgogICAgICAgICAg ICAgICAgICA9IGxpbmVhcl9lbGVtZW50X3N6KSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygz KSxfX3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwp1bnNpZ25lZCBzaXpl X29mIChtZW1iZXJfdHlwZSBjb25zdCAqLCBlbGVtZW50X3NpemVfdCBjb25zdCAqCiAgICAgICAg ICAgICAgICAgID0gbGluZWFyX2VsZW1lbnRfc3opIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9f KDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CnVuc2lnbmVkIHNp emVfb2YgKHJlY29yZF90eXBlIGNvbnN0ICYsIGVsZW1lbnRfc2l6ZV90IGNvbnN0ICoKICAgICAg ICAgICAgICAgICAgPSBsaW5lYXJfZWxlbWVudF9zeikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJt X18oMyksX19zdGRjYWxsX18pKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKdW5zaWduZWQg c2l6ZV9vZiAoaW5kZXhfdHlwZSBjb25zdCAmLCBlbGVtZW50X3NpemVfdCBjb25zdCAqCiAgICAg ICAgICAgICAgICAgID0gbGluZWFyX2VsZW1lbnRfc3opIF9fYXR0cmlidXRlX18oKF9fcmVncGFy bV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CgoKdW5zaWdu ZWQgb2Zmc2V0X29mIChyZWNvcmRfdHlwZSBjb25zdCAmLCBtZW1iZXJfdHlwZSBjb25zdCAqLAog ICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfc2l6ZV90IGNvbnN0ICopIF9fYXR0cmlidXRlX18o KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7 CgoKCgpib29sIHNlYXJjaF9wYXJlbnRfKHJlY29yZF90eXBlIGNvbnN0ICZzZWFyY2gsIHJlY29y ZF90eXBlIGNvbnN0ICZjaGlsZCwKICAgICAgICAgICAgICAgICAgICBpbnQgJm9mZnNldCkgX19h dHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKaW5saW5lCmJvb2wgc2Vh cmNoX3BhcmVudCAocmVjb3JkX3R5cGUgY29uc3QgJnNlYXJjaCwgcmVjb3JkX3R5cGUgY29uc3Qg JmNoaWxkLAogICAgICAgICAgICAgICAgICAgIGludCAmb2Zmc2V0KSB7CiAgcmV0dXJuICZzZWFy Y2ggPT0gJmNoaWxkIHx8IHNlYXJjaF9wYXJlbnRfIChzZWFyY2gsIGNoaWxkLCBvZmZzZXQpOyB9 CgoKYm9vbCBzZWFyY2hfbWVtYmVyIChyZWNvcmRfdHlwZSBjb25zdCAmLCBtZW1iZXJfdHlwZSBj b25zdCAmLAogICAgICAgICAgICAgICAgICAgIGludCAmb2Zmc2V0KSBfX2F0dHJpYnV0ZV9fKChf X3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCm1lbWJlcl90eXBlIGNvbnN0ICpzZWFyY2hf bWVtYmVyICgKICByZWNvcmRfdHlwZSBjb25zdCAmLCBjaGFyIGNvbnN0ICpuYW1lLCBpbnQgJm9m ZnNldCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKaW5kZXhf bWVtYmVyX3R5cGUgY29uc3QgKnNlYXJjaF9tZW1iZXIgKAogIGluZGV4X3R5cGUgY29uc3QgJiwg Y2hhciBjb25zdCAqbmFtZSwgaW50ICZvZmZzZXQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9f KDMpLF9fc3RkY2FsbF9fKSk7CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgcGFyZW50X3QsIGNsYXNz IGNoaWxkX3B0cl90PgppbmxpbmUgcGFyZW50X3QKZ2VuZXJpY19jYXN0IChyZWNvcmRfdHlwZSBj b25zdCAmY2hpbGRfZGVzYywgY2hpbGRfcHRyX3QgKmNoaWxkX3JlY29yZCkKewogIGlmIChjaGls ZF9yZWNvcmQgPT0gMCkKICAgIHJldHVybiAwOwogIGludCBvZmZzID0gMDsKICBpZiAoIXNlYXJj aF9wYXJlbnQgKHBhcmVudF90ICgwKS0+ZGVzYygpLCBjaGlsZF9kZXNjLCBvZmZzKSkKICAgIHJl dHVybiAwOwogIHJldHVybiBpbmNyZW1lbnRlZCAoc3RhdGljX2Nhc3Q8cGFyZW50X3Q+IChjaGls ZF9yZWNvcmQpLCBvZmZzKTsKfQoKCnZvaWQgKmR1cCAocmVjb3JkX3R5cGUgY29uc3QgJiwgdm9p ZCBjb25zdCAqKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwpp bmRleF9iYXNlX3R5cGUgKmR1cCAoaW5kZXhfdHlwZSBjb25zdCAmLCBpbmRleF9iYXNlX3R5cGUg Y29uc3QgKikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgp0 ZW1wbGF0ZSA8Y2xhc3MgcmVjb3JkX3R5cGU+IGlubGluZQpyZWNvcmRfdHlwZSAqaGVhcF9jb3B5 IChyZWNvcmRfdHlwZSBjb25zdCAmcmVjKSB7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHJlY29yZF90 eXBlICo+IChkdXAgKHJlYy5kZXNjKCksICZyZWMpKTsgfQoKCnZvaWQgaW5pdGlhbGl6ZSAocmVj b3JkX3R5cGUgY29uc3QgJiwgdm9pZCAqKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxf X3N0ZGNhbGxfXykpOwp2b2lkIGluaXRpYWxpemUgKGluZGV4X3R5cGUgY29uc3QgJiwgaW5kZXhf YmFzZV90eXBlICprZXkpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9f KSk7CgoKdW5zaWduZWQgbm9uX251bGwgKGluZGV4X3R5cGUgY29uc3QgJmluZGV4LCBpbmRleF9i YXNlX3R5cGUgY29uc3QgKmtleSkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRj YWxsX18pKTsKdGVtcGxhdGUgPGNsYXNzIGtleV90PiBpbmxpbmUgdm9pZCBzZXRfc3BlY2lmaWVk IChrZXlfdCAma2V5KSB7CiAga2V5Ll9zcGVjaWZpZWQgPSBub25fbnVsbCAoa2V5LmRlc2MoKSwg JmtleSk7IH0KCgpib29sIGlzX2FsbF9zZXQgKGluZGV4X3R5cGUgY29uc3QgJmluZGV4LCB2b2lk IGNvbnN0ICpyZWNvcmQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9f KSk7CgoKdm9pZCBsaW5lYXJpemUgKHJlY29yZF90eXBlIGNvbnN0ICYsIHZvaWQgY29uc3QgKiwg b2N0ZXRfdHlwZSAqJikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p KTsKdm9pZCBkZV9saW5lYXJpemUgKHJlY29yZF90eXBlIGNvbnN0ICYsIG9jdGV0X3R5cGUgY29u c3QgKiYsIHZvaWQgKikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p KTsKCgp2b2lkIGxpbmVhcml6ZSAoaW5kZXhfdHlwZSBjb25zdCAmLAogICAgICAgICAgICAgICAg ICAgaW5kZXhfYmFzZV90eXBlIGNvbnN0ICosIG9jdGV0X3R5cGUgKiYpIF9fYXR0cmlidXRlX18o KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CnZvaWQgZGVfbGluZWFyaXplIChpbmRleF90 eXBlIGNvbnN0ICYsCiAgICAgICAgICAgICAgICAgICBvY3RldF90eXBlIGNvbnN0IComLCBpbmRl eF9iYXNlX3R5cGUgKikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p KTsKCgplbnVtIHsgdmFsaWRhdGVfZXhwbGFpbl9sZW5ndGggPSA4MCB9Owpib29sIHZhbGlkYXRl IChyZWNvcmRfdHlwZSBjb25zdCAmLCB2b2lkIGNvbnN0ICosIGNoYXIgKmV4cGxhaW4pIF9fYXR0 cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CmJvb2wgdmFsaWRhdGUgKGlu ZGV4X3R5cGUgY29uc3QgJiwgaW5kZXhfYmFzZV90eXBlIGNvbnN0ICosIGNoYXIgKikgX19hdHRy aWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgp1bnNpZ25lZCBoYXNoX3Jl Y29yZCAocmVjb3JkX3R5cGUgY29uc3QgJmRlc2MsIHZvaWQgY29uc3QgKnJlYykgX19hdHRyaWJ1 dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKdW5zaWduZWQgaGFzaF9yZWNv cmQgKGluZGV4X3R5cGUgY29uc3QgJiwgdm9pZCBjb25zdCAqcmVjKSBfX2F0dHJpYnV0ZV9fKChf X3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgoKdW5zaWduZWQgaGFzaF9rZXkgKGluZGV4 X3R5cGUgY29uc3QgJiwgaW5kZXhfYmFzZV90eXBlIGNvbnN0ICopIF9fYXR0cmlidXRlX18oKF9f cmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKaW50IGNvbXBhcmVfZmllbGRzIChmaWVsZF90 eXBlIGNvbnN0ICpmaWVsZCwKICAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICpmMSwgdm9p ZCBjb25zdCAqZjIsIHVuc2lnbmVkIG4sCiAgICAgICAgICAgICAgICAgICAgaW50ICZzcGVjaWZp ZWQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKaW50IGNv bXBhcmVfcmVjb3JkcyAocmVjb3JkX3R5cGUgY29uc3QgJiwgdm9pZCBjb25zdCAqLCB2b2lkIGNv bnN0ICopIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCmlu dCBjb21wYXJlX3JlY29yZHMgKGluZGV4X3R5cGUgY29uc3QgJiwgdm9pZCBjb25zdCAqLCB2b2lk IGNvbnN0ICopIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoK CgppbnQgY29tcGFyZV9rZXlzIChpbmRleF90eXBlIGNvbnN0ICYsIGludCBzcGVjaWZpZWQsCiAg ICAgICAgICAgICAgICAgIGluZGV4X2Jhc2VfdHlwZSBjb25zdCAqLCBpbmRleF9iYXNlX3R5cGUg Y29uc3QgKiwKICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdXNpdmUgPSBmYWxzZSkgX19hdHRy aWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKaW5saW5lIGludCBjb21wYXJl X2tleXMgKGluZGV4X3R5cGUgY29uc3QgJmluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg aW5kZXhfYmFzZV90eXBlIGNvbnN0ICprMSwgaW5kZXhfYmFzZV90eXBlIGNvbnN0ICprMiwKICAg ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVzaXZlID0gZmFsc2UpIHsKICByZXR1cm4g Y29tcGFyZV9rZXlzIChpbmRleCwgTWluIChrMS0+X3NwZWNpZmllZCwgazItPl9zcGVjaWZpZWQp LAogICAgICAgICAgICAgICAgICAgICAgIGsxLCBrMiwgaW5jbHVzaXZlKTsgfQoKCmludCBzcGVj aWZpZWRfc2FtZSAoaW5kZXhfdHlwZSBjb25zdCAmLAogICAgICAgICAgICAgICAgICAgIGluZGV4 X2Jhc2VfdHlwZSBjb25zdCAqLCBpbmRleF9iYXNlX3R5cGUgY29uc3QgKikgX19hdHRyaWJ1dGVf XygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgppbnQgY29tcGFyZV9rZXlfcmVjb3Jk IChpbmRleF90eXBlIGNvbnN0ICYsCiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X2Jhc2Vf dHlwZSBjb25zdCAqa2V5LCB2b2lkIGNvbnN0ICpyZWNvcmQpIF9fYXR0cmlidXRlX18oKF9fcmVn cGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCnZvaWQgKmNvcHkgKAogIGluZGV4X3R5cGUgY29u c3QgJiwgaW5kZXhfYmFzZV90eXBlIGNvbnN0ICprLCB2b2lkICpyKSBfX2F0dHJpYnV0ZV9fKChf X3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwppbmRleF9iYXNlX3R5cGUgKmNvcHkgKAogIGlu ZGV4X3R5cGUgY29uc3QgJiwgdm9pZCBjb25zdCAqciwgaW5kZXhfYmFzZV90eXBlICprKSBfX2F0 dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgppbmRleF9iYXNlX3R5 cGUgKgpjb3B5IChpbmRleF90eXBlIGNvbnN0ICYsIGluZGV4X2Jhc2VfdHlwZSBjb25zdCAqLAog ICAgICBpbmRleF90eXBlIGNvbnN0ICYsIGluZGV4X2Jhc2VfdHlwZSAqKSBfX2F0dHJpYnV0ZV9f KChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgoKCnN0cnVjdCB1cGRhdGVfdGVzdGVy X3Vuc2V0OwpzdHJ1Y3QgdXBkYXRlX3Rlc3Rlcl9jaGFuZ2VkOwp0ZW1wbGF0ZSA8Y2xhc3M+IGJv b2wgdXBkYXRlX3JlY29yZCAoCiAgcmVjb3JkX3R5cGUgY29uc3QgJiwgdm9pZCBjb25zdCAqc3Jj LCB2b2lkICpkc3QpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7 CgppbmxpbmUgYm9vbCB1cGRhdGVfdW5zZXQgKHJlY29yZF90eXBlIGNvbnN0ICZkLCB2b2lkIGNv bnN0ICpzcmMsIHZvaWQgKmRzdCkgewogIHJldHVybiB1cGRhdGVfcmVjb3JkPHVwZGF0ZV90ZXN0 ZXJfdW5zZXQ+IChkLCBzcmMsIGRzdCk7IH0KaW5saW5lIGJvb2wgdXBkYXRlX2NoYW5nZWQgKHJl Y29yZF90eXBlIGNvbnN0ICZkLCB2b2lkIGNvbnN0ICpzcmMsIHZvaWQgKmRzdCkgewogIHJldHVy biB1cGRhdGVfcmVjb3JkPHVwZGF0ZV90ZXN0ZXJfY2hhbmdlZD4gKGQsIHNyYywgZHN0KTsgfQoK dGVtcGxhdGUgPGNsYXNzIHNvbWVfdD4gaW5saW5lIGJvb2wgdXBkYXRlX3Vuc2V0IChzb21lX3Qg Y29uc3QgJnMsIHNvbWVfdCAmZCkgewogIHJldHVybiB1cGRhdGVfdW5zZXQgKHMuZGVzYygpLCAm cywgJmQpOyB9CnRlbXBsYXRlIDxjbGFzcyBzb21lX3Q+IGlubGluZSBib29sIHVwZGF0ZV9jaGFu Z2VkIChzb21lX3QgY29uc3QgJnMsIHNvbWVfdCAmZCl7CiAgcmV0dXJuIHVwZGF0ZV9jaGFuZ2Vk IChzLmRlc2MoKSwgJnMsICZkKTsgfQoKCgoKCgoKY2xhc3MgVGV4dFNpbmsKewpwdWJsaWM6CiAg dmlydHVhbCBpbnQgdiAoY2hhciBjb25zdCAqLCB2YV9saXN0KSA9IDA7CgogIGludCBvcGVyYXRv cigpIChjaGFyIGNvbnN0ICogLi4uKQogICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKHBy aW50ZiwgMiwgMykpKTsKfTsKCgpjbGFzcyBUZXh0RmlsZVNpbmsgOiBwdWJsaWMgVGV4dFNpbmsK ewogIEZJTEUgKl9mOwpwdWJsaWM6CiAgdmlydHVhbCB+VGV4dEZpbGVTaW5rKCk7CiAgVGV4dEZp bGVTaW5rIChGSUxFICpmKSA6IF9mIChmKSB7fQogIHZpcnR1YWwgaW50IHYgKGNoYXIgY29uc3Qg KiwgdmFfbGlzdCk7Cn07CgoKY2xhc3MgVGV4dEJ1ZmZlciA6IHB1YmxpYyBUZXh0U2luawp7CiAg Y2hhciAqcHRyOwoKcHVibGljOgogIFRleHRCdWZmZXIoKSA6IHB0ciAoMCkge30KICB2aXJ0dWFs IGludCB2IChjaGFyIGNvbnN0ICosIHZhX2xpc3QpOwoKICBvcGVyYXRvciBjaGFyIGNvbnN0ICoo KSBjb25zdCB7IHJldHVybiBwdHI7IH0KfTsKCgoKCgoKCmNsYXNzIExvZ1NpbmsgOiBwdWJsaWMg VGV4dFNpbmsKewogIExvZyAmX2xvZzsKICBMb2c6OnByaW9yaXR5IF9wcmlvcml0eTsKICB1bnNp Z25lZCBfbGluZTsKCnB1YmxpYzoKICBMb2dTaW5rIChMb2cgJmxvZywgTG9nOjpwcmlvcml0eSBw cmlvcml0eSkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKICB2 aXJ0dWFsIH5Mb2dTaW5rKCk7CiAgdmlydHVhbCBpbnQgdiAoY2hhciBjb25zdCAqLCB2YV9saXN0 KTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lCmNoYXIgY29uc3QgKgppZF9vcl9uaWwg KGNoYXIgYnVmWzEwXSwgVCBjb25zdCAmeCkKewogIGlmICh4LmlzX251bGwoKSkKICAgIHJldHVy biAiTlVMTCI7CiAgc25wcmludGYgKGJ1ZiwgMTAsICIldSIsIHgoKSk7CiAgcmV0dXJuIGJ1ZjsK fQoKY2hhciBjb25zdCAqZ2V0X3R5cGVfbmFtZSAoY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIHVu c2lnbmVkIHR5cGVfaWQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9f KSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lCmNoYXIgY29uc3QgKgp0eXBlX25hbWUgKGNo YXIgYnVmWzIwXSwgVCBjb25zdCAmeCkKewogIGlmICh4LmlzX251bGwoKSkKICAgIHJldHVybiAi TlVMTCI7CiAgZ2V0X3R5cGVfbmFtZSAoYnVmLCAyMCwgeCgpKTsKICByZXR1cm4gYnVmOwp9CgoK CnZvaWQgcHJldHR5X3ByaW50IChUZXh0U2luayAmLCBjaGFyIGNvbnN0ICpuYW1lLAogICAgICAg ICAgICAgICAgICAgcmVjb3JkX3R5cGUgY29uc3QgJiwKICAgICAgICAgICAgICAgICAgIHZvaWQg Y29uc3QgKmRhdGEsIGludCBpbmRlbnQgPSAwKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygz KSxfX3N0ZGNhbGxfXykpOwp2b2lkIHByZXR0eV9wcmludCAoVGV4dFNpbmsgJiwgY2hhciBjb25z dCAqbmFtZSwKICAgICAgICAgICAgICAgICAgIGluZGV4X3R5cGUgY29uc3QgJiwKICAgICAgICAg ICAgICAgICAgIGluZGV4X2Jhc2VfdHlwZSBjb25zdCAqa2V5LCBpbnQgaW5kZW50ID0gMCkgX19h dHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKdGVtcGxhdGU8Y2xhc3Mg dGhpbmdfdD4gaW5saW5lCnZvaWQgcHJldHR5X3ByaW50IChUZXh0U2luayAmc2luaywgY2hhciBj b25zdCAqbmFtZSwKICAgICAgICAgICAgICAgICAgIHRoaW5nX3QgJnRoaW5nLCBpbnQgaW5kZW50 ID0gMCkgewogIHByZXR0eV9wcmludCAoc2luaywgbmFtZSwgdGhpbmcuZGVzYygpLCAmdGhpbmcs IGluZGVudCk7IH0KCgp2b2lkIHByZXR0eV9wcmludCAoTG9nICYsIExvZzo6cHJpb3JpdHksIGNo YXIgY29uc3QgKm5hbWUsCiAgICAgICAgICAgICAgICAgICByZWNvcmRfdHlwZSBjb25zdCAmLAog ICAgICAgICAgICAgICAgICAgdm9pZCBjb25zdCAqZGF0YSwgaW50IGluZGVudCA9IDApIF9fYXR0 cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CnZvaWQgcHJldHR5X3ByaW50 IChMb2cgJiwgTG9nOjpwcmlvcml0eSwgY2hhciBjb25zdCAqbmFtZSwKICAgICAgICAgICAgICAg ICAgIGluZGV4X3R5cGUgY29uc3QgJiwKICAgICAgICAgICAgICAgICAgIGluZGV4X2Jhc2VfdHlw ZSBjb25zdCAqa2V5LCBpbnQgaW5kZW50ID0gMCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18o MyksX19zdGRjYWxsX18pKTsKdGVtcGxhdGU8Y2xhc3MgdGhpbmdfdD4gaW5saW5lCnZvaWQgcHJl dHR5X3ByaW50IChMb2cgJmxvZywgTG9nOjpwcmlvcml0eSBwcmlvcml0eSwgY2hhciBjb25zdCAq bmFtZSwKICAgICAgICAgICAgICAgICAgIHRoaW5nX3QgJnRoaW5nLCBpbnQgaW5kZW50ID0gMCkg ewogIHByZXR0eV9wcmludCAobG9nLCBwcmlvcml0eSwgbmFtZSwgdGhpbmcuZGVzYygpLCAmdGhp bmcsIGluZGVudCk7IH0KCnRlbXBsYXRlIDxjbGFzcyBkZXNjX3Q+CnZvaWQgcHJldHR5X3ByaW50 IChMb2cgJmxvZywgTG9nOjpwcmlvcml0eSBwcmlvLCBjaGFyIGNvbnN0ICp3aGVyZSwgaW50IGlu ZGVudCwKICAgICAgICAgICAgICAgICAgIGRlc2NfdCBjb25zdCAmZGVzYywgdm9pZCBjb25zdCAq Y29uc3QgKnAsIHVuc2lnbmVkIG4pIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3Rk Y2FsbF9fKSk7CmZsb2F0IHBvdzEwaWYgKGludCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18o MyksX19zdGRjYWxsX18pKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKZG91YmxlIHBvdzEw aSAoaW50KSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0 cmlidXRlX18oKF9fY29uc3RfXykpOwoKCgoKCgoKbG9uZyBkb3VibGUgcG93MTBpbCAoaW50KSBf X2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18o KF9fY29uc3RfXykpOwoKCgoKaW5saW5lIGZsb2F0IHBvdzEwaSAoZmxvYXQgeCwgaW50IG4pIHsg cmV0dXJuIHggKiBwb3cxMGlmIChuKTsgfQppbmxpbmUgZG91YmxlIHBvdzEwaSAoZG91YmxlIHgs IGludCBuKSB7IHJldHVybiB4ICogcG93MTBpIChuKTsgfQppbmxpbmUgbG9uZyBkb3VibGUgcG93 MTBpIChsb25nIGRvdWJsZSB4LCBpbnQgbikgeyByZXR1cm4geCAqIHBvdzEwaWwgKG4pOyB9CgoK ZXh0ZXJuIGRvdWJsZSBjb25zdCBlZnAxaV90YmxbMzFdOwppbmxpbmUgZG91YmxlIGVmX3BvdzEw aSAoaW50IG4pIHsKICByZXR1cm4gLTEwIDw9IG4gJiYgbiA8PSAyMCA/IGVmcDFpX3RibFtuICsg MTBdIDogcG93MTBpIChuKTsgfQppbnQgZm9ybWF0IChsb25nIGRvdWJsZSB4LCBpbnQgZiwgY2hh ciAqcywgaW50IGwsIGJvb2wgcGx1cyA9IGZhbHNlKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f XygzKSxfX3N0ZGNhbGxfXykpOwoKaW50IGZvcm1hdCAoIGRvdWJsZSB4LCBpbnQgZiwgY2hhciAq cywgaW50IGwsIGJvb2wgcGx1cyA9IGZhbHNlKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygz KSxfX3N0ZGNhbGxfXykpOwppbnQgZm9ybWF0ICggZmxvYXQgeCwgaW50IGYsIGNoYXIgKnMsIGlu dCBsLCBib29sIHBsdXMgPSBmYWxzZSkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19z dGRjYWxsX18pKTsKCgpkb3VibGUgcGljdHVyZSAoZG91YmxlIGRibGUsIGNoYXIgY29uc3QgKmZv cm1hdCwgY2hhciAqb3V0cHV0KSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNh bGxfXykpOwpkb3VibGUgcm91bmRfdG9fZGVjaW1hbF9wcmVjaXNvbiAoZG91YmxlLCBpbnQgcGxh Y2VzKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0cmli dXRlX18oKF9fY29uc3RfXykpOwpkb3VibGUgcHJvbW90ZV9kZWNpbWFsIChkb3VibGUgeCkgX19h dHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKCgppbnQgZnJhY3Rp b25hbF9kZWNpbWFscyAoZmxvYXQsIGZsb2F0IGggPSAxMDApIF9fYXR0cmlidXRlX18oKF9fcmVn cGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CmludCBm cmFjdGlvbmFsX2RlY2ltYWxzIChkb3VibGUsIGRvdWJsZSBoID0gMTAwMDAwKSBfX2F0dHJpYnV0 ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9fY29uc3Rf XykpOwoKCmJvb2wgc2Nhbl9tb25ldGFyeSAoY2hhciBjb25zdCAqJnAsIGRvdWJsZSAmZCwgY2hh ciBzZXAsIGNoYXIgZGVjaW1hbCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRj YWxsX18pKTsKaW5saW5lIGJvb2wgc3RyX3RvX251bSAoY2hhciBjb25zdCAqc3RyLCBmbG9hdCAm dmFsLCBpbnQgYmFzZSA9IDEwKSB7IGNoYXIgKmVuZDsgdmFsID0gc3RydG9kIChzdHIsICZlbmQp OyByZXR1cm4gZW5kWzBdID09ICdcMCc7IH0KaW5saW5lIGJvb2wgc3RyX3RvX251bSAoY2hhciBj b25zdCAqc3RyLCBkb3VibGUgJnZhbCwgaW50IGJhc2UgPSAxMCkgeyBjaGFyICplbmQ7IHZhbCA9 IHN0cnRvZCAoc3RyLCAmZW5kKTsgcmV0dXJuIGVuZFswXSA9PSAnXDAnOyB9CgoKCgp1bmlvbiBs aW5fbWFwXzIgewogIG9jdGV0X3R5cGUgeFtfc2hvcnRfc2l6ZV07CiAgdW5zaWduZWQgc2hvcnQg bjsgfTsKCnVuaW9uIGxpbl9tYXBfNCB7CiAgb2N0ZXRfdHlwZSB4W19pbnRfc2l6ZV07CiAgdW5z aWduZWQgaW50IG47CiAgZmxvYXQgeTsgfTsKCnVuaW9uIGxpbl9tYXBfOCB7CiAgb2N0ZXRfdHlw ZSB4W19sb25nX3NpemVdOwogIHVsbG9uZ190IG47CiAgZG91YmxlIHk7IH07CgppbmxpbmUgdm9p ZApsaW5lYXJpemVfMiAodW5zaWduZWQgc2hvcnQgY29uc3QgKnIsIG9jdGV0X3R5cGUgKiZwLCBp bnQgbiA9IDEpCnsKICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKICAgIHsKCiAgICAgICpy ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0ICo+IChwKSA9IChfX2V4dGVuc2lvbl9fICh7 IHJlZ2lzdGVyIHVuc2lnbmVkIHNob3J0IGludCBfX3YsIF9feCA9IChyW2ldKTsgaWYgKF9fYnVp bHRpbl9jb25zdGFudF9wIChfX3gpKSBfX3YgPSAoKCgoX194KSA+PiA4KSAmIDB4ZmYpIHwgKCgo X194KSAmIDB4ZmYpIDw8IDgpKTsgZWxzZSBfX2FzbV9fICgicm9ydyAkOCwgJXcwIiA6ICI9ciIg KF9fdikgOiAiMCIgKF9feCkgOiAiY2MiKTsgX192OyB9KSk7CiAgICAgIHAgKz0gMjsKCgoKCgoK ICAgIH0KfQoKaW5saW5lIHZvaWQKbGluZWFyaXplXzMgKHVuc2lnbmVkIGludCBjb25zdCAqciwg b2N0ZXRfdHlwZSAqJnAsIGludCBuID0gMSkKewogIGxpbl9tYXBfNCBtOwogIGZvciAoaW50IGkg PSAwOyBpIDwgbjsgKytpKQogICAgewogICAgICBtLm4gPSByW2ldOwogICAgICBwWzBdID0gbS54 W19pbnRfMV07CiAgICAgIHBbMV0gPSBtLnhbX2ludF8yXTsKICAgICAgcFsyXSA9IG0ueFtfaW50 XzNdOwogICAgICBwICs9IDM7CiAgICB9Cn0KCmlubGluZSB2b2lkCmxpbmVhcml6ZV80ICh1bnNp Z25lZCBpbnQgY29uc3QgKnIsIG9jdGV0X3R5cGUgKiZwLCBpbnQgbiA9IDEpCnsKICBmb3IgKGlu dCBpID0gMDsgaSA8IG47ICsraSkKICAgIHsKCiAgICAgICpyZWludGVycHJldF9jYXN0PHVuc2ln bmVkIGludCAqPiAocCkgPSAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQg X192LCBfX3ggPSAocltpXSk7IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0g KCgoKF9feCkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKChfX3gpICYgMHgwMGZmMDAwMCkgPj4g OCkgfCAoKChfX3gpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKChfX3gpICYgMHgwMDAwMDBmZikg PDwgMjQpKTsgZWxzZSBfX2FzbV9fICgiYnN3YXAgJTAiIDogIj1yIiAoX192KSA6ICIwIiAoX194 KSk7IF9fdjsgfSkpOwogICAgICBwICs9IDQ7CiAgICB9Cn0KCmlubGluZSB2b2lkCmxpbmVhcml6 ZV84ICh1bGxvbmdfdCBjb25zdCAqciwgb2N0ZXRfdHlwZSAqJnAsIGludCBuID0gMSkKewogIGZv ciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQogICAgewoKICAgICAgdW5zaWduZWQgY29uc3QgKnMg PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNvbnN0ICo+ICgmcltpXSk7CiAgICAgICpyZWlu dGVycHJldF9jYXN0PHVuc2lnbmVkICo+IChwKSA9IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVy IHVuc2lnbmVkIGludCBfX3YsIF9feCA9IChzWzFdKTsgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9w IChfX3gpKSBfX3YgPSAoKCgoX194KSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKF9feCkgJiAw eDAwZmYwMDAwKSA+PiA4KSB8ICgoKF9feCkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKF9feCkg JiAweDAwMDAwMGZmKSA8PCAyNCkpOyBlbHNlIF9fYXNtX18gKCJic3dhcCAlMCIgOiAiPXIiIChf X3YpIDogIjAiIChfX3gpKTsgX192OyB9KSk7CiAgICAgICpyZWludGVycHJldF9jYXN0PHVuc2ln bmVkICo+IChwICsgNCkgPSAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQg X192LCBfX3ggPSAoc1swXSk7IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0g KCgoKF9feCkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKChfX3gpICYgMHgwMGZmMDAwMCkgPj4g OCkgfCAoKChfX3gpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKChfX3gpICYgMHgwMDAwMDBmZikg PDwgMjQpKTsgZWxzZSBfX2FzbV9fICgiYnN3YXAgJTAiIDogIj1yIiAoX192KSA6ICIwIiAoX194 KSk7IF9fdjsgfSkpOwogICAgICBwICs9IDg7CiAgICB9Cn0KCmlubGluZSB2b2lkCmxpbmVhcml6 ZV9mbG9hdCAoZmxvYXRfdHlwZSBjb25zdCAqciwgb2N0ZXRfdHlwZSAqJnAsIGludCBuID0gMSkK ewogIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQogICAgewogICAgICB1bnNpZ25lZCB4Owog ICAgICB1bnNpZ25lZCBjb25zdCAqcmVwID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjb25z dCAqPiAoJnJbaV0pOwogICAgICBpZiAocmVwWzBdID09IGRvdWJsZV9OYU5fcmVwWzBdICYmCiAg ICAgICAgICByZXBbMV0gPT0gZG91YmxlX05hTl9yZXBbMV0pCiAgICAgICAgeCA9IGZsb2F0X05h Tl9yZXBbMF07CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBmbG9hdCB5ID0gcltpXTsK ICAgICAgICAgIHggPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkICY+ICh5KTsKICAgICAgICB9 CgogICAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQgKj4gKHApID0gKF9fZXh0ZW5z aW9uX18gKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50IF9fdiwgX194ID0gKHgpOyBpZiAoX19idWls dGluX2NvbnN0YW50X3AgKF9feCkpIF9fdiA9ICgoKChfX3gpICYgMHhmZjAwMDAwMCkgPj4gMjQp IHwgKCgoX194KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgoX194KSAmIDB4MDAwMGZmMDApIDw8 IDgpIHwgKCgoX194KSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7IGVsc2UgX19hc21fXyAoImJzd2Fw ICUwIiA6ICI9ciIgKF9fdikgOiAiMCIgKF9feCkpOyBfX3Y7IH0pKTsKICAgICAgcCArPSA0Owog ICAgfQp9CgppbmxpbmUgdm9pZApsaW5lYXJpemVfZG91YmxlIChkb3VibGVfdHlwZSBjb25zdCAq ciwgb2N0ZXRfdHlwZSAqJnAsIGludCBuID0gMSkKewogIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg KytpKQogICAgewoKICAgICAgdW5zaWduZWQgY29uc3QgKnMgPSByZWludGVycHJldF9jYXN0PHVu c2lnbmVkIGNvbnN0ICo+ICgmcltpXSk7CiAgICAgICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVk ICo+IChwKSA9IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3YsIF9f eCA9IChzWzFdKTsgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX3gpKSBfX3YgPSAoKCgoX194 KSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKF9feCkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgo KF9feCkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKF9feCkgJiAweDAwMDAwMGZmKSA8PCAyNCkp OyBlbHNlIF9fYXNtX18gKCJic3dhcCAlMCIgOiAiPXIiIChfX3YpIDogIjAiIChfX3gpKTsgX192 OyB9KSk7CiAgICAgICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkICo+IChwICsgNCkgPSAoX19l eHRlbnNpb25fXyAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgX192LCBfX3ggPSAoc1swXSk7IGlm IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0gKCgoKF9feCkgJiAweGZmMDAwMDAw KSA+PiAyNCkgfCAoKChfX3gpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKChfX3gpICYgMHgwMDAw ZmYwMCkgPDwgOCkgfCAoKChfX3gpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2FzbV9f ICgiYnN3YXAgJTAiIDogIj1yIiAoX192KSA6ICIwIiAoX194KSk7IF9fdjsgfSkpOwogICAgICBw ICs9IDg7CiAgICB9Cn0KCmlubGluZSB2b2lkCmxpbmVhcml6ZV9zdHJpbmcgKHVuc2lnbmVkIGNo YXIgY29uc3QgKnIsIG9jdGV0X3R5cGUgKiZwLCBpbnQgbGVuLCBpbnQgbiA9IDEpCnsKICB3aGls ZSAoLS1uID49IDApCiAgICB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpCiAg ICAgICAgaWYgKChwW2ldID0gcltpXSkgIT0gMCkKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg IGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgd2hpbGUgKCsraSA8IGxlbikKICAgICAgICAg ICAgICBwW2ldID0gJ1wwJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgIHAg Kz0gbGVuOwogICAgICByICs9IGxlbiArIDE7CgogICAgfQp9CgoKaW5saW5lIHZvaWQKZGVfbGlu ZWFyaXplXzIgKG9jdGV0X3R5cGUgY29uc3QgKiZwLCB1bnNpZ25lZCBzaG9ydCAqciwgaW50IG4g PSAxKQp7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiAgICB7CgogICAgICByW2ldID0g KF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgdW5zaWduZWQgc2hvcnQgaW50IF9fdiwgX194ID0g KCpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0IGNvbnN0ICo+IChwKSk7IGlmIChfX2J1 aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0gKCgoKF9feCkgPj4gOCkgJiAweGZmKSB8ICgo KF9feCkgJiAweGZmKSA8PCA4KSk7IGVsc2UgX19hc21fXyAoInJvcncgJDgsICV3MCIgOiAiPXIi IChfX3YpIDogIjAiIChfX3gpIDogImNjIik7IF9fdjsgfSkpOwogICAgICBwICs9IDI7CgoKCgoK CiAgICB9Cn0KCmlubGluZSB2b2lkCmRlX2xpbmVhcml6ZV8zIChvY3RldF90eXBlIGNvbnN0ICom cCwgdW5zaWduZWQgaW50ICpyLCBpbnQgbiA9IDEpCnsKICBmb3IgKGludCBpID0gMDsgaSA8IG47 ICsraSkKICAgIHsKICAgICAgbGluX21hcF80IG07CiAgICAgIG0ueFtfaW50XzBdID0gMDsKICAg ICAgbS54W19pbnRfMV0gPSBwWzBdOwogICAgICBtLnhbX2ludF8yXSA9IHBbMV07CiAgICAgIG0u eFtfaW50XzNdID0gcFsyXTsKICAgICAgcCArPSAzOwogICAgICByW2ldID0gbS5uOwogICAgfQp9 CgppbmxpbmUgdm9pZApkZV9saW5lYXJpemVfNCAob2N0ZXRfdHlwZSBjb25zdCAqJnAsIHVuc2ln bmVkIGludCAqciwgaW50IG4gPSAxKQp7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiAg ICB7CgogICAgICByW2ldID0gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50 IF9fdiwgX194ID0gKCpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNvbnN0ICo+IChwKSk7IGlm IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0gKCgoKF9feCkgJiAweGZmMDAwMDAw KSA+PiAyNCkgfCAoKChfX3gpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKChfX3gpICYgMHgwMDAw ZmYwMCkgPDwgOCkgfCAoKChfX3gpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2FzbV9f ICgiYnN3YXAgJTAiIDogIj1yIiAoX192KSA6ICIwIiAoX194KSk7IF9fdjsgfSkpOwogICAgICBw ICs9IDQ7CiAgICB9Cn0KCmlubGluZSB2b2lkCmRlX2xpbmVhcml6ZV84IChvY3RldF90eXBlIGNv bnN0IComcCwgdWxsb25nX3QgKnIsIGludCBuID0gMSkKewogIGZvciAoaW50IGkgPSAwOyBpIDwg bjsgKytpKQogICAgewoKICAgICAgdW5zaWduZWQgKnMgPSByZWludGVycHJldF9jYXN0PHVuc2ln bmVkICo+ICgmcltpXSk7CiAgICAgIHNbMF0gPSAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciB1 bnNpZ25lZCBpbnQgX192LCBfX3ggPSAoKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY29uc3Qg Kj4gKHAgKyA0KSk7IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0gKCgoKF9f eCkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKChfX3gpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAo KChfX3gpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKChfX3gpICYgMHgwMDAwMDBmZikgPDwgMjQp KTsgZWxzZSBfX2FzbV9fICgiYnN3YXAgJTAiIDogIj1yIiAoX192KSA6ICIwIiAoX194KSk7IF9f djsgfSkpOwogICAgICBzWzFdID0gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgdW5zaWduZWQg aW50IF9fdiwgX194ID0gKCpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNvbnN0ICo+IChwKSk7 IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0gKCgoKF9feCkgJiAweGZmMDAw MDAwKSA+PiAyNCkgfCAoKChfX3gpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKChfX3gpICYgMHgw MDAwZmYwMCkgPDwgOCkgfCAoKChfX3gpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2Fz bV9fICgiYnN3YXAgJTAiIDogIj1yIiAoX192KSA6ICIwIiAoX194KSk7IF9fdjsgfSkpOwogICAg ICBwICs9IDg7CiAgICB9Cn0KCmlubGluZSB2b2lkCmRlX2xpbmVhcml6ZV9mbG9hdCAob2N0ZXRf dHlwZSBjb25zdCAqJnAsIGZsb2F0X3R5cGUgKnIsIGludCBuID0gMSkKewogIGZvciAoaW50IGkg PSAwOyBpIDwgbjsgKytpKQogICAgewoKICAgICAgdW5zaWduZWQgeCA9IChfX2V4dGVuc2lvbl9f ICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3YsIF9feCA9ICgqcmVpbnRlcnByZXRfY2FzdDx1 bnNpZ25lZCBjb25zdCAqPiAocCkpOyBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKF9feCkpIF9f diA9ICgoKChfX3gpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgoX194KSAmIDB4MDBmZjAwMDAp ID4+IDgpIHwgKCgoX194KSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgoX194KSAmIDB4MDAwMDAw ZmYpIDw8IDI0KSk7IGVsc2UgX19hc21fXyAoImJzd2FwICUwIiA6ICI9ciIgKF9fdikgOiAiMCIg KF9feCkpOyBfX3Y7IH0pKTsKICAgICAgaWYgKHggPT0gZmxvYXRfTmFOX3JlcFswXSkKICAgICAg ICByW2ldLnNldF9udWxsKCk7CiAgICAgIGVsc2UKICAgICAgICByW2ldID0gcHJvbW90ZV9kZWNp bWFsIChyZWludGVycHJldF9jYXN0PGZsb2F0ICY+ICh4KSk7CiAgICAgIHAgKz0gNDsKICAgIH0K fQoKaW5saW5lIHZvaWQKZGVfbGluZWFyaXplX2RvdWJsZSAob2N0ZXRfdHlwZSBjb25zdCAqJnAs IGRvdWJsZV90eXBlICpyLCBpbnQgbiA9IDEpCnsKICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsr aSkKICAgIHsKCiAgICAgIHVuc2lnbmVkICpzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCAq PiAoJnJbaV0pOwogICAgICBzWzBdID0gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgdW5zaWdu ZWQgaW50IF9fdiwgX194ID0gKCpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNvbnN0ICo+IChw ICsgNCkpOyBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKF9feCkpIF9fdiA9ICgoKChfX3gpICYg MHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgoX194KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgoX194 KSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgoX194KSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7IGVs c2UgX19hc21fXyAoImJzd2FwICUwIiA6ICI9ciIgKF9fdikgOiAiMCIgKF9feCkpOyBfX3Y7IH0p KTsKICAgICAgc1sxXSA9IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBf X3YsIF9feCA9ICgqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjb25zdCAqPiAocCkpOyBpZiAo X19idWlsdGluX2NvbnN0YW50X3AgKF9feCkpIF9fdiA9ICgoKChfX3gpICYgMHhmZjAwMDAwMCkg Pj4gMjQpIHwgKCgoX194KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgoX194KSAmIDB4MDAwMGZm MDApIDw8IDgpIHwgKCgoX194KSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7IGVsc2UgX19hc21fXyAo ImJzd2FwICUwIiA6ICI9ciIgKF9fdikgOiAiMCIgKF9feCkpOyBfX3Y7IH0pKTsKICAgICAgcCAr PSA4OwogICAgfQp9CgppbmxpbmUgdm9pZApkZV9saW5lYXJpemVfc3RyaW5nIChvY3RldF90eXBl IGNvbnN0IComcCwgdW5zaWduZWQgY2hhciAqciwgaW50IGxlbiwgaW50IG49MSkKewogIHdoaWxl ICgtLW4gPj0gMCkKICAgIHsKICAgICAgbWVtY3B5IChyLCBwLCBsZW4pOwogICAgICBwICs9IGxl bjsKICAgICAgciArPSBsZW47CiAgICAgICpyKysgPSAnXDAnOwoKICAgIH0KfQp0ZW1wbGF0ZSA8 Y2xhc3MgdWludF90PgpjbGFzcyBDUkMKewogIHVpbnRfdCBjcmM7CiAgc3RhdGljIHVpbnRfdCBj b25zdCB0YWJbMjU2XTsKCiAgdm9pZCBhZGQgKHVuc2lnbmVkIGNoYXIgYykgewoKICAgIGNyYyA9 IHRhYltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh cj4gKGNyYykgXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0 aWNfY2FzdDx1bnNpZ25lZCBjaGFyPiAoYykpXQogICAgICBeIGNyYyA+PiA4OyB9CgpwdWJsaWM6 CiAgQ1JDICh1aW50X3QgYyA9IDApIDogY3JjIChjKSB7fQoKICBDUkMgJm9wZXJhdG9yPSAodWlu dF90IGMpIHsKICAgIGNyYyA9IGM7IHJldHVybiAqdGhpczsgfQoKICBvcGVyYXRvciB1aW50X3Qg Y29uc3QgJigpIGNvbnN0IHsKICAgIHJldHVybiBjcmM7IH0KCiAgQ1JDICZvcGVyYXRvcis9ICh1 bnNpZ25lZCBjaGFyIGMpIHsKICAgIGFkZCAoYyk7IHJldHVybiAqdGhpczsgfQoKICBDUkMgJm9w ZXJhdG9yKz0gKHVuc2lnbmVkIHNob3J0IG4pIHsKICAgIGFkZCAobiA+PiA4KTsgYWRkIChuKTsg cmV0dXJuICp0aGlzOyB9CgogIENSQyAmb3BlcmF0b3IrPSAodW5zaWduZWQgbikgewogICAgYWRk IChuID4+IDI0KTsgYWRkIChuID4+IDE2KTsgYWRkIChuID4+IDgpOyBhZGQgKG4pOyByZXR1cm4g KnRoaXM7IH0KCiAgQ1JDICZvcGVyYXRvcis9IChjaGFyIGNvbnN0ICpzKSB7CiAgICB3aGlsZSAo KnMpIGFkZCAoKnMrKyk7IHJldHVybiAqdGhpczsgfQoKICBDUkMgJmFkZCAodm9pZCBjb25zdCAq cCwgdW5zaWduZWQgbGVuKSB7CiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kp CiAgICAgIGFkZCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciBjb25zdCAqPiAocClbaV0pOwog ICAgcmV0dXJuICp0aGlzOyB9CgogIENSQyAodm9pZCBjb25zdCAqcCwgdW5zaWduZWQgbGVuKQog ICAgOiBjcmMgKDApIHsgYWRkIChwLCBsZW4pOyB9Cn07CgoKdGVtcGxhdGU8PiB1bnNpZ25lZCBz aG9ydCBjb25zdCBDUkM8dW5zaWduZWQgc2hvcnQ+Ojp0YWJbMjU2XTsKdGVtcGxhdGU8PiB1bnNp Z25lZCBjb25zdCBDUkM8dW5zaWduZWQ+Ojp0YWJbMjU2XTsKCgp0eXBlZGVmIENSQzx1bnNpZ25l ZCBzaG9ydD4gQ1JDMTY7CnR5cGVkZWYgQ1JDPHVuc2lnbmVkPiBDUkMzMjsKCgoKCgp2ZXJiX2Rl c2NfdHlwZSBjb25zdCB2ZXJiX2Rlc2NbXSA9CnsKCiAgeyB2X2hhbmRsZSwgImhhbmRsZSIgfSwg eyB2X2xvYWQsICJsb2FkIiB9LCB7IHZfc3RvcmUsICJzdG9yZSIgfSwgeyB2X3JlbW92ZSwgInJl bW92ZSIgfSwKCn07CgphZHZlcmJfZGVzY190eXBlIGNvbnN0IGFkdmVyYl9kZXNjW10gPQp7Cgog IHsgYXZfbm9uZSwgIm5vbmUiIH0sIHsgYXZfY29udGQsICJjb250ZCIgfSwgeyBhdl9hbnN3ZXIs ICJhbnN3ZXIiIH0sIHsgYXZfc3luY2gsICJzeW5jaCIgfSwgeyBhdl9yYW5nZSwgInJhbmdlIiB9 LCB7IGF2X2ZpcnN0LCAiZmlyc3QiIH0sIHsgYXZfbGFzdCwgImxhc3QiIH0sCgp9OwoKZmxhZ19k ZXNjX3R5cGUgY29uc3QgZmxhZ19kZXNjW10gPQp7CgogIHsgc2Zfbm9fYW5zd2VyLCAiYW5zd2Vy IiB9LCB7IHNmX25vX3N0YXR1cywgInN0YXR1cyIgfSwgeyBzZl9ub19zdWJzY3JpYmUsICJzdWJz Y3JpYmUiIH0sIHsgc2Zfbm9fcmFuZ2UsICJyYW5nZSIgfSwKCn07CgoKCgpzdHJ1Y3Qgc2VudGVu Y2VfaGVhZGVyX3R5cGUgOiBwdWJsaWMgc2VudGVuY2VfaGVhZGVyX2RlZnMKewoKCgogIGVudW0g eyBoZWFkZXJfYnl0ZXMgPSBzZW50ZW5jZV9oZWFkZXJfZGVmczo6aGVhZGVyX2JpdHMgLyA4IH07 CiAgdW5zaWduZWQgY2hhciB4W2hlYWRlcl9ieXRlc107CgogIHZvaWQgc2V0ICh1bnNpZ25lZCB2 ZXJiLCB1bnNpZ25lZCBhZHZlcmIsIHVuc2lnbmVkIGZsYWdzLAogICAgICAgICAgICB1bnNpZ25l ZCBub3VuLCB1bnNpZ25lZCBjb3VudCkKICB7CiAgICB2ZXJiICY9IHZlcmJfbWFzazsKICAgIGFk dmVyYiAmPSBhZHZlcmJfbWFzazsKICAgIGZsYWdzICY9IGZsYWdzX21hc2s7CiAgICBub3VuICY9 IG5vdW5fbWFzazsKICAgIGNvdW50ICY9IGNvdW50X21hc2s7CgogICAgeFswXSA9IHZlcmIgPDwg NSB8IGFkdmVyYiA8PCAxIHwgZmxhZ3MgPj4gNTsKICAgIHhbMV0gPSBmbGFncyA8PCAzIHwgbm91 biA+PiAxMjsKICAgIHhbMl0gPSBub3VuID4+IDQ7CiAgICB4WzNdID0gbm91biA8PCA0IHwgY291 bnQgPj4gMTY7CiAgICB4WzRdID0gY291bnQgPj4gODsKICAgIHhbNV0gPSBjb3VudDsKICB9CgoK ICBzZW50ZW5jZV9oZWFkZXJfdHlwZSgpIHt9CgoKICBzZW50ZW5jZV9oZWFkZXJfdHlwZSAodW5z aWduZWQgdmIsIHVuc2lnbmVkIGF2LCB1bnNpZ25lZCBmbCwKICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbm4sIHVuc2lnbmVkIGN0KSB7CiAgICBzZXQgKHZiLCBhdiwgZmwsIG5uLCBj dCk7IH0KCgogIHZlcmJfdHlwZSB2ZXJiKCkgY29uc3QgewogICAgcmV0dXJuIHN0YXRpY19jYXN0 PHZlcmJfdHlwZT4gKHhbMF0gPj4gNSAmIHZlcmJfbWFzayk7IH0KICBhZHZlcmJfdHlwZSBhZHZl cmIoKSBjb25zdCB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8YWR2ZXJiX3R5cGU+ICh4WzBdID4+ IDEgJiBhZHZlcmJfbWFzayk7IH0KICB1bnNpZ25lZCBmbGFncygpIGNvbnN0IHsKICAgIHJldHVy biAoeFswXSA8PCA1IHwgeFsxXSA+PiAzKSAmIGZsYWdzX21hc2s7IH0KICB1bnNpZ25lZCBub3Vu KCkgY29uc3QgewogICAgcmV0dXJuICh4WzFdIDw8IDEyIHwgeFsyXSA8PCA0IHwgeFszXSA+PiA0 KSAmIG5vdW5fbWFzazsgfQogIHVuc2lnbmVkIGNvdW50KCkgY29uc3QgewogICAgcmV0dXJuICh4 WzNdIDw8IDE2IHwgeFs0XSA8PCA4IHwgeFs1XSkgJiBjb3VudF9tYXNrOyB9Cn07CgoKU2VudGVu Y2U6OlNlbnRlbmNlIChTZW50ZW5jZSAmcykKICA6IHNlbnRlbmNlX3R5cGUgKHMpCiAgLCBfc2l6 ZSAocy5fc2l6ZSkKICAsIF9kYXRhIChzLl9kYXRhKQp7CiAgbmV3IChzdGF0aWNfY2FzdDxzZW50 ZW5jZV90eXBlICo+ICgmcykpIHNlbnRlbmNlX3R5cGU7CiAgcy5fc2l6ZSA9IDA7CiAgcy5fZGF0 YSA9IDA7Cn0KClNlbnRlbmNlICYKU2VudGVuY2U6Om9wZXJhdG9yPSAoU2VudGVuY2UgJnMpCnsK ICBzZW50ZW5jZV90eXBlOjpvcGVyYXRvcj0gKHMpOwogIF9zaXplID0gcy5fc2l6ZTsKICBfZGF0 YSA9IHMuX2RhdGE7CiAgbmV3IChzdGF0aWNfY2FzdDxzZW50ZW5jZV90eXBlICo+ICgmcykpIHNl bnRlbmNlX3R5cGU7CiAgcy5fc2l6ZSA9IDA7CiAgcy5fZGF0YSA9IDA7CiAgcmV0dXJuICp0aGlz Owp9CgoKdm9pZApTZW50ZW5jZTo6bGluZWFyaXplIChvY3RldF90eXBlIComcCkgY29uc3QKewoK ICBzZW50ZW5jZV9oZWFkZXJfdHlwZSBoIChfdmVyYiwgX2FkdmVyYiwgX2ZsYWdzLCBfbm91biwg X2NvdW50KTsKCgogIG9jdGV0X3R5cGUgKnEgPSBwOwogIG1lbWNweSAocSwgaC54LCBzaXplb2Yg aC54KTsKICBxICs9IHNpemVvZiBoLng7CgogIENSQzE2IGNyYzsKICBpZiAoIWlzX2luZGV4KCkp CiAgICB7CiAgICAgIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjID0gTGluZ286OnJlY29yZCAoX25v dW4pOwogICAgICBjcmMgPSBMaW5nbzo6aW5mbyAoZGVzYykuY3JjOwogICAgICBpZiAoJmRlc2Mg PT0gJnJkX3NvbDNfbm9fcmVjb3JkKQogICAgICAgIGlmIChfc2l6ZSA8IGxpbmVhcl9zaXplKQog ICAgICAgICAgYmFkX2NvbmRpdGlvbl9mdW5jICgibWVzc2FnZXMuY2MiLCAxMzApOwogICAgICAg IGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IF9zaXplIC0gbGlu ZWFyX3NpemU7CiAgICAgICAgICAgIG1lbWNweSAocSwgX2RhdGEsIHNpemUpOwogICAgICAgICAg ICBxICs9IHNpemU7CiAgICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBzd2l0Y2ggKF9jb3Vu dCkKICAgICAgICAgIHsKICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICBjYXNlIDE6CiAgICAgICAgICAgIDo6bGluZWFyaXplIChkZXNjLCBfZGF0YSwgcSk7CiAg ICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGZvciAodW5zaWdu ZWQgc2hvcnQgaSA9IDA7IGkgPCBfY291bnQ7ICsraSkKICAgICAgICAgICAgICA6OmxpbmVhcml6 ZSAoZGVzYywgc3RhdGljX2Nhc3Q8dm9pZCAqKj4gKF9kYXRhKVtpXSwgcSk7CiAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgfQogICAgfQogIGVsc2UKICAgIHsKICAgICAgaW5kZXhfdHlwZSBj b25zdCAmaW5kZXggPSBMaW5nbzo6aW5kZXggKF9ub3VuKTsKICAgICAgY3JjID0gTGluZ286Omlu Zm8gKGluZGV4KS5jcmM7CiAgICAgIHN3aXRjaCAoX2NvdW50KQogICAgICAgIHsKICAgICAgICBj YXNlIDA6CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICA6OmxpbmVh cml6ZSAoaW5kZXgsIHN0YXRpY19jYXN0PGluZGV4X2Jhc2VfdHlwZSAqPiAoX2RhdGEpLCBxKTsK ICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgZm9yICh1bnNpZ25lZCBz aG9ydCBpID0gMDsgaSA8IF9jb3VudDsgKytpKQogICAgICAgICAgICA6OmxpbmVhcml6ZSAoaW5k ZXgsIHN0YXRpY19jYXN0PGluZGV4X2Jhc2VfdHlwZSAqKj4gKF9kYXRhKVtpXSwgcSk7CiAgICAg ICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgY3JjLmFkZCAocCwgcSAtIHApOwogIGxpbmVh cml6ZV8yICgmc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQgY29uc3QgJj4gKGNyYyksIHEpOwog IHAgPSBxOwp9CgoKYm9vbApTZW50ZW5jZTo6ZGVfbGluZWFyaXplIChvY3RldF90eXBlIGNvbnN0 IComcCwgdW5zaWduZWQgJm4sCiAgICAgICAgICAgICAgICAgICAgICAgIExvZzo6cHJpb3JpdHkg ZXJyb3JfcHJpb3JpdHkpCnsKICBzdGF0aWMgY2hhciBjb25zdCBoZXJlW10gPSAiU2VudGVuY2U6 OmRlX2xpbmVhcml6ZSI7CgoKICBmcmVlX2RhdGEoKTsKCgogIGlmIChuIDwgbGluZWFyX3NpemUp CiAgICB7CiAgICAgIG1haW5sb2cgKGVycm9yX3ByaW9yaXR5LCAiJXM6IE1lc3NhZ2UgdG9vIHNo b3J0LiIsIGhlcmUpOwogICAgICBwICs9IG47CiAgICAgIG4gPSAwOwogICAgICByZXR1cm4gZmFs c2U7OwogICAgfQoKCiAgb2N0ZXRfdHlwZSBjb25zdCAqcSA9IHA7CiAgc2VudGVuY2VfaGVhZGVy X3R5cGUgaDsKICBtZW1jcHkgKGgueCwgcSwgc2l6ZW9mIGgueCk7CiAgcSArPSBzaXplb2YgaC54 OwoKCiAgX3ZlcmIgPSBoLnZlcmIoKTsKICBfYWR2ZXJiID0gaC5hZHZlcmIoKTsKICBfZmxhZ3Mg PSBoLmZsYWdzKCk7CiAgX25vdW4gPSBoLm5vdW4oKTsKICBfY291bnQgPSBoLmNvdW50KCk7CgoK ICBDUkMxNiBjcmM7CgoKICBpZiAoIShfdmVyYiA8IGVudW1fdmVyYl90eXBlX21heCkpCiAgICB7 CiAgICAgIG1haW5sb2cgKExvZzo6ZXJyLCAiJXM6IGJhZCB2ZXJiICVkLiIsIGhlcmUsIF92ZXJi KTsKICAgICAgZ290byBiYWQ7CiAgICB9CiAgaWYgKCEoX2FkdmVyYiA8IGVudW1fYWR2ZXJiX3R5 cGVfbWF4KSkKICAgIHsKICAgICAgbWFpbmxvZyAoTG9nOjplcnIsICIlczogYmFkIGFkdmVyYiAl ZC4iLCBoZXJlLCBfYWR2ZXJiKTsKICAgICAgZ290byBiYWQ7CiAgICB9CgogIGlmICghaXNfaW5k ZXgoKSkKICAgIHsKICAgICAgcmVjb3JkX3R5cGUgY29uc3QgKmRlc2MgPSBMaW5nbzo6Z2V0X3Jl Y29yZCAoX25vdW4pOwogICAgICBpZiAoZGVzYyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIG1h aW5sb2cgKGVycm9yX3ByaW9yaXR5LCAiJXM6IE1lc3NhZ2UgJWQgbm90IGtub3duLiIsCiAgICAg ICAgICAgICAgICAgICBoZXJlLCBfbm91bik7CiAgICAgICAgICBnb3RvIGJhZDsKICAgICAgICB9 CiAgICAgIHJlY29yZF9pbmZvX3QgY29uc3QgJmluZm8gPSBMaW5nbzo6aW5mbyAoKmRlc2MpOwog ICAgICB1bnNpZ25lZCBzaXplID0gX2NvdW50ICogaW5mby5saW5lYXJfc2l6ZTsKICAgICAgaWYg KHEgKyBzaXplID4gcCArIG4pCiAgICAgICAgewogICAgICAgICAgY2hhciBidWZbODBdOwogICAg ICAgICAgbWFpbmxvZyAoZXJyb3JfcHJpb3JpdHksICIlczogTWVzc2FnZSAlcyB0b28gc2hvcnQu IiwKICAgICAgICAgICAgICAgICAgIGhlcmUsIHRvX3N0cmluZyAoYnVmLCBzaXplb2YgYnVmKSk7 CiAgICAgICAgICBnb3RvIGJhZDsKICAgICAgICB9CiAgICAgIGNyYyA9IGluZm8uY3JjOwogICAg ICBpZiAoZGVzYyA9PSAmcmRfc29sM19ub19yZWNvcmQpCgoKCiAgICAgICAgaWYgKG4gPCBsaW5l YXJfc2l6ZSkKICAgICAgICAgIGJhZF9jb25kaXRpb25fZnVuYyAoIm1lc3NhZ2VzLmNjIiwgMjQ0 KTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBu IC0gbGluZWFyX3NpemU7CiAgICAgICAgICAgIF9kYXRhID0gbWFsbG9jIChzaXplKTsKICAgICAg ICAgICAgbWVtY3B5IChfZGF0YSwgcSwgc2l6ZSk7CiAgICAgICAgICAgIHEgKz0gc2l6ZTsKICAg ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHN3aXRjaCAoX2NvdW50KQogICAgICAgICAgewog ICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICBfZGF0YSA9IDA7CiAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICBfZGF0YSA9IG1hbGxvYyAoZGVzYy0+c2l6 ZSk7CiAgICAgICAgICAgIDo6ZGVfbGluZWFyaXplICgqZGVzYywgcSwgX2RhdGEpOwogICAgICAg ICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIF9kYXRhID0gKHN0YXRp Y19jYXN0PHZvaWQgKiAqPiAobWFsbG9jICgoX2NvdW50KSAqIHNpemVvZiAodm9pZCAqKSkpKTsK ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBpID0gMDsgaSA8IF9jb3VudDsgaSsrKQog ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZvaWQgKml0ZW0gPSBtYWxsb2MgKGRlc2Mt PnNpemUpOwogICAgICAgICAgICAgICAgOjpkZV9saW5lYXJpemUgKCpkZXNjLCBxLCBpdGVtKTsK ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZvaWQgKio+IChfZGF0YSlbaV0gPSBpdGVtOwog ICAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICB9CiAgZWxz ZQogICAgewogICAgICBpbmRleF90eXBlIGNvbnN0ICppbmRleCA9IExpbmdvOjpnZXRfaW5kZXgg KF9ub3VuKTsKICAgICAgaWYgKGluZGV4ID09IDApCiAgICAgICAgewogICAgICAgICAgbWFpbmxv ZyAoZXJyb3JfcHJpb3JpdHksICIlczogTWVzc2FnZSAlZCBub3Qga25vd24uIiwKICAgICAgICAg ICAgICAgICAgIGhlcmUsIF9ub3VuKTsKICAgICAgICAgIGdvdG8gYmFkOwogICAgICAgIH0KICAg ICAgaW5kZXhfaW5mb190IGNvbnN0ICZpbmZvID0gTGluZ286OmluZm8gKCppbmRleCk7CiAgICAg IHVuc2lnbmVkIHNpemUgPSBfY291bnQgKiBpbmZvLmxpbmVhcl9zaXplOwogICAgICBpZiAocSAr IHNpemUgPiBwICsgbikKICAgICAgICB7CiAgICAgICAgICBjaGFyIGJ1Zls4MF07CiAgICAgICAg ICBtYWlubG9nIChlcnJvcl9wcmlvcml0eSwgIiVzOiBNZXNzYWdlICVzIHRvbyBzaG9ydC4iLAog ICAgICAgICAgICAgICAgICAgaGVyZSwgdG9fc3RyaW5nIChidWYsIHNpemVvZiBidWYpKTsKICAg ICAgICAgIGdvdG8gYmFkOwogICAgICAgIH0KICAgICAgY3JjID0gaW5mby5jcmM7CiAgICAgIHN3 aXRjaCAoX2NvdW50KQogICAgICAgIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICBfZGF0YSA9 IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBfZGF0YSA9IG1h bGxvYyAoaW5kZXgtPnNpemUpOwogICAgICAgICAgOjpkZV9saW5lYXJpemUgKCppbmRleCwgcSwg c3RhdGljX2Nhc3Q8aW5kZXhfYmFzZV90eXBlICo+IChfZGF0YSkpOwogICAgICAgICAgYnJlYWs7 CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIF9kYXRhID0gKHN0YXRpY19jYXN0PHZvaWQgKiAq PiAobWFsbG9jICgoX2NvdW50KSAqIHNpemVvZiAodm9pZCAqKSkpKTsKICAgICAgICAgIGZvciAo dW5zaWduZWQgc2hvcnQgaSA9IDA7IGkgPCBfY291bnQ7IGkrKykKICAgICAgICAgICAgewogICAg ICAgICAgICAgIHZvaWQgKml0ZW0gPSBtYWxsb2MgKGluZGV4LT5zaXplKTsKICAgICAgICAgICAg ICA6OmRlX2xpbmVhcml6ZSAoKmluZGV4LCBxLCBzdGF0aWNfY2FzdDxpbmRleF9iYXNlX3R5cGUg Kj4gKGl0ZW0pKTsKICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2b2lkICoqPiAoX2RhdGEpW2ld ID0gaXRlbTsKICAgICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQog IGNyYy5hZGQgKHAsIHEgLSBwKTsKICB1bnNpZ25lZCBzaG9ydCBzZW50X2NyYzsKICBkZV9saW5l YXJpemVfMiAocSwgJnNlbnRfY3JjKTsKICBpZiAoY3JjICE9IHNlbnRfY3JjKQogICAgewogICAg ICBjaGFyIGJ1Zls4MF07CiAgICAgIG1haW5sb2cgKGVycm9yX3ByaW9yaXR5LCAiJXM6IE1lc3Nh Z2UgJXMgaW5jb21wYXRpYmxlLiIsCiAgICAgICAgICAgICAgIGhlcmUsIHRvX3N0cmluZyAoYnVm LCBzaXplb2YgYnVmKSk7CiAgICAgIGdvdG8gYmFkOwogICAgfQogIF9zaXplID0gcSAtIHA7CiAg biAtPSBfc2l6ZTsKICBwID0gcTsKICByZXR1cm4gdHJ1ZTsKCiBiYWQ6CiAgbiAtPSBxIC0gcDsK ICBwID0gcTsKICByZXR1cm4gZmFsc2U7Cn0KCgpjaGFyICoKU2VudGVuY2U6OnRvX3N0cmluZyAo Y2hhciAqcywgdW5zaWduZWQgbikgY29uc3QKewogIGNoYXIgKnogPSBzICsgbiwgKnAgPSBzOwog IGlmIChfdmVyYiAhPSB2X2hhbmRsZSB8fCBfYWR2ZXJiICE9IGF2X25vbmUgfHwgX2ZsYWdzICE9 IDApCiAgICB7CiAgICAgIHAgKz0gc25wcmludGYgKHAsIHogLSBwLCAiJXMiLCB2ZXJiX2Rlc2Nb X3ZlcmJdLnRleHQpOwogICAgICBpZiAoX2FkdmVyYiAhPSBhdl9ub25lIHx8IF9mbGFncyAhPSAw KQogICAgICAgIHsKICAgICAgICAgIGNoYXIgZGVsID0gJygnOwogICAgICAgICAgaWYgKF9hZHZl cmIgIT0gYXZfbm9uZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHAgKz0gc25wcmludGYg KHAsIHogLSBwLCAiJWMlcyIsIGRlbCwgYWR2ZXJiX2Rlc2NbX2FkdmVyYl0udGV4dCk7CiAgICAg ICAgICAgICAgZGVsID0gJywnOwogICAgICAgICAgICB9CiAgICAgICAgICBmb3IgKHVuc2lnbmVk IGYgPSAwOyBmIDwgZW51bV9zZW50ZW5jZV9mbGFnX21heDsgKytmKQogICAgICAgICAgICBpZiAo X2ZsYWdzICYgMSA8PCBmKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHAgKz0gc25w cmludGYgKHAsIHogLSBwLCAiJWMlcyIsIGRlbCwgZmxhZ19kZXNjW2ZdLnRleHQpOwogICAgICAg ICAgICAgICAgZGVsID0gJywnOwogICAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChwIDwgeikK ICAgICAgICAgICAgKnArKyA9ICcpJzsKICAgICAgICB9CiAgICAgIGlmIChwIDwgeikKICAgICAg ICAqcCsrID0gJyAnOwogICAgfQogIHNucHJpbnRmIChwLCB6IC0gcCwgIiVzIiwgaXNfaW5kZXgo KQogICAgICAgICAgICA/IExpbmdvOjppbmRleCAoX25vdW4pLm5hbWUKICAgICAgICAgICAgOiBM aW5nbzo6cmVjb3JkIChfbm91bikubmFtZSk7CiAgcmV0dXJuIHM7Cn0KCgp1bnNpZ25lZApTZW50 ZW5jZTo6c3RlYWxfZGF0YSAodm9pZCAqKnApCnsKICB1bnNpZ25lZCBuID0gX2NvdW50OwogIGlm IChwKQogICAgbWVtY3B5IChwLCBhbGxfZGF0YSgpLCBuICogc2l6ZW9mICh2b2lkICopKTsKICBz d2l0Y2ggKG4pCiAgICB7CiAgICBjYXNlIDA6CiAgICAgIGJyZWFrOwogICAgY2FzZSAxOgogICAg ICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGZyZWUgKF9kYXRhKTsKICAgIH0KCgogIG5ldyAo c3RhdGljX2Nhc3Q8c2VudGVuY2VfdHlwZSAqPiAodGhpcykpIHNlbnRlbmNlX3R5cGU7CiAgX2Rh dGEgPSAwOwogIF9zaXplID0gbGluZWFyX3NpemU7CiAgcmV0dXJuIG47Cn0KCnZvaWQKU2VudGVu Y2U6OmRlZXBlbigpCnsKICB1bnNpZ25lZCBzaXplID0gaXNfaW5kZXgoKQogICAgPyBMaW5nbzo6 aW5kZXggKF9ub3VuKS5zaXplCiAgICA6IExpbmdvOjpyZWNvcmQgKF9ub3VuKS5zaXplOwogIHZv aWQgKipwID0gYWxsX2RhdGEoKTsKICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgX2NvdW50OyAr K2kpCiAgICB7CiAgICAgIHZvaWQgKnEgPSBtYWxsb2MgKHNpemUpOwogICAgICBtZW1jcHkgKHEs IHBbaV0sIHNpemUpOwogICAgICBwW2ldID0gcTsKICAgIH0KfQoKdm9pZApTZW50ZW5jZTo6cHJl dHR5X3ByaW50IChMb2cgJmxvZywgTG9nOjpwcmlvcml0eSBwcmlvcml0eSwKICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciBjb25zdCAqd2hlcmUsIGludCBpbmRlbnQpCnsKICBpZiAoIWxvZyAo cHJpb3JpdHkpKQogICAgcmV0dXJuOwogIGNoYXIgYnVmWzgwXTsKICBsb2cgKHByaW9yaXR5LCAi JXMsICVzOiIsIHdoZXJlLCB0b19zdHJpbmcgKGJ1Ziwgc2l6ZW9mIGJ1ZikpOwogIGlmIChpc19p bmRleCgpKQogICAgOjpwcmV0dHlfcHJpbnQgKGxvZywgcHJpb3JpdHksIHdoZXJlLCBpbmRlbnQs CiAgICAgICAgICAgICAgICAgICAgTGluZ286OmluZGV4IChfbm91biksIGFsbF9kYXRhKCksIF9j b3VudCk7CiAgZWxzZQogICAgOjpwcmV0dHlfcHJpbnQgKGxvZywgcHJpb3JpdHksIHdoZXJlLCBp bmRlbnQsCiAgICAgICAgICAgICAgICAgICAgTGluZ286OnJlY29yZCAoX25vdW4pLCBhbGxfZGF0 YSgpLCBfY291bnQpOwp9Cgp2b2lkCk1lc3NhZ2U6OmxpbmVhcml6ZSAob2N0ZXRfdHlwZSAqJnAp IGNvbnN0CnsKICBsaW5lYXJpemVfMiAoJl9teV9yZWYsIHApOwogIGxpbmVhcml6ZV8yICgmX3ly X3JlZiwgcCk7CiAgZm9yIChRdWV1ZTxTZW50ZW5jZT46Okl0IHFpICgqdGhpcyk7IHFpKCk7ICsr cWkpCiAgICBxaS0+bGluZWFyaXplIChwKTsKfQoKYm9vbApNZXNzYWdlOjpkZV9saW5lYXJpemUg KHBhcnRuZXJfaWRfdHlwZSBwaWQsCiAgICAgICAgICAgICAgICAgICAgICAgb2N0ZXRfdHlwZSBj b25zdCAqJnAsIHVuc2lnbmVkIG4sCiAgICAgICAgICAgICAgICAgICAgICAgTG9nOjpwcmlvcml0 eSBlcnJvcl9wcmlvcml0eSkKewogIF9zaXplID0gbGluZWFyX3NpemU7CiAgX3NlbmRlciA9IHBp ZDsKICBkZV9saW5lYXJpemVfMiAocCwgJl9teV9yZWYpOyBuIC09IDI7CiAgZGVfbGluZWFyaXpl XzIgKHAsICZfeXJfcmVmKTsgbiAtPSAyOwoKCiAgd2hpbGUgKGludCAobikgPiAwKQogICAgewog ICAgICBTZW50ZW5jZSAqcyA9IG5ldyBTZW50ZW5jZTsKICAgICAgaWYgKCFzLT5kZV9saW5lYXJp emUgKHAsIG4sIGVycm9yX3ByaW9yaXR5KSkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgczsK ICAgICAgICAgIGZyZWVfZGF0YSgpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0K ICAgICAgYWRkICgqcyk7CiAgICB9CiAgcmV0dXJuIHRydWU7Cn0KCnZvaWQKTWVzc2FnZTo6ZnJl ZV9kYXRhKCkKewogIGZvciAoU2VudGVuY2UgKnM7IChzID0gcmVtb3ZlKCkpICE9IDA7IGRlbGV0 ZSBzKQogICAgcy0+ZnJlZV9kYXRhKCk7Cn0KCnZvaWQKTWVzc2FnZTo6cHJldHR5X3ByaW50IChM b2cgJmxvZywgTG9nOjpwcmlvcml0eSBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICBj aGFyIGNvbnN0ICp3aGVyZSwgaW50IGluZGVudCkKewogIGlmICghbG9nIChwcmlvcml0eSkpCiAg ICByZXR1cm47CiAgbG9nIChwcmlvcml0eSwgIiVzLCB5cj0lZCwgbXI9JWQ6Iiwgd2hlcmUsIF95 cl9yZWYsIF9teV9yZWYpOwogIHVuc2lnbmVkIGkgPSAwOwogIGZvciAoUXVldWU8U2VudGVuY2U+ OjpJdCBxaSAoKnRoaXMpOyBxaSgpOyArK3FpKQogICAgewogICAgICBjaGFyIGJ1ZlszMl07CiAg ICAgIHNucHJpbnRmIChidWYsIHNpemVvZiBidWYsICJTZW50ZW5jZSAlZCIsIGkrKyk7CiAgICAg IHFpLT5wcmV0dHlfcHJpbnQgKGxvZywgcHJpb3JpdHksIGJ1ZiwgMik7CiAgICB9Cn0KCgoKTWVz c2FnZTo6SGFuZGxlcjo6fkhhbmRsZXIoKSB7fQo=