From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [DMC_BUGFIX_SKL_V2 1/5] drm/i915/skl: Added a check for the hardware status of csr fw before loading. Date: Tue, 29 Sep 2015 10:51:11 +0200 Message-ID: <20150929085111.GE3383@phenom.ffwll.local> References: <55F1D4B0.7050104@intel.com> <20150914074612.GE3383@phenom.ffwll.local> <55F9C1A9.7000106@intel.com> <20150923075738.GF3383@phenom.ffwll.local> <56031060.9040708@intel.com> <20150928065256.GH3383@phenom.ffwll.local> <5609D34D.4080902@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f177.google.com (mail-wi0-f177.google.com [209.85.212.177]) by gabe.freedesktop.org (Postfix) with ESMTPS id 041C66E18B for ; Tue, 29 Sep 2015 01:48:18 -0700 (PDT) Received: by wicfx3 with SMTP id fx3so4996281wic.0 for ; Tue, 29 Sep 2015 01:48:16 -0700 (PDT) Content-Disposition: inline In-Reply-To: <5609D34D.4080902@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Rafael J. Wysocki" Cc: Daniel Vetter , intel-gfx List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBTZXAgMjksIDIwMTUgYXQgMDE6NTQ6NTNBTSArMDIwMCwgUmFmYWVsIEouIFd5c29j a2kgd3JvdGU6Cj4gT24gOS8yOC8yMDE1IDg6NTIgQU0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4g Pk9uIFdlZCwgU2VwIDIzLCAyMDE1IGF0IDEwOjQ5OjM2UE0gKzAyMDAsIFJhZmFlbCBKLiBXeXNv Y2tpIHdyb3RlOgo+ID4+T24gOS8yMy8yMDE1IDc6MTcgUE0sIERhbmllbCBWZXR0ZXIgd3JvdGU6 Cj4gPj4+YWNwaV90YXJnZXRfc3lzdGVtX3N0YXRlKCkgc2VlbXMgdG8gYmUgYWxtb3N0IHRoZSB0 aGluZyB3ZSdyZSBsb29raW5nCj4gPj4+Zm9yLCBleGNlcHQgdGhhdCBpdCdzIG9ubHkgdmFsaWQg aW4gdGhlIHN1c3BlbmQgY2FsbGJhY2tzIHNpbmNlIGl0Cj4gPj4+Z2V0cyByZXNldCB0byBBQ1BJ X1NUQVRFX1MwIHdoZW4gcmVzdW1pbmcuIFNvIHByb2JhYmx5IHdlIHdhbnQKPiA+Pj5zb21ldGhp bmcgZWxzZSAuLi4KPiA+PlJpZ2h0Lgo+ID4+Cj4gPj5UaGUgaWRlYSBpcyB0byBhZGQgYSB3YXkg Zm9yIGRyaXZlcnMgdG8gY2hlY2sgaWYKPiA+PihhKSBzdXNwZW5kIGlzIGdvaW5nIHRvIGVudGVy IHRoZSBCSU9TCj4gPj4oYikgcmVzdW1lIGhhcyBiZWVuIHRyaWdnZXJlZCBieSB0aGUgQklPUwo+ ID4+YW5kIHRoYXQncyByZWFsbHkgd2hhdCBkcml2ZXJzIG5lZWQgdG8ga25vdy4KPiA+Pgo+ID4+ Rm9yIHN1c3BlbmQtdG8taWRsZSB0aG9zZSB0d28gd2lsbCByZXR1cm4gZmFsc2UgYW5kIGZvciBT MyB0aGV5J2xsIHJldHVybgo+ID4+dHJ1ZS4KPiA+Pgo+ID4+V291bGQgdGhhdCBoZWxwPwo+ID5O b3Qgc3VyZSB0aGF0IG1hdGNoZXMgZXhheHRseSB3aGF0IHdlJ2QgbmVlZCBoZXJlIC4uLiBFc3Nl bnRpYWxseSB3ZSBuZWVkCj4gPnRvIGtub3cgd2hldGhlciB3ZSd2ZSBiZWVuIGluIFMzL1M0IChm aXJtd2FyZSBoYXMgYmVlbiBlYXRlbikgb3IgaW4gb25lIG9mCj4gPnRoZSBoaWdoZXIgc3VzcGVu ZC10by1pZGxlL3N0YW5kYnkgc3RhdGVzIChmaXJtd2FyZSBzdGlsbCBhbGl2ZSwgZG9uJ3QKPiA+ ZGlzdHVyYiBpdCkuIEFkZGl0aW9uYWwgZnVuIHRoYXQganVzdCBjcm9zc2VkIG15IG1pbmQgaXMg dGhhdCBpZiB0aGUKPiA+c3VzcGVuZC10by1tZW0gaXMgYWJvcnRlZCAoc29tZSBvdGhlciBkcml2 ZXIgZmFpbGVkKSB0aGVuIHRoYXQgZnVuY3Rpb24KPiA+c2hvdWxkIF9ub3RfIGluZGljYXRlIHRo YXQgd2UndmUgYmVlbiBpbiBTMy4gU28gbWF5YmUgc29tZXRoaW5nIGxpa2UKPiAKPiBTbyBpdCBy ZWFsbHkgbG9va3MgbGlrZSB0aGUgaW50ZXJmYWNlIEkgd2FzIHRhbGtpbmcgYWJvdXQgd291bGQg YmUgc3VpdGFibGU6Cj4gCj4gcG1fc3VzcGVuZF92aWFfZmlybXdhcmUoKSA9PSB0cnVlIC0+IGZp cm13YXJlIGlzIGdvaW5nIHRvIGJlIGVhdGVuICh1c2UgdGhhdAo+IGR1cmluZyBzdXNwZW5kIGlm IG5lZWRlZCkKPiBwbV9yZXN1bWVfdmlhX2Zpcm13YXJlKCkgPT0gdHJ1ZSAtPiBmaXJtd2FyZSB3 YXMgZWF0ZW4KPiAKPiBUaGUgbGF0dGVyIHdpbGwgb25seSByZXR1cm4gJ3RydWUnIGlmIHdlIHJl YWxseSBoYXZlIGVudGVyZWQgdGhlIEJJT1MKPiAocGxhdGZvcm0gZmlybXdhcmUpLgoKWWVhaCB0 aGF0IHNlZW1zIHRvIGZpdCB0aGUgYmlsbC4gV2UgYWxyZWFkeSBoYXZlIGEgY2hlY2sgaW4gb3Vy IHN1c3BlbmQKcGF0aHMgdG8gZmlndXJlIG91dCB3aGV0aGVyIHdlJ2xsIHN1c3BlbmQgdG8gaWRs ZSBvciBnbyBpbnRvIGZ1bGwgUzMsIHNvCmk5MTUgY291bGQgdXNlIHRoZW0gYm90aC4gQW5kIG1h a2luZyB0aGVtIGdlbmVyaWMgd291bGQgbWFrZSBzZW5zZSBJCmd1ZXNzLgotRGFuaWVsCgo+ID5h Y3BpX3NvdXJjZV9zeXN0ZW1fc3RhdGUoKSB3aGljaCB1c3VhbGx5IGlzIFMwIGFuZCBvbmx5IHdo ZW4gYWNwaQo+ID5zdWNjZXNzZnVsbHkgd2VudCBpbnRvIHRoZSBzdXNwZW5kIHN0YXRlIGluIHBs YXRmb3JtX3N1c3BlbmRfb3BzLT5lbnRlciBpdAo+ID5nZXRzIHNldCB0byB0aGUgdmFsdWUgb2Yg YWNwaV90YXJnZXRfc3lzdGVtX3N0YXRlLiBBbmQgdGhlbiByZXNldCBvbmNlIHRoZQo+ID5yZXN1 bWUgaGFzIGNvbXBsZXRlZC4gSSB0aGluayB0aGF0IHdvdWxkIGJlIHdoYXQgd2UnZCB3YW50IGhl cmUuCj4gCj4gV2UgbmVlZCB0byBuZXcgZnVuY3Rpb25zIGxpa2UgdGhlIGFib3ZlLCBiZWNhdXNl IHNvbWUgdGhpbmdzIGFscmVhZHkgZGVwZW5kCj4gb24gYWNwaV90YXJnZXRfc3lzdGVtX3N0YXRl IHdvcmtpbmcgdGhlIHdheSBpdCBkb2VzIGN1cnJlbnRseS4KPiAKPiBJIHNlZSBubyByZWFzb24g dG8gbWFrZSB0aGF0IEFDUEktc3BlY2lmaWMsIHRob3VnaCwgaW4gcHJpbmNpcGxlLgo+IAo+ID5B bnl3YXkgSSdsbCBwdWxsIGluIEFuaW1lc2ggc2VyaWVzIG1lYW53aGlsZSwgYW1lbmRlZCB3aXRo IGEgRklYTUUgY29tbWVudC4KPiAKPiBGaW5lIGJ5IG1lLgo+IAo+IFRoYW5rcywKPiBSYWZhZWwK PiAKPiAKPiA+Pj5PbiBXZWQsIFNlcCAyMywgMjAxNSBhdCA2OjI4IFBNLCBEYW5pZWwgVmV0dGVy IDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ID4+Pj5BY3R1YWxseSBhZGQgUmFmYWVsIHRoaXMg dGltZSBhcm91bmQgLi4uCj4gPj4+Pi1EYW5pZWwKPiA+Pj4+Cj4gPj4+Pk9uIFdlZCwgU2VwIDIz LCAyMDE1IGF0IDY6MjcgUE0sIERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4gd3JvdGU6 Cj4gPj4+Pj5PbiBXZWQsIFNlcCAyMywgMjAxNSBhdCA5OjU3IEFNLCBEYW5pZWwgVmV0dGVyIDxk YW5pZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ID4+Pj4+Pk9uIFRodSwgU2VwIDE3LCAyMDE1IGF0IDEy OjUzOjIxQU0gKzA1MzAsIEFuaW1lc2ggTWFubmEgd3JvdGU6Cj4gPj4+Pj4+Pk9uIDkvMTQvMjAx NSAxOjE2IFBNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4+Pj4+Pj4+T24gRnJpLCBTZXAgMTEs IDIwMTUgYXQgMTI6MzY6MjRBTSArMDUzMCwgQW5pbWVzaCBNYW5uYSB3cm90ZToKPiA+Pj4+Pj4+ Pj5PbiA5LzEwLzIwMTUgODoxNSBQTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+Pj4+Pj4+Pj4+ T24gVGh1LCBTZXAgMTAsIDIwMTUgYXQgMDE6NTg6NTRBTSArMDUzMCwgQW5pbWVzaCBNYW5uYSB3 cm90ZToKPiA+Pj4+Pj4+Pj4+Pk9uIDkvMi8yMDE1IDI6MjQgUE0sIERhbmllbCBWZXR0ZXIgd3Jv dGU6Cj4gPj4+Pj4+Pj4+Pj4+T24gV2VkLCBBdWcgMjYsIDIwMTUgYXQgMDc6NDA6NTRQTSArMDUz MCwgQW5pbWVzaCBNYW5uYSB3cm90ZToKPiA+Pj4+Pj4+Pj4+Pj4+T24gOC8yNi8yMDE1IDY6NDAg UE0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPj4+Pj4+Pj4+Pj4+Pj5PbiBXZWQsIEF1ZyAyNiwg MjAxNSBhdCAwMTozNjowNUFNICswNTMwLCBBbmltZXNoIE1hbm5hIHdyb3RlOgo+ID4+Pj4+Pj4+ Pj4+Pj4+PkRtYyB3aWxsIHJlc3RvcmUgdGhlIGNzciBwcm9ncmFtIGV4Y2VwdCBEQzksIGNvbGQg Ym9vdCwKPiA+Pj4+Pj4+Pj4+Pj4+Pj53YXJtIHJlc2V0LCBQQ0kgZnVuY3Rpb24gbGV2ZWwgcmVz ZXQsIGFuZCBoaWJlcm5hdGUvc3VzcGVuZC4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+ Pj4+Pj5pbnRlbF9jc3JfbG9hZF9wcm9ncmFtKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBsb2FkIHRo ZSBmaXJtd2FyZQo+ID4+Pj4+Pj4+Pj4+Pj4+PmRhdGEgZnJvbSBrZXJuZWwgbWVtb3J5IHRvIGNz ciBhZGRyZXNzIHNwYWNlLgo+ID4+Pj4+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4+Pj4+PkFsbCB2 YWx1ZXMgb2YgY3NyIGFkZHJlc3Mgc3BhY2Ugd2lsbCBiZSB6ZXJvIGlmIGl0IGdvdCByZXNldCBh bmQKPiA+Pj4+Pj4+Pj4+Pj4+Pj50aGUgZmlyc3QgYnl0ZSBvZiBjc3IgcHJvZ3JhbSBpcyBhbHdh eXMgYSBub24temVybyBpZiBmaXJtd2FyZQo+ID4+Pj4+Pj4+Pj4+Pj4+PmlzIGxvYWRlZCBzdWNj ZXNzZnVseS4gQmFzZWQgb24gaGFyZHdhcmUgc3RhdHVzIHdpbGwgbG9hZCB0aGUKPiA+Pj4+Pj4+ Pj4+Pj4+Pj5maXJtd2FyZS4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4+Pj5XaXRo b3V0IHRoaXMgY29uZGl0aW9uIGNoZWNrIGlmIHdlIG92ZXJ3cml0ZSB0aGUgZmlybXdhcmUgZGF0 YSB0aGUKPiA+Pj4+Pj4+Pj4+Pj4+Pj5jb3VudGVycyBleHBvc2VkIGZvciBkYzUvZGM2IChoZWxw IGZvciBkZWJ1Z2dpbmcpIHdpbGwgYmUgbnVsbGlmaWVkLgo+ID4+Pj4+Pj4+Pj4+Pj5CYWNhdXNl IG9mIHRoZSBhYm92ZSByZWFzb24gbWVudGlvbmVkIGp1c3QgYWJvdmUgd2UgbmVlZCB0byBibG9j ayBmaXJtd2FyZSBsb2FkaW5nIGFnYWluLgo+ID4+Pj4+Pj4+Pj4+Pj5TbyBvbmx5IFdBUk5fT04g d2lsbCBub3QgaGVscC4KPiA+Pj4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+ Pj4+Pj4+PnYxOiBJbml0aWFsIHZlcnNpb24uCj4gPj4+Pj4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+ Pj4+Pj4+djI6IEJhc2VkIG9uIHJldmlldyBjb21tZW50cyBmcm9tIERhbmllbCwKPiA+Pj4+Pj4+ Pj4+Pj4+Pj4tIEFkZGVkIGEgY2hlY2sgdG8ga25vdyBoYXJkd2FyZSBzdGF0dXMgYW5kIGxvYWQg dGhlIGZpcm13YXJlIGlmIG5vdCBsb2FkZWQuCj4gPj4+Pj4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+ Pj4+Pj4+Q2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29tPgo+ID4+Pj4+ Pj4+Pj4+Pj4+PkNjOiBEYW1pZW4gTGVzcGlhdSA8ZGFtaWVuLmxlc3BpYXVAaW50ZWwuY29tPgo+ ID4+Pj4+Pj4+Pj4+Pj4+PkNjOiBJbXJlIERlYWsgPGltcmUuZGVha0BpbnRlbC5jb20+Cj4gPj4+ Pj4+Pj4+Pj4+Pj4+Q2M6IFN1bmlsIEthbWF0aCA8c3VuaWwua2FtYXRoQGludGVsLmNvbT4KPiA+ Pj4+Pj4+Pj4+Pj4+Pj5TaWduZWQtb2ZmLWJ5OiBBbmltZXNoIE1hbm5hIDxhbmltZXNoLm1hbm5h QGludGVsLmNvbT4KPiA+Pj4+Pj4+Pj4+Pj4+Pj5TaWduZWQtb2ZmLWJ5OiBWYXRoc2FsYSBOYWdh cmFqdSA8dmF0aHNhbGEubmFnYXJhanVAaW50ZWwuY29tPgo+ID4+Pj4+Pj4+Pj4+Pj4+Pi0tLQo+ ID4+Pj4+Pj4+Pj4+Pj4+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3NyLmMgfCA5ICsr KysrKysrKwo+ID4+Pj4+Pj4+Pj4+Pj4+PiAgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygr KQo+ID4+Pj4+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4+Pj4+PmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9jc3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Nz ci5jCj4gPj4+Pj4+Pj4+Pj4+Pj4+aW5kZXggYmExYWUwMy4uNjgyY2MyNiAxMDA2NDQKPiA+Pj4+ Pj4+Pj4+Pj4+Pj4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jc3IuYwo+ID4+Pj4+ Pj4+Pj4+Pj4+PisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Nzci5jCj4gPj4+Pj4+ Pj4+Pj4+Pj4+QEAgLTI1Miw2ICsyNTIsMTUgQEAgdm9pZCBpbnRlbF9jc3JfbG9hZF9wcm9ncmFt KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPj4+Pj4+Pj4+Pj4+Pj4+ICAgICAgICAgICAgICBy ZXR1cm47Cj4gPj4+Pj4+Pj4+Pj4+Pj4+ICAgICAgfQo+ID4+Pj4+Pj4+Pj4+Pj4+PisgICAgIC8q Cj4gPj4+Pj4+Pj4+Pj4+Pj4+KyAgICAgICogRG1jIHdpbGwgcmVzdG9yZSB0aGUgY3NyIHRoZSBw cm9ncmFtIGV4Y2VwdCBEQzksIGNvbGQgYm9vdCwKPiA+Pj4+Pj4+Pj4+Pj4+Pj4rICAgICAgKiB3 YXJtIHJlc2V0LCBQQ0kgZnVuY3Rpb24gbGV2ZWwgcmVzZXQsIGFuZCBoaWJlcm5hdGUvc3VzcGVu ZC4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4rICAgICAgKiBUaGlzIGNvbmRpdGlvbiB3aWxsIGhlbHAgdG8g Y2hlY2sgaWYgY3NyIGFkZHJlc3Mgc3BhY2UgaXMgcmVzZXQvCj4gPj4+Pj4+Pj4+Pj4+Pj4+KyAg ICAgICogbm90IGxvYWRlZC4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4rICAgICAgKi8KPiA+Pj4+Pj4+Pj4+ Pj4+PkF0bSB3ZSBjYWxsIHRoaXMgZnJvbSBkcml2ZXIgbG9hZCBhbmQgcmVzdW1lLCB3aGljaCBk b2VzbiBzZWVtIHRvIGNvdmVyCj4gPj4+Pj4+Pj4+Pj4+Pj5hbGwgdGhlIGNhc2VzIHlvdSBtZW50 aW9uIGluIHRoZSBjb21tZW50LiBTaG91bGQgdGhpcyBiZSBhIFdBUk5fT04KPiA+Pj4+Pj4+Pj4+ Pj4+Pmluc3RlYWQ/IE9yIGRvIHdlIGhhdmUgdHJvdWJsZXMgaW4gb3VyIGluaXQgc2VxdWVuY2Ug d2hlcmUgd2UgbG9hZCB0b28KPiA+Pj4+Pj4+Pj4+Pj4+Pm1hbnkgdGltZXM/Cj4gPj4+Pj4+Pj4+ Pj4+PlllcywgdGhlIGFib3ZlIHN0YXRlbWVudCB0YWtlbiBmcm9tIGJzcGVjIHRvIGRlc2NyaWJl IGFib3V0IHRoZSBzcGVjaWFsIGNhc2VzIGRtYyB3aWxsIG5vdCByZXN0b3JlIHRoZSBmaXJtd2Fy ZS4KPiA+Pj4+Pj4+Pj4+Pj4+QWdyZWUsIEluIG91ciBjYXNlcyBjb2xkIGJvb3QgYW5kIGhpYmVy bmF0ZS9zdXNwZW5kIG1haW5seSB3ZSBuZWVkIHRvIGxvYWQgdGhlIGZpcm13YXJlIGFnYWluLCBz byBpbiBteQo+ID4+Pj4+Pj4+Pj4+Pj5zZWNvbmQgc2VudGVuY2UgSSB3YW50ZWQgdG8gY29tbWVu dCBtYWlubHkgcmVnYXJkaW5nIHRoaXMgY29uZGl0aW9uIGNoZWNrIGFkZGVkIGZvciBzdXNwZW5k LWhpYmVybmF0ZShyZXNldCkKPiA+Pj4+Pj4+Pj4+Pj4+YW5kIGNvbGQgYm9vdChub3QgbG9hZGVk KS4KPiA+Pj4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4+PkFueXdheXMgdGhlIHNhbWUgYXBpIGxh dGVyIGNhbiBiZSB1c2VkIHRvIGxvYWQgdGhlIGZpcm13YXJlIGZyb20gYW55d2hlcmUsIHNvIG15 IGludGVudGlvbiB0byBjaGVjayBmaXJtd2FyZSBsb2FkZWQgb3Igbm90Lgo+ID4+Pj4+Pj4+Pj4+ Pj5JZiBhbHJlYWR5IGxvYWRlZCB0aGVuIG5vdCB0byBvdmVyd3JpdGUgdGhlIGNzciBhZGRyZXNz IHNwYWNlIHRvIG1haW50YWluIHRoZSBkYzUvZGM2IGNvdW50ZXIgdmFsdWUuCj4gPj4+Pj4+Pj4+ Pj4+Pgo+ID4+Pj4+Pj4+Pj4+Pj5DYW4gdGhlIGJlbG93IGNvbW1lbnQgbW9yZSBjbGVhciB0byB5 b3UuCj4gPj4+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4+Pj4gICAgICAgIC8qCj4gPj4+Pj4+Pj4+ Pj4+PiAgICAgICAgICogRG1jIHdpbGwgcmVzdG9yZSB0aGUgY3NyIHRoZSBwcm9ncmFtIGV4Y2Vw dCBEQzksIGNvbGQgYm9vdCwKPiA+Pj4+Pj4+Pj4+Pj4+ICAgICAgICAgKiB3YXJtIHJlc2V0LCBQ Q0kgZnVuY3Rpb24gbGV2ZWwgcmVzZXQsIGFuZCBoaWJlcm5hdGUvc3VzcGVuZC4KPiA+Pj4+Pj4+ Pj4+Pj4+ICAgICAgICAgKiBJZiBmaXJtd2FyZSBpcyByZXN0b3JlZCBieSBkbWMgdGhlbiBubyBu ZWVkIHRvIGxvYWQgYWdhaW4gd2hpY2gKPiA+Pj4+Pj4+Pj4+Pj4+ICAgICAgICAgKiB3aWxsIGtl ZXAgdGhlIGRjNS9kYzYgY291bnRlciBleHBvc2VkIGJ5IGZpcm13YXJlLgo+ID4+Pj4+Pj4+Pj4+ Pj4gICAgICAgICAqLwo+ID4+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4+Tm8gaXNzdWUgaW4g aW5pdCBzZXF1ZW5jZS4KPiA+Pj4+Pj4+Pj4+Pj5UaGF0IHNlZW1zIHRvIHN0aWxsIGNvdmVyIGFs bCB0aGUgY2FsbGVycyBvZiB0aGUgZnVuY3Rpb24gYWZhaWNzIC0gd2UgZG8KPiA+Pj4+Pj4+Pj4+ Pj5wY2kgcmVzZXRzIG92ZXIgc3VzcGVuZCByZXN1bWUgdW5jb25kaXRpb25hbGx5LiBTbyBJIHN0 aWxsIGRvbid0Cj4gPj4+Pj4+Pj4+Pj4+dW5kZXJzdGFuZCB3aGVyZSBleGFjdGx5IHdlIHRyeSB0 byBsb2FkIHRoZSBkbWMgZmlybXdhcmUgaW4gaTkxNS5rbyB3aGVuCj4gPj4+Pj4+Pj4+Pj4+aXQn cyBhbHJlYWR5IGxvYWRlZC4KPiA+Pj4+Pj4+Pj4+PkR1cmluZyByZXN1bWUgaW50ZWxfY3NyX2xv YWRfcHJvZ3JhbSgpIHdpbGwgYmUgY2FsbGVkIGZyb20KPiA+Pj4+Pj4+Pj4+PmludGVsX3J1bnRp bWVfcmVzdW1lKCkuCj4gPj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+PmludGVsX3J1bnRpbWVfcmVz dW1lKCktPiBza2xfcmVzdW1lX3ByZXBhcmUoKS0+IGludGVsX2Nzcl9sb2FkX3Byb2dyYW0oKQo+ ID4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj5EdXJpbmcgUGMxMCBlbnRyeSB0ZXN0aW5nIEkgY2Fu IHNlZSBkbWMgaXMgcmVzdG9yaW5nIGJhY2sgdGhlIGZpcm13YXJlIGFsd2F5cywKPiA+Pj4+Pj4+ Pj4+PmJ1dCBhcyB5b3UgbWVudGlvbmVkIHBjaS1yZXNldCBjYW4gaGFwcGVuIHVuY29uZGl0aW9u YWxseSwgYnV0IHN0aWxsIHRoZW4KPiA+Pj4+Pj4+Pj4+PmFsc28gZHVyaW5nIHJlc3VtZSBpbnRl bF9ydW50aW1lX3Jlc3VtZSgpIHdpbGwgYmUgY2FsbGVkIGFuZCBiYXNlZCBvbgo+ID4+Pj4+Pj4+ Pj4+cmVnaXN0ZXIgcmVhZCBvZiBjc3ItYmFzZS1hZGRyZXNzIGZpcm13YXJlIGxvYWRpbmcgd2ls bCBoYXBwZW4uCj4gPj4+Pj4+Pj4+PkJ1dCBpbiB5b3VyIGNvbW1lbnQgeW91J3JlIHNheWluZyBp dCB3b24ndCBnZXQgcmVzdG9yZWQgaW4gY2FzZSBvZiBkYzkgYW5kCj4gPj4+Pj4+Pj4+PnN1c3Bl bmQuIFNvIHRoYXQgc2VlbXMgdG8gbWlzbWF0Y2ggd2hhdCB5b3UncmUgc2F5aW5nIGhlcmUgKGFu ZCB3aGF0IHRoZQo+ID4+Pj4+Pj4+Pj5jb21taXQgbWVzc2FnZSBzYXlzKSBhbmQgd2hhdCB0aGUg Y29kZSBkb2VzLiBBbmQgdGhpcyBmdW5jdGlvbiBoZXJlIGlzCj4gPj4+Pj4+Pj4+PmNhbGxlZCBm b3IgcmVzdW1lIGFmdGVyIHN1c3BlbmQvaGliZXJuYXRlIG9ubHkuCj4gPj4+Pj4+Pj4+cGMxMCBl bnRyeSBleHBsYW5hdGlvbiBJIHRvbGQgaXMgZm9yIHNreWxha2UuIGRjOSBpbiBza3lsYWtlIGlz IG5vdCBwb3NzaWJsZS4KPiA+Pj4+Pj4+Pj5JIHRoaW5rIHlvdSBhcmUgY29uZnVzaW5nIGJldHdl ZW4gZGM2IGFuZCBkYzkuIFBjMTAgY2FuIGJlIGFjaGlldmVkIGJ5Cj4gPj4+Pj4+Pj4+ZW50ZXJp bmcgaW50byBkYzYgKG5vdCBkYzkpIGZvciBza3lsYWtlLiBkYzkgaXMgdGhlIGxvd2VzdCBwb3Nz aWJsZSBzdGF0ZQo+ID4+Pj4+Pj4+PmZvciBicm94dG9uIHdoaWNoIGlzIG5vdCBwcmVzZW50IGZv ciBza3lsYWtlLgo+ID4+Pj4+Pj4+SSBoYXZlIG5vIGlkZWEgYXQgYWxsIGFib3V0IGRpZmZlcmVu dCBwYyBsZXZlbHMgb24gc2tsLiBXaGF0IEknbSB0YWxraW5nCj4gPj4+Pj4+Pj5hYm91dCBpcyBz eXN0ZW0gc3VzcGVuZC9yZXN1bWUgYW5kIGRyaXZlciBsb2FkLCB3aGljaCBhcmUgdGhlIHBsYWNl cyB0aGlzCj4gPj4+Pj4+Pj5mdW5jdGlvbiBnZXRzIGNhbGxlZC4gQXQgbGVhc3QgYWZhaWNzLgo+ ID4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+SGVyZSBpbnRlbF9jc3JfbG9hZF9wcm9ncmFtKCkgd2lsbCBi ZSB1c2VkIGZvciBib3RoIHNreWxha2UgYW5kIGJyb3h0b24sIGFuZCBpbnN0cnVjdGlvbgo+ID4+ Pj4+Pj4+PmV4ZWN1dGlvbiBmbG93IHdpbGwgYmUgZGlmZmVyZW50IGluIGNhc2Ugb2Ygc3VzcGVu ZC9yZXN1bWUgd2hpY2ggSSB0aGluayBpcyBjb25mdXNpbmcKPiA+Pj4+Pj4+Pj55b3UuCj4gPj4+ Pj4+Pj5UaGF0IHNlZW1zIGxpa2UgcmVhbGx5IGltcG9ydGFudCBpbmZvcm1hdGlvbi4gV2hhdCdz IGRpZmZlcmVudCBvbiBieHQ/Cj4gPj4+Pj4+Pj5UaGVzZSBhcmUgdGhlIGtpbmQgb2YgZGV0YWls cyB5b3Ugc2hvdWxkIGV4cGxhaW4gaW4gdGhlIGNvbW1pdCBtZXNzYWdlIC4uLgo+ID4+Pj4+Pj4+ Cj4gPj4+Pj4+Pj4+SSBhbSByZWFkeSBleHBsYWluIHlvdSBpbiBkZXRhaWwuIEl0IHdpbGwgYmUg Z29vZCBpZiB3ZSBkaXNjdXNzIHNwZWNpZmljIHVzZS1jYXNlIHNjZW5hcmlvCj4gPj4+Pj4+Pj4+ YW5kIGl0eiBzb2Z0d2FyZSBkZXNpZ24gZm9yIHNwZWNpZmljIHBsYXRmb3JtLiBBbm90aGVyIHBv aW50IC0gYXMgZG1jIHJlbGF0ZWQgY29kZSBmb3IKPiA+Pj4+Pj4+Pj5icm94dG9uIGlzIG5vdCBt ZXJnZWQgYmV0dGVyIGZpcnN0IHdlIGNsb3NlIGRlc2lnbiBmb3Igc2t5bGFrZS4gTm93LCBJIGhh dmUgYWRkZWQgZGM5Cj4gPj4+Pj4+Pj4+ZGVzY3JpcHRpb24gaW4gY29tbWVudCB0aGlua2luZyBv ZiBmdXR1cmUuIElmIHlvdSB3YW50IEkgY2FuIHJlbW92ZSBmb3Igbm93IGFuZCBsYXRlcgo+ID4+ Pj4+Pj4+PmNhbiBhZGQgaW4gYnh0IHBhdGNoIHNlcmllcyBmb3IgZW5hYmxpbmcgZG1jLiBXaWxs IHdhaXQgZm9yIHlvdXIgcmVwbHkuCj4gPj4+Pj4+Pj5UaGlzIHF1ZXN0aW9uIGhlcmUgaXNuJ3Qg YWJvdXQgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBob3cgdG8gaGFuZGxlIHBvd2VyCj4gPj4+Pj4+ Pj53ZWxscyBpbiBza2wvYnh0LiBUaGF0J3MgYSBzZXBhcmF0ZSBkaXNjdXNzaW9uIGFuZCB0cmFj a2VkIHNvbWV3aGVyZSBlbHNlLgo+ID4+Pj4+Pj4+SSdtIHJlYWxseSBqdXN0IGNvbmZ1c2VkIGFi b3V0IHdoZW4gZXhhY3RseSB3ZSBuZWVkIHRvIHJlbG9hZCB0byBmaXJtd2FyZSwKPiA+Pj4+Pj4+ PmFuZCB3aHkgd2UgbmVlZCBhIHJ1bnRpbWUgY2hlY2sgZm9yIHRoYXQuIE5vcm1hbGx5IHdlIHNo b3VsZCBrbm93IHdoZW4gdG8KPiA+Pj4+Pj4+PnJlbG9hZCB0aGUgZmlybXdhcmUgYW5kIGp1c3Qg ZWl0aGVyIHJlbG9hZCBvciBub3QsIHdpdGhvdXQgY2hlY2tpbmcgaHcKPiA+Pj4+Pj4+PnN0YXRl LiBBbmQgSSBkb24ndCBsaWtlIGNoZWNraW5nIGZvciBodyBzdGF0ZSBzaW5jZSBhdCBsZWFzdCBp biB0aGUgcGFzdAo+ID4+Pj4+Pj4+dGhhdCBraW5kIG9mIGNvZGUgZW5kZWQgdXAgYmVpbmcgZnJh Z2lsZSAtIGl0J3MgYW4gaWxsdXNpb24gdGhhdCBpdCBkb2VzCj4gPj4+Pj4+Pj50aGUgcmlnaHQg dGhpbmcgbm8gbWF0dGVyIHdoYXQsIHNpbmNlIG9mdGVuIHRoZXJlJ3Mgb3RoZXIgdHJpY2t5IG9y ZGVyaW5nCj4gPj4+Pj4+Pj5jb25zdHJhaW50cy4gQW5kIGlmIHlvdSBoYXZlIGF1dG9tYXRpYyBk dWN0LXRhcGUgbGlrZSB0aGVuIG5vIG9uZSB3aWxsCj4gPj4+Pj4+Pj5ldmVyIHNwb3QgdGhvc2Ug b3RoZXIsIGhhcmRlciB0byBzcG90IGlzc3VlcywgdW50aWwgYW4gZXhwZW5zaXZlIGN1c3RvbWVy Cj4gPj4+Pj4+Pj5lc2NhbGF0aW9uIGhhcHBlbnMuCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PlNvIHdo YXQgSSB3YW50IHRvIGtub3cgaGVyZSBpczoKPiA+Pj4+Pj4+Pi0gV2hlbiBleGFjdGx5IGRvIHdl IG5lZWQgdG8gcmVsb2FkIGRtYyBmaXJtd2FyZS4KPiA+Pj4+Pj4+SW4gc2tsLCBkdXJpbmcgZHJp dmVyIGxvYWQgZmlyc3QgdGltZSB3ZSBsb2FkIHRoZSBmaXJtd2FyZSwgZHVyaW5nIG5vcm1hbAo+ ID4+Pj4+Pj5zdXNwZW5kLXJlc3VtZSAoZGM2IGVudHJ5L2V4aXQpCj4gPj4+Pj4+Pm5vIG5lZWQg dG8gcmVsb2FkIHRoZSBmaXJtd2FyZSBhZ2FpbiBhcyBkbWMgd2lsbCB0YWtlIGNhcmUgb2YgaXQu IEJ1dCBkdXJpbmcKPiA+Pj4+Pj4+c3VzcGVuZC9oaWJlcm5hdGlvbgo+ID4+Pj4+Pj5kbWMgd2ls bCBub3QgcmVzdG9yZSB0aGUgZmlybXdhcmUuIEluIHRoYXQgY2FzZSBkcml2ZXIgbmVlZCB0byBy ZWxvYWQgaXQKPiA+Pj4+Pj4+YWdhaW4uIEkgZG8gbm90IGtub3cKPiA+Pj4+Pj4+aG93IHRvIGRp ZmZlcmVudGlhdGUgcG0tc3VzcGVuZCBhbmQgc3VzcGVuZC1oaWJlcm5hdGlvbiBhbmQgdGhvdWdo dCBib3RoIHRoZQo+ID4+Pj4+Pj5jYXNlcwo+ID4+Pj4+Pj5pbnRlbF9ydW50aW1lX3Jlc3VtZSgp IHdpbGwgYmUgY2FsbGVkIHdoZXJlIHdlIGNhbiBjaGVjayB0aGUgaC93IHN0YXRlIGFuZAo+ID4+ Pj4+Pj5yZWxvYWQgdGhlCj4gPj4+Pj4+PmZpcm13YXJlIGlmIGRtYyBpcyBub3QgcmVzdG9yZWQu Cj4gPj4+Pj4+Pgo+ID4+Pj4+Pj5JbiBieHQsIGR1cmluZyBkcml2ZXIgbG9hZCBmaXJzdCB0aW1l IHdlIGxvYWQgdGhlIGZpcm13YXJlLCBkdXJpbmcgbm9ybWFsCj4gPj4+Pj4+PnN1c3BlbmQtcmVz dW1lCj4gPj4+Pj4+PmRpc3BsYXkgZW5naW5lIHdpbGwgZW50ZXIgaW50byBkYzkgYW5kIGRtYyB3 aWxsIG5vdCByZXN0b3JlIHRoZSBmaXJtd2FyZS4gU28KPiA+Pj4+Pj4+ZXZlcnkKPiA+Pj4+Pj4+ c3VzcGVuZC1yZXN1bWUgd2UgbmVlZCB0byByZWxvYWQgdGhlIGZpcm13YXJlLgo+ID4+Pj4+Pj4+ LSBXaGF0IGV4YWN0bHkgaXMgdGhlIHJlYXNvbiB3aHkgd2UgY2FuJ3QgbWFrZSB0aGF0IGRlY2lz aW9uIHN0YXRpY2FsbHkgaW4KPiA+Pj4+Pj4+PiAgIHRoZSBjb2RlIChieSBjYWxsaW5nIGNzcl9s b2FkIGF0IHRoZSByaWdodCBzcG90cykuCj4gPj4+Pj4+PkFzIEkgbWVudGlvbmVkIGJlZm9yZSBp biBjYXNlIG9mIHNreWxha2UgY2FuIHdlIGRpZmZlcmVudGlhdGUgYmV0d2Vlbgo+ID4+Pj4+Pj4i cmVzdW1lIGZyb20gcG0tc3VzcGVuZCIgd2l0aCAicmVzdW1lIGZyb20gc3VzcGVuZC1oaWJlcm5h dGlvbiIgaW5zaWRlCj4gPj4+Pj4+PmRyaXZlcj8KPiA+Pj4+Pj4+Cj4gPj4+Pj4+PkluIGNhc2Ug b2YgYnJveHRvbiwgZXZlcnkgdGltZSB3ZSBuZWVkIHRvIHJlbG9hZCwgc28gd2UgY2FuIGRlY2lk ZQo+ID4+Pj4+Pj5zdGF0aWNhbGx5Lgo+ID4+Pj4+Pk9mIGNvdXJzZSB3ZSBjYW4gZGlmZmVyZW50 aWF0ZSBiZXR3ZWVuIGFsbCB0aGUgZGlmZmVyZW50IHJlc3VtZSBwYXRocywgYW5kCj4gPj4+Pj4+ d2UgYWxzbyBoYXZlIGEgcGVyLXBsYXRmb3JtIHNwbGl0IHRvIHRha2UgY2FyZSBvZiBieHQgdnMu IHNrbC4gQW5kIHRoZXJlCj4gPj4+Pj4+YXJlIGFjdHVhbGx5IDMgZGlmZmVyZW50IHJlc3VtZSBw YXRoczoKPiA+Pj4+Pj4KPiA+Pj4+Pj4tIHJ1bnRpbWUgUE0gcmVzdW1lLiBUaGlzIGNhbGxzIHRo ZSBydW50aW1lX3Jlc3VtZSBob29rLiBJdCBzb3VuZHMgbGlrZSBvbgo+ID4+Pj4+PiAgIHNrbCB3 ZSBzaG91bGQgX25vdF8gbG9hZCB0aGUgY3NyIGZpcm13YXJlLCBidXQgb24gYnh0IHdlIHNob3Vs ZCBsb2FkIGl0Lgo+ID4+Pj4+PiAgIFRoaXMgY2FuIGJlIGZpeGVkIGJ5IHJlbW92aW5nIHRoZSBp bnRlbF9jc3JfbG9hZF9wcm9ncmFtIGNhbGwgZnJvbQo+ID4+Pj4+PiAgIHNrbF9yZXN1bWVfcHJl cGFyZS4KPiA+Pj4+Pj4tIHJlc3VtZSBmcm9tIGhpYmVybmF0ZS10by1kaXNrIChpLmUuIHN5c3Rl bSBjb21wbGV0ZWx5IG9mZiwgc3RhdGUgc3RvcmVkCj4gPj4+Pj4+ICAgb24gdGhlIHN3YXAgcGFy dGl0aW9uKSBpcyBkb25lIGJ5IGNhbGxpbmcgdGhlIHRoYXcgY2FsbGJhY2tzLgo+ID4+Pj4+Pi0g cmVzdW1lIGZyb20gc3VzcGVuZC10by1tZW0gKGkuZS4gc3lzdGVtIGluIGxvdy1wb3dlciB3aXRo IG9ubHkgbWVtb3J5Cj4gPj4+Pj4+ICAgaW4gc2VsZi1yZWZyZXNoLCBhbGwgc3RhdGUgc3RvcmVk IGluIG1lbW9yeSkgaXMgZG9uZSBieSBjYWxsaW5nIHRoZQo+ID4+Pj4+PiAgIHJlc3VtZSBjYWxs YmFja3MuCj4gPj4+Pj4+Cj4gPj4+Pj4+Rm9yIGk5MTUgd2UgdXNlIHVuaWZpZWQgaGFuZGxlcnMg aW4gb3VyIGRldl9wbV9vcHMgZm9yIGJvdGggdGhhdyBhbmQKPiA+Pj4+Pj5yZXN1bWUsIGJ1dCBp dCBzb3VuZHMgbGlrZSB0aGF0IHdvbid0IGJlIGEgcHJvYmxlbSBmb3Igc2tsL2J4dCBzaW5jZSB3 ZQo+ID4+Pj4+Pm5lZWQgdG8gcmVsb2FkIHRoZSBjc3IgZmlybXdhcmUgaW4gYWxsIGNhc2VzLiBB bHRob3VnaCBJJ20gbm90IHBlcmZlY3RseQo+ID4+Pj4+PnN1cmUgc2luY2UgeW91IGRvbid0IGV4 cGxhaW4gd2hhdCBraW5kIG9mIHJlc3VtZSB5b3UgbWVhbiBleGFjdGx5IChzaW5jZQo+ID4+Pj4+ PnlvdSBkb24ndCB1c2UgdGhlIGxpbnV4IG5hbWVzIGZvciB0aGVtKS4KPiA+Pj4+Pj4KPiA+Pj4+ Pj5Bbnl3YXkgaXQgc291bmRzIGxpa2Ugd2UgY2FuIHJlcGxhY2UgdGhpcyBwYXRjaCBieSBvbmUg d2hlcmUgd2UgcmVtb3ZlCj4gPj4+Pj4+dGhhdCBlcnJvcm5vdXMgY3NyIGxvYWQgY2FsbCBmcm9t IHNrbCBydW50aW1lIHBtIHJlc3VtZSBhbmQgdGhhdCdzIGFsbC4KPiA+Pj4+Pj5CdXQgSSBzdWdn ZXN0IHRvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhpcyByaWdodCB3ZSBrZWVwIHRoZSBjaGVjayB5b3Un cmUKPiA+Pj4+Pj5hZGRpbmcgaGVyZSwgYnV0IHdyYXAgaXQgaW4gYSBXQVJOX09OLiBUaGVuIHdl J2xsIGdldCBhIGJhY2t0cmFjZSB3aGVuCj4gPj4+Pj4+dGhpcyBpcyBnb2luZyB3cm9uZyBhZ2Fp bi4gTGlrZSB0aGlzOgo+ID4+Pj4+Pgo+ID4+Pj4+PiAgICAgICAgIGlmIChXQVJOX09OKGNzcl9s b2FkZWRfYWxyZWFkeSgpKSkKPiA+Pj4+Pj4gICAgICAgICAgICAgICAgIHJldHVybjsKPiA+Pj4+ Pj4KPiA+Pj4+Pj5BbHNvIHdoZW4gcmVkb2luZyB0aGUgY29tbWl0cyBwbGVhc2UgZXhwbGFpbiBp biBkZXRhaWwgd2hhdCBleGFjdGx5IGFyZQo+ID4+Pj4+PnRoZSByZXF1aXJlbWVudHMgbGlrZSB5 b3UndmUgZG9uZSBhYm92ZSwgYnV0IHBsZWFzZSB1c2UgdGhlIHN0YW5kYXJkIGxpbnV4Cj4gPj4+ Pj4+bmFtZXMsIGkuZS4gInJ1bnRpbWUgUE0iIGFuZCAiaGliZXJuYXRlLXRvLWRpc2siIGFuZCAi c3VzcGVuZC10by1tZW0iLgo+ID4+Pj4+T2sgaG9vcmF5IHRoZXJlJ3MgbW9yZSBzdXNwZW5kLXRv LXNvbWV0aGluZyB0aGluZ3MgSSd2ZSB0b3RhbGx5IG1pc3NlZDoKPiA+Pj4+Pi0gc3VzcGVuZC10 by1pZGxlIChkb25lIGJ5IGNhdCBmcmVlemUgPiAvc3lzL3Bvd2VyL3N0YXRlKSBhbmQKPiA+Pj4+ Pi0gc3VzcGVuZCAoZG9uZSBieSBjYXQgc3VzcGVuZCA+IC9zeXMvcG93ZXIvc3RhdGUpCj4gPj4+ Pj4KPiA+Pj4+PkFuZCBhcHBhcmVudGx5IHRoZXJlJ3MgcmVhbGx5IG5vIHdheSB0byBkcml2ZXJz IHRvIHRlbGwgdGhlbSBhcGFydC4KPiA+Pj4+PlJhZmFlbCwgaXMgdGhlcmUgcmVhbGx5IG5vIHdh eSBmb3IgZHJpdmVycyB0byB0YWtlIGRpZmZlcmVudCBwYXRocyBmb3IKPiA+Pj4+PnRoZXNlIDMg c3VzcGVuZCBjYXNlcz8gSSB0cmllZCBncmVwcGluZyBmb3IgUE1fU1VTUEVORF9PTi9TVEFORFkv TUVNCj4gPj4+Pj5hbmQgZGlkbid0IHNwb3QgYW55dGhpbmcuCj4gPj4+Pj4KPiA+Pj4+PkFsc28g d2UncmUgY29tcGxldGVseSBtaXNzaW5nIHRlc3QgY292ZXJhZ2UgZm9yIHRoYXQgaW4gaWd0LiBU aGF0IGlzCj4gPj4+Pj5zb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBmaXhlZCBhc2FwICh5ZXQg YW5vdGhlciBjYXNlIG9mCj4gPj4+Pj5jb21iaW5hdG9yaWFsIGV4cGxvc2lvbiBpbiBpZ3QgdGVz dHMsIHlheSkuIEFuZCBhdCBsZWFzdCBvbmUgb2YgdGhvc2UKPiA+Pj4+PnN1c3BlbmQtdG8taWRs ZSB0ZXN0Y2FzZSBiZXR0ZXIgYmUgaW4gdGhlIEJBVC4KPiA+Pj4+Pi1EYW5pZWwKPiA+Pj4+Pi0t Cj4gPj4+Pj5EYW5pZWwgVmV0dGVyCj4gPj4+Pj5Tb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29y cG9yYXRpb24KPiA+Pj4+Pis0MSAoMCkgNzkgMzY1IDU3IDQ4IC0gaHR0cDovL2Jsb2cuZmZ3bGwu Y2gKPiA+Pj4+Cj4gPj4+Pi0tCj4gPj4+PkRhbmllbCBWZXR0ZXIKPiA+Pj4+U29mdHdhcmUgRW5n aW5lZXIsIEludGVsIENvcnBvcmF0aW9uCj4gPj4+Pis0MSAoMCkgNzkgMzY1IDU3IDQ4IC0gaHR0 cDovL2Jsb2cuZmZ3bGwuY2gKPiA+Pj4KPiAKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVu Z2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=