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=-9.8 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 8531EC7618B for ; Mon, 29 Jul 2019 15:40:33 +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 4CFBC2067D for ; Mon, 29 Jul 2019 15:40:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4CFBC2067D 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 1hs7km-00083n-4t; Mon, 29 Jul 2019 15:40:00 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hs7kl-00082J-1a for xen-devel@lists.xenproject.org; Mon, 29 Jul 2019 15:39:59 +0000 X-Inumbo-ID: 1da475fa-b217-11e9-a13e-7366749a5118 Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 1da475fa-b217-11e9-a13e-7366749a5118; Mon, 29 Jul 2019 15:39:56 +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: 8q3tlYICukgJ6BSSfvy3UDOVQWAYS8kiKL6aTnHIdTfPDiZM0n70PxgYspbqd78ZGiXwL/4NQz 6mE93V4wxW4LVtzB05UvdljuVto1M2xyc8JtFuK4mtwDQ4CR6W2E4uAnzvpOUSHc9Ef/dJqBq7 aVb0SzYl8cpPnvC4TWKkKc/XoyO/P2dQhy+HaXJgRZJ5IghxrA4HpYWkMjofrU7If7VsBMVtYz YrostINP1SUHguDdGKmZPmraMdxf8xwzIeLNFufMnzDpkLfeU9cy1QkmvblpDnGvcmcfGNBqwT kEs= X-SBRS: 2.7 X-MesageID: 3564633 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.64,323,1559534400"; d="scan'208";a="3564633" From: Anthony PERARD To: Date: Mon, 29 Jul 2019 16:39:13 +0100 Message-ID: <20190729153944.24239-5-anthony.perard@citrix.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190729153944.24239-1-anthony.perard@citrix.com> References: <20190729153944.24239-1-anthony.perard@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v4 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 c2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4KLS0tCgpOb3RlczoKICAgIHY0OgogICAgICAtIHJlcGxh Y2UgdGhlIG90aGVyIEVGSV9EXyBieSBERUJVR18uCiAgICAgIC0gVXBkYXRlIE1haW50YWluZXJz LnR4dAogICAgICAtIGZpeCBvbmUgdHJhaWxpbmcgd2hpdGVzcGFjZQogICAgCiAgICB2MzoKICAg ICAgLSBmaXggY29kaW5nIHN0eWxlIGluIG5ldyBjb2RlCiAgICAgICAgKHVzZSBERUJVR194eHgs IGFkZCBBU1NFUlQgYmVmb3JlIENwdURlYWRMb29wKQogICAgICAtIHJlYmFzZWQsIFNQRFgKCiBP dm1mUGtnL092bWZYZW4uZHNjICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogT3ZtZlBr Zy9Pdm1mWGVuLmZkZiAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIE92bWZQa2cvWGVu UGxhdGZvcm1QZWkvWGVuUGxhdGZvcm1QZWkuaW5mIHwgIDk2ICsrKysrCiBPdm1mUGtnL1hlblBs YXRmb3JtUGVpL0Ntb3MuaCAgICAgICAgICAgICB8ICA1MiArKysKIE92bWZQa2cvWGVuUGxhdGZv cm1QZWkvUGxhdGZvcm0uaCAgICAgICAgIHwgMTA4ICsrKysrKwogT3ZtZlBrZy9YZW5QbGF0Zm9y bVBlaS9YZW4uaCAgICAgICAgICAgICAgfCAgMzkgKysKIE92bWZQa2cvWGVuUGxhdGZvcm1QZWkv QW1kU2V2LmMgICAgICAgICAgIHwgIDY0ICsrKysKIE92bWZQa2cvWGVuUGxhdGZvcm1QZWkvQ2xl YXJDYWNoZS5jICAgICAgIHwgMTEyICsrKysrKwogT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9DbW9z LmMgICAgICAgICAgICAgfCAgNjAgKysrCiBPdm1mUGtnL1hlblBsYXRmb3JtUGVpL0Z2LmMgICAg ICAgICAgICAgICB8ICA3NiArKysrCiBPdm1mUGtnL1hlblBsYXRmb3JtUGVpL01lbURldGVjdC5j ICAgICAgICB8IDQyMSArKysrKysrKysrKysrKysrKysrKwogT3ZtZlBrZy9YZW5QbGF0Zm9ybVBl aS9QbGF0Zm9ybS5jICAgICAgICAgfCA0NDQgKysrKysrKysrKysrKysrKysrKysrKwogT3ZtZlBr Zy9YZW5QbGF0Zm9ybVBlaS9YZW4uYyAgICAgICAgICAgICAgfCAyMTkgKysrKysrKysrKysKIE1h aW50YWluZXJzLnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIDE0IGZpbGVz IGNoYW5nZWQsIDE2OTQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBPdm1mUGtnL1hlblBsYXRmb3JtUGVpL1hlblBsYXRmb3JtUGVpLmluZgogY3JlYXRl IG1vZGUgMTAwNjQ0IE92bWZQa2cvWGVuUGxhdGZvcm1QZWkvQ21vcy5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9QbGF0Zm9ybS5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9YZW4uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IE92bWZQ a2cvWGVuUGxhdGZvcm1QZWkvQW1kU2V2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBPdm1mUGtnL1hl blBsYXRmb3JtUGVpL0NsZWFyQ2FjaGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IE92bWZQa2cvWGVu UGxhdGZvcm1QZWkvQ21vcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgT3ZtZlBrZy9YZW5QbGF0Zm9y bVBlaS9Gdi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9NZW1E ZXRlY3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IE92bWZQa2cvWGVuUGxhdGZvcm1QZWkvUGxhdGZv cm0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IE92bWZQa2cvWGVuUGxhdGZvcm1QZWkvWGVuLmMKCmRp ZmYgLS1naXQgYS9Pdm1mUGtnL092bWZYZW4uZHNjIGIvT3ZtZlBrZy9Pdm1mWGVuLmRzYwppbmRl eCAxYTBlNTlmMGNjLi43NjE5YTg5MzgyIDEwMDY0NAotLS0gYS9Pdm1mUGtnL092bWZYZW4uZHNj CisrKyBiL092bWZQa2cvT3ZtZlhlbi5kc2MKQEAgLTUyMyw3ICs1MjMsNyBAQCBbQ29tcG9uZW50 c10KICAgfQ0KICAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9EeGVJcGwuaW5mDQogDQot ICBPdm1mUGtnL1BsYXRmb3JtUGVpL1BsYXRmb3JtUGVpLmluZg0KKyAgT3ZtZlBrZy9YZW5QbGF0 Zm9ybVBlaS9YZW5QbGF0Zm9ybVBlaS5pbmYNCiAgIFVlZmlDcHVQa2cvVW5pdmVyc2FsL0FjcGkv UzNSZXN1bWUyUGVpL1MzUmVzdW1lMlBlaS5pbmYNCiAgIFVlZmlDcHVQa2cvQ3B1TXBQZWkvQ3B1 TXBQZWkuaW5mDQogDQpkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9Pdm1mWGVuLmZkZiBiL092bWZQa2cv T3ZtZlhlbi5mZGYKaW5kZXggNmZjODQ3OWFhZS4uMmNlZmY3YmFhMiAxMDA2NDQKLS0tIGEvT3Zt ZlBrZy9Pdm1mWGVuLmZkZgorKysgYi9Pdm1mUGtnL092bWZYZW4uZmRmCkBAIC0xNTIsNyArMTUy LDcgQEAgW0ZWLlBFSUZWXQogSU5GICBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1BDRC9QZWkvUGNk LmluZg0KIElORiAgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9SZXBvcnRTdGF0dXNDb2RlUm91dGVy L1BlaS9SZXBvcnRTdGF0dXNDb2RlUm91dGVyUGVpLmluZg0KIElORiAgTWRlTW9kdWxlUGtnL1Vu aXZlcnNhbC9TdGF0dXNDb2RlSGFuZGxlci9QZWkvU3RhdHVzQ29kZUhhbmRsZXJQZWkuaW5mDQot SU5GICBPdm1mUGtnL1BsYXRmb3JtUGVpL1BsYXRmb3JtUGVpLmluZg0KK0lORiAgT3ZtZlBrZy9Y ZW5QbGF0Zm9ybVBlaS9YZW5QbGF0Zm9ybVBlaS5pbmYNCiBJTkYgIE1kZU1vZHVsZVBrZy9Db3Jl L0R4ZUlwbFBlaW0vRHhlSXBsLmluZg0KIElORiAgVWVmaUNwdVBrZy9Vbml2ZXJzYWwvQWNwaS9T M1Jlc3VtZTJQZWkvUzNSZXN1bWUyUGVpLmluZg0KIElORiAgVWVmaUNwdVBrZy9DcHVNcFBlaS9D cHVNcFBlaS5pbmYNCmRpZmYgLS1naXQgYS9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL1hlblBsYXRm b3JtUGVpLmluZiBiL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvWGVuUGxhdGZvcm1QZWkuaW5mCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmQxMjY1YzM2NWEKLS0tIC9kZXYv bnVsbAorKysgYi9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL1hlblBsYXRmb3JtUGVpLmluZgpAQCAt MCwwICsxLDk2IEBACisjIyBAZmlsZQ0KKyMgIFBsYXRmb3JtIFBFSSBkcml2ZXINCisjDQorIyAg VGhpcyBtb2R1bGUgcHJvdmlkZXMgcGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb24gdG8gZGV0ZWN0 IGJvb3QgbW9kZS4NCisjICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5LCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorIyAgQ29weXJpZ2h0IChjKSAyMDE5LCBD aXRyaXggU3lzdGVtcywgSW5jLg0KKyMNCisjICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KKyMNCisjIw0KKw0KK1tEZWZpbmVzXQ0KKyAgSU5GX1ZFUlNJT04g ICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KKyAgQkFTRV9OQU1FICAgICAgICAgICAg ICAgICAgICAgID0gWGVuUGxhdGZvcm1QZWkNCisgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAg ICAgICA9IGYxMTJhNmVlLTk5M2EtNGYwYi04Mjk1LWU1MjAyOWQ5YjRiYQ0KKyAgTU9EVUxFX1RZ UEUgICAgICAgICAgICAgICAgICAgID0gUEVJTQ0KKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAg ICAgICAgID0gMS4wDQorICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBJbml0aWFs aXplWGVuUGxhdGZvcm0NCisNCisjDQorIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZv ciByZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCisj DQorIyAgVkFMSURfQVJDSElURUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2NCBFQkMNCisjDQor DQorW1NvdXJjZXNdDQorICBBbWRTZXYuYw0KKyAgQ2xlYXJDYWNoZS5jDQorICBDbW9zLmMNCisg IENtb3MuaA0KKyAgRnYuYw0KKyAgTWVtRGV0ZWN0LmMNCisgIFBsYXRmb3JtLmMNCisgIFBsYXRm b3JtLmgNCisgIFhlbi5jDQorICBYZW4uaA0KKw0KK1tQYWNrYWdlc10NCisgIE1kZVBrZy9NZGVQ a2cuZGVjDQorICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KKyAgU2VjdXJpdHlQa2cv U2VjdXJpdHlQa2cuZGVjDQorICBVZWZpQ3B1UGtnL1VlZmlDcHVQa2cuZGVjDQorICBPdm1mUGtn L092bWZQa2cuZGVjDQorDQorW0d1aWRzXQ0KKyAgZ0VmaU1lbW9yeVR5cGVJbmZvcm1hdGlvbkd1 aWQNCisgIGdFZmlYZW5JbmZvR3VpZA0KKw0KK1tMaWJyYXJ5Q2xhc3Nlc10NCisgIEJhc2VMaWIN CisgIENhY2hlTWFpbnRlbmFuY2VMaWINCisgIERlYnVnTGliDQorICBIb2JMaWINCisgIElvTGli DQorICBQY2lMaWINCisgIFJlc291cmNlUHVibGljYXRpb25MaWINCisgIFBlaVNlcnZpY2VzTGli DQorICBQZWltRW50cnlQb2ludA0KKyAgTXRyckxpYg0KKyAgTWVtRW5jcnlwdFNldkxpYg0KKyAg UGNkTGliDQorDQorW1BjZF0NCisgIGdVZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZE92bWZQ ZWlNZW1GdkJhc2UNCisgIGdVZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZE92bWZQZWlNZW1G dlNpemUNCisgIGdVZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZE92bWZEeGVNZW1GdkJhc2UN CisgIGdVZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZE92bWZEeGVNZW1GdlNpemUNCisgIGdV ZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZE92bWZMb2NrQm94U3RvcmFnZUJhc2UNCisgIGdV ZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZE92bWZMb2NrQm94U3RvcmFnZVNpemUNCisgIGdV ZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZE92bWZIb3N0QnJpZGdlUGNpRGV2SWQNCisgIGdV ZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaUlvQmFzZQ0KKyAgZ1VlZmlPdm1mUGtnVG9r ZW5TcGFjZUd1aWQuUGNkUGNpSW9TaXplDQorICBnVWVmaU92bWZQa2dUb2tlblNwYWNlR3VpZC5Q Y2RQY2lNbWlvMzJCYXNlDQorICBnVWVmaU92bWZQa2dUb2tlblNwYWNlR3VpZC5QY2RQY2lNbWlv MzJTaXplDQorICBnVWVmaU92bWZQa2dUb2tlblNwYWNlR3VpZC5QY2RQY2lNbWlvNjRCYXNlDQor ICBnVWVmaU92bWZQa2dUb2tlblNwYWNlR3VpZC5QY2RQY2lNbWlvNjRTaXplDQorICBnVWVmaU92 bWZQa2dUb2tlblNwYWNlR3VpZC5QY2RRMzVUc2VnTWJ5dGVzDQorICBnRWZpTWRlTW9kdWxlUGtn VG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZVNpemUNCisgIGdFZmlNZGVN b2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RFbXVWYXJpYWJsZU52U3RvcmVSZXNlcnZlZA0KKyAg Z0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaURpc2FibGVCdXNFbnVtZXJhdGlv bg0KKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZER4ZUlwbFN3aXRjaFRvTG9u Z01vZGUNCisgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RVc2UxR1BhZ2VUYWJs ZQ0KKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFB0ZU1lbW9yeUVuY3J5cHRp b25BZGRyZXNzT3JNYXNrDQorICBnRWZpU2VjdXJpdHlQa2dUb2tlblNwYWNlR3VpZC5QY2RPcHRp b25Sb21JbWFnZVZlcmlmaWNhdGlvblBvbGljeQ0KKyAgZ1VlZmlDcHVQa2dUb2tlblNwYWNlR3Vp ZC5QY2RDcHVMb2NhbEFwaWNCYXNlQWRkcmVzcw0KKw0KK1tGaXhlZFBjZF0NCisgIGdFZmlNZGVQ a2dUb2tlblNwYWNlR3VpZC5QY2RQY2lFeHByZXNzQmFzZUFkZHJlc3MNCisNCitbUHBpc10NCisg IGdFZmlQZWlNYXN0ZXJCb290TW9kZVBwaUd1aWQNCisgIGdFZmlQZWlNcFNlcnZpY2VzUHBpR3Vp ZA0KKw0KK1tEZXBleF0NCisgIFRSVUUNCisNCmRpZmYgLS1naXQgYS9Pdm1mUGtnL1hlblBsYXRm b3JtUGVpL0Ntb3MuaCBiL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvQ21vcy5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjgwZmZjYjAwMmYKLS0tIC9kZXYvbnVsbAorKysg Yi9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL0Ntb3MuaApAQCAtMCwwICsxLDUyIEBACisvKiogQGZp bGUNCisgIFBDL0FUIENNT1MgYWNjZXNzIHJvdXRpbmVzDQorDQorICBDb3B5cmlnaHQgKGMpIDIw MDYgLSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQor ICBDb3B5cmlnaHQgKGMpIDIwMTksIENpdHJpeCBTeXN0ZW1zLCBJbmMuDQorDQorICBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KKyoqLw0KKw0KKyNpZm5k ZWYgX19DTU9TX0hfXw0KKyNkZWZpbmUgX19DTU9TX0hfXw0KKw0KKy8qKg0KKyAgUmVhZHMgOC1i aXRzIG9mIENNT1MgZGF0YS4NCisNCisgIFJlYWRzIHRoZSA4LWJpdHMgb2YgQ01PUyBkYXRhIGF0 IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgSW5kZXguDQorICBUaGUgOC1iaXQgcmVhZCB2YWx1 ZSBpcyByZXR1cm5lZC4NCisNCisgIEBwYXJhbSAgSW5kZXggIFRoZSBDTU9TIGxvY2F0aW9uIHRv IHJlYWQuDQorDQorICBAcmV0dXJuIFRoZSB2YWx1ZSByZWFkLg0KKw0KKyoqLw0KK1VJTlQ4DQor RUZJQVBJDQorQ21vc1JlYWQ4ICgNCisgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICBJbmRleA0KKyAgKTsNCisNCisvKioNCisgIFdyaXRlcyA4LWJpdHMgb2YgQ01PUyBkYXRhLg0K Kw0KKyAgV3JpdGVzIDgtYml0cyBvZiBDTU9TIGRhdGEgdG8gdGhlIGxvY2F0aW9uIHNwZWNpZmll ZCBieSBJbmRleA0KKyAgd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlIGFuZCByZXR1 cm5zIFZhbHVlLg0KKw0KKyAgQHBhcmFtICBJbmRleCAgVGhlIENNT1MgbG9jYXRpb24gdG8gd3Jp dGUuDQorICBAcGFyYW0gIFZhbHVlICBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gQ01PUy4NCisNCisg IEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8gQ01PUy4NCisNCisqKi8NCitVSU5UOA0KK0VG SUFQSQ0KK0Ntb3NXcml0ZTggKA0KKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAg IEluZGV4LA0KKyAgSU4gICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgIFZhbHVlDQorICAp Ow0KKw0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL092bWZQa2cvWGVuUGxhdGZvcm1QZWkv UGxhdGZvcm0uaCBiL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvUGxhdGZvcm0uaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43NzQyNzQ5NmMwCi0tLSAvZGV2L251bGwKKysr IGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9QbGF0Zm9ybS5oCkBAIC0wLDAgKzEsMTA4IEBACisv KiogQGZpbGUNCisgIFBsYXRmb3JtIFBFSSBtb2R1bGUgaW5jbHVkZSBmaWxlLg0KKw0KKyAgQ29w eXJpZ2h0IChjKSAyMDA2IC0gMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuPEJSPg0KKyAgQ29weXJpZ2h0IChjKSAyMDE5LCBDaXRyaXggU3lzdGVtcywgSW5jLg0K Kw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisNCisq Ki8NCisNCisjaWZuZGVmIF9QTEFURk9STV9QRUlfSF9JTkNMVURFRF8NCisjZGVmaW5lIF9QTEFU Rk9STV9QRUlfSF9JTkNMVURFRF8NCisNCisjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9FODIw Lmg+DQorDQorVk9JRA0KK0FkZElvTWVtb3J5QmFzZVNpemVIb2IgKA0KKyAgRUZJX1BIWVNJQ0FM X0FERFJFU1MgICAgICAgIE1lbW9yeUJhc2UsDQorICBVSU5UNjQgICAgICAgICAgICAgICAgICAg ICAgTWVtb3J5U2l6ZQ0KKyAgKTsNCisNCitWT0lEDQorQWRkSW9NZW1vcnlSYW5nZUhvYiAoDQor ICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisgIEVGSV9QSFlTSUNB TF9BRERSRVNTICAgICAgICBNZW1vcnlMaW1pdA0KKyAgKTsNCisNCitWT0lEDQorQWRkTWVtb3J5 QmFzZVNpemVIb2IgKA0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIE1lbW9yeUJhc2Us DQorICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5U2l6ZQ0KKyAgKTsNCisNCitW T0lEDQorQWRkTWVtb3J5UmFuZ2VIb2IgKA0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAg IE1lbW9yeUJhc2UsDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5TGltaXQN CisgICk7DQorDQorVk9JRA0KK0FkZFJlc2VydmVkTWVtb3J5QmFzZVNpemVIb2IgKA0KKyAgRUZJ X1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIE1lbW9yeUJhc2UsDQorICBVSU5UNjQgICAgICAgICAg ICAgICAgICAgICAgTWVtb3J5U2l6ZSwNCisgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICBD YWNoZWFibGUNCisgICk7DQorDQorVk9JRA0KK0FkZHJlc3NXaWR0aEluaXRpYWxpemF0aW9uICgN CisgIFZPSUQNCisgICk7DQorDQorVk9JRA0KK1EzNVRzZWdNYnl0ZXNJbml0aWFsaXphdGlvbiAo DQorICBWT0lEDQorICApOw0KKw0KK0VGSV9TVEFUVVMNCitQdWJsaXNoUGVpTWVtb3J5ICgNCisg IFZPSUQNCisgICk7DQorDQorVUlOVDMyDQorR2V0U3lzdGVtTWVtb3J5U2l6ZUJlbG93NGdiICgN CisgIFZPSUQNCisgICk7DQorDQorVk9JRA0KK0luaXRpYWxpemVSYW1SZWdpb25zICgNCisgIFZP SUQNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK1BlaUZ2SW5pdGlhbGl6YXRpb24gKA0KKyAgVk9J RA0KKyAgKTsNCisNCitWT0lEDQorSW5zdGFsbENsZWFyQ2FjaGVDYWxsYmFjayAoDQorICBWT0lE DQorICApOw0KKw0KK0VGSV9TVEFUVVMNCitJbml0aWFsaXplWGVuICgNCisgIFZPSUQNCisgICk7 DQorDQorQk9PTEVBTg0KK1hlbkRldGVjdCAoDQorICBWT0lEDQorICApOw0KKw0KK1ZPSUQNCitB bWRTZXZJbml0aWFsaXplICgNCisgIFZPSUQNCisgICk7DQorDQorVk9JRA0KK1hlblB1Ymxpc2hS YW1SZWdpb25zICgNCisgIFZPSUQNCisgICk7DQorDQorZXh0ZXJuIEVGSV9CT09UX01PREUgbUJv b3RNb2RlOw0KKw0KK2V4dGVybiBVSU5UOCBtUGh5c01lbUFkZHJlc3NXaWR0aDsNCisNCitleHRl cm4gVUlOVDE2IG1Ib3N0QnJpZGdlRGV2SWQ7DQorDQorI2VuZGlmIC8vIF9QTEFURk9STV9QRUlf SF9JTkNMVURFRF8NCmRpZmYgLS1naXQgYS9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL1hlbi5oIGIv T3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9YZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi4yNjA1NDgxMjgwCi0tLSAvZGV2L251bGwKKysrIGIvT3ZtZlBrZy9YZW5QbGF0 Zm9ybVBlaS9YZW4uaApAQCAtMCwwICsxLDM5IEBACisvKiogQGZpbGUNCisgIE92bWYgaW5mbyBz dHJ1Y3R1cmUgcGFzc2VkIGJ5IFhlbg0KKw0KK0NvcHlyaWdodCAoYykgMjAxMywgQ2l0cml4IFN5 c3RlbXMgVUsgTHRkLjxCUj4NCisNCitTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KKw0KKyoqLw0KKw0KKyNpZm5kZWYgX19YRU5fSF9fDQorI2RlZmluZSBfX1hF Tl9IX18NCisNCisjaW5jbHVkZSA8UGlQZWkuaD4NCisNCisvLyBQaHlzaWNhbCBhZGRyZXNzIG9m IE9WTUYgaW5mbw0KKyNkZWZpbmUgT1ZNRl9JTkZPX1BIWVNJQ0FMX0FERFJFU1MgMHgwMDAwMTAw MA0KKw0KKy8vIFRoaXMgc3RydWN0dXJlIG11c3QgbWF0Y2ggdGhlIGRlZmluaXRpb24gb24gWGVu IHNpZGUNCisjcHJhZ21hIHBhY2soMSkNCit0eXBlZGVmIHN0cnVjdCB7DQorICBDSEFSOCBTaWdu YXR1cmVbMTRdOyAvLyBYZW5IVk1PVk1GXDANCisgIFVJTlQ4IExlbmd0aDsgICAgICAgIC8vIExl bmd0aCBvZiB0aGlzIHN0cnVjdHVyZQ0KKyAgVUlOVDggQ2hlY2tzdW07ICAgICAgLy8gU2V0IHN1 Y2ggdGhhdCB0aGUgc3VtIG92ZXIgYnl0ZXMgMC4ubGVuZ3RoID09IDANCisgIC8vDQorICAvLyBQ aHlzaWNhbCBhZGRyZXNzIG9mIGFuIGFycmF5IG9mIFRhYmxlc0NvdW50IGVsZW1lbnRzLg0KKyAg Ly8NCisgIC8vIEVhY2ggZWxlbWVudCBjb250YWlucyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBh IEJJT1MgdGFibGUuDQorICAvLw0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgVGFibGVzOw0KKyAg VUlOVDMyIFRhYmxlc0NvdW50Ow0KKyAgLy8NCisgIC8vIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhl IEU4MjAgdGFibGUsIGNvbnRhaW5zIEU4MjBFbnRyaWVzQ291bnQgZW50cmllcy4NCisgIC8vDQor ICBFRklfUEhZU0lDQUxfQUREUkVTUyBFODIwOw0KKyAgVUlOVDMyIEU4MjBFbnRyaWVzQ291bnQ7 DQorfSBFRklfWEVOX09WTUZfSU5GTzsNCisjcHJhZ21hIHBhY2soKQ0KKw0KKyNlbmRpZiAvKiBf X1hFTl9IX18gKi8NCmRpZmYgLS1naXQgYS9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL0FtZFNldi5j IGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9BbWRTZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi43ZWJiYjVjYzFmCi0tLSAvZGV2L251bGwKKysrIGIvT3ZtZlBrZy9Y ZW5QbGF0Zm9ybVBlaS9BbWRTZXYuYwpAQCAtMCwwICsxLDY0IEBACisvKipAZmlsZQ0KKyAgSW5p dGlhbGl6ZSBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnQNCisN CisgIENvcHlyaWdodCAoYykgMjAxNywgQWR2YW5jZWQgTWljcm8gRGV2aWNlcy4gQWxsIHJpZ2h0 cyByZXNlcnZlZC48QlI+DQorICBDb3B5cmlnaHQgKGMpIDIwMTksIENpdHJpeCBTeXN0ZW1zLCBJ bmMuDQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K Kw0KKyoqLw0KKy8vDQorLy8gVGhlIHBhY2thZ2UgbGV2ZWwgaGVhZGVyIGZpbGVzIHRoaXMgbW9k dWxlIHVzZXMNCisvLw0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUg PExpYnJhcnkvTWVtRW5jcnlwdFNldkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1BjZExpYi5o Pg0KKyNpbmNsdWRlIDxQaVBlaS5oPg0KKyNpbmNsdWRlIDxSZWdpc3Rlci9BbWQvQ3B1aWQuaD4N CisjaW5jbHVkZSA8UmVnaXN0ZXIvQ3B1aWQuaD4NCisNCisjaW5jbHVkZSAiUGxhdGZvcm0uaCIN CisNCisvKioNCisNCisgIEZ1bmN0aW9uIGNoZWNrcyBpZiBTRVYgc3VwcG9ydCBpcyBhdmFpbGFi bGUsIGlmIHByZXNlbnQgdGhlbiBpdCBzZXRzDQorICB0aGUgZHluYW1pYyBQY2RQdGVNZW1vcnlF bmNyeXB0aW9uQWRkcmVzc09yTWFzayB3aXRoIG1lbW9yeSBlbmNyeXB0aW9uIG1hc2suDQorDQor ICAqKi8NCitWT0lEDQorQW1kU2V2SW5pdGlhbGl6ZSAoDQorICBWT0lEDQorICApDQorew0KKyAg Q1BVSURfTUVNT1JZX0VOQ1JZUFRJT05fSU5GT19FQlggIEVieDsNCisgIFVJTlQ2NCAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFbmNyeXB0aW9uTWFzazsNCisgIFJFVFVSTl9TVEFUVVMgICAg ICAgICAgICAgICAgICAgICBQY2RTdGF0dXM7DQorDQorICAvLw0KKyAgLy8gQ2hlY2sgaWYgU0VW IGlzIGVuYWJsZWQNCisgIC8vDQorICBpZiAoIU1lbUVuY3J5cHRTZXZJc0VuYWJsZWQgKCkpIHsN CisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIENQVUlEIEZuODAwMF8wMDFGW0VC WF0gQml0IDA6NSAobWVtb3J5IGVuY3J5cHRpb24gYml0IHBvc2l0aW9uKQ0KKyAgLy8NCisgIEFz bUNwdWlkIChDUFVJRF9NRU1PUllfRU5DUllQVElPTl9JTkZPLCBOVUxMLCAmRWJ4LlVpbnQzMiwg TlVMTCwgTlVMTCk7DQorICBFbmNyeXB0aW9uTWFzayA9IExTaGlmdFU2NCAoMSwgRWJ4LkJpdHMu UHRlUG9zQml0cyk7DQorDQorICAvLw0KKyAgLy8gU2V0IE1lbW9yeSBFbmNyeXB0aW9uIE1hc2sg UENEDQorICAvLw0KKyAgUGNkU3RhdHVzID0gUGNkU2V0NjRTIChQY2RQdGVNZW1vcnlFbmNyeXB0 aW9uQWRkcmVzc09yTWFzaywgRW5jcnlwdGlvbk1hc2spOw0KKyAgQVNTRVJUX1JFVFVSTl9FUlJP UiAoUGNkU3RhdHVzKTsNCisNCisgIERFQlVHICgoREVCVUdfSU5GTywgIlNFViBpcyBlbmFibGVk IChtYXNrIDB4JWx4KVxuIiwgRW5jcnlwdGlvbk1hc2spKTsNCisNCisgIC8vDQorICAvLyBTZXQg UGNkIHRvIERlbnkgdGhlIGV4ZWN1dGlvbiBvZiBvcHRpb24gUk9NIHdoZW4gc2VjdXJpdHkNCisg IC8vIHZpb2xhdGlvbi4NCisgIC8vDQorICBQY2RTdGF0dXMgPSBQY2RTZXQzMlMgKFBjZE9wdGlv blJvbUltYWdlVmVyaWZpY2F0aW9uUG9saWN5LCAweDQpOw0KKyAgQVNTRVJUX1JFVFVSTl9FUlJP UiAoUGNkU3RhdHVzKTsNCit9DQpkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9D bGVhckNhY2hlLmMgYi9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL0NsZWFyQ2FjaGUuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mYWI1MzYzM2E5Ci0tLSAvZGV2L251bGwK KysrIGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9DbGVhckNhY2hlLmMKQEAgLTAsMCArMSwxMTIg QEAKKy8qKkBmaWxlDQorICBJbnN0YWxsIGEgY2FsbGJhY2sgdG8gY2xlYXIgY2FjaGUgb24gYWxs IHByb2Nlc3NvcnMuDQorICBUaGlzIGlzIGZvciBjb25mb3JtYW5jZSB3aXRoIHRoZSBUQ0cgIlBs YXRmb3JtIFJlc2V0IEF0dGFjayBNaXRpZ2F0aW9uDQorICBTcGVjaWZpY2F0aW9uIi4gQmVjYXVz ZSBjbGVhcmluZyB0aGUgQ1BVIGNhY2hlcyBhdCBib290IGRvZXNuJ3QgaW1wYWN0DQorICBwZXJm b3JtYW5jZSBzaWduaWZpY2FudGx5LCBkbyBpdCB1bmNvbmRpdGlvbmFsbHksIGZvciBzaW1wbGlj aXR5J3MNCisgIHNha2UuDQorDQorICBDb3B5cmlnaHQgKEMpIDIwMTgsIFJlZCBIYXQsIEluYy4N CisgIENvcHlyaWdodCAoYykgMjAxOSwgQ2l0cml4IFN5c3RlbXMsIEluYy4NCisNCisgIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2luY2x1 ZGUgPExpYnJhcnkvQ2FjaGVNYWludGVuYW5jZUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0Rl YnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGVpU2VydmljZXNMaWIuaD4NCisjaW5jbHVk ZSA8UHBpL01wU2VydmljZXMuaD4NCisNCisjaW5jbHVkZSAiUGxhdGZvcm0uaCINCisNCisvKioN CisgIEludmFsaWRhdGUgZGF0YSAmIGluc3RydWN0aW9uIGNhY2hlcy4NCisgIEFsbCBBUHMgZXhl Y3V0ZSB0aGlzIGZ1bmN0aW9uIGluIHBhcmFsbGVsLiBUaGUgQlNQIGV4ZWN1dGVzIHRoZSBmdW5j dGlvbg0KKyAgc2VwYXJhdGVseS4NCisNCisgIEBwYXJhbVtpbixvdXRdIFdvcmtTcGFjZSAgUG9p bnRlciB0byB0aGUgaW5wdXQvb3V0cHV0IGFyZ3VtZW50IHdvcmtzcGFjZQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaGFyZWQgYnkgYWxsIHByb2Nlc3NvcnMuDQorKiovDQorU1RBVElD DQorVk9JRA0KK0VGSUFQSQ0KK0NsZWFyQ2FjaGUgKA0KKyAgSU4gT1VUIFZPSUQgKldvcmtTcGFj ZQ0KKyAgKQ0KK3sNCisgIFdyaXRlQmFja0ludmFsaWRhdGVEYXRhQ2FjaGUgKCk7DQorICBJbnZh bGlkYXRlSW5zdHJ1Y3Rpb25DYWNoZSAoKTsNCit9DQorDQorLyoqDQorICBOb3RpZmljYXRpb24g ZnVuY3Rpb24gY2FsbGVkIHdoZW4gRUZJX1BFSV9NUF9TRVJWSUNFU19QUEkgYmVjb21lcyBhdmFp bGFibGUuDQorDQorICBAcGFyYW1baW5dIFBlaVNlcnZpY2VzICAgICAgSW5kaXJlY3QgcmVmZXJl bmNlIHRvIHRoZSBQRUkgU2VydmljZXMgVGFibGUuDQorICBAcGFyYW1baW5dIE5vdGlmeURlc2Ny aXB0b3IgQWRkcmVzcyBvZiB0aGUgbm90aWZpY2F0aW9uIGRlc2NyaXB0b3IgZGF0YQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS4NCisgIEBwYXJhbVtpbl0gUHBpICAg ICAgICAgICAgICBBZGRyZXNzIG9mIHRoZSBQUEkgdGhhdCB3YXMgaW5zdGFsbGVkLg0KKw0KKyAg QHJldHVybiAgU3RhdHVzIG9mIHRoZSBub3RpZmljYXRpb24uIFRoZSBzdGF0dXMgY29kZSByZXR1 cm5lZCBmcm9tIHRoaXMNCisgICAgICAgICAgIGZ1bmN0aW9uIGlzIGlnbm9yZWQuDQorKiovDQor U1RBVElDDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0NsZWFyQ2FjaGVPbk1wU2VydmljZXNBdmFp bGFibGUgKA0KKyAgSU4gRUZJX1BFSV9TRVJWSUNFUyAgICAgICAgICAgKipQZWlTZXJ2aWNlcywN CisgIElOIEVGSV9QRUlfTk9USUZZX0RFU0NSSVBUT1IgICpOb3RpZnlEZXNjcmlwdG9yLA0KKyAg SU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgKlBwaQ0KKyAgKQ0KK3sNCisgIEVGSV9QRUlf TVBfU0VSVklDRVNfUFBJICpNcFNlcnZpY2VzOw0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg U3RhdHVzOw0KKw0KKyAgREVCVUcgKChERUJVR19JTkZPLCAiJWE6ICVhXG4iLCBnRWZpQ2FsbGVy QmFzZU5hbWUsIF9fRlVOQ1RJT05fXykpOw0KKw0KKyAgLy8NCisgIC8vIENsZWFyIGNhY2hlIG9u IGFsbCB0aGUgQVBzIGluIHBhcmFsbGVsLg0KKyAgLy8NCisgIE1wU2VydmljZXMgPSBQcGk7DQor ICBTdGF0dXMgPSBNcFNlcnZpY2VzLT5TdGFydHVwQWxsQVBzICgNCisgICAgICAgICAgICAgICAg ICAgICAgICAgKENPTlNUIEVGSV9QRUlfU0VSVklDRVMgKiopUGVpU2VydmljZXMsDQorICAgICAg ICAgICAgICAgICAgICAgICAgIE1wU2VydmljZXMsDQorICAgICAgICAgICAgICAgICAgICAgICAg IENsZWFyQ2FjaGUsICAgICAgICAgIC8vIFByb2NlZHVyZQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgICBGQUxTRSwgICAgICAgICAgICAgICAvLyBTaW5nbGVUaHJlYWQNCisgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgLy8gVGltZW91dEluTWljcm9TZWNvbmRz OiBpbmYuDQorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgIC8v IFByb2NlZHVyZUFyZ3VtZW50DQorICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpICYmIFN0YXR1cyAhPSBFRklfTk9UX1NUQVJURUQpIHsNCisgICAg REVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBTdGFydHVwQWxsQXBzKCk6ICVyXG4iLCBfX0ZVTkNU SU9OX18sIFN0YXR1cykpOw0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8NCisg IC8vIE5vdyBjbGVhciBjYWNoZSBvbiB0aGUgQlNQIHRvby4NCisgIC8vDQorICBDbGVhckNhY2hl IChOVUxMKTsNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorLy8NCisvLyBOb3RpZmlj YXRpb24gb2JqZWN0IGZvciByZWdpc3RlcmluZyB0aGUgY2FsbGJhY2ssIGZvciB3aGVuDQorLy8g RUZJX1BFSV9NUF9TRVJWSUNFU19QUEkgYmVjb21lcyBhdmFpbGFibGUuDQorLy8NCitTVEFUSUMg Q09OU1QgRUZJX1BFSV9OT1RJRllfREVTQ1JJUFRPUiBtTXBTZXJ2aWNlc05vdGlmeSA9IHsNCisg IEVGSV9QRUlfUFBJX0RFU0NSSVBUT1JfTk9USUZZX0NBTExCQUNLIHwgLy8gRmxhZ3MNCisgIEVG SV9QRUlfUFBJX0RFU0NSSVBUT1JfVEVSTUlOQVRFX0xJU1QsDQorICAmZ0VmaVBlaU1wU2Vydmlj ZXNQcGlHdWlkLCAgICAgICAgICAgICAgIC8vIEd1aWQNCisgIENsZWFyQ2FjaGVPbk1wU2Vydmlj ZXNBdmFpbGFibGUgICAgICAgICAgLy8gTm90aWZ5DQorfTsNCisNCitWT0lEDQorSW5zdGFsbENs ZWFyQ2FjaGVDYWxsYmFjayAoDQorICBWT0lEDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgU3RhdHVzOw0KKw0KKyAgU3RhdHVzID0gUGVpU2VydmljZXNOb3RpZnlQcGkgKCZtTXBT ZXJ2aWNlc05vdGlmeSk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVH ICgoREVCVUdfRVJST1IsICIlYTogZmFpbGVkIHRvIHNldCB1cCBNUCBTZXJ2aWNlcyBjYWxsYmFj azogJXJcbiIsDQorICAgICAgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCisgIH0NCit9DQpkaWZm IC0tZ2l0IGEvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9DbW9zLmMgYi9Pdm1mUGtnL1hlblBsYXRm b3JtUGVpL0Ntb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41ZDll ZTY3Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9DbW9zLmMK QEAgLTAsMCArMSw2MCBAQAorLyoqIEBmaWxlDQorICBQQy9BVCBDTU9TIGFjY2VzcyByb3V0aW5l cw0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKyAgQ29weXJpZ2h0IChjKSAyMDE5LCBDaXRyaXggU3lz dGVtcywgSW5jLg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCisNCisqKi8NCisNCisNCisjaW5jbHVkZSAiQ21vcy5oIg0KKyNpbmNsdWRlICJMaWJy YXJ5L0lvTGliLmgiDQorDQorLyoqDQorICBSZWFkcyA4LWJpdHMgb2YgQ01PUyBkYXRhLg0KKw0K KyAgUmVhZHMgdGhlIDgtYml0cyBvZiBDTU9TIGRhdGEgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmll ZCBieSBJbmRleC4NCisgIFRoZSA4LWJpdCByZWFkIHZhbHVlIGlzIHJldHVybmVkLg0KKw0KKyAg QHBhcmFtICBJbmRleCAgVGhlIENNT1MgbG9jYXRpb24gdG8gcmVhZC4NCisNCisgIEByZXR1cm4g VGhlIHZhbHVlIHJlYWQuDQorDQorKiovDQorVUlOVDgNCitFRklBUEkNCitDbW9zUmVhZDggKA0K KyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEluZGV4DQorICApDQorew0KKyAg SW9Xcml0ZTggKDB4NzAsIChVSU5UOCkgSW5kZXgpOw0KKyAgcmV0dXJuIElvUmVhZDggKDB4NzEp Ow0KK30NCisNCisNCisvKioNCisgIFdyaXRlcyA4LWJpdHMgb2YgQ01PUyBkYXRhLg0KKw0KKyAg V3JpdGVzIDgtYml0cyBvZiBDTU9TIGRhdGEgdG8gdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSBJ bmRleA0KKyAgd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlIGFuZCByZXR1cm5zIFZh bHVlLg0KKw0KKyAgQHBhcmFtICBJbmRleCAgVGhlIENNT1MgbG9jYXRpb24gdG8gd3JpdGUuDQor ICBAcGFyYW0gIFZhbHVlICBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gQ01PUy4NCisNCisgIEByZXR1 cm4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8gQ01PUy4NCisNCisqKi8NCitVSU5UOA0KK0VGSUFQSQ0K K0Ntb3NXcml0ZTggKA0KKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEluZGV4 LA0KKyAgSU4gICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgIFZhbHVlDQorICApDQorew0K KyAgSW9Xcml0ZTggKDB4NzAsIChVSU5UOCkgSW5kZXgpOw0KKyAgSW9Xcml0ZTggKDB4NzEsIFZh bHVlKTsNCisgIHJldHVybiBWYWx1ZTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9YZW5Q bGF0Zm9ybVBlaS9Gdi5jIGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9Gdi5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjcwZTliNTI3MDAKLS0tIC9kZXYvbnVsbAorKysg Yi9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL0Z2LmMKQEAgLTAsMCArMSw3NiBAQAorLyoqIEBmaWxl DQorICBCdWlsZCBGViByZWxhdGVkIGhvYnMgZm9yIHBsYXRmb3JtLg0KKw0KKyAgQ29weXJpZ2h0 IChjKSAyMDA2IC0gMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu PEJSPg0KKyAgQ29weXJpZ2h0IChjKSAyMDE5LCBDaXRyaXggU3lzdGVtcywgSW5jLg0KKw0KKyAg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisNCisqKi8NCisN CisjaW5jbHVkZSAiUGlQZWkuaCINCisjaW5jbHVkZSAiUGxhdGZvcm0uaCINCisjaW5jbHVkZSA8 TGlicmFyeS9EZWJ1Z0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0hvYkxpYi5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L1BlaVNlcnZpY2VzTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGNkTGli Lmg+DQorDQorDQorLyoqDQorICBQdWJsaXNoIFBFSSAmIERYRSAoRGVjb21wcmVzc2VkKSBNZW1v cnkgYmFzZWQgRlZzIHRvIGxldCBQRUkNCisgIGFuZCBEWEUga25vdyBhYm91dCB0aGVtLg0KKw0K KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgIFBsYXRmb3JtIFBFSSBGVnMgd2VyZSBpbml0aWFsaXpl ZCBzdWNjZXNzZnVsbHkuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK1BlaUZ2SW5pdGlhbGl6YXRp b24gKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIERFQlVHICgoREVCVUdfSU5GTywgIlBsYXRmb3Jt IFBFSSBGaXJtd2FyZSBWb2x1bWUgSW5pdGlhbGl6YXRpb25cbiIpKTsNCisNCisgIC8vDQorICAv LyBDcmVhdGUgYSBtZW1vcnkgYWxsb2NhdGlvbiBIT0IgZm9yIHRoZSBQRUkgRlYuDQorICAvLw0K KyAgLy8gQWxsb2NhdGUgYXMgQUNQSSBOVlMgaXMgUzMgaXMgc3VwcG9ydGVkDQorICAvLw0KKyAg QnVpbGRNZW1vcnlBbGxvY2F0aW9uSG9iICgNCisgICAgUGNkR2V0MzIgKFBjZE92bWZQZWlNZW1G dkJhc2UpLA0KKyAgICBQY2RHZXQzMiAoUGNkT3ZtZlBlaU1lbUZ2U2l6ZSksDQorICAgIEVmaUJv b3RTZXJ2aWNlc0RhdGENCisgICAgKTsNCisNCisgIC8vDQorICAvLyBMZXQgRFhFIGtub3cgYWJv dXQgdGhlIERYRSBGVg0KKyAgLy8NCisgIEJ1aWxkRnZIb2IgKFBjZEdldDMyIChQY2RPdm1mRHhl TWVtRnZCYXNlKSwgUGNkR2V0MzIgKFBjZE92bWZEeGVNZW1GdlNpemUpKTsNCisNCisgIC8vDQor ICAvLyBDcmVhdGUgYSBtZW1vcnkgYWxsb2NhdGlvbiBIT0IgZm9yIHRoZSBEWEUgRlYuDQorICAv Lw0KKyAgLy8gSWYgInNlY3VyZSIgUzMgaXMgbmVlZGVkLCB0aGVuIFNFQyB3aWxsIGRlY29tcHJl c3MgYm90aCBQRUkgYW5kIERYRQ0KKyAgLy8gZmlybXdhcmUgdm9sdW1lcyBhdCBTMyByZXN1bWUg dG9vLCBoZW5jZSB3ZSBuZWVkIHRvIGtlZXAgYXdheSB0aGUgT1MgZnJvbQ0KKyAgLy8gRFhFRlYg YXMgd2VsbC4gT3RoZXJ3aXNlIHdlIG9ubHkgbmVlZCB0byBrZWVwIGF3YXkgRFhFIGl0c2VsZiBm cm9tIHRoZQ0KKyAgLy8gRFhFRlYgYXJlYS4NCisgIC8vDQorICBCdWlsZE1lbW9yeUFsbG9jYXRp b25Ib2IgKA0KKyAgICBQY2RHZXQzMiAoUGNkT3ZtZkR4ZU1lbUZ2QmFzZSksDQorICAgIFBjZEdl dDMyIChQY2RPdm1mRHhlTWVtRnZTaXplKSwNCisgICAgRWZpQm9vdFNlcnZpY2VzRGF0YQ0KKyAg ICApOw0KKw0KKyAgLy8NCisgIC8vIExldCBQRUkga25vdyBhYm91dCB0aGUgRFhFIEZWIHNvIGl0 IGNhbiBmaW5kIHRoZSBEWEUgQ29yZQ0KKyAgLy8NCisgIFBlaVNlcnZpY2VzSW5zdGFsbEZ2SW5m b1BwaSAoDQorICAgIE5VTEwsDQorICAgIChWT0lEICopKFVJTlROKSBQY2RHZXQzMiAoUGNkT3Zt ZkR4ZU1lbUZ2QmFzZSksDQorICAgIFBjZEdldDMyIChQY2RPdm1mRHhlTWVtRnZTaXplKSwNCisg ICAgTlVMTCwNCisgICAgTlVMTA0KKyAgICApOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K K30NCisNCmRpZmYgLS1naXQgYS9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL01lbURldGVjdC5jIGIv T3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9NZW1EZXRlY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi5jZjk1ZjljNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvT3ZtZlBrZy9Y ZW5QbGF0Zm9ybVBlaS9NZW1EZXRlY3QuYwpAQCAtMCwwICsxLDQyMSBAQAorLyoqQGZpbGUNCisg IE1lbW9yeSBEZXRlY3Rpb24gZm9yIFZpcnR1YWwgTWFjaGluZXMuDQorDQorICBDb3B5cmlnaHQg KGMpIDIwMDYgLSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48 QlI+DQorICBDb3B5cmlnaHQgKGMpIDIwMTksIENpdHJpeCBTeXN0ZW1zLCBJbmMuDQorDQorICBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KK01vZHVsZSBO YW1lOg0KKw0KKyAgTWVtRGV0ZWN0LmMNCisNCisqKi8NCisNCisvLw0KKy8vIFRoZSBwYWNrYWdl IGxldmVsIGhlYWRlciBmaWxlcyB0aGlzIG1vZHVsZSB1c2VzDQorLy8NCisjaW5jbHVkZSA8SW5k dXN0cnlTdGFuZGFyZC9RMzVNY2hJY2g5Lmg+DQorI2luY2x1ZGUgPFBpUGVpLmg+DQorDQorLy8N CisvLyBUaGUgTGlicmFyeSBjbGFzc2VzIHRoaXMgbW9kdWxlIGNvbnN1bWVzDQorLy8NCisjaW5j bHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxp Yi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkv SG9iTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvSW9MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFy eS9QY2RMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QY2lMaWIuaD4NCisjaW5jbHVkZSA8TGli cmFyeS9QZWltRW50cnlQb2ludC5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1Jlc291cmNlUHVibGlj YXRpb25MaWIuaD4NCisNCisjaW5jbHVkZSAiUGxhdGZvcm0uaCINCisjaW5jbHVkZSAiQ21vcy5o Ig0KKw0KK1VJTlQ4IG1QaHlzTWVtQWRkcmVzc1dpZHRoOw0KKw0KK1NUQVRJQyBVSU5UMzIgbVMz QWNwaVJlc2VydmVkTWVtb3J5QmFzZTsNCitTVEFUSUMgVUlOVDMyIG1TM0FjcGlSZXNlcnZlZE1l bW9yeVNpemU7DQorDQorU1RBVElDIFVJTlQxNiBtUTM1VHNlZ01ieXRlczsNCisNCitWT0lEDQor UTM1VHNlZ01ieXRlc0luaXRpYWxpemF0aW9uICgNCisgIFZPSUQNCisgICkNCit7DQorICBVSU5U MTYgICAgICAgIEV4dGVuZGVkVHNlZ01ieXRlczsNCisgIFJFVFVSTl9TVEFUVVMgUGNkU3RhdHVz Ow0KKw0KKyAgaWYgKG1Ib3N0QnJpZGdlRGV2SWQgIT0gSU5URUxfUTM1X01DSF9ERVZJQ0VfSUQp IHsNCisgICAgREVCVUcgKCgNCisgICAgICBERUJVR19FUlJPUiwNCisgICAgICAiJWE6IG5vIFRT RUcgKFNNUkFNKSBvbiBob3N0IGJyaWRnZSBESUQ9MHglMDR4OyAiDQorICAgICAgIm9ubHkgRElE PTB4JTA0eCAoUTM1KSBpcyBzdXBwb3J0ZWRcbiIsDQorICAgICAgX19GVU5DVElPTl9fLA0KKyAg ICAgIG1Ib3N0QnJpZGdlRGV2SWQsDQorICAgICAgSU5URUxfUTM1X01DSF9ERVZJQ0VfSUQNCisg ICAgICApKTsNCisgICAgQVNTRVJUIChGQUxTRSk7DQorICAgIENwdURlYWRMb29wICgpOw0KKyAg fQ0KKw0KKyAgLy8NCisgIC8vIENoZWNrIGlmIFFFTVUgb2ZmZXJzIGFuIGV4dGVuZGVkIFRTRUcu DQorICAvLw0KKyAgLy8gVGhpcyBjYW4gYmUgc2VlbiBmcm9tIHdyaXRpbmcgTUNIX0VYVF9UU0VH X01CX1FVRVJZIHRvIHRoZSBNQ0hfRVhUX1RTRUdfTUINCisgIC8vIHJlZ2lzdGVyLCBhbmQgcmVh ZGluZyBiYWNrIHRoZSByZWdpc3Rlci4NCisgIC8vDQorICAvLyBPbiBhIFFFTVUgbWFjaGluZSB0 eXBlIHRoYXQgZG9lcyBub3Qgb2ZmZXIgYW4gZXh0ZW5kZWQgVFNFRywgdGhlIGluaXRpYWwNCisg IC8vIHdyaXRlIG92ZXJ3cml0ZXMgd2hhdGV2ZXIgdmFsdWUgYSBtYWxpY2lvdXMgZ3Vlc3QgT1Mg bWF5IGhhdmUgcGxhY2VkIGluDQorICAvLyB0aGUgKHVuaW1wbGVtZW50ZWQpIHJlZ2lzdGVyLCBi ZWZvcmUgZW50ZXJpbmcgUzMgb3IgcmVib290aW5nLg0KKyAgLy8gU3Vic2VxdWVudGx5LCB0aGUg cmVhZCByZXR1cm5zIE1DSF9FWFRfVFNFR19NQl9RVUVSWSB1bmNoYW5nZWQuDQorICAvLw0KKyAg Ly8gT24gYSBRRU1VIG1hY2hpbmUgdHlwZSB0aGF0IG9mZmVycyBhbiBleHRlbmRlZCBUU0VHLCB0 aGUgaW5pdGlhbCB3cml0ZQ0KKyAgLy8gdHJpZ2dlcnMgYW4gdXBkYXRlIHRvIHRoZSByZWdpc3Rl ci4gU3Vic2VxdWVudGx5LCB0aGUgdmFsdWUgcmVhZCBiYWNrDQorICAvLyAod2hpY2ggaXMgZ3Vh cmFudGVlZCB0byBkaWZmZXIgZnJvbSBNQ0hfRVhUX1RTRUdfTUJfUVVFUlkpIHRlbGxzIHVzIHRo ZQ0KKyAgLy8gbnVtYmVyIG9mIG1lZ2FieXRlcy4NCisgIC8vDQorICBQY2lXcml0ZTE2IChEUkFN Q19SRUdJU1RFUl9RMzUgKE1DSF9FWFRfVFNFR19NQiksIE1DSF9FWFRfVFNFR19NQl9RVUVSWSk7 DQorICBFeHRlbmRlZFRzZWdNYnl0ZXMgPSBQY2lSZWFkMTYgKERSQU1DX1JFR0lTVEVSX1EzNSAo TUNIX0VYVF9UU0VHX01CKSk7DQorICBpZiAoRXh0ZW5kZWRUc2VnTWJ5dGVzID09IE1DSF9FWFRf VFNFR19NQl9RVUVSWSkgew0KKyAgICBtUTM1VHNlZ01ieXRlcyA9IFBjZEdldDE2IChQY2RRMzVU c2VnTWJ5dGVzKTsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgREVCVUcgKCgNCisgICAgREVC VUdfSU5GTywNCisgICAgIiVhOiBRRU1VIG9mZmVycyBhbiBleHRlbmRlZCBUU0VHICglZCBNQilc biIsDQorICAgIF9fRlVOQ1RJT05fXywNCisgICAgRXh0ZW5kZWRUc2VnTWJ5dGVzDQorICAgICkp Ow0KKyAgUGNkU3RhdHVzID0gUGNkU2V0MTZTIChQY2RRMzVUc2VnTWJ5dGVzLCBFeHRlbmRlZFRz ZWdNYnl0ZXMpOw0KKyAgQVNTRVJUX1JFVFVSTl9FUlJPUiAoUGNkU3RhdHVzKTsNCisgIG1RMzVU c2VnTWJ5dGVzID0gRXh0ZW5kZWRUc2VnTWJ5dGVzOw0KK30NCisNCisNCitVSU5UMzINCitHZXRT eXN0ZW1NZW1vcnlTaXplQmVsb3c0Z2IgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIFVJTlQ4IENt b3MweDM0Ow0KKyAgVUlOVDggQ21vczB4MzU7DQorDQorICAvLw0KKyAgLy8gQ01PUyAweDM0LzB4 MzUgc3BlY2lmaWVzIHRoZSBzeXN0ZW0gbWVtb3J5IGFib3ZlIDE2IE1CLg0KKyAgLy8gKiBDTU9T KDB4MzUpIGlzIHRoZSBoaWdoIGJ5dGUNCisgIC8vICogQ01PUygweDM0KSBpcyB0aGUgbG93IGJ5 dGUNCisgIC8vICogVGhlIHNpemUgaXMgc3BlY2lmaWVkIGluIDY0a2IgY2h1bmtzDQorICAvLyAq IFNpbmNlIHRoaXMgaXMgbWVtb3J5IGFib3ZlIDE2TUIsIHRoZSAxNk1CIG11c3QgYmUgYWRkZWQN CisgIC8vICAgaW50byB0aGUgY2FsY3VsYXRpb24gdG8gZ2V0IHRoZSB0b3RhbCBtZW1vcnkgc2l6 ZS4NCisgIC8vDQorDQorICBDbW9zMHgzNCA9IChVSU5UOCkgQ21vc1JlYWQ4ICgweDM0KTsNCisg IENtb3MweDM1ID0gKFVJTlQ4KSBDbW9zUmVhZDggKDB4MzUpOw0KKw0KKyAgcmV0dXJuIChVSU5U MzIpICgoKFVJTlROKSgoQ21vczB4MzUgPDwgOCkgKyBDbW9zMHgzNCkgPDwgMTYpICsgU0laRV8x Nk1CKTsNCit9DQorDQorDQorU1RBVElDDQorVUlOVDY0DQorR2V0U3lzdGVtTWVtb3J5U2l6ZUFi b3ZlNGdiICgNCisgICkNCit7DQorICBVSU5UMzIgU2l6ZTsNCisgIFVJTlROICBDbW9zSW5kZXg7 DQorDQorICAvLw0KKyAgLy8gQ01PUyAweDViLTB4NWQgc3BlY2lmaWVzIHRoZSBzeXN0ZW0gbWVt b3J5IGFib3ZlIDRHQiBNQi4NCisgIC8vICogQ01PUygweDVkKSBpcyB0aGUgbW9zdCBzaWduaWZp Y2FudCBzaXplIGJ5dGUNCisgIC8vICogQ01PUygweDVjKSBpcyB0aGUgbWlkZGxlIHNpemUgYnl0 ZQ0KKyAgLy8gKiBDTU9TKDB4NWIpIGlzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBzaXplIGJ5dGUN CisgIC8vICogVGhlIHNpemUgaXMgc3BlY2lmaWVkIGluIDY0a2IgY2h1bmtzDQorICAvLw0KKw0K KyAgU2l6ZSA9IDA7DQorICBmb3IgKENtb3NJbmRleCA9IDB4NWQ7IENtb3NJbmRleCA+PSAweDVi OyBDbW9zSW5kZXgtLSkgew0KKyAgICBTaXplID0gKFVJTlQzMikgKFNpemUgPDwgOCkgKyAoVUlO VDMyKSBDbW9zUmVhZDggKENtb3NJbmRleCk7DQorICB9DQorDQorICByZXR1cm4gTFNoaWZ0VTY0 IChTaXplLCAxNik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgUmV0dXJuIHRoZSBoaWdoZXN0IGFkZHJl c3MgdGhhdCBEWEUgY291bGQgcG9zc2libHkgdXNlLCBwbHVzIG9uZS4NCisqKi8NCitTVEFUSUMN CitVSU5UNjQNCitHZXRGaXJzdE5vbkFkZHJlc3MgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIFVJ TlQ2NCAgICAgICAgICAgICAgIEZpcnN0Tm9uQWRkcmVzczsNCisgIFVJTlQ2NCAgICAgICAgICAg ICAgIFBjaTY0QmFzZSwgUGNpNjRTaXplOw0KKyAgUkVUVVJOX1NUQVRVUyAgICAgICAgUGNkU3Rh dHVzOw0KKw0KKyAgRmlyc3ROb25BZGRyZXNzID0gQkFTRV80R0IgKyBHZXRTeXN0ZW1NZW1vcnlT aXplQWJvdmU0Z2IgKCk7DQorDQorICAvLw0KKyAgLy8gSWYgRFhFIGlzIDMyLWJpdCwgdGhlbiB3 ZSdyZSBkb25lOyBQY2lCdXNEeGUgd2lsbCBkZWdyYWRlIDY0LWJpdCBNTUlPDQorICAvLyByZXNv dXJjZXMgdG8gMzItYml0IGFueXdheS4gU2VlIERlZ3JhZGVSZXNvdXJjZSgpIGluDQorICAvLyAi UGNpUmVzb3VyY2VTdXBwb3J0LmMiLg0KKyAgLy8NCisjaWZkZWYgTURFX0NQVV9JQTMyDQorICBp ZiAoIUZlYXR1cmVQY2RHZXQgKFBjZER4ZUlwbFN3aXRjaFRvTG9uZ01vZGUpKSB7DQorICAgIHJl dHVybiBGaXJzdE5vbkFkZHJlc3M7DQorICB9DQorI2VuZGlmDQorDQorICAvLw0KKyAgLy8gT3Ro ZXJ3aXNlLCBpbiBvcmRlciB0byBjYWxjdWxhdGUgdGhlIGhpZ2hlc3QgYWRkcmVzcyBwbHVzIG9u ZSwgd2UgbXVzdA0KKyAgLy8gY29uc2lkZXIgdGhlIDY0LWJpdCBQQ0kgaG9zdCBhcGVydHVyZSB0 b28uIEZldGNoIHRoZSBkZWZhdWx0IHNpemUuDQorICAvLw0KKyAgUGNpNjRTaXplID0gUGNkR2V0 NjQgKFBjZFBjaU1taW82NFNpemUpOw0KKw0KKyAgaWYgKFBjaTY0U2l6ZSA9PSAwKSB7DQorICAg IGlmIChtQm9vdE1vZGUgIT0gQk9PVF9PTl9TM19SRVNVTUUpIHsNCisgICAgICBERUJVRyAoKERF QlVHX0lORk8sICIlYTogZGlzYWJsaW5nIDY0LWJpdCBQQ0kgaG9zdCBhcGVydHVyZVxuIiwNCisg ICAgICAgIF9fRlVOQ1RJT05fXykpOw0KKyAgICAgIFBjZFN0YXR1cyA9IFBjZFNldDY0UyAoUGNk UGNpTW1pbzY0U2l6ZSwgMCk7DQorICAgICAgQVNTRVJUX1JFVFVSTl9FUlJPUiAoUGNkU3RhdHVz KTsNCisgICAgfQ0KKw0KKyAgICAvLw0KKyAgICAvLyBUaGVyZSdzIG5vdGhpbmcgbW9yZSB0byBk bzsgdGhlIGFtb3VudCBvZiBtZW1vcnkgYWJvdmUgNEdCIGZ1bGx5DQorICAgIC8vIGRldGVybWlu ZXMgdGhlIGhpZ2hlc3QgYWRkcmVzcyBwbHVzIG9uZS4gVGhlIG1lbW9yeSBob3RwbHVnIGFyZWEg KHNlZQ0KKyAgICAvLyBiZWxvdykgcGxheXMgbm8gcm9sZSBmb3IgdGhlIGZpcm13YXJlIGluIHRo aXMgY2FzZS4NCisgICAgLy8NCisgICAgcmV0dXJuIEZpcnN0Tm9uQWRkcmVzczsNCisgIH0NCisN CisgIC8vDQorICAvLyBTZWFCSU9TIGFsaWducyBib3RoIGJvdW5kYXJpZXMgb2YgdGhlIDY0LWJp dCBQQ0kgaG9zdCBhcGVydHVyZSB0byAxR0IsIHNvDQorICAvLyB0aGF0IHRoZSBob3N0IGNhbiBt YXAgaXQgd2l0aCAxR0IgaHVnZXBhZ2VzLiBGb2xsb3cgc3VpdC4NCisgIC8vDQorICBQY2k2NEJh c2UgPSBBTElHTl9WQUxVRSAoRmlyc3ROb25BZGRyZXNzLCAoVUlOVDY0KVNJWkVfMUdCKTsNCisg IFBjaTY0U2l6ZSA9IEFMSUdOX1ZBTFVFIChQY2k2NFNpemUsIChVSU5UNjQpU0laRV8xR0IpOw0K Kw0KKyAgLy8NCisgIC8vIFRoZSA2NC1iaXQgUENJIGhvc3QgYXBlcnR1cmUgc2hvdWxkIGFsc28g YmUgIm5hdHVyYWxseSIgYWxpZ25lZC4gVGhlDQorICAvLyBhbGlnbm1lbnQgaXMgZGV0ZXJtaW5l ZCBieSByb3VuZGluZyB0aGUgc2l6ZSBvZiB0aGUgYXBlcnR1cmUgZG93biB0byB0aGUNCisgIC8v IG5leHQgc21hbGxlciBvciBlcXVhbCBwb3dlciBvZiB0d28uIFRoYXQgaXMsIGFsaWduIHRoZSBh cGVydHVyZSBieSB0aGUNCisgIC8vIGxhcmdlc3QgQkFSIHNpemUgdGhhdCBjYW4gZml0IGludG8g aXQuDQorICAvLw0KKyAgUGNpNjRCYXNlID0gQUxJR05fVkFMVUUgKFBjaTY0QmFzZSwgR2V0UG93 ZXJPZlR3bzY0IChQY2k2NFNpemUpKTsNCisNCisgIGlmIChtQm9vdE1vZGUgIT0gQk9PVF9PTl9T M19SRVNVTUUpIHsNCisgICAgLy8NCisgICAgLy8gVGhlIGNvcmUgUGNpSG9zdEJyaWRnZUR4ZSBk cml2ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCB0aGlzIHJhbmdlIHRvDQorICAgIC8vIHRoZSBH Q0QgbWVtb3J5IHNwYWNlIG1hcCB0aHJvdWdoIG91ciBQY2lIb3N0QnJpZGdlTGliIGluc3RhbmNl OyBoZXJlIHdlDQorICAgIC8vIG9ubHkgbmVlZCB0byBzZXQgdGhlIFBDRHMuDQorICAgIC8vDQor ICAgIFBjZFN0YXR1cyA9IFBjZFNldDY0UyAoUGNkUGNpTW1pbzY0QmFzZSwgUGNpNjRCYXNlKTsN CisgICAgQVNTRVJUX1JFVFVSTl9FUlJPUiAoUGNkU3RhdHVzKTsNCisgICAgUGNkU3RhdHVzID0g UGNkU2V0NjRTIChQY2RQY2lNbWlvNjRTaXplLCBQY2k2NFNpemUpOw0KKyAgICBBU1NFUlRfUkVU VVJOX0VSUk9SIChQY2RTdGF0dXMpOw0KKw0KKyAgICBERUJVRyAoKERFQlVHX0lORk8sICIlYTog UGNpNjRCYXNlPTB4JUx4IFBjaTY0U2l6ZT0weCVMeFxuIiwNCisgICAgICBfX0ZVTkNUSU9OX18s IFBjaTY0QmFzZSwgUGNpNjRTaXplKSk7DQorICB9DQorDQorICAvLw0KKyAgLy8gVGhlIHVzZWZ1 bCBhZGRyZXNzIHNwYWNlIGVuZHMgd2l0aCB0aGUgNjQtYml0IFBDSSBob3N0IGFwZXJ0dXJlLg0K KyAgLy8NCisgIEZpcnN0Tm9uQWRkcmVzcyA9IFBjaTY0QmFzZSArIFBjaTY0U2l6ZTsNCisgIHJl dHVybiBGaXJzdE5vbkFkZHJlc3M7DQorfQ0KKw0KKw0KKy8qKg0KKyAgSW5pdGlhbGl6ZSB0aGUg bVBoeXNNZW1BZGRyZXNzV2lkdGggdmFyaWFibGUsIGJhc2VkIG9uIGd1ZXN0IFJBTSBzaXplLg0K KyoqLw0KK1ZPSUQNCitBZGRyZXNzV2lkdGhJbml0aWFsaXphdGlvbiAoDQorICBWT0lEDQorICAp DQorew0KKyAgVUlOVDY0IEZpcnN0Tm9uQWRkcmVzczsNCisNCisgIC8vDQorICAvLyBBcyBndWVz dC1waHlzaWNhbCBtZW1vcnkgc2l6ZSBncm93cywgdGhlIHBlcm1hbmVudCBQRUkgUkFNIHJlcXVp cmVtZW50cw0KKyAgLy8gYXJlIGRvbWluYXRlZCBieSB0aGUgaWRlbnRpdHktbWFwcGluZyBwYWdl IHRhYmxlcyBidWlsdCBieSB0aGUgRFhFIElQTC4NCisgIC8vIFRoZSBEWEwgSVBMIGtleXMgb2Zm IG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMgYWR2ZXJ0aXplZCBpbiB0aGUgQ1BVDQorICAv LyBIT0IuIFRvIGNvbnNlcnZlIG1lbW9yeSwgd2UgY2FsY3VsYXRlIHRoZSBtaW5pbXVtIGFkZHJl c3Mgd2lkdGggaGVyZS4NCisgIC8vDQorICBGaXJzdE5vbkFkZHJlc3MgICAgICA9IEdldEZpcnN0 Tm9uQWRkcmVzcyAoKTsNCisgIG1QaHlzTWVtQWRkcmVzc1dpZHRoID0gKFVJTlQ4KUhpZ2hCaXRT ZXQ2NCAoRmlyc3ROb25BZGRyZXNzKTsNCisNCisgIC8vDQorICAvLyBJZiBGaXJzdE5vbkFkZHJl c3MgaXMgbm90IGFuIGludGVncmFsIHBvd2VyIG9mIHR3bywgdGhlbiB3ZSBuZWVkIGFuDQorICAv LyBhZGRpdGlvbmFsIGJpdC4NCisgIC8vDQorICBpZiAoKEZpcnN0Tm9uQWRkcmVzcyAmIChGaXJz dE5vbkFkZHJlc3MgLSAxKSkgIT0gMCkgew0KKyAgICArK21QaHlzTWVtQWRkcmVzc1dpZHRoOw0K KyAgfQ0KKw0KKyAgLy8NCisgIC8vIFRoZSBtaW5pbXVtIGFkZHJlc3Mgd2lkdGggaXMgMzYgKGNv dmVycyB1cCB0byBhbmQgZXhjbHVkaW5nIDY0IEdCLCB3aGljaA0KKyAgLy8gaXMgdGhlIG1heGlt dW0gZm9yIElhMzIgKyBQQUUpLiBUaGUgdGhlb3JldGljYWwgYXJjaGl0ZWN0dXJlIG1heGltdW0g Zm9yDQorICAvLyBYNjQgbG9uZyBtb2RlIGlzIDUyIGJpdHMsIGJ1dCB0aGUgRFhFIElQTCBjbGFt cHMgdGhhdCBkb3duIHRvIDQ4IGJpdHMuIFdlDQorICAvLyBjYW4gc2ltcGx5IGFzc2VydCB0aGF0 IGhlcmUsIHNpbmNlIDQ4IGJpdHMgYXJlIGdvb2QgZW5vdWdoIGZvciAyNTYgVEIuDQorICAvLw0K KyAgaWYgKG1QaHlzTWVtQWRkcmVzc1dpZHRoIDw9IDM2KSB7DQorICAgIG1QaHlzTWVtQWRkcmVz c1dpZHRoID0gMzY7DQorICB9DQorICBBU1NFUlQgKG1QaHlzTWVtQWRkcmVzc1dpZHRoIDw9IDQ4 KTsNCit9DQorDQorDQorLyoqDQorICBDYWxjdWxhdGUgdGhlIGNhcCBmb3IgdGhlIHBlcm1hbmVu dCBQRUkgbWVtb3J5Lg0KKyoqLw0KK1NUQVRJQw0KK1VJTlQzMg0KK0dldFBlaU1lbW9yeUNhcCAo DQorICBWT0lEDQorICApDQorew0KKyAgQk9PTEVBTiBQYWdlMUdTdXBwb3J0Ow0KKyAgVUlOVDMy ICBSZWdFYXg7DQorICBVSU5UMzIgIFJlZ0VkeDsNCisgIFVJTlQzMiAgUG1sNEVudHJpZXM7DQor ICBVSU5UMzIgIFBkcEVudHJpZXM7DQorICBVSU5UTiAgIFRvdGFsUGFnZXM7DQorDQorICAvLw0K KyAgLy8gSWYgRFhFIGlzIDMyLWJpdCwgdGhlbiBqdXN0IHJldHVybiB0aGUgdHJhZGl0aW9uYWwg NjQgTUIgY2FwLg0KKyAgLy8NCisjaWZkZWYgTURFX0NQVV9JQTMyDQorICBpZiAoIUZlYXR1cmVQ Y2RHZXQgKFBjZER4ZUlwbFN3aXRjaFRvTG9uZ01vZGUpKSB7DQorICAgIHJldHVybiBTSVpFXzY0 TUI7DQorICB9DQorI2VuZGlmDQorDQorICAvLw0KKyAgLy8gRGVwZW5kZW50IG9uIHBoeXNpY2Fs IGFkZHJlc3Mgd2lkdGgsIFBFSSBtZW1vcnkgYWxsb2NhdGlvbnMgY2FuIGJlDQorICAvLyBkb21p bmF0ZWQgYnkgdGhlIHBhZ2UgdGFibGVzIGJ1aWx0IGZvciA2NC1iaXQgRFhFLiBTbyB3ZSBrZXkg dGhlIGNhcCBvZmYNCisgIC8vIG9mIHRob3NlLiBUaGUgY29kZSBiZWxvdyBpcyBiYXNlZCBvbiBD cmVhdGVJZGVudGl0eU1hcHBpbmdQYWdlVGFibGVzKCkgaW4NCisgIC8vICJNZGVNb2R1bGVQa2cv Q29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFsTWVtb3J5LmMiLg0KKyAgLy8NCisgIFBhZ2UxR1N1 cHBvcnQgPSBGQUxTRTsNCisgIGlmIChQY2RHZXRCb29sIChQY2RVc2UxR1BhZ2VUYWJsZSkpIHsN CisgICAgQXNtQ3B1aWQgKDB4ODAwMDAwMDAsICZSZWdFYXgsIE5VTEwsIE5VTEwsIE5VTEwpOw0K KyAgICBpZiAoUmVnRWF4ID49IDB4ODAwMDAwMDEpIHsNCisgICAgICBBc21DcHVpZCAoMHg4MDAw MDAwMSwgTlVMTCwgTlVMTCwgTlVMTCwgJlJlZ0VkeCk7DQorICAgICAgaWYgKChSZWdFZHggJiBC SVQyNikgIT0gMCkgew0KKyAgICAgICAgUGFnZTFHU3VwcG9ydCA9IFRSVUU7DQorICAgICAgfQ0K KyAgICB9DQorICB9DQorDQorICBpZiAobVBoeXNNZW1BZGRyZXNzV2lkdGggPD0gMzkpIHsNCisg ICAgUG1sNEVudHJpZXMgPSAxOw0KKyAgICBQZHBFbnRyaWVzID0gMSA8PCAobVBoeXNNZW1BZGRy ZXNzV2lkdGggLSAzMCk7DQorICAgIEFTU0VSVCAoUGRwRW50cmllcyA8PSAweDIwMCk7DQorICB9 IGVsc2Ugew0KKyAgICBQbWw0RW50cmllcyA9IDEgPDwgKG1QaHlzTWVtQWRkcmVzc1dpZHRoIC0g MzkpOw0KKyAgICBBU1NFUlQgKFBtbDRFbnRyaWVzIDw9IDB4MjAwKTsNCisgICAgUGRwRW50cmll cyA9IDUxMjsNCisgIH0NCisNCisgIFRvdGFsUGFnZXMgPSBQYWdlMUdTdXBwb3J0ID8gUG1sNEVu dHJpZXMgKyAxIDoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBkcEVudHJpZXMg KyAxKSAqIFBtbDRFbnRyaWVzICsgMTsNCisgIEFTU0VSVCAoVG90YWxQYWdlcyA8PSAweDQwMjAx KTsNCisNCisgIC8vDQorICAvLyBBZGQgNjQgTUIgZm9yIG1pc2NlbGxhbmVvdXMgYWxsb2NhdGlv bnMuIE5vdGUgdGhhdCBmb3INCisgIC8vIG1QaHlzTWVtQWRkcmVzc1dpZHRoIHZhbHVlcyBjbG9z ZSB0byAzNiwgdGhlIGNhcCB3aWxsIGFjdHVhbGx5IGJlDQorICAvLyBkb21pbmF0ZWQgYnkgdGhp cyBpbmNyZW1lbnQuDQorICAvLw0KKyAgcmV0dXJuIChVSU5UMzIpKEVGSV9QQUdFU19UT19TSVpF IChUb3RhbFBhZ2VzKSArIFNJWkVfNjRNQik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgUHVibGlzaCBQ RUkgY29yZSBtZW1vcnkNCisNCisgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgIFRoZSBQRUlNIGlu aXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4NCisNCisqKi8NCitFRklfU1RBVFVTDQorUHVibGlzaFBl aU1lbW9yeSAoDQorICBWT0lEDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlCYXNlOw0K KyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVNpemU7DQorICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgTG93ZXJNZW1vcnlTaXplOw0KKyAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICAgIFBlaU1lbW9yeUNhcDsNCisNCisgIExvd2VyTWVtb3J5U2l6ZSA9IEdldFN5c3Rl bU1lbW9yeVNpemVCZWxvdzRnYiAoKTsNCisNCisgIGlmIChtQm9vdE1vZGUgPT0gQk9PVF9PTl9T M19SRVNVTUUpIHsNCisgICAgTWVtb3J5QmFzZSA9IG1TM0FjcGlSZXNlcnZlZE1lbW9yeUJhc2U7 DQorICAgIE1lbW9yeVNpemUgPSBtUzNBY3BpUmVzZXJ2ZWRNZW1vcnlTaXplOw0KKyAgfSBlbHNl IHsNCisgICAgUGVpTWVtb3J5Q2FwID0gR2V0UGVpTWVtb3J5Q2FwICgpOw0KKyAgICBERUJVRyAo KERFQlVHX0lORk8sICIlYTogbVBoeXNNZW1BZGRyZXNzV2lkdGg9JWQgUGVpTWVtb3J5Q2FwPSV1 IEtCXG4iLA0KKyAgICAgIF9fRlVOQ1RJT05fXywgbVBoeXNNZW1BZGRyZXNzV2lkdGgsIFBlaU1l bW9yeUNhcCA+PiAxMCkpOw0KKw0KKyAgICAvLw0KKyAgICAvLyBEZXRlcm1pbmUgdGhlIHJhbmdl IG9mIG1lbW9yeSB0byB1c2UgZHVyaW5nIFBFSQ0KKyAgICAvLw0KKyAgICBNZW1vcnlCYXNlID0N CisgICAgICBQY2RHZXQzMiAoUGNkT3ZtZkR4ZU1lbUZ2QmFzZSkgKyBQY2RHZXQzMiAoUGNkT3Zt ZkR4ZU1lbUZ2U2l6ZSk7DQorICAgIE1lbW9yeVNpemUgPSBMb3dlck1lbW9yeVNpemUgLSBNZW1v cnlCYXNlOw0KKyAgICBpZiAoTWVtb3J5U2l6ZSA+IFBlaU1lbW9yeUNhcCkgew0KKyAgICAgIE1l bW9yeUJhc2UgPSBMb3dlck1lbW9yeVNpemUgLSBQZWlNZW1vcnlDYXA7DQorICAgICAgTWVtb3J5 U2l6ZSA9IFBlaU1lbW9yeUNhcDsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIFB1Ymxp c2ggdGhpcyBtZW1vcnkgdG8gdGhlIFBFSSBDb3JlDQorICAvLw0KKyAgU3RhdHVzID0gUHVibGlz aFN5c3RlbU1lbW9yeShNZW1vcnlCYXNlLCBNZW1vcnlTaXplKTsNCisgIEFTU0VSVF9FRklfRVJS T1IgKFN0YXR1cyk7DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCisvKioNCisgIFB1 Ymxpc2ggc3lzdGVtIFJBTSBhbmQgcmVzZXJ2ZSBtZW1vcnkgcmVnaW9ucw0KKw0KKyoqLw0KK1ZP SUQNCitJbml0aWFsaXplUmFtUmVnaW9ucyAoDQorICBWT0lEDQorICApDQorew0KKyAgWGVuUHVi bGlzaFJhbVJlZ2lvbnMgKCk7DQorDQorICBpZiAobUJvb3RNb2RlICE9IEJPT1RfT05fUzNfUkVT VU1FKSB7DQorICAgIC8vDQorICAgIC8vIFJlc2VydmUgdGhlIGxvY2sgYm94IHN0b3JhZ2UgYXJl YQ0KKyAgICAvLw0KKyAgICAvLyBTaW5jZSB0aGlzIG1lbW9yeSByYW5nZSB3aWxsIGJlIHVzZWQg b24gUzMgcmVzdW1lLCBpdCBtdXN0IGJlDQorICAgIC8vIHJlc2VydmVkIGFzIEFDUEkgTlZTLg0K KyAgICAvLw0KKyAgICAvLyBJZiBTMyBpcyB1bnN1cHBvcnRlZCwgdGhlbiB2YXJpb3VzIGRyaXZl cnMgbWlnaHQgc3RpbGwgd3JpdGUgdG8gdGhlDQorICAgIC8vIExvY2tCb3ggYXJlYS4gV2Ugb3Vn aHQgdG8gcHJldmVudCBEWEUgZnJvbSBzZXJ2aW5nIGFsbG9jYXRpb24gcmVxdWVzdHMNCisgICAg Ly8gc3VjaCB0aGF0IHRoZXkgd291bGQgb3ZlcmxhcCB0aGUgTG9ja0JveCBzdG9yYWdlLg0KKyAg ICAvLw0KKyAgICBaZXJvTWVtICgNCisgICAgICAoVk9JRCopKFVJTlROKSBQY2RHZXQzMiAoUGNk T3ZtZkxvY2tCb3hTdG9yYWdlQmFzZSksDQorICAgICAgKFVJTlROKSBQY2RHZXQzMiAoUGNkT3Zt ZkxvY2tCb3hTdG9yYWdlU2l6ZSkNCisgICAgICApOw0KKyAgICBCdWlsZE1lbW9yeUFsbG9jYXRp b25Ib2IgKA0KKyAgICAgIChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pIFBjZEdldDMyIChQ Y2RPdm1mTG9ja0JveFN0b3JhZ2VCYXNlKSwNCisgICAgICAoVUlOVDY0KShVSU5UTikgUGNkR2V0 MzIgKFBjZE92bWZMb2NrQm94U3RvcmFnZVNpemUpLA0KKyAgICAgIEVmaUJvb3RTZXJ2aWNlc0Rh dGENCisgICAgICApOw0KKyAgfQ0KK30NCmRpZmYgLS1naXQgYS9Pdm1mUGtnL1hlblBsYXRmb3Jt UGVpL1BsYXRmb3JtLmMgYi9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL1BsYXRmb3JtLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTgwOWVhZGIwYgotLS0gL2Rldi9udWxs CisrKyBiL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvUGxhdGZvcm0uYwpAQCAtMCwwICsxLDQ0NCBA QAorLyoqQGZpbGUNCisgIFBsYXRmb3JtIFBFSSBkcml2ZXINCisNCisgIENvcHlyaWdodCAoYykg MjAwNiAtIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N CisgIENvcHlyaWdodCAoYykgMjAxMSwgQW5kcmVpIFdhcmtlbnRpbiA8YW5kcmVpd0Btb3Rvcm9s YS5jb20+DQorICBDb3B5cmlnaHQgKGMpIDIwMTksIENpdHJpeCBTeXN0ZW1zLCBJbmMuDQorDQor ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KKyoqLw0K Kw0KKy8vDQorLy8gVGhlIHBhY2thZ2UgbGV2ZWwgaGVhZGVyIGZpbGVzIHRoaXMgbW9kdWxlIHVz ZXMNCisvLw0KKyNpbmNsdWRlIDxQaVBlaS5oPg0KKw0KKy8vDQorLy8gVGhlIExpYnJhcnkgY2xh c3NlcyB0aGlzIG1vZHVsZSBjb25zdW1lcw0KKy8vDQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxp Yi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkv SG9iTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvSW9MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFy eS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQor I2luY2x1ZGUgPExpYnJhcnkvUGNpTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGVpbUVudHJ5 UG9pbnQuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QZWlTZXJ2aWNlc0xpYi5oPg0KKyNpbmNsdWRl IDxMaWJyYXJ5L1Jlc291cmNlUHVibGljYXRpb25MaWIuaD4NCisjaW5jbHVkZSA8R3VpZC9NZW1v cnlUeXBlSW5mb3JtYXRpb24uaD4NCisjaW5jbHVkZSA8UHBpL01hc3RlckJvb3RNb2RlLmg+DQor I2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvUGNpMjIuaD4NCisjaW5jbHVkZSA8T3ZtZlBsYXRm b3Jtcy5oPg0KKw0KKyNpbmNsdWRlICJQbGF0Zm9ybS5oIg0KKyNpbmNsdWRlICJDbW9zLmgiDQor DQorRUZJX01FTU9SWV9UWVBFX0lORk9STUFUSU9OIG1EZWZhdWx0TWVtb3J5VHlwZUluZm9ybWF0 aW9uW10gPSB7DQorICB7IEVmaUFDUElNZW1vcnlOVlMsICAgICAgIDB4MDA0IH0sDQorICB7IEVm aUFDUElSZWNsYWltTWVtb3J5LCAgIDB4MDA4IH0sDQorICB7IEVmaVJlc2VydmVkTWVtb3J5VHlw ZSwgIDB4MDA0IH0sDQorICB7IEVmaVJ1bnRpbWVTZXJ2aWNlc0RhdGEsIDB4MDI0IH0sDQorICB7 IEVmaVJ1bnRpbWVTZXJ2aWNlc0NvZGUsIDB4MDMwIH0sDQorICB7IEVmaUJvb3RTZXJ2aWNlc0Nv ZGUsICAgIDB4MTgwIH0sDQorICB7IEVmaUJvb3RTZXJ2aWNlc0RhdGEsICAgIDB4RjAwIH0sDQor ICB7IEVmaU1heE1lbW9yeVR5cGUsICAgICAgIDB4MDAwIH0NCit9Ow0KKw0KKw0KK0VGSV9QRUlf UFBJX0RFU0NSSVBUT1IgICBtUHBpQm9vdE1vZGVbXSA9IHsNCisgIHsNCisgICAgRUZJX1BFSV9Q UElfREVTQ1JJUFRPUl9QUEkgfCBFRklfUEVJX1BQSV9ERVNDUklQVE9SX1RFUk1JTkFURV9MSVNU LA0KKyAgICAmZ0VmaVBlaU1hc3RlckJvb3RNb2RlUHBpR3VpZCwNCisgICAgTlVMTA0KKyAgfQ0K K307DQorDQorDQorVUlOVDE2IG1Ib3N0QnJpZGdlRGV2SWQ7DQorDQorRUZJX0JPT1RfTU9ERSBt Qm9vdE1vZGUgPSBCT09UX1dJVEhfRlVMTF9DT05GSUdVUkFUSU9OOw0KKw0KKw0KK1ZPSUQNCitB ZGRJb01lbW9yeUJhc2VTaXplSG9iICgNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBN ZW1vcnlCYXNlLA0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVNpemUNCisg ICkNCit7DQorICBCdWlsZFJlc291cmNlRGVzY3JpcHRvckhvYiAoDQorICAgIEVGSV9SRVNPVVJD RV9NRU1PUllfTUFQUEVEX0lPLA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfUFJFU0VO VCAgICAgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfSU5JVElBTElaRUQgfA0KKyAg ICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfVU5DQUNIRUFCTEUgfA0KKyAgICAgIEVGSV9SRVNP VVJDRV9BVFRSSUJVVEVfVEVTVEVELA0KKyAgICBNZW1vcnlCYXNlLA0KKyAgICBNZW1vcnlTaXpl DQorICAgICk7DQorfQ0KKw0KK1ZPSUQNCitBZGRSZXNlcnZlZE1lbW9yeUJhc2VTaXplSG9iICgN CisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlCYXNlLA0KKyAgVUlOVDY0ICAg ICAgICAgICAgICAgICAgICAgIE1lbW9yeVNpemUsDQorICBCT09MRUFOICAgICAgICAgICAgICAg ICAgICAgQ2FjaGVhYmxlDQorICApDQorew0KKyAgQnVpbGRSZXNvdXJjZURlc2NyaXB0b3JIb2Ig KA0KKyAgICBFRklfUkVTT1VSQ0VfTUVNT1JZX1JFU0VSVkVELA0KKyAgICAgIEVGSV9SRVNPVVJD RV9BVFRSSUJVVEVfUFJFU0VOVCAgICAgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVf SU5JVElBTElaRUQgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfVU5DQUNIRUFCTEUg fA0KKyAgICAgIChDYWNoZWFibGUgPw0KKyAgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1dS SVRFX0NPTUJJTkVBQkxFIHwNCisgICAgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9XUklURV9U SFJPVUdIX0NBQ0hFQUJMRSB8DQorICAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfV1JJVEVf QkFDS19DQUNIRUFCTEUgOg0KKyAgICAgICAwDQorICAgICAgICkgfA0KKyAgICAgIEVGSV9SRVNP VVJDRV9BVFRSSUJVVEVfVEVTVEVELA0KKyAgICBNZW1vcnlCYXNlLA0KKyAgICBNZW1vcnlTaXpl DQorICAgICk7DQorfQ0KKw0KK1ZPSUQNCitBZGRJb01lbW9yeVJhbmdlSG9iICgNCisgIEVGSV9Q SFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlCYXNlLA0KKyAgRUZJX1BIWVNJQ0FMX0FERFJF U1MgICAgICAgIE1lbW9yeUxpbWl0DQorICApDQorew0KKyAgQWRkSW9NZW1vcnlCYXNlU2l6ZUhv YiAoTWVtb3J5QmFzZSwgKFVJTlQ2NCkoTWVtb3J5TGltaXQgLSBNZW1vcnlCYXNlKSk7DQorfQ0K Kw0KKw0KK1ZPSUQNCitBZGRNZW1vcnlCYXNlU2l6ZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQURE UkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICBN ZW1vcnlTaXplDQorICApDQorew0KKyAgQnVpbGRSZXNvdXJjZURlc2NyaXB0b3JIb2IgKA0KKyAg ICBFRklfUkVTT1VSQ0VfU1lTVEVNX01FTU9SWSwNCisgICAgICBFRklfUkVTT1VSQ0VfQVRUUklC VVRFX1BSRVNFTlQgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfSU5JVElBTElaRUQg fA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfVU5DQUNIRUFCTEUgfA0KKyAgICAgIEVG SV9SRVNPVVJDRV9BVFRSSUJVVEVfV1JJVEVfQ09NQklORUFCTEUgfA0KKyAgICAgIEVGSV9SRVNP VVJDRV9BVFRSSUJVVEVfV1JJVEVfVEhST1VHSF9DQUNIRUFCTEUgfA0KKyAgICAgIEVGSV9SRVNP VVJDRV9BVFRSSUJVVEVfV1JJVEVfQkFDS19DQUNIRUFCTEUgfA0KKyAgICAgIEVGSV9SRVNPVVJD RV9BVFRSSUJVVEVfVEVTVEVELA0KKyAgICBNZW1vcnlCYXNlLA0KKyAgICBNZW1vcnlTaXplDQor ICAgICk7DQorfQ0KKw0KKw0KK1ZPSUQNCitBZGRNZW1vcnlSYW5nZUhvYiAoDQorICBFRklfUEhZ U0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNT ICAgICAgICBNZW1vcnlMaW1pdA0KKyAgKQ0KK3sNCisgIEFkZE1lbW9yeUJhc2VTaXplSG9iIChN ZW1vcnlCYXNlLCAoVUlOVDY0KShNZW1vcnlMaW1pdCAtIE1lbW9yeUJhc2UpKTsNCit9DQorDQor DQorVk9JRA0KK01lbU1hcEluaXRpYWxpemF0aW9uICgNCisgIFZPSUQNCisgICkNCit7DQorICBV SU5UNjQgICAgICAgIFBjaUlvQmFzZTsNCisgIFVJTlQ2NCAgICAgICAgUGNpSW9TaXplOw0KKyAg UkVUVVJOX1NUQVRVUyBQY2RTdGF0dXM7DQorDQorICBQY2lJb0Jhc2UgPSAweEMwMDA7DQorICBQ Y2lJb1NpemUgPSAweDQwMDA7DQorDQorICAvLw0KKyAgLy8gQ3JlYXRlIE1lbW9yeSBUeXBlIElu Zm9ybWF0aW9uIEhPQg0KKyAgLy8NCisgIEJ1aWxkR3VpZERhdGFIb2IgKA0KKyAgICAmZ0VmaU1l bW9yeVR5cGVJbmZvcm1hdGlvbkd1aWQsDQorICAgIG1EZWZhdWx0TWVtb3J5VHlwZUluZm9ybWF0 aW9uLA0KKyAgICBzaXplb2YobURlZmF1bHRNZW1vcnlUeXBlSW5mb3JtYXRpb24pDQorICAgICk7 DQorDQorICAvLw0KKyAgLy8gVmlkZW8gbWVtb3J5ICsgTGVnYWN5IEJJT1MgcmVnaW9uDQorICAv Lw0KKyAgQWRkSW9NZW1vcnlSYW5nZUhvYiAoMHgwQTAwMDAsIEJBU0VfMU1CKTsNCisNCisgIC8v DQorICAvLyBBZGQgUENJIElPIFBvcnQgc3BhY2UgYXZhaWxhYmxlIGZvciBQQ0kgcmVzb3VyY2Ug YWxsb2NhdGlvbnMuDQorICAvLw0KKyAgQnVpbGRSZXNvdXJjZURlc2NyaXB0b3JIb2IgKA0KKyAg ICBFRklfUkVTT1VSQ0VfSU8sDQorICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfUFJFU0VOVCAg ICAgfA0KKyAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX0lOSVRJQUxJWkVELA0KKyAgICBQY2lJ b0Jhc2UsDQorICAgIFBjaUlvU2l6ZQ0KKyAgICApOw0KKyAgUGNkU3RhdHVzID0gUGNkU2V0NjRT IChQY2RQY2lJb0Jhc2UsIFBjaUlvQmFzZSk7DQorICBBU1NFUlRfUkVUVVJOX0VSUk9SIChQY2RT dGF0dXMpOw0KKyAgUGNkU3RhdHVzID0gUGNkU2V0NjRTIChQY2RQY2lJb1NpemUsIFBjaUlvU2l6 ZSk7DQorICBBU1NFUlRfUkVUVVJOX0VSUk9SIChQY2RTdGF0dXMpOw0KK30NCisNCitWT0lEDQor UGNpRXhCYXJJbml0aWFsaXphdGlvbiAoDQorICBWT0lEDQorICApDQorew0KKyAgdW5pb24gew0K KyAgICBVSU5UNjQgVWludDY0Ow0KKyAgICBVSU5UMzIgVWludDMyWzJdOw0KKyAgfSBQY2lFeEJh ckJhc2U7DQorDQorICAvLw0KKyAgLy8gV2Ugb25seSBzdXBwb3J0IHRoZSAyNTZNQiBzaXplIGZv ciB0aGUgTU1DT05GSUcgYXJlYToNCisgIC8vIDI1NiBidXNlcyAqIDMyIGRldmljZXMgKiA4IGZ1 bmN0aW9ucyAqIDQwOTYgYnl0ZXMgY29uZmlnIHNwYWNlLg0KKyAgLy8NCisgIC8vIFRoZSBtYXNr cyB1c2VkIGJlbG93IGVuZm9yY2UgdGhlIFEzNSByZXF1aXJlbWVudHMgdGhhdCB0aGUgTU1DT05G SUcgYXJlYQ0KKyAgLy8gYmUgKGEpIGNvcnJlY3RseSBhbGlnbmVkIC0tIGhlcmUgYXQgMjU2IE1C IC0tLCAoYikgbG9jYXRlZCB1bmRlciA2NCBHQi4NCisgIC8vDQorICAvLyBOb3RlIHRoYXQgKGIp IGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pbXVtIGFkZHJlc3Mgd2lkdGggd2UgaGF2ZQ0KKyAg Ly8gZGV0ZXJtaW5lZCBpbiBBZGRyZXNzV2lkdGhJbml0aWFsaXphdGlvbigpLCBpLmUuLCAzNiBi aXRzLCB3aWxsIHN1ZmZpY2UNCisgIC8vIGZvciBEWEUncyBwYWdlIHRhYmxlcyB0byBjb3ZlciB0 aGUgTU1DT05GSUcgYXJlYS4NCisgIC8vDQorICBQY2lFeEJhckJhc2UuVWludDY0ID0gRml4ZWRQ Y2RHZXQ2NCAoUGNkUGNpRXhwcmVzc0Jhc2VBZGRyZXNzKTsNCisgIEFTU0VSVCAoKFBjaUV4QmFy QmFzZS5VaW50MzJbMV0gJiBNQ0hfUENJRVhCQVJfSElHSE1BU0spID09IDApOw0KKyAgQVNTRVJU ICgoUGNpRXhCYXJCYXNlLlVpbnQzMlswXSAmIE1DSF9QQ0lFWEJBUl9MT1dNQVNLKSA9PSAwKTsN CisNCisgIC8vDQorICAvLyBDbGVhciB0aGUgUENJRVhCQVJFTiBiaXQgZmlyc3QsIGJlZm9yZSBw cm9ncmFtbWluZyB0aGUgaGlnaCByZWdpc3Rlci4NCisgIC8vDQorICBQY2lXcml0ZTMyIChEUkFN Q19SRUdJU1RFUl9RMzUgKE1DSF9QQ0lFWEJBUl9MT1cpLCAwKTsNCisNCisgIC8vDQorICAvLyBQ cm9ncmFtIHRoZSBoaWdoIHJlZ2lzdGVyLiBUaGVuIHByb2dyYW0gdGhlIGxvdyByZWdpc3Rlciwg c2V0dGluZyB0aGUNCisgIC8vIE1NQ09ORklHIGFyZWEgc2l6ZSBhbmQgZW5hYmxpbmcgZGVjb2Rp bmcgYXQgb25jZS4NCisgIC8vDQorICBQY2lXcml0ZTMyIChEUkFNQ19SRUdJU1RFUl9RMzUgKE1D SF9QQ0lFWEJBUl9ISUdIKSwgUGNpRXhCYXJCYXNlLlVpbnQzMlsxXSk7DQorICBQY2lXcml0ZTMy ICgNCisgICAgRFJBTUNfUkVHSVNURVJfUTM1IChNQ0hfUENJRVhCQVJfTE9XKSwNCisgICAgUGNp RXhCYXJCYXNlLlVpbnQzMlswXSB8IE1DSF9QQ0lFWEJBUl9CVVNfRkYgfCBNQ0hfUENJRVhCQVJf RU4NCisgICAgKTsNCit9DQorDQorVk9JRA0KK01pc2NJbml0aWFsaXphdGlvbiAoDQorICBWT0lE DQorICApDQorew0KKyAgVUlOVE4gICAgICAgICBQbUNtZDsNCisgIFVJTlROICAgICAgICAgUG1i YTsNCisgIFVJTlQzMiAgICAgICAgUG1iYUFuZFZhbDsNCisgIFVJTlQzMiAgICAgICAgUG1iYU9y VmFsOw0KKyAgVUlOVE4gICAgICAgICBBY3BpQ3RsUmVnOw0KKyAgVUlOVDggICAgICAgICBBY3Bp RW5CaXQ7DQorICBSRVRVUk5fU1RBVFVTIFBjZFN0YXR1czsNCisNCisgIC8vDQorICAvLyBEaXNh YmxlIEEyMCBNYXNrDQorICAvLw0KKyAgSW9PcjggKDB4OTIsIEJJVDEpOw0KKw0KKyAgLy8NCisg IC8vIEJ1aWxkIHRoZSBDUFUgSE9CIHdpdGggZ3Vlc3QgUkFNIHNpemUgZGVwZW5kZW50IGFkZHJl c3Mgd2lkdGggYW5kIDE2LWJpdHMNCisgIC8vIG9mIElPIHNwYWNlLiAoU2lkZSBub3RlOiB1bmxp a2Ugb3RoZXIgSE9CcywgdGhlIENQVSBIT0IgaXMgbmVlZGVkIGR1cmluZw0KKyAgLy8gUzMgcmVz dW1lIGFzIHdlbGwsIHNvIHdlIGJ1aWxkIGl0IHVuY29uZGl0aW9uYWxseS4pDQorICAvLw0KKyAg QnVpbGRDcHVIb2IgKG1QaHlzTWVtQWRkcmVzc1dpZHRoLCAxNik7DQorDQorICAvLw0KKyAgLy8g RGV0ZXJtaW5lIHBsYXRmb3JtIHR5cGUgYW5kIHNhdmUgSG9zdCBCcmlkZ2UgRElEIHRvIFBDRA0K KyAgLy8NCisgIHN3aXRjaCAobUhvc3RCcmlkZ2VEZXZJZCkgew0KKyAgICBjYXNlIElOVEVMXzgy NDQxX0RFVklDRV9JRDoNCisgICAgICBQbUNtZCAgICAgID0gUE9XRVJfTUdNVF9SRUdJU1RFUl9Q SUlYNCAoUENJX0NPTU1BTkRfT0ZGU0VUKTsNCisgICAgICBQbWJhICAgICAgID0gUE9XRVJfTUdN VF9SRUdJU1RFUl9QSUlYNCAoUElJWDRfUE1CQSk7DQorICAgICAgUG1iYUFuZFZhbCA9IH4oVUlO VDMyKVBJSVg0X1BNQkFfTUFTSzsNCisgICAgICBQbWJhT3JWYWwgID0gUElJWDRfUE1CQV9WQUxV RTsNCisgICAgICBBY3BpQ3RsUmVnID0gUE9XRVJfTUdNVF9SRUdJU1RFUl9QSUlYNCAoUElJWDRf UE1SRUdNSVNDKTsNCisgICAgICBBY3BpRW5CaXQgID0gUElJWDRfUE1SRUdNSVNDX1BNSU9TRTsN CisgICAgICBicmVhazsNCisgICAgY2FzZSBJTlRFTF9RMzVfTUNIX0RFVklDRV9JRDoNCisgICAg ICBQbUNtZCAgICAgID0gUE9XRVJfTUdNVF9SRUdJU1RFUl9RMzUgKFBDSV9DT01NQU5EX09GRlNF VCk7DQorICAgICAgUG1iYSAgICAgICA9IFBPV0VSX01HTVRfUkVHSVNURVJfUTM1IChJQ0g5X1BN QkFTRSk7DQorICAgICAgUG1iYUFuZFZhbCA9IH4oVUlOVDMyKUlDSDlfUE1CQVNFX01BU0s7DQor ICAgICAgUG1iYU9yVmFsICA9IElDSDlfUE1CQVNFX1ZBTFVFOw0KKyAgICAgIEFjcGlDdGxSZWcg PSBQT1dFUl9NR01UX1JFR0lTVEVSX1EzNSAoSUNIOV9BQ1BJX0NOVEwpOw0KKyAgICAgIEFjcGlF bkJpdCAgPSBJQ0g5X0FDUElfQ05UTF9BQ1BJX0VOOw0KKyAgICAgIGJyZWFrOw0KKyAgICBkZWZh dWx0Og0KKyAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogVW5rbm93biBIb3N0IEJyaWRn ZSBEZXZpY2UgSUQ6IDB4JTA0eFxuIiwNCisgICAgICAgIF9fRlVOQ1RJT05fXywgbUhvc3RCcmlk Z2VEZXZJZCkpOw0KKyAgICAgIEFTU0VSVCAoRkFMU0UpOw0KKyAgICAgIHJldHVybjsNCisgIH0N CisgIFBjZFN0YXR1cyA9IFBjZFNldDE2UyAoUGNkT3ZtZkhvc3RCcmlkZ2VQY2lEZXZJZCwgbUhv c3RCcmlkZ2VEZXZJZCk7DQorICBBU1NFUlRfUkVUVVJOX0VSUk9SIChQY2RTdGF0dXMpOw0KKw0K KyAgLy8NCisgIC8vIElmIHRoZSBhcHByb3ByaWF0ZSBJT3NwYWNlIGVuYWJsZSBiaXQgaXMgc2V0 LCBhc3N1bWUgdGhlIEFDUEkgUE1CQQ0KKyAgLy8gaGFzIGJlZW4gY29uZmlndXJlZCAoZS5nLiwg YnkgWGVuKSBhbmQgc2tpcCB0aGUgc2V0dXAgaGVyZS4NCisgIC8vIFRoaXMgbWF0Y2hlcyB0aGUg bG9naWMgaW4gQWNwaVRpbWVyTGliQ29uc3RydWN0b3IgKCkuDQorICAvLw0KKyAgaWYgKChQY2lS ZWFkOCAoQWNwaUN0bFJlZykgJiBBY3BpRW5CaXQpID09IDApIHsNCisgICAgLy8NCisgICAgLy8g VGhlIFBFSSBwaGFzZSBzaG91bGQgYmUgZXhpdGVkIHdpdGggZnVsbHkgYWNjZXNzaWJlIEFDUEkg UE0gSU8gc3BhY2U6DQorICAgIC8vIDEuIHNldCBQTUJBDQorICAgIC8vDQorICAgIFBjaUFuZFRo ZW5PcjMyIChQbWJhLCBQbWJhQW5kVmFsLCBQbWJhT3JWYWwpOw0KKw0KKyAgICAvLw0KKyAgICAv LyAyLiBzZXQgUENJQ01EL0lPU0UNCisgICAgLy8NCisgICAgUGNpT3I4IChQbUNtZCwgRUZJX1BD SV9DT01NQU5EX0lPX1NQQUNFKTsNCisNCisgICAgLy8NCisgICAgLy8gMy4gc2V0IEFDUEkgUE0g SU8gZW5hYmxlIGJpdCAoUE1SRUdNSVNDOlBNSU9TRSBvciBBQ1BJX0NOVEw6QUNQSV9FTikNCisg ICAgLy8NCisgICAgUGNpT3I4IChBY3BpQ3RsUmVnLCBBY3BpRW5CaXQpOw0KKyAgfQ0KKw0KKyAg aWYgKG1Ib3N0QnJpZGdlRGV2SWQgPT0gSU5URUxfUTM1X01DSF9ERVZJQ0VfSUQpIHsNCisgICAg Ly8NCisgICAgLy8gU2V0IFJvb3QgQ29tcGxleCBSZWdpc3RlciBCbG9jayBCQVINCisgICAgLy8N CisgICAgUGNpV3JpdGUzMiAoDQorICAgICAgUE9XRVJfTUdNVF9SRUdJU1RFUl9RMzUgKElDSDlf UkNCQSksDQorICAgICAgSUNIOV9ST09UX0NPTVBMRVhfQkFTRSB8IElDSDlfUkNCQV9FTg0KKyAg ICAgICk7DQorDQorICAgIC8vDQorICAgIC8vIFNldCBQQ0kgRXhwcmVzcyBSZWdpc3RlciBSYW5n ZSBCYXNlIEFkZHJlc3MNCisgICAgLy8NCisgICAgUGNpRXhCYXJJbml0aWFsaXphdGlvbiAoKTsN CisgIH0NCit9DQorDQorDQorVk9JRA0KK0Jvb3RNb2RlSW5pdGlhbGl6YXRpb24gKA0KKyAgVk9J RA0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KKw0KKyAgaWYgKENtb3NSZWFk OCAoMHhGKSA9PSAweEZFKSB7DQorICAgIG1Cb290TW9kZSA9IEJPT1RfT05fUzNfUkVTVU1FOw0K KyAgfQ0KKyAgQ21vc1dyaXRlOCAoMHhGLCAweDAwKTsNCisNCisgIFN0YXR1cyA9IFBlaVNlcnZp Y2VzU2V0Qm9vdE1vZGUgKG1Cb290TW9kZSk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMp Ow0KKw0KKyAgU3RhdHVzID0gUGVpU2VydmljZXNJbnN0YWxsUHBpIChtUHBpQm9vdE1vZGUpOw0K KyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCit9DQorDQorDQorVk9JRA0KK1Jlc2VydmVF bXVWYXJpYWJsZU52U3RvcmUgKA0KKyAgKQ0KK3sNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTIFZh cmlhYmxlU3RvcmU7DQorICBSRVRVUk5fU1RBVFVTICAgICAgICBQY2RTdGF0dXM7DQorDQorICAv Lw0KKyAgLy8gQWxsb2NhdGUgc3RvcmFnZSBmb3IgTlYgdmFyaWFibGVzIGVhcmx5IG9uIHNvIGl0 IHdpbGwgYmUNCisgIC8vIGF0IGEgY29uc2lzdGVudCBhZGRyZXNzLiAgU2luY2UgVk0gbWVtb3J5 IGlzIHByZXNlcnZlZA0KKyAgLy8gYWNyb3NzIHJlYm9vdHMsIHRoaXMgYWxsb3dzIHRoZSBOViB2 YXJpYWJsZSBzdG9yYWdlIHRvIHN1cnZpdmUNCisgIC8vIGEgVk0gcmVib290Lg0KKyAgLy8NCisg IFZhcmlhYmxlU3RvcmUgPQ0KKyAgICAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKQ0KKyAg ICAgIEFsbG9jYXRlUnVudGltZVBhZ2VzICgNCisgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTICgy ICogUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9yYWdlRnR3U3BhcmVTaXplKSkNCisgICAgICAgICk7 DQorICBERUJVRyAoKERFQlVHX0lORk8sDQorICAgICAgICAgICJSZXNlcnZlZCB2YXJpYWJsZSBz dG9yZSBtZW1vcnk6IDB4JWxYOyBzaXplOiAlZGtiXG4iLA0KKyAgICAgICAgICBWYXJpYWJsZVN0 b3JlLA0KKyAgICAgICAgICAoMiAqIFBjZEdldDMyIChQY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJl U2l6ZSkpIC8gMTAyNA0KKyAgICAgICAgKSk7DQorICBQY2RTdGF0dXMgPSBQY2RTZXQ2NFMgKFBj ZEVtdVZhcmlhYmxlTnZTdG9yZVJlc2VydmVkLCBWYXJpYWJsZVN0b3JlKTsNCisgIEFTU0VSVF9S RVRVUk5fRVJST1IgKFBjZFN0YXR1cyk7DQorfQ0KKw0KKw0KK1ZPSUQNCitEZWJ1Z0R1bXBDbW9z ICgNCisgIFZPSUQNCisgICkNCit7DQorICBVSU5UMzIgTG9vcDsNCisNCisgIERFQlVHICgoREVC VUdfSU5GTywgIkNNT1M6XG4iKSk7DQorDQorICBmb3IgKExvb3AgPSAwOyBMb29wIDwgMHg4MDsg TG9vcCsrKSB7DQorICAgIGlmICgoTG9vcCAlIDB4MTApID09IDApIHsNCisgICAgICBERUJVRyAo KERFQlVHX0lORk8sICIlMDJ4OiIsIExvb3ApKTsNCisgICAgfQ0KKyAgICBERUJVRyAoKERFQlVH X0lORk8sICIgJTAyeCIsIENtb3NSZWFkOCAoTG9vcCkpKTsNCisgICAgaWYgKChMb29wICUgMHgx MCkgPT0gMHhmKSB7DQorICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiXG4iKSk7DQorICAgIH0N CisgIH0NCit9DQorDQorDQorDQorLyoqDQorICBQZXJmb3JtIFBsYXRmb3JtIFBFSSBpbml0aWFs aXphdGlvbi4NCisNCisgIEBwYXJhbSAgRmlsZUhhbmRsZSAgICAgIEhhbmRsZSBvZiB0aGUgZmls ZSBiZWluZyBpbnZva2VkLg0KKyAgQHBhcmFtICBQZWlTZXJ2aWNlcyAgICAgRGVzY3JpYmVzIHRo ZSBsaXN0IG9mIHBvc3NpYmxlIFBFSSBTZXJ2aWNlcy4NCisNCisgIEByZXR1cm4gRUZJX1NVQ0NF U1MgICAgIFRoZSBQRUlNIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4NCisNCisqKi8NCitFRklf U1RBVFVTDQorRUZJQVBJDQorSW5pdGlhbGl6ZVhlblBsYXRmb3JtICgNCisgIElOICAgICAgIEVG SV9QRUlfRklMRV9IQU5ETEUgIEZpbGVIYW5kbGUsDQorICBJTiBDT05TVCBFRklfUEVJX1NFUlZJ Q0VTICAgICAqKlBlaVNlcnZpY2VzDQorICApDQorew0KKyAgREVCVUcgKChERUJVR19JTkZPLCAi UGxhdGZvcm0gUEVJTSBMb2FkZWRcbiIpKTsNCisNCisgIERlYnVnRHVtcENtb3MgKCk7DQorDQor ICBpZiAoIVhlbkRldGVjdCAoKSkgew0KKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6 IFhlbiBpc24ndCBkZXRlY3RlZFxuIikpOw0KKyAgICBBU1NFUlQgKEZBTFNFKTsNCisgICAgQ3B1 RGVhZExvb3AgKCk7DQorICB9DQorDQorICBCb290TW9kZUluaXRpYWxpemF0aW9uICgpOw0KKyAg QWRkcmVzc1dpZHRoSW5pdGlhbGl6YXRpb24gKCk7DQorDQorICAvLw0KKyAgLy8gUXVlcnkgSG9z dCBCcmlkZ2UgRElEDQorICAvLw0KKyAgbUhvc3RCcmlkZ2VEZXZJZCA9IFBjaVJlYWQxNiAoT1ZN Rl9IT1NUQlJJREdFX0RJRCk7DQorDQorICBQdWJsaXNoUGVpTWVtb3J5ICgpOw0KKw0KKyAgSW5p dGlhbGl6ZVJhbVJlZ2lvbnMgKCk7DQorDQorICBJbml0aWFsaXplWGVuICgpOw0KKw0KKyAgaWYg KG1Cb290TW9kZSAhPSBCT09UX09OX1MzX1JFU1VNRSkgew0KKyAgICBSZXNlcnZlRW11VmFyaWFi bGVOdlN0b3JlICgpOw0KKyAgICBQZWlGdkluaXRpYWxpemF0aW9uICgpOw0KKyAgICBNZW1NYXBJ bml0aWFsaXphdGlvbiAoKTsNCisgIH0NCisNCisgIEluc3RhbGxDbGVhckNhY2hlQ2FsbGJhY2sg KCk7DQorICBBbWRTZXZJbml0aWFsaXplICgpOw0KKyAgTWlzY0luaXRpYWxpemF0aW9uICgpOw0K Kw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCmRpZmYgLS1naXQgYS9Pdm1mUGtnL1hlblBs YXRmb3JtUGVpL1hlbi5jIGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9YZW4uYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mNGQwZDFjNzNiCi0tLSAvZGV2L251bGwKKysr IGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9YZW4uYwpAQCAtMCwwICsxLDIxOSBAQAorLyoqQGZp bGUNCisgIFhlbiBQbGF0Zm9ybSBQRUkgc3VwcG9ydA0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDA2 IC0gMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKyAg Q29weXJpZ2h0IChjKSAyMDExLCBBbmRyZWkgV2Fya2VudGluIDxhbmRyZWl3QG1vdG9yb2xhLmNv bT4NCisgIENvcHlyaWdodCAoYykgMjAxOSwgQ2l0cml4IFN5c3RlbXMsIEluYy4NCisNCisgIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorDQorKiovDQorDQor Ly8NCisvLyBUaGUgcGFja2FnZSBsZXZlbCBoZWFkZXIgZmlsZXMgdGhpcyBtb2R1bGUgdXNlcw0K Ky8vDQorI2luY2x1ZGUgPFBpUGVpLmg+DQorDQorLy8NCisvLyBUaGUgTGlicmFyeSBjbGFzc2Vz IHRoaXMgbW9kdWxlIGNvbnN1bWVzDQorLy8NCisjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5o Pg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0hvYkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9y eUFsbG9jYXRpb25MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4NCisjaW5jbHVk ZSA8R3VpZC9YZW5JbmZvLmg+DQorI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvRTgyMC5oPg0K KyNpbmNsdWRlIDxMaWJyYXJ5L1Jlc291cmNlUHVibGljYXRpb25MaWIuaD4NCisjaW5jbHVkZSA8 TGlicmFyeS9NdHJyTGliLmg+DQorDQorI2luY2x1ZGUgIlBsYXRmb3JtLmgiDQorI2luY2x1ZGUg Ilhlbi5oIg0KKw0KK1NUQVRJQyBVSU5UMzIgbVhlbkxlYWYgPSAwOw0KKw0KK0VGSV9YRU5fSU5G TyBtWGVuSW5mbzsNCisNCisvKioNCisgIFJldHVybnMgRTgyMCBtYXAgcHJvdmlkZWQgYnkgWGVu DQorDQorICBAcGFyYW0gRW50cmllcyAgICAgIFBvaW50ZXIgdG8gRTgyMCBtYXANCisgIEBwYXJh bSBDb3VudCAgICAgICAgTnVtYmVyIG9mIGVudHJpZXMNCisNCisgIEByZXR1cm4gRUZJX1NUQVRV Uw0KKyoqLw0KK0VGSV9TVEFUVVMNCitYZW5HZXRFODIwTWFwICgNCisgIEVGSV9FODIwX0VOVFJZ NjQgKipFbnRyaWVzLA0KKyAgVUlOVDMyICpDb3VudA0KKyAgKQ0KK3sNCisgIEVGSV9YRU5fT1ZN Rl9JTkZPICpJbmZvID0NCisgICAgKEVGSV9YRU5fT1ZNRl9JTkZPICopKFVJTlROKSBPVk1GX0lO Rk9fUEhZU0lDQUxfQUREUkVTUzsNCisNCisgIGlmIChBc2NpaVN0ckNtcCAoKENIQVI4ICopIElu Zm8tPlNpZ25hdHVyZSwgIlhlbkhWTU9WTUYiKSkgew0KKyAgICByZXR1cm4gRUZJX05PVF9GT1VO RDsNCisgIH0NCisNCisgIEFTU0VSVCAoSW5mby0+RTgyMCA8IE1BWF9BRERSRVNTKTsNCisgICpF bnRyaWVzID0gKEVGSV9FODIwX0VOVFJZNjQgKikoVUlOVE4pIEluZm8tPkU4MjA7DQorICAqQ291 bnQgPSBJbmZvLT5FODIwRW50cmllc0NvdW50Ow0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K K30NCisNCisvKioNCisgIENvbm5lY3RzIHRvIHRoZSBIeXBlcnZpc29yLg0KKw0KKyAgQHBhcmFt ICBYZW5MZWFmICAgICBDUFVJRCBpbmRleCB1c2VkIHRvIGNvbm5lY3QuDQorDQorICBAcmV0dXJu IEVGSV9TVEFUVVMNCisNCisqKi8NCitFRklfU1RBVFVTDQorWGVuQ29ubmVjdCAoDQorICBVSU5U MzIgWGVuTGVhZg0KKyAgKQ0KK3sNCisgIFVJTlQzMiBJbmRleDsNCisgIFVJTlQzMiBUcmFuc2Zl clJlZzsNCisgIFVJTlQzMiBUcmFuc2ZlclBhZ2VzOw0KKyAgVUlOVDMyIFhlblZlcnNpb247DQor DQorICBBc21DcHVpZCAoWGVuTGVhZiArIDIsICZUcmFuc2ZlclBhZ2VzLCAmVHJhbnNmZXJSZWcs IE5VTEwsIE5VTEwpOw0KKyAgbVhlbkluZm8uSHlwZXJQYWdlcyA9IEFsbG9jYXRlUGFnZXMgKFRy YW5zZmVyUGFnZXMpOw0KKyAgaWYgKCFtWGVuSW5mby5IeXBlclBhZ2VzKSB7DQorICAgIHJldHVy biBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisNCisgIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IFRyYW5zZmVyUGFnZXM7IEluZGV4KyspIHsNCisgICAgQXNtV3JpdGVNc3I2NCAoVHJhbnNm ZXJSZWcsDQorICAgICAgICAgICAgICAgICAgIChVSU5UTikgbVhlbkluZm8uSHlwZXJQYWdlcyAr DQorICAgICAgICAgICAgICAgICAgIChJbmRleCA8PCBFRklfUEFHRV9TSElGVCkgKyBJbmRleCk7 DQorICB9DQorDQorICBBc21DcHVpZCAoWGVuTGVhZiArIDEsICZYZW5WZXJzaW9uLCBOVUxMLCBO VUxMLCBOVUxMKTsNCisgIERFQlVHICgoREVCVUdfRVJST1IsICJEZXRlY3RlZCBYZW4gdmVyc2lv biAlZC4lZFxuIiwNCisgICAgICAgICAgWGVuVmVyc2lvbiA+PiAxNiwgWGVuVmVyc2lvbiAmIDB4 RkZGRikpOw0KKyAgbVhlbkluZm8uVmVyc2lvbk1ham9yID0gKFVJTlQxNikoWGVuVmVyc2lvbiA+ PiAxNik7DQorICBtWGVuSW5mby5WZXJzaW9uTWlub3IgPSAoVUlOVDE2KShYZW5WZXJzaW9uICYg MHhGRkZGKTsNCisNCisgIC8qIFRCRDogTG9jYXRlIGh2bV9pbmZvIGFuZCByZXNlcnZlIGl0IGF3 YXkuICovDQorICBtWGVuSW5mby5Idm1JbmZvID0gTlVMTDsNCisNCisgIEJ1aWxkR3VpZERhdGFI b2IgKA0KKyAgICAmZ0VmaVhlbkluZm9HdWlkLA0KKyAgICAmbVhlbkluZm8sDQorICAgIHNpemVv ZihtWGVuSW5mbykNCisgICAgKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQor LyoqDQorICBGaWd1cmVzIG91dCBpZiB3ZSBhcmUgcnVubmluZyBpbnNpZGUgWGVuIEhWTS4NCisN CisgIEByZXR2YWwgVFJVRSAgIFhlbiB3YXMgZGV0ZWN0ZWQNCisgIEByZXR2YWwgRkFMU0UgIFhl biB3YXMgbm90IGRldGVjdGVkDQorDQorKiovDQorQk9PTEVBTg0KK1hlbkRldGVjdCAoDQorICBW T0lEDQorICApDQorew0KKyAgVUlOVDggU2lnbmF0dXJlWzEzXTsNCisNCisgIGlmIChtWGVuTGVh ZiAhPSAwKSB7DQorICAgIHJldHVybiBUUlVFOw0KKyAgfQ0KKw0KKyAgU2lnbmF0dXJlWzEyXSA9 ICdcMCc7DQorICBmb3IgKG1YZW5MZWFmID0gMHg0MDAwMDAwMDsgbVhlbkxlYWYgPCAweDQwMDEw MDAwOyBtWGVuTGVhZiArPSAweDEwMCkgew0KKyAgICBBc21DcHVpZCAobVhlbkxlYWYsDQorICAg ICAgICAgICAgICBOVUxMLA0KKyAgICAgICAgICAgICAgKFVJTlQzMiAqKSAmU2lnbmF0dXJlWzBd LA0KKyAgICAgICAgICAgICAgKFVJTlQzMiAqKSAmU2lnbmF0dXJlWzRdLA0KKyAgICAgICAgICAg ICAgKFVJTlQzMiAqKSAmU2lnbmF0dXJlWzhdKTsNCisNCisgICAgaWYgKCFBc2NpaVN0ckNtcCAo KENIQVI4ICopIFNpZ25hdHVyZSwgIlhlblZNTVhlblZNTSIpKSB7DQorICAgICAgcmV0dXJuIFRS VUU7DQorICAgIH0NCisgIH0NCisNCisgIG1YZW5MZWFmID0gMDsNCisgIHJldHVybiBGQUxTRTsN Cit9DQorDQorDQorVk9JRA0KK1hlblB1Ymxpc2hSYW1SZWdpb25zICgNCisgIFZPSUQNCisgICkN Cit7DQorICBFRklfRTgyMF9FTlRSWTY0ICAqRTgyME1hcDsNCisgIFVJTlQzMiAgICAgICAgICAg IEU4MjBFbnRyaWVzQ291bnQ7DQorICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQorDQorICBE RUJVRyAoKERFQlVHX0lORk8sICJVc2luZyBtZW1vcnkgbWFwIHByb3ZpZGVkIGJ5IFhlblxuIikp Ow0KKw0KKyAgLy8NCisgIC8vIFBhcnNlIFJBTSBpbiBFODIwIG1hcA0KKyAgLy8NCisgIEU4MjBF bnRyaWVzQ291bnQgPSAwOw0KKyAgU3RhdHVzID0gWGVuR2V0RTgyME1hcCAoJkU4MjBNYXAsICZF ODIwRW50cmllc0NvdW50KTsNCisNCisgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQorDQor ICBpZiAoRTgyMEVudHJpZXNDb3VudCA+IDApIHsNCisgICAgRUZJX0U4MjBfRU5UUlk2NCAqRW50 cnk7DQorICAgIFVJTlQzMiBMb29wOw0KKw0KKyAgICBmb3IgKExvb3AgPSAwOyBMb29wIDwgRTgy MEVudHJpZXNDb3VudDsgTG9vcCsrKSB7DQorICAgICAgRW50cnkgPSBFODIwTWFwICsgTG9vcDsN CisNCisgICAgICAvLw0KKyAgICAgIC8vIE9ubHkgY2FyZSBhYm91dCBSQU0NCisgICAgICAvLw0K KyAgICAgIGlmIChFbnRyeS0+VHlwZSAhPSBFZmlBY3BpQWRkcmVzc1JhbmdlTWVtb3J5KSB7DQor ICAgICAgICBjb250aW51ZTsNCisgICAgICB9DQorDQorICAgICAgQWRkTWVtb3J5QmFzZVNpemVI b2IgKEVudHJ5LT5CYXNlQWRkciwgRW50cnktPkxlbmd0aCk7DQorDQorICAgICAgTXRyclNldE1l bW9yeUF0dHJpYnV0ZSAoRW50cnktPkJhc2VBZGRyLCBFbnRyeS0+TGVuZ3RoLCBDYWNoZVdyaXRl QmFjayk7DQorICAgIH0NCisgIH0NCit9DQorDQorDQorLyoqDQorICBQZXJmb3JtIFhlbiBQRUkg aW5pdGlhbGl6YXRpb24uDQorDQorICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgICBYZW4gaW5pdGlh bGl6ZWQgc3VjY2Vzc2Z1bGx5DQorICBAcmV0dXJuIEVGSV9OT1RfRk9VTkQgICBOb3QgcnVubmlu ZyB1bmRlciBYZW4NCisNCisqKi8NCitFRklfU1RBVFVTDQorSW5pdGlhbGl6ZVhlbiAoDQorICBW T0lEDQorICApDQorew0KKyAgUkVUVVJOX1NUQVRVUyBQY2RTdGF0dXM7DQorDQorICBpZiAobVhl bkxlYWYgPT0gMCkgew0KKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCisgIH0NCisNCisgIFhl bkNvbm5lY3QgKG1YZW5MZWFmKTsNCisNCisgIC8vDQorICAvLyBSZXNlcnZlIGF3YXkgSFZNTE9B REVSIHJlc2VydmVkIG1lbW9yeSBbMHhGQzAwMDAwMCwweEZEMDAwMDAwKS4NCisgIC8vIFRoaXMg bmVlZHMgdG8gbWF0Y2ggSFZNTE9BREVSIFJFU0VSVkVEX01FTUJBU0UvUkVTRVJWRURfTUVNU0la RS4NCisgIC8vDQorICBBZGRSZXNlcnZlZE1lbW9yeUJhc2VTaXplSG9iICgweEZDMDAwMDAwLCAw eDEwMDAwMDAsIEZBTFNFKTsNCisNCisgIFBjZFN0YXR1cyA9IFBjZFNldEJvb2xTIChQY2RQY2lE aXNhYmxlQnVzRW51bWVyYXRpb24sIFRSVUUpOw0KKyAgQVNTRVJUX1JFVFVSTl9FUlJPUiAoUGNk U3RhdHVzKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQpkaWZmIC0tZ2l0IGEvTWFp bnRhaW5lcnMudHh0IGIvTWFpbnRhaW5lcnMudHh0CmluZGV4IDM0YmRiMjc1YjQuLjQyZWM4ZDU0 YWYgMTAwNjQ0Ci0tLSBhL01haW50YWluZXJzLnR4dAorKysgYi9NYWludGFpbmVycy50eHQKQEAg LTM3OSw2ICszNzksNyBAQCBGOiBPdm1mUGtnL1BsYXRmb3JtUGVpL1hlbi4qCiBGOiBPdm1mUGtn L1NtYmlvc1BsYXRmb3JtRHhlLypYZW4uYw0KIEY6IE92bWZQa2cvWGVuQnVzRHhlLw0KIEY6IE92 bWZQa2cvWGVuSW9QY2lEeGUvDQorRjogT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS8NCiBGOiBPdm1m UGtnL1hlblB2QmxrRHhlLw0KIEY6IE92bWZQa2cvWGVuUmVzZXRWZWN0b3IvDQogUjogQW50aG9u eSBQZXJhcmQgPGFudGhvbnkucGVyYXJkQGNpdHJpeC5jb20+DQotLSAKQW50aG9ueSBQRVJBUkQK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=