From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-x72b.google.com (mail-qk1-x72b.google.com [IPv6:2607:f8b0:4864:20::72b]) by sourceware.org (Postfix) with ESMTPS id AB2953857C7C for ; Wed, 23 Sep 2020 09:21:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org AB2953857C7C Received: by mail-qk1-x72b.google.com with SMTP id c2so2490647qkf.10 for ; Wed, 23 Sep 2020 02:21:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=scnbnRJpkMN6fX+/X7jD7nn0xnpojLc47FYmOsPRRzQ=; b=BVmakHcxdkP/ai5aq5qxToqZBevFZTpp6Cikiiq4VozyprSoPEnE6kW9uKbFSPTwRf 9Qzqy3PSwwRHB8MLWFKEYIjw35NU0nv4ORnnU2p+TDmGrH74ewlXVzLC+BkZ2KOm3jNb smEusolg+HAwklvcl6ci4g0VNZfwQdSaJu+uSSyjZZTPDrPbMyfO6nxd4FE02BoyESax 6RpPuSJszYHe8rnJgdcGxVj+QZiNLJuRcl5njcpvoWs5LinNpSPPZtpmITOIDFit+1Hj WIWNyjK2b6w6uiHH+9LPIynW0sf/URRAdKo8QYtE8jbMTVumcHEC9JIWwka75XbWOppb WyWA== X-Gm-Message-State: AOAM532IqG0EmxY5XbGFzSiSTY/RLUcxkARpKpMOfREo4+HGjE5VJuJa aFfl2VpPcyZazwwkrFPcIIGqJR4kBCwsE2UCHVwwd6e536s= X-Google-Smtp-Source: ABdhPJy9SIuyUrKsOzxTVfjA8QJGyA8LSkMzcupjGjGxURAdyO8a0WMxgobEPFdUMCC54ojrFJQzl4eyVLa8GnCSD08= X-Received: by 2002:a37:ac09:: with SMTP id e9mr9047054qkm.213.1600852872908; Wed, 23 Sep 2020 02:21:12 -0700 (PDT) MIME-Version: 1.0 From: Sergey Belyashov Date: Wed, 23 Sep 2020 12:21:01 +0300 Message-ID: Subject: [PATCH] Add Zilog Z80 CPU (and derivatives) support To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary="000000000000d3f66305aff79a40" X-Spam-Status: No, score=-5.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SCC_10_SHORT_WORD_LINES, SCC_5_SHORT_WORD_LINES, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Sep 2020 09:21:21 -0000 --000000000000d3f66305aff79a40 Content-Type: text/plain; charset="UTF-8" This patch adds basic support for Z80-like CPUs. diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c7b743826e..c3a28714a3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2020-09-18 Sergey Belyashov + + * Makefile.in: Add Z80 platform support. + * configure.tgt: Add Z80 platform support. + * features/Makefile: Add Z80 platform support. + * features/z80-cpu.xml: Add Z80 platform support. + * features/z80.c: Add Z80 platform support. + * features/z80.xml: Add Z80 platform support. + * regformats/z80.dat: Add Z80 platform support. + * z80-tdep.c: New file. + * z80-tdep.h: New file. + 2020-09-18 Pedro Alves PR gdb/26631 diff --git a/gdb/NEWS b/gdb/NEWS index 0ac0ff18f2..e5c07e64f1 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -140,6 +140,7 @@ alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...] GNU/Linux/RISC-V (gdbserver) riscv*-*-linux* BPF bpf-unknown-none +Z80 z80-unknown-* * Python API diff --git a/gdb/stubs/ChangeLog b/gdb/stubs/ChangeLog index a5cfae0604..516d8b2cc1 100644 --- a/gdb/stubs/ChangeLog +++ b/gdb/stubs/ChangeLog @@ -1,3 +1,7 @@ +2020-09-18 Sergey Belyashov + + * z80-stub.c: New file. + 2020-04-28 Tankut Baris Aktemur * ia64vms-stub.c: Fix typo in comment (thead -> thread). --000000000000d3f66305aff79a40 Content-Type: text/x-patch; charset="US-ASCII"; name="z80-gdb2.patch" Content-Disposition: attachment; filename="z80-gdb2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kff6az8e0 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5pbgppbmRleCBkYmVk ZTdhOWNmLi40MGJiMjE0OTFhIDEwMDY0NAotLS0gYS9nZGIvTWFrZWZpbGUuaW4KKysrIGIvZ2Ri L01ha2VmaWxlLmluCkBAIC04MzgsNyArODM4LDggQEAgQUxMX1RBUkdFVF9PQlMgPSBcCiAJeHN0 b3JteTE2LXRkZXAubyBcCiAJeHRlbnNhLWNvbmZpZy5vIFwKIAl4dGVuc2EtbGludXgtdGRlcC5v IFwKLQl4dGVuc2EtdGRlcC5vCisJeHRlbnNhLXRkZXAubyBcCisJejgwLXRkZXAubwogCiAjIFRo ZSBmb2xsb3dpbmcgbmF0aXZlLXRhcmdldCBkZXBlbmRlbnQgdmFyaWFibGVzIGFyZSBkZWZpbmVk IG9uCiAjIGNvbmZpZ3VyZS5uYXQuCmRpZmYgLS1naXQgYS9nZGIvY29uZmlndXJlLnRndCBiL2dk Yi9jb25maWd1cmUudGd0CmluZGV4IGEzZTExYzRiOWIuLjFmZThmYzg4NzYgMTAwNjQ0Ci0tLSBh L2dkYi9jb25maWd1cmUudGd0CisrKyBiL2dkYi9jb25maWd1cmUudGd0CkBAIC03NjEsNiArNzYx LDEwIEBAIHh0ZW5zYSotKi0qbGludXgqKQogCSMgVGFyZ2V0OiBHTlUvTGludXggWHRlbnNhCiAJ Z2RiX3RhcmdldF9vYnM9Inh0ZW5zYS1saW51eC10ZGVwLm8gc3ltZmlsZS1tZW0ubyBsaW51eC10 ZGVwLm8iCiAJOzsKK3o4MCopCisJIyBUYXJnZXQ6IFo4MAorCWdkYl90YXJnZXRfb2JzPSJ6ODAt dGRlcC5vIgorCTs7CiAKIGVzYWMKIApkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL01ha2VmaWxl IGIvZ2RiL2ZlYXR1cmVzL01ha2VmaWxlCmluZGV4IDY4OTYwMzg0N2EuLmUzMDEzMTE0OTIgMTAw NjQ0Ci0tLSBhL2dkYi9mZWF0dXJlcy9NYWtlZmlsZQorKysgYi9nZGIvZmVhdHVyZXMvTWFrZWZp bGUKQEAgLTY2LDcgKzY2LDggQEAgV0hJQ0ggPSBtaXBzLWxpbnV4IG1pcHMtZHNwLWxpbnV4IFwK IAlzMzkwLXRlLWxpbnV4NjQgczM5MHgtdGUtbGludXg2NCBzMzkwLXZ4LWxpbnV4NjQgczM5MHgt dngtbGludXg2NCBcCiAJczM5MC10ZXZ4LWxpbnV4NjQgczM5MHgtdGV2eC1saW51eDY0IFwKIAlz MzkwLWdzLWxpbnV4NjQgczM5MHgtZ3MtbGludXg2NCBcCi0JdGljNngtYzY0eHAtbGludXggdGlj NngtYzY0eC1saW51eCB0aWM2eC1jNjJ4LWxpbnV4CisJdGljNngtYzY0eHAtbGludXggdGljNngt YzY0eC1saW51eCB0aWM2eC1jNjJ4LWxpbnV4IFwKKwl6ODAKIAogIyBSZWNvcmQgd2hpY2ggcmVn aXN0ZXJzIHNob3VsZCBiZSBzZW50IHRvIEdEQiBieSBkZWZhdWx0IGFmdGVyIHN0b3AuCiBhYXJj aDY0LWV4cGVkaXRlID0geDI5LHNwLHBjCkBAIC05NCw2ICs5NSw3IEBAIHMzOTAtdGV2eC1saW51 eDY0LWV4cGVkaXRlID0gcjE0bCxyMTVsLHBzd2EKIHMzOTAtZ3MtbGludXg2NC1leHBlZGl0ZSA9 IHIxNCxyMTUscHN3YQogczM5MHgtZXhwZWRpdGUgPSByMTQscjE1LHBzd2EKIHRpYzZ4LWV4cGVk aXRlID0gQTE1LFBDCit6ODAtZXhwZWRpdGUgPSBzcCxwYwogCiAKIFhTTFRQUk9DID0geHNsdHBy b2MKQEAgLTE2OSw3ICsxNzEsOCBAQCBYTUxUT0MgPSBcCiAJczM5MHgtdGV2eC1saW51eDY0Lnht bCBcCiAJczM5MHgtdngtbGludXg2NC54bWwgXAogCXMzOTAtZ3MtbGludXg2NC54bWwgXAotCXMz OTB4LWdzLWxpbnV4NjQueG1sCisJczM5MHgtZ3MtbGludXg2NC54bWwgXAorCXo4MC54bWwKIAog VERFU0NfQ0ZJTEVTID0gJChwYXRzdWJzdCAlLnhtbCwlLmMsJChYTUxUT0MpKQogR0RCID0gZmFs c2UKQEAgLTIzNSw3ICsyMzgsOCBAQCBGRUFUVVJFX1hNTEZJTEVTID0gYWFyY2g2NC1jb3JlLnht bCBcCiAJcngueG1sIFwKIAl0aWM2eC1jNnhwLnhtbCBcCiAJdGljNngtY29yZS54bWwgXAotCXRp YzZ4LWdwLnhtbAorCXRpYzZ4LWdwLnhtbCBcCisJejgwLWNvcmUueG1sCiAKIEZFQVRVUkVfQ0ZJ TEVTID0gJChwYXRzdWJzdCAlLnhtbCwlLmMsJChGRUFUVVJFX1hNTEZJTEVTKSkKIApkaWZmIC0t Z2l0IGEvZ2RiL2ZlYXR1cmVzL3o4MC1jcHUueG1sIGIvZ2RiL2ZlYXR1cmVzL3o4MC1jcHUueG1s Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmQ4MDkzZDY4YjkKLS0tIC9k ZXYvbnVsbAorKysgYi9nZGIvZmVhdHVyZXMvejgwLWNwdS54bWwKQEAgLTAsMCArMSwzNCBAQAor PD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAyMCBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2Yg dGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICAgICBhcmUgcGVybWl0 dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQK KyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+CisKKzwhRE9D VFlQRSBmZWF0dXJlIFNZU1RFTSAiZ2RiLXRhcmdldC5kdGQiPgorPGZlYXR1cmUgbmFtZT0ib3Jn LmdudS5nZGIuejgwLmNwdSI+CisgIDxmbGFncyBpZD0iYWZfZmxhZ3MiIHNpemU9IjIiPgorICAg IDxmaWVsZCBuYW1lPSJDIiBzdGFydD0iMCIgZW5kPSIwIi8+CisgICAgPGZpZWxkIG5hbWU9Ik4i IHN0YXJ0PSIxIiBlbmQ9IjEiLz4KKyAgICA8ZmllbGQgbmFtZT0iUC9WIiBzdGFydD0iMiIgZW5k PSIyIi8+CisgICAgPGZpZWxkIG5hbWU9IkYzIiBzdGFydD0iMyIgZW5kPSIzIi8+CisgICAgPGZp ZWxkIG5hbWU9IkgiIHN0YXJ0PSI0IiBlbmQ9IjQiLz4KKyAgICA8ZmllbGQgbmFtZT0iRjUiIHN0 YXJ0PSI1IiBlbmQ9IjUiLz4KKyAgICA8ZmllbGQgbmFtZT0iWiIgc3RhcnQ9IjYiIGVuZD0iNiIv PgorICAgIDxmaWVsZCBuYW1lPSJTIiBzdGFydD0iNyIgZW5kPSI3Ii8+CisgIDwvZmxhZ3M+Cisg IDxyZWcgbmFtZT0iYWYiIGJpdHNpemU9IjE2IiB0eXBlPSJhZl9mbGFncyIvPgorICA8cmVnIG5h bWU9ImJjIiBiaXRzaXplPSIxNiIgdHlwZT0idWludDE2Ii8+CisgIDxyZWcgbmFtZT0iZGUiIGJp dHNpemU9IjE2IiB0eXBlPSJkYXRhX3B0ciIvPgorICA8cmVnIG5hbWU9ImhsIiBiaXRzaXplPSIx NiIgdHlwZT0iZGF0YV9wdHIiLz4KKyAgPHJlZyBuYW1lPSJzcCIgYml0c2l6ZT0iMTYiIHR5cGU9 ImRhdGFfcHRyIiAvPgorICA8cmVnIG5hbWU9InBjIiBiaXRzaXplPSIzMiIgdHlwZT0iY29kZV9w dHIiIC8+CisgIDxyZWcgbmFtZT0iaXgiIGJpdHNpemU9IjE2IiB0eXBlPSJkYXRhX3B0ciIvPgor ICA8cmVnIG5hbWU9Iml5IiBiaXRzaXplPSIxNiIgdHlwZT0iZGF0YV9wdHIiLz4KKyAgPHJlZyBu YW1lPSJhZiciIGJpdHNpemU9IjE2IiB0eXBlPSJhZl9mbGFncyIvPgorICA8cmVnIG5hbWU9ImJj JyIgYml0c2l6ZT0iMTYiIHR5cGU9InVpbnQxNiIvPgorICA8cmVnIG5hbWU9ImRlJyIgYml0c2l6 ZT0iMTYiIHR5cGU9ImRhdGFfcHRyIi8+CisgIDxyZWcgbmFtZT0iaGwnIiBiaXRzaXplPSIxNiIg dHlwZT0iZGF0YV9wdHIiLz4KKyAgPHJlZyBuYW1lPSJpciIgYml0c2l6ZT0iMTYiIHR5cGU9InVp bnQxNiIvPgorPCEtLSAgPHJlZyBuYW1lPSJzcHMiIGJpdHNpemU9IjE2IiB0eXBlPSJ1aW50MTYi Lz4gLS0+Cis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9nZGIvZmVhdHVyZXMvejgwLmMgYi9nZGIv ZmVhdHVyZXMvejgwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjdl MDI3ZjYyZQotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9mZWF0dXJlcy96ODAuYwpAQCAtMCwwICsx LDQ0IEBACisvKiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiAgLSotIGJ1ZmZlci1yZWFkLW9ubHk6 IHQgLSotIHZpOnNldCBybzoKKyAgT3JpZ2luYWw6IHo4MC54bWwgKi8KKworI2luY2x1ZGUgImRl ZnMuaCIKKyNpbmNsdWRlICJvc2FiaS5oIgorI2luY2x1ZGUgInRhcmdldC1kZXNjcmlwdGlvbnMu aCIKKworc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzY196ODA7CitzdGF0aWMgdm9pZAoraW5pdGlh bGl6ZV90ZGVzY196ODAgKHZvaWQpCit7CisgIHN0cnVjdCB0YXJnZXRfZGVzYyAqcmVzdWx0ID0g YWxsb2NhdGVfdGFyZ2V0X2Rlc2NyaXB0aW9uICgpOworICBzZXRfdGRlc2NfYXJjaGl0ZWN0dXJl IChyZXN1bHQsIGJmZF9zY2FuX2FyY2ggKCJ6ODAiKSk7CisKKyAgc3RydWN0IHRkZXNjX2ZlYXR1 cmUgKmZlYXR1cmU7CisKKyAgZmVhdHVyZSA9IHRkZXNjX2NyZWF0ZV9mZWF0dXJlIChyZXN1bHQs ICJvcmcuZ251LmdkYi56ODAuY3B1Iik7CisgIHRkZXNjX3R5cGVfd2l0aF9maWVsZHMgKnR5cGVf d2l0aF9maWVsZHM7CisgIHR5cGVfd2l0aF9maWVsZHMgPSB0ZGVzY19jcmVhdGVfZmxhZ3MgKGZl YXR1cmUsICJhZl9mbGFncyIsIDIpOworICB0ZGVzY19hZGRfZmxhZyAodHlwZV93aXRoX2ZpZWxk cywgMCwgIkMiKTsKKyAgdGRlc2NfYWRkX2ZsYWcgKHR5cGVfd2l0aF9maWVsZHMsIDEsICJOIik7 CisgIHRkZXNjX2FkZF9mbGFnICh0eXBlX3dpdGhfZmllbGRzLCAyLCAiUC9WIik7CisgIHRkZXNj X2FkZF9mbGFnICh0eXBlX3dpdGhfZmllbGRzLCAzLCAiRjMiKTsKKyAgdGRlc2NfYWRkX2ZsYWcg KHR5cGVfd2l0aF9maWVsZHMsIDQsICJIIik7CisgIHRkZXNjX2FkZF9mbGFnICh0eXBlX3dpdGhf ZmllbGRzLCA1LCAiRjUiKTsKKyAgdGRlc2NfYWRkX2ZsYWcgKHR5cGVfd2l0aF9maWVsZHMsIDYs ICJaIik7CisgIHRkZXNjX2FkZF9mbGFnICh0eXBlX3dpdGhfZmllbGRzLCA3LCAiUyIpOworCisg IHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJhZiIsIDAsIDEsIE5VTEwsIDE2LCAiYWZfZmxh Z3MiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJjIiwgMSwgMSwgTlVMTCwgMTYs ICJ1aW50MTYiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImRlIiwgMiwgMSwgTlVM TCwgMTYsICJkYXRhX3B0ciIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJlLCAiaGwiLCAz LCAxLCBOVUxMLCAxNiwgImRhdGFfcHRyIik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUs ICJzcCIsIDQsIDEsIE5VTEwsIDE2LCAiZGF0YV9wdHIiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAo ZmVhdHVyZSwgInBjIiwgNSwgMSwgTlVMTCwgMzIsICJjb2RlX3B0ciIpOworICB0ZGVzY19jcmVh dGVfcmVnIChmZWF0dXJlLCAiaXgiLCA2LCAxLCBOVUxMLCAxNiwgImRhdGFfcHRyIik7CisgIHRk ZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJpeSIsIDcsIDEsIE5VTEwsIDE2LCAiZGF0YV9wdHIi KTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImFmJyIsIDgsIDEsIE5VTEwsIDE2LCAi YWZfZmxhZ3MiKTsKKyAgdGRlc2NfY3JlYXRlX3JlZyAoZmVhdHVyZSwgImJjJyIsIDksIDEsIE5V TEwsIDE2LCAidWludDE2Iik7CisgIHRkZXNjX2NyZWF0ZV9yZWcgKGZlYXR1cmUsICJkZSciLCAx MCwgMSwgTlVMTCwgMTYsICJkYXRhX3B0ciIpOworICB0ZGVzY19jcmVhdGVfcmVnIChmZWF0dXJl LCAiaGwnIiwgMTEsIDEsIE5VTEwsIDE2LCAiZGF0YV9wdHIiKTsKKyAgdGRlc2NfY3JlYXRlX3Jl ZyAoZmVhdHVyZSwgImlyIiwgMTIsIDEsIE5VTEwsIDE2LCAidWludDE2Iik7CisKKyAgdGRlc2Nf ejgwID0gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZ2RiL2ZlYXR1cmVzL3o4MC54bWwgYi9nZGIv ZmVhdHVyZXMvejgwLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4y Mzg2ODdhMTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL2ZlYXR1cmVzL3o4MC54bWwKQEAgLTAs MCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAy MCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgICBDb3B5aW5nIGFuZCBkaXN0 cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICAg ICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRo ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAg LS0+CisKKzwhRE9DVFlQRSB0YXJnZXQgU1lTVEVNICJnZGItdGFyZ2V0LmR0ZCI+Cis8dGFyZ2V0 PgorICA8YXJjaGl0ZWN0dXJlPno4MDwvYXJjaGl0ZWN0dXJlPgorICA8eGk6aW5jbHVkZSBocmVm PSJ6ODAtY3B1LnhtbCIvPgorPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9nZGIvcmVnZm9ybWF0cy96 ODAuZGF0IGIvZ2RiL3JlZ2Zvcm1hdHMvejgwLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi4wNTU4MGM4NTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3JlZ2Zvcm1h dHMvejgwLmRhdApAQCAtMCwwICsxLDE4IEBACisjIFRISVMgRklMRSBJUyBHRU5FUkFURUQuICAt Ki0gYnVmZmVyLXJlYWQtb25seTogdCAtKi0gdmkgOnNldCBybzoKKyMgR2VuZXJhdGVkIGZyb206 IHo4MC54bWwKK25hbWU6ejgwCit4bWx0YXJnZXQ6ejgwLnhtbAorZXhwZWRpdGU6c3AscGMKKzE2 OmFmCisxNjpiYworMTY6ZGUKKzE2OmhsCisxNjpzcAorMzI6cGMKKzE2Oml4CisxNjppeQorMTY6 YWYnCisxNjpiYycKKzE2OmRlJworMTY6aGwnCisxNjppcgpkaWZmIC0tZ2l0IGEvZ2RiL3N0dWJz L3o4MC1zdHViLmMgYi9nZGIvc3R1YnMvejgwLXN0dWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi4zNjMxNmI5NWJhCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3N0dWJz L3o4MC1zdHViLmMKQEAgLTAsMCArMSwxMzAxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAor CQkJICAgICBDb25maWd1cmF0aW9uCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBE QkdfQ09ORklHVVJFRAorLyogVW5jb21tZW50IHRoaXMgbGluZSwgaWYgc3R1YiBzaXplIGlzIGNy aXRpY2FsIGZvciB5b3UgKi8KKy8vI2RlZmluZSBEQkdfTUlOX1NJWkUKKworLyogQ29tbWVudCB0 aGlzIGxpbmUgb3V0IGlmIHNvZnR3YXJlIGJyZWFrcG9pbnRzIGFyZSB1bnN1cHBvcnRlZC4KKyAg IElmIHlvdSBoYXZlIHNwZWNpYWwgZnVuY3Rpb24gdG8gdG9nZ2xlIHNvZnR3YXJlIGJyZWFrcG9p bnRzLCB0aGVuIHByb3ZpZGUKKyAgIGhlcmUgbmFtZSBvZiB0aGVzZSBmdW5jdGlvbi4gRXhwZWN0 ZWQgcHJvdG90eXBlOgorICAgICAgIGludCB0b2dnbGVfc3dicmVhayhpbnQgc2V0LCB2b2lkICph ZGRyKTsKKyAgIGZ1bmN0aW9uIG11c3QgcmV0dXJuIDAgb24gc3VjY2Vzcy4gKi8KKy8vI2RlZmlu ZSBEQkdfU1dCUkVBSyB0b2dnbGVfc3dicmVhaworI2RlZmluZSBEQkdfU1dCUkVBSworCisvKiBE ZWZpbmUgaWYgb25lIG9mIHN0YW5kYXJkIFJTVCBoYW5kbGVycyBpcyB1c2VkIGFzIHNvZnR3YXJl CisgICBicmVha3BvaW50IGVudHJ5IHBvaW50ICovCisvLyNkZWZpbmUgREJHX1NXQlJFQUtfUlNU IDB4MDgKKworLyogaWYgcGxhdGZvcm0gc3VwcG9ydHMgaGFyZHdhcmUgYnJlYWtwb2ludHMgdGhl biBkZWZpbmUgZm9sbG93aW5nIHR3byBtYWNyb3MKKyAgIGJ5IG5hbWVzIG9mIGZ1bmN0aW9ucy4g RnVjdGlvbnMgbXVzdCBoYXZlIG5leHQgcHJvdG90eXBlczoKKyAgICAgaW50IHRvZ2dsZV9od2Jy ZWFrKGludCBzZXQsIHZvaWQgKmFkZHIpOworICAgZnVuY3Rpb24gbXVzdCByZXR1cm4gMCBvbiBz dWNjZXNzLiAqLworLy8jZGVmaW5lIERCR19IV0JSRUFLIHRvZ2dsZV9od2JyZWFrCisKKy8qIGlm IHBsYXRmb3JtIHN1cHBvcnRzIGhhcmR3YXJlIHdhdGNocG9pbnRzIHRoZW4gZGVmaW5lIGFsbCBv ciBzb21lIG9mCisgICBmb2xsb3dpbmcgbWFjcm9zIGJ5IG5hbWVzIG9mIGZ1bmN0aW9ucy4gRnVj dGlvbnMgcHJvdG90eXBlczoKKyAgICAgaW50IHRvZ2dsZV93YXRjaChpbnQgc2V0LCB2b2lkICph ZGRyLCBzaXplX3Qgc2l6ZSk7ICAvLyBtZW1vcnkgd3JpdGUgd2F0Y2gKKyAgICAgaW50IHRvZ2ds ZV9yd2F0Y2goaW50IHNldCwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOyAvLyBtZW1vcnkgcmVh ZCB3YXRjaAorICAgICBpbnQgdG9nZ2xlX2F3YXRjaChpbnQgc2V0LCB2b2lkICphZGRyLCBzaXpl X3Qgc2l6ZSk7IC8vIG1lbW9yeSBhY2Nlc3Mgd2F0Y2gKKyAgIGZ1bmN0aW9uIG11c3QgcmV0dXJu IDAgb24gc3VjY2Vzcy4gKi8KKy8vI2RlZmluZSBEQkdfV1dBVENIIHRvZ2dsZV93YXRjaAorLy8j ZGVmaW5lIERCR19SV0FUQ0ggdG9nZ2xlX3J3YXRjaAorLy8jZGVmaW5lIERCR19BV0FUQ0ggdG9n Z2xlX2F3YXRjaAorCisvKiBTaXplIG9mIGhhcmR3YXJlIGJyZWFrcG9pbnQuIFJlcXVpcmVkIHRv IGNvcnJlY3QgUEMuICovCisjZGVmaW5lIERCR19IV0JSRUFLX1NJWkUgMAorCisvKiBEZWZpbmUg Zm9sbG93aW5nIG1hY3JvIGlmIHlvdSBuZWVkIGN1c3RvbSBtZW1vcnkgcmVhZC93cml0ZSByb3V0 aW5lLgorICAgRnVuY3Rpb24gc2hvdWxkIHJldHVybiBub24temVybyBvbiBzdWNjZXNzLCBhbmQg emVybyBvbiBmYWlsdXJlCisgICAoZm9yIGV4YW1wbGUsIHdyaXRlIHRvIFJPTSBhcmVhKS4KKyAg IFVzZWZ1bCB3aXRoIG92ZXJsYXlzIChiYW5rIHN3aXRjaGluZykuCisgICBEbyBub3QgZm9yZ2V0 IHRvIGRlZmluZToKKyAgIF9vdmx5X3RhYmxlIC0gb3ZlcmxheSB0YWJsZQorICAgX25vdmx5cyAt IG51bWJlciBvZiBpdGVtcyBpbiBfb3ZseV90YWJsZQorICAgb3IKKyAgIF9vdmx5X3JlZ2lvbl90 YWJsZSAtIG92ZXJsYXkgcmVnaW9ucyB0YWJsZQorICAgX25vdmx5X3JlZ2lvbnMgLSBudW1iZXIg b2YgaXRlbXMgaW4gX292bHlfcmVnaW9uX3RhYmxlCisKKyAgIF9vdmx5X2RlYnVnX3ByZXBhcmUg LSBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIG92ZXJsYXkgbWFwcGluZworICAgX292bHlfZGVi dWdfZXZlbnQgLSBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgb3ZlcmxheSBtYXBwaW5nCisgKi8K Ky8vI2RlZmluZSBEQkdfTUVNQ1BZIG1lbWNweQorCisvKiBkZWZpbmUgZGVkaWNhdGVkIHN0YWNr IHNpemUgaWYgcmVxdWlyZWQgKi8KKy8vI2RlZmluZSBEQkdfU1RBQ0tfU0laRSAyNTYKKworLyog bWF4IEdEQiBwYWNrZXQgc2l6ZQorICAgc2hvdWxkIGJlIG11Y2ggbW9yZSB0aGF0IERCR19TVEFD S19TSVpFIGJlY2F1c2UgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgb24gc3RhY2sKKyovCisjZGVmaW5l IERCR19QQUNLRVRfU0laRSAxNTAKKworLyogVW5jb21tZW50IGlmIHJlcXVpcmVkIHRvIHVzZSB0 cmFtcG9saW5lIHdoZW4gcmVzdW1pbmcgb3BlcmF0aW9uLgorICAgVXNlZnVsIHdpdGggZGVkaWNh dGVkIHN0YWNrIHdoZW4gc3RhY2sgcG9pbnRlciBkbyBub3QgcG9pbnQgdG8gdGhlIHN0YWNrIG9y CisgICBzdGFjayBpcyBub3Qgd3JpdGFibGUgKi8KKy8vI2RlZmluZSBEQkdfVVNFX1RSQU1QT0xJ TkUKKworLyogVW5jb21tZW50IGZvbGxvd2luZyBtYWNybyB0byBlbmFibGUgZGVidWcgcHJpbnRp bmcgdG8gZGVidWdnZXIgY29uc29sZSAqLworLy8jZGVmaW5lIERCR19QUklOVAorCisjZGVmaW5l IERCR19OTUlfRVggRVhfSFdCUkVBSworI2RlZmluZSBEQkdfSU5UX0VYIEVYX1NJR0lOVAorCisv KiBEZWZpbmUgZm9sbG93aW5nIG1hY3JvIHRvIHN0YXRlbWVudCwgd2hpY2ggd2lsbCBiZSBleGVj dHV0ZWQgYWZ0ZXIgZW50ZXJpbmcgdG8KKyAgIHN0dWJfbWFpbiBmdW5jdGlvbi4gU3RhdGVtZW50 IHNob3VsZCBpbmNsdWRlIHNlbWljb2xvbi4gKi8KKy8vI2RlZmluZSBEQkdfRU5URVIgZGVidWdf ZW50ZXIoKTsKKworLyogRGVmaW5lIGZvbGxvd2luZyBtYWNybyB0byBpbnN0cnVjdGlvbihzKSwg d2hpY2ggd2lsbCBiZSBleGVjdXRlcyBiZWZvcmUgcmV0dXJuCisgICBjb250cm9sIHRvIHByb2dy YW0uIEl0IGlzIHVzZWZ1bCB3aGVuIGdkYi1zdHViIGlzIHBsYWNlZCBpbiBvbmUgb2Ygb3Zlcmxh eXMuCisgICBUaGlzIHByb2NlZHVyZSBtdXN0IG5vdCBjaGFuZ2UgYW55IHJlZ2lzdGVyLiBPbiB0 b3Agb2Ygc3RhY2sgYmVmb3JlIGludm9jYXRpb24KKyAgIGlzIHJldHVybiBhZGRyZXNzIG9mIHRo ZSBwcm9ncmFtLiAqLworLy8jZGVmaW5lIERCR19SRVNVTUUganAgX3Jlc3RvcmVfYmFuaworCisv KiBEZWZpbmUgZm9sbG93aW5nIG1hY3JvIHRvIHN0cmluZyBjb250YWluaW5nIG1lbW9yeSBtYXAg ZGVmaW5pdGlvbiBYTUwgKi8KKy8qI2RlZmluZSBEQkdfTUVNT1JZX01BUCAiXAorPG1lbW9yeS1t YXA+XAorCTxtZW1vcnkgdHlwZT1cInJvbVwiIHN0YXJ0PVwiMHgwMDAwXCIgbGVuZ3RoPVwiMHg0 MDAwXCIvPlwKKzwhLS0JPG1lbW9yeSB0eXBlPVwiZmxhc2hcIiBzdGFydD1cIjB4NDAwMFwiIGxl bmd0aD1cIjB4NDAwMFwiPlwKKwkJPHByb3BlcnR5IG5hbWU9XCJibG9ja3NpemVcIj4xMjg8L3By b3BlcnR5PlwKKwk8L21lbW9yeT4gLS0+XAorCTxtZW1vcnkgdHlwZT1cInJhbVwiIHN0YXJ0PVwi MHg4MDAwXCIgbGVuZ3RoPVwiMHg4MDAwXCIvPlwKKzwvbWVtb3J5LW1hcD5cCisiCisqLworI2Vu ZGlmIC8qIERCR19DT05GSUdVUkVEICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorCQkJICAg ICBQdWJsaWMgSW50ZXJmYWNlCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBFbnRlciB0 byBkZWJ1ZyBtb2RlIGZyb20gc29mdHdhcmUgb3IgaGFyZHdhcmUgYnJlYWtwb2ludC4KKyAgIEFz c3VtZSBhZGRyZXNzIG9mIG5leHQgaW5zdHJ1Y3Rpb24gYWZ0ZXIgYnJlYWtwb2ludCBjYWxsIGlz IG9uIHRvcCBvZiBzdGFjay4KKyAgIERvIEpQIF9kZWJ1Z19zd2JyZWFrIG9yIEpQIF9kZWJ1Z19o d2JyZWFrIGZyb20gUlNUIGhhbmRsZXIsIGZvciBleGFtcGxlLgorICovCit2b2lkIGRlYnVnX3N3 YnJlYWsgKHZvaWQpOwordm9pZCBkZWJ1Z19od2JyZWFrICh2b2lkKTsKKworLyogSnVtcCB0byB0 aGlzIGZ1bmN0aW9uIGZyb20gTk1JIGhhbmRsZXIuIEp1c3QgcmVwbGFjZSBSRVROIGluc3RydWN0 aW9uIGJ5CisgKiBKUCBfZGVidWdfbm1pCisgKi8KK3ZvaWQgZGVidWdfbm1pICh2b2lkKTsKKwor LyogSnVtcCB0byB0aGlzIGZ1bmN0aW9uIGZyb20gSU5UIGhhbmRsZXIuIEp1c3QgcmVwbGFjZSBF SStSRVRJIGluc3RydWN0aW9ucyBieQorICogSlAgX2RlYnVnX2ludAorICovCit2b2lkIGRlYnVn X2ludCAodm9pZCk7CisKKyNkZWZpbmUgRVhfU1dCUkVBSwkwCS8qIHN3IGJyZWFrcG9pbnQgKi8K KyNkZWZpbmUgRVhfSFdCUkVBSwktMQkvKiBodyBicmVha3BvaW50ICovCisjZGVmaW5lIEVYX1dX QVRDSAktMgkvKiBtZW1vcnkgd3JpdGUgd2F0Y2ggKi8KKyNkZWZpbmUgRVhfUldBVENICS0zCS8q IG1lbW9yeSByZWFkIHdhdGNoICovCisjZGVmaW5lIEVYX0FXQVRDSAktNAkvKiBtZW1vcnkgYWNj ZXNzIHdhdGNoICovCisjZGVmaW5lIEVYX1NJR0lOVAkyCisjZGVmaW5lIEVYX1NJR1RSQVAJNQor I2RlZmluZSBFWF9TSUdBQlJUCTYKKyNkZWZpbmUgRVhfU0lHQlVTCTEwCisjZGVmaW5lIEVYX1NJ R1NFR1YJMTEKKy8qIG9yIGFueSBzdGFuZGFyZCAqbml4IHNpZ25hbCB2YWx1ZSAqLworCisvKiBF bnRlciB0byBkZWJ1ZyBtb2RlIChhZnRlciByZWNlaXZpbmcgQlJFQUsgZnJvbSBHREIpCisgKiBB c3N1bWU6CisgKiAgIFBDID0gKFNQKzApCisgKiAgIFNJRz0gKFNQKzIpCisgKiAgIFNQID0gU1Ar NAorICovCit2b2lkIGRlYnVnX2V4Y2VwdGlvbiAoaW50IGV4KTsKKworLyogUHJpbnRzIHRvIGRl YnVnZ2VyIGNvbnNvbGUuICovCit2b2lkIGRlYnVnX3ByaW50KGNvbnN0IGNoYXIgKnN0cik7Cisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqXAorCQkJICAgICAgUmVxdWlyZWQgZnVuY3Rpb25zCitcKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworCitleHRlcm4gaW50IGdldERlYnVnQ2hhciAodm9pZCk7Citl eHRlcm4gdm9pZCBwdXREZWJ1Z0NoYXIgKGludCBjaCk7CisKKyNpZmRlZiBEQkdfU1dCUkVBSwor I2RlZmluZSBET19FWFBBTkQoVkFMKSAgVkFMICMjIDEyMzQ1NgorI2RlZmluZSBFWFBBTkQoVkFM KSAgICAgRE9fRVhQQU5EKFZBTCkKKworI2lmIEVYUEFORChEQkdfU1dCUkVBSykgIT0gMTIzNDU2 CisjZGVmaW5lIERCR19TV0JSRUFLX1BST0MgREJHX1NXQlJFQUsKK2V4dGVybiBpbnQgREJHX1NX QlJFQUsoaW50IHNldCwgdm9pZCAqYWRkcik7CisjZW5kaWYKKworI3VuZGVmIEVYUEFORAorI3Vu ZGVmIERPX0VYUEFORAorI2VuZGlmIC8qIERCR19TV0JSRUFLICovCisKKyNpZmRlZiBEQkdfSFdC UkVBSworZXh0ZXJuIGludCBEQkdfSFdCUkVBSyhpbnQgc2V0LCB2b2lkICphZGRyKTsKKyNlbmRp ZgorCisjaWZkZWYgREJHX01FTUNQWQorZXh0ZXJuIHZvaWQqIERCR19NRU1DUFkgKHZvaWQgKmRl c3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbik7CisjZW5kaWYKKworI2lmZGVmIERCR19X V0FUQ0gKK2V4dGVybiBpbnQgREJHX1dXQVRDSChpbnQgc2V0LCB2b2lkICphZGRyLCB1bnNpZ25l ZCBzaXplKTsKKyNlbmRpZgorCisjaWZkZWYgREJHX1JXQVRDSAorZXh0ZXJuIGludCBEQkdfUldB VENIKGludCBzZXQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNpemUpOworI2VuZGlmCisKKyNpZmRl ZiBEQkdfQVdBVENICitleHRlcm4gaW50IERCR19BV0FUQ0goaW50IHNldCwgdm9pZCAqYWRkciwg dW5zaWduZWQgc2l6ZSk7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKwkJCSAg ICAgICBJTVBMRU1FTlRBVElPTgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUg PHN0cmluZy5oPgorCisjaWZuZGVmIE5VTEwKKyMgZGVmaW5lIE5VTEwgKHZvaWQqKTAKKyNlbmRp ZgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgYnl0ZTsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQg d29yZDsKKworLyogQ1BVIHN0YXRlICovCisjaWZkZWYgX19TRENDX2V6ODBfYWRsCisjIGRlZmlu ZSBSRUdfU0laRSAzCisjZWxzZQorIyBkZWZpbmUgUkVHX1NJWkUgMgorI2VuZGlmIC8qIF9fU0RD Q19lejgwX2FkbCAqLworCisjZGVmaW5lIFJfQUYgICAgKDAqUkVHX1NJWkUpCisjZGVmaW5lIFJf QkMgICAgKDEqUkVHX1NJWkUpCisjZGVmaW5lIFJfREUgICAgKDIqUkVHX1NJWkUpCisjZGVmaW5l IFJfSEwgICAgKDMqUkVHX1NJWkUpCisjZGVmaW5lIFJfU1AgICAgKDQqUkVHX1NJWkUpCisjZGVm aW5lIFJfUEMgICAgKDUqUkVHX1NJWkUpCisKKyNpZm5kZWYgX19TRENDX2diejgwCisjZGVmaW5l IFJfSVggICAgKDYqUkVHX1NJWkUpCisjZGVmaW5lIFJfSVkgICAgKDcqUkVHX1NJWkUpCisjZGVm aW5lIFJfQUZfICAgKDgqUkVHX1NJWkUpCisjZGVmaW5lIFJfQkNfICAgKDkqUkVHX1NJWkUpCisj ZGVmaW5lIFJfREVfICAgKDEwKlJFR19TSVpFKQorI2RlZmluZSBSX0hMXyAgICgxMSpSRUdfU0la RSkKKyNkZWZpbmUgUl9JUiAgICAoMTIqUkVHX1NJWkUpCisKKyNpZmRlZiBfX1NEQ0NfZXo4MF9h ZGwKKyNkZWZpbmUgUl9TUFMgICAoMTMqUkVHX1NJWkUpCisjZGVmaW5lIE5VTVJFR0JZVEVTICgx NCpSRUdfU0laRSkKKyNlbHNlCisjZGVmaW5lIE5VTVJFR0JZVEVTICgxMypSRUdfU0laRSkKKyNl bmRpZiAvKiBfX1NEQ0NfZXo4MF9hZGwgKi8KKyNlbHNlCisjZGVmaW5lIE5VTVJFR0JZVEVTICg2 KlJFR19TSVpFKQorI2RlZmluZSBGQVNUQ0FMTAorI2VuZGlmIC8qX19TRENDX2diejgwICovCitz dGF0aWMgYnl0ZSBzdGF0ZVtOVU1SRUdCWVRFU107CisKKyNpZiBEQkdfUEFDS0VUX1NJWkUgPCAo TlVNUkVHQllURVMqMis1KQorI2Vycm9yICJUb28gc21hbGwgREJHX1BBQ0tFVF9TSVpFIgorI2Vu ZGlmCisKKyNpZm5kZWYgRkFTVENBTEwKKyNkZWZpbmUgRkFTVENBTEwgX196ODhka19mYXN0Y2Fs bAorI2VuZGlmCisKKy8qIGRlZGljYXRlZCBzdGFjayAqLworI2lmZGVmIERCR19TVEFDS19TSVpF CisKKyNkZWZpbmUgTE9BRF9TUAlsZAlzcCwgI19zdGFjayArIERCR19TVEFDS19TSVpFCisKK3N0 YXRpYyBjaGFyIHN0YWNrW0RCR19TVEFDS19TSVpFXTsKKworI2Vsc2UKKworI3VuZGVmIERCR19V U0VfVFJBTVBPTElORQorI2RlZmluZSBMT0FEX1NQCisKKyNlbmRpZgorCisjaWZuZGVmIERCR19F TlRFUgorI2RlZmluZSBEQkdfRU5URVIKKyNlbmRpZgorCisjaWZuZGVmIERCR19SRVNVTUUKKyNk ZWZpbmUgREJHX1JFU1VNRSByZXQKKyNlbmRpZgorCitzdGF0aWMgc2lnbmVkIGNoYXIgc2lndmFs OworCitzdGF0aWMgdm9pZCBzdHViX21haW4gKGludCBzaWd2YWwsIGludCBwY19hZGopOworc3Rh dGljIGNoYXIgaGlnaF9oZXggKGJ5dGUgdikgRkFTVENBTEw7CitzdGF0aWMgY2hhciBsb3dfaGV4 IChieXRlIHYpIEZBU1RDQUxMOworc3RhdGljIGNoYXIgcHV0X3BhY2tldF9pbmZvIChjb25zdCBj aGFyICpidWZmZXIpIEZBU1RDQUxMOworc3RhdGljIHZvaWQgc2F2ZV9jcHVfc3RhdGUgKHZvaWQp Oworc3RhdGljIHZvaWQgcmVzdF9jcHVfc3RhdGUgKHZvaWQpOworCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworI2lmZGVmIERCR19TV0JSRUFLCisjaWZkZWYgREJHX1NXQlJFQUtfUlNUCisjZGVm aW5lIERCR19TV0JSRUFLX1NJWkUgMQorI2Vsc2UKKyNkZWZpbmUgREJHX1NXQlJFQUtfU0laRSAz CisjZW5kaWYKK3ZvaWQKK2RlYnVnX3N3YnJlYWsgKHZvaWQpIF9fbmFrZWQKK3sKKyAgX19hc20K KwlsZAkoI19zdGF0ZSArIFJfU1ApLCBzcAorCUxPQURfU1AKKwljYWxsCV9zYXZlX2NwdV9zdGF0 ZQorCWxkCWhsLCAjLURCR19TV0JSRUFLX1NJWkUKKwlwdXNoCWhsCisJbGQJaGwsICNFWF9TV0JS RUFLCisJcHVzaAlobAorCWNhbGwJX3N0dWJfbWFpbgorCS5nbG9ibAlfYnJlYWtfaGFuZGxlcgor I2lmZGVmIERCR19TV0JSRUFLX1JTVAorX2JyZWFrX2hhbmRsZXIgPSBEQkdfU1dCUkVBS19SU1QK KyNlbHNlCitfYnJlYWtfaGFuZGxlciA9IF9kZWJ1Z19zd2JyZWFrCisjZW5kaWYKKyAgX19lbmRh c207Cit9CisjZW5kaWYgLyogREJHX1NXQlJFQUsgKi8KKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisjaWZkZWYgREJHX0hXQlJFQUsKKyNpZm5kZWYgREJHX0hXQlJFQUtfU0laRQorI2RlZmluZSBE QkdfSFdCUkVBS19TSVpFIDAKKyNlbmRpZiAvKiBEQkdfSFdCUkVBS19TSVpFICovCit2b2lkCitk ZWJ1Z19od2JyZWFrICh2b2lkKSBfX25ha2VkCit7CisgIF9fYXNtCisJbGQJKCNfc3RhdGUgKyBS X1NQKSwgc3AKKwlMT0FEX1NQCisJY2FsbAlfc2F2ZV9jcHVfc3RhdGUKKwlsZAlobCwgIy1EQkdf SFdCUkVBS19TSVpFCisJcHVzaAlobAorCWxkCWhsLCAjRVhfSFdCUkVBSworCXB1c2gJaGwKKwlj YWxsCV9zdHViX21haW4KKyAgX19lbmRhc207Cit9CisjZW5kaWYgLyogREJHX0hXQlJFQUtfU0VU ICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZAorZGVidWdfZXhjZXB0aW9uIChpbnQg ZXgpIF9fbmFrZWQKK3sKKyAgX19hc20KKwlsZAkoI19zdGF0ZSArIFJfU1ApLCBzcAorCUxPQURf U1AKKwljYWxsCV9zYXZlX2NwdV9zdGF0ZQorCWxkCWhsLCAjMAorCXB1c2gJaGwKKyNpZmRlZiBf X1NEQ0NfZ2J6ODAKKwlsZAlobCwgI19zdGF0ZSArIFJfU1AKKwlsZAlhLCAoaGwrKQorCWxkCWgs IChobCkKKwlsZAlsLCBhCisjZWxzZQorCWxkCWhsLCAoI19zdGF0ZSArIFJfU1ApCisjZW5kaWYK KwlpbmMJaGwKKwlpbmMJaGwKKwlsZAllLCAoaGwpCisJaW5jCWhsCisJbGQJZCwgKGhsKQorCXB1 c2gJZGUKKwljYWxsCV9zdHViX21haW4KKyAgX19lbmRhc207CisgICh2b2lkKWV4OworfQorLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TRENDX2diejgwCit2b2lkCitkZWJ1Z19u bWkodm9pZCkgX19uYWtlZAoreworICBfX2FzbQorCWxkCSgjX3N0YXRlICsgUl9TUCksIHNwCisJ TE9BRF9TUAorCWNhbGwJX3NhdmVfY3B1X3N0YXRlCisJbGQJaGwsICMwCTtwY19hZGoKKwlwdXNo CWhsCisJbGQJaGwsICNEQkdfTk1JX0VYCisJcHVzaAlobAorCWxkCWhsLCAjX3N0dWJfbWFpbgor CXB1c2gJaGwKKwlwdXNoCWhsCisJcmV0bgorICBfX2VuZGFzbTsKK30KKyNlbmRpZgorLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KK3ZvaWQKK2RlYnVnX2ludCh2b2lkKSBfX25ha2VkCit7CisgIF9f YXNtCisJbGQJKCNfc3RhdGUgKyBSX1NQKSwgc3AKKwlMT0FEX1NQCisJY2FsbAlfc2F2ZV9jcHVf c3RhdGUKKwlsZAlobCwgIzAJO3BjX2FkagorCXB1c2gJaGwKKwlsZAlobCwgI0RCR19JTlRfRVgK KwlwdXNoCWhsCisJbGQJaGwsICNfc3R1Yl9tYWluCisJcHVzaAlobAorCXB1c2gJaGwKKwllaQor CXJldGkKKyAgX19lbmRhc207Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIERC R19QUklOVAordm9pZAorZGVidWdfcHJpbnQoY29uc3QgY2hhciAqc3RyKQoreworICBwdXREZWJ1 Z0NoYXIgKCckJyk7CisgIHB1dERlYnVnQ2hhciAoJ08nKTsKKyAgY2hhciBjc3VtID0gJ08nOwor ICBmb3IgKDsgKnN0ciAhPSAnXDAnOyApCisgICAgeworICAgICAgY2hhciBjID0gaGlnaF9oZXgg KCpzdHIpOworICAgICAgY3N1bSArPSBjOworICAgICAgcHV0RGVidWdDaGFyIChjKTsKKyAgICAg IGMgPSBsb3dfaGV4ICgqc3RyKyspOworICAgICAgY3N1bSArPSBjOworICAgICAgcHV0RGVidWdD aGFyIChjKTsKKyAgICB9CisgIHB1dERlYnVnQ2hhciAoJyMnKTsKKyAgcHV0RGVidWdDaGFyICho aWdoX2hleCAoY3N1bSkpOworICBwdXREZWJ1Z0NoYXIgKGxvd19oZXggKGNzdW0pKTsKK30KKyNl bmRpZiAvKiBEQkdfUFJJTlQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9p ZCBzdG9yZV9wY19zcCAoaW50IHBjX2FkaikgRkFTVENBTEw7CisjZGVmaW5lIGdldF9yZWdfdmFs dWUobWVtKSAoKih2b2lkKiBjb25zdCopKG1lbSkpCisjZGVmaW5lIHNldF9yZWdfdmFsdWUobWVt LHZhbCkgZG8geyAoKih2b2lkKiopKG1lbSkgPSAodmFsKSk7IH0gd2hpbGUgKDApCitzdGF0aWMg Y2hhciogYnl0ZTJoZXgoY2hhciAqYnVmLCBieXRlIHZhbCk7CitzdGF0aWMgaW50IGhleDJpbnQg KGNvbnN0IGNoYXIgKipidWYpIEZBU1RDQUxMOworc3RhdGljIGNoYXIqIGludDJoZXggKGNoYXIg KmJ1ZiwgaW50IHYpOworc3RhdGljIHZvaWQgZ2V0X3BhY2tldCAoY2hhciAqYnVmZmVyKTsKK3N0 YXRpYyB2b2lkIHB1dF9wYWNrZXQgKGNvbnN0IGNoYXIgKmJ1ZmZlcik7CitzdGF0aWMgY2hhciBw cm9jZXNzIChjaGFyICpidWZmZXIpIEZBU1RDQUxMOworc3RhdGljIHZvaWQgcmVzdF9jcHVfc3Rh dGUgKHZvaWQpOworCitzdGF0aWMgdm9pZAorc3R1Yl9tYWluIChpbnQgZXgsIGludCBwY19hZGop Cit7CisgIGNoYXIgYnVmZmVyW0RCR19QQUNLRVRfU0laRSsxXTsKKyAgc2lndmFsID0gKHNpZ25l ZCBjaGFyKWV4OworICBzdG9yZV9wY19zcCAocGNfYWRqKTsKKworICBEQkdfRU5URVIKKworICAv KiBhZnRlciBzdGFydGluZyBnZGJfc3R1YiBtdXN0IGFsd2F5cyByZXR1cm4gc3RvcCByZWFzb24g Ki8KKyAgKmJ1ZmZlciA9ICc/JzsKKyAgZm9yICg7IHByb2Nlc3MgKGJ1ZmZlcik7KQorICAgIHsK KyAgICAgIHB1dF9wYWNrZXQgKGJ1ZmZlcik7CisgICAgICBnZXRfcGFja2V0IChidWZmZXIpOwor ICAgIH0KKyAgcHV0X3BhY2tldCAoYnVmZmVyKTsKKyAgcmVzdF9jcHVfc3RhdGUgKCk7Cit9CisK K3N0YXRpYyB2b2lkCitnZXRfcGFja2V0IChjaGFyICpidWZmZXIpCit7CisgIGJ5dGUgY3N1bTsK KyAgY2hhciBjaDsKKyAgY2hhciAqcDsKKyAgYnl0ZSBlc2M7CisjaWYgREJHX1BBQ0tFVF9TSVpF IDw9IDI1NgorICBieXRlIGNvdW50OyAvKiBpdCBpcyBPSyB0byB1c2UgdXAgdG8gMjU2IGhlcmUg Ki8KKyNlbHNlCisgIHVuc2lnbmVkIGNvdW50OworI2VuZGlmCisgIGZvciAoOzsgcHV0RGVidWdD aGFyICgnLScpKQorICAgIHsKKyAgICAgIC8qIHdhaXQgZm9yIHBhY2tldCBzdGFydCBjaGFyYWN0 ZXIgKi8KKyAgICAgIHdoaWxlIChnZXREZWJ1Z0NoYXIgKCkgIT0gJyQnKTsKK3JldHJ5OgorICAg ICAgY3N1bSA9IDA7CisgICAgICBlc2MgPSAwOworICAgICAgcCA9IGJ1ZmZlcjsKKyAgICAgIGNv dW50ID0gREJHX1BBQ0tFVF9TSVpFOworICAgICAgZG8KKwl7CisJICBjaCA9IGdldERlYnVnQ2hh ciAoKTsKKwkgIHN3aXRjaCAoY2gpCisJICAgIHsKKwkgICAgY2FzZSAnJCc6CisJICAgICAgZ290 byByZXRyeTsKKwkgICAgY2FzZSAnIyc6CisJICAgICAgZ290byBmaW5pc2g7CisJICAgIGNhc2Ug J30nOgorCSAgICAgIGVzYyA9IDB4MjA7CisJICAgICAgYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJ ICAgICAgKnArKyA9IGNoIF4gZXNjOworCSAgICAgIGVzYyA9IDA7CisJICAgICAgLS1jb3VudDsK KwkgICAgfQorCSAgY3N1bSArPSBjaDsKKwl9CisgICAgICB3aGlsZSAoY291bnQgIT0gMCk7Citm aW5pc2g6CisgICAgICAqcCA9ICdcMCc7CisgICAgICBpZiAoY2ggIT0gJyMnKSAvKiBwYWNrZXQg aXMgdG9vIGxhcmdlICovCisJY29udGludWU7CisgICAgICBjaCA9IGdldERlYnVnQ2hhciAoKTsK KyAgICAgIGlmIChjaCAhPSBoaWdoX2hleCAoY3N1bSkpCisJY29udGludWU7CisgICAgICBjaCA9 IGdldERlYnVnQ2hhciAoKTsKKyAgICAgIGlmIChjaCAhPSBsb3dfaGV4IChjc3VtKSkKKwljb250 aW51ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcHV0RGVidWdDaGFyICgnKycpOworfQorCitz dGF0aWMgdm9pZAorcHV0X3BhY2tldCAoY29uc3QgY2hhciAqYnVmZmVyKQoreworICAvKiAgJDxw YWNrZXQgaW5mbz4jPGNoZWNrc3VtPi4gKi8KKyAgZm9yICg7OykKKyAgICB7CisgICAgICBwdXRE ZWJ1Z0NoYXIgKCckJyk7CisgICAgICBjaGFyIGNoZWNrc3VtID0gcHV0X3BhY2tldF9pbmZvIChi dWZmZXIpOworICAgICAgcHV0RGVidWdDaGFyICgnIycpOworICAgICAgcHV0RGVidWdDaGFyICho aWdoX2hleChjaGVja3N1bSkpOworICAgICAgcHV0RGVidWdDaGFyIChsb3dfaGV4KGNoZWNrc3Vt KSk7CisgICAgICBmb3IgKDs7KQorCXsKKwkgIGNoYXIgYyA9IGdldERlYnVnQ2hhciAoKTsKKwkg IHN3aXRjaCAoYykKKwkgICAgeworCSAgICBjYXNlICcrJzogcmV0dXJuOworCSAgICBjYXNlICct JzogYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJICAgICAgcHV0RGVidWdDaGFyIChjKTsKKwkgICAg ICBjb250aW51ZTsKKwkgICAgfQorCSAgYnJlYWs7CisJfQorICAgIH0KK30KKworc3RhdGljIGNo YXIKK3B1dF9wYWNrZXRfaW5mbyAoY29uc3QgY2hhciAqc3JjKSBGQVNUQ0FMTAoreworICBjaGFy IGNoOworICBjaGFyIGNoZWNrc3VtID0gMDsKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBjaCA9 ICpzcmMrKzsKKyAgICAgIGlmIChjaCA9PSAnXDAnKQorCWJyZWFrOworICAgICAgaWYgKGNoID09 ICd9JyB8fCBjaCA9PSAnKicgfHwgY2ggPT0gJyMnIHx8IGNoID09ICckJykKKwl7CisJICAvKiBl c2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzICovCisJICBwdXREZWJ1Z0NoYXIgKCd9Jyk7CisJICBj aGVja3N1bSArPSAnfSc7CisJICBjaCBePSAweDIwOworCX0KKyAgICAgIHB1dERlYnVnQ2hhciAo Y2gpOworICAgICAgY2hlY2tzdW0gKz0gY2g7CisgICAgfQorICByZXR1cm4gY2hlY2tzdW07Cit9 CisKK3N0YXRpYyB2b2lkCitzdG9yZV9wY19zcCAoaW50IHBjX2FkaikgRkFTVENBTEwKK3sKKyAg Ynl0ZSAqc3AgPSBnZXRfcmVnX3ZhbHVlICgmc3RhdGVbUl9TUF0pOworICBieXRlICpwYyA9IGdl dF9yZWdfdmFsdWUgKHNwKTsKKyAgcGMgKz0gcGNfYWRqOworICBzZXRfcmVnX3ZhbHVlICgmc3Rh dGVbUl9QQ10sIHBjKTsKKyAgc2V0X3JlZ192YWx1ZSAoJnN0YXRlW1JfU1BdLCBzcCArIFJFR19T SVpFKTsKK30KKworc3RhdGljIGNoYXIgKm1lbTJoZXggKGNoYXIgKmJ1ZiwgY29uc3QgYnl0ZSAq bWVtLCB1bnNpZ25lZCBieXRlcyk7CitzdGF0aWMgY2hhciAqaGV4Mm1lbSAoYnl0ZSAqbWVtLCBj b25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGJ5dGVzKTsKKworLyogQ29tbWFuZCBwcm9jZXNzb3Jz LiBUYWtlcyBwb2ludGVyIHRvIGJ1ZmZlciAoYmVnaW5zIGZyb20gY29tbWFuZCBzeW1ib2wpLAor ICAgbW9kaWZpZXMgYnVmZmVyLCByZXR1cm5zOiAtMSAtIGVtcHR5IHJlc3BvbnNlIChpZ25vcmUp LCAwIC0gc3VjY2VzcywKKyAgIHBvc2l0aXZlOiBlcnJvciBjb2RlLiAqLworCisjaWZkZWYgREJH X01JTl9TSVpFCitzdGF0aWMgc2lnbmVkIGNoYXIKK3Byb2Nlc3NfcXVlc3Rpb24gKGNoYXIgKnAp IEZBU1RDQUxMCit7CisgIHNpZ25lZCBjaGFyIHNpZzsKKyAgKnArKyA9ICdTJzsKKyAgc2lnID0g c2lndmFsOworICBpZiAoc2lnIDw9IDApCisgICAgc2lnID0gRVhfU0lHVFJBUDsKKyAgcCA9IGJ5 dGUyaGV4IChwLCAoYnl0ZSlzaWcpOworICAqcCA9ICdcMCc7CisgIHJldHVybiAwOworfQorI2Vs c2UgLyogREJHX01JTl9TSVpFICovCitzdGF0aWMgY2hhciAqZm9ybWF0X3JlZ192YWx1ZSAoY2hh ciAqcCwgdW5zaWduZWQgcmVnX251bSwgY29uc3QgYnl0ZSAqdmFsdWUpOworCitzdGF0aWMgc2ln bmVkIGNoYXIKK3Byb2Nlc3NfcXVlc3Rpb24gKGNoYXIgKnApIEZBU1RDQUxMCit7CisgIHNpZ25l ZCBjaGFyIHNpZzsKKyAgKnArKyA9ICdUJzsKKyAgc2lnID0gc2lndmFsOworICBpZiAoc2lnIDw9 IDApCisgICAgc2lnID0gRVhfU0lHVFJBUDsKKyAgcCA9IGJ5dGUyaGV4IChwLCAoYnl0ZSlzaWcp OworICBwID0gZm9ybWF0X3JlZ192YWx1ZShwLCBSX0FGL1JFR19TSVpFLCAmc3RhdGVbUl9BRl0p OworICBwID0gZm9ybWF0X3JlZ192YWx1ZShwLCBSX1NQL1JFR19TSVpFLCAmc3RhdGVbUl9TUF0p OworICBwID0gZm9ybWF0X3JlZ192YWx1ZShwLCBSX1BDL1JFR19TSVpFLCAmc3RhdGVbUl9QQ10p OworI2lmIGRlZmluZWQoREJHX1NXQlJFQUtfUFJPQykgfHwgZGVmaW5lZChEQkdfSFdCUkVBSykg fHwgZGVmaW5lZChEQkdfV1dBVENIKSB8fCBkZWZpbmVkKERCR19SV0FUQ0gpIHx8IGRlZmluZWQo REJHX0FXQVRDSCkKKyAgY29uc3QgY2hhciAqcmVhc29uOworICB1bnNpZ25lZCBhZGRyID0gMDsK KyAgc3dpdGNoIChzaWd2YWwpCisgICAgeworI2lmZGVmIERCR19TV0JSRUFLX1BST0MKKyAgICBj YXNlIEVYX1NXQlJFQUs6CisgICAgICByZWFzb24gPSAic3dicmVhayI7CisgICAgICBicmVhazsK KyNlbmRpZgorI2lmZGVmIERCR19IV0JSRUFLCisgICAgY2FzZSBFWF9IV0JSRUFLOgorICAgICAg cmVhc29uID0gImh3YnJlYWsiOworICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBEQkdfV1dB VENICisgICAgY2FzZSBFWF9XV0FUQ0g6CisgICAgICByZWFzb24gPSAid2F0Y2giOworICAgICAg YWRkciA9IDE7CisgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIERCR19SV0FUQ0gKKyAgICBj YXNlIEVYX1JXQVRDSDoKKyAgICAgIHJlYXNvbiA9ICJyd2F0Y2giOworICAgICAgYWRkciA9IDE7 CisgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIERCR19BV0FUQ0gKKyAgICBjYXNlIEVYX0FX QVRDSDoKKyAgICAgIHJlYXNvbiA9ICJhd2F0Y2giOworICAgICAgYWRkciA9IDE7CisgICAgICBi cmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICBnb3RvIGZpbmlzaDsKKyAgICB9Cisg IHdoaWxlICgoKnArKyA9ICpyZWFzb24rKykpCisgICAgOworICAtLXA7CisgICpwKysgPSAnOic7 CisgIGlmIChhZGRyICE9IDApCisgICAgcCA9IGludDJoZXgocCwgYWRkcik7CisgICpwKysgPSAn Oyc7CitmaW5pc2g6CisjZW5kaWYgLyogREJHX0hXQlJFQUssIERCR19XV0FUQ0gsIERCR19SV0FU Q0gsIERCR19BV0FUQ0ggKi8KKyAgKnArKyA9ICdcMCc7CisgIHJldHVybiAwOworfQorI2VuZGlm IC8qIERCR19NSU5TSVpFICovCisKKyNkZWZpbmUgU1RSSU5HMih4KSAjeAorI2RlZmluZSBTVFJJ TkcxKHgpIFNUUklORzIoeCkKKyNkZWZpbmUgU1RSSU5HKHgpIFNUUklORzEoeCkKKyNpZmRlZiBE QkdfTUVNT1JZX01BUAorc3RhdGljIHZvaWQgcmVhZF9tZW1vcnlfbWFwIChjaGFyICpidWZmZXIs IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyNlbmRpZgorCitzdGF0aWMgc2ln bmVkIGNoYXIKK3Byb2Nlc3NfcSAoY2hhciAqYnVmZmVyKSBGQVNUQ0FMTAoreworICBjaGFyICpw OworICBpZiAobWVtY21wIChidWZmZXIgKyAxLCAiU3VwcG9ydGVkIiwgOSkgPT0gMCkKKyAgICB7 CisgICAgICBtZW1jcHkgKGJ1ZmZlciwgIlBhY2tldFNpemU9IiwgMTEpOworICAgICAgcCA9IGlu dDJoZXggKCZidWZmZXJbMTFdLCBEQkdfUEFDS0VUX1NJWkUpOworI2lmbmRlZiBEQkdfTUlOX1NJ WkUKKyNpZmRlZiBEQkdfU1dCUkVBS19QUk9DCisgICAgICBtZW1jcHkgKHAsICI7c3dicmVhaysi LCA5KTsKKyAgICAgIHAgKz0gOTsKKyNlbmRpZgorI2lmZGVmIERCR19IV0JSRUFLCisgICAgICBt ZW1jcHkgKHAsICI7aHdicmVhaysiLCA5KTsKKyAgICAgIHAgKz0gOTsKKyNlbmRpZgorI2VuZGlm IC8qIERCR19NSU5fU0laRSAqLworCisjaWZkZWYgREJHX01FTU9SWV9NQVAKKyAgICAgIG1lbWNw eSAocCwgIjtxWGZlcjptZW1vcnktbWFwOnJlYWQrIiwgMjMpOworICAgICAgcCArPSAyMzsKKyNl bmRpZgorICAgICAgKnAgPSAnXDAnOworICAgICAgcmV0dXJuIDA7CisgICAgfQorI2lmZGVmIERC R19NRU1PUllfTUFQCisgIGlmIChtZW1jbXAgKGJ1ZmZlciArIDEsICJYZmVyOm1lbW9yeS1tYXA6 cmVhZDoiLCAyMSkgPT0gMCkKKyAgICB7CisgICAgICBwID0gc3RyY2hyIChidWZmZXIgKyAxICsg MjEsICc6Jyk7CisgICAgICBpZiAocCA9PSBOVUxMKQorCXJldHVybiAxOworICAgICAgKytwOwor ICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gaGV4MmludCAoJnApOworICAgICAgaWYgKCpwKysgIT0g JywnKQorCXJldHVybiAyOworICAgICAgdW5zaWduZWQgbGVuZ3RoID0gaGV4MmludCAoJnApOwor ICAgICAgaWYgKGxlbmd0aCA9PSAwKQorCXJldHVybiAzOworICAgICAgaWYgKGxlbmd0aCA+IERC R19QQUNLRVRfU0laRSkKKwlyZXR1cm4gNDsKKyAgICAgIHJlYWRfbWVtb3J5X21hcCAoYnVmZmVy LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKKyNpZm5k ZWYgREJHX01JTl9TSVpFCisgIGlmIChtZW1jbXAgKCZidWZmZXJbMV0sICJBdHRhY2hlZCIsIDkp ID09IDApCisgICAgeworICAgICAgLyogSnVzdCByZXBvcnQgdGhhdCBHREIgYXR0YWNoZWQgdG8g ZXhpc3RpbmcgcHJvY2VzcworCSBpZiBpdCBpcyBub3QgYXBwbGljYWJsZSBmb3IgeW91LCB0aGVu IHNlbmQgcGF0Y2hlcyAqLworICAgICAgbWVtY3B5KGJ1ZmZlciwgIjEiLCAyKTsKKyAgICAgIHJl dHVybiAwOworICAgIH0KKyNlbmRpZiAvKiBEQkdfTUlOX1NJWkUgKi8KKyAgKmJ1ZmZlciA9ICdc MCc7CisgIHJldHVybiAtMTsKK30KKworc3RhdGljIHNpZ25lZCBjaGFyCitwcm9jZXNzX2cgKGNo YXIgKmJ1ZmZlcikgRkFTVENBTEwKK3sKKyAgbWVtMmhleCAoYnVmZmVyLCBzdGF0ZSwgTlVNUkVH QllURVMpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHNpZ25lZCBjaGFyCitwcm9jZXNzX0cg KGNoYXIgKmJ1ZmZlcikgRkFTVENBTEwKK3sKKyAgaGV4Mm1lbSAoc3RhdGUsICZidWZmZXJbMV0s IE5VTVJFR0JZVEVTKTsKKyAgLyogT0sgcmVzcG9uc2UgKi8KKyAgKmJ1ZmZlciA9ICdcMCc7Cisg IHJldHVybiAwOworfQorCitzdGF0aWMgc2lnbmVkIGNoYXIKK3Byb2Nlc3NfbSAoY2hhciAqYnVm ZmVyKSBGQVNUQ0FMTAorey8qIG1BQS4uQUEsTExMTCAgUmVhZCBMTExMIGJ5dGVzIGF0IGFkZHJl c3MgQUEuLkFBICovCisgIGNoYXIgKnAgPSAmYnVmZmVyWzFdOworICBieXRlICphZGRyID0gKHZv aWQqKWhleDJpbnQoJnApOworICBpZiAoKnArKyAhPSAnLCcpCisgICAgcmV0dXJuIDE7CisgIHVu c2lnbmVkIGxlbiA9ICh1bnNpZ25lZCloZXgyaW50KCZwKTsKKyAgaWYgKGxlbiA9PSAwKQorICAg IHJldHVybiAyOworICBpZiAobGVuID4gREJHX1BBQ0tFVF9TSVpFLzIpCisgICAgcmV0dXJuIDM7 CisgIHAgPSBidWZmZXI7CisjaWZkZWYgREJHX01FTUNQWQorICBkbworICAgIHsKKyAgICAgIGJ5 dGUgdG1wWzE2XTsKKyAgICAgIHVuc2lnbmVkIHRsZW4gPSBzaXplb2YodG1wKTsKKyAgICAgIGlm ICh0bGVuID4gbGVuKQorCXRsZW4gPSBsZW47CisgICAgICBpZiAoIURCR19NRU1DUFkodG1wLCBh ZGRyLCB0bGVuKSkKKwlyZXR1cm4gNDsKKyAgICAgIHAgPSBtZW0yaGV4IChwLCB0bXAsIHRsZW4p OworICAgICAgYWRkciArPSB0bGVuOworICAgICAgbGVuIC09IHRsZW47CisgICAgfQorICB3aGls ZSAobGVuKTsKKyNlbHNlCisgIHAgPSBtZW0yaGV4IChwLCBhZGRyLCBsZW4pOworI2VuZGlmCisg IHJldHVybiAwOworfQorCitzdGF0aWMgc2lnbmVkIGNoYXIKK3Byb2Nlc3NfTSAoY2hhciAqYnVm ZmVyKSBGQVNUQ0FMTAorey8qIE1BQS4uQUEsTExMTDogV3JpdGUgTExMTCBieXRlcyBhdCBhZGRy ZXNzIEFBLkFBIHJldHVybiBPSyAqLworICBjaGFyICpwID0gJmJ1ZmZlclsxXTsKKyAgYnl0ZSAq YWRkciA9ICh2b2lkKiloZXgyaW50KCZwKTsKKyAgaWYgKCpwICE9ICcsJykKKyAgICByZXR1cm4g MTsKKyAgKytwOworICB1bnNpZ25lZCBsZW4gPSAodW5zaWduZWQpaGV4MmludCgmcCk7CisgIGlm ICgqcCsrICE9ICc6JykKKyAgICByZXR1cm4gMjsKKyAgaWYgKGxlbiA9PSAwKQorICAgIGdvdG8g ZW5kOworICBpZiAobGVuKjIgKyAocCAtIGJ1ZmZlcikgPiBEQkdfUEFDS0VUX1NJWkUpCisgICAg cmV0dXJuIDM7CisjaWZkZWYgREJHX01FTUNQWQorICBkbworICAgIHsKKyAgICAgIGJ5dGUgdG1w WzE2XTsKKyAgICAgIHVuc2lnbmVkIHRsZW4gPSBzaXplb2YodG1wKTsKKyAgICAgIGlmICh0bGVu ID4gbGVuKQorCXRsZW4gPSBsZW47CisgICAgICBwID0gaGV4Mm1lbSAodG1wLCBwLCB0bGVuKTsK KyAgICAgIGlmICghREJHX01FTUNQWShhZGRyLCB0bXAsIHRsZW4pKQorCXJldHVybiA0OworICAg ICAgYWRkciArPSB0bGVuOworCWxlbiAtPSB0bGVuOworICAgIH0KKyAgd2hpbGUgKGxlbik7Cisj ZWxzZQorICBoZXgybWVtIChhZGRyLCBwLCBsZW4pOworI2VuZGlmCitlbmQ6CisgIC8qIE9LIHJl c3BvbnNlICovCisgICpidWZmZXIgPSAnXDAnOworICByZXR1cm4gMDsKK30KKworI2lmbmRlZiBE QkdfTUlOX1NJWkUKK3N0YXRpYyBzaWduZWQgY2hhcgorcHJvY2Vzc19YIChjaGFyICpidWZmZXIp IEZBU1RDQUxMCit7LyogWEFBLi5BQSxMTExMOiBXcml0ZSBMTExMIGJpbmFyeSBieXRlcyBhdCBh ZGRyZXNzIEFBLkFBIHJldHVybiBPSyAqLworICBjaGFyICpwID0gJmJ1ZmZlclsxXTsKKyAgYnl0 ZSAqYWRkciA9ICh2b2lkKiloZXgyaW50KCZwKTsKKyAgaWYgKCpwICE9ICcsJykKKyAgICByZXR1 cm4gMTsKKyAgKytwOworICB1bnNpZ25lZCBsZW4gPSAodW5zaWduZWQpaGV4MmludCgmcCk7Cisg IGlmICgqcCsrICE9ICc6JykKKyAgICByZXR1cm4gMjsKKyAgaWYgKGxlbiA9PSAwKQorICAgIGdv dG8gZW5kOworICBpZiAobGVuICsgKHAgLSBidWZmZXIpID4gREJHX1BBQ0tFVF9TSVpFKQorICAg IHJldHVybiAzOworI2lmZGVmIERCR19NRU1DUFkKKyAgaWYgKCFEQkdfTUVNQ1BZKGFkZHIsIHAs IGxlbikpCisgICAgcmV0dXJuIDQ7CisjZWxzZQorICBtZW1jcHkgKGFkZHIsIHAsIGxlbik7Cisj ZW5kaWYKK2VuZDoKKyAgLyogT0sgcmVzcG9uc2UgKi8KKyAgKmJ1ZmZlciA9ICdcMCc7CisgIHJl dHVybiAwOworfQorI2Vsc2UgLyogREJHX01JTl9TSVpFICovCitzdGF0aWMgc2lnbmVkIGNoYXIK K3Byb2Nlc3NfWCAoY2hhciAqYnVmZmVyKSBGQVNUQ0FMTAoreworICAodm9pZClidWZmZXI7Cisg IHJldHVybiAtMTsKK30KKyNlbmRpZiAvKiBEQkdfTUlOX1NJWkUgKi8KKworc3RhdGljIHNpZ25l ZCBjaGFyCitwcm9jZXNzX2MgKGNoYXIgKmJ1ZmZlcikgRkFTVENBTEwKK3svKiAnY0FBQUEnIC0g Q29udGludWUgYXQgYWRkcmVzcyBBQUFBKG9wdGlvbmFsKSAqLworICBjb25zdCBjaGFyICpwID0g JmJ1ZmZlclsxXTsKKyAgaWYgKCpwICE9ICdcMCcpCisgICAgeworICAgICAgdm9pZCAqYWRkciA9 ICh2b2lkKiloZXgyaW50KCZwKTsKKyAgICAgIHNldF9yZWdfdmFsdWUgKCZzdGF0ZVtSX1BDXSwg YWRkcik7CisgICAgfQorICByZXN0X2NwdV9zdGF0ZSAoKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBzaWduZWQgY2hhcgorcHJvY2Vzc19EIChjaGFyICpidWZmZXIpIEZBU1RDQUxMCit7Lyog J0QnIC0gZGV0YWNoIHRoZSBwcm9ncmFtOiBjb250aW51ZSBleGVjdXRpb24gKi8KKyAgKmJ1ZmZl ciA9ICdcMCc7CisgIHJldHVybiAtMjsKK30KKworc3RhdGljIHNpZ25lZCBjaGFyCitwcm9jZXNz X2sgKGNoYXIgKmJ1ZmZlcikgRkFTVENBTEwKK3svKiAnaycgLSBLaWxsIHRoZSBwcm9ncmFtICov CisgIHNldF9yZWdfdmFsdWUgKCZzdGF0ZVtSX1BDXSwgMCk7CisgIHJlc3RfY3B1X3N0YXRlICgp OworICAodm9pZClidWZmZXI7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgc2lnbmVkIGNoYXIK K3Byb2Nlc3NfdiAoY2hhciAqYnVmZmVyKSBGQVNUQ0FMTAoreworI2lmbmRlZiBEQkdfTUlOX1NJ WkUKKyAgaWYgKG1lbWNtcCAoJmJ1ZmZlclsxXSwgIkNvbnQiLCA0KSA9PSAwKQorICAgIHsKKyAg ICAgIGlmIChidWZmZXJbNV0gPT0gJz8nKQorCXsKKwkgIC8qIHJlc3VsdCByZXNwb25zZSB3aWxs IGJlICJ2Q29udDtjO0MiOyBDIGFjdGlvbiBtdXN0IGJlCisJICAgICBzdXBwb3J0ZWQgdG9vLCBi ZWNhdXNlIEdEQiByZWd1aXJlcyBhdCBsZWFzZSBib3RoIG9mIHRoZW0gKi8KKwkgIG1lbWNweSAo JmJ1ZmZlcls1XSwgIjtjO0MiLCA1KTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIGJ1ZmZlclsw XSA9ICdcMCc7CisgICAgICBpZiAoYnVmZmVyWzVdID09ICc7JyAmJiAoYnVmZmVyWzZdID09ICdj JyB8fCBidWZmZXJbNl0gPT0gJ0MnKSkKKwlyZXR1cm4gLTI7IC8qIHJlc3VtZSBleGVjdXRpb24g Ki8KKyAgICAgIHJldHVybiAxOworICB9CisjZW5kaWYgLyogREJHX01JTl9TSVpFICovCisgIHJl dHVybiAtMTsKK30KKworc3RhdGljIHNpZ25lZCBjaGFyCitwcm9jZXNzX3paIChjaGFyICpidWZm ZXIpIEZBU1RDQUxMCit7IC8qIGluc2VydC9yZW1vdmUgYnJlYWtwb2ludCAqLworI2lmIGRlZmlu ZWQoREJHX1NXQlJFQUtfUFJPQykgfHwgZGVmaW5lZChEQkdfSFdCUkVBSykgfHwgXAorICAgIGRl ZmluZWQoREJHX1dXQVRDSCkgfHwgZGVmaW5lZChEQkdfUldBVENIKSB8fCBkZWZpbmVkKERCR19B V0FUQ0gpCisgIGNvbnN0IGJ5dGUgc2V0ID0gKCpidWZmZXIgPT0gJ1onKTsKKyAgY29uc3QgY2hh ciAqcCA9ICZidWZmZXJbM107CisgIHZvaWQgKmFkZHIgPSAodm9pZCopaGV4MmludCgmcCk7Cisg IGlmICgqcCAhPSAnLCcpCisgICAgcmV0dXJuIDE7CisgIHArKzsKKyAgaW50IGtpbmQgPSBoZXgy aW50KCZwKTsKKyAgKmJ1ZmZlciA9ICdcMCc7CisgIHN3aXRjaCAoYnVmZmVyWzFdKQorICAgIHsK KyNpZmRlZiBEQkdfU1dCUkVBS19QUk9DCisgICAgY2FzZSAnMCc6IC8qIHN3IGJyZWFrICovCisg ICAgICByZXR1cm4gREJHX1NXQlJFQUtfUFJPQyhzZXQsIGFkZHIpOworI2VuZGlmCisjaWZkZWYg REJHX0hXQlJFQUsKKyAgICBjYXNlICcxJzogLyogaHcgYnJlYWsgKi8KKyAgICAgIHJldHVybiBE QkdfSFdCUkVBSyhzZXQsIGFkZHIpOworI2VuZGlmCisjaWZkZWYgREJHX1dXQVRDSAorICAgIGNh c2UgJzInOiAvKiB3cml0ZSB3YXRjaCAqLworICAgICAgcmV0dXJuIERCR19XV0FUQ0goc2V0LCBh ZGRyLCBraW5kKTsKKyNlbmRpZgorI2lmZGVmIERCR19SV0FUQ0gKKyAgICBjYXNlICczJzogLyog cmVhZCB3YXRjaCAqLworICAgICAgcmV0dXJuIERCR19SV0FUQ0goc2V0LCBhZGRyLCBraW5kKTsK KyNlbmRpZgorI2lmZGVmIERCR19BV0FUQ0gKKyAgICBjYXNlICc0JzogLyogYWNjZXNzIHdhdGNo ICovCisgICAgICByZXR1cm4gREJHX0FXQVRDSChzZXQsIGFkZHIsIGtpbmQpOworI2VuZGlmCisg ICAgZGVmYXVsdDo7IC8qIG5vdCBzdXBwb3J0ZWQgKi8KKyAgICB9CisjZW5kaWYKKyAgKHZvaWQp YnVmZmVyOworICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBzaWduZWQgY2hhcgorZG9fcHJvY2Vz cyAoY2hhciAqYnVmZmVyKSBGQVNUQ0FMTAoreworICBzd2l0Y2ggKCpidWZmZXIpCisgICAgewor ICAgIGNhc2UgJz8nOiByZXR1cm4gcHJvY2Vzc19xdWVzdGlvbiAoYnVmZmVyKTsKKyAgICBjYXNl ICdHJzogcmV0dXJuIHByb2Nlc3NfRyAoYnVmZmVyKTsKKyAgICBjYXNlICdrJzogcmV0dXJuIHBy b2Nlc3NfayAoYnVmZmVyKTsKKyAgICBjYXNlICdNJzogcmV0dXJuIHByb2Nlc3NfTSAoYnVmZmVy KTsKKyAgICBjYXNlICdYJzogcmV0dXJuIHByb2Nlc3NfWCAoYnVmZmVyKTsKKyAgICBjYXNlICda JzogcmV0dXJuIHByb2Nlc3NfelogKGJ1ZmZlcik7CisgICAgY2FzZSAnYyc6IHJldHVybiBwcm9j ZXNzX2MgKGJ1ZmZlcik7CisgICAgY2FzZSAnRCc6IHJldHVybiBwcm9jZXNzX0QgKGJ1ZmZlcik7 CisgICAgY2FzZSAnZyc6IHJldHVybiBwcm9jZXNzX2cgKGJ1ZmZlcik7CisgICAgY2FzZSAnbSc6 IHJldHVybiBwcm9jZXNzX20gKGJ1ZmZlcik7CisgICAgY2FzZSAncSc6IHJldHVybiBwcm9jZXNz X3EgKGJ1ZmZlcik7CisgICAgY2FzZSAndic6IHJldHVybiBwcm9jZXNzX3YgKGJ1ZmZlcik7Cisg ICAgY2FzZSAneic6IHJldHVybiBwcm9jZXNzX3paIChidWZmZXIpOworICAgIGRlZmF1bHQ6ICBy ZXR1cm4gLTE7IC8qIGVtcHR5IHJlc3BvbnNlICovCisgICAgfQorfQorCitzdGF0aWMgY2hhcgor cHJvY2VzcyAoY2hhciAqYnVmZmVyKSBGQVNUQ0FMTAoreworICBzaWduZWQgY2hhciBlcnIgPSBk b19wcm9jZXNzIChidWZmZXIpOworICBjaGFyICpwID0gYnVmZmVyOworICBjaGFyIHJldCA9IDE7 CisgIGlmIChlcnIgPT0gLTIpCisgICAgeworICAgICAgcmV0ID0gMDsKKyAgICAgIGVyciA9IDA7 CisgICAgfQorICBpZiAoZXJyID4gMCkKKyAgICB7CisgICAgICAqcCsrID0gJ0UnOworICAgICAg cCA9IGJ5dGUyaGV4IChwLCBlcnIpOworICAgICAgKnAgPSAnXDAnOworICAgIH0KKyAgZWxzZSBp ZiAoZXJyIDwgMCkKKyAgICB7CisgICAgICAqcCA9ICdcMCc7CisgICAgfQorICBlbHNlIGlmICgq cCA9PSAnXDAnKQorICAgIG1lbWNweShwLCAiT0siLCAzKTsKKyAgcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGNoYXIgKgorYnl0ZTJoZXggKGNoYXIgKnAsIGJ5dGUgdikKK3sKKyAgKnArKyA9IGhp Z2hfaGV4ICh2KTsKKyAgKnArKyA9IGxvd19oZXggKHYpOworICByZXR1cm4gcDsKK30KKworc3Rh dGljIHNpZ25lZCBjaGFyCitoZXgydmFsICh1bnNpZ25lZCBjaGFyIGhleCkgRkFTVENBTEwKK3sK KyAgaWYgKGhleCA8PSAnOScpCisgICAgcmV0dXJuIGhleCAtICcwJzsKKyAgaGV4ICY9IDB4ZGY7 IC8qIG1ha2UgdXBwZXJjYXNlICovCisgIGhleCAtPSAnQScgLSAxMDsKKyAgcmV0dXJuIChoZXgg Pj0gMTAgJiYgaGV4IDwgMTYpID8gaGV4IDogLTE7Cit9CisKK3N0YXRpYyBpbnQKK2hleDJieXRl IChjb25zdCBjaGFyICpwKSBGQVNUQ0FMTAoreworICBzaWduZWQgY2hhciBoID0gaGV4MnZhbCAo cFswXSk7CisgIHNpZ25lZCBjaGFyIGwgPSBoZXgydmFsIChwWzFdKTsKKyAgaWYgKGggPCAwIHx8 IGwgPCAwKQorICAgIHJldHVybiAtMTsKKyAgcmV0dXJuIChieXRlKSgoYnl0ZSloIDw8IDQpIHwg KGJ5dGUpbDsKK30KKworc3RhdGljIGludAoraGV4MmludCAoY29uc3QgY2hhciAqKmJ1ZikgRkFT VENBTEwKK3sKKyAgd29yZCByID0gMDsKKyAgZm9yICg7OyAoKmJ1ZikrKykKKyAgICB7CisgICAg ICBzaWduZWQgY2hhciBhID0gaGV4MnZhbCgqKmJ1Zik7CisgICAgICBpZiAoYSA8IDApCisJYnJl YWs7CisgICAgICByIDw8PSA0OworICAgICAgciArPSAoYnl0ZSlhOworICAgIH0KKyAgcmV0dXJu IChpbnQpcjsKK30KKworc3RhdGljIGNoYXIgKgoraW50MmhleCAoY2hhciAqYnVmLCBpbnQgdikK K3sKKyAgYnVmID0gYnl0ZTJoZXgoYnVmLCAod29yZCl2ID4+IDgpOworICByZXR1cm4gYnl0ZTJo ZXgoYnVmLCAoYnl0ZSl2KTsKK30KKworc3RhdGljIGNoYXIKK2hpZ2hfaGV4IChieXRlIHYpIEZB U1RDQUxMCit7CisgIHJldHVybiBsb3dfaGV4KHYgPj4gNCk7Cit9CisKK3N0YXRpYyBjaGFyCits b3dfaGV4IChieXRlIHYpIEZBU1RDQUxMCit7CisvKgorICBfX2FzbQorCWxkCWEsIGwKKwlhbmQJ YSwgIzB4MGYKKwlhZGQJYSwgIzB4OTAKKwlkYWEKKwlhZGMJYSwgIzB4NDAKKwlkYWEKKwlsZAls LCBhCisgIF9fZW5kYXNtOworICAodm9pZCl2OworKi8KKyAgdiAmPSAweDBmOworICB2ICs9ICcw JzsKKyAgaWYgKHYgPCAnOScrMSkKKyAgICByZXR1cm4gdjsKKyAgcmV0dXJuIHYgKyAnYScgLSAn MCcgLSAxMDsKK30KKworLyogY29udmVydCB0aGUgbWVtb3J5LCBwb2ludGVkIHRvIGJ5IG1lbSBp bnRvIGhleCwgcGxhY2luZyByZXN1bHQgaW4gYnVmICovCisvKiByZXR1cm4gYSBwb2ludGVyIHRv IHRoZSBsYXN0IGNoYXIgcHV0IGluIGJ1ZiAobnVsbCkgKi8KK3N0YXRpYyBjaGFyICoKK21lbTJo ZXggKGNoYXIgKmJ1ZiwgY29uc3QgYnl0ZSAqbWVtLCB1bnNpZ25lZCBieXRlcykKK3sKKyAgaWYg KGJ5dGVzICE9IDApCisgICAgeworICAgICAgZG8KKwl7CisJICBidWYgPSBieXRlMmhleCAoYnVm LCAqbWVtKyspOworCX0KKyAgICAgIHdoaWxlICgtLWJ5dGVzKTsKKyAgICB9CisgICpidWYgPSAw OworICByZXR1cm4gYnVmOworfQorCisvKiBjb252ZXJ0IHRoZSBoZXggYXJyYXkgcG9pbnRlZCB0 byBieSBidWYgaW50byBiaW5hcnksIHRvIGJlIHBsYWNlZCBpbiBtZW0KKyAgIHJldHVybiBhIHBv aW50ZXIgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgbGFzdCBieXRlIHdyaXR0ZW4gKi8KKwor c3RhdGljIGNvbnN0IGNoYXIgKgoraGV4Mm1lbSAoYnl0ZSAqbWVtLCBjb25zdCBjaGFyICpidWYs IHVuc2lnbmVkIGJ5dGVzKQoreworICBpZiAoYnl0ZXMgIT0gMCkKKyAgICB7CisgICAgICBkbwor CXsKKwkgICptZW0rKyA9IGhleDJieXRlIChidWYpOworCSAgYnVmICs9IDI7CisJfQorICAgICAg d2hpbGUgKC0tYnl0ZXMpOworICAgIH0KKyAgcmV0dXJuIGJ1ZjsKK30KKworI2lmZGVmIERCR19N RU1PUllfTUFQCitzdGF0aWMgdm9pZAorcmVhZF9tZW1vcnlfbWFwIChjaGFyICpidWZmZXIsIHVu c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICBjb25zdCBjaGFyICptYXAgPSBE QkdfTUVNT1JZX01BUDsKKyAgY29uc3QgdW5zaWduZWQgbWFwX3N6ID0gc3RybGVuKG1hcCk7Cisg IGlmIChvZmZzZXQgPj0gbWFwX3N6KQorICAgIHsKKyAgICAgIGJ1ZmZlclswXSA9ICdsJzsKKyAg ICAgIGJ1ZmZlclsxXSA9ICdcMCc7CisgICAgICByZXR1cm47CisgICAgfQorICBpZiAob2Zmc2V0 ICsgbGVuZ3RoID4gbWFwX3N6KQorICAgIGxlbmd0aCA9IG1hcF9zeiAtIG9mZnNldDsKKyAgYnVm ZmVyWzBdID0gJ20nOworICBtZW1jcHkgKCZidWZmZXJbMV0sICZtYXBbb2Zmc2V0XSwgbGVuZ3Ro KTsKKyAgYnVmZmVyWzErbGVuZ3RoXSA9ICdcMCc7Cit9CisjZW5kaWYKKworLyogd3JpdGUgc3Ry aW5nIGxpa2UgIiBubjowMTIzIiBhbmQgcmV0dXJuIHBvaW50ZXIgYWZ0ZXIgaXQgKi8KKyNpZm5k ZWYgREJHX01JTl9TSVpFCitzdGF0aWMgY2hhciAqCitmb3JtYXRfcmVnX3ZhbHVlIChjaGFyICpw LCB1bnNpZ25lZCByZWdfbnVtLCBjb25zdCBieXRlICp2YWx1ZSkKK3sKKyAgY2hhciAqZCA9IHA7 CisgIHVuc2lnbmVkIGNoYXIgaTsKKyAgZCA9IGJ5dGUyaGV4KGQsIHJlZ19udW0pOworICAqZCsr ID0gJzonOworICB2YWx1ZSArPSBSRUdfU0laRTsKKyAgaSA9IFJFR19TSVpFOworICBkbworICAg IHsKKyAgICAgIGQgPSBieXRlMmhleChkLCAqLS12YWx1ZSk7CisgICAgfQorICB3aGlsZSAoLS1p ICE9IDApOworICAqZCsrID0gJzsnOworICByZXR1cm4gZDsKK30KKyNlbmRpZiAvKiBEQkdfTUlO X1NJWkUgKi8KKworI2lmZGVmIF9fU0RDQ19nYno4MAorLyogc2F2ZXMgYWxsIHN0YXRlLmV4Y2Vw dCBQQyBhbmQgU1AgKi8KK3N0YXRpYyB2b2lkCitzYXZlX2NwdV9zdGF0ZSgpIF9fbmFrZWQKK3sK KyAgX19hc20KKwlwdXNoCWFmCisJbGQJYSwgbAorCWxkCSgjX3N0YXRlICsgUl9ITCArIDApLCBh CisJbGQJYSwgaAorCWxkCSgjX3N0YXRlICsgUl9ITCArIDEpLCBhCisJbGQJaGwsICNfc3RhdGUg KyBSX0hMIC0gMQorCWxkCShobCksIGQKKwlkZWMJaGwKKwlsZAkoaGwpLCBlCisJZGVjCWhsCisJ bGQJKGhsKSwgYgorCWRlYwlobAorCWxkCShobCksIGMKKwlkZWMJaGwKKwlwb3AJYmMKKwlsZAko aGwpLCBiCisJZGVjCWhsCisJbGQJKGhsKSwgYworCXJldAorICBfX2VuZGFzbTsKK30KKworLyog cmVzdG9yZSBDUFUgc3RhdGUgYW5kIGNvbnRpbnVlIGV4ZWN1dGlvbiAqLworc3RhdGljIHZvaWQK K3Jlc3RfY3B1X3N0YXRlKCkgX19uYWtlZAoreworICBfX2FzbQorO3Jlc3RvcmUgU1AKKwlsZAlh LCAoI19zdGF0ZSArIFJfU1AgKyAwKQorCWxkCWwsYQorCWxkCWEsICgjX3N0YXRlICsgUl9TUCAr IDEpCisJbGQJaCxhCisJbGQJc3AsIGhsCis7cHVzaCBQQyB2YWx1ZSBhcyByZXR1cm4gYWRkcmVz cworCWxkCWEsICgjX3N0YXRlICsgUl9QQyArIDApCisJbGQJbCwgYQorCWxkCWEsICgjX3N0YXRl ICsgUl9QQyArIDEpCisJbGQJaCwgYQorCXB1c2gJaGwKKztyZXN0b3JlIHJlZ2lzdGVycworCWxk CWhsLCAjX3N0YXRlICsgUl9BRgorCWxkCWMsIChobCkKKwlpbmMJaGwKKwlsZAliLCAoaGwpCisJ aW5jCWhsCisJcHVzaAliYworCWxkCWMsIChobCkKKwlpbmMJaGwKKwlsZAliLCAoaGwpCisJaW5j CWhsCisJbGQJZSwgKGhsKQorCWluYwlobAorCWxkCWQsIChobCkKKwlpbmMJaGwKKwlsZAlhLCAo aGwpCisJaW5jCWhsCisJbGQJaCwgKGhsKQorCWxkCWwsIGEKKwlwb3AJYWYKKwlyZXQKKyAgX19l bmRhc207Cit9CisjZWxzZQorLyogc2F2ZXMgYWxsIHN0YXRlLmV4Y2VwdCBQQyBhbmQgU1AgKi8K K3N0YXRpYyB2b2lkCitzYXZlX2NwdV9zdGF0ZSgpIF9fbmFrZWQKK3sKKyAgX19hc20KKwlsZAko I19zdGF0ZSArIFJfSEwpLCBobAorCWxkCSgjX3N0YXRlICsgUl9ERSksIGRlCisJbGQJKCNfc3Rh dGUgKyBSX0JDKSwgYmMKKwlwdXNoCWFmCisJcG9wCWhsCisJbGQJKCNfc3RhdGUgKyBSX0FGKSwg aGwKKwlsZAlhLCByCTtSIGlzIGluY3JlYXNlZCBieSA3IG9yIGJ5IDggaWYgY2FsbGVkIHZpYSBS U1QKKwlsZAlsLCBhCisJc3ViCWEsICM3CisJeG9yCWEsIGwKKwlhbmQJYSwgIzB4N2YKKwl4b3IJ YSwgbAorI2lmZGVmIF9fU0RDQ19lejgwX2FkbAorCWxkCWhsLCBpCisJZXgJZGUsIGhsCisJbGQJ aGwsICNfc3RhdGUgKyBSX0lSCisJbGQJKGhsKSwgYQorCWluYwlobAorCWxkCShobCksIGUKKwlp bmMJaGwKKwlsZAkoaGwpLCBkCisJbGQJYSwgTUIKKwlsZAkoI19zdGF0ZSArIFJfQUYrMiksIGEK KyNlbHNlCisJbGQJbCwgYQorCWxkCWEsIGkKKwlsZAloLCBhCisJbGQJKCNfc3RhdGUgKyBSX0lS KSwgaGwKKyNlbmRpZiAvKiBfX1NEQ0NfZXo4MF9hZGwgKi8KKwlsZAkoI19zdGF0ZSArIFJfSVgp LCBpeAorCWxkCSgjX3N0YXRlICsgUl9JWSksIGl5CisJZXgJYWYsIGFmJwk7JworCWV4eAorCWxk CSgjX3N0YXRlICsgUl9ITF8pLCBobAorCWxkCSgjX3N0YXRlICsgUl9ERV8pLCBkZQorCWxkCSgj X3N0YXRlICsgUl9CQ18pLCBiYworCXB1c2gJYWYKKwlwb3AJaGwKKwlsZAkoI19zdGF0ZSArIFJf QUZfKSwgaGwKKwlyZXQKKyAgX19lbmRhc207Cit9CisKKy8qIHJlc3RvcmUgQ1BVIHN0YXRlIGFu ZCBjb250aW51ZSBleGVjdXRpb24gKi8KK3N0YXRpYyB2b2lkCityZXN0X2NwdV9zdGF0ZSgpIF9f bmFrZWQKK3sKKyAgX19hc20KKyNpZmRlZiBEQkdfVVNFX1RSQU1QT0xJTkUKKwlsZAlzcCwgX3N0 YWNrICsgREJHX1NUQUNLX1NJWkUKKwlsZAlobCwgKCNfc3RhdGUgKyBSX1BDKQorCXB1c2gJaGwJ LyogcmVzdW1lIGFkZHJlc3MgKi8KKyNpZmRlZiBfX1NEQ0NfZXo4MF9hZGwKKwlsZAlobCwgMHhj MzAwMDAgOyB1c2UgMHhjMzQwMDAgZm9yIGpwLnMKKyNlbHNlCisJbGQJaGwsIDB4YzMwMAorI2Vu ZGlmCisJcHVzaAlobAkvKiBKUCBvcGNvZGUgKi8KKyNlbmRpZiAvKiBEQkdfVVNFX1RSQU1QT0xJ TkUgKi8KKwlsZAlobCwgKCNfc3RhdGUgKyBSX0FGXykKKwlwdXNoCWhsCisJcG9wCWFmCisJbGQJ YmMsICgjX3N0YXRlICsgUl9CQ18pCisJbGQJZGUsICgjX3N0YXRlICsgUl9ERV8pCisJbGQJaGws ICgjX3N0YXRlICsgUl9ITF8pCisJZXh4CisJZXgJYWYsIGFmJwk7JworCWxkCWl5LCAoI19zdGF0 ZSArIFJfSVkpCisJbGQJaXgsICgjX3N0YXRlICsgUl9JWCkKKyNpZmRlZiBfX1NEQ0NfZXo4MF9h ZGwKKwlsZAlhLCAoI19zdGF0ZSArIFJfQUYgKyAyKQorCWxkCU1CLCBhCisJbGQJaGwsICgjX3N0 YXRlICsgUl9JUiArIDEpIDtJIHJlZ2lzdGVyCisJbGQJaSwgaGwKKwlsZAlhLCAoI19zdGF0ZSAr IFJfSVIgKyAwKSA7IFIgcmVnaXN0ZXIKKwlsZAlsLCBhCisjZWxzZQorCWxkCWhsLCAoI19zdGF0 ZSArIFJfSVIpCisJbGQJYSwgaAorCWxkCWksIGEKKwlsZAlhLCBsCisjZW5kaWYgLyogX19TREND X2V6ODBfYWRsICovCisJc3ViCWEsICMxMAk7bnVtYmVyIG9mIE0xIGN5Y2xlcyBhZnRlciBsZCBy LGEKKwl4b3IJYSwgbAorCWFuZAlhLCAjMHg3ZgorCXhvcglhLCBsCisJbGQJciwgYQorCWxkCWRl LCAoI19zdGF0ZSArIFJfREUpCisJbGQJYmMsICgjX3N0YXRlICsgUl9CQykKKwlsZAlobCwgKCNf c3RhdGUgKyBSX0FGKQorCXB1c2gJaGwKKwlwb3AJYWYKKwlsZAlzcCwgKCNfc3RhdGUgKyBSX1NQ KQorI2lmbmRlZiBEQkdfVVNFX1RSQU1QT0xJTkUKKwlsZAlobCwgKCNfc3RhdGUgKyBSX1BDKQor CXB1c2gJaGwKKwlsZAlobCwgKCNfc3RhdGUgKyBSX0hMKQorCURCR19SRVNVTUUKKyNlbHNlCisJ bGQJaGwsICgjX3N0YXRlICsgUl9ITCkKKyNpZmRlZiBfX1NEQ0NfZXo4MF9hZGwKKwlqcAkjX3N0 YWNrICsgREJHX1NUQUNLX1NJWkUgLSA0CisjZWxzZQorCWpwCSNfc3RhY2sgKyBEQkdfU1RBQ0tf U0laRSAtIDMKKyNlbmRpZgorI2VuZGlmIC8qIERCR19VU0VfVFJBTVBPTElORSAqLworICBfX2Vu ZGFzbTsKK30KKyNlbmRpZiAvKiBfX1NEQ0NfZ2J6ODAgKi8KZGlmZiAtLWdpdCBhL2dkYi96ODAt dGRlcC5jIGIvZ2RiL3o4MC10ZGVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uMzlkMTUwN2U0NwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi96ODAtdGRlcC5jCkBAIC0w LDAgKzEsMTQ2NSBAQAorLyogVGFyZ2V0LWRlcGVuZGVudCBjb2RlIGZvciB0aGUgWjgwLgorCisg ICBDb3B5cmlnaHQgKEMpIDE5ODYtMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uICAqLworCisjaW5jbHVkZSAiZGVmcy5oIgorI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKyNp bmNsdWRlICJkaXMtYXNtLmgiCisjaW5jbHVkZSAiZnJhbWUuaCIKKyNpbmNsdWRlICJmcmFtZS11 bndpbmQuaCIKKyNpbmNsdWRlICJmcmFtZS1iYXNlLmgiCisjaW5jbHVkZSAidHJhZC1mcmFtZS5o IgorI2luY2x1ZGUgImdkYmNtZC5oIgorI2luY2x1ZGUgImdkYmNvcmUuaCIKKyNpbmNsdWRlICJn ZGJ0eXBlcy5oIgorI2luY2x1ZGUgImluZmVyaW9yLmgiCisjaW5jbHVkZSAib2JqZmlsZXMuaCIK KyNpbmNsdWRlICJzeW1maWxlLmgiCisKKyNpbmNsdWRlICJ6ODAtdGRlcC5oIgorI2luY2x1ZGUg ImZlYXR1cmVzL3o4MC5jIgorCisvKiBZb3UgbmVlZCB0byBkZWZpbmUgX19nZGJfYnJlYWtfaGFu ZGxlciBzeW1ib2wgcG9pbnRpbmcgdG8gdGhlIGJyZWFrcG9pbnQKKyAgIGhhbmRsZXIuIFZhbHVl IG9mIHRoZSBzeW1ib2wgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBpbnN0cnVjdGlvbiBmb3IK KyAgIHNvZnR3YXJlIGJyZWFrcG9pbnQuIElmIF9fZ2RiX2JyZWFrX2hhbmRsZXIgcG9pbnRzIHRv IG9uZSBvZiBzdGFuZGFyZCBSU1QKKyAgIGFkZHJlc3NlcyAoMHgwMCwgMHgwOCwgMHgxMCwuLi4g MHgzOCkgdGhlbiBSU1QgX19nZGJfYnJlYWtfaGFuZGxlcgorICAgaW5zdHJ1Y3Rpb24gd2lsbCBi ZSB1c2VkLCBlbHNlIENBTEwgX19nZGJfYnJlYWtfaGFuZGxlcgorO2JyZWFrcG9pbnQgaGFuZGxl cgorCS5nbG9ibAlfX2dkYl9icmVha19oYW5kbGVyCisJLm9yZwk4CitfX2dkYl9icmVha19oYW5k bGVyOgorCWpwCV9kZWJ1Z19zd2JyZWFrCisqLworCisvKiBtZWFuaW5nIG9mIHRlcm1zICJwcmV2 aW91cyIgYW5kICJuZXh0IjoKKyAgIHByZXZpb3VzIGZyYW1lIC0gZnJhbWUgb2YgY2FsbGVlLCB3 aGljaCBpcyBjYWxsZWQgYnkgY3VycmVudCBmdW5jdGlvbgorICAgY3VycmVudCBmcmFtZSAtIGZy YW1lIG9mIGN1cnJlbnQgZnVuY3Rpb24gd2hpY2ggaGFzIGNhbGxlZCBjYWxsZWUKKyAgIG5leHQg ZnJhbWUgLSBmcmFtZSBvZiBjYWxsZXIsIHdoaWNoIGhhcyBjYWxsZWQgY3VycmVudCBmdW5jdGlv bgorKi8KKworc3RydWN0IGdkYmFyY2hfdGRlcAoreworICAvKiBOdW1iZXIgb2YgYnl0ZXMgdXNl ZCBmb3IgYWRkcmVzczoKKyAgICAgIDIgYnl0ZXMgZm9yIGFsbCBaODAgZmFtaWx5CisgICAgICAz IGJ5dGVzIGZvciBlWjgwIENQVXMgb3BlcmF0aW5nIGluIEFETCBtb2RlICovCisgIGludCBhZGRy X2xlbmd0aDsKKworICAvKiBUeXBlIGZvciB2b2lkLiAgKi8KKyAgc3RydWN0IHR5cGUgKnZvaWRf dHlwZTsKKyAgLyogVHlwZSBmb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgdm9pZC4gICovCisgIHN0 cnVjdCB0eXBlICpmdW5jX3ZvaWRfdHlwZTsKKyAgLyogVHlwZSBmb3IgYSBwb2ludGVyIHRvIGEg ZnVuY3Rpb24uICBVc2VkIGZvciB0aGUgdHlwZSBvZiBQQy4gICovCisgIHN0cnVjdCB0eXBlICpw Y190eXBlOworfTsKKworLyogQXQgYW55IHRpbWUgc3RhY2sgZnJhbWUgY29udGFpbnMgZm9sbG93 aW5nIHBhcnRzOgorICAgWzxjdXJyZW50IFBDPl0KKyAgIFs8dGVtcG9yYXJpZXMsIHkgYnl0ZXM+ XQorICAgWzxsb2NhbCB2YXJpYWJsZXMsIHggYnl0ZXM+CisgICA8bmV4dCBmcmFtZSBGUD5dCisg ICBbPHNhdmVkIHN0YXRlIChjcml0aWNhbCBvciBpbnRlcnJ1cHQgZnVuY3Rpb25zKSwgMiBvciAx MCBieXRlcz5dCisgICBJbiBzaW1wbGVzdCBjYXNlIDxuZXh0IFBDPiBpcyBwb2ludGVyIHRvIHRo ZSBjYWxsIGluc3RydWN0aW9uCisgICAob3IgY2FsbCBfX2NhbGxfaGwpLiBUaGVyZSBhcmUgbW9y ZSBkaWZmaWN1bHQgY2FzZXM6IGludGVycnVwdCBoYW5kbGVyIG9yCisgICBwdXNoL3JldCBhbmQg anA7IGJ1dCB0aGV5IGFyZSB1bnRyYWNrYWJsZS4KKyovCisKK3N0cnVjdCB6ODBfdW53aW5kX2Nh Y2hlCit7CisgIC8qIFRoZSBwcmV2aW91cyBmcmFtZSdzIGlubmVyIG1vc3Qgc3RhY2sgYWRkcmVz cyAoU1AgYWZ0ZXIgY2FsbCBleGVjdXRlZCksCisgICAgIGl0IGlzIGN1cnJlbnQgZnJhbWUncyBm cmFtZV9pZCAqLworICBDT1JFX0FERFIgcHJldl9zcDsKKworICAvKiBTaXplIG9mIHRoZSBmcmFt ZSwgcHJldl9zcCArIHNpemUgPSBuZXh0X2ZyYW1lLnByZXZfc3AgKi8KKyAgVUxPTkdFU1Qgc2l6 ZTsKKworICAvKiBzaXplIG9mIHNhdmVkIHN0YXRlIChpbmNsdWRpbmcgZnJhbWUgcG9pbnRlciBh bmQgcmV0dXJuIGFkZHJlc3MpLAorICAgICBhc3N1bWU6IHByZXZfc3AgKyBzaXplID0gSVggKyBz dGF0ZV9zaXplICovCisgIFVMT05HRVNUIHN0YXRlX3NpemU7CisKKyAgc3RydWN0IHsKKyAgICBp bnQgY2FsbGVkOjE7CS8qIHRoZXJlIGlzIHJldHVybiBhZGRyZXNzIG9uIHN0YWNrICovCisgICAg aW50IGxvYWRfYXJnczoxOwkvKiBwcm9sb2d1ZXMgbG9hZHMgYXJncyB1c2luZyBQT1BzICovCisg ICAgaW50IGZwX3NkY2M6MTsJLyogcHJvbG9ndWUgc2F2ZXMgYW5kIGFkanVzdHMgZnJhbWUgcG9p bnRlciBJWCAqLworICAgIGludCBpbnRlcnJ1cHQ6MTsJLyogX19pbnRlcnJ1cHQgaGFuZGxlciAq LworICAgIGludCBjcml0aWNhbDoxOwkvKiBfX2NyaXRpY2FsIGZ1bmN0aW9uICovCisgIH0gcHJv bG9ndWVfdHlwZTsKKyAgLyogVGFibGUgaW5kaWNhdGluZyB0aGUgbG9jYXRpb24gb2YgZWFjaCBh bmQgZXZlcnkgcmVnaXN0ZXIuICAqLworICBzdHJ1Y3QgdHJhZF9mcmFtZV9zYXZlZF9yZWcgKnNh dmVkX3JlZ3M7Cit9OworCitlbnVtIGluc3RydWN0aW9uX3R5cGUKK3sKKyAgaW5zbl9kZWZhdWx0 LAorICBpbnNuX3o4MCwKKyAgaW5zbl9hZGwsCisgIGluc25fejgwX2VkLAorICBpbnNuX2FkbF9l ZCwKKyAgaW5zbl96ODBfZGRmZCwKKyAgaW5zbl9hZGxfZGRmZCwKKyAgaW5zbl9kam56X2QsCisg IGluc25fanJfZCwKKyAgaW5zbl9qcl9jY19kLAorICBpbnNuX2pwX25uLAorICBpbnNuX2pwX3Jy LAorICBpbnNuX2pwX2NjX25uLAorICBpbnNuX2NhbGxfbm4sCisgIGluc25fY2FsbF9jY19ubiwK KyAgaW5zbl9yc3RfbiwKKyAgaW5zbl9yZXQsCisgIGluc25fcmV0X2NjLAorICBpbnNuX3B1c2hf cnIsCisgIGluc25fcG9wX3JyLAorICBpbnNuX2RlY19zcCwKKyAgaW5zbl9pbmNfc3AsCisgIGlu c25fbGRfc3Bfbm4sCisgIGluc25fbGRfc3BfNm5uOSwgLyogbGQgc3AsIChubikgKi8KKyAgaW5z bl9sZF9zcF9yciwKKyAgaW5zbl9mb3JjZV9ub3AgLyogaW52YWxpZCBvcGNvZGUgcHJlZml4ICov Cit9OworCitzdHJ1Y3QgaW5zbl9pbmZvCit7CisgIGdkYl9ieXRlIGNvZGU7CisgIGdkYl9ieXRl IG1hc2s7CisgIGdkYl9ieXRlIHNpemU7IC8qIHdpdGhvdXQgcHJlZml4KGVzKSAqLworICBlbnVt IGluc3RydWN0aW9uX3R5cGUgdHlwZTsKK30gOworCisvKiBDb25zdGFudHMgKi8KKworZXh0ZXJu Citpbml0aWFsaXplX2ZpbGVfZnR5cGUgX2luaXRpYWxpemVfejgwX3RkZXA7CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgaW5zbl9pbmZvICoKK3o4MF9nZXRfaW5zbl9pbmZvIChzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCwgY29uc3QgZ2RiX2J5dGUgKmJ1ZiwgaW50ICpzaXplKTsKKworc3RhdGljIGNv bnN0IGNoYXIgKno4MF9yZWdfbmFtZXNbXSA9Cit7CisgIC8qIDI0IGJpdCBvbiBlWjgwLCBlbHNl IDE2IGJpdCAqLworICAiYWYiLCAiYmMiLCAiZGUiLCAiaGwiLAorICAic3AiLCAicGMiLCAiaXgi LCAiaXkiLAorICAiYWYnIiwgImJjJyIsICJkZSciLCAiaGwnIiwKKyAgImlyIiwKKyAgLyogZVo4 MCBvbmx5ICovCisgICJzcHMiCit9OworCisvKiBSZXR1cm4gdGhlIG5hbWUgb2YgcmVnaXN0ZXIg UkVHTlVNLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3o4MF9yZWdpc3Rlcl9uYW1lIChzdHJ1 Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgaW50IHJlZ251bSkKK3sKKworICBpZiAocmVnbnVtID49IDAg JiYgcmVnbnVtIDwgQVJSQVlfU0laRSAoejgwX3JlZ19uYW1lcykpCisgICAgcmV0dXJuIHo4MF9y ZWdfbmFtZXNbcmVnbnVtXTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogUmV0dXJuIHRoZSB0 eXBlIG9mIGEgcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUuICBPbmx5Cisg ICB0aGUgcmVnaXN0ZXIgY2FjaGUgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseTsg b3RoZXJzIHNob3VsZAorICAgdXNlICJyZWdpc3Rlcl90eXBlIi4gKi8KK3N0YXRpYyBzdHJ1Y3Qg dHlwZSAqCit6ODBfcmVnaXN0ZXJfdHlwZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCBy ZWdfbnIpCit7CisgIHJldHVybiBidWlsdGluX3R5cGUgKGdkYmFyY2gpLT5idWlsdGluX2RhdGFf cHRyOworfQorCisvKiBuZXh0IDIgZnVuY3Rpb25zIGNoZWNrIGJ1ZmZlciBmb3IgaW5zdHJ1Y3Rp b24uIElmIGl0IGlzIHBvcC9wdXNoIHJyLCB0aGVuIGl0CisgICByZXR1cm5zIHJlZ2lzdGVyIG51 bWJlciBPUidlZCB3aXRoIDB4MTAwICovCitzdGF0aWMgaW50Cit6ODBfaXNfcG9wX3JyIChjb25z dCBnZGJfYnl0ZSBidWZbXSwgaW50ICpzaXplKQoreworICBzd2l0Y2ggKGJ1ZlswXSkKKyAgICB7 CisgICAgY2FzZSAweGMxOgorICAgICAgKnNpemUgPSAxOworICAgICAgcmV0dXJuIFo4MF9CQ19S RUdOVU0gfCAweDEwMDsKKyAgICBjYXNlIDB4ZDE6CisgICAgICAqc2l6ZSA9IDE7CisgICAgICBy ZXR1cm4gWjgwX0RFX1JFR05VTSB8IDB4MTAwOworICAgIGNhc2UgMHhlMToKKyAgICAgICpzaXpl ID0gMTsKKyAgICAgIHJldHVybiBaODBfSExfUkVHTlVNIHwgMHgxMDA7CisgICAgY2FzZSAweGYx OgorICAgICAgKnNpemUgPSAxOworICAgICAgcmV0dXJuIFo4MF9BRl9SRUdOVU0gfCAweDEwMDsK KyAgICBjYXNlIDB4ZGQ6CisgICAgICAqc2l6ZSA9IDI7CisgICAgICByZXR1cm4gKGJ1ZlsxXSA9 PSAweGUxKSA/IChaODBfSVhfUkVHTlVNIHwgMHgxMDApIDogMDsKKyAgICBjYXNlIDB4ZmQ6Cisg ICAgICAqc2l6ZSA9IDI7CisgICAgICByZXR1cm4gKGJ1ZlsxXSA9PSAweGUxKSA/IChaODBfSVlf UkVHTlVNIHwgMHgxMDApIDogMDsKKyAgICB9CisgICpzaXplID0gMDsKKyAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQKK3o4MF9pc19wdXNoX3JyIChjb25zdCBnZGJfYnl0ZSBidWZbXSwgaW50 ICpzaXplKQoreworICBzd2l0Y2ggKGJ1ZlswXSkKKyAgICB7CisgICAgY2FzZSAweGM1OgorICAg ICAgKnNpemUgPSAxOworICAgICAgcmV0dXJuIFo4MF9CQ19SRUdOVU0gfCAweDEwMDsKKyAgICBj YXNlIDB4ZDU6CisgICAgICAqc2l6ZSA9IDE7CisgICAgICByZXR1cm4gWjgwX0RFX1JFR05VTSB8 IDB4MTAwOworICAgIGNhc2UgMHhlNToKKyAgICAgICpzaXplID0gMTsKKyAgICAgIHJldHVybiBa ODBfSExfUkVHTlVNIHwgMHgxMDA7CisgICAgY2FzZSAweGY1OgorICAgICAgKnNpemUgPSAxOwor ICAgICAgcmV0dXJuIFo4MF9BRl9SRUdOVU0gfCAweDEwMDsKKyAgICBjYXNlIDB4ZGQ6CisgICAg ICAqc2l6ZSA9IDI7CisgICAgICByZXR1cm4gKGJ1ZlsxXSA9PSAweGU1KSA/IChaODBfSVhfUkVH TlVNIHwgMHgxMDApIDogMDsKKyAgICBjYXNlIDB4ZmQ6CisgICAgICAqc2l6ZSA9IDI7CisgICAg ICByZXR1cm4gKGJ1ZlsxXSA9PSAweGU1KSA/IChaODBfSVlfUkVHTlVNIHwgMHgxMDApIDogMDsK KyAgICB9CisgICpzaXplID0gMDsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEZ1bmN0aW9uOiB6ODBf c2Nhbl9wcm9sb2d1ZQorCisgICBUaGlzIGZ1bmN0aW9uIGRlY29kZXMgYSBmdW5jdGlvbiBwcm9s b2d1ZSB0byBkZXRlcm1pbmU6CisgICAgIDEpIHRoZSBzaXplIG9mIHRoZSBzdGFjayBmcmFtZQor ICAgICAyKSB3aGljaCByZWdpc3RlcnMgYXJlIHNhdmVkIG9uIGl0CisgICAgIDMpIHRoZSBvZmZz ZXRzIG9mIHNhdmVkIHJlZ3MKKyAgIFRoaXMgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIHRoZSB6 ODBfdW53aW5kX2NhY2hlIHN0cnVjdHVyZS4KKyAgIFNtYWxsIFNEQ0MgZnVuY3Rpb25zIG1heSBq dXN0IGxvYWQgYXJncyB1c2luZyBQT1AgaW5zdHJ1Y3Rpb25zIGluIHByb2xvZ3VlOgorCXBvcAlh ZgorCXBvcAlkZQorCXBvcAlobAorCXBvcAliYworCXB1c2gJYmMKKwlwdXNoCWhsCisJcHVzaAlk ZQorCXB1c2gJYWYKKyAgIFNEQ0MgZnVuY3Rpb24gcHJvbG9ndWUgbWF5IGhhdmUgdXAgdG8gMyBz ZWN0aW9ucyAoYWxsIGFyZSBvcHRpb25hbCk6CisgICAgIDEpIHNhdmUgc3RhdGUKKyAgICAgICBh KSBfX2NyaXRpY2FsIGZ1bmN0aW9uczoKKwlsZAlhLGkKKwlkaQorCXB1c2gJYWYKKyAgICAgICBi KSBfX2ludGVycnVwdCAoYm90aCBpbnQgYW5kIG5taSkgZnVuY3Rpb25zOgorCXB1c2gJYWYKKwlw dXNoCWJjCisJcHVzaAlkZQorCXB1c2gJaGwKKwlwdXNoCWl5CisgICAgIDIpIHNhdmUgYW5kIGFk anVzdCBmcmFtZSBwb2ludGVyCisgICAgICAgYSkgY2FsbCB0byBzcGVjaWFsIGZ1bmN0aW9uIChz aXplIG9wdGltaXphdGlvbikKKwljYWxsCV9fX3NkY2NfZW50ZXJfaXgKKyAgICAgICBiKSBpbmxp bmUgKHNwZWVkIG9wdGltaXphdGlvbikKKwlwdXNoCWl4CisJbGQJaXgsICMwCisJYWRkCWl4LCBz cAorICAgICAgIGMpIHdpdGhvdXQgRlAsIGJ1dCBzYXZpbmcgaXQgKElYIGlzIG9wdGltaXplZCBv dXQpCisJcHVzaAlpeAorICAgICAzKSBhbGxvY2F0ZSBsb2NhbCB2YXJpYWJsZXMKKyAgICAgICBh KSB2aWEgc2VyaWVzIG9mIFBVU0ggQUYgYW5kIG9wdGlvbmFsIERFQyBTUCAoc2l6ZSBvcHRpbWl6 YXRpb24pCisJcHVzaAlhZgorCS4uLgorCXB1c2gJYWYKKwlkZWMJc3AJO29wdGlvbmFsLCBpZiBh bGxvY2F0ZWQgb2RkIG51bWJlcnMgb2YgYnl0ZXMKKyAgICAgICBiKSB2aWEgU1AgZGVjcmVtZW50 cworCWRlYwlzcAorCS4uLgorCWRlYwlzcAorICAgICAgIGMpIHZpYSBhZGRpdGlvbiAoZm9yIGxh cmdlIGZyYW1lczogNSsgZm9yIHNwZWVkIGFuZCA5KyBmb3Igc2l6ZSBvcHQuKQorCWxkCWhsLCAj eHh4eAk7c2l6ZSBvZiBzdGFjayBmcmFtZQorCWFkZAlobCwgc3AKKwlsZAlzcCwgaGwKKyAgICAg ICBkKSBzYW1lLCBidXQgdXNpbmcgcmVnaXN0ZXIgSVkgKGFycmF5cyBvciBmb3IgX196ODhka19m YXN0Y2FsbCBmdW5jdGlvbnMpCisJbGQJaXksICN4eHh4CTtzaXplIG9mIHN0YWNrIGZyYW1lCisJ YWRkCWl5LCBzcAorCWxkCXNwLCBpeQorICAgICAgIGUpIHNhbWUgYXMgYywgYnV0IGZvciBlWjgw CisJbGVhCWhsLCBpeCAtICNubgorCWxkCXNwLCBobAorICAgICAgIGYpIHNhbWUgYXMgZCwgYnV0 IGZvciBlWjgwCisJbGVhCWl5LCBpeCAtICNubgorCWxkCXNwLCBpeQorKi8KKworc3RhdGljIGlu dAorejgwX3NjYW5fcHJvbG9ndWUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIg cGNfYmVnLCBDT1JFX0FERFIgcGNfZW5kLAorCQkgICBzdHJ1Y3QgejgwX3Vud2luZF9jYWNoZSAq aW5mbykKK3sKKyAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3Jk ZXIgKGdkYmFyY2gpOworICBpbnQgYWRkcl9sZW4gPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpLT5h ZGRyX2xlbmd0aDsKKyAgZ2RiX2J5dGUgcHJvbG9ndWVbMzJdOyAvKiBtYXggcHJvbG9ndWUgaXMg MjQgYnl0ZXM6IF9faW50ZXJydXB0IHdpdGggbG9jYWwgYXJyYXkgKi8KKyAgaW50IHBvcyA9IDA7 CisgIGludCBsZW47CisgIGludCByZWc7CisgIENPUkVfQUREUiB2YWx1ZTsKKworICBsZW4gPSBw Y19lbmQgLSBwY19iZWc7CisgIGlmIChsZW4gPiAoaW50KXNpemVvZihwcm9sb2d1ZSkpCisgICAg bGVuID0gc2l6ZW9mKHByb2xvZ3VlKTsKKworICByZWFkX21lbW9yeSAocGNfYmVnLCBwcm9sb2d1 ZSwgbGVuKTsKKworICAvKiBzdGFnZTA6IGNoZWNrIGZvciBzZXJpZXMgb2YgUE9QcyBhbmQgdGhl biBQVVNIcyAqLworICBpZiAoKHJlZyA9IHo4MF9pc19wb3BfcnIocHJvbG9ndWUsICZwb3MpKSkK KyAgICB7CisgICAgICBpbnQgaTsKKyAgICAgIGludCBzaXplID0gcG9zOworICAgICAgZ2RiX2J5 dGUgcmVnc1s4XTsgLyogWjgwIGhhdmUgb25seSA2IHJlZ2lzdGVyIHBhaXJzICovCisgICAgICBy ZWdzWzBdID0gcmVnICYgMHhmZjsKKyAgICAgIGZvciAoaSA9IDE7IGkgPCA4ICYmIChyZWdzW2ld ID0gejgwX2lzX3BvcF9yciAoJnByb2xvZ3VlW3Bvc10sICZzaXplKSk7CisJICAgKytpLCBwb3Mg Kz0gc2l6ZSk7CisgICAgICAvKiBub3cgd2UgZXhwZWN0IHNlcmllcyBvZiBQVVNIcyBpbiByZXZl cnNlIG9yZGVyICovCisgICAgICBmb3IgKC0taTsgaSA+PSAwICYmIHJlZ3NbaV0gPT0gejgwX2lz X3B1c2hfcnIgKCZwcm9sb2d1ZVtwb3NdLCAmc2l6ZSk7CisJICAgLS1pLCBwb3MgKz0gc2l6ZSk7 CisgICAgICBpZiAoaSA9PSAtMSAmJiBwb3MgPiAwKQorCWluZm8tPnByb2xvZ3VlX3R5cGUubG9h ZF9hcmdzID0gMTsKKyAgICAgIGVsc2UKKwlwb3MgPSAwOworICAgIH0KKyAgLyogc3RhZ2UxOiBj aGVjayBmb3IgX19pbnRlcnJ1cHQgaGFuZGxlcnMgYW5kIF9fY3JpdGljYWwgZnVuY3Rpb25zICov CisgIGVsc2UgaWYgKCFtZW1jbXAgKCZwcm9sb2d1ZVtwb3NdLCAiXDM1NVwxMjdcMzYzXDM2NSIs IDQpKQorICAgIHsgLyogbGQgYSwgaTsgZGk7IHB1c2ggYWYgKi8KKyAgICAgIGluZm8tPnByb2xv Z3VlX3R5cGUuY3JpdGljYWwgPSAxOworICAgICAgcG9zICs9IDQ7CisgICAgICBpbmZvLT5zdGF0 ZV9zaXplICs9IGFkZHJfbGVuOworICAgIH0KKyAgZWxzZSBpZiAoIW1lbWNtcCAoJnByb2xvZ3Vl W3Bvc10sICJcMzY1XDMwNVwzMjVcMzQ1XDM3NVwzNDUiLCA2KSkKKyAgICB7IC8qIHB1c2ggYWY7 IHB1c2ggYmM7IHB1c2ggZGU7IHB1c2ggaGw7IHB1c2ggaXkgKi8KKyAgICAgIGluZm8tPnByb2xv Z3VlX3R5cGUuaW50ZXJydXB0ID0gMTsKKyAgICAgIHBvcyArPSA2OworICAgICAgaW5mby0+c3Rh dGVfc2l6ZSArPSBhZGRyX2xlbiAqIDU7CisgICAgfQorCisgIC8qIHN0YWdlMjogY2hlY2sgZm9y IEZQIHNhdmluZyBzY2hlbWUgKi8KKyAgaWYgKHByb2xvZ3VlW3Bvc10gPT0gMHhjZCkgLyogY2Fs bCBubiAqLworICAgIHsKKyAgICAgIHN0cnVjdCBib3VuZF9taW5pbWFsX3N5bWJvbCBtc3ltYm9s OworICAgICAgbXN5bWJvbCA9IGxvb2t1cF9taW5pbWFsX3N5bWJvbCAoIl9fc2RjY19lbnRlcl9p eCIsIE5VTEwsIE5VTEwpOworICAgICAgaWYgKG1zeW1ib2wubWluc3ltKQorCXsKKwkgIHZhbHVl ID0gQk1TWU1CT0xfVkFMVUVfQUREUkVTUyAobXN5bWJvbCk7CisJICBpZiAodmFsdWUgPT0gZXh0 cmFjdF91bnNpZ25lZF9pbnRlZ2VyICgmcHJvbG9ndWVbcG9zKzFdLCBhZGRyX2xlbiwgYnl0ZV9v cmRlcikpCisJICAgIHsKKwkgICAgICBwb3MgKz0gMSArIGFkZHJfbGVuOworCSAgICAgIGluZm8t PnByb2xvZ3VlX3R5cGUuZnBfc2RjYyA9IDE7CisJICAgIH0KKwl9CisgICAgfQorICBlbHNlIGlm ICghbWVtY21wICgmcHJvbG9ndWVbcG9zXSwgIlwzMzVcMzQ1XDMzNVwwNDFcMDAwXDAwMCIsIDQr YWRkcl9sZW4pICYmCisJICAgIW1lbWNtcCAoJnByb2xvZ3VlW3Bvcys0K2FkZHJfbGVuXSwgIlwz MzVcMDcxXDMzNVwzNzEiLCA0KSkKKyAgICB7IC8qIHB1c2ggaXg7IGxkIGl4LCAjMDsgYWRkIGl4 LCBzcDsgbGQgc3AsIGl4ICovCisgICAgICBwb3MgKz0gNCArIGFkZHJfbGVuICsgNDsKKyAgICAg IGluZm8tPnByb2xvZ3VlX3R5cGUuZnBfc2RjYyA9IDE7CisgICAgfQorICBlbHNlIGlmICghbWVt Y21wICgmcHJvbG9ndWVbcG9zXSwgIlwzMzVcMzQ1IiwgMikpCisgICAgeyAvKiBwdXNoIGl4ICov CisgICAgICBwb3MgKz0gMjsKKyAgICAgIGluZm8tPnByb2xvZ3VlX3R5cGUuZnBfc2RjYyA9IDE7 CisgICAgfQorCisgIC8qIHN0YWdlMzogY2hlY2sgZm9yIGxvY2FsIHZhcmlhYmxlcyBhbGxvY2F0 aW9uICovCisgIHN3aXRjaCAocHJvbG9ndWVbcG9zXSkKKyAgICB7CisgICAgICBjYXNlIDB4ZjU6 IC8qIHB1c2ggYWYgKi8KKwlpbmZvLT5zaXplID0gMDsKKwl3aGlsZSAocHJvbG9ndWVbcG9zXSA9 PSAweGY1KQorCSAgeworCSAgICBpbmZvLT5zaXplICs9IGFkZHJfbGVuOworCSAgICBwb3MrKzsK KwkgIH0KKwlpZiAocHJvbG9ndWVbcG9zXSA9PSAweDNiKSAvKiBkZWMgc3AgKi8KKwkgIHsKKwkg ICAgaW5mby0+c2l6ZSsrOworCSAgICBwb3MrKzsKKwkgIH0KKwlicmVhazsKKyAgICAgIGNhc2Ug MHgzYjogLyogZGVjIHNwICovCisJaW5mby0+c2l6ZSA9IDA7CisJd2hpbGUgKHByb2xvZ3VlW3Bv c10gPT0gMHgzYikKKwkgIHsKKwkgICAgaW5mby0+c2l6ZSsrOworCSAgICBwb3MrKzsKKwkgIH0K KwlicmVhazsKKyAgICAgIGNhc2UgMHgyMTogLypsZCBobCwgLW5uICovCisJaWYgKHByb2xvZ3Vl W3BvcythZGRyX2xlbl0gPT0gMHgzOSAmJiBwcm9sb2d1ZVtwb3MrYWRkcl9sZW5dID49IDB4ODAg JiYKKwkgICAgcHJvbG9ndWVbcG9zK2FkZHJfbGVuKzFdID09IDB4ZjkpCisJICB7IC8qIGFkZCBo bCwgc3A7IGxkIHNwLCBobCAqLworCSAgICBpbmZvLT5zaXplID0gLWV4dHJhY3Rfc2lnbmVkX2lu dGVnZXIoJnByb2xvZ3VlW3BvcysxXSwgYWRkcl9sZW4sIGJ5dGVfb3JkZXIpOworCSAgICBwb3Mg Kz0gMSArIGFkZHJfbGVuICsgMjsKKwkgIH0KKwlicmVhazsKKyAgICAgIGNhc2UgMHhmZDogLyog bGQgaXksIC1ubiAqLworCWlmIChwcm9sb2d1ZVtwb3MrMV0gPT0gMHgyMSAmJiBwcm9sb2d1ZVtw b3MrMSthZGRyX2xlbl0gPj0gMHg4MCAmJgorCSAgICAhbWVtY21wICgmcHJvbG9ndWVbcG9zKzIr YWRkcl9sZW5dLCAiXDM3NVwwNzFcMzc1XDM3MSIsIDQpKQorCSAgeworCSAgICBpbmZvLT5zaXpl ID0gLWV4dHJhY3Rfc2lnbmVkX2ludGVnZXIoJnByb2xvZ3VlW3BvcysyXSwgYWRkcl9sZW4sIGJ5 dGVfb3JkZXIpOworCSAgICBwb3MgKz0gMiArIGFkZHJfbGVuICsgNDsKKwkgIH0KKwlicmVhazsK KyAgICAgIGNhc2UgMHhlZDogLyogY2hlY2sgZm9yIGxlYSB4eCwgaXggLSBuICovCisJc3dpdGNo IChwcm9sb2d1ZVtwb3MrMV0pCisJICB7CisJICBjYXNlIDB4MjI6IC8qIGxlYSBobCwgaXggLSBu ICovCisJICAgIGlmIChwcm9sb2d1ZVtwb3MrMl0gPj0gMHg4MCAmJiBwcm9sb2d1ZVtwb3MrM10g PT0gMHhmOSkKKwkgICAgICB7IC8qIGxkIHNwLCBobCAqLworCQlpbmZvLT5zaXplID0gLWV4dHJh Y3Rfc2lnbmVkX2ludGVnZXIoJnByb2xvZ3VlW3BvcysyXSwgMSwgYnl0ZV9vcmRlcik7CisJCXBv cyArPSA0OworCSAgICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIDB4NTU6IC8qIGxlYSBpeSwg aXggLSBuICovCisJICAgIGlmIChwcm9sb2d1ZVtwb3MrMl0gPj0gMHg4MCAmJiBwcm9sb2d1ZVtw b3MrM10gPT0gMHhmZCAmJgorCQlwcm9sb2d1ZVtwb3MrNF0gPT0gMHhmOSkKKwkgICAgICB7IC8q IGxkIHNwLCBpeSAqLworCQlpbmZvLT5zaXplID0gLWV4dHJhY3Rfc2lnbmVkX2ludGVnZXIoJnBy b2xvZ3VlW3BvcysyXSwgMSwgYnl0ZV9vcmRlcik7CisJCXBvcyArPSA1OworCSAgICAgIH0KKwkg ICAgYnJlYWs7CisJICB9CisJICBicmVhazsKKyAgICB9CisgIGxlbiA9IDA7CisgIC8vaW5mby0+ c2F2ZWRfcmVnc1taODBfUENfUkVHTlVNXS5hZGRyID0gbGVuKysKKworICBpZiAoaW5mby0+cHJv bG9ndWVfdHlwZS5pbnRlcnJ1cHQpCisgICAgeworICAgICAgaW5mby0+c2F2ZWRfcmVnc1taODBf QUZfUkVHTlVNXS5hZGRyID0gbGVuKys7CisgICAgICBpbmZvLT5zYXZlZF9yZWdzW1o4MF9CQ19S RUdOVU1dLmFkZHIgPSBsZW4rKzsKKyAgICAgIGluZm8tPnNhdmVkX3JlZ3NbWjgwX0RFX1JFR05V TV0uYWRkciA9IGxlbisrOworICAgICAgaW5mby0+c2F2ZWRfcmVnc1taODBfSExfUkVHTlVNXS5h ZGRyID0gbGVuKys7CisgICAgICBpbmZvLT5zYXZlZF9yZWdzW1o4MF9JWV9SRUdOVU1dLmFkZHIg PSBsZW4rKzsKKyAgICB9CisKKyAgaWYgKGluZm8tPnByb2xvZ3VlX3R5cGUuY3JpdGljYWwpCisg ICAgbGVuKys7IC8qIGp1c3Qgc2tpcCBJRkYyIHNhdmVkIHN0YXRlICovCisKKyAgaWYgKGluZm8t PnByb2xvZ3VlX3R5cGUuZnBfc2RjYykKKyAgICBpbmZvLT5zYXZlZF9yZWdzW1o4MF9JWF9SRUdO VU1dLmFkZHIgPSBsZW4rKzsKKworICBpbmZvLT5zdGF0ZV9zaXplICs9IGxlbiAqIGFkZHJfbGVu OworCisgIHJldHVybiBwY19iZWcgKyBwb3M7Cit9CisKK3N0YXRpYyBDT1JFX0FERFIKK3o4MF9z a2lwX3Byb2xvZ3VlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIHBjKQorewor ICBDT1JFX0FERFIgZnVuY19hZGRyLCBmdW5jX2VuZDsKKyAgQ09SRV9BRERSIHByb2xvZ3VlX2Vu ZDsKKworICBpZiAoIWZpbmRfcGNfcGFydGlhbF9mdW5jdGlvbiAocGMsIE5VTEwsICZmdW5jX2Fk ZHIsICZmdW5jX2VuZCkpCisgICAgcmV0dXJuIHBjOworCisgIHByb2xvZ3VlX2VuZCA9IHNraXBf cHJvbG9ndWVfdXNpbmdfc2FsIChnZGJhcmNoLCBmdW5jX2FkZHIpOworICBpZiAocHJvbG9ndWVf ZW5kICE9IDApCisgICAgcmV0dXJuIHN0ZDo6bWF4IChwYywgcHJvbG9ndWVfZW5kKTsKKworICB7 CisgICAgc3RydWN0IHo4MF91bndpbmRfY2FjaGUgaW5mbyA9IHswfTsKKyAgICBzdHJ1Y3QgdHJh ZF9mcmFtZV9zYXZlZF9yZWcgc2F2ZWRfcmVnc1taODBfTlVNX1JFR1NdOworCisgICAgaW5mby5z YXZlZF9yZWdzID0gc2F2ZWRfcmVnczsKKworICAgIC8qIE5lZWQgdG8gcnVuIHRoZSBwcm9sb2d1 ZSBzY2FubmVyIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGZ1bmN0aW9uIGhhcyBhCisgICAgICAgcHJv bG9ndWUuICAqLworCisgICAgcHJvbG9ndWVfZW5kID0gejgwX3NjYW5fcHJvbG9ndWUgKGdkYmFy Y2gsIGZ1bmNfYWRkciwgZnVuY19lbmQsICZpbmZvKTsKKworICAgIGlmIChpbmZvLnByb2xvZ3Vl X3R5cGUuZnBfc2RjYyB8fCBpbmZvLnByb2xvZ3VlX3R5cGUuaW50ZXJydXB0IHx8CisJaW5mby5w cm9sb2d1ZV90eXBlLmNyaXRpY2FsKQorICAgICAgcmV0dXJuIHN0ZDo6bWF4IChwYywgcHJvbG9n dWVfZW5kKTsKKyAgfQorCisgIGlmIChwcm9sb2d1ZV9lbmQgIT0gMCkKKyAgICB7CisgICAgICBz dHJ1Y3Qgc3ltdGFiX2FuZF9saW5lIHByb2xvZ3VlX3NhbCA9IGZpbmRfcGNfbGluZSAoZnVuY19h ZGRyLCAwKTsKKyAgICAgIHN0cnVjdCBjb21wdW5pdF9zeW10YWIgKmNvbXB1bml0ID0gU1lNVEFC X0NPTVBVTklUIChwcm9sb2d1ZV9zYWwuc3ltdGFiKTsKKyAgICAgIGNvbnN0IGNoYXIgKmRlYnVn X2Zvcm1hdCA9IENPTVBVTklUX0RFQlVHRk9STUFUIChjb21wdW5pdCk7CisKKyAgICAgIGlmIChk ZWJ1Z19mb3JtYXQgIT0gTlVMTCAmJgorCSAgIXN0cm5jYXNlY21wICgiZHdhcmYiLCBkZWJ1Z19m b3JtYXQsIHN0cmxlbigiZHdhcmYiKSkpCisJcmV0dXJuIHN0ZDo6bWF4IChwYywgcHJvbG9ndWVf ZW5kKTsKKyAgICB9CisKKyAgcmV0dXJuIHBjOworfQorCisvKiBSZXR1cm4gdGhlIHJldHVybi12 YWx1ZSBjb252ZW50aW9uIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IEZVTkNUSU9OCisgICB0byByZXR1 cm4gYSB2YWx1ZSBvZiB0eXBlIFZBTFRZUEUuICBGVU5DVElPTiBtYXkgYmUgTlVMTCBpbiB3aGlj aAorICAgY2FzZSB0aGUgcmV0dXJuIGNvbnZlbnRpb24gaXMgY29tcHV0ZWQgYmFzZWQgb25seSBv biBWQUxUWVBFLgorCisgICBJZiBSRUFEQlVGIGlzIG5vdCBOVUxMLCBleHRyYWN0IHRoZSByZXR1 cm4gdmFsdWUgYW5kIHNhdmUgaXQgaW4gdGhpcyBidWZmZXIuCisKKyAgIElmIFdSSVRFQlVGIGlz IG5vdCBOVUxMLCBpdCBjb250YWlucyBhIHJldHVybiB2YWx1ZSB3aGljaCB3aWxsIGJlCisgICBz dG9yZWQgaW50byB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXIuICBUaGlzIGNhbiBiZSB1c2VkIHdo ZW4gd2Ugd2FudAorICAgdG8gZm9yY2UgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGEgZnVuY3Rpb24g KHNlZSB0aGUgInJldHVybiIgY29tbWFuZAorICAgZm9yIGluc3RhbmNlKS4gKi8KK3N0YXRpYyBl bnVtIHJldHVybl92YWx1ZV9jb252ZW50aW9uCit6ODBfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgZ2Ri YXJjaCAqZ2RiYXJjaCwgc3RydWN0IHZhbHVlICpmdW5jdGlvbiwKKwkJICBzdHJ1Y3QgdHlwZSAq dmFsdHlwZSwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKwkJICBnZGJfYnl0ZSAqcmVhZGJ1 ZiwgY29uc3QgZ2RiX2J5dGUgKndyaXRlYnVmKQoreworICAvKiBCeXRlIGFyZSByZXR1cm5lZCBp biBMLCB3b3JkIGluIEhMLCBkd29yZCBpbiBERUhMLiAqLworICBpbnQgbGVuID0gVFlQRV9MRU5H VEggKHZhbHR5cGUpOworCisgIGlmICgoVFlQRV9DT0RFICh2YWx0eXBlKSA9PSBUWVBFX0NPREVf U1RSVUNUCisgICAgICAgfHwgVFlQRV9DT0RFICh2YWx0eXBlKSA9PSBUWVBFX0NPREVfVU5JT04K KyAgICAgICB8fCBUWVBFX0NPREUgKHZhbHR5cGUpID09IFRZUEVfQ09ERV9BUlJBWSkKKyAgICAg ICYmIGxlbiA+IDQpCisgICAgcmV0dXJuIFJFVFVSTl9WQUxVRV9TVFJVQ1RfQ09OVkVOVElPTjsK KworICBpZiAod3JpdGVidWYgIT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAobGVuID4gMikKKwl7 CisJICByZWdjYWNoZS0+Y29va2VkX3dyaXRlX3BhcnQgKFo4MF9ERV9SRUdOVU0sIDAsIGxlbiAt IDIsIHdyaXRlYnVmKzIpOworCSAgbGVuID0gMjsKKwl9CisgICAgICByZWdjYWNoZS0+Y29va2Vk X3dyaXRlX3BhcnQgKFo4MF9ITF9SRUdOVU0sIDAsIGxlbiwgd3JpdGVidWYpOworICAgIH0KKwor ICBpZiAocmVhZGJ1ZiAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChsZW4gPiAyKQorCXsKKwkg IHJlZ2NhY2hlLT5jb29rZWRfcmVhZF9wYXJ0IChaODBfREVfUkVHTlVNLCAwLCBsZW4gLSAyLCBy ZWFkYnVmKzIpOworCSAgbGVuID0gMjsKKwl9CisgICAgICByZWdjYWNoZS0+Y29va2VkX3JlYWRf cGFydCAoWjgwX0hMX1JFR05VTSwgMCwgbGVuLCByZWFkYnVmKTsKKyAgICB9CisKKyAgcmV0dXJu IFJFVFVSTl9WQUxVRV9SRUdJU1RFUl9DT05WRU5USU9OOworfQorCisvKiBmdW5jdGlvbiB1bndp bmRzIGN1cnJlbnQgc3RhY2sgZnJhbWUgYW5kIHJldHVybnMgbmV4dCBvbmUgKi8KK3N0YXRpYyBz dHJ1Y3QgejgwX3Vud2luZF9jYWNoZSAqCit6ODBfZnJhbWVfdW53aW5kX2NhY2hlIChzdHJ1Y3Qg ZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKwkJCXZvaWQgKip0aGlzX3Byb2xvZ3VlX2NhY2hlKQor eworICBDT1JFX0FERFIgc3RhcnRfcGMsIGN1cnJlbnRfcGM7CisgIFVMT05HRVNUIHRoaXNfYmFz ZTsKKyAgaW50IGk7CisgIGdkYl9ieXRlIGJ1ZltzaXplb2Yodm9pZCopXTsKKyAgc3RydWN0IHo4 MF91bndpbmRfY2FjaGUgKmluZm87CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2Zy YW1lX2FyY2ggKHRoaXNfZnJhbWUpOworICAvL3N0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBn ZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworICBpbnQgYWRkcl9sZW4gPSBnZGJhcmNoX3RkZXAgKGdk YmFyY2gpLT5hZGRyX2xlbmd0aDsKKworICBpZiAoKnRoaXNfcHJvbG9ndWVfY2FjaGUpCisgICAg cmV0dXJuIChzdHJ1Y3QgejgwX3Vud2luZF9jYWNoZSAqKSAqdGhpc19wcm9sb2d1ZV9jYWNoZTsK KworICBpbmZvID0gRlJBTUVfT0JTVEFDS19aQUxMT0MgKHN0cnVjdCB6ODBfdW53aW5kX2NhY2hl KTsKKyAgbWVtc2V0IChpbmZvLCAwLCBzaXplb2YgKCppbmZvKSk7CisgIGluZm8tPnNhdmVkX3Jl Z3MgPSB0cmFkX2ZyYW1lX2FsbG9jX3NhdmVkX3JlZ3MgKHRoaXNfZnJhbWUpOworICAqdGhpc19w cm9sb2d1ZV9jYWNoZSA9IGluZm87CisKKyAgc3RhcnRfcGMgPSBnZXRfZnJhbWVfZnVuYyAodGhp c19mcmFtZSk7CisgIGN1cnJlbnRfcGMgPSBnZXRfZnJhbWVfcGMgKHRoaXNfZnJhbWUpOworICBp ZiAoKHN0YXJ0X3BjID4gMCkgJiYgKHN0YXJ0X3BjIDw9IGN1cnJlbnRfcGMpKQorICAgIHo4MF9z Y2FuX3Byb2xvZ3VlIChnZXRfZnJhbWVfYXJjaCAodGhpc19mcmFtZSksCisJCSAgICAgICBzdGFy dF9wYywgY3VycmVudF9wYywgaW5mbyk7CisKKyAgaWYgKGluZm8tPnByb2xvZ3VlX3R5cGUuZnBf c2RjYykKKyAgICB7CisgICAgICAvKiAgd2l0aCBTRENDIHN0YW5kYXJkIHByb2xvZ3VlIElYIHBv aW50cyB0byB0aGUgZW5kIG9mIGN1cnJlbnQgZnJhbWUKKwkgICh3aGVyZSBwcmV2aW91cyBmcmFt ZSBwb2ludGVyIGFuZCBzdGF0ZSBhcmUgc2F2ZWQpICovCisgICAgICB0aGlzX2Jhc2UgPSBnZXRf ZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIFo4MF9JWF9SRUdOVU0pOworICAg ICAgaW5mby0+cHJldl9zcCA9IHRoaXNfYmFzZSArIGluZm8tPnNpemU7CisgICAgfQorICBlbHNl CisgICAgeworICAgICAgQ09SRV9BRERSIGFkZHI7CisgICAgICBDT1JFX0FERFIgc3A7CisgICAg ICBDT1JFX0FERFIgc3BfbWFzayA9ICgxIDw8IGdkYmFyY2hfcHRyX2JpdChnZGJhcmNoKSkgLSAx OworICAgICAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIg KGdkYmFyY2gpOworICAgICAgLyogQXNzdW1lIHRoYXQgdGhlIEZQIGlzIHRoaXMgZnJhbWUncyBT UCBidXQgd2l0aCB0aGF0IHB1c2hlZAorCSBzdGFjayBzcGFjZSBhZGRlZCBiYWNrLiAgKi8KKyAg ICAgIHRoaXNfYmFzZSA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwg WjgwX1NQX1JFR05VTSk7CisgICAgICBzcCA9IHRoaXNfYmFzZSArIGluZm8tPnNpemU7CisgICAg ICBmb3IgKDs7ICsrc3ApCisJeworCSAgc3AgJj0gc3BfbWFzazsKKwkgIGlmIChzcCA8IHRoaXNf YmFzZSkKKwkgICAgeyAvKm92ZXJmbG93LCBsb29rcyBsaWtlIGVuZCBvZiBzdGFjayAqLworCSAg ICAgIHNwID0gdGhpc19iYXNlICsgaW5mby0+c2l6ZTsKKwkgICAgICBicmVhazsKKwkgICAgfQor CSAgLyogZmluZCByZXR1cm4gYWRkcmVzcyAqLworCSAgcmVhZF9tZW1vcnkgKHNwLCBidWYsIGFk ZHJfbGVuKTsKKwkgIGFkZHIgPSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIoYnVmLCBhZGRyX2xl biwgYnl0ZV9vcmRlcik7CisJICByZWFkX21lbW9yeSAoYWRkci1hZGRyX2xlbi0xLCBidWYsIGFk ZHJfbGVuKzEpOworCSAgaWYgKGJ1ZlswXSA9PSAweGNkIHx8IChidWZbMF0gJiAwMzA3KSA9PSAw MzA0KSAvKiBJcyBpdCBDQUxMICovCisJICAgIHsgLyogQ0FMTCBubiBvciBDQUxMIGNjLG5uICov CisJICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKm5hbWVzW10gPQorCQl7CisJCSAgIl9fc2RjY19j YWxsX2l4IiwgIl9fc2RjY19jYWxsX2l5IiwgIl9fc2RjY19jYWxsX2hsIgorCQl9OworCSAgICAg IGFkZHIgPSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIoYnVmKzEsIGFkZHJfbGVuLCBieXRlX29y ZGVyKTsKKwkgICAgICBpZiAoYWRkciA9PSBzdGFydF9wYykKKwkJYnJlYWs7IC8qIGZvdW5kICov CisJICAgICAgZm9yIChpID0gc2l6ZW9mKG5hbWVzKS9zaXplb2YoKm5hbWVzKS0xOyBpID49IDA7 IC0taSkKKwkJeworCQkgIHN0cnVjdCBib3VuZF9taW5pbWFsX3N5bWJvbCBtc3ltYm9sOworCQkg IG1zeW1ib2wgPSBsb29rdXBfbWluaW1hbF9zeW1ib2wgKG5hbWVzW2ldLCBOVUxMLCBOVUxMKTsK KwkJICBpZiAoIW1zeW1ib2wubWluc3ltKQorCQkgICAgY29udGludWU7CisJCSAgaWYgKGFkZHIg PT0gQk1TWU1CT0xfVkFMVUVfQUREUkVTUyAobXN5bWJvbCkpCisJCSAgICBicmVhazsKKwkJfQor CSAgICAgIGlmIChpID49IDApCisJCWJyZWFrOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJ ICBlbHNlCisJICAgIGNvbnRpbnVlOyAvKiBpdCBpcyBub3QgY2FsbF9ubiwgY2FsbF9jY19ubiAq LworCX0KKyAgICAgIGluZm8tPnByZXZfc3AgPSBzcDsKKyAgICB9CisKKyAgLyogQWRqdXN0IGFs bCB0aGUgc2F2ZWQgcmVnaXN0ZXJzIHNvIHRoYXQgdGhleSBjb250YWluIGFkZHJlc3NlcyBhbmQg bm90CisgICAgIG9mZnNldHMuICAqLworICBmb3IgKGkgPSAwOyBpIDwgZ2RiYXJjaF9udW1fcmVn cyAoZ2RiYXJjaCkgLSAxOyBpKyspCisgICAgaWYgKGluZm8tPnNhdmVkX3JlZ3NbaV0uYWRkciA+ IDApCisgICAgICBpbmZvLT5zYXZlZF9yZWdzW2ldLmFkZHIgPSBpbmZvLT5wcmV2X3NwIC0KKwkJ CWluZm8tPnNhdmVkX3JlZ3NbaV0uYWRkciAqIGFkZHJfbGVuOworCisgIC8qIEV4Y2VwdCBmb3Ig dGhlIHN0YXJ0dXAgY29kZSwgdGhlIHJldHVybiBQQyBpcyBhbHdheXMgc2F2ZWQgb24KKyAgICAg dGhlIHN0YWNrIGFuZCBpcyBhdCB0aGUgYmFzZSBvZiB0aGUgZnJhbWUuICAqLworICBpbmZvLT5z YXZlZF9yZWdzW1o4MF9QQ19SRUdOVU1dLmFkZHIgPSBpbmZvLT5wcmV2X3NwOworCisgIC8qIFRo ZSBwcmV2aW91cyBmcmFtZSdzIFNQIG5lZWRlZCB0byBiZSBjb21wdXRlZC4gIFNhdmUgdGhlIGNv bXB1dGVkCisgICAgIHZhbHVlLiAgKi8KKyAgdHJhZF9mcmFtZV9zZXRfdmFsdWUgKGluZm8tPnNh dmVkX3JlZ3MsIFo4MF9TUF9SRUdOVU0sCisJCQlpbmZvLT5wcmV2X3NwICsgYWRkcl9sZW4pOwor ICByZXR1cm4gaW5mbzsKK30KKworLyogR2l2ZW4gYSBHREIgZnJhbWUsIGRldGVybWluZSB0aGUg YWRkcmVzcyBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbidzCisgICBmcmFtZS4gIFRoaXMgd2lsbCBi ZSB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBHREIgZnJhbWUgc3RydWN0LiAgKi8KK3N0YXRpYyB2b2lk Cit6ODBfZnJhbWVfdGhpc19pZCAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQg Kip0aGlzX2NhY2hlLAorCQkgICBzdHJ1Y3QgZnJhbWVfaWQgKnRoaXNfaWQpCit7CisgIHN0cnVj dCBmcmFtZV9pZCBpZDsKKyAgc3RydWN0IHo4MF91bndpbmRfY2FjaGUgKmluZm87CisgIENPUkVf QUREUiBiYXNlOworICBDT1JFX0FERFIgZnVuYzsKKworICAvKiBUaGUgRlVOQyBpcyBlYXN5LiAg Ki8KKyAgZnVuYyA9IGdldF9mcmFtZV9mdW5jICh0aGlzX2ZyYW1lKTsKKworICBpbmZvID0gejgw X2ZyYW1lX3Vud2luZF9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19jYWNoZSk7CisgIC8qIEhvcGVm dWxseSB0aGUgcHJvbG9ndWUgYW5hbHlzaXMgZWl0aGVyIGNvcnJlY3RseSBkZXRlcm1pbmVkIHRo ZQorICAgICBmcmFtZSdzIGJhc2UgKHdoaWNoIGlzIHRoZSBTUCBmcm9tIHRoZSBwcmV2aW91cyBm cmFtZSksIG9yIHNldAorICAgICB0aGF0IGJhc2UgdG8gIk5VTEwiLiAgKi8KKyAgYmFzZSA9IGlu Zm8tPnByZXZfc3A7CisgIGlmIChiYXNlID09IDApCisgICAgcmV0dXJuOworCisgIGlkID0gZnJh bWVfaWRfYnVpbGQgKGJhc2UsIGZ1bmMpOworICAqdGhpc19pZCA9IGlkOworfQorCisKK3N0YXRp YyBzdHJ1Y3QgdmFsdWUgKgorejgwX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9p bmZvICp0aGlzX2ZyYW1lLAorCQkJIHZvaWQgKip0aGlzX3Byb2xvZ3VlX2NhY2hlLCBpbnQgcmVn bnVtKQoreworICBzdHJ1Y3QgejgwX3Vud2luZF9jYWNoZSAqaW5mbworICAgID0gejgwX2ZyYW1l X3Vud2luZF9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19wcm9sb2d1ZV9jYWNoZSk7CisKKyAgaWYg KHJlZ251bSA9PSBaODBfUENfUkVHTlVNKQorICAgIHsKKyAgICAgIGlmICh0cmFkX2ZyYW1lX2Fk ZHJfcCAoaW5mby0+c2F2ZWRfcmVncyxaODBfUENfUkVHTlVNKSkKKwl7CisJICAvKiBSZWFkaW5n IHRoZSByZXR1cm4gUEMgZnJvbSB0aGUgUEMgcmVnaXN0ZXIgaXMgc2xpZ2h0bHkKKwkgICAgIGFi bm9ybWFsLiAqLworCSAgVUxPTkdFU1QgcGM7CisJICBnZGJfYnl0ZSBidWZbM107CisJICBzdHJ1 Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKTsKKwkgIHN0 cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworCSAgZW51 bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpOwor CisJICByZWFkX21lbW9yeSAoaW5mby0+c2F2ZWRfcmVnc1taODBfUENfUkVHTlVNXS5hZGRyLAor CQkgICAgICAgYnVmLCB0ZGVwLT5hZGRyX2xlbmd0aCk7CisJICBwYyA9IGV4dHJhY3RfdW5zaWdu ZWRfaW50ZWdlcihidWYsIHRkZXAtPmFkZHJfbGVuZ3RoLCBieXRlX29yZGVyKTsKKwkgIHJldHVy biBmcmFtZV91bndpbmRfZ290X2NvbnN0YW50ICh0aGlzX2ZyYW1lLCByZWdudW0sIHBjKTsKKwl9 CisKKyAgICAgIHJldHVybiBmcmFtZV91bndpbmRfZ290X29wdGltaXplZCAodGhpc19mcmFtZSwg cmVnbnVtKTsKKyAgICB9CisKKyAgcmV0dXJuIHRyYWRfZnJhbWVfZ2V0X3ByZXZfcmVnaXN0ZXIg KHRoaXNfZnJhbWUsIGluZm8tPnNhdmVkX3JlZ3MsIHJlZ251bSk7Cit9CisKKy8qIFJldHVybiB0 aGUgYnJlYWtwb2ludCBraW5kIGZvciB0aGlzIHRhcmdldCBiYXNlZCBvbiAqUENQVFIuICovCitz dGF0aWMgaW50Cit6ODBfYnJlYWtwb2ludF9raW5kX2Zyb21fcGMgKHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoLCBDT1JFX0FERFIgKnBjcHRyKQoreworICBzdGF0aWMgaW50IGFkZHIgPSAtMTsKKyAg aWYgKGFkZHIgPT0gLTEpCisgICAgeworICAgICAgc3RydWN0IGJvdW5kX21pbmltYWxfc3ltYm9s IGJoOworICAgICAgYmggPSBsb29rdXBfbWluaW1hbF9zeW1ib2wgKCJfYnJlYWtfaGFuZGxlciIs IE5VTEwsIE5VTEwpOworICAgICAgaWYgKGJoLm1pbnN5bSkKKwlhZGRyID0gQk1TWU1CT0xfVkFM VUVfQUREUkVTUyAoYmgpOworICAgICAgZWxzZQorCXsKKwkgIHdhcm5pbmcoXygiVW5hYmxlIHRv IGRldGVybWluZSBpbmZlcmlvcidzIHNvZnR3YXJlIGJyZWFrcG9pbnQgdHlwZTogIgorCQkgICAg ImNvdWxkbid0IGZpbmQgYF9icmVha19oYW5kbGVyJyBmdW5jdGlvbiBpbiBpbmZlcmlvci4gV2ls bCAiCisJCSAgICAiYmUgdXNlZCBkZWZhdWx0IHNvZnR3YXJlIGJyZWFrcG9pbnQgaW5zdHJ1Y3Rp b24gUlNUIDB4MDguIikpOworCSAgYWRkciA9IDB4MDAwODsKKwl9CisgICAgfQorICByZXR1cm4g YWRkcjsKK30KKworLyogUmV0dXJuIHRoZSBzb2Z0d2FyZSBicmVha3BvaW50IGZyb20gS0lORC4g S0lORCBpcyBqdXN0IGFkZHJlc3Mgb2YgYnJlYWtwb2ludAorICAgaGFuZGxlci4gSWYgYWRkcmVz cyBpcyBvbiBvZiBzdGFuZGFyZCBSU1RzLCB0aGVuIFJTVCBuIGluc3RydWN0aW9uIGlzIHVzZWQg YXMKKyAgIGJyZWFrcG9pbnQuCisgICBTSVpFIGlzIHNldCB0byB0aGUgc29mdHdhcmUgYnJlYWtw b2ludCdzIGxlbmd0aCBpbiBtZW1vcnkuICovCitzdGF0aWMgY29uc3QgZ2RiX2J5dGUgKgorejgw X3N3X2JyZWFrcG9pbnRfZnJvbV9raW5kKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQga2lu ZCwgaW50ICpzaXplKQoreworICBzdGF0aWMgZ2RiX2J5dGUgYnJlYWtfaW5zbls4XTsKKworICBp ZiAoKGtpbmQgJiAwNzApID09IGtpbmQpCisgICAgeworICAgICAgYnJlYWtfaW5zblswXSA9IGtp bmQgfCAwMzA3OworICAgICAgKnNpemUgPSAxOworICAgIH0KKyAgZWxzZSAvKiBraW5kIGlzIG5v bi1SU1QgYWRkcmVzcywgdXNlIENBTEwgaW5zdGVhZCwgYnV0IGl0IGlzIGR1bmdlcm91cyAqLwor ICAgIHsKKyAgICAgIGdkYl9ieXRlICpwID0gYnJlYWtfaW5zbjsKKyAgICAgICpwKysgPSAweGNk OworICAgICAgKnArKyA9IChraW5kID4+IDApICYgMHhmZjsKKyAgICAgICpwKysgPSAoa2luZCA+ PiA4KSAmIDB4ZmY7CisgICAgICBpZiAoZ2RiYXJjaF90ZGVwIChnZGJhcmNoKS0+YWRkcl9sZW5n dGggPiAyKQorCSpwKysgPSAoa2luZCA+PiAxNikgJiAweGZmOworICAgICAgKnNpemUgPSBwIC0g YnJlYWtfaW5zbjsKKyAgICB9CisgIHJldHVybiBicmVha19pbnNuOworfQorCisvKiBSZXR1cm4g YSB2ZWN0b3Igb2YgYWRkcmVzc2VzIG9uIHdoaWNoIHRoZSBzb2Z0d2FyZSBzaW5nbGUgc3RlcAor ICAgYnJlYWtwb2ludHMgc2hvdWxkIGJlIGluc2VydGVkLiAgTlVMTCBtZWFucyBzb2Z0d2FyZSBz aW5nbGUgc3RlcCBpcworICAgbm90IHVzZWQuCisgICBPbmx5IG9uZSBicmVha3BvaW50IGFkZHJl c3Mgd2lsbCBiZSByZXR1cm5lZDogY29uZGl0aW9uYWwgYnJhbmNoZXMKKyAgIHdpbGwgYmUgYWx3 YXlzIGV2YWx1YXRlZC4gKi8KK3N0YXRpYyBzdGQ6OnZlY3RvcjxDT1JFX0FERFI+Cit6ODBfc29m dHdhcmVfc2luZ2xlX3N0ZXAgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUpCit7CisgIHN0YXRp YyBjb25zdCBpbnQgZmxhZ19tYXNrW10gPSB7MSA8PCA2LCAxIDw8IDAsIDEgPDwgMiwgMSA8PCA3 fTsKKyAgZ2RiX2J5dGUgYnVmWzhdOworICBVTE9OR0VTVCB0OworICBVTE9OR0VTVCBhZGRyOwor ICBpbnQgb3Bjb2RlOworICBpbnQgc2l6ZTsKKyAgY29uc3Qgc3RydWN0IGluc25faW5mbyAqaW5m bzsKKyAgc3RkOjp2ZWN0b3I8Q09SRV9BRERSPiByZXQgKDEpOworICBzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaCA9IHRhcmdldF9nZGJhcmNoICgpOworCisgIHJlZ2NhY2hlLT5jb29rZWRfcmVhZCAo WjgwX1BDX1JFR05VTSwgJmFkZHIpOworICByZWFkX21lbW9yeSAoYWRkciwgYnVmLCBzaXplb2Yo YnVmKSk7CisgIGluZm8gPSB6ODBfZ2V0X2luc25faW5mbyAoZ2RiYXJjaCwgYnVmLCAmc2l6ZSk7 CisgIHJldFswXSA9IGFkZHIgKyBzaXplOworICBpZiAoaW5mbyA9PSBOVUxMKSAvKiBwb3NzaWJs ZSBpbiBjYXNlIG9mIGRvdWJsZSBwcmVmaXggKi8KKyAgICB7IC8qIGZvcmNlZCBOT1AsIFRPRE86 IHJlcGxhY2UgYnkgTk9QICovCisgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgb3Bjb2RlID0g YnVmW3NpemUgLSBpbmZvLT5zaXplXTsgLyogdGFrZSBvcGNvZGUgaW5zdGVhZCBvZiBwcmVmaXgg Ki8KKyAgLyogc3RhZ2UgMTogY2hlY2sgZm9yIGNvbmRpdGlvbnMgKi8KKyAgc3dpdGNoIChpbmZv LT50eXBlKQorICAgIHsKKyAgICBjYXNlIGluc25fZGpuel9kOgorICAgICAgcmVnY2FjaGUtPmNv b2tlZF9yZWFkIChaODBfQkNfUkVHTlVNLCAmdCk7CisgICAgICBpZiAoKHQgJiAweGZmMDApICE9 IDB4MTAwKQorCXJldHVybiByZXQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIGluc25fanJfY2Nf ZDoKKyAgICAgIG9wY29kZSAmPSAwMzA7IC8qIEpSIE5aLGQgaGFzIGNjIGVxdWFsIHRvIDA0MCwg YnV0IG90aGVycyAwMDAgKi8KKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgaW5z bl9qcF9jY19ubjoKKyAgICBjYXNlIGluc25fY2FsbF9jY19ubjoKKyAgICBjYXNlIGluc25fcmV0 X2NjOgorICAgICAgcmVnY2FjaGUtPmNvb2tlZF9yZWFkIChaODBfQUZfUkVHTlVNLCAmdCk7Cisg ICAgICAvKiBsb3dlciBiaXQgb2YgY29uZGl0aW9uIGludmVydHMgbWF0Y2gsIHNvIGludmVydCBm bGFncyBpZiBzZXQgKi8KKyAgICAgIGlmICgob3Bjb2RlICYgMDEwKSAhPSAwKQorCXQgPSB+dDsK KyAgICAgIC8qIHR3byBoaWdoZXIgYml0cyBvZiBjb25kaXRpb24gZmllbGQgZGVmaW5lcyBmbGFn LCBzbyB1c2UgdGhlbSBvbmx5CisJIHRvIGNoZWNrIGNvbmRpdGlvbiBvZiAibm90IGV4ZWN1dGUi ICovCisgICAgICBpZiAodCAmIGZsYWdfbWFza1sob3Bjb2RlID4+IDQpICYgM10pCisJcmV0dXJu IHJldDsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgLyogc3RhZ2UgMjogY29tcHV0ZSBhZGRyZXNz ICovCisgIC8qIFRPRE86IGltcGxlbWVudCBlWjgwIE1BREwgc3VwcG9ydCAqLworICBzd2l0Y2gg KGluZm8tPnR5cGUpCisgICAgeworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gcmV0OworICAg IGNhc2UgaW5zbl9kam56X2Q6CisgICAgY2FzZSBpbnNuX2pyX2Q6CisgICAgY2FzZSBpbnNuX2py X2NjX2Q6CisgICAgICBhZGRyICs9IHNpemU7CisgICAgICBhZGRyICs9IChzaWduZWQgY2hhcili dWZbc2l6ZS0xXTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgaW5zbl9qcF9ycjoKKyAgICAgIGlm IChzaXplID09IDEpCisJb3Bjb2RlID0gWjgwX0hMX1JFR05VTTsKKyAgICAgIGVsc2UKKwlvcGNv ZGUgPSAoYnVmW3NpemUtMl0gJiAweDIwKSA/IFo4MF9JWV9SRUdOVU0gOiBaODBfSVhfUkVHTlVN OworICAgICAgcmVnY2FjaGUtPmNvb2tlZF9yZWFkIChvcGNvZGUsICZhZGRyKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgaW5zbl9qcF9ubjoKKyAgICBjYXNlIGluc25fanBfY2Nfbm46CisgICAg Y2FzZSBpbnNuX2NhbGxfbm46CisgICAgY2FzZSBpbnNuX2NhbGxfY2Nfbm46CisgICAgICBhZGRy ID0gYnVmW3NpemUtMV0gKiAweDEwMCArIGJ1ZltzaXplLTJdOworICAgICAgaWYgKGluZm8tPnNp emUgPiAzKSAvKiBsb25nIGluc3RydWN0aW9uIG1vZGUgKi8KKwlhZGRyID0gYWRkciAqIDB4MTAw ICsgYnVmW3NpemUtM107CisgICAgICBicmVhazsKKyAgICBjYXNlIGluc25fcnN0X246CisgICAg ICBhZGRyID0gb3Bjb2RlICYgMDcwOworICAgICAgYnJlYWs7CisgICAgY2FzZSBpbnNuX3JldDoK KyAgICBjYXNlIGluc25fcmV0X2NjOgorICAgICAgcmVnY2FjaGUtPmNvb2tlZF9yZWFkIChaODBf U1BfUkVHTlVNLCAmYWRkcik7CisgICAgICByZWFkX21lbW9yeSAoYWRkciwgYnVmLCAzKTsKKyAg ICAgIGFkZHIgPSBidWZbMV0gKiAweDEwMCArIGJ1ZlswXTsKKyAgICAgIGlmIChnZGJhcmNoX2Jm ZF9hcmNoX2luZm8gKGdkYmFyY2gpLT5tYWNoID09IGJmZF9tYWNoX2V6ODBfYWRsKQorCWFkZHIg PSBhZGRyICogMHgxMDAgKyBidWZbMl07CisgICAgICBicmVhazsKKyAgICB9CisgIHJldFswXSA9 IGFkZHI7CisgIHJldHVybiByZXQ7Cit9CisKKy8qIENhY2hlZCwgZHluYW1pY2FsbHkgYWxsb2Nh dGVkIGNvcGllcyBvZiB0aGUgdGFyZ2V0IGRhdGEgc3RydWN0dXJlczogKi8KK3N0YXRpYyB1bnNp Z25lZCAoKmNhY2hlX292bHlfcmVnaW9uX3RhYmxlKVszXSA9IDA7CitzdGF0aWMgdW5zaWduZWQg Y2FjaGVfbm92bHlfcmVnaW9uczsKK3N0YXRpYyBDT1JFX0FERFIgY2FjaGVfb3ZseV9yZWdpb25f dGFibGVfYmFzZSA9IDA7CitlbnVtIG92bHlfaW5kZXgKKyAgeworICAgIFZNQSwgT1NJWkUsIE1B UFBFRF9UT19MTUEKKyAgfTsKKworc3RhdGljIHZvaWQKK3o4MF9mcmVlX292ZXJsYXlfcmVnaW9u X3RhYmxlICh2b2lkKQoreworICBpZiAoY2FjaGVfb3ZseV9yZWdpb25fdGFibGUpCisgICAgeGZy ZWUgKGNhY2hlX292bHlfcmVnaW9uX3RhYmxlKTsKKyAgY2FjaGVfbm92bHlfcmVnaW9ucyA9IDA7 CisgIGNhY2hlX292bHlfcmVnaW9uX3RhYmxlID0gTlVMTDsKKyAgY2FjaGVfb3ZseV9yZWdpb25f dGFibGVfYmFzZSA9IDA7Cit9CisKKy8qIFJlYWQgYW4gYXJyYXkgb2YgaW50cyBvZiBzaXplIFNJ WkUgZnJvbSB0aGUgdGFyZ2V0IGludG8gYSBsb2NhbCBidWZmZXIuCisgICBDb252ZXJ0IHRvIGhv c3Qgb3JkZXIuICBpbnQgTEVOIGlzIG51bWJlciBvZiBpbnRzLiAgKi8KKworc3RhdGljIHZvaWQK K3JlYWRfdGFyZ2V0X2xvbmdfYXJyYXkgKENPUkVfQUREUiBtZW1hZGRyLCB1bnNpZ25lZCBpbnQg Km15YWRkciwKKwkJCWludCBsZW4sIGludCBzaXplLCBlbnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRl cikKK3sKKyAgLyogYWxsb2NhIGlzIHNhZmUgaGVyZSwgYmVjYXVzZSByZWdpb25zIGFycmF5IGlz IHZlcnkgc21hbGwuICovCisgIGdkYl9ieXRlICpidWYgPSAoZ2RiX2J5dGUgKikgYWxsb2NhIChs ZW4gKiBzaXplKTsKKyAgaW50IGk7CisKKyAgcmVhZF9tZW1vcnkgKG1lbWFkZHIsIGJ1ZiwgbGVu ICogc2l6ZSk7CisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICBteWFkZHJbaV0gPSBl eHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKHNpemUgKiBpICsgYnVmLCBzaXplLCBieXRlX29yZGVy KTsKK30KKworc3RhdGljIGludAorejgwX3JlYWRfb3ZlcmxheV9yZWdpb25fdGFibGUgKHZvaWQp Cit7CisgIHN0cnVjdCBib3VuZF9taW5pbWFsX3N5bWJvbCBub3ZseV9yZWdpb25zX21zeW07Cisg IHN0cnVjdCBib3VuZF9taW5pbWFsX3N5bWJvbCBvdmx5X3JlZ2lvbl90YWJsZV9tc3ltOworICBz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaDsKKyAgaW50IHdvcmRfc2l6ZTsKKyAgZW51bSBiZmRfZW5k aWFuIGJ5dGVfb3JkZXI7CisKKyAgejgwX2ZyZWVfb3ZlcmxheV9yZWdpb25fdGFibGUgKCk7Cisg IG5vdmx5X3JlZ2lvbnNfbXN5bSA9IGxvb2t1cF9taW5pbWFsX3N5bWJvbCAoIl9ub3ZseV9yZWdp b25zIiwgTlVMTCwgTlVMTCk7CisgIGlmICghIG5vdmx5X3JlZ2lvbnNfbXN5bS5taW5zeW0pCisg ICAgeworICAgICAgZXJyb3IgKF8oIkVycm9yIHJlYWRpbmcgaW5mZXJpb3IncyBvdmVybGF5IHRh YmxlOiAiCisJICAgICAgICJjb3VsZG4ndCBmaW5kIGBfbm92bHlfcmVnaW9ucydcbiIKKwkgICAg ICAgInZhcmlhYmxlIGluIGluZmVyaW9yLiAgVXNlIGBvdmVybGF5IG1hbnVhbCcgbW9kZS4iKSk7 CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgb3ZseV9yZWdpb25fdGFibGVfbXN5bSA9IGxv b2t1cF9ib3VuZF9taW5pbWFsX3N5bWJvbCAoIl9vdmx5X3JlZ2lvbl90YWJsZSIpOworICBpZiAo ISBvdmx5X3JlZ2lvbl90YWJsZV9tc3ltLm1pbnN5bSkKKyAgICB7CisgICAgICBlcnJvciAoXygi RXJyb3IgcmVhZGluZyBpbmZlcmlvcidzIG92ZXJsYXkgdGFibGU6IGNvdWxkbid0IGZpbmQgIgor CSAgICAgICAiYF9vdmx5X3JlZ2lvbl90YWJsZSdcbiIKKwkgICAgICAgImFycmF5IGluIGluZmVy aW9yLiAgVXNlIGBvdmVybGF5IG1hbnVhbCcgbW9kZS4iKSk7CisgICAgICByZXR1cm4gMDsKKyAg ICB9CisKKyAgY29uc3QgZW51bSBvdmVybGF5X2RlYnVnZ2luZ19zdGF0ZSBzYXZlX292bHlfZGJn ID0gb3ZlcmxheV9kZWJ1Z2dpbmc7CisgIC8qIHByZXZlbnQgaW5maW5pdGUgcmVjdXJzZSAqLwor ICBvdmVybGF5X2RlYnVnZ2luZyA9IG92bHlfb2ZmOworCisgIGdkYmFyY2ggPSBnZXRfb2JqZmls ZV9hcmNoIChvdmx5X3JlZ2lvbl90YWJsZV9tc3ltLm9iamZpbGUpOworICB3b3JkX3NpemUgPSBn ZGJhcmNoX2xvbmdfYml0IChnZGJhcmNoKSAvIFRBUkdFVF9DSEFSX0JJVDsKKyAgYnl0ZV9vcmRl ciA9IGdkYmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJjaCk7CisKKyAgY2FjaGVfbm92bHlfcmVnaW9u cyA9IHJlYWRfbWVtb3J5X2ludGVnZXIgKAorCQkJCUJNU1lNQk9MX1ZBTFVFX0FERFJFU1MgKG5v dmx5X3JlZ2lvbnNfbXN5bSksCisJCQkJNCwgYnl0ZV9vcmRlcik7CisgIGNhY2hlX292bHlfcmVn aW9uX3RhYmxlCisgICAgPSAodW5zaWduZWQgaW50ICgqKVszXSkgeG1hbGxvYyAoY2FjaGVfbm92 bHlfcmVnaW9ucyAqCisJCQkJCXNpemVvZiAoKmNhY2hlX292bHlfcmVnaW9uX3RhYmxlKSk7Cisg IGNhY2hlX292bHlfcmVnaW9uX3RhYmxlX2Jhc2UKKyAgICA9IEJNU1lNQk9MX1ZBTFVFX0FERFJF U1MgKG92bHlfcmVnaW9uX3RhYmxlX21zeW0pOworICByZWFkX3RhcmdldF9sb25nX2FycmF5IChj YWNoZV9vdmx5X3JlZ2lvbl90YWJsZV9iYXNlLAorCQkJICAodW5zaWduZWQgaW50ICopIGNhY2hl X292bHlfcmVnaW9uX3RhYmxlLAorCQkJICBjYWNoZV9ub3ZseV9yZWdpb25zICogMywgd29yZF9z aXplLCBieXRlX29yZGVyKTsKKworICBvdmVybGF5X2RlYnVnZ2luZyA9IHNhdmVfb3ZseV9kYmc7 CisgIHJldHVybiAxOyAgICAgICAgICAgICAgICAgICAgIC8qIFNVQ0NFU1MgKi8KK30KKworc3Rh dGljIGludAorejgwX292ZXJsYXlfdXBkYXRlXzEgKHN0cnVjdCBvYmpfc2VjdGlvbiAqb3NlY3Qp Cit7CisgIGludCBpOworICBhc2VjdGlvbiAqYnNlY3QgPSBvc2VjdC0+dGhlX2JmZF9zZWN0aW9u OworICB1bnNpZ25lZCBsbWE7CisgIHVuc2lnbmVkIHZtYSA9IGJmZF9zZWN0aW9uX3ZtYSAoYnNl Y3QpOworCisgIC8qIGZpbmQgcmVnaW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlY3Rpb24gVk1B ICovCisgIGZvciAoaSA9IDA7IGkgPCBjYWNoZV9ub3ZseV9yZWdpb25zOyBpKyspCisgICAgaWYg KGNhY2hlX292bHlfcmVnaW9uX3RhYmxlW2ldW1ZNQV0gPT0gdm1hKQorCWJyZWFrOworICBpZiAo aSA9PSBjYWNoZV9ub3ZseV9yZWdpb25zKQorICAgIHJldHVybiAwOyAvKiBubyBzdWNoIHJlZ2lv biAqLworCisgIGxtYSA9IGNhY2hlX292bHlfcmVnaW9uX3RhYmxlW2ldW01BUFBFRF9UT19MTUFd OworICBpID0gMDsKKworICAvKiB3ZSBoYXZlIGludGVyZXN0IGZvciBzZWN0aW9ucyB3aXRoIHNh bWUgVk1BICovCisgIGZvciAob2JqZmlsZSAqb2JqZmlsZSA6IGN1cnJlbnRfcHJvZ3JhbV9zcGFj ZS0+b2JqZmlsZXMgKCkpCisgICAgQUxMX09CSkZJTEVfT1NFQ1RJT05TIChvYmpmaWxlLCBvc2Vj dCkKKyAgICAgIGlmIChzZWN0aW9uX2lzX292ZXJsYXkgKG9zZWN0KSkKKwl7CisJICBvc2VjdC0+ b3ZseV9tYXBwZWQgPSAobG1hID09IGJmZF9zZWN0aW9uX2xtYSAob3NlY3QtPnRoZV9iZmRfc2Vj dGlvbikpOworCSAgaSB8PSBvc2VjdC0+b3ZseV9tYXBwZWQ7IC8qdHJ1ZSwgaWYgYXQgbGVhc3Qg b25lIHNlY3Rpb24gaXMgbWFwcGVkKi8KKwl9CisgIHJldHVybiBpOworfQorCisvKiBSZWZyZXNo IG92ZXJsYXkgbWFwcGVkIHN0YXRlIGZvciBzZWN0aW9uIE9TRUNULiAqLworc3RhdGljIHZvaWQK K3o4MF9vdmVybGF5X3VwZGF0ZSAoc3RydWN0IG9ial9zZWN0aW9uICpvc2VjdCkKK3sKKyAgLyog QWx3YXlzIG5lZWQgdG8gcmVhZCB0aGUgZW50aXJlIHRhYmxlIGFuZXcuICovCisgIGlmICghIHo4 MF9yZWFkX292ZXJsYXlfcmVnaW9uX3RhYmxlICgpKQorICAgIHJldHVybjsKKworICAvKiBXZXJl IHdlIGdpdmVuIGFuIG9zZWN0IHRvIGxvb2sgdXA/ICBOVUxMIG1lYW5zIGRvIGFsbCBvZiB0aGVt LiAqLworICBpZiAob3NlY3QgJiYgejgwX292ZXJsYXlfdXBkYXRlXzEgKG9zZWN0KSkKKyAgICBy ZXR1cm47CisKKyAgLyogVXBkYXRlIGFsbCBzZWN0aW9ucywgZXZlbiBpZiBvbmx5IG9uZSB3YXMg cmVxdWVzdGVkLiAqLworICBmb3IgKG9iamZpbGUgKm9iamZpbGUgOiBjdXJyZW50X3Byb2dyYW1f c3BhY2UtPm9iamZpbGVzICgpKQorICAgIEFMTF9PQkpGSUxFX09TRUNUSU9OUyAob2JqZmlsZSwg b3NlY3QpCisgICAgICB7CisJaWYgKCFzZWN0aW9uX2lzX292ZXJsYXkgKG9zZWN0KSkKKwkgIGNv bnRpbnVlOworCisJYXNlY3Rpb24gKmJzZWN0ID0gb3NlY3QtPnRoZV9iZmRfc2VjdGlvbjsKKwli ZmRfdm1hIGxtYSA9IGJmZF9zZWN0aW9uX2xtYSAoYnNlY3QpOworCWJmZF92bWEgdm1hID0gYmZk X3NlY3Rpb25fdm1hIChic2VjdCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGNhY2hlX25vdmx5 X3JlZ2lvbnM7ICsraSkKKwkgIGlmIChjYWNoZV9vdmx5X3JlZ2lvbl90YWJsZVtpXVtWTUFdID09 IHZtYSkKKwkgICAgb3NlY3QtPm92bHlfbWFwcGVkID0KKwkJCShjYWNoZV9vdmx5X3JlZ2lvbl90 YWJsZVtpXVtNQVBQRURfVE9fTE1BXSA9PSBsbWEpOworICAgICAgfQorfQorCisvKiBSZXR1cm4g bm9uLXplcm8gaWYgdGhlIGluc3RydWN0aW9uIGF0IEFERFIgaXMgYSBjYWxsOyB6ZXJvIG90aGVy d2lzZS4gKi8KK3N0YXRpYyBpbnQKK3o4MF9pbnNuX2lzX2NhbGwgKHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoLCBDT1JFX0FERFIgYWRkcikKK3sKKyAgZ2RiX2J5dGUgYnVmWzhdOworICBpbnQgc2l6 ZTsKKyAgY29uc3Qgc3RydWN0IGluc25faW5mbyAqaW5mbzsKKyAgcmVhZF9tZW1vcnkgKGFkZHIs IGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICBpbmZvID0gejgwX2dldF9pbnNuX2luZm8gKGdkYmFyY2gs IGJ1ZiwgJnNpemUpOworICBpZiAoaW5mbykKKyAgICBzd2l0Y2ggKGluZm8tPnR5cGUpCisgICAg ICB7CisgICAgICBjYXNlIGluc25fY2FsbF9ubjoKKyAgICAgIGNhc2UgaW5zbl9jYWxsX2NjX25u OgorICAgICAgY2FzZSBpbnNuX3JzdF9uOgorCXJldHVybiAxOworICAgICAgfQorICByZXR1cm4g MDsKK30KKworLyogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBpbnN0cnVjdGlvbiBhdCBBRERSIGlz IGEgcmV0dXJuOyB6ZXJvIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBpbnQKK3o4MF9pbnNuX2lzX3Jl dCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIENPUkVfQUREUiBhZGRyKQoreworICBnZGJfYnl0 ZSBidWZbOF07CisgIGludCBzaXplOworICBjb25zdCBzdHJ1Y3QgaW5zbl9pbmZvICppbmZvOwor ICByZWFkX21lbW9yeSAoYWRkciwgYnVmLCBzaXplb2YoYnVmKSk7CisgIGluZm8gPSB6ODBfZ2V0 X2luc25faW5mbyAoZ2RiYXJjaCwgYnVmLCAmc2l6ZSk7CisgIGlmIChpbmZvKQorICAgIHN3aXRj aCAoaW5mby0+dHlwZSkKKyAgICAgIHsKKyAgICAgIGNhc2UgaW5zbl9yZXQ6CisgICAgICBjYXNl IGluc25fcmV0X2NjOgorCXJldHVybiAxOworICAgICAgfQorICByZXR1cm4gMDsKK30KKworLyog UmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBpbnN0cnVjdGlvbiBhdCBBRERSIGlzIGEganVtcDsgemVy byBvdGhlcndpc2UuICovCitzdGF0aWMgaW50Cit6ODBfaW5zbl9pc19qdW1wIChzdHJ1Y3QgZ2Ri YXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIGFkZHIpCit7CisgIGdkYl9ieXRlIGJ1Zls4XTsKKyAg aW50IHNpemU7CisgIGNvbnN0IHN0cnVjdCBpbnNuX2luZm8gKmluZm87CisgIHJlYWRfbWVtb3J5 IChhZGRyLCBidWYsIHNpemVvZihidWYpKTsKKyAgaW5mbyA9IHo4MF9nZXRfaW5zbl9pbmZvIChn ZGJhcmNoLCBidWYsICZzaXplKTsKKyAgaWYgKGluZm8pCisgICAgc3dpdGNoIChpbmZvLT50eXBl KQorICAgICAgeworICAgICAgY2FzZSBpbnNuX2pwX25uOgorICAgICAgY2FzZSBpbnNuX2pwX2Nj X25uOgorICAgICAgY2FzZSBpbnNuX2pwX3JyOgorICAgICAgY2FzZSBpbnNuX2pyX2Q6CisgICAg ICBjYXNlIGluc25fanJfY2NfZDoKKyAgICAgIGNhc2UgaW5zbl9kam56X2Q6CisJcmV0dXJuIDE7 CisgICAgICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZyYW1lX3Vu d2luZAorejgwX2ZyYW1lX3Vud2luZCA9Cit7CisgIE5PUk1BTF9GUkFNRSwKKyAgZGVmYXVsdF9m cmFtZV91bndpbmRfc3RvcF9yZWFzb24sCisgIHo4MF9mcmFtZV90aGlzX2lkLAorICB6ODBfZnJh bWVfcHJldl9yZWdpc3RlciwKKyAgTlVMTCwgLyp1bndpbmRfZGF0YSovCisgIGRlZmF1bHRfZnJh bWVfc25pZmZlcgorICAvKmRlYWxsb2NfY2FjaGUqLworICAvKnByZXZfYXJjaCovCit9OworCisv KiBJbml0aWFsaXplIHRoZSBnZGJhcmNoIHN0cnVjdCBmb3IgdGhlIFo4MCBhcmNoICovCitzdGF0 aWMgc3RydWN0IGdkYmFyY2ggKgorejgwX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5m byBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCit7CisgIHN0cnVjdCBnZGJhcmNo ICpnZGJhcmNoOworICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwOworICBzdHJ1Y3QgZ2RiYXJj aF9saXN0ICpiZXN0X2FyY2g7CisgIHN0cnVjdCB0ZGVzY19hcmNoX2RhdGEgKnRkZXNjX2RhdGEg PSBOVUxMOworICB1bnNpZ25lZCBsb25nIG1hY2ggPSBpbmZvLmJmZF9hcmNoX2luZm8tPm1hY2g7 CisgIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqdGRlc2MgPSBpbmZvLnRhcmdldF9kZXNjOwor CisgIGlmICghdGRlc2NfaGFzX3JlZ2lzdGVycyAodGRlc2MpKQorICAgIC8qIFBpY2sgYSBkZWZh dWx0IHRhcmdldCBkZXNjcmlwdGlvbi4gICovCisgICAgdGRlc2MgPSB0ZGVzY196ODA7CisKKyAg LyogQ2hlY2sgYW55IHRhcmdldCBkZXNjcmlwdGlvbiBmb3IgdmFsaWRpdHkuICAqLworICBpZiAo dGRlc2NfaGFzX3JlZ2lzdGVycyAodGRlc2MpKQorICAgIHsKKyAgICAgIGNvbnN0IHN0cnVjdCB0 ZGVzY19mZWF0dXJlICpmZWF0dXJlOworICAgICAgaW50IHZhbGlkX3A7CisKKyAgICAgIGZlYXR1 cmUgPSB0ZGVzY19maW5kX2ZlYXR1cmUgKHRkZXNjLCAib3JnLmdudS5nZGIuejgwLmNwdSIpOwor ICAgICAgaWYgKGZlYXR1cmUgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgICAgdGRlc2Nf ZGF0YSA9IHRkZXNjX2RhdGFfYWxsb2MgKCk7CisKKyAgICAgIHZhbGlkX3AgPSAxOworCisgICAg ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgWjgwX05VTV9SRUdTOyBpKyspCisJdmFsaWRfcCAm PSB0ZGVzY19udW1iZXJlZF9yZWdpc3RlciAoZmVhdHVyZSwgdGRlc2NfZGF0YSwgaSwKKwkJCQkJ ICAgIHo4MF9yZWdfbmFtZXNbaV0pOworCisgICAgICBpZiAoIXZhbGlkX3ApCisJeworCSAgdGRl c2NfZGF0YV9jbGVhbnVwICh0ZGVzY19kYXRhKTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICB9 CisKKyAgLyogSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGNhbmRpZGF0ZSwgdXNlIGl0LiAgKi8KKyAg Zm9yIChiZXN0X2FyY2ggPSBnZGJhcmNoX2xpc3RfbG9va3VwX2J5X2luZm8gKGFyY2hlcywgJmlu Zm8pOworICAgICAgIGJlc3RfYXJjaCAhPSBOVUxMOworICAgICAgIGJlc3RfYXJjaCA9IGdkYmFy Y2hfbGlzdF9sb29rdXBfYnlfaW5mbyAoYmVzdF9hcmNoLT5uZXh0LCAmaW5mbykpCisgICAgewor ICAgICAgaWYgKG1hY2ggPT0gZ2RiYXJjaF9iZmRfYXJjaF9pbmZvIChiZXN0X2FyY2gtPmdkYmFy Y2gpLT5tYWNoKQorCXJldHVybiBiZXN0X2FyY2gtPmdkYmFyY2g7CisgICAgfQorCisgIC8qIE5v bmUgZm91bmQsIGNyZWF0ZSBhIG5ldyBhcmNoaXRlY3R1cmUgZnJvbSB0aGUgaW5mb3JtYXRpb24g cHJvdmlkZWQuICAqLworICB0ZGVwID0gWENORVcgKHN0cnVjdCBnZGJhcmNoX3RkZXApOworICBn ZGJhcmNoID0gZ2RiYXJjaF9hbGxvYyAoJmluZm8sIHRkZXApOworCisgIGlmIChtYWNoID09IGJm ZF9tYWNoX2V6ODBfYWRsKQorICAgIHsKKyAgICAgIHRkZXAtPmFkZHJfbGVuZ3RoID0gMzsKKyAg ICAgIHNldF9nZGJhcmNoX21heF9pbnNuX2xlbmd0aCAoZ2RiYXJjaCwgNik7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgdGRlcC0+YWRkcl9sZW5ndGggPSAyOworICAgICAgc2V0X2dkYmFy Y2hfbWF4X2luc25fbGVuZ3RoIChnZGJhcmNoLCA0KTsKKyAgICB9CisKKyAgLyogQ3JlYXRlIGEg dHlwZSBmb3IgUEMuICBXZSBjYW4ndCB1c2UgYnVpbHRpbiB0eXBlcyBoZXJlLCBhcyB0aGV5IG1h eSBub3QKKyAgICAgYmUgZGVmaW5lZC4gICovCisgIHRkZXAtPnZvaWRfdHlwZSA9IGFyY2hfdHlw ZSAoZ2RiYXJjaCwgVFlQRV9DT0RFX1ZPSUQsIFRBUkdFVF9DSEFSX0JJVCwKKwkJCSAgICAgICAi dm9pZCIpOworICB0ZGVwLT5mdW5jX3ZvaWRfdHlwZSA9IG1ha2VfZnVuY3Rpb25fdHlwZSAodGRl cC0+dm9pZF90eXBlLCBOVUxMKTsKKyAgdGRlcC0+cGNfdHlwZSA9IGFyY2hfcG9pbnRlcl90eXBl IChnZGJhcmNoLAorCQkJCSAgICAgdGRlcC0+YWRkcl9sZW5ndGggKiBUQVJHRVRfQ0hBUl9CSVQs CisJCQkJICAgICBOVUxMLCB0ZGVwLT5mdW5jX3ZvaWRfdHlwZSk7CisKKyAgc2V0X2dkYmFyY2hf c2hvcnRfYml0IChnZGJhcmNoLCBUQVJHRVRfQ0hBUl9CSVQpOworICBzZXRfZ2RiYXJjaF9pbnRf Yml0IChnZGJhcmNoLCAyICogVEFSR0VUX0NIQVJfQklUKTsKKyAgc2V0X2dkYmFyY2hfbG9uZ19i aXQgKGdkYmFyY2gsIDQgKiBUQVJHRVRfQ0hBUl9CSVQpOworICBzZXRfZ2RiYXJjaF9wdHJfYml0 IChnZGJhcmNoLCB0ZGVwLT5hZGRyX2xlbmd0aCAqIFRBUkdFVF9DSEFSX0JJVCk7CisgIHNldF9n ZGJhcmNoX2FkZHJfYml0IChnZGJhcmNoLCB0ZGVwLT5hZGRyX2xlbmd0aCAqIFRBUkdFVF9DSEFS X0JJVCk7CisKKyAgc2V0X2dkYmFyY2hfbnVtX3JlZ3MgKGdkYmFyY2gsIChtYWNoID09IGJmZF9t YWNoX2V6ODBfYWRsKSA/IEVaODBfTlVNX1JFR1MKKwkJCQkJCQkgICAgIDogWjgwX05VTV9SRUdT KTsKKyAgc2V0X2dkYmFyY2hfc3BfcmVnbnVtIChnZGJhcmNoLCBaODBfU1BfUkVHTlVNKTsKKyAg c2V0X2dkYmFyY2hfcGNfcmVnbnVtIChnZGJhcmNoLCBaODBfUENfUkVHTlVNKTsKKworICBzZXRf Z2RiYXJjaF9yZWdpc3Rlcl9uYW1lIChnZGJhcmNoLCB6ODBfcmVnaXN0ZXJfbmFtZSk7CisgIHNl dF9nZGJhcmNoX3JlZ2lzdGVyX3R5cGUgKGdkYmFyY2gsIHo4MF9yZWdpc3Rlcl90eXBlKTsKKwor ICAvKiBUT0RPOiBnZXQgRlAgdHlwZSBmcm9tIGJpbmFyeSAoZXh0cmEgZmxhZ3MgcmVxdWlyZWQp ICovCisgIHNldF9nZGJhcmNoX2Zsb2F0X2JpdCAoZ2RiYXJjaCwgNCAqIFRBUkdFVF9DSEFSX0JJ VCk7CisgIHNldF9nZGJhcmNoX2RvdWJsZV9iaXQgKGdkYmFyY2gsIDQgKiBUQVJHRVRfQ0hBUl9C SVQpOworICBzZXRfZ2RiYXJjaF9sb25nX2RvdWJsZV9iaXQgKGdkYmFyY2gsIDQgKiBUQVJHRVRf Q0hBUl9CSVQpOworICBzZXRfZ2RiYXJjaF9mbG9hdF9mb3JtYXQgKGdkYmFyY2gsIGZsb2F0Zm9y bWF0c19pZWVlX3NpbmdsZSk7CisgIHNldF9nZGJhcmNoX2RvdWJsZV9mb3JtYXQgKGdkYmFyY2gs IGZsb2F0Zm9ybWF0c19pZWVlX3NpbmdsZSk7CisgIHNldF9nZGJhcmNoX2xvbmdfZG91YmxlX2Zv cm1hdCAoZ2RiYXJjaCwgZmxvYXRmb3JtYXRzX2llZWVfc2luZ2xlKTsKKworICBzZXRfZ2RiYXJj aF9yZXR1cm5fdmFsdWUgKGdkYmFyY2gsIHo4MF9yZXR1cm5fdmFsdWUpOworCisgIHNldF9nZGJh cmNoX3NraXBfcHJvbG9ndWUgKGdkYmFyY2gsIHo4MF9za2lwX3Byb2xvZ3VlKTsKKyAgc2V0X2dk YmFyY2hfaW5uZXJfdGhhbiAoZ2RiYXJjaCwgY29yZV9hZGRyX2xlc3N0aGFuKTsgLy8gZmFsbGlu ZyBzdGFjaworCisgIHNldF9nZGJhcmNoX3NvZnR3YXJlX3NpbmdsZV9zdGVwIChnZGJhcmNoLCB6 ODBfc29mdHdhcmVfc2luZ2xlX3N0ZXApOworICBzZXRfZ2RiYXJjaF9icmVha3BvaW50X2tpbmRf ZnJvbV9wYyAoZ2RiYXJjaCwgejgwX2JyZWFrcG9pbnRfa2luZF9mcm9tX3BjKTsKKyAgc2V0X2dk YmFyY2hfc3dfYnJlYWtwb2ludF9mcm9tX2tpbmQgKGdkYmFyY2gsIHo4MF9zd19icmVha3BvaW50 X2Zyb21fa2luZCk7CisgIHNldF9nZGJhcmNoX2luc25faXNfY2FsbCAoZ2RiYXJjaCwgejgwX2lu c25faXNfY2FsbCk7CisgIHNldF9nZGJhcmNoX2luc25faXNfanVtcCAoZ2RiYXJjaCwgejgwX2lu c25faXNfanVtcCk7CisgIHNldF9nZGJhcmNoX2luc25faXNfcmV0IChnZGJhcmNoLCB6ODBfaW5z bl9pc19yZXQpOworCisgIHNldF9nZGJhcmNoX292ZXJsYXlfdXBkYXRlIChnZGJhcmNoLCB6ODBf b3ZlcmxheV91cGRhdGUpOworCisgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIgKGdkYmFy Y2gsICZ6ODBfZnJhbWVfdW53aW5kKTsKKyAgaWYgKHRkZXNjX2RhdGEpCisgICAgdGRlc2NfdXNl X3JlZ2lzdGVycyAoZ2RiYXJjaCwgdGRlc2MsIHRkZXNjX2RhdGEpOworCisgIHJldHVybiBnZGJh cmNoOworfQorCit2b2lkCitfaW5pdGlhbGl6ZV96ODBfdGRlcCAodm9pZCkKK3sKKyAgcmVnaXN0 ZXJfZ2RiYXJjaF9pbml0IChiZmRfYXJjaF96ODAsIHo4MF9nZGJhcmNoX2luaXQpOworICBpbml0 aWFsaXplX3RkZXNjX3o4MCAoKTsKK30KKworLyogVGFibGUgdG8gZGlzYXNzZW1ibGUgbWFjaGlu ZSBjb2RlcyB3aXRob3V0IHByZWZpeC4gICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGluc25faW5m bworZXo4MF9tYWluX2luc25fdGFibGVbXSA9Cit7IC8qIHRhYmxlIHdpdGggZG91YmxlIHByZWZp eCBjaGVjayAqLworICB7IDAxMDAsIDAzNzcsIDAsIGluc25fZm9yY2Vfbm9wfSwgLy9kb3VibGUg cHJlZml4CisgIHsgMDExMSwgMDM3NywgMCwgaW5zbl9mb3JjZV9ub3B9LCAvL2RvdWJsZSBwcmVm aXgKKyAgeyAwMTIyLCAwMzc3LCAwLCBpbnNuX2ZvcmNlX25vcH0sIC8vZG91YmxlIHByZWZpeAor ICB7IDAxMzMsIDAzNzcsIDAsIGluc25fZm9yY2Vfbm9wfSwgLy9kb3VibGUgcHJlZml4CisgIC8q IGluaXRpYWwgdGFibGUgZm9yIGVaODBfejgwICovCisgIHsgMDEwMCwgMDM3NywgMSwgaW5zbl96 ODAgICAgICB9LCAvL2VaODAgbW9kZSBwcmVmaXgKKyAgeyAwMTExLCAwMzc3LCAxLCBpbnNuX3o4 MCAgICAgIH0sIC8vZVo4MCBtb2RlIHByZWZpeAorICB7IDAxMjIsIDAzNzcsIDEsIGluc25fYWRs ICAgICAgfSwgLy9lWjgwIG1vZGUgcHJlZml4CisgIHsgMDEzMywgMDM3NywgMSwgaW5zbl9hZGwg ICAgICB9LCAvL2VaODAgbW9kZSBwcmVmaXgKKyAgLyogaGVyZSBjb21tb24gWjgwL1oxODAvZVo4 MCBvcGNvZGVzICovCisgIHsgMDAwMCwgMDM2NywgMSwgaW5zbl9kZWZhdWx0ICB9LCAvLyJub3Ai LCAiZXggYWYsYWYnIgorICB7IDAwNjEsIDAzNzcsIDMsIGluc25fbGRfc3Bfbm4gfSwgLy8ibGQg c3Asbm4iCisgIHsgMDAwMSwgMDMxNywgMywgaW5zbl9kZWZhdWx0ICB9LCAvLyJsZCBycixubiIK KyAgeyAwMDAyLCAwMzQ3LCAxLCBpbnNuX2RlZmF1bHQgIH0sIC8vImxkIChyciksYSIsICJsZCBh LChycikiCisgIHsgMDA0MiwgMDM0NywgMywgaW5zbl9kZWZhdWx0ICB9LCAvLyJsZCAobm4pLGhs L2EiLCAibGQgaGwvYSwobm4pIgorICB7IDAwNjMsIDAzNzcsIDEsIGluc25faW5jX3NwICAgfSwg Ly8iaW5jIHNwIgorICB7IDAwNzMsIDAzNzcsIDEsIGluc25fZGVjX3NwICAgfSwgLy8iZGVjIHNw IgorICB7IDAwMDMsIDAzMDMsIDEsIGluc25fZGVmYXVsdCAgfSwgLy8iaW5jIHJyIiwgImRlYyBy ciIsIC4uLgorICB7IDAwMDQsIDAzMDcsIDEsIGluc25fZGVmYXVsdCAgfSwgLy8iaW5jL2RlYyBy LyhobCkiCisgIHsgMDAwNiwgMDMwNywgMiwgaW5zbl9kZWZhdWx0ICB9LCAvLyJsZCByLG4iLCAi bGQgKGhsKSxuIgorICB7IDAwMjAsIDAzNzcsIDIsIGluc25fZGpuel9kICAgfSwgLy8iZGpueiBk aXMiCisgIHsgMDAzMCwgMDM3NywgMiwgaW5zbl9qcl9kICAgICB9LCAvLyJqciBkaXMiCisgIHsg MDA0MCwgMDM0NywgMiwgaW5zbl9qcl9jY19kICB9LCAvLyJqciBjYyxkaXMiCisgIHsgMDEwMCwg MDMwMCwgMSwgaW5zbl9kZWZhdWx0ICB9LCAvLyJsZCByLHIiLCAiaGFsdCIKKyAgeyAwMjAwLCAw MzAwLCAxLCBpbnNuX2RlZmF1bHQgIH0sIC8vImFsdV9vcCBhLHIiCisgIHsgMDMwMCwgMDMwNywg MSwgaW5zbl9yZXRfY2MgICB9LCAvLyJyZXQgY2MiCisgIHsgMDMwMSwgMDMxNywgMSwgaW5zbl9w b3BfcnIgICB9LCAvLyJwb3AgcnIiCisgIHsgMDMwMiwgMDMwNywgMywgaW5zbl9qcF9jY19ubiB9 LCAvLyJqcCBjYyxubiIKKyAgeyAwMzAzLCAwMzc3LCAzLCBpbnNuX2pwX25uICAgIH0sIC8vImpw IG5uIgorICB7IDAzMDQsIDAzMDcsIDMsIGluc25fY2FsbF9jY19ubn0sIC8vImNhbGwgY2Msbm4i CisgIHsgMDMwNSwgMDMxNywgMSwgaW5zbl9wdXNoX3JyICB9LCAvLyJwdXNoIHJyIgorICB7IDAz MDYsIDAzMDcsIDIsIGluc25fZGVmYXVsdCAgfSwgLy8iYWx1X29wIGEsbiIKKyAgeyAwMzA3LCAw MzA3LCAxLCBpbnNuX3JzdF9uICAgIH0sIC8vInJzdCBuIgorICB7IDAzMTEsIDAzNzcsIDEsIGlu c25fcmV0ICAgICAgfSwgLy8icmV0IgorICB7IDAzMTMsIDAzNzcsIDIsIGluc25fZGVmYXVsdCAg fSwgLy9DQiBwcmVmaXgKKyAgeyAwMzE1LCAwMzc3LCAzLCBpbnNuX2NhbGxfbm4gIH0sIC8vImNh bGwgbm4iCisgIHsgMDMyMywgMDM2NywgMiwgaW5zbl9kZWZhdWx0ICB9LCAvLyJvdXQgKG4pLGEi LCAiaW4gYSwobikiCisgIHsgMDMzNSwgMDMzNywgMSwgaW5zbl96ODBfZGRmZCB9LCAvL0REL0ZE IHByZWZpeAorICB7IDAzNTEsIDAzNzcsIDEsIGluc25fanBfcnIgICAgfSwgLy8ianAgKGhsKSIK KyAgeyAwMzU1LCAwMzc3LCAxLCBpbnNuX3o4MF9lZCAgIH0sIC8vRUQgcHJlZml4CisgIHsgMDM3 MSwgMDM3NywgMSwgaW5zbl9sZF9zcF9yciB9LCAvLyJsZCBzcCxobCIKKyAgeyAwMDAwLCAwMDAw LCAxLCBpbnNuX2RlZmF1bHQgIH0gIC8vb3RoZXJzCit9IDsKKworc3RhdGljIGNvbnN0IHN0cnVj dCBpbnNuX2luZm8KK2V6ODBfYWRsX21haW5faW5zbl90YWJsZVtdID0KK3sgLyogdGFibGUgd2l0 aCBkb3VibGUgcHJlZml4IGNoZWNrICovCisgIHsgMDEwMCwgMDM3NywgMCwgaW5zbl9mb3JjZV9u b3B9LCAvL2RvdWJsZSBwcmVmaXgKKyAgeyAwMTExLCAwMzc3LCAwLCBpbnNuX2ZvcmNlX25vcH0s IC8vZG91YmxlIHByZWZpeAorICB7IDAxMjIsIDAzNzcsIDAsIGluc25fZm9yY2Vfbm9wfSwgLy9k b3VibGUgcHJlZml4CisgIHsgMDEzMywgMDM3NywgMCwgaW5zbl9mb3JjZV9ub3B9LCAvL2RvdWJs ZSBwcmVmaXgKKyAgLyogaW5pdGlhbCB0YWJsZSBmb3IgZVo4MF9hZGwgKi8KKyAgeyAwMDAwLCAw MzY3LCAxLCBpbnNuX2RlZmF1bHQgIH0sIC8vIm5vcCIsICJleCBhZixhZiciCisgIHsgMDA2MSwg MDM3NywgNCwgaW5zbl9sZF9zcF9ubiB9LCAvLyJsZCBzcCxNbW4iCisgIHsgMDAwMSwgMDMxNywg NCwgaW5zbl9kZWZhdWx0ICB9LCAvLyJsZCBycixNbW4iCisgIHsgMDAwMiwgMDM0NywgMSwgaW5z bl9kZWZhdWx0ICB9LCAvLyJsZCAocnIpLGEiLCAibGQgYSwocnIpIgorICB7IDAwNDIsIDAzNDcs IDQsIGluc25fZGVmYXVsdCAgfSwgLy8ibGQgKE1tbiksaGwvYSIsICJsZCBobC9hLChNbW4pIgor ICB7IDAwNjMsIDAzNzcsIDEsIGluc25faW5jX3NwICAgfSwgLy8iaW5jIHNwIgorICB7IDAwNzMs IDAzNzcsIDEsIGluc25fZGVjX3NwICAgfSwgLy8iZGVjIHNwIgorICB7IDAwMDMsIDAzMDMsIDEs IGluc25fZGVmYXVsdCAgfSwgLy8iaW5jIHJyIiwgImRlYyByciIsIC4uLgorICB7IDAwMDQsIDAz MDcsIDEsIGluc25fZGVmYXVsdCAgfSwgLy8iaW5jL2RlYyByLyhobCkiCisgIHsgMDAwNiwgMDMw NywgMiwgaW5zbl9kZWZhdWx0ICB9LCAvLyJsZCByLG4iLCAibGQgKGhsKSxuIgorICB7IDAwMjAs IDAzNzcsIDIsIGluc25fZGpuel9kICAgfSwgLy8iZGpueiBkaXMiCisgIHsgMDAzMCwgMDM3Nywg MiwgaW5zbl9qcl9kICAgICB9LCAvLyJqciBkaXMiCisgIHsgMDA0MCwgMDM0NywgMiwgaW5zbl9q cl9jY19kICB9LCAvLyJqciBjYyxkaXMiCisgIHsgMDEwMCwgMDM3NywgMSwgaW5zbl96ODAgICAg ICB9LCAvL2VaODAgbW9kZSBwcmVmaXggKHNob3J0IGluc3RydWN0aW9uKQorICB7IDAxMTEsIDAz NzcsIDEsIGluc25fejgwICAgICAgfSwgLy9lWjgwIG1vZGUgcHJlZml4IChzaG9ydCBpbnN0cnVj dGlvbikKKyAgeyAwMTIyLCAwMzc3LCAxLCBpbnNuX2FkbCAgICAgIH0sIC8vZVo4MCBtb2RlIHBy ZWZpeCAobG9uZyBpbnN0cnVjdGlvbikKKyAgeyAwMTMzLCAwMzc3LCAxLCBpbnNuX2FkbCAgICAg IH0sIC8vZVo4MCBtb2RlIHByZWZpeCAobG9uZyBpbnN0cnVjdGlvbikKKyAgeyAwMTAwLCAwMzAw LCAxLCBpbnNuX2RlZmF1bHQgIH0sIC8vImxkIHIsciIsICJoYWx0IgorICB7IDAyMDAsIDAzMDAs IDEsIGluc25fZGVmYXVsdCAgfSwgLy8iYWx1X29wIGEsciIKKyAgeyAwMzAwLCAwMzA3LCAxLCBp bnNuX3JldF9jYyAgIH0sIC8vInJldCBjYyIKKyAgeyAwMzAxLCAwMzE3LCAxLCBpbnNuX3BvcF9y ciAgIH0sIC8vInBvcCByciIKKyAgeyAwMzAyLCAwMzA3LCA0LCBpbnNuX2pwX2NjX25uIH0sIC8v ImpwIGNjLG5uIgorICB7IDAzMDMsIDAzNzcsIDQsIGluc25fanBfbm4gICAgfSwgLy8ianAgbm4i CisgIHsgMDMwNCwgMDMwNywgNCwgaW5zbl9jYWxsX2NjX25ufSwgLy8iY2FsbCBjYyxNbW4iCisg IHsgMDMwNSwgMDMxNywgMSwgaW5zbl9wdXNoX3JyICB9LCAvLyJwdXNoIHJyIgorICB7IDAzMDYs IDAzMDcsIDIsIGluc25fZGVmYXVsdCAgfSwgLy8iYWx1X29wIGEsbiIKKyAgeyAwMzA3LCAwMzA3 LCAxLCBpbnNuX3JzdF9uICAgIH0sIC8vInJzdCBuIgorICB7IDAzMTEsIDAzNzcsIDEsIGluc25f cmV0ICAgICAgfSwgLy8icmV0IgorICB7IDAzMTMsIDAzNzcsIDIsIGluc25fZGVmYXVsdCAgfSwg Ly9DQiBwcmVmaXgKKyAgeyAwMzE1LCAwMzc3LCA0LCBpbnNuX2NhbGxfbm4gIH0sIC8vImNhbGwg TW1uIgorICB7IDAzMjMsIDAzNjcsIDIsIGluc25fZGVmYXVsdCAgfSwgLy8ib3V0IChuKSxhIiwg ImluIGEsKG4pIgorICB7IDAzMzUsIDAzMzcsIDEsIGluc25fYWRsX2RkZmQgfSwgLy9ERC9GRCBw cmVmaXgKKyAgeyAwMzUxLCAwMzc3LCAxLCBpbnNuX2pwX3JyICAgIH0sIC8vImpwIChobCkiCisg IHsgMDM1NSwgMDM3NywgMSwgaW5zbl9hZGxfZWQgICB9LCAvL0VEIHByZWZpeAorICB7IDAzNzEs IDAzNzcsIDEsIGluc25fbGRfc3BfcnIgfSwgLy8ibGQgc3AsaGwiCisgIHsgMDAwMCwgMDAwMCwg MSwgaW5zbl9kZWZhdWx0ICB9ICAvL290aGVycworfTsKKworLyogRUQgcHJlZml4IG9wY29kZXMg dGFibGUuCisgICBOb3RlIHRoZSBpbnN0cnVjdGlvbiBsZW5ndGggZG9lcyBpbmNsdWRlIHRoZSBF RCBwcmVmaXggKCsgMSBieXRlKQorKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5zbl9pbmZvCitl ejgwX2VkX2luc25fdGFibGVbXSA9Cit7CisgIC8qIGVaODAgb25seSBpbnN0cnVjdGlvbnMgKi8K KyAgeyAwMDAyLCAwMzY2LCAyLCBpbnNuX2RlZmF1bHQgICAgfSwgLy8ibGVhIHJyLGlpK2QiCisg IHsgMDEyNCwgMDM3NiwgMiwgaW5zbl9kZWZhdWx0ICAgIH0sIC8vImxlYSBpeCxpeStkIiwgImxl YSBpeSxpeCtkIgorICB7IDAxNDUsIDAzNzcsIDIsIGluc25fZGVmYXVsdCAgICB9LCAvLyJwZWEg aXgrZCIKKyAgeyAwMTQ2LCAwMzc3LCAyLCBpbnNuX2RlZmF1bHQgICAgfSwgLy8icGVhIGl5K2Qi CisgIHsgMDE2NCwgMDM3NywgMiwgaW5zbl9kZWZhdWx0ICAgIH0sIC8vInRzdGlvIG4iCisgIC8q IFoxODAvZVo4MCBvbmx5IGluc3RydWN0aW9ucyAqLworICB7IDAwNjAsIDAzNzYsIDEsIGluc25f ZGVmYXVsdCAgICB9LCAvL25vdCBhbiBpbnN0cnVjdGlvbgorICB7IDAwMDAsIDAzMDYsIDIsIGlu c25fZGVmYXVsdCAgICB9LCAvLyJpbjAgciwobikiLCAib3V0MCAobiksciIKKyAgeyAwMTQ0LCAw Mzc3LCAyLCBpbnNuX2RlZmF1bHQgICAgfSwgLy8idHN0IGEsIG4iCisgIC8qIGNvbW1vbiBpbnN0 cnVjdGlvbnMgKi8KKyAgeyAwMTczLCAwMzc3LCAzLCBpbnNuX2xkX3NwXzZubjkgfSwgLy8ibGQg c3AsKG5uKSIKKyAgeyAwMTAzLCAwMzA3LCAzLCBpbnNuX2RlZmF1bHQgICAgfSwgLy8ibGQgKG5u KSxyciIsICJsZCByciwobm4pIgorICB7IDAxMDUsIDAzMTcsIDEsIGluc25fcmV0ICAgICAgICB9 LCAvLyJyZXRuIiwgInJldGkiCisgIHsgMDAwMCwgMDAwMCwgMSwgaW5zbl9kZWZhdWx0ICAgIH0K K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5zbl9pbmZvCitlejgwX2FkbF9lZF9pbnNuX3Rh YmxlW10gPQoreworICB7IDAwMDIsIDAzNjYsIDIsIGluc25fZGVmYXVsdCB9LCAvLyJsZWEgcnIs aWkrZCIKKyAgeyAwMTI0LCAwMzc2LCAyLCBpbnNuX2RlZmF1bHQgfSwgLy8ibGVhIGl4LGl5K2Qi LCAibGVhIGl5LGl4K2QiCisgIHsgMDE0NSwgMDM3NywgMiwgaW5zbl9kZWZhdWx0IH0sIC8vInBl YSBpeCtkIgorICB7IDAxNDYsIDAzNzcsIDIsIGluc25fZGVmYXVsdCB9LCAvLyJwZWEgaXkrZCIK KyAgeyAwMTY0LCAwMzc3LCAyLCBpbnNuX2RlZmF1bHQgfSwgLy8idHN0aW8gbiIKKyAgeyAwMDYw LCAwMzc2LCAxLCBpbnNuX2RlZmF1bHQgfSwgLy9ub3QgYW4gaW5zdHJ1Y3Rpb24KKyAgeyAwMDAw LCAwMzA2LCAyLCBpbnNuX2RlZmF1bHQgfSwgLy8iaW4wIHIsKG4pIiwgIm91dDAgKG4pLHIiCisg IHsgMDE0NCwgMDM3NywgMiwgaW5zbl9kZWZhdWx0IH0sIC8vInRzdCBhLCBuIgorICB7IDAxNzMs IDAzNzcsIDQsIGluc25fbGRfc3BfNm5uOSB9LCAvLyJsZCBzcCwobm4pIgorICB7IDAxMDMsIDAz MDcsIDQsIGluc25fZGVmYXVsdCB9LCAvLyJsZCAobm4pLHJyIiwgImxkIHJyLChubikiCisgIHsg MDEwNSwgMDMxNywgMSwgaW5zbl9yZXQgICAgIH0sIC8vInJldG4iLCAicmV0aSIKKyAgeyAwMDAw LCAwMDAwLCAxLCBpbnNuX2RlZmF1bHQgfQorfTsKKworLyogdGFibGUgZm9yIEZEIGFuZCBERCBw cmVmaXhlZCBpbnN0cnVjdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5zbl9pbmZvCitl ejgwX2RkZmRfaW5zbl90YWJsZVtdID0KK3sKKyAgLyogZXo4MCBvbmx5IGluc3RydWN0aW9ucyAq LworICB7IDAwMDcsIDAzMDcsIDIsIGluc25fZGVmYXVsdCB9LCAvLyJsZCByciwoaWkrZCkiCisg IHsgMDA2MSwgMDM3NywgMiwgaW5zbl9kZWZhdWx0IH0sIC8vImxkIGlpLChpaStkKSIKKyAgLyog Y29tbW9uIGluc3RydWN0aW9ucyAqLworICB7IDAwMTEsIDAzNjcsIDIsIGluc25fZGVmYXVsdCB9 LCAvLyJhZGQgaWkscnIiCisgIHsgMDA0MSwgMDM3NywgMywgaW5zbl9kZWZhdWx0IH0sIC8vImxk IGlpLG5uIgorICB7IDAwNDIsIDAzNjcsIDMsIGluc25fZGVmYXVsdCB9LCAvLyJsZCAobm4pLGlp IiwgImxkIGlpLChubikiCisgIHsgMDA0MywgMDM2NywgMSwgaW5zbl9kZWZhdWx0IH0sIC8vImlu YyBpaSIsICJkZWMgaWkiCisgIHsgMDA0NCwgMDM2NiwgMSwgaW5zbl9kZWZhdWx0IH0sIC8vImlu Yy9kZWMgaWloL2lpbCIKKyAgeyAwMDQ2LCAwMzY3LCAyLCBpbnNuX2RlZmF1bHQgfSwgLy8ibGQg aWloLG4iLCAibGQgaWlsLG4iCisgIHsgMDA2NCwgMDM3NiwgMiwgaW5zbl9kZWZhdWx0IH0sIC8v ImluYyAoaWkrZCkiLCAiZGVjIChpaStkKSIKKyAgeyAwMDY2LCAwMzc3LCAyLCBpbnNuX2RlZmF1 bHQgfSwgLy8ibGQgKGlpK2QpLG4iCisgIHsgMDE2NiwgMDM3NywgMCwgaW5zbl9kZWZhdWx0IH0s IC8vbm90IGFuIGluc3RydWN0aW9uCisgIHsgMDE2MCwgMDM3MCwgMiwgaW5zbl9kZWZhdWx0IH0s IC8vImxkIChpaStkKSxyIgorICB7IDAxMDQsIDAzMDYsIDEsIGluc25fZGVmYXVsdCB9LCAvLyJs ZCByLGlpaCIsICJsZCByLGlpbCIKKyAgeyAwMTA2LCAwMzA3LCAyLCBpbnNuX2RlZmF1bHQgfSwg Ly8ibGQgciwoaWkrZCkiCisgIHsgMDE0MCwgMDM2MCwgMSwgaW5zbl9kZWZhdWx0IH0sIC8vImxk IGlpaCxyIiwgImxkIGlpbCxyIgorICB7IDAyMDQsIDAzMDYsIDEsIGluc25fZGVmYXVsdCB9LCAv LyJhbHVfb3AgYSxpaWgiLCAiYWx1X29wIGEsaWlsIgorICB7IDAyMDYsIDAzMDcsIDIsIGluc25f ZGVmYXVsdCB9LCAvLyJhbHVfb3AgYSwoaWkrZCkiCisgIHsgMDMxMywgMDM3NywgMywgaW5zbl9k ZWZhdWx0IH0sIC8vREQvRkQgQ0IgZGQgb28gaW5zdHJ1Y3Rpb25zCisgIHsgMDMzNSwgMDMzNywg MCwgaW5zbl9mb3JjZV9ub3B9LCAvL2RvdWJsZSBERC9GRCBwcmVmaXgsIGV4ZWMgREQvRkQgYXMg Tk9QCisgIHsgMDM0MSwgMDM3MywgMSwgaW5zbl9kZWZhdWx0IH0sIC8vInBvcCBpaSIsICJwdXNo IGlpIgorICB7IDAzNDMsIDAzNzcsIDEsIGluc25fZGVmYXVsdCB9LCAvLyJleCAoc3ApLGlpIgor ICB7IDAzNTEsIDAzNzcsIDEsIGluc25fanBfcnIgICB9LCAvLyJqcCAoaWkpIgorICB7IDAzNzEs IDAzNzcsIDEsIGluc25fbGRfc3BfcnJ9LCAvLyJsZCBzcCxpaSIKKyAgeyAwMDAwLCAwMDAwLCAw LCBpbnNuX2RlZmF1bHQgfSAgLy9ub3QgYW4gaW5zdHJ1Y3Rpb24sIGV4ZWMgREQvRkQgYXMgTk9Q Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGluc25faW5mbworZXo4MF9hZGxfZGRmZF9pbnNu X3RhYmxlW10gPQoreworICB7IDAwMDcsIDAzMDcsIDIsIGluc25fZGVmYXVsdCB9LCAvLyJsZCBy ciwoaWkrZCkiCisgIHsgMDA2MSwgMDM3NywgMiwgaW5zbl9kZWZhdWx0IH0sIC8vImxkIGlpLChp aStkKSIKKyAgeyAwMDExLCAwMzY3LCAxLCBpbnNuX2RlZmF1bHQgfSwgLy8iYWRkIGlpLHJyIgor ICB7IDAwNDEsIDAzNzcsIDQsIGluc25fZGVmYXVsdCB9LCAvLyJsZCBpaSxubiIKKyAgeyAwMDQy LCAwMzY3LCA0LCBpbnNuX2RlZmF1bHQgfSwgLy8ibGQgKG5uKSxpaSIsICJsZCBpaSwobm4pIgor ICB7IDAwNDMsIDAzNjcsIDEsIGluc25fZGVmYXVsdCB9LCAvLyJpbmMgaWkiLCAiZGVjIGlpIgor ICB7IDAwNDQsIDAzNjYsIDEsIGluc25fZGVmYXVsdCB9LCAvLyJpbmMvZGVjIGlpaC9paWwiCisg IHsgMDA0NiwgMDM2NywgMiwgaW5zbl9kZWZhdWx0IH0sIC8vImxkIGlpaCxuIiwgImxkIGlpbCxu IgorICB7IDAwNjQsIDAzNzYsIDIsIGluc25fZGVmYXVsdCB9LCAvLyJpbmMgKGlpK2QpIiwgImRl YyAoaWkrZCkiCisgIHsgMDA2NiwgMDM3NywgMywgaW5zbl9kZWZhdWx0IH0sIC8vImxkIChpaStk KSxuIgorICB7IDAxNjYsIDAzNzcsIDAsIGluc25fZGVmYXVsdCB9LCAvL25vdCBhbiBpbnN0cnVj dGlvbgorICB7IDAxNjAsIDAzNzAsIDIsIGluc25fZGVmYXVsdCB9LCAvLyJsZCAoaWkrZCksciIK KyAgeyAwMTA0LCAwMzA2LCAxLCBpbnNuX2RlZmF1bHQgfSwgLy8ibGQgcixpaWgiLCAibGQgcixp aWwiCisgIHsgMDEwNiwgMDMwNywgMiwgaW5zbl9kZWZhdWx0IH0sIC8vImxkIHIsKGlpK2QpIgor ICB7IDAxNDAsIDAzNjAsIDEsIGluc25fZGVmYXVsdCB9LCAvLyJsZCBpaWgsciIsICJsZCBpaWws ciIKKyAgeyAwMjA0LCAwMzA2LCAxLCBpbnNuX2RlZmF1bHQgfSwgLy8iYWx1X29wIGEsaWloIiwg ImFsdV9vcCBhLGlpbCIKKyAgeyAwMjA2LCAwMzA3LCAyLCBpbnNuX2RlZmF1bHQgfSwgLy8iYWx1 X29wIGEsKGlpK2QpIgorICB7IDAzMTMsIDAzNzcsIDMsIGluc25fZGVmYXVsdCB9LCAvL0REL0ZE IENCIGRkIG9vIGluc3RydWN0aW9ucworICB7IDAzMzUsIDAzMzcsIDAsIGluc25fZm9yY2Vfbm9w fSwgLy9kb3VibGUgREQvRkQgcHJlZml4LCBleGVjIEREL0ZEIGFzIE5PUAorICB7IDAzNDEsIDAz NzMsIDEsIGluc25fZGVmYXVsdCB9LCAvLyJwb3AgaWkiLCAicHVzaCBpaSIKKyAgeyAwMzQzLCAw Mzc3LCAxLCBpbnNuX2RlZmF1bHQgfSwgLy8iZXggKHNwKSxpaSIKKyAgeyAwMzUxLCAwMzc3LCAx LCBpbnNuX2pwX3JyICAgfSwgLy8ianAgKGlpKSIKKyAgeyAwMzcxLCAwMzc3LCAxLCBpbnNuX2xk X3NwX3JyfSwgLy8ibGQgc3AsaWkiCisgIHsgMDAwMCwgMDAwMCwgMCwgaW5zbl9kZWZhdWx0IH0g IC8vbm90IGFuIGluc3RydWN0aW9uLCBleGVjIEREL0ZEIGFzIE5PUAorfTsKKworLyogcmV0dXJu cyBwb2ludGVyIHRvIGluc3RydWN0aW9uIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBjb3JyZXNwb25k ZWQgdG8gb3Bjb2RlCisgICBpbiBidWYgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5zbl9pbmZv ICoKK3o4MF9nZXRfaW5zbl9pbmZvIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgY29uc3QgZ2Ri X2J5dGUgKmJ1ZiwgaW50ICpzaXplKQoreworICBpbnQgY29kZTsKKyAgY29uc3Qgc3RydWN0IGlu c25faW5mbyAqaW5mbzsKKyAgdW5zaWduZWQgbG9uZyBtYWNoID0gZ2RiYXJjaF9iZmRfYXJjaF9p bmZvIChnZGJhcmNoKS0+bWFjaDsKKyAgKnNpemUgPSAwOworICBzd2l0Y2ggKG1hY2gpCisgICAg eworICAgIGNhc2UgYmZkX21hY2hfZXo4MF96ODA6CisgICAgICBpbmZvID0gJmV6ODBfbWFpbl9p bnNuX3RhYmxlWzRdOyAvKiBza2lwIGZvcmNlX25vcHMgKi8KKyAgICAgIGJyZWFrOworICAgIGNh c2UgYmZkX21hY2hfZXo4MF9hZGw6CisgICAgICBpbmZvID0gJmV6ODBfYWRsX21haW5faW5zbl90 YWJsZVs0XTsgLyogc2tpcCBmb3JjZV9ub3BzICovCisgICAgICBicmVhazsKKy8qCisgICAgY2Fz ZSBiZmRfbWFjaF9nYno4MDoKKyAgICAgIGluZm8gPSAmZ2J6ODBfbWFpbl9pbnNuX3RhYmxlWzBd OworICAgICAgYnJlYWs7CisgICAgY2FzZSBiZmRfbWFjaF96ODBuOgorICAgICAgaW5mbyA9ICZ6 ODBuX21haW5faW5zbl90YWJsZVswXTsKKyAgICAgIGJyZWFrOworKi8KKyAgICBkZWZhdWx0Ogor ICAgICAgaW5mbyA9ICZlejgwX21haW5faW5zbl90YWJsZVs4XTsgLyogc2tpcCBlWjgwIHByZWZp Y2VzIGFuZCBmb3JjZV9ub3BzICovCisgICAgICBicmVhazsKKyAgICB9CisgIGRvCisgICAgewor ICAgICAgZm9yICg7ICgoY29kZSA9IGJ1Zlsqc2l6ZV0pICYgaW5mby0+bWFzaykgIT0gaW5mby0+ Y29kZTsgKytpbmZvKQorCTsKKyAgICAgICpzaXplICs9IGluZm8tPnNpemU7CisgICAgICAvKiBw cm9jZXNzIGluc3RydWN0aW9uIHR5cGUgKi8KKyAgICAgIHN3aXRjaCAoaW5mby0+dHlwZSkKKwl7 CisJY2FzZSBpbnNuX3o4MDoKKwkgIGlmIChtYWNoID09IGJmZF9tYWNoX2V6ODBfejgwIHx8IG1h Y2ggPT0gYmZkX21hY2hfZXo4MF9hZGwpCisJICAgIGluZm8gPSAmZXo4MF9tYWluX2luc25fdGFi bGVbMF07CisJICBlbHNlCisJICAgIGluZm8gPSAmZXo4MF9tYWluX2luc25fdGFibGVbOF07CisJ ICBicmVhazsKKwljYXNlIGluc25fYWRsOgorCSAgaW5mbyA9ICZlejgwX2FkbF9tYWluX2luc25f dGFibGVbMF07CisJICBicmVhazsKKwljYXNlIGluc25fejgwX2RkZmQ6CisJICBpZiAobWFjaCA9 PSBiZmRfbWFjaF9lejgwX3o4MCB8fCBtYWNoID09IGJmZF9tYWNoX2V6ODBfYWRsKQorCSAgICBp bmZvID0gJmV6ODBfZGRmZF9pbnNuX3RhYmxlWzBdOworCSAgZWxzZQorCSAgICBpbmZvID0gJmV6 ODBfZGRmZF9pbnNuX3RhYmxlWzJdOworCSAgYnJlYWs7CisJY2FzZSBpbnNuX2FkbF9kZGZkOgor CSAgaW5mbyA9ICZlejgwX2FkbF9kZGZkX2luc25fdGFibGVbMF07CisJICBicmVhazsKKwljYXNl IGluc25fejgwX2VkOgorCSAgaW5mbyA9ICZlejgwX2VkX2luc25fdGFibGVbMF07CisJICBicmVh azsKKwljYXNlIGluc25fYWRsX2VkOgorCSAgaW5mbyA9ICZlejgwX2FkbF9lZF9pbnNuX3RhYmxl WzBdOworCSAgYnJlYWs7CisJY2FzZSBpbnNuX2ZvcmNlX25vcDoKKwkgIHJldHVybiBOVUxMOwor CWRlZmF1bHQ6CisJICByZXR1cm4gaW5mbzsKKwl9CisgICAgfQorICB3aGlsZSAoMSk7Cit9CisK ZGlmZiAtLWdpdCBhL2dkYi96ODAtdGRlcC5oIGIvZ2RiL3o4MC10ZGVwLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZWMzOGM3ZGJhNAotLS0gL2Rldi9udWxsCisrKyBi L2dkYi96ODAtdGRlcC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qIFRhcmdldC1kZXBlbmRlbnQgY29k ZSBmb3IgdGhlIFo4MC4KKworICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMjAgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBaODBfVERFUF9ICisjZGVmaW5l IFo4MF9UREVQX0gKKworLyogUmVnaXN0ZXIgcGFpciBjb25zdGFudHMKKyAgIE9yZGVyIG9wdGlt aXplZCBmb3IgZ2RiLXN0dWIgaW1wbGVtZW50YXRpb24KKyAgIE1vc3Qgb2YgcmVnaXN0ZXIgcGFp cnMgYXJlIDE2IGJpdCBsZW5ndGggb24gWjgwIGFuZAorICAgMjQgYml0IG9uIGVaODAgaW4gQURM IG9yIE1BREwgbW9kZXMgKi8KK2VudW0gejgwX3JlZ251bQoreworICBaODBfQUZfUkVHTlVNLAor ICBaODBfQkNfUkVHTlVNLAorICBaODBfREVfUkVHTlVNLAorICBaODBfSExfUkVHTlVNLAorICBa ODBfU1BfUkVHTlVNLAkvKiBTUEwgb24gZVo4MCBDUFUgKi8KKyAgWjgwX1BDX1JFR05VTSwKKyAg WjgwX0lYX1JFR05VTSwKKyAgWjgwX0lZX1JFR05VTSwKKyAgWjgwX0FGQV9SRUdOVU0sCisgIFo4 MF9CQ0FfUkVHTlVNLAorICBaODBfREVBX1JFR05VTSwKKyAgWjgwX0hMQV9SRUdOVU0sCisgIFo4 MF9JUl9SRUdOVU0sCisvKiBlWjgwIG9ubHkgcmVnaXN0ZXJzICovCisgIFo4MF9TUFNfUkVHTlVN CS8qIFNQUyByZWdpc3RlciBvZiBlWjgwIENQVSAqLworfTsKKworI2RlZmluZSBaODBfTlVNX1JF R1MJMTMKKyNkZWZpbmUgWjgwX1JFR19CWVRFUwkoWjgwX05VTV9SRUdTKjIpCisKKyNkZWZpbmUg RVo4MF9OVU1fUkVHUwkoWjgwX05VTV9SRUdTICsgMSkKKyNkZWZpbmUgRVo4MF9SRUdfQllURVMJ KEVaODBfTlVNX1JFR1MqMykKKworI2VuZGlmIC8qIHo4MC10ZGVwLmggKi8K --000000000000d3f66305aff79a40--