From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id irwTLKroRGe/gT8AWB0awg (envelope-from ) for ; Mon, 25 Nov 2024 16:14:18 -0500 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=uPp8DkBi; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 972761E092; Mon, 25 Nov 2024 16:14:18 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.0 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id E80EC1E05C for ; Mon, 25 Nov 2024 16:14:13 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 00F9D385843B for ; Mon, 25 Nov 2024 21:14:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 00F9D385843B Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=uPp8DkBi Received: from mail-io1-xd2a.google.com (mail-io1-xd2a.google.com [IPv6:2607:f8b0:4864:20::d2a]) by sourceware.org (Postfix) with ESMTPS id 2073B3858C33 for ; Mon, 25 Nov 2024 21:12:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2073B3858C33 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=baylibre.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2073B3858C33 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d2a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1732569165; cv=none; b=PPthg1PwWJNK01F5nIaXNaOzYZxRXg2CloXQflS/2RjMW0BAxiQkPYTx9z7ZWtP2X7XJzzyi/NaO3Dw3KVllFeqevvxMGU3ZeVAHyKRU9/bvIXLPvdE6zl0FjZHKyZQtFL6dMZO8HCm8SE0f+relUqLTsGSwvm0cZVtJHaNP00E= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1732569165; c=relaxed/simple; bh=wVsCjZLODjL7ASgTfVtUhkY/CWSgK8rL92jeiDCtOKc=; h=DKIM-Signature:Message-ID:Date:MIME-Version:To:From:Subject; b=CySe0zkMCN+zI1Ul0iun/KwG2TQ9CScfesftEOgu/C2eOoO8DeyfOncENM6eB1rgj+qP5LK0TOja/j4jjPzN6w+yolXKMtxRInSLAXPz0UMBOzy/bEbf9+I3SOPcIZfGgY/gEjD/zMEfDkn6RMQdBl7zGZhiMrO5RW+lgvmQABo= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2073B3858C33 Received: by mail-io1-xd2a.google.com with SMTP id ca18e2360f4ac-8418ecda126so54794439f.3 for ; Mon, 25 Nov 2024 13:12:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1732569163; x=1733173963; darn=sourceware.org; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=9aV+YfxdKYWGVMb+0jWlY3V3y0faVW28aQUr7HvGMds=; b=uPp8DkBi6Q/Za5DmHZ90fS4Q+51IYBSA+CUFTpEkVXQaak9/wOKkbCsjpMWD7DQdn/ vnj10Doysq4yWDaaYRo58RGLw3Hc8yAbiqIxZd8mxHxpSFB17eHHJSAchtjFjZwfwZzA YWV0nG0BCT1wN1WOHCMfJtvCf/P21jkJ5ZG5TV4/naIS9B4HZcTUNukxhC3/fi1ll5zr MCrbnXKb1EQ+A0WNKFHt+jpe0VpHHWLidrrHHqy5ZmblSX/MY40OOnPCm9QvIzztV4fz BIR/UKZVhO0+q5LoxHkbQwirTjT9lfS1nibW16LarvNFUDRi91cDUWEWZlXlyBX0HsHH qduA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732569163; x=1733173963; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9aV+YfxdKYWGVMb+0jWlY3V3y0faVW28aQUr7HvGMds=; b=l7/+El1PVlJKb7cGi8gP8GtvQKv2DotTNj8waY0aMzo8/9DrtL8fTdjzxHdJxPUr5V C8F/L35baUWag4H3hmlJNa9ppeVhS/73h0cqINeePHIU2fnug3wQWYucSMBO36ZQnB7Y FEgV/7NwFsYQkszrU6+KvJokYAaSnVtb91ZeGFLiTyLGFmfnOAq4BNRXq7ffHd12GcXw 0lux3Zejor0JuU9dip2yFmyzCFXhe67s4ZzH8FjrifqmAfI9sYhycjZ5Rxkf31g3HFZE OCeWvc2NTxRbT5/B1s3nyg+oTgyVDol3pBaPnwlHxT9ooPLez+nrE5bQi2QqN8ihTCk2 hc3Q== X-Gm-Message-State: AOJu0YzQNQsCyPbsjxsFlrnf5sKpI7wSAT88y1hWhjSpQ7dBNI8rtwkQ 32gqkb1VVYd2+vXfoFLNTBABpZvE9fEhoDCCmpn8AyZiVBECQhtCce0bAJeYtCkIP4vCc2TgwGT 0qQU= X-Gm-Gg: ASbGncud6cEIubiZ1rgd2oKx+0RHsk05hoaherdr5Mv3z2fxpSGmq+db+Gsceg04Y6j XtoFjfKO4ArMVMZtJeuC0cyrwsIIvK7EJMmV8J3rZYKhJFThqlSiX1yhU9ag71qWc6Wr6bJnMtI GusLcH/5IRCnhFQPnY1nbT7utTRsEU3oSHISbhLgvy2YSX68oyuvKI7BkoHVuANQHR2FkNzZE0l JGbWqrWVMSL4W0MMMu6BdHf2G6F2NiRU/K8XK4gYMnYFX6DiokBAsGfPljap0/gLw== X-Google-Smtp-Source: AGHT+IG9Afo3j/nTNVZuYijHwBzxc6vrBibb+ly/2QVTWva8C8vt3oJLVpzxCbXIlsjgw8Uo86U/vA== X-Received: by 2002:a05:6602:3f83:b0:837:f951:38ce with SMTP id ca18e2360f4ac-83ecdc9efe6mr1582037039f.8.1732569163438; Mon, 25 Nov 2024 13:12:43 -0800 (PST) Received: from ?IPV6:2601:281:d901:97c0::c57b? ([2601:281:d901:97c0::c57b]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-83ecd16b400sm194648639f.13.2024.11.25.13.12.40 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 25 Nov 2024 13:12:41 -0800 (PST) Content-Type: multipart/mixed; boundary="------------9owa0Ps00MozUgJj3QfYATTO" Message-ID: Date: Mon, 25 Nov 2024 14:12:39 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: gdb-patches@sourceware.org Cc: qiyao@sourceware.org From: Sandra Loosemore Subject: [RFA][PATCH] Remove gdb support for Nios II target X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org This is a multi-part message in MIME format. --------------9owa0Ps00MozUgJj3QfYATTO Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit The attached patch removes gdb support for the Nios II target, which has been EOL'ed by the vendor. I've already pushed the patch to remove support from GCC: https://gcc.gnu.org/pipermail/gcc-cvs/2024-November/413482.html I've also got a separate binutils patch I'm about to post and I'd like to get them both in at the same time. Can someone approve this patch? I'm not actually the gdb maintainer for this target; Yao Qi is listed but hasn't been active in a while. -Sandra --------------9owa0Ps00MozUgJj3QfYATTO Content-Type: text/x-patch; charset=UTF-8; name="nios2-gdb.patch" Content-Disposition: attachment; filename="nios2-gdb.patch" Content-Transfer-Encoding: base64 RnJvbSA4ZWU2N2NkOWE2MWE4YmEyODg0ZTRmYWQ3ZTMxYTBlMGE2MDNkODQyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBTYW5kcmEgTG9vc2Vtb3JlIDxzbG9vc2Vtb3JlQGJh eWxpYnJlLmNvbT4KRGF0ZTogV2VkLCAyMCBOb3YgMjAyNCAwNDo0OTo1MyArMDAwMApTdWJq ZWN0OiBbUEFUQ0hdIG5pb3MyOiBSZW1vdmUgYWxsIEdEQiBzdXBwb3J0IGZvciBOaW9zIElJ IHRhcmdldHMuCgpJbnRlbCBoYXMgRU9MJ2VkIHRoZSBOaW9zIElJIGFyY2hpdGVjdHVyZSwg YW5kIGl0J3MgdGltZSB0byByZW1vdmUgc3VwcG9ydApmcm9tIGFsbCB0b29sY2hhaW4gY29t cG9uZW50cyBiZWZvcmUgaXQgZ2V0cyBhbnkgbW9yZSBiaXQtcm90dGVuIGZyb20KbGFjayBv ZiBtYWludGVuYW5jZSBvciByZWd1bGFyIHRlc3RpbmcuCi0tLQogZ2RiL01BSU5UQUlORVJT ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICstCiBnZGIvTWFrZWZpbGUuaW4gICAg ICAgICAgICAgICAgICAgICAgICB8ICAgIDUgLQogZ2RiL05FV1MgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAzICsKIGdkYi9jb25maWd1cmUudGd0ICAgICAgICAgICAg ICAgICAgICAgIHwgICAxMSAtCiBnZGIvZGlzYXNtLXNlbGZ0ZXN0cy5jICAgICAgICAgICAg ICAgICB8ICAgIDMgKy0KIGdkYi9kb2MvZ2RiLnRleGluZm8gICAgICAgICAgICAgICAgICAg IHwgICAzMSAtCiBnZGIvZmVhdHVyZXMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICB8ICAg IDMgLQogZ2RiL2ZlYXR1cmVzL25pb3MyLWNwdS54bWwgICAgICAgICAgICAgfCAgIDU5IC0K IGdkYi9mZWF0dXJlcy9uaW9zMi1saW51eC54bWwgICAgICAgICAgIHwgICAxMyAtCiBnZGIv ZmVhdHVyZXMvbmlvczIuYyAgICAgICAgICAgICAgICAgICB8ICAgNjggLQogZ2RiL2ZlYXR1 cmVzL25pb3MyLnhtbCAgICAgICAgICAgICAgICAgfCAgIDEyIC0KIGdkYi9uaW9zMi1saW51 eC10ZGVwLmMgICAgICAgICAgICAgICAgIHwgIDI2MSAtLS0KIGdkYi9uaW9zMi10ZGVwLmMg ICAgICAgICAgICAgICAgICAgICAgIHwgMjQwNiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K IGdkYi9uaW9zMi10ZGVwLmggICAgICAgICAgICAgICAgICAgICAgIHwgICA5MCAtCiBnZGIv cmVnZm9ybWF0cy9uaW9zMi1saW51eC5kYXQgICAgICAgICB8ICAgNTUgLQogZ2RiL3Rlc3Rz dWl0ZS9nZGIuYmFzZS9zaWdhbHRzdGFjay5leHAgfCAgICAxIC0KIGdkYi90ZXN0c3VpdGUv Z2RiLmJhc2Uvc2lnYnB0LmV4cCAgICAgIHwgICAgMSAtCiBnZGIvdGVzdHN1aXRlL2dkYi5i YXNlL3NpZ2luZm8uZXhwICAgICB8ICAgIDEgLQogZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9z aWdzdGVwLmV4cCAgICAgfCAgICAyIC0KIGdkYi90ZXN0c3VpdGUvZ2RiLnhtbC90ZGVzYy1y ZWdzLmV4cCAgIHwgICAgMyAtCiBnZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwICAgICAgICAg ICAgICB8ICAgIDIgKy0KIGdkYnNlcnZlci9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAg IHwgICAgMSAtCiBnZGJzZXJ2ZXIvY29uZmlndXJlLnNydiAgICAgICAgICAgICAgICB8ICAg IDggLQogZ2Ric2VydmVyL2xpbnV4LW5pb3MyLWxvdy5jYyAgICAgICAgICAgfCAgMjg5IC0t LQogMjQgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAzMzI2IGRlbGV0aW9ucygt KQogZGVsZXRlIG1vZGUgMTAwNjQ0IGdkYi9mZWF0dXJlcy9uaW9zMi1jcHUueG1sCiBkZWxl dGUgbW9kZSAxMDA2NDQgZ2RiL2ZlYXR1cmVzL25pb3MyLWxpbnV4LnhtbAogZGVsZXRlIG1v ZGUgMTAwNjQ0IGdkYi9mZWF0dXJlcy9uaW9zMi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZ2Ri L2ZlYXR1cmVzL25pb3MyLnhtbAogZGVsZXRlIG1vZGUgMTAwNjQ0IGdkYi9uaW9zMi1saW51 eC10ZGVwLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBnZGIvbmlvczItdGRlcC5jCiBkZWxldGUg bW9kZSAxMDA2NDQgZ2RiL25pb3MyLXRkZXAuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGdkYi9y ZWdmb3JtYXRzL25pb3MyLWxpbnV4LmRhdAogZGVsZXRlIG1vZGUgMTAwNjQ0IGdkYnNlcnZl ci9saW51eC1uaW9zMi1sb3cuY2MKCmRpZmYgLS1naXQgYS9nZGIvTUFJTlRBSU5FUlMgYi9n ZGIvTUFJTlRBSU5FUlMKaW5kZXggMTI4YWRmZmIyY2UuLjkyN2JlNDM3MjFlIDEwMDY0NAot LS0gYS9nZGIvTUFJTlRBSU5FUlMKKysrIGIvZ2RiL01BSU5UQUlORVJTCkBAIC0zODMsOSAr MzgzLDcgQEAgdGhlIG5hdGl2ZSBtYWludGFpbmVyIHdoZW4gcmVzb2x2aW5nIEFCSSBpc3N1 ZXMuCiAKIAltczEJCURlbGV0ZWQKIAotCW5pb3MyCQktLXRhcmdldD1uaW9zMi1lbGYKLQkJ CS0tdGFyZ2V0PW5pb3MyLWxpbnV4LWdudQotCQkJWWFvIFFpCQkJcWl5YW9Ac291cmNld2Fy ZS5vcmcKKwluaW9zMgkJRGVsZXRlZAogCiAJbnMzMmsJCURlbGV0ZWQKIApkaWZmIC0tZ2l0 IGEvZ2RiL01ha2VmaWxlLmluIGIvZ2RiL01ha2VmaWxlLmluCmluZGV4IGVjYjMyM2Q4ZjAy Li4zOTIzMTU4ZWI3ZiAxMDA2NDQKLS0tIGEvZ2RiL01ha2VmaWxlLmluCisrKyBiL2dkYi9N YWtlZmlsZS5pbgpAQCAtODU3LDggKzg1Nyw2IEBAIEFMTF9UQVJHRVRfT0JTID0gXAogCW1z cDQzMC10ZGVwLm8gXAogCW5ldGJzZC10ZGVwLm8gXAogCW5kczMyLXRkZXAubyBcCi0Jbmlv czItbGludXgtdGRlcC5vIFwKLQluaW9zMi10ZGVwLm8gXAogCW9ic2QtdGRlcC5vIFwKIAlv cjFrLWxpbnV4LXRkZXAubyBcCiAJb3Ixay10ZGVwLm8gXApAQCAtMTQ0Miw3ICsxNDQwLDYg QEAgSEZJTEVTX05PX1NSQ0RJUiA9IFwKIAluZXRic2QtbmF0LmggXAogCW5ldGJzZC10ZGVw LmggXAogCW5kczMyLXRkZXAuaCBcCi0JbmlvczItdGRlcC5oIFwKIAllbGYtbm9uZS10ZGVw LmggXAogCW9iamMtbGFuZy5oIFwKIAlvYmpmaWxlcy5oIFwKQEAgLTE4MDcsOCArMTgwNCw2 IEBAIEFMTERFUEZJTEVTID0gXAogCW5ldGJzZC1uYXQuYyBcCiAJbmV0YnNkLXRkZXAuYyBc CiAJbmRzMzItdGRlcC5jIFwKLQluaW9zMi1saW51eC10ZGVwLmMgXAotCW5pb3MyLXRkZXAu YyBcCiAJb2JzZC1uYXQuYyBcCiAJb2JzZC10ZGVwLmMgXAogCW9yMWstbGludXgtbmF0LmMg XApkaWZmIC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUwppbmRleCAwNDZkYWFkMGVhZS4u ODA2MmM0NGM4OWMgMTAwNjQ0Ci0tLSBhL2dkYi9ORVdTCisrKyBiL2dkYi9ORVdTCkBAIC0z LDYgKzMsOSBAQAogCiAqKiogQ2hhbmdlcyBzaW5jZSBHREIgMTUKIAorKiBTdXBwb3J0IGZv ciBOaW9zIElJIHRhcmdldHMgaGFzIGJlZW4gcmVtb3ZlZCBhcyB0aGlzIGFyY2hpdGVjdHVy ZQorICBoYXMgYmVlbiBFT0wnZWQgYnkgSW50ZWwuCisKICogR0RCIG5vdyBzdXBwb3J0cyB3 YXRjaHBvaW50cyBmb3IgdGFnZ2VkIGRhdGEgcG9pbnRlcnMgKHNlZQogICBodHRwczovL2Vu Lndpa2lwZWRpYS5vcmcvd2lraS9UYWdnZWRfcG9pbnRlcikgb24gYW1kNjQsIHN1Y2ggYXMg dGhlCiAgIG9uZSB1c2VkIGJ5IHRoZSBMaW5lYXIgQWRkcmVzcyBNYXNraW5nIChMQU0pIGZl YXR1cmUgcHJvdmlkZWQgYnkKZGlmZiAtLWdpdCBhL2dkYi9jb25maWd1cmUudGd0IGIvZ2Ri L2NvbmZpZ3VyZS50Z3QKaW5kZXggNjJkZjcxYjEzZmEuLmYwNjBjNGUwOGVkIDEwMDY0NAot LS0gYS9nZGIvY29uZmlndXJlLnRndAorKysgYi9nZGIvY29uZmlndXJlLnRndApAQCAtNDY2 LDE3ICs0NjYsNiBAQCBuZHMzMiotKi1lbGYpCiAJZ2RiX3RhcmdldF9vYnM9Im5kczMyLXRk ZXAubyIKIAk7OwogCi1uaW9zMiotKi1saW51eCopCi0JIyBUYXJnZXQ6IEFsdGVyYSBOaW9z IElJIHJ1bm5pbmcgTGludXgKLQlnZGJfdGFyZ2V0X29icz0ibmlvczItdGRlcC5vIG5pb3My LWxpbnV4LXRkZXAubyBzb2xpYi1zdnI0Lm8gXAotCQkJc3ltZmlsZS1tZW0ubyBnbGliYy10 ZGVwLm8gbGludXgtdGRlcC5vIgotCTs7Ci0KLW5pb3MyKi0qLSopCi0JIyBUYXJnZXQ6IEFs dGVyYSBOaW9zIElJIGJhcmUtbWV0YWwKLQlnZGJfdGFyZ2V0X29icz0ibmlvczItdGRlcC5v IgotCTs7Ci0KIG9yMWsqLSotbGludXgqKQogCSMgVGFyZ2V0OiBPcGVuQ29yZXMgT3BlblJJ U0MgMTAwMCAzMi1iaXQgcnVubmluZyBMaW51eAogCWdkYl90YXJnZXRfb2JzPSJvcjFrLXRk ZXAubyBvcjFrLWxpbnV4LXRkZXAubyBzb2xpYi1zdnI0Lm8gXApkaWZmIC0tZ2l0IGEvZ2Ri L2Rpc2FzbS1zZWxmdGVzdHMuYyBiL2dkYi9kaXNhc20tc2VsZnRlc3RzLmMKaW5kZXggZGQ4 NDlmYjFlYjkuLjIyMWI5NGYwODUxIDEwMDY0NAotLS0gYS9nZGIvZGlzYXNtLXNlbGZ0ZXN0 cy5jCisrKyBiL2dkYi9kaXNhc20tc2VsZnRlc3RzLmMKQEAgLTkyLDEwICs5Miw5IEBAIGdl dF90ZXN0X2luc24gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBzaXplX3QgKmxlbikKICAg ICAgIGluc24gPSB4c3Rvcm15MTZfaW5zbjsKICAgICAgICpsZW4gPSBzaXplb2YgKHhzdG9y bXkxNl9pbnNuKTsKICAgICAgIGJyZWFrOwotICAgIGNhc2UgYmZkX2FyY2hfbmlvczI6CiAg ICAgY2FzZSBiZmRfYXJjaF9zY29yZToKICAgICBjYXNlIGJmZF9hcmNoX3Jpc2N2OgotICAg ICAgLyogbmlvczIsIHJpc2N2LCBhbmQgc2NvcmUgbmVlZCB0byBrbm93IHRoZSBjdXJyZW50 IGluc3RydWN0aW9uCisgICAgICAvKiByaXNjdiBhbmQgc2NvcmUgbmVlZCB0byBrbm93IHRo ZSBjdXJyZW50IGluc3RydWN0aW9uCiAJIHRvIHNlbGVjdCBicmVha3BvaW50IGluc3RydWN0 aW9uLiAgR2l2ZSB0aGUgYnJlYWtwb2ludAogCSBpbnN0cnVjdGlvbiBraW5kIGV4cGxpY2l0 bHkuICAqLwogICAgICAgewpkaWZmIC0tZ2l0IGEvZ2RiL2RvYy9nZGIudGV4aW5mbyBiL2dk Yi9kb2MvZ2RiLnRleGluZm8KaW5kZXggOTk3MjBmMTIwNmUuLmZmZjliZDk0MGE2IDEwMDY0 NAotLS0gYS9nZGIvZG9jL2dkYi50ZXhpbmZvCisrKyBiL2dkYi9kb2MvZ2RiLnRleGluZm8K QEAgLTI2NDI2LDcgKzI2NDI2LDYgQEAgYWxsIHVzZXMgb2YgQHZhbHVle0dEQk59IHdpdGgg dGhlIGFyY2hpdGVjdHVyZSwgYm90aCBuYXRpdmUgYW5kIGNyb3NzLgogKiBNSVBTOjoKICog SFBQQTo6ICAgICAgICAgICAgICAgSFAgUEEgYXJjaGl0ZWN0dXJlCiAqIFBvd2VyUEM6Ogot KiBOaW9zIElJOjoKICogU3BhcmM2NDo6CiAqIFMxMlo6OgogKiBBTUQgR1BVOjogICAgICAg ICAgICBAYWNyb255bXtBTUQgR1BVfSBhcmNoaXRlY3R1cmVzCkBAIC0yNzAxNSwyNSArMjcw MTQsNiBAQCBieSBqb2luaW5nIHRoZSBldmVuL29kZCByZWdpc3RlciBwYWlycyBAY29kZXtm MH0gYW5kIEBjb2Rle2YxfSBmb3IgQGNvZGV7JGRsMH0sCiBGb3IgUE9XRVI3IHByb2Nlc3Nv cnMsIEB2YWx1ZXtHREJOfSBwcm92aWRlcyBhIHNldCBvZiBwc2V1ZG8tcmVnaXN0ZXJzLCB0 aGUgNjQtYml0CiB3aWRlIEV4dGVuZGVkIEZsb2F0aW5nIFBvaW50IFJlZ2lzdGVycyAoQHNh bXB7ZjMyfSB0aHJvdWdoIEBzYW1we2Y2M30pLgogCi1Abm9kZSBOaW9zIElJCi1Ac3Vic2Vj dGlvbiBOaW9zIElJCi1AY2luZGV4IE5pb3MgSUkgYXJjaGl0ZWN0dXJlCi0KLVdoZW4gQHZh bHVle0dEQk59IGlzIGRlYnVnZ2luZyB0aGUgTmlvcyBJSSBhcmNoaXRlY3R1cmUsCi1pdCBw cm92aWRlcyB0aGUgZm9sbG93aW5nIHNwZWNpYWwgY29tbWFuZHM6Ci0KLUB0YWJsZSBAY29k ZQotCi1AaXRlbSBzZXQgZGVidWcgbmlvczIKLUBraW5kZXggc2V0IGRlYnVnIG5pb3MyCi1U aGlzIGNvbW1hbmQgdHVybnMgb24gYW5kIG9mZiBkZWJ1Z2dpbmcgbWVzc2FnZXMgZm9yIHRo ZSBOaW9zIElJCi10YXJnZXQgY29kZSBpbiBAdmFsdWV7R0RCTn0uCi0KLUBpdGVtIHNob3cg ZGVidWcgbmlvczIKLUBraW5kZXggc2hvdyBkZWJ1ZyBuaW9zMgotU2hvdyB0aGUgY3VycmVu dCBzZXR0aW5nIG9mIE5pb3MgSUkgZGVidWdnaW5nIG1lc3NhZ2VzLgotQGVuZCB0YWJsZQot CiBAbm9kZSBTcGFyYzY0CiBAc3Vic2VjdGlvbiBTcGFyYzY0CiBAY2luZGV4IFNwYXJjNjQg c3VwcG9ydApAQCAtNDkwMDQsNyArNDg5ODQsNiBAQCByZWdpc3RlcnMgdXNpbmcgdGhlIGNh cGl0YWxpemF0aW9uIHVzZWQgaW4gdGhlIGRlc2NyaXB0aW9uLgogKiBNSVBTIEZlYXR1cmVz OjoKICogTTY4SyBGZWF0dXJlczo6CiAqIE5EUzMyIEZlYXR1cmVzOjoKLSogTmlvcyBJSSBG ZWF0dXJlczo6CiAqIE9wZW5SSVNDIDEwMDAgRmVhdHVyZXM6OgogKiBQb3dlclBDIEZlYXR1 cmVzOjoKICogUklTQy1WIEZlYXR1cmVzOjoKQEAgLTQ5ODM3LDE2ICs0OTgxNiw2IEBAIG92 ZXJsYXBwaW5nIDY0LWJpdCBkb3VibGUtcHJlY2lzaW9uIHJlZ2lzdGVycy4gIExpc3Rpbmcg MzItYml0CiBzaW5nbGUtcHJlY2lzaW9uIHJlZ2lzdGVycyBleHBsaWNpdGx5IGlzIGRlcHJl Y2F0ZWQsIGFuZCB0aGUKIHN1cHBvcnQgdG8gaXQgY291bGQgYmUgdG90YWxseSByZW1vdmVk IHNvbWUgZGF5LgogCi1Abm9kZSBOaW9zIElJIEZlYXR1cmVzCi1Ac3Vic2VjdGlvbiBOaW9z IElJIEZlYXR1cmVzCi1AY2luZGV4IHRhcmdldCBkZXNjcmlwdGlvbnMsIE5pb3MgSUkgZmVh dHVyZXMKLQotVGhlIEBzYW1we29yZy5nbnUuZ2RiLm5pb3MyLmNwdX0gZmVhdHVyZSBpcyBy ZXF1aXJlZCBmb3IgTmlvcyBJSQotdGFyZ2V0cy4gIEl0IHNob3VsZCBjb250YWluIHRoZSAz MiBjb3JlIHJlZ2lzdGVycyAoQHNhbXB7emVyb30sCi1Ac2FtcHthdH0sIEBzYW1we3IyfSB0 aHJvdWdoIEBzYW1we3IyM30sIEBzYW1we2V0fSB0aHJvdWdoIEBzYW1we3JhfSksCi1Ac2Ft cHtwY30sIGFuZCB0aGUgMTYgY29udHJvbCByZWdpc3RlcnMgKEBzYW1we3N0YXR1c30gdGhy b3VnaAotQHNhbXB7bXB1YWNjfSkuCi0KIEBub2RlIE9wZW5SSVNDIDEwMDAgRmVhdHVyZXMK IEBzdWJzZWN0aW9uIE9wZW5yaXNjIDEwMDAgRmVhdHVyZXMKIEBjaW5kZXggdGFyZ2V0IGRl c2NyaXB0aW9ucywgT3BlblJJU0MgMTAwMCBmZWF0dXJlcwpkaWZmIC0tZ2l0IGEvZ2RiL2Zl YXR1cmVzL01ha2VmaWxlIGIvZ2RiL2ZlYXR1cmVzL01ha2VmaWxlCmluZGV4IDRmNDJkMDBj ZjliLi43YzEwZjIwM2ZhYSAxMDA2NDQKLS0tIGEvZ2RiL2ZlYXR1cmVzL01ha2VmaWxlCisr KyBiL2dkYi9mZWF0dXJlcy9NYWtlZmlsZQpAQCAtNDYsNyArNDYsNiBAQAogIyBMaXN0IG9m IC5kYXQgZmlsZXMgdG8gY3JlYXRlIGluIC4uL3JlZ2Zvcm1hdHMvCiBXSElDSCA9IG1pcHMt bGludXggbWlwcy1kc3AtbGludXggXAogCW1pcHM2NC1saW51eCBtaXBzNjQtZHNwLWxpbnV4 IFwKLQluaW9zMi1saW51eCBcCiAJb3Ixay1saW51eCBcCiAJcnM2MDAwL3Bvd2VycGMtMzIg XAogCXJzNjAwMC9wb3dlcnBjLTMybCByczYwMDAvcG93ZXJwYy1hbHRpdmVjMzJsIHJzNjAw MC9wb3dlcnBjLWU1MDBsIFwKQEAgLTczLDcgKzcyLDYgQEAgbWlwcy1leHBlZGl0ZSA9IHIy OSxwYwogbWlwcy1kc3AtZXhwZWRpdGUgPSByMjkscGMKIG1pcHM2NC1leHBlZGl0ZSA9IHIy OSxwYwogbWlwczY0LWRzcC1leHBlZGl0ZSA9IHIyOSxwYwotbmlvczItbGludXgtZXhwZWRp dGUgPSBzcCxwYwogb3Ixay1leHBlZGl0ZSA9IHIxLG5wYwogcG93ZXJwYy1leHBlZGl0ZSA9 IHIxLHBjCiBzMzkwLWxpbnV4MzItZXhwZWRpdGUgPSByMTQscjE1LHBzd2EKQEAgLTEwNyw3 ICsxMDUsNiBAQCBYTUxUT0MgPSBcCiAJbWlwczY0LWRzcC1saW51eC54bWwgXAogCW1pcHM2 NC1saW51eC54bWwgXAogCW5kczMyLnhtbCBcCi0JbmlvczIueG1sIFwKIAlvcjFrLnhtbCBc CiAJb3Ixay1saW51eC54bWwgXAogCXJzNjAwMC9wb3dlcnBjLTMyLnhtbCBcCmRpZmYgLS1n aXQgYS9nZGIvZmVhdHVyZXMvbmlvczItY3B1LnhtbCBiL2dkYi9mZWF0dXJlcy9uaW9zMi1j cHUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTQ0MmRmN2U4Ny4uMDAw MDAwMDAwMDAKLS0tIGEvZ2RiL2ZlYXR1cmVzL25pb3MyLWNwdS54bWwKKysrIC9kZXYvbnVs bApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhLS0gQ29weXJp Z2h0IChDKSAyMDEyLTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAg ICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRo b3V0IG1vZGlmaWNhdGlvbiwKLSAgICAgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdp dGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0Ci0gICAgIG5vdGljZSBhbmQg dGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIC0tPgotCi08IURPQ1RZUEUgZmVhdHVyZSBT WVNURU0gImdkYi10YXJnZXQuZHRkIj4KLTxmZWF0dXJlIG5hbWU9Im9yZy5nbnUuZ2RiLm5p b3MyLmNwdSI+Ci0gIDxyZWcgbmFtZT0iemVybyIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQz MiIvPgotICA8cmVnIG5hbWU9ImF0IiBiaXRzaXplPSIzMiIgdHlwZT0idWludDMyIi8+Ci0g IDxyZWcgbmFtZT0icjIiIGJpdHNpemU9IjMyIiB0eXBlPSJ1aW50MzIiLz4KLSAgPHJlZyBu YW1lPSJyMyIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9InI0 IiBiaXRzaXplPSIzMiIgdHlwZT0idWludDMyIi8+Ci0gIDxyZWcgbmFtZT0icjUiIGJpdHNp emU9IjMyIiB0eXBlPSJ1aW50MzIiLz4KLSAgPHJlZyBuYW1lPSJyNiIgYml0c2l6ZT0iMzIi IHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9InI3IiBiaXRzaXplPSIzMiIgdHlwZT0i dWludDMyIi8+Ci0gIDxyZWcgbmFtZT0icjgiIGJpdHNpemU9IjMyIiB0eXBlPSJ1aW50MzIi Lz4KLSAgPHJlZyBuYW1lPSJyOSIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8 cmVnIG5hbWU9InIxMCIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5h bWU9InIxMSIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9InIx MiIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9InIxMyIgYml0 c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9InIxNCIgYml0c2l6ZT0i MzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9InIxNSIgYml0c2l6ZT0iMzIiIHR5 cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9InIxNiIgYml0c2l6ZT0iMzIiIHR5cGU9InVp bnQzMiIvPgotICA8cmVnIG5hbWU9InIxNyIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIv PgotICA8cmVnIG5hbWU9InIxOCIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8 cmVnIG5hbWU9InIxOSIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5h bWU9InIyMCIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9InIy MSIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9InIyMiIgYml0 c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9InIyMyIgYml0c2l6ZT0i MzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9ImV0IiBiaXRzaXplPSIzMiIgdHlw ZT0idWludDMyIi8+Ci0gIDxyZWcgbmFtZT0iYnQiIGJpdHNpemU9IjMyIiB0eXBlPSJ1aW50 MzIiLz4KLSAgPHJlZyBuYW1lPSJncCIgYml0c2l6ZT0iMzIiIHR5cGU9ImRhdGFfcHRyIi8+ Ci0gIDxyZWcgbmFtZT0ic3AiIGJpdHNpemU9IjMyIiB0eXBlPSJkYXRhX3B0ciIvPgotICA8 cmVnIG5hbWU9ImZwIiBiaXRzaXplPSIzMiIgdHlwZT0iZGF0YV9wdHIiLz4KLSAgPHJlZyBu YW1lPSJlYSIgYml0c2l6ZT0iMzIiIHR5cGU9ImNvZGVfcHRyIi8+Ci0gIDxyZWcgbmFtZT0i c3N0YXR1cyIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9InJh IiBiaXRzaXplPSIzMiIgdHlwZT0iY29kZV9wdHIiLz4KLSAgPHJlZyBuYW1lPSJwYyIgYml0 c2l6ZT0iMzIiIHR5cGU9ImNvZGVfcHRyIi8+Ci0gIDxyZWcgbmFtZT0ic3RhdHVzIiBiaXRz aXplPSIzMiIgdHlwZT0idWludDMyIi8+Ci0gIDxyZWcgbmFtZT0iZXN0YXR1cyIgYml0c2l6 ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9ImJzdGF0dXMiIGJpdHNpemU9 IjMyIiB0eXBlPSJ1aW50MzIiLz4KLSAgPHJlZyBuYW1lPSJpZW5hYmxlIiBiaXRzaXplPSIz MiIgdHlwZT0idWludDMyIi8+Ci0gIDxyZWcgbmFtZT0iaXBlbmRpbmciIGJpdHNpemU9IjMy IiB0eXBlPSJ1aW50MzIiLz4KLSAgPHJlZyBuYW1lPSJjcHVpZCIgYml0c2l6ZT0iMzIiIHR5 cGU9InVpbnQzMiIvPgotICA8cmVnIG5hbWU9ImN0bDYiIGJpdHNpemU9IjMyIiB0eXBlPSJ1 aW50MzIiLz4KLSAgPHJlZyBuYW1lPSJleGNlcHRpb24iIGJpdHNpemU9IjMyIiB0eXBlPSJ1 aW50MzIiLz4KLSAgPHJlZyBuYW1lPSJwdGVhZGRyIiBiaXRzaXplPSIzMiIgdHlwZT0idWlu dDMyIi8+Ci0gIDxyZWcgbmFtZT0idGxiYWNjIiBiaXRzaXplPSIzMiIgdHlwZT0idWludDMy Ii8+Ci0gIDxyZWcgbmFtZT0idGxibWlzYyIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIv PgotICA8cmVnIG5hbWU9ImVjY2luaiIgYml0c2l6ZT0iMzIiIHR5cGU9InVpbnQzMiIvPgot ICA8cmVnIG5hbWU9ImJhZGFkZHIiIGJpdHNpemU9IjMyIiB0eXBlPSJ1aW50MzIiLz4KLSAg PHJlZyBuYW1lPSJjb25maWciIGJpdHNpemU9IjMyIiB0eXBlPSJ1aW50MzIiLz4KLSAgPHJl ZyBuYW1lPSJtcHViYXNlIiBiaXRzaXplPSIzMiIgdHlwZT0idWludDMyIi8+Ci0gIDxyZWcg bmFtZT0ibXB1YWNjIiBiaXRzaXplPSIzMiIgdHlwZT0idWludDMyIi8+Ci08L2ZlYXR1cmU+ CmRpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvbmlvczItbGludXgueG1sIGIvZ2RiL2ZlYXR1 cmVzL25pb3MyLWxpbnV4LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5 ZjhjMTM5NWUuLjAwMDAwMDAwMDAwCi0tLSBhL2dkYi9mZWF0dXJlcy9uaW9zMi1saW51eC54 bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAi Pz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDEyLTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCi0KLSAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmls ZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKLSAgICAgYXJlIHBlcm1pdHRlZCBp biBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0Ci0g ICAgIG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIC0tPgotCi08IURP Q1RZUEUgdGFyZ2V0IFNZU1RFTSAiZ2RiLXRhcmdldC5kdGQiPgotPHRhcmdldD4KLSAgPGFy Y2hpdGVjdHVyZT5uaW9zMjwvYXJjaGl0ZWN0dXJlPgotICA8b3NhYmk+R05VL0xpbnV4PC9v c2FiaT4KLSAgPHhpOmluY2x1ZGUgaHJlZj0ibmlvczItY3B1LnhtbCIvPgotPC90YXJnZXQ+ CmRpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvbmlvczIuYyBiL2dkYi9mZWF0dXJlcy9uaW9z Mi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTNiMGRkYjRhMC4uMDAwMDAw MDAwMDAKLS0tIGEvZ2RiL2ZlYXR1cmVzL25pb3MyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2 OCArMCwwIEBACi0vKiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiAgLSotIGJ1ZmZlci1yZWFk LW9ubHk6IHQgLSotIHZpOnNldCBybzoKLSAgT3JpZ2luYWw6IG5pb3MyLnhtbCAqLwotCi0j aW5jbHVkZSAib3NhYmkuaCIKLSNpbmNsdWRlICJ0YXJnZXQtZGVzY3JpcHRpb25zLmgiCi0K LWNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2NfbmlvczI7Ci1zdGF0aWMgdm9pZAot aW5pdGlhbGl6ZV90ZGVzY19uaW9zMiAodm9pZCkKLXsKLSAgdGFyZ2V0X2Rlc2NfdXAgcmVz dWx0ID0gYWxsb2NhdGVfdGFyZ2V0X2Rlc2NyaXB0aW9uICgpOwotICBzZXRfdGRlc2NfYXJj aGl0ZWN0dXJlIChyZXN1bHQuZ2V0ICgpLCBiZmRfc2Nhbl9hcmNoICgibmlvczIiKSk7Ci0K LSAgc3RydWN0IHRkZXNjX2ZlYXR1cmUgKmZlYXR1cmU7Ci0KLSAgZmVhdHVyZSA9IHRkZXNj X2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQuZ2V0ICgpLCAib3JnLmdudS5nZGIubmlvczIuY3B1 Iik7Ci0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJ6ZXJvIiwgMCwgMSwgTlVMTCwg MzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImF0IiwgMSwg MSwgTlVMTCwgMzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwg InIyIiwgMiwgMSwgTlVMTCwgMzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAo ZmVhdHVyZSwgInIzIiwgMywgMSwgTlVMTCwgMzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3Jl YXRlX3JlZyAoZmVhdHVyZSwgInI0IiwgNCwgMSwgTlVMTCwgMzIsICJ1aW50MzIiKTsKLSAg dGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInI1IiwgNSwgMSwgTlVMTCwgMzIsICJ1aW50 MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInI2IiwgNiwgMSwgTlVMTCwg MzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInI3IiwgNywg MSwgTlVMTCwgMzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwg InI4IiwgOCwgMSwgTlVMTCwgMzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAo ZmVhdHVyZSwgInI5IiwgOSwgMSwgTlVMTCwgMzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3Jl YXRlX3JlZyAoZmVhdHVyZSwgInIxMCIsIDEwLCAxLCBOVUxMLCAzMiwgInVpbnQzMiIpOwot ICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjExIiwgMTEsIDEsIE5VTEwsIDMyLCAi dWludDMyIik7Ci0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTIiLCAxMiwgMSwg TlVMTCwgMzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIx MyIsIDEzLCAxLCBOVUxMLCAzMiwgInVpbnQzMiIpOwotICB0ZGVzY19jcmVhdGVfcmVnIChm ZWF0dXJlLCAicjE0IiwgMTQsIDEsIE5VTEwsIDMyLCAidWludDMyIik7Ci0gIHRkZXNjX2Ny ZWF0ZV9yZWcgKGZlYXR1cmUsICJyMTUiLCAxNSwgMSwgTlVMTCwgMzIsICJ1aW50MzIiKTsK LSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIxNiIsIDE2LCAxLCBOVUxMLCAzMiwg InVpbnQzMiIpOwotICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAicjE3IiwgMTcsIDEs IE5VTEwsIDMyLCAidWludDMyIik7Ci0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJy MTgiLCAxOCwgMSwgTlVMTCwgMzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAo ZmVhdHVyZSwgInIxOSIsIDE5LCAxLCBOVUxMLCAzMiwgInVpbnQzMiIpOwotICB0ZGVzY19j cmVhdGVfcmVnIChmZWF0dXJlLCAicjIwIiwgMjAsIDEsIE5VTEwsIDMyLCAidWludDMyIik7 Ci0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJyMjEiLCAyMSwgMSwgTlVMTCwgMzIs ICJ1aW50MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInIyMiIsIDIyLCAx LCBOVUxMLCAzMiwgInVpbnQzMiIpOwotICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAi cjIzIiwgMjMsIDEsIE5VTEwsIDMyLCAidWludDMyIik7Ci0gIHRkZXNjX2NyZWF0ZV9yZWcg KGZlYXR1cmUsICJldCIsIDI0LCAxLCBOVUxMLCAzMiwgInVpbnQzMiIpOwotICB0ZGVzY19j cmVhdGVfcmVnIChmZWF0dXJlLCAiYnQiLCAyNSwgMSwgTlVMTCwgMzIsICJ1aW50MzIiKTsK LSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImdwIiwgMjYsIDEsIE5VTEwsIDMyLCAi ZGF0YV9wdHIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInNwIiwgMjcsIDEs IE5VTEwsIDMyLCAiZGF0YV9wdHIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwg ImZwIiwgMjgsIDEsIE5VTEwsIDMyLCAiZGF0YV9wdHIiKTsKLSAgdGRlc2NfY3JlYXRlX3Jl ZyAoZmVhdHVyZSwgImVhIiwgMjksIDEsIE5VTEwsIDMyLCAiY29kZV9wdHIiKTsKLSAgdGRl c2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInNzdGF0dXMiLCAzMCwgMSwgTlVMTCwgMzIsICJ1 aW50MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInJhIiwgMzEsIDEsIE5V TEwsIDMyLCAiY29kZV9wdHIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInBj IiwgMzIsIDEsIE5VTEwsIDMyLCAiY29kZV9wdHIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAo ZmVhdHVyZSwgInN0YXR1cyIsIDMzLCAxLCBOVUxMLCAzMiwgInVpbnQzMiIpOwotICB0ZGVz Y19jcmVhdGVfcmVnIChmZWF0dXJlLCAiZXN0YXR1cyIsIDM0LCAxLCBOVUxMLCAzMiwgInVp bnQzMiIpOwotICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiYnN0YXR1cyIsIDM1LCAx LCBOVUxMLCAzMiwgInVpbnQzMiIpOwotICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAi aWVuYWJsZSIsIDM2LCAxLCBOVUxMLCAzMiwgInVpbnQzMiIpOwotICB0ZGVzY19jcmVhdGVf cmVnIChmZWF0dXJlLCAiaXBlbmRpbmciLCAzNywgMSwgTlVMTCwgMzIsICJ1aW50MzIiKTsK LSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImNwdWlkIiwgMzgsIDEsIE5VTEwsIDMy LCAidWludDMyIik7Ci0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJjdGw2IiwgMzks IDEsIE5VTEwsIDMyLCAidWludDMyIik7Ci0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUs ICJleGNlcHRpb24iLCA0MCwgMSwgTlVMTCwgMzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3Jl YXRlX3JlZyAoZmVhdHVyZSwgInB0ZWFkZHIiLCA0MSwgMSwgTlVMTCwgMzIsICJ1aW50MzIi KTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgInRsYmFjYyIsIDQyLCAxLCBOVUxM LCAzMiwgInVpbnQzMiIpOwotICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAidGxibWlz YyIsIDQzLCAxLCBOVUxMLCAzMiwgInVpbnQzMiIpOwotICB0ZGVzY19jcmVhdGVfcmVnIChm ZWF0dXJlLCAiZWNjaW5qIiwgNDQsIDEsIE5VTEwsIDMyLCAidWludDMyIik7Ci0gIHRkZXNj X2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJiYWRhZGRyIiwgNDUsIDEsIE5VTEwsIDMyLCAidWlu dDMyIik7Ci0gIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJjb25maWciLCA0NiwgMSwg TlVMTCwgMzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgIm1w dWJhc2UiLCA0NywgMSwgTlVMTCwgMzIsICJ1aW50MzIiKTsKLSAgdGRlc2NfY3JlYXRlX3Jl ZyAoZmVhdHVyZSwgIm1wdWFjYyIsIDQ4LCAxLCBOVUxMLCAzMiwgInVpbnQzMiIpOwotCi0g IHRkZXNjX25pb3MyID0gcmVzdWx0LnJlbGVhc2UgKCk7Ci19CmRpZmYgLS1naXQgYS9nZGIv ZmVhdHVyZXMvbmlvczIueG1sIGIvZ2RiL2ZlYXR1cmVzL25pb3MyLnhtbApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ4ZTA0MzFlNjguLjAwMDAwMDAwMDAwCi0tLSBhL2dk Yi9mZWF0dXJlcy9uaW9zMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08 P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDEzLTIwMjQgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgICAgQ29weWluZyBhbmQgZGlzdHJp YnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKLSAg ICAgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRl ZCB0aGUgY29weXJpZ2h0Ci0gICAgIG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNl cnZlZC4gIC0tPgotCi08IURPQ1RZUEUgdGFyZ2V0IFNZU1RFTSAiZ2RiLXRhcmdldC5kdGQi PgotPHRhcmdldD4KLSAgPGFyY2hpdGVjdHVyZT5uaW9zMjwvYXJjaGl0ZWN0dXJlPgotICA8 eGk6aW5jbHVkZSBocmVmPSJuaW9zMi1jcHUueG1sIi8+Ci08L3RhcmdldD4KZGlmZiAtLWdp dCBhL2dkYi9uaW9zMi1saW51eC10ZGVwLmMgYi9nZGIvbmlvczItbGludXgtdGRlcC5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODVlMTNjZTEyNi4uMDAwMDAwMDAwMDAK LS0tIGEvZ2RiL25pb3MyLWxpbnV4LXRkZXAuYworKysgL2Rldi9udWxsCkBAIC0xLDI2MSAr MCwwIEBACi0vKiBUYXJnZXQtZGVwZW5kZW50IGNvZGUgZm9yIEdOVS9MaW51eCBvbiBOaW9z IElJLgotICAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCi0gICBDb250cmlidXRlZCBieSBNZW50b3IgR3JhcGhpY3MsIEluYy4KLQot ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot Ci0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotCi0jaW5jbHVkZSAi ZnJhbWUuaCIKLSNpbmNsdWRlICJvc2FiaS5oIgotI2luY2x1ZGUgInNvbGliLXN2cjQuaCIK LSNpbmNsdWRlICJ0cmFkLWZyYW1lLmgiCi0jaW5jbHVkZSAidHJhbXAtZnJhbWUuaCIKLSNp bmNsdWRlICJzeW10YWIuaCIKLSNpbmNsdWRlICJyZWdzZXQuaCIKLSNpbmNsdWRlICJyZWdj YWNoZS5oIgotI2luY2x1ZGUgImxpbnV4LXRkZXAuaCIKLSNpbmNsdWRlICJnbGliYy10ZGVw LmgiCi0jaW5jbHVkZSAibmlvczItdGRlcC5oIgotI2luY2x1ZGUgImdkYmFyY2guaCIKLQot LyogQ29yZSBmaWxlIGFuZCByZWdpc3RlciBzZXQgc3VwcG9ydC4gICovCi0KLS8qIE1hcCBm cm9tIHRoZSBub3JtYWwgcmVnaXN0ZXIgZW51bWVyYXRpb24gb3JkZXIgdG8gdGhlIG9yZGVy IHRoYXQKLSAgIHJlZ2lzdGVycyBhcHBlYXIgaW4gY29yZSBmaWxlcywgd2hpY2ggY29ycmVz cG9uZHMgdG8gdGhlIG9yZGVyCi0gICBvZiB0aGUgcmVnaXN0ZXIgc2xvdHMgaW4gdGhlIGtl cm5lbCdzIHN0cnVjdCBwdF9yZWdzLiAgKi8KLQotc3RhdGljIGNvbnN0IGludCByZWdfb2Zm c2V0c1tOSU9TMl9OVU1fUkVHU10gPQotewotICAtMSwgIDgsICA5LCAxMCwgMTEsIDEyLCAx MywgMTQsCS8qIHIwIC0gcjcgKi8KLSAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcs CS8qIHI4IC0gcjE1ICovCi0gIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwJLyog cjE2IC0gcjIzICovCi0gIC0xLCAtMSwgMTksIDE4LCAxNywgMjEsIC0xLCAxNiwJLyogZXQg YnQgZ3Agc3AgZnAgZWEgc3N0YXR1cyByYSAqLwotICAyMSwJCQkJCS8qIHBjICovCi0gIC0x LCAyMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJLyogc3RhdHVzIGVzdGF0dXMgLi4uICAq LwotICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEKLX07Ci0KLS8qIEdlbmVyYWwg cmVnaXN0ZXIgc2V0IHNpemUuICBTaG91bGQgbWF0Y2ggc2l6ZW9mIChzdHJ1Y3QgcHRfcmVn cykgKwotICAgc2l6ZW9mIChzdHJ1Y3Qgc3dpdGNoX3N0YWNrKSBmcm9tIHRoZSBOSU9TMiBM aW51eCBrZXJuZWwgcGF0Y2guICAqLwotCi0jZGVmaW5lIE5JT1MyX0dSRUdTX1NJWkUgKDQg KiAzNCkKLQotLyogSW1wbGVtZW50IHRoZSBzdXBwbHlfcmVnc2V0IGhvb2sgZm9yIGNvcmUg ZmlsZXMuICAqLwotCi1zdGF0aWMgdm9pZAotbmlvczJfc3VwcGx5X2dyZWdzZXQgKGNvbnN0 IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwKLQkJICAgICAgc3RydWN0IHJlZ2NhY2hlICpyZWdj YWNoZSwKLQkJICAgICAgaW50IHJlZ251bSwgY29uc3Qgdm9pZCAqZ3JlZ3NfYnVmLCBzaXpl X3QgbGVuKQotewotICBjb25zdCBnZGJfYnl0ZSAqZ3JlZ3MgPSAoY29uc3QgZ2RiX2J5dGUg KikgZ3JlZ3NfYnVmOwotICBpbnQgcmVnbm87Ci0KLSAgZm9yIChyZWdubyA9IE5JT1MyX1pf UkVHTlVNOyByZWdubyA8PSBOSU9TMl9NUFVBQ0NfUkVHTlVNOyByZWdubysrKQotICAgIGlm IChyZWdudW0gPT0gLTEgfHwgcmVnbnVtID09IHJlZ25vKQotICAgICAgewotCWlmIChyZWdf b2Zmc2V0c1tyZWdub10gIT0gLTEpCi0JICByZWdjYWNoZS0+cmF3X3N1cHBseSAocmVnbm8s IGdyZWdzICsgNCAqIHJlZ19vZmZzZXRzW3JlZ25vXSk7Ci0JZWxzZQotCSAgcmVnY2FjaGUt PnJhd19zdXBwbHlfemVyb2VkIChyZWdubyk7Ci0gICAgICB9Ci19Ci0KLS8qIEltcGxlbWVu dCB0aGUgY29sbGVjdF9yZWdzZXQgaG9vayBmb3IgY29yZSBmaWxlcy4gICovCi0KLXN0YXRp YyB2b2lkCi1uaW9zMl9jb2xsZWN0X2dyZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJl Z3NldCwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCi0JCSAg ICAgICBpbnQgcmVnbnVtLCB2b2lkICpncmVnc19idWYsIHNpemVfdCBsZW4pCi17Ci0gIGdk Yl9ieXRlICpncmVncyA9IChnZGJfYnl0ZSAqKSBncmVnc19idWY7Ci0gIGludCByZWdubzsK LQotICBmb3IgKHJlZ25vID0gTklPUzJfWl9SRUdOVU07IHJlZ25vIDw9IE5JT1MyX01QVUFD Q19SRUdOVU07IHJlZ25vKyspCi0gICAgaWYgKHJlZ251bSA9PSAtMSB8fCByZWdudW0gPT0g cmVnbm8pCi0gICAgICB7Ci0JaWYgKHJlZ19vZmZzZXRzW3JlZ25vXSAhPSAtMSkKLQkgIHJl Z2NhY2hlLT5yYXdfY29sbGVjdCAocmVnbm8sIGdyZWdzICsgNCAqIHJlZ19vZmZzZXRzW3Jl Z25vXSk7Ci0gICAgICB9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnc2V0IG5pb3My X2NvcmVfcmVnc2V0ID0KLXsKLSAgTlVMTCwKLSAgbmlvczJfc3VwcGx5X2dyZWdzZXQsCi0g IG5pb3MyX2NvbGxlY3RfZ3JlZ3NldAotfTsKLQotLyogSXRlcmF0ZSBvdmVyIGNvcmUgZmls ZSByZWdpc3RlciBub3RlIHNlY3Rpb25zLiAgKi8KLQotc3RhdGljIHZvaWQKLW5pb3MyX2l0 ZXJhdGVfb3Zlcl9yZWdzZXRfc2VjdGlvbnMgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAot CQkJCSAgICBpdGVyYXRlX292ZXJfcmVnc2V0X3NlY3Rpb25zX2NiICpjYiwKLQkJCQkgICAg dm9pZCAqY2JfZGF0YSwKLQkJCQkgICAgY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNo ZSkKLXsKLSAgY2IgKCIucmVnIiwgTklPUzJfR1JFR1NfU0laRSwgTklPUzJfR1JFR1NfU0la RSwgJm5pb3MyX2NvcmVfcmVnc2V0LCBOVUxMLAotICAgICAgY2JfZGF0YSk7Ci19Ci0KLS8q IEluaXRpYWxpemUgYSB0cmFkLWZyYW1lIGNhY2hlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRy YW1wLWZyYW1lLgotICAgRlVOQyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgaW5zdHJ1Y3Rpb24g VFJBTVBbMF0gaW4gbWVtb3J5LgotCi0gICBUaGlzIEFCSSBpcyBub3QgZG9jdW1lbnRlZC4g IEl0IGNvcnJlc3BvbmRzIHRvIHJ0X3NldHVwX3Vjb250ZXh0IGluCi0gICB0aGUga2VybmVs IGFyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jIGZpbGUuCi0KLSAgIFRoZSBrZXkgcG9pbnRz IGFyZToKLSAgIC0gVGhlIGtlcm5lbCBjcmVhdGVzIGEgdHJhbXBvbGluZSBhdCB0aGUgaGFy ZC13aXJlZCBhZGRyZXNzIDB4MTA0NC4KLSAgIC0gVGhlIHN0YWNrIHBvaW50ZXIgcG9pbnRz IHRvIGFuIG9iamVjdCBvZiB0eXBlIHN0cnVjdCBydF9zaWdmcmFtZS4KLSAgICAgVGhlIGRl ZmluaXRpb24gb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgbm90IGV4cG9ydGVkIGZyb20gdGhlIGtl cm5lbC4KLSAgICAgVGhlIHJlZ2lzdGVyIHNhdmUgYXJlYSBpcyBsb2NhdGVkIGF0IG9mZnNl dCAxNTIgYnl0ZXMgKGFzIGRldGVybWluZWQKLSAgICAgYnkgaW5zcGVjdGlvbiBvZiB0aGUg c3RhY2sgY29udGVudHMgaW4gdGhlIGRlYnVnZ2VyKSwgYW5kIHRoZQotICAgICByZWdpc3Rl cnMgYXJlIHNhdmVkIGFzIHIxLXIyMywgcmEsIGZwLCBncCwgZWEsIHNwLgotCi0gICBUaGlz IGludGVyZmFjZSB3YXMgaW1wbGVtZW50ZWQgd2l0aCBrZXJuZWwgdmVyc2lvbiAzLjE5ICh0 aGUgZmlyc3QKLSAgIG9mZmljaWFsIG1haW5saW5lIGtlcm5lbCkuICBPbGRlciB1bm9mZmlj aWFsIGtlcm5lbCB2ZXJzaW9ucyB1c2VkCi0gICBpbmNvbXBhdGlibGUgY29udmVudGlvbnM7 IHdlIGRvIG5vdCBzdXBwb3J0IHRob3NlIGhlcmUuICAqLwotCi0jZGVmaW5lIE5JT1MyX1NJ R1JFVFVSTl9UUkFNUF9BRERSIDB4MTA0NAotI2RlZmluZSBOSU9TMl9TSUdSRVRVUk5fUkVH U0FWRV9PRkZTRVQgMTUyCi0KLXN0YXRpYyB2b2lkCi1uaW9zMl9saW51eF9ydF9zaWdyZXR1 cm5faW5pdCAoY29uc3Qgc3RydWN0IHRyYW1wX2ZyYW1lICpzZWxmLAotCQkJICAgICAgIGNv bnN0IGZyYW1lX2luZm9fcHRyICZuZXh0X2ZyYW1lLAotCQkJICAgICAgIHN0cnVjdCB0cmFk X2ZyYW1lX2NhY2hlICp0aGlzX2NhY2hlLAotCQkJICAgICAgIENPUkVfQUREUiBmdW5jKQot ewotICBDT1JFX0FERFIgc3AgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKG5leHRf ZnJhbWUsIE5JT1MyX1NQX1JFR05VTSk7Ci0gIENPUkVfQUREUiBiYXNlID0gc3AgKyBOSU9T Ml9TSUdSRVRVUk5fUkVHU0FWRV9PRkZTRVQ7Ci0gIGludCBpOwotCi0gIGZvciAoaSA9IDA7 IGkgPCAyMzsgaSsrKQotICAgIHRyYWRfZnJhbWVfc2V0X3JlZ19hZGRyICh0aGlzX2NhY2hl LCBpICsgMSwgYmFzZSArIGkgKiA0KTsKLSAgdHJhZF9mcmFtZV9zZXRfcmVnX2FkZHIgKHRo aXNfY2FjaGUsIE5JT1MyX1JBX1JFR05VTSwgYmFzZSArIDIzICogNCk7Ci0gIHRyYWRfZnJh bWVfc2V0X3JlZ19hZGRyICh0aGlzX2NhY2hlLCBOSU9TMl9GUF9SRUdOVU0sIGJhc2UgKyAy NCAqIDQpOwotICB0cmFkX2ZyYW1lX3NldF9yZWdfYWRkciAodGhpc19jYWNoZSwgTklPUzJf R1BfUkVHTlVNLCBiYXNlICsgMjUgKiA0KTsKLSAgdHJhZF9mcmFtZV9zZXRfcmVnX2FkZHIg KHRoaXNfY2FjaGUsIE5JT1MyX1BDX1JFR05VTSwgYmFzZSArIDI3ICogNCk7Ci0gIHRyYWRf ZnJhbWVfc2V0X3JlZ19hZGRyICh0aGlzX2NhY2hlLCBOSU9TMl9TUF9SRUdOVU0sIGJhc2Ug KyAyOCAqIDQpOwotCi0gIC8qIFNhdmUgYSBmcmFtZSBJRC4gICovCi0gIHRyYWRfZnJhbWVf c2V0X2lkICh0aGlzX2NhY2hlLCBmcmFtZV9pZF9idWlsZCAoYmFzZSwgZnVuYykpOwotfQot Ci0vKiBUcmFtcG9saW5lIGZvciBzaWdyZXR1cm4uICBUaGlzIGhhcyB0aGUgZm9ybQotICAg ICBtb3ZpIHIyLCBfX05SX3J0X3NpZ3JldHVybgotICAgICB0cmFwIDAKLSAgIGFwcHJvcHJp YXRlbHkgZW5jb2RlZCBmb3IgUjEgb3IgUjIuICAqLwotCi1zdGF0aWMgc3RydWN0IHRyYW1w X2ZyYW1lIG5pb3MyX3IxX2xpbnV4X3J0X3NpZ3JldHVybl90cmFtcF9mcmFtZSA9Ci17Ci0g IFNJR1RSQU1QX0ZSQU1FLAotICA0LAotICB7Ci0gICAgeyBNQVRDSF9SMV9NT1ZJIHwgU0VU X0lXX0lfQiAoMikgfCBTRVRfSVdfSV9JTU0xNiAoMTM5KSwgVUxPTkdFU1RfTUFYIH0sCi0g ICAgeyBNQVRDSF9SMV9UUkFQIHwgU0VUX0lXX1JfSU1NNSAoMCksIFVMT05HRVNUX01BWH0s Ci0gICAgeyBUUkFNUF9TRU5USU5FTF9JTlNOIH0KLSAgfSwKLSAgbmlvczJfbGludXhfcnRf c2lncmV0dXJuX2luaXQKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHJhbXBfZnJhbWUgbmlvczJf cjJfbGludXhfcnRfc2lncmV0dXJuX3RyYW1wX2ZyYW1lID0KLXsKLSAgU0lHVFJBTVBfRlJB TUUsCi0gIDQsCi0gIHsKLSAgICB7IE1BVENIX1IyX01PVkkgfCBTRVRfSVdfRjJJMTZfQiAo MikgfCBTRVRfSVdfRjJJMTZfSU1NMTYgKDEzOSksIFVMT05HRVNUX01BWCB9LAotICAgIHsg TUFUQ0hfUjJfVFJBUCB8IFNFVF9JV19YMkw1X0lNTTUgKDApLCBVTE9OR0VTVF9NQVh9LAot ICAgIHsgVFJBTVBfU0VOVElORUxfSU5TTiB9Ci0gIH0sCi0gIG5pb3MyX2xpbnV4X3J0X3Np Z3JldHVybl9pbml0Ci19OwotCi0vKiBXaGVuIEZSQU1FIGlzIGF0IGEgc3lzY2FsbCBpbnN0 cnVjdGlvbiwgcmV0dXJuIHRoZSBQQyBvZiB0aGUgbmV4dAotICAgaW5zdHJ1Y3Rpb24gdG8g YmUgZXhlY3V0ZWQuICAqLwotCi1zdGF0aWMgQ09SRV9BRERSCi1uaW9zMl9saW51eF9zeXNj YWxsX25leHRfcGMgKGNvbnN0IGZyYW1lX2luZm9fcHRyICZmcmFtZSwKLQkJCSAgICAgY29u c3Qgc3RydWN0IG5pb3MyX29wY29kZSAqb3ApCi17Ci0gIENPUkVfQUREUiBwYyA9IGdldF9m cmFtZV9wYyAoZnJhbWUpOwotICBVTE9OR0VTVCBzeXNjYWxsX25yID0gZ2V0X2ZyYW1lX3Jl Z2lzdGVyX3Vuc2lnbmVkIChmcmFtZSwgTklPUzJfUjJfUkVHTlVNKTsKLQotICAvKiBJZiB3 ZSBhcmUgYWJvdXQgdG8gbWFrZSBhIHNpZ3JldHVybiBzeXNjYWxsLCB1c2UgdGhlIHVud2lu ZGVyIHRvCi0gICAgIGRlY29kZSB0aGUgc2lnbmFsIGZyYW1lLiAgKi8KLSAgaWYgKHN5c2Nh bGxfbnIgPT0gMTM5IC8qIHJ0X3NpZ3JldHVybiAqLykKLSAgICByZXR1cm4gZnJhbWVfdW53 aW5kX2NhbGxlcl9wYyAoZnJhbWUpOwotCi0gIHJldHVybiBwYyArIG9wLT5zaXplOwotfQot Ci0vKiBSZXR1cm4gdHJ1ZSBpZiBQQyBpcyBhIGtlcm5lbCBoZWxwZXIsIGEgZnVuY3Rpb24g bWFwcGVkIGJ5IHRoZSBrZXJuZWwKLSAgIGludG8gdXNlciBzcGFjZSBvbiBhbiB1bndyaXRh YmxlIHBhZ2UuICBDdXJyZW50bHkgdGhlIG9ubHkgc3VjaCBmdW5jdGlvbgotICAgaXMgX19r dXNlcl9jbXB4Y2hnIGF0IDB4MTAwNC4gIFNlZSBhcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5T IGluIHRoZSBMaW51eAotICAga2VybmVsIHNvdXJjZXMgYW5kIHN5c2RlcHMvdW5peC9zeXN2 L2xpbnV4L25pb3MyL2F0b21pYy1tYWNoaW5lLmggaW4KLSAgIEdMSUJDLiAgKi8KLXN0YXRp YyBib29sCi1uaW9zMl9saW51eF9pc19rZXJuZWxfaGVscGVyIChDT1JFX0FERFIgcGMpCi17 Ci0gIHJldHVybiBwYyA9PSAweDEwMDQ7Ci19Ci0KLS8qIEhvb2sgZnVuY3Rpb24gZm9yIGdk YmFyY2hfcmVnaXN0ZXJfb3NhYmkuICAqLwotCi1zdGF0aWMgdm9pZAotbmlvczJfbGludXhf aW5pdF9hYmkgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2ggKmdk YmFyY2gpCi17Ci0gIG5pb3MyX2dkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcDxu aW9zMl9nZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKLQotICBsaW51eF9pbml0X2FiaSAoaW5m bywgZ2RiYXJjaCwgMCk7Ci0KLSAgLyogU2hhcmVkIGxpYnJhcnkgaGFuZGxpbmcuICAqLwot ICBzZXRfZ2RiYXJjaF9za2lwX3RyYW1wb2xpbmVfY29kZSAoZ2RiYXJjaCwgZmluZF9zb2xp Yl90cmFtcG9saW5lX3RhcmdldCk7Ci0gIHNldF9nZGJhcmNoX3NraXBfc29saWJfcmVzb2x2 ZXIgKGdkYmFyY2gsIGdsaWJjX3NraXBfc29saWJfcmVzb2x2ZXIpOwotCi0gIHNldF9zb2xp Yl9zdnI0X2ZldGNoX2xpbmtfbWFwX29mZnNldHMgKGdkYmFyY2gsCi0JCQkJCSBsaW51eF9p bHAzMl9mZXRjaF9saW5rX21hcF9vZmZzZXRzKTsKLSAgLyogRW5hYmxlIFRMUyBzdXBwb3J0 LiAgKi8KLSAgc2V0X2dkYmFyY2hfZmV0Y2hfdGxzX2xvYWRfbW9kdWxlX2FkZHJlc3MgKGdk YmFyY2gsCi0JCQkJCSAgICAgc3ZyNF9mZXRjaF9vYmpmaWxlX2xpbmtfbWFwKTsKLSAgLyog Q29yZSBmaWxlIHN1cHBvcnQuICAqLwotICBzZXRfZ2RiYXJjaF9pdGVyYXRlX292ZXJfcmVn c2V0X3NlY3Rpb25zCi0gICAgKGdkYmFyY2gsIG5pb3MyX2l0ZXJhdGVfb3Zlcl9yZWdzZXRf c2VjdGlvbnMpOwotICAvKiBMaW51eCBzaWduYWwgZnJhbWUgdW53aW5kZXJzLiAgKi8KLSAg aWYgKGdkYmFyY2hfYmZkX2FyY2hfaW5mbyAoZ2RiYXJjaCktPm1hY2ggPT0gYmZkX21hY2hf bmlvczJyMikKLSAgICB0cmFtcF9mcmFtZV9wcmVwZW5kX3Vud2luZGVyIChnZGJhcmNoLAot CQkJCSAgJm5pb3MyX3IyX2xpbnV4X3J0X3NpZ3JldHVybl90cmFtcF9mcmFtZSk7Ci0gIGVs c2UKLSAgICB0cmFtcF9mcmFtZV9wcmVwZW5kX3Vud2luZGVyIChnZGJhcmNoLAotCQkJCSAg Jm5pb3MyX3IxX2xpbnV4X3J0X3NpZ3JldHVybl90cmFtcF9mcmFtZSk7Ci0KLSAgdGRlcC0+ c3lzY2FsbF9uZXh0X3BjID0gbmlvczJfbGludXhfc3lzY2FsbF9uZXh0X3BjOwotICB0ZGVw LT5pc19rZXJuZWxfaGVscGVyID0gbmlvczJfbGludXhfaXNfa2VybmVsX2hlbHBlcjsKLQot ICAvKiBJbmRleCBvZiB0YXJnZXQgYWRkcmVzcyB3b3JkIGluIGdsaWJjIGptcF9idWYuICAq LwotICB0ZGVwLT5qYl9wYyA9IDEwOwotfQotCi12b2lkIF9pbml0aWFsaXplX25pb3MyX2xp bnV4X3RkZXAgKCk7Ci12b2lkCi1faW5pdGlhbGl6ZV9uaW9zMl9saW51eF90ZGVwICgpCi17 Ci0KLSAgY29uc3Qgc3RydWN0IGJmZF9hcmNoX2luZm8gKmFyY2hfaW5mbzsKLQotICBmb3Ig KGFyY2hfaW5mbyA9IGJmZF9sb29rdXBfYXJjaCAoYmZkX2FyY2hfbmlvczIsIDApOwotICAg ICAgIGFyY2hfaW5mbyAhPSBOVUxMOwotICAgICAgIGFyY2hfaW5mbyA9IGFyY2hfaW5mby0+ bmV4dCkKLSAgICBnZGJhcmNoX3JlZ2lzdGVyX29zYWJpIChiZmRfYXJjaF9uaW9zMiwgYXJj aF9pbmZvLT5tYWNoLAotCQkJICAgIEdEQl9PU0FCSV9MSU5VWCwgbmlvczJfbGludXhfaW5p dF9hYmkpOwotfQpkaWZmIC0tZ2l0IGEvZ2RiL25pb3MyLXRkZXAuYyBiL2dkYi9uaW9zMi10 ZGVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMGMwMTU0YTYwLi4wMDAw MDAwMDAwMAotLS0gYS9nZGIvbmlvczItdGRlcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQw NiArMCwwIEBACi0vKiBUYXJnZXQtbWFjaGluZSBkZXBlbmRlbnQgY29kZSBmb3IgTmlvcyBJ SSwgZm9yIEdEQi4KLSAgIENvcHlyaWdodCAoQykgMjAxMi0yMDI0IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgotICAgQ29udHJpYnV0ZWQgYnkgUGV0ZXIgQnJvb2tlcyAocGJy b29rZXNAYWx0ZXJhLmNvbSkKLSAgIGFuZCBBbmRyZXcgRHJhcGVyIChhZHJhcGVyQGFsdGVy YS5jb20pLgotICAgQ29udHJpYnV0ZWQgYnkgTWVudG9yIEdyYXBoaWNzLCBJbmMuCi0KLSAg IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLQotI2luY2x1ZGUgImV4 dHJhY3Qtc3RvcmUtaW50ZWdlci5oIgotI2luY2x1ZGUgImZyYW1lLmgiCi0jaW5jbHVkZSAi ZnJhbWUtdW53aW5kLmgiCi0jaW5jbHVkZSAiZnJhbWUtYmFzZS5oIgotI2luY2x1ZGUgInRy YWQtZnJhbWUuaCIKLSNpbmNsdWRlICJkd2FyZjIvZnJhbWUuaCIKLSNpbmNsdWRlICJzeW10 YWIuaCIKLSNpbmNsdWRlICJpbmZlcmlvci5oIgotI2luY2x1ZGUgImdkYnR5cGVzLmgiCi0j aW5jbHVkZSAiZ2RiY29yZS5oIgotI2luY2x1ZGUgImNsaS9jbGktY21kcy5oIgotI2luY2x1 ZGUgIm9zYWJpLmgiCi0jaW5jbHVkZSAidGFyZ2V0LmgiCi0jaW5jbHVkZSAiZGlzLWFzbS5o IgotI2luY2x1ZGUgInJlZ2NhY2hlLmgiCi0jaW5jbHVkZSAidmFsdWUuaCIKLSNpbmNsdWRl ICJzeW1maWxlLmgiCi0jaW5jbHVkZSAiYXJjaC11dGlscy5oIgotI2luY2x1ZGUgImluZmNh bGwuaCIKLSNpbmNsdWRlICJyZWdzZXQuaCIKLSNpbmNsdWRlICJ0YXJnZXQtZGVzY3JpcHRp b25zLmgiCi0KLS8qIFRvIGdldCBlbnRyeV9wb2ludF9hZGRyZXNzLiAgKi8KLSNpbmNsdWRl ICJvYmpmaWxlcy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotLyogTmlvcyBJSSBzcGVj aWZpYyBoZWFkZXIuICAqLwotI2luY2x1ZGUgIm5pb3MyLXRkZXAuaCIKLQotI2luY2x1ZGUg ImZlYXR1cmVzL25pb3MyLmMiCi0KLS8qIENvbnRyb2wgZGVidWdnaW5nIGluZm9ybWF0aW9u IGVtaXR0ZWQgaW4gdGhpcyBmaWxlLiAgKi8KLQotc3RhdGljIGJvb2wgbmlvczJfZGVidWcg PSBmYWxzZTsKLQotLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzIGFyZSB1c2VkIGluIHRo ZSBjYWNoZSBmb3IgcHJvbG9ndWUKLSAgIGFuYWx5c2lzOyBzZWUgdGhlIHJlZ192YWx1ZSBh bmQgcmVnX3NhdmVkIHRhYmxlcyBpbgotICAgc3RydWN0IG5pb3MyX3Vud2luZF9jYWNoZSwg cmVzcGVjdGl2ZWx5LiAgKi8KLQotLyogc3RydWN0IHJlZ192YWx1ZSBpcyB1c2VkIHRvIHJl Y29yZCB0aGF0IGEgcmVnaXN0ZXIgaGFzIHJlZydzIGluaXRpYWwKLSAgIHZhbHVlIGF0IHRo ZSBzdGFydCBvZiBhIGZ1bmN0aW9uIHBsdXMgdGhlIGdpdmVuIGNvbnN0YW50IG9mZnNldC4K LSAgIElmIHJlZyA9PSAwLCB0aGVuIHRoZSB2YWx1ZSBpcyBqdXN0IHRoZSBvZmZzZXQuCi0g ICBJZiByZWcgPCAwLCB0aGVuIHRoZSB2YWx1ZSBpcyB1bmtub3duLiAgKi8KLQotc3RydWN0 IHJlZ192YWx1ZQotewotICBpbnQgcmVnOwotICBpbnQgb2Zmc2V0OwotfTsKLQotLyogc3Ry dWN0IHJlZ19zYXZlZCBpcyB1c2VkIHRvIHJlY29yZCB0aGF0IGEgcmVnaXN0ZXIgdmFsdWUg aGFzIGJlZW4gc2F2ZWQgYXQKLSAgIGJhc2VyZWcgKyBhZGRyLCBmb3IgYmFzZXJlZyA+PSAw LiAgSWYgYmFzZXJlZyA8IDAsIHRoYXQgaW5kaWNhdGVzCi0gICB0aGF0IHRoZSByZWdpc3Rl ciBpcyBub3Qga25vd24gdG8gaGF2ZSBiZWVuIHNhdmVkLiAgTm90ZSB0aGF0IHdoZW4KLSAg IGJhc2VyZWcgPT0gTklPUzJfWl9SRUdOVU0gKHRoYXQgaXMsIHIwLCB3aGljaCBob2xkcyB2 YWx1ZSAwKSwKLSAgIGFkZHIgaXMgYW4gYWJzb2x1dGUgYWRkcmVzcy4gICovCi0KLXN0cnVj dCByZWdfc2F2ZWQKLXsKLSAgaW50IGJhc2VyZWc7Ci0gIENPUkVfQUREUiBhZGRyOwotfTsK LQotc3RydWN0IG5pb3MyX3Vud2luZF9jYWNoZQotewotICAvKiBUaGUgZnJhbWUncyBiYXNl LCBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGhpZ2gtbGV2ZWwgZGVidWcgaW5mby4gICovCi0g IENPUkVfQUREUiBiYXNlOwotCi0gIC8qIFRoZSBwcmV2aW91cyBmcmFtZSdzIGlubmVyIG1v c3Qgc3RhY2sgYWRkcmVzcy4gIFVzZWQgYXMgdGhpcwotICAgICBmcmFtZSBJRCdzIHN0YWNr X2FkZHIuICAqLwotICBDT1JFX0FERFIgY2ZhOwotCi0gIC8qIFRoZSBhZGRyZXNzIG9mIHRo ZSBmaXJzdCBpbnN0cnVjdGlvbiBpbiB0aGlzIGZ1bmN0aW9uLiAgKi8KLSAgQ09SRV9BRERS IHBjOwotCi0gIC8qIFdoaWNoIHJlZ2lzdGVyIGhvbGRzIHRoZSByZXR1cm4gYWRkcmVzcyBm b3IgdGhlIGZyYW1lLiAgKi8KLSAgaW50IHJldHVybl9yZWdudW07Ci0KLSAgLyogVGFibGUg aW5kaWNhdGluZyB3aGF0IGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gZWFjaCByZWdpc3Rl ci4gICovCi0gIHN0cnVjdCByZWdfdmFsdWUgcmVnX3ZhbHVlW05JT1MyX05VTV9SRUdTXTsK LQotICAvKiBUYWJsZSBpbmRpY2F0aW5nIHdoZXJlIGVhY2ggcmVnaXN0ZXIgaGFzIGJlZW4g c2F2ZWQuICAqLwotICBzdHJ1Y3QgcmVnX3NhdmVkIHJlZ19zYXZlZFtOSU9TMl9OVU1fUkVH U107Ci19OwotCi0KLS8qIFRoaXMgYXJyYXkgaXMgYSBtYXBwaW5nIGZyb20gRHdhcmYtMiBy ZWdpc3RlciBudW1iZXJpbmcgdG8gR0RCJ3MuICAqLwotCi1zdGF0aWMgaW50IG5pb3MyX2R3 YXJmMmdkYl9yZWdub19tYXBbXSA9Ci17Ci0gIDAsIDEsIDIsIDMsCi0gIDQsIDUsIDYsIDcs Ci0gIDgsIDksIDEwLCAxMSwKLSAgMTIsIDEzLCAxNCwgMTUsCi0gIDE2LCAxNywgMTgsIDE5 LAotICAyMCwgMjEsIDIyLCAyMywKLSAgMjQsIDI1LAotICBOSU9TMl9HUF9SRUdOVU0sICAg ICAgICAvKiAyNiAqLwotICBOSU9TMl9TUF9SRUdOVU0sICAgICAgICAvKiAyNyAqLwotICBO SU9TMl9GUF9SRUdOVU0sICAgICAgICAvKiAyOCAqLwotICBOSU9TMl9FQV9SRUdOVU0sICAg ICAgICAvKiAyOSAqLwotICBOSU9TMl9CQV9SRUdOVU0sICAgICAgICAvKiAzMCAqLwotICBO SU9TMl9SQV9SRUdOVU0sICAgICAgICAvKiAzMSAqLwotICBOSU9TMl9QQ19SRUdOVU0sICAg ICAgICAvKiAzMiAqLwotICBOSU9TMl9TVEFUVVNfUkVHTlVNLCAgICAvKiAzMyAqLwotICBO SU9TMl9FU1RBVFVTX1JFR05VTSwgICAvKiAzNCAqLwotICBOSU9TMl9CU1RBVFVTX1JFR05V TSwgICAvKiAzNSAqLwotICBOSU9TMl9JRU5BQkxFX1JFR05VTSwgICAvKiAzNiAqLwotICBO SU9TMl9JUEVORElOR19SRUdOVU0sICAvKiAzNyAqLwotICBOSU9TMl9DUFVJRF9SRUdOVU0s ICAgICAvKiAzOCAqLwotICAzOSwgLyogQ1RMNiAqLyAgICAgICAgICAvKiAzOSAqLwotICBO SU9TMl9FWENFUFRJT05fUkVHTlVNLCAvKiA0MCAqLwotICBOSU9TMl9QVEVBRERSX1JFR05V TSwgICAvKiA0MSAqLwotICBOSU9TMl9UTEJBQ0NfUkVHTlVNLCAgICAvKiA0MiAqLwotICBO SU9TMl9UTEJNSVNDX1JFR05VTSwgICAvKiA0MyAqLwotICBOSU9TMl9FQ0NJTkpfUkVHTlVN LCAgICAvKiA0NCAqLwotICBOSU9TMl9CQURBRERSX1JFR05VTSwgICAvKiA0NSAqLwotICBO SU9TMl9DT05GSUdfUkVHTlVNLCAgICAvKiA0NiAqLwotICBOSU9TMl9NUFVCQVNFX1JFR05V TSwgICAvKiA0NyAqLwotICBOSU9TMl9NUFVBQ0NfUkVHTlVNICAgICAvKiA0OCAqLwotfTsK LQotc3RhdGljX2Fzc2VydCAoQVJSQVlfU0laRSAobmlvczJfZHdhcmYyZ2RiX3JlZ25vX21h cCkgPT0gTklPUzJfTlVNX1JFR1MpOwotCi0vKiBJbXBsZW1lbnQgdGhlIGR3YXJmMl9yZWdf dG9fcmVnbnVtIGdkYmFyY2ggbWV0aG9kLiAgKi8KLQotc3RhdGljIGludAotbmlvczJfZHdh cmZfcmVnX3RvX3JlZ251bSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCBkd19yZWcp Ci17Ci0gIGlmIChkd19yZWcgPCAwIHx8IGR3X3JlZyA+PSBOSU9TMl9OVU1fUkVHUykKLSAg ICByZXR1cm4gLTE7Ci0KLSAgcmV0dXJuIG5pb3MyX2R3YXJmMmdkYl9yZWdub19tYXBbZHdf cmVnXTsKLX0KLQotLyogQ2Fub25pY2FsIG5hbWVzIGZvciB0aGUgNDkgcmVnaXN0ZXJzLiAg Ki8KLQotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5pb3MyX3JlZ19uYW1lc1tOSU9TMl9O VU1fUkVHU10gPQotewotICAiemVybyIsICJhdCIsICJyMiIsICJyMyIsICJyNCIsICJyNSIs ICJyNiIsICJyNyIsCi0gICJyOCIsICJyOSIsICJyMTAiLCAicjExIiwgInIxMiIsICJyMTMi LCAicjE0IiwgInIxNSIsCi0gICJyMTYiLCAicjE3IiwgInIxOCIsICJyMTkiLCAicjIwIiwg InIyMSIsICJyMjIiLCAicjIzIiwKLSAgImV0IiwgImJ0IiwgImdwIiwgInNwIiwgImZwIiwg ImVhIiwgInNzdGF0dXMiLCAicmEiLAotICAicGMiLAotICAic3RhdHVzIiwgImVzdGF0dXMi LCAiYnN0YXR1cyIsICJpZW5hYmxlIiwKLSAgImlwZW5kaW5nIiwgImNwdWlkIiwgImN0bDYi LCAiZXhjZXB0aW9uIiwKLSAgInB0ZWFkZHIiLCAidGxiYWNjIiwgInRsYm1pc2MiLCAiZWNj aW5qIiwKLSAgImJhZGFkZHIiLCAiY29uZmlnIiwgIm1wdWJhc2UiLCAibXB1YWNjIgotfTsK LQotLyogSW1wbGVtZW50IHRoZSByZWdpc3Rlcl9uYW1lIGdkYmFyY2ggbWV0aG9kLiAgKi8K LQotc3RhdGljIGNvbnN0IGNoYXIgKgotbmlvczJfcmVnaXN0ZXJfbmFtZSAoc3RydWN0IGdk YmFyY2ggKmdkYmFyY2gsIGludCByZWdubykKLXsKLSAgLyogVXNlIG1uZW1vbmljIGFsaWFz ZXMgZm9yIEdQUnMuICAqLwotICBpZiAocmVnbm8gPCBOSU9TMl9OVU1fUkVHUykKLSAgICBy ZXR1cm4gbmlvczJfcmVnX25hbWVzW3JlZ25vXTsKLSAgZWxzZQotICAgIHJldHVybiB0ZGVz Y19yZWdpc3Rlcl9uYW1lIChnZGJhcmNoLCByZWdubyk7Ci19Ci0KLS8qIEltcGxlbWVudCB0 aGUgcmVnaXN0ZXJfdHlwZSBnZGJhcmNoIG1ldGhvZC4gICovCi0KLXN0YXRpYyBzdHJ1Y3Qg dHlwZSAqCi1uaW9zMl9yZWdpc3Rlcl90eXBlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwg aW50IHJlZ25vKQotewotICAvKiBJZiB0aGUgWE1MIGRlc2NyaXB0aW9uIGhhcyByZWdpc3Rl ciBpbmZvcm1hdGlvbiwgdXNlIHRoYXQgdG8KLSAgICAgZGV0ZXJtaW5lIHRoZSByZWdpc3Rl ciB0eXBlLiAgKi8KLSAgaWYgKHRkZXNjX2hhc19yZWdpc3RlcnMgKGdkYmFyY2hfdGFyZ2V0 X2Rlc2MgKGdkYmFyY2gpKSkKLSAgICByZXR1cm4gdGRlc2NfcmVnaXN0ZXJfdHlwZSAoZ2Ri YXJjaCwgcmVnbm8pOwotCi0gIGlmIChyZWdubyA9PSBOSU9TMl9QQ19SRUdOVU0pCi0gICAg cmV0dXJuIGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCktPmJ1aWx0aW5fZnVuY19wdHI7Ci0gIGVs c2UgaWYgKHJlZ25vID09IE5JT1MyX1NQX1JFR05VTSkKLSAgICByZXR1cm4gYnVpbHRpbl90 eXBlIChnZGJhcmNoKS0+YnVpbHRpbl9kYXRhX3B0cjsKLSAgZWxzZQotICAgIHJldHVybiBi dWlsdGluX3R5cGUgKGdkYmFyY2gpLT5idWlsdGluX3VpbnQzMjsKLX0KLQotLyogR2l2ZW4g YSByZXR1cm4gdmFsdWUgaW4gUkVHQ0FDSEUgd2l0aCBhIHR5cGUgVkFMVFlQRSwKLSAgIGV4 dHJhY3QgYW5kIGNvcHkgaXRzIHZhbHVlIGludG8gVkFMQlVGLiAgKi8KLQotc3RhdGljIHZv aWQKLW5pb3MyX2V4dHJhY3RfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJj aCwgc3RydWN0IHR5cGUgKnZhbHR5cGUsCi0JCQkgICAgc3RydWN0IHJlZ2NhY2hlICpyZWdj YWNoZSwgZ2RiX2J5dGUgKnZhbGJ1ZikKLXsKLSAgaW50IGxlbiA9IHZhbHR5cGUtPmxlbmd0 aCAoKTsKLQotICAvKiBSZXR1cm4gdmFsdWVzIG9mIHVwIHRvIDggYnl0ZXMgYXJlIHJldHVy bmVkIGluICRyMiAkcjMuICAqLwotICBpZiAobGVuIDw9IHJlZ2lzdGVyX3NpemUgKGdkYmFy Y2gsIE5JT1MyX1IyX1JFR05VTSkpCi0gICAgcmVnY2FjaGUtPmNvb2tlZF9yZWFkIChOSU9T Ml9SMl9SRUdOVU0sIHZhbGJ1Zik7Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBnZGJfYXNzZXJ0 IChsZW4gPD0gKHJlZ2lzdGVyX3NpemUgKGdkYmFyY2gsIE5JT1MyX1IyX1JFR05VTSkKLQkJ CSAgKyByZWdpc3Rlcl9zaXplIChnZGJhcmNoLCBOSU9TMl9SM19SRUdOVU0pKSk7Ci0gICAg ICByZWdjYWNoZS0+Y29va2VkX3JlYWQgKE5JT1MyX1IyX1JFR05VTSwgdmFsYnVmKTsKLSAg ICAgIHJlZ2NhY2hlLT5jb29rZWRfcmVhZCAoTklPUzJfUjNfUkVHTlVNLCB2YWxidWYgKyA0 KTsKLSAgICB9Ci19Ci0KLS8qIFdyaXRlIGludG8gYXBwcm9wcmlhdGUgcmVnaXN0ZXJzIGEg ZnVuY3Rpb24gcmV0dXJuIHZhbHVlCi0gICBvZiB0eXBlIFRZUEUsIGdpdmVuIGluIHZpcnR1 YWwgZm9ybWF0LiAgKi8KLQotc3RhdGljIHZvaWQKLW5pb3MyX3N0b3JlX3JldHVybl92YWx1 ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCB0eXBlICp2YWx0eXBlLAotCQkJ ICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjb25zdCBnZGJfYnl0ZSAqdmFsYnVmKQot ewotICBpbnQgbGVuID0gdmFsdHlwZS0+bGVuZ3RoICgpOwotCi0gIC8qIFJldHVybiB2YWx1 ZXMgb2YgdXAgdG8gOCBieXRlcyBhcmUgcmV0dXJuZWQgaW4gJHIyICRyMy4gICovCi0gIGlm IChsZW4gPD0gcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgTklPUzJfUjJfUkVHTlVNKSkKLSAg ICByZWdjYWNoZS0+Y29va2VkX3dyaXRlIChOSU9TMl9SMl9SRUdOVU0sIHZhbGJ1Zik7Ci0g IGVsc2UKLSAgICB7Ci0gICAgICBnZGJfYXNzZXJ0IChsZW4gPD0gKHJlZ2lzdGVyX3NpemUg KGdkYmFyY2gsIE5JT1MyX1IyX1JFR05VTSkKLQkJCSAgKyByZWdpc3Rlcl9zaXplIChnZGJh cmNoLCBOSU9TMl9SM19SRUdOVU0pKSk7Ci0gICAgICByZWdjYWNoZS0+Y29va2VkX3dyaXRl IChOSU9TMl9SMl9SRUdOVU0sIHZhbGJ1Zik7Ci0gICAgICByZWdjYWNoZS0+Y29va2VkX3dy aXRlIChOSU9TMl9SM19SRUdOVU0sIHZhbGJ1ZiArIDQpOwotICAgIH0KLX0KLQotCi0vKiBT ZXQgdXAgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSByZWdpc3RlcnMuICAqLwotCi1zdGF0 aWMgdm9pZAotbmlvczJfc2V0dXBfZGVmYXVsdCAoc3RydWN0IG5pb3MyX3Vud2luZF9jYWNo ZSAqY2FjaGUpCi17Ci0gIGludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBOSU9TMl9OVU1f UkVHUzsgaSsrKQotICAgIHsKLSAgICAgIC8qIEFsbCByZWdpc3RlcnMgc3RhcnQgb2ZmIGhv bGRpbmcgdGhlaXIgcHJldmlvdXMgdmFsdWVzLiAgKi8KLSAgICAgIGNhY2hlLT5yZWdfdmFs dWVbaV0ucmVnICAgID0gaTsKLSAgICAgIGNhY2hlLT5yZWdfdmFsdWVbaV0ub2Zmc2V0ID0g MDsKLQotICAgICAgLyogQWxsIHJlZ2lzdGVycyBzdGFydCBvZmYgbm90IHNhdmVkLiAgKi8K LSAgICAgIGNhY2hlLT5yZWdfc2F2ZWRbaV0uYmFzZXJlZyA9IC0xOwotICAgICAgY2FjaGUt PnJlZ19zYXZlZFtpXS5hZGRyICAgID0gMDsKLSAgICB9Ci19Ci0KLS8qIEluaXRpYWxpemUg dGhlIHVud2luZCBjYWNoZS4gICovCi0KLXN0YXRpYyB2b2lkCi1uaW9zMl9pbml0X2NhY2hl IChzdHJ1Y3QgbmlvczJfdW53aW5kX2NhY2hlICpjYWNoZSwgQ09SRV9BRERSIHBjKQotewot ICBjYWNoZS0+YmFzZSA9IDA7Ci0gIGNhY2hlLT5jZmEgPSAwOwotICBjYWNoZS0+cGMgPSBw YzsKLSAgY2FjaGUtPnJldHVybl9yZWdudW0gPSBOSU9TMl9SQV9SRUdOVU07Ci0gIG5pb3My X3NldHVwX2RlZmF1bHQgKGNhY2hlKTsKLX0KLQotLyogUmVhZCBhbmQgaWRlbnRpZnkgYW4g aW5zdHJ1Y3Rpb24gYXQgUEMuICBJZiBJTlNOUCBpcyBub24tbnVsbCwKLSAgIHN0b3JlIHRo ZSBpbnN0cnVjdGlvbiB3b3JkIGludG8gdGhhdCBsb2NhdGlvbi4gIFJldHVybiB0aGUgb3Bj b2RlCi0gICBwb2ludGVyIG9yIE5VTEwgaWYgdGhlIG1lbW9yeSBjb3VsZG4ndCBiZSByZWFk IG9yIGRpc2Fzc2VtYmxlZC4gICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmlvczJfb3Bj b2RlICoKLW5pb3MyX2ZldGNoX2luc24gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JF X0FERFIgcGMsCi0JCSAgdW5zaWduZWQgaW50ICppbnNucCkKLXsKLSAgTE9OR0VTVCBtZW13 b3JkOwotICB1bnNpZ25lZCBsb25nIG1hY2ggPSBnZGJhcmNoX2JmZF9hcmNoX2luZm8gKGdk YmFyY2gpLT5tYWNoOwotICB1bnNpZ25lZCBpbnQgaW5zbjsKLQotICBpZiAobWFjaCA9PSBi ZmRfbWFjaF9uaW9zMnIyKQotICAgIHsKLSAgICAgIGlmICghc2FmZV9yZWFkX21lbW9yeV9p bnRlZ2VyIChwYywgTklPUzJfT1BDT0RFX1NJWkUsCi0JCQkJICAgICBCRkRfRU5ESUFOX0xJ VFRMRSwgJm1lbXdvcmQpCi0JICAmJiAhc2FmZV9yZWFkX21lbW9yeV9pbnRlZ2VyIChwYywg TklPUzJfQ0RYX09QQ09ERV9TSVpFLAotCQkJCQlCRkRfRU5ESUFOX0xJVFRMRSwgJm1lbXdv cmQpKQotCXJldHVybiBOVUxMOwotICAgIH0KLSAgZWxzZSBpZiAoIXNhZmVfcmVhZF9tZW1v cnlfaW50ZWdlciAocGMsIE5JT1MyX09QQ09ERV9TSVpFLAotCQkJCSAgICAgIGdkYmFyY2hf Ynl0ZV9vcmRlciAoZ2RiYXJjaCksICZtZW13b3JkKSkKLSAgICByZXR1cm4gTlVMTDsKLQot ICBpbnNuID0gKHVuc2lnbmVkIGludCkgbWVtd29yZDsKLSAgaWYgKGluc25wKQotICAgICpp bnNucCA9IGluc247Ci0gIHJldHVybiBuaW9zMl9maW5kX29wY29kZV9oYXNoIChpbnNuLCBt YWNoKTsKLX0KLQotCi0vKiBNYXRjaCBhbmQgZGlzYXNzZW1ibGUgYW4gQURELXR5cGUgaW5z dHJ1Y3Rpb24sIHdpdGggMyByZWdpc3RlciBvcGVyYW5kcy4KLSAgIFJldHVybnMgdHJ1ZSBv biBzdWNjZXNzLCBhbmQgZmlsbHMgaW4gdGhlIG9wZXJhbmQgcG9pbnRlcnMuICAqLwotCi1z dGF0aWMgaW50Ci1uaW9zMl9tYXRjaF9hZGQgKHVpbnQzMl90IGluc24sIGNvbnN0IHN0cnVj dCBuaW9zMl9vcGNvZGUgKm9wLAotCQkgdW5zaWduZWQgbG9uZyBtYWNoLCBpbnQgKnJhLCBp bnQgKnJiLCBpbnQgKnJjKQotewotICBpbnQgaXNfcjIgPSAobWFjaCA9PSBiZmRfbWFjaF9u aW9zMnIyKTsKLQotICBpZiAoIWlzX3IyICYmIChvcC0+bWF0Y2ggPT0gTUFUQ0hfUjFfQURE IHx8IG9wLT5tYXRjaCA9PSBNQVRDSF9SMV9NT1YpKQotICAgIHsKLSAgICAgICpyYSA9IEdF VF9JV19SX0EgKGluc24pOwotICAgICAgKnJiID0gR0VUX0lXX1JfQiAoaW5zbik7Ci0gICAg ICAqcmMgPSBHRVRfSVdfUl9DIChpbnNuKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAg ZWxzZSBpZiAoIWlzX3IyKQotICAgIHJldHVybiAwOwotICBlbHNlIGlmIChvcC0+bWF0Y2gg PT0gTUFUQ0hfUjJfQUREIHx8IG9wLT5tYXRjaCA9PSBNQVRDSF9SMl9NT1YpCi0gICAgewot ICAgICAgKnJhID0gR0VUX0lXX0YzWDZMNV9BIChpbnNuKTsKLSAgICAgICpyYiA9IEdFVF9J V19GM1g2TDVfQiAoaW5zbik7Ci0gICAgICAqcmMgPSBHRVRfSVdfRjNYNkw1X0MgKGluc24p OwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICBlbHNlIGlmIChvcC0+bWF0Y2ggPT0gTUFU Q0hfUjJfQUREX04pCi0gICAgewotICAgICAgKnJhID0gbmlvczJfcjJfcmVnM19tYXBwaW5n c1tHRVRfSVdfVDNYMV9BMyAoaW5zbildOwotICAgICAgKnJiID0gbmlvczJfcjJfcmVnM19t YXBwaW5nc1tHRVRfSVdfVDNYMV9CMyAoaW5zbildOwotICAgICAgKnJjID0gbmlvczJfcjJf cmVnM19tYXBwaW5nc1tHRVRfSVdfVDNYMV9DMyAoaW5zbildOwotICAgICAgcmV0dXJuIDE7 Ci0gICAgfQotICBlbHNlIGlmIChvcC0+bWF0Y2ggPT0gTUFUQ0hfUjJfTU9WX04pCi0gICAg ewotICAgICAgKnJhID0gR0VUX0lXX0YyX0EgKGluc24pOwotICAgICAgKnJiID0gMDsKLSAg ICAgICpyYyA9IEdFVF9JV19GMl9CIChpbnNuKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0K LSAgcmV0dXJuIDA7Ci19Ci0KLS8qIE1hdGNoIGFuZCBkaXNhc3NlbWJsZSBhIFNVQi10eXBl IGluc3RydWN0aW9uLCB3aXRoIDMgcmVnaXN0ZXIgb3BlcmFuZHMuCi0gICBSZXR1cm5zIHRy dWUgb24gc3VjY2VzcywgYW5kIGZpbGxzIGluIHRoZSBvcGVyYW5kIHBvaW50ZXJzLiAgKi8K LQotc3RhdGljIGludAotbmlvczJfbWF0Y2hfc3ViICh1aW50MzJfdCBpbnNuLCBjb25zdCBz dHJ1Y3QgbmlvczJfb3Bjb2RlICpvcCwKLQkJIHVuc2lnbmVkIGxvbmcgbWFjaCwgaW50ICpy YSwgaW50ICpyYiwgaW50ICpyYykKLXsKLSAgaW50IGlzX3IyID0gKG1hY2ggPT0gYmZkX21h Y2hfbmlvczJyMik7Ci0KLSAgaWYgKCFpc19yMiAmJiBvcC0+bWF0Y2ggPT0gTUFUQ0hfUjFf U1VCKQotICAgIHsKLSAgICAgICpyYSA9IEdFVF9JV19SX0EgKGluc24pOwotICAgICAgKnJi ID0gR0VUX0lXX1JfQiAoaW5zbik7Ci0gICAgICAqcmMgPSBHRVRfSVdfUl9DIChpbnNuKTsK LSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgZWxzZSBpZiAoIWlzX3IyKQotICAgIHJldHVy biAwOwotICBlbHNlIGlmIChvcC0+bWF0Y2ggPT0gTUFUQ0hfUjJfU1VCKQotICAgIHsKLSAg ICAgICpyYSA9IEdFVF9JV19GM1g2TDVfQSAoaW5zbik7Ci0gICAgICAqcmIgPSBHRVRfSVdf RjNYNkw1X0IgKGluc24pOwotICAgICAgKnJjID0gR0VUX0lXX0YzWDZMNV9DIChpbnNuKTsK LSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgZWxzZSBpZiAob3AtPm1hdGNoID09IE1BVENI X1IyX1NVQl9OKQotICAgIHsKLSAgICAgICpyYSA9IG5pb3MyX3IyX3JlZzNfbWFwcGluZ3Nb R0VUX0lXX1QzWDFfQTMgKGluc24pXTsKLSAgICAgICpyYiA9IG5pb3MyX3IyX3JlZzNfbWFw cGluZ3NbR0VUX0lXX1QzWDFfQjMgKGluc24pXTsKLSAgICAgICpyYyA9IG5pb3MyX3IyX3Jl ZzNfbWFwcGluZ3NbR0VUX0lXX1QzWDFfQzMgKGluc24pXTsKLSAgICAgIHJldHVybiAxOwot ICAgIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIE1hdGNoIGFuZCBkaXNhc3NlbWJsZSBhbiBB RERJLXR5cGUgaW5zdHJ1Y3Rpb24sIHdpdGggMiByZWdpc3RlciBvcGVyYW5kcwotICAgYW5k IG9uZSBpbW1lZGlhdGUgb3BlcmFuZC4KLSAgIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBh bmQgZmlsbHMgaW4gdGhlIG9wZXJhbmQgcG9pbnRlcnMuICAqLwotCi1zdGF0aWMgaW50Ci1u aW9zMl9tYXRjaF9hZGRpICh1aW50MzJfdCBpbnNuLCBjb25zdCBzdHJ1Y3QgbmlvczJfb3Bj b2RlICpvcCwKLQkJICB1bnNpZ25lZCBsb25nIG1hY2gsIGludCAqcmEsIGludCAqcmIsIGlu dCAqaW1tKQotewotICBpbnQgaXNfcjIgPSAobWFjaCA9PSBiZmRfbWFjaF9uaW9zMnIyKTsK LQotICBpZiAoIWlzX3IyICYmIG9wLT5tYXRjaCA9PSBNQVRDSF9SMV9BRERJKQotICAgIHsK LSAgICAgICpyYSA9IEdFVF9JV19JX0EgKGluc24pOwotICAgICAgKnJiID0gR0VUX0lXX0lf QiAoaW5zbik7Ci0gICAgICAqaW1tID0gKHNpZ25lZCkgKEdFVF9JV19JX0lNTTE2IChpbnNu KSA8PCAxNikgPj4gMTY7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIGVsc2UgaWYgKCFp c19yMikKLSAgICByZXR1cm4gMDsKLSAgZWxzZSBpZiAob3AtPm1hdGNoID09IE1BVENIX1Iy X0FEREkpCi0gICAgewotICAgICAgKnJhID0gR0VUX0lXX0YySTE2X0EgKGluc24pOwotICAg ICAgKnJiID0gR0VUX0lXX0YySTE2X0IgKGluc24pOwotICAgICAgKmltbSA9IChzaWduZWQp IChHRVRfSVdfRjJJMTZfSU1NMTYgKGluc24pIDw8IDE2KSA+PiAxNjsKLSAgICAgIHJldHVy biAxOwotICAgIH0KLSAgZWxzZSBpZiAob3AtPm1hdGNoID09IE1BVENIX1IyX0FERElfTiB8 fCBvcC0+bWF0Y2ggPT0gTUFUQ0hfUjJfU1VCSV9OKQotICAgIHsKLSAgICAgICpyYSA9IG5p b3MyX3IyX3JlZzNfbWFwcGluZ3NbR0VUX0lXX1QyWDFJM19BMyAoaW5zbildOwotICAgICAg KnJiID0gbmlvczJfcjJfcmVnM19tYXBwaW5nc1tHRVRfSVdfVDJYMUkzX0IzIChpbnNuKV07 Ci0gICAgICAqaW1tID0gbmlvczJfcjJfYXNpX25fbWFwcGluZ3NbR0VUX0lXX1QyWDFJM19J TU0zIChpbnNuKV07Ci0gICAgICBpZiAob3AtPm1hdGNoID09IE1BVENIX1IyX1NVQklfTikK LQkqaW1tID0gLSAoKmltbSk7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIGVsc2UgaWYg KG9wLT5tYXRjaCA9PSBNQVRDSF9SMl9TUEFERElfTikKLSAgICB7Ci0gICAgICAqcmEgPSBu aW9zMl9yMl9yZWczX21hcHBpbmdzW0dFVF9JV19UMUk3X0EzIChpbnNuKV07Ci0gICAgICAq cmIgPSBOSU9TMl9TUF9SRUdOVU07Ci0gICAgICAqaW1tID0gR0VUX0lXX1QxSTdfSU1NNyAo aW5zbikgPDwgMjsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgZWxzZSBpZiAob3AtPm1h dGNoID09IE1BVENIX1IyX1NQSU5DSV9OIHx8IG9wLT5tYXRjaCA9PSBNQVRDSF9SMl9TUERF Q0lfTikKLSAgICB7Ci0gICAgICAqcmEgPSBOSU9TMl9TUF9SRUdOVU07Ci0gICAgICAqcmIg PSBOSU9TMl9TUF9SRUdOVU07Ci0gICAgICAqaW1tID0gR0VUX0lXX1gxSTdfSU1NNyAoaW5z bikgPDwgMjsKLSAgICAgIGlmIChvcC0+bWF0Y2ggPT0gTUFUQ0hfUjJfU1BERUNJX04pCi0J KmltbSA9IC0gKCppbW0pOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICByZXR1cm4gMDsK LX0KLQotLyogTWF0Y2ggYW5kIGRpc2Fzc2VtYmxlIGFuIE9SSEktdHlwZSBpbnN0cnVjdGlv biwgd2l0aCAyIHJlZ2lzdGVyIG9wZXJhbmRzCi0gICBhbmQgb25lIHVuc2lnbmVkIGltbWVk aWF0ZSBvcGVyYW5kLgotICAgUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGFuZCBmaWxscyBp biB0aGUgb3BlcmFuZCBwb2ludGVycy4gICovCi0KLXN0YXRpYyBpbnQKLW5pb3MyX21hdGNo X29yaGkgKHVpbnQzMl90IGluc24sIGNvbnN0IHN0cnVjdCBuaW9zMl9vcGNvZGUgKm9wLAot CQkgIHVuc2lnbmVkIGxvbmcgbWFjaCwgaW50ICpyYSwgaW50ICpyYiwgdW5zaWduZWQgaW50 ICp1aW1tKQotewotICBpbnQgaXNfcjIgPSAobWFjaCA9PSBiZmRfbWFjaF9uaW9zMnIyKTsK LQotICBpZiAoIWlzX3IyICYmIG9wLT5tYXRjaCA9PSBNQVRDSF9SMV9PUkhJKQotICAgIHsK LSAgICAgICpyYSA9IEdFVF9JV19JX0EgKGluc24pOwotICAgICAgKnJiID0gR0VUX0lXX0lf QiAoaW5zbik7Ci0gICAgICAqdWltbSA9IEdFVF9JV19JX0lNTTE2IChpbnNuKTsKLSAgICAg IHJldHVybiAxOwotICAgIH0KLSAgZWxzZSBpZiAoIWlzX3IyKQotICAgIHJldHVybiAwOwot ICBlbHNlIGlmIChvcC0+bWF0Y2ggPT0gTUFUQ0hfUjJfT1JISSkKLSAgICB7Ci0gICAgICAq cmEgPSBHRVRfSVdfRjJJMTZfQSAoaW5zbik7Ci0gICAgICAqcmIgPSBHRVRfSVdfRjJJMTZf QiAoaW5zbik7Ci0gICAgICAqdWltbSA9IEdFVF9JV19GMkkxNl9JTU0xNiAoaW5zbik7Ci0g ICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIHJldHVybiAwOwotfQotCi0vKiBNYXRjaCBhbmQg ZGlzYXNzZW1ibGUgYSBTVFctdHlwZSBpbnN0cnVjdGlvbiwgd2l0aCAyIHJlZ2lzdGVyIG9w ZXJhbmRzCi0gICBhbmQgb25lIGltbWVkaWF0ZSBvcGVyYW5kLgotICAgUmV0dXJucyB0cnVl IG9uIHN1Y2Nlc3MsIGFuZCBmaWxscyBpbiB0aGUgb3BlcmFuZCBwb2ludGVycy4gICovCi0K LXN0YXRpYyBpbnQKLW5pb3MyX21hdGNoX3N0dyAodWludDMyX3QgaW5zbiwgY29uc3Qgc3Ry dWN0IG5pb3MyX29wY29kZSAqb3AsCi0JCSB1bnNpZ25lZCBsb25nIG1hY2gsIGludCAqcmEs IGludCAqcmIsIGludCAqaW1tKQotewotICBpbnQgaXNfcjIgPSAobWFjaCA9PSBiZmRfbWFj aF9uaW9zMnIyKTsKLQotICBpZiAoIWlzX3IyICYmIChvcC0+bWF0Y2ggPT0gTUFUQ0hfUjFf U1RXIHx8IG9wLT5tYXRjaCA9PSBNQVRDSF9SMV9TVFdJTykpCi0gICAgewotICAgICAgKnJh ID0gR0VUX0lXX0lfQSAoaW5zbik7Ci0gICAgICAqcmIgPSBHRVRfSVdfSV9CIChpbnNuKTsK LSAgICAgICppbW0gPSAoc2lnbmVkKSAoR0VUX0lXX0lfSU1NMTYgKGluc24pIDw8IDE2KSA+ PiAxNjsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgZWxzZSBpZiAoIWlzX3IyKQotICAg IHJldHVybiAwOwotICBlbHNlIGlmIChvcC0+bWF0Y2ggPT0gTUFUQ0hfUjJfU1RXKQotICAg IHsKLSAgICAgICpyYSA9IEdFVF9JV19GMkkxNl9BIChpbnNuKTsKLSAgICAgICpyYiA9IEdF VF9JV19GMkkxNl9CIChpbnNuKTsKLSAgICAgICppbW0gPSAoc2lnbmVkKSAoR0VUX0lXX0Yy STE2X0lNTTE2IChpbnNuKSA8PCAxNikgPj4gMTY7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9 Ci0gIGVsc2UgaWYgKG9wLT5tYXRjaCA9PSBNQVRDSF9SMl9TVFdJTykKLSAgICB7Ci0gICAg ICAqcmEgPSBHRVRfSVdfRjJYNEkxMl9BIChpbnNuKTsKLSAgICAgICpyYiA9IEdFVF9JV19G Mlg0STEyX0IgKGluc24pOwotICAgICAgKmltbSA9IChzaWduZWQpIChHRVRfSVdfRjJYNEkx Ml9JTU0xMiAoaW5zbikgPDwgMjApID4+IDIwOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQot ICBlbHNlIGlmIChvcC0+bWF0Y2ggPT0gTUFUQ0hfUjJfU1RXX04pCi0gICAgewotICAgICAg KnJhID0gbmlvczJfcjJfcmVnM19tYXBwaW5nc1tHRVRfSVdfVDJJNF9BMyAoaW5zbildOwot ICAgICAgKnJiID0gbmlvczJfcjJfcmVnM19tYXBwaW5nc1tHRVRfSVdfVDJJNF9CMyAoaW5z bildOwotICAgICAgKmltbSA9IEdFVF9JV19UMkk0X0lNTTQgKGluc24pIDw8IDI7Ci0gICAg ICByZXR1cm4gMTsKLSAgICB9Ci0gIGVsc2UgaWYgKG9wLT5tYXRjaCA9PSBNQVRDSF9SMl9T VFdTUF9OKQotICAgIHsKLSAgICAgICpyYSA9IE5JT1MyX1NQX1JFR05VTTsKLSAgICAgICpy YiA9IEdFVF9JV19GMUk1X0IgKGluc24pOwotICAgICAgKmltbSA9IEdFVF9JV19GMUk1X0lN TTUgKGluc24pIDw8IDI7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIGVsc2UgaWYgKG9w LT5tYXRjaCA9PSBNQVRDSF9SMl9TVFdaX04pCi0gICAgewotICAgICAgKnJhID0gbmlvczJf cjJfcmVnM19tYXBwaW5nc1tHRVRfSVdfVDFYMUk2X0EzIChpbnNuKV07Ci0gICAgICAqcmIg PSAwOwotICAgICAgKmltbSA9IEdFVF9JV19UMVgxSTZfSU1NNiAoaW5zbikgPDwgMjsKLSAg ICAgIHJldHVybiAxOwotICAgIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIE1hdGNoIGFuZCBk aXNhc3NlbWJsZSBhIExEVy10eXBlIGluc3RydWN0aW9uLCB3aXRoIDIgcmVnaXN0ZXIgb3Bl cmFuZHMKLSAgIGFuZCBvbmUgaW1tZWRpYXRlIG9wZXJhbmQuCi0gICBSZXR1cm5zIHRydWUg b24gc3VjY2VzcywgYW5kIGZpbGxzIGluIHRoZSBvcGVyYW5kIHBvaW50ZXJzLiAgKi8KLQot c3RhdGljIGludAotbmlvczJfbWF0Y2hfbGR3ICh1aW50MzJfdCBpbnNuLCBjb25zdCBzdHJ1 Y3QgbmlvczJfb3Bjb2RlICpvcCwKLQkJIHVuc2lnbmVkIGxvbmcgbWFjaCwgaW50ICpyYSwg aW50ICpyYiwgaW50ICppbW0pCi17Ci0gIGludCBpc19yMiA9IChtYWNoID09IGJmZF9tYWNo X25pb3MycjIpOwotCi0gIGlmICghaXNfcjIgJiYgKG9wLT5tYXRjaCA9PSBNQVRDSF9SMV9M RFcgfHwgb3AtPm1hdGNoID09IE1BVENIX1IxX0xEV0lPKSkKLSAgICB7Ci0gICAgICAqcmEg PSBHRVRfSVdfSV9BIChpbnNuKTsKLSAgICAgICpyYiA9IEdFVF9JV19JX0IgKGluc24pOwot ICAgICAgKmltbSA9IChzaWduZWQpIChHRVRfSVdfSV9JTU0xNiAoaW5zbikgPDwgMTYpID4+ IDE2OwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICBlbHNlIGlmICghaXNfcjIpCi0gICAg cmV0dXJuIDA7Ci0gIGVsc2UgaWYgKG9wLT5tYXRjaCA9PSBNQVRDSF9SMl9MRFcpCi0gICAg ewotICAgICAgKnJhID0gR0VUX0lXX0YySTE2X0EgKGluc24pOwotICAgICAgKnJiID0gR0VU X0lXX0YySTE2X0IgKGluc24pOwotICAgICAgKmltbSA9IChzaWduZWQpIChHRVRfSVdfRjJJ MTZfSU1NMTYgKGluc24pIDw8IDE2KSA+PiAxNjsKLSAgICAgIHJldHVybiAxOwotICAgIH0K LSAgZWxzZSBpZiAob3AtPm1hdGNoID09IE1BVENIX1IyX0xEV0lPKQotICAgIHsKLSAgICAg ICpyYSA9IEdFVF9JV19GMlg0STEyX0EgKGluc24pOwotICAgICAgKnJiID0gR0VUX0lXX0Yy WDRJMTJfQiAoaW5zbik7Ci0gICAgICAqaW1tID0gKHNpZ25lZCkgKEdFVF9JV19GMlg0STEy X0lNTTEyIChpbnNuKSA8PCAyMCkgPj4gMjA7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0g IGVsc2UgaWYgKG9wLT5tYXRjaCA9PSBNQVRDSF9SMl9MRFdfTikKLSAgICB7Ci0gICAgICAq cmEgPSBuaW9zMl9yMl9yZWczX21hcHBpbmdzW0dFVF9JV19UMkk0X0EzIChpbnNuKV07Ci0g ICAgICAqcmIgPSBuaW9zMl9yMl9yZWczX21hcHBpbmdzW0dFVF9JV19UMkk0X0IzIChpbnNu KV07Ci0gICAgICAqaW1tID0gR0VUX0lXX1QySTRfSU1NNCAoaW5zbikgPDwgMjsKLSAgICAg IHJldHVybiAxOwotICAgIH0KLSAgZWxzZSBpZiAob3AtPm1hdGNoID09IE1BVENIX1IyX0xE V1NQX04pCi0gICAgewotICAgICAgKnJhID0gTklPUzJfU1BfUkVHTlVNOwotICAgICAgKnJi ID0gR0VUX0lXX0YxSTVfQiAoaW5zbik7Ci0gICAgICAqaW1tID0gR0VUX0lXX0YxSTVfSU1N NSAoaW5zbikgPDwgMjsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgcmV0dXJuIDA7Ci19 Ci0KLS8qIE1hdGNoIGFuZCBkaXNhc3NlbWJsZSBhIFJEQ1RMIGluc3RydWN0aW9uLCB3aXRo IDIgcmVnaXN0ZXIgb3BlcmFuZHMuCi0gICBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgYW5k IGZpbGxzIGluIHRoZSBvcGVyYW5kIHBvaW50ZXJzLiAgKi8KLQotc3RhdGljIGludAotbmlv czJfbWF0Y2hfcmRjdGwgKHVpbnQzMl90IGluc24sIGNvbnN0IHN0cnVjdCBuaW9zMl9vcGNv ZGUgKm9wLAotCQkgICB1bnNpZ25lZCBsb25nIG1hY2gsIGludCAqcmEsIGludCAqcmMpCi17 Ci0gIGludCBpc19yMiA9IChtYWNoID09IGJmZF9tYWNoX25pb3MycjIpOwotCi0gIGlmICgh aXNfcjIgJiYgKG9wLT5tYXRjaCA9PSBNQVRDSF9SMV9SRENUTCkpCi0gICAgewotICAgICAg KnJhID0gR0VUX0lXX1JfSU1NNSAoaW5zbik7Ci0gICAgICAqcmMgPSBHRVRfSVdfUl9DIChp bnNuKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgZWxzZSBpZiAoIWlzX3IyKQotICAg IHJldHVybiAwOwotICBlbHNlIGlmIChvcC0+bWF0Y2ggPT0gTUFUQ0hfUjJfUkRDVEwpCi0g ICAgewotICAgICAgKnJhID0gR0VUX0lXX0YzWDZMNV9JTU01IChpbnNuKTsKLSAgICAgICpy YyA9IEdFVF9JV19GM1g2TDVfQyAoaW5zbik7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0g IHJldHVybiAwOwotfQotCi0vKiBNYXRjaCBhbmQgZGlzYXNzZW1ibGUgYSBQVVNILk4gb3Ig U1RXTSBpbnN0cnVjdGlvbi4KLSAgIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBhbmQgZmls bHMgaW4gdGhlIG9wZXJhbmQgcG9pbnRlcnMuICAqLwotCi1zdGF0aWMgaW50Ci1uaW9zMl9t YXRjaF9zdHdtICh1aW50MzJfdCBpbnNuLCBjb25zdCBzdHJ1Y3QgbmlvczJfb3Bjb2RlICpv cCwKLQkJICB1bnNpZ25lZCBsb25nIG1hY2gsIHVuc2lnbmVkIGludCAqcmVnbGlzdCwKLQkJ ICBpbnQgKnJhLCBpbnQgKmltbSwgaW50ICp3YiwgaW50ICppZCkKLXsKLSAgaW50IGlzX3Iy ID0gKG1hY2ggPT0gYmZkX21hY2hfbmlvczJyMik7Ci0KLSAgaWYgKCFpc19yMikKLSAgICBy ZXR1cm4gMDsKLSAgZWxzZSBpZiAob3AtPm1hdGNoID09IE1BVENIX1IyX1BVU0hfTikKLSAg ICB7Ci0gICAgICAqcmVnbGlzdCA9IDEgPDwgMzE7Ci0gICAgICBpZiAoR0VUX0lXX0w1STRY MV9GUCAoaW5zbikpCi0JKnJlZ2xpc3QgfD0gKDEgPDwgMjgpOwotICAgICAgaWYgKEdFVF9J V19MNUk0WDFfQ1MgKGluc24pKQotCXsKLQkgIGludCB2YWwgPSBHRVRfSVdfTDVJNFgxX1JF R1JBTkdFIChpbnNuKTsKLQkgICpyZWdsaXN0IHw9IG5pb3MyX3IyX3JlZ19yYW5nZV9tYXBw aW5nc1t2YWxdOwotCX0KLSAgICAgICpyYSA9IE5JT1MyX1NQX1JFR05VTTsKLSAgICAgICpp bW0gPSBHRVRfSVdfTDVJNFgxX0lNTTQgKGluc24pIDw8IDI7Ci0gICAgICAqd2IgPSAxOwot ICAgICAgKmlkID0gMDsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgZWxzZSBpZiAob3At Pm1hdGNoID09IE1BVENIX1IyX1NUV00pCi0gICAgewotICAgICAgdW5zaWduZWQgaW50IHJh d21hc2sgPSBHRVRfSVdfRjFYNEwxN19SRUdNQVNLIChpbnNuKTsKLSAgICAgIGlmIChHRVRf SVdfRjFYNEwxN19SUyAoaW5zbikpCi0JewotCSAgKnJlZ2xpc3QgPSAoKHJhd21hc2sgPDwg MTQpICYgMHgwMGZmYzAwMCk7Ci0JICBpZiAocmF3bWFzayAmICgxIDw8IDEwKSkKLQkgICAg KnJlZ2xpc3QgfD0gKDEgPDwgMjgpOwotCSAgaWYgKHJhd21hc2sgJiAoMSA8PCAxMSkpCi0J ICAgICpyZWdsaXN0IHw9ICgxIDw8IDMxKTsKLQl9Ci0gICAgICBlbHNlCi0JKnJlZ2xpc3Qg PSByYXdtYXNrIDw8IDI7Ci0gICAgICAqcmEgPSBHRVRfSVdfRjFYNEwxN19BIChpbnNuKTsK LSAgICAgICppbW0gPSAwOwotICAgICAgKndiID0gR0VUX0lXX0YxWDRMMTdfV0IgKGluc24p OwotICAgICAgKmlkID0gR0VUX0lXX0YxWDRMMTdfSUQgKGluc24pOwotICAgICAgcmV0dXJu IDE7Ci0gICAgfQotICByZXR1cm4gMDsKLX0KLQotLyogTWF0Y2ggYW5kIGRpc2Fzc2VtYmxl IGEgUE9QLk4gb3IgTERXTSBpbnN0cnVjdGlvbi4KLSAgIFJldHVybnMgdHJ1ZSBvbiBzdWNj ZXNzLCBhbmQgZmlsbHMgaW4gdGhlIG9wZXJhbmQgcG9pbnRlcnMuICAqLwotCi1zdGF0aWMg aW50Ci1uaW9zMl9tYXRjaF9sZHdtICh1aW50MzJfdCBpbnNuLCBjb25zdCBzdHJ1Y3Qgbmlv czJfb3Bjb2RlICpvcCwKLQkJICB1bnNpZ25lZCBsb25nIG1hY2gsIHVuc2lnbmVkIGludCAq cmVnbGlzdCwKLQkJICBpbnQgKnJhLCBpbnQgKmltbSwgaW50ICp3YiwgaW50ICppZCwgaW50 ICpyZXQpCi17Ci0gIGludCBpc19yMiA9IChtYWNoID09IGJmZF9tYWNoX25pb3MycjIpOwot Ci0gIGlmICghaXNfcjIpCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UgaWYgKG9wLT5tYXRjaCA9 PSBNQVRDSF9SMl9QT1BfTikKLSAgICB7Ci0gICAgICAqcmVnbGlzdCA9IDEgPDwgMzE7Ci0g ICAgICBpZiAoR0VUX0lXX0w1STRYMV9GUCAoaW5zbikpCi0JKnJlZ2xpc3QgfD0gKDEgPDwg MjgpOwotICAgICAgaWYgKEdFVF9JV19MNUk0WDFfQ1MgKGluc24pKQotCXsKLQkgIGludCB2 YWwgPSBHRVRfSVdfTDVJNFgxX1JFR1JBTkdFIChpbnNuKTsKLQkgICpyZWdsaXN0IHw9IG5p b3MyX3IyX3JlZ19yYW5nZV9tYXBwaW5nc1t2YWxdOwotCX0KLSAgICAgICpyYSA9IE5JT1My X1NQX1JFR05VTTsKLSAgICAgICppbW0gPSBHRVRfSVdfTDVJNFgxX0lNTTQgKGluc24pIDw8 IDI7Ci0gICAgICAqd2IgPSAxOwotICAgICAgKmlkID0gMTsKLSAgICAgICpyZXQgPSAxOwot ICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICBlbHNlIGlmIChvcC0+bWF0Y2ggPT0gTUFUQ0hf UjJfTERXTSkKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBpbnQgcmF3bWFzayA9IEdFVF9JV19G MVg0TDE3X1JFR01BU0sgKGluc24pOwotICAgICAgaWYgKEdFVF9JV19GMVg0TDE3X1JTIChp bnNuKSkKLQl7Ci0JICAqcmVnbGlzdCA9ICgocmF3bWFzayA8PCAxNCkgJiAweDAwZmZjMDAw KTsKLQkgIGlmIChyYXdtYXNrICYgKDEgPDwgMTApKQotCSAgICAqcmVnbGlzdCB8PSAoMSA8 PCAyOCk7Ci0JICBpZiAocmF3bWFzayAmICgxIDw8IDExKSkKLQkgICAgKnJlZ2xpc3QgfD0g KDEgPDwgMzEpOwotCX0KLSAgICAgIGVsc2UKLQkqcmVnbGlzdCA9IHJhd21hc2sgPDwgMjsK LSAgICAgICpyYSA9IEdFVF9JV19GMVg0TDE3X0EgKGluc24pOwotICAgICAgKmltbSA9IDA7 Ci0gICAgICAqd2IgPSBHRVRfSVdfRjFYNEwxN19XQiAoaW5zbik7Ci0gICAgICAqaWQgPSBH RVRfSVdfRjFYNEwxN19JRCAoaW5zbik7Ci0gICAgICAqcmV0ID0gR0VUX0lXX0YxWDRMMTdf UEMgKGluc24pOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICByZXR1cm4gMDsKLX0KLQot LyogTWF0Y2ggYW5kIGRpc2Fzc2VtYmxlIGEgYnJhbmNoIGluc3RydWN0aW9uLCB3aXRoIChw b3RlbnRpYWxseSkKLSAgIDIgcmVnaXN0ZXIgb3BlcmFuZHMgYW5kIG9uZSBpbW1lZGlhdGUg b3BlcmFuZC4KLSAgIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBhbmQgZmlsbHMgaW4gdGhl IG9wZXJhbmQgcG9pbnRlcnMuICAqLwotCi1lbnVtIGJyYW5jaF9jb25kaXRpb24gewotICBi cmFuY2hfbm9uZSwKLSAgYnJhbmNoX2VxLAotICBicmFuY2hfbmUsCi0gIGJyYW5jaF9nZSwK LSAgYnJhbmNoX2dldSwKLSAgYnJhbmNoX2x0LAotICBicmFuY2hfbHR1Ci19OwotICAKLXN0 YXRpYyBpbnQKLW5pb3MyX21hdGNoX2JyYW5jaCAodWludDMyX3QgaW5zbiwgY29uc3Qgc3Ry dWN0IG5pb3MyX29wY29kZSAqb3AsCi0JCSAgICB1bnNpZ25lZCBsb25nIG1hY2gsIGludCAq cmEsIGludCAqcmIsIGludCAqaW1tLAotCQkgICAgZW51bSBicmFuY2hfY29uZGl0aW9uICpj b25kKQotewotICBpbnQgaXNfcjIgPSAobWFjaCA9PSBiZmRfbWFjaF9uaW9zMnIyKTsKLQot ICBpZiAoIWlzX3IyKQotICAgIHsKLSAgICAgIHN3aXRjaCAob3AtPm1hdGNoKQotCXsKLQlj YXNlIE1BVENIX1IxX0JSOgotCSAgKmNvbmQgPSBicmFuY2hfbm9uZTsKLQkgIGJyZWFrOwot CWNhc2UgTUFUQ0hfUjFfQkVROgotCSAgKmNvbmQgPSBicmFuY2hfZXE7Ci0JICBicmVhazsK LQljYXNlIE1BVENIX1IxX0JORToKLQkgICpjb25kID0gYnJhbmNoX25lOwotCSAgYnJlYWs7 Ci0JY2FzZSBNQVRDSF9SMV9CR0U6Ci0JICAqY29uZCA9IGJyYW5jaF9nZTsKLQkgIGJyZWFr OwotCWNhc2UgTUFUQ0hfUjFfQkdFVToKLQkgICpjb25kID0gYnJhbmNoX2dldTsKLQkgIGJy ZWFrOwotCWNhc2UgTUFUQ0hfUjFfQkxUOgotCSAgKmNvbmQgPSBicmFuY2hfbHQ7Ci0JICBi cmVhazsKLQljYXNlIE1BVENIX1IxX0JMVFU6Ci0JICAqY29uZCA9IGJyYW5jaF9sdHU7Ci0J ICBicmVhazsKLQlkZWZhdWx0OgotCSAgcmV0dXJuIDA7Ci0JfQotICAgICAgKmltbSA9IChz aWduZWQpIChHRVRfSVdfSV9JTU0xNiAoaW5zbikgPDwgMTYpID4+IDE2OwotICAgICAgKnJh ID0gR0VUX0lXX0lfQSAoaW5zbik7Ci0gICAgICAqcmIgPSBHRVRfSVdfSV9CIChpbnNuKTsK LSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHN3aXRjaCAo b3AtPm1hdGNoKQotCXsKLQljYXNlIE1BVENIX1IyX0JSX046Ci0JICAqY29uZCA9IGJyYW5j aF9ub25lOwotCSAgKnJhID0gTklPUzJfWl9SRUdOVU07Ci0JICAqcmIgPSBOSU9TMl9aX1JF R05VTTsKLQkgICppbW0gPSAoc2lnbmVkKSAoKEdFVF9JV19JMTBfSU1NMTAgKGluc24pIDw8 IDEpIDw8IDIxKSA+PiAyMTsKLQkgIHJldHVybiAxOwotCWNhc2UgTUFUQ0hfUjJfQkVRWl9O OgotCSAgKmNvbmQgPSBicmFuY2hfZXE7Ci0JICAqcmEgPSBuaW9zMl9yMl9yZWczX21hcHBp bmdzW0dFVF9JV19UMUk3X0EzIChpbnNuKV07Ci0JICAqcmIgPSBOSU9TMl9aX1JFR05VTTsK LQkgICppbW0gPSAoc2lnbmVkKSAoKEdFVF9JV19UMUk3X0lNTTcgKGluc24pIDw8IDEpIDw8 IDI0KSA+PiAyNDsKLQkgIHJldHVybiAxOwotCWNhc2UgTUFUQ0hfUjJfQk5FWl9OOgotCSAg KmNvbmQgPSBicmFuY2hfbmU7Ci0JICAqcmEgPSBuaW9zMl9yMl9yZWczX21hcHBpbmdzW0dF VF9JV19UMUk3X0EzIChpbnNuKV07Ci0JICAqcmIgPSBOSU9TMl9aX1JFR05VTTsKLQkgICpp bW0gPSAoc2lnbmVkKSAoKEdFVF9JV19UMUk3X0lNTTcgKGluc24pIDw8IDEpIDw8IDI0KSA+ PiAyNDsKLQkgIHJldHVybiAxOwotCWNhc2UgTUFUQ0hfUjJfQlI6Ci0JICAqY29uZCA9IGJy YW5jaF9ub25lOwotCSAgYnJlYWs7Ci0JY2FzZSBNQVRDSF9SMl9CRVE6Ci0JICAqY29uZCA9 IGJyYW5jaF9lcTsKLQkgIGJyZWFrOwotCWNhc2UgTUFUQ0hfUjJfQk5FOgotCSAgKmNvbmQg PSBicmFuY2hfbmU7Ci0JICBicmVhazsKLQljYXNlIE1BVENIX1IyX0JHRToKLQkgICpjb25k ID0gYnJhbmNoX2dlOwotCSAgYnJlYWs7Ci0JY2FzZSBNQVRDSF9SMl9CR0VVOgotCSAgKmNv bmQgPSBicmFuY2hfZ2V1OwotCSAgYnJlYWs7Ci0JY2FzZSBNQVRDSF9SMl9CTFQ6Ci0JICAq Y29uZCA9IGJyYW5jaF9sdDsKLQkgIGJyZWFrOwotCWNhc2UgTUFUQ0hfUjJfQkxUVToKLQkg ICpjb25kID0gYnJhbmNoX2x0dTsKLQkgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICByZXR1cm4g MDsKLQl9Ci0gICAgICAqcmEgPSBHRVRfSVdfRjJJMTZfQSAoaW5zbik7Ci0gICAgICAqcmIg PSBHRVRfSVdfRjJJMTZfQiAoaW5zbik7Ci0gICAgICAqaW1tID0gKHNpZ25lZCkgKEdFVF9J V19GMkkxNl9JTU0xNiAoaW5zbikgPDwgMTYpID4+IDE2OwotICAgICAgcmV0dXJuIDE7Ci0g ICAgfQotICByZXR1cm4gMDsKLX0KLQotLyogTWF0Y2ggYW5kIGRpc2Fzc2VtYmxlIGEgZGly ZWN0IGp1bXAgaW5zdHJ1Y3Rpb24sIHdpdGggYW4KLSAgIHVuc2lnbmVkIG9wZXJhbmQuICBS ZXR1cm5zIHRydWUgb24gc3VjY2VzcywgYW5kIGZpbGxzIGluIHRoZSBvcGVyYW5kCi0gICBw b2ludGVyLiAgKi8KLQotc3RhdGljIGludAotbmlvczJfbWF0Y2hfam1waSAodWludDMyX3Qg aW5zbiwgY29uc3Qgc3RydWN0IG5pb3MyX29wY29kZSAqb3AsCi0JCSAgdW5zaWduZWQgbG9u ZyBtYWNoLCB1bnNpZ25lZCBpbnQgKnVpbW0pCi17Ci0gIGludCBpc19yMiA9IChtYWNoID09 IGJmZF9tYWNoX25pb3MycjIpOwotCi0gIGlmICghaXNfcjIgJiYgb3AtPm1hdGNoID09IE1B VENIX1IxX0pNUEkpCi0gICAgewotICAgICAgKnVpbW0gPSBHRVRfSVdfSl9JTU0yNiAoaW5z bikgPDwgMjsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgZWxzZSBpZiAoIWlzX3IyKQot ICAgIHJldHVybiAwOwotICBlbHNlIGlmIChvcC0+bWF0Y2ggPT0gTUFUQ0hfUjJfSk1QSSkK LSAgICB7Ci0gICAgICAqdWltbSA9IEdFVF9JV19MMjZfSU1NMjYgKGluc24pIDw8IDI7Ci0g ICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIHJldHVybiAwOwotfQotCi0vKiBNYXRjaCBhbmQg ZGlzYXNzZW1ibGUgYSBkaXJlY3QgY2FsbCBpbnN0cnVjdGlvbiwgd2l0aCBhbgotICAgdW5z aWduZWQgb3BlcmFuZC4gIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBhbmQgZmlsbHMgaW4g dGhlIG9wZXJhbmQKLSAgIHBvaW50ZXIuICAqLwotCi1zdGF0aWMgaW50Ci1uaW9zMl9tYXRj aF9jYWxsaSAodWludDMyX3QgaW5zbiwgY29uc3Qgc3RydWN0IG5pb3MyX29wY29kZSAqb3As Ci0JCSAgIHVuc2lnbmVkIGxvbmcgbWFjaCwgdW5zaWduZWQgaW50ICp1aW1tKQotewotICBp bnQgaXNfcjIgPSAobWFjaCA9PSBiZmRfbWFjaF9uaW9zMnIyKTsKLQotICBpZiAoIWlzX3Iy ICYmIG9wLT5tYXRjaCA9PSBNQVRDSF9SMV9DQUxMKQotICAgIHsKLSAgICAgICp1aW1tID0g R0VUX0lXX0pfSU1NMjYgKGluc24pIDw8IDI7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0g IGVsc2UgaWYgKCFpc19yMikKLSAgICByZXR1cm4gMDsKLSAgZWxzZSBpZiAob3AtPm1hdGNo ID09IE1BVENIX1IyX0NBTEwpCi0gICAgewotICAgICAgKnVpbW0gPSBHRVRfSVdfTDI2X0lN TTI2IChpbnNuKSA8PCAyOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICByZXR1cm4gMDsK LX0KLQotLyogTWF0Y2ggYW5kIGRpc2Fzc2VtYmxlIGFuIGluZGlyZWN0IGp1bXAgaW5zdHJ1 Y3Rpb24sIHdpdGggYQotICAgKHBvc3NpYmx5IGltcGxpY2l0KSByZWdpc3RlciBvcGVyYW5k LiAgUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGFuZCBmaWxscwotICAgaW4gdGhlIG9wZXJh bmQgcG9pbnRlci4gICovCi0KLXN0YXRpYyBpbnQKLW5pb3MyX21hdGNoX2ptcHIgKHVpbnQz Ml90IGluc24sIGNvbnN0IHN0cnVjdCBuaW9zMl9vcGNvZGUgKm9wLAotCQkgIHVuc2lnbmVk IGxvbmcgbWFjaCwgaW50ICpyYSkKLXsKLSAgaW50IGlzX3IyID0gKG1hY2ggPT0gYmZkX21h Y2hfbmlvczJyMik7Ci0KLSAgaWYgKCFpc19yMikKLSAgICBzd2l0Y2ggKG9wLT5tYXRjaCkK LSAgICAgIHsKLSAgICAgIGNhc2UgTUFUQ0hfUjFfSk1QOgotCSpyYSA9IEdFVF9JV19JX0Eg KGluc24pOwotCXJldHVybiAxOwotICAgICAgY2FzZSBNQVRDSF9SMV9SRVQ6Ci0JKnJhID0g TklPUzJfUkFfUkVHTlVNOwotCXJldHVybiAxOwotICAgICAgY2FzZSBNQVRDSF9SMV9FUkVU OgotCSpyYSA9IE5JT1MyX0VBX1JFR05VTTsKLQlyZXR1cm4gMTsKLSAgICAgIGNhc2UgTUFU Q0hfUjFfQlJFVDoKLQkqcmEgPSBOSU9TMl9CQV9SRUdOVU07Ci0JcmV0dXJuIDE7Ci0gICAg ICBkZWZhdWx0OgotCXJldHVybiAwOwotICAgICAgfQotICBlbHNlCi0gICAgc3dpdGNoIChv cC0+bWF0Y2gpCi0gICAgICB7Ci0gICAgICBjYXNlIE1BVENIX1IyX0pNUDoKLQkqcmEgPSBH RVRfSVdfRjJJMTZfQSAoaW5zbik7Ci0JcmV0dXJuIDE7Ci0gICAgICBjYXNlIE1BVENIX1Iy X0pNUFJfTjoKLQkqcmEgPSBHRVRfSVdfRjFYMV9BIChpbnNuKTsKLQlyZXR1cm4gMTsKLSAg ICAgIGNhc2UgTUFUQ0hfUjJfUkVUOgotICAgICAgY2FzZSBNQVRDSF9SMl9SRVRfTjoKLQkq cmEgPSBOSU9TMl9SQV9SRUdOVU07Ci0JcmV0dXJuIDE7Ci0gICAgICBjYXNlIE1BVENIX1Iy X0VSRVQ6Ci0JKnJhID0gTklPUzJfRUFfUkVHTlVNOwotCXJldHVybiAxOwotICAgICAgY2Fz ZSBNQVRDSF9SMl9CUkVUOgotCSpyYSA9IE5JT1MyX0JBX1JFR05VTTsKLQlyZXR1cm4gMTsK LSAgICAgIGRlZmF1bHQ6Ci0JcmV0dXJuIDA7Ci0gICAgICB9Ci0gIHJldHVybiAwOwotfQot Ci0vKiBNYXRjaCBhbmQgZGlzYXNzZW1ibGUgYW4gaW5kaXJlY3QgY2FsbCBpbnN0cnVjdGlv biwgd2l0aCBhIHJlZ2lzdGVyCi0gICBvcGVyYW5kLiAgUmV0dXJucyB0cnVlIG9uIHN1Y2Nl c3MsIGFuZCBmaWxscyBpbiB0aGUgb3BlcmFuZCBwb2ludGVyLiAgKi8KLQotc3RhdGljIGlu dAotbmlvczJfbWF0Y2hfY2FsbHIgKHVpbnQzMl90IGluc24sIGNvbnN0IHN0cnVjdCBuaW9z Ml9vcGNvZGUgKm9wLAotCQkgICB1bnNpZ25lZCBsb25nIG1hY2gsIGludCAqcmEpCi17Ci0g IGludCBpc19yMiA9IChtYWNoID09IGJmZF9tYWNoX25pb3MycjIpOwotCi0gIGlmICghaXNf cjIgJiYgb3AtPm1hdGNoID09IE1BVENIX1IxX0NBTExSKQotICAgIHsKLSAgICAgICpyYSA9 IEdFVF9JV19JX0EgKGluc24pOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICBlbHNlIGlm ICghaXNfcjIpCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UgaWYgKG9wLT5tYXRjaCA9PSBNQVRD SF9SMl9DQUxMUikKLSAgICB7Ci0gICAgICAqcmEgPSBHRVRfSVdfRjJJMTZfQSAoaW5zbik7 Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIGVsc2UgaWYgKG9wLT5tYXRjaCA9PSBNQVRD SF9SMl9DQUxMUl9OKQotICAgIHsKLSAgICAgICpyYSA9IEdFVF9JV19GMVgxX0EgKGluc24p OwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICByZXR1cm4gMDsKLX0KLQotLyogTWF0Y2gg YW5kIGRpc2Fzc2VtYmxlIGEgYnJlYWsgaW5zdHJ1Y3Rpb24sIHdpdGggYW4gdW5zaWduZWQg b3BlcmFuZC4KLSAgIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBhbmQgZmlsbHMgaW4gdGhl IG9wZXJhbmQgcG9pbnRlci4gICovCi0KLXN0YXRpYyBpbnQKLW5pb3MyX21hdGNoX2JyZWFr ICh1aW50MzJfdCBpbnNuLCBjb25zdCBzdHJ1Y3QgbmlvczJfb3Bjb2RlICpvcCwKLQkJICB1 bnNpZ25lZCBsb25nIG1hY2gsIHVuc2lnbmVkIGludCAqdWltbSkKLXsKLSAgaW50IGlzX3Iy ID0gKG1hY2ggPT0gYmZkX21hY2hfbmlvczJyMik7Ci0KLSAgaWYgKCFpc19yMiAmJiBvcC0+ bWF0Y2ggPT0gTUFUQ0hfUjFfQlJFQUspCi0gICAgewotICAgICAgKnVpbW0gPSBHRVRfSVdf Ul9JTU01IChpbnNuKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgZWxzZSBpZiAoIWlz X3IyKQotICAgIHJldHVybiAwOwotICBlbHNlIGlmIChvcC0+bWF0Y2ggPT0gTUFUQ0hfUjJf QlJFQUspCi0gICAgewotICAgICAgKnVpbW0gPSBHRVRfSVdfRjNYNkw1X0lNTTUgKGluc24p OwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICBlbHNlIGlmIChvcC0+bWF0Y2ggPT0gTUFU Q0hfUjJfQlJFQUtfTikKLSAgICB7Ci0gICAgICAqdWltbSA9IEdFVF9JV19YMkw1X0lNTTUg KGluc24pOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICByZXR1cm4gMDsKLX0KLQotLyog TWF0Y2ggYW5kIGRpc2Fzc2VtYmxlIGEgdHJhcCBpbnN0cnVjdGlvbiwgd2l0aCBhbiB1bnNp Z25lZCBvcGVyYW5kLgotICAgUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGFuZCBmaWxscyBp biB0aGUgb3BlcmFuZCBwb2ludGVyLiAgKi8KLQotc3RhdGljIGludAotbmlvczJfbWF0Y2hf dHJhcCAodWludDMyX3QgaW5zbiwgY29uc3Qgc3RydWN0IG5pb3MyX29wY29kZSAqb3AsCi0J CSAgdW5zaWduZWQgbG9uZyBtYWNoLCB1bnNpZ25lZCBpbnQgKnVpbW0pCi17Ci0gIGludCBp c19yMiA9IChtYWNoID09IGJmZF9tYWNoX25pb3MycjIpOwotCi0gIGlmICghaXNfcjIgJiYg b3AtPm1hdGNoID09IE1BVENIX1IxX1RSQVApCi0gICAgewotICAgICAgKnVpbW0gPSBHRVRf SVdfUl9JTU01IChpbnNuKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgZWxzZSBpZiAo IWlzX3IyKQotICAgIHJldHVybiAwOwotICBlbHNlIGlmIChvcC0+bWF0Y2ggPT0gTUFUQ0hf UjJfVFJBUCkKLSAgICB7Ci0gICAgICAqdWltbSA9IEdFVF9JV19GM1g2TDVfSU1NNSAoaW5z bik7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIGVsc2UgaWYgKG9wLT5tYXRjaCA9PSBN QVRDSF9SMl9UUkFQX04pCi0gICAgewotICAgICAgKnVpbW0gPSBHRVRfSVdfWDJMNV9JTU01 IChpbnNuKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8q IEhlbHBlciBmdW5jdGlvbiB0byBpZGVudGlmeSB3aGVuIHdlJ3JlIGluIGEgZnVuY3Rpb24g ZXBpbG9ndWU7Ci0gICB0aGF0IGlzLCB0aGUgcGFydCBvZiB0aGUgZnVuY3Rpb24gZnJvbSB0 aGUgcG9pbnQgYXQgd2hpY2ggdGhlCi0gICBzdGFjayBhZGp1c3RtZW50cyBhcmUgbWFkZSwg dG8gdGhlIHJldHVybiBvciBzaWJjYWxsLgotICAgTm90ZSB0aGF0IHdlIG1heSBoYXZlIHNl dmVyYWwgc3RhY2sgYWRqdXN0bWVudCBpbnN0cnVjdGlvbnMsIGFuZAotICAgdGhpcyBmdW5j dGlvbiBuZWVkcyB0byB0ZXN0IHdoZXRoZXIgdGhlIHN0YWNrIHRlYXJkb3duIGhhcyBhbHJl YWR5Ci0gICBzdGFydGVkIGJlZm9yZSBjdXJyZW50X3BjLCBub3Qgd2hldGhlciBpdCBoYXMg Y29tcGxldGVkLiAgKi8KLQotc3RhdGljIGludAotbmlvczJfaW5fZXBpbG9ndWVfcCAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gsCi0JCSAgICAgQ09SRV9BRERSIGN1cnJlbnRfcGMsCi0J CSAgICAgQ09SRV9BRERSIHN0YXJ0X3BjKQotewotICB1bnNpZ25lZCBsb25nIG1hY2ggPSBn ZGJhcmNoX2JmZF9hcmNoX2luZm8gKGdkYmFyY2gpLT5tYWNoOwotICBpbnQgaXNfcjIgPSAo bWFjaCA9PSBiZmRfbWFjaF9uaW9zMnIyKTsKLSAgLyogTWF4aW11bSBudW1iZXIgb2YgcG9z c2libHktZXBpbG9ndWUgaW5zdHJ1Y3Rpb25zIHRvIGNoZWNrLgotICAgICBOb3RlIHRoYXQg dGhpcyBudW1iZXIgc2hvdWxkIG5vdCBiZSB0b28gbGFyZ2UsIGVsc2Ugd2UgY2FuCi0gICAg IHBvdGVudGlhbGx5IGVuZCB1cCBpdGVyYXRpbmcgdGhyb3VnaCB1bm1hcHBlZCBtZW1vcnku ICAqLwotICBpbnQgbmluc25zLCBtYXhfaW5zbnMgPSA1OwotICB1bnNpZ25lZCBpbnQgaW5z bjsKLSAgY29uc3Qgc3RydWN0IG5pb3MyX29wY29kZSAqb3AgPSBOVUxMOwotICB1bnNpZ25l ZCBpbnQgdWltbTsKLSAgaW50IGltbTsKLSAgaW50IHdiLCBpZCwgcmV0OwotICBpbnQgcmEs IHJiLCByYzsKLSAgZW51bSBicmFuY2hfY29uZGl0aW9uIGNvbmQ7Ci0gIENPUkVfQUREUiBw YzsKLQotICAvKiBUaGVyZSBoYXMgdG8gYmUgYSBwcmV2aW91cyBpbnN0cnVjdGlvbiBpbiB0 aGUgZnVuY3Rpb24uICAqLwotICBpZiAoY3VycmVudF9wYyA8PSBzdGFydF9wYykKLSAgICBy ZXR1cm4gMDsKLQotICAvKiBGaW5kIHRoZSBwcmV2aW91cyBpbnN0cnVjdGlvbiBiZWZvcmUg Y3VycmVudF9wYy4gIEZvciBSMiwgaXQgbWlnaHQKLSAgICAgYmUgZWl0aGVyIGEgMTYtYml0 IG9yIDMyLWJpdCBpbnN0cnVjdGlvbjsgdGhlIG9ubHkgd2F5IHRvIGtub3cgZm9yCi0gICAg IHN1cmUgaXMgdG8gc2NhbiB0aHJvdWdoIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVu Y3Rpb24sCi0gICAgIGRpc2Fzc2VtYmxpbmcgYXMgd2UgZ28uICAqLwotICBpZiAoaXNfcjIp Ci0gICAgZm9yIChwYyA9IHN0YXJ0X3BjOyA7ICkKLSAgICAgIHsKLQlvcCA9IG5pb3MyX2Zl dGNoX2luc24gKGdkYmFyY2gsIHBjLCAmaW5zbik7Ci0JaWYgKG9wID09IE5VTEwpCi0JICBy ZXR1cm4gMDsKLQlpZiAocGMgKyBvcC0+c2l6ZSA8IGN1cnJlbnRfcGMpCi0JICBwYyArPSBv cC0+c2l6ZTsKLQllbHNlCi0JICBicmVhazsKLQkvKiBXZSBjYW4gc2tpcCBvdmVyIGluc25z IHRvIGEgZm9yd2FyZCBicmFuY2ggdGFyZ2V0LiAgU2luY2UKLQkgICB0aGUgYnJhbmNoIG9m ZnNldCBpcyByZWxhdGl2ZSB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbiwKLQkgICBpdCdzIGNv cnJlY3QgdG8gZG8gdGhpcyBhZnRlciBpbmNyZW1lbnRpbmcgdGhlIHBjIGFib3ZlLiAgKi8K LQlpZiAobmlvczJfbWF0Y2hfYnJhbmNoIChpbnNuLCBvcCwgbWFjaCwgJnJhLCAmcmIsICZp bW0sICZjb25kKQotCSAgICAmJiBpbW0gPiAwCi0JICAgICYmIHBjICsgaW1tIDwgY3VycmVu dF9wYykKLQkgIHBjICs9IGltbTsKLSAgICAgIH0KLSAgLyogT3RoZXJ3aXNlIGp1c3QgZ28g YmFjayB0byB0aGUgcHJldmlvdXMgMzItYml0IGluc24uICAqLwotICBlbHNlCi0gICAgcGMg PSBjdXJyZW50X3BjIC0gTklPUzJfT1BDT0RFX1NJWkU7Ci0KLSAgLyogQmVnaW5uaW5nIHdp dGggdGhlIHByZXZpb3VzIGluc3RydWN0aW9uIHdlIGp1c3QgbG9jYXRlZCwgY2hlY2sgd2hl dGhlcgotICAgICB3ZSBhcmUgaW4gYSBzZXF1ZW5jZSBvZiBhdCBsZWFzdCBvbmUgc3RhY2sg YWRqdXN0bWVudCBpbnN0cnVjdGlvbi4KLSAgICAgUG9zc2libGUgaW5zdHJ1Y3Rpb25zIGhl cmUgaW5jbHVkZToKLQkgQURESSBzcCwgc3AsIG4KLQkgQUREIHNwLCBzcCwgcm4KLQkgTERX IHNwLCBuKHNwKQotCSBTUElOQ0kuTiBuCi0JIExEV1NQLk4gc3AsIG4oc3ApCi0JIExEV00g e3JlZ2xpc3R9LCAoc3ApKyssIHdiICovCi0gIGZvciAobmluc25zID0gMDsgbmluc25zIDwg bWF4X2luc25zOyBuaW5zbnMrKykKLSAgICB7Ci0gICAgICBpbnQgb2sgPSAwOwotCi0gICAg ICAvKiBGZXRjaCB0aGUgaW5zbiBhdCBwYy4gICovCi0gICAgICBvcCA9IG5pb3MyX2ZldGNo X2luc24gKGdkYmFyY2gsIHBjLCAmaW5zbik7Ci0gICAgICBpZiAob3AgPT0gTlVMTCkKLQly ZXR1cm4gMDsKLSAgICAgIHBjICs9IG9wLT5zaXplOwotCi0gICAgICAvKiBXYXMgaXQgYSBz dGFjayBhZGp1c3RtZW50PyAgKi8KLSAgICAgIGlmIChuaW9zMl9tYXRjaF9hZGRpIChpbnNu LCBvcCwgbWFjaCwgJnJhLCAmcmIsICZpbW0pKQotCW9rID0gKHJiID09IE5JT1MyX1NQX1JF R05VTSk7Ci0gICAgICBlbHNlIGlmIChuaW9zMl9tYXRjaF9hZGQgKGluc24sIG9wLCBtYWNo LCAmcmEsICZyYiwgJnJjKSkKLQlvayA9IChyYyA9PSBOSU9TMl9TUF9SRUdOVU0pOwotICAg ICAgZWxzZSBpZiAobmlvczJfbWF0Y2hfbGR3IChpbnNuLCBvcCwgbWFjaCwgJnJhLCAmcmIs ICZpbW0pKQotCW9rID0gKHJiID09IE5JT1MyX1NQX1JFR05VTSk7Ci0gICAgICBlbHNlIGlm IChuaW9zMl9tYXRjaF9sZHdtIChpbnNuLCBvcCwgbWFjaCwgJnVpbW0sICZyYSwKLQkJCQkg JmltbSwgJndiLCAmcmV0LCAmaWQpKQotCW9rID0gKHJhID09IE5JT1MyX1NQX1JFR05VTSAm JiB3YiAmJiBpZCk7Ci0gICAgICBpZiAoIW9rKQotCWJyZWFrOwotICAgIH0KLQotICAvKiBO byBzdGFjayBhZGp1c3RtZW50cyBmb3VuZC4gICovCi0gIGlmIChuaW5zbnMgPT0gMCkKLSAg ICByZXR1cm4gMDsKLQotICAvKiBXZSBmb3VuZCBtb3JlIHN0YWNrIGFkanVzdG1lbnRzIHRo YW4gd2UgZXhwZWN0IEdDQyB0byBiZSBnZW5lcmF0aW5nLgotICAgICBTaW5jZSBpdCBsb29r cyBsaWtlIGEgc3RhY2sgdW53aW5kIG1pZ2h0IGJlIGluIHByb2dyZXNzIHRlbGwgR0RCIHRv Ci0gICAgIHRyZWF0IGl0IGFzIHN1Y2guICAqLwotICBpZiAobmluc25zID09IG1heF9pbnNu cykKLSAgICByZXR1cm4gMTsKLQotICAvKiBUaGUgbmV4dCBpbnN0cnVjdGlvbiBmb2xsb3dp bmcgdGhlIHN0YWNrIGFkanVzdG1lbnRzIG11c3QgYmUgYQotICAgICByZXR1cm4sIGp1bXAs IG9yIHVuY29uZGl0aW9uYWwgYnJhbmNoLCBvciBhIENEWCBwb3AubiBvciBsZHdtCi0gICAg IHRoYXQgZG9lcyBhbiBpbXBsaWNpdCByZXR1cm4uICAqLwotICBpZiAobmlvczJfbWF0Y2hf am1wciAoaW5zbiwgb3AsIG1hY2gsICZyYSkKLSAgICAgIHx8IG5pb3MyX21hdGNoX2ptcGkg KGluc24sIG9wLCBtYWNoLCAmdWltbSkKLSAgICAgIHx8IChuaW9zMl9tYXRjaF9sZHdtIChp bnNuLCBvcCwgbWFjaCwgJnVpbW0sICZyYSwgJmltbSwgJndiLCAmaWQsICZyZXQpCi0JICAm JiByZXQpCi0gICAgICB8fCAobmlvczJfbWF0Y2hfYnJhbmNoIChpbnNuLCBvcCwgbWFjaCwg JnJhLCAmcmIsICZpbW0sICZjb25kKQotCSAgJiYgY29uZCA9PSBicmFuY2hfbm9uZSkpCi0g ICAgcmV0dXJuIDE7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIEltcGxlbWVudCB0aGUgc3Rh Y2tfZnJhbWVfZGVzdHJveWVkX3AgZ2RiYXJjaCBtZXRob2QuICAqLwotCi1zdGF0aWMgaW50 Ci1uaW9zMl9zdGFja19mcmFtZV9kZXN0cm95ZWRfcCAoc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2gsIENPUkVfQUREUiBwYykKLXsKLSAgQ09SRV9BRERSIGZ1bmNfYWRkcjsKLQotICBpZiAo ZmluZF9wY19wYXJ0aWFsX2Z1bmN0aW9uIChwYywgTlVMTCwgJmZ1bmNfYWRkciwgTlVMTCkp Ci0gICAgcmV0dXJuIG5pb3MyX2luX2VwaWxvZ3VlX3AgKGdkYmFyY2gsIHBjLCBmdW5jX2Fk ZHIpOwotCi0gIHJldHVybiAwOwotfQotCi0vKiBEbyBwcm9sb2d1ZSBhbmFseXNpcywgcmV0 dXJuaW5nIHRoZSBQQyBvZiB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24KLSAgIGFmdGVyIHRoZSBm dW5jdGlvbiBwcm9sb2d1ZS4gIEFzc3VtZXMgQ0FDSEUgaGFzIGFscmVhZHkgYmVlbgotICAg aW5pdGlhbGl6ZWQuICBUSElTX0ZSQU1FIGNhbiBiZSBudWxsLCBpbiB3aGljaCBjYXNlIHdl IGFyZSBvbmx5Ci0gICBpbnRlcmVzdGVkIGluIHNraXBwaW5nIHRoZSBwcm9sb2d1ZS4gIE90 aGVyd2lzZSBDQUNIRSBpcyBmaWxsZWQgaW4KLSAgIGZyb20gdGhlIGZyYW1lIGluZm9ybWF0 aW9uLgotCi0gICBUaGUgcHJvbG9ndWUgbWF5IGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBw YXJ0czoKLSAgICAgMSkgUHJvZmlsaW5nIGluc3RydW1lbnRhdGlvbi4gIEZvciBub24tUElD IGNvZGUgaXQgbG9va3MgbGlrZToKLQkgIG1vdgkgcjgsIHJhCi0JICBjYWxsCSBtY291bnQK LQkgIG1vdgkgcmEsIHI4Ci0KLSAgICAgMikgQSBzdGFjayBhZGp1c3RtZW50IGFuZCBzYXZl IG9mIFI0LVI3IGZvciB2YXJhcmdzIGZ1bmN0aW9ucy4KLQlGb3IgUjIgQ0RYIHRoaXMgaXMg dHlwaWNhbGx5IGhhbmRsZWQgd2l0aCBhIFNUV00sIG90aGVyd2lzZQotCXRoaXMgaXMgdHlw aWNhbGx5IG1lcmdlZCB3aXRoIGl0ZW0gMy4KLQotICAgICAzKSBBIHN0YWNrIGFkanVzdG1l bnQgYW5kIHNhdmUgb2YgdGhlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMuCi0JRm9yIFIyIENE WCB0aGVzZSBhcmUgdHlwaWNhbGx5IGhhbmRsZWQgd2l0aCBhIFBVU0guTiBvciBTVFdNLAot CW90aGVyd2lzZSBhcyBhbiBleHBsaWNpdCBTUCBkZWNyZW1lbnQgYW5kIGluZGl2aWR1YWwg cmVnaXN0ZXIKLQlzYXZlcy4KLQotCVRoZXJlIG1heSBhbHNvIGJlIGEgc3RhY2sgc3dpdGNo IGhlcmUgaW4gYW4gZXhjZXB0aW9uIGhhbmRsZXIKLQlpbiBwbGFjZSBvZiBhIHN0YWNrIGFk anVzdG1lbnQuICBJdCBsb29rcyBsaWtlOgotCSAgbW92aGkgIHJ4LCAlaGlhZGoobmV3c3Rh Y2spCi0JICBhZGRoaSAgcngsIHJ4LCAlbG8obmV3c3RhY2spCi0JICBzdHcgICAgc3AsIGNv bnN0YW50KHJ4KQotCSAgbW92ICAgIHNwLCByeAotCi0gICAgIDQpIEEgZnJhbWUgcG9pbnRl ciBzYXZlLCB3aGljaCBjYW4gYmUgZWl0aGVyIGEgTU9WIG9yIEFEREkuCi0KLSAgICAgNSkg QSBmdXJ0aGVyIHN0YWNrIHBvaW50ZXIgYWRqdXN0bWVudC4gIFRoaXMgaXMgbm9ybWFsbHkg aW5jbHVkZWQKLQlhZGp1c3RtZW50IGluIHN0ZXAgMyB1bmxlc3MgdGhlIHRvdGFsIGFkanVz dG1lbnQgaXMgdG9vIGxhcmdlCi0JdG8gYmUgZG9uZSBpbiBvbmUgc3RlcC4KLQotICAgICA3 KSBBIHN0YWNrIG92ZXJmbG93IGNoZWNrLCB3aGljaCBjYW4gdGFrZSBlaXRoZXIgb2YgdGhl c2UgZm9ybXM6Ci0JICBiZ2V1ICAgc3AsIHJ4LCArOAotCSAgdHJhcCAgMwotCW9yCi0JICBi bHR1ICAgc3AsIHJ4LCAuTHN0YWNrX292ZXJmbG93Ci0JICAuLi4KLQkuTHN0YWNrX292ZXJm bG93OgotCSAgdHJhcCAgMwotCSAgCi0JT2xkZXIgdmVyc2lvbnMgb2YgR0NDIGVtaXR0ZWQg ImJyZWFrIDMiIGluc3RlYWQgb2YgInRyYXAgMyIgaGVyZSwKLQlzbyB3ZSBjaGVjayBmb3Ig Ym90aCBjYXNlcy4KLQotCU9sZGVyIEdDQyB2ZXJzaW9ucyBlbWl0dGVkIHN0YWNrIG92ZXJm bG93IGNoZWNrcyBhZnRlciB0aGUgU1AKLQlhZGp1c3RtZW50cyBpbiBib3RoIHN0ZXBzIDMg YW5kIDQuICBTdGFydGluZyB3aXRoIEdDQyA2LCB0aGVyZSBpcwotCWF0IG1vc3Qgb25lIG92 ZXJmbG93IGNoZWNrLCB3aGljaCBpcyBwbGFjZWQgYmVmb3JlIHRoZSBmaXJzdAotCXN0YWNr IGFkanVzdG1lbnQgZm9yIFIyIENEWCBhbmQgYWZ0ZXIgdGhlIGZpcnN0IHN0YWNrIGFkanVz dG1lbnQKLQlvdGhlcndpc2UuCi0KLSAgICBUaGUgcHJvbG9ndWUgaW5zdHJ1Y3Rpb25zIG1h eSBiZSBjb21iaW5lZCBvciBpbnRlcmxlYXZlZCB3aXRoIG90aGVyCi0gICAgaW5zdHJ1Y3Rp b25zLgotCi0gICAgVG8gY29wZSB3aXRoIGFsbCB0aGlzIHZhcmlhYmlsaXR5IHdlIGRlY29k ZSBhbGwgdGhlIGluc3RydWN0aW9ucwotICAgIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwcm9s b2d1ZSB1bnRpbCB3ZSBoaXQgYW4gaW5zdHJ1Y3Rpb24gdGhhdAotICAgIGNhbm5vdCBwb3Nz aWJseSBiZSBhIHByb2xvZ3VlIGluc3RydWN0aW9uLCBzdWNoIGFzIGEgYnJhbmNoLCBjYWxs LAotICAgIHJldHVybiwgb3IgZXBpbG9ndWUgaW5zdHJ1Y3Rpb24uICBUaGUgcHJvbG9ndWUg aXMgY29uc2lkZXJlZCB0byBlbmQKLSAgICBhdCB0aGUgbGFzdCBpbnN0cnVjdGlvbiB0aGF0 IGNhbiBkZWZpbml0ZWx5IGJlIGNvbnNpZGVyZWQgYQotICAgIHByb2xvZ3VlIGluc3RydWN0 aW9uLiAgKi8KLQotc3RhdGljIENPUkVfQUREUgotbmlvczJfYW5hbHl6ZV9wcm9sb2d1ZSAo c3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGNvbnN0IENPUkVfQUREUiBzdGFydF9wYywKLQkJ CWNvbnN0IENPUkVfQUREUiBjdXJyZW50X3BjLAotCQkJc3RydWN0IG5pb3MyX3Vud2luZF9j YWNoZSAqY2FjaGUsCi0JCQljb25zdCBmcmFtZV9pbmZvX3B0ciAmdGhpc19mcmFtZSkKLXsK LSAgLyogTWF4aW11bSBudW1iZXIgb2YgcG9zc2libHktcHJvbG9ndWUgaW5zdHJ1Y3Rpb25z IHRvIGNoZWNrLgotICAgICBOb3RlIHRoYXQgdGhpcyBudW1iZXIgc2hvdWxkIG5vdCBiZSB0 b28gbGFyZ2UsIGVsc2Ugd2UgY2FuCi0gICAgIHBvdGVudGlhbGx5IGVuZCB1cCBpdGVyYXRp bmcgdGhyb3VnaCB1bm1hcHBlZCBtZW1vcnkuICAqLwotICBpbnQgbmluc25zLCBtYXhfaW5z bnMgPSA1MDsKLSAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVf b3JkZXIgKGdkYmFyY2gpOwotICB1bnNpZ25lZCBsb25nIG1hY2ggPSBnZGJhcmNoX2JmZF9h cmNoX2luZm8gKGdkYmFyY2gpLT5tYWNoOwotCi0gIC8qIERvZXMgdGhlIGZyYW1lIHNldCB1 cCB0aGUgRlAgcmVnaXN0ZXI/ICAqLwotICBpbnQgYmFzZV9yZWcgPSAwOwotCi0gIHN0cnVj dCByZWdfdmFsdWUgKnZhbHVlID0gY2FjaGUtPnJlZ192YWx1ZTsKLSAgc3RydWN0IHJlZ192 YWx1ZSB0ZW1wX3ZhbHVlW05JT1MyX05VTV9SRUdTXTsKLQotICAvKiBTYXZlIHRoZSBzdGFy dGluZyBQQyBzbyB3ZSBjYW4gY29ycmVjdCB0aGUgcGMgYWZ0ZXIgcnVubmluZwotICAgICB0 aHJvdWdoIHRoZSBwcm9sb2csIHVzaW5nIHN5bWJvbCBpbmZvLiAgKi8KLSAgQ09SRV9BRERS IHBjID0gc3RhcnRfcGM7Ci0KLSAgLyogSXMgdGhpcyBhbiBleGNlcHRpb24gaGFuZGxlcj8g ICovCi0gIGludCBleGNlcHRpb25faGFuZGxlciA9IDA7Ci0KLSAgLyogV2hhdCB3YXMgdGhl IG9yaWdpbmFsIHZhbHVlIG9mIFNQIChvciBmYWtlIG9yaWdpbmFsIHZhbHVlIGZvcgotICAg ICBmdW5jdGlvbnMgd2hpY2ggc3dpdGNoIHN0YWNrcz8gICovCi0gIENPUkVfQUREUiBmcmFt ZV9oaWdoOwotCi0gIC8qIFRoZSBsYXN0IGRlZmluaXRlbHktcHJvbG9ndWUgaW5zdHJ1Y3Rp b24gc2Vlbi4gICovCi0gIENPUkVfQUREUiBwcm9sb2d1ZV9lbmQ7Ci0KLSAgLyogSXMgdGhp cyB0aGUgaW5uZXJtb3N0IGZ1bmN0aW9uPyAgKi8KLSAgaW50IGlubmVybW9zdCA9ICh0aGlz X2ZyYW1lID8gKGZyYW1lX3JlbGF0aXZlX2xldmVsICh0aGlzX2ZyYW1lKSA9PSAwKSA6IDEp OwotCi0gIGlmIChuaW9zMl9kZWJ1ZykKLSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAot CQkieyBuaW9zMl9hbmFseXplX3Byb2xvZ3VlIHN0YXJ0PSVzLCBjdXJyZW50PSVzICIsCi0J CXBhZGRyZXNzIChnZGJhcmNoLCBzdGFydF9wYyksCi0JCXBhZGRyZXNzIChnZGJhcmNoLCBj dXJyZW50X3BjKSk7Ci0KLSAgLyogU2V0IHVwIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGUg cmVnaXN0ZXJzLiAgKi8KLSAgbmlvczJfc2V0dXBfZGVmYXVsdCAoY2FjaGUpOwotCi0gIC8q IEZpbmQgdGhlIHByb2xvZ3VlIGluc3RydWN0aW9ucy4gICovCi0gIHByb2xvZ3VlX2VuZCA9 IHN0YXJ0X3BjOwotICBmb3IgKG5pbnNucyA9IDA7IG5pbnNucyA8IG1heF9pbnNuczsgbmlu c25zKyspCi0gICAgewotICAgICAgLyogUHJlc2VudCBpbnN0cnVjdGlvbi4gICovCi0gICAg ICB1aW50MzJfdCBpbnNuOwotICAgICAgY29uc3Qgc3RydWN0IG5pb3MyX29wY29kZSAqb3A7 Ci0gICAgICBpbnQgcmEsIHJiLCByYywgaW1tOwotICAgICAgdW5zaWduZWQgaW50IHVpbW07 Ci0gICAgICB1bnNpZ25lZCBpbnQgcmVnbGlzdDsKLSAgICAgIGludCB3YiwgaWQsIHJldDsK LSAgICAgIGVudW0gYnJhbmNoX2NvbmRpdGlvbiBjb25kOwotCi0gICAgICBpZiAocGMgPT0g Y3VycmVudF9wYykKLQl7Ci0JICAvKiBXaGVuIHdlIHJlYWNoIHRoZSBjdXJyZW50IFBDIHdl IG11c3Qgc2F2ZSB0aGUgY3VycmVudAotCSAgICAgcmVnaXN0ZXIgc3RhdGUgKGZvciB0aGUg YmFja3RyYWNlKSBidXQga2VlcCBhbmFseXNpbmcKLQkgICAgIGJlY2F1c2UgdGhlcmUgbWln aHQgYmUgbW9yZSB0byBmaW5kIG91dCAoZWcuIGlzIHRoaXMgYW4KLQkgICAgIGV4Y2VwdGlv biBoYW5kbGVyKS4gICovCi0JICBtZW1jcHkgKHRlbXBfdmFsdWUsIHZhbHVlLCBzaXplb2Yg KHRlbXBfdmFsdWUpKTsKLQkgIHZhbHVlID0gdGVtcF92YWx1ZTsKLQkgIGlmIChuaW9zMl9k ZWJ1ZykKLQkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgIioiKTsKLQl9Ci0KLSAgICAg IG9wID0gbmlvczJfZmV0Y2hfaW5zbiAoZ2RiYXJjaCwgcGMsICZpbnNuKTsKLQotICAgICAg LyogVW5rbm93biBvcGNvZGU/ICBTdG9wIHNjYW5uaW5nLiAgKi8KLSAgICAgIGlmIChvcCA9 PSBOVUxMKQotCWJyZWFrOwotICAgICAgcGMgKz0gb3AtPnNpemU7Ci0KLSAgICAgIGlmIChu aW9zMl9kZWJ1ZykKLQl7Ci0JICBpZiAob3AtPnNpemUgPT0gMikKLQkgICAgZ2RiX3ByaW50 ZiAoZ2RiX3N0ZGxvZywgIlslMDRYXSIsIGluc24gJiAweGZmZmYpOwotCSAgZWxzZQotCSAg ICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAiWyUwOFhdIiwgaW5zbik7Ci0JfQotCi0gICAg ICAvKiBUaGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBjYW4gYXBwZWFyIGluIHRoZSBwcm9s b2d1ZS4gICovCi0KLSAgICAgIGlmIChuaW9zMl9tYXRjaF9hZGQgKGluc24sIG9wLCBtYWNo LCAmcmEsICZyYiwgJnJjKSkKLQl7Ci0JICAvKiBBREQgICByYywgcmEsIHJiICAoYWxzbyB1 c2VkIGZvciBNT1YpICovCi0JICBpZiAocmMgPT0gTklPUzJfU1BfUkVHTlVNCi0JICAgICAg JiYgcmIgPT0gMAotCSAgICAgICYmIHZhbHVlW3JhXS5yZWcgPT0gY2FjaGUtPnJlZ19zYXZl ZFtOSU9TMl9TUF9SRUdOVU1dLmJhc2VyZWcpCi0JICAgIHsKLQkgICAgICAvKiBJZiB0aGUg cHJldmlvdXMgdmFsdWUgb2YgU1AgaXMgYXZhaWxhYmxlIHNvbWV3aGVyZQotCQkgbmVhciB0 aGUgbmV3IHN0YWNrIHBvaW50ZXIgdmFsdWUgdGhlbiB0aGlzIGlzIGEKLQkJIHN0YWNrIHN3 aXRjaC4gICovCi0KLQkgICAgICAvKiBJZiBhbnkgcmVnaXN0ZXJzIHdlcmUgc2F2ZWQgb24g dGhlIHN0YWNrIGJlZm9yZSB0aGVuCi0JCSB3ZSBjYW4ndCBiYWNrdHJhY2UgaW50byB0aGVt IG5vdy4gICovCi0JICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgTklPUzJfTlVNX1JFR1Mg OyBpKyspCi0JCXsKLQkJICBpZiAoY2FjaGUtPnJlZ19zYXZlZFtpXS5iYXNlcmVnID09IE5J T1MyX1NQX1JFR05VTSkKLQkJICAgIGNhY2hlLT5yZWdfc2F2ZWRbaV0uYmFzZXJlZyA9IC0x OwotCQkgIGlmICh2YWx1ZVtpXS5yZWcgPT0gTklPUzJfU1BfUkVHTlVNKQotCQkgICAgdmFs dWVbaV0ucmVnID0gLTE7Ci0JCX0KLQotCSAgICAgIC8qIENyZWF0ZSBhIGZha2UgImhpZ2gg d2F0ZXIgbWFyayIgNCBieXRlcyBhYm92ZSB3aGVyZSBTUAotCQkgd2FzIHN0b3JlZCBhbmQg ZmFrZSB1cCB0aGUgcmVnaXN0ZXJzIHRvIGJlIGNvbnNpc3RlbnQKLQkJIHdpdGggdGhhdC4g ICovCi0JICAgICAgdmFsdWVbTklPUzJfU1BfUkVHTlVNXS5yZWcgPSBOSU9TMl9TUF9SRUdO VU07Ci0JICAgICAgdmFsdWVbTklPUzJfU1BfUkVHTlVNXS5vZmZzZXQKLQkJPSAodmFsdWVb cmFdLm9mZnNldAotCQkgICAtIGNhY2hlLT5yZWdfc2F2ZWRbTklPUzJfU1BfUkVHTlVNXS5h ZGRyCi0JCSAgIC0gNCk7Ci0JICAgICAgY2FjaGUtPnJlZ19zYXZlZFtOSU9TMl9TUF9SRUdO VU1dLmJhc2VyZWcgPSBOSU9TMl9TUF9SRUdOVU07Ci0JICAgICAgY2FjaGUtPnJlZ19zYXZl ZFtOSU9TMl9TUF9SRUdOVU1dLmFkZHIgPSAtNDsKLQkgICAgfQotCi0JICBlbHNlIGlmIChy YyA9PSBOSU9TMl9TUF9SRUdOVU0gJiYgcmEgPT0gTklPUzJfRlBfUkVHTlVNKQotCSAgICAv KiBUaGlzIGlzIHNldHRpbmcgU1AgZnJvbSBGUC4gIFRoaXMgb25seSBoYXBwZW5zIGluIHRo ZQotCSAgICAgICBmdW5jdGlvbiBlcGlsb2d1ZS4gICovCi0JICAgIGJyZWFrOwotCi0JICBl bHNlIGlmIChyYyAhPSAwKQotCSAgICB7Ci0JICAgICAgaWYgKHZhbHVlW3JiXS5yZWcgPT0g MCkKLQkJdmFsdWVbcmNdLnJlZyA9IHZhbHVlW3JhXS5yZWc7Ci0JICAgICAgZWxzZSBpZiAo dmFsdWVbcmFdLnJlZyA9PSAwKQotCQl2YWx1ZVtyY10ucmVnID0gdmFsdWVbcmJdLnJlZzsK LQkgICAgICBlbHNlCi0JCXZhbHVlW3JjXS5yZWcgPSAtMTsKLQkgICAgICB2YWx1ZVtyY10u b2Zmc2V0ID0gdmFsdWVbcmFdLm9mZnNldCArIHZhbHVlW3JiXS5vZmZzZXQ7Ci0JICAgIH0K LQotCSAgLyogVGhlIGFkZC9tb3ZlIGlzIG9ubHkgY29uc2lkZXJlZCBhIHByb2xvZ3VlIGlu c3RydWN0aW9uCi0JICAgICBpZiB0aGUgZGVzdGluYXRpb24gaXMgU1Agb3IgRlAuICAqLwot CSAgaWYgKHJjID09IE5JT1MyX1NQX1JFR05VTSB8fCByYyA9PSBOSU9TMl9GUF9SRUdOVU0p Ci0JICAgIHByb2xvZ3VlX2VuZCA9IHBjOwotCX0KLSAgICAgIAotICAgICAgZWxzZSBpZiAo bmlvczJfbWF0Y2hfc3ViIChpbnNuLCBvcCwgbWFjaCwgJnJhLCAmcmIsICZyYykpCi0Jewot CSAgLyogU1VCICAgcmMsIHJhLCByYiAqLwotCSAgaWYgKHJjID09IE5JT1MyX1NQX1JFR05V TSAmJiByYiA9PSBOSU9TMl9TUF9SRUdOVU0KLQkgICAgICAmJiB2YWx1ZVtyY10ucmVnICE9 IDApCi0JICAgIC8qIElmIHdlIGFyZSBkZWNyZW1lbnRpbmcgdGhlIFNQIGJ5IGEgbm9uLWNv bnN0YW50IGFtb3VudCwKLQkgICAgICAgdGhpcyBpcyBhbGxvY2EsIG5vdCBwYXJ0IG9mIHRo ZSBwcm9sb2d1ZS4gICovCi0JICAgIGJyZWFrOwotCSAgZWxzZSBpZiAocmMgIT0gMCkKLQkg ICAgewotCSAgICAgIGlmICh2YWx1ZVtyYl0ucmVnID09IDApCi0JCXZhbHVlW3JjXS5yZWcg PSB2YWx1ZVtyYV0ucmVnOwotCSAgICAgIGVsc2UKLQkJdmFsdWVbcmNdLnJlZyA9IC0xOwot CSAgICAgIHZhbHVlW3JjXS5vZmZzZXQgPSB2YWx1ZVtyYV0ub2Zmc2V0IC0gdmFsdWVbcmJd Lm9mZnNldDsKLQkgICAgfQotCX0KLQotICAgICAgZWxzZSBpZiAobmlvczJfbWF0Y2hfYWRk aSAoaW5zbiwgb3AsIG1hY2gsICZyYSwgJnJiLCAmaW1tKSkKLQl7Ci0JICAvKiBBRERJICAg IHJiLCByYSwgaW1tICovCi0KLQkgIC8qIEEgcG9zaXRpdmUgc3RhY2sgYWRqdXN0bWVudCBo YXMgdG8gYmUgcGFydCBvZiB0aGUgZXBpbG9ndWUuICAqLwotCSAgaWYgKHJiID09IE5JT1My X1NQX1JFR05VTQotCSAgICAgICYmIChpbW0gPiAwIHx8IHZhbHVlW3JhXS5yZWcgIT0gTklP UzJfU1BfUkVHTlVNKSkKLQkgICAgYnJlYWs7Ci0KLQkgIC8qIExpa2V3aXNlIHJlc3Rvcmlu ZyBTUCBmcm9tIEZQLiAgKi8KLQkgIGVsc2UgaWYgKHJiID09IE5JT1MyX1NQX1JFR05VTSAm JiByYSA9PSBOSU9TMl9GUF9SRUdOVU0pCi0JICAgIGJyZWFrOwotCi0JICBpZiAocmIgIT0g MCkKLQkgICAgewotCSAgICAgIHZhbHVlW3JiXS5yZWcgICAgPSB2YWx1ZVtyYV0ucmVnOwot CSAgICAgIHZhbHVlW3JiXS5vZmZzZXQgPSB2YWx1ZVtyYV0ub2Zmc2V0ICsgaW1tOwotCSAg ICB9Ci0KLQkgIC8qIFRoZSBhZGQgaXMgb25seSBjb25zaWRlcmVkIGEgcHJvbG9ndWUgaW5z dHJ1Y3Rpb24KLQkgICAgIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyBTUCBvciBGUC4gICovCi0J ICBpZiAocmIgPT0gTklPUzJfU1BfUkVHTlVNIHx8IHJiID09IE5JT1MyX0ZQX1JFR05VTSkK LQkgICAgcHJvbG9ndWVfZW5kID0gcGM7Ci0JfQotCi0gICAgICBlbHNlIGlmIChuaW9zMl9t YXRjaF9vcmhpIChpbnNuLCBvcCwgbWFjaCwgJnJhLCAmcmIsICZ1aW1tKSkKLQl7Ci0JICAv KiBPUkhJICByYiwgcmEsIHVpbW0gICAoYWxzbyB1c2VkIGZvciBNT1ZISSkgKi8KLQkgIGlm IChyYiAhPSAwKQotCSAgICB7Ci0JICAgICAgdmFsdWVbcmJdLnJlZyAgICA9ICh2YWx1ZVty YV0ucmVnID09IDApID8gMCA6IC0xOwotCSAgICAgIHZhbHVlW3JiXS5vZmZzZXQgPSB2YWx1 ZVtyYV0ub2Zmc2V0IHwgKHVpbW0gPDwgMTYpOwotCSAgICB9Ci0JfQotCi0gICAgICBlbHNl IGlmIChuaW9zMl9tYXRjaF9zdHcgKGluc24sIG9wLCBtYWNoLCAmcmEsICZyYiwgJmltbSkp Ci0JewotCSAgLyogU1RXIHJiLCBpbW0ocmEpICovCi0KLQkgIC8qIEFyZSB3ZSBzdG9yaW5n IHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiBhIHJlZ2lzdGVyIHRvIHRoZSBzdGFjaz8KLQkgICAg IEZvciBleGNlcHRpb24gaGFuZGxlcnMgdGhlIHZhbHVlIG9mIEVBLTQgKHJldHVybgotCSAg ICAgYWRkcmVzcyBmcm9tIGludGVycnVwdHMgZXRjKSBpcyBzb21ldGltZXMgc3RvcmVkLiAg Ki8KLQkgIGludCBvcmlnID0gdmFsdWVbcmJdLnJlZzsKLQkgIGlmIChvcmlnID4gMAotCSAg ICAgICYmICh2YWx1ZVtyYl0ub2Zmc2V0ID09IDAKLQkJICB8fCAob3JpZyA9PSBOSU9TMl9F QV9SRUdOVU0gJiYgdmFsdWVbcmJdLm9mZnNldCA9PSAtNCkpCi0JICAgICAgJiYgdmFsdWVb cmFdLnJlZyA9PSBOSU9TMl9TUF9SRUdOVU0pCi0JICAgIHsKLQkgICAgICBpZiAocGMgPCBj dXJyZW50X3BjKQotCQl7Ci0JCSAgLyogU2F2ZSBvZmYgY2FsbGVlIHNhdmVkIHJlZ2lzdGVy cy4gICovCi0JCSAgY2FjaGUtPnJlZ19zYXZlZFtvcmlnXS5iYXNlcmVnID0gdmFsdWVbcmFd LnJlZzsKLQkJICBjYWNoZS0+cmVnX3NhdmVkW29yaWddLmFkZHIgPSB2YWx1ZVtyYV0ub2Zm c2V0ICsgaW1tOwotCQl9Ci0JICAgICAgCi0JICAgICAgcHJvbG9ndWVfZW5kID0gcGM7Ci0J ICAgICAgCi0JICAgICAgaWYgKG9yaWcgPT0gTklPUzJfRUFfUkVHTlVNIHx8IG9yaWcgPT0g TklPUzJfRVNUQVRVU19SRUdOVU0pCi0JCWV4Y2VwdGlvbl9oYW5kbGVyID0gMTsKLQkgICAg fQotCSAgZWxzZQotCSAgICAvKiBOb24tc3RhY2sgbWVtb3J5IHdyaXRlcyBjYW5ub3QgYXBw ZWFyIGluIHRoZSBwcm9sb2d1ZS4gICovCi0JICAgIGJyZWFrOwotCX0KLQotICAgICAgZWxz ZSBpZiAobmlvczJfbWF0Y2hfc3R3bSAoaW5zbiwgb3AsIG1hY2gsCi0JCQkJICZyZWdsaXN0 LCAmcmEsICZpbW0sICZ3YiwgJmlkKSkKLQl7Ci0JICAvKiBQVVNILk4ge3JlZ2xpc3R9LCBh ZGp1c3QKLQkgICAgIG9yCi0JICAgICBTVFdNIHtyZWdsaXN0fSwgLS0oU1ApWywgd3JpdGVi YWNrXSAqLwotCSAgaW50IG9mZiA9IDA7Ci0KLQkgIGlmIChyYSAhPSBOSU9TMl9TUF9SRUdO VU0gfHwgaWQgIT0gMCkKLQkgICAgLyogVGhpcyBpcyBhIG5vbi1zdGFjay1wdXNoIG1lbW9y eSB3cml0ZSBhbmQgY2Fubm90IGJlCi0JICAgICAgIHBhcnQgb2YgdGhlIHByb2xvZ3VlLiAg Ki8KLQkgICAgYnJlYWs7Ci0KLQkgIGZvciAoaW50IGkgPSAzMTsgaSA+PSAwOyBpLS0pCi0J ICAgIGlmIChyZWdsaXN0ICYgKDEgPDwgaSkpCi0JICAgICAgewotCQlpbnQgb3JpZyA9IHZh bHVlW2ldLnJlZzsKLQkJCi0JCW9mZiArPSA0OwotCQlpZiAob3JpZyA+IDAgJiYgdmFsdWVb aV0ub2Zmc2V0ID09IDAgJiYgcGMgPCBjdXJyZW50X3BjKQotCQkgIHsKLQkJICAgIGNhY2hl LT5yZWdfc2F2ZWRbb3JpZ10uYmFzZXJlZwotCQkgICAgICA9IHZhbHVlW05JT1MyX1NQX1JF R05VTV0ucmVnOwotCQkgICAgY2FjaGUtPnJlZ19zYXZlZFtvcmlnXS5hZGRyCi0JCSAgICAg ID0gdmFsdWVbTklPUzJfU1BfUkVHTlVNXS5vZmZzZXQgLSBvZmY7Ci0JCSAgfQotCSAgICAg IH0KLQotCSAgaWYgKHdiKQotCSAgICB2YWx1ZVtOSU9TMl9TUF9SRUdOVU1dLm9mZnNldCAt PSBvZmY7Ci0JICB2YWx1ZVtOSU9TMl9TUF9SRUdOVU1dLm9mZnNldCAtPSBpbW07Ci0KLQkg IHByb2xvZ3VlX2VuZCA9IHBjOwotCX0KLQotICAgICAgZWxzZSBpZiAobmlvczJfbWF0Y2hf cmRjdGwgKGluc24sIG9wLCBtYWNoLCAmcmEsICZyYykpCi0JewotCSAgLyogUkRDVEwgckMs IGN0bE4KLQkgICAgIFRoaXMgY2FuIGFwcGVhciBpbiBleGNlcHRpb24gaGFuZGxlcnMgaW4g Y29tYmluYXRpb24gd2l0aAotCSAgICAgYSBzdWJzZXF1ZW50IHNhdmUgdG8gdGhlIHN0YWNr IGZyYW1lLiAgKi8KLQkgIGlmIChyYyAhPSAwKQotCSAgICB7Ci0JICAgICAgdmFsdWVbcmNd LnJlZyAgICA9IE5JT1MyX1NUQVRVU19SRUdOVU0gKyByYTsKLQkgICAgICB2YWx1ZVtyY10u b2Zmc2V0ID0gMDsKLQkgICAgfQotCX0KLQotICAgICAgZWxzZSBpZiAobmlvczJfbWF0Y2hf Y2FsbGkgKGluc24sIG9wLCBtYWNoLCAmdWltbSkpCi0JewotCSAgaWYgKHZhbHVlWzhdLnJl ZyA9PSBOSU9TMl9SQV9SRUdOVU0KLQkgICAgICAmJiB2YWx1ZVs4XS5vZmZzZXQgPT0gMAot CSAgICAgICYmIHZhbHVlW05JT1MyX1NQX1JFR05VTV0ucmVnID09IE5JT1MyX1NQX1JFR05V TQotCSAgICAgICYmIHZhbHVlW05JT1MyX1NQX1JFR05VTV0ub2Zmc2V0ID09IDApCi0JICAg IHsKLQkgICAgICAvKiBBIENBTEwgaW5zdHJ1Y3Rpb24uICBUaGlzIGlzIHRyZWF0ZWQgYXMg YSBjYWxsIHRvIG1jb3VudAotCQkgaWYgcmEgaGFzIGJlZW4gc3RvcmVkIGludG8gcjggYmVm b3JlaGFuZCBhbmQgaWYgaXQncwotCQkgYmVmb3JlIHRoZSBzdGFjayBhZGp1c3QuCi0JCSBO b3RlIG1jb3VudCBjb3JydXB0cyByMi1yMywgcjktcjE1ICYgcmEuICAqLwotCSAgICAgIGZv ciAoaW50IGkgPSAyIDsgaSA8PSAzIDsgaSsrKQotCQl2YWx1ZVtpXS5yZWcgPSAtMTsKLQkg ICAgICBmb3IgKGludCBpID0gOSA7IGkgPD0gMTUgOyBpKyspCi0JCXZhbHVlW2ldLnJlZyA9 IC0xOwotCSAgICAgIHZhbHVlW05JT1MyX1JBX1JFR05VTV0ucmVnID0gLTE7Ci0KLQkgICAg ICBwcm9sb2d1ZV9lbmQgPSBwYzsKLQkgICAgfQotCi0JICAvKiBPdGhlciBjYWxscyBhcmUg bm90IHBhcnQgb2YgdGhlIHByb2xvZ3VlLiAgKi8KLQkgIGVsc2UKLQkgICAgYnJlYWs7Ci0J fQotCi0gICAgICBlbHNlIGlmIChuaW9zMl9tYXRjaF9icmFuY2ggKGluc24sIG9wLCBtYWNo LCAmcmEsICZyYiwgJmltbSwgJmNvbmQpKQotCXsKLQkgIC8qIEJyYW5jaGVzIG5vdCBpbnZv bHZpbmcgYSBzdGFjayBvdmVyZmxvdyBjaGVjayBhcmVuJ3QgcGFydCBvZgotCSAgICAgdGhl IHByb2xvZ3VlLiAgKi8KLQkgIGlmIChyYSAhPSBOSU9TMl9TUF9SRUdOVU0pCi0JICAgIGJy ZWFrOwotCSAgZWxzZSBpZiAoY29uZCA9PSBicmFuY2hfZ2V1KQotCSAgICB7Ci0JICAgICAg LyogQkdFVSBzcCwgcngsICs4Ci0JCSBUUkFQIDMgIChvciBCUkVBSyAzKQotCQkgVGhpcyBp bnN0cnVjdGlvbiBzZXF1ZW5jZSBpcyB1c2VkIGluIHN0YWNrIGNoZWNraW5nOwotCQkgd2Ug Y2FuIGlnbm9yZSBpdC4gICovCi0JICAgICAgdW5zaWduZWQgaW50IG5leHRfaW5zbjsKLQkg ICAgICBjb25zdCBzdHJ1Y3QgbmlvczJfb3Bjb2RlICpuZXh0X29wCi0JCT0gbmlvczJfZmV0 Y2hfaW5zbiAoZ2RiYXJjaCwgcGMsICZuZXh0X2luc24pOwotCSAgICAgIGlmIChuZXh0X29w ICE9IE5VTEwKLQkJICAmJiAobmlvczJfbWF0Y2hfdHJhcCAobmV4dF9pbnNuLCBvcCwgbWFj aCwgJnVpbW0pCi0JCSAgICAgIHx8IG5pb3MyX21hdGNoX2JyZWFrIChuZXh0X2luc24sIG9w LCBtYWNoLCAmdWltbSkpKQotCQlwYyArPSBuZXh0X29wLT5zaXplOwotCSAgICAgIGVsc2UK LQkJYnJlYWs7Ci0JICAgIH0KLQkgIGVsc2UgaWYgKGNvbmQgPT0gYnJhbmNoX2x0dSkKLQkg ICAgewotCSAgICAgIC8qIEJMVFUgc3AsIHJ4LCAuTHN0YWNrb3ZlcmZsb3cKLQkJIElmIHRo ZSBsb2NhdGlvbiBicmFuY2hlZCB0byBob2xkcyBhIFRSQVAgb3IgQlJFQUsKLQkJIGluc3Ry dWN0aW9uIHRoZW4gdGhpcyBpcyBhbHNvIHN0YWNrIG92ZXJmbG93IGRldGVjdGlvbi4gICov Ci0JICAgICAgdW5zaWduZWQgaW50IG5leHRfaW5zbjsKLQkgICAgICBjb25zdCBzdHJ1Y3Qg bmlvczJfb3Bjb2RlICpuZXh0X29wCi0JCT0gbmlvczJfZmV0Y2hfaW5zbiAoZ2RiYXJjaCwg cGMgKyBpbW0sICZuZXh0X2luc24pOwotCSAgICAgIGlmIChuZXh0X29wICE9IE5VTEwKLQkJ ICAmJiAobmlvczJfbWF0Y2hfdHJhcCAobmV4dF9pbnNuLCBvcCwgbWFjaCwgJnVpbW0pCi0J CSAgICAgIHx8IG5pb3MyX21hdGNoX2JyZWFrIChuZXh0X2luc24sIG9wLCBtYWNoLCAmdWlt bSkpKQotCQk7Ci0JICAgICAgZWxzZQotCQlicmVhazsKLQkgICAgfQotCSAgZWxzZQotCSAg ICBicmVhazsKLQl9Ci0KLSAgICAgIC8qIEFsbCBvdGhlciBjYWxscywganVtcHMsIHJldHVy bnMsIFRSQVBzLCBvciBCUkVBS3MgdGVybWluYXRlCi0JIHRoZSBwcm9sb2d1ZS4gICovCi0g ICAgICBlbHNlIGlmIChuaW9zMl9tYXRjaF9jYWxsciAoaW5zbiwgb3AsIG1hY2gsICZyYSkK LQkgICAgICAgfHwgbmlvczJfbWF0Y2hfam1wciAoaW5zbiwgb3AsIG1hY2gsICZyYSkKLQkg ICAgICAgfHwgbmlvczJfbWF0Y2hfam1waSAoaW5zbiwgb3AsIG1hY2gsICZ1aW1tKQotCSAg ICAgICB8fCAobmlvczJfbWF0Y2hfbGR3bSAoaW5zbiwgb3AsIG1hY2gsICZyZWdsaXN0LCAm cmEsCi0JCQkJICAgICAmaW1tLCAmd2IsICZpZCwgJnJldCkKLQkJICAgJiYgcmV0KQotCSAg ICAgICB8fCBuaW9zMl9tYXRjaF90cmFwIChpbnNuLCBvcCwgbWFjaCwgJnVpbW0pCi0JICAg ICAgIHx8IG5pb3MyX21hdGNoX2JyZWFrIChpbnNuLCBvcCwgbWFjaCwgJnVpbW0pKQotCWJy ZWFrOwotICAgIH0KLQotICAvKiBJZiBUSElTX0ZSQU1FIGlzIE5VTEwsIHdlIGFyZSBiZWlu ZyBjYWxsZWQgZnJvbSBza2lwX3Byb2xvZ3VlCi0gICAgIGFuZCBhcmUgb25seSBpbnRlcmVz dGVkIGluIHRoZSBQUk9MT0dVRV9FTkQgdmFsdWUsIHNvIGp1c3QKLSAgICAgcmV0dXJuIHRo YXQgbm93IGFuZCBza2lwIG92ZXIgdGhlIGNhY2hlIHVwZGF0ZXMsIHdoaWNoIGRlcGVuZAot ICAgICBvbiBoYXZpbmcgZnJhbWUgaW5mb3JtYXRpb24uICAqLwotICBpZiAodGhpc19mcmFt ZSA9PSBOVUxMKQotICAgIHJldHVybiBwcm9sb2d1ZV9lbmQ7Ci0KLSAgLyogSWYgd2UgYXJl IGluIHRoZSBmdW5jdGlvbiBlcGlsb2d1ZSBhbmQgaGF2ZSBhbHJlYWR5IHBvcHBlZAotICAg ICByZWdpc3RlcnMgb2ZmIHRoZSBzdGFjayBpbiBwcmVwYXJhdGlvbiBmb3IgcmV0dXJuaW5n LCB0aGVuIHdlCi0gICAgIHdhbnQgdG8gZ28gYmFjayB0byB0aGUgb3JpZ2luYWwgcmVnaXN0 ZXIgdmFsdWVzLiAgKi8KLSAgaWYgKGlubmVybW9zdCAmJiBuaW9zMl9pbl9lcGlsb2d1ZV9w IChnZGJhcmNoLCBjdXJyZW50X3BjLCBzdGFydF9wYykpCi0gICAgbmlvczJfc2V0dXBfZGVm YXVsdCAoY2FjaGUpOwotCi0gIC8qIEV4Y2VwdGlvbiBoYW5kbGVycyB1c2UgYSBkaWZmZXJl bnQgcmV0dXJuIGFkZHJlc3MgcmVnaXN0ZXIuICAqLwotICBpZiAoZXhjZXB0aW9uX2hhbmRs ZXIpCi0gICAgY2FjaGUtPnJldHVybl9yZWdudW0gPSBOSU9TMl9FQV9SRUdOVU07Ci0KLSAg aWYgKG5pb3MyX2RlYnVnKQotICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csICJcbi0+IHJl dHJlZz0lZCwgIiwgY2FjaGUtPnJldHVybl9yZWdudW0pOwotCi0gIGlmIChjYWNoZS0+cmVn X3ZhbHVlW05JT1MyX0ZQX1JFR05VTV0ucmVnID09IE5JT1MyX1NQX1JFR05VTSkKLSAgICAv KiBJZiB0aGUgRlAgbm93IGhvbGRzIGFuIG9mZnNldCBmcm9tIHRoZSBDRkEgdGhlbiB0aGlz IGlzIGEKLSAgICAgICBub3JtYWwgZnJhbWUgd2hpY2ggdXNlcyB0aGUgZnJhbWUgcG9pbnRl ci4gICovCi0gICAgYmFzZV9yZWcgPSBOSU9TMl9GUF9SRUdOVU07Ci0gIGVsc2UgaWYgKGNh Y2hlLT5yZWdfdmFsdWVbTklPUzJfU1BfUkVHTlVNXS5yZWcgPT0gTklPUzJfU1BfUkVHTlVN KQotICAgIC8qIEZQIGRvZXNuJ3QgaG9sZCBhbiBvZmZzZXQgZnJvbSB0aGUgQ0ZBLiAgSWYg U1Agc3RpbGwgaG9sZHMgYW4KLSAgICAgICBvZmZzZXQgZnJvbSB0aGUgQ0ZBIHRoZW4gd2Ug bWlnaHQgYmUgaW4gYSBmdW5jdGlvbiB3aGljaCBvbWl0cwotICAgICAgIHRoZSBmcmFtZSBw b2ludGVyLCBvciB3ZSBtaWdodCBiZSBwYXJ0d2F5IHRocm91Z2ggdGhlIHByb2xvZ3VlLgot ICAgICAgIEluIGJvdGggY2FzZXMgd2UgY2FuIGZpbmQgdGhlIENGQSB1c2luZyBTUC4gICov Ci0gICAgYmFzZV9yZWcgPSBOSU9TMl9TUF9SRUdOVU07Ci0gIGVsc2UKLSAgICB7Ci0gICAg ICAvKiBTb21laG93IHRoZSBzdGFjayBwb2ludGVyIGhhcyBiZWVuIGNvcnJ1cHRlZC4KLQkg V2UgY2FuJ3QgcmV0dXJuLiAgKi8KLSAgICAgIGlmIChuaW9zMl9kZWJ1ZykKLQlnZGJfcHJp bnRmIChnZGJfc3RkbG9nLCAiPGNhbid0IHJlYWNoIGNmYT4gfVxuIik7Ci0gICAgICByZXR1 cm4gMDsKLSAgICB9Ci0KLSAgaWYgKGNhY2hlLT5yZWdfdmFsdWVbYmFzZV9yZWddLm9mZnNl dCA9PSAwCi0gICAgICB8fCBjYWNoZS0+cmVnX3NhdmVkW05JT1MyX1JBX1JFR05VTV0uYmFz ZXJlZyAhPSBOSU9TMl9TUF9SRUdOVU0KLSAgICAgIHx8IGNhY2hlLT5yZWdfc2F2ZWRbY2Fj aGUtPnJldHVybl9yZWdudW1dLmJhc2VyZWcgIT0gTklPUzJfU1BfUkVHTlVNKQotICAgIHsK LSAgICAgIC8qIElmIHRoZSBmcmFtZSBkaWRuJ3QgYWRqdXN0IHRoZSBzdGFjaywgZGlkbid0 IHNhdmUgUkEgb3IKLQkgZGlkbid0IHNhdmUgRUEgaW4gYW4gZXhjZXB0aW9uIGhhbmRsZXIg dGhlbiBpdCBtdXN0IGVpdGhlcgotCSBiZSBhIGxlYWYgZnVuY3Rpb24gKGRvZXNuJ3QgY2Fs bCBhbnkgb3RoZXIgZnVuY3Rpb25zKSBvciBpdAotCSBjYW4ndCByZXR1cm4uICBJZiBpdCBo YXMgY2FsbGVkIGFub3RoZXIgZnVuY3Rpb24gdGhlbiBpdAotCSBjYW4ndCBiZSBhIGxlYWYs IHNvIHNldCBiYXNlID09IDAgdG8gaW5kaWNhdGUgdGhhdCB3ZSBjYW4ndAotCSBiYWNrdHJh Y2UgcGFzdCBpdC4gICovCi0KLSAgICAgIGlmICghaW5uZXJtb3N0KQotCXsKLQkgIC8qIElm IGl0IGlzbid0IHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24gdGhlbiBpdCBjYW4ndCBiZSBhCi0J ICAgICBsZWFmLCB1bmxlc3MgaXQgd2FzIGludGVycnVwdGVkLiAgQ2hlY2sgd2hldGhlciBS QSBmb3IKLQkgICAgIHRoaXMgZnJhbWUgaXMgdGhlIHNhbWUgYXMgUEMuICBJZiBzbyB0aGVu IGl0IHByb2JhYmx5Ci0JICAgICB3YXNuJ3QgaW50ZXJydXB0ZWQuICAqLwotCSAgQ09SRV9B RERSIHJhCi0JICAgID0gZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1l LCBOSU9TMl9SQV9SRUdOVU0pOwotCi0JICBpZiAocmEgPT0gY3VycmVudF9wYykKLQkgICAg ewotCSAgICAgIGlmIChuaW9zMl9kZWJ1ZykKLQkJZ2RiX3ByaW50ZgotCQkgIChnZGJfc3Rk bG9nLAotCQkgICAiPG5vcmV0dXJuIEFESlVTVCAlcywgcjMxQHIlZCs/PiwgciVkQHIlZCs/ PiB9XG4iLAotCQkgICBwYWRkcmVzcyAoZ2RiYXJjaCwgY2FjaGUtPnJlZ192YWx1ZVtiYXNl X3JlZ10ub2Zmc2V0KSwKLQkJICAgY2FjaGUtPnJlZ19zYXZlZFtOSU9TMl9SQV9SRUdOVU1d LmJhc2VyZWcsCi0JCSAgIGNhY2hlLT5yZXR1cm5fcmVnbnVtLAotCQkgICBjYWNoZS0+cmVn X3NhdmVkW2NhY2hlLT5yZXR1cm5fcmVnbnVtXS5iYXNlcmVnKTsKLQkgICAgICByZXR1cm4g MDsKLQkgICAgfQotCX0KLSAgICB9Ci0KLSAgLyogR2V0IHRoZSB2YWx1ZSBvZiB3aGljaGV2 ZXIgcmVnaXN0ZXIgd2UgYXJlIHVzaW5nIGZvciB0aGUKLSAgICAgYmFzZS4gICovCi0gIGNh Y2hlLT5iYXNlID0gZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1lLCBi YXNlX3JlZyk7Ci0KLSAgLyogV2hhdCB3YXMgdGhlIHZhbHVlIG9mIFNQIGF0IHRoZSBzdGFy dCBvZiB0aGlzIGZ1bmN0aW9uIChvciBqdXN0Ci0gICAgIGFmdGVyIHRoZSBzdGFjayBzd2l0 Y2gpLiAgKi8KLSAgZnJhbWVfaGlnaCA9IGNhY2hlLT5iYXNlIC0gY2FjaGUtPnJlZ192YWx1 ZVtiYXNlX3JlZ10ub2Zmc2V0OwotCi0gIC8qIEFkanVzdCBhbGwgdGhlIHNhdmVkIHJlZ2lz dGVycyBzdWNoIHRoYXQgdGhleSBjb250YWluIGFkZHJlc3NlcwotICAgICBpbnN0ZWFkIG9m IG9mZnNldHMuICAqLwotICBmb3IgKGludCBpID0gMDsgaSA8IE5JT1MyX05VTV9SRUdTOyBp KyspCi0gICAgaWYgKGNhY2hlLT5yZWdfc2F2ZWRbaV0uYmFzZXJlZyA9PSBOSU9TMl9TUF9S RUdOVU0pCi0gICAgICB7Ci0JY2FjaGUtPnJlZ19zYXZlZFtpXS5iYXNlcmVnID0gTklPUzJf Wl9SRUdOVU07Ci0JY2FjaGUtPnJlZ19zYXZlZFtpXS5hZGRyICs9IGZyYW1lX2hpZ2g7Ci0g ICAgICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBOSU9TMl9OVU1fUkVHUzsgaSsrKQot ICAgIGlmIChjYWNoZS0+cmVnX3NhdmVkW2ldLmJhc2VyZWcgPT0gTklPUzJfR1BfUkVHTlVN KQotICAgICAgewotCUNPUkVfQUREUiBncCA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25l ZCAodGhpc19mcmFtZSwKLQkJCQkJCSAgICBOSU9TMl9HUF9SRUdOVU0pOwotCi0JZm9yICgg OyBpIDwgTklPUzJfTlVNX1JFR1M7IGkrKykKLQkgIGlmIChjYWNoZS0+cmVnX3NhdmVkW2ld LmJhc2VyZWcgPT0gTklPUzJfR1BfUkVHTlVNKQotCSAgICB7Ci0JICAgICAgY2FjaGUtPnJl Z19zYXZlZFtpXS5iYXNlcmVnID0gTklPUzJfWl9SRUdOVU07Ci0JICAgICAgY2FjaGUtPnJl Z19zYXZlZFtpXS5hZGRyICs9IGdwOwotCSAgICB9Ci0gICAgICB9Ci0KLSAgLyogV29yayBv dXQgd2hhdCB0aGUgdmFsdWUgb2YgU1Agd2FzIG9uIHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBv ZgotICAgICB0aGlzIGZ1bmN0aW9uLiAgSWYgd2UgZGlkbid0IHN3aXRjaCBzdGFja3MgdGhl biB0aGlzIGNhbiBiZQotICAgICB0cml2aWFsbHkgY29tcHV0ZWQgZnJvbSB0aGUgYmFzZSBh ZGRyZXNzLiAgKi8KLSAgaWYgKGNhY2hlLT5yZWdfc2F2ZWRbTklPUzJfU1BfUkVHTlVNXS5i YXNlcmVnID09IE5JT1MyX1pfUkVHTlVNKQotICAgIGNhY2hlLT5jZmEKLSAgICAgID0gcmVh ZF9tZW1vcnlfdW5zaWduZWRfaW50ZWdlciAoY2FjaGUtPnJlZ19zYXZlZFtOSU9TMl9TUF9S RUdOVU1dLmFkZHIsCi0JCQkJICAgICAgNCwgYnl0ZV9vcmRlcik7Ci0gIGVsc2UKLSAgICBj YWNoZS0+Y2ZhID0gZnJhbWVfaGlnaDsKLQotICAvKiBFeGNlcHRpb24gaGFuZGxlcnMgcmVz dG9yZSBFU1RBVFVTIGludG8gU1RBVFVTLiAgKi8KLSAgaWYgKGV4Y2VwdGlvbl9oYW5kbGVy KQotICAgIHsKLSAgICAgIGNhY2hlLT5yZWdfc2F2ZWRbTklPUzJfU1RBVFVTX1JFR05VTV0K LQk9IGNhY2hlLT5yZWdfc2F2ZWRbTklPUzJfRVNUQVRVU19SRUdOVU1dOwotICAgICAgY2Fj aGUtPnJlZ19zYXZlZFtOSU9TMl9FU1RBVFVTX1JFR05VTV0uYmFzZXJlZyA9IC0xOwotICAg IH0KLQotICBpZiAobmlvczJfZGVidWcpCi0gICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywg ImNmYT0lcyB9XG4iLAotCQlwYWRkcmVzcyAoZ2RiYXJjaCwgY2FjaGUtPmNmYSkpOwotCi0g IHJldHVybiBwcm9sb2d1ZV9lbmQ7Ci19Ci0KLS8qIEltcGxlbWVudCB0aGUgc2tpcF9wcm9s b2d1ZSBnZGJhcmNoIGhvb2suICAqLwotCi1zdGF0aWMgQ09SRV9BRERSCi1uaW9zMl9za2lw X3Byb2xvZ3VlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIHN0YXJ0X3Bj KQotewotICBDT1JFX0FERFIgZnVuY19hZGRyOwotCi0gIHN0cnVjdCBuaW9zMl91bndpbmRf Y2FjaGUgY2FjaGU7Ci0KLSAgLyogU2VlIGlmIHdlIGNhbiBkZXRlcm1pbmUgdGhlIGVuZCBv ZiB0aGUgcHJvbG9ndWUgdmlhIHRoZSBzeW1ib2wKLSAgICAgdGFibGUuICBJZiBzbywgdGhl biByZXR1cm4gZWl0aGVyIFBDLCBvciB0aGUgUEMgYWZ0ZXIgdGhlCi0gICAgIHByb2xvZ3Vl LCB3aGljaGV2ZXIgaXMgZ3JlYXRlci4gICovCi0gIGlmIChmaW5kX3BjX3BhcnRpYWxfZnVu Y3Rpb24gKHN0YXJ0X3BjLCBOVUxMLCAmZnVuY19hZGRyLCBOVUxMKSkKLSAgICB7Ci0gICAg ICBDT1JFX0FERFIgcG9zdF9wcm9sb2d1ZV9wYwotCT0gc2tpcF9wcm9sb2d1ZV91c2luZ19z YWwgKGdkYmFyY2gsIGZ1bmNfYWRkcik7Ci0KLSAgICAgIGlmIChwb3N0X3Byb2xvZ3VlX3Bj ICE9IDApCi0JcmV0dXJuIHN0ZDo6bWF4IChzdGFydF9wYywgcG9zdF9wcm9sb2d1ZV9wYyk7 Ci0gICAgfQotCi0gIC8qIFByb2xvZ3VlIGFuYWx5c2lzIGRvZXMgdGhlIHJlc3QuLi4uICAq LwotICBuaW9zMl9pbml0X2NhY2hlICgmY2FjaGUsIHN0YXJ0X3BjKTsKLSAgcmV0dXJuIG5p b3MyX2FuYWx5emVfcHJvbG9ndWUgKGdkYmFyY2gsIHN0YXJ0X3BjLCBzdGFydF9wYywgJmNh Y2hlLCBOVUxMKTsKLX0KLQotLyogSW1wbGVtZW50IHRoZSBicmVha3BvaW50X2tpbmRfZnJv bV9wYyBnZGJhcmNoIG1ldGhvZC4gICovCi0KLXN0YXRpYyBpbnQKLW5pb3MyX2JyZWFrcG9p bnRfa2luZF9mcm9tX3BjIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSICpw Y3B0cikKLXsKLSAgdW5zaWduZWQgbG9uZyBtYWNoID0gZ2RiYXJjaF9iZmRfYXJjaF9pbmZv IChnZGJhcmNoKS0+bWFjaDsKLQotICBpZiAobWFjaCA9PSBiZmRfbWFjaF9uaW9zMnIyKQot ICAgIHsKLSAgICAgIHVuc2lnbmVkIGludCBpbnNuOwotICAgICAgY29uc3Qgc3RydWN0IG5p b3MyX29wY29kZSAqb3AKLQk9IG5pb3MyX2ZldGNoX2luc24gKGdkYmFyY2gsICpwY3B0ciwg Jmluc24pOwotCi0gICAgICBpZiAob3AgJiYgb3AtPnNpemUgPT0gTklPUzJfQ0RYX09QQ09E RV9TSVpFKQotCXJldHVybiBOSU9TMl9DRFhfT1BDT0RFX1NJWkU7Ci0gICAgICBlbHNlCi0J cmV0dXJuIE5JT1MyX09QQ09ERV9TSVpFOwotICAgIH0KLSAgZWxzZQotICAgIHJldHVybiBO SU9TMl9PUENPREVfU0laRTsKLX0KLQotLyogSW1wbGVtZW50IHRoZSBzd19icmVha3BvaW50 X2Zyb21fa2luZCBnZGJhcmNoIG1ldGhvZC4gICovCi0KLXN0YXRpYyBjb25zdCBnZGJfYnl0 ZSAqCi1uaW9zMl9zd19icmVha3BvaW50X2Zyb21fa2luZCAoc3RydWN0IGdkYmFyY2ggKmdk YmFyY2gsIGludCBraW5kLCBpbnQgKnNpemUpCi17Ci0vKiBUaGUgTmlvcyBJSSBBQkkgZm9y IExpbnV4IHNheXM6ICJVc2Vyc3BhY2UgcHJvZ3JhbXMgc2hvdWxkIG5vdCB1c2UKLSAgIHRo ZSBicmVhayBpbnN0cnVjdGlvbiBhbmQgdXNlcnNwYWNlIGRlYnVnZ2VycyBzaG91bGQgbm90 IGluc2VydAotICAgb25lLiIgYW5kICJVc2Vyc3BhY2UgYnJlYWtwb2ludHMgYXJlIGFjY29t cGxpc2hlZCB1c2luZyB0aGUgdHJhcAotICAgaW5zdHJ1Y3Rpb24gd2l0aCBpbW1lZGlhdGUg b3BlcmFuZCAzMSAoYWxsIG9uZXMpLiIKLQotICAgU28sIHdlIHVzZSAidHJhcCAzMSIgY29u c2lzdGVudGx5IGFzIHRoZSBicmVha3BvaW50IG9uIGJhcmUtbWV0YWwKLSAgIGFzIHdlbGwg YXMgTGludXggdGFyZ2V0cy4gICovCi0KLSAgLyogUjIgdHJhcCBlbmNvZGluZzoKLSAgICAg KCgweDJkIDw8IDI2KSB8ICgweDFmIDw8IDIxKSB8ICgweDFkIDw8IDE2KSB8ICgweDIwIDw8 IDApKQotICAgICAweGI3ZmQwMDIwCi0gICAgIENEWCB0cmFwLm4gZW5jb2Rpbmc6Ci0gICAg ICgoMHhkIDw8IDEyKSB8ICgweDFmIDw8IDYpIHwgKDB4OSA8PCAwKSkKLSAgICAgMHhkN2M5 Ci0gICAgIE5vdGUgdGhhdCBjb2RlIGlzIGFsd2F5cyBsaXR0bGUtZW5kaWFuIG9uIFIyLiAg Ki8KLSAgKnNpemUgPSBraW5kOwotCi0gIGlmIChraW5kID09IE5JT1MyX0NEWF9PUENPREVf U0laRSkKLSAgICB7Ci0gICAgICBzdGF0aWMgY29uc3QgZ2RiX2J5dGUgY2R4X2JyZWFrcG9p bnRfbGVbXSA9IHsweGM5LCAweGQ3fTsKLQotICAgICAgcmV0dXJuIGNkeF9icmVha3BvaW50 X2xlOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgbWFjaCA9 IGdkYmFyY2hfYmZkX2FyY2hfaW5mbyAoZ2RiYXJjaCktPm1hY2g7Ci0KLSAgICAgIGlmICht YWNoID09IGJmZF9tYWNoX25pb3MycjIpCi0JewotCSAgc3RhdGljIGNvbnN0IGdkYl9ieXRl IHIyX2JyZWFrcG9pbnRfbGVbXSA9IHsweDIwLCAweDAwLCAweGZkLCAweGI3fTsKLQotCSAg cmV0dXJuIHIyX2JyZWFrcG9pbnRfbGU7Ci0JfQotICAgICAgZWxzZQotCXsKLQkgIGVudW0g YmZkX2VuZGlhbiBieXRlX29yZGVyX2Zvcl9jb2RlCi0JICAgID0gZ2RiYXJjaF9ieXRlX29y ZGVyX2Zvcl9jb2RlIChnZGJhcmNoKTsKLQkgIC8qIFIxIHRyYXAgZW5jb2Rpbmc6Ci0JICAg ICAoKDB4MWQgPDwgMTcpIHwgKDB4MmQgPDwgMTEpIHwgKDB4MWYgPDwgNikgfCAoMHgzYSA8 PCAwKSkKLQkgICAgIDB4MDAzYjZmZmEgKi8KLQkgIHN0YXRpYyBjb25zdCBnZGJfYnl0ZSBy MV9icmVha3BvaW50X2xlW10gPSB7MHhmYSwgMHg2ZiwgMHgzYiwgMHgwfTsKLQkgIHN0YXRp YyBjb25zdCBnZGJfYnl0ZSByMV9icmVha3BvaW50X2JlW10gPSB7MHgwLCAweDNiLCAweDZm LCAweGZhfTsKLQotCSAgaWYgKGJ5dGVfb3JkZXJfZm9yX2NvZGUgPT0gQkZEX0VORElBTl9C SUcpCi0JICAgIHJldHVybiByMV9icmVha3BvaW50X2JlOwotCSAgZWxzZQotCSAgICByZXR1 cm4gcjFfYnJlYWtwb2ludF9sZTsKLQl9Ci0gICAgfQotfQotCi0vKiBJbXBsZW1lbnQgdGhl IGZyYW1lX2FsaWduIGdkYmFyY2ggbWV0aG9kLiAgKi8KLQotc3RhdGljIENPUkVfQUREUgot bmlvczJfZnJhbWVfYWxpZ24gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIg YWRkcikKLXsKLSAgcmV0dXJuIGFsaWduX2Rvd24gKGFkZHIsIDQpOwotfQotCi0KLS8qIElt cGxlbWVudCB0aGUgcmV0dXJuX3ZhbHVlIGdkYmFyY2ggbWV0aG9kLiAgKi8KLQotc3RhdGlj IGVudW0gcmV0dXJuX3ZhbHVlX2NvbnZlbnRpb24KLW5pb3MyX3JldHVybl92YWx1ZSAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCB2YWx1ZSAqZnVuY3Rpb24sCi0JCSAgICBz dHJ1Y3QgdHlwZSAqdHlwZSwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKLQkJICAgIGdk Yl9ieXRlICpyZWFkYnVmLCBjb25zdCBnZGJfYnl0ZSAqd3JpdGVidWYpCi17Ci0gIGlmICh0 eXBlLT5sZW5ndGggKCkgPiA4KQotICAgIHJldHVybiBSRVRVUk5fVkFMVUVfU1RSVUNUX0NP TlZFTlRJT047Ci0KLSAgaWYgKHJlYWRidWYpCi0gICAgbmlvczJfZXh0cmFjdF9yZXR1cm5f dmFsdWUgKGdkYmFyY2gsIHR5cGUsIHJlZ2NhY2hlLCByZWFkYnVmKTsKLSAgaWYgKHdyaXRl YnVmKQotICAgIG5pb3MyX3N0b3JlX3JldHVybl92YWx1ZSAoZ2RiYXJjaCwgdHlwZSwgcmVn Y2FjaGUsIHdyaXRlYnVmKTsKLQotICByZXR1cm4gUkVUVVJOX1ZBTFVFX1JFR0lTVEVSX0NP TlZFTlRJT047Ci19Ci0KLS8qIEltcGxlbWVudCB0aGUgcHVzaF9kdW1teV9jYWxsIGdkYmFy Y2ggbWV0aG9kLiAgKi8KLQotc3RhdGljIENPUkVfQUREUgotbmlvczJfcHVzaF9kdW1teV9j YWxsIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IHZhbHVlICpmdW5jdGlvbiwK LQkJICAgICAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIENPUkVfQUREUiBicF9hZGRy LAotCQkgICAgICAgaW50IG5hcmdzLCBzdHJ1Y3QgdmFsdWUgKiphcmdzLCBDT1JFX0FERFIg c3AsCi0JCSAgICAgICBmdW5jdGlvbl9jYWxsX3JldHVybl9tZXRob2QgcmV0dXJuX21ldGhv ZCwKLQkJICAgICAgIENPUkVfQUREUiBzdHJ1Y3RfYWRkcikKLXsKLSAgaW50IGFyZ3JlZzsK LSAgaW50IGFyZ251bTsKLSAgaW50IGFyZ19zcGFjZSA9IDA7Ci0gIGludCBzdGFja19vZmZz ZXQgPSAwOwotICBlbnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdkYmFyY2hfYnl0ZV9v cmRlciAoZ2RiYXJjaCk7Ci0KLSAgLyogU2V0IHRoZSByZXR1cm4gYWRkcmVzcyByZWdpc3Rl ciB0byBwb2ludCB0byB0aGUgZW50cnkgcG9pbnQgb2YKLSAgICAgdGhlIHByb2dyYW0sIHdo ZXJlIGEgYnJlYWtwb2ludCBsaWVzIGluIHdhaXQuICAqLwotICByZWdjYWNoZV9jb29rZWRf d3JpdGVfc2lnbmVkIChyZWdjYWNoZSwgTklPUzJfUkFfUkVHTlVNLCBicF9hZGRyKTsKLQot ICAvKiBOb3cgbWFrZSBzcGFjZSBvbiB0aGUgc3RhY2sgZm9yIHRoZSBhcmdzLiAgKi8KLSAg Zm9yIChhcmdudW0gPSAwOyBhcmdudW0gPCBuYXJnczsgYXJnbnVtKyspCi0gICAgYXJnX3Nw YWNlICs9IGFsaWduX3VwIChhcmdzW2FyZ251bV0tPnR5cGUgKCktPmxlbmd0aCAoKSwgNCk7 Ci0gIHNwIC09IGFyZ19zcGFjZTsKLQotICAvKiBJbml0aWFsaXplIHRoZSByZWdpc3RlciBw b2ludGVyLiAgKi8KLSAgYXJncmVnID0gTklPUzJfRklSU1RfQVJHUkVHOwotCi0gIC8qIFRo ZSBzdHJ1Y3RfcmV0dXJuIHBvaW50ZXIgb2NjdXBpZXMgdGhlIGZpcnN0IHBhcmFtZXRlci1w YXNzaW5nCi0gICAgIHJlZ2lzdGVyLiAgKi8KLSAgaWYgKHJldHVybl9tZXRob2QgPT0gcmV0 dXJuX21ldGhvZF9zdHJ1Y3QpCi0gICAgcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVk IChyZWdjYWNoZSwgYXJncmVnKyssIHN0cnVjdF9hZGRyKTsKLQotICAvKiBOb3cgbG9hZCBh cyBtYW55IGFzIHBvc3NpYmxlIG9mIHRoZSBmaXJzdCBhcmd1bWVudHMgaW50bwotICAgICBy ZWdpc3RlcnMsIGFuZCBwdXNoIHRoZSByZXN0IG9udG8gdGhlIHN0YWNrLiAgTG9vcCB0aHJv dWdoIGFyZ3MKLSAgICAgZnJvbSBmaXJzdCB0byBsYXN0LiAgKi8KLSAgZm9yIChhcmdudW0g PSAwOyBhcmdudW0gPCBuYXJnczsgYXJnbnVtKyspCi0gICAgewotICAgICAgY29uc3QgZ2Ri X2J5dGUgKnZhbDsKLSAgICAgIHN0cnVjdCB2YWx1ZSAqYXJnID0gYXJnc1thcmdudW1dOwot ICAgICAgc3RydWN0IHR5cGUgKmFyZ190eXBlID0gY2hlY2tfdHlwZWRlZiAoYXJnLT50eXBl ICgpKTsKLSAgICAgIGludCBsZW4gPSBhcmdfdHlwZS0+bGVuZ3RoICgpOwotCi0gICAgICB2 YWwgPSBhcmctPmNvbnRlbnRzICgpLmRhdGEgKCk7Ci0KLSAgICAgIC8qIENvcHkgdGhlIGFy Z3VtZW50IHRvIGdlbmVyYWwgcmVnaXN0ZXJzIG9yIHRoZSBzdGFjayBpbgotCSByZWdpc3Rl ci1zaXplZCBwaWVjZXMuICBMYXJnZSBhcmd1bWVudHMgYXJlIHNwbGl0IGJldHdlZW4KLQkg cmVnaXN0ZXJzIGFuZCBzdGFjay4gICovCi0gICAgICB3aGlsZSAobGVuID4gMCkKLQl7Ci0J ICBpbnQgcGFydGlhbF9sZW4gPSAobGVuIDwgNCA/IGxlbiA6IDQpOwotCi0JICBpZiAoYXJn cmVnIDw9IE5JT1MyX0xBU1RfQVJHUkVHKQotCSAgICB7Ci0JICAgICAgLyogVGhlIGFyZ3Vt ZW50IGlzIGJlaW5nIHBhc3NlZCBpbiBhIHJlZ2lzdGVyLiAgKi8KLQkgICAgICBDT1JFX0FE RFIgcmVndmFsID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyICh2YWwsIHBhcnRpYWxfbGVu LAotCQkJCQkJCSAgIGJ5dGVfb3JkZXIpOwotCi0JICAgICAgcmVnY2FjaGVfY29va2VkX3dy aXRlX3Vuc2lnbmVkIChyZWdjYWNoZSwgYXJncmVnLCByZWd2YWwpOwotCSAgICAgIGFyZ3Jl ZysrOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICAvKiBUaGUgYXJndW1lbnQg aXMgYmVpbmcgcGFzc2VkIG9uIHRoZSBzdGFjay4gICovCi0JICAgICAgQ09SRV9BRERSIGFk ZHIgPSBzcCArIHN0YWNrX29mZnNldDsKLQotCSAgICAgIHdyaXRlX21lbW9yeSAoYWRkciwg dmFsLCBwYXJ0aWFsX2xlbik7Ci0JICAgICAgc3RhY2tfb2Zmc2V0ICs9IGFsaWduX3VwIChw YXJ0aWFsX2xlbiwgNCk7Ci0JICAgIH0KLQotCSAgbGVuIC09IHBhcnRpYWxfbGVuOwotCSAg dmFsICs9IHBhcnRpYWxfbGVuOwotCX0KLSAgICB9Ci0KLSAgcmVnY2FjaGVfY29va2VkX3dy aXRlX3NpZ25lZCAocmVnY2FjaGUsIE5JT1MyX1NQX1JFR05VTSwgc3ApOwotCi0gIC8qIFJl dHVybiBhZGp1c3RlZCBzdGFjayBwb2ludGVyLiAgKi8KLSAgcmV0dXJuIHNwOwotfQotCi0v KiBJbXBsZW1lbnQgdGhlIHVud2luZF9wYyBnZGJhcmNoIG1ldGhvZC4gICovCi0KLXN0YXRp YyBDT1JFX0FERFIKLW5pb3MyX3Vud2luZF9wYyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gs IGNvbnN0IGZyYW1lX2luZm9fcHRyICZuZXh0X2ZyYW1lKQotewotICBnZGJfYnl0ZSBidWZb NF07Ci0KLSAgZnJhbWVfdW53aW5kX3JlZ2lzdGVyIChuZXh0X2ZyYW1lLCBOSU9TMl9QQ19S RUdOVU0sIGJ1Zik7Ci0gIHJldHVybiBleHRyYWN0X3R5cGVkX2FkZHJlc3MgKGJ1ZiwgYnVp bHRpbl90eXBlIChnZGJhcmNoKS0+YnVpbHRpbl9mdW5jX3B0cik7Ci19Ci0KLS8qIFVzZSBw cm9sb2d1ZSBhbmFseXNpcyB0byBmaWxsIGluIHRoZSByZWdpc3RlciBjYWNoZQotICAgKlRI SVNfUFJPTE9HVUVfQ0FDSEUgZm9yIFRISVNfRlJBTUUuICBUaGlzIGZ1bmN0aW9uIGluaXRp YWxpemVzCi0gICAqVEhJU19QUk9MT0dVRV9DQUNIRSBmaXJzdC4gICovCi0KLXN0YXRpYyBz dHJ1Y3QgbmlvczJfdW53aW5kX2NhY2hlICoKLW5pb3MyX2ZyYW1lX3Vud2luZF9jYWNoZSAo Y29uc3QgZnJhbWVfaW5mb19wdHIgJnRoaXNfZnJhbWUsCi0JCQkgIHZvaWQgKip0aGlzX3By b2xvZ3VlX2NhY2hlKQotewotICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9mcmFt ZV9hcmNoICh0aGlzX2ZyYW1lKTsKLSAgQ09SRV9BRERSIGN1cnJlbnRfcGM7Ci0gIHN0cnVj dCBuaW9zMl91bndpbmRfY2FjaGUgKmNhY2hlOwotCi0gIGlmICgqdGhpc19wcm9sb2d1ZV9j YWNoZSkKLSAgICByZXR1cm4gKHN0cnVjdCBuaW9zMl91bndpbmRfY2FjaGUgKikgKnRoaXNf cHJvbG9ndWVfY2FjaGU7Ci0KLSAgY2FjaGUgPSBGUkFNRV9PQlNUQUNLX1pBTExPQyAoc3Ry dWN0IG5pb3MyX3Vud2luZF9jYWNoZSk7Ci0gICp0aGlzX3Byb2xvZ3VlX2NhY2hlID0gY2Fj aGU7Ci0KLSAgLyogWmVybyBhbGwgZmllbGRzLiAgKi8KLSAgbmlvczJfaW5pdF9jYWNoZSAo Y2FjaGUsIGdldF9mcmFtZV9mdW5jICh0aGlzX2ZyYW1lKSk7Ci0KLSAgLyogUHJvbG9ndWUg YW5hbHlzaXMgZG9lcyB0aGUgcmVzdC4uLiAgKi8KLSAgY3VycmVudF9wYyA9IGdldF9mcmFt ZV9wYyAodGhpc19mcmFtZSk7Ci0gIGlmIChjYWNoZS0+cGMgIT0gMCkKLSAgICBuaW9zMl9h bmFseXplX3Byb2xvZ3VlIChnZGJhcmNoLCBjYWNoZS0+cGMsIGN1cnJlbnRfcGMsIGNhY2hl LCB0aGlzX2ZyYW1lKTsKLQotICByZXR1cm4gY2FjaGU7Ci19Ci0KLS8qIEltcGxlbWVudCB0 aGUgdGhpc19pZCBmdW5jdGlvbiBmb3IgdGhlIG5vcm1hbCB1bndpbmRlci4gICovCi0KLXN0 YXRpYyB2b2lkCi1uaW9zMl9mcmFtZV90aGlzX2lkIChjb25zdCBmcmFtZV9pbmZvX3B0ciAm dGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUsCi0JCSAgICAgc3RydWN0IGZyYW1lX2lk ICp0aGlzX2lkKQotewotICBzdHJ1Y3QgbmlvczJfdW53aW5kX2NhY2hlICpjYWNoZSA9Ci0g ICAgbmlvczJfZnJhbWVfdW53aW5kX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsK LQotICAvKiBUaGlzIG1hcmtzIHRoZSBvdXRlcm1vc3QgZnJhbWUuICAqLwotICBpZiAoY2Fj aGUtPmJhc2UgPT0gMCkKLSAgICByZXR1cm47Ci0KLSAgKnRoaXNfaWQgPSBmcmFtZV9pZF9i dWlsZCAoY2FjaGUtPmNmYSwgY2FjaGUtPnBjKTsKLX0KLQotLyogSW1wbGVtZW50IHRoZSBw cmV2X3JlZ2lzdGVyIGZ1bmN0aW9uIGZvciB0aGUgbm9ybWFsIHVud2luZGVyLiAgKi8KLQot c3RhdGljIHN0cnVjdCB2YWx1ZSAqCi1uaW9zMl9mcmFtZV9wcmV2X3JlZ2lzdGVyIChjb25z dCBmcmFtZV9pbmZvX3B0ciAmdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUsCi0JCQkg ICBpbnQgcmVnbnVtKQotewotICBzdHJ1Y3QgbmlvczJfdW53aW5kX2NhY2hlICpjYWNoZSA9 Ci0gICAgbmlvczJfZnJhbWVfdW53aW5kX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hl KTsKLQotICBnZGJfYXNzZXJ0IChyZWdudW0gPj0gMCAmJiByZWdudW0gPCBOSU9TMl9OVU1f UkVHUyk7Ci0KLSAgLyogVGhlIFBDIG9mIHRoZSBwcmV2aW91cyBmcmFtZSBpcyBzdG9yZWQg aW4gdGhlIFJBIHJlZ2lzdGVyIG9mCi0gICAgIHRoZSBjdXJyZW50IGZyYW1lLiAgRnJvYiBy ZWdudW0gc28gdGhhdCB3ZSBwdWxsIHRoZSB2YWx1ZSBmcm9tCi0gICAgIHRoZSBjb3JyZWN0 IHBsYWNlLiAgKi8KLSAgaWYgKHJlZ251bSA9PSBOSU9TMl9QQ19SRUdOVU0pCi0gICAgcmVn bnVtID0gY2FjaGUtPnJldHVybl9yZWdudW07Ci0KLSAgaWYgKHJlZ251bSA9PSBOSU9TMl9T UF9SRUdOVU0gJiYgY2FjaGUtPmNmYSkKLSAgICByZXR1cm4gZnJhbWVfdW53aW5kX2dvdF9j b25zdGFudCAodGhpc19mcmFtZSwgcmVnbnVtLCBjYWNoZS0+Y2ZhKTsKLQotICAvKiBJZiB3 ZSd2ZSB3b3JrZWQgb3V0IHdoZXJlIGEgcmVnaXN0ZXIgaXMgc3RvcmVkIHRoZW4gbG9hZCBp dCBmcm9tCi0gICAgIHRoZXJlLiAgKi8KLSAgaWYgKGNhY2hlLT5yZWdfc2F2ZWRbcmVnbnVt XS5iYXNlcmVnID09IE5JT1MyX1pfUkVHTlVNKQotICAgIHJldHVybiBmcmFtZV91bndpbmRf Z290X21lbW9yeSAodGhpc19mcmFtZSwgcmVnbnVtLAotCQkJCSAgICBjYWNoZS0+cmVnX3Nh dmVkW3JlZ251bV0uYWRkcik7Ci0KLSAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfcmVnaXN0 ZXIgKHRoaXNfZnJhbWUsIHJlZ251bSwgcmVnbnVtKTsKLX0KLQotLyogSW1wbGVtZW50IHRo ZSB0aGlzX2Jhc2UsIHRoaXNfbG9jYWxzLCBhbmQgdGhpc19hcmdzIGhvb2tzCi0gICBmb3Ig dGhlIG5vcm1hbCB1bndpbmRlci4gICovCi0KLXN0YXRpYyBDT1JFX0FERFIKLW5pb3MyX2Zy YW1lX2Jhc2VfYWRkcmVzcyAoY29uc3QgZnJhbWVfaW5mb19wdHIgJnRoaXNfZnJhbWUsIHZv aWQgKip0aGlzX2NhY2hlKQotewotICBzdHJ1Y3QgbmlvczJfdW53aW5kX2NhY2hlICppbmZv Ci0gICAgPSBuaW9zMl9mcmFtZV91bndpbmRfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2Fj aGUpOwotCi0gIHJldHVybiBpbmZvLT5iYXNlOwotfQotCi0vKiBEYXRhIHN0cnVjdHVyZXMg Zm9yIHRoZSBub3JtYWwgcHJvbG9ndWUtYW5hbHlzaXMtYmFzZWQKLSAgIHVud2luZGVyLiAg Ki8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmcmFtZV91bndpbmQgbmlvczJfZnJhbWVfdW53 aW5kID0KLXsKLSAgIm5pb3MyIHByb2xvZ3VlIiwKLSAgTk9STUFMX0ZSQU1FLAotICBkZWZh dWx0X2ZyYW1lX3Vud2luZF9zdG9wX3JlYXNvbiwKLSAgbmlvczJfZnJhbWVfdGhpc19pZCwK LSAgbmlvczJfZnJhbWVfcHJldl9yZWdpc3RlciwKLSAgTlVMTCwKLSAgZGVmYXVsdF9mcmFt ZV9zbmlmZmVyCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZyYW1lX2Jhc2UgbmlvczJf ZnJhbWVfYmFzZSA9Ci17Ci0gICZuaW9zMl9mcmFtZV91bndpbmQsCi0gIG5pb3MyX2ZyYW1l X2Jhc2VfYWRkcmVzcywKLSAgbmlvczJfZnJhbWVfYmFzZV9hZGRyZXNzLAotICBuaW9zMl9m cmFtZV9iYXNlX2FkZHJlc3MKLX07Ci0KLS8qIEZpbGwgaW4gdGhlIHJlZ2lzdGVyIGNhY2hl ICpUSElTX0NBQ0hFIGZvciBUSElTX0ZSQU1FIGZvciB1c2UKLSAgIGluIHRoZSBzdHViIHVu d2luZGVyLiAgKi8KLQotc3RhdGljIHN0cnVjdCB0cmFkX2ZyYW1lX2NhY2hlICoKLW5pb3My X3N0dWJfZnJhbWVfY2FjaGUgKGNvbnN0IGZyYW1lX2luZm9fcHRyICZ0aGlzX2ZyYW1lLCB2 b2lkICoqdGhpc19jYWNoZSkKLXsKLSAgQ09SRV9BRERSIHBjOwotICBDT1JFX0FERFIgc3Rh cnRfYWRkcjsKLSAgQ09SRV9BRERSIHN0YWNrX2FkZHI7Ci0gIHN0cnVjdCB0cmFkX2ZyYW1l X2NhY2hlICp0aGlzX3RyYWRfY2FjaGU7Ci0gIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0g Z2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOwotCi0gIGlmICgqdGhpc19jYWNoZSAhPSBO VUxMKQotICAgIHJldHVybiAoc3RydWN0IHRyYWRfZnJhbWVfY2FjaGUgKikgKnRoaXNfY2Fj aGU7Ci0gIHRoaXNfdHJhZF9jYWNoZSA9IHRyYWRfZnJhbWVfY2FjaGVfemFsbG9jICh0aGlz X2ZyYW1lKTsKLSAgKnRoaXNfY2FjaGUgPSB0aGlzX3RyYWRfY2FjaGU7Ci0KLSAgLyogVGhl IHJldHVybiBhZGRyZXNzIGlzIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiAgKi8KLSAgdHJhZF9m cmFtZV9zZXRfcmVnX3JlYWxyZWcgKHRoaXNfdHJhZF9jYWNoZSwKLQkJCSAgICAgIGdkYmFy Y2hfcGNfcmVnbnVtIChnZGJhcmNoKSwKLQkJCSAgICAgIE5JT1MyX1JBX1JFR05VTSk7Ci0K LSAgLyogRnJhbWUgSUQsIHNpbmNlIGl0J3MgYSBmcmFtZWxlc3MgLyBzdGFja2xlc3MgZnVu Y3Rpb24sIG5vIHN0YWNrCi0gICAgIHNwYWNlIGlzIGFsbG9jYXRlZCBhbmQgU1Agb24gZW50 cnkgaXMgdGhlIGN1cnJlbnQgU1AuICAqLwotICBwYyA9IGdldF9mcmFtZV9wYyAodGhpc19m cmFtZSk7Ci0gIGZpbmRfcGNfcGFydGlhbF9mdW5jdGlvbiAocGMsIE5VTEwsICZzdGFydF9h ZGRyLCBOVUxMKTsKLSAgc3RhY2tfYWRkciA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25l ZCAodGhpc19mcmFtZSwgTklPUzJfU1BfUkVHTlVNKTsKLSAgdHJhZF9mcmFtZV9zZXRfaWQg KHRoaXNfdHJhZF9jYWNoZSwgZnJhbWVfaWRfYnVpbGQgKHN0YXJ0X2FkZHIsIHN0YWNrX2Fk ZHIpKTsKLSAgLyogQXNzdW1lIHRoYXQgdGhlIGZyYW1lJ3MgYmFzZSBpcyB0aGUgc2FtZSBh cyB0aGUgc3RhY2sgcG9pbnRlci4gICovCi0gIHRyYWRfZnJhbWVfc2V0X3RoaXNfYmFzZSAo dGhpc190cmFkX2NhY2hlLCBzdGFja19hZGRyKTsKLQotICByZXR1cm4gdGhpc190cmFkX2Nh Y2hlOwotfQotCi0vKiBJbXBsZW1lbnQgdGhlIHRoaXNfaWQgZnVuY3Rpb24gZm9yIHRoZSBz dHViIHVud2luZGVyLiAgKi8KLQotc3RhdGljIHZvaWQKLW5pb3MyX3N0dWJfZnJhbWVfdGhp c19pZCAoY29uc3QgZnJhbWVfaW5mb19wdHIgJnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2Nh Y2hlLAotCQkJICBzdHJ1Y3QgZnJhbWVfaWQgKnRoaXNfaWQpCi17Ci0gIHN0cnVjdCB0cmFk X2ZyYW1lX2NhY2hlICp0aGlzX3RyYWRfY2FjaGUKLSAgICA9IG5pb3MyX3N0dWJfZnJhbWVf Y2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUpOwotCi0gIHRyYWRfZnJhbWVfZ2V0X2lk ICh0aGlzX3RyYWRfY2FjaGUsIHRoaXNfaWQpOwotfQotCi0vKiBJbXBsZW1lbnQgdGhlIHBy ZXZfcmVnaXN0ZXIgZnVuY3Rpb24gZm9yIHRoZSBzdHViIHVud2luZGVyLiAgKi8KLQotc3Rh dGljIHN0cnVjdCB2YWx1ZSAqCi1uaW9zMl9zdHViX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKGNv bnN0IGZyYW1lX2luZm9fcHRyICZ0aGlzX2ZyYW1lLAotCQkJCXZvaWQgKip0aGlzX2NhY2hl LCBpbnQgcmVnbnVtKQotewotICBzdHJ1Y3QgdHJhZF9mcmFtZV9jYWNoZSAqdGhpc190cmFk X2NhY2hlCi0gICAgPSBuaW9zMl9zdHViX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlz X2NhY2hlKTsKLQotICByZXR1cm4gdHJhZF9mcmFtZV9nZXRfcmVnaXN0ZXIgKHRoaXNfdHJh ZF9jYWNoZSwgdGhpc19mcmFtZSwgcmVnbnVtKTsKLX0KLQotLyogSW1wbGVtZW50IHRoZSBz bmlmZmVyIGZ1bmN0aW9uIGZvciB0aGUgc3R1YiB1bndpbmRlci4KLSAgIFRoaXMgdW53aW5k ZXIgaXMgdXNlZCBmb3IgY2FzZXMgd2hlcmUgdGhlIG5vcm1hbAotICAgcHJvbG9ndWUtYW5h bHlzaXMtYmFzZWQgdW53aW5kZXIgY2FuJ3Qgd29yaywKLSAgIHN1Y2ggYXMgUExUIHN0dWJz LiAgKi8KLQotc3RhdGljIGludAotbmlvczJfc3R1Yl9mcmFtZV9zbmlmZmVyIChjb25zdCBz dHJ1Y3QgZnJhbWVfdW53aW5kICpzZWxmLAotCQkJICBjb25zdCBmcmFtZV9pbmZvX3B0ciAm dGhpc19mcmFtZSwgdm9pZCAqKmNhY2hlKQotewotICBnZGJfYnl0ZSBkdW1teVs0XTsKLSAg Q09SRV9BRERSIHBjID0gZ2V0X2ZyYW1lX2FkZHJlc3NfaW5fYmxvY2sgKHRoaXNfZnJhbWUp OwotCi0gIC8qIFVzZSB0aGUgc3R1YiB1bndpbmRlciBmb3IgdW5yZWFkYWJsZSBjb2RlLiAg Ki8KLSAgaWYgKHRhcmdldF9yZWFkX21lbW9yeSAoZ2V0X2ZyYW1lX3BjICh0aGlzX2ZyYW1l KSwgZHVtbXksIDQpICE9IDApCi0gICAgcmV0dXJuIDE7Ci0KLSAgaWYgKGluX3BsdF9zZWN0 aW9uIChwYykpCi0gICAgcmV0dXJuIDE7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIERlZmlu ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgc3R1YiB1bndpbmRlci4gICovCi0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kIG5pb3MyX3N0dWJfZnJhbWVfdW53aW5k ID0KLXsKLSAgIm5pb3MyIHN0dWIiLAotICBOT1JNQUxfRlJBTUUsCi0gIGRlZmF1bHRfZnJh bWVfdW53aW5kX3N0b3BfcmVhc29uLAotICBuaW9zMl9zdHViX2ZyYW1lX3RoaXNfaWQsCi0g IG5pb3MyX3N0dWJfZnJhbWVfcHJldl9yZWdpc3RlciwKLSAgTlVMTCwKLSAgbmlvczJfc3R1 Yl9mcmFtZV9zbmlmZmVyCi19OwotCi0KLQotLyogRGV0ZXJtaW5lIHdoZXJlIHRvIHNldCBh IHNpbmdsZSBzdGVwIGJyZWFrcG9pbnQgd2hpbGUgY29uc2lkZXJpbmcKLSAgIGJyYW5jaCBw cmVkaWN0aW9uLiAgKi8KLQotc3RhdGljIENPUkVfQUREUgotbmlvczJfZ2V0X25leHRfcGMg KHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIENPUkVfQUREUiBwYykKLXsKLSAgc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2ggPSByZWdjYWNoZS0+YXJjaCAoKTsKLSAgbmlvczJfZ2RiYXJj aF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwPG5pb3MyX2dkYmFyY2hfdGRlcD4gKGdkYmFy Y2gpOwotICB1bnNpZ25lZCBsb25nIG1hY2ggPSBnZGJhcmNoX2JmZF9hcmNoX2luZm8gKGdk YmFyY2gpLT5tYWNoOwotICB1bnNpZ25lZCBpbnQgaW5zbjsKLSAgY29uc3Qgc3RydWN0IG5p b3MyX29wY29kZSAqb3AgPSBuaW9zMl9mZXRjaF9pbnNuIChnZGJhcmNoLCBwYywgJmluc24p OwotICBpbnQgcmE7Ci0gIGludCByYjsKLSAgaW50IGltbTsKLSAgdW5zaWduZWQgaW50IHVp bW07Ci0gIGludCB3YiwgaWQsIHJldDsKLSAgZW51bSBicmFuY2hfY29uZGl0aW9uIGNvbmQ7 Ci0KLSAgLyogRG8gc29tZXRoaW5nIHN0dXBpZCBpZiB3ZSBjYW4ndCBkaXNhc3NlbWJsZSB0 aGUgaW5zbiBhdCBwYy4gICovCi0gIGlmIChvcCA9PSBOVUxMKQotICAgIHJldHVybiBwYyAr IE5JT1MyX09QQ09ERV9TSVpFOwotICAgIAotICBpZiAobmlvczJfbWF0Y2hfYnJhbmNoIChp bnNuLCBvcCwgbWFjaCwgJnJhLCAmcmIsICZpbW0sICZjb25kKSkKLSAgICB7Ci0gICAgICBp bnQgcmFzID0gcmVnY2FjaGVfcmF3X2dldF9zaWduZWQgKHJlZ2NhY2hlLCByYSk7Ci0gICAg ICBpbnQgcmJzID0gcmVnY2FjaGVfcmF3X2dldF9zaWduZWQgKHJlZ2NhY2hlLCByYik7Ci0g ICAgICB1bnNpZ25lZCBpbnQgcmF1ID0gcmVnY2FjaGVfcmF3X2dldF91bnNpZ25lZCAocmVn Y2FjaGUsIHJhKTsKLSAgICAgIHVuc2lnbmVkIGludCByYnUgPSByZWdjYWNoZV9yYXdfZ2V0 X3Vuc2lnbmVkIChyZWdjYWNoZSwgcmIpOwotCi0gICAgICBwYyArPSBvcC0+c2l6ZTsKLSAg ICAgIHN3aXRjaCAoY29uZCkKLQl7Ci0JY2FzZSBicmFuY2hfbm9uZToKLQkgIHBjICs9IGlt bTsKLQkgIGJyZWFrOwotCWNhc2UgYnJhbmNoX2VxOgotCSAgaWYgKHJhcyA9PSByYnMpCi0J ICAgIHBjICs9IGltbTsKLQkgIGJyZWFrOwotCWNhc2UgYnJhbmNoX25lOgotCSAgaWYgKHJh cyAhPSByYnMpCi0JICAgIHBjICs9IGltbTsKLQkgIGJyZWFrOwotCWNhc2UgYnJhbmNoX2dl OgotCSAgaWYgKHJhcyA+PSByYnMpCi0JICAgIHBjICs9IGltbTsKLQkgIGJyZWFrOwotCWNh c2UgYnJhbmNoX2dldToKLQkgIGlmIChyYXUgPj0gcmJ1KQotCSAgICBwYyArPSBpbW07Ci0J ICBicmVhazsKLQljYXNlIGJyYW5jaF9sdDoKLQkgIGlmIChyYXMgPCByYnMpCi0JICAgIHBj ICs9IGltbTsKLQkgIGJyZWFrOwotCWNhc2UgYnJhbmNoX2x0dToKLQkgIGlmIChyYXUgPCBy YnUpCi0JICAgIHBjICs9IGltbTsKLQkgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICBicmVhazsK LQl9Ci0gICAgfQotCi0gIGVsc2UgaWYgKG5pb3MyX21hdGNoX2ptcGkgKGluc24sIG9wLCBt YWNoLCAmdWltbSkpCi0gICAgcGMgPSAocGMgJiAweGYwMDAwMDAwKSB8IHVpbW07Ci0gIGVs c2UgaWYgKG5pb3MyX21hdGNoX2NhbGxpIChpbnNuLCBvcCwgbWFjaCwgJnVpbW0pKQotICAg IHsKLSAgICAgIENPUkVfQUREUiBjYWxsdG8gPSAocGMgJiAweGYwMDAwMDAwKSB8IHVpbW07 Ci0gICAgICBpZiAodGRlcC0+aXNfa2VybmVsX2hlbHBlciAhPSBOVUxMCi0JICAmJiB0ZGVw LT5pc19rZXJuZWxfaGVscGVyIChjYWxsdG8pKQotCS8qIFN0ZXAgb3ZlciBjYWxsIHRvIGtl cm5lbCBoZWxwZXIsIHdoaWNoIHdlIGNhbm5vdCBkZWJ1ZwotCSAgIGZyb20gdXNlciBzcGFj ZS4gICovCi0JcGMgKz0gb3AtPnNpemU7Ci0gICAgICBlbHNlCi0JcGMgPSBjYWxsdG87Ci0g ICAgfQotCi0gIGVsc2UgaWYgKG5pb3MyX21hdGNoX2ptcHIgKGluc24sIG9wLCBtYWNoLCAm cmEpKQotICAgIHBjID0gcmVnY2FjaGVfcmF3X2dldF91bnNpZ25lZCAocmVnY2FjaGUsIHJh KTsKLSAgZWxzZSBpZiAobmlvczJfbWF0Y2hfY2FsbHIgKGluc24sIG9wLCBtYWNoLCAmcmEp KQotICAgIHsKLSAgICAgIENPUkVfQUREUiBjYWxsdG8gPSByZWdjYWNoZV9yYXdfZ2V0X3Vu c2lnbmVkIChyZWdjYWNoZSwgcmEpOwotICAgICAgaWYgKHRkZXAtPmlzX2tlcm5lbF9oZWxw ZXIgIT0gTlVMTAotCSAgJiYgdGRlcC0+aXNfa2VybmVsX2hlbHBlciAoY2FsbHRvKSkKLQkv KiBTdGVwIG92ZXIgY2FsbCB0byBrZXJuZWwgaGVscGVyLiAgKi8KLQlwYyArPSBvcC0+c2l6 ZTsKLSAgICAgIGVsc2UKLQlwYyA9IGNhbGx0bzsKLSAgICB9Ci0KLSAgZWxzZSBpZiAobmlv czJfbWF0Y2hfbGR3bSAoaW5zbiwgb3AsIG1hY2gsICZ1aW1tLCAmcmEsICZpbW0sICZ3Yiwg JmlkLCAmcmV0KQotCSAgICYmIHJldCkKLSAgICB7Ci0gICAgICAvKiBJZiByYSBpcyBpbiB0 aGUgcmVnbGlzdCwgd2UgaGF2ZSB0byB1c2UgdGhlIHZhbHVlIHNhdmVkIGluIHRoZQotCSBz dGFjayBmcmFtZSByYXRoZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZS4gICovCi0gICAgICBp ZiAodWltbSAmICgxIDw8IE5JT1MyX1JBX1JFR05VTSkpCi0JcGMgPSBuaW9zMl91bndpbmRf cGMgKGdkYmFyY2gsIGdldF9jdXJyZW50X2ZyYW1lICgpKTsKLSAgICAgIGVsc2UKLQlwYyA9 IHJlZ2NhY2hlX3Jhd19nZXRfdW5zaWduZWQgKHJlZ2NhY2hlLCBOSU9TMl9SQV9SRUdOVU0p OwotICAgIH0KLQotICBlbHNlIGlmIChuaW9zMl9tYXRjaF90cmFwIChpbnNuLCBvcCwgbWFj aCwgJnVpbW0pICYmIHVpbW0gPT0gMCkKLSAgICB7Ci0gICAgICBpZiAodGRlcC0+c3lzY2Fs bF9uZXh0X3BjICE9IE5VTEwpCi0JcmV0dXJuIHRkZXAtPnN5c2NhbGxfbmV4dF9wYyAoZ2V0 X2N1cnJlbnRfZnJhbWUgKCksIG9wKTsKLSAgICB9Ci0KLSAgZWxzZQotICAgIHBjICs9IG9w LT5zaXplOwotCi0gIHJldHVybiBwYzsKLX0KLQotLyogSW1wbGVtZW50IHRoZSBzb2Z0d2Fy ZV9zaW5nbGVfc3RlcCBnZGJhcmNoIG1ldGhvZC4gICovCi0KLXN0YXRpYyBzdGQ6OnZlY3Rv cjxDT1JFX0FERFI+Ci1uaW9zMl9zb2Z0d2FyZV9zaW5nbGVfc3RlcCAoc3RydWN0IHJlZ2Nh Y2hlICpyZWdjYWNoZSkKLXsKLSAgQ09SRV9BRERSIG5leHRfcGMgPSBuaW9zMl9nZXRfbmV4 dF9wYyAocmVnY2FjaGUsIHJlZ2NhY2hlX3JlYWRfcGMgKHJlZ2NhY2hlKSk7Ci0KLSAgcmV0 dXJuIHtuZXh0X3BjfTsKLX0KLQotLyogSW1wbGVtZW50IHRoZSBnZXRfbG9uZ2p1bXBfdGFy Z2V0IGdkYmFyY2ggbWV0aG9kLiAgKi8KLQotc3RhdGljIGludAotbmlvczJfZ2V0X2xvbmdq bXBfdGFyZ2V0IChjb25zdCBmcmFtZV9pbmZvX3B0ciAmZnJhbWUsIENPUkVfQUREUiAqcGMp Ci17Ci0gIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKGZyYW1l KTsKLSAgbmlvczJfZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwPG5pb3MyX2dk YmFyY2hfdGRlcD4gKGdkYmFyY2gpOwotICBlbnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9 IGdkYmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJjaCk7Ci0gIENPUkVfQUREUiBqYl9hZGRyID0g Z2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkIChmcmFtZSwgTklPUzJfUjRfUkVHTlVNKTsK LSAgZ2RiX2J5dGUgYnVmWzRdOwotCi0gIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKGpiX2Fk ZHIgKyAodGRlcC0+amJfcGMgKiA0KSwgYnVmLCA0KSkKLSAgICByZXR1cm4gMDsKLQotICAq cGMgPSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGJ1ZiwgNCwgYnl0ZV9vcmRlcik7Ci0g IHJldHVybiAxOwotfQotCi0vKiBJbXBsZW1lbnQgdGhlIHR5cGVfYWxpZ24gZ2RiYXJjaCBm dW5jdGlvbi4gICovCi0KLXN0YXRpYyBVTE9OR0VTVAotbmlvczJfdHlwZV9hbGlnbiAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCB0eXBlICp0eXBlKQotewotICBzd2l0Y2gg KHR5cGUtPmNvZGUgKCkpCi0gICAgewotICAgIGNhc2UgVFlQRV9DT0RFX1BUUjoKLSAgICBj YXNlIFRZUEVfQ09ERV9GVU5DOgotICAgIGNhc2UgVFlQRV9DT0RFX0ZMQUdTOgotICAgIGNh c2UgVFlQRV9DT0RFX0lOVDoKLSAgICBjYXNlIFRZUEVfQ09ERV9SQU5HRToKLSAgICBjYXNl IFRZUEVfQ09ERV9GTFQ6Ci0gICAgY2FzZSBUWVBFX0NPREVfRU5VTToKLSAgICBjYXNlIFRZ UEVfQ09ERV9SRUY6Ci0gICAgY2FzZSBUWVBFX0NPREVfUlZBTFVFX1JFRjoKLSAgICBjYXNl IFRZUEVfQ09ERV9DSEFSOgotICAgIGNhc2UgVFlQRV9DT0RFX0JPT0w6Ci0gICAgY2FzZSBU WVBFX0NPREVfREVDRkxPQVQ6Ci0gICAgY2FzZSBUWVBFX0NPREVfTUVUSE9EUFRSOgotICAg IGNhc2UgVFlQRV9DT0RFX01FTUJFUlBUUjoKLSAgICAgIHR5cGUgPSBjaGVja190eXBlZGVm ICh0eXBlKTsKLSAgICAgIHJldHVybiBzdGQ6Om1pbjxVTE9OR0VTVD4gKDQsIHR5cGUtPmxl bmd0aCAoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQot LyogSW1wbGVtZW50IHRoZSBnY2NfdGFyZ2V0X29wdGlvbnMgZ2RiYXJjaCBtZXRob2QuICAq Lwotc3RhdGljIHN0ZDo6c3RyaW5nCi1uaW9zMl9nY2NfdGFyZ2V0X29wdGlvbnMgKHN0cnVj dCBnZGJhcmNoICpnZGJhcmNoKQotewotICAvKiBHQ0MgZG9lc24ndCBrbm93ICItbTMyIi4g ICovCi0gIHJldHVybiB7fTsKLX0KLQotLyogSW5pdGlhbGl6ZSB0aGUgTmlvcyBJSSBnZGJh cmNoLiAgKi8KLQotc3RhdGljIHN0cnVjdCBnZGJhcmNoICoKLW5pb3MyX2dkYmFyY2hfaW5p dCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNo ZXMpCi17Ci0gIGludCBpOwotICB0ZGVzY19hcmNoX2RhdGFfdXAgdGRlc2NfZGF0YTsKLSAg Y29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzYyA9IGluZm8udGFyZ2V0X2Rlc2M7Ci0K LSAgaWYgKCF0ZGVzY19oYXNfcmVnaXN0ZXJzICh0ZGVzYykpCi0gICAgLyogUGljayBhIGRl ZmF1bHQgdGFyZ2V0IGRlc2NyaXB0aW9uLiAgKi8KLSAgICB0ZGVzYyA9IHRkZXNjX25pb3My OwotCi0gIC8qIENoZWNrIGFueSB0YXJnZXQgZGVzY3JpcHRpb24gZm9yIHZhbGlkaXR5LiAg Ki8KLSAgaWYgKHRkZXNjX2hhc19yZWdpc3RlcnMgKHRkZXNjKSkKLSAgICB7Ci0gICAgICBj b25zdCBzdHJ1Y3QgdGRlc2NfZmVhdHVyZSAqZmVhdHVyZTsKLSAgICAgIGludCB2YWxpZF9w OwotCi0gICAgICBmZWF0dXJlID0gdGRlc2NfZmluZF9mZWF0dXJlICh0ZGVzYywgIm9yZy5n bnUuZ2RiLm5pb3MyLmNwdSIpOwotICAgICAgaWYgKGZlYXR1cmUgPT0gTlVMTCkKLQlyZXR1 cm4gTlVMTDsKLQotICAgICAgdGRlc2NfZGF0YSA9IHRkZXNjX2RhdGFfYWxsb2MgKCk7Ci0K LSAgICAgIHZhbGlkX3AgPSAxOwotICAgICAgCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgTklP UzJfTlVNX1JFR1M7IGkrKykKLQl2YWxpZF9wICY9IHRkZXNjX251bWJlcmVkX3JlZ2lzdGVy IChmZWF0dXJlLCB0ZGVzY19kYXRhLmdldCAoKSwgaSwKLQkJCQkJICAgIG5pb3MyX3JlZ19u YW1lc1tpXSk7Ci0KLSAgICAgIGlmICghdmFsaWRfcCkKLQlyZXR1cm4gTlVMTDsKLSAgICB9 Ci0KLSAgLyogRmluZCBhIGNhbmRpZGF0ZSBhbW9uZyB0aGUgbGlzdCBvZiBwcmUtZGVjbGFy ZWQgYXJjaGl0ZWN0dXJlcy4gICovCi0gIGFyY2hlcyA9IGdkYmFyY2hfbGlzdF9sb29rdXBf YnlfaW5mbyAoYXJjaGVzLCAmaW5mbyk7Ci0gIGlmIChhcmNoZXMgIT0gTlVMTCkKLSAgICBy ZXR1cm4gYXJjaGVzLT5nZGJhcmNoOwotCi0gIC8qIE5vbmUgZm91bmQsIGNyZWF0ZSBhIG5l dyBhcmNoaXRlY3R1cmUgZnJvbSB0aGUgaW5mb3JtYXRpb24KLSAgICAgcHJvdmlkZWQuICAq LwotICBnZGJhcmNoICpnZGJhcmNoCi0gICAgPSBnZGJhcmNoX2FsbG9jICgmaW5mbywgZ2Ri YXJjaF90ZGVwX3VwIChuZXcgbmlvczJfZ2RiYXJjaF90ZGVwKSk7Ci0gIG5pb3MyX2dkYmFy Y2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcDxuaW9zMl9nZGJhcmNoX3RkZXA+IChnZGJh cmNoKTsKLQotICAvKiBsb25nam1wIHN1cHBvcnQgbm90IGVuYWJsZWQgYnkgZGVmYXVsdC4g ICovCi0gIHRkZXAtPmpiX3BjID0gLTE7Ci0KLSAgLyogRGF0YSB0eXBlIHNpemVzLiAgKi8K LSAgc2V0X2dkYmFyY2hfcHRyX2JpdCAoZ2RiYXJjaCwgMzIpOwotICBzZXRfZ2RiYXJjaF9h ZGRyX2JpdCAoZ2RiYXJjaCwgMzIpOwotICBzZXRfZ2RiYXJjaF9zaG9ydF9iaXQgKGdkYmFy Y2gsIDE2KTsKLSAgc2V0X2dkYmFyY2hfaW50X2JpdCAoZ2RiYXJjaCwgMzIpOwotICBzZXRf Z2RiYXJjaF9sb25nX2JpdCAoZ2RiYXJjaCwgMzIpOwotICBzZXRfZ2RiYXJjaF9sb25nX2xv bmdfYml0IChnZGJhcmNoLCA2NCk7Ci0gIHNldF9nZGJhcmNoX2Zsb2F0X2JpdCAoZ2RiYXJj aCwgMzIpOwotICBzZXRfZ2RiYXJjaF9kb3VibGVfYml0IChnZGJhcmNoLCA2NCk7Ci0KLSAg c2V0X2dkYmFyY2hfdHlwZV9hbGlnbiAoZ2RiYXJjaCwgbmlvczJfdHlwZV9hbGlnbik7Ci0K LSAgc2V0X2dkYmFyY2hfZmxvYXRfZm9ybWF0IChnZGJhcmNoLCBmbG9hdGZvcm1hdHNfaWVl ZV9zaW5nbGUpOwotICBzZXRfZ2RiYXJjaF9kb3VibGVfZm9ybWF0IChnZGJhcmNoLCBmbG9h dGZvcm1hdHNfaWVlZV9kb3VibGUpOwotCi0gIC8qIFRoZSByZWdpc3RlciBzZXQuICAqLwot ICBzZXRfZ2RiYXJjaF9udW1fcmVncyAoZ2RiYXJjaCwgTklPUzJfTlVNX1JFR1MpOwotICBz ZXRfZ2RiYXJjaF9zcF9yZWdudW0gKGdkYmFyY2gsIE5JT1MyX1NQX1JFR05VTSk7Ci0gIHNl dF9nZGJhcmNoX3BjX3JlZ251bSAoZ2RiYXJjaCwgTklPUzJfUENfUkVHTlVNKTsJLyogUHNl dWRvIHJlZ2lzdGVyIFBDICovCi0KLSAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfbmFtZSAoZ2Ri YXJjaCwgbmlvczJfcmVnaXN0ZXJfbmFtZSk7Ci0gIHNldF9nZGJhcmNoX3JlZ2lzdGVyX3R5 cGUgKGdkYmFyY2gsIG5pb3MyX3JlZ2lzdGVyX3R5cGUpOwotCi0gIC8qIFByb3ZpZGUgcmVn aXN0ZXIgbWFwcGluZ3MgZm9yIHN0YWJzIGFuZCBkd2FyZjIuICAqLwotICBzZXRfZ2RiYXJj aF9zdGFiX3JlZ190b19yZWdudW0gKGdkYmFyY2gsIG5pb3MyX2R3YXJmX3JlZ190b19yZWdu dW0pOwotICBzZXRfZ2RiYXJjaF9kd2FyZjJfcmVnX3RvX3JlZ251bSAoZ2RiYXJjaCwgbmlv czJfZHdhcmZfcmVnX3RvX3JlZ251bSk7Ci0KLSAgc2V0X2dkYmFyY2hfaW5uZXJfdGhhbiAo Z2RiYXJjaCwgY29yZV9hZGRyX2xlc3N0aGFuKTsKLQotICAvKiBDYWxsIGR1bW15IGNvZGUu ICAqLwotICBzZXRfZ2RiYXJjaF9mcmFtZV9hbGlnbiAoZ2RiYXJjaCwgbmlvczJfZnJhbWVf YWxpZ24pOwotCi0gIHNldF9nZGJhcmNoX3JldHVybl92YWx1ZSAoZ2RiYXJjaCwgbmlvczJf cmV0dXJuX3ZhbHVlKTsKLQotICBzZXRfZ2RiYXJjaF9za2lwX3Byb2xvZ3VlIChnZGJhcmNo LCBuaW9zMl9za2lwX3Byb2xvZ3VlKTsKLSAgc2V0X2dkYmFyY2hfc3RhY2tfZnJhbWVfZGVz dHJveWVkX3AgKGdkYmFyY2gsIG5pb3MyX3N0YWNrX2ZyYW1lX2Rlc3Ryb3llZF9wKTsKLSAg c2V0X2dkYmFyY2hfYnJlYWtwb2ludF9raW5kX2Zyb21fcGMgKGdkYmFyY2gsIG5pb3MyX2Jy ZWFrcG9pbnRfa2luZF9mcm9tX3BjKTsKLSAgc2V0X2dkYmFyY2hfc3dfYnJlYWtwb2ludF9m cm9tX2tpbmQgKGdkYmFyY2gsIG5pb3MyX3N3X2JyZWFrcG9pbnRfZnJvbV9raW5kKTsKLQot ICBzZXRfZ2RiYXJjaF91bndpbmRfcGMgKGdkYmFyY2gsIG5pb3MyX3Vud2luZF9wYyk7Ci0K LSAgLyogVGhlIGR3YXJmMiB1bndpbmRlciB3aWxsIG5vcm1hbGx5IHByb2R1Y2UgdGhlIGJl c3QgcmVzdWx0cyBpZgotICAgICB0aGUgZGVidWcgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxl LCBzbyByZWdpc3RlciBpdCBmaXJzdC4gICovCi0gIGR3YXJmMl9hcHBlbmRfdW53aW5kZXJz IChnZGJhcmNoKTsKLSAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndpbmRlciAoZ2RiYXJjaCwg Jm5pb3MyX3N0dWJfZnJhbWVfdW53aW5kKTsKLSAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndp bmRlciAoZ2RiYXJjaCwgJm5pb3MyX2ZyYW1lX3Vud2luZCk7Ci0KLSAgLyogU2luZ2xlIHN0 ZXBwaW5nLiAgKi8KLSAgc2V0X2dkYmFyY2hfc29mdHdhcmVfc2luZ2xlX3N0ZXAgKGdkYmFy Y2gsIG5pb3MyX3NvZnR3YXJlX3NpbmdsZV9zdGVwKTsKLQotICAvKiBUYXJnZXQgb3B0aW9u cyBmb3IgY29tcGlsZS4gICovCi0gIHNldF9nZGJhcmNoX2djY190YXJnZXRfb3B0aW9ucyAo Z2RiYXJjaCwgbmlvczJfZ2NjX3RhcmdldF9vcHRpb25zKTsKLQotICAvKiBIb29rIGluIEFC SS1zcGVjaWZpYyBvdmVycmlkZXMsIGlmIHRoZXkgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuICAq LwotICBnZGJhcmNoX2luaXRfb3NhYmkgKGluZm8sIGdkYmFyY2gpOwotCi0gIGlmICh0ZGVw LT5qYl9wYyA+PSAwKQotICAgIHNldF9nZGJhcmNoX2dldF9sb25nam1wX3RhcmdldCAoZ2Ri YXJjaCwgbmlvczJfZ2V0X2xvbmdqbXBfdGFyZ2V0KTsKLQotICBmcmFtZV9iYXNlX3NldF9k ZWZhdWx0IChnZGJhcmNoLCAmbmlvczJfZnJhbWVfYmFzZSk7Ci0KLSAgLyogRW5hYmxlIGlu ZmVyaW9yIGNhbGwgc3VwcG9ydC4gICovCi0gIHNldF9nZGJhcmNoX3B1c2hfZHVtbXlfY2Fs bCAoZ2RiYXJjaCwgbmlvczJfcHVzaF9kdW1teV9jYWxsKTsKLQotICBpZiAodGRlc2NfZGF0 YSAhPSBudWxscHRyKQotICAgIHRkZXNjX3VzZV9yZWdpc3RlcnMgKGdkYmFyY2gsIHRkZXNj LCBzdGQ6Om1vdmUgKHRkZXNjX2RhdGEpKTsKLQotICByZXR1cm4gZ2RiYXJjaDsKLX0KLQot dm9pZCBfaW5pdGlhbGl6ZV9uaW9zMl90ZGVwICgpOwotdm9pZAotX2luaXRpYWxpemVfbmlv czJfdGRlcCAoKQotewotICBnZGJhcmNoX3JlZ2lzdGVyIChiZmRfYXJjaF9uaW9zMiwgbmlv czJfZ2RiYXJjaF9pbml0LCBOVUxMKTsKLSAgaW5pdGlhbGl6ZV90ZGVzY19uaW9zMiAoKTsK LQotICAvKiBBbGxvdyBkZWJ1Z2dpbmcgdGhpcyBmaWxlJ3MgaW50ZXJuYWxzLiAgKi8KLSAg YWRkX3NldHNob3dfYm9vbGVhbl9jbWQgKCJuaW9zMiIsIGNsYXNzX21haW50ZW5hbmNlLCAm bmlvczJfZGVidWcsCi0JCQkgICBfKCJTZXQgTmlvcyBJSSBkZWJ1Z2dpbmcuIiksCi0JCQkg ICBfKCJTaG93IE5pb3MgSUkgZGVidWdnaW5nLiIpLAotCQkJICAgXygiV2hlbiBvbiwgTmlv cyBJSSBzcGVjaWZpYyBkZWJ1Z2dpbmcgaXMgZW5hYmxlZC4iKSwKLQkJCSAgIE5VTEwsCi0J CQkgICBOVUxMLAotCQkJICAgJnNldGRlYnVnbGlzdCwgJnNob3dkZWJ1Z2xpc3QpOwotfQpk aWZmIC0tZ2l0IGEvZ2RiL25pb3MyLXRkZXAuaCBiL2dkYi9uaW9zMi10ZGVwLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZTBkZTcwNzZkLi4wMDAwMDAwMDAwMAotLS0g YS9nZGIvbmlvczItdGRlcC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyog VGFyZ2V0LWRlcGVuZGVudCBoZWFkZXIgZm9yIHRoZSBOaW9zIElJIGFyY2hpdGVjdHVyZSwg Zm9yIEdEQi4KLSAgIENvcHlyaWdodCAoQykgMjAxMi0yMDI0IEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgotICAgQ29udHJpYnV0ZWQgYnkgTWVudG9yIEdyYXBoaWNzLCBJbmMu Ci0KLSAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KLQotICAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK LSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLQotI2lmbmRl ZiBOSU9TMl9UREVQX0gKLSNkZWZpbmUgTklPUzJfVERFUF9ICi0KLSNpbmNsdWRlICJnZGJh cmNoLmgiCi0KLS8qIE5pb3MgSUkgSVNBIHNwZWNpZmljIGVuY29kaW5ncyBhbmQgbWFjcm9z LiAgKi8KLSNpbmNsdWRlICJvcGNvZGUvbmlvczIuaCIKLQotLyogUmVnaXN0ZXJzLiAgKi8K LSNkZWZpbmUgTklPUzJfWl9SRUdOVU0gMCAgICAgLyogWmVybyAqLwotI2RlZmluZSBOSU9T Ml9SMl9SRUdOVU0gMiAgICAvKiB1c2VkIGZvciByZXR1cm4gdmFsdWUgKi8KLSNkZWZpbmUg TklPUzJfUjNfUkVHTlVNIDMgICAgLyogdXNlZCBmb3IgcmV0dXJuIHZhbHVlICovCi0vKiBV c2VkIGZvciBoaWRkZW4gemVybyBhcmd1bWVudCB0byBzdG9yZSBwdHIgdG8gc3RydWN0IHJl dHVybiB2YWx1ZS4gICovCi0jZGVmaW5lIE5JT1MyX1I0X1JFR05VTSA0Ci0jZGVmaW5lIE5J T1MyX1I3X1JFR05VTSA3Ci0jZGVmaW5lIE5JT1MyX0dQX1JFR05VTSAyNiAgLyogR2xvYmFs IFBvaW50ZXIgKi8KLSNkZWZpbmUgTklPUzJfU1BfUkVHTlVNIDI3ICAvKiBTdGFjayBQb2lu dGVyICovCi0jZGVmaW5lIE5JT1MyX0ZQX1JFR05VTSAyOCAgLyogRnJhbWUgUG9pbnRlciAq LwotI2RlZmluZSBOSU9TMl9FQV9SRUdOVU0gMjkgIC8qIEV4Y2VwdGlvbiBhZGRyZXNzICov Ci0jZGVmaW5lIE5JT1MyX0JBX1JFR05VTSAzMCAgLyogQnJlYWtwb2ludCByZXR1cm4gYWRk cmVzcyAqLwotI2RlZmluZSBOSU9TMl9SQV9SRUdOVU0gMzEgIC8qIFJldHVybiBhZGRyZXNz ICovCi0jZGVmaW5lIE5JT1MyX1BDX1JFR05VTSAzMgotCi0vKiBDb250cm9sIHJlZ2lzdGVy cy4gICovCi0jZGVmaW5lIE5JT1MyX1NUQVRVU19SRUdOVU0gMzMKLSNkZWZpbmUgTklPUzJf RVNUQVRVU19SRUdOVU0gMzQKLSNkZWZpbmUgTklPUzJfQlNUQVRVU19SRUdOVU0gMzUKLSNk ZWZpbmUgTklPUzJfSUVOQUJMRV9SRUdOVU0gMzYKLSNkZWZpbmUgTklPUzJfSVBFTkRJTkdf UkVHTlVNIDM3Ci0jZGVmaW5lIE5JT1MyX0NQVUlEX1JFR05VTSAzOAotI2RlZmluZSBOSU9T Ml9FWENFUFRJT05fUkVHTlVNIDQwCi0jZGVmaW5lIE5JT1MyX1BURUFERFJfUkVHTlVNIDQx Ci0jZGVmaW5lIE5JT1MyX1RMQkFDQ19SRUdOVU0gNDIKLSNkZWZpbmUgTklPUzJfVExCTUlT Q19SRUdOVU0gNDMKLSNkZWZpbmUgTklPUzJfRUNDSU5KX1JFR05VTSA0NAotI2RlZmluZSBO SU9TMl9CQURBRERSX1JFR05VTSA0NQotI2RlZmluZSBOSU9TMl9DT05GSUdfUkVHTlVNIDQ2 Ci0jZGVmaW5lIE5JT1MyX01QVUJBU0VfUkVHTlVNIDQ3Ci0jZGVmaW5lIE5JT1MyX01QVUFD Q19SRUdOVU0gNDgKLQotLyogUjQtUjcgYXJlIHVzZWQgZm9yIGFyZ3VtZW50IHBhc3Npbmcu ICAqLwotI2RlZmluZSBOSU9TMl9GSVJTVF9BUkdSRUcgTklPUzJfUjRfUkVHTlVNCi0jZGVm aW5lIE5JT1MyX0xBU1RfQVJHUkVHIE5JT1MyX1I3X1JFR05VTQotCi0vKiBOdW1iZXIgb2Yg YWxsIHJlZ2lzdGVycy4gICovCi0jZGVmaW5lIE5JT1MyX05VTV9SRUdTIDQ5Ci0KLS8qIFNp emUgb2YgYW4gaW5zdHJ1Y3Rpb24sIGluIGJ5dGVzLiAgKi8KLSNkZWZpbmUgTklPUzJfT1BD T0RFX1NJWkUgNAotI2RlZmluZSBOSU9TMl9DRFhfT1BDT0RFX1NJWkUgMgotCi0vKiBUYXJn ZXQtZGVwZW5kZW50IHN0cnVjdHVyZSBpbiBnZGJhcmNoLiAgKi8KLXN0cnVjdCBuaW9zMl9n ZGJhcmNoX3RkZXAgOiBnZGJhcmNoX3RkZXBfYmFzZQotewotICAvKiBBc3N1bWVzIEZSQU1F IGlzIHN0b3BwZWQgYXQgYSBzeXNjYWxsICh0cmFwKSBpbnN0cnVjdGlvbjsgcmV0dXJucwot ICAgICB0aGUgZXhwZWN0ZWQgbmV4dCBQQy4gICovCi0gIENPUkVfQUREUiAoKnN5c2NhbGxf bmV4dF9wYykgKGNvbnN0IGZyYW1lX2luZm9fcHRyICZmcmFtZSwKLQkJCQljb25zdCBzdHJ1 Y3QgbmlvczJfb3Bjb2RlICpvcCkgPSBudWxscHRyOwotCi0gIC8qIFJldHVybnMgdHJ1ZSBp ZiBQQyBwb2ludHMgdG8gYSBrZXJuZWwgaGVscGVyIGZ1bmN0aW9uLiAgKi8KLSAgYm9vbCAo KmlzX2tlcm5lbF9oZWxwZXIpIChDT1JFX0FERFIgcGMpID0gbnVsbHB0cjsKLQotICAvKiBP ZmZzZXQgdG8gUEMgdmFsdWUgaW4ganVtcCBidWZmZXIuCi0gICAgIElmIHRoaXMgaXMgbmVn YXRpdmUsIGxvbmdqbXAgc3VwcG9ydCB3aWxsIGJlIGRpc2FibGVkLiAgKi8KLSAgaW50IGpi X3BjID0gMDsKLX07Ci0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNj X25pb3MyX2xpbnV4OwotZXh0ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2Nf bmlvczI7Ci0KLSNlbmRpZiAvKiBOSU9TMl9UREVQX0ggKi8KZGlmZiAtLWdpdCBhL2dkYi9y ZWdmb3JtYXRzL25pb3MyLWxpbnV4LmRhdCBiL2dkYi9yZWdmb3JtYXRzL25pb3MyLWxpbnV4 LmRhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNmY2E3MmVjNmQuLjAwMDAw MDAwMDAwCi0tLSBhL2dkYi9yZWdmb3JtYXRzL25pb3MyLWxpbnV4LmRhdAorKysgL2Rldi9u dWxsCkBAIC0xLDU1ICswLDAgQEAKLSMgVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gIC0qLSBi dWZmZXItcmVhZC1vbmx5OiB0IC0qLSB2aSA6c2V0IHJvOgotIyBHZW5lcmF0ZWQgZnJvbTog bmlvczItbGludXgueG1sCi1uYW1lOm5pb3MyX2xpbnV4Ci14bWx0YXJnZXQ6bmlvczItbGlu dXgueG1sCi1leHBlZGl0ZTpzcCxwYwotb3NhYmk6R05VL0xpbnV4Ci0zMjp6ZXJvCi0zMjph dAotMzI6cjIKLTMyOnIzCi0zMjpyNAotMzI6cjUKLTMyOnI2Ci0zMjpyNwotMzI6cjgKLTMy OnI5Ci0zMjpyMTAKLTMyOnIxMQotMzI6cjEyCi0zMjpyMTMKLTMyOnIxNAotMzI6cjE1Ci0z MjpyMTYKLTMyOnIxNwotMzI6cjE4Ci0zMjpyMTkKLTMyOnIyMAotMzI6cjIxCi0zMjpyMjIK LTMyOnIyMwotMzI6ZXQKLTMyOmJ0Ci0zMjpncAotMzI6c3AKLTMyOmZwCi0zMjplYQotMzI6 c3N0YXR1cwotMzI6cmEKLTMyOnBjCi0zMjpzdGF0dXMKLTMyOmVzdGF0dXMKLTMyOmJzdGF0 dXMKLTMyOmllbmFibGUKLTMyOmlwZW5kaW5nCi0zMjpjcHVpZAotMzI6Y3RsNgotMzI6ZXhj ZXB0aW9uCi0zMjpwdGVhZGRyCi0zMjp0bGJhY2MKLTMyOnRsYm1pc2MKLTMyOmVjY2luagot MzI6YmFkYWRkcgotMzI6Y29uZmlnCi0zMjptcHViYXNlCi0zMjptcHVhY2MKZGlmZiAtLWdp dCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWx0c3RhY2suZXhwIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIuYmFzZS9zaWdhbHRzdGFjay5leHAKaW5kZXggYWUxNjM0ZmZkZTQuLmZlYTRl N2M0MWM1IDEwMDY0NAotLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsdHN0YWNr LmV4cAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsdHN0YWNrLmV4cApAQCAt NzMsNyArNzMsNiBAQCBwcm9jIGZpbmlzaF90ZXN0IHsgcGF0dGVybiBtc2cgfSB7CiAJICAg ICMgZG9uJ3QgZ3JhY2VmdWxseSBmYWxsIGJhY2sgdG8gc2luZ2xlLXN0ZXBwaW5nLgogCSAg ICBzZXR1cF9rZmFpbCBnZGIvODg0MSAiaT84Ni0qLWxpbnV4KiIKIAkgICAgc2V0dXBfa2Zh aWwgZ2RiLzg4NDEgIiotKi1vcGVuYnNkKiIKLQkgICAgc2V0dXBfa2ZhaWwgZ2RiLzg4NDEg Im5pb3MyLSotbGludXgqIgogCSAgICBmYWlsICIkbXNnIChjb3VsZCBub3Qgc2V0IGJyZWFr cG9pbnQpIgogCX0KIAktcmUgIiRwYXR0ZXJuLioke2dkYl9wcm9tcHR9ICQiIHsKZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYnB0LmV4cCBiL2dkYi90ZXN0c3Vp dGUvZ2RiLmJhc2Uvc2lnYnB0LmV4cAppbmRleCA2ZjQ2MTZlNjU5OC4uNjgwOGRiMjA0MTUg MTAwNjQ0Ci0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYnB0LmV4cAorKysgYi9n ZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2JwdC5leHAKQEAgLTE1OCw3ICsxNTgsNiBAQCBw cm9jIHN0ZXBpX291dCB7IG5hbWUgYXJncyB9IHsKIAkgICAgZmFpbCAiJHRlc3QgKGNvdWxk IG5vdCBpbnNlcnQgc2luZ2xlLXN0ZXAgYnJlYWtwb2ludCkiCiAJfQogCS1yZSAiQ2Fubm90 IGluc2VydCBicmVha3BvaW50LipDYW5ub3QgYWNjZXNzIG1lbW9yeS4qJGdkYl9wcm9tcHQg JCIgewotCSAgICBzZXR1cF9rZmFpbCBnZGIvODg0MSAibmlvczIqLSotbGludXgqIgogCSAg ICBmYWlsICIkdGVzdCAoY291bGQgbm90IGluc2VydCBzaW5nbGUtc3RlcCBicmVha3BvaW50 KSIKIAl9CiAJLXJlICJrZWVwZXIuKiRnZGJfcHJvbXB0ICQiIHsKZGlmZiAtLWdpdCBhL2dk Yi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnaW5mby5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5i YXNlL3NpZ2luZm8uZXhwCmluZGV4IDQ5MTRlM2Q2MzkxLi5kNzAzMjUwMjFiYSAxMDA2NDQK LS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdpbmZvLmV4cAorKysgYi9nZGIvdGVz dHN1aXRlL2dkYi5iYXNlL3NpZ2luZm8uZXhwCkBAIC02MSw3ICs2MSw2IEBAIGdkYl90ZXN0 X211bHRpcGxlICJzdGVwIiAiJHt0ZXN0fSIgewogCWZhaWwgIiR0ZXN0IChjb3VsZCBub3Qg aW5zZXJ0IHNpbmdsZS1zdGVwIGJyZWFrcG9pbnQpIgogICAgIH0KICAgICAtcmUgIkNhbm5v dCBpbnNlcnQgYnJlYWtwb2ludC4qQ2Fubm90IGFjY2VzcyBtZW1vcnkuKiRnZGJfcHJvbXB0 ICQiIHsKLSAgICAgICAgc2V0dXBfa2ZhaWwgZ2RiLzg4NDEgIm5pb3MyKi0qLWxpbnV4KiIK IAlmYWlsICIkdGVzdCAoY291bGQgbm90IGluc2VydCBzaW5nbGUtc3RlcCBicmVha3BvaW50 KSIKICAgICB9CiAgICAgLXJlICJkb25lID0gMTsuKiR7Z2RiX3Byb21wdH0gJCIgewpkaWZm IC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdzdGVwLmV4cCBiL2dkYi90ZXN0 c3VpdGUvZ2RiLmJhc2Uvc2lnc3RlcC5leHAKaW5kZXggNDQzN2JmNjA4N2IuLjMxNWQ4OWQ5 N2M1IDEwMDY0NAotLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ3N0ZXAuZXhwCisr KyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnc3RlcC5leHAKQEAgLTExNyw3ICsxMTcs NiBAQCBwcm9jIGFkdmFuY2UgeyBlbnRlcl9jbWQgaW5faGFuZGxlcl9wcmVmaXggaW5faGFu ZGxlciBleGl0X2NtZCB9IHsKIAkJZmFpbCAiJHRlc3QgKGNvdWxkIG5vdCBpbnNlcnQgc2lu Z2xlLXN0ZXAgYnJlYWtwb2ludCkiCiAJICAgIH0KIAkgICAgLXJlICJDYW5ub3QgaW5zZXJ0 IGJyZWFrcG9pbnQuKkNhbm5vdCBhY2Nlc3MgbWVtb3J5LiokZ2RiX3Byb21wdCAkIiB7Ci0J CXNldHVwX2tmYWlsIGdkYi84ODQxICJuaW9zMiotKi1saW51eCoiCiAJCWZhaWwgIiR0ZXN0 IChjb3VsZCBub3QgaW5zZXJ0IHNpbmdsZS1zdGVwIGJyZWFrcG9pbnQpIgogCSAgICB9CiAJ ICAgIC1yZSAiZG9uZSA9IDE7Lioke2dkYl9wcm9tcHR9ICQiIHsKQEAgLTIxNCw3ICsyMTMs NiBAQCBwcm9jIGFkdmFuY2VpIHsgY21kIH0gewogCQkjIGRvbid0IGdyYWNlZnVsbHkgZmFs bCBiYWNrIHRvIHNpbmdsZS1zdGVwcGluZy4KIAkJc2V0dXBfa2ZhaWwgZ2RiLzg4NDEgImk/ ODYtKi1saW51eCoiCiAJCXNldHVwX2tmYWlsIGdkYi84ODQxICIqLSotb3BlbmJzZCoiCi0J CXNldHVwX2tmYWlsIGdkYi84ODQxICJuaW9zMi0qLWxpbnV4KiIKIAkJZmFpbCAiJHRlc3Qg KGNvdWxkIG5vdCBzZXQgYnJlYWtwb2ludCkiCiAJCXJldHVybgogCSAgICB9CmRpZmYgLS1n aXQgYS9nZGIvdGVzdHN1aXRlL2dkYi54bWwvdGRlc2MtcmVncy5leHAgYi9nZGIvdGVzdHN1 aXRlL2dkYi54bWwvdGRlc2MtcmVncy5leHAKaW5kZXggMzQ0ZTM4NzAwNGEuLjYzOWM4ZDVj OWJiIDEwMDY0NAotLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi54bWwvdGRlc2MtcmVncy5leHAK KysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIueG1sL3RkZXNjLXJlZ3MuZXhwCkBAIC00NSw5ICs0 NSw2IEBAIHN3aXRjaCAtZ2xvYiAtLSBbaXN0YXJnZXRdIHsKICAgICAibmRzMzIqLSotKiIg ewogCXNldCBjb3JlLXJlZ3Mge25kczMyLWNvcmUueG1sfQogICAgIH0KLSAgICAibmlvczIt Ki0qIiB7Ci0Jc2V0IGNvcmUtcmVncyB7bmlvczItY3B1LnhtbH0KLSAgICB9CiAgICAgIm9y MWstKi0qIiB7CiAJc2V0IGNvcmUtcmVncyB7b3Ixay1jb3JlLnhtbH0KICAgICB9CmRpZmYg LS1naXQgYS9nZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9saWIv Z2RiLmV4cAppbmRleCA1ZDRkOWRiM2VhNC4uYTUwMTk3YzlmMGIgMTAwNjQ0Ci0tLSBhL2dk Yi90ZXN0c3VpdGUvbGliL2dkYi5leHAKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4 cApAQCAtMzY2OSw3ICszNjY5LDcgQEAgcHJvYyBjYW5faGFyZHdhcmVfc2luZ2xlX3N0ZXAg e30gewogCiAgICAgaWYgeyBbaXN0YXJnZXQgImFybSotKi0qIl0gfHwgW2lzdGFyZ2V0ICJt aXBzKi0qLSoiXQogCSB8fCBbaXN0YXJnZXQgInRpYzZ4LSotKiJdIHx8IFtpc3RhcmdldCAi c3BhcmMqLSotbGludXgqIl0KLQkgfHwgW2lzdGFyZ2V0ICJuaW9zMi0qLSoiXSB8fCBbaXN0 YXJnZXQgInJpc2N2Ki0qLWxpbnV4KiJdIH0geworCSB8fCBbaXN0YXJnZXQgInJpc2N2Ki0q LWxpbnV4KiJdIH0gewogCXJldHVybiAwCiAgICAgfQogCmRpZmYgLS1naXQgYS9nZGJzZXJ2 ZXIvTWFrZWZpbGUuaW4gYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4KaW5kZXggZjU1NWZmNDM5 YzQuLjM2NWRjZjIzNjUwIDEwMDY0NAotLS0gYS9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4KKysr IGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCkBAIC0xOTksNyArMTk5LDYgQEAgU0ZJTEVTID0g XAogCSQoc3JjZGlyKS9saW51eC1sb3cuY2MgXAogCSQoc3JjZGlyKS9saW51eC1tNjhrLWxv dy5jYyBcCiAJJChzcmNkaXIpL2xpbnV4LW1pcHMtbG93LmNjIFwKLQkkKHNyY2RpcikvbGlu dXgtbmlvczItbG93LmNjIFwKIAkkKHNyY2RpcikvbGludXgtb3Ixay1sb3cuY2MgXAogCSQo c3JjZGlyKS9saW51eC1wcGMtbG93LmNjIFwKIAkkKHNyY2RpcikvbGludXgtcmlzY3YtbG93 LmNjIFwKZGlmZiAtLWdpdCBhL2dkYnNlcnZlci9jb25maWd1cmUuc3J2IGIvZ2Ric2VydmVy L2NvbmZpZ3VyZS5zcnYKaW5kZXggOTUzNTkxMzdmNGYuLmZmYzg0OTQ4MzE3IDEwMDY0NAot LS0gYS9nZGJzZXJ2ZXIvY29uZmlndXJlLnNydgorKysgYi9nZGJzZXJ2ZXIvY29uZmlndXJl LnNydgpAQCAtMTg4LDE0ICsxODgsNiBAQCBjYXNlICIke2dkYnNlcnZlcl9ob3N0fSIgaW4K IAkJCXNydl9saW51eF91c3JyZWdzPXllcwogCQkJc3J2X2xpbnV4X3RocmVhZF9kYj15ZXMK IAkJCTs7Ci0gIG5pb3MyKi0qLWxpbnV4KikJc3J2X3JlZ29iaj0ibmlvczItbGludXgubyIK LQkJCXNydl90Z3RvYmo9IiRzcnZfbGludXhfb2JqIGxpbnV4LW5pb3MyLWxvdy5vIgotCQkJ c3J2X3htbGZpbGVzPSJuaW9zMi1saW51eC54bWwiCi0JCQlzcnZfeG1sZmlsZXM9IiR7c3J2 X3htbGZpbGVzfSBuaW9zMi1jcHUueG1sIgotCQkJc3J2X2xpbnV4X3JlZ3NldHM9eWVzCi0J CQlzcnZfbGludXhfdXNycmVncz15ZXMKLQkJCXNydl9saW51eF90aHJlYWRfZGI9eWVzCi0J CQk7OwogICBvcjFrKi0qLWxpbnV4KikJc3J2X3JlZ29iaj0ib3Ixay1saW51eC5vIgogCQkJ c3J2X3RndG9iaj0iJHNydl9saW51eF9vYmogbGludXgtb3Ixay1sb3cubyIKIAkJCXNydl94 bWxmaWxlcz0ib3Ixay1saW51eC54bWwiCmRpZmYgLS1naXQgYS9nZGJzZXJ2ZXIvbGludXgt bmlvczItbG93LmNjIGIvZ2Ric2VydmVyL2xpbnV4LW5pb3MyLWxvdy5jYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggYzM3YmI1YTVkYTkuLjAwMDAwMDAwMDAwCi0tLSBhL2dk YnNlcnZlci9saW51eC1uaW9zMi1sb3cuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyODkgKzAs MCBAQAotLyogR05VL0xpbnV4L05pb3MgSUkgc3BlY2lmaWMgbG93IGxldmVsIGludGVyZmFj ZSwgZm9yIHRoZSByZW1vdGUgc2VydmVyIGZvcgotICAgR0RCLgotICAgQ29weXJpZ2h0IChD KSAyMDA4LTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIENvbnRy aWJ1dGVkIGJ5IE1lbnRvciBHcmFwaGljcywgSW5jLgotCi0gICBUaGlzIGZpbGUgaXMgcGFy dCBvZiBHREIuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K LSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4gICovCi0KLSNpbmNsdWRlICJsaW51eC1sb3cuaCIKLSNpbmNs dWRlICJlbGYvY29tbW9uLmgiCi0jaW5jbHVkZSAibmF0L2dkYl9wdHJhY2UuaCIKLSNpbmNs dWRlIDxlbmRpYW4uaD4KLSNpbmNsdWRlICJnZGJfcHJvY19zZXJ2aWNlLmgiCi0jaW5jbHVk ZSA8YXNtL3B0cmFjZS5oPgotCi0jaWZuZGVmIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUEKLSNk ZWZpbmUgUFRSQUNFX0dFVF9USFJFQURfQVJFQSAyNQotI2VuZGlmCi0KLS8qIExpbnV4IHRh cmdldCBvcCBkZWZpbml0aW9ucyBmb3IgdGhlIE5JT1MgSUkgYXJjaGl0ZWN0dXJlLiAgKi8K LQotY2xhc3MgbmlvczJfdGFyZ2V0IDogcHVibGljIGxpbnV4X3Byb2Nlc3NfdGFyZ2V0Ci17 Ci1wdWJsaWM6Ci0KLSAgY29uc3QgcmVnc19pbmZvICpnZXRfcmVnc19pbmZvICgpIG92ZXJy aWRlOwotCi0gIGNvbnN0IGdkYl9ieXRlICpzd19icmVha3BvaW50X2Zyb21fa2luZCAoaW50 IGtpbmQsIGludCAqc2l6ZSkgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLQotICB2b2lkIGxv d19hcmNoX3NldHVwICgpIG92ZXJyaWRlOwotCi0gIGJvb2wgbG93X2Nhbm5vdF9mZXRjaF9y ZWdpc3RlciAoaW50IHJlZ25vKSBvdmVycmlkZTsKLQotICBib29sIGxvd19jYW5ub3Rfc3Rv cmVfcmVnaXN0ZXIgKGludCByZWdubykgb3ZlcnJpZGU7Ci0KLSAgYm9vbCBsb3dfc3VwcG9y dHNfYnJlYWtwb2ludHMgKCkgb3ZlcnJpZGU7Ci0KLSAgQ09SRV9BRERSIGxvd19nZXRfcGMg KHJlZ2NhY2hlICpyZWdjYWNoZSkgb3ZlcnJpZGU7Ci0KLSAgdm9pZCBsb3dfc2V0X3BjIChy ZWdjYWNoZSAqcmVnY2FjaGUsIENPUkVfQUREUiBuZXdwYykgb3ZlcnJpZGU7Ci0KLSAgYm9v bCBsb3dfYnJlYWtwb2ludF9hdCAoQ09SRV9BRERSIHBjKSBvdmVycmlkZTsKLX07Ci0KLS8q IFRoZSBzaW5nbGV0b24gdGFyZ2V0IG9wcyBvYmplY3QuICAqLwotCi1zdGF0aWMgbmlvczJf dGFyZ2V0IHRoZV9uaW9zMl90YXJnZXQ7Ci0KLWJvb2wKLW5pb3MyX3RhcmdldDo6bG93X3N1 cHBvcnRzX2JyZWFrcG9pbnRzICgpCi17Ci0gIHJldHVybiB0cnVlOwotfQotCi1DT1JFX0FE RFIKLW5pb3MyX3RhcmdldDo6bG93X2dldF9wYyAocmVnY2FjaGUgKnJlZ2NhY2hlKQotewot ICByZXR1cm4gbGludXhfZ2V0X3BjXzMyYml0IChyZWdjYWNoZSk7Ci19Ci0KLXZvaWQKLW5p b3MyX3RhcmdldDo6bG93X3NldF9wYyAocmVnY2FjaGUgKnJlZ2NhY2hlLCBDT1JFX0FERFIg cGMpCi17Ci0gIGxpbnV4X3NldF9wY18zMmJpdCAocmVnY2FjaGUsIHBjKTsKLX0KLQotLyog VGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIG11c3QgYWdyZWUgd2l0aCB0aGUgbnVtYmVyIG9m IHJlZ2lzdGVycwotICAgZGVmaW5lZCBpbiAic3RydWN0IHVzZXJfcmVncyIgaW4gR0xJQkMK LSAgIChzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9uaW9zMi9zeXMvdXNlci5oKSwgYW5kIGFs c28gd2l0aAotICAgTklPUzJfTlVNX1JFR1MgaW4gR0RCIHByb3Blci4gICovCi0KLSNkZWZp bmUgbmlvczJfbnVtX3JlZ3MgNDkKLQotLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBm aWxlIG5pb3MyLWxpbnV4LmMuICAqLwotCi12b2lkIGluaXRfcmVnaXN0ZXJzX25pb3MyX2xp bnV4ICh2b2lkKTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjX25p b3MyX2xpbnV4OwotCi0vKiBUaGlzIHVuaW9uIGlzIHVzZWQgdG8gY29udmVydCBiZXR3ZWVu IGludCBhbmQgYnl0ZSBidWZmZXIKLSAgIHJlcHJlc2VudGF0aW9ucyBvZiByZWdpc3RlciBj b250ZW50cy4gICovCi0KLXVuaW9uIG5pb3MyX3JlZ2lzdGVyCi17Ci0gIHVuc2lnbmVkIGNo YXIgYnVmWzRdOwotICBpbnQgcmVnMzI7Ci19OwotCi0vKiBSZXR1cm4gdGhlIHB0cmFjZSBg YGFkZHJlc3MnJyBvZiByZWdpc3RlciBSRUdOTy4gKi8KLQotc3RhdGljIGludCBuaW9zMl9y ZWdtYXBbXSA9IHsKLSAgLTEsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LAotICA4LCAg OSwgIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCi0gIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEs IDIyLCAyMywKLSAgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLAotICAzMiwgMzMs IDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksCi0gIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2 LCA0NywKLSAgNDgsCi0gIDAKLX07Ci0KLS8qIEltcGxlbWVudCB0aGUgbG93X2FyY2hfc2V0 dXAgbGludXggdGFyZ2V0IG9wcyBtZXRob2QuICAqLwotCi12b2lkCi1uaW9zMl90YXJnZXQ6 Omxvd19hcmNoX3NldHVwICgpCi17Ci0gIGN1cnJlbnRfcHJvY2VzcyAoKS0+dGRlc2MgPSB0 ZGVzY19uaW9zMl9saW51eDsKLX0KLQotLyogSW1wbGVtZW50IHRoZSBsb3dfY2Fubm90X2Zl dGNoX3JlZ2lzdGVyIGxpbnV4IHRhcmdldCBvcHMgbWV0aG9kLiAgKi8KLQotYm9vbAotbmlv czJfdGFyZ2V0Ojpsb3dfY2Fubm90X2ZldGNoX3JlZ2lzdGVyIChpbnQgcmVnbm8pCi17Ci0g IHJldHVybiAobmlvczJfcmVnbWFwW3JlZ25vXSA9PSAtMSk7Ci19Ci0KLS8qIEltcGxlbWVu dCB0aGUgbG93X2Nhbm5vdF9zdG9yZV9yZWdpc3RlciBsaW51eCB0YXJnZXQgb3BzIG1ldGhv ZC4gICovCi0KLWJvb2wKLW5pb3MyX3RhcmdldDo6bG93X2Nhbm5vdF9zdG9yZV9yZWdpc3Rl ciAoaW50IHJlZ25vKQotewotICByZXR1cm4gKG5pb3MyX3JlZ21hcFtyZWdub10gPT0gLTEp OwotfQotCi0vKiBCcmVha3BvaW50IHN1cHBvcnQuICBBbHNvIHNlZSBjb21tZW50cyBvbiBu aW9zMl9icmVha3BvaW50X2Zyb21fcGMKLSAgIGluIG5pb3MyLXRkZXAuYy4gICovCi0KLSNp ZiBkZWZpbmVkKF9fbmlvczJfYXJjaF9fKSAmJiBfX25pb3MyX2FyY2hfXyA9PSAyCi0jZGVm aW5lIE5JT1MyX0JSRUFLUE9JTlQgMHhiN2ZkMDAyMAotI2RlZmluZSBDRFhfQlJFQUtQT0lO VCAweGQ3YzkKLSNlbHNlCi0jZGVmaW5lIE5JT1MyX0JSRUFLUE9JTlQgMHgwMDNiNmZmYQot I2VuZGlmCi0KLS8qIFdlIG9ubHkgcmVnaXN0ZXIgdGhlIDQtYnl0ZSBicmVha3BvaW50LCBl dmVuIG9uIFIyIHRhcmdldHMgd2hpY2ggYWxzbwotICAgc3VwcG9ydCAyLWJ5dGUgYnJlYWtw b2ludHMuICBTaW5jZSB0aGVyZSBpcyBubyBzdXBwb3J0c196X3BvaW50X3R5cGUKLSAgIGZ1 bmN0aW9uIHByb3ZpZGVkLCBnZGJzZXJ2ZXIgbmV2ZXIgaW5zZXJ0cyBzb2Z0d2FyZSBicmVh a3BvaW50cyBpdHNlbGYKLSAgIGFuZCBpbnN0ZWFkIHJlbGllcyBvbiBHREIgdG8gaW5zZXJ0 IHRoZSBicmVha3BvaW50IG9mIHRoZSBjb3JyZWN0IGxlbmd0aAotICAgdmlhIGEgbWVtb3J5 IHdyaXRlLiAgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmlvczJfYnJlYWtwb2lu dCA9IE5JT1MyX0JSRUFLUE9JTlQ7Ci0jZGVmaW5lIG5pb3MyX2JyZWFrcG9pbnRfbGVuIDQK LQotLyogSW1wbGVtZW50YXRpb24gb2YgdGFyZ2V0IG9wcyBtZXRob2QgInN3X2JyZWFrcG9p bnRfZnJvbV9raW5kIi4gICovCi0KLWNvbnN0IGdkYl9ieXRlICoKLW5pb3MyX3RhcmdldDo6 c3dfYnJlYWtwb2ludF9mcm9tX2tpbmQgKGludCBraW5kLCBpbnQgKnNpemUpCi17Ci0gICpz aXplID0gbmlvczJfYnJlYWtwb2ludF9sZW47Ci0gIHJldHVybiAoY29uc3QgZ2RiX2J5dGUg KikgJm5pb3MyX2JyZWFrcG9pbnQ7Ci19Ci0KLS8qIEltcGxlbWVudCB0aGUgbG93X2JyZWFr cG9pbnRfYXQgbGludXggdGFyZ2V0IG9wcyBtZXRob2QuICAqLwotCi1ib29sCi1uaW9zMl90 YXJnZXQ6Omxvd19icmVha3BvaW50X2F0IChDT1JFX0FERFIgd2hlcmUpCi17Ci0gIHVuc2ln bmVkIGludCBpbnNuOwotCi0gIC8qIEZvciBSMiwgZmlyc3QgY2hlY2sgZm9yIHRoZSAyLWJ5 dGUgQ0RYIHRyYXAubiBicmVha3BvaW50IGVuY29kaW5nLiAgKi8KLSNpZiBkZWZpbmVkKF9f bmlvczJfYXJjaF9fKSAmJiBfX25pb3MyX2FyY2hfXyA9PSAyCi0gIHJlYWRfbWVtb3J5ICh3 aGVyZSwgKHVuc2lnbmVkIGNoYXIgKikgJmluc24sIDIpOwotICBpZiAoaW5zbiA9PSBDRFhf QlJFQUtQT0lOVCkKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotCi0gIHJlYWRfbWVtb3J5 ICh3aGVyZSwgKHVuc2lnbmVkIGNoYXIgKikgJmluc24sIDQpOwotICBpZiAoaW5zbiA9PSBu aW9zMl9icmVha3BvaW50KQotICAgIHJldHVybiB0cnVlOwotICByZXR1cm4gZmFsc2U7Ci19 Ci0KLS8qIEZldGNoIHRoZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBwb2ludGVyIGZvciBsaWJ0 aHJlYWRfZGIuICAqLwotCi1wc19lcnJfZQotcHNfZ2V0X3RocmVhZF9hcmVhIChzdHJ1Y3Qg cHNfcHJvY2hhbmRsZSAqcGgsCi0JCSAgICBsd3BpZF90IGx3cGlkLCBpbnQgaWR4LCB2b2lk ICoqYmFzZSkKLXsKLSAgaWYgKHB0cmFjZSAoUFRSQUNFX0dFVF9USFJFQURfQVJFQSwgbHdw aWQsIE5VTEwsIGJhc2UpICE9IDApCi0gICAgcmV0dXJuIFBTX0VSUjsKLQotICAvKiBJRFgg aXMgdGhlIGJpYXMgZnJvbSB0aGUgdGhyZWFkIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBv ZiB0aGUKLSAgICAgdGhyZWFkIGRlc2NyaXB0b3IuICBJdCBoYXMgdG8gYmUgc3VidHJhY3Rl ZCBkdWUgdG8gaW1wbGVtZW50YXRpb24KLSAgICAgcXVpcmtzIGluIGxpYnRocmVhZF9kYi4g ICovCi0gICpiYXNlID0gKHZvaWQgKikgKChjaGFyICopICpiYXNlIC0gaWR4KTsKLQotICBy ZXR1cm4gUFNfT0s7Ci19Ci0KLS8qIEhlbHBlciBmdW5jdGlvbnMgdG8gY29sbGVjdC9zdXBw bHkgYSBzaW5nbGUgcmVnaXN0ZXIgUkVHTk8uICAqLwotCi1zdGF0aWMgdm9pZAotbmlvczJf Y29sbGVjdF9yZWdpc3RlciAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25v LAotCQkJdW5pb24gbmlvczJfcmVnaXN0ZXIgKnJlZykKLXsKLSAgdW5pb24gbmlvczJfcmVn aXN0ZXIgdG1wX3JlZzsKLQotICBjb2xsZWN0X3JlZ2lzdGVyIChyZWdjYWNoZSwgcmVnbm8s ICZ0bXBfcmVnLnJlZzMyKTsKLSAgcmVnLT5yZWczMiA9IHRtcF9yZWcucmVnMzI7Ci19Ci0K LXN0YXRpYyB2b2lkCi1uaW9zMl9zdXBwbHlfcmVnaXN0ZXIgKHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsIGludCByZWdubywKLQkJICAgICAgIGNvbnN0IHVuaW9uIG5pb3MyX3JlZ2lz dGVyICpyZWcpCi17Ci0gIHN1cHBseV9yZWdpc3RlciAocmVnY2FjaGUsIHJlZ25vLCByZWct PmJ1Zik7Ci19Ci0KLS8qIFdlIGhhdmUgb25seSBhIHNpbmdsZSByZWdpc3RlciBzZXQgb24g TmlvcyBJSS4gICovCi0KLXN0YXRpYyB2b2lkCi1uaW9zMl9maWxsX2dyZWdzZXQgKHN0cnVj dCByZWdjYWNoZSAqcmVnY2FjaGUsIHZvaWQgKmJ1ZikKLXsKLSAgdW5pb24gbmlvczJfcmVn aXN0ZXIgKnJlZ3NldCA9ICh1bmlvbiBuaW9zMl9yZWdpc3RlciAqKSBidWY7Ci0gIGludCBp OwotCi0gIGZvciAoaSA9IDE7IGkgPCBuaW9zMl9udW1fcmVnczsgaSsrKQotICAgIG5pb3My X2NvbGxlY3RfcmVnaXN0ZXIgKHJlZ2NhY2hlLCBpLCByZWdzZXQgKyBpKTsKLX0KLQotc3Rh dGljIHZvaWQKLW5pb3MyX3N0b3JlX2dyZWdzZXQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2Fj aGUsIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLSAgY29uc3QgdW5pb24gbmlvczJfcmVnaXN0ZXIg KnJlZ3NldCA9ICh1bmlvbiBuaW9zMl9yZWdpc3RlciAqKSBidWY7Ci0gIGludCBpOwotCi0g IGZvciAoaSA9IDA7IGkgPCBuaW9zMl9udW1fcmVnczsgaSsrKQotICAgIG5pb3MyX3N1cHBs eV9yZWdpc3RlciAocmVnY2FjaGUsIGksIHJlZ3NldCArIGkpOwotfQotCi1zdGF0aWMgc3Ry dWN0IHJlZ3NldF9pbmZvIG5pb3MyX3JlZ3NldHNbXSA9Ci17Ci0gIHsgUFRSQUNFX0dFVFJF R1NFVCwgUFRSQUNFX1NFVFJFR1NFVCwgTlRfUFJTVEFUVVMsCi0gICAgbmlvczJfbnVtX3Jl Z3MgKiA0LCBHRU5FUkFMX1JFR1MsCi0gICAgbmlvczJfZmlsbF9ncmVnc2V0LCBuaW9zMl9z dG9yZV9ncmVnc2V0IH0sCi0gIE5VTExfUkVHU0VUCi19OwotCi1zdGF0aWMgc3RydWN0IHJl Z3NldHNfaW5mbyBuaW9zMl9yZWdzZXRzX2luZm8gPQotICB7Ci0gICAgbmlvczJfcmVnc2V0 cywgLyogcmVnc2V0cyAqLwotICAgIDAsIC8qIG51bV9yZWdzZXRzICovCi0gICAgTlVMTCwg LyogZGlzYWJsZWRfcmVnc2V0cyAqLwotICB9OwotCi1zdGF0aWMgc3RydWN0IHVzcnJlZ3Nf aW5mbyBuaW9zMl91c3JyZWdzX2luZm8gPQotICB7Ci0gICAgbmlvczJfbnVtX3JlZ3MsCi0g ICAgbmlvczJfcmVnbWFwLAotICB9OwotCi1zdGF0aWMgc3RydWN0IHJlZ3NfaW5mbyBteXJl Z3NfaW5mbyA9Ci0gIHsKLSAgICBOVUxMLCAvKiByZWdzZXRfYml0bWFwICovCi0gICAgJm5p b3MyX3VzcnJlZ3NfaW5mbywKLSAgICAmbmlvczJfcmVnc2V0c19pbmZvCi0gIH07Ci0KLWNv bnN0IHJlZ3NfaW5mbyAqCi1uaW9zMl90YXJnZXQ6OmdldF9yZWdzX2luZm8gKCkKLXsKLSAg cmV0dXJuICZteXJlZ3NfaW5mbzsKLX0KLQotLyogVGhlIGxpbnV4IHRhcmdldCBvcHMgb2Jq ZWN0LiAgKi8KLQotbGludXhfcHJvY2Vzc190YXJnZXQgKnRoZV9saW51eF90YXJnZXQgPSAm dGhlX25pb3MyX3RhcmdldDsKLQotdm9pZAotaW5pdGlhbGl6ZV9sb3dfYXJjaCAodm9pZCkK LXsKLSAgaW5pdF9yZWdpc3RlcnNfbmlvczJfbGludXggKCk7Ci0KLSAgaW5pdGlhbGl6ZV9y ZWdzZXRzX2luZm8gKCZuaW9zMl9yZWdzZXRzX2luZm8pOwotfQotLSAKMi4yNS4xCgo= --------------9owa0Ps00MozUgJj3QfYATTO--