From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8461889CD7 for ; Tue, 29 Sep 2020 17:42:20 +0000 (UTC) Received: by mail-qk1-f200.google.com with SMTP id m23so3212625qkh.10 for ; Tue, 29 Sep 2020 10:42:14 -0700 (PDT) Date: Tue, 29 Sep 2020 13:42:09 -0400 From: Jeremy Cline Message-ID: <20200929174209.GA177525@xps13> References: <20200417211025.109574-6-lyude@redhat.com> <20200818210051.28705-1-lyude@redhat.com> <20200928213640.GB24004@xps13> MIME-Version: 1.0 In-Reply-To: Content-Disposition: inline Subject: Re: [igt-dev] [PATCH i-g-t v4] tests: Add nouveau-crc tests List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Lyude Paul Cc: igt-dev@lists.freedesktop.org, nouveau@lists.freedesktop.org List-ID: T24gVHVlLCBTZXAgMjksIDIwMjAgYXQgMTI6MTM6MjNQTSAtMDQwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBPbiBNb24sIDIwMjAtMDktMjggYXQgMTc6MzYgLTA0MDAsIEplcmVteSBDbGluZSB3cm90 ZToKPiA+IEhpLAo+ID4gCj4gPiBPbiBUdWUsIEF1ZyAxOCwgMjAyMCBhdCAwNTowMDo1MVBNIC0w NDAwLCBMeXVkZSB3cm90ZToKPiA+ID4gRnJvbTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNv bT4KPiA+ID4gCj4gPiA+IFdlJ3JlIGZpbmFsbHkgZ2V0dGluZyBDUkMgc3VwcG9ydCBpbiBub3V2 ZWF1LCBzbyBsZXQncyBzdGFydCB0ZXN0aW5nCj4gPiA+IHRoaXMgaW4gaWd0IGFzIHdlbGwhIFdo aWxlIHRoZSBub3JtYWwgQ1JDIGNhcHR1cmUgdGVzdHMgYXJlIG5pY2UsCj4gPiA+IHRoZXJlJ3Mg YSBudW1iZXIgb2YgTnZpZGlhLXNwZWNpZmljIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcyB0aGF0 IHdlCj4gPiA+IG5lZWQgdG8gdGVzdCBhcyB3ZWxsLgo+ID4gPiAKPiA+ID4gVGhlIG1vc3QgaW1w b3J0YW50IG9uZSBpcyBrbm93biBhcyBhICJub3RpZmllciBjb250ZXh0IGZsaXAiLiBCYXNpY2Fs bHksCj4gPiA+IE52aWRpYSBHUFVzIHN0b3JlIGdlbmVyYXRlZCBDUkNzIGluIGFuIGFsbG9jYXRl ZCBtZW1vcnkgcmVnaW9uLCByZWZlcnJlZAo+ID4gPiB0byBhcyB0aGUgbm90aWZpZXIgY29udGV4 dCwgdGhhdCB0aGUgZHJpdmVyIHByb2dyYW1zIGl0c2VsZi4gU3RyYW5nZWx5LAo+ID4gPiB0aGlz IHJlZ2lvbiBjYW4gb25seSBob2xkIGEgbGltaXRlZCBudW1iZXIgb2YgQ1JDIGVudHJpZXMsIGFu ZCBvbmNlIGl0Cj4gPiA+IHJ1bnMgb3V0IG9mIGF2YWlsYWJsZSBlbnRyaWVzIHRoZSBoYXJkd2Fy ZSBzaW1wbHkgc2V0cyBhbiBvdmVycnVuIGJpdAo+ID4gPiBhbmQgc3RvcHMgd3JpdGluZyBhbnkg bmV3IENSQyBlbnRyaWVzLgo+ID4gPiAKPiA+ID4gU2luY2UgaWd0LWdwdS10b29scyBkb2Vzbid0 IHJlYWxseSBoYXZlIGFuIGV4cGVjdGF0aW9uIG9mIG9ubHkgYmVpbmcKPiA+ID4gYWJsZSB0byBn cmFiIGEgbGltaXRlZCBudW1iZXIgb2YgQ1JDcywgd2Ugd29yayBhcm91bmQgdGhpcyBpbiBub3V2 ZWF1IGJ5Cj4gPiA+IGFsbG9jYXRpbmcgdHdvIHNlcGFyYXRlIENSQyBub3RpZmllciByZWdpb25z IGVhY2ggdGltZSB3ZSBzdGFydAo+ID4gPiBjYXB0dXJpbmcgQ1JDcywgYW5kIHRoZW4gZmxpcCBi ZXR3ZWVuIHRoZW0gd2hlbmV2ZXIgd2UgZ2V0IGNsb3NlIHRvCj4gPiA+IGZpbGxpbmcgb3VyIGN1 cnJlbnRseSBwcm9ncmFtbWVkIG5vdGlmaWVyIGNvbnRleHQuIFdoaWxlIHRoaXMga2VlcHMgdGhl Cj4gPiA+IG51bWJlciBvZiBDUkMgZW50cmllcyB3ZSBsb3NlIHRvIGFuIGFic29sdXRlIG1pbmlt dW0sIHdlIGFyZSBndWFyYW50ZWVkCj4gPiA+IHRvIGxvc2UgZXhhY3RseSBvbmUgQ1JDIGVudHJ5 IGJldHdlZW4gY29udGV4dCBmbGlwcy4gVGh1cywgd2UgYWRkIHNvbWUKPiA+ID4gdGVzdHMgdG8g ZW5zdXJlIHRoYXQgbm91dmVhdSBoYW5kbGVzIHRoZXNlIGZsaXBzIGNvcnJlY3RseQo+ID4gPiAo cGlwZS1bQS1GXS1jdHgtZmxpcC1kZXRlY3Rpb24pLCBhbmQgdGhhdCBpZ3QgaXRzZWxmIGlzIGFs c28gYWJsZSB0bwo+ID4gPiBoYW5kbGUgdGhlbSBjb3JyZWN0bHkgKHBpcGUtW0EtRl0tY3R4LWZs aXAtc2tpcC1jdXJyZW50LWZyYW1lKS4gU2luY2UKPiA+ID4gdGhlc2UgdGVzdHMgdXNlIGEgZGVi dWdmcyBpbnRlcmZhY2UgdG8gbWFudWFsbHkgY29udHJvbCB0aGUgbm90aWZpZXIKPiA+ID4gY29u dGV4dCBmbGlwIHRocmVzaG9sZCwgd2UgYWxzbyBhZGQgb25lIHRlc3QgdG8gZW5zdXJlIHRoYXQg YW55IGZsaXAKPiA+ID4gdGhyZXNob2xkcyB3ZSBzZXQgYXJlIGNsZWFyZWQgYWZ0ZXIgYSBzaW5n bGUgQ1JDIGNhcHR1cmUKPiA+ID4gKGN0eC1mbGlwLXRocmVzaG9sZC1yZXNldC1hZnRlci1jYXB0 dXJlKS4KPiA+ID4gCj4gPiA+IEluIGFkZGl0aW9uLCB3ZSBhbHNvIGFkZCBzb21lIHNpbXBsZSB0 ZXN0cyB0byB0ZXN0IE52aWRpYS1zcGVjaWZpYyBDUkMKPiA+ID4gc291cmNlcy4KPiA+ID4gCj4g PiA+IENoYW5nZXMgc2luY2UgdjM6Cj4gPiA+ICogVXBkYXRlIC5naXRsYWItY2kueW1sIHRvIG1h a2Ugbm91dmVhdSBleGVtcHQgZnJvbSB0aGUgdGVzdC1saXN0LWRpZmYKPiA+ID4gICB0ZXN0LCBz aW5jZSBhbGwgdGhlIGNvb2wga2lkcyBhcmUgZG9pbmcgaXQgYW5kIHdlIGRvbid0IGNhcmUgYWJv dXQKPiA+ID4gICBhdXRvdG9vbHMgZm9yIG5vdXZlYXUKPiA+ID4gQ2hhbmdlcyBzaW5jZSB2MjoK PiA+ID4gKiBGaXggbWlzc2luZyBpbmNsdWRlIGluIHRlc3RzL25vdXZlYXVfY3JjLmMsIHRoaXMg c2hvdWxkIGZpeCBidWlsZHMgZm9yCj4gPiA+ICAgYWFyY2g2NAo+ID4gPiBDaGFuZ2VzIHNpbmNl IHYxOgo+ID4gPiAqIEZpeCBjb3B5cmlnaHQgeWVhciBpbiBub3V2ZWF1X2NyYy5jCj4gPiA+IAo+ ID4gPiBTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPgo+ID4gPiAt LS0KPiA+ID4gIC5naXRsYWItY2kueW1sICAgICAgfCAgIDIgKy0KPiA+ID4gIGxpYi9kcm10ZXN0 LmMgICAgICAgfCAgMTAgKysKPiA+ID4gIGxpYi9kcm10ZXN0LmggICAgICAgfCAgIDIgKwo+ID4g PiAgdGVzdHMvbWVzb24uYnVpbGQgICB8ICAgMSArCj4gPiA+ICB0ZXN0cy9ub3V2ZWF1X2NyYy5j IHwgMzk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiA+ ICA1IGZpbGVzIGNoYW5nZWQsIDQxMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvbm91dmVhdV9jcmMuYwo+ID4gPiAKPiA+ID4gZGlm ZiAtLWdpdCBhLy5naXRsYWItY2kueW1sIGIvLmdpdGxhYi1jaS55bWwKPiA+ID4gaW5kZXggZDdm ZGJmZGUuLmUyMjZkOWQ3IDEwMDY0NAo+ID4gPiAtLS0gYS8uZ2l0bGFiLWNpLnltbAo+ID4gPiAr KysgYi8uZ2l0bGFiLWNpLnltbAo+ID4gPiBAQCAtMjQxLDcgKzI0MSw3IEBAIHRlc3Q6dGVzdC1s aXN0LWRpZmY6Cj4gPiA+ICAgICAgLSBidWlsZDp0ZXN0cy1kZWJpYW4tYXV0b3Rvb2xzCj4gPiA+ ICAgICAgLSBidWlsZDp0ZXN0cy1kZWJpYW4tbWVzb24KPiA+ID4gICAgc3RhZ2U6IHRlc3QKPiA+ ID4gLSAgc2NyaXB0OiBkaWZmIDwoc2VkICJzLyAvXG4vZyIgbWVzb24tdGVzdC1saXN0LnR4dHwg Z3JlcCAtdgo+ID4gPiAndmM0XHx2M2RcfHBhbmZyb3N0JyB8IHNvcnQpIDwoc2VkICJzLyAvXG4v ZyIgYXV0b3Rvb2xzLXRlc3QtbGlzdC50eHQgfAo+ID4gPiBzb3J0KQo+ID4gPiArICBzY3JpcHQ6 IGRpZmYgPChzZWQgInMvIC9cbi9nIiBtZXNvbi10ZXN0LWxpc3QudHh0fCBncmVwIC12Cj4gPiA+ ICd2YzRcfHYzZFx8cGFuZnJvc3RcfG5vdXZlYXUnIHwgc29ydCkgPChzZWQgInMvIC9cbi9nIiBh dXRvdG9vbHMtdGVzdC0KPiA+ID4gbGlzdC50eHQgfCBzb3J0KQo+ID4gPiAgCj4gPiA+ICB0ZXN0 Omxpc3QtdW5kb2N1bWVudGVkLXRlc3RzOgo+ID4gPiAgICBkZXBlbmRlbmNpZXM6Cj4gPiA+IGRp ZmYgLS1naXQgYS9saWIvZHJtdGVzdC5jIGIvbGliL2RybXRlc3QuYwo+ID4gPiBpbmRleCBjNzMy ZDFkZC4uNDQ3ZjU0MzUgMTAwNjQ0Cj4gPiA+IC0tLSBhL2xpYi9kcm10ZXN0LmMKPiA+ID4gKysr IGIvbGliL2RybXRlc3QuYwo+ID4gPiBAQCAtMTE0LDYgKzExNCwxMSBAQCBib29sIGlzX2k5MTVf ZGV2aWNlKGludCBmZCkKPiA+ID4gIAlyZXR1cm4gX19pc19kZXZpY2UoZmQsICJpOTE1Iik7Cj4g PiA+ICB9Cj4gPiA+ICAKPiA+ID4gK2Jvb2wgaXNfbm91dmVhdV9kZXZpY2UoaW50IGZkKQo+ID4g PiArewo+ID4gPiArCXJldHVybiBfX2lzX2RldmljZShmZCwgIm5vdXZlYXUiKTsKPiA+ID4gK30K PiA+ID4gKwo+ID4gPiAgYm9vbCBpc192YzRfZGV2aWNlKGludCBmZCkKPiA+ID4gIHsKPiA+ID4g IAlyZXR1cm4gX19pc19kZXZpY2UoZmQsICJ2YzQiKTsKPiA+ID4gQEAgLTYyMiw2ICs2MjcsMTEg QEAgdm9pZCBpZ3RfcmVxdWlyZV9pbnRlbChpbnQgZmQpCj4gPiA+ICAJaWd0X3JlcXVpcmUoaXNf aTkxNV9kZXZpY2UoZmQpKTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiArdm9pZCBpZ3RfcmVxdWly ZV9ub3V2ZWF1KGludCBmZCkKPiA+ID4gK3sKPiA+ID4gKwlpZ3RfcmVxdWlyZShpc19ub3V2ZWF1 X2RldmljZShmZCkpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICB2b2lkIGlndF9yZXF1aXJlX3Zj NChpbnQgZmQpCj4gPiA+ICB7Cj4gPiA+ICAJaWd0X3JlcXVpcmUoaXNfdmM0X2RldmljZShmZCkp Owo+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2RybXRlc3QuaCBiL2xpYi9kcm10ZXN0LmgKPiA+ID4g aW5kZXggYzU2YmZhZmEuLmRkNGNkMzg0IDEwMDY0NAo+ID4gPiAtLS0gYS9saWIvZHJtdGVzdC5o Cj4gPiA+ICsrKyBiL2xpYi9kcm10ZXN0LmgKPiA+ID4gQEAgLTk2LDEwICs5NiwxMiBAQCBpbnQg X19kcm1fb3Blbl9kcml2ZXJfcmVuZGVyKGludCBjaGlwc2V0KTsKPiA+ID4gIAo+ID4gPiAgdm9p ZCBpZ3RfcmVxdWlyZV9hbWRncHUoaW50IGZkKTsKPiA+ID4gIHZvaWQgaWd0X3JlcXVpcmVfaW50 ZWwoaW50IGZkKTsKPiA+ID4gK3ZvaWQgaWd0X3JlcXVpcmVfbm91dmVhdShpbnQgZmQpOwo+ID4g PiAgdm9pZCBpZ3RfcmVxdWlyZV92YzQoaW50IGZkKTsKPiA+ID4gIAo+ID4gPiAgYm9vbCBpc19h bWRncHVfZGV2aWNlKGludCBmZCk7Cj4gPiA+ICBib29sIGlzX2k5MTVfZGV2aWNlKGludCBmZCk7 Cj4gPiA+ICtib29sIGlzX25vdXZlYXVfZGV2aWNlKGludCBmZCk7Cj4gPiA+ICBib29sIGlzX3Zj NF9kZXZpY2UoaW50IGZkKTsKPiA+ID4gIAo+ID4gPiAgLyoqCj4gPiA+IGRpZmYgLS1naXQgYS90 ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gPiA+IGluZGV4IDY4NGRlMDQz Li45MjY0Nzk5MSAxMDA2NDQKPiA+ID4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKPiA+ID4gKysr IGIvdGVzdHMvbWVzb24uYnVpbGQKPiA+ID4gQEAgLTc0LDYgKzc0LDcgQEAgdGVzdF9wcm9ncyA9 IFsKPiA+ID4gIAkna21zX3ZibGFuaycsCj4gPiA+ICAJJ2ttc192cnInLAo+ID4gPiAgCSdtZXRh X3Rlc3QnLAo+ID4gPiArCSdub3V2ZWF1X2NyYycsCj4gPiA+ICAJJ3BhbmZyb3N0X2dldF9wYXJh bScsCj4gPiA+ICAJJ3BhbmZyb3N0X2dlbV9uZXcnLAo+ID4gPiAgCSdwYW5mcm9zdF9wcmltZScs Cj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9ub3V2ZWF1X2NyYy5jIGIvdGVzdHMvbm91dmVhdV9j cmMuYwo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBpbmRleCAwMDAwMDAwMC4uMDVj MmY0ZGUKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi90ZXN0cy9ub3V2ZWF1X2NyYy5j Cj4gPiA+IEBAIC0wLDAgKzEsMzk3IEBACj4gPiA+ICsvKgo+ID4gPiArICogQ29weXJpZ2h0IMKp IDIwMjAgUmVkIEhhdCBJbmMuCj4gPiA+ICsgKgo+ID4gPiArICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCj4gPiA+ IGEKPiA+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUKPiA+ID4gIlNvZnR3YXJlIiksCj4gPiA+ICsgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dAo+ID4g PiBsaW1pdGF0aW9uCj4gPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwKPiA+ID4gc3VibGljZW5zZSwKPiA+ID4gKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQo+ID4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZQo+ID4gPiBuZXh0Cj4gPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YKPiA+ID4gdGhlCj4gPiA+ ICsgKiBTb2Z0d2FyZS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPiA+ID4gRVhQUkVTUyBP Ugo+ID4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRgo+ID4gPiBNRVJDSEFOVEFCSUxJVFksCj4gPiA+ICsgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQKPiA+ ID4gU0hBTEwKPiA+ID4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCj4gPiA+IE9USEVSCj4gPiA+ICsgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwKPiA+ID4gQVJJU0lORwo+ID4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgo+ID4gPiBERUFMSU5HUwo+ID4g PiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gPiArICoKPiA+ID4gKyAqLwo+ID4gPiArCj4gPiA+ ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiA+ID4gKyNpbmNsdWRlICJpZ3QuaCIKPiA+ID4gKyNpbmNs dWRlICJpZ3Rfc3lzZnMuaCIKPiA+ID4gKwo+ID4gPiArSUdUX1RFU1RfREVTQ1JJUFRJT04oCj4g PiA+ICsiVGVzdHMgY2VydGFpbiBhc3BlY3RzIG9mIENSQyBjYXB0dXJlIHRoYXQgYXJlIGV4Y2x1 c2l2ZSB0byBudmlkaWEKPiA+ID4gaGFyZHdhcmUsICIKPiA+ID4gKyJzdWNoIGFzIGNvbnRleHQg ZmxpcHBpbmcuIik7Cj4gPiA+ICsKPiA+ID4gK3R5cGVkZWYgc3RydWN0IHsKPiA+ID4gKwlpbnQg cGlwZTsKPiA+ID4gKwlpbnQgZHJtX2ZkOwo+ID4gPiArCWludCBudl9jcmNfZGlyOwo+ID4gPiAr CWlndF9kaXNwbGF5X3QgZGlzcGxheTsKPiA+ID4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiA+ ID4gKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPiA+ID4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7 Cj4gPiA+ICsJaWd0X2ZiX3QgZGVmYXVsdF9mYjsKPiA+ID4gK30gZGF0YV90Owo+ID4gPiArCj4g PiA+ICtzdHJ1Y3QgY29sb3JfZmIgewo+ID4gPiArCWRvdWJsZSByLCBnLCBiOwo+ID4gPiArCWln dF9jcmNfdCBjcmM7Cj4gPiA+ICsJaWd0X2ZiX3QgZmI7Cj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ ICsjZGVmaW5lIEhFWF9DT0xPUihyXywgZ18sIGJfKSBcCj4gPiA+ICsJeyAuciA9IChyXyAvIDI1 NS4wKSwgLmcgPSAoZ18gLyAyNTUuMCksIC5iID0gKGJfIC8gMjU1LjApIH0KPiA+ID4gKwo+ID4g PiArc3RhdGljIHZvaWQgc2V0X2NyY19mbGlwX3RocmVzaG9sZChkYXRhX3QgKmRhdGEsIHVuc2ln bmVkIGludCB0aHJlc2hvbGQpCj4gPiA+ICt7Cj4gPiA+ICsJaWd0X2RlYnVnKCJTZXR0aW5nIENS QyBub3RpZmllciBmbGlwIHRocmVzaG9sZCB0byAlZFxuIiwgdGhyZXNob2xkKTsKPiA+ID4gKwlp Z3RfYXNzZXJ0X2x0KDAsIGlndF9zeXNmc19wcmludGYoZGF0YS0+bnZfY3JjX2RpciwgImZsaXBf dGhyZXNob2xkIiwKPiA+ID4gIiVkIiwgdGhyZXNob2xkKSk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ ID4gK3N0YXRpYyB2b2lkIGNyZWF0ZV9jb2xvcnMoZGF0YV90ICpkYXRhLAo+ID4gPiArCQkJICBz dHJ1Y3QgY29sb3JfZmIgKmNvbG9ycywKPiA+ID4gKwkJCSAgc2l6ZV90IGxlbiwKPiA+ID4gKwkJ CSAgaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjKQo+ID4gCj4gPiBOb3QgdG8gYmlrZXNoZWQgdG9v IG11Y2gsIGJ1dCB0aGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIG1vcmUgYWJvdXQKPiA+IGdlbmVy YXRpbmcgQ1JDcyBnaXZlbiBzb21lIHByZS1leGlzdGluZyBjb2xvcnMuIE1heWJlCj4gPiBjcmVh dGVfY29sb3JfY3JjcygpIHdvdWxkIGJlIGJldHRlcj8gQW5kIGl0IHdvdWxkbid0IGh1cnQgdG8g dGhyb3cgYQo+ID4gbGl0dGxlIGRvY2Jsb2NrIG9uIGl0LCBldmVuIHNvbWV0aGluZyBhcyBzaG9y dCBhczoKPiA+IAo+ID4gLyoKPiA+ICAqIENhbGN1bGF0ZSBhbmQgc2V0IHRoZSBDUkMgZm9yIGVh Y2ggY29sb3JfZmIKPiA+ICAqLwo+ID4gCj4gPiA+ICt7Cj4gPiA+ICsJY2hhciAqY3JjX3N0cjsK PiA+ID4gKwo+ID4gPiArCWlndF9waXBlX2NyY19zdGFydChwaXBlX2NyYyk7Cj4gPiA+ICsKPiA+ ID4gKwlmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Cj4gPiA+ICsJCWlndF9jcmVhdGVf Y29sb3JfZmIoZGF0YS0+ZHJtX2ZkLAo+ID4gPiArCQkJCSAgICBkYXRhLT5tb2RlLT5oZGlzcGxh eSwKPiA+ID4gKwkJCQkgICAgZGF0YS0+bW9kZS0+dmRpc3BsYXksCj4gPiA+ICsJCQkJICAgIERS TV9GT1JNQVRfWFJHQjg4ODgsCj4gPiA+ICsJCQkJICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05P TkUsCj4gPiA+ICsJCQkJICAgIGNvbG9yc1tpXS5yLCBjb2xvcnNbaV0uZywgY29sb3JzW2ldLmIs Cj4gPiA+ICsJCQkJICAgICZjb2xvcnNbaV0uZmIpOwo+ID4gPiArCj4gPiA+ICsJCWlndF9wbGFu ZV9zZXRfZmIoZGF0YS0+cHJpbWFyeSwgJmNvbG9yc1tpXS5mYik7Cj4gPiA+ICsJCWlndF9kaXNw bGF5X2NvbW1pdCgmZGF0YS0+ZGlzcGxheSk7Cj4gPiA+ICsJCWlndF9waXBlX2NyY19nZXRfY3Vy cmVudChkYXRhLT5kcm1fZmQsIHBpcGVfY3JjLAo+ID4gPiAmY29sb3JzW2ldLmNyYyk7Cj4gPiA+ ICsKPiA+ID4gKwkJY3JjX3N0ciA9IGlndF9jcmNfdG9fc3RyaW5nKCZjb2xvcnNbaV0uY3JjKTsK PiA+ID4gKwkJaWd0X2RlYnVnKCJDUkMgZm9yIGZyYW1lICVkIG9mIHBhdHRlcm46ICVzXG4iLAo+ ID4gPiArCQkJICBpLCBjcmNfc3RyKTsKPiA+ID4gKwkJZnJlZShjcmNfc3RyKTsKPiA+ID4gKwl9 Cj4gPiA+ICsKPiA+ID4gKwlpZ3RfcGlwZV9jcmNfc3RvcChwaXBlX2NyYyk7Cj4gPiA+ICt9Cj4g PiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIGRlc3Ryb3lfY29sb3JzKGRhdGFfdCAqZGF0YSwgc3Ry dWN0IGNvbG9yX2ZiICpjb2xvcnMsIHNpemVfdAo+ID4gPiBsZW4pCj4gPiA+ICt7Cj4gPiA+ICsJ LyogU28gd2UgZG9uJ3QgdHVybiBvZmYgdGhlIHBpcGUgaWYgd2UgcmVtb3ZlIGl0J3MgY3VycmVu dCBmYiAqLwo+ID4gPiArCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cHJpbWFyeSwgJmRhdGEtPmRl ZmF1bHRfZmIpOwo+ID4gPiArCj4gPiA+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykK PiA+ID4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZjb2xvcnNbaV0uZmIpOwo+ID4g PiArfQo+ID4gPiArCj4gPiA+ICsvKiBIYXJkLWNvZGVkIHRvIFBJUEVfQSBmb3Igbm93LCB3ZSBk b24ndCByZWFsbHkgbmVlZCB0byB0ZXN0IHRoaXMgb24KPiA+ID4gbW9yZSB0aGVuCj4gPiA+ICsg KiBvbmUgaGVhZAo+ID4gPiArICovCj4gPiAKPiA+IFBlcmhhcHMgZXhwYW5kIHRoaXMgZG9jLWJs b2NrIG91dCBhIGJpdCB3aXRoIHRoZSBkZXRhaWxzIHlvdSBoYXZlIGluIHRoZQo+ID4gY29tbWl0 Ogo+ID4gCj4gPiAvKiBUZXN0IENSQ3MgYXJlIHJlcG9ydGVkIGFjcm9zcyBub3RpZmllciBjb250 ZXh0IGZsaXBzCj4gPiAgKgo+ID4gICogTnZpZGlhIEdQVXMgc3RvcmUgQ1JDcyBpbiBhIGxpbWl0 ZWQgbWVtb3J5IHJlZ2lvbiBjYWxsZWQgdGhlIG5vdGlmaWVyCj4gPiAgKiBjb250ZXh0LiBXaGVu IHRoZSByZWdpb24gZmlsbHMsIG5ldyBDUkNzIGFyZSBub3QgcmVwb3J0ZWQuIFRvIHdvcmsKPiA+ ICAqIGFyb3VuZCB0aGlzLCB0d28gbm90aWZpZXIgY29udGV4dHMgYXJlIGFsbG9jYXRlZCBhbmQg dGhlIGRyaXZlciBmbGlwcwo+ID4gICogYmV0d2VlbiB0aGUgdHdvIG9mIHRoZW0gd2hlbiBhIHRo cmVzaG9sZCBpcyByZWFjaGVkLiBFdmVuIHdpdGggdGhpcwo+ID4gICogYXBwcm9hY2gsIGEgc2lu Z2xlIGZyYW1lIGlzIGxvc3QgZHVyaW5nIHRoZSBjb250ZXh0IGZsaXAuCj4gPiAgKgo+ID4gICog VGhpcyB0ZXN0IGFkanVzdHMgdGhlIHRocmVzaG9sZCBhdCB3aGljaCB0aGUgbm90aWZpZXIgY29u dGV4dCBmbGlwcwo+ID4gICogdG8gdGhlIG90aGVyIGNvbnRleHQgYW5kIGFzc2VydHMgdGhlIENS Q3MgYXJlIGNvcnJlY3RseSByZXBvcnRlZCB3aXRoCj4gPiAgKiB0aGUgZXhjZXB0aW9uIG9mIHRo ZSBmcmFtZSBsb3N0IGR1cmluZyB0aGUgZmxpcC4KPiA+ICAqCj4gPiAgKiBIYXJkLWNvZGVkIHRv IFBJUEVfQSBmb3Igbm93LCB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byB0ZXN0IHRoaXMgb24KPiA+ ICAqIG1vcmUgdGhlbiBvbmUgaGVhZAo+ID4gICovCj4gPiAKPiA+IEkgd2FzIGd1aWx0eSBvZiBy ZWFkaW5nIHRoZSBjb2RlIHdoaWxlIHRlc3Rpbmcgd2l0aG91dCBnb2luZyBiYWNrIHRvCj4gPiBj b25zdWx0IHRoZSBjb21taXQgbWVzc2FnZSBhbmQgSSBvbmx5IGp1c3Qgbm93IHJlYWxpemVkIHRo ZSB0ZXN0IHB1cnBvc2UKPiA+IHdhcyBjbGVhcmx5IGV4cGxhaW5lZC4gSXQnZCBiZSBuaWNlIHRv IGtlZXAgdGhhdCBjbG9zZSB0byB0aGUgdGVzdAo+ID4gZGVmaW5pdGlvbiByYXRoZXIgdGhhbiBp biB0aGUgY29tbWl0IGxvZy4KPiA+IAo+ID4gQWxzbywgYXMgZmFyIGFzIEkgY2FuIHRlbGwgaXQn cyBub3QgYWN0dWFsbHkgaGFyZC1jb2RlZCB0byBQSVBFX0EsIGJ1dAo+ID4gdGVzdF9jdHhfZmxp cF90aHJlc2hvbGRfcmVzZXRfYWZ0ZXJfY2FwdHVyZSgpIGlzLiBNYXliZSBJJ20KPiA+IG1pcy11 bmRlcnN0YW5kaW5nIHRoYXQ/Cj4gCj4gTm8geW91IGFyZW4ndC10aGF0J3MgZGVmaW5pdGVseSBh IGJpdCBvZiBkb2MgSSBoYWQgd3JpdHRlbiBiZWZvcmUgYWxsIG9mIHRoZQo+IHRlc3RzIHdlcmUg Y29tcGxldGUgYW5kIEkgd2FzIHVuZGVjaWRlZCBpZiB3ZSBuZWVkZWQgdG8gdGVzdCB0aGlzIG9u IGFsbCBwaXBlcwo+IG9yIG5vdCAodHVybmVkIG91dCBhbGwgcGlwZXMgaXMgYSBnb29kIGlkZWEp Lgo+IAo+ID4gCj4gPiA+ICtzdGF0aWMgdm9pZCB0ZXN0X2N0eF9mbGlwX2RldGVjdGlvbihkYXRh X3QgKmRhdGEpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGNvbG9yX2ZiIGNvbG9yc1tdID0gewo+ ID4gPiArCQlIRVhfQ09MT1IoMHhGRiwgMHgwMCwgMHgxOCksCj4gPiA+ICsJCUhFWF9DT0xPUigw eEZGLCAweEE1LCAweDJDKSwKPiA+ID4gKwkJSEVYX0NPTE9SKDB4RkYsIDB4RkYsIDB4NDEpLAo+ ID4gPiArCQlIRVhfQ09MT1IoMHgwMCwgMHg4MCwgMHgxOCksCj4gPiA+ICsJCUhFWF9DT0xPUigw eDAwLCAweDAwLCAweEY5KSwKPiA+ID4gKwkJSEVYX0NPTE9SKDB4ODYsIDB4MDAsIDB4N0QpLAo+ ID4gPiArCX07Cj4gPiA+ICsJaWd0X291dHB1dF90ICpvdXRwdXQgPSBkYXRhLT5vdXRwdXQ7Cj4g PiA+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnkgPSBkYXRhLT5wcmltYXJ5Owo+ID4gPiArCWlndF9w aXBlX2NyY190ICpwaXBlX2NyYzsKPiA+ID4gKwljb25zdCBpbnQgbl9jb2xvcnMgPSBBUlJBWV9T SVpFKGNvbG9ycyk7Cj4gPiA+ICsJY29uc3QgaW50IG5fY3JjcyA9IDIwOwo+ID4gPiArCWlndF9j cmNfdCAqY3JjcyA9IE5VTEw7Cj4gPiA+ICsJaW50IHN0YXJ0ID0gLTEsIGZyYW1lLCBzdGFydF9j b2xvciA9IC0xLCBpOwo+ID4gPiArCWJvb2wgZm91bmRfc2tpcCA9IGZhbHNlOwo+ID4gPiArCj4g PiA+ICsJcGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmRybV9mZCwgZGF0YS0+cGlw ZSwgImF1dG8iKTsKPiA+ID4gKwo+ID4gPiArCWNyZWF0ZV9jb2xvcnMoZGF0YSwgY29sb3JzLCBu X2NvbG9ycywgcGlwZV9jcmMpOwo+ID4gPiArCj4gPiA+ICsJc2V0X2NyY19mbGlwX3RocmVzaG9s ZChkYXRhLCBuX2NyY3MgLyAyKTsKPiA+ID4gKwlpZ3RfcGlwZV9jcmNfc3RhcnQocGlwZV9jcmMp Owo+ID4gPiArCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG5fY3JjczsgaSsrKSB7Cj4gPiA+ICsJ CWNvbnN0IGludCBjb2xvcl9pZHggPSBpICUgbl9jb2xvcnM7Cj4gPiA+ICsKPiA+ID4gKwkJaWd0 X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmY29sb3JzW2NvbG9yX2lkeF0uZmIpOwo+ID4gPiArCQlk b19vcl9kaWUoZHJtTW9kZVBhZ2VGbGlwKGRhdGEtPmRybV9mZCwKPiA+ID4gKwkJCQkJICBvdXRw dXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAo+ID4gPiArCQkJCQkgIGNvbG9yc1tjb2xvcl9pZHhd LmZiLmZiX2lkLAo+ID4gPiArCQkJCQkgIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwKPiA+ID4g KwkJCQkJICBOVUxMKSk7Cj4gPiA+ICsJCWttc3Rlc3Rfd2FpdF9mb3JfcGFnZWZsaXAoZGF0YS0+ ZHJtX2ZkKTsKPiA+IAo+ID4gV2hpbGUgdGVzdGluZyBJIHdhcyBleHBlcmllbmNpbmcgc29tZSB0 ZXN0IGZhaWx1cmVzLCBhdCB3aGljaCBwb2ludCBJCj4gPiB0dXJuZWQgb24gYSBidW5jaCBvZiBk ZWJ1ZyBsb2dnaW5nIG9uIHRoZSBrZXJuZWwgc2lkZS4gVGhpcyBsZWQgdG8gdGhpcwo+ID4gdGVz dCByZWxpYWJseSBmYWlsaW5nIGJlY2F1c2UgdGhpcyBjYWxsIHRpbWVkIG91dCB3YWl0aW5nIG9u IHRoZSBwYWdlZmxpcAo+ID4gZXZlbnQsIHdoaWNoIGlzIHVuZm9ydHVuYXRlLiBJJ20gbm90IHN1 cmUgd2hhdCB0aGUgbGFyZ2VyIHVzYWdlIG9mIHRoaXMKPiA+IHBhcnRpY3VsYXIgZnVuY3Rpb24g aXMsIGJ1dCBoYXZpbmcgdGVzdHMgc3RhcnQgdG8gZmFpbCB3aGVuIHZlcmJvc2UKPiA+IGxvZ2dp bmcgaXMgZW5hYmxlZCBpc24ndCBpZGVhbC4KPiA+IAo+ID4gT2J2aW91c2x5IGhhbmdpbmcgZm9y ZXZlciBpcyBhbHNvIG5vdCBpZGVhbCwgc28gbWF5YmUgdGhlIHRpbWVvdXQgb2YKPiA+IHRoaXMg ZnVuY3Rpb24ganVzdCBuZWVkcyBhZGp1c3RtZW50LCBvciBldmVuIGp1c3QgaGF2ZSB0aGUgYXNz ZXJ0aW9uCj4gPiBpbmNsdWRlIGEgaGludCB0aGF0IHBlcmhhcHMgZGVidWcgbG9nZ2luZyBpcyBz bG93aW5nIHRoaW5ncyBkb3duIHRvbwo+ID4gbXVjaC4gSXQncyBub3Qgd2l0aGluIHRoZSBzY29w ZSBvZiB0aGlzIGNoYW5nZSBzbyBJIGRvbid0IHRoaW5rIGFueXRoaW5nCj4gPiBuZWVkcyB0byBj aGFuZ2UgaW4gdGhpcyBwYXRjaCwgbW9yZSBqdXN0IHdhbnRlZCB0byBzZWUgd2hhdCBmb2xrcyB0 aGluawo+ID4gdGhlIGJlc3QgYXBwcm9hY2ggaXMgc2luY2UgSSBzcGVudCBsb25nZXIgdGhhbiBJ IGNhcmUgdG8gYWRtaXQgZmlndXJpbmcKPiA+IHRoYXQgb3V0IGFuZCBkb24ndCB3YW50IG90aGVy cyB0byBoYXZlIHRvIHN1ZmZlciB0aGUgc2FtZSB3YXkuCj4gCj4gSWYgeW91IHR1cm4gb24gZW5v dWdoIGRlYnVnZ2luZyBpbmZvIGl0IGRlZmluaXRlbHkgbWFrZXMgc2Vuc2UgdGhhdCBpdCBtaWdo dAo+IGNhdXNlIHVzIHRvIG1pc3MgYSBwYWdlIGZsaXAgb24gYWNjaWRlbnQsIGFsdGhvdWdoIEkn dmUgbmV2ZXIgbWFuYWdlZCB0byBnZXQKPiBkZWJ1Z2dpbmcgb3V0cHV0IHRvIHNsb3cgdGhpbmdz IGRvd24gdGhhdCBtdWNoLiBXZSBzaG91bGQgcHJvYmFibHkgbG9vayB0byBzZWUKPiBpZiB0aGVy ZSdzIGFueXRoaW5nIHdlIGNvdWxkIGRvIHRvIHNwZWVkIHVwIGRlYnVnZ2luZyBvdXRwdXQgbGlr ZSB0aGF0IG9uCj4gbm91dmVhdSdzIHNpZGUuCj4gCgpXZWxsLCBJIGRpZCBmbGlwIG9uIGEgYnVu Y2ggb2YgZGVidWcgb3B0aW9ucyBzbyBtYXliZSBpZiBJIHR1cm4gYWxsCnRob3NlIG9mZiBpdCds bCBwYXNzLiBQZXJoYXBzIGFsbCBJR1QgdGVzdHMgYXJlIHNlbnNpdGl2ZSB0byB0aW1pbmcgYW5k CmhhdmUgcGFydGljdWxhciByZXF1aXJlbWVudHMgd2hlbiBpdCBjb21lcyB0byBjb25maWd1cmF0 aW9uIGFuZCBzbyBvbiwKYnV0IEkgdGhpbmsgaWRlYWxseSB0ZXN0cyBzaG91bGQgbm90IHN0YXJ0 IHRvIGZhaWwgaW4gbG93LXBlcmZvcm1hbmNlCmVudmlyb25tZW50cyB1bmxlc3MgdGhleSdyZSBz cGVjaWZpY2FsbHkgYWJvdXQgdGVzdGluZyBwZXJmb3JtYW5jZS4KSG93ZXZlciwgSSBrbm93IHdl IGRvbid0IGxpdmUgaW4gYW4gaWRlYWwgd29ybGQuCgo+IEpGWUkgdG9vIC0gd2Ugc2hvdWxkbid0 IGV2ZXIgYmUgbWlzc2luZyBhIHBhZ2VmbGlwIGluIGdlbmVyYWwgYW5kIGZvciB0aGlzCj4gdGVz dCwgZXNwZWNpYWxseSB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcyBzaW5jZSBpdCBzb3VuZHMg bGlrZSB5b3Ugd2VyZQo+IHNlZWluZyBpbnRlcm1pdHRlbnQgZmFpbHVyZXMgYmVmb3JlIHlvdSBo YWQgZGVidWdnaW5nIGNvZGUgdHVybmVkIG9uPyBXZSBjYW4ndAo+IGFjY3VyYXRlbHkgZmlndXJl IG91dCBpZiB0aGUgQ1JDIGZsaXAgaGFwcGVuZWQgb3RoZXJ3aXNlIHNpbmNlIHdlIHJlbHkgb24K PiB0aGVyZSBiZWluZyBleGFjdGx5IG9uZSBmcmFtZSB3aXRoIGEgbWlzc2luZyBDUkMsIHdpdGgg ZWFjaCBzdWNjZXNzaXZlIGZyYW1lCj4gbWF0Y2hpbmcgdGhlIHN0ZXBzIGluIHRoZSBjb2xvciBw YXR0ZXJuIHRoYXQgd291bGQgaGF2ZSBmb2xsb3dlZCB0aGF0IGZyYW1lLiAKPiAKCkhtbS4gV2hh dCBhYm91dCB0aGUgZnJhbWUgbnVtYmVycz8gSSBkaWRuJ3QgZmluZCBhbnkgZG9jdW1lbnRhdGlv biBvbgp3aGF0IHRvIGV4cGVjdCBmb3IgdGhvc2UsIGJ1dCBiYXNlZCBvbiB3aGF0IEkgc2F3IHdo aWxlIGRlYnVnZ2luZyB0aGV5CmluY3JlbWVudCBhbmQgaXQgd2FzIGNsZWFyIHdoZXJlIHRoZSBm bGlwIGhhcHBlbmVkIGJhc2VkIG9uIHRoZSBtaXNzaW5nCmZyYW1lIG51bWJlciBpbiB0aGUgQ1JD cy4KCj4gPiAKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlpZ3RfcGlwZV9jcmNfZ2V0X2NyY3Mo cGlwZV9jcmMsIG5fY3JjcywgJmNyY3MpOwo+ID4gPiArCWlndF9waXBlX2NyY19zdG9wKHBpcGVf Y3JjKTsKPiA+ID4gKwo+ID4gPiArCS8qCj4gPiA+ICsJICogRmluZCB0aGUgZmlyc3QgY29sb3Ig aW4gb3VyIHBhdHRlcm4gd2l0aCBhIENSQyB0aGF0IGRpZmZlcnMgZnJvbQo+ID4gPiB0aGUKPiA+ ID4gKwkgKiBsYXN0IENSQywgc28gd2UgY2FuIHVzZSBpdCB0byBmaW5kIHRoZSBzdGFydCBvZiB0 aGUgcGF0dGVybgo+ID4gPiArCSAqLwo+ID4gCj4gPiBJdCBtaWdodCBiZSB3b3J0aCBleHBsaWNp dGx5IG5vdGluZyB0aGlzIGlzIHRvIGF2b2lkIENSQyBjb2xsaXNpb25zIChJJ20KPiA+IGFzc3Vt aW5nKSBzaW5jZSBJIGhhZCB0byBwb25kZXIgZm9yIGEgYml0Ogo+ID4gCj4gPiAvKgo+ID4gICog R3VhcmQgYWdhaW5zdCBDUkMgY29sbGlzaW9ucyBpbiB0aGUgY29sb3IgZnJhbWVidWZmZXJzLiBG aW5kIHRoZQo+ID4gICogZmlyc3QgY29sb3IgaW4gb3VyIHBhdHRlcm4gd2l0aCBhIENSQyB0aGF0 IGRpZmZlcnMgZnJvbSB0aGUgbGFzdCBDUkMsCj4gPiAgKiBzbyB3ZSBjYW4gdXNlIGl0IHRvIGZp bmQgdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuCj4gPiAgKi8KPiA+IAo+ID4gPiArCWZvciAoaSA9 IDA7IGkgPCBuX2NvbG9ycyAtIDE7IGkrKykgewo+ID4gPiArCQlpZiAoaWd0X2NoZWNrX2NyY19l cXVhbCgmY29sb3JzW2ldLmNyYywgJmNvbG9yc1tuX2NvbG9ycyAtCj4gPiA+IDFdLmNyYykpCj4g PiA+ICsJCQljb250aW51ZTsKPiA+ID4gKwo+ID4gPiArCQlpZ3RfZGVidWcoIlVzaW5nIGZyYW1l ICVkIG9mIHBhdHRlcm4gZm9yIGZpbmRpbmcgc3RhcnRcbiIsIGkpOwo+ID4gPiArCQlzdGFydF9j b2xvciA9IGk7Cj4gPiA+ICsJCWJyZWFrOwo+ID4gPiArCX0KPiA+ID4gKwlpZ3RfYXNzZXJ0X2x0 ZSgwLCBzdGFydF9jb2xvcik7Cj4gPiA+ICsKPiA+ID4gKwkvKiBOb3csIGZpZ3VyZSBvdXQgd2hl cmUgdGhlIHBhdHRlcm4gc3RhcnRzICovCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG5fY3Jjczsg aSsrKSB7Cj4gPiA+ICsJCWlmICghaWd0X2NoZWNrX2NyY19lcXVhbCgmY29sb3JzW3N0YXJ0X2Nv bG9yXS5jcmMsICZjcmNzW2ldKSkKPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ICsJ CXN0YXJ0ID0gaSAtIHN0YXJ0X2NvbG9yOwo+ID4gPiArCQlmcmFtZSA9IGNyY3NbaV0uZnJhbWU7 Cj4gPiA+ICsJCWlndF9kZWJ1ZygiUGF0dGVybiBzdGFydGVkIG9uIGZyYW1lICVkXG4iLCBmcmFt ZSk7Cj4gPiA+ICsJCWJyZWFrOwo+ID4gPiArCX0KPiA+ID4gKwlpZ3RfYXNzZXJ0X2x0ZSgwLCBz dGFydCk7Cj4gPiA+ICsKPiA+ID4gKwkvKiBBbmQgZmluYWxseSwgYXNzZXJ0IHRoYXQgYWNjb3Jk aW5nIHRvIHRoZSBDUkNzIGV4YWN0bHkgYWxsIGJ1dCBvbmUKPiA+ID4gKwkgKiBmcmFtZSB3YXMg ZGlzcGxheWVkIGluIG9yZGVyLiBUaGUgbWlzc2luZyBmcmFtZSBjb21lcyBmcm9tCj4gPiA+ICsJ ICogKGluZXZpdGFibHkpIGxvc2luZyBhIHNpbmdsZSBDUkMgZXZlbnQgd2hlbiBub3V2ZWF1IHN3 aXRjaGVzCj4gPiA+IG5vdGlmaWVyCj4gPiA+ICsJICogY29udGV4dHMKPiA+ID4gKwkgKi8KPiA+ ID4gKwlmb3IgKGkgPSBzdGFydDsgaSA8IG5fY3JjczsgaSsrLCBmcmFtZSsrKSB7Cj4gPiA+ICsJ CWlndF9jcmNfdCAqY3JjID0gJmNyY3NbaV07Cj4gPiA+ICsJCWNoYXIgKmNyY19zdHI7Cj4gPiA+ ICsJCWludCBjb2xvcl9pZHg7Cj4gPiA+ICsKPiA+ID4gKwkJY3JjX3N0ciA9IGlndF9jcmNfdG9f c3RyaW5nKGNyYyk7Cj4gPiA+ICsJCWlndF9kZWJ1ZygiQ1JDICVkOiB2Ymw9JWQgdmFsPSVzXG4i LCBpLCBjcmMtPmZyYW1lLCBjcmNfc3RyKTsKPiA+ID4gKwkJZnJlZShjcmNfc3RyKTsKPiA+ID4g Kwo+ID4gPiArCQlpZiAoIWZvdW5kX3NraXAgJiYgY3JjLT5mcmFtZSAhPSBmcmFtZSkgewo+ID4g PiArCQkJaWd0X2RlYnVnKCJeXl4gRm91bmQgZXhwZWN0ZWQgc2tpcHBlZCBDUkMgJWQgXl5eXG4i LAo+ID4gPiArCQkJCSAgY3JjLT5mcmFtZSAtIDEpOwo+ID4gPiArCQkJZm91bmRfc2tpcCA9IHRy dWU7Cj4gPiA+ICsJCQlmcmFtZSsrOwo+ID4gPiArCQl9Cj4gPiA+ICsKPiA+ID4gKwkJLyogV2Ug c2hvdWxkIG5ldmVyIHNraXAgbW9yZSB0aGVuIG9uZSBmcmFtZSAqLwo+ID4gPiArCQlpZiAoZm91 bmRfc2tpcCkgewo+ID4gPiArCQkJaWd0X2Fzc2VydF9lcShjcmMtPmZyYW1lLCBmcmFtZSk7Cj4g PiA+ICsJCQljb2xvcl9pZHggPSAoaSAtIHN0YXJ0ICsgMSkgJSBuX2NvbG9yczsKPiA+ID4gKwkJ fSBlbHNlIHsKPiA+ID4gKwkJCWNvbG9yX2lkeCA9IChpIC0gc3RhcnQpICUgbl9jb2xvcnM7Cj4g PiA+ICsJCX0KPiA+ID4gKwo+ID4gPiArCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbChjcmMsICZjb2xv cnNbY29sb3JfaWR4XS5jcmMpOwo+ID4gCj4gPiBUaGlzIGNvbnNpc3RlbnRseSBmYWlscyBmb3Ig bWUuIFRoZSByZWFzb24gaXMgdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUKPiA+IGZyYW1lcyB3aXRo IHRoZSBzYW1lIGNvbG9yL0NSQy4gQXMgZmFyIGFzIEkgY2FuIHRlbGwsIHRoYXQncyBwZXJmZWN0 bHkKPiA+IHJlYXNvbmFibGUgd2hlbiBhIHBhZ2UgZmxpcCBpcyBzbG93IChwb3NzaWJseSBkdWUg dG8gZGVidWcgbG9ncyDwn5isKSwgYnV0Cj4gPiBJIGRvbid0IGtub3cgZm9yIGNlcnRhaW4gd2hh dCB0aGUgaW50ZXJmYWNlIGV4cGVjdGF0aW9ucyBhcmUuCj4gCj4gWWVhaC1zb21ldGhpbmcgaXMg ZGVmaW5pdGVseSBicm9rZW4gd2l0aCB5b3VyIHNldHVwLiBQYWdlIGZsaXBzIHNob3VsZCBuZXZl cgo+IGJlIHNsb3csIGV4Y2VwdCAtbWF5YmUtIGluIHRoZSBtb3N0IGV4Y2VwdGlvbmFsIG9mIGRl YnVnZ2luZyBjaXJjdW1zdGFuY2VzLgo+IAo+ID4gCj4gPiBJZiB0aGF0IGFzc3VtcHRpb24gaXMg Y29ycmVjdCwgSSBndWVzcyB5b3UnbGwgbmVlZCB0byBleHBlY3QgZWl0aGVyIHRoZQo+ID4gc2Ft ZSBjb2xvciBhcyB0aGUgcHJldmlvdXMgZnJhbWUsIG9yIHRoZSBuZXh0IGNvbG9yIGluIHRoZSBh cnJheSBhZnRlcgo+ID4gdGhlIGNvbG9yIGluIHRoZSBwcmV2aW91cyBmcmFtZS4KPiA+IAo+ID4g PiArCX0KPiA+ID4gKwlpZ3RfYXNzZXJ0KGZvdW5kX3NraXApOwo+ID4gPiArCj4gPiA+ICsJZnJl ZShjcmNzKTsKPiA+ID4gKwlpZ3RfcGlwZV9jcmNfZnJlZShwaXBlX2NyYyk7Cj4gPiA+ICsJZGVz dHJveV9jb2xvcnMoZGF0YSwgY29sb3JzLCBBUlJBWV9TSVpFKGNvbG9ycykpOwo+ID4gPiArfQo+ ID4gPiArCj4gPiA+ICsvKiBUZXN0IHdoZXRoZXIgb3Igbm90IElHVCBpcyBhYmxlIHRvIGhhbmRs ZSBmcmFtZSBza2lwcyB3aGVuIHJlcXVlc3RpbmcKPiA+ID4gdGhlCj4gPiA+ICsgKiBDUkMgZm9y IHRoZSBjdXJyZW50IGZyYW1lCj4gPiA+ICsgKi8KPiA+ID4gK3N0YXRpYyB2b2lkIHRlc3RfY3R4 X2ZsaXBfc2tpcF9jdXJyZW50X2ZyYW1lKGRhdGFfdCAqZGF0YSkKPiA+ID4gK3sKPiA+ID4gKwlz dHJ1Y3QgY29sb3JfZmIgY29sb3JzW10gPSB7Cj4gPiA+ICsJCXsgLnIgPSAxLjAsIC5nID0gMC4w LCAuYiA9IDAuMCB9LAo+ID4gPiArCQl7IC5yID0gMC4wLCAuZyA9IDEuMCwgLmIgPSAwLjAgfSwK PiA+ID4gKwkJeyAuciA9IDAuMCwgLmcgPSAwLjAsIC5iID0gMS4wIH0sCj4gPiA+ICsJfTsKPiA+ ID4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dCA9IGRhdGEtPm91dHB1dDsKPiA+ID4gKwlpZ3RfcGlw ZV9jcmNfdCAqcGlwZV9jcmM7Cj4gPiA+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnkgPSBkYXRhLT5w cmltYXJ5Owo+ID4gPiArCWNvbnN0IGludCBmZCA9IGRhdGEtPmRybV9mZDsKPiA+ID4gKwljb25z dCBpbnQgbl9jb2xvcnMgPSBBUlJBWV9TSVpFKGNvbG9ycyk7Cj4gPiA+ICsJY29uc3QgaW50IG5f Y3JjcyA9IDMwOwo+ID4gPiArCj4gPiA+ICsJcGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGZk LCBkYXRhLT5waXBlLCAiYXV0byIpOwo+ID4gPiArCWNyZWF0ZV9jb2xvcnMoZGF0YSwgY29sb3Jz LCBuX2NvbG9ycywgcGlwZV9jcmMpOwo+ID4gPiArCj4gPiA+ICsJc2V0X2NyY19mbGlwX3RocmVz aG9sZChkYXRhLCA1KTsKPiA+ID4gKwlpZ3RfcGlwZV9jcmNfc3RhcnQocGlwZV9jcmMpOwo+ID4g PiArCj4gPiA+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBuX2NyY3M7IGkrKykgewo+ID4gPiArCQlp Z3RfY3JjX3QgY3JjOwo+ID4gPiArCQljb25zdCBpbnQgY29sb3JfaWR4ID0gaSAlIG5fY29sb3Jz Owo+ID4gPiArCj4gPiA+ICsJCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJmNvbG9yc1tjb2xv cl9pZHhdLmZiKTsKPiA+ID4gKwkJZG9fb3JfZGllKGRybU1vZGVQYWdlRmxpcChmZCwKPiA+ID4g KwkJCQkJICBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAo+ID4gPiArCQkJCQkgIGNvbG9y c1tjb2xvcl9pZHhdLmZiLmZiX2lkLAo+ID4gPiArCQkJCQkgIERSTV9NT0RFX1BBR0VfRkxJUF9F VkVOVCwKPiA+ID4gKwkJCQkJICBOVUxMKSk7Cj4gPiA+ICsJCWttc3Rlc3Rfd2FpdF9mb3JfcGFn ZWZsaXAoZmQpOwo+ID4gPiArCj4gPiA+ICsJCWlndF9waXBlX2NyY19nZXRfY3VycmVudChmZCwg cGlwZV9jcmMsICZjcmMpOwo+ID4gPiArCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmY29sb3JzW2Nv bG9yX2lkeF0uY3JjLCAmY3JjKTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlpZ3RfcGlwZV9j cmNfc3RvcChwaXBlX2NyYyk7Cj4gPiA+ICsJaWd0X3BpcGVfY3JjX2ZyZWUocGlwZV9jcmMpOwo+ ID4gPiArCWRlc3Ryb3lfY29sb3JzKGRhdGEsIGNvbG9ycywgbl9jb2xvcnMpOwo+ID4gPiArfQo+ ID4gPiArCj4gPiAKPiA+IE1heWJlIGEgc2hvcnQgZG9jLWJsb2NrIHdpdGggd2hhdCB0aGUgdGVz dCBzaG91bGQgYmUgZG9pbmcgaGVyZSB3b3VsZCBiZQo+ID4gZ29vZDoKPiA+IAo+ID4gLyoKPiA+ ICAqIEFzc2VydCB0aGF0IGFmdGVyIGEgQ1JDIGNhcHR1cmUgaXMgc3RhcnRlZCBhbmQgc3RvcHBl ZCwgdGhlIGNvbnRleHQKPiA+ICAqIG5vdGlmaWVyIGZsaXAgdGhyZXNob2xkIGlzIHJlc2V0IHRv IGl0cyBkZWZhdWx0IHZhbHVlLgo+ID4gICovCj4gPiAKPiA+ID4gK3N0YXRpYyB2b2lkIHRlc3Rf Y3R4X2ZsaXBfdGhyZXNob2xkX3Jlc2V0X2FmdGVyX2NhcHR1cmUoZGF0YV90ICpkYXRhKQo+ID4g PiArewo+ID4gPiArCWlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKPiA+ID4gKwljb25zdCBpbnQg ZmQgPSBkYXRhLT5kcm1fZmQ7Cj4gPiA+ICsKPiA+ID4gKwlwaXBlX2NyYyA9IGlndF9waXBlX2Ny Y19uZXcoZmQsIGRhdGEtPnBpcGUsICJhdXRvIik7Cj4gPiA+ICsKPiA+ID4gKwlzZXRfY3JjX2Zs aXBfdGhyZXNob2xkKGRhdGEsIDUpOwo+ID4gPiArCWlndF9waXBlX2NyY19zdGFydChwaXBlX2Ny Yyk7Cj4gPiA+ICsJaWd0X3BpcGVfY3JjX3N0b3AocGlwZV9jcmMpOwo+ID4gPiArCj4gPiA+ICsJ aWd0X2Fzc2VydF9uZXEoaWd0X3N5c2ZzX2dldF91MzIoZGF0YS0+bnZfY3JjX2RpciwgImZsaXBf dGhyZXNob2xkIiksCj4gPiA+IDUpOwo+ID4gCj4gPiBBcyBpdCBjdXJyZW50bHkgc3RhbmRzLCB0 aGlzIHRlc3QgY291bGQgZmFpbCBpZiB0aGUgZGVmYXVsdCBpcyA1LCBvciBpdAo+ID4gY291bGQg cGFzcyBpZiAiZmxpcF90aHJlc2hvbGQiIHdhcyBicm9rZW4gYW5kIGRpZG4ndCByZXBvcnQgdGhl IGFjdHVhbAo+ID4gZmxpcF90aHJlc2hvbGQgYW55d2F5LiBUaGUgZGVmYXVsdCBiZWluZyA1IGRv ZXNuJ3QgbG9vayB0byBiZSBzb21ldGhpbmcKPiA+IHRoYXQgeW91IG5lY2Vzc2FyaWx5IG5lZWQg dG8gYmUgd29ycmllZCBhYm91dCwgYnV0IGl0IG1pZ2h0IGJlIHdvcnRoCj4gPiByZWFkaW5nIHRo ZSB2YWx1ZSBiYWNrIGFmdGVyIHNldHRpbmcgdGhlIHRocmVzaG9sZCB0byBtYWtlIHN1cmUgeW91 IGRvCj4gPiBzZWUgNS4KPiA+IAo+ID4gPiArCWlndF9waXBlX2NyY19mcmVlKHBpcGVfY3JjKTsK PiA+ID4gK30KPiA+ID4gKwo+ID4gCj4gPiBTYW1lIG5vdGUgYWJvdXQgYSBkb2NibG9jayDwn5mC Ogo+ID4gCj4gPiAvKgo+ID4gICogQXNzZXJ0IHRoYXQsIGZvciBhIGdpdmVuIHNvdXJjZSwgdHdv IGNvbnNlY3V0aXZlIENSQ3MgYXJlIGVxdWFsIGlmCj4gPiAgKiB0aGUgY29udGVudCBoYXNuJ3Qg Y2hhbmdlZC4KPiA+ICAqLwo+ID4gCj4gPiA+ICtzdGF0aWMgdm9pZCB0ZXN0X3NvdXJjZShkYXRh X3QgKmRhdGEsIGNvbnN0IGNoYXIgKnNvdXJjZSkKPiA+ID4gK3sKPiA+ID4gKwlpZ3RfcGlwZV9j cmNfdCAqcGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmRybV9mZCwgZGF0YS0+cGlw ZSwKPiA+ID4gc291cmNlKTsKPiA+ID4gKwlpZ3RfY3JjX3QgKmNyY3M7Cj4gPiA+ICsKPiA+ID4g KwlpZ3RfcGlwZV9jcmNfc3RhcnQocGlwZV9jcmMpOwo+ID4gPiArCWlndF9waXBlX2NyY19nZXRf Y3JjcyhwaXBlX2NyYywgMiwgJmNyY3MpOwo+ID4gPiArCWlndF9waXBlX2NyY19zdG9wKHBpcGVf Y3JjKTsKPiA+ID4gKwo+ID4gPiArCS8qIFRoZSBDUkMgc2hvdWxkbid0IGNoYW5nZSBpZiB0aGUg c291cmNlIGNvbnRlbnQgaGFzbid0IGNoYW5nZWQgKi8KPiA+ID4gKwlpZ3RfYXNzZXJ0X2NyY19l cXVhbCgmY3Jjc1swXSwgJmNyY3NbMV0pOwo+ID4gPiArCj4gPiA+ICsJaWd0X3BpcGVfY3JjX2Zy ZWUocGlwZV9jcmMpOwo+ID4gPiArCWZyZWUoY3Jjcyk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+IAo+ ID4gSSdtIG5vdCBhcyBjZXJ0YWluIGFib3V0IHdoYXQgZXhhY3RseSB0aGUgIm91dHAtaW5hY3Rp dmUiIHNvdXJjZSAob3IgdGhlCj4gPiBvdGhlciBDUkMgc291cmNlcykgaXMgc28gSSdtIG5vdCBz dXJlIHdoYXQgdG8gcHV0IGluIHRoZSBkb2MtYmxvY2sgdGhhdAo+ID4gSSdkIHJlY29tbWVuZCBw dXR0aW5nIGhlcmUuCj4gPiAKPiA+ID4gK3N0YXRpYyB2b2lkIHRlc3Rfc291cmNlX291dHBfaW5h Y3RpdmUoZGF0YV90ICpkYXRhKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBjb2xvcl9mYiBjb2xv cnNbXSA9IHsKPiA+ID4gKwkJeyAuciA9IDEuMCwgLmcgPSAwLjAsIC5iID0gMC4wIH0sCj4gPiA+ ICsJCXsgLnIgPSAwLjAsIC5nID0gMS4wLCAuYiA9IDAuMCB9LAo+ID4gPiArCX07Cj4gPiA+ICsJ aWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjOwo+ID4gPiArCWNvbnN0IGludCBmZCA9IGRhdGEtPmRy bV9mZDsKPiA+ID4gKwljb25zdCBpbnQgbl9jb2xvcnMgPSBBUlJBWV9TSVpFKGNvbG9ycyk7Cj4g PiA+ICsKPiA+ID4gKwlwaXBlX2NyYyA9IGlndF9waXBlX2NyY19uZXcoZmQsIGRhdGEtPnBpcGUs ICJvdXRwLWluYWN0aXZlIik7Cj4gPiA+ICsJY3JlYXRlX2NvbG9ycyhkYXRhLCBjb2xvcnMsIG5f Y29sb3JzLCBwaXBlX2NyYyk7Cj4gPiA+ICsKPiA+ID4gKwkvKiBDaGFuZ2luZyB0aGUgY29sb3Ig c2hvdWxkIG5vdCBjaGFuZ2Ugd2hhdCdzIG91dHNpZGUgdGhlIGFjdGl2ZQo+ID4gPiByYXN0ZXIg Ki8KPiA+ID4gKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmY29sb3JzWzBdLmNyYywgJmNvbG9yc1sx XS5jcmMpOwo+ID4gPiArCj4gPiA+ICsJaWd0X3BpcGVfY3JjX2ZyZWUocGlwZV9jcmMpOwo+ID4g PiArCWRlc3Ryb3lfY29sb3JzKGRhdGEsIGNvbG9ycywgbl9jb2xvcnMpOwo+ID4gPiArfQo+ID4g PiArCj4gPiA+ICtkYXRhX3QgZGF0YSA9IHswLCB9Owo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIHBp cGVfdGVzdChuYW1lKSBpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLSIgbmFtZSwKPiA+ID4ga21zdGVz dF9waXBlX25hbWUocGlwZSkpCj4gPiA+ICtpZ3RfbWFpbgo+ID4gPiArewo+ID4gPiArCWludCBw aXBlOwo+ID4gPiArCj4gPiA+ICsJaWd0X2ZpeHR1cmUgewo+ID4gPiArCQlkYXRhLmRybV9mZCA9 IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVSX0FOWSk7Cj4gPiA+ICsJCWlndF9yZXF1aXJl X25vdXZlYXUoZGF0YS5kcm1fZmQpOwo+ID4gPiArCj4gPiA+ICsJCWttc3Rlc3Rfc2V0X3Z0X2dy YXBoaWNzX21vZGUoKTsKPiA+ID4gKwo+ID4gPiArCQlpZ3RfcmVxdWlyZV9waXBlX2NyYyhkYXRh LmRybV9mZCk7Cj4gPiA+ICsJCWlndF9kaXNwbGF5X3JlcXVpcmUoJmRhdGEuZGlzcGxheSwgZGF0 YS5kcm1fZmQpOwo+ID4gPiArCQlpZ3RfZGlzcGxheV9yZXNldCgmZGF0YS5kaXNwbGF5KTsKPiA+ ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlmb3JfZWFjaF9waXBlX3N0YXRpYyhwaXBlKSB7Cj4gPiA+ ICsJCWlndF9maXh0dXJlIHsKPiA+ID4gKwkJCWludCBkaXI7Cj4gPiA+ICsKPiA+ID4gKwkJCWRh dGEucGlwZSA9IHBpcGU7Cj4gPiA+ICsJCQlpZ3RfZGlzcGxheV9yZXF1aXJlX291dHB1dF9vbl9w aXBlKCZkYXRhLmRpc3BsYXksCj4gPiA+IHBpcGUpOwo+ID4gPiArCQkJZGF0YS5vdXRwdXQgPQo+ ID4gPiBpZ3RfZ2V0X3NpbmdsZV9vdXRwdXRfZm9yX3BpcGUoJmRhdGEuZGlzcGxheSwgcGlwZSk7 Cj4gPiA+ICsJCQlkYXRhLm1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKGRhdGEub3V0cHV0KTsK PiA+ID4gKwo+ID4gPiArCQkJLyogTm9uZSBvZiB0aGVzZSB0ZXN0cyBuZWVkIHRvIHBlcmZvcm0g bW9kZXNldHMsCj4gPiA+ICsJCQkgKiBqdXN0IHBhZ2UgZmxpcHMuIFNvIHJ1bm5pbmcgZGlzcGxh eSBzZXR1cAo+ID4gPiArCQkJICogaGVyZSBpcyBmaW5lCj4gPiA+ICsJCQkgKi8KPiA+ID4gKwkJ CWlndF9vdXRwdXRfc2V0X3BpcGUoZGF0YS5vdXRwdXQsIHBpcGUpOwo+ID4gPiArCQkJZGF0YS5w cmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmUoZGF0YS5vdXRwdXQsIDApOwo+ID4gPiArCQkJ aWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLmRybV9mZCwKPiA+ID4gKwkJCQkJICAgIGRhdGEubW9k ZS0+aGRpc3BsYXksCj4gPiA+ICsJCQkJCSAgICBkYXRhLm1vZGUtPnZkaXNwbGF5LAo+ID4gPiAr CQkJCQkgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiA+ID4gKwkJCQkJICAgIExPQ0FMX0RSTV9G T1JNQVRfTU9EX05PTkUsCj4gPiA+ICsJCQkJCSAgICAwLjAsIDAuMCwgMC4wLAo+ID4gPiArCQkJ CQkgICAgJmRhdGEuZGVmYXVsdF9mYik7Cj4gPiA+ICsJCQlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEu cHJpbWFyeSwgJmRhdGEuZGVmYXVsdF9mYik7Cj4gPiA+ICsJCQlpZ3RfZGlzcGxheV9jb21taXQo JmRhdGEuZGlzcGxheSk7Cj4gPiA+ICsKPiA+ID4gKwkJCWRpciA9IGlndF9kZWJ1Z2ZzX3BpcGVf ZGlyKGRhdGEuZHJtX2ZkLCBwaXBlLAo+ID4gPiBPX0RJUkVDVE9SWSk7Cj4gPiA+ICsJCQlpZ3Rf cmVxdWlyZV9mZChkaXIpOwo+ID4gPiArCQkJZGF0YS5udl9jcmNfZGlyID0gb3BlbmF0KGRpciwg Im52X2NyYyIsIE9fRElSRUNUT1JZKTsKPiA+ID4gKwkJCWNsb3NlKGRpcik7Cj4gPiA+ICsJCQlp Z3RfcmVxdWlyZV9mZChkYXRhLm52X2NyY19kaXIpOwo+ID4gPiArCQl9Cj4gPiA+ICsKPiA+ID4g KwkJLyogV2UgZG9uJ3QgbmVlZCB0byB0ZXN0IHRoaXMgb24gZXZlcnkgcGlwZSwgYnV0IHRoZQo+ ID4gPiArCQkgKiBzZXR1cCBpcyB0aGUgc2FtZSAqLwo+ID4gPiArCQlpZiAocGlwZSA9PSBQSVBF X0EpIHsKPiA+ID4gKwkJCWlndF9kZXNjcmliZSgiTWFrZSBzdXJlIHRoYXQgdGhlIENSQyBub3Rp ZmllciBjb250ZXh0Cj4gPiA+IGZsaXAgdGhyZXNob2xkICIKPiA+ID4gKwkJCQkgICAgICJpcyBy ZXNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZSBhZnRlciBhCj4gPiA+IHNpbmdsZSBjYXB0dXJlLiIp Owo+ID4gPiArCQkJaWd0X3N1YnRlc3QoImN0eC1mbGlwLXRocmVzaG9sZC1yZXNldC1hZnRlci1j YXB0dXJlIikKPiA+ID4gKwkJCQl0ZXN0X2N0eF9mbGlwX3RocmVzaG9sZF9yZXNldF9hZnRlcl9j YXB0dXJlKCZkCj4gPiA+IGF0YSk7Cj4gPiA+ICsJCX0KPiA+ID4gKwo+ID4gPiArCQlpZ3RfZGVz Y3JpYmUoIk1ha2Ugc3VyZSB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBlYWNoIENSQyBhbmQKPiA+ ID4gaXRzICIKPiA+ID4gKwkJCSAgICAgInJlc3BlY3RpdmUgZnJhbWUgaW5kZXggaXMgbm90IGJy b2tlbiB3aGVuIHRoZQo+ID4gPiBkcml2ZXIgIgo+ID4gPiArCQkJICAgICAicGVyZm9ybXMgYSBu b3RpZmllciBjb250ZXh0IGZsaXAuIik7Cj4gPiA+ICsJCXBpcGVfdGVzdCgiY3R4LWZsaXAtZGV0 ZWN0aW9uIikKPiA+ID4gKwkJCXRlc3RfY3R4X2ZsaXBfZGV0ZWN0aW9uKCZkYXRhKTsKPiA+ID4g Kwo+ID4gPiArCQlpZ3RfZGVzY3JpYmUoIk1ha2Ugc3VyZSB0aGF0IGlndF9waXBlX2NyY19nZXRf Y3VycmVudCgpIHdvcmtzCj4gPiA+IGV2ZW4gIgo+ID4gPiArCQkJICAgICAid2hlbiB0aGUgQ1JD IGZvciB0aGUgY3VycmVudCBmcmFtZSBpbmRleCBpcwo+ID4gPiBsb3N0LiIpOwo+ID4gPiArCQlw aXBlX3Rlc3QoImN0eC1mbGlwLXNraXAtY3VycmVudC1mcmFtZSIpCj4gPiA+ICsJCQl0ZXN0X2N0 eF9mbGlwX3NraXBfY3VycmVudF9mcmFtZSgmZGF0YSk7Cj4gPiA+ICsKPiA+ID4gKwkJaWd0X2Rl c2NyaWJlKCJDaGVjayB0aGF0IGJhc2ljIENSQyByZWFkYmFjayB1c2luZyB0aGUgb3V0cC0KPiA+ ID4gY29tcGxldGUgIgo+ID4gPiArCQkJICAgICAic291cmNlIHdvcmtzLiIpOwo+ID4gPiArCQlw aXBlX3Rlc3QoInNvdXJjZS1vdXRwLWNvbXBsZXRlIikKPiA+ID4gKwkJCXRlc3Rfc291cmNlKCZk YXRhLCAib3V0cC1jb21wbGV0ZSIpOwo+ID4gPiArCj4gPiA+ICsJCWlndF9kZXNjcmliZSgiQ2hl Y2sgdGhhdCBiYXNpYyBDUkMgcmVhZGJhY2sgdXNpbmcgdGhlIHJnCj4gPiA+IHNvdXJjZSAiCj4g PiA+ICsJCQkgICAgICJ3b3Jrcy4iKTsKPiA+ID4gKwkJcGlwZV90ZXN0KCJzb3VyY2UtcmciKQo+ ID4gPiArCQkJdGVzdF9zb3VyY2UoJmRhdGEsICJyZyIpOwo+ID4gPiArCj4gPiA+ICsJCWlndF9k ZXNjcmliZSgiTWFrZSBzdXJlIHRoYXQgdGhlIG91dHAtaW5hY3RpdmUgc291cmNlIGlzCj4gPiA+ IGFjdHVhbGx5ICIKPiA+ID4gKwkJCSAgICAgImNhcHR1cmluZyB0aGUgaW5hY3RpdmUgcmFzdGVy LiIpOwo+ID4gPiArCQlwaXBlX3Rlc3QoInNvdXJjZS1vdXRwLWluYWN0aXZlIikKPiA+ID4gKwkJ CXRlc3Rfc291cmNlX291dHBfaW5hY3RpdmUoJmRhdGEpOwo+ID4gPiArCj4gPiA+ICsJCWlndF9m aXh0dXJlIHsKPiA+ID4gKwkJCWlndF9vdXRwdXRfc2V0X3BpcGUoZGF0YS5vdXRwdXQsIFBJUEVf Tk9ORSk7Cj4gPiA+ICsJCQlpZ3RfZGlzcGxheV9jb21taXQoJmRhdGEuZGlzcGxheSk7Cj4gPiA+ ICsJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEuZHJtX2ZkLCAmZGF0YS5kZWZhdWx0X2ZiKTsKPiA+ID4g KwkJCWNsb3NlKGRhdGEubnZfY3JjX2Rpcik7Cj4gPiA+ICsJCX0KPiA+ID4gKwl9Cj4gPiA+ICsJ aWd0X2ZpeHR1cmUKPiA+ID4gKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKPiA+ ID4gKwo+ID4gPiArfQo+ID4gPiAtLSAKPiA+ID4gMi4yNi4yCj4gPiA+IAo+ID4gPiBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gPiBpZ3QtZGV2IG1h aWxpbmcgbGlzdAo+ID4gPiBpZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gPiBodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYKPiAtLSAK PiBDaGVlcnMsCj4gCUx5dWRlIFBhdWwgKHNoZS9oZXIpCj4gCVNvZnR3YXJlIEVuZ2luZWVyIGF0 IFJlZCBIYXQKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=