From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20110 invoked by alias); 30 Apr 2003 16:46: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 20087 invoked by uid 71); 30 Apr 2003 16:46:00 -0000 Resent-Date: 30 Apr 2003 16:46:00 -0000 Resent-Message-ID: <20030430164600.20086.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, dje@watson.ibm.com Received: (qmail 15126 invoked by uid 48); 30 Apr 2003 16:39:21 -0000 Message-Id: <20030430163921.15125.qmail@sources.redhat.com> Date: Wed, 30 Apr 2003 16:46:00 -0000 From: dje@watson.ibm.com Reply-To: dje@watson.ibm.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/10568: Template instantiation failure on AIX X-SW-Source: 2003-04/txt/msg01455.txt.bz2 List-Id: >Number: 10568 >Category: c++ >Synopsis: Template instantiation failure on AIX >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Wed Apr 30 16:46:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: dje@watson.ibm.com >Release: gcc-3.4 200304XX (experimental) >Organization: >Environment: powerpc-ibm-aix4.3.3.0 >Description: Late April C++ front-end changes cause new libstdc++ testcase failures. The testcase now produces linker errors for templates which are explicitly instantiated in the source code. >How-To-Repeat: g++ -O2 -g -lv3test -L/gcc/dje/build/powerpc-ibm-aix4.3.3.0-20030428/powerpc-ibm-aix4.3.3.0//libstdc++-v3/testsuite -lm >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="3983-fstream.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="3983-fstream.ii" IyAxICIvZ2NjL2RqZS9zcmMvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yN19pby9iYXNpY19pc3Ry ZWFtL3NlbnRyeS9jaGFyLzM5ODMtZnN0cmVhbS5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxj b21tYW5kIGxpbmU+IgoKCgoKCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk ZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvc3RkYysrLmgiIDEKIyA4ICI8Y29tbWFuZCBs aW5lPiIgMgojIDEgIi9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvdGVzdHN1aXRlLzI3X2lvL2Jh c2ljX2lzdHJlYW0vc2VudHJ5L2NoYXIvMzk4My1mc3RyZWFtLmNjIgojIDMyICIvZ2NjL2RqZS9z cmMvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yN19pby9iYXNpY19pc3RyZWFtL3NlbnRyeS9jaGFy LzM5ODMtZnN0cmVhbS5jYyIKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv ZnN0cmVhbSIgMQojIDQ0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvZnN0cmVh bSIgMwoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaXN0cmVhbSIgMSAz CiMgNDQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCgojIDEg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pb3MiIDEgMwojIDQzICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaW9zIiAzCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9pb3Nmd2QiIDEgMwojIDQ0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr LXYzL2luY2x1ZGUvaW9zZndkIiAzCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j bHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM1ICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9i aXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM2ICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRz L2MrK2NvbmZpZy5oIiAyIDMKIyA0NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl L2lvc2Z3ZCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAvYml0cy9jKytsb2NhbGUuaCIgMSAzCiMgNDAgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvYysrbG9j YWxlLmgiIDMKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nsb2NhbGUi IDEgMwojIDQ4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY2xvY2FsZSIgMwoK IyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9p bmNsdWRlL2xvY2FsZS5oIiAxIDMgNAojIDQ1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKIyAxICIvdXNyL2lu Y2x1ZGUvc3RhbmRhcmRzLmgiIDEgMyA0CiMgNDYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvbG9jYWxlLmgiIDIgMyA0CgoKCmV4dGVy biAiQyIgewojIDYwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw NDI4L2djYy9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKc3RydWN0IGxjb252IHsKICAgY2hhciAqZGVj aW1hbF9wb2ludDsKICAgY2hhciAqdGhvdXNhbmRzX3NlcDsKICAgY2hhciAqZ3JvdXBpbmc7CiAg IGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwogICBjaGFy ICptb25fZGVjaW1hbF9wb2ludDsKICAgY2hhciAqbW9uX3Rob3VzYW5kc19zZXA7CiAgIGNoYXIg Km1vbl9ncm91cGluZzsKICAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICAgY2hhciAqbmVnYXRpdmVf c2lnbjsKICAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAgIGNoYXIgZnJhY19kaWdpdHM7CiAgIGNo YXIgcF9jc19wcmVjZWRlczsKICAgY2hhciBwX3NlcF9ieV9zcGFjZTsKICAgY2hhciBuX2NzX3By ZWNlZGVzOwogICBjaGFyIG5fc2VwX2J5X3NwYWNlOwogICBjaGFyIHBfc2lnbl9wb3NuOwogICBj aGFyIG5fc2lnbl9wb3NuOwoKCiAgIGNoYXIgKmxlZnRfcGFyZW50aGVzaXM7CiAgIGNoYXIgKnJp Z2h0X3BhcmVudGhlc2lzOwoKCgoKCn0gOwojIDEwNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9sb2NhbGUuaCIgMyA0CnN0cnVjdCBs Y29udiAqbG9jYWxlY29udih2b2lkKTsKY2hhciAqc2V0bG9jYWxlKGludCwgY29uc3QgY2hhciAq KTsKCgoKCgp0eXBlZGVmIHN0cnVjdCBsY29udiBsY29udjsKCgoKfQojIDUwICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY2xvY2FsZSIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0ZAp7 CiAgdXNpbmcgOjpsY29udjsKICB1c2luZyA6OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2FsZWNv bnY7Cn0KIyA0MiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvYml0cy9jKytsb2NhbGUuaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewogIHR5 cGVkZWYgaW50KiBfX2NfbG9jYWxlOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAg aW50CiAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAogICAgICAgY29uc3QgaW50IF9f c2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAogICAgICAgY29uc3QgY2hhciogX19m bXQsCiAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0xKQog ICAgewogICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZSgtMSwgKDApKTsKICAgICAgY2hhciog X19zYXYgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKHN0cmxlbihfX29sZCkgKyAxKSk7CiAg ICAgIGlmIChfX3NhdikKICAgICAgICBzdHJjcHkoX19zYXYsIF9fb2xkKTsKICAgICAgc2V0bG9j YWxlKC0xLCAiQyIpOwoKICAgICAgaW50IF9fcmV0OwoKCgoKCgogICAgICBpZiAoX19wcmVjID49 IDApCiAgICAgICAgX19yZXQgPSBzcHJpbnRmKF9fb3V0LCBfX2ZtdCwgX19wcmVjLCBfX3YpOwog ICAgICBlbHNlCiAgICAgICAgX19yZXQgPSBzcHJpbnRmKF9fb3V0LCBfX2ZtdCwgX192KTsKCiAg ICAgIHNldGxvY2FsZSgtMSwgX19zYXYpOwogICAgICBmcmVlKF9fc2F2KTsKICAgICAgcmV0dXJu IF9fcmV0OwogICAgfQp9CiMgNDcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9p b3Nmd2QiIDIgMwojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jY3R5cGUi IDEgMwojIDQ3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY2N0eXBlIiAzCgoK IyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9p bmNsdWRlL2N0eXBlLmgiIDEgMyA0CiMgNzkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvY3R5cGUuaCIgMyA0CiBleHRlcm4gaW50IGlz YWxwaGEoaW50KTsKIGV4dGVybiBpbnQgaXNhbG51bShpbnQpOwogZXh0ZXJuIGludCBpc2NudHJs KGludCk7CiBleHRlcm4gaW50IGlzZGlnaXQoaW50KTsKIGV4dGVybiBpbnQgaXNncmFwaChpbnQp OwogZXh0ZXJuIGludCBpc2xvd2VyKGludCk7CiBleHRlcm4gaW50IGlzcHJpbnQoaW50KTsKIGV4 dGVybiBpbnQgaXNwdW5jdChpbnQpOwogZXh0ZXJuIGludCBpc3NwYWNlKGludCk7CiBleHRlcm4g aW50IGlzdXBwZXIoaW50KTsKIGV4dGVybiBpbnQgaXN4ZGlnaXQoaW50KTsKIGV4dGVybiBpbnQg dG91cHBlcihpbnQpOwogZXh0ZXJuIGludCB0b2xvd2VyKGludCk7CiMgMTA3ICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL2N0eXBlLmgi IDMgNAogdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2N0eXBlX3Q7CgoKCgogdHlwZWRlZiBpbnQgd2lu dF90OwoKCgoKCgogZXh0ZXJuIGludCBpc2FzY2lpKGludCk7CiBleHRlcm4gaW50IHRvYXNjaWko aW50KTsKIyAxMzEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvZ2NjL2luY2x1ZGUvY3R5cGUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9sb2NhbGVk ZWYuaCIgMSAzIDQKIyAzOSAiL3Vzci9pbmNsdWRlL3N5cy9sb2NhbGVkZWYuaCIgMyA0CnN0cnVj dCBfX0xDX2xvY2FsZTsKc3RydWN0IF9MQ19sb2NhbGVfb2JqaGRsOwoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL2xpbWl0cy5oIiAxIDMgNAojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL2xpbWl0cy5oIiAz IDQKZXh0ZXJuICJDIiB7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvc3lzL2xpbWl0cy5oIiAzIDQKIyAx ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNs dWRlL2Zsb2F0LmgiIDEgMyA0CiMgMjQ4ICIvdXNyL2luY2x1ZGUvc3lzL2xpbWl0cy5oIiAyIDMg NAojIDM5NyAiL3Vzci9pbmNsdWRlL3N5cy9saW1pdHMuaCIgMyA0Cn0KIyA0MyAiL3Vzci9pbmNs dWRlL3N5cy9sb2NhbGVkZWYuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2xjX2NvcmUu aCIgMSAzIDQKIyAzNiAiL3Vzci9pbmNsdWRlL3N5cy9sY19jb3JlLmgiIDMgNAojIDEgIi9nY2Mv ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lz L3R5cGVzLmgiIDEgMyA0CiMgNTIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNApleHRlcm4gIkMiIHsKIyA2 NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pbnR0eXBlcy5oIiAx IDMgNAojIDU2ICIvdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiIDMgNApleHRlcm4gIkMiIHsK IyA2NSAiL3Vzci9pbmNsdWRlL3N5cy9pbnR0eXBlcy5oIiAzIDQKdHlwZWRlZiBzaWduZWQgY2hh ciBpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGlu dCBpbnQzMl90OwoKCgoKdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludDY0X3Q7CgoKCnR5cGVk ZWYgdW5zaWduZWQgY2hhciB1aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNl90 Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBsb25nIHVpbnQ2NF90OwojIDkyICIvdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiIDMgNAp0 eXBlZGVmIGludDY0X3QgaW50bWF4X3Q7CnR5cGVkZWYgdWludDY0X3QgdWludG1heF90OwojIDEw NCAiL3Vzci9pbmNsdWRlL3N5cy9pbnR0eXBlcy5oIiAzIDQKdHlwZWRlZiBzaWduZWQgbG9uZyBp bnRwdHJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnRwdHJfdDsKCgoKCgp0eXBlZGVmIHNp Z25lZCBjaGFyIGludF9sZWFzdDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50X2xlYXN0MTZf dDsKdHlwZWRlZiBzaWduZWQgaW50IGludF9sZWFzdDMyX3Q7CgoKCgp0eXBlZGVmIHNpZ25lZCBs b25nIGxvbmcgaW50X2xlYXN0NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRfbGVh c3Q4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdW5z aWduZWQgaW50IHVpbnRfbGVhc3QzMl90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcg dWludF9sZWFzdDY0X3Q7CiMgMTM4ICIvdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiIDMgNAp0 eXBlZGVmIGludDMyX3QgaW50ZmFzdF90Owp0eXBlZGVmIHVpbnQzMl90IHVpbnRmYXN0X3Q7CgoK dHlwZWRlZiBzaWduZWQgY2hhciBpbnRfZmFzdDhfdDsKdHlwZWRlZiBpbnQzMl90IGludF9mYXN0 MTZfdDsKdHlwZWRlZiBpbnQzMl90IGludF9mYXN0MzJfdDsKdHlwZWRlZiB1aW50MzJfdCB1aW50 X2Zhc3Q4X3Q7CnR5cGVkZWYgdWludDMyX3QgdWludF9mYXN0MTZfdDsKdHlwZWRlZiB1aW50MzJf dCB1aW50X2Zhc3QzMl90OwoKdHlwZWRlZiBpbnQ2NF90IGludF9mYXN0NjRfdDsKdHlwZWRlZiB1 aW50NjRfdCB1aW50X2Zhc3Q2NF90OwojIDU3NSAiL3Vzci9pbmNsdWRlL3N5cy9pbnR0eXBlcy5o IiAzIDQKdHlwZWRlZiBzaWduZWQgbG9uZyBfX2xvbmczMl90Owp0eXBlZGVmIHVuc2lnbmVkIGxv bmcgX191bG9uZzMyX3Q7CiMgNTg3ICIvdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiIDMgNAp0 eXBlZGVmIHNpZ25lZCBpbnQgX19sb25nNjRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191bG9u ZzY0X3Q7CiMgNTk5ICIvdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiIDMgNAp0eXBlZGVmIHNp Z25lZCBpbnQgaW50MzJsb25nNjRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMybG9uZzY0 X3Q7CiMgNjEyICIvdXNyL2luY2x1ZGUvc3lzL2ludHR5cGVzLmgiIDMgNAp0eXBlZGVmIHNpZ25l ZCBsb25nIGxvbmczMmludDY0X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzMyaW50NjRf dDsKIyA2MjIgIi91c3IvaW5jbHVkZS9zeXMvaW50dHlwZXMuaCIgMyA0CnR5cGVkZWYgc2lnbmVk IGNoYXIgaW50ODsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50MTY7CnR5cGVkZWYgc2lnbmVkIGlu dCBpbnQzMjsKCgoKCnR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQ2NDsKCgoKdHlwZWRlZiB1 bnNpZ25lZCBjaGFyIHVfaW50ODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfaW50OF90Owp0eXBl ZGVmIHVuc2lnbmVkIHNob3J0IHVfaW50MTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9pbnQx Nl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMyOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1 X2ludDMyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9pbnQ2NDsKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9pbnQ2NF90OwojIDY2NCAiL3Vzci9pbmNsdWRlL3N5cy9p bnR0eXBlcy5oIiAzIDQKZXh0ZXJuIGxvbmcgc3RydG9pbWF4KGNvbnN0IGNoYXIgKiwgY2hhciAq KiwgaW50KTsKCgoKCgp9CiMgNjUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CiMgODcgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgaW50IHB0cmRpZmZfdDsKIyAxMTQgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMgNAp0eXBlZGVmIGxvbmcgZnBvc190OwoKCgp0eXBlZGVmIGxvbmcgbG9uZyBmcG9zNjRf dDsKCgoKCgoKdHlwZWRlZiBpbnQzMmxvbmc2NF90IHRpbWVfdDsKCgoKCnR5cGVkZWYgaW50IGNs b2NrX3Q7CgoKCgoKCnR5cGVkZWYgbG9uZyB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDE0OCAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcl90Owp0eXBlZGVmIHVu c2lnbmVkIHNob3J0IHVzaG9ydF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X3Q7CnR5cGVk ZWYgdW5zaWduZWQgbG9uZyB1bG9uZ190Owp0eXBlZGVmIHNpZ25lZCBsb25nIHNzaXplX3Q7CgoK Cgp0eXBlZGVmIGludCBsZXZlbF90Owp0eXBlZGVmIGludDMybG9uZzY0X3QgZGFkZHJfdDsKdHlw ZWRlZiBpbnQgZGFkZHIzMl90OwoKdHlwZWRlZiBpbnQ2NF90IGRhZGRyNjRfdDsKCnR5cGVkZWYg Y2hhciAqIGNhZGRyX3Q7CnR5cGVkZWYgdWludDMybG9uZzY0X3QgaW5vX3Q7CnR5cGVkZWYgdWlu dF90IGlubzMyX3Q7Cgp0eXBlZGVmIHVpbnQ2NF90IGlubzY0X3Q7Cgp0eXBlZGVmIHNob3J0IGNu dF90Owp0eXBlZGVmIHVpbnQzMmxvbmc2NF90IGRldl90Owp0eXBlZGVmIHVpbnRfdCBkZXYzMl90 OwoKdHlwZWRlZiB1aW50NjRfdCBkZXY2NF90OwoKdHlwZWRlZiBpbnQgY2hhbl90Owp0eXBlZGVm IGludCB0aW1lMzJfdDsKdHlwZWRlZiBpbnQgcGlkMzJfdDsKdHlwZWRlZiBpbnQgdGlkMzJfdDsK CnR5cGVkZWYgdWludDY0X3QgcGlkNjRfdDsKdHlwZWRlZiB1aW50NjRfdCB0aWQ2NF90Owp0eXBl ZGVmIHVpbnQ2NF90IHRpbWU2NF90OwoKCgoKCgoKdHlwZWRlZiB2b2lkICogX19wdHIzMjsKdHlw ZWRlZiBjaGFyICogX19jcHRyMzI7CgoKdHlwZWRlZiBpbnQgc29mZl90OwoKCgoKdHlwZWRlZiBs b25nIG9mZl90OwoKCgp0eXBlZGVmIGxvbmcgbG9uZyBvZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBw YWRkcl90Owp0eXBlZGVmIGludDMybG9uZzY0X3Qga2V5X3Q7CnR5cGVkZWYgaW50IHRpbWVyX3Q7 CnR5cGVkZWYgc2hvcnQgbmxpbmtfdDsKdHlwZWRlZiB1aW50X3QgbW9kZV90Owp0eXBlZGVmIHVp bnRfdCB1aWRfdDsKdHlwZWRlZiB1aW50X3QgZ2lkX3Q7CnR5cGVkZWYgX19wdHIzMiBtaWRfdDsK dHlwZWRlZiBpbnQzMmxvbmc2NF90IHBpZF90Owp0eXBlZGVmIGludDMybG9uZzY0X3QgdGlkX3Q7 CnR5cGVkZWYgY2hhciBzbGFiX3RbMTJdOwp0eXBlZGVmIGxvbmcgbXR5cF90Owp0eXBlZGVmIGlu dCBib29sZWFuX3Q7CnR5cGVkZWYgaW50IGNyaWRfdDsKCgp0eXBlZGVmIGludCBibGtjbnRfdDsK dHlwZWRlZiBpbnQgYmxrc2l6ZV90OwojIDIzNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYg dWxvbmdfdCBmc2Jsa2NudF90Owp0eXBlZGVmIHVsb25nX3QgZnNmaWxjbnRfdDsKCgoKCgoKCnR5 cGVkZWYgdWludDMybG9uZzY0X3QgaWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdXNlY29uZHNf dDsKdHlwZWRlZiBzaWduZWQgaW50IHN1c2Vjb25kc190Owp0eXBlZGVmIGludCBjbG9ja2lkX3Q7 CgoKCgp0eXBlZGVmIHN0cnVjdCBzaWdzZXRfdCB7CgogdW5zaWduZWQgaW50IGxvc2lnczsKIHVu c2lnbmVkIGludCBoaXNpZ3M7CgoKCgp9IHNpZ3NldF90OwoKdHlwZWRlZiBpbnQgc2lnbmFsX3Q7 CgoKCgp0eXBlZGVmIHN0cnVjdCBmc2lkX3QgewoKCgoKIHVuc2lnbmVkIGludCB2YWxbMl07CgoK Cgp9IGZzaWRfdDsKIyAyODUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfX3B0 cV9xdWV1ZSB7CiBzdHJ1Y3QgX19wdHFfcXVldWUgKl9fcHRxX25leHQ7CiBzdHJ1Y3QgX19wdHFf cXVldWUgKl9fcHRxX3ByZXY7Cn0gX19wdHFfcXVldWU7Cgp0eXBlZGVmIGludCBfX3B0bG9ja190 eXBlOwoKdHlwZWRlZiBzdHJ1Y3QgX19wdF9hdHRyICpwdGhyZWFkX2F0dHJfdDsKdHlwZWRlZiBz dHJ1Y3QgX19wdF9hdHRyICpwdGhyZWFkX2NvbmRhdHRyX3Q7CnR5cGVkZWYgc3RydWN0IF9fcHRf YXR0ciAqcHRocmVhZF9tdXRleGF0dHJfdDsKCgp0eXBlZGVmIHN0cnVjdCBfX3B0X2F0dHIgKnB0 aHJlYWRfcndsb2NrYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfdDsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKIyAzMzcgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg NAp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgX19wdHFfcXVldWUgKiBfX3B0cV9saW5rOwogICAg ICAgIGludCBfX3Jlc2VydmVkMTsKICAgICAgICBfX3B0bG9ja190eXBlIF9fcHRtdHhfbG9jazsK ICAgICAgICBpbnQgX19wdG10eF9mbGFnczsKICAgICAgICBwdGhyZWFkX3QgX19wdG10eF9vd25l cjsKICAgICAgICBpbnQgX19tdHhfaWQ7CiAgICAgICAgaW50IF9fYWNxdWlzaXRpb25zOwogICAg ICAgIGludCBfX210eF9raW5kOwogICAgICAgIGludCBfX2xvY2tfY3B0OwogICAgICAgIGludCBf X3NsZWVwczsKICAgICAgICBpbnQgX19taXNzZXM7CiAgICAgICAgaW50IF9fcmVzZXJ2ZWQyOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgX19wdG10eF9kYng7Cn0gcHRocmVhZF9tdXRleF90OwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgX19wdGN2X2RieDsKICAgICAgICBp bnQgX19yZXNlcnZlZDE7CiAgICAgICAgX19wdGxvY2tfdHlwZSBfX3B0Y3ZfbG9jazsKICAgICAg ICBpbnQgX19wdGN2X2ZsYWdzOwogICAgICAgIF9fcHRxX3F1ZXVlICogX19wdGN2X3dhaXRlcnM7 CiAgICAgICAgaW50IF9fcmVzZXJ2ZWQyOwogICAgICAgIGludCBfX2N2X2lkOwogICAgICAgIHVu c2lnbmVkIGludCBfX2N2X211dGV4OwogICAgICAgIGludCBfX3Jlc2VydmVkMzsKICAgICAgICBp bnQgX19jcHR3YWl0OwogICAgICAgIGludCBfX3Jlc2VydmVkOwoKfSBwdGhyZWFkX2NvbmRfdDsK CgoKdHlwZWRlZiBzdHJ1Y3QgewogX19wdGxvY2tfdHlwZSBfX3B0b25jZV9sb2NrOwogaW50IF9f cHRvbmNlX2luaXRpYWxpemVkOwogaW50IF9fcHRvbmNlX2V4ZWN1dGluZzsKIGludCBfX3B0b25j ZV9jb21wbGV0ZWQ7CiBwdGhyZWFkX211dGV4X3QgX19wdG9uY2VfbXV0ZXg7CiBwdGhyZWFkX2Nv bmRfdCBfX3B0b25jZV9leGVjdXRlZDsKfSBwdGhyZWFkX29uY2VfdDsKCgp0eXBlZGVmIHN0cnVj dCB7CgoKCgoKICAgICAgICBpbnQgX19wYWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3B0cmxv Y2tfZGJ4OwoKCiAgICAgICAgcHRocmVhZF9tdXRleF90IF9fcndsX211dGV4OwogICAgICAgIHB0 aHJlYWRfY29uZF90IF9fcndsX3JzbGVlcGVyczsKICAgICAgICBwdGhyZWFkX2NvbmRfdCBfX3J3 bF93c2xlZXBlcnM7CiAgICAgICAgaW50IF9fcndsX2ZsYWdzOwogICAgICAgIHB0aHJlYWRfdCBf X3J3bF9vd25lcjsKICAgICAgICBpbnQgX19yd2xfcndsb2NrX2lkOwogICAgICAgIGludCBfX3J3 bF9sb2NrX2NvdW50OwoKCiAgICAgICAgaW50IF9fcndsX3dhaXRpbmc7CiAgICAgICAgaW50IF9f cndsX3dhY3F1aXNpdGlvbnM7CiAgICAgICAgaW50IF9fcndsX3JhY3F1aXNpdGlvbnM7CiAgICAg ICAgaW50IF9fcndsX3dzbGVlcHM7CiAgICAgICAgaW50IF9fcndsX3JzbGVlcHM7CiAgICAgICAg dW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkWzZdOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCgoKCgp0 eXBlZGVmIHN0cnVjdCBfcXVhZCB7IGludCB2YWxbMl07IH0gcXVhZDsKCgojIDEgIi91c3IvaW5j bHVkZS9zeXMvbV90eXBlcy5oIiAxIDMgNAojIDQwICIvdXNyL2luY2x1ZGUvc3lzL21fdHlwZXMu aCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92bV90eXBlcy5oIiAxIDMgNAojIDM0ICIvdXNy L2luY2x1ZGUvc3lzL3ZtX3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgdm1pZF90OwojIDQ1ICIv dXNyL2luY2x1ZGUvc3lzL3ZtX3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVsb25nX3Qgdm1oYW5kbGVf dDsKIyA1OCAiL3Vzci9pbmNsdWRlL3N5cy92bV90eXBlcy5oIiAzIDQKdHlwZWRlZiBsb25nMzJp bnQ2NF90IGt2bWlkX3Q7CnR5cGVkZWYgdWxvbmczMmludDY0X3Qga3ZtaGFuZGxlX3Q7CnR5cGVk ZWYgaW50IGt2bWlkeF90Owp0eXBlZGVmIGludDMybG9uZzY0X3Qgdm1pZHhfdDsKdHlwZWRlZiBp bnQzMmxvbmc2NF90IHZta2V5X3Q7CnR5cGVkZWYgaW50MzJsb25nNjRfdCB2cG5fdDsKdHlwZWRl ZiBpbnQzMmxvbmc2NF90IHJwbl90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgcnBu NjRfdDsKCgoKCgoKCnR5cGVkZWYgaW50IGt2cG5fdDsKdHlwZWRlZiBpbnQga3Jwbl90Owp0eXBl ZGVmIGludDMybG9uZzY0X3Qgdm1zaXplX3Q7CgoKCgoKCnR5cGVkZWYgc3RydWN0Cgp2bWFkZHJf dAoKewoKIHZtaGFuZGxlX3Qgc3J2YWw7CiBjYWRkcl90IG9mZnNldDsKCgoKCn0gdm1hZGRyX3Q7 Cgp0eXBlZGVmIHN0cnVjdAoKYWRzcGFjZV90Cgp7CgogdWxvbmczMmludDY0X3QgYWxsb2M7CiBr dm1oYW5kbGVfdCBzcnZhbFsxNl07CgoKCgp9IGFkc3BhY2VfdDsKCgoKCgoKCnR5cGVkZWYgZW51 bSBfTVJfQVRUUl9UWVBFIHsKICBWaXJ0QWRkciA9IDEKfSBNUl9BVFRSX1RZUEU7Cgp0eXBlZGVm IGVudW0gX01SX0xBQkVMX1RZUEUgewogIEZyZWVNZW0gPSAxLAogIElQTENCID0gMiwKICBSTUFM TE9DID0gMywKICBQTV9IRUFQID0gNCwKICBSVEFTX0hFQVAgPSA1LAogIFRDRV9UQUJMRSA9IDYs CiAgSU9fU1BBQ0UgPSA3Cn0gTVJfTEFCRUxfVFlQRTsKCnR5cGVkZWYgc3RydWN0IHsKIHVuc2ln bmVkIGxvbmcgbG9uZyBtcl9hZGRyOwogdW5zaWduZWQgbG9uZyBsb25nIG1yX3NpemU7CiB1bnNp Z25lZCBjaGFyIG1yX2F0dDsKIHVuc2lnbmVkIGNoYXIgbXJfbGFiZWw7CiB1bnNpZ25lZCBzaG9y dCBtcl9ub2RlaWQ7CiBjaGFyIHJlc2VydmVkWzRdOwp9IGlwbGNiX21hcF9yZWdfdDsKIyA0MSAi L3Vzci9pbmNsdWRlL3N5cy9tX3R5cGVzLmgiIDIgMyA0CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBs YWJlbF90CnsKCiBzdHJ1Y3QgbGFiZWxfdCAqcHJldjsKIHVsb25nX3QgaWFyOwogdWxvbmdfdCBz dGFjazsKIHVsb25nX3QgdG9jOwogdWxvbmdfdCBjcjsKIHVsb25nX3QgaW50cHJpOwogdWxvbmdf dCByZWdbMTldOwojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL21fdHlwZXMuaCIgMyA0Cn0gbGFiZWxf dDsKCnR5cGVkZWYgaW50MzJsb25nNjRfdCBleHRfdDsKIyA0MTcgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg MyA0CgoKCgp0eXBlZGVmIGNoYXIgKiB2YV9saXN0OwojIDQ2NSAiL2djYy9kamUvYnVpbGQvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0 CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fcHRyNjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBsb25nIF9fY3B0cjY0OwoKCgoKCgp0eXBlZGVmIHVzaG9ydF90IFVuaUNoYXI7CgoKCgp0eXBl ZGVmIHVjaGFyX3QgdWNoYXI7CnR5cGVkZWYgdXNob3J0X3QgdXNob3J0Owp0eXBlZGVmIHVpbnRf dCB1aW50Owp0eXBlZGVmIHVsb25nX3QgdWxvbmc7Cgp0eXBlZGVmIHN0cnVjdCB7IGludCByWzFd OyB9ICogcGh5c2Fkcl90Owp0eXBlZGVmIHBoeXNhZHJfdCBwaHlzYWRyOwoKCnR5cGVkZWYgdW5z aWduZWQgY2hhciB1X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9zaG9ydDsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7Cgp0eXBl ZGVmIGludCBzd2Jsa190OwoKCgoKc3RydWN0IHNpZ3NldCB7CiB1bnNpZ25lZCBpbnQgbG9zaWdz OwogdW5zaWduZWQgaW50IGhpc2lnczsKfTsKCgpzdHJ1Y3QgZnNpZCB7CgogdW5zaWduZWQgaW50 IHZhbFsyXTsKCgoKfTsKIyA1MTggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNApzdHJ1Y3QgZmlsZWlkIHsK IHVpbnRfdCBmaWRfbGVuOwogaW5vMzJfdCBmaWRfaW5vOwogdWludF90IGZpZF9nZW47CiBjaGFy IGZpZF94WzIwIC0gKHNpemVvZihpbm8zMl90KSArIDIpIC0gc2l6ZW9mKHVpbnRfdCldOwp9Owoj IDUzOSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2Mv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnN0cnVjdCBmaWQgewogdWludF90IGZpZF9sZW47CiBj aGFyIGZpZF9kYXRhWzIwXTsKfTsKdHlwZWRlZiBzdHJ1Y3QgZmlkIGZpZF90OwoKCnN0cnVjdCBm aGFuZGxlIHsKIGNoYXIgeFszMl07Cn07CnR5cGVkZWYgc3RydWN0IGZoYW5kbGUgZmhhbmRsZV90 OwoKc3RydWN0IGZpbGVoYW5kbGUgewogZnNpZF90IGZoX2ZzaWQ7CiBzdHJ1Y3QgZmlsZWlkIGZo X2ZpZDsKfTsKIyA1NjMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNApzdHJ1Y3QgdW5pcXVlX2lkIHsKICAg ICAgIF9fdWxvbmczMl90IHdvcmQxOwogICAgICAgX191bG9uZzMyX3Qgd29yZDI7CiAgICAgICBf X3Vsb25nMzJfdCB3b3JkMzsKICAgICAgIF9fdWxvbmczMl90IHdvcmQ0Owp9Owp0eXBlZGVmIHN0 cnVjdCB1bmlxdWVfaWQgdW5pcXVlX2lkX3Q7CiMgNTk1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlw ZWRlZiBsb25nIGxvbmcgb2Zmc2V0X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcg c2l6ZTY0X3Q7CnR5cGVkZWYgbG9uZyBsb25nIHNzaXplNjRfdDsKCgoKCgoKdHlwZWRlZiBsb25n IGxvbmcgbG9uZ2xvbmdfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9sb25nbG9uZ190 OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IGNsYXNzX2lkX3Q7CgoKCn0KIyAzNyAiL3Vzci9pbmNs dWRlL3N5cy9sY19jb3JlLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNTIgIi91c3IvaW5jbHVk ZS9zeXMvbGNfY29yZS5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgewoKICAgIHVuc2lnbmVkIHNob3J0 CiBfX3R5cGVfaWQsCiBfX21hZ2ljOwogICAgdW5zaWduZWQgbG9uZwogX192ZXJzaW9uOwoKICAg IHNpemVfdCBfX3NpemU7Cgp9IF9MQ19vYmplY3RfdDsKIyAxMDIgIi91c3IvaW5jbHVkZS9zeXMv bGNfY29yZS5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgewoKICAgIF9MQ19vYmplY3RfdCBfX2hkcjsK CgoKICAgIGludCBfX2NhdGdldHM7CiAgICBpbnQgX19jYXRjbG9zZTsKCgogICAgaW50IF9fY29t cHJlc3M7CiAgICBpbnQgX19kZWNvbXByZXNzOwogICAgaW50IF9fc3RhcnRfY29tcHJlc3M7CiAg ICBpbnQgX19lbmRfY29tcHJlc3M7CgoKICAgIGludCBfX2luaXQ7CiAgICB2b2lkICpfX2RhdGE7 Cn0gX0xDX2NvcmVfY2FyX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX29iamVjdF90IF9f aGRyOwoKCiAgICBpbnQgX19ubF9sYW5naW5mbzsKCgogICAgaW50IF9fbWJ0b3djOwogICAgaW50 IF9fbWJzdG93Y3M7CiAgICBpbnQgX193Y3RvbWI7CiAgICBpbnQgX193Y3N0b21iczsKCgogICAg aW50IF9fbWJsZW47CgoKICAgIGludCBfX3djc3dpZHRoOwogICAgaW50IF9fd2N3aWR0aDsKCgog ICAgaW50IF9fbWJ0b3BjOwogICAgaW50IF9fbWJzdG9wY3M7CiAgICBpbnQgX19wY3RvbWI7CiAg ICBpbnQgX19wY3N0b21iczsKCgogICAgaW50IF9fY3NpZDsKICAgIGludCBfX3djc2lkOwoKCiAg ICBpbnQgX19pbml0OwogICAgdm9pZCAqX19kYXRhOwp9IF9MQ19jb3JlX2NoYXJtYXBfdDsKCgp0 eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX29iamVjdF90IF9faGRyOwoKCiAgICBpbnQgX190b3d1 cHBlcjsKICAgIGludCBfX3Rvd2xvd2VyOwoKCiAgICBpbnQgX19nZXRfd2N0eXBlOwogICAgaW50 IF9faXNfd2N0eXBlOwoKCiAgICBpbnQgX19pbml0OwogICAgdm9pZCAqX19kYXRhOwp9IF9MQ19j b3JlX2N0eXBlX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX29iamVjdF90IF9faGRyOwoK CiAgICBpbnQgX19zdHJjb2xsOwogICAgaW50IF9fc3RyeGZybTsKCgogICAgaW50IF9fd2NzY29s bDsKICAgIGludCBfX3djc3hmcm07CgoKICAgIGludCBfX2ZubWF0Y2g7CgoKICAgIGludCBfX3Jl Z2NvbXA7CiAgICBpbnQgX19yZWdlcnJvcjsKICAgIGludCBfX3JlZ2V4ZWM7CiAgICBpbnQgX19y ZWdmcmVlOwoKCiAgICBpbnQgX19pbml0OwogICAgdm9pZCAqX19kYXRhOwp9IF9MQ19jb3JlX2Nv bGxhdGVfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX29iamVjdF90IF9faGRyOwoKCiAg ICBpbnQgX19ubF9sYW5naW5mbzsKCgogICAgaW50IF9fc3RyZnRpbWU7CiAgICBpbnQgX19zdHJw dGltZTsKCgogICAgaW50IF9fd2NzZnRpbWU7CgoKICAgIGludCBfX2luaXQ7CiAgICB2b2lkICpf X2RhdGE7Cn0gX0xDX2NvcmVfdGltZV90OwoKCnR5cGVkZWYgc3RydWN0IHsKCiAgICBfTENfb2Jq ZWN0X3QgX19oZHI7CgoKICAgIGludCBfX25sX2xhbmdpbmZvOwoKCiAgICBpbnQgX19zdHJmbW9u OwoKCiAgICBpbnQgX19pbml0OwogICAgdm9pZCAqX19kYXRhOwp9IF9MQ19jb3JlX21vbmV0YXJ5 X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewoKICAgIF9MQ19vYmplY3RfdCBfX2hkcjsKCgogICAgaW50 IF9fbmxfbGFuZ2luZm87CgoKICAgIGludCBfX2luaXQ7CiAgICB2b2lkICpfX2RhdGE7Cn0gX0xD X2NvcmVfbnVtZXJpY190OwoKCnR5cGVkZWYgc3RydWN0IHsKCiAgICBfTENfb2JqZWN0X3QgX19o ZHI7CgoKICAgIGludCBfX25sX2xhbmdpbmZvOwoKCiAgICBpbnQgX19ycG1hdGNoOwoKCiAgICBp bnQgX19pbml0OwogICAgdm9pZCAqX19kYXRhOwp9IF9MQ19jb3JlX3Jlc3BfdDsKCnR5cGVkZWYg c3RydWN0IHsKCiAgICBfTENfb2JqZWN0X3QgX19oZHI7CgoKICAgIGludCBfX25sX2xhbmdpbmZv OwogICAgaW50IF9fbG9jYWxlY29udjsKCgogICAgaW50IF9faW5pdDsKICAgIHZvaWQgKl9fZGF0 YTsKfSBfTENfY29yZV9sb2NhbGVfdDsKCgoKfQojIDQ0ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2Fs ZWRlZi5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9sb2NhbGVkZWYzMS5oIiAxIDMg NAojIDM5ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZjMxLmgiIDMgNAp0eXBlZGVmIHN0cnVj dCBjb2xkZXNjIHsKIHNob3J0IGNkX3N0cm9mZjsKIHNob3J0IGNkX3JlcG9mZjsKIHNob3J0IGNk X2N2YWw7CiBzaG9ydCBjZF9jdW5pcTsKfSBjb2xkZXNjX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBj b2xsYXRpb25fdGFibGUgewogc2hvcnQgbGNfdmVyc2lvbjsKIHNob3J0IGxjX2xlbmd0aDsKIGNo YXIgKmxjX2xvY2FsZV9uYW1lOwogaW50IGxlbl9jb2xsYXRlOwogc2hvcnQgKmxjX2NvbGxhdGU7 CiBpbnQgbGVuX2NvbHVuaXE7CiBzaG9ydCAqbGNfY29sdW5pcTsKIGludCBsZW5fY29sZGVzYzsK IGNvbGRlc2NfdCAqbGNfY29sZGVzYzsKIGludCBsZW5fc3RyaW5nczsKIHdjaGFyX3QgKmxjX3N0 cmluZ3M7CiBpbnQgaGlnaF9jdmFsdWU7Cn0gY29sX3Q7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBj aGFyX2NsYXNzaWZpY2F0aW9uX3RhYmxlIHsKIHNob3J0IGxjX3ZlcnNpb247CiBzaG9ydCBsY19s ZW5ndGg7CiBzaG9ydCBsY19jb2RlX3R5cGU7CiBzaG9ydCBtYl9jdXJfbWF4Owogc2hvcnQgbWJf Y3VyX21pbjsKIHNob3J0IGxjX2RzcF93aWR0aDsKIGNoYXIgKmxjX2xvY2FsZV9uYW1lOwogaW50 IGxlbl9jYXNlY29udjsKIHdjaGFyX3QgKmxjX2Nhc2Vjb252OwogaW50IGxlbl9jdHlwZTsKIHVu c2lnbmVkIHNob3J0ICpsY19jdHlwZTsKfSBjdHlwZV90OwoKCgoKCnR5cGVkZWYgc3RydWN0IGxj X21vbmV0YXJ5X3RhYmxlIHsKIHNob3J0IGxjX3ZlcnNpb247CiBzaG9ydCBsY19sZW5ndGg7CiBj aGFyICpsY19sb2NhbGVfbmFtZTsKIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKIGNoYXIgKmN1cnJl bmN5X3N5bWJvbDsKIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogY2hhciAqbW9uX3Rob3VzYW5k c19zZXA7CiBjaGFyICptb25fZ3JvdXBpbmc7CiBjaGFyICpwb3NpdGl2ZV9zaWduOwogY2hhciAq bmVnYXRpdmVfc2lnbjsKIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogY2hhciBmcmFjX2RpZ2l0czsK IGNoYXIgcF9jc19wcmVjZWRlczsKIGNoYXIgcF9zZXBfYnlfc3BhY2U7CiBjaGFyIG5fY3NfcHJl Y2VkZXM7CiBjaGFyIG5fc2VwX2J5X3NwYWNlOwogY2hhciBwX3NpZ25fcG9zbjsKIGNoYXIgbl9z aWduX3Bvc247Cn0gbW9uX3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgbnVtZXJpY190YWJsZSB7CiBz aG9ydCBsY192ZXJzaW9uOwogc2hvcnQgbGNfbGVuZ3RoOwogY2hhciAqbGNfbG9jYWxlX25hbWU7 CiBjaGFyICpkZWNpbWFsX3BvaW50OwogY2hhciAqdGhvdXNhbmRzX3NlcDsKIGNoYXIgKmdyb3Vw aW5nOwp9IG51bV90OwoKCgoKCnR5cGVkZWYgc3RydWN0IGxjX21lc3NhZ2VzX3RhYmxlIHsKIHNo b3J0IGxjX3ZlcnNpb247CiBzaG9ydCBsY19sZW5ndGg7CiBjaGFyICpsY19sb2NhbGVfbmFtZTsK IGNoYXIgKm1lc3NhZ2VzOwogY2hhciAqeWVzX3N0cmluZzsKIGNoYXIgKm5vX3N0cmluZzsKfSBt c2dfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBsY190aW1lX3RhYmxlIHsKIHNob3J0IGxjX3ZlcnNp b247CiBzaG9ydCBsY19sZW5ndGg7CiBjaGFyICpsY19sb2NhbGVfbmFtZTsKIGNoYXIgKnRfZm10 OwogY2hhciAqZF9mbXQ7CiBjaGFyICpubGxkYXRlOwogY2hhciAqZF90X2ZtdDsKIGNoYXIgKmFi ZGF5OwogY2hhciAqZGF5OwogY2hhciAqYWJtb247CiBjaGFyICptb247CgoKCgogY2hhciAqbWlz YzsKIGNoYXIgKnRzdHJzOwogY2hhciAqdHVuaXRzOwoKCgogY2hhciAqeWVhcjsKIGNoYXIgKmFt X3BtOwp9IHRpbV90OwoKCgoKCgp0eXBlZGVmIHN0cnVjdCB3Y2hhcl9tYXBwaW5nX3RhYmxlIHsK IHNob3J0IGxjX3ZlcnNpb247CiBzaG9ydCBsY19sZW5ndGg7CiBjaGFyICpsY19pZGVudGlmaWVy Owp9IG1hcF90OwojIDE4MyAiL3Vzci9pbmNsdWRlL3N5cy9sb2NhbGVkZWYzMS5oIiAzIDQKdHlw ZWRlZiBzdHJ1Y3QgbG9jYWxlaW5mb190YWJsZSB7CiBjaGFyIGxjX21hZzAsIGxjX21hZzE7CiBz aG9ydCBsY192ZXJzaW9uOwogc2hvcnQgbGNfY29kZV90eXBlOwogc2hvcnQgbGNfbGVuZ3RoOwog Y29sX3QgKmxjX2NvbHRibDsKIGN0eXBlX3QgKmxjX2NocnRibDsKIG1vbl90ICpsY19tb250Ymw7 CiBudW1fdCAqbGNfbnVtdGJsOwogdGltX3QgKmxjX3RpbXRibDsKIG1zZ190ICpsY19tc2d0Ymw7 CiBtYXBfdCAqbGNfbWFwdGJsOwp9IGxvY190OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2Fs ZWRlZi5oIiAyIDMgNAojIDY2ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZi5oIiAzIDQKdHlw ZWRlZiBzdHJ1Y3QgewoKICAgIF9MQ19jb3JlX2NoYXJtYXBfdCBjb3JlOwoKICAgIGNoYXIgKmNt X2NzbmFtZTsKCiAgICBzaXplX3QgY21fbWJfY3VyX21heDsKICAgIHNpemVfdCBjbV9tYl9jdXJf bWluOwoKICAgIHVuc2lnbmVkIGNoYXIKICAgICAgY21fbWF4X2Rpc3Bfd2lkdGg7CgoKICAgIHVu c2lnbmVkCiBjaGFyICpjbV9jc3RhYjsKCiAgICBzdHJ1Y3QgX19MQ19sb2NhbGUKICAgICAgICAg ICAgICpsb2NfcmVjOwoKICAgIHZvaWQgKl9fbWV0aF9wdHI7CiAgICB2b2lkICpfX2RhdGFfcHRy OwoKfSBfTENfY2hhcm1hcF90OwoKdHlwZWRlZiBzdHJ1Y3QgX0xDX2NoYXJtYXBfb2JqaGRsIF9M Q19jaGFybWFwX29iamhkbF90OwoKc3RydWN0IF9MQ19jaGFybWFwX29iamhkbCB7CiBfTENfY2hh cm1hcF90ICpvYmo7CgoKIHZvaWQgKigqKm1ldGgpKCk7CgoKc3RydWN0IF9MQ19sb2NhbGVfb2Jq aGRsICpsb2NfaGRsOwoKCn07CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX2NvcmVf bW9uZXRhcnlfdCBjb3JlOwoKICAgIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICAgIGNoYXIgKmN1 cnJlbmN5X3N5bWJvbDsKICAgIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogICAgY2hhciAqbW9u X3Rob3VzYW5kc19zZXA7CiAgICBjaGFyICptb25fZ3JvdXBpbmc7CiAgICBjaGFyICpwb3NpdGl2 ZV9zaWduOwogICAgY2hhciAqbmVnYXRpdmVfc2lnbjsKICAgIHNpZ25lZCBjaGFyIGludF9mcmFj X2RpZ2l0czsKICAgIHNpZ25lZCBjaGFyIGZyYWNfZGlnaXRzOwogICAgc2lnbmVkIGNoYXIgcF9j c19wcmVjZWRlczsKICAgIHNpZ25lZCBjaGFyIHBfc2VwX2J5X3NwYWNlOwogICAgc2lnbmVkIGNo YXIgbl9jc19wcmVjZWRlczsKICAgIHNpZ25lZCBjaGFyIG5fc2VwX2J5X3NwYWNlOwogICAgc2ln bmVkIGNoYXIgcF9zaWduX3Bvc247CiAgICBzaWduZWQgY2hhciBuX3NpZ25fcG9zbjsKICAgIGNo YXIgKmRlYml0X3NpZ247CiAgICBjaGFyICpjcmVkaXRfc2lnbjsKICAgIGNoYXIgKmxlZnRfcGFy ZW50aGVzaXM7CiAgICBjaGFyICpyaWdodF9wYXJlbnRoZXNpczsKCiAgICBzdHJ1Y3QgX19MQ19s b2NhbGUKICAgICAgICAgICAgICpsb2NfcmVjOwoKICAgIHZvaWQgKl9fbWV0aF9wdHI7CiAgICB2 b2lkICpfX2RhdGFfcHRyOwoKfSBfTENfbW9uZXRhcnlfdDsKCnR5cGVkZWYgc3RydWN0IF9MQ19t b25ldGFyeV9vYmpoZGwgX0xDX21vbmV0YXJ5X29iamhkbF90OwpzdHJ1Y3QgX0xDX21vbmV0YXJ5 X29iamhkbCB7CiBfTENfbW9uZXRhcnlfdCAqb2JqOwoKCiB2b2lkICooKiptZXRoKSgpOwoKCnN0 cnVjdCBfTENfbG9jYWxlX29iamhkbCAqbG9jX2hkbDsKCgp9OwoKCgoKCgp0eXBlZGVmIHN0cnVj dCB7CgogICAgX0xDX2NvcmVfbnVtZXJpY190IGNvcmU7CgogICAgY2hhciAqZGVjaW1hbF9wb2lu dDsKICAgIGNoYXIgKnRob3VzYW5kc19zZXA7CiAgICB1bnNpZ25lZAogY2hhciAqZ3JvdXBpbmc7 CgogICAgc3RydWN0IF9fTENfbG9jYWxlCiAgICAgICAgICAgICAqbG9jX3JlYzsKCiAgICB2b2lk ICpfX21ldGhfcHRyOwogICAgdm9pZCAqX19kYXRhX3B0cjsKCn0gX0xDX251bWVyaWNfdDsKCnR5 cGVkZWYgc3RydWN0IF9MQ19udW1lcmljX29iamhkbCBfTENfbnVtZXJpY19vYmpoZGxfdDsKc3Ry dWN0IF9MQ19udW1lcmljX29iamhkbCB7CiBfTENfbnVtZXJpY190ICpvYmo7CgoKIHZvaWQgKigq Km1ldGgpKCk7CgoKc3RydWN0IF9MQ19sb2NhbGVfb2JqaGRsICpsb2NfaGRsOwoKCn07CgoKCgoK Cgp0eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX2NvcmVfcmVzcF90IGNvcmU7CgogICAgY2hhciAq eWVzZXhwcjsKICAgIGNoYXIgKm5vZXhwcjsKICAgIGNoYXIgKnllc3N0cjsKICAgIGNoYXIgKm5v c3RyOwoKICAgIHN0cnVjdCBfX0xDX2xvY2FsZQogICAgICAgICAgICAgKmxvY19yZWM7CgogICAg dm9pZCAqX19tZXRoX3B0cjsKICAgIHZvaWQgKl9fZGF0YV9wdHI7Cgp9IF9MQ19yZXNwX3Q7Cgp0 eXBlZGVmIHN0cnVjdCBfTENfcmVzcF9vYmpoZGwgX0xDX3Jlc3Bfb2JqaGRsX3Q7CnN0cnVjdCBf TENfcmVzcF9vYmpoZGwgewogX0xDX3Jlc3BfdCAqb2JqOwoKCiB2b2lkICooKiptZXRoKSgpOwoK CnN0cnVjdCBfTENfbG9jYWxlX29iamhkbCAqbG9jX2hkbDsKCgp9OwoKCgoKCgoKdHlwZWRlZiBz dHJ1Y3QgewoKICAgIF9MQ19jb3JlX3RpbWVfdCBjb3JlOwoKICAgIGNoYXIgKmRfZm10OwogICAg Y2hhciAqdF9mbXQ7CiAgICBjaGFyICpkX3RfZm10OwogICAgY2hhciAqdF9mbXRfYW1wbTsKICAg IGNoYXIgKmFiZGF5WzddOwogICAgY2hhciAqZGF5WzddOwogICAgY2hhciAqYWJtb25bMTJdOwog ICAgY2hhciAqbW9uWzEyXTsKICAgIGNoYXIgKmFtX3BtWzJdOwogICAgY2hhciAqZXJhOwogICAg Y2hhciAqZXJhX3llYXI7CiAgICBjaGFyICplcmFfZF9mbXQ7CiAgICBjaGFyICphbHRfZGlnaXRz OwogICAgY2hhciAqZXJhX2RfdF9mbXQ7CiAgICBjaGFyICplcmFfdF9mbXQ7CgogICAgc3RydWN0 IF9fTENfbG9jYWxlCiAgICAgICAgICAgICAqbG9jX3JlYzsKCiAgICB2b2lkICpfX21ldGhfcHRy OwogICAgdm9pZCAqX19kYXRhX3B0cjsKCn0gX0xDX3RpbWVfdDsKCnR5cGVkZWYgc3RydWN0IF9M Q190aW1lX29iamhkbCBfTENfdGltZV9vYmpoZGxfdDsKc3RydWN0IF9MQ190aW1lX29iamhkbCB7 CiBfTENfdGltZV90ICpvYmo7CgoKIHZvaWQgKigqKm1ldGgpKCk7CgoKc3RydWN0IF9MQ19sb2Nh bGVfb2JqaGRsICpsb2NfaGRsOwoKCn07CgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2ln bmVkCiBzaG9ydCBuWzQgKzFdOwp9IF9MQ193ZWlnaHRfdDsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qg ewoKICAgIGNoYXIgKmNlX3N5bTsKICAgIF9MQ193ZWlnaHRfdCBjZV93Z3Q7Cgp9IF9MQ19jb2xs ZWxfdDsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX3dlaWdodF90IGN0X3dndDsKCgog ICAgX0xDX2NvbGxlbF90ICpjdF9jb2xsZWw7Cgp9IF9MQ19jb2x0YmxfdDsKIyAzMTkgIi91c3Iv aW5jbHVkZS9zeXMvbG9jYWxlZGVmLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICp0 Z3Rfd2d0X3N0cls0ICsxXTsKCgp9IF9MQ19zdWJzX3Q7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7 CgogICAgX0xDX2NvcmVfY29sbGF0ZV90IGNvcmU7CgogICAgdW5zaWduZWQKIGNoYXIgY29fbm9y ZDsKCiAgICBfTENfd2VpZ2h0X3QgY29fc29ydDsKCgogICAgd2NoYXJfdCBjb193Y19taW47CiAg ICB3Y2hhcl90IGNvX3djX21heDsKCiAgICB3Y2hhcl90IGNvX2NvbF9taW47CiAgICB3Y2hhcl90 IGNvX2NvbF9tYXg7CgogICAgX0xDX2NvbHRibF90ICpjb19jb2x0Ymw7CgogICAgdW5zaWduZWQK IGNoYXIgY29fbnN1YnM7CiAgICBfTENfc3Vic190ICpjb19zdWJzOwoKICAgIHVuc2lnbmVkCiBz aG9ydCBjb19zcGVjaWFsOwoKCgoKICAgIHN0cnVjdCBfX0xDX2xvY2FsZQogICAgICAgICAgICAg ICAgKmxvY19yZWM7CgogICAgdm9pZCAqX19tZXRoX3B0cjsKICAgIHZvaWQgKl9fZGF0YV9wdHI7 Cgp9IF9MQ19jb2xsYXRlX3Q7Cgp0eXBlZGVmIHN0cnVjdCBfTENfY29sbGF0ZV9vYmpoZGwgX0xD X2NvbGxhdGVfb2JqaGRsX3Q7CnN0cnVjdCBfTENfY29sbGF0ZV9vYmpoZGwgewogX0xDX2NvbGxh dGVfdCAqb2JqOwoKCiB2b2lkICooKiptZXRoKSgpOwoKCnN0cnVjdCBfTENfbG9jYWxlX29iamhk bCAqbG9jX2hkbDsKCgp9OwojIDM5MiAiL3Vzci9pbmNsdWRlL3N5cy9sb2NhbGVkZWYuaCIgMyA0 CnR5cGVkZWYgc3RydWN0IHsKCiAgICBjaGFyICpuYW1lOwogICAgdW5zaWduZWQKIGludCBtYXNr OwoKfSBfTENfY2xhc3NubV90OwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoKICBfTENfY29yZV9j dHlwZV90IGNvcmU7CgoKICB3Y2hhcl90IG1pbl93YzsKICB3Y2hhcl90IG1heF93YzsKCgogIHdj aGFyX3QgKnVwcGVyOwogIHdjaGFyX3QgKmxvd2VyOwoKCiAgdW5zaWduZWQKICAgICAgaW50ICpt YXNrOwogIHVuc2lnbmVkCiAgICAgIGludCAqcW1hc2s7CiAgdW5zaWduZWQKICAgICAgY2hhciAq cWlkeDsKCgogIHVuc2lnbmVkCiAgICAgIGNoYXIgbmNsYXNzZXM7CiBfTENfY2xhc3NubV90ICpj bGFzc25tczsKCiAgICBzdHJ1Y3QgX19MQ19sb2NhbGUKICAgICAgICAgICAgICAgKmxvY19yZWM7 CgogICAgdm9pZCAqX19tZXRoX3B0cjsKICAgIHZvaWQgKl9fZGF0YV9wdHI7Cgp9IF9MQ19jdHlw ZV90OwoKdHlwZWRlZiBzdHJ1Y3QgX0xDX2N0eXBlX29iamhkbCBfTENfY3R5cGVfb2JqaGRsX3Q7 CnN0cnVjdCBfTENfY3R5cGVfb2JqaGRsIHsKIF9MQ19jdHlwZV90ICpvYmo7CgoKIHZvaWQgKigq Km1ldGgpKCk7CgoKc3RydWN0IF9MQ19sb2NhbGVfb2JqaGRsICpsb2NfaGRsOwoKCn07CiMgNDY1 ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZi5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX19MQ19s b2NhbGUgewoKICAgIF9MQ19jb3JlX2xvY2FsZV90IGNvcmU7CgogICAgY2hhciAqbmxfaW5mb1s2 M107CiAgICBzdHJ1Y3QgbGNvbnYgKm5sX2xjb252OwoKICAgIF9MQ19jaGFybWFwX29iamhkbF90 IGxjX2NoYXJtYXA7CiAgICBfTENfY29sbGF0ZV9vYmpoZGxfdCBsY19jb2xsYXRlOwogICAgX0xD X2N0eXBlX29iamhkbF90IGxjX2N0eXBlOwogICAgX0xDX21vbmV0YXJ5X29iamhkbF90IGxjX21v bmV0YXJ5OwogICAgX0xDX251bWVyaWNfb2JqaGRsX3QgbGNfbnVtZXJpYzsKICAgIF9MQ19yZXNw X29iamhkbF90IGxjX3Jlc3A7CiAgICBfTENfdGltZV9vYmpoZGxfdCBsY190aW1lOwoKICAgIHN0 cnVjdCBfX0xDX2xvY2FsZSAqbG9jX3JlYzsKCgogICAgdm9pZCAqX19tZXRoX3B0cjsKICAgIHZv aWQgKl9fZGF0YV9wdHI7CgogICAgY2hhciAqX19ubF95ZXNzdHI7CiAgICBjaGFyICpfX25sX25v c3RyOwogICAgY2hhciAqX19ubF9jcm5jeXN0cjsKCn0gX0xDX2xvY2FsZV90OwoKdHlwZWRlZiBz dHJ1Y3QgX0xDX2xvY2FsZV9vYmpoZGwgX0xDX2xvY2FsZV9vYmpoZGxfdDsKc3RydWN0IF9MQ19s b2NhbGVfb2JqaGRsIHsKIF9MQ19sb2NhbGVfdCAqb2JqOwoKCiB2b2lkICooKiptZXRoKSgpOwoK CnN0cnVjdCBfTENfbG9jYWxlX29iamhkbCAqbG9jX2hkbDsKCgp9OwojIDUxMiAiL3Vzci9pbmNs dWRlL3N5cy9sb2NhbGVkZWYuaCIgMyA0CnR5cGVkZWYgc3RydWN0IF9MQ19vYmplY3RfaGFuZGxl IF9MQ19vYmplY3RfaGFuZGxlX3Q7CnN0cnVjdCBfTENfb2JqZWN0X2hhbmRsZSB7CiAgICB1bmlv biB7CiBfTENfb2JqZWN0X3QgbGNfb2JqZWN0OwogX0xDX2xvY2FsZV9vYmpoZGxfdCBsY19sb2Nh bGU7CiAgICAgICAgX0xDX2NoYXJtYXBfb2JqaGRsX3QgbGNfY2hhcm1hcDsKICAgICAgICBfTENf Y29sbGF0ZV9vYmpoZGxfdCBsY19jb2xsYXRlOwogICAgICAgIF9MQ19jdHlwZV9vYmpoZGxfdCBs Y19jdHlwZTsKICAgICAgICBfTENfbW9uZXRhcnlfb2JqaGRsX3QgbGNfbW9uZXRhcnk7CiAgICAg ICAgX0xDX251bWVyaWNfb2JqaGRsX3QgbGNfbnVtZXJpYzsKICAgICAgICBfTENfcmVzcF9vYmpo ZGxfdCBsY19yZXNwOwogICAgICAgIF9MQ190aW1lX29iamhkbF90IGxjX3RpbWU7CiAgICB9IG9i ajsKCgogICAgdm9pZCAqKCoqbWV0aCkoKTsKCgpzdHJ1Y3QgX0xDX2xvY2FsZV9vYmpoZGwgKmxv Y19oZGw7CgoKfTsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBfTENfb2JqZWN0X3QgaGRyOwogICAg X0xDX2xvY2FsZV9vYmpoZGxfdCBoYW5kbGU7Cn0gX0xDX2xvYWRfb2JqZWN0X3Q7CgoKCgoKCgpl eHRlcm4gX0xDX2NoYXJtYXBfb2JqaGRsX3QgX19sY19jaGFybWFwOwpleHRlcm4gX0xDX2NvbGxh dGVfb2JqaGRsX3QgX19sY19jb2xsYXRlOwpleHRlcm4gX0xDX2N0eXBlX29iamhkbF90IF9fbGNf Y3R5cGU7CmV4dGVybiBfTENfbW9uZXRhcnlfb2JqaGRsX3QgX19sY19tb25ldGFyeTsKZXh0ZXJu IF9MQ19udW1lcmljX29iamhkbF90IF9fbGNfbnVtZXJpYzsKZXh0ZXJuIF9MQ19yZXNwX29iamhk bF90IF9fbGNfcmVzcDsKZXh0ZXJuIF9MQ190aW1lX29iamhkbF90IF9fbGNfdGltZTsKZXh0ZXJu IF9MQ19sb2NhbGVfb2JqaGRsX3QgX19sY19sb2NhbGU7CiMgMTMyICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0 CgoKCgoKCgogZXh0ZXJuIGludCBpc193Y3R5cGUod2ludF90LCB3Y3R5cGVfdCk7CiBleHRlcm4g d2N0eXBlX3QgZ2V0X3djdHlwZShjaGFyICopOwogZXh0ZXJuIGludCBpc2JsYW5rKGludCk7CiMg NTAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jY3R5cGUiIDIgMwojIDY2ICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQK ewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjppc2NudHJs OwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjppc2xvd2Vy OwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjppc3NwYWNl OwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6dG9sb3dl cjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p bmNsdWRlL2lvc2Z3ZCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl L2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9zdHJpbmdmd2QuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPGNsYXNzIF9D aGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBl bmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7 CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0eXBlZGVmIGJhc2lj X3N0cmluZzxjaGFyPiBzdHJpbmc7CgoKCgoKCn0KIyA0OSAiL2djYy9kamUvYnVpbGQvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr Ky12My9pbmNsdWRlL2lvc2Z3ZCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p bmNsdWRlL2JpdHMvZnBvcy5oIiAxIDMKIyA0MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p bmNsdWRlL2JpdHMvZnBvcy5oIiAzCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j bHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi9nY2Mv ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMv YysraW8uaCIgMwojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jc3RkaW8i IDEgMwojIDQ4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY3N0ZGlvIiAzCgoK IyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY3N0ZGRlZiIgMSAzCiMgNDcg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jc3RkZGVmIiAzCgojIDEgIi9nY2Mv ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMyA0CiMgNDkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jc3Rk ZGVmIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6 c2l6ZV90Owp9CiMgNTEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jc3RkaW8i IDIgMwoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiMgMTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMyA0CiMgMSAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9z dGRhcmcuaCIgMSAzIDQKIyA0MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYgX19idWlsdGluX3Zh X2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgMTUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKIyA2MSAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdGRp by5oIiAzIDQKZXh0ZXJuICJDIiB7CiMgMTUwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp0eXBlZGVmIHN0cnVj dCB7CiB1bnNpZ25lZCBjaGFyICpfcHRyOwogaW50IF9jbnQ7CiB1bnNpZ25lZCBjaGFyICpfYmFz ZTsKIHVuc2lnbmVkIGNoYXIgKl9idWZlbmRwOwogc2hvcnQgX2ZsYWc7CiBzaG9ydCBfZmlsZTsK IGludCBfX3N0ZGlvaWQ7CiBjaGFyICpfX25ld2Jhc2U7CgoKCiBsb25nIF91bnVzZWRbMV07CgoK Cgp9IEZJTEU7CgoKCgpleHRlcm4gRklMRSBfaW9iWzE2XTsKIyAxODUgIi9nY2MvZGplL2J1aWxk L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMyA0 CmV4dGVybiBzaXplX3QgZnJlYWQodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKZXh0 ZXJuIHNpemVfdCBmd3JpdGUoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCxGSUxFICopOwoj IDIzNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2Mv aW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCBfX2Zsc2J1Zih1bnNpZ25lZCBjaGFyLCBG SUxFICopOwpleHRlcm4gaW50IF9fZmlsYnVmKEZJTEUgKik7CmV4dGVybiBpbnQgZmVycm9yKEZJ TEUgKik7CmV4dGVybiBpbnQgZmVvZihGSUxFICopOwpleHRlcm4gdm9pZCBjbGVhcmVycihGSUxF ICopOwpleHRlcm4gaW50IHB1dGNoYXIoaW50KTsKZXh0ZXJuIGludCBnZXRjaGFyKHZvaWQpOwpl eHRlcm4gaW50IHB1dGMoaW50LCBGSUxFICopOwpleHRlcm4gaW50IGdldGMoRklMRSAqKTsKZXh0 ZXJuIGludCByZW1vdmUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCByZW5hbWUoY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRSAqdG1wZmlsZSh2b2lkKTsKZXh0ZXJuIGNo YXIgKnRtcG5hbShjaGFyICopOwpleHRlcm4gaW50IGZjbG9zZShGSUxFICopOwpleHRlcm4gaW50 IGZmbHVzaChGSUxFICopOwpleHRlcm4gRklMRSAqZm9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICopOwpleHRlcm4gRklMRSAqZnJlb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg RklMRSAqKTsKZXh0ZXJuIHZvaWQgc2V0YnVmKEZJTEUgKiwgY2hhciAqKTsKZXh0ZXJuIGludCBz ZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNpemVfdCk7CmV4dGVybiBpbnQgZnByaW50ZihG SUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCBmc2NhbmYoRklMRSAqLCBjb25z dCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0 ZXJuIGludCBzY2FuZihjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgc3ByaW50ZihjaGFy ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc25wcmludGYoY2hhciAqLCBzaXpl X3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqLCAuLi4pOwojIDI3MiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdGRpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1 ZGUvdmFfbGlzdC5oIiAxIDMgNAojIDI3MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdGRpby5oIiAyIDMgNApleHRlcm4gaW50IHZm cHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmV4dGVybiBpbnQg dnByaW50Zihjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKZXh0ZXJuIGludCB2c3ByaW50 ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwoKZXh0ZXJuIGludCB2c25w cmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwoKCgpl eHRlcm4gaW50IGZnZXRjKEZJTEUgKik7CmV4dGVybiBjaGFyICpmZ2V0cyhjaGFyICosIGludCwg RklMRSAqKTsKZXh0ZXJuIGludCBmcHV0YyhpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQgZnB1dHMo Y29uc3QgY2hhciAqLCBGSUxFICopOwpleHRlcm4gY2hhciAqZ2V0cyhjaGFyICopOwpleHRlcm4g aW50IHB1dHMoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCB1bmdldGMoaW50LCBGSUxFICopOwpl eHRlcm4gaW50IGZnZXRwb3MoRklMRSAqLCBmcG9zX3QgKik7CmV4dGVybiBpbnQgZnNlZWsoRklM RSAqLCBsb25nIGludCwgaW50KTsKZXh0ZXJuIGludCBmc2V0cG9zKEZJTEUgKiwgY29uc3QgZnBv c190ICopOwpleHRlcm4gbG9uZyBmdGVsbChGSUxFICopOwpleHRlcm4gdm9pZCByZXdpbmQoRklM RSAqKTsKZXh0ZXJuIHZvaWQgcGVycm9yKGNvbnN0IGNoYXIgKik7CgoKCgoKZXh0ZXJuIGludCBn ZXRjX3VubG9ja2VkKEZJTEUgKik7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKTsK ZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkKGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBwdXRjaGFy X3VubG9ja2VkKGludCk7CiMgMzg4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gaW50IGZpbGVubyhG SUxFICopOwpleHRlcm4gRklMRSAqZmRvcGVuKGludCxjb25zdCBjaGFyICopOwpleHRlcm4gY2hh ciAqY3Rlcm1pZChjaGFyICopOwoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlKEZJTEUgKik7CmV4dGVy biB2b2lkIGZ1bmxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiBpbnQgZnNlZWtvKEZJTEUgKiwgb2Zm X3QsIGludCk7CmV4dGVybiBvZmZfdCBmdGVsbG8oRklMRSAqKTsKZXh0ZXJuIGludCBmdHJ5bG9j a2ZpbGUoRklMRSAqKTsKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUoRklMRSAqKTsKIyA0MTAgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUv c3RkaW8uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3ZhX2xpc3QuaCIgMSAzIDQKIyA0MTEgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUv c3RkaW8uaCIgMiAzIDQKCmV4dGVybiBjaGFyICpvcHRhcmc7CmV4dGVybiBpbnQgb3B0ZXJyOwpl eHRlcm4gaW50IG9wdGluZDsKZXh0ZXJuIGludCBvcHRvcHQ7CiMgNDI4ICIvZ2NjL2RqZS9idWls ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDMg NApleHRlcm4gaW50IGdldHcoRklMRSAqKTsKZXh0ZXJuIGludCBwdXR3KGludCwgRklMRSAqKTsK ZXh0ZXJuIGNoYXIgKnRlbXBuYW0oY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKZXh0ZXJuIEZJ TEUgKnBvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBwY2xvc2Uo RklMRSAqKTsKZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICogY29uc3QgW10sIGNvbnN0IGNo YXIqKTsKZXh0ZXJuIGNoYXIgKmN1c2VyaWQoY2hhciAqKTsKIyA0NDggIi9nY2MvZGplL2J1aWxk L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMyA0 CmV4dGVybiBpbnQgZmdldHBvczY0KEZJTEUgKiwgZnBvczY0X3QgKik7CmV4dGVybiBGSUxFICpm b3BlbjY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIEZJTEUgKmZyZW9wZW42 NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIGludCBmc2Vla282 NChGSUxFICosIG9mZjY0X3QsIGludCk7CmV4dGVybiBpbnQgZnNldHBvczY0KEZJTEUgKiwgY29u c3QgZnBvczY0X3QgKik7CmV4dGVybiBvZmY2NF90IGZ0ZWxsbzY0KEZJTEUgKik7CiMgNDYzICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRl L3N0ZGlvLmgiIDMgNApleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAqLCBjaGFyICosIHNpemVf dCk7CmV4dGVybiB2b2lkIHNldGxpbmVidWYoRklMRSAqKTsKZXh0ZXJuIGludCB2c2NhbmYoY29u c3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmV4dGVybiBpbnQgdmZzY2FuZihGSUxFICosIGNv bnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwpleHRlcm4gaW50IHZzc2NhbmYoY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKIyA1MzQgIi9nY2MvZGplL2J1aWxk L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMyA0 Cn0KIyA1MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NzdGRpbyIgMiAzCiMg OTcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jc3RkaW8iIDMKbmFtZXNwYWNl IHN0ZAp7CiAgdXNpbmcgOjpGSUxFOwogIHVzaW5nIDo6ZnBvc190OwoKICB1c2luZyA6OmNsZWFy ZXJyOwogIHVzaW5nIDo6ZmNsb3NlOwogIHVzaW5nIDo6ZmVvZjsKICB1c2luZyA6OmZlcnJvcjsK ICB1c2luZyA6OmZmbHVzaDsKICB1c2luZyA6OmZnZXRjOwogIHVzaW5nIDo6ZmdldHBvczsKICB1 c2luZyA6OmZnZXRzOwogIHVzaW5nIDo6Zm9wZW47CiAgdXNpbmcgOjpmcHJpbnRmOwogIHVzaW5n IDo6ZnB1dGM7CiAgdXNpbmcgOjpmcHV0czsKICB1c2luZyA6OmZyZWFkOwogIHVzaW5nIDo6ZnJl b3BlbjsKICB1c2luZyA6OmZzY2FuZjsKICB1c2luZyA6OmZzZWVrOwogIHVzaW5nIDo6ZnNldHBv czsKICB1c2luZyA6OmZ0ZWxsOwogIHVzaW5nIDo6ZndyaXRlOwogIHVzaW5nIDo6Z2V0YzsKICB1 c2luZyA6OmdldGNoYXI7CiAgdXNpbmcgOjpnZXRzOwogIHVzaW5nIDo6cGVycm9yOwogIHVzaW5n IDo6cHJpbnRmOwogIHVzaW5nIDo6cHV0YzsKICB1c2luZyA6OnB1dGNoYXI7CiAgdXNpbmcgOjpw dXRzOwogIHVzaW5nIDo6cmVtb3ZlOwogIHVzaW5nIDo6cmVuYW1lOwogIHVzaW5nIDo6cmV3aW5k OwogIHVzaW5nIDo6c2NhbmY7CiAgdXNpbmcgOjpzZXRidWY7CiAgdXNpbmcgOjpzZXR2YnVmOwog IHVzaW5nIDo6c3ByaW50ZjsKICB1c2luZyA6OnNzY2FuZjsKICB1c2luZyA6OnRtcGZpbGU7CiAg dXNpbmcgOjp0bXBuYW07CiAgdXNpbmcgOjp1bmdldGM7CiAgdXNpbmcgOjp2ZnByaW50ZjsKICB1 c2luZyA6OnZwcmludGY7CiAgdXNpbmcgOjp2c3ByaW50ZjsKfQojIDM2ICIvZ2NjL2RqZS9idWls ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv bGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL2MrK2lvLmgi IDIgMwoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9iaXRzL2d0aHIuaCIgMSAzCiMgOTYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst djMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvZ3Roci5oIiAzCiMgMSAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvYml0 cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j bHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKIyAxICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9i aXRzL2d0aHItc2luZ2xlLmgiIDEgMwojIDM0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL2d0aHItc2luZ2xlLmgiIDMKdHlwZWRl ZiBpbnQgX19ndGhyZWFkX211dGV4X3Q7CiMgMjExICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL2d0aHItc2luZ2xlLmgiIDMKc3Rh dGljIGlubGluZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0K CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhf dCAqICkKewogIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhf dHJ5bG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsKICByZXR1cm4gMDsKfQoKc3RhdGljIGlu bGluZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsK ICByZXR1cm4gMDsKfQojIDM2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL2d0aHItZGVmYXVsdC5oIiAyIDMKIyA5NyAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvYml0cy9n dGhyLmgiIDIgMwojIDM4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5 cGVkZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCgoK ICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRl eF90IF9fY19sb2NrOwoKCiAgdHlwZWRlZiBGSUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9faW9z X2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25z dCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zp eGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4 OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBz dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRp ZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAw eDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7 CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90 eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsK CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7 CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgy MDsKICB9Owp9CiMgNDUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Zw b3MuaCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2N3Y2hhciIg MSAzCiMgNDggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jd2NoYXIiIDMKCgoK IyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY3RpbWUiIDEgMwojIDQ4ICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY3RpbWUiIDMKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAxIDMgNAojIDMwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJu ICJDIiB7CiMgNzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApzdHJ1Y3QgdG0gewogaW50IHRt X3NlYzsKIGludCB0bV9taW47CiBpbnQgdG1faG91cjsKIGludCB0bV9tZGF5OwogaW50IHRtX21v bjsKIGludCB0bV95ZWFyOwogaW50IHRtX3dkYXk7CiBpbnQgdG1feWRheTsKIGludCB0bV9pc2Rz dDsKfTsKIyAxMTAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAogICAgZXh0ZXJuIHNpemVfdCBz dHJmdGltZShjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7 CiAgICBleHRlcm4gY2xvY2tfdCBjbG9jayh2b2lkKTsKICAgIGV4dGVybiBkb3VibGUgZGlmZnRp bWUodGltZV90LCB0aW1lX3QpOwogICAgZXh0ZXJuIHRpbWVfdCBta3RpbWUoc3RydWN0IHRtICop OwogICAgZXh0ZXJuIHRpbWVfdCB0aW1lKHRpbWVfdCAqKTsKICAgIGV4dGVybiBjaGFyICphc2N0 aW1lKGNvbnN0IHN0cnVjdCB0bSAqKTsKICAgIGV4dGVybiBjaGFyICpjdGltZShjb25zdCB0aW1l X3QgKik7CiAgICBleHRlcm4gc3RydWN0IHRtICpnbXRpbWUoY29uc3QgdGltZV90ICopOwogICAg ZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lKGNvbnN0IHRpbWVfdCAqKTsKIyAxMjggIi91c3Iv aW5jbHVkZS90aW1lLmgiIDMgNAogICAgZXh0ZXJuIGNoYXIgKmFzY3RpbWVfcihjb25zdCBzdHJ1 Y3QgdG0gKiwgY2hhciAqKTsKICAgIGV4dGVybiBjaGFyICpjdGltZV9yKGNvbnN0IHRpbWVfdCAq LCBjaGFyICopOwogICAgZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IoY29uc3QgdGltZV90ICos IHN0cnVjdCB0bSAqKTsKICAgIGV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yKGNvbnN0IHRp bWVfdCAqLCBzdHJ1Y3QgdG0gKik7CiMgMTU2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0 ZXJuIGNoYXIgKnR6bmFtZVtdOwoKCgoKICAgIGV4dGVybiB2b2lkIHR6c2V0KHZvaWQpOwoKCgoK CiAgICBleHRlcm4gbG9uZyB0aW1lem9uZTsKICAgIGV4dGVybiBpbnQgZGF5bGlnaHQ7CgoKCiAg ICBleHRlcm4gY2hhciAqc3RycHRpbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0cnVj dCB0bSAqKTsKCgoKCiBleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgogZXh0ZXJuIHN0cnVjdCB0 bSAqZ2V0ZGF0ZShjb25zdCBjaGFyICopOwoKCgoKc3RydWN0IHRpbWVzcGVjIHsKICAgICAgICB0 aW1lX3QgdHZfc2VjOwogICAgICAgIGxvbmcgdHZfbnNlYzsKfTsKCnN0cnVjdCBpdGltZXJzcGVj IHsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICAgICAgc3RydWN0IHRp bWVzcGVjIGl0X3ZhbHVlOwp9OwoKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMoY2xvY2tpZF90 LCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZShjbG9ja2lkX3Qs IHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCwg Y29uc3Qgc3RydWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IG5hbm9zbGVlcChjb25zdCBzdHJ1 Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICopOwoKCgpleHRlcm4gaW50IHRpbWVyX2Ny ZWF0ZShjbG9ja2lkX3QsIHZvaWQgKiwgdGltZXJfdCAqKTsKCmV4dGVybiBpbnQgdGltZXJfZGVs ZXRlKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVyX2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0 aW1lcnNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90KTsKZXh0ZXJu IGludCB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMg Kiwgc3RydWN0IGl0aW1lcnNwZWMgKik7CgoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDIx OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQKIyAyMjcgIi91c3IvaW5jbHVkZS90aW1lLmgi IDMgNAogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKk5MY3RpbWUobG9uZyAqKTsKIGV4dGVybiB1bnNp Z25lZCBjaGFyICpOTGFzY3RpbWUoc3RydWN0IHRtICopOwogZXh0ZXJuIGNoYXIgKk5Mc3RydGlt ZShjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7CgoKCgp9 CiMgNTIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jdGltZSIgMiAzCiMgNjQg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jdGltZSIgMwpuYW1lc3BhY2Ugc3Rk CnsKICB1c2luZyA6OmNsb2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAg dXNpbmcgOjpjbG9jazsKICB1c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVz aW5nIDo6dGltZTsKICB1c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6 OmdtdGltZTsKICB1c2luZyA6OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jd2NoYXIiIDIgMwoKCiMgMSAiL3Vz ci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMgNDQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQK ZXh0ZXJuICJDIiB7CiMgNjIgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKdHlwZWRlZiBjaGFy ICogbWJzdGF0ZV90OwojIDEyNyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNApleHRlcm4gd2lu dF90IGZnZXR3YyhGSUxFICopOwpleHRlcm4gd2NoYXJfdCAqZmdldHdzKHdjaGFyX3QgKiwgaW50 LCBGSUxFICopOwpleHRlcm4gaW50IGZwdXR3cyhjb25zdCB3Y2hhcl90ICosIEZJTEUgKik7CmV4 dGVybiB3aW50X3QgZ2V0d2MoRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcih2b2lkKTsK CgpleHRlcm4gaW50IGlzd2FsbnVtKHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3YWxwaGEod2ludF90 KTsKZXh0ZXJuIGludCBpc3djbnRybCh3aW50X3QpOwpleHRlcm4gaW50IGlzd2RpZ2l0KHdpbnRf dCk7CmV4dGVybiBpbnQgaXN3Z3JhcGgod2ludF90KTsKZXh0ZXJuIGludCBpc3dsb3dlcih3aW50 X3QpOwpleHRlcm4gaW50IGlzd3ByaW50KHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3cHVuY3Qod2lu dF90KTsKZXh0ZXJuIGludCBpc3dzcGFjZSh3aW50X3QpOwpleHRlcm4gaW50IGlzd3VwcGVyKHdp bnRfdCk7CmV4dGVybiBpbnQgaXN3eGRpZ2l0KHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3Y3R5cGUg KHdpbnRfdCwgd2N0eXBlX3QpOwpleHRlcm4gaW50IHRvd2xvd2VyKHdpbnRfdCk7CmV4dGVybiBp bnQgdG93dXBwZXIod2ludF90KTsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2Mod2NoYXJfdCwgRklM RSAqKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Yyh3Y2hhcl90LCBGSUxFICopOwpleHRlcm4gd2ludF90 IHB1dHdjaGFyKHdjaGFyX3QpOwoKCgoKCgpleHRlcm4gd2ludF90IHVuZ2V0d2Mod2ludF90LCBG SUxFICopOwpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlKGNvbnN0IGNoYXIqKTsKZXh0ZXJuIHdjaGFy X3QgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3 Y3NjaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKZXh0ZXJuIGludCB3Y3NjbXAoY29uc3Qg d2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gaW50IHdjc2NvbGwoY29uc3Qgd2No YXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gd2NoYXJfdCAqd2NzY3B5KHdjaGFyX3Qg KiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuKGNvbnN0IHdjaGFyX3Qg KiwgY29uc3Qgd2NoYXJfdCAqKTsKCnN0YXRpYyBzaXplX3Qgd2NzZnRpbWUod2NoYXJfdCAqX193 Y3NmdGltZV93Y3MsIHNpemVfdCBfX3djc2Z0aW1lX21heHNpemUsCiAgY29uc3Qgd2NoYXJfdCAq X193Y3NmdGltZV9mb3JtYXQsCiAgY29uc3Qgc3RydWN0IHRtICpfX3djc2Z0aW1lX3RpbXB0cikK ewogICAgZXh0ZXJuIHNpemVfdCBfX2lzb193Y3NmdGltZSh3Y2hhcl90ICosIHNpemVfdCwgY29u c3Qgd2NoYXJfdCAqLAogICAgIGNvbnN0IHN0cnVjdCB0bSAqKTsKICAgIHJldHVybiBfX2lzb193 Y3NmdGltZShfX3djc2Z0aW1lX3djcywgX193Y3NmdGltZV9tYXhzaXplLCBfX3djc2Z0aW1lX2Zv cm1hdCwKICAgICBfX3djc2Z0aW1lX3RpbXB0cik7Cn0KCgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4o Y29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQod2NoYXJfdCAqLCBjb25z dCB3Y2hhcl90ICosIHNpemVfdCk7CmV4dGVybiBpbnQgd2NzbmNtcChjb25zdCB3Y2hhcl90ICos IGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkod2NoYXJf dCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CmV4dGVybiB3Y2hhcl90ICp3Y3NwYnJrKGNv bnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIo Y29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKZXh0ZXJuIHNpemVfdCB3Y3NzcG4oY29uc3Qgd2No YXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gZG91YmxlIHdjc3RvZChjb25zdCB3Y2hh cl90ICosIHdjaGFyX3QgKiopOwoKc3RhdGljIHdjaGFyX3QgKndjc3Rvayh3Y2hhcl90ICpfX3dj c3Rva193czEsIGNvbnN0IHdjaGFyX3QgKl9fd2NzdG9rX3dzMiwKICAgICAgICAgd2NoYXJfdCAq Kl9fd2NzdG9rX3B0cikKewogICAgZXh0ZXJuIHdjaGFyX3QgKl9faXNvX3djc3Rvayh3Y2hhcl90 ICosIGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CiAgICByZXR1cm4gX19pc29fd2NzdG9r KF9fd2NzdG9rX3dzMSwgX193Y3N0b2tfd3MyLCBfX3djc3Rva19wdHIpOwp9CgoKCgoKCmV4dGVy biBsb25nIHdjc3RvbChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCk7CmV4dGVybiB1 bnNpZ25lZCBsb25nIHdjc3RvdWwoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOwpl eHRlcm4gd2NoYXJfdCAqd2Nzd2NzKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsK ZXh0ZXJuIGludCB3Y3N3aWR0aChjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CmV4dGVybiBzaXpl X3Qgd2NzeGZybSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIGlu dCB3Y3dpZHRoKHdjaGFyX3QpOwoKCmV4dGVybiB3aW50X3QgYnRvd2MoaW50KTsKZXh0ZXJuIGlu dCBmd3ByaW50ZihGSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKZXh0ZXJuIGludCBmd3Nj YW5mKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IGZ3aWRlKEZJTEUg KiwgaW50KTsKZXh0ZXJuIGludCBtYnNpbml0KGNvbnN0IG1ic3RhdGVfdCAqKTsKZXh0ZXJuIHNp emVfdCBtYnJsZW4oY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIHNp emVfdCBtYnJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVfdCAq KTsKZXh0ZXJuIHNpemVfdCBtYnNydG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICoqLCBzaXpl X3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIGludCBzd3ByaW50Zih3Y2hhcl90ICosIHNpemVfdCwg Y29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IHN3c2NhbmYoY29uc3Qgd2NoYXJfdCAq LCBjb25zdCB3Y2hhcl90ICosIC4uLik7CgpleHRlcm4gaW50IHZmd3ByaW50ZihGSUxFICosIGNv bnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CmV4dGVybiBpbnQgdndwcmludGYoY29uc3Qgd2NoYXJf dCAqLCB2YV9saXN0KTsKZXh0ZXJuIGludCB2c3dwcmludGYod2NoYXJfdCAqLCBzaXplX3QsIGNv bnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CgoKCgoKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIoY2hh ciAqLCB3Y2hhcl90LCBtYnN0YXRlX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzcnRvbWJzKGNoYXIg KiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CmV4dGVybiB3Y2hhcl90 ICp3Y3NzdHIoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gaW50IHdj dG9iKHdpbnRfdCk7CmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUoY29uc3QgY2hhciAqKTsKZXh0ZXJu IHdjaGFyX3QgKndtZW1jaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90LCBzaXplX3QpOwpleHRl cm4gaW50IHdtZW1jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7 CmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXpl X3QpOwpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICos IHNpemVfdCk7CmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0KHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6 ZV90KTsKZXh0ZXJuIGludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKZXh0ZXJuIGlu dCB3c2NhbmYoY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwojIDI2OSAiL3Vzci9pbmNsdWRlL3djaGFy LmgiIDMgNApleHRlcm4gd2NoYXJfdCAqZ2V0d3Mod2NoYXJfdCAqKTsKZXh0ZXJuIGludCBwdXR3 cyhjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gaW50IHdzcHJpbnRmKHdjaGFyX3QgKiwgY29uc3Qg Y2hhciAqLCAuLi4pOwoKZXh0ZXJuIGludCB2d3NwcmludGYod2NoYXJfdCAqLCBjb25zdCBjaGFy ICosIHZhX2xpc3QpOwoKCgoKCmV4dGVybiBpbnQgd2NzY2FzZWNtcChjb25zdCB3Y2hhcl90ICos IGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3Y3NkdXAoY29uc3Qgd2NoYXJfdCAq KTsKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3Qg Kiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVfdCB3Y3NubGVuKGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90 KTsKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6 ZV90LCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQoY29u c3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKZXh0ZXJuIGZsb2F0IHdjc3RvZihjb25zdCB3Y2hh cl90ICosIHdjaGFyX3QgKiopOwpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3Mod2NoYXJfdCAqLCBj b25zdCBjaGFyICoqLCBzaXplX3QsIHNpemVfdCwgbWJzdGF0ZV90ICopOwpleHRlcm4gd2NoYXJf dCAqd2NwY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndj cG5jcHkod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CgoKCmV4dGVybiB3Y2hh cl90ICpzdHJ0b3dzKHdjaGFyX3QgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKndzdHJ0b3MoY2hh ciAqLCB3Y2hhcl90ICopOwojIDMxNyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNApleHRlcm4g bG9uZyBsb25nIGludCB3Y3N0b2xsKAogICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICB3Y2hhcl90 ICoqLAogICAgIGludCApOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VsbCgK ICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgd2NoYXJfdCAqKiwKICAgICBpbnQgKTsKCgoKCgp9 CiMgNTUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jd2NoYXIiIDIgMwojIDY5 ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY3djaGFyIiAzCm5hbWVzcGFjZSBz dGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgNDYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst djMvaW5jbHVkZS9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBz dHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVibGljOgog ICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9zdDsgfQoK ICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7 IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5 cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBlIF9fc3Qg PSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0KSB7IH0K CiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAg ICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmICs9IF9f b2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0oc3RyZWFt b2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9z CiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKIGZwb3MgX190KCp0aGlz KTsKIF9fdCArPSBfX29mZjsKIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAg b3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogZnBvcyBfX3QoKnRoaXMpOwogX190 IC09IF9fb2ZmOwogcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRv cj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19w b3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19w b3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAg IHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoK ICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0g X19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgoK Cgp9CiMgNTAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pb3Nmd2QiIDIgMwoj IDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Z1bmN0ZXhjZXB0Lmgi IDEgMwojIDM0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9mdW5jdGV4 Y2VwdC5oIiAzCiMgMSAiL2djYy9kamUvc3JjL2xpYnN0ZGMrKy12My9saWJzdXBjKysvZXhjZXB0 aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk ZS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Ro cm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9p ZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3df YmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df cnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9f cyk7Cn0KIyA1MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2lvc2Z3ZCIgMiAz CgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg YmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgIHR5cGVu YW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1 ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90 cmFpdHM8X0NoYXJUPiwKICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4K ICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICB0eXBlbmFtZSBf QWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFt OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry YWl0czxfQ2hhclQ+LAogICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgog ICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj X2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9 IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy VD4gPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz aWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz ID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0 czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9z X2Jhc2U7CiMgMTM2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaW9zZndkIiAz CiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm PGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsK ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lv c3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0 cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVh bTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0 eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBi YXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFy PiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5 cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwojIDE2NiAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL2lvc2Z3ZCIgMwp9CiMgNDUgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9pb3MiIDIgMwojIDEgIi9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvbGli c3VwYysrL2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvbGli c3VwYysrL2V4Y2VwdGlvbiIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CiMgNTIg Ii9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvbGlic3VwYysrL2V4Y2VwdGlvbiIgMwogIGNsYXNz IGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAg dmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3 aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJs aWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsg fQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAgdHlwZWRl ZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVj dGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJt aW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVf XyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVk KHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0 cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyAxMDAgIi9nY2MvZGplL3NyYy9saWJzdGRjKyst djMvbGlic3VwYysrL2V4Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhy b3coKTsKfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiMgMTE1ICIvZ2NjL2RqZS9zcmMvbGlic3Rk YysrLXYzL2xpYnN1cGMrKy9leGNlcHRpb24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVf aGFuZGxlciAoKTsKfQoKfQojIDQ2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv aW9zIiAyIDMKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9jaGFy X3RyYWl0cy5oIiAxIDMKIyA0NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Jp dHMvY2hhcl90cmFpdHMuaCIgMwoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1 ZGUvY3N0cmluZyIgMSAzCiMgNDggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9j c3RyaW5nIiAzCgoKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9nY2MvaW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQKIyA1NyAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdHJpbmcuaCIgMyA0 CmV4dGVybiAiQyIgewojIDEwMCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiAgICAgICAgZXh0ZXJuIHZvaWQg Km1lbWNocihjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsKICAgICAgICBleHRlcm4gdm9pZCAq bWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiB2b2lk ICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CiAgICAgICAgZXh0ZXJuIHNpemVfdCBzdHJj c3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICAgICAgICBleHRlcm4gc2l6ZV90IHN0 cmxlbihjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBzaXplX3Qgc3Ryc3BuKGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqKTsKIyAxMzIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAogICAgICAgIGV4dGVy biB2b2lkICptZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogICAgICAgIGV4 dGVybiBjaGFyICpzdHJjcHkoY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBj aGFyICpzdHJuY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogICAgICAgIGV4dGVy biBjaGFyICpzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBjaGFy ICpzdHJuY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiBp bnQgbWVtY21wKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLHNpemVfdCk7CiAgICAgICAgZXh0 ZXJuIGludCBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVy biBpbnQgc3RybmNtcChjb25zdCBjaGFyICosY29uc3QgY2hhciAqLHNpemVfdCk7CiAgICAgICAg ZXh0ZXJuIGludCBzdHJuY29sbGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgaW50ICk7CiAgICAgICAg ZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICosIGludCk7CiAgICAgICAgZXh0ZXJuIGNo YXIgKnN0cnBicmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBj aGFyICpzdHJyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsKICAgICAgICBleHRlcm4gY2hhciAqc3Ry c3RyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICAgICAgICBleHRlcm4gY2hhciAqc3Ry dG9rKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICAgICAgICBleHRlcm4gY2hhciAqc3RyZXJyb3Io aW50KTsKICAgICAgICBleHRlcm4gaW50IHN0cmNvbGwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICopOwogICAgICAgIGV4dGVybiBzaXplX3Qgc3RyeGZybShjaGFyICosIGNvbnN0IGNoYXIgKiwg c2l6ZV90KTsKIGV4dGVybiBjaGFyICpzdHJ0b2tfcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hh ciAqKik7CiMgMTYzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw NDI4L2djYy9pbmNsdWRlL3N0cmluZy5oIiAzIDQKICAgICAgICBleHRlcm4gdm9pZCAqbWVtY2Nw eSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwojIDE3MiAiL2djYy9kamUvYnVp bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdHJpbmcuaCIg MyA0CmV4dGVybiBjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqKTsKIyAyMTUgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RyaW5nLmgi IDMgNAogICAgICAgIGV4dGVybiBjaGFyICppbmRleChjb25zdCBjaGFyICosIGludCk7CiAgICAg ICAgZXh0ZXJuIGNoYXIgKnJpbmRleChjb25zdCBjaGFyICosIGludCk7CiAgICAgICAgZXh0ZXJu IHZvaWQgc3dhYihjb25zdCB2b2lkICosIHZvaWQgKiwgc3NpemVfdCk7CiAgICAgICAgZXh0ZXJu IHdjaGFyX3QgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAgICAgICAgZXh0 ZXJuIHdjaGFyX3QgKndjc2Nocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOwogICAgICAgIGV4 dGVybiBpbnQgd2NzY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAg ICBleHRlcm4gd2NoYXJfdCAqd2NzY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAg ICAgICBleHRlcm4gc2l6ZV90IHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90 ICopOwogICAgICAgIGV4dGVybiBzaXplX3Qgd2NzbGVuKGNvbnN0IHdjaGFyX3QgKik7CiAgICAg ICAgZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNp emVfdCk7CiAgICAgICAgZXh0ZXJuIGludCB3Y3NuY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qg d2NoYXJfdCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5KHdjaGFy X3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiB3Y2hhcl90ICp3 Y3NwYnJrKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4g d2NoYXJfdCAqd2NzcmNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOwogICAgICAgIGV4dGVy biBzaXplX3Qgd2Nzc3BuKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAg ICBleHRlcm4gd2NoYXJfdCAqd2Nzd2NzKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAq KTsKICAgICAgICBleHRlcm4gaW50IHdjc3dpZHRoKGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsK ICAgICAgICBleHRlcm4gaW50IHdjd2lkdGgod2NoYXJfdCk7CiAgICAgICAgZXh0ZXJuIGludCB3 Y3Njb2xsKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4g c2l6ZV90IHdjc3hmcm0od2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiMgMjk2 ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNs dWRlL3N0cmluZy5oIiAzIDQKfQojIDUyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1 ZGUvY3N0cmluZyIgMiAzCiMgNzcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9j c3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6bWVt bW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpzdHJj YXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVzaW5nIDo6c3RyY21w OwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4ZnJt OwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2luZyA6OnN0cnRvazsK ICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5nIDo6c3RybGVuOwoK ICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50 IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2b2lk Kj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBpbmxpbmUgY2hhcioK ICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hy KGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3RycGJy azsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3My KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9f czEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cnJj aHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycmNocihjb25z dF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnN0cjsKCiAg aW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyBy ZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19z Mik7IH0KfQojIDQ2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9jaGFy X3RyYWl0cy5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA2MSAiL2djYy9kamUvYnVpbGQvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2JpdHMvY2hhcl90cmFpdHMuaCIgMwogIHRlbXBsYXRlPGNsYXNzIF9D aGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7CgogICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5 cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlw ZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lk CiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7Cgog ICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNo YXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5 cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgaW50CiAgICAg IGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp emVfdCBfX24pOwoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90 eXBlKiBfX3MpOwoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25z dCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpOwoKICAg ICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNo YXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAg ICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19u KTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywg c2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAg IHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlw ZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMg Ym9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5 cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpOwoKICAgICAgc3Rh dGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYyk7CiAgICB9OwoK CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0 eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAg dHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90 eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZv aWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQog ICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBj aGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19j MSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUm IF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7 IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEs IGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21w KF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNv bnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAg c3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywg c2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGNvbnN0IGNoYXJfdHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0 YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5 cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlw ZSo+KG1lbW1vdmUoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq CiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVf dCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3Mx LCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNo YXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBz dGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3Rh dGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh cj4oX19jKSk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGlu dF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9 PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8aW50X3R5cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg bm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigp KSA/IDAgOiBfX2M7IH0KICB9OwojIDI1MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs dWRlL2JpdHMvY2hhcl90cmFpdHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIHN0cnVjdCBfQ2hhcl90cmFpdHNfbWF0Y2gKICAgIHsKICAgICAg X0NoYXJUIF9NX2M7CiAgICAgIF9DaGFyX3RyYWl0c19tYXRjaChfQ2hhclQgY29uc3QmIF9fYykg OiBfTV9jKF9fYykgeyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0 JiBfX2EpIHsgcmV0dXJuIF9UcmFpdHM6OmVxKF9NX2MsIF9fYSk7IH0KICAgIH07Cn0KIyA0NyAi L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2lvcyIgMiAzCgojIDEgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0NCAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlZndkLmgiIDMKCgoKCiMg MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBj LWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZnVuY3RleGNlcHQuaCIg MSAzCiMgMzYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Z1bmN0ZXhj ZXB0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24o dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190 aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsK CgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xl bmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFu Z2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK ICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZv aWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0OSAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlZndkLmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CgogIGNsYXNzIGxvY2FsZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K ICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFy VCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu ZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3Qg bG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg ICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0 KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQs IGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg Ym9vbAogICAgaXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQsIGNvbnN0IGxv Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAg ICB0b3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUm KTsKCgogIGNsYXNzIGN0eXBlX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg Y2xhc3MgY3R5cGU7CiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTxjaGFyPjsKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWU7CgoKICBjbGFzcyBjb2Rl Y3Z0X2Jhc2U7CiAgY2xhc3MgX19lbmNfdHJhaXRzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVj dnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFt ZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4g PgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9w dXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVy YXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAg ICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0 aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0g b3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsK CgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5 X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0 cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVu Y3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBj bGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBf X2xvYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNl dChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpOwp9CiMgNDkgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9pb3MiIDIgMwojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv aW5jbHVkZS9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9pb3NfYmFzZS5oIiAzCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvYXRvbWljaXR5LmgiIDEg MwojIDQxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC9iaXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy9hdG9taWNfb3AuaCIgMSAzIDQKIyA0MCAiL3Vzci9pbmNsdWRl L3N5cy9hdG9taWNfb3AuaCIgMyA0CnR5cGVkZWYgaW50ICphdG9taWNfcDsKdHlwZWRlZiB1c2hv cnQgKmF0b21pY19oOwp0eXBlZGVmIGxvbmcgKmF0b21pY19sOwojIDcwICIvdXNyL2luY2x1ZGUv c3lzL2F0b21pY19vcC5oIiAzIDQKaW50IGZldGNoX2FuZF9hZGQoYXRvbWljX3AsaW50KTsKdWlu dCBmZXRjaF9hbmRfYW5kKGF0b21pY19wLHVpbnQpOwp1aW50IGZldGNoX2FuZF9vcihhdG9taWNf cCx1aW50KTsKYm9vbGVhbl90IGNvbXBhcmVfYW5kX3N3YXAoYXRvbWljX3AsaW50ICosaW50KTsK bG9uZyBmZXRjaF9hbmRfYWRkbHAoYXRvbWljX2wsbG9uZyk7CnVsb25nIGZldGNoX2FuZF9hbmRs cChhdG9taWNfbCx1bG9uZyk7CnVsb25nIGZldGNoX2FuZF9vcmxwKGF0b21pY19sLHVsb25nKTsK Ym9vbGVhbl90IGNvbXBhcmVfYW5kX3N3YXBscChhdG9taWNfbCwgbG9uZyAqLCBsb25nKTsKdXNo b3J0IGZldGNoX2FuZF9hZGRfaChhdG9taWNfaCxpbnQpOwojIDEwMiAiL3Vzci9pbmNsdWRlL3N5 cy9hdG9taWNfb3AuaCIgMyA0CmJvb2xlYW5fdCBfY2hlY2tfbG9jayhhdG9taWNfcCwgaW50LCBp bnQpOwp2b2lkIF9jbGVhcl9sb2NrKGF0b21pY19wLCBpbnQpOwppbnQgX3NhZmVfZmV0Y2goYXRv bWljX3ApOwoKCgoKCgojcHJhZ21hIG1jX2Z1bmMgX2NsZWFyX2xvY2sgeyAiNDgwMDM0MDMiIH0K CgojcHJhZ21hIG1jX2Z1bmMgX2NoZWNrX2xvY2sgeyAiNDgwMDM0MjMiIH0KCgojcHJhZ21hIG1j X2Z1bmMgX3NhZmVfZmV0Y2ggeyAiODA2MzAwMDAiICI1NDYzMDAzRiIgIjQxODIwMDA0IiB9CgoK CgojcHJhZ21hIHJlZ19raWxsZWRfYnkgX3NhZmVfZmV0Y2ggY3IwLGdyMwojIDQ0ICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL2F0 b21pY2l0eS5oIiAyIDMKCnN0YXRpYyBpbmxpbmUgaW50Cl9fYXR0cmlidXRlX18gKCh1bnVzZWQp KQpfX2V4Y2hhbmdlX2FuZF9hZGQgKGF0b21pY19wIF9fbWVtLCBpbnQgX192YWwpCnsKICByZXR1 cm4gZmV0Y2hfYW5kX2FkZCAoX19tZW0sIF9fdmFsKTsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9f YXR0cmlidXRlX18gKCh1bnVzZWQpKQpfX2F0b21pY19hZGQgKGF0b21pY19wIF9fbWVtLCBpbnQg X192YWwpCnsKICAodm9pZCkgZmV0Y2hfYW5kX2FkZCAoX19tZW0sIF9fdmFsKTsKfQojIDQ2ICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9pb3NfYmFzZS5oIiAyIDMKCiMg MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBj LWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2NsYXNzZXMu aCIgMSAzCiMgNDQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2Fs ZV9jbGFzc2VzLmgiIDMKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv c3RyaW5nIiAxIDMKIyA0NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmlu ZyIgMwoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5IiAx IDMKIyA1MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL21lbW9yeSIgMwoKIyAx ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIg MSAzCiMgNjYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdv YmFzZS5oIiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NsaW1pdHMi IDEgMwojIDQ4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY2xpbWl0cyIgMwoK IyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9p bmNsdWRlL2xpbWl0cy5oIiAxIDMgNAojIDExICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL2xpbWl0cy5oIiAzIDQKIyAxICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N5c2xp bWl0cy5oIiAxIDMgNAoKCgoKCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu My4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTIyICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL2xpbWl0 cy5oIiAzIDQKIyAxICIvZ2NjL2RqZS9pbnN0YWxsL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC8zLjQvaW5jbHVkZS9saW1p dHMuaCIgMSAzIDQKIyAxMjIgIi9nY2MvZGplL2luc3RhbGwvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjMuMy4wLzMuNC9pbmNsdWRl L2xpbWl0cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTIzICIv Z2NjL2RqZS9pbnN0YWxsL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvbGliL2djYy1s aWIvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC8zLjQvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyAx MjMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2lu Y2x1ZGUvbGltaXRzLmgiIDIgMyA0CiMgOCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKIyAxMiAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9s aW1pdHMuaCIgMiAzIDQKIyA1MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Ns aW1pdHMiIDIgMwojIDY3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl L2NzdGRsaWIiIDEgMwojIDQ4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY3N0 ZGxpYiIgMwoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMgNAojIDU0ICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQK ZXh0ZXJuICJDIiB7CiMgOTUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkbGliLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBkaXZfdCB7 CiBpbnQgcXVvdDsKIGludCByZW07Cn0gZGl2X3Q7Cgp0eXBlZGVmIHN0cnVjdCBsZGl2X3Qgewog bG9uZyBpbnQgcXVvdDsKIGxvbmcgaW50IHJlbTsKfSBsZGl2X3Q7CgoKCgoKCmV4dGVybiBzaXpl X3QgX19nZXRtYmN1cm1heCAodm9pZCk7CmV4dGVybiBpbnQgX19nZXRtYXhkaXNwd2lkdGggKHZv aWQpOwojIDEyNiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9nY2MvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CiBleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNoYXIg Kiwgc2l6ZV90KTsKIGV4dGVybiBzaXplX3QgbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFy ICosIHNpemVfdCk7CiBleHRlcm4gaW50IG1idG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwg c2l6ZV90KTsKIGV4dGVybiBzaXplX3Qgd2NzdG9tYnMoY2hhciAqLCBjb25zdCB3Y2hhcl90ICos IHNpemVfdCk7CiBleHRlcm4gaW50IHdjdG9tYihjaGFyICosIGNvbnN0IHdjaGFyX3QpOwojIDE4 MiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5j bHVkZS9zdGRsaWIuaCIgMyA0CiBleHRlcm4gZG91YmxlIGF0b2YoY29uc3QgY2hhciAqKTsKIGV4 dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOwogZXh0ZXJuIGxvbmcgaW50IGF0b2woY29uc3Qg Y2hhciAqKTsKIGV4dGVybiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIgKiwgY2hhciAqICopOwog ZXh0ZXJuIGxvbmcgaW50IHN0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiAqLCBpbnQpOwogZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICogKiwgaW50 KTsKIGV4dGVybiBpbnQgcmFuZCh2b2lkKTsKIGV4dGVybiB2b2lkIHNyYW5kKHVuc2lnbmVkIGlu dCk7CiBleHRlcm4gdm9pZCAqY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsKIGV4dGVybiB2b2lkIGZy ZWUodm9pZCAqKTsKIGV4dGVybiB2b2lkICptYWxsb2Moc2l6ZV90KTsKIGV4dGVybiB2b2lkICpy ZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKIGV4dGVybiB2b2lkIGFib3J0KHZvaWQpOwogZXh0ZXJu IGludCBhdGV4aXQodm9pZCAoKikodm9pZCkpOwogZXh0ZXJuIHZvaWQgZXhpdChpbnQpOwogZXh0 ZXJuIGNoYXIgKmdldGVudihjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBzeXN0ZW0oY29uc3Qg Y2hhciAqKTsKIGV4dGVybiB2b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAq LCBzaXplX3QsIHNpemVfdCwgaW50KCopKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICopKTsKIGV4 dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIGludCgqKShjb25zdCB2b2lk ICosY29uc3Qgdm9pZCAqKSk7CiMgMjExICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIGV4dGVybiBpbnQgYWJz KGludCk7CiBleHRlcm4gc3RydWN0IGRpdl90IGRpdihpbnQsIGludCk7CiBleHRlcm4gbG9uZyBp bnQgbGFicyhsb25nIGludCk7CiBleHRlcm4gc3RydWN0IGxkaXZfdCBsZGl2KGxvbmcgaW50LCBs b25nIGludCk7CiMgMjM1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N5cy93YWl0LmgiIDEgMyA0 CiMgNTMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2Nj L2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0CmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL3Jlc291cmNlLmgiIDEgMyA0CiMgNTQgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2Uu aCIgMyA0CmV4dGVybiAiQyIgewoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0 CiMgNTAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKZXh0ZXJuICJDIiB7CiMgOTAgIi91 c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKc3RydWN0IHRpbWV2YWwgewogdGltZV90IHR2X3Nl YzsKCiBzdXNlY29uZHNfdCB0dl91c2VjOwoKCgp9OwoKCgoKc3RydWN0IHRpbWV2YWwzMiB7CiAg ICBpbnQzMl90IHR2X3NlYzsKICAgIGludDMyX3QgdHZfdXNlYzsKfTsKCgoKCgoKc3RydWN0IHRp bWV2YWw2NCB7CiAgICBpbnQ2NF90IHR2X3NlYzsKICAgIGludDY0X3QgdHZfdXNlYzsKfTsKCgoK CgoKc3RydWN0IGl0aW1lcnZhbCB7CiBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKIHN0cnVj dCB0aW1ldmFsIGl0X3ZhbHVlOwp9OwoKCgoKCgoKZXh0ZXJuIGludCBnZXRpdGltZXIoaW50LCBz dHJ1Y3QgaXRpbWVydmFsICopOwpleHRlcm4gaW50IHNldGl0aW1lcihpbnQsIGNvbnN0IHN0cnVj dCBpdGltZXJ2YWwgKiwgc3RydWN0IGl0aW1lcnZhbCAqKTsKZXh0ZXJuIGludCBnZXR0aW1lb2Zk YXkoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKZXh0ZXJuIGludCB1dGltZXMoY29uc3QgY2hh ciAqLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKTsKIyAxNTQgIi91c3IvaW5jbHVkZS9zeXMvdGlt ZS5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QKCmZkX3NldAoKewogICAgICAgIGxvbmcgZmRzX2JpdHNb KDMyNzY3LyhzaXplb2YobG9uZykgKiA4KSsxKV07Cn0gZmRfc2V0OwojIDE2OSAiL3Vzci9pbmNs dWRlL3N5cy90aW1lLmgiIDMgNApleHRlcm4gaW50IHNlbGVjdChpbnQsIGZkX3NldCAqLCBmZF9z ZXQgKiwgZmRfc2V0ICosIHN0cnVjdCB0aW1ldmFsICopOwojIDI3MiAiL3Vzci9pbmNsdWRlL3N5 cy90aW1lLmgiIDMgNApzdHJ1Y3QgdGltZXN0cnVjX3QgewogICAgICAgIHRpbWVfdCB0dl9zZWM7 CiAgICAgICAgc3VzZWNvbmRzX3QgdHZfbnNlYzsKfTsKCgoKCgpzdHJ1Y3QgdGltZXN0cnVjMzJf dCB7CiAgICBpbnQzMl90IHR2X3NlYzsKICAgIGludDMyX3QgdHZfbnNlYzsKfTsKIyAyOTUgIi91 c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKc3RydWN0IGl0aW1lcnN0cnVjX3QgewogICAgICAg IHN0cnVjdCB0aW1lc3RydWNfdCBpdF9pbnRlcnZhbDsKICAgICAgICBzdHJ1Y3QgdGltZXN0cnVj X3QgaXRfdmFsdWU7Cn07CgoKCgoKc3RydWN0IGl0aW1lcnN0cnVjMzJfdCB7CiAgICBzdHJ1Y3Qg dGltZXN0cnVjMzJfdCBpdF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3RydWMzMl90IGl0X3Zh bHVlOwp9OwojIDMxOCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAp0eXBlZGVmIHN0cnVj dCB0aW1lYmFzZXN0cnVjdCB7CiBpbnQgZmxhZzsKIHVuc2lnbmVkIGludCB0Yl9oaWdoOwogdW5z aWduZWQgaW50IHRiX2xvdzsKIH0gdGltZWJhc2VzdHJ1Y3RfdDsKCmludCByZWFkX3JlYWxfdGlt ZSh0aW1lYmFzZXN0cnVjdF90ICosIHNpemVfdCk7CmludCB0aW1lX2Jhc2VfdG9fdGltZSh0aW1l YmFzZXN0cnVjdF90ICosIHNpemVfdCk7CiMgNDUwICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg MyA0CnN0cnVjdCB0aW1lem9uZSB7CiBpbnQgdHpfbWludXRlc3dlc3Q7CiBpbnQgdHpfZHN0dGlt ZTsKfTsKIyA0ODIgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKfQojIDU4ICIvdXNyL2lu Y2x1ZGUvc3lzL3Jlc291cmNlLmgiIDIgMyA0CiMgMTAyICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291 cmNlLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcmxpbV90OwpzdHJ1Y3QgcmxpbWl0IHsK IHJsaW1fdCBybGltX2N1cjsKIHJsaW1fdCBybGltX21heDsKfTsKCgoKCgp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgbG9uZyBybGltNjRfdDsKc3RydWN0IHJsaW1pdDY0IHsKIHJsaW02NF90IHJsaW1f Y3VyOwogcmxpbTY0X3QgcmxpbV9tYXg7Cn07CiMgMTU0ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291 cmNlLmgiIDMgNApzdHJ1Y3QgcnVzYWdlCnsKIHN0cnVjdCB0aW1ldmFsIHJ1X3V0aW1lOwogc3Ry dWN0IHRpbWV2YWwgcnVfc3RpbWU7CiBsb25nIHJ1X21heHJzczsKIGxvbmcgcnVfaXhyc3M7CiBs b25nIHJ1X2lkcnNzOwogbG9uZyBydV9pc3JzczsKIGxvbmcgcnVfbWluZmx0OwogbG9uZyBydV9t YWpmbHQ7CiBsb25nIHJ1X25zd2FwOwogbG9uZyBydV9pbmJsb2NrOwogbG9uZyBydV9vdWJsb2Nr OwogbG9uZyBydV9tc2dzbmQ7CiBsb25nIHJ1X21zZ3JjdjsKIGxvbmcgcnVfbnNpZ25hbHM7CiBs b25nIHJ1X252Y3N3OwogbG9uZyBydV9uaXZjc3c7Cn07CgoKCgoKc3RydWN0IHJ1c2FnZTY0CnsK IHN0cnVjdCB0aW1ldmFsIHJ1X3V0aW1lOwogc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CiBsb25n IGxvbmcgcnVfbWF4cnNzOwogbG9uZyBsb25nIHJ1X2l4cnNzOwogbG9uZyBsb25nIHJ1X2lkcnNz OwogbG9uZyBsb25nIHJ1X2lzcnNzOwogbG9uZyBsb25nIHJ1X21pbmZsdDsKIGxvbmcgbG9uZyBy dV9tYWpmbHQ7CiBsb25nIGxvbmcgcnVfbnN3YXA7CiBsb25nIGxvbmcgcnVfaW5ibG9jazsKIGxv bmcgbG9uZyBydV9vdWJsb2NrOwogbG9uZyBsb25nIHJ1X21zZ3NuZDsKIGxvbmcgbG9uZyBydV9t c2dyY3Y7CiBsb25nIGxvbmcgcnVfbnNpZ25hbHM7CiBsb25nIGxvbmcgcnVfbnZjc3c7CiBsb25n IGxvbmcgcnVfbml2Y3N3Owp9OwoKCgoKCnN0cnVjdCB0cnVzYWdlNjQKewogc3RydWN0IHRpbWV2 YWw2NCBydV91dGltZTsKIHN0cnVjdCB0aW1ldmFsNjQgcnVfc3RpbWU7CiBsb25nbG9uZ190IHJ1 X21heHJzczsKIGxvbmdsb25nX3QgcnVfaXhyc3M7CiBsb25nbG9uZ190IHJ1X2lkcnNzOwogbG9u Z2xvbmdfdCBydV9pc3JzczsKIGxvbmdsb25nX3QgcnVfbWluZmx0OwogbG9uZ2xvbmdfdCBydV9t YWpmbHQ7CiBsb25nbG9uZ190IHJ1X25zd2FwOwogbG9uZ2xvbmdfdCBydV9pbmJsb2NrOwogbG9u Z2xvbmdfdCBydV9vdWJsb2NrOwogbG9uZ2xvbmdfdCBydV9tc2dzbmQ7CiBsb25nbG9uZ190IHJ1 X21zZ3JjdjsKIGxvbmdsb25nX3QgcnVfbnNpZ25hbHM7CiBsb25nbG9uZ190IHJ1X252Y3N3Owog bG9uZ2xvbmdfdCBydV9uaXZjc3c7Cn07CiMgMjQ5ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNl LmgiIDMgNApleHRlcm4gaW50IGdldHByaW9yaXR5KGludCwgaWRfdCk7CmV4dGVybiBpbnQgc2V0 cHJpb3JpdHkoaW50LCBpZF90LCBpbnQpOwpleHRlcm4gaW50IGdldHJsaW1pdChpbnQsIHN0cnVj dCBybGltaXQgKik7CmV4dGVybiBpbnQgc2V0cmxpbWl0KGludCwgY29uc3Qgc3RydWN0IHJsaW1p dCAqKTsKCgpleHRlcm4gaW50IGdldHJsaW1pdDY0KGludCwgc3RydWN0IHJsaW1pdDY0ICopOwpl eHRlcm4gaW50IHNldHJsaW1pdDY0KGludCwgY29uc3Qgc3RydWN0IHJsaW1pdDY0ICopOwoKCgoK CgoKZXh0ZXJuIGludCBnZXRydXNhZ2UoaW50LCBzdHJ1Y3QgcnVzYWdlICopOwoKZXh0ZXJuIGlu dCBnZXRydXNhZ2U2NChpbnQsIHN0cnVjdCBydXNhZ2U2NCAqKTsKIyAyOTAgIi91c3IvaW5jbHVk ZS9zeXMvcmVzb3VyY2UuaCIgMyA0Cn0KIyA1OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMgNAoKCgojIDEg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1 ZGUvc3lzL3NpZ25hbC5oIiAxIDMgNAojIDc3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CmV4dGVybiAi QyIgewojIDEwOCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9nY2MvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNApleHRlcm4gdm9pZCAoKnNpZ25hbChpbnQs IHZvaWQgKCopKGludCkpKShpbnQpOwoKCgoKCgoKZXh0ZXJuIGludCByYWlzZShpbnQpOwoKCnR5 cGVkZWYgaW50IHNpZ19hdG9taWNfdDsKIyAyMzcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKdW5pb24g c2lndmFsCnsKCgoKICAgICAgICB2b2lkICogc2l2YWxfcHRyOwoKICAgICAgICBpbnQgc2l2YWxf aW50Owp9OwojIDI1OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz MDQyOC9nY2MvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCB7CiBpbnQg c2lfc2lnbm87CiBpbnQgc2lfZXJybm87CiBpbnQgc2lfY29kZTsKIHBpZF90IHNpX3BpZDsKIHVp ZF90IHNpX3VpZDsKIyAyODYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKIHZvaWQgKnNpX2FkZHI7CiBp bnQgc2lfc3RhdHVzOwoKCiBsb25nIHNpX2JhbmQ7CgoKICAgICAgICB1bmlvbiBzaWd2YWwgc2lf dmFsdWU7CgoKCgoKCgogICAgICAgIGludCBfX3BhZFs3XTsKCgoKfSBzaWdpbmZvX3Q7CgoKCgoK CgpzdHJ1Y3Qgc2lnYWN0aW9uIHsKCiAgIHVuaW9uIHsKCgoKCgoKIHZvaWQgKCpfX3N1X2hhbmRs ZXIpKGludCk7CgoKCiB2b2lkICgqX19zdV9zaWdhY3Rpb24pIChpbnQsIHNpZ2luZm9fdCAqLCB2 b2lkICopOwoKCgogICAgfSBzYV91bmlvbjsKIHNpZ3NldF90IHNhX21hc2s7CiBpbnQgc2FfZmxh Z3M7Cn07CiMgMzQ5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw NDI4L2djYy9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9j b250ZXh0LmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvY29udGV4dC5oIiAzIDQKIyAx ICIvdXNyL2luY2x1ZGUvc3lzL21fcGFyYW0uaCIgMSAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL3N5 cy9jb250ZXh0LmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9tc3RzYXZlLmgiIDEgMyA0 CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvbXN0c2F2ZS5oIiAzIDQKc3RydWN0Cgptc3RzYXZlCgoK CnsKCiBzdHJ1Y3QgbXN0c2F2ZSAqcHJldjsKIGxhYmVsX3QgKmtqbXBidWY7CiBjaGFyICpzdGFj a2ZpeDsKIGNoYXIgaW50cHJpOwogY2hhciBiYWNrdDsKIGNoYXIgcnN2ZFsyXTsKIHBpZF90IGN1 cmlkOwoKIGludCBleGNwX3R5cGU7CiB1bG9uZ190IGlhcjsKIHVsb25nX3QgbXNyOwogdWxvbmdf dCBjcjsKIHVsb25nX3QgbHI7CiB1bG9uZ190IGN0cjsKIHVsb25nX3QgeGVyOwogdWxvbmdfdCBt cTsKICB1bG9uZ190IHRpZDsKIHVsb25nX3QgZnBzY3I7CiBjaGFyIGZwZXU7CiBjaGFyIGZwaW5m bzsKIGNoYXIgcGFkWzJdOwoKIHVsb25nX3QgZXhjZXB0WzVdOwogY2hhciBwYWQxWzRdOwogdWxv bmdfdCBvX2lhcjsKICAgICAgICB1bG9uZ190IG9fdG9jOwogdWxvbmdfdCBvX2FyZzE7CiB1bG9u Z190IGV4Y2JyYW5jaDsKCgoKIHVsb25nX3QgZnBzY3J4OwogdWxvbmdfdCBvX3ZhZGRyOwogdWxv bmdfdCBjYWNoZWFsaWduWzddOwogYWRzcGFjZV90IGFzOwogdWxvbmdfdCBncHJbMzJdOwogZG91 YmxlIGZwclszMl07CiMgMTMxICIvdXNyL2luY2x1ZGUvc3lzL21zdHNhdmUuaCIgMyA0Cn07CiMg MjIwICIvdXNyL2luY2x1ZGUvc3lzL21zdHNhdmUuaCIgMyA0CmV4dGVybiBjaGFyIF9fcG1hcF9z dGFja1tdOwojIDI3ICIvdXNyL2luY2x1ZGUvc3lzL2NvbnRleHQuaCIgMiAzIDQKCgpleHRlcm4g IkMiIHsKIyA3MSAiL3Vzci9pbmNsdWRlL3N5cy9jb250ZXh0LmgiIDMgNApzdHJ1Y3QgX19jb250 ZXh0NjQgewogdW5zaWduZWQgbG9uZyBsb25nIGdwclszMl07CiB1bnNpZ25lZCBsb25nIGxvbmcg bXNyOwogdW5zaWduZWQgbG9uZyBsb25nIGlhcjsKIHVuc2lnbmVkIGxvbmcgbG9uZyBscjsKIHVu c2lnbmVkIGxvbmcgbG9uZyBjdHI7CiB1bnNpZ25lZCBpbnQgY3I7CiB1bnNpZ25lZCBpbnQgeGVy OwogdW5zaWduZWQgaW50IGZwc2NyOwogdW5zaWduZWQgaW50IGZwc2NyeDsKICAgICAgICB1bnNp Z25lZCBsb25nIGxvbmcgZXhjZXB0WzFdOwogZG91YmxlIGZwclszMl07CiBjaGFyIGZwZXU7CiBj aGFyIGZwaW5mbzsKICAgICAgICBjaGFyIHBhZFsyXTsKICAgICAgICBpbnQgZXhjcF90eXBlOwp9 OwojIDExOSAiL3Vzci9pbmNsdWRlL3N5cy9jb250ZXh0LmgiIDMgNApzdHJ1Y3Qgc2lnY29udGV4 dDY0IHsKIGludCBzY19vbnN0YWNrOwogdW5zaWduZWQgaW50IHNjX21hc2sxOwogdW5zaWduZWQg aW50IHNjX21hc2syOwogaW50IHNjX3VlcnJvcjsKIHN0cnVjdCBfX2NvbnRleHQ2NCBzY19jb250 ZXh0Owp9OwojIDIxMSAiL3Vzci9pbmNsdWRlL3N5cy9jb250ZXh0LmgiIDMgNApzdHJ1Y3QgX19q bXBidWYgewoKIHN0cnVjdCBtc3RzYXZlIGptcF9jb250ZXh0OwoKCgp9OwojIDI0NSAiL3Vzci9p bmNsdWRlL3N5cy9jb250ZXh0LmgiIDMgNApzdHJ1Y3QgX19zaWdjb250ZXh0IHsKCiBpbnQgc2Nf b25zdGFjazsKIHNpZ3NldF90IHNjX21hc2s7CiBpbnQgc2NfdWVycm9yOwogc3RydWN0IF9fam1w YnVmIHNjX2ptcGJ1ZjsKCgoKCgoKfTsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKCgoKCiB2b2lk ICpzc19zcDsKIHNpemVfdCBzc19zaXplOwoKCiBpbnQgc3NfZmxhZ3M7CiBpbnQgX19wYWRbNF07 Cn0gc3RhY2tfdDsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9fam1wYnVmIG1jb250ZXh0X3Q7Cgp0 eXBlZGVmIHN0cnVjdCB1Y29udGV4dF90IHsKIGludCBfX3NjX29uc3RhY2s7CiAgICAgICAgc2ln c2V0X3QgdWNfc2lnbWFzazsKCiAgICAgICAgaW50IF9fc2NfdWVycm9yOwogbWNvbnRleHRfdCB1 Y19tY29udGV4dDsKCgoKIHN0cnVjdCB1Y29udGV4dF90ICp1Y19saW5rOwoKCiBzdGFja190IHVj X3N0YWNrOwogaW50IF9fcGFkWzRdOwp9IHVjb250ZXh0X3Q7CgoKfQojIDM1MCAiL2djYy9kamUv YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvc2ln bmFsLmgiIDIgMyA0CgoKCgpzdHJ1Y3Qgc2lnc3RhY2sgewogdm9pZCAqc3Nfc3A7CiBpbnQgc3Nf b25zdGFjazsKfTsKIyA0MzYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKZXh0ZXJuIGludCBzaWdtYXNr KGludCk7CiMgNTg5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw NDI4L2djYy9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9t X3NpZ25hbC5oIiAxIDMgNAojIDU5MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDIgMyA0CiMgNTk5ICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N5 cy9zaWduYWwuaCIgMyA0CnN0cnVjdCBzaWdldmVudCB7CiB1bmlvbiBzaWd2YWwgc2lnZXZfdmFs dWU7CiBpbnQgc2lnZXZfc2lnbm87CiBpbnQgc2lnZXZfbm90aWZ5OwoKCgoKIHZvaWQgKCpzaWdl dl9ub3RpZnlfZnVuY3Rpb24pKHVuaW9uIHNpZ3ZhbCk7CiBwdGhyZWFkX2F0dHJfdCAqIHNpZ2V2 X25vdGlmeV9hdHRyaWJ1dGVzOwoKfTsKIyA2MjcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKc3RydWN0 IG9zaWdldmVudCB7CgoKCiB2b2lkICpzZXZ0X3ZhbHVlOwoKIHNpZ25hbF90IHNldnRfc2lnbm87 Cn07CiMgNzE4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L2djYy9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CnN0cnVjdCBzaWd2ZWMgewojIDczMCAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9z eXMvc2lnbmFsLmgiIDMgNAogICB1bmlvbiB7CgoKCgoKCiB2b2lkICgqc3ZfaGFuZGxlcikoaW50 KTsKCgoKICAgICAgICB2b2lkICgqc3Zfc2lnYWN0aW9uKSAoaW50LCBzaWdpbmZvX3QgKiwgdm9p ZCAqKTsKICAgfSBzdl91bmlvbjsKIGludCBzdl9tYXNrOwogaW50IHN2X2ZsYWdzOwoKfTsKIyA4 MDQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2lu Y2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKZXh0ZXJuIGludCBzaWd3YWl0KGNvbnN0IHNpZ3NldF90 ICosIGludCAqKTsKCmV4dGVybiBpbnQgc2lnYmxvY2soaW50KTsKZXh0ZXJuIGludCBzaWdsb2Nh bG1hc2soaW50LCBjb25zdCBzaWdzZXRfdCAqKTsKZXh0ZXJuIGludCBzaWd2ZWMoaW50LCBzdHJ1 Y3Qgc2lndmVjICosIHN0cnVjdCBzaWd2ZWMgKik7CgoKCgoKCgpleHRlcm4gaW50IHNpZ2dldG1h c2sodm9pZCk7CmV4dGVybiBpbnQgc2lnc2V0bWFzayhpbnQpOwojIDg1NiAiL2djYy9kamUvYnVp bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvc2lnbmFs LmgiIDMgNApleHRlcm4gaW50IGtpbGwocGlkX3QsIGludCk7CmV4dGVybiBpbnQgc2lncHJvY21h c2soaW50LCBjb25zdCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAqKTsKZXh0ZXJuIGludCBzaWdzdXNw ZW5kKGNvbnN0IHNpZ3NldF90ICopOwoKZXh0ZXJuIGludCBzaWdhY3Rpb24oaW50LCBjb25zdCBz dHJ1Y3Qgc2lnYWN0aW9uICosIHN0cnVjdCBzaWdhY3Rpb24gKik7CgpleHRlcm4gaW50IHNpZ2Vt cHR5c2V0KHNpZ3NldF90ICopOwpleHRlcm4gaW50IHNpZ2ZpbGxzZXQoc2lnc2V0X3QgKik7CmV4 dGVybiBpbnQgc2lnYWRkc2V0KHNpZ3NldF90ICosIGludCk7CmV4dGVybiBpbnQgc2lnZGVsc2V0 KHNpZ3NldF90ICosIGludCk7CmV4dGVybiBpbnQgc2lnaXNtZW1iZXIoY29uc3Qgc2lnc2V0X3Qg KiwgaW50KTsKZXh0ZXJuIGludCBzaWdwZW5kaW5nKHNpZ3NldF90ICopOwoKCmV4dGVybiB2b2lk ICgqYnNkX3NpZ25hbCAoaW50LCB2b2lkICgqKShpbnQpKSkoaW50KTsKZXh0ZXJuIGludCBraWxs cGcocGlkX3QsIGludCk7CmV4dGVybiBpbnQgc2lnaG9sZChpbnQpOwpleHRlcm4gaW50IHNpZ2ln bm9yZShpbnQpOwpleHRlcm4gaW50IHNpZ2ludGVycnVwdChpbnQsIGludCk7CmV4dGVybiBpbnQg c2lncGF1c2UoaW50KTsKZXh0ZXJuIGludCBzaWdyZWxzZShpbnQpOwpleHRlcm4gdm9pZCAoKnNp Z3NldChpbnQsIHZvaWQoKikoaW50KSkpKGludCk7CgpleHRlcm4gaW50IHNpZ2FsdHN0YWNrKGNv bnN0IHN0YWNrX3QgKiwgc3RhY2tfdCAqKTsKZXh0ZXJuIGludCBzaWdzdGFjayhzdHJ1Y3Qgc2ln c3RhY2sgKiwgc3RydWN0IHNpZ3N0YWNrICopOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbChw dGhyZWFkX3QsIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrKGludCwgY29uc3Qgc2ln c2V0X3QgKiwgc2lnc2V0X3QgKik7CmV4dGVybiBpbnQgc2lncXVldWUocGlkX3QsIGludCwgY29u c3QgdW5pb24gc2lndmFsKTsKc3RydWN0IHRpbWVzcGVjOwpleHRlcm4gaW50IHNpZ3RpbWVkd2Fp dChjb25zdCBzaWdzZXRfdCAqLCBzaWdpbmZvX3QgKiwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICop OwpleHRlcm4gaW50IHNpZ3dhaXRpbmZvKGNvbnN0IHNpZ3NldF90ICosIHNpZ2luZm9fdCAqKTsK IyA5MTMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2Nj L2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKfQojIDYzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CiMg MTQxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9p bmNsdWRlL3N5cy93YWl0LmgiIDMgNAp0eXBlZGVmIGVudW0ge1BfQUxMLCBQX1BJRCwgUF9QR0lE fSBpZHR5cGVfdDsKIyAxNTkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0CmV4dGVybiBwaWRfdCB3YWl0KGlu dCAqKTsKCmV4dGVybiBwaWRfdCB3YWl0cGlkKHBpZF90LCBpbnQgKiwgaW50KTsKIyAxNzMgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUv c3lzL3dhaXQuaCIgMyA0CmV4dGVybiBpbnQgd2FpdGlkKGlkdHlwZV90LCBpZF90LCBzaWdpbmZv X3QgKiwgaW50KTsKCgoKZXh0ZXJuIHBpZF90IHdhaXQzKGludCAqLCBpbnQsIHN0cnVjdCBydXNh Z2UgKik7CgoKCmV4dGVybiBwaWRfdCBrd2FpdHBpZChpbnQgKiwgcGlkX3QsIGludCwgc3RydWN0 IHJ1c2FnZSAqLCBzaWdpbmZvX3QgKik7CgpleHRlcm4gcGlkX3Qga3dhaXRwaWQ2NChpbnQgKiwg cGlkX3QsIGludCwgc3RydWN0IHJ1c2FnZTY0ICosIHNpZ2luZm9fdCAqKTsKCgoKZXh0ZXJuIHBp ZF90IHdhaXQzNjQoaW50ICosIGludCwgc3RydWN0IHJ1c2FnZTY0ICopOwojIDIwMSAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMv d2FpdC5oIiAzIDQKZXh0ZXJuIHBpZF90IHdhaXQ0KHBpZF90LCBpbnQgKiwgaW50LCBzdHJ1Y3Qg cnVzYWdlICopOwojIDIyMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9nY2MvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQKfQojIDIzNiAiL2djYy9kamUvYnVp bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdGRsaWIuaCIg MiAzIDQKIyAzMDggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvZ2NjL2luY2x1ZGUvc3RkbGliLmgiIDMgNAogZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4KHZvaWQp OwogZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0W10pOwogZXh0ZXJuIGxvbmcg anJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsKIGV4dGVybiB2b2lkIGxjb25nNDgodW5zaWduZWQg c2hvcnQgaW50ICopOwogZXh0ZXJuIGxvbmcgbHJhbmQ0OCh2b2lkKTsKIGV4dGVybiBsb25nIG1y YW5kNDgodm9pZCk7CiBleHRlcm4gbG9uZyBucmFuZDQ4KHVuc2lnbmVkIHNob3J0W10pOwogZXh0 ZXJuIHVuc2lnbmVkIHNob3J0ICpzZWVkNDgodW5zaWduZWQgc2hvcnRbXSk7CiBleHRlcm4gdm9p ZCBzZXRrZXkoY29uc3QgY2hhciAqKTsKIGV4dGVybiB2b2lkIHNyYW5kNDgobG9uZyk7CgogZXh0 ZXJuIGludCBwdXRlbnYoY2hhciAqKTsKIyAzMzcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkbGliLmgiIDMgNAogZXh0ZXJuIGlu dCByYW5kX3IodW5zaWduZWQgaW50ICopOwojIDM2MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CiBleHRlcm4g bG9uZyBhNjRsKGNvbnN0IGNoYXIgKik7CiBleHRlcm4gY2hhciAqZWN2dChkb3VibGUsIGludCwg aW50ICosIGludCAqKTsKIGV4dGVybiBjaGFyICpmY3Z0KGRvdWJsZSwgaW50LCBpbnQgKiwgaW50 ICopOwogZXh0ZXJuIGNoYXIgKmdjdnQoZG91YmxlLCBpbnQsIGNoYXIgKik7CiBleHRlcm4gaW50 IGdldHN1Ym9wdChjaGFyICoqLCBjaGFyICpjb25zdCAqLCBjaGFyICoqKTsKIGV4dGVybiBpbnQg Z3JhbnRwdChpbnQpOwogZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSh1bnNpZ25lZCwgY2hhciAqLCBz aXplX3QpOwogZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7CiBleHRlcm4gY2hhciAqbWt0ZW1wKGNo YXIgKik7CiBleHRlcm4gaW50IG1rc3RlbXAoY2hhciAqKTsKIGV4dGVybiBjaGFyICpwdHNuYW1l KGludCk7CiBleHRlcm4gbG9uZyByYW5kb20odm9pZCk7CiBleHRlcm4gY2hhciAqcmVhbHBhdGgo Y29uc3QgY2hhciAqLCBjaGFyICopOwogZXh0ZXJuIGNoYXIgKnNldHN0YXRlKGNvbnN0IGNoYXIg Kik7CiBleHRlcm4gdm9pZCBzcmFuZG9tKHVuc2lnbmVkKTsKIGV4dGVybiBpbnQgdW5sb2NrcHQo aW50KTsKIGV4dGVybiBpbnQgdHR5c2xvdCh2b2lkKTsKIGV4dGVybiB2b2lkICp2YWxsb2Moc2l6 ZV90KTsKIyA0NjQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvZ2NjL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4g aW50IG9wdGluZDsKZXh0ZXJuIGludCBvcHRlcnI7CiMgNDgyICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIGV4 dGVybiBmbG9hdCBhdG9mZihjaGFyICopOwogZXh0ZXJuIGZsb2F0IHN0cnRvZihjb25zdCBjaGFy ICosIGNoYXIgKiopOwogZXh0ZXJuIGludCBzZXRlbnYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICosIGludCk7CiBleHRlcm4gdm9pZCBpbXVsX2RibChsb25nLCBsb25nLCBsb25nICopOwogZXh0 ZXJuIHZvaWQgdW11bF9kYmwodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQg bG9uZyAqKTsKIGV4dGVybiBpbnQgb25fZXhpdCh2b2lkICgqKShpbnQsIHZvaWQgKiksIHZvaWQg Kik7CiMgNTA4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIGV4dGVybiBkb3VibGUgd2NzdG9kKGNvbnN0IHdj aGFyX3QgKiwgd2NoYXJfdCAqKik7CiBleHRlcm4gbG9uZyBpbnQgd2NzdG9sKGNvbnN0IHdjaGFy X3QgKiwgd2NoYXJfdCAqKiwgaW50KTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3Vs KGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50KTsKCiBleHRlcm4gaW50IHJwbWF0Y2go Y29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgY2xlYXJlbnYodm9pZCk7CiBleHRlcm4gaW50IGdl dG9wdChpbnQsIGNoYXIqIGNvbnN0KiwgY29uc3QgY2hhciopOwogZXh0ZXJuIGNoYXIgKmdldHBh c3MoY29uc3QgY2hhciAqKTsKIyA1MzUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu My4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvc3RkbGliLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBs bGRpdl90IHsKICAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICAgbG9uZyBsb25nIGludCByZW0g Owp9IGxsZGl2X3Q7CiMgNTQ5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w LTIwMDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGxvbmcgbG9uZyBpbnQg bGxhYnMoIGxvbmcgbG9uZyBpbnQgKTsKZXh0ZXJuIGxsZGl2X3QgbGxkaXYoIGxvbmcgbG9uZyBp bnQsIGxvbmcgbG9uZyBpbnQgKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCgKICAgICBj b25zdCBjaGFyICosCiAgICAgY2hhciAqKiwKICAgICBpbnQgKTsKZXh0ZXJuIHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQgc3RydG91bGwoCiAgICAgY29uc3QgY2hhciAqLAogICAgIGNoYXIgKiosCiAg ICAgaW50ICk7CiMgNTY5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L2djYy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKfQojIDUzICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli c3RkYysrLXYzL2luY2x1ZGUvY3N0ZGxpYiIgMiAzCiMgODQgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2X3Q7 CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAgdXNp bmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6OmF0 b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2Owog IHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNpbmcg OjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6Om1ibGVu OwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpxc29ydDsK ICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7CiAgdXNp bmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwogIHVzaW5n IDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgogIGlubGlu ZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5saW5lIGxk aXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9 Cn0KIyA2OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDIgMwoKIyAxICIvZ2NjL2RqZS9zcmMvbGlic3RkYysrLXYzL2xpYnN1cGMrKy9uZXci IDEgMwojIDQ0ICIvZ2NjL2RqZS9zcmMvbGlic3RkYysrLXYzL2xpYnN1cGMrKy9uZXciIDMKZXh0 ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCgoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVi bGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQoK CiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93 X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVkZWYgdm9p ZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hh bmRsZXIpIHRocm93KCk7Cn0KIyA4MiAiL2djYy9kamUvc3JjL2xpYnN0ZGMrKy12My9saWJzdXBj KysvbmV3IiAzCnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFk X2FsbG9jKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJh ZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9wZXJh dG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXpl X3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3W10o c3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRv ciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVy YXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlu bGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7 IHJldHVybiBfX3A7IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2 b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CgoKaW5saW5lIHZvaWQgb3BlcmF0b3Ig ZGVsZXRlICh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9CmlubGluZSB2b2lkIG9wZXJhdG9yIGRl bGV0ZVtdKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH0KCn0KIyA3MCAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfcGFpci5oIiAxIDMKIyA2NCAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3Bh Y2Ugc3RkCnsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsK ICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBf VDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkg e30KCgoKCiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19h KSwgc2Vjb25kKF9fYikge30KCgogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBw YWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25k KF9fcC5zZWNvbmQpIHt9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8 X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3gu c2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+ CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBw YWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAog ICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vj b25kKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3Bl cmF0b3IhPShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYg X195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194 LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRl bXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25z dCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0 dXJuICEoX195IDwgX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5s aW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWly PF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDE0MCAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX3BhaXIuaCIgMwp0ZW1wbGF0ZSA8 Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihf VDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsK fQoKfQojIDcyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv dHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk ZS9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKIyA5MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p bmNsdWRlL2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190cnVlX3R5cGUge307CnN0cnVj dCBfX2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3Ry YWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9m aXJzdDsKIyAxMTMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3R5cGVf dHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBj aGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90 cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50 X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj dCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90 eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBp bnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry YWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f dHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5 cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9u Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh aXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f dHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g c3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19p bnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBf X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxz aWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVl X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJf dD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1 Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlw ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50 ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz X2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3Igewog ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgK ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xh c3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6 X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr Ky12My9pbmNsdWRlL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5 cGVzLmgiIDMKCm5hbWVzcGFjZSBzdGQKewojIDgwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCiAgc3RydWN0IGlucHV0 X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307CgogIHN0 cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307 CgogIHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0 ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDogcHVi bGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwojIDEwMiAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29yeSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlzdGFu Y2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICAgdHlwZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBl bmFtZSBfUmVmZXJlbmNlID0gX1RwJj4KICAgIHN0cnVjdCBpdGVyYXRvcgogICAgewoKICAgICAg dHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVmIF9UcCB2 YWx1ZV90eXBlOwoKICAgICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwoKICAg ICAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJl ZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAg IHN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRv cjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogICAg ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog ICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm ZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9U cCYgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0 IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vz c19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVl X3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlw ZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVu Y2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlubGluZSB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX19p dGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMgNzQgIi9nY2Mv ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAx ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaXRlcmF0b3JfYmFz ZV9mdW5jcy5oIiAxIDMKIyA2OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Jp dHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzkgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5j cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJh dG9yPgogICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46 OmRpZmZlcmVuY2VfdHlwZQogICAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykK ICAgIHsKCiAgICAgCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0 b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s YXN0KSB7CiAgICAgICAgKytfX2ZpcnN0OyArK19fbjsKICAgICAgfQogICAgICByZXR1cm4gX19u OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBp bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZQogICAgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgcmFuZG9tX2Fj Y2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAogICAgICByZXR1cm4gX19sYXN0IC0gX19m aXJzdDsKICAgIH0KIyAxMDkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRz L3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0 b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgIHJldHVybiBfX2Rpc3RhbmNlKF9f Zmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGlu ZSB2b2lkCiAgICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1 dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAogICAgICB3aGlsZSAoX19uLS0pICsrX19pOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFt ZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFs SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19uID4gMCkKICAgICAgICB3 aGlsZSAoX19uLS0pICsrX19pOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fbisrKSAtLV9f aTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl bmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9SYW5kb21BY2Nl c3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgIHJhbmRvbV9hY2Nl c3NfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKICAgICAgX19pICs9IF9fbjsKICAgIH0KIyAx NjIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9pdGVyYXRvcl9i YXNlX2Z1bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5h bWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIGFkdmFuY2UoX0lucHV0SXRlcmF0b3Im IF9faSwgX0Rpc3RhbmNlIF9fbikKICAgIHsKCiAgICAgIF9fYWR2YW5jZShfX2ksIF9fbiwgX19p dGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICAgIH0KfQojIDc1ICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk YysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2djYy9kamUvYnVp bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDY4ICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1l c3BhY2Ugc3RkCnsKIyA4OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv c3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFz cyByZXZlcnNlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAg ICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAg ICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoK ICAgICAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAg ICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7Cgog ICAgcHVibGljOgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKCkgeyB9CgoKCgogICAgICBleHBs aWNpdAogICAgICByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQo X194KSB7IH0KCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRv ciYgX194KQogICAgICA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHsgfQoKCgoKCiAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICAgIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJz ZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKIDogY3VycmVudChfX3guYmFzZSgpKSB7IH0KCgoKCiAg ICAgIGl0ZXJhdG9yX3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0K CgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsKIF9J dGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiByZXR1cm4gKi0tX190bXA7CiAgICAgIH0KCgoKCgoK ICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRv ciooKSk7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygp CiAgICAgIHsKIC0tY3VycmVudDsKIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICBy ZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiByZXZlcnNlX2l0 ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAtLWN1cnJlbnQ7CiByZXR1cm4gX190bXA7CiAgICAgIH0K CgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsK ICsrY3VycmVudDsKIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0 ZXJhdG9yIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0g KnRoaXM7CiArK2N1cnJlbnQ7CiByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2 ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QK ICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQoKCgoKCgog ICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBf X24pCiAgICAgIHsKIGN1cnJlbnQgLT0gX19uOwogcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoK CiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBf X24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCArIF9fbik7 IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItPShkaWZmZXJl bmNlX3R5cGUgX19uKQogICAgICB7CiBjdXJyZW50ICs9IF9fbjsKIHJldHVybiAqdGhpczsKICAg ICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5 cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQogICAgfTsKIyAyNjkgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y PT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgY29uc3Qg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3guYmFzZSgp ID09IF9feS5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m IF9feCwKICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAg eyByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3Qg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICBjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShj b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICBjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+ PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICBjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX194IDwgX195 KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgIG9wZXJhdG9y LShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgIGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSAt IF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgogICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgIGNvbnN0 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAgeyByZXR1cm4gcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9CiMgMzI5ICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvcgogICAg OiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwg dm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoK ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgog ICAgICBleHBsaWNpdAogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gp IDogY29udGFpbmVyKCZfX3gpIHsgfQojIDM1NSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p bmNsdWRlL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3Im CiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192 YWx1ZSkKICAgICAgewogY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiByZXR1cm4gKnRo aXM7CiAgICAgIH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Iq KCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAg b3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0 b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDM4NiAi L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGJhY2tfaW5zZXJ0X2l0 ZXJhdG9yPF9Db250YWluZXI+CiAgICBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAg IHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7IH0KIyA0MDEg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9pdGVyYXRvci5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9p dGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwg dm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciog Y29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWlu ZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5l ciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjYgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGZyb250X2luc2VydF9p dGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVy ZW5jZSBfX3ZhbHVlKQogICAgICB7CiBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiBy ZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAg IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJh dG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9p bnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAg ICB9OwojIDQ1NyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2l0 ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGZy b250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgZnJvbnRfaW5zZXJ0ZXIoX0NvbnRh aW5lciYgX194KQogICAgeyByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ KF9feCk7IH0KIyA0NzYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0 bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNz IGluc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3Rh Zywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0Nv bnRhaW5lciogY29udGFpbmVyOwogICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBp dGVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlw ZTsKCgoKCgogICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBf Q29udGFpbmVyOjppdGVyYXRvciBfX2kpCiAgICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9f aSkge30KIyA1MTggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9p dGVyYXRvci5oIiAzCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0 IHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiBp dGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiArK2l0ZXI7CiByZXR1cm4g KnRoaXM7CiAgICAgIH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigp IHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRv cisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA1NTAgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NvbnRhaW5lciwgdHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGluc2Vy dF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRl cmF0b3IgX19pKQogICAgewogICAgICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ KF9feCwKICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9Cn0K Cm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0 czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwg dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIDog cHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVy YXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpw b2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0 b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAg IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgICAgX19ub3Jt YWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQoKICAgICAgZXhwbGlj aXQKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3Vy cmVudChfX2kpIHsgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICBpbmxp bmUgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIsIF9Db250 YWluZXI+JiBfX2kpCiA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9CgoKICAgICAgcmVmZXJl bmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogICAg ICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9 CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgKytfTV9jdXJy ZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJh dG9yKysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoK ICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKSB7IC0tX01fY3VycmVu dDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRv ci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQoKCiAg ICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19u KSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyZW50W19fbl07IH0KCiAgICAgIF9fbm9ybWFs X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQog ICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFs X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29u c3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCArIF9fbik7IH0K CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVu Y2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgLT0gX19uOyByZXR1cm4gKnRoaXM7IH0K CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNl X3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3Vy cmVudCAtIF9fbik7IH0KCiAgICAgIGNvbnN0IF9JdGVyYXRvciYKICAgICAgYmFzZSgpIGNvbnN0 IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAgIH07CiMgNjUxICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk YysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg aW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBf X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBf Q29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9f bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJu IF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0 ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxp bmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwg X0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhz LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250 YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3Jt YWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19s aHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh dG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg Ym9vbAogIG9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29u dGFpbmVyPiYgX19saHMsCiAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg X0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2Uo KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+ CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl KCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlw ZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w ZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg X19saHMsCiAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5l cj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5l IGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u dGFpbmVyPiYgX19saHMsCiAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf Q29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIs IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0IF9f bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg cmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0 b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xo cywKICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg X19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBf Q29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgIGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xo cy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv ciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3Qg X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgIGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsg cmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWlu ZXI+CiAgaW5saW5lIHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250 YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICBjb25zdCBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMu YmFzZSgpIC0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwg dHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y LCBfQ29udGFpbmVyPgogIG9wZXJhdG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgIGNvbnN0IF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkKICB7IHJldHVybiBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9 Cn0KIyA3NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewojIDkxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxpbmUgdm9pZAogICAg aXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVl X3R5cGUgX1ZhbHVlVHlwZTE7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOwoKCiAgICAgCiAgICAgCiAg ICAgCiAgICAgCgogICAgICBfVmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7CiAgICAgICpfX2EgPSAq X19iOwogICAgICAqX19iID0gX190bXA7CiAgICB9CiMgMTE4ICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk YysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKICAgIHsK CiAgICAgCgogICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAgIF9fYSA9IF9fYjsKICAgICAgX19i ID0gX190bXA7CiAgICB9CiMgMTQ2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGlu ZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAg ewoKICAgICAKCiAgICAgIGlmIChfX2IgPCBfX2EpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAg ICB9CiMgMTY2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAm CiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAg ICAgIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTg2ICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29u c3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUg X19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJl dHVybiBfX2E7CiAgICB9CiMgMjA0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg X0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBj b25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29tcChf X2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMjIxICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9P dXRwdXRJdGVyCiAgICBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwKICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAg ewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3Qp CiAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+ CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwK ICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQog ICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBf X2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiArK19fZmly c3Q7CiArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFs KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAg ICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFz dCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0 SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxz ZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9f aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBf X2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogIF9PdXRw dXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoX1Rw KiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwKICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAg IHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihj b25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogIF9UcCogX19yZXN1bHQsIF9f dHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBf X3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091 dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTIoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs dCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVu dF9vcGVyYXRvcgogICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9h dXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fcmVzdWx0LmJhc2UoKSwKICAgICAgICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBf T3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1 ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw ZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAg ICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICBfVHJpdmlhbCgpKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+ CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVl X3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf T3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfbmkyKF9f Zmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog ICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2Vf dHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9P dXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5l IF9PdXRwdXRJdGVyCiAgICBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9f Tm9ybWFsOwogICAgICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCwgX19Ob3JtYWwoKSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlv bmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBpbmxpbmUgX0JpZGly ZWN0aW9uYWxJdGVyMgogICAgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19m aXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl cjIgX19yZXN1bHQsCiAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAg ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xh c3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSBf QmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX3Jlc3VsdCwKICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAg IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf dHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1f X24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3Vs dDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwg dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQm9vbFR5 cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7CiAgICAgIHN0YXRp YyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIg X19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3Qs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAq LCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBf VHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiBj b25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiBtZW1tb3ZlKF9fcmVzdWx0 IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKIHJldHVybiBfX3Jlc3VsdCAt IF9OdW07CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVj dCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+ CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBj b25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogcmV0dXJuIF9fY29weV9i YWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgOjpjb3B5KF9fZmly c3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2Fy ZF9hdXgoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvciBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkx LCBfQkkyLCBfVHJpdmlhbD4KICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsK ICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxp bmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBf X2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkK ICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0LmJhc2UoKSkpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBf QkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0 ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgX0JJMiBfX3Jlc3VsdCwg X19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUg X0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0 ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICBfQkkyIF9fcmVzdWx0LCBf X3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJh dG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJk X291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAg ICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2Fy ZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAg IF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1 cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0 LCBfX3Jlc3VsdCwKICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDQ3NyAiL2djYy9kamUv YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBjb3B5 X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7 CgogICAgIAogICAgIAogICAgIAoKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxf aXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFj a3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAg ICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDUwOSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12 My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIGZpbGwoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAg ICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAqX19maXJz dCA9IF9fdmFsdWU7CiAgICB9CiMgNTMxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1 ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVy LCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxf bihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAg IHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAqX19m aXJzdCA9IF9fdmFsdWU7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgogIGlubGluZSB2 b2lkCiAgZmlsbCh1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBfX2xhc3Qs IGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKICB7CiAgICB1bnNpZ25lZCBjaGFyIF9fdG1wID0g X19jOwogICAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9Cgog IGlubGluZSB2b2lkCiAgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9f bGFzdCwgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKICB7CiAgICBzaWduZWQgY2hhciBfX3RtcCA9 IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3Rt cCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKGNoYXIqIF9f Zmlyc3QsIGNoYXIqIF9fbGFzdCwgY29uc3QgY2hhciYgX19jKQogIHsKICAgIGNoYXIgX190bXAg PSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190 bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgog ICAgaW5saW5lIHVuc2lnbmVkIGNoYXIqCiAgICBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJz dCwgX1NpemUgX19uLCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwo X19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHNpZ25lZCBjaGFy KgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3Qgc2lnbmVkIGNoYXIm IF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAg ICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+ CiAgICBpbmxpbmUgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNv bnN0IGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBf X2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KIyA2MDYgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgcGFpcjxfSW5w dXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0 MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiArK19fZmlyc3QxOwogKytfX2ZpcnN0MjsK ICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmly c3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjQwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAg IHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEg X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LAogICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAg IAoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19m aXJzdDEsICpfX2ZpcnN0MikpIHsKICsrX19maXJzdDE7CiArK19fZmlyc3QyOwogICAgICB9CiAg ICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmly c3QyKTsKICAgIH0KIyA2NjggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRz L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVu YW1lIF9JbnB1dEl0ZXIyPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAg IHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0 MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKIGlmICghKCpfX2ZpcnN0MSA9PSAqX19maXJzdDIp KQogICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDY5OSAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l IF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEg X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAog ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAg ICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQog aWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgcmV0dXJuIGZhbHNl OwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst djMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAgbGV4aWNvZ3JhcGhp Y2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKICAgIHsKCiAg ICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0 MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7 CiBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICByZXR1cm4gdHJ1ZTsKIGlmICgqX19maXJz dDIgPCAqX19maXJzdDEpCiAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gX19m aXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQojIDc2NyAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu YW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0 SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAg IHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m aXJzdDIgIT0gX19sYXN0MgogICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogaWYgKF9f Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgIHJldHVybiB0cnVlOwogaWYgKF9fY29tcCgq X19maXJzdDIsICpfX2ZpcnN0MSkpCiAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1 cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQoKICBp bmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIq IF9fZmlyc3QxLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIqIF9fZmlyc3QyLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQogIHsKICAg IGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgICBjb25zdCBzaXpl X3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogICAgY29uc3QgaW50IF9fcmVzdWx0ID0g bWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0Miwgc3RkOjptaW4oX19sZW4xLCBfX2xlbjIpKTsKICAg IHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwog IH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBf X2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0Miwg Y29uc3QgY2hhciogX19sYXN0MikKICB7CgoKCgoKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2Fs X2NvbXBhcmUoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgIChjb25zdCB1 bnNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyKikgX19m aXJzdDIsCiAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopIF9fbGFzdDIpOwoKICB9Cgp9CiMg NTUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9tZW1vcnkiIDIgMwojIDEgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA4 NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBj LWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsbG9jLmgiIDMK IyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9mdW5jdGV4Y2VwdC5o IiAxIDMKIyAzNiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZnVuY3Rl eGNlcHQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlv bih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBf X3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQp OwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df bGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9y YW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAg dm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDg1ICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAi L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAz CiMgNTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF90aHJlYWRz LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHN0cnVjdCBfUmVmY291bnRfQmFzZQogIHsKCiAg ICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgogICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50 OwoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZfY291bnRfbG9jazsKCiAgICBfUmVmY291 bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9fbikKICAgIHsKCiAgICAgIF9fZ3Ro cmVhZF9tdXRleF90IF9fdG1wID0gMDsKICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsK CgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBfX2d0aHJlYWRf bXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9jb3VudDsKICAg ICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgfQoKICAg IF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9N X3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9j b3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwog ICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB0ZW1wbGF0ZTxpbnQgX19kdW1t eT4KICAgIHN0cnVjdCBfU3dhcF9sb2NrX3N0cnVjdAogICAgeyBzdGF0aWMgX19ndGhyZWFkX211 dGV4X3QgX1Nfc3dhcF9sb2NrOyB9OwoKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIF9fZ3Ro cmVhZF9tdXRleF90CiAgICBfU3dhcF9sb2NrX3N0cnVjdDxfX2R1bW15Pjo6X1Nfc3dhcF9sb2Nr ID0gMDsKCgoKICBpbmxpbmUgdW5zaWduZWQgbG9uZwogIF9BdG9taWNfc3dhcCh1bnNpZ25lZCBs b25nICogX19wLCB1bnNpZ25lZCBsb25nIF9fcSkKICB7CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9j aygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICB1bnNpZ25lZCBsb25n IF9fcmVzdWx0ID0gKl9fcDsKICAgICpfX3AgPSBfX3E7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5s b2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHJldHVybiBfX3Jl c3VsdDsKICB9Cgp9CiMgMTU1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0 cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHN0cnVjdCBfU1RMX211dGV4X2xv Y2sKICB7CgoKCgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9pZAogICAg X01faW5pdGlhbGl6ZSgpCiAgICB7CiMgMTkyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgICB9CgogICAgdm9pZAogICAgX01fYWNxdWly ZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOwog ICAgfQoKICAgIHZvaWQKICAgIF9NX3JlbGVhc2VfbG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3Ro cmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogICAgfQogIH07CiMgMjI4ICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9T VExfYXV0b19sb2NrCiAgewogICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExf YXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAg eyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBf TV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9y PShjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9h dXRvX2xvY2smKTsKICB9OwoKfQojIDg2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1 ZGUvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewojIDk5ICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNzIF9f bmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6 ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0aWMg dm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRvciBk ZWxldGUoX19wKTsgfQogIH07CiMgMTIyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1 ZGUvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICBjbGFzcyBf X21hbGxvY19hbGxvYwogICAgewogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29v bV9tYWxsb2Moc2l6ZV90KTsKICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29t X2hhbmRsZXIpKCk7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2Nh dGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9f bik7CiAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1bHQgPT0gMCwgMCkpCiAgIF9f cmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg ICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVf dCApCiAgICAgIHsgZnJlZShfX3ApOyB9CgogICAgICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxs b2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7CiAgICAgICAgdm9pZCAoKiBfX29s ZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIF9fbWFsbG9jX2FsbG9j X29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQogICAgfTsK CgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICB2b2lkICgqIF9fbWFsbG9jX2FsbG9jPF9faW5z dD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0gMDsKCiAgdGVtcGxhdGU8aW50IF9f aW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvYzxfX2luc3Q+OjoKICAgIF9TX29vbV9t YWxsb2Moc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVy KSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAg ICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwog ICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19teV9tYWxsb2NfaGFuZGxlciA9PSAwLCAw KSkKICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxs b2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAg ICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICB9CiAg ICB9CgoKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2ludGVyZmFjZTsKIyAxODkgIi9nY2Mv ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfX3NpbXBsZV9hbGxv YwogICAgewogICAgcHVibGljOgogICAgICBzdGF0aWMgX1RwKgogICAgICBhbGxvY2F0ZShzaXpl X3QgX19uKQogICAgICB7CiBfVHAqIF9fcmV0ID0gMDsKIGlmIChfX24pCiAgIF9fcmV0ID0gc3Rh dGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpOwogcmV0 dXJuIF9fcmV0OwogICAgICB9CgogICAgICBzdGF0aWMgX1RwKgogICAgICBhbGxvY2F0ZSgpCiAg ICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KCiAg ICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAg ICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2Yg KF9UcCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKF9UcCogX19wKQog ICAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KICAgIH07CiMg MjI3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxsb2MuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9fZGVidWdfYWxsb2MKICAg IHsKICAgIHByaXZhdGU6CgoKICAgICAgZW51bSB7X1NfZXh0cmEgPSA4fTsKCiAgICBwdWJsaWM6 CiAgICAgIHN0YXRpYyB2b2lkKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAg ICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyAoaW50 KSBfU19leHRyYSk7CiAgICAgICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgICAgIHJl dHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogICAgICB9CgogICAgICBzdGF0aWMgdm9p ZAogICAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgewogICAgICAg IGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgICAgIGlm ICgqKHNpemVfdCopX19yZWFsX3AgIT0gX19uKQogICAgICAgICAgYWJvcnQoKTsKICAgICAgICBf QWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3AsIF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAg fQogICAgfTsKIyAyODUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0 bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBj bGFzcyBfX3Bvb2xfYWxsb2MKICAgIHsKICAgIHByaXZhdGU6CiAgICAgIGVudW0ge19BTElHTiA9 IDh9OwogICAgICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICAgICAgZW51bSB7X05GUkVFTElT VFMgPSBfTUFYX0JZVEVTIC8gX0FMSUdOfTsKCiAgICAgIHVuaW9uIF9PYmoKICAgICAgewogICAg ICAgIHVuaW9uIF9PYmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50 X2RhdGFbMV07CiAgICAgIH07CgogICAgICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9s aXN0W19ORlJFRUxJU1RTXTsKCgogICAgICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICAg ICAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogICAgICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBf c2l6ZTsKCiAgICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1NfbG9jazsKICAgICAgc3RhdGlj IF9BdG9taWNfd29yZCBfU19mb3JjZV9uZXc7CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9T X3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChz aXplX3QpIF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgICBzdGF0 aWMgc2l6ZV90CiAgICAgIF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKQogICAgICB7 IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpX0FMSUdOIC0gMSkvKHNpemVfdClfQUxJR04g LSAxKTsgfQoKCgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgX1NfcmVmaWxsKHNpemVfdCBfX24p OwoKCgogICAgICBzdGF0aWMgY2hhcioKICAgICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6 ZSwgaW50JiBfX25vYmpzKTsKCgoKICAgICAgc3RydWN0IF9Mb2NrCiAgICAgIHsKICAgICAgICBf TG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1NfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAg ICAgIH5fTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1NfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsg fQogICAgICB9IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAgICAgIGZyaWVuZCBzdHJ1 Y3QgX0xvY2s7CgogICAgcHVibGljOgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRl KHNpemVfdCBfX24pCiAgICAgIHsKIHZvaWQqIF9fcmV0ID0gMDsKCgoKCiBpZiAoX1NfZm9yY2Vf bmV3ID09IDApCiAgIHsKICAgICBpZiAoZ2V0ZW52KCJHTElCQ1BQX0ZPUkNFX05FVyIpKQogICAg ICAgX19hdG9taWNfYWRkKCZfU19mb3JjZV9uZXcsIDEpOwogICAgIGVsc2UKICAgICAgIF9fYXRv bWljX2FkZCgmX1NfZm9yY2VfbmV3LCAtMSk7CiAgIH0KCiBpZiAoKF9fbiA+IChzaXplX3QpIF9N QVhfQllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgX19yZXQgPSBfX25ld19hbGxvYzo6 YWxsb2NhdGUoX19uKTsKIGVsc2UKICAgewogICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVf bGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgog ICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICBfT2JqKiBfX3Jlc3RyaWN0X18gX19yZXN1 bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1bHQg PT0gMCwgMCkpCiAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAg ICBlbHNlCiAgICAgICB7CiAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9s aXN0X2xpbms7CiAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgIH0KICAgICBpZiAoX19idWlsdGlu X2V4cGVjdChfX3JldCA9PSAwLCAwKSkKICAgICAgIF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgIH0K IHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2Nh dGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgICB7CiBpZiAoKF9fbiA+IChzaXplX3QpIF9N QVhfQllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgX19uZXdfYWxsb2M6OmRlYWxsb2Nh dGUoX19wLCBfX24pOwogZWxzZQogICB7CiAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9s aXN0ID0gX1NfZnJlZV9saXN0CiAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAg X09iaiogX19xID0gKF9PYmoqKV9fcDsKCgoKCiAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwog ICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAqX19t eV9mcmVlX2xpc3QgPSBfX3E7CiAgIH0KICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8Ym9vbCBf X3RocmVhZHMsIGludCBfX2luc3Q+IF9BdG9taWNfd29yZAogIF9fcG9vbF9hbGxvYzxfX3RocmVh ZHMsIF9faW5zdD46Ol9TX2ZvcmNlX25ldyA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRz LCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19wb29s X2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+JiwKICAgICAgICBjb25zdCBfX3Bvb2xfYWxsb2M8X190 aHJlYWRzLF9faW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxib29sIF9f dGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0 IF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9f cG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0PiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKCgoK CiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKgogICAgX19w b29sX2FsbG9jPF9fdGhyZWFkcywgX19pbnN0Pjo6CiAgICBfU19jaHVua19hbGxvYyhzaXplX3Qg X19zaXplLCBpbnQmIF9fbm9ianMpCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0OwogICAgICBz aXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVfdCBfX2J5 dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAoX19ieXRl c19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpCiAgICAgICAgewogICAgICAgICAgX19yZXN1bHQgPSBf U19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwog ICAgICAgICAgcmV0dXJuIF9fcmVzdWx0IDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYnl0 ZXNfbGVmdCA+PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19ub2JqcyA9IChpbnQpKF9f Ynl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9f bm9ianM7CiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICBfU19z dGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAg ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9f Z2V0ID0KICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFw X3NpemUgPj4gNCk7CgogICAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAg ICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsK CiAgICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGlu ayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09i aiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgICAgfQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9 IChjaGFyKikgX19uZXdfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICAg IGlmIChfU19zdGFydF9mcmVlID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXpl X3QgX19pOwogICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAg ICAgICAgICAgICBfT2JqKiBfX3A7CgoKCiAgICAgICAgICAgICAgX19pID0gX19zaXplOwogICAg ICAgICAgICAgIGZvciAoOyBfX2kgPD0gKHNpemVfdCkgX01BWF9CWVRFUzsgX19pICs9IChzaXpl X3QpIF9BTElHTikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19teV9mcmVl X2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAg ICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICAgIGlmIChfX3Ag IT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAqX19teV9m cmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAg ICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICAgIF9TX2Vu ZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpOwoKCiAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsKICAgICAg ICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fbmV3X2FsbG9jOjphbGxvY2F0ZShfX2J5 dGVzX3RvX2dldCk7CgoKICAgICAgICAgICAgfQogICAgICAgICAgX1NfaGVhcF9zaXplICs9IF9f Ynl0ZXNfdG9fZ2V0OwogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19i eXRlc190b19nZXQ7CiAgICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25v YmpzKTsKICAgICAgICB9CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50 IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+Ojpf U19yZWZpbGwoc2l6ZV90IF9fbikKICAgIHsKICAgICAgaW50IF9fbm9ianMgPSAyMDsKICAgICAg Y2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICAgIF9PYmoq IHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgX09iaiogX19yZXN1bHQ7CiAgICAgIF9P YmoqIF9fY3VycmVudF9vYmo7CiAgICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICAgIGludCBfX2k7 CgogICAgICBpZiAoMSA9PSBfX25vYmpzKQogICAgICAgIHJldHVybiBfX2NodW5rOwogICAgICBf X215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoK ICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0g X19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsg OyBfX2krKykKICAgICAgICB7CiAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAg ICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOwogICBpZiAo X19ub2JqcyAtIDEgPT0gX19pKQogICAgIHsKICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJl ZV9saXN0X2xpbmsgPSAwOwogICAgICAgYnJlYWs7CiAgICAgfQogICBlbHNlCiAgICAgX19jdXJy ZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiB9CiAgICAgIHJldHVy biBfX3Jlc3VsdDsKICAgIH0KCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0 PgogICAgX1NUTF9tdXRleF9sb2NrCiAgICBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5zdD46 Ol9TX2xvY2sgPSB7IDAgfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+ CiAgICBjaGFyKiBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUg PSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqIF9f cG9vbF9hbGxvYzxfX3RocmVhZHMsX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOwoKICB0ZW1wbGF0 ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHNpemVfdCBfX3Bvb2xfYWxsb2M8X190 aHJlYWRzLF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJl YWRzLCBpbnQgX19pbnN0PgogICAgdHlwZW5hbWUgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2lu c3Q+OjpfT2JqKiB2b2xhdGlsZQogICAgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+Ojpf U19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKICB0eXBlZGVmIF9fcG9vbF9hbGxvYzx0cnVlLDA+ IF9fYWxsb2M7CiAgdHlwZWRlZiBfX3Bvb2xfYWxsb2M8ZmFsc2UsMD4gX19zaW5nbGVfY2xpZW50 X2FsbG9jOwojIDU2NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3Rs X2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBhbGxvY2F0b3IK ICAgIHsKICAgICAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKICAgIHB1YmxpYzoKICAgICAgdHlw ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl X3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9U cCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAgICAgdHlw ZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVf dHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0IHJlYmlu ZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07CgogICAgICBhbGxv Y2F0b3IoKSB0aHJvdygpIHt9CiAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJv dygpIHt9CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgYWxsb2NhdG9yKGNv bnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICAgICAgfmFsbG9jYXRvcigpIHRocm93 KCkge30KCiAgICAgIHBvaW50ZXIKICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7 IHJldHVybiAmX194OyB9CgogICAgICBjb25zdF9wb2ludGVyCiAgICAgIGFkZHJlc3MoY29uc3Rf cmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKCgogICAgICBfVHAqCiAgICAg IGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKICAgICAgewogX1RwKiBf X3JldCA9IDA7CiBpZiAoX19uKQogICB7CiAgICAgaWYgKF9fbiA8PSB0aGlzLT5tYXhfc2l6ZSgp KQogICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAq IHNpemVvZihfVHApKSk7CiAgICAgZWxzZQogICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAg fQogcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBkZWFsbG9jYXRlKHBv aW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3As IF9fbiAqIHNpemVvZihfVHApKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkg Y29uc3QgdGhyb3coKSB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgICAg IHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3Ap IF9UcChfX3ZhbCk7IH0KICAgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9U cCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBhbGxvY2F0b3I8dm9pZD4KICAg IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBl ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdm9pZCogcG9pbnRl cjsKICAgICAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVm IHZvaWQgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAg c3RydWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07 CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9j YXRvcjxfVDI+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Qx LCB0eXBlbmFtZSBfVDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBhbGxv Y2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9 CiMgNjYwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxsb2Mu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0 IF9fYWxsb2NhdG9yCiAgICB7CiAgICAgIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogICAg ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl cmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29u c3QgX1RwKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAg ICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9UcCB2 YWx1ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3Qg cmViaW5kCiAgICAgICAgeyB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7 IH07CgogICAgICBfX2FsbG9jYXRvcigpIHRocm93KCkge30KICAgICAgX19hbGxvY2F0b3IoY29u c3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKQogICAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhf X2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4K ICAgICAgICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2Ep IHRocm93KCkKICAgICAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2Fs bG9jKSB7fQoKICAgICAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICAgICAgcG9pbnRlcgog ICAgICBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgICAg IGNvbnN0X3BvaW50ZXIKICAgICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7 IHJldHVybiAmX194OyB9CgoKCiAgICAgIF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9f biwgY29uc3Qgdm9pZCogPSAwKQogICAgICB7CiBfVHAqIF9fcmV0ID0gMDsKIGlmIChfX24pCiAg IF9fcmV0ID0gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2Yo X1RwKSkpOwogcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBkZWFsbG9j YXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgICB7IF9fdW5kZXJseWluZ19hbGxv Yy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogICAgICBzaXplX3R5cGUK ICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXpl b2YoX1RwKTsgfQoKICAgICAgdm9pZAogICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0 IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQoKICAgICAgdm9pZAogICAgICBk ZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPgogICAg ewogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90 IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0eXBl ZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1ZV90 eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5k CiAgICAgICAgeyB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07CiAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBfX2Ex LAogICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsX0FsbG9jPiYgX19hMikKICAg IHsgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2Fs bG9jOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBf X2ExLAogICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIp CiAgICB7IHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWlu Z19hbGxvYzsgfQoKCgoKCgoKICB0ZW1wbGF0ZTxpbnQgaW5zdD4KICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jPGluc3Q+JiwKICAgICAgICAgICAgICAg Y29uc3QgX19tYWxsb2NfYWxsb2M8aW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1w bGF0ZTxpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19t YWxsb2NfYWxsb2M8X19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9j PF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWJ1Z19hbGxvYzxf QWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJuIHRydWU7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yIT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxf QWxsb2M+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CiMgODEzICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk YysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzCiAgICB7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxv Y2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Fs bG9jYXRvcj4KICAgIGNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+Ojpf U19pbnN0YW5jZWxlc3M7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDE+ CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CiAgICB7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVk ZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2FsbG9jPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRl ZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcCwgaW50IF9faW5zdD4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19t YWxsb2NfYWxsb2M8X19pbnN0PiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2lu c3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21h bGxvY19hbGxvYzxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0 b3I8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAg c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+ ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK ICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMs IF9faW5zdD4gPgogICAgICBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxf VHAsIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICBhbGxvY2F0b3JfdHlw ZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPgogICAgewog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBl ZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5 cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4g PiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5 cGVuYW1lIF9UcDEsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvYzxf X2luc3Q+ID4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg PSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2M8 X19pbnN0PiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19t YWxsb2NfYWxsb2M8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgogICAg c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX3Bvb2xfYWxsb2M8 X190aHIsIF9faW5zdD4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3Rh bmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX3Bvb2xf YWxsb2M8X190aHIsX19pbnN0PiA+CiAgICAgIF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9f YWxsb2NhdG9yPF9UcCwgX19wb29sX2FsbG9jPF9fdGhyLF9faW5zdD4gPgogICAgICBhbGxvY2F0 b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwg dHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRv cjxfVHAxLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxs b2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRl ZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBl OwogICAgfTsKCgoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPGNoYXI+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIF9fcG9vbF9hbGxvYzx0cnVlLDA+OwoKfQojIDU2ICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli c3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5IiAyIDMKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDY3ICIvZ2NjL2RqZS9idWls ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKbmFtZXNwYWNlIHN0 ZAp7CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgogICAgaW5saW5lIHZv aWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3 IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9CgoKCgoKCgogIHRlbXBs YXRlIDxjbGFzcyBfVDE+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkK ICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKCk7IH0KIyA5OCAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0 cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0 LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz dCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQojIDExMiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12 My9pbmNsdWRlL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0 ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkKICAgIHsgfQoKCgoKCgogIHRl bXBsYXRlIDxjbGFzcyBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX1RwKiBfX3Bv aW50ZXIpCiAgICB7IF9fcG9pbnRlci0+fl9UcCgpOyB9CiMgMTM0ICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli c3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2Fy ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVf dHlwZQogICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlX3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9y CiAgICAgICAgICAgICAgICAgICAgICAgX0hhc190cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBf X2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7 CiAgICB9Cn0KIyA1NyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL21lbW9yeSIg MiAzCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF91bmlu aXRpYWxpemVkLmgiIDEgMwojIDY2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv Yml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBf Rm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAg ICAgICBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zvcndh cmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICBfRm9yd2FyZEl0ZXIg X19yZXN1bHQsCiAgICAgICAgX19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIg X19jdXIgPSBfX3Jlc3VsdDsKICAgICAgdHJ5IHsKIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7 ICsrX19maXJzdCwgKytfX2N1cikKICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiBy ZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogewogICBfRGVzdHJveShfX3Jl c3VsdCwgX19jdXIpOwogICB0aHJvdzsKIH0KICAgIH0KIyAxMDYgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0Zv cndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6 aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1 eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwogICAgfQoKICBpbmxpbmUg Y2hhcioKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hh ciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2Zp cnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBf X2ZpcnN0KTsKICB9CgogIGlubGluZSB3Y2hhcl90KgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25z dCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsCiAgICAgICB3Y2hhcl90 KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2No YXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFz dCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgY29uc3Qg X1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZv aWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQog ICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewogZm9y ICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194 KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiB7CiAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3Vy KTsKICAgdGhyb3c7CiB9CiAgICB9CiMgMTY0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXpl ZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf VHAmIF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv cndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9f dW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsK ICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXpl LCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6 ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAg Y29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICByZXR1cm4gZmlsbF9uKF9f Zmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3Vu aW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAog ICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0Zvcndh cmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsKIGZvciAoIDsgX19uID4gMDsgLS1f X24sICsrX19jdXIpCiAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKIHJldHVybiBfX2N1cjsK ICAgICAgfQogICAgICBjYXRjaCguLi4pCiB7CiAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsK ICAgdGhyb3c7CiB9CiAgICB9CiMgMjEwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1 ZGUvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJk SXRlcgogICAgdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXpl IF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNf UE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19u LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMgMjI3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+ CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9J bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICBfSW5wdXRJ dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgX0ZvcndhcmRJdGVy IF9fcmVzdWx0KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVk X2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgdHJ5IHsKIHJldHVybiB1 bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICAgICAgfQogICAg ICBjYXRjaCguLi4pCiB7CiAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgIHRocm93Owog fQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5p bml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIg X19taWQsCiAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICBfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0KQogICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19y ZXN1bHQsIF9fbWlkLCBfX3gpOwogICAgICB0cnkgewogcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiB7CiAg IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgIHRocm93OwogfQogICAgfQoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1 dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgX0ZvcndhcmRJdGVy IF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgY29uc3QgX1RwJiBfX3gp CiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19m aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICAgICAgdHJ5IHsKIHVuaW5pdGlhbGl6ZWRfZmls bChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogewogICBf RGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsKICAgdGhyb3c7CiB9CiAgICB9Cgp9CiMgNTkgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9tZW1vcnkiIDIgMwojIDEgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEg MwojIDY0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfcmF3X3N0 b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yCiAg ICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lk LCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9NX2l0 ZXI7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICByYXdfc3RvcmFnZV9pdGVyYXRv cihfRm9yd2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KCiAgICAgIHJhd19zdG9y YWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKICAgICAg cmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVu dCkKICAgICAgewogX0NvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CiByZXR1cm4gKnRo aXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3Is IF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiArK19NX2l0ZXI7CiByZXR1cm4gKnRo aXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3Is IF9UcD4KICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKIHJhd19zdG9yYWdlX2l0ZXJhdG9y PF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsKICsrX01faXRlcjsKIHJldHVy biBfX3RtcDsKICAgICAgfQogICAgfTsKfQojIDYwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvbWVtb3J5IiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDcxICIvZ2NjL2RqZS9idWls ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv bGlic3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog ICAgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+CiAgICBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRp ZmZfdCBfX2xlbiwgX1RwKikKICAgIHsKICAgICAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0 ODM2NDcgLyBzaXplb2YoX1RwKSkpCiBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsK CiAgICAgIHdoaWxlIChfX2xlbiA+IDApCiB7CiAgIF9UcCogX190bXAgPSAoX1RwKikgc3RkOjpt YWxsb2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICBpZiAoX190bXAgIT0g MCkKICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAgIF9f bGVuIC89IDI7CiB9CiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwg MCk7CiAgICB9CiMgMTAzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5 IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHBhaXI8X1RwKixwdHJkaWZm X3Q+CiAgICBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pCiAgICB7IHJldHVy biBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7IH0KIyAxMTUgIi9nY2Mv ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICB2b2lkCiAgICByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkKICAg IHsgc3RkOjpmcmVlKF9fcCk7IH0KIyAxMjcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j bHVkZS9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgc3RydWN0IGF1dG9f cHRyX3JlZgogICAgewogICAgICBfVHAxKiBfTV9wdHI7CgogICAgICBleHBsaWNpdAogICAgICBh dXRvX3B0cl9yZWYoX1RwMSogX19wKTogX01fcHRyKF9fcCkgeyB9CiAgICB9OwojIDE2NiAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICAgIGNsYXNzIGF1dG9fcHRyCiAgICB7CiAgICBwcml2YXRlOgogICAgICBfVHAq IF9NX3B0cjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CgoK CgoKCgogICAgICBleHBsaWNpdAogICAgICBhdXRvX3B0cihlbGVtZW50X3R5cGUqIF9fcCA9IDAp IHRocm93KCkgOiBfTV9wdHIoX19wKSB7IH0KIyAxOTIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst djMvaW5jbHVkZS9tZW1vcnkiIDMKICAgICAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3co KSA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMDMgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9tZW1vcnkiIDMKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAg ICAgICBhdXRvX3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpIDogX01fcHRyKF9fYS5y ZWxlYXNlKCkpIHsgfQojIDIxNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL21l bW9yeSIgMwogICAgICBhdXRvX3B0ciYKICAgICAgb3BlcmF0b3I9KGF1dG9fcHRyJiBfX2EpIHRo cm93KCkKICAgICAgewogcmVzZXQoX19hLnJlbGVhc2UoKSk7CiByZXR1cm4gKnRoaXM7CiAgICAg IH0KIyAyMzEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9tZW1vcnkiIDMKICAg ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBhdXRvX3B0ciYKICAgICAgICBvcGVy YXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAgICAgIHsKICAgcmVzZXQoX19h LnJlbGVhc2UoKSk7CiAgIHJldHVybiAqdGhpczsKIH0KIyAyNTEgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9tZW1vcnkiIDMKICAgICAgfmF1dG9fcHRyKCkgeyBkZWxldGUgX01f cHRyOyB9CiMgMjYxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5IiAz CiAgICAgIGVsZW1lbnRfdHlwZSYKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgdGhyb3coKSB7IHJl dHVybiAqX01fcHRyOyB9CgoKCgoKCgogICAgICBlbGVtZW50X3R5cGUqCiAgICAgIG9wZXJhdG9y LT4oKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQojIDI4MyAiL2djYy9kamUvYnVp bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w L2xpYnN0ZGMrKy12My9pbmNsdWRlL21lbW9yeSIgMwogICAgICBlbGVtZW50X3R5cGUqCiAgICAg IGdldCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMjk3ICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5IiAzCiAgICAgIGVsZW1lbnRfdHlwZSoKICAg ICAgcmVsZWFzZSgpIHRocm93KCkKICAgICAgewogZWxlbWVudF90eXBlKiBfX3RtcCA9IF9NX3B0 cjsKIF9NX3B0ciA9IDA7CiByZXR1cm4gX190bXA7CiAgICAgIH0KIyAzMTIgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9tZW1vcnkiIDMKICAgICAgdm9pZAogICAgICByZXNldChl bGVtZW50X3R5cGUqIF9fcCA9IDApIHRocm93KCkKICAgICAgewogaWYgKF9fcCAhPSBfTV9wdHIp CiAgIHsKICAgICBkZWxldGUgX01fcHRyOwogICAgIF9NX3B0ciA9IF9fcDsKICAgfQogICAgICB9 CiMgMzMzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbWVtb3J5IiAzCiAgICAg IGF1dG9fcHRyKGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICAg IDogX01fcHRyKF9fcmVmLl9NX3B0cikgeyB9CgogICAgICBhdXRvX3B0ciYKICAgICAgb3BlcmF0 b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICAgIHsKIGlm IChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpCiAgIHsKICAgICBkZWxldGUgX01fcHRyOwog ICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgfQogcmV0dXJuICp0aGlzOwogICAgICB9Cgog ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIG9wZXJhdG9yIGF1dG9fcHRyX3Jl ZjxfVHAxPigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1RwMT4odGhp cy0+cmVsZWFzZSgpKTsgfQoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBv cGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBhdXRvX3B0 cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9CgogIH07Cn0KIyA0OSAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL3N0cmluZyIgMiAzCgoKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDY0ICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwpuYW1lc3BhY2Ug c3RkCnsKIyAxMDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9m dW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3Qg dW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYg X1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3Mg X0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYg X0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVu dF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKIyAxMjcgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRl IDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw LF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g X194IC0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf VHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm IF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7CiAgX1Rw IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKIyAx NzMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9mdW5jdGlvbi5o IiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlf ZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194 LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U cCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f eSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K c3RydWN0IGxlc3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0 dXJuIF9feCA8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVy X2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf X3ggPj0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3Io KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBf X3k7IH0KfTsKIyAyMjIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0 bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigp KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9f eTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07 CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBj b25zdCB7IHJldHVybiAhX194OyB9Cn07CiMgMjcxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0 ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg X1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0 ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNh dGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5h bWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9N X3ByZWQoX194KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1 bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsK ICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25lZ2F0ZQogIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRf dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1By ZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBf UHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0 IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwKICAgICAgICAg ICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUm IF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kpOwogIH0KfTsKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0 ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0 ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CiMgMzQ5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv bj4KY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09w ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRp b24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsK cHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNv bnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAg OiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5 cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVu dF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9CgoKICB0 eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09w ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9w KHZhbHVlLCBfX3gpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNz IF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5kMXN0KGNvbnN0IF9PcGVyYXRp b24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9u OjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxfT3Bl cmF0aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVy YXRpb24+CmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1l IF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVy YXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFs dWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAg ICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KQog ICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1 bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn dW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoK CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1l IF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJu IG9wKF9feCwgdmFsdWUpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNs YXNzIF9UcD4KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpiaW5kMm5kKGNvbnN0IF9PcGVy YXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0 aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8 X09wZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlwZShfX3gpKTsKfQojIDQzOCAiL2djYy9kamUvYnVp bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24g OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jl c3VsdCAoKl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9u KCkge30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gp KF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBj b25zdCB7IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBj bGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVz dWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9f dW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf QXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5 X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+ IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKcHVibGlj OgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQgcG9pbnRl cl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkKICAgICAg OiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIg X195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9OwoKCnRl bXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBw b2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9S ZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlf ZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewog IF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAgY29uc3Qg X1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsK CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlf ZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgdHlwZW5hbWUg X1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0 dXJuIF9feC5maXJzdDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9w ZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsK ICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGlj IHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsKICB0 eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNv bmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4g X194LnNlY29uZDsKICB9Cn07CiMgNTI4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1 ZGUvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw PgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixfUmV0PiB7CnB1 YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9f cGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4q X01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUg PGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVu YXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3Rf bWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9S ZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2Yp KCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRl IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5h cnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qo X1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9U cCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAo X1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFz cyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7 CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYp KCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f cikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6 Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xh c3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixf QXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19w ZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0Fy ZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1Jl dCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U cCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21l bV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQog IF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJl dHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9B cmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B cmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0Fy ZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6Oipf X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBf QXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9S ZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf VHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1f ZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9 CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1 cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9Bcmcp IGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBf VHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj aXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQg b3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgog IHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29u c3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw Kix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoq X19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9U cCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoq X01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Jl Zl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGlj OgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9f cGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7 IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9m dW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZf dCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJh dG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgog IHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFf dCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRv cigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2 YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAg ZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkg OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9f eCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N X2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNs YXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qo dm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io KShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRl OgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj aXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDog X01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gp IGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2Yp KF9BcmcpIGNvbnN0Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+Cmlu bGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsg cmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0 IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1Rw PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1 bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0 dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0 LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVu X3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl9y ZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwg Y2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0 IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4o X19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5s aW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6Oipf X2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0Fy Zz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K aW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9U cDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4o X19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5s aW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVmKF9SZXQg KF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8 X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKCgp9CiMgNTMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst djMvaW5jbHVkZS9zdHJpbmciIDIgMwojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j bHVkZS9iaXRzL2Jhc2ljX3N0cmluZy5oIiAxIDMKIyA0NCAiL2djYy9kamUvYnVpbGQvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr Ky12My9pbmNsdWRlL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMg MTA4ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19zdHJpbmcu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVibGljOgogICAg ICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Ry YWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRv cl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJl bmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJl bmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0 X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRl cjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9p bnRlcjsKICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIs IGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1h bF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9y OwogICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29u c3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8 aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxNDMgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0 cnVjdCBfUmVwCiAgICAgIHsKCiB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmVi aW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwojIDE2MSAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKIHN0YXRpYyBjb25zdCBz aXplX3R5cGUgX1NfbWF4X3NpemU7CiBzdGF0aWMgY29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFsOwoK IHNpemVfdHlwZSBfTV9sZW5ndGg7CiBzaXplX3R5cGUgX01fY2FwYWNpdHk7CiBfQXRvbWljX3dv cmQgX01fcmVmZXJlbmNlczsKCiAgICAgICAgYm9vbAogX01faXNfbGVha2VkKCkgY29uc3QKICAg ICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQoKICAgICAgICBib29sCiBfTV9pc19z aGFyZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAg ICAgIHZvaWQKIF9NX3NldF9sZWFrZWQoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9 CgogICAgICAgIHZvaWQKIF9NX3NldF9zaGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2Vz ID0gMDsgfQoKIF9DaGFyVCoKIF9NX3JlZmRhdGEoKSB0aHJvdygpCiB7IHJldHVybiByZWludGVy cHJldF9jYXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoKIF9DaGFyVCYKIG9wZXJhdG9yW10oc2l6 ZV90IF9fcykgdGhyb3coKQogeyByZXR1cm4gX01fcmVmZGF0YSgpIFtfX3NdOyB9CgogX0NoYXJU KgogX01fZ3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2My KQogewogICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikK ICAgICAgICAgICA/IF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxsb2MxKTsKIH0KCgogc3Rh dGljIF9SZXAqCiBfU19jcmVhdGUoc2l6ZV90LCBjb25zdCBfQWxsb2MmKTsKCiB2b2lkCiBfTV9k aXNwb3NlKGNvbnN0IF9BbGxvYyYgX19hKQogewogICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZf TV9yZWZlcmVuY2VzLCAtMSkgPD0gMCkKICAgICBfTV9kZXN0cm95KF9fYSk7CiB9Cgogdm9pZAog X01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0aHJvdygpOwoKIF9DaGFyVCoKIF9NX3JlZmNvcHko KSB0aHJvdygpCiB7CiAgIF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7CiAgIHJldHVy biBfTV9yZWZkYXRhKCk7CiB9CgogX0NoYXJUKgogX01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6 ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07CgoKICAgICAgc3RydWN0IF9BbGxvY19oaWRlciA6 IF9BbGxvYwogICAgICB7CiBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9j JiBfX2EpCiA6IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KCiBfQ2hhclQqIF9NX3A7CiAg ICAgIH07CgogICAgcHVibGljOgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3Mg PSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJs ZSBfQWxsb2NfaGlkZXIgX01fZGF0YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1Nf ZW1wdHlfcmVwX3N0b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9m KHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAg IF9NX2RhdGEoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAg ICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9k YXRhcGx1cy5fTV9wID0gX19wKTsgfQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QK ICAgICAgeyByZXR1cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0x XSk7IH0KCgoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4g aXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNv bnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAg IHZvaWQKICAgICAgX01fbGVhaygpCiAgICAgIHsKIGlmICghX01fcmVwKCktPl9NX2lzX2xlYWtl ZCgpKQogICBfTV9sZWFrX2hhcmQoKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01f Y2hlY2soc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7CiBpZiAoX19wb3MgPiB0aGlzLT5z aXplKCkpCiAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCgiYmFzaWNfc3RyaW5nOjpfTV9jaGVjayIp KTsKIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgoKICAgICAgaXRlcmF0b3IK ICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29mZikgY29uc3QKICAg ICAgewogYm9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogc2l6 ZV90eXBlIF9fbmV3b2ZmID0gX190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5zaXplKCkgLSBfX3Bv czsKIHJldHVybiAoX01faWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgog ICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAg ICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9f azIpCiAgICAgICAgewogICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAg IHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwgKl9fazEpOwogfQoKICAgICAgc3RhdGljIHZvaWQK ICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3Ig X19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgp KTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwg Y29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5 X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZv aWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQq IF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7 IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNv bnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBl Ojpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX211 dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIp OwoKICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBfUmVwJgog ICAgICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVw Kj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAgIGlubGlu ZQogICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmlu Zyhjb25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0 ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgIHNpemVfdHlwZSBfX24gPSBucG9zKTsKICAgICAgYmFz aWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAg ICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmco Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sCiAgICAgY29uc3QgX0FsbG9jJiBfX2Eg PSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3Qg X0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19u LCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBs YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVy YXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQsCiAgICAgICBjb25zdCBfQWxsb2MmIF9f YSA9IF9BbGxvYygpKTsKCiAgICAgIH5iYXNpY19zdHJpbmcoKQogICAgICB7IF9NX3JlcCgpLT5f TV9kaXNwb3NlKHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMt PmFzc2lnbihfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNv bnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zKTsgfQoKICAgICAgYmFz aWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXNz aWduKDEsIF9fYyk7IH0KCgogICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpCiAgICAgIHsKIF9N X2xlYWsoKTsKIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBjb25z dF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJh dG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAg ICAgICAgX01fbGVhaygpOwogIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXpl KCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBjb25zdAogICAg ICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9Cgog ICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpCiAgICAgIHsgcmV0dXJuIHJldmVy c2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y CiAgICAgIHJiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0 b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKQog ICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAgICBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAgcHVibGljOgoKICAg ICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVu Z3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gX01f cmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29u c3QgeyByZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzaXpl KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6 ZV90eXBlIF9fbikgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hhclQoKSk7IH0KCiAgICAgIHNpemVf dHlwZQogICAgICBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9jYXBhY2l0 eTsgfQoKICAgICAgdm9pZAogICAgICByZXNlcnZlKHNpemVfdHlwZSBfX3Jlc19hcmcgPSAwKTsK CiAgICAgIHZvaWQKICAgICAgY2xlYXIoKSB7IF9NX211dGF0ZSgwLCB0aGlzLT5zaXplKCksIDAp OyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+c2l6ZSgp ID09IDA7IH0KCgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90 eXBlIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhKClbX19wb3NdOyB9CgogICAg ICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19wb3MpCiAgICAgIHsKIF9N X2xlYWsoKTsKIHJldHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9y ZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogaWYgKF9fbiA+ PSB0aGlzLT5zaXplKCkpCiAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCgiYmFzaWNfc3RyaW5nOjph dCIpKTsKIHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKICAgICAgcmVmZXJlbmNlCiAg ICAgIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsKIGlmIChfX24gPj0gc2l6ZSgpKQogICBfX3Ro cm93X291dF9vZl9yYW5nZSgoImJhc2ljX3N0cmluZzo6YXQiKSk7CiBfTV9sZWFrKCk7CiByZXR1 cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9w ZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXBwZW5k KF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IF9D aGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChz aXplX3R5cGUoMSksIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNv bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBl bmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg X19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0 IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlw ZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChzaXpl X3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJl cGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZv aWQKICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9p ZW5kKCksIF9NX2llbmQoKSwgMSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBh c3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAg ICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0No YXJUKiBfX3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3Np Z24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRy YWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNz aWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh Y2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWdu KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7 IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9f bGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBl IF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9f Yyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQg aW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9y IF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsg fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29u c3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9z MSwgX19zdHIsIDAsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg aW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAg IHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3Ms IGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MsIF9f cywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAg ICB7CiB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBfX24sIF9fYyk7CiByZXR1cm4gKnRo aXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9D aGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewogc2l6ZV90eXBlIF9fcG9zID0gX19wIC0gX01f aWJlZ2luKCk7CiB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9f Yyk7CiBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogIHJldHVybiB0aGlzLT5fTV9pYmVnaW4o KSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVf dHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7CiByZXR1cm4gdGhp cy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbiksCiAgICAgICAg X01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFz ZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgICB7CiBzaXplX3R5cGUgX19pID0gX19wb3NpdGlv biAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3Np dGlvbiArIDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKIF9NX3JlcCgpLT5fTV9zZXRfbGVha2Vk KCk7CiByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAg ICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewogICAg ICAgIHNpemVfdHlwZSBfX2kgPSBfX2ZpcnN0IC0gX01faWJlZ2luKCk7CiB0aGlzLT5yZXBsYWNl KF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogX01fcmVwKCktPl9NX3Nl dF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAg ICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVw bGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAg IGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUg X19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgIHNpemVfdHlwZSBfX3BvczIs IHNpemVfdHlwZSBfX24yKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgIHNp emVfdHlwZSBfX24yKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1 cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uMSwgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f cykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9z LCBzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0 dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwg X19uMiwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9y IF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsg cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5z aXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19p MSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAt IF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19zLCBfX24pOyB9CgogICAgICBiYXNpY19zdHJp bmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0No YXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCB0 cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbiwgX0NoYXJU IF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNp Y19zdHJpbmcmCiAgICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAog IF9JbnB1dEl0ZXJhdG9yIF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1 cm4gX01fcmVwbGFjZShfX2kxLCBfX2kyLCBfX2sxLCBfX2syLAogICAgICB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsgfQoKCgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig X19pMiwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+ cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAgICAgX19rMSwg X19rMiAtIF9fazEpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0 b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQq IF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCks IF9faTIgLSBfX2kxLAogICAgICAgICAgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgaXRl cmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNl KF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICBfX2sxLmJhc2UoKSwg X19rMiAtIF9fazEpOwogfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJh dG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJh dG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2lu KCksIF9faTIgLSBfX2kxLAogICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sxKTsKIH0K CiAgICBwcml2YXRlOgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAg ICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv ciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sxLAogICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlu cHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y PgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3Ig X19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyYXRvciBfX2sxLAogICAgIF9Gb3J3YXJk SXRlcmF0b3IgX19rMik7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAg c3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9J bkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgX19mYWxzZV90eXBlKQogewogICAg ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0luSXRlcj46Oml0ZXJhdG9y X2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KF9fYmVnLCBfX2Vu ZCwgX19hLCBfVGFnKCkpOwogfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAg ICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywg X0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICBfX3RydWVfdHlwZSkKIHsKICAg cmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwKICAgICAg ICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQpLCBfX2EpOwogfQoKICAgICAgdGVtcGxh dGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0 cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKIHsK ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRl Z3JhbDsKICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRl Z3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAg ICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0lu SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn KTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFy VCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcsIF9Gd2RJdGVyIF9fZW5kLCBj b25zdCBfQWxsb2MmIF9fYSwKICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgICAgIHN0 YXRpYyBfQ2hhclQqCiAgICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBf X2MsIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAg ICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zID0gMCkg Y29uc3Q7CgogICAgICB2b2lkCiAgICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19zKTsKCgogICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGNfc3RyKCkgY29u c3QKICAgICAgewoKIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7CiB0cmFpdHNfdHlwZTo6 YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJu IF9NX2RhdGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29u c3QgeyByZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRf YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlw ZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw ZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXpl X3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6 bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBz aXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXpl KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAg ICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5n dGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXpl X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2Zp cnN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3Bv cywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2Yo Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7 CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywg c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJz dF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXpl X3R5cGUKICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAw KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBz aXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp emVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFz dF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5 cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Ms IHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9v Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5n dGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9f Yywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZp bmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9v Zihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9z LCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rf b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgc2l6ZV90eXBlIF9fbikg Y29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0No YXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7 IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBz aXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xh c3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5w b3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIuZGF0 YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf bGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAg c2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90 X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBl OjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29m KF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgYmFzaWNf c3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0g bnBvcykgY29uc3QKICAgICAgewogaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICBfX3Rocm93 X291dF9vZl9yYW5nZSgoImJhc2ljX3N0cmluZzo6c3Vic3RyIikpOwogcmV0dXJuIGJhc2ljX3N0 cmluZygqdGhpcywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJl KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKIHNpemVfdHlwZSBfX3Np emUgPSB0aGlzLT5zaXplKCk7CiBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKIHNp emVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fc2l6ZSwgX19vc2l6ZSk7CgogaW50IF9fciA9IHRy YWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiBpZiAo IV9fcikKICAgX19yID0gX19zaXplIC0gX19vc2l6ZTsKIHJldHVybiBfX3I7CiAgICAgIH0KCiAg ICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29u c3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShz aXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0 ciwKICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAg IGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50 CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No YXJUKiBfX3MpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9z LCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICBzaXplX3R5cGUgX19u MikgY29uc3Q7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKCkKICAgIDogX01fZGF0YXBsdXMoX1Nf ZW1wdHlfcmVwKCkuX01fcmVmY29weSgpLCBfQWxsb2MoKSkgeyB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgIGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAg X19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3Qg X0NoYXJUKiBfX2xocywKICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf QWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B bGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgY29uc3QgX0NoYXJUKiBf X3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBf X3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0 cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAg X19zdHJpbmdfdHlwZSBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlw ZSgxKSwgX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fbGhzLAogICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0g MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9DaGFyVCog X19saHMsCiAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAh PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJU KiBfX2xocywKICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz KQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsgfQoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8 IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgY29uc3QgX0NoYXJU KiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAg IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAg eyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi b29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19saHMsCiAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz KQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVy biBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19saHMsCiAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgIGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogIHsgcmV0dXJu IF9fcmhzLmNvbXBhcmUoX19saHMpID49IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19saHMsCiAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICBjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJu IF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAg IHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IF9fbGhzLnN3 YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAg ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAogICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JiBfX2lzLAogICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08 X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mIF9faXMsCiAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z dHIpOwp9CiMgNTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJpbmciIDIg MwoKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2FsZ29yaXRobSIgMSAz CiMgNjUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9hbGdvcml0aG0iIDMKCgoK CiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dl cnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIg MSAzCiMgNjQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdv LmgiIDMKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaGVh cC5oIiAxIDMKIyA2MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3Rs X2hlYXAuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9p ZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgX0Rpc3Rh bmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCiAgICB7 CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAg d2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkg PCBfX3ZhbHVlKSB7CiAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3Bh cmVudCk7CiBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogX19wYXJlbnQgPSAoX19ob2xlSW5kZXgg LSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1 ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAg aW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICBf VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgX0Rpc3RhbmNlVHlwZTsKCgogICAg IAoKICAgICAKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFz dCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICBfVmFsdWVUeXBlKCooX19s YXN0IC0gMSkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcCwKICAgICB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp cnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBf X3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9 IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJ bmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgewogKihfX2Zp cnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogX19ob2xlSW5kZXgg PSBfX3BhcmVudDsKIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAg ICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBp bmxpbmUgdm9pZAogICAgcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cmF0b3I+Ojp2YWx1ZV90eXBlCiAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQog ICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rp c3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgwKSwKICAg IF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFt ZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBf X3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4Owog ICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgICAg IHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKIGlmICgqKF9fZmlyc3QgKyBfX3NlY29u ZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQogICBfX3NlY29uZENo aWxkLS07CiAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENo aWxkKTsKIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKIF9fc2Vjb25kQ2hpbGQgPSAyICog KF9fc2Vjb25kQ2hpbGQgKyAxKTsKICAgICAgfQogICAgICBpZiAoX19zZWNvbmRDaGlsZCA9PSBf X2xlbikgewogKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25k Q2hpbGQgLSAxKSk7CiBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAg ICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVl KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl bmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBf X2ZpcnN0KSwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6 dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wb3BfaGVhcChf X2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkp KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl bmFtZSBfRGlzdGFuY2UsCiAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg dm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rp c3RhbmNlIF9faG9sZUluZGV4LAogICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSwgX0Nv bXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUlu ZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7 CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKIGlmIChfX2NvbXAoKihfX2Zp cnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkK ICAgX19zZWNvbmRDaGlsZC0tOwogKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0 ICsgX19zZWNvbmRDaGlsZCk7CiBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiBfX3NlY29u ZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vj b25kQ2hpbGQgPT0gX19sZW4pIHsKICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJz dCArIChfX3NlY29uZENoaWxkIC0gMSkpOwogX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0g MTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJ bmRleCwgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5s aW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBf X2ZpcnN0KSwKICAgICAgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2 b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwg X19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwgX19jb21w KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAg dm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgIF9WYWx1ZVR5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAg IAoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5j ZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFy ZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiBfX2FkanVzdF9oZWFw KF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVu dCkpKTsKIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiBfX3BhcmVudC0tOwogICAgICB9CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUg X0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgX0NvbXBh cmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZQogICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgaWYgKF9fbGFz dCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xh c3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikv MjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50 LCBfX2xlbiwKICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkp LCBfX2NvbXApOwogaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKIF9fcGFyZW50LS07CiAgICAg IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAg dm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUg KF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0pOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgX0NvbXBhcmUgX19jb21w KQogICAgewoKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiBwb3Bf aGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0KCn0KIyA2NSAiL2djYy9kamUv YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMiAzCiMgMSAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF90ZW1wYnVmLmgiIDMK bmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9i aXRzL3N0bF90ZW1wYnVmLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNs YXNzIF9UcD4KICBjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlcgp7CgogCgogIHB0cmRpZmZfdCBfTV9v cmlnaW5hbF9sZW47CiAgcHRyZGlmZl90IF9NX2xlbjsKICBfVHAqIF9NX2J1ZmZlcjsKCgogIHZv aWQgX01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOwog ICAgX01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0 NyAvIHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHAp OwoKICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7CiAgICAgIF9NX2J1ZmZlciA9IChfVHAqKSBtYWxs b2MoX01fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAoX01fYnVmZmVyKQogICAgICAgIGJy ZWFrOwogICAgICBfTV9sZW4gLz0gMjsKICAgIH0KICB9CgogIHZvaWQgX01faW5pdGlhbGl6ZV9i dWZmZXIoY29uc3QgX1RwJiwgX190cnVlX3R5cGUpIHt9CiAgdm9pZCBfTV9pbml0aWFsaXplX2J1 ZmZlcihjb25zdCBfVHAmIHZhbCwgX19mYWxzZV90eXBlKSB7CiAgICB1bmluaXRpYWxpemVkX2Zp bGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsKICB9CgpwdWJsaWM6CgogIHB0cmRpZmZfdCBz aXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9CgogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6 ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsgfQoKICBfVHAqIGJlZ2luKCkgeyBy ZXR1cm4gX01fYnVmZmVyOyB9CgogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01f bGVuOyB9CgogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv cndhcmRJdGVyYXRvciBfX2xhc3QpIHsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFp dHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJp dmlhbDsKCiAgICB0cnkgewogICAgICBfTV9sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9f bGFzdCk7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkK ICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9 CiAgICBjYXRjaCguLi4pCiAgICAgIHsKIGZyZWUoX01fYnVmZmVyKTsKIF9NX2J1ZmZlciA9IDA7 CiBfTV9sZW4gPSAwOwogdGhyb3c7CiAgICAgIH0KICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigp IHsKICAgIF9EZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUo X01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVt cG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZm ZXImKSB7fQp9OwoKfQojIDY2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0 cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgODQgIi9nY2MvZGplL2J1aWxk L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBj b25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCiAgICB7CgogICAgIAogICAgICBpZiAoX19h IDwgX19iKQogaWYgKF9fYiA8IF9fYykKICAgcmV0dXJuIF9fYjsKIGVsc2UgaWYgKF9fYSA8IF9f YykKICAgcmV0dXJuIF9fYzsKIGVsc2UKICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19h IDwgX19jKQogcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19iIDwgX19jKQogcmV0dXJuIF9f YzsKICAgICAgZWxzZQogcmV0dXJuIF9fYjsKICAgIH0KIyAxMTggIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFu KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJl IF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKQogaWYgKF9f Y29tcChfX2IsIF9fYykpCiAgIHJldHVybiBfX2I7CiBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2Mp KQogICByZXR1cm4gX19jOwogZWxzZQogICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2Nv bXAoX19hLCBfX2MpKQogcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19jb21wKF9fYiwgX19j KSkKIHJldHVybiBfX2M7CiAgICAgIGVsc2UKIHJldHVybiBfX2I7CiAgICB9CiMgMTUwICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Z1bmN0aW9uPgogICAgX0Z1bmN0aW9u CiAgICBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVu Y3Rpb24gX19mKQogICAgewoKICAgICAKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQogX19mKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZjsKICAgIH0KCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg X0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogIGNvbnN0IF9UcCYgX192YWwsCiAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3 aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpCiArK19fZmly c3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgog ICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgIF9Q cmVkaWNhdGUgX19wcmVkLAogICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hp bGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogKytfX2ZpcnN0Owog ICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZp bmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog IGNvbnN0IF9UcCYgX192YWwsCiAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAg ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVu Y2VfdHlwZSBfX3RyaXBfY291bnQKID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAgICBm b3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogaWYgKCpfX2ZpcnN0 ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICsrX19maXJzdDsKCiBpZiAoKl9fZmlyc3QgPT0g X192YWwpIHJldHVybiBfX2ZpcnN0OwogKytfX2ZpcnN0OwoKIGlmICgqX19maXJzdCA9PSBfX3Zh bCkgcmV0dXJuIF9fZmlyc3Q7CiArK19fZmlyc3Q7CgogaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy ZXR1cm4gX19maXJzdDsKICsrX19maXJzdDsKICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAt IF9fZmlyc3QpIHsKICAgICAgY2FzZSAzOgogaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4g X19maXJzdDsKICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogaWYgKCpfX2ZpcnN0ID09IF9fdmFs KSByZXR1cm4gX19maXJzdDsKICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogaWYgKCpfX2ZpcnN0 ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICsrX19maXJzdDsKICAgICAgY2FzZSAwOgogICAg ICBkZWZhdWx0OgogcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX1Jh bmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiA9IChf X2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsg LS1fX3RyaXBfY291bnQpIHsKIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsK ICsrX19maXJzdDsKCiBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiArK19f Zmlyc3Q7CgogaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogKytfX2ZpcnN0 OwoKIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICsrX19maXJzdDsKICAg ICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2FzZSAzOgogaWYg KF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogKytfX2ZpcnN0OwogICAgICBjYXNl IDI6CiBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiArK19fZmlyc3Q7CiAg ICAgIGNhc2UgMToKIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICsrX19m aXJzdDsKICAgICAgY2FzZSAwOgogICAgICBkZWZhdWx0OgogcmV0dXJuIF9fbGFzdDsKICAgICAg fQogICAgfQojIDI4OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K ICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg ICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9fZmlyc3QpKTsKICAgIH0KIyAzMDkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk ZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl bmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICBfUHJlZGljYXRlIF9fcHJlZCkK ICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3Qs IF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMzI5ICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9m aW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAg ICAKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKIHJldHVybiBfX2xhc3Q7CiAg ICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAh PSBfX2xhc3QpIHsKIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICByZXR1cm4gX19maXJzdDsK IF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KIyAz NTggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNh dGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By ZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKIHJl dHVybiBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3 aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAq X19uZXh0KSkKICAgcmV0dXJuIF9fZmlyc3Q7CiBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAg ICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzg3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX1RwPgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAog ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlw ZSBfX24gPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiBp ZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9 CiMgNDExICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4K ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBl CiAgICBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJl ZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBmb3Ig KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiBpZiAoX19wcmVkKCpfX2ZpcnN0KSkK ICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli c3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEK ICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs CiAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7 CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwg X19maXJzdDIgPT0gX19sYXN0MikKIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2FyZEl0 ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09IF9f bGFzdDIpCiByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCgoKICAg ICAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0gX19maXJzdDI7ICsrX19w MTsKCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogICAgICB3aGls ZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xh c3QxLCAqX19maXJzdDIpOwogaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgIHJldHVybiBfX2xh c3QxOwoKIF9fcCA9IF9fcDE7CiBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKIGlmICgrK19fY3VycmVu dCA9PSBfX2xhc3QxKQogICByZXR1cm4gX19sYXN0MTsKCiB3aGlsZSAoKl9fY3VycmVudCA9PSAq X19wKSB7CiAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgIHJldHVybiBfX2ZpcnN0MTsKICAg aWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgcmV0dXJuIF9fbGFzdDE7CiB9CgogKytf X2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwgdHlwZW5h bWUgX0JpbmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVy MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgX0ZvcndhcmRJdGVyMiBfX2Zp cnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUp CiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFz dDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9y d2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1w ID09IF9fbGFzdDIpIHsKIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0 ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICsrX19maXJzdDE7CiByZXR1cm4gX19maXJzdDE7 CiAgICAgIH0KCgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0g X19maXJzdDI7ICsrX19wMTsKCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJz dDE7CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEpIHsKICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkK ICAgICBicmVhazsKICAgKytfX2ZpcnN0MTsKIH0KIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx ICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICsrX19maXJzdDE7CiBp ZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgcmV0dXJuIF9fbGFzdDE7CgogX19wID0gX19wMTsK IF9fY3VycmVudCA9IF9fZmlyc3QxOwogaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpIHJldHVy biBfX2xhc3QxOwoKIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICBp ZiAoKytfX3AgPT0gX19sYXN0MikKICAgICByZXR1cm4gX19maXJzdDE7CiAgIGlmICgrK19fY3Vy cmVudCA9PSBfX2xhc3QxKQogICAgIHJldHVybiBfX2xhc3QxOwogfQoKICsrX19maXJzdDE7CiAg ICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDU5NiAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3 YXJkSXRlcgogICAgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7Cgog ICAgIAogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiByZXR1cm4gX19maXJz dDsKICAgICAgZWxzZSB7CiBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsK IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0g MTsKICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICsrX19pOwogICB3aGlsZSAoX19p ICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAgICAgKytfX2k7CiAg ICAgLS1fX247CiAgIH0KICAgaWYgKF9fbiA9PSAwKQogICAgIHJldHVybiBfX2ZpcnN0OwogICBl bHNlCiAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKIH0KIHJldHVybiBf X2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2NDMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j bHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs IHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jp bmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBf VHAmIF9fdmFsLAogICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAK ICAgICAKCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVs c2Ugewogd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgIGlmIChfX2JpbmFyeV9wcmVkKCpf X2ZpcnN0LCBfX3ZhbCkpCiAgICAgYnJlYWs7CiAgICsrX19maXJzdDsKIH0KIHdoaWxlIChfX2Zp cnN0ICE9IF9fbGFzdCkgewogICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgX0Zvcndh cmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICsrX19pOwogICB3aGlsZSAoX19pICE9IF9fbGFzdCAm JiBfX24gIT0gMCAmJiBfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkgewogICAgICsrX19pOwog ICAgIC0tX19uOwogICB9CiAgIGlmIChfX24gPT0gMCkKICAgICByZXR1cm4gX19maXJzdDsKICAg ZWxzZSB7CiAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAgIGlmIChfX2JpbmFyeV9w cmVkKCpfX2ksIF9fdmFsKSkKICBicmVhazsKICAgICAgICsrX19pOwogICAgIH0KICAgICBfX2Zp cnN0ID0gX19pOwogICB9CiB9CiByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjk3ICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAg IF9Gb3J3YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9G b3J3YXJkSXRlcjEgX19sYXN0MSwKICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAg ICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFz dDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3Qy KTsKICAgICAgcmV0dXJuIF9fZmlyc3QyOwogICAgfQojIDczMiAiL2djYy9kamUvYnVpbGQvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVW5hcnlPcGVyYXRpb24+ CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9u IF9fdW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3Qg IT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAqX19yZXN1bHQgPSBfX3VuYXJ5X29w KCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc2NSAiL2djYy9kamUv YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1 dEl0ZXIsCiAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAg IHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgIF9C aW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgog ICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIs ICsrX19yZXN1bHQpCiAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0 Mik7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3OTYgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2UoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgY29uc3QgX1RwJiBfX29sZF92 YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoK CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKIGlmICgqX19maXJz dCA9PSBfX29sZF92YWx1ZSkKICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4MjUg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVu YW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYg X19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgKl9f Zmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4NTYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst djMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIK ICAgIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3Qg X1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDg4OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p bmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs IHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5 cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs CiAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoK ICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf X2ZpcnN0LCArK19fcmVzdWx0KQogKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3 X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA5MTggIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICB2b2lk CiAgICBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg X0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogKl9fZmlyc3QgPSBfX2dlbigpOwogICAgfQojIDk0 MiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBj LWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg X0dlbmVyYXRvcj4KICAgIF9PdXRwdXRJdGVyCiAgICBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVyIF9f Zmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCgoKCiAgICAg IGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICpfX2ZpcnN0ID0gX19nZW4oKTsK ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgOTY5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVy CiAgICByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAog ICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp CiBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAqX19yZXN1bHQgPSAqX19maXJzdDsK ICAgKytfX3Jlc3VsdDsKIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUg X1ByZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weV9pZihfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf UHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKIGlmICghX19wcmVkKCpfX2ZpcnN0KSkg ewogICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgKytfX3Jlc3VsdDsKIH0KICAgICAgcmV0dXJu IF9fcmVzdWx0OwogICAgfQojIDEwMzkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk ZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoK ICAgICAKICAgICAKCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0 LCBfX3ZhbHVlKTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVy biBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytf X2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAiL2djYy9kamUvYnVp bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgog ICAgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIF9fZmly c3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0ZvcndhcmRJdGVy IF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QK ICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX19wcmVk KTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg X091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAg ICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9f cmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiBpZiAo IShfX3ZhbHVlID09ICpfX2ZpcnN0KSkgewogICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICorK19f cmVzdWx0ID0gX192YWx1ZTsKIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CgoKCgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4K ICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgZm9yd2FyZF9p dGVyYXRvcl90YWcpCiAgICB7CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hp bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmlyc3QpKQog ICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0K IyAxMTQ1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+ CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAg IAogICAgIAoKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf T3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTE3MCAi L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFt ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LAogICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgb3V0cHV0X2l0ZXJh dG9yX3RhZykKICAgIHsKCiAgICAgCgoKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3Vs dCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogaWYgKCFfX2Jp bmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewogICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAg ICorK19fcmVzdWx0ID0gX192YWx1ZTsKIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9 CiMgMTE5OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl ciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlx dWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgX0Zvcndh cmRJdGVyIF9fcmVzdWx0LAogICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAg Zm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCgogICAgICAqX19yZXN1bHQgPSAq X19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiBpZiAoIV9fYmluYXJ5 X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAg IHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDEyMzIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst djMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAg IGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICBfQmluYXJ5UHJlZGlj YXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0 ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAg ICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwKX19yZXN1bHQsIF9fYmlu YXJ5X3ByZWQsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxMjYzICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk YysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogIAogIAoKCiAgIF9fZmlyc3QgPSBhZGph Y2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fZmlyc3QpOwogICAgfQojIDEyOTAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst djMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVu aXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCgog ICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3By ZWQpOwogICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0LCBf X2JpbmFyeV9wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0 aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0 b3JfdGFnKQogICAgewogICB3aGlsZSAodHJ1ZSkKICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qg fHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgIHJldHVybjsKICAgICBlbHNlCiAgICBpdGVyX3N3 YXAoX19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgcmFuZG9tX2FjY2Vzc19p dGVyYXRvcl90YWcpCiAgICB7CiAgIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgIGl0ZXJf c3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKICAgIH0KIyAxMzQ5ICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli c3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJldmVyc2UoX0JpZGlyZWN0 aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogIAoK ICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0 KSk7CiAgICB9CiMgMTM3NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlw ZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcmV2ZXJzZV9jb3B5KF9CaWRp cmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAo X19maXJzdCAhPSBfX2xhc3QpIHsKIC0tX19sYXN0OwogKl9fcmVzdWx0ID0gKl9fbGFzdDsKICsr X19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEzOTkgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0Vs ZW1lbnQKICAgIF9fZ2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5n RWxlbWVudCBfX24pCiAgICB7CiAgICAgIHdoaWxlIChfX24gIT0gMCkgewogX0V1Y2xpZGVhblJp bmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsKIF9fbSA9IF9fbjsKIF9fbiA9IF9fdDsKICAgICAg fQogICAgICByZXR1cm4gX19tOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAg ICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlk ZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKIHJldHVybjsKCiAgICAgIF9Gb3J3YXJkSXRl ciBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICBkbyB7CiBzd2FwKCpfX2ZpcnN0KyssICpfX2Zp cnN0MisrKTsKIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICBfX21pZGRsZSA9IF9fZmlyc3Qy OwogICAgICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOwoKICAgICAgX19maXJzdDIgPSBf X21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpIHsKIHN3YXAoKl9fZmly c3QrKywgKl9fZmlyc3QyKyspOwogaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgIF9fbWlkZGxl ID0gX19maXJzdDI7CiBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgIF9fZmlyc3QyID0g X19taWRkbGU7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m aXJzdCwKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19sYXN0LAogICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7 CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBf X21pZGRsZSkpCiByZXR1cm47CgogICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9f bGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CgogICAgICB3aGlsZSAoX19maXJz dCAhPSBfX21pZGRsZSAmJiBfX21pZGRsZSAhPSBfX2xhc3QpCiBzd2FwICgqX19maXJzdCsrLCAq LS1fX2xhc3QpOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpIHsKIF9fcmV2ZXJzZShf X21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQog ICAgICBlbHNlIHsKIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9p dGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsCiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAg ewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0g X19taWRkbGUpKQogcmV0dXJuOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVl X3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0 OwogICAgICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFu Y2UgX19sID0gX19uIC0gX19rOwoKICAgICAgaWYgKF9fayA9PSBfX2wpIHsKIHN3YXBfcmFuZ2Vz KF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiByZXR1cm47CiAgICAgIH0KCiAgICAgIF9E aXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogICAgICBmb3IgKF9EaXN0YW5jZSBfX2kg PSAwOyBfX2kgPCBfX2Q7IF9faSsrKSB7CiBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7CiBf UmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoKIGlmIChfX2sgPCBfX2wpIHsKICAgZm9y IChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICBpZiAoX19w ID4gX19maXJzdCArIF9fbCkgewogICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgIF9f cCAtPSBfX2w7CiAgICAgfQoKICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgIF9fcCArPSBf X2s7CiAgIH0KIH0KCiBlbHNlIHsKICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19r L19fZCAtIDE7IF9faiArKykgewogICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2spIHsKICAgICAg ICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICBfX3AgKz0gX19rOwogICAgIH0KCiAgICAgKl9f cCA9ICogKF9fcCAtIF9fbCk7CiAgICAgX19wIC09IF9fbDsKICAgfQogfQoKICpfX3AgPSBfX3Rt cDsKICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE1NjEgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAg IAoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6 aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwogICAgICBfX3JvdGF0ZShfX2ZpcnN0LCBfX21p ZGRsZSwgX19sYXN0LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTU4OSAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAg cm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwK ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0 KQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRs ZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwogICAgfQojIDE2MTIgIi9nY2Mv ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgX0Rpc3RhbmNlCiAgICBfX3JhbmRvbV9u dW1iZXIoX0Rpc3RhbmNlIF9fbikKICAgIHsKCiAgICAgIHJldHVybiBscmFuZDQ4KCkgJSBfX247 CgoKCiAgICB9CiMgMTYzNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAg aW5saW5lIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmly c3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0g X19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogaXRlcl9zd2FwKF9faSwgX19maXJz dCArIF9fcmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CiMgMTY2MCAi L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUmFuZG9tTnVtYmVy R2VuZXJhdG9yPgogICAgdm9pZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgIF9SYW5kb21OdW1iZXJHZW5l cmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0 KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7 IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZCgo X19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19w YXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgX1By ZWRpY2F0ZSBfX3ByZWQsCiAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpf X2ZpcnN0KSkKIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAg IF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9 IF9fbGFzdCkKIGlmIChfX3ByZWQoKl9fbmV4dCkpIHsKICAgc3dhcCgqX19maXJzdCwgKl9fbmV4 dCk7CiAgICsrX19maXJzdDsKIH0KCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0 ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgX1ByZWRpY2F0ZSBfX3By ZWQsCiAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlICh0cnVl KSB7CiB3aGlsZSAodHJ1ZSkKICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgIHJldHVybiBf X2ZpcnN0OwogICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICsrX19maXJzdDsKICAg ZWxzZQogICAgIGJyZWFrOwogLS1fX2xhc3Q7CiB3aGlsZSAodHJ1ZSkKICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KQogICAgIHJldHVybiBfX2ZpcnN0OwogICBlbHNlIGlmICghX19wcmVkKCpfX2xh c3QpKQogICAgIC0tX19sYXN0OwogICBlbHNlCiAgICAgYnJlYWs7CiBpdGVyX3N3YXAoX19maXJz dCwgX19sYXN0KTsKICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE3NDggIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0Zvcndh cmRJdGVyCiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAg ICAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9y X2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBf Rm9yd2FyZEl0ZXIKICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs IF9EaXN0YW5jZSBfX2xlbikKICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiByZXR1cm4gX19w cmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p ZGRsZSA9IF9fZmlyc3Q7CiAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAg IF9Gb3J3YXJkSXRlciBfX2JlZ2luID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJz dCwgX19taWRkbGUsCiAgICAgICBfX3ByZWQsCiAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9y d2FyZEl0ZXIgX19lbmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19s YXN0LAogICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKTsK ICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgIGFkdmFuY2UoX19i ZWdpbiwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAgcmV0dXJuIF9fYmVn aW47CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfUG9pbnRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4K ICAgIF9Gb3J3YXJkSXRlcgogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgX1ByZWRpY2F0ZSBfX3ByZWQs IF9EaXN0YW5jZSBfX2xlbiwKICAgIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgX0Rpc3RhbmNlIF9f YnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiBf Rm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9f YnVmZmVyOwogZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgaWYgKF9f cHJlZCgqX19maXJzdCkpIHsKICAgICAqX19yZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgKytfX3Jl c3VsdDE7CiAgIH0KICAgZWxzZSB7CiAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICsr X19yZXN1bHQyOwogICB9CiBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiBy ZXR1cm4gX19yZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2UgewogX0ZvcndhcmRJdGVyIF9fbWlk ZGxlID0gX19maXJzdDsKIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiBfRm9yd2FyZEl0 ZXIgX19iZWdpbiA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs ZSwKICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgIF9fbGVuIC8gMiwKICAgICAgICAgIF9fYnVm ZmVyLCBfX2J1ZmZlcl9zaXplKTsKIF9Gb3J3YXJkSXRlciBfX2VuZCA9IF9fc3RhYmxlX3BhcnRp dGlvbl9hZGFwdGl2ZSggX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgX19wcmVkLAogICAgICAg ICBfX2xlbiAtIF9fbGVuIC8gMiwKICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwog cm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiBhZHZhbmNlKF9fYmVnaW4sIHN0ZDo6 ZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7CiByZXR1cm4gX19iZWdpbjsKICAgICAgfQogICAg fQojIDE4NDggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNh dGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAg IHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogcmV0dXJuIF9f Zmlyc3Q7CiAgICAgIGVsc2UKICAgICAgewogdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5j ZVR5cGU7CgogX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVmFsdWVUeXBlPiBfX2J1 ZihfX2ZpcnN0LCBfX2xhc3QpOwogaWYgKF9fYnVmLnNpemUoKSA+IDApCiAgIHJldHVybiBfX3N0 YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAg ICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAgICAgICAgX19idWYu YmVnaW4oKSwgX19idWYuc2l6ZSgpKTsKIGVsc2UKICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVf cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICBfRGlzdGFuY2VUeXBl KF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNj ZXNzSXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICBfVHAgX19waXZvdCkKICAgIHsKICAg ICAgd2hpbGUgKHRydWUpIHsKIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICsrX19maXJz dDsKIC0tX19sYXN0Owogd2hpbGUgKF9fcGl2b3QgPCAqX19sYXN0KQogICAtLV9fbGFzdDsKIGlm ICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICByZXR1cm4gX19maXJzdDsKIGl0ZXJfc3dhcChfX2Zp cnN0LCBfX2xhc3QpOwogKytfX2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICBfVHAg X19waXZvdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogd2hp bGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCiAgICsrX19maXJzdDsKIC0tX19sYXN0Owog d2hpbGUgKF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKICAgLS1fX2xhc3Q7CiBpZiAoIShfX2Zp cnN0IDwgX19sYXN0KSkKICAgcmV0dXJuIF9fZmlyc3Q7CiBpdGVyX3N3YXAoX19maXJzdCwgX19s YXN0KTsKICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE5MjkgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICBlbnVtIHsgX01fdGhyZXNob2xk ID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw ZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fdmFsIDwg Kl9fbmV4dCkgewogKl9fbGFzdCA9ICpfX25leHQ7CiBfX2xhc3QgPSBfX25leHQ7CiAtLV9fbmV4 dDsKICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwgX1RwIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxl IChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAqX19sYXN0ID0gKl9fbmV4dDsKIF9fbGFzdCA9 IF9fbmV4dDsKIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0K CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf X2xhc3Q7ICsrX19pKQogICAgICB7CiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9faTsKIGlmIChfX3ZhbCA8ICpfX2ZpcnN0 KSB7CiAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgKl9fZmlyc3Qg PSBfX3ZhbDsKIH0KIGVsc2UKICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9fdmFs KTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9uX3NvcnQoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVy bjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAh PSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9faTsKIGlmIChfX2NvbXAoX192YWws ICpfX2ZpcnN0KSkgewogICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAg ICpfX2ZpcnN0ID0gX192YWw7CiB9CiBlbHNlCiAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo X19pLCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2lu c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5k b21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogX191bmd1 YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwogICAgfQoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICBfQ29t cGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChf UmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKIF9f dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwog ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9p ZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0 ID4gX01fdGhyZXNob2xkKSB7CiBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBf TV90aHJlc2hvbGQpOwogX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3Ro cmVzaG9sZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlCiBfX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRp b25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QsCiAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly c3QgPiBfTV90aHJlc2hvbGQpIHsKIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCAr IF9NX3RocmVzaG9sZCwgX19jb21wKTsKIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmly c3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCwgX19jb21wKTsKICAgICAgfQogICAgICBlbHNlCiBf X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBf X24pCiAgICB7CiAgICAgIF9TaXplIF9fazsKICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsg X19uID4+PSAxKSArK19fazsKICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+CiAgICB2b2lkCiAg ICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwKICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQpCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVf dHlwZSBfVmFsdWVUeXBlOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJl c2hvbGQpIHsKIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgcGFydGlhbF9zb3J0KF9fZmly c3QsIF9fbGFzdCwgX19sYXN0KTsKICAgcmV0dXJuOwogfQogLS1fX2RlcHRoX2xpbWl0OwogX1Jh bmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwg X19sYXN0LAogICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICooX19m aXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7 CiBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQpOwogX19sYXN0 ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog ICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsCiAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29tcGFyZSBfX2Nv bXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgd2hpbGUgKF9fbGFzdCAt IF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAg cGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICByZXR1cm47 CiB9CiAtLV9fZGVwdGhfbGltaXQ7CiBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgIF9fdW5n dWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICBfVmFsdWVUeXBlKF9fbWVkaWFu KCpfX2ZpcnN0LAogICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAog ICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21wKSksCiAgICBfX2NvbXApOwogX19pbnRyb3Nv cnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogX19sYXN0ID0g X19jdXQ7CiAgICAgIH0KICAgIH0KIyAyMTY2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0 LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl OwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiBfX2ludHJv c29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwog X19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICB9CiAgICB9CiMg MjE5NyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dl cnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFy ZT4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5 cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFz dCkgewogX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19m aXJzdCkgKiAyLCBfX2NvbXApOwogX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAg ICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fbGFzdCk7CiByZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk bGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0 YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0 KF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgIF9f bGFzdCAtIF9fbWlkZGxlKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3Rh YmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LAogICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly c3QgPCAxNSkgewogX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiBy ZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0 ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19t aWRkbGUsIF9fbGFzdCwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2Zp cnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAg ICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwK ICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9S YW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplKQog ICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgICAg IHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKIF9fcmVzdWx0ID0gbWVy Z2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgX19maXJzdCArIF9fc3RlcF9z aXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgIF9fcmVzdWx0KTsKIF9fZmlyc3QgKz0gX190 d29fc3RlcDsKICAgICAgfQoKICAgICAgX19zdGVwX3NpemUgPSBzdGQ6Om1pbihfRGlzdGFuY2Uo X19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICAgICAgbWVyZ2UoX19maXJzdCwgX19m aXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICBf X3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwg dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nl c3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgIF9D b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19z dGVwX3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7 CiBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgIF9f Zmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICBfX3Jlc3VsdCwK ICAgIF9fY29tcCk7CiBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KICAgICAgX19zdGVw X3NpemUgPSBzdGQ6Om1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXpl KTsKCiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICBfX2Zp cnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICBfX3Jlc3VsdCwKICAgICBfX2NvbXApOwog ICAgfQoKICBlbnVtIHsgX01fY2h1bmtfc2l6ZSA9IDcgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fY2h1 bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LAogICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQogICAgewogICAgICB3 aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKIF9faW5zZXJ0aW9uX3Nv cnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CiBfX2ZpcnN0ICs9IF9fY2h1bmtf c2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlz dGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25f c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiBfX2luc2VydGlv bl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiBfX2ZpcnN0 ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fbGFzdCwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhf YnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcikKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19s YXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsg X19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAg ICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoK ICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKIF9fbWVyZ2Vfc29ydF9sb29wKF9f Zmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKIF9fc3RlcF9zaXplICo9IDI7 CiBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19z dGVwX3NpemUpOwogX19zdGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46 OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19sZW4gPSBfX2xh c3QgLSBfX2ZpcnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBf X2xlbjsKCiAgICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3NpemU7CiAgICAg IF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19j b21wKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiBfX21lcmdlX3NvcnRf bG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKIF9f c3RlcF9zaXplICo9IDI7CiBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFz dCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiBfX3N0ZXBfc2l6ZSAqPSAyOwogICAg ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt ZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19zdGFibGVfc29y dF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlz dGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFz dCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0g X19maXJzdCArIF9fbGVuOwogICAgICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiBfX3N0 YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf c2l6ZSk7CiBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVy LCBfX2J1ZmZlcl9zaXplKTsKICAgICAgfQogICAgICBlbHNlIHsKIF9fbWVyZ2Vfc29ydF93aXRo X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogX19tZXJnZV9zb3J0X3dpdGhf YnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgfQogICAgICBfX21lcmdl X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAt IF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21p ZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFu Y2UsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9z b3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9E aXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0 ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBf X2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogX19zdGFibGVfc29ydF9h ZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogX19zdGFibGVfc29ydF9hZGFwdGl2 ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiBfX21lcmdl X3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXApOwog X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2Nv bXApOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9f bGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUs CiAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNDMwICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgc3RhYmxlX3NvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlw ZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJ dGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdp bigpID09IDApCiBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAg ZWxzZQogX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigp LCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2ICIvZ2NjL2RqZS9idWls ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQK ICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAg ICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9f Zmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogX19pbnBsYWNlX3N0 YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQogX19zdGFibGVf c29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBl KGJ1Zi5zaXplKCkpLAogICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNTAyICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoK ICAgICAKCiAgICAgCgogICAgICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICBm b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19p KQogaWYgKCpfX2kgPCAqX19maXJzdCkKICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwg X19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxl KTsKICAgIH0KIyAyNTQwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu YW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsCiAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsCiAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2NvbXApOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBf X2kgPCBfX2xhc3Q7ICsrX19pKQogaWYgKF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgIF9fcG9w X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1ZhbHVlVHlwZSgqX19pKSwgX19jb21wKTsK ICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgfQojIDI1Nzkg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4K ICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVz dWx0X2ZpcnN0LAogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1 ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAK CiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1 bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19y ZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3Jl YWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmly c3Q7CiArK19fcmVzdWx0X3JlYWxfbGFzdDsKICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtl X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHdoaWxlIChf X2ZpcnN0ICE9IF9fbGFzdCkgewogaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQogICBf X2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICBfRGlzdGFu Y2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgX0lucHV0VmFs dWVUeXBlKCpfX2ZpcnN0KSk7CiArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgc29ydF9oZWFwKF9f cmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICByZXR1cm4gX19yZXN1bHRf cmVhbF9sYXN0OwogICAgfQojIDI2MzMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk ZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNj ZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgIF9Db21wYXJlIF9f Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZh bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj Y2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAog ICAgIAogICAgIAoKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSBy ZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVh bF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYm IF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAqX19yZXN1bHRfcmVhbF9s YXN0ID0gKl9fZmlyc3Q7CiArK19fcmVzdWx0X3JlYWxfbGFzdDsKICsrX19maXJzdDsKICAgICAg fQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19j b21wKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiBpZiAoX19jb21wKCpfX2Zp cnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBf RGlzdGFuY2VUeXBlKDApLAogICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9f cmVzdWx0X2ZpcnN0KSwKICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSwKICAgX19jb21wKTsK ICsrX19maXJzdDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVz dWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsK ICAgIH0KIyAyNjg2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lk CiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogIF9SYW5kb21BY2Nl c3NJdGVyIF9fbnRoLAogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90 eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp cnN0ID4gMykgewogX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICBfX3VuZ3VhcmRlZF9wYXJ0 aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwK ICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICoo X19sYXN0IC0gMSkpKSk7CiBpZiAoX19jdXQgPD0gX19udGgpCiAgIF9fZmlyc3QgPSBfX2N1dDsK IGVsc2UKICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChf X2ZpcnN0LCBfX2xhc3QpOwogICAgfQojIDI3MjggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv aW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1 ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0g X19maXJzdCA+IDMpIHsKIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgX191bmd1YXJkZWRf cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmly c3QsCiAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAg ICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgX19jb21wKSksCiAgICBfX2NvbXApOwogaWYgKF9f Y3V0IDw9IF9fbnRoKQogICBfX2ZpcnN0ID0gX19jdXQ7CiBlbHNlCiAgIF9fbGFzdCA9IF9fY3V0 OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp OwogICAgfQojIDI3NjggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U cD4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1Zh bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCgoKCiAgICAgCiAgICAgCiAg ICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBf X2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9f bWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogX19oYWxmID0gX19sZW4gPj4gMTsK IF9fbWlkZGxlID0gX19maXJzdDsKIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiBpZiAoKl9f bWlkZGxlIDwgX192YWwpIHsKICAgX19maXJzdCA9IF9fbWlkZGxlOwogICArK19fZmlyc3Q7CiAg IF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogfQogZWxzZQogICBfX2xlbiA9IF9faGFsZjsK ICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODE2ICIvZ2NjL2RqZS9idWls ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0Zv cndhcmRJdGVyCiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl X3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAg ICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9f bGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19t aWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiBfX2hhbGYgPSBfX2xlbiA+PiAxOwog X19taWRkbGUgPSBfX2ZpcnN0OwogYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKIGlmIChfX2Nv bXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgX19maXJzdCA9IF9fbWlkZGxlOwogICArK19fZmly c3Q7CiAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogfQogZWxzZQogICBfX2xlbiA9IF9f aGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODU2ICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAg IHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBj b25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf RGlzdGFuY2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBf X2xlbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlw ZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xl biA+IDApIHsKIF9faGFsZiA9IF9fbGVuID4+IDE7CiBfX21pZGRsZSA9IF9fZmlyc3Q7CiBhZHZh bmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICBfX2xlbiA9 IF9faGFsZjsKIGVsc2UgewogICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICsrX19maXJzdDsKICAg X19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmly c3Q7CiAgICB9CiMgMjkwMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg X1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgY29uc3QgX1RwJiBf X3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2Vf dHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9f bGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBl IF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVu ID4gMCkgewogX19oYWxmID0gX19sZW4gPj4gMTsKIF9fbWlkZGxlID0gX19maXJzdDsKIGFkdmFu Y2UoX19taWRkbGUsIF9faGFsZik7CiBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICBf X2xlbiA9IF9faGFsZjsKIGVsc2UgewogICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICsrX19maXJz dDsKICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiB9CiAgICAgIH0KICAgICAgcmV0dXJu IF9fZmlyc3Q7CiAgICB9CiMgMjk0OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1RwPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVxdWFs X3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf VHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFu Y2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9 IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hh bGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAg d2hpbGUgKF9fbGVuID4gMCkgewogX19oYWxmID0gX19sZW4gPj4gMTsKIF9fbWlkZGxlID0gX19m aXJzdDsKIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiBpZiAoKl9fbWlkZGxlIDwgX192YWwp IHsKICAgX19maXJzdCA9IF9fbWlkZGxlOwogICArK19fZmlyc3Q7CiAgIF9fbGVuID0gX19sZW4g LSBfX2hhbGYgLSAxOwogfQogZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgIF9fbGVuID0g X19oYWxmOwogZWxzZSB7CiAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxl LCBfX3ZhbCk7CiAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICBfX3JpZ2h0ID0gdXBwZXJf Ym91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOwogICByZXR1cm4gcGFpcjxfRm9yd2Fy ZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKIH0KICAgICAgfQogICAgICBy ZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7 CiAgICB9CiMgMzAwMyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Rw LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+ CiAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwgY29uc3QgX1RwJiBfX3ZhbCwKICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1Zh bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAK CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFz dCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRk bGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKIF9faGFsZiA9 IF9fbGVuID4+IDE7CiBfX21pZGRsZSA9IF9fZmlyc3Q7CiBhZHZhbmNlKF9fbWlkZGxlLCBfX2hh bGYpOwogaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICBfX2ZpcnN0ID0gX19taWRk bGU7CiAgICsrX19maXJzdDsKICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiB9CiBlbHNl IGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgIF9fbGVuID0gX19oYWxmOwogZWxzZSB7 CiAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21w KTsKICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgr K19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAgcmV0dXJuIHBhaXI8X0Zvcndh cmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiB9CiAgICAgIH0KICAgICAg cmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3Qp OwogICAgfQojIDMwNTIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U cD4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7 CgoKICAgICAKICAgICAKCiAgICAgCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91 bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYm ICEoX192YWwgPCAqX19pKTsKICAgIH0KIyAzMDgzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgYmluYXJ5 X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg ICAKICAgICAKCiAgICAgCgoKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9f Zmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0 ICYmICFfX2NvbXAoX192YWwsICpfX2kpOwogICAgfQojIDMxMTUgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog ICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy MSBfX2xhc3QxLAogICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK ICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAK CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9 IF9fbGFzdDIpIHsKIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QyOwogICArK19fZmlyc3QyOwogfQogZWxzZSB7CiAgICpfX3Jlc3VsdCA9ICpfX2Zp cnN0MTsKICAgKytfX2ZpcnN0MTsKIH0KICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJu IGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0 KSk7CiAgICB9CiMgMzE2NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBf SW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl cjEgX19sYXN0MSwKICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs CiAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAog ICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f Zmlyc3QxKSkgewogICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICsrX19maXJzdDI7CiB9CiBl bHNlIHsKICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICArK19fZmlyc3QxOwogfQogKytfX3Jl c3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShf X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAg IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bGFzdCwKICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAg ICAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogcmV0dXJuOwogICAgICBpZiAoX19s ZW4xICsgX19sZW4yID09IDIpIHsKIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkKICAgICAgIGl0 ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7 CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikg ewogX19sZW4xMSA9IF9fbGVuMSAvIDI7CiBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsK IF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1 dCk7CiBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAg ICAgfQogICAgICBlbHNlIHsKIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogYWR2YW5jZShfX3NlY29u ZF9jdXQsIF9fbGVuMjIpOwogX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21p ZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiBfX2xlbjExID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBf X2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwg X19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9f Zmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgc3RkOjpkaXN0YW5jZShfX21p ZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz dCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsK ICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwg X19sYXN0LAogICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAg fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUg X0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91 dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fbGFzdCwKICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAg ICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4y ID09IDApCiByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogaWYgKF9f Y29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21p ZGRsZSk7CiByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Rf Y3V0ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9f bWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xl bjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogX19sZW4xMSA9IF9fbGVuMSAv IDI7CiBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKIF9fc2Vjb25kX2N1dCA9IGxvd2Vy X2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKIF9fbGVuMjIg PSBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVs c2UgewogX19sZW4yMiA9IF9fbGVuMiAvIDI7CiBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4y Mik7CiBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNv bmRfY3V0LCBfX2NvbXApOwogX19sZW4xMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19maXJz dF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vj b25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0 X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRkbGUsIHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUs IF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9f Zmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgX19sZW4xMSwgX19sZW4yMiwgX19jb21w KTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1 dCwgX19sYXN0LAogICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9f Y29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy MSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4K ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlv bmFsSXRlcjEgX19maXJzdCwKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxlLAog ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgIF9EaXN0YW5jZSBfX2xl bjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZl ciwKICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19s ZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9f bGFzdCwgX19idWZmZXIpOwogY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0 KTsKIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogICAgICB9 CiAgICAgIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiBfX2J1ZmZlcl9lbmQg PSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiBjb3B5KF9fbWlkZGxlLCBfX2xh c3QsIF9fZmlyc3QpOwogcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVmZmVyX2Vu ZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlIHsKIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRs ZSwgX19sYXN0KTsKIGFkdmFuY2UoX19maXJzdCwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19s YXN0KSk7CiByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIs CiAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzPgogICAgX0JpZGlyZWN0aW9uYWxJdGVy MwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlk aXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmly c3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIzIF9fcmVzdWx0KQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKIHJldHVy biBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChf X2ZpcnN0MiA9PSBfX2xhc3QyKQogcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFz dDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdo aWxlICh0cnVlKSB7CiBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAqLS1fX3Jlc3VsdCA9 ICpfX2xhc3QxOwogICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICByZXR1cm4gY29weV9i YWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgIC0tX19sYXN0MTsKIH0K IGVsc2UgewogICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICBpZiAoX19maXJzdDIgPT0gX19s YXN0MikKICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jl c3VsdCk7CiAgIC0tX19sYXN0MjsKIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIs CiAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJ dGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiByZXR1cm4gY29weV9iYWNrd2Fy ZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19s YXN0MikKIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7 CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAodHJ1ZSkgewog aWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICotLV9fcmVzdWx0ID0gKl9fbGFz dDE7CiAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgIHJldHVybiBjb3B5X2JhY2t3YXJk KF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgLS1fX2xhc3QxOwogfQogZWxzZSB7 CiAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQog ICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsK ICAgLS1fX2xhc3QyOwogfQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVy PgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9E aXN0YW5jZSBfX2xlbjIsCiAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVm ZmVyX3NpemUpCiAgICB7CiAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1 ZmZlcl9zaXplKSB7CiAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBf X21pZGRsZSwgX19idWZmZXIpOwogICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9f bWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICB9CiAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1 ZmZlcl9zaXplKSB7CiAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwg X19sYXN0LCBfX2J1ZmZlcik7CiAgICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRs ZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgfQogICBlbHNlIHsKICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICBfRGlzdGFuY2UgX19sZW4xMSA9 IDA7CiAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgIGlmIChfX2xlbjEgPiBfX2xlbjIp IHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19s ZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAq X19maXJzdF9jdXQpOwogICAgX19sZW4yMiA9IHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vj b25kX2N1dCk7CiAgICAgfQogICAgIGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAg ICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVy X2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgIF9fbGVuMTEgPSBz dGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICB9CiAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1 dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xl bjIyLCBfX2J1ZmZlciwKICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICBfX21lcmdlX2FkYXB0 aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAg X19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgIF9fbWVyZ2VfYWRhcHRpdmUo X19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAg ICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgIH0KICAg IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1l IF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXIsCiAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFu Y2UgX19sZW4yLAogICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9z aXplLAogICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICBpZiAoX19sZW4xIDw9IF9fbGVu MiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgIF9Qb2ludGVyIF9fYnVmZmVyX2Vu ZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICBtZXJnZShfX2J1ZmZl ciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogICB9 CiAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgX1BvaW50ZXIgX19i dWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgX19tZXJn ZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19s YXN0LAogICAgICAgICAgX19jb21wKTsKICAgfQogICBlbHNlIHsKICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Nl Y29uZF9jdXQgPSBfX21pZGRsZTsKICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgX0Rp c3RhbmNlIF9fbGVuMjIgPSAwOwogICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVu MTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBf X3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQs IF9fY29tcCk7CiAgICBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRf Y3V0KTsKICAgICB9CiAgICAgZWxzZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFk dmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91 bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICBfX2xlbjEx ID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgfQogICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJz dF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgX19sZW4xIC0gX19sZW4xMSwg X19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgX19idWZmZXJfc2l6ZSk7CiAgICAgX19tZXJnZV9h ZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAg ICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgIF9fbWVy Z2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0g X19sZW4xMSwKICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6 ZSwgX19jb21wKTsKICAgfQogICAgfQojIDM1MDggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv aW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp b25hbEl0ZXI+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBf X2ZpcnN0LAogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVy Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAg IAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQog cmV0dXJuOwoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBzdGQ6OmRpc3RhbmNlKF9fZmly c3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBzdGQ6OmRpc3RhbmNl KF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9u YWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19i dWYuYmVnaW4oKSA9PSAwKQogX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRs ZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7CiAgICAgIGVsc2UKIF9fbWVyZ2VfYWRhcHRpdmUo X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICBfX2J1Zi5iZWdp bigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog ICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX21pZGRsZSwKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICBf Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRl cj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAg ICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3Qp CiByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IHN0ZDo6ZGlzdGFuY2UoX19m aXJzdCwgX19taWRkbGUpOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IHN0ZDo6ZGlzdGFu Y2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rp b25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChf X2J1Zi5iZWdpbigpID09IDApCiBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogICAgICBlbHNlCiBfX21lcmdl X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAg X19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAogICAgX19jb21wKTsK ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lu cHV0SXRlcjI+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu cHV0SXRlcjEgX19sYXN0MSwKICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy IF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUg KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKIGlmICgqX19maXJz dDIgPCAqX19maXJzdDEpCiAgIHJldHVybiBmYWxzZTsKIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9f Zmlyc3QyKQogICArK19fZmlyc3QxOwogZWxzZQogICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoK ICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs IF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgoKICAg ICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKIGlm IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICByZXR1cm4gZmFsc2U7CiBlbHNlIGlm KF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICsrX19maXJzdDE7CiBlbHNlCiAgICsr X19maXJzdDEsICsrX19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0 ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfdW5pb24o X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICBfSW5wdXRJ dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3 aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiBpZiAo Kl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgKytf X2ZpcnN0MTsKIH0KIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAqX19yZXN1 bHQgPSAqX19maXJzdDI7CiAgICsrX19maXJzdDI7CiB9CiBlbHNlIHsKICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QxOwogICArK19fZmlyc3QxOwogICArK19fZmlyc3QyOwogfQogKytfX3Jlc3VsdDsK ICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0 MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgIHR5 cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVy MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9D b21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoK CiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp IHsKIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0MTsKICAgKytfX2ZpcnN0MTsKIH0KIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpf X2ZpcnN0MSkpIHsKICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICArK19fZmlyc3QyOwogfQog ZWxzZSB7CiAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgKytfX2ZpcnN0MTsKICAgKytfX2Zp cnN0MjsKIH0KICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIs IF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h bWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5w dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiBpZiAoKl9fZmly c3QxIDwgKl9fZmlyc3QyKQogICArK19fZmlyc3QxOwogZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9f Zmlyc3QxKQogICArK19fZmlyc3QyOwogZWxzZSB7CiAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK ICAgKytfX2ZpcnN0MTsKICAgKytfX2ZpcnN0MjsKICAgKytfX3Jlc3VsdDsKIH0KICAgICAgcmV0 dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw ZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21w YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiBp ZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgKytfX2ZpcnN0MTsKIGVsc2UgaWYg KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICsrX19maXJzdDI7CiBlbHNlIHsKICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICArK19fZmlyc3QxOwogICArK19fZmlyc3QyOwogICAr K19fcmVzdWx0OwogfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1 dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19m aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAg IAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3Qy KSB7CiAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgKytfX2ZpcnN0MTsKICAgKytfX3Jlc3Vs dDsKIH0KIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgKytfX2ZpcnN0MjsKIGVs c2UgewogICArK19fZmlyc3QxOwogICArK19fZmlyc3QyOwogfQogICAgICByZXR1cm4gY29weShf X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAog ICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2Uo X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgX0lucHV0SXRl cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAg ICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f bGFzdDIpCiBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAqX19yZXN1bHQg PSAqX19maXJzdDE7CiAgICsrX19maXJzdDE7CiAgICsrX19yZXN1bHQ7CiB9CiBlbHNlIGlmIChf X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICArK19fZmlyc3QyOwogZWxzZSB7CiAgICsr X19maXJzdDE7CiAgICsrX19maXJzdDI7CiB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx LCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0 SXRlcgogICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ dGVyMiBfX2xhc3QyLAogICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAK ICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikg ewogICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICsrX19maXJzdDE7CiAgICsrX19yZXN1bHQ7 CiB9CiBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3QyOwogICArK19fZmlyc3QyOwogICArK19fcmVzdWx0OwogfQogZWxzZSB7CiAgICsrX19m aXJzdDE7CiAgICsrX19maXJzdDI7CiB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xh c3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9P dXRwdXRJdGVyLAogICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0 X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy LAogICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChf X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiBpZiAoX19jb21wKCpf X2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICsrX19m aXJzdDE7CiAgICsrX19yZXN1bHQ7CiB9CiBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m aXJzdDEpKSB7CiAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgKytfX2ZpcnN0MjsKICAgKytf X3Jlc3VsdDsKIH0KIGVsc2UgewogICArK19fZmlyc3QxOwogICArK19fZmlyc3QyOwogfQogICAg ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg X19yZXN1bHQpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog ICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0g X19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiBpZiAoKl9fcmVzdWx0 IDwgKl9fZmlyc3QpCiAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0 OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Db21w YXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAog ICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAg ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0 ICE9IF9fbGFzdCkKIGlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0g X19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgog ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2Fy ZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz dCkKIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAg ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9G b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogIF9Db21wYXJlIF9fY29t cCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAg IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVz dWx0KSkKICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9 CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAg IG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlv bmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09 IF9fbGFzdCkKIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9f Zmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKIHJldHVybiBmYWxz ZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogX0Jp ZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAtLV9faTsKIGlmICgqX19pIDwgKl9faWkpIHsK ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgd2hpbGUgKCEoKl9faSA8ICot LV9faikpCiAgICAge30KICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgcmV2ZXJzZShfX2lpLCBf X2xhc3QpOwogICByZXR1cm4gdHJ1ZTsKIH0KIGlmIChfX2kgPT0gX19maXJzdCkgewogICByZXZl cnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgIHJldHVybiBmYWxzZTsKIH0KICAgICAgfQogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJl PgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz dCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAg IHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKIHJldHVybiBm YWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19p OwogICAgICBpZiAoX19pID09IF9fbGFzdCkKIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19s YXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogX0JpZGlyZWN0aW9uYWxJdGVyIF9f aWkgPSBfX2k7CiAtLV9faTsKIGlmIChfX2NvbXAoKl9faSwgKl9faWkpKSB7CiAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgIHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikp CiAgICAge30KICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgcmV2ZXJzZShfX2lpLCBfX2xhc3Qp OwogICByZXR1cm4gdHJ1ZTsKIH0KIGlmIChfX2kgPT0gX19maXJzdCkgewogICByZXZlcnNlKF9f Zmlyc3QsIF9fbGFzdCk7CiAgIHJldHVybiBmYWxzZTsKIH0KICAgICAgfQogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBwcmV2X3Blcm11 dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19s YXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiBy ZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAg ICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiByZXR1cm4gZmFsc2U7CiAgICAgIF9f aSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKIF9CaWRpcmVjdGlvbmFs SXRlciBfX2lpID0gX19pOwogLS1fX2k7CiBpZiAoKl9faWkgPCAqX19pKSB7CiAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgIHdoaWxlICghKCotLV9faiA8ICpfX2kpKQogICAg IHt9CiAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg cmV0dXJuIHRydWU7CiB9CiBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgcmV2ZXJzZShfX2ZpcnN0 LCBfX2xhc3QpOwogICByZXR1cm4gZmFsc2U7CiB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wK ICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVj dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAog ICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiByZXR1cm4gZmFsc2U7CiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYg KF9faSA9PSBfX2xhc3QpCiByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAg LS1fX2k7CgogICAgICBmb3IoOzspIHsKIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwog LS1fX2k7CiBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19qID0gX19sYXN0OwogICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQogICAgIHt9CiAg IGl0ZXJfc3dhcChfX2ksIF9faik7CiAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgcmV0dXJu IHRydWU7CiB9CiBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xh c3QpOwogICByZXR1cm4gZmFsc2U7CiB9CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfSW5wdXRJdGVyCiAg ICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwK ICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr X19maXJzdDEpCiBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9 IF9fbGFzdDI7ICsrX19pdGVyKQogICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCiAgICAgcmV0 dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5 UHJlZGljYXRlPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9f Zmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9G b3J3YXJkSXRlciBfX2xhc3QyLAogICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19s YXN0MTsgKytfX2ZpcnN0MSkKIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBf X2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19p dGVyKSkKICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoj IDQyMDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmly c3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0 MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBm b3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIp CiByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0g X19sYXN0MTsKIHdoaWxlICgxKSB7CiAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAg PSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgaWYgKF9f bmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgIHJldHVybiBfX3Jlc3VsdDsKICAgZWxzZSB7CiAg ICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7 CiAgICAgKytfX2ZpcnN0MTsKICAgfQogfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICB0eXBlbmFtZSBf QmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2Fy ZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgX0ZvcndhcmRJ dGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgIGZvcndhcmRfaXRl cmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICBfQmluYXJ5UHJlZGljYXRl IF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiByZXR1cm4gX19s YXN0MTsKICAgICAgZWxzZSB7CiBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKIHdo aWxlICgxKSB7CiAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgPSBzZWFyY2goX19m aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICBpZiAoX19uZXdf cmVzdWx0ID09IF9fbGFzdDEpCiAgICAgcmV0dXJuIF9fcmVzdWx0OwogICBlbHNlIHsKICAgICBf X3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAg ICArK19fZmlyc3QxOwogICB9CiB9CiAgICAgIH0KICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBf QmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19m aXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAg ewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rp b25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlk aXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEoX19m aXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2SXRl cjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAg ICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0g X19ybGFzdDEpCiByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiBfQmlkaXJlY3Rpb25hbEl0 ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKIGFkdmFuY2UoX19yZXN1bHQsIC1zdGQ6 OmRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0K ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBf QmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19m aXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLAogICAg ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5 cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAg ICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRl cjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogICAgICBfUmV2SXRlcjIg X19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9S ZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9f cmxhc3QyLAogICAgICAgX19jb21wKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEp CiByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVz dWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKIGFkdmFuY2UoX19yZXN1bHQsIC1zdGQ6OmRpc3RhbmNl KF9fZmlyc3QyLCBfX2xhc3QyKSk7CiByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIy PgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19m aXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0 MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAg ICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3Qy LAogICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgX19pdGVyYXRvcl9jYXRlZ29y eShfX2ZpcnN0MikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0 eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAg IGlubGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3Qx LCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9G b3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7 CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwg X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz dDEpLAogICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgX19jb21wKTsKICAgIH0K Cn0KIyA3MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2FsZ29yaXRobSIgMiAz CiMgNTcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJpbmciIDIgMwojIDEg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2ljX3N0cmluZy50Y2Mi IDEgMwojIDQ1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19z dHJpbmcudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU19tYXhfc2l6ZSA9 ICgoKG5wb3MgLSBzaXplb2YoX1JlcCkpL3NpemVvZihfQ2hhclQpKSAtIDEpIC8gNDsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBjb25zdCBfQ2hhclQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OgogICAgX1JlcDo6X1NfdGVybWluYWwgPSBfQ2hhclQoKTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0 eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUK ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Om5wb3M7CgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXpl X3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9TX2VtcHR5 X3JlcF9zdG9yYWdlWwogICAgKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9m KHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVn LCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICBpbnB1dF9pdGVyYXRvcl90 YWcpCiAgICAgIHsKIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgIHJl dHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogX0NoYXJUIF9fYnVmWzEwMF07CiBz aXplX3R5cGUgX19pID0gMDsKIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2Yo X19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgIHsKICAgICBfX2J1ZltfX2krK10gPSAqX19iZWc7 CiAgICAgKytfX2JlZzsKICAgfQogX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwgX19h KTsKIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKIF9f ci0+X01fbGVuZ3RoID0gX19pOwogdHJ5CiAgIHsKCgoKICAgICBmb3IgKDs7KQogICAgICAgewog IF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICBfQ2hh clQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICBmb3Ig KDs7KQogICAgewogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgewogICBfX3ItPl9N X2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAqX19wID0gX1JlcDo6X1NfdGVy bWluYWw7CiAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICB9CiAgICAgIGlmIChf X3AgPT0gX19sYXN0KQogICAgICAgIGJyZWFrOwogICAgICAqX19wKysgPSAqX19iZWc7CiAgICAg ICsrX19iZWc7CiAgICB9CgogIHNpemVfdHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0 YSgpOwogIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7 CiAgdHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVyLT5fTV9yZWZkYXRhKCksCiAgICAgIF9fci0+ X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgX19yID0gX19h bm90aGVyOwogIF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAgICAgICB9CiAgIH0KIGNhdGNoKC4u LikKICAgewogICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgIHRocm93OwogICB9CiByZXR1 cm4gMDsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVyPgogICAgICBf Q2hhclQqCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg ICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9j JiBfX2EsCiAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICAgIHsKIGlmIChfX2JlZyA9PSBf X2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZj b3B5KCk7CgoKIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fYmVnID09IF9Jbkl0ZXIoKSwgMCkpCiAg IF9fdGhyb3dfbG9naWNfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY29uc3RydWN0IE5VTEwgbm90 IHZhbGlkIik7Cgogc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3Rk OjpkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCgogX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRl KF9fZG5ldywgX19hKTsKIHRyeQogICB7IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCks IF9fYmVnLCBfX2VuZCk7IH0KIGNhdGNoKC4uLikKICAgewogICAgIF9fci0+X01fZGVzdHJveShf X2EpOwogICAgIHRocm93OwogICB9CiBfX3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsKCiBfX3ItPl9N X3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7CiByZXR1cm4gX19yLT5fTV9y ZWZkYXRhKCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19uLCBf Q2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIHsKICAgICAgaWYgKF9fbiA9PSAwICYm IF9fYSA9PSBfQWxsb2MoKSkKIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoK ICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5CiB7 CiAgIGlmIChfX24pCiAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwg X19uLCBfX2MpOwogfQogICAgICBjYXRjaCguLi4pCiB7CiAgIF9fci0+X01fZGVzdHJveShfX2Ep OwogICB0aHJvdzsKIH0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfX247CiAgICAgIF9fci0+X01f cmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgcmV0dXJuIF9fci0+X01f cmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAg ICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9BbGxvYygpLCBfX3N0ci5n ZXRfYWxsb2NhdG9yKCkpLAogICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0 cmluZyhjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNp emVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3Qg YmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAg OiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAg ICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkKICAgIHsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg YmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywK ICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9T X2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICBfX3N0ci5fTV9mb2xk KF9fcG9zLCBfX24pLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVz KF9TX2NvbnN0cnVjdChfX3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJp bmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1 cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykg OgogICAgICAgICAgX19zICsgbnBvcywgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoc2l6 ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFw bHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1 dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25z dHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7 CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKIHsKCiAgIGFsbG9jYXRvcl90 eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsKICAgX0NoYXJUKiBfX3RtcCA9IF9fc3Ry Ll9NX3JlcCgpLT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKICAgX01fcmVw KCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgX01fZGF0YShfX3RtcCk7CiB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mCiAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAg YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbikKICAgICB7CiAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIu c2l6ZSgpOwogICAgICAgaWYgKF9fcG9zID4gX19zdHJzaXplKQogIF9fdGhyb3dfb3V0X29mX3Jh bmdlKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0g X19uIDwgX19zdHJzaXplIC0gX19wb3M7CiAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXpl ID0gX190ZXN0biA/IF9fbiA6IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgcmV0dXJuIHRoaXMt PmFzc2lnbihfX3N0ci5fTV9kYXRhKCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICB9CgogICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgIGFzc2lnbihjb25zdCBfQ2hh clQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICB7CiAgICAgICBpZiAoX19uID4gdGhpcy0+bWF4 X3NpemUoKSkKICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsK ICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQq PigpKF9fcywgX01fZGF0YSgpKQogICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEo KSArIHRoaXMtPnNpemUoKSwgX19zKSkKICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdp bigpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgICAgIGVsc2UKICB7CgogICAgY29u c3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgpOwogICAgaWYgKF9fcG9zID49IF9f bikKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICBlbHNl IGlmIChfX3BvcykKICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7 CiAgICBfTV9yZXAoKS0+X01fbGVuZ3RoID0gX19uOwogICAgX01fZGF0YSgpW19fbl0gPSBfUmVw OjpfU190ZXJtaW5hbDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgICAgfQoKICAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwg Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwg c2l6ZV90eXBlIF9fbikKICAgICB7CiAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0g X19zdHIuc2l6ZSgpOwogICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICBfX3Rocm93X291 dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgIGNvbnN0IGJvb2wgX190 ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgIGNvbnN0IHNpemVfdHlwZSBf X25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3MyOwogICAgICAgcmV0 dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdz aXplKTsKICAgICB9CgogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JgogICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg IGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u KQogICAgIHsKICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg ICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi YXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgaWYgKF9fc2l6ZSA+IHRoaXMtPm1heF9zaXpl KCkgLSBfX24pCiAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Omlu c2VydCIpOwogICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0 IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hh clQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgcmV0dXJuIF9NX3JlcGxh Y2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uKTsKICAgICAgIGVsc2UKICAg ICAgICAgewoKCgogICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29mZiA9IF9fcyAtIF9NX2Rh dGEoKTsKICAgICAgICAgICBfTV9tdXRhdGUoX19wb3MsIDAsIF9fbik7CiAgICAgICAgICAgX19z ID0gX01fZGF0YSgpICsgX19vZmY7CiAgICAgICAgICAgX0NoYXJUKiBfX3AgPSBfTV9kYXRhKCkg KyBfX3BvczsKICAgICAgICAgICBpZiAoX19zICsgX19uIDw9IF9fcCkKICAgICAgICAgICAgIHRy YWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX24pOwogICAgICAgICAgIGVsc2UgaWYgKF9fcyA+ PSBfX3ApCiAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19u KTsKICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRyYWl0c190 eXBlOjpjb3B5KF9fcCwgX19zLCBfX3AgLSBfX3MpOwogICAgICAgICAgICAgICB0cmFpdHNfdHlw ZTo6Y29weShfX3AgKyAoX19wLV9fcyksIF9fcCArIF9fbiwgX19uIC0gKF9fcC1fX3MpKTsKICAg ICAgICAgICAgIH0KICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KICAgICB9Cgog ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgIHJlcGxhY2Uoc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgIHNpemVf dHlwZSBfX24yKQogICAgIHsKICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z aXplKCk7CiAgICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgIF9fdGhyb3dfb3V0X29m X3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgIGNvbnN0IGJvb2wgX190ZXN0 bjEgPSBfX24xIDwgX19zaXplIC0gX19wb3M7CiAgICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xk bjEgPSBfX3Rlc3RuMSA/IF9fbjEgOiBfX3NpemUgLSBfX3BvczsKICAgICAgIGlmIChfX3NpemUg LSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQogICAgICAgICBfX3Rocm93X2xl bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgICBpZiAoX01fcmVwKCkt Pl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkK ICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBf X3MpKQogICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3Ms CiAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsIF9fcywgX19zICsgX19uMik7Cgog ICAgICAgZWxzZQogIHJldHVybiBfTV9yZXBsYWNlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2li ZWdpbigpICsgX19wb3MgKyBfX2ZvbGRuMSwKICAgICAgX19zLCBfX3MgKyBfX24yLAogICAgICB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX0NoYXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5 KCkpOwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRo cm93ICgpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01f Y2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2FsbG9jKF9f YSkuZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjpfTV9sZWFrX2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJl ZCgpKQogX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgp OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3Np emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19v bGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9N X2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVj aCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01f aXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiB7CgogICBhbGxvY2F0b3Jf dHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CgoKICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNp emUgPSA0MDk2OwogICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICog c2l6ZW9mICh2b2lkKik7CgogICBjb25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0gKF9f cGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZQogICAgICAgICAgLSBzaXplb2YoX1JlcCkg LSBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICBfUmVw KiBfX3I7CiAgIGlmIChfX25ld19zaXplID4gY2FwYWNpdHkoKSAmJiBfX25ld19zaXplID4gX19w YWdlX2NhcGFjaXR5KQoKICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSA+IDIq Y2FwYWNpdHkoKSA/CiAgICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCksIF9fYSk7CiAgIGVs c2UKICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAgdHJ5CiAg ICAgewogICAgICAgaWYgKF9fcG9zKQogIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0 YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAgICAgIGlmIChfX2hvd19tdWNoKQogIHRyYWl0c190 eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsCiAgICAgIF9fc3Jj LCBfX2hvd19tdWNoKTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CiAgICAgICBfX3ItPl9N X2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgIHRocm93OwogICAgIH0KICAgX01fcmVw KCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7CiAgICAg IH0KICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4yKQogewoKICAg dHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hv d19tdWNoKTsKIH0KICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfTV9y ZXAoKS0+X01fbGVuZ3RoID0gX19uZXdfc2l6ZTsKICAgICAgX01fZGF0YSgpW19fbmV3X3NpemVd ID0gX1JlcDo6X1NfdGVybWluYWw7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQog ICAgewogICAgICBpZiAoX19yZXMgPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9p c19zaGFyZWQoKSkKICAgICAgICB7CiAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkpCiAg ICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoKICAgaWYg KF9fcmVzIDwgdGhpcy0+c2l6ZSgpKQogICAgIF9fcmVzID0gdGhpcy0+c2l6ZSgpOwogICBhbGxv Y2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgIF9DaGFyVCogX190bXAgPSBfTV9y ZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7CiAgIF9NX3JlcCgpLT5f TV9kaXNwb3NlKF9fYSk7CiAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFz aWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkp CiBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9N X2lzX2xlYWtlZCgpKQogX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYg KHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQogewogICBfQ2hh clQqIF9fdG1wID0gX01fZGF0YSgpOwogICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkpOwogICBfX3Mu X01fZGF0YShfX3RtcCk7CiB9CgogICAgICBlbHNlCiB7CiAgIGJhc2ljX3N0cmluZyBfX3RtcDEo X01faWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgIGJhc2ljX3N0 cmluZyBfX3RtcDIoX19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAgICB0aGlz LT5nZXRfYWxsb2NhdG9yKCkpOwogICAqdGhpcyA9IF9fdG1wMjsKICAgX19zID0gX190bXAxOwog fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46Ol9SZXAqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjpfUmVwOjoKICAgIF9TX2NyZWF0ZShzaXplX3QgX19jYXBhY2l0eSwgY29uc3QgX0FsbG9jJiBf X2FsbG9jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKCgogICAgICBpZiAoX19jYXBhY2l0eSA+IF9TX21heF9z aXplKQoKCgogX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7 CgoKCgogICAgICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hh clQpICsgc2l6ZW9mKF9SZXApOwojIDUzMiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs dWRlL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMwogICAgICBjb25zdCBzaXplX3QgX19wYWdlc2l6 ZSA9IDQwOTY7CiAgICAgIGNvbnN0IHNpemVfdCBfX3N1YnBhZ2VzaXplID0gMTI4OwogICAgICBj b25zdCBzaXplX3QgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CiAg ICAgIGlmICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpID4gX19wYWdlc2l6ZSkKIHsK ICAgc2l6ZV90IF9fZXh0cmEgPQogICAgIChfX3BhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxv Y19oZWFkZXJfc2l6ZSkgJSBfX3BhZ2VzaXplKSkKICAgICAlIF9fcGFnZXNpemU7CiAgIF9fY2Fw YWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICBfX3NpemUgPSAoX19jYXBhY2l0 eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiB9CiAgICAgIGVsc2UgaWYg KF9fc2l6ZSA+IF9fc3VicGFnZXNpemUpCiB7CiAgIHNpemVfdCBfX2V4dHJhID0KICAgICAoX19z dWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19zdWJwYWdl c2l6ZSkpCiAgICAgJSBfX3N1YnBhZ2VzaXplOwogICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBz aXplb2YoX0NoYXJUKTsKICAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hh clQpICsgc2l6ZW9mKF9SZXApOwogfQoKCgogICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRl c19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAgICBfUmVwICpfX3AgPSBuZXcg KF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkgPSBfX2NhcGFjaXR5OwogICAg ICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9NX2xlbmd0aCA9IDA7CiAgICAg IHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9jbG9uZShjb25zdCBfQWxsb2Mm IF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf X3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRl cl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFn ZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZSAt IHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7 CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVkX2NhcCA+IF9NX2NhcGFjaXR5 ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgX19yID0gX1Jl cDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2FwYWNpdHkgPwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAyKl9NX2NhcGFjaXR5LCBfX2Fs bG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3Rl ZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkKIHsKICAgdHJ5CiAgICAgeyB0 cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5n dGgpOyB9CiAgIGNhdGNoKC4uLikKICAgICB7CiAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxv Yyk7CiAgICAgICB0aHJvdzsKICAgICB9CiB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVu Z3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9p ZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzaXplKHNpemVf dHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQog X190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVf dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiB0aGlz LT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24gPCBfX3NpemUp CiB0aGlzLT5lcmFzZShfX24pOwoKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01f cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAg IF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CgogYmFzaWNfc3Ry aW5nIF9fcyhfX2sxLCBfX2syKTsKIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX19pMSwgX19pMiwg X19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpKTsKICAgICAgfQoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2ky LCBfRm9yd2FyZEl0ZXIgX19rMSwKICAgICAgICBfRm9yd2FyZEl0ZXIgX19rMikKICAgICAgewog c2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3RkOjpkaXN0YW5jZShf X2sxLCBfX2syKSk7CiBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiBzaXplX3R5cGUg X19kbWF4ID0gdGhpcy0+bWF4X3NpemUoKTsKCiBpZiAoX19kbWF4IDw9IF9fZG5ldykKICAgX190 aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOwogc2l6ZV90eXBl IF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigpOwogX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9f ZG5ldyk7CgoKICAgICAgICBpZiAoX19kbmV3KQogICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSAr IF9fb2ZmLCBfX2sxLCBfX2syKTsKCiByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNp emVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgIHNpemVfdHlwZSBf X3BvczIsIHNpemVfdHlwZSBfX24yKQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJz aXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogX190aHJv d19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBjb25zdCBib29s IF9fdGVzdG4yID0gX19uMiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgY29uc3Qgc2l6ZV90 eXBlIF9fZm9sZG4yID0gX190ZXN0bjIgPyBfX24yIDogX19zdHJzaXplIC0gX19wb3MyOwogICAg ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvczEsIF9fbjEsCiAgICAgIF9fc3RyLl9NX2RhdGEo KSArIF9fcG9zMiwgX19mb2xkbjIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewoKCgog ICAgICBzaXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19s ZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFj aXR5KCkpCiB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2Fm ZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01faWJlZ2luKCksCiAgICAgICAgX19zdHIu X01faWVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXpl X3R5cGUgX19uKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihzaXpl X3R5cGUoX19zdHIuc2l6ZSgpIC0gX19wb3MpLAogICAgIF9fbikgKyB0aGlzLT5zaXplKCk7CiAg ICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiB0aGlzLT5yZXNlcnZlKF9fbGVuKTsK ICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIu X01fY2hlY2soX19wb3MpLAogICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0g X19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQog dGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVu ZCgpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykK ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBp ZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAg ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAg IG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAg ICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0 cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgp KTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIu YXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19s aHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQog ICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4g X19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXpl X3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6 ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsg MSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19saHMpOwogICAgICBfX3N0 ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv ciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fbjEgPSBfX2kyIC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9p YmVnaW4oKTsKICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0g X19uMikKIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAg ICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAgICAgaWYgKF9fbjIpCiB0cmFp dHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsKICAgICAgcmV0 dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXpl X3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkK IF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChf X24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykKIF9fbiA9IHRoaXMtPnNpemUoKSAtIF9fcG9zOwoK ICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3BvcywgX19uKTsKCiAg ICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6 ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBjb25z dCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgZm9yICg7IF9feHBvcyArIF9fbiA8 PSBfX3NpemU7ICsrX194cG9zKQogaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9f eHBvcywgX19zLCBfX24pID09IDApCiAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9z OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsK ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9f cmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogewogICBjb25zdCBfQ2hhclQq IF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwog ICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0YSArIF9fcG9zLCBf X24sIF9fYyk7CiAgIGlmIChfX3ApCiAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiB9CiAgICAg IHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX24gPD0gX19zaXplKQogewogICBfX3BvcyA9 IHN0ZDo6bWluKHNpemVfdHlwZShfX3NpemUgLSBfX24pLCBfX3Bvcyk7CiAgIGNvbnN0IF9DaGFy VCogX19kYXRhID0gX01fZGF0YSgpOwogICBkbwogICAgIHsKICAgICAgIGlmICh0cmFpdHNfdHlw ZTo6Y29tcGFyZShfX2RhdGEgKyBfX3BvcywgX19zLCBfX24pID09IDApCiAgcmV0dXJuIF9fcG9z OwogICAgIH0KICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAg ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKIHsK ICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAgIGlmIChfX3hwb3MgPiBfX3BvcykKICAg ICBfX3hwb3MgPSBfX3BvczsKCiAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAg IGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICByZXR1 cm4gX194cG9zOwogfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFt ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9vZihj b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAog ICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9zKQog ewogICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9k YXRhKClbX19wb3NdKTsKICAgaWYgKF9fcCkKICAgICByZXR1cm4gX19wb3M7CiB9CiAgICAgIHJl dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiB7CiAgIGlmICgt LV9fc2l6ZSA+IF9fcG9zKQogICAgIF9fc2l6ZSA9IF9fcG9zOwogICBkbwogICAgIHsKICAgICAg IGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogIHJl dHVybiBfX3NpemU7CiAgICAgfQogICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiB9CiAgICAgIHJl dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywg c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3Qg X194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194 cG9zKQogaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19feHBvc10p KQogICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUK ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJz dF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBz aXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7 ICsrX194cG9zKQogaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykp CiAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rf bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg IGlmIChfX3NpemUpCiB7CiAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgIF9fc2l6ZSA9IF9f cG9zOwogICBkbwogICAgIHsKICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24s IF9NX2RhdGEoKVtfX3NpemVdKSkKICByZXR1cm4gX19zaXplOwogICAgIH0KICAgd2hpbGUgKF9f c2l6ZS0tKTsKIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2Yo X0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogewogICBpZiAoLS1fX3Np emUgPiBfX3BvcykKICAgICBfX3NpemUgPSBfX3BvczsKICAgZG8KICAgICB7CiAgICAgICBpZiAo IXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19zaXplXSwgX19jKSkKICByZXR1cm4gX19zaXpl OwogICAgIH0KICAgd2hpbGUgKF9fc2l6ZS0tKTsKIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp cy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAg aWYgKF9fcG9zID4gX19zaXplKQogX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6 Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IHN0ZDo6bWluKHNpemVfdHlwZShf X3NpemUgLSBfX3BvcyksIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9f cnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01f ZGF0YSgpICsgX19wb3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKIF9f ciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21w YXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyLAogICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAg ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUg X19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3Bv czIgPiBfX29zaXplKQogX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFy ZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBzdGQ6Om1pbihzaXplX3R5cGUoX19zaXpl IC0gX19wb3MxKSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IHN0ZDo6bWluKHNp emVfdHlwZShfX29zaXplIC0gX19wb3MyKSwgX19uMik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9 IHN0ZDo6bWluKF9fcnNpemUsIF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBl Ojpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwKICAgICAgICAgX19zdHIuZGF0YSgpICsgX19w b3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogX19yID0gX19yc2l6ZSAtIF9fcm9zaXplOwog ICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykg Y29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAg c2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVf dHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0 cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9f cikKIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQq IF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK ICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0 cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6 bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gc3RkOjptaW4oc2l6ZV90eXBl KF9fc2l6ZSAtIF9fcG9zKSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWlu KF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUo X01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKIF9fciA9IF9f cnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAog ICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICBz aXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMt PnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogX190aHJvd19vdXRfb2ZfcmFuZ2Uo ImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBzdGQ6 Om1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19y c2l6ZSA9IHN0ZDo6bWluKHNpemVfdHlwZShfX3NpemUgLSBfX3BvcyksIF9fbjEpOwogICAgICBz aXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9f ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsK ICAgICAgaWYgKCFfX3IpCiBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9f cjsKICAgIH0KCgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8Y2hhcj47 CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I+ PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi YXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXI+Jiwg Y29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+ JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwgY2hhcik7CiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19p c3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiMgMTA3OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12 My9pbmNsdWRlL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMwp9CiMgNTggIi9nY2MvZGplL2J1aWxk L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9s aWJzdGRjKystdjMvaW5jbHVkZS9zdHJpbmciIDIgMwojIDQ4ICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk YysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfY2xhc3Nlcy5oIiAyIDMKCgpuYW1lc3BhY2Ugc3Rk CnsKCiAgY2xhc3MgbG9jYWxlCiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGlu dCBjYXRlZ29yeTsKCgogICAgY2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9J bXBsOwoKICAgIGZyaWVuZCBjbGFzcyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAg ICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj ZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJv dygpOwoKCgogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNv bnN0IGNhdGVnb3J5IGN0eXBlID0gMUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBu dW1lcmljID0gMUwgPDwgMTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwg PDwgMjsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRp YyBjb25zdCBjYXRlZ29yeSBtb25ldGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0 ZWdvcnkgbWVzc2FnZXMgPSAxTCA8PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9 IChjdHlwZSB8IG51bWVyaWMgfCBjb2xsYXRlIHwKICAgICAgICAgdGltZSB8IG1vbmV0YXJ5IHwg bWVzc2FnZXMpOwoKCiAgICBsb2NhbGUoKSB0aHJvdygpOwoKICAgIGxvY2FsZShjb25zdCBsb2Nh bGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShjb25zdCBjaGFy KiBfX3MpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgY2hhciogX19z LCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25z dCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZik7 CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9jYWxlJgogICAgb3BlcmF0b3I9 KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf RmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikg Y29uc3Q7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wKICAgIG9wZXJh dG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgp CiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9CgogICAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg ICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0 cywgX0FsbG9jPiYgX19zMSwKICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBf QWxsb2M+JiBfX3MyKSBjb25zdDsKCgogICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0 IGxvY2FsZSYpOwoKICAgIHN0YXRpYyBjb25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7CgogIHBy aXZhdGU6CgogICAgX0ltcGwqIF9NX2ltcGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xhc3Np YzsKCgogICAgc3RhdGljIF9JbXBsKiBfU19nbG9iYWw7CiMgMTU0ICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli c3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfY2xhc3Nlcy5oIiAzCiAgICBzdGF0aWMgY29u c3Qgc2l6ZV90IF9TX2NhdGVnb3JpZXNfc2l6ZSA9IDYgKyAwOwoKCgoKCiAgICBzdGF0aWMgY29u c3QgY2hhcioqIF9TX2NhdGVnb3JpZXM7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShfSW1wbCop IHRocm93KCk7CgogICAgc3RhdGljIGlubGluZSB2b2lkCiAgICBfU19pbml0aWFsaXplKCkKICAg IHsKICAgICAgaWYgKCFfU19jbGFzc2ljKQogY2xhc3NpYygpOwogICAgfQoKICAgIHN0YXRpYyBj YXRlZ29yeQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2b2lkCiAg ICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwg Y2F0ZWdvcnkgX19jYXQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBwdWJs aWM6CgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZh Y2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9G YWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2Fs ZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7 CiAgICBjb25zdCBmYWNldCoqIF9NX2ZhY2V0czsKICAgIHNpemVfdCBfTV9mYWNldHNfc2l6ZTsK ICAgIGNoYXIqKiBfTV9uYW1lczsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBf U19pZF9jdHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251 bWVyaWNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRl W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtdOwogICAg c3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAgICBzdGF0 aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBj b25zdCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAg IGlubGluZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyBfX2F0b21p Y19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOyB9CgogICAgaW5saW5lIHZvaWQKICAgIF9NX3JlbW92 ZV9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQo Jl9NX3JlZmVyZW5jZXMsIC0xKSA9PSAxKQogewogICB0cnkKICAgICB7IGRlbGV0ZSB0aGlzOyB9 CiAgIGNhdGNoKC4uLikKICAgICB7IH0KIH0KICAgIH0KCiAgICBfSW1wbChjb25zdCBfSW1wbCYs IHNpemVfdCk7CiAgICBfSW1wbChjb25zdCBjaGFyKiwgc2l6ZV90KTsKICAgIF9JbXBsKGZhY2V0 KiosIHNpemVfdCwgYm9vbCk7CgogICB+X0ltcGwoKSB0aHJvdygpOwoKICAgIF9JbXBsKGNvbnN0 IF9JbXBsJik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IF9JbXBsJik7CgogICAgaW5s aW5lIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJvb2wgX19yZXQg PSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX3JldCAmJiBfX2kgPCBfU19jYXRl Z29yaWVzX3NpemUgLSAxOyArK19faSkKIF9fcmV0ICY9IChzdHJjbXAoX01fbmFtZXNbX19pXSwg X01fbmFtZXNbX19pICsgMV0pID09IDApOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogICAg dm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoK ICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2Nh bGU6OmlkKiBjb25zdCopOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0lt cGwqLCBjb25zdCBsb2NhbGU6OmlkKik7CgogICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChj b25zdCBsb2NhbGU6OmlkKiwgY29uc3QgZmFjZXQqKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf RmFjZXQ+CiAgICAgIGlubGluZSB2b2lkCiAgICAgIF9NX2luaXRfZmFjZXQoX0ZhY2V0KiBfX2Zh Y2V0KQogICAgICB7IF9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9CiAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3Qg bG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBf SW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsKICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNl dCgmX0ZhY2V0OjppZCwgX19mKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX1Nf Y2F0ZWdvcmllc19zaXplOyArK19faSkKIHsKICAgZGVsZXRlIFtdIF9NX2ltcGwtPl9NX25hbWVz W19faV07CiAgIGNoYXIqIF9fbmV3ID0gbmV3IGNoYXJbMl07CiAgIHN0cmNweShfX25ldywgIioi KTsKICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9IF9fbmV3OwogfQogICAgfQoKCgogIGNsYXNz IGxvY2FsZTo6ZmFjZXQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAg ICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgICBtdXRhYmxlIF9BdG9taWNfd29yZCBf TV9yZWZlcmVuY2VzOwoKICBwcm90ZWN0ZWQ6CgogICAgc3RhdGljIF9fY19sb2NhbGUgX1NfY19s b2NhbGU7CgoKICAgIHN0YXRpYyBjaGFyIF9TX2NfbmFtZVsyXTsKCiAgICBleHBsaWNpdAogICAg ZmFjZXQoc2l6ZV90IF9fcmVmcyA9IDApIHRocm93KCk7CgogICAgdmlydHVhbAogICAgfmZhY2V0 KCk7CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBf X2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IDApOwoK ICAgIHN0YXRpYyBfX2NfbG9jYWxlCiAgICBfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBf X2Nsb2MpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2Nh bGUmIF9fY2xvYyk7CgogIHByaXZhdGU6CiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkg Y29uc3QgdGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgY29uc3Qg dGhyb3coKTsKCiAgICBmYWNldChjb25zdCBmYWNldCYpOwoKICAgIHZvaWQKICAgIG9wZXJhdG9y PShjb25zdCBmYWNldCYpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjppZAogIHsKICBwcml2YXRl OgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBs OwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0 JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf RmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0 aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxlIHNpemVfdCBfTV9pbmRleDsKCgogICAgc3RhdGljIF9B dG9taWNfd29yZCBfU19oaWdod2F0ZXI7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGlk Jik7CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVibGljOgoKCiAgICBpZCgpOwoKICAgIGlubGlu ZSBzaXplX3QKICAgIF9NX2lkKCkgY29uc3QKICAgIHsKICAgICAgaWYgKCFfTV9pbmRleCkKIF9N X2luZGV4ID0gMSArIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX1NfaGlnaHdhdGVyLCAxKTsKICAgICAg cmV0dXJuIF9NX2luZGV4IC0gMTsKICAgIH0KICB9Owp9CiMgNDggIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL2lvc19iYXNlLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoK CgogIGVudW0gX0lvc19GbXRmbGFncyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9 OwoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwg X0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxp bnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZs YWdzCiAgb3BlcmF0b3J8KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7 IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0 PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19G bXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Mo c3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxp bmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0Zt dGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf Rm10ZmxhZ3MKICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBf X2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdz CiAgb3BlcmF0b3JePShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsg cmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJh dG9yfihfSW9zX0ZtdGZsYWdzIF9fYSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNf Y2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1v ZGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYo X0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Bl bm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoK ICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lv c19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+ KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2Rl CiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJl dHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGlu dD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Bl bm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19i OyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBf X2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBp bmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9z X09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9J b3NfT3Blbm1vZGUKICBvcGVyYXRvcn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lv c19PcGVubW9kZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3Rh dGUgeyBfTV9pb3NfaW9zdGF0ZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0 YXRlCiAgb3BlcmF0b3ImKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyBy ZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGlu dD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3Rh dGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNf Y2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9z X0lvc3RhdGUKICBvcGVyYXRvcl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikK ICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nh c3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9z X0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBf X2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBf X2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlu bGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lv c3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19J b3N0YXRlCiAgb3BlcmF0b3J+KF9Jb3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0 YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX01f aW9zX3NlZWtkaXJfZW5kID0gMUwgPDwgMTYgfTsKCiAgY2xhc3MgX19sb2NhbGVfY2FjaGVfYmFz ZTsKIyAxNjAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2lvc19iYXNl LmgiIDMKICBjbGFzcyBpb3NfYmFzZQogIHsKICBwdWJsaWM6CgoKCiAgICBjbGFzcyBmYWlsdXJl IDogcHVibGljIGV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAg ICAgIGZhaWx1cmUoY29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAgdmlydHVh bAogICAgICB+ZmFpbHVyZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAg ICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0geyBfTV9i dWZzaXplID0gMjU2IH07CiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAgICB9Owoj IDIxNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dl cnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaW9zX2Jhc2UuaCIg MwogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25zdCBm bXRmbGFncyBib29sYWxwaGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsK CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T X2RlYyk7CgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19pb3Nf ZmxhZ3M6Ol9TX2ZpeGVkKTsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10Zmxh Z3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7CgoKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50 ZXJuYWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOwoKCiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKCiAg ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29j dCk7CgoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2Zs YWdzOjpfU19yaWdodCk7CgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMgPSBm bXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7CgoKICAgIHN0YXRpYyBjb25zdCBm bXRmbGFncyBzaG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7CgoK ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFn czo6X1Nfc2hvd3BvaW50KTsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsKCiAgICBzdGF0aWMgY29uc3QgZm10Zmxh Z3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7CgogICAgc3RhdGlj IGNvbnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1 Zik7CgoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lv c19mbGFnczo6X1NfdXBwZXJjYXNlKTsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYWRqdXN0 ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwoKICAgIHN0YXRp YyBjb25zdCBmbXRmbGFncyBiYXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFz ZWZpZWxkKTsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9IGZtdGZsYWdz KF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsKIyAyNzEgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9iaXRzL2lvc19iYXNlLmgiIDMKICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRl IGlvc3RhdGU7CgoKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19p b3NfZmxhZ3M6Ol9TX2JhZGJpdCk7CgogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0g aW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsKCgoKICAgIHN0YXRpYyBjb25zdCBpb3N0 YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsKCiAgICBzdGF0 aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsKIyAyOTggIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2lvc19iYXNlLmgiIDMKICAgIHR5cGVkZWYgX0lv c19PcGVubW9kZSBvcGVubW9kZTsKCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Bl bm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7CgogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0 ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hdGUpOwoKCgoKICAgIHN0YXRpYyBjb25zdCBv cGVubW9kZSBiaW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKCiAgICBzdGF0 aWMgY29uc3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOwoKICAg IHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nfb3V0 KTsKCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFn czo6X1NfdHJ1bmMpOwojIDMyNSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Jp dHMvaW9zX2Jhc2UuaCIgMwogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKCiAgICBz dGF0aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwoKICAgIHN0YXRpYyBjb25zdCBz ZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7CgogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0g c2Vla2RpcigyKTsKIyAzNDcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRz L2lvc19iYXNlLmgiIDMKICAgIGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJhc2VfZXZlbnQsCiAg ICAgIGltYnVlX2V2ZW50LAogICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoKCgoKICAgIHR5cGVk ZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsKCgoKCiAg ICB2b2lkCiAgICByZWdpc3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19p bmRleCk7CgogIHByb3RlY3RlZDoKCgoKCgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwog ICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwogICAgaW9zdGF0 ZSBfTV9leGNlcHRpb247CiAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgoKCiAgICBz dHJ1Y3QgX0NhbGxiYWNrX2xpc3QKICAgIHsKCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0 OwogICAgICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRl eDsKICAgICAgX0F0b21pY193b3JkIF9NX3JlZmNvdW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3Qo aW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4LAogICAgICAgX0NhbGxi YWNrX2xpc3QqIF9fY2IpCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2lu ZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRk X3JlZmVyZW5jZSgpIHsgX19hdG9taWNfYWRkKCZfTV9yZWZjb3VudCwgMSk7IH0KCgogICAgICBp bnQKICAgICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9fZXhjaGFuZ2VfYW5kX2Fk ZCgmX01fcmVmY291bnQsIC0xKTsgfQogICAgfTsKCiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2Nh bGxiYWNrczsKCiAgICB2b2lkCiAgICBfTV9jYWxsX2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJv dygpOwoKICAgIHZvaWQKICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKHZvaWQpOwoKCiAgICBzdHJ1 Y3QgX1dvcmRzCiAgICB7CiAgICAgIHZvaWQqIF9NX3B3b3JkOwogICAgICBsb25nIF9NX2l3b3Jk OwogICAgICBfV29yZHMoKSA6IF9NX3B3b3JkKDApLCBfTV9pd29yZCgwKSB7IH0KICAgIH07CgoK ICAgIF9Xb3JkcyBfTV93b3JkX3plcm87CgoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2xvY2Fs X3dvcmRfc2l6ZSA9IDg7CiAgICBfV29yZHMgX01fbG9jYWxfd29yZFtfU19sb2NhbF93b3JkX3Np emVdOwoKCiAgICBpbnQgX01fd29yZF9zaXplOwogICAgX1dvcmRzKiBfTV93b3JkOwoKICAgIF9X b3JkcyYKICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9z X2xvY2FsZTsKCgoKICAgIGF1dG9fcHRyPF9fbG9jYWxlX2NhY2hlX2Jhc2U+IF9NX2xvY2FsZV9j YWNoZTsKCiAgICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xhc3Mg SW5pdAogICAgewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAgICAg IEluaXQoKTsKICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NyZWF0 ZV9idWZmZXJzKGJvb2wgX19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2Rlc3Ry b3lfYnVmZmVycygpOwoKCgoKICAgICAgc3RhdGljIGJvb2wKICAgICAgX1NfaW5pdGlhbGl6ZWQo KSB7IHJldHVybiBfU19pb3NfYmFzZV9pbml0OyB9CgogICAgcHJpdmF0ZToKICAgICAgc3RhdGlj IGludCBfU19pb3NfYmFzZV9pbml0OwogICAgICBzdGF0aWMgYm9vbCBfU19zeW5jZWRfd2l0aF9z dGRpbzsKICAgIH07CgoKCgoKCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKCkgY29uc3Qg eyByZXR1cm4gX01fZmxhZ3M7IH0KIyA0ODcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j bHVkZS9iaXRzL2lvc19iYXNlLmgiIDMKICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoZm10 ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAg ICAgX01fZmxhZ3MgPSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CiMgNTAzICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBp bmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10 ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAgICAg cmV0dXJuIF9fb2xkOwogICAgfQojIDUyMCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs dWRlL2JpdHMvaW9zX2Jhc2UuaCIgMwogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZs YWdzIF9fZm10ZmwsIGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQg PSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKICAgICAgX01fZmxhZ3MgfD0g KF9fZm10ZmwgJiBfX21hc2spOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgoKCgoKCgogICAg aW5saW5lIHZvaWQKICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9f bWFzazsgfQojIDU0NyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaW9z X2Jhc2UuaCIgMwogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbigpIGNvbnN0IHsg cmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoKCgoKCgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHBy ZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9 IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4g X19vbGQ7CiAgICB9CgoKCgoKCgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29u c3QgeyByZXR1cm4gX01fd2lkdGg7IH0KCgoKCgoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3 aWR0aChzdHJlYW1zaXplIF9fd2lkZSkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9N X3dpZHRoOwogICAgICBfTV93aWR0aCA9IF9fd2lkZTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAg fQojIDU5NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaW9zX2Jhc2Uu aCIgMwogICAgc3RhdGljIGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9IHRy dWUpOwojIDYwOCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaW9zX2Jh c2UuaCIgMwogICAgbG9jYWxlCiAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKIyA2MTkg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2lvc19iYXNlLmgiIDMKICAg IGlubGluZSBsb2NhbGUKICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19sb2NhbGU7 IH0KCgoKCgogICAgc3RhdGljIGludAogICAgeGFsbG9jKCkgdGhyb3coKTsKCgoKCiAgICBpbmxp bmUgbG9uZyYKICAgIGl3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9 IChfX2l4IDwgX01fd29yZF9zaXplKQogICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRz KF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX2l3b3JkOwogICAgfQoKCgoKICAgIGlubGlu ZSB2b2lkKiYKICAgIHB3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9 IChfX2l4IDwgX01fd29yZF9zaXplKQogICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRz KF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOwogICAgfQoKCgogICAgX19sb2Nh bGVfY2FjaGVfYmFzZSYKICAgIF9NX2NhY2hlKCkgeyByZXR1cm4gKl9NX2xvY2FsZV9jYWNoZTsg fQoKCgoKCgogICAgdmlydHVhbCB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAgaW9zX2Jh c2UoKTsKCgoKICBwcml2YXRlOgogICAgaW9zX2Jhc2UoY29uc3QgaW9zX2Jhc2UmKTsKCiAgICBp b3NfYmFzZSYKICAgIG9wZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKICB9OwoKCgogIGlubGlu ZSBpb3NfYmFzZSYKICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu c2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5s aW5lIGlvc19iYXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i YXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK CiAgaW5saW5lIGlvc19iYXNlJgogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg X19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK CiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg ICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwog IH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7 CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7 CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2Up CiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBf X2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFz ZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19i YXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFz ZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBf X2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19iYXNl KQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFz ZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkK ICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFz ZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2Up CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19i YXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19i YXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1 cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICB1bml0YnVmKGlvc19iYXNlJiBf X2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1 cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2Um IF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAg cmV0dXJuIF9fYmFzZTsKICB9CgoKCiAgaW5saW5lIGlvc19iYXNlJgogIGludGVybmFsKGlvc19i YXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9z X2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBp b3NfYmFzZSYKICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z X2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwog IH0KCgogIGlubGluZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAg IHJldHVybiBfX2Jhc2U7CiAgfQoKCgogIGlubGluZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jhc2Um IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFz ZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGhl eChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlv c19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9z X2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jh c2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgoK ICBpbmxpbmUgaW9zX2Jhc2UmCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh c2Uuc2V0Zihpb3NfYmFzZTo6Zml4ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVy biBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIHNjaWVudGlmaWMoaW9zX2Jhc2Um IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jh c2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgp9CiMgNTAgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pb3MiIDIgMwojIDEgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDEgMwojIDQ0ICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk YysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCgoKCgoKCm5hbWVzcGFjZSBzdGQKewoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6 ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9pb3Ms CiAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAg ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7CiMgMTIzICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVm CiAgICB7CiAgICBwdWJsaWM6CgoKCgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0 cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJh aXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwojIDE0NiAiL2djYy9kamUvYnVpbGQvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr Ky12My9pbmNsdWRlL3N0cmVhbWJ1ZiIgMwogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4g X19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRy YWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0 c190eXBlOjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKCgogICAgICBmcmllbmQgY2xhc3MgYmFz aWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNf aXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2lj X29zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBpc3Ry ZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xh c3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKCiAgICAgIGZy aWVuZCBzdHJlYW1zaXplCiAgICAgIF9fY29weV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJf dHlwZSwgdHJhaXRzX3R5cGU+JiBfX2lvcywKICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4s X19zdHJlYW1idWZfdHlwZSogX19zYm91dCk7CgogICAgcHJvdGVjdGVkOgoKCgoKCgogICAgICBi b29sIF9NX2J1Zl91bmlmaWVkOwojIDE4MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs dWRlL3N0cmVhbWJ1ZiIgMwogICAgICBjaGFyX3R5cGUqIF9NX2luX2JlZzsKICAgICAgY2hhcl90 eXBlKiBfTV9pbl9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5kOwogICAgICBjaGFyX3R5 cGUqIF9NX291dF9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2N1cjsKICAgICAgY2hhcl90 eXBlKiBfTV9vdXRfZW5kOwojIDE5NSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl L3N0cmVhbWJ1ZiIgMwogICAgICBjaGFyX3R5cGUqIF9NX291dF9saW07CiMgMjA0ICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIGlvc19iYXNlOjpv cGVubW9kZSBfTV9tb2RlOwoKCgoKCgogICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgoKCgoK ICAgICAgZnBvczxfX3N0YXRlX3R5cGU+IF9NX3BvczsKCgoKICAgICAgdm9pZAogICAgICBfTV9t b3ZlX2luX2N1cihvZmZfdHlwZSBfX24pCiAgICAgIHsKIGNvbnN0IGJvb2wgX190ZXN0b3V0ID0g X01fb3V0X2N1cjsKIF9NX2luX2N1ciArPSBfX247CiBpZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91 bmlmaWVkKQogICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQojIDIzOSAiL2djYy9kamUvYnVp bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w L2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmVhbWJ1ZiIgMwogICAgICB2b2lkCiAgICAgIF9NX21v dmVfb3V0X2N1cihvZmZfdHlwZSBfX24pCiAgICAgIHsKIGNvbnN0IGJvb2wgX190ZXN0aW4gPSBf TV9pbl9jdXI7CgogX01fb3V0X2N1ciArPSBfX247CiBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3Vu aWZpZWQpCiAgIF9NX2luX2N1ciArPSBfX247CiBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9saW0p CiAgIHsKICAgICBfTV9vdXRfbGltID0gX01fb3V0X2N1cjsKCiAgICAgaWYgKF9fdGVzdGluKQog ICAgICAgX01faW5fZW5kICs9IF9fbjsKICAgfQogICAgICB9CgogIHB1YmxpYzoKCiAgICAgIHZp cnR1YWwKICAgICAgfmJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIHsKIF9NX2J1Zl91bmlmaWVkID0g ZmFsc2U7CiBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOwogICAgICB9CiMgMjczICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIGxvY2Fs ZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiBsb2NhbGUgX190 bXAodGhpcy0+Z2V0bG9jKCkpOwogdGhpcy0+aW1idWUoX19sb2MpOwogcmV0dXJuIF9fdG1wOwog ICAgICB9CiMgMjg5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw NDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVm IiAzCiAgICAgIGxvY2FsZQogICAgICBnZXRsb2MoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9i dWZfbG9jYWxlOyB9CiMgMzAyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3Ry ZWFtYnVmIiAzCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1ZihjaGFyX3R5 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3Ms IF9fbik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYs IGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla29m ZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtw b3MocG9zX3R5cGUgX19zcCwKICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNl OjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtwb3MoX19zcCwg X19tb2RlKTsgfQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMoKSB7IHJldHVybiB0aGlzLT5zeW5j KCk7IH0KIyAzMjkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYi IDMKICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9hdmFpbCgpCiAgICAgIHsKIHN0cmVhbXNpemUg X19yZXQgPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiByZXR1cm4gX19yZXQgPyBfX3JldCA6IHRo aXMtPnNob3dtYW55YygpOwogICAgICB9CiMgMzQzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIGludF90eXBlCiAgICAgIHNuZXh0YygpCiAgICAg IHsKIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogcmV0dXJuICh0cmFpdHNf dHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+c2J1bXBjKCksIF9fZW9mKQogID8gX19lb2YgOiB0aGlz LT5zZ2V0YygpKTsKICAgICAgfQojIDM1OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs dWRlL3N0cmVhbWJ1ZiIgMwogICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKIyAzNzAgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAgaW50X3R5 cGUKICAgICAgc2dldGMoKQogICAgICB7CiBpbnRfdHlwZSBfX3JldDsKIGlmIChfTV9pbl9jdXIg PCBfTV9pbl9lbmQpCiAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5f TV9pbl9jdXIpOwogZWxzZQogICBfX3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOwogcmV0dXJuIF9f cmV0OwogICAgICB9CiMgMzg5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3Ry ZWFtYnVmIiAzCiAgICAgIHN0cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90eXBlKiBfX3MsIHN0 cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBfX24pOyB9CiMg NDAzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAg IGludF90eXBlCiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKTsKIyA0MTUgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAgaW50X3R5cGUKICAg ICAgc3VuZ2V0YygpOwojIDQzMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0 cmVhbWJ1ZiIgMwogICAgICBpbnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUgX19jKTsKIyA0 NDUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAg c3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0 ZWQ6CiMgNDU5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAz CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIDogX01fYnVmX3VuaWZpZWQoZmFsc2UpLCBf TV9pbl9iZWcoMCksIF9NX2luX2N1cigwKSwKICAgICAgX01faW5fZW5kKDApLCBfTV9vdXRfYmVn KDApLCBfTV9vdXRfY3VyKDApLCBfTV9vdXRfZW5kKDApLAogICAgICBfTV9vdXRfbGltKDApLCBf TV9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksCiAgICAgIF9NX2J1Zl9sb2NhbGUobG9jYWxl KCkpCiAgICAgIHsgfQojIDQ3OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0 cmVhbWJ1ZiIgMwogICAgICBjaGFyX3R5cGUqCiAgICAgIGViYWNrKCkgY29uc3QgeyByZXR1cm4g X01faW5fYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGdwdHIoKSBjb25zdCB7IHJldHVy biBfTV9pbl9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWdwdHIoKSBjb25zdCB7IHJl dHVybiBfTV9pbl9lbmQ7IH0KIyA0OTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk ZS9zdHJlYW1idWYiIDMKICAgICAgdm9pZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1 ciArPSBfX247IH0KIyA1MDUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJl YW1idWYiIDMKICAgICAgdm9pZAogICAgICBzZXRnKGNoYXJfdHlwZSogX19nYmVnLCBjaGFyX3R5 cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQogICAgICB7CiBfTV9pbl9iZWcgPSBfX2di ZWc7CiBfTV9pbl9jdXIgPSBfX2duZXh0OwogX01faW5fZW5kID0gX19nZW5kOwogaWYgKCEoX01f bW9kZSAmIGlvc19iYXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYgX19nZW5kKQogICBf TV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsKICAgICAgfQojIDUyNyAiL2djYy9kamUv YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmVhbWJ1ZiIgMwogICAgICBjaGFyX3R5cGUqCiAg ICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2JlZzsgfQoKICAgICAgY2hhcl90eXBl KgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2N1cjsgfQoKICAgICAgY2hhcl90 eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0KIyA1NDMgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAgdm9pZAog ICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIgKz0gX19uOyB9CiMgNTUzICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIHZvaWQKICAgICAg c2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpCiAgICAgIHsKIF9NX291 dF9iZWcgPSBfTV9vdXRfY3VyID0gX01fb3V0X2xpbSA9IF9fcGJlZzsKIF9NX291dF9lbmQgPSBf X3BlbmQ7CiBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVu ZCkKICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0OwogICAgICB9CiMgNTc1ICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1 YWwgdm9pZAogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiBpZiAoX01f YnVmX2xvY2FsZSAhPSBfX2xvYykKICAgX01fYnVmX2xvY2FsZSA9IF9fbG9jOwogICAgICB9CiMg NTkzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAg IHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSxfVHJhaXRzPioKICAgICAgc2V0YnVm KGNoYXJfdHlwZSosIHN0cmVhbXNpemUpCiAgICAgIHsgcmV0dXJuIHRoaXM7IH0KIyA2MDQgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAgdmlydHVh bCBwb3NfdHlwZQogICAgICBzZWVrb2ZmKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwKICAg ICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAg ICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KIyA2MTYgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAgdmlydHVhbCBwb3NfdHlw ZQogICAgICBzZWVrcG9zKHBvc190eXBlLAogICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9z X2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5 cGUoLTEpKTsgfQojIDYyOSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmVh bWJ1ZiIgMwogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQojIDY1 MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBj LWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmVhbWJ1ZiIgMwogICAgICB2 aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQojIDY2NyAi L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmVhbWJ1ZiIgMwogICAgICB2aXJ0 dWFsIHN0cmVhbXNpemUKICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f bik7CiMgNjg5ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAz CiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgeyByZXR1cm4g dHJhaXRzX3R5cGU6OmVvZigpOyB9CiMgNzAyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdWZsb3coKQog ICAgICB7CiBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKIGNvbnN0IGJvb2wg X190ZXN0ZW9mID0KICAgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRoaXMtPnVuZGVyZmxvdygp LCBfX3JldCk7CiBpZiAoIV9fdGVzdGVvZiAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgIHsK ICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAr K19NX2luX2N1cjsKICAgfQogcmV0dXJuIF9fcmV0OwogICAgICB9CiMgNzI2ICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1YWwgaW50X3R5 cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7 IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA3NDQgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAg IHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwojIDc2OSAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0cmVhbWJ1ZiIgMwogICAgICB2aXJ0dWFs IGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQog ICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA4MDAgIi9nY2MvZGplL2J1aWxk L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9s aWJzdGRjKystdjMvaW5jbHVkZS9zdHJlYW1idWYiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2lj X3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyB9OwoKICAgICAgX19zdHJlYW1i dWZfdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IHJldHVy biAqdGhpczsgfTsKCiAgICB9Owp9CgoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvYml0cy9zdHJlYW1idWYudGNjIiAxIDMKIyAzOSAiL2djYy9kamUvYnVpbGQvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RyZWFtYnVmLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlw ZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciA8IF9NX2luX2VuZCkKIHsKICAgY2hhcl90eXBl IF9fYyA9ICp0aGlzLT5fTV9pbl9jdXI7CiAgIF9NX21vdmVfaW5fY3VyKDEpOwogICBfX3JldCA9 IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwogfQogICAgICBlbHNlCiBfX3JldCA9IHRo aXMtPnVmbG93KCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVm PF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPjo6CiAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5 cGUgX19yZXQ7CiAgICAgIGNvbnN0IGJvb2wgX190ZXN0cG9zID0gX01faW5fYmVnIDwgX01faW5f Y3VyOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCAhdHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+ X01faW5fY3VyWy0xXSkpCiBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9f aW50X3R5cGUoX19jKSk7CiAgICAgIGVsc2UKIHsKICAgX01fbW92ZV9pbl9jdXIoLTEpOwogICBf X3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+X01faW5fY3VyKTsKIH0KICAg ICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz Pjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN1 bmdldGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2JlZyA8 IF9NX2luX2N1cikKIHsKICAgX01fbW92ZV9pbl9jdXIoLTEpOwogICBfX3JldCA9IHRyYWl0c190 eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKIH0KICAgICAgZWxzZQogX19yZXQgPSB0aGlz LT5wYmFja2ZhaWwoKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBl IF9fcmV0OwogICAgICBpZiAoX01fb3V0X2N1ciA8IF9NX291dF9lbmQpCiB7CiAgICpfTV9vdXRf Y3VyID0gX19jOwogICBfTV9tb3ZlX291dF9jdXIoMSk7CiAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6 OnRvX2ludF90eXBlKF9fYyk7CiB9CiAgICAgIGVsc2UKIF9fcmV0ID0gdGhpcy0+b3ZlcmZsb3co dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVh bXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzZ2V0bihj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19y ZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiB7CiAgIHNpemVfdCBfX2J1Zl9sZW4g PSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgIHsKICAg ICAgIHNpemVfdCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgc2l6ZV90IF9fbGVu ID0gc3RkOjptaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICB0cmFpdHNfdHlwZTo6 Y29weShfX3MsIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgX19yZXQgKz0gX19sZW47CiAgICAg ICBfX3MgKz0gX19sZW47CiAgICAgICBfTV9tb3ZlX2luX2N1cihfX2xlbik7CiAgICAgfQoKICAg aWYgKF9fcmV0IDwgX19uKQogICAgIHsKICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93 KCk7CiAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBl Ojplb2YoKSkpCiAgewogICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19zKyssIHRyYWl0c190eXBl Ojp0b19jaGFyX3R5cGUoX19jKSk7CiAgICArK19fcmV0OwogIH0KICAgICAgIGVsc2UKICBicmVh azsKICAgICB9CiB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3Ry ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAg IHdoaWxlIChfX3JldCA8IF9fbikKIHsKICAgb2ZmX3R5cGUgX19idWZfbGVuID0gX01fb3V0X2Vu ZCAtIF9NX291dF9jdXI7CiAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgIHsKICAgICAgIG9mZl90 eXBlIF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAgICBvZmZfdHlwZSBfX2xlbiA9IHN0 ZDo6bWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgdHJhaXRzX3R5cGU6OmNvcHko X01fb3V0X2N1ciwgX19zLCBfX2xlbik7CiAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgIF9f cyArPSBfX2xlbjsKICAgICAgIF9NX21vdmVfb3V0X2N1cihfX2xlbik7CiAgICAgfQoKICAgaWYg KF9fcmV0IDwgX19uKQogICAgIHsKICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93 KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7CiAgICAgICBpZiAoIXRyYWl0c190eXBl OjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgewogICAgKytfX3JldDsK ICAgICsrX19zOwogIH0KICAgICAgIGVsc2UKICBicmVhazsKICAgICB9CiB9CiAgICAgIHJldHVy biBfX3JldDsKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxf Q2hhclQsIF9UcmFpdHM+JiBfX2lvcywKICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPiogX19zYmluLAogICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp bnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlw ZTsKCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICB0cnkKIHsKICAgZm9yICg7OykK ICAgICAgIHsKICAgICAgIHN0cmVhbXNpemUgX194dHJjdDsKICAgICAgIGNvbnN0IG9mZl90eXBl IF9fYXZhaWwgPSBfX3NiaW4tPl9NX2luX2VuZAogICAgICAgICAgICAgICAgICAgICAgICAgLSBf X3NiaW4tPl9NX2luX2N1cjsKICAgICAgICBpZiAoX19hdmFpbCkKICB7CiAgICBfX3h0cmN0ID0g X19zYm91dC0+c3B1dG4oX19zYmluLT5fTV9pbl9jdXIsIF9fYXZhaWwpOwogICAgX19yZXQgKz0g X194dHJjdDsKICAgIF9fc2Jpbi0+X01fbW92ZV9pbl9jdXIoX194dHJjdCk7CiAgICBpZiAoX194 dHJjdCAhPSBfX2F2YWlsKQogICAgICBicmVhazsKICB9CiAgICAgICAgZWxzZQogIHsKICAgIHN0 cmVhbXNpemUgX19jaGFyc3JlYWQ7CiAgICBjb25zdCBvZmZfdHlwZSBfX3NpemUgPSBfX3Nib3V0 LT5fTV9vdXRfZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9fc2JvdXQtPl9NX291 dF9jdXI7CiAgICBpZiAoX19zaXplKQogICAgICB7CiAgICAgICAgX0NoYXJUKiBfX2J1ZiA9CiAg IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAg ICAgICAgICAgICogX19zaXplKSk7CgoKICAgICAgICBfX2NoYXJzcmVhZCA9IF9fc2Jpbi0+c2dl dG4oX19idWYsIF9fc2l6ZSk7CiAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNwdXRuKF9fYnVm LCBfX2NoYXJzcmVhZCk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewogICAgICAgIF9feHRyY3Qg PSBfX2NoYXJzcmVhZCA9IDA7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19jID0gX19zYmluLT5z Z2V0YygpOwogICAgICAgIGlmICghX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfVHJhaXRzOjpl b2YoKSkpCiAgIHsKICAgICArK19fY2hhcnNyZWFkOwogICAgIGlmIChfVHJhaXRzOjplcV9pbnRf dHlwZShfX3Nib3V0LT5vdmVyZmxvdyhfX2MpLAogICAgICAgICBfVHJhaXRzOjplb2YoKSkpCiAg ICAgICBicmVhazsKICAgICArK19feHRyY3Q7CiAgICAgX19zYmluLT5zYnVtcGMoKTsKICAgfQog ICAgICB9CiAgICBfX3JldCArPSBfX3h0cmN0OwogICAgaWYgKF9feHRyY3QgIT0gX19jaGFyc3Jl YWQpCiAgICAgIGJyZWFrOwogIH0KICAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19z YmluLT5zZ2V0YygpLCBfVHJhaXRzOjplb2YoKSkpCiAgICBicmVhazsKICAgICAgIH0KIH0KICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiB7CiAgIF9faW9zLnNldHN0YXRlKGlvc19iYXNl OjpmYWlsYml0KTsKICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6ZmFpbGJp dCkgIT0gMCkKICAgICB0aHJvdzsKIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCiAg ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPjsKICBleHRlcm4gdGVt cGxhdGUKICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxjaGFy PiYsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiosCiAgICAgICAgYmFzaWNfc3RyZWFtYnVmPGNoYXI+ Kik7CiMgMjcwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdHJlYW1i dWYudGNjIiAzCn0KIyA4MTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9zdHJl YW1idWYiIDIgMwojIDUxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaW9zIiAy IDMKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19pb3Mu aCIgMSAzCiMgNDAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2lj X2lvcy5oIiAzCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0 cmVhbWJ1Zl9pdGVyYXRvci5oIiAxIDMKIyA0MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p bmNsdWRlL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDMKCgoKCgpuYW1lc3BhY2Ugc3RkCnsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mg aXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3Jf dGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlLAogICAgICAgICAgICBfQ2hh clQqLCBfQ2hhclQmPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICBwcml2YXRl OgoKCgoKCgoKICAgICAgbXV0YWJsZSBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgaW50 X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0aHJv dygpCiAgICAgIDogX01fc2J1ZigwKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKICAg ICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgdGhyb3coKQogICAgICA6 IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgogICAg ICBpc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAg OiBfTV9zYnVmKF9fcyksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCgogICAgICBjaGFy X3R5cGUKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6 OnRvX2NoYXJfdHlwZShfTV9nZXQoKSk7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3ImCiAg ICAgIG9wZXJhdG9yKysoKQogICAgICB7CiBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190 eXBlOjplb2YoKTsKIGlmIChfTV9zYnVmICYmIHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9z YnVmLT5zYnVtcGMoKSwgX19lb2YpKQogICBfTV9zYnVmID0gMDsKIGVsc2UKICAgX01fYyA9IF9f ZW9mOwogcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAg ICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0 c190eXBlOjplb2YoKTsKIGlzdHJlYW1idWZfaXRlcmF0b3IgX19vbGQgPSAqdGhpczsKIGlmIChf TV9zYnVmCiAgICAgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX29sZC5fTV9jID0gX01f c2J1Zi0+c2J1bXBjKCkpLAogICAgIF9fZW9mKSkKICAgX01fc2J1ZiA9IDA7CiBlbHNlCiAgIF9N X2MgPSBfX2VvZjsKIHJldHVybiBfX29sZDsKICAgICAgfQoKCgoKICAgICAgYm9vbAogICAgICBl cXVhbChjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0CiAgICAgIHsKIGNvbnN0 IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogYm9vbCBfX3RoaXNlb2YgPSB0 cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fZ2V0KCksIF9fZW9mKTsKIGJvb2wgX19iZW9mID0g dHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYi5fTV9nZXQoKSwgX19lb2YpOwogcmV0dXJuIChf X3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoK CiAgICBwcml2YXRlOgogICAgICBpbnRfdHlwZQogICAgICBfTV9nZXQoKSBjb25zdAogICAgICB7 CiBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKIGludF90eXBlIF9f cmV0ID0gX19lb2Y7CiBpZiAoX01fc2J1ZikKICAgewogICAgIGlmICghdHJhaXRzX3R5cGU6OmVx X2ludF90eXBlKF9NX2MsIF9fZW9mKSkKICAgICAgIF9fcmV0ID0gX01fYzsKICAgICBlbHNlCiAg ICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX3JldCA9IF9NX3NidWYtPnNnZXRj KCkpLCBfX2VvZikpCiAgX01fc2J1ZiA9IDA7CiAgIH0KIHJldHVybiBfX3JldDsKICAgICAgfQog ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh clQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh clQsIF9UcmFpdHM+JiBfX2IpCiAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4m IF9fYSwKICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4m IF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9y CiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2 b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVk ZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2 YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7 CgogICAgcHVibGljOgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19z KSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3Ni dWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0 aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAg ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKQogICAg ICB7CiBpZiAoIV9NX2ZhaWxlZCAmJgogICAgIF9UcmFpdHM6OmVxX2ludF90eXBlKF9NX3NidWYt PnNwdXRjKF9fYyksIF9UcmFpdHM6OmVvZigpKSkKICAgX01fZmFpbGVkID0gdHJ1ZTsKIHJldHVy biAqdGhpczsKICAgICAgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0 b3IqKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9p dGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRo aXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBib29sCiAgICAgIGZhaWxlZCgpIGNv bnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fZmFpbGVkOyB9CgogICAgICBvc3RyZWFtYnVm X2l0ZXJhdG9yJgogICAgICBfTV9wdXQoY29uc3QgX0NoYXJUKiBfX3dzLCBzdHJlYW1zaXplIF9f bGVuKQogICAgICB7CiBpZiAoX19idWlsdGluX2V4cGVjdCghX01fZmFpbGVkLCB0cnVlKQogICAg ICYmIF9fYnVpbHRpbl9leHBlY3QodGhpcy0+X01fc2J1Zi0+c3B1dG4oX193cywgX19sZW4pICE9 IF9fbGVuLCBmYWxzZSkpCiAgIF9NX2ZhaWxlZCA9IHRydWU7CiByZXR1cm4gKnRoaXM7CiAgICAg IH0KICAgIH07Cn0KIyA0MiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv YmFzaWNfaW9zLmgiIDIgMwoKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12 My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli c3RkYysrLXYzL2luY2x1ZGUvY3djdHlwZSIgMSAzCiMgNDggIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9jd2N0eXBlIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg MSAzIDQKIyA0NSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgp0 eXBlZGVmIHdpbnRfdCAoKndjdHJhbnNfdCkod2ludF90KTsKCmV4dGVybiB3aW50X3QgdG93Y3Ry YW5zKHdpbnRfdCwgd2N0cmFuc190KTsKZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zKGNvbnN0IGNo YXIgKik7CgoKCgoKCgpleHRlcm4gaW50IGlzd2JsYW5rKHdpbnRfdCk7CgoKCgp9CiMgNTMgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jd2N0eXBlIiAyIDMKIyA0NyAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoK Cm5hbWVzcGFjZSBzdGQKewojIDYzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2b2lk CiAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19i YXNlID0gMTApOwoKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX19jb252ZXJ0X3RvX3YoY29u c3QgY2hhciosIGxvbmcmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCiAgICAgY29uc3QgX19jX2xvY2Fs ZSYsIGludCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fY29udmVydF90b192KGNvbnN0 IGNoYXIqLCB1bnNpZ25lZCBsb25nJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgIGNvbnN0IF9f Y19sb2NhbGUmLCBpbnQpOwoKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX19jb252ZXJ0X3Rv X3YoY29uc3QgY2hhciosIGxvbmcgbG9uZyYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAgICBjb25z dCBfX2NfbG9jYWxlJiwgaW50KTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX19jb252ZXJ0 X3RvX3YoY29uc3QgY2hhciosIHVuc2lnbmVkIGxvbmcgbG9uZyYsIGlvc19iYXNlOjppb3N0YXRl JiwKICAgICBjb25zdCBfX2NfbG9jYWxlJiwgaW50KTsKCgogIHRlbXBsYXRlPD4KICAgIHZvaWQK ICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqLCBmbG9hdCYsIGlvc19iYXNlOjppb3N0YXRl JiwKICAgICBjb25zdCBfX2NfbG9jYWxlJiwgaW50KTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAog ICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciosIGRvdWJsZSYsIGlvc19iYXNlOjppb3N0YXRl JiwKICAgICBjb25zdCBfX2NfbG9jYWxlJiwgaW50KTsKCiB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAg ICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiwgbG9uZyBkb3VibGUmLCBpb3NfYmFzZTo6aW9z dGF0ZSYsCiAgICAgY29uc3QgX19jX2xvY2FsZSYsIGludCk7CgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFkCiAgICB7CiAgICAg IHN0YXRpYyB2b2lkCiAgICAgIF9TX3BhZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwg X0NoYXJUKiBfX25ld3MsCiAgICAgIGNvbnN0IF9DaGFyVCogX19vbGRzLCBjb25zdCBzdHJlYW1z aXplIF9fbmV3bGVuLAogICAgICBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLCBjb25zdCBib29s IF9fbnVtKTsKICAgIH07CiMgMTI1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBi b29sCiAgICBfX3ZlcmlmeV9ncm91cGluZyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19n cm91cGluZywKICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZ190bXApOwoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fYWRkX2dy b3VwaW5nKF9DaGFyVCogX19zLCBfQ2hhclQgX19zZXAsCiAgICAgY29uc3QgY2hhciogX19nYmVn LCBjb25zdCBjaGFyKiBfX2dlbmQsCiAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25zdCBf Q2hhclQqIF9fbGFzdCk7CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu ZQogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+CiAgICBfX3dyaXRlKG9zdHJlYW1idWZf aXRlcmF0b3I8X0NoYXJUPiBfX3MsIGNvbnN0IF9DaGFyVCogX193cywgaW50IF9fbGVuKQogICAg ewogICAgICBfX3MuX01fcHV0KF9fd3MsIF9fbGVuKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0K CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBpbmxp bmUKICAgIF9PdXRJdGVyCiAgICBfX3dyaXRlKF9PdXRJdGVyIF9fcywgY29uc3QgX0NoYXJUKiBf X3dzLCBpbnQgX19sZW4pCiAgICB7CiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVu OyBfX2orKywgKytfX3MpCiAqX19zID0gX193c1tfX2pdOwogICAgICByZXR1cm4gX19zOwogICAg fQoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9iaXRzL2N0eXBlX2Jhc2UuaCIgMSAzCiMgMzYgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvY3R5cGVfYmFzZS5o IiAzCiAgc3RydWN0IGN0eXBlX2Jhc2UKICB7CgogICAgdHlwZWRlZiBjb25zdCBpbnQqIF9fdG9f dHlwZTsKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IG1hc2s7CiAgICBzdGF0aWMgY29uc3Qg bWFzayB1cHBlciA9IDB4NDAwOwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSAweDA0MDsK ICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0gMHgwMDE7CiAgICBzdGF0aWMgY29uc3QgbWFz ayBkaWdpdCA9IDB4MDEwOwogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gMHg4MDA7CiAg ICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IDB4MjAwOwogICAgc3RhdGljIGNvbnN0IG1hc2sg cHJpbnQgPSAweDA4MDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gMHgwMjA7CiAgICBz dGF0aWMgY29uc3QgbWFzayBjbnRybCA9IDB4MDA4OwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHVu Y3QgPSAweDEwMDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gMHgwMDI7CiAgfTsKIyAx NjggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMu aCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fi c3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJv b2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBp cyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192 ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsg fQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBj aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjb25zdCBjaGFy X3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNv bnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9u b3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hh cl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9 CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBj b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBw ZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlw ZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAg ICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3Qg Y2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9f bG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIq CiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlw ZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwg X190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19k ZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0 KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBl KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFy ICpfX3RvKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwg X19kZmF1bHQsIF9fdG8pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBf X2N0eXBlX2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9f cmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7 IH0KCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9f YykgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lz KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgIG1hc2sq IF9fdmVjKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg ZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICBjb25zdCBjaGFy X3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgog ICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgY29u c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQog ICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25z dCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy X3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRv X3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog X19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4o Y2hhcikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRl bihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAgIGNoYXJfdHlwZSog X19kZXN0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNo YXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBj aGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo YXJfdHlwZSogX19oaSwKICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7 CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBw dWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlw ZTo6bWFzayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp dAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8 X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5j dHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5 cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19p cyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192 ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5f aXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25v dChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgY29uc3QgY2hhcl90eXBlKiBf X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hh cl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg ZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSBfX2Mp IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIo Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmly dHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgICAgdmly dHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBj aGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIK ICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSog X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVz dCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6 OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8Y2hh cj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNoYXI+CiAgICB7CiAgICBwdWJsaWM6 CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIF9f Y19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CiAgICAgIGJvb2wgX01fZGVsOwogICAgICBfX3Rv X3R5cGUgX01fdG91cHBlcjsKICAgICAgX190b190eXBlIF9NX3RvbG93ZXI7CiAgICAgIGNvbnN0 IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7 CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVfc2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1 bnNpZ25lZCBjaGFyPigtMSk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShjb25zdCBtYXNr KiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLCBzaXplX3QgX19yZWZzID0gMCk7Cgog ICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgbWFzayog X190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwKICAgICBzaXplX3QgX19yZWZzID0gMCk7 CgogICAgICBpbmxpbmUgYm9vbAogICAgICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0OwoK ICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIGlzKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0 IGNoYXIqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFy KgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBf X2hpKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX25vdChtYXNr IF9fbSwgY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgcHJv dGVjdGVkOgogICAgICBjb25zdCBtYXNrKgogICAgICB0YWJsZSgpIGNvbnN0IHRocm93KCkKICAg ICAgeyByZXR1cm4gX01fdGFibGU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBtYXNrKgogICAgICBj bGFzc2ljX3RhYmxlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7Cgog ICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNv bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNo YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9f bSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoK ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19t LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0 OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNv bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hh cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVh bCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmly dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBj b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg ICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAg IGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSog X19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90 eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq IF9faGksCiAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRl bXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CiMgNTA0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk YysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL2N0eXBlX2lubGluZS5o IiAxIDMKIyAzNyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wKICBjdHlwZTxjaGFyPjo6 CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJuIChfX2xjX2N0eXBlKS5v YmotPm1hc2tbX19jXSAmIF9fbTsgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBp cyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29u c3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCiAgICAgICpfX3ZlYysrID0gKF9fbGNf Y3R5cGUpLm9iai0+bWFza1sqX19sb3crK107CiAgICByZXR1cm4gX19oaWdoOwogIH0KCiAgY29u c3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciog X19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBf X2hpZ2ggJiYgIXRoaXMtPmlzKF9fbSwgKl9fbG93KSkKICAgICAgKytfX2xvdzsKICAgIHJldHVy biBfX2xvdzsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1h c2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsK ICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCAmJiB0aGlzLT5pcyhfX20sICpfX2xvdykgIT0gMCkK ICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CiMgNTA1ICIvZ2NjL2RqZS9idWls ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lIDogcHVibGljIGN0eXBl PF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl OwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6 ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5 cGVfYnluYW1lKCkgeyB9OwogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxj aGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgogIHRlbXBsYXRl PD4KICAgIGN0eXBlX2J5bmFtZTx3Y2hhcl90Pjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBz aXplX3QgcmVmcyk7CgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0 cy9jb2RlY3Z0LmgiIDEgMwojIDQ1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv Yml0cy9jb2RlY3Z0LmgiIDMKCgogIGNsYXNzIGNvZGVjdnRfYmFzZQogIHsKICBwdWJsaWM6CiAg ICBlbnVtIHJlc3VsdAogICAgewogICAgICBvaywKICAgICAgcGFydGlhbCwKICAgICAgZXJyb3Is CiAgICAgIG5vY29udgogICAgfTsKICB9OwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVy blQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgX19jb2Rl Y3Z0X2Fic3RyYWN0X2Jhc2UKICAgIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjb2Rl Y3Z0X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpy ZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0 eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVf dHlwZTsKCgogICAgICByZXN1bHQKICAgICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0 IGludGVybl90eXBlKiBfX2Zyb20sCiAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBj b25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICBleHRlcm5fdHlwZSogX190bywgZXh0 ZXJuX3R5cGUqIF9fdG9fZW5kLAogICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAg ICAgewogcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9f ZnJvbV9uZXh0LAogICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAg ICAgIHJlc3VsdAogICAgICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBl KiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICBleHRlcm5fdHlwZSomIF9fdG9f bmV4dCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChfX3N0YXRlLCBfX3Rv LF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAgICBpbihzdGF0ZV90eXBl JiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogIGNvbnN0IGV4dGVybl90eXBl KiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogIGludGVybl90 eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgaW50ZXJuX3R5cGUqJiBfX3RvX25l eHQpIGNvbnN0CiAgICAgIHsKIHJldHVybiB0aGlzLT5kb19pbihfX3N0YXRlLCBfX2Zyb20sIF9f ZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsK ICAgICAgfQoKICAgICAgaW50CiAgICAgIGVuY29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgICB7 IHJldHVybiB0aGlzLT5kb19lbmNvZGluZygpOyB9CgogICAgICBib29sCiAgICAgIGFsd2F5c19u b2NvbnYoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Fsd2F5c19ub2Nv bnYoKTsgfQoKICAgICAgaW50CiAgICAgIGxlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z dCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNp emVfdCBfX21heCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUs IF9fZnJvbSwgX19lbmQsIF9fbWF4KTsgfQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBj b25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAg IHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uo c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmly dHVhbAogICAgICB+X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwg cmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlw ZSogX19mcm9tLAogICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50 ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90 eXBlKiBfX3RvX2VuZCwKICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsK CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0 ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5 cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRv X2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAg Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9t X25leHQsCiAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAg ICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQK ICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgYm9v bAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0 dWFsIGludAogICAgICBkb19sZW5ndGgoc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBf X2Zyb20sCiAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0g MDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygp ID0gMDsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F eHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAogICAgOiBwdWJsaWMg X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7 CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVy blQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKICAgIHBy b3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jb2RlY3Z0OwoKICAgIHB1Ymxp YzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2Rl Y3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9J bnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgICBleHBsaWNpdAog ICAgICBjb2RlY3Z0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAg cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0 dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJu X3R5cGUqIF9fZnJvbSwKICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0 IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRl cm5fdHlwZSogX190b19lbmQsCiAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsK CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0 ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5 cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4o c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICBjb25z dCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4 dCwKICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgIGlu dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv X2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19h bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv X2xlbmd0aChzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICBjb25zdCBl eHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGlu dAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4K ICAgIGxvY2FsZTo6aWQgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsK CgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90Pgog ICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90 PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGludGVybl90eXBlOwogICAg ICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRl X3R5cGU7CgogICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2NvZGVj dnQ7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxp Y2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAg ICAgY29kZWN2dChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHBy b3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCBy ZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBl KiBfX2Zyb20sCiAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRl cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5 cGUqIF9fdG9fZW5kLAogICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAg ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4 dGVybl90eXBlKiBfX3RvLAogICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYg X190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRl X3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgY29uc3QgZXh0 ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAg ICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICBpbnRlcm5f dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNv ZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlz X25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5n dGgoc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgY29uc3QgZXh0ZXJu X3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAg ICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKIyAzMzYgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2NvZGVjdnQuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNs YXNzIGNvZGVjdnRfYnluYW1lIDogcHVibGljIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf U3RhdGVUPgogICAgewogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0X2J5 bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8 X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihfX3JlZnMpCiAgICAgIHsKIGlmICh0aGlzLT5f TV9jX2xvY2FsZV9jb2RlY3Z0ICE9IHRoaXMtPl9TX2NfbG9jYWxlKQogICBfU19kZXN0cm95X2Nf bG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2NvZGVjdnQpOwogX1NfY3JlYXRlX2NfbG9jYWxlKHRo aXMtPl9NX2NfbG9jYWxlX2NvZGVjdnQsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnRfYnluYW1lKCkgeyB9CiAgICB9OwojIDUzMCAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMK CgogIGNsYXNzIF9fbnVtX2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBlbnVtCiAgICAgIHsKICAg ICAgICBfU19taW51cywKICAgICAgICBfU19wbHVzLAogICAgICAgIF9TX3gsCiAgICAgICAgX1Nf WCwKICAgICAgICBfU19kaWdpdHMsCiAgICAgICAgX1NfZGlnaXRzX2VuZCA9IF9TX2RpZ2l0cyAr IDE2LAogICAgICAgIF9TX3VkaWdpdHMgPSBfU19kaWdpdHNfZW5kLAogICAgICAgIF9TX3VkaWdp dHNfZW5kID0gX1NfdWRpZ2l0cyArIDE2LAogICAgICAgIF9TX2UgPSBfU19kaWdpdHMgKyAxNCwK ICAgICAgICBfU19FID0gX1NfdWRpZ2l0cyArIDE0LAogX1NfZW5kID0gX1NfdWRpZ2l0c19lbmQK ICAgICAgfTsKCgoKCgoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfU19hdG9tc19vdXQ7CgogIHBy b3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIqIF9TX2F0b21zX2luOwoKICAgIGVudW0K ICAgIHsKICAgICAgX01femVybywKICAgICAgX01fZSA9IF9NX3plcm8gKyAxMCwKICAgICAgX01f RSA9IF9NX3plcm8gKyAxMSwKICAgICAgX01fc2l6ZSA9IDIxICsgMQogICAgfTsKCgoKICAgIHN0 YXRpYyB2b2lkCiAgICBfU19mb3JtYXRfZmxvYXQoY29uc3QgaW9zX2Jhc2UmIF9faW8sIGNoYXIq IF9fZnB0ciwgY2hhciBfX21vZCk7CgoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19mb3JtYXRfaW50 KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsIGNoYXIgX19t b2RsKTsKICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVu Y3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0 cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAg ICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2Fu ZHNfc2VwOwogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY29uc3QgY2hhcl90 eXBlKiBfTV90cnVlbmFtZTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9mYWxzZW5hbWU7Cgog ICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0g MCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0 KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBz aXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0 aWFsaXplX251bXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFs X3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9 CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3Vw aW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAg c3RyaW5nX3R5cGUKICAgICAgdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b190cnVlbmFtZSgpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBmYWxzZW5hbWUoKSBjb25z dAogICAgICB7IHJldHVybiB0aGlzLT5kb19mYWxzZW5hbWUoKTsgfQoKICAgIHByb3RlY3RlZDoK ICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3QoKTsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl CiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFs X3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2Vw KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVh bCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91 cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb190cnVlbmFtZSgpIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1lOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190 eXBlCiAgICAgIGRvX2ZhbHNlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNlbmFt ZTsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxl IF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0ZTw+CiAgICBudW1w dW5jdDxjaGFyPjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bXB1 bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKIyA2 NzcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5bmFt ZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CgogICAgICBfX2NfbG9jYWxlIF9NX2Nf bG9jYWxlX251bXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAg ICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90 IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsKIF9T X2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCwgX19zKTsKIF9NX2luaXRpYWxp emVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAgICB9CgogICAgcHJvdGVjdGVk OgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUoKQogICAgICB7IF9TX2Rlc3Ry b3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBudW1fZ2V0IDogcHVi bGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBfX251bV9iYXNlCiAgICB7CiAgICBwdWJsaWM6Cgog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVy X3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg IG51bV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3Yp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l cnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0 ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19l bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0 ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3Yp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l cnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0 ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQo X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAg IGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAg ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25n IGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5k LCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90 eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f Z2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAg ICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAg ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYg X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8s IF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwgfm51bV9nZXQoKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0X2Zsb2F0 KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAg ICAgICAgc3RyaW5nJiBfX3h0cmMpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2V4 dHJhY3RfaW50KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0 YXRlJiwKICAgICAgIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBp dGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlv c19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwKICAgICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNl JiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICB1bnNpZ25lZCBpbnQmKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgIHVuc2lnbmVkIGxv bmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90 eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAg ICBsb25nIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dl dChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsCiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRl cl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jh c2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgIGxvbmcgZG91YmxlJikgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICB2b2lkKiYpIGNv bnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy PgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwojIDg0OCAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG51 bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9fbnVtX2Jhc2UKICAgIHsKICAg IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf T3V0SXRlciBpdGVyX3R5cGU7CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhw bGljaXQKICAgICAgbnVtX3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9f cmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i YXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBl CiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxs LCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBf X2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywg aW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgdW5zaWduZWQgbG9uZyBfX3YpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9 CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19m LCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAg ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAog ICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19w dXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQo aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9f dikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um IF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgbG9uZyBkb3VibGUgX192KSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRl cl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUg X19maWxsLAogICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZl cnRfZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAg IGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZ3Jv dXBfZmxvYXQoY29uc3Qgc3RyaW5nJiBfX2dyb3VwaW5nLCBjaGFyX3R5cGUgX19zZXAsCiAgICAg ICBjb25zdCBjaGFyX3R5cGUqIF9fcCwgY2hhcl90eXBlKiBfX25ldywgY2hhcl90eXBlKiBfX2Nz LAogICAgICAgaW50JiBfX2xlbikgY29uc3Q7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFs dWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfaW50KGl0ZXJfdHlwZSwg aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgIF9WYWx1ZVQgX192KSBj b25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZ3JvdXBfaW50KGNvbnN0IHN0cmluZyYgX19ncm91 cGluZywgY2hhcl90eXBlIF9fc2VwLAogICAgIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUqIF9f bmV3LCBjaGFyX3R5cGUqIF9fY3MsCiAgICAgaW50JiBfX2xlbikgY29uc3Q7CgogICAgICB2b2lk CiAgICAgIF9NX3BhZChjaGFyX3R5cGUgX19maWxsLCBzdHJlYW1zaXplIF9fdywgaW9zX2Jhc2Um IF9faW8sCiAgICAgIGNoYXJfdHlwZSogX19uZXcsIGNvbnN0IGNoYXJfdHlwZSogX19jcywgaW50 JiBfX2xlbikgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1fcHV0KCkgeyB9OwoKICAg ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBj aGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxv bmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy X3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZykgY29uc3Q7 CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jh c2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBl IF9fZmlsbCwgdW5zaWduZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGws IGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0 KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3Yp IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwg aW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0OwogICAg fTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBs b2NhbGU6OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoK CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY29sbGF0ZTsKCiAgICBwdWJsaWM6CiAgICAg IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShzaXpl X3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9j X2xvY2FsZV9jb2xsYXRlID0gX1NfY19sb2NhbGU7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGNv bGxhdGUoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2Fs ZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19jbG9uZV9j X2xvY2FsZShfX2Nsb2MpOyB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQq IF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwg Y29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY29tcGFy ZShfX2xvMSwgX19oaTEsIF9fbG8yLCBfX2hpMik7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAg IHRyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJhbnNmb3JtKF9fbG8sIF9faGkpOyB9CgogICAgICBs b25nCiAgICAgIGhhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2hhc2goX19sbywgX19oaSk7IH0KCgogICAgICBp bnQKICAgICAgX01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBjb25zdDsK CiAgICAgIHNpemVfdAogICAgICBfTV90cmFuc2Zvcm0oX0NoYXJUKiwgY29uc3QgX0NoYXJUKiwg c2l6ZV90KSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2xsYXRl KCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9Cgog ICAgICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNv bnN0IF9DaGFyVCogX19oaTEsCiAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCog X19oaTIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb190cmFuc2Zv cm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwoKICAgICAg dmlydHVhbCBsb25nCiAgICAgIGRvX2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hh clQqIF9faGkpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg bG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgaW50CiAg ICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikgY29u c3Q7CgogIHRlbXBsYXRlPD4KICAgIHNpemVfdAogICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNm b3JtKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KSBjb25zdDsKIyAxMDQxICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xs YXRlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAg ICAgZXhwbGljaXQKICAgICAgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3Qg X19yZWZzID0gMCkKICAgICAgOiBjb2xsYXRlPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiBfU19k ZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2NvbGxhdGUpOwogX1NfY3JlYXRlX2Nf bG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2NvbGxhdGUsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90 ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoK CiAgY2xhc3MgdGltZV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9f b3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGNsYXNzIF9fdGltZXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsK ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIF9fY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9j YWxlOjppZCBpZDsKCgogICAgICBzdGF0aWMgY29uc3QgX0NoYXJUKiBfU190aW1lem9uZXNbMTRd OwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7 CiAgICAgIGNoYXIqIF9NX25hbWVfdGltZXB1bmN0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2Rh dGVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZXJhX2Zvcm1hdDsKICAgICAg Y29uc3QgX0NoYXJUKiBfTV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1l X2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0No YXJUKiBfTV9hbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9wbTsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9hbV9wbV9mb3JtYXQ7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkxOwogICAgICBj b25zdCBfQ2hhclQqIF9NX2RheTI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MzsKICAgICAg Y29uc3QgX0NoYXJUKiBfTV9kYXk0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTU7CiAgICAg IGNvbnN0IF9DaGFyVCogX01fZGF5NjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk3OwoKCiAg ICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2ExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9h MjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f ZGF5X2E0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNTsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9kYXlfYTY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E3OwoKCiAgICAgIGNvbnN0 IF9DaGFyVCogX01fbW9udGgwMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAyOwogICAg ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgw NDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA1OwogICAgICBjb25zdCBfQ2hhclQqIF9N X21vbnRoMDY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNzsKICAgICAgY29uc3QgX0No YXJUKiBfTV9tb250aDA4OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDk7CiAgICAgIGNv bnN0IF9DaGFyVCogX01fbW9udGgxMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDExOwog ICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTI7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9t b250aF9hMDE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAyOwogICAgICBjb25zdCBf Q2hhclQqIF9NX21vbnRoX2EwMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDQ7CiAg ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21v bnRoX2EwNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDc7CiAgICAgIGNvbnN0IF9D aGFyVCogX01fbW9udGhfYTA4OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwOTsKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u dGhfYTExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMjsKCiAgICBwdWJsaWM6CiAg ICAgIGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAg IGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFy KiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgX01fcHV0KF9DaGFy VCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IF9DaGFyVCogX19mb3JtYXQsCiAgICAgIGNv bnN0IHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV9mb3JtYXRzKGNv bnN0IF9DaGFyVCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoKIF9fZGF0ZVswXSA9IF9NX2RhdGVf Zm9ybWF0OwogX19kYXRlWzFdID0gX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2 b2lkCiAgICAgIF9NX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX3RpbWUpIGNvbnN0CiAg ICAgIHsKCiBfX3RpbWVbMF0gPSBfTV90aW1lX2Zvcm1hdDsKIF9fdGltZVsxXSA9IF9NX3RpbWVf ZXJhX2Zvcm1hdDsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9hbXBtKGNvbnN0IF9DaGFy VCoqIF9fYW1wbSkgY29uc3QKICAgICAgewogX19hbXBtWzBdID0gX01fYW07CiBfX2FtcG1bMV0g PSBfTV9wbTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhj b25zdCBfQ2hhclQqKiBfX2R0KSBjb25zdAogICAgICB7CgogX19kdFswXSA9IF9NX2RhdGVfdGlt ZV9mb3JtYXQ7CiBfX2R0WzFdID0gX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAg ICAgIHZvaWQKICAgICAgX01fZGF5cyhjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAg IHsKIF9fZGF5c1swXSA9IF9NX2RheTE7CiBfX2RheXNbMV0gPSBfTV9kYXkyOwogX19kYXlzWzJd ID0gX01fZGF5MzsKIF9fZGF5c1szXSA9IF9NX2RheTQ7CiBfX2RheXNbNF0gPSBfTV9kYXk1Owog X19kYXlzWzVdID0gX01fZGF5NjsKIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAgICAgIH0KCiAgICAg IHZvaWQKICAgICAgX01fZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNv bnN0CiAgICAgIHsKIF9fZGF5c1swXSA9IF9NX2RheV9hMTsKIF9fZGF5c1sxXSA9IF9NX2RheV9h MjsKIF9fZGF5c1syXSA9IF9NX2RheV9hMzsKIF9fZGF5c1szXSA9IF9NX2RheV9hNDsKIF9fZGF5 c1s0XSA9IF9NX2RheV9hNTsKIF9fZGF5c1s1XSA9IF9NX2RheV9hNjsKIF9fZGF5c1s2XSA9IF9N X2RheV9hNzsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHMoY29uc3QgX0NoYXJU KiogX19tb250aHMpIGNvbnN0CiAgICAgIHsKIF9fbW9udGhzWzBdID0gX01fbW9udGgwMTsKIF9f bW9udGhzWzFdID0gX01fbW9udGgwMjsKIF9fbW9udGhzWzJdID0gX01fbW9udGgwMzsKIF9fbW9u dGhzWzNdID0gX01fbW9udGgwNDsKIF9fbW9udGhzWzRdID0gX01fbW9udGgwNTsKIF9fbW9udGhz WzVdID0gX01fbW9udGgwNjsKIF9fbW9udGhzWzZdID0gX01fbW9udGgwNzsKIF9fbW9udGhzWzdd ID0gX01fbW9udGgwODsKIF9fbW9udGhzWzhdID0gX01fbW9udGgwOTsKIF9fbW9udGhzWzldID0g X01fbW9udGgxMDsKIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoMTE7CiBfX21vbnRoc1sxMV0gPSBf TV9tb250aDEyOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX21vbnRoc19hYmJyZXZpYXRl ZChjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKICAgICAgewogX19tb250aHNbMF0gPSBf TV9tb250aF9hMDE7CiBfX21vbnRoc1sxXSA9IF9NX21vbnRoX2EwMjsKIF9fbW9udGhzWzJdID0g X01fbW9udGhfYTAzOwogX19tb250aHNbM10gPSBfTV9tb250aF9hMDQ7CiBfX21vbnRoc1s0XSA9 IF9NX21vbnRoX2EwNTsKIF9fbW9udGhzWzVdID0gX01fbW9udGhfYTA2OwogX19tb250aHNbNl0g PSBfTV9tb250aF9hMDc7CiBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2EwODsKIF9fbW9udGhzWzhd ID0gX01fbW9udGhfYTA5OwogX19tb250aHNbOV0gPSBfTV9tb250aF9hMTA7CiBfX21vbnRoc1sx MF0gPSBfTV9tb250aF9hMTE7CiBfX21vbnRoc1sxMV0gPSBfTV9tb250aF9hMTI7CiAgICAgIH0K CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfl9fdGltZXB1bmN0KCk7CgoKICAg ICAgdm9pZAogICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9 IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6 OmlkIF9fdGltZXB1bmN0PF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY29uc3QgY2hh cioKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfU190aW1lem9uZXNbMTRdOwoKICB0ZW1wbGF0ZTw+ CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3Qo X19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5j dDxjaGFyPjo6X01fcHV0KGNoYXIqLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCB0bSopIGNv bnN0OwojIDEyODEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2Fs ZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNvbnN0IF9DaGFy VCogX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzWzE0XTsKCgojIDEgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvdGlt ZV9tZW1iZXJzLmgiIDEgMwojIDM3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL3RpbWVfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6 ZV90IF9fcmVmcykKICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICB7CiAgICAgIF9NX25h bWVfdGltZXB1bmN0ID0gX1NfY19uYW1lOwogICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfX3RpbWVwdW5jdDxfQ2hh clQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAogICAg ICAgICBzaXplX3QgX19yZWZzKQogICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgIHsKICAg ICAgX01fbmFtZV90aW1lcHVuY3QgPSBuZXcgY2hhcltzdHJsZW4oX19zKSArIDFdOwogICAgICBz dHJjcHkoX01fbmFtZV90aW1lcHVuY3QsIF9fcyk7CiAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1 bmN0KF9fY2xvYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fdGlt ZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCiAgICB7CiAgICAgIGlmIChfU19jX25hbWUg IT0gX01fbmFtZV90aW1lcHVuY3QpCiBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CiAgICAg IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKICAgIH0KIyAxMjg2 ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfZmFjZXRzLmgi IDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBj bGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy VD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhw bGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpm YWNldCAoX19yZWZzKSB7IH0KCiAgICAgIGRhdGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVyX3R5 cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF90aW1lKF9fYmVnLCBfX2VuZCwgX19pbywg X19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X2dldF9kYXRlKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVy X3R5cGUKICAgICAgZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLAogICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19iZWcsIF9fZW5kLCBf X2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1l KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZ2V0X21vbnRobmFtZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsg fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90 eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfeWVhcihfX2Jl ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmly dHVhbAogICAgICB+dGltZV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCiAgICAg IGRvX2RhdGVfb3JkZXIoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv X2dldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywKICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRf d2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRl cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0 X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgoKICAgICAgdm9p ZAogICAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5k LCBpbnQmIF9fbWVtYmVyLAogICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xl biwKICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIpIGNvbnN0OwoKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbmFt ZShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAg ICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAogICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKICAgICAgdm9pZAogICAgICBfTV9leHRy YWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAg ICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfZ2V0PF9D aGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9nZXQ8X0No YXJULCBfSW5JdGVyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQK ICAgICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAg ICAgOiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVk OgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1l X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBw dWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091 dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBs aWNpdAogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZh Y2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3Ms IGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgY29u c3QgX0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkgY29uc3Q7CgogICAgICBpdGVy X3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg X19maWxsLAogICBjb25zdCB0bSogX190bSwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCA9IDAp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIF9fZmlsbCwgX190 bSwgX19mb3JtYXQsIF9fbW9kKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg ICB+dGltZV9wdXQoKQogICAgICB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv X3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY29u c3QgdG0qIF9fdG0sCiAgICAgIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0OwogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxv Y2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1l IDogcHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6Cgog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRl cl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIq ICwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4o X19yZWZzKQogICAgICB7IH07CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50 aW1lX3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyBtb25leV9iYXNlCiAgewogIHB1 YmxpYzoKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07 CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0 IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9T X2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9f cG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAg Y2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFz ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg ICBwcml2YXRlOgogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY2hhcl90eXBl IF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAg ICBjb25zdCBjaGFyX3R5cGUqIF9NX2N1cnJfc3ltYm9sOwogICAgICBjb25zdCBjaGFyX3R5cGUq IF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fbmVnYXRpdmVfc2ln bjsKICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7 CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0 CiAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3Jl ZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0 CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6 ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01f aW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY2xvYywgX19zKTsgfQoKICAgICAgY2hhcl90eXBlCiAg ICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFs X3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcK ICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygp OyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAg IHBvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NpdGl2ZV9z aWduKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24oKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAgIGludAogICAg ICBmcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRz KCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBuZWdfZm9y bWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgpOyB9CgogICAg cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCk7CgogICAgICB2aXJ0 dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f dGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0K CiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9f Y3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5bWJvbDsgfQoKICAg ICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWduKCkgY29uc3QKICAg ICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlw ZQogICAgICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnYXRp dmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19kaWdpdHMoKSBjb25z dAogICAgICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJu CiAgICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0 OyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICAgdm9pZAogICAgICAgX01faW5p dGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsLAogICAgY29uc3Qg Y2hhciogX19uYW1lID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgYm9vbCBfSW50bD4KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6 aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNvbnN0IGJv b2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8PgogICAgbW9u ZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgbW9u ZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZv aWQKICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChf X2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5 cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwg Y29uc3QgY2hhciopOwojIDE2MjAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9i aXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBf SW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0No YXJULCBfSW50bD4KICAgIHsKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0 OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaW50bCA9IF9JbnRsOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdF9ieW5h bWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBtb25leXB1bmN0 PF9DaGFyVCwgX0ludGw+KF9fcmVmcykKICAgICAgewogX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2Nf bG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7CiBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19s b2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK ICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9N X2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9DaGFyVCwg X0ludGw+OjppbnRsOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0 ZXI+CiAgICBjbGFzcyBtb25leV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAg cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9J bkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu Z190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAg ICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsg fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l bmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f Z2V0KF9fcywgX19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBp dGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBf X2ludGwsIGlvc19iYXNlJiBfX2lvLAogICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmlu Z190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywg X19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoK ICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9f aW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9u ZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg ZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19i YXNlJiBfX2lvLAogICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBf X2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpp ZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNs YXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVy X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7Cgog ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X3B1 dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBp dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYg X19pbywKICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fdW5p dHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19p bnRsLCBpb3NfYmFzZSYgX19pbywKICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5 cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lu dGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0 dWFsCiAgICAgIH5tb25leV9wdXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg IGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJf dHlwZSBfX2ZpbGwsCiAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmly dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBp b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUm IF9fZGlnaXRzKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVy Pjo6aWQ7CgoKICBzdHJ1Y3QgbWVzc2FnZXNfYmFzZQogIHsKICAgIHR5cGVkZWYgaW50IGNhdGFs b2c7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXMg OiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1lc3NhZ2VzX2Jhc2UKICAgIHsKICAgIHB1 YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19j X2xvY2FsZSBfTV9jX2xvY2FsZV9tZXNzYWdlczsKICAgICAgY2hhciogX01fbmFtZV9tZXNzYWdl czsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGlj aXQKICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDApOwoKCiAgICAgIGV4cGxpY2l0CiAg ICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBf X3JlZnMgPSAwKTsKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8 Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25z dCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7 CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50 IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAgICAg IGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShf X2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpOwoK ICAgICAgdmlydHVhbCBjYXRhbG9nCiAgICAgIGRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNo YXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAg ICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZhdWx0 KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBkb19jbG9zZShjYXRhbG9nKSBjb25z dDsKCgogICAgICBjaGFyKgogICAgICBfTV9jb252ZXJ0X3RvX2NoYXIoY29uc3Qgc3RyaW5nX3R5 cGUmIF9fbXNnKSBjb25zdAogICAgICB7CgogcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+ KGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19tc2cuY19zdHIoKSkpOwogICAgICB9CgoKICAgICAgc3Ry aW5nX3R5cGUKICAgICAgX01fY29udmVydF9mcm9tX2NoYXIoY2hhciogX19tc2cpIGNvbnN0CiAg ICAgIHsKCiBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyPjo6bGVuZ3RoKF9fbXNnKSAt IDE7CiMgMTgzMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxl X2ZhY2V0cy5oIiAzCiByZXR1cm4gc3RyaW5nX3R5cGUoKTsKICAgICAgfQogICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6 aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJpbmcKICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQo Y2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYpIGNvbnN0OwoKCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVz c2FnZXM8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7Cgog ICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXpl X3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNz YWdlc19ieW5hbWUoKQogICAgICB7IH0KICAgIH07CgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk YysrLXYzL2luY2x1ZGUvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9iaXRzL21lc3NhZ2VzX21lbWJl cnMuaCIgMSAzCiMgMzcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9wb3dlcnBj LWlibS1haXg0LjMuMy4wL2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3Jl ZnMpCiAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICB7IF9NX2NfbG9jYWxlX21lc3Nh Z2VzID0gX1NfY19sb2NhbGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgIG1l c3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUsIGNvbnN0IGNoYXIqLCBzaXplX3Qg X19yZWZzKQogICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgeyBfTV9jX2xvY2FsZV9t ZXNzYWdlcyA9IF9TX2NfbG9jYWxlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46 Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2Ms CiAgICAgIGNvbnN0IGNoYXIqKSBjb25zdAogICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3Ms IF9fbG9jKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbWVzc2FnZXM8X0No YXJUPjo6fm1lc3NhZ2VzKCkKICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9t ZXNzYWdlcyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVz c2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25z dCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdAogICAgeyByZXR1cm4g MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxf Q2hhclQ+OjpzdHJpbmdfdHlwZQogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fZ2V0KGNhdGFsb2cs IGludCwgaW50LAogICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QKICAg IHsgcmV0dXJuIF9fZGZhdWx0OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZv aWQKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0CiAgICB7IH0K CgogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFy VD46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCiAgICAg OiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKICAgICB7CiAgICAgICBfU19kZXN0cm95X2NfbG9j YWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAgICAgIF9TX2NyZWF0ZV9jX2xvY2Fs ZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKICAgICB9CiMgMTg2NyAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFj ZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0 PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0No YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw ZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBf X2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0No YXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBj b25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYykuaXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2Nh bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku aXMoY3R5cGVfYmFzZTo6bG93ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0 eXBlX2Jhc2U6OmFscGhhLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9i YXNlOjpkaWdpdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp bmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg eyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6 cHVuY3QsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv b2wKICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJl dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGln aXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzYWxudW0oX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBf X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp c2dyYXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3Vw cGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBj b25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYykudG9sb3dlcihfX2MpOyB9CiMgMTk0NyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12 My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgY2xhc3MgX19sb2NhbGVfY2FjaGVf YmFzZQogIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsCiAgICB+X19sb2NhbGVfY2FjaGVfYmFzZSgp IHsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fbG9jYWxl X2NhY2hlIDogcHVibGljIF9fbG9jYWxlX2NhY2hlX2Jhc2UKICAgIHsKCiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IHRyYWl0 c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoK ICAgIHB1YmxpYzoKCgoKCgoKICAgICAgX0NoYXJUIF9NX2xpdGVyYWxzW19fbnVtX2Jhc2U6Ol9T X2VuZF07CgoKCgogICAgICBfQ2hhclQgX01fZGVjaW1hbF9wb2ludDsKCgoKCgogICAgICBfQ2hh clQgX01fdGhvdXNhbmRzX3NlcDsKCgoKICAgICAgc3RyaW5nX3R5cGUgX01fdHJ1ZW5hbWU7CiAg ICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsKCgoKICAgICAgYm9vbCBfTV91c2VfZ3JvdXBp bmc7CgoKCiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsKCiAgICAgIF9fbG9jYWxlX2NhY2hlKCkg OiBfTV91c2VfZ3JvdXBpbmcoZmFsc2UpCiAgICAgIHsgfTsKCiAgICAgIF9fbG9jYWxlX2NhY2hl JgogICAgICBvcGVyYXRvcj0oY29uc3QgX19sb2NhbGVfY2FjaGUmIF9fbGMpOwoKCiAgICAgIHZv aWQKICAgICAgX01faW5pdChjb25zdCBsb2NhbGUmKTsKICAgIH07Cn0KIyA0NSAiL2djYy9kamUv YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNl IHN0ZAp7CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGlj OgoKCgoKCgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0 czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsK IyA3OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dl cnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYmFzaWNfaW9zLmgi IDMKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRl ZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7 CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1 dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRz PiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3Ry ZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBtdXRhYmxlIGNoYXJfdHlw ZSBfTV9maWxsOwogICAgICBtdXRhYmxlIGJvb2wgX01fZmlsbF9pbml0OwogICAgICBiYXNpY19z dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVmOwoKCiAgICAgIGNvbnN0IF9f Y3R5cGVfdHlwZSogX01fZmN0eXBlOwoKICAgICAgY29uc3QgX19udW1wdXRfdHlwZSogX01fZm51 bXB1dDsKCiAgICAgIGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7CgogICAgcHVibGlj OgoKCgoKCgoKICAgICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5mYWlsKCkgPyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsgfQoKICAgICAgYm9v bAogICAgICBvcGVyYXRvciEoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCk7IH0K IyAxMjIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2ljX2lvcy5o IiAzCiAgICAgIGlvc3RhdGUKICAgICAgcmRzdGF0ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N X3N0cmVhbWJ1Zl9zdGF0ZTsgfQojIDEzMyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs dWRlL2JpdHMvYmFzaWNfaW9zLmgiIDMKICAgICAgdm9pZAogICAgICBjbGVhcihpb3N0YXRlIF9f c3RhdGUgPSBnb29kYml0KTsKCgoKCgoKCiAgICAgIHZvaWQKICAgICAgc2V0c3RhdGUoaW9zdGF0 ZSBfX3N0YXRlKQogICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJkc3RhdGUoKSB8IF9fc3RhdGUp OyB9CgoKCgoKCgogICAgICBib29sCiAgICAgIGdvb2QoKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQoKCgoKCgoKICAgICAgYm9vbAogICAgICBlb2YoKSBjb25z dAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgZW9mYml0KSAhPSAwOyB9CiMgMTcz ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19pb3MuaCIgMwog ICAgICBib29sCiAgICAgIGZhaWwoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0 ZSgpICYgKGJhZGJpdCB8IGZhaWxiaXQpKSAhPSAwOyB9CgoKCgoKCgogICAgICBib29sCiAgICAg IGJhZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9 IDA7IH0KIyAxOTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2lj X2lvcy5oIiAzCiAgICAgIGlvc3RhdGUKICAgICAgZXhjZXB0aW9ucygpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX2V4Y2VwdGlvbjsgfQojIDIyOSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p bmNsdWRlL2JpdHMvYmFzaWNfaW9zLmgiIDMKICAgICAgdm9pZAogICAgICBleGNlcHRpb25zKGlv c3RhdGUgX19leGNlcHQpCiAgICAgIHsKICAgICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsK ICAgICAgICB0aGlzLT5jbGVhcihfTV9zdHJlYW1idWZfc3RhdGUpOwogICAgICB9CgoKCgoKCgog ICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3MoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz4qIF9fc2IpCiAgICAgIDogaW9zX2Jhc2UoKSwgX01fZmN0eXBlKDApLCBfTV9mbnVtcHV0 KDApLCBfTV9mbnVtZ2V0KDApCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKCgoKCgoKICAg ICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CiMgMjY2ICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli c3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19pb3MuaCIgMwogICAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rp ZTsgfQojIDI3OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYmFzaWNf aW9zLmgiIDMKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0aWUo YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0cikKICAgICAgewogICAgICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV90aWU7CiAgICAgICAg X01fdGllID0gX190aWVzdHI7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKCgoKCgog ICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoKSBjb25z dAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWY7IH0KIyAzMTggIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL2Jhc2ljX2lvcy5oIiAzCiAgICAgIGJhc2ljX3N0cmVhbWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPiogX19zYik7CgoKCgogICAgICBiYXNpY19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3Qg YmFzaWNfaW9zJiBfX3Jocyk7CgoKCgoKCgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbCgpIGNv bnN0CiAgICAgIHsKIGlmICghX01fZmlsbF9pbml0KQogICB7CiAgICAgX01fZmlsbCA9IHRoaXMt PndpZGVuKCcgJyk7CiAgICAgX01fZmlsbF9pbml0ID0gdHJ1ZTsKICAgfQogcmV0dXJuIF9NX2Zp bGw7CiAgICAgIH0KIyAzNTMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRz L2Jhc2ljX2lvcy5oIiAzCiAgICAgIGNoYXJfdHlwZQogICAgICBmaWxsKGNoYXJfdHlwZSBfX2No KQogICAgICB7CiBjaGFyX3R5cGUgX19vbGQgPSB0aGlzLT5maWxsKCk7CiBfTV9maWxsID0gX19j aDsKIHJldHVybiBfX29sZDsKICAgICAgfQojIDM3MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12 My9pbmNsdWRlL2JpdHMvYmFzaWNfaW9zLmgiIDMKICAgICAgbG9jYWxlCiAgICAgIGltYnVlKGNv bnN0IGxvY2FsZSYgX19sb2MpOwojIDM5MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs dWRlL2JpdHMvYmFzaWNfaW9zLmgiIDMKICAgICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90eXBl IF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7CiMgNDExICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9iYXNpY19pb3MuaCIgMwogICAgICBjaGFyX3R5cGUKICAgICAgd2lk ZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKCgoKCgoKCiAgICAgIGJhc2ljX2lv cygpIDogaW9zX2Jhc2UoKSwgX01fZmN0eXBlKDApLCBfTV9mbnVtcHV0KDApLCBfTV9mbnVtZ2V0 KDApCiAgICAgIHsgfQoKCgoKCgoKICAgICAgdm9pZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFj ZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdAogICAgICB7CiBpZiAoIV9fZikKICAg X190aHJvd19iYWRfY2FzdCgpOwogcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAg ICAgX01fY2FjaGVfbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgogICAgICB2b2lkCiAg ICAgIF9NX3NldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkgeyBfTV9zdHJlYW1idWZfc3RhdGUgfD0g X19zdGF0ZTsgfQogICAgfTsKfQoKCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j bHVkZS9iaXRzL2Jhc2ljX2lvcy50Y2MiIDEgMwojIDM0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9iYXNpY19pb3MudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNp Y19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0ZSBfX3N0YXRlKQogICAgewogICAg ICBpZiAodGhpcy0+cmRidWYoKSkKIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGU7CiAgICAg IGVsc2UKICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsKICAgICAgaWYg KCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogX190aHJvd19pb3NfZmFp bHVyZSgiYmFzaWNfaW9zOjpjbGVhciIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PioKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8 X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy VCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBf X3NiOwogICAgICB0aGlzLT5jbGVhcigpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQo Y29uc3QgYmFzaWNfaW9zJiBfX3JocykKICAgIHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9 IChfX3Jocy5fTV93b3JkX3NpemUgPD0gX1NfbG9jYWxfd29yZF9zaXplKSA/CiAgICAgICAgICAg ICAgICAgIF9NX2xvY2FsX3dvcmQgOiBuZXcgX1dvcmRzW19fcmhzLl9NX3dvcmRfc2l6ZV07CgoK ICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IgPSBfX3Jocy5fTV9jYWxsYmFja3M7CiAgICAgIGlm IChfX2NiKQogX19jYi0+X01fYWRkX3JlZmVyZW5jZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNr cyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQpCiB7CiAg IGRlbGV0ZSBbXSBfTV93b3JkOwogICBfTV93b3JkID0gMDsKIH0KICAgICAgX01fZGlzcG9zZV9j YWxsYmFja3MoKTsKCgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBmb3IgKGludCBf X2kgPSAwOyBfX2kgPCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogX193b3Jkc1tfX2ldID0g X19yaHMuX01fd29yZFtfX2ldOwogICAgICBpZiAoX01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQog ewogICBkZWxldGUgW10gX01fd29yZDsKICAgX01fd29yZCA9IDA7CiB9CiAgICAgIF9NX3dvcmQg PSBfX3dvcmRzOwogICAgICBfTV93b3JkX3NpemUgPSBfX3Jocy5fTV93b3JkX3NpemU7CgogICAg ICB0aGlzLT5mbGFncyhfX3Jocy5mbGFncygpKTsKICAgICAgdGhpcy0+d2lkdGgoX19yaHMud2lk dGgoKSk7CiAgICAgIHRoaXMtPnByZWNpc2lvbihfX3Jocy5wcmVjaXNpb24oKSk7CiAgICAgIHRo aXMtPnRpZShfX3Jocy50aWUoKSk7CiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsKICAg ICAgX01faW9zX2xvY2FsZSA9IF9fcmhzLmdldGxvYygpOwogICAgICBfTV9jYWNoZV9sb2NhbGUo X01faW9zX2xvY2FsZSk7CgogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsK CgogICAgICB0aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7CgogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGNoYXIKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpuYXJyb3coY2hh cl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgIHsKICAgICAgY2hhciBfX3JldCA9 IF9fZGZhdWx0OwogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKIF9fcmV0ID0g X01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2RmYXVsdCk7CiAgICAgIHJldHVybiBfX3JldDsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgX0No YXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBfX2MpIGNvbnN0 CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3JldCA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoX01f Y2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKIF9fcmV0ID0gX01fZmN0eXBlLT53aWRlbihfX2MpOwog ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+ OjppbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19vbGQodGhp cy0+Z2V0bG9jKCkpOwogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBfTV9jYWNo ZV9sb2NhbGUoX19sb2MpOwogICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQogdGhpcy0+cmRi dWYoKS0+cHViaW1idWUoX19sb2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2lj X2lvczxfQ2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+KiBfX3NiKQogICAgewoKICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKCgogICAgICBpZiAo IV9NX2xvY2FsZV9jYWNoZS5nZXQoKSkKIHsKICAgdHlwZWRlZiBfX2xvY2FsZV9jYWNoZTxfQ2hh clQ+IF9fY2FjaGVfdDsKICAgdGhpcy0+X01fbG9jYWxlX2NhY2hlID0gYXV0b19wdHI8X19sb2Nh bGVfY2FjaGVfYmFzZT4oc3RhdGljX2Nhc3Q8X19sb2NhbGVfY2FjaGVfYmFzZSo+KG5ldyBfX2Nh Y2hlX3QpKTsKICAgX01fY2FjaGVfbG9jYWxlKF9NX2lvc19sb2NhbGUpOwogfQojIDE3MCAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwogICAg ICBfTV9maWxsID0gX0NoYXJUKCk7CiAgICAgIF9NX2ZpbGxfaW5pdCA9IGZhbHNlOwoKICAgICAg X01fdGllID0gMDsKICAgICAgX01fZXhjZXB0aW9uID0gZ29vZGJpdDsKICAgICAgX01fc3RyZWFt YnVmID0gX19zYjsKICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBi YWRiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpfTV9jYWNoZV9sb2Nh bGUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3Qo aGFzX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpLCB0cnVlKSkKIF9NX2ZjdHlwZSA9ICZ1c2Vf ZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYyk7CiAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KGhh c19mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyksIHRydWUpKQogX01fZm51bXB1dCA9ICZ1c2Vf ZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpOwogICAgICBpZiAoX19idWlsdGluX2V4cGVjdCho YXNfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpLCB0cnVlKSkKIF9NX2ZudW1nZXQgPSAmdXNl X2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKTsKICAgICAgc3RhdGljX2Nhc3Q8X19sb2NhbGVf Y2FjaGU8X0NoYXJUPiY+KF9NX2NhY2hlKCkpLl9NX2luaXQoX19sb2MpOwogICAgfQoKCgoKCiAg ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczxjaGFyPjsKCgoKCgp9CiMgNDU1ICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMgNTIg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pb3MiIDIgMwojIDQ2ICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaXN0cmVhbSIgMiAzCiMgMSAiL2djYy9kamUvYnVp bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w L2xpYnN0ZGMrKy12My9pbmNsdWRlL2xpbWl0cyIgMSAzCiMgNDcgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9saW1pdHMiIDMKIyAxNTAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst djMvaW5jbHVkZS9saW1pdHMiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKICBlbnVtIGZsb2F0X3Jv dW5kX3N0eWxlCiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRfdG93 YXJkX3plcm8gPSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dhcmRf aW5maW5pdHkgPSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoKCgoK CgoKICBlbnVtIGZsb2F0X2Rlbm9ybV9zdHlsZQogIHsKCiAgICBkZW5vcm1faW5kZXRlcm1pbmF0 ZSA9IC0xLAoKICAgIGRlbm9ybV9hYnNlbnQgPSAwLAoKICAgIGRlbm9ybV9wcmVzZW50ID0gMQog IH07CiMgMTkyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbGltaXRzIiAzCiAg c3RydWN0IF9fbnVtZXJpY19saW1pdHNfYmFzZQogIHsKCgogICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCgoKCiAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9 IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CgogICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CgoKCgoKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu dGVnZXIgPSBmYWxzZTsKCgoKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNl OwoKCiAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMDsKCgoKICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50ID0gMDsKCgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx MCA9IDA7CgoKCiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CgoKICAgIHN0 YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKCiAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKCgogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0 X05hTiA9IGZhbHNlOwoKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9 IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9 IGRlbm9ybV9hYnNlbnQ7CgoKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9 IGZhbHNlOwoKCgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CgoKCiAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CgoKCgogICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgoKICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz ID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7 CgoKCiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu ZF90b3dhcmRfemVybzsKICB9OwojIDI4NSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs dWRlL2xpbWl0cyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBudW1lcmlj X2xpbWl0cyA6IHB1YmxpYyBfX251bWVyaWNfbGltaXRzX2Jhc2UKICAgIHsKCgogICAgICBzdGF0 aWMgX1RwIG1pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKICAg ICAgc3RhdGljIF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7 IH0KCgogICAgICBzdGF0aWMgX1RwIGVwc2lsb24oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19j YXN0PF9UcD4oMCk7IH0KCiAgICAgIHN0YXRpYyBfVHAgcm91bmRfZXJyb3IoKSB0aHJvdygpIHsg cmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgIHN0YXRpYyBfVHAgaW5maW5pdHko KSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgIHN0YXRpYyBf VHAgcXVpZXRfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgoK ICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNf Y2FzdDxfVHA+KDApOyB9CgoKCiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkg eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAg ICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g MTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl Z2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAg ICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigp IHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcm91bmRf ZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAg eyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkgdGhyb3coKQog ICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkg dGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBkZW5vcm1f bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCgoK CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVt cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjaGFyIG1p bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKCgoY2hhcikoLTEpIDwgMCkgPyAoY2hhcikxIDw8 IChzaXplb2YoY2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSkgOiAoY2hhcikwKTsgfQogICAg ICBzdGF0aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKGNoYXIpKC0xKSA8 IDApID8gKChjaGFyKTEgPDwgKHNpemVvZihjaGFyKSAqIDggLSAoKGNoYXIpKC0xKSA8IDApKSkg LSAxIDogfihjaGFyKTApOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXpl b2YoY2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzMTAgPSAoKHNpemVvZihjaGFyKSAqIDggLSAoKGNoYXIpKC0xKSA8IDApKSAqIDY0MyAv IDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSAoKGNoYXIpKC0xKSA8 IDApOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJh ZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMDsgfQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAg ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNo YXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0 aWMgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAg ICBzdGF0aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFy KCk7IH0KICAgICAgc3RhdGljIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBj b25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3Ry dWN0IG51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiAtMTI3IC0gMTsgfQogICAgICBzdGF0aWMgc2lnbmVk IGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgIHN0YXRpYyBj b25zdCBpbnQgZGlnaXRzID0gKHNpemVvZihzaWduZWQgY2hhcikgKiA4IC0gKChzaWduZWQgY2hh cikoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2Yo c2lnbmVkIGNoYXIpICogOCAtICgoc2lnbmVkIGNoYXIpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYp OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf ZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3Rh dGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAg ICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVy biAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50 IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg PSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2lnbmVk IGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25l ZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3co KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3Rh dGljIHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZGVu b3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+ KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh cmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1 bnNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXpl ZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQog ICAgICB7IHJldHVybiAxMjcgKiAyVSArIDE7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln aXRzID0gKHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDggLSAoKHVuc2lnbmVkIGNoYXIpKC0xKSA8 IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6ZW9mKHVuc2lnbmVk IGNoYXIpICogOCAtICgodW5zaWduZWQgY2hhcikoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh Y3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGlj IHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAg ICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw ID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2ln bmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigp IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0K ICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVu c2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1 OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0 IG51bWVyaWNfbGltaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IG1pbigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gKCgod2NoYXJfdCkoLTEpIDwgMCkgPyAod2NoYXJfdCkxIDw8IChzaXpl b2Yod2NoYXJfdCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAwKSkgOiAod2NoYXJfdCkwKTsgfQog ICAgICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKHdjaGFy X3QpKC0xKSA8IDApID8gKCh3Y2hhcl90KTEgPDwgKHNpemVvZih3Y2hhcl90KSAqIDggLSAoKHdj aGFyX3QpKC0xKSA8IDApKSkgLSAxIDogfih3Y2hhcl90KTApOyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0cyA9IChzaXplb2Yod2NoYXJfdCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAw KSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZih3Y2hhcl90KSAq IDggLSAoKHdjaGFyX3QpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19zaWduZWQgPSAoKHdjaGFyX3QpKC0xKSA8IDApOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh Y3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGlj IHdjaGFyX3QgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0 aWMgd2NoYXJfdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgaW5maW5pdHko KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJf dCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBz dGF0aWMgd2NoYXJfdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hh cl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3QgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gd2NoYXJfdCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5 bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu dW1lcmljX2xpbWl0czxzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gLTMyNzY3IC0gMTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQog ICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAo c2l6ZW9mKHNob3J0KSAqIDggLSAoKHNob3J0KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihzaG9ydCkgKiA4IC0gKChzaG9ydCkoLTEpIDwgMCkp ICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg PSAyOwogICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MDsgfQogICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx MCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaG9y dCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0 aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAg ICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz aG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7 IHJldHVybiBzaG9ydCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg PSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l cmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigp IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQg bWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzMjc2NyAqIDJVICsgMTsgfQoKICAgICAgc3Rh dGljIGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDggLSAoKHVu c2lnbmVkIHNob3J0KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg PSAoKHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4IC0gKCh1bnNpZ25lZCBzaG9ydCkoLTEpIDwg MCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJh ZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vycm9y KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs c2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMg dW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNp Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk IHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVub3JtX21pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v ZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK ICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+CiAgICB7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0 YXRpYyBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAtMjE0NzQ4MzY0NyAtIDE7IH0K ICAgICAgc3RhdGljIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDc7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZihpbnQpICogOCAtICgo aW50KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVv ZihpbnQpICogOCAtICgoaW50KSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBpbnQgZXBzaWxv bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgaW50IHJvdW5kX2Vy cm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g ZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g ZmFsc2U7CgogICAgICBzdGF0aWMgaW50IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhy b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBp bnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50 PigwKTsgfQogICAgICBzdGF0aWMgaW50IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBj b25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3Ry dWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBt aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGlu dCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDcgKiAyVSArIDE7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBpbnQpICogOCAt ICgodW5zaWduZWQgaW50KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz MTAgPSAoKHNpemVvZih1bnNpZ25lZCBpbnQpICogOCAtICgodW5zaWduZWQgaW50KSgtMSkgPCAw KSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk aXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp bml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h YnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoK ICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg aW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAg ICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5 bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4K ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgbG9uZyBtaW4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIC0yMTQ3NDgzNjQ3TCAtIDE7IH0KICAgICAgc3RhdGljIGxvbmcg bWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGlj IGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9mKGxvbmcpICogOCAtICgobG9uZykoLTEpIDwgMCkp OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2YobG9uZykgKiA4IC0g KChsb25nKSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGVwc2lsb24oKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg ICAgIHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHNp Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDAp OyB9CiAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1 NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29u c3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2Jl Zm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVj dCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBt aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxv bmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TCAqIDJVTCArIDE7IH0K CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBsb25nKSAq IDggLSAoKHVuc2lnbmVkIGxvbmcpKC0xKSA8IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMxMCA9ICgoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogOCAtICgodW5zaWduZWQgbG9uZyko LTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l ZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg aW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZXBzaWxvbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9l cnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEw ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9 IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9 IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRp YyB1bnNpZ25lZCBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2ln bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVub3JtX21pbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg fTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KICAg IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg c3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIC05MjIzMzcyMDM2 ODU0Nzc1ODA3TEwgLSAxOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQog ICAgICB7IHJldHVybiA5MjIzMzcyMDM2ODU0Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzID0gKHNpemVvZihsb25nIGxvbmcpICogOCAtICgobG9uZyBsb25nKSgtMSkg PCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihsb25nIGxv bmcpICogOCAtICgobG9uZyBsb25nKSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1 ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGxv bmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9u ZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9 IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np Z25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmluaXR5KCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAg IHN0YXRpYyBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2lnbmFsaW5n X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsg fQogICAgICBzdGF0aWMgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8Pgog ICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4KICAgIHsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVu c2lnbmVkIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAg c3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDky MjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0cyA9IChzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSAqIDggLSAoKHVuc2lnbmVkIGxv bmcgbG9uZykoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChz aXplb2YodW5zaWduZWQgbG9uZyBsb25nKSAqIDggLSAoKHVuc2lnbmVkIGxvbmcgbG9uZykoLTEp IDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50 IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhy b3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcg cm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw b25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAg ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW5maW5pdHko KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o MCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAg ICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0 YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv dW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1w bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZmxvYXQ+CiAgICB7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBt aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTc1NDk0MzVlLTM4RjsgfQogICAgICBzdGF0 aWMgZmxvYXQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjQwMjgyMzQ3ZSszOEY7IH0K CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzMTAgPSA2OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk aXggPSAyOwogICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMS4xOTIwOTI5MGUtN0Y7IH0KICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkgdGhy b3coKQogICAgICB7IHJldHVybiAwLjVGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l eHBvbmVudCA9ICgtMTI1KTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9 ICgtMzcpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEyODsKICAgICAg c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2luZmluaXR5ID0gMTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0 X05hTiA9IDE7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gaGFz X3F1aWV0X05hTjsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu b3JtCiA9IDEuNDAxMjk4NDZlLTQ1RiA/IGRlbm9ybV9wcmVzZW50IDogZGVub3JtX2Fic2VudDsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBz dGF0aWMgZmxvYXQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9o dWdlX3ZhbGYgKCk7IH0KICAgICAgc3RhdGljIGZsb2F0IHF1aWV0X05hTigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gX19idWlsdGluX25hbmYgKCIiKTsgfQogICAgICBzdGF0aWMgZmxvYXQgc2ln bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gX19idWlsdGluX25hbnNmICgiIik7 IH0KICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDEuNDAxMjk4NDZlLTQ1RjsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5CiA9 IGhhc19pbmZpbml0eSAmJiBoYXNfcXVpZXRfTmFOICYmIGhhc19kZW5vcm0gPT0gZGVub3JtX3By ZXNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5 bGUgPSByb3VuZF90b19uZWFyZXN0OwogICAgfTsKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVj dCBudW1lcmljX2xpbWl0czxkb3VibGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91 YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50 IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91 bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuNTsgfQoKICAgICAgc3RhdGljIGNv bnN0IGludCBtaW5fZXhwb25lbnQgPSAoLTEwMjEpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudDEwID0gKC0zMDcpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7Cgog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSAxOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gMTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np Z25hbGluZ19OYU4gPSBoYXNfcXVpZXRfTmFOOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVu b3JtX3N0eWxlIGhhc19kZW5vcm0KID0gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQgPyBkZW5vcm1f cHJlc2VudCA6IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v cm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkK ICAgICAgeyByZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsKCk7IH0KICAgICAgc3RhdGljIGRvdWJs ZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW4gKCIiKTsg fQogICAgICBzdGF0aWMgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIF9fYnVpbHRpbl9uYW5zICgiIik7IH0KICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiA0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNDsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5CiA9IGhhc19pbmZpbml0eSAmJiBoYXNfcXVp ZXRfTmFOICYmIGhhc19kZW5vcm0gPT0gZGVub3JtX3ByZXNlbnQ7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1 bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b19uZWFyZXN0Owog ICAgfTsKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGRv dWJsZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl OwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g Mi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDhMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtYXgo KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4TDsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA1MzsKICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMxMCA9IDE1OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg PSAyOwogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMxZS0xNkw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91Ymxl IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjVMOyB9CgogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9ICgtMTAyMSk7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50MTAgPSAoLTMwNyk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4 cG9uZW50ID0gMTAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDMw ODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IDE7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSAxOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfc2lnbmFsaW5nX05hTiA9IGhhc19xdWlldF9OYU47CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybQogPSA0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNEwgPyBk ZW5vcm1fcHJlc2VudCA6IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19kZW5vcm1fbG9zcwogPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBpbmZpbml0 eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsbCAoKTsgfQogICAg ICBzdGF0aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBf X2J1aWx0aW5fbmFubCAoIiIpOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBzaWduYWxpbmdf TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBfX2J1aWx0aW5fbmFuc2wgKCIiKTsgfQogICAg ICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g NC45NDA2NTY0NTg0MTI0NjU0ZS0zMjRMOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p ZWM1NTkKID0gaGFzX2luZmluaXR5ICYmIGhhc19xdWlldF9OYU4gJiYgaGFzX2Rlbm9ybSA9PSBk ZW5vcm1fcHJlc2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSBy b3VuZF9zdHlsZSA9IHJvdW5kX3RvX25lYXJlc3Q7CiAgICB9OwoKCgoKCn0KIyA0NyAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2lzdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7 CiMgNTggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNf aXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7 CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf dHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9f c3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4g X19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g X19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQs IF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJU LCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxf Q2hhclQ+IF9fY3R5cGVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVDIsIHR5 cGVuYW1lIF9UcmFpdHMyPgogICAgICAgIGZyaWVuZCBiYXNpY19pc3RyZWFtPF9DaGFyVDIsIF9U cmFpdHMyPiYKICAgICAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJUMiwgX1RyYWl0 czI+JiwgX0NoYXJUMiYpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUMiwgdHlwZW5h bWUgX1RyYWl0czI+CiAgICAgICAgZnJpZW5kIGJhc2ljX2lzdHJlYW08X0NoYXJUMiwgX1RyYWl0 czI+JgogICAgICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQyLCBfVHJhaXRzMj4m LCBfQ2hhclQyKik7CgogICAgcHJvdGVjdGVkOgoKCgoKCgoKICAgICAgc3RyZWFtc2l6ZSBfTV9n Y291bnQ7CgogICAgcHVibGljOgojIDEwNCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs dWRlL2lzdHJlYW0iIDMKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaXN0cmVhbShfX3N0cmVh bWJ1Zl90eXBlKiBfX3NiKTogX01fZ2NvdW50KHN0cmVhbXNpemUoMCkpCiAgICAgIHsgdGhpcy0+ aW5pdChfX3NiKTsgfQoKCgoKCgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pc3RyZWFtKCkK ICAgICAgeyBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOyB9CgoKICAgICAgY2xhc3Mgc2VudHJ5 OwogICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwojIDEzMSAiL2djYy9kamUvYnVpbGQvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr Ky12My9pbmNsdWRlL2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh dG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBf X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9z X3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFz ZSYgKCpfX3BmKShpb3NfYmFzZSYpKTsKIyAxNjkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv aW5jbHVkZS9pc3RyZWFtIiAzCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+ KGJvb2wmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihzaG9y dCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVk IHNob3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oaW50 JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQg aW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyYg X19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxv bmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyBs b25nJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWdu ZWQgbG9uZyBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRv cj4+KGZsb2F0JiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4o ZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9u ZyBkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih2 b2lkKiYgX19wKTsKIyAyMzAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAt MjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3Ry ZWFtIiAzCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVm X3R5cGUqIF9fc2IpOwojIDI0MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2lz dHJlYW0iIDMKICAgICAgaW5saW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KCkgY29uc3QKICAg ICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CiMgMjcyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvaXN0cmVhbSIgMwogICAgICBpbnRfdHlwZQogICAgICBnZXQoKTsKIyAyODYgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgICAgIF9faXN0cmVh bV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOwojIDMxMyAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg IGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsK IyAzMjQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgICAg IGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1z aXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0KF9fcywgX19uLCB0aGlzLT53aWRlbign XG4nKSk7IH0KIyAzNDcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFt IiAzCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19z YiwgY2hhcl90eXBlIF9fZGVsaW0pOwojIDM1NyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p bmNsdWRlL2lzdHJlYW0iIDMKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQo X19zdHJlYW1idWZfdHlwZSYgX19zYikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0KF9fc2IsIHRo aXMtPndpZGVuKCdcbicpKTsgfQojIDM4NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs dWRlL2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90 eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CiMgMzk3ICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaXN0cmVhbSIgMwogICAgICBpbmxpbmUgX19p c3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u KQogICAgICB7IHJldHVybiB0aGlzLT5nZXRsaW5lKF9fcywgX19uLCB0aGlzLT53aWRlbignXG4n KSk7IH0KIyA0MTYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAz CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24gPSAxLCBp bnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6OmVvZigpKTsKIyA0MjcgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgICAgIGludF90eXBlCiAgICAgIHBl ZWsoKTsKIyA0NDUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAz CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1z aXplIF9fbik7CiMgNDY0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaXN0cmVh bSIgMwogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJl YW1zaXplIF9fbik7CiMgNDgwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaXN0 cmVhbSIgMwogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFjayhjaGFyX3R5cGUgX19j KTsKIyA0OTUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAg ICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1bmdldCgpOwojIDUxMyAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL2lzdHJlYW0iIDMKICAgICAgaW50CiAgICAgIHN5bmMoKTsKIyA1 MjcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgICAgIHBv c190eXBlCiAgICAgIHRlbGxnKCk7CiMgNTQyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvaXN0cmVhbSIgMwogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9zX3R5 cGUpOwojIDU1OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2lzdHJlYW0iIDMK ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vl a2Rpcik7CgoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaXN0cmVh bSgpOiBfTV9nY291bnQoc3RyZWFtc2l6ZSgwKSkgeyB9CiAgICB9OwojIDU3OCAiL2djYy9kamUv YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2lzdHJlYW0iIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OnNlbnRyeQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfVHJhaXRz IHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh bV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9UcmFpdHM6OmludF90eXBlIF9faW50X3R5cGU7CiMgNjEwICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk YysrLXYzL2luY2x1ZGUvaXN0cmVhbSIgMwogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxz ZSk7CiMgNjIwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvaXN0cmVhbSIgMwog ICAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gX01fb2s7IH0KCiAgICBwcml2YXRl OgogICAgICBib29sIF9NX29rOwogICAgfTsKIyA2MzkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst djMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0 b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsK CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0 cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVu c2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8 Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry ZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9U cmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVp bnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KIyA2ODAgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3Bl cmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19z KTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJh aXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCB1 bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0 PGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1Ry YWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWlu dGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQojIDcwMiAiL2djYy9kamUvYnVpbGQvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr Ky12My9pbmNsdWRlL2lzdHJlYW0iIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlw ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCgogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CgoKCgoKCgogICAgICBleHBsaWNp dAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiog X19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZSgpLCBfX29zdHJlYW1fdHlwZSgpCiAgICAgIHsg dGhpcy0+aW5pdChfX3NiKTsgfQoKCgoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJl YW0oKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvc3Ry ZWFtKCkgOiBfX2lzdHJlYW1fdHlwZSgpLCBfX29zdHJlYW1fdHlwZSgpCiAgICAgIHsgfQogICAg fTsKIyA3NjYgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JiBfX2lzKTsKfQoKCgoKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl L2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9pc3RyZWFtLnRjYyIgMwoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvbG9jYWxlIiAxIDMKIyA0MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNs dWRlL2xvY2FsZSIgMwoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMSAzCiMgMzcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKyst djMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCgojIDEgIi9nY2MvZGplL2J1aWxk L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9s aWJzdGRjKystdjMvaW5jbHVkZS9jZXJybm8iIDEgMwojIDQ3ICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk YysrLXYzL2luY2x1ZGUvY2Vycm5vIiAzCgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMg NAojIDU5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0CmV4dGVybiBpbnQgZXJybm87CiMgNDkg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jZXJybm8iIDIgMwojIDM5ICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAz CgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY21hdGgiIDEgMwojIDQ4 ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvY21hdGgiIDMKCgoKIyAxICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL21h dGguaCIgMSAzIDQKIyA1NSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9nY2MvaW5jbHVkZS9tYXRoLmgiIDMgNApleHRlcm4gIkMiIHsKIyA3NCAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9tYXRo LmgiIDMgNApleHRlcm4gdW5zaWduZWQgX0RCTElORlsyXTsKIyAxMzMgIi9nY2MvZGplL2J1aWxk L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvbWF0aC5oIiAzIDQK ZXh0ZXJuIGRvdWJsZSBhY29zKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgYXNpbihkb3VibGUpOwpl eHRlcm4gZG91YmxlIGF0YW4oZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhdGFuMihkb3VibGUsZG91 YmxlKTsKZXh0ZXJuIGRvdWJsZSBjZWlsKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgY29zKGRvdWJs ZSk7CmV4dGVybiBkb3VibGUgY29zaChkb3VibGUpOwpleHRlcm4gZG91YmxlIGV4cChkb3VibGUp OwpleHRlcm4gZG91YmxlIGZhYnMoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBmbG9vcihkb3VibGUp OwpleHRlcm4gZG91YmxlIGZtb2QoZG91YmxlLCBkb3VibGUpOwpleHRlcm4gZG91YmxlIGZyZXhw KGRvdWJsZSwgaW50ICopOwpleHRlcm4gZG91YmxlIGxkZXhwKGRvdWJsZSwgaW50KTsKZXh0ZXJu IGRvdWJsZSBsb2coZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBsb2cxMChkb3VibGUpOwpleHRlcm4g ZG91YmxlIG1vZGYoZG91YmxlLCBkb3VibGUgKik7CmV4dGVybiBkb3VibGUgcG93KGRvdWJsZSwg ZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBzaW4oZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBzaW5oKGRv dWJsZSk7CmV4dGVybiBkb3VibGUgc3FydChkb3VibGUpOwpleHRlcm4gZG91YmxlIHRhbihkb3Vi bGUpOwpleHRlcm4gZG91YmxlIHRhbmgoZG91YmxlKTsKIyAyMjQgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvbWF0aC5oIiAzIDQKZXh0 ZXJuIGludCBzaWduZ2FtOwojIDI2NCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9tYXRoLmgiIDMgNApleHRlcm4gdW5zaWduZWQgaW50 IF9TRlBNQVg7CiMgMzE0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L2djYy9pbmNsdWRlL21hdGguaCIgMyA0CmV4dGVybiBkb3VibGUgZXJmKGRvdWJsZSk7 CmV4dGVybiBkb3VibGUgZXJmYyhkb3VibGUpOwpleHRlcm4gaW50IGlzbmFuKGRvdWJsZSk7CmV4 dGVybiBkb3VibGUgaHlwb3QoZG91YmxlLGRvdWJsZSk7CmV4dGVybiBkb3VibGUgajAoZG91Ymxl KTsKZXh0ZXJuIGRvdWJsZSBqMShkb3VibGUpOwpleHRlcm4gZG91YmxlIGpuKGludCwgZG91Ymxl KTsKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEo ZG91YmxlKTsKCmV4dGVybiBkb3VibGUgeTAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5MShkb3Vi bGUpOwpleHRlcm4gZG91YmxlIHluKGludCwgZG91YmxlKTsKIyAzNDMgIi9nY2MvZGplL2J1aWxk L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvbWF0aC5oIiAzIDQK ZXh0ZXJuIGRvdWJsZSBhY29zaChkb3VibGUpOwpleHRlcm4gZG91YmxlIGFzaW5oKGRvdWJsZSk7 CmV4dGVybiBkb3VibGUgYXRhbmgoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBjYnJ0KGRvdWJsZSk7 CmV4dGVybiBkb3VibGUgZXhwbTEoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBsb2cxcChkb3VibGUp OwpleHRlcm4gZG91YmxlIHJlbWFpbmRlcihkb3VibGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUg cmludChkb3VibGUpOwpleHRlcm4gZG91YmxlIHNjYWxiKGRvdWJsZSwgZG91YmxlKTsKIyAzNzMg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1 ZGUvbWF0aC5oIiAzIDQKIGV4dGVybiBpbnQgaWxvZ2IoKTsKIGV4dGVybiBkb3VibGUgbG9nYigp OwogZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIoKTsKIyA0MzIgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUvbWF0aC5oIiAzIDQKICAgICBz dHJ1Y3QgZGJsX2h5cG90IHsKICAgICAgICAgZG91YmxlIHgsIHk7CiAgICAgfTsKCgpleHRlcm4g ZG91YmxlIGNvcHlzaWduIChkb3VibGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZHJlbShkb3Vi bGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZXhwX19FKGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJu IGRvdWJsZSBsb2dfX0woZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBuZWFyZXN0KGRvdWJsZSk7CmV4 dGVybiBkb3VibGUgcnNxcnQoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB0cnVuYyhkb3VibGUpOwpl eHRlcm4gaW50IGl0cnVuYyhkb3VibGUpOwpleHRlcm4gaW50IHVub3JkZXJlZChkb3VibGUsIGRv dWJsZSk7CmV4dGVybiB1bnNpZ25lZCB1aXRydW5jKGRvdWJsZSk7CmV4dGVybiBpbnQgaXNpbmYo ZG91YmxlKTsKCmV4dGVybiBpbnQgZHRvaShkb3VibGUpOwojIDQ2MyAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9nY2MvaW5jbHVkZS9tYXRoLmgiIDMgNApl eHRlcm4gaW50IF9jbGFzcyhkb3VibGUpOwoKZXh0ZXJuIGludCBmaW5pdGUoKTsKIyA0ODAgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvZ2NjL2luY2x1ZGUv bWF0aC5oIiAzIDQKc3RydWN0IF9fbWF0aF9leGNlcHRpb24gewogaW50IHR5cGU7CiBjaGFyICpu YW1lOwogZG91YmxlIGFyZzE7CiBkb3VibGUgYXJnMjsKIGRvdWJsZSByZXR2YWw7Cn07CiMgNTM1 ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNs dWRlL21hdGguaCIgMyA0CmV4dGVybiBsb25nIGxvbmcgaW50IF9fbXVsdGk2NCggbG9uZyBsb25n IGludCwgbG9uZyBsb25nIGludCApOwpleHRlcm4gbG9uZyBsb25nIGludCBfX2Rpdmk2NCggbG9u ZyBsb25nIGludCwgbG9uZyBsb25nIGludCApOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu dCBfX2RpdnU2NCggdW5zaWduZWQgbG9uZyBsb25nIGludCwKICAgICB1bnNpZ25lZCBsb25nIGxv bmcgaW50ICk7CmV4dGVybiBsb25nIGxvbmcgaW50IF9fbWF4aTY0KCBsb25nIGxvbmcgaW50LCBs b25nIGxvbmcgaW50ICk7CmV4dGVybiBsb25nIGxvbmcgaW50IF9fbWluaTY0KCBsb25nIGxvbmcg aW50LCBsb25nIGxvbmcgaW50ICk7CmV4dGVybiBsb25nIGxvbmcgaW50IF9fZjY0dG9pNjRyeigg ZG91YmxlICk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fZjY0dG91NjRyeiggZG91 YmxlICk7CiMgNTYzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMw NDI4L2djYy9pbmNsdWRlL21hdGguaCIgMyA0Cn0KIyA1MiAiL2djYy9kamUvYnVpbGQvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr Ky12My9pbmNsdWRlL2NtYXRoIiAyIDMKIyA4MCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p bmNsdWRlL2NtYXRoIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIG5hbWVzcGFjZSBfX2M5OV9i aW5kaW5nCiAgewojIDE2MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0y MDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NtYXRo IiAzCiAgfQp9CgpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1Rw IF9fY21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91YmxlCiAgYWJz KGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxpbmUg ZmxvYXQKICBhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9 CgogIGlubGluZSBsb25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4g X19idWlsdGluX2ZhYnNsKF9feCk7IH0KCgoKCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxvYXQg X194KSB7IHJldHVybiA6OmFjb3Moc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNp bmcgOjphY29zOwoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWNvcyhsb25nIGRvdWJsZSBf X3gpIHsgcmV0dXJuIDo6YWNvcyhzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2lu ZyA6OmFzaW47CgoKCgoKICBpbmxpbmUgZmxvYXQKICBhc2luKGZsb2F0IF9feCkgeyByZXR1cm4g Ojphc2luKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk b3VibGUKICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2luKHN0YXRpY19jYXN0 PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6YXRhbjsKCgoKCgogIGlubGluZSBmbG9hdAog IGF0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW4oc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gp KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4obG9uZyBkb3VibGUgX194KSB7 IHJldHVybiA6OmF0YW4oc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjph dGFuMjsKCgoKCgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KQog IHsgcmV0dXJuIDo6YXRhbjIoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3kpLCBzdGF0aWNfY2FzdDxk b3VibGU+KF9feCkpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbjIobG9uZyBk b3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gOjphdGFuMihzdGF0aWNfY2Fz dDxkb3VibGU+KF9feSksIHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6 Y2VpbDsKCgoKCgogIGlubGluZSBmbG9hdAogIGNlaWwoZmxvYXQgX194KSB7IHJldHVybiA6OmNl aWwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJs ZQogIGNlaWwobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmNlaWwoc3RhdGljX2Nhc3Q8ZG91 YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjpjb3M7CgogIGlubGluZSBmbG9hdAogIGNvcyhmbG9h dCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBk b3VibGUKICBjb3MobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NsKF9f eCk7IH0KCiAgdXNpbmcgOjpjb3NoOwoKCgoKCiAgaW5saW5lIGZsb2F0CiAgY29zaChmbG9hdCBf X3gpIHsgcmV0dXJuIDo6Y29zaChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKCgoKCiAg aW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29z aChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2luZyA6OmV4cDsKCgoKCgogIGlu bGluZSBmbG9hdAogIGV4cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwKHN0YXRpY19jYXN0PGRv dWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBleHAobG9uZyBkb3Vi bGUgX194KSB7IHJldHVybiA6OmV4cChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1 c2luZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxvYXQgX194KQogIHsgcmV0dXJu IF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGZhYnMobG9u ZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CgogIHVzaW5n IDo6Zmxvb3I7CgoKCgoKICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9hdCBfX3gpIHsgcmV0dXJu IDo6Zmxvb3Ioc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCgoKCgogIGlubGluZSBsb25n IGRvdWJsZQogIGZsb29yKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcihzdGF0aWNf Y2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2luZyA6OmZtb2Q7CgoKCgoKICBpbmxpbmUgZmxv YXQKICBmbW9kKGZsb2F0IF9feCwgZmxvYXQgX195KQogIHsgcmV0dXJuIDo6Zm1vZChzdGF0aWNf Y2FzdDxkb3VibGU+KF9feCksIHN0YXRpY19jYXN0PGRvdWJsZT4oX195KSk7IH0KCgoKCgoKICBp bmxpbmUgbG9uZyBkb3VibGUKICBmbW9kKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KQogIHsgcmV0dXJuIDo6Zm1vZChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCksIHN0YXRpY19jYXN0 PGRvdWJsZT4oX195KSk7IH0KCgogIHVzaW5nIDo6ZnJleHA7CgoKCgoKICBpbmxpbmUgZmxvYXQK ICBmcmV4cChmbG9hdCBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHAoX194LCBfX2V4 cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25nIGRvdWJsZSBfX3gs IGludCogX19leHApCiAgeyByZXR1cm4gOjpmcmV4cChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCks IF9fZXhwKTsgfQoKCiAgdXNpbmcgOjpsZGV4cDsKCgoKCgogIGlubGluZSBmbG9hdAogIGxkZXhw KGZsb2F0IF9feCwgaW50IF9fZXhwKQogIHsgcmV0dXJuIDo6bGRleHAoc3RhdGljX2Nhc3Q8ZG91 YmxlPihfX3gpLCBfX2V4cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsZGV4cChs b25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkKICB7IHJldHVybiA6OmxkZXhwKHN0YXRpY19jYXN0 PGRvdWJsZT4oX194KSwgX19leHApOyB9CgoKICB1c2luZyA6OmxvZzsKCgoKCgogIGlubGluZSBm bG9hdCBsb2coZmxvYXQgX194KQogIHsgcmV0dXJuIDo6bG9nKHN0YXRpY19jYXN0PGRvdWJsZT4o X194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cobG9uZyBkb3VibGUgX194 KSB7IHJldHVybiA6OmxvZyhzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2luZyA6 OmxvZzEwOwoKCgoKCiAgaW5saW5lIGZsb2F0CiAgbG9nMTAoZmxvYXQgX194KSB7IHJldHVybiA6 OmxvZzEwKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk b3VibGUKICBsb2cxMChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTAoc3RhdGljX2Nh c3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjptb2RmOwoKCgoKCiAgaW5saW5lIGZsb2F0 CiAgbW9kZihmbG9hdCBfX3gsIGZsb2F0KiBfX2lwdHIpCiAgewogICAgZG91YmxlIF9fdG1wOwog ICAgZG91YmxlIF9fcmVzID0gOjptb2RmKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSwgJl9fdG1w KTsKICAgICpfX2lwdHIgPSBzdGF0aWNfY2FzdDxmbG9hdD4oX190bXApOwogICAgcmV0dXJuIF9f cmVzOwogIH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBtb2RmKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUqIF9faXB0cikKICB7CiAgICBkb3VibGUgX190bXA7CiAgICBkb3VibGUg X19yZXMgPSA6Om1vZGYoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCAmX190bXApOwogICAgKiBf X2lwdHIgPSBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oX190bXApOwogICAgcmV0dXJuIF9fcmVz OwogIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIF9fcG93 X2hlbHBlcihfVHAgX194LCBpbnQgX19uKQogICAgewogICAgICByZXR1cm4gX19uIDwgMAogICAg ICAgID8gX1RwKDEpL19fY21hdGhfcG93ZXIoX194LCAtX19uKQogICAgICAgIDogX19jbWF0aF9w b3dlcihfX3gsIF9fbik7CiAgICB9CgogIHVzaW5nIDo6cG93OwoKCgoKCiAgaW5saW5lIGZsb2F0 CiAgcG93KGZsb2F0IF9feCwgZmxvYXQgX195KQogIHsgcmV0dXJuIDo6cG93KHN0YXRpY19jYXN0 PGRvdWJsZT4oX194KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3kpKTsgfQoKCgoKCgogIGlubGlu ZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKICB7 IHJldHVybiA6OnBvdyhzdGF0aWNfY2FzdDxkb3VibGU+KF9feCksIHN0YXRpY19jYXN0PGRvdWJs ZT4oX195KSk7IH0KCgogIGlubGluZSBkb3VibGUKICBwb3coZG91YmxlIF9feCwgaW50IF9faSkK ICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX2kpOyB9CgogIGlubGluZSBmbG9hdAogIHBv dyhmbG9hdCBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsg fQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBpbnQgX19uKQog IHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgdXNpbmcgOjpzaW47CgogIGlu bGluZSBmbG9hdAogIHNpbihmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NpbmYoX194 KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW4obG9uZyBkb3VibGUgX194KQogIHsgcmV0 dXJuIF9fYnVpbHRpbl9zaW5sKF9feCk7IH0KCiAgdXNpbmcgOjpzaW5oOwoKCgoKCiAgaW5saW5l IGZsb2F0CiAgc2luaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6c2luaChzdGF0aWNfY2FzdDxkb3Vi bGU+KF9feCkpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2luaChsb25nIGRvdWJs ZSBfX3gpIHsgcmV0dXJuIDo6c2luaChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1 c2luZyA6OnNxcnQ7CgogIGlubGluZSBmbG9hdAogIHNxcnQoZmxvYXQgX194KQogIHsgcmV0dXJu IF9fYnVpbHRpbl9zcXJ0ZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNxcnQobG9u ZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChfX3gpOyB9CgogIHVzaW5n IDo6dGFuOwoKCgoKCiAgaW5saW5lIGZsb2F0CiAgdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0 YW4oc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJs ZQogIHRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFuKHN0YXRpY19jYXN0PGRvdWJs ZT4oX194KSk7IH0KCgogIHVzaW5nIDo6dGFuaDsKCgoKCgogIGlubGluZSBmbG9hdAogIHRhbmgo ZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmgoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoK CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVy biA6OnRhbmgoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKfQojIDc0NCAiL2djYy9kamUv YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NtYXRoIiAzCiMgMSAiL2djYy9kamUvYnVpbGQvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2JpdHMvY21hdGgudGNjIiAxIDMKIyAzNSAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvY21hdGgudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIF9UcAogICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1 bnNpZ25lZCBpbnQgX19uKQogICAgewogICAgICBfVHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7 CgogICAgICB3aGlsZSAoX19uID4+PSAxKQogICAgICAgIHsKICAgICAgICAgIF9feCA9IF9feCAq IF9feDsKICAgICAgICAgIGlmIChfX24gJSAyKQogICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7 CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9feTsKICAgIH0KfQojIDc0NSAiL2djYy9kamUvYnVp bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w L2xpYnN0ZGMrKy12My9pbmNsdWRlL2NtYXRoIiAyIDMKIyA0MiAiL2djYy9kamUvYnVpbGQvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKCiMgMSAiL2djYy9k amUvc3JjL2xpYnN0ZGMrKy12My9saWJzdXBjKysvdHlwZWluZm8iIDEgMwojIDQwICIvZ2NjL2Rq ZS9zcmMvbGlic3RkYysrLXYzL2xpYnN1cGMrKy90eXBlaW5mbyIgMwpleHRlcm4gIkMrKyIgewoK bmFtZXNwYWNlIF9fY3h4YWJpdjEKewogIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTUg Ii9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvbGlic3VwYysrL3R5cGVpbmZvIiAzCm5hbWVzcGFj ZSBzdGQKewoKCgoKCgogIGNsYXNzIHR5cGVfaW5mbwogIHsKICBwdWJsaWM6CgoKCgogICAgdmly dHVhbCB+dHlwZV9pbmZvKCk7CgogIHByaXZhdGU6CgogICAgdHlwZV9pbmZvJiBvcGVyYXRvcj0o Y29uc3QgdHlwZV9pbmZvJik7CiAgICB0eXBlX2luZm8oY29uc3QgdHlwZV9pbmZvJik7CgogIHBy b3RlY3RlZDoKICAgIGNvbnN0IGNoYXIgKl9fbmFtZTsKCiAgcHJvdGVjdGVkOgogICAgZXhwbGlj aXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShfX24pIHsgfQoKICBwdWJsaWM6 CgoKCiAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZTsgfQoK CiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdDsKCgoKICAgIGJv b2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdDsKIyAxMDYgIi9nY2Mv ZGplL3NyYy9saWJzdGRjKystdjMvbGlic3VwYysrL3R5cGVpbmZvIiAzCiAgICBib29sIG9wZXJh dG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRv cj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJf cCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoK CgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19jYXRjaChjb25zdCB0eXBlX2luZm8gKl9fdGhyX3R5 cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgog ICAgdmlydHVhbCBib29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlw ZV9pbmZvICpfX3RhcmdldCwKICAgICAgICB2b2lkICoqX19vYmpfcHRyKSBjb25zdDsKICB9OwoK CgoKCgogIGNsYXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAg ICBiYWRfY2FzdCgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3co KTsKICB9OwoKCiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVi bGljOgogICAgYmFkX3R5cGVpZCAoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfdHlw ZWlkKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv aW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxvY2FsZTo6Y29tYmluZShj b25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgIF9JbXBsKiBfX3RtcCA9IG5l dyBfSW1wbCgqX01faW1wbCwgMSk7CiAgICAgIF9fdG1wLT5fTV9yZXBsYWNlX2ZhY2V0KF9fb3Ro ZXIuX01faW1wbCwgJl9GYWNldDo6aWQpOwogICAgICByZXR1cm4gbG9jYWxlKF9fdG1wKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25z dAogICAgewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0ZV90eXBl OwogICAgICBjb25zdCBfX2NvbGxhdGVfdHlwZSYgX19jb2xsYXRlID0gdXNlX2ZhY2V0PF9fY29s bGF0ZV90eXBlPigqdGhpcyk7CiAgICAgIHJldHVybiAoX19jb2xsYXRlLmNvbXBhcmUoX19zMS5k YXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAgIF9fczIuZGF0YSgpLCBfX3My LmRhdGEoKSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9f bG9jKQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwogICAgICBj b25zdCBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7 CiAgICAgIGlmICghKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFj ZXRzW19faV0pKQogICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgcmV0dXJuIHN0YXRp Y19jYXN0PGNvbnN0IF9GYWNldCY+KCpfX2ZhY2V0c1tfX2ldKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19s b2MpIHRocm93KCkKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsK ICAgICAgY29uc3QgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01f ZmFjZXRzOwogICAgICByZXR1cm4gKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXpl ICYmIF9fZmFjZXRzW19faV0pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy Pjo6CiAgICBfTV9leHRyYWN0X2Zsb2F0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlv c19iYXNlJiBfX2lvLAogICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9f eHRyYykgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJh aXRzX3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAg IGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+ KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxu dW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMg PSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19j dHlwZS53aWRlbignLScpOwogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19j ID0gKl9fYmVnOwogICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBf X3RyYWl0c190eXBlOjplcShfX2MsIF9fbWludXMpKQogICAmJiBfX2JlZyAhPSBfX2VuZCkKIHsK ICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgKytfX3BvczsKICAg X19jID0gKigrK19fYmVnKTsKIH0KCgogICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19j dHlwZS53aWRlbihfU19hdG9tc19pbltfTV96ZXJvXSk7CiAgICAgIGJvb2wgX19mb3VuZF96ZXJv ID0gZmFsc2U7CiAgICAgIHdoaWxlIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9femVybykgJiYg X19iZWcgIT0gX19lbmQpCiB7CiAgIF9fYyA9ICooKytfX2JlZyk7CiAgIF9fZm91bmRfemVybyA9 IHRydWU7CiB9CiAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiB7CiAgIF9feHRyYyArPSBfU19hdG9t c19pbltfTV96ZXJvXTsKICAgKytfX3BvczsKIH0KCgogICAgICBjb25zdCBzaXplX3QgX19sZW4g PSBfTV9FIC0gX01femVybyArIDE7CiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfX2xlbl07CiAg ICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXNfaW4sIF9TX2F0b21zX2luICsgX19sZW4sIF9fd2F0 b21zKTsKICAgICAgYm9vbCBfX2ZvdW5kX2RlYyA9IGZhbHNlOwogICAgICBib29sIF9fZm91bmRf c2NpID0gZmFsc2U7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2RlYyA9IF9fbnAuZGVjaW1hbF9w b2ludCgpOwoKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmlu ZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBp bmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNv bnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwoKICAgICAgd2hpbGUg KF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f cCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRvbXMsIDEwLCBfX2MpOwoKCiAgICAgICAgICBp ZiAoX19wICYmICFfX3RyYWl0c190eXBlOjplcShfX2MsIGNoYXJfdHlwZSgpKSkKICAgICB7Cgog ICAgICAgKytfX3BvczsKICAgICAgIF9feHRyYyArPSBfU19hdG9tc19pbltfX3AgLSBfX3dhdG9t c107CiAgICAgICArK19fc2VwX3BvczsKICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgfQog ICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3NlcCkKICAgICAmJiBf X2NoZWNrX2dyb3VwaW5nICYmICFfX2ZvdW5kX2RlYykKICAgICB7CgoKICAgICAgICAgICAgICBp ZiAoX19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5k X2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAg ICAgIF9fc2VwX3BvcyA9IDA7CiAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgIGVsc2UKICB7CiAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsK ICAgIGJyZWFrOwogIH0KICAgICAgICAgICAgfQogICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjpl cShfX2MsIF9fZGVjKSAmJiAhX19mb3VuZF9kZWMpCiAgICAgewoKCgogICAgICAgaWYgKF9fZm91 bmRfZ3JvdXBpbmcuc2l6ZSgpKQogIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hh cj4oX19zZXBfcG9zKTsKICAgICAgICsrX19wb3M7CiAgICAgICBfX3h0cmMgKz0gJy4nOwogICAg ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgIF9fZm91bmRfZGVjID0gdHJ1ZTsKICAgICB9CiAg IGVsc2UgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0b21zW19NX2VdKQogICAgICB8 fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0b21zW19NX0VdKSkKICAgICAmJiAhX19mb3Vu ZF9zY2kgJiYgX19wb3MpCiAgICAgewoKICAgICAgICsrX19wb3M7CiAgICAgICBfX3h0cmMgKz0g X19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgX19jID0gKigrK19fYmVnKTsKCgog ICAgICAgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKQogICAgfHwgX190cmFpdHNf dHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICB7CiAgICArK19fcG9zOwogICAgX194dHJjICs9IF9f Y3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgIF9fYyA9ICooKytfX2JlZyk7CiAgfQogICAg ICAgX19mb3VuZF9zY2kgPSB0cnVlOwogICAgIH0KICAgZWxzZQoKICAgICBicmVhazsKICAgICAg ICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6 ZSgpKQogICAgICAgIHsKCiAgIGlmICghX19mb3VuZF9kZWMpCiAgICAgX19mb3VuZF9ncm91cGlu ZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3Zlcmlm eV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICBfX2VyciB8PSBp b3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9IGNoYXIoKTsKICAg ICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7 CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy Pjo6CiAgICBfTV9leHRyYWN0X2ludChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBpb3Nf YmFzZSYgX19pbywKICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJj LCBpbnQmIF9fYmFzZSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hh clQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j KCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8 X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVz ZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGlvc19iYXNlOjpmbXRm bGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAg ICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgIF9fYmFzZSA9IDg7 CiAgICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgX19i YXNlID0gMTY7CiAgICAgIGVsc2UKIF9fYmFzZSA9IDEwOwoKCiAgICAgIGludCBfX3BvcyA9IDA7 CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3Bs dXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0g X19jdHlwZS53aWRlbignLScpOwoKICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9f cGx1cykgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgJiYgX19iZWcgIT0g X19lbmQpCiB7CiAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICsr X19wb3M7CiAgIF9fYyA9ICooKytfX2JlZyk7CiB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9f emVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNfaW5bX01femVyb10pOwogICAgICBjb25zdCBj aGFyX3R5cGUgX194ID0gX19jdHlwZS53aWRlbigneCcpOwogICAgICBjb25zdCBjaGFyX3R5cGUg X19YID0gX19jdHlwZS53aWRlbignWCcpOwogICAgICBpZiAoX19iYXNlID09IDEwKQogewogICBi b29sIF9fZm91bmRfemVybyA9IGZhbHNlOwogICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19j LCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAgIHsKICAgICAgIF9fYyA9ICooKytfX2Jl Zyk7CiAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwogICAgIH0KICAgaWYgKF9fZm91bmRfemVy bykKICAgICB7CiAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNfaW5bX01femVyb107CiAgICAgICAr K19fcG9zOwogICAgICAgaWYgKF9fYmFzZWZpZWxkID09IDApCiAgewogICAgaWYgKChfX3RyYWl0 c190eXBlOjplcShfX2MsIF9feCkKICAgICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBf X1gpKQogICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICB7CiAgICAgICAgX194dHJjICs9 IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICArK19fcG9zOwogICAgICAgIF9f YyA9ICooKytfX2JlZyk7CiAgICAgICAgX19iYXNlID0gMTY7CiAgICAgIH0KICAgIGVsc2UKICAg ICAgX19iYXNlID0gODsKICB9CiAgICAgfQogfQogICAgICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYp CiB7CiAgIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19l bmQpCiAgICAgewogICAgICAgX194dHJjICs9IF9TX2F0b21zX2luW19NX3plcm9dOwogICAgICAg KytfX3BvczsKICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICBpZiAoKF9fdHJhaXRzX3R5 cGU6OmVxKF9fYywgX194KSB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fWCkpCiAgICAmJiBf X2JlZyAhPSBfX2VuZCkKICB7CiAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFy KCkpOwogICAgKytfX3BvczsKICAgIF9fYyA9ICooKytfX2JlZyk7CiAgfQogICAgIH0KIH0KCgoK ICAgICAgc2l6ZV90IF9fbGVuOwogICAgICBpZiAoX19iYXNlID09IDE2KQogX19sZW4gPSBfTV9z aXplOwogICAgICBlbHNlCiBfX2xlbiA9IF9fYmFzZTsKCgogICAgICBjaGFyX3R5cGUgX193YXRv bXNbX01fc2l6ZV07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXNfaW4sIF9TX2F0b21zX2lu ICsgX19sZW4sIF9fd2F0b21zKTsKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAg IGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9f Y2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9 IDA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwog ICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hh cl90eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCBfX2xlbiwgX19jKTsK CgogICAgICAgICAgaWYgKF9fcCAmJiAhX190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUo KSkpCiAgICAgewoKICAgICAgIF9feHRyYyArPSBfU19hdG9tc19pbltfX3AgLSBfX3dhdG9tc107 CiAgICAgICArK19fcG9zOwogICAgICAgKytfX3NlcF9wb3M7CiAgICAgICBfX2MgPSAqKCsrX19i ZWcpOwogICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19z ZXApICYmIF9fY2hlY2tfZ3JvdXBpbmcpCiAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2Vw X3BvcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGlu ZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3Nl cF9wb3MgPSAwOwogICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICBlbHNlCiAgewogICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICBicmVh azsKICB9CiAgICAgICAgICAgIH0KICAgZWxzZQoKICAgICBicmVhazsKICAgICAgICB9CgoKCiAg ICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAg ICAgIHsKCiAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9f c2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9f Zm91bmRfZ3JvdXBpbmcpKQogICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAg IH0KCgogICAgICBfX3h0cmMgKz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAg ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg fQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J bkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgewoKICAgICAgaWYgKCEo X19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkpCiAgICAgICAgewoKCiAgICAgICAg ICBzdHJpbmcgX194dHJjOwogICAgICAgICAgaW50IF9fYmFzZTsKICAgICAgICAgIF9fYmVnID0g X01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2Up OwoKICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIo KSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICBpZiAoIShfX2VyciAmIGlv c19iYXNlOjpmYWlsYml0KSAmJiBfX3VsIDw9IDEpCiAgICAgX192ID0gX191bDsKICAgZWxzZQog ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAg ZWxzZQogICAgICAgIHsKICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5 cGU7CiAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAg ICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICBjb25zdCBudW1wdW5jdDxfQ2hh clQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgIGNvbnN0 IF9fc3RyaW5nX3R5cGUgX190cnVlID0gX19ucC50cnVlbmFtZSgpOwogICBjb25zdCBfX3N0cmlu Z190eXBlIF9fZmFsc2UgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX3RydWVzID0gX190cnVlLmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq IF9fZmFsc2VzID0gX19mYWxzZS5jX3N0cigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1 ZW4gPSBfX3RydWUuc2l6ZSgpIC0gMTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZhbHNlbiA9 IF9fZmFsc2Uuc2l6ZSgpIC0gMTsKCiAgICAgICAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBfX2Jl ZyAhPSBfX2VuZDsgKytfX24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUg X19jID0gKl9fYmVnKys7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RmID0gX19uIDw9IF9fZmFs c2VuCiAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2ZhbHNlc1tfX25d KSA6IGZhbHNlOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0dCA9IF9fbiA8PSBfX3RydWVuCiAg ICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3RydWVzW19fbl0pIDogZmFs c2U7CiAgICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2Ug aWYgKF9fdGVzdGYgJiYgX19uID09IF9fZmFsc2VuKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX3YgPSAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0ICYmIF9fbiA9PSBfX3RydWVuKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3YgPSAxOwogICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgaWYg KF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0Owog ICAgICAgIH0KICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQs IF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25n JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7 CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vyciwg X194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192 LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewogICAgICBz dHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3Rf aW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgdW5z aWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191 bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19i YXNlOjpmYWlsYml0KQogICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0 Pjo6bWF4KCkpCiBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191bCk7CiAgICAg IGVsc2UKIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19iZWc7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J bkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7CiAgICAg IHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFj dF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICB1 bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBf X3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9z X2Jhc2U6OmZhaWxiaXQpCiAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50 Pjo6bWF4KCkpCiBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOwogICAgICBl bHNlCiBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAg c3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0 X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9f Y29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19i YXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9J bkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z X2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxv bmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFz ZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy LCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBf X3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewog ICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4 dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAg ICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxl LCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9f dikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUo MzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBf X2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwg X19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1f Z2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90 eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAg ICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2Jl ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0 cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg IF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90 eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgIHsKICAg ICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9 IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAg ICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxl KTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3Yp IGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIGlvc19iYXNlOjpmbXRmbGFncyBmbXRmbGFnczsK ICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGZtdGZsYWdzIF9fZm10 bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6Omlu dGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6 aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CgogICAgICBzdHJpbmcgX194dHJjOwogICAgICBp bnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19p bywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCgogICAgICBfX2lvLmZsYWdzKF9fZm10KTsKCiAg ICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3Ry KCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIg JiBpb3NfYmFzZTo6ZmFpbGJpdCkpCiBfX3YgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX3Vs KTsKICAgICAgZWxzZQogX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBf X2JlZzsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ dGVyPgogICAgdm9pZAogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9wYWQo X0NoYXJUIF9fZmlsbCwgc3RyZWFtc2l6ZSBfX3csIGlvc19iYXNlJiBfX2lvLAogICAgX0NoYXJU KiBfX25ldywgY29uc3QgX0NoYXJUKiBfX2NzLCBpbnQmIF9fbGVuKSBjb25zdAogICAgewoKCiAg ICAgIF9fcGFkPF9DaGFyVCwgY2hhcl90cmFpdHM8X0NoYXJUPiA+OjpfU19wYWQoX19pbywgX19m aWxsLCBfX25ldywgX19jcywKICAgICAgICBfX3csIF9fbGVuLCB0cnVlKTsKICAgICAgX19sZW4g PSBzdGF0aWNfY2FzdDxpbnQ+KF9fdyk7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+CiAgICBpbmxpbmUgaW50CiAgICBfX2ludF90b19jaGFyKF9DaGFyVCogX19vdXQsIGNvbnN0 IGludCBfX3NpemUsIGxvbmcgX192LAogICAgICAgICBjb25zdCBfQ2hhclQqIF9fbGl0LCBpb3Nf YmFzZTo6Zm10ZmxhZ3MgX19mbGFncykKICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsID0g c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX192KTsKICAgICAgYm9vbCBfX25lZyA9IGZhbHNl OwogICAgICBpZiAoX192IDwgMCkKIHsKICAgX191bCA9IC1fX3VsOwogICBfX25lZyA9IHRydWU7 CiB9CiAgICAgIHJldHVybiBfX2ludF90b19jaGFyKF9fb3V0LCBfX3NpemUsIF9fdWwsIF9fbGl0 LCBfX2ZsYWdzLCBfX25lZyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBpbnQKICAgIF9faW50X3RvX2NoYXIoX0NoYXJUKiBfX291dCwgY29uc3QgaW50IF9f c2l6ZSwgdW5zaWduZWQgbG9uZyBfX3YsCiAgICAgICAgIGNvbnN0IF9DaGFyVCogX19saXQsIGlv c19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzKQogICAgeyByZXR1cm4gX19pbnRfdG9fY2hhcihfX291 dCwgX19zaXplLCBfX3YsIF9fbGl0LCBfX2ZsYWdzLCBmYWxzZSk7IH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBpbnQKICAgIF9faW50X3RvX2NoYXIoX0NoYXJUKiBf X291dCwgY29uc3QgaW50IF9fc2l6ZSwgbG9uZyBsb25nIF9fdiwKICAgICAgICAgY29uc3QgX0No YXJUKiBfX2xpdCwgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MpCiAgICB7CiAgICAgIHVuc2ln bmVkIGxvbmcgbG9uZyBfX3VsbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX192 KTsKICAgICAgYm9vbCBfX25lZyA9IGZhbHNlOwogICAgICBpZiAoX192IDwgMCkKIHsKICAgX191 bGwgPSAtX191bGw7CiAgIF9fbmVnID0gdHJ1ZTsKIH0KICAgICAgcmV0dXJuIF9faW50X3RvX2No YXIoX19vdXQsIF9fc2l6ZSwgX191bGwsIF9fbGl0LCBfX2ZsYWdzLCBfX25lZyk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBpbnQKICAgIF9faW50X3RvX2No YXIoX0NoYXJUKiBfX291dCwgY29uc3QgaW50IF9fc2l6ZSwgdW5zaWduZWQgbG9uZyBsb25nIF9f diwKICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xpdCwgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxh Z3MpCiAgICB7IHJldHVybiBfX2ludF90b19jaGFyKF9fb3V0LCBfX3NpemUsIF9fdiwgX19saXQs IF9fZmxhZ3MsIGZhbHNlKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVmFsdWVUPgogICAgaW50CiAgICBfX2ludF90b19jaGFyKF9DaGFyVCogX19vdXQsIGNvbnN0 IGludCBfX3NpemUsIF9WYWx1ZVQgX192LAogICAgY29uc3QgX0NoYXJUKiBfX2xpdCwgaW9zX2Jh c2U6OmZtdGZsYWdzIF9fZmxhZ3MsIGJvb2wgX19uZWcpCiAgICB7CgogICAgICBjb25zdCBib29s IF9fc2hvd2Jhc2UgPSAoX19mbGFncyAmIGlvc19iYXNlOjpzaG93YmFzZSkgJiYgX192OwogICAg ICBjb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2ZsYWdzICYgaW9zX2Jh c2U6OmJhc2VmaWVsZDsKICAgICAgX0NoYXJUKiBfX2J1ZiA9IF9fb3V0ICsgX19zaXplIC0gMTsK ICAgICAgX0NoYXJUKiBfX2J1ZmVuZCA9IF9fb3V0ICsgX19zaXplOwoKICAgICAgaWYgKF9fYnVp bHRpbl9leHBlY3QoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCwgZmFsc2UpKQogewoKICAg ZG8KICAgICB7CiAgICAgICAqX19idWYtLSA9IF9fbGl0WyhfX3YgJiAweDcpICsgX19udW1fYmFz ZTo6X1NfZGlnaXRzXTsKICAgICAgIF9fdiA+Pj0gMzsKICAgICB9CiAgIHdoaWxlIChfX3YgIT0g MCk7CiAgIGlmIChfX3Nob3diYXNlKQogICAgICpfX2J1Zi0tID0gX19saXRbX19udW1fYmFzZTo6 X1NfZGlnaXRzXTsKIH0KICAgICAgZWxzZSBpZiAoX19idWlsdGluX2V4cGVjdChfX2Jhc2VmaWVs ZCA9PSBpb3NfYmFzZTo6aGV4LCBmYWxzZSkpCiB7CgogICBjb25zdCBib29sIF9fdXBwZXJjYXNl ID0gX19mbGFncyAmIGlvc19iYXNlOjp1cHBlcmNhc2U7CiAgIGludCBfX2Nhc2Vfb2Zmc2V0ID0g X191cHBlcmNhc2UKICAgICAgICAgICAgICAgICAgICAgICA/IF9fbnVtX2Jhc2U6Ol9TX3VkaWdp dHMgOiBfX251bV9iYXNlOjpfU19kaWdpdHM7CiAgIGRvCiAgICAgewogICAgICAgKl9fYnVmLS0g PSBfX2xpdFsoX192ICYgMHhmKSArIF9fY2FzZV9vZmZzZXRdOwogICAgICAgX192ID4+PSA0Owog ICAgIH0KICAgd2hpbGUgKF9fdiAhPSAwKTsKICAgaWYgKF9fc2hvd2Jhc2UpCiAgICAgewoKICAg ICAgICpfX2J1Zi0tID0gX19saXRbX19udW1fYmFzZTo6X1NfeCArIF9fdXBwZXJjYXNlXTsKCiAg ICAgICAqX19idWYtLSA9IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX2RpZ2l0c107CiAgICAgfQogfQog ICAgICBlbHNlCiB7CgogICBkbwogICAgIHsKICAgICAgICpfX2J1Zi0tID0gX19saXRbKF9fdiAl IDEwKSArIF9fbnVtX2Jhc2U6Ol9TX2RpZ2l0c107CiAgICAgICBfX3YgLz0gMTA7CiAgICAgfQog ICB3aGlsZSAoX192ICE9IDApOwogICBpZiAoX19uZWcpCiAgICAgKl9fYnVmLS0gPSBfX2xpdFtf X251bV9iYXNlOjpfU19taW51c107CiAgIGVsc2UgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hv d3BvcykKICAgICAqX19idWYtLSA9IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX3BsdXNdOwogfQogICAg ICBpbnQgX19yZXQgPSBfX2J1ZmVuZCAtIF9fYnVmIC0gMTsKICAgICAgcmV0dXJuIF9fcmV0Owog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg dm9pZAogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9ncm91cF9pbnQoY29u c3Qgc3RyaW5nJiBfX2dyb3VwaW5nLCBfQ2hhclQgX19zZXAsIGlvc19iYXNlJiBfX2lvLAogICBf Q2hhclQqIF9fbmV3LCBfQ2hhclQqIF9fY3MsIGludCYgX19sZW4pIGNvbnN0CiAgICB7CgoKCgoK ICAgICAgc3RyZWFtc2l6ZSBfX29mZiA9IDA7CiAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFn cyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKChfX2lvLmZsYWdzKCkg JiBpb3NfYmFzZTo6c2hvd2Jhc2UpICYmIF9fbGVuID4gMSkKIGlmIChfX2Jhc2VmaWVsZCA9PSBp b3NfYmFzZTo6b2N0KQogICB7CiAgICAgX19vZmYgPSAxOwogICAgICpfX25ldyA9ICpfX2NzOwog ICB9CiBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQogICB7CiAgICAgX19v ZmYgPSAyOwogICAgICpfX25ldyA9ICpfX2NzOwogICAgICooX19uZXcgKyAxKSA9ICooX19jcyAr IDEpOwogICB9CiAgICAgIF9DaGFyVCogX19wOwogICAgICBfX3AgPSBfX2FkZF9ncm91cGluZyhf X25ldyArIF9fb2ZmLCBfX3NlcCwKICAgICAgX19ncm91cGluZy5jX3N0cigpLAogICAgICBfX2dy b3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgX19jcyArIF9fb2ZmLCBf X2NzICsgX19sZW4pOwogICAgICBfX2xlbiA9IF9fcCAtIF9fbmV3OwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5h bWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVy Pjo6CiAgICAgIF9NX2NvbnZlcnRfaW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9D aGFyVCBfX2ZpbGwsCiAgICAgICBfVmFsdWVUIF9fdikgY29uc3QKICAgICAgewogdHlwZWRlZiBf X2xvY2FsZV9jYWNoZTxfQ2hhclQ+IF9fY2FjaGVfdHlwZTsKIF9fY2FjaGVfdHlwZSYgX19sYyA9 IHN0YXRpY19jYXN0PF9fY2FjaGVfdHlwZSY+KF9faW8uX01fY2FjaGUoKSk7CiBfQ2hhclQqIF9f bGl0ID0gX19sYy5fTV9saXRlcmFsczsKCgogaW50IF9faWxlbiA9IDQgKiBzaXplb2YoX1ZhbHVl VCk7CiBfQ2hhclQqIF9fY3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2Nh KHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICogX19pbGVuKSk7CgoKIGludCBfX2xlbjsKIF9f bGVuID0gX19pbnRfdG9fY2hhcigmX19jc1swXSwgX19pbGVuLCBfX3YsIF9fbGl0LCBfX2lvLmZs YWdzKCkpOwogX19jcyA9IF9fY3MgKyBfX2lsZW4gLSBfX2xlbjsKCgogX0NoYXJUKiBfX2NzMjsK IGlmIChfX2xjLl9NX3VzZV9ncm91cGluZykKICAgewoKCiAgICAgX19jczIgPSBzdGF0aWNfY2Fz dDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICogX19s ZW4gKiAyKSk7CiAgICAgX01fZ3JvdXBfaW50KF9fbGMuX01fZ3JvdXBpbmcsIF9fbGMuX01fdGhv dXNhbmRzX3NlcCwgX19pbywKICAgIF9fY3MyLCBfX2NzLCBfX2xlbik7CiAgICAgX19jcyA9IF9f Y3MyOwogICB9CgoKIF9DaGFyVCogX19jczM7CiBzdHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgo KTsKIGlmIChfX3cgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2xlbikpCiAgIHsKICAgICBf X2NzMyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy VCkKICAgICAgICAgKiBfX3cpKTsKICAgICBfTV9wYWQoX19maWxsLCBfX3csIF9faW8sIF9fY3Mz LCBfX2NzLCBfX2xlbik7CiAgICAgX19jcyA9IF9fY3MzOwogICB9CiBfX2lvLndpZHRoKDApOwoK CgogcmV0dXJuIF9fd3JpdGUoX19zLCBfX2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIHZvaWQKICAgIG51bV9wdXQ8 X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01fZ3JvdXBfZmxvYXQoY29uc3Qgc3RyaW5nJiBfX2dy b3VwaW5nLCBfQ2hhclQgX19zZXAsIGNvbnN0IF9DaGFyVCogX19wLAogICAgIF9DaGFyVCogX19u ZXcsIF9DaGFyVCogX19jcywgaW50JiBfX2xlbikgY29uc3QKICAgIHsKCgoKICAgICAgX0NoYXJU KiBfX3AyOwogICAgICBpbnQgX19kZWNsZW4gPSBfX3AgPyBfX3AgLSBfX2NzIDogX19sZW47CiAg ICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX25ldywgX19zZXAsCiAgICAgICBfX2dyb3VwaW5n LmNfc3RyKCksCiAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwK ICAgICAgIF9fY3MsIF9fY3MgKyBfX2RlY2xlbik7CgoKICAgICAgaW50IF9fbmV3bGVuID0gX19w MiAtIF9fbmV3OwogICAgICBpZiAoX19wKQogewogICBjaGFyX3RyYWl0czxfQ2hhclQ+Ojpjb3B5 KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CiAgIF9fbmV3bGVuICs9IF9fbGVuIC0gX19k ZWNsZW47CiB9CiAgICAgIF9fbGVuID0gX19uZXdsZW47CgogICAgfQojIDg1MiAiL2djYy9kamUv YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlw ZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJ dGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19p bywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgX1ZhbHVlVCBfX3YpIGNvbnN0 CiAgICAgIHsKCgoKCgoKCiBjb25zdCBpbnQgX19tYXhfZGlnaXRzID0gbnVtZXJpY19saW1pdHM8 X1ZhbHVlVD46OmRpZ2l0czEwICsgMjsKCgogc3RyZWFtc2l6ZSBfX3ByZWMgPSBfX2lvLnByZWNp c2lvbigpOwogaWYgKF9fcHJlYyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0 cykpCiAgIF9fcHJlYyA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0cyk7CiBl bHNlIGlmIChfX3ByZWMgPCBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPigwKSkKICAgX19wcmVjID0g c3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oNik7CgogdHlwZWRlZiBfX2xvY2FsZV9jYWNoZTxfQ2hh clQ+IF9fY2FjaGVfdHlwZTsKIF9fY2FjaGVfdHlwZSYgX19sYyA9IHN0YXRpY19jYXN0PF9fY2Fj aGVfdHlwZSY+KF9faW8uX01fY2FjaGUoKSk7CgoKIGludCBfX2xlbjsKCiBjaGFyIF9fZmJ1Zlsx Nl07CiMgOTAzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2NhbGVf ZmFjZXRzLnRjYyIgMwogY29uc3QgYm9vbCBfX2ZpeGVkID0gX19pby5mbGFncygpICYgaW9zX2Jh c2U6OmZpeGVkOwogY29uc3QgaW50IF9fbWF4X2V4cCA9IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+ OjptYXhfZXhwb25lbnQxMDsKCgoKCgoKIGNvbnN0IGludCBfX2NzX3NpemUgPSBfX2ZpeGVkID8g X19tYXhfZXhwICsgX19tYXhfZGlnaXRzICsgNAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiBfX21heF9kaWdpdHMgKiAzOwogY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihf X2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwoKIF9TX2Zvcm1hdF9mbG9hdChfX2lvLCBfX2Zi dWYsIF9fbW9kKTsKIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCAwLCBfX2ZidWYsIF9f diwgX1NfY19sb2NhbGUsIF9fcHJlYyk7CgoKCgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBf X2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2Zh Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNf Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAq IF9fbGVuKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsK CgogICAgICBjb25zdCBfQ2hhclQgX19jZGVjID0gX19jdHlwZS53aWRlbignLicpOwogICAgICBj b25zdCBfQ2hhclQgX19kZWMgPSBfX2xjLl9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNvbnN0IF9D aGFyVCogX19wOwogICAgICBpZiAoX19wID0gY2hhcl90cmFpdHM8X0NoYXJUPjo6ZmluZChfX3dz LCBfX2xlbiwgX19jZGVjKSkKIF9fd3NbX19wIC0gX193c10gPSBfX2RlYzsKCgogICAgICBfQ2hh clQqIF9fd3MyOwogICAgICBpZiAoX19sYy5fTV91c2VfZ3JvdXBpbmcpCiB7CgoKICAgICBfX3dz MiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkK ICAgICAgICAgKiBfX2xlbiAqIDIpKTsKICAgICBfTV9ncm91cF9mbG9hdChfX2xjLl9NX2dyb3Vw aW5nLCBfX2xjLl9NX3Rob3VzYW5kc19zZXAsIF9fcCwKICAgICAgX193czIsIF9fd3MsIF9fbGVu KTsKICAgICBfX3dzID0gX193czI7CiB9CgoKICAgICAgX0NoYXJUKiBfX3dzMzsKICAgICAgc3Ry ZWFtc2l6ZSBfX3cgPSBfX2lvLndpZHRoKCk7CiAgICAgIGlmIChfX3cgPiBzdGF0aWNfY2FzdDxz dHJlYW1zaXplPihfX2xlbikpCiB7CiAgIF9fd3MzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19i dWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICBfTV9wYWQoX19maWxsLCBf X3csIF9faW8sIF9fd3MzLCBfX3dzLCBfX2xlbik7CiAgIF9fd3MgPSBfX3dzMzsKIH0KICAgICAg X19pby53aWR0aCgwKTsKCgoKICAgICAgcmV0dXJuIF9fd3JpdGUoX19zLCBfX3dzLCBfX2xlbik7 CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4K ICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChp dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3Yp IGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFn cygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAg ICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9 IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCBfX3V2KTsKICAgICAgICB9CiAgICAg IGVsc2UKICAgICAgICB7CiAgIHR5cGVkZWYgX19sb2NhbGVfY2FjaGU8X0NoYXJUPiBfX2NhY2hl X3R5cGU7CiAgIF9fY2FjaGVfdHlwZSYgX19sYyA9IHN0YXRpY19jYXN0PF9fY2FjaGVfdHlwZSY+ KF9faW8uX01fY2FjaGUoKSk7CiAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJp bmdfdHlwZTsKICAgX19zdHJpbmdfdHlwZSBfX25hbWU7CiAgICAgICAgICBpZiAoX192KQogICAg IF9fbmFtZSA9IF9fbGMuX01fdHJ1ZW5hbWU7CiAgICAgICAgICBlbHNlCiAgICAgX19uYW1lID0g X19sYy5fTV9mYWxzZW5hbWU7CgogICBjb25zdCBfQ2hhclQqIF9fY3MgPSBfX25hbWUuY19zdHIo KTsKICAgaW50IF9fbGVuID0gX19uYW1lLnNpemUoKTsKICAgX0NoYXJUKiBfX2NzMzsKICAgc3Ry ZWFtc2l6ZSBfX3cgPSBfX2lvLndpZHRoKCk7CiAgIGlmIChfX3cgPiBzdGF0aWNfY2FzdDxzdHJl YW1zaXplPihfX2xlbikpCiAgICAgewogICAgICAgX19jczMgPSBzdGF0aWNfY2FzdDxfQ2hhclQq PihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgKiBfX3cpKTsKICAg ICAgIF9NX3BhZChfX2ZpbGwsIF9fdywgX19pbywgX19jczMsIF9fY3MsIF9fbGVuKTsKICAgICAg IF9fY3MgPSBfX2NzMzsKICAgICB9CiAgIF9faW8ud2lkdGgoMCk7CiAgIF9fcyA9IF9fd3JpdGUo X19zLCBfX2NzLCBfX2xlbik7CiB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVt X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4g X01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0 PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg X19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29u c3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCBfX3YpOyB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091 dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlw ZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNv bnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19maWxsLCBfX3YpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0 SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBl IF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywg X19pbywgX19maWxsLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46 OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m aWxsLCBkb3VibGUgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9mbG9hdChfX3Ms IF9faW8sIF9fZmlsbCwgY2hhcigpLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9P dXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJf dHlwZSBfX2ZpbGwsCiAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9j b252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1f cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz ZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNv bnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygp OwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwg aW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jh c2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZsYWdzICYgX19mbXQgfCAoaW9zX2Jh c2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwogICAgICB0cnkKIHsKICAgX19zID0gX01f Y29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsCiAgICAgICAgICByZWludGVycHJldF9jYXN0 PHVuc2lnbmVkIGxvbmc+KF9fdikpOwogICBfX2lvLmZsYWdzKF9fZmxhZ3MpOwogfQogICAgICBj YXRjaCAoLi4uKQogewogICBfX2lvLmZsYWdzKF9fZmxhZ3MpOwogICB0aHJvdzsKIH0KICAgICAg cmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv c19iYXNlJiBfX2lvLAogICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYg X191bml0cykgY29uc3QKICAgIHsKICAgICAgc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fYmVn ID0gdGhpcy0+ZG9fZ2V0KF9fYmVnLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19zdHIp OwoKICAgICAgY29uc3QgaW50IF9fbiA9IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6ZGln aXRzMTA7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs bG9jYShfX24pKTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAg ICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ ID4oX19sb2MpOwogICAgICBjb25zdCBfQ2hhclQqIF9fd2NzID0gX19zdHIuY19zdHIoKTsKICAg ICAgX19jdHlwZS5uYXJyb3coX193Y3MsIF9fd2NzICsgX19zdHIuc2l6ZSgpICsgMSwgY2hhcigp LCBfX2NzKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX19jcywgX191bml0cywgX19lcnIsIF9TX2Nf bG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJU LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs IGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIG1vbmV5 cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5j dDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6 OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBl IHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg ICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihf X2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9u ZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVz ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAgY29uc3QgbW9uZXlfYmFzZTo6 cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkKICAgICAgICAgIDogX19t cGYubmVnX2Zvcm1hdCgpOwoKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19wb3Nfc2lnbiA9X19p bnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpCiAgICAgICAgOiBfX21wZi5wb3NpdGl2ZV9zaWdu KCk7CiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fbmVnX3NpZ24gPV9faW50bCA/IF9fbXB0Lm5l Z2F0aXZlX3NpZ24oKQogICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICBjb25z dCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpCiAgICAgICAg ICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgIGNvbnN0IGNoYXJfdHlw ZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAgICAgICAgICAgOiBf X21wZi50aG91c2FuZHNfc2VwKCk7CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9f aW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0cmlu Z190eXBlIF9fc2lnbjsKCiAgICAgIHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBf X3NlcF9wb3MgPSAwOwoKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBib29s IF9fdGVzdGRlY2ZvdW5kID0gZmFsc2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRz OwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0g c3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAg ICAgIGZvciAoaW50IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0 dmFsaWQ7ICsrX19pKQogewogICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3Au ZmllbGRbX19pXSk7CiAgIHN3aXRjaCAoX193aGljaCkKICB7CiAgY2FzZSBtb25leV9iYXNlOjpz eW1ib2w6CiAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAg fHwgX19pIDwgMiB8fCBfX3NpZ24uc2l6ZSgpID4gMQogICAgICAgIHx8ICgoc3RhdGljX2Nhc3Q8 cGFydD4oX19wLmZpZWxkWzNdKSAhPSBtb25leV9iYXNlOjpub25lKQogICAgICYmIF9faSA9PSAy KSkKICAgICAgewoKCgoKCiAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2lu dGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2wo KTsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3N5bWJvbC5zaXplKCk7CiAgICAgICAgc2l6 ZV90eXBlIF9faiA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgJiYg X19qIDwgX19sZW4gJiYgX19zeW1ib2xbX19qXSA9PSBfX2MpCiAgIHsKICAgICBfX2MgPSAqKCsr X19iZWcpOwogICAgICsrX19qOwogICB9CgoKICAgICAgICBpZiAoX19qICE9IF9fbGVuICYmIChf X2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpKQogICBfX3Rlc3R2YWxpZCA9IGZhbHNl OwogICAgICB9CiAgICBicmVhazsKICBjYXNlIG1vbmV5X2Jhc2U6OnNpZ246CgogICAgaWYgKF9f cG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAgewoKICAgICAgaWYgKF9f YyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAgIHsKICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAg X19jID0gKigrK19fYmVnKTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX25lZ19z aWduWzBdKQogICAgICAgIHsKICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgX19jID0gKigrK19f YmVnKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwog ICAgfQogICAgZWxzZSBpZiAoX19wb3Nfc2lnbi5zaXplKCkgJiYgX19jID09IF9fcG9zX3NpZ25b MF0pCiAgICAgIHsKICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOwogICAgICAgIF9fYyA9ICoo KytfX2JlZyk7CiAgICAgIH0KICAgIGVsc2UgaWYgKF9fbmVnX3NpZ24uc2l6ZSgpICYmIF9fYyA9 PSBfX25lZ19zaWduWzBdKQogICAgICB7CiAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAg ICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICB9CiAgICBicmVhazsKICBjYXNlIG1vbmV5X2Jh c2U6OnZhbHVlOgoKCiAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICYmIChfX2N0eXBlLmlz KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpCiAgICAgICAgfHwgKF9fYyA9PSBfX2QgJiYgIV9fdGVz dGRlY2ZvdW5kKQogICAgICAgIHx8IF9fYyA9PSBfX3NlcCkpCiAgICAgIHsKICAgICAgICBpZiAo X19jID09IF9fZCkKICAgewogICAgIF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+ KF9fc2VwX3Bvcyk7CiAgICAgX19zZXBfcG9zID0gMDsKICAgICBfX3Rlc3RkZWNmb3VuZCA9IHRy dWU7CiAgIH0KICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19zZXApCiAgIHsKICAgICBpZiAoX19n cm91cGluZy5zaXplKCkpCiAgICAgICB7CgogICAgICAgICBfX2dyb3VwaW5nX3RtcCArPSBzdGF0 aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAg fQogICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAg ICAgYnJlYWs7CiAgICAgICB9CiAgIH0KICAgICAgICBlbHNlCiAgIHsKICAgICBfX3RlbXBfdW5p dHMgKz0gX19jOwogICAgICsrX19zZXBfcG9zOwogICB9CiAgICAgICAgX19jID0gKigrK19fYmVn KTsKICAgICAgfQogICAgYnJlYWs7CiAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKICBjYXNlIG1v bmV5X2Jhc2U6Om5vbmU6CgogICAgaWYgKF9faSAhPSAzKQogICAgICB3aGlsZSAoX19iZWcgIT0g X19lbmQKICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAg ICBfX2MgPSAqKCsrX19iZWcpOwogICAgYnJlYWs7CiAgfQogfQoKCiAgICAgIGlmIChfX3NpZ24u c2l6ZSgpID4gMSkKIHsKICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaWduLnNpemUoKTsKICAgc2l6 ZV90eXBlIF9faSA9IDE7CiAgIGZvciAoOyBfX2MgIT0gX19lb2YgJiYgX19pIDwgX19sZW47ICsr X19pKQogICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2MgIT0gX19zaWduW19faV0pCiAg ICAgICBfX2MgPSAqKCsrX19iZWcpOwoKICAgaWYgKF9faSAhPSBfX2xlbikKICAgICBfX3Rlc3R2 YWxpZCA9IGZhbHNlOwogfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5pdHNbMF0gPT0gX19jdHlw ZS53aWRlbignMCcpKQogX190ZW1wX3VuaXRzLmVyYXNlKF9fdGVtcF91bml0cy5iZWdpbigpKTsK CiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpICYmIF9fc2lnbiA9PSBfX25lZ19zaWduKQogX190ZW1w X3VuaXRzLmluc2VydChfX3RlbXBfdW5pdHMuYmVnaW4oKSwgX19jdHlwZS53aWRlbignLScpKTsK CgogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkgJiYgX19ncm91cGluZ190bXAuc2l6ZSgpKQog ewogICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZ3JvdXBpbmdfdG1wKSkK ICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiBf X2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwoKCiAgICAgIGlmICghX190ZXN0dmFsaWQgfHwgIV9f dGVtcF91bml0cy5zaXplKCkpCiBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgZWxz ZQoKIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091 dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90 eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAog ICAgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QKICAgIHsKICAgICAgY29uc3QgbG9jYWxlIF9f bG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9 IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwojIDEzMDkgIi9nY2MvZGplL2J1aWxk L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgICAgIGNvbnN0 IGludCBfX2NzX3NpemUgPSBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT46Om1heF9leHBvbmVu dDEwICsgNTsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5f YWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9f Y3MsIDAsICIlLjAxTGYiLCBfX3VuaXRzLCBfU19jX2xvY2FsZSk7CgogICAgICBfQ2hhclQqIF9f d3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQp CiAgICAgICAgICAqIF9fY3Nfc2l6ZSkpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3Mg KyBfX2xlbiwgX193cyk7CiAgICAgIHN0cmluZ190eXBlIF9fZGlnaXRzKF9fd3MpOwogICAgICBy ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg IF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0 ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmls bCwKICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlw ZWRlZiBtb25leV9iYXNlOjpwYXJ0IHBhcnQ7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBf X2lvLmdldGxvYygpOwogICAgICBjb25zdCBzaXplX3R5cGUgX193aWR0aCA9IHN0YXRpY19jYXN0 PHNpemVfdHlwZT4oX19pby53aWR0aCgpKTsKCgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0No YXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQs IGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0g dXNlX2ZhY2V0PF9fbW9uZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNl JiBfX21wZiA9IHVzZV9mYWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0 eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsK CgoKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2JlZyA9IF9fZGlnaXRzLmRhdGEoKTsKICAgICAg Y29uc3QgY2hhcl90eXBlKiBfX2VuZCA9IF9fYmVnICsgX19kaWdpdHMuc2l6ZSgpOwogICAgICBt b25leV9iYXNlOjpwYXR0ZXJuIF9fcDsKICAgICAgc3RyaW5nX3R5cGUgX19zaWduOwogICAgICBp ZiAoKl9fYmVnICE9IF9fY3R5cGUud2lkZW4oJy0nKSkKIHsKICAgX19wID0gX19pbnRsID8gX19t cHQucG9zX2Zvcm1hdCgpIDogX19tcGYucG9zX2Zvcm1hdCgpOwogICBfX3NpZ24gPV9faW50bCA/ IF9fbXB0LnBvc2l0aXZlX3NpZ24oKSA6IF9fbXBmLnBvc2l0aXZlX3NpZ24oKTsKIH0KICAgICAg ZWxzZQogewogICBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkgOiBfX21wZi5uZWdf Zm9ybWF0KCk7CiAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDogX19t cGYubmVnYXRpdmVfc2lnbigpOwogICArK19fYmVnOwogfQoKCiAgICAgIF9fZW5kID0gX19jdHlw ZS5zY2FuX25vdChjdHlwZV9iYXNlOjpkaWdpdCwgX19iZWcsIF9fZW5kKTsKICAgICAgaWYgKF9f YmVnICE9IF9fZW5kKQogewoKCgogICBzdHJpbmdfdHlwZSBfX3JlczsKICAgc3RyaW5nX3R5cGUg X192YWx1ZTsKICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5j dXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2woKTsKCgogICBj b25zdCBpbnQgX19mcmFjID0gX19pbnRsID8gX19tcHQuZnJhY19kaWdpdHMoKQogICAgICAgICAg ICA6IF9fbXBmLmZyYWNfZGlnaXRzKCk7CiAgIGlmIChfX2ZyYWMgPiAwKQogICAgIHsKICAgICAg IGNvbnN0IGNoYXJfdHlwZSBfX2QgPSBfX2ludGwgPyBfX21wdC5kZWNpbWFsX3BvaW50KCkKICAg ICAgICA6IF9fbXBmLmRlY2ltYWxfcG9pbnQoKTsKICAgICAgIGlmIChfX2VuZCAtIF9fYmVnID49 IF9fZnJhYykKICB7CiAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQgLSBfX2ZyYWMsIF9f ZW5kKTsKICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19kKTsKICAgIF9fZW5k IC09IF9fZnJhYzsKICB9CiAgICAgICBlbHNlCiAgewoKICAgIF9fdmFsdWUgPSBzdHJpbmdfdHlw ZShfX2JlZywgX19lbmQpOwogICAgaW50IF9fcGFkZGVjID0gX19mcmFjIC0gKF9fZW5kIC0gX19i ZWcpOwogICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAgIF9fdmFs dWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19wYWRkZWMsIF9femVybyk7CiAgICBfX3ZhbHVl Lmluc2VydChfX3ZhbHVlLmJlZ2luKCksIF9fZCk7CiAgICBfX2JlZyA9IF9fZW5kOwogIH0KICAg ICB9CgoKCiAgIGlmIChfX2JlZyAhPSBfX2VuZCkKICAgICB7CiAgICAgICBjb25zdCBzdHJpbmcg X19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkKICAgICAgICAgICAgOiBfX21w Zi5ncm91cGluZygpOwogICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogIHsKICAgIGNvbnN0 IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAgICAg ICAgICAgICAgICA6IF9fbXBmLnRob3VzYW5kc19zZXAoKTsKICAgIGNvbnN0IGNoYXIqIF9fZ2Jl ZyA9IF9fZ3JvdXBpbmcuY19zdHIoKTsKICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyAr IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgY29uc3QgaW50IF9fbiA9IChfX2VuZCAtIF9fYmVnKSAq IDI7CiAgICBfQ2hhclQqIF9fd3MyID0KICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0No YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOwogICAgX0NoYXJU KiBfX3dzX2VuZCA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyLCBfX3NlcCwgX19nYmVnLAogICAgICAg ICAgX19nZW5kLCBfX2JlZywgX19lbmQpOwogICAgX192YWx1ZS5pbnNlcnQoMCwgX193czIsIF9f d3NfZW5kIC0gX193czIpOwogIH0KICAgICAgIGVsc2UKICBfX3ZhbHVlLmluc2VydCgwLCBzdHJp bmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICB9CgoKICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9f ZiA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKICAgc2l6ZV90eXBlIF9f bGVuID0gX192YWx1ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgpOwogICBfX2xlbiArPSAoX19pby5m bGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSA/IF9fc3ltYm9sLnNpemUoKSA6IDA7CiAgIGJv b2wgX190ZXN0aXBhZCA9IF9fZiA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19sZW4gPCBfX3dp ZHRoOwoKCiAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAgIHsKICAgICAg IHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAgICAg IHN3aXRjaCAoX193aGljaCkKICB7CiAgY2FzZSBtb25leV9iYXNlOjpzeW1ib2w6CiAgICBpZiAo X19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICBfX3JlcyArPSBfX3N5bWJv bDsKICAgIGJyZWFrOwogIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCgoKICAgIGlmIChfX3NpZ24u c2l6ZSgpKQogICAgICBfX3JlcyArPSBfX3NpZ25bMF07CiAgICBicmVhazsKICBjYXNlIG1vbmV5 X2Jhc2U6OnZhbHVlOgogICAgX19yZXMgKz0gX192YWx1ZTsKICAgIGJyZWFrOwogIGNhc2UgbW9u ZXlfYmFzZTo6c3BhY2U6CgoKCiAgICBpZiAoX190ZXN0aXBhZCkKICAgICAgX19yZXMgKz0gc3Ry aW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgZWxzZQogICAgICBfX3JlcyAr PSBfX2N0eXBlLndpZGVuKF9fZmlsbCk7CiAgICBicmVhazsKICBjYXNlIG1vbmV5X2Jhc2U6Om5v bmU6CiAgICBpZiAoX190ZXN0aXBhZCkKICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0 aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgYnJlYWs7CiAgfQogICAgIH0KCgogICBpZiAoX19zaWdu LnNpemUoKSA+IDEpCiAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX19zaWduLmJlZ2luKCkgKyAx LCBfX3NpZ24uZW5kKCkpOwoKCiAgIF9fbGVuID0gX19yZXMuc2l6ZSgpOwogICBpZiAoX193aWR0 aCA+IF9fbGVuKQogICAgIHsKICAgICAgIGlmIChfX2YgPT0gaW9zX2Jhc2U6OmxlZnQpCgogIF9f cmVzLmFwcGVuZChfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAgICBlbHNlCgogIF9fcmVz Lmluc2VydCgwLCBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCkpOwogICAgICAg X19sZW4gPSBfX3dpZHRoOwogICAgIH0KCgogICBfX3MgPSBfX3dyaXRlKF9fcywgX19yZXMuY19z dHIoKSwgX19sZW4pOwogfQogICAgICBfX2lvLndpZHRoKDApOwogICAgICByZXR1cm4gX19zOwog ICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog ICAgdGltZV9iYXNlOjpkYXRlb3JkZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmRv X2RhdGVfb3JkZXIoKSBjb25zdAogICAgeyByZXR1cm4gdGltZV9iYXNlOjpub19vcmRlcjsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAg ICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChp dGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgIGNvbnN0IF9DaGFyVCogX19m b3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg ICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVu Y3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9 IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBzaXplX3QgX19sZW4gPSBj aGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQpOwoKICAgICAgZm9yIChzaXplX3Qg X19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4gJiYgIV9fZXJyOyArK19faSkK IHsKICAgY2hhciBfX2MgPSBfX2Zvcm1hdFtfX2ldOwogICBpZiAoX19jID09ICclJykKICAgICB7 CgogICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgY2hhciBfX21vZCA9IDA7CiAg ICAgICBpbnQgX19tZW0gPSAwOwogICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykK ICB7CiAgICBfX21vZCA9IF9fYzsKICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICB9CiAgICAg ICBzd2l0Y2ggKF9fYykKICB7CiAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgX0NoYXJUIF9fd2Nz WzEwXTsKICBjYXNlICdhJzoKCiAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czFbN107CiAgICBf X3RwLl9NX2RheXNfYWJicmV2aWF0ZWQoX19kYXlzMSk7CiAgICBfTV9leHRyYWN0X25hbWUoX19i ZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMxLCA3LAogICAgICBfX2Vycik7CiAgICBi cmVhazsKICBjYXNlICdBJzoKCiAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czJbN107CiAgICBf X3RwLl9NX2RheXMoX19kYXlzMik7CiAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBf X3RtLT50bV93ZGF5LCBfX2RheXMyLCA3LAogICAgICBfX2Vycik7CiAgICBicmVhazsKICBjYXNl ICdoJzoKICBjYXNlICdiJzoKCiAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzMVsxMl07CiAg ICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChfX21vbnRoczEpOwogICAgX01fZXh0cmFjdF9u YW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczEsIDEyLAogICAgICBfX2Vy cik7CiAgICBicmVhazsKICBjYXNlICdCJzoKCiAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhz MlsxMl07CiAgICBfX3RwLl9NX21vbnRocyhfX21vbnRoczIpOwogICAgX01fZXh0cmFjdF9uYW1l KF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczIsIDEyLAogICAgICBfX2Vycik7 CiAgICBicmVhazsKICBjYXNlICdjJzoKCiAgICBjb25zdCBjaGFyX3R5cGUqIF9fZHRbMl07CiAg ICBfX3RwLl9NX2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgX01fZXh0cmFjdF92aWFfZm9y bWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgX19kdFswXSk7CiAgICBi cmVhazsKICBjYXNlICdkJzoKCiAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0t PnRtX21kYXksIDEsIDMxLCAyLAogICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgIGJyZWFrOwogIGNh c2UgJ0QnOgoKICAgIF9fY3MgPSAiJW0vJWQvJXkiOwogICAgX19jdHlwZS53aWRlbihfX2NzLCBf X2NzICsgOSwgX193Y3MpOwogICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwg X19pbywgX19lcnIsIF9fdG0sCiAgICAgX193Y3MpOwogICAgYnJlYWs7CiAgY2FzZSAnSCc6Cgog ICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9ob3VyLCAwLCAyMywgMiwK ICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICBicmVhazsKICBjYXNlICdJJzoKCiAgICBfTV9leHRy YWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgIF9fY3R5 cGUsIF9fZXJyKTsKICAgIGJyZWFrOwogIGNhc2UgJ20nOgoKICAgIF9NX2V4dHJhY3RfbnVtKF9f YmVnLCBfX2VuZCwgX19tZW0sIDEsIDEyLCAyLCBfX2N0eXBlLAogICAgIF9fZXJyKTsKICAgIGlm ICghX19lcnIpCiAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgIGJyZWFrOwogIGNh c2UgJ00nOgoKICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAw LCA1OSwgMiwKICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICBicmVhazsKICBjYXNlICduJzoKICAg IGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcbicpCiAgICAgICsrX19iZWc7CiAg ICBlbHNlCiAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgYnJlYWs7CiAgY2Fz ZSAnUic6CgogICAgX19jcyA9ICIlSDolTSI7CiAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3Mg KyA2LCBfX3djcyk7CiAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lv LCBfX2VyciwgX190bSwKICAgICBfX3djcyk7CiAgICBicmVhazsKICBjYXNlICdTJzoKCiAgICBf TV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3NlYywgMCwgNTksIDIsCiAgICAg X19jdHlwZSwgX19lcnIpOwogICAgYnJlYWs7CiAgY2FzZSAndCc6CiAgICBpZiAoX19jdHlwZS5u YXJyb3coKl9fYmVnLCAwKSA9PSAnXHQnKQogICAgICArK19fYmVnOwogICAgZWxzZQogIF9fZXJy IHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgYnJlYWs7CiAgY2FzZSAnVCc6CgogICAgX19jcyA9 ICIlSDolTTolUyI7CiAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA5LCBfX3djcyk7CiAg ICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwK ICAgICBfX3djcyk7CiAgICBicmVhazsKICBjYXNlICd4JzoKCiAgICBjb25zdCBjaGFyX3R5cGUq IF9fZGF0ZXNbMl07CiAgICBfX3RwLl9NX2RhdGVfZm9ybWF0cyhfX2RhdGVzKTsKICAgIF9NX2V4 dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgIF9f ZGF0ZXNbMF0pOwogICAgYnJlYWs7CiAgY2FzZSAnWCc6CgogICAgY29uc3QgY2hhcl90eXBlKiBf X3RpbWVzWzJdOwogICAgX190cC5fTV90aW1lX2Zvcm1hdHMoX190aW1lcyk7CiAgICBfTV9leHRy YWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICBfX3Rp bWVzWzBdKTsKICAgIGJyZWFrOwogIGNhc2UgJ3knOgoKICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVn LCBfX2VuZCwgX190bS0+dG1feWVhciwgMCwgOTksIDIsCiAgICAgX19jdHlwZSwgX19lcnIpOwog ICAgYnJlYWs7CiAgY2FzZSAnWSc6CgogICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBf X21lbSwgMCwKICAgICBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgNCwKICAgICBfX2N0eXBl LCBfX2Vycik7CiAgICBpZiAoIV9fZXJyKQogICAgICBfX3RtLT50bV95ZWFyID0gX19tZW0gLSAx OTAwOwogICAgYnJlYWs7CiAgY2FzZSAnWic6CgogICAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFz ZTo6dXBwZXIsICpfX2JlZykpCiAgICAgIHsKICAgICAgICBpbnQgX190bXA7CiAgICAgICAgX01f ZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXAsCiAgICAgICAgICBfX3RpbWVwdW5jdDxf Q2hhclQ+OjpfU190aW1lem9uZXMsCiAgICAgICAgICAxNCwgX19lcnIpOwoKCiAgICAgICAgY2hh cl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgICBpZiAoIV9fZXJyICYmIF9fdG1wID09IDAKICAg ICAmJiAoX19jID09IF9fY3R5cGUud2lkZW4oJy0nKQogICAgICAgICB8fCBfX2MgPT0gX19jdHlw ZS53aWRlbignKycpKSkKICAgewogICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190 bXAsIDAsIDIzLCAyLAogICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgIF9NX2V4dHJhY3RfbnVt KF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDU5LCAyLAogICAgICAgX19jdHlwZSwgX19lcnIpOwog ICB9CiAgICAgfQogICAgICAgIGVsc2UKICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAg ICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CgogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm YWlsYml0OwogICAgICB9CiAgfQogICAgICAgZWxzZQogIHsKCiAgICBpZiAoX19jID09IF9fY3R5 cGUubmFycm93KCpfX2JlZywgMCkpCiAgICAgICsrX19iZWc7CiAgICBlbHNlCiAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjpmYWlsYml0OwogIH0KIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBf SW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUm IF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3Qg X19sZW4sCiAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwKICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSAwOwogICAgICBz dHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBjaGFy X3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwg X19sZW4KICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKSkKIHsKICAg X19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19jLCAwKTsKICAgX19jID0gKigrK19fYmVnKTsK ICAgKytfX2k7CiB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiB7CiAgIGludCBfX3ZhbHVlID0g YXRvaShfX2RpZ2l0cy5jX3N0cigpKTsKICAgaWYgKF9fbWluIDw9IF9fdmFsdWUgJiYgX192YWx1 ZSA8PSBfX21heCkKICAgICBfX21lbWJlciA9IF9fdmFsdWU7CiAgIGVsc2UKICAgICBfX3Rlc3R2 YWxpZCA9IGZhbHNlOwogfQogICAgICBlbHNlCiBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICBp ZiAoIV9fdGVzdHZhbGlkKQogX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAg dGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBl JiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgY29uc3QgX0No YXJUKiogX19uYW1lcywgc2l6ZV90IF9faW5kZXhsZW4sCiAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VycikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9f dHJhaXRzX3R5cGU7CiAgICAgIGludCogX19tYXRjaGVzID0gc3RhdGljX2Nhc3Q8aW50Kj4oX19i dWlsdGluX2FsbG9jYShzaXplb2YoaW50KQogICAgICAgICAqIF9faW5kZXhsZW4pKTsKICAgICAg c2l6ZV90IF9fbm1hdGNoZXMgPSAwOwogICAgICBzaXplX3QgX19wb3MgPSAwOwogICAgICBib29s IF9fdGVzdHZhbGlkID0gdHJ1ZTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWU7CgogICAg ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwoKICAgICAgZm9yIChzaXplX3QgX19pMSA9IDA7IF9f aTEgPCBfX2luZGV4bGVuOyArK19faTEpCiBpZiAoX19jID09IF9fbmFtZXNbX19pMV1bMF0pCiAg IF9fbWF0Y2hlc1tfX25tYXRjaGVzKytdID0gX19pMTsKCiAgICAgIHdoaWxlIChfX25tYXRjaGVz ID4gMSkKIHsKCiAgIHNpemVfdCBfX21pbmxlbiA9IDEwOwogICBmb3IgKHNpemVfdCBfX2kyID0g MDsgX19pMiA8IF9fbm1hdGNoZXM7ICsrX19pMikKICAgICBfX21pbmxlbiA9IG1pbihfX21pbmxl biwKICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkp OwoKICAgaWYgKF9fcG9zIDwgX19taW5sZW4gJiYgX19iZWcgIT0gX19lbmQpCiAgICAgewogICAg ICAgKytfX3BvczsKICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICBmb3IgKHNpemVfdCBf X2kzID0gMDsgX19pMyA8IF9fbm1hdGNoZXM7ICsrX19pMykKICB7CiAgICBfX25hbWUgPSBfX25h bWVzW19fbWF0Y2hlc1tfX2kzXV07CiAgICBpZiAoX19uYW1lW19fcG9zXSAhPSBfX2MpCiAgICAg IF9fbWF0Y2hlc1tfX2kzXSA9IF9fbWF0Y2hlc1stLV9fbm1hdGNoZXNdOwogIH0KICAgICB9CiAg IGVsc2UKICAgICBicmVhazsKIH0KCiAgICAgIGlmIChfX25tYXRjaGVzID09IDEpCiB7CgogICBf X25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9f dHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICB3aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBf X2JlZyAhPSBfX2VuZCAmJiBfX25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICArK19fYmVnLCAr K19fcG9zOwoKICAgaWYgKF9fbGVuID09IF9fcG9zKQogICAgIF9fbWVtYmVyID0gX19tYXRjaGVz WzBdOwogICBlbHNlCiAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKIH0KICAgICAgZWxzZQogX190 ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKIF9fZXJyIHw9IGlvc19i YXNlOjpmYWlsYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg IGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewog ICAgICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwogICAg ICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0 JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5 cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9y bWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9f YmVnID09IF9fZW5kKQogX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9f YmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+ CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9k YXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hh clQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBsb2NhbGUg X19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBl ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4o X19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9f ZW5kKQogX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J dGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF93ZWVrZGF5KGl0 ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICB0eXBlZGVm IGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0g X19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVz ZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5 cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5cyk7CiAg ICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9f dG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoKCgoKCgogICAgICBpZiAoIV9fZXJyKQogewog ICBzaXplX3QgX19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19kYXlzW19fdG1wd2RheV0p OwogICBfX3RwLl9NX2RheXMoX19kYXlzKTsKICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWUgPSBf X2RheXNbX190bXB3ZGF5XTsKICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgIHsK CiAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1l KTsKICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAm JiBfX25hbWVbX19wb3NdID09ICpfX2JlZykKICArK19fYmVnLCArK19fcG9zOwogICAgICAgaWYg KF9fbGVuICE9IF9fcG9zKQogIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgIH0KICAg aWYgKCFfX2VycikKICAgICBfX3RtLT50bV93ZGF5ID0gX190bXB3ZGF5OwogfQogICAgICBpZiAo X19iZWcgPT0gX19lbmQpCiBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4g X19iZWc7CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0 ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl dF9tb250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsCiAgICAgICAgICAg ICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf X3RtKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFp dHNfdHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1l cHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ ID4oX19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzWzEyXTsKICAgICAgX190 cC5fTV9tb250aHNfYWJicmV2aWF0ZWQoX19tb250aHMpOwogICAgICBpbnQgX190bXBtb247CiAg ICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wbW9uLCBfX21vbnRocywgMTIs IF9fZXJyKTsKCgoKCgoKCiAgICAgIGlmICghX19lcnIpCiB7CiAgIHNpemVfdCBfX3BvcyA9IF9f dHJhaXRzX3R5cGU6Omxlbmd0aChfX21vbnRoc1tfX3RtcG1vbl0pOwogICBfX3RwLl9NX21vbnRo cyhfX21vbnRocyk7CiAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19tb250aHNbX190bXBt b25dOwogICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgewoKICAgICAgIGNvbnN0 IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgd2hp bGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAgICAgICYmIF9fbmFtZVtfX3Bv c10gPT0gKl9fYmVnKQogICsrX19iZWcsICsrX19wb3M7CiAgICAgICBpZiAoX19sZW4gIT0gX19w b3MpCiAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgfQogICBpZiAoIV9fZXJyKQog ICAgIF9fdG0tPnRtX21vbiA9IF9fdG1wbW9uOwogfQoKICAgICAgaWYgKF9fYmVnID09IF9fZW5k KQogX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVy CiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBf X2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2Zh Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVn OwogICAgICBzaXplX3QgX19pID0gMDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICB3aGls ZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRp Z2l0LCBfX2MpKQogewogICBfX2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIDApOwogICBf X2MgPSAqKCsrX19iZWcpOwogICArK19faTsKIH0KICAgICAgaWYgKF9faSA9PSAyIHx8IF9faSA9 PSA0KQogewogICBsb25nIF9fbDsKICAgX19jb252ZXJ0X3RvX3YoX19kaWdpdHMuY19zdHIoKSwg X19sLCBfX2VyciwgX1NfY19sb2NhbGUpOwogICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWls Yml0KSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICB7CiAgICAgICBfX2wgPSBfX2kgPT0gMiA/ IF9fbCA6IF9fbCAtIDE5MDA7CiAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nhc3Q8aW50 PihfX2wpOwogICAgIH0KIH0KICAgICAgZWxzZQogX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7 CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAg ICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVy Pjo6CiAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29u c3QgdG0qIF9fdG0sCiBjb25zdCBfQ2hhclQqIF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBj b25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlw ZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv Yyk7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKIHsKICAgY2hhciBfX2MgPSBfX2N0eXBl Lm5hcnJvdygqX19iZWcsIDApOwogICArK19fYmVnOwogICBpZiAoX19jID09ICclJykKICAgICB7 CiAgICAgICBjaGFyIF9fZm9ybWF0OwogICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICBzaXpl X3QgX19sZW4gPSAxOwogICAgICAgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAg ICAgICsrX19iZWc7CiAgICAgICBpZiAoX19jID09ICdFJyB8fCBfX2MgPT0gJ08nKQogIHsKICAg IF9fbW9kID0gX19jOwogICAgX19mb3JtYXQgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwog ICAgKytfX2JlZzsKICB9CiAgICAgICBlbHNlCiAgX19mb3JtYXQgPSBfX2M7CiAgICAgICBfX3Mg PSB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfQ2hhclQoKSwgX190bSwgX19mb3JtYXQsIF9fbW9k KTsKICAgICB9CiAgIGVsc2UKICAgICB7CiAgICAgICAqX19zID0gX19jOwogICAgICAgKytfX3M7 CiAgICAgfQogfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIHRpbWVfcHV0PF9DaGFy VCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywg Y2hhcl90eXBlLCBjb25zdCB0bSogX190bSwKICAgIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2Qp IGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0 eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f bG9jKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxf X3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25zdCBzaXplX3QgX19tYXhs ZW4gPSA2NDsKICAgICAgY2hhcl90eXBlKiBfX3JlcyA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+ KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGNoYXJfdHlwZSkgKiBfX21heGxlbikpOwoKCgoKCgog ICAgICBjaGFyX3R5cGUgX19mbXRbNF07CiAgICAgIF9fZm10WzBdID0gX19jdHlwZS53aWRlbign JScpOwogICAgICBpZiAoIV9fbW9kKQogewogICBfX2ZtdFsxXSA9IF9fZm9ybWF0OwogICBfX2Zt dFsyXSA9IGNoYXJfdHlwZSgpOwogfQogICAgICBlbHNlCiB7CiAgIF9fZm10WzFdID0gX19tb2Q7 CiAgIF9fZm10WzJdID0gX19mb3JtYXQ7CiAgIF9fZm10WzNdID0gY2hhcl90eXBlKCk7CiB9Cgog ICAgICBfX3RwLl9NX3B1dChfX3JlcywgX19tYXhsZW4sIF9fZm10LCBfX3RtKTsKCgogICAgICBy ZXR1cm4gX193cml0ZShfX3MsIF9fcmVzLCBjaGFyX3RyYWl0czxjaGFyX3R5cGU+OjpsZW5ndGgo X19yZXMpKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAg IGNvbGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQq KSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgc2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25z dCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2NvbXBh cmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICBjb25z dCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAgewoKCiAgICAg IGNvbnN0IHN0cmluZ190eXBlIF9fb25lKF9fbG8xLCBfX2hpMSk7CiAgICAgIGNvbnN0IHN0cmlu Z190eXBlIF9fdHdvKF9fbG8yLCBfX2hpMik7CgogICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IF9f b25lLmNfc3RyKCk7CiAgICAgIGNvbnN0IF9DaGFyVCogX19wZW5kID0gX19vbmUuY19zdHIoKSAr IF9fb25lLmxlbmd0aCgpOwogICAgICBjb25zdCBfQ2hhclQqIF9fcSA9IF9fdHdvLmNfc3RyKCk7 CiAgICAgIGNvbnN0IF9DaGFyVCogX19xZW5kID0gX190d28uY19zdHIoKSArIF9fdHdvLmxlbmd0 aCgpOwoKCgoKICAgICAgZm9yICg7OykKIHsKICAgaW50IF9fcmVzID0gX01fY29tcGFyZShfX3As IF9fcSk7CiAgIGlmIChfX3JlcykKICAgICByZXR1cm4gX19yZXM7CgogICBfX3AgKz0gY2hhcl90 cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fcCk7CiAgIF9fcSArPSBjaGFyX3RyYWl0czxfQ2hhclQ+ OjpsZW5ndGgoX19xKTsKICAgaWYgKF9fcCA9PSBfX3BlbmQgJiYgX19xID09IF9fcWVuZCkKICAg ICByZXR1cm4gMDsKICAgZWxzZSBpZiAoX19wID09IF9fcGVuZCkKICAgICByZXR1cm4gLTE7CiAg IGVsc2UgaWYgKF9fcSA9PSBfX3FlbmQpCiAgICAgcmV0dXJuIDE7CgogICBfX3ArKzsKICAgX19x Kys7CiB9CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgY29s bGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX3Ry YW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg IHsKCiAgICAgIHN0cmluZ190eXBlIF9fc3RyKF9fbG8sIF9faGkpOwoKICAgICAgY29uc3QgX0No YXJUKiBfX3AgPSBfX3N0ci5jX3N0cigpOwogICAgICBjb25zdCBfQ2hhclQqIF9fcGVuZCA9IF9f c3RyLmNfc3RyKCkgKyBfX3N0ci5sZW5ndGgoKTsKCiAgICAgIHNpemVfdCBfX2xlbiA9IChfX2hp IC0gX19sbykgKiAyOwoKICAgICAgc3RyaW5nX3R5cGUgX19yZXQ7CgoKCgogICAgICBmb3IgKDs7 KQogewoKICAgX0NoYXJUKiBfX2MgPQogICAgIHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRp bl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2xlbikpOwogICBzaXplX3QgX19yZXMgPSBfTV90 cmFuc2Zvcm0oX19jLCBfX3AsIF9fbGVuKTsKCgogICBpZiAoX19yZXMgPj0gX19sZW4pCiAgICAg ewogICAgICAgX19sZW4gPSBfX3JlcyArIDE7CiAgICAgICBfX2MgPSBzdGF0aWNfY2FzdDxfQ2hh clQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICogX19sZW4pKTsK ICAgICAgIF9fcmVzID0gX01fdHJhbnNmb3JtKF9fYywgX19wLCBfX3JlcyArIDEpOwogICAgIH0K CiAgIF9fcmV0LmFwcGVuZChfX2MsIF9fcmVzKTsKICAgX19wICs9IGNoYXJfdHJhaXRzPF9DaGFy VD46Omxlbmd0aChfX3ApOwogICBpZiAoX19wID09IF9fcGVuZCkKICAgICByZXR1cm4gX19yZXQ7 CgogICBfX3ArKzsKICAgX19yZXQucHVzaF9iYWNrKF9DaGFyVCgpKTsKIH0KICAgIH0KCiB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAg ZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg IHsKICAgICAgdW5zaWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19o aTsgKytfX2xvKQogX192YWwgPSAqX19sbyArICgoX192YWwgPDwgNykgfAogICAgICAgICAoX192 YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHMgLSA3KSkpOwogICAg ICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwogICAgfQojIDIxNDEgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgX19w YWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxs LAogICAgICAgX0NoYXJUKiBfX25ld3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAgY29u c3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwKICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4s IGNvbnN0IGJvb2wgX19udW0pCiAgICB7CiAgICAgIHNpemVfdCBfX3BsZW4gPSBzdGF0aWNfY2Fz dDxzaXplX3Q+KF9fbmV3bGVuIC0gX19vbGRsZW4pOwogICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0 YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAg ICAgICAgKiBfX3BsZW4pKTsKICAgICAgX1RyYWl0czo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBf X2ZpbGwpOwoKICAgICAgX0NoYXJUKiBfX2JlZzsKICAgICAgX0NoYXJUKiBfX2VuZDsKICAgICAg c2l6ZV90IF9fbW9kID0gMDsKICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFzZTo6 Zm10ZmxhZ3MgX19hZGp1c3QgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7 CgogICAgICBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmxlZnQpCiB7CgogICBfX2JlZyA9IGNv bnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgX19iZWdsZW4gPSBfX29sZGxlbjsKICAgX19l bmQgPSBfX3BhZHM7CiB9CiAgICAgIGVsc2UgaWYgKF9fYWRqdXN0ID09IGlvc19iYXNlOjppbnRl cm5hbCAmJiBfX251bSkKIHsKCgoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j KCk7CiAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0No YXJUPiA+KF9fbG9jKTsKICAgY29uc3QgX0NoYXJUIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCct Jyk7CiAgIGNvbnN0IF9DaGFyVCBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgIGJvb2wg X190ZXN0c2lnbiA9IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19taW51cykKICAgICAgICAgICB8 fCBfVHJhaXRzOjplcShfX29sZHNbMF0sIF9fcGx1cyk7CgogICBib29sIF9fdGVzdGhleCA9IF9U cmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJzAnKSwgX19vbGRzWzBdKQogICAgICAgICAgJiYgKF9U cmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJ3gnKSwgX19vbGRzWzFdKQogICAgICAgICAgfHwgX1Ry YWl0czo6ZXEoX19jdHlwZS53aWRlbignWCcpLCBfX29sZHNbMV0pKTsKICAgaWYgKF9fdGVzdGhl eCkKICAgICB7CiAgICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICBfX25ld3NbMV0g PSBfX29sZHNbMV07CiAgICAgICBfX21vZCArPSAyOwogICAgICAgX19uZXdzICs9IDI7CiAgICAg ICBfX2JlZyA9IF9fcGFkczsKICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgX19lbmQg PSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAgICB9CiAgIGVsc2UgaWYg KF9fdGVzdHNpZ24pCiAgICAgewogICAgICAgX1RyYWl0czo6ZXEoKF9fbmV3c1swXSA9IF9fb2xk c1swXSksIF9fcGx1cykgPyBfX3BsdXMgOiBfX21pbnVzOwogICAgICAgKytfX21vZDsKICAgICAg ICsrX19uZXdzOwogICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICBfX2JlZ2xlbiA9IF9fcGxl bjsKICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBfX21vZCk7CiAg ICAgfQogICBlbHNlCiAgICAgewoKICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgX19iZWds ZW4gPSBfX3BsZW47CiAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsK ICAgICB9CiB9CiAgICAgIGVsc2UKIHsKCiAgIF9fYmVnID0gX19wYWRzOwogICBfX2JlZ2xlbiA9 IF9fcGxlbjsKICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiB9CiAgICAg IF9UcmFpdHM6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwogICAgICBfVHJhaXRzOjpj b3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX2VuZCwKICAgICBfX25ld2xlbiAtIF9fYmVnbGVuIC0g X19tb2QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBib29sCiAgICBf X3ZlcmlmeV9ncm91cGluZyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZywK ICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZ190bXApCiAgICB7CiAgICAg IGludCBfX2kgPSAwOwogICAgICBpbnQgX19qID0gMDsKICAgICAgY29uc3QgaW50IF9fbGVuID0g X19ncm91cGluZy5zaXplKCk7CiAgICAgIGNvbnN0IGludCBfX24gPSBfX2dyb3VwaW5nX3RtcC5z aXplKCk7CiAgICAgIGJvb2wgX190ZXN0ID0gdHJ1ZTsKCgoKCiAgICAgIHdoaWxlIChfX3Rlc3Qg JiYgX19pIDwgX19uIC0gMSkKIGZvciAoX19qID0gMDsgX190ZXN0ICYmIF9faiA8IF9fbGVuICYm IF9faSA8IF9fbiAtIDE7ICsrX19qLCsrX19pKQogICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pd ID09IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwoKCiAgICAgIF9faiA9PSBfX2xlbiA/ IF9faiA9IDAgOiBfX2o7CiAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0gPj0gX19ncm91 cGluZ190bXBbX19uIC0gX19pIC0gMV07CiAgICAgIHJldHVybiBfX3Rlc3Q7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fYWRkX2dyb3VwaW5nKF9D aGFyVCogX19zLCBfQ2hhclQgX19zZXAsCiAgICAgY29uc3QgY2hhciogX19nYmVnLCBjb25zdCBj aGFyKiBfX2dlbmQsCiAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25zdCBfQ2hhclQqIF9f bGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAqX19nYmVnKQogICAgICAg IHsKICAgICAgICAgIF9fcyA9IF9fYWRkX2dyb3VwaW5nKF9fcywgX19zZXAsCiAgICAgICAgICAo X19nYmVnICsgMSA9PSBfX2dlbmQgPyBfX2diZWcgOiBfX2diZWcgKyAxKSwKICAgICAgICAgIF9f Z2VuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ2JlZyk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19s YXN0IC0gKl9fZ2JlZzsKICAgICAgICAgICpfX3MrKyA9IF9fc2VwOwogICAgICAgIH0KICAgICAg ZG8KICpfX3MrKyA9ICpfX2ZpcnN0Kys7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCk7 CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICB2b2lkCiAgICBfX2xvY2FsZV9jYWNoZTxfQ2hhclQ+OjpfTV9pbml0KGNvbnN0IGxvY2FsZSYg X19sb2MpCiAgICB7CiAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KGhhc19mYWNldDxudW1wdW5j dDxfQ2hhclQ+ID4oX19sb2MpLCB0cnVlKSkKIHsKICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYg X19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICBfTV9mYWxzZW5h bWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICBfTV90cnVlbmFtZSA9IF9fbnAudHJ1ZW5hbWUoKTsK ICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwogICBfTV9kZWNpbWFs X3BvaW50ID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CiAgIF9NX2dyb3VwaW5nID0gX19ucC5ncm91 cGluZygpOwogICBfTV91c2VfZ3JvdXBpbmcgPSBfTV9ncm91cGluZy5zaXplKCkgIT0gMAogICAg ICAgICAgICYmIF9NX2dyb3VwaW5nLmRhdGEoKVswXSAhPSAwOwogfQogICAgICBpZiAoX19idWls dGluX2V4cGVjdChoYXNfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKSwgdHJ1ZSkpCiB7CiAg IGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3QgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f bG9jKTsKICAgX19jdC53aWRlbihfX251bV9iYXNlOjpfU19hdG9tc19vdXQsCiAgICAgICBfX251 bV9iYXNlOjpfU19hdG9tc19vdXQgKyBfX251bV9iYXNlOjpfU19lbmQsCiAgICAgICBfTV9saXRl cmFscyk7CiB9CiAgICB9CgoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxj aGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1 ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIGZhbHNl PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgdHJ1ZT47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxh dGUgY2xhc3MgbW9uZXlfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5j dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3RfYnluYW1lPGNoYXI+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBudW1fcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDxj aGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh c3MgdGltZV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFt ZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8Y2hhcj47CiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUg Y2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0 X2J5bmFtZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBj b2xsYXRlPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTxjaGFy PjsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3Rh dGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTxjaGFyPiYK ICAgIHVzZV9mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0 ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8 Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1f cHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0 PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBj b25zdCBtb25leXB1bmN0PGNoYXIsIHRydWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hh ciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBt b25leXB1bmN0PGNoYXIsIGZhbHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIGZh bHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5 X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUm KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8Y2hhcj4mCiAgICB1c2Vf ZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgY29uc3QgX190aW1lcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8 Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1l X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PGNoYXI+JgogICAgdXNlX2Zh Y2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8 Y3R5cGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s CiAgICBoYXNfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvbGxhdGU8 Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo YXNfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fZ2V0PGNoYXI+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh Y2V0PG1vbmV5cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X2dldDxjaGFy PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m YWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX2dldDxjaGFy PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m YWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwojIDI1NDcgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCn0KIyA0OCAi L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2xvY2FsZSIgMiAzCiMgMzggIi9nY2Mv ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2lzdHJlYW0udGNjIiAyIDMKIyAxICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvb3N0cmVhbSIgMSAzCiMgNDQgIi9nY2Mv ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9vc3RyZWFtIiAzCgoKCm5hbWVzcGFjZSBzdGQK ewojIDU3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvb3N0cmVhbSIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2lj X29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz X3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBf X3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+ IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU LCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFy VCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8 X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyLCB0 eXBlbmFtZSBfVHJhaXRzMj4KICAgICAgICBmcmllbmQgYmFzaWNfb3N0cmVhbTxfQ2hhclQyLCBf VHJhaXRzMj4mCiAgICAgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVDIsIF9UcmFp dHMyPiYsIF9DaGFyVDIpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RyYWl0czI+CiAgICAg ICAgZnJpZW5kIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0czI+JgogICAgICAgIG9wZXJhdG9y PDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzMj4mLCBjaGFyKTsKCiAgICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVDIsIHR5cGVuYW1lIF9UcmFpdHMyPgogICAgICAgIGZyaWVuZCBiYXNp Y19vc3RyZWFtPF9DaGFyVDIsIF9UcmFpdHMyPiYKICAgICAgICBvcGVyYXRvcjw8KGJhc2ljX29z dHJlYW08X0NoYXJUMiwgX1RyYWl0czI+JiwgY29uc3QgX0NoYXJUMiopOwoKICAgICAgdGVtcGxh dGU8dHlwZW5hbWUgX1RyYWl0czI+CiAgICAgICAgZnJpZW5kIGJhc2ljX29zdHJlYW08Y2hhciwg X1RyYWl0czI+JgogICAgICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz Mj4mLCBjb25zdCBjaGFyKik7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyLCB0eXBl bmFtZSBfVHJhaXRzMj4KICAgICAgICBmcmllbmQgYmFzaWNfb3N0cmVhbTxfQ2hhclQyLCBfVHJh aXRzMj4mCiAgICAgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVDIsIF9UcmFpdHMy PiYsIGNvbnN0IGNoYXIqKTsKIyAxMDQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk ZS9vc3RyZWFtIiAzCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX29zdHJlYW0oX19zdHJlYW1i dWZfdHlwZSogX19zYikKICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgoKCgoKCiAgICAgIHZp cnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAg ICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CiMgMTMwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWli bS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYz L2luY2x1ZGUvb3N0cmVhbSIgMwogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8 PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJlYW1fdHlwZSYpKTsKCiAgICAgIF9fb3N0 cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlw ZSYpKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAo Kl9fcGYpIChpb3NfYmFzZSYpKTsKIyAxNjcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j bHVkZS9vc3RyZWFtIiAzCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxv bmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVk IGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wg X19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikK ICAgICAgewogaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19i YXNlOjpiYXNlZmllbGQ7CiBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9z X2Jhc2U6OmhleCkKICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgbG9uZz4KICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7CiBlbHNl CiAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAg ICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9y dCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8 KGludCBfX24pCiAgICAgIHsKIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdz KCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBf X2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19j YXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikp KTsKIGVsc2UKICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19u KSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2ln bmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8 dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl cmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy YXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog ICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg IG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0 YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv cGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwojIDI0OCAiL2djYy9kamUvYnVpbGQvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMr Ky12My9pbmNsdWRlL29zdHJlYW0iIDMKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh dG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CiMgMjgxICIvZ2NjL2RqZS9idWlsZC9wb3dl cnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3Rk YysrLXYzL2luY2x1ZGUvb3N0cmVhbSIgMwogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgcHV0 KGNoYXJfdHlwZSBfX2MpOwoKCiAgICAgIHZvaWQKICAgICAgX01fd3JpdGUoY29uc3QgY2hhcl90 eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7CiBzdHJlYW1zaXplIF9fcHV0ID0gdGhp cy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogaWYgKF9fcHV0ICE9IF9fbikKICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIH0KIyAzMDkgIi9nY2MvZGplL2J1aWxk L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9s aWJzdGRjKystdjMvaW5jbHVkZS9vc3RyZWFtIiAzCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg ICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwojIDMyMiAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL29zdHJlYW0iIDMKICAgICAgX19vc3RyZWFt X3R5cGUmCiAgICAgIGZsdXNoKCk7CiMgMzMzICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvb3N0cmVhbSIgMwogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgpOwojIDM0NCAiL2dj Yy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL29zdHJlYW0iIDMKICAgICAgX19vc3RyZWFt X3R5cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKIyAzNTYgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9vc3RyZWFtIiAzCiAgICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vl a3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4 cGxpY2l0CiAgICAgIGJhc2ljX29zdHJlYW0oKSB7IH0KICAgIH07CiMgMzc0ICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvb3N0cmVhbSIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OnNlbnRyeQogICAgewoKICAgICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29zOwoKICAgIHB1YmxpYzoKIyAzOTMgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9vc3RyZWFtIiAzCiAgICAgIGV4cGxpY2l0CiAgICAg IHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CiMgNDAzICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvb3N0cmVhbSIgMwogICAgICB+c2VudHJ5KCkK ICAgICAgewoKIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1 Z2h0X2V4Y2VwdGlvbigpKQogICB7CgogICAgIGlmIChfTV9vcy5yZGJ1ZigpICYmIF9NX29zLnJk YnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgIF9NX29zLnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICB9CiAgICAgIH0KIyA0MjEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5j bHVkZS9vc3RyZWFtIiAzCiAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdAogICAgICB7IHJldHVy biBfTV9vazsgfQogICAgfTsKIyA0NDIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk ZS9vc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBfX291dC53aWRl bihfX2MpKTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp dHM+JiBfX291dCwgY2hhciBfX2MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08 Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBzaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19v dXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0 cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2lj X29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCB1bnNpZ25lZCBjaGFyIF9fYykKICAgIHsg cmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQojIDQ4MiAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL29zdHJlYW0iIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v dXQsIGNvbnN0IF9DaGFyVCogX19zKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICYKICAgIG9w ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hh ciogX19zKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNo YXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry ZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsg cmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoK ICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz PiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBj b25zdCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnBy ZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KIyA1MTYgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9vc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5k bChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVz aChfX29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAg ICB7IHJldHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAg ICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0KCgoKCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL29zdHJlYW0udGNjIiAxIDMKIyAzNiAiL2djYy9kamUvYnVp bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvb3N0cmVhbS50Y2MiIDMKCgoKbmFtZXNwYWNlIHN0 ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29z dHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKQogICAgOiBfTV9vcyhfX29zKQogICAgewoKICAg ICAgaWYgKF9fb3MudGllKCkgJiYgX19vcy5nb29kKCkpCiBfX29zLnRpZSgpLT5mbHVzaCgpOwoK ICAgICAgaWYgKF9fb3MuZ29vZCgpKQogX01fb2sgPSB0cnVlOwogICAgICBlbHNlCiB7CiAgIF9N X29rID0gZmFsc2U7CiAgIF9fb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogfQogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJlYW1f dHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy YikKIHsKICAgdHJ5CiAgICAgeyBfX3BmKCp0aGlzKTsgfQogICBjYXRjaCguLi4pCiAgICAgewoK CiAgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAg ICB9CiB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19p b3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7IF9fcGYoKnRoaXMpOyB9 CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk Yml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgdHJ5CiAg ICAgeyBfX3BmKCp0aGlzKTsgfQogICBjYXRjaCguLi4pCiAgICAgewoKCiAgICAgICB0aGlzLT5f TV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9CiB9CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Jp bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIgJiYg X19zYmluKQogewogICB0cnkKICAgICB7CiAgICAgICBpZiAoIV9fY29weV9zdHJlYW1idWZzKCp0 aGlzLCBfX3NiaW4sIHRoaXMtPnJkYnVmKCkpKQogIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpm YWlsYml0KTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3Nl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgZWxzZSBp ZiAoIV9fc2JpbikKIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikKICAgIHsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAg ICAgIGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtcHV0KSkKICBpZiAodGhpcy0+X01f Zm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywKICAgICAgIHRoaXMtPmZpbGwoKSwgX19uKS5mYWls ZWQoKSkKICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgIH0KICAgY2F0 Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9 IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3Bl cmF0b3I8PChsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg IGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlz LT5maWxsKCk7CiAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygp ICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgIGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5f TV9mbnVtcHV0KSkKICB7CiAgICBib29sIF9fYiA9IGZhbHNlOwogICAgaWYgKChfX2ZtdCAmIGlv c19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQogICAgICB7CiAgICAgICAg dW5zaWduZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pOwogICAg ICAgIF9fYiA9IHRoaXMtPl9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsCiAgICAgICAgX19j LCBfX2wpLmZhaWxlZCgpOwogICAgICB9CiAgICBlbHNlCiAgICAgIF9fYiA9IHRoaXMtPl9NX2Zu dW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsCiAgICAgIF9fYywgX19uKS5mYWlsZWQoKTsKICAgIGlm IChfX2IpCiAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogIH0KICAgICB9 CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk Yml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBpZiAo X01fY2hlY2tfZmFjZXQodGhpcy0+X01fZm51bXB1dCkpCiAgaWYgKHRoaXMtPl9NX2ZudW1wdXQt PnB1dCgqdGhpcywgKnRoaXMsCiAgICAgICB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICB9CiAgIGNhdGNoKC4uLikK ICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRo cm93OwogICAgIH0KIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8 KGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBp ZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ ZmlsbCgpOwogICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAm IGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQodGhpcy0+X01f Zm51bXB1dCkpCiAgewogICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgIGlmICgoX19mbXQgJiBpb3Nf YmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAgICAgewogICAgICAgIHVu c2lnbmVkIGxvbmcgbG9uZyBfX2w7CiAgICAgICAgX19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg bG9uZyBsb25nPihfX24pOwogICAgICAgIF9fYiA9IHRoaXMtPl9NX2ZudW1wdXQtPnB1dCgqdGhp cywgKnRoaXMsCiAgICAgICAgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICB9CiAgICBlbHNlCiAg ICAgIF9fYiA9IHRoaXMtPl9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsCiAgICAgIF9fYywg X19uKS5mYWlsZWQoKTsKICAgIGlmIChfX2IpCiAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogIH0KICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMt Pl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9f bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiB7 CiAgIHRyeQogICAgIHsKICAgICAgIGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtcHV0 KSkKICBpZiAodGhpcy0+X01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywKICAgICAgIHRoaXMt PmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgIH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAgICAg IGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtcHV0KSkKICBpZiAodGhpcy0+X01fZm51 bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywKICAgICAgIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQo KSkKICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgIH0KICAgY2F0Y2go Li4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0 b3I8PChsb25nIGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwog ICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBpZiAoX01fY2hlY2tfZmFj ZXQodGhpcy0+X01fZm51bXB1dCkpCiAgaWYgKHRoaXMtPl9NX2ZudW1wdXQtPnB1dCgqdGhpcywg KnRoaXMsCiAgICAgICB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAg ICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0K IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCog X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikK IHsKICAgdHJ5CiAgICAgewogICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KHRoaXMtPl9NX2ZudW1w dXQpKQogIGlmICh0aGlzLT5fTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLAogICAgICAgdGhp cy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgfQogICBjYXRjaCguLi4pCiAgICAgewoKCiAgICAgICB0aGlzLT5fTV9zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9CiB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjpwdXQoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIGludF90eXBlIF9fcHV0ID0gcmRi dWYoKS0+c3B1dGMoX19jKTsKICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3B1dCwg dHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0 KTsKIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNvbnN0IF9DaGFyVCog X19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAg ICAgIGlmIChfX2NlcmIpCiBfTV93cml0ZShfX3MsIF9fbik7CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjpmbHVzaCgpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAg ICBpZiAoX19jZXJiKQogewogICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1ZigpLT5w dWJzeW5jKCkgPT0gLTEpCiAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiB9 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgp CiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBpZiAoIXRo aXMtPmZhaWwoKSkKIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFz ZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpz ZWVrcChwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiB7CgoK ICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3Nf YmFzZTo6b3V0KTsKCgogICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogfQogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtk aXIgX19kKQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKIHsKCgogICBwb3NfdHlwZSBf X2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZCwKICAgICAgICAgICBp b3NfYmFzZTo6b3V0KTsKCgogICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkK ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpCiAgICB7CiAg ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBl OwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAg ICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAgICAgIHN0cmVhbXNpemUgX193ID0g X19vdXQud2lkdGgoKTsKICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJU Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX3cgKyAxKSkpOwogICAgICAg X19wYWRzWzBdID0gX19jOwogICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICBpZiAo X193ID4gX19sZW4pCiAgewogICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0 LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsK ICAgIF9fbGVuID0gX193OwogIH0KICAgICAgIF9fb3V0Ll9NX3dyaXRlKF9fcGFkcywgX19sZW4p OwogICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgfQogICBjYXRjaCguLi4pCiAgICAgewoKCiAg ICAgICBfX291dC5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgoX19v dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9 CiB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgewogICAgICB0eXBl ZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5 cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9f Y2VyYikKIHsKICAgdHJ5CiAgICAgewogICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0 aCgpOwogICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9h bGxvY2EoX193ICsgMSkpOwogICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAgc3RyZWFtc2l6 ZSBfX2xlbiA9IDE7CiAgICAgICBpZiAoX193ID4gX19sZW4pCiAgewogICAgX19wYWQ8Y2hhciwg X1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAg ICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgIF9fbGVuID0gX193OwogIH0KICAgICAgIF9f b3V0Ll9NX3dyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAg fQogICBjYXRjaCguLi4pCiAgICAgewoKCiAgICAgICBfX291dC5fTV9zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9CiB9CiAgICAgIHJldHVybiBfX291dDsKICAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5 cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAg ICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlm IChfX2NlcmIgJiYgX19zKQogewogICB0cnkKICAgICB7CiAgICAgICBzdHJlYW1zaXplIF9fdyA9 IF9fb3V0LndpZHRoKCk7CiAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFy VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgIHN0cmVh bXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19z KSk7CiAgICAgICBpZiAoX193ID4gX19sZW4pCiAgewogICAgX19wYWQ8X0NoYXJULCBfVHJhaXRz Pjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgIF9fcywgX193LCBf X2xlbiwgZmFsc2UpOwogICAgX19zID0gX19wYWRzOwogICAgX19sZW4gPSBfX3c7CiAgfQogICAg ICAgX19vdXQuX01fd3JpdGUoX19zLCBfX2xlbik7CiAgICAgICBfX291dC53aWR0aCgwKTsKICAg ICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIF9fb3V0Ll9NX3NldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgZWxzZSBpZiAoIV9fcykKIF9f b3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBl ZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCgoKICAg ICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX3RyYWl0c190eXBlOwoKICAgICAgdHlwZW5h bWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJi ICYmIF9fcykKIHsKICAgc2l6ZV90IF9fY2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp OwogICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2Nh KHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7CiAgIGZvciAoc2l6ZV90IF9faSA9IDA7 IF9faSA8IF9fY2xlbjsgKytfX2kpCiAgICAgX193c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19f aV0pOwogICBfQ2hhclQqIF9fc3RyID0gX193czsKCiAgIHRyeQogICAgIHsKICAgICAgIHN0cmVh bXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwogICAgICAgc3Ry ZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0 aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7 CgogICAgICAgaWYgKF9fdyA+IF9fbGVuKQogIHsKICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46 Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICBfX3dzLCBfX3csIF9f bGVuLCBmYWxzZSk7CiAgICBfX3N0ciA9IF9fcGFkczsKICAgIF9fbGVuID0gX193OwogIH0KICAg ICAgIF9fb3V0Ll9NX3dyaXRlKF9fc3RyLCBfX2xlbik7CiAgICAgICBfX291dC53aWR0aCgwKTsK ICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIF9fb3V0Ll9NX3NldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgZWxzZSBpZiAoIV9fcykK IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAg ICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBf VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v dXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNo YXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogewogICB0 cnkKICAgICB7CiAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICBj aGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cpKTsK ICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRz OjpsZW5ndGgoX19zKSk7CgogICAgICAgaWYgKF9fdyA+IF9fbGVuKQogIHsKICAgIF9fcGFkPGNo YXIsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAg X19zLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICBfX3MgPSBfX3BhZHM7CiAgICBfX2xlbiA9IF9f dzsKICB9CiAgICAgICBfX291dC5fTV93cml0ZShfX3MsIF9fbGVuKTsKICAgICAgIF9fb3V0Lndp ZHRoKDApOwogICAgIH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgX19vdXQuX01fc2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAm IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICBlbHNlIGlm ICghX19zKQogX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBf X291dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LAogICAg ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQog ICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJl YW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19v dXQpOwogICAgICBpZiAoX19jZXJiKQogewogICBjb25zdCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRh dGEoKTsKICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICBfQ2hhclQqIF9fcGFk cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkg KiBfX3cpKTsKICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9f c3RyLnNpemUoKSk7CgoKCiAgIGlmIChfX3cgPiBfX2xlbikKICAgICB7CiAgICAgICBfX3BhZDxf Q2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLCBfX3Ms CiAgICAgICAgICBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAg ICBfX2xlbiA9IF9fdzsKICAgICB9CiAgIF9fb3V0Ll9NX3dyaXRlKF9fcywgX19sZW4pOwogICBf X291dC53aWR0aCgwKTsKIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCgoKCiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIG9z dHJlYW0mIGVuZGwob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRzKG9z dHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYpOwogIGV4 dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjaGFyKTsKICBleHRl cm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgdW5zaWduZWQgY2hhcik7 CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHNpZ25lZCBj aGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29u c3QgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0m LCBjb25zdCB1bnNpZ25lZCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJh dG9yPDwob3N0cmVhbSYsIGNvbnN0IHNpZ25lZCBjaGFyKik7CiMgNzI3ICIvZ2NjL2RqZS9idWls ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9vc3RyZWFtLnRjYyIgMwp9CiMgNTQ5ICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvb3N0cmVhbSIgMiAzCiMgMzkgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2lzdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBz dGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXB3cykKICAgIHsKICAg ICAgaWYgKF9faW4uZ29vZCgpKQogewogICBpZiAoX19pbi50aWUoKSkKICAgICBfX2luLnRpZSgp LT5mbHVzaCgpOwogICBpZiAoIV9fbm9za2lwd3MgJiYgKF9faW4uZmxhZ3MoKSAmIGlvc19iYXNl Ojpza2lwd3MpKQogICAgIHsKICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNf dHlwZTo6ZW9mKCk7CiAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1Zigp OwogICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgIGlmIChfX2lu Ll9NX2NoZWNrX2ZhY2V0KF9faW4uX01fZmN0eXBlKSkKICB3aGlsZSAoIXRyYWl0c190eXBlOjpl cV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAmJiBfX2luLl9NX2ZjdHlwZS0+aXMoY3R5 cGVfYmFzZTo6c3BhY2UsCiAgICAgICAgICB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykp KQogICAgX19jID0gX19zYi0+c25leHRjKCk7CgoKCiAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVx X2ludF90eXBlKF9fYywgX19lb2YpKQogIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7 CgogICAgIH0KIH0KCiAgICAgIGlmIChfX2luLmdvb2QoKSkKIF9NX29rID0gdHJ1ZTsKICAgICAg ZWxzZQogewogICBfTV9vayA9IGZhbHNlOwogICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWls Yml0KTsKIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19w ZikoX19pc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShf X2lvc190eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikp CiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 CiAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0 KTsKICAgICAgIGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtZ2V0KSkKICB0aGlzLT5f TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgIHRoaXMt PnNldHN0YXRlKF9fZXJyKTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRo aXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKQog ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp CiB7CiAgIHRyeQogICAgIHsKICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgbG9uZyBfX2w7CiAgICAgICBp ZiAoX01fY2hlY2tfZmFjZXQodGhpcy0+X01fZm51bWdldCkpCiAgdGhpcy0+X01fZm51bWdldC0+ Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CgoKICAgICAgIGlmICghKF9fZXJyICYg aW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAmJiAobnVtZXJpY19saW1pdHM8c2hvcnQ+OjptaW4oKSA8 PSBfX2wKICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKSkpCiAg X19uID0gX19sOwogICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6 OmZhaWxiaXQ7CgogICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgIH0KICAgY2F0Y2go Li4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBv cGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgdHJ5CiAgICAgewogICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v ZGJpdCk7CiAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQodGhpcy0+X01fZm51bWdldCkpCiAgdGhp cy0+X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICB0 aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgfQogICBjYXRjaCguLi4pCiAgICAgewoKCiAgICAg ICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9CiB9 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW50JiBfX24p CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2Vy YikKIHsKICAgdHJ5CiAgICAgewogICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICBsb25nIF9fbDsKICAgICAg IGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtZ2V0KSkKICB0aGlzLT5fTV9mbnVtZ2V0 LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgaWYgKCEoX19lcnIg JiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICYmIChudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSA8 PSBfX2wKICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQogIF9f biA9IF9fbDsKICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm YWlsYml0OwoKICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICB9CiAgIGNhdGNoKC4u LikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog IHRocm93OwogICAgIH0KIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl cmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0 KTsKICAgICAgIGlmIChfTV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtZ2V0KSkKICB0aGlzLT5f TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgIHRoaXMt PnNldHN0YXRlKF9fZXJyKTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRo aXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nJiBfX24pCiAg ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK IHsKICAgdHJ5CiAgICAgewogICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo dGhpcy0+X01fZm51bWdldCkpCiAgdGhpcy0+X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp cywgX19lcnIsIF9fbik7CiAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgfQogICBj YXRjaCguLi4pCiAgICAgewoKCiAgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICB0aHJvdzsKICAgICB9CiB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAg ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6 Omdvb2RiaXQpOwogICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KHRoaXMtPl9NX2ZudW1nZXQpKQog IHRoaXMtPl9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAg ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgIH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgog ICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAg fQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25n IGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg ICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBf X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgIGlmIChf TV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtZ2V0KSkKICB0aGlzLT5fTV9mbnVtZ2V0LT5nZXQo KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJy KTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19u KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl cmIpCiB7CiAgIHRyeQogICAgIHsKICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgaWYgKF9NX2NoZWNrX2Zh Y2V0KHRoaXMtPl9NX2ZudW1nZXQpKQogIHRoaXMtPl9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg KnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgIH0K ICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgb3BlcmF0b3I+PihmbG9hdCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi KCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAgICAg IGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdv b2RiaXQpOwogICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KHRoaXMtPl9NX2ZudW1nZXQpKQogIHRo aXMtPl9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAg dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgIH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAg ICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKHRoaXMt PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQog fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGRvdWJsZSYg X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChf X2NlcmIpCiB7CiAgIHRyeQogICAgIHsKICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0g aW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgaWYgKF9NX2NoZWNr X2ZhY2V0KHRoaXMtPl9NX2ZudW1nZXQpKQogIHRoaXMtPl9NX2ZudW1nZXQtPmdldCgqdGhpcywg MCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAg IH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgdHJ5CiAgICAg ewogICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3Nf YmFzZTo6Z29vZGJpdCk7CiAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQodGhpcy0+X01fZm51bWdl dCkpCiAgdGhpcy0+X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7 CiAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgfQogICBjYXRjaCguLi4pCiAgICAg ewoKCiAgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsK ICAgICB9CiB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4o dm9pZComIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg ICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBf X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgIGlmIChf TV9jaGVja19mYWNldCh0aGlzLT5fTV9mbnVtZ2V0KSkKICB0aGlzLT5fTV9mbnVtZ2V0LT5nZXQo KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJy KTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KQog ICAgewogICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICAgaWYgKF9fY2Vy YikKICB7CiAgICB0cnkKICAgICAgewogICAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAg ICAgICAgaWYgKF9fc2JvdXQpCiAgIHsKICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0 aGlzLT5yZGJ1ZigpOwogICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19z YmluLCBfX3Nib3V0KTsKICAgfQogICAgICAgIGlmICghX19zYm91dCB8fCAhX194dHJjdCkKICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CiAgICBjYXRjaCguLi4p CiAgICAgIHsKCgogICAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK ICAgdGhyb3c7CiAgICAgIH0KICB9CiAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICBnZXQodm9pZCkKICAgIHsKICAgICAgY29uc3QgaW50X3R5cGUg X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGludF90eXBlIF9fYyA9IF9fZW9mOwog ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg ICAgaWYgKF9fY2VyYikKIHsKICAgdHJ5CiAgICAgewogICAgICAgX19jID0gdGhpcy0+cmRidWYo KS0+c2J1bXBjKCk7CgogICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBf X2VvZikpCiAgX01fZ2NvdW50ID0gMTsKICAgICAgIGVsc2UKICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgIH0KICAgY2F0Y2goLi4uKQog ICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhy b3c7CiAgICAgfQogfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJf dHlwZSYgX19jKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJi KCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgIHRyeQogICAgIHsKICAgICAg IGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgaW50X3R5 cGUgX19idWZ2YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICBpZiAoIXRyYWl0 c190eXBlOjplcV9pbnRfdHlwZShfX2J1ZnZhbCwgX19lb2YpKQogIHsKICAgIF9NX2djb3VudCA9 IDE7CiAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYnVmdmFsKTsKICB9CiAg ICAgICBlbHNlCiAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpm YWlsYml0KTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3Nl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f biwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAg ICB7CiAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRf dHlwZShfX2RlbGltKTsKICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6 OmVvZigpOwogICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAg ICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgIHdoaWxlIChfTV9nY291 bnQgKyAxIDwgX19uCiAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19l b2YpCiAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQog IHsKICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgIF9fYyA9 IF9fc2ItPnNuZXh0YygpOwogICAgKytfTV9nY291bnQ7CiAgfQogICAgICAgaWYgKHRyYWl0c190 eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 ZW9mYml0KTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3Nl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93OwogICAgIH0KIH0KICAgICAgKl9fcyA9 IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KF9f c3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9n Y291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f Y2VyYikKIHsKICAgdHJ5CiAgICAgewogICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0 cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICBjb25zdCBpbnRfdHlwZSBf X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fdGhp c19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3RoaXNfc2ItPnNn ZXRjKCk7CiAgICAgICBjaGFyX3R5cGUgX19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUo X19jKTsKCiAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9m KQogICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKQogICAg ICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLnNwdXRjKF9fYzIpLCBfX2VvZikp CiAgewogICAgKytfTV9nY291bnQ7CiAgICBfX2MgPSBfX3RoaXNfc2ItPnNuZXh0YygpOwogICAg X19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICB9CiAgICAgICBpZiAodHJh aXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjplb2ZiaXQpOwogICAgIH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+ X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICBp ZiAoIV9NX2djb3VudCkKIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3Ry ZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAw OwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKIHsK ICAgICAgICAgIHRyeQogICAgIHsKICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJh aXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgY29uc3QgaW50X3R5cGUgX19l b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g dGhpcy0+cmRidWYoKTsKICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAg ICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24KICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFf aW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo X19jLCBfX2lkZWxpbSkpCiAgewogICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlw ZShfX2MpOwogICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICArK19NX2djb3VudDsKICB9CiAg ICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgZWxzZQogIHsKICAgIGlmICh0cmFpdHNf dHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgIHsKICAgICAgICBfX3NiLT5z YnVtcGMoKTsKICAgICAgICArK19NX2djb3VudDsKICAgICAgfQogICAgZWxzZQogICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgfQogICAgIH0KICAgY2F0Y2goLi4uKQog ICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhy b3c7CiAgICAgfQogfQogICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2Nv dW50KQogdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24sIGludF90eXBlIF9fZGVs aW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs IHRydWUpOwogICAgICBpZiAoX19jZXJiICYmIF9fbiA+IDApCiB7CiAgIHRyeQogICAgIHsKICAg ICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgX19z dHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICBpbnRfdHlwZSBfX2M7 CgogICAgICAgX19uID0gc3RkOjptaW4oX19uLCBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6 bWF4KCkpOwogICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbgogICAgICAgJiYgIXRyYWl0c190 eXBlOjplcV9pbnRfdHlwZShfX2MgPSBfX3NiLT5zYnVtcGMoKSwgX19lb2YpKQogIHsKICAgICsr X01fZ2NvdW50OwogICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZGVsaW0p KQogICAgICBicmVhazsKICB9CiAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f YywgX19lb2YpKQogIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgIH0KICAg Y2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwZWVrKHZvaWQpCiAgICB7CiAgICAgIGludF90eXBlIF9f YyA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsg X19jID0gdGhpcy0+cmRidWYoKS0+c2dldGMoKTsgfQogICBjYXRjaCguLi4pCiAgICAgewoKCiAg ICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9 CiB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsK ICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19uKTsKICAgICAg IGlmIChfTV9nY291bnQgIT0gX19uKQogIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQg fCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgfQogICBjYXRjaCguLi4pCiAgICAgewoKCiAgICAg ICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9CiB9 CiAgICAgIGVsc2UKIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0 dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OgogICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAg ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg aWYgKF9fY2VyYikKIHsKICAgdHJ5CiAgICAgewoKICAgICAgIHN0cmVhbXNpemUgX19udW0gPSB0 aGlzLT5yZGJ1ZigpLT5pbl9hdmFpbCgpOwogICAgICAgaWYgKF9fbnVtID49IDApCiAgewogICAg X19udW0gPSBzdGQ6Om1pbihfX251bSwgX19uKTsKICAgIGlmIChfX251bSkKICAgICAgX01fZ2Nv dW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX251bSk7CiAgfQogICAgICAgZWxzZQog IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgIH0KICAgY2F0Y2goLi4uKQog ICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhy b3c7CiAgICAgfQogfQogICAgICBlbHNlCiB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp dCk7CiAgICAgIHJldHVybiBfTV9nY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwdXRiYWNrKGNoYXJf dHlwZSBfX2MpCiAgICB7CgoKICAgICAgX01fZ2NvdW50ID0gMDsKCiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAg ICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgIF9fc3Ry ZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgaWYgKCFfX3NiCiAgICB8 fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi0+c3B1dGJhY2tjKF9fYyksIF9fZW9mKSkK ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICB9CiAgIGNhdGNoKC4uLikK ICAgICB7CgoKICAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRo cm93OwogICAgIH0KIH0KICAgICAgZWxzZQogdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxi aXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB1bmdldCh2b2lkKQogICAg ewoKCiAgICAgIF9NX2djb3VudCA9IDA7CgogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl KTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgdHJ5CiAgICAgewogICAgICAgY29uc3QgaW50X3R5 cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBf X3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgIGlmICghX19zYgogICAgfHwgdHJhaXRzX3R5cGU6 OmVxX2ludF90eXBlKF9fc2ItPnN1bmdldGMoKSwgX19lb2YpKQogIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgIH0KICAgY2F0Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhp cy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAg ICBlbHNlCiB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgaW50CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2 b2lkKQogICAgewoKICAgICAgaW50IF9fcmV0ID0gLTE7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogewogICB0cnkKICAgICB7CiAgICAgICBfX3N0 cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgIGlmIChfX3NiKQogIHsK ICAgIGlmIChfX3NiLT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgZWxzZQogICAgICBfX3JldCA9IDA7CiAgfQogICAgIH0KICAgY2F0 Y2goLi4uKQogICAgIHsKCgogICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9 IDApCiAgdGhyb3c7CiAgICAgfQogfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICB0ZWxsZyh2b2lkKQogICAgewoKICAgICAgcG9zX3R5cGUgX19y ZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogX19yZXQgPSB0aGlz LT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7CiAg ICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhwb3NfdHlwZSBfX3BvcykK ICAgIHsKCiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogewoKCiAgIHBvc190eXBlIF9fZXJyID0g dGhpcy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6OmluKTsKCgogICBpZiAo X19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7CgogfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz ZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CgogICAg ICBpZiAoIXRoaXMtPmZhaWwoKSkKIHsKCgogICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVm KCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZGlyLAogICAgICAgICAgIGlvc19iYXNlOjppbik7CgoK ICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUg X19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19j ZXJiKQogewogICB0cnkKICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgY2F0Y2goLi4uKQogICAg IHsKCgogICAgICAgX19pbi5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgIGlm ICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogIHRocm93Owog ICAgIH0KIH0KICAgICAgZWxzZQogX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAg ICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVy YXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3Mp CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0 cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVh bWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0 czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgc3RyZWFtc2l6ZSBf X2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9f Y2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiB7CiAgIHRyeQogICAgIHsKCiAg ICAgICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOwogICAgICAgaWYgKF9fbnVtID09 IDApCiAgX19udW0gPSBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAgICAg Y29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19p bi5nZXRsb2MoKSk7CiAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigp OwogICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgIGlu dF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwg X19udW0gLSAxCiAgICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAg ICAgICYmICFfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfVHJhaXRzOjp0b19jaGFyX3R5 cGUoX19jKSkpCiAgewogICAgKl9fcysrID0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAg ICArK19fZXh0cmFjdGVkOwogICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgfQogICAgICAgaWYg KF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogIF9faW4uc2V0c3RhdGUoaW9zX2Jh c2U6OmVvZmJpdCk7CgoKCiAgICAgICAqX19zID0gY2hhcl90eXBlKCk7CgogICAgICAgX19pbi53 aWR0aCgwKTsKICAgICB9CiAgIGNhdGNoKC4uLikKICAgICB7CgoKICAgICAgIF9faW4uX01fc2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICB0aHJvdzsKICAgICB9CiB9CiAgICAgIGlmICghX19l eHRyYWN0ZWQpCiBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJu IF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJl YW08X0NoYXJULF9UcmFpdHM+JiBfX2luKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2lu dF90eXBlOwoKICAgICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9f Y3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2Yg PSBfVHJhaXRzOjplb2YoKTsKICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRi dWYoKTsKICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgd2hpbGUg KCFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAmJiBfX2N0eXBlLmlzKGN0 eXBlX2Jhc2U6OnNwYWNlLCBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKSkpCiBfX2MgPSBfX3Ni LT5zbmV4dGMoKTsKCiAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikp CiBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAg ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJh dG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBl ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0 cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0 eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf X3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9f ZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19j ZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgX19zdHIuZXJhc2UoKTsK ICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CiAgIF9fc2l6ZV90eXBlIF9fbjsKICAg X19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4 X3NpemUoKTsKCiAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0 eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1Ry YWl0czo6ZW9mKCk7CiAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAg IF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgIHdoaWxlIChfX2V4dHJhY3RlZCA8 IF9fbgogICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgJiYgIV9fY3R5 cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpKSkKICAg ICB7CiAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICsr X19leHRyYWN0ZWQ7CiAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICB9CiAgIGlmIChf VHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICBfX2luLnNldHN0YXRlKGlvc19i YXNlOjplb2ZiaXQpOwogICBfX2luLndpZHRoKDApOwogfQoKCiAgICAgIGlmICghX19leHRyYWN0 ZWQpCiBfX2luLnNldHN0YXRlIChpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICByZXR1cm4gX19p bjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBn ZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pCiAg ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVh bV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBf X2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVh bWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3Ry ZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKCiAgICAg IF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IGZh bHNlOwogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCB0 cnVlKTsKICAgICAgaWYgKF9fY2VyYikKIHsKICAgX19zdHIuZXJhc2UoKTsKICAgX19zaXplX3R5 cGUgX19uID0gX19zdHIubWF4X3NpemUoKTsKCiAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBfVHJh aXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9f aW4ucmRidWYoKTsKICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgY29uc3Qg X19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICBfX3Rlc3RkZWxpbSA9IF9UcmFp dHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pOwoKICAgd2hpbGUgKF9fZXh0cmFjdGVkIDw9 IF9fbgogICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgJiYgIV9fdGVz dGRlbGltKQogICAgIHsKICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2Mp OwogICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAg ICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKTsKICAg ICB9CiAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICBfX2luLnNl dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogfQogICAgICBpZiAoIV9fZXh0cmFjdGVkICYmICFf X3Rlc3RkZWxpbSkKIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1 cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBj bGFzcyBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAg ICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICBiYXNp Y19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19zdHIpCiAgICB7IHJldHVybiBnZXRs aW5lKF9faW4sIF9fc3RyLCBfX2luLndpZGVuKCdcbicpKTsgfQoKCgoKCiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0m IHdzKGlzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3Ry ZWFtJiwgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJl YW0mLCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVh bSYsIHVuc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+ Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3Bl cmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3Ry ZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciopOwojIDEyMTcgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2lzdHJlYW0udGNjIiAzCn0KIyA3NzYgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9pc3RyZWFtIiAyIDMKIyA0NiAiL2djYy9k amUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0 LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDIgMwoKCgojIDEgIi9nY2MvZGpl L2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2JpdHMvYmFz aWNfZmlsZS5oIiAxIDMKIyA0MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAvYml0cy9iYXNpY19maWxlLmgiIDMKCgoKCm5hbWVzcGFjZSBz dGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2Jhc2ljX2ZpbGU7 CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBfX2Jhc2ljX2ZpbGU8Y2hhcj4KICAgIHsKCiAgICAg IF9fY19maWxlKiBfTV9jZmlsZTsKCiAgICAgIGJvb2wgX01fY2ZpbGVfY3JlYXRlZDsKCiAgICBw dWJsaWM6CiAgICAgIF9fYmFzaWNfZmlsZShfX2NfbG9jayogX19sb2NrID0gMCk7CgogICAgICB2 b2lkCiAgICAgIF9NX29wZW5fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlLCBpbnQmIF9f cF9tb2RlLCBpbnQmIF9fcndfbW9kZSwKICAgICBjaGFyKiBfX2NfbW9kZSk7CgogICAgICBfX2Jh c2ljX2ZpbGUqCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19uYW1lLCBpb3NfYmFzZTo6b3Blbm1v ZGUgX19tb2RlLCBpbnQgX19wcm90ID0gMDY2NCk7CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAg IHN5c19vcGVuKF9fY19maWxlKiBfX2ZpbGUsIGlvc19iYXNlOjpvcGVubW9kZSk7CgogICAgICBf X2Jhc2ljX2ZpbGUqCiAgICAgIHN5c19vcGVuKGludCBfX2ZkLCBpb3NfYmFzZTo6b3Blbm1vZGUg X19tb2RlLCBib29sIF9fZGVsKTsKCiAgICAgIGludAogICAgICBzeXNfZ2V0YygpOwoKICAgICAg aW50CiAgICAgIHN5c191bmdldGMoaW50KTsKCiAgICAgIF9fYmFzaWNfZmlsZSoKICAgICAgY2xv c2UoKTsKCiAgICAgIGJvb2wKICAgICAgaXNfb3BlbigpIGNvbnN0OwoKICAgICAgaW50CiAgICAg IGZkKCk7CgogICAgICB+X19iYXNpY19maWxlKCk7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHhz cHV0bihjb25zdCBjaGFyKiBfX3MsIHN0cmVhbXNpemUgX19uLCBib29sIF9fc3RkaW8pOwoKICAg ICAgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhciogX19zLCBzdHJlYW1zaXplIF9fbiwgYm9v bCBfX3N0ZGlvKTsKCiAgICAgIHN0cmVhbW9mZgogICAgICBzZWVrb2ZmKHN0cmVhbW9mZiBfX29m ZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksIGJvb2wgX19zdGRpbywKICAgICAgIGlvc19iYXNl OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCiAgICAg IHN0cmVhbW9mZgogICAgICBzZWVrcG9zKHN0cmVhbW9mZiBfX3BvcywgYm9vbCBfX3N0ZGlvLAog ICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNl OjpvdXQpOwoKICAgICAgaW50CiAgICAgIHN5bmMoKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAg c2hvd21hbnljX2hlbHBlcihib29sIF9fc3RkaW8pOwogICAgfTsKfQojIDUwICIvZ2NjL2RqZS9i dWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAvbGlic3RkYysrLXYzL2luY2x1ZGUvZnN0cmVhbSIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMg NjMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfZmls ZWJ1ZiA6IHB1YmxpYyBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAg cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9U cmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Omlu dF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3Nf dHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5 cGUgb2ZmX3R5cGU7CgoKCgoKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5 cGUsIHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2Zp bGVidWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19maWxlYnVmX3R5cGU7CiAgICAgIHR5cGVk ZWYgX19iYXNpY19maWxlPGNoYXI+IF9fZmlsZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IHRyYWl0c190eXBlOjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKICAgICAgdHlwZWRlZiBjb2Rl Y3Z0PGNoYXJfdHlwZSwgY2hhciwgX19zdGF0ZV90eXBlPiBfX2NvZGVjdnRfdHlwZTsKICAgICAg dHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsKCgogICAgICBmcmllbmQgY2xh c3MgaW9zX2Jhc2U7CgogICAgcHJvdGVjdGVkOgoKCgoKCgoKICAgICAgX19jX2xvY2sgX01fbG9j azsKCgoKCgoKCiAgICAgIF9fZmlsZV90eXBlIF9NX2ZpbGU7CgoKCgoKCgogICAgICBfX3N0YXRl X3R5cGUgX01fc3RhdGVfY3VyOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3RhdGVfYmVnOwoKCgoK CgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsKCgoKCgoKICAgICAgc2l6ZV90IF9NX2J1Zl9zaXpl OwoKCgoKCgoKICAgICAgYm9vbCBfTV9idWZfYWxsb2NhdGVkOwoKCiAgICAgIGJvb2wgX01fbGFz dF9vdmVyZmxvd2VkOwojIDE0OSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Zz dHJlYW0iIDMKICAgICAgY2hhcl90eXBlKiBfTV9maWxlcG9zOwojIDE1OSAiL2djYy9kamUvYnVp bGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4w L2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMKICAgICAgc3RhdGljIGNvbnN0IHNpemVf dCBfU19wYmFja19zaXplID0gMTsKICAgICAgY2hhcl90eXBlIF9NX3BiYWNrW19TX3BiYWNrX3Np emVdOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUq IF9NX3BiYWNrX2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKCgoKICAgICAg dm9pZAogICAgICBfTV9jcmVhdGVfcGJhY2soKQogICAgICB7CiBpZiAoIV9NX3BiYWNrX2luaXQp CiAgIHsKICAgICBzaXplX3QgX19kaXN0ID0gdGhpcy0+X01faW5fZW5kIC0gdGhpcy0+X01faW5f Y3VyOwogICAgIHNpemVfdCBfX2xlbiA9IHN0ZDo6bWluKF9TX3BiYWNrX3NpemUsIF9fZGlzdCk7 CiAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIHRoaXMtPl9NX2luX2N1ciwgX19sZW4p OwogICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gdGhpcy0+X01faW5fY3VyOwogICAgIF9NX3BiYWNr X2VuZF9zYXZlID0gdGhpcy0+X01faW5fZW5kOwogICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9N X3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAgICBfTV9wYmFja19pbml0ID0gdHJ1ZTsKICAg fQogICAgICB9CgoKCgogICAgICB2b2lkCiAgICAgIF9NX2Rlc3Ryb3lfcGJhY2soKSB0aHJvdygp CiAgICAgIHsKIGlmIChfTV9wYmFja19pbml0KQogICB7CgogICAgIHNpemVfdCBfX29mZl9jdXIg PSB0aGlzLT5fTV9pbl9jdXIgLSBfTV9wYmFjazsKCgogICAgIHNpemVfdCBfX29mZl9lbmQgPSAw OwogICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9IHRoaXMtPl9NX2luX2VuZCAtIF9NX3BiYWNrOwog ICAgIHNpemVfdCBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSB0aGlzLT5fTV9idWY7 CiAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgIF9fb2ZmX2VuZCA9IF9f cGJhY2tfbGVuIC0gX19zYXZlX2xlbjsKCiAgICAgdGhpcy0+c2V0Zyh0aGlzLT5fTV9idWYsIF9N X3BiYWNrX2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSAr IF9fb2ZmX2VuZCk7CiAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfX251bGw7CiAgICAgX01fcGJh Y2tfZW5kX3NhdmUgPSBfX251bGw7CiAgICAgX01fcGJhY2tfaW5pdCA9IGZhbHNlOwogICB9CiAg ICAgIH0KCiAgICBwdWJsaWM6CgoKCgoKCgogICAgICBiYXNpY19maWxlYnVmKCk7CgoKCgogICAg ICB2aXJ0dWFsCiAgICAgIH5iYXNpY19maWxlYnVmKCkKICAgICAgewogdGhpcy0+Y2xvc2UoKTsK IF9NX2J1Zl9zaXplID0gMDsKIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICB9CgoK CgoKICAgICAgYm9vbAogICAgICBpc19vcGVuKCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9m aWxlLmlzX29wZW4oKTsgfQojIDI1MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl L2ZzdHJlYW0iIDMKICAgICAgX19maWxlYnVmX3R5cGUqCiAgICAgIG9wZW4oY29uc3QgY2hhciog X19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKTsKIyAyNjUgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICBj bG9zZSgpIHRocm93KCk7CgogICAgcHJvdGVjdGVkOgoKCgoKCiAgICAgIHZvaWQKICAgICAgX01f YWxsb2NhdGVfaW50ZXJuYWxfYnVmZmVyKCk7CgoKCgoKCiAgICAgIHZvaWQKICAgICAgX01fZGVz dHJveV9pbnRlcm5hbF9idWZmZXIoKSB0aHJvdygpOwoKCgogICAgICB2aXJ0dWFsIHN0cmVhbXNp emUKICAgICAgc2hvd21hbnljKCk7CiMgMzA2ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvZnN0cmVhbSIgMwogICAgICBpbnRfdHlwZQogICAgICBfTV91bmRlcmZsb3coYm9vbCBf X2J1bXApOwoKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCk7CgoKICAg ICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1ZmxvdygpOwoKCiAgICAgIHZpcnR1YWwgaW50X3R5 cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsKIyAzMzEg Ii9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1p Ym0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgICAgIHZpcnR1 YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9mKCkp OwojIDM0NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMKICAg ICAgaW50X3R5cGUKICAgICAgX01fb3ZlcmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9m KCkpOwojIDM1NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMK ICAgICAgdm9pZAogICAgICBfTV9jb252ZXJ0X3RvX2V4dGVybmFsKGNoYXJfdHlwZSosIHN0cmVh bXNpemUsIHN0cmVhbXNpemUmLCBzdHJlYW1zaXplJik7CiMgMzcxICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli c3RkYysrLXYzL2luY2x1ZGUvZnN0cmVhbSIgMwogICAgICB2aXJ0dWFsIF9fc3RyZWFtYnVmX3R5 cGUqCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKCiAgICAg IHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6 OnNlZWtkaXIgX193YXksCiAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jh c2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBz ZWVrcG9zKHBvc190eXBlIF9fcG9zLAogICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9 IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg IHN5bmMoKQogICAgICB7CiBpbnQgX19yZXQgPSAwOwogY29uc3QgYm9vbCBfX3Rlc3RwdXQgPSB0 aGlzLT5fTV9vdXRfYmVnIDwgdGhpcy0+X01fb3V0X2xpbTsKCiBjb25zdCBib29sIF9fc3luYyA9 IHRoaXMtPl9NX2J1Zl9zaXplIDw9IDE7CgoKCiBpZiAoX190ZXN0cHV0KQogICB7CgogICAgIG9m Zl90eXBlIF9fb2ZmID0gdGhpcy0+X01fb3V0X2N1ciAtIHRoaXMtPl9NX291dF9saW07CgoKICAg ICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX292ZXJmbG93KCksIHRyYWl0c190eXBl Ojplb2YoKSkpCiAgICAgICBfX3JldCA9IC0xOwogICAgIGVsc2UgaWYgKF9fb2ZmKQogICAgICAg X01fZmlsZS5zZWVrb2ZmKF9fb2ZmLCBpb3NfYmFzZTo6Y3VyLCBfX3N5bmMpOwogICB9CiBlbHNl CiAgIF9NX2ZpbGUuc3luYygpOwoKIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogcmV0dXJu IF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGltYnVlKGNvbnN0IGxv Y2FsZSYgX19sb2MpOwoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hh cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7CiBzdHJlYW1zaXplIF9fcmV0ID0g MDsKCiBpZiAodGhpcy0+X01fcGJhY2tfaW5pdCkKICAgewogICAgIHdoaWxlIChfX3JldCA8IF9f biAmJiB0aGlzLT5fTV9pbl9jdXIgPCB0aGlzLT5fTV9pbl9lbmQpCiAgICAgICB7CiAgKl9fcyA9 ICp0aGlzLT5fTV9pbl9jdXI7CiAgKytfX3JldDsKICArK19fczsKICArK3RoaXMtPl9NX2luX2N1 cjsKICAgICAgIH0KICAgICBfTV9kZXN0cm95X3BiYWNrKCk7CiAgIH0KIGlmIChfX3JldCA8IF9f bikKICAgX19yZXQgKz0gX19zdHJlYW1idWZfdHlwZTo6eHNnZXRuKF9fcywgX19uIC0gX19yZXQp OwogcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAg IHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsKIF9N X2Rlc3Ryb3lfcGJhY2soKTsKIHJldHVybiBfX3N0cmVhbWJ1Zl90eXBlOjp4c3B1dG4oX19zLCBf X24pOwogICAgICB9CgoKCgoKCiAgICAgIHZvaWQKICAgICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsK IyA0NjcgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgICAg IHZvaWQKICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgeyBfTV9zZXRfZGV0 ZXJtaW5hdGUob2ZmX3R5cGUoMCkpOyB9CgoKCgoKCiAgICAgIHZvaWQKICAgICAgX01fc2V0X2Rl dGVybWluYXRlKG9mZl90eXBlIF9fb2ZmKQogICAgICB7CiBjb25zdCBib29sIF9fdGVzdGluID0g dGhpcy0+X01fbW9kZSAmIGlvc19iYXNlOjppbjsKIGNvbnN0IGJvb2wgX190ZXN0b3V0ID0gdGhp cy0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiBpZiAoX190ZXN0aW4pCiAgIHRoaXMtPnNldGco dGhpcy0+X01fYnVmLCB0aGlzLT5fTV9idWYsIHRoaXMtPl9NX2J1ZiArIF9fb2ZmKTsKIGlmIChf X3Rlc3RvdXQpCiAgIHsKICAgICB0aGlzLT5zZXRwKHRoaXMtPl9NX2J1ZiwgdGhpcy0+X01fYnVm ICsgdGhpcy0+X01fYnVmX3NpemUpOwogICAgIHRoaXMtPl9NX291dF9saW0gPSB0aGlzLT5fTV9i dWYgKyBfX29mZjsKICAgfQogX01fZmlsZXBvcyA9IHRoaXMtPl9NX2J1ZiArIF9fb2ZmOwogICAg ICB9CgoKCgoKCiAgICAgIGJvb2wKICAgICAgX01faXNfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAg ICB7CiBjb25zdCBib29sIF9fdGVzdGluID0gdGhpcy0+X01fbW9kZSAmIGlvc19iYXNlOjppbjsK IGNvbnN0IGJvb2wgX190ZXN0b3V0ID0gdGhpcy0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiBi b29sIF9fcmV0ID0gZmFsc2U7CgogaWYgKHRoaXMtPl9NX2J1ZikKICAgewogICAgIGlmIChfX3Rl c3RpbikKICAgICAgIF9fcmV0ID0gdGhpcy0+X01faW5fYmVnID09IHRoaXMtPl9NX2luX2N1cgog ICYmIHRoaXMtPl9NX2luX2N1ciA9PSB0aGlzLT5fTV9pbl9lbmQ7CiAgICAgaWYgKF9fdGVzdG91 dCkKICAgICAgIF9fcmV0ID0gdGhpcy0+X01fb3V0X2JlZyA9PSB0aGlzLT5fTV9vdXRfY3VyCiAg JiYgdGhpcy0+X01fb3V0X2N1ciA9PSB0aGlzLT5fTV9vdXRfbGltOwogICB9CiByZXR1cm4gX19y ZXQ7CiAgICAgIH0KICAgIH07CgoKICB0ZW1wbGF0ZTw+CiAgICBiYXNpY19maWxlYnVmPGNoYXI+ OjppbnRfdHlwZQogICAgYmFzaWNfZmlsZWJ1ZjxjaGFyPjo6X01fdW5kZXJmbG93KGJvb2wgX19i dW1wKTsKCiAgdGVtcGxhdGU8PgogICAgYmFzaWNfZmlsZWJ1ZjxjaGFyPjo6aW50X3R5cGUKICAg IGJhc2ljX2ZpbGVidWY8Y2hhcj46OnVuZGVyZmxvdygpOwoKICB0ZW1wbGF0ZTw+CiAgICBiYXNp Y19maWxlYnVmPGNoYXI+OjppbnRfdHlwZQogICAgYmFzaWNfZmlsZWJ1ZjxjaGFyPjo6dWZsb3co KTsKIyA1NDQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAg dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1l IGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVi dWY8X0NoYXJULCBfVHJhaXRzPjo6dW5kZXJmbG93KCkKICAgIHsgcmV0dXJuIGludF90eXBlKCk7 IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5 cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2lj X2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6dWZsb3coKQogICAgeyByZXR1cm4gaW50X3R5cGUo KTsgfQojIDU2MyAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBi YXNpY19pZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190 eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw ZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6 Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5 cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3Ry ZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6 CgoKCgoKICAgICAgX19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CiMgNTk1 ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMt aWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvZnN0cmVhbSIgMwogICAgICBiYXNp Y19pZnN0cmVhbSgpIDogX19pc3RyZWFtX3R5cGUoKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsgdGhp cy0+aW5pdCgmX01fZmlsZWJ1Zik7IH0KIyA2MDggIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv aW5jbHVkZS9mc3RyZWFtIiAzCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lmc3RyZWFtKGNv bnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbikK ICAgICAgOiBfX2lzdHJlYW1fdHlwZSgpLCBfTV9maWxlYnVmKCkKICAgICAgewogdGhpcy0+aW5p dCgmX01fZmlsZWJ1Zik7CiB0aGlzLT5vcGVuKF9fcywgX19tb2RlKTsKICAgICAgfQoKCgoKCgoK ICAgICAgfmJhc2ljX2lmc3RyZWFtKCkKICAgICAgeyB9CiMgNjMyICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli c3RkYysrLXYzL2luY2x1ZGUvZnN0cmVhbSIgMwogICAgICBfX2ZpbGVidWZfdHlwZSoKICAgICAg cmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90eXBlKj4o Jl9NX2ZpbGVidWYpOyB9CgoKCgoKICAgICAgYm9vbAogICAgICBpc19vcGVuKCkgeyByZXR1cm4g X01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KIyA2NTQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMv aW5jbHVkZS9mc3RyZWFtIiAzCiAgICAgIHZvaWQKICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3Ms IGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCiAgICAgIHsKIGlmICgh X01fZmlsZWJ1Zi5vcGVuKF9fcywgX19tb2RlIHwgaW9zX2Jhc2U6OmluKSkKICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CgoKCgoKCgogICAgICB2b2lkCiAgICAg IGNsb3NlKCkKICAgICAgewogaWYgKCFfTV9maWxlYnVmLmNsb3NlKCkpCiAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKIyA2ODUgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW0gOiBwdWJsaWMg YmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAg ICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVi dWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5 cGU+IF9fb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoKICAgICAgX19maWxlYnVmX3R5 cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CiMgNzE3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr LXYzL2luY2x1ZGUvZnN0cmVhbSIgMwogICAgICBiYXNpY19vZnN0cmVhbSgpOiBfX29zdHJlYW1f dHlwZSgpLCBfTV9maWxlYnVmKCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsgfQoj IDczMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dl cnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMKICAgICAg ZXhwbGljaXQKICAgICAgYmFzaWNfb2ZzdHJlYW0oY29uc3QgY2hhciogX19zLAogICAgICAgaW9z X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXR8aW9zX2Jhc2U6OnRydW5jKQog ICAgICA6IF9fb3N0cmVhbV90eXBlKCksIF9NX2ZpbGVidWYoKQogICAgICB7CiB0aGlzLT5pbml0 KCZfTV9maWxlYnVmKTsKIHRoaXMtPm9wZW4oX19zLCBfX21vZGUpOwogICAgICB9CgoKCgoKCgog ICAgICB+YmFzaWNfb2ZzdHJlYW0oKQogICAgICB7IH0KIyA3NTYgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICBy ZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigm X01fZmlsZWJ1Zik7IH0KCgoKCgogICAgICBib29sCiAgICAgIGlzX29wZW4oKSB7IHJldHVybiBf TV9maWxlYnVmLmlzX29wZW4oKTsgfQojIDc3OCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p bmNsdWRlL2ZzdHJlYW0iIDMKICAgICAgdm9pZAogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywK ICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6 OnRydW5jKQogICAgICB7CiBpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSB8IGlvc19i YXNlOjpvdXQpKQogICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIH0K CgoKCgoKCiAgICAgIHZvaWQKICAgICAgY2xvc2UoKQogICAgICB7CiBpZiAoIV9NX2ZpbGVidWYu Y2xvc2UoKSkKICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CiAg ICB9OwojIDgxMCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBi YXNpY19mc3RyZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190 eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw ZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6 Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5 cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8 Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19p b3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lvc3RyZWFtX3R5cGU7CgogICAgcHJp dmF0ZToKCgoKCgogICAgICBfX2ZpbGVidWZfdHlwZSBfTV9maWxlYnVmOwoKICAgIHB1YmxpYzoK IyA4NDMgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAzCiAgICAg IGJhc2ljX2ZzdHJlYW0oKQogICAgICA6IF9faW9zdHJlYW1fdHlwZSgpLCBfTV9maWxlYnVmKCkK ICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsgfQojIDg1NSAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNf ZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsCiAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUg PSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICA6IF9faW9zdHJlYW1fdHlwZShf X251bGwpLCBfTV9maWxlYnVmKCkKICAgICAgewogdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CiB0 aGlzLT5vcGVuKF9fcywgX19tb2RlKTsKICAgICAgfQoKCgoKCgoKICAgICAgfmJhc2ljX2ZzdHJl YW0oKQogICAgICB7IH0KIyA4ODAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9m c3RyZWFtIiAzCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAg IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1Zik7IH0KCgoK CgogICAgICBib29sCiAgICAgIGlzX29wZW4oKSB7IHJldHVybiBfTV9maWxlYnVmLmlzX29wZW4o KTsgfQojIDkwMiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2ZzdHJlYW0iIDMK ICAgICAgdm9pZAogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywKICAgIGlvc19iYXNlOjpvcGVu bW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7CiBpZiAo IV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpCiAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpmYWlsYml0KTsKICAgICAgfQoKCgoKCgoKICAgICAgdm9pZAogICAgICBjbG9zZSgpCiAgICAg IHsKIGlmICghX01fZmlsZWJ1Zi5jbG9zZSgpKQogICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 ZmFpbGJpdCk7CiAgICAgIH0KICAgIH07Cn0KCgoKCgojIDEgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9iaXRzL2ZzdHJlYW0udGNjIiAxIDMKIyAzOSAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZnN0cmVhbS50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNvbnN0IHNp emVfdAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYmFja19zaXplOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAg ICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fYWxsb2NhdGVfaW50ZXJu YWxfYnVmZmVyKCkKICAgIHsKICAgICAgaWYgKCF0aGlzLT5fTV9idWYgJiYgdGhpcy0+X01fYnVm X3NpemUpCiB7CgogICB0aGlzLT5fTV9idWYgPSBuZXcgY2hhcl90eXBlW3RoaXMtPl9NX2J1Zl9z aXplXTsKICAgX01fYnVmX2FsbG9jYXRlZCA9IHRydWU7CiB9CiAgICB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19maWxl YnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKSB0 aHJvdygpCiAgICB7CiAgICAgIGlmIChfTV9idWZfYWxsb2NhdGVkKQogewogICBkZWxldGUgW10g dGhpcy0+X01fYnVmOwogICB0aGlzLT5fTV9idWYgPSBfX251bGw7CiAgIF9NX2J1Zl9hbGxvY2F0 ZWQgPSBmYWxzZTsKICAgdGhpcy0+c2V0ZyhfX251bGwsIF9fbnVsbCwgX19udWxsKTsKICAgdGhp cy0+c2V0cChfX251bGwsIF9fbnVsbCk7CiB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBiYXNpY19maWxlYnVmKCkgOiBfX3N0cmVhbWJ1Zl90eXBlKCksIF9NX2ZpbGUoJl9N X2xvY2spLAogICAgX01fc3RhdGVfY3VyKF9fc3RhdGVfdHlwZSgpKSwgX01fc3RhdGVfYmVnKF9f c3RhdGVfdHlwZSgpKSwKICAgIF9NX2J1ZihfX251bGwpLCBfTV9idWZfc2l6ZSg0MDk2KSwgX01f YnVmX2FsbG9jYXRlZChmYWxzZSksCiAgICBfTV9sYXN0X292ZXJmbG93ZWQoZmFsc2UpLCBfTV9w YmFja19jdXJfc2F2ZSgwKSwKICAgIF9NX3BiYWNrX2VuZF9zYXZlKDApLCBfTV9wYmFja19pbml0 KGZhbHNlKQogICAgeyB0aGlzLT5fTV9idWZfdW5pZmllZCA9IHRydWU7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmls ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoKICAgIGJhc2ljX2ZpbGVidWY8 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9w ZW5tb2RlIF9fbW9kZSkKICAgIHsKICAgICAgX19maWxlYnVmX3R5cGUgKl9fcmV0ID0gX19udWxs OwogICAgICBpZiAoIXRoaXMtPmlzX29wZW4oKSkKIHsKICAgX01fZmlsZS5vcGVuKF9fcywgX19t b2RlKTsKICAgaWYgKHRoaXMtPmlzX29wZW4oKSkKICAgICB7CiAgICAgICBfTV9hbGxvY2F0ZV9p bnRlcm5hbF9idWZmZXIoKTsKICAgICAgIHRoaXMtPl9NX21vZGUgPSBfX21vZGU7CgoKICAgICAg IF9NX3NldF9pbmRldGVybWluYXRlKCk7CgogICAgICAgaWYgKChfX21vZGUgJiBpb3NfYmFzZTo6 YXRlKQogICAgJiYgdGhpcy0+c2Vla29mZigwLCBpb3NfYmFzZTo6ZW5kLCBfX21vZGUpIDwgMCkK ICB7CgogICAgdGhpcy0+Y2xvc2UoKTsKICAgIHJldHVybiBfX3JldDsKICB9CgogICAgICAgX19y ZXQgPSB0aGlzOwogICAgIH0KIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19m aWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9fZmlsZWJ1Zl90eXBlKgogICAgYmFzaWNfZmlsZWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGNsb3NlKCkgdGhyb3coKQogICAgewogICAgICBfX2Zp bGVidWZfdHlwZSogX19yZXQgPSBfX251bGw7CiAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpCiB7 CiAgIGJvb2wgX190ZXN0ZmFpbCA9IGZhbHNlOwogICB0cnkKICAgICB7CiAgICAgICBjb25zdCBp bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgIGNvbnN0IGJvb2wgX190 ZXN0cHV0ID0gdGhpcy0+X01fb3V0X2JlZyA8IHRoaXMtPl9NX291dF9saW07CgogICAgICAgaWYg KF9fdGVzdHB1dAogICAgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX292ZXJmbG93KF9f ZW9mKSwgX19lb2YpKQogIF9fdGVzdGZhaWwgPSB0cnVlOwojIDE0MSAiL2djYy9kamUvYnVpbGQv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xp YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZnN0cmVhbS50Y2MiIDMKICAgICB9CiAgIGNhdGNoKC4u LikKICAgICB7CiAgICAgICBfX3Rlc3RmYWlsID0gdHJ1ZTsKICAgICB9CgoKICAgdGhpcy0+X01f bW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZm ZXIoKTsKICAgX01fZGVzdHJveV9wYmFjaygpOwoKICAgaWYgKCFfTV9maWxlLmNsb3NlKCkpCiAg ICAgX190ZXN0ZmFpbCA9IHRydWU7CgogICBpZiAoIV9fdGVzdGZhaWwpCiAgICAgX19yZXQgPSB0 aGlzOwogfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9f cmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAg c2hvd21hbnljKCkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IC0xOwogICAgICBjb25z dCBib29sIF9fdGVzdGluID0gdGhpcy0+X01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgY29u c3QgbG9jYWxlIF9fbG9jID0gdGhpcy0+Z2V0bG9jKCk7CiAgICAgIGNvbnN0IF9fY29kZWN2dF90 eXBlJiBfX2N2dCA9IHVzZV9mYWNldDxfX2NvZGVjdnRfdHlwZT4oX19sb2MpOwogICAgICBjb25z dCBib29sIF9fdGVzdHN5bmMgPSB0aGlzLT5fTV9idWZfc2l6ZSA8PSAxOwoKICAgICAgaWYgKF9f dGVzdGluICYmIHRoaXMtPmlzX29wZW4oKSkKIHsKICAgX19yZXQgPSB0aGlzLT5fTV9pbl9lbmQg LSB0aGlzLT5fTV9pbl9jdXI7CgoKCiAgIGlmIChfX2N2dC5lbmNvZGluZygpID49IDApCiAgICAg X19yZXQgKz0gX01fZmlsZS5zaG93bWFueWNfaGVscGVyKF9fdGVzdHN5bmMpIC8gX19jdnQubWF4 X2xlbmd0aCgpOwogfQoKICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRf dHlwZQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBiYWNrZmFpbChp bnRfdHlwZSBfX2kpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVv ZigpOwogICAgICBjb25zdCBib29sIF9fdGVzdGluID0gdGhpcy0+X01fbW9kZSAmIGlvc19iYXNl OjppbjsKCiAgICAgIGlmIChfX3Rlc3RpbikKIHsKICAgY29uc3QgYm9vbCBfX3Rlc3RwYiA9IHRo aXMtPl9NX2luX2JlZyA8IHRoaXMtPl9NX2luX2N1cjsKICAgY2hhcl90eXBlIF9fYyA9IHRyYWl0 c190eXBlOjp0b19jaGFyX3R5cGUoX19pKTsKICAgY29uc3QgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFp dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19pLCBfX3JldCk7CgogICBpZiAoX190ZXN0cGIpCiAgICAg ewogICAgICAgY29uc3QgYm9vbCBfX3Rlc3RvdXQgPSB0aGlzLT5fTV9tb2RlICYgaW9zX2Jhc2U6 Om91dDsKICAgICAgIGNvbnN0IGJvb2wgX190ZXN0ZXEgPSB0cmFpdHNfdHlwZTo6ZXEoX19jLCB0 aGlzLT5fTV9pbl9jdXJbLTFdKTsKCiAgICAgICAtLXRoaXMtPl9NX2luX2N1cjsKICAgICAgIGlm IChfX3Rlc3RvdXQpCiAgLS10aGlzLT5fTV9vdXRfY3VyOwoKCiAgICAgICBpZiAoIV9fdGVzdGVv ZiAmJiBfX3Rlc3RlcSkKICBfX3JldCA9IF9faTsKICAgICAgIGVsc2UgaWYgKF9fdGVzdGVvZikK ICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9faSk7CiAgICAgICBlbHNlCiAgewogICAg X01fY3JlYXRlX3BiYWNrKCk7CiAgICAqdGhpcy0+X01faW5fY3VyID0gX19jOwogICAgX19yZXQg PSBfX2k7CiAgfQogICAgIH0KICAgZWxzZQogICAgIHsKCgoKCgogICAgICAgaWYgKHRoaXMtPnNl ZWtvZmYoLTEsIGlvc19iYXNlOjpjdXIpID49IDApCiAgewogICAgdGhpcy0+dW5kZXJmbG93KCk7 CiAgICBpZiAoIV9fdGVzdGVvZikKICAgICAgewogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVx KF9fYywgKnRoaXMtPl9NX2luX2N1cikpCiAgIHsKICAgICBfTV9jcmVhdGVfcGJhY2soKTsKICAg ICAqdGhpcy0+X01faW5fY3VyID0gX19jOwogICB9CiAgICAgICAgX19yZXQgPSBfX2k7CiAgICAg IH0KICAgIGVsc2UKICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2kpOwogIH0K ICAgICAgfQogfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJu IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl CiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3ZlcmZsb3coaW50X3R5 cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsK ICAgICAgY29uc3QgYm9vbCBfX3Rlc3RwdXQgPSB0aGlzLT5fTV9vdXRfY3VyIDwgdGhpcy0+X01f b3V0X2VuZDsKICAgICAgY29uc3QgYm9vbCBfX3Rlc3RvdXQgPSB0aGlzLT5fTV9tb2RlICYgaW9z X2Jhc2U6Om91dDsKCiAgICAgIGlmIChfX3Rlc3RvdXQpCiB7CiAgIGlmICh0cmFpdHNfdHlwZTo6 ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgIF9fcmV0ID0gdHJhaXRz X3R5cGU6Om5vdF9lb2YoX19jKTsKICAgZWxzZSBpZiAoX190ZXN0cHV0KQogICAgIHsKICAgICAg ICp0aGlzLT5fTV9vdXRfY3VyID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAg ICAgX01fbW92ZV9vdXRfY3VyKDEpOwogICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2Vv ZihfX2MpOwogICAgIH0KICAgZWxzZQogICAgIF9fcmV0ID0gdGhpcy0+X01fb3ZlcmZsb3coX19j KTsKIH0KCiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19y ZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9jb252 ZXJ0X3RvX2V4dGVybmFsKF9DaGFyVCogX19pYnVmLCBzdHJlYW1zaXplIF9faWxlbiwKICAgICAg c3RyZWFtc2l6ZSYgX19lbGVuLCBzdHJlYW1zaXplJiBfX3BsZW4pCiAgICB7CiAgICAgIGNvbnN0 IGJvb2wgX190ZXN0c3luYyA9IHRoaXMtPl9NX2J1Zl9zaXplIDw9IDE7CiAgICAgIGNvbnN0IGxv Y2FsZSBfX2xvYyA9IHRoaXMtPmdldGxvYygpOwogICAgICBjb25zdCBfX2NvZGVjdnRfdHlwZSYg X19jdnQgPSB1c2VfZmFjZXQ8X19jb2RlY3Z0X3R5cGU+KF9fbG9jKTsKCiAgICAgIGlmIChfX2N2 dC5hbHdheXNfbm9jb252KCkgJiYgX19pbGVuKQogewogICBfX2VsZW4gKz0gX01fZmlsZS54c3B1 dG4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19pYnVmKSwKICAgICAgIF9faWxlbiwgX190ZXN0 c3luYyk7CiAgIF9fcGxlbiArPSBfX2lsZW47CiB9CiAgICAgIGVsc2UKIHsKCiAgIGludCBfX2V4 dF9tdWx0aXBsaWVyID0gX19jdnQuZW5jb2RpbmcoKTsKICAgaWYgKF9fZXh0X211bHRpcGxpZXIg PT0gLTEgfHwgX19leHRfbXVsdGlwbGllciA9PSAwKQogICAgIF9fZXh0X211bHRpcGxpZXIgPSBz aXplb2YoY2hhcl90eXBlKTsKICAgc3RyZWFtc2l6ZSBfX2JsZW4gPSBfX2lsZW4gKiBfX2V4dF9t dWx0aXBsaWVyOwogICBjaGFyKiBfX2J1ZiA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5f YWxsb2NhKF9fYmxlbikpOwogICBjaGFyKiBfX2JlbmQ7CiAgIGNvbnN0IGNoYXJfdHlwZSogX19p ZW5kOwogICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCBfX3I7CiAgIF9fciA9IF9fY3Z0Lm91dChfTV9z dGF0ZV9jdXIsIF9faWJ1ZiwgX19pYnVmICsgX19pbGVuLAogICAgIF9faWVuZCwgX19idWYsIF9f YnVmICsgX19ibGVuLCBfX2JlbmQpOwoKICAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6Om9rIHx8 IF9fciA9PSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWwpCiAgICAgX19ibGVuID0gX19iZW5kIC0gX19i dWY7CiAgIGVsc2UgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6Om5vY29udikKICAgICB7CgogICAg ICAgX19idWYgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2lidWYpOwogICAgICAgX19ibGVu ID0gX19pbGVuOwogICAgIH0KICAgZWxzZQogICAgIHsKCiAgICAgICBfX2JsZW4gPSAwOwogICAg IH0KCiAgIGlmIChfX2JsZW4pCiAgICAgewogICAgICAgX19lbGVuICs9IF9NX2ZpbGUueHNwdXRu KF9fYnVmLCBfX2JsZW4sIF9fdGVzdHN5bmMpOwogICAgICAgX19wbGVuICs9IF9fYmxlbjsKICAg ICB9CgoKICAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWwpCiAgICAgewogICAgICAg Y29uc3QgY2hhcl90eXBlKiBfX2lyZXN1bWUgPSBfX2llbmQ7CiAgICAgICBzdHJlYW1zaXplIF9f cmxlbiA9IHRoaXMtPl9NX291dF9saW0gLSBfX2llbmQ7CiAgICAgICBfX3IgPSBfX2N2dC5vdXQo X01fc3RhdGVfY3VyLCBfX2lyZXN1bWUsIF9faXJlc3VtZSArIF9fcmxlbiwKICAgICAgICAgX19p ZW5kLCBfX2J1ZiwgX19idWYgKyBfX2JsZW4sIF9fYmVuZCk7CiAgICAgICBpZiAoX19yICE9IGNv ZGVjdnRfYmFzZTo6ZXJyb3IpCiAgewogICAgX19ybGVuID0gX19iZW5kIC0gX19idWY7CiAgICBf X2VsZW4gKz0gX01fZmlsZS54c3B1dG4oX19idWYsIF9fcmxlbiwgX190ZXN0c3luYyk7CiAgICBf X3BsZW4gKz0gX19ybGVuOwogIH0KICAgICB9CiB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0No YXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBfTV9vdmVyZmxvdyhpbnRfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9f cmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBjb25zdCBib29sIF9fdGVzdHB1dCA9IHRo aXMtPl9NX291dF9iZWcgPCB0aGlzLT5fTV9vdXRfbGltOwogICAgICBjb25zdCBib29sIF9fdGVz dHVuYnVmZmVyZWQgPSBfTV9maWxlLmlzX29wZW4oKSAmJiAhdGhpcy0+X01fYnVmX3NpemU7CiAg ICAgIGNvbnN0IGJvb2wgX190ZXN0c3luYyA9IHRoaXMtPl9NX2J1Zl9zaXplIDw9IDE7CgogICAg ICBpZiAoX190ZXN0cHV0IHx8IF9fdGVzdHVuYnVmZmVyZWQpCiB7CgogICBzdHJlYW1zaXplIF9f ZWxlbiA9IDA7CiAgIHN0cmVhbXNpemUgX19wbGVuID0gMDsKCgoKCiAgIGlmIChfTV9maWxlcG9z ICYmIF9NX2ZpbGVwb3MgIT0gdGhpcy0+X01fb3V0X2JlZykKICAgICB7CiAgICAgICBvZmZfdHlw ZSBfX29mZiA9IHRoaXMtPl9NX291dF9iZWcgLSBfTV9maWxlcG9zOwogICAgICAgX01fZmlsZS5z ZWVrb2ZmKF9fb2ZmLCBpb3NfYmFzZTo6Y3VyLCBfX3Rlc3RzeW5jKTsKICAgICB9CgoKCiAgIGlm ICghX190ZXN0dW5idWZmZXJlZCkKICAgICBfTV9jb252ZXJ0X3RvX2V4dGVybmFsKHRoaXMtPl9N X291dF9iZWcsCiAgICAgICB0aGlzLT5fTV9vdXRfbGltIC0gdGhpcy0+X01fb3V0X2JlZywKICAg ICAgIF9fZWxlbiwgX19wbGVuKTsKCgoKICAgaWYgKF9fdGVzdHVuYnVmZmVyZWQgfHwgKF9fZWxl biAmJiBfX2VsZW4gPT0gX19wbGVuKSkKICAgICB7CgoKICAgICAgIGlmICghdHJhaXRzX3R5cGU6 OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKICB7CiAgICBjaGFyX3R5cGUg X19wZW5kaW5nID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgX01fY29udmVy dF90b19leHRlcm5hbCgmX19wZW5kaW5nLCAxLCBfX2VsZW4sIF9fcGxlbik7CgoKCiAgICBpZiAo X19lbGVuID09IF9fcGxlbiAmJiBfX2VsZW4pCiAgICAgIHsKICAgICAgICBfTV9zZXRfaW5kZXRl cm1pbmF0ZSgpOwogICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19jKTsKICAg ICAgfQogIH0KICAgICAgIGVsc2UgaWYgKCFfTV9maWxlLnN5bmMoKSkKICB7CiAgICBfTV9zZXRf aW5kZXRlcm1pbmF0ZSgpOwogICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOwog IH0KICAgICB9CiB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IHRydWU7CiAgICAgIHJldHVy biBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX3N0cmVh bWJ1Zl90eXBlKgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNldGJ1 ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIGlmICghdGhpcy0+ aXNfb3BlbigpICYmIF9fcyA9PSAwICYmIF9fbiA9PSAwKQogdGhpcy0+X01fYnVmX3NpemUgPSAw OwogICAgICBlbHNlIGlmIChfX3MgJiYgX19uKQogewoKCgoKCgogICBfTV9kZXN0cm95X2ludGVy bmFsX2J1ZmZlcigpOwoKCiAgIHRoaXMtPl9NX2J1ZiA9IF9fczsKICAgdGhpcy0+X01fYnVmX3Np emUgPSBfX247CiAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiB9CiAgICAgIF9NX2xhc3Rfb3Zl cmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9f d2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewogICAgICBwb3NfdHlwZSBfX3Jl dCA9IHBvc190eXBlKG9mZl90eXBlKC0xKSk7CiAgICAgIGNvbnN0IGJvb2wgX190ZXN0aW4gPSAo aW9zX2Jhc2U6OmluICYgdGhpcy0+X01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKICAgICAgY29uc3Qg Ym9vbCBfX3Rlc3RvdXQgPSAoaW9zX2Jhc2U6Om91dCAmIHRoaXMtPl9NX21vZGUgJiBfX21vZGUp ICE9IDA7CiAgICAgIGNvbnN0IGJvb2wgX190ZXN0c3luYyA9IHRoaXMtPl9NX2J1Zl9zaXplIDw9 IDE7CgogICAgICBpbnQgX193aWR0aCA9IDA7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jb2RlY3Z0 X3R5cGU+KHRoaXMtPl9NX2J1Zl9sb2NhbGUpKQogICBfX3dpZHRoID0gdXNlX2ZhY2V0PF9fY29k ZWN2dF90eXBlPih0aGlzLT5fTV9idWZfbG9jYWxlKS5lbmNvZGluZygpOwogICAgICBpZiAoX193 aWR0aCA8IDApCiBfX3dpZHRoID0gMDsKCiAgICAgIGNvbnN0IGJvb2wgX190ZXN0ZmFpbCA9IF9f b2ZmICE9IDAgJiYgX193aWR0aCA8PSAwOwogICAgICBpZiAodGhpcy0+aXNfb3BlbigpICYmICFf X3Rlc3RmYWlsICYmIChfX3Rlc3RpbiB8fCBfX3Rlc3RvdXQpKQogewoKICAgX01fZGVzdHJveV9w YmFjaygpOwoKICAgaWYgKF9fd2F5ICE9IGlvc19iYXNlOjpjdXIgfHwgX19vZmYgIT0gMCkKICAg ICB7CiAgICAgICBvZmZfdHlwZSBfX2NvbXB1dGVkX29mZiA9IF9fd2lkdGggKiBfX29mZjsKCiAg ICAgICBjb25zdCBib29sIF9fdGVzdGdldCA9IHRoaXMtPl9NX2luX2JlZyA8IHRoaXMtPl9NX2lu X2VuZDsKICAgICAgIGNvbnN0IGJvb2wgX190ZXN0cHV0ID0gdGhpcy0+X01fb3V0X2JlZyA8IHRo aXMtPl9NX291dF9saW07CgoKICAgICAgIGlmIChfX3Rlc3RwdXQgfHwgX01fbGFzdF9vdmVyZmxv d2VkKQogIHsKCiAgICB0aGlzLT5zeW5jKCk7CgogICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsKICB9 CgogICAgICAgZWxzZSBpZiAoX190ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpCiAg X19jb21wdXRlZF9vZmYgKz0gdGhpcy0+X01faW5fY3VyIC0gX01fZmlsZXBvczsKCgogICAgICAg X19yZXQgPSBfTV9maWxlLnNlZWtvZmYoX19jb21wdXRlZF9vZmYsIF9fd2F5LCBfX3Rlc3RzeW5j LAogICAgICAgICAgX19tb2RlKTsKICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAg fQoKCiAgIGVsc2UKICAgICB7CiAgICAgICBwb3NfdHlwZSBfX3RtcCA9IF9NX2ZpbGUuc2Vla29m ZihfX29mZiwgaW9zX2Jhc2U6OmN1ciwKICAgICAgICAgICAgX190ZXN0c3luYywgX19tb2RlKTsK ICAgICAgIGlmIChfX3RtcCA+PSAwKQogIHsKCiAgICBfX3JldCA9IF9fdG1wOwogICAgX19yZXQg Kz0gc3RkOjptYXgodGhpcy0+X01fb3V0X2N1ciwgdGhpcy0+X01faW5fY3VyKQogICAgICAgICAg ICAgLSBfTV9maWxlcG9zOwogIH0KICAgICB9CiB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9 IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJU LCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6 CiAgICBzZWVrcG9zKHBvc190eXBlIF9fcG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQog ICAgewoKCiAgICAgIHJldHVybiB0aGlzLT5zZWVrb2ZmKG9mZl90eXBlKF9fcG9zKSwgaW9zX2Jh c2U6OmJlZywgX19tb2RlKTsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBfTV9vdXRwdXRfdW5zaGlmdCgpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAg IGNvbnN0IGJvb2wgX190ZXN0YmVnID0gdGhpcy0+X01faW5fY3VyID09IHRoaXMtPl9NX2luX2Jl ZwogICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy0+X01fb3V0X2N1ciA9PSB0aGlzLT5fTV9v dXRfYmVnOwoKICAgICAgaWYgKF9fdGVzdGJlZyAmJiB0aGlzLT5fTV9idWZfbG9jYWxlICE9IF9f bG9jKQogdGhpcy0+X01fYnVmX2xvY2FsZSA9IF9fbG9jOwoKCgoKCiAgICAgIF9NX2xhc3Rfb3Zl cmZsb3dlZCA9IGZhbHNlOwogICAgfQoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2lj X2ZpbGVidWY8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lmc3RyZWFtPGNo YXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vZnN0cmVhbTxjaGFyPjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZnN0cmVhbTxjaGFyPjsKIyA1NDggIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2ZzdHJlYW0udGNjIiAzCn0KIyA5MzAgIi9nY2Mv ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9mc3RyZWFtIiAyIDMKIyAzMyAiL2djYy9kamUv c3JjL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjdfaW8vYmFzaWNfaXN0cmVhbS9zZW50cnkvY2hh ci8zOTgzLWZzdHJlYW0uY2MiIDIKIyAxICIvZ2NjL2RqZS9zcmMvbGlic3RkYysrLXYzL3Rlc3Rz dWl0ZS90ZXN0c3VpdGVfaG9va3MuaCIgMQojIDYyICIvZ2NjL2RqZS9zcmMvbGlic3RkYysrLXYz L3Rlc3RzdWl0ZS90ZXN0c3VpdGVfaG9va3MuaCIKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9mdW5jdGV4Y2VwdC5oIiAxCiMgMzYgIi9nY2MvZGplL2J1aWxkL3Bv d2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL2Z1bmN0ZXhjZXB0LmgiCm5hbWVzcGFjZSBzdGQKewoKICB2 b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQK ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZs b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z dCBjaGFyKiBfX3MpOwp9CiMgNjMgIi9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvdGVzdHN1aXRl L3Rlc3RzdWl0ZV9ob29rcy5oIiAyCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvY2Fzc2VydCIgMQojIDQ3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv Y2Fzc2VydCIgMwoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L2djYy9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNAojIDU2ICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L2djYy9pbmNsdWRlL2Fzc2VydC5oIiAzIDQK ZXh0ZXJuIHZvaWQgX19hc3NlcnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CiMg NDkgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJw Yy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9jYXNzZXJ0IiAyIDMKIyA2NiAi L2djYy9kamUvc3JjL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvdGVzdHN1aXRlX2hvb2tzLmgiIDIK CgoKCiMgMSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9w b3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2xpc3QiIDEKIyA2NSAi L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2xpc3QiIDMKCiMgMSAiL2djYy9kamUv YnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMu My4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzYgIi9n Y2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKbmFt ZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2 b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2Fz dCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBf X3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2Rv bWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2Fy Z3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93 X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2NyAiL2djYy9kamUvYnVpbGQvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2xpc3QiIDIgMwoKCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAxIDMKIyA2NiAiL2djYy9kamUvYnVpbGQvcG93 ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2xpc3QuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoK ICBzdHJ1Y3QgX0xpc3Rfbm9kZV9iYXNlCiAgewogICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9uZXh0 OwogICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9wcmV2OwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBzdHJ1Y3QgX0xpc3Rfbm9kZSA6IHB1YmxpYyBfTGlzdF9ub2RlX2Jhc2UKICB7 CiAgICBfVHAgX01fZGF0YTsKICB9OwojIDk3ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1h aXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgc3RydWN0IF9MaXN0X2l0ZXJhdG9yX2Jhc2UKICB7 CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm ZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJh dG9yX2NhdGVnb3J5OwoKCiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9NX25vZGU7CgogICAgX0xpc3Rf aXRlcmF0b3JfYmFzZShfTGlzdF9ub2RlX2Jhc2UqIF9feCkKICAgIDogX01fbm9kZShfX3gpCiAg ICB7IH0KCiAgICBfTGlzdF9pdGVyYXRvcl9iYXNlKCkKICAgIHsgfQoKCiAgICB2b2lkCiAgICBf TV9pbmNyKCkKICAgIHsgX01fbm9kZSA9IF9NX25vZGUtPl9NX25leHQ7IH0KCgogICAgdm9pZAog ICAgX01fZGVjcigpCiAgICB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9wcmV2OyB9CgogICAgYm9v bAogICAgb3BlcmF0b3I9PShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0CiAg ICB7IHJldHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOyB9CgogICAgYm9vbAogICAgb3BlcmF0 b3IhPShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBf TV9ub2RlICE9IF9feC5fTV9ub2RlOyB9CiAgfTsKIyAxNDIgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9iaXRzL3N0bF9saXN0LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBzdHJ1Y3QgX0xpc3RfaXRlcmF0b3Ig OiBwdWJsaWMgX0xpc3RfaXRlcmF0b3JfYmFzZQogIHsKICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0 b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9U cCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOwogICAgdHlwZWRlZiBfTGlz dF9pdGVyYXRvcjxfVHAsX1JlZixfUHRyPiBfU2VsZjsKCiAgICB0eXBlZGVmIF9UcCB2YWx1ZV90 eXBlOwogICAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNl OwogICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gX05vZGU7CgogICAgX0xpc3RfaXRlcmF0b3Io X05vZGUqIF9feCkKICAgIDogX0xpc3RfaXRlcmF0b3JfYmFzZShfX3gpCiAgICB7IH0KCiAgICBf TGlzdF9pdGVyYXRvcigpCiAgICB7IH0KCiAgICBfTGlzdF9pdGVyYXRvcihjb25zdCBpdGVyYXRv ciYgX194KQogICAgOiBfTGlzdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9ub2RlKQogICAgeyB9Cgog ICAgcmVmZXJlbmNlCiAgICBvcGVyYXRvciooKSBjb25zdAogICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8X05vZGUqPihfTV9ub2RlKS0+X01fZGF0YTsgfQoKCiAgICBwb2ludGVyCiAgICBvcGVyYXRv ci0+KCkgY29uc3QKICAgIHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogICAgX1NlbGYmCiAg ICBvcGVyYXRvcisrKCkKICAgIHsKICAgICAgdGhpcy0+X01faW5jcigpOwogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogICAgX1NlbGYKICAgIG9wZXJhdG9yKysoaW50KQogICAgewogICAgICBf U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICB0aGlzLT5fTV9pbmNyKCk7CiAgICAgIHJldHVybiBf X3RtcDsKICAgIH0KCiAgICBfU2VsZiYKICAgIG9wZXJhdG9yLS0oKQogICAgewogICAgICB0aGlz LT5fTV9kZWNyKCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBfU2VsZgogICAgb3Bl cmF0b3ItLShpbnQpCiAgICB7CiAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgIHRoaXMt Pl9NX2RlY3IoKTsKICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQogIH07CiMgMjEyICIvZ2NjL2Rq ZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQu My4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KICAgIGNs YXNzIF9MaXN0X2FsbG9jX2Jhc2UKICB7CiAgcHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFtZSBf QWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAg IGFsbG9jYXRvcl90eXBlOwoKICAgIGFsbG9jYXRvcl90eXBlCiAgICBnZXRfYWxsb2NhdG9yKCkg Y29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgICBfTGlzdF9hbGxvY19iYXNl KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9fYSkK ICAgIHsgfQoKICBwcm90ZWN0ZWQ6CiAgICBfTGlzdF9ub2RlPF9UcD4qCiAgICBfTV9nZXRfbm9k ZSgpCiAgICB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQoKICAgIHZv aWQKICAgIF9NX3B1dF9ub2RlKF9MaXN0X25vZGU8X1RwPiogX19wKQogICAgeyBfTV9ub2RlX2Fs bG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KIyAyNDcgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9iaXRzL3N0bF9saXN0LmgiIDMKICAgIHR5cGVuYW1lIF9BbGxvY190cmFp dHM8X0xpc3Rfbm9kZTxfVHA+LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAg ICAgIF9NX25vZGVfYWxsb2NhdG9yOwoKICAgIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKICB9 OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgY2xh c3MgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+CiAgewogIHB1YmxpYzoK ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxv Y2F0b3JfdHlwZQogICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKCiAgICBhbGxvY2F0b3JfdHlw ZQogICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0K CiAgICBfTGlzdF9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIHsgfQoKICBw cm90ZWN0ZWQ6CgoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlzdF9ub2Rl PF9UcD4sIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgICBfQWxsb2NfdHlwZTsK CiAgICBfTGlzdF9ub2RlPF9UcD4qCiAgICBfTV9nZXRfbm9kZSgpCiAgICB7IHJldHVybiBfQWxs b2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KCiAgICB2b2lkCiAgICBfTV9wdXRfbm9kZShfTGlzdF9u b2RlPF9UcD4qIF9fcCkKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQoK ICAgIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKICB9OwoKCgoKCgoKICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfTGlzdF9iYXNlCiAgICA6IHB1 YmxpYyBfTGlzdF9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogIHsK ICBwdWJsaWM6CiAgICB0eXBlZGVmIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2lu c3RhbmNlbGVzcz4KICAgICAgICAgICAgX0Jhc2U7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNl OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICBfTGlzdF9iYXNlKGNvbnN0IGFs bG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSkKICAgIHsKICAgICAgdGhpcy0+X01f bm9kZSA9IF9NX2dldF9ub2RlKCk7CiAgICAgIHRoaXMtPl9NX25vZGUtPl9NX25leHQgPSB0aGlz LT5fTV9ub2RlOwogICAgICB0aGlzLT5fTV9ub2RlLT5fTV9wcmV2ID0gdGhpcy0+X01fbm9kZTsK ICAgIH0KCgogICAgfl9MaXN0X2Jhc2UoKQogICAgewogICAgICBfX2NsZWFyKCk7CiAgICAgIF9N X3B1dF9ub2RlKHRoaXMtPl9NX25vZGUpOwogICAgfQoKICAgIHZvaWQKICAgIF9fY2xlYXIoKTsK ICB9OwojIDM2NSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQy OC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2xp c3QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2Nh dG9yPF9UcD4gPgogICAgY2xhc3MgbGlzdCA6IHByb3RlY3RlZCBfTGlzdF9iYXNlPF9UcCwgX0Fs bG9jPgogIHsKCiAgIAoKICAgIHR5cGVkZWYgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7 CgogIHB1YmxpYzoKICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHZhbHVl X3R5cGUqIHBvaW50ZXI7CiAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50 ZXI7CiAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJhdG9yOwog ICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25z dF9pdGVyYXRvcjsKICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJh dG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRl cmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHZhbHVlX3R5cGUm IHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNl OwogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm ZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUg YWxsb2NhdG9yX3R5cGU7CgogIHByb3RlY3RlZDoKCiAgICB0eXBlZGVmIF9MaXN0X25vZGU8X1Rw PiBfTm9kZTsKCgoKCgoKCiAgICB1c2luZyBfQmFzZTo6X01fbm9kZTsKICAgIHVzaW5nIF9CYXNl OjpfTV9wdXRfbm9kZTsKICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKIyA0MDggIi9nY2Mv ZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4 NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9saXN0LmgiIDMKICAgIF9Ob2Rl KgogICAgX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgewogICAgICBf Tm9kZSogX19wID0gX01fZ2V0X25vZGUoKTsKICAgICAgdHJ5IHsKICAgICAgICBfQ29uc3RydWN0 KCZfX3AtPl9NX2RhdGEsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICB7CiAg ICAgICAgX01fcHV0X25vZGUoX19wKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogICAgICByZXR1 cm4gX19wOwogICAgfQoKCgoKCgoKICAgIF9Ob2RlKgogICAgX01fY3JlYXRlX25vZGUoKQogICAg ewogICAgICBfTm9kZSogX19wID0gX01fZ2V0X25vZGUoKTsKICAgICAgdHJ5IHsKICAgICAgICBf Q29uc3RydWN0KCZfX3AtPl9NX2RhdGEpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAg ewogICAgICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgICAg cmV0dXJuIF9fcDsKICAgIH0KCiAgcHVibGljOgoKCgoKCiAgICBleHBsaWNpdAogICAgbGlzdChj b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2Uo X19hKSB7IH0KIyA0NjEgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAw MzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0 bF9saXN0LmgiIDMKICAgIGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192 YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl KCkpCiAgICAgIDogX0Jhc2UoX19hKQogICAgICB7IHRoaXMtPmluc2VydChiZWdpbigpLCBfX24s IF9fdmFsdWUpOyB9CiMgNDczICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0 cy9zdGxfbGlzdC5oIiAzCiAgICBleHBsaWNpdAogICAgbGlzdChzaXplX3R5cGUgX19uKQogICAg ICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIHsgdGhpcy0+aW5zZXJ0KGJlZ2luKCks IF9fbiwgdmFsdWVfdHlwZSgpKTsgfQojIDQ4NSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0t YWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9p bmNsdWRlL2JpdHMvc3RsX2xpc3QuaCIgMwogICAgbGlzdChjb25zdCBsaXN0JiBfX3gpCiAgICAg IDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSkKICAgICAgeyB0aGlzLT5pbnNlcnQoYmVnaW4o KSwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7IH0KIyA1MDIgIi9nY2MvZGplL2J1aWxkL3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRj KystdjMvaW5jbHVkZS9iaXRzL3N0bF9saXN0LmgiIDMKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXJhdG9yPgogICAgICBsaXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxs b2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAgIHsgdGhpcy0+aW5zZXJ0KGJl Z2luKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCgoKCgoKICAgIH5saXN0KCkgeyB9CiMgNTIyICIv Z2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJt LWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgICBs aXN0JgogICAgb3BlcmF0b3I9KGNvbnN0IGxpc3QmIF9feCk7CiMgNTM1ICIvZ2NjL2RqZS9idWls ZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAv bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lkCiAgICBhc3Np Z24oc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpIHsgX01fZmlsbF9hc3Np Z24oX19uLCBfX3ZhbCk7IH0KIyA1NTAgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQu My4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVk ZS9iaXRzL3N0bF9saXN0LmgiIDMKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9y PgogICAgICB2b2lkCiAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QpCiAgICAgIHsKCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50 ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgX01fYXNz aWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICB9CgoKICAg IGFsbG9jYXRvcl90eXBlCiAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6 OmdldF9hbGxvY2F0b3IoKTsgfQoKCgoKCgogICAgaXRlcmF0b3IKICAgIGJlZ2luKCkgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8X05vZGUqPih0aGlzLT5fTV9ub2RlLT5fTV9uZXh0KTsgfQoKCgoKCiAg ICBjb25zdF9pdGVyYXRvcgogICAgYmVnaW4oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxf Tm9kZSo+KHRoaXMtPl9NX25vZGUtPl9NX25leHQpOyB9CgoKCgoKICAgIGl0ZXJhdG9yCiAgICBl bmQoKSB7IHJldHVybiB0aGlzLT5fTV9ub2RlOyB9CgoKCgoKICAgIGNvbnN0X2l0ZXJhdG9yCiAg ICBlbmQoKSBjb25zdCB7IHJldHVybiB0aGlzLT5fTV9ub2RlOyB9CgoKCgoKICAgIHJldmVyc2Vf aXRlcmF0b3IKICAgIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9 CgoKCgoKICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0 dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKCiAgICByZXZlcnNlX2l0 ZXJhdG9yCiAgICByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoK CgoKCgogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVuZCgpIGNvbnN0CiAgICB7IHJl dHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgoKCgoKICAgIGJvb2wKICAg IGVtcHR5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+X01fbm9kZS0+X01fbmV4dCA9PSB0aGlzLT5f TV9ub2RlOyB9CgoKICAgIHNpemVfdHlwZQogICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6 ZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCkpOyB9CgoKICAgIHNpemVfdHlwZQogICAgbWF4X3NpemUo KSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiMgNjQ4ICIvZ2NjL2RqZS9idWlsZC9w b3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGli c3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lkCiAgICByZXNpemUo c2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiMgNjYwICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lk CiAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgdGhpcy0+cmVzaXplKF9fbmV3X3Np emUsIHZhbHVlX3R5cGUoKSk7IH0KCgoKCgoKICAgIHJlZmVyZW5jZQogICAgZnJvbnQoKSB7IHJl dHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgICBjb25zdF9yZWZlcmVuY2UKICAgIGZyb250KCkgY29u c3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KCgoKCgogICAgcmVmZXJlbmNlCiAgICBiYWNrKCkgeyBy ZXR1cm4gKigtLWVuZCgpKTsgfQoKCgoKCiAgICBjb25zdF9yZWZlcmVuY2UKICAgIGJhY2soKSBj b25zdCB7IHJldHVybiAqKC0tZW5kKCkpOyB9CiMgNzAyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBj LWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lkCiAgICBwdXNoX2Zyb250KGNv bnN0IHZhbHVlX3R5cGUmIF9feCkgeyB0aGlzLT5pbnNlcnQoYmVnaW4oKSwgX194KTsgfQojIDcx NiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBj LWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2xpc3QuaCIgMwog ICAgdm9pZAogICAgcG9wX2Zyb250KCkgeyB0aGlzLT5lcmFzZShiZWdpbigpKTsgfQojIDcyOCAi L2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAzMDQyOC9wb3dlcnBjLWli bS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2xpc3QuaCIgMwogICAg dm9pZAogICAgcHVzaF9iYWNrKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgeyB0aGlzLT5pbnNlcnQo ZW5kKCksIF9feCk7IH0KIyA3NDIgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4z LjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9i aXRzL3N0bF9saXN0LmgiIDMKICAgIHZvaWQKICAgIHBvcF9iYWNrKCkKICAgIHsKICAgICAgaXRl cmF0b3IgX190bXAgPSBlbmQoKTsKICAgICAgdGhpcy0+ZXJhc2UoLS1fX3RtcCk7CiAgICB9CiMg NzYwICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2Vy cGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAz CiAgICBpdGVyYXRvcgogICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVl X3R5cGUmIF9feCk7CiMgNzc1ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4w LTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0 cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lkCiAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVf dHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19w b3MsIF9fbiwgX194KTsgfQojIDc5MSAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl L2JpdHMvc3RsX2xpc3QuaCIgMwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+ CiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBf X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKCiAgICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7 CiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRl Z3JhbCgpKTsKICAgICAgfQojIDgxNiAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4z LjMuMC0yMDAzMDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRl L2JpdHMvc3RsX2xpc3QuaCIgMwogICAgaXRlcmF0b3IKICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9z aXRpb24pOwojIDgzOCAiL2djYy9kamUvYnVpbGQvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC0yMDAz MDQyOC9wb3dlcnBjLWlibS1haXg0LjMuMy4wL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3Rs X2xpc3QuaCIgMwogICAgaXRlcmF0b3IKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJh dG9yIF9fbGFzdCkKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICAg IGVyYXNlKF9fZmlyc3QrKyk7CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgODU1ICIvZ2Nj L2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFp eDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lk CiAgICBzd2FwKGxpc3QmIF9feCkgeyBzdGQ6OnN3YXAodGhpcy0+X01fbm9kZSwgX194Ll9NX25v ZGUpOyB9CgoKCgoKCgogICAgdm9pZAogICAgY2xlYXIoKSB7IF9CYXNlOjpfX2NsZWFyKCk7IH0K CgoKCgogICAgdm9pZAogICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCkK ICAgIHsKICAgICAgaWYgKCFfX3guZW1wdHkoKSkKICAgICAgICB0aGlzLT5fTV90cmFuc2Zlcihf X3Bvc2l0aW9uLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgIH0KCgoKCiAgICB2b2lkCiAg ICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9faSkKICAgIHsK ICAgICAgaXRlcmF0b3IgX19qID0gX19pOwogICAgICArK19fajsKICAgICAgaWYgKF9fcG9zaXRp b24gPT0gX19pIHx8IF9fcG9zaXRpb24gPT0gX19qKSByZXR1cm47CiAgICAgIHRoaXMtPl9NX3Ry YW5zZmVyKF9fcG9zaXRpb24sIF9faSwgX19qKTsKICAgIH0KCgoKCiAgICB2b2lkCiAgICBzcGxp Y2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9y IF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIHRoaXMt Pl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgoKCgogICAg dm9pZAogICAgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSk7CgoKCgogICAgdGVtcGxhdGU8dHlw ZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgdm9pZAogICAgICByZW1vdmVfaWYoX1ByZWRpY2F0ZSk7 CgoKCgogICAgdm9pZAogICAgdW5pcXVlKCk7CgoKCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp bmFyeVByZWRpY2F0ZT4KICAgICAgdm9pZAogICAgICB1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSk7 CgoKCgogICAgdm9pZAogICAgbWVyZ2UobGlzdCYgX194KTsKCgoKCiAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgogICAgICB2b2lkCiAgICAgIG1lcmdlKGxpc3QmLCBf U3RyaWN0V2Vha09yZGVyaW5nKTsKCgoKCiAgICB2b2lkCiAgICByZXZlcnNlKCkgeyBfX0xpc3Rf YmFzZV9yZXZlcnNlKHRoaXMtPl9NX25vZGUpOyB9CgoKCgogICAgdm9pZAogICAgc29ydCgpOwoK CgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgICAgIHZvaWQK ICAgICAgc29ydChfU3RyaWN0V2Vha09yZGVyaW5nKTsKCiAgcHJvdGVjdGVkOgoKCgogICAgdGVt cGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CiAgICAgIHZvaWQKICAgICAgX01fYXNzaWduX2Rpc3Bh dGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgICB7CiAg ICAgICAgX01fZmlsbF9hc3NpZ24oc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24pLAogICAgICAg ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+KF9fdmFsKSk7CiAgICAgIH0K CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgdm9pZAogICAgICBfTV9h c3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19m YWxzZV90eXBlKTsKCgoKICAgIHZvaWQKICAgIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24s IGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKTsKCgoKCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu dGVnZXI+CiAgICAgIHZvaWQKICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z LCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f dHJ1ZV90eXBlKQogICAgICB7CiAgICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIHN0YXRpY19j YXN0PHNpemVfdHlwZT4oX19uKSwKICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2 YWx1ZV90eXBlPihfX3gpKTsKICAgICAgfQoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyYXRvcj4KICAgICAgdm9pZAogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19w b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp CiAgICAgIHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg ICAgICAgICBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgfQoKCgogICAgdm9pZAogICAg X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVl X3R5cGUmIF9feCkKICAgIHsKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbikKICAgICAgICBp bnNlcnQoX19wb3MsIF9feCk7CiAgICB9CgoKCiAgICB2b2lkCiAgICBfTV90cmFuc2ZlcihpdGVy YXRvciBfX3Bvc2l0aW9uLCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7 CiAgICAgIGlmIChfX3Bvc2l0aW9uICE9IF9fbGFzdCkgewoKICAgICAgICBfX2xhc3QuX01fbm9k ZS0+X01fcHJldi0+X01fbmV4dCA9IF9fcG9zaXRpb24uX01fbm9kZTsKICAgICAgICBfX2ZpcnN0 Ll9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBfX2xhc3QuX01fbm9kZTsKICAgICAgICBfX3Bv c2l0aW9uLl9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBfX2ZpcnN0Ll9NX25vZGU7CgoKICAg ICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fdG1wID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2 OwogICAgICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldiA9IF9fbGFzdC5fTV9ub2RlLT5f TV9wcmV2OwogICAgICAgIF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2ID0gX19maXJzdC5fTV9ub2Rl LT5fTV9wcmV2OwogICAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAg ICB9CiAgICB9CiAgfTsKIyAxMDQ0ICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMu My4wLTIwMDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUv Yml0cy9zdGxfbGlzdC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs b2M+CiAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYg X194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAg ICAgIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMSA9IF9feC5lbmQoKTsKICAgICAgY29uc3RfaXRlcmF0 b3IgX19lbmQyID0gX195LmVuZCgpOwoKICAgICAgY29uc3RfaXRlcmF0b3IgX19pMSA9IF9feC5i ZWdpbigpOwogICAgICBjb25zdF9pdGVyYXRvciBfX2kyID0gX195LmJlZ2luKCk7CiAgICAgIHdo aWxlIChfX2kxICE9IF9fZW5kMSAmJiBfX2kyICE9IF9fZW5kMiAmJiAqX19pMSA9PSAqX19pMikg ewogICAgICAgICsrX19pMTsKICAgICAgICArK19faTI7CiAgICAgIH0KICAgICAgcmV0dXJuIF9f aTEgPT0gX19lbmQxICYmIF9faTIgPT0gX19lbmQyOwogICAgfQojIDEwNzIgIi9nY2MvZGplL2J1 aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMu MC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9saXN0LmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwo Y29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kp CiAgICB7CiAgICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwg X194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2lu KCksIF9feS5lbmQoKSk7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGxpc3Q8X1RwLF9B bGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShf X3ggPT0gX195KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9f eCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi b29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlz dDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj49KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0Fs bG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGxpc3Q8 X1RwLCBfQWxsb2M+JiBfX3gsIGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3kpCiAgICB7IF9feC5zd2Fw KF9feSk7IH0KfQojIDcyICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIw MDMwNDI4L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvbGlzdCIg MiAzCgoKIyAxICIvZ2NjL2RqZS9idWlsZC9wb3dlcnBjLWlibS1haXg0LjMuMy4wLTIwMDMwNDI4 L3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9saXN0LnRj YyIgMSAzCiMgNjQgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0 MjgvcG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xpc3Qu dGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg X0FsbG9jPgogICAgdm9pZAogICAgX0xpc3RfYmFzZTxfVHAsX0FsbG9jPjo6CiAgICBfX2NsZWFy KCkKICAgIHsKICAgICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gX05vZGU7CiAgICAgIF9Ob2Rl KiBfX2N1ciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4odGhpcy0+X01fbm9kZS0+X01fbmV4dCk7CiAg ICAgIHdoaWxlIChfX2N1ciAhPSB0aGlzLT5fTV9ub2RlKQogICAgICB7CiAgICAgICAgX05vZGUq IF9fdG1wID0gX19jdXI7CiAgICAgICAgX19jdXIgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fY3Vy LT5fTV9uZXh0KTsKICAgICAgICBfRGVzdHJveSgmX190bXAtPl9NX2RhdGEpOwogICAgICAgIF9N X3B1dF9ub2RlKF9fdG1wKTsKICAgICAgfQogICAgICB0aGlzLT5fTV9ub2RlLT5fTV9uZXh0ID0g dGhpcy0+X01fbm9kZTsKICAgICAgdGhpcy0+X01fbm9kZS0+X01fcHJldiA9IHRoaXMtPl9NX25v ZGU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg dHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6aXRlcmF0b3IKICAgIGxpc3Q8X1RwLF9BbGxvYz46 OgogICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkK ICAgIHsKICAgICAgX05vZGUqIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194KTsKICAgICAgX190 bXAtPl9NX25leHQgPSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICAgIF9fdG1wLT5fTV9wcmV2ID0g X19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9N X3ByZXYtPl9NX25leHQgPSBfX3RtcDsKICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2 ID0gX190bXA7CiAgICAgIHJldHVybiBfX3RtcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+OjppdGVy YXRvcgogICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9u KQogICAgewogICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fbmV4dF9ub2RlID0gX19wb3NpdGlvbi5f TV9ub2RlLT5fTV9uZXh0OwogICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fcHJldl9ub2RlID0gX19w b3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfTm9kZSogX19uID0gc3RhdGljX2Nhc3Q8 X05vZGUqPihfX3Bvc2l0aW9uLl9NX25vZGUpOwogICAgICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9 IF9fbmV4dF9ub2RlOwogICAgICBfX25leHRfbm9kZS0+X01fcHJldiA9IF9fcHJldl9ub2RlOwog ICAgICBfRGVzdHJveSgmX19uLT5fTV9kYXRhKTsKICAgICAgX01fcHV0X25vZGUoX19uKTsKICAg ICAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRpY19jYXN0PF9Ob2RlKj4oX19uZXh0X25vZGUpKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAg ICBsaXN0PF9UcCxfQWxsb2M+OjoKICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29u c3QgdmFsdWVfdHlwZSYgX194KQogICAgewogICAgICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwog ICAgICBzaXplX3R5cGUgX19sZW4gPSAwOwogICAgICBmb3IgKCA7IF9faSAhPSBlbmQoKSAmJiBf X2xlbiA8IF9fbmV3X3NpemU7ICsrX19pLCArK19fbGVuKQogICAgICAgIDsKICAgICAgaWYgKF9f bGVuID09IF9fbmV3X3NpemUpCiAgICAgICAgZXJhc2UoX19pLCBlbmQoKSk7CiAgICAgIGVsc2UK ICAgICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBfX2xlbiwgX194KTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBsaXN0PF9UcCxfQWxs b2M+JgogICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3QgbGlzdCYgX194 KQogICAgewogICAgICBpZiAodGhpcyAhPSAmX194KQogICAgICB7CiAgICAgICAgaXRlcmF0b3Ig X19maXJzdDEgPSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKICAg ICAgICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogICAgICAgIGNvbnN0 X2l0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICAgICpfX2ZpcnN0MSsrID0g Kl9fZmlyc3QyKys7CiAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICBl cmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAgICAgICAgZWxzZQogICAgICAgICAgaW5zZXJ0KF9f bGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAog ICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBj b25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkKICAgIHsKICAgICAgaXRlcmF0b3IgX19pID0gYmVnaW4o KTsKICAgICAgZm9yICggOyBfX2kgIT0gZW5kKCkgJiYgX19uID4gMDsgKytfX2ksIC0tX19uKQog ICAgICAgICpfX2kgPSBfX3ZhbDsKICAgICAgaWYgKF9fbiA+IDApCiAgICAgICAgaW5zZXJ0KGVu ZCgpLCBfX24sIF9fdmFsKTsKICAgICAgZWxzZQogICAgICAgIGVyYXNlKF9faSwgZW5kKCkpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBs YXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICB2b2lkCiAgICAgIGxpc3Q8X1RwLF9BbGxv Yz46OgogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0MiwgX0lucHV0 SXRlciBfX2xhc3QyLCBfX2ZhbHNlX3R5cGUpCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX2Zp cnN0MSA9IGJlZ2luKCk7CiAgICAgICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICAg IGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7ICsrX19m aXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgICAqX19maXJzdDEgPSAqX19maXJzdDI7CiAgICAg ICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICBlcmFzZShfX2ZpcnN0MSwgX19s YXN0MSk7CiAgICAgICAgZWxzZQogICAgICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBf X2xhc3QyKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIHZvaWQKICAgIGxpc3Q8X1RwLF9BbGxvYz46OgogICAgcmVtb3ZlKGNvbnN0IHZhbHVl X3R5cGUmIF9fdmFsdWUpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwog ICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s YXN0KQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgICAr K19fbmV4dDsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgICAgIGVyYXNl KF9fZmlyc3QpOwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBsaXN0PF9U cCxfQWxsb2M+OjoKICAgIHVuaXF1ZSgpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBi ZWdpbigpOwogICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICAgICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KSByZXR1cm47CiAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAg IHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAgICAgIHsKICAgICAgICBpZiAoKl9fZmlyc3Qg PT0gKl9fbmV4dCkKICAgICAgICAgIGVyYXNlKF9fbmV4dCk7CiAgICAgICAgZWxzZQogICAgICAg ICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgICBfX25leHQgPSBfX2ZpcnN0OwogICAgICB9CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAog ICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICBtZXJnZShsaXN0JiBfX3gpCiAgICB7CiAgICAgIGl0 ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgp OwogICAgICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogICAgICBpdGVyYXRvciBf X2xhc3QyID0gX194LmVuZCgpOwogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf X2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAg ICAgICAgewogICAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgICAgICBf TV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKICAgICAgICAgIF9fZmly c3QyID0gX19uZXh0OwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3Qx OwogICAgICBpZiAoX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBfTV90cmFuc2ZlcihfX2xh c3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICB9CgoKICBpbmxpbmUgdm9pZAogIF9fTGlzdF9i YXNlX3JldmVyc2UoX0xpc3Rfbm9kZV9iYXNlKiBfX3ApCiAgewogICAgX0xpc3Rfbm9kZV9iYXNl KiBfX3RtcCA9IF9fcDsKICAgIGRvIHsKICAgICAgc3RkOjpzd2FwKF9fdG1wLT5fTV9uZXh0LCBf X3RtcC0+X01fcHJldik7CiAgICAgIF9fdG1wID0gX190bXAtPl9NX3ByZXY7CiAgICB9IHdoaWxl IChfX3RtcCAhPSBfX3ApOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf QWxsb2M+CiAgICB2b2lkCiAgICBsaXN0PF9UcCxfQWxsb2M+OjoKICAgIHNvcnQoKQogICAgewoK ICAgICAgaWYgKHRoaXMtPl9NX25vZGUtPl9NX25leHQgIT0gdGhpcy0+X01fbm9kZQogICAmJiB0 aGlzLT5fTV9ub2RlLT5fTV9uZXh0LT5fTV9uZXh0ICE9IHRoaXMtPl9NX25vZGUpCiAgICAgIHsK ICAgICAgICBsaXN0IF9fY2Fycnk7CiAgICAgICAgbGlzdCBfX2NvdW50ZXJbNjRdOwogICAgICAg IGludCBfX2ZpbGwgPSAwOwogICAgICAgIHdoaWxlICghZW1wdHkoKSkKICAgICAgICB7CiAgICAg ICAgICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAg ICAgICAgIGludCBfX2kgPSAwOwogICAgICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2Nv dW50ZXJbX19pXS5lbXB0eSgpKQogICAgICAgICAgewogICAgICAgICAgICBfX2NvdW50ZXJbX19p XS5tZXJnZShfX2NhcnJ5KTsKICAgICAgICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2kr K10pOwogICAgICAgICAgfQogICAgICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsK ICAgICAgICAgIGlmIChfX2kgPT0gX19maWxsKSArK19fZmlsbDsKICAgICAgICB9CgogICAgICAg IGZvciAoaW50IF9faSA9IDE7IF9faSA8IF9fZmlsbDsgKytfX2kpCiAgICAgICAgICBfX2NvdW50 ZXJbX19pXS5tZXJnZShfX2NvdW50ZXJbX19pLTFdKTsKICAgICAgICBzd2FwKF9fY291bnRlcltf X2ZpbGwtMV0pOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICAgIHZvaWQK ICAgICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJl ZCkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogICAgICAgIGl0 ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkK ICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgICAg KytfX25leHQ7CiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgZXJhc2UoX19maXJzdCk7 CiAgICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICAgIH0KICAgICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBf QmluYXJ5UHJlZGljYXRlPgogICAgICB2b2lkCiAgICAgIGxpc3Q8X1RwLF9BbGxvYz46OgogICAg ICB1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgICB7CiAgICAgICAg aXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgICAgaXRlcmF0b3IgX19sYXN0ID0gZW5k KCk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgICAgaXRlcmF0 b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQog ICAgICAgIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkK ICAgICAgICAgICAgZXJhc2UoX19uZXh0KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19m aXJzdCA9IF9fbmV4dDsKICAgICAgICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgICAgfQogICAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxh dGUgPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgICAgIHZvaWQKICAgICAgbGlzdDxf VHAsX0FsbG9jPjo6CiAgICAgIG1lcmdlKGxpc3QmIF9feCwgX1N0cmljdFdlYWtPcmRlcmluZyBf X2NvbXApCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgICAg ICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QyID0g X194LmJlZ2luKCk7CiAgICAgICAgaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKICAgICAg ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAg ICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICB7CiAgICAg ICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3QyOwogICAgICAgICAgICBfTV90cmFuc2Zl cihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKICAgICAgICAgICAgX19maXJzdDIgPSBf X25leHQ7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICsrX19maXJzdDE7 CiAgICAgICAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpIF9NX3RyYW5zZmVyKF9fbGFzdDEsIF9f Zmlyc3QyLCBfX2xhc3QyKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgog ICAgdm9pZAogICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICBzb3J0KF9TdHJpY3RXZWFrT3JkZXJp bmcgX19jb21wKQogICAgewoKICAgICAgaWYgKHRoaXMtPl9NX25vZGUtPl9NX25leHQgIT0gdGhp cy0+X01fbm9kZSAmJgogICB0aGlzLT5fTV9ub2RlLT5fTV9uZXh0LT5fTV9uZXh0ICE9IHRoaXMt Pl9NX25vZGUpCiAgICAgIHsKICAgICAgICBsaXN0IF9fY2Fycnk7CiAgICAgICAgbGlzdCBfX2Nv dW50ZXJbNjRdOwogICAgICAgIGludCBfX2ZpbGwgPSAwOwogICAgICAgIHdoaWxlICghZW1wdHko KSkKICAgICAgICB7CiAgICAgICAgICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCksICp0 aGlzLCBiZWdpbigpKTsKICAgICAgICAgIGludCBfX2kgPSAwOwogICAgICAgICAgd2hpbGUoX19p IDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKQogICAgICAgICAgewogICAgICAg ICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NhcnJ5LCBfX2NvbXApOwogICAgICAgICAgICBf X2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAgICAgICAgICB9CiAgICAgICAgICBfX2Nh cnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwogICAgICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsr X19maWxsOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxs OyArK19faSkKICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0s IF9fY29tcCk7CiAgICAgICAgc3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsKICAgICAgfQogICAg fQp9CiMgNzUgIi9nY2MvZGplL2J1aWxkL3Bvd2VycGMtaWJtLWFpeDQuMy4zLjAtMjAwMzA0Mjgv cG93ZXJwYy1pYm0tYWl4NC4zLjMuMC9saWJzdGRjKystdjMvaW5jbHVkZS9saXN0IiAyIDMKIyA3 MSAiL2djYy9kamUvc3JjL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvdGVzdHN1aXRlX2hvb2tzLmgi IDIKCgpuYW1lc3BhY2UgX19nbnVfY3h4X3Rlc3QKewojIDg2ICIvZ2NjL2RqZS9zcmMvbGlic3Rk YysrLXYzL3Rlc3RzdWl0ZS90ZXN0c3VpdGVfaG9va3MuaCIKICBleHRlcm4gdm9pZAogIHNldF9t ZW1vcnlfbGltaXRzKGZsb2F0IF9fc2l6ZSA9IDE2LjApOwoKCgogIHZvaWQKICB2ZXJpZnlfZGVt YW5nbGUoY29uc3QgY2hhciogbWFuZ2xlZCwgY29uc3QgY2hhciogd2FudGVkKTsKCgoKCgogIHR5 cGVkZWYgdm9pZCAoKnRlc3RfZnVuYykgKHZvaWQpOwogIHR5cGVkZWYgc3RkOjpsaXN0PHRlc3Rf ZnVuYz4gZnVuY19jYWxsYmFjazsKCgogIHZvaWQKICBydW5fdGVzdHNfd3JhcHBlZF9sb2NhbGUo Y29uc3QgY2hhciosIGNvbnN0IGZ1bmNfY2FsbGJhY2smKTsKCgogIHZvaWQKICBydW5fdGVzdHNf d3JhcHBlZF9lbnYoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBmdW5jX2NhbGxiYWNr Jik7CgoKICBzdGQ6OmxvY2FsZQogIHRyeV9uYW1lZF9sb2NhbGUoY29uc3QgY2hhciogbmFtZSk7 CgoKICBzdHJ1Y3QgcG9kX2NoYXIKICB7CiAgICB1bnNpZ25lZCBjaGFyIGM7CiAgfTsKCiAgc3Ry dWN0IHBvZF9pbnQKICB7CiAgICBpbnQgaTsKICB9OwoKICBzdHJ1Y3QgcG9kX3Vuc2lnbmVkX2lu dAogIHsKICAgIHVuc2lnbmVkIGludCBpOwogIH07CgogIHN0cnVjdCBwb2RfbG9uZwogIHsKICAg IHVuc2lnbmVkIGxvbmcgaTsKICB9OwoKICBzdHJ1Y3Qgc3RhdGUKICB7CiAgICB1bnNpZ25lZCBs b25nIGw7CiAgICB1bnNpZ25lZCBsb25nIGwyOwogIH07CgoKICBzdHJ1Y3QgY291bnRlcgogIHsK CgoKICAgIHR5cGVkZWYgc2lnbmVkIGludCBzaXplX3R5cGU7CiAgICBzdGF0aWMgc2l6ZV90eXBl IGNvdW50OwogICAgY291bnRlcigpIHsgKytjb3VudDsgfQogICAgY291bnRlciAoY29uc3QgY291 bnRlciYpIHsgKytjb3VudDsgfQogICAgfmNvdW50ZXIoKSB7IC0tY291bnQ7IH0KICB9OwoKCgoK CiAgY2xhc3MgY29weV9jb25zdHJ1Y3RvcgogIHsKICBwdWJsaWM6CiAgICBzdGF0aWMgdW5zaWdu ZWQgaW50CiAgICBjb3VudCgpIHsgcmV0dXJuIGNvdW50XzsgfQoKICAgIHN0YXRpYyB2b2lkCiAg ICBtYXJrX2NhbGwoKQogICAgewogICAgICBjb3VudF8rKzsKICAgICAgaWYgKGNvdW50XyA9PSB0 aHJvd19vbl8pCiB0aHJvdyAiY29weSBjb25zdHJ1Y3RvciBleGNlcHRpb24iOwogICAgfQoKICAg IHN0YXRpYyB2b2lkCiAgICByZXNldCgpCiAgICB7CiAgICAgIGNvdW50XyA9IDA7CiAgICAgIHRo cm93X29uXyA9IDA7CiAgICB9CgogICAgc3RhdGljIHZvaWQKICAgIHRocm93X29uKHVuc2lnbmVk IGludCBjb3VudCkgeyB0aHJvd19vbl8gPSBjb3VudDsgfQoKICBwcml2YXRlOgogICAgc3RhdGlj IHVuc2lnbmVkIGludCBjb3VudF87CiAgICBzdGF0aWMgdW5zaWduZWQgaW50IHRocm93X29uXzsK ICB9OwoKCgogIGNsYXNzIGFzc2lnbm1lbnRfb3BlcmF0b3IKICB7CiAgcHVibGljOgogICAgc3Rh dGljIHVuc2lnbmVkIGludAogICAgY291bnQoKSB7IHJldHVybiBjb3VudF87IH0KCiAgICBzdGF0 aWMgdm9pZAogICAgbWFya19jYWxsKCkKICAgIHsKICAgICAgY291bnRfKys7CiAgICAgIGlmIChj b3VudF8gPT0gdGhyb3dfb25fKQogdGhyb3cgImFzc2lnbm1lbnQgb3BlcmF0b3IgZXhjZXB0aW9u IjsKICAgIH0KCiAgICBzdGF0aWMgdm9pZAogICAgcmVzZXQoKQogICAgewogICAgICBjb3VudF8g PSAwOwogICAgICB0aHJvd19vbl8gPSAwOwogICAgfQoKICAgIHN0YXRpYyB2b2lkCiAgICB0aHJv d19vbih1bnNpZ25lZCBpbnQgY291bnQpIHsgdGhyb3dfb25fID0gY291bnQ7IH0KCiAgcHJpdmF0 ZToKICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRfOwogICAgc3RhdGljIHVuc2lnbmVkIGlu dCB0aHJvd19vbl87CiAgfTsKCgogIGNsYXNzIGRlc3RydWN0b3IKICB7CiAgcHVibGljOgogICAg c3RhdGljIHVuc2lnbmVkIGludAogICAgY291bnQoKSB7IHJldHVybiBfTV9jb3VudDsgfQoKICAg IHN0YXRpYyB2b2lkCiAgICBtYXJrX2NhbGwoKSB7IF9NX2NvdW50Kys7IH0KCiAgICBzdGF0aWMg dm9pZAogICAgcmVzZXQoKSB7IF9NX2NvdW50ID0gMDsgfQoKICBwcml2YXRlOgogICAgc3RhdGlj IHVuc2lnbmVkIGludCBfTV9jb3VudDsKICB9OwoKCgoKICBjbGFzcyBjb3B5X3RyYWNrZXIKICB7 CiAgcHVibGljOgoKCgogICAgY29weV90cmFja2VyKGludCBpZCA9IG5leHRfaWRfLS0sIGJvb2wg dGhyb3dfb25fY29weSA9IGZhbHNlKQogICAgOiBpZF8oaWQpICwgdGhyb3dfb25fY29weV8odGhy b3dfb25fY29weSkgeyB9CgoKCiAgICBjb3B5X3RyYWNrZXIoY29uc3QgY29weV90cmFja2VyJiBy aHMpCiAgICA6IGlkXyhyaHMuaWQoKSksIHRocm93X29uX2NvcHlfKHJocy50aHJvd19vbl9jb3B5 XykKICAgIHsKICAgICAgaWYgKHRocm93X29uX2NvcHlfKQogY29weV9jb25zdHJ1Y3Rvcjo6dGhy b3dfb24oY29weV9jb25zdHJ1Y3Rvcjo6Y291bnQoKSArIDEpOwogICAgICBjb3B5X2NvbnN0cnVj dG9yOjptYXJrX2NhbGwoKTsKICAgIH0KCgoKCgogICAgY29weV90cmFja2VyJgogICAgb3BlcmF0 b3I9KGNvbnN0IGNvcHlfdHJhY2tlciYgcmhzKQogICAgewogICAgICBpZF8gPSByaHMuaWQoKTsK ICAgICAgaWYgKHJocy50aHJvd19vbl9jb3B5XykKICAgICAgICBhc3NpZ25tZW50X29wZXJhdG9y Ojp0aHJvd19vbihhc3NpZ25tZW50X29wZXJhdG9yOjpjb3VudCgpICsgMSk7CiAgICAgIGFzc2ln bm1lbnRfb3BlcmF0b3I6Om1hcmtfY2FsbCgpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog ICAgfmNvcHlfdHJhY2tlcigpCiAgICB7IGRlc3RydWN0b3I6Om1hcmtfY2FsbCgpOyB9CgogICAg aW50CiAgICBpZCgpIGNvbnN0IHsgcmV0dXJuIGlkXzsgfQoKICBwcml2YXRlOgogICAgaW50IGlk XzsKICAgIGNvbnN0IGJvb2wgdGhyb3dfb25fY29weV87CgogIHB1YmxpYzoKICAgIHN0YXRpYyB2 b2lkCiAgICByZXNldCgpCiAgICB7CiAgICAgIGNvcHlfY29uc3RydWN0b3I6OnJlc2V0KCk7CiAg ICAgIGFzc2lnbm1lbnRfb3BlcmF0b3I6OnJlc2V0KCk7CiAgICAgIGRlc3RydWN0b3I6OnJlc2V0 KCk7CiAgICB9CgoKICAgIHN0YXRpYyBpbnQKICAgIGNvcHlDb3VudCgpCiAgICB7IHJldHVybiBj b3B5X2NvbnN0cnVjdG9yOjpjb3VudCgpOyB9CgoKICAgIHN0YXRpYyBpbnQKICAgIGR0b3JDb3Vu dCgpCiAgICB7IHJldHVybiBkZXN0cnVjdG9yOjpjb3VudCgpOyB9CgogIHByaXZhdGU6CiAgICBz dGF0aWMgaW50IG5leHRfaWRfOwogIH07CgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25z dCBjb3B5X3RyYWNrZXImIGxocywgY29uc3QgY29weV90cmFja2VyJiByaHMpCiAgeyByZXR1cm4g bGhzLmlkKCkgPT0gcmhzLmlkKCk7IH0KfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8Y2xh c3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzOwoKCiAgdGVtcGxhdGU8PgogICAgc3Ry dWN0IGNoYXJfdHJhaXRzPF9fZ251X2N4eF90ZXN0Ojpwb2RfY2hhcj4KICAgIHsKICAgICAgdHlw ZWRlZiBfX2dudV9jeHhfdGVzdDo6cG9kX2NoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9f Z251X2N4eF90ZXN0Ojpwb2RfaW50IGludF90eXBlOwogICAgICB0eXBlZGVmIGxvbmcgcG9zX3R5 cGU7CiAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBf X2dudV9jeHhfdGVzdDo6c3RhdGUgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAg IGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBz dGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlw ZSYgX19jMik7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9f YzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBh cmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBf X24pOwoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBf X3MpOwoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFy X3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpOwoKICAgICAgc3Rh dGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlw ZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5 KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAg ICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90 IF9fbiwgY2hhcl90eXBlIF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2No YXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAg ICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgYm9vbAog ICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9f YzIpOwoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpOwoKICAgICAgc3RhdGljIGlu dF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYyk7CiAgICB9Owp9CiMgMzQg Ii9nY2MvZGplL3NyYy9saWJzdGRjKystdjMvdGVzdHN1aXRlLzI3X2lvL2Jhc2ljX2lzdHJlYW0v c2VudHJ5L2NoYXIvMzk4My1mc3RyZWFtLmNjIiAyCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxh dGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPHVuc2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHR5 cGVkZWYgdW5zaWduZWQgY2hhciBjaGFyX3R5cGU7CgogICAgICB0eXBlZGVmIHVuc2lnbmVkIGxv bmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBl ZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlw ZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0 IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJv b2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp CiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg cmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29u c3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAg ICAgIHsKIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCiAgIGlmICghZXEo X19zMVtfX2ldLCBfX3MyW19faV0pKQogICAgIHJldHVybiBsdChfX3MxW19faV0sIF9fczJbX19p XSkgPyAtMSA6IDE7CiByZXR1cm4gMDsKICAgICAgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAg ICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsKIGNvbnN0IGNoYXJfdHlwZSog X19wID0gX19zOwogd2hpbGUgKF9fcCAmJiAqX19wKQogICArK19fcDsKIHJldHVybiAoX19wIC0g X19zKTsKICAgICAgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChj b25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAg ICAgIHsKIGZvciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7IHNpemVfdChfX3AgLSBfX3Mp IDwgX19uOyArK19fcCkKICAgaWYgKCpfX3AgPT0gX19hKSByZXR1cm4gX19wOwogcmV0dXJuIDA7 CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBf X3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIChj aGFyX3R5cGUqKSBtZW1tb3ZlKF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsg fQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNv bnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gKGNoYXJfdHlw ZSopIG1lbWNweShfX3MxLCBfX3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAg IHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9f biwgY2hhcl90eXBlIF9fYSkKICAgICAgewogZm9yIChjaGFyX3R5cGUqIF9fcCA9IF9fczsgX19w IDwgX19zICsgX19uOyArK19fcCkKICAgYXNzaWduKCpfX3AsIF9fYSk7CiAgICAgICAgcmV0dXJu IF9fczsKICAgICAgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUo Y29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0KCiAgICAg IHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykg eyByZXR1cm4gaW50X3R5cGUoKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5 cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJl dHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7 IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oLTEpOyB9CgogICAgICBzdGF0aWMgaW50X3R5 cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9p bnRfdHlwZShfX2MsIGVvZigpKSA/IGludF90eXBlKDApIDogX19jOyB9CiAgICB9Owp9CgoKCnZv aWQgdGVzdDAzKCkKewogIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAgYm9vbCB0ZXN0ID0gdHJ1ZTsK CgogIGJhc2ljX2lmc3RyZWFtPHVuc2lnbmVkIGNoYXI+IGlmc191YzsKICB1bnNpZ25lZCBjaGFy IGFycls2XSA9IHsgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScgfTsKCiAgdHJ5CiAgICB7CiAgICAg IGludCBpOwogICAgICBpZnNfdWMgPj4gaTsKICAgIH0KICBjYXRjaCAoYmFkX2Nhc3QmIG9iaikK ICAgIHsgfQogIGNhdGNoIChleGNlcHRpb24mIG9iaikKICAgIHsgdGVzdCA9IGZhbHNlOyB9Cgog IHRyeQogICAgewogICAgICBpZnNfdWMgPj4gYXJyOwogICAgfQogIGNhdGNoIChiYWRfY2FzdCYg b2JqKQogICAgeyB9CiAgY2F0Y2ggKGV4Y2VwdGlvbiYgb2JqKQogICAgeyB0ZXN0ID0gZmFsc2U7 IH0KCiAgdHJ5CiAgICB7CiAgICAgIGlmc191YyA+PiB3czsKICAgIH0KICBjYXRjaCAoYmFkX2Nh c3QmIG9iaikKICAgIHsgfQogIGNhdGNoIChleGNlcHRpb24mIG9iaikKICAgIHsgdGVzdCA9IGZh bHNlOyB9CgogIHRyeQogICAgewogICAgICBiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4gc191 YyhhcnIpOwogICAgICBpZnNfdWMgPj4gc191YzsKICAgIH0KICBjYXRjaCAoYmFkX2Nhc3QmIG9i aikKICAgIHsgfQogIGNhdGNoIChleGNlcHRpb24mIG9iaikKICAgIHsgdGVzdCA9IGZhbHNlOyB9 CgogICgodGVzdCkgPyAoKHZvaWQpMCkgOiBfX2Fzc2VydCgiX19FWCIsICIvZ2NjL2RqZS9zcmMv bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yN19pby9iYXNpY19pc3RyZWFtL3NlbnRyeS9jaGFyLzM5 ODMtZnN0cmVhbS5jYyIsIDE3MSkpOwp9CgoKCnRlbXBsYXRlCiAgc3RkOjpiYXNpY19zdHJpbmc8 dW5zaWduZWQgY2hhcj46OnNpemVfdHlwZQogIHN0ZDo6YmFzaWNfc3RyaW5nPHVuc2lnbmVkIGNo YXI+OjpfUmVwOjpfU19tYXhfc2l6ZTsKCnRlbXBsYXRlCiAgdW5zaWduZWQgY2hhcgogIHN0ZDo6 YmFzaWNfc3RyaW5nPHVuc2lnbmVkIGNoYXI+OjpfUmVwOjpfU190ZXJtaW5hbDsKCnRlbXBsYXRl CiAgc3RkOjpiYXNpY19maWxlYnVmPHVuc2lnbmVkIGNoYXI+OjppbnRfdHlwZQogIHN0ZDo6YmFz aWNfZmlsZWJ1Zjx1bnNpZ25lZCBjaGFyPjo6X1NfcGJhY2tfc2l6ZTsKCgppbnQgbWFpbigpCnsK ICB0ZXN0MDMoKTsKICByZXR1cm4gMDsKfQo=