From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpbguseast2.qq.com (smtpbguseast2.qq.com [54.204.34.130]) by sourceware.org (Postfix) with ESMTPS id A00C33858D38 for ; Fri, 1 Dec 2023 01:04:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A00C33858D38 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rivai.ai Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rivai.ai ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A00C33858D38 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=54.204.34.130 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701392655; cv=none; b=sKZq5U/f4hndDJEZpjtlxl5b5ke3jCkvBS2F9mP2Kp9wkF49F9al1GoJmYpjl0xjlPqtkntv0Ar9KTRIk4+CEjBy3uxyd2AdsJSSXJ59Xp9L8WBfL4zxqG5UBf1b6JmrRxatCyGxnW/51NgdjUFECc7iG3SUhNIa3FadSN+4iuo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701392655; c=relaxed/simple; bh=hNGf3iQVu749ocA6pXg3om9wKEFF3HXbNLXUWGBKbL0=; h=Date:From:To:Subject:Mime-Version:Message-ID; b=P/NHxQ4zpip/hXxwyawo5PsiUivovTEV5BrzWJHcJ590BUOY0LL/9QrzQKxtjjaxazoz9K4c8TefsjhFUAI5a4MY4DnVoBQQhs1CkcpAntxkyBIOJ9lZ6+MvYChTS5KVaLz3hW3kW/IJUvfcWjBILsMzgQ41nzZyhbVejkGiFbA= ARC-Authentication-Results: i=1; server2.sourceware.org X-QQ-mid: bizesmtp71t1701392643tv9omwn2 Received: from LAPTOP-EPITNQBU ( [113.104.251.10]) by bizesmtp.qq.com (ESMTP) with id ; Fri, 01 Dec 2023 09:04:02 +0800 (CST) X-QQ-SSF: 01400000000000G0V000000A0000000 X-QQ-FEAT: UJd4nZbM1Cewvgo2GBATCK93U8DuO6tO7pG3RCdNO6u1W4w7CgJtMQCAmKOkM e0Qp/jpGhLfAI5SJZIC5TF53VzShdaVAUaIl2ncpozVeesakZpXeCbUzR4eWaILQ9j++huO jW0VHKzZagScuJo9YOQ655QLPNmDRZCOXL3KspMl3S6Z2Gn/eeo0DCkMNjDwmj0dkrGqkHm PrdOGG+Wc8sRCI658nsUEQWqAtn4ELHYT3O/y9HzK0WWiN8N/JEunTCm861Q0WLErisERG5 zfI4YgV5NCi2mPlfRnhlRBFvLvWScrR6nYiyrn1h+wBYNXiDqj/pvVzwGbwXtJam2Z4Bxe1 nIHKiCF6t3KLIksCytvdoeo6MEBoZ+hzXqjvN7DVIIKQH5FtUo/LIQe20vT4b898NE5HgJk hRGUSV3gIR4= X-QQ-GoodBg: 2 X-BIZMAIL-ID: 13433342891637283121 Date: Fri, 1 Dec 2023 09:04:03 +0800 From: "juzhe.zhong@rivai.ai" To: "Robin Dapp" , gcc-patches , palmer , kito.cheng , jeffreyalaw Cc: "Robin Dapp" Subject: Re: [PATCH] RISC-V: Vectorized str(n)cmp and strlen. References: <2cf2fa3f-541b-4c39-8689-161c7a047f7a@gmail.com> X-Priority: 3 X-GUID: 36C32C26-368E-47BE-B234-03CCFA8542E7 X-Has-Attach: no X-Mailer: Foxmail 7.2.16.188[cn] Mime-Version: 1.0 Message-ID: Content-Type: multipart/alternative; boundary="----=_001_NextPart476020821346_=----" X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:rivai.ai:qybglogicsvrgz:qybglogicsvrgz7a-one-0 X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00,GIT_PATCH_0,HTML_MESSAGE,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. ------=_001_NextPart476020821346_=---- Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 QWguICBJIHNlZToNCg0KLS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5t ZAorKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2Lm1kCkBAIC0yMzM2LDkg KzIzMzYsNyBAQCAoZGVmaW5lX2V4cGFuZCAiY3B5bWVtPG1vZGU+IgogCSAg ICAgICh1c2UgKG1hdGNoX29wZXJhbmQ6U0kgMyAiY29uc3RfaW50X29wZXJh bmQiKSldKV0KICAgIiIKIHsKLSAgaWYgKHJpc2N2X3ZlY3Rvcjo6ZXhwYW5k X2Jsb2NrX21vdmUgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFu ZHNbMl0pKQotICAgIERPTkU7Ci0gIGVsc2UgaWYgKHJpc2N2X2V4cGFuZF9i bG9ja19tb3ZlIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRz WzJdKSkKKyAgaWYgKHJpc2N2X2V4cGFuZF9ibG9ja19tb3ZlIChvcGVyYW5k c1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSkKICAgICBET05FOw0K DQpJIHRoaW5rIGl0IHNob3VsZCBiZSBhbiBORkMgcGF0Y2ggaW4gYW5vdGhl ciBzZXBhcmF0ZSBwYXRjaC4NCg0KDQoNCmp1emhlLnpob25nQHJpdmFpLmFp DQogDQpGcm9tOiBSb2JpbiBEYXBwDQpEYXRlOiAyMDIzLTEyLTAxIDA2OjIy DQpUbzogZ2NjLXBhdGNoZXM7IHBhbG1lcjsgS2l0byBDaGVuZzsgamVmZnJl eWFsYXc7IGp1emhlLnpob25nQHJpdmFpLmFpDQpDQzogcmRhcHAuZ2NjDQpT dWJqZWN0OiBbUEFUQ0hdIFJJU0MtVjogVmVjdG9yaXplZCBzdHIobiljbXAg YW5kIHN0cmxlbi4NCkhpLA0KIA0KdGhpcyBhZGRzIHZlY3Rvcml6ZWQgaW1w bGVtZW50YXRpb25zIG9mIHN0cmNtcCBhbmQgc3RybmNtcCBhcyB3ZWxsIGFz DQpzdHJsZW4uICBzdHJsZW4gZmFsbHMgYmFjayB0byB0aGUgcHJldmlvdXNs eSBpbXBsZW1lbnRlZCByYXdtZW1jaHIuDQpBbHNvLCBpdCBmaXhlcyBhIHJh d21lbWNociBidWcgY2F1c2luZyBhIFNQRUMyMDE3IGV4ZWN1dGlvbiBmYWls dXJlOg0KV2Ugd291bGQgb25seSBldmVyIGluY3JlbWVudCB0aGUgc291cmNl IGFkZHJlc3MgYnkgMSByZWdhcmRsZXNzIG9mDQp0aGUgaW5wdXQgdHlwZS4N CiANClRoZSBwYXRjaCBhbHNvIGNoYW5nZXMgdGhlIHN0cmluZ29wLXN0cmF0 ZWd5IGhhbmRsaW5nIHNsaWdodGx5Og0KYXV0byBpcyBub3cgYW4gYWdncmVn YXRlIChpbmNsdWRpbmcgdmVjdG9yIGFuZCBzY2FsYXIsDQpwb3NzaWJseSBt b3JlIGluIHRoZSBmdXR1cmUpIGFuZCBleHBhbnNpb24gZnVuY3Rpb25zIHRy eSBhbGwNCm1hdGNoaW5nIHN0cmF0ZWdpZXMgaW4gdGhlaXIgcHJlZmVycmVk IG9yZGVyLg0KIA0KQXMgYmVmb3JlLCBzdHIqIGV4cGFuc2lvbiBpcyBndWFy ZGVkIGJ5IC1taW5saW5lLXN0ciogYW5kIG5vdCBhY3RpdmUNCmJ5IGRlZmF1 bHQuICBUaGlzIG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlIGFzIEkgd291 bGQgcmF0aGVyIGhhdmUNCnRob3NlIG9uIGJ5IGRlZmF1bHQuICBBcyBvZiBu b3csIHRob3VnaCwgdGhlcmUgaXMgc3RpbGwgYSBsYXRlbnQgYnVnOg0KIA0K V2l0aCAtbWlubGluZS1zdHJsZW4gYW5kIC1taW5saW5lLXN0cmNtcCB3ZSBo YXZlIHNldmVyYWwgZXhlY3V0aW9uDQpmYWlsdXJlcyBpbiBnY2MuYy10b3J0 dXJlL2V4ZWN1dGUvYnVpbHRpbnMvLiAgRnJvbSBteSBpbml0aWFsIGFuYWx5 c2lzDQppdCBsb29rcyBsaWtlIHdlIGRvbid0IGluc2VydCBhIHZzZXR2bCBh dCB0aGUgcmlnaHQgc3BvdCAod2hpY2ggd291bGQNCmJlIHJpZ2h0IGFmdGVy IGEgc2V0am1wIGluIHRob3NlIGNhc2VzKS4gIFRoaXMgbGVhdmVzIHRoZSBp bml0aWFsDQp2bGU4ZmYgd2l0aG91dCBhIHByb3BlciB2dHlwZSBvciB2bCBj YXVzaW5nIGEgU0lHSUxMLg0KU3RpbGwsIEkgZmlndXJlZCBJJ2QgcmF0aGVy IHBvc3QgdGhlIHBhdGNoIGFzLWlzIHNvIHRoZSBidWcgY2FuIGJlDQpyZXBy b2R1Y2VkIHVwc3RyZWFtLg0KIA0KUmVnYXJkcw0KUm9iaW4NCiANCmdjYy9D aGFuZ2VMb2c6DQogDQpQUiB0YXJnZXQvMTEyMTA5DQogDQoqIGNvbmZpZy9y aXNjdi9yaXNjdi1vcHRzLmggKGVudW0gcmlzY3Zfc3RyaW5nb3Bfc3RyYXRl Z3lfZW51bSk6DQpSZW5hbWUuDQooZW51bSBzdHJpbmdvcF9zdHJhdGVneV9l bnVtKTogVG8gdGhpcy4NCiogY29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5o IChleHBhbmRfcmF3bWVtY2hyKTogQWRkIHN0cmxlbg0KcGFyYW0uDQooZXhw YW5kX3N0cmNtcCk6IERlZmluZS4NCiogY29uZmlnL3Jpc2N2L3Jpc2N2LXN0 cmluZy5jYyAocmlzY3ZfZXhwYW5kX3N0cmNtcCk6ICBBZGQNCnZlY3RvciB2 ZXJzaW9uLg0KKHJpc2N2X2V4cGFuZF9zdHJsZW4pOiBEaXR0by4NCihyaXNj dl9leHBhbmRfYmxvY2tfbW92ZV9zY2FsYXIpOiBIYW5kbGUgZXhpc3Rpbmcg c2NhbGFyIGV4cGFuc2lvbi4NCihyaXNjdl9leHBhbmRfYmxvY2tfbW92ZSk6 IEV4cGFuZCB0byBlaXRoZXIgdmVjdG9yIG9yIHNjYWxhcg0KdmVyc2lvbi4N CihleHBhbmRfYmxvY2tfbW92ZSk6IEFkZCBzdHJpbmdvcCBzdHJhdGVneS4N CihleHBhbmRfcmF3bWVtY2hyKTogSGFuZGxlIHN0cmxlbiBhbmQgZml4IGlu Y3JlbWVudCBidWcuDQooZXhwYW5kX3N0cmNtcCk6IE5ldyBleHBhbmRlci4N CiogY29uZmlnL3Jpc2N2L3Jpc2N2Lm1kOiBBZGQgdmVjdG9yLg0KKiBjb25m aWcvcmlzY3YvcmlzY3Yub3B0OiBEaXR0by4NCiANCmdjYy90ZXN0c3VpdGUv Q2hhbmdlTG9nOg0KIA0KKiBnY2MudGFyZ2V0L3Jpc2N2L3J2di9hdXRvdmVj L2J1aWx0aW4vc3RyY21wLXJ1bi5jOiBOZXcgdGVzdC4NCiogZ2NjLnRhcmdl dC9yaXNjdi9ydnYvYXV0b3ZlYy9idWlsdGluL3N0cmNtcC5jOiBOZXcgdGVz dC4NCiogZ2NjLnRhcmdldC9yaXNjdi9ydnYvYXV0b3ZlYy9idWlsdGluL3N0 cmxlbi1ydW4uYzogTmV3IHRlc3QuDQoqIGdjYy50YXJnZXQvcmlzY3YvcnZ2 L2F1dG92ZWMvYnVpbHRpbi9zdHJsZW4uYzogTmV3IHRlc3QuDQotLS0NCmdj Yy9jb25maWcvcmlzY3YvcmlzY3Ytb3B0cy5oICAgICAgICAgICAgICAgICB8 ICAyMCArLQ0KZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1wcm90b3MuaCAgICAg ICAgICAgICAgIHwgICA0ICstDQpnY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXN0 cmluZy5jYyAgICAgICAgICAgICAgfCAyODcgKysrKysrKysrKysrKysrLS0t DQpnY2MvY29uZmlnL3Jpc2N2L3Jpc2N2Lm1kICAgICAgICAgICAgICAgICAg ICAgfCAgMTggKy0NCmdjYy9jb25maWcvcmlzY3YvcmlzY3Yub3B0ICAgICAg ICAgICAgICAgICAgICB8ICAxOCArLQ0KLi4uL3Jpc2N2L3J2di9hdXRvdmVj L2J1aWx0aW4vc3RyY21wLXJ1bi5jICAgIHwgIDMyICsrDQouLi4vcmlzY3Yv cnZ2L2F1dG92ZWMvYnVpbHRpbi9zdHJjbXAuYyAgICAgICAgfCAgMTMgKw0K Li4uL3Jpc2N2L3J2di9hdXRvdmVjL2J1aWx0aW4vc3RybGVuLXJ1bi5jICAg IHwgIDM3ICsrKw0KLi4uL3Jpc2N2L3J2di9hdXRvdmVjL2J1aWx0aW4vc3Ry bGVuLmMgICAgICAgIHwgIDEyICsNCjkgZmlsZXMgY2hhbmdlZCwgMzYzIGlu c2VydGlvbnMoKyksIDc4IGRlbGV0aW9ucygtKQ0KY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYXV0b3Zl Yy9idWlsdGluL3N0cmNtcC1ydW4uYw0KY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYXV0b3ZlYy9idWls dGluL3N0cmNtcC5jDQpjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9hdXRvdmVjL2J1aWx0aW4vc3RybGVu LXJ1bi5jDQpjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L3Jpc2N2L3J2di9hdXRvdmVjL2J1aWx0aW4vc3RybGVuLmMNCiAN CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LW9wdHMuaCBi L2djYy9jb25maWcvcmlzY3YvcmlzY3Ytb3B0cy5oDQppbmRleCBlNmU1NWFk NzA3MS4uMzE1ZjZkZGIyMzkgMTAwNjQ0DQotLS0gYS9nY2MvY29uZmlnL3Jp c2N2L3Jpc2N2LW9wdHMuaA0KKysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNj di1vcHRzLmgNCkBAIC0xMDMsMTYgKzEwMywxNiBAQCBlbnVtIHJpc2N2X2Vu dGl0eQ0KICAgTUFYX1JJU0NWX0VOVElUSUVTDQp9Ow0KLS8qIFJJU0MtViBz dHJpbmdvcCBzdHJhdGVneS4gKi8NCi1lbnVtIHJpc2N2X3N0cmluZ29wX3N0 cmF0ZWd5X2VudW0gew0KLSAgLyogVXNlIHNjYWxhciBvciB2ZWN0b3IgaW5z dHJ1Y3Rpb25zLiAqLw0KLSAgVVNFX0FVVE8sDQotICAvKiBBbHdheXMgdXNl IGEgbGlicmFyeSBjYWxsLiAqLw0KLSAgVVNFX0xJQkNBTEwsDQotICAvKiBP bmx5IHVzZSBzY2FsYXIgaW5zdHJ1Y3Rpb25zLiAqLw0KLSAgVVNFX1NDQUxB UiwNCi0gIC8qIE9ubHkgdXNlIHZlY3RvciBpbnN0cnVjdGlvbnMuICovDQot ICBVU0VfVkVDVE9SDQorLyogUklTQy1WIGJ1aWx0aW4gc3RyYXRlZ3kuICov DQorZW51bSBzdHJpbmdvcF9zdHJhdGVneV9lbnVtIHsNCisgIC8qIE5vIGV4 cGFuc2lvbi4gKi8NCisgIFNUUklOR09QX1NUUkFURUdZX0xJQkNBTEwgPSAx LA0KKyAgLyogVXNlIHNjYWxhciBleHBhbnNpb24gaWYgcG9zc2libGUuICov DQorICBTVFJJTkdPUF9TVFJBVEVHWV9TQ0FMQVIgPSAyLA0KKyAgLyogT25s eSB2ZWN0b3IgZXhwYW5zaW9uIGlmIHBvc3NpYmxlLiAqLw0KKyAgU1RSSU5H T1BfU1RSQVRFR1lfVkVDVE9SID0gNCwNCisgIC8qIFVzZSBhbnkuICovDQor ICBTVFJJTkdPUF9TVFJBVEVHWV9BVVRPID0gU1RSSU5HT1BfU1RSQVRFR1lf U0NBTEFSIHwgU1RSSU5HT1BfU1RSQVRFR1lfVkVDVE9SDQp9Ow0KI2RlZmlu ZSBUQVJHRVRfWklDT05EX0xJS0UgKFRBUkdFVF9aSUNPTkQgfHwgKFRBUkdF VF9YVkVOVEFOQUNPTkRPUFMgJiYgVEFSR0VUXzY0QklUKSkNCmRpZmYgLS1n aXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5oIGIvZ2NjL2Nv bmZpZy9yaXNjdi9yaXNjdi1wcm90b3MuaA0KaW5kZXggNjk1ZWUyNGFkNmYu LjUxMzU5MTU0ODQ2IDEwMDY0NA0KLS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9y aXNjdi1wcm90b3MuaA0KKysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1w cm90b3MuaA0KQEAgLTU1Nyw3ICs1NTcsOSBAQCB2b2lkIGV4cGFuZF9jb25k X3Vub3AgKHVuc2lnbmVkLCBydHggKik7DQp2b2lkIGV4cGFuZF9jb25kX2Jp bm9wICh1bnNpZ25lZCwgcnR4ICopOw0Kdm9pZCBleHBhbmRfY29uZF90ZXJu b3AgKHVuc2lnbmVkLCBydHggKik7DQp2b2lkIGV4cGFuZF9wb3Bjb3VudCAo cnR4ICopOw0KLXZvaWQgZXhwYW5kX3Jhd21lbWNociAobWFjaGluZV9tb2Rl LCBydHgsIHJ0eCwgcnR4KTsNCit2b2lkIGV4cGFuZF9yYXdtZW1jaHIgKG1h Y2hpbmVfbW9kZSwgcnR4LCBydHgsIHJ0eCwgYm9vbCA9IGZhbHNlKTsNCiti b29sIGV4cGFuZF9zdHJjbXAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwNCisgICAg IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsIGJvb2wpOw0Kdm9pZCBlbWl0X3Zl Y19leHRyYWN0IChydHgsIHJ0eCwgcG9seV9pbnQ2NCk7DQovKiBSb3VuZGlu ZyBtb2RlIGJpdGZpZWxkIGZvciBmaXhlZCBwb2ludCBWWFJNLiAgKi8NCmRp ZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXN0cmluZy5jYyBi L2djYy9jb25maWcvcmlzY3YvcmlzY3Ytc3RyaW5nLmNjDQppbmRleCA4MGUz YjU5ODFhZi4uY2UyNTk4MzFhNWMgMTAwNjQ0DQotLS0gYS9nY2MvY29uZmln L3Jpc2N2L3Jpc2N2LXN0cmluZy5jYw0KKysrIGIvZ2NjL2NvbmZpZy9yaXNj di9yaXNjdi1zdHJpbmcuY2MNCkBAIC01MTEsNyArNTExLDE2IEBAIHJpc2N2 X2V4cGFuZF9zdHJjbXAgKHJ0eCByZXN1bHQsIHJ0eCBzcmMxLCBydHggc3Jj MiwNCiAgICAgcmV0dXJuIGZhbHNlOw0KICAgYWxpZ25tZW50ID0gVUlOVFZB TCAoYWxpZ25fcnR4KTsNCi0gIGlmIChUQVJHRVRfWkJCIHx8IFRBUkdFVF9Y VEhFQURCQikNCisgIGlmIChUQVJHRVRfVkVDVE9SICYmIHN0cmluZ29wX3N0 cmF0ZWd5ICYgU1RSSU5HT1BfU1RSQVRFR1lfVkVDVE9SKQ0KKyAgICB7DQor ICAgICAgYm9vbCBvayA9IHJpc2N2X3ZlY3Rvcjo6ZXhwYW5kX3N0cmNtcCAo cmVzdWx0LCBzcmMxLCBzcmMyLCBieXRlc19ydHgsDQorICAgICAgYWxpZ25t ZW50LCBuY29tcGFyZSk7DQorICAgICAgaWYgKG9rKQ0KKyByZXR1cm4gdHJ1 ZTsNCisgICAgfQ0KKw0KKyAgaWYgKChUQVJHRVRfWkJCIHx8IFRBUkdFVF9Y VEhFQURCQikNCisgICAgICAmJiBzdHJpbmdvcF9zdHJhdGVneSAmIFNUUklO R09QX1NUUkFURUdZX1NDQUxBUikNCiAgICAgew0KICAgICAgIHJldHVybiBy aXNjdl9leHBhbmRfc3RyY21wX3NjYWxhciAocmVzdWx0LCBzcmMxLCBzcmMy LCBuYnl0ZXMsIGFsaWdubWVudCwNCm5jb21wYXJlKTsNCkBAIC01ODgsOSAr NTk3LDE3IEBAIHJpc2N2X2V4cGFuZF9zdHJsZW5fc2NhbGFyIChydHggcmVz dWx0LCBydHggc3JjLCBydHggYWxpZ24pDQpib29sDQpyaXNjdl9leHBhbmRf c3RybGVuIChydHggcmVzdWx0LCBydHggc3JjLCBydHggc2VhcmNoX2NoYXIs IHJ0eCBhbGlnbikNCnsNCisgIGlmIChUQVJHRVRfVkVDVE9SICYmIChzdHJp bmdvcF9zdHJhdGVneSAmIFNUUklOR09QX1NUUkFURUdZX1ZFQ1RPUikpDQor ICAgIHsNCisgICAgICByaXNjdl92ZWN0b3I6OmV4cGFuZF9yYXdtZW1jaHIg KEVfUUltb2RlLCByZXN1bHQsIHNyYywgc2VhcmNoX2NoYXIsDQorICAgICAg IC8qIHN0cmxlbiAqLyB0cnVlKTsNCisgICAgICByZXR1cm4gdHJ1ZTsNCisg ICAgfQ0KKw0KICAgZ2NjX2Fzc2VydCAoc2VhcmNoX2NoYXIgPT0gY29uc3Qw X3J0eCk7DQotICBpZiAoVEFSR0VUX1pCQiB8fCBUQVJHRVRfWFRIRUFEQkIp DQorICBpZiAoKFRBUkdFVF9aQkIgfHwgVEFSR0VUX1hUSEVBREJCKQ0KKyAg ICAgICYmIHN0cmluZ29wX3N0cmF0ZWd5ICYgU1RSSU5HT1BfU1RSQVRFR1lf U0NBTEFSKQ0KICAgICByZXR1cm4gcmlzY3ZfZXhwYW5kX3N0cmxlbl9zY2Fs YXIgKHJlc3VsdCwgc3JjLCBhbGlnbik7DQogICByZXR1cm4gZmFsc2U7DQpA QCAtNzA3LDUxICs3MjQsNjggQEAgcmlzY3ZfYmxvY2tfbW92ZV9sb29wIChy dHggZGVzdCwgcnR4IHNyYywgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBsZW5n dGgsDQovKiBFeHBhbmQgYSBjcHltZW1zaSBpbnN0cnVjdGlvbiwgd2hpY2gg Y29waWVzIExFTkdUSCBieXRlcyBmcm9tDQogICAgbWVtb3J5IHJlZmVyZW5j ZSBTUkMgdG8gbWVtb3J5IHJlZmVyZW5jZSBERVNULiAgKi8NCi1ib29sDQot cmlzY3ZfZXhwYW5kX2Jsb2NrX21vdmUgKHJ0eCBkZXN0LCBydHggc3JjLCBy dHggbGVuZ3RoKQ0KK3N0YXRpYyBib29sDQorcmlzY3ZfZXhwYW5kX2Jsb2Nr X21vdmVfc2NhbGFyIChydHggZGVzdCwgcnR4IHNyYywgcnR4IGxlbmd0aCkN CnsNCi0gIGlmIChyaXNjdl9tZW1jcHlfc3RyYXRlZ3kgPT0gVVNFX0xJQkNB TEwNCi0gICAgICB8fCByaXNjdl9tZW1jcHlfc3RyYXRlZ3kgPT0gVVNFX1ZF Q1RPUikNCisgIGlmICghQ09OU1RfSU5UX1AgKGxlbmd0aCkpDQogICAgIHJl dHVybiBmYWxzZTsNCi0gIGlmIChDT05TVF9JTlRfUCAobGVuZ3RoKSkNCi0g ICAgew0KLSAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgaHdpX2xlbmd0 aCA9IFVJTlRWQUwgKGxlbmd0aCk7DQotICAgICAgdW5zaWduZWQgSE9TVF9X SURFX0lOVCBmYWN0b3IsIGFsaWduOw0KKyAgdW5zaWduZWQgSE9TVF9XSURF X0lOVCBod2lfbGVuZ3RoID0gVUlOVFZBTCAobGVuZ3RoKTsNCisgIHVuc2ln bmVkIEhPU1RfV0lERV9JTlQgZmFjdG9yLCBhbGlnbjsNCi0gICAgICBhbGln biA9IE1JTiAoTUlOIChNRU1fQUxJR04gKHNyYyksIE1FTV9BTElHTiAoZGVz dCkpLCBCSVRTX1BFUl9XT1JEKTsNCi0gICAgICBmYWN0b3IgPSBCSVRTX1BF Ul9XT1JEIC8gYWxpZ247DQorICBhbGlnbiA9IE1JTiAoTUlOIChNRU1fQUxJ R04gKHNyYyksIE1FTV9BTElHTiAoZGVzdCkpLCBCSVRTX1BFUl9XT1JEKTsN CisgIGZhY3RvciA9IEJJVFNfUEVSX1dPUkQgLyBhbGlnbjsNCi0gICAgICBp ZiAob3B0aW1pemVfZnVuY3Rpb25fZm9yX3NpemVfcCAoY2Z1bikNCi0gICAm JiBod2lfbGVuZ3RoICogZmFjdG9yICogVU5JVFNfUEVSX1dPUkQgPiBNT1ZF X1JBVElPIChmYWxzZSkpDQotIHJldHVybiBmYWxzZTsNCisgIGlmIChvcHRp bWl6ZV9mdW5jdGlvbl9mb3Jfc2l6ZV9wIChjZnVuKQ0KKyAgICAgICYmIGh3 aV9sZW5ndGggKiBmYWN0b3IgKiBVTklUU19QRVJfV09SRCA+IE1PVkVfUkFU SU8gKGZhbHNlKSkNCisgICAgcmV0dXJuIGZhbHNlOw0KLSAgICAgIGlmICho d2lfbGVuZ3RoIDw9IChSSVNDVl9NQVhfTU9WRV9CWVRFU19TVFJBSUdIVCAv IGZhY3RvcikpDQorICBpZiAoaHdpX2xlbmd0aCA8PSAoUklTQ1ZfTUFYX01P VkVfQllURVNfU1RSQUlHSFQgLyBmYWN0b3IpKQ0KKyAgICB7DQorICAgICAg cmlzY3ZfYmxvY2tfbW92ZV9zdHJhaWdodCAoZGVzdCwgc3JjLCBJTlRWQUwg KGxlbmd0aCkpOw0KKyAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorICBl bHNlIGlmIChvcHRpbWl6ZSAmJiBhbGlnbiA+PSBCSVRTX1BFUl9XT1JEKQ0K KyAgICB7DQorICAgICAgdW5zaWduZWQgbWluX2l0ZXJfd29yZHMNCisgPSBS SVNDVl9NQVhfTU9WRV9CWVRFU19QRVJfTE9PUF9JVEVSIC8gVU5JVFNfUEVS X1dPUkQ7DQorICAgICAgdW5zaWduZWQgaXRlcl93b3JkcyA9IG1pbl9pdGVy X3dvcmRzOw0KKyAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgYnl0ZXMg PSBod2lfbGVuZ3RoOw0KKyAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQg d29yZHMgPSBieXRlcyAvIFVOSVRTX1BFUl9XT1JEOw0KKw0KKyAgICAgIC8q IExlbmd0aGVuIHRoZSBsb29wIGJvZHkgaWYgaXQgc2hvcnRlbnMgdGhlIHRh aWwuICAqLw0KKyAgICAgIGZvciAodW5zaWduZWQgaSA9IG1pbl9pdGVyX3dv cmRzOyBpIDwgbWluX2l0ZXJfd29yZHMgKiAyIC0gMTsgaSsrKQ0Kew0KLSAg IHJpc2N2X2Jsb2NrX21vdmVfc3RyYWlnaHQgKGRlc3QsIHNyYywgSU5UVkFM IChsZW5ndGgpKTsNCi0gICByZXR1cm4gdHJ1ZTsNCisgICB1bnNpZ25lZCBj dXJfY29zdCA9IGl0ZXJfd29yZHMgKyB3b3JkcyAlIGl0ZXJfd29yZHM7DQor ICAgdW5zaWduZWQgbmV3X2Nvc3QgPSBpICsgd29yZHMgJSBpOw0KKyAgIGlm IChuZXdfY29zdCA8PSBjdXJfY29zdCkNCisgICAgIGl0ZXJfd29yZHMgPSBp Ow0KfQ0KLSAgICAgIGVsc2UgaWYgKG9wdGltaXplICYmIGFsaWduID49IEJJ VFNfUEVSX1dPUkQpDQotIHsNCi0gICB1bnNpZ25lZCBtaW5faXRlcl93b3Jk cw0KLSAgICAgPSBSSVNDVl9NQVhfTU9WRV9CWVRFU19QRVJfTE9PUF9JVEVS IC8gVU5JVFNfUEVSX1dPUkQ7DQotICAgdW5zaWduZWQgaXRlcl93b3JkcyA9 IG1pbl9pdGVyX3dvcmRzOw0KLSAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQg Ynl0ZXMgPSBod2lfbGVuZ3RoOw0KLSAgIHVuc2lnbmVkIEhPU1RfV0lERV9J TlQgd29yZHMgPSBieXRlcyAvIFVOSVRTX1BFUl9XT1JEOw0KLQ0KLSAgIC8q IExlbmd0aGVuIHRoZSBsb29wIGJvZHkgaWYgaXQgc2hvcnRlbnMgdGhlIHRh aWwuICAqLw0KLSAgIGZvciAodW5zaWduZWQgaSA9IG1pbl9pdGVyX3dvcmRz OyBpIDwgbWluX2l0ZXJfd29yZHMgKiAyIC0gMTsgaSsrKQ0KLSAgICAgew0K LSAgICAgICB1bnNpZ25lZCBjdXJfY29zdCA9IGl0ZXJfd29yZHMgKyB3b3Jk cyAlIGl0ZXJfd29yZHM7DQotICAgICAgIHVuc2lnbmVkIG5ld19jb3N0ID0g aSArIHdvcmRzICUgaTsNCi0gICAgICAgaWYgKG5ld19jb3N0IDw9IGN1cl9j b3N0KQ0KLSBpdGVyX3dvcmRzID0gaTsNCi0gICAgIH0NCi0gICByaXNjdl9i bG9ja19tb3ZlX2xvb3AgKGRlc3QsIHNyYywgYnl0ZXMsIGl0ZXJfd29yZHMg KiBVTklUU19QRVJfV09SRCk7DQotICAgcmV0dXJuIHRydWU7DQotIH0NCisg ICAgICByaXNjdl9ibG9ja19tb3ZlX2xvb3AgKGRlc3QsIHNyYywgYnl0ZXMs IGl0ZXJfd29yZHMgKiBVTklUU19QRVJfV09SRCk7DQorICAgICAgcmV0dXJu IHRydWU7DQorICAgIH0NCisNCisgIHJldHVybiBmYWxzZTsNCit9DQorDQor LyogVGhpcyBmdW5jdGlvbiBkZWxlZ2F0ZXMgYmxvY2stbW92ZSBleHBhbnNp b24gdG8gZWl0aGVyIHRoZSB2ZWN0b3INCisgICBpbXBsZW1lbnRhdGlvbiBv ciB0aGUgc2NhbGFyIG9uZS4gIFJldHVybiBUUlVFIGlmIHN1Y2Nlc3NmdWwg b3IgRkFMU0UNCisgICBvdGhlcndpc2UuICAqLw0KKw0KK2Jvb2wNCityaXNj dl9leHBhbmRfYmxvY2tfbW92ZSAocnR4IGRlc3QsIHJ0eCBzcmMsIHJ0eCBs ZW5ndGgpDQorew0KKyAgaWYgKFRBUkdFVF9WRUNUT1IgJiYgc3RyaW5nb3Bf c3RyYXRlZ3kgJiBTVFJJTkdPUF9TVFJBVEVHWV9WRUNUT1IpDQorICAgIHsN CisgICAgICBib29sIG9rID0gcmlzY3ZfdmVjdG9yOjpleHBhbmRfYmxvY2tf bW92ZSAoZGVzdCwgc3JjLCBsZW5ndGgpOw0KKyAgICAgIGlmIChvaykNCisg cmV0dXJuIHRydWU7DQogICAgIH0NCisNCisgIGlmIChzdHJpbmdvcF9zdHJh dGVneSAmIFNUUklOR09QX1NUUkFURUdZX1NDQUxBUikNCisgICAgcmV0dXJu IHJpc2N2X2V4cGFuZF9ibG9ja19tb3ZlX3NjYWxhciAoZGVzdCwgc3JjLCBs ZW5ndGgpOw0KKw0KICAgcmV0dXJuIGZhbHNlOw0KfQ0KQEAgLTc3Nyw5ICs4 MTEsNiBAQCBleHBhbmRfYmxvY2tfbW92ZSAocnR4IGRzdF9pbiwgcnR4IHNy Y19pbiwgcnR4IGxlbmd0aF9pbikNCmJuZXogYTIsIGxvb3AgICAgICAgICAg ICAgICAgICAgIyBBbnkgbW9yZT8NCnJldCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBSZXR1cm4NCiAgICovDQotICBpZiAoIVRBUkdFVF9WRUNU T1IgfHwgcmlzY3ZfbWVtY3B5X3N0cmF0ZWd5ID09IFVTRV9MSUJDQUxMDQot ICAgICAgfHwgcmlzY3ZfbWVtY3B5X3N0cmF0ZWd5ID09IFVTRV9TQ0FMQVIp DQotICAgIHJldHVybiBmYWxzZTsNCiAgIEhPU1RfV0lERV9JTlQgcG90ZW50 aWFsX2V3DQogICAgID0gKE1JTiAoTUlOIChNRU1fQUxJR04gKHNyY19pbiks IE1FTV9BTElHTiAoZHN0X2luKSksIEJJVFNfUEVSX1dPUkQpDQogICAgICAg IC8gQklUU19QRVJfVU5JVCk7DQpAQCAtOTY4LDcgKzk5OSw4IEBAIGV4cGFu ZF9ibG9ja19tb3ZlIChydHggZHN0X2luLCBydHggc3JjX2luLCBydHggbGVu Z3RoX2luKQ0KICAgIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4gICovDQp2b2lk DQotZXhwYW5kX3Jhd21lbWNociAobWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBk c3QsIHJ0eCBzcmMsIHJ0eCBwYXQpDQorZXhwYW5kX3Jhd21lbWNociAobWFj aGluZV9tb2RlIG1vZGUsIHJ0eCBkc3QsIHJ0eCBzcmMsIHJ0eCBwYXQsDQor ICAgYm9vbCBzdHJsZW4pDQp7DQogICAvKg0KICAgICByYXdtZW1jaHI6DQpA QCAtMTAwMSw2ICsxMDMzLDggQEAgZXhwYW5kX3Jhd21lbWNociAobWFjaGlu ZV9tb2RlIG1vZGUsIHJ0eCBkc3QsIHJ0eCBzcmMsIHJ0eCBwYXQpDQogICBt YWNoaW5lX21vZGUgbWFza19tb2RlID0gcmlzY3ZfdmVjdG9yOjpnZXRfbWFz a19tb2RlICh2bW9kZSk7DQogICBydHggY250ID0gZ2VuX3JlZ19ydHggKFBt b2RlKTsNCisgIGVtaXRfbW92ZV9pbnNuIChjbnQsIENPTlNUMF9SVFggKFBt b2RlKSk7DQorDQogICBydHggZW5kID0gZ2VuX3JlZ19ydHggKFBtb2RlKTsN CiAgIHJ0eCB2ZWMgPSBnZW5fcmVnX3J0eCAodm1vZGUpOw0KICAgcnR4IG1h c2sgPSBnZW5fcmVnX3J0eCAobWFza19tb2RlKTsNCkBAIC0xMDExLDEyICsx MDQ1LDE4IEBAIGV4cGFuZF9yYXdtZW1jaHIgKG1hY2hpbmVfbW9kZSBtb2Rl LCBydHggZHN0LCBydHggc3JjLCBydHggcGF0KQ0KICAgdW5zaWduZWQgaW50 IHNoaWZ0ID0gZXhhY3RfbG9nMiAoR0VUX01PREVfU0laRSAobW9kZSkudG9f Y29uc3RhbnQgKCkpOw0KICAgcnR4IHNyY19hZGRyID0gY29weV9hZGRyX3Rv X3JlZyAoWEVYUCAoc3JjLCAwKSk7DQorICBydHggc3RhcnRfYWRkciA9IGNv cHlfYWRkcl90b19yZWcgKFhFWFAgKHNyYywgMCkpOw0KICAgcnR4IGxvb3Ag PSBnZW5fbGFiZWxfcnR4ICgpOw0KICAgZW1pdF9sYWJlbCAobG9vcCk7DQog ICBydHggdnNyYyA9IGNoYW5nZV9hZGRyZXNzIChzcmMsIHZtb2RlLCBzcmNf YWRkcik7DQorICAvKiBCdW1wIHRoZSBwb2ludGVyLiAgKi8NCisgIHJ0eCBz dGVwID0gZ2VuX3JlZ19ydHggKFBtb2RlKTsNCisgIGVtaXRfaW5zbiAoZ2Vu X3J0eF9TRVQgKHN0ZXAsIGdlbl9ydHhfQVNISUZUIChQbW9kZSwgY250LCBH RU5fSU5UIChzaGlmdCkpKSk7DQorICBlbWl0X2luc24gKGdlbl9ydHhfU0VU IChzcmNfYWRkciwgZ2VuX3J0eF9QTFVTIChQbW9kZSwgc3JjX2FkZHIsIHN0 ZXApKSk7DQorDQogICAvKiBFbWl0IGEgZmlyc3QtZmF1bHQgbG9hZC4gICov DQogICBydHggdmxvcHNbXSA9IHt2ZWMsIHZzcmN9Ow0KICAgZW1pdF92bG1h eF9pbnNuIChjb2RlX2Zvcl9wcmVkX2ZhdWx0X2xvYWQgKHZtb2RlKSwNCkBA IC0xMDM5LDE5ICsxMDc5LDE2NiBAQCBleHBhbmRfcmF3bWVtY2hyIChtYWNo aW5lX21vZGUgbW9kZSwgcnR4IGRzdCwgcnR4IHNyYywgcnR4IHBhdCkNCiAg IGVtaXRfbm9udmxtYXhfaW5zbiAoY29kZV9mb3JfcHJlZF9mZnMgKG1hc2tf bW9kZSwgUG1vZGUpLA0KICAgICAgcmlzY3ZfdmVjdG9yOjpDUE9QX09QLCB2 Zm9wcywgY250KTsNCi0gIC8qIEJ1bXAgdGhlIHBvaW50ZXIuICAqLw0KLSAg ZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAoc3JjX2FkZHIsIGdlbl9ydHhfUExV UyAoUG1vZGUsIHNyY19hZGRyLCBjbnQpKSk7DQotDQogICAvKiBFbWl0IHRo ZSBsb29wIGNvbmRpdGlvbi4gICovDQogICBydHggdGVzdCA9IGdlbl9ydHhf TFQgKFZPSURtb2RlLCBlbmQsIGNvbnN0MF9ydHgpOw0KICAgZW1pdF9qdW1w X2luc24gKGdlbl9jYnJhbmNoNCAoUG1vZGUsIHRlc3QsIGVuZCwgY29uc3Qw X3J0eCwgbG9vcCkpOw0KLSAgLyogIFdlIG92ZXJyYW4gYnkgQ05ULCBzdWJ0 cmFjdCBpdC4gICovDQotICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChzcmNf YWRkciwgZ2VuX3J0eF9NSU5VUyAoUG1vZGUsIHNyY19hZGRyLCBjbnQpKSk7 DQotDQotICAvKiAgV2UgZm91bmQgc29tZXRoaW5nIGF0IFNSQyArIEVORCAq IFsxLDIsNCw4XS4gICovDQotICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChl bmQsIGdlbl9ydHhfQVNISUZUIChQbW9kZSwgZW5kLCBHRU5fSU5UIChzaGlm dCkpKSk7DQotICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChkc3QsIGdlbl9y dHhfUExVUyAoUG1vZGUsIHNyY19hZGRyLCBlbmQpKSk7DQorICBpZiAoc3Ry bGVuKQ0KKyAgICB7DQorICAgICAgLyogRm9yIHN0cmxlbiwgcmV0dXJuIHRo ZSBsZW5ndGguICAqLw0KKyAgICAgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQg KGRzdCwgZ2VuX3J0eF9QTFVTIChQbW9kZSwgc3JjX2FkZHIsIGVuZCkpKTsN CisgICAgICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChkc3QsIGdlbl9ydHhf TUlOVVMgKFBtb2RlLCBkc3QsIHN0YXJ0X2FkZHIpKSk7DQorICAgIH0NCisg IGVsc2UNCisgICAgew0KKyAgICAgIC8qICBGb3IgcmF3bWVtY2hyLCByZXR1 cm4gdGhlIHBvc2l0aW9uIGF0IFNSQyArIEVORCAqIFsxLDIsNCw4XS4gICov DQorICAgICAgZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAoZW5kLCBnZW5fcnR4 X0FTSElGVCAoUG1vZGUsIGVuZCwgR0VOX0lOVCAoc2hpZnQpKSkpOw0KKyAg ICAgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKGRzdCwgZ2VuX3J0eF9QTFVT IChQbW9kZSwgc3JjX2FkZHIsIGVuZCkpKTsNCisgICAgfQ0KfQ0KKy8qIElt cGxlbWVudCBjbXBzdHI8bW9kZT4gdXNpbmcgdmVjdG9yIGluc3RydWN0aW9u cy4gICovDQorDQorYm9vbA0KK2V4cGFuZF9zdHJjbXAgKHJ0eCByZXN1bHQs IHJ0eCBzcmMxLCBydHggc3JjMiwgcnR4IG5ieXRlcywNCisgICAgICAgIHVu c2lnbmVkIEhPU1RfV0lERV9JTlQsIGJvb2wpDQorew0KKyAgZ2NjX2Fzc2Vy dCAoVEFSR0VUX1ZFQ1RPUik7DQorDQorICAvKiBXZSBkb24ndCBzdXBwb3J0 IGJpZyBlbmRpYW4uICAqLw0KKyAgaWYgKEJZVEVTX0JJR19FTkRJQU4pDQor ICAgIHJldHVybiBmYWxzZTsNCisNCisgIGJvb2wgd2l0aF9sZW5ndGggPSBu Ynl0ZXMgIT0gTlVMTF9SVFg7DQorDQorICBpZiAod2l0aF9sZW5ndGgNCisg ICAgICAmJiAoIVJFR19QIChuYnl0ZXMpICYmICFTVUJSRUdfUCAobmJ5dGVz KSAmJiAhQ09OU1RfSU5UX1AgKG5ieXRlcykpKQ0KKyAgICByZXR1cm4gZmFs c2U7DQorDQorICBpZiAod2l0aF9sZW5ndGggJiYgQ09OU1RfSU5UX1AgKG5i eXRlcykpDQorICAgIG5ieXRlcyA9IGZvcmNlX3JlZyAoUG1vZGUsIG5ieXRl cyk7DQorDQorICBtYWNoaW5lX21vZGUgbW9kZSA9IEVfUUltb2RlOw0KKyAg dW5zaWduZWQgaW50IGlzaXplID0gR0VUX01PREVfU0laRSAobW9kZSkudG9f Y29uc3RhbnQgKCk7DQorICBpbnQgbG11bCA9IFRBUkdFVF9NQVhfTE1VTDsN CisgIHBvbHlfaW50NjQgbnVuaXRzID0gZXhhY3RfZGl2IChCWVRFU19QRVJf UklTQ1ZfVkVDVE9SICogbG11bCwgaXNpemUpOw0KKw0KKyAgbWFjaGluZV9t b2RlIHZtb2RlOw0KKyAgaWYgKCFyaXNjdl92ZWN0b3I6OmdldF92ZWN0b3Jf bW9kZSAoR0VUX01PREVfSU5ORVIgKG1vZGUpLA0KKyAgICAgICBudW5pdHMp LmV4aXN0cyAoJnZtb2RlKSkNCisgICAgZ2NjX3VucmVhY2hhYmxlICgpOw0K Kw0KKyAgbWFjaGluZV9tb2RlIG1hc2tfbW9kZSA9IHJpc2N2X3ZlY3Rvcjo6 Z2V0X21hc2tfbW9kZSAodm1vZGUpOw0KKw0KKyAgLyogUHJlcGFyZSBhZGRy ZXNzZXMuICAqLw0KKyAgcnR4IHNyY19hZGRyMSA9IGNvcHlfYWRkcl90b19y ZWcgKFhFWFAgKHNyYzEsIDApKTsNCisgIHJ0eCB2c3JjMSA9IGNoYW5nZV9h ZGRyZXNzIChzcmMxLCB2bW9kZSwgc3JjX2FkZHIxKTsNCisNCisgIHJ0eCBz cmNfYWRkcjIgPSBjb3B5X2FkZHJfdG9fcmVnIChYRVhQIChzcmMyLCAwKSk7 DQorICBydHggdnNyYzIgPSBjaGFuZ2VfYWRkcmVzcyAoc3JjMiwgdm1vZGUs IHNyY19hZGRyMik7DQorDQorICAvKiBTZXQgaW5pdGlhbCBwb2ludGVyIGJ1 bXAgdG8gMC4gICovDQorICBydHggY250ID0gZ2VuX3JlZ19ydHggKFBtb2Rl KTsNCisgIGVtaXRfbW92ZV9pbnNuIChjbnQsIENPTlNUMF9SVFggKFBtb2Rl KSk7DQorDQorICBydHggc3ViID0gZ2VuX3JlZ19ydHggKFBtb2RlKTsNCisg IGVtaXRfbW92ZV9pbnNuIChzdWIsIENPTlNUMF9SVFggKFBtb2RlKSk7DQor DQorICAvKiBDcmVhdGUgc291cmNlIHZlY3RvcnMuICAqLw0KKyAgcnR4IHZl YzEgPSBnZW5fcmVnX3J0eCAodm1vZGUpOw0KKyAgcnR4IHZlYzIgPSBnZW5f cmVnX3J0eCAodm1vZGUpOw0KKw0KKyAgcnR4IGRvbmUgPSBnZW5fbGFiZWxf cnR4ICgpOw0KKyAgcnR4IGxvb3AgPSBnZW5fbGFiZWxfcnR4ICgpOw0KKyAg ZW1pdF9sYWJlbCAobG9vcCk7DQorDQorICAvKiBCdW1wIHRoZSBwb2ludGVy cy4gICovDQorICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChzcmNfYWRkcjEs IGdlbl9ydHhfUExVUyAoUG1vZGUsIHNyY19hZGRyMSwgY250KSkpOw0KKyAg ZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAoc3JjX2FkZHIyLCBnZW5fcnR4X1BM VVMgKFBtb2RlLCBzcmNfYWRkcjIsIGNudCkpKTsNCisNCisgIHJ0eCB2bG9w czFbXSA9IHt2ZWMxLCB2c3JjMX07DQorICBydHggdmxvcHMyW10gPSB7dmVj MiwgdnNyYzJ9Ow0KKw0KKyAgaWYgKCF3aXRoX2xlbmd0aCkNCisgICAgew0K KyAgICAgIGVtaXRfdmxtYXhfaW5zbiAoY29kZV9mb3JfcHJlZF9mYXVsdF9s b2FkICh2bW9kZSksDQorICAgICAgICByaXNjdl92ZWN0b3I6OlVOQVJZX09Q LCB2bG9wczEpOw0KKw0KKyAgICAgIGVtaXRfdmxtYXhfaW5zbiAoY29kZV9m b3JfcHJlZF9mYXVsdF9sb2FkICh2bW9kZSksDQorICAgICAgICByaXNjdl92 ZWN0b3I6OlVOQVJZX09QLCB2bG9wczIpOw0KKyAgICB9DQorICBlbHNlDQor ICAgIHsNCisgICAgICBuYnl0ZXMgPSBnZW5fbG93cGFydCAoUG1vZGUsIG5i eXRlcyk7DQorICAgICAgZW1pdF9ub252bG1heF9pbnNuIChjb2RlX2Zvcl9w cmVkX2ZhdWx0X2xvYWQgKHZtb2RlKSwNCisgICByaXNjdl92ZWN0b3I6OlVO QVJZX09QLCB2bG9wczEsIG5ieXRlcyk7DQorDQorICAgICAgZW1pdF9ub252 bG1heF9pbnNuIChjb2RlX2Zvcl9wcmVkX2ZhdWx0X2xvYWQgKHZtb2RlKSwN CisgICByaXNjdl92ZWN0b3I6OlVOQVJZX09QLCB2bG9wczIsIG5ieXRlcyk7 DQorICAgIH0NCisNCisgIC8qIFJlYWQgdGhlIHZsIGZvciB0aGUgbmV4dCBw b2ludGVyIGJ1bXAuICAqLw0KKyAgaWYgKFBtb2RlID09IFNJbW9kZSkNCisg ICAgZW1pdF9pbnNuIChnZW5fcmVhZF92bHNpIChjbnQpKTsNCisgIGVsc2UN CisgICAgZW1pdF9pbnNuIChnZW5fcmVhZF92bGRpX3plcm9fZXh0ZW5kIChj bnQpKTsNCisNCisgIGlmICh3aXRoX2xlbmd0aCkNCisgICAgew0KKyAgICAg IHJ0eCB0ZXN0X2RvbmUgPSBnZW5fcnR4X0VRIChWT0lEbW9kZSwgY250LCBj b25zdDBfcnR4KTsNCisgICAgICBlbWl0X2p1bXBfaW5zbiAoZ2VuX2NicmFu Y2g0IChQbW9kZSwgdGVzdF9kb25lLCBjbnQsIGNvbnN0MF9ydHgsIGRvbmUp KTsNCisgICAgICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChuYnl0ZXMsIGdl bl9ydHhfTUlOVVMgKFBtb2RlLCBuYnl0ZXMsIGNudCkpKTsNCisgICAgfQ0K Kw0KKyAgLyogTG9vayBmb3IgYSBcMCBpbiB0aGUgZmlyc3Qgc3RyaW5nLiAg Ki8NCisgIHJ0eCBtYXNrMCA9IGdlbl9yZWdfcnR4IChtYXNrX21vZGUpOw0K KyAgcnR4IGVxMCA9IGdlbl9ydHhfRVEgKG1hc2tfbW9kZSwNCisgZ2VuX2Nv bnN0X3ZlY19kdXBsaWNhdGUgKHZtb2RlLCBDT05TVDBfUlRYIChtb2RlKSks DQorIHZlYzEpOw0KKyAgcnR4IHZtc29wczFbXSA9IHttYXNrMCwgZXEwLCB2 ZWMxLCBDT05TVDBfUlRYIChtb2RlKX07DQorICBlbWl0X25vbnZsbWF4X2lu c24gKGNvZGVfZm9yX3ByZWRfZXFuZV9zY2FsYXIgKHZtb2RlKSwNCisgICAg ICAgcmlzY3ZfdmVjdG9yOjpDT01QQVJFX09QLCB2bXNvcHMxLCBjbnQpOw0K Kw0KKyAgLyogTG9vayBmb3IgdmVjMSAhPSB2ZWMyIChpbmNsdWRlcyB2ZWMy W2ldID09IDApLiAgKi8NCisgIHJ0eCBtYXNrbmUgPSBnZW5fcmVnX3J0eCAo bWFza19tb2RlKTsNCisgIHJ0eCBuZSA9IGdlbl9ydHhfTkUgKG1hc2tfbW9k ZSwgdmVjMSwgdmVjMik7DQorICBydHggdm1zb3BzW10gPSB7bWFza25lLCBu ZSwgdmVjMSwgdmVjMn07DQorICBlbWl0X25vbnZsbWF4X2luc24gKGNvZGVf Zm9yX3ByZWRfY21wICh2bW9kZSksDQorICAgICAgIHJpc2N2X3ZlY3Rvcjo6 Q09NUEFSRV9PUCwgdm1zb3BzLCBjbnQpOw0KKw0KKyAgLyogQ29tYmluZSBi b3RoIG1hc2tzIGludG8gb25lLiAgKi8NCisgIHJ0eCBtYXNrID0gZ2VuX3Jl Z19ydHggKG1hc2tfbW9kZSk7DQorICBydHggdm1vcm9wc1tdID0ge21hc2ss IG1hc2swLCBtYXNrbmV9Ow0KKyAgZW1pdF9ub252bG1heF9pbnNuIChjb2Rl X2Zvcl9wcmVkIChJT1IsIG1hc2tfbW9kZSksDQorICAgICAgIHJpc2N2X3Zl Y3Rvcjo6QklOQVJZX01BU0tfT1AsIHZtb3JvcHMsIGNudCk7DQorDQorICAv KiBGaW5kIHRoZSBmaXJzdCBiaXQgaW4gdGhlIG1hc2sgKHRoZSBmaXJzdCB1 bmVxdWFsIGVsZW1lbnQpLiAgKi8NCisgIHJ0eCBmb3VuZF9hdCA9IGdlbl9y ZWdfcnR4IChQbW9kZSk7DQorICBydHggdmZvcHNbXSA9IHtmb3VuZF9hdCwg bWFza307DQorICBlbWl0X25vbnZsbWF4X2luc24gKGNvZGVfZm9yX3ByZWRf ZmZzIChtYXNrX21vZGUsIFBtb2RlKSwNCisgICAgICAgcmlzY3ZfdmVjdG9y OjpDUE9QX09QLCB2Zm9wcywgY250KTsNCisNCisgIC8qIEVtaXQgdGhlIGxv b3AgY29uZGl0aW9uLiAgKi8NCisgIHJ0eCB0ZXN0ID0gZ2VuX3J0eF9MVCAo Vk9JRG1vZGUsIGZvdW5kX2F0LCBjb25zdDBfcnR4KTsNCisgIGVtaXRfanVt cF9pbnNuIChnZW5fY2JyYW5jaDQgKFBtb2RlLCB0ZXN0LCBmb3VuZF9hdCwg Y29uc3QwX3J0eCwgbG9vcCkpOw0KKw0KKyAgLyogV2FsayB1cCB0byB0aGUg ZGlmZmVyZW5jZSBwb2ludC4gICovDQorICBlbWl0X2luc24gKGdlbl9ydHhf U0VUIChzcmNfYWRkcjEsIGdlbl9ydHhfUExVUyAoUG1vZGUsIHNyY19hZGRy MSwgZm91bmRfYXQpKSk7DQorICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChz cmNfYWRkcjIsIGdlbl9ydHhfUExVUyAoUG1vZGUsIHNyY19hZGRyMiwgZm91 bmRfYXQpKSk7DQorDQorICAvKiBMb2FkIHRoZSByZXNwZWN0aXZlIGJ5dGUg YW5kIGNvbXB1dGUgdGhlIGRpZmZlcmVuY2UuICAqLw0KKyAgcnR4IGMxID0g Z2VuX3JlZ19ydHggKFBtb2RlKTsNCisgIHJ0eCBjMiA9IGdlbl9yZWdfcnR4 IChQbW9kZSk7DQorDQorICBkb19sb2FkX2Zyb21fYWRkciAobW9kZSwgYzEs IHNyY19hZGRyMSwgc3JjMSk7DQorICBkb19sb2FkX2Zyb21fYWRkciAobW9k ZSwgYzIsIHNyY19hZGRyMiwgc3JjMik7DQorDQorICBkb19zdWIzIChzdWIs IGMxLCBjMik7DQorDQorICBpZiAod2l0aF9sZW5ndGgpDQorICAgIGVtaXRf bGFiZWwgKGRvbmUpOw0KKw0KKyAgZW1pdF9pbnNuIChnZW5fbW92c2kgKHJl c3VsdCwgZ2VuX2xvd3BhcnQgKFNJbW9kZSwgc3ViKSkpOw0KKyAgcmV0dXJu IHRydWU7DQorfQ0KfQ0KZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3Yv cmlzY3YubWQgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2Lm1kDQppbmRleCA2 YmYyZGZkZjliNC4uY2UwOTJlOTI0NjUgMTAwNjQ0DQotLS0gYS9nY2MvY29u ZmlnL3Jpc2N2L3Jpc2N2Lm1kDQorKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jp c2N2Lm1kDQpAQCAtMjMzNiw5ICsyMzM2LDcgQEAgKGRlZmluZV9leHBhbmQg ImNweW1lbTxtb2RlPiINCiAgICAgICh1c2UgKG1hdGNoX29wZXJhbmQ6U0kg MyAiY29uc3RfaW50X29wZXJhbmQiKSldKV0NCiAgICIiDQp7DQotICBpZiAo cmlzY3ZfdmVjdG9yOjpleHBhbmRfYmxvY2tfbW92ZSAob3BlcmFuZHNbMF0s IG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpDQotICAgIERPTkU7DQotICBl bHNlIGlmIChyaXNjdl9leHBhbmRfYmxvY2tfbW92ZSAob3BlcmFuZHNbMF0s IG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpDQorICBpZiAocmlzY3ZfZXhw YW5kX2Jsb2NrX21vdmUgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3Bl cmFuZHNbMl0pKQ0KICAgICBET05FOw0KICAgZWxzZQ0KICAgICBGQUlMOw0K QEAgLTM3MDUsNyArMzcwMyw4IEBAIChkZWZpbmVfZXhwYW5kICJjbXBzdHJu c2kiDQogIChtYXRjaF9vcGVyYW5kOkJMSyAyKSkpDQogICAgICAodXNlICht YXRjaF9vcGVyYW5kOlNJIDMpKQ0KICAgICAgKHVzZSAobWF0Y2hfb3BlcmFu ZDpTSSA0KSldKV0NCi0gICJyaXNjdl9pbmxpbmVfc3RybmNtcCAmJiAhb3B0 aW1pemVfc2l6ZSAmJiAoVEFSR0VUX1pCQiB8fCBUQVJHRVRfWFRIRUFEQkIp Ig0KKyAgInJpc2N2X2lubGluZV9zdHJuY21wICYmICFvcHRpbWl6ZV9zaXpl DQorICAgICAgJiYgKFRBUkdFVF9aQkIgfHwgVEFSR0VUX1hUSEVBREJCIHx8 IFRBUkdFVF9WRUNUT1IpIg0Kew0KICAgaWYgKHJpc2N2X2V4cGFuZF9zdHJj bXAgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0sDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHNbM10sIG9wZXJh bmRzWzRdKSkNCkBAIC0zNzI1LDcgKzM3MjQsOCBAQCAoZGVmaW5lX2V4cGFu ZCAiY21wc3Ryc2kiDQogICAgICAoY29tcGFyZTpTSSAobWF0Y2hfb3BlcmFu ZDpCTEsgMSkNCiAgKG1hdGNoX29wZXJhbmQ6QkxLIDIpKSkNCiAgICAgICh1 c2UgKG1hdGNoX29wZXJhbmQ6U0kgMykpXSldDQotICAicmlzY3ZfaW5saW5l X3N0cmNtcCAmJiAhb3B0aW1pemVfc2l6ZSAmJiAoVEFSR0VUX1pCQiB8fCBU QVJHRVRfWFRIRUFEQkIpIg0KKyAgInJpc2N2X2lubGluZV9zdHJjbXAgJiYg IW9wdGltaXplX3NpemUNCisgICAgICAmJiAoVEFSR0VUX1pCQiB8fCBUQVJH RVRfWFRIRUFEQkIgfHwgVEFSR0VUX1ZFQ1RPUikiDQp7DQogICBpZiAocmlz Y3ZfZXhwYW5kX3N0cmNtcCAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBv cGVyYW5kc1syXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM X1JUWCwgb3BlcmFuZHNbM10pKQ0KQEAgLTM3NDYsMTQgKzM3NDYsMTYgQEAg KGRlZmluZV9leHBhbmQgInN0cmxlbjxtb2RlPiINCiAgICAgKG1hdGNoX29w ZXJhbmQ6U0kgMiAiY29uc3RfaW50X29wZXJhbmQiKQ0KICAgICAobWF0Y2hf b3BlcmFuZDpTSSAzICJjb25zdF9pbnRfb3BlcmFuZCIpXQ0KICBVTlNQRUNf U1RSTEVOKSldDQotICAicmlzY3ZfaW5saW5lX3N0cmxlbiAmJiAhb3B0aW1p emVfc2l6ZSAmJiAoVEFSR0VUX1pCQiB8fCBUQVJHRVRfWFRIRUFEQkIpIg0K KyAgInJpc2N2X2lubGluZV9zdHJsZW4gJiYgIW9wdGltaXplX3NpemUNCisg ICAgICYmIChUQVJHRVRfWkJCIHx8IFRBUkdFVF9YVEhFQURCQiB8fCBUQVJH RVRfVkVDVE9SKSINCnsNCiAgIHJ0eCBzZWFyY2hfY2hhciA9IG9wZXJhbmRz WzJdOw0KLSAgaWYgKHNlYXJjaF9jaGFyICE9IGNvbnN0MF9ydHgpDQorICBp ZiAoc2VhcmNoX2NoYXIgIT0gY29uc3QwX3J0eCAmJiAhVEFSR0VUX1ZFQ1RP UikNCiAgICAgRkFJTDsNCi0gIGlmIChyaXNjdl9leHBhbmRfc3RybGVuIChv cGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdLCBvcGVyYW5k c1szXSkpDQorICBlbHNlIGlmIChyaXNjdl9leHBhbmRfc3RybGVuIChvcGVy YW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdLA0KKyBvcGVyYW5k c1szXSkpDQogICAgIERPTkU7DQogICBlbHNlDQogICAgIEZBSUw7DQpkaWZm IC0tZ2l0IGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5vcHQgYi9nY2MvY29u ZmlnL3Jpc2N2L3Jpc2N2Lm9wdA0KaW5kZXggMGM2NTE3YmRjOGIuLjAwYjUy ZjVkYzc3IDEwMDY0NA0KLS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5v cHQNCisrKyBiL2djYy9jb25maWcvcmlzY3YvcmlzY3Yub3B0DQpAQCAtNTM2 LDIxICs1MzYsMjEgQEAgRW5hYmxlIHRoZSB1c2Ugb2YgdmVjdG9yIHJlZ2lz dGVycyBmb3IgZnVuY3Rpb24gYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWUu DQpUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBzd2l0Y2ggYW5kIG1heSBiZSBz dWJqZWN0IHRvIGNoYW5nZSBpbiB0aGUgZnV0dXJlLg0KRW51bQ0KLU5hbWUo cmlzY3Zfc3RyaW5nb3Bfc3RyYXRlZ3kpIFR5cGUoZW51bSByaXNjdl9zdHJp bmdvcF9zdHJhdGVneV9lbnVtKQ0KLVZhbGlkIGFyZ3VtZW50cyB0byAtbW1l bWNweS1zdHJhdGVneT06DQorTmFtZShzdHJpbmdvcF9zdHJhdGVneSkgVHlw ZShlbnVtIHN0cmluZ29wX3N0cmF0ZWd5X2VudW0pDQorVmFsaWQgYXJndW1l bnRzIHRvIC1tYnVpbGluLXN0cmF0ZWd5PToNCkVudW1WYWx1ZQ0KLUVudW0o cmlzY3Zfc3RyaW5nb3Bfc3RyYXRlZ3kpIFN0cmluZyhhdXRvKSBWYWx1ZShV U0VfQVVUTykNCitFbnVtKHN0cmluZ29wX3N0cmF0ZWd5KSBTdHJpbmcoYXV0 bykgVmFsdWUoU1RSSU5HT1BfU1RSQVRFR1lfQVVUTykNCkVudW1WYWx1ZQ0K LUVudW0ocmlzY3Zfc3RyaW5nb3Bfc3RyYXRlZ3kpIFN0cmluZyhsaWJjYWxs KSBWYWx1ZShVU0VfTElCQ0FMTCkNCitFbnVtKHN0cmluZ29wX3N0cmF0ZWd5 KSBTdHJpbmcobGliY2FsbCkgVmFsdWUoU1RSSU5HT1BfU1RSQVRFR1lfTElC Q0FMTCkNCkVudW1WYWx1ZQ0KLUVudW0ocmlzY3Zfc3RyaW5nb3Bfc3RyYXRl Z3kpIFN0cmluZyhzY2FsYXIpIFZhbHVlKFVTRV9TQ0FMQVIpDQorRW51bShz dHJpbmdvcF9zdHJhdGVneSkgU3RyaW5nKHNjYWxhcikgVmFsdWUoU1RSSU5H T1BfU1RSQVRFR1lfU0NBTEFSKQ0KRW51bVZhbHVlDQotRW51bShyaXNjdl9z dHJpbmdvcF9zdHJhdGVneSkgU3RyaW5nKHZlY3RvcikgVmFsdWUoVVNFX1ZF Q1RPUikNCitFbnVtKHN0cmluZ29wX3N0cmF0ZWd5KSBTdHJpbmcodmVjdG9y KSBWYWx1ZShTVFJJTkdPUF9TVFJBVEVHWV9WRUNUT1IpDQotbW1lbWNweS1z dHJhdGVneT0NCi1UYXJnZXQgUmVqZWN0TmVnYXRpdmUgSm9pbmVkIEVudW0o cmlzY3Zfc3RyaW5nb3Bfc3RyYXRlZ3kpIFZhcihyaXNjdl9tZW1jcHlfc3Ry YXRlZ3kpIEluaXQoVVNFX0FVVE8pDQotU3BlY2lmeSBtZW1jcHkgZXhwYW5z aW9uIHN0cmF0ZWd5Lg0KK21idWlsdGluLXN0cmF0ZWd5PQ0KK1RhcmdldCBS ZWplY3ROZWdhdGl2ZSBKb2luZWQgRW51bShzdHJpbmdvcF9zdHJhdGVneSkg VmFyKHN0cmluZ29wX3N0cmF0ZWd5KSBJbml0KFNUUklOR09QX1NUUkFURUdZ X0FVVE8pDQorU3BlY2lmeSBidWlsdGluIGV4cGFuc2lvbiBzdHJhdGVneS4N CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3Yv cnZ2L2F1dG92ZWMvYnVpbHRpbi9zdHJjbXAtcnVuLmMgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2F1dG92ZWMvYnVpbHRpbi9zdHJj bXAtcnVuLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw MDAwMC4uNmRlYzdkYTkxYzENCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYXV0b3ZlYy9idWlsdGlu L3N0cmNtcC1ydW4uYw0KQEAgLTAsMCArMSwzMiBAQA0KKy8qIHsgZGctZG8g cnVuIH0gKi8NCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU8zIC1t aW5saW5lLXN0cmNtcCIgfSAqLw0KKw0KKyNpbmNsdWRlIDxzdHJpbmcuaD4N CisNCitpbnQNCitfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQ0KK2ZvbyAoY29u c3QgY2hhciAqcywgY29uc3QgY2hhciAqdCkNCit7DQorICByZXR1cm4gX19i dWlsdGluX3N0cmNtcCAocywgdCk7DQorfQ0KKw0KK2ludA0KK19fYXR0cmli dXRlX18gKChub2lwYSwgb3B0aW1pemUgKCIwIikpKQ0KK2ZvbzIgKGNvbnN0 IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQpDQorew0KKyAgcmV0dXJuIHN0cmNt cCAocywgdCk7DQorfQ0KKw0KKyNkZWZpbmUgU1ogMTANCisNCitpbnQgbWFp biAoKQ0KK3sNCisgIGNvbnN0IGNoYXIgKnNbU1pdDQorICAgID0geyIiLCAg ImFzZGYiLCAiMCIsICJcMCIsICIhQCMkJSoqKm0xMTIzZmRubW9pNDMiLA0K KyAgICAgICAiYSIsICJ6IiwgICAgIjEiLCAiOSIsICAiMTIzNDU2Nzg5MDEy MzQ1Njc4ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAifTsNCisNCisgIGZvciAo aW50IGkgPSAwOyBpIDwgU1o7IGkrKykNCisgICAgZm9yIChpbnQgaiA9IDA7 IGogPCBTWjsgaisrKQ0KKyAgICAgIGlmIChmb28gKHNbaV0sIHNbal0pICE9 IGZvbzIgKHNbaV0sIHNbal0pKQ0KKyAgICAgICAgX19idWlsdGluX2Fib3J0 ICgpOw0KK30NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvcmlzY3YvcnZ2L2F1dG92ZWMvYnVpbHRpbi9zdHJjbXAuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYXV0b3ZlYy9idWlsdGlu L3N0cmNtcC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MDAwMDAuLmY5ZDMzYTc0ZmM1DQotLS0gL2Rldi9udWxsDQorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2F1dG92ZWMvYnVpbHRp bi9zdHJjbXAuYw0KQEAgLTAsMCArMSwxMyBAQA0KKy8qIHsgZGctZG8gY29t cGlsZSB7IHRhcmdldCB7IHJpc2N2X3YgfSB9IH0gKi8NCisvKiB7IGRnLWFk ZGl0aW9uYWwtb3B0aW9ucyAiLU8zIC1taW5saW5lLXN0cmNtcCIgfSAqLw0K Kw0KK2ludA0KK19fYXR0cmlidXRlX18gKChub2lwYSkpDQorZm9vIChjb25z dCBjaGFyICpzLCBjb25zdCBjaGFyICp0KQ0KK3sNCisgIHJldHVybiBfX2J1 aWx0aW5fc3RyY21wIChzLCB0KTsNCit9DQorDQorLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bGU4ZmYiIDIgfSB9ICovDQorLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2Zmlyc3QubSIg MSB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMgInZtb3IubSIgMSB9IH0gKi8NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2F1dG92ZWMvYnVpbHRpbi9zdHJs ZW4tcnVuLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2 L2F1dG92ZWMvYnVpbHRpbi9zdHJsZW4tcnVuLmMNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uZDI5Mjk3YTVmODYNCi0tLSAv ZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNj di9ydnYvYXV0b3ZlYy9idWlsdGluL3N0cmxlbi1ydW4uYw0KQEAgLTAsMCAr MSwzNyBAQA0KKy8qIHsgZGctZG8gcnVuIH0gKi8NCisvKiB7IGRnLWFkZGl0 aW9uYWwtb3B0aW9ucyAiLU8zIC1taW5saW5lLXN0cmxlbiIgfSAqLw0KKw0K K2ludA0KK19fYXR0cmlidXRlX18gKChub2lwYSkpDQorZm9vIChjb25zdCBj aGFyICpzKQ0KK3sNCisgIHJldHVybiBfX2J1aWx0aW5fc3RybGVuIChzKTsN Cit9DQorDQoraW50DQorX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkNCitmb28y IChjb25zdCBjaGFyICpzKQ0KK3sNCisgIGludCBuID0gMDsNCisgIHdoaWxl ICgqcysrICE9ICdcMCcpDQorICAgIHsNCisgICAgICBhc20gdm9sYXRpbGUg KCIiKTsNCisgICAgICBuKys7DQorICAgIH0NCisgIHJldHVybiBuOw0KK30N CisNCisjZGVmaW5lIFNaIDEwDQorDQoraW50IG1haW4gKCkNCit7DQorICBj b25zdCBjaGFyICpzW1NaXQ0KKyAgICA9IHsiIiwgICJhc2RmIiwgIjAiLCAi XDAiLCAiIUAjJCUqKiptMTEyM2Zkbm1vaTQzIiwNCisgICAgICAgImEiLCAi eiIsICAgICIxIiwgIjkiLCAgIjEyMzQ1Njc4OTAxMjM0NTY3ODg5MDEyMzQ1 Njc4OTAxMjM0NTY3ODkwIn07DQorDQorICBmb3IgKGludCBpID0gMDsgaSA8 IFNaOyBpKyspDQorICAgIHsNCisgICAgICBpZiAoZm9vIChzW2ldKSAhPSBm b28yIChzW2ldKSkNCisgICAgICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsNCisg ICAgfQ0KK30NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvcmlzY3YvcnZ2L2F1dG92ZWMvYnVpbHRpbi9zdHJsZW4uYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYXV0b3ZlYy9idWlsdGlu L3N0cmxlbi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MDAwMDAuLjBjNmNjYTYzZWJmDQotLS0gL2Rldi9udWxsDQorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2F1dG92ZWMvYnVpbHRp bi9zdHJsZW4uYw0KQEAgLTAsMCArMSwxMiBAQA0KKy8qIHsgZGctZG8gY29t cGlsZSB7IHRhcmdldCB7IHJpc2N2X3YgfSB9IH0gKi8NCisvKiB7IGRnLWFk ZGl0aW9uYWwtb3B0aW9ucyAiLU8zIC1taW5saW5lLXN0cmxlbiIgfSAqLw0K Kw0KK2ludA0KK19fYXR0cmlidXRlX18gKChub2lwYSkpDQorZm9vIChjb25z dCBjaGFyICpzKQ0KK3sNCisgIHJldHVybiBfX2J1aWx0aW5fc3RybGVuIChz KTsNCit9DQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzICJ2bGU4ZmYiIDEgfSB9ICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzICJ2Zmlyc3QubSIgMSB9IH0gKi8NCi0tIA0KMi40 My4wDQogDQo= ------=_001_NextPart476020821346_=------