From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2935 invoked by alias); 16 Aug 2002 08:36:02 -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 2913 invoked by uid 71); 16 Aug 2002 08:36:01 -0000 Resent-Date: 16 Aug 2002 08:36:01 -0000 Resent-Message-ID: <20020816083601.2912.qmail@sources.redhat.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, kbratanov@yahoo.com Received: (qmail 1576 invoked by uid 61); 16 Aug 2002 08:33:19 -0000 Message-Id: <20020816083319.1575.qmail@sources.redhat.com> Date: Fri, 16 Aug 2002 03:46:00 -0000 From: kbratanov@yahoo.com Reply-To: kbratanov@yahoo.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/7609: c++ compiler crashes when compiling libcrypto4.2 on redhat 7.0 X-SW-Source: 2002-08/txt/msg00321.txt.bz2 List-Id: >Number: 7609 >Category: c++ >Synopsis: c++ compiler crashes when compiling libcrypto4.2 on redhat 7.0 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri Aug 16 01:36:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: K.Bratanov >Release: gcc version 2.96 20000731 (Red Hat Linux 7.0) >Organization: >Environment: RedHat 7.0 (not upgraded), CPU K6 400 >Description: untarred libcrypto++_4.2.orig.tar.gz typed make and after a minute of compiling received the next message: g++ -g -pipe -c ec2n.cpp In file included from ec2n.h:5, from ec2n.cpp:5: misc.h: In method `int CryptoPP::PolynomialMod2::GetCoefficient (unsigned int) const': misc.h:568: Internal error #73. misc.h:568: Internal compiler error in process_overload_item, at ../gcc/cp/method.c:1460 Please submit a full bug report. See for instructions. make: *** [ec2n.o] Error 2 >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: text/x-chdr; name="misc.h" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="misc.h" I2lmbmRlZiBDUllQVE9QUF9NSVNDX0gKI2RlZmluZSBDUllQVE9QUF9NSVNDX0gKCiNpbmNsdWRl ICJjb25maWcuaCIKI2luY2x1ZGUgPGFzc2VydC5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CQkvLyBD b2RlV2FycmlvciBkb2Vzbid0IGhhdmUgbWVtb3J5LmgKI2luY2x1ZGUgPGFsZ29yaXRobT4KI2lu Y2x1ZGUgPHN0cmluZz4KCiNpZmRlZiBJTlRFTF9JTlRSSU5TSUNTCiNpbmNsdWRlIDxzdGRsaWIu aD4KI2VuZGlmCgpOQU1FU1BBQ0VfQkVHSU4oQ3J5cHRvUFApCgovLyAqKioqKioqKioqKioqKiBt aXNjIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioKCiNkZWZpbmUgR0VUQllURSh4LCB5KSAodW5z aWduZWQgaW50KSgoKHgpPj4oOCooeSkpKSYyNTUpCi8vIHRoaXMgb25lIG1heSBiZSBmYXN0ZXIg b24gYSBQZW50aXVtCi8vICNkZWZpbmUgR0VUQllURSh4LCB5KSAoKChieXRlICopJih4KSlbeV0p Cgp1bnNpZ25lZCBpbnQgUGFyaXR5KHVuc2lnbmVkIGxvbmcpOwp1bnNpZ25lZCBpbnQgQnl0ZVBy ZWNpc2lvbih1bnNpZ25lZCBsb25nKTsKdW5zaWduZWQgaW50IEJpdFByZWNpc2lvbih1bnNpZ25l ZCBsb25nKTsKdW5zaWduZWQgbG9uZyBDcm9wKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCBz aXplKTsKCmlubGluZSB1bnNpZ25lZCBpbnQgYml0c1RvQnl0ZXModW5zaWduZWQgaW50IGJpdENv dW50KQp7CglyZXR1cm4gKChiaXRDb3VudCs3KS8oOCkpOwp9CgppbmxpbmUgdW5zaWduZWQgaW50 IGJ5dGVzVG9Xb3Jkcyh1bnNpZ25lZCBpbnQgYnl0ZUNvdW50KQp7CglyZXR1cm4gKChieXRlQ291 bnQrV09SRF9TSVpFLTEpL1dPUkRfU0laRSk7Cn0KCmlubGluZSB1bnNpZ25lZCBpbnQgYml0c1Rv V29yZHModW5zaWduZWQgaW50IGJpdENvdW50KQp7CglyZXR1cm4gKChiaXRDb3VudCtXT1JEX0JJ VFMtMSkvKFdPUkRfQklUUykpOwp9Cgp2b2lkIHhvcmJ1ZihieXRlICpidWYsIGNvbnN0IGJ5dGUg Km1hc2ssIHVuc2lnbmVkIGludCBjb3VudCk7CnZvaWQgeG9yYnVmKGJ5dGUgKm91dHB1dCwgY29u c3QgYnl0ZSAqaW5wdXQsIGNvbnN0IGJ5dGUgKm1hc2ssIHVuc2lnbmVkIGludCBjb3VudCk7Cgpp bmxpbmUgdW5zaWduZWQgaW50IFJvdW5kRG93blRvTXVsdGlwbGVPZih1bnNpZ25lZCBpbnQgbiwg dW5zaWduZWQgaW50IG0pCnsKCXJldHVybiBuIC0gbiVtOwp9CgppbmxpbmUgdW5zaWduZWQgaW50 IFJvdW5kVXBUb011bHRpcGxlT2YodW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCBtKQp7Cgly ZXR1cm4gUm91bmREb3duVG9NdWx0aXBsZU9mKG4rbS0xLCBtKTsKfQoKdGVtcGxhdGUgPGNsYXNz IFQ+CmlubGluZSBib29sIElzQWxpZ25lZChjb25zdCB2b2lkICpwKQp7CglyZXR1cm4gKHVuc2ln bmVkIGludClwICUgc2l6ZW9mKFQpID09IDA7Cn0KCmlubGluZSBib29sIENoZWNrRW5kaWFuZXNz KGJvb2wgaGlnaEZpcnN0KQp7CiNpZmRlZiBJU19MSVRUTEVfRU5ESUFOCglyZXR1cm4gIWhpZ2hG aXJzdDsKI2Vsc2UKCXJldHVybiBoaWdoRmlyc3Q7CiNlbmRpZgp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VD4JCS8vIGNhbid0IHVzZSA8c3N0cmVhbT4gYmVjYXVzZSBHQ0MgMi45NS4yIGRvZXNuJ3QgaGF2 ZSBpdApzdGQ6OnN0cmluZyBJbnRUb1N0cmluZyhUIGEpCnsKCWlmIChhID09IDApCgkJcmV0dXJu ICIwIjsKCWJvb2wgbmVnYXRlID0gZmFsc2U7CglpZiAoYSA8IDApCgl7CgkJbmVnYXRlID0gdHJ1 ZTsKCQlhID0gLWE7Cgl9CglzdGQ6OnN0cmluZyByZXN1bHQ7Cgl3aGlsZSAoYSA+IDApCgl7CgkJ cmVzdWx0ID0gY2hhcignMCcgKyBhICUgMTApICsgcmVzdWx0OwoJCWEgPSBhIC8gMTA7Cgl9Cglp ZiAobmVnYXRlKQoJCXJlc3VsdCA9ICItIiArIHJlc3VsdDsKCXJldHVybiByZXN1bHQ7Cn0KCi8v ICoqKioqKioqKioqKioqIHJvdGF0ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqCgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4gaW5saW5lIFQgcm90bEZpeGVkKFQgeCwgdW5zaWduZWQgaW50IHkpCnsKCWFz c2VydCh5IDwgc2l6ZW9mKFQpKjgpOwoJcmV0dXJuICh4PDx5KSB8ICh4Pj4oc2l6ZW9mKFQpKjgt eSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgcm90ckZpeGVkKFQgeCwgdW5zaWdu ZWQgaW50IHkpCnsKCWFzc2VydCh5IDwgc2l6ZW9mKFQpKjgpOwoJcmV0dXJuICh4Pj55KSB8ICh4 PDwoc2l6ZW9mKFQpKjgteSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgcm90bFZh cmlhYmxlKFQgeCwgdW5zaWduZWQgaW50IHkpCnsKCWFzc2VydCh5IDwgc2l6ZW9mKFQpKjgpOwoJ cmV0dXJuICh4PDx5KSB8ICh4Pj4oc2l6ZW9mKFQpKjgteSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VD4gaW5saW5lIFQgcm90clZhcmlhYmxlKFQgeCwgdW5zaWduZWQgaW50IHkpCnsKCWFzc2VydCh5 IDwgc2l6ZW9mKFQpKjgpOwoJcmV0dXJuICh4Pj55KSB8ICh4PDwoc2l6ZW9mKFQpKjgteSkpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgcm90bE1vZChUIHgsIHVuc2lnbmVkIGludCB5 KQp7Cgl5ICU9IHNpemVvZihUKSo4OwoJcmV0dXJuICh4PDx5KSB8ICh4Pj4oc2l6ZW9mKFQpKjgt eSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgcm90ck1vZChUIHgsIHVuc2lnbmVk IGludCB5KQp7Cgl5ICU9IHNpemVvZihUKSo4OwoJcmV0dXJuICh4Pj55KSB8ICh4PDwoc2l6ZW9m KFQpKjgteSkpOwp9CgojaWZkZWYgSU5URUxfSU5UUklOU0lDUwoKdGVtcGxhdGU8PiBpbmxpbmUg d29yZDMyIHJvdGxGaXhlZDx3b3JkMzI+KHdvcmQzMiB4LCB1bnNpZ25lZCBpbnQgeSkKewoJYXNz ZXJ0KHkgPCAzMik7CglyZXR1cm4geSA/IF9scm90bCh4LCB5KSA6IHg7Cn0KCnRlbXBsYXRlPD4g aW5saW5lIHdvcmQzMiByb3RyRml4ZWQ8d29yZDMyPih3b3JkMzIgeCwgdW5zaWduZWQgaW50IHkp CnsKCWFzc2VydCh5IDwgMzIpOwoJcmV0dXJuIHkgPyBfbHJvdHIoeCwgeSkgOiB4Owp9Cgp0ZW1w bGF0ZTw+IGlubGluZSB3b3JkMzIgcm90bFZhcmlhYmxlPHdvcmQzMj4od29yZDMyIHgsIHVuc2ln bmVkIGludCB5KQp7Cglhc3NlcnQoeSA8IDMyKTsKCXJldHVybiBfbHJvdGwoeCwgeSk7Cn0KCnRl bXBsYXRlPD4gaW5saW5lIHdvcmQzMiByb3RyVmFyaWFibGU8d29yZDMyPih3b3JkMzIgeCwgdW5z aWduZWQgaW50IHkpCnsKCWFzc2VydCh5IDwgMzIpOwoJcmV0dXJuIF9scm90cih4LCB5KTsKfQoK dGVtcGxhdGU8PiBpbmxpbmUgd29yZDMyIHJvdGxNb2Q8d29yZDMyPih3b3JkMzIgeCwgdW5zaWdu ZWQgaW50IHkpCnsKCXJldHVybiBfbHJvdGwoeCwgeSk7Cn0KCnRlbXBsYXRlPD4gaW5saW5lIHdv cmQzMiByb3RyTW9kPHdvcmQzMj4od29yZDMyIHgsIHVuc2lnbmVkIGludCB5KQp7CglyZXR1cm4g X2xyb3RyKHgsIHkpOwp9CgojZW5kaWYgLy8gI2lmZGVmIElOVEVMX0lOVFJJTlNJQ1MKCiNpZmRl ZiBQUENfSU5UUklOU0lDUwoKdGVtcGxhdGU8PiBpbmxpbmUgd29yZDMyIHJvdGxGaXhlZDx3b3Jk MzI+KHdvcmQzMiB4LCB1bnNpZ25lZCBpbnQgeSkKewoJYXNzZXJ0KHkgPCAzMik7CglyZXR1cm4g eSA/IF9fcmx3aW5tKHgseSwwLDMxKSA6IHg7Cn0KCnRlbXBsYXRlPD4gaW5saW5lIHdvcmQzMiBy b3RyRml4ZWQ8d29yZDMyPih3b3JkMzIgeCwgdW5zaWduZWQgaW50IHkpCnsKCWFzc2VydCh5IDwg MzIpOwoJcmV0dXJuIHkgPyBfX3Jsd2lubSh4LDMyLXksMCwzMSkgOiB4Owp9Cgp0ZW1wbGF0ZTw+ IGlubGluZSB3b3JkMzIgcm90bFZhcmlhYmxlPHdvcmQzMj4od29yZDMyIHgsIHVuc2lnbmVkIGlu dCB5KQp7Cglhc3NlcnQoeSA8IDMyKTsKCXJldHVybiAoX19ybHdubSh4LHksMCwzMSkpOwp9Cgp0 ZW1wbGF0ZTw+IGlubGluZSB3b3JkMzIgcm90clZhcmlhYmxlPHdvcmQzMj4od29yZDMyIHgsIHVu c2lnbmVkIGludCB5KQp7Cglhc3NlcnQoeSA8IDMyKTsKCXJldHVybiAoX19ybHdubSh4LDMyLXks MCwzMSkpOwp9Cgp0ZW1wbGF0ZTw+IGlubGluZSB3b3JkMzIgcm90bE1vZDx3b3JkMzI+KHdvcmQz MiB4LCB1bnNpZ25lZCBpbnQgeSkKewoJcmV0dXJuIChfX3Jsd25tKHgseSwwLDMxKSk7Cn0KCnRl bXBsYXRlPD4gaW5saW5lIHdvcmQzMiByb3RyTW9kPHdvcmQzMj4od29yZDMyIHgsIHVuc2lnbmVk IGludCB5KQp7CglyZXR1cm4gKF9fcmx3bm0oeCwzMi15LDAsMzEpKTsKfQoKI2VuZGlmIC8vICNp ZmRlZiBQUENfSU5UUklOU0lDUwoKLy8gKioqKioqKioqKioqKiogZW5kaWFuIHJldmVyc2FsICoq KioqKioqKioqKioqKgoKaW5saW5lIHdvcmQxNiBieXRlUmV2ZXJzZSh3b3JkMTYgdmFsdWUpCnsK CXJldHVybiByb3RsRml4ZWQodmFsdWUsIDhVKTsKfQoKaW5saW5lIHdvcmQzMiBieXRlUmV2ZXJz ZSh3b3JkMzIgdmFsdWUpCnsKI2lmZGVmIFBQQ19JTlRSSU5TSUNTCgkvLyBQUEM6IGxvYWQgcmV2 ZXJzZSBpbmRleGVkIGluc3RydWN0aW9uCglyZXR1cm4gKHdvcmQzMilfX2x3YnJ4KCZ2YWx1ZSww KTsKI2VsaWYgZGVmaW5lZChGQVNUX1JPVEFURSkKCS8vIDUgaW5zdHJ1Y3Rpb25zIHdpdGggcm90 YXRlIGluc3RydWN0aW9uLCA5IHdpdGhvdXQKCXJldHVybiAocm90ckZpeGVkKHZhbHVlLCA4VSkg JiAweGZmMDBmZjAwKSB8IChyb3RsRml4ZWQodmFsdWUsIDhVKSAmIDB4MDBmZjAwZmYpOwojZWxz ZQoJLy8gNiBpbnN0cnVjdGlvbnMgd2l0aCByb3RhdGUgaW5zdHJ1Y3Rpb24sIDggd2l0aG91dAoJ dmFsdWUgPSAoKHZhbHVlICYgMHhGRjAwRkYwMCkgPj4gOCkgfCAoKHZhbHVlICYgMHgwMEZGMDBG RikgPDwgOCk7CglyZXR1cm4gcm90bEZpeGVkKHZhbHVlLCAxNlUpOwojZW5kaWYKfQoKI2lmZGVm IFdPUkQ2NF9BVkFJTEFCTEUKaW5saW5lIHdvcmQ2NCBieXRlUmV2ZXJzZSh3b3JkNjQgdmFsdWUp CnsKI2lmZGVmIFNMT1dfV09SRDY0CglyZXR1cm4gKHdvcmQ2NChieXRlUmV2ZXJzZSh3b3JkMzIo dmFsdWUpKSkgPDwgMzIpIHwgYnl0ZVJldmVyc2Uod29yZDMyKHZhbHVlPj4zMikpOwojZWxzZQoJ dmFsdWUgPSAoKHZhbHVlICYgVzY0TElUKDB4RkYwMEZGMDBGRjAwRkYwMCkpID4+IDgpIHwgKCh2 YWx1ZSAmIFc2NExJVCgweDAwRkYwMEZGMDBGRjAwRkYpKSA8PCA4KTsKCXZhbHVlID0gKCh2YWx1 ZSAmIFc2NExJVCgweEZGRkYwMDAwRkZGRjAwMDApKSA+PiAxNikgfCAoKHZhbHVlICYgVzY0TElU KDB4MDAwMEZGRkYwMDAwRkZGRikpIDw8IDE2KTsKCXJldHVybiByb3RsRml4ZWQodmFsdWUsIDMy VSk7CiNlbmRpZgp9CiNlbmRpZgoKaW5saW5lIGJ5dGUgYml0UmV2ZXJzZShieXRlIHZhbHVlKQp7 Cgl2YWx1ZSA9ICgodmFsdWUgJiAweEFBKSA+PiAxKSB8ICgodmFsdWUgJiAweDU1KSA8PCAxKTsK CXZhbHVlID0gKCh2YWx1ZSAmIDB4Q0MpID4+IDIpIHwgKCh2YWx1ZSAmIDB4MzMpIDw8IDIpOwoJ cmV0dXJuIHJvdGxGaXhlZCh2YWx1ZSwgNCk7Cn0KCmlubGluZSB3b3JkMTYgYml0UmV2ZXJzZSh3 b3JkMTYgdmFsdWUpCnsKCXZhbHVlID0gKCh2YWx1ZSAmIDB4QUFBQSkgPj4gMSkgfCAoKHZhbHVl ICYgMHg1NTU1KSA8PCAxKTsKCXZhbHVlID0gKCh2YWx1ZSAmIDB4Q0NDQykgPj4gMikgfCAoKHZh bHVlICYgMHgzMzMzKSA8PCAyKTsKCXZhbHVlID0gKCh2YWx1ZSAmIDB4RjBGMCkgPj4gNCkgfCAo KHZhbHVlICYgMHgwRjBGKSA8PCA0KTsKCXJldHVybiBieXRlUmV2ZXJzZSh2YWx1ZSk7Cn0KCmlu bGluZSB3b3JkMzIgYml0UmV2ZXJzZSh3b3JkMzIgdmFsdWUpCnsKCXZhbHVlID0gKCh2YWx1ZSAm IDB4QUFBQUFBQUEpID4+IDEpIHwgKCh2YWx1ZSAmIDB4NTU1NTU1NTUpIDw8IDEpOwoJdmFsdWUg PSAoKHZhbHVlICYgMHhDQ0NDQ0NDQykgPj4gMikgfCAoKHZhbHVlICYgMHgzMzMzMzMzMykgPDwg Mik7Cgl2YWx1ZSA9ICgodmFsdWUgJiAweEYwRjBGMEYwKSA+PiA0KSB8ICgodmFsdWUgJiAweDBG MEYwRjBGKSA8PCA0KTsKCXJldHVybiBieXRlUmV2ZXJzZSh2YWx1ZSk7Cn0KCiNpZmRlZiBXT1JE NjRfQVZBSUxBQkxFCmlubGluZSB3b3JkNjQgYml0UmV2ZXJzZSh3b3JkNjQgdmFsdWUpCnsKI2lm ZGVmIFNMT1dfV09SRDY0CglyZXR1cm4gKHdvcmQ2NChiaXRSZXZlcnNlKHdvcmQzMih2YWx1ZSkp KSA8PCAzMikgfCBiaXRSZXZlcnNlKHdvcmQzMih2YWx1ZT4+MzIpKTsKI2Vsc2UKCXZhbHVlID0g KCh2YWx1ZSAmIFc2NExJVCgweEFBQUFBQUFBQUFBQUFBQUEpKSA+PiAxKSB8ICgodmFsdWUgJiBX NjRMSVQoMHg1NTU1NTU1NTU1NTU1NTU1KSkgPDwgMSk7Cgl2YWx1ZSA9ICgodmFsdWUgJiBXNjRM SVQoMHhDQ0NDQ0NDQ0NDQ0NDQ0NDKSkgPj4gMikgfCAoKHZhbHVlICYgVzY0TElUKDB4MzMzMzMz MzMzMzMzMzMzMykpIDw8IDIpOwoJdmFsdWUgPSAoKHZhbHVlICYgVzY0TElUKDB4RjBGMEYwRjBG MEYwRjBGMCkpID4+IDQpIHwgKCh2YWx1ZSAmIFc2NExJVCgweDBGMEYwRjBGMEYwRjBGMEYpKSA8 PCA0KTsKCXJldHVybiBieXRlUmV2ZXJzZSh2YWx1ZSk7CiNlbmRpZgp9CiNlbmRpZgoKdGVtcGxh dGUgPGNsYXNzIFQ+CmlubGluZSBUIGJpdFJldmVyc2UoVCB2YWx1ZSkKewoJaWYgKHNpemVvZihU KSA9PSAxKQoJCXJldHVybiBiaXRSZXZlcnNlKChieXRlKXZhbHVlKTsKCWVsc2UgaWYgKHNpemVv ZihUKSA9PSAyKQoJCXJldHVybiBiaXRSZXZlcnNlKCh3b3JkMTYpdmFsdWUpOwoJZWxzZSBpZiAo c2l6ZW9mKFQpID09IDQpCgkJcmV0dXJuIGJpdFJldmVyc2UoKHdvcmQzMil2YWx1ZSk7CgllbHNl Cgl7CiNpZmRlZiBXT1JENjRfQVZBSUxBQkxFCgkJYXNzZXJ0KHNpemVvZihUKSA9PSA4KTsKCQly ZXR1cm4gYml0UmV2ZXJzZSgod29yZDY0KXZhbHVlKTsKI2Vsc2UKCQlhc3NlcnQoZmFsc2UpOwoJ CXJldHVybiAwOwojZW5kaWYKCX0KfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgYnl0ZVJldmVy c2UoVCAqb3V0LCBjb25zdCBUICppbiwgdW5zaWduZWQgaW50IGJ5dGVDb3VudCkKewoJdW5zaWdu ZWQgaW50IGNvdW50ID0gKGJ5dGVDb3VudCtzaXplb2YoVCktMSkvc2l6ZW9mKFQpOwoJZm9yICh1 bnNpZ25lZCBpbnQgaT0wOyBpPGNvdW50OyBpKyspCgkJb3V0W2ldID0gYnl0ZVJldmVyc2UoaW5b aV0pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIHZvaWQgR2V0VXNlcktleUxpdHRsZUVu ZGlhbihUICpvdXQsIHVuc2lnbmVkIGludCBvdXRsZW4sIGNvbnN0IGJ5dGUgKmluLCB1bnNpZ25l ZCBpbnQgaW5sZW4pCnsKCWNvbnN0IHVuc2lnbmVkIGludCBVID0gc2l6ZW9mKFQpOwoJYXNzZXJ0 KGlubGVuIDw9IG91dGxlbipVKTsKCW1lbWNweShvdXQsIGluLCBpbmxlbik7CgltZW1zZXQoKGJ5 dGUgKilvdXQraW5sZW4sIDAsIG91dGxlbipVLWlubGVuKTsKI2lmbmRlZiBJU19MSVRUTEVfRU5E SUFOCglieXRlUmV2ZXJzZShvdXQsIG91dCwgaW5sZW4pOwojZW5kaWYKfQoKdGVtcGxhdGUgPGNs YXNzIFQ+CmlubGluZSB2b2lkIEdldFVzZXJLZXlCaWdFbmRpYW4oVCAqb3V0LCB1bnNpZ25lZCBp bnQgb3V0bGVuLCBjb25zdCBieXRlICppbiwgdW5zaWduZWQgaW50IGlubGVuKQp7Cgljb25zdCB1 bnNpZ25lZCBpbnQgVSA9IHNpemVvZihUKTsKCWFzc2VydChpbmxlbiA8PSBvdXRsZW4qVSk7Cglt ZW1jcHkob3V0LCBpbiwgaW5sZW4pOwoJbWVtc2V0KChieXRlICopb3V0K2lubGVuLCAwLCBvdXRs ZW4qVS1pbmxlbik7CiNpZmRlZiBJU19MSVRUTEVfRU5ESUFOCglieXRlUmV2ZXJzZShvdXQsIG91 dCwgaW5sZW4pOwojZW5kaWYKfQoKLy8gRmV0Y2ggMiB3b3JkcyBmcm9tIHVzZXIncyBidWZmZXIg aW50byAiYSIsICJiIiBpbiBMSVRUTEUtZW5kaWFuIG9yZGVyCnRlbXBsYXRlIDxjbGFzcyBUPgpp bmxpbmUgdm9pZCBHZXRCbG9ja0xpdHRsZUVuZGlhbihjb25zdCBieXRlICpibG9jaywgVCAmYSwg VCAmYikKewojaWZkZWYgSVNfTElUVExFX0VORElBTgoJYSA9ICgoVCAqKWJsb2NrKVswXTsKCWIg PSAoKFQgKilibG9jaylbMV07CiNlbHNlCglhID0gYnl0ZVJldmVyc2UoKChUICopYmxvY2spWzBd KTsKCWIgPSBieXRlUmV2ZXJzZSgoKFQgKilibG9jaylbMV0pOwojZW5kaWYKfQoKLy8gUHV0IDIg d29yZHMgYmFjayBpbnRvIHVzZXIncyBidWZmZXIgaW4gTElUVExFLWVuZGlhbiBvcmRlcgp0ZW1w bGF0ZSA8Y2xhc3MgVD4KaW5saW5lIHZvaWQgUHV0QmxvY2tMaXR0bGVFbmRpYW4oYnl0ZSAqYmxv Y2ssIFQgYSwgVCBiKQp7CiNpZmRlZiBJU19MSVRUTEVfRU5ESUFOCgkoKFQgKilibG9jaylbMF0g PSBhOwoJKChUICopYmxvY2spWzFdID0gYjsKI2Vsc2UKCSgoVCAqKWJsb2NrKVswXSA9IGJ5dGVS ZXZlcnNlKGEpOwoJKChUICopYmxvY2spWzFdID0gYnl0ZVJldmVyc2UoYik7CiNlbmRpZgp9Cgov LyBGZXRjaCA0IHdvcmRzIGZyb20gdXNlcidzIGJ1ZmZlciBpbnRvICJhIiwgImIiLCAiYyIsICJk IiBpbiBMSVRUTEUtZW5kaWFuIG9yZGVyCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgdm9pZCBH ZXRCbG9ja0xpdHRsZUVuZGlhbihjb25zdCBieXRlICpibG9jaywgVCAmYSwgVCAmYiwgVCAmYywg VCAmZCkKewojaWZkZWYgSVNfTElUVExFX0VORElBTgoJYSA9ICgoVCAqKWJsb2NrKVswXTsKCWIg PSAoKFQgKilibG9jaylbMV07CgljID0gKChUICopYmxvY2spWzJdOwoJZCA9ICgoVCAqKWJsb2Nr KVszXTsKI2Vsc2UKCWEgPSBieXRlUmV2ZXJzZSgoKFQgKilibG9jaylbMF0pOwoJYiA9IGJ5dGVS ZXZlcnNlKCgoVCAqKWJsb2NrKVsxXSk7CgljID0gYnl0ZVJldmVyc2UoKChUICopYmxvY2spWzJd KTsKCWQgPSBieXRlUmV2ZXJzZSgoKFQgKilibG9jaylbM10pOwojZW5kaWYKfQoKLy8gUHV0IDQg d29yZHMgYmFjayBpbnRvIHVzZXIncyBidWZmZXIgaW4gTElUVExFLWVuZGlhbiBvcmRlcgp0ZW1w bGF0ZSA8Y2xhc3MgVD4KaW5saW5lIHZvaWQgUHV0QmxvY2tMaXR0bGVFbmRpYW4oYnl0ZSAqYmxv Y2ssIFQgYSwgVCBiLCBUIGMsIFQgZCkKewojaWZkZWYgSVNfTElUVExFX0VORElBTgoJKChUICop YmxvY2spWzBdID0gYTsKCSgoVCAqKWJsb2NrKVsxXSA9IGI7CgkoKFQgKilibG9jaylbMl0gPSBj OwoJKChUICopYmxvY2spWzNdID0gZDsKI2Vsc2UKCSgoVCAqKWJsb2NrKVswXSA9IGJ5dGVSZXZl cnNlKGEpOwoJKChUICopYmxvY2spWzFdID0gYnl0ZVJldmVyc2UoYik7CgkoKFQgKilibG9jaylb Ml0gPSBieXRlUmV2ZXJzZShjKTsKCSgoVCAqKWJsb2NrKVszXSA9IGJ5dGVSZXZlcnNlKGQpOwoj ZW5kaWYKfQoKLy8gRmV0Y2ggMiB3b3JkcyBmcm9tIHVzZXIncyBidWZmZXIgaW50byAiYSIsICJi IiBpbiBCSUctZW5kaWFuIG9yZGVyCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgdm9pZCBHZXRC bG9ja0JpZ0VuZGlhbihjb25zdCBieXRlICpibG9jaywgVCAmYSwgVCAmYikKewojaWZuZGVmIElT X0xJVFRMRV9FTkRJQU4KCWEgPSAoKFQgKilibG9jaylbMF07CgliID0gKChUICopYmxvY2spWzFd OwojZWxzZQoJYSA9IGJ5dGVSZXZlcnNlKCgoVCAqKWJsb2NrKVswXSk7CgliID0gYnl0ZVJldmVy c2UoKChUICopYmxvY2spWzFdKTsKI2VuZGlmCn0KCi8vIFB1dCAyIHdvcmRzIGJhY2sgaW50byB1 c2VyJ3MgYnVmZmVyIGluIEJJRy1lbmRpYW4gb3JkZXIKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGlu ZSB2b2lkIFB1dEJsb2NrQmlnRW5kaWFuKGJ5dGUgKmJsb2NrLCBUIGEsIFQgYikKewojaWZuZGVm IElTX0xJVFRMRV9FTkRJQU4KCSgoVCAqKWJsb2NrKVswXSA9IGE7CgkoKFQgKilibG9jaylbMV0g PSBiOwojZWxzZQoJKChUICopYmxvY2spWzBdID0gYnl0ZVJldmVyc2UoYSk7CgkoKFQgKilibG9j aylbMV0gPSBieXRlUmV2ZXJzZShiKTsKI2VuZGlmCn0KCi8vIEZldGNoIDQgd29yZHMgZnJvbSB1 c2VyJ3MgYnVmZmVyIGludG8gImEiLCAiYiIsICJjIiwgImQiIGluIEJJRy1lbmRpYW4gb3JkZXIK dGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSB2b2lkIEdldEJsb2NrQmlnRW5kaWFuKGNvbnN0IGJ5 dGUgKmJsb2NrLCBUICZhLCBUICZiLCBUICZjLCBUICZkKQp7CiNpZm5kZWYgSVNfTElUVExFX0VO RElBTgoJYSA9ICgoVCAqKWJsb2NrKVswXTsKCWIgPSAoKFQgKilibG9jaylbMV07CgljID0gKChU ICopYmxvY2spWzJdOwoJZCA9ICgoVCAqKWJsb2NrKVszXTsKI2Vsc2UKCWEgPSBieXRlUmV2ZXJz ZSgoKFQgKilibG9jaylbMF0pOwoJYiA9IGJ5dGVSZXZlcnNlKCgoVCAqKWJsb2NrKVsxXSk7Cglj ID0gYnl0ZVJldmVyc2UoKChUICopYmxvY2spWzJdKTsKCWQgPSBieXRlUmV2ZXJzZSgoKFQgKili bG9jaylbM10pOwojZW5kaWYKfQoKLy8gUHV0IDQgd29yZHMgYmFjayBpbnRvIHVzZXIncyBidWZm ZXIgaW4gQklHLWVuZGlhbiBvcmRlcgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIHZvaWQgUHV0 QmxvY2tCaWdFbmRpYW4oYnl0ZSAqYmxvY2ssIFQgYSwgVCBiLCBUIGMsIFQgZCkKewojaWZuZGVm IElTX0xJVFRMRV9FTkRJQU4KCSgoVCAqKWJsb2NrKVswXSA9IGE7CgkoKFQgKilibG9jaylbMV0g PSBiOwoJKChUICopYmxvY2spWzJdID0gYzsKCSgoVCAqKWJsb2NrKVszXSA9IGQ7CiNlbHNlCgko KFQgKilibG9jaylbMF0gPSBieXRlUmV2ZXJzZShhKTsKCSgoVCAqKWJsb2NrKVsxXSA9IGJ5dGVS ZXZlcnNlKGIpOwoJKChUICopYmxvY2spWzJdID0gYnl0ZVJldmVyc2UoYyk7CgkoKFQgKilibG9j aylbM10gPSBieXRlUmV2ZXJzZShkKTsKI2VuZGlmCn0KCnRlbXBsYXRlIDxjbGFzcyBUPgpzdGQ6 OnN0cmluZyBXb3JkVG9TdHJpbmcoVCB2YWx1ZSwgYm9vbCBoaWdoRmlyc3QgPSB0cnVlKQp7Cglp ZiAoIUNoZWNrRW5kaWFuZXNzKGhpZ2hGaXJzdCkpCgkJdmFsdWUgPSBieXRlUmV2ZXJzZSh2YWx1 ZSk7CgoJcmV0dXJuIHN0ZDo6c3RyaW5nKChjaGFyICopJnZhbHVlLCBzaXplb2YodmFsdWUpKTsK fQoKdGVtcGxhdGUgPGNsYXNzIFQ+ClQgU3RyaW5nVG9Xb3JkKGNvbnN0IHN0ZDo6c3RyaW5nICZz dHIsIGJvb2wgaGlnaEZpcnN0ID0gdHJ1ZSkKewoJVCB2YWx1ZSA9IDA7CgltZW1jcHkoJnZhbHVl LCBzdHIuZGF0YSgpLCBTVERNSU4oc2l6ZW9mKHZhbHVlKSwgc3RyLnNpemUoKSkpOwoJcmV0dXJu IENoZWNrRW5kaWFuZXNzKGhpZ2hGaXJzdCkgPyB2YWx1ZSA6IGJ5dGVSZXZlcnNlKHZhbHVlKTsK fQoKLy8gKioqKioqKioqKioqKioga2V5IGxlbmd0aCBxdWVyeSAqKioqKioqKioqKioqKioKCi8v LyBzdXBwb3J0IHF1ZXJ5IG9mIGZpeGVkIGtleSBsZW5ndGgKdGVtcGxhdGUgPHVuc2lnbmVkIGlu dCBOPgpjbGFzcyBGaXhlZEtleUxlbmd0aAp7CnB1YmxpYzoKCWVudW0ge0tFWUxFTkdUSD1OLCBN SU5fS0VZTEVOR1RIPU4sIE1BWF9LRVlMRU5HVEg9TiwgREVGQVVMVF9LRVlMRU5HVEg9Tn07Cgkv Ly8gcmV0dXJucyB0aGUga2V5IGxlbmd0aAoJc3RhdGljIHVuc2lnbmVkIGludCBLZXlMZW5ndGgo dW5zaWduZWQgaW50KSB7cmV0dXJuIEtFWUxFTkdUSDt9Cn07CgovLy8gc3VwcG9ydCBxdWVyeSBv ZiB2YXJpYWJsZSBrZXkgbGVuZ3RoLCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGFyZSBkZWZhdWx0LCBt aW4sIG1heCwgbXVsdGlwbGUgKGRlZmF1bHQgbXVsdGlwbGUgMSkKdGVtcGxhdGUgPHVuc2lnbmVk IGludCBELCB1bnNpZ25lZCBpbnQgTiwgdW5zaWduZWQgaW50IE0sIHVuc2lnbmVkIGludCBRPTE+ CmNsYXNzIFZhcmlhYmxlS2V5TGVuZ3RoCnsKcHVibGljOgoJZW51bSB7TUlOX0tFWUxFTkdUSD1O LCBNQVhfS0VZTEVOR1RIPU0sIERFRkFVTFRfS0VZTEVOR1RIPUQsIEtFWUxFTkdUSF9NVUxUSVBM RT1RfTsKCS8vLyByZXR1cm5zIHRoZSBzbWFsbGVzdCB2YWxpZCBrZXkgbGVuZ3RoIGluIGJ5dGVz IHRoYXQgaXMgPj0gbWluKG4sIE1BWF9LRVlMRU5HVEgpCglzdGF0aWMgdW5zaWduZWQgaW50IEtl eUxlbmd0aCh1bnNpZ25lZCBpbnQgbikKCXsKCQlhc3NlcnQoS0VZTEVOR1RIX01VTFRJUExFID4g MCAmJiBNSU5fS0VZTEVOR1RIICUgS0VZTEVOR1RIX01VTFRJUExFID09IDAgJiYgTUFYX0tFWUxF TkdUSCAlIEtFWUxFTkdUSF9NVUxUSVBMRSA9PSAwKTsKCQlpZiAobiA8IE1JTl9LRVlMRU5HVEgp CgkJCXJldHVybiBNSU5fS0VZTEVOR1RIOwoJCWVsc2UgaWYgKG4gPiBNQVhfS0VZTEVOR1RIKQoJ CQlyZXR1cm4gTUFYX0tFWUxFTkdUSDsKCQllbHNlCgkJCXJldHVybiBSb3VuZFVwVG9NdWx0aXBs ZU9mKG4sIEtFWUxFTkdUSF9NVUxUSVBMRSk7Cgl9Cn07CgovLy8gc3VwcG9ydCBxdWVyeSBvZiBr ZXkgbGVuZ3RoIHRoYXQncyB0aGUgc2FtZSBhcyBhbm90aGVyIGNsYXNzCnRlbXBsYXRlIDxjbGFz cyBUPgpjbGFzcyBTYW1lS2V5TGVuZ3RoQXMKewpwdWJsaWM6CgllbnVtIHtNSU5fS0VZTEVOR1RI PVQ6Ok1JTl9LRVlMRU5HVEgsIE1BWF9LRVlMRU5HVEg9VDo6TUFYX0tFWUxFTkdUSCwgREVGQVVM VF9LRVlMRU5HVEg9VDo6REVGQVVMVF9LRVlMRU5HVEh9OwoJLy8vIHJldHVybnMgdGhlIHNtYWxs ZXN0IHZhbGlkIGtleSBsZW5ndGggaW4gYnl0ZXMgdGhhdCBpcyA+PSBtaW4obiwgTUFYX0tFWUxF TkdUSCkKCXN0YXRpYyB1bnNpZ25lZCBpbnQgS2V5TGVuZ3RoKHVuc2lnbmVkIGludCBrZXlsZW5n dGgpCgkJe3JldHVybiBUOjpLZXlMZW5ndGgoa2V5bGVuZ3RoKTt9Cn07CgovLyAqKioqKioqKioq KioqKiBzZWN1cmUgbWVtb3J5IGFsbG9jYXRpb24gKioqKioqKioqKioqKioqCgojaWZkZWYgU0VD QUxMT0NfREVGQVVMVAojZGVmaW5lIFNlY0FsbG9jKHR5cGUsIG51bWJlcikgKG5ldyB0eXBlWyhu dW1iZXIpXSkKI2RlZmluZSBTZWNGcmVlKHB0ciwgbnVtYmVyKSAobWVtc2V0KChwdHIpLCAwLCAo bnVtYmVyKSpzaXplb2YoKihwdHIpKSksIGRlbGV0ZSBbXSAocHRyKSkKI2Vsc2UKI2RlZmluZSBT ZWNBbGxvYyh0eXBlLCBudW1iZXIpIChuZXcgdHlwZVsobnVtYmVyKV0pCiNkZWZpbmUgU2VjRnJl ZShwdHIsIG51bWJlcikgKGRlbGV0ZSBbXSAocHRyKSkKI2VuZGlmCgovLyEgYSBibG9jayBvZiBt ZW1vcnkgYWxsb2NhdGVkIHVzaW5nIFNlY0FsbG9jCnRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3Qg U2VjQmxvY2sKewoJZXhwbGljaXQgU2VjQmxvY2sodW5zaWduZWQgaW50IHNpemU9MCkKCQk6IHNp emUoc2l6ZSkge3B0ciA9IFNlY0FsbG9jKFQsIHNpemUpO30KCVNlY0Jsb2NrKGNvbnN0IFNlY0Js b2NrPFQ+ICZ0KQoJCTogc2l6ZSh0LnNpemUpIHtwdHIgPSBTZWNBbGxvYyhULCBzaXplKTsgbWVt Y3B5KHB0ciwgdC5wdHIsIHNpemUqc2l6ZW9mKFQpKTt9CglTZWNCbG9jayhjb25zdCBUICp0LCB1 bnNpZ25lZCBpbnQgbGVuKQoJCTogc2l6ZShsZW4pIHtwdHIgPSBTZWNBbGxvYyhULCBsZW4pOyBt ZW1jcHkocHRyLCB0LCBsZW4qc2l6ZW9mKFQpKTt9Cgl+U2VjQmxvY2soKQoJCXtTZWNGcmVlKHB0 ciwgc2l6ZSk7fQoKI2lmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19CQ1BMVVNQTFVT X18pCglvcGVyYXRvciBjb25zdCB2b2lkICooKSBjb25zdAoJCXtyZXR1cm4gcHRyO30KCW9wZXJh dG9yIHZvaWQgKigpCgkJe3JldHVybiBwdHI7fQojZW5kaWYKI2lmIGRlZmluZWQoX19HTlVDX18p CS8vIHJlZHVjZSB3YXJuaW5ncwoJb3BlcmF0b3IgY29uc3Qgdm9pZCAqKCkKCQl7cmV0dXJuIHB0 cjt9CiNlbmRpZgoKCW9wZXJhdG9yIGNvbnN0IFQgKigpIGNvbnN0CgkJe3JldHVybiBwdHI7fQoJ b3BlcmF0b3IgVCAqKCkKCQl7cmV0dXJuIHB0cjt9CiNpZiBkZWZpbmVkKF9fR05VQ19fKQkvLyBy ZWR1Y2Ugd2FybmluZ3MKCW9wZXJhdG9yIGNvbnN0IFQgKigpCgkJe3JldHVybiBwdHI7fQojZW5k aWYKCi8vIENvZGVXYXJyaW9yIGRlZmluZXMgX01TQ19WRVIKI2lmICFkZWZpbmVkKF9NU0NfVkVS KSB8fCBkZWZpbmVkKF9fTVdFUktTX18pCgl0ZW1wbGF0ZSA8dHlwZW5hbWUgST4KCVQgKm9wZXJh dG9yICsoSSBvZmZzZXQpCgkJe3JldHVybiBwdHIrb2Zmc2V0O30KCgl0ZW1wbGF0ZSA8dHlwZW5h bWUgST4KCWNvbnN0IFQgKm9wZXJhdG9yICsoSSBvZmZzZXQpIGNvbnN0CgkJe3JldHVybiBwdHIr b2Zmc2V0O30KCgl0ZW1wbGF0ZSA8dHlwZW5hbWUgST4KCVQmIG9wZXJhdG9yW10oSSBpbmRleCkK CQl7YXNzZXJ0KGluZGV4PHNpemUpOyByZXR1cm4gcHRyW2luZGV4XTt9CgoJdGVtcGxhdGUgPHR5 cGVuYW1lIEk+Cgljb25zdCBUJiBvcGVyYXRvcltdKEkgaW5kZXgpIGNvbnN0CgkJe2Fzc2VydChp bmRleDxzaXplKTsgcmV0dXJuIHB0cltpbmRleF07CgkgICAgICAgIH0KI2VuZGlmCgoJY29uc3Qg VCogQmVnaW4oKSBjb25zdAoJCXtyZXR1cm4gcHRyO30KCVQqIEJlZ2luKCkKCQl7cmV0dXJuIHB0 cjt9Cgljb25zdCBUKiBFbmQoKSBjb25zdAoJCXtyZXR1cm4gcHRyK3NpemU7fQoJVCogRW5kKCkK CQl7cmV0dXJuIHB0citzaXplO30KCgl1bnNpZ25lZCBpbnQgU2l6ZSgpIGNvbnN0IHtyZXR1cm4g c2l6ZTt9CgoJdm9pZCBBc3NpZ24oY29uc3QgVCAqdCwgdW5zaWduZWQgaW50IGxlbikKCXsKCQlO ZXcobGVuKTsKCQltZW1jcHkocHRyLCB0LCBsZW4qc2l6ZW9mKFQpKTsKCX0KCgl2b2lkIEFzc2ln bihjb25zdCBTZWNCbG9jazxUPiAmdCkKCXsKCQlOZXcodC5zaXplKTsKCQltZW1jcHkocHRyLCB0 LnB0ciwgc2l6ZSpzaXplb2YoVCkpOwoJfQoKCVNlY0Jsb2NrJiBvcGVyYXRvcj0oY29uc3QgU2Vj QmxvY2s8VD4gJnQpCgl7CgkJQXNzaWduKHQpOwoJCXJldHVybiAqdGhpczsKCX0KCglib29sIG9w ZXJhdG9yPT0oY29uc3QgU2VjQmxvY2s8VD4gJnQpIGNvbnN0Cgl7CgkJcmV0dXJuIHNpemUgPT0g dC5zaXplICYmIG1lbWNtcChwdHIsIHQucHRyLCBzaXplKnNpemVvZihUKSkgPT0gMDsKCX0KCgli b29sIG9wZXJhdG9yIT0oY29uc3QgU2VjQmxvY2s8VD4gJnQpIGNvbnN0Cgl7CgkJcmV0dXJuICFv cGVyYXRvcj09KHQpOwoJfQoKCXZvaWQgTmV3KHVuc2lnbmVkIGludCBuZXdTaXplKQoJewoJCWlm IChuZXdTaXplICE9IHNpemUpCgkJewoJCQlUICpuZXdQdHIgPSBTZWNBbGxvYyhULCBuZXdTaXpl KTsKCQkJU2VjRnJlZShwdHIsIHNpemUpOwoJCQlwdHIgPSBuZXdQdHI7CgkJCXNpemUgPSBuZXdT aXplOwoJCX0KCX0KCgl2b2lkIENsZWFuTmV3KHVuc2lnbmVkIGludCBuZXdTaXplKQoJewoJCWlm IChuZXdTaXplICE9IHNpemUpCgkJewoJCQlUICpuZXdQdHIgPSBTZWNBbGxvYyhULCBuZXdTaXpl KTsKCQkJU2VjRnJlZShwdHIsIHNpemUpOwoJCQlwdHIgPSBuZXdQdHI7CgkJCXNpemUgPSBuZXdT aXplOwoJCX0KCQltZW1zZXQocHRyLCAwLCBzaXplKnNpemVvZihUKSk7Cgl9CgoJdm9pZCBHcm93 KHVuc2lnbmVkIGludCBuZXdTaXplKQoJewoJCWlmIChuZXdTaXplID4gc2l6ZSkKCQl7CgkJCVQg Km5ld1B0ciA9IFNlY0FsbG9jKFQsIG5ld1NpemUpOwoJCQltZW1jcHkobmV3UHRyLCBwdHIsIHNp emUqc2l6ZW9mKFQpKTsKCQkJU2VjRnJlZShwdHIsIHNpemUpOwoJCQlwdHIgPSBuZXdQdHI7CgkJ CXNpemUgPSBuZXdTaXplOwoJCX0KCX0KCgl2b2lkIENsZWFuR3Jvdyh1bnNpZ25lZCBpbnQgbmV3 U2l6ZSkKCXsKCQlpZiAobmV3U2l6ZSA+IHNpemUpCgkJewoJCQlUICpuZXdQdHIgPSBTZWNBbGxv YyhULCBuZXdTaXplKTsKCQkJbWVtY3B5KG5ld1B0ciwgcHRyLCBzaXplKnNpemVvZihUKSk7CgkJ CW1lbXNldChuZXdQdHIrc2l6ZSwgMCwgKG5ld1NpemUtc2l6ZSkqc2l6ZW9mKFQpKTsKCQkJU2Vj RnJlZShwdHIsIHNpemUpOwoJCQlwdHIgPSBuZXdQdHI7CgkJCXNpemUgPSBuZXdTaXplOwoJCX0K CX0KCgl2b2lkIFJlc2l6ZSh1bnNpZ25lZCBpbnQgbmV3U2l6ZSkKCXsKCQlpZiAobmV3U2l6ZSAh PSBzaXplKQoJCXsKCQkJVCAqbmV3UHRyID0gU2VjQWxsb2MoVCwgbmV3U2l6ZSk7CgkJCW1lbWNw eShuZXdQdHIsIHB0ciwgU1RETUlOKG5ld1NpemUsIHNpemUpKnNpemVvZihUKSk7CgkJCVNlY0Zy ZWUocHRyLCBzaXplKTsKCQkJcHRyID0gbmV3UHRyOwoJCQlzaXplID0gbmV3U2l6ZTsKCQl9Cgl9 CgoJdm9pZCBzd2FwKFNlY0Jsb2NrPFQ+ICZiKTsKCgl1bnNpZ25lZCBpbnQgc2l6ZTsKCVQgKnB0 cjsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUPiB2b2lkIFNlY0Jsb2NrPFQ+Ojpzd2FwKFNlY0Jsb2Nr PFQ+ICZiKQp7CglzdGQ6OnN3YXAoc2l6ZSwgYi5zaXplKTsKCXN0ZDo6c3dhcChwdHIsIGIucHRy KTsKfQoKdHlwZWRlZiBTZWNCbG9jazxieXRlPiBTZWNCeXRlQmxvY2s7CnR5cGVkZWYgU2VjQmxv Y2s8d29yZD4gU2VjV29yZEJsb2NrOwoKTkFNRVNQQUNFX0VORAoKTkFNRVNQQUNFX0JFR0lOKHN0 ZCkKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSB2b2lkIHN3YXAoQ3J5cHRvUFA6OlNlY0Jsb2Nr PFQ+ICZhLCBDcnlwdG9QUDo6U2VjQmxvY2s8VD4gJmIpCnsKCWEuc3dhcChiKTsKfQoKTkFNRVNQ QUNFX0VORAoKI2VuZGlmIC8vIE1JU0NfSAo=