From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v4 7/9] arm/mem_access: Add long-descriptor based gpt Date: Thu, 22 Jun 2017 13:12:31 +0100 Message-ID: References: <20170620203332.17833-1-proskurin@sec.in.tum.de> <20170620203332.17833-8-proskurin@sec.in.tum.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dO0yS-0007ir-6g for xen-devel@lists.xenproject.org; Thu, 22 Jun 2017 12:12:36 +0000 In-Reply-To: <20170620203332.17833-8-proskurin@sec.in.tum.de> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Sergej Proskurin , xen-devel@lists.xenproject.org Cc: Stefano Stabellini List-Id: xen-devel@lists.xenproject.org SGkgU2VyZ2VqLAoKT24gMjAvMDYvMTcgMjE6MzMsIFNlcmdlaiBQcm9za3VyaW4gd3JvdGU6Cj4g VGhpcyBjb21taXQgYWRkcyBmdW5jdGlvbmFsaXR5IHRvIHdhbGsgdGhlIGd1ZXN0J3MgcGFnZSB0 YWJsZXMgdXNpbmcgdGhlCj4gbG9uZy1kZXNjcmlwdG9yIHRyYW5zbGF0aW9uIHRhYmxlIGZvcm1h dCBmb3IgYm90aCBBUk12NyBhbmQgQVJNdjguCj4gU2ltaWxhciB0byB0aGUgaGFyZHdhcmUgYXJj aGl0ZWN0dXJlLCB0aGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMKPiBkaWZmZXJlbnQgcGFnZSBn cmFudWxhcml0aWVzICg0SywgMTZLLCBhbmQgNjRLKS4gVGhlIGltcGxlbWVudGF0aW9uIGlzCj4g YmFzZWQgb24gQVJNIERESSAwNDg3Qi5hIEoxLTU5MjIsIEoxLTU5OTksIGFuZCBBUk0gRERJIDA0 MDZDLmIgQjMtMTUxMC4KPgo+IE5vdGUgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBs YWNrcyBzdXBwb3J0IGZvciBMYXJnZSBWQS9QQSBvbgo+IEFSTXY4LjIgYXJjaGl0ZWN0dXJlcyAo TFZBL0xQQSwgNTItYml0IHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3MKPiBzaXplcykuIFRo ZSBhc3NvY2lhdGVkIGxvY2F0aW9uIGluIHRoZSBjb2RlIGlzIG1hcmtlZCBhcHByb3ByaWF0ZWx5 Lgo+Cj4gU2lnbmVkLW9mZi1ieTogU2VyZ2VqIFByb3NrdXJpbiA8cHJvc2t1cmluQHNlYy5pbi50 dW0uZGU+Cj4gLS0tCj4gQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVs Lm9yZz4KPiBDYzogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KPiAtLS0KPiB2 MjogVXNlIFRDUl9TWl9NQVNLIGluc3RlYWQgb2YgVFRCQ1JfU1pfTUFTSyBmb3IgQVJNIDMyLWJp dCBndWVzdHMgdXNpbmcKPiAgICAgdGhlIGxvbmctZGVzY3JpcHRvciB0cmFuc2xhdGlvbiB0YWJs ZSBmb3JtYXQuCj4KPiAgICAgQ29zbWV0aWMgZml4ZXMuCj4KPiB2MzogTW92ZSB0aGUgaW1wbGVt ZW50YXRpb24gdG8gLi94ZW4vYXJjaC9hcm0vZ3Vlc3RfY29weS5jLgo+Cj4gICAgIFJlbW92ZSB0 aGUgYXJyYXkgc3RyaWRlcyBhbmQgZGVjbGFyZSB0aGUgYXJyYXkgZ3JhaW5zaXplcyBhcyBzdGF0 aWMKPiAgICAgY29uc3QgaW5zdGVhZCBvZiBqdXN0IGNvbnN0IHRvIHJlZHVjZSB0aGUgZnVuY3Rp b24gc3RhY2sgb3ZlcmhlYWQuCj4KPiAgICAgTW92ZSBwYXJ0cyBvZiB0aGUgZnVudGlvbiBndWVz dF93YWxrX2xkIGludG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMKPiAgICAgZ2V0X3R0YnJfYW5kX2dy YW5fNjRiaXQgYW5kIGdldF90b3BfYml0IHRvIHJlZHVjZSBjb21wbGV4aXR5Lgo+Cj4gICAgIFVz ZSB0aGUgbWFjcm8gQklUKHgpIGluc3RlYWQgb2YgKDFVTCA8PCB4KS4KPgo+ICAgICBBZGQgbW9y ZSBjb21tZW50cyAmJiBDb3NtZXRpYyBmaXhlcy4KPgo+IHY0OiBNb3ZlIGZ1bmN0aW9uYWxpdHkg cmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBjb25maWd1cmVkIElQQQo+ICAgICBvdXRw dXQtc2l6ZSBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gZ2V0X2lwYV9vdXRwdXRfc2l6ZS4gSW4g dGhpcwo+ICAgICBmdW5jdGlvbiwgd2UgcmVtb3ZlIHRoZSBwcmV2aW91c2x5IHVzZWQgc3dpdGNo IHN0YXRlbWVudCwgd2hpY2ggd2FzCj4gICAgIHJlc3BvbnNpYmxlIGZvciBkaXN0aW5ndWlzaGlu ZyBiZXR3ZWVuIGRpZmZlcmVudCBJUEEgb3V0cHV0LXNpemVzLgo+ICAgICBJbnN0ZWFkLCB3ZSBy ZXRyaWV2ZSB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW50cm9kdWNlZCBpcGFfc2l6ZXMKPiAg ICAgYXJyYXkuCj4KPiAgICAgUmVtb3ZlIHRoZSBkZWZpbmVzIEdSQU5VTEVfU0laRV9JTkRFWF8q IGFuZCBUVEJSMF9WQUxJRCBmcm9tCj4gICAgIGd1ZXN0X3dhbGsuaC4gSW5zdGVhZCwgaW50cm9k dWNlIHRoZSBlbnVtcyBncmFudWxlX3NpemVfaW5kZXgKPiAgICAgYWN0aXZlX3R0YnIgZGlyZWN0 bHkgaW5zaWRlIG9mIGd1ZXN0X3dhbGsuYyBzbyB0aGF0IHRoZSBhc3NvY2lhdGVkCj4gICAgIGZp ZWxkcyBkb24ndCBnZXQgZXhwb3J0ZWQuCj4KPiAgICAgQWRhcHQgdGhlIGZ1bmN0aW9uIHRvIHRo ZSBuZXcgcGFyYW1ldGVyIG9mIHR5cGUgInN0cnVjdCB2Y3B1ICoiLgo+Cj4gICAgIFJlbW92ZSBz dXBwb3J0IGZvciA1MmJpdCBJUEEgb3V0cHV0LXNpemVzIGVudGlyZWx5IGZyb20gdGhpcyBjb21t aXQuCj4KPiAgICAgVXNlIGxwYWVfKiBoZWxwZXJzIGluc3RlYWQgb2YgcDJtXyogaGVscGVycy4K Pgo+ICAgICBDb3NtZXRpYyBmaXhlcyAmIEFkZGl0aW9uYWwgY29tbWVudHMuCj4gLS0tCj4gIHhl bi9hcmNoL2FybS9ndWVzdF93YWxrLmMgfCAzODUgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLQo+ICAxIGZpbGUgY2hhbmdlZCwgMzgzIGluc2VydGlvbnMoKyks IDIgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2d1ZXN0X3dhbGsu YyBiL3hlbi9hcmNoL2FybS9ndWVzdF93YWxrLmMKPiBpbmRleCBiOGJiNTUzYTZlLi5jMzdjNTk1 MTU3IDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS9ndWVzdF93YWxrLmMKPiArKysgYi94ZW4v YXJjaC9hcm0vZ3Vlc3Rfd2Fsay5jCj4gQEAgLTE2LDYgKzE2LDggQEAKPiAgICovCj4KPiAgI2lu Y2x1ZGUgPHhlbi9zY2hlZC5oPgo+ICsjaW5jbHVkZSA8eGVuL2RvbWFpbl9wYWdlLmg+Cj4gKyNp bmNsdWRlIDxhc20vZ3Vlc3Rfd2Fsay5oPgoKUGxlYXNlIG9yZGVyIHRoZSBpbmNsdWRlIHRoZSBh bHBoYWJldGljIG9yZGVyLgoKPgo+ICAvKgo+ICAgKiBUaGUgZnVuY3Rpb24gZ3Vlc3Rfd2Fsa19z ZCB0cmFuc2xhdGVzIGEgZ2l2ZW4gR1ZBIGludG8gYW4gSVBBIHVzaW5nIHRoZQo+IEBAIC0zMyw2 ICszNSwxNDIgQEAgc3RhdGljIGludCBndWVzdF93YWxrX3NkKGNvbnN0IHN0cnVjdCB2Y3B1ICp2 LAo+ICB9Cj4KPiAgLyoKPiArICogR2V0IHRoZSBJUEEgb3V0cHV0X3NpemUgKGNvbmZpZ3VyZWQg aW4gVENSX0VMMSkgdGhhdCBzaGFsbCBiZSB1c2VkIGZvciB0aGUKPiArICogbG9uZy1kZXNjcmlw dG9yIGJhc2VkIHRyYW5zbGF0aW9uIHRhYmxlIHdhbGsuCj4gKyAqLwo+ICtzdGF0aWMgdW5zaWdu ZWQgaW50IGdldF9pcGFfb3V0cHV0X3NpemUoc3RydWN0IGRvbWFpbiAqZCwgcmVnaXN0ZXJfdCB0 Y3IpCj4gK3sKPiArICAgIHVuc2lnbmVkIGludCBvdXRwdXRfc2l6ZTsKPiArICAgIHVpbnQ2NF90 IGlwczsKPiArCj4gKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaXBhX3NpemVzWzddID0gewo+ ICsgICAgICAgIFRDUl9FTDFfSVBTXzMyX0JJVF9WQUwsCj4gKyAgICAgICAgVENSX0VMMV9JUFNf MzZfQklUX1ZBTCwKPiArICAgICAgICBUQ1JfRUwxX0lQU180MF9CSVRfVkFMLAo+ICsgICAgICAg IFRDUl9FTDFfSVBTXzQyX0JJVF9WQUwsCj4gKyAgICAgICAgVENSX0VMMV9JUFNfNDRfQklUX1ZB TCwKPiArICAgICAgICBUQ1JfRUwxX0lQU180OF9CSVRfVkFMLAo+ICsgICAgICAgIFRDUl9FTDFf SVBTXzUyX0JJVF9WQUwKPiArICAgIH07Cj4gKwo+ICsgICAgaWYgKCBpc182NGJpdF9kb21haW4o ZCkgKQo+ICsgICAgewo+ICsgICAgICAgIC8qIEdldCB0aGUgaW50ZXJtZWRpYXRlIHBoeXNpY2Fs IGFkZHJlc3Mgc2l6ZS4gKi8KPiArICAgICAgICBpcHMgPSAodGNyICYgVENSX0VMMV9JUFNfTUFT SykgPj4gVENSX0VMMV9JUFNfU0hJRlQ7Cj4gKwo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICog UmV0dXJuIGFuIGVycm9yIG9uIHJlc2VydmVkIElQQSBvdXRwdXQtc2l6ZXMgYW5kIGlmIHRoZSBJ UEEKPiArICAgICAgICAgKiBvdXRwdXQtc2l6ZSBpcyA1MmJpdC4KPiArICAgICAgICAgKgo+ICsg ICAgICAgICAqIFhYWDogNTIgYml0IG91dHB1dF9zaXplIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Lgo+ ICsgICAgICAgICAqLwo+ICsgICAgICAgIGlmICggaXBzID4gVENSX0VMMV9JUFNfNDhfQklUICkK PiArICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ICsgICAgICAgIG91dHB1dF9zaXpl ID0gaXBhX3NpemVzW2lwc107Cj4gKyAgICB9Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgb3V0cHV0 X3NpemUgPSBUQ1JfRUwxX0lQU180MF9CSVRfVkFMOwo+ICsKPiArICAgIHJldHVybiBvdXRwdXRf c2l6ZTsKPiArfQo+ICsKPiArLyogTm9ybWFsaXplZCBwYWdlIGdyYW51bGUgc2l6ZSBpbmRpY2Vz LiAqLwo+ICtlbnVtIGdyYW51bGVfc2l6ZV9pbmRleCB7Cj4gKyAgICBHUkFOVUxFX1NJWkVfSU5E RVhfNEssCj4gKyAgICBHUkFOVUxFX1NJWkVfSU5ERVhfMTZLLAo+ICsgICAgR1JBTlVMRV9TSVpF X0lOREVYXzY0Swo+ICt9Owo+ICsKPiArLyogUmVwcmVzZW50IHdoZXRoZXIgVFRCUjAgb3IgVFRC UjEgaXMgYWN0aXZlLiAqLwo+ICtlbnVtIGFjdGl2ZV90dGJyIHsKPiArICAgIFRUQlIwX0FDVElW RSwKPiArICAgIFRUQlIxX0FDVElWRQo+ICt9Owo+ICsKPiArLyoKPiArICogU2VsZWN0IHRoZSBU VEJSKDB8MSlfRUwxIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uIHVz aW5nIHRoZQo+ICsgKiBsb25nLWRlc2NyaXB0b3IgdHJhbnNsYXRpb24gdGFibGUgZm9ybWF0IGFu ZCByZXR1cm4gdGhlIHBhZ2UgZ3JhbnVsYXJpdHkKPiArICogdGhhdCBpcyB1c2VkIGJ5IHRoZSBz ZWxlY3RlZCBUVEJSLgo+ICsgKi8KPiArc3RhdGljIGJvb2wgZ2V0X3R0YnJfYW5kX2dyYW5fNjRi aXQodWludDY0X3QgKnR0YnIsIHVuc2lnbmVkIGludCAqZ3JhbiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdCB0Y3IsIGVudW0gYWN0aXZlX3R0YnIgdHRi cngpCj4gK3sKPiArICAgIGJvb2wgZGlzYWJsZWQ7Cj4gKwo+ICsgICAgaWYgKCB0dGJyeCA9PSBU VEJSMF9BQ1RJVkUgKQo+ICsgICAgewo+ICsgICAgICAgIC8qIE5vcm1hbGl6ZSBncmFudWxlIHNp emUuICovCj4gKyAgICAgICAgc3dpdGNoICggdGNyICYgVENSX1RHMF9NQVNLICkKPiArICAgICAg ICB7Cj4gKyAgICAgICAgY2FzZSBUQ1JfVEcwXzE2SzoKPiArICAgICAgICAgICAgKmdyYW4gPSBH UkFOVUxFX1NJWkVfSU5ERVhfMTZLOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBj YXNlIFRDUl9URzBfNjRLOgo+ICsgICAgICAgICAgICAqZ3JhbiA9IEdSQU5VTEVfU0laRV9JTkRF WF82NEs7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGRlZmF1bHQ6CgpQbGVhc2Ug ZXhwbGFpbiB3aHkgeW91IHVzZSA0SyBieSBkZWZhdWx0LgoKPiArICAgICAgICAgICAgKmdyYW4g PSBHUkFOVUxFX1NJWkVfSU5ERVhfNEs7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvKiBV c2UgVFRCUjAgZm9yIEdWQSB0byBJUEEgdHJhbnNsYXRpb24uICovCj4gKyAgICAgICAgKnR0YnIg PSBSRUFEX1NZU1JFRzY0KFRUQlIwX0VMMSk7Cj4gKwo+ICsgICAgICAgIC8qIElmIFRDUi5FUEQw IGlzIHNldCwgdHJhbnNsYXRpb25zIHVzaW5nIFRUQlIwIGFyZSBkaXNhYmxlZC4gKi8KPiArICAg ICAgICBkaXNhYmxlZCA9IHRjciAmIFRDUl9FUEQwOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsg ICAgewo+ICsgICAgICAgIC8qIE5vcm1hbGl6ZSBncmFudWxlIHNpemUuICovCj4gKyAgICAgICAg c3dpdGNoICggdGNyICYgVENSX0VMMV9URzFfTUFTSyApCj4gKyAgICAgICAgewo+ICsgICAgICAg IGNhc2UgVENSX0VMMV9URzFfMTZLOgo+ICsgICAgICAgICAgICAqZ3JhbiA9IEdSQU5VTEVfU0la RV9JTkRFWF8xNks7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgVENSX0VM MV9URzFfNjRLOgo+ICsgICAgICAgICAgICAqZ3JhbiA9IEdSQU5VTEVfU0laRV9JTkRFWF82NEs7 Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAg ICpncmFuID0gR1JBTlVMRV9TSVpFX0lOREVYXzRLOwoKUGxlYXNlIGV4cGxhaW4gd2h5IHlvdSB1 c2UgNEsgYnkgZGVmYXVsdC4KCj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvKiBVc2UgVFRC UjEgZm9yIEdWQSB0byBJUEEgdHJhbnNsYXRpb24uICovCj4gKyAgICAgICAgKnR0YnIgPSBSRUFE X1NZU1JFRzY0KFRUQlIxX0VMMSk7Cj4gKwo+ICsgICAgICAgIC8qIElmIFRDUi5FUEQxIGlzIHNl dCwgdHJhbnNsYXRpb25zIHVzaW5nIFRUQlIxIGFyZSBkaXNhYmxlZC4gKi8KPiArICAgICAgICBk aXNhYmxlZCA9IHRjciAmIFRDUl9FUEQxOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiBkaXNh YmxlZDsKPiArfQo+ICsKPiArLyoKPiArICogR2V0IHRoZSBNU0IgbnVtYmVyIG9mIHRoZSBHVkEs IGFjY29yZGluZyB0byAiQWRkclRvcCIgcHNldWRvY29kZQo+ICsgKiBpbXBsZW1lbnRhdGlvbiBp biBBUk0gRERJIDA0ODdCLmEgSjEtNjA2Ni4KPiArICovCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQg Z2V0X3RvcF9iaXQoc3RydWN0IGRvbWFpbiAqZCwgdmFkZHJfdCBndmEsIHJlZ2lzdGVyX3QgdGNy KQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBpbnQgdG9wYml0Owo+ICsKPiArICAgIC8qCj4gKyAgICAg KiBJRiBFTDEgaXMgdXNpbmcgQUFyY2g2NCB0aGVuIGFkZHJlc3NlcyBmcm9tIEVMMCB1c2luZyBB QXJjaDMyIGFyZQo+ICsgICAgICogemVyby1leHRlbmRlZCB0byA2NCBiaXRzIChBUk0gRERJIDA0 ODdCLmEgSjEtNjA2NikuCj4gKyAgICAgKi8KPiArICAgIGlmICggaXNfMzJiaXRfZG9tYWluKGQp ICkKPiArICAgICAgICB0b3BiaXQgPSAzMTsKPiArICAgIGVsc2UgaWYgKCBpc182NGJpdF9kb21h aW4oZCkgKQo+ICsgICAgewo+ICsgICAgICAgIGlmICggKChndmEgJiBCSVQoNTUpKSAmJiAodGNy ICYgVENSX0VMMV9UQkkxKSkgfHwKPiArICAgICAgICAgICAgICghKGd2YSAmIEJJVCg1NSkpICYm ICh0Y3IgJiBUQ1JfRUwxX1RCSTApKSApCj4gKyAgICAgICAgICAgIHRvcGJpdCA9IDU1Owo+ICsg ICAgICAgIGVsc2UKPiArICAgICAgICAgICAgdG9wYml0ID0gNjM7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgcmV0dXJuIHRvcGJpdDsKPiArfQo+ICsKPiArLyoKPiAgICogVGhlIGZ1bmN0aW9uIGd1ZXN0 X3dhbGtfbGQgdHJhbnNsYXRlcyBhIGdpdmVuIEdWQSBpbnRvIGFuIElQQSB1c2luZyB0aGUKPiAg ICogbG9uZy1kZXNjcmlwdG9yIHRyYW5zbGF0aW9uIHRhYmxlIGZvcm1hdCBpbiBzb2Z0d2FyZS4g VGhpcyBmdW5jdGlvbiBhc3N1bWVzCj4gICAqIHRoYXQgdGhlIGRvbWFpbiBpcyBydW5uaW5nIG9u IHRoZSBjdXJyZW50bHkgYWN0aXZlIHZDUFUuIFRvIHdhbGsgdGhlIGd1ZXN0J3MKPiBAQCAtNDMs OCArMTgxLDI1MSBAQCBzdGF0aWMgaW50IGd1ZXN0X3dhbGtfbGQoY29uc3Qgc3RydWN0IHZjcHUg KnYsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWRkcl90IGd2YSwgcGFkZHJfdCAqaXBh LAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpwZXJtcykKPiAgewo+ IC0gICAgLyogTm90IGltcGxlbWVudGVkIHlldC4gKi8KPiAtICAgIHJldHVybiAtRUZBVUxUOwo+ ICsgICAgYm9vbCBkaXNhYmxlZCA9IHRydWU7Cj4gKyAgICBib29sIHJvX3RhYmxlID0gZmFsc2Us IHhuX3RhYmxlID0gZmFsc2U7Cj4gKyAgICB1bnNpZ25lZCBpbnQgdDBfc3osIHQxX3N6Owo+ICsg ICAgdW5zaWduZWQgaW50IGxldmVsLCBncmFuOwo+ICsgICAgdW5zaWduZWQgaW50IHRvcGJpdCA9 IDAsIGlucHV0X3NpemUgPSAwLCBvdXRwdXRfc2l6ZTsKPiArICAgIHVpbnQ2NF90IHR0YnIgPSAw Owo+ICsgICAgcGFkZHJfdCBtYXNrOwo+ICsgICAgbHBhZV90IHB0ZSwgKnRhYmxlOwo+ICsgICAg c3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKPiArICAgIHJlZ2lzdGVyX3QgdGNyID0gUkVBRF9TWVNS RUcoVENSX0VMMSk7Cj4gKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOwo+ICsKPiAr ICAgIGNvbnN0IHZhZGRyX3Qgb2Zmc2V0c1s0XVszXSA9IHsKCkl0IHdvdWxkIGhhdmUgYmVlbiBt b3JlIHJlYWRhYmxlIGlmIHlvdSBoYWQgaW52ZXJ0ZWQgdGhlIGluZGV4IChpLmUgCmdyYW51bGFy aXR5IHRoZW4gbGV2ZWwpLiBJdCB3b3VsZCBhbHNvIGFsbG93IHRvIHVzZSBtYWNybzoKCiNkZWZp bmUgT0ZGU0VUKGd2YSwgZ3JhbikKewoJemVyb2V0aF9ndWVzdF90YWJsZV9vZmZzZXRfIyNncmFu KGd2YSksCglmaXJzdF9ndWVzdF90YWJsZV9vZmZzZXRfIyNncmFuKGd2YSksCglzZWNvbmRfZ3Vl c3RfdGFibGVfb2Zmc2V0XyMjZ3JhbihndmEpLAoJdGhpcmRfZ3Vlc3RfdGFibGVfb2Zmc2V0XyMj Z3JhbihndmEpLAp9Cgpjb25zdCB2YWRkcl90IG9mZnNldHNbM11bNF0gPSB7CglPRkZTRVQoZ3Zh LCA0SyksCglPRkZTRVQoZ3ZhLCAxNkspLAoJT0ZGU0VUKGd2YSwgNjRLKSwKfTsKCiN1bmRlZiBP RkZTRVQKCj4gKyAgICAgICAgewo+ICsjaWZkZWYgQ09ORklHX0FSTV82NAoKQWdhaW4sIEkgZmlu ZCB0aG9zZSAjaWZkZWYgcG9pbnRsZXNzLCBtb3JlIHRoYXQgeW91IGRvbid0IHVzZSB0aGVtIGZv ciAKdGhlIG1hc2tzIGJlbG93Li4uIGFuZCB5b3Ugd2lsbCBhbHdheXMgY29tcHV0ZSB0aGVtIGZv ciAzMi1iaXQgZG9tYWluIG9uIApBQXJjaDY0IFhlbi4KCj4gKyAgICAgICAgICAgIHplcm9ldGhf Z3Vlc3RfdGFibGVfb2Zmc2V0XzRLKGd2YSksCj4gKyAgICAgICAgICAgIHplcm9ldGhfZ3Vlc3Rf dGFibGVfb2Zmc2V0XzE2SyhndmEpLAo+ICsgICAgICAgICAgICAwLCAvKiBUaGVyZSBpcyBubyB6 ZXJvZXRoIGxvb2t1cCBsZXZlbCB3aXRoIGEgNjRLIGdyYW51bGUgc2l6ZS4gKi8KClBsZWFzZSB1 c2UgemVyb2V0aF9ndWVzdF90YWJsZV9vZmZzZXRfNjRLKGd2YSkgYXMgaXQgZG9lcyBhbHJlYWR5 IHRoZSAKam9iIGZvciB5b3UuCgo+ICsjZW5kaWYKPiArICAgICAgICB9LAo+ICsgICAgICAgIHsK PiArICAgICAgICAgICAgZmlyc3RfZ3Vlc3RfdGFibGVfb2Zmc2V0XzRLKGd2YSksCj4gKyNpZmRl ZiBDT05GSUdfQVJNXzY0CgpEaXR0bwoKPiArICAgICAgICAgICAgZmlyc3RfZ3Vlc3RfdGFibGVf b2Zmc2V0XzE2SyhndmEpLAo+ICsgICAgICAgICAgICBmaXJzdF9ndWVzdF90YWJsZV9vZmZzZXRf NjRLKGd2YSksCj4gKyNlbmRpZgo+ICsgICAgICAgIH0sCj4gKyAgICAgICAgewo+ICsgICAgICAg ICAgICBzZWNvbmRfZ3Vlc3RfdGFibGVfb2Zmc2V0XzRLKGd2YSksCj4gKyNpZmRlZiBDT05GSUdf QVJNXzY0CgpEaXR0bwoKPiArICAgICAgICAgICAgc2Vjb25kX2d1ZXN0X3RhYmxlX29mZnNldF8x NksoZ3ZhKSwKPiArICAgICAgICAgICAgc2Vjb25kX2d1ZXN0X3RhYmxlX29mZnNldF82NEsoZ3Zh KSwKPiArI2VuZGlmCj4gKyAgICAgICAgfSwKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHRo aXJkX2d1ZXN0X3RhYmxlX29mZnNldF80SyhndmEpLAo+ICsjaWZkZWYgQ09ORklHX0FSTV82NAoK RGl0dG8KCj4gKyAgICAgICAgICAgIHRoaXJkX2d1ZXN0X3RhYmxlX29mZnNldF8xNksoZ3ZhKSwK PiArICAgICAgICAgICAgdGhpcmRfZ3Vlc3RfdGFibGVfb2Zmc2V0XzY0SyhndmEpLAo+ICsjZW5k aWYKPiArICAgICAgICB9Cj4gKyAgICB9Owo+ICsKPiArICAgIHN0YXRpYyBjb25zdCBwYWRkcl90 IG1hc2tzWzRdWzNdID0gewoKU2ltaWxhciBoZXJlIGZvciB0aGUgYXJyYXkuCgo+ICsgICAgICAg IHsKPiArICAgICAgICAgICAgemVyb2V0aF9zaXplKDRLKSAtIDEsCj4gKyAgICAgICAgICAgIHpl cm9ldGhfc2l6ZSgxNkspIC0gMSwKPiArICAgICAgICAgICAgMCAvKiBUaGVyZSBpcyBubyB6ZXJv ZXRoIGxvb2t1cCBsZXZlbCB3aXRoIGEgNjRLIGdyYW51bGUgc2l6ZS4gKi8KPiArICAgICAgICB9 LAo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgZmlyc3Rfc2l6ZSg0SykgLSAxLAo+ICsgICAg ICAgICAgICBmaXJzdF9zaXplKDE2SykgLSAxLAo+ICsgICAgICAgICAgICBmaXJzdF9zaXplKDY0 SykgLSAxCj4gKyAgICAgICAgfSwKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHNlY29uZF9z aXplKDRLKSAtIDEsCj4gKyAgICAgICAgICAgIHNlY29uZF9zaXplKDE2SykgLSAxLAo+ICsgICAg ICAgICAgICBzZWNvbmRfc2l6ZSg2NEspIC0gMQo+ICsgICAgICAgIH0sCj4gKyAgICAgICAgewo+ ICsgICAgICAgICAgICB0aGlyZF9zaXplKDRLKSAtIDEsCj4gKyAgICAgICAgICAgIHRoaXJkX3Np emUoMTZLKSAtIDEsCj4gKyAgICAgICAgICAgIHRoaXJkX3NpemUoNjRLKSAtIDEKPiArICAgICAg ICB9Cj4gKyAgICB9Owo+ICsKPiArICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3JhaW5z aXplc1szXSA9IHsKPiArICAgICAgICBQQUdFX1NISUZUXzRLLAo+ICsgICAgICAgIFBBR0VfU0hJ RlRfMTZLLAo+ICsgICAgICAgIFBBR0VfU0hJRlRfNjRLCj4gKyAgICB9Owo+ICsKPiArICAgIHQw X3N6ID0gKHRjciA+PiBUQ1JfVDBTWl9TSElGVCkgJiBUQ1JfU1pfTUFTSzsKPiArICAgIHQxX3N6 ID0gKHRjciA+PiBUQ1JfVDFTWl9TSElGVCkgJiBUQ1JfU1pfTUFTSzsKPiArCj4gKyAgICAvKiBH ZXQgdGhlIE1TQiBudW1iZXIgb2YgdGhlIEdWQS4gKi8KPiArICAgIHRvcGJpdCA9IGdldF90b3Bf Yml0KGQsIGd2YSwgdGNyKTsKPiArCj4gKyAgICBpZiAoIGlzXzY0Yml0X2RvbWFpbihkKSApCj4g KyAgICB7Cj4gKyAgICAgICAgLyogU2VsZWN0IHRoZSBUVEJSKDB8MSlfRUwxIHRoYXQgd2lsbCBi ZSB1c2VkIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uLiAqLwo+ICsKPiArICAgICAgICBpZiAoIChn dmEgJiBCSVQodG9wYml0KSkgPT0gMCApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBpbnB1 dF9zaXplID0gQklUU19QRVJfRE9VQkxFX1dPUkQgLSB0MF9zejsKCkkgZG9uJ3QgdGhpbmsgdXNp bmcgQklUU19QRVJfRE9VQkxFX1dPUkQgaXMgY29ycmVjdCBoZXJlLiBUaGUgCnBzZXVkby1jb2Rl IGlzIGV4cGxpY2l0bHkgc2F5aW5nIDY0IGFuZCBkb2VzIG5vdCBtZW50aW9uIGFueXRoaW5nIGFi b3V0IApkb3VibGUgd29yZC4KCkkgYWdyZWUgdGhhdCBiaXQgc2hpZnQgc2hvdWxkIGJlIHVzaW5n IGRlZmluZSB3aGVuIGl0IGlzIHJlbGF0ZWQgdG8gYSAKcmVnaXN0ZXIuIEJ1dCBJIHRvdGFsbHkg ZGlzYWdyZWUgb24gcmVwbGFjaW5nIGV2ZXJ5IHNpbmdsZSBudW1iZXIgYnkgCm1hY3JvIHdoZW4g aXQgaXMgbm90IHBvc3NpYmlsaXR5IHRvIGZpbmQgYSBzdWl0YWJsZSBuYW1lLgoKPiArCj4gKyAg ICAgICAgICAgIC8qIEdldCBUVEJSMCBhbmQgY29uZmlndXJlZCBwYWdlIGdyYW51bGFyaXR5LiAq Lwo+ICsgICAgICAgICAgICBkaXNhYmxlZCA9IGdldF90dGJyX2FuZF9ncmFuXzY0Yml0KCZ0dGJy LCAmZ3JhbiwgdGNyLCBUVEJSMF9BQ1RJVkUpOwo+ICsgICAgICAgIH0KPiArICAgICAgICBlbHNl Cj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBpbnB1dF9zaXplID0gQklUU19QRVJfRE9VQkxF X1dPUkQgLSB0MV9zejsKCkRpdHRvLgoKPiArCj4gKyAgICAgICAgICAgIC8qIEdldCBUVEJSMSBh bmQgY29uZmlndXJlZCBwYWdlIGdyYW51bGFyaXR5LiAqLwo+ICsgICAgICAgICAgICBkaXNhYmxl ZCA9IGdldF90dGJyX2FuZF9ncmFuXzY0Yml0KCZ0dGJyLCAmZ3JhbiwgdGNyLCBUVEJSMV9BQ1RJ VkUpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyoKPiArICAgICAgICAgKiBUaGUgY3Vy cmVudCBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBpbnRlcm1lZGlhdGUgcGh5c2ljYWwgYWRkcmVz cwo+ICsgICAgICAgICAqIHNpemVzIChJUFMpIHVwIHRvIDQ4IGJpdC4KPiArICAgICAgICAgKgo+ ICsgICAgICAgICAqIFhYWDogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIElQU19NQVhfVkFMIGlzIDQ4 IG9yIDUyIGluIHNvZnR3YXJlLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIGlmICggKGlucHV0 X3NpemUgPiBUQ1JfRUwxX0lQU180OF9CSVRfVkFMKSB8fAo+ICsgICAgICAgICAgICAgKGlucHV0 X3NpemUgPCBUQ1JfRUwxX0lQU19NSU5fVkFMKSApCj4gKyAgICAgICAgICAgIHJldHVybiAtRUZB VUxUOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgewo+ICsgICAgICAgIC8qIEdyYW51bGUg c2l6ZSBvZiBBQXJjaDMyIGFyY2hpdGVjdHVyZXMgaXMgYWx3YXlzIDRLLiAqLwo+ICsgICAgICAg IGdyYW4gPSBHUkFOVUxFX1NJWkVfSU5ERVhfNEs7Cj4gKwo+ICsgICAgICAgIC8qIFNlbGVjdCB0 aGUgVFRCUigwfDEpX0VMMSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYWRkcmVzcyB0cmFuc2xhdGlv bi4gKi8KPiArCj4gKyAgICAgICAgLyoKPiArICAgICAgICAgKiBDaGVjayBpZiB0aGUgYml0cyA8 MzE6MzItdDBfc3o+IG9mIHRoZSBHVkEgYXJlIHNldCB0byAwIChEREkgMDQ4N0IuYQo+ICsgICAg ICAgICAqIEoxLTU5OTkpLiBJZiBzbywgVFRCUjAgc2hhbGwgYmUgdXNlZCBmb3IgYWRkcmVzcyB0 cmFuc2xhdGlvbi4KPiArICAgICAgICAgKi8KPiArICAgICAgICBtYXNrID0gKCgxVUxMIDw8IEJJ VFNfUEVSX1dPUkQpIC0gMSkgJgoKU2FtZSByZW1hcmsgYXMgQklUU19QRVJfRE9VQkxFX1dPUkQg YW5kIGl0IHN0YW5kcyBmb3IgYWxsIHRoZSB1c2FnZSBvZiAKQklUU19QRVJfV09SRCBhbmQgQklU U19QRVJfRE9VQkxFX1dPUkQgd2l0aGluIHRoaXMgcGF0Y2guCgo+ICsgICAgICAgICAgICAgICB+ KCgxVUxMIDw8IChCSVRTX1BFUl9XT1JEIC0gdDBfc3opKSAtIDEpOwo+ICsKPiArICAgICAgICBp ZiAoIHQwX3N6ID09IDAgfHwgIShndmEgJiBtYXNrKSApCj4gKyAgICAgICAgewo+ICsgICAgICAg ICAgICBpbnB1dF9zaXplID0gQklUU19QRVJfV09SRCAtIHQwX3N6Owo+ICsKPiArICAgICAgICAg ICAgLyogVXNlIFRUQlIwIGZvciBHVkEgdG8gSVBBIHRyYW5zbGF0aW9uLiAqLwo+ICsgICAgICAg ICAgICB0dGJyID0gUkVBRF9TWVNSRUc2NChUVEJSMF9FTDEpOwo+ICsKPiArICAgICAgICAgICAg LyogSWYgVENSLkVQRDAgaXMgc2V0LCB0cmFuc2xhdGlvbnMgdXNpbmcgVFRCUjAgYXJlIGRpc2Fi bGVkLiAqLwo+ICsgICAgICAgICAgICBkaXNhYmxlZCA9IHRjciAmIFRDUl9FUEQwOwo+ICsgICAg ICAgIH0KPiArCj4gKyAgICAgICAgLyoKPiArICAgICAgICAgKiBDaGVjayBpZiB0aGUgYml0cyA8 MzE6MzItdDFfc3o+IG9mIHRoZSBHVkEgYXJlIHNldCB0byAxIChEREkgMDQ4N0IuYQo+ICsgICAg ICAgICAqIEoxLTYwMDApLiBJZiBzbywgVFRCUjEgc2hhbGwgYmUgdXNlZCBmb3IgYWRkcmVzcyB0 cmFuc2xhdGlvbi4KPiArICAgICAgICAgKi8KPiArICAgICAgICBtYXNrID0gKCgxVUxMIDw8IEJJ VFNfUEVSX1dPUkQpIC0gMSkgJgo+ICsgICAgICAgICAgICAgICB+KCgxVUxMIDw8IChCSVRTX1BF Ul9XT1JEIC0gdDFfc3opKSAtIDEpOwoKUGxlYXNlIHVzZSBHRU5NQVNLIGhlcmUgcGxhc2UuCgo+ ICsKPiArICAgICAgICBpZiAoICgodDFfc3ogPT0gMCkgJiYgIXR0YnIpIHx8ICh0MV9zeiAmJiAo Z3ZhICYgbWFzaykgPT0gbWFzaykgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgaW5wdXRf c2l6ZSA9IEJJVFNfUEVSX1dPUkQgLSB0MV9zejsKPiArCj4gKyAgICAgICAgICAgIC8qIFVzZSBU VEJSMSBmb3IgR1ZBIHRvIElQQSB0cmFuc2xhdGlvbi4gKi8KPiArICAgICAgICAgICAgdHRiciA9 IFJFQURfU1lTUkVHNjQoVFRCUjFfRUwxKTsKPiArCj4gKyAgICAgICAgICAgIC8qIElmIFRDUi5F UEQxIGlzIHNldCwgdHJhbnNsYXRpb25zIHVzaW5nIFRUQlIxIGFyZSBkaXNhYmxlZC4gKi8KPiAr ICAgICAgICAgICAgZGlzYWJsZWQgPSB0Y3IgJiBUQ1JfRVBEMTsKPiArICAgICAgICB9Cj4gKyAg ICB9Cj4gKwo+ICsgICAgaWYgKCBkaXNhYmxlZCApCj4gKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7 Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIFRoZSBzdGFydGluZyBsZXZlbCBpcyB0aGUgbnVtYmVy IG9mIHN0cmlkZXMgKGdyYWluc2l6ZXNbZ3Jhbl0gLSAzKQo+ICsgICAgICogbmVlZGVkIHRvIGNv bnN1bWUgdGhlIGlucHV0IGFkZHJlc3MgKERESSAwNDg3Qi5hIEoxLTU5MjQpLgo+ICsgICAgICov Cj4gKyAgICBsZXZlbCA9IDQgLSBESVZfUk9VTkRfVVAoKGlucHV0X3NpemUgLSBncmFpbnNpemVz W2dyYW5dKSwgKGdyYWluc2l6ZXNbZ3Jhbl0gLSAzKSk7Cj4gKwo+ICsgICAgLyogR2V0IHRoZSBJ UEEgb3V0cHV0X3NpemUuICovCj4gKyAgICBvdXRwdXRfc2l6ZSA9IGdldF9pcGFfb3V0cHV0X3Np emUoZCwgdGNyKTsKPiArCj4gKyAgICAvKiBNYWtlIHN1cmUgdGhlIGJhc2UgYWRkcmVzcyBkb2Vz IG5vdCBleGNlZWQgaXRzIGNvbmZpZ3VyZWQgc2l6ZS4gKi8KPiArICAgIG1hc2sgPSAoKDFVTEwg PDwgVENSX0VMMV9JUFNfNDhfQklUX1ZBTCkgLSAxKSAmIH4oKDFVTEwgPDwgb3V0cHV0X3NpemUp IC0gMSk7Cj4gKyAgICBpZiAoIG91dHB1dF9zaXplIDwgVENSX0VMMV9JUFNfNDhfQklUX1ZBTCAm JiAodHRiciAmIG1hc2spICkKPiArICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiArCj4gKyAgICBt YXNrID0gKCgxVUxMIDw8IG91dHB1dF9zaXplKSAtIDEpOwo+ICsgICAgcGFnZSA9IGdldF9wYWdl X2Zyb21fZ2ZuKGQsIHBhZGRyX3RvX3Bmbih0dGJyICYgbWFzayksIE5VTEwsIFAyTV9BTExPQyk7 Cj4gKyAgICBpZiAoICFwYWdlICkKPiArICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiArCj4gKyAg ICB0YWJsZSA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2UpOwo+ICsKPiArICAgIGZvciAoIDsgOyBs ZXZlbCsrICkKPiArICAgIHsKPiArICAgICAgICBwdGUgPSB0YWJsZVtvZmZzZXRzW2xldmVsXVtn cmFuXV07Cj4gKwo+ICsgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHRhYmxlKTsKPiArICAgICAg ICBwdXRfcGFnZShwYWdlKTsKPiArCj4gKyAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBiYXNlIGFk ZHJlc3MgZG9lcyBub3QgZXhjZWVkIGl0cyBjb25maWd1cmVkIHNpemUuICovCj4gKyAgICAgICAg bWFzayA9ICgoMVVMTCA8PCBUQ1JfRUwxX0lQU180OF9CSVRfVkFMKSAtIDEpICYKPiArICAgICAg ICAgICAgICAgfigoMVVMTCA8PCBvdXRwdXRfc2l6ZSkgLSAxKTsKClRoaXMgdXNlIHRoaXMgY29u c3RydWN0aW9uIGluIHR3byBwbGFjZSB3aXRoIGEgY2hlY2sgYWZ0ZXIuIEl0IHdvdWxkIAptYWtl IHNlbnNlIHRvIGhhdmUgYW4gaGVscGVyIGZvciBpdC4KCj4gKwo+ICsgICAgICAgIGlmICggKG91 dHB1dF9zaXplIDwgVENSX0VMMV9JUFNfNDhfQklUX1ZBTCkgJiYKPiArICAgICAgICAgICAgIChw Zm5fdG9fcGFkZHIocHRlLndhbGsuYmFzZSkgJiBtYXNrKSApCj4gKyAgICAgICAgICAgIHJldHVy biAtRUZBVUxUOwo+ICsKPiArICAgICAgICAvKgo+ICsgICAgICAgICAqIElmIHBhZ2UgZ3JhbnVs YXJpdHkgaXMgNjRLLCBtYWtlIHN1cmUgdGhlIGFkZHJlc3MgaXMgYWxpZ25lZAo+ICsgICAgICAg ICAqIGFwcHJvcHJpYXRlbHkuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgaWYgKCAob3V0cHV0 X3NpemUgPCBUQ1JfRUwxX0lQU181Ml9CSVRfVkFMKSAmJgo+ICsgICAgICAgICAgICAgKGdyYW4g PT0gR1JBTlVMRV9TSVpFX0lOREVYXzY0SykgJiYKPiArICAgICAgICAgICAgIChwdGUud2Fsay5i YXNlICYgMHhmKSApCj4gKyAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwo+ICsKPiArICAgICAg ICAvKgo+ICsgICAgICAgICAqIEJyZWFrIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMgYXJlIHRydWU6Cj4gKyAgICAgICAgICoKPiArICAgICAgICAgKiAtIFdlIGhhdmUgZm91bmQg dGhlIFBURSBob2xkaW5nIHRoZSBJUEEgKGxldmVsID09IDMpLgo+ICsgICAgICAgICAqIC0gVGhl IFBURSBpcyBub3QgdmFsaWQuCj4gKyAgICAgICAgICogLSBJZiAobGV2ZWwgPCAzKSBhbmQgdGhl IFBURSBpcyB2YWxpZCwgd2UgZm91bmQgYSBibG9jayBkZXNjcmlwdG9yLgo+ICsgICAgICAgICAq Lwo+ICsgICAgICAgIGlmICggbGV2ZWwgPT0gMyB8fCAhbHBhZV92YWxpZChwdGUpIHx8IGxwYWVf aXNfc3VwZXJwYWdlKHB0ZSwgbGV2ZWwpICkKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsg ICAgICAgIC8qCj4gKyAgICAgICAgICogVGVtcG9yYXJpbHkgc3RvcmUgcGVybWlzc2lvbnMgb2Yg dGhlIHRhYmxlIGRlc2NyaXB0b3IgYXMgdGhleSBhcmUKPiArICAgICAgICAgKiBpbmhlcml0ZWQg YnkgcGFnZSB0YWJsZSBhdHRyaWJ1dGVzIChBUk0gRERJIDA0ODdCLmEgSjEtNTkyOCkuCj4gKyAg ICAgICAgICovCj4gKyAgICAgICAgeG5fdGFibGUgfD0gcHRlLnB0LnhudDsgICAgICAgICAgICAg LyogRXhlY3V0ZS1OZXZlciAqLwo+ICsgICAgICAgIHJvX3RhYmxlIHw9IHB0ZS5wdC5hcHQgJiBC SVQoMSk7ICAgIC8qIFJlYWQtT25seSAqLwo+ICsKPiArICAgICAgICBwYWdlID0gZ2V0X3BhZ2Vf ZnJvbV9nZm4oZCwgcHRlLndhbGsuYmFzZSwgTlVMTCwgUDJNX0FMTE9DKTsKPiArCj4gKyAgICAg ICAgaWYgKCAhcGFnZSApCj4gKyAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwo+ICsKPiArICAg ICAgICB0YWJsZSA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2UpOwo+ICsgICAgfQo+ICsKPiArICAg IC8qCj4gKyAgICAgKiBBY2NvcmRpbmcgdG8gdG8gQVJNIERESSAwNDg3Qi5hIEoxLTU5MjcsIHdl IHJldHVybiBhbiBlcnJvciBpZiB0aGUgZm91bmQKPiArICAgICAqIFBURSBpcyBpbnZhbGlkIG9y IGhvbGRzIGEgcmVzZXJ2ZWQgZW50cnkgKFBURTwxOjA+ID09IHgwKSkgb3IgaWYgdGhlIFBURQo+ ICsgICAgICogbWFwcyBhIG1lbW9yeSBibG9jayBhdCBsZXZlbCAzIChQVEU8MTowPiA9PSAwMSku Cj4gKyAgICAgKi8KPiArICAgIGlmICggIWxwYWVfdmFsaWQocHRlKSB8fCAoKGxldmVsID09IDMp ICYmIGxwYWVfbWFwcGluZyhwdGUpKSApCgpJZiB5b3UgbG9vayBhdCB0aGUgY29tbWVudCBvbiB0 b3Agb2YgbHBhZV9tYXBwaW5nLCBpdCBzaG91bGQgb25seSBiZSAKdXNlZCBmb3IgTDAuLkwyIHB0 ZXMuIFNvIHdoeSBhcmUgeW91IHVzaW5nIGl0IG9uIEwzIHB0ZXM/Cgo+ICsgICAgICAgIHJldHVy biAtRUZBVUxUOwo+ICsKPiArICAgICppcGEgPSBwZm5fdG9fcGFkZHIocHRlLndhbGsuYmFzZSkg fCAoZ3ZhICYgbWFza3NbbGV2ZWxdW2dyYW5dKTsKPiArCj4gKyAgICAvKgo+ICsgICAgICogU2V0 IHBlcm1pc3Npb25zIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gY2hlY2sgdGhlIGZsYWdzIGJ5IGhl cnNlbGYuIE5vdGUKPiArICAgICAqIHRoYXQgc3RhZ2UgMSB0cmFuc2xhdGlvbnMgYWxzbyBpbmhl cml0IGF0dHJpYnV0ZXMgZnJvbSB0aGUgdGFibGVzCj4gKyAgICAgKiAoQVJNIERESSAwNDg3Qi5h IEoxLTU5MjgpLgo+ICsgICAgICovCj4gKyAgICBpZiAoICFwdGUucHQucm8gJiYgIXJvX3RhYmxl ICkKPiArICAgICAgICAqcGVybXMgPSBHVjJNX1dSSVRFOwo+ICsgICAgaWYgKCAhcHRlLnB0Lnhu ICYmICF4bl90YWJsZSApCj4gKyAgICAgICAgKnBlcm1zIHw9IEdWMk1fRVhFQzsKPiArCj4gKyAg ICByZXR1cm4gMDsKPiAgfQo+Cj4gIGludCBndWVzdF93YWxrX3RhYmxlcyhjb25zdCBzdHJ1Y3Qg dmNwdSAqdiwgdmFkZHJfdCBndmEsCj4KCkNoZWVycywKCi0tIApKdWxpZW4gR3JhbGwKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWls aW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hl bi1kZXZlbAo=