From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Westerberg Subject: Re: [PATCH v4] pci: prevent putting nvidia GPUs into lower device states on certain intel bridges Date: Fri, 22 Nov 2019 13:52:14 +0200 Message-ID: <20191122115214.GH11621@lahna.fi.intel.com> References: <20191121112821.GU11621@lahna.fi.intel.com> <20191121114610.GW11621@lahna.fi.intel.com> <20191121125236.GX11621@lahna.fi.intel.com> <20191121194942.GY11621@lahna.fi.intel.com> <20191122103637.GA11621@lahna.fi.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: "Rafael J. Wysocki" Cc: Karol Herbst , Linux PM , Linux PCI , Mario Limonciello , "Rafael J . Wysocki" , LKML , dri-devel , Bjorn Helgaas , nouveau List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBOb3YgMjIsIDIwMTkgYXQgMTI6MzA6MjBQTSArMDEwMCwgUmFmYWVsIEouIFd5c29j a2kgd3JvdGU6Cj4gT24gRnJpLCBOb3YgMjIsIDIwMTkgYXQgMTE6MzYgQU0gTWlrYSBXZXN0ZXJi ZXJnCj4gPG1pa2Eud2VzdGVyYmVyZ0BpbnRlbC5jb20+IHdyb3RlOgo+ID4KPiA+IE9uIFRodSwg Tm92IDIxLCAyMDE5IGF0IDExOjM5OjIzUE0gKzAxMDAsIFJhZmFlbCBKLiBXeXNvY2tpIHdyb3Rl Ogo+ID4gPiBPbiBUaHUsIE5vdiAyMSwgMjAxOSBhdCA4OjQ5IFBNIE1pa2EgV2VzdGVyYmVyZwo+ ID4gPiA8bWlrYS53ZXN0ZXJiZXJnQGludGVsLmNvbT4gd3JvdGU6Cj4gPiA+ID4KPiA+ID4gPiBP biBUaHUsIE5vdiAyMSwgMjAxOSBhdCAwNDo0MzoyNFBNICswMTAwLCBSYWZhZWwgSi4gV3lzb2Nr aSB3cm90ZToKPiA+ID4gPiA+IE9uIFRodSwgTm92IDIxLCAyMDE5IGF0IDE6NTIgUE0gTWlrYSBX ZXN0ZXJiZXJnCj4gPiA+ID4gPiA8bWlrYS53ZXN0ZXJiZXJnQGludGVsLmNvbT4gd3JvdGU6Cj4g PiA+ID4gPiA+Cj4gPiA+ID4gPiA+IE9uIFRodSwgTm92IDIxLCAyMDE5IGF0IDAxOjQ2OjE0UE0g KzAyMDAsIE1pa2EgV2VzdGVyYmVyZyB3cm90ZToKPiA+ID4gPiA+ID4gPiBPbiBUaHUsIE5vdiAy MSwgMjAxOSBhdCAxMjozNDoyMlBNICswMTAwLCBSYWZhZWwgSi4gV3lzb2NraSB3cm90ZToKPiA+ ID4gPiA+ID4gPiA+IE9uIFRodSwgTm92IDIxLCAyMDE5IGF0IDEyOjI4IFBNIE1pa2EgV2VzdGVy YmVyZwo+ID4gPiA+ID4gPiA+ID4gPG1pa2Eud2VzdGVyYmVyZ0BpbnRlbC5jb20+IHdyb3RlOgo+ ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiBPbiBXZWQsIE5vdiAyMCwgMjAxOSBh dCAxMToyOTozM1BNICswMTAwLCBSYWZhZWwgSi4gV3lzb2NraSB3cm90ZToKPiA+ID4gPiA+ID4g PiA+ID4gPiA+IGxhc3Qgd2VlayBvciBzbyBJIGZvdW5kIHN5c3RlbXMgd2hlcmUgdGhlIEdQVSB3 YXMgdW5kZXIgdGhlICJQQ0kKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEV4cHJlc3MgUm9vdCBQb3J0 IiAobmFtZSBmcm9tIGxzcGNpKSBhbmQgb24gdGhvc2Ugc3lzdGVtcyBhbGwgb2YgdGhhdAo+ID4g PiA+ID4gPiA+ID4gPiA+ID4gc2VlbXMgdG8gd29yay4gU28gSSBhbSB3b25kZXJpbmcgaWYgaXQn cyBpbmRlZWQganVzdCB0aGUgMHgxOTAxIG9uZSwKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHdoaWNo IGFsc28gZXhwbGFpbnMgTWlrYXMgY2FzZSB0aGF0IFRodW5kZXJib2x0IHN0dWZmIHdvcmtzIGFz IGRldmljZXMKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IG5ldmVyIGdldCBwb3B1bGF0ZWQgdW5kZXIg dGhpcyBwYXJ0aWN1bGFyIGJyaWRnZSBjb250cm9sbGVyLCBidXQgdW5kZXIKPiA+ID4gPiA+ID4g PiA+ID4gPiA+IHRob3NlICJSb290IFBvcnQicwo+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ID4gPiA+ID4gSXQgYWx3YXlzIGlzIGEgUENJZSBwb3J0LCBidXQgaXRzIGxvY2F0aW9uIHdp dGhpbiB0aGUgU29DIG1heSBtYXR0ZXIuCj4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4g PiA+IEV4YWN0bHkuIEludGVsIGhhcmR3YXJlIGhhcyBQQ0llIHBvcnRzIG9uIENQVSBzaWRlICh0 aGVzZSBhcmUgY2FsbGVkCj4gPiA+ID4gPiA+ID4gPiA+IFBFRywgUENJIEV4cHJlc3MgR3JhcGhp Y3MsIHBvcnRzKSwgYW5kIHRoZSBQQ0ggc2lkZS4gSSB0aGluayB0aGUgSVAgaXMKPiA+ID4gPiA+ ID4gPiA+ID4gc3RpbGwgdGhlIHNhbWUuCj4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4g PiA+ID4gQWxzbyBzb21lIGN1c3RvbSBBTUwtYmFzZWQgcG93ZXIgbWFuYWdlbWVudCBpcyBpbnZv bHZlZCBhbmQgdGhhdCBtYXkKPiA+ID4gPiA+ID4gPiA+ID4gPiBiZSBtYWtpbmcgc3BlY2lmaWMg YXNzdW1wdGlvbnMgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFNvQyBhbmQgdGhlCj4gPiA+ ID4gPiA+ID4gPiA+ID4gR1BVIGF0IHRoZSB0aW1lIG9mIGl0cyBpbnZvY2F0aW9uIHdoaWNoIHVu Zm9ydHVuYXRlbHkgYXJlIG5vdCBrbm93biB0bwo+ID4gPiA+ID4gPiA+ID4gPiA+IHVzLgo+ID4g PiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gSG93ZXZlciwgaXQgbG9va3MgbGlr ZSB0aGUgQU1MIGludm9rZWQgdG8gcG93ZXIgZG93biB0aGUgR1BVIGZyb20KPiA+ID4gPiA+ID4g PiA+ID4gPiBhY3BpX3BjaV9zZXRfcG93ZXJfc3RhdGUoKSBnZXRzIGNvbmZ1c2VkIGlmIGl0IGlz IG5vdCBpbiBQQ0kgRDAgYXQKPiA+ID4gPiA+ID4gPiA+ID4gPiB0aGF0IHBvaW50LCBzbyBpdCBs b29rcyBsaWtlIHRoYXQgQU1MIHRyaWVzIHRvIGFjY2VzcyBkZXZpY2UgbWVtb3J5IG9uCj4gPiA+ ID4gPiA+ID4gPiA+ID4gdGhlIEdQVSAoYmV5b25kIHRoZSBQQ0kgY29uZmlnIHNwYWNlKSBvciBz aW1pbGFyIHdoaWNoIGlzIG5vdAo+ID4gPiA+ID4gPiA+ID4gPiA+IGFjY2Vzc2libGUgaW4gUENJ IHBvd2VyIHN0YXRlcyBiZWxvdyBEMC4KPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ ID4gT3IgdGhlIFBDSSBjb25maWcgc3BhY2Ugb2YgdGhlIEdQVSB3aGVuIHRoZSBwYXJlbnQgcm9v dCBwb3J0IGlzIGluIEQzaG90Cj4gPiA+ID4gPiA+ID4gPiA+IChhcyBpdCBpcyB0aGUgY2FzZSBo ZXJlKS4gQWxzbyB0aGVuIHRoZSBHUFUgY29uZmlnIHNwYWNlIGlzIG5vdAo+ID4gPiA+ID4gPiA+ ID4gPiBhY2Nlc3NpYmxlLgo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IFdoeSB3b3Vs ZCB0aGUgcGFyZW50IHBvcnQgYmUgaW4gRDNob3QgYXQgdGhhdCBwb2ludD8gIFdvdWxkbid0IHRo YXQgYmUKPiA+ID4gPiA+ID4gPiA+IGEgc3VzcGVuZCBvcmRlcmluZyB2aW9sYXRpb24/Cj4gPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBOby4gV2UgcHV0IHRoZSBHUFUgaW50byBEM2hvdCBmaXJz dCwKPiA+ID4gPiA+Cj4gPiA+ID4gPiBPSwo+ID4gPiA+ID4KPiA+ID4gPiA+IERvZXMgdGhpcyBp bnZvbHZlIGFueSBBTUwsIGxpa2UgYSBfUFMzIHVuZGVyIHRoZSBHUFUgb2JqZWN0Pwo+ID4gPiA+ Cj4gPiA+ID4gSSBkb24ndCBzZWUgX1BTMyAobm9yIF9QUzApIGZvciB0aGF0IG9iamVjdC4gSWYg SSByZWFkIGl0IHJpZ2h0IHRoZSBHUFUKPiA+ID4gPiBpdHNlbGYgaXMgbm90IGRlc2NyaWJlZCBp biBBQ1BJIHRhYmxlcyBhdCBhbGwuCj4gPiA+Cj4gPiA+IE9LCj4gPiA+Cj4gPiA+ID4gPiA+ID4g dGhlbiB0aGUgcm9vdCBwb3J0IGFuZCB0aGVuIHR1cm4KPiA+ID4gPiA+ID4gPiBvZmYgdGhlIHBv d2VyIHJlc291cmNlICh3aGljaCBpcyBhdHRhY2hlZCB0byB0aGUgcm9vdCBwb3J0KSByZXN1bHRp bmcKPiA+ID4gPiA+ID4gPiB0aGUgdG9wb2xvZ3kgZW50ZXJpbmcgRDNjb2xkLgo+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiBJIGRvbid0IHNlZSB0aGF0IGhhcHBlbmluZyBpbiB0aGUgQU1MIHRob3Vn aC4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBXaGljaCBBTUwgZG8geW91IG1lYW4sIHNwZWNpZmljYWxs eT8gIFRoZSBfT0ZGIG1ldGhvZCBmb3IgdGhlIHJvb3QKPiA+ID4gPiA+IHBvcnQncyBfUFIzIHBv d2VyIHJlc291cmNlIG9yIHNvbWV0aGluZyBlbHNlPwo+ID4gPiA+Cj4gPiA+ID4gVGhlIHJvb3Qg cG9ydCdzIF9PRkYgbWV0aG9kIGZvciB0aGUgcG93ZXIgcmVzb3VyY2UgcmV0dXJuZWQgYnkgaXRz IF9QUjMuCj4gPiA+Cj4gPiA+IE9LLCBzbyB3aXRob3V0IHRoZSAkc3ViamVjdCBwYXRjaCB3ZSAo MSkgcHJvZ3JhbSB0aGUgZG93bnN0cmVhbQo+ID4gPiBjb21wb25lbnQgKEdQVSkgaW50byBEM2hv dCwgdGhlbiB3ZSAoMikgcHJvZ3JhbSB0aGUgcG9ydCBob2xkaW5nIGl0Cj4gPiA+IGludG8gRDNo b3QgYW5kIHRoZW4gd2UgKDMpIGxldCB0aGUgQU1MIChfT0ZGIGZvciB0aGUgcG93ZXIgcmVzb3Vy Y2UKPiA+ID4gbGlzdGVkIGJ5IF9QUjMgdW5kZXIgdGhlIHBvcnQgb2JqZWN0KSBydW4uCj4gPiA+ Cj4gPiA+IFNvbWV0aGluZyBzdHJhbmdlIGhhcHBlbnMgYXQgdGhpcyBwb2ludCAoYW5kIEkgZ3Vl c3MgdGhhdCBfT0ZGIGRvZXNuJ3QKPiA+ID4gZXZlbiByZWFjaCB0aGUgcG9pbnQgd2hlcmUgaXQg cmVtb3ZlcyBwb3dlciBmcm9tIHRoZSBwb3J0IHdoaWNoIGlzIHdoeQo+ID4gPiB3ZSBzZWUgYSBs b2NrLXVwKS4KPiA+Cj4gPiBJdCBkb2VzIG5vdCBuZWNlc3NhcnkgbGVhZCB0byBsb2NrLXVwLiBI ZXJlIGlzIGRtZXNnIGZyb20gS2Fyb2wncwo+ID4gc3lzdGVtOgo+ID4KPiA+ICAgaHR0cHM6Ly9n aXN0LmdpdGh1YnVzZXJjb250ZW50LmNvbS9rYXJvbGhlcmJzdC80MGViMDkxYzdiN2IzM2VmOTkz NTI1ZGU2NjBmMWEzYi9yYXcvMjM4MGUzMWY1NjZlOTNlNWJhN2M4N2VmNTQ1NDIwOTY1ZDRjNDky Yy9naXN0ZmlsZTEudHh0Cj4gPgo+ID4gd2hhdCBzZWVtcyB0byBoYXBwZW4gaXMgdGhhdCB0aGUg R1BVIG5ldmVyICJjb21lcyBiYWNrIiBmcm9tIEQzY29sZCBzbwo+ID4gdGhlIGRyaXZlciBzdGFy dHMgYnJlYWtpbmcgYXBhcnQgYXMgdGhlIGhhcmR3YXJlIGlzIGdvbmUgbm93Lgo+IAo+IEkgbWVh bnQgYSBsb2NrLXVwIGluIGhhcmR3YXJlIHRvIGJlIHByZWNpc2UsIHRoYXQgY2F1c2VzIGl0IHRv IHN0b3AgdG8KPiByZXNwb25kICh3aGljaCBjYXVzZXMgaXQgdG8gYXBwZWFyIHRvIGJlIHBlcm1h bmVudGx5IGluIEQzY29sZCkuCj4gCj4gSSB3b25kZXIgaWYgdGhlIHBvcnQgYWNjZXB0cyBQQ0kg Y29uZmlnIHNwYWNlIHdyaXRlcyB0aGVuLgo+IAo+ID4gPiBXZSBrbm93IHRoYXQgc2tpcHBpbmcg KDEpIG1ha2VzIHRoaW5ncyB3b3JrIGFuZCB3ZSBraW5kIG9mIHN1c3BlY3QKPiA+ID4gdGhhdCBz a2lwcGluZyAoMykgd291bGQgbWFrZSB0aGluZ3Mgd29yayBlaXRoZXIsIGJ1dCB3aGF0IGFib3V0 IGRvaW5nCj4gPiA+ICgxKSBhbmQgKDMpIHdpdGhvdXQgKDIpPwo+ID4KPiA+IFlvdSBtZWFuIGlu IHRoaXMgcGFydGljdWxhciBjYXNlIG9yIGluIGdlbmVyYWw/Cj4gCj4gSW4gdGhpcyBjYXNlIGlu IHBhcnRpY3VsYXIgdG8gc3RhcnQgd2l0aC4gIEp1c3QgZG8gYW4gZXhwZXJpbWVudCB0bwo+IHNl ZSB3aGF0IGhhcHBlbnMgaWYgd2Ugc2tpcCBwY2lfcmF3X3NldF9wb3dlcl9zdGF0ZSgpIGZvciB0 aGUgcG9ydAo+IGluc3RlYWQgb2Ygc2tpcHBpbmcgaXQgZm9yIHRoZSBkb3duc3RyZWFtIGRldmlj ZS4KPiAKPiA+IEJlY2F1c2UgaWYgdGhlIHBvcnQgaGFzIF9QU3ggbWV0aG9kcyB3ZSBuZWVkIHRv IHB1dCBpdCBpbnRvIEQzaG90IEFGQUlLLgo+IAo+IFllcywgd2UgbmVlZCB0byBydW4gX1BTMyB0 aGVuLCBidXQgbWF5YmUgd2UgZG9uJ3QgbmVlZCB0byB3cml0ZSB0byBpdHMKPiBQTUNTUiBkaXJl Y3RseS4KPiAKPiA+ID4gPiA+ID4gQmFzaWNhbGx5IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgd2hl biBXaW5kb3dzIDcgb3IgTGludXggKHRoZSBfUkVWPT01Cj4gPiA+ID4gPiA+IGNoZWNrKSB0aGVu IHdlIGRpcmVjdGx5IGRvIGxpbmsgZGlzYWJsZSB3aGVyZWFzIGluIFdpbmRvd3MgOCsgd2UgaW52 b2tlCj4gPiA+ID4gPiA+IExLRFMoKSBtZXRob2QgdGhhdCBwdXRzIHRoZSBsaW5rIGludG8gTDIv TDMuIE5vbmUgb2YgdGhlIGZpZWxkcyB0aGV5Cj4gPiA+ID4gPiA+IGFjY2VzcyBzZWVtIHRvIHRv dWNoIHRoZSBHUFUgaXRzZWxmLgo+ID4gPiA+ID4KPiA+ID4gPiA+IFNvIHRoYXQgbWF5IGJlIHdo ZXJlIHRoZSBwcm9ibGVtIGlzLgo+ID4gPiA+ID4KPiA+ID4gPiA+IFB1dHRpbmcgdGhlIGRvd25z dHJlYW0gY29tcG9uZW50IGludG8gUENJIERbMS0zXSBpcyBleHBlY3RlZCB0byBwdXQKPiA+ID4g PiA+IHRoZSBsaW5rIGludG8gTDEsIHNvIEknbSBub3Qgc3VyZSBob3cgdGhhdCBwbGF5cyB3aXRo IHRoZSBsYXRlcgo+ID4gPiA+ID4gYXR0ZW1wdCB0byBwdXQgaXQgaW50byBMMi9MMyBSZWFkeS4K PiA+ID4gPgo+ID4gPiA+IFRoYXQgc2hvdWxkIGJlIGZpbmUuIFdoYXQgSSd2ZSBzZWVuIHRoZSBs aW5rIGdvZXMgaW50byBMMSB3aGVuCj4gPiA+ID4gZG93bnN0cmVhbSBjb21wb25lbnQgaXMgcHV0 IHRvIEQtc3RhdGUgKG5vdCBEMCkgYW5kIHRoZW4gaXQgaXMgcHV0IGJhY2sKPiA+ID4gPiB0byBM MCB3aGVuIEwyLzMgcmVhZHkgaXMgcHJvcGFnYXRlZC4gRXZlbnR1YWxseSBpdCBnb2VzIGludG8g TDIgb3IgTDMuCj4gPiA+Cj4gPiA+IFdlbGwsIHRoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Is IGJ1dCB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3IgaXNuJ3QgYXMKPiA+ID4gZXhwZWN0ZWQuIDotKQo+ ID4KPiA+IFJpZ2h0IDopCj4gPgo+ID4gPiA+ID4gQWxzbywgTDIvTDMgUmVhZHkgaXMgZXhwZWN0 ZWQgdG8gYmUgdHJhbnNpZW50LCBzbyBmaW5hbGx5IHBvd2VyIHNob3VsZAo+ID4gPiA+ID4gYmUg cmVtb3ZlZCBzb21laG93Lgo+ID4gPiA+Cj4gPiA+ID4gVGhlcmUgaXMgR1BJTyBmb3IgYm90aCBw b3dlciBhbmQgUEVSU1QsIEkgdGhpbmsgdGhlIGxpbmUgaGVyZToKPiA+ID4gPgo+ID4gPiA+ICAg XF9TQi5TR09WICgweDAxMDEwMDA0LCBaZXJvKQo+ID4gPiA+Cj4gPiA+ID4gaXMgdGhlIG9uZSB0 aGF0IHJlbW92ZXMgcG93ZXIuCj4gPiA+Cj4gPiA+IE9LCj4gPiA+Cj4gPiA+ID4gPiA+IExLRFMo KSBmb3IgdGhlIGZpcnN0IFBFRyBwb3J0IGxvb2tzIGxpa2UgdGhpczoKPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gICAgUDBMMiA9IE9uZQo+ID4gPiA+ID4gPiAgICBTbGVlcCAoMHgxMCkKPiA+ID4g PiA+ID4gICAgTG9jYWwwID0gWmVybwo+ID4gPiA+ID4gPiAgICBXaGlsZSAoUDBMMikKPiA+ID4g PiA+ID4gICAgewo+ID4gPiA+ID4gPiAgICAgICAgIElmICgoTG9jYWwwID4gMHgwNCkpCj4gPiA+ ID4gPiA+ICAgICAgICAgewo+ID4gPiA+ID4gPiAgICAgICAgICAgICBCcmVhawo+ID4gPiA+ID4g PiAgICAgICAgIH0KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gICAgICAgICBTbGVlcCAoMHgxMCkK PiA+ID4gPiA+ID4gICAgICAgICBMb2NhbDArKwo+ID4gPiA+ID4gPiAgICB9Cj4gPiA+ID4gPiA+ Cj4gPiA+ID4gPiA+IE9uZSB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdGhhdCB0aGUgbG9v cCBjYW4gZW5kIGV2ZW4gaWYgUDBMMiBpcwo+ID4gPiA+ID4gPiBub3QgY2xlYXJlZCBhcyBpdCBk b2VzIG9ubHkgNSBpdGVyYXRpb25zIHdpdGggMTYgbXMgc2xlZXAgYmV0d2Vlbi4gTWF5YmUKPiA+ ID4gPiA+ID4gU2xlZXAoKSBpcyBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseSBpbiBXaW5kb3dzPyBJ IG1lYW4gTGludXggbWF5IGJlCj4gPiA+ID4gPiA+ICJmYXN0ZXIiIGhlcmUgYW5kIHJldHVybiBw cmVtYXR1cmVseSBhbmQgaWYgd2UgbGVhdmUgdGhlIHBvcnQgaW50byBEMAo+ID4gPiA+ID4gPiB0 aGlzIGRvZXMgbm90IGhhcHBlbiwgb3Igc29tZXRoaW5nLiBJJ20ganVzdCB0aHJvd2luZyBvdXQg aWRlYXMgOikKPiA+ID4gPiA+Cj4gPiA+ID4gPiBCdXQgdGhpcyBhY3R1YWxseSB3b3JrcyBmb3Ig dGhlIGRvd25zdHJlYW0gY29tcG9uZW50IGluIEQwLCBkb2Vzbid0IGl0Pwo+ID4gPiA+Cj4gPiA+ ID4gSXQgZG9lcyBhbmQgdGhhdCBsZWF2ZXMgdGhlIGxpbmsgaW4gTDAgc28gaXQgY291bGQgYmUg dGhhdCB0aGVuIHRoZQo+ID4gPiA+IGFib3ZlIEFNTCB3b3JrcyBiZXR0ZXIgb3Igc29tZXRoaW5n Lgo+ID4gPgo+ID4gPiBUaGF0IHdvdWxkIGJlIG15IGd1ZXNzLgo+ID4gPgo+ID4gPiA+IFRoYXQg cmVtaW5kcyBtZSwgQVNQTSBtYXkgaGF2ZSBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGlzIGFzIHdl bGwuCj4gPiA+Cj4gPiA+IE5vdCByZWFsbHkgaWYgRC1zdGF0ZXMgYXJlIGludm9sdmVkLgo+ID4g Pgo+ID4gPiA+ID4gQWxzbywgaWYgdGhlIGRvd25zdHJlYW0gY29tcG9uZW50IGlzIGluIEQwLCB0 aGUgcG9ydCBhY3R1YWxseSBzaG91bGQKPiA+ID4gPiA+IHN0YXkgaW4gRDAgdG9vLCBzbyB3aGF0 IHdvdWxkIGhhcHBlbiB3aXRoIHRoZSAkc3ViamVjdCBwYXRjaCBhcHBsaWVkPwo+ID4gPiA+Cj4g PiA+ID4gUGFyZW50IHBvcnQgY2Fubm90IGJlIGxvd2VyIEQtc3RhdGUgdGhhbiB0aGUgY2hpbGQg c28gSSBhZ3JlZSBpdCBzaG91bGQKPiA+ID4gPiBzdGF5IGluIEQwIGFzIHdlbGwuIEhvd2V2ZXIs IGl0IHNlZW1zIHRoYXQgd2hhdCBoYXBwZW5zIGlzIHRoYXQgdGhlCj4gPiA+ID4gaXNzdWUgZ29l cyBhd2F5IDopCj4gPiA+Cj4gPiA+IFdlbGwsIGF0IGxlYXN0IHRoaXMgaXMga2luZCBvZiBvdXQg b2YgdGhlIHNwZWMuCj4gPiA+Cj4gPiA+IE5vdGUgdGhhdCBwY2lfcG1fc3VzcGVuZF9ub2lycSgp IHdvbid0IGxldCB0aGUgcG9ydCBnbyBpbnRvIEQzIGlmIHRoZQo+ID4gPiBkb3duc3RyZWFtIGRl dmljZSBpcyBpbiBEMCwgc28gdGhlICRzdWJqZWN0IHBhdGNoIHdpbGwgbm90IHdvcmsgYXMKPiA+ ID4gZXhwZWN0ZWQgaW4gdGhlIHN1c3BlbmQtdG8taWRsZSBjYXNlLgo+ID4gPgo+ID4gPiBBbHNv IHdlIHJlYWxseSBzaG91bGQgbWFrZSB1cCBvdXIgbWluZHMgb24gd2hldGhlciBvciBub3QgdG8g Zm9yY2UKPiA+ID4gUENJZSBwb3J0cyB0byBzdGF5IGluIEQwIHdoZW4gZG93bnN0cmVhbSBkZXZp Y2VzIGFyZSBpbiBEMCBhbmQgYmUKPiA+ID4gY29uc2VxdWVudCBhYm91dCB0aGF0LiAgUmlnaHQg bm93IHdlIGRvIG9uZSB0aGluZyBkdXJpbmcgc3lzdGVtLXdpZGUKPiA+ID4gc3VzcGVuZCBhbmQg dGhlIG90aGVyIG9uZSBpbiBQTS1ydW50aW1lLCB3aGljaCBpcyBjb25mdXNpbmcuCj4gPiA+Cj4g PiA+IFRoZSBjdXJyZW50IGRlc2lnbiBpcyBtb3N0bHkgYmFzZWQgb24gdGhlIFBDSSBQTSBTcGVj IDEuMiwgc28gaXQgd291bGQKPiA+ID4gYmUgY29uc2VxdWVudCB0byBmb2xsb3cgc3lzdGVtLXdp ZGUgc3VzcGVuZCBpbiBQTS1ydW50aW1lIGFuZCBhdm9pZAo+ID4gPiBwdXR0aW5nIFBDSWUgcG9y dHMgaG9sZGluZyBkZXZpY2VzIGluIEQwIGludG8gYW55IGxvdy1wb3dlciBzdGF0ZXMuCj4gPiA+ IGJ1dCB0aGF0IHdvdWxkIG1ha2UgdGhlIGFwcHJvYWNoIGluIHRoZSAkc3ViamVjdCBwYXRjaCBp bmVmZmVjdGl2ZS4KPiA+ID4KPiA+ID4gTW9yZW92ZXIsIHRoZSBmYWN0IHRoYXQgdGhlcmUgYXJl IHNlcGFyYXRlIGJyYW5jaGVzIGZvciAiV2luZG93cyA3Igo+ID4gPiBhbmQgIldpbmRvd3MgOCsi IGtpbmQgb2Ygc3VnZ2VzdCBhIGNoYW5nZSBpbiB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IKPiA+ID4g YmV0d2VlbiBXaW5kb3dzIDcgYW5kIFdpbmRvd3MgOCwgZnJvbSB0aGUgQU1MIHBlcnNwZWN0aXZl LiAgSSB3b3VsZAo+ID4gPiBndWVzcyB0aGF0IFdpbmRvd3MgNyBmb2xsb3dlZCBQQ0kgUE0gMS4y IGFuZCBXaW5kb3dzIDggKGFuZCBsYXRlcikKPiA+ID4gZG9lcyBzb21ldGhpbmcgZWxzZS4KPiA+ Cj4gPiBNeSB1bmRlcnN0YW5kaW5nICh3aGljaCBtYXkgbm90IGJlIGNvcnJlY3QpIGlzIHRoYXQg dXAgdG8gV2luZG93cyA3IGl0Cj4gPiBuZXZlciBwdXQgdGhlIGRldmljZXMgaW50byBEM2NvbGQg cnVudGltZS4gT25seSB3aGVuIHRoZSBzeXN0ZW0gZW50ZXJlZAo+ID4gU3ggc3RhdGVzIGl0IGV2 YWx1YXRlZCB0aGUgX09GRiBtZXRob2RzLgo+IAo+IEkgc2VlLgo+IAo+ID4gU3RhcnRpbmcgZnJv bSBXaW5kb3dzIDggaXQgc3RhcnRlZCBkb2luZyB0aGlzIHJ1bnRpbWUgc28gZGV2aWNlcyBjYW4K PiA+IGVudGVyIEQzY29sZCBldmVuIHdoZW4gc3lzdGVtIGlzIGluIFMwLgo+IAo+IEhtbS4gIFNv IGJ5IHNldHRpbmcgX1JFViB0byA1IHdlIGVmZmVjdGl2ZWx5IGNoYW5nZSB0aGUgX09GRiBpbnRv IGEgTk9QPwoKTm8sIHRoZXJlIGFyZSB0d28gcGF0aHMgaW4gdGhlIF9PRkYoKSBhbmQgdGhlbSBz b21lIGNvbW1vbiBjb2RlIHN1Y2ggYXMKcmVtb3ZpbmcgcG93ZXIgZXRjLgoKV2hhdCB0aGUgX1JF ViA1IGRpZCBpcyB0aGF0IGl0IHdlbnQgaW50byBwYXRoIHdoZXJlIHRoZSBBTUwgc2VlbWVkIHRv CmRpcmVjdGx5IGRpc2FibGUgdGhlIGxpbmsuCgpUaGUgb3RoZXIgcGF0aCB0aGF0IGlzIHRha2Vu IHdpdGggV2luZG93cyA4KyBkb2VzIG5vdCBkaXNhYmxlIHRoZSBsaW5rCmJ1dCBpbnN0ZWFkIGl0 IHB1dHMgaXQgdG8gbG93IHBvd2VyIEwyIG9yIEwzIHN0YXRlIChJIHN1cHBvc2UgTDMgc2luY2UK aXQgcmVtb3ZlcyB0aGUgcG93ZXIgYW5kIHRoZSBHUFUgcHJvYmFibHkgZG9lcyBub3Qgc3VwcG9y dCB3YWtlKS4KClRoZSBBU0wgY29kZSBpcyBiZWxvdy4gUEdPRigpIGdldHMgY2FsbGVkIGZyb20g dGhlIHBvd2VyIHJlc291cmNlCl9PRkYoKToKCiAgICAgICAgTWV0aG9kIChQR09GLCAxLCBTZXJp YWxpemVkKQogICAgICAgIHsKICAgICAgICAgICAgUElPRiA9IEFyZzAKICAgICAgICAgICAgSWYg KChQSU9GID09IFplcm8pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBJZiAoKFNHR1Ag PT0gWmVybykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgUmV0dXJuICha ZXJvKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIEVsc2VJZiAo KFBJT0YgPT0gT25lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSWYgKChQMUdQID09 IFplcm8pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFJldHVybiAoWmVy bykKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBFbHNlSWYgKChQ SU9GID09IDB4MDIpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBJZiAoKFAyR1AgPT0g WmVybykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgUmV0dXJuIChaZXJv KQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBQRUJBID0gXFhC QVMgLyogRXh0ZXJuYWwgcmVmZXJlbmNlICovCiAgICAgICAgICAgIFBERVYgPSBHREVWIChQSU9G KQogICAgICAgICAgICBQRlVOID0gR0ZVTiAoUElPRikKICAgICAgICAgICAgTmFtZSAoU0NMSywg UGFja2FnZSAoMHgwMykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgT25lLCAKICAgICAg ICAgICAgICAgIDB4ODAsIAogICAgICAgICAgICAgICAgWmVybwogICAgICAgICAgICB9KQogICAg ICAgICAgICBJZiAoKENDSEsgKFBJT0YsIFplcm8pID09IFplcm8pKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICBSZXR1cm4gKFplcm8pCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFxf U0IuUENJMC5QRUcwLlBFR1AuTFRSRSA9IFxfU0IuUENJMC5QRUcwLkxSRU4KICAgICAgICAgICAg SWYgKChBcmcwID09IFplcm8pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBFTEMwID0g TENUMCAvKiBcX1NCXy5QQ0kwLkxDVDAgKi8KICAgICAgICAgICAgICAgIEgwVkkgPSBTMFZJIC8q IFxfU0JfLlBDSTAuUzBWSSAqLwogICAgICAgICAgICAgICAgSDBESSA9IFMwREkgLyogXF9TQl8u UENJMC5TMERJICovCiAgICAgICAgICAgICAgICBFQ1AwID0gTENQMCAvKiBcX1NCXy5QQ0kwLkxD UDAgKi8KICAgICAgICAgICAgfQogICAgICAgICAgICBFbHNlSWYgKChBcmcwID09IE9uZSkpCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEVMQzEgPSBMQ1QxIC8qIFxfU0JfLlBDSTAuTENU MSAqLwogICAgICAgICAgICAgICAgSDFWSSA9IFMxVkkgLyogXF9TQl8uUENJMC5TMVZJICovCiAg ICAgICAgICAgICAgICBIMURJID0gUzFESSAvKiBcX1NCXy5QQ0kwLlMxREkgKi8KICAgICAgICAg ICAgICAgIEVDUDEgPSBMQ1AxIC8qIFxfU0JfLlBDSTAuTENQMSAqLwogICAgICAgICAgICB9CiAg ICAgICAgICAgIEVsc2VJZiAoKEFyZzAgPT0gMHgwMikpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgIEVMQzIgPSBMQ1QyIC8qIFxfU0JfLlBDSTAuTENUMiAqLwogICAgICAgICAgICAgICAg SDJWSSA9IFMyVkkgLyogXF9TQl8uUENJMC5TMlZJICovCiAgICAgICAgICAgICAgICBIMkRJID0g UzJESSAvKiBcX1NCXy5QQ0kwLlMyREkgKi8KICAgICAgICAgICAgICAgIEVDUDIgPSBMQ1AyIC8q IFxfU0JfLlBDSTAuTENQMiAqLwogICAgICAgICAgICB9CgogICAgICAgICAgICBJZiAoKChPU1lT IDw9IDB4MDdEOSkgfHwgKChPU1lTID09IDB4MDdERikgJiYgKF9SRVYgPT0gCiAgICAgICAgICAg ICAgICAweDA1KSkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBJZiAoKFBJT0YgPT0g WmVybykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgUDBMRCA9IE9uZQog ICAgICAgICAgICAgICAgICAgIFRDTlQgPSBaZXJvCiAgICAgICAgICAgICAgICAgICAgV2hpbGUg KChUQ05UIDwgTERMWSkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgICBJZiAoKFAwTFQgPT0gMHgwOCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEJyZWFrCiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg ICAgICAgICAgICAgICAgICAgICAgIFNsZWVwICgweDEwKQogICAgICAgICAgICAgICAgICAgICAg ICBUQ05UICs9IDB4MTAKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg IFAwUk0gPSBPbmUKICAgICAgICAgICAgICAgICAgICBQMEFQID0gMHgwMwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgRWxzZUlmICgoUElPRiA9PSBPbmUpKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgIFAxTEQgPSBPbmUKICAgICAgICAgICAgICAgICAgICBU Q05UID0gWmVybwogICAgICAgICAgICAgICAgICAgIFdoaWxlICgoVENOVCA8IExETFkpKQogICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgSWYgKChQMUxUID09IDB4 MDgpKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBCcmVhawogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg ICBTbGVlcCAoMHgxMCkKICAgICAgICAgICAgICAgICAgICAgICAgVENOVCArPSAweDEwCiAgICAg ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBQMVJNID0gT25lCiAgICAgICAg ICAgICAgICAgICAgUDFBUCA9IDB4MDMKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IEVsc2VJZiAoKFBJT0YgPT0gMHgwMikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgUDJMRCA9IE9uZQogICAgICAgICAgICAgICAgICAgIFRDTlQgPSBaZXJvCiAgICAgICAg ICAgICAgICAgICAgV2hpbGUgKChUQ05UIDwgTERMWSkpCiAgICAgICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgICAgICBJZiAoKFAyTFQgPT0gMHgwOCkpCiAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyZWFrCiAgICAgICAgICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIFNsZWVwICgweDEwKQogICAg ICAgICAgICAgICAgICAgICAgICBUQ05UICs9IDB4MTAKICAgICAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgICAgIFAyUk0gPSBPbmUKICAgICAgICAgICAgICAgICAgICBQMkFQID0g MHgwMwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIElmICgoUEJHRSAhPSBaZXJv KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBJZiAoU0JETCAoUElPRikp CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBNQkRMID0gR01Y QiAoUElPRikKICAgICAgICAgICAgICAgICAgICAgICAgUERVQiAoUElPRiwgTUJETCkKICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAg ICAgRWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBMS0RTIChQSU9GKQogICAgICAg ICAgICB9CgogICAgICAgICAgICBJZiAoKERlcmVmT2YgKFNDTEsgW1plcm9dKSAhPSBaZXJvKSkK ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgUENSTyAoMHhEQywgMHgxMDBDLCBEZXJlZk9m IChTQ0xLIFtPbmVdKSkKICAgICAgICAgICAgICAgIFNsZWVwICgweDEwKQogICAgICAgICAgICB9 CgogICAgICAgICAgICBHUFBSIChQSU9GLCBaZXJvKQogICAgICAgICAgICBJZiAoKE9TWVMgIT0g MHgwN0Q5KSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRElXSyAoUElPRikKICAgICAg ICAgICAgfQoKICAgICAgICAgICAgXF9TQi5TR09WICgweDAxMDEwMDA0LCBaZXJvKQogICAgICAg ICAgICBTbGVlcCAoMHgxNCkKICAgICAgICAgICAgUmV0dXJuIChaZXJvKQogICAgICAgIH0KCj4g PiA+IE5vdywgdGhlIHN0cnVjdHVyZSBvZiB0aGUgIldpbmRvd3MgOCsiIGJyYW5jaAo+ID4gPiBk ZXNjcmliZWQgYnkgeW91IHN1Z2dlc3RzIHRoYXQsIGF0IGxlYXN0IGluIHRoZSBjYXNlcyB3aGVu IGl0IGlzIGdvaW5nCj4gPiA+IHRvIHJlbW92ZSBwb3dlciBmcm9tIHRoZSBwb3J0IGV2ZW50dWFs bHksIGl0IGdvZXMgc3RyYWlnaHQgZm9yIHRoZQo+ID4gPiBsaW5rIHByZXBhcmF0aW9uICh0aGUg TDIvTDMgUmVhZHkgdHJhbnNpdGlvbikgYW5kIHBvd2VyIHJlbW92YWwKPiA+ID4gd2l0aG91dCBi b3RoZXJpbmcgdG8gcHJvZ3JhbSB0aGUgZG93bnN0cmVhbSBkZXZpY2UgYW5kIHBvcnQgaW50byBE M2hvdAo+ID4gPiAoYmVjYXVzZSB0aGF0J3Mga2luZCBvZiByZWR1bmRhbnQpLgo+ID4gPgo+ID4g PiBUaGF0IGh5cG90aGV0aWNhbCAiV2luZG93cyA4KyIgYXBwcm9hY2ggbWF5IHJlYWxseSB3b3Jr IHVuaXZlcnNhbGx5LAo+ID4gPiBiZWNhdXNlIGl0IGRvZXNuJ3Qgc2VlbSB0byBicmVhayBhbnkg cnVsZXMgKGdvaW5nIHN0cmFpZ2h0IGZyb20gRDAgdG8KPiA+ID4gRDNjb2xkIGlzIG5vdCBkaXNh bGxvd2VkIGFuZCBkb2luZyB0aGF0IGZvciBib3RoIGEgcG9ydCBhbmQgYQo+ID4gPiBkb3duc3Ry ZWFtIGRldmljZSBhdCB0aGUgc2FtZSB0aW1lIGlzIGtpbmQgb2YgT0sgZWl0aGVyLCBhcyBsb25n IGFzCj4gPiA+IHRoZSBsaW5rIGlzIHJlYWR5IGZvciB0aGF0KS4KPiA+Cj4gPiBJIGd1ZXNzIGl0 IGRlcGVuZHMgb24gaG93IHlvdSBpbnRlcnByZXQgdGhlIHNwZWNzIDstKSBGcm9tIFBDSWUgNS4w IHNlYwo+ID4gNS44IHdlIGNhbiBzZWUgdGhlIHN1cHBvcnRlZCBQTSBzdGF0ZSB0cmFuc2l0aW9u cyBhbmQgaXQgc2hvd3MgdGhhdCB5b3UKPiA+IGdldCB0byBEM2NvbGQgdGhyb3VnaCBEM2hvdC4g T2YgY291cnNlIHRoZSBkZXZpY2UgZ29lcyBpbnRvIEQzY29sZCBpZgo+ID4geW91IHNpbXBseSBy ZW1vdmUgaXRzIHBvd2VyIHNvIEkgYWdyZWUgd2l0aCB5b3UgYXMgd2VsbC4gSG93ZXZlciwgaWYK PiA+IHRoZXJlIGlzIF9QUzMgbWV0aG9kIHdlIGNhbid0IHNraXAgdGhlIEQzaG90IHBoYXNlLgo+ IAo+IFRoYXQncyBteSB1bmRlcnN0YW5kaW5nIHRvbywgYnV0IEknbSB3b25kZXJpbmcgYWJvdXQg ZGlyZWN0IFBNQ1NSCj4gd3JpdGVzLiAgSXQgaXMgdW5jbGVhciB0byBtZSBpZiB0aGV5IGFyZSBu ZWNlc3NhcnksIG9yIG1vcmUgcHJlY2lzZWx5LAo+IHdoZXRoZXIgb3Igbm90IFdpbmRvd3MgMTAs IHNheSwgY2FycmllcyB0aGVtIG91dCBpZiBBQ1BJIFBNIGlzIGdvaW5nCj4gdG8gYmUgYXBwbGll ZC4KCkFjY29yZGluZyB0byB0aGlzOgoKaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMv d2luZG93cy1oYXJkd2FyZS9kcml2ZXJzL3BjaS9wY2ktcG93ZXItbWFuYWdlbWVudC1hbmQtZGV2 aWNlLWRyaXZlcnMjc2NlbmFyaW8tMS10dXJuaW5nLW9mZi1hLWRldmljZQoKaXQgZG9lcyB3cml0 ZSBQTUNTUi4KCj4gTWF5YmUgSSdtIGdvaW5nIHRvbyBmYXIgd2l0aCBteSBjb25jbHVzaW9ucywg YnV0IHBsZWFzZSBsZXQgbWUga25vdwo+IHdoYXQgeW91IHRoaW5rIGFib3V0IHRoZSBhcHByb2Fj aCBwcm9wb3NlZCBhdCB0aGUgZW5kIG9mCj4gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgt cG0vQ0FKWjV2MGlRdHRHQjRtNVRiekN0anAyQzFqNXFFa1VocWhwV2IrK0xoU2szbWJXPUx3QG1h aWwuZ21haWwuY29tL1QvI3QKPiA/CgpZZXMsIEkgdGhpbmsgdGhhdCBpcyBiZXR0ZXIgYXBwcm9h Y2guCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==