From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from zg8tmtu5ljg5lje1ms4xmtka.icoremail.net (zg8tmtu5ljg5lje1ms4xmtka.icoremail.net [159.89.151.119]) by sourceware.org (Postfix) with ESMTP id 19CFC3858C54 for ; Fri, 12 May 2023 09:10:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 19CFC3858C54 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=eswincomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=eswincomputing.com Received: from E0001797DT (unknown [113.200.72.66]) by app1 (Coremail) with SMTP id EwgMCgBH5cR8Al5kMt8UAA--.13629S2; Fri, 12 May 2023 17:10:21 +0800 (CST) Date: Fri, 12 May 2023 17:10:21 +0800 From: "Fei Gao" To: Sinan Cc: gcc-patches , jiawei Subject: Re: Re: [PATCH 4/5] RISC-V: Add Zcmp extension supports. References: <2023042518114000378158@eswincomputing.com>, <991049a4-d55b-4cb6-8d2f-6d9979047517.sinan.lin@linux.alibaba.com>, <20230506165331848595125@eswincomputing.com>, <10fd153f-397b-4372-9c43-96d7ce30a2c5.sinan.lin@linux.alibaba.com> X-Priority: 3 X-GUID: BA7BAA72-2B0C-4C17-8B62-E4DA457CD036 X-Has-Attach: no X-Mailer: Foxmail 7.2.15.80[cn] Mime-Version: 1.0 Message-ID: <20230512171020765870170@eswincomputing.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-CM-TRANSID:EwgMCgBH5cR8Al5kMt8UAA--.13629S2 X-Coremail-Antispam: 1UD129KBjvAXoWDJrWfKr4xCw13tF4DZrW8Zwb_yoWrWF4xJo Wrur4xA3WfJryUZFs8A347Wwn8Xw1q9w4UXFZ5Jr15GF1vya48Cr4avwsrXFW5KFyxKFWU AFWUJa1Iva92gFnxn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UjIYCTnIWjp_UUUYr7k0a2IF6F4UM7kC6x804xWl1xkIjI8I6I8E6xAIw20EY4v2 0xvaj40_Wr0E3s1l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7 IYx2IY67AKxVWDJVCq3wA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xv wVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcx kEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6x8ErcxFaVAv8VW8 Jr1UJr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4xvF2IEb7IF0Fy264 kE64k0F24lc2xSY4AK67AK6r4fMxAIw28IcxkI7VAKI48JMxAIw28IcVCjz48v1sIEY20_ Gr1UJr1UMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxV Cjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUXVWUAwCIc40Y0x0EwIxGrwCI42IY 6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwCI42IY6x AIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY 1x0267AKxVW8JVW8Jr1l6VACY4xI67k04243AbIYCTnIWIevJa73UjIFyTuYvjxU14SrUU UUU X-CM-SenderInfo: xjdrwv3l6h245lqf0zpsxwx03jof0z/ X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_ASCII_DIVIDERS,KAM_DMARC_STATUS,KAM_SHORT,SPF_HELO_NONE,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: T24gMjAyMy0wNS0xMsKgMTY6MTIgwqBTaW5hbiA8c2luYW4ubGluQGxpbnV4LmFsaWJhYmEuY29t PiB3cm90ZToKPgo+SGkgRmVpLAo+U29ycnkgZm9yIHRoZSBsYXRlIHJlcGx5LCBJJ3ZlIGJlZW4g YnVzeSB3aXRoIG1vdmluZyB0aGVzZSBkYXlzIDooLgo+VGhhbmtzIGZvciB3b3JraW5nIG9uIGl0 LiBJIHdvdWxkIHByZWZlciByZW1vdmluZyB0aGUgZXh0cmEgcGFzcyBmb3IgcG9wcmV0eiBpZiBw b3NzaWJsZSAuLi4gSSB3aWxsIHRlc3QgeW91ciBwYXRjaGVzIEFTQVAuCj5CUiwKPlNpbmFuIAoK aGkgU2luYW4KCkkgcG9zdGVkIFYyIGJhc2VkIG9uIEtpdG8ncyBjb21tZW50IGp1c3Qgbm93Lgpo dHRwczovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2djYy1wYXRjaGVzQGdjYy5nbnUub3JnL21zZzMw NzUwNy5odG1sCgpGb3LCoHBvcHJldHosIHdlIGNhbiBkaXNjdXNzIGZ1cnRoZXIgb2ZmbGluZSBp ZiBpdCdzIGNvbnZlbmllbnQgdG8geW91LgoKQlIswqAKRmVpCj4tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPlNlbmRlcjpG ZWkgR2FvIDxnYW9mZWlAZXN3aW5jb21wdXRpbmcuY29tPgo+U2VudCBBdDoyMDIzIE1heSA2IChT YXQuKSAxNjo1Mwo+UmVjaXBpZW50OlNpbmFuIDxzaW5hbi5saW5AbGludXguYWxpYmFiYS5jb20+ Cj5DYzpqaWF3ZWkgPGppYXdlaUBpc2Nhcy5hYy5jbj47IGdjYy1wYXRjaGVzIDxnY2MtcGF0Y2hl c0BnY2MuZ251Lm9yZz4KPlN1YmplY3Q6UmU6IFJlOiBbUEFUQ0ggNC81XSBSSVNDLVY6IEFkZCBa Y21wIGV4dGVuc2lvbiBzdXBwb3J0cy4KPk9uIDIwMjMtMDUtMDUgMjM6NTcgU2luYW4gPHNpbmFu LmxpbkBsaW51eC5hbGliYWJhLmNvbT4gd3JvdGU6Cj4+Cj4+PiBoaSBKaWF3ZWkKPj4+Cj4+PiBQ bGVhc2UgaWdub3JlIG15IHByZXZpb3VzIHJlcGx5LiBJIGFjY2lkZW50bHkgc2VudCB0aGUgZW1h aWwgYmVmb3JlIEkgZmluaXNoZWQgaXQuCj4+PiBTb3JyeSBmb3IgdGhhdCEKPj4+Cj4+PiBJIGRv d25sb2FkZWQgdGhlIHNlcmllcyBvZiBwYXRjaGVzIGZyb20geW91IGFuZCBmb3VuZCBpbiBzb21l IGNhc2VzCj4+PiBpdCBmYWlscyB0byBnZW5lcmF0ZSB6Y21wIHB1c2ggYW5kIHBvcCBpbnNucy4K Pj4+Cj4+PiBUQzoKPj4+Cj4+PiBjaGFyIG15X2dldGNoYXIoKTsKPj4+IGludCB0ZXN0X3MwKCkK Pj4+IHsKPj4+Cj4+PiBpbnQgYSA9IG15X2dldGNoYXIoKTsKPj4+IGludCBiID0gbXlfZ2V0Y2hh cigpOwo+Pj4gcmV0dXJuIGErYjsKPj4+IH0KPj4+Cj4+PiBjYzEgLWZuby1zaHJpbmstd3JhcC1z ZXBhcmF0ZSAtTzIgLW1hcmNoPXJ2MzJlX3pjYV96Y21wIC1tYWJpPWlscDMyZSAtbWNtb2RlbD1t ZWRsb3cgdGVzdC5jCj4+Pgo+Pj4gLWZuby1zaHJpbmstd3JhcC1zZXBhcmF0ZSBpcyB1c2VkIGhl cmUgdG8gYXZvaWQgdGhlIGltcGFjdCBmcm9tIHNocmluay13cmFwLXNlcGFyYXRlIHRoYXQgaXMg YnkgZGVmYXVsdAo+Pj4gZW5hYmxlZCBpbiBPMi4KPj4+Cj4+PiBBcyBpJ20gYWxzbyBpbnRlcmVz dGVkIGluIFpjKiwgaSBkaWQgc29tZSBjaGFuZ2VzIG1haW5seSBpbiBwcm9sb2d1ZSBhbmQgZXBp bG9ndWUgcGFzcyBxdWl0ZSBzaW1saWFyIHRvCj4+PiB3aGF0IGhhcyBiZWVuIGRvbmUgZm9yIHNh dmUgYW5kIHJlc3RvcmUgZXhjZXB0IHRoZSBDRkkgZGlyZWN0aXZlcyBkdWUgdG8gcmV2ZXJzZWQg b3JkZXIgdGhhdCB6Y21wCj4+PiBwdXNoZXMgYW5kIHBvcHMgcmEsIHMgcmVncyB0aGFuIHdoYXQg c2F2ZSBhbmQgcmVzdG9yZSBkby4KPj4+Cj4+PiBJIHdpbGwgcmVmaW5lIGFuZCBzaGFyZSB0aGUg Y29kZSBzb29uIGZvciB5b3VyIHJldmlldy4KPj4+Cj4+PiBCUgo+Pj4gRmVpCj4+SGkgRmVpLAo+ PkluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBjbS5wdXNoIHdpbGwgbm90IGluY3JlYXNl IHRoZSBvcmlnaW5hbCBhZGp1c3RtZW50IHNpemUgb2YgdGhlIHN0YWNrIHBvaW50ZXIuIEFzIGNt LnB1c2ggdXNlcyBhIG1pbmltdW0gYWRqdXN0bWVudCBzaXplIG9mIDE2LCBhbmQgaW4geW91ciBl eGFtcGxlLCB0aGUgYWRqdXN0bWVudCBzaXplIG9mIHNwIGlzIDEyLCBzbyBjbS5wdXNoIHdpbGwg bm90IGJlIGdlbmVyYXRlZC4KPj55b3UgY2FuIGZpbmQgdGhlIGNoZWNrIGF0IHJpc2N2X3VzZV9w dXNoX3BvcAo+Pj4gPiArICovCj4+PiA+ICsgaWYgKGJhc2Vfc2l6ZSA+IGZyYW1lX3NpemUpCj4+ PiA+ICsgcmV0dXJuIGZhbHNlOwo+Pj4gPiArCj4+QW5kIGlmIHRoaXMgY2hlY2sgaXMgcmVtb3Zl ZCwgdGhlbiB5b3UgY2FuIGdldCB0aGUgb3V0cHV0IHRoYXQgeW91IGV4cGVjdC4KPj5gYGAKPj4g Y20ucHVzaCB7cmEsczB9LC0xNgo+PiBjYWxsIG15X2dldGNoYXIKPj4gbXYgczAsYTAKPj4gY2Fs bCBteV9nZXRjaGFyCj4+IGFkZCBhMCxzMCxhMAo+PiBjbS5wb3ByZXQge3JhLHMwfSwxNgo+PmBg YAo+PkluIG1hbnkgc2NlbmFyaW9zIG9mIHJ2MzJlLCBjbS5wdXNoIGNhbm5vdCBiZSBnZW5lcmF0 ZWQgYXMgYSByZXN1bHQuIFBlcmhhcHMgd2UgY2FuIHJlbW92ZSB0aGlzIGNoZWNrPyBJIGhhdmVu J3QgdGVzdGVkIGlmIGl0IGlzIG9rIHRvIHJlbW92ZSB0aGlzIGNoZWNrLCBhbmQgQ0Mgamlhd2Vp IHRvIGhlbHAgdGVzdCBpdC4KPj5CUiwKPj5TaW5hbgo+aGkgU2luYW4KPlRoYW5rcyBmb3IgeW91 ciByZXBseS4KPkkgcG9zdGVkIG15IGNvZGVzIGF0IGh0dHBzOi8vd3d3Lm1haWwtYXJjaGl2ZS5j b20vZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcvbXNnMzA2OTIxLmh0bWwKPkluIHRoZSBjb3ZlciBs ZXR0ZXIsIGkgZGlkIHNvbWUgY29tcGFyaXNpb24uCj5Db3VsZCB5b3UgcGxlYXNlIHJldmlldz8K PlRoYW5rcyAmIEJSLAo+RmVpCj4+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+U2VuZGVyOkZlaSBHYW8gPGdhb2ZlaUBl c3dpbmNvbXB1dGluZy5jb20+Cj4+U2VudCBBdDoyMDIzIEFwci4gMjUgKFR1ZS4pIDE4OjEyCj4+ UmVjaXBpZW50OmppYXdlaSA8amlhd2VpQGlzY2FzLmFjLmNuPgo+PkNjOmdjYy1wYXRjaGVzIDxn Y2MtcGF0Y2hlc0BnY2MuZ251Lm9yZz4KPj5TdWJqZWN0OltQQVRDSCA0LzVdIFJJU0MtVjogQWRk IFpjbXAgZXh0ZW5zaW9uIHN1cHBvcnRzLgo+PmhpIEppYXdlaQo+PlBsZWFzZSBpZ25vcmUgbXkg cHJldmlvdXMgcmVwbHkuIEkgYWNjaWRlbnRseSBzZW50IHRoZSBlbWFpbCBiZWZvcmUgSSBmaW5p c2hlZCBpdC4KPj5Tb3JyeSBmb3IgdGhhdCEKPj5JIGRvd25sb2FkZWQgdGhlIHNlcmllcyBvZiBw YXRjaGVzIGZyb20geW91IGFuZCBmb3VuZCBpbiBzb21lIGNhc2VzCj4+aXQgZmFpbHMgdG8gZ2Vu ZXJhdGUgemNtcCBwdXNoIGFuZCBwb3AgaW5zbnMuCj4+VEM6Cj4+Y2hhciBteV9nZXRjaGFyKCk7 Cj4+aW50IHRlc3RfczAoKQo+PnsKPj4gaW50IGEgPSBteV9nZXRjaGFyKCk7Cj4+IGludCBiID0g bXlfZ2V0Y2hhcigpOwo+PiByZXR1cm4gYStiOwo+Pn0KPj5jYzEgLWZuby1zaHJpbmstd3JhcC1z ZXBhcmF0ZSAtTzIgLW1hcmNoPXJ2MzJlX3pjYV96Y21wIC1tYWJpPWlscDMyZSAtbWNtb2RlbD1t ZWRsb3cgdGVzdC5jCj4+LWZuby1zaHJpbmstd3JhcC1zZXBhcmF0ZSBpcyB1c2VkIGhlcmUgdG8g YXZvaWQgdGhlIGltcGFjdCBmcm9tIHNocmluay13cmFwLXNlcGFyYXRlIHRoYXQgaXMgYnkgZGVm YXVsdAo+PmVuYWJsZWQgaW4gTzIuCj4+QXMgaSdtIGFsc28gaW50ZXJlc3RlZCBpbiBaYyosIGkg ZGlkIHNvbWUgY2hhbmdlcyBtYWlubHkgaW4gcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIHBhc3MgcXVp dGUgc2ltbGlhciB0bwo+PndoYXQgaGFzIGJlZW4gZG9uZSBmb3Igc2F2ZSBhbmQgcmVzdG9yZSBl eGNlcHQgdGhlIENGSSBkaXJlY3RpdmVzIGR1ZSB0byByZXZlcnNlZCBvcmRlciB0aGF0IHpjbXAK Pj5wdXNoZXMgYW5kIHBvcHMgcmEsIHMgcmVncyB0aGFuIHdoYXQgc2F2ZSBhbmQgcmVzdG9yZSBk by4KPj5JIHdpbGwgcmVmaW5lIGFuZCBzaGFyZSB0aGUgY29kZSBzb29uIGZvciB5b3VyIHJldmll dy4KPj5CUgo+PkZlaQo+Pk9uIFRodSBBcHIgNiAwNjoyMToxNyBHTVQgMjAyMyBKaWF3ZWkgamlh d2VpQGlzY2FzLmFjLmNuIHdyb3RlOgo+Pj4KPj4+QWRkIFpjbXAgZXh0ZW5zaW9uIGluc3RydWN0 aW9ucyBzdXBwb3J0LiBHZW5lcmF0ZSBwdXNoL3BvcAo+Pj53aXRoIGZvbGxvdyBzdGVwczoKPj4+ Cj4+PiAxLiBwcmVwcm9jZXNzaW5nOgo+Pj4gMS4xLiBpZiB0aGVyZSBpcyBubyBwdXNoIHJ0eCwg dGhlbiBqdXN0IHJldHVybi4gZS5nLgo+Pj4gKG5vdGUgNSAxIDIyIDIgW2JiIDJdIE5PVEVfSU5T Tl9CQVNJQ19CTE9DSykKPj4+IChpbnNuL2YgMjIgNSAyMyAyIChzZXQgKHJlZy9mOlNJIDIgc3Ap Cj4+PiAocGx1czpTSSAocmVnL2Y6U0kgMiBzcCkKPj4+IChjb25zdF9pbnQgLTMyIFsweGZmZmZm ZmZmZmZmZmZmZTBdKSkpCj4+PiAobmlsKSkKPj4+IChub3RlIDIzIDIyIDIgMiBOT1RFX0lOU05f UFJPTE9HVUVfRU5EKQo+Pj4gMS4yLiBpZiBwdXNoIHJ0eCBleGlzdHMsIHRoZW4gd2UgY29tcHV0 ZSB0aGUgbnVtYmVyIG9mCj4+PiBwdXNoZWQgcy1yZWdpc3RlcnMsIG5fc3JlZy4KPj4+Cj4+PiBw dXNoIHJ0eCBzaG91bGQgYmUgZmluZCBiZWZvcmUgTk9URV9JTlNOX1BST0xPR1VFX0VORCB0YWcK Pj4+Cj4+PiBbMiBhbmQgMyBoYXBwZW5kIHNpbXVsdGFuZW91c2x5XQo+Pj4KPj4+IDIuIGZpbmQg dmFsaWQgbW92ZSBwYXR0ZXJuLCBtdiBzTiwgYU4sIHdoZXJlIE4gPCBuX3NyZWcsCj4+PiBhbmQg YU4gaXMgbm90IHVzZWQgdGhlIG1vdmUgcGF0dGVybiwgYW5kIHNOIGlzIG5vdAo+Pj4gZGVmaW5l ZCBiZWZvcmUgdGhlIG1vdmUgcGF0dGVybiAoZnJvbSBwcm9sb2d1ZSB0byB0aGUKPj4+IHBvc2l0 aW9uIG9mIG1vdmUgcGF0dGVybikuCj4+Pgo+Pj4gMy4gYW5hbHlzaXMgdXNlIGFuZCByZWFjaCBv ZiBldmVyeSBpbnN0cnVjdGlvbiBmcm9tIHByb2xvZ3VlCj4+PiB0byB0aGUgcG9zaXRpb24gb2Yg bW92ZSBwYXR0ZXJuLgo+Pj4gaWYgYW55IHNOIGlzIHVzZWQsIHRoZW4gd2UgbWFyayB0aGUgY29y cmVzcG9uZGluZyBhcmd1bWVudCBsaXN0Cj4+PiBjYW5kaWRhdGUgYXMgaW52YWxpZC4KPj4+IGUu Zy4KPj4+IHB1c2gge3JhLHMwLXMzfSwge30sIC0zMgo+Pj4gc3cgczAsNDQoc3ApICMgczAgaXMg dXNlZCwgdGhlbiBhcmd1bWVudCBsaXN0IGlzIGludmFsaWQKPj4+IG12IGEwLGE1ICMgYTAgaXMg ZGVmaW5lZCwgdGhlbiBhcmd1bWVudCBsaXN0IGlzIGludmFsaWQKPj4+IC4uLgo+Pj4gbXYgczAs YTAKPj4+IG12IHMxLGExCj4+PiBtdiBzMixhMgo+Pj4KPj4+IDQuIGlmIHRoZXJlIGlzIGEgdmFs aWQgYXJndW1lbnQgbGlzdCwgdGhlbiByZXBsYWNlIHRoZSBwb3AKPj4+IHB1c2ggcGFyYWxsZWwg aW5zbiwgYW5kIGRlbGV0ZSBtdiBwYXR0ZXJuLgo+Pj4gaWYgbm90LCBza2lwLgo+Pj4KPj4+QWxs ICJ6Y21wZSIgbWVhbnMgWmNtcCB3aXRoIFJWRSBleHRlbnNpb24uCj4+PlRoZSBwdXNoL3BvcCBp bnN0cnVuY3Rpb24gaW1wbGVtZW50IGlzIG1vc3RseSBmaW5pc2hlZCBieSBTaW5hbiBMaW4uCj4+ Pgo+Pj5Dby1BdXRob3JlZCBieTogU2luYW4gTGluIDxzaW5hbi4uLi5AbGludXguYWxpYmFiYS5j b20+Cj4+PkNvLUF1dGhvcmVkIGJ5OiBTaW1vbiBDb29rIDxzaW1vbi5jLi4uQGVtYmVjb3NtLmNv bT4KPj4+Q28tQXV0aG9yZWQgYnk6IFNoaWh1YSBMaWFvIDxzaGkuLi5AaXNjYXMuYWMuY24+Cj4+ Pgo+Pj5nY2MvQ2hhbmdlTG9nOgo+Pj4KPj4+ICogY29uZmlnLmdjYzogTmV3IG9iamVjdC4KPj4+ ICogY29uZmlnL3Jpc2N2L3ByZWRpY2F0ZXMubWQgKHJpc2N2X3N0YWNrX3B1c2hfb3BlcmF0aW9u KToKPj4+IE5ldyBwcmVkaWNhdGUuCj4+PiAocmlzY3Zfc3RhY2tfcG9wX29wZXJhdGlvbik6IERp dHRvLgo+Pj4gKHBvcF9yZXR1cm5fdmFsdWVfY29uc3RhbnQpOiBEaXR0by4KPj4+ICogY29uZmln L3Jpc2N2L3Jpc2N2LXBhc3Nlcy5kZWYgKElOU0VSVF9QQVNTX0FGVEVSKTogTmV3IHBhc3MuCj4+ PiAqIGNvbmZpZy9yaXNjdi9yaXNjdi1wcm90b3MuaCAocmlzY3Zfb3V0cHV0X3BvcHJldF9wKToK Pj4+IE5ldyByb3V0aW5lLgo+Pj4gKHJpc2N2X3ZhbGlkX3N0YWNrX3B1c2hfcG9wX3ApOiBEaXR0 by4KPj4+IChyaXNjdl9jaGVja19yZWdubyk6IERpdHRvLgo+Pj4gKG1ha2VfcGFzc196Y21wX3Bv cHJldCk6IE5ldyBwYXNzLgo+Pj4gKiBjb25maWcvcmlzY3YvcmlzY3YuY2MgKHN0cnVjdCByaXNj dl9mcmFtZV9pbmZvKTogTmV3IHZhcmlhYmxlLgo+Pj4gKHJpc2N2X291dHB1dF9wb3ByZXRfcCk6 IE5ldyBmdW5jdGlvbi4KPj4+IChyaXNjdl9wcmludF9wb3Bfc2l6ZSk6IERpdHRvLgo+Pj4gKHJp c2N2X3ByaW50X3JlZ2xpc3QpOiBEaXR0by4KPj4+IChyaXNjdl9wcmludF9vcGVyYW5kKTogTmV3 IGNhc2Ugc3ltYm9scy4KPj4+IChyaXNjdl9zYXZlX3B1c2hfcG9wX2NvdW50KTogTmV3IGZ1bmN0 aW9uLgo+Pj4gKHJpc2N2X3B1c2hfcG9wX2Jhc2Vfc3BfYWRqdXN0KTogRGl0dG8uCj4+PiAocmlz Y3ZfdXNlX3B1c2hfcG9wKTogRGl0dG8uCj4+PiAocmlzY3ZfY29tcHV0ZV9mcmFtZV9pbmZvKTog QWRqdXN0IGZyYW1lIHZhbHVlLgo+Pj4gKHJpc2N2X2VtaXRfcG9wX2luc24pOiBOZXcgZnVuY3Rp b24uCj4+PiAocmlzY3ZfY2hlY2tfcmVnbm8pOiBEaXR0by4KPj4+IChyaXNjdl92YWxpZF9zdGFj a19wdXNoX3BvcF9wKTogRGl0dG8uCj4+PiAocmlzY3ZfZW1pdF9wdXNoX2luc24pOiBEaXR0by4K Pj4+IChyaXNjdl9leHBhbmRfcHJvbG9ndWUpOiBNb2RpZnkgZnJhbWUgcGF0dGVybi4KPj4+IChy aXNjdl9leHBhbmRfZXBpbG9ndWUpOiBEaXR0by4KPj4+ICogY29uZmlnL3Jpc2N2L3Jpc2N2Lmgg KFJFVFVSTl9WQUxVRV9SRUdOVU0pOgo+Pj4gKFJJU0NWX1pDRV9QVVNIX1BPUF9NQVNLKTogTmV3 IG1hc2suCj4+PiAoUklTQ1ZfWkNNUEVfUFVTSF9QT1BfTUFTSyk6IERpdHRvLgo+Pj4gKiBjb25m aWcvcmlzY3YvcmlzY3YubWQ6IEFkZCBuZXcgcmVnIG51bWJlciBhbmQgaW5jbHVkZSBpbmZvLgo+ Pj4gKiBjb25maWcvcmlzY3YvdC1yaXNjdjogTmV3IG9iamVjdCBydWxlcy4KPj4+ICogY29uZmln L3Jpc2N2L3Jpc2N2LXpjbXAtcG9wcmV0LmNjOiBOZXcgZmlsZS4KPj4+ICogY29uZmlnL3Jpc2N2 L3pjLm1kOiBOZXcgZmlsZS4KPj4+LS0tCj4+PiBnY2MvY29uZmlnLmdjYyB8IDIgKy0KPj4+IGdj Yy9jb25maWcvcmlzY3YvcHJlZGljYXRlcy5tZCB8IDE2ICsKPj4+IGdjYy9jb25maWcvcmlzY3Yv cmlzY3YtcGFzc2VzLmRlZiB8IDEgKwo+Pj4gZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1wcm90b3Mu aCB8IDQgKwo+Pj4gZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi16Y21wLXBvcHJldC5jYyB8IDI2MCAr KysrKysrKysrKysrKysKPj4+IGdjYy9jb25maWcvcmlzY3YvcmlzY3YuY2MgfCA0MzcgKysrKysr KysrKysrKysrKysrKysrKysrKy0KPj4+IGdjYy9jb25maWcvcmlzY3YvcmlzY3YuaCB8IDQgKwo+ Pj4gZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5tZCB8IDMgKwo+Pj4gZ2NjL2NvbmZpZy9yaXNjdi90 LXJpc2N2IHwgNCArCj4+PiBnY2MvY29uZmlnL3Jpc2N2L3pjLm1kIHwgNDcgKysrCj4+PiAxMCBm aWxlcyBjaGFuZ2VkLCA3NjcgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCj4+PiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi16Y21wLXBvcHJldC5jYwo+Pj4g Y3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy9jb25maWcvcmlzY3YvemMubWQKPj4+Cj4+PmRpZmYgLS1n aXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCj4+PmluZGV4IDYyOWQzMjRiNWVm Li5hOTkxYzUyNzNmOSAxMDA2NDQKPj4+LS0tIGEvZ2NjL2NvbmZpZy5nY2MKPj4+KysrIGIvZ2Nj L2NvbmZpZy5nY2MKPj4+QEAgLTUyOSw3ICs1MjksNyBAQCBwcnUtKi0qKQo+Pj4gOzsKPj4+IHJp c2N2KikKPj4+IGNwdV90eXBlPXJpc2N2Cj4+Pi0gZXh0cmFfb2Jqcz0icmlzY3YtYnVpbHRpbnMu byByaXNjdi1jLm8gcmlzY3Ytc3Iubwo+Pj5yaXNjdi1zaG9ydGVuLW1lbXJlZnMubyByaXNjdi1z ZWxmdGVzdHMubyByaXNjdi12Lm8gcmlzY3YtdnNldHZsLm8iCj4+PisgZXh0cmFfb2Jqcz0icmlz Y3YtYnVpbHRpbnMubyByaXNjdi1jLm8gcmlzY3Ytc3Iubwo+Pj5yaXNjdi1zaG9ydGVuLW1lbXJl ZnMubyByaXNjdi1zZWxmdGVzdHMubyByaXNjdi12Lm8gcmlzY3YtdnNldHZsLm8KPj4+cmlzY3Yt emNtcC1wb3ByZXQubyIKPj4+IGV4dHJhX29ianM9IiR7ZXh0cmFfb2Jqc30gcmlzY3YtdmVjdG9y LWJ1aWx0aW5zLm8KPj4+cmlzY3YtdmVjdG9yLWJ1aWx0aW5zLXNoYXBlcy5vIHJpc2N2LXZlY3Rv ci1idWlsdGlucy1iYXNlcy5vIgo+Pj4gZXh0cmFfb2Jqcz0iJHtleHRyYV9vYmpzfSB0aGVhZC5v Igo+Pj4gZF90YXJnZXRfb2Jqcz0icmlzY3YtZC5vIgo+Pj5kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZp Zy9yaXNjdi9wcmVkaWNhdGVzLm1kIGIvZ2NjL2NvbmZpZy9yaXNjdi9wcmVkaWNhdGVzLm1kCj4+ PmluZGV4IDBkOWQ3NzAxYzdlLi42YmZmNmNkMDQ3YSAxMDA2NDQKPj4+LS0tIGEvZ2NjL2NvbmZp Zy9yaXNjdi9wcmVkaWNhdGVzLm1kCj4+PisrKyBiL2djYy9jb25maWcvcmlzY3YvcHJlZGljYXRl cy5tZAo+Pj5AQCAtNDEyLDMgKzQxMiwxOSBAQAo+Pj4gKGFuZCAobWF0Y2hfY29kZSAiY29uc3Rf aW50IikKPj4+IChpb3IgKG1hdGNoX29wZXJhbmQgMCAibm90X3VpbW1fZXh0cmFfYml0X29wZXJh bmQiKQo+Pj4gKG1hdGNoX29wZXJhbmQgMCAiY29uc3Rfbm90dHdvYml0c19vcGVyYW5kIikpKSkK Pj4+Kwo+Pj4rKGRlZmluZV9zcGVjaWFsX3ByZWRpY2F0ZSAicmlzY3Zfc3RhY2tfcHVzaF9vcGVy YXRpb24iCj4+PisgKG1hdGNoX2NvZGUgInBhcmFsbGVsIikKPj4+K3sKPj4+KyByZXR1cm4gcmlz Y3ZfdmFsaWRfc3RhY2tfcHVzaF9wb3BfcCAob3AsIHRydWUpOwo+Pj4rfSkKPj4+Kwo+Pj4rKGRl ZmluZV9zcGVjaWFsX3ByZWRpY2F0ZSAicmlzY3Zfc3RhY2tfcG9wX29wZXJhdGlvbiIKPj4+KyAo bWF0Y2hfY29kZSAicGFyYWxsZWwiKQo+Pj4rewo+Pj4rIHJldHVybiByaXNjdl92YWxpZF9zdGFj a19wdXNoX3BvcF9wIChvcCwgZmFsc2UpOwo+Pj4rfSkKPj4+Kwo+Pj4rKGRlZmluZV9wcmVkaWNh dGUgInBvcF9yZXR1cm5fdmFsdWVfY29uc3RhbnQiCj4+PisgKGFuZCAobWF0Y2hfY29kZSAiY29u c3RfaW50IikKPj4+KyAobWF0Y2hfdGVzdCAiSU5UVkFMIChvcCkgPT0gMCIpKSkKPj4+ZGlmZiAt LWdpdCBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YtcGFzc2VzLmRlZgo+Pj5iL2djYy9jb25maWcv cmlzY3YvcmlzY3YtcGFzc2VzLmRlZgo+Pj5pbmRleCA0MDg0MTIyY2YwYS4uMjU2MjViOWFmM2Ug MTAwNjQ0Cj4+Pi0tLSBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YtcGFzc2VzLmRlZgo+Pj4rKysg Yi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXBhc3Nlcy5kZWYKPj4+QEAgLTE5LDMgKzE5LDQgQEAK Pj4+Cj4+PiBJTlNFUlRfUEFTU19BRlRFUiAocGFzc19ydGxfc3RvcmVfbW90aW9uLCAxLCBwYXNz X3Nob3J0ZW5fbWVtcmVmcyk7Cj4+PiBJTlNFUlRfUEFTU19CRUZPUkUgKHBhc3NfZmFzdF9ydGxf ZGNlLCAxLCBwYXNzX3ZzZXR2bCk7Cj4+PitJTlNFUlRfUEFTU19BRlRFUiAocGFzc19jcHJvcF9o YXJkcmVnLCAxLCBwYXNzX3pjbXBfcG9wcmV0KTsKPj4+ZGlmZiAtLWdpdCBhL2djYy9jb25maWcv cmlzY3YvcmlzY3YtcHJvdG9zLmggYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5oCj4+ PmluZGV4IDQ2MTE0NDdkZGRlLi44ZjI0M2NkNWY0NCAxMDA2NDQKPj4+LS0tIGEvZ2NjL2NvbmZp Zy9yaXNjdi9yaXNjdi1wcm90b3MuaAo+Pj4rKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXBy b3Rvcy5oCj4+PkBAIC01NCw2ICs1NCw3IEBAIGV4dGVybiBib29sIHJpc2N2X3NwbGl0XzY0Yml0 X21vdmVfcCAocnR4LCBydHgpOwo+Pj4gZXh0ZXJuIHZvaWQgcmlzY3Zfc3BsaXRfZG91Ymxld29y ZF9tb3ZlIChydHgsIHJ0eCk7Cj4+PiBleHRlcm4gY29uc3QgY2hhciAqcmlzY3Zfb3V0cHV0X21v dmUgKHJ0eCwgcnR4KTsKPj4+IGV4dGVybiBjb25zdCBjaGFyICpyaXNjdl9vdXRwdXRfcmV0dXJu ICgpOwo+Pj4rZXh0ZXJuIGJvb2wgcmlzY3Zfb3V0cHV0X3BvcHJldF9wIChydHgpOwo+Pj4KPj4+ ICNpZmRlZiBSVFhfQ09ERQo+Pj4gZXh0ZXJuIHZvaWQgcmlzY3ZfZXhwYW5kX2ludF9zY2MgKHJ0 eCwgZW51bSBydHhfY29kZSwgcnR4LCBydHgpOwo+Pj5AQCAtNzksNiArODAsOCBAQCBleHRlcm4g dm9pZCByaXNjdl9yZWluaXQgKHZvaWQpOwo+Pj4gZXh0ZXJuIHBvbHlfdWludDY0IHJpc2N2X3Jl Z21vZGVfbmF0dXJhbF9zaXplIChtYWNoaW5lX21vZGUpOwo+Pj4gZXh0ZXJuIGJvb2wgcmlzY3Zf dl9leHRfdmVjdG9yX21vZGVfcCAobWFjaGluZV9tb2RlKTsKPj4+IGV4dGVybiBib29sIHJpc2N2 X3NoYW10X21hdGNoZXNfbWFza19wIChpbnQsIEhPU1RfV0lERV9JTlQpOwo+Pj4rZXh0ZXJuIGJv b2wgcmlzY3ZfdmFsaWRfc3RhY2tfcHVzaF9wb3BfcCAocnR4LCBib29sKTsKPj4+K2V4dGVybiBi b29sIHJpc2N2X2NoZWNrX3JlZ25vKHJ0eCwgdW5zaWduZWQpOwo+Pj4KPj4+IC8qIFJvdXRpbmVz IGltcGxlbWVudGVkIGluIHJpc2N2LWMuY2MuICovCj4+PiB2b2lkIHJpc2N2X2NwdV9jcHBfYnVp bHRpbnMgKGNwcF9yZWFkZXIgKik7Cj4+PkBAIC05OSw2ICsxMDIsNyBAQCBleHRlcm4gYm9vbCBy aXNjdl9oYXJkX3JlZ25vX3JlbmFtZV9vayAodW5zaWduZWQsIHVuc2lnbmVkKTsKPj4+Cj4+PiBy dGxfb3B0X3Bhc3MgKiBtYWtlX3Bhc3Nfc2hvcnRlbl9tZW1yZWZzIChnY2M6OmNvbnRleHQgKmN0 eHQpOwo+Pj4gcnRsX29wdF9wYXNzICogbWFrZV9wYXNzX3ZzZXR2bCAoZ2NjOjpjb250ZXh0ICpj dHh0KTsKPj4+K3J0bF9vcHRfcGFzcyAqIG1ha2VfcGFzc196Y21wX3BvcHJldCAoZ2NjOjpjb250 ZXh0ICpjdHh0KTsKPj4+Cj4+PiAvKiBJbmZvcm1hdGlvbiBhYm91dCBvbmUgQ1BVIHdlIGtub3cg YWJvdXQuICovCj4+PiBzdHJ1Y3QgcmlzY3ZfY3B1X2luZm8gewo+Pj5kaWZmIC0tZ2l0IGEvZ2Nj L2NvbmZpZy9yaXNjdi9yaXNjdi16Y21wLXBvcHJldC5jYwo+Pj5iL2djYy9jb25maWcvcmlzY3Yv cmlzY3YtemNtcC1wb3ByZXQuY2MKPj4+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+aW5kZXggMDAw MDAwMDAwMDAuLmQ3YjQwZjZhM2UyCj4+Pi0tLSAvZGV2L251bGwKPj4+KysrIGIvZ2NjL2NvbmZp Zy9yaXNjdi9yaXNjdi16Y21wLXBvcHJldC5jYwo+Pj5AQCAtMCwwICsxLDI2MCBAQAo+Pj4rI2lu Y2x1ZGUgImNvbmZpZy5oIgo+Pj4rI2luY2x1ZGUgInN5c3RlbS5oIgo+Pj4rI2luY2x1ZGUgImNv cmV0eXBlcy5oIgo+Pj4rI2luY2x1ZGUgInRtLmgiCj4+PisjaW5jbHVkZSAicnRsLmgiCj4+Pisj aW5jbHVkZSAiYmFja2VuZC5oIgo+Pj4rI2luY2x1ZGUgInJlZ3MuaCIKPj4+KyNpbmNsdWRlICJ0 YXJnZXQuaCIKPj4+KyNpbmNsdWRlICJtZW1tb2RlbC5oIgo+Pj4rI2luY2x1ZGUgImVtaXQtcnRs LmgiCj4+PisjaW5jbHVkZSAiZGYuaCIKPj4+KyNpbmNsdWRlICJwcmVkaWN0LmgiCj4+PisjaW5j bHVkZSAidHJlZS1wYXNzLmgiCj4+PisjaW5jbHVkZSAidHJlZS5oIgo+Pj4rI2luY2x1ZGUgInRt X3AuaCIKPj4+KyNpbmNsdWRlICJvcHRhYnMuaCIKPj4+KyNpbmNsdWRlICJyZWNvZy5oIgo+Pj4r I2luY2x1ZGUgImNmZ3J0bC5oIgo+Pj4rCj4+PisjZGVmaW5lIElOX1RBUkdFVF9DT0RFIDEKPj4+ Kwo+Pj4rbmFtZXNwYWNlIHsKPj4+Kwo+Pj4rLyoKPj4+KyAxLiBwcmVwcm9jZXNzaW5nOgo+Pj4r IDEuMS4gaWYgdGhlcmUgaXMgbm8gcHVzaCBydHgsIHRoZW4ganVzdCByZXR1cm4uIGUuZy4KPj4+ KyAobm90ZSA1IDEgMjIgMiBbYmIgMl0gTk9URV9JTlNOX0JBU0lDX0JMT0NLKQo+Pj4rIChpbnNu L2YgMjIgNSAyMyAyIChzZXQgKHJlZy9mOlNJIDIgc3ApCj4+PisgKHBsdXM6U0kgKHJlZy9mOlNJ IDIgc3ApCj4+PisgKGNvbnN0X2ludCAtMzIgWzB4ZmZmZmZmZmZmZmZmZmZlMF0pKSkKPj4+KyAo bmlsKSkKPj4+KyAobm90ZSAyMyAyMiAyIDIgTk9URV9JTlNOX1BST0xPR1VFX0VORCkKPj4+KyAx LjIuIGlmIHB1c2ggcnR4IGV4aXN0cywgdGhlbiB3ZSBjb21wdXRlIHRoZSBudW1iZXIgb2YKPj4+ KyBwdXNoZWQgcy1yZWdpc3RlcnMsIG5fc3JlZy4KPj4+Kwo+Pj4rIHB1c2ggcnR4IHNob3VsZCBi ZSBmaW5kIGJlZm9yZSBOT1RFX0lOU05fUFJPTE9HVUVfRU5EIHRhZwo+Pj4rCj4+PisgWzIgYW5k IDMgaGFwcGVuZCBzaW11bHRhbmVvdXNseV0KPj4+KyAyLiBmaW5kIHZhbGlkIG1vdmUgcGF0dGVy biwgbXYgc04sIGFOLCB3aGVyZSBOIDwgbl9zcmVnLAo+Pj4rIGFuZCBhTiBpcyBub3QgdXNlZCB0 aGUgbW92ZSBwYXR0ZXJuLCBhbmQgc04gaXMgbm90Cj4+PisgZGVmaW5lZCBiZWZvcmUgdGhlIG1v dmUgcGF0dGVybiAoZnJvbSBwcm9sb2d1ZSB0byB0aGUKPj4+KyBwb3NpdGlvbiBvZiBtb3ZlIHBh dHRlcm4pLgo+Pj4rIDMuIGFuYWx5c2lzIHVzZSBhbmQgcmVhY2ggb2YgZXZlcnkgaW5zdHJ1Y3Rp b24gZnJvbSBwcm9sb2d1ZQo+Pj4rIHRvIHRoZSBwb3NpdGlvbiBvZiBtb3ZlIHBhdHRlcm4uCj4+ PisgaWYgYW55IHNOIGlzIHVzZWQsIHRoZW4gd2UgbWFyayB0aGUgY29ycmVzcG9uZGluZyBhcmd1 bWVudCBsaXN0Cj4+PisgY2FuZGlkYXRlIGFzIGludmFsaWQuCj4+PisgZS5nLgo+Pj4rIHB1c2gg e3JhLHMwLXMzfSwge30sIC0zMgo+Pj4rIHN3IHMwLDQ0KHNwKSAjIHMwIGlzIHVzZWQsIHRoZW4g YXJndW1lbnQgbGlzdCBpcyBpbnZhbGlkCj4+PisgbXYgYTAsYTUgIyBhMCBpcyBkZWZpbmVkLCB0 aGVuIGFyZ3VtZW50IGxpc3QgaXMgaW52YWxpZAo+Pj4rIC4uLgo+Pj4rIG12IHMwLGEwCj4+Pisg bXYgczEsYTEKPj4+KyBtdiBzMixhMgo+Pj4rCj4+PisgNC4gaWYgdGhlcmUgaXMgYSB2YWxpZCBh cmd1bWVudCBsaXN0LCB0aGVuIHJlcGxhY2UgdGhlIHBvcAo+Pj4rIHB1c2ggcGFyYWxsZWwgaW5z biwgYW5kIGRlbGV0ZSBtdiBwYXR0ZXJuLgo+Pj4rIGlmIG5vdCwgc2tpcC4KPj4+KyovCj4+PisK Pj4+K3N0YXRpYyB2b2lkCj4+PitlbWl0X3pjbXBfcG9wcmV0IChydHhfaW5zbiAqcG9wX3J0eCwK Pj4+KyBydHhfaW5zbiAqKmNhbmRpZGF0ZXMsCj4+PisgYmFzaWNfYmxvY2sgYmIpCj4+Pit7Cj4+ PisgYm9vbCBnZW5fcG9wcmV0el9wID0gY2FuZGlkYXRlcyBbMF07Cj4+PisgYm9vbCBnZW5fcG9w cmV0X3AgPSBjYW5kaWRhdGVzIFsyXTsKPj4+Kwo+Pj4rIGlmICghKGdlbl9wb3ByZXRfcCB8fCBn ZW5fcG9wcmV0el9wKSkKPj4+KyByZXR1cm47Cj4+PisKPj4+KyBnY2NfYXNzZXJ0ICgoZ2VuX3Bv cHJldF9wICYmICFnZW5fcG9wcmV0el9wKQo+Pj4rIHx8IChnZW5fcG9wcmV0el9wICYmIGdlbl9w b3ByZXRfcCkpOwo+Pj4rCj4+PisgcnR4IHBvcF9wYXQgPSBQQVRURVJOIChwb3BfcnR4KTsKPj4+ KyB1bnNpZ25lZCBwb3BfaWR4ID0gMCwgcG9wcmV0X2lkeCA9IDA7Cj4+PisgdW5zaWduZWQgbl9w b3BfcGFyID0gWFZFQ0xFTiAocG9wX3BhdCwgMCk7Cj4+PisgdW5zaWduZWQgbl9wb3ByZXRfcGFy ID0gbl9wb3BfcGFyCj4+PisgKyAoZ2VuX3BvcHJldHpfcCA/IDIgOiAwKQo+Pj4rICsgKGdlbl9w b3ByZXRfcCA/IDIgOiAwKTsKPj4+Kwo+Pj4rIHJ0eCBwb3ByZXRfcGFyID0gZ2VuX3J0eF9QQVJB TExFTCAoVk9JRG1vZGUsCj4+PisgcnR2ZWNfYWxsb2MgKG5fcG9wcmV0X3BhcikpOwo+Pj4rCj4+ PisgLyogcmV0dXJuIHplcm8gcGF0dGVybiAqLwo+Pj4rIGlmIChnZW5fcG9wcmV0el9wKQo+Pj4r IHsKPj4+KyBYVkVDRVhQIChwb3ByZXRfcGFyLCAwLCAwKSA9IFBBVFRFUk4gKGNhbmRpZGF0ZXNb MF0pOwo+Pj4rIFhWRUNFWFAgKHBvcHJldF9wYXIsIDAsIDEpID0gUEFUVEVSTiAoY2FuZGlkYXRl c1sxXSk7Cj4+PisgcG9wcmV0X2lkeCArPSAyOwo+Pj4rIGRlbGV0ZV9pbnNuIChjYW5kaWRhdGVz WzBdKTsKPj4+KyBkZWxldGVfaW5zbiAoY2FuZGlkYXRlc1sxXSk7Cj4+PisgfQo+Pj4rCj4+Pisg LyogY29weSBwb3AgcGFydWVuY2UuICovCj4+PisgZm9yICg7IHBvcF9pZHggPCBuX3BvcF9wYXI7 Cj4+PisgcG9wX2lkeCArKywgcG9wcmV0X2lkeCArKykKPj4+KyB7Cj4+PisgWFZFQ0VYUCAocG9w cmV0X3BhciwgMCwgcG9wcmV0X2lkeCkgPQo+Pj4rIFhWRUNFWFAgKHBvcF9wYXQsIDAsIHBvcF9p ZHgpOwo+Pj4rIH0KPj4+Kwo+Pj4rIC8qIHJldCBwYXR0ZXJuLiAqLwo+Pj4rIHJ0eCByZXRfcGF0 ID0gUEFUVEVSTiAoY2FuZGlkYXRlc1syXSk7Cj4+PisgZ2NjX2Fzc2VydCAoR0VUX0NPREUgKHJl dF9wYXQpID09IFBBUkFMTEVMKTsKPj4+Kwo+Pj4rIGZvciAoaW50IGkgPSAwOyBpIDwgWFZFQ0xF TiAocmV0X3BhdCwgMCk7Cj4+PisgaSsrLCBwb3ByZXRfaWR4KyspCj4+Pisgewo+Pj4rIFhWRUNF WFAgKHBvcHJldF9wYXIsIDAsIHBvcHJldF9pZHgpID0KPj4+KyBYVkVDRVhQIChyZXRfcGF0LCAw LCBpKTsKPj4+KyB9Cj4+PisKPj4+KyBydHhfaW5zbiAqaW5zbiA9IGVtaXRfanVtcF9pbnNuX2Fm dGVyICgKPj4+KyBwb3ByZXRfcGFyLAo+Pj4rIEJCX0VORCAoYmIpKTsKPj4+KyBKVU1QX0xBQkVM IChpbnNuKSA9IHNpbXBsZV9yZXR1cm5fcnR4Owo+Pj4rCj4+PisgUkVHX05PVEVTIChpbnNuKSA9 IFJFR19OT1RFUyAocG9wX3J0eCk7Cj4+PisgUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAx Owo+Pj4rCj4+PisgaWYgKGR1bXBfZmlsZSkKPj4+KyB7Cj4+PisgZnByaW50ZihkdW1wX2ZpbGUs ICJuZXcgaW5zbjpcbiIpOwo+Pj4rIHByaW50X3J0bCAoZHVtcF9maWxlLCBpbnNuKTsKPj4+KyB9 Cj4+PisKPj4+KyBkZWxldGVfaW5zbiAoY2FuZGlkYXRlcyBbMl0pOwo+Pj4rIGRlbGV0ZV9pbnNu IChwb3BfcnR4KTsKPj4+K30KPj4+Kwo+Pj4rc3RhdGljIHZvaWQKPj4+K3pjbXBfcG9wcmV0ICh2 b2lkKQo+Pj4rewo+Pj4rIGJhc2ljX2Jsb2NrIGJiOwo+Pj4rIHJ0eF9pbnNuICppbnNuID0gTlVM TCwgKnBvcF9ydHggPSBOVUxMOwo+Pj4rIHJ0eF9pbnNuICpwb3BfY2FuZGlkYXRlc1szXSA9IHtO VUxMLCB9Owo+Pj4rIC8qCj4+PisgZmluZCBOT1RFX0lOU05fRVBJTE9HVUVfQkVHLCBidXQgcG9w X3J0eCBub3QgZm91bmQgPT4gcmV0dXJuCj4+PisgZmluZCBOT1RFX0lOU05fRVBJTE9HVUVfQkVH LCBhbmQgcG9wX3J0eCBpcyBmb3VuZCA9PiBsb29raW5nIGZvciBhMAo+Pj4rICovCj4+PisKPj4+ KyBGT1JfRUFDSF9CQl9SRVZFUlNFX0ZOIChiYiwgY2Z1bikKPj4+KyB7Cj4+PisgRk9SX0JCX0lO U05TX1JFVkVSU0UgKGJiLCBpbnNuKQo+Pj4rIHsKPj4+KyBpZiAoIXBvcF9ydHgKPj4+KyAmJiBO T1RFX1AgKGluc24pCj4+PisgJiYgTk9URV9LSU5EIChpbnNuKSA9PSBOT1RFX0lOU05fRVBJTE9H VUVfQkVHKQo+Pj4rIHJldHVybjsKPj4+Kwo+Pj4rIGlmIChOT1RFX1AgKGluc24pCj4+PisgJiYg Tk9URV9LSU5EIChpbnNuKSA9PSBOT1RFX0lOU05fRlVOQ1RJT05fQkVHKQo+Pj4rIHsKPj4+KyBp ZiAocG9wX3J0eCkKPj4+KyBlbWl0X3pjbXBfcG9wcmV0IChwb3BfcnR4LCBwb3BfY2FuZGlkYXRl cywgYmIpOwo+Pj4rIHJldHVybjsKPj4+KyB9Owo+Pj4rCj4+PisgaWYgKCEoTk9OREVCVUdfSU5T Tl9QIChpbnNuKQo+Pj4rIHx8IENBTExfUCAoaW5zbikpKQo+Pj4rIGNvbnRpbnVlOwo+Pj4rCj4+ PisgcnR4IHBvcF9wYXQgPSBQQVRURVJOIChpbnNuKTsKPj4+Kwo+Pj4rIGlmIChHRVRfQ09ERSAo cG9wX3BhdCkgPT0gUEFSQUxMRUwKPj4+KyAmJiByaXNjdl92YWxpZF9zdGFja19wdXNoX3BvcF9w IChwb3BfcGF0LCBmYWxzZSkpCj4+Pisgewo+Pj4rIHBvcF9ydHggPSBpbnNuOwo+Pj4rIGNvbnRp bnVlOwo+Pj4rIH0KPj4+Kwo+Pj4rIC8qIHBhdHRlcm4gZm9yIGByZXRgLiAqLwo+Pj4rIGlmIChK VU1QX1AgKGluc24pCj4+PisgJiYgR0VUX0NPREUgKHBvcF9wYXQpID09IFBBUkFMTEVMCj4+Pisg JiYgWFZFQ0xFTiAocG9wX3BhdCwgMCkgPT0gMgo+Pj4rICYmIEdFVF9DT0RFIChYVkVDRVhQIChw b3BfcGF0LCAwLCAwKSkgPT0gU0lNUExFX1JFVFVSTgo+Pj4rICYmIEdFVF9DT0RFIChYVkVDRVhQ IChwb3BfcGF0LCAwLCAxKSkgPT0gVVNFKQo+Pj4rIHsKPj4+KyBydHggdXNlX3JlZyA9IFhFWFAg KFhWRUNFWFAgKHBvcF9wYXQsIDAsIDEpLCAwKTsKPj4+KyBpZiAoUkVHX1AgKHVzZV9yZWcpCj4+ PisgJiYgUkVHTk8gKHVzZV9yZWcpID09IFJFVFVSTl9BRERSX1JFR05VTSkKPj4+KyB7Cj4+Pisg cG9wX2NhbmRpZGF0ZXMgWzJdID0gaW5zbjsKPj4+KyBjb250aW51ZTsKPj4+KyB9Cj4+PisgfQo+ Pj4rCj4+PisgaWYgKCFwb3BfcnR4KQo+Pj4rIGNvbnRpbnVlOwo+Pj4rCj4+PisgLyogcGF0dGVy biBmb3IgcmV0dXJuIHZhbHVlLiAqLwo+Pj4rIGlmICghcG9wX2NhbmRpZGF0ZXMgWzBdCj4+Pisg JiYgR0VUX0NPREUgKHBvcF9wYXQpID09IFVTRSkKPj4+KyB7Cj4+PisgcnR4X2luc24gKnNldF9p bnNuID0gUFJFVl9JTlNOIChpbnNuKTsKPj4+KyBydHggcGF0X3NldCA9IFBBVFRFUk4gKHNldF9p bnNuKTsKPj4+Kwo+Pj4rIGlmIChyaXNjdl9jaGVja19yZWdubyAoWEVYUCAocG9wX3BhdCwgMCks Cj4+PisgUkVUVVJOX1ZBTFVFX1JFR05VTSkKPj4+KyAmJiBpbnNuCj4+PisgJiYgcGF0X3NldCAh PSBOVUxMCj4+PisgJiYgR0VUX0NPREUgKHBhdF9zZXQpID09IFNFVAo+Pj4rICYmIHJpc2N2X2No ZWNrX3JlZ25vIChTRVRfREVTVCAocGF0X3NldCksCj4+PisgUkVUVVJOX1ZBTFVFX1JFR05VTSkK Pj4+KyAmJiBDT05TVF9JTlRfUCAoU0VUX1NSQyAocGF0X3NldCkpCj4+PisgJiYgSU5UVkFMIChT RVRfU1JDIChwYXRfc2V0KSkgPT0gMCkKPj4+KyB7Cj4+PisgcG9wX2NhbmRpZGF0ZXMgWzBdID0g c2V0X2luc247Cj4+PisgcG9wX2NhbmRpZGF0ZXMgWzFdID0gaW5zbjsKPj4+KyBicmVhazsKPj4+ KyB9Cj4+PisgfQo+Pj4rIH0KPj4+Kwo+Pj4rIGlmIChwb3BfcnR4KQo+Pj4rIHsKPj4+KyBlbWl0 X3pjbXBfcG9wcmV0IChwb3BfcnR4LCBwb3BfY2FuZGlkYXRlcywgYmIpOwo+Pj4rIHJldHVybjsK Pj4+KyB9Cj4+PisgfQo+Pj4rfQo+Pj4rCj4+Pitjb25zdCBwYXNzX2RhdGEgcGFzc19kYXRhX3pj bXBfcG9wcmV0ID0KPj4+K3sKPj4+KyBSVExfUEFTUywgLyogdHlwZSAqLwo+Pj4rICJ6Y21wLXBv cHJldCIsIC8qIG5hbWUgKi8KPj4+KyBPUFRHUk9VUF9OT05FLCAvKiBvcHRpbmZvX2ZsYWdzICov Cj4+PisgVFZfTk9ORSwgLyogdHZfaWQgKi8KPj4+KyAwLCAvKiBwcm9wZXJ0aWVzX3JlcXVpcmVk ICovCj4+PisgMCwgLyogcHJvcGVydGllc19wcm92aWRlZCAqLwo+Pj4rIDAsIC8qIHByb3BlcnRp ZXNfZGVzdHJveWVkICovCj4+PisgMCwgLyogdG9kb19mbGFnc19zdGFydCAqLwo+Pj4rIDAsIC8q IHRvZG9fZmxhZ3NfZmluaXNoICovCj4+Pit9Owo+Pj4rCj4+PitjbGFzcyBwYXNzX3pjbXBfcG9w cmV0IDogcHVibGljIHJ0bF9vcHRfcGFzcwo+Pj4rewo+Pj4rcHVibGljOgo+Pj4rIHBhc3NfemNt cF9wb3ByZXQgKGdjYzo6Y29udGV4dCAqY3R4dCkKPj4+KyA6IHJ0bF9vcHRfcGFzcyAocGFzc19k YXRhX3pjbXBfcG9wcmV0LCBjdHh0KQo+Pj4rIHt9Cj4+PisKPj4+KyAvKiBvcHRfcGFzcyBtZXRo b2RzOiAqLwo+Pj4rIHZpcnR1YWwgYm9vbCBnYXRlIChmdW5jdGlvbiAqKQo+Pj4rIHsgcmV0dXJu IFRBUkdFVF9aQ01QOyB9Cj4+PisgdmlydHVhbCB1bnNpZ25lZCBpbnQgZXhlY3V0ZSAoZnVuY3Rp b24gKikKPj4+KyB7Cj4+PisgemNtcF9wb3ByZXQgKCk7Cj4+PisgcmV0dXJuIDA7Cj4+PisgfQo+ Pj4rfTsgLy8gY2xhc3MgcGFzc196Y21wX3BvcHJldAo+Pj4rCj4+Pit9IC8vIGFub24gbmFtZXNw YWNlCj4+PisKPj4+K3J0bF9vcHRfcGFzcyAqCj4+PittYWtlX3Bhc3NfemNtcF9wb3ByZXQgKGdj Yzo6Y29udGV4dCAqY3R4dCkKPj4+K3sKPj4+KyByZXR1cm4gbmV3IHBhc3NfemNtcF9wb3ByZXQg KGN0eHQpOwo+Pj4rfQo+Pj5kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5jYyBi L2djYy9jb25maWcvcmlzY3YvcmlzY3YuY2MKPj4+aW5kZXggNWY4Y2JmYzE1ZWQuLjE3ZGYyZjNm OGNmIDEwMDY0NAo+Pj4tLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmNjCj4+PisrKyBiL2dj Yy9jb25maWcvcmlzY3YvcmlzY3YuY2MKPj4+QEAgLTExNCw2ICsxMTQsOSBAQCBzdHJ1Y3QgR1RZ KCgpKSByaXNjdl9mcmFtZV9pbmZvIHsKPj4+IC8qIExpa2V3aXNlIEZQUiBYLiAqLwo+Pj4gdW5z aWduZWQgaW50IGZtYXNrOwo+Pj4KPj4+KyAvKiBIb3cgbXVjaCB0aGUgcHVzaC9wb3Agcm91dGlu ZXMgYWRqdXN0IHNwIChvciAwIGlmIHVudXNlZCkuICovCj4+PisgdW5zaWduZWQgcHVzaF9wb3Bf c3BfYWRqdXN0Owo+Pj4rCj4+PiAvKiBIb3cgbXVjaCB0aGUgR1BSIHNhdmUvcmVzdG9yZSByb3V0 aW5lcyBhZGp1c3Qgc3AgKG9yIDAgaWYgdW51c2VkKS4gKi8KPj4+IHVuc2lnbmVkIHNhdmVfbGli Y2FsbF9hZGp1c3RtZW50Owo+Pj4KPj4+QEAgLTQwMSw2ICs0MDQsMjAgQEAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGdwcl9zYXZlX3JlZ19vcmRlcltdID0gewo+Pj4gUzEwX1JFR05VTSwgUzExX1JF R05VTQo+Pj4gfTsKPj4+Cj4+PisvKiBPcmRlciBmb3IgdGhlIENMT0JCRVJzL1VTRXMgb2YgcHVz aC9wb3AuICovCj4+PitzdGF0aWMgY29uc3QgdW5zaWduZWQgcHVzaF9zYXZlX3JlZ19vcmRlcltd ID0gewo+Pj4rIElOVkFMSURfUkVHTlVNLCBSRVRVUk5fQUREUl9SRUdOVU0sIFMwX1JFR05VTSwK Pj4+KyBTMV9SRUdOVU0sIFMyX1JFR05VTSwgUzNfUkVHTlVNLCBTNF9SRUdOVU0sCj4+PisgUzVf UkVHTlVNLCBTNl9SRUdOVU0sIFM3X1JFR05VTSwgUzhfUkVHTlVNLAo+Pj4rIFM5X1JFR05VTSwg UzEwX1JFR05VTSwgUzExX1JFR05VTQo+Pj4rfTsKPj4+Kwo+Pj4rLyogT3JkZXIgZm9yIHRoZSBD TE9CQkVScy9VU0VzIG9mIHB1c2gvcG9wIGluIHJ2ZS4gKi8KPj4+K3N0YXRpYyBjb25zdCB1bnNp Z25lZCBwdXNoX3NhdmVfcmVnX29yZGVyX3pjbXBlW10gPSB7Cj4+PisgSU5WQUxJRF9SRUdOVU0s IFJFVFVSTl9BRERSX1JFR05VTSwgUzBfUkVHTlVNLAo+Pj4rIFMxX1JFR05VTQo+Pj4rfTsKPj4+ Kwo+Pj4gLyogQSB0YWJsZSBkZXNjcmliaW5nIGFsbCB0aGUgcHJvY2Vzc29ycyBHQ0Mga25vd3Mg YWJvdXQuICovCj4+PiBzdGF0aWMgY29uc3Qgc3RydWN0IHJpc2N2X3R1bmVfaW5mbyByaXNjdl90 dW5lX2luZm9fdGFibGVbXSA9IHsKPj4+ICNkZWZpbmUgUklTQ1ZfVFVORShUVU5FX05BTUUsIFBJ UEVMSU5FX01PREVMLCBUVU5FX0lORk8pIFwKPj4+QEAgLTI5ODksNiArMzAwNiwxNyBAQCByaXNj dl9vdXRwdXRfcmV0dXJuICgpCj4+PiByZXR1cm4gInJldCI7Cj4+PiB9Cj4+Pgo+Pj4rYm9vbAo+ Pj4rcmlzY3Zfb3V0cHV0X3BvcHJldF9wIChydHggb3ApCj4+Pit7Cj4+PisgdW5zaWduZWQgbl9y dHggPSBYVkVDTEVOIChvcCwgMCk7Cj4+PisgcnR4IHVzZSA9IFhWRUNFWFAgKG9wLCAwLCBuX3J0 eCAtIDEpOwo+Pj4rIHJ0eCByZXQgPSBYVkVDRVhQIChvcCwgMCwgbl9ydHggLSAyKTsKPj4+Kwo+ Pj4rIHJldHVybiBHRVRfQ09ERSAocmV0KSA9PSBTSU1QTEVfUkVUVVJOCj4+PisgJiYgR0VUX0NP REUgKHVzZSkgPT0gVVNFOwo+Pj4rfQo+Pj4rCj4+Pgo+Pj4KPj4+IC8qIFJldHVybiB0cnVlIGlm IENNUDEgaXMgYSBzdWl0YWJsZSBzZWNvbmQgb3BlcmFuZCBmb3IgaW50ZWdlciBvcmRlcmluZwo+ Pj4gdGVzdCBDT0RFLiBTZWUgYWxzbyB0aGUgKnNDQyBwYXR0ZXJucyBpbiByaXNjdi5tZC4gKi8K Pj4+QEAgLTQzMDYsNiArNDMzNCw3NCBAQCByaXNjdl9tZW1tb2RlbF9uZWVkc19hbW9fYWNxdWly ZSAoZW51bSBtZW1tb2RlbCBtb2RlbCkKPj4+IH0KPj4+IH0KPj4+Cj4+PisvKiBQcmludCBTcCBh ZGp1c3RtZW50IGZpZWxkIG9mIHBvcCBpbnN0cnVjdGlvbi4gKi8KPj4+Kwo+Pj4rc3RhdGljIHZv aWQKPj4+K3Jpc2N2X3ByaW50X3BvcF9zaXplIChGSUxFICpmaWxlLCBydHggb3ApCj4+Pit7Cj4+ PisgdW5zaWduZWQgc3BfYWRqdXN0X2lkeCA9IFhWRUNMRU4gKG9wLCAwKSAtIDE7Cj4+PisgcnR4 IHNwX2FkanVzdF9ydHggPSBYVkVDRVhQIChvcCwgMCwgc3BfYWRqdXN0X2lkeCk7Cj4+PisKPj4+ KyAvKiBTa2lwIHJldCBvciBwYXR0ZXJuLiAqLwo+Pj4rIHdoaWxlIChHRVRfQ09ERSAoc3BfYWRq dXN0X3J0eCkgIT0gU0VUKQo+Pj4rIHNwX2FkanVzdF9ydHggPSBYVkVDRVhQIChvcCwgMCwgLS1z cF9hZGp1c3RfaWR4KTsKPj4+Kwo+Pj4rIHJ0eCBlbHRfcGx1cyA9IFNFVF9TUkMgKHNwX2FkanVz dF9ydHgpOwo+Pj4rIGZwcmludGYgKGZpbGUsICIlbGQiLCBJTlRWQUwgKFhFWFAgKGVsdF9wbHVz LCAxKSkpOwo+Pj4rfQo+Pj4rCj4+PisvKiBQcmludCBwdXNoL3BvcCByZWdpc3RlciBsaXN0LiAq Lwo+Pj4rCj4+PitzdGF0aWMgdm9pZAo+Pj4rcmlzY3ZfcHJpbnRfcmVnbGlzdCAoRklMRSAqZmls ZSwgcnR4IG9wKQo+Pj4rewo+Pj4rIC8qIHdlIG9ubHkgZGVhbCB3aXRoIHRocmVlIGZvcm1hdHM6 Cj4+PisgcHVzaCB7cmF9Cj4+PisgcHVzaCB7cmEsIHMwfQo+Pj4rIHB1c2gge3JhLCBzMC1zTn0K Pj4+KyBvcgo+Pj4rIHBvcCB7cmF9Cj4+PisgcG9wIHtyYSwgczB9Cj4+PisgcG9wIHtyYSwgczAt c059Cj4+PisgcmVnaXN0ZXJzIGV4Y2VwdCByYSBoYXMgdG8gYmUgY29udGludW91cyBzLXJlZ2lz dGVyLAo+Pj4rIGFuZCBpdCBpcyBzdXBwb3NlZCB0byBiZSBjaGVja2VkIGJlZm9yZS4KPj4+KyBy ZWdpc3RlciBsaXN0IHBhdHRlcm5zIGluIHB1c2g6Cj4+PisgKHNldC9mIChtZW0vYzpTSQo+Pj4r IChwbHVzOlNJIChyZWcvZjpTSSAyIHNwKQo+Pj4rIChjb25zdF9pbnQgMjggWzB4MWNdKSkgWzIg UzQgQTMyXSkKPj4+KyAocmVnOlNJIDEgcmEpKQo+Pj4rIHJlZ2lzdGVyIGxpc3QgcGF0dGVybnMg aW4gcG9wOgo+Pj4rIChzZXQvZiAocmVnOkRJIDEgcmEpCj4+PisgKG1lbS9jOkRJIChwbHVzOkRJ IChyZWcvZjpESSAyIHNwKQo+Pj4rIChjb25zdF9pbnQgOCBbMHg4XSkpIFsyIFM4IEE2NF0pKQo+ Pj4rICovCj4+PisgaW50IHRvdGFsX2NvdW50ID0gWFZFQ0xFTiAob3AsIDApOwo+Pj4rIGludCBu X3JlZ3MgPSAwOwo+Pj4rIGJvb2wgcHVzaF9wID0gR0VUX0NPREUgKFhWRUNFWFAgKG9wLCAwLCAw KSkgPT0gU0VUCj4+PisgJiYgR0VUX0NPREUgKFNFVF9TUkMgKFhWRUNFWFAgKG9wLCAwLCAwKSkp ID09IFBMVVM7Cj4+PisKPj4+KyBmb3IgKGludCBpZHggPSAwOyBpZHggPCB0b3RhbF9jb3VudDsg KytpZHgpCj4+Pisgewo+Pj4rIHJ0eCBlbGUgPSBYVkVDRVhQIChvcCwgMCwgaWR4KTsKPj4+KyBp ZiAoR0VUX0NPREUgKGVsZSkgIT0gU0VUKQo+Pj4rIGNvbnRpbnVlOwo+Pj4rCj4+PisgYm9vbCBy ZXN0b3JlX3NhdmVfcCA9IHB1c2hfcCA/Cj4+PisgTUVNX1AgKFNFVF9ERVNUIChlbGUpKSA6Cj4+ PisgTUVNX1AgKFNFVF9TUkMgKGVsZSkpOwo+Pj4rCj4+PisgaWYgKHJlc3RvcmVfc2F2ZV9wKQo+ Pj4rIG5fcmVncyArKzsKPj4+KyB9Cj4+PisKPj4+KyBpZiAobl9yZWdzID4gMikKPj4+KyBmcHJp bnRmIChmaWxlLCAicmEsczAtcyV1Iiwgbl9yZWdzIC0gMik7Cj4+PisgZWxzZSBpZiAobl9yZWdz ID4gMSkKPj4+KyBmcHJpbnRmIChmaWxlLCAicmEsczAiKTsKPj4+KyBlbHNlCj4+PisgZnB1dHMo InJhIiwgZmlsZSk7Cj4+Pit9Cj4+PisKPj4+IC8qIFJldHVybiB0cnVlIGlmIGEgRkVOQ0Ugc2hv dWxkIGJlIGVtaXR0ZWQgdG8gYmVmb3JlIGEgbWVtb3J5IGFjY2VzcyB0bwo+Pj4gaW1wbGVtZW50 IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgbWVtb3J5IG1vZGVsIE1PREVMLiAqLwo+Pj4KPj4+QEAg LTQ1MTcsNiArNDYxMywxNCBAQCByaXNjdl9wcmludF9vcGVyYW5kIChGSUxFICpmaWxlLCBydHgg b3AsIGludCBsZXR0ZXIpCj4+PiBmcHV0cyAoR0VUX1JUWF9OQU1FIChjb2RlKSwgZmlsZSk7Cj4+ PiBicmVhazsKPj4+Cj4+PisgY2FzZSAnTCc6Cj4+PisgcmlzY3ZfcHJpbnRfcmVnbGlzdCAoZmls ZSwgb3ApOwo+Pj4rIGJyZWFrOwo+Pj4rCj4+PisgY2FzZSAncyc6Cj4+PisgcmlzY3ZfcHJpbnRf cG9wX3NpemUgKGZpbGUsIG9wKTsKPj4+KyBicmVhazsKPj4+Kwo+Pj4gY2FzZSAnUyc6Cj4+PiB7 Cj4+PiBydHggbmV3b3AgPSBHRU5fSU5UIChjdHpfaHdpIChJTlRWQUwgKG9wKSkpOwo+Pj5AQCAt NDc3Nyw2ICs0ODgxLDY2IEBAIHJpc2N2X3VzZV9zYXZlX2xpYmNhbGwgKGNvbnN0IHN0cnVjdCBy aXNjdl9mcmFtZV9pbmZvCj4+PipmcmFtZSkKPj4+IHJldHVybiBmcmFtZS0+c2F2ZV9saWJjYWxs X2FkanVzdG1lbnQgIT0gMDsKPj4+IH0KPj4+Cj4+PisvKiBEZXRlcm1pbmUgaG93IG1hbnkgaW5z dHJ1Y3Rpb25zIHJlbGF0ZWQgdG8gcHVzaC9wb3AgaW5zdHJ1Y3Rpb25zLiAqLwo+Pj4rCj4+Pitz dGF0aWMgdW5zaWduZWQKPj4+K3Jpc2N2X3NhdmVfcHVzaF9wb3BfY291bnQgKHVuc2lnbmVkIG1h c2spCj4+Pit7Cj4+PisgaWYgKCFCSVRTRVRfUCAobWFzaywgR1BfUkVHX0ZJUlNUICsgUkVUVVJO X0FERFJfUkVHTlVNKSkKPj4+KyByZXR1cm4gMDsKPj4+KyBmb3IgKHVuc2lnbmVkIG4gPSBHUF9S RUdfTEFTVDsgbiA+IEdQX1JFR19GSVJTVDsgbi0tKQo+Pj4rIGlmIChCSVRTRVRfUCAobWFzaywg bikKPj4+KyAmJiAhY2FsbF91c2VkX3JlZ3MgW25dKQo+Pj4rIC8qIGFkZCByYSBzYXZpbmcgYW5k IHNwIGFkanVzdC4gKi8KPj4+KyByZXR1cm4gQ0FMTEVFX1NBVkVEX1JFR19OVU1CRVIgKG4pICsg MSArIDI7Cj4+PisgYWJvcnQgKCk7Cj4+Pit9Cj4+PisKPj4+Ky8qIENhbGN1bGF0ZSB0aGUgbWF4 aW11bSBzcCBhZGp1c3RtZW50IG9mIHB1c2gvcG9wIGluc3RydWN0aW9uLiAqLwo+Pj4rCj4+Pitz dGF0aWMgdW5zaWduZWQKPj4+K3Jpc2N2X3B1c2hfcG9wX2Jhc2Vfc3BfYWRqdXN0ICh1bnNpZ25l ZCBtYXNrKQo+Pj4rewo+Pj4rIHVuc2lnbmVkIG5fcmVncyA9IHJpc2N2X3NhdmVfcHVzaF9wb3Bf Y291bnQgKG1hc2spIC0gMTsKPj4+KyByZXR1cm4gKG5fcmVncyAqIFVOSVRTX1BFUl9XT1JEICsg MTUpICYgKH4weGYpOwo+Pj4rfQo+Pj4rCj4+PisvKiBEZXRlcm1pbmUgd2hldGhlciB0byBjYWxs IHB1c2gvcG9wIHJvdXRpbmVzLiAqLwo+Pj4rCj4+PitzdGF0aWMgYm9vbAo+Pj4rcmlzY3ZfdXNl X3B1c2hfcG9wIChjb25zdCBzdHJ1Y3QgcmlzY3ZfZnJhbWVfaW5mbyAqZnJhbWUsIGNvbnN0IEhP U1RfV0lERV9JTlQKPj4+ZnJhbWVfc2l6ZSkKPj4+K3sKPj4+KyBpZiAoIVRBUkdFVF9aQ01QKQo+ Pj4rIHJldHVybiBmYWxzZTsKPj4+Kwo+Pj4rIC8qIFdlIGRvIG5vdCBoYW5kbGVyIHZhcmlhYmxl IGFyZ3VtZW50IGNhc2VzIGN1cnJlbnRseS4gKi8KPj4+KyBpZiAoY2Z1bi0+bWFjaGluZS0+dmFy YXJnc19zaXplICE9IDApCj4+PisgcmV0dXJuIGZhbHNlOwo+Pj4rCj4+PisgSE9TVF9XSURFX0lO VCBiYXNlX3NpemUgPSByaXNjdl9wdXNoX3BvcF9iYXNlX3NwX2FkanVzdCAoZnJhbWUtPm1hc2sp Owo+Pj4rIC8qCj4+PisgUHIgOTYwMjE1LTEuYyBpbiBydjY0IG91cHV0cwo+Pj4rCj4+PisgYWRk aSBzcCxzcCwtMzIKPj4+KyBzZCByYSwyNChzcCkKPj4+KyBzZCBzMCwxNihzcCkKPj4+KyBzZCBz Miw4KHNwKQo+Pj4rIHNkIHMzLDAoc3ApCj4+PisgaXQgaXMgYSByYXJlIGNhc2UgdGhhdCBjYWxs ZWUgc2F2ZWQgcmVnaXN0ZXJzIGFyZSBub3Qgbm9uLWNvbnRpbm91cywKPj4+KyB3aGljaCBicmVh a3MgdGhlIG9sZCBwdXNoIGltcGxlbWVudGF0aW9uLCBhbmQgd2UganVzdCByZWplY3QgdGhpcyBj YXNlCj4+PisgbGlrZSBzYXZlLXJlc3RvcmUgZG9lcyBub3cuCj4+PisgKi8KPj4+KyBpZiAoYmFz ZV9zaXplID4gZnJhbWVfc2l6ZSkKPj4+KyByZXR1cm4gZmFsc2U7Cj4+PisKPj4+KyAvKiB7cmEs czAtczEwfSBpcyBpbnZhbGlkLiAqLwo+Pj4rIGlmIChmcmFtZS0+bWFzayAmICgxIDw8IChTMTBf UkVHTlVNIC0gR1BfUkVHX0ZJUlNUKSkKPj4+KyAmJiAhKGZyYW1lLT5tYXNrICYgKDEgPDwgKFMx MV9SRUdOVU0gLSBHUF9SRUdfRklSU1QpKSkpCj4+PisgcmV0dXJuIGZhbHNlOwo+Pj4rCj4+Pisg cmV0dXJuIGZyYW1lLT5tYXNrICYgKDEgPDwgKFJFVFVSTl9BRERSX1JFR05VTSAtIEdQX1JFR19G SVJTVCkpOwo+Pj4rfQo+Pj4rCj4+PiAvKiBEZXRlcm1pbmUgd2hpY2ggR1BSIHNhdmUvcmVzdG9y ZSByb3V0aW5lIHRvIGNhbGwuICovCj4+Pgo+Pj4gc3RhdGljIHVuc2lnbmVkCj4+PkBAIC00OTM0 LDYgKzUwOTgsOCBAQCByaXNjdl9jb21wdXRlX2ZyYW1lX2luZm8gKHZvaWQpCj4+PiAvKiBPbmx5 IHVzZSBzYXZlL3Jlc3RvcmUgcm91dGluZXMgd2hlbiB0aGUgR1BScyBhcmUgYXRvcCB0aGUgZnJh bWUuICovCj4+PiBpZiAoa25vd25fbmUgKGZyYW1lLT5oYXJkX2ZyYW1lX3BvaW50ZXJfb2Zmc2V0 LCBmcmFtZS0+dG90YWxfc2l6ZSkpCj4+PiBmcmFtZS0+c2F2ZV9saWJjYWxsX2FkanVzdG1lbnQg PSAwOwo+Pj4rCj4+PisgZnJhbWUtPnB1c2hfcG9wX3NwX2FkanVzdCA9IDA7Cj4+PiB9Cj4+Pgo+ Pj4gLyogTWFrZSBzdXJlIHRoYXQgd2UncmUgbm90IHRyeWluZyB0byBlbGltaW5hdGUgdG8gdGhl IHdyb25nIGhhcmQgZnJhbWUKPj4+QEAgLTUxNzEsNiArNTMzNyw4NiBAQCByaXNjdl9mb3JfZWFj aF9zYXZlZF9yZWcgKHBvbHlfaW50NjQgc3Bfb2Zmc2V0LAo+Pj5yaXNjdl9zYXZlX3Jlc3RvcmVf Zm4gZm4sCj4+PiB9Cj4+PiB9Cj4+Pgo+Pj4rc3RhdGljIHZvaWQKPj4+K3Jpc2N2X2VtaXRfcG9w X2luc24gKHN0cnVjdCByaXNjdl9mcmFtZV9pbmZvICpmcmFtZSwgSE9TVF9XSURFX0lOVCBvZmZz ZXQsCj4+PkhPU1RfV0lERV9JTlQgc2l6ZSkKPj4+K3sKPj4+KyB1bnNpZ25lZCBpbnQgdmVjbGVu ID0gcmlzY3Zfc2F2ZV9wdXNoX3BvcF9jb3VudCAoZnJhbWUtPm1hc2spOwo+Pj4rIHVuc2lnbmVk IGludCBuX3JlZyA9IHZlY2xlbiAtIDE7Cj4+PisgcnR2ZWMgdmVjID0gcnR2ZWNfYWxsb2MgKHZl Y2xlbik7Cj4+PisgSE9TVF9XSURFX0lOVCBzcF9hZGp1c3Q7Cj4+PisgcnR4IGR3YXJmID0gTlVM TF9SVFg7Cj4+PisKPj4+KyBjb25zdCB1bnNpZ25lZCAqcmVnX29yZGVyID0gKFRBUkdFVF9aQ01Q ICYmIFRBUkdFVF9SVkUpCj4+PisgPyBwdXNoX3NhdmVfcmVnX29yZGVyX3pjbXBlCj4+PisgOiBw dXNoX3NhdmVfcmVnX29yZGVyOwo+Pj4rCj4+PisgZ2NjX2Fzc2VydCAobl9yZWcgPj0gMQo+Pj4r ICYmIFRBUkdFVF9aQ01QCj4+PisgJiYgKChUQVJHRVRfUlZFICYmIChuX3JlZyA8PSBBUlJBWV9T SVpFIChwdXNoX3NhdmVfcmVnX29yZGVyX3pjbXBlKSkpCj4+PisgfHwgKFRBUkdFVF9aQ01QICYm IChuX3JlZyA8PSBBUlJBWV9TSVpFIChwdXNoX3NhdmVfcmVnX29yZGVyKSkpKSk7Cj4+PisKPj4+ KyAvKiBzcCBhZGp1c3QgcGF0dGVybiAqLwo+Pj4rIGludCBtYXhfYWxsb3dfc3BfYWRqdXN0ID0g cmlzY3ZfcHVzaF9wb3BfYmFzZV9zcF9hZGp1c3QgKGZyYW1lLT5tYXNrKSArIDQ4Owo+Pj4rIGlu dCBhbGlnbmVkX3NpemUgPSBzaXplOwo+Pj4rCj4+PisgLyogaWYgc3AgYWRqdXN0bWVudCBpcyB0 b28gbGFyZ2UsIHdlIHNob3VsZCBzcGxpdCBpdCBmaXJzdC4gKi8KPj4+KyBpZiAoYWxpZ25lZF9z aXplID4gbWF4X2FsbG93X3NwX2FkanVzdCkKPj4+KyB7Cj4+PisgcnR4IGR3YXJmX3ByZV9zcF9h ZGp1c3QgPSBOVUxMX1JUWDsKPj4+KyBydHggcHJlX2FkanVzdF9ydHggPSBnZW5fYWRkM19pbnNu IChzdGFja19wb2ludGVyX3J0eCwKPj4+KyBzdGFja19wb2ludGVyX3J0eCwKPj4+KyBHRU5fSU5U IChhbGlnbmVkX3NpemUgLSBtYXhfYWxsb3dfc3BfYWRqdXN0KSk7Cj4+PisgcnR4IGluc24gPSBl bWl0X2luc24gKHByZV9hZGp1c3RfcnR4KTsKPj4+Kwo+Pj4rIHJ0eCBjZmFfcHJlX2FkanVzdF9y dHggPSBnZW5fcnR4X1BMVVMgKFBtb2RlLCBzdGFja19wb2ludGVyX3J0eCwKPj4+KyBHRU5fSU5U IChhbGlnbmVkX3NpemUgLSBtYXhfYWxsb3dfc3BfYWRqdXN0KSk7Cj4+PisgZHdhcmZfcHJlX3Nw X2FkanVzdCA9IGFsbG9jX3JlZ19ub3RlIChSRUdfQ0ZBX0RFRl9DRkEsCj4+PisgY2ZhX3ByZV9h ZGp1c3RfcnR4LAo+Pj4rIGR3YXJmX3ByZV9zcF9hZGp1c3QpOwo+Pj4rCj4+PisgUlRYX0ZSQU1F X1JFTEFURURfUCAoaW5zbikgPSAxOwo+Pj4rIFJFR19OT1RFUyAoaW5zbikgPSBkd2FyZl9wcmVf c3BfYWRqdXN0Owo+Pj4rCj4+Pisgc3BfYWRqdXN0ID0gbWF4X2FsbG93X3NwX2FkanVzdDsKPj4+ KyB9Cj4+PisgZWxzZQo+Pj4rIHNwX2FkanVzdCA9IChhbGlnbmVkX3NpemUgKyAxNSkgJiAofjB4 Zik7Cj4+PisKPj4+KyAvKiByZWdpc3RlciBzYXZlIHNlcXVlbmNlLiAqLwo+Pj4rIGZvciAodW5z aWduZWQgaSA9IDE7IGkgPCB2ZWNsZW47ICsraSkKPj4+KyB7Cj4+Pisgb2Zmc2V0IC09IFVOSVRT X1BFUl9XT1JEOwo+Pj4rIHVuc2lnbmVkIHJlZ25vID0gcmVnX29yZGVyW2ldOwo+Pj4rIHJ0eCBy ZWcgPSBnZW5fcnR4X1JFRyAoUG1vZGUsIHJlZ25vKTsKPj4+KyBydHggbWVtID0gZ2VuX2ZyYW1l X21lbSAoUG1vZGUsIHBsdXNfY29uc3RhbnQgKFBtb2RlLAo+Pj4rIHN0YWNrX3BvaW50ZXJfcnR4 LAo+Pj4rIG9mZnNldCkpOwo+Pj4rIHJ0eCBzZXQgPSBnZW5fcnR4X1NFVCAocmVnLCBtZW0pOwo+ Pj4rIFJUVkVDX0VMVCAodmVjLCBpIC0gMSkgPSBzZXQ7Cj4+PisgUlRYX0ZSQU1FX1JFTEFURURf UCAoc2V0KSA9IDE7Cj4+PisgZHdhcmYgPSBhbGxvY19yZWdfbm90ZSAoUkVHX0NGQV9SRVNUT1JF LCByZWcsIGR3YXJmKTsKPj4+KyB9Cj4+PisKPj4+KyAvKiBzcCBhZGp1c3QgcGF0dGVybiAqLwo+ Pj4rIHJ0eCBhZGp1c3Rfc3BfcnR4Cj4+PisgPSBnZW5fcnR4X1NFVCAoc3RhY2tfcG9pbnRlcl9y dHgsCj4+PisgcGx1c19jb25zdGFudCAoUG1vZGUsCj4+Pisgc3RhY2tfcG9pbnRlcl9ydHgsCj4+ Pisgc3BfYWRqdXN0KSk7Cj4+PisgUlRWRUNfRUxUICh2ZWMsIHZlY2xlbiAtIDEpID0gYWRqdXN0 X3NwX3J0eDsKPj4+Kwo+Pj4rIHJ0eCBjZmFfYWRqdXN0X3J0eCA9IGdlbl9ydHhfUExVUyAoUG1v ZGUsIHN0YWNrX3BvaW50ZXJfcnR4LAo+Pj4rIGNvbnN0MF9ydHgpOwo+Pj4rIGR3YXJmID0gYWxs b2NfcmVnX25vdGUgKFJFR19DRkFfREVGX0NGQSwgY2ZhX2FkanVzdF9ydHgsIGR3YXJmKTsKPj4+ Kwo+Pj4rIGZyYW1lLT5ncF9zcF9vZmZzZXQgLT0gKHZlY2xlbiAtIDEpICogVU5JVFNfUEVSX1dP UkQ7Cj4+PisgZnJhbWUtPnB1c2hfcG9wX3NwX2FkanVzdCA9IHNwX2FkanVzdDsKPj4+Kwo+Pj4r IHJ0eCBpbnNuID0gZW1pdF9pbnNuIChnZW5fcnR4X1BBUkFMTEVMIChWT0lEbW9kZSwgdmVjKSk7 Cj4+PisgUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAxOwo+Pj4rIFJFR19OT1RFUyAoaW5z bikgPSBkd2FyZjsKPj4+K30KPj4+Kwo+Pj4gLyogRm9yIHN0YWNrIGZyYW1lcyB0aGF0IGNhbid0 IGJlIGFsbG9jYXRlZCB3aXRoIGEgc2luZ2xlIEFEREkgaW5zdHJ1Y3Rpb24sCj4+PiBjb21wdXRl IHRoZSBiZXN0IHZhbHVlIHRvIGluaXRpYWxseSBhbGxvY2F0ZS4gSXQgbXVzdCBhdCBhIG1pbmlt dW0KPj4+IGFsbG9jYXRlIGVub3VnaCBzcGFjZSB0byBzcGlsbCB0aGUgY2FsbGVlLXNhdmVkIHJl Z2lzdGVycy4gSWYgVEFSR0VUX1JWQywKPj4+QEAgLTUyNzAsNiArNTUxNiwxNDYgQEAgcmlzY3Zf ZW1pdF9zdGFja190aWUgKHZvaWQpCj4+PiBlbWl0X2luc24gKGdlbl9zdGFja190aWVkaSAoc3Rh Y2tfcG9pbnRlcl9ydHgsIGhhcmRfZnJhbWVfcG9pbnRlcl9ydHgpKTsKPj4+IH0KPj4+Cj4+Piti b29sCj4+PityaXNjdl9jaGVja19yZWdubyhydHggcGF0LCB1bnNpZ25lZCByZWdubykKPj4+K3sK Pj4+KyByZXR1cm4gUkVHX1AgKHBhdCkKPj4+KyAmJiBSRUdOTyAocGF0KSA9PSByZWdubzsKPj4+ K30KPj4+Kwo+Pj4rLyogRnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciB0aGUgT1AgaXMgYSB2YWxp ZCBzdGFjayBwdXNoL3BvcCBvcGVyYXRpb24uCj4+PisgVGhpcyBwYXJ0IGlzIGJvcnJvd2VkIGZy b20gbmRzMzIgbmRzMzJfdmFsaWRfc3RhY2tfcHVzaF9wb3BfcCAqLwo+Pj4rCj4+Pitib29sCj4+ PityaXNjdl92YWxpZF9zdGFja19wdXNoX3BvcF9wIChydHggb3AsIGJvb2wgcHVzaF9wKQo+Pj4r ewo+Pj4rIGludCBpbmRleDsKPj4+KyBpbnQgdG90YWxfY291bnQ7Cj4+PisgaW50IHNwX2FkanVz dF9ydHhfaW5kZXg7Cj4+PisgcnR4IGVsdDsKPj4+KyBydHggZWx0X3JlZzsKPj4+KyBydHggZWx0 X3BsdXM7Cj4+PisKPj4+KyBpZiAoIVRBUkdFVF9aQ01QKQo+Pj4rIHJldHVybiBmYWxzZTsKPj4+ Kwo+Pj4rIHRvdGFsX2NvdW50ID0gWFZFQ0xFTiAob3AsIDApOwo+Pj4rIHNwX2FkanVzdF9ydHhf aW5kZXggPSBwdXNoX3AgPyAwIDogdG90YWxfY291bnQgLSAxOwo+Pj4rCj4+PisgLyogQXQgbGVh c3Qgc3AgKyBvbmUgY2FsbGVlIHNhdmUvcmVzdG9yZSByZWdpc3RlciBydHggKi8KPj4+KyBpZiAo dG90YWxfY291bnQgPCAyKQo+Pj4rIHJldHVybiBmYWxzZTsKPj4+Kwo+Pj4rIC8qIFBlcmZvcm0g c29tZSBxdWljayBjaGVjayBmb3IgdGhhdCBldmVyeSBlbGVtZW50IHNob3VsZCBiZSAnc2V0JywK Pj4+KyBmb3IgcG9wLCBpdCBtaWdodCBjb250YWluIGByZXRgIGFuZCBgcmV0IHZhbHVlYCBwYXR0 ZXJuLiAqLwo+Pj4rIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRvdGFsX2NvdW50OyBpbmRleCsr KQo+Pj4rIHsKPj4+KyBlbHQgPSBYVkVDRVhQIChvcCwgMCwgaW5kZXgpOwo+Pj4rCj4+PisgLyog c2tpcCBwb3AgcmV0dXJuIHZhbHVlIHJ0eCAqLwo+Pj4rIGlmICghcHVzaF9wICYmIEdFVF9DT0RF IChlbHQpID09IFNFVAo+Pj4rICYmIHJpc2N2X2NoZWNrX3JlZ25vIChTRVRfREVTVCAoZWx0KSwg UkVUVVJOX1ZBTFVFX1JFR05VTSkKPj4+KyAmJiB0b3RhbF9jb3VudCA+PSA0Cj4+PisgJiYgaW5k ZXggKyAxIDwgdG90YWxfY291bnQKPj4+KyAmJiBHRVRfQ09ERSAoWFZFQ0VYUCAob3AsIDAsIGlu ZGV4ICsgMSkpID09IFVTRSkKPj4+KyB7Cj4+PisgcnR4IHVzZV9yZWcgPSBYRVhQIChYVkVDRVhQ IChvcCwgMCwgaW5kZXggKyAxKSwgMCk7Cj4+PisKPj4+KyBpZiAoIXJpc2N2X2NoZWNrX3JlZ25v ICh1c2VfcmVnLCBSRVRVUk5fVkFMVUVfUkVHTlVNKSkKPj4+KyByZXR1cm4gZmFsc2U7Cj4+PisK Pj4+KyBpbmRleCArPSAxOwo+Pj4rIGNvbnRpbnVlOwo+Pj4rIH0KPj4+Kwo+Pj4rIC8qIHNraXAg cmV0IHJ0eCAqLwo+Pj4rIGlmICghcHVzaF9wICYmIEdFVF9DT0RFIChlbHQpID09IFNJTVBMRV9S RVRVUk4KPj4+KyAmJiB0b3RhbF9jb3VudCA+PSA0Cj4+PisgJiYgaW5kZXggKyAxIDwgdG90YWxf Y291bnQKPj4+KyAmJiBHRVRfQ09ERSAoWFZFQ0VYUCAob3AsIDAsIGluZGV4ICsgMSkpID09IFVT RSkKPj4+KyB7Cj4+PisgcnR4IHVzZV9yZWcgPSBYRVhQIChYVkVDRVhQIChvcCwgMCwgaW5kZXgg KyAxKSwgMCk7Cj4+PisKPj4+KyBpZiAoIXJpc2N2X2NoZWNrX3JlZ25vICh1c2VfcmVnLCBSRVRV Uk5fQUREUl9SRUdOVU0pKQo+Pj4rIHJldHVybiBmYWxzZTsKPj4+Kwo+Pj4rIGluZGV4ICs9IDE7 Cj4+Pisgc3BfYWRqdXN0X3J0eF9pbmRleCAtPSAyOwo+Pj4rIGNvbnRpbnVlOwo+Pj4rIH0KPj4+ Kwo+Pj4rIGlmIChHRVRfQ09ERSAoZWx0KSAhPSBTRVQpCj4+PisgcmV0dXJuIGZhbHNlOwo+Pj4r IH0KPj4+Kwo+Pj4rIGVsdCA9IFhWRUNFWFAgKG9wLCAwLCBzcF9hZGp1c3RfcnR4X2luZGV4KTsK Pj4+KyBlbHRfcmVnID0gU0VUX0RFU1QgKGVsdCk7Cj4+PisgZWx0X3BsdXMgPSBTRVRfU1JDIChl bHQpOwo+Pj4rCj4+PisgLyogQ2hlY2sgdGhpcyBpcyAoc2V0IChzdGFja19yZWcpIChwbHVzIHN0 YWNrX3JlZyBjb25zdCkpIHBhdHRlcm4uICovCj4+PisgaWYgKEdFVF9DT0RFIChlbHRfcGx1cykg IT0gUExVUwo+Pj4rIHx8ICFyaXNjdl9jaGVja19yZWdubyAoZWx0X3JlZywgU1RBQ0tfUE9JTlRF Ul9SRUdOVU0pKQo+Pj4rIHJldHVybiBmYWxzZTsKPj4+Kwo+Pj4rIC8qIFBhc3MgYWxsIHRlc3Qs IHRoaXMgaXMgYSB2YWxpZCBydHguICovCj4+PisgcmV0dXJuIHRydWU7Cj4+Pit9Cj4+PisKPj4+ Ky8qIEdlbmVyYXRlIHB1c2gvcG9wIHJ0eCAqLwo+Pj4rCj4+PitzdGF0aWMgdm9pZAo+Pj4rcmlz Y3ZfZW1pdF9wdXNoX2luc24gKHN0cnVjdCByaXNjdl9mcmFtZV9pbmZvICpmcmFtZSwgSE9TVF9X SURFX0lOVCBzaXplKQo+Pj4rewo+Pj4rIHVuc2lnbmVkIGludCB2ZWNsZW4gPSByaXNjdl9zYXZl X3B1c2hfcG9wX2NvdW50IChmcmFtZS0+bWFzayk7Cj4+PisgdW5zaWduZWQgaW50IG5fcmVnID0g dmVjbGVuIC0gMTsKPj4+KyBydHZlYyB2ZWMgPSBydHZlY19hbGxvYyAodmVjbGVuKTsKPj4+Kwo+ Pj4rIGNvbnN0IHVuc2lnbmVkICpyZWdfb3JkZXIgPSAoVEFSR0VUX1pDTVAgJiYgVEFSR0VUX1JW RSkKPj4+KyA/IHB1c2hfc2F2ZV9yZWdfb3JkZXJfemNtcGUKPj4+KyA6IHB1c2hfc2F2ZV9yZWdf b3JkZXI7Cj4+PisKPj4+KyBpbnQgYWxpZ25lZF9zaXplID0gKHNpemUgKyAxNSkgJiAofjB4Zik7 Cj4+PisKPj4+KyBnY2NfYXNzZXJ0IChuX3JlZyA+PSAxCj4+PisgJiYgVEFSR0VUX1pDTVAKPj4+ KyAmJiAoKFRBUkdFVF9SVkUgJiYgKG5fcmVnIDw9IEFSUkFZX1NJWkUgKHB1c2hfc2F2ZV9yZWdf b3JkZXJfemNtcGUpKSkKPj4+KyB8fCAoVEFSR0VUX1pDTVAgJiYgKG5fcmVnIDw9IEFSUkFZX1NJ WkUgKHB1c2hfc2F2ZV9yZWdfb3JkZXIpKSkpKTsKPj4+Kwo+Pj4rIC8qIHNwIGFkanVzdCBwYXR0 ZXJuICovCj4+PisgaW50IG1heF9hbGxvd19zcF9hZGp1c3QgPSByaXNjdl9wdXNoX3BvcF9iYXNl X3NwX2FkanVzdCAoZnJhbWUtPm1hc2spICsgNDg7Cj4+PisgaW50IHNwX2FkanVzdCA9IGFsaWdu ZWRfc2l6ZSA+IG1heF9hbGxvd19zcF9hZGp1c3QgPwo+Pj4rIG1heF9hbGxvd19zcF9hZGp1c3QK Pj4+KyA6IGFsaWduZWRfc2l6ZTsKPj4+Kwo+Pj4rIC8qVE9ETzogbW92ZSB0aGlzIHBhcnQgdG8g ZnJhbWUgY29tcHV0YXRpb24gZnVuY3Rpb24uICovCj4+PisgZnJhbWUtPmdwX3NwX29mZnNldCA9 ICh2ZWNsZW4gLSAxKSAqIFVOSVRTX1BFUl9XT1JEOwo+Pj4rIGZyYW1lLT5wdXNoX3BvcF9zcF9h ZGp1c3QgPSBzcF9hZGp1c3Q7Cj4+PisKPj4+KyBydHggYWRqdXN0X3NwX3J0eAo+Pj4rID0gZ2Vu X3J0eF9TRVQgKHN0YWNrX3BvaW50ZXJfcnR4LAo+Pj4rIHBsdXNfY29uc3RhbnQgKFBtb2RlLAo+ Pj4rIHN0YWNrX3BvaW50ZXJfcnR4LAo+Pj4rIC1zcF9hZGp1c3QpKTsKPj4+KyBSVFZFQ19FTFQg KHZlYywgMCkgPSBhZGp1c3Rfc3BfcnR4Owo+Pj4rCj4+PisgLyogUmVnaXN0ZXIgc2F2ZSBzZXF1 ZW5jZS4gKi8KPj4+KyBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgdmVjbGVuOyArK2kpCj4+Pisg ewo+Pj4rIHNwX2FkanVzdCAtPSBVTklUU19QRVJfV09SRDsKPj4+KyB1bnNpZ25lZCByZWdubyA9 IHJlZ19vcmRlcltpXTsKPj4+KyBydHggcmVnID0gZ2VuX3J0eF9SRUcgKFBtb2RlLCByZWdubyk7 Cj4+PisgcnR4IG1lbSA9IGdlbl9mcmFtZV9tZW0gKFBtb2RlLCBwbHVzX2NvbnN0YW50IChQbW9k ZSwKPj4+KyBzdGFja19wb2ludGVyX3J0eCwKPj4+KyBzcF9hZGp1c3QpKTsKPj4+KyBydHggc2V0 ID0gZ2VuX3J0eF9TRVQgKG1lbSwgcmVnKTsKPj4+KyBSVFZFQ19FTFQgKHZlYywgaSkgPSBzZXQ7 Cj4+PisgUlRYX0ZSQU1FX1JFTEFURURfUCAoc2V0KSA9IDE7Cj4+PisgfQo+Pj4rCj4+PisgcnR4 IGluc24gPSBlbWl0X2luc24gKGdlbl9ydHhfUEFSQUxMRUwgKFZPSURtb2RlLCB2ZWMpKTsKPj4+ KyBSVFhfRlJBTUVfUkVMQVRFRF9QIChpbnNuKSA9IDE7Cj4+Pit9Cj4+PisKPj4+IC8qIEV4cGFu ZCB0aGUgInByb2xvZ3VlIiBwYXR0ZXJuLiAqLwo+Pj4KPj4+IHZvaWQKPj4+QEAgLTUyNzgsNiAr NTY2NCw3IEBAIHJpc2N2X2V4cGFuZF9wcm9sb2d1ZSAodm9pZCkKPj4+IHN0cnVjdCByaXNjdl9m cmFtZV9pbmZvICpmcmFtZSA9ICZjZnVuLT5tYWNoaW5lLT5mcmFtZTsKPj4+IHBvbHlfaW50NjQg c2l6ZSA9IGZyYW1lLT50b3RhbF9zaXplOwo+Pj4gdW5zaWduZWQgbWFzayA9IGZyYW1lLT5tYXNr Owo+Pj4rIEhPU1RfV0lERV9JTlQgc3RlcDEgPSByaXNjdl9maXJzdF9zdGFja19zdGVwIChmcmFt ZSk7Cj4+PiBydHggaW5zbjsKPj4+Cj4+PiBpZiAoZmxhZ19zdGFja191c2FnZV9pbmZvKQo+Pj5A QCAtNTMwMCwxOSArNTY4NywzMiBAQCByaXNjdl9leHBhbmRfcHJvbG9ndWUgKHZvaWQpCj4+PiBS RUdfTk9URVMgKGluc24pID0gZHdhcmY7Cj4+PiB9Cj4+Pgo+Pj4rIGlmIChzaXplLmlzX2NvbnN0 YW50ICgpKQo+Pj4rIHN0ZXAxID0gTUlOIChzaXplLnRvX2NvbnN0YW50KCksIHN0ZXAxKTsKPj4+ KyBpZiAocmlzY3ZfdXNlX3B1c2hfcG9wIChmcmFtZSwgc3RlcDEpKQo+Pj4rIHsKPj4+KyByaXNj dl9lbWl0X3B1c2hfaW5zbiAoZnJhbWUsIHN0ZXAxKTsKPj4+Kwo+Pj4rIHN0ZXAxID0gTUFYIChz dGVwMSAtIGZyYW1lLT5wdXNoX3BvcF9zcF9hZGp1c3QsIDApOwo+Pj4rIHNpemUgPSBNQVggKHNp emUudG9fY29uc3RhbnQoKSAtIGZyYW1lLT5wdXNoX3BvcF9zcF9hZGp1c3QsIDApOwo+Pj4rIGZy YW1lLT5tYXNrICY9IH4gKChUQVJHRVRfWkNNUCAmJiBUQVJHRVRfUlZFKSA/Cj4+PisgUklTQ1Zf WkNNUEVfUFVTSF9QT1BfTUFTSwo+Pj4rIDogUklTQ1ZfWkNFX1BVU0hfUE9QX01BU0spOwo+Pj4r IH0KPj4+Kwo+Pj4gLyogU2F2ZSB0aGUgcmVnaXN0ZXJzLiAqLwo+Pj4gaWYgKChmcmFtZS0+bWFz ayB8IGZyYW1lLT5mbWFzaykgIT0gMCkKPj4+IHsKPj4+LSBIT1NUX1dJREVfSU5UIHN0ZXAxID0g cmlzY3ZfZmlyc3Rfc3RhY2tfc3RlcCAoZnJhbWUpOwo+Pj4tIGlmIChzaXplLmlzX2NvbnN0YW50 ICgpKQo+Pj4tIHN0ZXAxID0gTUlOIChzaXplLnRvX2NvbnN0YW50KCksIHN0ZXAxKTsKPj4+LQo+ Pj4tIGluc24gPSBnZW5fYWRkM19pbnNuIChzdGFja19wb2ludGVyX3J0eCwKPj4+LSBzdGFja19w b2ludGVyX3J0eCwKPj4+LSBHRU5fSU5UICgtc3RlcDEpKTsKPj4+LSBSVFhfRlJBTUVfUkVMQVRF RF9QIChlbWl0X2luc24gKGluc24pKSA9IDE7Cj4+Pi0gc2l6ZSAtPSBzdGVwMTsKPj4+LSByaXNj dl9mb3JfZWFjaF9zYXZlZF9yZWcgKHNpemUsIHJpc2N2X3NhdmVfcmVnLCBmYWxzZSwgZmFsc2Up Owo+Pj4rIGlmIChzdGVwMSA+IDApCj4+Pisgewo+Pj4rIGluc24gPSBnZW5fYWRkM19pbnNuIChz dGFja19wb2ludGVyX3J0eCwKPj4+KyBzdGFja19wb2ludGVyX3J0eCwKPj4+KyBHRU5fSU5UICgt c3RlcDEpKTsKPj4+KyBSVFhfRlJBTUVfUkVMQVRFRF9QIChlbWl0X2luc24gKGluc24pKSA9IDE7 Cj4+Pisgc2l6ZSAtPSBzdGVwMTsKPj4+KyB9Cj4+PisgcmlzY3ZfZm9yX2VhY2hfc2F2ZWRfcmVn IChzaXplLCByaXNjdl9zYXZlX3JlZywKPj4+KyBmYWxzZSAvKiBib29sIGVwaWxvZ3VlICovLCBm YWxzZSAvKiBib29sIG1heWJlX2VoX3JldHVybiAqLyk7Cj4+PiB9Cj4+Pgo+Pj4gZnJhbWUtPm1h c2sgPSBtYXNrOyAvKiBVbmRvIHRoZSBhYm92ZSBmaWIuICovCj4+PkBAIC01NDEyLDYgKzU4MTIs OCBAQCByaXNjdl9leHBhbmRfZXBpbG9ndWUgKGludCBzdHlsZSkKPj4+IHJ0eCByYSA9IGdlbl9y dHhfUkVHIChQbW9kZSwgUkVUVVJOX0FERFJfUkVHTlVNKTsKPj4+IHJ0eCBpbnNuOwo+Pj4KPj4+ KyBib29sIHVzZV96Y21wX3BvcCA9ICF1c2VfcmVzdG9yZV9saWJjYWxsICYmICEoY3J0bC0+Y2Fs bHNfZWhfcmV0dXJuKTsKPj4+Kwo+Pj4gLyogV2UgbmVlZCB0byBhZGQgbWVtb3J5IGJhcnJpZXIg dG8gcHJldmVudCByZWFkIGZyb20gZGVhbGxvY2F0ZWQgc3RhY2suICovCj4+PiBib29sIG5lZWRf YmFycmllcl9wID0ga25vd25fbmUgKGdldF9mcmFtZV9zaXplICgpCj4+PiArIGNmdW4tPm1hY2hp bmUtPmZyYW1lLmFyZ19wb2ludGVyX29mZnNldCwgMCk7Cj4+PkBAIC01NTM4LDYgKzU5NDAsMTgg QEAgcmlzY3ZfZXhwYW5kX2VwaWxvZ3VlIChpbnQgc3R5bGUpCj4+PiBpZiAodXNlX3Jlc3RvcmVf bGliY2FsbCkKPj4+IGZyYW1lLT5tYXNrID0gMDsgLyogVGVtcG9yYXJpbHkgZmliIHRoYXQgd2Ug bmVlZCBub3Qgc2F2ZSBHUFJzLiAqLwo+Pj4KPj4+KyBpZiAodXNlX3pjbXBfcG9wICYmIHJpc2N2 X3VzZV9wdXNoX3BvcCAoZnJhbWUsIHN0ZXAyKSkKPj4+KyB7Cj4+PisgLyogRW1pdCBhIGJhcnJp ZXIgdG8gcHJldmVudCBsb2FkcyBmcm9tIGEgZGVhbGxvY2F0ZWQgc3RhY2suICovCj4+Pisgcmlz Y3ZfZW1pdF9zdGFja190aWUgKCk7Cj4+PisgbmVlZF9iYXJyaWVyX3AgPSBmYWxzZTsKPj4+KyBy aXNjdl9lbWl0X3BvcF9pbnNuIChmcmFtZSwgZnJhbWUtPnRvdGFsX3NpemUudG9fY29uc3RhbnQo KSwgc3RlcDIpOwo+Pj4rIGZyYW1lLT5tYXNrICY9IH4gKChUQVJHRVRfWkNNUCAmJiBUQVJHRVRf UlZFKSA/Cj4+PisgUklTQ1ZfWkNNUEVfUFVTSF9QT1BfTUFTSwo+Pj4rIDogUklTQ1ZfWkNFX1BV U0hfUE9QX01BU0spOwo+Pj4rIHN0ZXAyID0gMDsKPj4+KyB9Cj4+PisKPj4+IC8qIFJlc3RvcmUg dGhlIHJlZ2lzdGVycy4gKi8KPj4+IHJpc2N2X2Zvcl9lYWNoX3NhdmVkX3JlZyAoZnJhbWUtPnRv dGFsX3NpemUgLSBzdGVwMiwgcmlzY3ZfcmVzdG9yZV9yZWcsCj4+PiB0cnVlLCBzdHlsZSA9PSBF WENFUFRJT05fUkVUVVJOKTsKPj4+QEAgLTU1NTIsNiArNTk2Niw5IEBAIHJpc2N2X2V4cGFuZF9l cGlsb2d1ZSAoaW50IHN0eWxlKQo+Pj4gaWYgKG5lZWRfYmFycmllcl9wKQo+Pj4gcmlzY3ZfZW1p dF9zdGFja190aWUgKCk7Cj4+Pgo+Pj4rIGlmICh1c2VfemNtcF9wb3ApCj4+PisgZnJhbWUtPm1h c2sgPSBtYXNrOwo+Pj4rCj4+PiAvKiBEZWFsbG9jYXRlIHRoZSBmaW5hbCBiaXQgb2YgdGhlIGZy YW1lLiAqLwo+Pj4gaWYgKHN0ZXAyID4gMCkKPj4+IHsKPj4+ZGlmZiAtLWdpdCBhL2djYy9jb25m aWcvcmlzY3YvcmlzY3YuaCBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YuaAo+Pj5pbmRleCBkMDVi MWQ1OTg1My4uNmU2ZTNlZTJjMjUgMTAwNjQ0Cj4+Pi0tLSBhL2djYy9jb25maWcvcmlzY3Yvcmlz Y3YuaAo+Pj4rKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmgKPj4+QEAgLTM4Myw2ICszODMs NyBAQCBBU01fTUlTQV9TUEVDCj4+PiAjZGVmaW5lIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0g OAo+Pj4gI2RlZmluZSBTVEFDS19QT0lOVEVSX1JFR05VTSAyCj4+PiAjZGVmaW5lIFRIUkVBRF9Q T0lOVEVSX1JFR05VTSA0Cj4+PisjZGVmaW5lIFJFVFVSTl9WQUxVRV9SRUdOVU0gMTAKPj4+Cj4+ PiAvKiBUaGVzZSB0d28gcmVnaXN0ZXJzIGRvbid0IHJlYWxseSBleGlzdDogdGhleSBnZXQgZWxp bWluYXRlZCB0byBlaXRoZXIKPj4+IHRoZSBzdGFjayBvciBoYXJkIGZyYW1lIHBvaW50ZXIuICov Cj4+PkBAIC0xMDk3LDQgKzEwOTgsNyBAQCBleHRlcm4gdm9pZCByaXNjdl9yZW1vdmVfdW5uZWVk ZWRfc2F2ZV9yZXN0b3JlX2NhbGxzCj4+Pih2b2lkKTsKPj4+ICNkZWZpbmUgRFdBUkZfUkVHX1RP X1VOV0lORF9DT0xVTU4oUkVHTk8pIFwKPj4+ICgoUkVHTk8gPT0gUklTQ1ZfRFdBUkZfVkxFTkIp ID8gKEZJUlNUX1BTRVVET19SRUdJU1RFUiArIDEpIDogUkVHTk8pCj4+Pgo+Pj4rI2RlZmluZSBS SVNDVl9aQ0VfUFVTSF9QT1BfTUFTSyAweDBmZmMwMzAydQo+Pj4rI2RlZmluZSBSSVNDVl9aQ01Q RV9QVVNIX1BPUF9NQVNLIDB4MzAydQo+Pj4rCj4+PiAjZW5kaWYgLyogISBHQ0NfUklTQ1ZfSCAq Lwo+Pj5kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5tZCBiL2djYy9jb25maWcv cmlzY3YvcmlzY3YubWQKPj4+aW5kZXggYmMzODRkOWFlZGYuLmI5ZjJhNDI2ZTQ4IDEwMDY0NAo+ Pj4tLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2Lm1kCj4+PisrKyBiL2djYy9jb25maWcvcmlz Y3YvcmlzY3YubWQKPj4+QEAgLTEwOCwxMiArMTA4LDE0IEBACj4+Pgo+Pj4gKGRlZmluZV9jb25z dGFudHMKPj4+IFsoUkVUVVJOX0FERFJfUkVHTlVNIDEpCj4+PisgKFNQX1JFR05VTSAyKQo+Pj4g KEdQX1JFR05VTSAzKQo+Pj4gKFRQX1JFR05VTSA0KQo+Pj4gKFQwX1JFR05VTSA1KQo+Pj4gKFQx X1JFR05VTSA2KQo+Pj4gKFMwX1JFR05VTSA4KQo+Pj4gKFMxX1JFR05VTSA5KQo+Pj4rIChBMF9S RUdOVU0gMTApCj4+PiAoUzJfUkVHTlVNIDE4KQo+Pj4gKFMzX1JFR05VTSAxOSkKPj4+IChTNF9S RUdOVU0gMjApCj4+PkBAIC0zMTQ3LDMgKzMxNDksNCBAQAo+Pj4gKGluY2x1ZGUgInNpZml2ZS03 Lm1kIikKPj4+IChpbmNsdWRlICJ0aGVhZC5tZCIpCj4+PiAoaW5jbHVkZSAidmVjdG9yLm1kIikK Pj4+KyhpbmNsdWRlICJ6Yy5tZCIpCj4+PmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Qt cmlzY3YgYi9nY2MvY29uZmlnL3Jpc2N2L3QtcmlzY3YKPj4+aW5kZXggNmUzMjZmYzdlMDIuLjll ZjUyMjMwNmE1IDEwMDY0NAo+Pj4tLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3QtcmlzY3YKPj4+Kysr IGIvZ2NjL2NvbmZpZy9yaXNjdi90LXJpc2N2Cj4+PkBAIC05MCw2ICs5MCwxMCBAQCByaXNjdi12 Lm86ICQoc3JjZGlyKS9jb25maWcvcmlzY3YvcmlzY3Ytdi5jYyBcCj4+PiAkKENPTVBJTEUpICQ8 Cj4+PiAkKFBPU1RDT01QSUxFKQo+Pj4KPj4+K3Jpc2N2LXpjbXAtcG9wcmV0Lm86ICQoc3JjZGly KS9jb25maWcvcmlzY3YvcmlzY3YtemNtcC1wb3ByZXQuY2MKPj4+KyAkKENPTVBJTEUpICQ8Cj4+ PisgJChQT1NUQ09NUElMRSkKPj4+Kwo+Pj4gdGhlYWQubzogJChzcmNkaXIpL2NvbmZpZy9yaXNj di90aGVhZC5jYyBcCj4+PiAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCAkKFRB UkdFVF9IKSBiYWNrZW5kLmggJChSVExfSCkgXAo+Pj4gbWVtbW9kZWwuaCAkKEVNSVRfUlRMX0gp IHBvbHktaW50Lmggb3V0cHV0LmgKPj4+ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3YvemMu bWQgYi9nY2MvY29uZmlnL3Jpc2N2L3pjLm1kCj4+Pm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+Pmlu ZGV4IDAwMDAwMDAwMDAwLi4zYWQzNGRhY2Q0OQo+Pj4tLS0gL2Rldi9udWxsCj4+PisrKyBiL2dj Yy9jb25maWcvcmlzY3YvemMubWQKPj4+QEAgLTAsMCArMSw0NyBAQAo+Pj4rOzsgTWFjaGluZSBk ZXNjcmlwdGlvbiBmb3IgWkNFIGV4dGVuc2lvbi4KPj4+Kzs7IENvcHlyaWdodCAoQykgMjAyMSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KPj4+Kwo+Pj4rOzsgVGhpcyBmaWxlIGlzIHBh cnQgb2YgR0NDLgo+Pj4rCj4+Pis7OyBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+Pj4rOzsgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPj4+Kzs7IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9w dGlvbikKPj4+Kzs7IGFueSBsYXRlciB2ZXJzaW9uLgo+Pj4rCj4+Pis7OyBHQ0MgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4+Kzs7IGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ Pis7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu IFNlZSB0aGUKPj4+Kzs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCj4+PisKPj4+Kzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4+Pis7OyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBm aWxlIENPUFlJTkczLiBJZiBub3Qgc2VlCj4+Pis7OyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCj4+PisKPj4+KyhkZWZpbmVfaW5zbiAiKnN0YWNrX3B1c2g8bW9kZT4iCj4+PisgWyht YXRjaF9wYXJhbGxlbCAwICJyaXNjdl9zdGFja19wdXNoX29wZXJhdGlvbiIKPj4+KyBbKHNldCAo cmVnOlggU1BfUkVHTlVNKSAocGx1czpYIChyZWc6WCBTUF9SRUdOVU0pCj4+PisgKG1hdGNoX29w ZXJhbmQ6WCAxICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpKSldKV0KPj4+KyAiVEFSR0VUX1pDTVAi Cj4+PisgImNtLnB1c2hcdHslTDB9LCUxIikKPj4+Kwo+Pj4rKGRlZmluZV9pbnNuICIqc3RhY2tf cG9wPG1vZGU+Igo+Pj4rIFsobWF0Y2hfcGFyYWxsZWwgMCAicmlzY3Zfc3RhY2tfcG9wX29wZXJh dGlvbiIKPj4+KyBbKHNldCAobWF0Y2hfb3BlcmFuZDpYIDEgInJlZ2lzdGVyX29wZXJhbmQiICIi KQo+Pj4rIChtZW06WCAocGx1czpYIChyZWc6WCBTUF9SRUdOVU0pCj4+PisgKG1hdGNoX29wZXJh bmQ6WCAyICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpKSkpXSldCj4+PisgIlRBUkdFVF9aQ01QIgo+ Pj4rIHsKPj4+KyByZXR1cm4gcmlzY3Zfb3V0cHV0X3BvcHJldF9wIChvcGVyYW5kc1swXSkgPwo+ Pj4rICJjbS5wb3ByZXRcdHslTDB9LCVzMCIgOgo+Pj4rICJjbS5wb3BcdHslTDB9LCVzMCI7Cj4+ PisgfSkKPj4+Kwo+Pj4rKGRlZmluZV9pbnNuICIqc3RhY2tfcG9wX3dpdGhfcmV0dXJuX3ZhbHVl PG1vZGU+Igo+Pj4rIFsobWF0Y2hfcGFyYWxsZWwgMCAicmlzY3Zfc3RhY2tfcG9wX29wZXJhdGlv biIKPj4+KyBbKHNldCAocmVnOkFOWUkgQTBfUkVHTlVNKQo+Pj4rIChtYXRjaF9vcGVyYW5kOkFO WUkgMSAicG9wX3JldHVybl92YWx1ZV9jb25zdGFudCIgIiIpKV0pXQo+Pj4rICJUQVJHRVRfWkNN UCIKPj4+KyB7Cj4+PisgZ2NjX2Fzc2VydCAocmlzY3Zfb3V0cHV0X3BvcHJldF9wIChvcGVyYW5k c1swXSkpOwo+Pj4rIHJldHVybiAiY20ucG9wcmV0elx0eyVMMH0sJXMwIjsKPj4+KyB9KQo+Pj4t LQo+Pj4yLjI1LjE=