From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arnaud Pouliquen Subject: Re: [PATCH v6 13/13] ASoC: stm32: add DFSDM DAI support Date: Mon, 4 Dec 2017 09:58:42 +0100 Message-ID: References: <1512150020-20335-1-git-send-email-arnaud.pouliquen@st.com> <1512150020-20335-14-git-send-email-arnaud.pouliquen@st.com> <20171202150952.1b5f3bfd@archlinux> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171202150952.1b5f3bfd@archlinux> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Jonathan Cameron Cc: Mark Rutland , "devicetree@vger.kernel.org" , "alsa-devel@alsa-project.org" , Lars-Peter Clausen , Maxime Coquelin , Liam Girdwood , "linux-iio@vger.kernel.org" , Mark Brown , Takashi Iwai , Rob Herring , Peter Meerwald-Stadler , Hartmut Knaack , "linux-arm-kernel@lists.infradead.org" , Alexandre TORGUE List-Id: devicetree@vger.kernel.org CgpPbiAxMi8wMi8yMDE3IDA0OjA5IFBNLCBKb25hdGhhbiBDYW1lcm9uIHdyb3RlOgo+IE9uIEZy aSwgMSBEZWMgMjAxNyAxODo0MDoyMCArMDEwMAo+IEFybmF1ZCBQb3VsaXF1ZW4gPGFybmF1ZC5w b3VsaXF1ZW5Ac3QuY29tPiB3cm90ZToKPiAKPj4gQWRkIGRyaXZlciB0byBoYW5kbGUgREFJIGlu dGVyZmFjZSBmb3IgUERNIG1pY3JvcGhvbmVzIGNvbm5lY3RlZAo+PiB0byBEaWdpdGFsIEZpbHRl ciBmb3IgU2lnbWEgRGVsdGEgTW9kdWxhdG9ycyBJUC4KPj4gCj4+IFNpZ25lZC1vZmYtYnk6IEFy bmF1ZCBQb3VsaXF1ZW4gPGFybmF1ZC5wb3VsaXF1ZW5Ac3QuY29tPgo+IAo+IGluY2x1ZGUgdGll ZCB1cCB3aXRoIHRoZSBtb3ZlIG9mIHRoYXQgZW51bSBpbiB0aGUgZWFybGllciBwYXRjaC4KPiBP dGhlciB0aGFuIHRoYXQgdGhlIElJTyBzdHVmZiBsb29rcyBmaW5lIHRvIG1lLgo+IAo+IE1hcmss IGdpdmVuIHRoaXMgc2V0IGlzIG1vZGVyYXRlbHkgaW52YXNpdmUgb24gdGhlIElJTyBzaWRlIGFu ZAo+IHNob3VsZCBqdXN0IGRyb3AgaW4gY2xlYW5seSBvbiB0aGUgc291bmQgc2lkZSBvZiB0aGlu Z3MsIGVpdGhlcgo+IEkgY291bGQgdGFrZSBpdCB2aWEgSUlPIG9yIG9uZSBvZiB1cyBjYW4gZG8g YW4gaW1tdXRhYmxlIGJyYW5jaAo+IGFuZCB3ZSB0YWtlIGl0IHRocm91Z2ggYm90aCB0cmVlcy4K CkRvbid0IGtub3cgaWYgeW91IHNhdyB0aGUgcmVwbHkgZnJvbSBNYXJrIG9uIFY1OgoiVGhpcyBp cyBiYXNpY2FsbHkgZmluZSwgaWYgc29tZW9uZSBjb3VsZCBzZW5kIG1lIGEgcHVsbCByZXF1ZXN0 IGFuZCB0aGUKcmVsZXZhbnQgcGF0Y2hlcyB3aGVuIHRoZSBJSU8gc3R1ZmYgaXMgc29ydGVkIG91 dCBJJ2xsIGdpdmUgaXQgYSBmaW5hbApjaGVjayBhbmQgYXBwbHkgdGhlbi4iCgo+IAo+IERvbid0 IG1pbmQgd2hpY2ggYnV0IGlmIEknbSBlaXRoZXIgdGFraW5nIHRoZSBzZXJpZXMgb3IgZG9pbmcK PiBhbiBpbW11dGFibGUgYnJhbmNoIEknbGwgb2J2aW91c2x5IGJlIHdhaXRpbmcgb24geW91ciBy ZXZpZXchCj4gCj4gQWxzbyBuZWVkIHRpbWUgZm9yIFJvYiB0byBjaGVjayB0aGUgdXBkYXRpbmcg YmluZGluZ3MuCj4gCj4gQW55aG93LCBpdCdzIGNvbWluZyB0b2dldGhlciByZWFzb25hYmx5IG5p Y2VseSBpbiB0aGUgZW5kLgo+IEdvb2Qgd29yayBBcm5hdWQhCgpUaGFua3MhIGl0IHdpbGwgYmUg YSBnb29kIGFjaGlldmVtZW50IGZvciBtZSwgbm90IHRyaXZpYWwgdGhpcwpwZXJpcGhlcmFsIHRv IGludGVncmF0ZSA6KQpJJ20gd2FpdGluZyBSb2IncyBhY2sgb3IgcmVtYXJrcyBvbiBwYXRjaCAx Mi8xMyB0byBzZW5kIHRoZSBuZXh0IHZlcnNpb24uCgpUaGFua3MgYW5kIFJlZ2FyZHMKQXJuYXVk Cgo+IAo+IEpvbmF0aGFuCj4+IC0tLQo+PiBWNSB0byBWNiB1cGRhdGU6Cj4+wqAgZml4IGJ1aWxk IHdhcm5pbmcKPj7CoCAKPj7CoCBzb3VuZC9zb2Mvc3RtL0tjb25maWfCoMKgwqDCoMKgwqDCoCB8 wqAgMTEgKysKPj7CoCBzb3VuZC9zb2Mvc3RtL01ha2VmaWxlwqDCoMKgwqDCoMKgIHzCoMKgIDMg Kwo+PsKgIHNvdW5kL3NvYy9zdG0vc3RtMzJfYWRmc2RtLmMgfCAzODYgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PsKgIDMgZmlsZXMgY2hhbmdlZCwgNDAwIGlu c2VydGlvbnMoKykKPj7CoCBjcmVhdGUgbW9kZSAxMDA2NDQgc291bmQvc29jL3N0bS9zdG0zMl9h ZGZzZG0uYwo+PiAKPj4gZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zdG0vS2NvbmZpZyBiL3NvdW5k L3NvYy9zdG0vS2NvbmZpZwo+PiBpbmRleCAzMzk4ZTZjLi5hNzhmNzcwIDEwMDY0NAo+PiAtLS0g YS9zb3VuZC9zb2Mvc3RtL0tjb25maWcKPj4gKysrIGIvc291bmQvc29jL3N0bS9LY29uZmlnCj4+ IEBAIC0yOCw0ICsyOCwxNSBAQCBjb25maWcgU05EX1NPQ19TVE0zMl9TUERJRlJYCj4+wqDCoMKg wqDCoMKgwqAgaGVscAo+PsKgwqDCoMKgwqDCoMKgwqDCoCBTYXkgWSBpZiB5b3Ugd2FudCB0byBl bmFibGUgUy9QRElGIGNhcHR1cmUgZm9yIFNUTTMyCj4+wqAgCj4+ICtjb25maWcgU05EX1NPQ19T VE0zMl9ERlNETQo+PiArwqDCoMKgwqAgdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBT VE0zMiBERlNETSIKPj4gK8KgwqDCoMKgIGRlcGVuZHMgb24gKEFSQ0hfU1RNMzIgJiYgT0YgJiYg U1RNMzJfREZTRE1fQURDKSB8fCBDT01QSUxFX1RFU1QKPj4gK8KgwqDCoMKgIGRlcGVuZHMgb24g U05EX1NPQwo+PiArwqDCoMKgwqAgc2VsZWN0IFNORF9TT0NfR0VORVJJQ19ETUFFTkdJTkVfUENN Cj4+ICvCoMKgwqDCoCBzZWxlY3QgU05EX1NPQ19ETUlDCj4+ICvCoMKgwqDCoCBzZWxlY3QgSUlP X0JVRkZFUl9DQgo+PiArwqDCoMKgwqAgaGVscAo+PiArwqDCoMKgwqDCoMKgIFNlbGVjdCB0aGlz IG9wdGlvbiB0byBlbmFibGUgdGhlIFNUTTMyIERpZ2l0YWwgRmlsdGVyCj4+ICvCoMKgwqDCoMKg wqAgZm9yIFNpZ21hIERlbHRhIE1vZHVsYXRvcnMgKERGU0RNKSBkcml2ZXIgdXNlZAo+PiArwqDC oMKgwqDCoMKgIGluIHZhcmlvdXMgU1RNMzIgc2VyaWVzIGZvciBkaWdpdGFsIG1pY3JvcGhvbmUg Y2FwdHVyZS4KPj7CoCBlbmRtZW51Cj4+IGRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc3RtL01ha2Vm aWxlIGIvc291bmQvc29jL3N0bS9NYWtlZmlsZQo+PiBpbmRleCA0ZWQyMmU2Li41M2U5MGU2IDEw MDY0NAo+PiAtLS0gYS9zb3VuZC9zb2Mvc3RtL01ha2VmaWxlCj4+ICsrKyBiL3NvdW5kL3NvYy9z dG0vTWFrZWZpbGUKPj4gQEAgLTEyLDMgKzEyLDYgQEAgb2JqLSQoQ09ORklHX1NORF9TT0NfU1RN MzJfSTJTKSArPSBzbmQtc29jLXN0bTMyLWkycy5vCj4+wqAgIyBTUERJRlJYCj4+wqAgc25kLXNv Yy1zdG0zMi1zcGRpZnJ4LW9ianMgOj0gc3RtMzJfc3BkaWZyeC5vCj4+wqAgb2JqLSQoQ09ORklH X1NORF9TT0NfU1RNMzJfU1BESUZSWCkgKz0gc25kLXNvYy1zdG0zMi1zcGRpZnJ4Lm8KPj4gKwo+ PiArI0RGU0RNCj4+ICtvYmotJChDT05GSUdfU05EX1NPQ19TVE0zMl9ERlNETSkgKz0gc3RtMzJf YWRmc2RtLm8KPj4gZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zdG0vc3RtMzJfYWRmc2RtLmMgYi9z b3VuZC9zb2Mvc3RtL3N0bTMyX2FkZnNkbS5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGlu ZGV4IDAwMDAwMDAuLjg5MGVjMjQKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9zb3VuZC9zb2Mv c3RtL3N0bTMyX2FkZnNkbS5jCj4+IEBAIC0wLDAgKzEsMzg2IEBACj4+ICsvKgo+PiArICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgU1RNMzIgREZTRE0gQVNvQyBEQUkgZHJpdmVyCj4+ICsgKgo+PiAr ICogQ29weXJpZ2h0IChDKSAyMDE3LCBTVE1pY3JvZWxlY3Ryb25pY3MgLSBBbGwgUmlnaHRzIFJl c2VydmVkCj4+ICsgKiBBdXRob3JzOiBBcm5hdWQgUG91bGlxdWVuIDxhcm5hdWQucG91bGlxdWVu QHN0LmNvbT4KPj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgIE9saXZpZXIgTW95c2FuIDxvbGl2aWVy Lm1veXNhbkBzdC5jb20+Cj4+ICsgKgo+PiArICogTGljZW5zZSB0ZXJtczogR1BMIFYyLjAuCj4+ ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKPj4gKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQo+PiAr ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0 Cj4+ICsgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQo+PiArICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuCj4+ICsgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAo+PiArICog dGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u Cj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+PiArI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L2lpby9paW8u aD4KPiAKPiBJIG1pc3NlZCB0aGlzIGJlZm9yZSBidXQgYSBjb25zdW1lciBzaG91bGQgbm90IG5l ZWQgdG8gaW5jbHVkZSBpaW8uaC4KPiBJIHdvdWxkIGd1ZXNzIGl0IHdhcyBhYm91dCB0aGF0IGVu dW0gdGhhdCBJIHdhbnQgeW91IHRvIG1vdmUgdG8gdHlwZXMuaD8KPiAKPj4gKyNpbmNsdWRlIDxs aW51eC9paW8vY29uc3VtZXIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9paW8vYWRjL3N0bTMyLWRm c2RtLWFkYy5oPgo+PiArCj4+ICsjaW5jbHVkZSA8c291bmQvcGNtLmg+Cj4+ICsjaW5jbHVkZSA8 c291bmQvc29jLmg+Cj4+ICsKPj4gKyNkZWZpbmUgU1RNMzJfQURGU0RNX0RSVl9OQU1FICJzdG0z Mi1hZGZzZG0iCj4+ICsKPj4gKyNkZWZpbmUgREZTRE1fTUFYX1BFUklPRF9TSVpFwqDCoMKgwqDC oMKgwqAgKFBBR0VfU0laRSAvIDIpCj4+ICsjZGVmaW5lIERGU0RNX01BWF9QRVJJT0RTwqDCoMKg IDYKPj4gKwo+PiArc3RydWN0IHN0bTMyX2FkZnNkbV9wcml2IHsKPj4gK8KgwqDCoMKgIHN0cnVj dCBzbmRfc29jX2RhaV9kcml2ZXIgZGFpX2RydjsKPj4gK8KgwqDCoMKgIHN0cnVjdCBzbmRfcGNt X3N1YnN0cmVhbSAqc3Vic3RyZWFtOwo+PiArwqDCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2Owo+ PiArCj4+ICvCoMKgwqDCoCAvKiBJSU8gKi8KPj4gK8KgwqDCoMKgIHN0cnVjdCBpaW9fY2hhbm5l bCAqaWlvX2NoOwo+PiArwqDCoMKgwqAgc3RydWN0IGlpb19jYl9idWZmZXIgKmlpb19jYjsKPj4g K8KgwqDCoMKgIGJvb2wgaWlvX2FjdGl2ZTsKPj4gKwo+PiArwqDCoMKgwqAgLyogUENNIGJ1ZmZl ciAqLwo+PiArwqDCoMKgwqAgdW5zaWduZWQgY2hhciAqcGNtX2J1ZmY7Cj4+ICvCoMKgwqDCoCB1 bnNpZ25lZCBpbnQgcG9zOwo+PiArwqDCoMKgwqAgYm9vbCBhbGxvY2F0ZWQ7Cj4+ICt9Owo+PiAr Cj4+ICtzdHJ1Y3Qgc3RtMzJfYWRmc2RtX2RhdGEgewo+PiArwqDCoMKgwqAgdW5zaWduZWQgaW50 IHJhdGU7wqDCoMKgwqDCoCAvKiBTTkRSVl9QQ01fUkFURSB2YWx1ZSAqLwo+PiArwqDCoMKgwqAg dW5zaWduZWQgaW50IGZyZXE7wqDCoMKgwqDCoCAvKiBmcmVxdWVuY3kgaW4gSHogKi8KPj4gK307 Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzdG0zMl9hZGZz ZG1fcGNtX2h3ID0gewo+PiArwqDCoMKgwqAgLmluZm8gPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxF QVZFRCB8IFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKPj4gK8KgwqDCoMKgwqDCoMKg wqAgU05EUlZfUENNX0lORk9fUEFVU0UsCj4+ICvCoMKgwqDCoCAuZm9ybWF0cyA9IFNORFJWX1BD TV9GTVRCSVRfUzMyX0xFLAo+PiArCj4+ICvCoMKgwqDCoCAucmF0ZV9taW4gPSA4MDAwLAo+PiAr wqDCoMKgwqAgLnJhdGVfbWF4ID0gMzIwMDAsCj4+ICsKPj4gK8KgwqDCoMKgIC5jaGFubmVsc19t aW4gPSAxLAo+PiArwqDCoMKgwqAgLmNoYW5uZWxzX21heCA9IDEsCj4+ICsKPj4gK8KgwqDCoMKg IC5wZXJpb2RzX21pbiA9IDIsCj4+ICvCoMKgwqDCoCAucGVyaW9kc19tYXggPSBERlNETV9NQVhf UEVSSU9EUywKPj4gKwo+PiArwqDCoMKgwqAgLnBlcmlvZF9ieXRlc19tYXggPSBERlNETV9NQVhf UEVSSU9EX1NJWkUsCj4+ICvCoMKgwqDCoCAuYnVmZmVyX2J5dGVzX21heCA9IERGU0RNX01BWF9Q RVJJT0RTICogREZTRE1fTUFYX1BFUklPRF9TSVpFCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgdm9p ZCBzdG0zMl9hZGZzZG1fc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJl YW0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCj4+ICt7Cj4+ICvCoMKgwqDCoCBz dHJ1Y3Qgc3RtMzJfYWRmc2RtX3ByaXYgKnByaXYgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShk YWkpOwo+PiArCj4+ICvCoMKgwqDCoCBpZiAocHJpdi0+aWlvX2FjdGl2ZSkgewo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlpb19jaGFubmVsX3N0b3BfYWxsX2NiKHByaXYtPmlpb19jYik7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+aWlvX2FjdGl2ZSA9IGZhbHNlOwo+ PiArwqDCoMKgwqAgfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHN0bTMyX2FkZnNkbV9kYWlf cHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCj4+ICt7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3Qgc3RtMzJf YWRmc2RtX3ByaXYgKnByaXYgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOwo+PiArwqDC oMKgwqAgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgwqAgcmV0ID0gaWlvX3dyaXRlX2NoYW5uZWxf YXR0cmlidXRlKHByaXYtPmlpb19jaCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Vic3RyZWFt LT5ydW50aW1lLT5yYXRlLCAwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBJSU9fQ0hBTl9JTkZP X1NBTVBfRlJFUSk7Cj4+ICvCoMKgwqDCoCBpZiAocmV0IDwgMCkgewo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRldl9lcnIoZGFpLT5kZXYsICIlczogRmFpbGVkIHRvIHNldCAlZCBzYW1w bGluZyByYXRlXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBfX2Z1bmNfXywgc3Vic3RyZWFtLT5ydW50aW1lLT5yYXRlKTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoCBp ZiAoIXByaXYtPmlpb19hY3RpdmUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQg PSBpaW9fY2hhbm5lbF9zdGFydF9hbGxfY2IocHJpdi0+aWlvX2NiKTsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAoIXJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcHJpdi0+aWlvX2FjdGl2ZSA9IHRydWU7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkZXZfZXJyKGRhaS0+ZGV2LCAiJXM6IElJTyBjaGFubmVsIHN0YXJ0IGZhaWxlZCAoJWQpXG4i LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgX19mdW5jX18sIHJldCk7Cj4+ICvCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgIHJl dHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgc3RtMzJfYWRmc2RtX3NldF9zeXNj bGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBjbGtfaWQsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25l ZCBpbnQgZnJlcSwgaW50IGRpcikKPj4gK3sKPj4gK8KgwqDCoMKgIHN0cnVjdCBzdG0zMl9hZGZz ZG1fcHJpdiAqcHJpdiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7Cj4+ICvCoMKgwqDC oCBzc2l6ZV90IHNpemU7Cj4+ICsKPj4gK8KgwqDCoMKgIGRldl9kYmcoZGFpLT5kZXYsICIlczog RW50ZXIgZm9yIGZyZXEgJWRcbiIsIF9fZnVuY19fLCBmcmVxKTsKPj4gKwo+PiArwqDCoMKgwqAg LyogU2V0IElJTyBmcmVxdWVuY3kgaWYgQ09ERUMgaXMgbWFzdGVyIGFzIGNsb2NrIGNvbWVzIGZy b20gU1BJX0lOKi8KPj4gK8KgwqDCoMKgIGlmIChkaXIgPT0gU05EX1NPQ19DTE9DS19JTikgewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNoYXIgc3RyX2ZyZXFbMTBdOwo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc25wcmludGYoc3RyX2ZyZXEsIHNpemVvZihzdHJfZnJl cSksICIlZFxuIiwgZnJlcSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZSA9IGlp b193cml0ZV9jaGFubmVsX2V4dF9pbmZvKHByaXYtPmlpb19jaCwgInNwaV9jbGtfZnJlcSIsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJfZnJlcSwgc2l6ZW9mKHN0 cl9mcmVxKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHNpemUgIT0gc2l6ZW9m KHN0cl9mcmVxKSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkZXZfZXJyKGRhaS0+ZGV2LCAiJXM6IEZhaWxlZCB0byBzZXQgU1BJIGNsb2NrXG4iLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg X19mdW5jX18pOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDC oCB9Cj4+ICvCoMKgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0 cnVjdCBzbmRfc29jX2RhaV9vcHMgc3RtMzJfYWRmc2RtX2RhaV9vcHMgPSB7Cj4+ICvCoMKgwqDC oCAuc2h1dGRvd24gPSBzdG0zMl9hZGZzZG1fc2h1dGRvd24sCj4+ICvCoMKgwqDCoCAucHJlcGFy ZSA9IHN0bTMyX2FkZnNkbV9kYWlfcHJlcGFyZSwKPj4gK8KgwqDCoMKgIC5zZXRfc3lzY2xrID0g c3RtMzJfYWRmc2RtX3NldF9zeXNjbGssCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHNuZF9zb2NfZGFpX2RyaXZlciBzdG0zMl9hZGZzZG1fZGFpID0gewo+PiArwqDCoMKgwqAg LmNhcHR1cmUgPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuY2hhbm5l bHNfbWluID0gMSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5jaGFubmVs c19tYXggPSAxLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLmZvcm1hdHMg PSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC5yYXRlcyA9IChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTYw MDAgfAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBTTkRSVl9QQ01fUkFURV8zMjAwMCksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB9LAo+PiArwqDCoMKgwqAgLm9wcyA9ICZzdG0zMl9hZGZzZG1fZGFpX29wcywKPj4g K307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVy IHN0bTMyX2FkZnNkbV9kYWlfY29tcG9uZW50ID0gewo+PiArwqDCoMKgwqAgLm5hbWUgPSAic3Rt MzJfZGZzZG1fYXVkaW8iLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGludCBzdG0zMl9hZnNkbV9w Y21fY2IoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIHZvaWQgKnByaXZhdGUpCj4+ICt7 Cj4+ICvCoMKgwqDCoCBzdHJ1Y3Qgc3RtMzJfYWRmc2RtX3ByaXYgKnByaXYgPSBwcml2YXRlOwo+ PiArwqDCoMKgwqAgc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHByaXYtPnN1YnN0 cmVhbS0+cHJpdmF0ZV9kYXRhOwo+PiArwqDCoMKgwqAgdTggKnBjbV9idWZmID0gcHJpdi0+cGNt X2J1ZmY7Cj4+ICvCoMKgwqDCoCB1OCAqc3JjX2J1ZmYgPSAodTggKilkYXRhOwo+PiArwqDCoMKg wqAgdW5zaWduZWQgaW50IGJ1ZmZfc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhwcml2 LT5zdWJzdHJlYW0pOwo+PiArwqDCoMKgwqAgdW5zaWduZWQgaW50IHBlcmlvZF9zaXplID0gc25k X3BjbV9saWJfcGVyaW9kX2J5dGVzKHByaXYtPnN1YnN0cmVhbSk7Cj4+ICvCoMKgwqDCoCB1bnNp Z25lZCBpbnQgb2xkX3BvcyA9IHByaXYtPnBvczsKPj4gK8KgwqDCoMKgIHVuc2lnbmVkIGludCBj dXJfc2l6ZSA9IHNpemU7Cj4+ICsKPj4gK8KgwqDCoMKgIGRldl9kYmcocnRkLT5kZXYsICIlczog YnVmZl9hZGQgOiVwLCBwb3MgPSAlZCwgc2l6ZSA9ICVsdVxuIiwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBfX2Z1bmNfXywgJnBjbV9idWZmW3ByaXYtPnBvc10sIHByaXYtPnBvcywgc2l6 ZSk7Cj4+ICsKPj4gK8KgwqDCoMKgIGlmICgocHJpdi0+cG9zICsgc2l6ZSkgPiBidWZmX3NpemUp IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW1jcHkoJnBjbV9idWZmW3ByaXYtPnBv c10sIHNyY19idWZmLCBidWZmX3NpemUgLSBwcml2LT5wb3MpOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGN1cl9zaXplIC09IGJ1ZmZfc2l6ZSAtIHByaXYtPnBvczsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwcml2LT5wb3MgPSAwOwo+PiArwqDCoMKgwqAgfQo+PiArCj4+ICvC oMKgwqDCoCBtZW1jcHkoJnBjbV9idWZmW3ByaXYtPnBvc10sICZzcmNfYnVmZltzaXplIC0gY3Vy X3NpemVdLCBjdXJfc2l6ZSk7Cj4+ICvCoMKgwqDCoCBwcml2LT5wb3MgPSAocHJpdi0+cG9zICsg Y3VyX3NpemUpICUgYnVmZl9zaXplOwo+PiArCj4+ICvCoMKgwqDCoCBpZiAoY3VyX3NpemUgIT0g c2l6ZSB8fCAob2xkX3BvcyAmJiAob2xkX3BvcyAlIHBlcmlvZF9zaXplIDwgc2l6ZSkpKQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNuZF9wY21fcGVyaW9kX2VsYXBzZWQocHJpdi0+c3Vi c3RyZWFtKTsKPj4gKwo+PiArwqDCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbnQgc3RtMzJfYWRmc2RtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJz dHJlYW0sIGludCBjbWQpCj4+ICt7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3Qgc25kX3NvY19wY21fcnVu dGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3Qg c3RtMzJfYWRmc2RtX3ByaXYgKnByaXYgPQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNu ZF9zb2NfZGFpX2dldF9kcnZkYXRhKHJ0ZC0+Y3B1X2RhaSk7Cj4+ICsKPj4gK8KgwqDCoMKgIHN3 aXRjaCAoY21kKSB7Cj4+ICvCoMKgwqDCoCBjYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgo+ PiArwqDCoMKgwqAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcHJpdi0+cG9zID0gMDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gc3RtMzJfZGZzZG1fZ2V0X2J1ZmZfY2IocHJpdi0+aWlvX2NoLT5pbmRpb19kZXYs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RtMzJfYWZzZG1fcGNtX2NiLCBwcml2KTsKPj4gK8KgwqDC oMKgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKPj4gK8KgwqDCoMKgIGNhc2UgU05E UlZfUENNX1RSSUdHRVJfU1RPUDoKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g c3RtMzJfZGZzZG1fcmVsZWFzZV9idWZmX2NiKHByaXYtPmlpb19jaC0+aW5kaW9fZGV2KTsKPj4g K8KgwqDCoMKgIGRlZmF1bHQ6Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1F SU5WQUw7Cj4+ICvCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgIHJldHVybiAwOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IHN0bTMyX2FkZnNkbV9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9z dWJzdHJlYW0gKnN1YnN0cmVhbSkKPj4gK3sKPj4gK8KgwqDCoMKgIHN0cnVjdCBzbmRfc29jX3Bj bV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKPj4gK8KgwqDCoMKgIHN0 cnVjdCBzdG0zMl9hZGZzZG1fcHJpdiAqcHJpdiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKHJ0 ZC0+Y3B1X2RhaSk7Cj4+ICvCoMKgwqDCoCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqDCoCByZXQg PcKgIHNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmc3RtMzJfYWRmc2Rt X3BjbV9odyk7Cj4+ICvCoMKgwqDCoCBpZiAoIXJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwcml2LT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07Cj4+ICsKPj4gK8KgwqDCoMKgIHJldHVy biByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgc3RtMzJfYWRmc2RtX3BjbV9jbG9zZShz dHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKPj4gK3sKPj4gK8KgwqDCoMKgIHN0 cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsK Pj4gK8KgwqDCoMKgIHN0cnVjdCBzdG0zMl9hZGZzZG1fcHJpdiAqcHJpdiA9Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc25kX3NvY19kYWlfZ2V0X2RydmRhdGEocnRkLT5jcHVfZGFpKTsK Pj4gKwo+PiArwqDCoMKgwqAgc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOwo+PiAr wqDCoMKgwqAgcHJpdi0+c3Vic3RyZWFtID0gTlVMTDsKPj4gKwo+PiArwqDCoMKgwqAgcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzdG0zMl9hZGZzZG1f cGNtX3BvaW50ZXIoCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgc25kX3BjbV9z dWJzdHJlYW0gKnN1YnN0cmVhbSkKPj4gK3sKPj4gK8KgwqDCoMKgIHN0cnVjdCBzbmRfc29jX3Bj bV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKPj4gK8KgwqDCoMKgIHN0 cnVjdCBzdG0zMl9hZGZzZG1fcHJpdiAqcHJpdiA9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc25kX3NvY19kYWlfZ2V0X2RydmRhdGEocnRkLT5jcHVfZGFpKTsKPj4gKwo+PiArwqDCoMKg wqAgcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIHByaXYtPnBvcyk7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgc3RtMzJfYWRmc2RtX3BjbV9od19wYXJhbXMoc3Ry dWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg c25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKPj4gK3sKPj4gK8KgwqDCoMKgIHN0cnVjdCBzbmRf c29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKPj4gK8KgwqDC oMKgIHN0cnVjdCBzdG0zMl9hZGZzZG1fcHJpdiAqcHJpdiA9Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc25kX3NvY19kYWlfZ2V0X2RydmRhdGEocnRkLT5jcHVfZGFpKTsKPj4gK8KgwqDC oMKgIGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoMKgIHJldCA9wqAgc25kX3BjbV9saWJfbWFsbG9j X3BhZ2VzKHN1YnN0cmVhbSwgcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpKTsKPj4gK8KgwqDC oMKgIGlmIChyZXQgPCAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7 Cj4+ICvCoMKgwqDCoCBwcml2LT5wY21fYnVmZiA9IHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2Fy ZWE7Cj4+ICsKPj4gK8KgwqDCoMKgIHJldHVybiBpaW9fY2hhbm5lbF9jYl9zZXRfYnVmZmVyX3dh dGVybWFyayhwcml2LT5paW9fY2IsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHBhcmFtc19wZXJpb2Rfc2l6ZShwYXJhbXMpKTsKPj4gK30KPj4gKwo+PiArc3RhdGlj IGludCBzdG0zMl9hZGZzZG1fcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpz dWJzdHJlYW0pCj4+ICt7Cj4+ICvCoMKgwqDCoCBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0 cmVhbSk7Cj4+ICsKPj4gK8KgwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg c3RydWN0IHNuZF9wY21fb3BzIHN0bTMyX2FkZnNkbV9wY21fb3BzID0gewo+PiArwqDCoMKgwqAg Lm9wZW7CoMKgwqDCoMKgwqDCoMKgwqDCoCA9IHN0bTMyX2FkZnNkbV9wY21fb3BlbiwKPj4gK8Kg wqDCoMKgIC5jbG9zZcKgwqDCoMKgwqDCoMKgwqDCoCA9IHN0bTMyX2FkZnNkbV9wY21fY2xvc2Us Cj4+ICvCoMKgwqDCoCAuaHdfcGFyYW1zwqDCoMKgwqDCoCA9IHN0bTMyX2FkZnNkbV9wY21faHdf cGFyYW1zLAo+PiArwqDCoMKgwqAgLmh3X2ZyZWXCoMKgwqDCoMKgwqDCoCA9IHN0bTMyX2FkZnNk bV9wY21faHdfZnJlZSwKPj4gK8KgwqDCoMKgIC50cmlnZ2VywqDCoMKgwqDCoMKgwqAgPSBzdG0z Ml9hZGZzZG1fdHJpZ2dlciwKPj4gK8KgwqDCoMKgIC5wb2ludGVywqDCoMKgwqDCoMKgwqAgPSBz dG0zMl9hZGZzZG1fcGNtX3BvaW50ZXIsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IHN0bTMy X2FkZnNkbV9wY21fbmV3KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCj4+ICt7Cj4+ ICvCoMKgwqDCoCBzdHJ1Y3Qgc25kX3BjbSAqcGNtID0gcnRkLT5wY207Cj4+ICvCoMKgwqDCoCBz dHJ1Y3Qgc3RtMzJfYWRmc2RtX3ByaXYgKnByaXYgPQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKHJ0ZC0+Y3B1X2RhaSk7Cj4+ICvCoMKgwqDCoCB1 bnNpZ25lZCBpbnQgc2l6ZSA9IERGU0RNX01BWF9QRVJJT0RTICogREZTRE1fTUFYX1BFUklPRF9T SVpFOwo+PiArwqDCoMKgwqAgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgwqAgLyoKPj4gK8KgwqDC oMKgwqAgKiBGSVhNRSA6Cj4+ICvCoMKgwqDCoMKgICogQSBwbGF0Zm9ybSBhcyBiZWVuIHJlZ2lz dGVyZWQgcGVyIERBSS4KPj4gK8KgwqDCoMKgwqAgKiBJbiBzb2NfbmV3X3BjbSBmdW5jdGlvbiwg cGNtX25ldyBjYWxsYmFjayBpcyBjYWxsZWQgZm9yIGVhY2gKPj4gK8KgwqDCoMKgwqAgKiBjb21w b25lbnQgb2YgdGhlIHNvdW5kIGNhcmQuIFNvIGlmIG4gZGFpIGxpbmtzIGFyZSBjcmVhdGVkIHRo aXMKPj4gK8KgwqDCoMKgwqAgKiBmdW5jdGlvbiBpcyBjYWxsZWQgbiB0aW1lcy4KPj4gK8KgwqDC oMKgwqAgKi8KPj4gK8KgwqDCoMKgIGlmIChwcml2LT5hbGxvY2F0ZWQpCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+ICsKPj4gK8KgwqDCoMKgIHJldCA9IHNuZF9wY21f bGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+ZGV2LCBzaXpl LCBzaXplKTsKPj4gK8KgwqDCoMKgIGlmICghcmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHByaXYtPmFsbG9jYXRlZCA9IHRydWU7Cj4+ICsKPj4gK8KgwqDCoMKgIHJldHVybiByZXQ7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHN0bTMyX2FkZnNkbV9wY21fZnJlZShzdHJ1Y3Qg c25kX3BjbSAqcGNtKQo+PiArewo+PiArwqDCoMKgwqAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFt ICpzdWJzdHJlYW07Cj4+ICvCoMKgwqDCoCBzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRk Owo+PiArwqDCoMKgwqAgc3RydWN0IHN0bTMyX2FkZnNkbV9wcml2ICpwcml2Owo+PiArCj4+ICvC oMKgwqDCoCBzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJF XS5zdWJzdHJlYW07Cj4+ICvCoMKgwqDCoCBpZiAoc3Vic3RyZWFtKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcHJpdiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKHJ0ZC0+Y3B1 X2RhaSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzbmRfcGNtX2xpYl9wcmVh bGxvY2F0ZV9mcmVlX2Zvcl9hbGwocGNtKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw cml2LT5hbGxvY2F0ZWQgPSBmYWxzZTsKPj4gK8KgwqDCoMKgIH0KPj4gK30KPj4gKwo+PiArc3Rh dGljIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtX2RyaXZlciBzdG0zMl9hZGZzZG1fc29jX3BsYXRm b3JtID0gewo+PiArwqDCoMKgwqAgLm9wc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAmc3RtMzJf YWRmc2RtX3BjbV9vcHMsCj4+ICvCoMKgwqDCoCAucGNtX25ld8KgwqDCoMKgwqDCoMKgID0gc3Rt MzJfYWRmc2RtX3BjbV9uZXcsCj4+ICvCoMKgwqDCoCAucGNtX2ZyZWXCoMKgwqDCoMKgwqAgPSBz dG0zMl9hZGZzZG1fcGNtX2ZyZWUsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCBzdG0zMl9hZGZzZG1fb2ZfbWF0Y2hbXSA9IHsKPj4gK8KgwqDCoMKgIHsu Y29tcGF0aWJsZSA9ICJzdCxzdG0zMmg3LWRmc2RtLWRhaSJ9LAo+PiArwqDCoMKgwqAge30KPj4g K307Cj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdG0zMl9hZGZzZG1fb2ZfbWF0Y2gpOwo+ PiArCj4+ICtzdGF0aWMgaW50IHN0bTMyX2FkZnNkbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQo+PiArewo+PiArwqDCoMKgwqAgc3RydWN0IHN0bTMyX2FkZnNkbV9wcml2ICpw cml2Owo+PiArwqDCoMKgwqAgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgwqAgcHJpdiA9IGRldm1f a3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDC oMKgIGlmICghcHJpdikKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01F TTsKPj4gKwo+PiArwqDCoMKgwqAgcHJpdi0+ZGV2ID0gJnBkZXYtPmRldjsKPj4gK8KgwqDCoMKg IHByaXYtPmRhaV9kcnYgPSBzdG0zMl9hZGZzZG1fZGFpOwo+PiArCj4+ICvCoMKgwqDCoCBkZXZf c2V0X2RydmRhdGEoJnBkZXYtPmRldiwgcHJpdik7Cj4+ICsKPj4gK8KgwqDCoMKgIHJldCA9IGRl dm1fc25kX3NvY19yZWdpc3Rlcl9jb21wb25lbnQoJnBkZXYtPmRldiwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAmc3RtMzJfYWRmc2RtX2RhaV9jb21wb25lbnQsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJnByaXYtPmRhaV9kcnYsIDEpOwo+PiArwqDCoMKgwqAgaWYg KHJldCA8IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gKwo+ PiArwqDCoMKgwqAgLyogQXNzb2NpYXRlIGlpbyBjaGFubmVsICovCj4+ICvCoMKgwqDCoCBwcml2 LT5paW9fY2jCoCA9IGRldm1faWlvX2NoYW5uZWxfZ2V0X2FsbCgmcGRldi0+ZGV2KTsKPj4gK8Kg wqDCoMKgIGlmIChJU19FUlIocHJpdi0+aWlvX2NoKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gUFRSX0VSUihwcml2LT5paW9fY2gpOwo+PiArCj4+ICvCoMKgwqDCoCBwcml2 LT5paW9fY2IgPSBpaW9fY2hhbm5lbF9nZXRfYWxsX2NiKCZwZGV2LT5kZXYsIE5VTEwsIE5VTEwp Owo+PiArwqDCoMKgwqAgaWYgKElTX0VSUihwcml2LT5paW9fY2IpKQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKHByaXYtPmlpb19jaCk7Cj4+ICsKPj4gK8KgwqDC oMKgIHJldCA9IGRldm1fc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2LAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc3RtMzJfYWRmc2RtX3NvY19wbGF0Zm9ybSk7Cj4+ ICvCoMKgwqDCoCBpZiAocmV0IDwgMCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZf ZXJyKCZwZGV2LT5kZXYsICIlczogRmFpbGVkIHRvIHJlZ2lzdGVyIFBDTSBwbGF0Zm9ybVxuIiwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18pOwo+ PiArCj4+ICvCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBzdG0zMl9hZGZzZG1fZHJpdmVyID0gewo+PiArwqDCoMKgwqAgLmRy aXZlciA9IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAubmFtZSA9IFNUTTMy X0FERlNETV9EUlZfTkFNRSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAub2Zf bWF0Y2hfdGFibGUgPSBzdG0zMl9hZGZzZG1fb2ZfbWF0Y2gsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfSwKPj4gK8KgwqDCoMKgIC5wcm9iZSA9IHN0bTMyX2FkZnNkbV9wcm9i ZSwKPj4gK307Cj4+ICsKPj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3RtMzJfYWRmc2RtX2Ry aXZlcik7Cj4+ICsKPj4gK01PRFVMRV9ERVNDUklQVElPTigic3RtMzIgREZTRE0gREFJIGRyaXZl ciIpOwo+PiArTU9EVUxFX0FVVEhPUigiQXJuYXVkIFBvdWxpcXVlbiA8YXJuYXVkLnBvdWxpcXVl bkBzdC5jb20+Iik7Cj4+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4+ICtNT0RVTEVfQUxJ QVMoInBsYXRmb3JtOiIgU1RNMzJfQURGU0RNX0RSVl9OQU1FKTsKPiAKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWxzYS1kZXZlbCBtYWlsaW5nIGxpc3QK QWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCmh0dHA6Ly9tYWlsbWFuLmFsc2EtcHJvamVjdC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbHNhLWRldmVsCg==