From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-vs1-xe41.google.com (mail-vs1-xe41.google.com [IPv6:2607:f8b0:4864:20::e41]) by sourceware.org (Postfix) with ESMTPS id 39D3D3857C44 for ; Wed, 2 Sep 2020 01:56:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 39D3D3857C44 Received: by mail-vs1-xe41.google.com with SMTP id y194so789649vsc.4 for ; Tue, 01 Sep 2020 18:56:17 -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:references:in-reply-to:from:date :message-id:subject:to:cc; bh=c5u1qAI8R5WIr9oY1agX+qYpcWNnFUQgpDj9haVxAbQ=; b=spnV/DqLhRLngUrfp2+DR3sIVTfHuDw7L8z6cr79sCtCURTA15h9+G62fQ4dpXO2L0 ChOOJPdib8PhxVP1Q/jlCWWGmqmHsRWNart6AwGVPpcg5QKbC9nFa98hMl98CorrEth+ n9UcTV9rEVZGSxtV5udCJ/6Ai2Bbqk03xiojMRubirIFY+SKPUMLetFe4m12R8B0VRO5 wpG9hA+aS2v8YUhqFcd3gokWfxkaLmRuV+5P2Wiyo/gT9VXRlC46eTC5sEPVdleM19sx NMdUHh8wxen/y3iFirPXzebemzyXNUh2PW9klV0hOqTrZ4le5fLh//2Lsg4P5R3UvOmL 0JKw== X-Gm-Message-State: AOAM5331yWshQme3dFcyxK+ojO+r1R4zVnaKTU2N+T074Hy2QyCHQt1l bsvcvKt1U3DiKkmvYmKCR8Z+fDRANUiwareSuR8= X-Google-Smtp-Source: ABdhPJz1Hi/CbUfYJwsZlKombWNP0okHdNdlUR2DY9XDXSkacwuF5KRoC6DwkLMPnxlaCj8oymQWyxjdwKLj8DPQlrQ= X-Received: by 2002:a67:1a03:: with SMTP id a3mr4053494vsa.149.1599011776786; Tue, 01 Sep 2020 18:56:16 -0700 (PDT) MIME-Version: 1.0 References: <20200827122452.GN2961@tucnak> <20200901101131.GW18149@tucnak> In-Reply-To: <20200901101131.GW18149@tucnak> From: Hongtao Liu Date: Wed, 2 Sep 2020 09:57:08 +0800 Message-ID: Subject: Re: [PATCH] [AVX512] [PR87767] Optimize memory broadcast for constant vector under AVX512 To: Jakub Jelinek Cc: GCC Patches Content-Type: multipart/mixed; boundary="000000000000f28f2605ae4af0b8" X-Spam-Status: No, score=-6.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 Sep 2020 01:56:21 -0000 --000000000000f28f2605ae4af0b8 Content-Type: text/plain; charset="UTF-8" On Tue, Sep 1, 2020 at 6:11 PM Jakub Jelinek wrote: > > On Tue, Sep 01, 2020 at 05:55:18PM +0800, Hongtao Liu wrote: > > I tried define_split, but there's too many of them(considering usage > > of define_subst for mask). > > Also for new added instructions which support embedded broadcast, > > corresponding define_split needs to be added. > > One pass that could (sometimes) handle it is the rpad pass which is also > added right after the combiner like your pass. > So, couldn't you call replace_constant_pool_with_broadcast from both > your pass body loop and remove_partial_avx_dependency, the latter guarded > with if (TARGET_AVX512F), and change the new pass gate to be false when > the rpad pass gate is true? > Yes, it could save compile time when both this pass and rpad pass are available. Changed. > > +static void > > +replace_constant_pool_with_broadcast (rtx_insn* insn) > > Formatting, * should be after space, not before it. > Changed. > > + first = XVECEXP (constant, 0, 0); > > + /* There could be some rtx like > > + (mem/u/c:V16QI (symbol_ref/u:DI ("*.LC1"))) > > + but with "*.LC1" refer to V2DI constant vector. */ > > + if (GET_MODE (constant) != mode) > > + return; > > Is there a reason why don't you want to handle that? just avoid error caused by different element number. > You could do instead: > if (GET_MODE (constant) != mode) > { > constant = simplify_subreg (mode, constant, GET_MODE (constant), 0); > if (constant == NULL_RTX || GET_CODE (constant) != CONST_VECTOR) > return; > } > first = XVECEXP (constant, 0, 0); > Changed. > Other than that LGTM. > > Jakub > -- BR, Hongtao --000000000000f28f2605ae4af0b8 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Optimize-memory-broadcast-for-constant-vector-under-_V4.patch" Content-Disposition: attachment; filename="0001-Optimize-memory-broadcast-for-constant-vector-under-_V4.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kekqcf5n0 RnJvbSBlNDM4NjM5NTQ1YzdiYWQ1YmIxN2IyMGExNmVmY2MxODcxMTY2MDkzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBsaXVob25ndCA8aG9uZ3Rhby5saXVAaW50ZWwuY29tPgpEYXRl OiBXZWQsIDggSnVsIDIwMjAgMTc6MTQ6MzYgKzA4MDAKU3ViamVjdDogW1BBVENIXSBPcHRpbWl6 ZSBtZW1vcnkgYnJvYWRjYXN0IGZvciBjb25zdGFudCB2ZWN0b3IgdW5kZXIgQVZYNTEyLgoKRm9y IGNvbnN0YW50IHZlY3RvciBoYXZpbmcgb25lIGR1cGxpY2F0ZWQgdmFsdWUsIHRoZXJlJ3Mgbm8g bmVlZCB0byBwdXQKd2hvbGUgdmVjdG9yIGluIHRoZSBjb25zdGFudCBwb29sLCB1c2luZyBlbWJl ZGRlZCBicm9hZGNhc3QgaW5zdGVhZC4KCjIwMjAtMDctMDkgIEhvbmd0YW8gTGl1ICA8aG9uZ3Rh by5saXVAaW50ZWwuY29tPgoKZ2NjL0NoYW5nZUxvZzoKCglQUiB0YXJnZXQvODc3NjcKCSogY29u ZmlnL2kzODYvaTM4Ni1mZWF0dXJlcy5jCgkocmVwbGFjZV9jb25zdGFudF9wb29sX3dpdGhfYnJv YWRjYXN0KTogTmV3IGZ1bmN0aW9uLgoJKGNvbnN0YW50X3Bvb2xfYnJvYWRjYXN0KTogRGl0dG8u CgkoY2xhc3MgcGFzc19jb25zdGFudF9wb29sX2Jyb2FkY2FzdCk6IE5ldyBwYXNzLgoJKG1ha2Vf cGFzc19jb25zdGFudF9wb29sX2Jyb2FkY2FzdCk6IERpdHRvLgoJKHJlbW92ZV9wYXJ0aWFsX2F2 eF9kZXBlbmRlbmN5KTogQ2FsbAoJcmVwbGFjZV9jb25zdGFudF9wb29sX3dpdGhfYnJvYWRjYXN0 IHVuZGVyIFRBUkdFVF9BVlg1MTJGLCBpdAoJd291bGQgc2F2ZSBjb21waWxlIHRpbWUgd2hlbiBi b3RoIHBhc3MgcnBhZCBhbmQgY3BiIGFyZQoJYXZhaWxhYmxlLgoJKiBjb25maWcvaTM4Ni9pMzg2 LXBhc3Nlcy5kZWY6IEluc2VydCBuZXcgcGFzcyBhZnRlciBjb21iaW5lLgoJKiBjb25maWcvaTM4 Ni9pMzg2LXByb3Rvcy5oCgkobWFrZV9wYXNzX2NvbnN0YW50X3Bvb2xfYnJvYWRjYXN0KTogRGVj bGFyZS4KCSogY29uZmlnL2kzODYvc3NlLm1kICgqYXZ4NTEyZHFfbXVsPG1vZGU+MzxtYXNrX25h bWU+X2Jjc3QsCgkqYXZ4NTEyZl9tdWw8bW9kZT4zPG1hc2tfbmFtZT5fYmNzdCk6IE5ldyBkZWZp bmVfaW5zbi4KCSogY29uZmlnL2kzODYvYXZ4NTEyZmludHJpbi5oIChfbW01MTJfc2V0MV9wcywK CV9tbTUxMl9zZXQxX3BkLF9tbTUxMl9zZXQxX2VwaTMyLCBfbW01MTJfc2V0MV9lcGk2NCk6IEFk anVzdGVkLgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CgoJUFIgdGFyZ2V0Lzg3NzY3CgkqIGdj Yy50YXJnZXQvaTM4Ni9hdngyLWJyb2FkY2FzdC1wcjg3NzY3LTEuYzogTmV3IHRlc3QuCgkqIGdj Yy50YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTEuYzogTmV3IHRlc3QuCgkq IGdjYy50YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTIuYzogTmV3IHRlc3Qu CgkqIGdjYy50YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTMuYzogTmV3IHRl c3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTQuYzogTmV3 IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTUuYzog TmV3IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTYu YzogTmV3IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3 LTcuYzogTmV3IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC1icm9hZGNhc3QtcHI4 Nzc2Ny0xLmM6IE5ldyB0ZXN0LgoJKiBnY2MudGFyZ2V0L2kzODYvYXZ4NTEydmwtYnJvYWRjYXN0 LXByODc3NjctMS5jOiBOZXcgdGVzdC4KCSogZ2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLWJyb2Fk Y2FzdC1wcjg3NzY3LTIuYzogTmV3IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC1i cm9hZGNhc3QtcHI4Nzc2Ny0zLmM6IE5ldyB0ZXN0LgoJKiBnY2MudGFyZ2V0L2kzODYvYXZ4NTEy dmwtYnJvYWRjYXN0LXByODc3NjctNC5jOiBOZXcgdGVzdC4KCSogZ2NjLnRhcmdldC9pMzg2L2F2 eDUxMnZsLWJyb2FkY2FzdC1wcjg3NzY3LTUuYzogTmV3IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4 Ni9hdng1MTJ2bC1icm9hZGNhc3QtcHI4Nzc2Ny02LmM6IE5ldyB0ZXN0LgotLS0KIGdjYy9jb25m aWcvaTM4Ni9hdng1MTJmaW50cmluLmggICAgICAgICAgICAgICB8ICAyNyArKy0tCiBnY2MvY29u ZmlnL2kzODYvaTM4Ni1mZWF0dXJlcy5jICAgICAgICAgICAgICAgfCAxNDcgKysrKysrKysrKysr KysrKysrCiBnY2MvY29uZmlnL2kzODYvaTM4Ni1wYXNzZXMuZGVmICAgICAgICAgICAgICAgfCAg IDEgKwogZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmggICAgICAgICAgICAgICAgIHwgICAx ICsKIGdjYy9jb25maWcvaTM4Ni9zc2UubWQgICAgICAgICAgICAgICAgICAgICAgICB8ICAyNCAr KysKIC4uLi9pMzg2L2F2eDItYnJvYWRjYXN0LXByODc3NjctMS5jICAgICAgICAgICB8ICA0MCAr KysrKwogLi4uL2kzODYvYXZ4NTEyZi1icm9hZGNhc3QtcHI4Nzc2Ny0xLmMgICAgICAgIHwgIDMw ICsrKysKIC4uLi9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3NjctMi5jICAgICAgICB8ICA0 MiArKysrKwogLi4uL2kzODYvYXZ4NTEyZi1icm9hZGNhc3QtcHI4Nzc2Ny0zLmMgICAgICAgIHwg IDMwICsrKysKIC4uLi9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3NjctNC5jICAgICAgICB8 ICA0MiArKysrKwogLi4uL2kzODYvYXZ4NTEyZi1icm9hZGNhc3QtcHI4Nzc2Ny01LmMgICAgICAg IHwgIDI2ICsrKysKIC4uLi9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3NjctNi5jICAgICAg ICB8ICA0MSArKysrKwogLi4uL2kzODYvYXZ4NTEyZi1icm9hZGNhc3QtcHI4Nzc2Ny03LmMgICAg ICAgIHwgMTIxICsrKysrKysrKysrKysrCiAuLi4vaTM4Ni9hdng1MTJ2bC1icm9hZGNhc3QtcHI4 Nzc2Ny0xLmMgICAgICAgfCAgNDUgKysrKysrCiAuLi4vaTM4Ni9hdng1MTJ2bC1icm9hZGNhc3Qt cHI4Nzc2Ny0yLmMgICAgICAgfCAgNTkgKysrKysrKwogLi4uL2kzODYvYXZ4NTEydmwtYnJvYWRj YXN0LXByODc3NjctMy5jICAgICAgIHwgIDM3ICsrKysrCiAuLi4vaTM4Ni9hdng1MTJ2bC1icm9h ZGNhc3QtcHI4Nzc2Ny00LmMgICAgICAgfCAgNTYgKysrKysrKwogLi4uL2kzODYvYXZ4NTEydmwt YnJvYWRjYXN0LXByODc3NjctNS5jICAgICAgIHwgIDM3ICsrKysrCiAuLi4vaTM4Ni9hdng1MTJ2 bC1icm9hZGNhc3QtcHI4Nzc2Ny02LmMgICAgICAgfCAgNTUgKysrKysrKwogMTkgZmlsZXMgY2hh bmdlZCwgODQzIGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDItYnJvYWRjYXN0LXByODc3Njct MS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4 NTEyZi1icm9hZGNhc3QtcHI4Nzc2Ny0xLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTIuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtYnJvYWRj YXN0LXByODc3NjctMy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvYXZ4NTEyZi1icm9hZGNhc3QtcHI4Nzc2Ny00LmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3 LTUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2 eDUxMmYtYnJvYWRjYXN0LXByODc3NjctNi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyZi1icm9hZGNhc3QtcHI4Nzc2Ny03LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC1icm9h ZGNhc3QtcHI4Nzc2Ny0xLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9hdng1MTJ2bC1icm9hZGNhc3QtcHI4Nzc2Ny0yLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC1icm9hZGNhc3QtcHI4 Nzc2Ny0zLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9hdng1MTJ2bC1icm9hZGNhc3QtcHI4Nzc2Ny00LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC1icm9hZGNhc3QtcHI4Nzc2Ny01LmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2 bC1icm9hZGNhc3QtcHI4Nzc2Ny02LmMKCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvYXZ4 NTEyZmludHJpbi5oIGIvZ2NjL2NvbmZpZy9pMzg2L2F2eDUxMmZpbnRyaW4uaAppbmRleCAwZDUz ZGRhM2EyNy4uNzI5ZDU2ODZkNjggMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9hdng1MTJm aW50cmluLmgKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2F2eDUxMmZpbnRyaW4uaApAQCAtMjM5LDIy ICsyMzksMTcgQEAgZXh0ZXJuIF9faW5saW5lIF9fbTUxMmQKIF9fYXR0cmlidXRlX18gKChfX2du dV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIF9tbTUxMl9z ZXQxX3BkIChkb3VibGUgX19BKQogewotICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMy X2Jyb2FkY2FzdHNkNTEyIChfX2V4dGVuc2lvbl9fCi0JCQkJCQkgIChfX3YyZGYpIHsgX19BLCB9 LAotCQkJCQkJICAoX192OGRmKQotCQkJCQkJICBfbW01MTJfdW5kZWZpbmVkX3BkICgpLAotCQkJ CQkJICAoX19tbWFzazgpIC0xKTsKKyAgcmV0dXJuIF9fZXh0ZW5zaW9uX18gKF9fbTUxMmQpKF9f djhkZikKKyAgICB7IF9fQSwgX19BLCBfX0EsIF9fQSwgX19BLCBfX0EsIF9fQSwgX19BIH07CiB9 CiAKIGV4dGVybiBfX2lubGluZSBfX201MTIKIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVf XywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIF9tbTUxMl9zZXQxX3BzIChm bG9hdCBfX0EpCiB7Ci0gIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9icm9hZGNhc3Rz czUxMiAoX19leHRlbnNpb25fXwotCQkJCQkJIChfX3Y0c2YpIHsgX19BLCB9LAotCQkJCQkJIChf X3YxNnNmKQotCQkJCQkJIF9tbTUxMl91bmRlZmluZWRfcHMgKCksCi0JCQkJCQkgKF9fbW1hc2sx NikgLTEpOworICByZXR1cm4gX19leHRlbnNpb25fXyAoX19tNTEyKShfX3YxNnNmKQorICAgIHsg X19BLCBfX0EsIF9fQSwgX19BLCBfX0EsIF9fQSwgX19BLCBfX0EsCisgICAgICBfX0EsIF9fQSwg X19BLCBfX0EsIF9fQSwgX19BLCBfX0EsIF9fQSB9OwogfQogCiAvKiBDcmVhdGUgdGhlIHZlY3Rv ciBbQSBCIEMgRCBBIEIgQyBEIEEgQiBDIEQgQSBCIEMgRF0uICAqLwpAQCAtNDA3MiwxMCArNDA2 Nyw5IEBAIGV4dGVybiBfX2lubGluZSBfX201MTJpCiBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5s aW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiBfbW01MTJfc2V0MV9l cGkzMiAoaW50IF9fQSkKIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYnJv YWRjYXN0ZDUxMl9ncHJfbWFzayAoX19BLAotCQkJCQkJCSAgIChfX3YxNnNpKQotCQkJCQkJCSAg IF9tbTUxMl91bmRlZmluZWRfZXBpMzIgKCksCi0JCQkJCQkJICAgKF9fbW1hc2sxNikoLTEpKTsK KyAgcmV0dXJuIChfX201MTJpKShfX3YxNnNpKQorICAgIHsgX19BLCBfX0EsIF9fQSwgX19BLCBf X0EsIF9fQSwgX19BLCBfX0EsCisgICAgICBfX0EsIF9fQSwgX19BLCBfX0EsIF9fQSwgX19BLCBf X0EsIF9fQSB9OwogfQogCiBleHRlcm4gX19pbmxpbmUgX19tNTEyaQpAQCAtNDEyOCwxMCArNDEy Miw3IEBAIGV4dGVybiBfX2lubGluZSBfX201MTJpCiBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5s aW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiBfbW01MTJfc2V0MV9l cGk2NCAobG9uZyBsb25nIF9fQSkKIHsKLSAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEz Ml9wYnJvYWRjYXN0cTUxMl9ncHJfbWFzayAoX19BLAotCQkJCQkJCSAgIChfX3Y4ZGkpCi0JCQkJ CQkJICAgX21tNTEyX3VuZGVmaW5lZF9lcGkzMiAoKSwKLQkJCQkJCQkgICAoX19tbWFzazgpKC0x KSk7CisgIHJldHVybiAoX19tNTEyaSkoX192OGRpKSB7IF9fQSwgX19BLCBfX0EsIF9fQSwgX19B LCBfX0EsIF9fQSwgX19BIH07CiB9CiAKIGV4dGVybiBfX2lubGluZSBfX201MTJpCmRpZmYgLS1n aXQgYS9nY2MvY29uZmlnL2kzODYvaTM4Ni1mZWF0dXJlcy5jIGIvZ2NjL2NvbmZpZy9pMzg2L2kz ODYtZmVhdHVyZXMuYwppbmRleCA1MzVmYzdlOTgxZC4uZDM2YjhmZWE2NTAgMTAwNjQ0Ci0tLSBh L2djYy9jb25maWcvaTM4Ni9pMzg2LWZlYXR1cmVzLmMKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kz ODYtZmVhdHVyZXMuYwpAQCAtMjE2Miw2ICsyMTYyLDgxIEBAIG1ha2VfcGFzc19pbnNlcnRfZW5k YnJfYW5kX3BhdGNoYWJsZV9hcmVhIChnY2M6OmNvbnRleHQgKmN0eHQpCiAgIHJldHVybiBuZXcg cGFzc19pbnNlcnRfZW5kYnJfYW5kX3BhdGNoYWJsZV9hcmVhIChjdHh0KTsKIH0KIAorLyogUmVw bGFjZSBhbGwgb25lLXZhbHVlIGNvbnN0IHZlY3RvciB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IFNZ TUJPTF9SRUZzIGluIHgKKyAgIHdpdGggZW1iZWRkZWQgYnJvYWRjYXN0LiBpLmUudHJhbnNmb3Jt CisKKyAgICAgdnBhZGRxIC5MQzAoJXJpcCksICV6bW0wLCAlem1tMAorICAgICByZXQKKyAgLkxD MDoKKyAgICAucXVhZCAzCisgICAgLnF1YWQgMworICAgIC5xdWFkIDMKKyAgICAucXVhZCAzCisg ICAgLnF1YWQgMworICAgIC5xdWFkIDMKKyAgICAucXVhZCAzCisgICAgLnF1YWQgMworCisgICAg dG8KKworICAgICB2cGFkZHEgLkxDMCglcmlwKXsxdG84fSwgJXptbTAsICV6bW0wCisgICAgIHJl dAorICAuTEMwOgorICAgIC5xdWFkIDMgICovCitzdGF0aWMgdm9pZAorcmVwbGFjZV9jb25zdGFu dF9wb29sX3dpdGhfYnJvYWRjYXN0IChydHhfaW5zbiAqaW5zbikKK3sKKyAgc3VicnR4X3B0cl9p dGVyYXRvcjo6YXJyYXlfdHlwZSBhcnJheTsKKyAgRk9SX0VBQ0hfU1VCUlRYX1BUUiAoaXRlciwg YXJyYXksICZQQVRURVJOIChpbnNuKSwgQUxMKQorICAgIHsKKyAgICAgIHJ0eCAqbG9jID0gKml0 ZXI7CisgICAgICBydHggeCA9ICpsb2M7CisgICAgICBydHggYnJvYWRjYXN0X21lbSwgdmVjX2R1 cCwgY29uc3RhbnQsIGZpcnN0OworICAgICAgbWFjaGluZV9tb2RlIG1vZGU7CisKKyAgICAgIC8q IENvbnN0YW50IHBvb2wuICAqLworICAgICAgaWYgKCFNRU1fUCAoeCkKKwkgIHx8ICFTWU1CT0xf UkVGX1AgKFhFWFAgKHgsIDApKQorCSAgfHwgIUNPTlNUQU5UX1BPT0xfQUREUkVTU19QIChYRVhQ ICh4LCAwKSkpCisJY29udGludWU7CisKKyAgICAgIC8qIENvbnN0IHZlY3Rvci4gICovCisgICAg ICBtb2RlID0gR0VUX01PREUgKHgpOworICAgICAgaWYgKCFWRUNUT1JfTU9ERV9QIChtb2RlKSkK KwlyZXR1cm47CisgICAgICBjb25zdGFudCA9IGdldF9wb29sX2NvbnN0YW50IChYRVhQICh4LCAw KSk7CisgICAgICBpZiAoR0VUX0NPREUgKGNvbnN0YW50KSAhPSBDT05TVF9WRUNUT1IpCisJcmV0 dXJuOworCisgICAgICBmaXJzdCA9IFhWRUNFWFAgKGNvbnN0YW50LCAwLCAwKTsKKyAgICAgIC8q IFRoZXJlIGNvdWxkIGJlIHNvbWUgcnR4IGxpa2UKKwkgKG1lbS91L2M6VjE2UUkgKHN5bWJvbF9y ZWYvdTpESSAoIiouTEMxIikpKQorCSBidXQgd2l0aCAiKi5MQzEiIHJlZmVyIHRvIFYyREkgY29u c3RhbnQgdmVjdG9yLiAgKi8KKyAgICAgIGlmIChHRVRfTU9ERSAoY29uc3RhbnQpICE9IG1vZGUp CisJeworCSAgY29uc3RhbnQgPSBzaW1wbGlmeV9zdWJyZWcgKG1vZGUsIGNvbnN0YW50LCBHRVRf TU9ERSAoY29uc3RhbnQpLCAwKTsKKwkgIGlmIChjb25zdGFudCA9PSBOVUxMX1JUWCB8fCBHRVRf Q09ERSAoY29uc3RhbnQpICE9IENPTlNUX1ZFQ1RPUikKKwkgICAgcmV0dXJuOworCX0KKworICAg ICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHRVRfTU9ERV9OVU5JVFMgKG1vZGUpOyArK2kpCisJewor CSAgcnR4IHRtcCA9IFhWRUNFWFAgKGNvbnN0YW50LCAwLCBpKTsKKwkgIC8qIFZlY3RvciBkdXBs aWNhdGUgdmFsdWUuICAqLworCSAgaWYgKCFydHhfZXF1YWxfcCAodG1wLCBmaXJzdCkpCisJICAg IHJldHVybjsKKwl9CisKKyAgICAgIC8qIFJlcGxhY2Ugd2l0aCBlbWJlZGRlZCBicm9hZGNhc3Qu ICAqLworICAgICAgYnJvYWRjYXN0X21lbSA9IGZvcmNlX2NvbnN0X21lbSAoR0VUX01PREVfSU5O RVIgKG1vZGUpLCBmaXJzdCk7CisgICAgICB2ZWNfZHVwID0gZ2VuX3J0eF9WRUNfRFVQTElDQVRF IChtb2RlLCBicm9hZGNhc3RfbWVtKTsKKyAgICAgIHZhbGlkYXRlX2NoYW5nZSAoaW5zbiwgbG9j LCB2ZWNfZHVwLCAwKTsKKworICAgICAgLyogQXQgbW9zdCAxIG1lbW9yeV9vcGVyYW5kIGluIGFu IGluc24uICAqLworICAgICAgcmV0dXJuOworICAgIH0KK30KKwogLyogQXQgZW50cnkgb2YgdGhl IG5lYXJlc3QgY29tbW9uIGRvbWluYXRvciBmb3IgYmFzaWMgYmxvY2tzIHdpdGgKICAgIGNvbnZl cnNpb25zLCBnZW5lcmF0ZSBhIHNpbmdsZQogCXZ4b3JwcyAleG1tTiwgJXhtbU4sICV4bW1OCkBA IC0yMTk3LDYgKzIyNzIsMTAgQEAgcmVtb3ZlX3BhcnRpYWxfYXZ4X2RlcGVuZGVuY3kgKHZvaWQp CiAJICBpZiAoIU5PTkRFQlVHX0lOU05fUCAoaW5zbikpCiAJICAgIGNvbnRpbnVlOwogCisJICAv KiBIYW5sZGUgQVZYNTEyIGVtYmVkZGVkIGJyb2FkY2FzdCBoZXJlIHRvIHNhdmUgY29tcGlsZSB0 aW1lLiAgKi8KKwkgIGlmIChUQVJHRVRfQVZYNTEyRikKKwkgICAgcmVwbGFjZV9jb25zdGFudF9w b29sX3dpdGhfYnJvYWRjYXN0IChpbnNuKTsKKwogCSAgc2V0ID0gc2luZ2xlX3NldCAoaW5zbik7 CiAJICBpZiAoIXNldCkKIAkgICAgY29udGludWU7CkBAIC0yMzc5LDYgKzI0NTgsNzQgQEAgbWFr ZV9wYXNzX3JlbW92ZV9wYXJ0aWFsX2F2eF9kZXBlbmRlbmN5IChnY2M6OmNvbnRleHQgKmN0eHQp CiAgIHJldHVybiBuZXcgcGFzc19yZW1vdmVfcGFydGlhbF9hdnhfZGVwZW5kZW5jeSAoY3R4dCk7 CiB9CiAKKy8qIEZvciBjb25zdCB2ZWN0b3IgaGF2aW5nIG9uZSBkdXBsaWNhdGVkIHZhbHVlLCB0 aGVyZSdzIG5vIG5lZWQgdG8gcHV0CisgICB3aG9sZSB2ZWN0b3IgaW4gdGhlIGNvbnN0YW50IHBv b2wgd2hlbiB0YXJnZXQgc3VwcG9ydHMgZW1iZWRkZWQgYnJvYWRjYXN0LiAqLworc3RhdGljIHVu c2lnbmVkIGludAorY29uc3RhbnRfcG9vbF9icm9hZGNhc3QgKHZvaWQpCit7CisgIHRpbWV2YXJf cHVzaCAoVFZfTUFDSF9ERVApOworICBydHhfaW5zbiAqaW5zbjsKKworICBmb3IgKGluc24gPSBn ZXRfaW5zbnMgKCk7IGluc247IGluc24gPSBORVhUX0lOU04gKGluc24pKQorICAgIHsKKyAgICAg IGlmICghSU5TTl9QIChpbnNuKSkKKwljb250aW51ZTsKKyAgICAgIHJlcGxhY2VfY29uc3RhbnRf cG9vbF93aXRoX2Jyb2FkY2FzdCAoaW5zbik7CisgICAgfQorICB0aW1ldmFyX3BvcCAoVFZfTUFD SF9ERVApOworICByZXR1cm4gMDsKK30KKworbmFtZXNwYWNlIHsKKworY29uc3QgcGFzc19kYXRh IHBhc3NfZGF0YV9jb25zdGFudF9wb29sX2Jyb2FkY2FzdCA9Cit7CisgIFJUTF9QQVNTLCAvKiB0 eXBlICovCisgICJjcGIiLCAvKiBuYW1lICovCisgIE9QVEdST1VQX05PTkUsIC8qIG9wdGluZm9f ZmxhZ3MgKi8KKyAgVFZfTUFDSF9ERVAsIC8qIHR2X2lkICovCisgIDAsIC8qIHByb3BlcnRpZXNf cmVxdWlyZWQgKi8KKyAgMCwgLyogcHJvcGVydGllc19wcm92aWRlZCAqLworICAwLCAvKiBwcm9w ZXJ0aWVzX2Rlc3Ryb3llZCAqLworICAwLCAvKiB0b2RvX2ZsYWdzX3N0YXJ0ICovCisgIFRPRE9f ZGZfZmluaXNoLCAvKiB0b2RvX2ZsYWdzX2ZpbmlzaCAqLworfTsKKworY2xhc3MgcGFzc19jb25z dGFudF9wb29sX2Jyb2FkY2FzdCA6IHB1YmxpYyBydGxfb3B0X3Bhc3MKK3sKK3B1YmxpYzoKKyAg cGFzc19jb25zdGFudF9wb29sX2Jyb2FkY2FzdCAoZ2NjOjpjb250ZXh0ICpjdHh0KQorICAgIDog cnRsX29wdF9wYXNzIChwYXNzX2RhdGFfY29uc3RhbnRfcG9vbF9icm9hZGNhc3QsIGN0eHQpCisg IHt9CisKKyAgLyogb3B0X3Bhc3MgbWV0aG9kczogKi8KKyAgdmlydHVhbCBib29sIGdhdGUgKGZ1 bmN0aW9uICopCisgICAgeworICAgICAgLyogUmV0dXJuIGZhbHNlIGlmIHJwYWQgcGFzcyBnYXRl IGlzIHRydWUuCisJIHJlcGxhY2VfY29uc3RhbnRfcG9vbF93aXRoX2Jyb2FkY2FzdCBpcyBjYWxs ZWQKKwkgZnJvbSBib3RoIHRoaXMgcGFzcyBhbmQgcnBhZCBwYXNzLiAgKi8KKyAgICAgIHJldHVy biAoVEFSR0VUX0FWWDUxMkYKKwkgICAgICAmJiAhKFRBUkdFVF9BVlgKKwkJICAgJiYgVEFSR0VU X1NTRV9QQVJUSUFMX1JFR19ERVBFTkRFTkNZCisJCSAgICYmIFRBUkdFVF9TU0VfTUFUSAorCQkg ICAmJiBvcHRpbWl6ZQorCQkgICAmJiBvcHRpbWl6ZV9mdW5jdGlvbl9mb3Jfc3BlZWRfcCAoY2Z1 bikpKTsKKyAgICB9CisKKyAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZXhlY3V0ZSAoZnVuY3Rpb24g KikKKyAgICB7CisgICAgICByZXR1cm4gY29uc3RhbnRfcG9vbF9icm9hZGNhc3QgKCk7CisgICAg fQorfTsgLy8gY2xhc3MgcGFzc19jcGIKKworfSAvLyBhbm9uIG5hbWVzcGFjZQorCitydGxfb3B0 X3Bhc3MgKgorbWFrZV9wYXNzX2NvbnN0YW50X3Bvb2xfYnJvYWRjYXN0IChnY2M6OmNvbnRleHQg KmN0eHQpCit7CisgIHJldHVybiBuZXcgcGFzc19jb25zdGFudF9wb29sX2Jyb2FkY2FzdCAoY3R4 dCk7Cit9CisKIC8qIFRoaXMgY29tcGFyZXMgdGhlIHByaW9yaXR5IG9mIHRhcmdldCBmZWF0dXJl cyBpbiBmdW5jdGlvbiBERUNMMQogICAgYW5kIERFQ0wyLiAgSXQgcmV0dXJucyBwb3NpdGl2ZSB2 YWx1ZSBpZiBERUNMMSBpcyBoaWdoZXIgcHJpb3JpdHksCiAgICBuZWdhdGl2ZSB2YWx1ZSBpZiBE RUNMMiBpcyBoaWdoZXIgcHJpb3JpdHkgYW5kIDAgaWYgdGhleSBhcmUgdGhlCmRpZmYgLS1naXQg YS9nY2MvY29uZmlnL2kzODYvaTM4Ni1wYXNzZXMuZGVmIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYt cGFzc2VzLmRlZgppbmRleCBkODNjN2I5NTZiMS4uMDdlY2Y4ZTc5MGYgMTAwNjQ0Ci0tLSBhL2dj Yy9jb25maWcvaTM4Ni9pMzg2LXBhc3Nlcy5kZWYKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYt cGFzc2VzLmRlZgpAQCAtMzMsMyArMzMsNCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQogICBJTlNFUlRfUEFTU19CRUZPUkUgKHBhc3Nfc2hvcnRl bl9icmFuY2hlcywgMSwgcGFzc19pbnNlcnRfZW5kYnJfYW5kX3BhdGNoYWJsZV9hcmVhKTsKIAog ICBJTlNFUlRfUEFTU19BRlRFUiAocGFzc19jb21iaW5lLCAxLCBwYXNzX3JlbW92ZV9wYXJ0aWFs X2F2eF9kZXBlbmRlbmN5KTsKKyAgSU5TRVJUX1BBU1NfQUZURVIgKHBhc3NfY29tYmluZSwgMSwg cGFzc19jb25zdGFudF9wb29sX2Jyb2FkY2FzdCk7CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kz ODYvaTM4Ni1wcm90b3MuaCBiL2djYy9jb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5oCmluZGV4IGI2 MDg4ZjIyZDU1Li5jNWI3MDBlZmQwZSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYt cHJvdG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmgKQEAgLTM4NiwzICsz ODYsNCBAQCBleHRlcm4gcnRsX29wdF9wYXNzICptYWtlX3Bhc3NfaW5zZXJ0X2VuZGJyX2FuZF9w YXRjaGFibGVfYXJlYQogICAoZ2NjOjpjb250ZXh0ICopOwogZXh0ZXJuIHJ0bF9vcHRfcGFzcyAq bWFrZV9wYXNzX3JlbW92ZV9wYXJ0aWFsX2F2eF9kZXBlbmRlbmN5CiAgIChnY2M6OmNvbnRleHQg Kik7CitleHRlcm4gcnRsX29wdF9wYXNzICptYWtlX3Bhc3NfY29uc3RhbnRfcG9vbF9icm9hZGNh c3QgKGdjYzo6Y29udGV4dCAqKTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9zc2UubWQg Yi9nY2MvY29uZmlnL2kzODYvc3NlLm1kCmluZGV4IDgyNTAzMjVlMWEzLi5hNzI4Yjk3OWYwMSAx MDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3NzZS5tZAorKysgYi9nY2MvY29uZmlnL2kzODYv c3NlLm1kCkBAIC0xMjEyMCw2ICsxMjEyMCwxOCBAQCAoZGVmaW5lX2luc24gImF2eDUxMmRxX211 bDxtb2RlPjM8bWFza19uYW1lPiIKICAgIChzZXRfYXR0ciAicHJlZml4IiAiZXZleCIpCiAgICAo c2V0X2F0dHIgIm1vZGUiICI8c3NlaW5zbm1vZGU+IildKQogCisoZGVmaW5lX2luc24gIiphdng1 MTJkcV9tdWw8bW9kZT4zPG1hc2tfbmFtZT5fYmNzdCIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 Vkk4X0FWWDUxMlZMIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9diIpCisJKG11bHQ6Vkk4X0FWWDUx MlZMCisJICAodmVjX2R1cGxpY2F0ZTpWSThfQVZYNTEyVkwKKwkgICAgKG1hdGNoX29wZXJhbmQ6 PHNzZXNjYWxhcm1vZGU+IDEgIm1lbW9yeV9vcGVyYW5kIiAibSIpKQorCSAgKG1hdGNoX29wZXJh bmQ6Vkk4X0FWWDUxMlZMIDIgInJlZ2lzdGVyX29wZXJhbmQiICJ2IikpKV0KKyAgIlRBUkdFVF9B Vlg1MTJEUSIKKyAgInZwbXVsbHFcdHslMTxhdng1MTJiY3N0PiwgJTIsICUwPG1hc2tfb3BlcmFu ZDM+fCUwPG1hc2tfb3BlcmFuZDM+LCAlMiwgJTE8YXZ4NTEyYmNzdD59IgorICBbKHNldF9hdHRy ICJ0eXBlIiAic3NlaW11bCIpCisgICAoc2V0X2F0dHIgInByZWZpeCIgImV2ZXgiKQorICAgKHNl dF9hdHRyICJtb2RlIiAiPHNzZWluc25tb2RlPiIpXSkKKwogKGRlZmluZV9leHBhbmQgIm11bDxt b2RlPjM8bWFza19uYW1lPiIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Vkk0X0FWWDUxMkYgMCAi cmVnaXN0ZXJfb3BlcmFuZCIpCiAJKG11bHQ6Vkk0X0FWWDUxMkYKQEAgLTEyMTYwLDYgKzEyMTcy LDE4IEBAIChkZWZpbmVfaW5zbiAiKjxzc2U0XzFfYXZ4Mj5fbXVsPG1vZGU+MzxtYXNrX25hbWU+ IgogICAgKHNldF9hdHRyICJidHZlcjJfZGVjb2RlIiAidmVjdG9yLHZlY3Rvcix2ZWN0b3IiKQog ICAgKHNldF9hdHRyICJtb2RlIiAiPHNzZWluc25tb2RlPiIpXSkKIAorKGRlZmluZV9pbnNuICIq YXZ4NTEyZl9tdWw8bW9kZT4zPG1hc2tfbmFtZT5fYmNzdCIKKyAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6Vkk0X0FWWDUxMlZMIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9diIpCisJKG11bHQ6Vkk0X0FW WDUxMlZMCisJICAodmVjX2R1cGxpY2F0ZTpWSTRfQVZYNTEyVkwKKwkgICAgKG1hdGNoX29wZXJh bmQ6PHNzZXNjYWxhcm1vZGU+IDEgIm1lbW9yeV9vcGVyYW5kIiAibSIpKQorCSAgKG1hdGNoX29w ZXJhbmQ6Vkk0X0FWWDUxMlZMIDIgInJlZ2lzdGVyX29wZXJhbmQiICJ2IikpKV0KKyAgIlRBUkdF VF9BVlg1MTJGIgorICAgInZwbXVsbGRcdHslMTxhdng1MTJiY3N0PiwgJTIsICUwPG1hc2tfb3Bl cmFuZDM+fCUwPG1hc2tfb3BlcmFuZDM+LCAlMiwgJTE8YXZ4NTEyYmNzdD59IgorICBbKHNldF9h dHRyICJ0eXBlIiAic3NlaW11bCIpCisgICAoc2V0X2F0dHIgInByZWZpeCIgImV2ZXgiKQorICAg KHNldF9hdHRyICJtb2RlIiAiPHNzZWluc25tb2RlPiIpXSkKKwogKGRlZmluZV9leHBhbmQgIm11 bDxtb2RlPjMiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZJOF9BVlgyX0FWWDUxMkYgMCAicmVn aXN0ZXJfb3BlcmFuZCIpCiAJKG11bHQ6Vkk4X0FWWDJfQVZYNTEyRgpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4Mi1icm9hZGNhc3QtcHI4Nzc2Ny0xLmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdngyLWJyb2FkY2FzdC1wcjg3NzY3LTEuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWVlMTY4MGVkOTgKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdngyLWJyb2FkY2Fz dC1wcjg3NzY3LTEuYwpAQCAtMCwwICsxLDQwIEBACisvKiBQUiB0YXJnZXQvODc3NjcgKi8KKy8q IHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWF2eDIgLW1uby1h dng1MTJmIiB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcXFx7MXRv XFsyNDhcXVxcXH0iIH0gfSAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qg IlxcXHsxdG8xNlxcXH0iIH0gfSAgKi8KKwordHlwZWRlZiBpbnQgdjRzaSAgX19hdHRyaWJ1dGVf XyAoKHZlY3Rvcl9zaXplICgxNikpKTsKK3R5cGVkZWYgaW50IHY4c2kgIF9fYXR0cmlidXRlX18g KCh2ZWN0b3Jfc2l6ZSAoMzIpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZyB2MmRpICBfX2F0dHJpYnV0 ZV9fICgodmVjdG9yX3NpemUgKDE2KSkpOwordHlwZWRlZiBsb25nIGxvbmcgdjRkaSAgX19hdHRy aWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgzMikpKTsKK3R5cGVkZWYgZmxvYXQgdjRzZiAgX19hdHRy aWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgxNikpKTsKK3R5cGVkZWYgZmxvYXQgdjhzZiAgX19hdHRy aWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgzMikpKTsKK3R5cGVkZWYgZG91YmxlIHYyZGYgIF9fYXR0 cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMTYpKSk7Cit0eXBlZGVmIGRvdWJsZSB2NGRmICBfX2F0 dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDMyKSkpOworCisjZGVmaW5lIEZPTyhWVFlQRSwgT1Bf TkFNRSwgT1ApCQkJXAorVlRZUEUJCQkJCQlcCisgX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkJCQlc Citmb29fIyNPUF9OQU1FIyNfIyNWVFlQRSAoVlRZUEUgYSkJCVwKK3sJCQkJCQlcCisgIHJldHVy biBhIE9QIDEwMTsJCQkJXAorfQkJCQkJCVwKKworRk9PICh2NHNpLCBhZGQsICspOworRk9PICh2 OHNpLCBhZGQsICspOworRk9PICh2MmRpLCBhZGQsICspOworRk9PICh2NGRpLCBhZGQsICspOwor Rk9PICh2NHNmLCBhZGQsICspOworRk9PICh2OHNmLCBhZGQsICspOworRk9PICh2MmRmLCBhZGQs ICspOworRk9PICh2NGRmLCBhZGQsICspOworCitGT08gKHY0c2ksIG11bCwgKik7CitGT08gKHY4 c2ksIG11bCwgKik7CitGT08gKHYyZGksIG11bCwgKik7CitGT08gKHY0ZGksIG11bCwgKik7CitG T08gKHY0c2YsIG11bCwgKik7CitGT08gKHY4c2YsIG11bCwgKik7CitGT08gKHYyZGYsIG11bCwg Kik7CitGT08gKHY0ZGYsIG11bCwgKik7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTEuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3NjctMS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hOGVlNWY1ZmFmMQotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3 NjctMS5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qIFBSIHRhcmdldC84Nzc2NyAqLworLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXZ4NTEyZiAtbWF2eDUxMmRx IiB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIlxbXlxuXF0qXFxc ezF0bzhcXFx9IiA1IH0gfSAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyAiXFteXG5cXSpcXFx7MXRvMTZcXFx9IiA1IH0gfSAgKi8KKwordHlwZWRlZiBpbnQgdjE2c2kg IF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoNjQpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZyB2 OGRpICBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDY0KSkpOwordHlwZWRlZiBmbG9hdCB2 MTZzZiAgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICg2NCkpKTsKK3R5cGVkZWYgZG91Ymxl IHY4ZGYgIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoNjQpKSk7CisKKyNkZWZpbmUgQ09O U1RBTlQgMTAxOworI2RlZmluZSBGT08oVlRZUEUsIE9QX05BTUUsIE9QKQkJCVwKK1ZUWVBFCQkJ CQkJXAorIF9fYXR0cmlidXRlX18gKChub2lwYSkpCQkJXAorZm9vXyMjT1BfTkFNRSMjXyMjVlRZ UEUgKFZUWVBFIGEpCQlcCit7CQkJCQkJXAorICByZXR1cm4gYSBPUCBDT05TVEFOVDsJCQkJXAor fQkJCQkJCVwKKworRk9PICh2MTZzaSwgYWRkLCArKTsKK0ZPTyAodjhkaSwgYWRkLCArKTsKK0ZP TyAodjE2c2YsIGFkZCwgKyk7CitGT08gKHY4ZGYsIGFkZCwgKyk7CitGT08gKHYxNnNpLCBzdWIs IC0pOworRk9PICh2OGRpLCBzdWIsIC0pOworRk9PICh2MTZzaSwgbXVsLCAqKTsKK0ZPTyAodjhk aSwgbXVsLCAqKTsKK0ZPTyAodjE2c2YsIG11bCwgKik7CitGT08gKHY4ZGYsIG11bCwgKik7CmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2Fz dC1wcjg3NzY3LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtYnJv YWRjYXN0LXByODc3NjctMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li4zMGNmNTgwOWMzZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3NjctMi5jCkBAIC0wLDAgKzEsNDIgQEAKKy8q IFBSIHRhcmdldC84Nzc2NyAqLworLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1vcHRpb25z ICItTzIgLW1hdng1MTJmIC1tYXZ4NTEyZHEiIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IGF2eDUxMmRxIH0gKi8KKworI2RlZmluZSBBVlg1MTJEUQorI2luY2x1ZGUgImF2 eDUxMmYtaGVscGVyLmgiCisKKyNpbmNsdWRlICJhdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTEu YyIKKworI2RlZmluZSBSVEVTVChWVFlQRSwgVFlQRSwgTiwgT1BfTkFNRSwgT1ApCQlcCisgIGRv CQkJCQkJCVwKKyAgICB7CQkJCQkJCVwKKyAgICAgIFRZUEUgZXhwW05dLCBzcmNbTl07CQkJCVwK KyAgICAgIFZUWVBFIHJlczsJCQkJCVwKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsr KQkJCVwKKwlzcmNbaV0gPSBpICogaSAqIDEwNzsJCQkJXAorICAgICAgcmVzID0gZm9vXyMjT1Bf TkFNRSMjXyMjVlRZUEUgKCooVlRZUEUqKSZzcmNbMF0pOwlcCisgICAgICBmb3IgKGludCBpID0g MDsgaSA8IE47IGkgKyspCQkJXAorCWV4cFtpXSA9IHNyY1tpXSBPUCBDT05TVEFOVDsJCQlcCisg ICAgICBmb3IgKGludCBqID0gMDsgaiA8IE47IGorKykJCQlcCisJewkJCQkJCVwKKwkgIGlmIChy ZXNbal0gIT0gZXhwW2pdKQkJCQlcCisJICAgIGFib3J0KCk7CQkJCQlcCisJfQkJCQkJCVwKKyAg ICB9CQkJCQkJCVwKKyAgd2hpbGUgKDApCisKK3ZvaWQKK3Rlc3RfNTEyICh2b2lkKQoreworICBS VEVTVCAodjE2c2ksIGludCwgMTYsIGFkZCwgKyk7CisgIFJURVNUICh2OGRpLCBsb25nIGxvbmcs IDgsIGFkZCwgKyk7CisgIFJURVNUICh2MTZzZiwgZmxvYXQsIDE2LCBhZGQsICspOworICBSVEVT VCAodjhkZiwgZG91YmxlLCA4LCBhZGQsICspOworICBSVEVTVCAodjE2c2ksIGludCwgMTYsIHN1 YiwgLSk7CisgIFJURVNUICh2OGRpLCBsb25nIGxvbmcsIDgsIHN1YiwgLSk7CisgIFJURVNUICh2 MTZzaSwgaW50LCAxNiwgbXVsLCAqKTsKKyAgUlRFU1QgKHY4ZGksIGxvbmcgbG9uZywgOCwgbXVs LCAqKTsKKyAgUlRFU1QgKHYxNnNmLCBmbG9hdCwgMTYsIG11bCwgKik7CisgIFJURVNUICh2OGRm LCBkb3VibGUsIDgsIG11bCwgKik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTMuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3NjctMy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMmYyMmM0ZWU1YQotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3 NjctMy5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qIFBSIHRhcmdldC84Nzc2NyAqLworLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXZ4NTEyZiIgfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJcW15cblxdKlxcXHsxdG84XFxcfSIg NCB9IH0gICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIlxbXlxuXF0q XFxcezF0bzE2XFxcfSIgNCB9IH0gICovCisKK3R5cGVkZWYgZmxvYXQgdjRzZiAgX19hdHRyaWJ1 dGVfXyAoKHZlY3Rvcl9zaXplICgxNikpKTsKK3R5cGVkZWYgZmxvYXQgdjhzZiAgX19hdHRyaWJ1 dGVfXyAoKHZlY3Rvcl9zaXplICgzMikpKTsKK3R5cGVkZWYgZmxvYXQgdjE2c2YgIF9fYXR0cmli dXRlX18gKCh2ZWN0b3Jfc2l6ZSAoNjQpKSk7Cit0eXBlZGVmIGRvdWJsZSB2MmRmICBfX2F0dHJp YnV0ZV9fICgodmVjdG9yX3NpemUgKDE2KSkpOwordHlwZWRlZiBkb3VibGUgdjRkZiAgX19hdHRy aWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgzMikpKTsKK3R5cGVkZWYgZG91YmxlIHY4ZGYgIF9fYXR0 cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoNjQpKSk7CisKKyNkZWZpbmUgQ09OU1RBTlQgMTAxOwor I2RlZmluZSBGT08oVlRZUEUsIE9QX05BTUUsIE9QMSwgT1AyKQkJXAorVlRZUEUJCQkJCQlcCisg X19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkJCQlcCisgZm9vXyMjT1BfTkFNRSMjXyMjVlRZUEUgKFZU WVBFIGEsIFZUWVBFIGIpCVwKK3sJCQkJCQlcCisgIHJldHVybiAoT1AxIGEgKiBiKSBPUDIgQ09O U1RBTlQ7CQlcCit9CQkJCQkJXAorCitGT08gKHYxNnNmLCBmbWEsLCArKTsKK0ZPTyAodjhkZiwg Zm1hLCwgKyk7CitGT08gKHYxNnNmLCBmbXMsLCAtKTsKK0ZPTyAodjhkZiwgZm1zLCwgLSk7CitG T08gKHYxNnNmLCBmbm1hLCAtLCArKTsKK0ZPTyAodjhkZiwgZm5tYSwgLSwgKyk7CitGT08gKHYx NnNmLCBmbm1zLCAtLCAtKTsKK0ZPTyAodjhkZiwgZm5tcywgLSwgLSk7CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTQu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3 NjctNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYWJlOTFiMTFj OAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUx MmYtYnJvYWRjYXN0LXByODc3NjctNC5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIFBSIHRhcmdldC84 Nzc2NyAqLworLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1hdng1 MTJmIiB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBhdng1MTJmIH0gKi8K KworI2luY2x1ZGUgImF2eDUxMmYtaGVscGVyLmgiCisKKyNpbmNsdWRlICJhdng1MTJmLWJyb2Fk Y2FzdC1wcjg3NzY3LTMuYyIKKworI2RlZmluZSBSVEVTVChWVFlQRSwgVFlQRSwgTiwgT1BfTkFN RSwgT1AxLCBPUDIpCQkJCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAg IFRZUEUgZXhwW05dLCBzcmMxW05dLCBzcmMyW05dOwkJCQkJXAorICAgICAgVlRZUEUgcmVzOwkJ CQkJCQlcCisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykJCQkJCVwKKwl7CQkJCQkJ CQlcCisJICBzcmMxW2ldID0gaSAqIGkgKiAxMDcuMmY7CQkJCQlcCisJICBzcmMyW2ldID0gaSAq IDIuZiAtIDQwNC5mOwkJCQkJXAorCX0JCQkJCQkJCVwKKyAgICAgIHJlcyA9IGZvb18jI09QX05B TUUjI18jI1ZUWVBFICgqKFZUWVBFKikmc3JjMVswXSwgKihWVFlQRSopJnNyYzJbMF0pOyBcCisg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkgKyspCQkJCQlcCisJZXhwW2ldID0gKE9QMSBz cmMxW2ldICogc3JjMltpXSkgT1AyIENPTlNUQU5UOwkJCVwKKyAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgTjsgaisrKQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIGlmIChyZXNbal0gIT0gZXhwW2pd KQkJCQkJCVwKKwkgICAgYWJvcnQoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB9CQkJCQkJ CQkJXAorICB3aGlsZSAoMCkKKwordm9pZAordGVzdF81MTIgKHZvaWQpCit7CisgIFJURVNUICh2 MTZzZiwgZmxvYXQsIDE2LCBmbWEsLCArKTsKKyAgUlRFU1QgKHY4ZGYsIGRvdWJsZSwgOCwgZm1h LCwgKyk7CisgIFJURVNUICh2MTZzZiwgZmxvYXQsIDE2LCBmbXMsLCAtKTsKKyAgUlRFU1QgKHY4 ZGYsIGRvdWJsZSwgOCwgZm1zLCwgLSk7CisgIFJURVNUICh2MTZzZiwgZmxvYXQsIDE2LCBmbm1h LC0sICspOworICBSVEVTVCAodjhkZiwgZG91YmxlLCA4LCBmbm1hLC0sICspOworICBSVEVTVCAo djE2c2YsIGZsb2F0LCAxNiwgZm5tcywtLCAtKTsKKyAgUlRFU1QgKHY4ZGYsIGRvdWJsZSwgOCwg Zm5tcywtLCAtKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3NjctNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvYXZ4NTEyZi1icm9hZGNhc3QtcHI4Nzc2Ny01LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjcyZTEwOThjY2JlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEyZi1icm9hZGNhc3QtcHI4Nzc2Ny01LmMKQEAg LTAsMCArMSwyNiBAQAorLyogUFIgdGFyZ2V0Lzg3NzY3ICovCisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1hdng1MTJmIiB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIlxbXm5cblxdKlxcXHsxdG84XFxcfSIgNCB9IH0gICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIlxbXm5cblxdKlxcXHsxdG8x NlxcXH0iIDQgfSB9ICAqLworCit0eXBlZGVmIGludCB2MTZzaSAgX19hdHRyaWJ1dGVfXyAoKHZl Y3Rvcl9zaXplICg2NCkpKTsKK3R5cGVkZWYgbG9uZyBsb25nIHY4ZGkgIF9fYXR0cmlidXRlX18g KCh2ZWN0b3Jfc2l6ZSAoNjQpKSk7CisKKyNkZWZpbmUgQ09OU1RBTlQgMTAxOworI2RlZmluZSBG T08oVlRZUEUsIE9QX05BTUUsIE9QMSwgT1AyKQkJXAorVlRZUEUJCQkJCQlcCisgX19hdHRyaWJ1 dGVfXyAoKG5vaXBhKSkJCQlcCisgZm9vXyMjT1BfTkFNRSMjXyMjVlRZUEUgKFZUWVBFIGEpCQlc Cit7CQkJCQkJXAorICByZXR1cm4gKE9QMSBhKSBPUDIgQ09OU1RBTlQ7CQkJXAorfQkJCQkJCVwK KworRk9PICh2MTZzaSwgYW5kbm90LCB+LCAmKTsKK0ZPTyAodjhkaSwgYW5kbm90LCB+LCAmKTsK K0ZPTyAodjE2c2ksIGFuZCwsICYpOworRk9PICh2OGRpLCBhbmQsLCAmKTsKK0ZPTyAodjE2c2ks IG9yLCwgfCk7CitGT08gKHY4ZGksIG9yLCwgfCk7CitGT08gKHYxNnNpLCB4b3IsLCBeKTsKK0ZP TyAodjhkaSwgeG9yLCwgXik7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3NjctNi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMjg4ZjgzMTU4YwotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3NjctNi5j CkBAIC0wLDAgKzEsNDEgQEAKKy8qIFBSIHRhcmdldC84Nzc2NyAqLworLyogeyBkZy1kbyBydW4g fSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1hdng1MTJmIiB9ICovCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCBhdng1MTJmfSAqLworCisjaW5jbHVkZSAiYXZ4NTEyZi1oZWxw ZXIuaCIKKworI2luY2x1ZGUgImF2eDUxMmYtYnJvYWRjYXN0LXByODc3NjctNS5jIgorCisjZGVm aW5lIFJURVNUKFZUWVBFLCBUWVBFLCBOLCBPUF9OQU1FLCBPUDEsIE9QMikJCQkJXAorICBkbwkJ CQkJCQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgVFlQRSBleHBbTl0sIHNyY1tOXTsJCQkJ CQlcCisgICAgICBWVFlQRSByZXM7CQkJCQkJCVwKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg TjsgaSsrKQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIHNyY1tpXSA9IGkgKiBpICogMTA3OwkJCQkJ CVwKKwl9CQkJCQkJCQlcCisgICAgICByZXMgPSBmb29fIyNPUF9OQU1FIyNfIyNWVFlQRSAoKihW VFlQRSopJnNyY1swXSk7CQkJXAorICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpICsrKQkJ CQkJXAorCWV4cFtpXSA9IChPUDEgc3JjW2ldKSBPUDIgQ09OU1RBTlQ7CQkJCVwKKyAgICAgIGZv ciAoaW50IGogPSAwOyBqIDwgTjsgaisrKQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIGlmIChyZXNb al0gIT0gZXhwW2pdKQkJCQkJCVwKKwkgICAgYWJvcnQoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwK KyAgICB9CQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKwordm9pZAordGVzdF81MTIgKHZvaWQpCit7 CisgIFJURVNUICh2MTZzaSwgaW50LCAxNiwgYW5kbm90LCB+LCAmKTsKKyAgUlRFU1QgKHY4ZGks IGxvbmcgbG9uZywgOCwgYW5kbm90LCB+LCAmKTsKKyAgUlRFU1QgKHYxNnNpLCBpbnQsIDE2LCBh bmQsLCAmKTsKKyAgUlRFU1QgKHY4ZGksIGxvbmcgbG9uZywgOCwgYW5kLCwgJik7CisgIFJURVNU ICh2MTZzaSwgaW50LCAxNiwgb3IsLCB8KTsKKyAgUlRFU1QgKHY4ZGksIGxvbmcgbG9uZywgOCwg b3IsLCB8KTsKKyAgUlRFU1QgKHYxNnNpLCBpbnQsIDE2LCB4b3IsLCBeKTsKKyAgUlRFU1QgKHY4 ZGksIGxvbmcgbG9uZywgOCwgeG9yLCwgXik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9hdng1MTJmLWJyb2FkY2FzdC1wcjg3NzY3LTcuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0LXByODc3NjctNy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hOGYxNDVkODU4OQotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMmYtYnJvYWRjYXN0 LXByODc3NjctNy5jCkBAIC0wLDAgKzEsMTIxIEBACisvKiBQUiB0YXJnZXQvODc3NjcgKi8KKy8q IHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWF2eDUxMmYgLW1h dng1MTJ2bCIgfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2YWRk XFteXG5cXSpcXFx7MXRvMlxcXH0iIDEgfSB9ICAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLXRpbWVzICJ2YWRkXFteXG5cXSpcXFx7MXRvNFxcXH0iIDIgfSB9ICAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2YWRkXFteXG5cXSpcXFx7MXRvOFxcXH0i IDIgfSB9ICAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2YWRkXFte XG5cXSpcXFx7MXRvMTZcXFx9IiAxIH0gfSAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyAidnN1YlxbXlxuXF0qXFxcezF0bzJcXFx9IiAxIH0gfSAgKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnN1YlxbXlxuXF0qXFxcezF0bzRcXFx9IiAy IH0gfSAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnN1YlxbXlxu XF0qXFxcezF0bzhcXFx9IiAyIH0gfSAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci10aW1lcyAidnN1YlxbXlxuXF0qXFxcezF0bzE2XFxcfSIgMSB9IH0gICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZtdWxcW15cblxdKlxcXHsxdG8yXFxcfSIgMSB9 IH0gICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZtdWxcW15cblxd KlxcXHsxdG80XFxcfSIgMiB9IH0gICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMgInZtdWxcW15cblxdKlxcXHsxdG84XFxcfSIgMiB9IH0gICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZtdWxcW15cblxdKlxcXHsxdG8xNlxcXH0iIDEgfSB9 ICAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2ZGl2XFteXG5cXSpc XFx7MXRvMlxcXH0iIDEgfSB9ICAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzICJ2ZGl2XFteXG5cXSpcXFx7MXRvNFxcXH0iIDIgfSB9ICAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2ZGl2XFteXG5cXSpcXFx7MXRvOFxcXH0iIDIgfSB9ICAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2ZGl2XFteXG5cXSpcXFx7 MXRvMTZcXFx9IiAxIH0gfSAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyAidmZtYWRkXFteXG5cXSpcXFx7MXRvMlxcXH0iIDEgfSB9ICAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2Zm1hZGRcW15cblxdKlxcXHsxdG80XFxcfSIgMiB9IH0g ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZmbWFkZFxbXlxuXF0q XFxcezF0bzhcXFx9IiAyIH0gfSAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10 aW1lcyAidmZtYWRkXFteXG5cXSpcXFx7MXRvMTZcXFx9IiAxIH0gfSAgKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmZtc3ViXFteXG5cXSpcXFx7MXRvMlxcXH0iIDEg fSB9ICAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2Zm1zdWJcW15c blxdKlxcXHsxdG80XFxcfSIgMiB9IH0gICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMgInZmbXN1YlxbXlxuXF0qXFxcezF0bzhcXFx9IiAyIH0gfSAgKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmZtc3ViXFteXG5cXSpcXFx7MXRvMTZcXFx9 IiAxIH0gfSAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmZubWFk ZFxbXlxuXF0qXFxcezF0bzJcXFx9IiAxIH0gfSAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyAidmZubWFkZFxbXlxuXF0qXFxcezF0bzRcXFx9IiAyIH0gfSAgKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmZubWFkZFxbXlxuXF0qXFxcezF0 bzhcXFx9IiAyIH0gfSAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi dmZubWFkZFxbXlxuXF0qXFxcezF0bzE2XFxcfSIgMSB9IH0gICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMgInZmbm1zdWJcW15cblxdKlxcXHsxdG8yXFxcfSIgMSB9IH0g ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZmbm1zdWJcW15cblxd KlxcXHsxdG80XFxcfSIgMiB9IH0gICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMgInZmbm1zdWJcW15cblxdKlxcXHsxdG84XFxcfSIgMiB9IH0gICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZmbm1zdWJcW15cblxdKlxcXHsxdG8xNlxcXH0i IDEgfSB9ICAqLworCisjaW5jbHVkZTxpbW1pbnRyaW4uaD4KKworI2RlZmluZSBDT05TVEFOVCAx MDEKKworI2RlZmluZSBGT08oVlRZUEUsIE9QX05BTUUsIExFTiwgU1VGRklYLCBNVFlQRSkJCQlc CisgIFZUWVBFCQkJCQkJCQkJXAorICBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQkJCQkJCVwKKyAg X21tIyNMRU4jI19mb29fIyNPUF9OQU1FIyNfIyNTVUZGSVggKFZUWVBFIGRzdCwgVlRZUEUgc3Jj LCBNVFlQRSBtKQlcCisgIHsJCQkJCQkJCQlcCisgICAgcmV0dXJuICBfbW0jI0xFTiMjX21hc2tf IyNPUF9OQU1FIyNfIyNTVUZGSVggKGRzdCwgbSwgc3JjLAkJXAorCQkJCQkJICBfbW0jI0xFTiMj X3NldDFfIyNTVUZGSVggKENPTlNUQU5UKSk7IFwKKyAgfQkJCQkJCQkJCVwKKworI2RlZmluZSBG T09aKFZUWVBFLCBPUF9OQU1FLCBMRU4sIFNVRkZJWCwgTVRZUEUpCQkJXAorICBWVFlQRQkJCQkJ CQkJCVwKKyAgX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkJCQkJCQlcCisgIF9tbSMjTEVOIyNfZm9v el8jI09QX05BTUUjI18jI1NVRkZJWCAoVlRZUEUgZHN0LCBWVFlQRSBzcmMsIE1UWVBFIG0pCVwK KyAgewkJCQkJCQkJCVwKKyAgICByZXR1cm4gIF9tbSMjTEVOIyNfbWFza3pfIyNPUF9OQU1FIyNf IyNTVUZGSVggKG0sIGRzdCwgc3JjLAkJXAorCQkJCQkJICBfbW0jI0xFTiMjX3NldDFfIyNTVUZG SVggKENPTlNUQU5UKSk7IFwKKyAgfQkJCQkJCQkJCVwKKworRk9PIChfX201MTIsIGFkZCwgNTEy LCBwcywgX19tbWFzazE2KTsKK0ZPTyAoX19tMjU2LCBhZGQsIDI1NiwgcHMsIF9fbW1hc2s4KTsK K0ZPTyAoX19tMTI4LCBhZGQsLCBwcywgX19tbWFzazgpOworCitGT08gKF9fbTUxMiwgc3ViLCA1 MTIsIHBzLCBfX21tYXNrMTYpOworRk9PIChfX20yNTYsIHN1YiwgMjU2LCBwcywgX19tbWFzazgp OworRk9PIChfX20xMjgsIHN1YiwsIHBzLCBfX21tYXNrOCk7CisKK0ZPTyAoX19tNTEyLCBtdWws IDUxMiwgcHMsIF9fbW1hc2sxNik7CitGT08gKF9fbTI1NiwgbXVsLCAyNTYsIHBzLCBfX21tYXNr OCk7CitGT08gKF9fbTEyOCwgbXVsLCwgcHMsIF9fbW1hc2s4KTsKKworRk9PIChfX201MTIsIGRp diwgNTEyLCBwcywgX19tbWFzazE2KTsKK0ZPTyAoX19tMjU2LCBkaXYsIDI1NiwgcHMsIF9fbW1h c2s4KTsKK0ZPTyAoX19tMTI4LCBkaXYsLCBwcywgX19tbWFzazgpOworCitGT09aIChfX201MTIs IGZtYWRkLCA1MTIsIHBzLCBfX21tYXNrMTYpOworRk9PWiAoX19tMjU2LCBmbWFkZCwgMjU2LCBw cywgX19tbWFzazgpOworRk9PWiAoX19tMTI4LCBmbWFkZCwsIHBzLCBfX21tYXNrOCk7CisKK0ZP T1ogKF9fbTUxMiwgZm1zdWIsIDUxMiwgcHMsIF9fbW1hc2sxNik7CitGT09aIChfX20yNTYsIGZt c3ViLCAyNTYsIHBzLCBfX21tYXNrOCk7CitGT09aIChfX20xMjgsIGZtc3ViLCwgcHMsIF9fbW1h c2s4KTsKKworRk9PWiAoX19tNTEyLCBmbm1hZGQsIDUxMiwgcHMsIF9fbW1hc2sxNik7CitGT09a IChfX20yNTYsIGZubWFkZCwgMjU2LCBwcywgX19tbWFzazgpOworRk9PWiAoX19tMTI4LCBmbm1h ZGQsLCBwcywgX19tbWFzazgpOworCitGT09aIChfX201MTIsIGZubXN1YiwgNTEyLCBwcywgX19t bWFzazE2KTsKK0ZPT1ogKF9fbTI1NiwgZm5tc3ViLCAyNTYsIHBzLCBfX21tYXNrOCk7CitGT09a IChfX20xMjgsIGZubXN1YiwsIHBzLCBfX21tYXNrOCk7CisKK0ZPTyAoX19tNTEyZCwgYWRkLCA1 MTIsIHBkLCBfX21tYXNrOCk7CitGT08gKF9fbTI1NmQsIGFkZCwgMjU2LCBwZCwgX19tbWFzazgp OworRk9PIChfX20xMjhkLCBhZGQsLCBwZCwgX19tbWFzazgpOworCitGT08gKF9fbTUxMmQsIHN1 YiwgNTEyLCBwZCwgX19tbWFzazgpOworRk9PIChfX20yNTZkLCBzdWIsIDI1NiwgcGQsIF9fbW1h c2s4KTsKK0ZPTyAoX19tMTI4ZCwgc3ViLCwgcGQsIF9fbW1hc2s4KTsKKworRk9PIChfX201MTJk LCBtdWwsIDUxMiwgcGQsIF9fbW1hc2s4KTsKK0ZPTyAoX19tMjU2ZCwgbXVsLCAyNTYsIHBkLCBf X21tYXNrOCk7CitGT08gKF9fbTEyOGQsIG11bCwsIHBkLCBfX21tYXNrOCk7CisKK0ZPTyAoX19t NTEyZCwgZGl2LCA1MTIsIHBkLCBfX21tYXNrOCk7CitGT08gKF9fbTI1NmQsIGRpdiwgMjU2LCBw ZCwgX19tbWFzazgpOworRk9PIChfX20xMjhkLCBkaXYsLCBwZCwgX19tbWFzazgpOworCitGT09a IChfX201MTJkLCBmbWFkZCwgNTEyLCBwZCwgX19tbWFzazgpOworRk9PWiAoX19tMjU2ZCwgZm1h ZGQsIDI1NiwgcGQsIF9fbW1hc2s4KTsKK0ZPT1ogKF9fbTEyOGQsIGZtYWRkLCwgcGQsIF9fbW1h c2s4KTsKKworRk9PWiAoX19tNTEyZCwgZm1zdWIsIDUxMiwgcGQsIF9fbW1hc2s4KTsKK0ZPT1og KF9fbTI1NmQsIGZtc3ViLCAyNTYsIHBkLCBfX21tYXNrOCk7CitGT09aIChfX20xMjhkLCBmbXN1 YiwsIHBkLCBfX21tYXNrOCk7CisKK0ZPT1ogKF9fbTUxMmQsIGZubWFkZCwgNTEyLCBwZCwgX19t bWFzazgpOworRk9PWiAoX19tMjU2ZCwgZm5tYWRkLCAyNTYsIHBkLCBfX21tYXNrOCk7CitGT09a IChfX20xMjhkLCBmbm1hZGQsLCBwZCwgX19tbWFzazgpOworCitGT09aIChfX201MTJkLCBmbm1z dWIsIDUxMiwgcGQsIF9fbW1hc2s4KTsKK0ZPT1ogKF9fbTI1NmQsIGZubXN1YiwgMjU2LCBwZCwg X19tbWFzazgpOworRk9PWiAoX19tMTI4ZCwgZm5tc3ViLCwgcGQsIF9fbW1hc2s4KTsKZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLWJyb2FkY2FzdC1w cjg3NzY3LTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLWJyb2Fk Y2FzdC1wcjg3NzY3LTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u Mzk3ZTI4NzEzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9hdng1MTJ2bC1icm9hZGNhc3QtcHI4Nzc2Ny0xLmMKQEAgLTAsMCArMSw0NSBAQAorLyog UFIgdGFyZ2V0Lzg3NzY3ICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItTzIgLW1hdng1MTJmIC1tYXZ4NTEydmwgLW1hdng1MTJkcSIgfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJcW15cblxdKlxcXHsxdG8yXFxcfSIgNSB9IH0g ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIlxbXlxuXF0qXFxcezF0 bzRcXFx9IiAxMCB9IH0gICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg IlxbXlxuXF0qXFxcezF0bzhcXFx9IiA1IH0gfSAgKi8KKwordHlwZWRlZiBpbnQgdjRzaSAgX19h dHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgxNikpKTsKK3R5cGVkZWYgaW50IHY4c2kgIF9fYXR0 cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMzIpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZyB2MmRpICBf X2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDE2KSkpOwordHlwZWRlZiBsb25nIGxvbmcgdjRk aSAgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgzMikpKTsKK3R5cGVkZWYgZmxvYXQgdjRz ZiAgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgxNikpKTsKK3R5cGVkZWYgZmxvYXQgdjhz ZiAgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgzMikpKTsKK3R5cGVkZWYgZG91YmxlIHYy ZGYgIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMTYpKSk7Cit0eXBlZGVmIGRvdWJsZSB2 NGRmICBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDMyKSkpOworCisjZGVmaW5lIENPTlNU QU5UIDEwMTsKKyNkZWZpbmUgRk9PKFZUWVBFLCBPUF9OQU1FLCBPUCkJCQlcCitWVFlQRQkJCQkJ CVwKKyBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQkJCVwKK2Zvb18jI09QX05BTUUjI18jI1ZUWVBF IChWVFlQRSBhKQkJXAorewkJCQkJCVwKKyAgcmV0dXJuIGEgT1AgQ09OU1RBTlQ7CQkJCVwKK30J CQkJCQlcCisKK0ZPTyAodjRzaSwgYWRkLCArKTsKK0ZPTyAodjhzaSwgYWRkLCArKTsKK0ZPTyAo djJkaSwgYWRkLCArKTsKK0ZPTyAodjRkaSwgYWRkLCArKTsKK0ZPTyAodjRzaSwgc3ViLCAtKTsK K0ZPTyAodjhzaSwgc3ViLCAtKTsKK0ZPTyAodjJkaSwgc3ViLCAtKTsKK0ZPTyAodjRkaSwgc3Vi LCAtKTsKK0ZPTyAodjRzZiwgYWRkLCArKTsKK0ZPTyAodjhzZiwgYWRkLCArKTsKK0ZPTyAodjJk ZiwgYWRkLCArKTsKK0ZPTyAodjRkZiwgYWRkLCArKTsKK0ZPTyAodjRzaSwgbXVsLCAqKTsKK0ZP TyAodjhzaSwgbXVsLCAqKTsKK0ZPTyAodjJkaSwgbXVsLCAqKTsKK0ZPTyAodjRkaSwgbXVsLCAq KTsKK0ZPTyAodjRzZiwgbXVsLCAqKTsKK0ZPTyAodjhzZiwgbXVsLCAqKTsKK0ZPTyAodjJkZiwg bXVsLCAqKTsKK0ZPTyAodjRkZiwgbXVsLCAqKTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLWJyb2FkY2FzdC1wcjg3NzY3LTIuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLWJyb2FkY2FzdC1wcjg3NzY3LTIuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWI3OTZhYzcxMjQKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC1icm9hZGNh c3QtcHI4Nzc2Ny0yLmMKQEAgLTAsMCArMSw1OSBAQAorLyogUFIgdGFyZ2V0Lzg3NzY3ICovCisv KiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWF2eDUxMmYgLW1hdng1 MTJkcSAtbWF2eDUxMnZsIiB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBh dng1MTJkcSB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBhdng1MTJ2bCB9 ICovCisKKyNkZWZpbmUgQVZYNTEyRFEKKyNkZWZpbmUgQVZYNTEyVkwKKyNpbmNsdWRlICJhdng1 MTJmLWhlbHBlci5oIgorCisjaW5jbHVkZSAiYXZ4NTEydmwtYnJvYWRjYXN0LXByODc3NjctMS5j IgorCisjZGVmaW5lIFJURVNUKFZUWVBFLCBUWVBFLCBOLCBPUF9OQU1FLCBPUCkJCVwKKyAgZG8J CQkJCQkJXAorICAgIHsJCQkJCQkJXAorICAgICAgVFlQRSBleHBbTl0sIHNyY1tOXTsJCQkJXAor ICAgICAgVlRZUEUgcmVzOwkJCQkJXAorICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKysp CQkJXAorCXNyY1tpXSA9IGkgKiBpICogMTA3OwkJCQlcCisgICAgICByZXMgPSBmb29fIyNPUF9O QU1FIyNfIyNWVFlQRSAoKihWVFlQRSopJnNyY1swXSk7CVwKKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgTjsgaSArKykJCQlcCisJZXhwW2ldID0gc3JjW2ldIE9QIENPTlNUQU5UOwkJCVwKKyAg ICAgIGZvciAoaW50IGogPSAwOyBqIDwgTjsgaisrKQkJCVwKKwl7CQkJCQkJXAorCSAgaWYgKHJl c1tqXSAhPSBleHBbal0pCQkJCVwKKwkgICAgYWJvcnQoKTsJCQkJCVwKKwl9CQkJCQkJXAorICAg IH0JCQkJCQkJXAorICB3aGlsZSAoMCkKKwordm9pZAordGVzdF8yNTYgKHZvaWQpCit7CisgIFJU RVNUICh2OHNpLCBpbnQsIDgsIGFkZCwgKyk7CisgIFJURVNUICh2NGRpLCBsb25nIGxvbmcsIDQs IGFkZCwgKyk7CisgIFJURVNUICh2OHNmLCBmbG9hdCwgOCwgYWRkLCArKTsKKyAgUlRFU1QgKHY0 ZGYsIGRvdWJsZSwgNCwgYWRkLCArKTsKKyAgUlRFU1QgKHY4c2ksIGludCwgOCwgc3ViLCAtKTsK KyAgUlRFU1QgKHY0ZGksIGxvbmcgbG9uZywgNCwgc3ViLCAtKTsKKyAgUlRFU1QgKHY4c2ksIGlu dCwgOCwgbXVsLCAqKTsKKyAgUlRFU1QgKHY0ZGksIGxvbmcgbG9uZywgNCwgbXVsLCAqKTsKKyAg UlRFU1QgKHY4c2YsIGZsb2F0LCA4LCBtdWwsICopOworICBSVEVTVCAodjRkZiwgZG91YmxlLCA0 LCBtdWwsICopOworfQorCit2b2lkCit0ZXN0XzEyOCAodm9pZCkKK3sKKyAgUlRFU1QgKHY0c2ks IGludCwgNCwgYWRkLCArKTsKKyAgUlRFU1QgKHYyZGksIGxvbmcgbG9uZywgMiwgYWRkLCArKTsK KyAgUlRFU1QgKHY0c2YsIGZsb2F0LCA0LCBhZGQsICspOworICBSVEVTVCAodjJkZiwgZG91Ymxl LCAyLCBhZGQsICspOworICBSVEVTVCAodjRzaSwgaW50LCA0LCBzdWIsIC0pOworICBSVEVTVCAo djJkaSwgbG9uZyBsb25nLCAyLCBzdWIsIC0pOworICBSVEVTVCAodjRzaSwgaW50LCA0LCBtdWws ICopOworICBSVEVTVCAodjJkaSwgbG9uZyBsb25nLCAyLCBtdWwsICopOworICBSVEVTVCAodjRz ZiwgZmxvYXQsIDQsIG11bCwgKik7CisgIFJURVNUICh2MmRmLCBkb3VibGUsIDIsIG11bCwgKik7 Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC1i cm9hZGNhc3QtcHI4Nzc2Ny0zLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1 MTJ2bC1icm9hZGNhc3QtcHI4Nzc2Ny0zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmFlZGZiMTYwMTZlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvYXZ4NTEydmwtYnJvYWRjYXN0LXByODc3NjctMy5jCkBAIC0wLDAgKzEs MzcgQEAKKy8qIFBSIHRhcmdldC84Nzc2NyAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8yIC1tYXZ4NTEyZiAtbWF2eDUxMnZsIiB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIlxbXlxuXF0qXFxcezF0bzJcXFx9IiA0IH0gfSAg Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAiXFteXG5cXSpcXFx7MXRv NFxcXH0iIDggfSB9ICAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJc W15cblxdKlxcXHsxdG84XFxcfSIgNCB9IH0gICovCisKK3R5cGVkZWYgZmxvYXQgdjRzZiAgX19h dHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgxNikpKTsKK3R5cGVkZWYgZmxvYXQgdjhzZiAgX19h dHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgzMikpKTsKK3R5cGVkZWYgZG91YmxlIHYyZGYgIF9f YXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMTYpKSk7Cit0eXBlZGVmIGRvdWJsZSB2NGRmICBf X2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDMyKSkpOworCisjZGVmaW5lIENPTlNUQU5UIDEw MTsKKyNkZWZpbmUgRk9PKFZUWVBFLCBPUF9OQU1FLCBPUDEsIE9QMikJCVwKK1ZUWVBFCQkJCQkJ XAorIF9fYXR0cmlidXRlX18gKChub2lwYSkpCQkJXAorIGZvb18jI09QX05BTUUjI18jI1ZUWVBF IChWVFlQRSBhLCBWVFlQRSBiKQlcCit7CQkJCQkJXAorICByZXR1cm4gKE9QMSBhICogYikgT1Ay IENPTlNUQU5UOwkJXAorfQkJCQkJCVwKKworRk9PICh2NHNmLCBmbWEsLCArKTsKK0ZPTyAodjhz ZiwgZm1hLCwgKyk7CitGT08gKHYyZGYsIGZtYSwsICspOworRk9PICh2NGRmLCBmbWEsLCArKTsK K0ZPTyAodjRzZiwgZm1zLCwgLSk7CitGT08gKHY4c2YsIGZtcywsIC0pOworRk9PICh2MmRmLCBm bXMsLCAtKTsKK0ZPTyAodjRkZiwgZm1zLCwgLSk7CitGT08gKHY0c2YsIGZubWEsIC0sICspOwor Rk9PICh2OHNmLCBmbm1hLCAtLCArKTsKK0ZPTyAodjJkZiwgZm5tYSwgLSwgKyk7CitGT08gKHY0 ZGYsIGZubWEsIC0sICspOworRk9PICh2NHNmLCBmbm1zLCAtLCAtKTsKK0ZPTyAodjhzZiwgZm5t cywgLSwgLSk7CitGT08gKHYyZGYsIGZubXMsIC0sIC0pOworRk9PICh2NGRmLCBmbm1zLCAtLCAt KTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLWJy b2FkY2FzdC1wcjg3NzY3LTQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUx MnZsLWJyb2FkY2FzdC1wcjg3NzY3LTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNDBiOGViOTkyOWQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9hdng1MTJ2bC1icm9hZGNhc3QtcHI4Nzc2Ny00LmMKQEAgLTAsMCArMSw1 NiBAQAorLyogUFIgdGFyZ2V0Lzg3NzY3ICovCisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRn LW9wdGlvbnMgIi1PMiAtbWF2eDUxMmYgLW1hdng1MTJ2bCIgfSAqLworLyogeyBkZy1yZXF1aXJl LWVmZmVjdGl2ZS10YXJnZXQgYXZ4NTEydmwgfSAqLworCisjZGVmaW5lIEFWWDUxMlZMCisjaW5j bHVkZSAiYXZ4NTEyZi1oZWxwZXIuaCIKKworI2luY2x1ZGUgImF2eDUxMnZsLWJyb2FkY2FzdC1w cjg3NzY3LTMuYyIKKworI2RlZmluZSBSVEVTVChWVFlQRSwgVFlQRSwgTiwgT1BfTkFNRSwgT1Ax LCBPUDIpCQkJCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIFRZUEUg ZXhwW05dLCBzcmMxW05dLCBzcmMyW05dOwkJCQkJXAorICAgICAgVlRZUEUgcmVzOwkJCQkJCQlc CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykJCQkJCVwKKwl7CQkJCQkJCQlcCisJ ICBzcmMxW2ldID0gaSAqIGkgKiAxMDcuMmY7CQkJCQlcCisJICBzcmMyW2ldID0gaSAqIDIuZiAt IDQwNC5mOwkJCQkJXAorCX0JCQkJCQkJCVwKKyAgICAgIHJlcyA9IGZvb18jI09QX05BTUUjI18j I1ZUWVBFICgqKFZUWVBFKikmc3JjMVswXSwgKihWVFlQRSopJnNyYzJbMF0pOyBcCisgICAgICBm b3IgKGludCBpID0gMDsgaSA8IE47IGkgKyspCQkJCQlcCisJZXhwW2ldID0gKE9QMSBzcmMxW2ld ICogc3JjMltpXSkgT1AyIENPTlNUQU5UOwkJCVwKKyAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg TjsgaisrKQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIGlmIChyZXNbal0gIT0gZXhwW2pdKQkJCQkJ CVwKKwkgICAgYWJvcnQoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAor ICB3aGlsZSAoMCkKKwordm9pZAordGVzdF8yNTYgKHZvaWQpCit7CisgIFJURVNUICh2OHNmLCBm bG9hdCwgOCwgZm1hLCwgKyk7CisgIFJURVNUICh2NGRmLCBkb3VibGUsIDQsIGZtYSwsICspOwor ICBSVEVTVCAodjhzZiwgZmxvYXQsIDgsIGZtcywsIC0pOworICBSVEVTVCAodjRkZiwgZG91Ymxl LCA0LCBmbXMsLCAtKTsKKyAgUlRFU1QgKHY4c2YsIGZsb2F0LCA4LCBmbm1hLC0sICspOworICBS VEVTVCAodjRkZiwgZG91YmxlLCA0LCBmbm1hLC0sICspOworICBSVEVTVCAodjhzZiwgZmxvYXQs IDgsIGZubXMsLSwgLSk7CisgIFJURVNUICh2NGRmLCBkb3VibGUsIDQsIGZubXMsLSwgLSk7Cit9 CisKK3ZvaWQKK3Rlc3RfMTI4ICh2b2lkKQoreworICBSVEVTVCAodjRzZiwgZmxvYXQsIDQsIGZt YSwsICspOworICBSVEVTVCAodjJkZiwgZG91YmxlLCAyLCBmbWEsLCArKTsKKyAgUlRFU1QgKHY0 c2YsIGZsb2F0LCA0LCBmbXMsLCAtKTsKKyAgUlRFU1QgKHYyZGYsIGRvdWJsZSwgMiwgZm1zLCwg LSk7CisgIFJURVNUICh2NHNmLCBmbG9hdCwgNCwgZm5tYSwtLCArKTsKKyAgUlRFU1QgKHYyZGYs IGRvdWJsZSwgMiwgZm5tYSwtLCArKTsKKyAgUlRFU1QgKHY0c2YsIGZsb2F0LCA0LCBmbm1zLC0s IC0pOworICBSVEVTVCAodjJkZiwgZG91YmxlLCAyLCBmbm1zLC0sIC0pOworfQpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEydmwtYnJvYWRjYXN0LXByODc3 NjctNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEydmwtYnJvYWRjYXN0 LXByODc3NjctNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZTk0 NjBmYWE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2F2eDUxMnZsLWJyb2FkY2FzdC1wcjg3NzY3LTUuYwpAQCAtMCwwICsxLDM3IEBACisvKiBQUiB0 YXJnZXQvODc3NjcgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1PMiAtbWF2eDUxMmYgLW1hdng1MTJ2bCIgfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLXRpbWVzICJcW15cblxdKlxcXHsxdG8yXFxcfSIgNCB9IH0gICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIlxbXlxuXF0qXFxcezF0bzRcXFx9IiA4IH0gfSAg Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAiXFteXG5cXSpcXFx7MXRv OFxcXH0iIDQgfSB9ICAqLworCit0eXBlZGVmIGludCB2NHNpICBfX2F0dHJpYnV0ZV9fICgodmVj dG9yX3NpemUgKDE2KSkpOwordHlwZWRlZiBpbnQgdjhzaSAgX19hdHRyaWJ1dGVfXyAoKHZlY3Rv cl9zaXplICgzMikpKTsKK3R5cGVkZWYgbG9uZyBsb25nIHYyZGkgIF9fYXR0cmlidXRlX18gKCh2 ZWN0b3Jfc2l6ZSAoMTYpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZyB2NGRpICBfX2F0dHJpYnV0ZV9f ICgodmVjdG9yX3NpemUgKDMyKSkpOworCisjZGVmaW5lIENPTlNUQU5UIDEwMTsKKyNkZWZpbmUg Rk9PKFZUWVBFLCBPUF9OQU1FLCBPUDEsIE9QMikJCVwKK1ZUWVBFCQkJCQkJXAorIF9fYXR0cmli dXRlX18gKChub2lwYSkpCQkJXAorIGZvb18jI09QX05BTUUjI18jI1ZUWVBFIChWVFlQRSBhKQkJ XAorewkJCQkJCVwKKyAgcmV0dXJuIChPUDEgYSkgT1AyIENPTlNUQU5UOwkJCVwKK30JCQkJCQlc CisKK0ZPTyAodjRzaSwgYW5kbm90LCB+LCAmKTsKK0ZPTyAodjhzaSwgYW5kbm90LCB+LCAmKTsK K0ZPTyAodjJkaSwgYW5kbm90LCB+LCAmKTsKK0ZPTyAodjRkaSwgYW5kbm90LCB+LCAmKTsKK0ZP TyAodjRzaSwgYW5kLCwgJik7CitGT08gKHY4c2ksIGFuZCwsICYpOworRk9PICh2MmRpLCBhbmQs LCAmKTsKK0ZPTyAodjRkaSwgYW5kLCwgJik7CitGT08gKHY0c2ksIG9yLCwgfCk7CitGT08gKHY4 c2ksIG9yLCwgfCk7CitGT08gKHYyZGksIG9yLCwgfCk7CitGT08gKHY0ZGksIG9yLCwgfCk7CitG T08gKHY0c2ksIHhvciwsIF4pOworRk9PICh2OHNpLCB4b3IsLCBeKTsKK0ZPTyAodjJkaSwgeG9y LCwgXik7CitGT08gKHY0ZGksIHhvciwsIF4pOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvYXZ4NTEydmwtYnJvYWRjYXN0LXByODc3NjctNi5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEydmwtYnJvYWRjYXN0LXByODc3NjctNi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40OTNhNzZmMDkxNwotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLWJyb2FkY2Fz dC1wcjg3NzY3LTYuYwpAQCAtMCwwICsxLDU1IEBACisvKiBQUiB0YXJnZXQvODc3NjcgKi8KKy8q IHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXZ4NTEyZiAtbWF2eDUx MnZsIiB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBhdng1MTJ2bCB9ICov CisKKyNkZWZpbmUgQVZYNTEyVkwKKyNpbmNsdWRlICJhdng1MTJmLWhlbHBlci5oIgorCisjaW5j bHVkZSAiYXZ4NTEydmwtYnJvYWRjYXN0LXByODc3NjctNS5jIgorCisjZGVmaW5lIFJURVNUKFZU WVBFLCBUWVBFLCBOLCBPUF9OQU1FLCBPUDEsIE9QMikJCQkJXAorICBkbwkJCQkJCQkJCVwKKyAg ICB7CQkJCQkJCQkJXAorICAgICAgVFlQRSBleHBbTl0sIHNyY1tOXTsJCQkJCQlcCisgICAgICBW VFlQRSByZXM7CQkJCQkJCVwKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQkJCQkJ XAorCXsJCQkJCQkJCVwKKwkgIHNyY1tpXSA9IGkgKiBpICogMTA3OwkJCQkJCVwKKwl9CQkJCQkJ CQlcCisgICAgICByZXMgPSBmb29fIyNPUF9OQU1FIyNfIyNWVFlQRSAoKihWVFlQRSopJnNyY1sw XSk7CQkJXAorICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpICsrKQkJCQkJXAorCWV4cFtp XSA9IChPUDEgc3JjW2ldKSBPUDIgQ09OU1RBTlQ7CQkJCVwKKyAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgTjsgaisrKQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIGlmIChyZXNbal0gIT0gZXhwW2pd KQkJCQkJCVwKKwkgICAgYWJvcnQoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB9CQkJCQkJ CQkJXAorICB3aGlsZSAoMCkKKwordm9pZAordGVzdF8yNTYgKHZvaWQpCit7CisgIFJURVNUICh2 OHNpLCBpbnQsIDgsIGFuZG5vdCwgfiwgJik7CisgIFJURVNUICh2NGRpLCBsb25nIGxvbmcsIDQs IGFuZG5vdCwgfiwgJik7CisgIFJURVNUICh2OHNpLCBpbnQsIDgsIGFuZCwsICYpOworICBSVEVT VCAodjRkaSwgbG9uZyBsb25nLCA0LCBhbmQsLCAmKTsKKyAgUlRFU1QgKHY4c2ksIGludCwgOCwg b3IsLCB8KTsKKyAgUlRFU1QgKHY0ZGksIGxvbmcgbG9uZywgNCwgb3IsLCB8KTsKKyAgUlRFU1Qg KHY4c2ksIGludCwgOCwgeG9yLCwgXik7CisgIFJURVNUICh2NGRpLCBsb25nIGxvbmcsIDQsIHhv ciwsIF4pOworfQorCit2b2lkCit0ZXN0XzEyOCAodm9pZCkKK3sKKyAgUlRFU1QgKHY0c2ksIGlu dCwgNCwgYW5kbm90LCB+LCAmKTsKKyAgUlRFU1QgKHYyZGksIGxvbmcgbG9uZywgMiwgYW5kbm90 LCB+LCAmKTsKKyAgUlRFU1QgKHY0c2ksIGludCwgNCwgYW5kLCwgJik7CisgIFJURVNUICh2MmRp LCBsb25nIGxvbmcsIDIsIGFuZCwsICYpOworICBSVEVTVCAodjRzaSwgaW50LCA0LCBvciwsIHwp OworICBSVEVTVCAodjJkaSwgbG9uZyBsb25nLCAyLCBvciwsIHwpOworICBSVEVTVCAodjRzaSwg aW50LCA0LCB4b3IsLCBeKTsKKyAgUlRFU1QgKHYyZGksIGxvbmcgbG9uZywgMiwgeG9yLCwgXik7 Cit9Ci0tIAoyLjE4LjEKCg== --000000000000f28f2605ae4af0b8--