From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 94FE7C4648B for ; Thu, 4 Jul 2019 14:43:07 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5FA772083B for ; Thu, 4 Jul 2019 14:43:07 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5FA772083B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hj2wi-0003Fz-6Y; Thu, 04 Jul 2019 14:42:48 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hj2wg-0003FV-SY for xen-devel@lists.xenproject.org; Thu, 04 Jul 2019 14:42:46 +0000 X-Inumbo-ID: fb094ea5-9e69-11e9-8980-bc764e045a96 Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id fb094ea5-9e69-11e9-8980-bc764e045a96; Thu, 04 Jul 2019 14:42:43 +0000 (UTC) Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=anthony.perard@citrix.com; spf=Pass smtp.mailfrom=anthony.perard@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa2.hc3370-68.iphmx.com: no sender authenticity information available from domain of anthony.perard@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa2.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa2.hc3370-68.iphmx.com: domain of anthony.perard@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa2.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all" Received-SPF: None (esa2.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa2.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: EnsohF4y4H+z7i0GlObMcXj5tbs21bWA4PGpOMVJjEh84q14bSs11MgGLAKQNLgd50KDYQXSl/ jYhqrIvoPTViPfcIfby4guXNohAp+mLYoiNi/0k9Yp2tir6TPcwcs/6aWyEgq44lT6va4uj/jD bTvE4qd7+NcIlFID9Iv1JxmGLZgr6KjiAw1bB1+QBlrcttoY8EiIsHH5rLwAcMR/w+/eBVb3w6 KpYyDBlt4cXWvnfsAXkxGpo89SHcdCzSoDkjpvoW08krQbC7UIUkU5wWvIfUipMQp6LZ7lZ2K1 mGU= X-SBRS: 2.7 X-MesageID: 2588788 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.63,451,1557201600"; d="scan'208";a="2588788" From: Anthony PERARD To: Date: Thu, 4 Jul 2019 15:42:02 +0100 Message-ID: <20190704144233.27968-5-anthony.perard@citrix.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190704144233.27968-1-anthony.perard@citrix.com> References: <20190704144233.27968-1-anthony.perard@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v3 04/35] OvmfPkg: Introduce XenPlatformPei X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Ard Biesheuvel , Jordan Justen , Julien Grall , Anthony PERARD , xen-devel@lists.xenproject.org, Laszlo Ersek Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" SW50cm9kdWNlIFhlblBsYXRmb3JtUGVpLCBhIGNvcHkgb2YgT3ZtZlBrZy9QbGF0Zm9ybVBlaSB3 aXRob3V0IHNvbWUKb2YgUUVNVSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiwgWGVuIGRvZXMgbm90 IHN1cHBvcnQgUWVtdUZ3Q2ZnLgoKVGhpcyBuZXcgbW9kdWxlIHdpbGwgYmUgYWRqdXN0ZWQgdG8g YWNjb21tb2RhdGUgWGVuIFBWSC4KCmZ3X2NmZyBkZXBlbmRlbnRzIHRoYXQgaGF2ZSBiZWVuIHJl bW92ZWQsIHdoaWNoIGFyZSBkeW5hbWljYWxseSBza2lwcGVkCndoZW4gcnVubmluZyBQbGF0Zm9y bVBlaSBvbiBYZW46Ci0gR2V0Rmlyc3ROb25BZGRyZXNzKCk6IGNvbnRyb2xsaW5nIHRoZSA2NC1i aXQgUENJIE1NSU8gYXBlcnR1cmUgdmlhIHRoZQooZXhwZXJpbWVudGFsKSAib3B0L292bWYvWC1Q Y2lNbWlvNjRNYiIgZmlsZQotIEdldEZpcnN0Tm9uQWRkcmVzcygpOiBob25vcmluZyB0aGUgaG90 cGx1ZyBESU1NIGFyZWEKKCJldGMvcmVzZXJ2ZWQtbWVtb3J5LWVuZCIpIGluIHRoZSBwbGFjZW1l bnQgb2YgdGhlIDY0LWJpdCBQQ0kgTU1JTwphcGVydHVyZQotIE5vZXhlY0R4ZUluaXRpYWxpemF0 aW9uKCkgaXMgcmVtb3ZlZCwgc28gUGNkUHJvcGVydGllc1RhYmxlRW5hYmxlIGFuZApQY2RTZXRO eEZvclN0YWNrIGFyZSBsZWZ0IGNvbnN0YW50IEZBTFNFIChub3Qgc2V0IGR5bmFtaWNhbGx5IGZy b20KZndfY2ZnICJvcHQvb3ZtZi9QY2RYeHh4IikKLSBNYXhDcHVDb3VudEluaXRpYWxpemF0aW9u KCksIFB1Ymxpc2hQZWlNZW1vcnkoKTogdGhlIG1heCBDUFUgY291bnQgaXMKbm90IHRha2VuIGZy b20gdGhlIFFlbXVGd0NmZ0l0ZW1TbXBDcHVDb3VudCBmd19jZmcga2V5OwpQY2RDcHVNYXhMb2dp Y2FsUHJvY2Vzc29yTnVtYmVyIGlzIHVzZWQgaW50YWN0IGFuZApQY2RDcHVBcEluaXRUaW1lT3V0 SW5NaWNyb1NlY29uZHMgaXMgbmV2ZXIgY2hhbmdlZCBvciB1c2VkLgotIEluaXRpYWxpemVYZW5Q bGF0Zm9ybSgpLCBTM1ZlcmlmaWNhdGlvbigpOiBTMyBpcyBhc3N1bWVkIGRpc2FibGVkIChub3QK Y29uc3VsdGluZyAiZXRjL3N5c3RlbS1zdGF0ZXMiIHZpYSBRZW11RndDZmdTM0VuYWJsZWQoKSku Ci0gSW5zdGFsbEZlYXR1cmVDb250cm9sQ2FsbGJhY2soKTogdGhlIGZlYXR1cmUgY29udHJvbCBN U1IgaXMgbm90IHNldApmcm9tICJldGMvbXNyX2ZlYXR1cmVfY29udHJvbCIKKGFsc28gcmVtb3Zl ZCBGZWF0dXJlQ29udHJvbC5jIGFzIHRoZXJlIGlzIG5vdGhpbmcgYmVlbiBleGVjdXRlZCkKCkFs c28gcmVtb3ZlZDoKLSBTTVJBTS9UU0VHLXJlbGF0ZWQgbG93IG1lbSBzaXplIGFkanVzdGluZyAo UGNkU21tU21yYW1SZXF1aXJlIGlzCmFzc3VtZWQgRkFMU0UpIGluIFB1Ymxpc2hQZWlNZW1vcnko KSwKLSBRZW11SW5pdGlhbGl6ZVJhbSgpIGVudGlyZWx5LAoKWGVuIHJlbGF0ZWQgY2hhbmdlczoK LSBIYXZlIHJlbW92ZWQgdGhlIG1vZHVsZSB2YXJpYWJsZSBtWGVuLCBhcyBpdCBzaG91bGQgYmUg YWx3YXlzIHRydWUuCi0gSGF2ZSB0aGUgcGxhdGZvcm0gUEVJIGluaXRpYWxpemF0aW9uIGZhaWxz IGlmIFhlbiBoYXMgbm90IGJlZW4KICBkZXRlY3RlZC4KClJlZjogaHR0cHM6Ly9idWd6aWxsYS50 aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg5ClNpZ25lZC1vZmYtYnk6IEFudGhvbnkg UEVSQVJEIDxhbnRob255LnBlcmFyZEBjaXRyaXguY29tPgpSZXZpZXdlZC1ieTogTGFzemxvIEVy c2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4KLS0tCgpOb3RlczoKICAgIHYzOgogICAgICAtIGZpeCBj b2Rpbmcgc3R5bGUgaW4gbmV3IGNvZGUKICAgICAgICAodXNlIERFQlVHX3h4eCwgYWRkIEFTU0VS VCBiZWZvcmUgQ3B1RGVhZExvb3ApCiAgICAgIC0gcmViYXNlZCwgU1BEWAoKIE92bWZQa2cvT3Zt Zlhlbi5kc2MgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBPdm1mUGtnL092bWZYZW4u ZmRmICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogT3ZtZlBrZy9YZW5QbGF0Zm9ybVBl aS9YZW5QbGF0Zm9ybVBlaS5pbmYgfCAgOTYgKysrKysKIE92bWZQa2cvWGVuUGxhdGZvcm1QZWkv Q21vcy5oICAgICAgICAgICAgIHwgIDUyICsrKwogT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9QbGF0 Zm9ybS5oICAgICAgICAgfCAxMDggKysrKysrCiBPdm1mUGtnL1hlblBsYXRmb3JtUGVpL1hlbi5o ICAgICAgICAgICAgICB8ICAzOSArKwogT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9BbWRTZXYuYyAg ICAgICAgICAgfCAgNjQgKysrKwogT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9DbGVhckNhY2hlLmMg ICAgICAgfCAxMTIgKysrKysrCiBPdm1mUGtnL1hlblBsYXRmb3JtUGVpL0Ntb3MuYyAgICAgICAg ICAgICB8ICA2MCArKysKIE92bWZQa2cvWGVuUGxhdGZvcm1QZWkvRnYuYyAgICAgICAgICAgICAg IHwgIDc2ICsrKysKIE92bWZQa2cvWGVuUGxhdGZvcm1QZWkvTWVtRGV0ZWN0LmMgICAgICAgIHwg NDIxICsrKysrKysrKysrKysrKysrKysrCiBPdm1mUGtnL1hlblBsYXRmb3JtUGVpL1BsYXRmb3Jt LmMgICAgICAgICB8IDQ0NCArKysrKysrKysrKysrKysrKysrKysrCiBPdm1mUGtnL1hlblBsYXRm b3JtUGVpL1hlbi5jICAgICAgICAgICAgICB8IDIxOSArKysrKysrKysrKwogMTMgZmlsZXMgY2hh bmdlZCwgMTY5MyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IE92bWZQa2cvWGVuUGxhdGZvcm1QZWkvWGVuUGxhdGZvcm1QZWkuaW5mCiBjcmVhdGUgbW9k ZSAxMDA2NDQgT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9DbW9zLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBPdm1mUGtnL1hlblBsYXRmb3JtUGVpL1BsYXRmb3JtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBP dm1mUGtnL1hlblBsYXRmb3JtUGVpL1hlbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgT3ZtZlBrZy9Y ZW5QbGF0Zm9ybVBlaS9BbWRTZXYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IE92bWZQa2cvWGVuUGxh dGZvcm1QZWkvQ2xlYXJDYWNoZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgT3ZtZlBrZy9YZW5QbGF0 Zm9ybVBlaS9DbW9zLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBPdm1mUGtnL1hlblBsYXRmb3JtUGVp L0Z2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBPdm1mUGtnL1hlblBsYXRmb3JtUGVpL01lbURldGVj dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9QbGF0Zm9ybS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9YZW4uYwoKZGlmZiAt LWdpdCBhL092bWZQa2cvT3ZtZlhlbi5kc2MgYi9Pdm1mUGtnL092bWZYZW4uZHNjCmluZGV4IGNh YjU0ZGEzZTguLjlmNzlkNDU1ZmEgMTAwNjQ0Ci0tLSBhL092bWZQa2cvT3ZtZlhlbi5kc2MKKysr IGIvT3ZtZlBrZy9Pdm1mWGVuLmRzYwpAQCAtNTIzLDcgKzUyMyw3IEBAIFtDb21wb25lbnRzXQog ICB9DQogICBNZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL0R4ZUlwbC5pbmYNCiANCi0gIE92 bWZQa2cvUGxhdGZvcm1QZWkvUGxhdGZvcm1QZWkuaW5mDQorICBPdm1mUGtnL1hlblBsYXRmb3Jt UGVpL1hlblBsYXRmb3JtUGVpLmluZg0KICAgVWVmaUNwdVBrZy9Vbml2ZXJzYWwvQWNwaS9TM1Jl c3VtZTJQZWkvUzNSZXN1bWUyUGVpLmluZg0KICAgVWVmaUNwdVBrZy9DcHVNcFBlaS9DcHVNcFBl aS5pbmYNCiANCmRpZmYgLS1naXQgYS9Pdm1mUGtnL092bWZYZW4uZmRmIGIvT3ZtZlBrZy9Pdm1m WGVuLmZkZgppbmRleCA2ZmM4NDc5YWFlLi4yY2VmZjdiYWEyIDEwMDY0NAotLS0gYS9Pdm1mUGtn L092bWZYZW4uZmRmCisrKyBiL092bWZQa2cvT3ZtZlhlbi5mZGYKQEAgLTE1Miw3ICsxNTIsNyBA QCBbRlYuUEVJRlZdCiBJTkYgIE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvUENEL1BlaS9QY2QuaW5m DQogSU5GICBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1JlcG9ydFN0YXR1c0NvZGVSb3V0ZXIvUGVp L1JlcG9ydFN0YXR1c0NvZGVSb3V0ZXJQZWkuaW5mDQogSU5GICBNZGVNb2R1bGVQa2cvVW5pdmVy c2FsL1N0YXR1c0NvZGVIYW5kbGVyL1BlaS9TdGF0dXNDb2RlSGFuZGxlclBlaS5pbmYNCi1JTkYg IE92bWZQa2cvUGxhdGZvcm1QZWkvUGxhdGZvcm1QZWkuaW5mDQorSU5GICBPdm1mUGtnL1hlblBs YXRmb3JtUGVpL1hlblBsYXRmb3JtUGVpLmluZg0KIElORiAgTWRlTW9kdWxlUGtnL0NvcmUvRHhl SXBsUGVpbS9EeGVJcGwuaW5mDQogSU5GICBVZWZpQ3B1UGtnL1VuaXZlcnNhbC9BY3BpL1MzUmVz dW1lMlBlaS9TM1Jlc3VtZTJQZWkuaW5mDQogSU5GICBVZWZpQ3B1UGtnL0NwdU1wUGVpL0NwdU1w UGVpLmluZg0KZGlmZiAtLWdpdCBhL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvWGVuUGxhdGZvcm1Q ZWkuaW5mIGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9YZW5QbGF0Zm9ybVBlaS5pbmYKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZDEyNjVjMzY1YQotLS0gL2Rldi9udWxs CisrKyBiL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvWGVuUGxhdGZvcm1QZWkuaW5mCkBAIC0wLDAg KzEsOTYgQEAKKyMjIEBmaWxlDQorIyAgUGxhdGZvcm0gUEVJIGRyaXZlcg0KKyMNCisjICBUaGlz IG1vZHVsZSBwcm92aWRlcyBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbiB0byBkZXRlY3QgYm9v dCBtb2RlLg0KKyMgIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTksIEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisjICBDb3B5cmlnaHQgKGMpIDIwMTksIENpdHJp eCBTeXN0ZW1zLCBJbmMuDQorIw0KKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQorIw0KKyMjDQorDQorW0RlZmluZXNdDQorICBJTkZfVkVSU0lPTiAgICAg ICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1DQorICBCQVNFX05BTUUgICAgICAgICAgICAgICAg ICAgICAgPSBYZW5QbGF0Zm9ybVBlaQ0KKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAg ID0gZjExMmE2ZWUtOTkzYS00ZjBiLTgyOTUtZTUyMDI5ZDliNGJhDQorICBNT0RVTEVfVFlQRSAg ICAgICAgICAgICAgICAgICAgPSBQRUlNDQorICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAg ICAgPSAxLjANCisgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IEluaXRpYWxpemVY ZW5QbGF0Zm9ybQ0KKw0KKyMNCisjIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgZm9yIHJl ZmVyZW5jZSBvbmx5IGFuZCBub3QgcmVxdWlyZWQgYnkgdGhlIGJ1aWxkIHRvb2xzLg0KKyMNCisj ICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IElBMzIgWDY0IEVCQw0KKyMNCisNCitb U291cmNlc10NCisgIEFtZFNldi5jDQorICBDbGVhckNhY2hlLmMNCisgIENtb3MuYw0KKyAgQ21v cy5oDQorICBGdi5jDQorICBNZW1EZXRlY3QuYw0KKyAgUGxhdGZvcm0uYw0KKyAgUGxhdGZvcm0u aA0KKyAgWGVuLmMNCisgIFhlbi5oDQorDQorW1BhY2thZ2VzXQ0KKyAgTWRlUGtnL01kZVBrZy5k ZWMNCisgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQorICBTZWN1cml0eVBrZy9TZWN1 cml0eVBrZy5kZWMNCisgIFVlZmlDcHVQa2cvVWVmaUNwdVBrZy5kZWMNCisgIE92bWZQa2cvT3Zt ZlBrZy5kZWMNCisNCitbR3VpZHNdDQorICBnRWZpTWVtb3J5VHlwZUluZm9ybWF0aW9uR3VpZA0K KyAgZ0VmaVhlbkluZm9HdWlkDQorDQorW0xpYnJhcnlDbGFzc2VzXQ0KKyAgQmFzZUxpYg0KKyAg Q2FjaGVNYWludGVuYW5jZUxpYg0KKyAgRGVidWdMaWINCisgIEhvYkxpYg0KKyAgSW9MaWINCisg IFBjaUxpYg0KKyAgUmVzb3VyY2VQdWJsaWNhdGlvbkxpYg0KKyAgUGVpU2VydmljZXNMaWINCisg IFBlaW1FbnRyeVBvaW50DQorICBNdHJyTGliDQorICBNZW1FbmNyeXB0U2V2TGliDQorICBQY2RM aWINCisNCitbUGNkXQ0KKyAgZ1VlZmlPdm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkT3ZtZlBlaU1l bUZ2QmFzZQ0KKyAgZ1VlZmlPdm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkT3ZtZlBlaU1lbUZ2U2l6 ZQ0KKyAgZ1VlZmlPdm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkT3ZtZkR4ZU1lbUZ2QmFzZQ0KKyAg Z1VlZmlPdm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkT3ZtZkR4ZU1lbUZ2U2l6ZQ0KKyAgZ1VlZmlP dm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkT3ZtZkxvY2tCb3hTdG9yYWdlQmFzZQ0KKyAgZ1VlZmlP dm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkT3ZtZkxvY2tCb3hTdG9yYWdlU2l6ZQ0KKyAgZ1VlZmlP dm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkT3ZtZkhvc3RCcmlkZ2VQY2lEZXZJZA0KKyAgZ1VlZmlP dm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkUGNpSW9CYXNlDQorICBnVWVmaU92bWZQa2dUb2tlblNw YWNlR3VpZC5QY2RQY2lJb1NpemUNCisgIGdVZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBj aU1taW8zMkJhc2UNCisgIGdVZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaU1taW8zMlNp emUNCisgIGdVZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaU1taW82NEJhc2UNCisgIGdV ZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaU1taW82NFNpemUNCisgIGdVZWZpT3ZtZlBr Z1Rva2VuU3BhY2VHdWlkLlBjZFEzNVRzZWdNYnl0ZXMNCisgIGdFZmlNZGVNb2R1bGVQa2dUb2tl blNwYWNlR3VpZC5QY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJlU2l6ZQ0KKyAgZ0VmaU1kZU1vZHVs ZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEVtdVZhcmlhYmxlTnZTdG9yZVJlc2VydmVkDQorICBnRWZp TWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkUGNpRGlzYWJsZUJ1c0VudW1lcmF0aW9uDQor ICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRHhlSXBsU3dpdGNoVG9Mb25nTW9k ZQ0KKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFVzZTFHUGFnZVRhYmxlDQor ICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkUHRlTWVtb3J5RW5jcnlwdGlvbkFk ZHJlc3NPck1hc2sNCisgIGdFZmlTZWN1cml0eVBrZ1Rva2VuU3BhY2VHdWlkLlBjZE9wdGlvblJv bUltYWdlVmVyaWZpY2F0aW9uUG9saWN5DQorICBnVWVmaUNwdVBrZ1Rva2VuU3BhY2VHdWlkLlBj ZENwdUxvY2FsQXBpY0Jhc2VBZGRyZXNzDQorDQorW0ZpeGVkUGNkXQ0KKyAgZ0VmaU1kZVBrZ1Rv a2VuU3BhY2VHdWlkLlBjZFBjaUV4cHJlc3NCYXNlQWRkcmVzcw0KKw0KK1tQcGlzXQ0KKyAgZ0Vm aVBlaU1hc3RlckJvb3RNb2RlUHBpR3VpZA0KKyAgZ0VmaVBlaU1wU2VydmljZXNQcGlHdWlkDQor DQorW0RlcGV4XQ0KKyAgVFJVRQ0KKw0KZGlmZiAtLWdpdCBhL092bWZQa2cvWGVuUGxhdGZvcm1Q ZWkvQ21vcy5oIGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9DbW9zLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uODBmZmNiMDAyZgotLS0gL2Rldi9udWxsCisrKyBiL092 bWZQa2cvWGVuUGxhdGZvcm1QZWkvQ21vcy5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQ0K KyAgUEMvQVQgQ01PUyBhY2Nlc3Mgcm91dGluZXMNCisNCisgIENvcHlyaWdodCAoYykgMjAwNiAt IDIwMDksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisgIENv cHlyaWdodCAoYykgMjAxOSwgQ2l0cml4IFN5c3RlbXMsIEluYy4NCisNCisgIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorDQorKiovDQorDQorI2lmbmRlZiBf X0NNT1NfSF9fDQorI2RlZmluZSBfX0NNT1NfSF9fDQorDQorLyoqDQorICBSZWFkcyA4LWJpdHMg b2YgQ01PUyBkYXRhLg0KKw0KKyAgUmVhZHMgdGhlIDgtYml0cyBvZiBDTU9TIGRhdGEgYXQgdGhl IGxvY2F0aW9uIHNwZWNpZmllZCBieSBJbmRleC4NCisgIFRoZSA4LWJpdCByZWFkIHZhbHVlIGlz IHJldHVybmVkLg0KKw0KKyAgQHBhcmFtICBJbmRleCAgVGhlIENNT1MgbG9jYXRpb24gdG8gcmVh ZC4NCisNCisgIEByZXR1cm4gVGhlIHZhbHVlIHJlYWQuDQorDQorKiovDQorVUlOVDgNCitFRklB UEkNCitDbW9zUmVhZDggKA0KKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIElu ZGV4DQorICApOw0KKw0KKy8qKg0KKyAgV3JpdGVzIDgtYml0cyBvZiBDTU9TIGRhdGEuDQorDQor ICBXcml0ZXMgOC1iaXRzIG9mIENNT1MgZGF0YSB0byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5 IEluZGV4DQorICB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgVmFsdWUgYW5kIHJldHVybnMg VmFsdWUuDQorDQorICBAcGFyYW0gIEluZGV4ICBUaGUgQ01PUyBsb2NhdGlvbiB0byB3cml0ZS4N CisgIEBwYXJhbSAgVmFsdWUgIFRoZSB2YWx1ZSB0byB3cml0ZSB0byBDTU9TLg0KKw0KKyAgQHJl dHVybiBUaGUgdmFsdWUgd3JpdHRlbiB0byBDTU9TLg0KKw0KKyoqLw0KK1VJTlQ4DQorRUZJQVBJ DQorQ21vc1dyaXRlOCAoDQorICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5k ZXgsDQorICBJTiAgICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgVmFsdWUNCisgICk7DQor DQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9QbGF0 Zm9ybS5oIGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9QbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjc3NDI3NDk2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9P dm1mUGtnL1hlblBsYXRmb3JtUGVpL1BsYXRmb3JtLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qKiBA ZmlsZQ0KKyAgUGxhdGZvcm0gUEVJIG1vZHVsZSBpbmNsdWRlIGZpbGUuDQorDQorICBDb3B5cmln aHQgKGMpIDIwMDYgLSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQorICBDb3B5cmlnaHQgKGMpIDIwMTksIENpdHJpeCBTeXN0ZW1zLCBJbmMuDQorDQor ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KKyoqLw0K Kw0KKyNpZm5kZWYgX1BMQVRGT1JNX1BFSV9IX0lOQ0xVREVEXw0KKyNkZWZpbmUgX1BMQVRGT1JN X1BFSV9IX0lOQ0xVREVEXw0KKw0KKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL0U4MjAuaD4N CisNCitWT0lEDQorQWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQURE UkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICBN ZW1vcnlTaXplDQorICApOw0KKw0KK1ZPSUQNCitBZGRJb01lbW9yeVJhbmdlSG9iICgNCisgIEVG SV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlCYXNlLA0KKyAgRUZJX1BIWVNJQ0FMX0FE RFJFU1MgICAgICAgIE1lbW9yeUxpbWl0DQorICApOw0KKw0KK1ZPSUQNCitBZGRNZW1vcnlCYXNl U2l6ZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisg IFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlTaXplDQorICApOw0KKw0KK1ZPSUQN CitBZGRNZW1vcnlSYW5nZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVt b3J5QmFzZSwNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlMaW1pdA0KKyAg KTsNCisNCitWT0lEDQorQWRkUmVzZXJ2ZWRNZW1vcnlCYXNlU2l6ZUhvYiAoDQorICBFRklfUEhZ U0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisgIFVJTlQ2NCAgICAgICAgICAgICAg ICAgICAgICBNZW1vcnlTaXplLA0KKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIENhY2hl YWJsZQ0KKyAgKTsNCisNCitWT0lEDQorQWRkcmVzc1dpZHRoSW5pdGlhbGl6YXRpb24gKA0KKyAg Vk9JRA0KKyAgKTsNCisNCitWT0lEDQorUTM1VHNlZ01ieXRlc0luaXRpYWxpemF0aW9uICgNCisg IFZPSUQNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK1B1Ymxpc2hQZWlNZW1vcnkgKA0KKyAgVk9J RA0KKyAgKTsNCisNCitVSU5UMzINCitHZXRTeXN0ZW1NZW1vcnlTaXplQmVsb3c0Z2IgKA0KKyAg Vk9JRA0KKyAgKTsNCisNCitWT0lEDQorSW5pdGlhbGl6ZVJhbVJlZ2lvbnMgKA0KKyAgVk9JRA0K KyAgKTsNCisNCitFRklfU1RBVFVTDQorUGVpRnZJbml0aWFsaXphdGlvbiAoDQorICBWT0lEDQor ICApOw0KKw0KK1ZPSUQNCitJbnN0YWxsQ2xlYXJDYWNoZUNhbGxiYWNrICgNCisgIFZPSUQNCisg ICk7DQorDQorRUZJX1NUQVRVUw0KK0luaXRpYWxpemVYZW4gKA0KKyAgVk9JRA0KKyAgKTsNCisN CitCT09MRUFODQorWGVuRGV0ZWN0ICgNCisgIFZPSUQNCisgICk7DQorDQorVk9JRA0KK0FtZFNl dkluaXRpYWxpemUgKA0KKyAgVk9JRA0KKyAgKTsNCisNCitWT0lEDQorWGVuUHVibGlzaFJhbVJl Z2lvbnMgKA0KKyAgVk9JRA0KKyAgKTsNCisNCitleHRlcm4gRUZJX0JPT1RfTU9ERSBtQm9vdE1v ZGU7DQorDQorZXh0ZXJuIFVJTlQ4IG1QaHlzTWVtQWRkcmVzc1dpZHRoOw0KKw0KK2V4dGVybiBV SU5UMTYgbUhvc3RCcmlkZ2VEZXZJZDsNCisNCisjZW5kaWYgLy8gX1BMQVRGT1JNX1BFSV9IX0lO Q0xVREVEXw0KZGlmZiAtLWdpdCBhL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvWGVuLmggYi9Pdm1m UGtnL1hlblBsYXRmb3JtUGVpL1hlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLjI2MDU0ODEyODAKLS0tIC9kZXYvbnVsbAorKysgYi9Pdm1mUGtnL1hlblBsYXRmb3Jt UGVpL1hlbi5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKiBAZmlsZQ0KKyAgT3ZtZiBpbmZvIHN0cnVj dHVyZSBwYXNzZWQgYnkgWGVuDQorDQorQ29weXJpZ2h0IChjKSAyMDEzLCBDaXRyaXggU3lzdGVt cyBVSyBMdGQuPEJSPg0KKw0KK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2Ut UGF0ZW50DQorDQorKiovDQorDQorI2lmbmRlZiBfX1hFTl9IX18NCisjZGVmaW5lIF9fWEVOX0hf Xw0KKw0KKyNpbmNsdWRlIDxQaVBlaS5oPg0KKw0KKy8vIFBoeXNpY2FsIGFkZHJlc3Mgb2YgT1ZN RiBpbmZvDQorI2RlZmluZSBPVk1GX0lORk9fUEhZU0lDQUxfQUREUkVTUyAweDAwMDAxMDAwDQor DQorLy8gVGhpcyBzdHJ1Y3R1cmUgbXVzdCBtYXRjaCB0aGUgZGVmaW5pdGlvbiBvbiBYZW4gc2lk ZQ0KKyNwcmFnbWEgcGFjaygxKQ0KK3R5cGVkZWYgc3RydWN0IHsNCisgIENIQVI4IFNpZ25hdHVy ZVsxNF07IC8vIFhlbkhWTU9WTUZcMA0KKyAgVUlOVDggTGVuZ3RoOyAgICAgICAgLy8gTGVuZ3Ro IG9mIHRoaXMgc3RydWN0dXJlDQorICBVSU5UOCBDaGVja3N1bTsgICAgICAvLyBTZXQgc3VjaCB0 aGF0IHRoZSBzdW0gb3ZlciBieXRlcyAwLi5sZW5ndGggPT0gMA0KKyAgLy8NCisgIC8vIFBoeXNp Y2FsIGFkZHJlc3Mgb2YgYW4gYXJyYXkgb2YgVGFibGVzQ291bnQgZWxlbWVudHMuDQorICAvLw0K KyAgLy8gRWFjaCBlbGVtZW50IGNvbnRhaW5zIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGEgQklP UyB0YWJsZS4NCisgIC8vDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyBUYWJsZXM7DQorICBVSU5U MzIgVGFibGVzQ291bnQ7DQorICAvLw0KKyAgLy8gUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgRTgy MCB0YWJsZSwgY29udGFpbnMgRTgyMEVudHJpZXNDb3VudCBlbnRyaWVzLg0KKyAgLy8NCisgIEVG SV9QSFlTSUNBTF9BRERSRVNTIEU4MjA7DQorICBVSU5UMzIgRTgyMEVudHJpZXNDb3VudDsNCit9 IEVGSV9YRU5fT1ZNRl9JTkZPOw0KKyNwcmFnbWEgcGFjaygpDQorDQorI2VuZGlmIC8qIF9fWEVO X0hfXyAqLw0KZGlmZiAtLWdpdCBhL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvQW1kU2V2LmMgYi9P dm1mUGtnL1hlblBsYXRmb3JtUGVpL0FtZFNldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjdlYmJiNWNjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Pdm1mUGtnL1hlblBs YXRmb3JtUGVpL0FtZFNldi5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qKkBmaWxlDQorICBJbml0aWFs aXplIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydA0KKw0KKyAg Q29weXJpZ2h0IChjKSAyMDE3LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCisgIENvcHlyaWdodCAoYykgMjAxOSwgQ2l0cml4IFN5c3RlbXMsIEluYy4N CisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorDQor KiovDQorLy8NCisvLyBUaGUgcGFja2FnZSBsZXZlbCBoZWFkZXIgZmlsZXMgdGhpcyBtb2R1bGUg dXNlcw0KKy8vDQorI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCisjaW5jbHVkZSA8TGli cmFyeS9NZW1FbmNyeXB0U2V2TGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQor I2luY2x1ZGUgPFBpUGVpLmg+DQorI2luY2x1ZGUgPFJlZ2lzdGVyL0FtZC9DcHVpZC5oPg0KKyNp bmNsdWRlIDxSZWdpc3Rlci9DcHVpZC5oPg0KKw0KKyNpbmNsdWRlICJQbGF0Zm9ybS5oIg0KKw0K Ky8qKg0KKw0KKyAgRnVuY3Rpb24gY2hlY2tzIGlmIFNFViBzdXBwb3J0IGlzIGF2YWlsYWJsZSwg aWYgcHJlc2VudCB0aGVuIGl0IHNldHMNCisgIHRoZSBkeW5hbWljIFBjZFB0ZU1lbW9yeUVuY3J5 cHRpb25BZGRyZXNzT3JNYXNrIHdpdGggbWVtb3J5IGVuY3J5cHRpb24gbWFzay4NCisNCisgICoq Lw0KK1ZPSUQNCitBbWRTZXZJbml0aWFsaXplICgNCisgIFZPSUQNCisgICkNCit7DQorICBDUFVJ RF9NRU1PUllfRU5DUllQVElPTl9JTkZPX0VCWCAgRWJ4Ow0KKyAgVUlOVDY0ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVuY3J5cHRpb25NYXNrOw0KKyAgUkVUVVJOX1NUQVRVUyAgICAgICAg ICAgICAgICAgICAgIFBjZFN0YXR1czsNCisNCisgIC8vDQorICAvLyBDaGVjayBpZiBTRVYgaXMg ZW5hYmxlZA0KKyAgLy8NCisgIGlmICghTWVtRW5jcnlwdFNldklzRW5hYmxlZCAoKSkgew0KKyAg ICByZXR1cm47DQorICB9DQorDQorICAvLw0KKyAgLy8gQ1BVSUQgRm44MDAwXzAwMUZbRUJYXSBC aXQgMDo1IChtZW1vcnkgZW5jcnlwdGlvbiBiaXQgcG9zaXRpb24pDQorICAvLw0KKyAgQXNtQ3B1 aWQgKENQVUlEX01FTU9SWV9FTkNSWVBUSU9OX0lORk8sIE5VTEwsICZFYnguVWludDMyLCBOVUxM LCBOVUxMKTsNCisgIEVuY3J5cHRpb25NYXNrID0gTFNoaWZ0VTY0ICgxLCBFYnguQml0cy5QdGVQ b3NCaXRzKTsNCisNCisgIC8vDQorICAvLyBTZXQgTWVtb3J5IEVuY3J5cHRpb24gTWFzayBQQ0QN CisgIC8vDQorICBQY2RTdGF0dXMgPSBQY2RTZXQ2NFMgKFBjZFB0ZU1lbW9yeUVuY3J5cHRpb25B ZGRyZXNzT3JNYXNrLCBFbmNyeXB0aW9uTWFzayk7DQorICBBU1NFUlRfUkVUVVJOX0VSUk9SIChQ Y2RTdGF0dXMpOw0KKw0KKyAgREVCVUcgKChERUJVR19JTkZPLCAiU0VWIGlzIGVuYWJsZWQgKG1h c2sgMHglbHgpXG4iLCBFbmNyeXB0aW9uTWFzaykpOw0KKw0KKyAgLy8NCisgIC8vIFNldCBQY2Qg dG8gRGVueSB0aGUgZXhlY3V0aW9uIG9mIG9wdGlvbiBST00gd2hlbiBzZWN1cml0eQ0KKyAgLy8g dmlvbGF0aW9uLg0KKyAgLy8NCisgIFBjZFN0YXR1cyA9IFBjZFNldDMyUyAoUGNkT3B0aW9uUm9t SW1hZ2VWZXJpZmljYXRpb25Qb2xpY3ksIDB4NCk7DQorICBBU1NFUlRfUkVUVVJOX0VSUk9SIChQ Y2RTdGF0dXMpOw0KK30NCmRpZmYgLS1naXQgYS9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL0NsZWFy Q2FjaGUuYyBiL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvQ2xlYXJDYWNoZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmZhYjUzNjMzYTkKLS0tIC9kZXYvbnVsbAorKysg Yi9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL0NsZWFyQ2FjaGUuYwpAQCAtMCwwICsxLDExMiBAQAor LyoqQGZpbGUNCisgIEluc3RhbGwgYSBjYWxsYmFjayB0byBjbGVhciBjYWNoZSBvbiBhbGwgcHJv Y2Vzc29ycy4NCisgIFRoaXMgaXMgZm9yIGNvbmZvcm1hbmNlIHdpdGggdGhlIFRDRyAiUGxhdGZv cm0gUmVzZXQgQXR0YWNrIE1pdGlnYXRpb24NCisgIFNwZWNpZmljYXRpb24iLiBCZWNhdXNlIGNs ZWFyaW5nIHRoZSBDUFUgY2FjaGVzIGF0IGJvb3QgZG9lc24ndCBpbXBhY3QNCisgIHBlcmZvcm1h bmNlIHNpZ25pZmljYW50bHksIGRvIGl0IHVuY29uZGl0aW9uYWxseSwgZm9yIHNpbXBsaWNpdHkn cw0KKyAgc2FrZS4NCisNCisgIENvcHlyaWdodCAoQykgMjAxOCwgUmVkIEhhdCwgSW5jLg0KKyAg Q29weXJpZ2h0IChjKSAyMDE5LCBDaXRyaXggU3lzdGVtcywgSW5jLg0KKw0KKyAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaW5jbHVkZSA8 TGlicmFyeS9DYWNoZU1haW50ZW5hbmNlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvRGVidWdM aWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QZWlTZXJ2aWNlc0xpYi5oPg0KKyNpbmNsdWRlIDxQ cGkvTXBTZXJ2aWNlcy5oPg0KKw0KKyNpbmNsdWRlICJQbGF0Zm9ybS5oIg0KKw0KKy8qKg0KKyAg SW52YWxpZGF0ZSBkYXRhICYgaW5zdHJ1Y3Rpb24gY2FjaGVzLg0KKyAgQWxsIEFQcyBleGVjdXRl IHRoaXMgZnVuY3Rpb24gaW4gcGFyYWxsZWwuIFRoZSBCU1AgZXhlY3V0ZXMgdGhlIGZ1bmN0aW9u DQorICBzZXBhcmF0ZWx5Lg0KKw0KKyAgQHBhcmFtW2luLG91dF0gV29ya1NwYWNlICBQb2ludGVy IHRvIHRoZSBpbnB1dC9vdXRwdXQgYXJndW1lbnQgd29ya3NwYWNlDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNoYXJlZCBieSBhbGwgcHJvY2Vzc29ycy4NCisqKi8NCitTVEFUSUMNCitW T0lEDQorRUZJQVBJDQorQ2xlYXJDYWNoZSAoDQorICBJTiBPVVQgVk9JRCAqV29ya1NwYWNlDQor ICApDQorew0KKyAgV3JpdGVCYWNrSW52YWxpZGF0ZURhdGFDYWNoZSAoKTsNCisgIEludmFsaWRh dGVJbnN0cnVjdGlvbkNhY2hlICgpOw0KK30NCisNCisvKioNCisgIE5vdGlmaWNhdGlvbiBmdW5j dGlvbiBjYWxsZWQgd2hlbiBFRklfUEVJX01QX1NFUlZJQ0VTX1BQSSBiZWNvbWVzIGF2YWlsYWJs ZS4NCisNCisgIEBwYXJhbVtpbl0gUGVpU2VydmljZXMgICAgICBJbmRpcmVjdCByZWZlcmVuY2Ug dG8gdGhlIFBFSSBTZXJ2aWNlcyBUYWJsZS4NCisgIEBwYXJhbVtpbl0gTm90aWZ5RGVzY3JpcHRv ciBBZGRyZXNzIG9mIHRoZSBub3RpZmljYXRpb24gZGVzY3JpcHRvciBkYXRhDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLg0KKyAgQHBhcmFtW2luXSBQcGkgICAgICAg ICAgICAgIEFkZHJlc3Mgb2YgdGhlIFBQSSB0aGF0IHdhcyBpbnN0YWxsZWQuDQorDQorICBAcmV0 dXJuICBTdGF0dXMgb2YgdGhlIG5vdGlmaWNhdGlvbi4gVGhlIHN0YXR1cyBjb2RlIHJldHVybmVk IGZyb20gdGhpcw0KKyAgICAgICAgICAgZnVuY3Rpb24gaXMgaWdub3JlZC4NCisqKi8NCitTVEFU SUMNCitFRklfU1RBVFVTDQorRUZJQVBJDQorQ2xlYXJDYWNoZU9uTXBTZXJ2aWNlc0F2YWlsYWJs ZSAoDQorICBJTiBFRklfUEVJX1NFUlZJQ0VTICAgICAgICAgICAqKlBlaVNlcnZpY2VzLA0KKyAg SU4gRUZJX1BFSV9OT1RJRllfREVTQ1JJUFRPUiAgKk5vdGlmeURlc2NyaXB0b3IsDQorICBJTiBW T0lEICAgICAgICAgICAgICAgICAgICAgICAqUHBpDQorICApDQorew0KKyAgRUZJX1BFSV9NUF9T RVJWSUNFU19QUEkgKk1wU2VydmljZXM7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0 dXM7DQorDQorICBERUJVRyAoKERFQlVHX0lORk8sICIlYTogJWFcbiIsIGdFZmlDYWxsZXJCYXNl TmFtZSwgX19GVU5DVElPTl9fKSk7DQorDQorICAvLw0KKyAgLy8gQ2xlYXIgY2FjaGUgb24gYWxs IHRoZSBBUHMgaW4gcGFyYWxsZWwuDQorICAvLw0KKyAgTXBTZXJ2aWNlcyA9IFBwaTsNCisgIFN0 YXR1cyA9IE1wU2VydmljZXMtPlN0YXJ0dXBBbGxBUHMgKA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAoQ09OU1QgRUZJX1BFSV9TRVJWSUNFUyAqKilQZWlTZXJ2aWNlcywNCisgICAgICAgICAg ICAgICAgICAgICAgICAgTXBTZXJ2aWNlcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgQ2xl YXJDYWNoZSwgICAgICAgICAgLy8gUHJvY2VkdXJlDQorICAgICAgICAgICAgICAgICAgICAgICAg IEZBTFNFLCAgICAgICAgICAgICAgIC8vIFNpbmdsZVRocmVhZA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAvLyBUaW1lb3V0SW5NaWNyb1NlY29uZHM6IGlu Zi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgLy8gUHJv Y2VkdXJlQXJndW1lbnQNCisgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCisgIGlmIChFRklf RVJST1IgKFN0YXR1cykgJiYgU3RhdHVzICE9IEVGSV9OT1RfU1RBUlRFRCkgew0KKyAgICBERUJV RyAoKERFQlVHX0VSUk9SLCAiJWE6IFN0YXJ0dXBBbGxBcHMoKTogJXJcbiIsIF9fRlVOQ1RJT05f XywgU3RhdHVzKSk7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAvLw0KKyAgLy8g Tm93IGNsZWFyIGNhY2hlIG9uIHRoZSBCU1AgdG9vLg0KKyAgLy8NCisgIENsZWFyQ2FjaGUgKE5V TEwpOw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvLw0KKy8vIE5vdGlmaWNhdGlv biBvYmplY3QgZm9yIHJlZ2lzdGVyaW5nIHRoZSBjYWxsYmFjaywgZm9yIHdoZW4NCisvLyBFRklf UEVJX01QX1NFUlZJQ0VTX1BQSSBiZWNvbWVzIGF2YWlsYWJsZS4NCisvLw0KK1NUQVRJQyBDT05T VCBFRklfUEVJX05PVElGWV9ERVNDUklQVE9SIG1NcFNlcnZpY2VzTm90aWZ5ID0gew0KKyAgRUZJ X1BFSV9QUElfREVTQ1JJUFRPUl9OT1RJRllfQ0FMTEJBQ0sgfCAvLyBGbGFncw0KKyAgRUZJX1BF SV9QUElfREVTQ1JJUFRPUl9URVJNSU5BVEVfTElTVCwNCisgICZnRWZpUGVpTXBTZXJ2aWNlc1Bw aUd1aWQsICAgICAgICAgICAgICAgLy8gR3VpZA0KKyAgQ2xlYXJDYWNoZU9uTXBTZXJ2aWNlc0F2 YWlsYWJsZSAgICAgICAgICAvLyBOb3RpZnkNCit9Ow0KKw0KK1ZPSUQNCitJbnN0YWxsQ2xlYXJD YWNoZUNhbGxiYWNrICgNCisgIFZPSUQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAg ICBTdGF0dXM7DQorDQorICBTdGF0dXMgPSBQZWlTZXJ2aWNlc05vdGlmeVBwaSAoJm1NcFNlcnZp Y2VzTm90aWZ5KTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChE RUJVR19FUlJPUiwgIiVhOiBmYWlsZWQgdG8gc2V0IHVwIE1QIFNlcnZpY2VzIGNhbGxiYWNrOiAl clxuIiwNCisgICAgICBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KKyAgfQ0KK30NCmRpZmYgLS1n aXQgYS9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL0Ntb3MuYyBiL092bWZQa2cvWGVuUGxhdGZvcm1Q ZWkvQ21vcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjVkOWVlNjdj ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL0Ntb3MuYwpAQCAt MCwwICsxLDYwIEBACisvKiogQGZpbGUNCisgIFBDL0FUIENNT1MgYWNjZXNzIHJvdXRpbmVzDQor DQorICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC48QlI+DQorICBDb3B5cmlnaHQgKGMpIDIwMTksIENpdHJpeCBTeXN0ZW1z LCBJbmMuDQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVu dA0KKw0KKyoqLw0KKw0KKw0KKyNpbmNsdWRlICJDbW9zLmgiDQorI2luY2x1ZGUgIkxpYnJhcnkv SW9MaWIuaCINCisNCisvKioNCisgIFJlYWRzIDgtYml0cyBvZiBDTU9TIGRhdGEuDQorDQorICBS ZWFkcyB0aGUgOC1iaXRzIG9mIENNT1MgZGF0YSBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5 IEluZGV4Lg0KKyAgVGhlIDgtYml0IHJlYWQgdmFsdWUgaXMgcmV0dXJuZWQuDQorDQorICBAcGFy YW0gIEluZGV4ICBUaGUgQ01PUyBsb2NhdGlvbiB0byByZWFkLg0KKw0KKyAgQHJldHVybiBUaGUg dmFsdWUgcmVhZC4NCisNCisqKi8NCitVSU5UOA0KK0VGSUFQSQ0KK0Ntb3NSZWFkOCAoDQorICBJ TiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXgNCisgICkNCit7DQorICBJb1dy aXRlOCAoMHg3MCwgKFVJTlQ4KSBJbmRleCk7DQorICByZXR1cm4gSW9SZWFkOCAoMHg3MSk7DQor fQ0KKw0KKw0KKy8qKg0KKyAgV3JpdGVzIDgtYml0cyBvZiBDTU9TIGRhdGEuDQorDQorICBXcml0 ZXMgOC1iaXRzIG9mIENNT1MgZGF0YSB0byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IEluZGV4 DQorICB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgVmFsdWUgYW5kIHJldHVybnMgVmFsdWUu DQorDQorICBAcGFyYW0gIEluZGV4ICBUaGUgQ01PUyBsb2NhdGlvbiB0byB3cml0ZS4NCisgIEBw YXJhbSAgVmFsdWUgIFRoZSB2YWx1ZSB0byB3cml0ZSB0byBDTU9TLg0KKw0KKyAgQHJldHVybiBU aGUgdmFsdWUgd3JpdHRlbiB0byBDTU9TLg0KKw0KKyoqLw0KK1VJTlQ4DQorRUZJQVBJDQorQ21v c1dyaXRlOCAoDQorICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXgsDQor ICBJTiAgICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgVmFsdWUNCisgICkNCit7DQorICBJ b1dyaXRlOCAoMHg3MCwgKFVJTlQ4KSBJbmRleCk7DQorICBJb1dyaXRlOCAoMHg3MSwgVmFsdWUp Ow0KKyAgcmV0dXJuIFZhbHVlOw0KK30NCisNCmRpZmYgLS1naXQgYS9Pdm1mUGtnL1hlblBsYXRm b3JtUGVpL0Z2LmMgYi9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL0Z2LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZmFjMWZmYzlmZAotLS0gL2Rldi9udWxsCisrKyBiL092 bWZQa2cvWGVuUGxhdGZvcm1QZWkvRnYuYwpAQCAtMCwwICsxLDc2IEBACisvKiogQGZpbGUNCisg IEJ1aWxkIEZWIHJlbGF0ZWQgaG9icyBmb3IgcGxhdGZvcm0uDQorDQorICBDb3B5cmlnaHQgKGMp IDIwMDYgLSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ DQorICBDb3B5cmlnaHQgKGMpIDIwMTksIENpdHJpeCBTeXN0ZW1zLCBJbmMuDQorDQorICBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KKyoqLw0KKw0KKyNp bmNsdWRlICJQaVBlaS5oIg0KKyNpbmNsdWRlICJQbGF0Zm9ybS5oIg0KKyNpbmNsdWRlIDxMaWJy YXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvSG9iTGliLmg+DQorI2luY2x1ZGUg PExpYnJhcnkvUGVpU2VydmljZXNMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4N CisNCisNCisvKioNCisgIFB1Ymxpc2ggUEVJICYgRFhFIChEZWNvbXByZXNzZWQpIE1lbW9yeSBi YXNlZCBGVnMgdG8gbGV0IFBFSQ0KKyAgYW5kIERYRSBrbm93IGFib3V0IHRoZW0uDQorDQorICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgUGxhdGZvcm0gUEVJIEZWcyB3ZXJlIGluaXRpYWxpemVkIHN1 Y2Nlc3NmdWxseS4NCisNCisqKi8NCitFRklfU1RBVFVTDQorUGVpRnZJbml0aWFsaXphdGlvbiAo DQorICBWT0lEDQorICApDQorew0KKyAgREVCVUcgKChFRklfRF9JTkZPLCAiUGxhdGZvcm0gUEVJ IEZpcm13YXJlIFZvbHVtZSBJbml0aWFsaXphdGlvblxuIikpOw0KKw0KKyAgLy8NCisgIC8vIENy ZWF0ZSBhIG1lbW9yeSBhbGxvY2F0aW9uIEhPQiBmb3IgdGhlIFBFSSBGVi4NCisgIC8vDQorICAv LyBBbGxvY2F0ZSBhcyBBQ1BJIE5WUyBpcyBTMyBpcyBzdXBwb3J0ZWQNCisgIC8vDQorICBCdWls ZE1lbW9yeUFsbG9jYXRpb25Ib2IgKA0KKyAgICBQY2RHZXQzMiAoUGNkT3ZtZlBlaU1lbUZ2QmFz ZSksDQorICAgIFBjZEdldDMyIChQY2RPdm1mUGVpTWVtRnZTaXplKSwNCisgICAgRWZpQm9vdFNl cnZpY2VzRGF0YQ0KKyAgICApOw0KKw0KKyAgLy8NCisgIC8vIExldCBEWEUga25vdyBhYm91dCB0 aGUgRFhFIEZWDQorICAvLw0KKyAgQnVpbGRGdkhvYiAoUGNkR2V0MzIgKFBjZE92bWZEeGVNZW1G dkJhc2UpLCBQY2RHZXQzMiAoUGNkT3ZtZkR4ZU1lbUZ2U2l6ZSkpOw0KKw0KKyAgLy8NCisgIC8v IENyZWF0ZSBhIG1lbW9yeSBhbGxvY2F0aW9uIEhPQiBmb3IgdGhlIERYRSBGVi4NCisgIC8vDQor ICAvLyBJZiAic2VjdXJlIiBTMyBpcyBuZWVkZWQsIHRoZW4gU0VDIHdpbGwgZGVjb21wcmVzcyBi b3RoIFBFSSBhbmQgRFhFDQorICAvLyBmaXJtd2FyZSB2b2x1bWVzIGF0IFMzIHJlc3VtZSB0b28s IGhlbmNlIHdlIG5lZWQgdG8ga2VlcCBhd2F5IHRoZSBPUyBmcm9tDQorICAvLyBEWEVGViBhcyB3 ZWxsLiBPdGhlcndpc2Ugd2Ugb25seSBuZWVkIHRvIGtlZXAgYXdheSBEWEUgaXRzZWxmIGZyb20g dGhlDQorICAvLyBEWEVGViBhcmVhLg0KKyAgLy8NCisgIEJ1aWxkTWVtb3J5QWxsb2NhdGlvbkhv YiAoDQorICAgIFBjZEdldDMyIChQY2RPdm1mRHhlTWVtRnZCYXNlKSwNCisgICAgUGNkR2V0MzIg KFBjZE92bWZEeGVNZW1GdlNpemUpLA0KKyAgICBFZmlCb290U2VydmljZXNEYXRhDQorICAgICk7 DQorDQorICAvLw0KKyAgLy8gTGV0IFBFSSBrbm93IGFib3V0IHRoZSBEWEUgRlYgc28gaXQgY2Fu IGZpbmQgdGhlIERYRSBDb3JlDQorICAvLw0KKyAgUGVpU2VydmljZXNJbnN0YWxsRnZJbmZvUHBp ICgNCisgICAgTlVMTCwNCisgICAgKFZPSUQgKikoVUlOVE4pIFBjZEdldDMyIChQY2RPdm1mRHhl TWVtRnZCYXNlKSwNCisgICAgUGNkR2V0MzIgKFBjZE92bWZEeGVNZW1GdlNpemUpLA0KKyAgICBO VUxMLA0KKyAgICBOVUxMDQorICAgICk7DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0K Kw0KZGlmZiAtLWdpdCBhL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvTWVtRGV0ZWN0LmMgYi9Pdm1m UGtnL1hlblBsYXRmb3JtUGVpL01lbURldGVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLmNiN2RkOTNhZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Pdm1mUGtnL1hlblBs YXRmb3JtUGVpL01lbURldGVjdC5jCkBAIC0wLDAgKzEsNDIxIEBACisvKipAZmlsZQ0KKyAgTWVt b3J5IERldGVjdGlvbiBmb3IgVmlydHVhbCBNYWNoaW5lcy4NCisNCisgIENvcHlyaWdodCAoYykg MjAwNiAtIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N CisgIENvcHlyaWdodCAoYykgMjAxOSwgQ2l0cml4IFN5c3RlbXMsIEluYy4NCisNCisgIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorDQorTW9kdWxlIE5hbWU6 DQorDQorICBNZW1EZXRlY3QuYw0KKw0KKyoqLw0KKw0KKy8vDQorLy8gVGhlIHBhY2thZ2UgbGV2 ZWwgaGVhZGVyIGZpbGVzIHRoaXMgbW9kdWxlIHVzZXMNCisvLw0KKyNpbmNsdWRlIDxJbmR1c3Ry eVN0YW5kYXJkL1EzNU1jaEljaDkuaD4NCisjaW5jbHVkZSA8UGlQZWkuaD4NCisNCisvLw0KKy8v IFRoZSBMaWJyYXJ5IGNsYXNzZXMgdGhpcyBtb2R1bGUgY29uc3VtZXMNCisvLw0KKyNpbmNsdWRl IDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+ DQorI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9Ib2JM aWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9Jb0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1Bj ZExpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1BjaUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5 L1BlaW1FbnRyeVBvaW50Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUmVzb3VyY2VQdWJsaWNhdGlv bkxpYi5oPg0KKw0KKyNpbmNsdWRlICJQbGF0Zm9ybS5oIg0KKyNpbmNsdWRlICJDbW9zLmgiDQor DQorVUlOVDggbVBoeXNNZW1BZGRyZXNzV2lkdGg7DQorDQorU1RBVElDIFVJTlQzMiBtUzNBY3Bp UmVzZXJ2ZWRNZW1vcnlCYXNlOw0KK1NUQVRJQyBVSU5UMzIgbVMzQWNwaVJlc2VydmVkTWVtb3J5 U2l6ZTsNCisNCitTVEFUSUMgVUlOVDE2IG1RMzVUc2VnTWJ5dGVzOw0KKw0KK1ZPSUQNCitRMzVU c2VnTWJ5dGVzSW5pdGlhbGl6YXRpb24gKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIFVJTlQxNiAg ICAgICAgRXh0ZW5kZWRUc2VnTWJ5dGVzOw0KKyAgUkVUVVJOX1NUQVRVUyBQY2RTdGF0dXM7DQor DQorICBpZiAobUhvc3RCcmlkZ2VEZXZJZCAhPSBJTlRFTF9RMzVfTUNIX0RFVklDRV9JRCkgew0K KyAgICBERUJVRyAoKA0KKyAgICAgIERFQlVHX0VSUk9SLA0KKyAgICAgICIlYTogbm8gVFNFRyAo U01SQU0pIG9uIGhvc3QgYnJpZGdlIERJRD0weCUwNHg7ICINCisgICAgICAib25seSBESUQ9MHgl MDR4IChRMzUpIGlzIHN1cHBvcnRlZFxuIiwNCisgICAgICBfX0ZVTkNUSU9OX18sDQorICAgICAg bUhvc3RCcmlkZ2VEZXZJZCwNCisgICAgICBJTlRFTF9RMzVfTUNIX0RFVklDRV9JRA0KKyAgICAg ICkpOw0KKyAgICBBU1NFUlQgKEZBTFNFKTsNCisgICAgQ3B1RGVhZExvb3AgKCk7DQorICB9DQor DQorICAvLw0KKyAgLy8gQ2hlY2sgaWYgUUVNVSBvZmZlcnMgYW4gZXh0ZW5kZWQgVFNFRy4NCisg IC8vDQorICAvLyBUaGlzIGNhbiBiZSBzZWVuIGZyb20gd3JpdGluZyBNQ0hfRVhUX1RTRUdfTUJf UVVFUlkgdG8gdGhlIE1DSF9FWFRfVFNFR19NQg0KKyAgLy8gcmVnaXN0ZXIsIGFuZCByZWFkaW5n IGJhY2sgdGhlIHJlZ2lzdGVyLg0KKyAgLy8NCisgIC8vIE9uIGEgUUVNVSBtYWNoaW5lIHR5cGUg dGhhdCBkb2VzIG5vdCBvZmZlciBhbiBleHRlbmRlZCBUU0VHLCB0aGUgaW5pdGlhbA0KKyAgLy8g d3JpdGUgb3ZlcndyaXRlcyB3aGF0ZXZlciB2YWx1ZSBhIG1hbGljaW91cyBndWVzdCBPUyBtYXkg aGF2ZSBwbGFjZWQgaW4NCisgIC8vIHRoZSAodW5pbXBsZW1lbnRlZCkgcmVnaXN0ZXIsIGJlZm9y ZSBlbnRlcmluZyBTMyBvciByZWJvb3RpbmcuDQorICAvLyBTdWJzZXF1ZW50bHksIHRoZSByZWFk IHJldHVybnMgTUNIX0VYVF9UU0VHX01CX1FVRVJZIHVuY2hhbmdlZC4NCisgIC8vDQorICAvLyBP biBhIFFFTVUgbWFjaGluZSB0eXBlIHRoYXQgb2ZmZXJzIGFuIGV4dGVuZGVkIFRTRUcsIHRoZSBp bml0aWFsIHdyaXRlDQorICAvLyB0cmlnZ2VycyBhbiB1cGRhdGUgdG8gdGhlIHJlZ2lzdGVyLiBT dWJzZXF1ZW50bHksIHRoZSB2YWx1ZSByZWFkIGJhY2sNCisgIC8vICh3aGljaCBpcyBndWFyYW50 ZWVkIHRvIGRpZmZlciBmcm9tIE1DSF9FWFRfVFNFR19NQl9RVUVSWSkgdGVsbHMgdXMgdGhlDQor ICAvLyBudW1iZXIgb2YgbWVnYWJ5dGVzLg0KKyAgLy8NCisgIFBjaVdyaXRlMTYgKERSQU1DX1JF R0lTVEVSX1EzNSAoTUNIX0VYVF9UU0VHX01CKSwgTUNIX0VYVF9UU0VHX01CX1FVRVJZKTsNCisg IEV4dGVuZGVkVHNlZ01ieXRlcyA9IFBjaVJlYWQxNiAoRFJBTUNfUkVHSVNURVJfUTM1IChNQ0hf RVhUX1RTRUdfTUIpKTsNCisgIGlmIChFeHRlbmRlZFRzZWdNYnl0ZXMgPT0gTUNIX0VYVF9UU0VH X01CX1FVRVJZKSB7DQorICAgIG1RMzVUc2VnTWJ5dGVzID0gUGNkR2V0MTYgKFBjZFEzNVRzZWdN Ynl0ZXMpOw0KKyAgICByZXR1cm47DQorICB9DQorDQorICBERUJVRyAoKA0KKyAgICBERUJVR19J TkZPLA0KKyAgICAiJWE6IFFFTVUgb2ZmZXJzIGFuIGV4dGVuZGVkIFRTRUcgKCVkIE1CKVxuIiwN CisgICAgX19GVU5DVElPTl9fLA0KKyAgICBFeHRlbmRlZFRzZWdNYnl0ZXMNCisgICAgKSk7DQor ICBQY2RTdGF0dXMgPSBQY2RTZXQxNlMgKFBjZFEzNVRzZWdNYnl0ZXMsIEV4dGVuZGVkVHNlZ01i eXRlcyk7DQorICBBU1NFUlRfUkVUVVJOX0VSUk9SIChQY2RTdGF0dXMpOw0KKyAgbVEzNVRzZWdN Ynl0ZXMgPSBFeHRlbmRlZFRzZWdNYnl0ZXM7DQorfQ0KKw0KKw0KK1VJTlQzMg0KK0dldFN5c3Rl bU1lbW9yeVNpemVCZWxvdzRnYiAoDQorICBWT0lEDQorICApDQorew0KKyAgVUlOVDggQ21vczB4 MzQ7DQorICBVSU5UOCBDbW9zMHgzNTsNCisNCisgIC8vDQorICAvLyBDTU9TIDB4MzQvMHgzNSBz cGVjaWZpZXMgdGhlIHN5c3RlbSBtZW1vcnkgYWJvdmUgMTYgTUIuDQorICAvLyAqIENNT1MoMHgz NSkgaXMgdGhlIGhpZ2ggYnl0ZQ0KKyAgLy8gKiBDTU9TKDB4MzQpIGlzIHRoZSBsb3cgYnl0ZQ0K KyAgLy8gKiBUaGUgc2l6ZSBpcyBzcGVjaWZpZWQgaW4gNjRrYiBjaHVua3MNCisgIC8vICogU2lu Y2UgdGhpcyBpcyBtZW1vcnkgYWJvdmUgMTZNQiwgdGhlIDE2TUIgbXVzdCBiZSBhZGRlZA0KKyAg Ly8gICBpbnRvIHRoZSBjYWxjdWxhdGlvbiB0byBnZXQgdGhlIHRvdGFsIG1lbW9yeSBzaXplLg0K KyAgLy8NCisNCisgIENtb3MweDM0ID0gKFVJTlQ4KSBDbW9zUmVhZDggKDB4MzQpOw0KKyAgQ21v czB4MzUgPSAoVUlOVDgpIENtb3NSZWFkOCAoMHgzNSk7DQorDQorICByZXR1cm4gKFVJTlQzMikg KCgoVUlOVE4pKChDbW9zMHgzNSA8PCA4KSArIENtb3MweDM0KSA8PCAxNikgKyBTSVpFXzE2TUIp Ow0KK30NCisNCisNCitTVEFUSUMNCitVSU5UNjQNCitHZXRTeXN0ZW1NZW1vcnlTaXplQWJvdmU0 Z2IgKA0KKyAgKQ0KK3sNCisgIFVJTlQzMiBTaXplOw0KKyAgVUlOVE4gIENtb3NJbmRleDsNCisN CisgIC8vDQorICAvLyBDTU9TIDB4NWItMHg1ZCBzcGVjaWZpZXMgdGhlIHN5c3RlbSBtZW1vcnkg YWJvdmUgNEdCIE1CLg0KKyAgLy8gKiBDTU9TKDB4NWQpIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50 IHNpemUgYnl0ZQ0KKyAgLy8gKiBDTU9TKDB4NWMpIGlzIHRoZSBtaWRkbGUgc2l6ZSBieXRlDQor ICAvLyAqIENNT1MoMHg1YikgaXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IHNpemUgYnl0ZQ0KKyAg Ly8gKiBUaGUgc2l6ZSBpcyBzcGVjaWZpZWQgaW4gNjRrYiBjaHVua3MNCisgIC8vDQorDQorICBT aXplID0gMDsNCisgIGZvciAoQ21vc0luZGV4ID0gMHg1ZDsgQ21vc0luZGV4ID49IDB4NWI7IENt b3NJbmRleC0tKSB7DQorICAgIFNpemUgPSAoVUlOVDMyKSAoU2l6ZSA8PCA4KSArIChVSU5UMzIp IENtb3NSZWFkOCAoQ21vc0luZGV4KTsNCisgIH0NCisNCisgIHJldHVybiBMU2hpZnRVNjQgKFNp emUsIDE2KTsNCit9DQorDQorDQorLyoqDQorICBSZXR1cm4gdGhlIGhpZ2hlc3QgYWRkcmVzcyB0 aGF0IERYRSBjb3VsZCBwb3NzaWJseSB1c2UsIHBsdXMgb25lLg0KKyoqLw0KK1NUQVRJQw0KK1VJ TlQ2NA0KK0dldEZpcnN0Tm9uQWRkcmVzcyAoDQorICBWT0lEDQorICApDQorew0KKyAgVUlOVDY0 ICAgICAgICAgICAgICAgRmlyc3ROb25BZGRyZXNzOw0KKyAgVUlOVDY0ICAgICAgICAgICAgICAg UGNpNjRCYXNlLCBQY2k2NFNpemU7DQorICBSRVRVUk5fU1RBVFVTICAgICAgICBQY2RTdGF0dXM7 DQorDQorICBGaXJzdE5vbkFkZHJlc3MgPSBCQVNFXzRHQiArIEdldFN5c3RlbU1lbW9yeVNpemVB Ym92ZTRnYiAoKTsNCisNCisgIC8vDQorICAvLyBJZiBEWEUgaXMgMzItYml0LCB0aGVuIHdlJ3Jl IGRvbmU7IFBjaUJ1c0R4ZSB3aWxsIGRlZ3JhZGUgNjQtYml0IE1NSU8NCisgIC8vIHJlc291cmNl cyB0byAzMi1iaXQgYW55d2F5LiBTZWUgRGVncmFkZVJlc291cmNlKCkgaW4NCisgIC8vICJQY2lS ZXNvdXJjZVN1cHBvcnQuYyIuDQorICAvLw0KKyNpZmRlZiBNREVfQ1BVX0lBMzINCisgIGlmICgh RmVhdHVyZVBjZEdldCAoUGNkRHhlSXBsU3dpdGNoVG9Mb25nTW9kZSkpIHsNCisgICAgcmV0dXJu IEZpcnN0Tm9uQWRkcmVzczsNCisgIH0NCisjZW5kaWYNCisNCisgIC8vDQorICAvLyBPdGhlcndp c2UsIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSB0aGUgaGlnaGVzdCBhZGRyZXNzIHBsdXMgb25lLCB3 ZSBtdXN0DQorICAvLyBjb25zaWRlciB0aGUgNjQtYml0IFBDSSBob3N0IGFwZXJ0dXJlIHRvby4g RmV0Y2ggdGhlIGRlZmF1bHQgc2l6ZS4NCisgIC8vDQorICBQY2k2NFNpemUgPSBQY2RHZXQ2NCAo UGNkUGNpTW1pbzY0U2l6ZSk7DQorDQorICBpZiAoUGNpNjRTaXplID09IDApIHsNCisgICAgaWYg KG1Cb290TW9kZSAhPSBCT09UX09OX1MzX1JFU1VNRSkgew0KKyAgICAgIERFQlVHICgoRUZJX0Rf SU5GTywgIiVhOiBkaXNhYmxpbmcgNjQtYml0IFBDSSBob3N0IGFwZXJ0dXJlXG4iLA0KKyAgICAg ICAgX19GVU5DVElPTl9fKSk7DQorICAgICAgUGNkU3RhdHVzID0gUGNkU2V0NjRTIChQY2RQY2lN bWlvNjRTaXplLCAwKTsNCisgICAgICBBU1NFUlRfUkVUVVJOX0VSUk9SIChQY2RTdGF0dXMpOw0K KyAgICB9DQorDQorICAgIC8vDQorICAgIC8vIFRoZXJlJ3Mgbm90aGluZyBtb3JlIHRvIGRvOyB0 aGUgYW1vdW50IG9mIG1lbW9yeSBhYm92ZSA0R0IgZnVsbHkNCisgICAgLy8gZGV0ZXJtaW5lcyB0 aGUgaGlnaGVzdCBhZGRyZXNzIHBsdXMgb25lLiBUaGUgbWVtb3J5IGhvdHBsdWcgYXJlYSAoc2Vl DQorICAgIC8vIGJlbG93KSBwbGF5cyBubyByb2xlIGZvciB0aGUgZmlybXdhcmUgaW4gdGhpcyBj YXNlLg0KKyAgICAvLw0KKyAgICByZXR1cm4gRmlyc3ROb25BZGRyZXNzOw0KKyAgfQ0KKw0KKyAg Ly8NCisgIC8vIFNlYUJJT1MgYWxpZ25zIGJvdGggYm91bmRhcmllcyBvZiB0aGUgNjQtYml0IFBD SSBob3N0IGFwZXJ0dXJlIHRvIDFHQiwgc28NCisgIC8vIHRoYXQgdGhlIGhvc3QgY2FuIG1hcCBp dCB3aXRoIDFHQiBodWdlcGFnZXMuIEZvbGxvdyBzdWl0Lg0KKyAgLy8NCisgIFBjaTY0QmFzZSA9 IEFMSUdOX1ZBTFVFIChGaXJzdE5vbkFkZHJlc3MsIChVSU5UNjQpU0laRV8xR0IpOw0KKyAgUGNp NjRTaXplID0gQUxJR05fVkFMVUUgKFBjaTY0U2l6ZSwgKFVJTlQ2NClTSVpFXzFHQik7DQorDQor ICAvLw0KKyAgLy8gVGhlIDY0LWJpdCBQQ0kgaG9zdCBhcGVydHVyZSBzaG91bGQgYWxzbyBiZSAi bmF0dXJhbGx5IiBhbGlnbmVkLiBUaGUNCisgIC8vIGFsaWdubWVudCBpcyBkZXRlcm1pbmVkIGJ5 IHJvdW5kaW5nIHRoZSBzaXplIG9mIHRoZSBhcGVydHVyZSBkb3duIHRvIHRoZQ0KKyAgLy8gbmV4 dCBzbWFsbGVyIG9yIGVxdWFsIHBvd2VyIG9mIHR3by4gVGhhdCBpcywgYWxpZ24gdGhlIGFwZXJ0 dXJlIGJ5IHRoZQ0KKyAgLy8gbGFyZ2VzdCBCQVIgc2l6ZSB0aGF0IGNhbiBmaXQgaW50byBpdC4N CisgIC8vDQorICBQY2k2NEJhc2UgPSBBTElHTl9WQUxVRSAoUGNpNjRCYXNlLCBHZXRQb3dlck9m VHdvNjQgKFBjaTY0U2l6ZSkpOw0KKw0KKyAgaWYgKG1Cb290TW9kZSAhPSBCT09UX09OX1MzX1JF U1VNRSkgew0KKyAgICAvLw0KKyAgICAvLyBUaGUgY29yZSBQY2lIb3N0QnJpZGdlRHhlIGRyaXZl ciB3aWxsIGF1dG9tYXRpY2FsbHkgYWRkIHRoaXMgcmFuZ2UgdG8NCisgICAgLy8gdGhlIEdDRCBt ZW1vcnkgc3BhY2UgbWFwIHRocm91Z2ggb3VyIFBjaUhvc3RCcmlkZ2VMaWIgaW5zdGFuY2U7IGhl cmUgd2UNCisgICAgLy8gb25seSBuZWVkIHRvIHNldCB0aGUgUENEcy4NCisgICAgLy8NCisgICAg UGNkU3RhdHVzID0gUGNkU2V0NjRTIChQY2RQY2lNbWlvNjRCYXNlLCBQY2k2NEJhc2UpOw0KKyAg ICBBU1NFUlRfUkVUVVJOX0VSUk9SIChQY2RTdGF0dXMpOw0KKyAgICBQY2RTdGF0dXMgPSBQY2RT ZXQ2NFMgKFBjZFBjaU1taW82NFNpemUsIFBjaTY0U2l6ZSk7DQorICAgIEFTU0VSVF9SRVRVUk5f RVJST1IgKFBjZFN0YXR1cyk7DQorDQorICAgIERFQlVHICgoRUZJX0RfSU5GTywgIiVhOiBQY2k2 NEJhc2U9MHglTHggUGNpNjRTaXplPTB4JUx4XG4iLA0KKyAgICAgIF9fRlVOQ1RJT05fXywgUGNp NjRCYXNlLCBQY2k2NFNpemUpKTsNCisgIH0NCisNCisgIC8vDQorICAvLyBUaGUgdXNlZnVsIGFk ZHJlc3Mgc3BhY2UgZW5kcyB3aXRoIHRoZSA2NC1iaXQgUENJIGhvc3QgYXBlcnR1cmUuDQorICAv Lw0KKyAgRmlyc3ROb25BZGRyZXNzID0gUGNpNjRCYXNlICsgUGNpNjRTaXplOw0KKyAgcmV0dXJu IEZpcnN0Tm9uQWRkcmVzczsNCit9DQorDQorDQorLyoqDQorICBJbml0aWFsaXplIHRoZSBtUGh5 c01lbUFkZHJlc3NXaWR0aCB2YXJpYWJsZSwgYmFzZWQgb24gZ3Vlc3QgUkFNIHNpemUuDQorKiov DQorVk9JRA0KK0FkZHJlc3NXaWR0aEluaXRpYWxpemF0aW9uICgNCisgIFZPSUQNCisgICkNCit7 DQorICBVSU5UNjQgRmlyc3ROb25BZGRyZXNzOw0KKw0KKyAgLy8NCisgIC8vIEFzIGd1ZXN0LXBo eXNpY2FsIG1lbW9yeSBzaXplIGdyb3dzLCB0aGUgcGVybWFuZW50IFBFSSBSQU0gcmVxdWlyZW1l bnRzDQorICAvLyBhcmUgZG9taW5hdGVkIGJ5IHRoZSBpZGVudGl0eS1tYXBwaW5nIHBhZ2UgdGFi bGVzIGJ1aWx0IGJ5IHRoZSBEWEUgSVBMLg0KKyAgLy8gVGhlIERYTCBJUEwga2V5cyBvZmYgb2Yg dGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cyBhZHZlcnRpemVkIGluIHRoZSBDUFUNCisgIC8vIEhP Qi4gVG8gY29uc2VydmUgbWVtb3J5LCB3ZSBjYWxjdWxhdGUgdGhlIG1pbmltdW0gYWRkcmVzcyB3 aWR0aCBoZXJlLg0KKyAgLy8NCisgIEZpcnN0Tm9uQWRkcmVzcyAgICAgID0gR2V0Rmlyc3ROb25B ZGRyZXNzICgpOw0KKyAgbVBoeXNNZW1BZGRyZXNzV2lkdGggPSAoVUlOVDgpSGlnaEJpdFNldDY0 IChGaXJzdE5vbkFkZHJlc3MpOw0KKw0KKyAgLy8NCisgIC8vIElmIEZpcnN0Tm9uQWRkcmVzcyBp cyBub3QgYW4gaW50ZWdyYWwgcG93ZXIgb2YgdHdvLCB0aGVuIHdlIG5lZWQgYW4NCisgIC8vIGFk ZGl0aW9uYWwgYml0Lg0KKyAgLy8NCisgIGlmICgoRmlyc3ROb25BZGRyZXNzICYgKEZpcnN0Tm9u QWRkcmVzcyAtIDEpKSAhPSAwKSB7DQorICAgICsrbVBoeXNNZW1BZGRyZXNzV2lkdGg7DQorICB9 DQorDQorICAvLw0KKyAgLy8gVGhlIG1pbmltdW0gYWRkcmVzcyB3aWR0aCBpcyAzNiAoY292ZXJz IHVwIHRvIGFuZCBleGNsdWRpbmcgNjQgR0IsIHdoaWNoDQorICAvLyBpcyB0aGUgbWF4aW11bSBm b3IgSWEzMiArIFBBRSkuIFRoZSB0aGVvcmV0aWNhbCBhcmNoaXRlY3R1cmUgbWF4aW11bSBmb3IN CisgIC8vIFg2NCBsb25nIG1vZGUgaXMgNTIgYml0cywgYnV0IHRoZSBEWEUgSVBMIGNsYW1wcyB0 aGF0IGRvd24gdG8gNDggYml0cy4gV2UNCisgIC8vIGNhbiBzaW1wbHkgYXNzZXJ0IHRoYXQgaGVy ZSwgc2luY2UgNDggYml0cyBhcmUgZ29vZCBlbm91Z2ggZm9yIDI1NiBUQi4NCisgIC8vDQorICBp ZiAobVBoeXNNZW1BZGRyZXNzV2lkdGggPD0gMzYpIHsNCisgICAgbVBoeXNNZW1BZGRyZXNzV2lk dGggPSAzNjsNCisgIH0NCisgIEFTU0VSVCAobVBoeXNNZW1BZGRyZXNzV2lkdGggPD0gNDgpOw0K K30NCisNCisNCisvKioNCisgIENhbGN1bGF0ZSB0aGUgY2FwIGZvciB0aGUgcGVybWFuZW50IFBF SSBtZW1vcnkuDQorKiovDQorU1RBVElDDQorVUlOVDMyDQorR2V0UGVpTWVtb3J5Q2FwICgNCisg IFZPSUQNCisgICkNCit7DQorICBCT09MRUFOIFBhZ2UxR1N1cHBvcnQ7DQorICBVSU5UMzIgIFJl Z0VheDsNCisgIFVJTlQzMiAgUmVnRWR4Ow0KKyAgVUlOVDMyICBQbWw0RW50cmllczsNCisgIFVJ TlQzMiAgUGRwRW50cmllczsNCisgIFVJTlROICAgVG90YWxQYWdlczsNCisNCisgIC8vDQorICAv LyBJZiBEWEUgaXMgMzItYml0LCB0aGVuIGp1c3QgcmV0dXJuIHRoZSB0cmFkaXRpb25hbCA2NCBN QiBjYXAuDQorICAvLw0KKyNpZmRlZiBNREVfQ1BVX0lBMzINCisgIGlmICghRmVhdHVyZVBjZEdl dCAoUGNkRHhlSXBsU3dpdGNoVG9Mb25nTW9kZSkpIHsNCisgICAgcmV0dXJuIFNJWkVfNjRNQjsN CisgIH0NCisjZW5kaWYNCisNCisgIC8vDQorICAvLyBEZXBlbmRlbnQgb24gcGh5c2ljYWwgYWRk cmVzcyB3aWR0aCwgUEVJIG1lbW9yeSBhbGxvY2F0aW9ucyBjYW4gYmUNCisgIC8vIGRvbWluYXRl ZCBieSB0aGUgcGFnZSB0YWJsZXMgYnVpbHQgZm9yIDY0LWJpdCBEWEUuIFNvIHdlIGtleSB0aGUg Y2FwIG9mZg0KKyAgLy8gb2YgdGhvc2UuIFRoZSBjb2RlIGJlbG93IGlzIGJhc2VkIG9uIENyZWF0 ZUlkZW50aXR5TWFwcGluZ1BhZ2VUYWJsZXMoKSBpbg0KKyAgLy8gIk1kZU1vZHVsZVBrZy9Db3Jl L0R4ZUlwbFBlaW0vWDY0L1ZpcnR1YWxNZW1vcnkuYyIuDQorICAvLw0KKyAgUGFnZTFHU3VwcG9y dCA9IEZBTFNFOw0KKyAgaWYgKFBjZEdldEJvb2wgKFBjZFVzZTFHUGFnZVRhYmxlKSkgew0KKyAg ICBBc21DcHVpZCAoMHg4MDAwMDAwMCwgJlJlZ0VheCwgTlVMTCwgTlVMTCwgTlVMTCk7DQorICAg IGlmIChSZWdFYXggPj0gMHg4MDAwMDAwMSkgew0KKyAgICAgIEFzbUNwdWlkICgweDgwMDAwMDAx LCBOVUxMLCBOVUxMLCBOVUxMLCAmUmVnRWR4KTsNCisgICAgICBpZiAoKFJlZ0VkeCAmIEJJVDI2 KSAhPSAwKSB7DQorICAgICAgICBQYWdlMUdTdXBwb3J0ID0gVFJVRTsNCisgICAgICB9DQorICAg IH0NCisgIH0NCisNCisgIGlmIChtUGh5c01lbUFkZHJlc3NXaWR0aCA8PSAzOSkgew0KKyAgICBQ bWw0RW50cmllcyA9IDE7DQorICAgIFBkcEVudHJpZXMgPSAxIDw8IChtUGh5c01lbUFkZHJlc3NX aWR0aCAtIDMwKTsNCisgICAgQVNTRVJUIChQZHBFbnRyaWVzIDw9IDB4MjAwKTsNCisgIH0gZWxz ZSB7DQorICAgIFBtbDRFbnRyaWVzID0gMSA8PCAobVBoeXNNZW1BZGRyZXNzV2lkdGggLSAzOSk7 DQorICAgIEFTU0VSVCAoUG1sNEVudHJpZXMgPD0gMHgyMDApOw0KKyAgICBQZHBFbnRyaWVzID0g NTEyOw0KKyAgfQ0KKw0KKyAgVG90YWxQYWdlcyA9IFBhZ2UxR1N1cHBvcnQgPyBQbWw0RW50cmll cyArIDEgOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUGRwRW50cmllcyArIDEp ICogUG1sNEVudHJpZXMgKyAxOw0KKyAgQVNTRVJUIChUb3RhbFBhZ2VzIDw9IDB4NDAyMDEpOw0K Kw0KKyAgLy8NCisgIC8vIEFkZCA2NCBNQiBmb3IgbWlzY2VsbGFuZW91cyBhbGxvY2F0aW9ucy4g Tm90ZSB0aGF0IGZvcg0KKyAgLy8gbVBoeXNNZW1BZGRyZXNzV2lkdGggdmFsdWVzIGNsb3NlIHRv IDM2LCB0aGUgY2FwIHdpbGwgYWN0dWFsbHkgYmUNCisgIC8vIGRvbWluYXRlZCBieSB0aGlzIGlu Y3JlbWVudC4NCisgIC8vDQorICByZXR1cm4gKFVJTlQzMikoRUZJX1BBR0VTX1RPX1NJWkUgKFRv dGFsUGFnZXMpICsgU0laRV82NE1CKTsNCit9DQorDQorDQorLyoqDQorICBQdWJsaXNoIFBFSSBj b3JlIG1lbW9yeQ0KKw0KKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgVGhlIFBFSU0gaW5pdGlh bGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitQdWJsaXNoUGVpTWVt b3J5ICgNCisgIFZPSUQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIE1lbW9yeUJhc2U7DQorICBV SU5UNjQgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5U2l6ZTsNCisgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgICBMb3dlck1lbW9yeVNpemU7DQorICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgUGVpTWVtb3J5Q2FwOw0KKw0KKyAgTG93ZXJNZW1vcnlTaXplID0gR2V0U3lzdGVtTWVt b3J5U2l6ZUJlbG93NGdiICgpOw0KKw0KKyAgaWYgKG1Cb290TW9kZSA9PSBCT09UX09OX1MzX1JF U1VNRSkgew0KKyAgICBNZW1vcnlCYXNlID0gbVMzQWNwaVJlc2VydmVkTWVtb3J5QmFzZTsNCisg ICAgTWVtb3J5U2l6ZSA9IG1TM0FjcGlSZXNlcnZlZE1lbW9yeVNpemU7DQorICB9IGVsc2Ugew0K KyAgICBQZWlNZW1vcnlDYXAgPSBHZXRQZWlNZW1vcnlDYXAgKCk7DQorICAgIERFQlVHICgoRUZJ X0RfSU5GTywgIiVhOiBtUGh5c01lbUFkZHJlc3NXaWR0aD0lZCBQZWlNZW1vcnlDYXA9JXUgS0Jc biIsDQorICAgICAgX19GVU5DVElPTl9fLCBtUGh5c01lbUFkZHJlc3NXaWR0aCwgUGVpTWVtb3J5 Q2FwID4+IDEwKSk7DQorDQorICAgIC8vDQorICAgIC8vIERldGVybWluZSB0aGUgcmFuZ2Ugb2Yg bWVtb3J5IHRvIHVzZSBkdXJpbmcgUEVJDQorICAgIC8vDQorICAgIE1lbW9yeUJhc2UgPQ0KKyAg ICAgIFBjZEdldDMyIChQY2RPdm1mRHhlTWVtRnZCYXNlKSArIFBjZEdldDMyIChQY2RPdm1mRHhl TWVtRnZTaXplKTsNCisgICAgTWVtb3J5U2l6ZSA9IExvd2VyTWVtb3J5U2l6ZSAtIE1lbW9yeUJh c2U7DQorICAgIGlmIChNZW1vcnlTaXplID4gUGVpTWVtb3J5Q2FwKSB7DQorICAgICAgTWVtb3J5 QmFzZSA9IExvd2VyTWVtb3J5U2l6ZSAtIFBlaU1lbW9yeUNhcDsNCisgICAgICBNZW1vcnlTaXpl ID0gUGVpTWVtb3J5Q2FwOw0KKyAgICB9DQorICB9DQorDQorICAvLw0KKyAgLy8gUHVibGlzaCB0 aGlzIG1lbW9yeSB0byB0aGUgUEVJIENvcmUNCisgIC8vDQorICBTdGF0dXMgPSBQdWJsaXNoU3lz dGVtTWVtb3J5KE1lbW9yeUJhc2UsIE1lbW9yeVNpemUpOw0KKyAgQVNTRVJUX0VGSV9FUlJPUiAo U3RhdHVzKTsNCisNCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKw0KKy8qKg0KKyAgUHVibGlz aCBzeXN0ZW0gUkFNIGFuZCByZXNlcnZlIG1lbW9yeSByZWdpb25zDQorDQorKiovDQorVk9JRA0K K0luaXRpYWxpemVSYW1SZWdpb25zICgNCisgIFZPSUQNCisgICkNCit7DQorICBYZW5QdWJsaXNo UmFtUmVnaW9ucyAoKTsNCisNCisgIGlmIChtQm9vdE1vZGUgIT0gQk9PVF9PTl9TM19SRVNVTUUp IHsNCisgICAgLy8NCisgICAgLy8gUmVzZXJ2ZSB0aGUgbG9jayBib3ggc3RvcmFnZSBhcmVhDQor ICAgIC8vDQorICAgIC8vIFNpbmNlIHRoaXMgbWVtb3J5IHJhbmdlIHdpbGwgYmUgdXNlZCBvbiBT MyByZXN1bWUsIGl0IG11c3QgYmUNCisgICAgLy8gcmVzZXJ2ZWQgYXMgQUNQSSBOVlMuDQorICAg IC8vDQorICAgIC8vIElmIFMzIGlzIHVuc3VwcG9ydGVkLCB0aGVuIHZhcmlvdXMgZHJpdmVycyBt aWdodCBzdGlsbCB3cml0ZSB0byB0aGUNCisgICAgLy8gTG9ja0JveCBhcmVhLiBXZSBvdWdodCB0 byBwcmV2ZW50IERYRSBmcm9tIHNlcnZpbmcgYWxsb2NhdGlvbiByZXF1ZXN0cw0KKyAgICAvLyBz dWNoIHRoYXQgdGhleSB3b3VsZCBvdmVybGFwIHRoZSBMb2NrQm94IHN0b3JhZ2UuDQorICAgIC8v DQorICAgIFplcm9NZW0gKA0KKyAgICAgIChWT0lEKikoVUlOVE4pIFBjZEdldDMyIChQY2RPdm1m TG9ja0JveFN0b3JhZ2VCYXNlKSwNCisgICAgICAoVUlOVE4pIFBjZEdldDMyIChQY2RPdm1mTG9j a0JveFN0b3JhZ2VTaXplKQ0KKyAgICAgICk7DQorICAgIEJ1aWxkTWVtb3J5QWxsb2NhdGlvbkhv YiAoDQorICAgICAgKEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTikgUGNkR2V0MzIgKFBjZE92 bWZMb2NrQm94U3RvcmFnZUJhc2UpLA0KKyAgICAgIChVSU5UNjQpKFVJTlROKSBQY2RHZXQzMiAo UGNkT3ZtZkxvY2tCb3hTdG9yYWdlU2l6ZSksDQorICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YQ0K KyAgICAgICk7DQorICB9DQorfQ0KZGlmZiAtLWdpdCBhL092bWZQa2cvWGVuUGxhdGZvcm1QZWkv UGxhdGZvcm0uYyBiL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvUGxhdGZvcm0uYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jOTdhMmZiNmMxCi0tLSAvZGV2L251bGwKKysr IGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9QbGF0Zm9ybS5jCkBAIC0wLDAgKzEsNDQ0IEBACisv KipAZmlsZQ0KKyAgUGxhdGZvcm0gUEVJIGRyaXZlcg0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDA2 IC0gMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKyAg Q29weXJpZ2h0IChjKSAyMDExLCBBbmRyZWkgV2Fya2VudGluIDxhbmRyZWl3QG1vdG9yb2xhLmNv bT4NCisgIENvcHlyaWdodCAoYykgMjAxOSwgQ2l0cml4IFN5c3RlbXMsIEluYy4NCisNCisgIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorDQorKiovDQorDQor Ly8NCisvLyBUaGUgcGFja2FnZSBsZXZlbCBoZWFkZXIgZmlsZXMgdGhpcyBtb2R1bGUgdXNlcw0K Ky8vDQorI2luY2x1ZGUgPFBpUGVpLmg+DQorDQorLy8NCisvLyBUaGUgTGlicmFyeSBjbGFzc2Vz IHRoaXMgbW9kdWxlIGNvbnN1bWVzDQorLy8NCisjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+ DQorI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9Ib2JM aWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9Jb0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L01l bW9yeUFsbG9jYXRpb25MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4NCisjaW5j bHVkZSA8TGlicmFyeS9QY2lMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QZWltRW50cnlQb2lu dC5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1BlaVNlcnZpY2VzTGliLmg+DQorI2luY2x1ZGUgPExp YnJhcnkvUmVzb3VyY2VQdWJsaWNhdGlvbkxpYi5oPg0KKyNpbmNsdWRlIDxHdWlkL01lbW9yeVR5 cGVJbmZvcm1hdGlvbi5oPg0KKyNpbmNsdWRlIDxQcGkvTWFzdGVyQm9vdE1vZGUuaD4NCisjaW5j bHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9QY2kyMi5oPg0KKyNpbmNsdWRlIDxPdm1mUGxhdGZvcm1z Lmg+DQorDQorI2luY2x1ZGUgIlBsYXRmb3JtLmgiDQorI2luY2x1ZGUgIkNtb3MuaCINCisNCitF RklfTUVNT1JZX1RZUEVfSU5GT1JNQVRJT04gbURlZmF1bHRNZW1vcnlUeXBlSW5mb3JtYXRpb25b XSA9IHsNCisgIHsgRWZpQUNQSU1lbW9yeU5WUywgICAgICAgMHgwMDQgfSwNCisgIHsgRWZpQUNQ SVJlY2xhaW1NZW1vcnksICAgMHgwMDggfSwNCisgIHsgRWZpUmVzZXJ2ZWRNZW1vcnlUeXBlLCAg MHgwMDQgfSwNCisgIHsgRWZpUnVudGltZVNlcnZpY2VzRGF0YSwgMHgwMjQgfSwNCisgIHsgRWZp UnVudGltZVNlcnZpY2VzQ29kZSwgMHgwMzAgfSwNCisgIHsgRWZpQm9vdFNlcnZpY2VzQ29kZSwg ICAgMHgxODAgfSwNCisgIHsgRWZpQm9vdFNlcnZpY2VzRGF0YSwgICAgMHhGMDAgfSwNCisgIHsg RWZpTWF4TWVtb3J5VHlwZSwgICAgICAgMHgwMDAgfQ0KK307DQorDQorDQorRUZJX1BFSV9QUElf REVTQ1JJUFRPUiAgIG1QcGlCb290TW9kZVtdID0gew0KKyAgew0KKyAgICBFRklfUEVJX1BQSV9E RVNDUklQVE9SX1BQSSB8IEVGSV9QRUlfUFBJX0RFU0NSSVBUT1JfVEVSTUlOQVRFX0xJU1QsDQor ICAgICZnRWZpUGVpTWFzdGVyQm9vdE1vZGVQcGlHdWlkLA0KKyAgICBOVUxMDQorICB9DQorfTsN CisNCisNCitVSU5UMTYgbUhvc3RCcmlkZ2VEZXZJZDsNCisNCitFRklfQk9PVF9NT0RFIG1Cb290 TW9kZSA9IEJPT1RfV0lUSF9GVUxMX0NPTkZJR1VSQVRJT047DQorDQorDQorVk9JRA0KK0FkZElv TWVtb3J5QmFzZVNpemVIb2IgKA0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIE1lbW9y eUJhc2UsDQorICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5U2l6ZQ0KKyAgKQ0K K3sNCisgIEJ1aWxkUmVzb3VyY2VEZXNjcmlwdG9ySG9iICgNCisgICAgRUZJX1JFU09VUkNFX01F TU9SWV9NQVBQRURfSU8sDQorICAgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9QUkVTRU5UICAg ICB8DQorICAgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9JTklUSUFMSVpFRCB8DQorICAgICAg RUZJX1JFU09VUkNFX0FUVFJJQlVURV9VTkNBQ0hFQUJMRSB8DQorICAgICAgRUZJX1JFU09VUkNF X0FUVFJJQlVURV9URVNURUQsDQorICAgIE1lbW9yeUJhc2UsDQorICAgIE1lbW9yeVNpemUNCisg ICAgKTsNCit9DQorDQorVk9JRA0KK0FkZFJlc2VydmVkTWVtb3J5QmFzZVNpemVIb2IgKA0KKyAg RUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIE1lbW9yeUJhc2UsDQorICBVSU5UNjQgICAgICAg ICAgICAgICAgICAgICAgTWVtb3J5U2l6ZSwNCisgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAg ICBDYWNoZWFibGUNCisgICkNCit7DQorICBCdWlsZFJlc291cmNlRGVzY3JpcHRvckhvYiAoDQor ICAgIEVGSV9SRVNPVVJDRV9NRU1PUllfUkVTRVJWRUQsDQorICAgICAgRUZJX1JFU09VUkNFX0FU VFJJQlVURV9QUkVTRU5UICAgICB8DQorICAgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9JTklU SUFMSVpFRCB8DQorICAgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9VTkNBQ0hFQUJMRSB8DQor ICAgICAgKENhY2hlYWJsZSA/DQorICAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfV1JJVEVf Q09NQklORUFCTEUgfA0KKyAgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1dSSVRFX1RIUk9V R0hfQ0FDSEVBQkxFIHwNCisgICAgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9XUklURV9CQUNL X0NBQ0hFQUJMRSA6DQorICAgICAgIDANCisgICAgICAgKSB8DQorICAgICAgRUZJX1JFU09VUkNF X0FUVFJJQlVURV9URVNURUQsDQorICAgIE1lbW9yeUJhc2UsDQorICAgIE1lbW9yeVNpemUNCisg ICAgKTsNCit9DQorDQorVk9JRA0KK0FkZElvTWVtb3J5UmFuZ2VIb2IgKA0KKyAgRUZJX1BIWVNJ Q0FMX0FERFJFU1MgICAgICAgIE1lbW9yeUJhc2UsDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAg ICAgICAgTWVtb3J5TGltaXQNCisgICkNCit7DQorICBBZGRJb01lbW9yeUJhc2VTaXplSG9iIChN ZW1vcnlCYXNlLCAoVUlOVDY0KShNZW1vcnlMaW1pdCAtIE1lbW9yeUJhc2UpKTsNCit9DQorDQor DQorVk9JRA0KK0FkZE1lbW9yeUJhc2VTaXplSG9iICgNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNT ICAgICAgICBNZW1vcnlCYXNlLA0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgIE1lbW9y eVNpemUNCisgICkNCit7DQorICBCdWlsZFJlc291cmNlRGVzY3JpcHRvckhvYiAoDQorICAgIEVG SV9SRVNPVVJDRV9TWVNURU1fTUVNT1JZLA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVf UFJFU0VOVCB8DQorICAgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9JTklUSUFMSVpFRCB8DQor ICAgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9VTkNBQ0hFQUJMRSB8DQorICAgICAgRUZJX1JF U09VUkNFX0FUVFJJQlVURV9XUklURV9DT01CSU5FQUJMRSB8DQorICAgICAgRUZJX1JFU09VUkNF X0FUVFJJQlVURV9XUklURV9USFJPVUdIX0NBQ0hFQUJMRSB8DQorICAgICAgRUZJX1JFU09VUkNF X0FUVFJJQlVURV9XUklURV9CQUNLX0NBQ0hFQUJMRSB8DQorICAgICAgRUZJX1JFU09VUkNFX0FU VFJJQlVURV9URVNURUQsDQorICAgIE1lbW9yeUJhc2UsDQorICAgIE1lbW9yeVNpemUNCisgICAg KTsNCit9DQorDQorDQorVk9JRA0KK0FkZE1lbW9yeVJhbmdlSG9iICgNCisgIEVGSV9QSFlTSUNB TF9BRERSRVNTICAgICAgICBNZW1vcnlCYXNlLA0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAg ICAgIE1lbW9yeUxpbWl0DQorICApDQorew0KKyAgQWRkTWVtb3J5QmFzZVNpemVIb2IgKE1lbW9y eUJhc2UsIChVSU5UNjQpKE1lbW9yeUxpbWl0IC0gTWVtb3J5QmFzZSkpOw0KK30NCisNCisNCitW T0lEDQorTWVtTWFwSW5pdGlhbGl6YXRpb24gKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIFVJTlQ2 NCAgICAgICAgUGNpSW9CYXNlOw0KKyAgVUlOVDY0ICAgICAgICBQY2lJb1NpemU7DQorICBSRVRV Uk5fU1RBVFVTIFBjZFN0YXR1czsNCisNCisgIFBjaUlvQmFzZSA9IDB4QzAwMDsNCisgIFBjaUlv U2l6ZSA9IDB4NDAwMDsNCisNCisgIC8vDQorICAvLyBDcmVhdGUgTWVtb3J5IFR5cGUgSW5mb3Jt YXRpb24gSE9CDQorICAvLw0KKyAgQnVpbGRHdWlkRGF0YUhvYiAoDQorICAgICZnRWZpTWVtb3J5 VHlwZUluZm9ybWF0aW9uR3VpZCwNCisgICAgbURlZmF1bHRNZW1vcnlUeXBlSW5mb3JtYXRpb24s DQorICAgIHNpemVvZihtRGVmYXVsdE1lbW9yeVR5cGVJbmZvcm1hdGlvbikNCisgICAgKTsNCisN CisgIC8vDQorICAvLyBWaWRlbyBtZW1vcnkgKyBMZWdhY3kgQklPUyByZWdpb24NCisgIC8vDQor ICBBZGRJb01lbW9yeVJhbmdlSG9iICgweDBBMDAwMCwgQkFTRV8xTUIpOw0KKw0KKyAgLy8NCisg IC8vIEFkZCBQQ0kgSU8gUG9ydCBzcGFjZSBhdmFpbGFibGUgZm9yIFBDSSByZXNvdXJjZSBhbGxv Y2F0aW9ucy4NCisgIC8vDQorICBCdWlsZFJlc291cmNlRGVzY3JpcHRvckhvYiAoDQorICAgIEVG SV9SRVNPVVJDRV9JTywNCisgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9QUkVTRU5UICAgICB8 DQorICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfSU5JVElBTElaRUQsDQorICAgIFBjaUlvQmFz ZSwNCisgICAgUGNpSW9TaXplDQorICAgICk7DQorICBQY2RTdGF0dXMgPSBQY2RTZXQ2NFMgKFBj ZFBjaUlvQmFzZSwgUGNpSW9CYXNlKTsNCisgIEFTU0VSVF9SRVRVUk5fRVJST1IgKFBjZFN0YXR1 cyk7DQorICBQY2RTdGF0dXMgPSBQY2RTZXQ2NFMgKFBjZFBjaUlvU2l6ZSwgUGNpSW9TaXplKTsN CisgIEFTU0VSVF9SRVRVUk5fRVJST1IgKFBjZFN0YXR1cyk7DQorfQ0KKw0KK1ZPSUQNCitQY2lF eEJhckluaXRpYWxpemF0aW9uICgNCisgIFZPSUQNCisgICkNCit7DQorICB1bmlvbiB7DQorICAg IFVJTlQ2NCBVaW50NjQ7DQorICAgIFVJTlQzMiBVaW50MzJbMl07DQorICB9IFBjaUV4QmFyQmFz ZTsNCisNCisgIC8vDQorICAvLyBXZSBvbmx5IHN1cHBvcnQgdGhlIDI1Nk1CIHNpemUgZm9yIHRo ZSBNTUNPTkZJRyBhcmVhOg0KKyAgLy8gMjU2IGJ1c2VzICogMzIgZGV2aWNlcyAqIDggZnVuY3Rp b25zICogNDA5NiBieXRlcyBjb25maWcgc3BhY2UuDQorICAvLw0KKyAgLy8gVGhlIG1hc2tzIHVz ZWQgYmVsb3cgZW5mb3JjZSB0aGUgUTM1IHJlcXVpcmVtZW50cyB0aGF0IHRoZSBNTUNPTkZJRyBh cmVhDQorICAvLyBiZSAoYSkgY29ycmVjdGx5IGFsaWduZWQgLS0gaGVyZSBhdCAyNTYgTUIgLS0s IChiKSBsb2NhdGVkIHVuZGVyIDY0IEdCLg0KKyAgLy8NCisgIC8vIE5vdGUgdGhhdCAoYikgYWxz byBlbnN1cmVzIHRoYXQgdGhlIG1pbmltdW0gYWRkcmVzcyB3aWR0aCB3ZSBoYXZlDQorICAvLyBk ZXRlcm1pbmVkIGluIEFkZHJlc3NXaWR0aEluaXRpYWxpemF0aW9uKCksIGkuZS4sIDM2IGJpdHMs IHdpbGwgc3VmZmljZQ0KKyAgLy8gZm9yIERYRSdzIHBhZ2UgdGFibGVzIHRvIGNvdmVyIHRoZSBN TUNPTkZJRyBhcmVhLg0KKyAgLy8NCisgIFBjaUV4QmFyQmFzZS5VaW50NjQgPSBGaXhlZFBjZEdl dDY0IChQY2RQY2lFeHByZXNzQmFzZUFkZHJlc3MpOw0KKyAgQVNTRVJUICgoUGNpRXhCYXJCYXNl LlVpbnQzMlsxXSAmIE1DSF9QQ0lFWEJBUl9ISUdITUFTSykgPT0gMCk7DQorICBBU1NFUlQgKChQ Y2lFeEJhckJhc2UuVWludDMyWzBdICYgTUNIX1BDSUVYQkFSX0xPV01BU0spID09IDApOw0KKw0K KyAgLy8NCisgIC8vIENsZWFyIHRoZSBQQ0lFWEJBUkVOIGJpdCBmaXJzdCwgYmVmb3JlIHByb2dy YW1taW5nIHRoZSBoaWdoIHJlZ2lzdGVyLg0KKyAgLy8NCisgIFBjaVdyaXRlMzIgKERSQU1DX1JF R0lTVEVSX1EzNSAoTUNIX1BDSUVYQkFSX0xPVyksIDApOw0KKw0KKyAgLy8NCisgIC8vIFByb2dy YW0gdGhlIGhpZ2ggcmVnaXN0ZXIuIFRoZW4gcHJvZ3JhbSB0aGUgbG93IHJlZ2lzdGVyLCBzZXR0 aW5nIHRoZQ0KKyAgLy8gTU1DT05GSUcgYXJlYSBzaXplIGFuZCBlbmFibGluZyBkZWNvZGluZyBh dCBvbmNlLg0KKyAgLy8NCisgIFBjaVdyaXRlMzIgKERSQU1DX1JFR0lTVEVSX1EzNSAoTUNIX1BD SUVYQkFSX0hJR0gpLCBQY2lFeEJhckJhc2UuVWludDMyWzFdKTsNCisgIFBjaVdyaXRlMzIgKA0K KyAgICBEUkFNQ19SRUdJU1RFUl9RMzUgKE1DSF9QQ0lFWEJBUl9MT1cpLA0KKyAgICBQY2lFeEJh ckJhc2UuVWludDMyWzBdIHwgTUNIX1BDSUVYQkFSX0JVU19GRiB8IE1DSF9QQ0lFWEJBUl9FTg0K KyAgICApOw0KK30NCisNCitWT0lEDQorTWlzY0luaXRpYWxpemF0aW9uICgNCisgIFZPSUQNCisg ICkNCit7DQorICBVSU5UTiAgICAgICAgIFBtQ21kOw0KKyAgVUlOVE4gICAgICAgICBQbWJhOw0K KyAgVUlOVDMyICAgICAgICBQbWJhQW5kVmFsOw0KKyAgVUlOVDMyICAgICAgICBQbWJhT3JWYWw7 DQorICBVSU5UTiAgICAgICAgIEFjcGlDdGxSZWc7DQorICBVSU5UOCAgICAgICAgIEFjcGlFbkJp dDsNCisgIFJFVFVSTl9TVEFUVVMgUGNkU3RhdHVzOw0KKw0KKyAgLy8NCisgIC8vIERpc2FibGUg QTIwIE1hc2sNCisgIC8vDQorICBJb09yOCAoMHg5MiwgQklUMSk7DQorDQorICAvLw0KKyAgLy8g QnVpbGQgdGhlIENQVSBIT0Igd2l0aCBndWVzdCBSQU0gc2l6ZSBkZXBlbmRlbnQgYWRkcmVzcyB3 aWR0aCBhbmQgMTYtYml0cw0KKyAgLy8gb2YgSU8gc3BhY2UuIChTaWRlIG5vdGU6IHVubGlrZSBv dGhlciBIT0JzLCB0aGUgQ1BVIEhPQiBpcyBuZWVkZWQgZHVyaW5nDQorICAvLyBTMyByZXN1bWUg YXMgd2VsbCwgc28gd2UgYnVpbGQgaXQgdW5jb25kaXRpb25hbGx5LikNCisgIC8vDQorICBCdWls ZENwdUhvYiAobVBoeXNNZW1BZGRyZXNzV2lkdGgsIDE2KTsNCisNCisgIC8vDQorICAvLyBEZXRl cm1pbmUgcGxhdGZvcm0gdHlwZSBhbmQgc2F2ZSBIb3N0IEJyaWRnZSBESUQgdG8gUENEDQorICAv Lw0KKyAgc3dpdGNoIChtSG9zdEJyaWRnZURldklkKSB7DQorICAgIGNhc2UgSU5URUxfODI0NDFf REVWSUNFX0lEOg0KKyAgICAgIFBtQ21kICAgICAgPSBQT1dFUl9NR01UX1JFR0lTVEVSX1BJSVg0 IChQQ0lfQ09NTUFORF9PRkZTRVQpOw0KKyAgICAgIFBtYmEgICAgICAgPSBQT1dFUl9NR01UX1JF R0lTVEVSX1BJSVg0IChQSUlYNF9QTUJBKTsNCisgICAgICBQbWJhQW5kVmFsID0gfihVSU5UMzIp UElJWDRfUE1CQV9NQVNLOw0KKyAgICAgIFBtYmFPclZhbCAgPSBQSUlYNF9QTUJBX1ZBTFVFOw0K KyAgICAgIEFjcGlDdGxSZWcgPSBQT1dFUl9NR01UX1JFR0lTVEVSX1BJSVg0IChQSUlYNF9QTVJF R01JU0MpOw0KKyAgICAgIEFjcGlFbkJpdCAgPSBQSUlYNF9QTVJFR01JU0NfUE1JT1NFOw0KKyAg ICAgIGJyZWFrOw0KKyAgICBjYXNlIElOVEVMX1EzNV9NQ0hfREVWSUNFX0lEOg0KKyAgICAgIFBt Q21kICAgICAgPSBQT1dFUl9NR01UX1JFR0lTVEVSX1EzNSAoUENJX0NPTU1BTkRfT0ZGU0VUKTsN CisgICAgICBQbWJhICAgICAgID0gUE9XRVJfTUdNVF9SRUdJU1RFUl9RMzUgKElDSDlfUE1CQVNF KTsNCisgICAgICBQbWJhQW5kVmFsID0gfihVSU5UMzIpSUNIOV9QTUJBU0VfTUFTSzsNCisgICAg ICBQbWJhT3JWYWwgID0gSUNIOV9QTUJBU0VfVkFMVUU7DQorICAgICAgQWNwaUN0bFJlZyA9IFBP V0VSX01HTVRfUkVHSVNURVJfUTM1IChJQ0g5X0FDUElfQ05UTCk7DQorICAgICAgQWNwaUVuQml0 ICA9IElDSDlfQUNQSV9DTlRMX0FDUElfRU47DQorICAgICAgYnJlYWs7DQorICAgIGRlZmF1bHQ6 DQorICAgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIiVhOiBVbmtub3duIEhvc3QgQnJpZGdlIERl dmljZSBJRDogMHglMDR4XG4iLA0KKyAgICAgICAgX19GVU5DVElPTl9fLCBtSG9zdEJyaWRnZURl dklkKSk7DQorICAgICAgQVNTRVJUIChGQUxTRSk7DQorICAgICAgcmV0dXJuOw0KKyAgfQ0KKyAg UGNkU3RhdHVzID0gUGNkU2V0MTZTIChQY2RPdm1mSG9zdEJyaWRnZVBjaURldklkLCBtSG9zdEJy aWRnZURldklkKTsNCisgIEFTU0VSVF9SRVRVUk5fRVJST1IgKFBjZFN0YXR1cyk7DQorDQorICAv Lw0KKyAgLy8gSWYgdGhlIGFwcHJvcHJpYXRlIElPc3BhY2UgZW5hYmxlIGJpdCBpcyBzZXQsIGFz c3VtZSB0aGUgQUNQSSBQTUJBDQorICAvLyBoYXMgYmVlbiBjb25maWd1cmVkIChlLmcuLCBieSBY ZW4pIGFuZCBza2lwIHRoZSBzZXR1cCBoZXJlLg0KKyAgLy8gVGhpcyBtYXRjaGVzIHRoZSBsb2dp YyBpbiBBY3BpVGltZXJMaWJDb25zdHJ1Y3RvciAoKS4NCisgIC8vDQorICBpZiAoKFBjaVJlYWQ4 IChBY3BpQ3RsUmVnKSAmIEFjcGlFbkJpdCkgPT0gMCkgew0KKyAgICAvLw0KKyAgICAvLyBUaGUg UEVJIHBoYXNlIHNob3VsZCBiZSBleGl0ZWQgd2l0aCBmdWxseSBhY2Nlc3NpYmUgQUNQSSBQTSBJ TyBzcGFjZToNCisgICAgLy8gMS4gc2V0IFBNQkENCisgICAgLy8NCisgICAgUGNpQW5kVGhlbk9y MzIgKFBtYmEsIFBtYmFBbmRWYWwsIFBtYmFPclZhbCk7DQorDQorICAgIC8vDQorICAgIC8vIDIu IHNldCBQQ0lDTUQvSU9TRQ0KKyAgICAvLw0KKyAgICBQY2lPcjggKFBtQ21kLCBFRklfUENJX0NP TU1BTkRfSU9fU1BBQ0UpOw0KKw0KKyAgICAvLw0KKyAgICAvLyAzLiBzZXQgQUNQSSBQTSBJTyBl bmFibGUgYml0IChQTVJFR01JU0M6UE1JT1NFIG9yIEFDUElfQ05UTDpBQ1BJX0VOKQ0KKyAgICAv Lw0KKyAgICBQY2lPcjggKEFjcGlDdGxSZWcsIEFjcGlFbkJpdCk7DQorICB9DQorDQorICBpZiAo bUhvc3RCcmlkZ2VEZXZJZCA9PSBJTlRFTF9RMzVfTUNIX0RFVklDRV9JRCkgew0KKyAgICAvLw0K KyAgICAvLyBTZXQgUm9vdCBDb21wbGV4IFJlZ2lzdGVyIEJsb2NrIEJBUg0KKyAgICAvLw0KKyAg ICBQY2lXcml0ZTMyICgNCisgICAgICBQT1dFUl9NR01UX1JFR0lTVEVSX1EzNSAoSUNIOV9SQ0JB KSwNCisgICAgICBJQ0g5X1JPT1RfQ09NUExFWF9CQVNFIHwgSUNIOV9SQ0JBX0VODQorICAgICAg KTsNCisNCisgICAgLy8NCisgICAgLy8gU2V0IFBDSSBFeHByZXNzIFJlZ2lzdGVyIFJhbmdlIEJh c2UgQWRkcmVzcw0KKyAgICAvLw0KKyAgICBQY2lFeEJhckluaXRpYWxpemF0aW9uICgpOw0KKyAg fQ0KK30NCisNCisNCitWT0lEDQorQm9vdE1vZGVJbml0aWFsaXphdGlvbiAoDQorICBWT0lEDQor ICApDQorew0KKyAgRUZJX1NUQVRVUyAgICBTdGF0dXM7DQorDQorICBpZiAoQ21vc1JlYWQ4ICgw eEYpID09IDB4RkUpIHsNCisgICAgbUJvb3RNb2RlID0gQk9PVF9PTl9TM19SRVNVTUU7DQorICB9 DQorICBDbW9zV3JpdGU4ICgweEYsIDB4MDApOw0KKw0KKyAgU3RhdHVzID0gUGVpU2VydmljZXNT ZXRCb290TW9kZSAobUJvb3RNb2RlKTsNCisgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQor DQorICBTdGF0dXMgPSBQZWlTZXJ2aWNlc0luc3RhbGxQcGkgKG1QcGlCb290TW9kZSk7DQorICBB U1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KK30NCisNCisNCitWT0lEDQorUmVzZXJ2ZUVtdVZh cmlhYmxlTnZTdG9yZSAoDQorICApDQorew0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgVmFyaWFi bGVTdG9yZTsNCisgIFJFVFVSTl9TVEFUVVMgICAgICAgIFBjZFN0YXR1czsNCisNCisgIC8vDQor ICAvLyBBbGxvY2F0ZSBzdG9yYWdlIGZvciBOViB2YXJpYWJsZXMgZWFybHkgb24gc28gaXQgd2ls bCBiZQ0KKyAgLy8gYXQgYSBjb25zaXN0ZW50IGFkZHJlc3MuICBTaW5jZSBWTSBtZW1vcnkgaXMg cHJlc2VydmVkDQorICAvLyBhY3Jvc3MgcmVib290cywgdGhpcyBhbGxvd3MgdGhlIE5WIHZhcmlh YmxlIHN0b3JhZ2UgdG8gc3Vydml2ZQ0KKyAgLy8gYSBWTSByZWJvb3QuDQorICAvLw0KKyAgVmFy aWFibGVTdG9yZSA9DQorICAgIChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pDQorICAgICAg QWxsb2NhdGVSdW50aW1lUGFnZXMgKA0KKyAgICAgICAgRUZJX1NJWkVfVE9fUEFHRVMgKDIgKiBQ Y2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZVNpemUpKQ0KKyAgICAgICAgKTsNCisg IERFQlVHICgoRUZJX0RfSU5GTywNCisgICAgICAgICAgIlJlc2VydmVkIHZhcmlhYmxlIHN0b3Jl IG1lbW9yeTogMHglbFg7IHNpemU6ICVka2JcbiIsDQorICAgICAgICAgIFZhcmlhYmxlU3RvcmUs DQorICAgICAgICAgICgyICogUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9yYWdlRnR3U3BhcmVTaXpl KSkgLyAxMDI0DQorICAgICAgICApKTsNCisgIFBjZFN0YXR1cyA9IFBjZFNldDY0UyAoUGNkRW11 VmFyaWFibGVOdlN0b3JlUmVzZXJ2ZWQsIFZhcmlhYmxlU3RvcmUpOw0KKyAgQVNTRVJUX1JFVFVS Tl9FUlJPUiAoUGNkU3RhdHVzKTsNCit9DQorDQorDQorVk9JRA0KK0RlYnVnRHVtcENtb3MgKA0K KyAgVk9JRA0KKyAgKQ0KK3sNCisgIFVJTlQzMiBMb29wOw0KKw0KKyAgREVCVUcgKChFRklfRF9J TkZPLCAiQ01PUzpcbiIpKTsNCisNCisgIGZvciAoTG9vcCA9IDA7IExvb3AgPCAweDgwOyBMb29w KyspIHsNCisgICAgaWYgKChMb29wICUgMHgxMCkgPT0gMCkgew0KKyAgICAgIERFQlVHICgoRUZJ X0RfSU5GTywgIiUwMng6IiwgTG9vcCkpOw0KKyAgICB9DQorICAgIERFQlVHICgoRUZJX0RfSU5G TywgIiAlMDJ4IiwgQ21vc1JlYWQ4IChMb29wKSkpOw0KKyAgICBpZiAoKExvb3AgJSAweDEwKSA9 PSAweGYpIHsNCisgICAgICBERUJVRyAoKEVGSV9EX0lORk8sICJcbiIpKTsNCisgICAgfQ0KKyAg fQ0KK30NCisNCisNCisNCisvKioNCisgIFBlcmZvcm0gUGxhdGZvcm0gUEVJIGluaXRpYWxpemF0 aW9uLg0KKw0KKyAgQHBhcmFtICBGaWxlSGFuZGxlICAgICAgSGFuZGxlIG9mIHRoZSBmaWxlIGJl aW5nIGludm9rZWQuDQorICBAcGFyYW0gIFBlaVNlcnZpY2VzICAgICBEZXNjcmliZXMgdGhlIGxp c3Qgb2YgcG9zc2libGUgUEVJIFNlcnZpY2VzLg0KKw0KKyAgQHJldHVybiBFRklfU1VDQ0VTUyAg ICAgVGhlIFBFSU0gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KKw0KKyoqLw0KK0VGSV9TVEFU VVMNCitFRklBUEkNCitJbml0aWFsaXplWGVuUGxhdGZvcm0gKA0KKyAgSU4gICAgICAgRUZJX1BF SV9GSUxFX0hBTkRMRSAgRmlsZUhhbmRsZSwNCisgIElOIENPTlNUIEVGSV9QRUlfU0VSVklDRVMg ICAgICoqUGVpU2VydmljZXMNCisgICkNCit7DQorICBERUJVRyAoKERFQlVHX0lORk8sICJQbGF0 Zm9ybSBQRUlNIExvYWRlZFxuIikpOw0KKw0KKyAgRGVidWdEdW1wQ21vcyAoKTsNCisNCisgIGlm ICghWGVuRGV0ZWN0ICgpKSB7DQorICAgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJPUjogWGVu IGlzbid0IGRldGVjdGVkXG4iKSk7DQorICAgIEFTU0VSVCAoRkFMU0UpOw0KKyAgICBDcHVEZWFk TG9vcCAoKTsNCisgIH0NCisNCisgIEJvb3RNb2RlSW5pdGlhbGl6YXRpb24gKCk7DQorICBBZGRy ZXNzV2lkdGhJbml0aWFsaXphdGlvbiAoKTsNCisNCisgIC8vDQorICAvLyBRdWVyeSBIb3N0IEJy aWRnZSBESUQNCisgIC8vDQorICBtSG9zdEJyaWRnZURldklkID0gUGNpUmVhZDE2IChPVk1GX0hP U1RCUklER0VfRElEKTsNCisNCisgIFB1Ymxpc2hQZWlNZW1vcnkgKCk7DQorDQorICBJbml0aWFs aXplUmFtUmVnaW9ucyAoKTsNCisNCisgIEluaXRpYWxpemVYZW4gKCk7DQorDQorICBpZiAobUJv b3RNb2RlICE9IEJPT1RfT05fUzNfUkVTVU1FKSB7DQorICAgIFJlc2VydmVFbXVWYXJpYWJsZU52 U3RvcmUgKCk7DQorICAgIFBlaUZ2SW5pdGlhbGl6YXRpb24gKCk7DQorICAgIE1lbU1hcEluaXRp YWxpemF0aW9uICgpOw0KKyAgfQ0KKw0KKyAgSW5zdGFsbENsZWFyQ2FjaGVDYWxsYmFjayAoKTsN CisgIEFtZFNldkluaXRpYWxpemUgKCk7DQorICBNaXNjSW5pdGlhbGl6YXRpb24gKCk7DQorDQor ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KZGlmZiAtLWdpdCBhL092bWZQa2cvWGVuUGxhdGZv cm1QZWkvWGVuLmMgYi9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL1hlbi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjgxMDQyYWI5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9P dm1mUGtnL1hlblBsYXRmb3JtUGVpL1hlbi5jCkBAIC0wLDAgKzEsMjE5IEBACisvKipAZmlsZQ0K KyAgWGVuIFBsYXRmb3JtIFBFSSBzdXBwb3J0DQorDQorICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAy MDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorICBDb3B5 cmlnaHQgKGMpIDIwMTEsIEFuZHJlaSBXYXJrZW50aW4gPGFuZHJlaXdAbW90b3JvbGEuY29tPg0K KyAgQ29weXJpZ2h0IChjKSAyMDE5LCBDaXRyaXggU3lzdGVtcywgSW5jLg0KKw0KKyAgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisNCisqKi8NCisNCisvLw0K Ky8vIFRoZSBwYWNrYWdlIGxldmVsIGhlYWRlciBmaWxlcyB0aGlzIG1vZHVsZSB1c2VzDQorLy8N CisjaW5jbHVkZSA8UGlQZWkuaD4NCisNCisvLw0KKy8vIFRoZSBMaWJyYXJ5IGNsYXNzZXMgdGhp cyBtb2R1bGUgY29uc3VtZXMNCisvLw0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQor I2luY2x1ZGUgPExpYnJhcnkvSG9iTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxs b2NhdGlvbkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1BjZExpYi5oPg0KKyNpbmNsdWRlIDxH dWlkL1hlbkluZm8uaD4NCisjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9FODIwLmg+DQorI2lu Y2x1ZGUgPExpYnJhcnkvUmVzb3VyY2VQdWJsaWNhdGlvbkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJy YXJ5L010cnJMaWIuaD4NCisNCisjaW5jbHVkZSAiUGxhdGZvcm0uaCINCisjaW5jbHVkZSAiWGVu LmgiDQorDQorU1RBVElDIFVJTlQzMiBtWGVuTGVhZiA9IDA7DQorDQorRUZJX1hFTl9JTkZPIG1Y ZW5JbmZvOw0KKw0KKy8qKg0KKyAgUmV0dXJucyBFODIwIG1hcCBwcm92aWRlZCBieSBYZW4NCisN CisgIEBwYXJhbSBFbnRyaWVzICAgICAgUG9pbnRlciB0byBFODIwIG1hcA0KKyAgQHBhcmFtIENv dW50ICAgICAgICBOdW1iZXIgb2YgZW50cmllcw0KKw0KKyAgQHJldHVybiBFRklfU1RBVFVTDQor KiovDQorRUZJX1NUQVRVUw0KK1hlbkdldEU4MjBNYXAgKA0KKyAgRUZJX0U4MjBfRU5UUlk2NCAq KkVudHJpZXMsDQorICBVSU5UMzIgKkNvdW50DQorICApDQorew0KKyAgRUZJX1hFTl9PVk1GX0lO Rk8gKkluZm8gPQ0KKyAgICAoRUZJX1hFTl9PVk1GX0lORk8gKikoVUlOVE4pIE9WTUZfSU5GT19Q SFlTSUNBTF9BRERSRVNTOw0KKw0KKyAgaWYgKEFzY2lpU3RyQ21wICgoQ0hBUjggKikgSW5mby0+ U2lnbmF0dXJlLCAiWGVuSFZNT1ZNRiIpKSB7DQorICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0K KyAgfQ0KKw0KKyAgQVNTRVJUIChJbmZvLT5FODIwIDwgTUFYX0FERFJFU1MpOw0KKyAgKkVudHJp ZXMgPSAoRUZJX0U4MjBfRU5UUlk2NCAqKShVSU5UTikgSW5mby0+RTgyMDsNCisgICpDb3VudCA9 IEluZm8tPkU4MjBFbnRyaWVzQ291bnQ7DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0K Kw0KKy8qKg0KKyAgQ29ubmVjdHMgdG8gdGhlIEh5cGVydmlzb3IuDQorIA0KKyAgQHBhcmFtICBY ZW5MZWFmICAgICBDUFVJRCBpbmRleCB1c2VkIHRvIGNvbm5lY3QuDQorDQorICBAcmV0dXJuIEVG SV9TVEFUVVMNCisNCisqKi8NCitFRklfU1RBVFVTDQorWGVuQ29ubmVjdCAoDQorICBVSU5UMzIg WGVuTGVhZg0KKyAgKQ0KK3sNCisgIFVJTlQzMiBJbmRleDsNCisgIFVJTlQzMiBUcmFuc2ZlclJl ZzsNCisgIFVJTlQzMiBUcmFuc2ZlclBhZ2VzOw0KKyAgVUlOVDMyIFhlblZlcnNpb247DQorDQor ICBBc21DcHVpZCAoWGVuTGVhZiArIDIsICZUcmFuc2ZlclBhZ2VzLCAmVHJhbnNmZXJSZWcsIE5V TEwsIE5VTEwpOw0KKyAgbVhlbkluZm8uSHlwZXJQYWdlcyA9IEFsbG9jYXRlUGFnZXMgKFRyYW5z ZmVyUGFnZXMpOw0KKyAgaWYgKCFtWGVuSW5mby5IeXBlclBhZ2VzKSB7DQorICAgIHJldHVybiBF RklfT1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisNCisgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IFRyYW5zZmVyUGFnZXM7IEluZGV4KyspIHsNCisgICAgQXNtV3JpdGVNc3I2NCAoVHJhbnNmZXJS ZWcsDQorICAgICAgICAgICAgICAgICAgIChVSU5UTikgbVhlbkluZm8uSHlwZXJQYWdlcyArDQor ICAgICAgICAgICAgICAgICAgIChJbmRleCA8PCBFRklfUEFHRV9TSElGVCkgKyBJbmRleCk7DQor ICB9DQorDQorICBBc21DcHVpZCAoWGVuTGVhZiArIDEsICZYZW5WZXJzaW9uLCBOVUxMLCBOVUxM LCBOVUxMKTsNCisgIERFQlVHICgoRUZJX0RfRVJST1IsICJEZXRlY3RlZCBYZW4gdmVyc2lvbiAl ZC4lZFxuIiwNCisgICAgICAgICAgWGVuVmVyc2lvbiA+PiAxNiwgWGVuVmVyc2lvbiAmIDB4RkZG RikpOw0KKyAgbVhlbkluZm8uVmVyc2lvbk1ham9yID0gKFVJTlQxNikoWGVuVmVyc2lvbiA+PiAx Nik7DQorICBtWGVuSW5mby5WZXJzaW9uTWlub3IgPSAoVUlOVDE2KShYZW5WZXJzaW9uICYgMHhG RkZGKTsNCisNCisgIC8qIFRCRDogTG9jYXRlIGh2bV9pbmZvIGFuZCByZXNlcnZlIGl0IGF3YXku ICovDQorICBtWGVuSW5mby5Idm1JbmZvID0gTlVMTDsNCisNCisgIEJ1aWxkR3VpZERhdGFIb2Ig KA0KKyAgICAmZ0VmaVhlbkluZm9HdWlkLA0KKyAgICAmbVhlbkluZm8sDQorICAgIHNpemVvZiht WGVuSW5mbykNCisgICAgKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorLyoq DQorICBGaWd1cmVzIG91dCBpZiB3ZSBhcmUgcnVubmluZyBpbnNpZGUgWGVuIEhWTS4NCisNCisg IEByZXR2YWwgVFJVRSAgIFhlbiB3YXMgZGV0ZWN0ZWQNCisgIEByZXR2YWwgRkFMU0UgIFhlbiB3 YXMgbm90IGRldGVjdGVkDQorDQorKiovDQorQk9PTEVBTg0KK1hlbkRldGVjdCAoDQorICBWT0lE DQorICApDQorew0KKyAgVUlOVDggU2lnbmF0dXJlWzEzXTsNCisNCisgIGlmIChtWGVuTGVhZiAh PSAwKSB7DQorICAgIHJldHVybiBUUlVFOw0KKyAgfQ0KKw0KKyAgU2lnbmF0dXJlWzEyXSA9ICdc MCc7DQorICBmb3IgKG1YZW5MZWFmID0gMHg0MDAwMDAwMDsgbVhlbkxlYWYgPCAweDQwMDEwMDAw OyBtWGVuTGVhZiArPSAweDEwMCkgew0KKyAgICBBc21DcHVpZCAobVhlbkxlYWYsDQorICAgICAg ICAgICAgICBOVUxMLA0KKyAgICAgICAgICAgICAgKFVJTlQzMiAqKSAmU2lnbmF0dXJlWzBdLA0K KyAgICAgICAgICAgICAgKFVJTlQzMiAqKSAmU2lnbmF0dXJlWzRdLA0KKyAgICAgICAgICAgICAg KFVJTlQzMiAqKSAmU2lnbmF0dXJlWzhdKTsNCisNCisgICAgaWYgKCFBc2NpaVN0ckNtcCAoKENI QVI4ICopIFNpZ25hdHVyZSwgIlhlblZNTVhlblZNTSIpKSB7DQorICAgICAgcmV0dXJuIFRSVUU7 DQorICAgIH0NCisgIH0NCisNCisgIG1YZW5MZWFmID0gMDsNCisgIHJldHVybiBGQUxTRTsNCit9 DQorDQorDQorVk9JRA0KK1hlblB1Ymxpc2hSYW1SZWdpb25zICgNCisgIFZPSUQNCisgICkNCit7 DQorICBFRklfRTgyMF9FTlRSWTY0ICAqRTgyME1hcDsNCisgIFVJTlQzMiAgICAgICAgICAgIEU4 MjBFbnRyaWVzQ291bnQ7DQorICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQorDQorICBERUJV RyAoKEVGSV9EX0lORk8sICJVc2luZyBtZW1vcnkgbWFwIHByb3ZpZGVkIGJ5IFhlblxuIikpOw0K Kw0KKyAgLy8NCisgIC8vIFBhcnNlIFJBTSBpbiBFODIwIG1hcA0KKyAgLy8NCisgIEU4MjBFbnRy aWVzQ291bnQgPSAwOw0KKyAgU3RhdHVzID0gWGVuR2V0RTgyME1hcCAoJkU4MjBNYXAsICZFODIw RW50cmllc0NvdW50KTsNCisNCisgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQorDQorICBp ZiAoRTgyMEVudHJpZXNDb3VudCA+IDApIHsNCisgICAgRUZJX0U4MjBfRU5UUlk2NCAqRW50cnk7 DQorICAgIFVJTlQzMiBMb29wOw0KKw0KKyAgICBmb3IgKExvb3AgPSAwOyBMb29wIDwgRTgyMEVu dHJpZXNDb3VudDsgTG9vcCsrKSB7DQorICAgICAgRW50cnkgPSBFODIwTWFwICsgTG9vcDsNCisN CisgICAgICAvLw0KKyAgICAgIC8vIE9ubHkgY2FyZSBhYm91dCBSQU0NCisgICAgICAvLw0KKyAg ICAgIGlmIChFbnRyeS0+VHlwZSAhPSBFZmlBY3BpQWRkcmVzc1JhbmdlTWVtb3J5KSB7DQorICAg ICAgICBjb250aW51ZTsNCisgICAgICB9DQorDQorICAgICAgQWRkTWVtb3J5QmFzZVNpemVIb2Ig KEVudHJ5LT5CYXNlQWRkciwgRW50cnktPkxlbmd0aCk7DQorDQorICAgICAgTXRyclNldE1lbW9y eUF0dHJpYnV0ZSAoRW50cnktPkJhc2VBZGRyLCBFbnRyeS0+TGVuZ3RoLCBDYWNoZVdyaXRlQmFj ayk7DQorICAgIH0NCisgIH0NCit9DQorDQorDQorLyoqDQorICBQZXJmb3JtIFhlbiBQRUkgaW5p dGlhbGl6YXRpb24uDQorDQorICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgICBYZW4gaW5pdGlhbGl6 ZWQgc3VjY2Vzc2Z1bGx5DQorICBAcmV0dXJuIEVGSV9OT1RfRk9VTkQgICBOb3QgcnVubmluZyB1 bmRlciBYZW4NCisNCisqKi8NCitFRklfU1RBVFVTDQorSW5pdGlhbGl6ZVhlbiAoDQorICBWT0lE DQorICApDQorew0KKyAgUkVUVVJOX1NUQVRVUyBQY2RTdGF0dXM7DQorDQorICBpZiAobVhlbkxl YWYgPT0gMCkgew0KKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCisgIH0NCisNCisgIFhlbkNv bm5lY3QgKG1YZW5MZWFmKTsNCisNCisgIC8vDQorICAvLyBSZXNlcnZlIGF3YXkgSFZNTE9BREVS IHJlc2VydmVkIG1lbW9yeSBbMHhGQzAwMDAwMCwweEZEMDAwMDAwKS4NCisgIC8vIFRoaXMgbmVl ZHMgdG8gbWF0Y2ggSFZNTE9BREVSIFJFU0VSVkVEX01FTUJBU0UvUkVTRVJWRURfTUVNU0laRS4N CisgIC8vDQorICBBZGRSZXNlcnZlZE1lbW9yeUJhc2VTaXplSG9iICgweEZDMDAwMDAwLCAweDEw MDAwMDAsIEZBTFNFKTsNCisNCisgIFBjZFN0YXR1cyA9IFBjZFNldEJvb2xTIChQY2RQY2lEaXNh YmxlQnVzRW51bWVyYXRpb24sIFRSVUUpOw0KKyAgQVNTRVJUX1JFVFVSTl9FUlJPUiAoUGNkU3Rh dHVzKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQotLSAKQW50aG9ueSBQRVJBUkQK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs