From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: xen/arm: drop hip04 support Date: Wed, 3 Feb 2016 11:46:13 +0000 Message-ID: <1454499973.25207.80.camel@citrix.com> References: <1454418784-28245-1-git-send-email-zoltan.kiss@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1454418784-28245-1-git-send-email-zoltan.kiss@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Zoltan Kiss , xen-devel@lists.xen.org Cc: Zoltan Kiss List-Id: xen-devel@lists.xenproject.org T24gVHVlLCAyMDE2LTAyLTAyIGF0IDEzOjEzICswMDAwLCBab2x0YW4gS2lzcyB3cm90ZToKPiBU aGlzIHBsYXRmb3JtIGlzIG5vIGxvbmdlciBhY3RpdmVseSB1c2VkLCBidXQgaXQgbWFrZXMgR0lD djIgZGV2ZWxvcG1lbnQKPiBoYXJkZXIuCj4gCj4gU2lnbmVkLW9mZi1ieTogWm9sdGFuIEtpc3Mg PHpvbHRhbi5raXNzQGxpbmFyby5vcmc+CgpUaGFua3MsIEkgYXBwcmVjaWF0ZSB0aGUgcHJvYWN0 aXZlIHJlbW92YWwgb2Ygbm8tbG9uZ2VyIHN1cHBvcnRlZApwbGF0Zm9ybXMuCgpJIHdhcyBnb2lu ZyB0byBhc2sgeW91IHRvIGNvbmZpcm0gdGhhdCB5b3Ugd2VyZSBzdGlsbCBwYXJ0IG9mIEh1YXdl aSB3aGlsZQpvbiBzZWNvbmRtZW50IHRvIExpbmFybywgYnV0IEkgc2VlIHlvdSBoYXZlIENDZCB0 aGF0IG90aGVyIGhhdCBvZiB5b3VycyBhcwp3ZWxsLCB3aGljaCBpcyBnb29kIGVub3VnaCBmb3Ig bWUuIEhlbmNlOgoKQWNrZWQtYnk6IElhbiBDYW1wYmVsbCA8aWFuLmNhbXBiZWxsQGNpdHJpeC5j b20+CgphbmQgYXBwbGllZC4KCkkgZG9uJ3Qgc2VlIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIHdp a2kgLyBkb2NzIHdoaWNoIHdvdWxkIG5lZWQKdXBkYXRpbmcvZGVsZXRpbmcsIGlmIHlvdSBrbm93 IG9mIGFueXRoaW5nIHBsZWFzZSBjb3VsZCB5b3UgZWl0aGVyIHVwZGF0ZQpvciBsZXQgdXMga25v dy4KClRoYW5rcywKSWFuLgoKPiAtLS0KPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlO VEFJTkVSUwo+IGluZGV4IDdjMWJmODIuLjEyZjE0N2MgMTAwNjQ0Cj4gLS0tIGEvTUFJTlRBSU5F UlMKPiArKysgYi9NQUlOVEFJTkVSUwo+IEBAIC0xNzcsMTEgKzE3Nyw2IEBAIFM6CVN1cHBvcnRl ZAo+IMKgRjoJeGVuL2FyY2gveDg2L2RlYnVnLmMKPiDCoEY6CXRvb2xzL2RlYnVnZ2VyL2dkYnN4 Lwo+IMKgCj4gLUhJU0lMSUNPTiBISVAwNCBTVVBQT1JUCj4gLU06CVpvbHRhbiBLaXNzIDx6b2x0 YW4ua2lzc0BodWF3ZWkuY29tPgo+IC1TOglTdXBwb3J0ZWQKPiAtRjoJeGVuL2FyY2gvYXJtL2dp Yy1oaXAwNC5jCj4gLQo+IMKgSU5URUwoUikgVFJVU1RFRCBFWEVDVVRJT04gVEVDSE5PTE9HWSAo VFhUKQo+IMKgTToJR2FuZyBXZWkgPGdhbmcud2VpQGludGVsLmNvbT4KPiDCoE06CVNoYW5lIFdh bmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgo+IGRpZmYgLS1naXQgYS9kb2NzL21pc2MvYXJtL2Vh cmx5LXByaW50ay50eHQgYi9kb2NzL21pc2MvYXJtL2Vhcmx5LQo+IHByaW50ay50eHQKPiBpbmRl eCA3ZTAzOTU1Li40MWI1MjhiIDEwMDY0NAo+IC0tLSBhL2RvY3MvbWlzYy9hcm0vZWFybHktcHJp bnRrLnR4dAo+ICsrKyBiL2RvY3MvbWlzYy9hcm0vZWFybHktcHJpbnRrLnR4dAo+IEBAIC0zNyw3 ICszNyw2IEBAIHRoZSBuYW1lIG9mIHRoZSBtYWNoaW5lOgo+IMKgwqDCoC0gZHJhNzogcHJpbnRr IHdpdGggODI1MCBvbiBEUkE3IHBsYXRmb3JtCj4gwqDCoMKgLSBleHlub3M1MjUwOiBwcmludGsg d2l0aCB0aGUgc2Vjb25kIFVBUlQKPiDCoMKgwqAtIGZhc3Rtb2RlbDogcHJpbnRrIG9uIEFSTSBG YXN0bW9kZWwgc29mdHdhcmUgZW11bGF0b3JzCj4gLcKgwqAtIGhpcDA0LWQwMTogcHJpbnRrIHdp dGggODI1MCBvbiBIaVNpbGljb24gSGlwLTA0IEQwMQo+IMKgwqDCoC0ganVubzogcHJpbnRrIHdp dGggcGwwMTEgb24gSnVubyBwbGF0Zm9ybQo+IMKgwqDCoC0gbGFnZXI6IHByaW50ayB3aXRoIFND SUYwIG9uIFJlbmVzYXMgUi1DYXIgSDIgcHJvY2Vzc29ycwo+IMKgwqDCoC0gbWlkd2F5OiBwcmlu dGsgd2l0aCB0aGUgcGwwMTEgb24gQ2FseGVkYSBNaWR3YXkgcHJvY2Vzc29ycwo+IGRpZmYgLS1n aXQgYS94ZW4vYXJjaC9hcm0vTWFrZWZpbGUgYi94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPiBpbmRl eCAyZjA1MGY1Li42YTU4YTQxIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS9NYWtlZmlsZQo+ ICsrKyBiL3hlbi9hcmNoL2FybS9NYWtlZmlsZQo+IEBAIC0xMiw3ICsxMiw2IEBAIG9iai15ICs9 IGRvbWN0bC5vCj4gwqBvYmoteSArPSBzeXNjdGwubwo+IMKgb2JqLXkgKz0gZG9tYWluX2J1aWxk Lm8KPiDCoG9iai15ICs9IGdpYy5vIGdpYy12Mi5vCj4gLW9iai0kKENPTkZJR19BUk1fMzIpICs9 IGdpYy1oaXAwNC5vCj4gwqBvYmotJChDT05GSUdfSEFTX0dJQ1YzKSArPSBnaWMtdjMubwo+IMKg b2JqLXkgKz0gaW8ubwo+IMKgb2JqLXkgKz0gaXJxLm8KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gv YXJtL1J1bGVzLm1rIGIveGVuL2FyY2gvYXJtL1J1bGVzLm1rCj4gaW5kZXggNDk0N2U2NC4uZDZi YmU3YyAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC9hcm0vUnVsZXMubWsKPiArKysgYi94ZW4vYXJj aC9hcm0vUnVsZXMubWsKPiBAQCAtNDIsNyArNDIsNiBAQCBFQVJMWV9QUklOVEtfYnJjbcKgwqDC oMKgwqDCoMKgwqDCoMKgwqA6PSA4MjUwLDB4RjA0MEFCMDAsMgo+IMKgRUFSTFlfUFJJTlRLX2Ry YTfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgOj0gODI1MCwweDQ4MDZBMDAwLDIKPiDCoEVBUkxZX1BS SU5US19mYXN0bW9kZWzCoMKgwqDCoMKgwqA6PSBwbDAxMSwweDFjMDkwMDAwLDExNTIwMAo+IMKg RUFSTFlfUFJJTlRLX2V4eW5vczUyNTDCoMKgwqDCoMKgOj0gZXh5bm9zNDIxMCwweDEyYzIwMDAw Cj4gLUVBUkxZX1BSSU5US19oaXAwNC1kMDHCoMKgwqDCoMKgwqA6PSA4MjUwLDB4RTQwMDcwMDAs Mgo+IMKgRUFSTFlfUFJJTlRLX2p1bm/CoMKgwqDCoMKgwqDCoMKgwqDCoMKgOj0gcGwwMTEsMHg3 ZmY4MDAwMAo+IMKgRUFSTFlfUFJJTlRLX2xhZ2VywqDCoMKgwqDCoMKgwqDCoMKgwqA6PSBzY2lm LDB4ZTZlNjAwMDAKPiDCoEVBUkxZX1BSSU5US19taWR3YXnCoMKgwqDCoMKgwqDCoMKgwqA6PSBw bDAxMSwweGZmZjM2MDAwCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9naWMtaGlwMDQuYyBi L3hlbi9hcmNoL2FybS9naWMtaGlwMDQuYwo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IGE0MmNmMjQuLjAwMDAwMDAKPiAtLS0gYS94ZW4vYXJjaC9hcm0vZ2ljLWhpcDA0LmMKPiAr KysgL2Rldi9udWxsCj4gQEAgLTEsNzU3ICswLDAgQEAKPiAtLyoKPiAtICogeGVuL2FyY2gvYXJt L2dpYy1oaXAwNC5jCj4gLSAqCj4gLSAqIEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIgZm9y IEhpU2lsaWNvbiBIaXAwNCBwbGF0Zm9ybQo+IC0gKiBCYXNlZCBoZWF2aWx5IG9uIGdpYy12Mi5j IChpZAo+IDNiY2Y1NjNmZWMyNjM3OGY3ZjRjZjFlMmFkMGQ0ZDViM2YzNDE5MTkpCj4gLSAqCj4g LSAqIFRpbSBEZWVnYW4gPHRpbUB4ZW4ub3JnPgo+IC0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgQ2l0 cml4IFN5c3RlbXMuCj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gLSAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4g LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCj4gLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4g LSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAo+IC0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+IC0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqDCoFNlZSB0aGUKPiAtICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAtICovCj4gLQo+IC0jaW5jbHVk ZSA8eGVuL2NvbmZpZy5oPgo+IC0jaW5jbHVkZSA8eGVuL2xpYi5oPgo+IC0jaW5jbHVkZSA8eGVu L2luaXQuaD4KPiAtI2luY2x1ZGUgPHhlbi9tbS5oPgo+IC0jaW5jbHVkZSA8eGVuL2lycS5oPgo+ IC0jaW5jbHVkZSA8eGVuL3NjaGVkLmg+Cj4gLSNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KPiAtI2lu Y2x1ZGUgPHhlbi9zb2Z0aXJxLmg+Cj4gLSNpbmNsdWRlIDx4ZW4vbGlzdC5oPgo+IC0jaW5jbHVk ZSA8eGVuL2RldmljZV90cmVlLmg+Cj4gLSNpbmNsdWRlIDx4ZW4vbGliZmR0L2xpYmZkdC5oPgo+ IC0jaW5jbHVkZSA8eGVuL3NpemVzLmg+Cj4gLSNpbmNsdWRlIDxhc20vcDJtLmg+Cj4gLSNpbmNs dWRlIDxhc20vZG9tYWluLmg+Cj4gLSNpbmNsdWRlIDxhc20vcGxhdGZvcm0uaD4KPiAtI2luY2x1 ZGUgPGFzbS9kZXZpY2UuaD4KPiAtCj4gLSNpbmNsdWRlIDxhc20vaW8uaD4KPiAtI2luY2x1ZGUg PGFzbS9naWMuaD4KPiAtCj4gLS8qCj4gLSAqIExSIHJlZ2lzdGVyIGRlZmluaXRpb25zIGFyZSBH SUMgdjIgc3BlY2lmaWMuCj4gLSAqIE1vdmVkIHRoZXNlIGRlZmluaXRpb25zIGZyb20gaGVhZGVy IGZpbGUgdG8gaGVyZQo+IC0gKi8KPiAtI2RlZmluZSBHSUNIX1YyX0xSX1ZJUlRVQUxfTUFTS8Kg wqDCoMKgMHgzZmYKPiAtI2RlZmluZSBHSUNIX1YyX0xSX1ZJUlRVQUxfU0hJRlTCoMKgwqAwCj4g LSNkZWZpbmUgR0lDSF9WMl9MUl9QSFlTSUNBTF9NQVNLwqDCoMKgMHgzZmYKPiAtI2RlZmluZSBH SUNIX1YyX0xSX1BIWVNJQ0FMX1NISUZUwqDCoDEwCj4gLSNkZWZpbmUgR0lDSF9WMl9MUl9TVEFU RV9NQVNLwqDCoMKgwqDCoMKgMHgzCj4gLSNkZWZpbmUgR0lDSF9WMl9MUl9TVEFURV9TSElGVMKg wqDCoMKgwqAyOAo+IC0jZGVmaW5lIEdJQ0hfVjJfTFJfUFJJT1JJVFlfU0hJRlTCoMKgMjMKPiAt I2RlZmluZSBHSUNIX1YyX0xSX1BSSU9SSVRZX01BU0vCoMKgwqAweDFmCj4gLSNkZWZpbmUgR0lD SF9WMl9MUl9IV19TSElGVMKgwqDCoMKgwqDCoMKgwqAzMQo+IC0jZGVmaW5lIEdJQ0hfVjJfTFJf SFdfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoDB4MQo+IC0jZGVmaW5lIEdJQ0hfVjJfTFJfR1JQX1NI SUZUwqDCoMKgwqDCoMKgwqAzMAo+IC0jZGVmaW5lIEdJQ0hfVjJfTFJfR1JQX01BU0vCoMKgwqDC oMKgwqDCoMKgMHgxCj4gLSNkZWZpbmUgR0lDSF9WMl9MUl9NQUlOVEVOQU5DRV9JUlEgKDE8PDE5 KQo+IC0jZGVmaW5lIEdJQ0hfVjJfTFJfR1JQMcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgxPDwz MCkKPiAtI2RlZmluZSBHSUNIX1YyX0xSX0hXwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgx PDwzMSkKPiAtI2RlZmluZSBHSUNIX1YyX0xSX0NQVUlEX1NISUZUwqDCoMKgwqDCoDkKPiAtI2Rl ZmluZSBHSUNIX1YyX1ZUUl9OUkxSR1PCoMKgwqDCoMKgwqDCoMKgwqAweDNmCj4gLQo+IC0jZGVm aW5lIEdJQ0hfVjJfVk1DUl9QUklPUklUWV9NQVNLwqDCoMKgMHgxZgo+IC0jZGVmaW5lIEdJQ0hf VjJfVk1DUl9QUklPUklUWV9TSElGVMKgwqAyNwo+IC0KPiAtLyogR2xvYmFsIHN0YXRlICovCj4g LXN0YXRpYyBzdHJ1Y3Qgewo+IC3CoMKgwqDCoHZvaWQgX19pb21lbSAqIG1hcF9kYmFzZTsgLyog SU8gbWFwcGVkIEFkZHJlc3Mgb2YgZGlzdHJpYnV0b3IKPiByZWdpc3RlcnMgKi8KPiAtwqDCoMKg wqB2b2lkIF9faW9tZW0gKiBtYXBfY2Jhc2VbMl07IC8qIElPIG1hcHBlZCBBZGRyZXNzIG9mIENQ VSBpbnRlcmZhY2UKPiByZWdpc3RlcnMgKi8KPiAtwqDCoMKgwqB2b2lkIF9faW9tZW0gKiBtYXBf aGJhc2U7IC8qIElPIEFkZHJlc3Mgb2YgdmlydHVhbCBpbnRlcmZhY2UKPiByZWdpc3RlcnMgKi8K PiAtwqDCoMKgwqBzcGlubG9ja190IGxvY2s7Cj4gLX0gZ2ljdjI7Cj4gLQo+IC1zdGF0aWMgc3Ry dWN0IGdpY19pbmZvIGdpY3YyX2luZm87Cj4gLQo+IC0vKiBUaGUgR0lDIG1hcHBpbmcgb2YgQ1BV IGludGVyZmFjZXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWF0Y2ggdGhlCj4gLSAqIGxvZ2ljYWwg Q1BVIG51bWJlcmluZy4gTGV0J3MgdXNlIG1hcHBpbmcgYXMgcmV0dXJuZWQgYnkgdGhlIEdJQwo+ IC0gKiBpdHNlbGYKPiAtICovCj4gLXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1MTYsIGdpY19jcHVf aWQpOwo+IC0KPiAtLyogTWF4aW11bSBjcHUgaW50ZXJmYWNlIHBlciBHSUMgKi8KPiAtI2RlZmlu ZSBOUl9HSUNfQ1BVX0lGIDE2Cj4gLQo+IC0jZGVmaW5lIEhJUDA0X0dJQ0RfU0dJX1RBUkdFVF9T SElGVCA4Cj4gLQo+IC0jZGVmaW5lIEhJUDA0X0dJQ0hfQVBSwqDCoMKgMHg3MAo+IC0jZGVmaW5l IEhJUDA0X0dJQ0hfTFLCoMKgwqDCoDB4ODAKPiAtCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0 ZWJfZ2ljZCh1aW50OF90IHZhbCwgdW5zaWduZWQgaW50IG9mZnNldCkKPiAtewo+IC3CoMKgwqDC oHdyaXRlYl9yZWxheGVkKHZhbCwgZ2ljdjIubWFwX2RiYXNlICsgb2Zmc2V0KTsKPiAtfQo+IC0K PiAtc3RhdGljIGlubGluZSB2b2lkIHdyaXRld19naWNkKHVpbnQxNl90IHZhbCwgdW5zaWduZWQg aW50IG9mZnNldCkKPiAtewo+IC3CoMKgwqDCoHdyaXRld19yZWxheGVkKHZhbCwgZ2ljdjIubWFw X2RiYXNlICsgb2Zmc2V0KTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB2b2lkIHdyaXRlbF9n aWNkKHVpbnQzMl90IHZhbCwgdW5zaWduZWQgaW50IG9mZnNldCkKPiAtewo+IC3CoMKgwqDCoHdy aXRlbF9yZWxheGVkKHZhbCwgZ2ljdjIubWFwX2RiYXNlICsgb2Zmc2V0KTsKPiAtfQo+IC0KPiAt c3RhdGljIGlubGluZSB1aW50MzJfdCByZWFkbF9naWNkKHVuc2lnbmVkIGludCBvZmZzZXQpCj4g LXsKPiAtwqDCoMKgwqByZXR1cm4gcmVhZGxfcmVsYXhlZChnaWN2Mi5tYXBfZGJhc2UgKyBvZmZz ZXQpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVsX2dpY2ModWludDMyX3Qg dmFsLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQo+IC17Cj4gLcKgwqDCoMKgdW5zaWduZWQgaW50IHBh Z2UgPSBvZmZzZXQgPj4gUEFHRV9TSElGVDsKPiAtwqDCoMKgwqBvZmZzZXQgJj0gflBBR0VfTUFT SzsKPiAtwqDCoMKgwqB3cml0ZWxfcmVsYXhlZCh2YWwsIGdpY3YyLm1hcF9jYmFzZVtwYWdlXSAr IG9mZnNldCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdWludDMyX3QgcmVhZGxfZ2ljYyh1 bnNpZ25lZCBpbnQgb2Zmc2V0KQo+IC17Cj4gLcKgwqDCoMKgdW5zaWduZWQgaW50IHBhZ2UgPSBv ZmZzZXQgPj4gUEFHRV9TSElGVDsKPiAtwqDCoMKgwqBvZmZzZXQgJj0gflBBR0VfTUFTSzsKPiAt wqDCoMKgwqByZXR1cm4gcmVhZGxfcmVsYXhlZChnaWN2Mi5tYXBfY2Jhc2VbcGFnZV0gKyBvZmZz ZXQpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVsX2dpY2godWludDMyX3Qg dmFsLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQo+IC17Cj4gLcKgwqDCoMKgd3JpdGVsX3JlbGF4ZWQo dmFsLCBnaWN2Mi5tYXBfaGJhc2UgKyBvZmZzZXQpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5l IHVpbnQzMl90IHJlYWRsX2dpY2goaW50IHVuc2lnbmVkIG9mZnNldCkKPiAtewo+IC3CoMKgwqDC oHJldHVybiByZWFkbF9yZWxheGVkKGdpY3YyLm1hcF9oYmFzZSArIG9mZnNldCk7Cj4gLX0KPiAt Cj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGlwMDRnaWNfY3B1X21hc2soY29uc3QgY3B1bWFza190 ICpjcHVtYXNrKQo+IC17Cj4gLcKgwqDCoMKgdW5zaWduZWQgaW50IGNwdTsKPiAtwqDCoMKgwqB1 bnNpZ25lZCBpbnQgbWFzayA9IDA7Cj4gLcKgwqDCoMKgY3B1bWFza190IHBvc3NpYmxlX21hc2s7 Cj4gLQo+IC3CoMKgwqDCoGNwdW1hc2tfYW5kKCZwb3NzaWJsZV9tYXNrLCBjcHVtYXNrLCAmY3B1 X3Bvc3NpYmxlX21hcCk7Cj4gLcKgwqDCoMKgZm9yX2VhY2hfY3B1KCBjcHUsICZwb3NzaWJsZV9t YXNrICkKPiAtwqDCoMKgwqB7Cj4gLcKgwqDCoMKgwqDCoMKgwqBBU1NFUlQoY3B1IDwgTlJfR0lD X0NQVV9JRik7Cj4gLcKgwqDCoMKgwqDCoMKgwqBtYXNrIHw9IHBlcl9jcHUoZ2ljX2NwdV9pZCwg Y3B1KTsKPiAtwqDCoMKgwqB9Cj4gLQo+IC3CoMKgwqDCoHJldHVybiBtYXNrOwo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCBoaXAwNGdpY19zYXZlX3N0YXRlKHN0cnVjdCB2Y3B1ICp2KQo+IC17Cj4g LcKgwqDCoMKgaW50IGk7Cj4gLQo+IC3CoMKgwqDCoC8qIE5vIG5lZWQgZm9yIHNwaW5sb2NrcyBo ZXJlIGJlY2F1c2UgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgYXJvdW5kCj4gLcKgwqDCoMKgwqAq IHRoaXMgY2FsbCBhbmQgaXQgb25seSBhY2Nlc3NlcyBzdHJ1Y3QgdmNwdSBmaWVsZHMgdGhhdCBj YW5ub3QgYmUKPiAtwqDCoMKgwqDCoCogYWNjZXNzZWQgc2ltdWx0YW5lb3VzbHkgYnkgYW5vdGhl ciBwQ1BVLgo+IC3CoMKgwqDCoMKgKi8KPiAtwqDCoMKgwqBmb3IgKCBpID0gMDsgaSA8IGdpY3Yy X2luZm8ubnJfbHJzOyBpKysgKQo+IC3CoMKgwqDCoMKgwqDCoMKgdi0+YXJjaC5naWMudjIubHJb aV0gPSByZWFkbF9naWNoKEhJUDA0X0dJQ0hfTFIgKyBpICogNCk7Cj4gLQo+IC3CoMKgwqDCoHYt PmFyY2guZ2ljLnYyLmFwciA9IHJlYWRsX2dpY2goSElQMDRfR0lDSF9BUFIpOwo+IC3CoMKgwqDC oHYtPmFyY2guZ2ljLnYyLnZtY3IgPSByZWFkbF9naWNoKEdJQ0hfVk1DUik7Cj4gLcKgwqDCoMKg LyogRGlzYWJsZSB1bnRpbCBuZXh0IFZDUFUgc2NoZWR1bGVkICovCj4gLcKgwqDCoMKgd3JpdGVs X2dpY2goMCwgR0lDSF9IQ1IpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBoaXAwNGdpY19yZXN0 b3JlX3N0YXRlKGNvbnN0IHN0cnVjdCB2Y3B1ICp2KQo+IC17Cj4gLcKgwqDCoMKgaW50IGk7Cj4g LQo+IC3CoMKgwqDCoGZvciAoIGkgPSAwOyBpIDwgZ2ljdjJfaW5mby5ucl9scnM7IGkrKyApCj4g LcKgwqDCoMKgwqDCoMKgwqB3cml0ZWxfZ2ljaCh2LT5hcmNoLmdpYy52Mi5scltpXSwgSElQMDRf R0lDSF9MUiArIGkgKiA0KTsKPiAtCj4gLcKgwqDCoMKgd3JpdGVsX2dpY2godi0+YXJjaC5naWMu djIuYXByLCBISVAwNF9HSUNIX0FQUik7Cj4gLcKgwqDCoMKgd3JpdGVsX2dpY2godi0+YXJjaC5n aWMudjIudm1jciwgR0lDSF9WTUNSKTsKPiAtwqDCoMKgwqB3cml0ZWxfZ2ljaChHSUNIX0hDUl9F TiwgR0lDSF9IQ1IpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBoaXAwNGdpY19kdW1wX3N0YXRl KGNvbnN0IHN0cnVjdCB2Y3B1ICp2KQo+IC17Cj4gLcKgwqDCoMKgaW50IGk7Cj4gLQo+IC3CoMKg wqDCoGlmICggdiA9PSBjdXJyZW50ICkKPiAtwqDCoMKgwqB7Cj4gLcKgwqDCoMKgwqDCoMKgwqBm b3IgKCBpID0gMDsgaSA8IGdpY3YyX2luZm8ubnJfbHJzOyBpKysgKQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwcmludGsoIsKgwqDCoEhXX0xSWyVkXT0leFxuIiwgaSwKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWFkbF9naWNoKEhJUDA0X0dJQ0hfTFIgKyBp ICogNCkpOwo+IC3CoMKgwqDCoH0KPiAtwqDCoMKgwqBlbHNlCj4gLcKgwqDCoMKgewo+IC3CoMKg wqDCoMKgwqDCoMKgZm9yICggaSA9IDA7IGkgPCBnaWN2Ml9pbmZvLm5yX2xyczsgaSsrICkKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJpbnRrKCLCoMKgwqBWQ1BVX0xSWyVkXT0leFxuIiwg aSwgdi0+YXJjaC5naWMudjIubHJbaV0pOwo+IC3CoMKgwqDCoH0KPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQgaGlwMDRnaWNfZW9pX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmlycWQpCj4gLXsKPiAtwqDC oMKgwqBpbnQgaXJxID0gaXJxZC0+aXJxOwo+IC3CoMKgwqDCoC8qIExvd2VyIHRoZSBwcmlvcml0 eSAqLwo+IC3CoMKgwqDCoHdyaXRlbF9naWNjKGlycSwgR0lDQ19FT0lSKTsKPiAtfQo+IC0KPiAt c3RhdGljIHZvaWQgaGlwMDRnaWNfZGlyX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmlycWQpCj4gLXsK PiAtwqDCoMKgwqAvKiBEZWFjdGl2YXRlICovCj4gLcKgwqDCoMKgd3JpdGVsX2dpY2MoaXJxZC0+ aXJxLCBHSUNDX0RJUik7Cj4gLX0KPiAtCj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGlwMDRnaWNf cmVhZF9pcnEodm9pZCkKPiAtewo+IC3CoMKgwqDCoHJldHVybiAocmVhZGxfZ2ljYyhHSUNDX0lB UikgJiBHSUNDX0lBX0lSUSk7Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIG5lZWRzIHRvIGJlIGNhbGxl ZCB3aXRoIGEgdmFsaWQgY3B1X21hc2ssIGllIGVhY2ggY3B1IGluIHRoZSBtYXNrIGhhcwo+IC0g KiBhbHJlYWR5IGNhbGxlZCBnaWNfY3B1X2luaXQKPiAtICovCj4gLXN0YXRpYyB2b2lkIGhpcDA0 Z2ljX3NldF9pcnFfcHJvcGVydGllcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXNrLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5zaWduZWQg aW50IHByaW9yaXR5KQo+IC17Cj4gLcKgwqDCoMKgdWludDMyX3QgY2ZnLCBhY3R1YWwsIGVkZ2Vi aXQ7Cj4gLcKgwqDCoMKgdW5zaWduZWQgaW50IG1hc2sgPSBoaXAwNGdpY19jcHVfbWFzayhjcHVf bWFzayk7Cj4gLcKgwqDCoMKgdW5zaWduZWQgaW50IGlycSA9IGRlc2MtPmlycTsKPiAtwqDCoMKg wqB1bnNpZ25lZCBpbnQgdHlwZSA9IGRlc2MtPmFyY2gudHlwZTsKPiAtCj4gLcKgwqDCoMKgQVNT RVJUKHR5cGUgIT0gRFRfSVJRX1RZUEVfSU5WQUxJRCk7Cj4gLcKgwqDCoMKgQVNTRVJUKHNwaW5f aXNfbG9ja2VkKCZkZXNjLT5sb2NrKSk7Cj4gLQo+IC3CoMKgwqDCoHNwaW5fbG9jaygmZ2ljdjIu bG9jayk7Cj4gLcKgwqDCoMKgLyogU2V0IGVkZ2UgLyBsZXZlbCAqLwo+IC3CoMKgwqDCoGNmZyA9 IHJlYWRsX2dpY2QoR0lDRF9JQ0ZHUiArIChpcnEgLyAxNikgKiA0KTsKPiAtwqDCoMKgwqBlZGdl Yml0ID0gMnUgPDwgKDIgKiAoaXJxICUgMTYpKTsKPiAtwqDCoMKgwqBpZiAoIHR5cGUgJiBEVF9J UlFfVFlQRV9MRVZFTF9NQVNLICkKPiAtwqDCoMKgwqDCoMKgwqDCoGNmZyAmPSB+ZWRnZWJpdDsK PiAtwqDCoMKgwqBlbHNlIGlmICggdHlwZSAmIERUX0lSUV9UWVBFX0VER0VfQk9USCApCj4gLcKg wqDCoMKgwqDCoMKgwqBjZmcgfD0gZWRnZWJpdDsKPiAtwqDCoMKgwqB3cml0ZWxfZ2ljZChjZmcs IEdJQ0RfSUNGR1IgKyAoaXJxIC8gMTYpICogNCk7Cj4gLQo+IC3CoMKgwqDCoGFjdHVhbCA9IHJl YWRsX2dpY2QoR0lDRF9JQ0ZHUiArIChpcnEgLyAxNikgKiA0KTsKPiAtwqDCoMKgwqBpZiAoICgg Y2ZnICYgZWRnZWJpdCApIF4gKCBhY3R1YWwgJiBlZGdlYml0ICkgKQo+IC3CoMKgwqDCoHsKPiAt wqDCoMKgwqDCoMKgwqDCoHByaW50ayhYRU5MT0dfV0FSTklORyAiR0lDLUhJUDA0OiBXQVJOSU5H OiAiCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJDUFUlZDogRmFpbGVkIHRvIGNv bmZpZ3VyZSBJUlEldSBhcyAlcy10cmlnZ2VyZWQuICIKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIkgvdyBmb3JjZXMgdG8gJXMtdHJpZ2dlcmVkLlxuIiwKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc21wX3Byb2Nlc3Nvcl9pZCgpLCBkZXNjLT5pcnEsCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNmZyAmIGVkZ2ViaXQgPyAiRWRnZSIgOiAiTGV2ZWwi LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhY3R1YWwgJiBlZGdlYml0ID8gIkVk Z2UiIDogIkxldmVsIik7Cj4gLcKgwqDCoMKgwqDCoMKgwqBkZXNjLT5hcmNoLnR5cGUgPSBhY3R1 YWwgJiBlZGdlYml0ID8KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFRfSVJRX1RZUEVfRURH RV9SSVNJTkcgOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEVF9JUlFfVFlQRV9MRVZFTF9I SUdIOwo+IC3CoMKgwqDCoH0KPiAtCj4gLcKgwqDCoMKgLyogU2V0IHRhcmdldCBDUFUgbWFzayAo UkFaL1dJIG9uIHVuaXByb2Nlc3NvcikgKi8KPiAtwqDCoMKgwqB3cml0ZXdfZ2ljZChtYXNrLCBH SUNEX0lUQVJHRVRTUiArIGlycSAqIDIpOwo+IC3CoMKgwqDCoC8qIFNldCBwcmlvcml0eSAqLwo+ IC3CoMKgwqDCoHdyaXRlYl9naWNkKHByaW9yaXR5LCBHSUNEX0lQUklPUklUWVIgKyBpcnEpOwo+ IC0KPiAtwqDCoMKgwqBzcGluX3VubG9jaygmZ2ljdjIubG9jayk7Cj4gLX0KPiAtCj4gLXN0YXRp YyB2b2lkIF9faW5pdCBoaXAwNGdpY19kaXN0X2luaXQodm9pZCkKPiAtewo+IC3CoMKgwqDCoHVp bnQzMl90IHR5cGU7Cj4gLcKgwqDCoMKgdWludDMyX3QgY3B1bWFzazsKPiAtwqDCoMKgwqB1aW50 MzJfdCBnaWNfY3B1czsKPiAtwqDCoMKgwqB1bnNpZ25lZCBpbnQgbnJfbGluZXM7Cj4gLcKgwqDC oMKgaW50IGk7Cj4gLQo+IC3CoMKgwqDCoGNwdW1hc2sgPSByZWFkbF9naWNkKEdJQ0RfSVRBUkdF VFNSKSAmIDB4ZmZmZjsKPiAtwqDCoMKgwqBjcHVtYXNrIHw9IGNwdW1hc2sgPDwgMTY7Cj4gLQo+ IC3CoMKgwqDCoC8qIERpc2FibGUgdGhlIGRpc3RyaWJ1dG9yICovCj4gLcKgwqDCoMKgd3JpdGVs X2dpY2QoMCwgR0lDRF9DVExSKTsKPiAtCj4gLcKgwqDCoMKgdHlwZSA9IHJlYWRsX2dpY2QoR0lD RF9UWVBFUik7Cj4gLcKgwqDCoMKgbnJfbGluZXMgPSAzMiAqICgodHlwZSAmIEdJQ0RfVFlQRV9M SU5FUykgKyAxKTsKPiAtwqDCoMKgwqBnaWNfY3B1cyA9IDE2Owo+IC3CoMKgwqDCoHByaW50aygi R0lDLUhJUDA0OiAlZCBsaW5lcywgJWQgY3B1JXMlcyAoSUlEICU4Ljh4KS5cbiIsCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqBucl9saW5lcywgZ2ljX2NwdXMsIChnaWNfY3B1cyA9PSAxKSA/ICIi IDogInMiLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgKHR5cGUgJiBHSUNEX1RZUEVfU0VDKSA/ ICIsIHNlY3VyZSIgOiAiIiwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlYWRsX2dpY2QoR0lD RF9JSURSKSk7Cj4gLQo+IC3CoMKgwqDCoC8qIERlZmF1bHQgYWxsIGdsb2JhbCBJUlFzIHRvIGxl dmVsLCBhY3RpdmUgbG93ICovCj4gLcKgwqDCoMKgZm9yICggaSA9IDMyOyBpIDwgbnJfbGluZXM7 IGkgKz0gMTYgKQo+IC3CoMKgwqDCoMKgwqDCoMKgd3JpdGVsX2dpY2QoMHgwLCBHSUNEX0lDRkdS ICsgKGkgLyAxNikgKiA0KTsKPiAtCj4gLcKgwqDCoMKgLyogUm91dGUgYWxsIGdsb2JhbCBJUlFz IHRvIHRoaXMgQ1BVICovCj4gLcKgwqDCoMKgZm9yICggaSA9IDMyOyBpIDwgbnJfbGluZXM7IGkg Kz0gMiApCj4gLcKgwqDCoMKgwqDCoMKgwqB3cml0ZWxfZ2ljZChjcHVtYXNrLCBHSUNEX0lUQVJH RVRTUiArIChpIC8gMikgKiA0KTsKPiAtCj4gLcKgwqDCoMKgLyogRGVmYXVsdCBwcmlvcml0eSBm b3IgZ2xvYmFsIGludGVycnVwdHMgKi8KPiAtwqDCoMKgwqBmb3IgKCBpID0gMzI7IGkgPCBucl9s aW5lczsgaSArPSA0ICkKPiAtwqDCoMKgwqDCoMKgwqDCoHdyaXRlbF9naWNkKEdJQ19QUklfSVJR IDw8IDI0IHwgR0lDX1BSSV9JUlEgPDwgMTYgfAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgR0lDX1BSSV9JUlEgPDwgOCB8IEdJQ19QUklfSVJRLAo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0lDRF9JUFJJT1JJVFlSICsgKGkgLyA0 KSAqIDQpOwo+IC0KPiAtwqDCoMKgwqAvKiBEaXNhYmxlIGFsbCBnbG9iYWwgaW50ZXJydXB0cyAq Lwo+IC3CoMKgwqDCoGZvciAoIGkgPSAzMjsgaSA8IG5yX2xpbmVzOyBpICs9IDMyICkKPiAtwqDC oMKgwqDCoMKgwqDCoHdyaXRlbF9naWNkKH4weDAsIEdJQ0RfSUNFTkFCTEVSICsgKGkgLyAzMikg KiA0KTsKPiAtCj4gLcKgwqDCoMKgLyogT25seSAxMDIwIGludGVycnVwdHMgYXJlIHN1cHBvcnRl ZCAqLwo+IC3CoMKgwqDCoGdpY3YyX2luZm8ubnJfbGluZXMgPSBtaW4oMTAyMFUsIG5yX2xpbmVz KTsKPiAtCj4gLcKgwqDCoMKgLyogVHVybiBvbiB0aGUgZGlzdHJpYnV0b3IgKi8KPiAtwqDCoMKg wqB3cml0ZWxfZ2ljZChHSUNEX0NUTF9FTkFCTEUsIEdJQ0RfQ1RMUik7Cj4gLX0KPiAtCj4gLXN0 YXRpYyB2b2lkIGhpcDA0Z2ljX2NwdV9pbml0KHZvaWQpCj4gLXsKPiAtwqDCoMKgwqBpbnQgaTsK PiAtCj4gLcKgwqDCoMKgdGhpc19jcHUoZ2ljX2NwdV9pZCkgPSByZWFkbF9naWNkKEdJQ0RfSVRB UkdFVFNSKSAmIDB4ZmZmZjsKPiAtCj4gLcKgwqDCoMKgLyogVGhlIGZpcnN0IDMyIGludGVycnVw dHMgKFBQSSBhbmQgU0dJKSBhcmUgYmFua2VkIHBlci1jcHUsIHNvCj4gLcKgwqDCoMKgwqAqIGV2 ZW4gdGhvdWdoIHRoZXkgYXJlIGNvbnRyb2xsZWQgd2l0aCBHSUNEIHJlZ2lzdGVycywgdGhleSBt dXN0Cj4gLcKgwqDCoMKgwqAqIGJlIHNldCB1cCBoZXJlIHdpdGggdGhlIG90aGVyIHBlci1jcHUg c3RhdGUuICovCj4gLcKgwqDCoMKgd3JpdGVsX2dpY2QoMHhmZmZmMDAwMCwgR0lDRF9JQ0VOQUJM RVIpOyAvKiBEaXNhYmxlIGFsbCBQUEkgKi8KPiAtwqDCoMKgwqB3cml0ZWxfZ2ljZCgweDAwMDBm ZmZmLCBHSUNEX0lTRU5BQkxFUik7IC8qIEVuYWJsZSBhbGwgU0dJICovCj4gLQo+IC3CoMKgwqDC oC8qIFNldCBTR0kgcHJpb3JpdGllcyAqLwo+IC3CoMKgwqDCoGZvciAoIGkgPSAwOyBpIDwgMTY7 IGkgKz0gNCApCj4gLcKgwqDCoMKgwqDCoMKgwqB3cml0ZWxfZ2ljZChHSUNfUFJJX0lQSSA8PCAy NCB8IEdJQ19QUklfSVBJIDw8IDE2IHwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoEdJQ19QUklfSVBJIDw8IDggfCBHSUNfUFJJX0lQSSwKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdJQ0RfSVBSSU9SSVRZUiArIChpIC8gNCkgKiA0 KTsKPiAtCj4gLcKgwqDCoMKgLyogU2V0IFBQSSBwcmlvcml0aWVzICovCj4gLcKgwqDCoMKgZm9y ICggaSA9IDE2OyBpIDwgMzI7IGkgKz0gNCApCj4gLcKgwqDCoMKgwqDCoMKgwqB3cml0ZWxfZ2lj ZChHSUNfUFJJX0lSUSA8PCAyNCB8IEdJQ19QUklfSVJRIDw8IDE2IHwKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdJQ19QUklfSVJRIDw8IDggfCBHSUNfUFJJX0lS USwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdJQ0RfSVBSSU9S SVRZUiArIChpIC8gNCkgKiA0KTsKPiAtCj4gLcKgwqDCoMKgLyogTG9jYWwgc2V0dGluZ3M6IGlu dGVyZmFjZSBjb250cm9sbGVyICovCj4gLcKgwqDCoMKgLyogRG9uJ3QgbWFzayBieSBwcmlvcml0 eSAqLwo+IC3CoMKgwqDCoHdyaXRlbF9naWNjKDB4ZmYsIEdJQ0NfUE1SKTsKPiAtwqDCoMKgwqAv KiBGaW5lc3QgZ3JhbnVsYXJpdHkgb2YgcHJpb3JpdHkgKi8KPiAtwqDCoMKgwqB3cml0ZWxfZ2lj YygweDAsIEdJQ0NfQlBSKTsKPiAtwqDCoMKgwqAvKiBUdXJuIG9uIGRlbGl2ZXJ5ICovCj4gLcKg wqDCoMKgd3JpdGVsX2dpY2MoR0lDQ19DVExfRU5BQkxFfEdJQ0NfQ1RMX0VPSSwgR0lDQ19DVExS KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaGlwMDRnaWNfY3B1X2Rpc2FibGUodm9pZCkKPiAt ewo+IC3CoMKgwqDCoHdyaXRlbF9naWNjKDB4MCwgR0lDQ19DVExSKTsKPiAtfQo+IC0KPiAtc3Rh dGljIHZvaWQgaGlwMDRnaWNfaHlwX2luaXQodm9pZCkKPiAtewo+IC3CoMKgwqDCoHVpbnQzMl90 IHZ0cjsKPiAtwqDCoMKgwqB1aW50OF90IG5yX2xyczsKPiAtCj4gLcKgwqDCoMKgdnRyID0gcmVh ZGxfZ2ljaChHSUNIX1ZUUik7Cj4gLcKgwqDCoMKgbnJfbHJzwqDCoD0gKHZ0ciAmIEdJQ0hfVjJf VlRSX05STFJHUykgKyAxOwo+IC3CoMKgwqDCoGdpY3YyX2luZm8ubnJfbHJzID0gbnJfbHJzOwo+ IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBoaXAwNGdpY19oeXBfZGlzYWJsZSh2b2lkKQo+IC17Cj4g LcKgwqDCoMKgd3JpdGVsX2dpY2goMCwgR0lDSF9IQ1IpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50 IGhpcDA0Z2ljX3NlY29uZGFyeV9jcHVfaW5pdCh2b2lkKQo+IC17Cj4gLcKgwqDCoMKgc3Bpbl9s b2NrKCZnaWN2Mi5sb2NrKTsKPiAtCj4gLcKgwqDCoMKgaGlwMDRnaWNfY3B1X2luaXQoKTsKPiAt wqDCoMKgwqBoaXAwNGdpY19oeXBfaW5pdCgpOwo+IC0KPiAtwqDCoMKgwqBzcGluX3VubG9jaygm Z2ljdjIubG9jayk7Cj4gLQo+IC3CoMKgwqDCoHJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMg dm9pZCBoaXAwNGdpY19zZW5kX1NHSShlbnVtIGdpY19zZ2kgc2dpLCBlbnVtIGdpY19zZ2lfbW9k ZQo+IGlycW1vZGUsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hc2spCj4gLXsKPiAtwqDCoMKgwqB1 bnNpZ25lZCBpbnQgbWFzayA9IDA7Cj4gLcKgwqDCoMKgY3B1bWFza190IG9ubGluZV9tYXNrOwo+ IC0KPiAtwqDCoMKgwqBzd2l0Y2ggKCBpcnFtb2RlICkKPiAtwqDCoMKgwqB7Cj4gLcKgwqDCoMKg Y2FzZSBTR0lfVEFSR0VUX09USEVSUzoKPiAtwqDCoMKgwqDCoMKgwqDCoHdyaXRlbF9naWNkKEdJ Q0RfU0dJX1RBUkdFVF9PVEhFUlMgfCBzZ2ksIEdJQ0RfU0dJUik7Cj4gLcKgwqDCoMKgwqDCoMKg wqBicmVhazsKPiAtwqDCoMKgwqBjYXNlIFNHSV9UQVJHRVRfU0VMRjoKPiAtwqDCoMKgwqDCoMKg wqDCoHdyaXRlbF9naWNkKEdJQ0RfU0dJX1RBUkdFVF9TRUxGIHwgc2dpLCBHSUNEX1NHSVIpOwo+ IC3CoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gLcKgwqDCoMKgY2FzZSBTR0lfVEFSR0VUX0xJU1Q6 Cj4gLcKgwqDCoMKgwqDCoMKgwqBjcHVtYXNrX2FuZCgmb25saW5lX21hc2ssIGNwdV9tYXNrLCAm Y3B1X29ubGluZV9tYXApOwo+IC3CoMKgwqDCoMKgwqDCoMKgbWFzayA9IGhpcDA0Z2ljX2NwdV9t YXNrKCZvbmxpbmVfbWFzayk7Cj4gLcKgwqDCoMKgwqDCoMKgwqB3cml0ZWxfZ2ljZChHSUNEX1NH SV9UQVJHRVRfTElTVCB8Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAobWFzayA8PCBISVAwNF9HSUNEX1NHSV9UQVJHRVRfU0hJRlQpIHwgc2dpLAo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0lDRF9TR0lSKTsKPiAtwqDCoMKgwqDC oMKgwqDCoGJyZWFrOwo+IC3CoMKgwqDCoGRlZmF1bHQ6Cj4gLcKgwqDCoMKgwqDCoMKgwqBCVUco KTsKPiAtwqDCoMKgwqB9Cj4gLX0KPiAtCj4gLS8qIFNodXQgZG93biB0aGUgcGVyLUNQVSBHSUMg aW50ZXJmYWNlICovCj4gLXN0YXRpYyB2b2lkIGhpcDA0Z2ljX2Rpc2FibGVfaW50ZXJmYWNlKHZv aWQpCj4gLXsKPiAtwqDCoMKgwqBzcGluX2xvY2soJmdpY3YyLmxvY2spOwo+IC3CoMKgwqDCoGhp cDA0Z2ljX2NwdV9kaXNhYmxlKCk7Cj4gLcKgwqDCoMKgaGlwMDRnaWNfaHlwX2Rpc2FibGUoKTsK PiAtwqDCoMKgwqBzcGluX3VubG9jaygmZ2ljdjIubG9jayk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2 b2lkIGhpcDA0Z2ljX3VwZGF0ZV9scihpbnQgbHIsIGNvbnN0IHN0cnVjdCBwZW5kaW5nX2lycSAq cCwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1bnNpZ25lZCBpbnQgc3RhdGUpCj4gLXsKPiAtwqDCoMKgwqB1aW50MzJfdCBscl9yZWc7 Cj4gLQo+IC3CoMKgwqDCoEJVR19PTihsciA+PSBnaWN2Ml9pbmZvLm5yX2xycyk7Cj4gLcKgwqDC oMKgQlVHX09OKGxyIDwgMCk7Cj4gLQo+IC3CoMKgwqDCoGxyX3JlZyA9ICgoKHN0YXRlICYgR0lD SF9WMl9MUl9TVEFURV9NQVNLKSA8PAo+IEdJQ0hfVjJfTFJfU1RBVEVfU0hJRlQpwqDCoHwKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgoR0lDX1BSSV9UT19HVUVTVChwLT5wcmlvcml0 eSkgJgo+IEdJQ0hfVjJfTFJfUFJJT1JJVFlfTUFTSykKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgPDwKPiBHSUNIX1YyX0xSX1BSSU9SSVRZX1NISUZUKSB8Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAoKHAtPmlycSAmIEdJQ0hfVjJfTFJfVklSVFVBTF9NQVNLKSA8 PAo+IEdJQ0hfVjJfTFJfVklSVFVBTF9TSElGVCkpOwo+IC0KPiAtwqDCoMKgwqBpZiAoIHAtPmRl c2MgIT0gTlVMTCApCj4gLcKgwqDCoMKgwqDCoMKgwqBscl9yZWcgfD0gR0lDSF9WMl9MUl9IVyB8 ICgocC0+ZGVzYy0+aXJxICYKPiBHSUNIX1YyX0xSX1BIWVNJQ0FMX01BU0sgKQo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgPDwgR0lDSF9WMl9MUl9QSFlTSUNBTF9TSElGVCk7Cj4gLQo+IC3CoMKgwqDCoHdyaXRl bF9naWNoKGxyX3JlZywgSElQMDRfR0lDSF9MUiArIGxyICogNCk7Cj4gLX0KPiAtCj4gLXN0YXRp YyB2b2lkIGhpcDA0Z2ljX2NsZWFyX2xyKGludCBscikKPiAtewo+IC3CoMKgwqDCoHdyaXRlbF9n aWNoKDAsIEhJUDA0X0dJQ0hfTFIgKyBsciAqIDQpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBo aXAwNGdpY19yZWFkX2xyKGludCBsciwgc3RydWN0IGdpY19sciAqbHJfcmVnKQo+IC17Cj4gLcKg wqDCoMKgdWludDMyX3QgbHJ2Owo+IC0KPiAtwqDCoMKgwqBscnbCoMKgwqDCoMKgwqDCoMKgwqDC oD0gcmVhZGxfZ2ljaChISVAwNF9HSUNIX0xSICsgbHIgKiA0KTsKPiAtwqDCoMKgwqBscl9yZWct PnBpcnEgPSAobHJ2ID4+IEdJQ0hfVjJfTFJfUEhZU0lDQUxfU0hJRlQpICYKPiBHSUNIX1YyX0xS X1BIWVNJQ0FMX01BU0s7Cj4gLcKgwqDCoMKgbHJfcmVnLT52aXJxID0gKGxydiA+PiBHSUNIX1Yy X0xSX1ZJUlRVQUxfU0hJRlQpICYKPiBHSUNIX1YyX0xSX1ZJUlRVQUxfTUFTSzsKPiAtwqDCoMKg wqBscl9yZWctPnByaW9yaXR5ID0gKGxydiA+PiBHSUNIX1YyX0xSX1BSSU9SSVRZX1NISUZUKSAm Cj4gR0lDSF9WMl9MUl9QUklPUklUWV9NQVNLOwo+IC3CoMKgwqDCoGxyX3JlZy0+c3RhdGXCoMKg wqDCoMKgPSAobHJ2ID4+IEdJQ0hfVjJfTFJfU1RBVEVfU0hJRlQpICYKPiBHSUNIX1YyX0xSX1NU QVRFX01BU0s7Cj4gLcKgwqDCoMKgbHJfcmVnLT5od19zdGF0dXMgPSAobHJ2ID4+IEdJQ0hfVjJf TFJfSFdfU0hJRlQpICYKPiBHSUNIX1YyX0xSX0hXX01BU0s7Cj4gLcKgwqDCoMKgbHJfcmVnLT5n cnDCoMKgwqDCoMKgwqDCoD0gKGxydiA+PiBHSUNIX1YyX0xSX0dSUF9TSElGVCkgJgo+IEdJQ0hf VjJfTFJfR1JQX01BU0s7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGhpcDA0Z2ljX3dyaXRlX2xy KGludCBsciwgY29uc3Qgc3RydWN0IGdpY19sciAqbHJfcmVnKQo+IC17Cj4gLcKgwqDCoMKgdWlu dDMyX3QgbHJ2ID0gMDsKPiAtCj4gLcKgwqDCoMKgbHJ2ID0gKCAoKGxyX3JlZy0+cGlycSAmIEdJ Q0hfVjJfTFJfUEhZU0lDQUxfTUFTSykgPDwKPiBHSUNIX1YyX0xSX1BIWVNJQ0FMX1NISUZUKSB8 Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgKChscl9yZWctPnZpcnEgJiBHSUNIX1YyX0xSX1ZJUlRV QUxfTUFTSykgPDwKPiBHSUNIX1YyX0xSX1ZJUlRVQUxfU0hJRlQpwqDCoMKgfAo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoCgodWludDMyX3QpKGxyX3JlZy0+cHJpb3JpdHkgJiBHSUNIX1YyX0xSX1BS SU9SSVRZX01BU0spCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA8PCBHSUNIX1YyX0xSX1BSSU9SSVRZ X1NISUZUKSB8Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgKCh1aW50MzJfdCkobHJfcmVnLT5zdGF0 ZSAmIEdJQ0hfVjJfTFJfU1RBVEVfTUFTSykKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDw8IEdJQ0hfVjJfTFJf U1RBVEVfU0hJRlQpIHwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqAoKHVpbnQzMl90KShscl9yZWct Pmh3X3N0YXR1cyAmIEdJQ0hfVjJfTFJfSFdfTUFTSykKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg PDwgR0lDSF9WMl9MUl9IV19TSElGVCnCoMKgfAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCgodWlu dDMyX3QpKGxyX3JlZy0+Z3JwICYgR0lDSF9WMl9MUl9HUlBfTUFTSykgPDwKPiBHSUNIX1YyX0xS X0dSUF9TSElGVCkgKTsKPiAtCj4gLcKgwqDCoMKgd3JpdGVsX2dpY2gobHJ2LCBISVAwNF9HSUNI X0xSICsgbHIgKiA0KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaGlwMDRnaWNfaGNyX3N0YXR1 cyh1aW50MzJfdCBmbGFnLCBib29sX3Qgc3RhdHVzKQo+IC17Cj4gLcKgwqDCoMKgdWludDMyX3Qg aGNyID0gcmVhZGxfZ2ljaChHSUNIX0hDUik7Cj4gLQo+IC3CoMKgwqDCoGlmICggc3RhdHVzICkK PiAtwqDCoMKgwqDCoMKgwqDCoGhjciB8PSBmbGFnOwo+IC3CoMKgwqDCoGVsc2UKPiAtwqDCoMKg wqDCoMKgwqDCoGhjciAmPSAofmZsYWcpOwo+IC0KPiAtwqDCoMKgwqB3cml0ZWxfZ2ljaChoY3Is IEdJQ0hfSENSKTsKPiAtfQo+IC0KPiAtc3RhdGljIHVuc2lnbmVkIGludCBoaXAwNGdpY19yZWFk X3ZtY3JfcHJpb3JpdHkodm9pZCkKPiAtewo+IC3CoMKgwqByZXR1cm4gKChyZWFkbF9naWNoKEdJ Q0hfVk1DUikgPj4gR0lDSF9WMl9WTUNSX1BSSU9SSVRZX1NISUZUKQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgJiBHSUNIX1YyX1ZNQ1JfUFJJT1JJVFlfTUFTSyk7Cj4gLX0KPiAtCj4gLXN0YXRp YyB1bnNpZ25lZCBpbnQgaGlwMDRnaWNfcmVhZF9hcHIoaW50IGFwcl9yZWcpCj4gLXsKPiAtwqDC oMKgcmV0dXJuIHJlYWRsX2dpY2goSElQMDRfR0lDSF9BUFIpOwo+IC19Cj4gLQo+IC1zdGF0aWMg dm9pZCBoaXAwNGdpY19pcnFfZW5hYmxlKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKPiAtewo+IC3C oMKgwqDCoHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gLcKgwqDCoMKgaW50IGlycSA9IGRlc2MtPmly cTsKPiAtCj4gLcKgwqDCoMKgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZkZXNjLT5sb2NrKSk7Cj4g LQo+IC3CoMKgwqDCoHNwaW5fbG9ja19pcnFzYXZlKCZnaWN2Mi5sb2NrLCBmbGFncyk7Cj4gLcKg wqDCoMKgY2xlYXJfYml0KF9JUlFfRElTQUJMRUQsICZkZXNjLT5zdGF0dXMpOwo+IC3CoMKgwqDC oGRzYihzeSk7Cj4gLcKgwqDCoMKgLyogRW5hYmxlIHJvdXRpbmcgKi8KPiAtwqDCoMKgwqB3cml0 ZWxfZ2ljZCgoMXUgPDwgKGlycSAlIDMyKSksIEdJQ0RfSVNFTkFCTEVSICsgKGlycSAvIDMyKSAq IDQpOwo+IC3CoMKgwqDCoHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdpY3YyLmxvY2ssIGZsYWdz KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaGlwMDRnaWNfaXJxX2Rpc2FibGUoc3RydWN0IGly cV9kZXNjICpkZXNjKQo+IC17Cj4gLcKgwqDCoMKgdW5zaWduZWQgbG9uZyBmbGFnczsKPiAtwqDC oMKgwqBpbnQgaXJxID0gZGVzYy0+aXJxOwo+IC0KPiAtwqDCoMKgwqBBU1NFUlQoc3Bpbl9pc19s b2NrZWQoJmRlc2MtPmxvY2spKTsKPiAtCj4gLcKgwqDCoMKgc3Bpbl9sb2NrX2lycXNhdmUoJmdp Y3YyLmxvY2ssIGZsYWdzKTsKPiAtwqDCoMKgwqAvKiBEaXNhYmxlIHJvdXRpbmcgKi8KPiAtwqDC oMKgwqB3cml0ZWxfZ2ljZCgxdSA8PCAoaXJxICUgMzIpLCBHSUNEX0lDRU5BQkxFUiArIChpcnEg LyAzMikgKiA0KTsKPiAtwqDCoMKgwqBzZXRfYml0KF9JUlFfRElTQUJMRUQsICZkZXNjLT5zdGF0 dXMpOwo+IC3CoMKgwqDCoHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdpY3YyLmxvY2ssIGZsYWdz KTsKPiAtfQo+IC0KPiAtc3RhdGljIHVuc2lnbmVkIGludCBoaXAwNGdpY19pcnFfc3RhcnR1cChz dHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCj4gLXsKPiAtwqDCoMKgwqBoaXAwNGdpY19pcnFfZW5hYmxl KGRlc2MpOwo+IC0KPiAtwqDCoMKgwqByZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQg aGlwMDRnaWNfaXJxX3NodXRkb3duKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKPiAtewo+IC3CoMKg wqDCoGhpcDA0Z2ljX2lycV9kaXNhYmxlKGRlc2MpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBo aXAwNGdpY19pcnFfYWNrKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKPiAtewo+IC3CoMKgwqDCoC8q IE5vIEFDSyAtLSByZWFkaW5nIElBUiBoYXMgZG9uZSB0aGlzIGZvciB1cyAqLwo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCBoaXAwNGdpY19ob3N0X2lycV9lbmQoc3RydWN0IGlycV9kZXNjICpkZXNj KQo+IC17Cj4gLcKgwqDCoMKgLyogTG93ZXIgdGhlIHByaW9yaXR5ICovCj4gLcKgwqDCoMKgaGlw MDRnaWNfZW9pX2lycShkZXNjKTsKPiAtwqDCoMKgwqAvKiBEZWFjdGl2YXRlICovCj4gLcKgwqDC oMKgaGlwMDRnaWNfZGlyX2lycShkZXNjKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaGlwMDRn aWNfZ3Vlc3RfaXJxX2VuZChzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCj4gLXsKPiAtwqDCoMKgwqAv KiBMb3dlciB0aGUgcHJpb3JpdHkgb2YgdGhlIElSUSAqLwo+IC3CoMKgwqDCoGhpcDA0Z2ljX2Vv aV9pcnEoZGVzYyk7Cj4gLcKgwqDCoMKgLyogRGVhY3RpdmF0aW9uIGhhcHBlbnMgaW4gbWFpbnRl bmFuY2UgaW50ZXJydXB0IC8gdmlhIEdJQ1YgKi8KPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaGlw MDRnaWNfaXJxX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGNvbnN0Cj4gY3B1 bWFza190ICpjcHVfbWFzaykKPiAtewo+IC3CoMKgwqDCoHVuc2lnbmVkIGludCBtYXNrOwo+IC0K PiAtwqDCoMKgwqBBU1NFUlQoIWNwdW1hc2tfZW1wdHkoY3B1X21hc2spKTsKPiAtCj4gLcKgwqDC oMKgc3Bpbl9sb2NrKCZnaWN2Mi5sb2NrKTsKPiAtCj4gLcKgwqDCoMKgbWFzayA9IGhpcDA0Z2lj X2NwdV9tYXNrKGNwdV9tYXNrKTsKPiAtCj4gLcKgwqDCoMKgLyogU2V0IHRhcmdldCBDUFUgbWFz ayAoUkFaL1dJIG9uIHVuaXByb2Nlc3NvcikgKi8KPiAtwqDCoMKgwqB3cml0ZXdfZ2ljZChtYXNr LCBHSUNEX0lUQVJHRVRTUiArIGRlc2MtPmlycSAqIDIpOwo+IC0KPiAtwqDCoMKgwqBzcGluX3Vu bG9jaygmZ2ljdjIubG9jayk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgaGlwMDRnaWNfbWFrZV9o d2RvbV9kdF9ub2RlKGNvbnN0IHN0cnVjdCBkb21haW4gKmQsCj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGNvbnN0IHN0cnVjdCBkdF9kZXZpY2Vfbm9kZSAqZ2ljLAo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB2b2lkICpmZHQpCj4gLXsKPiAtwqDCoMKgwqBjb25zdCB2b2lkICpjb21wYXRpYmxlOwo+ IC3CoMKgwqDCoHUzMiBsZW47Cj4gLcKgwqDCoMKgY29uc3QgX19iZTMyICpyZWdzOwo+IC3CoMKg wqDCoGludCByZXMgPSAwOwo+IC0KPiAtwqDCoMKgwqAvKgo+IC3CoMKgwqDCoMKgKiBSZXBsYWNl IGNvbXBhdGliaWxpdHkgc3RyaW5nIHdpdGggYSBzdGFuZGFyZCBvbmUuCj4gLcKgwqDCoMKgwqAq IGRvbTAgd2lsbCBzZWUgYSBjb21wYXRpYmxlIEdJQy4gVGhpcyBhcyBHSUNDIGlzIGNvbXBhdGli bGUKPiAtwqDCoMKgwqDCoCogd2l0aCBzdGFuZGFyZCBvbmUgYW5kIEdJQ0QgKGVtdWxhdGVkIGJ5 IFhlbikgaXMgY29tcGF0aWJsZQo+IC3CoMKgwqDCoMKgKiB0byBzdGFuZGFyZC4gT3RoZXJ3aXNl IHdlIHNob3VsZCBpbXBsZW1lbnQgSElQMDQgR0lDRCBpbgo+IC3CoMKgwqDCoMKgKiB0aGUgdmly dHVhbCBHSUMuCj4gLcKgwqDCoMKgwqAqIFRoaXMgYWN0dWFsbHkgbGltaXQgQ1BVIG51bWJlciB0 byA4IGZvciBkb20wLgo+IC3CoMKgwqDCoMKgKi8KPiAtwqDCoMKgwqBjb21wYXRpYmxlID0gRFRf Q09NUEFUX0dJQ19DT1JURVhfQTE1Owo+IC3CoMKgwqDCoGxlbiA9IHN0cmxlbigoY2hhciopIGNv bXBhdGlibGUpICsgMTsKPiAtCj4gLcKgwqDCoMKgcmVzID0gZmR0X3Byb3BlcnR5KGZkdCwgImNv bXBhdGlibGUiLCBjb21wYXRpYmxlLCBsZW4pOwo+IC3CoMKgwqDCoGlmICggcmVzICkKPiAtwqDC oMKgwqDCoMKgwqDCoHJldHVybiByZXM7Cj4gLQo+IC3CoMKgwqDCoC8qCj4gLcKgwqDCoMKgwqAq IERUQiBwcm92aWRlcyB1cCB0byA0IHJlZ2lvbnMgdG8gaGFuZGxlIHZpcnR1YWxpemF0aW9uCj4g LcKgwqDCoMKgwqAqIChpbiBvcmRlciBHSUNELCBHSUNDLCBHSUNIIGFuZCBHSUNWIGludGVyZmFj ZXMpCj4gLcKgwqDCoMKgwqAqIGhvd2V2ZXIgZG9tMCBqdXN0IG5lZWRzIEdJQ0QgYW5kIEdJQ0Mg cHJvdmlkZWQgYnkgWGVuLgo+IC3CoMKgwqDCoMKgKi8KPiAtwqDCoMKgwqByZWdzID0gZHRfZ2V0 X3Byb3BlcnR5KGdpYywgInJlZyIsICZsZW4pOwo+IC3CoMKgwqDCoGlmICggIXJlZ3MgKQo+IC3C oMKgwqDCoHsKPiAtwqDCoMKgwqDCoMKgwqDCoGRwcmludGsoWEVOTE9HX0VSUiwgIkNhbid0IGZp bmQgcmVnIHByb3BlcnR5IGZvciB0aGUgZ2ljCj4gbm9kZVxuIik7Cj4gLcKgwqDCoMKgwqDCoMKg wqByZXR1cm4gLUZEVF9FUlJfWEVOKEVOT0VOVCk7Cj4gLcKgwqDCoMKgfQo+IC0KPiAtwqDCoMKg wqBsZW4gPSBkdF9jZWxsc190b19zaXplKGR0X25fYWRkcl9jZWxscyhnaWMpICsgZHRfbl9zaXpl X2NlbGxzKGdpYykpOwo+IC3CoMKgwqDCoGxlbiAqPSAyOwo+IC0KPiAtwqDCoMKgwqByZXMgPSBm ZHRfcHJvcGVydHkoZmR0LCAicmVnIiwgcmVncywgbGVuKTsKPiAtCj4gLcKgwqDCoMKgcmV0dXJu IHJlczsKPiAtfQo+IC0KPiAtLyogWFhYIGRpZmZlcmVudCBmb3IgbGV2ZWwgdnMgZWRnZSAqLwo+ IC1zdGF0aWMgaHdfaXJxX2NvbnRyb2xsZXIgaGlwMDRnaWNfaG9zdF9pcnFfdHlwZSA9IHsKPiAt wqDCoMKgwqAudHlwZW5hbWXCoMKgwqDCoMKgPSAiZ2ljLWhpcDA0IiwKPiAtwqDCoMKgwqAuc3Rh cnR1cMKgwqDCoMKgwqDCoD0gaGlwMDRnaWNfaXJxX3N0YXJ0dXAsCj4gLcKgwqDCoMKgLnNodXRk b3duwqDCoMKgwqDCoD0gaGlwMDRnaWNfaXJxX3NodXRkb3duLAo+IC3CoMKgwqDCoC5lbmFibGXC oMKgwqDCoMKgwqDCoD0gaGlwMDRnaWNfaXJxX2VuYWJsZSwKPiAtwqDCoMKgwqAuZGlzYWJsZcKg wqDCoMKgwqDCoD0gaGlwMDRnaWNfaXJxX2Rpc2FibGUsCj4gLcKgwqDCoMKgLmFja8KgwqDCoMKg wqDCoMKgwqDCoMKgPSBoaXAwNGdpY19pcnFfYWNrLAo+IC3CoMKgwqDCoC5lbmTCoMKgwqDCoMKg wqDCoMKgwqDCoD0gaGlwMDRnaWNfaG9zdF9pcnFfZW5kLAo+IC3CoMKgwqDCoC5zZXRfYWZmaW5p dHkgPSBoaXAwNGdpY19pcnFfc2V0X2FmZmluaXR5LAo+IC19Owo+IC0KPiAtc3RhdGljIGh3X2ly cV9jb250cm9sbGVyIGhpcDA0Z2ljX2d1ZXN0X2lycV90eXBlID0gewo+IC3CoMKgwqDCoC50eXBl bmFtZcKgwqDCoMKgwqA9ICJnaWMtaGlwMDQiLAo+IC3CoMKgwqDCoC5zdGFydHVwwqDCoMKgwqDC oMKgPSBoaXAwNGdpY19pcnFfc3RhcnR1cCwKPiAtwqDCoMKgwqAuc2h1dGRvd27CoMKgwqDCoMKg PSBoaXAwNGdpY19pcnFfc2h1dGRvd24sCj4gLcKgwqDCoMKgLmVuYWJsZcKgwqDCoMKgwqDCoMKg PSBoaXAwNGdpY19pcnFfZW5hYmxlLAo+IC3CoMKgwqDCoC5kaXNhYmxlwqDCoMKgwqDCoMKgPSBo aXAwNGdpY19pcnFfZGlzYWJsZSwKPiAtwqDCoMKgwqAuYWNrwqDCoMKgwqDCoMKgwqDCoMKgwqA9 IGhpcDA0Z2ljX2lycV9hY2ssCj4gLcKgwqDCoMKgLmVuZMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBo aXAwNGdpY19ndWVzdF9pcnFfZW5kLAo+IC3CoMKgwqDCoC5zZXRfYWZmaW5pdHkgPSBoaXAwNGdp Y19pcnFfc2V0X2FmZmluaXR5LAo+IC19Owo+IC0KPiAtc3RhdGljIGludCBfX2luaXQgaGlwMDRn aWNfaW5pdCh2b2lkKQo+IC17Cj4gLcKgwqDCoMKgaW50IHJlczsKPiAtwqDCoMKgwqBwYWRkcl90 IGhiYXNlLCBkYmFzZSwgY2Jhc2UsIGNzaXplLCB2YmFzZTsKPiAtwqDCoMKgwqBjb25zdCBzdHJ1 Y3QgZHRfZGV2aWNlX25vZGUgKm5vZGUgPSBnaWN2Ml9pbmZvLm5vZGU7Cj4gLQo+IC3CoMKgwqDC oHJlcyA9IGR0X2RldmljZV9nZXRfYWRkcmVzcyhub2RlLCAwLCAmZGJhc2UsIE5VTEwpOwo+IC3C oMKgwqDCoGlmICggcmVzICkKPiAtwqDCoMKgwqDCoMKgwqDCoHBhbmljKCJHSUMtSElQMDQ6IENh bm5vdCBmaW5kIGEgdmFsaWQgYWRkcmVzcyBmb3IgdGhlCj4gZGlzdHJpYnV0b3IiKTsKPiAtCj4g LcKgwqDCoMKgcmVzID0gZHRfZGV2aWNlX2dldF9hZGRyZXNzKG5vZGUsIDEsICZjYmFzZSwgJmNz aXplKTsKPiAtwqDCoMKgwqBpZiAoIHJlcyApCj4gLcKgwqDCoMKgwqDCoMKgwqBwYW5pYygiR0lD LUhJUDA0OiBDYW5ub3QgZmluZCBhIHZhbGlkIGFkZHJlc3MgZm9yIHRoZSBDUFUiKTsKPiAtCj4g LcKgwqDCoMKgcmVzID0gZHRfZGV2aWNlX2dldF9hZGRyZXNzKG5vZGUsIDIsICZoYmFzZSwgTlVM TCk7Cj4gLcKgwqDCoMKgaWYgKCByZXMgKQo+IC3CoMKgwqDCoMKgwqDCoMKgcGFuaWMoIkdJQy1I SVAwNDogQ2Fubm90IGZpbmQgYSB2YWxpZCBhZGRyZXNzIGZvciB0aGUKPiBoeXBlcnZpc29yIik7 Cj4gLQo+IC3CoMKgwqDCoHJlcyA9IGR0X2RldmljZV9nZXRfYWRkcmVzcyhub2RlLCAzLCAmdmJh c2UsIE5VTEwpOwo+IC3CoMKgwqDCoGlmICggcmVzICkKPiAtwqDCoMKgwqDCoMKgwqDCoHBhbmlj KCJHSUMtSElQMDQ6IENhbm5vdCBmaW5kIGEgdmFsaWQgYWRkcmVzcyBmb3IgdGhlIHZpcnR1YWwK PiBDUFUiKTsKPiAtCj4gLcKgwqDCoMKgcmVzID0gcGxhdGZvcm1fZ2V0X2lycShub2RlLCAwKTsK PiAtwqDCoMKgwqBpZiAoIHJlcyA8IDAgKQo+IC3CoMKgwqDCoMKgwqDCoMKgcGFuaWMoIkdJQy1I SVAwNDogQ2Fubm90IGZpbmQgdGhlIG1haW50ZW5hbmNlIElSUSIpOwo+IC3CoMKgwqDCoGdpY3Yy X2luZm8ubWFpbnRlbmFuY2VfaXJxID0gcmVzOwo+IC0KPiAtwqDCoMKgwqAvKiBUT0RPOiBBZGQg Y2hlY2sgb24gZGlzdHJpYnV0b3IsIGNwdSBzaXplICovCj4gLQo+IC3CoMKgwqDCoHByaW50aygi R0lDLUhJUDA0IGluaXRpYWxpemF0aW9uOlxuIgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIsKgwqDCoMKgwqDCoMKgwqBnaWNfZGlzdF9hZGRyPSUiUFJJcGFkZHIiXG4iCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiwqDCoMKgwqDCoMKgwqDCoGdpY19jcHVfYWRkcj0lIlBS SXBhZGRyIlxuIgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIsKgwqDCoMKgwqDCoMKg wqBnaWNfaHlwX2FkZHI9JSJQUklwYWRkciJcbiIKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCLCoMKgwqDCoMKgwqDCoMKgZ2ljX3ZjcHVfYWRkcj0lIlBSSXBhZGRyIlxuIgo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIsKgwqDCoMKgwqDCoMKgwqBnaWNfbWFpbnRlbmFuY2Vf aXJxPSV1XG4iLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGJhc2UsIGNiYXNlLCBo YmFzZSwgdmJhc2UsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnaWN2Ml9pbmZvLm1h aW50ZW5hbmNlX2lycSk7Cj4gLQo+IC3CoMKgwqDCoGlmICggKGRiYXNlICYgflBBR0VfTUFTSykg fHwgKGNiYXNlICYgflBBR0VfTUFTSykgfHwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgKGhiYXNlICYg flBBR0VfTUFTSykgfHwgKHZiYXNlICYgflBBR0VfTUFTSykgKQo+IC3CoMKgwqDCoMKgwqDCoMKg cGFuaWMoIkdJQy1ISVAwNCBpbnRlcmZhY2VzIG5vdCBwYWdlIGFsaWduZWQiKTsKPiAtCj4gLcKg wqDCoMKgZ2ljdjIubWFwX2RiYXNlID0gaW9yZW1hcF9ub2NhY2hlKGRiYXNlLCBQQUdFX1NJWkUp Owo+IC3CoMKgwqDCoGlmICggIWdpY3YyLm1hcF9kYmFzZSApCj4gLcKgwqDCoMKgwqDCoMKgwqBw YW5pYygiR0lDLUhJUDA0OiBGYWlsZWQgdG8gaW9yZW1hcCBmb3IgR0lDIGRpc3RyaWJ1dG9yXG4i KTsKPiAtCj4gLcKgwqDCoMKgZ2ljdjIubWFwX2NiYXNlWzBdID0gaW9yZW1hcF9ub2NhY2hlKGNi YXNlLCBQQUdFX1NJWkUpOwo+IC3CoMKgwqDCoGdpY3YyLm1hcF9jYmFzZVsxXSA9IGlvcmVtYXBf bm9jYWNoZShjYmFzZSArIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKPiAtCj4gLcKgwqDCoMKgaWYg KCAhZ2ljdjIubWFwX2NiYXNlWzBdIHx8ICFnaWN2Mi5tYXBfY2Jhc2VbMV0gKQo+IC3CoMKgwqDC oMKgwqDCoMKgcGFuaWMoIkdJQy1ISVAwNDogRmFpbGVkIHRvIGlvcmVtYXAgZm9yIEdJQyBDUFUg aW50ZXJmYWNlXG4iKTsKPiAtCj4gLcKgwqDCoMKgZ2ljdjIubWFwX2hiYXNlID0gaW9yZW1hcF9u b2NhY2hlKGhiYXNlLCBQQUdFX1NJWkUpOwo+IC3CoMKgwqDCoGlmICggIWdpY3YyLm1hcF9oYmFz ZSApCj4gLcKgwqDCoMKgwqDCoMKgwqBwYW5pYygiR0lDLUhJUDA0OiBGYWlsZWQgdG8gaW9yZW1h cCBmb3IgR0lDIFZpcnR1YWwKPiBpbnRlcmZhY2VcbiIpOwo+IC0KPiAtwqDCoMKgwqB2Z2ljX3Yy X3NldHVwX2h3KGRiYXNlLCBjYmFzZSwgY3NpemUsIHZiYXNlLCAwKTsKPiAtCj4gLcKgwqDCoMKg LyogR2xvYmFsIHNldHRpbmdzOiBpbnRlcnJ1cHQgZGlzdHJpYnV0b3IgKi8KPiAtwqDCoMKgwqBz cGluX2xvY2tfaW5pdCgmZ2ljdjIubG9jayk7Cj4gLcKgwqDCoMKgc3Bpbl9sb2NrKCZnaWN2Mi5s b2NrKTsKPiAtCj4gLcKgwqDCoMKgaGlwMDRnaWNfZGlzdF9pbml0KCk7Cj4gLcKgwqDCoMKgaGlw MDRnaWNfY3B1X2luaXQoKTsKPiAtwqDCoMKgwqBoaXAwNGdpY19oeXBfaW5pdCgpOwo+IC0KPiAt wqDCoMKgwqBzcGluX3VubG9jaygmZ2ljdjIubG9jayk7Cj4gLQo+IC3CoMKgwqDCoHJldHVybiAw Owo+IC19Cj4gLQo+IC1jb25zdCBzdGF0aWMgc3RydWN0IGdpY19od19vcGVyYXRpb25zIGhpcDA0 Z2ljX29wcyA9IHsKPiAtwqDCoMKgwqAuaW5mb8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgPSAmZ2ljdjJfaW5mbywKPiAtwqDCoMKgwqAuaW5pdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgPSBoaXAwNGdpY19pbml0LAo+IC3CoMKgwqDCoC5zZWNvbmRhcnlfaW5pdMKgwqDC oMKgwqDCoD0gaGlwMDRnaWNfc2Vjb25kYXJ5X2NwdV9pbml0LAo+IC3CoMKgwqDCoC5zYXZlX3N0 YXRlwqDCoMKgwqDCoMKgwqDCoMKgwqA9IGhpcDA0Z2ljX3NhdmVfc3RhdGUsCj4gLcKgwqDCoMKg LnJlc3RvcmVfc3RhdGXCoMKgwqDCoMKgwqDCoD0gaGlwMDRnaWNfcmVzdG9yZV9zdGF0ZSwKPiAt wqDCoMKgwqAuZHVtcF9zdGF0ZcKgwqDCoMKgwqDCoMKgwqDCoMKgPSBoaXAwNGdpY19kdW1wX3N0 YXRlLAo+IC3CoMKgwqDCoC5naWNfaG9zdF9pcnFfdHlwZcKgwqDCoD0gJmhpcDA0Z2ljX2hvc3Rf aXJxX3R5cGUsCj4gLcKgwqDCoMKgLmdpY19ndWVzdF9pcnFfdHlwZcKgwqA9ICZoaXAwNGdpY19n dWVzdF9pcnFfdHlwZSwKPiAtwqDCoMKgwqAuZW9pX2lyccKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgPSBoaXAwNGdpY19lb2lfaXJxLAo+IC3CoMKgwqDCoC5kZWFjdGl2YXRlX2lyccKgwqDCoMKg wqDCoD0gaGlwMDRnaWNfZGlyX2lycSwKPiAtwqDCoMKgwqAucmVhZF9pcnHCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqA9IGhpcDA0Z2ljX3JlYWRfaXJxLAo+IC3CoMKgwqDCoC5zZXRfaXJxX3Byb3Bl cnRpZXPCoMKgPSBoaXAwNGdpY19zZXRfaXJxX3Byb3BlcnRpZXMsCj4gLcKgwqDCoMKgLnNlbmRf U0dJwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBoaXAwNGdpY19zZW5kX1NHSSwKPiAtwqDCoMKg wqAuZGlzYWJsZV9pbnRlcmZhY2XCoMKgwqA9IGhpcDA0Z2ljX2Rpc2FibGVfaW50ZXJmYWNlLAo+ IC3CoMKgwqDCoC51cGRhdGVfbHLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBoaXAwNGdpY191cGRh dGVfbHIsCj4gLcKgwqDCoMKgLnVwZGF0ZV9oY3Jfc3RhdHVzwqDCoMKgPSBoaXAwNGdpY19oY3Jf c3RhdHVzLAo+IC3CoMKgwqDCoC5jbGVhcl9scsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gaGlw MDRnaWNfY2xlYXJfbHIsCj4gLcKgwqDCoMKgLnJlYWRfbHLCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoD0gaGlwMDRnaWNfcmVhZF9sciwKPiAtwqDCoMKgwqAud3JpdGVfbHLCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqA9IGhpcDA0Z2ljX3dyaXRlX2xyLAo+IC3CoMKgwqDCoC5yZWFkX3ZtY3JfcHJp b3JpdHnCoMKgPSBoaXAwNGdpY19yZWFkX3ZtY3JfcHJpb3JpdHksCj4gLcKgwqDCoMKgLnJlYWRf YXBywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBoaXAwNGdpY19yZWFkX2FwciwKPiAtwqDCoMKg wqAubWFrZV9od2RvbV9kdF9ub2RlwqDCoD0gaGlwMDRnaWNfbWFrZV9od2RvbV9kdF9ub2RlLAo+ IC19Owo+IC0KPiAtLyogU2V0IHVwIHRoZSBHSUMgKi8KPiAtc3RhdGljIGludCBfX2luaXQgaGlw MDRnaWNfcHJlaW5pdChzdHJ1Y3QgZHRfZGV2aWNlX25vZGUgKm5vZGUsCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjb25zdCB2b2lkICpkYXRhKQo+IC17Cj4gLcKgwqDCoMKgZ2ljdjJfaW5mby5od192ZXJzaW9u ID0gR0lDX1YyOwo+IC3CoMKgwqDCoGdpY3YyX2luZm8ubm9kZSA9IG5vZGU7Cj4gLcKgwqDCoMKg cmVnaXN0ZXJfZ2ljX29wcygmaGlwMDRnaWNfb3BzKTsKPiAtwqDCoMKgwqBkdF9pcnFfeGxhdGUg PSBnaWNfaXJxX3hsYXRlOwo+IC0KPiAtwqDCoMKgwqByZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3Rh dGljIGNvbnN0IHN0cnVjdCBkdF9kZXZpY2VfbWF0Y2ggaGlwMDRnaWNfZHRfbWF0Y2hbXSBfX2lu aXRjb25zdCA9Cj4gLXsKPiAtwqDCoMKgwqBEVF9NQVRDSF9DT01QQVRJQkxFKCJoaXNpbGljb24s aGlwMDQtaW50YyIpLAo+IC3CoMKgwqDCoHsgLyogc2VudGluZWwgKi8gfSwKPiAtfTsKPiAtCj4g LURUX0RFVklDRV9TVEFSVChoaXAwNGdpYywgIkdJQy1ISVAwNCIsIERFVklDRV9HSUMpCj4gLcKg wqDCoMKgwqDCoMKgwqAuZHRfbWF0Y2ggPSBoaXAwNGdpY19kdF9tYXRjaCwKPiAtwqDCoMKgwqDC oMKgwqDCoC5pbml0ID0gaGlwMDRnaWNfcHJlaW5pdCwKPiAtRFRfREVWSUNFX0VORAo+IC0KPiAt LyoKPiAtICogTG9jYWwgdmFyaWFibGVzOgo+IC0gKiBtb2RlOiBDCj4gLSAqIGMtZmlsZS1zdHls ZTogIkJTRCIKPiAtICogYy1iYXNpYy1vZmZzZXQ6IDQKPiAtICogaW5kZW50LXRhYnMtbW9kZTog bmlsCj4gLSAqIEVuZDoKPiAtICovCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KPiBYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Cj4gWGVuLWRldmVsQGxp c3RzLnhlbi5vcmcKPiBodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK