From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29156 invoked by alias); 29 Nov 2001 13:46:04 -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 29109 invoked by uid 71); 29 Nov 2001 13:46:01 -0000 Resent-Date: 29 Nov 2001 13:46:01 -0000 Resent-Message-ID: <20011129134601.29108.qmail@sourceware.cygnus.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, kuchen@uni-muenster.de Received:(qmail 25079 invoked by uid 61); 29 Nov 2001 13:36:54 -0000 Message-Id:<20011129133653.25078.qmail@sourceware.cygnus.com> Date: Wed, 21 Nov 2001 21:36:00 -0000 From: kuchen@uni-muenster.de Reply-To: kuchen@uni-muenster.de To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.2 (1.1.1.1.2.21) Subject: c++/4968: Internal compiler error; reason unclear (templates, typing?) X-SW-Source: 2001-11/txt/msg00718.txt.bz2 List-Id: >Number: 4968 >Category: c++ >Synopsis: Internal compiler error; reason unclear (templates, typing?) >Confidential: no >Severity: non-critical >Priority: low >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Nov 29 05:46:00 PST 2001 >Closed-Date: >Last-Modified: >Originator: Uni Muenster >Release: gcc version 2.95.2 19991024 (release) >Organization: >Environment: sparc-sun-solaris2.7/2.95.2 (from gcc -v) >Description: The compiler reports an internal error. The reason is not clear to me. It probably has to do with a typing problem in my C++ program and with the use of templates. command line and compiler output: laokoon:Skeletons 224) g++ -save-temps gauss.cpp gauss.cpp: In function `class DistributedArray gauss(DistributedMatrix &)': gauss.cpp:47: instantiated from here gauss.cpp:30: Internal compiler error. gauss.cpp:30: Please submit a full bug report. gauss.cpp:30: See for instructions. As indicated on page http://www.gnu.org/software/gcc/bugs.html#unknown I have only attached the preprocessed file gauss.ii and omitted the files gauss.cpp, Skeleton.h, and mpi.h. In case some of the latter is needed, I am ready to supply it. >How-To-Repeat: g++ gauss.cpp >Fix: unknown >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="gauss.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="gauss.ii" IyAxICJnYXVzcy5jcHAiCiMgMSAiU2tlbGV0b24uaCIgMQogCiMgMSAiL3Vzci9pbmNsdWRlL3N0 ZGlvLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCiAKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgj KXN0ZGlvLmgJMS42OQk5OC8wNy8xMyBTTUkiCQoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1 cmVfdGVzdHMuaCIgMSAzIDQKIAoKCgoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylmZWF0 dXJlX3Rlc3RzLmgJMS4xNwk5Ny8xMi8wNCBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNh X2RlZnMuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWlzYV9kZWZzLmgJMS4x NQk5Ny8xMS8yMiBTTUkiCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKIAoKCgoK CgojIDIxMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQKCgogCgoKCgoKCiAKCgoK CgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgogCgoKCgoKCgog CgoKCgoKCgoKIAoKCgojIDMwOSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQKCgog CgoKCgoKCgoKCgoKfQoKCgojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIg MiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCn0KCgoKIyAyMiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgojIDEg Ii91c3IvaW5jbHVkZS9zeXMvdmFfbGlzdC5oIiAxIDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50 CSJAKCMpdmFfbGlzdC5oCTEuMTEJOTcvMTEvMjIgU01JIgoKIAoKCgoKCgoKCgoKZXh0ZXJuICJD IiB7CgoKCnR5cGVkZWYgdm9pZCAqX192YV9saXN0OwoKCgoKCn0KCgoKIyAyMyAiL3Vzci9pbmNs dWRlL3N0ZGlvLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zdGRpb190YWcuaCIgMSAzIDQK IAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0ZGlvX3RhZy5oCTEuMwk5OC8wNC8yMCBTTUki CgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgRklMRSAgX19GSUxFOwoKCgp9 CgoKCiMgMjQgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUv c3RkaW9faW1wbC5oIiAxIDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RkaW9faW1w bC5oCTEuNwk5OC8wNC8xNyBTTUkiCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCnR5cGVkZWYgaW50 CXNzaXplX3Q7CQkgCgoKCiMgMzYgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDMgNAoKCnN0 cnVjdCBGSUxFIAkgCnsKCgoKCglzc2l6ZV90CQlfY250OwkgCgl1bnNpZ25lZCBjaGFyCSpfcHRy OwkgCgoJdW5zaWduZWQgY2hhcgkqX2Jhc2U7CSAKCXVuc2lnbmVkIGNoYXIJX2ZsYWc7CSAKCXVu c2lnbmVkIGNoYXIJX2ZpbGU7CSAKCXVuc2lnbmVkCV9fb3JpZW50YXRpb246MjsgIAoJdW5zaWdu ZWQJX19maWxsZXI6NjsKfTsKCgoKCn0KCgoKIyAyNSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIg MyA0CgoKIAoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKdHlwZWRlZglfX0ZJTEUgRklMRTsKCgoK CgoKCnR5cGVkZWYgdW5zaWduZWQgaW50CXNpemVfdDsJCSAKCgoKCiAKCgoKCgp0eXBlZGVmCWxv bmcgbG9uZwlfX2xvbmdsb25nX3Q7CgoKCgoKCgoKCgoKCgp0eXBlZGVmIGxvbmcJCW9mZl90OwoK CgoKCgoKdHlwZWRlZiBfX2xvbmdsb25nX3QJb2ZmNjRfdDsKCgoKCgoKdHlwZWRlZiBsb25nCQlm cG9zX3Q7CgoKCgoKCgp0eXBlZGVmIF9fbG9uZ2xvbmdfdAlmcG9zNjRfdDsKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIEZJTEUJX19pb2JbMjAgXTsKCgoKCgoKCgoK CgpleHRlcm4gdW5zaWduZWQgY2hhcgkgX3NpYnVmW10sIF9zb2J1ZltdOwoKCiAKIyAyMjcgIi91 c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIJKl9idWZlbmR0 YWJbXTsKZXh0ZXJuIEZJTEUJCSpfbGFzdGJ1ZjsKCgogCiMgMjU3ICIvdXNyL2luY2x1ZGUvc3Rk aW8uaCIgMyA0CgoKCgpleHRlcm4gaW50CXJlbW92ZShjb25zdCBjaGFyICopOwpleHRlcm4gaW50 CXJlbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSp0bXBmaWxl KHZvaWQpOwpleHRlcm4gY2hhcgkqdG1wbmFtKGNoYXIgKik7CgoKCmV4dGVybiBpbnQJZmNsb3Nl KEZJTEUgKik7CmV4dGVybiBpbnQJZmZsdXNoKEZJTEUgKik7CmV4dGVybiBGSUxFCSpmb3Blbihj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSpmcmVvcGVuKGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOwpleHRlcm4gdm9pZAlzZXRidWYoRklMRSAqLCBj aGFyICopOwoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlcihGSUxFICosIGNoYXIgKiwgc2l6ZV90KTsK ZXh0ZXJuIGludCBzZXRsaW5lYnVmKEZJTEUgKik7CgpleHRlcm4gaW50CXNldHZidWYoRklMRSAq LCBjaGFyICosIGludCwgc2l6ZV90KTsKIApleHRlcm4gaW50CWZwcmludGYoRklMRSAqLCBjb25z dCBjaGFyICosIC4uLik7CiAKZXh0ZXJuIGludAlmc2NhbmYoRklMRSAqLCBjb25zdCBjaGFyICos IC4uLik7CiAKZXh0ZXJuIGludAlwcmludGYoY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBp bnQJc2NhbmYoY29uc3QgY2hhciAqLCAuLi4pOwoKCgogCmV4dGVybiBpbnQJc25wcmludGYoY2hh ciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKCiAKZXh0ZXJuIGludAlzcHJpbnRmKGNo YXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJc3NjYW5mKGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50CXZmcHJpbnRmKEZJTEUgKiwgY29uc3Qg Y2hhciAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50CXZwcmludGYoY29uc3QgY2hhciAqLCBfX3Zh X2xpc3QpOwoKCgpleHRlcm4gaW50CXZzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hh ciAqLCBfX3ZhX2xpc3QpOwoKZXh0ZXJuIGludAl2c3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIg KiwgX192YV9saXN0KTsKZXh0ZXJuIGludAlmZ2V0YyhGSUxFICopOwpleHRlcm4gY2hhcgkqZmdl dHMoY2hhciAqLCBpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQJZnB1dGMoaW50LCBGSUxFICopOwpl eHRlcm4gaW50CWZwdXRzKGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIGludAlnZXRjKEZJ TEUgKik7CmV4dGVybiBpbnQJZ2V0Y2hhcih2b2lkKTsKZXh0ZXJuIGNoYXIJKmdldHMoY2hhciAq KTsKZXh0ZXJuIGludAlwdXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlwdXRjaGFyKGludCk7 CmV4dGVybiBpbnQJcHV0cyhjb25zdCBjaGFyICopOwpleHRlcm4gaW50CXVuZ2V0YyhpbnQsIEZJ TEUgKik7CmV4dGVybiBzaXplX3QJZnJlYWQodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAq KTsKZXh0ZXJuIHNpemVfdAlmd3JpdGUoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklM RSAqKTsKZXh0ZXJuIGludAlmZ2V0cG9zKEZJTEUgKiwgZnBvc190ICopOwpleHRlcm4gaW50CWZz ZWVrKEZJTEUgKiwgbG9uZywgaW50KTsKZXh0ZXJuIGludAlmc2V0cG9zKEZJTEUgKiwgY29uc3Qg ZnBvc190ICopOwpleHRlcm4gbG9uZwlmdGVsbChGSUxFICopOwpleHRlcm4gdm9pZAlyZXdpbmQo RklMRSAqKTsKZXh0ZXJuIHZvaWQJY2xlYXJlcnIoRklMRSAqKTsKZXh0ZXJuIGludAlmZW9mKEZJ TEUgKik7CmV4dGVybiBpbnQJZmVycm9yKEZJTEUgKik7CmV4dGVybiB2b2lkCXBlcnJvcihjb25z dCBjaGFyICopOwoKCmV4dGVybiBpbnQJX19maWxidWYoRklMRSAqKTsKZXh0ZXJuIGludAlfX2Zs c2J1ZihpbnQsIEZJTEUgKik7CgoKIAoKCgoKCmV4dGVybiBGSUxFCSpmZG9wZW4oaW50LCBjb25z dCBjaGFyICopOwpleHRlcm4gY2hhcgkqY3Rlcm1pZChjaGFyICopOwpleHRlcm4gaW50CWZpbGVu byhGSUxFICopOwoKCgogCgoKIyAzNTggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgogCgoK CgpleHRlcm4gRklMRQkqcG9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g Y2hhcgkqY3VzZXJpZChjaGFyICopOwpleHRlcm4gY2hhcgkqdGVtcG5hbShjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQJZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwgY29u c3QgY2hhciAqKTsKCmV4dGVybiBpbnQJZ2V0c3Vib3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICos IGNoYXIgKiopOwoKZXh0ZXJuIGNoYXIJKm9wdGFyZzsKZXh0ZXJuIGludAlvcHRpbmQsIG9wdGVy ciwgb3B0b3B0OwpleHRlcm4gaW50CWdldHcoRklMRSAqKTsKZXh0ZXJuIGludAlwdXR3KGludCwg RklMRSAqKTsKZXh0ZXJuIGludAlwY2xvc2UoRklMRSAqKTsKCgoKIAoKCgpleHRlcm4gaW50CWZz ZWVrbyhGSUxFICosIG9mZl90LCBpbnQpOwpleHRlcm4gb2ZmX3QJZnRlbGxvKEZJTEUgKik7CgoK IAoKCgoKCmV4dGVybiBGSUxFCSpmb3BlbjY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK ZXh0ZXJuIEZJTEUJKmZyZW9wZW42NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAq KTsKZXh0ZXJuIEZJTEUJKnRtcGZpbGU2NCh2b2lkKTsKZXh0ZXJuIGludAlmZ2V0cG9zNjQoRklM RSAqLCBmcG9zNjRfdCAqKTsKZXh0ZXJuIGludAlmc2V0cG9zNjQoRklMRSAqLCBjb25zdCBmcG9z NjRfdCAqKTsKZXh0ZXJuIGludAlmc2Vla282NChGSUxFICosIG9mZjY0X3QsIGludCk7CmV4dGVy biBvZmY2NF90CWZ0ZWxsbzY0KEZJTEUgKik7CgoKIyA1MTUgIi91c3IvaW5jbHVkZS9zdGRpby5o IiAzIDQKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDU2NyAiL3Vzci9pbmNsdWRlL3N0 ZGlvLmgiIDMgNAoKCgoKCn0KCgoKIyAyICJTa2VsZXRvbi5oIiAyCgojIDEgIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvaW9zdHJlYW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFn bWEgaW50ZXJmYWNlCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMSAz CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCiAgIAoKCgpl eHRlcm4gIkMiIHsKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi43LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDEgMwogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjcvMi45NS4yLy4uLy4uLy4uLy4uL3NwYXJjLXN1bi1zb2xhcmlzMi43L2lu Y2x1ZGUvX0dfY29uZmlnLmgiIDEgMyA0CiAgCgoKCgoKCgoKCnR5cGVkZWYgICAgICAgICAgaW50 ICAgX0dfaW50OF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgIF9HX3VpbnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkp Owp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVf XyhfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRl X18oKF9fbW9kZV9fKF9fSElfXykpKTsKdHlwZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDMyX3Qg X19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBf R191aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CnR5cGVkZWYgICAg ICAgICAgaW50ICBfR19pbnQ2NF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18o X19ESV9fKSkpOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBfR19sbG9uZzsKX19l eHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfR191bGxvbmc7CgoKCgoKCgoK dHlwZWRlZiBsb25nIF9HX2Nsb2NrX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19kZXZfdDsK dHlwZWRlZiBsb25nIF9HX2Zwb3NfdDsKdHlwZWRlZiBsb25nIF9HX2dpZF90Owp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgX0dfaW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19tb2RlX3Q7CnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBfR19ubGlua190Owp0eXBlZGVmIGxvbmcgX0dfb2ZmX3Q7CnR5 cGVkZWYgbG9uZyBfR19waWRfdDsKCgoKdHlwZWRlZiBpbnQgX0dfcHRyZGlmZl90Owp0eXBlZGVm IGludCAgIF9HX3NpZ3NldF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfR19zaXplX3Q7CnR5 cGVkZWYgbG9uZyBfR190aW1lX3Q7CnR5cGVkZWYgbG9uZyBfR191aWRfdDsKdHlwZWRlZiBsb25n IGludCBfR193Y2hhcl90OwoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGludCBfR19zc2l6ZV90Owp0 eXBlZGVmIHVuc2lnbmVkIGludCBfR193aW50X3Q7CnR5cGVkZWYgdm9pZCAqIF9HX3ZhX2xpc3Q7 CgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi43LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAoKCgoKCgogCgoKIyAxOSAi L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjIvaW5jbHVk ZS9zdGRkZWYuaCIgMyA0CgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoK CiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu aCIgMyA0CgoKIAoKIAoKIyAxOTAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjcvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgogCgoKCgogCgojIDI3MSAi L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjIvaW5jbHVk ZS9zdGRkZWYuaCIgMyA0CgoKIyAyODMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjcvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAKCiAKCiMgMzE3ICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzIuOTUuMi9pbmNsdWRl L3N0ZGRlZi5oIiAzIDQKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA4NiAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjIvLi4vLi4vLi4vLi4vc3Bh cmMtc3VuLXNvbGFyaXMyLjcvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzIDQKCgojIDMwICIvdXNy L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzIuOTUuMi8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDIgMwoKCgoKCgoKCgoKCgoKCgoKCiMgNTUgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4yLy4uLy4uLy4uLy4u L2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK CgoKCgoKCgojIDEwNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu Ny8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5oIiAzCgoKCgoKCgoKCgoK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX0lP X2p1bXBfdDsgIHN0cnVjdCBfSU9fRklMRTsKCiAKIyAxNzQgIi91c3IvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv bGliaW8uaCIgMwoKCgoKCgoKCgogICAgdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKIAoK c3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3Qg X0lPX0ZJTEUgKl9zYnVmOwogICAKCiAgIAogIGludCBfcG9zOwojIDIwNyAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9saWJpby5oIiAzCgp9OwoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwkJ IAoKCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAKICBjaGFyKiBfSU9fcmVhZF9lbmQ7 CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSAKICBj aGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dyaXRlX2VuZDsJIAogIGNoYXIqIF9J T19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkgCiAgIAogIGNoYXIgKl9JT19zYXZl X2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAgCiAgY2hhciAqX0lPX3NhdmVfZW5k OyAgCgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpf Y2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKCgoKICBfR19vZmZfdCAgX29m ZnNldDsKCgoKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgY2hhciBfdW51c2Vk OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICAgCgoKCgoKCgoKfTsKCgoKCgoKCgoKCgpzdHJ1Y3Qg X0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT19zdGRpbl8sIF9J T19zdGRvdXRfLCBfSU9fc3RkZXJyXzsKCgoKCgogCnR5cGVkZWYgc3RydWN0CnsKICBfR19zc2l6 ZV90ICAoKnJlYWQpICAoc3RydWN0IF9JT19GSUxFICosIHZvaWQgKiwgX0dfc3NpemVfdCApICA7 CiAgX0dfc3NpemVfdCAgKCp3cml0ZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAq LCBfR19zc2l6ZV90ICkgIDsKICBfR19mcG9zX3QgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJTEUg KiwgX0dfb2ZmX3QgLCBpbnQpICA7CiAgaW50ICgqY2xvc2UpICAoc3RydWN0IF9JT19GSUxFICop ICA7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKCiAKc3RydWN0IF9JT19jb29raWVfZmls ZQp7CiAgc3RydWN0IF9JT19GSUxFIGZpbGU7CiAgY29uc3Qgdm9pZCAqdnRhYmxlOwogIHZvaWQg KmNvb2tpZTsKICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGlvX2Z1bmN0aW9uczsKfTsKCgoK ZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7CmV4 dGVybiBpbnQgX191ZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAg KF9JT19GSUxFICosIGludCkgIDsKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRj ICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX3B1dGMgIChpbnQgX19jLCBfSU9f RklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAgOwpl eHRlcm4gaW50IF9JT19mZXJyb3IgIChfSU9fRklMRSAqX19mcCkgIDsKCmV4dGVybiBpbnQgX0lP X3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2ZwKSAgOwoKIAoKCgpleHRlcm4gdm9pZCBfSU9f ZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAo X0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikg IDsKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgIChfSU9fRklMRSAqLCBjb25z dCBjaGFyICosIF9HX3ZhX2xpc3QgLCBpbnQgKikgIDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYg IChfSU9fRklMRSAqLCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QgKSAgOwpleHRlcm4gX0dfc3Np emVfdCAgX0lPX3BhZG4gIChfSU9fRklMRSAqLCBpbnQsIF9HX3NzaXplX3QgKSAgOwpleHRlcm4g X0dfc2l6ZV90ICBfSU9fc2dldG4gIChfSU9fRklMRSAqLCB2b2lkICosIF9HX3NpemVfdCApICA7 CgoKCgoKZXh0ZXJuIF9HX2Zwb3NfdCAgX0lPX3NlZWtvZmYgIChfSU9fRklMRSAqLCBfR19vZmZf dCAsIGludCwgaW50KSAgOwpleHRlcm4gX0dfZnBvc190ICBfSU9fc2Vla3BvcyAgKF9JT19GSUxF ICosIF9HX2Zwb3NfdCAsIGludCkgIDsKCgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJl YSAgKF9JT19GSUxFICopICA7CgoKfQoKCgojIDM2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi43LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVh bWJ1Zi5oIiAyIDMKCn0KIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQysrIiB7 CmNsYXNzIGlzdHJlYW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKIAoKCgoK CgoKdHlwZWRlZiBfR19vZmZfdCAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9HX2Zwb3NfdCAgc3RyZWFt cG9zOwoKdHlwZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwoKdHlwZWRlZiB1bnNpZ25lZCBs b25nIF9fZm10ZmxhZ3M7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX2lvc3RhdGU7CgpzdHJ1Y3Qg X2lvc19maWVsZHMKeyAgCiAgICBzdHJlYW1idWYgKl9zdHJidWY7CiAgICBvc3RyZWFtKiBfdGll OwogICAgaW50IF93aWR0aDsKICAgIF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAgc2hvcnQgIF9maWxs OwogICAgX19pb3N0YXRlIF9zdGF0ZTsKICAgIF9faW9zdGF0ZSBfZXhjZXB0aW9uczsKICAgIGlu dCBfcHJlY2lzaW9uOwoKICAgIHZvaWQgKl9hcnJheXM7ICAKfTsKCgoKCgoKCgoKCgoKCgoKIyAx MjQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4yLy4u Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgpjbGFzcyBpb3MgOiBwdWJs aWMgX2lvc19maWVsZHMgewogIGlvcyYgb3BlcmF0b3I9KGlvcyYpOyAgIAogIGlvcyAoY29uc3Qg aW9zJik7ICAKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICB0 eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7CiAgICB0eXBlZGVm IF9HX3NzaXplX3QgIHN0cmVhbXNpemU7CiAgICBlbnVtIGlvX3N0YXRlIHsKCWdvb2RiaXQgPSAw ICwKCWVvZmJpdCA9IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFkYml0ID0gNCAgfTsKICAgIGVudW0g b3Blbl9tb2RlIHsKCWluID0gMSAsCglvdXQgPSAyICwKCWF0ZSA9IDQgLAoJYXBwID0gOCAsCgl0 cnVuYyA9IDE2ICwKCW5vY3JlYXRlID0gMzIgLAoJbm9yZXBsYWNlID0gNjQgLAoJYmluID0gMTI4 ICwgIAoJYmluYXJ5ID0gMTI4ICB9OwogICAgZW51bSBzZWVrX2RpciB7IGJlZywgY3VyLCBlbmR9 OwogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7CiAgICAgCiAgICBlbnVtIHsgc2tp cHdzPSAwMSAsCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGludGVybmFsPSAwMTAgLAoJICAg ZGVjPSAwMjAgLCBvY3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkgICBzaG93YmFzZT0gMDIwMCAsIHNo b3dwb2ludD0gMDQwMCAsCgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bvcz0gMDIwMDAgLAoJ ICAgc2NpZW50aWZpYz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAwICwKCSAgIHVuaXRidWY9IDAyMDAw MCAsIHN0ZGlvPSAwNDAwMDAgCgoKCgkgICB9OwogICAgZW51bSB7ICAKCWJhc2VmaWVsZD1kZWMr b2N0K2hleCwKCWZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLAoJYWRqdXN0ZmllbGQgPSBs ZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzcgIi91c3IvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Ry ZWFtYnVmLmgiIDMKCgogICAgb3N0cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3RpZTsgfQog ICAgb3N0cmVhbSogdGllKG9zdHJlYW0qIHZhbCkgeyBvc3RyZWFtKiBzYXZlPV90aWU7IF90aWU9 dmFsOyByZXR1cm4gc2F2ZTsgfQoKICAgICAKICAgIHNob3J0ICBmaWxsKCkgY29uc3QgeyByZXR1 cm4gX2ZpbGw7IH0KICAgIHNob3J0ICBmaWxsKHNob3J0ICBuZXdmKQoJe3Nob3J0ICBvbGRmID0g X2ZpbGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxhZ3MoKSBj b25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdzIG5ld192 YWwpIHsKCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7IHJldHVy biBvbGRfdmFsOyB9CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3ByZWNpc2lv bjsgfQogICAgaW50IHByZWNpc2lvbihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQgb2xkcCA9 IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJldHVybiBv bGRwOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mgb2xkYml0 cyA9IF9mbGFnczsKCV9mbGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFn cyBzZXRmKGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9 IF9mbGFnczsKCV9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7IHJldHVy biBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJZm10Zmxh Z3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJpdHM7IH0K ICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdpZHRoKGlu dCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7IH0K CgoKCiAgICB2b2lkIF90aHJvd19mYWlsdXJlKCkgY29uc3QgeyB9CgogICAgdm9pZCBjbGVhcihp b3N0YXRlIHN0YXRlID0gMCkgewoJX3N0YXRlID0gX3N0cmJ1ZiA/IHN0YXRlIDogc3RhdGV8YmFk Yml0OwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2 b2lkIHNldChpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7CglpZiAoX3N0YXRlICYgX2V4 Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0ZSBm bGFnKSB7IF9zdGF0ZSB8PSBmbGFnOyAgCglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJv d19mYWlsdXJlKCk7IH0KICAgIGludCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlID09IDA7 IH0KICAgIGludCBlb2YoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQog ICAgaW50IGZhaWwoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8aW9zOjpm YWlsYml0KTsgfQogICAgaW50IGJhZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6YmFk Yml0OyB9CiAgICBpb3N0YXRlIHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0KICAg IG9wZXJhdG9yIHZvaWQqKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAgOiAodm9p ZCopKC0xKTsgfQogICAgaW50IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsgfQog ICAgaW9zdGF0ZSBleGNlcHRpb25zKCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0KICAg IHZvaWQgZXhjZXB0aW9ucyhpb3N0YXRlIGVuYWJsZSkgewoJX2V4Y2VwdGlvbnMgPSBlbmFibGU7 CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KCiAgICBzdHJl YW1idWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiBy ZGJ1ZihzdHJlYW1idWYgKl9zKSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9z dHJidWYgPSBfczsgY2xlYXIgKCk7IHJldHVybiBfb2xkOyB9CgogICAgc3RhdGljIGludCBzeW5j X3dpdGhfc3RkaW8oaW50IG9uKTsKICAgIHN0YXRpYyB2b2lkIHN5bmNfd2l0aF9zdGRpbygpIHsg c3luY193aXRoX3N0ZGlvKDEpOyB9CiAgICBzdGF0aWMgZm10ZmxhZ3MgYml0YWxsb2MoKTsKICAg IHN0YXRpYyBpbnQgeGFsbG9jKCk7CiAgICB2b2lkKiYgcHdvcmQoaW50KTsKICAgIHZvaWQqIHB3 b3JkKGludCkgY29uc3Q7CiAgICBsb25nJiBpd29yZChpbnQpOwogICAgbG9uZyBpd29yZChpbnQp IGNvbnN0OwoKCgoKCgoKCgogICAgIAogICAgY2xhc3MgSW5pdCB7CiAgICBwdWJsaWM6CiAgICAg IEluaXQgKCkgeyB9CiAgICB9OwoKICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgaW9zKHN0cmVhbWJ1 Ziogc2IgPSAwLCBvc3RyZWFtKiB0aWVfdG8gPSAwKTsKICAgIGlubGluZSB2aXJ0dWFsIH5pb3Mo KTsKICAgIGlubGluZSB2b2lkIGluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllID0gMCk7 Cn07CgoKCgp0eXBlZGVmIGlvczo6c2Vla19kaXIgX3NlZWtfZGlyOwoKCiAKIAogCiAKIAoKIAog CmNsYXNzIHN0cmVhbW1hcmtlciA6IHByaXZhdGUgX0lPX21hcmtlciB7CiAgICBmcmllbmQgY2xh c3Mgc3RyZWFtYnVmOwogICAgdm9pZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3BvcyA9IG9m ZnNldDsgfQogIHB1YmxpYzoKICAgIHN0cmVhbW1hcmtlcihzdHJlYW1idWYgKnNiKTsKICAgIH5z dHJlYW1tYXJrZXIoKTsKICAgIGludCBzYXZpbmcoKSB7IHJldHVybiAgMTsgfQogICAgaW50IGRl bHRhKHN0cmVhbW1hcmtlciYpOwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3RyZWFtYnVm IDogcHVibGljIF9JT19GSUxFIHsgIAogICAgZnJpZW5kIGNsYXNzIGlvczsKICAgIGZyaWVuZCBj bGFzcyBpc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIG9zdHJlYW07CiAgICBmcmllbmQgY2xhc3Mg c3RyZWFtbWFya2VyOwogICAgY29uc3Qgdm9pZCAqJl92dGFibGUoKSB7IHJldHVybiAqKGNvbnN0 IHZvaWQqKikoKF9JT19GSUxFKil0aGlzICsgMSk7IH0KICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMg c3RyZWFtYnVmKiBfbGlzdF9hbGw7ICAKICAgIF9JT19GSUxFKiYgeGNoYWluKCkgeyByZXR1cm4g X2NoYWluOyB9CiAgICB2b2lkIF91bl9saW5rKCk7CiAgICB2b2lkIF9saW5rX2luKCk7CiAgICBj aGFyKiBncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19z YXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJldHVy biBfSU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJu IF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNo YXIqIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX2VuZDsgfQogICAgY2hhciogcGJh c2UoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfYmFzZTsgfQogICAgY2hhciogZWJhY2soKSBj b25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9J T19yZWFkX2Jhc2U7fQogICAgY2hhciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfYmFz ZTsgfQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9CiAgICBp bnQgYmxlbigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kIC0gX0lPX2J1Zl9iYXNlOyB9CiAg ICB2b2lkIHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193cml0ZV9wdHIrKyA9IGM7IH0KICAgIGlu dCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9CiAgICBpbnQgeGZsYWdzKGludCBmKSB7aW50 IGZsID0gX2ZsYWdzIDsgX2ZsYWdzICA9IGY7IHJldHVybiBmbDt9CiAgICB2b2lkIHhzZXRmbGFn cyhpbnQgZikgeyBfZmxhZ3MgIHw9IGY7IH0KICAgIHZvaWQgeHNldGZsYWdzKGludCBmLCBpbnQg bWFzaykKICAgICAgeyBfZmxhZ3MgID0gKF9mbGFncyAgJiB+bWFzaykgfCAoZiAmIG1hc2spOyB9 CiAgICB2b2lkIGdidW1wKGludCBuKQogICAgICB7IF9mbGFncyAgJiAweDEwMCAgPyAoX0lPX3Nh dmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBf SU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50 IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRl X2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGco Y2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAgICAgIGlmIChfZmxhZ3MgICYgMHgxMDAg KSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgCiAgICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsg X0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0gZWc7IH0KICAgIGNoYXIgKnNob3J0YnVm KCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CgogICAgaW50IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9m bGFncyAmIDB4MTAwIDsgfQogICAgIAogICAgY2hhciAqR2Jhc2UoKSB7IHJldHVybiBpbl9iYWNr dXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlOyB9CiAgICAgCiAgICBjaGFyICpl R3B0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5k OyB9CiAgICAgCiAgICBjaGFyICpCYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3Jl YWRfYmFzZSA6IF9JT19zYXZlX2Jhc2U7IH0KICAgIGNoYXIgKkJwdHIoKSB7IHJldHVybiBfSU9f YmFja3VwX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5fYmFja3Vw KCkgPyBfSU9fcmVhZF9lbmQgOiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNlKCkgeyBy ZXR1cm4gX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2 ZV9lbmQ7IH0KICAgIGludCBoYXZlX2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2UgIT0g X19udWxsIDsgfQogICAgaW50IGhhdmVfbWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IF9f bnVsbCA7IH0KICAgIHZvaWQgZnJlZV9iYWNrdXBfYXJlYSgpOwogICAgdm9pZCB1bnNhdmVfbWFy a2VycygpOyAgCiAgICBpbnQgcHV0X21vZGUoKSB7IHJldHVybiBfZmxhZ3MgJiAweDgwMCA7IH0K ICAgIGludCBzd2l0Y2hfdG9fZ2V0X21vZGUoKTsKICAgIAogICAgc3RyZWFtYnVmKGludCBmbGFn cz0wKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgaW50IGZsdXNoX2FsbCgpOwogICAgc3RhdGljIHZv aWQgZmx1c2hfYWxsX2xpbmVidWZmZXJlZCgpOyAgCiAgICB2aXJ0dWFsIH5zdHJlYW1idWYoKTsK ICAgIHZpcnR1YWwgaW50IG92ZXJmbG93KGludCBjID0gKC0xKSApOyAgCiAgICB2aXJ0dWFsIGlu dCB1bmRlcmZsb3coKTsgIAogICAgdmlydHVhbCBpbnQgdWZsb3coKTsgIAogICAgdmlydHVhbCBp bnQgcGJhY2tmYWlsKGludCBjKTsKIAogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzcHV0bihjb25z dCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzZ2V0bihj aGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJl YW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFs IHN0cmVhbXBvcyBzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6 Om91dCk7CgogICAgc3RyZWFtcG9zIHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9zZWVrX2RpciBk LCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla29mZiAo dGhpcywgbywgZCwgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBwdWJzZWVrcG9zKHN0cmVhbXBvcyBw b3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtw b3MgKHRoaXMsIHBvcywgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBzc2Vla29mZihzdHJlYW1vZmYs IF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1wb3Mgc3Nl ZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKICAgIHZp cnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICB2aXJ0dWFsIGlu dCBzeW5jKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CgogICAgaW50IHNlZWttYXJr KHN0cmVhbW1hcmtlciYgbWFyaywgaW50IGRlbHRhID0gMCk7CiAgICBpbnQgc3B1dGJhY2tjKGNo YXIgYyk7CiAgICBpbnQgc3VuZ2V0YygpOwogICAgaW50IHVuYnVmZmVyZWQoKSB7IHJldHVybiBf ZmxhZ3MgJiAyICA/IDEgOiAwOyB9CiAgICBpbnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1cm4gX2Zs YWdzICYgMHgyMDAgID8gMSA6IDA7IH0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkKCXsgaWYg KGkpIF9mbGFncyB8PSAyIDsgZWxzZSBfZmxhZ3MgJj0gfjIgOyB9CiAgICB2b2lkIGxpbmVidWZm ZXJlZChpbnQgaSkKCXsgaWYgKGkpIF9mbGFncyB8PSAweDIwMCA7IGVsc2UgX2ZsYWdzICY9IH4w eDIwMCA7IH0KICAgIGludCBhbGxvY2F0ZSgpIHsgIAoJaWYgKGJhc2UoKSB8fCB1bmJ1ZmZlcmVk KCkpIHJldHVybiAwOwoJZWxzZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9CiAgICAgCiAgICB2b2lk IGFsbG9jYnVmKCkgeyBpZiAoYmFzZSgpID09IF9fbnVsbCApIGRvYWxsb2NidWYoKTsgfQogICAg dm9pZCBkb2FsbG9jYnVmKCk7CiAgICBpbnQgaW5fYXZhaWwoKSB7IHJldHVybiBfSU9fcmVhZF9l bmQgLSBfSU9fcmVhZF9wdHI7IH0KICAgIGludCBvdXRfd2FpdGluZygpIHsgcmV0dXJuIF9JT193 cml0ZV9wdHIgLSBfSU9fd3JpdGVfYmFzZTsgfQogICAgc3RyZWFtc2l6ZSBzcHV0bihjb25zdCBj aGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIHhzcHV0bihzLCBuKTsgfQogICAgc3RyZWFt c2l6ZSBwYWRuKGNoYXIgcGFkLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19wYWRuKHRoaXMs IHBhZCwgbik7IH0KICAgIHN0cmVhbXNpemUgc2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7 IHJldHVybiBfSU9fc2dldG4odGhpcywgcywgbik7IH0KICAgIGludCBpZ25vcmUoaW50KTsKICAg IGludCBnZXRfY29sdW1uKCk7CiAgICBpbnQgc2V0X2NvbHVtbihpbnQpOwogICAgbG9uZyBzZ2V0 bGluZShjaGFyKiBidWYsIF9HX3NpemVfdCAgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJhY2tfZGVs aW0pOwogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlzKTsgfQog ICAgaW50IHNidW1wYygpIHsgcmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQgc2dldGMo KSB7IHJldHVybiAoKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyID49ICggIHRoaXMgICktPl9JT19y ZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyAoICB0aGlzICApID09ICgtMSkgID8gKC0xKSAgOiAqKHVu c2lnbmVkIGNoYXIgKikgKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyKSAgOyB9CiAgICBpbnQgc25l eHRjKCkgewoJaWYgKF9JT19yZWFkX3B0ciA+PSBfSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3co dGhpcykgPT0gKC0xKSApCgkgIHJldHVybiAoLTEpIDsKCWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0 cisrLCBzZ2V0YygpOyB9CiAgICB2b2lkIHN0b3NzYygpIHsgaWYgKF9JT19yZWFkX3B0ciA8IF9J T19yZWFkX2VuZCkgX0lPX3JlYWRfcHRyKys7IH0KICAgIGludCB2c2NhbihjaGFyIGNvbnN0ICpm bXQwLCBfR192YV9saXN0ICBhcCwgaW9zKiBzdHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2Fu KGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBf R192YV9saXN0ICBhcCk7CiAgICBpbnQgZm9ybShjaGFyIGNvbnN0ICpmbXQwIC4uLik7CgoKCgog ICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXpl KTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNp emUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIp OwogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2 b2lkKik7ICAKCgoKCn07CgogCiAKCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsK ICBwcm90ZWN0ZWQ6CiAgICB2b2lkIGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3Qg aW50IG9wZW5wcm90OyAgCiAgICBmaWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7CiAgICBm aWxlYnVmKGludCBmZCwgY2hhciogcCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1ZigpOwogICAg ZmlsZWJ1ZiogYXR0YWNoKGludCBmZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZp bGVuYW1lLCBjb25zdCBjaGFyICptb2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAq ZmlsZW5hbWUsIGlvczo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAgIHZpcnR1 YWwgaW50IHVuZGVyZmxvdygpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEp ICk7CiAgICBpbnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAg aW50IGZkKCkgY29uc3QgeyByZXR1cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9CiAg ICBmaWxlYnVmKiBjbG9zZSgpOwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwogICAgdmly dHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9z Ojppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGlu dCBsZW4pOwogICAgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBu KTsKICAgIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0 dWFsIGludCBzeW5jKCk7CiAgcHJvdGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5nKCkgeyBy ZXR1cm4gZWJhY2soKSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4g aXNfcmVhZGluZygpID8gIGdwdHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9w dHIoKSB7IHJldHVybiBlR3B0cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz X3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mg c3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5 c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3Rh dCh2b2lkKik7ICAKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2 b2lkIGlvczo6aW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlfc3RhdGUg PSBzYiA/IGlvczo6Z29vZGJpdCA6IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJCV9zdHJi dWY9c2I7IF90aWUgPSB0aWVfdG87IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFncz1pb3M6 OnNraXB3c3xpb3M6OmRlYzsKCgoKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9Cgppbmxp bmUgaW9zOjppb3Moc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRp ZV90byk7IH0KCmlubGluZSBpb3M6On5pb3MoKSB7CgoKCiAgICAgCiAgICAgCiAgICBvcGVyYXRv ciBkZWxldGVbXSAoX2FycmF5cyk7Cn0KfSAgCgojIDMxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi43LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lv c3RyZWFtLmgiIDIgMwoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJl YW07CnR5cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19p bWFuaXApKGlzdHJlYW0mKTsKdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7 CgpleHRlcm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNo KG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0 ZXJuIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVh bCBwdWJsaWMgaW9zCnsKICAgICAKICAgIHZvaWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAgIG9z dHJlYW0oKSB7IH0KICAgIG9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD0gX19u dWxsICk7CiAgICBpbnQgb3BmeCgpIHsKCWlmICghZ29vZCgpKSByZXR1cm4gMDsKCWVsc2UgeyBp ZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsgIDsgcmV0dXJuIDE7fSB9CiAgICB2b2lkIG9zZngoKSB7 ICA7CgkJICBpZiAoZmxhZ3MoKSAmIChpb3M6OnVuaXRidWZ8aW9zOjpzdGRpbykpCgkJICAgICAg ZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFtJiBmbHVzaCgpOwogICAgb3N0cmVhbSYgcHV0KGNoYXIg YykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIG9zdHJlYW0m IHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShj b25zdCB1bnNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRl KChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hh ciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywg bik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAg ICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Ao c3RyZWFtcG9zKTsKICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAg IHN0cmVhbXBvcyB0ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQg Li4uKTsKICAgIG9zdHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwgX0dfdmFfbGlzdCAg YXJncyk7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjaGFyIGMpOwogICAgb3N0cmVhbSYgb3Bl cmF0b3I8PCh1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQog ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8 IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgY2hhciAqcyk7CiAgICBv c3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVybiAoKnRo aXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHNp Z25lZCBjaGFyICpzKQoJeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAg b3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB2b2lkICpwKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9y PDwoaW50IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7CiAgICBv c3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2ln bmVkIGxvbmcgbik7CgogICAgX19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcg bG9uZyBuKTsKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBs b25nIGxvbmcgbik7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9w ZXJhdG9yPDwoKGludCluKTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0 IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KCiAgICBvc3RyZWFtJiBv cGVyYXRvcjw8KGJvb2wgYikgeyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9CgogICAgb3N0 cmVhbSYgb3BlcmF0b3I8PChkb3VibGUgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGZsb2F0 IG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKCgogICAgb3N0cmVhbSYgb3Bl cmF0b3I8PChsb25nIGRvdWJsZSBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0K CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYyko KnRoaXMpOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYyko KnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYq KTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIApwcm90 ZWN0ZWQ6CiAgICBfR19zaXplX3QgIF9nY291bnQ7CgogICAgaW50IF9za2lwX3dzKCk7CiAgcHVi bGljOgogICAgaXN0cmVhbSgpOiBfZ2NvdW50ICgwKSB7IH0KICAgIGlzdHJlYW0oc3RyZWFtYnVm KiBzYiwgb3N0cmVhbSp0aWVkPSBfX251bGwgKTsKICAgIGlzdHJlYW0mIGdldChjaGFyKiBwdHIs IGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBj aGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFy KilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoY2hhciYgYyk7CiAgICBpc3Ry ZWFtJiBnZXQodW5zaWduZWQgY2hhciYgYykgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAg aXN0cmVhbSYgZ2V0bGluZShjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsK ICAgIGlzdHJlYW0mIGdldGxpbmUodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRl bGltID0gJ1xuJykKCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0K ICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciYgYykgIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7 IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGlt ID0gJ1xuJykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0 cmVhbSYgZ2V0bGluZShzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu JykKCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJl YW0mIHJlYWQoY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pOwogICAgaXN0cmVhbSYgcmVhZCh1bnNp Z25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciop cHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZChzaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXpl IG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJl YWQodm9pZCAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0 ciwgbik7IH0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYmIHNiLCBjaGFyIGRlbGltID0gJ1xu Jyk7CiAgICBpc3RyZWFtJiBnZXRzKGNoYXIgKipzLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBp bnQgaXBmeChpbnQgbmVlZCA9IDApIHsKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQp OyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllICYmIChuZWVkID09IDAgfHwg cmRidWYoKS0+aW5fYXZhaWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoIW5lZWQg JiYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJl dHVybiAxOwoJfQogICAgfQogICAgaW50IGlwZngwKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQo aW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSkgX3Rp ZS0+Zmx1c2goKTsKCSAgaWYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykgcmV0dXJuIF9za2lwX3dz KCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBmeDEoKSB7ICAKCWlmICgh Z29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7Cgkg IGlmIChfdGllICYmIHJkYnVmKCktPmluX2F2YWlsKCkgPT0gMCkgX3RpZS0+Zmx1c2goKTsKCSAg cmV0dXJuIDE7Cgl9CiAgICB9CiAgICB2b2lkIGlzZngoKSB7ICA7IH0KICAgIGludCBnZXQoKSB7 IGlmICghaXBmeDEoKSkgcmV0dXJuICgtMSkgOwoJCWVsc2UgeyBpbnQgY2ggPSBfc3RyYnVmLT5z YnVtcGMoKTsKCQkgICAgICAgaWYgKGNoID09ICgtMSkgKSBzZXQoaW9zOjplb2ZiaXQpOwoJCSAg ICAgICBpc2Z4KCk7CgkJICAgICAgIHJldHVybiBjaDsKCQkgICAgIH0gfQogICAgaW50IHBlZWso KTsKICAgIF9HX3NpemVfdCAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVh bSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwog ICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtcG9zKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9m ZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFj ayhjaGFyIGNoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0x KSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdl dCgpIHsKCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihp b3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFy ICpmb3JtYXQgLi4uKTsKICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX0df dmFfbGlzdCAgYXJncyk7CgoKCgoKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXIqKTsKICAg IGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciogcCkgeyByZXR1cm4gb3BlcmF0b3I+ PigoY2hhciopcCk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXIqcCkgeyBy ZXR1cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hh ciYgYyk7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4g b3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hh ciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFyJiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRv cj4+KGludCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nJik7CgogICAgX19leHRlbnNp b25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgbG9uZyYpOwogICAgX19leHRlbnNpb25fXyBp c3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYpOwoKICAgIGlzdHJlYW0mIG9w ZXJhdG9yPj4oc2hvcnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7 CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmKTsKICAgIGlzdHJlYW0mIG9w ZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGJvb2wm KTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGZsb2F0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRv cj4+KGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYpOwogICAg aXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVy biAqdGhpczt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KF9faW1hbmlwIGZ1bmMpIHsgcmV0dXJu ICgqZnVuYykoKnRoaXMpOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHN0cmVhbWJ1ZiopOwp9 OwoKY2xhc3MgaW9zdHJlYW0gOiBwdWJsaWMgaXN0cmVhbSwgcHVibGljIG9zdHJlYW0KewogIHB1 YmxpYzoKICAgIGlvc3RyZWFtKCkgeyB9CiAgICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3Ry ZWFtKnRpZWQ9IF9fbnVsbCApOwp9OwoKY2xhc3MgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiA6IHB1 YmxpYyBpc3RyZWFtIHsKcHVibGljOgogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9y PShpc3RyZWFtJik7CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19pc3Ry ZWFtX3dpdGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8 aXN0cmVhbSY+IChyaHMpKTsgfQp9OwoKY2xhc3MgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiA6IHB1 YmxpYyBvc3RyZWFtIHsKcHVibGljOgogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9y PShvc3RyZWFtJik7CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19vc3Ry ZWFtX3dpdGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8 b3N0cmVhbSY+IChyaHMpKTsgfQp9OwoKZXh0ZXJuIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gY2lu OwogCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNvdXQsIGNlcnI7CgpleHRlcm4gX0lP X29zdHJlYW1fd2l0aGFzc2lnbiBjbG9nCgoKCjsKCmV4dGVybiBpc3RyZWFtJiBsb2NrKGlzdHJl YW0mIGlucyk7CmV4dGVybiBpc3RyZWFtJiB1bmxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9z dHJlYW0mIGxvY2sob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiB1bmxvY2sob3N0cmVh bSYgb3V0cyk7CgpzdHJ1Y3QgSW9zdHJlYW1faW5pdCB7IH0gOyAgIAoKaW5saW5lIGlvcyYgZGVj KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpkZWMsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsg cmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgaGV4KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpoZXgsIGlv czo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgb2N0KGlv cyYgaSkKeyBpLnNldGYoaW9zOjpvY3QsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0 dXJuIGk7IH0KfSAgCgoKIyAzICJTa2VsZXRvbi5oIiAyCgojIDEgIi91c3IvbG9jYWwvTVBJL21w aWNoLTEuMi4yLjEvaW5jbHVkZS9tcGkuaCIgMQogCgoKCgoKCiAKCgoKCiAKCgogCgoKCgoKCgoK CgoKIAoKZXh0ZXJuICJDIiB7CgoKIAogCgoKCgoKIAoKCgoKCgoKCgp0eXBlZGVmIGludCBNUElf RGF0YXR5cGU7CgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK CgoKCgoKIAp0eXBlZGVmIGludCBNUElfQ29tbTsKCgoKIAp0eXBlZGVmIGludCBNUElfR3JvdXA7 CgoKIAp0eXBlZGVmIGludCBNUElfT3A7CgoKCgoKCgoKCgoKCgoKIAogCgoKCgogCgoKCgoKIAoK CgoKCgoKIAoKCgoKIAoKCgoKIAoKCiAKCgoKCgoKCgoKCiAKCgoKCgp0eXBlZGVmIHZvaWQgKE1Q SV9IYW5kbGVyX2Z1bmN0aW9uKSAoKTsKCgoKCgp0eXBlZGVmIGludCBNUElfRXJyaGFuZGxlcjsK IAoKCiAKCgoKIAoKCgoKIAp0eXBlZGVmIHVuaW9uIE1QSVJfSEFORExFICpNUElfUmVxdWVzdDsK CiAKdHlwZWRlZiB2b2lkIChNUElfVXNlcl9mdW5jdGlvbikgKCB2b2lkICosIHZvaWQgKiwgaW50 ICosIE1QSV9EYXRhdHlwZSAqICk7IAoKIAp0eXBlZGVmIGludCAoTVBJX0NvcHlfZnVuY3Rpb24p ICggTVBJX0NvbW0sIGludCwgdm9pZCAqLCB2b2lkICosIHZvaWQgKiwgaW50ICogKTsKdHlwZWRl ZiBpbnQgKE1QSV9EZWxldGVfZnVuY3Rpb24pICggTVBJX0NvbW0sIGludCwgdm9pZCAqLCB2b2lk ICogKTsKCgoKCgogCgoKIAoKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QgTVBJUl9JbmZvICpNUElf SW5mbzsKCgoKCiAKCgoKCgoKCiAKCgojIDEgIi91c3IvbG9jYWwvTVBJL21waWNoLTEuMi4yLjEv aW5jbHVkZS9tcGlkZWZzLmgiIDEKIAoKCgogCgojIDEgIi91c3IvbG9jYWwvTVBJL21waWNoLTEu Mi4yLjEvaW5jbHVkZS9tcGlfZm9ydGRlZnMuaCIgMQogCgoKCnR5cGVkZWYgaW50IE1QSV9GaW50 OwoKCgoKCgojIDcgIi91c3IvbG9jYWwvTVBJL21waWNoLTEuMi4yLjEvaW5jbHVkZS9tcGlkZWZz LmgiIDIKCgoKCnR5cGVkZWYgaW50IE1QSV9BaW50OwoKIAoKCgogCgoKCnR5cGVkZWYgc3RydWN0 IHsgCiAgICBpbnQgY291bnQ7CiAgICBpbnQgTVBJX1NPVVJDRTsKICAgIGludCBNUElfVEFHOwog ICAgaW50IE1QSV9FUlJPUjsKCgoKfSBNUElfU3RhdHVzOwoKIAoKIAoKCgoKIAoKCgoKCgoKCgoK IyAxICIvdXNyL2xvY2FsL01QSS9tcGljaC0xLjIuMi4xL2luY2x1ZGUvbXBpby5oIiAxCiAKCgoK CgoKIAoKCgoKIyAxICIvdXNyL2xvY2FsL01QSS9tcGljaC0xLjIuMi4xL2luY2x1ZGUvbXBpLmgi IDEKIAoKCgoKCgogCgojIDY4MSAiL3Vzci9sb2NhbC9NUEkvbXBpY2gtMS4yLjIuMS9pbmNsdWRl L21waS5oIgoKCiMgMTMgIi91c3IvbG9jYWwvTVBJL21waWNoLTEuMi4yLjEvaW5jbHVkZS9tcGlv LmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCgogCgp0eXBlZGVmIHN0cnVjdCBBRElPSV9GaWxlRCAq TVBJX0ZpbGU7CgogCnR5cGVkZWYgc3RydWN0IEFESU9JX1JlcXVlc3REICpNUElPX1JlcXVlc3Q7 ICAKCnR5cGVkZWYgbG9uZyBsb25nIE1QSV9PZmZzZXQ7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKCgoKIAppbnQgTVBJX0ZpbGVfb3Bl bihNUElfQ29tbSBjb21tLCBjaGFyICpmaWxlbmFtZSwgaW50IGFtb2RlLCAKICAgICAgICAgICAg ICAgICAgICAgICAgICBNUElfSW5mbyBpbmZvLCBNUElfRmlsZSAqZmgpOwppbnQgTVBJX0ZpbGVf Y2xvc2UoTVBJX0ZpbGUgKmZoKTsKaW50IE1QSV9GaWxlX2RlbGV0ZShjaGFyICpmaWxlbmFtZSwg TVBJX0luZm8gaW5mbyk7CmludCBNUElfRmlsZV9zZXRfc2l6ZShNUElfRmlsZSBmaCwgTVBJX09m ZnNldCBzaXplKTsKaW50IE1QSV9GaWxlX3ByZWFsbG9jYXRlKE1QSV9GaWxlIGZoLCBNUElfT2Zm c2V0IHNpemUpOwppbnQgTVBJX0ZpbGVfZ2V0X3NpemUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQg KnNpemUpOwppbnQgTVBJX0ZpbGVfZ2V0X2dyb3VwKE1QSV9GaWxlIGZoLCBNUElfR3JvdXAgKmdy b3VwKTsKaW50IE1QSV9GaWxlX2dldF9hbW9kZShNUElfRmlsZSBmaCwgaW50ICphbW9kZSk7Cmlu dCBNUElfRmlsZV9zZXRfaW5mbyhNUElfRmlsZSBmaCwgTVBJX0luZm8gaW5mbyk7CmludCBNUElf RmlsZV9nZXRfaW5mbyhNUElfRmlsZSBmaCwgTVBJX0luZm8gKmluZm9fdXNlZCk7CgogCmludCBN UElfRmlsZV9zZXRfdmlldyhNUElfRmlsZSBmaCwgTVBJX09mZnNldCBkaXNwLCBNUElfRGF0YXR5 cGUgZXR5cGUsCgkgICAgICAgICBNUElfRGF0YXR5cGUgZmlsZXR5cGUsIGNoYXIgKmRhdGFyZXAs IE1QSV9JbmZvIGluZm8pOwppbnQgTVBJX0ZpbGVfZ2V0X3ZpZXcoTVBJX0ZpbGUgZmgsIE1QSV9P ZmZzZXQgKmRpc3AsIAogICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSAqZXR5cGUsIE1QSV9E YXRhdHlwZSAqZmlsZXR5cGUsIGNoYXIgKmRhdGFyZXApOwoKIAppbnQgTVBJX0ZpbGVfcmVhZF9h dChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwKCSAgICAgIGludCBj b3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgTVBJ X0ZpbGVfcmVhZF9hdF9hbGwoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpi dWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAq c3RhdHVzKTsKaW50IE1QSV9GaWxlX3dyaXRlX2F0KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9m ZnNldCwgdm9pZCAqYnVmLAoJICAgICAgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUs IE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBNUElfRmlsZV93cml0ZV9hdF9hbGwoTVBJX0ZpbGUg ZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9E YXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKCiAKCiAKCmludCBNUElfRmls ZV9pcmVhZF9hdChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwKCSAg ICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVl c3QpOwppbnQgTVBJX0ZpbGVfaXdyaXRlX2F0KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNl dCwgdm9pZCAqYnVmLAoJICAgICAgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1Q SU9fUmVxdWVzdCAqcmVxdWVzdCk7CgogCmludCBNUElfRmlsZV9yZWFkKE1QSV9GaWxlIGZoLCB2 b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlCgkgICAgIGRhdGF0eXBlLCBNUElfU3Rh dHVzICpzdGF0dXMpOyAKaW50IE1QSV9GaWxlX3JlYWRfYWxsKE1QSV9GaWxlIGZoLCB2b2lkICpi dWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlCgkgICAgIGRhdGF0eXBlLCBNUElfU3RhdHVzICpz dGF0dXMpOyAKaW50IE1QSV9GaWxlX3dyaXRlKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBj b3VudCwgTVBJX0RhdGF0eXBlCgkgICAgICBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsK aW50IE1QSV9GaWxlX3dyaXRlX2FsbChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQs IE1QSV9EYXRhdHlwZQoJICAgICAgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CgogCgog CgppbnQgTVBJX0ZpbGVfaXJlYWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBN UElfRGF0YXR5cGUKCSAgICAgZGF0YXR5cGUsIE1QSU9fUmVxdWVzdCAqcmVxdWVzdCk7IAppbnQg TVBJX0ZpbGVfaXdyaXRlKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0Rh dGF0eXBlCgkgICAgICBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsKCmludCBNUElf RmlsZV9zZWVrKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgaW50IHdoZW5jZSk7Cmlu dCBNUElfRmlsZV9nZXRfcG9zaXRpb24oTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgKm9mZnNldCk7 CmludCBNUElfRmlsZV9nZXRfYnl0ZV9vZmZzZXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zm c2V0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9PZmZzZXQgKmRp c3ApOwoKIAppbnQgTVBJX0ZpbGVfcmVhZF9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1Ziwg aW50IGNvdW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlw ZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSV9GaWxlX3dyaXRlX3NoYXJlZChNUElfRmls ZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgIE1Q SV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSV9GaWxlX2ly ZWFkX3NoYXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAg ICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1 ZXN0KTsKaW50IE1QSV9GaWxlX2l3cml0ZV9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1Ziwg aW50IGNvdW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0 eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVlc3QpOwppbnQgTVBJX0ZpbGVfcmVhZF9vcmRlcmVkKE1Q SV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgTVBJX0Zp bGVfd3JpdGVfb3JkZXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAg ICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMg KnN0YXR1cyk7CmludCBNUElfRmlsZV9zZWVrX3NoYXJlZChNUElfRmlsZSBmaCwgTVBJX09mZnNl dCBvZmZzZXQsIGludCB3aGVuY2UpOwppbnQgTVBJX0ZpbGVfZ2V0X3Bvc2l0aW9uX3NoYXJlZChN UElfRmlsZSBmaCwgTVBJX09mZnNldCAqb2Zmc2V0KTsKCiAKaW50IE1QSV9GaWxlX3JlYWRfYXRf YWxsX2JlZ2luKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5 cGUpOwppbnQgTVBJX0ZpbGVfcmVhZF9hdF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYs IE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBNUElfRmlsZV93cml0ZV9hdF9hbGxfYmVnaW4oTVBJ X0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwppbnQgTVBJ X0ZpbGVfd3JpdGVfYXRfYWxsX2VuZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBNUElfU3RhdHVz ICpzdGF0dXMpOwppbnQgTVBJX0ZpbGVfcmVhZF9hbGxfYmVnaW4oTVBJX0ZpbGUgZmgsIHZvaWQg KmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlw ZSBkYXRhdHlwZSk7CmludCBNUElfRmlsZV9yZWFkX2FsbF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQg KmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSV9GaWxlX3dyaXRlX2FsbF9iZWdpbihN UElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7CmludCBNUElfRmlsZV93cml0ZV9hbGxfZW5k KE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBNUElfRmls ZV9yZWFkX29yZGVyZWRfYmVnaW4oTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwpp bnQgTVBJX0ZpbGVfcmVhZF9vcmRlcmVkX2VuZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBNUElf U3RhdHVzICpzdGF0dXMpOwppbnQgTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZF9iZWdpbihNUElfRmls ZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwppbnQgTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZF9l bmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKCiAKaW50IE1Q SV9GaWxlX2dldF90eXBlX2V4dGVudChNUElfRmlsZSBmaCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBl LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50ICpleHRlbnQp OwoKIAppbnQgTVBJX0ZpbGVfc2V0X2F0b21pY2l0eShNUElfRmlsZSBmaCwgaW50IGZsYWcpOwpp bnQgTVBJX0ZpbGVfZ2V0X2F0b21pY2l0eShNUElfRmlsZSBmaCwgaW50ICpmbGFnKTsKaW50IE1Q SV9GaWxlX3N5bmMoTVBJX0ZpbGUgZmgpOwoKIAppbnQgTVBJX0ZpbGVfc2V0X2VycmhhbmRsZXIo IE1QSV9GaWxlLCBNUElfRXJyaGFuZGxlciApOwppbnQgTVBJX0ZpbGVfZ2V0X2VycmhhbmRsZXIo IE1QSV9GaWxlLCBNUElfRXJyaGFuZGxlciAqICk7CgojIDIxMCAiL3Vzci9sb2NhbC9NUEkvbXBp Y2gtMS4yLjIuMS9pbmNsdWRlL21waW8uaCIKCgogCgoKIAoKCgoKCgoKCiAKTVBJX0ZpbGUgTVBJ X0ZpbGVfZjJjKE1QSV9GaW50IGZoKTsKTVBJX0ZpbnQgTVBJX0ZpbGVfYzJmKE1QSV9GaWxlIGZo KTsKCgogCgoKaW50IE1QSU9fVGVzdChNUElPX1JlcXVlc3QgKnJlcXVlc3QsIGludCAqZmxhZywg TVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSU9fV2FpdChNUElPX1JlcXVlc3QgKnJlcXVlc3Qs IE1QSV9TdGF0dXMgKnN0YXR1cyk7Ck1QSV9GaW50IE1QSU9fUmVxdWVzdF9jMmYoTVBJT19SZXF1 ZXN0IHJlcXVlc3QpOwpNUElPX1JlcXVlc3QgTVBJT19SZXF1ZXN0X2YyYyhNUElfRmludCByZXF1 ZXN0KTsKCgogCiMgMjY3ICIvdXNyL2xvY2FsL01QSS9tcGljaC0xLjIuMi4xL2luY2x1ZGUvbXBp by5oIgoKCgoKCiAKCgogCmludCBQTVBJX0ZpbGVfb3BlbihNUElfQ29tbSBjb21tLCBjaGFyICpm aWxlbmFtZSwgaW50IGFtb2RlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0luZm8g aW5mbywgTVBJX0ZpbGUgKmZoKTsKaW50IFBNUElfRmlsZV9jbG9zZShNUElfRmlsZSAqZmgpOwpp bnQgUE1QSV9GaWxlX2RlbGV0ZShjaGFyICpmaWxlbmFtZSwgTVBJX0luZm8gaW5mbyk7CmludCBQ TVBJX0ZpbGVfc2V0X3NpemUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgc2l6ZSk7CmludCBQTVBJ X0ZpbGVfcHJlYWxsb2NhdGUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgc2l6ZSk7CmludCBQTVBJ X0ZpbGVfZ2V0X3NpemUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgKnNpemUpOwppbnQgUE1QSV9G aWxlX2dldF9ncm91cChNUElfRmlsZSBmaCwgTVBJX0dyb3VwICpncm91cCk7CmludCBQTVBJX0Zp bGVfZ2V0X2Ftb2RlKE1QSV9GaWxlIGZoLCBpbnQgKmFtb2RlKTsKaW50IFBNUElfRmlsZV9zZXRf aW5mbyhNUElfRmlsZSBmaCwgTVBJX0luZm8gaW5mbyk7CmludCBQTVBJX0ZpbGVfZ2V0X2luZm8o TVBJX0ZpbGUgZmgsIE1QSV9JbmZvICppbmZvX3VzZWQpOwoKIAppbnQgUE1QSV9GaWxlX3NldF92 aWV3KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IGRpc3AsIAogICAgTVBJX0RhdGF0eXBlIGV0eXBl LCBNUElfRGF0YXR5cGUgZmlsZXR5cGUsIGNoYXIgKmRhdGFyZXAsIE1QSV9JbmZvIGluZm8pOwpp bnQgUE1QSV9GaWxlX2dldF92aWV3KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0ICpkaXNwLCAKICAg ICAgTVBJX0RhdGF0eXBlICpldHlwZSwgTVBJX0RhdGF0eXBlICpmaWxldHlwZSwgY2hhciAqZGF0 YXJlcCk7CgogCmludCBQTVBJX0ZpbGVfcmVhZF9hdChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBv ZmZzZXQsIHZvaWQgKmJ1ZiwKCSAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBl LCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgUE1QSV9GaWxlX3JlYWRfYXRfYWxsKE1QSV9GaWxl IGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAoJICAgICAgaW50IGNvdW50LCBNUElf RGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfd3Jp dGVfYXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkgICAgICBp bnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50 IFBNUElfRmlsZV93cml0ZV9hdF9hbGwoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2 b2lkICpidWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0 YXR1cyAqc3RhdHVzKTsKCiAKCiAKCmludCBQTVBJX0ZpbGVfaXJlYWRfYXQoTVBJX0ZpbGUgZmgs IE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9EYXRh dHlwZSBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsKaW50IFBNUElfRmlsZV9pd3Jp dGVfYXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkgICAgICBp bnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsK CiAKaW50IFBNUElfRmlsZV9yZWFkKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwg TVBJX0RhdGF0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlLCBNUElfU3Rh dHVzICpzdGF0dXMpOyAKaW50IFBNUElfRmlsZV9yZWFkX2FsbChNUElfRmlsZSBmaCwgdm9pZCAq YnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZQoJICAgICAgICAgICAgICAgICAgICAgICBkYXRh dHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsgCmludCBQTVBJX0ZpbGVfd3JpdGUoTVBJX0ZpbGUg ZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUKCSAgICAgICAgICAgICAgICAg ICAgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVfYWxs KE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlCgkgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKCiAKCiAKCmlu dCBQTVBJX0ZpbGVfaXJlYWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElf RGF0YXR5cGUKCSAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUsIE1QSU9fUmVxdWVzdCAqcmVx dWVzdCk7IAppbnQgUE1QSV9GaWxlX2l3cml0ZShNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQg Y291bnQsIE1QSV9EYXRhdHlwZQoJICAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUsIE1QSU9f UmVxdWVzdCAqcmVxdWVzdCk7CgppbnQgUE1QSV9GaWxlX3NlZWsoTVBJX0ZpbGUgZmgsIE1QSV9P ZmZzZXQgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKaW50IFBNUElfRmlsZV9nZXRfcG9zaXRpb24oTVBJ X0ZpbGUgZmgsIE1QSV9PZmZzZXQgKm9mZnNldCk7CmludCBQTVBJX0ZpbGVfZ2V0X2J5dGVfb2Zm c2V0KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTVBJX09mZnNldCAqZGlzcCk7CgogCmludCBQTVBJX0ZpbGVfcmVh ZF9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAgICAg ICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsK aW50IFBNUElfRmlsZV93cml0ZV9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNv dW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1Q SV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfaXJlYWRfc2hhcmVkKE1QSV9GaWxlIGZo LCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0Rh dGF0eXBlIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVlc3QpOwppbnQgUE1QSV9GaWxlX2l3 cml0ZV9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJl cXVlc3QpOwppbnQgUE1QSV9GaWxlX3JlYWRfb3JkZXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVm LCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRh dHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IFBNUElfRmlsZV93cml0ZV9vcmRlcmVkKE1Q SV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IFBNUElf RmlsZV9zZWVrX3NoYXJlZChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIGludCB3aGVu Y2UpOwppbnQgUE1QSV9GaWxlX2dldF9wb3NpdGlvbl9zaGFyZWQoTVBJX0ZpbGUgZmgsIE1QSV9P ZmZzZXQgKm9mZnNldCk7CgogCmludCBQTVBJX0ZpbGVfcmVhZF9hdF9hbGxfYmVnaW4oTVBJX0Zp bGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7CmludCBQTVBJX0Zp bGVfcmVhZF9hdF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0 YXR1cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVfYXRfYWxsX2JlZ2luKE1QSV9GaWxlIGZoLCBNUElf T2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKaW50IFBNUElfRmlsZV93cml0ZV9h dF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Cmlu dCBQTVBJX0ZpbGVfcmVhZF9hbGxfYmVnaW4oTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNv dW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7 CmludCBQTVBJX0ZpbGVfcmVhZF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9T dGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVfYWxsX2JlZ2luKE1QSV9GaWxlIGZo LCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJ X0RhdGF0eXBlIGRhdGF0eXBlKTsKaW50IFBNUElfRmlsZV93cml0ZV9hbGxfZW5kKE1QSV9GaWxl IGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfcmVhZF9v cmRlcmVkX2JlZ2luKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKaW50IFBNUElf RmlsZV9yZWFkX29yZGVyZWRfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMg KnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZF9iZWdpbihNUElfRmlsZSBmaCwg dm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN UElfRGF0YXR5cGUgZGF0YXR5cGUpOwppbnQgUE1QSV9GaWxlX3dyaXRlX29yZGVyZWRfZW5kKE1Q SV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CgogCmludCBQTVBJX0Zp bGVfZ2V0X3R5cGVfZXh0ZW50KE1QSV9GaWxlIGZoLCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50ICpleHRlbnQpOwoK IAppbnQgUE1QSV9GaWxlX3NldF9hdG9taWNpdHkoTVBJX0ZpbGUgZmgsIGludCBmbGFnKTsKaW50 IFBNUElfRmlsZV9nZXRfYXRvbWljaXR5KE1QSV9GaWxlIGZoLCBpbnQgKmZsYWcpOwppbnQgUE1Q SV9GaWxlX3N5bmMoTVBJX0ZpbGUgZmgpOwoKIAppbnQgUE1QSV9GaWxlX3NldF9lcnJoYW5kbGVy KCBNUElfRmlsZSwgTVBJX0VycmhhbmRsZXIgKTsKaW50IFBNUElfRmlsZV9nZXRfZXJyaGFuZGxl ciggTVBJX0ZpbGUsIE1QSV9FcnJoYW5kbGVyICogKTsKCiMgMzk3ICIvdXNyL2xvY2FsL01QSS9t cGljaC0xLjIuMi4xL2luY2x1ZGUvbXBpby5oIgoKCiAKTVBJX0ZpbGUgUE1QSV9GaWxlX2YyYyhN UElfRmludCBmaCk7Ck1QSV9GaW50IFBNUElfRmlsZV9jMmYoTVBJX0ZpbGUgZmgpOwoKIAppbnQg TVBJX0ZpbGVfc2V0X2VycmhhbmRsZXIoTVBJX0ZpbGUgZmgsIE1QSV9FcnJoYW5kbGVyIGVycmhh bmRsZXIpOwppbnQgTVBJX0ZpbGVfZ2V0X2VycmhhbmRsZXIoTVBJX0ZpbGUgZmgsIE1QSV9FcnJo YW5kbGVyICplcnJoYW5kbGVyKTsKCgogCgoKaW50IFBNUElPX1Rlc3QoTVBJT19SZXF1ZXN0ICpy ZXF1ZXN0LCBpbnQgKmZsYWcsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJT19XYWl0KE1Q SU9fUmVxdWVzdCAqcmVxdWVzdCwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKTVBJX0ZpbnQgUE1QSU9f UmVxdWVzdF9jMmYoTVBJT19SZXF1ZXN0IHJlcXVlc3QpOwpNUElPX1JlcXVlc3QgUE1QSU9fUmVx dWVzdF9mMmMoTVBJX0ZpbnQgcmVxdWVzdCk7CgoKIAojIDQzNCAiL3Vzci9sb2NhbC9NUEkvbXBp Y2gtMS4yLjIuMS9pbmNsdWRlL21waW8uaCIKCgoKfQoKCgojIDQ5ICIvdXNyL2xvY2FsL01QSS9t cGljaC0xLjIuMi4xL2luY2x1ZGUvbXBpZGVmcy5oIiAyCgoKCgojIDIzOCAiL3Vzci9sb2NhbC9N UEkvbXBpY2gtMS4yLjIuMS9pbmNsdWRlL21waS5oIiAyCgoKIAoKIAoKCgoKCgogCgoKCgoKCiAK CgoKCgoKIAoKCgoKCiAKCiAKIApleHRlcm4gaW50IE1QSUNIWF9RT1NfQkFORFdJRFRIOwpleHRl cm4gaW50IE1QSUNIWF9RT1NfUEFSQU1FVEVSUzsKIAoKIAogCmV4dGVybiBpbnQgTVBJQ0hYX1RP UE9MT0dZX0RFUFRIUzsKZXh0ZXJuIGludCBNUElDSFhfVE9QT0xPR1lfQ09MT1JTOwogCgogCiMg MSAiL3Vzci9sb2NhbC9NUEkvbXBpY2gtMS4yLjIuMS9pbmNsdWRlL21waV9lcnJuby5oIiAxCgog CgoKCgoKCiAKCgoKCiAKCgoKCgoKIAoKIAoKCgoKCgoKCgogCgoKCgogCgoKCiAKCgogCgoKCgoK IAoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI4NCAiL3Vz ci9sb2NhbC9NUEkvbXBpY2gtMS4yLjIuMS9pbmNsdWRlL21waS5oIiAyCgogCgogCgoKCgoKCgoK CgoKCiAKCgoKCiAKICBpbnQgTVBJX1NlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQs IGludCwgTVBJX0NvbW0pOwogIGludCBNUElfUmVjdih2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUs IGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0YXR1cyAqKTsKICBpbnQgTVBJX0dldF9jb3VudChN UElfU3RhdHVzICosIE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGludCBNUElfQnNlbmQodm9pZCos IGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGludCBNUElfU3NlbmQo dm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGludCBNUElf UnNlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGlu dCBNUElfQnVmZmVyX2F0dGFjaCggdm9pZCosIGludCk7CiAgaW50IE1QSV9CdWZmZXJfZGV0YWNo KCB2b2lkKiwgaW50Kik7CiAgaW50IE1QSV9Jc2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUs IGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IE1QSV9JYnNlbmQodm9p ZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9SZXF1ZXN0ICop OwogIGludCBNUElfSXNzZW5kKHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1Q SV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJX0lyc2VuZCh2b2lkKiwgaW50LCBNUElf RGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IE1QSV9J cmVjdih2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1Jl cXVlc3QgKik7CiAgaW50IE1QSV9XYWl0KE1QSV9SZXF1ZXN0ICosIE1QSV9TdGF0dXMgKik7CiAg aW50IE1QSV9UZXN0KE1QSV9SZXF1ZXN0ICosIGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBN UElfUmVxdWVzdF9mcmVlKE1QSV9SZXF1ZXN0ICopOwogIGludCBNUElfV2FpdGFueShpbnQsIE1Q SV9SZXF1ZXN0ICosIGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBNUElfVGVzdGFueShpbnQs IE1QSV9SZXF1ZXN0ICosIGludCAqLCBpbnQgKiwgTVBJX1N0YXR1cyAqKTsKICBpbnQgTVBJX1dh aXRhbGwoaW50LCBNUElfUmVxdWVzdCAqLCBNUElfU3RhdHVzICopOwogIGludCBNUElfVGVzdGFs bChpbnQsIE1QSV9SZXF1ZXN0ICosIGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBNUElfV2Fp dHNvbWUoaW50LCBNUElfUmVxdWVzdCAqLCBpbnQgKiwgaW50ICosIE1QSV9TdGF0dXMgKik7CiAg aW50IE1QSV9UZXN0c29tZShpbnQsIE1QSV9SZXF1ZXN0ICosIGludCAqLCBpbnQgKiwgTVBJX1N0 YXR1cyAqKTsKICBpbnQgTVBJX0lwcm9iZShpbnQsIGludCwgTVBJX0NvbW0sIGludCAqZmxhZywg TVBJX1N0YXR1cyAqKTsKICBpbnQgTVBJX1Byb2JlKGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0 YXR1cyAqKTsKICBpbnQgTVBJX0NhbmNlbChNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJX1Rlc3Rf Y2FuY2VsbGVkKE1QSV9TdGF0dXMgKiwgaW50ICopOwogIGludCBNUElfU2VuZF9pbml0KHZvaWQq LCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsK ICBpbnQgTVBJX0JzZW5kX2luaXQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsaW50LCBN UElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IE1QSV9Tc2VuZF9pbml0KHZvaWQqLCBpbnQs IE1QSV9EYXRhdHlwZSwgaW50LGludCwgTVBJX0NvbW0sIE1QSV9SZXF1ZXN0ICopOwogIGludCBN UElfUnNlbmRfaW5pdCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCxpbnQsIE1QSV9Db21t LCBNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJX1JlY3ZfaW5pdCh2b2lkKiwgaW50LCBNUElfRGF0 YXR5cGUsIGludCxpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJX1N0YXJ0 KE1QSV9SZXF1ZXN0ICopOwogIGludCBNUElfU3RhcnRhbGwoaW50LCBNUElfUmVxdWVzdCAqKTsK ICBpbnQgTVBJX1NlbmRyZWN2KHZvaWQgKiwgaW50LCBNUElfRGF0YXR5cGUsaW50LCBpbnQsIHZv aWQgKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0YXR1cyAq KTsKICBpbnQgTVBJX1NlbmRyZWN2X3JlcGxhY2Uodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBp bnQsIGludCwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfU3RhdHVzICopOwogIGludCBNUElfVHlw ZV9jb250aWd1b3VzKGludCwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IE1Q SV9UeXBlX3ZlY3RvcihpbnQsIGludCwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAq KTsKICBpbnQgTVBJX1R5cGVfaHZlY3RvcihpbnQsIGludCwgTVBJX0FpbnQsIE1QSV9EYXRhdHlw ZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfVHlwZV9pbmRleGVkKGludCwgaW50ICosIGlu dCAqLCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgTVBJX1R5cGVfaGluZGV4 ZWQoaW50LCBpbnQgKiwgTVBJX0FpbnQgKiwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7 CiAgaW50IE1QSV9UeXBlX3N0cnVjdChpbnQsIGludCAqLCBNUElfQWludCAqLCBNUElfRGF0YXR5 cGUgKiwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfQWRkcmVzcyh2b2lkKiwgTVBJX0FpbnQg Kik7CiAgaW50IE1QSV9UeXBlX2V4dGVudChNUElfRGF0YXR5cGUsIE1QSV9BaW50ICopOwogCgog CiAgaW50IE1QSV9UeXBlX3NpemUoTVBJX0RhdGF0eXBlLCBpbnQgKik7CiAgaW50IE1QSV9UeXBl X2NvdW50KE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGludCBNUElfVHlwZV9sYihNUElfRGF0YXR5 cGUsIE1QSV9BaW50Kik7CiAgaW50IE1QSV9UeXBlX3ViKE1QSV9EYXRhdHlwZSwgTVBJX0FpbnQq KTsKICBpbnQgTVBJX1R5cGVfY29tbWl0KE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgTVBJX1R5cGVf ZnJlZShNUElfRGF0YXR5cGUgKik7CiAgaW50IE1QSV9HZXRfZWxlbWVudHMoTVBJX1N0YXR1cyAq LCBNUElfRGF0YXR5cGUsIGludCAqKTsKICBpbnQgTVBJX1BhY2sodm9pZCosIGludCwgTVBJX0Rh dGF0eXBlLCB2b2lkICosIGludCwgaW50ICosICBNUElfQ29tbSk7CiAgaW50IE1QSV9VbnBhY2so dm9pZCosIGludCwgaW50ICosIHZvaWQgKiwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9Db21tKTsK ICBpbnQgTVBJX1BhY2tfc2l6ZShpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0NvbW0sIGludCAqKTsK ICBpbnQgTVBJX0JhcnJpZXIoTVBJX0NvbW0gKTsKICBpbnQgTVBJX0JjYXN0KHZvaWQqLCBpbnQs IE1QSV9EYXRhdHlwZSwgaW50LCBNUElfQ29tbSApOwogIGludCBNUElfR2F0aGVyKHZvaWQqICwg aW50LCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBNUElfQ29t bSk7IAogIGludCBNUElfR2F0aGVydih2b2lkKiAsIGludCwgTVBJX0RhdGF0eXBlLCB2b2lkKiwg aW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIGludCwgTVBJX0NvbW0pOyAKICBpbnQgTVBJX1Nj YXR0ZXIodm9pZCogLCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCwgTVBJX0RhdGF0eXBl LCBpbnQsIE1QSV9Db21tKTsKICBpbnQgTVBJX1NjYXR0ZXJ2KHZvaWQqICwgaW50ICosIGludCAq LCAgTVBJX0RhdGF0eXBlLCB2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgTVBJX0NvbW0p OwogIGludCBNUElfQWxsZ2F0aGVyKHZvaWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZvaWQqLCBp bnQsIE1QSV9EYXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBNUElfQWxsZ2F0aGVydih2b2lkKiAs IGludCwgTVBJX0RhdGF0eXBlLCB2b2lkKiwgaW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIE1Q SV9Db21tKTsKICBpbnQgTVBJX0FsbHRvYWxsKHZvaWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZv aWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBNUElfQWxsdG9hbGx2KHZv aWQqICwgaW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQgKiwgaW50ICosIE1Q SV9EYXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBNUElfUmVkdWNlKHZvaWQqICwgdm9pZCosIGlu dCwgTVBJX0RhdGF0eXBlLCBNUElfT3AsIGludCwgTVBJX0NvbW0pOwogIGludCBNUElfT3BfY3Jl YXRlKE1QSV9Vc2VyX2Z1bmN0aW9uICosIGludCwgTVBJX09wICopOwogIGludCBNUElfT3BfZnJl ZSggTVBJX09wICopOwogIGludCBNUElfQWxscmVkdWNlKHZvaWQqICwgdm9pZCosIGludCwgTVBJ X0RhdGF0eXBlLCBNUElfT3AsIE1QSV9Db21tKTsKICBpbnQgTVBJX1JlZHVjZV9zY2F0dGVyKHZv aWQqICwgdm9pZCosIGludCAqLCBNUElfRGF0YXR5cGUsIE1QSV9PcCwgTVBJX0NvbW0pOwogIGlu dCBNUElfU2Nhbih2b2lkKiAsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX09wLCBNUElf Q29tbSApOwogIGludCBNUElfR3JvdXBfc2l6ZShNUElfR3JvdXAgZ3JvdXAsIGludCAqKTsKICBp bnQgTVBJX0dyb3VwX3JhbmsoTVBJX0dyb3VwIGdyb3VwLCBpbnQgKik7CiAgaW50IE1QSV9Hcm91 cF90cmFuc2xhdGVfcmFua3MgKE1QSV9Hcm91cCwgaW50LCBpbnQgKiwgTVBJX0dyb3VwLCBpbnQg Kik7CiAgaW50IE1QSV9Hcm91cF9jb21wYXJlKE1QSV9Hcm91cCwgTVBJX0dyb3VwLCBpbnQgKik7 CiAgaW50IE1QSV9Db21tX2dyb3VwKE1QSV9Db21tLCBNUElfR3JvdXAgKik7CiAgaW50IE1QSV9H cm91cF91bmlvbihNUElfR3JvdXAsIE1QSV9Hcm91cCwgTVBJX0dyb3VwICopOwogIGludCBNUElf R3JvdXBfaW50ZXJzZWN0aW9uKE1QSV9Hcm91cCwgTVBJX0dyb3VwLCBNUElfR3JvdXAgKik7CiAg aW50IE1QSV9Hcm91cF9kaWZmZXJlbmNlKE1QSV9Hcm91cCwgTVBJX0dyb3VwLCBNUElfR3JvdXAg Kik7CiAgaW50IE1QSV9Hcm91cF9pbmNsKE1QSV9Hcm91cCBncm91cCwgaW50LCBpbnQgKiwgTVBJ X0dyb3VwICopOwogIGludCBNUElfR3JvdXBfZXhjbChNUElfR3JvdXAgZ3JvdXAsIGludCwgaW50 ICosIE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0dyb3VwX3JhbmdlX2luY2woTVBJX0dyb3VwIGdy b3VwLCBpbnQsIGludCBbXVszXSwgTVBJX0dyb3VwICopOwogIGludCBNUElfR3JvdXBfcmFuZ2Vf ZXhjbChNUElfR3JvdXAgZ3JvdXAsIGludCwgaW50IFtdWzNdLCBNUElfR3JvdXAgKik7CiAgaW50 IE1QSV9Hcm91cF9mcmVlKE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0NvbW1fc2l6ZShNUElfQ29t bSwgaW50ICopOwogIGludCBNUElfQ29tbV9yYW5rKE1QSV9Db21tLCBpbnQgKik7CiAgaW50IE1Q SV9Db21tX2NvbXBhcmUoTVBJX0NvbW0sIE1QSV9Db21tLCBpbnQgKik7CiAgaW50IE1QSV9Db21t X2R1cChNUElfQ29tbSwgTVBJX0NvbW0gKik7CiAgaW50IE1QSV9Db21tX2NyZWF0ZShNUElfQ29t bSwgTVBJX0dyb3VwLCBNUElfQ29tbSAqKTsKICBpbnQgTVBJX0NvbW1fc3BsaXQoTVBJX0NvbW0s IGludCwgaW50LCBNUElfQ29tbSAqKTsKICBpbnQgTVBJX0NvbW1fZnJlZShNUElfQ29tbSAqKTsK ICBpbnQgTVBJX0NvbW1fdGVzdF9pbnRlcihNUElfQ29tbSwgaW50ICopOwogIGludCBNUElfQ29t bV9yZW1vdGVfc2l6ZShNUElfQ29tbSwgaW50ICopOwogIGludCBNUElfQ29tbV9yZW1vdGVfZ3Jv dXAoTVBJX0NvbW0sIE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0ludGVyY29tbV9jcmVhdGUoTVBJ X0NvbW0sIGludCwgTVBJX0NvbW0sIGludCwgaW50LCBNUElfQ29tbSAqICk7CiAgaW50IE1QSV9J bnRlcmNvbW1fbWVyZ2UoTVBJX0NvbW0sIGludCwgTVBJX0NvbW0gKik7CiAgaW50IE1QSV9LZXl2 YWxfY3JlYXRlKE1QSV9Db3B5X2Z1bmN0aW9uICosIE1QSV9EZWxldGVfZnVuY3Rpb24gKiwgaW50 ICosIHZvaWQqKTsKICBpbnQgTVBJX0tleXZhbF9mcmVlKGludCAqKTsKICBpbnQgTVBJX0F0dHJf cHV0KE1QSV9Db21tLCBpbnQsIHZvaWQqKTsKICBpbnQgTVBJX0F0dHJfZ2V0KE1QSV9Db21tLCBp bnQsIHZvaWQgKiwgaW50ICopOwogIGludCBNUElfQXR0cl9kZWxldGUoTVBJX0NvbW0sIGludCk7 CiAgaW50IE1QSV9Ub3BvX3Rlc3QoTVBJX0NvbW0sIGludCAqKTsKICBpbnQgTVBJX0NhcnRfY3Jl YXRlKE1QSV9Db21tLCBpbnQsIGludCAqLCBpbnQgKiwgaW50LCBNUElfQ29tbSAqKTsKICBpbnQg TVBJX0RpbXNfY3JlYXRlKGludCwgaW50LCBpbnQgKik7CiAgaW50IE1QSV9HcmFwaF9jcmVhdGUo TVBJX0NvbW0sIGludCwgaW50ICosIGludCAqLCBpbnQsIE1QSV9Db21tICopOwogIGludCBNUElf R3JhcGhkaW1zX2dldChNUElfQ29tbSwgaW50ICosIGludCAqKTsKICBpbnQgTVBJX0dyYXBoX2dl dChNUElfQ29tbSwgaW50LCBpbnQsIGludCAqLCBpbnQgKik7CiAgaW50IE1QSV9DYXJ0ZGltX2dl dChNUElfQ29tbSwgaW50ICopOwogIGludCBNUElfQ2FydF9nZXQoTVBJX0NvbW0sIGludCwgaW50 ICosIGludCAqLCBpbnQgKik7CiAgaW50IE1QSV9DYXJ0X3JhbmsoTVBJX0NvbW0sIGludCAqLCBp bnQgKik7CiAgaW50IE1QSV9DYXJ0X2Nvb3JkcyhNUElfQ29tbSwgaW50LCBpbnQsIGludCAqKTsK ICBpbnQgTVBJX0dyYXBoX25laWdoYm9yc19jb3VudChNUElfQ29tbSwgaW50LCBpbnQgKik7CiAg aW50IE1QSV9HcmFwaF9uZWlnaGJvcnMoTVBJX0NvbW0sIGludCwgaW50LCBpbnQgKik7CiAgaW50 IE1QSV9DYXJ0X3NoaWZ0KE1QSV9Db21tLCBpbnQsIGludCwgaW50ICosIGludCAqKTsKICBpbnQg TVBJX0NhcnRfc3ViKE1QSV9Db21tLCBpbnQgKiwgTVBJX0NvbW0gKik7CiAgaW50IE1QSV9DYXJ0 X21hcChNUElfQ29tbSwgaW50LCBpbnQgKiwgaW50ICosIGludCAqKTsKICBpbnQgTVBJX0dyYXBo X21hcChNUElfQ29tbSwgaW50LCBpbnQgKiwgaW50ICosIGludCAqKTsKICBpbnQgTVBJX0dldF9w cm9jZXNzb3JfbmFtZShjaGFyICosIGludCAqKTsKICBpbnQgTVBJX0dldF92ZXJzaW9uKGludCAq LCBpbnQgKik7CiAgaW50IE1QSV9FcnJoYW5kbGVyX2NyZWF0ZShNUElfSGFuZGxlcl9mdW5jdGlv biAqLCBNUElfRXJyaGFuZGxlciAqKTsKICBpbnQgTVBJX0VycmhhbmRsZXJfc2V0KE1QSV9Db21t LCBNUElfRXJyaGFuZGxlcik7CiAgaW50IE1QSV9FcnJoYW5kbGVyX2dldChNUElfQ29tbSwgTVBJ X0VycmhhbmRsZXIgKik7CiAgaW50IE1QSV9FcnJoYW5kbGVyX2ZyZWUoTVBJX0VycmhhbmRsZXIg Kik7CiAgaW50IE1QSV9FcnJvcl9zdHJpbmcoaW50LCBjaGFyICosIGludCAqKTsKICBpbnQgTVBJ X0Vycm9yX2NsYXNzKGludCwgaW50ICopOwogIGRvdWJsZSBNUElfV3RpbWUodm9pZCk7CiAgZG91 YmxlIE1QSV9XdGljayh2b2lkKTsKCiAgZG91YmxlIFBNUElfV3RpbWUodm9pZCk7CiAgZG91Ymxl IFBNUElfV3RpY2sodm9pZCk7CgogIGludCBNUElfSW5pdChpbnQgKiwgY2hhciAqKiopOwogIGlu dCBNUElfSW5pdF90aHJlYWQoIGludCAqLCBjaGFyICoqKiwgaW50LCBpbnQgKiApOwogIGludCBN UElfRmluYWxpemUodm9pZCk7CiAgaW50IE1QSV9Jbml0aWFsaXplZChpbnQgKik7CiAgaW50IE1Q SV9BYm9ydChNUElfQ29tbSwgaW50KTsKCiAKICBpbnQgTVBJX0NvbW1fc2V0X25hbWUoTVBJX0Nv bW0sIGNoYXIgKik7CiAgaW50IE1QSV9Db21tX2dldF9uYW1lKE1QSV9Db21tLCBjaGFyICosIGlu dCAqKTsKCgoKCgoKCgoKICBpbnQgTVBJX1Bjb250cm9sKGNvbnN0IGludCwgLi4uKTsKCgogIGlu dCBNUElSX251bGxfY29weV9mbiAgKCBNUElfQ29tbSwgaW50LCB2b2lkICosIHZvaWQgKiwgdm9p ZCAqLCBpbnQgKiApOwogIGludCBNUElSX251bGxfZGVsZXRlX2ZuICAoIE1QSV9Db21tLCBpbnQs IHZvaWQgKiwgdm9pZCAqICk7CiAgaW50IE1QSVJfZHVwX2ZuICAoIE1QSV9Db21tLCBpbnQsIHZv aWQgKiwgdm9pZCAqLCB2b2lkICosIGludCAqICk7CgogCiAgaW50IE1QSV9TdGF0dXNfZjJjKCBN UElfRmludCAqLCBNUElfU3RhdHVzICogKTsKICBpbnQgTVBJX1N0YXR1c19jMmYoIE1QSV9TdGF0 dXMgKiwgTVBJX0ZpbnQgKiApOwogIGludCBNUElfRmluYWxpemVkKCBpbnQgKiApOwogIGludCBN UElfVHlwZV9jcmVhdGVfaW5kZXhlZF9ibG9jayhpbnQsIGludCwgaW50ICosIE1QSV9EYXRhdHlw ZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfVHlwZV9nZXRfZW52ZWxvcGUoTVBJX0RhdGF0 eXBlLCBpbnQgKiwgaW50ICosIGludCAqLCBpbnQgKik7IAogIGludCBNUElfVHlwZV9nZXRfY29u dGVudHMoTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgaW50LCBpbnQgKiwgTVBJX0FpbnQgKiwgTVBJ X0RhdGF0eXBlICopOwogIGludCBNUElfVHlwZV9jcmVhdGVfc3ViYXJyYXkoaW50LCBpbnQgKiwg aW50ICosIGludCAqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBN UElfVHlwZV9jcmVhdGVfZGFycmF5KGludCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwgaW50ICos IGludCAqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfSW5m b19jcmVhdGUoTVBJX0luZm8gKik7CiAgaW50IE1QSV9JbmZvX3NldChNUElfSW5mbywgY2hhciAq LCBjaGFyICopOwogIGludCBNUElfSW5mb19kZWxldGUoTVBJX0luZm8sIGNoYXIgKik7CiAgaW50 IE1QSV9JbmZvX2dldChNUElfSW5mbywgY2hhciAqLCBpbnQsIGNoYXIgKiwgaW50ICopOwogIGlu dCBNUElfSW5mb19nZXRfdmFsdWVsZW4oTVBJX0luZm8sIGNoYXIgKiwgaW50ICosIGludCAqKTsK ICBpbnQgTVBJX0luZm9fZ2V0X25rZXlzKE1QSV9JbmZvLCBpbnQgKik7CiAgaW50IE1QSV9JbmZv X2dldF9udGhrZXkoTVBJX0luZm8sIGludCwgY2hhciAqKTsKICBpbnQgTVBJX0luZm9fZHVwKE1Q SV9JbmZvLCBNUElfSW5mbyAqKTsKICBpbnQgTVBJX0luZm9fZnJlZShNUElfSW5mbyAqaW5mbyk7 CgpNUElfRmludCBNUElfSW5mb19jMmYoTVBJX0luZm8pOwpNUElfSW5mbyBNUElfSW5mb19mMmMo TVBJX0ZpbnQpOwpNUElfRmludCBNUElfUmVxdWVzdF9jMmYoIE1QSV9SZXF1ZXN0ICk7CgogCiAg aW50IE1QSV9TdGF0dXNfc2V0X2NhbmNlbGxlZCggTVBJX1N0YXR1cyAqLCBpbnQgKTsKICBpbnQg TVBJX1N0YXR1c19zZXRfZWxlbWVudHMoIE1QSV9TdGF0dXMgKiwgTVBJX0RhdGF0eXBlLCBpbnQg KTsKCgoKCgogCgogIGludCBQTVBJX1NlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQs IGludCwgTVBJX0NvbW0pOwogIGludCBQTVBJX1JlY3Yodm9pZCosIGludCwgTVBJX0RhdGF0eXBl LCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfR2V0X2NvdW50 KE1QSV9TdGF0dXMgKiwgTVBJX0RhdGF0eXBlLCBpbnQgKik7CiAgaW50IFBNUElfQnNlbmQodm9p ZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGludCBQTVBJX1Nz ZW5kKHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tKTsKICBpbnQg UE1QSV9Sc2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSk7 CiAgaW50IFBNUElfQnVmZmVyX2F0dGFjaCggdm9pZCogYnVmZmVyLCBpbnQpOwogIGludCBQTVBJ X0J1ZmZlcl9kZXRhY2goIHZvaWQqIGJ1ZmZlciwgaW50Kik7CiAgaW50IFBNUElfSXNlbmQodm9p ZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9SZXF1ZXN0ICop OwogIGludCBQTVBJX0lic2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBN UElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfSXNzZW5kKHZvaWQqLCBpbnQsIE1Q SV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1Q SV9JcnNlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1Q SV9SZXF1ZXN0ICopOwogIGludCBQTVBJX0lyZWN2KHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwg aW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1QSV9XYWl0KE1QSV9S ZXF1ZXN0ICosIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfVGVzdChNUElfUmVxdWVzdCAqLCBp bnQgKmZsYWcsIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfUmVxdWVzdF9mcmVlKE1QSV9SZXF1 ZXN0ICopOwogIGludCBQTVBJX1dhaXRhbnkoaW50LCBNUElfUmVxdWVzdCAqLCBpbnQgKiwgTVBJ X1N0YXR1cyAqKTsKICBpbnQgUE1QSV9UZXN0YW55KGludCwgTVBJX1JlcXVlc3QgKiwgaW50ICos IGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBQTVBJX1dhaXRhbGwoaW50LCBNUElfUmVxdWVz dCAqLCBNUElfU3RhdHVzICopOwogIGludCBQTVBJX1Rlc3RhbGwoaW50LCBNUElfUmVxdWVzdCAq LCBpbnQgKmZsYWcsIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfV2FpdHNvbWUoaW50LCBNUElf UmVxdWVzdCAqLCBpbnQgKiwgaW50ICosIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfVGVzdHNv bWUoaW50LCBNUElfUmVxdWVzdCAqLCBpbnQgKiwgaW50ICosIE1QSV9TdGF0dXMgKik7CiAgaW50 IFBNUElfSXByb2JlKGludCwgaW50LCBNUElfQ29tbSwgaW50ICpmbGFnLCBNUElfU3RhdHVzICop OwogIGludCBQTVBJX1Byb2JlKGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0YXR1cyAqKTsKICBp bnQgUE1QSV9DYW5jZWwoTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfVGVzdF9jYW5jZWxsZWQo TVBJX1N0YXR1cyAqLCBpbnQgKmZsYWcpOwogIGludCBQTVBJX1NlbmRfaW5pdCh2b2lkKiwgaW50 LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50 IFBNUElfQnNlbmRfaW5pdCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElf Q29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfU3NlbmRfaW5pdCh2b2lkKiwgaW50LCBN UElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBN UElfUnNlbmRfaW5pdCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29t bSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfUmVjdl9pbml0KHZvaWQqLCBpbnQsIE1QSV9E YXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1QSV9T dGFydChNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1QSV9TdGFydGFsbChpbnQsIE1QSV9SZXF1ZXN0 ICopOwogIGludCBQTVBJX1NlbmRyZWN2KHZvaWQgKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwg aW50LCB2b2lkICosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9T dGF0dXMgKik7CiAgaW50IFBNUElfU2VuZHJlY3ZfcmVwbGFjZSh2b2lkKiwgaW50LCBNUElfRGF0 YXR5cGUsIGludCwgaW50LCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9TdGF0dXMgKik7CiAgaW50 IFBNUElfVHlwZV9jb250aWd1b3VzKGludCwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7 CiAgaW50IFBNUElfVHlwZV92ZWN0b3IoaW50LCBpbnQsIGludCwgTVBJX0RhdGF0eXBlLCBNUElf RGF0YXR5cGUgKik7CiAgaW50IFBNUElfVHlwZV9odmVjdG9yKGludCwgaW50LCBNUElfQWludCwg TVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfVHlwZV9pbmRleGVkKGlu dCwgaW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgUE1Q SV9UeXBlX2hpbmRleGVkKGludCwgaW50ICosIE1QSV9BaW50ICosIE1QSV9EYXRhdHlwZSwgTVBJ X0RhdGF0eXBlICopOwogIGludCBQTVBJX1R5cGVfc3RydWN0KGludCwgaW50ICosIE1QSV9BaW50 ICosIE1QSV9EYXRhdHlwZSAqLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfQWRkcmVzcyh2 b2lkKiwgTVBJX0FpbnQgKik7CiAgaW50IFBNUElfVHlwZV9leHRlbnQoTVBJX0RhdGF0eXBlLCBN UElfQWludCAqKTsKIAoKIAogIGludCBQTVBJX1R5cGVfc2l6ZShNUElfRGF0YXR5cGUsIGludCAq KTsKICBpbnQgUE1QSV9UeXBlX2NvdW50KE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGludCBQTVBJ X1R5cGVfbGIoTVBJX0RhdGF0eXBlLCBNUElfQWludCopOwogIGludCBQTVBJX1R5cGVfdWIoTVBJ X0RhdGF0eXBlLCBNUElfQWludCopOwogIGludCBQTVBJX1R5cGVfY29tbWl0KE1QSV9EYXRhdHlw ZSAqKTsKICBpbnQgUE1QSV9UeXBlX2ZyZWUoTVBJX0RhdGF0eXBlICopOwogIGludCBQTVBJX0dl dF9lbGVtZW50cyhNUElfU3RhdHVzICosIE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGludCBQTVBJ X1BhY2sodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCB2b2lkICosIGludCwgaW50ICosICBNUElf Q29tbSk7CiAgaW50IFBNUElfVW5wYWNrKHZvaWQqLCBpbnQsIGludCAqLCB2b2lkICosIGludCwg TVBJX0RhdGF0eXBlLCBNUElfQ29tbSk7CiAgaW50IFBNUElfUGFja19zaXplKGludCwgTVBJX0Rh dGF0eXBlLCBNUElfQ29tbSwgaW50ICopOwogIGludCBQTVBJX0JhcnJpZXIoTVBJX0NvbW0gKTsK ICBpbnQgUE1QSV9CY2FzdCh2b2lkKiBidWZmZXIsIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIE1Q SV9Db21tICk7CiAgaW50IFBNUElfR2F0aGVyKHZvaWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZv aWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBNUElfQ29tbSk7IAogIGludCBQTVBJX0dhdGhl cnYodm9pZCogLCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCAqLCBpbnQgKiwgTVBJX0Rh dGF0eXBlLCBpbnQsIE1QSV9Db21tKTsgCiAgaW50IFBNUElfU2NhdHRlcih2b2lkKiAsIGludCwg TVBJX0RhdGF0eXBlLCB2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgTVBJX0NvbW0pOwog IGludCBQTVBJX1NjYXR0ZXJ2KHZvaWQqICwgaW50ICosIGludCAqZGlzcGxzLCBNUElfRGF0YXR5 cGUsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBNUElfQ29tbSk7CiAgaW50IFBNUElf QWxsZ2F0aGVyKHZvaWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQsIE1QSV9EYXRh dHlwZSwgTVBJX0NvbW0pOwogIGludCBQTVBJX0FsbGdhdGhlcnYodm9pZCogLCBpbnQsIE1QSV9E YXRhdHlwZSwgdm9pZCosIGludCAqLCBpbnQgKiwgTVBJX0RhdGF0eXBlLCBNUElfQ29tbSk7CiAg aW50IFBNUElfQWxsdG9hbGwodm9pZCogLCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCwg TVBJX0RhdGF0eXBlLCBNUElfQ29tbSk7CiAgaW50IFBNUElfQWxsdG9hbGx2KHZvaWQqICwgaW50 ICosIGludCAqLCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQgKiwgaW50ICosIE1QSV9EYXRhdHlw ZSwgTVBJX0NvbW0pOwogIGludCBQTVBJX1JlZHVjZSh2b2lkKiAsIHZvaWQqLCBpbnQsIE1QSV9E YXRhdHlwZSwgTVBJX09wLCBpbnQsIE1QSV9Db21tKTsKICBpbnQgUE1QSV9PcF9jcmVhdGUoTVBJ X1VzZXJfZnVuY3Rpb24gKiwgaW50LCBNUElfT3AgKik7CiAgaW50IFBNUElfT3BfZnJlZSggTVBJ X09wICopOwogIGludCBQTVBJX0FsbHJlZHVjZSh2b2lkKiAsIHZvaWQqLCBpbnQsIE1QSV9EYXRh dHlwZSwgTVBJX09wLCBNUElfQ29tbSk7CiAgaW50IFBNUElfUmVkdWNlX3NjYXR0ZXIodm9pZCog LCB2b2lkKiwgaW50ICosIE1QSV9EYXRhdHlwZSwgTVBJX09wLCBNUElfQ29tbSk7CiAgaW50IFBN UElfU2Nhbih2b2lkKiAsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX09wLCBNUElfQ29t bSApOwogIGludCBQTVBJX0dyb3VwX3NpemUoTVBJX0dyb3VwIGdyb3VwLCBpbnQgKik7CiAgaW50 IFBNUElfR3JvdXBfcmFuayhNUElfR3JvdXAgZ3JvdXAsIGludCAqKTsKICBpbnQgUE1QSV9Hcm91 cF90cmFuc2xhdGVfcmFua3MgKE1QSV9Hcm91cCwgaW50LCBpbnQgKiwgTVBJX0dyb3VwLCBpbnQg Kik7CiAgaW50IFBNUElfR3JvdXBfY29tcGFyZShNUElfR3JvdXAsIE1QSV9Hcm91cCwgaW50ICop OwogIGludCBQTVBJX0NvbW1fZ3JvdXAoTVBJX0NvbW0sIE1QSV9Hcm91cCAqKTsKICBpbnQgUE1Q SV9Hcm91cF91bmlvbihNUElfR3JvdXAsIE1QSV9Hcm91cCwgTVBJX0dyb3VwICopOwogIGludCBQ TVBJX0dyb3VwX2ludGVyc2VjdGlvbihNUElfR3JvdXAsIE1QSV9Hcm91cCwgTVBJX0dyb3VwICop OwogIGludCBQTVBJX0dyb3VwX2RpZmZlcmVuY2UoTVBJX0dyb3VwLCBNUElfR3JvdXAsIE1QSV9H cm91cCAqKTsKICBpbnQgUE1QSV9Hcm91cF9pbmNsKE1QSV9Hcm91cCBncm91cCwgaW50LCBpbnQg KiwgTVBJX0dyb3VwICopOwogIGludCBQTVBJX0dyb3VwX2V4Y2woTVBJX0dyb3VwIGdyb3VwLCBp bnQsIGludCAqLCBNUElfR3JvdXAgKik7CiAgaW50IFBNUElfR3JvdXBfcmFuZ2VfaW5jbChNUElf R3JvdXAgZ3JvdXAsIGludCwgaW50IFtdWzNdLCBNUElfR3JvdXAgKik7CiAgaW50IFBNUElfR3Jv dXBfcmFuZ2VfZXhjbChNUElfR3JvdXAgZ3JvdXAsIGludCwgaW50IFtdWzNdLCBNUElfR3JvdXAg Kik7CiAgaW50IFBNUElfR3JvdXBfZnJlZShNUElfR3JvdXAgKik7CiAgaW50IFBNUElfQ29tbV9z aXplKE1QSV9Db21tLCBpbnQgKik7CiAgaW50IFBNUElfQ29tbV9yYW5rKE1QSV9Db21tLCBpbnQg Kik7CiAgaW50IFBNUElfQ29tbV9jb21wYXJlKE1QSV9Db21tLCBNUElfQ29tbSwgaW50ICopOwog IGludCBQTVBJX0NvbW1fZHVwKE1QSV9Db21tLCBNUElfQ29tbSAqKTsKICBpbnQgUE1QSV9Db21t X2NyZWF0ZShNUElfQ29tbSwgTVBJX0dyb3VwLCBNUElfQ29tbSAqKTsKICBpbnQgUE1QSV9Db21t X3NwbGl0KE1QSV9Db21tLCBpbnQsIGludCwgTVBJX0NvbW0gKik7CiAgaW50IFBNUElfQ29tbV9m cmVlKE1QSV9Db21tICopOwogIGludCBQTVBJX0NvbW1fdGVzdF9pbnRlcihNUElfQ29tbSwgaW50 ICopOwogIGludCBQTVBJX0NvbW1fcmVtb3RlX3NpemUoTVBJX0NvbW0sIGludCAqKTsKICBpbnQg UE1QSV9Db21tX3JlbW90ZV9ncm91cChNUElfQ29tbSwgTVBJX0dyb3VwICopOwogIGludCBQTVBJ X0ludGVyY29tbV9jcmVhdGUoTVBJX0NvbW0sIGludCwgTVBJX0NvbW0sIGludCwgaW50LCBNUElf Q29tbSAqKTsKICBpbnQgUE1QSV9JbnRlcmNvbW1fbWVyZ2UoTVBJX0NvbW0sIGludCwgTVBJX0Nv bW0gKik7CiAgaW50IFBNUElfS2V5dmFsX2NyZWF0ZShNUElfQ29weV9mdW5jdGlvbiAqLCBNUElf RGVsZXRlX2Z1bmN0aW9uICosIGludCAqLCB2b2lkKik7CiAgaW50IFBNUElfS2V5dmFsX2ZyZWUo aW50ICopOwogIGludCBQTVBJX0F0dHJfcHV0KE1QSV9Db21tLCBpbnQsIHZvaWQqKTsKICBpbnQg UE1QSV9BdHRyX2dldChNUElfQ29tbSwgaW50LCB2b2lkICosIGludCAqKTsKICBpbnQgUE1QSV9B dHRyX2RlbGV0ZShNUElfQ29tbSwgaW50KTsKICBpbnQgUE1QSV9Ub3BvX3Rlc3QoTVBJX0NvbW0s IGludCAqKTsKICBpbnQgUE1QSV9DYXJ0X2NyZWF0ZShNUElfQ29tbSwgaW50LCBpbnQgKiwgaW50 ICosIGludCwgTVBJX0NvbW0gKik7CiAgaW50IFBNUElfRGltc19jcmVhdGUoaW50LCBpbnQsIGlu dCAqKTsKICBpbnQgUE1QSV9HcmFwaF9jcmVhdGUoTVBJX0NvbW0sIGludCwgaW50ICosIGludCAq LCBpbnQsIE1QSV9Db21tICopOwogIGludCBQTVBJX0dyYXBoZGltc19nZXQoTVBJX0NvbW0sIGlu dCAqLCBpbnQgKik7CiAgaW50IFBNUElfR3JhcGhfZ2V0KE1QSV9Db21tLCBpbnQsIGludCwgaW50 ICosIGludCAqKTsKICBpbnQgUE1QSV9DYXJ0ZGltX2dldChNUElfQ29tbSwgaW50ICopOwogIGlu dCBQTVBJX0NhcnRfZ2V0KE1QSV9Db21tLCBpbnQsIGludCAqLCBpbnQgKiwgaW50ICopOwogIGlu dCBQTVBJX0NhcnRfcmFuayhNUElfQ29tbSwgaW50ICosIGludCAqKTsKICBpbnQgUE1QSV9DYXJ0 X2Nvb3JkcyhNUElfQ29tbSwgaW50LCBpbnQsIGludCAqKTsKICBpbnQgUE1QSV9HcmFwaF9uZWln aGJvcnNfY291bnQoTVBJX0NvbW0sIGludCwgaW50ICopOwogIGludCBQTVBJX0dyYXBoX25laWdo Ym9ycyhNUElfQ29tbSwgaW50LCBpbnQsIGludCAqKTsKICBpbnQgUE1QSV9DYXJ0X3NoaWZ0KE1Q SV9Db21tLCBpbnQsIGludCwgaW50ICosIGludCAqKTsKICBpbnQgUE1QSV9DYXJ0X3N1YihNUElf Q29tbSwgaW50ICosIE1QSV9Db21tICopOwogIGludCBQTVBJX0NhcnRfbWFwKE1QSV9Db21tLCBp bnQsIGludCAqLCBpbnQgKiwgaW50ICopOwogIGludCBQTVBJX0dyYXBoX21hcChNUElfQ29tbSwg aW50LCBpbnQgKiwgaW50ICosIGludCAqKTsKICBpbnQgUE1QSV9HZXRfcHJvY2Vzc29yX25hbWUo Y2hhciAqLCBpbnQgKik7CiAgaW50IFBNUElfR2V0X3ZlcnNpb24oaW50ICosIGludCAqKTsKICBp bnQgUE1QSV9FcnJoYW5kbGVyX2NyZWF0ZShNUElfSGFuZGxlcl9mdW5jdGlvbiAqLCBNUElfRXJy aGFuZGxlciAqKTsKICBpbnQgUE1QSV9FcnJoYW5kbGVyX3NldChNUElfQ29tbSwgTVBJX0Vycmhh bmRsZXIpOwogIGludCBQTVBJX0VycmhhbmRsZXJfZ2V0KE1QSV9Db21tLCBNUElfRXJyaGFuZGxl ciAqKTsKICBpbnQgUE1QSV9FcnJoYW5kbGVyX2ZyZWUoTVBJX0VycmhhbmRsZXIgKik7CiAgaW50 IFBNUElfRXJyb3Jfc3RyaW5nKGludCwgY2hhciAqLCBpbnQgKik7CiAgaW50IFBNUElfRXJyb3Jf Y2xhc3MoaW50LCBpbnQgKik7CgogIGludCBQTVBJX1R5cGVfZ2V0X2VudmVsb3BlKE1QSV9EYXRh dHlwZSwgaW50ICosIGludCAqLCBpbnQgKiwgaW50ICopOyAKICBpbnQgUE1QSV9UeXBlX2dldF9j b250ZW50cyhNUElfRGF0YXR5cGUsIGludCwgaW50LCBpbnQsIGludCAqLCBNUElfQWludCAqLCBN UElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfVHlwZV9jcmVhdGVfc3ViYXJyYXkoaW50LCBpbnQg KiwgaW50ICosIGludCAqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0RhdGF0eXBlICopOwogIGlu dCBQTVBJX1R5cGVfY3JlYXRlX2RhcnJheShpbnQsIGludCwgaW50LCBpbnQgKiwgaW50ICosIGlu dCAqLCBpbnQgKiwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgUE1Q SV9JbmZvX2NyZWF0ZShNUElfSW5mbyAqKTsKICBpbnQgUE1QSV9JbmZvX3NldChNUElfSW5mbywg Y2hhciAqLCBjaGFyICopOwogIGludCBQTVBJX0luZm9fZGVsZXRlKE1QSV9JbmZvLCBjaGFyICop OwogIGludCBQTVBJX0luZm9fZ2V0KE1QSV9JbmZvLCBjaGFyICosIGludCwgY2hhciAqLCBpbnQg Kik7CiAgaW50IFBNUElfSW5mb19nZXRfdmFsdWVsZW4oTVBJX0luZm8sIGNoYXIgKiwgaW50ICos IGludCAqKTsKICBpbnQgUE1QSV9JbmZvX2dldF9ua2V5cyhNUElfSW5mbywgaW50ICopOwogIGlu dCBQTVBJX0luZm9fZ2V0X250aGtleShNUElfSW5mbywgaW50LCBjaGFyICopOwogIGludCBQTVBJ X0luZm9fZHVwKE1QSV9JbmZvLCBNUElfSW5mbyAqKTsKICBpbnQgUE1QSV9JbmZvX2ZyZWUoTVBJ X0luZm8gKik7CgpNUElfRmludCBQTVBJX0luZm9fYzJmKE1QSV9JbmZvKTsKTVBJX0luZm8gUE1Q SV9JbmZvX2YyYyhNUElfRmludCk7CgogCiAgaW50IFBNUElfSW5pdChpbnQgKiwgY2hhciAqKiop OwogIGludCBQTVBJX0luaXRfdGhyZWFkKCBpbnQgKiwgY2hhciAqKiosIGludCwgaW50ICogKTsK ICBpbnQgUE1QSV9GaW5hbGl6ZSh2b2lkKTsKICBpbnQgUE1QSV9Jbml0aWFsaXplZChpbnQgKik7 CiAgaW50IFBNUElfQWJvcnQoTVBJX0NvbW0sIGludCk7CiAKICBpbnQgUE1QSV9Db21tX3NldF9u YW1lKE1QSV9Db21tLCBjaGFyICopOwogIGludCBQTVBJX0NvbW1fZ2V0X25hbWUoTVBJX0NvbW0s IGNoYXIgKiwgaW50ICopOyAKCgoKCgoKCgogIGludCBQTVBJX1Bjb250cm9sKGNvbnN0IGludCwg Li4uKTsKCgogCiAgaW50IFBNUElfU3RhdHVzX3NldF9jYW5jZWxsZWQoIE1QSV9TdGF0dXMgKiwg aW50ICk7CiAgaW50IFBNUElfU3RhdHVzX3NldF9lbGVtZW50cyggTVBJX1N0YXR1cyAqLCBNUElf RGF0YXR5cGUsIGludCApOwoKCiAKCgp9CiAKIAoKCgoKCgoKCgoKCgojIDQgIlNrZWxldG9uLmgi IDIKCgogCiAKIAogCiAKIAogCgogCiAKIApjbGFzcyBFeGNlcHRpb257fTsKY2xhc3MgVW5kZWZp bmVkU291cmNlRXhjZXB0aW9uOiBFeGNlcHRpb257fTsKY2xhc3MgVW5kZWZpbmVkRGVzdGluYXRp b25FeGNlcHRpb246IEV4Y2VwdGlvbnt9OwpjbGFzcyBOb25Mb2NhbEFjY2Vzc0V4Y2VwdGlvbjog RXhjZXB0aW9ue307CmNsYXNzIE1pc3NpbmdJbml0aWFsaXphdGlvbkV4Y2VwdGlvbjogRXhjZXB0 aW9ue307CmNsYXNzIElsbGVnYWxHZXRFeGNlcHRpb246IEV4Y2VwdGlvbnt9OwpjbGFzcyBJbGxl Z2FsUHV0RXhjZXB0aW9uOiBFeGNlcHRpb257fTsKY2xhc3MgSWxsZWdhbFBhcnRpdGlvbkV4Y2Vw dGlvbjogRXhjZXB0aW9ue307CmNsYXNzIFBhcnRpdGlvbmluZ0ltcG9zc2libGVFeGNlcHRpb246 IEV4Y2VwdGlvbnt9OwpjbGFzcyBJbGxlZ2FsUGVybXV0ZUV4Y2VwdGlvbjogRXhjZXB0aW9ue307 Cgpjb25zdCBzdGF0aWMgaW50IHVuZGVmaW5lZCA9IC0xOwpzdGF0aWMgaW50IERlYnVnID0gMDsK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgogCgppbmxpbmUgaW50IGxvZzIo aW50IG4pe2ludCBpOyBmb3IoaT0wOyBuPjA7IGkrKykgbiAvPSAyOyByZXR1cm4gaS0xO30gIAoK dGVtcGxhdGUgPGNsYXNzIEMxLCBjbGFzcyBDMj4KQzEgcHJvajFfMihDMSBhLCBDMiBiKXtyZXR1 cm4gYTt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQzEsIGNsYXNzIEMyPgpDMiBwcm9qMl8yKEMxIGEsIEMy IGIpe3JldHVybiBiO30KCiAKIAogCgogCiAKCiAKIAogCgp0eXBlZGVmIGludCBQcm9jZXNzb3JO bzsKCnN0YXRpYyBQcm9jZXNzb3JObyBydW5uaW5nUHJvY2Vzc29yTm8gPSAwOwpzdGF0aWMgUHJv Y2Vzc29yTm8gbXlpZCA9IHVuZGVmaW5lZDsgIApzdGF0aWMgUHJvY2Vzc29yTm8gbXlFbnRyYW5j ZSA9IHVuZGVmaW5lZDsKc3RhdGljIFByb2Nlc3Nvck5vIG15RXhpdCA9IHVuZGVmaW5lZDsgCnN0 YXRpYyBpbnQgbnVtcHJvY3M7CmNsYXNzIFByb2Nlc3M7CnN0YXRpYyBQcm9jZXNzKiBteVByb2Nl c3MgPSBfX251bGwgOwoKIAogCiAKIAogCnN0cnVjdCBFbXB0eXsKfTsKCnRlbXBsYXRlIDxjbGFz cyBDPgpDIGV4dGVuZChDICgqZikoKSwgRW1wdHkgZHVtbXkpe3JldHVybiAoKmYpKCk7fQoKIAp0 ZW1wbGF0ZTxjbGFzcyBDPgp2b2lkIHJlY2VpdmUoUHJvY2Vzc29yTm8gc291cmNlLCBDKiB2YWxy ZWYsIGludCBzaXplLCBNUElfU3RhdHVzKiBzdGF0KXsKICAgaWYgKHNvdXJjZSA9PSB1bmRlZmlu ZWQpIHRocm93IFVuZGVmaW5lZFNvdXJjZUV4Y2VwdGlvbigpOwogICBpZiAoRGVidWcpIHtwcmlu dGYoIiVkIHdhaXRpbmcgZm9yIG1lc3NhZ2Ugb2Ygc2l6ZSAlZCBmcm9tICVkXG4iLAogICAgICAg ICAgICAgICAgICAgICAgbXlpZCxzaXplLHNvdXJjZSk7IGZmbHVzaCgoJl9faW9iWzFdKSApO30K ICAgTVBJX1JlY3YodmFscmVmLCBzaXplLCAoKE1QSV9EYXRhdHlwZSkzKSAsIHNvdXJjZSwgKC0x KSAsIDkxICwgc3RhdCk7IAogICBpZiAoRGVidWcpIHtwcmludGYoInJlY2VpdmVkIG1lc3NhZ2Ug b2Ygc2l6ZSAlZCB3aXRoIHRhZyAlZCBmcm9tICVkIGJ5ICVkXG4iLAogICAgICAgICAgICAgICAg ICAgICAgc2l6ZSwoKnN0YXQpLk1QSV9UQUcsc291cmNlLG15aWQpOyAKICAgICBmb3IoaW50IGk9 MDsgaTxzaXplL3NpemVvZihDKTsgaSsrKSBwcmludGYoIiVkLCIsKih2YWxyZWYraSkpOyBwcmlu dGYoIlxuIik7CiAgICAgZmZsdXNoKCgmX19pb2JbMV0pICk7fX0KCnRlbXBsYXRlPGNsYXNzIEM+ CnZvaWQgbm9uYmxvY2tpbmdSZWNlaXZlKFByb2Nlc3Nvck5vIHNvdXJjZSwgQyogdmFscmVmLCBp bnQgc2l6ZSwgTVBJX1JlcXVlc3QqIHJlcSl7CiAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSB0 aHJvdyBVbmRlZmluZWRTb3VyY2VFeGNlcHRpb24oKTsKICAgTVBJX0lyZWN2KHZhbHJlZiwgc2l6 ZSwgKChNUElfRGF0YXR5cGUpMykgLCBzb3VyY2UsICgtMSkgLCA5MSAsIHJlcSk7fQoKdGVtcGxh dGU8Y2xhc3MgQz4Kdm9pZCBzZW5kKFByb2Nlc3Nvck5vIGRlc3RpbmF0aW9uLCBDKiB2YWxyZWYs IGludCBzaXplKXsKICAgaWYgKGRlc3RpbmF0aW9uID09IHVuZGVmaW5lZCkgdGhyb3cgVW5kZWZp bmVkRGVzdGluYXRpb25FeGNlcHRpb24oKTsKICAgaWYgKERlYnVnKSB7cHJpbnRmKCJzZW5kaW5n IG1lc3NhZ2Ugb2Ygc2l6ZSAlZCBmcm9tICVkIHRvICVkXG4iLAogICAgICAgICAgICAgICAgICAg ICAgIHNpemUsbXlpZCxkZXN0aW5hdGlvbik7IGZmbHVzaCgoJl9faW9iWzFdKSApO30KICAgaWYg KERlYnVnKSB7Zm9yKGludCBpPTA7IGk8c2l6ZS9zaXplb2YoQyk7IGkrKykgcHJpbnRmKCIlZCwi LCoodmFscmVmK2kpKTsgcHJpbnRmKCJcbiIpO2ZmbHVzaCgoJl9faW9iWzFdKSApO30KICAgTVBJ X1NlbmQodmFscmVmLCBzaXplLCAoKE1QSV9EYXRhdHlwZSkzKSAsIGRlc3RpbmF0aW9uLCAxICwg OTEgKTt9Cgp0ZW1wbGF0ZTxjbGFzcyBDPgp2b2lkIHN5bmNTZW5kKFByb2Nlc3Nvck5vIGRlc3Rp bmF0aW9uLCBDKiB2YWxyZWYsIGludCBzaXplKXsKICAgaWYgKGRlc3RpbmF0aW9uID09IHVuZGVm aW5lZCkgdGhyb3cgVW5kZWZpbmVkRGVzdGluYXRpb25FeGNlcHRpb24oKTsKICAgaWYgKERlYnVn KSB7cHJpbnRmKCJzZW5kaW5nIG1lc3NhZ2Ugb2Ygc2l6ZSAlZCBzeW5jaHJvbm91c2x5IGZyb20g JWQgdG8gJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxteWlkLGRlc3RpbmF0aW9u KTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICBpZiAoRGVidWcpIHtmb3IoaW50IGk9MDsgaTxz aXplL3NpemVvZihDKTsgaSsrKSBwcmludGYoIiVkLCIsKih2YWxyZWYraSkpOyBwcmludGYoIlxu Iik7ZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICBNUElfU3NlbmQodmFscmVmLCBzaXplLCAoKE1Q SV9EYXRhdHlwZSkzKSAsIGRlc3RpbmF0aW9uLCAxICwgOTEgKTt9Cgp0ZW1wbGF0ZTxjbGFzcyBD Pgp2b2lkICBub25ibG9ja2luZ1NlbmQoUHJvY2Vzc29yTm8gZGVzdGluYXRpb24sIEMqIHZhbHJl ZiwgaW50IHNpemUsIE1QSV9SZXF1ZXN0KiByZXEpewogICBpZiAoZGVzdGluYXRpb24gPT0gdW5k ZWZpbmVkKSB0aHJvdyBVbmRlZmluZWREZXN0aW5hdGlvbkV4Y2VwdGlvbigpOwogICBpZiAoRGVi dWcpIHtwcmludGYoInNlbmRpbmcgbWVzc2FnZSBvZiBzaXplICVkIGZyb20gJWQgdG8gJWRcbiIs CiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxteWlkLGRlc3RpbmF0aW9uKTsgZmZsdXNoKCgm X19pb2JbMV0pICk7fQogICBpZiAoRGVidWcpIHtmb3IoaW50IGk9MDsgaTxzaXplL3NpemVvZihD KTsgaSsrKSBwcmludGYoIiVkLCIsKih2YWxyZWYraSkpOyBwcmludGYoIlxuIik7ZmZsdXNoKCgm X19pb2JbMV0pICk7fQogICBNUElfSXNlbmQodmFscmVmLCBzaXplLCAoKE1QSV9EYXRhdHlwZSkz KSAsIGRlc3RpbmF0aW9uLCAxICwgOTEgLCByZXEpO30KCnZvaWQgc2VuZFN0b3AoUHJvY2Vzc29y Tm8gZGVzdGluYXRpb24pewogICBpZiAoZGVzdGluYXRpb24gPT0gdW5kZWZpbmVkKSB0aHJvdyBV bmRlZmluZWREZXN0aW5hdGlvbkV4Y2VwdGlvbigpOwogICBpZiAoRGVidWcpIHtwcmludGYoInNl bmRpbmcgc3RvcCBtZXNzYWdlIGZyb20gJWQgdG8gJWRcbiIsbXlpZCxkZXN0aW5hdGlvbik7IGZm bHVzaCgoJl9faW9iWzFdKSApO30KICAgaW50IGR1bW15OwogICBNUElfU2VuZCgmZHVtbXksIHNp emVvZihkdW1teSksICgoTVBJX0RhdGF0eXBlKTMpICwgZGVzdGluYXRpb24sIDIgLCA5MSApO30K CnZvaWQgc2VuZFRlcm1pbmF0aW9uVGVzdChQcm9jZXNzb3JObyBkZXN0aW5hdGlvbil7CiAgIGlm IChkZXN0aW5hdGlvbiA9PSB1bmRlZmluZWQpIHRocm93IFVuZGVmaW5lZERlc3RpbmF0aW9uRXhj ZXB0aW9uKCk7CiAgIGlmIChEZWJ1Zykge3ByaW50Zigic2VuZGluZyB0ZXJtaW5hdGlvbiB0ZXN0 IGZyb20gJWQgdG8gJWRcbiIsbXlpZCxkZXN0aW5hdGlvbik7IGZmbHVzaCgoJl9faW9iWzFdKSAp O30KICAgaW50IGR1bW15OwogICBNUElfU2VuZCgmZHVtbXksIHNpemVvZihkdW1teSksICgoTVBJ X0RhdGF0eXBlKTMpICwgZGVzdGluYXRpb24sIDMgLCA5MSApO30KIAp0ZW1wbGF0ZTxjbGFzcyBD Pgp2b2lkIHNlbmRSZWNlaXZlKFByb2Nlc3Nvck5vIGRlc3RpbmF0aW9uLCBDKiB2YWxyZWYxLCBD KiB2YWxyZWYyLCBpbnQgc2l6ZSl7ICAgCiAgIGlmIChkZXN0aW5hdGlvbiA9PSB1bmRlZmluZWQp IHRocm93IFVuZGVmaW5lZERlc3RpbmF0aW9uRXhjZXB0aW9uKCk7CiAgIE1QSV9TdGF0dXMgc3Rh dDsKICAgIAogICAgCiAgICAKICAgIAogICBpZiAoZGVzdGluYXRpb24gPiBteWlkKSB7c3luY1Nl bmQoZGVzdGluYXRpb24sdmFscmVmMSxzaXplKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZWNlaXZlKGRlc3RpbmF0aW9uLHZhbHJlZjIsc2l6ZSwmc3RhdCk7fQogICBlbHNlICB7cmVj ZWl2ZShkZXN0aW5hdGlvbix2YWxyZWYyLHNpemUsJnN0YXQpOyBzeW5jU2VuZChkZXN0aW5hdGlv bix2YWxyZWYxLHNpemUpO319CiAKCiAKIAogCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgQSwgY2xhc3Mg Uj4KY2xhc3MgRmN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoK cHVibGljOgogIHZpcnR1YWwgaW5saW5lIFIgb3BlcmF0b3IoKShjb25zdCBBIGEpIGNvbnN0ID0g MDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQSwgY2xhc3MgUiwgY2xhc3MgRj4gCmNsYXNzIEZjdDE6 IHB1YmxpYyBGY3Q8QSxSPnsKICBjb25zdCBGICBmOwoKcHVibGljOgogIEZjdDEoY29uc3QgRiAg X2YpOiBmKF9mKSB7fSAgCiAgaW5saW5lIFIgb3BlcmF0b3IoKShjb25zdCBBIGEpIGNvbnN0IHsg cmV0dXJuIGYoYSk7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIFIsIGNsYXNzIEY+IApv c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBGY3QxPEEsUixGPiYgZil7CiAg b3MgPDwgInVuYXJ5IGZ1bmN0aW9uIjsKICByZXR1cm4gb3M7fQoKIAp0ZW1wbGF0ZSA8Y2xhc3Mg QTEsIGNsYXNzIEEyLCBjbGFzcyBSLCBjbGFzcyBGPgpjbGFzcyBGY3QyIHsKICBjb25zdCBGICBm OwoKICBzdHJ1Y3QgUGFydGlhbEFwcGwgewogICAgY29uc3QgRmN0MjxBMSxBMixSLEY+ICBmOwog ICAgY29uc3QgQTEgYTE7CiAgICBQYXJ0aWFsQXBwbChjb25zdCBGY3QyPEExLEEyLFIsRj4gIGYy LCBBMSBhKTogZihmMiksIGExKGEpIHt9CiAgICBpbmxpbmUgUiBvcGVyYXRvcigpKEEyIGIpIGNv bnN0IHsgcmV0dXJuIGYoYTEsYik7fQogIH07CgpwdWJsaWM6CiAgRmN0Mihjb25zdCBGICBfZik6 IGYoX2YpIHt9ICAKICBpbmxpbmUgY29uc3QgRmN0MTxBMixSLFBhcnRpYWxBcHBsPiBvcGVyYXRv cigpKGNvbnN0IEExIGEpIGNvbnN0IHsKICAgICByZXR1cm4gRmN0MTxBMixSLFBhcnRpYWxBcHBs PihQYXJ0aWFsQXBwbCgqdGhpcyxhKSk7fQoKICAgCiAgaW5saW5lIFIgb3BlcmF0b3IoKShjb25z dCBBMSBhMSwgQTIgYTIpIGNvbnN0IHsgcmV0dXJuIGYoYTEsYTIpO30KfTsKCnRlbXBsYXRlIDxj bGFzcyBBMSwgY2xhc3MgQTIsIGNsYXNzIFIsIGNsYXNzIEY+IApvc3RyZWFtJiBvcGVyYXRvcjw8 KG9zdHJlYW0mIG9zLCBjb25zdCBGY3QyPEExLEEyLFIsRj4mIGYpewogIG9zIDw8ICJiaW5hcnkg ZnVuY3Rpb24iOwogIHJldHVybiBvczt9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNzIEEy LCBjbGFzcyBBMywgY2xhc3MgUiwgY2xhc3MgRj4KY2xhc3MgRmN0MyB7CiAgY29uc3QgRiAgZjsK CiAgc3RydWN0IFBhcnRpYWxBcHBsMSB7CiAgICBjb25zdCBGY3QzPEExLEEyLEEzLFIsRj4gIGY7 CiAgICBjb25zdCBBMSBhMTsKICAgIGNvbnN0IEEyIGEyOwogICAgUGFydGlhbEFwcGwxKGNvbnN0 IEZjdDM8QTEsQTIsQTMsUixGPiBmMiwgQTEgYSwgQTIgYik6IGYoZjIpLCBhMShhKSwgYTIoYikg e30KICAgIGlubGluZSBSIG9wZXJhdG9yKCkoQTMgYTMpIGNvbnN0IHtyZXR1cm4gZihhMSxhMixh Myk7fQogIH07CgogIHN0cnVjdCBQYXJ0aWFsQXBwbDIgewogICAgY29uc3QgRmN0MzxBMSxBMixB MyxSLEY+IGY7CiAgICBjb25zdCBBMSBhMTsKICAgIFBhcnRpYWxBcHBsMihjb25zdCBGY3QzPEEx LEEyLEEzLFIsRj4gZjMsIEExIGEpOiBmKGYzKSwgYTEoYSkge30KICAgIGlubGluZSBSIG9wZXJh dG9yKCkoQTIgYTIpIGNvbnN0IHtyZXR1cm4gUGFydGlhbEFwcGwxKGYsYTEsYTIpO30KICAgIGlu bGluZSBSIG9wZXJhdG9yKCkoQTIgYTIsIEEzIGEzKSBjb25zdCB7cmV0dXJuIGYoYTEsYTIsYTMp O30KICB9OwoKcHVibGljOgogIEZjdDMoY29uc3QgRiAgX2YpOiBmKF9mKSB7fSAgCiAgaW5saW5l IGNvbnN0IEZjdDI8QTIsQTMsUixQYXJ0aWFsQXBwbDI+IG9wZXJhdG9yKCkoY29uc3QgQTEgYSkg Y29uc3QgewogICAgIHJldHVybiBGY3QyPEEyLEEzLFIsUGFydGlhbEFwcGwyPihQYXJ0aWFsQXBw bDIoKnRoaXMsYSkpO30KCiAgIAogIGlubGluZSBSIG9wZXJhdG9yKCkoY29uc3QgQTEgYTEsIEEy IGEyLCBBMyBhMykgY29uc3Qge3JldHVybiBmKGExLGEyLGEzKTt9IAogIAogIGlubGluZSBSIG9w ZXJhdG9yKCkoY29uc3QgQTEgYTEsIEEyIGEyKSBjb25zdCB7cmV0dXJuIFBhcnRpYWxBcHBsMShm LGExLGEyKTt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNzIEEyLCBjbGFzcyBBMywgY2xh c3MgUiwgY2xhc3MgRj4gCm9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IEZj dDM8QTEsQTIsQTMsUixGPiYgZil7CiAgb3MgPDwgIjMtYXJ5IGZ1bmN0aW9uIjsKICByZXR1cm4g b3M7fQoKIAoKdGVtcGxhdGUgPGNsYXNzIEExLCBjbGFzcyBBMiwgY2xhc3MgQTMsIGNsYXNzIEE0 LCBjbGFzcyBSLCBjbGFzcyBGPgpjbGFzcyBGY3Q0IHsKICBjb25zdCBGICBmOwoKICBzdHJ1Y3Qg UGFydGlhbEFwcGwxIHsKICAgIGNvbnN0IEZjdDQ8QTEsQTIsQTMsQTQsUixGPiAgZjsKICAgIGNv bnN0IEExIGExOwogICAgY29uc3QgQTIgYTI7ICAKICAgIGNvbnN0IEEzIGEzOwogICAgUGFydGlh bEFwcGwxKGNvbnN0IEZjdDQ8QTEsQTIsQTMsQTQsUixGPiBmNCwgQTEgYSwgQTIgYiwgQTMgYyk6 IGYoZjQpLCBhMShhKSwgYTIoYiksIGEzKGMpe30KICAgIGlubGluZSBSIG9wZXJhdG9yKCkoQTQg YTQpIGNvbnN0IHtyZXR1cm4gZihhMSxhMixhMyxhNCk7fQogIH07CgogIHN0cnVjdCBQYXJ0aWFs QXBwbDIgewogICAgY29uc3QgRmN0NDxBMSxBMixBMyxBNCxSLEY+IGY7CiAgICBjb25zdCBBMSBh MTsgCiAgICBjb25zdCBBMiBhMjsgIAogICAgUGFydGlhbEFwcGwyKGNvbnN0IEZjdDQ8QTEsQTIs QTMsQTQsUixGPiBmNCwgQTEgYSwgQTIgYik6IGYoZjQpLCBhMShhKSwgYTIoYikge30KICAgIGlu bGluZSBSIG9wZXJhdG9yKCkoQTMgYTMpIGNvbnN0IHtyZXR1cm4gUGFydGlhbEFwcGwxKGYsYTEs YTIsYTMpO30KICAgIGlubGluZSBSIG9wZXJhdG9yKCkoQTMgYTMsIEE0IGE0KSBjb25zdCB7cmV0 dXJuIGYoYTEsYTIsYTMsYTQpO30KICB9OwoKICBzdHJ1Y3QgUGFydGlhbEFwcGwzIHsKICAgIGNv bnN0IEZjdDQ8QTEsQTIsQTMsQTQsUixGPiBmOwogICAgY29uc3QgQTEgYTE7CiAgICBQYXJ0aWFs QXBwbDMoY29uc3QgRmN0NDxBMSxBMixBMyxBNCxSLEY+IGY0LCBBMSBhKTogZihmNCksIGExKGEp IHt9CiAgICBpbmxpbmUgUiBvcGVyYXRvcigpKEEyIGEyKSBjb25zdCB7cmV0dXJuIFBhcnRpYWxB cHBsMihmLGExLGEyKTt9CiAgICBpbmxpbmUgUiBvcGVyYXRvcigpKEEyIGEyLCBBMyBhMykgY29u c3Qge3JldHVybiBQYXJ0aWFsQXBwbDEoZixhMSxhMixhMyk7fSAKICAgIGlubGluZSBSIG9wZXJh dG9yKCkoQTIgYTIsIEEzIGEzLCBBNCBhNCkgY29uc3Qge3JldHVybiBmKGExLGEyLGEzLGE0KTt9 CiAgfTsKCnB1YmxpYzoKICBGY3Q0KGNvbnN0IEYgIF9mKTogZihfZikge30gIAogIGlubGluZSBj b25zdCBGY3QzPEEyLEEzLEE0LFIsUGFydGlhbEFwcGwzPiBvcGVyYXRvcigpKGNvbnN0IEExIGEp IGNvbnN0IHsKICAgICByZXR1cm4gRmN0MzxBMixBMyxBNCxSLFBhcnRpYWxBcHBsMz4oUGFydGlh bEFwcGwzKCp0aGlzLGEpKTt9CgogICAKICBpbmxpbmUgUiBvcGVyYXRvcigpKGNvbnN0IEExIGEx LCBBMiBhMiwgQTMgYTMsIEE0IGE0KSBjb25zdCB7cmV0dXJuIGYoYTEsYTIsYTMsYTQpO30KIAog IGlubGluZSBSIG9wZXJhdG9yKCkoY29uc3QgQTEgYTEsIEEyIGEyLCBBMyBhMykgY29uc3Qge3Jl dHVybiBQYXJ0aWFsQXBwbDEoZixhMSxhMixhMyk7fSAKCiAgaW5saW5lIFIgb3BlcmF0b3IoKShj b25zdCBBMSBhMSwgQTIgYTIpIGNvbnN0IHtyZXR1cm4gUGFydGlhbEFwcGwyKGYsYTEsYTIpO30K fTsKCnRlbXBsYXRlIDxjbGFzcyBBMSwgY2xhc3MgQTIsIGNsYXNzIEEzLCBjbGFzcyBBNCwgY2xh c3MgUiwgY2xhc3MgRj4gCm9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IEZj dDQ8QTEsQTIsQTMsQTQsUixGPiYgZil7CiAgb3MgPDwgIjQtYXJ5IGZ1bmN0aW9uIjsKICByZXR1 cm4gb3M7fQogCgp0ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNzIEEyLCBjbGFzcyBBMywgY2xhc3Mg QTQsIGNsYXNzIEE1LCBjbGFzcyBSLCBjbGFzcyBGPgpjbGFzcyBGY3Q1IHsKICBjb25zdCBGICBm OwoKICBzdHJ1Y3QgUGFydGlhbEFwcGwxIHsKICAgIGNvbnN0IEZjdDU8QTEsQTIsQTMsQTQsQTUs UixGPiAgZjsKICAgIGNvbnN0IEExIGExOwogICAgY29uc3QgQTIgYTI7ICAKICAgIGNvbnN0IEEz IGEzOwogICAgY29uc3QgQTQgYTQ7CiAgICBQYXJ0aWFsQXBwbDEoY29uc3QgRmN0NTxBMSxBMixB MyxBNCxBNSxSLEY+IGY0LCBBMSBhLCBBMiBiLCBBMyBjLCBBNCBkKTogCiAgICAgICBmKGY0KSwg YTEoYSksIGEyKGIpLCBhMyhjKSwgYTQoZCl7fQogICAgaW5saW5lIFIgb3BlcmF0b3IoKShBNSBh NSkgY29uc3Qge3JldHVybiBmKGExLGEyLGEzLGE0LGE1KTt9CiAgfTsKCiAgc3RydWN0IFBhcnRp YWxBcHBsMiB7CiAgICBjb25zdCBGY3Q1PEExLEEyLEEzLEE0LEE1LFIsRj4gZjsKICAgIGNvbnN0 IEExIGExOyAKICAgIGNvbnN0IEEyIGEyOwogICAgY29uc3QgQTMgYTM7ICAKICAgIFBhcnRpYWxB cHBsMihjb25zdCBGY3Q1PEExLEEyLEEzLEE0LEE1LFIsRj4gZjQsIEExIGEsIEEyIGIsIEEzIGMp OiBmKGY0KSwgYTEoYSksIGEyKGIpLCBhMyhjKSB7fQogICAgaW5saW5lIFIgb3BlcmF0b3IoKShB NCBhNCkgY29uc3Qge3JldHVybiBQYXJ0aWFsQXBwbDEoZixhMSxhMixhMyxhNCk7fQogICAgaW5s aW5lIFIgb3BlcmF0b3IoKShBNCBhNCwgQTUgYTUpIGNvbnN0IHtyZXR1cm4gZihhMSxhMixhMyxh NCxhNSk7fQogIH07CgogIHN0cnVjdCBQYXJ0aWFsQXBwbDMgewogICAgY29uc3QgRmN0NTxBMSxB MixBMyxBNCxBNSxSLEY+IGY7CiAgICBjb25zdCBBMSBhMTsKICAgIGNvbnN0IEEyIGEyOwogICAg UGFydGlhbEFwcGwzKGNvbnN0IEZjdDU8QTEsQTIsQTMsQTQsQTUsUixGPiBmNCwgQTEgYSwgQTIg Yik6IGYoZjQpLCBhMShhKSwgYTIoYikge30KICAgIGlubGluZSBSIG9wZXJhdG9yKCkoQTMgYTMp IGNvbnN0IHtyZXR1cm4gUGFydGlhbEFwcGwyKGYsYTEsYTIsYTMpO30KICAgIGlubGluZSBSIG9w ZXJhdG9yKCkoQTMgYTMsIEE0IGE0KSBjb25zdCB7cmV0dXJuIFBhcnRpYWxBcHBsMShmLGExLGEy LGEzLGE0KTt9IAogICAgaW5saW5lIFIgb3BlcmF0b3IoKShBMyBhMywgQTQgYTQsIEE1IGE1KSBj b25zdCB7cmV0dXJuIGYoYTEsYTIsYTMsYTQsYTUpO30KICB9OwoKICBzdHJ1Y3QgUGFydGlhbEFw cGw0IHsKICAgIGNvbnN0IEZjdDU8QTEsQTIsQTMsQTQsQTUsUixGPiBmOwogICAgY29uc3QgQTEg YTE7CiAgICBQYXJ0aWFsQXBwbDQoY29uc3QgRmN0NTxBMSxBMixBMyxBNCxBNSxSLEY+IGY0LCBB MSBhKTogZihmNCksIGExKGEpIHt9CiAgICBpbmxpbmUgUiBvcGVyYXRvcigpKEEyIGEyKSBjb25z dCB7cmV0dXJuIFBhcnRpYWxBcHBsMyhmLGExLGEyKTt9CiAgICBpbmxpbmUgUiBvcGVyYXRvcigp KEEyIGEyLCBBMyBhMykgY29uc3Qge3JldHVybiBQYXJ0aWFsQXBwbDIoZixhMSxhMixhMyk7fSAK ICAgIGlubGluZSBSIG9wZXJhdG9yKCkoQTIgYTIsIEEzIGEzLCBBNCBhNCkgY29uc3Qge3JldHVy biBQYXJ0aWFsQXBwbDEoZixhMSxhMixhMyxhNCk7fSAKICAgIGlubGluZSBSIG9wZXJhdG9yKCko QTIgYTIsIEEzIGEzLCBBNCBhNCwgQTUgYTUpIGNvbnN0IHtyZXR1cm4gZihhMSxhMixhMyxhNCxh NSk7fQogIH07CgpwdWJsaWM6CiAgRmN0NShjb25zdCBGICBfZik6IGYoX2YpIHt9ICAKICBpbmxp bmUgY29uc3QgRmN0NDxBMixBMyxBNCxBNSxSLFBhcnRpYWxBcHBsND4gb3BlcmF0b3IoKShjb25z dCBBMSBhKSBjb25zdCB7CiAgICAgcmV0dXJuIEZjdDQ8QTIsQTMsQTQsQTUsUixQYXJ0aWFsQXBw bDQ+KFBhcnRpYWxBcHBsNCgqdGhpcyxhKSk7fQoKICAgCiAgaW5saW5lIFIgb3BlcmF0b3IoKShj b25zdCBBMSBhMSwgQTIgYTIsIEEzIGEzLCBBNCBhNCwgQTUgYTUpIGNvbnN0IHtyZXR1cm4gZihh MSxhMixhMyxhNCxhNSk7fQogIAogIGlubGluZSBSIG9wZXJhdG9yKCkoY29uc3QgQTEgYTEsIEEy IGEyLCBBMyBhMywgQTQgYTQpIGNvbnN0IHtyZXR1cm4gUGFydGlhbEFwcGwxKGYsYTEsYTIsYTMs YTQpO30gCgogIGlubGluZSBSIG9wZXJhdG9yKCkoY29uc3QgQTEgYTEsIEEyIGEyLCBBMyBhMykg Y29uc3Qge3JldHVybiBQYXJ0aWFsQXBwbDIoZixhMSxhMixhMyk7fSAKCiAgaW5saW5lIFIgb3Bl cmF0b3IoKShjb25zdCBBMSBhMSwgQTIgYTIpIGNvbnN0IHtyZXR1cm4gUGFydGlhbEFwcGwzKGYs YTEsYTIpO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBBMSwgY2xhc3MgQTIsIGNsYXNzIEEzLCBjbGFz cyBBNCwgY2xhc3MgQTUsIGNsYXNzIFIsIGNsYXNzIEY+IApvc3RyZWFtJiBvcGVyYXRvcjw8KG9z dHJlYW0mIG9zLCBjb25zdCBGY3Q1PEExLEEyLEEzLEE0LEE1LFIsRj4mIGYpewogIG9zIDw8ICI1 LWFyeSBmdW5jdGlvbiI7CiAgcmV0dXJuIG9zO30KCiAKCgogCnRlbXBsYXRlIDxjbGFzcyBBMSwg Y2xhc3MgUj4Kc3RydWN0IE1rT3AxewogIHR5cGVkZWYgUiAoKmZ1bmNfcHRyX3QpKEExKTsKICBj b25zdCBmdW5jX3B0cl90IGY7CiAgTWtPcDEoY29uc3QgZnVuY19wdHJfdCBfZikgOiBmKF9mKSB7 fQogIGlubGluZSBSIG9wZXJhdG9yKCkoQTEgYTEpIGNvbnN0IHsKICAgIHJldHVybiBmKGExKTt9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNzIFI+CmlubGluZSBGY3QxPEExLFIsTWtPcDE8 QTEsUj4gPiBjdXJyeShSICgqZikoQTEpKXsKICByZXR1cm4gRmN0MTxBMSxSLE1rT3AxPEExLFI+ ID4gKCBNa09wMTxBMSxSPihmKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBMSwgY2xhc3MgQTIsIGNs YXNzIFI+CnN0cnVjdCBNa09wMnsKICB0eXBlZGVmIFIgKCpmdW5jX3B0cl90KShBMSxBMik7CiAg Y29uc3QgZnVuY19wdHJfdCBmOwogIE1rT3AyKGNvbnN0IGZ1bmNfcHRyX3QgX2YpIDogZihfZikg e30KICBpbmxpbmUgUiBvcGVyYXRvcigpKEExIGExLCBBMiBhMikgY29uc3QgewogICAgcmV0dXJu IGYoYTEsYTIpO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBBMSwgY2xhc3MgQTIsIGNsYXNzIFI+Cmlu bGluZSBjb25zdCBGY3QyPEExLEEyLFIsTWtPcDI8QTEsQTIsUj4gPiBjdXJyeShSICgqIGYpKEEx LEEyKSl7CiAgcmV0dXJuIEZjdDI8QTEsQTIsUixNa09wMjxBMSxBMixSPiA+ICggTWtPcDI8QTEs QTIsUj4oZikpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIEExLCBjbGFzcyBBMiwgY2xhc3MgQTMsIGNs YXNzIFI+CnN0cnVjdCBNa09wM3sKICB0eXBlZGVmIFIgKCpmdW5jX3B0cl90KShBMSxBMixBMyk7 CiAgY29uc3QgZnVuY19wdHJfdCBmOwogIE1rT3AzKGNvbnN0IGZ1bmNfcHRyX3QgX2YpIDogZihf Zikge30KICBpbmxpbmUgUiBvcGVyYXRvcigpKEExIGExLCBBMiBhMiwgQTMgYTMpIGNvbnN0IHsK ICAgIHJldHVybiBmKGExLGEyLGEzKTt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNzIEEy LCBjbGFzcyBBMywgY2xhc3MgUj4KaW5saW5lIGNvbnN0IEZjdDM8QTEsQTIsQTMsUixNa09wMzxB MSxBMixBMyxSPiA+IGN1cnJ5KFIgKCogZikoQTEsQTIsQTMpKXsKICByZXR1cm4gRmN0MzxBMSxB MixBMyxSLE1rT3AzPEExLEEyLEEzLFI+ID4gKCBNa09wMzxBMSxBMixBMyxSPihmKSk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBBMSwgY2xhc3MgQTIsIGNsYXNzIEEzLCBjbGFzcyBBNCwgY2xhc3MgUj4K c3RydWN0IE1rT3A0ewogIHR5cGVkZWYgUiAoKmZ1bmNfcHRyX3QpKEExLEEyLEEzLEE0KTsKICBj b25zdCBmdW5jX3B0cl90IGY7CiAgTWtPcDQoY29uc3QgZnVuY19wdHJfdCBfZikgOiBmKF9mKSB7 fQogIGlubGluZSBSIG9wZXJhdG9yKCkoQTEgYTEsIEEyIGEyLCBBMyBhMywgQTQgYTQpIGNvbnN0 IHsKICAgIHJldHVybiBmKGExLGEyLGEzLGE0KTt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNs YXNzIEEyLCBjbGFzcyBBMywgY2xhc3MgQTQsIGNsYXNzIFI+CmlubGluZSBjb25zdCBGY3Q0PEEx LEEyLEEzLEE0LFIsTWtPcDQ8QTEsQTIsQTMsQTQsUj4gPiBjdXJyeShSICgqIGYpKEExLEEyLEEz LEE0KSl7CiAgcmV0dXJuIEZjdDQ8QTEsQTIsQTMsQTQsUixNa09wNDxBMSxBMixBMyxBNCxSPiA+ ICggTWtPcDQ8QTEsQTIsQTMsQTQsUj4oZikpOwp9CnRlbXBsYXRlIDxjbGFzcyBBMSwgY2xhc3Mg QTIsIGNsYXNzIEEzLCBjbGFzcyBBNCwgY2xhc3MgQTUsIGNsYXNzIFI+CnN0cnVjdCBNa09wNXsK ICB0eXBlZGVmIFIgKCpmdW5jX3B0cl90KShBMSxBMixBMyxBNCxBNSk7CiAgY29uc3QgZnVuY19w dHJfdCBmOwogIE1rT3A1KGNvbnN0IGZ1bmNfcHRyX3QgX2YpIDogZihfZikge30KICBpbmxpbmUg UiBvcGVyYXRvcigpKEExIGExLCBBMiBhMiwgQTMgYTMsIEE0IGE0LCBBNSBhNSkgY29uc3Qgewog ICAgcmV0dXJuIGYoYTEsYTIsYTMsYTQsYTUpO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBBMSwgY2xh c3MgQTIsIGNsYXNzIEEzLCBjbGFzcyBBNCwgY2xhc3MgQTUsIGNsYXNzIFI+CmlubGluZSBjb25z dCBGY3Q1PEExLEEyLEEzLEE0LEE1LFIsTWtPcDU8QTEsQTIsQTMsQTQsQTUsUj4gPiBjdXJyeShS ICgqIGYpKEExLEEyLEEzLEE0LEE1KSl7CiAgcmV0dXJuIEZjdDU8QTEsQTIsQTMsQTQsQTUsUixN a09wNTxBMSxBMixBMyxBNCxBNSxSPiA+ICggTWtPcDU8QTEsQTIsQTMsQTQsQTUsUj4oZikpOwp9 CgogCgogCiAgdGVtcGxhdGUgPGNsYXNzIEY+CiAgc3RhdGljIGludCBhdXhSb3RhdGVSb3dzKEZj dDE8aW50LGludCxGPiBmLCBpbnQgYmxvY2tzLCBpbnQgcm93LCBpbnQgY29sKXsKICAgIHJldHVy biAoY29sICsgZihyb3cpKyBibG9ja3MpICUgYmxvY2tzO30KCiAgdGVtcGxhdGUgPGNsYXNzIEY+ CiAgc3RhdGljIGludCBhdXhSb3RhdGVDb2xzKEZjdDE8aW50LGludCxGPiBmLCBpbnQgYmxvY2tz LCBpbnQgcm93LCBpbnQgY29sKXsKICAgIHJldHVybiAocm93ICsgZihjb2wpICsgYmxvY2tzKSAl IGJsb2Nrczt9CgogCiAKIApjbGFzcyBQcm9jZXNzOyAgCgp0ZW1wbGF0ZSA8Y2xhc3MgRSwgaW50 IG4+CmNsYXNzIERpc3RyaWJ1dGVkQXJyYXkgewogIEUqIGE7ICAgICAgICAgCiAgaW50IGxvY2Fs c2l6ZTsKICBpbnQgbm9wcm9jczsgICAgICAgIAogICAKICBpbnQgbG9jYWxwb3NpdGlvbjsgIAog IGludCBmaXJzdDsgICAgICAgICAgCiAgaW50IG5leHRmaXJzdDsgICAgICAKCnByaXZhdGU6CiAg dm9pZCBpbml0KCl7CiAgICBpZiAoKG15RXhpdCA9PSB1bmRlZmluZWQpIHx8IChteUVudHJhbmNl ID09IHVuZGVmaW5lZCkpIHRocm93IE1pc3NpbmdJbml0aWFsaXphdGlvbkV4Y2VwdGlvbigpOwog ICAgICBub3Byb2NzID0gbXlFeGl0IC0gbXlFbnRyYW5jZSArIDE7ICAKICAgICAgbG9jYWxzaXpl ID0gbi9ub3Byb2NzOyAgICAgICAgICAgICAgCiAgICAgIGxvY2FscG9zaXRpb24gPSBteWlkIC0g bXlFbnRyYW5jZTsgCiAgICAgIGZpcnN0ID0gbG9jYWxwb3NpdGlvbiAqIGxvY2Fsc2l6ZTsgIAog ICAgICBuZXh0Zmlyc3QgPSBmaXJzdCArIGxvY2Fsc2l6ZTsgICAgIAogICAgICBhID0gbmV3IEVb bG9jYWxzaXplXTt9CnB1YmxpYzoKICB0ZW1wbGF0ZSA8Y2xhc3MgRj4KICBEaXN0cmlidXRlZEFy cmF5KEZjdDE8aW50LEUsRj4gZil7ICAgCiAgICBpbml0KCk7CiAgICBmb3IoaW50IGkgPSAwOyBp PGxvY2Fsc2l6ZTsgaSsrKSBhW2ldID0gZihpK2ZpcnN0KTt9CgogIERpc3RyaWJ1dGVkQXJyYXko RSAoKmYpKGludCkpeyAKICAgIGluaXQoKTsKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxzaXpl OyBpKyspIGFbaV0gPSBmKGkrZmlyc3QpO30KCiAgRGlzdHJpYnV0ZWRBcnJheShFIGluaXRpYWwp eyAKICAgIGluaXQoKTsKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxzaXplOyBpKyspIGFbaV0g PSBpbml0aWFsO30KCiAKIAogIERpc3RyaWJ1dGVkQXJyYXkoRSBiW25dKXsgCiAgICBpbml0KCk7 CiAgICBmb3IoaW50IGkgPSAwOyBpPGxvY2Fsc2l6ZTsgaSsrKSBhW2ldID0gYltpK2ZpcnN0XTt9 CgogIERpc3RyaWJ1dGVkQXJyYXkoKSB7ICAgCiAgICBpbml0KCk7fQoKICBpbmxpbmUgaW50IGdl dEZpcnN0KCl7cmV0dXJuIGZpcnN0O30KCiAgaW5saW5lIGludCBnZXRMb2NhbHNpemUoKXtyZXR1 cm4gbG9jYWxzaXplO30KCiAgaW5saW5lIHZvaWQgc2V0TG9jYWwoaW50IGksIEUgdil7ICAgCiAg ICBhW2ldID0gdjt9ICAKCiAgaW5saW5lIGJvb2wgaXNMb2NhbChpbnQgaSl7cmV0dXJuIChpPj0g Zmlyc3QpICYmIChpPG5leHRmaXJzdCk7fQoKICBpbmxpbmUgRSBnZXQoaW50IGkpeyAgCiAgICAg aWYgKGlzTG9jYWwoaSkpIHJldHVybiBhW2ktZmlyc3RdOwogICAgIGVsc2UgdGhyb3cgTm9uTG9j YWxBY2Nlc3NFeGNlcHRpb24oKTt9CgogIGlubGluZSBFIGdldExvY2FsKGludCBpKXsgICAKICAg ICAgcmV0dXJuIGFbaV07fSAgICAgICAgICAgCgogCiAgdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz IEY+CiAgRGlzdHJpYnV0ZWRBcnJheTxSLG4+IG1hcChjb25zdCBGY3QxPEUsUixGPiBmKXsgIAog ICAgRGlzdHJpYnV0ZWRBcnJheTxSLG4+IGI7ICAgCiAgICBmb3IoaW50IGkgPSAwOyBpPGxvY2Fs c2l6ZTsgaSsrKSBiLnNldExvY2FsKGksIGYoYVtpXSkpOwogICAgcmV0dXJuIGI7fSAKCiAgdGVt cGxhdGUgPGNsYXNzIFI+CiAgRGlzdHJpYnV0ZWRBcnJheTxSLG4+IG1hcChSICgqZikoRSkpe3Jl dHVybiBtYXAoY3VycnkoZikpO30KCiAgdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIEY+CiAgRGlz dHJpYnV0ZWRBcnJheTxSLG4+IG1hcEluZGV4KGNvbnN0IEZjdDI8aW50LEUsUixGPiBmKXsgIAog ICAgRGlzdHJpYnV0ZWRBcnJheTxSLG4+IGI7ICAgCiAgICBmb3IoaW50IGkgPSAwOyBpPGxvY2Fs c2l6ZTsgaSsrKSBiLnNldExvY2FsKGksIGYoaStmaXJzdCxhW2ldKSk7CiAgICByZXR1cm4gYjt9 IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgUj4KICBEaXN0cmlidXRlZEFycmF5PFIsbj4gbWFwSW5kZXgo UiAoKmYpKGludCxFKSl7cmV0dXJuIG1hcEluZGV4KGN1cnJ5KGYpKTt9CgogIHRlbXBsYXRlIDxj bGFzcyBGPgogIHZvaWQgbWFwSW5QbGFjZShjb25zdCBGY3QxPEUsRSxGPiBmKXsgIAogICAgZm9y KGludCBpID0gMDsgaTxsb2NhbHNpemU7IGkrKykgYVtpXSA9IGYoYVtpXSk7fQoKICB2b2lkIG1h cEluUGxhY2UoRSAoKmYpKEUpKXttYXBJblBsYWNlKGN1cnJ5KGYpKTt9CgogIHRlbXBsYXRlIDxj bGFzcyBGPgogIHZvaWQgbWFwSW5kZXhJblBsYWNlKGNvbnN0IEZjdDI8aW50LEUsRSxGPiBmKXsg IAogICAgZm9yKGludCBpID0gMDsgaTxsb2NhbHNpemU7IGkrKykgYVtpXSA9IGYoaStmaXJzdCxh W2ldKTt9IAoKICB2b2lkIG1hcEluZGV4SW5QbGFjZShFICgqZikoaW50LEUpKXttYXBJbmRleElu UGxhY2UoY3VycnkoZikpO30KCiAKICB0ZW1wbGF0ZSA8Y2xhc3MgRTIsIGNsYXNzIFIsIGNsYXNz IEY+ICAgICAgICAgCiAgRGlzdHJpYnV0ZWRBcnJheTxSLG4+IHppcFdpdGgoRGlzdHJpYnV0ZWRB cnJheTxFMixuPiYgYiwgY29uc3QgRmN0MjxFLEUyLFIsRj4gZil7IAogICAgRGlzdHJpYnV0ZWRB cnJheTxSLG4+IGM7IAogICAgZm9yKGludCBpPTA7IGk8bG9jYWxzaXplOyBpKyspIGMuc2V0TG9j YWwoaSwgZihhW2ldLGIuZ2V0TG9jYWwoaSkpKTsKICAgIHJldHVybiBjO30gCgogIHRlbXBsYXRl IDxjbGFzcyBFMiwgY2xhc3MgUj4KICBEaXN0cmlidXRlZEFycmF5PFIsbj4gemlwV2l0aChEaXN0 cmlidXRlZEFycmF5PEUyLG4+JiBiLFIgKCpmKShFLEUyKSl7CiAgICByZXR1cm4gemlwV2l0aChi LGN1cnJ5KGYpKTt9IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgRTIsIGNsYXNzIEY+ICAgICAgICAgICAg ICAgICAgCiAgdm9pZCAgemlwV2l0aEluUGxhY2UoRGlzdHJpYnV0ZWRBcnJheTxFMixuPiYgYiwg Y29uc3QgRmN0MjxFLEUyLEUsRj4gZil7IAogICAgZm9yKGludCBpPTA7IGk8bG9jYWxzaXplOyBp KyspIGFbaV0gPSBmKGFbaV0sYi5nZXRMb2NhbChpKSk7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgRTI+ CiAgdm9pZCB6aXBXaXRoSW5QbGFjZShEaXN0cmlidXRlZEFycmF5PEUyLG4+JiBiLEUgKCpmKShF LEUyKSl7CiAgICB6aXBXaXRoSW5QbGFjZShiLGN1cnJ5KGYpKTt9CgogIHRlbXBsYXRlIDxjbGFz cyBFMiwgY2xhc3MgUiwgY2xhc3MgRj4gICAgICAgCiAgRGlzdHJpYnV0ZWRBcnJheTxSLG4+IHpp cFdpdGhJbmRleChEaXN0cmlidXRlZEFycmF5PEUyLG4+JiBiLCAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZjdDM8aW50LEUsRTIsUixGPiBmKXsgCiAgICBEaXN0 cmlidXRlZEFycmF5PFIsbj4gYzsgCiAgICBmb3IoaW50IGk9MDsgaTxsb2NhbHNpemU7IGkrKykg Yy5zZXRMb2NhbChpLCBmKGkrZmlyc3QsYVtpXSxiLmdldExvY2FsKGkpKSk7CiAgICByZXR1cm4g Yzt9IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgRTIsIGNsYXNzIFI+CiAgRGlzdHJpYnV0ZWRBcnJheTxS LG4+IHppcFdpdGhJbmRleChEaXN0cmlidXRlZEFycmF5PEUyLG4+JiBiLFIgKCpmKShpbnQsRSxF MikpewogICAgcmV0dXJuIHppcFdpdGhJbmRleChiLGN1cnJ5KGYpKTt9IAoKICB0ZW1wbGF0ZSA8 Y2xhc3MgRTIsIGNsYXNzIEY+ICAgICAgICAgICAgICAgIAogIHZvaWQgemlwV2l0aEluZGV4SW5Q bGFjZShEaXN0cmlidXRlZEFycmF5PEUyLG4+JiBiLCBjb25zdCBGY3QzPGludCxFLEUyLEUsRj4g Zil7IAogICAgZm9yKGludCBpPTA7IGk8bG9jYWxzaXplOyBpKyspIGFbaV0gPSBmKGkrZmlyc3Qs YVtpXSxiLmdldExvY2FsKGkpKTt9IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgRTI+CiAgdm9pZCB6aXBX aXRoSW5kZXhJblBsYWNlKERpc3RyaWJ1dGVkQXJyYXk8RTIsbj4mIGIsRSAoKmYpKGludCxFLEUy KSl7CiAgICB6aXBXaXRoSW5kZXhJblBsYWNlKGIsY3VycnkoZikpO30gCgogCiAgdm9pZCBnYXRo ZXIoRSBiW25dKXsKICAgIGZvciAoaW50IGk9MDsgaTxsb2NhbHNpemU7IGkrKykgYltpK2ZpcnN0 XSA9IGFbaV07CiAgICBpbnQgcG93ZXIgPSAxOwogICAgaW50IG5laWdoYm9yOwogICAgaW50IGxv ZzJub3Byb2NzID0gbG9nMihub3Byb2NzKTsKICAgIGludCBpbmRleHN0YWNrW25dOyAgICAgICAg ICAgICAgIAogICAgaW5kZXhzdGFja1swXSA9IGZpcnN0OyAKICAgIGludCB0b3AgPSAwOwogICAg aW50IG9sZHRvcDsKICAgIGZvcihpbnQgaT0wOyBpPGxvZzJub3Byb2NzOyBpKyspewogICAgICBu ZWlnaGJvciA9IG15RW50cmFuY2UgKyAobG9jYWxwb3NpdGlvbiBeIHBvd2VyKTsKICAgICAgcG93 ZXIgKj0gMjsKICAgICAgb2xkdG9wID0gdG9wOyAgICAgCiAgICAgIGZvciAoaW50IGo9MDsgajw9 b2xkdG9wOyBqKyspeyAgICAgCiAgICAgICAgc2VuZFJlY2VpdmUobmVpZ2hib3IsJmluZGV4c3Rh Y2tbal0sJmluZGV4c3RhY2tbKyt0b3BdLHNpemVvZihpbnQpKTsKICAgICAgICBzZW5kUmVjZWl2 ZShuZWlnaGJvciwmYltpbmRleHN0YWNrW2pdXSwmYltpbmRleHN0YWNrW3RvcF1dLHNpemVvZihF KSpsb2NhbHNpemUpO319fQoKIAogIHRlbXBsYXRlIDxjbGFzcyBGPgogIEUgZm9sZChjb25zdCBG Y3QyPEUsRSxFLEY+IGYpeyAgCiAgICAgCiAgICAgCiAgICAgCiAgICBFIHJlc3VsdCA9IGFbMF07 CiAgICBmb3IoaW50IGk9MTsgaTxsb2NhbHNpemU7IGkrKykgCiAgICAgIHJlc3VsdCA9IGYocmVz dWx0LCBhW2ldKTsKICAgIGlmIChEZWJ1Zykge3ByaW50ZigicmVzdWx0IG9mIGxvY2FsIGZvbGQg b24gJWQ6ICVkXG4iLG15aWQscmVzdWx0KTtmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgCiAg ICBpbnQgcG93ZXIgPSAxOwogICAgaW50IG5laWdoYm9yOwogICAgRSByZXN1bHQyOwogICAgZm9y KGludCBpPTA7IGk8bG9nMihub3Byb2NzKTsgaSsrKXsKICAgICAgbmVpZ2hib3IgPSBteUVudHJh bmNlICsgKGxvY2FscG9zaXRpb24gXiBwb3dlcik7CiAgICAgIHBvd2VyICo9IDI7CiAgICAgIHNl bmRSZWNlaXZlKG5laWdoYm9yLCZyZXN1bHQsJnJlc3VsdDIsc2l6ZW9mKEUpKTsgIAogICAgICBy ZXN1bHQgPSBmKHJlc3VsdCxyZXN1bHQyKTt9CiAgICByZXR1cm4gcmVzdWx0O30KCiAgRSBmb2xk KEUgKCpmKShFLEUpKXsgcmV0dXJuIGZvbGQoY3VycnkoZikpO30KCiAKICB0ZW1wbGF0ZSA8Y2xh c3MgRj4KICB2b2lkIHNjYW4oY29uc3QgRmN0MjxFLEUsRSxGPiBmKXsgIAogICAgIAogICAgIAog ICAgZm9yKGludCBpPTE7IGk8bG9jYWxzaXplOyBpKyspCiAgICAgIGFbaV0gID0gZihhW2ktMV0s IGFbaV0pOwogICAgRSBzdW0gPSBhW2xvY2Fsc2l6ZS0xXTsKICAgIGlmIChEZWJ1Zykge3ByaW50 ZigibG9jYWwgc3VtIG9uICVkOiAlZFxuIixteWlkLHN1bSk7ZmZsdXNoKCgmX19pb2JbMV0pICk7 fQogICAgIAogICAgaW50IHBvd2VyID0gMTsKICAgIGludCBuZWlnaGJvcjsKICAgIEUgbmVpZ2hi b3JTdW07CiAgICBmb3IoaW50IGk9MDsgaTxsb2cyKG5vcHJvY3MpOyBpKyspewogICAgICBuZWln aGJvciA9IG15RW50cmFuY2UgKyAobG9jYWxwb3NpdGlvbiBeIHBvd2VyKTsKICAgICAgcG93ZXIg Kj0gMjsKICAgICAgc2VuZFJlY2VpdmUobmVpZ2hib3IsJnN1bSwmbmVpZ2hib3JTdW0sc2l6ZW9m KEUpKTsgCiAgICAgIGlmIChteWlkID4gbmVpZ2hib3IpIAogICAgICAgIGZvcihpbnQgaj0wOyBq PGxvY2Fsc2l6ZTsgaisrKSBhW2pdID0gZihhW2pdLG5laWdoYm9yU3VtKTsKICAgICAgc3VtID0g ZihzdW0sbmVpZ2hib3JTdW0pO319CgogIEUgc2NhbihFICgqZikoRSxFKSl7c2NhbihjdXJyeShm KSk7fQogCiAgdGVtcGxhdGUgPGNsYXNzIEY+CiAgdm9pZCBwZXJtdXRlKGNvbnN0IEZjdDE8aW50 LGludCxGPiBmKXsKICAgIGludCByZWNlaXZlcjsKICAgIHJlY2VpdmVyID0gbXlFbnRyYW5jZSAr IGYobG9jYWxwb3NpdGlvbik7CiAgICBpZiAoKHJlY2VpdmVyIDwgbXlFbnRyYW5jZSkgfHwgKHJl Y2VpdmVyID4gbXlFeGl0KSkgdGhyb3cgSWxsZWdhbFBhcnRpdGlvbkV4Y2VwdGlvbigpOwogICAg aW50IHNlbmRlciA9IHVuZGVmaW5lZDsKICAgIGZvciAoaW50IGk9MDsgaTwgbm9wcm9jczsgaSsr KSAgCiAgICAgICBpZiAoZihpKStteUVudHJhbmNlID09IG15aWQpIAogICAgICAgICBpZiAoc2Vu ZGVyID09IHVuZGVmaW5lZCkgc2VuZGVyID0gbXlFbnRyYW5jZSArIGk7CiAgICAgICAgIGVsc2Ug dGhyb3cgSWxsZWdhbFBlcm11dGVFeGNlcHRpb24oKTsgIAogICAgaWYgIChzZW5kZXIgPT0gdW5k ZWZpbmVkKSB0aHJvdyBJbGxlZ2FsUGVybXV0ZUV4Y2VwdGlvbigpOyAgCiAgICBpZiAocmVjZWl2 ZXIgIT0gbXlpZCl7IAogICAgICBNUElfU3RhdHVzIHN0YXQ7CiAgICAgIEUgYltsb2NhbHNpemVd OwogICAgICBmb3IgKGludCBpPTA7IGk8bG9jYWxzaXplOyBpKyspIGJbaV0gPSBhW2ldOwogICAg ICBzZW5kKHJlY2VpdmVyLGIsc2l6ZW9mKEUpKmxvY2Fsc2l6ZSk7ICAgICAKICAgICAgcmVjZWl2 ZShzZW5kZXIsYSxzaXplb2YoRSkqbG9jYWxzaXplLCZzdGF0KTt9fSAgCgogIHZvaWQgcGVybXV0 ZShpbnQgKCpmKShpbnQpKXsgcmV0dXJuIHBlcm11dGUoY3VycnkoZikpO30KCiAKICB2b2lkIGJy b2FkY2FzdFBhcnRpdGlvbihpbnQgYmxvY2speyAgCiAgICAgaWYgKChibG9jayA8IDApIHx8IChi bG9jayA+PSBuL2xvY2Fsc2l6ZSkpIHRocm93IElsbGVnYWxQYXJ0aXRpb25FeGNlcHRpb24oKTsK ICAgICB1bnNpZ25lZCBpbnQgbmVpZ2hib3I7CiAgICAgdW5zaWduZWQgaW50IHBvd2VyID0gMTsK ICAgICB1bnNpZ25lZCBpbnQgbWFzayA9IDEwNzM3NDE4MjI7ICAKICAgICBNUElfU3RhdHVzIHN0 YXQ7CiAgICAgZm9yKGludCBpPTA7IGk8bG9nMihub3Byb2NzKTsgaSsrKXsgCiAgICAgIGlmICgo bG9jYWxwb3NpdGlvbiAmIG1hc2spID09IChibG9jayAmIG1hc2spKXsKICAgICAgICBuZWlnaGJv ciA9IG15RW50cmFuY2UgKyAobG9jYWxwb3NpdGlvbiBeIHBvd2VyKTsKICAgICAgICBpZiAoKGxv Y2FscG9zaXRpb24gJiBwb3dlcikgPT0gKGJsb2NrICYgcG93ZXIpKQogICAgICAgICAgc3luY1Nl bmQobmVpZ2hib3IsYSxzaXplb2YoRSkqbG9jYWxzaXplKTsKICAgICAgICBlbHNlIHJlY2VpdmUo bmVpZ2hib3IsYSxzaXplb2YoRSkqbG9jYWxzaXplLCZzdGF0KTt9CiAgICAgIHBvd2VyICo9IDI7 CiAgICAgIG1hc2sgJj0gfnBvd2VyO319CgogIHZvaWQgYnJvYWRjYXN0KGludCBpbmRleCl7ICAK ICAgICBpbnQgYmxvY2sgPSBpbmRleCAvIGxvY2Fsc2l6ZTsKICAgICBpbnQgbG9jYWxpbmRleCA9 IGluZGV4ICUgbG9jYWxzaXplOyAgCiAgICAgaWYgKChibG9jayA8IDApIHx8IChibG9jayA+IG4v bG9jYWxzaXplKSkgdGhyb3cgSWxsZWdhbFBhcnRpdGlvbkV4Y2VwdGlvbigpOwogICAgIHVuc2ln bmVkIGludCBuZWlnaGJvcjsKICAgICB1bnNpZ25lZCBpbnQgcG93ZXIgPSAxOwogICAgIHVuc2ln bmVkIGludCBtYXNrID0gMTA3Mzc0MTgyMjsgIAogICAgIE1QSV9TdGF0dXMgc3RhdDsKICAgICBm b3IoaW50IGk9MDsgaTxsb2cyKG5vcHJvY3MpOyBpKyspeyAKICAgICAgaWYgKChsb2NhbHBvc2l0 aW9uICYgbWFzaykgPT0gKGJsb2NrICYgbWFzaykpewogICAgICAgIG5laWdoYm9yID0gbXlFbnRy YW5jZSArIChsb2NhbHBvc2l0aW9uIF4gcG93ZXIpOwogICAgICAgIGlmICgobG9jYWxwb3NpdGlv biAmIHBvd2VyKSA9PSAoYmxvY2sgJiBwb3dlcikpCiAgICAgICAgICBzeW5jU2VuZChuZWlnaGJv ciwmYVtsb2NhbGluZGV4XSxzaXplb2YoRSkpOwogICAgICAgIGVsc2UgcmVjZWl2ZShuZWlnaGJv ciwmYVtsb2NhbGluZGV4XSxzaXplb2YoRSksJnN0YXQpO30KICAgICAgcG93ZXIgKj0gMjsKICAg ICAgbWFzayAmPSB+cG93ZXI7fQogICAgIGZvciAoaW50IGk9MDsgaTxsb2NhbHNpemU7IGkrKykg YVtpXSA9IGFbbG9jYWxpbmRleF07fSAKCiAKICB2b2lkIHNob3coKXsgIAogICAgRSogYiA9ICBu ZXcgRVtuXTsKICAgIGdhdGhlcihiKTsgCiAgICBpZiAobXlpZCA9PSBteUVudHJhbmNlKXsKICAg ICAgcHJpbnRmKCJ7Iik7CiAgICAgIGZvcihpbnQgaT0wOyBpPG4tMTsgaSsrKSBwcmludGYoIiVk LCIsYltpXSk7CiAgICAgIHByaW50ZigiJWR9XG4iLGJbbi0xXSk7IGZmbHVzaCgoJl9faW9iWzFd KSApO319Cn07CiAgCnRlbXBsYXRlIDxjbGFzcyBFLCBpbnQgbj4Kb3N0cmVhbSYgb3BlcmF0b3I8 PChvc3RyZWFtJiBvcywgRGlzdHJpYnV0ZWRBcnJheTxFLG4+JiBhKXsKICBFIGJbbl07CiAgZ2F0 aGVyKGIpOyAKICBpZiAobXlpZCA9PSBteUVudHJhbmNlKXsKICAgIG9zIDw8ICJ7IjsKICAgIGZv cihpbnQgaT0wOyBpPG4tMTsgaSsrKSBvcyA8PCBiW2ldIDw8ICIsIjsKICAgIG9zIDw8IGJbbi0x XSA8PCAifSIgPDwgZW5kbDt9CiAgcmV0dXJuIG9zO30KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3Mg RSwgaW50IG4sIGludCBtPgpjbGFzcyBEaXN0cmlidXRlZE1hdHJpeCB7CiAgRSoqIGE7ICAgICAg ICAgICAgICAgICAKICBpbnQgbG9jYWxSb3dzOyAgICAgICAgIAogIGludCBsb2NhbENvbHM7ICAg ICAgICAgCiAgaW50IGxvY2Fsc2l6ZTsgICAgICAgICAKICBpbnQgYmxvY2tzSW5Sb3c7ICAgICAg IAogIGludCBibG9ja3NJbkNvbDsgICAgICAgCiAgaW50IG5vcHJvY3M7ICAgICAgICAgICAKICAg CiAgaW50IGxvY2FsQ29sUG9zaXRpb247ICAKICBpbnQgbG9jYWxSb3dQb3NpdGlvbjsgIAogIGlu dCBsb2NhbFBvc2l0aW9uOyAgICAgCiAgaW50IGZpcnN0Um93OyAgICAgICAgICAKICBpbnQgZmly c3RDb2w7ICAgICAgICAgIAogIGludCBuZXh0Um93OyAgICAgICAgICAgCiAgaW50IG5leHRDb2w7 ICAgICAgICAgICAKCnByaXZhdGU6CiAgdm9pZCBpbml0KGludCByb3dzLCBpbnQgY29scyl7ICAg CiAgICBpZiAoKG15RXhpdCA9PSB1bmRlZmluZWQpIHx8IChteUVudHJhbmNlID09IHVuZGVmaW5l ZCkpIHRocm93IE1pc3NpbmdJbml0aWFsaXphdGlvbkV4Y2VwdGlvbigpOwogICAgYmxvY2tzSW5S b3cgPSByb3dzOyBibG9ja3NJbkNvbCA9IGNvbHM7CiAgICBub3Byb2NzID0gbXlFeGl0IC0gbXlF bnRyYW5jZSArIDE7ICAKICAgIGlmIChjb2xzKnJvd3MgIT0gbm9wcm9jcykgdGhyb3cgUGFydGl0 aW9uaW5nSW1wb3NzaWJsZUV4Y2VwdGlvbigpOwogICAgbG9jYWxSb3dzID0gbiAvIHJvd3M7ICAg CiAgICBsb2NhbENvbHMgPSBtIC8gY29sczsgICAKICAgIGxvY2Fsc2l6ZSA9ICBsb2NhbFJvd3Mq bG9jYWxDb2xzOyAgIAogICAgbG9jYWxDb2xQb3NpdGlvbiA9IChteWlkIC0gbXlFbnRyYW5jZSkg JSBjb2xzOyAgCiAgICBsb2NhbFJvd1Bvc2l0aW9uID0gKG15aWQgLSBteUVudHJhbmNlKSAvIGNv bHM7CiAgICBsb2NhbFBvc2l0aW9uID0gbG9jYWxSb3dQb3NpdGlvbiAqIGNvbHMgKyBsb2NhbENv bFBvc2l0aW9uOwogICAgZmlyc3RSb3cgPSBsb2NhbFJvd1Bvc2l0aW9uICogbG9jYWxSb3dzOwog ICAgZmlyc3RDb2wgPSBsb2NhbENvbFBvc2l0aW9uICogbG9jYWxDb2xzOwogICAgbmV4dFJvdyA9 IGZpcnN0Um93ICsgbG9jYWxSb3dzOwogICAgbmV4dENvbCA9IGZpcnN0Q29sICsgbG9jYWxDb2xz OyAgIAogICAgYSA9IG5ldyBFKltsb2NhbFJvd3NdOwogICAgZm9yIChpbnQgaT0wOyBpPGxvY2Fs Um93czsgaSsrKSBhW2ldID0gbmV3IEVbbG9jYWxDb2xzXTt9CgpwdWJsaWM6CiAgdGVtcGxhdGUg PGNsYXNzIEY+CiAgRGlzdHJpYnV0ZWRNYXRyaXgoRmN0MjxpbnQsaW50LEUsRj4gZiwgaW50IHJv d3MsIGludCBjb2xzKXsKICAgIGluaXQocm93cywgY29scyk7CiAgICBmb3IoaW50IGkgPSAwOyBp PGxvY2FsUm93czsgaSsrKQogICAgICBmb3IoaW50IGogPSAwOyBqPGxvY2FsQ29sczsgaisrKSBh W2ldW2pdID0gZihpK2ZpcnN0Um93LGorZmlyc3RDb2wpO30KCiAgRGlzdHJpYnV0ZWRNYXRyaXgo RSAoKmYpKGludCxpbnQpLCBpbnQgcm93cywgaW50IGNvbHMpeyAKICAgIGluaXQocm93cywgY29s cyk7ICAKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxSb3dzOyBpKyspCiAgICAgIGZvcihpbnQg aiA9IDA7IGo8bG9jYWxDb2xzOyBqKyspIGFbaV1bal0gPSBmKGkrZmlyc3RSb3csaitmaXJzdENv bCk7fQoKICBEaXN0cmlidXRlZE1hdHJpeChFIGluaXRpYWwsIGludCByb3dzLCBpbnQgY29scyl7 IAogICAgaW5pdChyb3dzLCBjb2xzKTsgIAogICAgZm9yKGludCBpID0gMDsgaTxsb2NhbFJvd3M7 IGkrKykKICAgICAgZm9yKGludCBqID0gMDsgajxsb2NhbENvbHM7IGorKykgYVtpXVtqXSA9IGlu aXRpYWw7fQoKIAogCiAgRGlzdHJpYnV0ZWRNYXRyaXgoRSBiW25dW21dLCBpbnQgcm93cywgaW50 IGNvbHMpewogICAgaW5pdChyb3dzLCBjb2xzKTsgCiAgICBmb3IoaW50IGkgPSAwOyBpPGxvY2Fs Um93czsgaSsrKQogICAgICBmb3IoaW50IGogPSAwOyBqPGxvY2FsQ29sczsgaisrKSBhW2ldW2pd ID0gYltpK2ZpcnN0Um93XVtqK2ZpcnN0Q29sXTt9CgoKICBEaXN0cmlidXRlZE1hdHJpeChpbnQg cm93cywgaW50IGNvbHMpe2luaXQocm93cywgY29scyk7fQoKICBpbmxpbmUgaW50IGdldEZpcnN0 Um93KCl7cmV0dXJuIGZpcnN0Um93O30KCiAgaW5saW5lIGludCBnZXRGaXJzdENvbCgpe3JldHVy biBmaXJzdENvbDt9CgogIGlubGluZSBpbnQgZ2V0TG9jYWxSb3dzKCl7cmV0dXJuIGxvY2FsUm93 czt9CiAKICBpbmxpbmUgaW50IGdldExvY2FsQ29scygpe3JldHVybiBsb2NhbENvbHM7fQoKICBp bmxpbmUgaW50IGdldEJsb2Nrc0luUm93KCl7IHJldHVybiBibG9ja3NJblJvdzt9CgogIGlubGlu ZSBpbnQgZ2V0QmxvY2tzSW5Db2woKXtyZXR1cm4gYmxvY2tzSW5Db2w7fQoKICBpbmxpbmUgdm9p ZCBzZXRMb2NhbChpbnQgaSwgaW50IGosIEUgdil7ICAgCiAgICBhW2ldW2pdID0gdjt9ICAKCiAg aW5saW5lIGJvb2wgaXNMb2NhbChpbnQgaSwgaW50IGopewogICAgcmV0dXJuIChpPj0gZmlyc3RS b3cpICYmIChpPG5leHRSb3cpICYmIChqPj0gZmlyc3RDb2wpICYmIChqPG5leHRDb2wpO30KCiAg aW5saW5lIEUgZ2V0KGludCBpLCBpbnQgail7ICAKICAgIGlmIChpc0xvY2FsKGksaikpIHJldHVy biBhW2ktZmlyc3RSb3ddW2otZmlyc3RDb2xdOwogICAgZWxzZSB0aHJvdyBOb25Mb2NhbEFjY2Vz c0V4Y2VwdGlvbigpO30KCiAgaW5saW5lIEUgZ2V0TG9jYWwoaW50IGksIGludCBqKXsgICAKICAg IHJldHVybiBhW2ldW2pdO30gICAgICAKCiAgaW5saW5lIEUgZ2V0TG9jYWxHbG9iYWwoaW50IGks IGludCBqKXsgICAKICAgIGlmICgoaj49IGZpcnN0Q29sKSAmJiAoajxuZXh0Q29sKSkgcmV0dXJu IGFbaV1bai1maXJzdENvbF07ICAKICAgIGVsc2UgdGhyb3cgTm9uTG9jYWxBY2Nlc3NFeGNlcHRp b24oKTt9CgogIGlubGluZSBFIGdldEdsb2JhbExvY2FsKGludCBpLCBpbnQgail7ICAgCiAgICBp ZiAoKGk+PSBmaXJzdFJvdykgJiYgKGk8bmV4dFJvdykpIHJldHVybiBhW2ktZmlyc3RSb3ddW2pd OyAgCiAgICBlbHNlIHRocm93IE5vbkxvY2FsQWNjZXNzRXhjZXB0aW9uKCk7fQoKIAogIHRlbXBs YXRlIDxjbGFzcyBSLCBjbGFzcyBGPgogIERpc3RyaWJ1dGVkTWF0cml4PFIsbixtPiBtYXAoY29u c3QgRmN0MTxFLFIsRj4gZil7ICAKICAgIERpc3RyaWJ1dGVkTWF0cml4PFIsbixtPiBiKGJsb2Nr c0luUm93LGJsb2Nrc0luQ29sKTsgICAKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxSb3dzOyBp KyspCiAgICAgIGZvcihpbnQgaiA9IDA7IGo8bG9jYWxDb2xzOyBqKyspIGIuc2V0TG9jYWwoaSxq LCBmKGFbaV1bal0pKTsKICAgIHJldHVybiBiO30gCgogIHRlbXBsYXRlIDxjbGFzcyBSPgogIERp c3RyaWJ1dGVkTWF0cml4PFIsbixtPiBtYXAoUiAoKmYpKEUpKXtyZXR1cm4gbWFwKGN1cnJ5KGYp KTt9CgogIHRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBGPgogIERpc3RyaWJ1dGVkTWF0cml4PFIs bixtPiBtYXBJbmRleChjb25zdCBGY3QzPGludCxpbnQsRSxSLEY+IGYpeyAgCiAgICBEaXN0cmli dXRlZE1hdHJpeDxSLG4sbT4gYihibG9ja3NJblJvdyxibG9ja3NJbkNvbCk7ICAKICAgIGZvcihp bnQgaSA9IDA7IGk8bG9jYWxSb3dzOyBpKyspCiAgICAgIGZvcihpbnQgaiA9IDA7IGo8bG9jYWxD b2xzOyBqKyspIGIuc2V0TG9jYWwoaSxqLCBmKGkrZmlyc3RSb3csaitmaXJzdENvbCxhW2ldW2pd KSk7CiAgICByZXR1cm4gYjt9IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgUj4KICBEaXN0cmlidXRlZE1h dHJpeDxSLG4sbT4gbWFwSW5kZXgoUiAoKmYpKGludCxpbnQsRSkpe3JldHVybiBtYXBJbmRleChj dXJyeShmKSk7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgRj4KICB2b2lkIG1hcEluUGxhY2UoY29uc3Qg RmN0MTxFLEUsRj4gZil7ICAKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxSb3dzOyBpKyspCiAg ICAgIGZvcihpbnQgaiA9IDA7IGo8bG9jYWxDb2xzOyBqKyspIGFbaV1bal0gPSBmKGFbaV1bal0p O30gCgogIHZvaWQgbWFwSW5QbGFjZShFICgqZikoRSkpe21hcEluUGxhY2UoY3VycnkoZikpO30K CgogIHRlbXBsYXRlIDxjbGFzcyBGPgogIHZvaWQgbWFwSW5kZXhJblBsYWNlKGNvbnN0IEZjdDM8 aW50LGludCxFLEUsRj4gZil7ICAKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxSb3dzOyBpKysp CiAgICAgIGZvcihpbnQgaiA9IDA7IGo8bG9jYWxDb2xzOyBqKyspIGFbaV1bal0gPSBmKGkrZmly c3RSb3csaitmaXJzdENvbCxhW2ldW2pdKTt9IAoKICB2b2lkIG1hcEluZGV4SW5QbGFjZShFICgq ZikoaW50LGludCxFKSl7bWFwSW5kZXhJblBsYWNlKGN1cnJ5KGYpKTt9CgogCiAgdGVtcGxhdGUg PGNsYXNzIEUyLCBjbGFzcyBSLCBjbGFzcyBGPiAgICAgICAgIAogIERpc3RyaWJ1dGVkTWF0cml4 PFIsbixtPiB6aXBXaXRoKERpc3RyaWJ1dGVkTWF0cml4PEUyLG4sbT4mIGIsIGNvbnN0IEZjdDI8 RSxFMixSLEY+IGYpeyAKICAgIERpc3RyaWJ1dGVkTWF0cml4PFIsbixtPiBjKGJsb2Nrc0luUm93 LGJsb2Nrc0luQ29sKTsgCiAgICBmb3IoaW50IGkgPSAwOyBpPGxvY2FsUm93czsgaSsrKQogICAg ICBmb3IoaW50IGogPSAwOyBqPGxvY2FsQ29sczsgaisrKSBjLnNldExvY2FsKGksIGosIGYoYVtp XVtqXSxiLmdldExvY2FsKGksaikpKTsKICAgIHJldHVybiBjO30gCgogIHRlbXBsYXRlIDxjbGFz cyBFMiwgY2xhc3MgUj4KICBEaXN0cmlidXRlZE1hdHJpeDxSLG4sbT4gemlwV2l0aChEaXN0cmli dXRlZE1hdHJpeDxFMixuLG0+JiBiLFIgKCpmKShFLEUyKSl7CiAgICByZXR1cm4gemlwV2l0aChi LGN1cnJ5KGYpKTt9IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgRTIsIGNsYXNzIEY+ICAgICAgICAgICAg ICAgICAgCiAgdm9pZCAgemlwV2l0aEluUGxhY2UoRGlzdHJpYnV0ZWRNYXRyaXg8RTIsbixtPiYg YiwgY29uc3QgRmN0MjxFLEUyLEUsRj4gZil7IAogICAgZm9yKGludCBpID0gMDsgaTxsb2NhbFJv d3M7IGkrKykKICAgICAgZm9yKGludCBqID0gMDsgajxsb2NhbENvbHM7IGorKykgYVtpXVtqXSA9 IGYoYVtpXVtqXSxiLmdldExvY2FsKGksaikpO30KCiAgdGVtcGxhdGUgPGNsYXNzIEUyPgogIHZv aWQgemlwV2l0aEluUGxhY2UoRGlzdHJpYnV0ZWRNYXRyaXg8RTIsbixtPiYgYixFICgqZikoRSxF MikpewogICAgemlwV2l0aEluUGxhY2UoYixjdXJyeShmKSk7fQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg RTIsIGNsYXNzIFIsIGNsYXNzIEY+ICAgICAgIAogIERpc3RyaWJ1dGVkTWF0cml4PFIsbixtPiB6 aXBXaXRoSW5kZXgoRGlzdHJpYnV0ZWRNYXRyaXg8RTIsbixtPiYgYiwgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGY3Q0PGludCxpbnQsRSxFMixSLEY+IGYp eyAKICAgIERpc3RyaWJ1dGVkTWF0cml4PFIsbixtPiBjKGJsb2Nrc0luUm93LGJsb2Nrc0luQ29s KTsgIAogICAgZm9yKGludCBpID0gMDsgaTxsb2NhbFJvd3M7IGkrKykKICAgICAgZm9yKGludCBq ID0gMDsgajxsb2NhbENvbHM7IGorKykgCiAgICAgICAgYy5zZXRMb2NhbChpLGosIGYoaStmaXJz dFJvdyxqK2ZpcnN0Q29sLGFbaV1bal0sYi5nZXRMb2NhbChpLGopKSk7CiAgICByZXR1cm4gYzt9 IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgRTIsIGNsYXNzIFI+CiAgRGlzdHJpYnV0ZWRNYXRyaXg8Uixu LG0+IHppcFdpdGhJbmRleChEaXN0cmlidXRlZE1hdHJpeDxFMixuLG0+JiBiLFIgKCpmKShpbnQs aW50LEUsRTIpKXsKICAgIHJldHVybiB6aXBXaXRoSW5kZXgoYixjdXJyeShmKSk7fSAKCiAgdGVt cGxhdGUgPGNsYXNzIEUyLCBjbGFzcyBGPiAgICAgICAgICAgICAgICAKICB2b2lkIHppcFdpdGhJ bmRleEluUGxhY2UoRGlzdHJpYnV0ZWRNYXRyaXg8RTIsbixtPiYgYiwgY29uc3QgRmN0NDxpbnQs aW50LEUsRTIsRSxGPiBmKXsgIAogICAgZm9yKGludCBpID0gMDsgaTxsb2NhbFJvd3M7IGkrKykK ICAgICAgZm9yKGludCBqID0gMDsgajxsb2NhbENvbHM7IGorKykgCiAgICAgICAgYVtpXVtqXSA9 IGYoaStmaXJzdFJvdyxqK2ZpcnN0Q29sLGFbaV1bal0sYi5nZXRMb2NhbChpLGopKTt9CgogIHRl bXBsYXRlIDxjbGFzcyBFMj4KICB2b2lkIHppcFdpdGhJbmRleEluUGxhY2UoRGlzdHJpYnV0ZWRN YXRyaXg8RTIsbixtPiYgYixFICgqZikoaW50LGludCxFLEUyKSl7CiAgICB6aXBXaXRoSW5kZXhJ blBsYWNlKGIsY3VycnkoZikpO30gCgoKIAogIHN0cnVjdCBCdWZmZXJ7CiAgICAgIGludCByb3c7 CiAgICAgIGludCBjb2w7CiAgICAgIEUgbWF0cml4W24qbV07fTsKCiAgdm9pZCBnYXRoZXIoRSBi W25dW21dKXsgCiAgICBmb3IoaW50IGkgPSAwOyBpPGxvY2FsUm93czsgaSsrKQogICAgICBmb3Io aW50IGogPSAwOyBqPGxvY2FsQ29sczsgaisrKSBiW2krZmlyc3RSb3ddW2orZmlyc3RDb2xdID0g YVtpXVtqXTsKICAgICAKICAgIEJ1ZmZlciBpbmJ1ZjsKICAgIEJ1ZmZlciBvdXRidWY7CiAgICBp bnQgYnVmQ291bnRlcjsKCiAgICBpbnQgcG93ZXIgPSAxOwogICAgaW50IG5laWdoYm9yOwogICAg aW50IGxvZzJub3Byb2NzID0gbG9nMihub3Byb2NzKTsKICAgIGludCBpbmRleFN0YWNrWzIqbl07 ICAgICAgICAgICAgICAgCiAgICBpbmRleFN0YWNrWzBdID0gZmlyc3RSb3c7ICBpbmRleFN0YWNr WzFdID0gZmlyc3RDb2w7IAogICAgaW50IHRvcCA9IDE7CiAgICBpbnQgb2xkdG9wOwogICAgZm9y KGludCBpPTA7IGk8bG9nMm5vcHJvY3M7IGkrKyl7CiAgICAgIG5laWdoYm9yID0gbXlFbnRyYW5j ZSArIChsb2NhbFBvc2l0aW9uIF4gcG93ZXIpOwogICAgICBwb3dlciAqPSAyOwogICAgICBvbGR0 b3AgPSB0b3A7ICAgICAKICAgICAgZm9yIChpbnQgaj0wOyBqPD1vbGR0b3A7IGorPTIpeyAgICAg CiAgICAgICAgIAogICAgICAgIG91dGJ1Zi5yb3cgPSBpbmRleFN0YWNrW2pdOwogICAgICAgIG91 dGJ1Zi5jb2wgPSBpbmRleFN0YWNrW2orMV07CiAgICAgICAgYnVmQ291bnRlciA9IDA7CiAgICAg ICAgZm9yIChpbnQgaz0wOyBrPGxvY2FsUm93czsgaysrKQogICAgICAgICAgIGZvciAoaW50IGw9 MDsgbDxsb2NhbENvbHM7IGwrKykgCiAgICAgICAgICAgICBvdXRidWYubWF0cml4W2J1ZkNvdW50 ZXIrK10gPSBiW291dGJ1Zi5yb3cra11bb3V0YnVmLmNvbCtsXTsKCXNlbmRSZWNlaXZlKG5laWdo Ym9yLCZvdXRidWYsJmluYnVmLDIqc2l6ZW9mKGludCkrbG9jYWxzaXplKnNpemVvZihFKSk7CiAg ICAgICAgIAogICAgICAgIGluZGV4U3RhY2tbKyt0b3BdID0gaW5idWYucm93OwogICAgICAgIGlu ZGV4U3RhY2tbKyt0b3BdID0gaW5idWYuY29sOwogICAgICAgIGJ1ZkNvdW50ZXIgPSAwOwogICAg ICAgIGZvciAoaW50IGs9MDsgazxsb2NhbFJvd3M7IGsrKykKICAgICAgICAgICBmb3IgKGludCBs PTA7IGw8bG9jYWxDb2xzOyBsKyspIAogICAgICAgICAgICAgYltpbmJ1Zi5yb3cra11baW5idWYu Y29sK2xdID0gaW5idWYubWF0cml4W2J1ZkNvdW50ZXIrK107fX19CgogCiAgdGVtcGxhdGUgPGNs YXNzIEY+CiAgRSBmb2xkKGNvbnN0IEZjdDI8RSxFLEUsRj4gZil7ICAKICAgICAKICAgICAKICAg ICAKICAgIEUgcmVzdWx0ID0gYVswXVswXTsKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxSb3dz OyBpKyspCiAgICAgIGZvcihpbnQgaiA9IDA7IGo8bG9jYWxDb2xzOyBqKyspIAogICAgICAgIGlm ICgoaSAhPSAwKSB8fCAoaiAhPSAwKSkKICAgICAgICAgIHJlc3VsdCA9IGYocmVzdWx0LCBhW2ld W2pdKTsKICAgIGlmIChEZWJ1Zykge3ByaW50ZigicmVzdWx0IG9mIGxvY2FsIGZvbGQgb24gJWQ6 ICVkXG4iLG15aWQscmVzdWx0KTtmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgCiAgICBpbnQg cG93ZXIgPSAxOwogICAgaW50IG5laWdoYm9yOwogICAgRSByZXN1bHQyOwogICAgZm9yKGludCBp PTA7IGk8bG9nMihub3Byb2NzKTsgaSsrKXsKICAgICAgbmVpZ2hib3IgPSBteUVudHJhbmNlICsg KGxvY2FsUG9zaXRpb24gXiBwb3dlcik7CiAgICAgIHBvd2VyICo9IDI7CiAgICAgIHNlbmRSZWNl aXZlKG5laWdoYm9yLCZyZXN1bHQsJnJlc3VsdDIsc2l6ZW9mKEUpKTsgIAogICAgICByZXN1bHQg PSBmKHJlc3VsdCxyZXN1bHQyKTt9CiAgICByZXR1cm4gcmVzdWx0O30KCiAgRSBmb2xkKEUgKCpm KShFLEUpKXsgcmV0dXJuIGZvbGQoY3VycnkoZikpO30KCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCgogCgogCiAgdGVtcGxhdGUgPGNsYXNzIEYxLCBjbGFzcyBGMj4K ICB2b2lkIHBlcm11dGUoY29uc3QgRmN0MjxpbnQsaW50LGludCxGMT4gbmV3Um93LCBjb25zdCBG Y3QyPGludCxpbnQsaW50LEYyPiBuZXdDb2wpewogICAgaW50IHJlY2VpdmVyOwogICAgcmVjZWl2 ZXIgPSBteUVudHJhbmNlICsgbmV3Um93KGxvY2FsUm93UG9zaXRpb24sbG9jYWxDb2xQb3NpdGlv bikgKiBibG9ja3NJblJvdyArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sKGxv Y2FsUm93UG9zaXRpb24sbG9jYWxDb2xQb3NpdGlvbik7CiAgICBpZiAoKHJlY2VpdmVyIDwgbXlF bnRyYW5jZSkgfHwgKHJlY2VpdmVyID4gbXlFeGl0KSkgdGhyb3cgSWxsZWdhbFBhcnRpdGlvbkV4 Y2VwdGlvbigpOwogICAgaW50IHNlbmRlciA9IHVuZGVmaW5lZDsKICAgIGZvciAoaW50IGk9MDsg aTxibG9ja3NJblJvdzsgaSsrKSAgCiAgICAgIGZvciAoaW50IGo9MDsgajxibG9ja3NJbkNvbDsg aisrKXsgCiAgICAgICAgIGlmIChEZWJ1ZyAmJiAobXlpZCA9PSBteUVudHJhbmNlKSkgCiAgICAg ICAgICAge3ByaW50ZigiJWQgcGVybXV0YXRpb24gdGFibGU6IHJvdyAlZCBjb2wgJWQgbmV3cm93 ICVkIG5ld2NvbCAlZFxuIiwKICAgICAgICAgICAgICAgICAgIG15aWQsIGksaixuZXdSb3coaSxq KSxuZXdDb2woaSxqKSk7CiAgICAgICAgICAgIGZmbHVzaCgoJl9faW9iWzFdKSApO30KICAgICAg ICBpZiAobXlFbnRyYW5jZSArIG5ld1JvdyhpLGopICogYmxvY2tzSW5Sb3cgKyBuZXdDb2woaSxq KSA9PSBteWlkKSAKICAgICAgICAgIGlmIChzZW5kZXIgPT0gdW5kZWZpbmVkKSBzZW5kZXIgPSBt eUVudHJhbmNlICsgaSpibG9ja3NJblJvdyArIGo7CiAgICAgICAgICBlbHNlIHRocm93IElsbGVn YWxQZXJtdXRlRXhjZXB0aW9uKCk7fSAgCiAgICBpZiAoc2VuZGVyID09IHVuZGVmaW5lZCkKICAg ICAgdGhyb3cgSWxsZWdhbFBlcm11dGVFeGNlcHRpb24oKTsgIAogICAgaWYgKHJlY2VpdmVyICE9 IG15aWQpewogICAgICBFIGIxW2xvY2FsUm93cypsb2NhbENvbHNdOwogICAgICBFIGIyW2xvY2Fs Um93cypsb2NhbENvbHNdOyAKICAgICAgTVBJX1N0YXR1cyBzdGF0OwogICAgICBpbnQgYnVmQ291 bnQgPSAwOwogICAgICBmb3IgKGludCBpPTA7IGk8bG9jYWxSb3dzOyBpKyspCiAgICAgICAgZm9y KGludCBqPTA7IGo8bG9jYWxDb2xzOyBqKyspICBiMVtidWZDb3VudCsrXSA9IGFbaV1bal07CiAg ICAgIHNlbmQocmVjZWl2ZXIsJmIxWzBdLHNpemVvZihFKSpsb2NhbFJvd3MqbG9jYWxDb2xzKTsg ICAgICAKICAgICAgcmVjZWl2ZShzZW5kZXIsJmIyWzBdLHNpemVvZihFKSpsb2NhbFJvd3MqbG9j YWxDb2xzLCZzdGF0KTsgIAogICAgICBidWZDb3VudCA9IDA7CiAgICAgIGZvciAoaW50IGk9MDsg aTxsb2NhbFJvd3M7IGkrKykKICAgICAgICBmb3IoaW50IGo9MDsgajxsb2NhbENvbHM7IGorKykg YVtpXVtqXSA9IGIyW2J1ZkNvdW50KytdO319CgogIHZvaWQgcGVybXV0ZShpbnQgKCpmKShpbnQs aW50KSwgaW50ICgqZykoaW50LGludCkpe3Blcm11dGUoY3VycnkoZiksY3VycnkoZykpO30KIAog CgogIHRlbXBsYXRlIDxjbGFzcyBGPgogIHZvaWQgcm90YXRlUm93cyhjb25zdCBGY3QxPGludCxp bnQsRj4gZil7CiAgIHBlcm11dGUoY3VycnkocHJvajFfMjxpbnQsaW50PiksCiAgICAgICAgICAg Y3VycnkoYXV4Um90YXRlUm93czxGPikoZikoYmxvY2tzSW5Sb3cpKTt9CgogIHZvaWQgcm90YXRl Um93cyhpbnQgKCpmKShpbnQpKXtyb3RhdGVSb3dzKGN1cnJ5KGYpKTt9CgogIHZvaWQgcm90YXRl Um93cyhpbnQgY29scyl7cm90YXRlUm93cyhjdXJyeShwcm9qMV8yPGludCxpbnQ+KShjb2xzKSk7 fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgRj4KICB2b2lkIHJvdGF0ZUNvbHMoY29uc3QgRmN0MTxpbnQs aW50LEY+IGYpewogICBwZXJtdXRlKGN1cnJ5KGF1eFJvdGF0ZUNvbHM8Rj4pKGYpKGJsb2Nrc0lu Q29sKSwKICAgICAgICAgICBjdXJyeShwcm9qMl8yPGludCxpbnQ+KSk7fQoKICB2b2lkIHJvdGF0 ZUNvbHMoaW50ICgqZikoaW50KSl7cm90YXRlQ29scyhjdXJyeShmKSk7fSAKCiAgdm9pZCByb3Rh dGVDb2xzKGludCByb3dzKXtyb3RhdGVDb2xzKGN1cnJ5KHByb2oxXzI8aW50LGludD4pKHJvd3Mp KTt9CgogCiAgdm9pZCBicm9hZGNhc3RQYXJ0aXRpb24oaW50IGJsb2NrUm93LCBpbnQgYmxvY2tD b2wpeyAgCiAgICAgaWYgKChibG9ja1JvdyA8IDApIHx8IChibG9ja1JvdyA+PSBibG9ja3NJblJv dykgfHwKICAgICAgICAgKGJsb2NrQ29sIDwgMCkgfHwgKGJsb2NrQ29sID49IGJsb2Nrc0luQ29s KSkgdGhyb3cgSWxsZWdhbFBhcnRpdGlvbkV4Y2VwdGlvbigpOwogICAgIGludCBibG9jayA9IGJs b2NrUm93ICogKGJsb2Nrc0luUm93KSArIGJsb2NrQ29sOwogICAgIHVuc2lnbmVkIGludCBuZWln aGJvcjsKICAgICB1bnNpZ25lZCBpbnQgcG93ZXIgPSAxOwogICAgIHVuc2lnbmVkIGludCBtYXNr ID0gMTA3Mzc0MTgyMjsgIAogICAgIE1QSV9TdGF0dXMgc3RhdDsgRSBiMVtsb2NhbFJvd3MqbG9j YWxDb2xzXTsKICAgICBFIGJ1Zltsb2NhbFJvd3MqbG9jYWxDb2xzXTsKICAgICBpbnQgYnVmQ291 bnQgPSAwOwogICAgIGZvcihpbnQgaT0wOyBpPGxvZzIobm9wcm9jcyk7IGkrKyl7IAogICAgICBp ZiAoKGxvY2FsUG9zaXRpb24gJiBtYXNrKSA9PSAoYmxvY2sgJiBtYXNrKSl7CiAgICAgICAgbmVp Z2hib3IgPSBteUVudHJhbmNlICsgKGxvY2FsUG9zaXRpb24gXiBwb3dlcik7CiAgICAgICAgaWYg KChsb2NhbFBvc2l0aW9uICYgcG93ZXIpID09IChibG9jayAmIHBvd2VyKSl7CiAgICAgICAgICBm b3IgKGludCBrPTA7IGs8bG9jYWxSb3dzOyBrKyspCiAgICAgICAgICAgIGZvcihpbnQgbD0wOyBs PGxvY2FsQ29sczsgbCsrKSAgYnVmW2J1ZkNvdW50KytdID0gYVtrXVtsXTsKICAgICAgICAgIHN5 bmNTZW5kKG5laWdoYm9yLGJ1ZixzaXplb2YoRSkqbG9jYWxzaXplKTt9CiAgICAgICAgZWxzZSB7 cmVjZWl2ZShuZWlnaGJvcixidWYsc2l6ZW9mKEUpKmxvY2Fsc2l6ZSwmc3RhdCk7CiAgICAgICAg ICAgICAgYnVmQ291bnQgPSAwOwogICAgICAgICAgICAgIGZvciAoaW50IGs9MDsgazxsb2NhbFJv d3M7IGsrKykKICAgICAgICAgICAgICAgIGZvcihpbnQgbD0wOyBsPGxvY2FsQ29sczsgbCsrKSAg YVtrXVtsXT0gIGJ1ZltidWZDb3VudCsrXTt9fQogICAgICBwb3dlciAqPSAyOwogICAgICBtYXNr ICY9IH5wb3dlcjt9fQoKICAgdm9pZCBicm9hZGNhc3QoaW50IHJvdywgaW50IGNvbCl7ICAKICAg ICBpbnQgYmxvY2sgPSByb3cvbG9jYWxSb3dzICogKG0vbG9jYWxDb2xzKSArIGNvbC9sb2NhbENv bHM7ICAKICAgICBpZiAoKGJsb2NrIDwgMCkgfHwgKGJsb2NrID4gbXlFeGl0LW15RW50cmFuY2Up KSB0aHJvdyBJbGxlZ2FsUGFydGl0aW9uRXhjZXB0aW9uKCk7IAogICAgIHVuc2lnbmVkIGludCBu ZWlnaGJvcjsKICAgICB1bnNpZ25lZCBpbnQgcG93ZXIgPSAxOwogICAgIHVuc2lnbmVkIGludCBt YXNrID0gMTA3Mzc0MTgyMjsgIAogICAgIE1QSV9TdGF0dXMgc3RhdDsKICAgICBpZiAoYmxvY2sg PT0gbG9jYWxQb3NpdGlvbikgYVswXVswXSA9IGFbcm93LWZpcnN0Um93XVtjb2wtZmlyc3RDb2xd OwogICAgIGZvcihpbnQgaT0wOyBpPGxvZzIobm9wcm9jcyk7IGkrKyl7IAogICAgICAgaWYgKChs b2NhbFBvc2l0aW9uICYgbWFzaykgPT0gKGJsb2NrICYgbWFzaykpewogICAgICAgICBuZWlnaGJv ciA9IG15RW50cmFuY2UgKyAobG9jYWxQb3NpdGlvbiBeIHBvd2VyKTsKICAgICAgICAgaWYgKChs b2NhbFBvc2l0aW9uICYgcG93ZXIpID09IChibG9jayAmIHBvd2VyKSkKIAkgICBzeW5jU2VuZChu ZWlnaGJvciwmYVswXVswXSxzaXplb2YoRSkpOwogICAgICAgICBlbHNlIHJlY2VpdmUobmVpZ2hi b3IsJmFbMF1bMF0sc2l6ZW9mKEUpLCZzdGF0KTt9CiAgICAgICBwb3dlciAqPSAyOwogICAgICAg bWFzayAmPSB+cG93ZXI7fQogICAgIGZvciAoaW50IGk9MDsgaTxsb2NhbFJvd3M7IGkrKykKICAg ICAgIGZvciAoaW50IGo9MDsgajxsb2NhbENvbHM7IGorKykgYVtpXVtqXSA9IGFbMF1bMF07fSAK CiAgICAKCiAKICB2b2lkIHNob3coKXsgIAogICAgRSBiW25dW21dOyAKICAgIGdhdGhlcihiKTsg CiAgICBpZiAobXlpZCA9PSBteUVudHJhbmNlKXsgIAogICAgICBmb3IoaW50IGk9MDsgaTxuOyBp KyspewogICAgICAgIHByaW50ZigiKCIpOwogICAgICAgIGZvcihpbnQgaj0wOyBqPG07IGorKykg cHJpbnRmKCIlZCAiLGJbaV1bal0pOwogICAgICAgIHByaW50ZigiKVxuIik7fQogICAgICBmZmx1 c2goKCZfX2lvYlsxXSkgKTt9fQp9OwogIAp0ZW1wbGF0ZSA8Y2xhc3MgRSwgaW50IG4+Cm9zdHJl YW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIERpc3RyaWJ1dGVkTWF0cml4PEUsbixtPiYgYSl7 CiAgRSBiW25dW21dOwogIGdhdGhlcihiKTsgCiAgaWYgKG15aWQgPT0gbXlFbnRyYW5jZSl7ICAK ICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKyl7IAogICAgICBvcyA8PCAiKCI7CiAgICAgIGZvcihp bnQgaj0wOyBqPG07IGorKykgb3MgPDwgYltpXVtqXSA8PCAiICI7CiAgICAgIG9zIDw8ICIpIiA8 PCBlbmRsO30KICAgIHJldHVybiBvczt9fQoKCiAKdm9pZCBJbml0U2tlbGV0b25zKGludCBhcmdj LCBjaGFyICoqYXJndil7CiAgIAogICAKICBNUElfQ29tbV9zaXplKDkxICwmbnVtcHJvY3MpOwog IE1QSV9Db21tX3JhbmsoOTEgLCZteWlkKTsKICBteUVudHJhbmNlID0gMDsgbXlFeGl0ID0gbnVt cHJvY3MgLSAxO30KCnZvaWQgVGVybWluYXRlU2tlbGV0b25zKCl7IAp9CgoKIAogCiAKICAKY2xh c3MgUHJvY2Vzc3sgIAoKICBwcm90ZWN0ZWQ6CiAgICBQcm9jZXNzb3JObyBpbjsKICAgIFByb2Nl c3Nvck5vIG91dDsKICAgIFByb2Nlc3Nvck5vIGVudHJhbmNlOwogICAgUHJvY2Vzc29yTm8gZXhp dDsgCiAgICBib29sIGZpbmlzaGVkOwoKCiAgcHVibGljOiAgICAKICAgIFByb2Nlc3MoKTogaW4o dW5kZWZpbmVkKSwgb3V0KHVuZGVmaW5lZCl7fTsKICAgIHZpcnR1YWwgflByb2Nlc3MoKXt9Owog ICAgdmlydHVhbCB2b2lkIHN0YXJ0KCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHNldEluKFByb2Nl c3Nvck5vIG4pe2luID0gbjt9CiAgICB2aXJ0dWFsIHZvaWQgc2V0T3V0KFByb2Nlc3Nvck5vIG4p e291dCA9IG47fQogICAgUHJvY2Vzc29yTm8gZ2V0SW4oKXtyZXR1cm4gaW47fQogICAgUHJvY2Vz c29yTm8gZ2V0T3V0KCl7cmV0dXJuIG91dDt9CiAgICBQcm9jZXNzb3JObyBnZXRFbnRyYW5jZSgp e3JldHVybiBlbnRyYW5jZTt9CiAgICBQcm9jZXNzb3JObyBnZXRFeGl0KCl7cmV0dXJuIGV4aXQ7 fSAgCiAgICB2aXJ0dWFsIHZvaWQgc2hvdygpID0gMDsKfTsKCiAKdGVtcGxhdGUgPGNsYXNzIEks IGNsYXNzIE8+CmNsYXNzIEF0b21pYzogcHVibGljIFByb2Nlc3N7CiAKICAgIEZjdDxJLE8+KiBm Y3Q7IAogICAgaW50IG5vcHJvY3M7ICAKCiAgcHVibGljOgogICAgQXRvbWljKE8gKCogZikoSSks IGludCBuKTogIG5vcHJvY3MobiksIFByb2Nlc3MoKXsKICAgICAgZmN0ID0gbmV3ICBGY3QxPEks TyxNa09wMTxJLE8+ID4oTWtPcDE8SSxPPihmKSk7CiAgICAgIGVudHJhbmNlID0gcnVubmluZ1By b2Nlc3Nvck5vOyBleGl0ID0gZW50cmFuY2U7CiAgICAgIHJ1bm5pbmdQcm9jZXNzb3JObyArPSBu O30gICAgCiAgICAKICAgIHRlbXBsYXRlIDxjbGFzcyBGPgogICAgQXRvbWljKEZjdDE8SSxPLEY+ IGYsIGludCBuKTogbm9wcm9jcyhuKSwgUHJvY2VzcygpeyAKICAgICAgZmN0ID0gbmV3IEZjdDE8 SSxPLEY+KGYpOwogICAgICBlbnRyYW5jZSA9IHJ1bm5pbmdQcm9jZXNzb3JObzsgZXhpdCA9IGVu dHJhbmNlOyAKICAgICAgcnVubmluZ1Byb2Nlc3Nvck5vICs9IG47fSAgICAgICAgCgogICAgdm9p ZCBzdGFydCgpewogICAgICBpZiAoRGVidWcpIHtwcmludGYoIiVkIGluIEF0b21pYzo6c3RhcnQo KVxuIixteWlkKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgICBJIHZhbHVlOwogICAgICBN UElfU3RhdHVzIHN0YXQ7CiAgICAgIGJvb2wgdGVzdGluZyA9IGZhbHNlOwogICAgICBmaW5pc2hl ZCA9ICgobXlpZCA8IGVudHJhbmNlKSB8fCAobXlpZCA+IGV4aXQpKTsgICAgIAogICAgICBpZiAo IWZpbmlzaGVkKSB7bXlFbnRyYW5jZSA9IGVudHJhbmNlOyBteUV4aXQgPSBleGl0O30KICAgICAg aWYgKERlYnVnICYmIGZpbmlzaGVkKSB7cHJpbnRmKCIlZCBub3QgY29uY2VybmVkOyBsZWF2aW5n XG4iLG15aWQpO2ZmbHVzaCgoJl9faW9iWzFdKSApO30KICAgICAgaWYgKGZpbmlzaGVkKSByZXR1 cm47CiAgICAgIHdoaWxlICghZmluaXNoZWQpeyAgCiAgICAgICAgaWYgKG15aWQgPT0gbXlFbnRy YW5jZSl7CiAgICAgICAgICBpZiAoRGVidWcpIHtwcmludGYoIiVkIHdhaXRpbmcgZm9yIG1lc3Nh Z2UgZnJvbSAlZFxuIixteWlkLGluKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgICAgICAg cmVjZWl2ZShpbiwmdmFsdWUsc2l6ZW9mKEkpLCZzdGF0KTsKICAgICAgICAgIGlmIChzdGF0Lk1Q SV9UQUcgPT0gMyApIHsKICAgICAgICAgICAgdGVzdGluZyA9IHRydWU7IHNlbmRUZXJtaW5hdGlv blRlc3Qob3V0KTt9CiAgICAgICAgICBlbHNlIGlmIChzdGF0Lk1QSV9UQUcgPT0gMiApIHsgIAog ICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgICAgICAgIGZvciAoaW50IGk9bXlFbnRy YW5jZSsxOyBpPD0gbXlFeGl0OyBpKyspIHNlbmRTdG9wKGkpO30KICAgICAgICAgIGVsc2UgIAog ICAgICAgICAgICBmb3IgKGludCBpPW15RW50cmFuY2UrMTsgaTw9IG15RXhpdDsgaSsrKQoJICAg ICAgc2VuZChpLCZ2YWx1ZSxzaXplb2YoSSkpO30KICAgICAgICBlbHNlIHsKICAgICAgICAgIHJl Y2VpdmUobXlFbnRyYW5jZSwmdmFsdWUsc2l6ZW9mKEkpLCZzdGF0KTsKICAgICAgICAgIGlmIChz dGF0Lk1QSV9UQUcgPT0gMiApIGZpbmlzaGVkID0gdHJ1ZTt9ICAgICAgCiAgICAgICAgaWYgKCgh ZmluaXNoZWQpICYmICghdGVzdGluZykpewogICAgICAgICAgTyByZXN1bHQgPSAoKmZjdCkodmFs dWUpOwogICAgICAgICAgaWYgKERlYnVnKSB7cHJpbnRmKCIlZDogSW50ZXJtZWRpYXRlIHJlc3Vs dDogJWRcbiIsbXlpZCxyZXN1bHQpO2ZmbHVzaCgoJl9faW9iWzFdKSApO30KICAgICAgICAgIHNl bmQob3V0LCZyZXN1bHQsc2l6ZW9mKE8pKTt9IAogICAgICAgIHRlc3RpbmcgPSBmYWxzZTt9CiAg ICAgIHNlbmRTdG9wKG91dCk7fQoKICAgIHZvaWQgc2hvdygpe3ByaW50ZigiQXRvbWljICVkXG4i LGVudHJhbmNlKTtmZmx1c2goKCZfX2lvYlsxXSkgKTt9Cn07CgogCnRlbXBsYXRlIDxjbGFzcyBJ LCBjbGFzcyBPPgpjbGFzcyBGaWx0ZXI6IHB1YmxpYyBQcm9jZXNzewoKICAgIEZjdDxFbXB0eSx2 b2lkPiogZmN0OwogICAgIAogICAgIAogICAgaW50IG5vcHJvY3M7ICAKCiAgcHVibGljOgogICAg RmlsdGVyKHZvaWQgKCogZikoKSwgaW50IG4pOiBub3Byb2NzKG4pLCBQcm9jZXNzKCl7CiAgICAg IGZjdCA9IG5ldyBGY3QxPEVtcHR5LHZvaWQsCiAgICAgICAgICAgICAgICAgICAgIEZjdDI8dm9p ZCAoKikoKSxFbXB0eSx2b2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgIE1rT3AyPHZvaWQg KCopKCksRW1wdHksdm9pZD4gPjo6UGFydGlhbEFwcGw+KGN1cnJ5KGV4dGVuZDx2b2lkPikoZikp OwogICAgICBlbnRyYW5jZSA9IHJ1bm5pbmdQcm9jZXNzb3JObzsgZXhpdCA9IGVudHJhbmNlOwog ICAgICBydW5uaW5nUHJvY2Vzc29yTm8gKz0gbjt9IAoKICAgIHRlbXBsYXRlIDxjbGFzcyBGPgog ICAgRmlsdGVyKEZjdDE8RW1wdHksdm9pZCxGPiBmLCBpbnQgbik6IG5vcHJvY3MobiksIFByb2Nl c3MoKXsKICAgICAgZmN0ID0gbmV3IEZjdDE8RW1wdHksdm9pZCxGPihmKTsKICAgICAgZW50cmFu Y2UgPSBydW5uaW5nUHJvY2Vzc29yTm87IGV4aXQgPSBlbnRyYW5jZTsKICAgICAgcnVubmluZ1By b2Nlc3Nvck5vICs9IG47fSAKCiAgICB2b2lkIHN0YXJ0KCl7CiAgICAgIGlmIChEZWJ1Zykge3By aW50ZigiJWQgaW4gRmlsdGVyOjpzdGFydCgpXG4iLG15aWQpOyBmZmx1c2goKCZfX2lvYlsxXSkg KTt9CiAgICAgIGZpbmlzaGVkID0gKChteWlkIDwgZW50cmFuY2UpIHx8IChteWlkID4gZXhpdCkp OwogICAgICBpZiAoIWZpbmlzaGVkKSB7bXlFbnRyYW5jZSA9IGVudHJhbmNlOyBteUV4aXQgPSBl eGl0OyBteVByb2Nlc3MgPSB0aGlzO30KICAgICAgaWYgKERlYnVnICYmIGZpbmlzaGVkKSB7cHJp bnRmKCIlZCBub3QgY29uY2VybmVkOyBsZWF2aW5nXG4iLG15aWQpO2ZmbHVzaCgoJl9faW9iWzFd KSApO30KICAgICAgaWYgKGZpbmlzaGVkKSByZXR1cm47CiAgICAgICgqZmN0KShFbXB0eSgpKTt9 CgogICAgdm9pZCBzaG93KCl7cHJpbnRmKCJGaWx0ZXIgJWRcbiIsZW50cmFuY2UpO2ZmbHVzaCgo Jl9faW9iWzFdKSApO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBJPgpJKiBnZXQoKXsgIAogIGlmICht eVByb2Nlc3MgPT0gX19udWxsICkgdGhyb3cgSWxsZWdhbEdldEV4Y2VwdGlvbigpOwogIEkqIHZh bHJlZiA9IG5ldyBJOwogIE1QSV9TdGF0dXMgc3RhdDsKICBib29sIGZpbmlzaGVkID0gZmFsc2U7 CgogIGlmIChteWlkID09IG15RW50cmFuY2UpewogICAgaWYgKERlYnVnKSB7cHJpbnRmKCIlZCB3 YWl0aW5nIGZvciBtZXNzYWdlIGZyb20gJWRcbiIsbXlpZCwoKm15UHJvY2VzcykuZ2V0SW4oKSk7 IAogICAgICAgICAgICAgICAgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgcmVjZWl2ZSgoKm15 UHJvY2VzcykuZ2V0SW4oKSx2YWxyZWYsc2l6ZW9mKEkpLCZzdGF0KTsKICAgIGlmIChzdGF0Lk1Q SV9UQUcgPT0gMyApewogICAgICBzZW5kVGVybWluYXRpb25UZXN0KCgqbXlQcm9jZXNzKS5nZXRP dXQoKSk7IHJldHVybiBnZXQ8ST4oKTt9CiAgICBpZiAoc3RhdC5NUElfVEFHID09IDIgKSB7ICAK ICAgICAgZmluaXNoZWQgPSB0cnVlOwogICAgICBmb3IgKGludCBpPW15RW50cmFuY2UrMTsgaTw9 IG15RXhpdDsgaSsrKSBzZW5kU3RvcChpKTt9CiAgICBlbHNlICAKICAgICAgZm9yIChpbnQgaT1t eUVudHJhbmNlKzE7IGk8PSBteUV4aXQ7IGkrKykJCiAgICAgICAgc2VuZChpLHZhbHJlZixzaXpl b2YoSSkpO30KICBlbHNlIHsKICAgIHJlY2VpdmUobXlFbnRyYW5jZSx2YWxyZWYsc2l6ZW9mKEkp LCZzdGF0KTsKICAgIGlmIChzdGF0Lk1QSV9UQUcgPT0gMiApIGZpbmlzaGVkID0gdHJ1ZTt9CiAg aWYgKGZpbmlzaGVkKSB7CiAgICBpZiAobXlpZCA9PSBteUVudHJhbmNlKSBzZW5kU3RvcCgoKm15 UHJvY2VzcykuZ2V0T3V0KCkpOyAKICAgIHJldHVybiBfX251bGwgO30KICBlbHNlIHJldHVybiB2 YWxyZWY7fQoKdGVtcGxhdGUgPGNsYXNzIE8+CnZvaWQgcHV0KE8gdmFsdWUpeyAgCiAgaWYgKG15 UHJvY2VzcyA9PSBfX251bGwgKSB0aHJvdyBJbGxlZ2FsUHV0RXhjZXB0aW9uKCk7CiAgTVBJX1N0 YXR1cyBzdGF0OwogIHNlbmQoKCpteVByb2Nlc3MpLmdldE91dCgpLCZ2YWx1ZSxzaXplb2YoTykp O30KCgogCnRlbXBsYXRlIDxjbGFzcyBPPgpjbGFzcyBJbml0aWFsOiBwdWJsaWMgUHJvY2Vzc3sK CiAgICBGY3Q8RW1wdHksTyo+KiBmY3Q7CiAgICAgCgogIHB1YmxpYzoKICAgIEluaXRpYWwoTyog KCogZikoKSk6IFByb2Nlc3MoKXsKICAgICAgZmN0ID0gbmV3IEZjdDE8RW1wdHksTyosCiAgICAg ICAgICAgICAgICAgICAgIEZjdDI8TyogKCopKCksRW1wdHksTyosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgTWtPcDI8TyogKCopKCksRW1wdHksTyo+ID46OlBhcnRpYWxBcHBsPihjdXJyeShl eHRlbmQ8Tyo+KShmKSk7CiAgICAgIGVudHJhbmNlID0gcnVubmluZ1Byb2Nlc3Nvck5vKys7IGV4 aXQgPSBlbnRyYW5jZTt9ICAKICAgICAgIAogICAgdGVtcGxhdGUgPGNsYXNzIEY+CiAgICBJbml0 aWFsKEZjdDE8RW1wdHksTyosRj4gZik6IFByb2Nlc3MoKXsKICAgICAgZmN0ID0gbmV3IEZjdDE8 RW1wdHksTyosRj4oZik7CiAgICAgIGVudHJhbmNlID0gcnVubmluZ1Byb2Nlc3Nvck5vKys7IGV4 aXQgPSBlbnRyYW5jZTt9ICAgICAgICAgCgogICAgdm9pZCBzdGFydCgpewogICAgICBmaW5pc2hl ZCA9ICEobXlpZCA9PSBlbnRyYW5jZSk7ICAgCiAgICAgIGlmICghZmluaXNoZWQpIHtteUVudHJh bmNlID0gZW50cmFuY2U7IG15RXhpdCA9IGV4aXQ7fQogICAgICBpZiAoRGVidWcpIHtwcmludGYo IiVkIGluIEluaXRpYWw6OnN0YXJ0KClcbiIsbXlpZCk7ICAgZmZsdXNoKCgmX19pb2JbMV0pICk7 fSAgCiAgICAgIGlmIChEZWJ1ZyAmJiBmaW5pc2hlZCkge3ByaW50ZigiJWQgbm90IGNvbmNlcm5l ZDsgbGVhdmluZ1xuIixteWlkKTtmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgIHdoaWxlICgh ZmluaXNoZWQpIHsgIAogICAgICAgIE8qIHJlc3VsdCA9ICgqZmN0KShFbXB0eSgpKTsKICAgICAg ICBpZiAocmVzdWx0ID09IF9fbnVsbCApIHtmaW5pc2hlZCA9IHRydWU7IHNlbmRTdG9wKG91dCk7 fQogICAgICAgIGVsc2Ugc2VuZChvdXQscmVzdWx0LHNpemVvZihPKSk7fQogICAgfSAgIAoKICAg IHZvaWQgc2hvdygpe3ByaW50ZigiSW5pdGlhbCAlZFxuIixlbnRyYW5jZSk7ZmZsdXNoKCgmX19p b2JbMV0pICk7fQp9OwoKIAp0ZW1wbGF0ZSA8Y2xhc3MgST4KY2xhc3MgRmluYWw6ICBwdWJsaWMg UHJvY2Vzc3sKCiAgICAgCiAgICBGY3Q8SSx2b2lkPiogZmN0OyAKCiAgcHVibGljOgogICAgRmlu YWwodm9pZCAoKiBmKShJKSk6IFByb2Nlc3MoKXsKICAgICAgZmN0ID0gbmV3IEZjdDE8SSx2b2lk LE1rT3AxPEksdm9pZD4gPihNa09wMTxJLHZvaWQ+KGYpKTsKICAgICAgZW50cmFuY2UgPSBydW5u aW5nUHJvY2Vzc29yTm8rKzsgZXhpdCA9IGVudHJhbmNlO30gICAgICAgCgogICAgdGVtcGxhdGUg PGNsYXNzIEY+CiAgICBGaW5hbChGY3QxPEksdm9pZCxGPiBmKTogUHJvY2VzcygpewogICAgICBm Y3QgPSBuZXcgRmN0MTxJLHZvaWQsRj4oZik7IAogICAgICBlbnRyYW5jZSA9IHJ1bm5pbmdQcm9j ZXNzb3JObysrOyBleGl0ID0gZW50cmFuY2U7fSAgICAgICAKCiAgICB2b2lkIHN0YXJ0KCl7IAog ICAgICBpZiAoRGVidWcpIHtwcmludGYoIiVkIGluIEZpbmFsOjpzdGFydCgpXG4iLG15aWQpOyBm Zmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgIEkgdmFsdWU7CiAgICAgIE1QSV9TdGF0dXMgc3Rh dDsKICAgICAgZmluaXNoZWQgPSAhKG15aWQgPT0gZW50cmFuY2UpOyAgICAgICAgCiAgICAgIGlm ICghZmluaXNoZWQpIHtteUVudHJhbmNlID0gZW50cmFuY2U7IG15RXhpdCA9IGV4aXQ7fQogICAg ICBpZiAoRGVidWcgJiYgZmluaXNoZWQpIHtwcmludGYoIiVkIG5vdCBjb25jZXJuZWQ7IGxlYXZp bmdcbiIsbXlpZCk7IGZmbHVzaCgoJl9faW9iWzFdKSApO30KICAgICAgd2hpbGUgKCFmaW5pc2hl ZCkgewogICAgICAgIGlmIChEZWJ1Zykge3ByaW50ZigiJWQgd2FpdGluZyBmb3IgbWVzc2FnZSBm cm9tICVkXG4iLG15aWQsaW4pOyBmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgICAgcmVjZWl2 ZShpbiwmdmFsdWUsc2l6ZW9mKEkpLCZzdGF0KTsKICAgICAgICBpZiAoc3RhdC5NUElfVEFHID09 IDMgKTsKICAgICAgICBlbHNlIGlmIChzdGF0Lk1QSV9UQUcgPT0gMiApIGZpbmlzaGVkID0gdHJ1 ZTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGlmIChEZWJ1Zykge3ByaW50ZigiZmluYWwgcHJv Y2VzcyByZWNlaXZlZDogJWRcbiIsIHZhbHVlKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fSAKICAg ICAgICAgICgqZmN0KSh2YWx1ZSk7fX0gICAgCiAgICAgIHJ1bm5pbmdQcm9jZXNzb3JObyA9IDA7 CiAgICAgIGlmIChEZWJ1Zykge3ByaW50ZigiJWQgcmVhY2hlcyBiYXJyaWVyXG4iLCBteWlkKTsg ZmZsdXNoKCgmX19pb2JbMV0pICk7fSAKICAgICAgTVBJX0JhcnJpZXIoOTEgKTsKICAgICAgaWYg KERlYnVnKSB7cHJpbnRmKCIlZCBoYXMgcGFzc2VkIGJhcnJpZXJcbiIsIG15aWQpOyBmZmx1c2go KCZfX2lvYlsxXSkgKTt9IAogICAgICB9CgogICAgdm9pZCBzaG93KCl7cHJpbnRmKCJGaW5hbCAl ZFxuIixlbnRyYW5jZSk7ZmZsdXNoKCgmX19pb2JbMV0pICk7fQp9OwogICAgICAKIApjbGFzcyBQ aXBlOiBwdWJsaWMgUHJvY2Vzc3sKICAgIFByb2Nlc3MqKiBwOwogICAgaW50IGxlbmd0aDsKCiAg cHVibGljOgoKICAgIFBpcGUoUHJvY2VzcyYgcDEsIFByb2Nlc3MmIHAyKTogUHJvY2Vzcygpewog ICAgICBsZW5ndGggPSAyOwogICAgICBwID0gbmV3IFByb2Nlc3MqIFtsZW5ndGhdOwogICAgICBw MS5zZXRPdXQocDIuZ2V0RW50cmFuY2UoKSk7CiAgICAgIHAyLnNldEluKHAxLmdldEV4aXQoKSk7 CiAgICAgIGVudHJhbmNlID0gcDEuZ2V0RW50cmFuY2UoKTsKICAgICAgZXhpdCA9IHAyLmdldEV4 aXQoKTsKICAgICAgcFswXSA9ICZwMTsgcFsxXSA9ICZwMjt9CiAgICAgCgogICAgdm9pZCBzZXRP dXQoUHJvY2Vzc29yTm8gbil7b3V0PW47ICgqKHBbbGVuZ3RoLTFdKSkuc2V0T3V0KG4pO30KCiAg ICB2b2lkIHNldEluKFByb2Nlc3Nvck5vIG4pe2luPW47ICAoKihwWzBdKSkuc2V0SW4obik7fQog ICAKICAgIHZvaWQgc3RhcnQoKXsgCiAgICAgIGlmIChEZWJ1Zykge3ByaW50ZigiJWQgaW4gUGlw ZTo6c3RhcnQoKVxuIixteWlkKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fSAgIAogICAgICBmb3Io aW50IGkgPSAwOyBpPGxlbmd0aDsgaSsrKSAKICAgICAgICAoKihwW2ldKSkuc3RhcnQoKTt9ICAg CiAgIAogICAgdm9pZCBzaG93KCl7IAogICAgICBwcmludGYoIlBpcGUgJWQsIGNoaWxkcmVuOiAl ZFxuIixlbnRyYW5jZSxsZW5ndGgpOwogICAgICBmb3IoaW50IGkgPSAwOyBpPGxlbmd0aDsgaSsr KXsKICAgICAgICBwcmludGYoImNoaWxkICVkOiAlZFxuIixpLCgqKHBbaV0pKS5nZXRFbnRyYW5j ZSgpKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7CiAgICAgICAgKCoocFtpXSkpLnNob3coKTt9fQoK fTsKIAogCnRlbXBsYXRlPGNsYXNzIEksIGNsYXNzIE8+IApjbGFzcyBGYXJtZXI6ICBwdWJsaWMg UHJvY2Vzc3sKICAgIFByb2Nlc3Nvck5vKiB3b3JrZXJJbjsKICAgIFByb2Nlc3Nvck5vKiB3b3Jr ZXJPdXQ7CiAgICBpbnQgbGVuZ3RoOwogICAgYm9vbCogaWRsZTsKCiAgcHVibGljOgogICAgRmFy bWVyKGludCBsKTogbGVuZ3RoKGwpewogICAgICB3b3JrZXJJbiAgPSBuZXcgUHJvY2Vzc29yTm9b bGVuZ3RoXTsKICAgICAgd29ya2VyT3V0ID0gbmV3IFByb2Nlc3Nvck5vW2xlbmd0aF07CiAgICAg IGVudHJhbmNlID0gcnVubmluZ1Byb2Nlc3Nvck5vKys7IGV4aXQgPSBlbnRyYW5jZTt9CgogICAg RmFybWVyKCl7fQoKICAgIHZvaWQgc3RhcnQoKXsKICAgICAgSSB2YWx1ZTsgTyByZXN1bHRbbGVu Z3RoXTsKICAgICAgTVBJX1N0YXR1cyBzdGF0OwogICAgICBNUElfUmVxdWVzdCByZXFbbGVuZ3Ro KzJdOwogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICBpbnQgY3VycmVudFdvcmtlciA9IDA7 CiAgICAgIGJvb2wgdGVzdGluZyA9IGZhbHNlOwogICAgICBib29sIGFjdGl2ZVtsZW5ndGgrMl07 CiAgICAgIGJvb2wgc2VuZGluZ1RvV29ya2VyID0gZmFsc2U7CiAgICAgIGludCBzZW5kRmluaXNo ZWRGbGFnOwogICAgICBpbnQgd2hvSXNSZWFkeTsKICAgICAgaW50IHRlcm1pbmF0aW9uVGVzdENv dW50ZXIgPSAwOwogICAgICBpbnQgdGVybWluYXRpb25Db3VudGVyID0gMDsKCiAgICAgIGlmIChE ZWJ1Zykge3ByaW50ZigiJWQgaW4gRmFybWVyOjpzdGFydCgpXG4iLG15aWQpOyBmZmx1c2goKCZf X2lvYlsxXSkgKTt9CiAgICAgIGZpbmlzaGVkID0gIShteWlkID09IGVudHJhbmNlKTsgCiAgICAg IGlmIChEZWJ1ZyAmJiBmaW5pc2hlZCkge3ByaW50ZigiJWQgbm90IGNvbmNlcm5lZDsgbGVhdmlu Z1xuIixteWlkKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgICBpZiAoZmluaXNoZWQpIHJl dHVybjsgCiAgICAgIGZvcihpbnQgaT0wOyBpPD1sZW5ndGgrMTsgaSsrKSBhY3RpdmVbaV0gPSBm YWxzZTsKICAgICAgd2hpbGUgKCFmaW5pc2hlZCkgeyAgICAKICAgICAgICAgCiAgICAgICAgZm9y KGludCBpPTA7IGk8bGVuZ3RoOyBpKyspeyAgCiAgICAgICAgICBpZiAoIWFjdGl2ZVtpKzFdKSB7 CiAgICAgICAgICAgIGlmKERlYnVnKXtwcmludGYoImZhcm1lciAlZCB3YWl0aW5nIGZvciBtZXNz YWdlIGZyb20gJWRcbiIsbXlpZCx3b3JrZXJJbltpXSk7ZmZsdXNoKCgmX19pb2JbMV0pICk7fQog ICAgICAgICAgICBub25ibG9ja2luZ1JlY2VpdmUod29ya2VySW5baV0sJnJlc3VsdFtpXSxzaXpl b2YoTyksJnJlcVtpKzFdKTsKICAJICAgIGFjdGl2ZVtpKzFdID0gdHJ1ZTt9fQogIAogICAgICAg IGlmICghYWN0aXZlW2xlbmd0aCsxXSkgeyAKICAgICAgICAgIGlmIChEZWJ1Zykge3ByaW50Zigi ZmFybWVyICVkIHdhaXRpbmcgZm9yIG1lc3NhZ2UgZnJvbSAlZFxuIixteWlkLGluKTsgZmZsdXNo KCgmX19pb2JbMV0pICk7fQogICAgICAgICAgbm9uYmxvY2tpbmdSZWNlaXZlKGluLCZ2YWx1ZSxz aXplb2YoSSksJnJlcVtsZW5ndGgrMV0pOyAKICAgICAgICAgIGFjdGl2ZVtsZW5ndGgrMV0gPSB0 cnVlO30gCiAgICAgICAgaWYgKHNlbmRpbmdUb1dvcmtlcikgIAogICAgICAgICAgTVBJX1dhaXRh bnkobGVuZ3RoKzEsJnJlcVswXSwmd2hvSXNSZWFkeSwmc3RhdCk7CiAgICAgICAgZWxzZXsgIAog ICAgICAgICAgTVBJX1dhaXRhbnkobGVuZ3RoKzEsJnJlcVsxXSwmd2hvSXNSZWFkeSwmc3RhdCk7 IHdob0lzUmVhZHkrKzt9CiAgICAgICAgIAoJYWN0aXZlW3dob0lzUmVhZHldID0gZmFsc2U7CiAg ICAgICAgaWYgKHdob0lzUmVhZHkgPT0gMCl7ICAgICAgIAogICAgICAgICAgc2VuZGluZ1RvV29y a2VyID0gZmFsc2U7ICAKICAgICAgICAgIG5vbmJsb2NraW5nUmVjZWl2ZShpbiwmdmFsdWUsc2l6 ZW9mKEkpLCZyZXFbbGVuZ3RoKzFdKTt9CiAgICAgICAgZWxzZSBpZiAod2hvSXNSZWFkeSA9PSBs ZW5ndGgrMSkgIAogICAgICAgICAgaWYgKHN0YXQuTVBJX1RBRyA9PSAzICl7IAogICAgICAgICAg ICBpZiAgKCh0ZXJtaW5hdGlvblRlc3RDb3VudGVyID4gMCkgfHwgKHRlcm1pbmF0aW9uQ291bnRl ciA+IDApKXsKICAgICAgICAgICAgICBwcmludGYoImVycm9yIGluIHNrZWxldG9uIGxpYnJhcnk6 IHJlcXVlc3QgZm9yIHRlcm1pbmF0aW9uIHRlc3QiKTsKICAgICAgICAgICAgICBwcmludGYoIiB3 aGlsZSBvdGhlciB0ZXN0IGlzIGluIHByb2dyZXNzIVxuIixteWlkKTsgZmZsdXNoKCgmX19pb2Jb MV0pICk7fQogICAgICAgICAgICAgdGVybWluYXRpb25UZXN0Q291bnRlciA9IGxlbmd0aDsKICAg ICAgICAgICAgICAKICAgICAgICAgICAgIGZvcihpbnQgaT0wOyBpPGxlbmd0aDsgaSsrKSBzZW5k VGVybWluYXRpb25UZXN0KHdvcmtlck91dFtpXSk7fQogICAgICAgICAgZWxzZSBpZiAoc3RhdC5N UElfVEFHID09IDIgKSB7CgkgICAgICAgICBpZiAoKHRlcm1pbmF0aW9uVGVzdENvdW50ZXIgPiAw KSB8fCAodGVybWluYXRpb25Db3VudGVyID4gMCkpewogICAgICAgICAgICAgICAgICAgcHJpbnRm KCJlcnJvciBpbiBza2VsZXRvbiBsaWJyYXJ5OiByZXF1ZXN0IGZvciB0ZXJtaW5hdGlvbiB0ZXN0 Iik7CiAgICAgICAgICAgICAgICAgICBwcmludGYoIiB3aGlsZSBvdGhlciB0ZXN0IGlzIGluIHBy b2dyZXNzIVxuIixteWlkKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgICAgICAgICAgICAg IHRlcm1pbmF0aW9uQ291bnRlciA9IGxlbmd0aDsgIAogICAgICAgICAgICAgICAgIGFjdGl2ZVt3 aG9Jc1JlYWR5XSA9IHRydWU7ICAKICAgICAgICAgICAgICAgICBmb3IoaW50IGk9MDsgaTxsZW5n dGg7IGkrKykgc2VuZFN0b3Aod29ya2VyT3V0W2ldKTt9CiAgICAgICAgICBlbHNleyAgIAogICAg ICAgICAgICBpZiAoRGVidWcpICB7cHJpbnRmKCIgZmFybWVyICVkIHByb3BhdGVzIG1lc3NhZ2Ug ZnJvbSAlZCB0byAlZCFcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlpZCxp bix3b3JrZXJPdXRbY3VycmVudFdvcmtlcl0pOyBmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAg ICAgICAgIHNlbmRpbmdUb1dvcmtlciA9IHRydWU7CiAgICAgICAgICAgIGFjdGl2ZVt3aG9Jc1Jl YWR5XSA9IHRydWU7ICAKICAgICAgICAgICAgbm9uYmxvY2tpbmdTZW5kKHdvcmtlck91dFtjdXJy ZW50V29ya2VyXSwmdmFsdWUsc2l6ZW9mKEkpLCZyZXFbMF0pOwogICAgICAgICAgICBjdXJyZW50 V29ya2VyID0gKGN1cnJlbnRXb3JrZXIgKzEpICUgbGVuZ3RoO30KICAgICAgICBlbHNlICAKICAg ICAgICAgIGlmIChzdGF0Lk1QSV9UQUcgPT0gMyApewogICAgICAgICAgICBpZiAoLS10ZXJtaW5h dGlvblRlc3RDb3VudGVyID09IDApCgkgICAgICBzZW5kVGVybWluYXRpb25UZXN0KG91dCk7fSAK ICAgICAgICAgIGVsc2UgaWYgKHN0YXQuTVBJX1RBRyA9PSAyICkgeyAKCSAgICAgICAgIGFjdGl2 ZVt3aG9Jc1JlYWR5XSA9IHRydWU7ICAKICAgICAgICAgICAgICAgICBpZiAoRGVidWcpIHtwcmlu dGYoIiVkOiBzdG9wIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSAlZDsgd2FpdGluZyBmb3IgJWQgc3Rv cCBtZXNzYWdlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlpZCx3 b3JrZXJJblt3aG9Jc1JlYWR5LTFdLHRlcm1pbmF0aW9uQ291bnRlcik7IGZmbHVzaCgoJl9faW9i WzFdKSApO30KICAgICAgICAgICAgICAgICBpZiAoLS10ZXJtaW5hdGlvbkNvdW50ZXIgPT0gMCl7 CiAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7CgkJICAgc2VuZFN0b3Aob3V0KTt9 CiAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSB7cHJpbnRmKCIlZDogd2FpdGluZyBmb3IgJWQg c3RvcCBtZXNzYWdlc1xuIixteWlkLHRlcm1pbmF0aW9uQ291bnRlcik7IAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZmbHVzaCgoJl9faW9iWzFdKSApO319CiAgICAgICAgICBlbHNlIHtp ZiAoRGVidWcpIHtwcmludGYoImZhcm1lciAlZCBwcm9wYXRlcyBtZXNzYWdlIGZyb20gJWQgdG8g JWQhXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15aWQsd29ya2VySW5b d2hvSXNSZWFkeS0xXSxvdXQpOyBmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgICAgICAgICAg ICBzZW5kKG91dCwmcmVzdWx0W3dob0lzUmVhZHktMV0sc2l6ZW9mKE8pKTt9fX0KCiAgIHZvaWQg c2V0V29ya2VySW4oUHJvY2Vzc29yTm8qIHApewogICAgIGZvcihpbnQgaT0wOyBpPGxlbmd0aDsg aSsrKQogICAgICAgd29ya2VySW5baV0gPSBwW2ldO30KCiAgIHZvaWQgc2V0V29ya2VyT3V0KFBy b2Nlc3Nvck5vKiBwKXsKICAgICBmb3IoaW50IGk9MDsgaTxsZW5ndGg7IGkrKykKICAgICAgIHdv cmtlck91dFtpXSA9IHBbaV07fSAgCgogICB2b2lkIHNob3coKXsgIAogICAgIHByaW50ZigiRmFy bWVyIChpbnRlcm5hbCklZFxuIixlbnRyYW5jZSk7ICBmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAg ICAgCn07ICAgICAgCgogCnRlbXBsYXRlPGNsYXNzIEksIGNsYXNzIE8+IApjbGFzcyBGYXJtOiBw dWJsaWMgUHJvY2Vzc3sKICAgIFByb2Nlc3MgKiogcDsgCiAgICBpbnQgbGVuZ3RoOwogICAgRmFy bWVyPEksTz4qIGZhcm1lcjsKCiAgcHVibGljOgogICAgRmFybShQcm9jZXNzKiAocHNbXSksIGlu dCBsKTogbGVuZ3RoKGwpLCBwKHBzKSwgUHJvY2VzcygpIHsKICAgICAgZmFybWVyID0gbmV3IEZh cm1lcjxJLE8+KGxlbmd0aCk7ICAKICAgICAgZW50cmFuY2UgPSAoKmZhcm1lcikuZ2V0RW50cmFu Y2UoKTsKICAgICAgZXhpdCA9ICgqZmFybWVyKS5nZXRFeGl0KCk7CiAgICAgIFByb2Nlc3Nvck5v IHBubzFbbGVuZ3RoXTsKICAgICAgUHJvY2Vzc29yTm8gcG5vMltsZW5ndGhdOwogICAgICBmb3Io aW50IGk9MDsgaTxsZW5ndGg7IGkrKyl7CiAgICAgICAgcG5vMVtpXSA9ICgqKHBbaV0pKS5nZXRF bnRyYW5jZSgpOwogICAgICAgIHBubzJbaV0gPSAoKihwW2ldKSkuZ2V0RXhpdCgpOyAgCiAgICAg ICAgKCoocFtpXSkpLnNldEluKGVudHJhbmNlKTsKICAgICAgICAoKihwW2ldKSkuc2V0T3V0KGV4 aXQpO30KICAgICAgKCpmYXJtZXIpLnNldFdvcmtlck91dChwbm8xKTsgICAgICAKICAgICAgKCpm YXJtZXIpLnNldFdvcmtlckluKHBubzIpO30KCiAgICB2b2lkIHNldE91dChQcm9jZXNzb3JObyBu KXtvdXQ9bjsgKCpmYXJtZXIpLnNldE91dChuKTt9CgogICAgdm9pZCBzZXRJbihQcm9jZXNzb3JO byBuKXtpbj1uOyAgKCpmYXJtZXIpLnNldEluKG4pO30KIAogICAgdm9pZCBzdGFydCgpewogICAg ICAoKmZhcm1lcikuc3RhcnQoKTsKICAgICAgZm9yKGludCBpID0gMDsgaTxsZW5ndGg7IGkrKykg CiAgICAgICAgKCoocFtpXSkpLnN0YXJ0KCk7fSAKCiAgICB2b2lkIHNob3coKXsgCiAgICAgIHBy aW50ZigiRmFybSAlZFxuIixlbnRyYW5jZSk7ICBmZmx1c2goKCZfX2lvYlsxXSkgKTsKICAgICAg Zm9yKGludCBpID0gMDsgaTxsZW5ndGg7IGkrKykgCiAgICAgICAgKCoocFtpXSkpLnNob3coKTt9 Cn07CgogCnRlbXBsYXRlPGNsYXNzIEM+IApjbGFzcyBMb29wR3VhcmQ6ICBwdWJsaWMgUHJvY2Vz c3sKICAgIFByb2Nlc3Nvck5vIGJvZHlJbjsKICAgIFByb2Nlc3Nvck5vIGJvZHlPdXQ7CiAgICBG Y3Q8Qyxib29sPiogcHJlZGljYXRlOyAgCgogIHB1YmxpYzoKICAgIHRlbXBsYXRlIDxjbGFzcyBG PgogICAgTG9vcEd1YXJkKEZjdDE8Qyxib29sLEY+IGYsIFByb2Nlc3Nvck5vIHBubzEsIFByb2Nl c3Nvck5vIHBubzIpOiBib2R5SW4ocG5vMiksIGJvZHlPdXQocG5vMikgewogICAgICBwcmVkaWNh dGUgPSBuZXcgRmN0MTxDLGJvb2wsRj4oZik7CiAgICAgIGVudHJhbmNlID0gcnVubmluZ1Byb2Nl c3Nvck5vKys7IGV4aXQgPSBlbnRyYW5jZTt9CgogICAgdm9pZCBzdGFydCgpewogICAgICBDIHZh bHVlOyBDIHJlc3VsdDsKICAgICAgTVBJX1N0YXR1cyBzdGF0OwogICAgICBNUElfUmVxdWVzdCBy ZXFbMl07CiAgICAgIGludCB3aG9GaW5pc2hlZDsKICAgICAgYm9vbCBub25hY3RpdmVbMl07CiAg ICAgIGJvb2wgZmluaXNoaW5nID0gZmFsc2U7CiAgICAgIGJvb2wgZmluaXNoaW5nRmFpbGVkID0g ZmFsc2U7CgogICAgICBpZiAoRGVidWcpIHtwcmludGYoIiVkIGluIExvb3BHdWFyZDo6c3RhcnQo KVxuIixteWlkKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgICBmaW5pc2hlZCA9ICEobXlp ZCA9PSBlbnRyYW5jZSk7IAogICAgICBpZiAoRGVidWcgJiYgZmluaXNoZWQpIHtwcmludGYoIiVk IG5vdCBjb25jZXJuZWQ7IGxlYXZpbmdcbiIsbXlpZCk7IGZmbHVzaCgoJl9faW9iWzFdKSApO30K ICAgICAgaWYgKGZpbmlzaGVkKSByZXR1cm47CiAgICAgIG5vbmFjdGl2ZVswXSA9IHRydWU7IG5v bmFjdGl2ZVsxXSA9IHRydWU7CiAgICAgIHdoaWxlICghZmluaXNoZWQpIHsgICAgICAgIAogICAg ICAgIGlmIChEZWJ1Zykge3ByaW50ZigiJWQgd2FpdGluZyBmb3IgbWVzc2FnZXMgZnJvbSAlZCBh bmQgJWRcbiIsbXlpZCxib2R5SW4saW4pOyAKICAgICAgICAgICAgICAgICAgICBmZmx1c2goKCZf X2lvYlsxXSkgKTt9CiAgICAgICAgaWYgKG5vbmFjdGl2ZVswXSkge25vbmJsb2NraW5nUmVjZWl2 ZShib2R5SW4sJnJlc3VsdCxzaXplb2YoQyksJnJlcVswXSk7IAogICAgICAgICAgICAgICAgICAg ICAgICAgICBub25hY3RpdmVbMF0gPSBmYWxzZTt9CiAgICAgICAgaWYgKG5vbmFjdGl2ZVsxXSkg e25vbmJsb2NraW5nUmVjZWl2ZShpbiwmdmFsdWUsc2l6ZW9mKEMpLCZyZXFbMV0pOwogICAgICAg ICAgICAgICAgICAgICAgICAgICBub25hY3RpdmVbMV0gPSBmYWxzZTt9CiAgICAgICAgTVBJX1dh aXRhbnkoMixyZXEsJndob0ZpbmlzaGVkLCZzdGF0KTsKICAgICAgICBpZiAoRGVidWcpIHtwcmlu dGYoIiVkIFdhaXRfQW55IHNlbGVjdGVkOiAlZFxuIixteWlkLHdob0ZpbmlzaGVkKTsgZmZsdXNo KCgmX19pb2JbMV0pICk7fQogICAgICAgIGlmICh3aG9GaW5pc2hlZCA9PSAxKXsgIAogICAgICAg ICAgbm9uYWN0aXZlWzFdID0gdHJ1ZTsKICAgICAgICAgIGlmIChzdGF0Lk1QSV9UQUcgPT0gMyAp CiAgICAgICAgICAgIGlmIChmaW5pc2hpbmcpICAKICAgICAgICAgICAgICB7cHJpbnRmKCJlcnJv ciBpbiBza2VsZXRvbiBsaWJyYXJ5OiB0ZXJtaW5hdGlvbiB0ZXN0IHdoaWxlIHN0b3BwaW5nIHRo ZSBzeXN0ZW1cbiIpOyAKICAgICAgICAgICAgICAgZmZsdXNoKCgmX19pb2JbMV0pICk7fQoJICAg IGVsc2UgIAogICAgICAgICAgICAgIHNlbmRUZXJtaW5hdGlvblRlc3QoYm9keU91dCk7CiAgICAg ICAgICBlbHNlIGlmIChzdGF0Lk1QSV9UQUcgPT0gMiApeyAKICAgICAgICAgICAgIAogCSAgICBm aW5pc2hpbmcgPSB0cnVlOwogICAgICAgICAgICBzZW5kVGVybWluYXRpb25UZXN0KGJvZHlPdXQp O30KICAgICAgICAgIGVsc2Ugc2VuZChib2R5T3V0LCZ2YWx1ZSxzaXplb2YoQykpO30KICAgICAg ICBlbHNlIHsgCiAgICAgICAgICBub25hY3RpdmVbMF0gPSB0cnVlOwogICAgICAgICAgaWYgKHN0 YXQuTVBJX1RBRyA9PSAzICkgCiAgICAgICAgICAgIGlmIChmaW5pc2hpbmcpIAogICAgICAgICAg ICAgIGlmIChmaW5pc2hpbmdGYWlsZWQpIHsKICAgICAgICAgICAgICAgIGZpbmlzaGluZ0ZhaWxl ZCA9IGZhbHNlOyBzZW5kVGVybWluYXRpb25UZXN0KGJvZHlPdXQpO30KICAgICAgICAgICAgICBl bHNlIHNlbmRTdG9wKGJvZHlPdXQpOwogICAgICAgICAgICBlbHNlICBzZW5kVGVybWluYXRpb25U ZXN0KG91dCk7CiAgICAgICAgICBlbHNlIGlmIChzdGF0Lk1QSV9UQUcgPT0gMiApIHtmaW5pc2hl ZCA9IHRydWU7IHNlbmRTdG9wKG91dCk7fQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlm ICgoKnByZWRpY2F0ZSkocmVzdWx0KSkgc2VuZChib2R5T3V0LCZyZXN1bHQsc2l6ZW9mKEMpKTsK ICAgCSAgICBlbHNlIHNlbmQob3V0LCZyZXN1bHQsc2l6ZW9mKEMpKTsKICAgICAgICAgICAgaWYg KGZpbmlzaGluZykgZmluaXNoaW5nRmFpbGVkID0gdHJ1ZTt9fX19CiAgIAogICB2b2lkIHNob3co KXsgIAogICAgIHByaW50ZigiTG9vcEd1YXJkIChpbnRlcm5hbCklZFxuIixlbnRyYW5jZSk7ICBm Zmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgCn07ICAgICAgCgogCiAKIAogCiAKIAogCnRlbXBs YXRlPGNsYXNzIEM+IApjbGFzcyBMb29wOiBwdWJsaWMgUHJvY2Vzc3sKICAgIFByb2Nlc3MgKiBi b2R5OyAKICAgIExvb3BHdWFyZDxDPiogZ3VhcmQ7CgogIHB1YmxpYzoKICAgIExvb3AoUHJvY2Vz cyYgcCwgYm9vbCAoKiBmKShDKSk6IGJvZHkoJnApLCBQcm9jZXNzKCkgewogICAgICAKICAgICAg Z3VhcmQgPSBuZXcgTG9vcEd1YXJkPEM+KEZjdDE8Qyxib29sLE1rT3AxPEMsYm9vbD4gPihNa09w MTxDLGJvb2w+KGYpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqYm9keSkuZ2V0 RW50cmFuY2UoKSwoKmJvZHkpLmdldEV4aXQoKSk7ICAKICAgICAgZW50cmFuY2UgPSAoKmd1YXJk KS5nZXRFbnRyYW5jZSgpOwogICAgICBleGl0ID0gKCpndWFyZCkuZ2V0RXhpdCgpOwogICAgICAo KmJvZHkpLnNldEluKGVudHJhbmNlKTsKICAgICAgKCpib2R5KS5zZXRPdXQoZXhpdCk7fQoKICAg IHRlbXBsYXRlIDxjbGFzcyBGPgogICAgTG9vcChQcm9jZXNzJiBwLCAgRmN0MTxDLGJvb2wsRj4g Zik6IGJvZHkoJnApLCBQcm9jZXNzKCkgewogICAgICBndWFyZCA9IG5ldyBMb29wR3VhcmQ8Qz4o ZiwoKmJvZHkpLmdldEVudHJhbmNlKCksKCpib2R5KS5nZXRFeGl0KCkpOyAgCiAgICAgIGVudHJh bmNlID0gKCpndWFyZCkuZ2V0RW50cmFuY2UoKTsKICAgICAgZXhpdCA9ICgqZ3VhcmQpLmdldEV4 aXQoKTsKICAgICAgKCpib2R5KS5zZXRJbihlbnRyYW5jZSk7CiAgICAgICgqYm9keSkuc2V0T3V0 KGV4aXQpO30KCiAgICB2b2lkIHNldE91dChQcm9jZXNzb3JObyBuKXtvdXQ9bjsgKCpndWFyZCku c2V0T3V0KG4pO30KCiAgICB2b2lkIHNldEluKFByb2Nlc3Nvck5vIG4pe2luPW47ICAoKmd1YXJk KS5zZXRJbihuKTt9CiAKICAgIHZvaWQgc3RhcnQoKXsKICAgICAgKCpndWFyZCkuc3RhcnQoKTsg KCpib2R5KS5zdGFydCgpO30gCgogICAgdm9pZCBzaG93KCl7IAogICAgICBwcmludGYoIkxvb3Ag JWRcbiIsZW50cmFuY2UpOyAgZmZsdXNoKCgmX19pb2JbMV0pICk7CiAgICAgICgqYm9keSkuc2hv dygpO30KfTsKCiAKIAogCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlPGNsYXNzIEk+CnZvaWQgZHVw bGljYXRlKGludCBsZW5ndGgsIEVtcHR5IGR1bW15KXsKICBpbnQqIHZhbHJlZjsKICB3aGlsZSAo KHZhbHJlZiA9IGdldDxJPigpKSAhPSBfX251bGwgKQogICAgZm9yKGludCBpPTA7IGk8bGVuZ3Ro OyBpKyspCiAgICAgIHB1dDxJPigqdmFscmVmKTt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSSwgY2xhc3Mg Tz4gClByb2Nlc3MqIFBhcihQcm9jZXNzKiAocHNbXSksIGludCBsZW5ndGgpewogIEZpbHRlcjxJ LEk+KiBwMSA9IG5ldyBGaWx0ZXI8SSxJPihjdXJyeShkdXBsaWNhdGU8ST4pKGxlbmd0aCksMSk7 CiAgRmFybTxJLE8+KiAgIHAyID0gbmV3IEZhcm08SSxPPihwcyxsZW5ndGgpOwogIHJldHVybiBu ZXcgUGlwZSgqcDEsKnAyKTt9CiMgMSAiZ2F1c3MuY3BwIiAyCgoKY29uc3QgaW50IHNpemUgPSAy MDsKY29uc3QgaW50IHByb2Nlc3NvcnMgPSA0OwoKaW5saW5lIGludCBhZGRpbmMoY29uc3QgaW50 IGEsIGNvbnN0IGludCBiKXtyZXR1cm4gYStiKzE7fQoKdGVtcGxhdGUgPGNsYXNzIEMsIGludCBu PgppbnQgY29weVBpdm90KERpc3RyaWJ1dGVkTWF0cml4PEMsbixuKzE+JiBBLCBpbnQgaywgaW50 IGksIGludCBqLCBpbnQgUGlqKXsKICByZXR1cm4gQS5pc0xvY2FsKGssaykgPyBBLmdldChrLGop L0EuZ2V0KGssaykgOiAwO30KCnRlbXBsYXRlIDxjbGFzcyBDLCBpbnQgbj4KaW50IHBpdm90T3Ao RGlzdHJpYnV0ZWRNYXRyaXg8QyxuLG4rMT4mIEEsICBEaXN0cmlidXRlZE1hdHJpeDxDLHByb2Nl c3NvcnMsbisxPiYgUGl2b3QsIAogICAgICAgICAgICBpbnQgaywgaW50IGksIGludCBqLCBpbnQg UGlqKXsKICByZXR1cm4gKGkgPT0gaykgPyBBLmdldChpLGopIDogQS5nZXQoaSxqKSAtIEEuZ2V0 KGksaykqUGl2b3QuZ2V0TG9jYWxHb2JhbCgwLGopO30KCnRlbXBsYXRlIDxjbGFzcyBDLCBpbnQg bj4KaW50IGNvbXB1dGVSZXN1bHQoRGlzdHJpYnV0ZWRNYXRyaXg8QyxuLG4rMT4mIEEsIGludCBp KXsKICByZXR1cm4gQS5nZXQoaSxuKS9BLmdldChpLGkpO30KCiAKIAogCnRlbXBsYXRlIDxjbGFz cyBDLCBpbnQgbj4gIApEaXN0cmlidXRlZEFycmF5PEMsbj4gZ2F1c3MoRGlzdHJpYnV0ZWRNYXRy aXg8QyxuLG4rMT4mIEEpewogICAKICBEaXN0cmlidXRlZE1hdHJpeDxDLG4sbisxPiBCKEEpOwog IERpc3RyaWJ1dGVkTWF0cml4PEMscHJvY2Vzc29ycyxuKzE+IFBpdm90KHByb2Nlc3NvcnMsMSk7 CiAgZm9yIChpbnQgaz0wOyBrPG47IGsrKyl7CiAgICBQaXZvdC5tYXBJbmRleEluUGxhY2UoY3Vy cnkoY29weVBpdm90KShBKShrKSk7CiAgICBQaXZvdC5icm9hZGNhc3RQYXJ0aXRpb24oaywxKTsK ICAgIEIubWFwSW5kZXhJblBsYWNlKGN1cnJ5KHBpdm90T3ApKEEpKFBpdm90KShrKSk7CiAgICBB ID0gQjt9CiAgRGlzdHJpYnV0ZWRBcnJheTxDLG4+IFJlc3VsdChjdXJyeShjb21wdXRlUmVzdWx0 KShCKSk7CiAgcmV0dXJuIFJlc3VsdDt9IAoKCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dil7CiAKIAogCiAgdHJ5ewogICAgSW5pdFNrZWxldG9ucyhhcmdjLGFyZ3YpOwogICAKICAgIERp c3RyaWJ1dGVkTWF0cml4PGludCxzaXplLHNpemUrMT4gQSgmIGFkZGluYyxwcm9jZXNzb3JzLDEp OwogICAgICBpZiAobXlpZCA9PSAwKSB7cHJpbnRmKCJBOlxuIik7IGZmbHVzaCgoJl9faW9iWzFd KSApO30gQS5zaG93KCk7CiAgICBEaXN0cmlidXRlZEFycmF5PGludCxzaXplPiBSID0gZ2F1c3Mo QSk7CiAgICAgICBpZiAobXlpZCA9PSAwKSB7cHJpbnRmKCJSZXN1bHQgb2YgR2F1c3NpYW4gRWxp bWluYXRpb246XG4iKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgUi5zaG93KCk7CgogICAg VGVybWluYXRlU2tlbGV0b25zKCk7fQogIGNhdGNoKEV4Y2VwdGlvbil7cHJpbnRmKCJFeGNlcHRp b25cbiIpOyBmZmx1c2goKCZfX2lvYlsxXSkgKTt9OyAgICAgICAgICAgICAgICAgIAp9Cg==